ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTY1ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzODQ5ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NjLWF4aXMuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NTQ4NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVkMDQ0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU2F0IERlYyAyMiAxOTo1MDoyNCBFU1QgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZkMTA0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mjk6MTQgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzA0MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozOSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVkODIyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDQucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5hcGFjaGUuYW50O2J1bmRsZS12ZXJzaW9uPSJbMS42LjUsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuYXBhY2hlLmF4aXM7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDIuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGI1NjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19idWphdmEucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBTY2VuYXJpb1R5cGUgUkVRVUlSRUQuIERpZmZlcmVudGlhdGVzIGZyb20gImNsaWVudCIgc2NlbmFyaW8uCi1TY2VuYXJpb1R5cGU9c2VydmljZQotCi0hLS0gSW5pdGlhbFNlbGVjdGlvbiBSRVFVSVJFRC4gIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gdGhlIGlucHV0IFdTREwgb3IgSmF2YQotSW5pdGlhbFNlbGVjdGlvbj0vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9wYWNrYWdlbmFtZS9teVNlcnZpY2UuamF2YQotCi0hLS1VdGlsaXR5IHByb3BlcnR5IHZhbHVlcyAtIHVzZSB0aGVzZSB0byBsaXN0IHZhbGlkIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIS0tIFNlcnZpY2UuUnVudGltZUlkLCBTZXJ2aWNlLlNlcnZlcklkIAotTGlzdFJ1bnRpbWVzPXRydWUKLUxpc3RTZXJ2ZXJzPXRydWUKLSEtLSBWZXJib3NlIHdpbGwgbGlzdCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZXJyb3JzIGlmIHNldCB0byB0cnVlCi1WZXJib3NlPXRydWUKLQotIS0tICBTZXJ2aWNlLlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCi1TZXJ2aWNlLlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCi0hLS0gU2VydmljZS5TZXJ2ZXJJZCAtICBJRCBvZiB0YXJnZXQgc2VydmVyIAotU2VydmljZS5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MAotIS0tIFNlcnZpY2UuVHlwZUlkIC0gICJUb3AgRG93biBFSkIiIG9yICJCb3R0b20gVXAgRUpCIiAgCi0hLS0gSmF2YSBCZWFuIGlzIGRlZmF1bHQgZm9yIGJvdGggVG9wIERvd24gYW5kIEJvdHRvbSBVcAotIS0tIFNlcnZpY2UuVHlwZUlkPVRvcCBEb3duIEVKQgotCi0hLS0gU2VydmljZVByb2plY3ROYW1lIC0gIS0tdHlwZTpTdHJpbmcgLSBuYW1lIG9mIFNlcnZpY2UgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZyAgICAKLSEtLVNlcnZpY2VQcm9qZWN0TmFtZT1zZXJ2aWNlUHJvamVjdE5hbWUKLSEtLSBTZXJ2aWNlRWFyUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZwotIS0tU2VydmljZUVhclByb2plY3ROYW1lPXNlcnZpY2VFYXJQcm9qZWN0TmFtZQotCi0hLS0gTWFwcGluZ3MKLSEtLSBUb3AgZG93biBvciBib3R0b20gdXAgc2NlbmFyaW8uIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLgotIS0tIFRvcCBEb3duOiBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgSmF2YSB0ZW1wbGF0ZSBjbGFzc2VzLgotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IG5hbWVzcGFjZT1wYWNrYWdlICAKLSEtLSBCb3R0b20gVXA6IE1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIFdTREwuCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZSAKLSEtLU1hcHBpbmdzPS90ZXN0UHJvai9tYXBwaW5ncy9tYXBwaW5ncy50eHQKLQotIS0tIEphdmFPdXRwdXQKLSEtLSBUb3AgZG93biAtIFN0cmluZzogdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgZm9yIGEgSmF2YSBzb3VyY2UgZm9sZGVyIGZvciB0aGUgZ2VuZXJhdGVkIEphdmEgY29kZSAtIG11c3QgYmUgZXhpc3Rpbmcgd29ya3NwYWNlIHNvdXJjZSBmb2xkZXIKLSEtLUphdmFPdXRwdXQ9L3Byb2plY3ROYW1lL0phdmFTb3VyY2UKLQotIS0tIE1ldGhvZHMKLSEtLSBCb3R0b20gdXAgLSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzIChpLmUuIG1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMikpIHRvIGJlIGV4cG9zZWQgaW4gb3V0cHV0IFdTREwuICBJZiBubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4KLSEtLSBNZXRob2RzPQotCi0hLS0gU3R5bGUKLSEtLSBCb3R0b20gdXAgLSBTdHJpbmc6IG9uZSBvZjogUlBDLCBET0NVTUVOVCwgV1JBUFBFRAotIS0tU3R5bGU9RE9DVU1FTlQKLQotIS0tIFVzZQotIS0tIEJvdHRvbSB1cCAtIFN0cmluZzogb25lIG9mOiBMSVRFUkFMLCBFTkNPREVEIAotIS0tVXNlPUxJVEVSQUwKLQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gb3ZlcndyaXRlIGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdC4gdHlwZTpib29sZWFuIAotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkPXRydWUKLQotIS0tQ3JlYXRlRm9sZGVyc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSBjcmVhdGUgZm9sZGVycyBuZWNlc3NhcnkgZHVyaW5nIGZpbGUgZ2VuZXJhdGlvbiB0eXBlOmJvb2xlYW4KLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2J1amF2YS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfYnVqYXZhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmOTQyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfYnVqYXZhLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBkZWZhdWx0PSJtYWluIiBiYXNlZGlyPSIuIj4KLQotPGVjaG8gbWVzc2FnZT0icHVsbGluZyBpbiBwcm9wZXJ0eSBmaWxlcyIvPgotPHByb3BlcnR5IGZpbGU9ImF4aXNfYnVqYXZhLnByb3BlcnRpZXMiLz4KLQkKLTxlY2hvIG1lc3NhZ2U9ImNhbGxpbmcgdGhlIHdlYiBzZXJ2aWNlcyBnZW5lcmF0aW9uIGFudCB0YXNrOiBheGlzX2J1amF2YSIvPgotIDx0YXJnZXQgbmFtZT0ibWFpbiIgPgotICAJIDx3c2dlbi8+Ci0gIDwvdGFyZ2V0PgotICAKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19jbGllbnQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19jbGllbnQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIzY2E0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfY2xpZW50LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0hLS1TY2VuYXJpb1R5cGUgUkVRVUlSRUQuIERpZmZlcmVudGlhdGVzIGZyb20gInNlcnZpY2UiIHNjZW5hcmlvLgotU2NlbmFyaW9UeXBlPWNsaWVudAotCi0hLS1Jbml0aWFsU2VsZWN0aW9uIFJFUVVJUkVELiAgV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgaW5wdXQgV1NETCBvciBKYXZhLgotSW5pdGlhbFNlbGVjdGlvbj0vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvd3NkbC9teVNlcnZpY2Uud3NkbAotCi0hLS1VdGlsaXR5IHByb3BlcnR5IHZhbHVlcyAtIHVzZSB0aGVzZSB0byBsaXN0IHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIS0tIENsaWVudC5SdW50aW1lSWQsIENsaWVudC5TZXJ2ZXJJZCAKLUxpc3RSdW50aW1lcz10cnVlCi1MaXN0U2VydmVycz10cnVlCi0hLS0gVmVyYm9zZSB3aWxsIGxpc3QgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyBhcyB3ZWxsIGFzIGVycm9ycyBpZiBzZXQgdG8gdHJ1ZQotVmVyYm9zZT10cnVlCi0KLSAKLSEtLUNsaWVudC5SdW50aW1lSWQgLSBJRCBvZiB3ZWIgc2VydmljZSBydW50aW1lIAotQ2xpZW50LlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCi0hLS1DbGllbnQuU2VydmVySWQgLSBJRCBvZiB0YXJnZXQgc2VydmVyIAotQ2xpZW50LlNlcnZlcklkPW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwCi0KLSEtLUNsaWVudFByb2plY3ROYW1lIC0gbmFtZSBvZiBDbGllbnQgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgY2xpZW50IHByb2plY3QgYSAKLSEtLSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0hLS1DbGllbnRQcm9qZWN0TmFtZT1jbGllbnRQcm9qZWN0TmFtZQotCi0hLS1DbGllbnRFYXJQcm9qZWN0TmFtZS0gbmFtZSBvZiBDbGllbnQgRUFSIHByb2plY3QgLSBzZXQgb25seSBpZiBhcHBsaWNhYmxlIGZvciBzZWxlY3RlZCBzZXJ2ZXIgdHlwZQotIS0tQ2xpZW50RWFyUHJvamVjdE5hbWU9Y2xpZW50RUFSUHJvamVjdE5hbWUKLQotIS0tQ2xpZW50Q29tcG9uZW50VHlwZSAtIHR5cGUgb2YgQ2xpZW50IHByb2plY3QgLSB0aGUgZm9sbG93aW5nIGFyZSB2YWxpZCBBeGlzIHRlbXBsYXRlczogdGVtcGxhdGUuanN0LndlYiBhbmQgdGVtcGxhdGUuanN0LnV0aWxpdHkKLSEtLUNsaWVudENvbXBvbmVudFR5cGU9dGVtcGxhdGUuanN0LndlYgotCi0hLS0gQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MgLSBzZXQgdG8gdHJ1ZSB0byBzdXBwbHkgcGFja2FnZS1uYW1lc3BhY2UgbWFwcGluZ3MgdHlwZTogYm9vbGVhbgotIS0tQ3VzdG9taXplQ2xpZW50TWFwcGluZ3M9ZmFsc2UgIAotICAgIAotIS0tIE1hcHBpbmdzIAotIS0tIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzCi0hLS0gTWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFja2FnZSBuYW1lcyBvZiB0aGUgZ2VuZXJhdGVkIEphdmEgY2xhc3Nlcy4KLSEtLSBOZWVkIG5vdCBiZSBzZXQgaWYgQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MgaXMgZmFsc2UgIAotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IHBhY2thZ2UgPSBuYW1lc3BhY2UuCi0hLS1NYXBwaW5ncz0vdGVzdFByb2ovbWFwcGluZ3MvbWFwcGluZ3MudHh0Ci0KLSEtLU92ZXJ3cml0ZUZpbGVzRW5hYmxlZCAtIHNldCB0byB0cnVlIHRvIG92ZXJ3cml0ZSBmaWxlcyB0aGF0IGFscmVhZHkgZXhpc3QuIHR5cGU6Ym9vbGVhbiAKLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLSBPdmVyd3JpdGVGaWxlc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DcmVhdGVGb2xkZXJzRW5hYmxlZCAtIHNldCB0byB0cnVlIGNyZWF0ZSBmb2xkZXJzIG5lY2Vzc2FyeSBkdXJpbmcgZmlsZSBnZW5lcmF0aW9uIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIENyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIENoZWNrb3V0RmlsZXNFbmFibGVkPXRydWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9hbnQvYXhpc19jbGllbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2NsaWVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYmZlMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX2NsaWVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgZGVmYXVsdD0ibWFpbiIgYmFzZWRpcj0iLiI+Ci0KLTxlY2hvIG1lc3NhZ2U9InB1bGxpbmcgaW4gcHJvcGVydHkgZmlsZXMiLz4KLTxwcm9wZXJ0eSBmaWxlPSJheGlzX2NsaWVudC5wcm9wZXJ0aWVzIi8+Ci0JCi08ZWNobyBtZXNzYWdlPSJjYWxsaW5nIHRoZSB3ZWIgc2VydmljZXMgZ2VuZXJhdGlvbiBhbnQgdGFzazogYXhpc19jbGllbnQiLz4KLSA8dGFyZ2V0IG5hbWU9Im1haW4iID4KLSAgCSA8d3NnZW4vPgotICA8L3RhcmdldD4KLSAgCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNGE2ZjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX3RkamF2YS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIS0tIFNjZW5hcmlvVHlwZSBSRVFVSVJFRC4gRGlmZmVyZW50aWF0ZXMgZnJvbSAiY2xpZW50IiBzY2VuYXJpby4KLVNjZW5hcmlvVHlwZT1zZXJ2aWNlCi0KLSEtLSBJbml0aWFsU2VsZWN0aW9uIFJFUVVJUkVELiAgV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgaW5wdXQgV1NETCBvciBKYXZhCi1Jbml0aWFsU2VsZWN0aW9uPS9keW5hbWljV2ViUHJvamVjdE5hbWUvV2ViQ29udGVudC9teVNlcnZpY2Uud3NkbAotCi0hLS1VdGlsaXR5IHByb3BlcnR5IHZhbHVlcyAtIHVzZSB0aGVzZSB0byBsaXN0IHZhbGlkIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIS0tIFNlcnZpY2UuUnVudGltZUlkLCBTZXJ2aWNlLlNlcnZlcklkIAotTGlzdFJ1bnRpbWVzPXRydWUKLUxpc3RTZXJ2ZXJzPXRydWUKLSEtLSBWZXJib3NlIHdpbGwgbGlzdCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZXJyb3JzIGlmIHNldCB0byB0cnVlCi1WZXJib3NlPXRydWUKLQotIS0tICBTZXJ2aWNlLlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCi1TZXJ2aWNlLlJ1bnRpbWVJZD1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUCi0hLS0gU2VydmljZS5TZXJ2ZXJJZCAtICBJRCBvZiB0YXJnZXQgc2VydmVyIAotU2VydmljZS5TZXJ2ZXJJZD1vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MAotIS0tIFNlcnZpY2UuVHlwZUlkIC0gICJUb3AgRG93biBFSkIiIG9yICJCb3R0b20gVXAgRUpCIiAgCi0hLS0gSmF2YSBCZWFuIGlzIGRlZmF1bHQgZm9yIGJvdGggVG9wIERvd24gYW5kIEJvdHRvbSBVcAotIS0tIFNlcnZpY2UuVHlwZUlkPVRvcCBEb3duIEVKQgotCi0hLS0gU2VydmljZVByb2plY3ROYW1lIC0gIS0tdHlwZTpTdHJpbmcgLSBuYW1lIG9mIFNlcnZpY2UgcHJvamVjdCAtIHRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgc2VydmljZSBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZyAgICAKLSEtLVNlcnZpY2VQcm9qZWN0TmFtZT1zZXJ2aWNlUHJvamVjdE5hbWUKLSEtLSBTZXJ2aWNlRWFyUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIEVBUiBwcm9qZWN0IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gIHR5cGU6IFN0cmluZwotIS0tU2VydmljZUVhclByb2plY3ROYW1lPXNlcnZpY2VFYXJQcm9qZWN0TmFtZQotCi0hLS0gTWFwcGluZ3MKLSEtLSBUb3AgZG93biBvciBib3R0b20gdXAgc2NlbmFyaW8uIFdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLgotIS0tIFRvcCBEb3duOiBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgSmF2YSB0ZW1wbGF0ZSBjbGFzc2VzLgotIS0tIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IG5hbWVzcGFjZT1wYWNrYWdlICAKLSEtLSBCb3R0b20gVXA6IE1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIFdTREwuCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZSAKLSEtLU1hcHBpbmdzPS90ZXN0UHJvai9tYXBwaW5ncy9tYXBwaW5ncy50eHQKLQotIS0tIEphdmFPdXRwdXQKLSEtLSBUb3AgZG93biAtIFN0cmluZzogdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgZm9yIGEgSmF2YSBzb3VyY2UgZm9sZGVyIGZvciB0aGUgZ2VuZXJhdGVkIEphdmEgY29kZSAtIG11c3QgYmUgZXhpc3Rpbmcgd29ya3NwYWNlIHNvdXJjZSBmb2xkZXIKLSEtLUphdmFPdXRwdXQ9L3Byb2plY3ROYW1lL0phdmFTb3VyY2UKLQotIS0tIE1ldGhvZHMKLSEtLSBCb3R0b20gdXAgLSBzcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIG9mIG1ldGhvZCBzaWduYXR1cmVzIChpLmUuIG1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMikpIHRvIGJlIGV4cG9zZWQgaW4gb3V0cHV0IFdTREwuICBJZiBubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4KLSEtLSBNZXRob2RzPQotCi0hLS0gU3R5bGUKLSEtLSBCb3R0b20gdXAgLSBTdHJpbmc6IG9uZSBvZjogUlBDLCBET0NVTUVOVCwgV1JBUFBFRAotIS0tU3R5bGU9RE9DVU1FTlQKLQotIS0tIFVzZQotIS0tIEJvdHRvbSB1cCAtIFN0cmluZzogb25lIG9mOiBMSVRFUkFMLCBFTkNPREVEIAotIS0tVXNlPUxJVEVSQUwKLQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gb3ZlcndyaXRlIGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdC4gdHlwZTpib29sZWFuIAotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkPXRydWUKLQotIS0tQ3JlYXRlRm9sZGVyc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSBjcmVhdGUgZm9sZGVycyBuZWNlc3NhcnkgZHVyaW5nIGZpbGUgZ2VuZXJhdGlvbiB0eXBlOmJvb2xlYW4KLSEtLSBub3RlIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgc2V0IHRvIHRydWUKLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkPXRydWUKLQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBjaGVjayBvdXQgZmlsZXMgd2l0aCBubyB3YXJuaW5nIHRvIHRoZSB1c2VyIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tQ2hlY2tvdXRGaWxlc0VuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2FudC9heGlzX3RkamF2YS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI5MTRiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYW50L2F4aXNfdGRqYXZhLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBkZWZhdWx0PSJtYWluIiBiYXNlZGlyPSIuIj4KLQotPGVjaG8gbWVzc2FnZT0icHVsbGluZyBpbiBwcm9wZXJ0eSBmaWxlcyIvPgotPHByb3BlcnR5IGZpbGU9ImF4aXNfdGRqYXZhLnByb3BlcnRpZXMiLz4KLQkKLTxlY2hvIG1lc3NhZ2U9ImNhbGxpbmcgdGhlIHdlYiBzZXJ2aWNlcyBnZW5lcmF0aW9uIGFudCB0YXNrOiBheGlzX3RkamF2YSIvPgotIDx0YXJnZXQgbmFtZT0ibWFpbiIgPgotICAJIDx3c2dlbi8+Ci0gIDwvdGFyZ2V0PgotICAKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYTJiYWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwODAzMDEgICAyMjA4Nzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFudC8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NmNmU2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBzZXJ2aWNlIEF4aXMgQ29uc3VtcHRpb24gQ29yZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLXhwV1NERENvbnRlbnRUeXBlID0gQXhpcyBXZWIgU2VydmljZSBEZXBsb3ltZW50IERlc2NyaXB0b3IKLQotWF9XRUJfU0VSVklDRV9MT0NBVE9SX0FYSVM9QXBhY2hlIEF4aXMgV2ViIFNlcnZpY2UgTG9jYXRvcgotWF9XRUJfU0VSVklDRV9MT0NBVE9SX0NBVEVHT1JZX0FYSVM9QXBhY2hlIEF4aXMgQ29tcG9uZW50cwotCi0KLSNydW50aW1lIGxhYmVscwotCi1MQUJFTF9SVU5USU1FX0FYSVM9QXBhY2hlIEF4aXMKLQotI3NjZW5hcmlvIGxhYmVscwotCi1MQUJFTF9CT1RUT01fVVBfSkFWQV9CRUFOPUJvdHRvbSB1cCBKYXZhIGJlYW4gV2ViIFNlcnZpY2UKLUxBQkVMX1RPUF9ET1dOX0pBVkFfQkVBTj1Ub3AgZG93biBKYXZhIGJlYW4gV2ViIFNlcnZpY2UKLUxBQkVMX0NMSUVOVD1DbGllbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNjM4ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24ud3NmaW5kZXIiPgotICAgICAgPHdzZmluZGVyCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS53c2ZpbmRlci5XU0ZpbmRlckF4aXMiCi0gICAgICAgICAgICBuYW1lPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLndzZmluZGVyLldTRmluZGVyQXhpcyIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLndzZmluZGVyLldTRmluZGVyQXhpcyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLndzZmluZGVyLldTRmluZGVyQXhpcyI+Ci0gICAgICA8L3dzZmluZGVyPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gRXh0ZW5zaW9uIHByb3ZpZGluZyB3b3Jrc3BhY2UgV1NETCBkaXNjb3ZlcnkgLS0+ICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciI+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlTG9jYXRvckNhdGVnb3J5Ci0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmNhdGVnb3J5LmF4aXMiCi0gICAgICAgICAgICBsYWJlbD0iJVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9DQVRFR09SWV9BWElTIi8+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlTG9jYXRvcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvci5BeGlzV2ViU2VydmljZUxvY2F0b3IiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmF4aXMiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmNhdGVnb3J5LmF4aXMiCi0gICAgICAgICAgICBsYWJlbD0iJVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9BWElTIj4KLSAgICAgIDwvd2ViU2VydmljZUxvY2F0b3I+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0KLSAgIDwhLS0gZGVmaW5lIGEgd3NkZCBmaWxlIHR5cGUgZm9yIEF4aXMgV2ViIFNlcnZpY2UgRGVwbG95bWVudCBEZXNjcmlwdG9ycyAtLT4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnRlYW0uY29yZS5maWxlVHlwZXMiPgotICAgICAgPGZpbGVUeXBlcwotICAgICAgICAgICAgdHlwZT0idGV4dCIKLSAgICAgICAgICAgIGV4dGVuc2lvbj0id3NkZCI+Ci0gICAgICA8L2ZpbGVUeXBlcz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8IS0tIGRlZmluZSBhIHdzZGQgY29udGVudCB0eXBlIGZvciBBeGlzIFdlYiBTZXJ2aWNlIERlcGxveW1lbnQgRGVzY3JpcHRvcnMgLS0+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzIj4KLSAgICAgIDxjb250ZW50LXR5cGUKLSAgICAgICAgICAgIHByaW9yaXR5PSJoaWdoIgotICAgICAgICAgICAgbmFtZT0iJXhwV1NERENvbnRlbnRUeXBlIgotICAgICAgICAgICAgaWQ9IndzZGRzb3VyY2UiCi0gICAgICAgICAgICBiYXNlLXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0gICAgICAgICAgICBkZWZhdWx0LWNoYXJzZXQ9IlVURi04IgotICAgICAgICAgICAgZmlsZS1leHRlbnNpb25zPSJ3c2RkIiAvPgotICAgPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIAotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLmFudGZpbGVzIj4KLSAgCQk8YW50ZmlsZXMKLSAgICAJCWlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUVG9wSmF2YSIKLSAgICAJCXJ1bnRpbWVpZD0iYXhpcyIKLSAgICAJCXBsdWdpbmxvY2F0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIgotICAgIAkJcGF0aD0iYW50L2F4aXNfdGRqYXZhLnByb3BlcnRpZXMiCi0gICAgCQl3c2dlbnBhdGg9ImFudC9heGlzX3RkamF2YS54bWwiCi0gICAgCQlydW50aW1lbGFiZWw9IiVMQUJFTF9SVU5USU1FX0FYSVMiCi0gICAgCQlzY2VuYXJpb2xhYmVsPSIlTEFCRUxfVE9QX0RPV05fSkFWQV9CRUFOIj4KLSAgCQk8L2FudGZpbGVzPgotICAJCTxhbnRmaWxlcwotICAgIAkJaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlRCVUphdmEiCi0gICAgCQlydW50aW1laWQ9ImF4aXMiCi0gICAgCQlwbHVnaW5sb2NhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZSIKLSAgICAJCXBhdGg9ImFudC9heGlzX2J1amF2YS5wcm9wZXJ0aWVzIgotICAgIAkJd3NnZW5wYXRoPSJhbnQvYXhpc19idWphdmEueG1sIgotICAgIAkJcnVudGltZWxhYmVsPSIlTEFCRUxfUlVOVElNRV9BWElTIgotICAgIAkJc2NlbmFyaW9sYWJlbD0iJUxBQkVMX0JPVFRPTV9VUF9KQVZBX0JFQU4iPgotICAJCTwvYW50ZmlsZXM+Ci0gIAkJPGFudGZpbGVzCi0gICAgCQlpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVENsaWVudCIKLSAgICAJCXJ1bnRpbWVpZD0iYXhpcyIKLSAgICAJCXBsdWdpbmxvY2F0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIgotICAgIAkJcGF0aD0iYW50L2F4aXNfY2xpZW50LnByb3BlcnRpZXMiCi0gICAgCQl3c2dlbnBhdGg9ImFudC9heGlzX2NsaWVudC54bWwiCi0gICAgCQlydW50aW1lbGFiZWw9IiVMQUJFTF9SVU5USU1FX0FYSVMiCi0gICAgCQlzY2VuYXJpb2xhYmVsPSIlTEFCRUxfQ0xJRU5UIj4KLSAgCQk8L2FudGZpbGVzPgotICAJPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvQXhpc0NvbnN1bXB0aW9uQ29yZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTgzZmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA0MTIgICAxNzcwMDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGZvciBBeGlzRGVwbG95Q29tbWFuZAotIwotTVNHX0VSUk9SX1BST0pFQ1RfVVJMX1BBUkFNX05PVF9TRVQ9SVdBQjAwNTRFIFdlYiBwcm9qZWN0IFVSTCBmb3IgZGVwbG95bWVudCBvZiBXZWIgc2VydmljZSBpcyBub3Qgc2V0IGluIEF4aXNEZXBsb3lDb21tYW5kCi1NU0dfRVJST1JfREVQTE9ZX0ZJTEVfUEFSQU1fTk9UX1NFVD1JV0FCMDQ4OEUgTG9jYXRpb24gb2YgQXhpcyBkZXBsb3ltZW50IGZpbGUgaXMgbm90IHNldCBpbiBBeGlzRGVwbG95Q29tbWFuZAotTVNHX0VSUk9SX0FYSVNfREVQTE9ZPUlXQUIwNDg5RSBFcnJvciB3aGVuIGRlcGxveWluZyBXZWIgc2VydmljZSB0byBBeGlzIHJ1bnRpbWUKLU1TR19BWElTX0RFUExPWT1EZXBsb3lpbmcgV2ViIHNlcnZpY2UgdG8gQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudAotCi0jCi0jIE1lc3NhZ2VzIGZvciBKYXZhMldTRExDb21tYW5kCi0jCi1NU0dfR0VORVJBVEVfV1NETD1HZW5lcmF0aW5nIFdTREwgZmlsZTogezB9Ci1NU0dfRVJST1JfSkFWQV9XU0RMX0dFTkVSQVRFPUlXQUIwMzk4RSBFcnJvciBpbiBnZW5lcmF0aW5nIFdTREwgZnJvbSBKYXZhOiAKLQotIwotIyBNZXNzYWdlcyBmb3IgV1NETDJKYXZhQ29tbWFuZAotIwotTVNHX1BBUlNJTkdfV1NETD1QYXJzaW5nIFdTREwgZmlsZTogezB9Ci1NU0dfRVJST1JfV1NETF9KQVZBX0dFTkVSQVRFPUlXQUIwMzk5RSBFcnJvciBpbiBnZW5lcmF0aW5nIEphdmEgZnJvbSBXU0RMOiAKLU1TR19FUlJPUl9NT1ZFX1JFU09VUkNFPUlXQUIwNTIzRSBFcnJvciBtb3ZpbmcgcmVzb3VyY2U6IHswfQotTVNHX0VSUk9SX0NSRUFURV9URU1QX0RJUj1FcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5Ci0KLSMKLSMgTWVzc2FnZXMgY29tbW9uIGZvciBhbGwKLSMKLU1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVD1JV0FCMDM5N0UgSmF2YVdTRExQYXJhbSBub3Qgc2V0Ci1NU0dfRVJST1JfRk9MREVSX05PVF9GT1VORD1PdXRwdXQgZm9sZGVyOiB7MH0gd2FzIG5vdCBmb3VuZC4KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmRhODk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMiAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QUk9KRUNUX1VSTF9QQVJBTV9OT1RfU0VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9ERVBMT1lfRklMRV9QQVJBTV9OT1RfU0VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BWElTX0RFUExPWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQVhJU19ERVBMT1k7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0dFTkVSQVRFX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pBVkFfV1NETF9HRU5FUkFURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfUEFSU0lOR19XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XU0RMX0pBVkFfR0VORVJBVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9NT1ZFX1JFU09VUkNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DUkVBVEVfVEVNUF9ESVI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GT0xERVJfTk9UX0ZPVU5EOwotICAKLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0F4aXNEZXBsb3lDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbWFuZC9BeGlzRGVwbG95Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTBhMWFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0F4aXNEZXBsb3lDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMjI3ICAgMTE5OTY0IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkFkbWluQ2xpZW50OwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy50b29scy5hbnQuYXhpcy5BZG1pbkNsaWVudFRhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXJnZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuZmlsdGVycy5TdHJpbmdJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLS8qKgotICogQ29tbWFuZHMgYXJlIGV4ZWN1dGFibGUsIHVuZG9hYmxlLCByZWRvYWJsZSBvYmplY3RzLiBFdmVyeSBDb21tYW5kIGhhcyBhIG5hbWUgYW5kIGEgZGVzY3JpcHRpb24uCi0gKi8KLQotcHVibGljIGNsYXNzIEF4aXNEZXBsb3lDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9FWFQgPSAiL3NlcnZpY2VzL0FkbWluU2VydmljZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVkVSX0NPTkZJRyA9ICJzZXJ2ZXItY29uZmlnLndzZGQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotICBwcml2YXRlIFN0cmluZyBwcm9qZWN0XzsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXhpc0RlcGxveUNvbW1hbmQuCi0gICAqIEBwYXJhbSBTdHJpbmcgZGVzY3JpcHRpb24KLSAgICogQHBhcmFtIFN0cmluZyBuYW1lCi0gICAqIAotICAgKi8KLSAgcHVibGljIEF4aXNEZXBsb3lDb21tYW5kKCkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgQXhpc0RlcGxveUNvbW1hbmQoU3RyaW5nIHByb2plY3QgKXsKLQkgIHRoaXMucHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIGlmIChqYXZhV1NETFBhcmFtID09IG51bGwpCi0gICAgeyAgICAgCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0gICAgfQotCi0gICAgaWYgKGphdmFXU0RMUGFyYW0uZ2V0UHJvamVjdFVSTCgpID09IG51bGwgfHwgamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkuZXF1YWxzKCIiKSkKLSAgICB7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfVVJMX1BBUkFNX05PVF9TRVQpOwotICAgIH0KLQotICAgIGlmIChqYXZhV1NETFBhcmFtLmdldERlcGxveW1lbnRGaWxlcygpID09IG51bGwgfHwgamF2YVdTRExQYXJhbS5nZXREZXBsb3ltZW50RmlsZXMoKS5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9ERVBMT1lfRklMRV9QQVJBTV9OT1RfU0VUKTsKLSAgICB9Ci0KLSAgICBQcm9ncmVzc1V0aWxzLnJlcG9ydChtb25pdG9yLCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0FYSVNfREVQTE9ZKTsKLQotICAgIElTdGF0dXMgc3RhdHVzID0gZXhlY3V0ZUFudFRhc2sobW9uaXRvcik7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICB7Ci0gICAgCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgcHJvdGVjdGVkIElTdGF0dXMgZXhlY3V0ZUFudFRhc2soSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotICB7Ci0gICAgZmluYWwgY2xhc3MgRGVwbG95VGFzayBleHRlbmRzIEFkbWluQ2xpZW50VGFzawotICAgIHsKLSAgICAgIHB1YmxpYyBEZXBsb3lUYXNrKCkKLSAgICAgIHsKLQkJc3VwZXIuc2V0UHJvamVjdChuZXcgUHJvamVjdCgpKTsKLQkJc3VwZXIuZ2V0UHJvamVjdCgpLmluaXQoKTsKLQkJc3VwZXIuc2V0VGFza1R5cGUoImF4aXMiKTsgLy8kTk9OLU5MUy0xJAotCQlzdXBlci5zZXRUYXNrTmFtZSgiYXhpcy1hZG1pbiIpOyAvLyROT04tTkxTLTEkCi0JCXN1cGVyLnNldE93bmluZ1RhcmdldChuZXcgVGFyZ2V0KCkpOwotICAgICAgfQotICAgIH0KLQotICAgIERlcGxveVRhc2sgYWRtaW5DbGllbnQgPSBuZXcgRGVwbG95VGFzaygpOwotICAgIFN0cmluZyB1cmwgPSBqYXZhV1NETFBhcmFtLmdldFByb2plY3RVUkwoKSArIFNFUlZJQ0VfRVhUOwotICAgIGFkbWluQ2xpZW50LnNldFVybCh1cmwpOwotICAgIGFkbWluQ2xpZW50LnNldFhtbEZpbGUobmV3IEZpbGUoamF2YVdTRExQYXJhbS5nZXREZXBsb3ltZW50RmlsZXMoKVswXSkpOwotCi0gICAgLy8gU2luY2UgdGhlIGFkbWluIHNlcnZlciBtYXkgbm90IGJlIGF2YWlsYWJsZSByaWdodCBhd2F5IHdlIHdpbGwgdHJ5Ci0gICAgLy8gc2V2ZXJhbCB0aW1lcyB0byBleGVjdXRlIGl0LgotICAgIHRyeQotICAgIHsKLSAgICAgIEJ1aWxkRXhjZXB0aW9uIGxhc3RFeGNlcHRpb24gPSBudWxsOwotICAgICAgCi0gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgMjA7IGluZGV4KysgKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGxhc3RFeGNlcHRpb24gPSBudWxsOwotICAgICAgICAgIGFkbWluQ2xpZW50LmV4ZWN1dGUoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggQnVpbGRFeGNlcHRpb24gZXhjICkKLSAgICAgICAgewotICAgICAgICAgIGxhc3RFeGNlcHRpb24gPSBleGM7Ci0gICAgICAgICAgCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgVGhyZWFkLnNsZWVwKCAyMDAgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIHRocmVhZEV4Y2VwdGlvbiAgKQotICAgICAgICAgIHsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIElmIG5vIGV4Y2VwdGlvbiBvY2N1cmVkIHRoZW4gd2Ugc2hvdWxkIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KLSAgICAgICAgaWYoIGxhc3RFeGNlcHRpb24gPT0gbnVsbCApIGJyZWFrOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBJZiBhZnRlciBtYW55IHRyaWVzIHdlIHN0aWxsIGdldCBhbiBleGNlcHRpb24sIHRoZW4gd2Ugd2lsbCByZSB0aHJvdyBpdC4KLSAgICAgIGlmKCBsYXN0RXhjZXB0aW9uICE9IG51bGwgKSB0aHJvdyBsYXN0RXhjZXB0aW9uOwotICAgICAgCi0gICAgICByZXR1cm4gY3JlYXRlQ29uZmlnRmlsZShtb25pdG9yLCB1cmwpOwotICAgIH0KLSAgICBjYXRjaCAoQnVpbGRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGlmIChlLmdldENhdXNlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IGUuZ2V0Q2F1c2UoKS50b1N0cmluZygpOwotICAgICAgfQotICAgICAgCi0gICAgICBJU3RhdHVzW10gY2hpbGRTdGF0dXMgPSBuZXcgU3RhdHVzWzFdOwotICAgICAgY2hpbGRTdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggbWVzc2FnZSk7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMubXVsdGlTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9BWElTX0RFUExPWSwgY2hpbGRTdGF0dXMpOwotICAgIH0KLSAgfQotCi0gIC8qKiBDcmVhdGVzICdzZXJ2ZXItY29uZmlnLndzZGQnIGluIHRoZSBXZWJDb250ZW50IGZvbGRlciBpbiB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgcHJvamVjdCAKLSAgICogQHBhcmFtIG1vbml0b3IKLSAgICogQHBhcmFtIHVybAotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIElTdGF0dXMgY3JlYXRlQ29uZmlnRmlsZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIFN0cmluZyB1cmwpIHsKLQlBZG1pbkNsaWVudCBsaXN0QWRtaW4gPSBuZXcgQWRtaW5DbGllbnQoKTsKLQlTdHJpbmcgY29uZmlnID0gIiI7Ci0gICAgdHJ5IHsKLQkJY29uZmlnID0gbGlzdEFkbWluLnByb2Nlc3MobmV3IFN0cmluZ1tdIHsgIi1sIiArIHVybCwgImxpc3QiIH0pOwotCi0JCUlQYXRoIHdlYkluZlBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViSW5mUGF0aChSZXNvdXJjZXNQbHVnaW4KLQkJCQkJLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RfKSk7Ci0JCUlQYXRoIHJlbGF0aXZlU2VydmVyQ29uZmlnUGF0aCA9IHdlYkluZlBhdGguYXBwZW5kKFNFUlZFUl9DT05GSUcpOwotCQlJU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gZ2V0RW52aXJvbm1lbnQoKS5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0JCVJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpCi0JCQkJCS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCByZWxhdGl2ZVNlcnZlckNvbmZpZ1BhdGgsCi0JCQkJCW5ldyBTdHJpbmdJbnB1dFN0cmVhbShjb25maWcpLCBtb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7Ci0JICAgIGlmIChlLmdldENhdXNlKCkgIT0gbnVsbCkKLQkgICAgewotCSAgICAgICBtZXNzYWdlID0gZS5nZXRDYXVzZSgpLnRvU3RyaW5nKCk7Ci0JICAgIH0KLQkgICAgICAKLQkgICAgSVN0YXR1c1tdIGNoaWxkU3RhdHVzID0gbmV3IFN0YXR1c1sxXTsKLQkgICAgY2hpbGRTdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggbWVzc2FnZSk7Ci0JICAgIHJldHVybiBTdGF0dXNVdGlscy5tdWx0aVN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0FYSVNfREVQTE9ZLCBjaGlsZFN0YXR1cyk7Ci0JfQotCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pCi0gIHsKLSAgICB0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0dlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0dlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1NWEzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbWFuZC9HZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZDsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLkF4aXNFbmdpbmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnNlcnZlci5BeGlzU2VydmVyOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy50b29scy5hbnQuYXhpcy5BZG1pbkNsaWVudFRhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkNsYXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogQ29tbWFuZHMgYXJlIGV4ZWN1dGFibGUsIHVuZG9hYmxlLCByZWRvYWJsZSBvYmplY3RzLiBFdmVyeSBDb21tYW5kIGhhcyBhIG5hbWUgYW5kIGEgZGVzY3JpcHRpb24uCi0gKi8KLQotcHVibGljIGNsYXNzIEdlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLQotICBwcml2YXRlIFN0cmluZyBwcm9qZWN0TmFtZV87Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBWElTX1NFUlZFUl9DT05GSUdfRklMRSA9ICJheGlzLlNlcnZlckNvbmZpZ0ZpbGUiOwotICAKLSAgSUZvbGRlciBvdXRwdXRSb290OwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kLgotICogQHBhcmFtIFN0cmluZyBwcm9qZWN0TmFtZQotICAgKiAKLSAgICovCi0gIHB1YmxpYyBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kKFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0gICAgfQotCi0gICAgaWYgKGphdmFXU0RMUGFyYW0uZ2V0UHJvamVjdFVSTCgpID09IG51bGwgfHwgamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkuZXF1YWxzKCIiKSkKLSAgICB7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfVVJMX1BBUkFNX05PVF9TRVQpOwotICAgIH0KLQotICAgIGlmIChqYXZhV1NETFBhcmFtLmdldERlcGxveW1lbnRGaWxlcygpID09IG51bGwgfHwgamF2YVdTRExQYXJhbS5nZXREZXBsb3ltZW50RmlsZXMoKS5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoCi0gICAgICBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0RFUExPWV9GSUxFX1BBUkFNX05PVF9TRVQpOwotICAgIH0KLQotICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfQVhJU19ERVBMT1kpOwotCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBleGVjdXRlQWRtaW5UYXNrKCk7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICB7Ci0gICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgIH0gICAgCi0gICAgCi0gICAgc3RhdHVzID0gZXhlY3V0ZUFudFRhc2soKTsKLSAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgIHsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVN0YXR1cyBleGVjdXRlQW50VGFzaygpCi0gIHsKLSAgICBmaW5hbCBjbGFzcyBEZXBsb3lUYXNrIGV4dGVuZHMgQWRtaW5DbGllbnRUYXNrCi0gICAgewotICAgICAgcHVibGljIERlcGxveVRhc2soKQotICAgICAgewotICAgICAgICBzdXBlci5zZXRQcm9qZWN0KG5ldyBQcm9qZWN0KCkpOwotCQlzdXBlci5nZXRQcm9qZWN0KCkuaW5pdCgpOwotCQlzdXBlci5zZXRUYXNrVHlwZSgiYXhpcyIpOyAvLyROT04tTkxTLTEkCi0JCXN1cGVyLnNldFRhc2tOYW1lKCJheGlzLWFkbWluIik7IC8vJE5PTi1OTFMtMSQKLQkJc3VwZXIuc2V0T3duaW5nVGFyZ2V0KG5ldyBUYXJnZXQoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgRGVwbG95VGFzayBhZG1pbkNsaWVudCA9IG5ldyBEZXBsb3lUYXNrKCk7Ci0gICAgU3RyaW5nIHVybCA9IGphdmFXU0RMUGFyYW0uZ2V0UHJvamVjdFVSTCgpICsgQXhpc0RlcGxveUNvbW1hbmQuU0VSVklDRV9FWFQ7Ci0gICAgYWRtaW5DbGllbnQuc2V0VXJsKHVybCk7Ci0gICAgYWRtaW5DbGllbnQuc2V0WG1sRmlsZShuZXcgRmlsZShqYXZhV1NETFBhcmFtLmdldERlcGxveW1lbnRGaWxlcygpWzBdKSk7Ci0KLSAgICAvLyBTaW5jZSB0aGUgYWRtaW4gc2VydmVyIG1heSBub3QgYmUgYXZhaWxhYmxlIHJpZ2h0IGF3YXkgd2Ugd2lsbCB0cnkKLSAgICAvLyBzZXZlcmFsIHRpbWVzIHRvIGV4ZWN1dGUgaXQuCi0gICAgdHJ5Ci0gICAgewotICAgICAgQnVpbGRFeGNlcHRpb24gbGFzdEV4Y2VwdGlvbiA9IG51bGw7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCAyMDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgbGFzdEV4Y2VwdGlvbiA9IG51bGw7Ci0gICAgICAgICAgYWRtaW5DbGllbnQuZXhlY3V0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBCdWlsZEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgICAgbGFzdEV4Y2VwdGlvbiA9IGV4YzsKLSAgICAgICAgICAKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBUaHJlYWQuc2xlZXAoIDIwMCApOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gdGhyZWFkRXhjZXB0aW9uICApCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gSWYgbm8gZXhjZXB0aW9uIG9jY3VyZWQgdGhlbiB3ZSBzaG91bGQgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgotICAgICAgICBpZiggbGFzdEV4Y2VwdGlvbiA9PSBudWxsICkgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIElmIGFmdGVyIG1hbnkgdHJpZXMgd2Ugc3RpbGwgZ2V0IGFuIGV4Y2VwdGlvbiwgdGhlbiB3ZSB3aWxsIHJlIHRocm93IGl0LgotICAgICAgaWYoIGxhc3RFeGNlcHRpb24gIT0gbnVsbCApIHRocm93IGxhc3RFeGNlcHRpb247Ci0gICAgfQotICAgIGNhdGNoIChCdWlsZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBTdHJpbmcgbWVzc2FnZSA9IGUuZ2V0TWVzc2FnZSgpOwotICAgICAgaWYgKGUuZ2V0Q2F1c2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZS5nZXRDYXVzZSgpLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElTdGF0dXNbXSBjaGlsZFN0YXR1cyA9IG5ldyBTdGF0dXNbMV07Ci0gICAgICBjaGlsZFN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBtZXNzYWdlKTsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5tdWx0aVN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0FYSVNfREVQTE9ZLCBjaGlsZFN0YXR1cyk7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAKLQotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVN0YXR1cyBleGVjdXRlQWRtaW5UYXNrKCl7Ci0gICAgCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIC8vIGNoZWNrIGlmIHNlcnZlci1jb25maWcud3NkZCBleGlzdHMKLSAgICBJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBKMkVFVXRpbHMuZ2V0VmlydHVhbENvbXBvbmVudCggcHJvamVjdE5hbWVfICk7Ci0gICAgb3V0cHV0Um9vdCA9IEoyRUVVdGlscy5nZXRPdXRwdXRDb250YWluZXJSb290KCBjb21wb25lbnQgKTsKLSAgICBJUGF0aCBwYXRoID0gbmV3IFBhdGgoICJXRUItSU5GIiApLmFwcGVuZCggInNlcnZlci1jb25maWcud3NkZCIgKTsgICAgCi0gICAgSUZpbGUgZGVzY3JpcHRvckZpbGUgPSBvdXRwdXRSb290LmdldEZpbGUoIHBhdGggKTsKLSAgICAKLSAgICBpZiAoIWRlc2NyaXB0b3JGaWxlLmV4aXN0cygpKXsKLSAgICAgIHN0YXR1cyA9IGNyZWF0ZVNlcnZlckNvbmZpZ0ZpbGUoKTsKLSAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAKLSAgICAvLyBjaGVjayBpZiBkZXBsb3kud3NkZCBleGlzdHMKLSAgICBTdHJpbmcgZGVwbG95V1NERCA9IGphdmFXU0RMUGFyYW0uZ2V0RGVwbG95bWVudEZpbGVzKClbMF07Ci0gICAgRmlsZSBkZXBsb3lGaWxlID0gbmV3IEZpbGUoZGVwbG95V1NERCk7Ci0gICAgaWYgKGRlcGxveUZpbGU9PW51bGwgfHwgIWRlcGxveUZpbGUuZXhpc3RzKCkpewotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIC8vIGdldCBDbGFzc3BhdGgKLSAgICAgIFN0cmluZyBqYXJzQ1AgPSBuZXcgU3RyaW5nKCk7Ci0gICAgICAvLyBjbGFzc2VzIGRpcgotICAgICAgSVBhdGggY2xhc3Nlc1BhdGggPSBuZXcgUGF0aCgiV0VCLUlORiIpLmFwcGVuZCgiY2xhc3NlcyIpOwotICAgICAgSUZpbGUgY2xhc3Nlc0RpciA9IG91dHB1dFJvb3QuZ2V0RmlsZShjbGFzc2VzUGF0aCk7Ci0gICAgICBqYXJzQ1AgPSAiXCIiK2NsYXNzZXNEaXIuZ2V0UmF3TG9jYXRpb24oKS50b09TU3RyaW5nKCkrIlwiIjsKLSAgICAgIAotICAgICAgLy8gbGliIEpBUnMKLSAgICAgIElQYXRoIGxpYlBhdGggPSBuZXcgUGF0aCgiV0VCLUlORiIpLmFwcGVuZCgibGliIik7Ci0gICAgICBJRmlsZSBsaWJFbnRyeSA9IG91dHB1dFJvb3QuZ2V0RmlsZShsaWJQYXRoKTsKLSAgICAgIElGb2xkZXIgbGliRm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UobGliRW50cnkuZ2V0RnVsbFBhdGgoKSk7Ci0gICAgICBJUmVzb3VyY2VbXSBKQVJmaWxlcyA9IGxpYkZvbGRlci5tZW1iZXJzKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxKQVJmaWxlcy5sZW5ndGg7aSsrKXsKLSAgICAgICAgSVJlc291cmNlIHJlcyA9IEpBUmZpbGVzW2ldOwotICAgICAgICBpZiAocmVzLmdldEZpbGVFeHRlbnNpb24oKS5lcXVhbHMoImphciIpKXsKLSAgICAgICAgICBqYXJzQ1AgPSBqYXJzQ1AgKyAiO1wiIisgcmVzLmdldFJhd0xvY2F0aW9uKCkudG9PU1N0cmluZygpKyJcIiI7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gZm9ybSBhbmQgcnVuIHV0aWxzLkFkbWluIGNvbW1hbmQKLSAgICAgIFN0cmluZyBhZG1pbkNvbW1hbmQgPSBuZXcgU3RyaW5nKCJqYXZhIC1EYXhpcy5TZXJ2ZXJDb25maWdGaWxlPSIrIGRlc2NyaXB0b3JGaWxlLmdldFJhd0xvY2F0aW9uKCkudG9PU1N0cmluZygpIAotICAgICAgICAgICsiIC1jcCAiK2phcnNDUCsiIG9yZy5hcGFjaGUuYXhpcy51dGlscy5BZG1pbiBzZXJ2ZXIgIitkZXBsb3lGaWxlLmdldENhbm9uaWNhbFBhdGgoKSk7Ci0gICAgICBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKGFkbWluQ29tbWFuZCk7Ci0KLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpewotICAgICAgU3lzdGVtLnNldFByb3BlcnR5KEFYSVNfU0VSVkVSX0NPTkZJR19GSUxFLCJzZXJ2ZXItY29uaWZnLndzZGQiKTsgICAgICAKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBTdHJpbmcgbWVzc2FnZSA9IGUuZ2V0TWVzc2FnZSgpOwotICAgICAgaWYgKGUuZ2V0Q2F1c2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZS5nZXRDYXVzZSgpLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElTdGF0dXNbXSBjaGlsZFN0YXR1cyA9IG5ldyBTdGF0dXNbMV07Ci0gICAgICBjaGlsZFN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBtZXNzYWdlKTsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5tdWx0aVN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0FYSVNfREVQTE9ZLCBjaGlsZFN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIC8qKnQKLSAgICogQ3JlYXRlcyB0aGUgaW5pdGlhbCBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZSBmcm9tIGEgdGVtcGxhdGUgaW4gQXhpcwotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIElTdGF0dXMgY3JlYXRlU2VydmVyQ29uZmlnRmlsZSgpewotICAgIHRyeXsKLQotICAgICAgLy8gc2VydmVyLWNvbmZpZy53c2RkIGZpbGUKLSAgICAgIElQYXRoICAgICAgICAgICAgIHBhdGggICAgICAgICAgID0gbmV3IFBhdGgoICJXRUItSU5GIiApLmFwcGVuZCggInNlcnZlci1jb25maWcud3NkZCIgKTsgICAgCi0gICAgICBJRmlsZSAgICAgICAgICAgICBkZXNjcmlwdG9yRmlsZSA9IG91dHB1dFJvb3QuZ2V0RmlsZSggcGF0aCApOyAgICAgIAotCi0gICAgICAvLyBjcmVhdGUgdGhlIGluaXRpYWwgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUKLSAgICAgIEF4aXNFbmdpbmUgcHJlRW5naW5lID0gbmV3IEF4aXNTZXJ2ZXIoKTsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gQ2xhc3NVdGlscy5nZXRSZXNvdXJjZUFzU3RyZWFtKHByZUVuZ2luZS5nZXRDbGFzcygpLCAic2VydmVyLWNvbmZpZy53c2RkIik7Ci0gICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc2NyaXB0b3JGaWxlLmdldFJhd0xvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLSAgICAgIFJlc291cmNlVXRpbHMuY29weVN0cmVhbShpcywgZm9zKTsKLSAgICAgIGZvcy5jbG9zZSgpOwotICAgICAgCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoZS5nZXRDYXVzZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBlLmdldENhdXNlKCkudG9TdHJpbmcoKTsKLSAgICAgIH0KLQotICAgICAgSVN0YXR1c1tdIGNoaWxkU3RhdHVzID0gbmV3IFN0YXR1c1sxXTsKLSAgICAgIGNoaWxkU3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIG1lc3NhZ2UpOwotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfQVhJU19ERVBMT1ksIGNoaWxkU3RhdHVzKTsKLQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pCi0gIHsKLSAgICB0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0phdmEyV1NETENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0phdmEyV1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIxYWJlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbWFuZC9KYXZhMldTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTA2ICAgMTIxMTk5IGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIE34bGxlcgotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDgxMyAgIDE4ODk5OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnRvb2xzLmFudC53c2RsLkphdmEyV3NkbEFudFRhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnRvb2xzLmFudC53c2RsLk5hbWVzcGFjZU1hcHBpbmc7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0LkF4aXNFbWl0dGVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJEZWZhdWx0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Qcm9ncmVzc1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogQ29tbWFuZHMgYXJlIGV4ZWN1dGFibGUsIHVuZG9hYmxlLCByZWRvYWJsZSBvYmplY3RzLgotICogRXZlcnkgQ29tbWFuZCBoYXMgYSBuYW1lIGFuZCBhIGRlc2NyaXB0aW9uLgotICovCi0KLXB1YmxpYyBjbGFzcyBKYXZhMldTRExDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0JcHJpdmF0ZSBGaWxlIHRlbXBPdXRwdXRXc2RsRmlsZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBURU1QID0gInRlbXAiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgV1NETF9FWFQgPSAiLndzZGwiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgSmF2YTJXU0RMQ29tbWFuZCgpIHsKLQl9CQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBKYXZhMldTRExDb21tYW5kLgotCSAqLwotCXB1YmxpYyBKYXZhMldTRExDb21tYW5kKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy5qYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJSVN0YXR1cyBzdGF0dXM7Ci0JCWlmIChqYXZhV1NETFBhcmFtXyA9PSBudWxsKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCi0JCWlmIChqYXZhV1NETFBhcmFtXy5nZXRCZWFuTmFtZSgpID09IG51bGwpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLQkJUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19HRU5FUkFURV9XU0RMLCBqYXZhV1NETFBhcmFtXy5nZXRCZWFuTmFtZSgpICkpOwotCi0JCXJldHVybiBleGVjdXRlQW50VGFzayhlbnZpcm9ubWVudCwgbW9uaXRvcik7Ci0JfQotCi0JcHJvdGVjdGVkIElTdGF0dXMgZXhlY3V0ZUFudFRhc2soSUVudmlyb25tZW50IGVudmlyb25tZW50LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQotCQlmaW5hbCBjbGFzcyBFbWl0dGVyIGV4dGVuZHMgSmF2YTJXc2RsQW50VGFzayB7Ci0JCQlwdWJsaWMgRW1pdHRlcigpIHsKLQkJCQlzdXBlci5zZXRQcm9qZWN0KG5ldyBQcm9qZWN0KCkpOwotCQkJCXN1cGVyLmdldFByb2plY3QoKS5pbml0KCk7Ci0JCQkJc3VwZXIuc2V0VGFza1R5cGUoImF4aXMiKTsgLy8kTk9OLU5MUy0xJAotCQkJCXN1cGVyLnNldFRhc2tOYW1lKCJheGlzLWphdmEyd3NkbCIpOyAvLyROT04tTkxTLTEkCi0JCQkJc3VwZXIuc2V0T3duaW5nVGFyZ2V0KG5ldyBUYXJnZXQoKSk7Ci0JCQl9Ci0JCX0KLQotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCUlMb2cgZW52TG9nID0gZW52aXJvbm1lbnQuZ2V0TG9nKCk7Ci0JCUVtaXR0ZXIgZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7Ci0JCWVtaXR0ZXIuY3JlYXRlQ2xhc3NwYXRoKCkuc2V0UGF0aChqYXZhV1NETFBhcmFtXy5nZXRDbGFzc3BhdGgoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDA4LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiQ2xhc3MgUGF0aCA9ICIrIGphdmFXU0RMUGFyYW1fLmdldENsYXNzcGF0aCgpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0UG9ydFR5cGVOYW1lKGphdmFXU0RMUGFyYW1fLmdldFBvcnRUeXBlTmFtZSgpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMDksIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJQb3J0IFR5cGUgTmFtZSA9ICIrIGphdmFXU0RMUGFyYW1fLmdldFBvcnRUeXBlTmFtZSgpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0U2VydmljZUVsZW1lbnROYW1lKGphdmFXU0RMUGFyYW1fLmdldFNlcnZpY2VOYW1lKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxMCwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIlNlcnZpY2UgTmFtZSA9ICIrIGphdmFXU0RMUGFyYW1fLmdldFNlcnZpY2VOYW1lKCkpOwotCQkKLQkJZW1pdHRlci5zZXRMb2NhdGlvbihqYXZhV1NETFBhcmFtXy5nZXRVcmxMb2NhdGlvbigpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTEsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJVUkwgTG9jYXRpb24gPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRVcmxMb2NhdGlvbigpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0TWV0aG9kcyhqYXZhV1NETFBhcmFtXy5nZXRNZXRob2RTdHJpbmcoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDEyLCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiTWV0aG9kcyA9ICIrIGphdmFXU0RMUGFyYW1fLmdldE1ldGhvZFN0cmluZygpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0U3R5bGUoamF2YVdTRExQYXJhbV8uZ2V0U3R5bGUoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDEzLCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiU3R5bGUgPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRTdHlsZSgpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0VXNlKGphdmFXU0RMUGFyYW1fLmdldFVzZSgpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTQsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJVc2UgPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRVc2UoKSk7Ci0JCQkJCi0JCS8vIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRvIHVzZSBhcyBvdXRwdXQgZGlyZWN0b3J5IGZvciBqYXZhMndzZGwKLQkJSVBhdGggcGx1Z2luU3RhdGVMb2MgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFN0YXRlTG9jYXRpb24oKTsKLQkJRmlsZSB0ZW1wRGlyID0gbmV3IEZpbGUocGx1Z2luU3RhdGVMb2MudG9TdHJpbmcoKSk7Ci0JCUZpbGUgbmV3VGVtcEZpbGUgPSBudWxsOwotCQl0cnkgewotCQkJbmV3VGVtcEZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKFRFTVAsIFdTRExfRVhULCB0ZW1wRGlyKTsKLQkJCXRlbXBPdXRwdXRXc2RsRmlsZSA9IG5ld1RlbXBGaWxlOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJdGVtcE91dHB1dFdzZGxGaWxlID0gbmV3IEZpbGUgKHBsdWdpblN0YXRlTG9jLmFwcGVuZChURU1QK1dTRExfRVhUKS50b1N0cmluZygpKTsKLQkJfQotCi0JCWVtaXR0ZXIuc2V0T3V0cHV0KHRlbXBPdXRwdXRXc2RsRmlsZSk7Ci0JCQotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxNSwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIldTREwgTG9jYXRpb24gPSAiKyBqYXZhV1NETFBhcmFtXy5nZXRPdXRwdXRXc2RsTG9jYXRpb24oKSk7Ci0JCQotCQllbWl0dGVyLnNldE5hbWVzcGFjZShqYXZhV1NETFBhcmFtXy5nZXROYW1lc3BhY2UoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDE2LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiTmFtZSBTcGFjZSA9ICIrIGphdmFXU0RMUGFyYW1fLmdldE5hbWVzcGFjZSgpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0Q2xhc3NOYW1lKGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxNywgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIkJlYW4gbmFtZSA9ICIrIGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCkpOwotCQkKLQkJZW1pdHRlci5zZXRJbXBsQ2xhc3MoamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSk7Ci0JCQotCSAgICBBeGlzRW1pdHRlckNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0QXhpc0VtaXR0ZXJDb250ZXh0KCk7Ci0JICAgIAotCSAgICBpZiAoY29udGV4dC5pc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkgIT0gQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRVc2VJbmhlcml0ZWRNZXRob2RzRGVmYXVsdCgpKQotCSAgICB7Ci0JICAgIAllbWl0dGVyLnNldFVzZUluaGVyaXRlZE1ldGhvZHMoY29udGV4dC5pc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkpOwotCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwOTksIHRoaXMsICJleGVjdXRlQW50VGFzayIsICIgc2V0IFVzZUluaGVyaXRlZE1ldGhvZHMgOiAiICsgY29udGV4dC5pc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkgKTsKLQkgICAgfQotCQkKLQkJSGFzaE1hcCBtYXBwaW5ncyA9IGphdmFXU0RMUGFyYW1fLmdldE1hcHBpbmdzKCk7Ci0JCWlmKG1hcHBpbmdzICE9IG51bGwpewotCQkJSXRlcmF0b3Iga2V5cyA9IG1hcHBpbmdzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZShrZXlzLmhhc05leHQoKSl7Ci0JCQkJU3RyaW5nIHBha2FnZSA9IChTdHJpbmcpa2V5cy5uZXh0KCk7Ci0JCQkJU3RyaW5nIG5hbWVzcGFjZSA9IChTdHJpbmcpbWFwcGluZ3MuZ2V0KHBha2FnZSk7Ci0JCQkJTmFtZXNwYWNlTWFwcGluZyBtYXAgPSBuZXcgTmFtZXNwYWNlTWFwcGluZygpOwotCQkJCW1hcC5zZXRQYWNrYWdlKHBha2FnZSk7Ci0JCQkJbWFwLnNldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotCQkJCWVtaXR0ZXIuYWRkTWFwcGluZyhtYXApOwkJCi0JCQl9Ci0JCX0KLQkJCi0JCi0JCXRyeSB7Ci0JCQllbWl0dGVyLmV4ZWN1dGUoKTsKLQkJCXN0YXR1cyA9IG1vdmVHZW5lcmF0ZWRXU0RMKGVudmlyb25tZW50LCBtb25pdG9yKTsKLQkJfSBjYXRjaCAoQnVpbGRFeGNlcHRpb24gZSkgewotCQkJZW52TG9nLmxvZyhJTG9nLkVSUk9SLCA1MDE4LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCBlKTsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotCQkJQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfR0VORVJBVEUgKyAiICIgLy8kTk9OLU5MUy0xJAotCQkJK2UuZ2V0Q2F1c2UoKS50b1N0cmluZygpLCBlLmdldENhdXNlKCkpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCX0gZmluYWxseSB7Ci0JCWlmICh0ZW1wT3V0cHV0V3NkbEZpbGUuZXhpc3RzKCkpIHsKLQkJCXRlbXBPdXRwdXRXc2RsRmlsZS5kZWxldGUoKTsKLQkJfQotCX0KLQkJcmV0dXJuIHN0YXR1czsKLQotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBtb3ZlR2VuZXJhdGVkV1NETChJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCi0JCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlGaWxlSW5wdXRTdHJlYW0gZmluU3RyZWFtID0gbnVsbDsKLQkJCi0gICAgUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgICAgICAgPSAoKEJhc2VFY2xpcHNlRW52aXJvbm1lbnQpZW52aXJvbm1lbnQpLmdldFJlc291cmNlQ29udGV4dCgpOyAgICAgICAgCi0JCUlTdGF0dXNIYW5kbGVyICBzdGF0dXNIYW5kbGVyID0gZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpOwotCQkKLQkJU3RyaW5nIG91dHB1dFdzZGxMb2NhdGlvbiA9IGphdmFXU0RMUGFyYW1fLmdldE91dHB1dFdzZGxMb2NhdGlvbigpOwotCQlJUGF0aCB0YXJnZXRQYXRoID0gbmV3IFBhdGgob3V0cHV0V3NkbExvY2F0aW9uKTsKLQkJdHJ5IHsKLQkJCWZpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0odGVtcE91dHB1dFdzZGxGaWxlKTsKLQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCUZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGVBdExvY2F0aW9uKGNvbnRleHQsIHRhcmdldFBhdGgubWFrZUFic29sdXRlKCksIGZpblN0cmVhbSwKLQkJCQkJCW1vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotCQkJCWZpblN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9NT1ZFX1JFU09VUkNFLG5ldyBTdHJpbmdbXXtlLmdldExvY2FsaXplZE1lc3NhZ2UoKX0pLCBlKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQl9IGZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlpZiAoZmluU3RyZWFtICE9IG51bGwpIHsKLQkJCQkJZmluU3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCQotCXB1YmxpYyBTdGF0dXMgdW5kbyhJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0YXR1cyByZWRvKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIEByZXR1cm4gSmF2YVdTRExQYXJhbWV0ZXIKLQkgKi8KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW1fOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJtKSB7Ci0JCXRoaXMuamF2YVdTRExQYXJhbV8gPSBqYXZhV1NETFBhcm07Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0JewotCSAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZ2V0SmF2YVdTRExQYXJhbSgpLmdldE91dHB1dFdzZGxMb2NhdGlvbigpKTsgCi0JICAgIFN0cmluZyB1cmwgPSAiIjsKLQkJICB0cnkgewotCSAgICAJdXJsID0gZmlsZS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0JICAgIH0KLQkJICBjYXRjaChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVlKXt9Ci0JCXJldHVybiB1cmw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvV1NETDJKYXZhQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvV1NETDJKYXZhQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzU3NGIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL1dTREwySmF2YUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA2MDQwNCAgIDEzNDc5MSBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwODEzICAgMTg4OTk5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwOTI3ICAgMjA0NjQ5IGtlbHZpbmhjQGNhLmlibS5jb20gLSBLZWx2aW4gQ2hldW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlNjb3BlOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy53c2RsLnRvSmF2YS5FbWl0dGVyOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy53c2RsLnRvSmF2YS5HZW5lcmF0ZWRGaWxlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckRlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VFY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETDJKYXZhQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFUExPWV9UWVBFID0gImRlcGxveSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBVTkRFUExPWV9UWVBFID0gInVuZGVwbG95IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFRFTVAgPSAidGVtcCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLQlwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFBhc3N3b3JkOwotCXByaXZhdGUgTGlzdCBkZXBsb3lGaWxlczsKLQlwcml2YXRlIExpc3QgamF2YUZpbGVzOwotCXByaXZhdGUgRmlsZSB0ZW1wT3V0cHV0RmlsZTsKLQotCXB1YmxpYyBXU0RMMkphdmFDb21tYW5kKCkgewotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJSUxvZyBlbnZMb2cgPSBlbnZpcm9ubWVudC5nZXRMb2coKTsKLQkJSVN0YXR1cyBzdGF0dXM7Ci0JCWlmIChqYXZhV1NETFBhcmFtID09IG51bGwpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotCQkJCQlBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQkKLQkJaWYgKHdzZGxVUkkgIT0gbnVsbCkgLy9ib3R0b20gdXAgY2FzZSBoYXMgYWxyZWFkeSBoYXMgdGhlIGNvcnJlY3QgV1NETCBvbiBqYXZhV1NETFBhcmFtCi0JCXsKLQkJCWphdmFXU0RMUGFyYW0uc2V0SW5wdXRXc2RsTG9jYXRpb24od3NkbFVSSSk7Ci0JCX0KLQkJamF2YVdTRExQYXJhbS5zZXRIVFRQVXNlcm5hbWUoaHR0cEJhc2ljQXV0aFVzZXJuYW1lKTsKLQkJamF2YVdTRExQYXJhbS5zZXRIVFRQUGFzc3dvcmQoaHR0cEJhc2ljQXV0aFBhc3N3b3JkKTsKLQkJCi0JCUVtaXR0ZXIgd3NkbDJKYXZhID0gbmV3IEVtaXR0ZXIoKTsKLQkJaWYgKGVudkxvZy5pc0VuYWJsZWQoImVtaXR0ZXIiKSkgewotCQkJd3NkbDJKYXZhLnNldFZlcmJvc2UodHJ1ZSk7Ci0JCX0gZWxzZSB7Ci0JCQl3c2RsMkphdmEuc2V0VmVyYm9zZShmYWxzZSk7Ci0JCX0KLQkJYm9vbGVhbiBzZXJ2ZXJTaWRlID0gamF2YVdTRExQYXJhbS5nZXRTZXJ2ZXJTaWRlKCkgPT0gSmF2YVdTRExQYXJhbWV0ZXIuU0VSVkVSX1NJREVfQkVBTjsKLQkJd3NkbDJKYXZhLnNldFNlcnZlclNpZGUoc2VydmVyU2lkZSk7Ci0JCWlmIChzZXJ2ZXJTaWRlKSB7Ci0JCQl3c2RsMkphdmEuc2V0U2tlbGV0b25XYW50ZWQoamF2YVdTRExQYXJhbS5pc1NrZWxldG9uRGVwbG95KCkpOwotCQl9Ci0JCQotCQkvLyBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byB1c2UgYXMgb3V0cHV0IGRpcmVjdG9yeSBmb3Igd3NkbDJqYXZhCi0JCXRlbXBPdXRwdXRGaWxlID0gY3JlYXRlVGVtcERpcigpOwotCQl3c2RsMkphdmEuc2V0T3V0cHV0RGlyKHRlbXBPdXRwdXRGaWxlLnRvU3RyaW5nKCkpOwotCQkKLQkJdHJ5IHsKLQkJCWlmIChqYXZhV1NETFBhcmFtLmlzTWV0YUluZk9ubHkoKSkgewotCQkJCS8vIGZvciB0aGUgY2FzZSBKYXZhMldTREwtV1NETDJKYXZhCi0JCQkJSGFzaE1hcCBwY2sybnNNYXAgPSBqYXZhV1NETFBhcmFtLmdldE1hcHBpbmdzKCk7Ci0JCQkJaWYgKHBjazJuc01hcCAhPSBudWxsKSB7Ci0JCQkJCUhhc2hNYXAgbnMycGNrTWFwID0gbmV3IEhhc2hNYXAoKTsKLQkJCQkJSXRlcmF0b3Iga2V5cyA9IHBjazJuc01hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotCQkJCQl3aGlsZSAoa2V5cy5oYXNOZXh0KCkpIHsKLQkJCQkJCVN0cmluZyBwYWthZ2UgPSAoU3RyaW5nKSBrZXlzLm5leHQoKTsKLQkJCQkJCVN0cmluZyBuYW1lc3BhY2UgPSAoU3RyaW5nKSBwY2sybnNNYXAuZ2V0KHBha2FnZSk7Ci0JCQkJCQluczJwY2tNYXAucHV0KG5hbWVzcGFjZSwgcGFrYWdlKTsKLQkJCQkJfQotCQkJCQl3c2RsMkphdmEuc2V0TmFtZXNwYWNlTWFwKG5zMnBja01hcCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvLyAgZm9yIHRoZSBjYXNlIFdTREwySmF2YQkJCQotCQkJCWlmIChqYXZhV1NETFBhcmFtLmdldE1hcHBpbmdzKCkgIT0gbnVsbCkgewotCQkJCQl3c2RsMkphdmEuc2V0TmFtZXNwYWNlTWFwKGphdmFXU0RMUGFyYW0uZ2V0TWFwcGluZ3MoKSk7Ci0JCQkJfQotCQkJfQotCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTksIHRoaXMsICJleGVjdXRlIiwgIkphdmEgb3V0cHV0ID0gIiArIGphdmFXU0RMUGFyYW0uZ2V0SmF2YU91dHB1dCgpKTsKLQkJCWlmIChqYXZhV1NETFBhcmFtLmdldEhUVFBQYXNzd29yZCgpICE9IG51bGwpIHsKLQkJCQl3c2RsMkphdmEuc2V0UGFzc3dvcmQoamF2YVdTRExQYXJhbS5nZXRIVFRQUGFzc3dvcmQoKSk7Ci0JCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwODEsIHRoaXMsICJleGVjdXRlIiwgInBhc3N3b3JkOiAiICsgamF2YVdTRExQYXJhbS5nZXRIVFRQUGFzc3dvcmQoKSk7Ci0JCQl9Ci0JCQlpZiAoamF2YVdTRExQYXJhbS5nZXRIVFRQVXNlcm5hbWUoKSAhPSBudWxsKSB7Ci0JCQkJd3NkbDJKYXZhLnNldFVzZXJuYW1lKGphdmFXU0RMUGFyYW0uZ2V0SFRUUFVzZXJuYW1lKCkpOwotCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDgyLCB0aGlzLCAiZXhlY3V0ZSIsICJ1c2VybmFtZTogIiArIGphdmFXU0RMUGFyYW0uZ2V0SFRUUFVzZXJuYW1lKCkpOwotCQkJfQotCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMjAsIHRoaXMsICJleGVjdXRlIiwgIldTREwgTG9jYXRpb24gPSAiICsgamF2YVdTRExQYXJhbS5nZXRJbnB1dFdzZGxMb2NhdGlvbigpKTsKLQkJCQotCQkJLy8gSWYgdGltZW91dCBpcyBub3Qgc2V0LCB0aGUgZGVmYXVsdCB0aW1lb3V0IGZvciB3c2RsMmphdmEgaXMgNDUgc2Vjb25kcy4gIAotCQkJLy8gVGhlIHVzZXIgY2FuIGNoYW5nZSB0aGUgdGltZW91dCB2YWx1ZSBieSBzZXR0aW5nIAotCQkJLy8gIi1EQXhpc1dzZGwySmF2YVRpbWVvdXQ9PHRpbWVvdXRfdmFsdWVfaW5fbWlsbGlzZWNvbmRzPiIgYXMgVk0gYXJndW1lbnQKLQkJCS8vIHdoZW4gc3RhcnRpbmcgdGhlIEVjbGlwc2Ugd29ya2JlbmNoLgotCQkJLy8KLQkJCS8vIEZvciBleGFtcGxlLCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gc3RhcnQgdGhlIEVjbGlwc2Ugd29ya2JlbmNoIAotCQkJLy8gaW4gb3JkZXIgdG8gc2V0IHRoZSBBeGlzIFdTREwgdG8gSmF2YSBlbWl0dGVyIHRpbWVvdXQgdG8gNjAgc2Vjb25kczoKLQkJCS8vCi0JCQkvLyAJCWVjbGlwc2UgLXZtYXJncyAiLURBeGlzV3NkbDJKYXZhVGltZW91dD02MDAwMCIKLQkJCS8vCi0JCQkvLyBXaGVuIEF4aXNXc2RsMkphdmFUaW1lb3V0IGlzIHNldCwgdGhlIEF4aXMgZW1pdHRlciBwcmVmZXJlbmNlIHBhZ2UgdGltZW91dCBzZXR0aW5nIGlzIGlnbm9yZWQKLQkJICAgIEF4aXNFbWl0dGVyQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRBeGlzRW1pdHRlckNvbnRleHQoKTsKLQkJCVN0cmluZyB3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIkF4aXNXc2RsMkphdmFUaW1lb3V0Iik7Ci0JCQlsb25nIHRpbWVvdXQ7Ci0JCQlpZiAod3NkbDJKYXZhVGltZW91dFByb3BlcnR5ICE9IG51bGwpIHsKLQkJCQl0aW1lb3V0ID0gbmV3IEludGVnZXIod3NkbDJKYXZhVGltZW91dFByb3BlcnR5KS5sb25nVmFsdWUoKTsKLQkJCQl3c2RsMkphdmEuc2V0VGltZW91dCh0aW1lb3V0KTsKLQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTA5MSwgdGhpcywgImV4ZWN1dGUiLCAiQXhpc1dzZGwySmF2YVRpbWVvdXQgPSAiICsgdGltZW91dCk7CQkJCQotCQkJfQotCQkJZWxzZSBpZihjb250ZXh0LmdldFRpbWVPdXQoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCkpCi0JCQl7Ci0JCQkJdGltZW91dCA9IGNvbnRleHQuZ2V0VGltZU91dCgpID09IC0xID8gLTEgOiBjb250ZXh0LmdldFRpbWVPdXQoKSogMTAwMDsgCi0JCQkJd3NkbDJKYXZhLnNldFRpbWVvdXQodGltZW91dCk7Ci0JCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUxMDAsIHRoaXMsICJleGVjdXRlIiwgIlRpbWVvdXQgPSAiICsgdGltZW91dCk7Ci0JCQl9Ci0JCSAgICBpZiAoY29udGV4dC5nZXREZXBsb3lTY29wZVR5cGUoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldERlcGxveVNjb3BlRGVmYXVsdCgpKQotCQkgICAgewotCQkgICAgCXN3aXRjaCAoY29udGV4dC5nZXREZXBsb3lTY29wZVR5cGUoKSkKLQkJICAgIAl7Ci0JCSAgICAJCWNhc2UgQXhpc0VtaXR0ZXJDb250ZXh0LkRFUExPWV9TQ09QRV9UWVBFX0FQUExJQ0FUSU9OOgotCQkgICAgCQkJd3NkbDJKYXZhLnNldFNjb3BlKFNjb3BlLkFQUExJQ0FUSU9OKTsKLQkJCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MTAxLCB0aGlzLCAiZXhlY3V0ZSIsICIgRGVwbG95IFNjb3BlOiBBcHBsaWNhdGlvbiIgKTsKLQkJICAgIAkJCWJyZWFrOwotCQkgICAgCQljYXNlIEF4aXNFbWl0dGVyQ29udGV4dC5ERVBMT1lfU0NPUEVfVFlQRV9SRVFVRVNUOgotCQkgICAgCQkJd3NkbDJKYXZhLnNldFNjb3BlKFNjb3BlLlJFUVVFU1QpOwotCQkJCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUxMDIsIHRoaXMsICJleGVjdXRlIiwgIiBEZXBsb3kgU2NvcGU6IFJlcXVlc3QiICk7Ci0JCSAgICAJCQlicmVhazsKLQkJICAgIAkJY2FzZSBBeGlzRW1pdHRlckNvbnRleHQuREVQTE9ZX1NDT1BFX1RZUEVfU0VTU1RJT046Ci0JCSAgICAJCQl3c2RsMkphdmEuc2V0U2NvcGUoU2NvcGUuU0VTU0lPTik7Ci0JCQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTEwMywgdGhpcywgImV4ZWN1dGUiLCAiIERlcGxveSBTY29wZTogU2Vzc2lvbiIgKTsKLQkJICAgIAkJCWJyZWFrOwotCQkgICAgCQlkZWZhdWx0OgotCQkgICAgCX0KLQkJICAgIH0KLQkJICAgIAotCQkgICAgaWYgKGNvbnRleHQuaXNBbGxXYW50ZWRFbmFibGVkKCkgIT0gQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRBbGxXYW50ZWREZWZhdWx0KCkpCi0JCSAgICB7Ci0JCSAgICAJd3NkbDJKYXZhLnNldEFsbFdhbnRlZChjb250ZXh0LmlzQWxsV2FudGVkRW5hYmxlZCgpKTsKLQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTEwNCwgdGhpcywgImV4ZWN1dGUiLCAiIHNldCBBbGxXYW50ZWQgOiAiICsgY29udGV4dC5pc0FsbFdhbnRlZEVuYWJsZWQoKSApOwotCQkgICAgfQotCi0JCSAgICBpZiAoY29udGV4dC5pc0hlbHBlcldhbnRlZEVuYWJsZWQoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldEhlbHBlcldhbnRlZERlZmF1bHQoKSkKLQkJICAgIHsKLQkJICAgIAl3c2RsMkphdmEuc2V0SGVscGVyV2FudGVkKGNvbnRleHQuaXNIZWxwZXJXYW50ZWRFbmFibGVkKCkpOwotCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MTA1LCB0aGlzLCAiZXhlY3V0ZSIsICIgc2V0IEhlbHBlcldhbnRlZCA6ICIgKyBjb250ZXh0LmlzSGVscGVyV2FudGVkRW5hYmxlZCgpICk7Ci0JCQl9Ci0JCSAgICBpZiAoY29udGV4dC5pc1dyYXBBcnJheXNFbmFibGVkKCkgIT0gQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRXcmFwQXJyYXlzRGVmYXVsdCgpKQotCQkgICAgewotCQkgICAgCXdzZGwySmF2YS5zZXRXcmFwQXJyYXlzKGNvbnRleHQuaXNXcmFwQXJyYXlzRW5hYmxlZCgpKTsKLQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTEwNiwgdGhpcywgImV4ZWN1dGUiLCAiIHNldCBXcmFwQXJyYXlzIDogIiArIGNvbnRleHQuaXNXcmFwQXJyYXlzRW5hYmxlZCgpICk7Ci0JCSAgICB9Ci0JCQkKLQkJCVByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfUEFSU0lOR19XU0RMLCBqYXZhV1NETFBhcmFtLmdldElucHV0V3NkbExvY2F0aW9uKCkgKSApOwotCQkJCi0JCQl3c2RsMkphdmEucnVuKGphdmFXU0RMUGFyYW0uZ2V0SW5wdXRXc2RsTG9jYXRpb24oKSk7Ci0JCQkKLQkJCWphdmFGaWxlcyA9IHdzZGwySmF2YS5nZXRHZW5lcmF0ZWRGaWxlTmFtZXMoKTsKLQkJCQotCQkJZGVwbG95RmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlpZiAoc2VydmVyU2lkZSkgewotCQkJCS8vIHNldCBkZXBsb3ltZW50IGZpbGVzCi0JCQkJTGlzdCBkZXBsb3ltZW50RmlsZXMxID0gd3NkbDJKYXZhLmdldEdlbmVyYXRlZEZpbGVJbmZvKCkuZmluZFR5cGUoREVQTE9ZX1RZUEUpOwotCQkJCUxpc3QgZGVwbG95bWVudEZpbGVzMiA9IHdzZGwySmF2YS5nZXRHZW5lcmF0ZWRGaWxlSW5mbygpLmZpbmRUeXBlKFVOREVQTE9ZX1RZUEUpOwotCQkJCWlmIChkZXBsb3ltZW50RmlsZXMxICE9IG51bGwgJiYgZGVwbG95bWVudEZpbGVzMiAhPSBudWxsKSB7Ci0JCQkJCWRlcGxveW1lbnRGaWxlczEuYWRkQWxsKGRlcGxveW1lbnRGaWxlczIpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGRlcGxveW1lbnRGaWxlczEuc2l6ZSgpOyBpKyspIHsKLQkJCQkJCUdlbmVyYXRlZEZpbGVJbmZvLkVudHJ5IGVudHJ5ID0gKEdlbmVyYXRlZEZpbGVJbmZvLkVudHJ5KSBkZXBsb3ltZW50RmlsZXMxLmdldChpKTsKLQkJCQkJCWRlcGxveUZpbGVzLmFkZChlbnRyeS5maWxlTmFtZSk7Ci0JCQkJCX0KLQkJCQl9CQotCQkJCWphdmFGaWxlcy5yZW1vdmVBbGwoZGVwbG95RmlsZXMpOwotCQkJfQotCQkJCi0JCQlzdGF0dXMgPSBtb3ZlR2VuZXJhdGVkRmlsZXMoZW52aXJvbm1lbnQsIG1vbml0b3IpOwotCQkJCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllbnZMb2cubG9nKElMb2cuRVJST1IsIDUwMjEsIHRoaXMsICJleGVjdXRlIiwgZSk7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLQkJCQkJQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9XU0RMX0pBVkFfR0VORVJBVEUgKyAiICIgLy8kTk9OLU5MUy0xJAotCQkJCQkrIGUudG9TdHJpbmcoKSwgZSk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWRlbGV0ZURpcih0ZW1wT3V0cHV0RmlsZSk7IAkJCQotCQl9Ci0JCXJldHVybiBzdGF0dXM7CQotCX0KLQkgIAotCXB1YmxpYyBJU3RhdHVzIG1vdmVHZW5lcmF0ZWRGaWxlcyggSUVudmlyb25tZW50IGVudmlyb25tZW50LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSAKLQl7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJSVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKTsJCQotCQlGaWxlSW5wdXRTdHJlYW0gZmluU3RyZWFtID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQlTdHJpbmcgb3V0cHV0RGlyLCBqYXZhT3V0cHV0OwotCQkJb3V0cHV0RGlyID0gcmVtb3ZlRmlsZVByb3RvY29sKGphdmFXU0RMUGFyYW0uZ2V0T3V0cHV0KCkpOwotCQkJamF2YU91dHB1dCA9IHJlbW92ZUZpbGVQcm90b2NvbChqYXZhV1NETFBhcmFtLmdldEphdmFPdXRwdXQoKSk7Ci0JCQkKLQkJCVJlc291cmNlQ29udGV4dCBjb250ZXh0ICAgID0gKChCYXNlRWNsaXBzZUVudmlyb25tZW50KWVudmlyb25tZW50KS5nZXRSZXNvdXJjZUNvbnRleHQoKTsJCQkJCi0JCQlJUGF0aCAgICAgICAgICAgb3V0cHV0UGF0aCA9IG5ldyBQYXRoIChvdXRwdXREaXIpOwotCQkJCi0JCQlTdHJpbmcgZmlsZU5hbWU7Ci0JCQlJUGF0aCB0YXJnZXRQYXRoPW51bGw7Ci0KLQkJCVN0cmluZyBkZXBsb3lGaWxlOwotCQkJSXRlcmF0b3IgaXRlcmF0b3I7Ci0JCQkKLQkJCVN0cmluZyB0ZW1wT3V0cHV0RGlyID0gdGVtcE91dHB1dEZpbGUudG9TdHJpbmcoKTsKLQkJCVN0cmluZyBbXSBtb3ZlZERlcGxveUZpbGVzID0gbmV3IFN0cmluZyBbZGVwbG95RmlsZXMuc2l6ZSgpXTsKLQkJCWl0ZXJhdG9yID0gZGVwbG95RmlsZXMuaXRlcmF0b3IoKTsKLQkJCWludCBpID0gMDsKLQkJCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCQlkZXBsb3lGaWxlID0gKFN0cmluZykgaXRlcmF0b3IubmV4dCgpOwotCQkJCUZpbGUgc291cmNlID0gbmV3IEZpbGUoZGVwbG95RmlsZSk7Ci0JCQkJZmluU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzb3VyY2UpOwotCQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpZiAoZGVwbG95RmlsZS5zdGFydHNXaXRoKHRlbXBPdXRwdXREaXIpKSB7Ci0JCQkJCQlmaWxlTmFtZSA9IGRlcGxveUZpbGUuc3Vic3RyaW5nKHRlbXBPdXRwdXREaXIubGVuZ3RoKCkpOwotCQkJCQkJdGFyZ2V0UGF0aCA9IG91dHB1dFBhdGguYXBwZW5kKGZpbGVOYW1lKS5tYWtlQWJzb2x1dGUoKTsgIAotCQkJCQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZUF0TG9jYXRpb24oY29udGV4dCwgIAotCQkJCQkJCQl0YXJnZXRQYXRoLAotCQkJCQkJCQlmaW5TdHJlYW0sCi0JCQkJCQkJCW1vbml0b3IsCi0JCQkJCQkJCXN0YXR1c0hhbmRsZXIpOwotCQkJCQkJbW92ZWREZXBsb3lGaWxlc1tpKytdPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGaWxlRm9yTG9jYXRpb24odGFyZ2V0UGF0aCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJCQl9Ci0JCQkJCWZpblN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJamF2YVdTRExQYXJhbS5zZXREZXBsb3ltZW50RmlsZXMobW92ZWREZXBsb3lGaWxlcyk7Ci0JCQkKLQkJCUlQYXRoIGphdmFPdXRwdXRQYXRoID0gbmV3IFBhdGggKGphdmFPdXRwdXQpOwotCQkJCi0JCQlTdHJpbmcgamF2YUZpbGU7Ci0JCQlTdHJpbmcgZnVsbENsYXNzTmFtZSA9IG51bGw7Ci0JCQlTdHJpbmcgW10gbW92ZWRKYXZhRmlsZXMgPSAgbmV3IFN0cmluZyBbamF2YUZpbGVzLnNpemUoKV07Ci0JCQlpdGVyYXRvciA9IGphdmFGaWxlcy5pdGVyYXRvcigpOwotCQkJaSA9IDA7Ci0JCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQkJamF2YUZpbGUgPSAoU3RyaW5nKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJRmlsZSBzb3VyY2UgPSBuZXcgRmlsZShqYXZhRmlsZSk7Ci0JCQkJZmluU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzb3VyY2UpOwotCQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQkvLyBmb3IgdGhlIGNhc2UgSmF2YTJXU0RMLVdTREwySmF2YSwgbm8gbmVlZCB0byBtb3ZlIEphdmEgZmlsZXMsIGp1c3QgZGVsZXRlIHRoZW0KLQkJCQkJaWYgKCFqYXZhV1NETFBhcmFtLmlzTWV0YUluZk9ubHkoKSkgewotCQkJCQkJLy8gZm9yIHRoZSBjYXNlIFdTREwySmF2YSwgbW92ZSBKYXZhIGZpbGVzIHRvIEphdmEgb3V0cHV0IGRpcmVjdG9yeQotCQkJCQkJaWYgKGphdmFGaWxlLnN0YXJ0c1dpdGgodGVtcE91dHB1dERpcikpIHsKLQkJCQkJCQlmdWxsQ2xhc3NOYW1lID0gamF2YUZpbGUuc3Vic3RyaW5nKHRlbXBPdXRwdXREaXIubGVuZ3RoKCkpOwotCQkJCQkJCXRhcmdldFBhdGggPSBqYXZhT3V0cHV0UGF0aC5hcHBlbmQoZnVsbENsYXNzTmFtZSkubWFrZUFic29sdXRlKCk7IAotCQkJCQkJCUlGaWxlIGZpbGUgPSBGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlQXRMb2NhdGlvbihjb250ZXh0LCAgCi0JCQkJCQkJCQl0YXJnZXRQYXRoLAotCQkJCQkJCQkJZmluU3RyZWFtLAotCQkJCQkJCQkJbW9uaXRvciwKLQkJCQkJCQkJCXN0YXR1c0hhbmRsZXIpOwotCQkJCQkJCWZpbGUuc2V0Q2hhcnNldCgiVVRGLTgiLCBtb25pdG9yKTsKLQkJCQkJCQltb3ZlZEphdmFGaWxlc1tpKytdPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGaWxlRm9yTG9jYXRpb24odGFyZ2V0UGF0aCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCQotCQkJCQlmaW5TdHJlYW0uY2xvc2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCQlqYXZhV1NETFBhcmFtLnNldEphdmFGaWxlcyhtb3ZlZEphdmFGaWxlcyk7Ci0JCQkKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfTU9WRV9SRVNPVVJDRSxuZXcgU3RyaW5nW117ZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCl9KSwgZSk7Ci0JCQlzdGF0dXNIYW5kbGVyLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWZpblN0cmVhbS5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQl9Ci0JCQl9CQkJCi0JCX0KLQkJCi0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JLyoqCi0JICogRGVsZXRlcyBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yaWVzIHVuZGVyIGRpci4gCi0JICogSnVzdCBpZ25vcmUgYW5kIGtlZXAgZ29pbmcgaWYgZGVsZXRlIGlzIG5vdCBzdWNjZXNzZnVsCi0JICogCi0JICogQHBhcmFtIGRpciBkaXJlY3RvcnkgdG8gZGVsZXRlCi0JICovCi0JcHVibGljIHZvaWQgZGVsZXRlRGlyKEZpbGUgZGlyKSB7Ci0JCWlmIChkaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJU3RyaW5nW10gY2hpbGRyZW4gPSBkaXIubGlzdCgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCWRlbGV0ZURpcihuZXcgRmlsZShkaXIsIGNoaWxkcmVuW2ldKSk7Ci0JCQl9Ci0JCX0KLQkJLy8gVGhlIGRpcmVjdG9yeSBpcyBub3cgZW1wdHkgc28gZGVsZXRlIGl0Ci0JCWRpci5kZWxldGUoKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdW5kZXIgdGhlIHBsdWdpbidzIHN0YXRlIGxvY2F0aW9uIChpLmUuCi0JICogLm1ldGFkYXRhLy5wbHVnaW4gZGlyZWN0b3J5KQotCSAqIAotCSAqIEByZXR1cm4gRmlsZQotCSAqLwotCXByaXZhdGUgRmlsZSBjcmVhdGVUZW1wRGlyKCkgewotCQlTdHJpbmcgcGx1Z2luVGVtcERpciA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luCi0JCS5nZXRJbnN0YW5jZSgpLmdldFN0YXRlTG9jYXRpb24oKS50b1N0cmluZygpOwotCQlGaWxlIHRlbXBEaXIgPSBuZXcgRmlsZShwbHVnaW5UZW1wRGlyKTsKLQkJRmlsZSBuZXdUZW1wRGlyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW5ld1RlbXBEaXIgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKFRFTVAsICIiLCB0ZW1wRGlyKTsKLQkJCS8vIGRlbGV0ZSB0aGUgdGVtcCBmaWxlIGFuZCBjcmVhdGUgYSB0ZW1wIGRpcmVjdG9yeSBpbnN0ZWFkCi0JCQlpZiAobmV3VGVtcERpci5kZWxldGUoKSkgewotCQkJCWlmIChuZXdUZW1wRGlyLm1rZGlyKCkpIHsKLQkJCQkJdGVtcERpciA9IG5ld1RlbXBEaXI7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHRlbXBEaXI7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gdGVtcERpcjsKLQkJfQotCX0KLQkJCi0JLyoKLQkgKiBIYWNrOiBBeGlzIGRvZXNuJ3QgbGlrZSBmaWxlIFVSTHMKLQkgKi8KLQlwcml2YXRlIFN0cmluZyByZW1vdmVGaWxlUHJvdG9jb2woU3RyaW5nIHMpIHsKLQkJaWYgKHMuc3RhcnRzV2l0aCgiZmlsZToiKSkgewotCQkJU3RyaW5nIG5ld1MgPSBzLnN1YnN0cmluZyg1LCBzLmxlbmd0aCgpKTsKLQkJCWludCBpID0gbmV3Uy5pbmRleE9mKCc6Jyk7Ci0JCQlpZiAoaSAhPSAtMSkgewotCQkJCVN0cmluZyBwcm90b2NvbCA9IG5ld1Muc3Vic3RyaW5nKDAsIGkpOwotCQkJCWludCBqID0gcHJvdG9jb2wuaW5kZXhPZignLycpOwotCQkJCWludCBrID0gcHJvdG9jb2wuaW5kZXhPZignXFwnKTsKLQkJCQlpbnQgbWF4ID0gTWF0aC5tYXgoaiwgayk7Ci0JCQkJaWYgKG1heCAhPSAtMSkKLQkJCQkJbmV3UyA9IG5ld1Muc3Vic3RyaW5nKG1heCArIDEsIG5ld1MubGVuZ3RoKCkpOwotCQkJfQotCQkJcmV0dXJuIG5ld1M7Ci0JCX0KLQkJcmV0dXJuIHM7Ci0JfQotCi0JcHVibGljIFN0YXR1cyB1bmRvKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RhdHVzIHJlZG8oSUVudmlyb25tZW50IGVudmlyb25tZW50KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFBhc3N3b3JkCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFBhc3N3b3JkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFVzZXJuYW1lCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFVzZXJuYW1lIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZSkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKSB7Ci0JCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1Nb2RpZmllci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1vbi9KYXZhV1NETFBhcmFtTW9kaWZpZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFmYzQzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1Nb2RpZmllci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMiAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQmVhbk1vZGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uaW50ZXJuYWwuZW52aXJvbm1lbnQuZWNsaXBzZS5GaWxlUmVzb3VyY2VVdGlsczsKLQotcHVibGljIGNsYXNzIEphdmFXU0RMUGFyYW1Nb2RpZmllciBpbXBsZW1lbnRzIEJlYW5Nb2RpZmllciB7Ci0KLQlwdWJsaWMgdm9pZCBtb2RpZnkoT2JqZWN0IGJlYW4sIE9iamVjdCBwcm9wZXJ0eUhvbGRlcikKLQl7Ci0JCUphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JCWlmIChiZWFuICE9IG51bGwpCi0JCXsKLQkJCWphdmFXU0RMUGFyYW0gPSAoSmF2YVdTRExQYXJhbWV0ZXIpYmVhbjsJCi0JCX0KLQkJZWxzZQotCQl7Ci0JCQlqYXZhV1NETFBhcmFtID0gbmV3IEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0JCX0KLQkJIAotCQkvL2xvb2sgZm9yIGVhY2gga25vd24ga2V5IGluIHRoZSBtYXAgJiBpZiB0aGVyZSwgY29udmVydCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IG9uIGphdmFXU0RMUGFyYW0KLQkJaWYgKHByb3BlcnR5SG9sZGVyIGluc3RhbmNlb2YgTWFwKQotCQl7CQotCQkJTWFwIHByb3BlcnR5TWFwID0gKE1hcClwcm9wZXJ0eUhvbGRlcjsKLQkJCQotCQkJaWYgKHByb3BlcnR5TWFwLmNvbnRhaW5zS2V5KCJVc2UiKSkKLQkJCXsJCQkJCi0JCQkgICBqYXZhV1NETFBhcmFtLnNldFVzZSgoU3RyaW5nKXByb3BlcnR5TWFwLmdldCgiVXNlIikpOwkKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiU3R5bGUiKSkKLQkJCXsKLQkJCQlqYXZhV1NETFBhcmFtLnNldFN0eWxlKChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJTdHlsZSIpKTsKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiSmF2YU91dHB1dCIpKQotCQkJewkJCQkgCi0gICAgICAgIFN0cmluZyBvdXRwdXRMb2NhdGlvbiA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJKYXZhT3V0cHV0Iik7Ci0gICAgICAgIGludCAgICBpbmRleCAgICAgICAgICA9IG91dHB1dExvY2F0aW9uLmluZGV4T2YoICc6JyApOwotICAgICAgICAKLSAgICAgICAgaWYoIGluZGV4ID09IC0xICkKLSAgICAgICAgewotICAgICAgICAgIC8vIEEgY29sb24gd2FzIG5vdCBmb3VuZCBpbiB0aGUgc3RyaW5nIHNvIHdlIHdpbGwgYXNzdW1lIHRoYXQKLSAgICAgICAgICAvLyBpdCBpcyBhIHdvcmtzcGFjZSByZWxhdGl2ZSB1cmkgZm9yIG5vdy4KLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBGaWxlUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoIG5ldyBQYXRoKCBvdXRwdXRMb2NhdGlvbiApICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIHJlc291cmNlID09IG51bGwgfHwgcmVzb3VyY2UuZ2V0TG9jYXRpb24oKSA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuYmluZCggQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9GT0xERVJfTk9UX0ZPVU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dExvY2F0aW9uICkgKTsgCi0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIG91dHB1dExvY2F0aW9uID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIAotCQkJCWphdmFXU0RMUGFyYW0uc2V0SmF2YU91dHB1dCggb3V0cHV0TG9jYXRpb24gKTsKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiTWV0aG9kcyIpKQotCQkJewotCQkJCS8vZ2V0IE1ldGhvZCBsaXN0IGZyb20gdGhlIG1hcAotCQkJCVN0cmluZyBtZXRob2RMaXN0ID0gKFN0cmluZylwcm9wZXJ0eU1hcC5nZXQoIk1ldGhvZHMiKTsKLQkJCQkKLQkJCQkvL3Rva2VuaXplIHRoZSBtZXRob2QgbGlzdAotCQkJCVN0cmluZ1Rva2VuaXplciB0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG1ldGhvZExpc3QsICIgIik7Ci0JCQkJSGFzaHRhYmxlIG1ldGhvZHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQkJd2hpbGUgKHRvay5oYXNNb3JlVG9rZW5zKCkpCi0JCQkJewotICAgICAgICAgIFN0cmluZyBtZXRob2QgPSAoU3RyaW5nKXRvay5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggbWV0aG9kLmluZGV4T2YoICcoJyApID09IC0xICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtZXRob2QgPSBtZXRob2QgKyAiKCkiOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLQkJCQkJbWV0aG9kcy5wdXQoIG1ldGhvZCwgbmV3IEJvb2xlYW4odHJ1ZSkpOwotCQkJCX0JCQkJCi0JCQkJamF2YVdTRExQYXJhbS5zZXRNZXRob2RzKG1ldGhvZHMpOwotCQkJfQotCQkJaWYgKHByb3BlcnR5TWFwLmNvbnRhaW5zS2V5KCJNYXBwaW5ncyIpKQotCQkJewotCQkJCS8vZ2V0IG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBoYXMgdGhlIG1hcHBpbmdzIGluIGl0IGZyb20gdGhlIG1hcAotCQkJCVN0cmluZyBmaWxlbmFtZSA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJNYXBwaW5ncyIpOwotICAgICAgICAKLQkJCQkvL2dldCB0aGUgbGlzdCBvZiBtYXBwaW5nIGZyb20gdGhlIGZpbGUKLQkJCQlIYXNoTWFwIG1hcHBpbmdzID0gcmVhZE1hcHBpbmdzRnJvbUZpbGUoZmlsZW5hbWUpOwotICAgICAgICAKLQkJCQlqYXZhV1NETFBhcmFtLnNldE1hcHBpbmdzKG1hcHBpbmdzKTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBiZWFuTmFtZSA9IGphdmFXU0RMUGFyYW0uZ2V0QmVhbk5hbWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBiZWFuTmFtZSAhPSBudWxsICYmICFiZWFuTmFtZS5lcXVhbHMoIiIpICkKLSAgICAgICAgewotICAgICAgICAgIGludCAgICBsYXN0RG90ICAgICA9IGJlYW5OYW1lLmxhc3RJbmRleE9mKCAnLicgKTsKLSAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBsYXN0RG90ID09IC0xID8gbnVsbCA6IGJlYW5OYW1lLnN1YnN0cmluZyggMCwgbGFzdERvdCApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBtYXBwaW5ncyAhPSBudWxsICYmIHBhY2thZ2VOYW1lICE9IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0bnMgPSAoU3RyaW5nKW1hcHBpbmdzLmdldCggcGFja2FnZU5hbWUgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYoIHRucyAhPSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgamF2YVdTRExQYXJhbS5zZXROYW1lc3BhY2UodG5zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAgCi0gICAgICAgIH0KLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIEhhc2hNYXAgcmVhZE1hcHBpbmdzRnJvbUZpbGUoU3RyaW5nIGZpbGVuYW1lKQotCSAgewotCQlIYXNoTWFwIGhhc2htYXAgPSBuZXcgSGFzaE1hcCgpOwotCQlJRmlsZSByZXNvdXJjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlbmFtZSkpOwotCQkKLQkJaWYgKHJlc291cmNlICE9IG51bGwgKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCQlwcm9wcy5sb2FkKHJlc291cmNlLmdldENvbnRlbnRzKCkpOwkJCQotCQkJaGFzaG1hcC5wdXRBbGwocHJvcHMpOwkJCQkJCQotCQkgIH0KLQkJICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JCSAgewotCQkgICAgLy8gVE9ETyBSZXBvcnQgc29tZSBlcnJvciBoZXJlLgotCQkgIH0KLQkJfQkKLQkJcmV0dXJuIGhhc2htYXA7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1ldGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1ldGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZmExZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1vbi9KYXZhV1NETFBhcmFtZXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLQotcHVibGljIGNsYXNzIEphdmFXU0RMUGFyYW1ldGVyIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBTRVJWRVJfU0lERV9OT05FID0gMDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgU0VSVkVSX1NJREVfQkVBTiA9IDE7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFNFUlZFUl9TSURFX0VKQiA9IDI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9SUEMgPSAiUlBDIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0RPQ1VNRU5UID0gIkRPQ1VNRU5UIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX1dSQVBQRUQgPSAiV1JBUFBFRCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9MSVRFUkFMID0gIkxJVEVSQUwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX0VOQ09ERUQgPSAiRU5DT0RFRCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgU3RyaW5nIGJlYW5OYW1lID0gbnVsbDsgLy8gVGhlIG5hbWUgb2YgdGhlIEphdmEgYmVhbgotCXByaXZhdGUgU3RyaW5nIGNsYXNzcGF0aCA9IG51bGw7Ci0JLy8gVGhlIGNsYXNzIHBhdGggZm9yIGxvYWRpbmcgdGhlIGJlYW4gYW5kIGNvbW1hbmQgZXhlY3V0aW9uCi0JcHJpdmF0ZSBTdHJpbmcgYmVhblBhY2thZ2UgPSBudWxsOyAvLyBUaGUgcGFja2FnZSBsb2NhdGlvbiBvZiB0aGUgYmVhbgotCXByaXZhdGUgU3RyaW5nIHBvcnRUeXBlTmFtZSA9IG51bGw7IC8vIFRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgZWxlbWVudAotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VOYW1lID0gbnVsbDsgLy8gVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgZWxlbWVudAotCXByaXZhdGUgU3RyaW5nIG91dHB1dFdzZGxMb2NhdGlvbiA9IG51bGw7Ci0JLy8gVGhlIG91dHB1dCBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlCi0JcHJpdmF0ZSBTdHJpbmcgaW5wdXRXc2RsTG9jYXRpb24gPSBudWxsOwotCS8vIFRoZSBpbnB1dCBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlCi0JcHJpdmF0ZSBTdHJpbmcgdXJsTG9jYXRpb24gPSBudWxsOyAvLyBUaGUgVVJMIGxvY2F0aW9uIG9mIHRoZSB3ZWIgc2VydmljZQotCXByaXZhdGUgSGFzaHRhYmxlIG1ldGhvZHMgPSBudWxsOyAvLyBUaGUgYXJyYXkgb2YgbWV0aG9kIG5hbWVzCi0JcHJpdmF0ZSBTdHJpbmcgbWV0aG9kU3RyaW5nXyA9ICIiOyAvLyROT04tTkxTLTEkCi0JIC8vVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWV0aG9kIGFycmF5Ci0JcHJpdmF0ZSBTdHJpbmcgc3R5bGUgPSBudWxsOwotCS8vIFRoZSBzdHlsZSAoUlBDIHwgRE9DVU1FTlQgfCBXUkFQUEVEKSBhdHRyaWJ1dGUgZm9yIHRoZSBnZW5lcmF0ZWQgV1NETAotCXByaXZhdGUgU3RyaW5nIHVzZSA9IG51bGw7Ci0JLy8gVGhlIHVzZSAoTElURVJBTCB8IEVOQ09ERUQpIGF0dHJpYnR1ZSBmb3IgdGhlIGdlbmVyYXRlZCBXU0RMCi0JcHJpdmF0ZSBTdHJpbmcgb3V0cHV0ID0gbnVsbDsKLQkvLyBUaGUgb3V0cHV0IGxvY2F0aW9uIGZvciBkZXBsb3ltZW50IGRlc2NyaXB0b3JzICYgSmF2YSBjb2RlIChvdXRwdXQgZnJvbSBXU0RMMkphdmEgY29tbWFuZCkKLQlwcml2YXRlIFN0cmluZyBqYXZhT3V0cHV0ID0gbnVsbDsKLQkvLyBUaGUgb3V0cHV0IGxvY2F0aW9uIGZvciBKYXZhIGNvZGUgKG91dHB1dCBmcm9tIFdTREwySmF2YSBjb21tYW5kKQotCXByaXZhdGUgYm9vbGVhbiBtZXRhSW5mT25seSA9IGZhbHNlOyAvLyBNRVRBLUlORi1PTkxZIGZsYWcKLQlwcml2YXRlIGJ5dGUgc2VydmVyU2lkZSA9IFNFUlZFUl9TSURFX05PTkU7Ci0JLy8gc2VydmVyLXNpZGUgZmxhZyAoU0VSVkVSX1NJREVfTk9ORSB8IFNFUlZFUl9TSURFX0JFQU4gfCBTRVJWRVJfU0lERV9FSkIpCi0JcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gc2tlbGV0b25EZXBsb3kgPSB0cnVlOwotCXByaXZhdGUgU3RyaW5nIGNvbnRhaW5lciA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmdbXSBkZXBsb3ltZW50RmlsZXMgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nW10gamF2YUZpbGVzID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBwcm9qZWN0VVJMID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZ3Vlc3NQcm9qZWN0VVJMID0gZmFsc2U7Ci0JcHJpdmF0ZSBIYXNoTWFwIG1hcHBpbmdQYWlyczsKLQlwcml2YXRlIFN0cmluZyBodHRwVXNlcm5hbWVfID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBodHRwUGFzc3dvcmRfID0gbnVsbDsKLQotCXB1YmxpYyB2b2lkIHNldENvbnRhaW5lcihTdHJpbmcgY29udGFpbmVyKSB7Ci0JCXRoaXMuY29udGFpbmVyID0gY29udGFpbmVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29udGFpbmVyKCkgewotCQlyZXR1cm4gY29udGFpbmVyOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBKYXZhV1NETFBhcmFtZXRlci4KLQkgKi8KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIoKSB7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYmVhbk5hbWUuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEJlYW5OYW1lKCkgewotCQlyZXR1cm4gYmVhbk5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRCZWFuUGFja2FnZSgpIHsKLQkJcmV0dXJuIGJlYW5QYWNrYWdlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBvcnRUeXBlTmFtZS4KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UG9ydFR5cGVOYW1lKCkgewotCQlyZXR1cm4gcG9ydFR5cGVOYW1lOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNlcnZpY2VOYW1lLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTmFtZSgpIHsKLQkJcmV0dXJuIHNlcnZpY2VOYW1lOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG91dHB1dC4KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0KCkgewotCQlyZXR1cm4gb3V0cHV0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGhvZHMuCi0JICogQHJldHVybiBTdHJpbmdbXQotCSAqLwotCXB1YmxpYyBIYXNodGFibGUgZ2V0TWV0aG9kcygpIHsKLQkJcmV0dXJuIG1ldGhvZHM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY29tbWEgc2VwZXJhdGVkIHN0cmluZyByZXByZXNldGF0aW9uIG9mIHRoZSBtZXRob2RzLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRNZXRob2RTdHJpbmcoKSB7Ci0JCWlmIChtZXRob2RTdHJpbmdfLmVxdWFscygiIikpCi0JCXsJCQotCQkJRW51bWVyYXRpb24gZSA9IG1ldGhvZHMua2V5cygpOwotCSAJCWZvciAoaW50IGk9MDsgZS5oYXNNb3JlRWxlbWVudHMoKTsgaSsrKQotCSAgICAJewotCQotCQkJCVN0cmluZyBzaWduYXR1cmUgPSAoU3RyaW5nKSBlLm5leHRFbGVtZW50KCk7Ci0JCQkJaWYgKCgoQm9vbGVhbikgbWV0aG9kcy5nZXQoc2lnbmF0dXJlKSkuYm9vbGVhblZhbHVlKCkpewotCQkJCQkJCQlpbnQgaW5kZXggPSBzaWduYXR1cmUuaW5kZXhPZignKCcpOwotCQkJCQkJCQlTdHJpbmcgbmFtZSA9IHNpZ25hdHVyZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCQkJCQltZXRob2RTdHJpbmdfICs9IG5hbWU7Ci0JCQkJfQotCQkgICAgCWlmIChpICE9IG1ldGhvZHMuc2l6ZSgpIC0xKSAvLyB0aGlzIGlzIG5vdCB0aGUgbGFzdCBhcnJheSBpdGVtCQotCQkJCXsKLQkJCQkJbWV0aG9kU3RyaW5nXyArPSAiLCI7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBtZXRob2RTdHJpbmdfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBtZXRob2RzCSAqCi0JICovCi0JcHVibGljIHZvaWQgc2V0TWV0aG9kU3RyaW5nKFN0cmluZyBtZXRob2RzKQotCXsKLQkJbWV0aG9kU3RyaW5nXyA9IG1ldGhvZHM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3R5bGUgYXR0cmlidXRlLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHlsZSgpIHsKLQkJcmV0dXJuIHN0eWxlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHVybExvY2F0aW9uLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRVcmxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIHVybExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHVzZSBhdHRyaWJ1dGUuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFVzZSgpIHsKLQkJcmV0dXJuIHVzZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBvdXRwdXRXc2RsTG9jYXRpb24uCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE91dHB1dFdzZGxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIG91dHB1dFdzZGxMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBiZWFuTmFtZS4KLQkgKiBAcGFyYW0gYmVhbk5hbWUgVGhlIGJlYW5OYW1lIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJlYW5OYW1lKFN0cmluZyBiZWFuTmFtZSkgewotCQl0aGlzLmJlYW5OYW1lID0gYmVhbk5hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QmVhblBhY2thZ2UoU3RyaW5nIGJlYW5QYWNrYWdlKSB7Ci0JCXRoaXMuYmVhblBhY2thZ2UgPSBiZWFuUGFja2FnZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBwb3J0VHlwZU5hbWUuCi0JICogQHBhcmFtIHBvcnRUeXBlTmFtZSBUaGUgcG9ydFR5cGVOYW1lIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFBvcnRUeXBlTmFtZShTdHJpbmcgcG9ydFR5cGVOYW1lKSB7Ci0JCXRoaXMucG9ydFR5cGVOYW1lID0gcG9ydFR5cGVOYW1lOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHNlcnZpY2VOYW1lLgotCSAqIEBwYXJhbSBzZXJ2aWNlTmFtZSBUaGUgc2VydmljZU5hbWUgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmljZU5hbWUoU3RyaW5nIHNlcnZpY2VOYW1lKSB7Ci0JCXRoaXMuc2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBvdXRwdXQuCi0JICogQHBhcmFtIG91dHB1dCBUaGUgb3V0cHV0IHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE91dHB1dChTdHJpbmcgb3V0cHV0KSB7Ci0JCXRoaXMub3V0cHV0ID0gb3V0cHV0OwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIG1ldGhvZHMuCi0JICogQHBhcmFtIG1ldGhvZHMgVGhlIG1ldGhvZHMgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0TWV0aG9kcyhIYXNodGFibGUgbWV0aG9kcykgewotCQl0aGlzLm1ldGhvZHMgPSBtZXRob2RzOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHN0eWxlLgotCSAqIEBwYXJhbSBzdHlsZSBUaGUgc3R5bGUgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0U3R5bGUoU3RyaW5nIHN0eWxlKSB7Ci0JCXRoaXMuc3R5bGUgPSBzdHlsZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB1cmxMb2NhdGlvbi4KLQkgKiBAcGFyYW0gdXJsTG9jYXRpb24gVGhlIHVybExvY2F0aW9uIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVybExvY2F0aW9uKFN0cmluZyB1cmxMb2NhdGlvbikgewotCQl0aGlzLnVybExvY2F0aW9uID0gdXJsTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgdXNlLgotCSAqIEBwYXJhbSB1c2UgVGhlIHVzZSB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRVc2UoU3RyaW5nIHVzZSkgewotCQl0aGlzLnVzZSA9IHVzZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBvdXRwdXRXc2RsTG9jYXRpb24uCi0JICogQHBhcmFtIG91dHB1dFdzZGxMb2NhdGlvbiBUaGUgb3V0cHV0V3NkbExvY2F0aW9uIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE91dHB1dFdzZGxMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKSB7Ci0JCXRoaXMub3V0cHV0V3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGFJbmZPbmx5LgotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzTWV0YUluZk9ubHkoKSB7Ci0JCXJldHVybiBtZXRhSW5mT25seTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBtZXRhSW5mT25seS4KLQkgKiBAcGFyYW0gbWV0YUluZk9ubHkgVGhlIG1ldGFJbmZPbmx5IHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE1ldGFJbmZPbmx5KGJvb2xlYW4gbWV0YUluZk9ubHkpIHsKLQkJdGhpcy5tZXRhSW5mT25seSA9IG1ldGFJbmZPbmx5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNlcnZlclNpZGUuCi0JICogQHJldHVybiBieXRlCi0JICovCi0JcHVibGljIGJ5dGUgZ2V0U2VydmVyU2lkZSgpIHsKLQkJcmV0dXJuIHNlcnZlclNpZGU7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgc2VydmVyU2lkZS4KLQkgKiBAcGFyYW0gc2VydmVyU2lkZSBUaGUgc2VydmVyU2lkZSB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJTaWRlKGJ5dGUgc2VydmVyU2lkZSkgewotCQl0aGlzLnNlcnZlclNpZGUgPSBzZXJ2ZXJTaWRlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGlucHV0V3NkbExvY2F0aW9uLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJbnB1dFdzZGxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIGlucHV0V3NkbExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGlucHV0V3NkbExvY2F0aW9uLgotCSAqIEBwYXJhbSBpbnB1dFdzZGxMb2NhdGlvbiBUaGUgaW5wdXRXc2RsTG9jYXRpb24gdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0SW5wdXRXc2RsTG9jYXRpb24oU3RyaW5nIGlucHV0V3NkbExvY2F0aW9uKSB7Ci0JCXRoaXMuaW5wdXRXc2RsTG9jYXRpb24gPSBpbnB1dFdzZGxMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBuYW1lc3BhY2UuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIG5hbWVzcGFjZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBuYW1lc3BhY2UuCi0JICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKSB7Ci0JCXRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIEphdmEgb3V0cHV0LgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRKYXZhT3V0cHV0KCkgewotCQlyZXR1cm4gamF2YU91dHB1dDsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhT3V0cHV0LgotCSAqIEBwYXJhbSBqYXZhT3V0cHV0IFRoZSBKYXZhIG91dHB1dCB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRKYXZhT3V0cHV0KFN0cmluZyBqYXZhT3V0cHV0KSB7Ci0JCXRoaXMuamF2YU91dHB1dCA9IGphdmFPdXRwdXQ7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NwYXRoKCkgewotCQlyZXR1cm4gY2xhc3NwYXRoOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGFzc3BhdGgoU3RyaW5nIHN0cmluZykgewotCQljbGFzc3BhdGggPSBzdHJpbmc7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzU2tlbGV0b25EZXBsb3koKSB7Ci0JCXJldHVybiBza2VsZXRvbkRlcGxveTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gYgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNrZWxldG9uRGVwbG95KGJvb2xlYW4gYikgewotCQlza2VsZXRvbkRlcGxveSA9IGI7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXREZXBsb3ltZW50RmlsZXMoKSB7Ci0JCXJldHVybiBkZXBsb3ltZW50RmlsZXM7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZ3MKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3ltZW50RmlsZXMoU3RyaW5nW10gc3RyaW5ncykgewotCQlkZXBsb3ltZW50RmlsZXMgPSBzdHJpbmdzOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0SmF2YUZpbGVzKCkgewotCQlyZXR1cm4gamF2YUZpbGVzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmdzCi0JICovCi0JcHVibGljIHZvaWQgc2V0SmF2YUZpbGVzKFN0cmluZ1tdIHN0cmluZ3MpIHsKLQkJamF2YUZpbGVzID0gc3RyaW5nczsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcm9qZWN0VVJMKCkgewotCQlyZXR1cm4gcHJvamVjdFVSTDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICovCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdFVSTChTdHJpbmcgc3RyaW5nKSB7Ci0JCXByb2plY3RVUkwgPSBzdHJpbmc7Ci0JfQotCQotCXB1YmxpYyBIYXNoTWFwIGdldE1hcHBpbmdzKCkKLQl7Ci0JCQlyZXR1cm4gbWFwcGluZ1BhaXJzOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1hcHBpbmdzKEhhc2hNYXAgbWFwKQotCXsKLQkJCW1hcHBpbmdQYWlycyA9IG1hcDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdXNlciBuYW1lIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEhUVFBVc2VybmFtZSgpCi0JewotCSAgcmV0dXJuIGh0dHBVc2VybmFtZV87Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgdXNlciBuYW1lIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uCi0JICogQHBhcmFtIFN0cmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHNldEhUVFBVc2VybmFtZShTdHJpbmcgaHR0cFVzZXJuYW1lKQotCXsKLQkgIGh0dHBVc2VybmFtZV8gPSBodHRwVXNlcm5hbWU7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFzc3dvcmQgZm9yIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SFRUUFBhc3N3b3JkKCkKLQl7Ci0JICByZXR1cm4gaHR0cFBhc3N3b3JkXzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICovCi0JcHVibGljIHZvaWQgc2V0SFRUUFBhc3N3b3JkKFN0cmluZyBodHRwUGFzc3dvcmQpIHsKLQkJaHR0cFBhc3N3b3JkXyA9IGh0dHBQYXNzd29yZDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0d1ZXNzUHJvamVjdFVSTCgpIHsKLQkJcmV0dXJuIGd1ZXNzUHJvamVjdFVSTDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRHdWVzc1Byb2plY3RVUkwoYm9vbGVhbiBndWVzc1Byb2plY3RVUkwpIHsKLQkJdGhpcy5ndWVzc1Byb2plY3RVUkwgPSBndWVzc1Byb2plY3RVUkw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL05hbWVNYXBwaW5nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tb24vTmFtZU1hcHBpbmdVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjFmZGFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tb24vTmFtZU1hcHBpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkphdmFVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMud3NkbC50b0phdmEuVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBOYW1lTWFwcGluZ1V0aWxzIHsKLQotICBwcml2YXRlIE5hbWVNYXBwaW5nVXRpbHMoKSB7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShTdHJpbmcgbmFtZXNwYWNlLCBNYXAgbnMycGtnTWFwKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChuczJwa2dNYXAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IHBrZyA9IG5zMnBrZ01hcC5nZXQobmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKHBrZyAhPSBudWxsKQotICAgICAgICAgIHJldHVybiAoU3RyaW5nKXBrZzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyoqCi0gICAqIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZQotICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJCi0gICAqIEByZXR1cm4gcGFja2FnZSBuYW1lIGJhc2VkIG9uIG5hbWVzcGFjZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lKFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgCXJldHVybiBVdGlscy5tYWtlUGFja2FnZU5hbWUobmFtZXNwYWNlVVJJKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIHhtbE5hbWVUb0phdmFDbGFzcwotICAgKiBAcGFyYW0geG1sbmFtZQotICAgKiBAcmV0dXJuIEphdmEgY2xhc3MgbmFtZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgeG1sTmFtZVRvSmF2YUNsYXNzKFN0cmluZyB4bWxuYW1lKQotICB7Ci0gIAlyZXR1cm4gVXRpbHMueG1sTmFtZVRvSmF2YUNsYXNzKHhtbG5hbWUpOwotICB9Ci0gIAotICAvKioKLSAgICogZ2V0UG9ydE5hbWUKLSAgICogQHBhcmFtIHBhcnROYW1lCi0gICAqIEByZXR1cm4gcG9ydCBuYW1lIHVzZWQgYnkgdGhlIEF4aXMgZW1pdHRlcgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UG9ydE5hbWUoU3RyaW5nIHBvcnROYW1lKSAKLSAgewotICAJaWYgKCFKYXZhVXRpbHMuaXNKYXZhSWQocG9ydE5hbWUpKSAKLSAgICAgICAgcG9ydE5hbWUgPSB4bWxOYW1lVG9KYXZhQ2xhc3MocG9ydE5hbWUpOwotICAJcmV0dXJuIHBvcnROYW1lOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9BeGlzRW1pdHRlckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVhMjgxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9BeGlzRW1pdHRlckNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dDsKLQotcHVibGljIGludGVyZmFjZSBBeGlzRW1pdHRlckNvbnRleHQgewotCS8qKgotCSAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBhbGxfd2FudGVkIGdlbmVyYWwgcHJlZmVyZW5jZQotCSAqIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9BTExfV0FOVEVEID0gImFsbFdhbnRlZCI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgaGVscGVyX3dhbnRlZCBnZW5lcmFsCi0JICogcHJlZmVyZW5jZSBmcm9tIHRoZSBwbHVnaW5zIGxvY2FsIHByZWZlcmVuY2VzIHN0b3JlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRCA9ICJoZWxwZXJXYW50ZWQiOwotCi0JLyoqCi0JICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIHdyYXBfYXJyYXlzIGdlbmVyYWwgcHJlZmVyZW5jZQotCSAqIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9XUkFQX0FSUkFZUyA9ICJ3cmFwQXJyYXlzIjsKLQotCS8qKgotCSAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBkZXBsb3lfc2NvcGUgZ2VuZXJhbAotCSAqIHByZWZlcmVuY2UgZnJvbSB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0RFUExPWV9TQ09QRSA9ICJkZXBsb3lTY29wZSI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdGltZV9vdXQgZ2VuZXJhbCBwcmVmZXJlbmNlCi0JICogZnJvbSB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1RJTUVfT1VUID0gInRpbWVPdXQiOwotCi0JLyoKLQkgKiBFbnN1cmUgdGhlIG9yZGVyIGlzIHRoZSBzYW1lIGFzIGl0IGluIGRlcGxveVNjb3BlVHlwZXMuc2V0SXRlbXMoLi4uKSBmb3IKLQkgKiBjbGFzcwotCSAqIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLkF4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQTE9ZX1NDT1BFX1RZUEVfQVBQTElDQVRJT04gPSAwOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQTE9ZX1NDT1BFX1RZUEVfUkVRVUVTVCA9IDE7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVBMT1lfU0NPUEVfVFlQRV9TRVNTVElPTiA9IDI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdXNlX2luaGVyaXRlZF9tZXRob2RzIGdlbmVyYWwKLQkgKiBwcmVmZXJlbmNlIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9VU0VfSU5IRVJJVEVEX01FVEhPRFMgPSAidXNlSW5oZXJpdGVkTWV0aG9kcyI7Ci0JCi0JLyoqCi0JICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlICJ2YWxpZGF0ZSBhZ2FpbnN0IEpBWFJQQyIKLQkgKiBwcmVmZXJlbmNlIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9WQUxJREFURV9BR0FJTlNUX0pBWFJQQyA9ICJ2YWxpZGF0ZUFnYWluc3RKQVhSUEMiOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVuYWJsZQotCSAqICAgICAgICAgICAgc2V0IHdoZXRoZXIgZ2VuZXJhdGluZyBjb2RlIGZvciBhbGwgZWxlbWVudHMgaXMgZW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBbGxXYW50ZWRFbmFibGVkKGJvb2xlYW4gZW5hYmxlKTsKLQotCS8qKgotCSAqIAotCSAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIGdlbmVyYXRpbmcgY29kZSBmb3IgYWxsIGVsZW1lbnRzIGlzIGVuYWJsZWQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNBbGxXYW50ZWRFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciBlbWl0dGluZyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YSBkYXRhIGlzCi0JICogICAgICAgICAgICBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEhlbHBlcldhbnRlZEVuYWJsZWQoYm9vbGVhbiBlbmFibGUpOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHJldHVybnMKLQkgKiAgICAgICAgICAgIHdoZXRoZXIgZW1pdHRpbmcgc2VwYXJhdGUgSGVscGVyIGNsYXNzZXMgZm9yIG1ldGEgZGF0YSBpcwotCSAqICAgICAgICAgICAgZW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0hlbHBlcldhbnRlZEVuYWJsZWQoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbmFibGUKLQkgKiAgICAgICAgICAgIHNldCB3aGV0aGVyIHdyYXBwaW5nIGFycmF5cyBpcyBlbmFibGVkLgotCSAqLwotCi0JcHVibGljIHZvaWQgc2V0V3JhcEFycmF5c0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHJldHVybnMKLQkgKiAgICAgICAgICAgIHdoZXRoZXIgd3JhcHBpbmcgYXJyYXlzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1dyYXBBcnJheXNFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciB1c2luZyBpbmhlcml0ZWQgbWV0aG9kcyBpcyBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSByZXR1cm5zCi0JICogICAgICAgICAgICB3aGV0aGVyIHVzaW5nIGluaGVyaXRlZCBtZXRob2RzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciBKQVgtUlBDIGFuYWx5c2lzIG9mIHRoZSBzZXJ2aWNlIGNsYXNzIGlzIGVuYWJsZWQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsaWRhdGVBZ2FpbnN0SkFYUlBDRW5hYmxlZChib29sZWFuIGVuYWJsZSk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgd2hldGhlciBKQVgtUlBDIGFuYWx5c2lzIG9mIHRoZSBzZXJ2aWNlIGNsYXNzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBzZWxlY3Rpb24KLQkgKiAgICAgICAgICAgIHNldCB0aGUgZGVwbG95IHNjb3BlIHR5cGUuCi0JICovCi0KLQlwdWJsaWMgdm9pZCBzZWxlY3REZXBsb3lTY29wZVR5cGUoaW50IHNlbGVjdGlvbik7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgdGhlIGRlcGxveSBzY29wZSB0eXBlLgotCSAqLwotCi0JcHVibGljIGludCBnZXREZXBsb3lTY29wZVR5cGUoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBzZWNvbmRzCi0JICogICAgICAgICAgICBzZXQgdGhlIHRpbWUgb3V0LgotCSAqLwotCi0JcHVibGljIHZvaWQgc2V0VGltZU91dChpbnQgc2Vjb25kcyk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgdGhlIHRpbWUgb3V0LgotCSAqLwotCi0JcHVibGljIGludCBnZXRUaW1lT3V0KCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcmV0dXJuIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgQXhpc0VtaXR0ZXJDb250ZXh0LgotCSAqLwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJEZWZhdWx0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJEZWZhdWx0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWFkYzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L0F4aXNFbWl0dGVyRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCAgIGJ1ZyAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgQXhpc0VtaXR0ZXJEZWZhdWx0cwotewotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9BTExfV0FOVEVEX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRF9ERUZBVUxUID0gZmFsc2U7Ci0gcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUkVGRVJFTkNFX1dSQVBfQVJSQVlTX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMgPSB0cnVlOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERVBMT1lfU0NPUEVfREVGQVVMVCA9IEF4aXNFbWl0dGVyQ29udGV4dC5ERVBMT1lfU0NPUEVfVFlQRV9SRVFVRVNUOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FX09VVF9ERUZBVUxUID0gNDU7Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIGdlbmVyYXRpbmcgY29kZSBmb3IgYWxsIGVsZW1lbnRzLgotICAqLwotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRBbGxXYW50ZWREZWZhdWx0ICgpCi0gewotIAlyZXR1cm4gUFJFRkVSRU5DRV9BTExfV0FOVEVEX0RFRkFVTFQ7Ci0gfQotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBlbWl0dGluZyBzZXBlcmF0ZSBoZWxwc2VyIGNsYXNzIGZvciBtZXRhZGF0YS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0SGVscGVyV2FudGVkRGVmYXVsdCAoKQotIHsgCi0JcmV0dXJuIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRF9ERUZBVUxUOwotIH0KLQotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXRpbmcgZm9yIHdyYXBwaW5nIGFycmF5cy4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0V3JhcEFycmF5c0RlZmF1bHQoKQotIHsKLQlyZXR1cm4gUFJFRkVSRU5DRV9XUkFQX0FSUkFZU19ERUZBVUxUOwotIH0KLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgdXNpbmcgaW5oZXJpdGVkIG1ldGhvZHMuCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkKLSB7Ci0JcmV0dXJuIFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTX0RFRkFVTFQ7Ci0gfQotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBKQVgtUlBDIHZhbGlkYXRpb24gb2YgdGhlIHNlcnZpY2UgY2xhc3MuCi0gICogTm90ZTogVGhpcyBpcyBub3QgYSB0cnVlIEF4aXMgZW1pdHRlciBwcmVmZXJlbmNlLiBUaGlzIHByZWZlcmVuY2UgY29udHJvbHMgd2hldGhlcgotICAqIHRoZSBBeGlzIFdlYiBzZXJ2aWNlIGJvdHRvbS11cCBzY2VuYXJpbyBhbmFseXplcyB0aGUgc2VydmljZSBjbGFzcyBmb3IgY29tcGxpYW5jZQotICAqIHRvIEpBWC1SUEMgc29tZSB0aW1lIGJlZm9yZSBjYWxsaW5nIHRoZSBlbWl0dGVycy4gCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldFZhbGlkYXRlQWdhaW5zdEpBWFJQQygpCi0gewotCXJldHVybiBQUkVGRVJFTkNFX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDOwotIH0KLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgZGVwbG95IHNjb3BlIHR5cGUuCi0gICovCi0gcHVibGljIHN0YXRpYyBpbnQgZ2V0RGVwbG95U2NvcGVEZWZhdWx0KCkKLSB7Ci0JIHJldHVybiBERVBMT1lfU0NPUEVfREVGQVVMVDsKLSB9Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIHRpbWUgb3V0LgotICAqLwotIHB1YmxpYyBzdGF0aWMgaW50IGdldFRpbWVPdXREZWZhdWx0KCkKLSB7Ci0JIHJldHVybiBUSU1FX09VVF9ERUZBVUxUOwotIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L1BlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L1BlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg1NDNlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9QZXJzaXN0ZW50QXhpc0VtaXR0ZXJDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI5ICAgMTI3MDE2IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dCBpbXBsZW1lbnRzCUF4aXNFbWl0dGVyQ29udGV4dAotewotCXByaXZhdGUgc3RhdGljIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgY29udGV4dF8gPSBudWxsOwotCi0JcHVibGljIHN0YXRpYyBQZXJzaXN0ZW50QXhpc0VtaXR0ZXJDb250ZXh0IGdldEluc3RhbmNlKCkgCi0JewotCQlpZiAoY29udGV4dF8gPT0gbnVsbCkgewotCQkJY29udGV4dF8gPSBuZXcgUGVyc2lzdGVudEF4aXNFbWl0dGVyQ29udGV4dCgpOwotCQkJY29udGV4dF8ubG9hZCgpOwotCQl9Ci0KLQkJcmV0dXJuIGNvbnRleHRfOwotCX0KLQotCXByaXZhdGUgUGVyc2lzdGVudEF4aXNFbWl0dGVyQ29udGV4dCgpIAotCXsKLQkJc3VwZXIoV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgbG9hZCgpIAotCXsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX0FMTF9XQU5URUQsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0QWxsV2FudGVkRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX0hFTFBFUl9XQU5URUQsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0SGVscGVyV2FudGVkRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX1dSQVBfQVJSQVlTLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFdyYXBBcnJheXNEZWZhdWx0KCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VmFsaWRhdGVBZ2FpbnN0SkFYUlBDKCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfREVQTE9ZX1NDT1BFLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldERlcGxveVNjb3BlRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX1RJTUVfT1VULCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFsbFdhbnRlZEVuYWJsZWQoYm9vbGVhbiBlbmFibGUpIAotCXsKLQkJc2V0VmFsdWUoUFJFRkVSRU5DRV9BTExfV0FOVEVELCBlbmFibGUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQWxsV2FudGVkRW5hYmxlZCgpIAotCXsKLQkJcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfQUxMX1dBTlRFRCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SGVscGVyV2FudGVkRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX0hFTFBFUl9XQU5URUQsIGVuYWJsZSk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNIZWxwZXJXYW50ZWRFbmFibGVkKCkgCi0JewotCQlyZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9IRUxQRVJfV0FOVEVEKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXcmFwQXJyYXlzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1dSQVBfQVJSQVlTLCBlbmFibGUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzV3JhcEFycmF5c0VuYWJsZWQoKSAKLQl7Ci0JCXJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX1dSQVBfQVJSQVlTKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRVc2VJbmhlcml0ZWRNZXRob2RzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1VTRV9JTkhFUklURURfTUVUSE9EUywgZW5hYmxlKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkgCi0JewotCQlyZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9VU0VfSU5IRVJJVEVEX01FVEhPRFMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDLCBlbmFibGUpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoKQotCXsKLQkJcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdERlcGxveVNjb3BlVHlwZShpbnQgc2VsZWN0aW9uKSB7Ci0JCXNldFZhbHVlKFBSRUZFUkVOQ0VfREVQTE9ZX1NDT1BFLCBzZWxlY3Rpb24pOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0RGVwbG95U2NvcGVUeXBlKCkgewotCQlyZXR1cm4gZ2V0VmFsdWVBc0ludChQUkVGRVJFTkNFX0RFUExPWV9TQ09QRSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGltZU91dChpbnQgc2Vjb25kcykgewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1RJTUVfT1VULCBzZWNvbmRzKTsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldFRpbWVPdXQoKSB7Ci0JCXJldHVybiBnZXRWYWx1ZUFzSW50KFBSRUZFUkVOQ0VfVElNRV9PVVQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNTZXJ2aWNlc1NheEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNTZXJ2aWNlc1NheEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y2NTIxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmljZXNTYXhIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE3ICAgMTQwODMyIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEF4aXNTZXJ2aWNlc1NheEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotewotCXByaXZhdGUgVmVjdG9yIHdlYlNlcnZpY2VzTmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0JcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRzKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0JewotCQlpZiAobG9jYWxOYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygic2VydmljZSIpKQotCQl7CQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzLmdldExlbmd0aCgpOyBpKyspCi0JCQl7Ci0JCQkJaWYgKGF0dHMuZ2V0TG9jYWxOYW1lKGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygibmFtZSIpKQotCQkJCXsKLQkJCQkJU3RyaW5nIHNlcnZpY2VOYW1lID0gYXR0cy5nZXRWYWx1ZShpKTsKLQkJICAgICAgICAgICAgd2ViU2VydmljZXNOYW1lcy5hZGQoc2VydmljZU5hbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlc05hbWVzKCkKLQl7Ci0JCXJldHVybiB0aGlzLndlYlNlcnZpY2VzTmFtZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2xvY2F0b3IvQXhpc1NlcnZsZXRTYXhIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmxldFNheEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk4YmNjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmxldFNheEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTcgICAxNDA4MzIgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEF4aXNTZXJ2bGV0U2F4SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi17Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEFYSVNfU0VSVkxFVF9DTEFTU19OQU1FID0gIm9yZy5hcGFjaGUuYXhpcy50cmFuc3BvcnQuaHR0cC5BeGlzU2VydmxldCI7Ci0JCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNFUlZMRVRfQ0xBU1NfTkFNRSA9ICJzZXJ2bGV0LWNsYXNzIjsKLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNUaGVyZUF4aXNTZXJ2bGV0ID0gZmFsc2U7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgY3VycmVudEVsZW1lbnQgPSBudWxsOwotCQotCXB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotCXsKLQkJY3VycmVudEVsZW1lbnQgPSBsb2NhbE5hbWU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhcltdIGNoLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24KLQl7Ci0JCWlmICggIWlzVGhlcmVBeGlzU2VydmxldCAmJiBTRVJWTEVUX0NMQVNTX05BTUUuZXF1YWxzKGN1cnJlbnRFbGVtZW50LnRyaW0oKSkgJiYgU3RyaW5nLnZhbHVlT2YoY2gpLmluZGV4T2YoQVhJU19TRVJWTEVUX0NMQVNTX05BTUUpID4gLTEpCi0JCXsKLQkJCWlzVGhlcmVBeGlzU2VydmxldCA9IHRydWU7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNUaGVyZUF4aXNTZXJ2bGV0KCkKLQl7Ci0JCXJldHVybiB0aGlzLmlzVGhlcmVBeGlzU2VydmxldDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzV2ViU2VydmljZUxvY2F0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzVhZjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA1MTcgICAxNDA4MzIgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNjIwICAgMTQ3ODY0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MTIxNCAgIDE2NTcxNiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2UgZmluZGVyIGRvZXMgbm90IGxvY2F0ZSBBeGlzIFdlYiBzZXJ2aWNlIGRlcGxveWVkIG9uIGNlcnRhaW4gc2VydmVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGVIaWVyYXJjaHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUphdmFDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJQb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBUaGUgQXhpcyBXZWIgc2VydmljZSBsb2NhdG9yIHBsdWdzIGl0c2VsZiBpbnRvIHRoZQotICogV2ViIFNlcnZpY2VzIEZpbmRlciBmcmFtZXdvcmsgYW5kIGRvZXMgdGhlIGpvYiBvZgotICogbG9jYXRpbmcgQXhpcyBjbGllbnRzIGFuZCBzZXJ2aWNlcy4KLSAqLwotcHVibGljIGNsYXNzIEF4aXNXZWJTZXJ2aWNlTG9jYXRvciBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IKLXsKLQlwcml2YXRlIFN0cmluZyBBWElTX1NUVUIgPSAib3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViIjsKLQkKLQkvKioKLQkgKiBTZWFyY2hlcyB0aGUgd29ya3NwYWNlIGZvciBBeGlzIGNsaWVudHMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IG5vbi1zdHViIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQKLQkgKiBTRUlzIHRoYXQgYXJlIGltcGxlbWVudGVkIGJ5IHN0dWJzIHRoYXQgaW1wbGVtZW50Ci0JICogb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgcG9zc2libHkgbnVsbC4KLQkgKiBAcmV0dXJuIEEgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VDbGllbnRzIChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSUphdmFNb2RlbCBqYXZhTW9kZWwgPSBKYXZhQ29yZS5jcmVhdGUocm9vdCk7Ci0JCXRyeQotCQl7Ci0JCQlqYXZhTW9kZWwub3Blbihtb25pdG9yKTsKLQkJCUlKYXZhUHJvamVjdFtdIGphdmFQcm9qZWN0cyA9IGphdmFNb2RlbC5nZXRKYXZhUHJvamVjdHMoKTsKLQkJCWZvciAoaW50IGk9MDsgaTxqYXZhUHJvamVjdHMubGVuZ3RoOyBpKyspCi0JCQl7Ci0JCQkJLy8gV2UncmUgb25seSBpbnRlcmVzdGVkIGluIEphdmEgcHJvamVjdHMgd2l0aGluIHdoaWNoCi0JCQkJLy8gdGhlIEF4aXMgcnVudGltZSdzIGNsaWVudCAiU3R1YiIgY2xhc3MgaXMgbG9hZGFibGU6Ci0JCQkJSVR5cGUgYXhpc1N0dWIgPSBqYXZhUHJvamVjdHNbaV0uZmluZFR5cGUoQVhJU19TVFVCKTsKLQkJCQlpZiAoYXhpc1N0dWIgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCS8vIEZpbmQgIlByb3h5IiBjbGFzc2VzIGluIHRoZSBwcm9qZWN0IGFuZCBhZGQgdG8gdGhlIGxpc3QuCi0JCQkJCWFkZEF4aXNQcm94aWVzKGphdmFQcm9qZWN0c1tpXSxheGlzU3R1YixsaXN0LG1vbml0b3IpOwotCQkJCX0KLQkJCX0KLQkJCWphdmFNb2RlbC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JLyoqCi0JICogU2VhcmNoZXMgdGhlIHdvcmtzcGFjZSBmb3IgQXhpcyBjbGllbnRzIGFzCi0JICogaWRlbnRpZmllZCBieSBub24tc3R1YiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50Ci0JICogU0VJcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBieSBzdHVicyB0aGF0IGltcGxlbWVudAotCSAqIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1Yi4KLQkgKiBAcGFyYW0gcHJvamVjdHMgVGhlIHByb2plY3RzIHRvIGNvbmZpbmUgdGhlIHNlYXJjaCB0by4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJaWYgKHByb2plY3RzID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50cyhtb25pdG9yKTsKLQkJfQotCQlMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSUphdmFNb2RlbCBqYXZhTW9kZWwgPSBKYXZhQ29yZS5jcmVhdGUocm9vdCk7Ci0JCXRyeQotCQl7Ci0JCQlqYXZhTW9kZWwub3Blbihtb25pdG9yKTsKLQkJCWZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJCXsKLQkJCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBqYXZhTW9kZWwuZ2V0SmF2YVByb2plY3QocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLQkJCQkvLyBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gSmF2YSBwcm9qZWN0cyB3aXRoaW4gd2hpY2gKLQkJCQkvLyB0aGUgQXhpcyBydW50aW1lJ3MgY2xpZW50ICJTdHViIiBjbGFzcyBpcyBsb2FkYWJsZToKLQkJCQlJVHlwZSBheGlzU3R1YiA9IGphdmFQcm9qZWN0LmZpbmRUeXBlKEFYSVNfU1RVQik7Ci0JCQkJaWYgKGF4aXNTdHViICE9IG51bGwpCi0JCQkJewotCQkJCQkvLyBGaW5kICJQcm94eSIgY2xhc3NlcyBpbiB0aGUgcHJvamVjdCBhbmQgYWRkIHRvIHRoZSBsaXN0LgotCQkJCQlhZGRBeGlzUHJveGllcyhqYXZhUHJvamVjdCxheGlzU3R1YixsaXN0LG1vbml0b3IpOwotCQkJCX0KLQkJCX0KLQkJCWphdmFNb2RlbC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JLyoqCi0JICogVHJpZXMgdG8gZmluZCBBeGlzICJQcm94eSIgY2xhc3NlcyByZWxhdGVkIHRoZSBnaXZlbiBTdHViLgotCSAqIEBwYXJhbSBheGlzU3R1YiBUaGUgQXhpcyBjbGllbnQgIlN0dWIiIGZyb20gd2hpY2ggdG8gc2VhcmNoLgotCSAqIEBwYXJhbSBsaXN0IEEgbGlzdCB0byB3aGljaCB3ZSdsbCBhZGQgYW5kIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyBmb3IgIlByb3h5IiBjbGFzc2VzIHdlIGZpbmQgaW4gdGhlIHNlYXJjaC4gCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZEF4aXNQcm94aWVzIChJSmF2YVByb2plY3QgamF2YVByb2plY3QsIElUeXBlIGF4aXNTdHViLCBMaXN0IGxpc3QsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQl7Ci0JCXRyeQotCQl7Ci0JCQkvLyBDb21wdXRlIGEgaGllcmFyY2h5IHRvIGhlbHAgdXMgZmluZCBhbGwgdGhlCi0JCQkvLyBnZW5lcmF0ZWQgU3R1YiBzdWJjbGFzc2VzIG9mIHRoZSBBeGlzICJTdHViIgotCQkJLy8gY2xhc3MgYWNyb3NzIHRoZSBlbnRpcmUgd29ya3NwYWNlOgotCQkJSVR5cGVIaWVyYXJjaHkgYXhpc1N0dWJIaWVyYXJjaHkgPSBheGlzU3R1Yi5uZXdUeXBlSGllcmFyY2h5KGphdmFQcm9qZWN0LG1vbml0b3IpOwotCQkJSVR5cGVbXSBzdHVicyA9IGF4aXNTdHViSGllcmFyY2h5LmdldFN1YnR5cGVzKGF4aXNTdHViKTsKLQkJCWZvciAoaW50IHM9MDsgczxzdHVicy5sZW5ndGg7IHMrKykKLQkJCXsKLQkJCQkvLyBGb3IgZWFjaCBzdHViLCBmaW5kIGFsbCBpdHMgc3VwZXItaW50ZXJmYWNlcyBvZiB3aGljaAotCQkJCS8vIHRoZXJlIHNob3VsZCBiZSBvbmUsIG5hbWVseSB0aGUgZ2VuZXJhdGVkIFNFSToKLQkJCQlJVHlwZSBzZWlzW10gPSBheGlzU3R1YkhpZXJhcmNoeS5nZXRTdXBlckludGVyZmFjZXMoc3R1YnNbc10pOwotCQkJCWZvciAoaW50IGk9MDsgaTxzZWlzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJdHJ5Ci0JCQkJCXsKLQkJCQkJCS8vIENvbXB1dGUgYSBoaWVyYXJjaHkgdG8gaGVscCB1cyBmaW5kIGFsbCB0aGUKLQkJCQkJCS8vIGdlbmVyYXRlZCBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoZSBTRUkKLQkJCQkJCS8vIGNvbmZpbmVkIHRvIHRoZSBjdXJyZW50IHByb2plY3Q6Ci0JCQkJCQlJVHlwZUhpZXJhcmNoeSBzZWlIaWVyYXJjaHkgPSBzZWlzW2ldLm5ld1R5cGVIaWVyYXJjaHkoamF2YVByb2plY3QsbW9uaXRvcik7Ci0JCQkJCQlJVHlwZVtdIHByb3hpZXMgPSBzZWlIaWVyYXJjaHkuZ2V0U3VidHlwZXMoc2Vpc1tpXSk7Ci0JCQkJCQlmb3IgKGludCBwPTA7IHA8cHJveGllcy5sZW5ndGg7IHArKykKLQkJCQkJCXsKLQkJCQkJCQkvLyBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyB3ZSBzaG91bGQgZmluZCB0d28gc3ViY2xhc3NlczoKLQkJCQkJCQkvLyAxLiBUaGUgZ2VuZXJhdGVkIHN0dWIgdGhhdCBnb3QgdXMgaGVyZSAodHdvIGxvb3BzIGFib3ZlKS4KLQkJCQkJCQkvLyAyLiBUaGUgZ2VuZXJhdGVkICJQcm94eSIgdGhhdCB3ZSdyZSBsb29raW5nIGZvci4KLQkJCQkJCQkvLyBTa2lwICMxIGFuZCBjYXB0dXJlICMyOgotCQkJCQkJCWlmICghcHJveGllc1twXS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKS5lcXVhbHMoc3R1YnNbc10uZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpKQotCQkJCQkJCXsKLQkJCQkJCQkJV2ViU2VydmljZUNsaWVudEluZm8gd3NjSW5mbyA9IG5ld1dlYlNlcnZpY2VDbGllbnRJbmZvKHByb3hpZXNbcF0pOwotCQkJCQkJCQlpZiAod3NjSW5mbyAhPSBudWxsKQotCQkJCQkJCQl7Ci0JCQkJCQkJCQlsaXN0LmFkZCh3c2NJbmZvKTsKLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQkJCXsKLQkJCQkJCS8vIFdlJ2xsIGxhbmQgaGVyZSBpZiB0aGUgSkRUIHdhcyB1bmFibGUgdG8gY29tcHV0ZQotCQkJCQkJLy8gYSB0eXBlIGhpZXJhcmNoeSBmb3IgdGhlIGN1cnJlbnQgU0VJLgotCQkJCQkJLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcywKLQkJCQkJCS8vIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGV4Y2VwdCBieXBhc3MgdGhlIFNFSQotCQkJCQkJLy8gYW5kIGxvb3Agb24gdG8gdGhlIG5leHQgb25lLgotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gV2UnbGwgbGFuZCBoZXJlIGlmIEpEVCB3YXMgdW5hYmxlIHRvIGNvbXB1dGUKLQkJCS8vIGEgdHlwZSBoaWVyYXJjaHkgZm9yIHRoZSBBeGlzIGNsaWVudCAiU3R1YiIgY2xhc3MuCi0JCQkvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLAotCQkJLy8gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gZXhjZXB0IGJhaWwgb3V0LCBoYXZpbmcKLQkJCS8vIGFkZGVkIG5vdGhpbmcgdG8gdGhlIGxpc3QuCi0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgZm9yIGEKLQkgKiBKRFQgSVR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIGdlbmVyYXRlZCBQcm94eS4KLQkgKiBAcGFyYW0gYXhpc1Byb3h5IFRoZSBJVHlwZSBvZiB0aGUgZ2VuZXJhdGVkIFByb3h5LgotCSAqIEByZXR1cm4gQSBuZXcgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIFByb3h5LAotCSAqIG9yIG51bGwgaWYgdGhlIElUeXBlIGRvZXMgbm90IGFwcGVhciB0byBkZXNjcmliZSBhIG5vcm1hbCBQcm94eS4gCi0JICovCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBuZXdXZWJTZXJ2aWNlQ2xpZW50SW5mbyAoSVR5cGUgYXhpc1Byb3h5KQotCXsKLQkJV2ViU2VydmljZUphdmFDbGllbnRJbmZvIHdzY0luZm8gPSBudWxsOwotCQl0cnkKLQkJewotCQkJSVJlc291cmNlIHJlc291cmNlID0gYXhpc1Byb3h5LmdldFVuZGVybHlpbmdSZXNvdXJjZSgpOwotCQkJaWYgKHJlc291cmNlICE9IG51bGwpCi0JCQl7Ci0JCQkJSVBhdGggcHJveHlQYXRoID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKTsKLQkJCQlpZiAocHJveHlQYXRoICE9IG51bGwpCi0JCQkJewotCQkJCQlTdHJpbmcgcHJveHlVUkwgPSBwcm94eVBhdGgudG9GaWxlKCkudG9VUkwoKS50b1N0cmluZygpOwotCQkJCQl3c2NJbmZvID0gbmV3IFdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbygpOwotCQkJCQl3c2NJbmZvLnNldFR5cGUoYXhpc1Byb3h5KTsKLQkJCQkJd3NjSW5mby5zZXRJbXBsVVJMKHByb3h5VVJMKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvLyBXZSdsbCBsYW5kIGhlcmUgaWYgd2UgY291bGQgbm90IGNvbnZlcnQgdGhlIElUeXBlCi0JCQkvLyBpbnRvIGFuIElSZXNvdXJjZSwgb3IgaWYgd2UgY291bGQgbm90IGNvbXB1dGUgYSBVUkwKLQkJCS8vIGZyb20gdGhhdCByZXNvdXJjZS4gRWl0aGVyIHdheSwgaXQgZGVmaW5pdGVseSBpc24ndAotCQkJLy8gYSBub3JtYWwgZ2VuZXJhdGVkIFByb3h5LCBzbyBnZXQgb3V0IGFuZCByZXR1cm4gbnVsbC4KLQkJfQotCQlyZXR1cm4gd3NjSW5mbzsJCQotCX0KLQotCS8qKgotCSAqIFNlYXJjaGVzIHRoZSB3b3Jrc3BhY2UgZm9yIEF4aXMgc2VydmljZXMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IHNlcnZlci1jb25maWcud3NkZCA8c2VydmljZT4gZWxlbWVudHMKLQkgKiBpbiBwcm9qZWN0cyB3aXRoIGFuIEF4aXMgc2VydmxldCByZWdpc3RlcmVkCi0JICogaW4gdGhlIHdlYi54bWwgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VzKG51bGwsbW9uaXRvcik7Ci0JfQotCQotCS8qKgotCSAqIFNlYXJjaGVzIHRoZSB3b3Jrc3BhY2UgZm9yIEF4aXMgc2VydmljZXMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IHNlcnZlci1jb25maWcud3NkZCA8c2VydmljZT4gZWxlbWVudHMKLQkgKiBpbiBwcm9qZWN0cyB3aXRoIGFuIEF4aXMgc2VydmxldCByZWdpc3RlcmVkCi0JICogaW4gdGhlIHdlYi54bWwgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gcHJvamVjdHMgVGhlIHByb2plY3RzIHRvIGNvbmZpbmUgdGhlIHNlYXJjaCB0by4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJVmVjdG9yIHdlYlNlcnZpY2VzID0gbmV3IFZlY3RvcigpOwotCQlpZiAocHJvamVjdHMgPT0gbnVsbCkKLQkJewotCQkJcHJvamVjdHMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCk7Ci0JCX0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJewotCQkJLy8gd2UgYXJlIG9ubHkgaW50ZXJzdGVkIGluIGR5bmFtaWMgd2ViIHByb2plY3QKLQkJCWlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdHNbaV0pKQotCQkJewotCQkJCXRyeSAKLQkJCQl7Ci0JCQkJCXdlYlNlcnZpY2VzLmFkZEFsbChnZXRXZWJTZXJ2aWNlc0Zyb21Qcm9qZWN0KHByb2plY3RzW2ldLCBtb25pdG9yKSk7Ci0JCQkJfSAKLQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIAotCQkJCXsKLQkJCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJCQl9IAotCQkJfQotCQl9Ci0JCXJldHVybiB3ZWJTZXJ2aWNlczsKLQl9Ci0JCi0JLyoqCi0JICogU2VhcmNoZXMgZm9yIGEgcGFydGljdWxhciB3ZWIgcHJvamVjdCBmb3IgQXhpcyBzZXJ2aWNlcyBhcwotCSAqIGlkZW50aWZpZWQgYnkgc2VydmVyLWNvbmZpZy53c2RkIDxzZXJ2aWNlPiBlbGVtZW50cwotCSAqIHdpdGggYW4gQXhpcyBzZXJ2bGV0IHJlZ2lzdGVyZWQKLQkgKiBpbiB0aGUgd2ViLnhtbCBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgcG9zc2libHkgbnVsbC4KLQkgKiBAcmV0dXJuIEEgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLgotCSAqLwotCXByaXZhdGUgTGlzdCBnZXRXZWJTZXJ2aWNlc0Zyb21Qcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLQl7CQotCQkvLyBTZWFyY2ggdGhlIHdlYi54bWwgaW4gZml4ZWQgbG9jYXRpb24KLQkJSVBhdGggd2ViRGVzY3JpcHRvclBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViSW5mUGF0aChwcm9qZWN0KS5hcHBlbmQoIi93ZWIueG1sIik7Ci0JCUlGaWxlIHdlYlhtbEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUod2ViRGVzY3JpcHRvclBhdGgpOwotCQkKLQkJaWYgKHdlYlhtbEZpbGUgIT0gbnVsbCAmJiBpc0F4aXNTZXJ2bGV0RXhpc3RlZCh3ZWJYbWxGaWxlLCBtb25pdG9yKSkKLQkJewotCQkJLy8gU2VhcmNoIGZvciBhbGwgc2VydmVyLWNvbmZpZy53c2RkIGluc2lkZSB0aGlzIHByb2plY3QKLQkJCVNlcnZlckNvbmZpZ1dTRERWaXNpdG9yIHZpc2l0b3IgPSBuZXcgU2VydmVyQ29uZmlnV1NERFZpc2l0b3IoKTsKLQkJCXByb2plY3QuYWNjZXB0KHZpc2l0b3IpOwkJCi0JCQl2aXNpdG9yLnZpc2l0KHByb2plY3QpOwotCQkJVmVjdG9yIHdzZGRGaWxlcyA9IHZpc2l0b3IuZ2V0V3NkZEZpbGVzKCk7Ci0JCQlWZWN0b3Igc2VydmljZXNOYW1lcyA9IG5ldyBWZWN0b3IoKTsgCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHdzZGRGaWxlcy5zaXplKCk7IGkrKykKLQkJCXsKLQkJCQlzZXJ2aWNlc05hbWVzLmFkZEFsbChnZXRXZWJTZXJ2aWNlc05hbWVzRnJvbUF4aXNDb25maWcoKElGaWxlKXdzZGRGaWxlcy5nZXQoaSksIG1vbml0b3IpKTsKLQkJCX0KLQkJCXJldHVybiBnZXRXZWJTZXJ2aWNlcyhwcm9qZWN0LCBzZXJ2aWNlc05hbWVzLCBtb25pdG9yKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJldHVybiBuZXcgVmVjdG9yKCk7Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZWIueG1sIGNvbnRhaW5zIGF4aXMgc2VydmxldAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0F4aXNTZXJ2bGV0RXhpc3RlZChJRmlsZSBmaWxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0JewotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJQXhpc1NlcnZsZXRTYXhIYW5kbGVyIGhhbmRsZXIgPSBuZXcgQXhpc1NlcnZsZXRTYXhIYW5kbGVyKCk7Ci0JCXBhcnNlci5wYXJzZShpbnB1dFN0cmVhbSwgaGFuZGxlcik7Ci0JCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCXJldHVybiBoYW5kbGVyLmlzVGhlcmVBeGlzU2VydmxldCgpOwotCX0KLQkKLQkvKgotCSAqIEdpdmVuIGEgbGlzdCBvZiBzZXJ2aWNlcywgZmluZCB0aGUgc2VydmVycyB0aGlzIHByb2plY3QgaXMgYXNzb2NpYXRlZCwKLQkgKiBDb21iaW5lIHRoZW0gYW5kIGZvcm0gdmFyaW91cyBlbmQgcG9pbnQKLQkgKi8KLQlwcml2YXRlIExpc3QgZ2V0V2ViU2VydmljZXMoSVByb2plY3QgcHJvamVjdCwgTGlzdCBzZXJ2aWNlc05hbWVzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlWZWN0b3Igd2ViU2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoU2VydmVyVXRpbC5nZXRNb2R1bGUocHJvamVjdCksbW9uaXRvcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLQkJewotCQkJU3RyaW5nIGhvc3QgPSBzZXJ2ZXJzW2ldLmdldEhvc3QoKTsKLQkJCVNlcnZlclBvcnQgaHR0cFBvcnQgPSBnZXRIdHRwUG9ydChzZXJ2ZXJzW2ldLmdldFNlcnZlclBvcnRzKG1vbml0b3IpKTsKLQkJCWlmIChodHRwUG9ydCAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgc2VydmljZXNOYW1lcy5zaXplKCk7IGorKykKLQkJCQl7Ci0JCQkJCVdlYlNlcnZpY2VJbmZvIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlSW5mbygpOwotCQkJCQlTdHJpbmcgZW5kUG9pbnRVUkwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgaHR0cFBvcnQuZ2V0UG9ydCgpICsgIi8iICsgSjJFRVV0aWxzLmdldEZpcnN0V2ViTW9kdWxlTmFtZShwcm9qZWN0KSArICIvc2VydmljZXMvIiArIChTdHJpbmcpc2VydmljZXNOYW1lcy5nZXQoaik7Ci0JCQkJCXdzSW5mby5zZXRFbmRQb2ludFVSTChlbmRQb2ludFVSTCk7Ci0JCQkJCXdzSW5mby5zZXRXc2RsVVJMKGVuZFBvaW50VVJMKyI/d3NkbCIpOwotCQkgICAgICAgICAgICB3ZWJTZXJ2aWNlcy5hZGQod3NJbmZvKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHdlYlNlcnZpY2VzOwotCX0KLQkKLQkvKgotCSAqIFBhcnNlIHRoZSBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZSwgcmV0dXJuIGEgbGlzdCBvZiBuYW1lcyBvZiB3ZWIgc2VydmljZXMgCi0JICovCi0JcHJpdmF0ZSBMaXN0IGdldFdlYlNlcnZpY2VzTmFtZXNGcm9tQXhpc0NvbmZpZyhJRmlsZSBmaWxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0JewotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJQXhpc1NlcnZpY2VzU2F4SGFuZGxlciBoYW5kbGVyID0gbmV3IEF4aXNTZXJ2aWNlc1NheEhhbmRsZXIoKTsKLQkJcGFyc2VyLnBhcnNlKGlucHV0U3RyZWFtLCBoYW5kbGVyKTsKLQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJcmV0dXJuIGhhbmRsZXIuZ2V0V2ViU2VydmljZXNOYW1lcygpOwkKLQl9Ci0JCi0JLyoKLQkgKiBmaW5kIHRoZSByaWdodCBwb3J0IChodHRwKSBmcm9tIGEgbGlzdCBvciBwb3J0cwotCSAqLwotCXByaXZhdGUgU2VydmVyUG9ydCBnZXRIdHRwUG9ydChTZXJ2ZXJQb3J0W10gcG9ydHMpCi0JewotCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlTdHJpbmcgcHJvdG9jb2wgPSBwb3J0c1tpXS5nZXRQcm90b2NvbCgpOyAKLQkJCWlmICggcHJvdG9jb2wgIT0gbnVsbCAmJiBwcm90b2NvbC50cmltKCkudG9Mb3dlckNhc2UoKS5lcXVhbHMoImh0dHAiKSkgcmV0dXJuIHBvcnRzW2ldOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL1NlcnZlckNvbmZpZ1dTRERWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9TZXJ2ZXJDb25maWdXU0REVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTRkMTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL1NlcnZlckNvbmZpZ1dTRERWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE3ICAgMTQwODMyIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVZpc2l0b3I7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJDb25maWdXU0REVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZVZpc2l0b3IKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVhJU19TRVJWRVJfQ09ORklHX0ZJTEVfTkFNRSA9ICJTZXJ2ZXItY29uZmlnLndzZGQiOwotCVZlY3RvciB3c2RkRmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlIHJlc291cmNlKQotICAgIHsKLQkJaWYgKHJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLQkJeyAgICAgCi0JCQlpZiAocmVzb3VyY2UuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoQVhJU19TRVJWRVJfQ09ORklHX0ZJTEVfTkFNRSkpCi0JCQl7Ci0JCQkJd3NkZEZpbGVzLmFkZCgoSUZpbGUpcmVzb3VyY2UpOwotCQkJfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotCXB1YmxpYyBWZWN0b3IgZ2V0V3NkZEZpbGVzKCkKLQl7Ci0JCXJldHVybiB3c2RkRmlsZXM7IAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9wbHVnaW4vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9wbHVnaW4vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjZjdjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0LlBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgdG8gdGhlCi0qIFdlYiBTZXJ2aWNlcyBydW50aW1lIGZvdW5kIGluIG9yZy5lY2xpcHNlLmpzdC53cy4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLQotCS8qKgotCSogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLQkqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0KLQkJIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUiOwotCi0JLyoqCi0JKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0JKi8KLQlwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbiBpbnN0YW5jZV87Ci0JcHJpdmF0ZSBJTG9nIGxvZ187Ci0KLQlwcml2YXRlIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgYXhpc0VtaXR0ZXJDb250ZXh0XzsKLQkvKioKLQkqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotCSogVGhlICJwbHVnaW4iIGVsZW1lbnQgaW4gcGx1Z2luLnhtbCBzaG91bGQgaW5jbHVkZSB0aGUgYXR0cmlidXRlCi0JKiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIi4KLQkqIEBwYXJhbSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luLgotCSovCi0JcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpIHsKLQkJCWluc3RhbmNlXyA9IHRoaXM7Ci0JCX0KLQkJbG9nXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0KLQl9Ci0KLSAgLy8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGtlZXAgdGhlIGxvZ2dpbmcgZnJvbSBibG93aW5nIHVwLgotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBJRDsgIAotICB9Ci0gIAotCS8qKgotCSogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLQkqIChXZWJTZXJ2aWNlV2FzQ29uc3VtcHRpb25QbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3Mud2FzLnY1LnRwIik7Ci0JKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbiBzaW5nbGV0b24uCi0JKi8KLQlzdGF0aWMgcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luIGdldEluc3RhbmNlKCkgewotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQkKLQlwdWJsaWMgQXhpc0VtaXR0ZXJDb250ZXh0IGdldEF4aXNFbWl0dGVyQ29udGV4dCgpCi0JewotCQlpZiAoYXhpc0VtaXR0ZXJDb250ZXh0XyA9PSBudWxsKSAKLQkgIAkJYXhpc0VtaXR0ZXJDb250ZXh0XyA9IFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQkJcmV0dXJuIGF4aXNFbWl0dGVyQ29udGV4dF87Ci0JfQotCi0JLyoqCi0JKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyBmaXJzdCBsb2FkZWQuCi0JKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc3RhcnQuCi0JKi8KLQlwdWJsaWMgdm9pZCBzdGFydCggQnVuZGxlQ29udGV4dCBidW5kbGUgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWxvZ18ubG9nKElMb2cuSU5GTywgNTA4NywgdGhpcywgInN0YXJ0IiwgIlN0YXJ0aW5nIHBsdWdpbiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIik7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotCQkgIHN1cGVyLnN0YXJ0KCBidW5kbGUgKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGxvZ18ubG9nKCBJTG9nLkVSUk9SLCA1MDg4LCB0aGlzLCAic3RhcnQiLCBleGMgKTsKLSAgICB9Ci0JfQotCi0JLyoqCi0JKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyB1bmxvYWRlZC4KLQkqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGlzIHBsdWdpbiBmYWlscyB0byBzaHV0ZG93bi4KLQkqLwotCXB1YmxpYyB2b2lkIHN0b3AoIEJ1bmRsZUNvbnRleHQgY29udGV4dCApIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJbG9nXy5sb2coSUxvZy5JTkZPLCA1MDg5LCB0aGlzLCAic2h1dGRvd24iLCAiU2h1dHRpbmcgcGx1Z2luIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0JCSAgc3VwZXIuc3RvcCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwOTAsIHRoaXMsICJzdG9wIiwgZXhjICk7ICAgICAgCi0gICAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2ZDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5YTAzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NjLWF4aXMtdWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJkYWM4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjliNzNlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNUaHUgTWF5IDMxIDEzOjEwOjE4IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiYjU1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozNCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmIxMjk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAzLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndzcnQ7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmFwYWNoZS5heGlzO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NzJiNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNDkyN2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2Vic2VydmljZSBBeGlzIENvbnN1bXB0aW9uIFVJCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotV0VCU0VSVklDRUNMSUVOVFRZUEVfTkFNRV9KQVZBX0FYSVM9SmF2YSBwcm94eQotTEFCRUxfUlVOVElNRV9BWElTXzExPUFwYWNoZSBBeGlzCi1ERVNDX1JVTlRJTUVfQVhJU18xMT1BcGFjaGUgQXhpcwotIwotIwlXZWIgU2VydmljZXMgUHJlZmVyYW5jZSBQYWdlcwotIwotIyBDYXRlZ29yaWVzCi1QUkVGRVJFTkNFX0NBVEVHT1JZX0FYSVNfRU1JVFRFUj1BeGlzIEVtaXR0ZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1MGMxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotICAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldFJlZ2lzdHJ5Ij4KLSAgICAgICA8d2lkZ2V0RmFjdG9yeSAgIAotICAgICAgICAgICAgIGlkPSJBeGlzQ2xpZW50Q29uZmlnIgotICAgICAgICAgICAgIGluc2VydEJlZm9yZUNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kIgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53c3J0LkF4aXNDbGllbnRDb25maWdXaWRnZXRGYWN0b3J5Ii8+Ci0gICAgPC9leHRlbnNpb24+IAotICAgICAgICAgIDxleHRlbnNpb24KLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hbnREYXRhTWFwcGluZyI+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnRQcm9qZWN0TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFByb2plY3QiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MiLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAJCTxtYXAKLSAgICAgICAgICAgICAga2V5PSJNYXBwaW5ncyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkNsaWVudENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgotICA8L2V4dGVuc2lvbj4gCi0gICAgIDxleHRlbnNpb24KLSAgICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPiAgICAgCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfQVhJU19FTUlUVEVSIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5uYW1lIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLkF4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuQXhpc0VtaXR0ZXJQcmVmZXJlbmNlUGFnZSI+Ci0gICAgICA8L3BhZ2U+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL0F4aXNDb25zdW1wdGlvblVJLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YWE4NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjAyMTYgICAxMjY5ODkgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0jIDIwMDYwNDI0ICAgMTIwMTM3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLQotTVNHX0VSUk9SX0RFRkFVTFRfQkVBTj1JV0FCMDQ5MUUgRXJyb3IgZW5jb3VudGVyZWQgd2hpbGUgc2V0dGluZyB1cCBkZWZhdWx0IHZhbHVlcyBmb3IgSmF2YSBiZWFuCi1NU0dfRVJST1JfV1NETF9OT19ERUZJTklUSU9OPUlXQUIwNDk1RSBXU0RMIGZpbGUgYXQgezB9IGhhcyBubyBkZWZpbml0aW9uIGVsZW1lbnQKLU1TR19FUlJPUl9XU0RMX05PX1BPUlQ9SVdBQjA0OTZFIFdTREwgZmlsZSBhdCB7MH0gaGFzIG5vIHBvcnQgZWxlbWVudAotTVNHX0VSUk9SX1dSSVRFX1dTREw9SVdBQjA0OTdFIEVycm9yIGluIHdyaXRpbmcgV1NETCBmaWxlIHswfQotCi0jCi0jIE1lc3NhZ2VzIGZvciBDb3B5Q2xpZW50V1NETFRhc2sKLSMKLU1TR19FUlJPUl9JTVBPUlRfV1NETD1JV0FCMDUzMUUgRXJyb3IgaW4gcmVzb2x2aW5nIFdTREwgZmlsZSB7MH0sIGltcG9ydCBXU0RMIGZpbGUgbXVzdCBoYXZlIGFic29sdXRlIFVSTCBvciByZWxhdGl2ZSBVUkwgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Ci0KLQotIwotI0RlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kCi0jCi1NU0dfRVJST1JfV1NETF9MT0NBVElPTl9OT1RfU0VUPUlXQUIwNTAxRSBXU0RMIGxvY2F0aW9uIG5vdCBzZXQuCi0KLSMKLSNBZGRKYXJzVG9Qcm9qZWN0QnVpbGRQYXRoVGFzawotIwotTVNHX1dBUk5fTk9fSkFWQV9OQVRVUkU9SVdBQjA1MDJXIFRoZSBwcm9qZWN0IGlzIG5vdCBhIEphdmEgcHJvamVjdC4KLU1TR19FUlJPUl9CQURfQlVJTERQQVRIPUlXQUIwNTAzRSBVbmFibGUgdG8gdXBkYXRlIEphdmEgYnVpbGQgcGF0aC4gUGxlYXNlIGNoZWNrIHlvdXIgc3lzdGVtIGVudmlyb25tZW50LgotCi0jCi0jQ29weUF4aXNKYXJDb21tYW5kCi0jCi1QUk9HUkVTU19JTkZPX0NPUFlfQVhJU19DRkc9SVdBQjA1MDVJIENvcHlpbmcgQXhpcyBqYXIgZmlsZXMgdG8gd2ViIHByb2plY3QuCi1NU0dfRVJST1JfRklMRUNPUFk9SVdBQjA1MDZFIEVycm9yIHdoZW4gY29weWluZyBBeGlzIGphciBmaWxlcyB0byB3ZWIgcHJvamVjdAotCi0jCi0jUmVmcmVzaFByb2plY3RUYXNrCi0jCi1NU0dfRVJST1JfUkVGUkVTSF9QUk9KRUNUPUlXQUIwNTA4RSBVbmFibGUgdG8gcmVmcmVzaCBwcm9qZWN0LgotCi0jCi0jV2ViU2VydmljZUF4aXNQcm94eVBhZ2UKLSMKLVRPT0xUSVBfUFdKQl9QQUdFPVBhZ2UKLVRPT0xUSVBfUFdKQl9URVhUX0ZPTERFUj1Gb2xkZXIgZm9yIHByb3h5IHRvIGJlIGdlbmVyYXRlZCBmb3IgdGhlIHNlbGVjdGVkIGJpbmRpbmcuCi1UT09MVElQX1BXSkJfQ0hFQ0tCT1hfR0VOUFJPWFk9Q2hlY2sgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgYSBwcm94eS4KLQotUEFHRV9USVRMRV9XU19BWElTX1BST1hZPVdlYiBTZXJ2aWNlIFByb3h5IFBhZ2UKLVBBR0VfREVTQ19XU19BWElTX1BST1hZPVNlbGVjdCBnZW5lcmF0ZSBwcm94eSBpZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBwcm94eSBmb3IgeW91ciBzZXJ2aWNlLgotQ0hFQ0tCT1hfR0VOUFJPWFk9R2VuZXJhdGUgcHJveHkKLUxBQkVMX0ZPTERFUl9OQU1FPU91dHB1dCBmb2xkZXIKLQotIwotIyBNZXNzYWdlcyBmb3IgV2ViU2VyaXZjZUF4aXNNYXBwaW5nc1BhZ2UKLSMKLVBBR0VfVElUTEVfV1NfQkVBTjJYTUw9V2ViIFNlcnZpY2UgUGFja2FnZSB0byBOYW1lc3BhY2UgTWFwcGluZwotUEFHRV9USVRMRV9XU19YTUwyUFJPWFk9V2ViIFNlcnZpY2UgQ2xpZW50IE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmcKLVBBR0VfREVTQ19QMk5fTUFQUElOR1M9RGVmaW5lIGN1c3RvbSBtYXBwaW5nIGZvciBwYWNrYWdlIHRvIG5hbWVzcGFjZS4KLQotCi1MQUJFTF9NQVBQSU5HX1BBSVJTPU1hcHBpbmcgcGFpcnMKLVRBQkxFX0NPTFVNTl9MQUJFTF9QQUNLQUdFPXBhY2thZ2UKLVRBQkxFX0NPTFVNTl9MQUJFTF9OQU1FU1BBQ0U9bmFtZXNwYWNlCi1MQUJFTF9FWFBMT1JFX01BUFBJTkdTX1hNTDJCRUFOPURlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2UuCi1UT09MVElQX04yUF9TSE9XX01BUFBJTkdTPURlZmluZSBuYW1lc3BhY2UgdG8gcGFja2FnZSBtYXBwaW5nIGZvciBjdXN0b21pemF0aW9uLgotCi0jIE1lc3NhZ2VzIGZvciBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlCi1UT09MVElQX1BQQUVfUEFHRT1TZXQgcHJlZmVyZW5jZXMgdGhhdCBjb250cm9sIEF4aXMgRW1pdHRlci4KLVRPT0xUSVBfUFBBRV9DSEVDS0JPWF9BTExfV0FOVEVEPUJ5IGRlZmF1bHQsIGNvZGUgaXMgZ2VuZXJhdGVkIG9ubHkgZm9yIHJlZmVyZW5jZWQgZWxlbWVudHMuIFxuQ2FsbCBiR2VuZXJhdGVBbGwodHJ1ZSkgYW5kIFdTREwySmF2YSB3aWxsIGdlbmVyYXRlIGNvZGUgXG5mb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBzY29wZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBhcmUgcmVmZXJlbmNlZC4gXG5TY29wZSBtZWFuczogYnkgZGVmYXVsdCwgYWxsIFdTREwgZmlsZXM7IGlmIGdlbmVyYXRlSW1wb3J0cyhmYWxzZSksXG50aGVuIG9ubHkgdGhlIGltbWVkaWF0ZSBXU0RMIGZpbGUuCi1UT09MVElQX1BQQUVfQ0hFQ0tCT1hfSEVMUEVSX1dBTlRFRD1FbWl0cyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YSBkYXRhLgotVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1dSQVBfQVJSQVlTPVByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciB3cmFwcGVkIFhNTCBhcnJheSB0eXBlcy4KLVRPT0xUSVBfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFM9SWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZSBKYXZhMldTREwgcGFyc2VyIHdpbGwgbG9vayBpbnRvIGV4dGVuZGVkIGNsYXNzZXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gZXhwb3J0IGludG8gdGhlIFdTREwgZmlsZS4KLVRPT0xUSVBfUFBBRV9DSEVDS0JPWF9WQUxJREFURV9BR0FJTlNUX0pBWFJQQz1JZiBzZWxlY3RlZCwgdGhlIHRvb2xzIHdpbGwgZXhhbWluZSB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIGFuZCBpdHMgdmFsdWUgdHlwZXMgdG8gZGV0ZXJtaW5lIGlmIGl0IHNhdGlzZmllcyBpbXBvcnRhbnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uICAgIAotVE9PTFRJUF9QUEFFX0NPTUJPX0RFUExPWV9TQ09QRT1BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQuCi1UT09MVElQX1BQQUVfRklFTERfVElNRV9PVVQ9VGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0IGlzIDQ1LCBzcGVjaWZ5IC0xIHRvIGRpc2FibGUpLgotVE9PTFRJUF9QUEFFX0dST1VQX1dTREwySkFWQT1TZXQgcHJlZmVyZW5jZXMgZm9yIHdzZGwyamF2YS4KLVRPT0xUSVBfUFBBRV9HUk9VUF9KQVZBMldTREw9U2V0IHByZWZlcmVuY2VzIGZvciBqYXZhMndzZGwuCi1CVVRUT05fQUxMX1dBTlRFRD0mR2VuZXJhdGUgY29kZSBmb3IgYWxsIGVsZW1lbnRzLCBldmVuIHVucmVmZXJlbmNlZCBvbmVzCi1CVVRUT05fSEVMUEVSX1dBTlRFRD1FbWl0cyBzZXBhcmF0ZSAmaGVscGVyIGNsYXNzZXMgZm9yIG1ldGEgZGF0YQotQlVUVE9OX1dSQVBfQVJSQVlTPVByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciAmd3JhcHBlZCBYTUwgYXJyYXkgdHlwZXMKLUJVVFRPTl9VU0VfSU5IRVJJVEVEX01FVEhPRFM9TG9vayBmb3IgYWxsb3dlZCAmbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3MKLUJVVFRPTl9WQUxJREFURV9BR0FJTlNUX0pBWFJQQz1BbmFseXplIHRoZSBzZXJ2aWNlIGNsYXNzIGZvciBjb21wbGlhbmNlIHRvIEpBWC1SUEMgYmVmb3JlIGdlbmVyYXRpbmcgY29kZQotTEFCRUxfREVQTE9ZX1NDT1BFPUFkZCAmc2NvcGUgdG8gZGVwbG95LndzZGQ6Ci1MQUJFTF9USU1FX09VVD0mVGltZW91dCBpbiBzZWNvbmRzOgotR1JPVVBfV1NETDJKQVZBX05BTUU9V3NkbDJKYXZhCi1HUk9VUF9KQVZBMldTRExfTkFNRT1KYXZhMldzZGwKLURFUExPWV9TQ09QRV9BUFBMSUNBVElPTj1BcHBsaWNhdGlvbgotREVQTE9ZX1NDT1BFX1JFUVVFU1Q9UmVxdWVzdAotREVQTE9ZX1NDT1BFX1NFU1NJT049U2Vzc2lvbgotTVNHX0VSUk9SX0lOVkFMSURfVElNRV9PVVQ9SW52YWxpZCB0aW1lb3V0ISBUaW1lb3V0IHNob3VsZCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIC0xIHRvIGRpc2FibGUuCi1NU0dfVVNFX0pWTV9BUkdVTUVOVF9GT1JfVElNRV9PVVQ9VXNpbmcgdGltZW91dCB2YWx1ZSAoaW4gbWlsbGlzZWNvbmRzKSBmcm9tIEpWTSBhcmd1bWVudHMgQXhpc1dzZGwySmF2YVRpbWVvdXQKLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNDAzOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA0MjQgICAxMjAxMzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfREVGQVVMVF9CRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XU0RMX05PX0RFRklOSVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dTRExfTk9fUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV1JJVEVfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSU1QT1JUX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dTRExfTE9DQVRJT05fTk9UX1NFVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9OT19KQVZBX05BVFVSRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQkFEX0JVSUxEUEFUSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9HUkVTU19JTkZPX0NPUFlfQVhJU19DRkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZJTEVDT1BZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9SRUZSRVNIX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV0pCX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV0pCX1RFWFRfRk9MREVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdKQl9DSEVDS0JPWF9HRU5QUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX0FYSVNfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX0FYSVNfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfR0VOUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRk9MREVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19CRUFOMlhNTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1hNTDJQUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfUDJOX01BUFBJTkdTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX01BUFBJTkdfUEFJUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX0xBQkVMX1BBQ0tBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX0xBQkVMX05BTUVTUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FWFBMT1JFX01BUFBJTkdTX1hNTDJCRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfTjJQX1NIT1dfTUFQUElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0FMTF9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0hFTFBFUl9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1dSQVBfQVJSQVlTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9DT01CT19ERVBMT1lfU0NPUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0ZJRUxEX1RJTUVfT1VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9HUk9VUF9XU0RMMkpBVkE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFFX0dST1VQX0pBVkEyV1NETDsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0FMTF9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0hFTFBFUl9XQU5URUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1dSQVBfQVJSQVlTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9VU0VfSU5IRVJJVEVEX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0RFUExPWV9TQ09QRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9USU1FX09VVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBHUk9VUF9XU0RMMkpBVkFfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBHUk9VUF9KQVZBMldTRExfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBERVBMT1lfU0NPUEVfQVBQTElDQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgREVQTE9ZX1NDT1BFX1JFUVVFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgREVQTE9ZX1NDT1BFX1NFU1NJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lOVkFMSURfVElNRV9PVVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1VTRV9KVk1fQVJHVU1FTlRfRk9SX1RJTUVfT1VUOwotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDIxYjgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLldTRExQYXJzZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0vKioKLSAqIAotICogQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGllbnRTY2VuYXJpb18gID0gdHJ1ZTsKLQlwcml2YXRlIGJvb2xlYW4gY3VzdG9taXplTWFwcGluZ3NfID0gZmFsc2U7Ci0JcHJpdmF0ZSBib29sZWFuIGdlbmVyYXRlUHJveHlfID0gdHJ1ZTsKLQlwcml2YXRlIFN0cmluZyBjbGllbnRSdW50aW1lSWRfOwotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm94eVByb2plY3RfID0gbnVsbDsKLQlwcml2YXRlIElQcm9qZWN0IGNsaWVudFByb2plY3RFQVJfID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyB3c2RsVVJMXzsKLQlwcml2YXRlIGJvb2xlYW4gdGVzdFByb3h5U2VsZWN0ZWRfOwotCXByaXZhdGUgSVNlcnZlciBjbGllbnRFeGlzdGluZ1NlcnZlcl87Ci0JcHJpdmF0ZSBTdHJpbmcgY2xpZW50U2VydmVyXzsKLQlwcml2YXRlIGJvb2xlYW4gY2xpZW50SXNFeGlzdGluZ1NlcnZlcl87Ci0JcHJpdmF0ZSBTdHJpbmcgcHJveHlQcm9qZWN0Rm9sZGVyXzsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQlwdWJsaWMgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kKCApIAotCXsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCQotCQljbGllbnRFeGlzdGluZ1NlcnZlcl8gPSBnZXRTZXJ2ZXJGcm9tU2VydmVyTGFiZWwoKTsKLS8vCQlpZiAoY2xpZW50RXhpc3RpbmdTZXJ2ZXJfICE9IG51bGwpIHsKLS8vCQkJLy9UT0RPIFRoZSBmb2xsb3dpbmcgbGluZSBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeS4KLS8vCQkJY2xpZW50RXhpc3RpbmdTZXJ2ZXJfLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotLy8JCX0gZWxzZSB7Ci0vLwkJCS8vVE9ETyBnZXQgdGhlIGZhY3RvcnkgaWQgZm9yIHRoZSB0eXBlLgotLy8JCX0KLQkJLy9qYXZhV1NETFBhcmFtCi0JCWphdmFXU0RMUGFyYW1fID0gbmV3IEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0JCQotCQkvLyBwcm94eVByb2plY3RGb2xiZXJfCi0JCQotCQl3ZWJTZXJ2aWNlc1BhcnNlcl8gPSBXU0RMUGFyc2VyRmFjdG9yeS5nZXRXU0RMUGFyc2VyKCk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50UnVudGltZUlEKFN0cmluZyBjbGllbnRSdW50aW1lSWQpIHsKLQkJY2xpZW50UnVudGltZUlkXyA9IGNsaWVudFJ1bnRpbWVJZDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldENsaWVudFJ1bnRpbWVJRCgpIHsKLQkJcmV0dXJuIHRoaXMuY2xpZW50UnVudGltZUlkXzsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0JICovCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudFByb2plY3QuCi0JICovCi0JcHVibGljIElQcm9qZWN0IGdldENsaWVudFByb2plY3QoKSB7Ci0JCXJldHVybiBwcm94eVByb2plY3RfOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjbGllbnRQcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgY2xpZW50UHJvamVjdCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBjbGllbnRQcm9qZWN0KSB7Ci0JCXRoaXMucHJveHlQcm9qZWN0XyA9IGNsaWVudFByb2plY3Q7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRQcm9qZWN0RUFSLgotCSAqLwotCXB1YmxpYyBJUHJvamVjdCBnZXRDbGllbnRQcm9qZWN0RUFSKCkgewotCQlyZXR1cm4gY2xpZW50UHJvamVjdEVBUl87Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNsaWVudFByb2plY3RFQVIKLQkgKiAgICAgICAgICAgIFRoZSBjbGllbnRQcm9qZWN0RUFSIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0RUFSKElQcm9qZWN0IGNsaWVudFByb2plY3RFQVIpIHsKLQkJdGhpcy5jbGllbnRQcm9qZWN0RUFSXyA9IGNsaWVudFByb2plY3RFQVI7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSB0ZXN0UHJveHlTZWxlY3RlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0UHJveHlTZWxlY3RlZCgpIHsKLQkJcmV0dXJuIHRlc3RQcm94eVNlbGVjdGVkXzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGVzdFByb3h5U2VsZWN0ZWQKLQkgKiAgICAgICAgICAgIFRoZSB0ZXN0UHJveHlTZWxlY3RlZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGVzdFByb3h5U2VsZWN0ZWQoYm9vbGVhbiB0ZXN0UHJveHlTZWxlY3RlZCkgewotCQl0aGlzLnRlc3RQcm94eVNlbGVjdGVkXyA9IHRlc3RQcm94eVNlbGVjdGVkOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgd3NkbFVSTC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkwoKSB7Ci0JICByZXR1cm4gd3NkbFVSTF87Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHdzZGxVUkwKLQkgKiAgICAgICAgICAgIFRoZSB3c2RsVVJMIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJMKFN0cmluZyB3c2RsVVJMKSB7Ci0JCXRoaXMud3NkbFVSTF8gPSB3c2RsVVJMOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50U2VydmVyLgotCSAqLwotCXB1YmxpYyBJU2VydmVyIGdldENsaWVudEV4aXN0aW5nU2VydmVyKCkgewotCQlyZXR1cm4gY2xpZW50RXhpc3RpbmdTZXJ2ZXJfOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjbGllbnRTZXJ2ZXIKLQkgKiAgICAgICAgICAgIFRoZSBjbGllbnRTZXJ2ZXIgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldENsaWVudFNlcnZlcihTdHJpbmcgY2xpZW50U2VydmVyKSB7Ci0JCXRoaXMuY2xpZW50U2VydmVyXyA9IGNsaWVudFNlcnZlcjsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXIuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNDbGllbnRJc0V4aXN0aW5nU2VydmVyKCkgewotCQlyZXR1cm4gY2xpZW50SXNFeGlzdGluZ1NlcnZlcl87Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXIKLQkgKiAgICAgICAgICAgIFRoZSBjbGllbnRJc0V4aXN0aW5nU2VydmVyIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnRJc0V4aXN0aW5nU2VydmVyKGJvb2xlYW4gY2xpZW50SXNFeGlzdGluZ1NlcnZlcikgewotCQl0aGlzLmNsaWVudElzRXhpc3RpbmdTZXJ2ZXJfID0gY2xpZW50SXNFeGlzdGluZ1NlcnZlcjsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRDdXN0b21pemVDbGllbnRNYXBwaW5ncygpIHsKLQkJcmV0dXJuIGN1c3RvbWl6ZU1hcHBpbmdzXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDdXN0b21pemVDbGllbnRNYXBwaW5ncyhib29sZWFuIHZhbHVlKSB7Ci0JCWN1c3RvbWl6ZU1hcHBpbmdzXyA9IHZhbHVlOwotCX0KLQotCXByaXZhdGUgSVNlcnZlciBnZXRTZXJ2ZXJGcm9tU2VydmVyTGFiZWwoKSB7Ci0JCWlmICh0cnVlKQotCQkvLyByc2sgcmV2aXNpdCBpZiAoY2xpZW50SXNFeGlzdGluZ1NlcnZlcl8pCi0JCXsKLQkJCS8vIE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIFdlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZVJlZ2lzdHJ5Ci0JCQl7Ci0JCQkJSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLQkJCQlpZiAoc2VydmVycyAhPSBudWxsICYmIHNlcnZlcnMubGVuZ3RoIT0wKSB7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykgewotCQkJCQkJSVNlcnZlciBzZXJ2ZXIgPSAoSVNlcnZlcikgc2VydmVyc1tpXTsKLQkJCQkJCWlmICgoc2VydmVyLmdldE5hbWUoKSkuZXF1YWxzKGNsaWVudFNlcnZlcl8pKQotCQkJCQkJCXJldHVybiBzZXJ2ZXI7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkvLwotCQl9IGVsc2UgewotCQkJLy9UT0RPIGNyZWF0ZSB0aGUgc2VydmVyCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJveHlQcm9qZWN0Rm9sZGVyLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlQcm9qZWN0Rm9sZGVyKCkgewotCQlpZiAocHJveHlQcm9qZWN0XyE9bnVsbCkgewotCQkJcHJveHlQcm9qZWN0Rm9sZGVyXyA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHByb3h5UHJvamVjdF8gKS50b1N0cmluZygpOwotCQl9CQkKLQkJcmV0dXJuIHByb3h5UHJvamVjdEZvbGRlcl87ICAKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdlYlNlcnZpY2VzUGFyc2VyLgotCSAqLwotCXB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpIHsKLQkJcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyIFRoZSB3ZWJTZXJ2aWNlc1BhcnNlciB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlcl8gPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQl9Ci0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBnZW5lcmF0ZVByb3h5LgotCSAqLwotCXB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKSB7Ci0JCXJldHVybiBnZW5lcmF0ZVByb3h5XzsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIGdlbmVyYXRlUHJveHkgVGhlIGdlbmVyYXRlUHJveHkgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KSB7Ci0JCXRoaXMuZ2VuZXJhdGVQcm94eV8gPSBnZW5lcmF0ZVByb3h5OwotCX0KLQkKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGlzQ2xpZW50U2NlbmFyaW9fLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGdldElzQ2xpZW50U2NlbmFyaW8oKQotICAgIHsKLSAgICAgIHJldHVybiBpc0NsaWVudFNjZW5hcmlvXzsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIGlzQ2xpZW50U2NlbmFyaW9fIFRoZSBpc0NsaWVudFNjZW5hcmlvXyB0byBzZXQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SXNDbGllbnRTY2VuYXJpbyhib29sZWFuIGlzQ2xpZW50U2NlbmFyaW8pCi0gICAgewotICAgICAgaXNDbGllbnRTY2VuYXJpb18gPSBpc0NsaWVudFNjZW5hcmlvOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0gc2V0RW5kcG9pbnRNZXRob2QgVGhlIHNldEVuZHBvaW50TWV0aG9kIHRvIHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNldEVuZHBvaW50TWV0aG9kKCkKLSAgICB7Ci0gICAgICByZXR1cm4gInNldEVuZHBvaW50IjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRJbnB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudElucHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzllZGYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudElucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzQ2xpZW50SW5wdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCQotCXByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd3NjXzsKLQotCQlwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0XyA9IG51bGw7Ci0JCXByaXZhdGUgU3RyaW5nIHdzZGxVUkxfOwotCQlwcml2YXRlIFN0cmluZyBjbGllbnRTZXJ2ZXJfOwotCQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIEF4aXNDbGllbnRJbnB1dENvbW1hbmQoKSB7Ci0JCX0KLQkJCi0JCXB1YmxpYyBBeGlzQ2xpZW50SW5wdXRDb21tYW5kKElXZWJTZXJ2aWNlQ2xpZW50IHdzYywgSUNvbnRleHQgY29udGV4dCwgU3RyaW5nIHByb2plY3QpIHsKLQkJCXdzY18gPSB3c2M7Ci0JCQljbGllbnRQcm9qZWN0XyA9IHByb2plY3Q7IAotCQl9Ci0JCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7CSAgICAKLQkJd3NkbFVSTF8gPSB3c2NfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0V3NkbFVSTCgpOwotCQljbGllbnRTZXJ2ZXJfID0gd3NjXy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCSAgfQotCi0JcHVibGljIFN0cmluZyBnZXRDbGllbnRTZXJ2ZXIoKSB7Ci0JCXJldHVybiBjbGllbnRTZXJ2ZXJfOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdCgpIHsKLQkJcmV0dXJuIGNsaWVudFByb2plY3RfOwotCX0KLQotCXB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpIHsKLQkJcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyXzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkwoKSB7Ci0JCXJldHVybiB3c2RsVVJMXzsKLQl9Ci0JICAKLQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRPdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNzI5ZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BeGlzQ2xpZW50T3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzQ2xpZW50T3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQkKLQlwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdzY187Ci0JcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuXzsKLQlwcml2YXRlIFN0cmluZyBwcm94eUVuZHBvaW50XzsKLQkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIEF4aXNDbGllbnRPdXRwdXRDb21tYW5kKCkgewotCQl9Ci0JCQotCQlwdWJsaWMgQXhpc0NsaWVudE91dHB1dENvbW1hbmQoSVdlYlNlcnZpY2VDbGllbnQgd3NjLCBJQ29udGV4dCBjb250ZXh0KSB7Ci0JCQl3c2NfID0gd3NjOwotCQl9Ci0JCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7CQotCQl3c2NfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuc2V0SW1wbFVSTChwcm94eUJlYW5fKTsKLQkJd3NjXy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLnNldFByb3h5RW5kcG9pbnQocHJveHlFbmRwb2ludF8pOwotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQotCXB1YmxpYyB2b2lkIHNldFByb3h5QmVhbihTdHJpbmcgcHJveHlCZWFuKSB7Ci0JCXRoaXMucHJveHlCZWFuXyA9IHByb3h5QmVhbjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm94eUVuZHBvaW50KFN0cmluZyBwcm94eUVuZHBvaW50KSB7Ci0JCXRoaXMucHJveHlFbmRwb2ludF8gPSBwcm94eUVuZHBvaW50OwotCX0KLQkgIAotCQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQ29weUNsaWVudFdTRExDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0NvcHlDbGllbnRXU0RMQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTkyNzdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQ29weUNsaWVudFdTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwODE1ICAgMTg4OTk5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFdyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZUVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb3B5Q2xpZW50V1NETENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICAKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTF87Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFdTRExQYXRoTmFtZV87Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd3NQYXJzZXJfOwotICAKLSAgcHVibGljIENvcHlDbGllbnRXU0RMQ29tbWFuZCgpCi0gIHsKLSAgIAotICB9Ci0gIAotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBEZWZpbml0aW9uIGRlZiA9IHdzUGFyc2VyXy5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMXyk7Ci0gICAgaWYoZGVmPT1udWxsKQotICAgIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XU0RMX05PX0RFRklOSVRJT04sIG5ldyBTdHJpbmdbXXt3c2RsVVJMX30pKTsKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIElQYXRoIGNsaWVudFdTRExQYXRoID0gbmV3IFBhdGgoY2xpZW50V1NETFBhdGhOYW1lXyk7Ci0gICAgSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlUm9vdCA9IEZpbGVSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKTsKLSAgICBzdGF0dXMgPSByZXNvbHZlV1NETCh3b3Jrc3BhY2VSb290LCBkZWYsIGNsaWVudFdTRExQYXRoLCBlbnYsIG1vbml0b3IpOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotCXByaXZhdGUgSVN0YXR1cyByZXNvbHZlV1NETCgKLQkJSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlLAotCQlEZWZpbml0aW9uIHdzZGxEZWYsCi0JCUlQYXRoIHdzZGxQYXRoLAotCQlJRW52aXJvbm1lbnQgZW52LCAKLQkJSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCXRyeSB7Ci0JCQl3cml0ZVdTRExGaWxlKHdvcmtzcGFjZSwgd3NkbERlZiwgd3NkbFBhdGgsIGVudiwgbW9uaXRvcik7Ci0JCQlNYXAgaW1wb3J0RGVmcyA9IHdzZGxEZWYuZ2V0SW1wb3J0cygpOwotCQkJU2V0IGtleXNTZXQgPSBpbXBvcnREZWZzLmtleVNldCgpOwotCQkJZm9yIChJdGVyYXRvciBlID0ga2V5c1NldC5pdGVyYXRvcigpOyBlLmhhc05leHQoKTspIHsKLQkJCQlPYmplY3Qga2V5TmFtZSA9IGUubmV4dCgpOwotCQkJCVZlY3RvciB2ZWN0b3IgPSAoVmVjdG9yKSBpbXBvcnREZWZzLmdldChrZXlOYW1lKTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7IGkrKykgewotCQkJCQlJbXBvcnQgaW1wb3J0RGVmID0gKEltcG9ydCkgdmVjdG9yLmdldChpKTsKLQkJCQkJRGVmaW5pdGlvbiBkZWYgPSBpbXBvcnREZWYuZ2V0RGVmaW5pdGlvbigpOwotCQkJCQlTdHJpbmcgbmV3UGF0aFN0cmluZyA9Ci0JCQkJCQl3c2RsUGF0aC50b1N0cmluZygpLnN1YnN0cmluZygKLQkJCQkJCQkwLAotCQkJCQkJCXdzZGxQYXRoLnRvU3RyaW5nKCkubGFzdEluZGV4T2YoIi8iKSArIDEpOwkgLy8kTk9OLU5MUy0xJAotCQkJCQlpZiAoaXNJbnZhbGlkSW1wb3J0V1NETChpbXBvcnREZWYuZ2V0TG9jYXRpb25VUkkoKSkpIHsKLQkJCQkJICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSU1QT1JUX1dTREwsbmV3IFN0cmluZ1tde2ltcG9ydERlZi5nZXRMb2NhdGlvblVSSSgpfSkpOwotCQkJCQl9Ci0JCQkJCUlQYXRoIG5ld1BhdGggPQotCQkJCQkJbmV3IFBhdGgobmV3UGF0aFN0cmluZyArIGltcG9ydERlZi5nZXRMb2NhdGlvblVSSSgpKTsKLQkJCQkJSVN0YXR1cyBzdGF0dXMgPSByZXNvbHZlV1NETCh3b3Jrc3BhY2UsIGRlZiwgbmV3UGF0aCwgZW52LCBtb25pdG9yKTsKLQkJCQkJaWYgKHN0YXR1cyAhPSBudWxsCi0JCQkJCQkmJiBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJCXJldHVybiBzdGF0dXM7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCSAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX1dTREwsbmV3IFN0cmluZ1tdIHsgd3NkbFBhdGgudG9TdHJpbmcoKSB9KSwgZSk7Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzSW52YWxpZEltcG9ydFdTREwoU3RyaW5nIHdzZGxQYXRoKSB7Ci0KLQkJLy8gcmVsYXRpdmUgdXJsCi0JCWlmICghd3NkbFBhdGgudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJodHRwOi8vIikpIHsgLy8kTk9OLU5MUy0xJAotCi0JCQlpZiAod3NkbFBhdGguaW5kZXhPZigiLyIpICE9IC0xKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQlpZiAoIXdzZGxQYXRoLnN0YXJ0c1dpdGgoIi4vIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHdyaXRlV1NETEZpbGUoCi0JCUlXb3Jrc3BhY2VSb290IHdvcmtzcGFjZSwKLQkJRGVmaW5pdGlvbiB3c2RsRGVmLAotCQlJUGF0aCB3c2RsUGF0aCwKLQkJSUVudmlyb25tZW50IGVudiwgCi0JCUlQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQkJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCS8vV1NETEZhY3Rvcnkgd3NkbEZhY3RvcnkgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQkvL1dTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLQkJV1NETFdyaXRlciB3c2RsV3JpdGVyID0gKG5ldyBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGwoKSkubmV3V1NETFdyaXRlcigpOwotCQl3c2RsV3JpdGVyLndyaXRlV1NETCh3c2RsRGVmLCBiYW9zKTsKLQkJYnl0ZVtdIGIgPSBiYW9zLnRvQnl0ZUFycmF5KCk7Ci0JCUJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYik7Ci0KLSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9ICgoQmFzZUVjbGlwc2VFbnZpcm9ubWVudCllbnYpLmdldFJlc291cmNlQ29udGV4dCgpOyAgICAKLSAgICAKLQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZSgKLQkJCWNvbnRleHQsCi0JCQl3c2RsUGF0aC5tYWtlQWJzb2x1dGUoKSwKLQkJCWJhaXMsCi0JCQltb25pdG9yLAotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKSk7Ci0KLQkJYmFvcy5jbG9zZSgpOwotCQliYWlzLmNsb3NlKCk7Ci0KLQl9ICAKLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gY2xpZW50V1NETFBhdGhOYW1lXyBUaGUgY2xpZW50V1NETFBhdGhOYW1lXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRXU0RMUGF0aE5hbWUoU3RyaW5nIGNsaWVudFdTRExQYXRoTmFtZSkKLSAgewotICAgIHRoaXMuY2xpZW50V1NETFBhdGhOYW1lXyA9IGNsaWVudFdTRExQYXRoTmFtZTsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHdzZGxVUkxfIFRoZSB3c2RsVVJMXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJMKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgdGhpcy53c2RsVVJMXyA9IHdzZGxVUkw7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c1BhcnNlcl8gVGhlIHdzUGFyc2VyXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3c1BhcnNlcikKLSAgewotICAgIHRoaXMud3NQYXJzZXJfID0gd3NQYXJzZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjNWVjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0RlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTE1MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNTAzICAgMTI2ODE5IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwODAxMjIgICAyMTU4NjYgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5QbGF0Zm9ybVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLk1vZHVsZUNvcmVOYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyCWphdmFXU0RMUGFyYW1fOwotCXByaXZhdGUgSVByb2plY3QJCQkJCXByb3h5UHJvamVjdF87Ci0JcHJpdmF0ZSBTdHJpbmcJCQkJCQlXU0RMU2VydmljZVVSTF87Ci0JcHJpdmF0ZSBTdHJpbmcJCQkJCQlXU0RMU2VydmljZVBhdGhuYW1lXzsKLQlwcml2YXRlIFN0cmluZwkJCQkJCW91dHB1dEZvbGRlcl87Ci0KLQlwdWJsaWMgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQoKQotCXsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlJU3RhdHVzIHN0YXR1czsKLQkJCi0JCWlmKCBvdXRwdXRGb2xkZXJfID09IG51bGwgKQotCQl7Ci0JCQlJUGF0aFtdIHBhdGhzID0gUmVzb3VyY2VVdGlscy5nZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKHByb3h5UHJvamVjdF8pOwotCQkJb3V0cHV0Rm9sZGVyXyA9IHBhdGhzWzBdLnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCWlmIChqYXZhV1NETFBhcmFtXyA9PSBudWxsKQotCQl7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscwotCQkJCQkuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJamF2YVdTRExQYXJhbV8uc2V0TWV0YUluZk9ubHkoZmFsc2UpOwotCQlqYXZhV1NETFBhcmFtXy5zZXRTZXJ2ZXJTaWRlKEphdmFXU0RMUGFyYW1ldGVyLlNFUlZFUl9TSURFX05PTkUpOwotCQlNb2R1bGVDb3JlTmF0dXJlIG1uID0gTW9kdWxlQ29yZU5hdHVyZS5nZXRNb2R1bGVDb3JlTmF0dXJlKHByb3h5UHJvamVjdF8pOwotCQlpZiAobW4gIT0gbnVsbCkKLQkJewotCQkJSVBhdGggd2ViTW9kdWxlU2VydmVyUm9vdCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHByb3h5UHJvamVjdF8pOwotCQkJLy8gU3RyaW5nIG91dHB1dCA9IFBsYXRmb3JtVXRpbHMuZ2V0UGxhdGZvcm1VUkwod2ViTW9kdWxlU2VydmVyUm9vdCk7Ci0JCQlTdHJpbmcgb3V0cHV0ID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2Uod2ViTW9kdWxlU2VydmVyUm9vdCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJLy8gU3RyaW5nIG91dHB1dCA9Ci0JCQkvLyBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGb2xkZXIod2ViTW9kdWxlU2VydmVyUm9vdCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJSVBhdGggamF2YU91dHB1dCA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKCBuZXcgUGF0aCggb3V0cHV0Rm9sZGVyXyApKS5nZXRMb2NhdGlvbigpOwotCQkJamF2YVdTRExQYXJhbV8uc2V0SmF2YU91dHB1dChqYXZhT3V0cHV0LnRvU3RyaW5nKCkpOwotCQkJCi0KLQkJCUlQYXRoIHdlYk1vZHVsZVBhdGggPSBSZXNvdXJjZVV0aWxzLmdldFdlYkNvbXBvbmVudFNlcnZlclJvb3RQYXRoKHByb3h5UHJvamVjdF8pOwotCQkJLy8gb3V0cHV0ID0gUGxhdGZvcm1VdGlscy5nZXRQbGF0Zm9ybVVSTCh3ZWJNb2R1bGVQYXRoKTsKLQkJCUlSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3ZWJNb2R1bGVQYXRoKTsKLQkJCWlmIChyZXMgIT0gbnVsbCkgewotCQkJCW91dHB1dCA9IHJlcy5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCQlqYXZhV1NETFBhcmFtXy5zZXRPdXRwdXQob3V0cHV0KTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8vIENoZWNrIGlmIGl0J3MgYSBwbGFpbiBvbGQgSmF2YSBwcm9qZWN0Ci0JCQlpZiAoUmVzb3VyY2VVdGlscy5pc0phdmFQcm9qZWN0KHByb3h5UHJvamVjdF8pKQotCQkJewotCQkJCUlQYXRoIG91dHB1dCA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKCBuZXcgUGF0aCggb3V0cHV0Rm9sZGVyXyApKS5nZXRMb2NhdGlvbigpOwotCQkJCWphdmFXU0RMUGFyYW1fLnNldEphdmFPdXRwdXQob3V0cHV0LnRvU3RyaW5nKCkpOwotCQkJCWphdmFXU0RMUGFyYW1fLnNldE91dHB1dChvdXRwdXQudG9TdHJpbmcoKSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLy8gTm90IGZhbWlsaWFyIHdpdGggdGhpcyBraW5kIG9mIHByb2plY3QKLQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOX05PX0pBVkFfTkFUVVJFKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCQl9Ci0JCWlmIChXU0RMU2VydmljZVBhdGhuYW1lXyA9PSBudWxsKQotCQl7Ci0JCQlpZiAoV1NETFNlcnZpY2VVUkxfID09IG51bGwpCi0JCQl7Ci0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NETF9MT0NBVElPTl9OT1RfU0VUKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJV1NETFNlcnZpY2VVUkxfID0gUGxhdGZvcm1VdGlscy5nZXRGaWxlRnJvbVBsYXRmb3JtKFdTRExTZXJ2aWNlUGF0aG5hbWVfKTsKLQkJfQotCQlqYXZhV1NETFBhcmFtXy5zZXRJbnB1dFdzZGxMb2NhdGlvbihXU0RMU2VydmljZVVSTF8pOwotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIAotCSAqIEByZXR1cm4gSmF2YVdTRExQYXJhbWV0ZXIKLQkgKi8KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpCi0JewotCQlyZXR1cm4gamF2YVdTRExQYXJhbV87Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiAKLQkgKiBAcGFyYW0gamF2YVdTRExQYXJhbQotCSAqICAgICAgICAgIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLQl7Ci0JCXRoaXMuamF2YVdTRExQYXJhbV8gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwcm94eVByb2plY3RfCi0JICogICAgICAgICAgVGhlIHByb3h5UHJvamVjdF8gdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFByb3h5UHJvamVjdChJUHJvamVjdCBwcm94eVByb2plY3QpCi0JewotCQl0aGlzLnByb3h5UHJvamVjdF8gPSBwcm94eVByb2plY3Q7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHNlcnZpY2VVUkxfCi0JICogICAgICAgICAgVGhlIHdTRExTZXJ2aWNlVVJMXyB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0V1NETFNlcnZpY2VVUkwoU3RyaW5nIHNlcnZpY2VVUkwpCi0JewotCQlXU0RMU2VydmljZVVSTF8gPSBzZXJ2aWNlVVJMOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2aWNlUGF0aG5hbWVfCi0JICogICAgICAgICAgVGhlIHdTRExTZXJ2aWNlUGF0aG5hbWVfIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRXU0RMU2VydmljZVBhdGhuYW1lKFN0cmluZyBzZXJ2aWNlUGF0aG5hbWUpCi0JewotCQlXU0RMU2VydmljZVBhdGhuYW1lXyA9IHNlcnZpY2VQYXRobmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE91dHB1dEZvbGRlcigpCi0JewotCSAgcmV0dXJuIG91dHB1dEZvbGRlcl87CQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRPdXRwdXRGb2xkZXIoU3RyaW5nIG91dHB1dEZvbGRlcikKLQl7Ci0JCW91dHB1dEZvbGRlcl8gPSBvdXRwdXRGb2xkZXI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzMwYmRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbiBleHRlbmRzIFBsdWdpbgotewotCi0JLyoqCi0JKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotCSovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPQotCQkib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiOwotCi0JLyoqCi0JKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0JKi8KLQlwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4gaW5zdGFuY2VfOwotCXByaXZhdGUgSUxvZyBsb2dfOwotCi0JLyoqCi0JKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLQkqIFRoZSAicGx1Z2luIiBlbGVtZW50IGluIHBsdWdpbi54bWwgc2hvdWxkIGluY2x1ZGUgdGhlIGF0dHJpYnV0ZQotCSogY2xhc3MgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luIi4KLQkqIEBwYXJhbSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luLgotCSovCi0JcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0JCQlpbnN0YW5jZV8gPSB0aGlzOwotCQl9Ci0JCWxvZ18gPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCi0JfQotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBrZWVwIHRoZSBsb2dnaW5nIGZyb20gYmxvd2luZyB1cC4KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gSUQ7ICAKLSAgfQotICAKLQkvKioKLQkqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0JKiAoV2ViU2VydmljZVdhc0NvbnN1bXB0aW9uUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2UuanN0LndzLndhcy52NS50cCIpOwotCSogQHJldHVybiBUaGUgV2ViU2VydmljZVdhc0NvbnN1bXB0aW9uUGx1Z2luIHNpbmdsZXRvbi4KLQkqLwotCXN0YXRpYyBwdWJsaWMgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luIGdldEluc3RhbmNlKCkgewotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQotCS8qKgotCSogQ2FsbGVkIG9uY2UgYnkgdGhlIHBsYXRmb3JtIHdoZW4gdGhpcyBwbHVnaW4gaXMgZmlyc3QgbG9hZGVkLgotCSogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoaXMgcGx1Z2luIGZhaWxzIHRvIHN0YXJ0LgotCSovCi0JcHVibGljIHZvaWQgc3RhcnQoIEJ1bmRsZUNvbnRleHQgYnVuZGxlICkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlsb2dfLmxvZyhJTG9nLklORk8sIDUwNjYsIHRoaXMsICJzdGFydCIsICJTdGFydGluZyBwbHVnaW4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0JCSAgc3VwZXIuc3RhcnQoIGJ1bmRsZSApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjYsIHRoaXMsICJzdGFydCIsIGV4YyApOwotICAgIH0KLQl9Ci0KLQkvKioKLQkqIENhbGxlZCBvbmNlIGJ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoaXMgcGx1Z2luIGlzIHVubG9hZGVkLgotCSogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoaXMgcGx1Z2luIGZhaWxzIHRvIHNodXRkb3duLgotCSovCi0JcHVibGljIHZvaWQgc3RvcCggQnVuZGxlQ29udGV4dCBjb250ZXh0ICkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlsb2dfLmxvZyhJTG9nLklORk8sIDUwNjcsIHRoaXMsICJzaHV0ZG93biIsICJTaHV0dGluZyBwbHVnaW4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0JCSAgc3VwZXIuc3RvcCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjYsIHRoaXMsICJzdG9wIiwgZXhjICk7ICAgICAgCi0gICAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL0F4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL0F4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI4YjIyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9BeGlzRW1pdHRlclByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI5ICAgMTI3MDE2IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklNZXNzYWdlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckRlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0YWNrTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci0KLQotCi1wdWJsaWMgY2xhc3MgQXhpc0VtaXR0ZXJQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi17Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwMSBmb3IgdGhlIEF4aXMgRW1pdHRlciBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQUVfUEFHRSA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuUFBBRTAwMDEiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiBhbGxXYW50ZWQ7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwMiBmb3IgdGhlIGFsbCB3YW50ZWQgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX0FMTF9XQU5URUQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDAyIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gaGVscGVyV2FudGVkOwotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDMgZm9yIGhlbHBlciB3YW50ZWQgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX0hFTFBFUl9XQU5URUQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDAzIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gd3JhcEFycmF5czsKLSAgLypDT05URVhUX0lEIFBQQUUwMDA0IGZvciB0aGUgd3JhcCBhcnJheXMgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1dSQVBfQVJSQVlTID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwNCI7Ci0KLSAgcHJpdmF0ZSBDb21ibyBkZXBsb3lTY29wZVR5cGVzOwotICAvLypDT05URVhUX0lEIFBQQUUwMDA1IGZvciB0aGUgZGVwbG95IHNjb3BlIHR5cGUgY29tYm8gYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgcGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9DT01CT19ERVBMT1lfU0NPUEUgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDA1IjsKLSAgCi0gIHByaXZhdGUgU3RhY2tMYXlvdXQgdGltZU91dFN1YkNvbXBvc2l0ZVN0YWNrTGF5b3V0OwotICAKLSAgcHJpdmF0ZSBUZXh0IHRpbWVPdXRGaWVsZDsKLSAgaW50IHRpbWVPdXQ7Ci0gIFN0cmluZyB3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIkF4aXNXc2RsMkphdmFUaW1lb3V0Iik7Ci0gIAotICBwcml2YXRlIFRleHQgdGltZU91dE1zZ1RleHQ7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwNiBmb3IgdGhlIHRpbWUgb3V0IGZpZWxkIG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBwYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0ZJRUxEX1RJTUVfT1VUID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwNiI7Ci0KLSAgcHJpdmF0ZSBCdXR0b24gdXNlSW5oZXJpdGVkTWV0aG9kczsKLSAgLypDT05URVhUX0lEIFBQQUUwMDA3IGZvciB0aGUgdXNlIGluaGVyaXRlZCBtZXRob2RzIGNoZWNrIGJveCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgcGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFMgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDA3IjsKLQotICBwcml2YXRlIEJ1dHRvbiB2YWxpZGF0ZUFnYWluc3RKQVhSUEM7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAxMCBmb3IgdGhlICJ2YWxpZGF0ZSBhZ2FpbnN0IEpBWFJQQy4uLiIgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBwYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAxMCI7Ci0gIAotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDggZm9yIHRoZSB3c2RsMmphdmEgZ3JvdXAgb24gdGhlIEF4aXMgRW1pdHRlciBQcmVmZXJlbmNlIHBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQUVfR1JPVVBfV1NETDJKQVZBID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwOCI7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwOSBmb3IgdGhlIGphdmEyd3NkbCBncm91cCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgcGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9HUk9VUF9KQVZBMldTREwgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDA5IjsKLS8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0JVUlVdGlscyB1dGlscyA9IG5ldyBVSVV0aWxzKCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKTsKLSAgCUlXb3JrYmVuY2hIZWxwU3lzdGVtIGhlbHBTeXN0ZW0gPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKTsKLSAgCQotICAgIENvbXBvc2l0ZSAgIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoIHN1cGVycGFyZW50LCBTV1QuTk9ORSApOwkKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHBhcmVudC5zZXRMYXlvdXQoIGxheW91dCApOwotICAgIHBhcmVudC5zZXRUb29sVGlwVGV4dChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9QQUdFKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAocGFyZW50LCBJTkZPUE9QX1BQQUVfUEFHRSk7Ci0gICAgR3JvdXAgd3NkbDJKYXZhR3JvdXAgPSB1dGlscy5jcmVhdGVHcm91cChwYXJlbnQsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuR1JPVVBfV1NETDJKQVZBX05BTUUsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0dST1VQX1dTREwySkFWQSwgSU5GT1BPUF9QUEFFX0dST1VQX1dTREwySkFWQSwgMiwgMTAsMTApOwotICAgIGFsbFdhbnRlZCA9IGNyZWF0ZUNoZWNrQm94KHdzZGwySmF2YUdyb3VwLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9BTExfV0FOVEVELEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0FMTF9XQU5URUQsSU5GT1BPUF9QUEFFX0NIRUNLQk9YX0FMTF9XQU5URUQpOwotCi0gICAgaGVscGVyV2FudGVkICA9IGNyZWF0ZUNoZWNrQm94KHdzZGwySmF2YUdyb3VwLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9IRUxQRVJfV0FOVEVELEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0hFTFBFUl9XQU5URUQsSU5GT1BPUF9QUEFFX0NIRUNLQk9YX0hFTFBFUl9XQU5URUQpOwotCi0gICAgd3JhcEFycmF5cyA9IGNyZWF0ZUNoZWNrQm94KHdzZGwySmF2YUdyb3VwLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9XUkFQX0FSUkFZUyxBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9DSEVDS0JPWF9XUkFQX0FSUkFZUyxJTkZPUE9QX1BQQUVfQ0hFQ0tCT1hfV1JBUF9BUlJBWVMpOyAgICAKLSAgICAKLSAgICBkZXBsb3lTY29wZVR5cGVzID0gdXRpbHMuY3JlYXRlQ29tYm8od3NkbDJKYXZhR3JvdXAsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfREVQTE9ZX1NDT1BFLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9DT01CT19ERVBMT1lfU0NPUEUsIElORk9QT1BfUFBBRV9DT01CT19ERVBMT1lfU0NPUEUsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSk7Ci0gICAgLyogCi0gICAgICogRW5zdXJlIHRoZSBvcmRlciBpcyB0aGUgc2FtZSBhcyBpdCBpbiB0aGUgZmllbGRzIGZvciBjbGFzcwotICAgICAqIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckNvbnRleHQKLSAgICAgKi8KLSAgICBkZXBsb3lTY29wZVR5cGVzLnNldEl0ZW1zKG5ldyBTdHJpbmcgW117QXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5ERVBMT1lfU0NPUEVfQVBQTElDQVRJT04sIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuREVQTE9ZX1NDT1BFX1JFUVVFU1QsQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5ERVBMT1lfU0NPUEVfU0VTU0lPTn0pOwotICAgIAotICAgIExhYmVsIHRpbWVvdXRMYWJlbCA9IG5ldyBMYWJlbCh3c2RsMkphdmFHcm91cCwgU1dULldSQVApOwotICAgIHRpbWVvdXRMYWJlbC5zZXRUZXh0KEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVElNRV9PVVQpOwotICAgIHRpbWVvdXRMYWJlbC5zZXRUb29sVGlwVGV4dChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9GSUVMRF9USU1FX09VVCk7Ci0gICAgCi0gICAgQ29tcG9zaXRlIHRpbWVPdXRTdWJDb21wb3NpdGUgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUod3NkbDJKYXZhR3JvdXAsIDEpOwotICAgIHRpbWVPdXRTdWJDb21wb3NpdGVTdGFja0xheW91dCA9IG5ldyBTdGFja0xheW91dCgpOwotICAgIHRpbWVPdXRTdWJDb21wb3NpdGUuc2V0TGF5b3V0KHRpbWVPdXRTdWJDb21wb3NpdGVTdGFja0xheW91dCk7Ci0gICAgCi0gICAgLy8gb25seSBvbmUgb2YgdGhpcyBpcyBkaXNwbGF5ZWQgYXQgb25lIHRpbWUsIHRoZXkgc2hhcmUgaW5mb3BvcCBhbmQgdG9vbHRpcCB0ZXh0Ci0gICAgdGltZU91dEZpZWxkID0gY3JlYXRlVGV4dEZpZWxkKHRpbWVPdXRTdWJDb21wb3NpdGUsIG51bGwgLEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0ZJRUxEX1RJTUVfT1VULElORk9QT1BfUFBBRV9GSUVMRF9USU1FX09VVCk7Ci0gICAgdGltZU91dE1zZ1RleHQgPSBjcmVhdGVUZXh0RmllbGQodGltZU91dFN1YkNvbXBvc2l0ZSwgbnVsbCAsQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfRklFTERfVElNRV9PVVQsSU5GT1BPUF9QUEFFX0ZJRUxEX1RJTUVfT1VUKTsKLSAgICAKLSAgICB0aW1lT3V0TXNnVGV4dC5zZXRFZGl0YWJsZShmYWxzZSk7Ci0gICAgCi0gICAgR3JvdXAgamF2YTJXc2RsR3JvdXAgPSB1dGlscy5jcmVhdGVHcm91cChwYXJlbnQsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuR1JPVVBfSkFWQTJXU0RMX05BTUUsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0dST1VQX0pBVkEyV1NETCwgSU5GT1BPUF9QUEFFX0dST1VQX0pBVkEyV1NETCwgMiwgMTAsMTApOwotICAgIHVzZUluaGVyaXRlZE1ldGhvZHMgPSBjcmVhdGVDaGVja0JveChqYXZhMldzZGxHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fVVNFX0lOSEVSSVRFRF9NRVRIT0RTLEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1VTRV9JTkhFUklURURfTUVUSE9EUyxJTkZPUE9QX1BQQUVfQ0hFQ0tCT1hfVVNFX0lOSEVSSVRFRF9NRVRIT0RTKTsKLSAgICB2YWxpZGF0ZUFnYWluc3RKQVhSUEMgPSBjcmVhdGVDaGVja0JveChqYXZhMldzZGxHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMsQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfQ0hFQ0tCT1hfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMsSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDKTsKLQotICAgIGluaXRpYWxpemVWYWx1ZXMoKTsKLSAgICBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOyAgICAKLQotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGNoZWNrYm94IHdpdGggaG9yaXpvbnRhbFNwYW4gPSAyIGluIGl0cyBncmlkIGRhdGEgaW4gb3JkZXIgdG8KLSAgICogbWF0Y2ggdGhlIGdyaWQgbGF5b3V0IGZvciBjb21ibyAKLSAgICovCi0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUNoZWNrQm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIHBhcmVudCwgU1dULkNIRUNLICk7Ci0gICAgYnV0dG9uLnNldFRleHQobGFiZWxOYW1lKTsKLSAgICBidXR0b24uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggYnV0dG9uLCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLiIgKyBpbmZvcG9wICk7Ci0JR3JpZERhdGEgZ2Q9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORyk7Ci0JZ2QuaG9yaXpvbnRhbFNwYW49IDI7Ci0JYnV0dG9uLnNldExheW91dERhdGEoZ2QpOwkKLSAgICByZXR1cm4gYnV0dG9uOwotICB9Ci0gICAgIAotICBwcml2YXRlIFRleHQgY3JlYXRlVGV4dEZpZWxkKENvbXBvc2l0ZSBwYXJlbnQsU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wKSAKLSAgeyB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gbGFiZWxOYW1lIDogdG9vbHRpcDsKLQlpZiggbGFiZWxOYW1lICE9IG51bGwgKQotICAgIHsKLSAgICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKCBwYXJlbnQsIFNXVC5XUkFQKTsKLSAgICAgIGxhYmVsLnNldFRleHQoIGxhYmVsTmFtZSApOwotICAgICAgbGFiZWwuc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICB9Ci0gICAgIFRleHQgdGV4dCA9IG5ldyBUZXh0KHBhcmVudCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgICB0ZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgIHRleHQuc2V0VG9vbFRpcFRleHQodG9vbHRpcCk7Ci0gICAgIGlmKCBpbmZvcG9wICE9IG51bGwgKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCB0ZXh0LCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLiIgKyBpbmZvcG9wICk7Ci0gICAgIAotICAgICB0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKCBuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJbnVtYmVyRmllbGRDaGFuZ2VkKChUZXh0KSBlLndpZGdldCk7Ci0JCX0KLQkgfQotICAgICApOwotICAgICByZXR1cm4gdGV4dDsKLSAgfQotCi0gIC8qKgotICAgKiBEb2VzIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkZWZhdWx0IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkKLSAgewotICAgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotICAgIGluaXRpYWxpemVEZWZhdWx0cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICogIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpCi0gIHsKLSAgICBpZih2YWxpZGF0ZU51bWJlcih0aW1lT3V0RmllbGQuZ2V0VGV4dCgpKS5pc09LKCkpCi0gICAgCXN0b3JlVmFsdWVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotICB7Ci0gICAgcGVyZm9ybU9rKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICB7IH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB1c2luZyBkZWZhdWx0IHZhbHVlcwotICAgKiBpbiB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVmYXVsdHMoKQotICB7Ci0gICAgYWxsV2FudGVkLnNldFNlbGVjdGlvbiggQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRBbGxXYW50ZWREZWZhdWx0KCkpOwotICAgIGhlbHBlcldhbnRlZC5zZXRTZWxlY3Rpb24oIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0SGVscGVyV2FudGVkRGVmYXVsdCgpKTsKLSAgICB3cmFwQXJyYXlzLnNldFNlbGVjdGlvbiggQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRXcmFwQXJyYXlzRGVmYXVsdCgpKTsKLSAgICBkZXBsb3lTY29wZVR5cGVzLnNlbGVjdChBeGlzRW1pdHRlckRlZmF1bHRzLmdldERlcGxveVNjb3BlRGVmYXVsdCgpKTsKLSAgICBpZiAod3NkbDJKYXZhVGltZW91dFByb3BlcnR5ICE9IG51bGwpIHRpbWVPdXRGaWVsZC5zZXRUZXh0KCIiKyBnZXRUaW1lT3V0VmFsdWVXaXRoUHJvcGVydHkoKSk7Ci0gICAgZWxzZSB0aW1lT3V0RmllbGQuc2V0VGV4dCgiIiArIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VGltZU91dERlZmF1bHQoKSk7CQotICAgIHVzZUluaGVyaXRlZE1ldGhvZHMuc2V0U2VsZWN0aW9uKEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VXNlSW5oZXJpdGVkTWV0aG9kc0RlZmF1bHQoKSk7Ci0gICAgdmFsaWRhdGVBZ2FpbnN0SkFYUlBDLnNldFNlbGVjdGlvbihBeGlzRW1pdHRlckRlZmF1bHRzLmdldFZhbGlkYXRlQWdhaW5zdEpBWFJQQygpKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIGZyb20gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVZhbHVlcygpCi0gIHsKLSAgICAvLyBnZXQgdGhlIHBlcnNpc3RlbnQgY29udGV4dCBmcm9tIHRoZSBwbHVnaW4KLSAgICBBeGlzRW1pdHRlckNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0QXhpc0VtaXR0ZXJDb250ZXh0KCk7Ci0gICAgYWxsV2FudGVkLnNldFNlbGVjdGlvbiggY29udGV4dC5pc0FsbFdhbnRlZEVuYWJsZWQoKSk7Ci0gICAgaGVscGVyV2FudGVkLnNldFNlbGVjdGlvbiggY29udGV4dC5pc0hlbHBlcldhbnRlZEVuYWJsZWQoKSk7Ci0gICAgd3JhcEFycmF5cy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNXcmFwQXJyYXlzRW5hYmxlZCgpKTsKLSAgICBkZXBsb3lTY29wZVR5cGVzLnNlbGVjdChjb250ZXh0LmdldERlcGxveVNjb3BlVHlwZSgpKTsKLSAgICB1c2VJbmhlcml0ZWRNZXRob2RzLnNldFNlbGVjdGlvbiggY29udGV4dC5pc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkpOwotICAgIHZhbGlkYXRlQWdhaW5zdEpBWFJQQy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNWYWxpZGF0ZUFnYWluc3RKQVhSUENFbmFibGVkKCkgKTsKLSAgICBpZiAod3NkbDJKYXZhVGltZW91dFByb3BlcnR5ICE9IG51bGwpIAotICAgIHsJdGltZU91dD1nZXRUaW1lT3V0VmFsdWVXaXRoUHJvcGVydHkoKTsKLSAgICAJLy90aW1lT3V0RmllbGQuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgCXRpbWVPdXRTdWJDb21wb3NpdGVTdGFja0xheW91dC50b3BDb250cm9sID0gdGltZU91dE1zZ1RleHQ7Ci0gICAgICAgIHRpbWVPdXRNc2dUZXh0LnNldFRleHQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfVVNFX0pWTV9BUkdVTUVOVF9GT1JfVElNRV9PVVQpOwkJCi0gICAgfQotCWVsc2UKLQl7Ci0JICAgIHRpbWVPdXQgPSBjb250ZXh0LmdldFRpbWVPdXQoKTsKLQkgICAgdGltZU91dFN1YkNvbXBvc2l0ZVN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSB0aW1lT3V0RmllbGQ7Ci0JfQotICAgIHRpbWVPdXRGaWVsZC5zZXRUZXh0KCIiKyB0aW1lT3V0KTsKLSAgIH0KLQotICAvKioKLSAgICogU3RvcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnRyb2xzIGJhY2sgdG8gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgc3RvcmVWYWx1ZXMoKQotICB7Ci0gICAgLy8gZ2V0IHRoZSBwZXJzaXN0ZW50IGNvbnRleHQgZnJvbSB0aGUgcGx1Z2luCi0gICAgQXhpc0VtaXR0ZXJDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotICAgIGNvbnRleHQuc2V0QWxsV2FudGVkRW5hYmxlZCggYWxsV2FudGVkLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZXRIZWxwZXJXYW50ZWRFbmFibGVkKCBoZWxwZXJXYW50ZWQuZ2V0U2VsZWN0aW9uKCkgKTsKLSAgICBjb250ZXh0LnNldFdyYXBBcnJheXNFbmFibGVkKCB3cmFwQXJyYXlzLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZWxlY3REZXBsb3lTY29wZVR5cGUoZGVwbG95U2NvcGVUeXBlcy5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLSAgICB0aW1lT3V0ID0gSW50ZWdlci5wYXJzZUludCh0aW1lT3V0RmllbGQuZ2V0VGV4dCgpLnRyaW0oKSk7Ci0gICAgY29udGV4dC5zZXRUaW1lT3V0KHRpbWVPdXQpOwotICAgIGNvbnRleHQuc2V0VXNlSW5oZXJpdGVkTWV0aG9kc0VuYWJsZWQoIHVzZUluaGVyaXRlZE1ldGhvZHMuZ2V0U2VsZWN0aW9uKCkgKTsKLSAgICBjb250ZXh0LnNldFZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoIHZhbGlkYXRlQWdhaW5zdEpBWFJQQy5nZXRTZWxlY3Rpb24oKSApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbnVtYmVyRmllbGRDaGFuZ2VkKFRleHQgdGV4dENvbnRyb2wpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSB2YWxpZGF0ZU51bWJlcih0ZXh0Q29udHJvbC5nZXRUZXh0KCkpOwotCQlzZXRWYWxpZCghc3RhdHVzLm1hdGNoZXMoSVN0YXR1cy5FUlJPUikpOwotCQlhcHBseVRvU3RhdHVzTGluZSh0aGlzLHN0YXR1cyk7CQotIH0KLSAgCi0gIHByaXZhdGUgaW50IGdldFRpbWVPdXRWYWx1ZVdpdGhQcm9wZXJ0eSgpIAotICB7Ci0JICBpZiAod3NkbDJKYXZhVGltZW91dFByb3BlcnR5ICE9IG51bGwpCi0JICB7CXRyeSB7Ci0JCSAgbG9uZyB0aW1lT3V0UHJvcGVydHkgPSBMb25nLnBhcnNlTG9uZyh3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkpOwotCQkgIGlmICh0aW1lT3V0UHJvcGVydHkgPCAwKSByZXR1cm4gLTE7IC8vIHRpbWVvdXQgPSAtMSBlcXVhbHMgbmV2ZXIgdGltZSBvdXQ7IHRyZWF0aW5nIGFsbCBuZWdhdGl2ZSBudW1iZXIgYXMgLTEKLQkJICBlbHNlIHJldHVybiAoaW50KU1hdGguY2VpbCh0aW1lT3V0UHJvcGVydHkvMTAwMC4wKTsKLQkgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpewotCSAgICAgIFN5c3RlbS5lcnIucHJpbnQoIkF4aXNXU0RMMkphdmFUaW1lb3V0IGlzIG5vdCBhIHZhbGlkIG51bWJlciIpOwotCSAgICAgIHJldHVybiBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCk7Ci0JICAgIH0KLQkgIH0KLQkgIGVsc2UgcmV0dXJuIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VGltZU91dERlZmF1bHQoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIHZhbGlkYXRlTnVtYmVyKFN0cmluZyBudW1iZXJTdHJpbmcpCi0gIHsKLQkgICAgSVN0YXR1cyBzdGF0dXM7Ci0JCXRyeSAKLQkJewotCQkJaW50IG51bWJlciA9IEludGVnZXIucGFyc2VJbnQobnVtYmVyU3RyaW5nKTsKLQkJCWlmIChudW1iZXIgPD0gMCAmJiBudW1iZXIgIT0gLTEpCi0JCQl7Ci0JCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIElTdGF0dXMuRVJST1IsCi0JCQkJCQlBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9JTlZBTElEX1RJTUVfT1VULCBudWxsKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsJdGltZU91dCA9IG51bWJlcjsKLQkJCQlzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQkJCS8vd2Ugc2V0IHBhcmFtOm1lc3NhZ2U9IiIgaGVyZSwgTGF0ZXIgaW4gCi0JCQkJLy9hcHBseVRvU3RhdHVzTGluZSgpLCB3ZSBkbyBwYWdlLnNldE1lc3NhZ2UobnVsbCx0eXBlKSAKLQkJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwgSVN0YXR1cy5PSywgIiIsbnVsbCk7Ci0JCQl9Ci0JCX0gCi0JCWNhdGNoIAotCQkoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIAotCQl7Ci0JCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwgSVN0YXR1cy5FUlJPUiwKLQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSU5WQUxJRF9USU1FX09VVCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsgCi0gIAl9Ci0gIAotCXByaXZhdGUgdm9pZCBhcHBseVRvU3RhdHVzTGluZShEaWFsb2dQYWdlIHBhZ2UsIElTdGF0dXMgc3RhdHVzKSB7Ci0JCVN0cmluZyBtZXNzYWdlPSBzdGF0dXMuZ2V0TWVzc2FnZSgpOwotCQlzd2l0Y2ggKHN0YXR1cy5nZXRTZXZlcml0eSgpKSB7Ci0JCQljYXNlIElTdGF0dXMuT0s6Ci0JCQkJcGFnZS5zZXRNZXNzYWdlKG51bGwsIElNZXNzYWdlUHJvdmlkZXIuTk9ORSk7Ci0JCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElTdGF0dXMuV0FSTklORzoKLQkJCQlwYWdlLnNldE1lc3NhZ2UobWVzc2FnZSwgSU1lc3NhZ2VQcm92aWRlci5XQVJOSU5HKTsKLQkJCQlwYWdlLnNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJCQlicmVhazsJCQkJCi0JCQljYXNlIElTdGF0dXMuSU5GTzoKLQkJCQlwYWdlLnNldE1lc3NhZ2UobWVzc2FnZSwgSU1lc3NhZ2VQcm92aWRlci5JTkZPUk1BVElPTik7Ci0JCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQkJYnJlYWs7CQkJCi0JCQlkZWZhdWx0OgotCQkJCWlmIChtZXNzYWdlLmxlbmd0aCgpID09IDApIHsKLQkJCQkJbWVzc2FnZT0gbnVsbDsKLQkJCQl9Ci0JCQkJcGFnZS5zZXRNZXNzYWdlKG51bGwpOwotCQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwotCQkJCWJyZWFrOwkJCi0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NsaWVudENvZGVHZW5PcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2VjYmUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwOSAgIDEyNTA5NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTE1ICAgMTE1MjI1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA3MjggICAxNDU0MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1hbmQuV1NETDJKYXZhQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIENsaWVudENvZGVHZW5PcGVyYXRpb24gZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwcml2YXRlIENvcHlBeGlzSmFyQ29tbWFuZCBjb3B5QXhpc0phckNvbW1hbmQgPSBudWxsOwotCQotCXByaXZhdGUgV1NETDJKYXZhQ29tbWFuZCB3c2RsMkphdmFDb21tYW5kID0gbnVsbDsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLQkKLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0JCi0JcHJpdmF0ZSBTdHViMkJlYW5Db21tYW5kIHN0dWIyQmVhbkNvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0JcHJpdmF0ZSBTdHJpbmcgb3V0cHV0Rm9sZGVyOwotCXByaXZhdGUgU3RyaW5nIHByb3h5QmVhbjsKLQlwcml2YXRlIFN0cmluZyBwcm94eUVuZHBvaW50OwotCQotCXByaXZhdGUgUmVmcmVzaFByb2plY3RDb21tYW5kIHJlZnJlc2hQcm9qZWN0Q29tbWFuZCA9IG51bGw7Ci0KLQlwdWJsaWMgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbigpewotCQljb3B5QXhpc0phckNvbW1hbmQgPSBuZXcgQ29weUF4aXNKYXJDb21tYW5kKCk7Ci0JCXdzZGwySmF2YUNvbW1hbmQgPSBuZXcgV1NETDJKYXZhQ29tbWFuZCgpOwotCQlzdHViMkJlYW5Db21tYW5kID0gbmV3IFN0dWIyQmVhbkNvbW1hbmQoKTsKLQkJcmVmcmVzaFByb2plY3RDb21tYW5kID0gbmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB7Ci0KLQkJSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0JCUNsaWVudFdTTW9kaWZ5T3BlcmF0aW9uIGJ1T3BlcmF0aW9uID0gbmV3IENsaWVudFdTTW9kaWZ5T3BlcmF0aW9uKGluZm8sIGVudik7Ci0JCXRyeSB7Ci0JCQlidU9wZXJhdGlvbi5leGVjdXRlKG1vbml0b3IpOwotCQl9Ci0JCWNhdGNoKENvcmVFeGNlcHRpb24gY2UpewotCQkJSVN0YXR1cyBzdGF0dXMgPSBjZS5nZXRTdGF0dXMoKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0KLQl9Ci0KLQkKLQlwcml2YXRlIGNsYXNzIENsaWVudFdTTW9kaWZ5T3BlcmF0aW9uIGV4dGVuZHMgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIHsKLQkJCi0JCSAgcHJpdmF0ZSBJQWRhcHRhYmxlIGluZm8gPSBudWxsOwotCQkgIHByaXZhdGUgSUVudmlyb25tZW50IGVudiA9IG51bGw7Ci0KLQkJICAKLQkJICBwcm90ZWN0ZWQgQ2xpZW50V1NNb2RpZnlPcGVyYXRpb24oSUFkYXB0YWJsZSBhZGFwdGFibGUsIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCl7Ci0JCQkgIGluZm8gPSBhZGFwdGFibGU7Ci0JCQkgIGVudiA9IGVudmlyb25tZW50OwotCQkgIH0KLQkJICAKLQkJICBwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb257Ci0JCSAgCi0JCQkgICAgSVN0YXR1cyBzdGF0dXMgPSBudWxsOwotCi0JCQkgICAgLy8gQ29weUF4aXNKYXJDb21tYW5kCi0JCQkgICAgY29weUF4aXNKYXJDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkgICAgY29weUF4aXNKYXJDb21tYW5kLnNldFByb2plY3QocHJvamVjdCk7Ci0JCQkgICAgc3RhdHVzID0gY29weUF4aXNKYXJDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JCQkgICAgCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkgICAgfQotCQkJCQotCQkJCS8vIFdTREwySmF2YUNvbW1hbmQKLQkJCQl3c2RsMkphdmFDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRKYXZhV1NETFBhcmFtKGphdmFXU0RMUGFyYW0pOwotCQkJCXdzZGwySmF2YUNvbW1hbmQuc2V0V3NkbFVSSSh3c2RsVVJJKTsKLQkJCQlzdGF0dXMgPSB3c2RsMkphdmFDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQkKLQkJCQkvLyBTdHViMkJlYW5Db21tYW5kCi0JCQkJc3R1YjJCZWFuQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0V2ViU2VydmljZXNQYXJzZXIod2ViU2VydmljZXNQYXJzZXIpOwotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0T3V0cHV0Rm9sZGVyKG91dHB1dEZvbGRlcik7Ci0JCQkJc3R1YjJCZWFuQ29tbWFuZC5zZXRKYXZhV1NETFBhcmFtKGphdmFXU0RMUGFyYW0pOwotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0Q2xpZW50UHJvamVjdChwcm9qZWN0KTsKLQkJCQlzdGF0dXMgPSBzdHViMkJlYW5Db21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQlwcm94eUJlYW4gPSBzdHViMkJlYW5Db21tYW5kLmdldFByb3h5QmVhbigpOwotCQkJCXByb3h5RW5kcG9pbnQgPSBzdHViMkJlYW5Db21tYW5kLmdldFByb3h5RW5kcG9pbnQoKTsKLQkJCSAgCi0JCQkJLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldFByb2plY3QocHJvamVjdCk7Ci0JCQkJc3RhdHVzID0gcmVmcmVzaFByb2plY3RDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQkKLQkJICB9Ci0JCQotCX0KLQotCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0JCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0T3V0cHV0Rm9sZGVyKFN0cmluZyBvdXRwdXRGb2xkZXIpIHsKLQkJdGhpcy5vdXRwdXRGb2xkZXIgPSBvdXRwdXRGb2xkZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpIHsKLQkJdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLQl9Ci0JCQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlCZWFuKCkgewotCQlyZXR1cm4gcHJveHlCZWFuOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFByb3h5RW5kcG9pbnQoKSB7Ci0JCXJldHVybiBwcm94eUVuZHBvaW50OwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svQ29weUF4aXNKYXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NvcHlBeGlzSmFyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmQwZmMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svQ29weUF4aXNKYXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA5ICAgMTI1MDk0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSwgVXNlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNyAgIDE0MjM0MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MjgJICAxNTU0MzkgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDUwMSAgIDE4NDUwNSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDIgICAxODQ1MDUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFVwZGF0ZSBKQVIgc2l6ZXMKLSAqIDIwMDcxMTAyICAgMjA4NjIwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBVcGRhdGUgSkFSIHNpemVzCi0gKiAyMDA3MTEwMiAgIDIwMjIyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAxMjIgICAyMTYxNjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI2ICAgMjI0MTQ4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgc2VydmljZSBzY2VuYXJpb3MgYnJva2UgaW4gbGF0ZXN0IGJ1aWxkcyB3aXRoIEVxdWlub3ggcDIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uLkJ1bmRsZVV0aWxzOwotCi0KLXB1YmxpYyBjbGFzcyBDb3B5QXhpc0phckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBWElTX0pBUiA9ICJheGlzLmphciI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBWElTX1JVTlRJTUVfUExVR0lOX0lEID0gIm9yZy5hcGFjaGUuYXhpcyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01NT05fRElTQ09WRVJZX1BMVUdJTl9JRCA9ICJvcmcuYXBhY2hlLmNvbW1vbnMuZGlzY292ZXJ5IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTU1PTl9ESVNDT1ZFUllfSkFSID0gImNvbW1vbnMtZGlzY292ZXJ5LTAuMi5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQVhfWE1MX1JQQ19QTFVHSU5fSUQgPSAiamF2YXgueG1sLnJwYyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBWF9YTUxfUlBDX0pBUiA9ICJqYXhycGMuamFyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBVkFYX1hNTF9TT0FQX1BMVUdJTl9JRCA9ICJqYXZheC54bWwuc29hcCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBWF9YTUxfU09BUF9KQVIgPSAic2Fhai5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQVhfV1NETF9QTFVHSU5fSUQgPSAiamF2YXgud3NkbCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBWF9XU0RMX0pBUiA9ICJ3c2RsNGouamFyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTU1PTl9MT0dHSU5HX1BMVUdJTl9JRCA9ICJvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01NT05fTE9HR0lOR19KQVIgPSAiY29tbW9ucy1sb2dnaW5nLmphciI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBsb25nIEFYSVNfSkFSX1NJWkUgPSAxNTg4MDYzTDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIENPTU1PTl9ESVNDT1ZFUllfSkFSX1NJWkUgPSA3MTQ1MUw7Ci0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBKQVZBWF9YTUxfUlBDX0pBUl9TSVpFID0gMzIzNjFMOwotCXByaXZhdGUgc3RhdGljIGxvbmcgSkFWQVhfWE1MX1NPQVBfSkFSX1NJWkUgPSAxOTU4Mkw7Ci0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBKQVZBWF9XU0RMX0pBUl9TSVpFID0gMTM0MDg1TDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIENPTU1PTl9MT0dHSU5HX0pBUl9TSVpFID0gMzkzNTNMOwotCi0vLyBXZWIgU2VydmljZXMgSmFycyBVc2VkIGluIHByZXZpb3VzIFZlcnNpb25zIG9mIFdUUCBidXQgbm93IG9ic29sZXRlCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gT0JTT0xFVEVfSkFSUyA9IG5ldyBTdHJpbmdbXXsiY29tbW9ucy1kaXNjb3ZlcnkuamFyIiwgImNvbW1vbnMtbG9nZ2luZy0xLjAuNC5qYXIiLCAibG9nNGotMS4yLjQuamFyIiwgImxvZzRqLTEuMi44LmphciIsICJ3c2RsNGotMS41LjEuamFyIiwgImF4aXMtYW50LmphciJ9OwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFUSF9UT19KQVJTX0lOX1BMVUdJTiA9ICJsaWIvIjsKLQotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLQlwcml2YXRlIEJvb2xlYW4gcHJvamVjdFJlc3RhcnRSZXF1aXJlZF8gPSBCb29sZWFuLkZBTFNFOwotCXByaXZhdGUgSUNsYXNzcGF0aEVudHJ5W10gb2xkQ2xhc3NwYXRoOwotCXByaXZhdGUgQXJyYXlMaXN0IG5ld0phck5hbWVzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCS8qKgotCSAqIERlZmF1bHQgQ1RPUjsKLQkgKi8KLQlwdWJsaWMgQ29weUF4aXNKYXJDb21tYW5kKCkgewotCX0KLQotCS8qKgotCSAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpIHsKLQotCQlJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlQcm9ncmVzc1V0aWxzLnJlcG9ydChtb25pdG9yLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBST0dSRVNTX0lORk9fQ09QWV9BWElTX0NGRyk7Ci0KLQkJaWYgKEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChwcm9qZWN0KSkgewotCQkJY29weUF4aXNKYXJzVG9Qcm9qZWN0KHByb2plY3QsIHN0YXR1cywgZW52LCBtb25pdG9yKTsKLQkJfQotCQllbHNlIHsKLQkJCS8vIENoZWNrIGlmIGl0J3MgYSBwbGFpbiBvbGQgSmF2YSBwcm9qZWN0Ci0JCQlpZiAoSjJFRVV0aWxzLmlzSmF2YUNvbXBvbmVudChwcm9qZWN0KSkgewotCQkJCXN0YXR1cyA9IGFkZEF4aXNKYXJzVG9CdWlsZFBhdGgocHJvamVjdCwgZW52LCBtb25pdG9yKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQkJcmV0dXJuIHN0YXR1czsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOX05PX0pBVkFfTkFUVVJFKTsKLQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJcmV0dXJuIHN0YXR1czsKLQkJCX0KLQotCQl9Ci0KLQkJcmV0dXJuIHN0YXR1czsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBjb3B5QXhpc0phcnNUb1Byb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVN0YXR1cyBzdGF0dXMsIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCi0JCUlQYXRoIHdlYk1vZHVsZVBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdCk7Ci0JCWlmICh3ZWJNb2R1bGVQYXRoID09IG51bGwpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EKTsKLQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWRlbGV0ZU9ic29sZXRlSmFycyh3ZWJNb2R1bGVQYXRoKTsKLQotCi0JCWNvcHlJRmlsZShBWElTX1JVTlRJTUVfUExVR0lOX0lELCAibGliLyIgKyBBWElTX0pBUiwgd2ViTW9kdWxlUGF0aCwgIldFQi1JTkYvbGliLyIgKyBBWElTX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY29weUlGaWxlKENPTU1PTl9ESVNDT1ZFUllfUExVR0lOX0lELCAibGliLyIgKyBDT01NT05fRElTQ09WRVJZX0pBUiwgd2ViTW9kdWxlUGF0aCwgIldFQi1JTkYvbGliLyIgKyBDT01NT05fRElTQ09WRVJZX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY29weUlGaWxlKEpBVkFYX1hNTF9SUENfUExVR0lOX0lELCAibGliLyIgKyBKQVZBWF9YTUxfUlBDX0pBUiwgd2ViTW9kdWxlUGF0aCwgIldFQi1JTkYvbGliLyIgKyBKQVZBWF9YTUxfUlBDX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY29weUlGaWxlKEpBVkFYX1hNTF9TT0FQX1BMVUdJTl9JRCwgImxpYi8iICsgSkFWQVhfWE1MX1NPQVBfSkFSLCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIEpBVkFYX1hNTF9TT0FQX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY29weVBsdWdpbkphcihKQVZBWF9XU0RMX1BMVUdJTl9JRCwgd2ViTW9kdWxlUGF0aCwgIldFQi1JTkYvbGliLyIgKyBKQVZBWF9XU0RMX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQljb3B5UGx1Z2luSmFyKENPTU1PTl9MT0dHSU5HX1BMVUdJTl9JRCwgd2ViTW9kdWxlUGF0aCwgIldFQi1JTkYvbGliLyIgKyBDT01NT05fTE9HR0lOR19KQVIsIHN0YXR1cywgZW52LCBtb25pdG9yKTsKLQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJcmV0dXJuOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHZvaWQgY29weUlGaWxlKFN0cmluZyBwbHVnaW5JZCwgU3RyaW5nIHNvdXJjZSwgSVBhdGggdGFyZ2V0UGF0aCwgU3RyaW5nIHRhcmdldEZpbGUsIElTdGF0dXMgc3RhdHVzLCBJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJSVBhdGggdGFyZ2V0ID0gdGFyZ2V0UGF0aC5hcHBlbmQobmV3IFBhdGgodGFyZ2V0RmlsZSkpOwotCQlQcm9ncmVzc1V0aWxzLnJlcG9ydChtb25pdG9yLCBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST0dSRVNTX0lORk9fQ09QWUlOR19GSUxFKTsKLQotCQl0cnkgewotCQkJUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0JCQljb250ZXh0LnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCh0cnVlKTsKLQkJCWNvbnRleHQuc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQodHJ1ZSk7Ci0JCQljb250ZXh0LnNldENoZWNrb3V0RmlsZXNFbmFibGVkKHRydWUpOwotCQkJVVJMIHNvdXJjZVVSTCA9IEJ1bmRsZVV0aWxzLmdldFVSTEZyb21CdW5kbGUocGx1Z2luSWQsIHNvdXJjZSk7Ci0JCQlJRmlsZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGUodGFyZ2V0KTsKLQkJCWlmICghcmVzb3VyY2UuZXhpc3RzKCkpIHsKLQkJCQlJRmlsZSBmaWxlID0gRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCB0YXJnZXQsIHNvdXJjZVVSTC5vcGVuU3RyZWFtKCksIG1vbml0b3IsIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotCQkJCWlmICgocHJvamVjdFJlc3RhcnRSZXF1aXJlZF8uYm9vbGVhblZhbHVlKCkgPT0gZmFsc2UpICYmIGZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJcHJvamVjdFJlc3RhcnRSZXF1aXJlZF8gPSBCb29sZWFuLlRSVUU7Ci0JCQkJfQotCi0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFQ09QWSwgZSk7Ci0JCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0KLQkJfQotCX0KLQotCS8qKgotCSAqIENvcHkgcGx1Z2lucyB0aGF0IGhhcyBiZWVuIEpBUmVkCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNvcHlQbHVnaW5KYXIoU3RyaW5nIHBsdWdpbklkLCBJUGF0aCB0YXJnZXRQYXRoLCBTdHJpbmcgdGFyZ2V0RmlsZSwgSVN0YXR1cyBzdGF0dXMsIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlJUGF0aCB0YXJnZXQgPSB0YXJnZXRQYXRoLmFwcGVuZChuZXcgUGF0aCh0YXJnZXRGaWxlKSk7Ci0JCVByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19DT1BZSU5HX0ZJTEUpOwotCi0JCXRyeSB7Ci0JCQlSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9IG5ldyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQoKTsKLQkJCWNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotCQkJY29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCh0cnVlKTsKLQkJCWNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0KLQkJCUZpbGUgamFyRmlsZSA9IEZpbGVMb2NhdG9yLmdldEJ1bmRsZUZpbGUoUGxhdGZvcm0uZ2V0QnVuZGxlKHBsdWdpbklkKSk7Ci0JCQlpZiAoamFyRmlsZSAhPSBudWxsICYmIGphckZpbGUuaXNGaWxlKCkpIHsKLQkJCQlJRmlsZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGUodGFyZ2V0KTsKLQotCQkJCWlmICghcmVzb3VyY2UuZXhpc3RzKCkpIHsKLQkJCQkJSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGphckZpbGUpOwotCQkJCQlJRmlsZSBmaWxlID0gRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCB0YXJnZXQsIGlzLCBtb25pdG9yLCBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpKTsKLQkJCQkJaWYgKChwcm9qZWN0UmVzdGFydFJlcXVpcmVkXy5ib29sZWFuVmFsdWUoKSA9PSBmYWxzZSkgJiYgZmlsZS5leGlzdHMoKSkgewotCQkJCQkJcHJvamVjdFJlc3RhcnRSZXF1aXJlZF8gPSBCb29sZWFuLlRSVUU7Ci0JCQkJCX0KLQotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVDT1BZLCBlKTsKLQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQotCQl9Ci0JfQotCi0JLyoKLQkgKiBDaGVjayBmb3IgYW55IG9ic29sZXRlIEphcnMgaW4gV0VCLUlORi9saWIgZm9sZGVyIE9ic29sZXRlIGphcnMgd291bGQKLQkgKiBiZSBmb3VuZCBpbiBwcm9qZWN0cyBtaWdyYXRlZCBmcm9tIG9sZGVyIHZlcnNpb25zIG9mIFdUUAotCSAqLwotCXByaXZhdGUgdm9pZCBkZWxldGVPYnNvbGV0ZUphcnMoSVBhdGggd2ViTW9kdWxlUGF0aCkgewotCQkvLyBGaXJzdCBjaGVjayBmb3IgQW55IGphcnMgdGhhdCBoYXZlIG5hbWVzIHRoYXQgYXJlIGtub3duIHRvIGJlCi0JCS8vIG9ic29sZXRlCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgT0JTT0xFVEVfSkFSUy5sZW5ndGg7IGkrKykgewotCQkJSVBhdGggcGF0aCA9IHdlYk1vZHVsZVBhdGguYXBwZW5kKCJXRUItSU5GL2xpYi8iICsgT0JTT0xFVEVfSkFSU1tpXSk7Ci0KLQkJCUlGaWxlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZShwYXRoKTsKLQkJCWlmIChyZXNvdXJjZS5leGlzdHMoKSkgewotCQkJCWRlbGV0ZVJlc291cmNlKHJlc291cmNlKTsKLQkJCX0KLQkJfQotCi0JCS8vIGRlbGV0ZSBvbGRlciBKQVJzIG9mIHRoZSBzYW1lIG5hbWUKLQkJZGVsZXRlT2xkSmFyKHdlYk1vZHVsZVBhdGguYXBwZW5kKCJXRUItSU5GL2xpYi8iICsgQVhJU19KQVIpLCBBWElTX0pBUl9TSVpFKTsKLQkJZGVsZXRlT2xkSmFyKHdlYk1vZHVsZVBhdGguYXBwZW5kKCJXRUItSU5GL2xpYi8iICsgQ09NTU9OX0RJU0NPVkVSWV9KQVIpLCBDT01NT05fRElTQ09WRVJZX0pBUl9TSVpFKTsKLQkJZGVsZXRlT2xkSmFyKHdlYk1vZHVsZVBhdGguYXBwZW5kKCJXRUItSU5GL2xpYi8iICsgSkFWQVhfWE1MX1JQQ19KQVIpLCBKQVZBWF9YTUxfUlBDX0pBUl9TSVpFKTsKLQkJZGVsZXRlT2xkSmFyKHdlYk1vZHVsZVBhdGguYXBwZW5kKCJXRUItSU5GL2xpYi8iICsgSkFWQVhfWE1MX1NPQVBfSkFSKSwgSkFWQVhfWE1MX1NPQVBfSkFSX1NJWkUpOwotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBKQVZBWF9XU0RMX0pBUiksIEpBVkFYX1dTRExfSkFSX1NJWkUpOwotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBDT01NT05fTE9HR0lOR19KQVIpLCBDT01NT05fTE9HR0lOR19KQVJfU0laRSk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZGVsZXRlT2xkSmFyKElQYXRoIGphclBhdGgsIGxvbmcgamFyU2l6ZSkgewotCQlJRmlsZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGUoamFyUGF0aCk7Ci0JCWlmIChyZXNvdXJjZS5leGlzdHMoKSkgewotCQkJLy8gY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSByZXNvdXJjZSBieSBnZXR0aW5nIHRoZSBqYXZhLmlvLkZpbGUKLQkJCWxvbmcgZmlsZVNpemUgPSByZXNvdXJjZS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpLmxlbmd0aCgpOwotCQkJaWYgKGZpbGVTaXplICE9IGphclNpemUpIHsKLQkJCQlkZWxldGVSZXNvdXJjZShyZXNvdXJjZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZGVsZXRlUmVzb3VyY2UoSUZpbGUgcmVzb3VyY2UpIHsgLy8gZGVsZXRlIHRoZSByZXNvdXJjZQotCQl0cnkgewotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJPYnNvbGV0ZSBKYXIhISAiICsgcmVzb3VyY2UuZ2V0TmFtZSgpKTsKLQkJCXJlc291cmNlLmRlbGV0ZSh0cnVlLCBudWxsKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsgLy8gZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCi0JLyoqCi0JICogQWRkZXMgQXhpcyBKQVJzIHRvIHRoZSBidWlsZCBwYXRoIG9mIEphdmEgcHJvamVjdAotCSAqIAotCSAqIEBwYXJhbSBlbnYKLQkgKiBAcGFyYW0gbW9uaXRvcgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBhZGRBeGlzSmFyc1RvQnVpbGRQYXRoKElQcm9qZWN0IHByb2plY3QsIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCi0JCUlTdGF0dXMgc3RhdHVzOwotCi0JCXRyeSB7Ci0JCQlnZXRKYXZhUHJvamVjdENsYXNzcGF0aChlbnYsIG1vbml0b3IpOwotCi0JCQlhZGROZXdKYXJFbnRyeShQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgQVhJU19KQVIsIGdldFRoZUphclBhdGgoQVhJU19SVU5USU1FX1BMVUdJTl9JRCwgUEFUSF9UT19KQVJTX0lOX1BMVUdJTiArIEFYSVNfSkFSKSk7Ci0JCQlhZGROZXdKYXJFbnRyeShQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgQ09NTU9OX0RJU0NPVkVSWV9KQVIsIGdldFRoZUphclBhdGgoQ09NTU9OX0RJU0NPVkVSWV9QTFVHSU5fSUQsIFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBDT01NT05fRElTQ09WRVJZX0pBUikpOwotCQkJYWRkTmV3SmFyRW50cnkoUEFUSF9UT19KQVJTX0lOX1BMVUdJTiArIEpBVkFYX1hNTF9SUENfSkFSLCBnZXRUaGVKYXJQYXRoKEpBVkFYX1hNTF9SUENfUExVR0lOX0lELCBQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgSkFWQVhfWE1MX1JQQ19KQVIpKTsKLQkJCWFkZE5ld0phckVudHJ5KFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBKQVZBWF9YTUxfU09BUF9KQVIsIGdldFRoZUphclBhdGgoSkFWQVhfWE1MX1NPQVBfUExVR0lOX0lELCBQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgSkFWQVhfWE1MX1NPQVBfSkFSKSk7Ci0KLQkJCUlQYXRoIGphdmF4V3NkbEphclBhdGggPSBCdW5kbGVVdGlscy5nZXRKYXJyZWRQbHVnaW5QYXRoKEpBVkFYX1dTRExfUExVR0lOX0lEKTsKLQkJCWlmIChqYXZheFdzZGxKYXJQYXRoICE9IG51bGwpIHsKLQkJCQlhZGROZXdKYXJFbnRyeShqYXZheFdzZGxKYXJQYXRoLnRvU3RyaW5nKCksIGphdmF4V3NkbEphclBhdGgpOwotCQkJfQotCQkJCi0JCQlJUGF0aCBjb21tb25Mb2dnaW5nSmFyUGF0aCA9IEJ1bmRsZVV0aWxzLmdldEphcnJlZFBsdWdpblBhdGgoQ09NTU9OX0xPR0dJTkdfUExVR0lOX0lEKTsKLQkJCWlmIChjb21tb25Mb2dnaW5nSmFyUGF0aCAhPSBudWxsKSB7Ci0JCQkJYWRkTmV3SmFyRW50cnkoY29tbW9uTG9nZ2luZ0phclBhdGgudG9TdHJpbmcoKSwgY29tbW9uTG9nZ2luZ0phclBhdGgpOwotCQkJfQotCQkJdXBkYXRlQ2xhc3NwYXRoKG1vbml0b3IpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQkFEX0JVSUxEUEFUSCwgZSk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGVudgotCSAqIEBwYXJhbSBtb25pdG9yCi0JICogQHJldHVybiBUaGUgSmF2YSBwcm9qZWN0IGNsYXNzcGF0aAotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBJU3RhdHVzIGdldEphdmFQcm9qZWN0Q2xhc3NwYXRoKElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiB7Ci0KLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdF8gPSBudWxsOwotCQlvbGRDbGFzc3BhdGggPSBudWxsOwotCQlqYXZhUHJvamVjdF8gPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0KLQkJb2xkQ2xhc3NwYXRoID0gamF2YVByb2plY3RfLmdldFJhd0NsYXNzcGF0aCgpOwotCi0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JLyoqCi0JICogU3RvcmUgbmV3IEpBUiBuYW1lIGluIG5ld0phck5hbWVzTGlzdCBpZiBpdCdzIG5vdCBhbHJlYWR5IG9uIGJ1aWxkIHBhdGgKLQkgKiAKLQkgKiBAcGFyYW0gamFyTmFtZQotCSAqICAgICAgICAgICAgbmFtZSBvZiB0aGUgSkFSCi0JICogQHBhcmFtIGphclBhdGgKLQkgKiAgICAgICAgICAgIEFic29sdXRlIHBhdGggdG8gdGhlIEpBUgotCSAqLwotCXByaXZhdGUgdm9pZCBhZGROZXdKYXJFbnRyeShTdHJpbmcgamFyTmFtZSwgSVBhdGggamFyUGF0aCkgewotCi0JCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRDbGFzc3BhdGgubGVuZ3RoOyBpKyspIHsKLQkJCWZvdW5kID0gb2xkQ2xhc3NwYXRoW2ldLmdldFBhdGgoKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoamFyTmFtZS50b0xvd2VyQ2FzZSgpKTsKLQkJCWlmIChmb3VuZCkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKCFmb3VuZCkgewotCQkJbmV3SmFyTmFtZXNMaXN0LmFkZChuZXcgSmFyRW50cnkoamFyTmFtZSwgamFyUGF0aCkpOwotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiBVcGRhdGUgdGhlIEphdmEgcHJvamVjdCBjbGFzc3BhdGggYWRkaW5nIGNsYXNzcGF0aCBmcm9tIG5ld0phck5hbWVzTGlzdAotCSAqIHRvIG9sZENsYXNzcGF0aAotCSAqIAotCSAqIEBwYXJhbSBtb25pdG9yCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBJU3RhdHVzIHVwZGF0ZUNsYXNzcGF0aChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gewotCi0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotCQlpZiAobmV3SmFyTmFtZXNMaXN0LnNpemUoKSA+IDApIHsKLQkJCUphckVudHJ5W10gbmV3SmFyRW50cmllcyA9IChKYXJFbnRyeVtdKSBuZXdKYXJOYW1lc0xpc3QudG9BcnJheShuZXcgSmFyRW50cnlbXXt9KTsKLQotCQkJSUNsYXNzcGF0aEVudHJ5W10gbmV3Q2xhc3NwYXRoID0gbmV3IElDbGFzc3BhdGhFbnRyeVtvbGRDbGFzc3BhdGgubGVuZ3RoICsgbmV3SmFyRW50cmllcy5sZW5ndGhdOwotCQkJaW50IGkgPSAwOwotCQkJLy8gQWRkIG9sZENsYXNzcGF0aCBlbnRyaWVzCi0JCQl3aGlsZSAoaSA8IG9sZENsYXNzcGF0aC5sZW5ndGgpIHsKLQkJCQluZXdDbGFzc3BhdGhbaV0gPSBvbGRDbGFzc3BhdGhbaV07Ci0JCQkJaSsrOwotCQkJfQotCi0JCQlpbnQgbSA9IDA7Ci0JCQl3aGlsZSAoaSA8IG5ld0NsYXNzcGF0aC5sZW5ndGgpIHsKLQkJCQluZXdDbGFzc3BhdGhbaV0gPSBKYXZhQ29yZS5uZXdMaWJyYXJ5RW50cnkobmV3SmFyRW50cmllc1ttXS5nZXRKYXJQYXRoKCksIG51bGwsIG51bGwpOwotCQkJCW0rKzsKLQkJCQlpKys7Ci0JCQl9Ci0KLQkJCS8vCi0JCQkvLyBUaGVuIHVwZGF0ZSB0aGUgcHJvamVjdCBjbGFzc3BhdGguCi0JCQkvLwotCi0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCQlqYXZhUHJvamVjdC5zZXRSYXdDbGFzc3BhdGgobmV3Q2xhc3NwYXRoLCBtb25pdG9yKTsKLQotCQl9Ci0KLQkJcmV0dXJuIHN0YXR1czsKLQotCX0KLQotCS8vCi0JLy8gUmV0dXJucyB0aGUgbG9jYWwgbmF0aXZlIHBhdGhuYW1lIG9mIHRoZSBqYXIuCi0JLy8KLQlwcml2YXRlIElQYXRoIGdldFRoZUphclBhdGgoU3RyaW5nIHBsdWdpbklkLCBTdHJpbmcgdGhlSmFyKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwbHVnaW5JZCAhPSBudWxsKSB7Ci0JCQlVUkwgbG9jYWxVUkwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKEJ1bmRsZVV0aWxzLmdldFVSTEZyb21CdW5kbGUocGx1Z2luSWQsIHRoZUphcikpOwotCQkJcmV0dXJuIG5ldyBQYXRoKGxvY2FsVVJMLmdldEZpbGUoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gbmV3IFBhdGgodGhlSmFyKTsKLQkJfQotCi0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0UHJvamVjdFJlc3RhcnRSZXF1aXJlZCgpIHsKLQkJcmV0dXJuIHByb2plY3RSZXN0YXJ0UmVxdWlyZWRfLmJvb2xlYW5WYWx1ZSgpOwotCX0KLQotCXB1YmxpYyBjbGFzcyBKYXJFbnRyeSB7Ci0JCXByaXZhdGUgU3RyaW5nIGphck5hbWU7Ci0JCXByaXZhdGUgSVBhdGggamFyUGF0aDsKLQotCQlwdWJsaWMgSmFyRW50cnkoU3RyaW5nIG5hbWUsIElQYXRoIHBhdGgpIHsKLQkJCWphck5hbWUgPSBuYW1lOwotCQkJamFyUGF0aCA9IHBhdGg7Ci0JCX0KLQotCQlwdWJsaWMgU3RyaW5nIGdldEphck5hbWUoKSB7Ci0JCQlyZXR1cm4gamFyTmFtZTsKLQkJfQotCi0JCXB1YmxpYyBJUGF0aCBnZXRKYXJQYXRoKCkgewotCQkJcmV0dXJuIGphclBhdGg7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZDc4OTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c2lsLkRpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VFbnRpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLQotcHVibGljIGNsYXNzIERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyB3c2RsU2VydmljZVVSTDsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotCi0gIHB1YmxpYyBEZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLSAgCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsgICAKLSAgICBpZiAod3NkbFNlcnZpY2VVUkwgIT0gbnVsbCAmJiB3c2RsU2VydmljZVVSTC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgaWYgKHdlYlNlcnZpY2VzUGFyc2VyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHdlYlNlcnZpY2VzUGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gICAgICAgIC8vd3NlLnNldFdTUGFyc2VyKHdlYlNlcnZpY2VzUGFyc2VyKTsKLSAgICAgIH0KLSAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NFbnRpdHkgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NkbFNlcnZpY2VVUkwpOwotICAgICAgaWYgKHdzRW50aXR5ID09IG51bGwgfHwgIXdzRW50aXR5LmlzRW50aXR5UmVzb2x2ZWQoKSkKLSAgICAgIHsKLSAgICAgICAgd2ViU2VydmljZXNQYXJzZXIuc2V0VVJJKHdzZGxTZXJ2aWNlVVJMKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5wYXJzZShXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9OT05FKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24gd3d3YWUpCi0gICAgICAgIHsKLSAgICAgICAgICBEaWFsb2dXV1dBdXRoZW50aWNhdGlvbiBkaWFsb2cgPSBuZXcgRGlhbG9nV1dXQXV0aGVudGljYXRpb24oUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpKTsKLSAgICAgICAgICBkaWFsb2cuaGFuZGxlV1dXQXV0aGVudGljYXRpb24od3d3YWUpOwotICAgICAgICAgIFN0cmluZyB1c2VybmFtZSA9IGRpYWxvZy5nZXRVc2VybmFtZSgpOwotICAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IGRpYWxvZy5nZXRQYXNzd29yZCgpOwotICAgICAgICAgIGlmICh1c2VybmFtZSAhPSBudWxsICYmIHBhc3N3b3JkICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgd2ViU2VydmljZXNQYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKHVzZXJuYW1lKTsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VzUGFyc2VyLnNldEhUVFBCYXNpY0F1dGhQYXNzd29yZChwYXNzd29yZCk7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgd2ViU2VydmljZXNQYXJzZXIucGFyc2UoV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfTk9ORSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5zZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUobnVsbCk7Ci0gICAgICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5zZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQobnVsbCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIHdzRW50aXR5ID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzZGxTZXJ2aWNlVVJMKTsKLSAgICAgIH0KLSAgICAgIGlmICh3c0VudGl0eSAhPSBudWxsICYmIHdzRW50aXR5LmdldFR5cGUoKSA9PSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGh0dHBVc2VybmFtZSA9IHdzRW50aXR5LmdldEhUVFBVc2VybmFtZSgpOwotICAgICAgICBTdHJpbmcgaHR0cFBhc3N3b3JkID0gd3NFbnRpdHkuZ2V0SFRUUFBhc3N3b3JkKCk7Ci0gICAgICAgIGlmIChodHRwVXNlcm5hbWUgIT0gbnVsbCAmJiBodHRwUGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGphdmFXU0RMUGFyYW0uc2V0SFRUUFVzZXJuYW1lKGh0dHBVc2VybmFtZSk7Ci0gICAgICAgICAgamF2YVdTRExQYXJhbS5zZXRIVFRQUGFzc3dvcmQoaHR0cFBhc3N3b3JkKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGphdmFXU0RMUGFyYW0gVGhlIGphdmFXU0RMUGFyYW0gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0gICAgdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd3NkbFNlcnZpY2VVUkwgVGhlIHdzZGxTZXJ2aWNlVVJMIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxTZXJ2aWNlVVJMKFN0cmluZyB3c2RsU2VydmljZVVSTCkgewotICAgIHRoaXMud3NkbFNlcnZpY2VVUkwgPSB3c2RsU2VydmljZVVSTDsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdlYlNlcnZpY2VzUGFyc2VyLgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd2ViU2VydmljZXNQYXJzZXIgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svUmVmcmVzaFByb2plY3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1JlZnJlc2hQcm9qZWN0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTBiNTIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svUmVmcmVzaFByb2plY3RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLQotcHVibGljIGNsYXNzIFJlZnJlc2hQcm9qZWN0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCi0JcHVibGljIFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpCi0JewotCX0KLQotCS8qKgotCSogRXhlY3V0ZSBSZWZyZXNoUHJvamVjdFRhc2sKLQkqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCQl0cnkKLQkJewotCQkJaWYgKHByb2plY3QhPW51bGwpCi0JCQlwcm9qZWN0LnJlZnJlc2hMb2NhbChJUHJvamVjdC5ERVBUSF9JTkZJTklURSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJewotCQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1JFRlJFU0hfUFJPSkVDVCwgZSk7Ci0JCSAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkgIHJldHVybiBzdGF0dXM7Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCQl0aGlzLnByb2plY3QgPSBwcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svU3R1YjJCZWFuQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiY2VlNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTE1MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNTAzICAgMTI2ODE5IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MTUgICAxMTgzMTUgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5OYW1lTWFwcGluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuTW9kdWxlQ29yZU5hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi1wdWJsaWMgY2xhc3MgU3R1YjJCZWFuQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0gIHByaXZhdGUgU3RyaW5nIGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lOwotICBwcml2YXRlIFZlY3RvciBwb3J0VHlwZXNfOwotICBwcml2YXRlIFN0cmluZyBwcm94eUJlYW5fOwotICBwcml2YXRlIFN0cmluZyBvdXRwdXRGb2xkZXJfOwotICBwcml2YXRlIFN0cmluZyBwcm94eUVuZHBvaW50XzsKLSAgCi0gIHByaXZhdGUgSVByb2plY3QgY2xpZW50UHJvamVjdF87Ci0gIAotICBwdWJsaWMgU3R1YjJCZWFuQ29tbWFuZCgpewotCSAgc3VwZXIoKTsKLQkgIHBvcnRUeXBlc18gPSBuZXcgVmVjdG9yKCk7CSAgCi0gIH0KLQotICAvKioKLSAgKiBFeGVjdXRlCi0gICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsgICAgICAgCi0gICAgU3RyaW5nIGlucHV0V3NkbExvY2F0aW9uID0gamF2YVdTRExQYXJhbV8uZ2V0SW5wdXRXc2RsTG9jYXRpb24oKTsKLSAgICBEZWZpbml0aW9uIGRlZiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKGlucHV0V3NkbExvY2F0aW9uKTsKLSAgICAvKgotICAgICogSGFjazogQXhpcyBpcyBub3QgdXNpbmcgYSBwcm9wZXIgamF2YS5uZXQuVVJMIGFzIGl0cyBpbnB1dFdzZGxMb2NhdGlvbi4KLSAgICAqIFdlIG5lZWQgdG8gY29udmVydCBpdCB0byBhIHByb3BlciBmaWxlIFVSTC4KLSAgICAqLwotICAgIGlmIChkZWYgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShpbnB1dFdzZGxMb2NhdGlvbik7Ci0gICAgICBpZiAoZmlsZS5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBkZWYgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbihmaWxlLnRvVVJMKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vRW5zdXJlIHRoZSBjbGllbnQgcHJvamVjdCBpcyBlaXRoZXIgYSBmbGV4aWJsZSBwcm9qZWN0IG9yIGEgSmF2YSBwcm9qZWN0Ci0gICAgTW9kdWxlQ29yZU5hdHVyZSBtbiA9IE1vZHVsZUNvcmVOYXR1cmUuZ2V0TW9kdWxlQ29yZU5hdHVyZShjbGllbnRQcm9qZWN0Xyk7Ci0gICAgaWYgKG1uPT1udWxsKQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIHBsYWluIG9sZCBKYXZhIHByb2plY3QgICAgCi0JCWlmICghUmVzb3VyY2VVdGlscy5pc0phdmFQcm9qZWN0KGNsaWVudFByb2plY3RfKSkKLQkJewotCSAJCSAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5fTk9fSkFWQV9OQVRVUkUpOwkKLQkgCQkgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkgCQkgICByZXR1cm4gc3RhdHVzOwotCQl9ICAgIAkKLSAgICB9Ci0gICAgCi0gICAgTWFwIHBrZzJuc01hcHBpbmcgPSBqYXZhV1NETFBhcmFtXy5nZXRNYXBwaW5ncygpOwotICAgIE1hcCBzZXJ2aWNlcyA9IGRlZi5nZXRTZXJ2aWNlcygpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWl0Lm5leHQoKTsKLSAgICAgIFN0cmluZyBzZXJ2aWNlUGtnTmFtZSA9IE5hbWVNYXBwaW5nVXRpbHMuZ2V0UGFja2FnZU5hbWUoc2VydmljZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBwa2cybnNNYXBwaW5nKTsKLSAgICAgIFN0cmluZyBzZXJ2aWNlQ2xhc3NOYW1lID0gY29tcHV0ZUNsYXNzTmFtZShzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgU3RyaW5nIGpuZGlOYW1lID0gc2VydmljZUNsYXNzTmFtZTsKLSAgICAgIE1hcCBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQyID0gcG9ydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIGlmIChzZXJ2aWNlQ2xhc3NOYW1lLmVxdWFscyhjb21wdXRlQ2xhc3NOYW1lKCgoUG9ydClpdDIubmV4dCgpKS5nZXRCaW5kaW5nKCkuZ2V0UG9ydFR5cGUoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlQ2xhc3NOYW1lID0gc2VydmljZUNsYXNzTmFtZSArICJfU2VydmljZSI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZvciAoSXRlcmF0b3IgaXQyID0gcG9ydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KWl0Mi5uZXh0KCk7Ci0gICAgICAgIGlmIChkaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZSAhPSBudWxsICYmICFkaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZS5lcXVhbHMocG9ydC5nZXROYW1lKCkpKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcyA9IG51bGw7Ci0gICAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50cyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBpdDMgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTsgaXQzLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGl0My5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKW9iamVjdDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzb2FwQWRkcmVzcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcHJveHlFbmRwb2ludF8gPSBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gcG9ydC5nZXRCaW5kaW5nKCkuZ2V0UG9ydFR5cGUoKTsKLSAgICAgICAgICBRTmFtZSBwb3J0VHlwZVFOYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKTsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgcG9ydFR5cGVJRCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBwb3J0VHlwZUlELmFwcGVuZChwb3J0VHlwZVFOYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgICBwb3J0VHlwZUlELmFwcGVuZCgiIyIpOwotICAgICAgICAgIHBvcnRUeXBlSUQuYXBwZW5kKHBvcnRUeXBlUU5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICAgIGlmICghcG9ydFR5cGVzXy5jb250YWlucyhwb3J0VHlwZUlELnRvU3RyaW5nKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBvcnRUeXBlc18uYWRkKHBvcnRUeXBlSUQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBTdHViMkJlYW5JbmZvIHN0dWIyQmVhbkluZm8gPSBuZXcgU3R1YjJCZWFuSW5mbygpOwotICAgICAgICAgICAgc3R1YjJCZWFuSW5mby5zZXRDbGllbnRQcm9qZWN0KGNsaWVudFByb2plY3RfKTsKLSAgICAgICAgICAgIHN0dWIyQmVhbkluZm8uc2V0T3V0cHV0Rm9sZGVyKCBvdXRwdXRGb2xkZXJfICk7Ci0gICAgICAgICAgICBTdHJpbmcgcG9ydFR5cGVQa2dOYW1lID0gTmFtZU1hcHBpbmdVdGlscy5nZXRQYWNrYWdlTmFtZShwb3J0VHlwZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBwa2cybnNNYXBwaW5nKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIElmIHRoZSBwYWNrYWdlIG5hbWUgYW5kIG1ldGhvZCBuYW1lIGFyZSB0aGUgc2FtZSB0aGUgQXhpcwotICAgICAgICAgICAgICogd3NkbDJKYXZhIEVtaXR0ZXIgYWRkcyBhICJfcGtnIiBzdWZmaXggdG8gdGhlIHBhY2thZ2UgbmFtZQotICAgICAgICAgICAgICogb2YgZ2VuZXJhdGVkIGNvZGUuCi0gICAgICAgICAgICAgKiAKLSAgICAgICAgICAgICAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwcm94eSBnZXQncyBwdXQgaW4gdGhpcyBzYW1lIHBhY2thZ2UKLSAgICAgICAgICAgICAqIGlmIGFuIG9wZXJhdGlvbiBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCi0gICAgICAgICAgICAgKiAoTWFyayBIdXRjaGluc29uIC0gQnVnIDExODMxNSkKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgICAgICAgSXRlcmF0b3Igb3Blckl0ZXIgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICBib29sZWFuIGFkZFN1ZmZpeCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKG9wZXJJdGVyLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIAlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilvcGVySXRlci5uZXh0KCk7Ci0gICAgICAgICAgICAJaWYgKG9wZXJhdGlvbi5nZXROYW1lKCkuZXF1YWxzKHBvcnRUeXBlUGtnTmFtZSkpCi0gICAgICAgICAgICAJewotICAgICAgICAgICAgCQlhZGRTdWZmaXggPSB0cnVlOyAgICAgICAgICAgIAkKLSAgICAgICAgICAgIAl9Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYWRkU3VmZml4KSB7Ci0gICAgICAgICAgICAJcG9ydFR5cGVQa2dOYW1lID0gcG9ydFR5cGVQa2dOYW1lICsgIl9wa2ciOwotICAgICAgICAgICAgCXNlcnZpY2VQa2dOYW1lID0gc2VydmljZVBrZ05hbWUgKyAiX3BrZyI7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyBwb3J0VHlwZUNsYXNzTmFtZSA9IGNvbXB1dGVDbGFzc05hbWUocG9ydFR5cGVRTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgICAgICBzdHViMkJlYW5JbmZvLnNldFBhY2thZ2UocG9ydFR5cGVQa2dOYW1lKTsKLSAgICAgICAgICAgIHN0dWIyQmVhbkluZm8uc2V0Q2xhc3MocG9ydFR5cGVDbGFzc05hbWUgKyAiUHJveHkiKTsKLSAgICAgICAgICAgIHByb3h5QmVhbl8gPSBwb3J0VHlwZVBrZ05hbWUrIi4iK3BvcnRUeXBlQ2xhc3NOYW1lKyJQcm94eSI7Ci0gICAgICAgICAgICBpZiAoam5kaU5hbWUuZXF1YWxzKHBvcnRUeXBlQ2xhc3NOYW1lKSkKLSAgICAgICAgICAgICAgcG9ydFR5cGVDbGFzc05hbWUgPSBwb3J0VHlwZUNsYXNzTmFtZSArICJfUG9ydFR5cGUiOwotICAgICAgICAgICAgc3R1YjJCZWFuSW5mby5hZGRTRUkocG9ydFR5cGVQa2dOYW1lLCBwb3J0VHlwZUNsYXNzTmFtZSwgc2VydmljZVBrZ05hbWUsIHNlcnZpY2VDbGFzc05hbWUsIGpuZGlOYW1lLCBOYW1lTWFwcGluZ1V0aWxzLmdldFBvcnROYW1lKHBvcnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsgICAgICAgICAgICAgIAotICAgICAgICAgICAgICBzdHViMkJlYW5JbmZvLndyaXRlKCBtb25pdG9yLCBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkgKTsKLSAgICAgICAgICAgICAgaWYgKGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgZGlzY292ZXJlZCBwb3J0IHdhcyBwcm9jZXNzZWQuIElnbm9yZSBhbGwgb3RoZXIgcG9ydHMgYW5kIHNlcnZpY2VzLgotICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZUNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKQotICB7Ci0JICByZXR1cm4gTmFtZU1hcHBpbmdVdGlscy54bWxOYW1lVG9KYXZhQ2xhc3MoY2xhc3NOYW1lKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICogQHJldHVybiBKYXZhV1NETFBhcmFtZXRlcgotICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpCi0gIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbV87Ci0gIH0KLQotICAvKioKLSAgKiBTZXRzIHRoZSBqYXZhV1NETFBhcmFtLgotICAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pCi0gIHsKLSAgICBqYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd2ViU2VydmljZXNQYXJzZXIuCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKSB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBAcGFyYW0gZGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWUgVGhlIGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lKFN0cmluZyBkaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZSkgewotICAgIHRoaXMuZGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWUgPSBkaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qKgotCSogQHBhcmFtIGNsaWVudFByb2plY3QgVGhlIGNsaWVudFByb2plY3QgdG8gc2V0LgotCSovCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoSVByb2plY3QgY2xpZW50UHJvamVjdCkgewotCQl0aGlzLmNsaWVudFByb2plY3RfID0gY2xpZW50UHJvamVjdDsKLSAgfQotCQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJveHlCZWFuLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlCZWFuKCkgewotCQlyZXR1cm4gcHJveHlCZWFuXzsKLQl9CQotCQotCXB1YmxpYyB2b2lkIHNldE91dHB1dEZvbGRlciggU3RyaW5nIG91dHB1dEZvbGRlciApCi0JewotCQlvdXRwdXRGb2xkZXJfID0gb3V0cHV0Rm9sZGVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlFbmRwb2ludCgpIHsKLQkJcmV0dXJuIHByb3h5RW5kcG9pbnRfOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svU3R1YjJCZWFuSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5JbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ODA1YjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5JbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTE1MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwMjE2ICAgMTI3MTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNTE3ICAgMTQxNDgxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzEzICAgMTc2NTgwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBHZW5lcmF0ZSBhIENsaWVudCBXUyBQcm94eSBhY2NlcHRpbmcgVVJMCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhVmlzaWJpbGl0eUtpbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSmF2YU1PRlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1wdWJsaWMgY2xhc3MgU3R1YjJCZWFuSW5mbwotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBORVdfTElORSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotICBwcml2YXRlIGludCBpbmRlbnRDb3VudDsKLQotICBwcml2YXRlIFN0cmluZyBwYWNrYWdlXzsKLSAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgaW1wb3J0c187Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIHNlaXNfOwotICBwcml2YXRlIFN0cmluZ0J1ZmZlciBzZXJ2aWNlc187Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIGpuZGlOYW1lc187Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIHBvcnRzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xhc3NfOwotICBwcml2YXRlIFZlY3RvciB1c2VkTmFtZXM7Ci0gIAotICBwcml2YXRlIElQcm9qZWN0IGNsaWVudFByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgIG91dHB1dEZvbGRlcl87Ci0gIAotICBwdWJsaWMgU3R1YjJCZWFuSW5mbygpCi0gIHsKLSAgICBpbmRlbnRDb3VudCA9IDA7Ci0gICAgcGFja2FnZV8gPSBudWxsOwotICAgIGltcG9ydHNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNlaXNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNlcnZpY2VzXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBqbmRpTmFtZXNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHBvcnRzXyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBjbGFzc18gPSAiU0VJQmVhbiI7Ci0gICAgdXNlZE5hbWVzID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBjbGllbnRQcm9qZWN0KSB7Ci0gIAl0aGlzLmNsaWVudFByb2plY3RfID0gIGNsaWVudFByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE91dHB1dEZvbGRlciggU3RyaW5nIG91dHB1dEZvbGRlciApCi0gIHsKLSAgCW91dHB1dEZvbGRlcl8gPSBvdXRwdXRGb2xkZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFBhY2thZ2UoU3RyaW5nIHBrZ05hbWUpCi0gIHsKLQkgIHBhY2thZ2VfID0gcGtnTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEltcG9ydHMoU3RyaW5nIHBrZ05hbWUsIFN0cmluZyBjbGFzc05hbWUpCi0gIHsKLSAgICBpbXBvcnRzXy5hcHBlbmQodG9GdWxseVF1YWxpZmllZENsYXNzTmFtZShwa2dOYW1lLCBjbGFzc05hbWUpKTsKLSAgICBpbXBvcnRzXy5hcHBlbmQoIjsiKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFNFSShTdHJpbmcgc2VpUGtnTmFtZSwgU3RyaW5nIHNlaUNsYXNzTmFtZSwgU3RyaW5nIHNlcnZpY2VQa2dOYW1lLCBTdHJpbmcgc2VydmljZUNsYXNzTmFtZSwgU3RyaW5nIHBvcnROYW1lKQotICB7Ci0gICAgYWRkU0VJKHNlaVBrZ05hbWUsIHNlaUNsYXNzTmFtZSwgc2VydmljZVBrZ05hbWUsIHNlcnZpY2VDbGFzc05hbWUsIHNlcnZpY2VDbGFzc05hbWUsIHBvcnROYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFNFSShTdHJpbmcgc2VpUGtnTmFtZSwgU3RyaW5nIHNlaUNsYXNzTmFtZSwgU3RyaW5nIHNlcnZpY2VQa2dOYW1lLCBTdHJpbmcgc2VydmljZUNsYXNzTmFtZSwgU3RyaW5nIGpuZGlOYW1lLCBTdHJpbmcgcG9ydE5hbWUpCi0gIHsKLSAgICBzZWlzXy5hcHBlbmQodG9GdWxseVF1YWxpZmllZENsYXNzTmFtZShzZWlQa2dOYW1lLCBzZWlDbGFzc05hbWUpKTsKLSAgICBzZWlzXy5hcHBlbmQoIjsiKTsKLSAgICBzZXJ2aWNlc18uYXBwZW5kKHRvRnVsbHlRdWFsaWZpZWRDbGFzc05hbWUoc2VydmljZVBrZ05hbWUsIHNlcnZpY2VDbGFzc05hbWUpKTsKLSAgICBzZXJ2aWNlc18uYXBwZW5kKCI7Iik7Ci0gICAgam5kaU5hbWVzXy5hcHBlbmQoam5kaU5hbWUpOwotICAgIGpuZGlOYW1lc18uYXBwZW5kKCI7Iik7Ci0gICAgcG9ydHNfLmFwcGVuZChwb3J0TmFtZSk7Ci0gICAgcG9ydHNfLmFwcGVuZCgiOyIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xhc3MoU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotCSAgY2xhc3NfID0gY2xhc3NOYW1lOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgdG9GdWxseVF1YWxpZmllZENsYXNzTmFtZShTdHJpbmcgcGtnTmFtZSwgU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBzYi5hcHBlbmQocGtnTmFtZSk7Ci0gICAgc2IuYXBwZW5kKCIuIik7Ci0gICAgc2IuYXBwZW5kKGNsYXNzTmFtZSk7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRQYWNrYWdlTmFtZShTdHJpbmcgcW5hbWUpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBxbmFtZS5sYXN0SW5kZXhPZigiLiIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHJldHVybiBxbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBxbmFtZTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldENsYXNzTmFtZShTdHJpbmcgcW5hbWUpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBxbmFtZS5sYXN0SW5kZXhPZigiLiIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHJldHVybiBxbmFtZS5zdWJzdHJpbmcoaW5kZXgrMSwgcW5hbWUubGVuZ3RoKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBxbmFtZTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGZpcnN0Q2hhclRvTG93ZXJDYXNlKFN0cmluZyBzKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNiLmFwcGVuZChzLnN1YnN0cmluZygwLCAxKS50b0xvd2VyQ2FzZSgpKTsKLSAgICBzYi5hcHBlbmQocy5zdWJzdHJpbmcoMSwgcy5sZW5ndGgoKSkpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RnVsbHlRdWFsaWZpZWROYW1lKEphdmFIZWxwZXJzIGphdmFIZWxwZXJzKQotICB7Ci0gICAgaWYgKGphdmFIZWxwZXJzLmlzUHJpbWl0aXZlKCkpCi0gICAgICByZXR1cm4gamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gamF2YUhlbHBlcnMuZ2V0UXVhbGlmaWVkTmFtZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgd3JpdGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsIElTdGF0dXNIYW5kbGVyIHN0YXR1c01vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgSVBhdGggICAgICAgIG91dHB1dFBhdGggPSBuZXcgUGF0aCggb3V0cHV0Rm9sZGVyXyApOwotICAgIElQcm9qZWN0ICAgICBwcm9qZWN0ICAgID0gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YoIG91dHB1dFBhdGggKTsKLSAgICBTdHJpbmdXcml0ZXIgc3cgICAgICAgICA9IG5ldyBTdHJpbmdXcml0ZXIoMjA0OCk7Ci0gICAgCi0gICAgd3JpdGVQYWNrYWdlKHN3KTsKLSAgICB3cml0ZUltcG9ydHMoc3cpOwotICAgIHdyaXRlQ2xhc3Moc3cpOwotICAgIHN3LmNsb3NlKCk7Ci0gICAgYnl0ZVtdIGJ5dGVzID0gc3cuZ2V0QnVmZmVyKCkudG9TdHJpbmcoKS5nZXRCeXRlcyggcHJvamVjdC5nZXREZWZhdWx0Q2hhcnNldCgpICk7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChwYWNrYWdlXyAhPSBudWxsICYmIHBhY2thZ2VfLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQocGFja2FnZV8pOwotICAgICAgc2IuYXBwZW5kKCIuIik7Ci0gICAgfQotICAgIHNiLmFwcGVuZChjbGFzc18pOwotICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihzYi50b1N0cmluZygpLnJlcGxhY2UoJy4nLCAnLycpKTsKLSAgICBzYi5hcHBlbmQoIi5qYXZhIik7Ci0KLSAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ5dGVzKTsKLSAgICAKLSAgICBJUGF0aCBuZXdGaWxlUGF0aCA9IG5ldyBQYXRoKG91dHB1dEZvbGRlcl8pLmFwcGVuZCggc2IudG9TdHJpbmcoKSApOwotICAgIAotICAgIEZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGUoV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpLCBuZXdGaWxlUGF0aCwgYmFpcywgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNNb25pdG9yKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZVBhY2thZ2UoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHBhY2thZ2VfICE9IG51bGwgJiYgcGFja2FnZV8ubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIHcud3JpdGUoInBhY2thZ2UgIik7Ci0gICAgICB3LndyaXRlKHBhY2thZ2VfKTsKLSAgICAgIHcud3JpdGUoIjsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlSW1wb3J0cyhXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGltcG9ydHNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKCJpbXBvcnQgIik7Ci0gICAgICB3LndyaXRlKHN0Lm5leHRUb2tlbigpKTsKLSAgICAgIHcud3JpdGUoIjsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlQ2xhc3MoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgY2xhc3MgIik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIiAiKTsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlaXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgaWYgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHcud3JpdGUoImltcGxlbWVudHMgIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKHN0Lm5leHRUb2tlbigpKTsKLSAgICAgIGlmIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHcud3JpdGUoIiwgIik7Ci0gICAgfQotICAgIHcud3JpdGUoIiB7Iik7Ci0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3cml0ZUZpZWxkc0RlY2xhcmF0aW9ucyh3KTsKLSAgICB3cml0ZUNvbnN0cnVjdG9yKHcpOwotICAgIHdyaXRlSW5pdCh3KTsKLSAgICAvKgotICAgICogQ2Fubm90IHVzZSBKTkRJIGxvb2t1cCBmb3IgQVhJUwotICAgICoKLSAgICB3cml0ZVVzZUpOREkodyk7Ci0gICAgKi8KLSAgICB3cml0ZUdldFNldEVuZHBvaW50KHcpOwotICAgIHdyaXRlU0VJR2V0dGVycyh3KTsKLSAgICB3cml0ZVNFSU1ldGhvZHModyk7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVGaWVsZHNEZWNsYXJhdGlvbnMoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgLyoKLSAgICAqIENhbm5vdCB1c2UgSk5ESSBsb29rdXAgZm9yIEFYSVMKLSAgICAqCi0gICAgdy53cml0ZSgicHJpdmF0ZSBib29sZWFuIF91c2VKTkRJID0gdHJ1ZTsiKTsKLSAgICBuZXdMaW5lKHcpOwotICAgICovCi0gICAgdy53cml0ZSgicHJpdmF0ZSBTdHJpbmcgX2VuZHBvaW50ID0gbnVsbDsiKTsKLSAgICB1c2VkTmFtZXMuYWRkKCJfZW5kcG9pbnQiKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIHcud3JpdGUoInByaXZhdGUgIik7Ci0gICAgICBTdHJpbmcgc2VpID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB3LndyaXRlKHNlaSk7Ci0gICAgICB3LndyaXRlKCIgIik7Ci0gICAgICBTdHJpbmcgc3R1Yk5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShnZXRDbGFzc05hbWUoc2VpKSk7Ci0gICAgICB3LndyaXRlKHN0dWJOYW1lKTsKLSAgICAgIHVzZWROYW1lcy5hZGQoc3R1Yk5hbWUpOwotICAgICAgdy53cml0ZSgiID0gbnVsbDsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlQ29uc3RydWN0b3IoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgIik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIigpIHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIl9pbml0Iik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIigpOyIpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgifSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgCi0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgIik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIihTdHJpbmcgZW5kcG9pbnQpIHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIl9lbmRwb2ludCA9IGVuZHBvaW50OyIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiX2luaXQiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKCk7Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZUluaXQoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwcml2YXRlIHZvaWQgX2luaXQiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKCkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgidHJ5IHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIC8qCi0gICAgKiBDYW5ub3QgdXNlIEpOREkgbG9va3VwIGZvciBBWElTCi0gICAgKgotICAgIHcud3JpdGUoImlmIChfdXNlSk5ESSkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgKi8KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlaXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHNlcnZpY2VUb2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlcnZpY2VzXy50b1N0cmluZygpLCAiOyIpOwotICAgIC8vU3RyaW5nVG9rZW5pemVyIGpuZGlOYW1lVG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihqbmRpTmFtZXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHBvcnRUb2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHBvcnRzXy50b1N0cmluZygpLCAiOyIpOwotICAgIC8qCi0gICAgaWYgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKCJqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOyIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICB3LndyaXRlKGZpcnN0Q2hhclRvTG93ZXJDYXNlKGdldENsYXNzTmFtZShzdC5uZXh0VG9rZW4oKSkpKTsKLSAgICAgIHcud3JpdGUoIiA9ICgoIik7Ci0gICAgICB3LndyaXRlKHNlcnZpY2VUb2tlbnMubmV4dFRva2VuKCkpOwotICAgICAgdy53cml0ZSgiKWN0eC5sb29rdXAoXCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvIik7Ci0gICAgICB3LndyaXRlKGpuZGlOYW1lVG9rZW5zLm5leHRUb2tlbigpKTsKLSAgICAgIHcud3JpdGUoIlwiKSkuZ2V0Iik7Ci0gICAgICB3LndyaXRlKG1hbmdsZUNsYXNzTmFtZShwb3J0VG9rZW5zLm5leHRUb2tlbigpKSk7Ci0gICAgICB3LndyaXRlKCIoKTsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgifSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiZWxzZSB7Iik7Ci0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICBzZXJ2aWNlVG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZXJ2aWNlc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICBwb3J0VG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihwb3J0c18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICAqLwotICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIHNlaU5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShnZXRDbGFzc05hbWUoc3QubmV4dFRva2VuKCkpKTsKLSAgICAgIHcud3JpdGUoc2VpTmFtZSk7Ci0gICAgICB3LndyaXRlKCIgPSAobmV3ICIpOwotICAgICAgdy53cml0ZShzZXJ2aWNlVG9rZW5zLm5leHRUb2tlbigpKTsKLSAgICAgIHcud3JpdGUoIkxvY2F0b3IoKSkuZ2V0Iik7Ci0gICAgICB3LndyaXRlKHBvcnRUb2tlbnMubmV4dFRva2VuKCkpOwotICAgICAgdy53cml0ZSgiKCk7Iik7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgiaWYgKCIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIiAhPSBudWxsKSB7Iik7Ci0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJpZiAoX2VuZHBvaW50ICE9IG51bGwpIik7Ci0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCIoKGphdmF4LnhtbC5ycGMuU3R1YikiKTsKLSAgICAgIHcud3JpdGUoc2VpTmFtZSk7Ci0gICAgICB3LndyaXRlKCIpLl9zZXRQcm9wZXJ0eShcImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzXCIsIF9lbmRwb2ludCk7Iik7Ci0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJlbHNlIik7Ci0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJfZW5kcG9pbnQgPSAoU3RyaW5nKSgoamF2YXgueG1sLnJwYy5TdHViKSIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIikuX2dldFByb3BlcnR5KFwiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3NcIik7Iik7Ci0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoIn0iKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgfQotICAgIC8qCi0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgKi8KLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIC8qCi0gICAgdy53cml0ZSgiY2F0Y2ggKGphdmF4Lm5hbWluZy5OYW1pbmdFeGNlcHRpb24gbmFtaW5nRXhjZXB0aW9uKSB7fSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgKi8KLSAgICB3LndyaXRlKCJjYXRjaCAoamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHNlcnZpY2VFeGNlcHRpb24pIHt9Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZVNldFByb3BlcnR5RW5kcG9pbnQoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZWlzXy50b1N0cmluZygpLCAiOyIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIHNlaU5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShnZXRDbGFzc05hbWUoc3QubmV4dFRva2VuKCkpKTsKLSAgICAgIHcud3JpdGUoImlmICgiKTsKLSAgICAgIHcud3JpdGUoc2VpTmFtZSk7Ci0gICAgICB3LndyaXRlKCIgIT0gbnVsbCkiKTsKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoIigoamF2YXgueG1sLnJwYy5TdHViKSIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIikuX3NldFByb3BlcnR5KFwiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3NcIiwgX2VuZHBvaW50KTsiKTsKLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gIH0KLQotIAotICBwcml2YXRlIHZvaWQgd3JpdGVTRUlHZXR0ZXJzKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzZWkgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIFN0cmluZyBzZWlDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUoc2VpKTsKLSAgICAgIFN0cmluZyBzZWlGaWVsZE5hbWUgPSBmaXJzdENoYXJUb0xvd2VyQ2FzZShzZWlDbGFzc05hbWUpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoInB1YmxpYyAiKTsKLSAgICAgIHcud3JpdGUoc2VpKTsKLSAgICAgIHcud3JpdGUoIiBnZXQiKTsKLSAgICAgIHcud3JpdGUoc2VpQ2xhc3NOYW1lKTsKLSAgICAgIHcud3JpdGUoIigpIHsiKTsKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoImlmICgiKTsKLSAgICAgIHcud3JpdGUoc2VpRmllbGROYW1lKTsKLSAgICAgIHcud3JpdGUoIiA9PSBudWxsKSIpOwotICAgICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgiX2luaXQiKTsKLSAgICAgIHcud3JpdGUoY2xhc3NfKTsKLSAgICAgIHcud3JpdGUoIigpOyIpOwotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgicmV0dXJuICIpOwotICAgICAgdy53cml0ZShzZWlGaWVsZE5hbWUpOwotICAgICAgdy53cml0ZSgiOyIpOwotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgifSIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVTRUlNZXRob2RzKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLSAgewotICAgIG5ld0xpbmUodyk7Ci0gICAgLy9XZWJTZXJ2aWNlRWxlbWVudCB3c2UgPSBXZWJTZXJ2aWNlRWxlbWVudC5nZXRXZWJTZXJ2aWNlRWxlbWVudChtb2RlbF8pOwotICAgIGlmIChjbGllbnRQcm9qZWN0XyA9PSBudWxsKSByZXR1cm47Ly93c2UuZ2V0UHJveHlQcm9qZWN0KCk7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZWlzXy50b1N0cmluZygpLCAiOyIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIHNlaSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IEphdmFNT0ZVdGlscy5nZXRKYXZhQ2xhc3MoZ2V0UGFja2FnZU5hbWUoc2VpKSwgZ2V0Q2xhc3NOYW1lKHNlaSksIGNsaWVudFByb2plY3RfKTsKLSAgICAgIGlmIChqYXZhQ2xhc3MgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBtZXRob2RzID0gamF2YUNsYXNzLmdldE1ldGhvZHMoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1ldGhvZHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIE1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKWl0Lm5leHQoKTsKLSAgICAgICAgICBpZiAoIW1ldGhvZC5pc0NvbnN0cnVjdG9yKCkgJiYgIW1ldGhvZC5pc05hdGl2ZSgpICYmIG1ldGhvZC5nZXRKYXZhVmlzaWJpbGl0eSgpLmdldFZhbHVlKCkgPT0gSmF2YVZpc2liaWxpdHlLaW5kLlBVQkxJQykKLSAgICAgICAgICAgIHdyaXRlU0VJTWV0aG9kcyh3LCBqYXZhQ2xhc3MsIG1ldGhvZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVTRUlNZXRob2RzKFdyaXRlciB3LCBKYXZhQ2xhc3MgamF2YUNsYXNzLCBNZXRob2QgbWV0aG9kKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHcud3JpdGUoInB1YmxpYyAiKTsKLSAgICAvLyBpc1ZvaWQKLSAgICBpZiAobWV0aG9kLmlzVm9pZCgpKQotICAgICAgdy53cml0ZSgidm9pZCAiKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgdy53cml0ZShnZXRGdWxseVF1YWxpZmllZE5hbWUobWV0aG9kLmdldFJldHVyblR5cGUoKSkpOwotICAgICAgdy53cml0ZSgiICIpOwotICAgIH0KLSAgICAvLyBtZXRob2QgbmFtZQotICAgIHcud3JpdGUobWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgdy53cml0ZSgiKCIpOwotICAgIC8vIGlucHV0IHBhcmFtZXRlcnMKLSAgICBKYXZhUGFyYW1ldGVyW10gaW5wdXRQYXJhbXMgPSBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dFBhcmFtcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaSA+IDApCi0gICAgICAgIHcud3JpdGUoIiwgIik7Ci0gICAgICBKYXZhSGVscGVycyBqYXZhSGVscGVycyA9IGlucHV0UGFyYW1zW2ldLmdldEphdmFUeXBlKCk7Ci0gICAgICB3LndyaXRlKGdldEZ1bGx5UXVhbGlmaWVkTmFtZShqYXZhSGVscGVycykpOwotICAgICAgdy53cml0ZSgiICIpOwotICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9IGdldENsYXNzTmFtZShpbnB1dFBhcmFtc1tpXS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgICAgdy53cml0ZShnZXRVbnVzZWROYW1lKHBhcmFtTmFtZSkpOwotICAgIH0KLSAgICB3LndyaXRlKCIpIik7Ci0gICAgLy8gZXhjZXB0aW9ucwotICAgIExpc3QgZXhjZXB0aW9ucyA9IG1ldGhvZC5nZXRKYXZhRXhjZXB0aW9ucygpOwotICAgIGlmICghZXhjZXB0aW9ucy5pc0VtcHR5KCkpCi0gICAgICB3LndyaXRlKCIgdGhyb3dzICIpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBleGNlcHRpb25zLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgSmF2YUNsYXNzIGV4Y2VwdGlvbiA9IChKYXZhQ2xhc3MpaXQubmV4dCgpOwotICAgICAgdy53cml0ZShleGNlcHRpb24uZ2V0UXVhbGlmaWVkTmFtZUZvclJlZmxlY3Rpb24oKSk7Ci0gICAgICBpZiAoaXQuaGFzTmV4dCgpKQotICAgICAgICB3LndyaXRlKCIsICIpOwotICAgIH0KLSAgICAvLyBtZXRob2QgYm9keQotICAgIHcud3JpdGUoInsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIFN0cmluZyBzdHViTmFtZSA9IGZpcnN0Q2hhclRvTG93ZXJDYXNlKGphdmFDbGFzcy5nZXROYW1lKCkpOwotICAgIHcud3JpdGUoImlmICgiKTsKLSAgICB3LndyaXRlKHN0dWJOYW1lKTsKLSAgICB3LndyaXRlKCIgPT0gbnVsbCkiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIl9pbml0Iik7Ci0gICAgdy53cml0ZShjbGFzc18pOwotICAgIHcud3JpdGUoIigpOyIpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgaWYgKCFtZXRob2QuaXNWb2lkKCkpCi0gICAgICB3LndyaXRlKCJyZXR1cm4gIik7Ci0gICAgdy53cml0ZShzdHViTmFtZSk7Ci0gICAgdy53cml0ZSgiLiIpOwotICAgIHcud3JpdGUobWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgdy53cml0ZSgiKCIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRQYXJhbXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGkgPiAwKQotICAgICAgICB3LndyaXRlKCIsICIpOwotICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9IGdldENsYXNzTmFtZShpbnB1dFBhcmFtc1tpXS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgICAgdy53cml0ZShnZXRVbnVzZWROYW1lKHBhcmFtTmFtZSkpOwotICAgIH0KLSAgICB3LndyaXRlKCIpOyIpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgifSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgbmV3TGluZSh3KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZUdldFNldEVuZHBvaW50KFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgicHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpIHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoInJldHVybiBfZW5kcG9pbnQ7Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoInB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiX2VuZHBvaW50ID0gZW5kcG9pbnQ7Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3cml0ZVNldFByb3BlcnR5RW5kcG9pbnQodyk7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbmNyZW1lbnRJbmRlbnQoKQotICB7Ci0gICAgaW5kZW50Q291bnQrKzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkZWNyZW1lbnRJbmRlbnQoKQotICB7Ci0gICAgaW5kZW50Q291bnQtLTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbmRlbnQoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbmRlbnRDb3VudDsgaSsrKQotICAgICAgdy53cml0ZSgiICAiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBuZXdMaW5lKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHcud3JpdGUoTkVXX0xJTkUpOwotICAgIGluZGVudCh3KTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0VW51c2VkTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGlmICh1c2VkTmFtZXMuY29udGFpbnMobmFtZSkpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5ld05hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcihuYW1lKSkuYXBwZW5kKFN0cmluZy52YWx1ZU9mKGkpKS50b1N0cmluZygpOwotICAgICAgICBpZiAoIXVzZWROYW1lcy5jb250YWlucyhuZXdOYW1lKSkKLSAgICAgICAgICByZXR1cm4gbmV3TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svVmFsaWRhdGVXU0RMQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9WYWxpZGF0ZVdTRExDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxY2I5OTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9WYWxpZGF0ZVdTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLQotcHVibGljIGNsYXNzIFZhbGlkYXRlV1NETENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotCi0gIHB1YmxpYyBWYWxpZGF0ZVdTRExDb21tYW5kKCkKLSAgewotICB9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlpZiAod3NkbFVSSSAhPSBudWxsICYmIHdzZGxVUkkubGVuZ3RoKCkgPiAwKQotCQl7Ci0JCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKTsKLQkJCWlmIChkZWZpbml0aW9uICE9IG51bGwpCi0JCQl7Ci0JCQkJaW50IG51bVNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnNpemUoKTsKLQkJCQlpZiAobnVtU2VydmljZXMgPCAxKQotCQkJCXsKLQkJCQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XU0RMX0hBU19OT19TRVJWSUNFX0VMRU1FTlQsIG5ldyBPYmplY3RbXSB7d3NkbFVSSX0pLCBudWxsKTsKLQkJCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJCXJldHVybiBzdGF0dXM7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsVVJJIFRoZSB3c2RsVVJJIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9DbGFzc3BhdGhVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9DbGFzc3BhdGhVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzk0Yzc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3V0aWwvQ2xhc3NwYXRoVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDMgICAxMjY0MTgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFja2FnZUZyYWdtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucHJvamVjdC5KMkVFUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLkNvbXBvbmVudENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxSZXNvdXJjZTsKLQotcHVibGljIGNsYXNzIENsYXNzcGF0aFV0aWxzIHsKLQotCS8vCUNvcHlyaWdodAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAzLiI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIENsYXNzcGF0aFV0aWxzIGluc3RhbmNlXzsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBET1RfSkFSID0gIi5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEpBUiA9ICJqYXIiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFdFQklORl9MSUIgPSAiL1dFQi1JTkYvbGliIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBDbGFzc3BhdGhVdGlscygpIHsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIENsYXNzcGF0aFV0aWxzIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpCi0JCQlpbnN0YW5jZV8gPSBuZXcgQ2xhc3NwYXRoVXRpbHMoKTsKLQkJcmV0dXJuIGluc3RhbmNlXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRDbGFzc3BhdGhTdHJpbmcoSVByb2plY3QgcHJvamVjdCkgewotCQlTdHJpbmdCdWZmZXIgY2xhc3NwYXRoID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlTdHJpbmdbXSBjbGFzc3BhdGhFbnRyaWVzID0gZ2V0Q2xhc3NwYXRoKHByb2plY3QsIGZhbHNlKTsKLQotCQlWZWN0b3IgY2xhc3NwYXRoVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzcGF0aEVudHJpZXMubGVuZ3RoOyBpKyspIHsKLQkJCWlmICghY2xhc3NwYXRoVmVjdG9yLmNvbnRhaW5zKGNsYXNzcGF0aEVudHJpZXNbaV0pKSB7Ci0JCQkJY2xhc3NwYXRoVmVjdG9yLmFkZChjbGFzc3BhdGhFbnRyaWVzW2ldKTsKLQkJCQljbGFzc3BhdGguYXBwZW5kKGNsYXNzcGF0aEVudHJpZXNbaV0pOwotCQkJCWNsYXNzcGF0aC5hcHBlbmQoIjsiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0JCXJldHVybiBjbGFzc3BhdGgudG9TdHJpbmcoKTsKLQl9Ci0KLQkJCi0JcHJpdmF0ZSBTdHJpbmdbXSBnZXRDbGFzc3BhdGgoSVByb2plY3QgcHJvamVjdCwgYm9vbGVhbiBpc0RlcGVuZGVudCkgewotCQlTdHJpbmdbXSBtb2R1bGVDbGFzc3BhdGggPSBuZXcgU3RyaW5nWzBdOwotCQlBcnJheUxpc3QgcHJvamVjdENsYXNzcGF0aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYm9vbGVhbiBuZWVkSmF2YUNsYXNzcGF0aCA9IGZhbHNlOwotCQkKLQkJSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQlpZiAoY29tcCAhPSBudWxsKSB7Ci0JCQkvLyBnZXQgdGhlIG1vZHVsZSdzIGNsYXNzcGF0aAotCQkJCi0JCQlpZiAoSjJFRVV0aWxzLmlzRUFSQ29tcG9uZW50KGNvbXApKSB7Ci0JCQkJbW9kdWxlQ2xhc3NwYXRoID0gZ2V0Q2xhc3NwYXRoRm9yRUFSUHJvamVjdChwcm9qZWN0LCBjb21wLmdldE5hbWUoKSk7Ci0vLwkJCQkgYWRkIG1vZHVsZSBjbGFzc3BhdGggdG8gcHJvamVjdCBjbGFzc3BhdGgKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IG1vZHVsZUNsYXNzcGF0aC5sZW5ndGg7IGorKykgewotCQkJCQlwcm9qZWN0Q2xhc3NwYXRoLmFkZChtb2R1bGVDbGFzc3BhdGhbal0pOwotCQkJCX0KLQkJCX0gZWxzZSBpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KGNvbXApIHx8IEoyRUVVdGlscy5pc0phdmFDb21wb25lbnQoY29tcCkpIHsKLQkJCQluZWVkSmF2YUNsYXNzcGF0aCA9IHRydWU7Ci0JCQkJCi0JCQkJSUNvbnRhaW5lciBvdXRwdXRDb250YWluZXIgPSBudWxsOwotCQkJCUlSZXNvdXJjZSBmcmFnbWVudFJvb3QgPSBudWxsOwotCQkJCUlQYWNrYWdlRnJhZ21lbnRSb290W10gcGtnRnJhZ21lbnRSb290ID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhUGFja2FnZUZyYWdtZW50Um9vdHMocHJvamVjdCk7Ci0JCQkJQXJyYXlMaXN0IHdlYk1vZHVsZUNsYXNzcGF0aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQl0cnkgewotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHBrZ0ZyYWdtZW50Um9vdC5sZW5ndGg7IGkrKykgewotCQkJCQkJZnJhZ21lbnRSb290ID0gcGtnRnJhZ21lbnRSb290W2ldLmdldENvcnJlc3BvbmRpbmdSZXNvdXJjZSgpOwotCQkJCQkJaWYgKGZyYWdtZW50Um9vdCAhPSBudWxsCi0JCQkJCQkJCSYmIChmcmFnbWVudFJvb3QuZ2V0UHJvamVjdCgpLmVxdWFscyhwcm9qZWN0KSkKLQkJCQkJCQkJJiYgKGZyYWdtZW50Um9vdC5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpKSB7CQkJCQkKLQkJCQkJCQlvdXRwdXRDb250YWluZXIgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRPdXRwdXRDb250YWluZXIocHJvamVjdCwgcGtnRnJhZ21lbnRSb290W2ldKTsKLQkJCQkJCQlpZiAob3V0cHV0Q29udGFpbmVyICE9IG51bGwpIHsgCi0JCQkJCQkJCXdlYk1vZHVsZUNsYXNzcGF0aC5hZGQob3V0cHV0Q29udGFpbmVyLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJCX0KLQkJCQkKLQkJCQkvLyBhZGQgV2ViIG1vZHVsZSBjbGFzc3BhdGggdG8gcHJvamVjdCBjbGFzc3BhdGgKLQkJCQlJdGVyYXRvciBpdGVyID0gd2ViTW9kdWxlQ2xhc3NwYXRoLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJCXByb2plY3RDbGFzc3BhdGguYWRkKChTdHJpbmcpIGl0ZXIubmV4dCgpKTsKLQkJCQl9CQkKLQkJCX0KLQkJCQotCQkJaWYgKCFpc0RlcGVuZGVudCkgewotCQkJCWlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoY29tcCkpIHsKLQkJCQkJbmVlZEphdmFDbGFzc3BhdGggPSB0cnVlOwotCQkJCQltb2R1bGVDbGFzc3BhdGggPSBnZXRXRUJJTkZMaWIocHJvamVjdCk7Ci0JCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbW9kdWxlQ2xhc3NwYXRoLmxlbmd0aDsgaisrKSB7Ci0JCQkJCQlwcm9qZWN0Q2xhc3NwYXRoLmFkZChtb2R1bGVDbGFzc3BhdGhbal0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJCi0JCX0gZWxzZSB7Ci0JCQluZWVkSmF2YUNsYXNzcGF0aCA9IHRydWU7Ci0JCX0KLQkJCi0JCS8vIElmIHRoZXJlIGFyZSBXZWIgb3IgSmF2YSBtb2R1bGUgaW4gdGhlIHByb2plY3QsIGdldCB0aGUgcHJvamVjdCdzIEphdmEgY2xhc3NwYXRoCi0JCWlmIChuZWVkSmF2YUNsYXNzcGF0aCkgewotCQkJU3RyaW5nW10gamF2YUNsYXNzcGF0aDsKLQkJCXRyeSB7Ci0JCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qID0gKElKYXZhUHJvamVjdCkgcHJvamVjdC5nZXROYXR1cmUoSmF2YUNvcmUuTkFUVVJFX0lEKTsKLQkJCQlpZiAoamF2YVByb2ogIT0gbnVsbCkgewotCQkJCQlqYXZhQ2xhc3NwYXRoID0gZ2V0Q2xhc3NwYXRoRm9ySmF2YVByb2plY3QoamF2YVByb2opOwotCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGphdmFDbGFzc3BhdGgubGVuZ3RoOyBqKyspIHsKLQkJCQkJCXByb2plY3RDbGFzc3BhdGguYWRkKGphdmFDbGFzc3BhdGhbal0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gbm90IGFibGUgdG8gZ2V0IEphdmEgY2xhc3NwYXRoLCBqdXN0IGlnbm9yZQotCQkJfQkKLQkJfQotCQkKLQkJcmV0dXJuIChTdHJpbmdbXSkgcHJvamVjdENsYXNzcGF0aC50b0FycmF5KG5ldyBTdHJpbmdbcHJvamVjdENsYXNzcGF0aC5zaXplKCldKTsKLQl9Ci0KLQkvLyBOZWVkIHRvIGdldCBhbGwgbW9kdWxlcyBpbiB0aGUgcHJvamVjdC4gSWYgdGhlcmUncyBhIEVBUiBtb2R1bGUsIGdldCB0aGUgdXRpbGl0eSBKQVJzIAotCXByaXZhdGUgU3RyaW5nW10gZ2V0VXRpbGl0eUphckNsYXNzcGF0aChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVN0cmluZ1tdIHV0aWxpdHlKYXJTdHJpbmcgPSBuZXcgU3RyaW5nWzBdOwotCQlTdHJpbmdbXSBtb2R1bGVDbGFzc3BhdGggPSBuZXcgU3RyaW5nWzBdOwotCQlBcnJheUxpc3QgdXRpbGl0eUphcnNDbGFzc3BhdGggPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlTdHJpbmcgbW9kdWxlOwotCQlJVmlydHVhbENvbXBvbmVudCBjb21wID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCWlmIChjb21wICE9IG51bGwpIHsKLQkJCW1vZHVsZSA9IGNvbXAuZ2V0TmFtZSgpOwotCQkJaWYgKEoyRUVVdGlscy5pc0VBUkNvbXBvbmVudChjb21wKSkgewotCQkJCW1vZHVsZUNsYXNzcGF0aCA9IGdldENsYXNzcGF0aEZvckVBUlByb2plY3QocHJvamVjdCwgbW9kdWxlKTsKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IG1vZHVsZUNsYXNzcGF0aC5sZW5ndGg7IGorKykgewotCQkJCQl1dGlsaXR5SmFyc0NsYXNzcGF0aC5hZGQobW9kdWxlQ2xhc3NwYXRoW2pdKTsKLQkJCQl9Ci0JCQkJdXRpbGl0eUphclN0cmluZyA9IChTdHJpbmdbXSkgdXRpbGl0eUphcnNDbGFzc3BhdGgudG9BcnJheShuZXcgU3RyaW5nW3V0aWxpdHlKYXJzQ2xhc3NwYXRoLnNpemUoKV0pOwotCQkJfQotCQl9IAotCi0JCXJldHVybiB1dGlsaXR5SmFyU3RyaW5nOwotCX0KLQkKLQlwcml2YXRlIFN0cmluZ1tdIGdldENsYXNzcGF0aEZvckVBUlByb2plY3QoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIG1vZHVsZSkgewotCQlJUGF0aCBwcm9qZWN0UGF0aCA9Ci0JCQlwcm9qZWN0LmdldFByb2plY3QoKS5nZXRMb2NhdGlvbigpLmFkZFRyYWlsaW5nU2VwYXJhdG9yKCkuYXBwZW5kKG1vZHVsZSkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKTsKLQkJcmV0dXJuIGdldERpcmVjdG9yeUphckZpbGVzKHByb2plY3RQYXRoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGdldERpcmVjdG9yeUphckZpbGVzKElQYXRoIGlQYXRoKSB7Ci0JCUZpbGUgZGlyID0gaVBhdGgudG9GaWxlKCk7Ci0JCVZlY3RvciBqYXJzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCQlpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQlTdHJpbmdbXSBmaWxlbmFtZXMgPSBkaXIubGlzdCgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlbmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAoZmlsZW5hbWVzW2ldLmVuZHNXaXRoKERPVF9KQVIpKQotCQkJCQlqYXJzVmVjdG9yLmFkZChwYXRoMlN0cmluZyhpUGF0aCkgKyBmaWxlbmFtZXNbaV0pOwotCQkJfQotCQl9Ci0JCVN0cmluZ1tdIGphcnMgPSBuZXcgU3RyaW5nW2phcnNWZWN0b3Iuc2l6ZSgpXTsKLQkJamFyc1ZlY3Rvci5jb3B5SW50byhqYXJzKTsKLQkJcmV0dXJuIGphcnM7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdbXSBnZXRXRUJJTkZMaWIoSVByb2plY3QgcHJvamVjdCkgewotCQlTdHJpbmdbXSB3ZWJpbmZMaWJKYXJzID0gbmV3IFN0cmluZ1swXTsKLQkJQXJyYXlMaXN0IGFuQXJyYXlMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnkgewkJCQotCQkJCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCQkJaWYgKGNvbXBvbmVudCAhPSBudWxsKSB7Ci0JCQkJCQkKLQkJCQkJCUlWaXJ0dWFsRm9sZGVyIHdlYkluZkxpYiA9IGNvbXBvbmVudC5nZXRSb290Rm9sZGVyKCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKAotCQkJCQkJCQlXRUJJTkZfTElCKSk7Ci0JCQkJCQlpZiAod2ViSW5mTGliICE9IG51bGwpIHsKLQkJCQkJCQlJVmlydHVhbFJlc291cmNlW10gcmVzb3VyY2VzID0gd2ViSW5mTGliLm1lbWJlcnMoKTsKLQkJCQkJCQlJUmVzb3VyY2UgYVJlc291cmNlID0gbnVsbDsKLQkJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHJlc291cmNlcy5sZW5ndGg7IGkrKykgewotCQkJCQkJCQlhUmVzb3VyY2UgPSByZXNvdXJjZXNbaV0uZ2V0VW5kZXJseWluZ1Jlc291cmNlKCk7Ci0JCQkJCQkJCWlmIChKQVIuZXF1YWxzSWdub3JlQ2FzZShhUmVzb3VyY2UuZ2V0RmlsZUV4dGVuc2lvbigpKSkKLQkJCQkJCQkJCWFuQXJyYXlMaXN0LmFkZCggYVJlc291cmNlLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJCQl9Ci0JCQkJCQkJaWYgKGFuQXJyYXlMaXN0LnNpemUoKSAhPSAwKQotCQkJCQkJCQl3ZWJpbmZMaWJKYXJzID0gKFN0cmluZ1tdKSBhbkFycmF5TGlzdC50b0FycmF5KG5ldyBTdHJpbmdbYW5BcnJheUxpc3Quc2l6ZSgpXSk7Ci0JCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJfQotCQlyZXR1cm4gd2ViaW5mTGliSmFyczsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGdldENsYXNzcGF0aEZvckphdmFQcm9qZWN0KElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCkgewotCQlBcnJheUxpc3QgcHJvamVjdENsYXNzcGF0aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQkJCUlDbGFzc3BhdGhFbnRyeVtdIGJ1aWxkUGF0aCA9Ci0JCQkJamF2YVByb2plY3QuZ2V0UmVzb2x2ZWRDbGFzc3BhdGgodHJ1ZSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGJ1aWxkUGF0aC5sZW5ndGg7IGkrKykgewotCQkJCVN0cmluZ1tdIGJ1aWxkUGF0aFN0cmluZyA9Ci0JCQkJCWNsYXNzcGF0aEVudHJ5MlN0cmluZygKLQkJCQkJCWJ1aWxkUGF0aFtpXSwKLQkJCQkJCWphdmFQcm9qZWN0LmdldFByb2plY3QoKSk7Ci0JCQkJZm9yIChpbnQgaiA9IDA7IGogPCBidWlsZFBhdGhTdHJpbmcubGVuZ3RoOyBqKyspIHsKLQkJCQkJcHJvamVjdENsYXNzcGF0aC5hZGQoYnVpbGRQYXRoU3RyaW5nW2pdKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBqbWUpIHsKLQkJfQotCi0JCVN0cmluZ1tdIHV0aWxpdHlKYXJzQ2xhc3NwYXRoOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gamF2YVByb2plY3QuZ2V0UHJvamVjdCgpOwotCQlJUHJvamVjdFtdIHJlZmVyZW5jaW5nUHJvamVjdHMgPSBwcm9qZWN0LmdldFJlZmVyZW5jaW5nUHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWZlcmVuY2luZ1Byb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQl1dGlsaXR5SmFyc0NsYXNzcGF0aCA9IGdldFV0aWxpdHlKYXJDbGFzc3BhdGgocmVmZXJlbmNpbmdQcm9qZWN0c1tpXSk7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IHV0aWxpdHlKYXJzQ2xhc3NwYXRoLmxlbmd0aDsgaisrKSB7Ci0JCQkJcHJvamVjdENsYXNzcGF0aC5hZGQodXRpbGl0eUphcnNDbGFzc3BhdGhbal0pOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIChTdHJpbmdbXSkgcHJvamVjdENsYXNzcGF0aC50b0FycmF5KG5ldyBTdHJpbmdbcHJvamVjdENsYXNzcGF0aC5zaXplKCldKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGNsYXNzcGF0aEVudHJ5MlN0cmluZygKLQkJSUNsYXNzcGF0aEVudHJ5IGVudHJ5LAotCQlJUHJvamVjdCBwcm9qZWN0KSAKLQl7Ci0JCXN3aXRjaCAoZW50cnkuZ2V0RW50cnlLaW5kKCkpIHsKLQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9MSUJSQVJZIDoKLQkJCXsKLQkJCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsgcGF0aDJTdHJpbmcoZW50cnkuZ2V0UGF0aCgpKX07CQotCQkJfQotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1BST0pFQ1QgOgotCQkJewkJCQotCQkJCXJldHVybiBnZXRDbGFzc3BhdGgoCi0JCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCgKLQkJCQkJCWVudHJ5LmdldFBhdGgoKS5sYXN0U2VnbWVudCgpKSwgdHJ1ZSk7Ci0JCQl9Ci0JCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfU09VUkNFIDoKLQkJCQl7Ci0JCQkJCUlQYXRoIHBhdGggPSBlbnRyeS5nZXRQYXRoKCk7Ci0JCQkJCWlmIChwYXRoLnNlZ21lbnQoMCkuZXF1YWxzKHByb2plY3QuZ2V0TmFtZSgpKSkKLQkJCQkJCXBhdGggPSBwYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMoMSk7Ci0JCQkJCXJldHVybiBuZXcgU3RyaW5nW10gewotCQkJCQkJcGF0aDJTdHJpbmcoCi0JCQkJCQkJcHJvamVjdAotCQkJCQkJCQkuZ2V0TG9jYXRpb24oKQotCQkJCQkJCQkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKQotCQkJCQkJCQkuYXBwZW5kKAotCQkJCQkJCQlwYXRoKSl9OwotCQkJCX0KLQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9WQVJJQUJMRSA6Ci0JCQl7Ci0JCQkJcmV0dXJuIGNsYXNzcGF0aEVudHJ5MlN0cmluZygKLQkJCQkJSmF2YUNvcmUuZ2V0UmVzb2x2ZWRDbGFzc3BhdGhFbnRyeShlbnRyeSksCi0JCQkJCXByb2plY3QpOwotCQkJfQotCQkJZGVmYXVsdCA6Ci0JCQl7Ci0JCQkJcmV0dXJuIG5ldyBTdHJpbmdbXSB7IHBhdGgyU3RyaW5nKGVudHJ5LmdldFBhdGgoKSl9OwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgcGF0aDJTdHJpbmcoSVBhdGggcGF0aCkgewotCQlyZXR1cm4gcGF0aC50b09TU3RyaW5nKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9GaWxlVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmRiYjhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3V0aWwvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci0KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbAotewotICBwdWJsaWMgRmlsZVV0aWwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RmlsZShTdHJpbmcgc3JjLCBTdHJpbmcgZGVzdCkKLSAgewotICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKLSAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG51bGw7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNyYyk7Ci0gICAgICBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShkZXN0KTsKLSAgICAgIGludCBjID0gMDsKLSAgICAgIGJ5dGVbXSBhcnJheSA9IG5ldyBieXRlWzEwMjRdOwotICAgICAgd2hpbGUgKChjID0gaXMucmVhZChhcnJheSkpID49IDApCi0gICAgICB7Ci0gICAgICAgIGZvcy53cml0ZShhcnJheSwgMCwgYyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZm9zLmNsb3NlKCk7Ci0gICAgICAgIGlzLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBGaWxlIGNyZWF0ZUZpbGVBbmRQYXJlbnREaXJlY3RvcmllcyhTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVOYW1lKTsKLSAgICBGaWxlIHBhcmVudCA9IGZpbGUuZ2V0UGFyZW50RmlsZSgpOwotICAgIGlmICghcGFyZW50LmV4aXN0cygpKQotICAgIHsKLSAgICAgIHBhcmVudC5ta2RpcnMoKTsKLSAgICB9Ci0gICAgZmlsZS5jcmVhdGVOZXdGaWxlKCk7Ci0gICAgcmV0dXJuIGZpbGU7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgZGVsZXRlRGlyZWN0b3JpZXMoRmlsZSBkaXIpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIEZpbGVbXSBjaGlsZHJlbiA9IGRpci5saXN0RmlsZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChjaGlsZHJlbltpXS5saXN0KCkgIT0gbnVsbCAmJiBjaGlsZHJlbltpXS5saXN0KCkubGVuZ3RoID4gMCkKLSAgICAgIHsKLSAgICAgICAgZGVsZXRlRGlyZWN0b3JpZXMoY2hpbGRyZW5baV0pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBjaGlsZHJlbltpXS5kZWxldGUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZGlyLmRlbGV0ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBmb2xkZXIgYW5kIGFsbCBwYXJlbnQgZm9sZGVycyBpZiBub3QgZXhpc3RpbmcgUHJvamVjdCBtdXN0IGV4aXN0Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlRm9sZGVyKElGb2xkZXIgZm9sZGVyLCBib29sZWFuIGZvcmNlLCBib29sZWFuIGxvY2FsKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKCFmb2xkZXIuZXhpc3RzKCkpCi0gICAgewotICAgICAgSUNvbnRhaW5lciBwYXJlbnQgPSBmb2xkZXIuZ2V0UGFyZW50KCk7Ci0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSUZvbGRlcikKLSAgICAgIHsKLSAgICAgICAgY3JlYXRlRm9sZGVyKChJRm9sZGVyKXBhcmVudCwgZm9yY2UsIGxvY2FsKTsKLSAgICAgIH0KLSAgICAgIGZvbGRlci5jcmVhdGUoZm9yY2UsIGxvY2FsLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlVGFyZ2V0RmlsZShTdHJpbmcgc291cmNlRmlsZU5hbWUsIFN0cmluZyB0YXJnZXRGaWxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgY3JlYXRlVGFyZ2V0RmlsZShzb3VyY2VGaWxlTmFtZSwgdGFyZ2V0RmlsZU5hbWUsIGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGVUYXJnZXRGaWxlKFN0cmluZyBzb3VyY2VGaWxlTmFtZSwgU3RyaW5nIHRhcmdldEZpbGVOYW1lLCBib29sZWFuIG92ZXJ3cml0ZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZSBpZGVhbFJlc3VsdEZpbGUgPSBuZXcgRmlsZSh0YXJnZXRGaWxlTmFtZSk7Ci0gICAgaWYgKG92ZXJ3cml0ZSB8fCAhaWRlYWxSZXN1bHRGaWxlLmV4aXN0cygpKQotICAgIHsKLSAgICAgIEZpbGVVdGlsLmNyZWF0ZUZpbGVBbmRQYXJlbnREaXJlY3Rvcmllcyh0YXJnZXRGaWxlTmFtZSk7Ci0gICAgICBGaWxlVXRpbC5jb3B5RmlsZShzb3VyY2VGaWxlTmFtZSwgdGFyZ2V0RmlsZU5hbWUpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9QbGF0Zm9ybVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL1BsYXRmb3JtVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFmMGUzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL1BsYXRmb3JtVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbDsKLQotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLXB1YmxpYyBjbGFzcyBQbGF0Zm9ybVV0aWxzIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMQVRGT1JNX1JPT1QgPSAicGxhdGZvcm06L3Jlc291cmNlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSU5fRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExOWF9GSUxFX1BST1RPQ09MID0gImZpbGU6Ly8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMQVRGT1JNID0gInBsYXRmb3JtIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNPVVJDRSA9ICIvcmVzb3VyY2UiOwotCi0JcHJpdmF0ZSBQbGF0Zm9ybVV0aWxzKCkgewotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHBsYXRmb3JtIFVSTCBnaXZlbiBhbiBJUGF0aAotCSogQHBhcmFtIElQYXRoIHBhdGgKLQkqIEByZXR1cm4gU3RyaW5nIHBsYXRmb3JtVVJMCi0JKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQbGF0Zm9ybVVSTChJUGF0aCBwYXRoKSB7Ci0JCVN0cmluZyBwbGF0Zm9ybVVSTDsKLQkJcGxhdGZvcm1VUkwgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShwYXRoLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7Ci0JCS8vIG9sZCBtZXRob2Q6IGZpbGUgc3lzdGVtIHJlcHJlc2VudGF0aW9uCi0JCS8vIAlwbGF0Zm9ybVVSTCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCXJldHVybiBwbGF0Zm9ybVVSTDsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgdGhlIFVSTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgUGxhdGZvcm0gVVJMIGdpdmVuIGFuIElQYXRoCi0JKiBUaGUgUGxhdGZvcm1SZXNvdXJjZU1hbmFnZXIgdW5kZXJkc3RhbmRzIHRoaXMgZm9ybWF0IGFuZCB0aGVyZWZvcmUKLQkqIHRoaXMgaXMgc3VpdGVkIGZvciBjb21tYW5kIFVSTCdzCi0JKiBAcGFyYW0gSVBhdGggcGF0aAotCSogQHJldHVybiBVUkwgUGxhdGZvcm0gVVJMCi0JKi8KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRDb21tYW5kUGxhdGZvcm1VUkwoSVBhdGggcGF0aCkgewotCQlVUkwgdXJsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXVybCA9IG5ldyBVUkwoUExBVEZPUk0sIG51bGwsIFJFU09VUkNFICsgcGF0aC50b1N0cmluZygpKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiB1cmw7Ci0JCX0KLQkJcmV0dXJuIHVybDsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBwYXRoIGdpdmVuIHBsYXRmb3JtIFVSTCBzdHJpbmcKLQkqIEBwYXJhbSBTdHJpbmcgcGxhdGZvcm0gVVJMIHN0cmluZwotCSogQHJldHVybiBTdHJpbmcgcGF0aCBzdHJpbmcKLQkqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhdGhGcm9tUGxhdGZvcm0oU3RyaW5nIHBsYXRmb3JtU3RyKSB7Ci0JCVN0cmluZyBwYXRoU3RyID0gcGxhdGZvcm1TdHI7Ci0KLQkJU3RyaW5nIHJvb3RMb2NhdGlvbjsKLQkJcm9vdExvY2F0aW9uID0gUExBVEZPUk1fUk9PVDsKLQkJLy8gb2xkIG1ldGhvZDogZmlsZSBzeXN0ZW0gcmVwcmVzZW50YXRpb24KLQkJLy8Jcm9vdExvY2F0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCWlmIChwbGF0Zm9ybVN0ci5zdGFydHNXaXRoKHJvb3RMb2NhdGlvbikpCi0JCQlwYXRoU3RyID0gcGxhdGZvcm1TdHIuc3Vic3RyaW5nKHJvb3RMb2NhdGlvbi5sZW5ndGgoKSk7Ci0JCXJldHVybiBwYXRoU3RyOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHBsYXRmb3JtIFVSTCBnaXZlbiB0aGUgcGF0aCBzdHJpbmcKLQkqIEBwYXJhbSBTdHJpbmcgcGF0aCBzdHJpbmcKLQkqIEByZXR1cm4gU3RyaW5nIHBsYXRmb3JtIFVSTCBzdHJpbmcKLQkqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBsYXRmb3JtRnJvbVBhdGgoU3RyaW5nIHBhdGhTdHIpIHsKLQkJU3RyaW5nIHBsYXRmb3JtU3RyID0gcGF0aFN0cjsKLQotCQlTdHJpbmcgcm9vdExvY2F0aW9uOwotCQlyb290TG9jYXRpb24gPSBQTEFURk9STV9ST09UOwotCQkvLyBvbGQgbWV0aG9kOiBmaWxlIHN5c3RlbSByZXByZXNlbnRhdGlvbgotCQkvLwlyb290TG9jYXRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJcGxhdGZvcm1TdHIgPSByb290TG9jYXRpb24gKyBwYXRoU3RyOwotCQlyZXR1cm4gcGxhdGZvcm1TdHI7Ci0JfQotCi0JLyoqCi0JKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxvY2FsIGZpbGUgc3lzdGVtIGZpbGUgZ2l2ZW4gcGxhdGZvcm0gVVJMIHN0cmluZwotCSogQHBhcmFtIFN0cmluZyBwbGF0Zm9ybSBVUkwgc3RyaW5nCi0JKiBAcmV0dXJuIFN0cmluZyBmaWxlIHN0cmluZwotCSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RmlsZUZyb21QbGF0Zm9ybShTdHJpbmcgcGxhdGZvcm1TdHIpIHsKLQkJU3RyaW5nIGZpbGVTdHIgPSBwbGF0Zm9ybVN0cjsKLQkJU3RyaW5nIHBhdGhTdHIgPSBnZXRQYXRoRnJvbVBsYXRmb3JtKHBsYXRmb3JtU3RyKTsKLQotCQlmaWxlU3RyID0KLQkJCVJlc291cmNlc1BsdWdpbgotCQkJCS5nZXRXb3Jrc3BhY2UoKQotCQkJCS5nZXRSb290KCkKLQkJCQkuZ2V0RmlsZShuZXcgUGF0aChwYXRoU3RyKSkKLQkJCQkuZ2V0TG9jYXRpb24oKQotCQkJCS50b1N0cmluZygpOwotCi0JCS8vIG9sZCBtZXRob2Q6IGZpbGUgc3lzdGVtIHJlcHJlc2VudGF0aW9uCi0JCS8vCURvIG5vdGhpbmcKLQotCQlyZXR1cm4gZmlsZVN0cjsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgdGhlIGZpbGUgcHJvdG9jb2wgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxvY2FsIGZpbGUgc3lzdGVtIGZpbGUgZ2l2ZW4gcGxhdGZvcm0gVVJMIHN0cmluZwotCSogQHBhcmFtIFN0cmluZyBwbGF0Zm9ybSBVUkwgc3RyaW5nCi0JKiBAcmV0dXJuIFN0cmluZyB0aGUgZmlsZSBwcm90b2NvbCB1cmkKLQkqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpbGVVUkxGcm9tUGxhdGZvcm0oU3RyaW5nIHBsYXRmb3JtU3RyKSB7Ci0JCVN0cmluZyBmaWxlU3RyID0gcGxhdGZvcm1TdHI7Ci0JCVN0cmluZyBwYXRoU3RyID0gZ2V0UGF0aEZyb21QbGF0Zm9ybShwbGF0Zm9ybVN0cik7Ci0JCXRyeSB7Ci0JCQlmaWxlU3RyID0KLQkJCQlSZXNvdXJjZXNQbHVnaW4KLQkJCQkJLmdldFdvcmtzcGFjZSgpCi0JCQkJCS5nZXRSb290KCkKLQkJCQkJLmdldEZpbGUobmV3IFBhdGgocGF0aFN0cikpCi0JCQkJCS5nZXRMb2NhdGlvbigpCi0JCQkJCS50b0ZpbGUoKQotCQkJCQkudG9VUkwoKQotCQkJCQkudG9TdHJpbmcoKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKSB7Ci0JCQlmaWxlU3RyID0gZ2V0RmlsZVVSTEZyb21QYXRoKG5ldyBQYXRoKHBhdGhTdHIpKTsKLQkJfQotCQlyZXR1cm4gZmlsZVN0cjsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgdGhlIGZpbGUgcHJvdG9jb2wgcmVwcmVzZW50YXRpb24gb2YgYSBsb2NhbCBmaWxlCi0JKiBAcGFyYW0gSVBhdGggdGhlIFBhdGggb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZmlsZQotCSogQHJldHVybiBTdHJpbmcgdGhlIGZpbGUgcHJvdG9jb2wgdXJpCi0JKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaWxlVVJMRnJvbVBhdGgoSVBhdGggcGF0aCkgewotCi0JCVN0cmluZyBmaWxlID0gbnVsbDsKLQkJaWYgKHBhdGggIT0gbnVsbCkgewotCQkJaWYgKCFwYXRoLmlzQWJzb2x1dGUoKSkgewotCQkJCWZpbGUgPQotCQkJCQlSZXNvdXJjZXNQbHVnaW4KLQkJCQkJCS5nZXRXb3Jrc3BhY2UoKQotCQkJCQkJLmdldFJvb3QoKQotCQkJCQkJLmdldEZpbGUocGF0aCkKLQkJCQkJCS5nZXRMb2NhdGlvbigpCi0JCQkJCQkudG9TdHJpbmcoKTsKLQkJCQlpZiAoZmlsZS5jaGFyQXQoMCkgPT0gSVBhdGguU0VQQVJBVE9SKSB7Ci0JCQkJCWZpbGUgPSBMTlhfRklMRV9QUk9UT0NPTCArIGZpbGU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmlsZSA9IFdJTl9GSUxFX1BST1RPQ09MICsgZmlsZTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWZpbGUgPSBwYXRoLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCQlpZiAoZmlsZSAhPSBudWxsICYmIGZpbGUuY2hhckF0KDApID09IElQYXRoLlNFUEFSQVRPUikgewotCQkJCWZpbGUgPSBMTlhfRklMRV9QUk9UT0NPTCArIGZpbGU7Ci0JCQl9IGVsc2UgewotCQkJCWZpbGUgPSBXSU5fRklMRV9QUk9UT0NPTCArIGZpbGU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGUgPT0gbnVsbCA/IG51bGwgOiBmaWxlOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9XU0RMVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3V0aWwvV1NETFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYjM2NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9XU0RMVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy53c2RsLnRvSmF2YS5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5Db2xsYXRvcjsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotcHVibGljIGNsYXNzIFdTRExVdGlscyB7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERPVCA9ICIuIjsKLQotICAvKioKLSAgKiBUaGVzZSBhcmUgamF2YSBrZXl3b3JkcyBhcyBzcGVjaWZpZWQgYXQgdGhlIGZvbGxvd2luZyBVUkwgKHNvcnRlZCBhbHBoYWJldGljYWxseSkuCi0gICogaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2Jvb2tzL2pscy9zZWNvbmRfZWRpdGlvbi9odG1sL2xleGljYWwuZG9jLmh0bWwjMjI5MzA4Ci0gICogTm90ZSB0aGF0IGZhbHNlLCB0cnVlLCBhbmQgbnVsbCBhcmUgbm90IHN0cmljdGx5IGtleXdvcmRzOyB0aGV5IGFyZSBsaXRlcmFsIHZhbHVlcywKLSAgKiBidXQgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGFycmF5LCB0aGV5IGNhbiBiZSB0cmVhdGVkIGFzIGxpdGVyYWxzLgotICAqLwotICBzdGF0aWMgZmluYWwgU3RyaW5nIGtleXdvcmRzW10gPQotICB7Ci0gICAgICAiYWJzdHJhY3QiLCAgImJvb2xlYW4iLCAgICAgICJicmVhayIsICAgICAgImJ5dGUiLCAgICAgICJjYXNlIiwKLSAgICAgICJjYXRjaCIsICAgICAiY2hhciIsICAgICAgICAgImNsYXNzIiwgICAgICAiY29uc3QiLCAgICAgImNvbnRpbnVlIiwKLSAgICAgICJkZWZhdWx0IiwgICAiZG8iLCAgICAgICAgICAgImRvdWJsZSIsICAgICAiZWxzZSIsICAgICAgImV4dGVuZHMiLAotICAgICAgImZhbHNlIiwgICAgICJmaW5hbCIsICAgICAgICAiZmluYWxseSIsICAgICJmbG9hdCIsICAgICAiZm9yIiwKLSAgICAgICJnb3RvIiwgICAgICAiaWYiLCAgICAgICAgICAgImltcGxlbWVudHMiLCAiaW1wb3J0IiwgICAgImluc3RhbmNlb2YiLAotICAgICAgImludCIsICAgICAgICJpbnRlcmZhY2UiLCAgICAibG9uZyIsICAgICAgICJuYXRpdmUiLCAgICAibmV3IiwKLSAgICAgICJudWxsIiwgICAgICAicGFja2FnZSIsICAgICAgInByaXZhdGUiLCAgICAicHJvdGVjdGVkIiwgInB1YmxpYyIsCi0gICAgICAicmV0dXJuIiwgICAgInNob3J0IiwgICAgICAgICJzdGF0aWMiLCAgICAgInN0cmljdGZwIiwgICJzdXBlciIsCi0gICAgICAic3dpdGNoIiwgICAgInN5bmNocm9uaXplZCIsICJ0aGlzIiwgICAgICAgInRocm93IiwgICAgICJ0aHJvd3MiLAotICAgICAgInRyYW5zaWVudCIsICJ0cnVlIiwgICAgICAgICAidHJ5IiwgICAgICAgICJ2b2lkIiwgICAgICAidm9sYXRpbGUiLAotICAgICAgIndoaWxlIgotICB9OwotCi0gIC8qKiBDb2xsYXRvciBmb3IgY29tcGFyaW5nIHRoZSBzdHJpbmdzICovCi0gIHN0YXRpYyBmaW5hbCBDb2xsYXRvciBlbmdsaXNoQ29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShMb2NhbGUuRU5HTElTSCk7Ci0KLSAgLyoqIFVzZSB0aGlzIGNoYXJhY3RlciBhcyBzdWZmaXggKi8KLSAgc3RhdGljIGZpbmFsIGNoYXIga2V5d29yZFByZWZpeCA9ICdfJzsKLQotICBwcml2YXRlIFdTRExVdGlscygpIHsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IHNlcnZpY2UgZWxlbWVudCBpbiB0aGUgV1NETCBkZWZpbml0aW9uLgotICAqIEByZXR1cm4gU3RyaW5nIHNlcnZpY2UgZWxlbWVudCBuYW1lCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZpY2VFbGVtZW50TmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gIAlyZXR1cm4gc2VydmljZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcG9ydCB0eXBlIGVsZW1lbnQgcG9pbnRzIHRvIGJ5IHRoZSBmaXJzdCBzZXJ2aWNlIGFuZCBwb3J0IGVsZW1lbnQgaW4gdGhlIFdTREwgZGVmaW5pdGlvbi4KLSAgKiBAcmV0dXJuIFN0cmluZyBwb3J0IHR5cGUgZWxlbWVudCBuYW1lCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBvcnRUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgCi0gICAgd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKXsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8cG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCk7aSsrKSB7Ci0gICAgICAgIGlmIChwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmdldChpKSBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSB7Ci0gICAgICAgICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotICAgICAgICAgICByZXR1cm4gYmluZGluZy5nZXRQb3J0VHlwZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuICIiOwotICAKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBvcnQgZWxlbWVudCBpbiB0aGUgV1NETCBkZWZpbml0aW9uLgotICAqIEByZXR1cm4gU3RyaW5nIHBvcnQgbmFtZQotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQb3J0TmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgCi0gICAgd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKXsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8cG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCk7aSsrKSB7Ci0gICAgICAgIGlmIChwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmdldChpKSBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSAKLSAgICAgICAgICByZXR1cm4gcG9ydC5nZXROYW1lKCk7Ci0gICAgICB9ICAKLSAgICB9Ci0gICAgIHJldHVybiAiIjsKLSAgfQotCi0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBtYWtlTmFtZXNwYWNlIChTdHJpbmcgY2xzTmFtZSkgewotCSAgcmV0dXJuIG1ha2VOYW1lc3BhY2UoY2xzTmFtZSwgImh0dHAiKTsKLSAgfQotCi0gIC8qKgotICAgKiBNYWtlIG5hbWVzcGFjZSBmcm9tIGEgZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUKLSAgICogYW5kIHRoZSBnaXZlbiBwcm90b2NvbAotICAgKgotICAgKiBAcGFyYW0gY2xzTmFtZSBmdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZQotICAgKiBAcGFyYW0gcHJvdG9jb2wgcHJvdG9jb2wgU3RyaW5nCi0gICAqIEByZXR1cm4gbmFtZXNwYWNlIG5hbWVzcGFjZSBTdHJpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG1ha2VOYW1lc3BhY2UgKFN0cmluZyBjbHNOYW1lLCBTdHJpbmcgcHJvdG9jb2wpIHsKLQkgIGlmIChjbHNOYW1lLmxhc3RJbmRleE9mKCcuJykgPT0gLTEpCi0JCSAgcmV0dXJuIHByb3RvY29sICsgIjovLyIgKyAiRGVmYXVsdE5hbWVzcGFjZSI7Ci0JICBTdHJpbmcgcGFja2FnZU5hbWUgPSBjbHNOYW1lLnN1YnN0cmluZygwLCBjbHNOYW1lLmxhc3RJbmRleE9mKCcuJykpOwotCSAgcmV0dXJuIG1ha2VOYW1lc3BhY2VGcm9tUGFja2FnZU5hbWUocGFja2FnZU5hbWUsIHByb3RvY29sKTsgICAgICAgCi0gIH0KLQotICAgIAotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbWFrZU5hbWVzcGFjZUZyb21QYWNrYWdlTmFtZShTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBwcm90b2NvbCkgewotCSAgaWYgKHBhY2thZ2VOYW1lID09IG51bGwgfHwgcGFja2FnZU5hbWUuZXF1YWxzKCIiKSkKLQkJICByZXR1cm4gcHJvdG9jb2wgKyAiOi8vIiArICJEZWZhdWx0TmFtZXNwYWNlIjsKLQkgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoIHBhY2thZ2VOYW1lLCAiLiIgKTsKLQkgIFN0cmluZ1tdIHdvcmRzID0gbmV3IFN0cmluZ1sgc3QuY291bnRUb2tlbnMoKSBdOwotCSAgZm9yKGludCBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKQotCQkgIHdvcmRzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0KLQkgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoODApOwotCSAgZm9yKGludCBpID0gd29yZHMubGVuZ3RoLTE7IGkgPj0gMDsgLS1pKSB7Ci0JCSAgU3RyaW5nIHdvcmQgPSB3b3Jkc1tpXTsKLQkJICAvLyBzZXBlcmF0ZSB3aXRoIGRvdAotCQkgIGlmKCBpICE9IHdvcmRzLmxlbmd0aC0xICkKLQkJCSAgc2IuYXBwZW5kKCcuJyk7Ci0JCSAgc2IuYXBwZW5kKCB3b3JkICk7Ci0JICB9Ci0JICByZXR1cm4gcHJvdG9jb2wgKyAiOi8vIiArIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm4gYSBEZWZpbml0aW9uIGZvciB0aGUgd3NkbCB1cmwgZ2l2ZW4gCi0gICoKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBEZWZpbml0aW9uIGdldFdTRExEZWZpbml0aW9uKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgaWYod3NkbFVSTCA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQotICAgIFdTRExGYWN0b3J5IHdzZGxGYWN0b3J5OwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgdHJ5IHsKLSAgICAgIHdzZGxGYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICAgICAgV1NETFJlYWRlciB3c2RsUmVhZGVyID0gd3NkbEZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgICAgZGVmaW5pdGlvbiA9IHdzZGxSZWFkZXIucmVhZFdTREwod3NkbFVSTCk7Ci0gICAgfSAKLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgLy8gY2FuIGJlIFdTRExFeGNlcHRpb24gb3IgSU9FeGNlcHRpb24KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICByZXR1cm4gbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lKG5hbWVzcGFjZSk7Ci0gICAgIH0KLSAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChQb3J0IHBvcnQsIE1hcCBuczJwa2dNYXApCi0gIHsKLSAgICBpZiAocG9ydCAhPSBudWxsICYmIG5zMnBrZ01hcCAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotICAgICAgUU5hbWUgYm5kUU5hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCk7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gYm5kUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBPYmplY3QgcGtnID0gbnMycGtnTWFwLmdldChuYW1lc3BhY2UpOwotICAgICAgaWYgKHBrZyAhPSBudWxsKQotICAgICAgICByZXR1cm4gKFN0cmluZylwa2c7Ci0gICAgfQotICAgIHJldHVybiBnZXRQYWNrYWdlTmFtZUZvckJpbmRpbmdJbXBsKHBvcnQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChEZWZpbml0aW9uIGRlZmluaXRpb24sIE1hcCBuczJwa2dNYXApCi0gIHsKLSAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsICYmIG5zMnBrZ01hcCAhPSBudWxsKQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgcmV0dXJuIGdldFBhY2thZ2VOYW1lRm9yQmluZGluZ0ltcGwocG9ydCwgbnMycGtnTWFwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGdldFBhY2thZ2VOYW1lRm9yQmluZGluZ0ltcGwoZGVmaW5pdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZUZvckJpbmRpbmdJbXBsKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICBwb3J0ID0gKFBvcnQpc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIH0KLSAgICByZXR1cm4gZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChwb3J0KTsKLSAgfQotCi0vLyBUaGlzIGlzIHlldCBhbm90aGVyIG5hbWluZyBhbGdvcml0aG0gYmFzZWQgb24gd2Vic2VydmljZXMuamFyCi0vLyBUaGV5IGFsd2F5cyB1c2UgdGhlIGJpbmRpbmcgbmFtZXNwYWNlIGFzIHRoZSBwYWNrYWdlIG5hbWUKLS8vIG9mIHRoZSBCaW5kaW5nSW1wbCBjbGFzcy4KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lRm9yQmluZGluZ0ltcGwoUG9ydCBwb3J0KQotewotICAgaWYgKHBvcnQgIT0gbnVsbCkKLSAgIHsKLQkgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotLy8JICBQb3J0VHlwZSBwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0UG9ydFR5cGUoKTsKLQkgIFFOYW1lIGJuZFFOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpOwotCSAgU3RyaW5nIG5hbWVzcGFjZSA9IGJuZFFOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCSAgcmV0dXJuIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShuYW1lc3BhY2UpOwotICAgfQotICAgcmV0dXJuICIiOwotfQotCi0vKioKLSogR2V0IHRoZSBuYW1lc3BhY2UgZm9yIHRoZSBQb3J0IFR5cGUKLSogCi0qLwotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UG9ydFR5cGVOYW1lc3BhY2UoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotewotICBTdHJpbmcgbmFtZXNwYWNlID0gIiI7Ci0gIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gIHsKLQlTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IAotCXdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSl7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgaXRlcmF0b3IubmV4dCgpOwotICAgICAgZm9yIChpbnQgaT0wOyBpPHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuc2l6ZSgpO2krKykgewotICAgICAgICBpZiAocG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5nZXQoaSkgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcyl7IAotCSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gcG9ydC5nZXRCaW5kaW5nKCkuZ2V0UG9ydFR5cGUoKTsKLQkgICAgICBRTmFtZSBibmRRTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCk7Ci0JICAgICAgbmFtZXNwYWNlID0gYm5kUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAJfSAgCi0JICB9Ci0gIAl9Ci0gIH0gIAotICByZXR1cm4gbmFtZXNwYWNlOwotfQotCi0vLyBUaGlzIGlzIHlldCBhbm90aGVyIG5hbWluZyBhbGdvcml0aG0gYmFzZWQgb24gd2Vic2VydmljZXMuamFyCi0vLyBUaGV5IGFsd2F5cyB1c2UgdGhlIHBvcnR0eXBlIG5hbWVzcGFjZSBhcyB0aGUgcGFja2FnZSBuYW1lCi0vLyBvZiB0aGUgSmF2YSBjbGFzcyAoaW4gZWpiKS4KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lRm9yUG9ydFR5cGUoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotewotICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgIHsKLQkgIFN0cmluZyBuYW1lc3BhY2UgPSBnZXRQb3J0VHlwZU5hbWVzcGFjZShkZWZpbml0aW9uKTsKLQkgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgcmV0dXJuICIiOwotfQotCi0gIC8qKgotICAqIGNoZWNrcyBpZiB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgdmFsaWQgamF2YSBrZXl3b3JkLgotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlL2ZhbHNlCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0phdmFLZXl3b3JkKFN0cmluZyBrZXl3b3JkKSB7Ci0gICAgcmV0dXJuIChBcnJheXMuYmluYXJ5U2VhcmNoKGtleXdvcmRzLCBrZXl3b3JkLCBlbmdsaXNoQ29sbGF0b3IpID49IDApOwotICB9Ci0KLSAgLyoqCi0gICogVHVybiBhIGphdmEga2V5d29yZCBzdHJpbmcgaW50byBhIG5vbi1KYXZhIGtleXdvcmQgc3RyaW5nLiAgKFJpZ2h0IG5vdwotICAqIHRoaXMgc2ltcGx5IG1lYW5zIGFwcGVuZGluZyBhbiB1bmRlcnNjb3JlLikKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgbWFrZU5vbkphdmFLZXl3b3JkKFN0cmluZyBrZXl3b3JkKXsKLSAgICByZXR1cm4gIGtleXdvcmRQcmVmaXggKyBrZXl3b3JkOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RnVsbHlRdWFsaWZpZWRQb3J0VHlwZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGJlYW5OYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGJlYW5OYW1lLmFwcGVuZChnZXRQYWNrYWdlTmFtZUZvclBvcnRUeXBlKGRlZmluaXRpb24pKTsgCi0gICAgYmVhbk5hbWUuYXBwZW5kKERPVCk7Ci0gICAgYmVhbk5hbWUuYXBwZW5kKGdldFBvcnRUeXBlTmFtZShkZWZpbml0aW9uKSk7Ci0gICAgcmV0dXJuIGJlYW5OYW1lLnRvU3RyaW5nKCk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBnZXROYW1lCi0gICAqIEBwYXJhbSB1cmkgU3RyaW5nCi0gICAqIEByZXR1cm4gZ2V0IHRoZSBmaWxlIG5hbWUgYWZ0ZXIgdGhlIGxhc3QgXCBhbmQgLwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZShTdHJpbmcgdXJpKSB7Ci0KLQkvLyBHZXQgZXZlcnl0aGluZyBhZnRlciBsYXN0IHNsYXNoIG9yIGJhY2tzbGFzaAotCWludCBic2xhc2ggPSB1cmkubGFzdEluZGV4T2YoIlxcIik7Ci0JaW50IHNsYXNoID0gdXJpLmxhc3RJbmRleE9mKCIvIik7Ci0JaW50IGkgPSAgYnNsYXNoID4gc2xhc2ggPyBic2xhc2ggOiBzbGFzaDsKLQlTdHJpbmcgZmlsZU5hbWUgPSB1cmkuc3Vic3RyaW5nKGkrMSkucmVwbGFjZSgnPycsICcuJyk7Ci0KLQlyZXR1cm4gZmlsZU5hbWU7Ci0gIH0KLQotCi0vKioKLSAqIGdldFdTRExOYW1lCi0gKiBAcGFyYW0gdXJpIFN0cmluZwotICogQHJldHVybiBnZXQgdGhlIGZpbGUgbmFtZSBhZnRlciB0aGUgbGFzdCBcIGFuZCAvLCB0cmltbWVkLCBkZWZhdWx0ZWQgdG8KLSAqICAgICAgICAgImRlZmF1bHQud3NkbCIgaWYgdGhlcmUgaXMgbm8gbmFtZSwgYW5kIGVuZGluZyB3aXRoICIud3NkbCIuCi0gKi8KLSBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0RMTmFtZShTdHJpbmcgdXJpKSB7Ci0KLQkvLyBHZXQgZXZlcnl0aGluZyBhZnRlciBsYXN0IHNsYXNoIG9yIGJhY2tzbGFzaCBmcm9tIGlucHV0IFVSSQotCS8vIHdpdGggbm8gd2hpdGVzcGFjZS4KLQlTdHJpbmcgV1NETE5hbWUgPSBnZXROYW1lKHVyaSkudHJpbSgpOwotCi0JLy8gaWYgZW1wdHksIHJldHVybiB0aGUgZGVmYXVsdCAiZGVmYXVsdC53c2RsIgotCWlmICggV1NETE5hbWUuZXF1YWxzKCAiIiApICkgewotCQlXU0RMTmFtZSA9ICJkZWZhdWx0LndzZGwiOwotCX0KLQotCS8vIG1ha2Ugc3VyZSBuYW1lIGVuZHMgd2l0aCAiLndzZGwiLCBsb3dlciBjYXNlLgotCWVsc2UgewotCQlpZiAoICEgV1NETE5hbWUuZW5kc1dpdGgoICIud3NkbCIgKSApIHsKLQkJCWlmICggV1NETE5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCggIi53c2RsIiApICkgewotCQkJCWludCBsYXN0RG90ID0gV1NETE5hbWUubGFzdEluZGV4T2YoIi4iKTsKLQkJCQlXU0RMTmFtZSA9IFdTRExOYW1lLnN1YnN0cmluZyggMCwgbGFzdERvdCApICsgIi53c2RsIjsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVdTRExOYW1lID0gV1NETE5hbWUgKyAiLndzZGwiOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIFdTRExOYW1lOwotIH0KLQotIC8qKgotICAqIGdldFBvcnRUeXBlTmFtZUZyb21CZWFuTmFtZQotICAqIEBwYXJhbSBiZWFubmFtZSBTdHJpbmcKLSAgKiBAcmV0dXJuIGdldCB0aGUgcG9ydCB0eXBlIG5hbWUgYmFzZWQgb24gdGhlIGJlYW4gbmFtZQotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQb3J0VHlwZU5hbWVGcm9tQmVhbk5hbWUoU3RyaW5nIGJlYW5OYW1lKSB7Ci0gICAgcmV0dXJuIGJlYW5OYW1lLnN1YnN0cmluZyhiZWFuTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSk7CQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoU2VydmljZSBzZXJ2aWNlLCBNYXAgbnMycGtnTWFwKQotICB7Ci0gICAgaWYgKHNlcnZpY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gc2VydmljZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKG5zMnBrZ01hcCAhPSBudWxsKQotICAgICAgewotICAgICAgICBPYmplY3QgcGtnID0gbnMycGtnTWFwLmdldChuYW1lc3BhY2UpOwotICAgICAgICBpZiAocGtnICE9IG51bGwpCi0gICAgICAgICAgcmV0dXJuIChTdHJpbmcpcGtnOwotICAgICAgfQotICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShuYW1lc3BhY2UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gIiI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShQb3J0IHBvcnQsIE1hcCBuczJwa2dNYXApCi0gIHsKLSAgICBpZiAocG9ydCAhPSBudWxsKQotICAgICAgcmV0dXJuIGdldFBhY2thZ2VOYW1lKHBvcnQuZ2V0QmluZGluZygpLCBuczJwa2dNYXApOwotICAgIGVsc2UKLSAgICAgIHJldHVybiAiIjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKEJpbmRpbmcgYmluZGluZywgTWFwIG5zMnBrZ01hcCkKLSAgewotICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGlmIChuczJwa2dNYXAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IHBrZyA9IG5zMnBrZ01hcC5nZXQobmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKHBrZyAhPSBudWxsKQotICAgICAgICAgIHJldHVybiAoU3RyaW5nKXBrZzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoUG9ydFR5cGUgcG9ydFR5cGUsIE1hcCBuczJwa2dNYXApCi0gIHsKLSAgICBpZiAocG9ydFR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGlmIChuczJwa2dNYXAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IHBrZyA9IG5zMnBrZ01hcC5nZXQobmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKHBrZyAhPSBudWxsKQotICAgICAgICAgIHJldHVybiAoU3RyaW5nKXBrZzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLQotICAvKioKLSAgICogbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkKLSAgICogQHJldHVybiBwYWNrYWdlIG5hbWUgYmFzZWQgb24gbmFtZXNwYWNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUoU3RyaW5nIG5hbWVzcGFjZVVSSSkKLSAgewotICAJLyoqCi0gIAkgKiBUT0RPOiAgVGhlIG1ha2VQYWNrYWdlTmFtZSBtZXRob2QgZnJvbSAKLSAgCSAqIG9yZy5hcGFjaGUuYXhpcy53c2RsLnRvSmF2YS5VdGlscyBpbiBheGlzLTFfMSBpcyBjYWxsZWQgdG8gbWFwIG5hbWVzcGFjZSB0byBwYWNrYWdlIG5hbWUuICAKLSAgCSAqIFRoaXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGFuIGV4dGVuc2lvbiBwb2ludCB0byBwbHVnIGluIHJ1bnRpbWUgZW1pdHRlciBzcGVjaWZpYyBuYW1lc3BhY2UgdG8gCi0gIAkgKiBwYWNrYWdlIG1hcHBpbmcgYWxnb3JpdGhtIAotICAJICovCi0gIAlyZXR1cm4gVXRpbHMubWFrZVBhY2thZ2VOYW1lKG5hbWVzcGFjZVVSSSk7Ci0gIAkKLS8vICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoODApOwotLy8gICAgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsICYmIG5hbWVzcGFjZVVSSS5sZW5ndGgoKSA+IDApCi0vLyAgICB7Ci0vLyAgICAgIFN0cmluZyBob3N0bmFtZSA9IG51bGw7Ci0vLyAgICAgIHRyeQotLy8gICAgICB7Ci0vLyAgICAgICAgaG9zdG5hbWUgPSBuZXcgVVJMKG5hbWVzcGFjZVVSSSkuZ2V0SG9zdCgpOwotLy8gICAgICB9Ci0vLyAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLS8vICAgICAgewotLy8gICAgICAgIGludCBpbmRleCA9IG5hbWVzcGFjZVVSSS5pbmRleE9mKCI6Iik7Ci0vLyAgICAgICAgaWYgKGluZGV4ID4gLTEpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgaG9zdG5hbWUgPSBuYW1lc3BhY2VVUkkuc3Vic3RyaW5nKGluZGV4KzEpOwotLy8gICAgICAgICAgaW5kZXggPSBob3N0bmFtZS5pbmRleE9mKCIvIik7Ci0vLyAgICAgICAgICBpZiAoaW5kZXggPiAtMSkKLS8vICAgICAgICAgICAgaG9zdG5hbWUgPSBob3N0bmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotLy8gICAgICAgIH0KLS8vICAgICAgICBlbHNlCi0vLyAgICAgICAgICBob3N0bmFtZSA9IG5hbWVzcGFjZVVSSTsKLS8vICAgICAgfQotLy8gICAgICAKLS8vCSAgLy8gaWYgd2UgZGlkbid0IGZpbGUgYSBob3N0bmFtZSwgYmFpbAotLy8JICBpZiAoaG9zdG5hbWUgPT0gbnVsbCkgewotLy8JCSAgcmV0dXJuIG51bGw7Ci0vLwkgIH0KLS8vCi0vLyAgICAgIC8vY29udmVydCBpbGxlZ2FsIGphdmEgaWRlbnRpZmllcgotLy8gICAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoJy0nLCAnXycpOwotLy8gICAgICAvLyB0b2tlbml6ZSB0aGUgaG9zdG5hbWUgYW5kIHJldmVyc2UgaXQKLS8vICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihob3N0bmFtZSwgIi4iKTsKLS8vICAgICAgU3RyaW5nW10gd29yZHMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotLy8gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKQotLy8gICAgICAgIHdvcmRzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0vLyAgICAgIGZvcihpbnQgaSA9IHdvcmRzLmxlbmd0aC0xOyBpID49IDA7IC0taSkKLS8vICAgICAgewotLy8gICAgICAgIFN0cmluZyB3b3JkID0gd29yZHNbaV07Ci0vLyAgICAgICAgaWYgKGlzSmF2YUtleXdvcmQod29yZCkpCi0vLyAgICAgICAgICB3b3JkID0gbWFrZU5vbkphdmFLZXl3b3JkKHdvcmQpOwotLy8gICAgICAgIC8vIHNlcGVyYXRlIHdpdGggZG90Ci0vLyAgICAgICAgaWYgKGkgIT0gd29yZHMubGVuZ3RoLTEpCi0vLyAgICAgICAgICBzYi5hcHBlbmQoJy4nKTsKLS8vICAgICAgICAvLyBjb252ZXJ0IGRpZ2l0cyB0byB1bmRlcnNjb3JlcwotLy8gICAgICAgIGlmIChDaGFyYWN0ZXIuaXNEaWdpdCh3b3JkLmNoYXJBdCgwKSkpCi0vLyAgICAgICAgICBzYi5hcHBlbmQoJ18nKTsKLS8vICAgICAgICAgIHNiLmFwcGVuZCh3b3JkKTsKLS8vICAgICAgfQotLy8gICAgfQotLy8gICAgcmV0dXJuIG5vcm1hbGl6ZVBhY2thZ2VOYW1lKHNiLnRvU3RyaW5nKCksIERPVC5jaGFyQXQoMCkpOwotICB9Ci0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlc29sdmVEb3RJblBvcnROYW1lKFN0cmluZyBuYW1lKSB7Ci0JaWYobmFtZS5pbmRleE9mKCIuIik8MCkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgYm9vbGVhbiBhZnRlckRvdCA9IGZhbHNlOwotICAgIGZvcihpbnQgaT0wOyBpPG5hbWUubGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgCWlmKG5hbWUuY2hhckF0KGkpPT0nLicpCi0gICAgCXsKLSAgICAJCWFmdGVyRG90ID0gdHJ1ZTsKLSAgICAJfQotICAgIAllbHNlIGlmKGFmdGVyRG90KQotICAgIAl7Ci0gICAgCQlzYi5hcHBlbmQobmFtZS5zdWJzdHJpbmcoaSxpKzEpLnRvVXBwZXJDYXNlKCkpOwotICAgIAkJYWZ0ZXJEb3Q9ZmFsc2U7Ci0gICAgCX0KLSAgICAJZWxzZQotICAgIAl7Ci0gICAgCQlzYi5hcHBlbmQobmFtZS5jaGFyQXQoaSkpOwotICAgIAl9Ci0gICAgfQotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc0ZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc0ZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZDM0YzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BeGlzTWFwcGluZ3NGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkJvb2xlYW5GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgQXhpc01hcHBpbmdzRnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBib29sZWFuIHNob3dNYXBwaW5nc187Ci0KLSAgcHVibGljIEF4aXNNYXBwaW5nc0ZyYWdtZW50KCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgc2V0VHJ1ZUZyYWdtZW50KCBuZXcgU2ltcGxlRnJhZ21lbnQoICJBeGlzTWFwcGluZ3NXaWRnZXQiICkpOwotICAgIHNldENvbmRpdGlvbiggbmV3IENvbmRpdGlvbigpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaG93TWFwcGluZ3NfOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9ICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNob3dNYXBwaW5nKCBib29sZWFuIHNob3dNYXBwaW5ncyApCi0gIHsKLSAgICBzaG93TWFwcGluZ3NfID0gc2hvd01hcHBpbmdzOwotICB9ICAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc1dpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BeGlzTWFwcGluZ3NXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1MTU5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc1dpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuVGFibGVWaWV3ZXJXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzTWFwcGluZ3NXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpIjsKLSAgCi0gIHByaXZhdGUgVGFibGVWaWV3ZXJXaWRnZXQgbWFwcGluZ3NfOwotCi0gIHByaXZhdGUgYnl0ZSBtb2RlXzsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhUGFyYW1ldGVyXzsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTU9ERV9CRUFOMlhNTCA9IChieXRlKTA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX1hNTDJCRUFOID0gKGJ5dGUpMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfWE1MMlBST1hZID0gKGJ5dGUpMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfWE1MMkVKQiA9IChieXRlKTM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX0VKQjJYTUwgPSAoYnl0ZSk0OwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9QQUNLQUdFID0gImRlZmF1bHQuamF2YXBhY2thZ2UiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX05BTUVTUEFDRSA9ICJodHRwOi8vZGVmYXVsdC5uYW1lc3BhY2UiOwotICAKLSAgLypDT05URVhUX0lEIFBXSk0wMDAxIGZvciB0aGUgV1NETCB0byBKYXZhIE1hcHBpbmdzIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXSk1fUEFHRSA9ICJQV0pNMDAwMSI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBBeGlzTWFwcGluZ3NXaWRnZXQoIGJ5dGUgbW9kZSApCi0gIHsKLSAgICBtb2RlXyA9IG1vZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApCi0gIHsKLSAgICAgICAgCi0gICAgLy8gVE9ETyBUaGUgVE9PTFRJUF9QV0pNX1BBR0Uga2V5IGRvZXNuJ3Qgc2VlbSB0byBleGlzdCBhbnl3aGVyZT8/PwotCS8vcGFyZW50LnNldFRvb2xUaXBUZXh0KCBtc2dVdGlscy5nZXRNZXNzYWdlKCAiVE9PTFRJUF9QV0pNX1BBR0UiICkgKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBwYXJlbnQsIHBsdWdpbklkXyArICIuIiArIElORk9QT1BfUFdKTV9QQUdFICk7Ci0gICAgCi0gICAgVGV4dCBtYXBwaW5nTGFiZWwgPSBuZXcgVGV4dCggcGFyZW50LCBTV1QuUkVBRF9PTkxZIHwgU1dULldSQVAgKTsKLSAgICBtYXBwaW5nTGFiZWwuc2V0VGV4dCggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9NQVBQSU5HX1BBSVJTICk7Ci0gICAgbWFwcGluZ0xhYmVsLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgTGlzdCBpbml0VmFsdWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAotICAgIGlmKCBtb2RlXyA9PSBNT0RFX0JFQU4yWE1MIHx8IG1vZGVfID09IE1PREVfRUpCMlhNTCkgCi0gICAgewotCQlTdHJpbmdbXSBjb2x1bW5zID0geyBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRBQkxFX0NPTFVNTl9MQUJFTF9QQUNLQUdFLAotCQkJCQkJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfQ09MVU1OX0xBQkVMX05BTUVTUEFDRX07Ci0JCW1hcHBpbmdzXyA9IG5ldyBUYWJsZVZpZXdlcldpZGdldCggY29sdW1ucywgaW5pdFZhbHVlcywgbmV3IFN0cmluZ1tdIHtERUZBVUxUX1BBQ0tBR0UsIERFRkFVTFRfTkFNRVNQQUNFfSwgVGFibGVWaWV3ZXJXaWRnZXQuTUFQX09ORV9UT19PTkUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCWVsc2UgCi0JewotICAgICAgCVN0cmluZ1tdIGNvbHVtbnMgPSB7IEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfQ09MVU1OX0xBQkVMX05BTUVTUEFDRSwKLSAgICAgIAkJCQkJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfQ09MVU1OX0xBQkVMX1BBQ0tBR0V9OwotCQltYXBwaW5nc18gPSBuZXcgVGFibGVWaWV3ZXJXaWRnZXQoIGNvbHVtbnMsIGluaXRWYWx1ZXMsIG5ldyBTdHJpbmdbXSB7REVGQVVMVF9OQU1FU1BBQ0UsIERFRkFVTFRfUEFDS0FHRSB9LCBUYWJsZVZpZXdlcldpZGdldC5NQVBfTUFOWV9UT19PTkUpOyAvLyROT04tTkxTLTEkCi0JfQotICAgIAotCW1hcHBpbmdzXy5hZGRDb250cm9scyggcGFyZW50LCBzdGF0dXNMaXN0ZW5lciApOwotICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gbWFwcGluZ3NfLmdldFN0YXR1cygpOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEphdmFQYXJhbWV0ZXIoIEphdmFXU0RMUGFyYW1ldGVyIHBhcmFtZXRlciApCi0gIHsKLSAgICBqYXZhUGFyYW1ldGVyXyA9IHBhcmFtZXRlcjsKLSAgfQotICAKLSAgcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFQYXJhbWV0ZXIoKQotICB7Ci0gICAgaWYoIG1vZGVfID09IE1PREVfQkVBTjJYTUwgfHwgbW9kZV8gPT0gTU9ERV9FSkIyWE1MIHx8IG1vZGVfID09IE1PREVfWE1MMkJFQU4gfHwgbW9kZV8gPT0gTU9ERV9YTUwyUFJPWFkpCi0gICAgewotICAgICAgLy9TZXQgdGhlIG1hcHBpbmdzIG9uIGphdmFQYXJhbWV0ZXIKLSAgICAgIFRhYmxlSXRlbVtdIHBhaXJzID0gbWFwcGluZ3NfLmdldEl0ZW1zKCk7Ci0gIAkgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgCSAgZm9yIChpbnQgaT0wOyBpPHBhaXJzLmxlbmd0aDsgaSsrKQotICAJICB7Ci0gIAkJbWFwLnB1dChwYWlyc1tpXS5nZXRUZXh0KDApLHBhaXJzW2ldLmdldFRleHQoMSkpOwotICAJICB9Ci0gIAkgIGphdmFQYXJhbWV0ZXJfLnNldE1hcHBpbmdzKG1hcCk7Ci0gIAkgIAotICAJICAvL1NldCB0aGUgbmFtZXNwYWNlIG9uIHRoZSBqYXZhUGFyYW1ldGVyCi0gIAkgIFN0cmluZyBiZWFuTmFtZSA9IGphdmFQYXJhbWV0ZXJfLmdldEJlYW5OYW1lKCk7Ci0JICBpZihiZWFuTmFtZSAhPSBudWxsICYmICFiZWFuTmFtZS5lcXVhbHMoIiIpKQotCSAgewotCQlTdHJpbmcgcGFja2FnZU5hbWUgPSBiZWFuTmFtZS5zdWJzdHJpbmcoMCwgYmVhbk5hbWUubGFzdEluZGV4T2YoJy4nKSk7Ci0JCWlmKG1hcC5jb250YWluc0tleShwYWNrYWdlTmFtZSkpCi0JCXsKLQkJICBTdHJpbmcgdG5zID0gKFN0cmluZyltYXAuZ2V0KHBhY2thZ2VOYW1lKTsKLQkJICBqYXZhUGFyYW1ldGVyXy5zZXROYW1lc3BhY2UodG5zKTsKLQkJfQkJCi0JICB9Ci0KLSAgICB9Ci0gICAgcmV0dXJuIGphdmFQYXJhbWV0ZXJfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNQcm94eVdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BeGlzUHJveHlXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMwOGJmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNQcm94eVdpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDExNTE0NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLQotcHVibGljIGNsYXNzIEF4aXNQcm94eVdpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiOwotICAKLSAgLypDT05URVhUX0lEIFBXSkIwMDAxIGZvciB0aGUgV1NETCB0byBKYXZhIEJpbmRpbmdzIFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BXSkJfUEFHRSA9ICJQV0pCMDAwMSI7CS8vJE5PTi1OTFMtMSQKLQkJCi0gIHByaXZhdGUgQ29tYm8gb3V0cHV0Rm9sZGVyQ29tYm9fOwotICAvKkNPTlRFWFRfSUQgUFdKQjAwMDMgZm9yIHRoZSBGb2xkZXIgZmllbGQgb2YgdGhlIFdTREwgdG8gSmF2YSBCaW5kaW5ncyBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QV0pCX1RFWFRfRk9MREVSID0gIlBXSkIwMDAzIjsJLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgQnV0dG9uIGdlblByb3h5Q2hlY2tib3hfOwotICAvKkNPTlRFWFRfSUQgUFdKQjAwMDkgSW5kaWNhdGVzIHdoZXRoZXIgdG8gZ2VuZXJhdGUgYSBwcm94eSBvciBub3QuICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFdKQl9DSEVDS0JPWF9HRU5QUk9YWSA9ICJQV0pCMDAwOSI7CS8vJE5PTi1OTFMtMSQKLQkJCi0gIHByaXZhdGUgQnV0dG9uIHNob3dNYXBwaW5nc0NoZWNrYm94XzsKLSAgLypDT05URVhUX0lEIFBXSkIwMDE2IGZvciB0aGUgU2hvdyBNYXBwaW5ncyBjaGVja2JveCBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX04yUF9TSE9XX01BUFBJTkdTID0gIlBXSkIwMDE2IjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotICAgIFVJVXRpbHMgICAgICB1aVV0aWxzICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZF8gKTsKLSAgICAKLQlwYXJlbnQuc2V0VG9vbFRpcFRleHQoIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV0pCX1BBR0UgKTsKLQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBwYXJlbnQsIHBsdWdpbklkXyArICIuIiArICBJTkZPUE9QX1BXSkJfUEFHRSk7Ci0gICAgCi0gICAgZ2VuUHJveHlDaGVja2JveF8gPSB1aVV0aWxzLmNyZWF0ZUNoZWNrYm94KCBwYXJlbnQsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0hFQ0tCT1hfR0VOUFJPWFksCi0gICAgCQkJCQkJCQkJCQlBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdKQl9DSEVDS0JPWF9HRU5QUk9YWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdKQl9DSEVDS0JPWF9HRU5QUk9YWSApOwotICAgIGdlblByb3h5Q2hlY2tib3hfLmFkZExpc3RlbmVyKCBTV1QuU2VsZWN0aW9uLCBzdGF0dXNMaXN0ZW5lciApOwotICAgIGdlblByb3h5Q2hlY2tib3hfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZW5Qcm94eSgpOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAKLSAgICBDb21wb3NpdGUgdGV4dEdyb3VwID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMiwgNSwgMCApOwotICAgIAotICAgIG91dHB1dEZvbGRlckNvbWJvXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8oIHRleHRHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9GT0xERVJfTkFNRSwKLSAgICAJCQkJCQkJCQlBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdKQl9URVhUX0ZPTERFUiwKLSAgICAJCQkJCQkJCQlJTkZPUE9QX1BXSkJfVEVYVF9GT0xERVIsCi0gICAgCQkJCQkJCQkJU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0gICAgCi0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfID0gdWlVdGlscy5jcmVhdGVDaGVja2JveCggcGFyZW50LCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0VYUExPUkVfTUFQUElOR1NfWE1MMkJFQU4sCi0gICAgCQkJCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX04yUF9TSE9XX01BUFBJTkdTLAotICAgIAkJCQkJCQkJCUlORk9QT1BfTjJQX1NIT1dfTUFQUElOR1MgKTsKLSAgICAvLyBTaW5jZSB0aGlzIHdpZGdldCBhZmZlY3RzIHdoZXRoZXIgdGhlIG5leHQgcGFnZSBpcyBzaG93biBvciBub3Qgd2UKLSAgICAvLyBuZWVkIHRvIGFkZCB0aGUgc3RhdHVzTGlzdGVuZXIuCi0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfLmFkZExpc3RlbmVyKCBTV1QuU2VsZWN0aW9uLCBzdGF0dXNMaXN0ZW5lciApOwotICAgIAotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlR2VuUHJveHkoKQotICB7Ci0gICAgYm9vbGVhbiBlbmFibGVkID0gZ2VuUHJveHlDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgCi0gICAgb3V0cHV0Rm9sZGVyQ29tYm9fLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgICBzaG93TWFwcGluZ3NDaGVja2JveF8uc2V0RW5hYmxlZCggZW5hYmxlZCApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KElQcm9qZWN0IGNsaWVudFByb2plY3QpCi0gIHsgIAkKLSAgICBJUGF0aFtdIHBhdGhzID0gUmVzb3VyY2VVdGlscy5nZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKGNsaWVudFByb2plY3QpOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoIDsgaSsrKQotICAgIHsKLSAgICAgIG91dHB1dEZvbGRlckNvbWJvXy5hZGQocGF0aHNbaV0udG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIAotICAgIGlmKCBwYXRocy5sZW5ndGggPiAwICkKLSAgICB7Ci0gICAgCW91dHB1dEZvbGRlckNvbWJvXy5zZWxlY3QoMCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE91dHB1dEZvbGRlcigpCi0gIHsKLSAgCXJldHVybiBvdXRwdXRGb2xkZXJDb21ib18uZ2V0VGV4dCgpOwotICB9Ci0gICAgICAgIAotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KCBCb29sZWFuIGdlblByb3h5ICkKLSAgewotICAgIGdlblByb3h5Q2hlY2tib3hfLnNldFNlbGVjdGlvbiggZ2VuUHJveHkuYm9vbGVhblZhbHVlKCkgKTsKLSAgfSAgICAKLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZW5Qcm94eUNoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKSApOwotICB9ICAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRDdXN0b21pemVDbGllbnRNYXBwaW5ncyggYm9vbGVhbiBzaG93TWFwcGluZ3MgKQotICB7Ci0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfLnNldFNlbGVjdGlvbiggc2hvd01hcHBpbmdzICk7Ci0gIH0gICAgICAgICAgICAKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzKCkKLSAgewotICAgIHJldHVybiBzaG93TWFwcGluZ3NDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkgJiYgZ2VuUHJveHlDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCk7Ci0gIH0gICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzQ2xpZW50U2NlbmFyaW8oIGJvb2xlYW4gaXNDbGllbnRTY2VuYXJpbyApCi0gIHsKLSAgICBnZW5Qcm94eUNoZWNrYm94Xy5zZXRFbmFibGVkKCAhaXNDbGllbnRTY2VuYXJpbyApOyAKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aXphcmQvY2xpZW50L1dlYlNlcnZpY2VDbGllbnRBeGlzVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd2l6YXJkL2NsaWVudC9XZWJTZXJ2aWNlQ2xpZW50QXhpc1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ4NTFhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aXphcmQvY2xpZW50L1dlYlNlcnZpY2VDbGllbnRBeGlzVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDExNTE0NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUyMyAgIDE0MzI4NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkRlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suQ2xpZW50Q29kZUdlbk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkRlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5WYWxpZGF0ZVdTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQXhpc01hcHBpbmdzV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQXhpc1Byb3h5V2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLS8qKgotICAqIERldmVsb3BlcnMgd2hvIGFyZSBhZGRpbmcgd2ViIHNlcnZpY2UgY2xpZW50cyBpbnRvIHRoZSB3aXphcmQgc2hvdWxkIGNyZWF0ZQotICAqIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlLiAgCi0qKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlQ2xpZW50QXhpc1R5cGUgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZyAKLXsKLQotCQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotICB7Ci0gIAkvLyBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQgIAkKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MiLCBBeGlzUHJveHlXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHJveHlQcm9qZWN0Rm9sZGVyIiwgQXhpc1Byb3h5V2lkZ2V0LmNsYXNzLCAiUHJveHlGb2xkZXIiLCBudWxsICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBBeGlzUHJveHlXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNDbGllbnRTY2VuYXJpbyIsIEF4aXNQcm94eVdpZGdldC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgQXhpc1Byb3h5V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgbnVsbCk7Ci0gICAgCi0gICAgLy8gQXhpc1Byb3h5V2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNQcm94eVdpZGdldC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNQcm94eVdpZGdldC5jbGFzcywgIk91dHB1dEZvbGRlciIsIERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmNsYXNzICk7Ci0gICAgCi0gICAgLy9BeGlzTWFwcGluZ3NXaWRnZXQKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsgLy9PSwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsgLy9PSwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBWYWxpZGF0ZVdTRExDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOyAvL09LCi0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7IC8vT0sKLQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpIAotICB7Ci0gICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJBeGlzQ2xpZW50U3RhcnQiLCAKLSAgICAgICAgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX0FYSVNfUFJPWFksCi0gICAgICAgIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX0FYSVNfUFJPWFksCi0gICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBBeGlzUHJveHlXaWRnZXQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLSAgICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJBeGlzQ2xpZW50QmVhbk1hcHBpbmciLCAKLSAgICAgICAgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1hNTDJQUk9YWSwKLSAgICAgICAgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9FWFBMT1JFX01BUFBJTkdTX1hNTDJCRUFOLAotICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQXhpc01hcHBpbmdzV2lkZ2V0KEF4aXNNYXBwaW5nc1dpZGdldC5NT0RFX1hNTDJQUk9YWSApOwotICAgICAgICAgIH0KLSAgICAgICAgfSApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIAotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAvL2RlYWQgY29kZSAtIGRvZXNuJ3QgbWF0dGVyIHdoYXQgZ2V0cyByZXR1cm5lZCBoZXJlLgotICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW1wbGVGcmFnbWVudCgpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkgCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd3NydC9BeGlzQ2xpZW50Q29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd3NydC9BeGlzQ2xpZW50Q29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGI3ZTlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dzcnQvQXhpc0NsaWVudENvbmZpZ1dpZGdldEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0cy5BeGlzUHJveHlXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5XZWJTZXJ2aWNlQ2xpZW50QXhpc1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEF4aXNDbGllbnRDb25maWdXaWRnZXRGYWN0b3J5IGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHsKLQotCXByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgICAgICAgcHJveHlDb25maWdXaWRnZXRfOwotCXByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgICAgICAgbWFwcGluZ3NXaWRnZXRfOwotCXByaXZhdGUgQXhpc1Byb3h5V2lkZ2V0ICAgICAgICAgICAgICAgICAgICAgcHJveHlXaWRnZXRfOwotCXByaXZhdGUgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIgYWRhcHRlcl87Ci0JCi0JcHVibGljIEF4aXNDbGllbnRDb25maWdXaWRnZXRGYWN0b3J5KCkKLQl7Ci0JICBhZGFwdGVyXyA9IG5ldyBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciggbmV3IFdlYlNlcnZpY2VDbGllbnRBeGlzVHlwZSgpICk7Ci0JICAKLQkgIHByb3h5Q29uZmlnV2lkZ2V0XyA9IGFkYXB0ZXJfLmdldFdpZGdldCggIkF4aXNDbGllbnRTdGFydCIgKTsKLQkgIHByb3h5V2lkZ2V0XyAgICAgICA9IChBeGlzUHJveHlXaWRnZXQpcHJveHlDb25maWdXaWRnZXRfLmdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpLmNyZWF0ZSgpOwotCSAgbWFwcGluZ3NXaWRnZXRfICAgPSBhZGFwdGVyXy5nZXRXaWRnZXQoICJBeGlzQ2xpZW50QmVhbk1hcHBpbmciICk7Ci0JfQotCQotCXB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXRGaXJzdE5hbWVkV2lkZ2V0KCkgCi0JewotCSAgcmV0dXJuIHByb3h5Q29uZmlnV2lkZ2V0XzsKLQl9Ci0KLQlwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0TmV4dE5hbWVkV2lkZ2V0KCBJTmFtZWRXaWRnZXRDb250cmlidXRvciB3aWRnZXRDb250cmlidXRvcikgCi0JewotCSAgcmV0dXJuIHdpZGdldENvbnRyaWJ1dG9yID09IHByb3h5Q29uZmlnV2lkZ2V0XyAmJiBwcm94eVdpZGdldF8uZ2V0Q3VzdG9taXplQ2xpZW50TWFwcGluZ3MoKSA/IG1hcHBpbmdzV2lkZ2V0XyA6IG51bGw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLQl7Ci0JICBhZGFwdGVyXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5ICk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZUNsaWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZUNsaWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjQ1MDk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VDbGllbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMTUxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MDkgICAxMjUwOTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1LCBVc2UgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQXhpc0NsaWVudElucHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kLkF4aXNDbGllbnRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5DbGllbnRDb2RlR2VuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLlZhbGlkYXRlV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkJ1aWxkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUNsaWVudEluZm87Ci0KLXB1YmxpYyBjbGFzcyBBeGlzV2ViU2VydmljZUNsaWVudCBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZUNsaWVudAotewkJCi0KLQlwdWJsaWMgQXhpc1dlYlNlcnZpY2VDbGllbnQoV2ViU2VydmljZUNsaWVudEluZm8gaW5mbykKLQl7Ci0JCXN1cGVyKGluZm8pOwotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwKLQkJCUlTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRlcGxveShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXZlbG9wKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotICAgIEVjbGlwc2VFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IChFY2xpcHNlRW52aXJvbm1lbnQpZW52OwotCQlyZWdpc3RlckRhdGFNYXBwaW5ncyggZW52aXJvbm1lbnQuZ2V0Q29tbWFuZE1hbmFnZXIoKS5nZXRNYXBwaW5nUmVnaXN0cnkoKSk7Ci0JCQotCQlWZWN0b3IgY29tbWFuZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCWNvbW1hbmRzLmFkZChuZXcgQXhpc0NsaWVudElucHV0Q29tbWFuZCh0aGlzLCBjdHgsIHByb2plY3QpKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQoKSk7Ci0vLwkJY29tbWFuZHMuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCgiQXhpc0NsaWVudFN0YXJ0IikpOwotLy8JCWNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIkF4aXNDbGllbnRCZWFuTWFwcGluZyIpKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBEZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kKCkpOwotLy8JCWNvbW1hbmRzLmFkZChuZXcgQ29weUF4aXNKYXJDb21tYW5kKCkpOwotCQljb21tYW5kcy5hZGQobmV3IERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kKCkpOwotCQljb21tYW5kcy5hZGQobmV3IFZhbGlkYXRlV1NETENvbW1hbmQoKSk7Ci0JCWNvbW1hbmRzLmFkZChuZXcgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbigpKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBBeGlzQ2xpZW50T3V0cHV0Q29tbWFuZCh0aGlzLGN0eCkpOwotCQljb21tYW5kcy5hZGQobmV3IEJ1aWxkUHJvamVjdENvbW1hbmQoKSk7Ci0JCXJldHVybiBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoY29tbWFuZHMpOwotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgaW5zdGFsbChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBydW4oSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQkJCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSkgCi0JewotCQkvLyBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50SW5wdXRDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLAotCQkJCW5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWUiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRSdW50aW1lSUQiLAotLy8JCQkJbnVsbCk7Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywKLS8vCQkJCSJDbGllbnRQcm9qZWN0RUFSIiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50SW5wdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSTCIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7IC8vIFVSSQotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gdG8KLQkJLy8gVVJMCi0JCS8vIHRyYW5zZm9ybWVyCi0JCS8vIHJlcSdkPz8KLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFByb3h5U2VsZWN0ZWQiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsCi0vLwkJCQkiVGVzdFByb3h5U2VsZWN0ZWQiLCBudWxsKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50SW5wdXRDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVyIiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNDbGllbnRTY2VuYXJpbyIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudElucHV0Q29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCQkvLyBEZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kKCkKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZC5jbGFzcyk7IC8vT0sKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJMIiwgRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZC5jbGFzcywgIldzZGxTZXJ2aWNlVVJMIiwgbnVsbCk7IC8vT0sKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQuY2xhc3MpOyAvL09LICAgIAotCQkKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBDb3B5QXhpc0phckNvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCk7Ci0KLQkJLy8gRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQoKSAvLyBqYXZhUGFyYW1fLCBtb2RlbF8KLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuY2xhc3MpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcywgIlByb3h5UHJvamVjdCIsCi0JCQkJbnVsbCk7Ci0JCS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkwiLAotCQkvLyBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcywiV1NETFNlcnZpY2VQYXRobmFtZSIsbnVsbCk7Ci0JCS8vIC8vCi0JCS8vIFVSTCB0byBVUkw/PwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkwiLCBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcywgIldTRExTZXJ2aWNlVVJMIiwgbnVsbCk7IC8vIFVSSQotCQkvLyB0bwotCQkvLyBVUkw/PwotCQkvLyBWYWxpZGF0ZVdTRExDb21tYW5kKCkKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgVmFsaWRhdGVXU0RMQ29tbWFuZC5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFNlcnZpY2VVUkwiLCBWYWxpZGF0ZVdTRExDb21tYW5kLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIFZhbGlkYXRlV1NETENvbW1hbmQuY2xhc3MpOwotCi0JCS8vIFdTREwySmF2YUNvbW1hbmQoKSAvLyBqYXZhUGFyYW1fCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkwiLCBDbGllbnRDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiV3NkbFVSSSIsIG51bGwpOwotCi0JCS8vIFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJQcm9qZWN0IiwgbnVsbCk7CQkKLQkJCi0JCS8vIFN0dWIyQmVhbkNvbW1hbmQoKQotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuY2xhc3MsICJPdXRwdXRGb2xkZXIiLCBDbGllbnRDb2RlR2VuT3BlcmF0aW9uLmNsYXNzICk7Ci0JCQotCQkvLyBCdWlsZFByb2plY3RDb21tYW5kKCkKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBudWxsKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJGb3JjZUJ1aWxkIiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVmFsaWRhdGlvbk1hbmFnZXIiLCBCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzKTsKLQkJCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIlByb3h5QmVhbiIsIEF4aXNDbGllbnRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgbnVsbCk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIlByb3h5RW5kcG9pbnQiLCBBeGlzQ2xpZW50T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0vLwkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXRFbmRwb2ludE1ldGhvZCIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2ZDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcyNmMzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NzLWF4aXMtdWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzllOTNhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2ZGQ4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1dlZCBTZXAgMjYgMDY6Mjg6MjcgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYzNjIyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNUaHUgTWF5IDMxIDEzOjExOjE2IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRkYmJhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozMCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjA5NjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzA1LnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuYmVhbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aXphcmQuYmVhbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aXphcmQud3NkbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQ7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbTtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb247YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkxZmVlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBkZXBsb3kueHNsLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvZGVwbG95LnhzbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvZGVwbG95LnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkZjE2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2RlcGxveS54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgIHZlcnNpb249IjEuMCIKLSAgICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiCi0gICAgeG1sbnM6bnMxPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvYXhpcy93c2RkLyIKLSAgICB4bWxuczpqYXZhPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvYXhpcy93c2RkL3Byb3ZpZGVycy9qYXZhIj4KLSAgICA8eHNsOm91dHB1dCBtZXRob2Q9InhtbCIgZW5jb2Rpbmc9IlVURi04Ii8+Ci0gIAotICAgPHhzbDpwYXJhbSBuYW1lPSJuZXdDbGFzc05hbWUiIHNlbGVjdD0ic3MiLz4KLSAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9uczE6ZGVwbG95bWVudC9uczE6c2VydmljZS9uczE6cGFyYW1ldGVyW0BuYW1lPSdjbGFzc05hbWUnXSI+Ci0gICAgPHhzbDpjb3B5PgotICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPmNsYXNzTmFtZTwveHNsOmF0dHJpYnV0ZT4KLSAgICAgICAJIDx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj4gCQotICAJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG5ld0NsYXNzTmFtZSIvPiAgCSAJCi0gICAgICAgCSA8L3hzbDphdHRyaWJ1dGU+Ci0gICAgICAgCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KLSAgICAgICAJPC94c2w6Y29weT4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJAKnxub2RlKCkiPgotICAgIAk8eHNsOmNvcHk+Ci0gICAgCQk8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkAqfG5vZGUoKSIvPgotICAgIAk8L3hzbDpjb3B5PgotICAgIDwveHNsOnRlbXBsYXRlPgotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2FhMGJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYnNlcnZpY2UgQXhpcyBDcmVhdGlvbiBVSQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLUxBQkVMX1JVTlRJTUVfQVhJU18xMT1BcGFjaGUgQXhpcwotREVTQ19SVU5USU1FX0FYSVNfMTE9QXBhY2hlIEF4aXMKLQotIwotI1dTV1NETEF4aXNUeXBlCi0jCi1XU19OQU1FX1dTRExBWElTPVNrZWxldG9uIEphdmEgYmVhbiBBeGlzIFdlYiBzZXJ2aWNlCi0KLSMKLSNXU0JlYW5BeGlzVHlwZQotIwotV1NfTkFNRV9CRUFOQVhJUz1KYXZhIGJlYW4gQXhpcyBXZWIgc2VydmljZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmU5YTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotICAgCi0gICA8IS0tIFNlcnZlciBEZWZhdWx0ZXJzIC0tPgotICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uc2VydmVyRGVmYXVsdGVyIj4KLSAgICAgIDxzZXJ2ZXJEZWZhdWx0ZXIKLSAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkF4aXNTZXJ2ZXJEZWZhdWx0ZXIiPgotICAgICAgPC9zZXJ2ZXJEZWZhdWx0ZXI+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPCEtLQotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndlYlNlcnZpY2VSdW50aW1lIj4KLSAgCTx3ZWJTZXJ2aWNlUnVudGltZQotICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIgotICAgIGxhYmVsPSIlTEFCRUxfUlVOVElNRV9BWElTXzExIgotICAgIHNlcnZpY2VUeXBlcz0ib3JnLmVjbGlwc2UuanN0LndzLnNlcnZpY2VUeXBlLmphdmEiCi0gICAgY2xpZW50VHlwZXM9Im9yZy5lY2xpcHNlLmpzdC53cy5jbGllbnRUeXBlLmphdmEud2ViT25seSIKLSAgICBzZXJ2bGV0TGV2ZWxzPSIyMyAyNCIKLSAgICBqMmVlTGV2ZWxzPSIxMyAxNCIKLSAgICBzZXJ2ZXJzPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlcm9uaW1vLjEwIgotICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlUnVudGltZSI+Ci0gIAk8L3dlYlNlcnZpY2VSdW50aW1lPgotCTwvZXh0ZW5zaW9uPiAKLSAgIC0tPgotICAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldFJlZ2lzdHJ5Ij4KLSAgICAgICA8d2lkZ2V0RmFjdG9yeSAgIAotICAgICAgICAgICAgIGlkPSJBeGlzQmVhbkNvbmZpZyIKLSAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suQlVDb25maWdDb21tYW5kIgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNCZWFuQ29uZmlnV2lkZ2V0RmFjdG9yeSIvPgotICAgIDwvZXh0ZW5zaW9uPiAKLSAgICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0UmVnaXN0cnkiPgotICAgICAgIDx3aWRnZXRGYWN0b3J5ICAgCi0gICAgICAgICAgICAgaWQ9IkF4aXNTa2VsZXRvbkNvbmZpZyIKLSAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suVERDb25maWdDb21tYW5kIgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNTa2VsZXRvbkNvbmZpZ1dpZGdldEZhY3RvcnkiLz4KLSAgICA8L2V4dGVuc2lvbj4gCi0gICAgCi0gICAgPCEtLSBNOSBleHRlbnNpb25zIC0tPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5ydW50aW1lcyI+Ci0gICAgICA8cnVudGltZQotICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIKLSAgICAgICAgbGFiZWw9IiVMQUJFTF9SVU5USU1FX0FYSVNfMTEiCi0gICAgICAgIHNlcnZlclJlcXVpcmVkPSJmYWxzZSIvPgotICAgIDwvZXh0ZW5zaW9uPgotCi0gICAgPCEtLSBkZWZpbmUgc3VwcG9ydCBmb3IgQXhpcyBKYXZhIGJlYW4gYm90dG9tIHVwIGFuZCB0b3AtZG93biBzdXBwb3J0IGluIHdlYiBwcm9qZWN0cyAtLT4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuc2VydmljZVJ1bnRpbWVzIj4KLSAgICAgIDxzZXJ2aWNlUnVudGltZQotICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uamF2YSIKLSAgICAgICAgc2VydmljZUltcGxlbWVudGF0aW9uVHlwZUlkPSJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmphdmEiCi0gICAgICAgIHJ1bnRpbWVJZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIKLSAgICAgICAgcnVudGltZUNoZWNrZXI9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQuQXhpc1dlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciIKLSAgICAgICAgYm90dG9tVXA9InRydWUiCi0gICAgICAgIHRvcERvd249InRydWUiCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlUnVudGltZSI+Ci0KLSAgICAgICAgPHJlcXVpcmVkLWZhY2V0LXZlcnNpb24gZmFjZXQ9ImpzdC53ZWIiIHZlcnNpb249IjIuMyIgYWxsb3ctbmV3ZXI9InRydWUiLz4KLQotICAgICAgPC9zZXJ2aWNlUnVudGltZT4KLSAgICA8L2V4dGVuc2lvbj4gICAKLQotICAgIDwhLS0gZGVmaW5lIHN1cHBvcnQgZm9yIEF4aXMgSmF2YSBjbGllbnRzIGluIEphdmEgcHJvamVjdHMgLS0+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmNsaWVudFJ1bnRpbWVzIj4KLSAgICAgIDxjbGllbnRSdW50aW1lCi0gICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5qYXZhIgotICAgICAgICBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGVJZD0ib3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEiCi0gICAgICAgIHJ1bnRpbWVJZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQuQXhpc1dlYlNlcnZpY2VSdW50aW1lIj4KLQotICAgICAgICA8cmVxdWlyZWQtZmFjZXQtdmVyc2lvbiBmYWNldD0ianN0LnV0aWxpdHkiIHZlcnNpb249IjEuMCIgYWxsb3ctbmV3ZXI9InRydWUiLz4KLQotICAgICAgPC9jbGllbnRSdW50aW1lPgotICAgIDwvZXh0ZW5zaW9uPiAgICAKLSAgICAKLSAgICA8IS0tIGRlZmluZSBzdXBwb3J0IGZvciBBeGlzIEphdmEgY2xpZW50cyBpbiBXZWIgcHJvamVjdHMgLS0+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmNsaWVudFJ1bnRpbWVzIj4KLSAgICAgIDxjbGllbnRSdW50aW1lCi0gICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi53ZWIiCi0gICAgICAgIGNsaWVudEltcGxlbWVudGF0aW9uVHlwZUlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSIKLSAgICAgICAgcnVudGltZUlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIgotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzV2ViU2VydmljZVJ1bnRpbWUiPgotCi0gICAgICAgIDxyZXF1aXJlZC1mYWNldC12ZXJzaW9uIGZhY2V0PSJqc3Qud2ViIiB2ZXJzaW9uPSIyLjMiIGFsbG93LW5ld2VyPSJ0cnVlIi8+Ci0KLSAgICAgIDwvY2xpZW50UnVudGltZT4KLSAgICA8L2V4dGVuc2lvbj4gICAgICAgIAotICAgIAotICAgIDwhLS0gZXh0ZW5kIFdlYlNlcnZpY2VTYW1wbGVUZXN0IHRvIHN1cHBvcnQgdGhlIEF4aXMgY2xpZW50IHJ1bnRpbWVzIC0tPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS50ZXN0ZXIiPgotICAgICAgPHRlc3RlcgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZVNhbXBsZVRlc3QiCi0gICAgICAgICBzdXBwb3J0ZWRDbGllbnRSdW50aW1lcz0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24ud2ViIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmphdmEiPgotICAgICAgPC90ZXN0ZXI+Ci0gICAgPC9leHRlbnNpb24+Ci0gICAgCi0gICAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuYW50RGF0YU1hcHBpbmciPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iSW5pdGlhbFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLkRlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iT2JqZWN0U2VsZWN0aW9uIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJKYXZhT3V0cHV0IgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1hcHBpbmdzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1ldGhvZHMiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUNvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU3R5bGUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUNvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iVXNlIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4gICAKLSAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkphdmFPdXRwdXQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iTWFwcGluZ3MiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPiAgIAotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iTWV0aG9kcyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQ29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+ICAgCi0JCTxtYXAKLSAgICAgICAgICAgICAga2V5PSJTdHlsZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQ29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+ICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJVc2UiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPiAgIAotICA8L2V4dGVuc2lvbj4gCi0KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL0F4aXNDcmVhdGlvblVJLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9BeGlzQ3JlYXRpb25VSS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGIwZjUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL0F4aXNDcmVhdGlvblVJLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwMjE2ICAgMTI2OTg5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwNjAzMjkJIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tICAtIEthdGh5IENoYW4KLSMgMjAwNjAzMjkJIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tICAtIEthdGh5IENoYW4KLSMgMjAwNjA2MDcgICAxNDQ5Nzgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotCi0jCi0jIEVycm9yIG1lc3NhZ2VzIHVzZWQgaW4gdGhpcyBwbHVnaW4KLSMKLU1TR19FUlJPUl9QUk9KRUNUX1VSTD1JV0FCMDUxNEUgVW5hYmxlIHRvIGdldCBVUkwgZm9yIHByb2plY3QgezB9Ci1NU0dfRVJST1JfQ0FOTk9UX05PX0pBVkFfQkVBTj1JV0FCMDAxNUUgQSBKYXZhIGJlYW4gd2FzIG5vdCBzZWxlY3RlZAotTVNHX0VSUk9SX05PX1BST0pFQ1Q9SVdBQjAwMTZFIEEgcHJvamVjdCB3YXMgbm90IHNlbGVjdGVkCi1NU0dfRVJST1JfQ0FOTk9UX0xPQURfSkFWQV9CRUFOPUlXQUIwMDE3RSBUaGUgSmF2YSBiZWFuLCB7MH0sIGNhbm5vdCBiZSBsb2FkZWQgZnJvbSB7MX0KLU1TR19FUlJPUl9KQVZBX01PRl9SRUZMRUNUX0ZBSUxFRD1JV0FCMDUyMUUgRmFpbGVkIHRvIGFuYWx5emUgdGhlIEphdmEgYmVhbjogezB9LgotTVNHX0VSUk9SX1JFQURfQkVBTj1JV0FCMDUyMkUgRXJyb3IgaW4gcmVhZGluZyBtZXRob2RzIGZyb20gSmF2YSBiZWFuLgotTVNHX0VSUk9SX1VQREFURV9BWElTX1dTREQ9SVdBQjA1MjRFIEVycm9yIHVwZGF0aW5nIEF4aXMgZGVwbG95LndzZGQgZmlsZQotCi0jCi0jSmF2YVRvV1NETE1ldGhvZENvbW1hbmQKLSMKLU1TR19FUlJPUl9KQVZBX1RPX01FVEhPRD1JV0FCMDAxOUUgRXJyb3IgaW4gZ2V0dGluZyBtZXRob2QgZnJvbSBKYXZhIGJlYW4uCi0KLSMKLSNVcGRhdGVXRUJYTUxDb21tYW5kCi0jCi1NU0dfRVJST1JfVVBEQVRFX1dFQl9YTUw9SVdBQjAwMjBFIEVycm9yIGluIGFkZGluZyBzZXJ2bGV0IGluIHdlYi54bWwuCi0KLSMKLSNVcGRhdGVBeGlzV1NEREZpbGVUYXNrCi0jCi1NU0dfUExVR0lOX0ZJTEVfVVJMPVByb2JsZW0gbG9jYXRpbmcgcGx1Z2luIGZpbGUKLQotIwotI1dlYlNlcnZpY2VXU0RMQXhpc1NlbGVjdGlvblBhZ2UKLSMKLVBBR0VfTVNHX05PX0ZJTEVfU1BFQ0lGSUVEPU5vIGZpbGUgc3BlY2lmaWVkLgotUEFHRV9NU0dfTk9fTUVUSE9EX1NFTEVDVEVEPU5vIG1ldGhvZHMgc2VsZWN0ZWQuCi0KLSMKLSNXZWJTZXJ2aWNlU2tlbGV0b25BeGlzQ29uZmlnUGFnZQotIwotVE9PTFRJUF9QQlNDX1BBR0U9Ci1UT09MVElQX1BCQ0ZfVEVYVF9VUkk9VGhlIFNPQVAgYm9keSBuYW1lc3BhY2UgYW5kIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBXZWIgc2VydmljZS4KLVRPT0xUSVBfUEJDRl9URVhUX1dTRExfRk9MREVSPVRoZSBmb2xkZXIgb2YgdGhlIFdTREwgZmlsZS4KLVRPT0xUSVBfUEJDRl9URVhUX1dTRExfRklMRT1UaGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlLgotTEFCRUxfVVJJPVdlYiBzZXJ2aWNlIFVSSToKLUxBQkVMX09VVFBVVF9GT0xERVJfTkFNRT1XU0RMIGZvbGRlcjoKLUxBQkVMX09VVFBVVF9GSUxFX05BTUU9V1NETCBmaWxlOgotCi0jCi0jV2ViU2VydmljZUF4aXNCZWFuQ2xhc3NQYWdlCi0jCi1QQUdFX1RJVExFX1dTQkVBTl9DTEFTUz1XZWIgU2VydmljZSBKYXZhIEJlYW4gU2VsZWN0aW9uCi1QQUdFX0RFU0NfV1NCRUFOX0NMQVNTPVNlbGVjdCBhIEphdmEgYmVhbgotTEFCRUxfRVhQTE9SRV9NQVBQSU5HU19CRUFOMlhNTD1EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIHBhY2thZ2UgdG8gbmFtZXNwYWNlLgotVE9PTFRJUF9QMk5fU0hPV19NQVBQSU5HUz1EZWZpbmUgcGFja2FnZSB0byBuYW1lc3BhY2UgbWFwcGluZyBmb3IgY3VzdG9taXphdGlvbi4KLQotIwotI1dlYlNlcnZpY2VBeGlzQmVhbkNvbmZpZ1BhZ2UKLSMKLVRPT0xUSVBfUEJDRl9QQUdFPQotVE9PTFRJUF9QQk1FX1RSRUVfTUVUSE9EUz1KYXZhIGJlYW4gbWV0aG9kcyB0byBpbmNsdWRlLgotUEFHRV9USVRMRV9XU0JFQU5fQ09ORklHPVdlYiBTZXJ2aWNlIEphdmEgQmVhbiBJZGVudGl0eQotUEFHRV9ERVNDX1dTQkVBTl9DT05GSUc9Q29uZmlndXJlIHRoZSBKYXZhIGJlYW4gYXMgYSBXZWIgc2VydmljZS4KLUxBQkVMX1NUWUxFX1VTRT1TdHlsZSBhbmQgdXNlCi1TVFlMRV9SUENfTElURVJBTD1kb2N1bWVudC9saXRlcmFsCi1TVFlMRV9ET0NfTElURVJBTD1kb2N1bWVudC9saXRlcmFsICh3cmFwcGVkKQotU1RZTEVfUlBDX0VOQ09ERUQ9UlBDL2VuY29kZWQKLQotIwotIyBBeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZAotIwotTVNHX0VSUk9SX0NPTVBJTEVSX0xFVkVMX05PVF9DT01QQVRJQkxFPVRoZSB3b3JrYmVuY2ggaXMgcnVubmluZyBvbiBKYXZhIFZNIHZlcnNpb24gezB9LCBob3dldmVyLCB0aGUgY29tcGlsZXIgY29tcGxpYW5jZSBsZXZlbCBvZiBcCi10aGUgcHJvamVjdCAiezF9IiBpcyBzZXQgdG8gSmF2YSB2ZXJzaW9uIHsyfS4gIFwKLUdlbmVyYXRpb24gb2YgYSBXZWIgc2VydmljZSBmcm9tIEphdmEgY2Fubm90IHByb2NlZWQgYmVjYXVzZSB0aGUgdG9vbHMgd2lsbCBiZSB1bmFibGUgdG8gcHJvY2VzcyB0aGUgY2xhc3MgZmlsZSBjb21waWxlZCB3aXRoaW4gdGhlIHByb2plY3QuICBcCi1UbyBjb3JyZWN0IHRoZSBwcm9ibGVtLCB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnM6IFwKLVxuMS4gT3BlbiBwcm9qZWN0IHByb3BlcnRpZXMsIHNlbGVjdCBQcm9qZWN0IEZhY2V0cywgYW5kIHVzZSBBZGQvUmVtb3ZlIFByb2plY3QgRmFjZXQgdG8gY2hhbmdlIEphdmEgdmVyc2lvbiB0byB7MH0gb3IgbG93ZXIuXAotXG4yLiBSZXN0YXJ0IHRoZSB3b3JrYmVuY2ggb24gYSB2ZXJzaW9uIHsyfSBKYXZhIFZNLgotCi0jCi0jIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kCi0jCi1NU0dfRVJST1JfTU9ESUZZX0VORFBPSU5UPUVycm9yIGluIG1vZGlmeWluZyB0aGUgc29hcDphZGRyZXNzIGxvY2F0aW9uIFVSSSBmb3IgV1NETCBmaWxlIHswfS4KLQotIwotIyBNZXNzYWdlcyBmb3IgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZAotIwotV1NJX0lOQ09NUExJQU5DRV9SUENfRU5DT0RFRD1SUEMgRW5jb2RlZCBpcyBzZWxlY3RlZAotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMzdlYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI5CSAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAgLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDMyOQkgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MDcgIDE0NDk3OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUFJPSkVDVF9VUkw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NBTk5PVF9OT19KQVZBX0JFQU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX05PX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NBTk5PVF9MT0FEX0pBVkFfQkVBTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSkFWQV9NT0ZfUkVGTEVDVF9GQUlMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1JFQURfQkVBTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVVBEQVRFX0FYSVNfV1NERDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSkFWQV9UT19NRVRIT0Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VQREFURV9XRUJfWE1MOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19QTFVHSU5fRklMRV9VUkw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9NU0dfTk9fRklMRV9TUEVDSUZJRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9NU0dfTk9fTUVUSE9EX1NFTEVDVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJTQ19QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJDRl9URVhUX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0ZfVEVYVF9XU0RMX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0ZfVEVYVF9XU0RMX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVVJJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX09VVFBVVF9GT0xERVJfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9PVVRQVVRfRklMRV9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NCRUFOX0NMQVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU0JFQU5fQ0xBU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRVhQTE9SRV9NQVBQSU5HU19CRUFOMlhNTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1AyTl9TSE9XX01BUFBJTkdTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJDRl9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJNRV9UUkVFX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU0JFQU5fQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU0JFQU5fQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NUWUxFX1VTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTVFlMRV9SUENfTElURVJBTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTVFlMRV9ET0NfTElURVJBTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTVFlMRV9SUENfRU5DT0RFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ09NUElMRVJfTEVWRUxfTk9UX0NPTVBBVElCTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX01PRElGWV9FTkRQT0lOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0lfSU5DT01QTElBTkNFX1JQQ19FTkNPREVEOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODM2M2VkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgc2VydmljZSBiZWFuIGlzIG5vdCBhdCBhIGNvbXBpbGVyIGNvbXBsaWFuY2Ugc2V0dGluZwotICogdGhhdCdzIGhpZ2hlciB0aGFuIHRoZSBKYXZhIFZNIHRoZSB3b3JrYmVuY2ggaXMgbGF1bmNoZWQgd2l0aC4gCi0gKi8KLXB1YmxpYyBjbGFzcyBBeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgU3RyaW5nIHNlcnZlclByb2plY3RfOwotCi0JLyoqCi0JICogRGVmYXVsdCBDVE9SCi0JICovCi0JcHVibGljIEF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kKCkgewotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMub3BlcmF0aW9ucy5JVW5kb2FibGVPcGVyYXRpb24jZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvciwgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUpCi0JICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlKSB7Ci0JCQotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCVN0cmluZyBqYXZhU3BlY1ZlcnNpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuc3BlY2lmaWNhdGlvbi52ZXJzaW9uIik7Ci0JCWlmIChqYXZhU3BlY1ZlcnNpb24gIT0gbnVsbCkKLQkJewotCQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2ZXJQcm9qZWN0Xyk7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7ICAgIAotCQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIHByb2plY3RDb21waWxlckxldmVsID0gamF2YVByb2plY3QuZ2V0T3B0aW9uKCJvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlIiwgZmFsc2UpOwotCQkJCWlmIChwcm9qZWN0Q29tcGlsZXJMZXZlbCA9PSBudWxsKQotCQkJCXsKLQkJCQkJcHJvamVjdENvbXBpbGVyTGV2ZWwgPSAoU3RyaW5nKUphdmFDb3JlLmdldERlZmF1bHRPcHRpb25zKCkuZ2V0KCJvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlIik7Ci0JCQkJfQotCQkJCWlmIChwcm9qZWN0Q29tcGlsZXJMZXZlbCAhPSBudWxsKQotCQkJCXsKLQkJCQkJaWYgKCFjb21waWxlckxldmVsc0NvbXBhdGlibGUoamF2YVNwZWNWZXJzaW9uLCBwcm9qZWN0Q29tcGlsZXJMZXZlbCkpIHsKLQkJCQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9DT01QSUxFUl9MRVZFTF9OT1RfQ09NUEFUSUJMRSwgbmV3IFN0cmluZ1tdIHtqYXZhU3BlY1ZlcnNpb24sIHNlcnZlclByb2plY3RfLCBwcm9qZWN0Q29tcGlsZXJMZXZlbH0pKTsKLQkJCQkJCWdldEVudmlyb25tZW50KCkuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJCX0JCQkKLQkJCQl9IAkKLQkJCX0KLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgSmF2YSBzcGVjaWZpY2F0aW9uIGxldmVsCi0JICogb2YgdGhlIEVjbGlwc2UgSlJFICg8Y29kZT5qYXZhU3BlY1ZlcnNpb248L2NvZGU+IGlzIG5vdAotCSAqIGxvd2VyIHRoYW4gdGhlIEphdmEgc3BlY2lmaWNhdGlvbiBsZXZlbCBvZiB0aGUgY29tcGlsZXIKLQkgKiAoPGNvZGU+cHJvamVjdENvbXBpbGVyTGV2ZWw8L2NvZGU+LiAKLQkgKiBAcGFyYW0gamF2YVNwZWNWZXJzaW9uIFRoZSBKYXZhIFNwZWNpZmljYXRpb24gVmVyc2lvbiBvZiB0aGUgSlJFLgotCSAqIEBwYXJhbSBwcm9qZWN0Q29tcGlsZXJMZXZlbCBUaGUgSmF2YSBwcm9qZWN0J3MgY29tcGlsZXIgbGV2ZWwuCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBKYXZhIHNwZWNpZmljYXRpb24gbGV2ZWwgb2YgdGhlIHByb2plY3QncwotCSAqIGNvbXBpbGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgSmF2YSBzcGVjaWZpY2F0aW9uIGxldmVsIG9mIHRoZQotCSAqIEpSRSB0aGF0IEVjbGlwc2UgaXMgcnVubmluZyBvbiwgYW5kIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gY29tcGlsZXJMZXZlbHNDb21wYXRpYmxlKFN0cmluZyBqYXZhU3BlY1ZlcnNpb24sIFN0cmluZyBwcm9qZWN0Q29tcGlsZXJMZXZlbCkgewotCQlyZXR1cm4gKGphdmFTcGVjVmVyc2lvbi5jb21wYXJlVG8ocHJvamVjdENvbXBpbGVyTGV2ZWwpID49IDApOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHByb2plY3Qgd2hvc2UgY29tcGlsZXIgbGV2ZWwgc2hvdWxkIGJlIGNoZWNrZWQuCi0JICogQHBhcmFtIHNlcnZlclByb2plY3QgVGhlIHByb2plY3Qgd2hvc2UgY29tcGlsZXIgbGV2ZWwgc2hvdWxkIGJlIGNoZWNrZWQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChTdHJpbmcgc2VydmVyUHJvamVjdCkgewotCQlzZXJ2ZXJQcm9qZWN0XyA9IHNlcnZlclByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzT3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzT3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTZkYTNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc091dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQuQXhpc1dlYlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIEF4aXNPdXRwdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBBeGlzV2ViU2VydmljZSB3c187Ci0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXzsKLQotCXByaXZhdGUgU3RyaW5nICAgICAgICAgICAgd3NkbFVSSV87Ci0JICAJICAKLQkJLyoqCi0JCSogRGVmYXVsdCBDVE9SCi0JCSovCi0JCXB1YmxpYyBBeGlzT3V0cHV0Q29tbWFuZCgpIHsKLQkJfQotCQkKLQkJcHVibGljIEF4aXNPdXRwdXRDb21tYW5kKEF4aXNXZWJTZXJ2aWNlIHdzKSB7Ci0JCQl3c18gPSB3czsKLQkJfQotCQkKLQkJcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCQl7Ci0JCSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsgIAkKLQkJICAJd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuc2V0V3NkbFVSTCh3c2RsVVJJXyk7Ci0JCQlBeGlzV2ViU2VydmljZUluZm8gYXhpc1dTSW5mbyA9IG5ldyBBeGlzV2ViU2VydmljZUluZm8oKTsKLQkJCWF4aXNXU0luZm8uc2V0SmF2YVdTRExQYXJhbWV0ZXIoamF2YVdTRExQYXJhbV8pOwotCQkJd3NfLnNldEF4aXNXZWJTZXJ2aWNlSW5mbyhheGlzV1NJbmZvKTsJCSAgICAKLQkJICAJCi0JCSAgCXJldHVybiBzdGF0dXM7ICAgICAgCQotCQkgIH0KLQotCQkgIC8qKgotCQkgICAqIEBwYXJhbSB3c2RsVVJJCi0JCSAgICogICAgICAgICAgICBUaGUgd3NkbFVSSSB0byBzZXQuCi0JCSAgICovCi0JCSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLQkJICB7Ci0JCSAgICB3c2RsVVJJXyA9IHdzZGxVUkk7Ci0JCSAgfQotCi0JCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0gKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1fKSB7Ci0JCQl0aGlzLmphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbV87Ci0JCX0KLQkJICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1J1bklucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzUnVuSW5wdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5Njc0ODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzUnVuSW5wdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBBeGlzUnVuSW5wdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb257Ci0JCi0JcHJpdmF0ZSBBeGlzV2ViU2VydmljZSB3c187Ci0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXzsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJQcm9qZWN0XzsgCi0JcHJpdmF0ZSBTdHJpbmcgc2VydmVySW5zdGFuY2VJZF87IAotCXByaXZhdGUgU3RyaW5nIHNlcnZlckZhY3RvcnlJZF87Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSV87Ci0JCi0JcHVibGljIEF4aXNSdW5JbnB1dENvbW1hbmQoKSB7Ci0JfQotCQotCXB1YmxpYyBBeGlzUnVuSW5wdXRDb21tYW5kKEF4aXNXZWJTZXJ2aWNlIHdzLCBTdHJpbmcgcHJvamVjdCkgewotCQl3c18gPSB3czsKLQkJc2VydmVyUHJvamVjdF8gPSBwcm9qZWN0OyAKLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkgCWphdmFXU0RMUGFyYW1fID0gd3NfLmdldEF4aXNXZWJTZXJ2aWNlSW5mbygpLmdldEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0JIAlzZXJ2ZXJJbnN0YW5jZUlkXyA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkgCXNlcnZlckZhY3RvcnlJZF8gPSB3c18uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLQkgCXdzZGxVUklfID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0V3NkbFVSTCgpOwotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0JCi0JIC8qKgotCSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJQcm9qZWN0LgotCSAgICovCi0JICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclByb2plY3QoKQotCSAgewotCQkgIHJldHVybiBzZXJ2ZXJQcm9qZWN0XzsKLQkgIH0KLQkgIAotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbV87Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJJbnN0YW5jZUlkKCkgewotCQlyZXR1cm4gc2VydmVySW5zdGFuY2VJZF87Ci0JfQkKLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlckZhY3RvcnlJZCgpIHsKLQkJcmV0dXJuIHNlcnZlckZhY3RvcnlJZF87Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQlyZXR1cm4gd3NkbFVSSV87Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1NlcnZlckRlZmF1bHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzU2VydmVyRGVmYXVsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNzhiNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9BeGlzU2VydmVyRGVmYXVsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uSVNlcnZlckRlZmF1bHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlNlcnZlckluZm87Ci0KLQotCi1wdWJsaWMgY2xhc3MgQXhpc1NlcnZlckRlZmF1bHRlciBpbXBsZW1lbnRzIElTZXJ2ZXJEZWZhdWx0ZXIKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uSVNlcnZlckRlZmF1bHRlciNyZWNvbW1lbmREZWZhdWx0U2VydmVyKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0KQotICAgKi8KLSAgcHVibGljIFNlcnZlckluZm8gcmVjb21tZW5kRGVmYXVsdFNlcnZlcihJUHJvamVjdCBwcm9qZWN0KQotICB7ICAgIAotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0JVQXhpc0lucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUF4aXNJbnB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5M2UyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0JVQXhpc0lucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW4uV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkpBWFJQQ1dlYlNlcnZpY2VBbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotCi0KLXB1YmxpYyBjbGFzcyBCVUF4aXNJbnB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JCi0JcHJpdmF0ZSBJV2ViU2VydmljZSB3c187Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUHJvamVjdF87IAotCXByaXZhdGUgU3RyaW5nIGphdmFCZWFuTmFtZV87Ci0KLQkgIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOwotCSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gPSBudWxsOwotCSAgCi0JCS8qKgotCQkqIERlZmF1bHQgQ1RPUgotCQkqLwotCQlwdWJsaWMgQlVBeGlzSW5wdXRDb21tYW5kKCkgewotCQl9Ci0JCQotCQlwdWJsaWMgQlVBeGlzSW5wdXRDb21tYW5kKElXZWJTZXJ2aWNlIHdzLCBTdHJpbmcgcHJvamVjdCkgewotCQkJd3NfID0gd3M7Ci0JCQlzZXJ2ZXJQcm9qZWN0XyA9IHByb2plY3Q7IAotCQl9Ci0JCQotCQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JCXsKLQkgICAgICAgCi0JCVN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JCWphdmFCZWFuTmFtZV8gPSB3c18uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRJbXBsVVJMKCk7Ci0JCQotCQkvLyBUaGUgZm9sbG93aW5nICJpZiIgYmxvY2sgZHJpdmVzIHZhbGlkYXRpb24gb2YgdGhlIGdpdmVuCi0JCS8vIEphdmEgc2VydmljZSBjbGFzcyAoamF2YUJlYW5OYW1lXykgYWdhaW5zdCBKQVgtUlBDIGlmIHRoZQotCQkvLyBKQVgtUlBDIHZhbGlkYXRpb24gcHJlZmVyZW5jZSBpcyBzd2l0Y2hlZCBvbi4KLQkJLy8gRm9yIHRoZSBtb3N0IHBhcnQsIHRoZSBKQVgtUlBDIGFuYWx5emVyIHJldHVybnMgd2FybmluZ3MKLQkJLy8gZm9yIHZpb2xhdGlvbnMgb2YgdGhlIEpBWC1SUEMgc3BlYywgYW5kIGVycm9ycyBvbmx5IGlmCi0JCS8vIGFjdHVhbCBKRFQgbW9kZWwgbmF2aWdhdGlvbiBmYWlscyBkdWUgdG8gYmFkIGNsYXNzcGF0aHMuCi0JCS8vIFRoaXMgYWxsb3dzIHVzZXJzIHRoZSBjaG9pY2Ugb2YgaGVlZGluZyBvciBpZ25vcmluZyB0aGUKLQkJLy8gbWVzc2FnZXMgcmV0dXJuZWQgYnkgdGhlIGFuYWx5emVyLgotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlBeGlzRW1pdHRlckNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0QXhpc0VtaXR0ZXJDb250ZXh0KCk7Ci0JCWlmIChqYXZhQmVhbk5hbWVfICE9IG51bGwgJiYgY29udGV4dC5pc1ZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoKSkKLQkJewotCQkJSkFYUlBDV2ViU2VydmljZUFuYWx5emVyIGFuYWx5emVyID0gbmV3IEpBWFJQQ1dlYlNlcnZpY2VBbmFseXplcigpOwotCQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChzZXJ2ZXJQcm9qZWN0Xyk7IAotCQkJaWYgKHByb2plY3QgIT0gbnVsbCkKLQkJCXsKLQkJCQlJU3RhdHVzIHN0YXR1cyA9IGFuYWx5emVyLmFuYWx5emUocHJvamVjdCxqYXZhQmVhbk5hbWVfLG1vbml0b3IpOwotCQkJCWlmICghc3RhdHVzLmlzT0soKSkKLQkJCQl7Ci0JCQkJCXRyeQotCQkJCQl7Ci0JCQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cyk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBlKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIiIsbnVsbCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChzZXJ2ZXJJbnN0YW5jZUlkICE9IG51bGwpIHsgLy8gc2VydmVyIGV4aXN0cwotCSAgICAJc2VydmljZUV4aXN0aW5nU2VydmVyXyA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2ZXJJbnN0YW5jZUlkKTsKLQkJCWlmIChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfICE9IG51bGwpCi0JCSAgICB7Ci0JCSAgICAgIHNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmljZUV4aXN0aW5nU2VydmVyXy5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkJICAgIH0KLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgCXNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmVyRmFjdG9yeUlkOwotCSAgICB9Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQkgIAotCQkvKioKLQkJICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlclByb2plY3QuCi0JCSAgICovCi0JCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJQcm9qZWN0KCkKLQkJICB7Ci0JCQkgIHJldHVybiBzZXJ2ZXJQcm9qZWN0XzsKLQkJICB9Ci0KLQkJICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoKQotCQkgIHsKLQkJICAgIHJldHVybiBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLQkJICB9Ci0KLQkJcHVibGljIFN0cmluZyBnZXRKYXZhQmVhbk5hbWUoKSB7Ci0JCQlyZXR1cm4gamF2YUJlYW5OYW1lXzsKLQkJfQotCQkKLQkJcHVibGljIElTZXJ2ZXIgZ2V0U2VydmljZUV4aXN0aW5nU2VydmVyKCkKLQkJICB7Ci0JCSAgICByZXR1cm4gc2VydmljZUV4aXN0aW5nU2VydmVyXzsKLQkJICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0JVQ29kZUdlbk9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUNvZGVHZW5PcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFlMjI1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0JVQ29kZUdlbk9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgIAotICogMjAwNjA1MDkgICAxMjUwOTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1LCBVc2UgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTE3ICAgMTQyMzI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLkphdmEyV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLldTREwySmF2YUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5Db3B5QXhpc0phckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5SZWZyZXNoUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5VcGRhdGVBeGlzV1NEREZpbGVUYXNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBCVUNvZGVHZW5PcGVyYXRpb24gZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQkvLyBDb3B5QXhpc0phckNvbW1hbmQKLQlwcml2YXRlIENvcHlBeGlzSmFyQ29tbWFuZCBjb3B5QXhpc0phckNvbW1hbmQgPSBudWxsOwotCQotCS8vIEphdmEyV1NETENvbW1hbmQKLQlwcml2YXRlIEphdmEyV1NETENvbW1hbmQgamF2YTJXU0RMQ29tbWFuZCA9IG51bGw7Ci0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOyAgCi0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsgCi0JCi0JLy8gd3NkbDJKYXZhQ29tbWFuZAotCXByaXZhdGUgV1NETDJKYXZhQ29tbWFuZCB3c2RsMkphdmFDb21tYW5kID0gbnVsbDsKLQkJCi0JLy8gVXBkYXRlQXhpc1dTRERGaWxlVGFzawotCXByaXZhdGUgVXBkYXRlQXhpc1dTRERGaWxlVGFzayB1cGRhdGVBeGlzV3NkZENvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3Q7Ci0JCi0JLy8gVXBkYXRlV0VCWE1MQ29tbWFuZAotCXByaXZhdGUgVXBkYXRlV0VCWE1MQ29tbWFuZCB1cGRhdGVXZWJYTUxDb21tYW5kID0gbnVsbDsKLQkKLQkvLyBSZWZyZXNoUHJvamVjdENvbW1hbmQKLQlwcml2YXRlIFJlZnJlc2hQcm9qZWN0Q29tbWFuZCByZWZyZXNoUHJvamVjdENvbW1hbmQgPSBudWxsOwotCi0JLyoqCi0JICogVGhpcyBjb21tYW5kIHJ1bnMgdGhlIGNvbW1hbmRzIGluIHRoZSBjb25zdHJ1Y3RvciBpbiBhIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbi4KLQkgKiBUaGUgY29tbWFuZHMgYXJlIGxpc3RlZCBhYm92ZSwgYWxvbmcgd2l0aCB0aGVpciByZWxldmFudCBkYXRhIHJlZ2lzdHJ5IHBhcmFtZXRlcnMgCi0JICogQHBhcmFtIGphdmEyV1NETAotCSAqIEBwYXJhbSB3c2RsMkphdmEKLQkgKiBAcGFyYW0gdXBkYXRlQXhpc1dzZGQKLQkgKiBAcGFyYW0gdXBkYXRlV2ViWE1MCi0JICovCi0JcHVibGljIEJVQ29kZUdlbk9wZXJhdGlvbigpewotCQljb3B5QXhpc0phckNvbW1hbmQgPSBuZXcgQ29weUF4aXNKYXJDb21tYW5kKCk7Ci0JCWphdmEyV1NETENvbW1hbmQgPSBuZXcgSmF2YTJXU0RMQ29tbWFuZCgpOwotCQl3c2RsMkphdmFDb21tYW5kID0gbmV3IFdTREwySmF2YUNvbW1hbmQoKTsKLQkJdXBkYXRlQXhpc1dzZGRDb21tYW5kID0gbmV3IFVwZGF0ZUF4aXNXU0RERmlsZVRhc2soKTsKLQkJdXBkYXRlV2ViWE1MQ29tbWFuZCA9IG5ldyBVcGRhdGVXRUJYTUxDb21tYW5kKCk7Ci0JCXJlZnJlc2hQcm9qZWN0Q29tbWFuZCA9IG5ldyBSZWZyZXNoUHJvamVjdENvbW1hbmQoKTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB7Ci0KLQkJSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0JCUJvdHRvbVVwV1NNb2RpZnlPcGVyYXRpb24gYnVPcGVyYXRpb24gPSBuZXcgQm90dG9tVXBXU01vZGlmeU9wZXJhdGlvbihpbmZvLCBlbnYpOwotCQl0cnkgewotCQkJYnVPcGVyYXRpb24uZXhlY3V0ZShtb25pdG9yKTsKLQkJfQotCQljYXRjaChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCUlTdGF0dXMgc3RhdHVzID0gY2UuZ2V0U3RhdHVzKCk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JfQotCi0JcHJpdmF0ZSBjbGFzcyBCb3R0b21VcFdTTW9kaWZ5T3BlcmF0aW9uIGV4dGVuZHMgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIHsKLQkJCi0JCSAgcHJpdmF0ZSBJQWRhcHRhYmxlIGluZm8gPSBudWxsOwotCQkgIHByaXZhdGUgSUVudmlyb25tZW50IGVudiA9IG51bGw7Ci0KLQkJICAKLQkJICBwcm90ZWN0ZWQgQm90dG9tVXBXU01vZGlmeU9wZXJhdGlvbihJQWRhcHRhYmxlIGFkYXB0YWJsZSwgSUVudmlyb25tZW50IGVudmlyb25tZW50KXsKLQkJCSAgaW5mbyA9IGFkYXB0YWJsZTsKLQkJCSAgZW52ID0gZW52aXJvbm1lbnQ7Ci0JCSAgfQotCQkgIAotCQkgIHByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbnsKLQkJICAKLQkJCSAgICBJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCQkgIAotCQkJICAgIC8vIENvcHlBeGlzSmFyQ29tbWFuZAotCQkJICAgIGNvcHlBeGlzSmFyQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJICAgIGNvcHlBeGlzSmFyQ29tbWFuZC5zZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0KTsKLQkJCSAgICBzdGF0dXMgPSBjb3B5QXhpc0phckNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCSAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKXsKLQkJCSAgICAJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCSAgICB9Ci0JCQkgICAgCi0JCQkgIAkvLyBKYXZhMldTRExDb21tYW5kCi0JCQkJamF2YTJXU0RMQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCWphdmEyV1NETENvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCQlzdGF0dXMgPSBqYXZhMldTRExDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQl3c2RsVVJJID0gamF2YTJXU0RMQ29tbWFuZC5nZXRXc2RsVVJJKCk7Ci0JCQkJCi0JCQkJLy8gV1NETDJKYXZhQ29tbWFuZAotCQkJCXdzZGwySmF2YUNvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCQl3c2RsMkphdmFDb21tYW5kLnNldEphdmFXU0RMUGFyYW0oamF2YVdTRExQYXJhbSk7Ci0JCQkJc3RhdHVzID0gd3NkbDJKYXZhQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJamF2YVdTRExQYXJhbSA9IHdzZGwySmF2YUNvbW1hbmQuZ2V0SmF2YVdTRExQYXJhbSgpOwotCQkJCQotCQkJCS8vIFVwZGF0ZUF4aXNXc2RkQ29tbWFuZAotCQkJCXVwZGF0ZUF4aXNXc2RkQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXVwZGF0ZUF4aXNXc2RkQ29tbWFuZC5zZXRKYXZhV1NETFBhcmFtKGphdmFXU0RMUGFyYW0pOwotCQkJCXVwZGF0ZUF4aXNXc2RkQ29tbWFuZC5zZXRTZXJ2aWNlUHJvamVjdChzZXJ2aWNlUHJvamVjdCk7Ci0JCQkJc3RhdHVzID0gdXBkYXRlQXhpc1dzZGRDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJCX0KLQkJCQlqYXZhV1NETFBhcmFtID0gdXBkYXRlQXhpc1dzZGRDb21tYW5kLmdldEphdmFXU0RMUGFyYW0oKTsKLQkJCQkKLQkJCQkvLyBVcGRhdGVXZWJYTUxDb21tYW5kCi0JCQkJdXBkYXRlV2ViWE1MQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXVwZGF0ZVdlYlhNTENvbW1hbmQuc2V0U2VydmVyUHJvamVjdChzZXJ2aWNlUHJvamVjdCk7Ci0JCQkJc3RhdHVzID0gdXBkYXRlV2ViWE1MQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJCi0JCQkJLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldFByb2plY3Qoc2VydmljZVByb2plY3QpOwotCQkJCXN0YXR1cyA9IHJlZnJlc2hQcm9qZWN0Q29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0KLQkJCSAgCi0JCSAgfQotCQkKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKSB7Ci0JCXJldHVybiB3c2RsVVJJOwotCX0KLQkKLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0JCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpIHsKLQkJdGhpcy5zZXJ2aWNlUHJvamVjdCA9IHNlcnZpY2VQcm9qZWN0OwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9Db3B5RGVwbG95bWVudEZpbGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NDdlMTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9Db3B5RGVwbG95bWVudEZpbGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTMwNzU1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MTIyMSAgIDE2ODc4NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA4MTUgICAxODg5OTkgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbEZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbEZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLklNb2R1bGVQdWJsaXNoSGVscGVyOwotCi0vKioKLSAqIAotICogVGhpcyBjb21tYW5kIGNvcGllcyB0aGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgdG8gaXQncyBwcm9wZXIgbG9jYXRpb24gaW4gdGhlIG1vZHVsZS4KLSAqIAotICovCi0KLXB1YmxpYyBjbGFzcyBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXRUJfSU5GID0gIldFQi1JTkYiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUl9DT05GSUcgPSAic2VydmVyLWNvbmZpZy53c2RkIjsKLSAgICBwcml2YXRlIFN0cmluZyBwcm9qZWN0TmFtZV87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgRUFSUHJvamVjdE5hbWVfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWRfOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kLgotICogQHBhcmFtIFN0cmluZyBkZXNjcmlwdGlvbgotICogQHBhcmFtIFN0cmluZyBuYW1lCi0gICAqIAotICAgKi8KLSAgcHVibGljIENvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQoIFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nIGVhclByb2plY3ROYW1lICkKLSAgeyAKLSAgICBwcm9qZWN0TmFtZV8gICA9IHByb2plY3ROYW1lOwotICAgIEVBUlByb2plY3ROYW1lXyAgID0gZWFyUHJvamVjdE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0gIHsKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JICAKLQkgIEZpbGVJbnB1dFN0cmVhbSBmaW5TdHJlYW0gPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gSjJFRVV0aWxzLmdldFZpcnR1YWxDb21wb25lbnQoIHByb2plY3ROYW1lXyApOwotCQkgIElTZXJ2ZXIgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKCBzZXJ2ZXJJbnN0YW5jZUlkXyApOwotCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWVfKTsKLQkJICBJTW9kdWxlIHByb2plY3RNb2R1bGUgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZShwcm9qZWN0KTsKLQkJICAKLQkJICBpZiAoc2VydmVyICE9IG51bGwgJiYgY29tcG9uZW50ICE9IG51bGwgJiYgcHJvamVjdE1vZHVsZSAhPSBudWxsKSB7Ci0JCQkgIElNb2R1bGVQdWJsaXNoSGVscGVyIHB1Ymxpc2hIZWxwZXIgPSAoSU1vZHVsZVB1Ymxpc2hIZWxwZXIpIAotCQkJICAJc2VydmVyLmxvYWRBZGFwdGVyKElNb2R1bGVQdWJsaXNoSGVscGVyLmNsYXNzLCBtb25pdG9yKTsKLQkJCSAgaWYgKHB1Ymxpc2hIZWxwZXIgIT0gbnVsbCkgewotCQkJCSAgSU1vZHVsZVtdIHNlcnZlck1vZHVsZXM7Ci0JCQkJICBpZiAoRUFSUHJvamVjdE5hbWVfID09IG51bGwpIHsKLQkJCQkJICBzZXJ2ZXJNb2R1bGVzID0gbmV3IElNb2R1bGUgW10ge3Byb2plY3RNb2R1bGV9OwotCQkJCSAgfSBlbHNlIHsKLQkJCQkJICBJUHJvamVjdCBFQVJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KEVBUlByb2plY3ROYW1lXyk7Ci0JCQkJCSAgSU1vZHVsZSBFQVJQcm9qZWN0TW9kdWxlID0gU2VydmVyVXRpbC5nZXRNb2R1bGUoRUFSUHJvamVjdCk7Ci0JCQkJCSAgc2VydmVyTW9kdWxlcyA9IG5ldyBJTW9kdWxlIFtdIHtFQVJQcm9qZWN0TW9kdWxlLCBwcm9qZWN0TW9kdWxlfTsKLQkJCQkgIH0KLQkJCQkgIElQYXRoIHB1Ymxpc2hEaXJQYXRoID0gcHVibGlzaEhlbHBlci5nZXRQdWJsaXNoRGlyZWN0b3J5KHNlcnZlck1vZHVsZXMpOwotCQkJCSAgCi0JCQkJICBpZiAocHVibGlzaERpclBhdGggIT0gbnVsbCkgewotCQkJCQkgIElWaXJ0dWFsRm9sZGVyIHJvb3RGb2xkZXIgPSBjb21wb25lbnQuZ2V0Um9vdEZvbGRlcigpOwotCQkJCQkgIElQYXRoIHJvb3RGb2xkZXJQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZShyb290Rm9sZGVyLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpKS5nZXRMb2NhdGlvbigpOwotCQkJCQkgIGlmIChyb290Rm9sZGVyUGF0aCAhPSBudWxsKSB7Ci0JCQkJCQkgIEZpbGUgcm9vdEZvbGRlckZpbGUgPSByb290Rm9sZGVyUGF0aC50b0ZpbGUoKTsKLQkJCQkJCSAgRmlsZSBwdWJsaXNoRGlyRmlsZSA9IHB1Ymxpc2hEaXJQYXRoLnRvRmlsZSgpOwotCQkJCQkJICBpZiAoIXJvb3RGb2xkZXJGaWxlLmVxdWFscyhwdWJsaXNoRGlyRmlsZSkpIHsKLQkJCQkJCQkgIC8vIGNvcHkgdGhlIHNlcnZlci1jb25maWcud3NkZCBpZiB0aGUgcHVibGlzaCBkaXJlY3RvcnkgaXMgbm90IGluIHRoZSBzYW1lIGFzIHRoZSBwcm9qZWN0IHJvb3QgZm9sZGVyCi0JCQkJCQkJICBJUGF0aCBwYXRoID0gbmV3IFBhdGgoIFdFQl9JTkYgKS5hcHBlbmQoIFNFUlZFUl9DT05GSUcgKTsKLQkJCQkJCQkgIElQYXRoIHNlcnZlckNvbmZpZ1BhdGggPSBwdWJsaXNoRGlyUGF0aC5hcHBlbmQocGF0aCk7Ci0JCQkJCQkJICBpZiAoc2VydmVyQ29uZmlnUGF0aCAhPSBudWxsKSB7CQkJICAKLQkJCQkJCQkJICBJVmlydHVhbEZpbGUgbmV3TG9jYXRpb24gPSByb290Rm9sZGVyLmdldEZpbGUocGF0aCk7Ci0JCQkJCQkJCSAgSVBhdGggdGFyZ2V0UGF0aCA9IG5ld0xvY2F0aW9uLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQkJCQkJCQkgIGlmICh0YXJnZXRQYXRoICE9IG51bGwpIHsKLQkJCQkJCQkJCSAgZmluU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzZXJ2ZXJDb25maWdQYXRoLnRvU3RyaW5nKCkpOwotCQkJCQkJCQkJICBpZiAoZmluU3RyZWFtICE9IG51bGwpIAotCQkJCQkJCQkJICB7Ci0JCQkJCQkJCQkJICBJU3RhdHVzSGFuZGxlciAgc3RhdHVzSGFuZGxlciA9IGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKTsKLQkJCQkJCQkJCSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCAgICAgICA9ICgoQmFzZUVjbGlwc2VFbnZpcm9ubWVudCllbnZpcm9ubWVudCkuZ2V0UmVzb3VyY2VDb250ZXh0KCk7Ci0JCQkJCQkJCQkgICAgCi0JCQkJCQkJCQkJICBGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGNvbnRleHQsICAKLQkJCQkJCQkJCQkJCSAgdGFyZ2V0UGF0aCwKLQkJCQkJCQkJCQkJCSAgZmluU3RyZWFtLAotCQkJCQkJCQkJCQkJICBtb25pdG9yLAotCQkJCQkJCQkJCQkJICBzdGF0dXNIYW5kbGVyKTsKLQkJCQkJCQkJCQkgIGZpblN0cmVhbS5jbG9zZSgpOwotCQkJCQkJCQkJICB9Ci0JCQkJCQkJCSAgfQotCQkJCQkJCSAgfQotCQkJCQkJICB9Ci0JCQkJCSAgfQotCQkJCSAgfSAgCi0JCQkgIH0gCSAgCQkgIAotCQkgIH0JICAKLQkgIH0KLQkgIGNhdGNoKCBUaHJvd2FibGUgZSApCi0JICB7Ci0JCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9NT1ZFX1JFU09VUkNFLCBuZXcgU3RyaW5nW117ZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCl9KSwgZSk7Ci0JCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JICB9IGZpbmFsbHkgewotCQkgIGlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJICB0cnkgewotCQkJCSAgZmluU3RyZWFtLmNsb3NlKCk7Ci0JCQkgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCSAgfQotCQkgIH0JCQkKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHN0YXR1czsKLQkgIAotICB9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKSB7Ci0JCXRoaXMuc2VydmVySW5zdGFuY2VJZF8gPSBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMzNDE4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0phdmFUb1dTRExNZXRob2RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KYXZhTU9GVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIEphdmFUb1dTRExNZXRob2RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEpBVkFfRVhURU5TSU9OID0gIi5qYXZhIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBDTEFTU19FWFRFTlNJT04gPSAiLmNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBIYXNodGFibGUgZk1ldGhvZE5hbWVzOwotCXByaXZhdGUgU3RyaW5nIGZDbGFzc05hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgZmJlYW5CYXNlTmFtZTsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1fOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotCi0JLyoqCi0JKiBEZWZhdWx0IENUT1IKLQkqLwotCXB1YmxpYyBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZCgpIHsKLQl9Ci0JLyoqCi0JKiBEZWZhdWx0IENUT1IKLQkqLwotCXB1YmxpYyBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZCgKLQkJSmF2YVdTRExQYXJhbWV0ZXIgamF2YVBhcmFtZXRlciwKLQkJSVByb2plY3Qgc2VydmljZVByb2plY3QpIHsKLQkJamF2YVdTRExQYXJhbV8gPSBqYXZhUGFyYW1ldGVyOwotCQlzZXJ2aWNlUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLQotCX0KLQotCS8qKgotCSogSmF2YVRvVG9XU0RMTWV0aG9kIGV4ZWN1dGUKLQkqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkJZmJlYW5CYXNlTmFtZSA9IGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCk7Ci0JCWVudmlyb25tZW50LmdldExvZygpLmxvZyhJTG9nLklORk8sIDUwNzAsIHRoaXMsICJleGVjdXRlIiwgImJlYW5CYXNlTmFtZSA9ICIrZmJlYW5CYXNlTmFtZSk7Ci0JCUlTdGF0dXMgc3RhdHVzOwotCQl0cnkgewotCQkJLy9HZXQgdGhlIHF1YWxpZmllZCBiZWFuIG5hbWU7IG15LnBhY2thZ2UuTXlDbGFzcwotCQkJZk1ldGhvZE5hbWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCQkJSGFzaHRhYmxlIG9sZE1ldGhvZHNOYW1lcyA9IGphdmFXU0RMUGFyYW1fLmdldE1ldGhvZHMoKTsKLQkJCVN0cmluZyBxTmFtZSA9IGZiZWFuQmFzZU5hbWU7Ci0KLQkJCWlmIChxTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKEpBVkFfRVhURU5TSU9OKQotCQkJCXx8IHFOYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoQ0xBU1NfRVhURU5TSU9OKSkgewotCQkJCXFOYW1lID0gcU5hbWUuc3Vic3RyaW5nKDAsIHFOYW1lLmxhc3RJbmRleE9mKCcuJykpOwotCQkJfQotCi0JCQlKYXZhQ2xhc3MgamF2YUNsYXNzID0gSmF2YU1PRlV0aWxzLmdldEphdmFDbGFzcyhxTmFtZSwgc2VydmljZVByb2plY3RfKTsKLQkJCQotCQkJaWYgKCFqYXZhQ2xhc3MuaXNFeGlzdGluZ1R5cGUoKSkgewotCQkJCWVudmlyb25tZW50LmdldExvZygpLmxvZyhJTG9nLkVSUk9SLCA1MDIyLCB0aGlzLCAiZXhlY3V0ZSIsIAotCQkJCQkJTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9NT0ZfUkVGTEVDVF9GQUlMRUQsCi0JCQkJCQluZXcgU3RyaW5nW10geyBxTmFtZSB9KSk7Ci0JCQkJCi0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoCi0JCQkJCQlOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX01PRl9SRUZMRUNUX0ZBSUxFRCwKLQkJCQkJbmV3IFN0cmluZ1tdIHsgcU5hbWUgfSkpOwotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0KLQkJCS8vIEdldCB0aGUgcXVhbGlmaWVkIG5hbWUKLQkJCWZDbGFzc05hbWUgPSBqYXZhQ2xhc3MuZ2V0UXVhbGlmaWVkTmFtZSgpOwotCQkJU3RyaW5nIGJlYW5OYW1lOwotCQkJaWYgKGZDbGFzc05hbWUubGFzdEluZGV4T2YoJy4nKSAhPSAtMSkgewotCQkJCWJlYW5OYW1lID0KLQkJCQkJZkNsYXNzTmFtZS5zdWJzdHJpbmcoCi0JCQkJCQlmQ2xhc3NOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxLAotCQkJCQkJZkNsYXNzTmFtZS5sZW5ndGgoKSk7Ci0JCQl9IGVsc2UKLQkJCQliZWFuTmFtZSA9IGZDbGFzc05hbWU7Ci0KLQkJCS8vIFdhbGsgdGhlIGphdmEgY2xhc3MgYW5kIGdldCB0aGUgbWV0aG9kIG5hbWVzCi0JCQlnYXRoZXJNZXRob2RzKGphdmFDbGFzcywgYmVhbk5hbWUsIG9sZE1ldGhvZHNOYW1lcyk7Ci0JCQkvKgotCQkJSXRlcmF0b3IgbSA9IGphdmFDbGFzcy5nZXRQdWJsaWNNZXRob2RzRXh0ZW5kZWQoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKG0uaGFzTmV4dCgpKSB7Ci0JCQkJTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpIG0ubmV4dCgpOyAgCi0JCQkJaWYgKCAhIG1ldGhvZC5pc0NvbnN0cnVjdG9yKCkpeyAKLQkJCQlpZiAoIWJlYW5OYW1lLmVxdWFscyhtZXRob2QuZ2V0TmFtZSgpKQotCQkJCQkmJiAhKGlzRHVwbGljYXRlTWV0aG9kTmFtZShtZXRob2QKLQkJCQkJCS5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpKQotCQkJCQkmJiAhKG1ldGhvZAotCQkJCQkJLmdldENvbnRhaW5pbmdKYXZhQ2xhc3MoKQotCQkJCQkJLmdldEphdmFOYW1lKCkKLQkJCQkJCS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZheC5lamIuRUpCT2JqZWN0IikpCS8vJE5PTi1OTFMtMSQKLQkJCQkJJiYgIShtZXRob2QKLQkJCQkJCS5nZXRDb250YWluaW5nSmF2YUNsYXNzKCkKLQkJCQkJCS5nZXRKYXZhTmFtZSgpCi0JCQkJCQkuZXF1YWxzSWdub3JlQ2FzZSgiamF2YXguZWpiLkVKQk9iamVjdFtdIikpCS8vJE5PTi1OTFMtMSQKLQkJCQkJJiYgIShtZXRob2QKLQkJCQkJCS5nZXRDb250YWluaW5nSmF2YUNsYXNzKCkKLQkJCQkJCS5nZXRKYXZhTmFtZSgpCi0JCQkJCQkuZXF1YWxzSWdub3JlQ2FzZSgiamF2YS5sYW5nLk9iamVjdCIpKQkvLyROT04tTkxTLTEkCi0JCQkJCSYmICEobWV0aG9kCi0JCQkJCQkuZ2V0Q29udGFpbmluZ0phdmFDbGFzcygpCi0JCQkJCQkuZ2V0SmF2YU5hbWUoKQotCQkJCQkJLmVxdWFsc0lnbm9yZUNhc2UoImphdmEubGFuZy5PYmplY3RbXSIpKSkgewkvLyROT04tTkxTLTEkCi0JCQkJCS8vIGFkZCB0aGUgbWV0aG9kIG5hbWUgdG8gb3VyIGxpc3Qgb2YgbWV0aG9kIG5hbWVzCi0JCQkJCVN0cmluZyBtZXRob2ROYW1lID1tZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpOwotCQkgICAgICAgICAgQm9vbGVhbiBpc1NlbGVjdGVkID0gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gICAgICAgIAkJICBpZiAob2xkTWV0aG9kc05hbWVzICE9IG51bGwgJiYgb2xkTWV0aG9kc05hbWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUpKQotICAgICAgICAgIAkJCWlzU2VsZWN0ZWQgPSAoQm9vbGVhbilvbGRNZXRob2RzTmFtZXMuZ2V0KG1ldGhvZE5hbWUpOwotCQkgICAgICAgICAgZk1ldGhvZE5hbWVzLnB1dChtZXRob2ROYW1lLCBpc1NlbGVjdGVkKTsKLQkJCQl9IAotCQkJCX0KLQkJCX0KLQkJCSovCi0JCQlqYXZhV1NETFBhcmFtXy5zZXRNZXRob2RzKGZNZXRob2ROYW1lcyk7Ci0JCQkKLQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllbnZpcm9ubWVudC5nZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgNTAyMywgdGhpcywgImV4ZWN1dGUiLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9SRUFEX0JFQU4pOwotCQkKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfVE9fTUVUSE9ELCBlKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCX0KLQotICBwcml2YXRlIHZvaWQgZ2F0aGVyTWV0aG9kcyhKYXZhQ2xhc3MgamF2YUNsYXNzLCBTdHJpbmcgYmVhbk5hbWUsIEhhc2h0YWJsZSBvbGRNZXRob2RzTmFtZXMpCi0gIHsKLSAgICBTdHJpbmcgamF2YU5hbWUgPSBqYXZhQ2xhc3MuZ2V0SmF2YU5hbWUoKTsKLSAgICBpZiAoIWphdmFDbGFzcy5pc0ludGVyZmFjZSgpCi0gICAgICAgICYmICFqYXZhTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZheC5lamIuRUpCT2JqZWN0W10iKQotICAgICAgICAmJiAhamF2YU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiamF2YXguZWpiLkVKQk9iamVjdCIpCi0gICAgICAgICYmICFqYXZhTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZhLmxhbmcuT2JqZWN0W10iKQotICAgICAgICAmJiAhamF2YU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiamF2YS5sYW5nLk9iamVjdCIpKQotICAgIHsKLSAgICAgIExpc3QgcHVibGljTWV0aG9kcyA9IGphdmFDbGFzcy5nZXRQdWJsaWNNZXRob2RzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcHVibGljTWV0aG9kcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZClpdC5uZXh0KCk7Ci0gICAgICAgIGlmICghbWV0aG9kLmlzQ29uc3RydWN0b3IoKQotICAgICAgICAgICAgJiYgIWJlYW5OYW1lLmVxdWFscyhtZXRob2QuZ2V0TmFtZSgpKQotICAgICAgICAgICAgJiYgIShpc0R1cGxpY2F0ZU1ldGhvZE5hbWUobWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gYWRkIHRoZSBtZXRob2QgbmFtZSB0byBvdXIgbGlzdCBvZiBtZXRob2QgbmFtZXMKLSAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCk7Ci0gICAgICAgICAgQm9vbGVhbiBpc1NlbGVjdGVkID0gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gICAgICAgICAgaWYgKG9sZE1ldGhvZHNOYW1lcyAhPSBudWxsICYmIG9sZE1ldGhvZHNOYW1lcy5jb250YWluc0tleShtZXRob2ROYW1lKSkKLSAgICAgICAgICAgIGlzU2VsZWN0ZWQgPSAoQm9vbGVhbilvbGRNZXRob2RzTmFtZXMuZ2V0KG1ldGhvZE5hbWUpOwotICAgICAgICAgIGZNZXRob2ROYW1lcy5wdXQobWV0aG9kTmFtZSwgaXNTZWxlY3RlZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdhdGhlck1ldGhvZHMoamF2YUNsYXNzLmdldFN1cGVydHlwZSgpLCBiZWFuTmFtZSwgb2xkTWV0aG9kc05hbWVzKTsKLSAgICB9Ci0gIH0KLQkgIAotCS8vUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBtZXRob2QgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgCi0JLy9mTWV0aG9kTmFtZXMgdmVjdG9yLiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRldGVjdCBvdmVybG9hZGVkIAotCS8vbWV0aG9kcyBpbiBCZWFucyBhbmQgRUpCcywgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4KLQlwcml2YXRlIGJvb2xlYW4gaXNEdXBsaWNhdGVNZXRob2ROYW1lKFN0cmluZyBtZXRob2ROYW1lKSB7Ci0JCXJldHVybiAoZk1ldGhvZE5hbWVzID09IG51bGwgPyBmYWxzZTogZk1ldGhvZE5hbWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUpKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiBAcmV0dXJuIEphdmFXU0RMUGFyYW1ldGVyCi0JICovCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpCi0JewotCSAgc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9Nb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9Nb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjRmMDI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyRmFjdG9yeUlkOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3Q7Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotCXB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9FWFQgPSAiL3NlcnZpY2VzLyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpICB7Ci0JCUlTdGF0dXMgc3RhdHVzOwotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQl0cnkgewotCQkJLy8gdGhlIGNvcnJlY3QgcHJvamVjdCBVUkwgaGFzIGFscmVhZHkgYmVlbiBvYnRhaW5lZCwgbm8gbmVlZCB0byBtb2RpZnkgPHNvYXA6YWRkcmVzcz4gbG9jYXRpb24gVVJJCi0JCQlpZiAoIWphdmFXU0RMUGFyYW0uaXNHdWVzc1Byb2plY3RVUkwoKSkgeyAKLQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCX0KLQotCQkJU3RyaW5nIHByb2plY3RVUkwgPSBudWxsOwkJCi0KLQkJCUlTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkJCWlmKHNlcnZlckluc3RhbmNlSWQhPW51bGwpIHsKLQkJCQlzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0JCQl9Ci0KLQkJCWlmKHNlcnZlciE9bnVsbCkgewotCQkJCXByb2plY3RVUkwgPSBTZXJ2ZXJVdGlscy5nZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKHNlcnZpY2VQcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlcik7Ci0JCQl9IGVsc2UgewotCQkJCXByb2plY3RVUkwgPSBTZXJ2ZXJVdGlscy5nZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKHNlcnZpY2VQcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQpOwotCQkJfQotCi0JCQlpZihwcm9qZWN0VVJMPT1udWxsIHx8IHByb2plY3RVUkwudHJpbSgpLmxlbmd0aCgpPT0wKSB7Ci0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9VUkwsIG5ldyBTdHJpbmdbXSB7c2VydmljZVByb2plY3QuZ2V0TmFtZSgpfSkpOwotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0KLQkJCWlmIChqYXZhV1NETFBhcmFtLmdldFByb2plY3RVUkwoKSA9PSBwcm9qZWN0VVJMKSB7Ci0JCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQl9IAotCi0JCQlqYXZhV1NETFBhcmFtLnNldFByb2plY3RVUkwocHJvamVjdFVSTCk7ICAvLyBwcm9qZWN0IFVSTCBuZWVkZWQgZm9yIEF4aXMgZGVwbG95Ci0KLQkJCS8vIG1vZGlmeSB0aGUgPHNvYXA6YWRkcmVzcz4gbG9jYXRpb24gVVJJIHRvIHJlZmxlY3QgdGhlIGNvcnJlY3QgcHJvamVjdCBVUkwKLQkJCWlmKHdzZGxVUkkhPW51bGwpIHsJCQkJCQkJCi0JCQkJYm9vbGVhbiBtb2RpZmllZCA9IGZhbHNlOwkJCQkJCQkKLQkJCQlpZiAod2ViU2VydmljZXNQYXJzZXIgPT0gbnVsbCkgewotCQkJCQl3ZWJTZXJ2aWNlc1BhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotCQkJCX0KLQkJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKTsKLQkJCQlNYXAgc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCk7Ci0JCQkJZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKLQkJCQkJU2VydmljZSBzZXIgPSAoU2VydmljZSlpdC5uZXh0KCk7Ci0JCQkJCU1hcCBwb3J0cyA9IHNlci5nZXRQb3J0cygpOwotCQkJCQlmb3IgKEl0ZXJhdG9yIGl0MiA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Mi5oYXNOZXh0KCk7KSB7Ci0JCQkJCQlQb3J0IHAgPSAoUG9ydClpdDIubmV4dCgpOwotCQkJCQkJZm9yIChJdGVyYXRvciBpdDMgPSBwLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGl0My5oYXNOZXh0KCk7KSB7Ci0JCQkJCQkJT2JqZWN0IG9iaiA9IGl0My5uZXh0KCk7Ci0JCQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSB7Ci0JCQkJCQkJCVNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKW9iajsKLQkJCQkJCQkJU3RyaW5nIHdzZGxTb2FwQWRkcmVzcyA9IHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk7Ci0KLQkJCQkJCQkJLy8gY2hlY2sgaWYgdGhlIFdTREwgU09BUCBhZGRyZXNzIGhhcyB0aGUgcmlnaHQgcHJvamVjdCBVUkwsIGlmIG5vdCwgdXBkYXRlIGl0Ci0JCQkJCQkJCWlmKHdzZGxTb2FwQWRkcmVzcyE9bnVsbCkgewotCQkJCQkJCQkJaWYgKCF3c2RsU29hcEFkZHJlc3Muc3RhcnRzV2l0aChwcm9qZWN0VVJMKSkgewotCQkJCQkJCQkJCS8vIGUuZy4gImh0dHA6Ly90ZW1wdXJpLm9yZy9zZXJ2aWNlcy9TZXJ2aWNlTmFtZSIgYmVjb21lcyAiL3NlcnZpY2VzL1NlcnZpY2VOYW1lIiAKLQkJCQkJCQkJCQlTdHJpbmcgc2VydmljZXNTdHJpbmcgPSB3c2RsU29hcEFkZHJlc3Muc3Vic3RyaW5nKHdzZGxTb2FwQWRkcmVzcy5pbmRleE9mKFNFUlZJQ0VfRVhUKSk7Ci0JCQkJCQkJCQkJc29hcEFkZHJlc3Muc2V0TG9jYXRpb25VUkkocHJvamVjdFVSTCArIHNlcnZpY2VzU3RyaW5nKTsKLQkJCQkJCQkJCQltb2RpZmllZCA9IHRydWU7Ci0JCQkJCQkJCQl9Ci0KLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmIChtb2RpZmllZCkgewotCQkJCQkvLyB1cGRhdGUgdGhlIFdTREwgZmlsZSBhbmQgcmVmcmVzaCBpbiB3b3Jrc3BhY2UKLQkJCQkJV1NETEZhY3Rvcnkgd3NkbEZhY3RvcnkgPSBuZXcgV1NETEZhY3RvcnlJbXBsKCk7Ci0JCQkJCVdTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLQkJCQkJT3V0cHV0U3RyZWFtIG9zID0gZW52aXJvbm1lbnQuZ2V0VVJJRmFjdG9yeSgpLm5ld1VSSSh3c2RsVVJJLnRvU3RyaW5nKCkpLmdldE91dHB1dFN0cmVhbSgpOwotCQkJCQl3c2RsV3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBvcyk7Ci0JCQkJCW9zLmNsb3NlKCk7Ci0KLQkJCQkJVVJMIHdzZGxVUkwgPSBuZXcgVVJMICh3c2RsVVJJKTsKLQkJCQkJSVJlc291cmNlIHdzZGxGaWxlID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2VBdExvY2F0aW9uKHdzZGxVUkwuZ2V0UGF0aCgpLCBzZXJ2aWNlUHJvamVjdCk7Ci0JCQkJCWlmICh3c2RsRmlsZSAhPSBudWxsKSB7Ci0JCQkJCQl3c2RsRmlsZS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX1pFUk8sIG1vbml0b3IpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NT0RJRllfRU5EUE9JTlQsIG5ldyBTdHJpbmdbXSB7d3NkbFVSSX0pKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCi0JCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01PRElGWV9FTkRQT0lOVCwgbmV3IFN0cmluZ1tdIHt3c2RsVVJJfSkpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJZCkgewotCQl0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJGYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkgewotCQl0aGlzLnNlcnZlckZhY3RvcnlJZCA9IHNlcnZlckZhY3RvcnlJZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkgewotCQl0aGlzLnNlcnZpY2VQcm9qZWN0ID0gc2VydmljZVByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkgewotCQl0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcikgewotCQl3ZWJTZXJ2aWNlc1BhcnNlciA9IHBhcnNlcjsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLQl7Ci0JCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKQotCXsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW07Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQXhpc0lucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9UREF4aXNJbnB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRlZDY4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQXhpc0lucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMCAxMjg4MjcgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEwMDQgICAxNTkzNTYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEdldCBjb3JyZWN0IG1vZHVsZSByb290IFVSTCBiYXNlZCBvbiBzZXJ2ZXIgY2hvc2VuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi0KLXB1YmxpYyBjbGFzcyBUREF4aXNJbnB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JCi0JcHJpdmF0ZSBJV2ViU2VydmljZSB3c187Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUHJvamVjdF87IAotCi0JICBwcml2YXRlIFN0cmluZyBzZXJ2ZXJTZXJ2ZXJfOwotICAgICAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRF87IAotCSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gPSBudWxsOwotCSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSV87Ci0JICBwcml2YXRlIFdlYlNlcnZpY2VJbmZvIHdlYlNlcnZpY2VJbmZvXzsKLQkgIAkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIFREQXhpc0lucHV0Q29tbWFuZCgpIHsKLQkJfQotCQkKLQkJcHVibGljIFREQXhpc0lucHV0Q29tbWFuZChJV2ViU2VydmljZSB3cywgU3RyaW5nIHByb2plY3QpIHsKLQkJCXdzXyA9IHdzOwotCQkJc2VydmVyUHJvamVjdF8gPSBwcm9qZWN0OwotCQl9Ci0JCQotCQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JCXsJICAgIAotCQlzZXJ2ZXJTZXJ2ZXJfID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCi0JCVN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JCWlmIChzZXJ2ZXJJbnN0YW5jZUlkICE9IG51bGwpIHsgLy8gc2VydmVyIGV4aXN0cwotCSAgICAJc2VydmljZUV4aXN0aW5nU2VydmVyXyA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2ZXJJbnN0YW5jZUlkKTsKLQkJCWlmIChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfICE9IG51bGwpCi0JCSAgICB7Ci0JCSAgICAgIHNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmljZUV4aXN0aW5nU2VydmVyXy5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkJICAgIH0KLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgCXNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmVyRmFjdG9yeUlkOwotCSAgICB9Ci0JCQotCQl3c2RsVVJJXyA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFdzZGxVUkwoKTsKLQkJd2ViU2VydmljZUluZm9fID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCk7Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQkgIAotCQkvKioKLQkJICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlclByb2plY3QuCi0JCSAgICovCi0JCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJQcm9qZWN0KCkKLQkJICB7Ci0JCQkgIHJldHVybiBzZXJ2ZXJQcm9qZWN0XzsKLQkJICB9Ci0KLQkJICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclNlcnZlcigpCi0JCSAgewotCQkgICAgcmV0dXJuIHNlcnZlclNlcnZlcl87Ci0JCSAgfQotICAgICAgICAgIAotICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlclR5cGVJRCgpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOwotICAgICAgICAgIH0gICAgICAgICAgCi0KLQkJcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQkJcmV0dXJuIHdzZGxVUklfOwotCQl9Ci0KLQkJcHVibGljIFdlYlNlcnZpY2VJbmZvIGdldFdlYlNlcnZpY2VJbmZvKCkgewotCQkJcmV0dXJuIHdlYlNlcnZpY2VJbmZvXzsKLQkJfQotCQkKLQkJcHVibGljIElTZXJ2ZXIgZ2V0U2VydmljZUV4aXN0aW5nU2VydmVyKCkKLQkJICB7Ci0JCSAgICByZXR1cm4gc2VydmljZUV4aXN0aW5nU2VydmVyXzsKLQkJICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVERDb2RlR2VuT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQ29kZUdlbk9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGFiOTFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVERDb2RlR2VuT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA5ICAgMTI1MDk0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSwgVXNlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNyAgIDE0MjMyNyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5XU0RMMkphdmFDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suQ29weUF4aXNKYXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suUmVmcmVzaFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suQmFja3VwU2tlbEltcGxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suU2tlbGV0b24yV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLXB1YmxpYyBjbGFzcyBURENvZGVHZW5PcGVyYXRpb24gZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQkvLyBDb3B5QXhpc0phckNvbW1hbmQKLQlwcml2YXRlIENvcHlBeGlzSmFyQ29tbWFuZCBjb3B5QXhpc0phckNvbW1hbmQgPSBudWxsOwotCQotCS8vIEJhY2t1cFNrZWxJbXBsQ29tbWFuZAotCXByaXZhdGUgQmFja3VwU2tlbEltcGxDb21tYW5kIGJhY2t1cFNrZWxJbXBsQ29tbWFuZCA9IG51bGw7Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlSW5mbyB3ZWJTZXJ2aWNlSW5mbzsKLQkKLQkvLyBXU0RMMkphdmFDb21tYW5kCi0JcHJpdmF0ZSBXU0RMMkphdmFDb21tYW5kIHdzZGwySmF2YUNvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0JcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lOwotCXByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLQkKLQkvLyBTa2VsZXRvbjJXU0RMQ29tbWFuZAotCXByaXZhdGUgU2tlbGV0b24yV1NETENvbW1hbmQgc2tlbGV0b24yV1NETENvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdDsKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEOwotCXByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXI7Ci0JICAKLQkvLyBVcGRhdGVXZWJYTUxDb21tYW5kCi0JcHJpdmF0ZSBVcGRhdGVXRUJYTUxDb21tYW5kIHVwZGF0ZVdlYlhNTENvbW1hbmQgPSBudWxsOwotCi0JLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JcHJpdmF0ZSBSZWZyZXNoUHJvamVjdENvbW1hbmQgcmVmcmVzaFByb2plY3RDb21tYW5kID0gbnVsbDsKLQkKLQkvKioKLQkgKiBUaGlzIGNvbW1hbmQgcnVucyB0aGUgY29tbWFuZHMgcGFzc2VkIGJ5IHRoZSBjb25zdHJ1Y3RvciBpbiBhIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbi4KLQkgKiBUaGUgY29tbWFuZHMgYXJlIGxpc3RlZCBhYm92ZSwgd2l0aCBvbmx5IHNvbWUgb2YgdGhlaXIgZGF0YSByZWdpc3RyeSBwYXJhbWV0ZXJzIHNpbmNlIHNvbWUgYXBwZWFyIAotCSAqIHRvIG92ZXJsYXAgdGhlIGNvbW1hbmRzLgotCSAqIEBwYXJhbSBiYWNrdXBTa2VsSW1wbAotCSAqIEBwYXJhbSB3c2RsMkphdmEKLQkgKiBAcGFyYW0gc2tlbGV0b24yV1NETAotCSAqIEBwYXJhbSB1cGRhdGVXZWJYTUwKLQkgKi8KLQlwdWJsaWMgVERDb2RlR2VuT3BlcmF0aW9uKCkgeyAKLQkJY29weUF4aXNKYXJDb21tYW5kID0gbmV3IENvcHlBeGlzSmFyQ29tbWFuZCgpOwotCQliYWNrdXBTa2VsSW1wbENvbW1hbmQgPSBuZXcgQmFja3VwU2tlbEltcGxDb21tYW5kKCk7Ci0JCXdzZGwySmF2YUNvbW1hbmQgPSBuZXcgV1NETDJKYXZhQ29tbWFuZCgpOwotCQlza2VsZXRvbjJXU0RMQ29tbWFuZCA9IG5ldyBTa2VsZXRvbjJXU0RMQ29tbWFuZCgpOwotCQl1cGRhdGVXZWJYTUxDb21tYW5kID0gbmV3IFVwZGF0ZVdFQlhNTENvbW1hbmQoKTsKLQkJcmVmcmVzaFByb2plY3RDb21tYW5kID0gbmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB7Ci0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlUb3BEb3duV1NNb2RpZnlPcGVyYXRpb24gdGRPcGVyYXRpb24gPSBuZXcgVG9wRG93bldTTW9kaWZ5T3BlcmF0aW9uKGluZm8sIGVudik7Ci0JCXRyeSB7Ci0JCQl0ZE9wZXJhdGlvbi5leGVjdXRlKG1vbml0b3IpOwotCQl9Ci0JCWNhdGNoKENvcmVFeGNlcHRpb24gY2UpewotCQkJSVN0YXR1cyBzdGF0dXMgPSBjZS5nZXRTdGF0dXMoKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCQotCQotCXByaXZhdGUgY2xhc3MgVG9wRG93bldTTW9kaWZ5T3BlcmF0aW9uIGV4dGVuZHMgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIHsKLQotCQlwcml2YXRlIElBZGFwdGFibGUgaW5mbyA9IG51bGw7Ci0JCXByaXZhdGUgSUVudmlyb25tZW50IGVudiA9IG51bGw7Ci0JCQotCQlwcm90ZWN0ZWQgVG9wRG93bldTTW9kaWZ5T3BlcmF0aW9uKElBZGFwdGFibGUgYWRhcHRhYmxlLCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpewotCQkJaW5mbyA9IGFkYXB0YWJsZTsKLQkJCWVudiA9IGVudmlyb25tZW50OwotCQl9Ci0JCQotCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCi0JCQlJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCQkKLQkJICAgIC8vIENvcHlBeGlzSmFyQ29tbWFuZAotCQkgICAgY29weUF4aXNKYXJDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCSAgICBjb3B5QXhpc0phckNvbW1hbmQuc2V0UHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLQkJICAgIHN0YXR1cyA9IGNvcHlBeGlzSmFyQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JCSAgICAJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJICAgIH0KLQkJCQotCQkJLy8gYmFja3VwU2tlbEltcGxDb21tYW5kCi0JCQliYWNrdXBTa2VsSW1wbENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCWJhY2t1cFNrZWxJbXBsQ29tbWFuZC5zZXRXZWJTZXJ2aWNlc1BhcnNlcih3ZWJTZXJ2aWNlc1BhcnNlcik7Ci0JCQliYWNrdXBTa2VsSW1wbENvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCWJhY2t1cFNrZWxJbXBsQ29tbWFuZC5zZXRXZWJTZXJ2aWNlSW5mbyh3ZWJTZXJ2aWNlSW5mbyk7Ci0JCQlzdGF0dXMgPSBiYWNrdXBTa2VsSW1wbENvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJfQotCi0JCQkvLyB3c2RsMkphdmFDb21tYW5kCi0JCQl3c2RsMkphdmFDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQl3c2RsMkphdmFDb21tYW5kLnNldFdzZGxVUkkod3NkbFVSSSk7Ci0JCQl3c2RsMkphdmFDb21tYW5kLnNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShodHRwQmFzaWNBdXRoVXNlcm5hbWUpOwotCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoaHR0cEJhc2ljQXV0aFBhc3N3b3JkKTsKLQkJCXdzZGwySmF2YUNvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCXN0YXR1cyA9IHdzZGwySmF2YUNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJfQotCQkJamF2YVdTRExQYXJhbSA9IHdzZGwySmF2YUNvbW1hbmQuZ2V0SmF2YVdTRExQYXJhbSgpOwotCQkJCi0JCQkvLyBTa2VsZXRvbjJXU0RMQ29tbWFuZAotCQkJc2tlbGV0b24yV1NETENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldFdlYlNlcnZpY2VzUGFyc2VyKHdlYlNlcnZpY2VzUGFyc2VyKTsKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldEphdmFXU0RMUGFyYW0oamF2YVdTRExQYXJhbSk7Ci0JCQlza2VsZXRvbjJXU0RMQ29tbWFuZC5zZXRTZXJ2ZXJQcm9qZWN0KHNlcnZlclByb2plY3QpOwotCQkJc2tlbGV0b24yV1NETENvbW1hbmQuc2V0U2VydmljZVNlcnZlclR5cGVJRChzZXJ2aWNlU2VydmVyVHlwZUlEKTsKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpOwotCQkJc3RhdHVzID0gc2tlbGV0b24yV1NETENvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJfQotCQkJd3NkbFVSSSA9IHNrZWxldG9uMldTRExDb21tYW5kLmdldFdzZGxVUkkoKTsKLQkJCi0JCQkvLyBVcGRhdGVXZWJYTUxDb21tYW5kCi0JCQl1cGRhdGVXZWJYTUxDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQl1cGRhdGVXZWJYTUxDb21tYW5kLnNldFNlcnZlclByb2plY3Qoc2VydmVyUHJvamVjdCk7Ci0JCQlzdGF0dXMgPSB1cGRhdGVXZWJYTUxDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCX0KLQkJCQotCQkJLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JCQlyZWZyZXNoUHJvamVjdENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCXJlZnJlc2hQcm9qZWN0Q29tbWFuZC5zZXRQcm9qZWN0KHNlcnZlclByb2plY3QpOwotCQkJc3RhdHVzID0gcmVmcmVzaFByb2plY3RDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCX0KLQkJCQotCQl9Ci0JCi0JfQotCi0KLQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLQkJdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlSW5mbyhXZWJTZXJ2aWNlSW5mbyB3ZWJTZXJ2aWNlSW5mbykgewotCQl0aGlzLndlYlNlcnZpY2VJbmZvID0gd2ViU2VydmljZUluZm87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFBhc3N3b3JkCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFBhc3N3b3JkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFVzZXJuYW1lCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFVzZXJuYW1lIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZSkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKSB7Ci0JCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQlyZXR1cm4gd3NkbFVSSTsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHNlcnZlclByb2plY3QgVGhlIHNlcnZlclByb2plY3QgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoSVByb2plY3Qgc2VydmVyUHJvamVjdCkgewotCSAgdGhpcy5zZXJ2ZXJQcm9qZWN0ID0gc2VydmVyUHJvamVjdDsKLQl9Ci0JCSAgCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgaWQpIHsKLQkgIHRoaXMuc2VydmljZVNlcnZlclR5cGVJRCA9IGlkOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2ZXIpIHsKLQkJICB0aGlzLnNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IHNlcnZlcjsKLQkJfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1VwZGF0ZVdFQlhNTENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVXBkYXRlV0VCWE1MQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWZlYTY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVXBkYXRlV0VCWE1MQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNTI4ICAgMTg2MDU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuSU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuTW9kZWxQcm92aWRlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uU2VydmxldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5TZXJ2bGV0TWFwcGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5TZXJ2bGV0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5XZWJBcHA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uV2ViYXBwbGljYXRpb25GYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuY29yZS5EaXNwbGF5TmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmNvcmUuSmF2YWVlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmNvcmUuVXJsUGF0dGVyblR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuV2ViRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlV0VCWE1MQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdDsKLQotICBwdWJsaWMgVXBkYXRlV0VCWE1MQ29tbWFuZCggKQotICB7Ci0gIH0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JCWlmIChzZXJ2ZXJQcm9qZWN0ICE9IG51bGwpIHsKLQkJCUlTdGF0dXMgc3RhdHVzID0gbnVsbDsKLQkJCXN0YXR1cyA9IGFkZFNlcnZsZXQoc2VydmVyUHJvamVjdCwgZ2V0QXhpc1NlcnZsZXREZXNjcmlwdG9yKCkpOwotCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCQlhZGRTZXJ2bGV0KHNlcnZlclByb2plY3QsIGdldEFkbWludFNlcnZsZXREZXNjcmlwdG9yKCkpOwotCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHJpdmF0ZSBTZXJ2bGV0RGVzY3JpcHRvciBnZXRBeGlzU2VydmxldERlc2NyaXB0b3IoKSB7Ci0KLQkJU2VydmxldERlc2NyaXB0b3Igc2QgPSBuZXcgU2VydmxldERlc2NyaXB0b3IoKTsKLQkJc2QuX25hbWUgPSAiQXhpc1NlcnZsZXQiOyAvLyROT04tTkxTLTEkCi0JCXNkLl9kaXNwbGF5TmFtZSA9ICJBcGFjaGUtQXhpcyBTZXJ2bGV0IjsgLy8kTk9OLU5MUy0xJAotCQlzZC5fY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuYXhpcy50cmFuc3BvcnQuaHR0cC5BeGlzU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX21hcHBpbmdzID0gbmV3IFN0cmluZ1tdIHsgIi9zZXJ2bGV0L0F4aXNTZXJ2bGV0IiwgLy8kTk9OLU5MUy0xJAotCQkJCQkJCQkJCSIqLmp3cyIsIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQkJCQkiL3NlcnZpY2VzLyoiIH07IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIHNkOwotCX0KLQotCXByaXZhdGUgU2VydmxldERlc2NyaXB0b3IgZ2V0QWRtaW50U2VydmxldERlc2NyaXB0b3IoKSB7Ci0JCVNlcnZsZXREZXNjcmlwdG9yIHNkID0gbmV3IFNlcnZsZXREZXNjcmlwdG9yKCk7Ci0JCXNkLl9uYW1lID0gIkFkbWluU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX2Rpc3BsYXlOYW1lID0gIkF4aXMgQWRtaW4gU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX2NsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmF4aXMudHJhbnNwb3J0Lmh0dHAuQWRtaW5TZXJ2bGV0IjsgLy8kTk9OLU5MUy0xJAotCQlzZC5fbWFwcGluZ3MgPSBuZXcgU3RyaW5nW10geyAiL3NlcnZsZXQvQWRtaW5TZXJ2bGV0IiB9OyAvLyROT04tTkxTLTEkCi0JCXNkLl9sb2FkT25TdGFydHVwID0gbmV3IEludGVnZXIoMTAwKTsKLQkJcmV0dXJuIHNkOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBhZGRTZXJ2bGV0KGZpbmFsIElQcm9qZWN0IHdlYlByb2plY3QsIGZpbmFsIFNlcnZsZXREZXNjcmlwdG9yIHNlcnZsZXREZXNjcmlwdG9yKSB7Ci0JCi0JCXRyeSB7Ci0JCQkKLQkJCWZpbmFsIElNb2RlbFByb3ZpZGVyIHByb3ZpZGVyID0gTW9kZWxQcm92aWRlck1hbmFnZXIuZ2V0TW9kZWxQcm92aWRlcih3ZWJQcm9qZWN0KTsKLQkJCQotCQkJcHJvdmlkZXIubW9kaWZ5KG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCU9iamVjdCBvYmplY3QgPSBwcm92aWRlci5nZXRNb2RlbE9iamVjdCgpOwotCQkJCQlpZiAob2JqZWN0IGluc3RhbmNlb2Ygb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuV2ViQXBwKSB7Ci0JCQkJCQlvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5XZWJBcHAgamF2YWVlV2ViQXBwID0gKG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUud2ViLldlYkFwcCkgb2JqZWN0OwotCQkJCQkJYWRkSmF2YWVlU2VydmxldCh3ZWJQcm9qZWN0LCBzZXJ2bGV0RGVzY3JpcHRvciwgamF2YWVlV2ViQXBwKTsKLQkJCQkJfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5XZWJBcHApIHsKLQkJCQkJCVdlYkFwcCB3ZWJBcHAgPSAoV2ViQXBwKSBvYmplY3Q7Ci0JCQkJCQlhZGRTZXJ2bGV0KHdlYlByb2plY3QsIHNlcnZsZXREZXNjcmlwdG9yLCB3ZWJBcHApOwotCQkJCQl9Ci0JCQkJCQotCQkJCX0KLQkJCX0KLQkJCQksIG51bGwpOwotCi0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCi0JCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLQkJCQlBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9VUERBVEVfV0VCX1hNTCwKLQkJCQllKTsKLQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFNlcnZsZXQoSVByb2plY3Qgd2ViUHJvamVjdCwgU2VydmxldERlc2NyaXB0b3Igc2VydmxldERlc2NyaXB0b3IsIFdlYkFwcCB3ZWJhcHApIHsKLQotCQlMaXN0IHRoZVNlcnZsZXRzID0gd2ViYXBwLmdldFNlcnZsZXRzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGhlU2VydmxldHMuc2l6ZSgpOyBpKyspIHsKLQkJCVNlcnZsZXQgYVNlcnZsZXQgPSAoU2VydmxldCkgdGhlU2VydmxldHMuZ2V0KGkpOwotCQkJaWYgKGFTZXJ2bGV0LmdldFNlcnZsZXROYW1lKCkuZXF1YWxzKHNlcnZsZXREZXNjcmlwdG9yLl9uYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JCVdlYmFwcGxpY2F0aW9uRmFjdG9yeSBmYWN0b3J5ID0gV2ViYXBwbGljYXRpb25GYWN0b3J5LmVJTlNUQU5DRTsKLQotCQlTZXJ2bGV0IHNlcnZsZXQgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXQoKTsKLQkJU2VydmxldFR5cGUgc2VydmxldFR5cGUgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXRUeXBlKCk7Ci0JCXNlcnZsZXQuc2V0V2ViVHlwZShzZXJ2bGV0VHlwZSk7Ci0JCXNlcnZsZXQuc2V0U2VydmxldE5hbWUoc2VydmxldERlc2NyaXB0b3IuX25hbWUpOwotCQlzZXJ2bGV0VHlwZS5zZXRDbGFzc05hbWUoc2VydmxldERlc2NyaXB0b3IuX2NsYXNzTmFtZSk7Ci0JCWlmKHNlcnZsZXREZXNjcmlwdG9yLl9kaXNwbGF5TmFtZSAhPSBudWxsKXsKLQkJCXNlcnZsZXQuc2V0RGlzcGxheU5hbWUoc2VydmxldERlc2NyaXB0b3IuX2Rpc3BsYXlOYW1lKTsKLQkJfQotCQlpZihzZXJ2bGV0RGVzY3JpcHRvci5fbG9hZE9uU3RhcnR1cCAhPSBudWxsKXsKLQkJCXNlcnZsZXQuc2V0TG9hZE9uU3RhcnR1cChzZXJ2bGV0RGVzY3JpcHRvci5fbG9hZE9uU3RhcnR1cCk7Ci0JCX0KLQkJaWYoc2VydmxldERlc2NyaXB0b3IuX3BhcmFtcyAhPSBudWxsKXsKLQkJCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IHNlcnZsZXQuZ2V0UGFyYW1zQXNQcm9wZXJ0aWVzKCk7Ci0JCQlwcm9wZXJ0aWVzLnB1dEFsbChzZXJ2bGV0RGVzY3JpcHRvci5fcGFyYW1zKTsKLQkJfQotCQl3ZWJhcHAuZ2V0U2VydmxldHMoKS5hZGQoc2VydmxldCk7Ci0KLQkJaWYoc2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzICE9IG51bGwpewotCQkJZm9yKGludCBpPTA7IGk8c2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzLmxlbmd0aDsgaSsrKXsKLQkJCQlTZXJ2bGV0TWFwcGluZyBzZXJ2bGV0TWFwcGluZyA9IGZhY3RvcnkuY3JlYXRlU2VydmxldE1hcHBpbmcoKTsKLQkJCQlzZXJ2bGV0TWFwcGluZy5zZXRTZXJ2bGV0KHNlcnZsZXQpOwotCQkJCXNlcnZsZXRNYXBwaW5nLnNldFVybFBhdHRlcm4oc2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzW2ldKTsKLQkJCQl3ZWJhcHAuZ2V0U2VydmxldE1hcHBpbmdzKCkuYWRkKHNlcnZsZXRNYXBwaW5nKTsJCQkJCQotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhZGRKYXZhZWVTZXJ2bGV0KElQcm9qZWN0IHdlYlByb2plY3QsIFNlcnZsZXREZXNjcmlwdG9yIHNlcnZsZXREZXNjcmlwdG9yLCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5XZWJBcHAgd2ViYXBwKSB7Ci0KLQkJTGlzdCB0aGVTZXJ2bGV0cyA9IHdlYmFwcC5nZXRTZXJ2bGV0cygpOwotCSAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhlU2VydmxldHMuc2l6ZSgpOyBpKyspIHsKLQkJb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuU2VydmxldCBhU2VydmxldCA9IChvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5TZXJ2bGV0KSB0aGVTZXJ2bGV0cy5nZXQoaSk7Ci0JCWlmIChhU2VydmxldC5nZXRTZXJ2bGV0TmFtZSgpLmVxdWFscyhzZXJ2bGV0RGVzY3JpcHRvci5fbmFtZSkpIHsKLQkJCXJldHVybjsKLQkJIH0KLQkgICB9Ci0JICAgCi0JICAgV2ViRmFjdG9yeSBmYWN0b3J5ID0gV2ViRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLQkgICBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5TZXJ2bGV0IHNlcnZsZXQgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXQoKTsKLQotCSAgIHNlcnZsZXQuc2V0U2VydmxldE5hbWUoc2VydmxldERlc2NyaXB0b3IuX25hbWUpOwotCSAgIHNlcnZsZXQuc2V0U2VydmxldENsYXNzKHNlcnZsZXREZXNjcmlwdG9yLl9jbGFzc05hbWUpOwotCSAgIAotCSAgIGlmKHNlcnZsZXREZXNjcmlwdG9yLl9kaXNwbGF5TmFtZSAhPSBudWxsKXsKLQkJICAgRGlzcGxheU5hbWUgZGlzcGxheU5hbWVPYmogPSBKYXZhZWVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEaXNwbGF5TmFtZSgpOwotCQkJZGlzcGxheU5hbWVPYmouc2V0VmFsdWUoc2VydmxldERlc2NyaXB0b3IuX2Rpc3BsYXlOYW1lKTsKLQkJCXNlcnZsZXQuZ2V0RGlzcGxheU5hbWVzKCkuYWRkKGRpc3BsYXlOYW1lT2JqKTsgIAotCSAgIH0KLQkgICBpZihzZXJ2bGV0RGVzY3JpcHRvci5fbG9hZE9uU3RhcnR1cCAhPSBudWxsKXsKLQkJICBzZXJ2bGV0LnNldExvYWRPblN0YXJ0dXAoc2VydmxldERlc2NyaXB0b3IuX2xvYWRPblN0YXJ0dXApOwotCSAgIH0KLS8vCSAgIGlmKHNlcnZsZXREZXNjcmlwdG9yLl9wYXJhbXMgIT0gbnVsbCl7Ci0vLwkJICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBzZXJ2bGV0LmdldFBhcmFtc0FzUHJvcGVydGllcygpOwotLy8JCSAgcHJvcGVydGllcy5wdXRBbGwoc2VydmxldERlc2NyaXB0b3IuX3BhcmFtcyk7Ci0vLwkgICB9Ci0JICAgd2ViYXBwLmdldFNlcnZsZXRzKCkuYWRkKHNlcnZsZXQpOwotCQotCSAgIGlmKHNlcnZsZXREZXNjcmlwdG9yLl9tYXBwaW5ncyAhPSBudWxsKXsKLQkJICBmb3IoaW50IGk9MDsgaTxzZXJ2bGV0RGVzY3JpcHRvci5fbWFwcGluZ3MubGVuZ3RoOyBpKyspewotCQkJb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuU2VydmxldE1hcHBpbmcgc2VydmxldE1hcHBpbmcgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXRNYXBwaW5nKCk7CQkJCi0JCQlzZXJ2bGV0TWFwcGluZy5zZXRTZXJ2bGV0TmFtZShzZXJ2bGV0LmdldFNlcnZsZXROYW1lKCkpOwotCQkJVXJsUGF0dGVyblR5cGUgdXJsID0gSmF2YWVlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVXJsUGF0dGVyblR5cGUoKTsKLQkJCXVybC5zZXRWYWx1ZShzZXJ2bGV0RGVzY3JpcHRvci5fbWFwcGluZ3NbaV0pOwotCQkJc2VydmxldE1hcHBpbmcuZ2V0VXJsUGF0dGVybnMoKS5hZGQodXJsKTsKLQkJCXdlYmFwcC5nZXRTZXJ2bGV0TWFwcGluZ3MoKS5hZGQoc2VydmxldE1hcHBpbmcpOwkJCQkJCi0JCSAgfQotCSAgIH0KLX0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoSVByb2plY3Qgc2VydmVyUHJvamVjdCkKLSAgewotICAgIHRoaXMuc2VydmVyUHJvamVjdCA9IHNlcnZlclByb2plY3Q7Ci0gIH0KLQotCXB1YmxpYyBjbGFzcyBTZXJ2bGV0RGVzY3JpcHRvciB7Ci0JCVN0cmluZyBfbmFtZTsKLQkJU3RyaW5nIF9jbGFzc05hbWU7Ci0JCVN0cmluZyBfZGlzcGxheU5hbWU7Ci0JCU1hcCBfcGFyYW1zOwotCQlTdHJpbmdbXSBfbWFwcGluZ3M7Ci0JCUludGVnZXIgX2xvYWRPblN0YXJ0dXA7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1ZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTU2MzVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjA3ICAgMTQ0OTc4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLldTSUNvbXBsaWFuY2VVdGlsczsKLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0gPSBudWxsOwotICAgcHJpdmF0ZSBWZWN0b3Igc3RhdHVzID0gbnVsbDsKLSAgIHByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfID0gbnVsbDsKLQotICAgcHVibGljIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQoKSB7Ci0gIH0KLQotICAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSAoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkKLSAgewotIAotCSAgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkgICBpZiAoamF2YVdTRExQYXJhbSA9PSBudWxsKSB7Ci0JCSAgIElTdGF0dXMgc2ltcGxlU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc2ltcGxlU3RhdHVzKTsKLQkJICAgcmV0dXJuIHNpbXBsZVN0YXR1czsKLQkgICB9CQkKLQkKLSAgICBzdGF0dXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpQ29udGV4dCA9IG5ldyBQZXJzaXN0ZW50V1NJQ29udGV4dCgpOwotICAgIGludCBzZXZlcml0eSA9IFdTSUNvbXBsaWFuY2VVdGlscy5nZXRXU0lTZXZlcml0eShzZXJ2aWNlUHJvamVjdF8sIHdzaUNvbnRleHQpOwotICAgIGNoZWNrUlBDRW5jb2RlZChzZXZlcml0eSk7Ci0gICAgU3RhdHVzW10gc3RhdHVzZXMgPSAoU3RhdHVzW10pIHN0YXR1cy50b0FycmF5KG5ldyBTdGF0dXNbc3RhdHVzLnNpemUoKV0pOwotCi0gICAgaWYgKHN0YXR1c2VzLmxlbmd0aCA9PSAwIHx8Ci0gICAgCQlXU0lDb21wbGlhbmNlVXRpbHMuY2hlY2tXU0lDb21wbGlhbmNlIChlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCksIHN0YXR1c2VzLCBzZXJ2aWNlUHJvamVjdF8sIHdzaUNvbnRleHQpKQotICAgIAlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBlbHNlIHsKLSAgICAJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCIiKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tSUENFbmNvZGVkKGludCBzZXZlcml0eSkKLSAgewotICAJCWlmIChKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9SUEMuZXF1YWxzKGphdmFXU0RMUGFyYW0uZ2V0U3R5bGUoKSkgJiYgCi0gIAkJICAgSmF2YVdTRExQYXJhbWV0ZXIuVVNFX0VOQ09ERUQuZXF1YWxzKGphdmFXU0RMUGFyYW0uZ2V0VXNlKCkpKQotICAJCSAgIHN0YXR1cy5hZGQgKG5ldyBTdGF0dXMoc2V2ZXJpdHksICJWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kIiwgMCwgCi0gIAkJCQkgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5XU0lfSU5DT01QTElBTkNFX1JQQ19FTkNPREVELCBudWxsKSk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQotICAgKiBwbHVnaW4ucHJvcGVydGllcy4KLSAgICogQHJldHVybiBUaGUgU3RyaW5nIG1lc3NhZ2UuCi0gICAqLwotCi0vKioKLSAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldC4KLSAqIEB0b2RvIEdlbmVyYXRlZCBjb21tZW50Ci0gKi8KLXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci19Ci0KLS8qKgotICogQHBhcmFtIHNlcnZpY2VQcm9qZWN0XyBUaGUgc2VydmljZVByb2plY3RfIHRvIHNldC4KLSAqIEB0b2RvIEdlbmVyYXRlZCBjb21tZW50Ci0gKi8KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0XykgewotCXRoaXMuc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3RfOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWRkZDJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkucGx1Z2luOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLQotICAvKioKLSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aSI7CS8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbiBpbnN0YW5jZV87Ci0gIHByaXZhdGUgSUxvZyBsb2dfOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotICAqIFRoZSAicGx1Z2luIiBlbGVtZW50IGluIHBsdWdpbi54bWwgc2hvdWxkIGluY2x1ZGUgdGhlIGF0dHJpYnV0ZQotICAqIGNsYXNzID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVBsdWdpbiIuCi0gICogQHBhcmFtIGRlc2NyaXB0b3IgVGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2VfID0gdGhpczsKLSAgICB9Ci0gICAgbG9nXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0KLSAgfQotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBrZWVwIHRoZSBsb2dnaW5nIGZyb20gYmxvd2luZyB1cC4KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gSUQ7ICAKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgKiAoV2ViU2VydmljZVdhc0NyZWF0aW9uVUlQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3Mud2FzLnY1LnRwLnVpIik7Ci0gICogQHJldHVybiBUaGUgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4gc2luZ2xldG9uLgotICAqLwotICBzdGF0aWMgcHVibGljIFdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCBvbmNlIGJ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoaXMgcGx1Z2luIGlzIGZpcnN0IGxvYWRlZC4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc3RhcnQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KCBCdW5kbGVDb250ZXh0IGNvbnRleHQgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gIAlsb2dfLmxvZyhJTG9nLklORk8sIDUwNjgsIHRoaXMsICJzdGFydCIsICJTdGFydGluZyBwbHVnaW4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5zdGFydCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjgsIHRoaXMsICJzdGFydCIsIGV4YyApOyAgCi0gICAgfQotICAgIAotICAgIHNldFByZWZlcmVuY2VzKCk7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyB1bmxvYWRlZC4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc2h1dGRvd24uCi0gICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoIEJ1bmRsZUNvbnRleHQgY29udGV4dCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgCWxvZ18ubG9nKElMb2cuSU5GTywgNTA2OSwgdGhpcywgInN0b3AiLCAiU2h1dHRpbmcgcGx1Z2luIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpIik7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuc3RvcCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjgsIHRoaXMsICJzdGFydCIsIGV4YyApOyAgICAgICAgCi0gICAgfQotICB9Ci0KLQotICAvKioKLSAgICogU2V0cyB0aGUgZ2VuZXJhbCBwcmVmZXJlbmNlcyB0byB0aGUgdmFsdWVzIGluIHRoZSBwcmVmZXJlbmNlcyBzdG9yZS4KLSAgKiovCi0gIHB1YmxpYyB2b2lkIHNldFByZWZlcmVuY2VzKCkKLSAgewotICAgLy8gc2V0RGlhbG9nc1ByZWZlcmVuY2VzKCk7Ci0gIH0KLQotIC8qKgotICAgKiBAc2VlIEFic3RyYWN0VUlQbHVnaW4jaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcwotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcyhJUHJlZmVyZW5jZVN0b3JlIHByZWZlcmVuY2VTdG9yZSkgewotCi0JLy8gU2V0IHRoZSBkZWZhdWx0cyBQcmVmZXJlbmNlCi0vLwlBY3Rpb25EaWFsb2dzUHJlZmVyZW5jZUhlbHBlci5pbml0aWFsaXplRGVmYXVsdHMocHJlZmVyZW5jZVN0b3JlKTsKLSAgfQotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9CVUNvbmZpZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQlVDb25maWdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOGVmNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9CVUNvbmZpZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDEyMDEzNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIEJVQ29uZmlnQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQlwdWJsaWMgQlVDb25maWdDb21tYW5kKCkgewotCX0KLQotCS8qCi0JICogVGhlIGV4ZWN1dGUgbWV0aG9kIG9mIHRoaXMgY29tbWFuZCBkbyBub3RoaW5nLiAgSXQgaXMgbWVyZWx5IGFuIGFuY2hvciBwb2ludCBmb3IgVUkgcGFnZQotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkgewotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQmFja3VwU2tlbEltcGxDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0JhY2t1cFNrZWxJbXBsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzA2MzIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQmFja3VwU2tlbEltcGxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzMwIDEyODgyNyAgIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQwMyAxMjg4MjcgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjQgMTI3MzQzICAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDExNiAxNjkxMzggICBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24JCi0gKiAyMDA3MDgxNSAgIDE4ODk5OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTExMyAgIDIwOTA3NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7Ci0KLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLlBsYXRmb3JtVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5XU0RMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLXB1YmxpYyBjbGFzcyBCYWNrdXBTa2VsSW1wbENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTVBMID0gIkltcGwiOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERPVCA9ICIuIjsJLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBKQVZBID0gImphdmEiOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsgCi0gIAotICBwcml2YXRlIFdlYlNlcnZpY2VJbmZvIHdlYlNlcnZpY2VJbmZvOwotCi0gIHB1YmxpYyBCYWNrdXBTa2VsSW1wbENvbW1hbmQoICkgewotICB9Ci0gIAotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotICB7Ci0JICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkKLQkgIHsKLQkJICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkgIHJldHVybiBzdGF0dXM7Ci0JICB9Ci0JICAKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIC8vIFJlYWQgV1NETAotCSAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQkgIFN0cmluZyB3c2RsVVJMID0gamF2YVdTRExQYXJhbS5nZXRJbnB1dFdzZGxMb2NhdGlvbigpOwotCSAgdHJ5Ci0JICB7Ci0JCSAgVVJMIHVybCA9IG5ldyBVUkwod3NkbFVSTCk7Ci0JCSAgZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHVybC50b1N0cmluZygpKTsKLQkgIH0KLQkgIGNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCSAgewotCQkgIHdzZGxVUkwgPSBQbGF0Zm9ybVV0aWxzLmdldEZpbGVVUkxGcm9tUGF0aChuZXcgUGF0aCh3c2RsVVJMKSk7Ci0JCSAgZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotCSAgfQotCSAgCi0JICAvLyBDb21wdXRlIHRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgSmF2YSBiZWFuIHNrZWxldG9uCi0JICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotCSAgUG9ydCBwb3J0ID0gbnVsbDsKLQkgIEFycmF5TGlzdCBpbXBsVVJMTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIGlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJICBTdHJpbmdCdWZmZXIgYmVhbk5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCSAgCi0JCSAgLy9maXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG1hcHBpbmcgZm9yIHRoaXMgbmFtZXNwYWNlIHRvIGEgcGFja2FnZSBuYW1lCi0JCSAgLy9pZiBub3QgdGhlbiBjb21wdXRlIHBhY2thZ2UgbmFtZSBmcm9tIG5hbWVzcGFjZQotCQkgIFN0cmluZyBiZWFuUGFja2FnZU5hbWUgPSBudWxsOwotCQkgIE1hcCBtYXBwaW5ncyA9IGphdmFXU0RMUGFyYW0uZ2V0TWFwcGluZ3MoKTsKLQkJICBpZiAobWFwcGluZ3MgIT0gbnVsbCkKLQkJICB7Ci0JCQkgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJICBiZWFuUGFja2FnZU5hbWUgPSAoU3RyaW5nKW1hcHBpbmdzLmdldCh0YXJnZXROYW1lc3BhY2UpOwotCQkgIH0KLQkJICBpZiAoYmVhblBhY2thZ2VOYW1lID09IG51bGwpCi0JCSAgewotCQkJICBiZWFuUGFja2FnZU5hbWUgPSBXU0RMVXRpbHMuZ2V0UGFja2FnZU5hbWUoZGVmaW5pdGlvbik7Ci0JCSAgfQkJICAKLQkJICAKLQkJICBqYXZhV1NETFBhcmFtLnNldEJlYW5QYWNrYWdlKGJlYW5QYWNrYWdlTmFtZSk7CQkgIAotCQkgIGJlYW5OYW1lLmFwcGVuZChiZWFuUGFja2FnZU5hbWUpOwotCQkgIGJlYW5OYW1lLmFwcGVuZChET1QpOwotCQkgIAotCQkgIHNlcnZpY2UgPSAoU2VydmljZSkgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotCQkgIHBvcnQgPSAoUG9ydCkgc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotCQkgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotCQkgIAotCQkgIFN0cmluZyBxTmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsJCSAgCi0JCSAgYmVhbk5hbWUuYXBwZW5kKHFOYW1lLnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkpOy8vRml4IGZvciBidWcgMTY5MTM4LCBuZWVkIHRvIGVuc3VyZSBmaXJzdCBjaGFyIGlzIHVwcGVyY2FzZQotCQkgIGJlYW5OYW1lLmFwcGVuZChxTmFtZS5zdWJzdHJpbmcoMSkpOwotCi0JCSAgYmVhbk5hbWUuYXBwZW5kKElNUEwpOwotCQkgIFN0cmluZyBiZWFuTmFtZVN0cmluZyA9IGJlYW5OYW1lLnRvU3RyaW5nKCk7Ci0JCSAgamF2YVdTRExQYXJhbS5zZXRCZWFuTmFtZShiZWFuTmFtZVN0cmluZyk7Ci0JCSAgCi0JCSAgLy8gRGVmZWN0IDIwOTA3NSAtIERvIG5vdCBiYWNrIHVwIGFueW1vcmUgc2luY2Ugc2tlbGV0b24gbWVyZ2UgaXMgZGVmYXVsdGVkIHRvIG9uLgotCQkgIAotCQkgIFN0cmluZyBiZWFuTmFtZVBhdGhTdHJpbmcgPSBiZWFuTmFtZVN0cmluZy5yZXBsYWNlKCcuJyxJUGF0aC5TRVBBUkFUT1IpOwotCQkgIElQYXRoIHNrZWxJbXBsUGF0aCA9IG5ldyBQYXRoIChqYXZhV1NETFBhcmFtLmdldEphdmFPdXRwdXQoKSkuYXBwZW5kKG5ldyBQYXRoIChiZWFuTmFtZVBhdGhTdHJpbmcpKS5hZGRGaWxlRXh0ZW5zaW9uKEpBVkEpOwotCQkgIAotCQkgIC8vIHN0b3JlIHRoZSBuYW1lIG9mIHRoZSBpbXBsVVJMCi0JCSAgU3RyaW5nIGltcGxVUkxTdHJpbmc7Ci0JCSAgdHJ5IHsKLQkJCSAgaW1wbFVSTFN0cmluZyA9IHNrZWxJbXBsUGF0aC50b0ZpbGUoKS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0JCSAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUxKSB7Ci0JCQkgIGltcGxVUkxTdHJpbmcgPSBQbGF0Zm9ybVV0aWxzLmdldEZpbGVVUkxGcm9tUGF0aChza2VsSW1wbFBhdGgpOwotCQkgIH0KLQkJICBpbXBsVVJMTGlzdC5hZGQoIGltcGxVUkxTdHJpbmcgKTsKLQkJICAKLQkJICBTdHJpbmdbXSBpbXBsVVJMQXJyYXkgPSBuZXcgU3RyaW5nW2ltcGxVUkxMaXN0LnNpemUoKV07Ci0JCSAgd2ViU2VydmljZUluZm8uc2V0SW1wbFVSTHMoIChTdHJpbmdbXSkgKGltcGxVUkxMaXN0LnRvQXJyYXkoaW1wbFVSTEFycmF5KSkpOwotCi0JICB9IAotCSAgZWxzZSB7Ci0JCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfTk9fREVGSU5JVElPTiwgbmV3IFN0cmluZ1tdIHt3c2RsVVJMfSkpOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgfSAgCi0JICAKLQkgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICogU2V0cyB0aGUgamF2YVdTRExQYXJhbS4KLSAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0gICAgdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd2ViU2VydmljZXNQYXJzZXIgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLQotcHVibGljIHZvaWQgc2V0V2ViU2VydmljZUluZm8oV2ViU2VydmljZUluZm8gd2ViU2VydmljZUluZm8pIHsKLQl0aGlzLndlYlNlcnZpY2VJbmZvID0gd2ViU2VydmljZUluZm87Ci19Ci0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0RlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0RlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNTYzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9EZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMzMwICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyNCAgIDEyODYwMSBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA2MTAwNCAgIDE1OTM1NiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgR2V0IGNvcnJlY3QgbW9kdWxlIHJvb3QgVVJMIGJhc2VkIG9uIHNlcnZlciBjaG9zZW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5DbGFzc3BhdGhVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuUGxhdGZvcm1VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV8gPSBudWxsOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nIGphdmFCZWFuTmFtZV87IC8vIHRoaXMgbmVlZHMgdG8gYmUgc2V0IGJ5IHRoZSBleHRlbnNpb24gd2l0aCBpbml0aWFsIHNlbGVjdGlvbgotCXByaXZhdGUgU3RyaW5nIFdTRExTZXJ2aWNlVVJMXzsKLQlwcml2YXRlIFN0cmluZyBXU0RMU2VydmljZVBhdGhuYW1lXzsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIFdTUGFyc2VyXzsKLSAgICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLQkKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUiA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9FWFQgPSAiL3NlcnZpY2VzLyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMX0VYVCA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBmaW5hbCBieXRlIE1PREVfQkVBTiA9IChieXRlKSAwOwotCXB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9OQU1FX0VYVCA9ICJTZXJ2aWNlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFRFTVBfVVJJID0gImh0dHA6Ly90ZW1wdXJpLm9yZy8iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcjsKLQotCXB1YmxpYyBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZCggKSAKLQl7Ci0JfQotCQotCi0JLyoqCi0JKiBFeGVjdXRlIERlZmF1bHRzRm9ySmF2YVRvV1NETFRhc2sKLQkqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkJSVN0YXR1cyBzdGF0dXM7Ci0JCWlmIChqYXZhV1NETFBhcmFtXyA9PSBudWxsKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJCi0JCWlmIChqYXZhQmVhbk5hbWVfID09IG51bGwpIHsgIC8vIGVpdGhlciBzZXQgYnkgZXh0ZW5zaW9uIHBvaW50IG9yIGJlYW4gY2xhc3MgcGFnZQotCQkJamF2YUJlYW5OYW1lXyA9IGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCk7Ci0JCQlpZiAoamF2YUJlYW5OYW1lXyA9PSBudWxsKSB7Ci0JCQkJLy9ybSBqYXZhQmVhbk5hbWVfID0gaXNkRWxlbWVudC5nZXRKYXZhQmVhbk5hbWUoKTsKLQkJCQlqYXZhV1NETFBhcmFtXy5zZXRCZWFuTmFtZShqYXZhQmVhbk5hbWVfKTsKLQkJCX0KLQkJfQotCQkvLyBybSBXU1BhcnNlcl8gPQkoV2ViU2VydmljZXNQYXJzZXIpIHdzZV8uZ2V0V1NQYXJzZXIoKTsKLQkJCi0JCWphdmFXU0RMUGFyYW1fLnNldFNlcnZlclNpZGUoSmF2YVdTRExQYXJhbWV0ZXIuU0VSVkVSX1NJREVfQkVBTik7Ci0JCWphdmFXU0RMUGFyYW1fLnNldFNrZWxldG9uRGVwbG95KGZhbHNlKTsKLQotCQlqYXZhV1NETFBhcmFtXy5zZXRCZWFuTmFtZShqYXZhQmVhbk5hbWVfKTsKLQkJU3RyaW5nIGNsYXNzcGF0aCA9IENsYXNzcGF0aFV0aWxzLmdldEluc3RhbmNlKCkuZ2V0Q2xhc3NwYXRoU3RyaW5nKHNlcnZpY2VQcm9qZWN0Xyk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldENsYXNzcGF0aChjbGFzc3BhdGgpOwotCi0JCVN0cmluZyBzaW1wbGVCZWFuTmFtZSA9IGphdmFCZWFuTmFtZV87Ci0JCWlmIChqYXZhQmVhbk5hbWVfICE9IG51bGwpIHsKLQkJCWludCBpbmRleCA9IGphdmFCZWFuTmFtZV8ubGFzdEluZGV4T2YoJy4nKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCXNpbXBsZUJlYW5OYW1lID0gamF2YUJlYW5OYW1lXy5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgbmFtZXNwYWNlID0gV1NETFV0aWxzLm1ha2VOYW1lc3BhY2UoamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotCi0JCWphdmFXU0RMUGFyYW1fLnNldFBvcnRUeXBlTmFtZShzaW1wbGVCZWFuTmFtZSk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldFNlcnZpY2VOYW1lKHNpbXBsZUJlYW5OYW1lICsgU0VSVklDRV9OQU1FX0VYVCk7Ci0KLQkJSVBhdGggbW9kdWxlU2VydmVyUm9vdCA9IG51bGw7Ci0KLQkJSVBhdGggbW9kdWxlUGF0aCA9IHNlcnZpY2VQcm9qZWN0Xy5nZXRGdWxsUGF0aCgpOwotCQlJUGF0aCB3ZWJpbmZQYXRoID0gc2VydmljZVByb2plY3RfLmdldEZ1bGxQYXRoKCk7Ci0JCXRyeSB7Ci0JCQlpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KHNlcnZpY2VQcm9qZWN0XykpewotCQkJCW1vZHVsZVNlcnZlclJvb3QgPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbihzZXJ2aWNlUHJvamVjdF8pOwotCQkJCW1vZHVsZVBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgoc2VydmljZVByb2plY3RfKTsKLQkJCQl3ZWJpbmZQYXRoID0gSjJFRVV0aWxzLmdldFdlYkluZlBhdGgoIHNlcnZpY2VQcm9qZWN0XyApOwkJCQkKLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9ICBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfREVGQVVMVF9CRUFOLCBlICk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCQlJUGF0aCB3c2RsUGF0aCA9Ci0JCQltb2R1bGVQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikuYXBwZW5kKHNpbXBsZUJlYW5OYW1lKS5hZGRGaWxlRXh0ZW5zaW9uKFdTRExfRVhUKTsKLQotCQl0cnl7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZvbGRlcihtb2R1bGVQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikpOwotCQkJRmlsZVV0aWwuY3JlYXRlRm9sZGVyKGZvbGRlciwgdHJ1ZSwgdHJ1ZSk7Ci0JCQotCQl9Ci0JCWNhdGNoKENvcmVFeGNlcHRpb24gZSl7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1JJVEVfV1NETCwgZSApOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JCQotCQlTdHJpbmcgd3NkbExvY2F0aW9uID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZSh3c2RsUGF0aCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCi0JCWphdmFXU0RMUGFyYW1fLnNldE91dHB1dFdzZGxMb2NhdGlvbih3c2RsTG9jYXRpb24pOwotCQlqYXZhV1NETFBhcmFtXy5zZXRJbnB1dFdzZGxMb2NhdGlvbihuZXcgRmlsZSh3c2RsTG9jYXRpb24pLnRvVVJJKCkudG9TdHJpbmcoKSk7Ci0JCVdTRExTZXJ2aWNlUGF0aG5hbWVfID0gd3NkbFBhdGgudG9TdHJpbmcoKTsKLQotCQlpZiAod3NkbFBhdGggIT0gbnVsbCkgewotCQkJU3RyaW5nIHdzZGxVUkwgPSBQbGF0Zm9ybVV0aWxzLmdldEZpbGVVUkxGcm9tUGF0aChuZXcgUGF0aCh3c2RsTG9jYXRpb24pKTsKLQkJCVdTRExTZXJ2aWNlVVJMXyA9IHdzZGxVUkw7Ci0JCQkvLyBzZXQgcGFyc2VyIAotCQkJaWYgKHdzZGxVUkwgPT0gbnVsbCB8fCB3c2RsVVJMLmxlbmd0aCgpIDw9IDApIHsKLQkJCQlJUmVzb3VyY2UgcmVzID0KLQkJCQkJUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoV1NETFNlcnZpY2VQYXRobmFtZV8pOwotCQkJCWlmIChyZXMgIT0gbnVsbCkKLQkJCQkJd3NkbFVSTCA9IChuZXcgVXRpbHMoKSkudG9GaWxlU3lzdGVtVVJJKHJlcyk7Ci0JCQl9Ci0JCQlpZiAod3NkbFVSTCAhPSBudWxsICYmIHdzZGxVUkwubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJaWYgKFdTUGFyc2VyXyA9PSBudWxsKSB7Ci0JCQkJCVdTUGFyc2VyXyA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWphdmFXU0RMUGFyYW1fLnNldFN0eWxlKEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX1dSQVBQRUQpOwotCQlqYXZhV1NETFBhcmFtXy5zZXRVc2UoSmF2YVdTRExQYXJhbWV0ZXIuVVNFX0xJVEVSQUwpOwotCi0gICAgICAgIFN0cmluZyBwcm9qZWN0VVJMID0gbnVsbDsKLSAgICAgICAgaWYgKHNlcnZpY2VTZXJ2ZXJUeXBlSURfICE9IG51bGwgJiYgc2VydmljZVNlcnZlclR5cGVJRF8ubGVuZ3RoKCk+MCkKLSAgICAgICAgewotCQkgIHByb2plY3RVUkwgPSBTZXJ2ZXJVdGlscy5nZXRFbmNvZGVkV2ViQ29tcG9uZW50VVJMKHNlcnZpY2VQcm9qZWN0Xywgc2VydmljZVNlcnZlclR5cGVJRF8sIHNlcnZpY2VFeGlzdGluZ1NlcnZlcik7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGlmIChwcm9qZWN0VVJMID09IG51bGwpIC8vIGVpdGhlciBubyBzZXJ2ZXIgdHlwZSBkZWZpbmVkIG9yIHNlcnZlciBub3QgYWJsZSB0byBnZXQgcHJvamVjdCBVUkwKLSAgICAgICAgeyAKLSAgICAgICAgICBwcm9qZWN0VVJMID0gVEVNUF9VUkkgKyBzZXJ2aWNlUHJvamVjdF8uZ2V0TmFtZSgpOyAKLSAgICAgICAgICBqYXZhV1NETFBhcmFtXy5zZXRHdWVzc1Byb2plY3RVUkwodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgamF2YVdTRExQYXJhbV8uc2V0UHJvamVjdFVSTChwcm9qZWN0VVJMKTsKLQkJU3RyaW5nIHNlcnZpY2VVUkwgPSBwcm9qZWN0VVJMICsgU0VSVklDRV9FWFQgKyBzaW1wbGVCZWFuTmFtZTsKLQkJamF2YVdTRExQYXJhbV8uc2V0VXJsTG9jYXRpb24oc2VydmljZVVSTCk7Ci0JCQotCQlqYXZhV1NETFBhcmFtXy5zZXRNZXRhSW5mT25seSh0cnVlKTsKLQotCQlTdHJpbmcgamF2YU91dHB1dCA9CVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKG1vZHVsZVNlcnZlclJvb3QpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkKLQkJU3RyaW5nIHNlcnZpY2VOYW1lID0gamF2YVdTRExQYXJhbV8uZ2V0U2VydmljZU5hbWUoKTsKLQkJSVBhdGggb3V0cHV0UGF0aCA9CVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHdlYmluZlBhdGgpLmdldExvY2F0aW9uKCk7Ci0JCVN0cmluZyBvdXRwdXQgPSBzZXJ2aWNlUHJvamVjdF8uZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQlpZiAob3V0cHV0UGF0aCE9bnVsbCkKLQkJIG91dHB1dCA9IG91dHB1dFBhdGguYXBwZW5kKHNlcnZpY2VOYW1lKS50b1N0cmluZygpOwotCi0JCWphdmFXU0RMUGFyYW1fLnNldEphdmFPdXRwdXQoamF2YU91dHB1dCk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldE91dHB1dChvdXRwdXQpOwotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiBAcmV0dXJuIEphdmFXU0RMUGFyYW1ldGVyCi0JICovCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkgewotCQl0aGlzLnNlcnZpY2VQcm9qZWN0XyA9IHNlcnZpY2VQcm9qZWN0OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRKYXZhQmVhbk5hbWUoU3RyaW5nIGphdmFCZWFuTmFtZSkgewotCQl0aGlzLmphdmFCZWFuTmFtZV8gPSBqYXZhQmVhbk5hbWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0V1NETFNlcnZpY2VVUkwoKSB7Ci0JCXJldHVybiBXU0RMU2VydmljZVVSTF87Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0V1NETFNlcnZpY2VQYXRobmFtZSgpIHsKLQkJcmV0dXJuIFdTRExTZXJ2aWNlUGF0aG5hbWVfOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd3NQYXJzZXIpIHsKLQkJdGhpcy5XU1BhcnNlcl8gPSB3c1BhcnNlcjsKLQl9Ci0JCi0JcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFBhcnNlcigpIHsKLQkJcmV0dXJuIFdTUGFyc2VyXzsKLQl9Ci0KLSAgcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICAgIGlmIChvYmplY3RTZWxlY3Rpb24gIT0gbnVsbCAmJiAhb2JqZWN0U2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gb2JqZWN0U2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgc2V0SmF2YUJlYW5OYW1lKChTdHJpbmcpb2JqZWN0KTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoU3RyaW5nIGlkKQotICB7Ci0gICAgc2VydmljZVNlcnZlclR5cGVJRF8gPSBpZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgZXhpc3RpbmdTZXJ2ZXIpIHsKLQkJc2VydmljZUV4aXN0aW5nU2VydmVyID0gZXhpc3RpbmdTZXJ2ZXI7Ci0JfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svU2tlbGV0b24yV1NETENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svU2tlbGV0b24yV1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhmNmM0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1NrZWxldG9uMldTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICogMjAwNzAxMTIgICAxNjU3MjEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTREwgaW1wb3J0IGNhbm5vdCB1c2UgcmVsYXRpdmUgaW1wb3J0IHdpdGggdG8gcGFyZW50IGRpcmVjdG9yaWVzCi0gKiAyMDA3MDEyNSAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIHB1YmxpYyB1dGlsaXR5IG1ldGhvZCBmb3IgY29weWluZyBXU0RMIGZpbGVzCi0gKiAyMDA3MDQwOSAgIDE4MTYzNSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NETENvcGllciB1dGlsaXR5IHNob3VsZCBjcmVhdGUgdGFyZ2V0IGZvbGRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5QbGF0Zm9ybVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuV1NETFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLldTRExDb3BpZXI7Ci0KLXB1YmxpYyBjbGFzcyBTa2VsZXRvbjJXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfRVhUID0gIi9zZXJ2aWNlcy8iOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0VYVCA9ICJ3c2RsIjsJLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUiA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0gIHByaXZhdGUgSVByb2plY3Qgc2VydmVyUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRF87ICAKLSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcjsgIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBURU1QX1VSSSA9ICJodHRwOi8vdGVtcHVyaS5vcmcvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBTa2VsZXRvbjJXU0RMQ29tbWFuZCggKSB7Ci0gIH0KLQotICAvKioKLSAgKiBFeGVjdXRlIFNrZWxldG9uMldTRExDb21tYW5kCi0gICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkKLQkJewotCQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCi0gIC8vIFJlYWQgV1NETAotICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCVN0cmluZyB3c2RsVVJMID0gamF2YVdTRExQYXJhbS5nZXRJbnB1dFdzZGxMb2NhdGlvbigpOwotCXRyeQotCXsKLQkJVVJMIHVybCA9IG5ldyBVUkwod3NkbFVSTCk7Ci0JCWRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih1cmwudG9TdHJpbmcoKSk7Ci0JfQotCWNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCXsKLQkJd3NkbFVSTCA9IFBsYXRmb3JtVXRpbHMuZ2V0RmlsZVVSTEZyb21QYXRoKG5ldyBQYXRoKHdzZGxVUkwpKTsKLQkJZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotCX0KLQotICAgIC8vIENvbXB1dGUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBKYXZhIGJlYW4gc2tlbGV0b24KLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkgewotICAgIAkKLSAgICAJLy8gYmVhbk5hbWUgYW5kIGJlYW5QYWNrYWdlTmFtZSBhcmUgbm93IHNldCBpbiBCYWNrdXBTa2VsSW1wbENvbW1hbmQKLSAgICAJCi0gICAgCXNlcnZpY2UgPSAoU2VydmljZSkgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIAlwb3J0ID0gKFBvcnQpIHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAJCi0gICAgCWphdmFXU0RMUGFyYW0uc2V0UG9ydFR5cGVOYW1lKFdTRExVdGlscy5nZXRQb3J0VHlwZU5hbWUoZGVmaW5pdGlvbikpOwotICAgIAlqYXZhV1NETFBhcmFtLnNldFNlcnZpY2VOYW1lKFdTRExVdGlscy5nZXRTZXJ2aWNlRWxlbWVudE5hbWUoZGVmaW5pdGlvbikpOwotCi0gICAgfSAKLSAgICBlbHNlIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfTk9fREVGSU5JVElPTiwgbmV3IFN0cmluZ1tdIHt3c2RsVVJMfSkpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgIC8vIE1vZGlmeSBXU0RMIGVuZHBvaW50Ci0gICAgaWYgKHBvcnQgPT0gbnVsbCkgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NETF9OT19QT1JULCBuZXcgU3RyaW5nW10ge3dzZGxVUkx9KSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIE1hcCBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIHNlcnZpY2VzSXQgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBzZXJ2aWNlc0l0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzID0gKFNlcnZpY2Upc2VydmljZXNJdC5uZXh0KCk7Ci0gICAgICBNYXAgcG9ydHMgPSBzLmdldFBvcnRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIHBvcnRzSXQgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBwb3J0c0l0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcCA9IChQb3J0KXBvcnRzSXQubmV4dCgpOwotICAgICAgICBtb2RpZnlFbmRwb2ludChwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgV1NETCBmaWxlIG5hbWU6IGphdmFXU0RMUGFyYW0uc2V0T3V0cHV0V3NkbExvY2F0aW9uKCk7Ci0gICAgSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQotICAgIFN0cmluZyB3c2RsTG9jYXRpb24gPSBqYXZhV1NETFBhcmFtLmdldE91dHB1dFdzZGxMb2NhdGlvbigpOwotICAgIElQYXRoIHdzZGxQYXRoID0gbnVsbDsKLSAgICBJRmlsZSBvdXRwdXRGaWxlID0gbnVsbDsKLSAgICB0cnkgewotICAgICBpZih3c2RsTG9jYXRpb24gIT0gbnVsbCl7Ci0JCW91dHB1dEZpbGUgPSB3b3Jrc3BhY2UuZ2V0RmlsZUZvckxvY2F0aW9uKCBuZXcgUGF0aCh3c2RsTG9jYXRpb24pKTsKLSAgICAgfQotICAgICBlbHNlewotLy8JCXdzZGxQYXRoID0gc2VydmVyUHJvamVjdC5nZXRGdWxsUGF0aCgpOwotLy8JCQotLy8JCWlmIChzZXJ2ZXJQcm9qZWN0Lmhhc05hdHVyZShJV2ViTmF0dXJlQ29uc3RhbnRzLkoyRUVfTkFUVVJFX0lEKSkgewotLy8JCQkgICBKMkVFV2ViTmF0dXJlUnVudGltZSB3ZWJQcm9qZWN0ID0KLS8vCQkJCSAoSjJFRVdlYk5hdHVyZVJ1bnRpbWUpIHNlcnZlclByb2plY3QuZ2V0TmF0dXJlKAotLy8JCQkJICAgSVdlYk5hdHVyZUNvbnN0YW50cy5KMkVFX05BVFVSRV9JRCk7Ci0vLwkJCSAgIHdzZGxQYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKCBzZXJ2ZXJQcm9qZWN0LCBtb2R1bGVOYW1lXyApOwotLy8JCQkgICAvL3dzZGxQYXRoID0gd3NkbFBhdGguYXBwZW5kKHdlYlByb2plY3QuZ2V0V0VCSU5GUGF0aCgpKTsKLS8vCQkJIH0KLS8vCQllbHNlIGlmIChzZXJ2ZXJQcm9qZWN0Lmhhc05hdHVyZShJRUpCTmF0dXJlQ29uc3RhbnRzLk5BVFVSRV9JRCkpCi0vLwkJewotLy8JCQlFSkJOYXR1cmVSdW50aW1lIGVqYlByb2plY3QgPSBFSkJOYXR1cmVSdW50aW1lLmdldFJ1bnRpbWUoc2VydmVyUHJvamVjdCk7Ci0vLwkJCXdzZGxQYXRoID0gd3NkbFBhdGguYXBwZW5kKGVqYlByb2plY3QuZ2V0TWV0YUZvbGRlcigpLmdldFByb2plY3RSZWxhdGl2ZVBhdGgoKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpKTsKLS8vCQl9CQkKLS8vIFRPRE86ICBoYW5kbGUgRUpCIGNhc2UKLQkJICAgICB3c2RsUGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aCggc2VydmVyUHJvamVjdCApOwotCQkJIElQYXRoIHdzZGxGaWxlUGF0aCA9IHdzZGxQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikuYXBwZW5kKHBvcnQuZ2V0TmFtZSgpKS5hZGRGaWxlRXh0ZW5zaW9uKFdTRExfRVhUKTsKLQkJICAgICBJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlVXRpbHMKLQkJCQkJCQkJLmdldFdvcmtzcGFjZVJvb3QoKQotCQkJCQkJCQkuZ2V0Rm9sZGVyKHdzZGxQYXRoLmFwcGVuZChXU0RMX0ZPTERFUikpOwotCQkJIEZpbGVVdGlsLmNyZWF0ZUZvbGRlcihmb2xkZXIsIHRydWUsIHRydWUpOwkKLQkJICAgICBvdXRwdXRGaWxlID0gd29ya3NwYWNlLmdldEZpbGUod3NkbEZpbGVQYXRoKTsKLQkJCSB3c2RsTG9jYXRpb24gPSBvdXRwdXRGaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJCSBqYXZhV1NETFBhcmFtLnNldE91dHB1dFdzZGxMb2NhdGlvbih3c2RsTG9jYXRpb24pOwotCQkJIAotICAgICB9Ci0KLSAgICAgU3RyaW5nIGZvbGRlciAgID0gb3V0cHV0RmlsZS5nZXRQYXJlbnQoKS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICAgU3RyaW5nIGZpbGVuYW1lID0gb3V0cHV0RmlsZS5nZXROYW1lKCk7Ci0JCi0gICAgIFdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIod2ViU2VydmljZXNQYXJzZXIpOwotICAgICBjb3BpZXIuc2V0U291cmNlVVJJKHdzZGxVUkwsIGRlZmluaXRpb24pOwotICAgICBjb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlcik7Ci0gICAgIGNvcGllci5zZXRUYXJnZXRGaWxlbmFtZShmaWxlbmFtZSk7Ci0JCi0gICAgIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbW9uaXRvcik7Ci0JCi0gICAgIFN0cmluZyBuZXdQYXRoID0gb3V0cHV0RmlsZS5nZXRQYXJlbnQoKS5nZXRMb2NhdGlvbigpLmFwcGVuZChjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkpLnRvU3RyaW5nKCk7Ci0gICAgIGphdmFXU0RMUGFyYW0uc2V0T3V0cHV0V3NkbExvY2F0aW9uKG5ld1BhdGgpOyAgICAgCi0gICAgfSAKLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX1dTREwsIG5ldyBTdHJpbmdbXSB7IHdzZGxMb2NhdGlvbiB9KSwgZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHJpdmF0ZSBJU3RhdHVzIG1vZGlmeUVuZHBvaW50KFBvcnQgcG9ydCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gbnVsbDsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBpdC5uZXh0KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICB7Ci0gICAgICAgIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKW9iajsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChzb2FwQWRkcmVzcyAhPSBudWxsKQotICAgIHsKLSAgICAgIAotICAgICAgU3RyaW5nIHByb2plY3RVUkwgPSBudWxsOwotICAgICAgaWYgKHNlcnZpY2VTZXJ2ZXJUeXBlSURfICE9IG51bGwgJiYgc2VydmljZVNlcnZlclR5cGVJRF8ubGVuZ3RoKCk+MCkKLSAgICAgIHsKLQkgICAgcHJvamVjdFVSTCA9IFNlcnZlclV0aWxzLmdldEVuY29kZWRXZWJDb21wb25lbnRVUkwoc2VydmVyUHJvamVjdCwgc2VydmljZVNlcnZlclR5cGVJRF8sIHNlcnZpY2VFeGlzdGluZ1NlcnZlcik7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChwcm9qZWN0VVJMID09IG51bGwpIC8vIGVpdGhlciBubyBzZXJ2ZXIgdHlwZSBkZWZpbmVkIG9yIHNlcnZlciBub3QgYWJsZSB0byBnZXQgcHJvamVjdCBVUkwKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdFVSTCA9IFRFTVBfVVJJICsgc2VydmVyUHJvamVjdC5nZXROYW1lKCk7IAotICAgICAgICBqYXZhV1NETFBhcmFtLnNldEd1ZXNzUHJvamVjdFVSTCh0cnVlKTsKLSAgICAgIH0KLSAgICAgIGphdmFXU0RMUGFyYW0uc2V0UHJvamVjdFVSTChwcm9qZWN0VVJMKTsKLSAgICAgIFN0cmluZ0J1ZmZlciBzZXJ2aWNlVVJMID0gbmV3IFN0cmluZ0J1ZmZlcihwcm9qZWN0VVJMKTsKLSAgICAgIHNlcnZpY2VVUkwuYXBwZW5kKFNFUlZJQ0VfRVhUKS5hcHBlbmQocG9ydC5nZXROYW1lKCkpOwotICAgICAgamF2YVdTRExQYXJhbS5zZXRVcmxMb2NhdGlvbihzZXJ2aWNlVVJMLnRvU3RyaW5nKCkpOwotICAgICAgc29hcEFkZHJlc3Muc2V0TG9jYXRpb25VUkkoc2VydmljZVVSTC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICogQHJldHVybiBKYXZhV1NETFBhcmFtZXRlcgotICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICogQHBhcmFtIGphdmFXU0RMUGFyYW0gVGhlIGphdmFXU0RMUGFyYW0gdG8gc2V0Ci0gICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotICAgIHRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHNlcnZlclByb2plY3QgVGhlIHNlcnZlclByb2plY3QgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChJUHJvamVjdCBzZXJ2ZXJQcm9qZWN0KSB7Ci0gICAgdGhpcy5zZXJ2ZXJQcm9qZWN0ID0gc2VydmVyUHJvamVjdDsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdlYlNlcnZpY2VzUGFyc2VyLgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd2ViU2VydmljZXNQYXJzZXIgVGhlIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotICB7Ci0gIAlGaWxlIGZpbGUgPSBuZXcgRmlsZShnZXRKYXZhV1NETFBhcmFtKCkuZ2V0T3V0cHV0V3NkbExvY2F0aW9uKCkpOyAKLSAgICBTdHJpbmcgdXJsID0gIiI7Ci0JICB0cnkgewotICAgIAl1cmwgPSBmaWxlLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICB9Ci0JICBjYXRjaChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVlKXt9Ci0JcmV0dXJuIHVybDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgaWQpCi0gIHsKLSAgICBzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IGlkOwotICB9Ci0KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihJU2VydmVyIGV4aXN0aW5nU2VydmVyKSB7Ci0Jc2VydmljZUV4aXN0aW5nU2VydmVyID0gZXhpc3RpbmdTZXJ2ZXI7Ci19ICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9URENvbmZpZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svVERDb25maWdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNDEyZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9URENvbmZpZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDEyMDEzNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFREQ29uZmlnQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotICBwdWJsaWMgVERDb25maWdDb21tYW5kKCkgCi0gIHsKLSAgfQotICAKLSAgLyoKLSAgICogVGhlIGV4ZWN1dGUgbWV0aG9kIG9mIHRoaXMgY29tbWFuZCBkbyBub3RoaW5nLiAgSXQgaXMgbWVyZWx5IGFuIGFuY2hvciBwb2ludCBmb3IgVUkgcGFnZQotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlKSB7Ci0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9VcGRhdGVBeGlzV1NEREZpbGVUYXNrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1VwZGF0ZUF4aXNXU0RERmlsZVRhc2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyNWNiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1VwZGF0ZUF4aXNXU0RERmlsZVRhc2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MTcgICAxMzQxMDQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMDMwICAgMTI4NDE5IGtlbHZpbmhjQGNhLmlibS5jb20gLSBLZWx2aW4gSC4gQ2hldW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFVwZGF0ZUF4aXNXU0RERmlsZVRhc2sgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVQTE9ZX1hTTCA9ICJkZXBsb3kueHNsIjsJLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFUExPWV9CQUsgPSAiZGVwbG95LndzZGQuYmFrIjsJCS8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTEFTU05BTUVfUEFSQU0gPSAibmV3Q2xhc3NOYW1lIjsJCS8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1fOwotCXByaXZhdGUgSVByb2plY3Qgc2VydmljZVByb2plY3RfOwotICAgIAotCXB1YmxpYyBVcGRhdGVBeGlzV1NEREZpbGVUYXNrKCkgCi0JewotCX0KLQkKLQkvKioKLQkqIEV4ZWN1dGUgVXBkYXRlQXhpc1dTRERGaWxlVGFzawotCSovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsgICAgCi0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsJCQotCQlpZiAoamF2YVdTRExQYXJhbV8gPT0gbnVsbCkgewotCQkgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkgIHJldHVybiBzdGF0dXM7CQkgIAotCQl9Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IHNlcnZpY2VQcm9qZWN0XzsKLSAgICAgICAgCi0JCVN0cmluZyBvdXRwdXRMb2NhdGlvbiA9IGphdmFXU0RMUGFyYW1fLmdldEphdmFPdXRwdXQoKTsKLQkJaWYgKG91dHB1dExvY2F0aW9uID09IG51bGwpIHsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCQlTdHJpbmcgd2ViQ29udGVudFBhdGggPQlKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lciggcHJvamVjdCApLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJdHJ5IHsKLQotCQkJaWYgKGphdmFXU0RMUGFyYW1fLmdldERlcGxveW1lbnRGaWxlcygpICE9IG51bGwKLQkJCQkmJiBqYXZhV1NETFBhcmFtXy5nZXREZXBsb3ltZW50RmlsZXMoKS5sZW5ndGggPiAwKSB7Ci0KLQkJCQlTdHJpbmcgd3NkZF9kZXBsb3kgPSBqYXZhV1NETFBhcmFtXy5nZXREZXBsb3ltZW50RmlsZXMoKVswXTsKLQkJCQlJUGF0aCBkZXBsb3lQYXRoID0gbmV3IFBhdGgod3NkZF9kZXBsb3kpOwotCQkJCVN0cmluZyBkZXBsb3lCYWNrdXAgPQotCQkJCQlkZXBsb3lQYXRoCi0JCQkJCQkucmVtb3ZlTGFzdFNlZ21lbnRzKDEpCi0JCQkJCQkuYXBwZW5kKERFUExPWV9CQUspCi0JCQkJCQkudG9TdHJpbmcoKTsKLQkJCQlGaWxlVXRpbC5jcmVhdGVUYXJnZXRGaWxlKHdzZGRfZGVwbG95LCBkZXBsb3lCYWNrdXAsIHRydWUpOwotCi0JCQkJVHJhbnNmb3JtZXJGYWN0b3J5IHRGYWN0b3J5ID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLQkJCQkvLyBVc2UgdGhlIFRyYW5zZm9ybWVyRmFjdG9yeSB0byBpbnN0YW50aWF0ZSBhIFRyYW5zZm9ybWVyIHRoYXQgd2lsbCB3b3JrIHdpdGggIAotCQkJCS8vIHRoZSBzdHlsZXNoZWV0IHlvdSBzcGVjaWZ5LiBUaGlzIG1ldGhvZCBjYWxsIGFsc28gcHJvY2Vzc2VzIHRoZSBzdHlsZXNoZWV0Ci0JCQkJLy8gaW50byBhIGNvbXBpbGVkIFRlbXBsYXRlcyBvYmplY3QuCi0JCQkJVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPQotCQkJCQl0RmFjdG9yeS5uZXdUcmFuc2Zvcm1lcihuZXcgU3RyZWFtU291cmNlKGdldFBsdWdpbkZpbGVBc0lucHV0U3RyZWFtKERFUExPWV9YU0wpKSk7Ci0JCQkJdHJhbnNmb3JtZXIuc2V0UGFyYW1ldGVyKENMQVNTTkFNRV9QQVJBTSwgamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSk7Ci0KLQkJCQkvLyBVc2UgdGhlIFRyYW5zZm9ybWVyIHRvIGFwcGx5IHRoZSBhc3NvY2lhdGVkIFRlbXBsYXRlcyBvYmplY3QgdG8gYW4gWE1MIGRvY3VtZW50Ci0JCQkJLy8gKGZvby54bWwpIGFuZCB3cml0ZSB0aGUgb3V0cHV0IHRvIGEgZmlsZSAoZm9vLm91dCkuCi0gICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gd3NkZFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCB3c2RkX2RlcGxveSApOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLQkJCQkgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybSggbmV3IFN0cmVhbVNvdXJjZShkZXBsb3lCYWNrdXApLCBuZXcgU3RyZWFtUmVzdWx0KHdzZGRTdHJlYW0pICk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgd3NkZFN0cmVhbS5jbG9zZSgpOwotICAgICAgICB9Ci0KLQotICAgICAgICBJUmVzb3VyY2UgZGVwbG95RmlsZSA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlQXRMb2NhdGlvbih3c2RkX2RlcGxveSwgcHJvamVjdCk7Ci0gICAgICAgIGlmKCBkZXBsb3lGaWxlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgIAlkZXBsb3lGaWxlLnJlZnJlc2hMb2NhbCggSVJlc291cmNlLkRFUFRIX1pFUk8sIG1vbml0b3IgKTsKLSAgICAgICAgfQotCi0JCX0KLQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkgICAgU3RyaW5nW10gZXJyb3JNc2dTdHJpbmdzID0gbmV3IFN0cmluZ1tde3Byb2plY3QudG9TdHJpbmcoKSwgb3V0cHV0TG9jYXRpb24udG9TdHJpbmcoKSwgd2ViQ29udGVudFBhdGgudG9TdHJpbmcoKX07IAotCQkgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVVBEQVRFX0FYSVNfV1NERCwgZXJyb3JNc2dTdHJpbmdzKSwgZSk7Ci0JCSAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJICAgIHJldHVybiBzdGF0dXM7CQkgIAkJICAKLQkJfQotCQkKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0JCi0JcHJpdmF0ZSBJbnB1dFN0cmVhbSBnZXRQbHVnaW5GaWxlQXNJbnB1dFN0cmVhbShTdHJpbmcgcGx1Z2luZmlsZU5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCUlucHV0U3RyZWFtIGlzID0gV2ViU2VydmljZUF4aXNDcmVhdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkocGx1Z2luZmlsZU5hbWUpLm9wZW5TdHJlYW0oKTsKLQkJCi0JCQlyZXR1cm4gaXM7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKAotCQkJCW5ldyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzKAotCQkJCQlJU3RhdHVzLldBUk5JTkcsCi0JCQkJCVdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5JRCwKLQkJCQkJMCwKLQkJCQkJQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfUExVR0lOX0ZJTEVfVVJMLAotCQkJCQllKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkqIFNldHMgdGhlIGphdmFXU0RMUGFyYW0uCi0JKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQKLQkqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQlqYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW07Ci0JfQotCQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLQl7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtXzsKLQl9CQotCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpCi0JewotCSAgc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0JfQotCSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9CVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yjc5NWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9CVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIAotICAvL1Byb3ZpZGUKLSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0gIHByaXZhdGUgU3RyaW5nIGphdmFCZWFuTmFtZV87Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyXzsKLSAgcHJpdmF0ZSBib29sZWFuIGZvcmNlQnVpbGRfID0gdHJ1ZTsKLSAgcHJpdmF0ZSBCb29sZWFuIElzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQgPSBCb29sZWFuLlRSVUU7IC8vIHJzayByZXZpc2l0Ci0gIHByaXZhdGUgVmFsaWRhdGlvbk1hbmFnZXIgdmFsaWRhdGlvbk1hbmFnZXJfOwotICBwcml2YXRlIGJvb2xlYW4gY3VzdG9taXplU2VydmljZU1hcHBpbmdzXyA9IGZhbHNlOwotICAKLSAgLy9UaGlzIGlzIHByb3h5IGFuZCBjbGllbnQgcmVsYXRlZCBpbmZvcm1hdGlvbgotICAvL3doaWNoIGNhbiBiZSBudWxsZWQgZm9yIGNvbW1hbmRzIGRlYWxpbmcKLSAgLy93aXRoIHNlcnZpY2UgY3JlYXRpb24uCi0gIC8vcnNrIHJldmlzaXQKLSAgcHJpdmF0ZSBCb29sZWFuIGlzUHJveHlQcm9qZWN0XyA9IEJvb2xlYW4uRkFMU0U7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFJ1bnRpbWVJRF8gPSBudWxsOwotICBwcml2YXRlIElQcm9qZWN0IHByb3h5UHJvamVjdF8gPSBudWxsOwotICBwcml2YXRlIElQcm9qZWN0IHNhbXBsZVByb2plY3RfID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlEXyA9IG51bGw7Ci0gIHByaXZhdGUgSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcl8gPSBudWxsOwotICAKLSAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotICB7Ci0JSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLQkvL2phdmFXU0RMUGFyYW0KLQlqYXZhV1NETFBhcmFtXyA9IG5ldyBKYXZhV1NETFBhcmFtZXRlcigpOwotICAgIAotCWlmIChqYXZhQmVhbk5hbWVfID09IG51bGwpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLQkJCQlBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9DQU5OT1RfTk9fSkFWQV9CRUFOKTsKLQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotICAgIAotICAgIC8vcGFyc2VyCi0gICAgcGFyc2VyXyA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAgIAotICAgIC8vdmFsaWRhdGlvbk1hbmFnZXIKLSAgICB2YWxpZGF0aW9uTWFuYWdlcl8gPSBuZXcgVmFsaWRhdGlvbk1hbmFnZXIoKTsKLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLQkKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50UnVudGltZUlEXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZUlEKCkKLSAgewotICAgIHJldHVybiBjbGllbnRSdW50aW1lSURfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGZvcmNlQnVpbGRfLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0Rm9yY2VCdWlsZCgpCi0gIHsKLSAgICByZXR1cm4gZm9yY2VCdWlsZF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaXNQcm94eVByb2plY3RfLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0SXNQcm94eVByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIGlzUHJveHlQcm9qZWN0XzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBqYXZhQmVhbk5hbWVfLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRKYXZhQmVhbk5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGphdmFCZWFuTmFtZV87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbV8uCi0gICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpCi0gIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbV87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcGFyc2VyXy4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRQYXJzZXIoKQotICB7Ci0gICAgcmV0dXJuIHBhcnNlcl87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJveHlQcm9qZWN0Xy4KLSAgICovCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm94eVByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIHByb3h5UHJvamVjdF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfLgotICAgKi8KLSAgcHVibGljIElTZXJ2ZXIgZ2V0U2FtcGxlRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNhbXBsZUV4aXN0aW5nU2VydmVyXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzYW1wbGVQcm9qZWN0Xy4KLSAgICovCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRTYW1wbGVQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBzYW1wbGVQcm9qZWN0XzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzYW1wbGVTZXJ2ZXJUeXBlSURfLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTYW1wbGVTZXJ2ZXJUeXBlSUQoKQotICB7Ci0gICAgcmV0dXJuIHNhbXBsZVNlcnZlclR5cGVJRF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdmFsaWRhdGlvbk1hbmFnZXJfLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25NYW5hZ2VyIGdldFZhbGlkYXRpb25NYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiB2YWxpZGF0aW9uTWFuYWdlcl87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8uCi0gICAqLwotICBwdWJsaWMgSVNlcnZlciBnZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci0gIH0KLSAgCi0gCi0gIHB1YmxpYyBib29sZWFuIGdldEN1c3RvbWl6ZVNlcnZpY2VNYXBwaW5ncygpCi0gIHsKLSAgICByZXR1cm4gY3VzdG9taXplU2VydmljZU1hcHBpbmdzXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0SXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZCgpCi0gIHsKLSAgICByZXR1cm4gSXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZDsKLSAgfQotCi1wdWJsaWMgdm9pZCBzZXRKYXZhQmVhbk5hbWUoU3RyaW5nIGphdmFCZWFuTmFtZSkgewotCXRoaXMuamF2YUJlYW5OYW1lXyA9IGphdmFCZWFuTmFtZTsKLX0KLSAgCi0vLyAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIGlkcykKLS8vICB7Ci0vLyAgICBzZXJ2aWNlSWRzXyA9IGlkczsKLS8vICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vQmVhbkNvbmZpZ1dpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9iZWFuL0JlYW5Db25maWdXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4ZjcyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vQmVhbkNvbmZpZ1dpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyMSAgIDEyODgyNyBqb2FuIC0gSm9hbiBIYWdnYXJ0eSwgcmVtb3ZlIHJlZHVuZGFudCB3c2RsIFVSSSwgZm9sZGVyIGFuZCBmaWxlIGNvbnRyb2xzCi0gKiAyMDA2MDUyNCAgIDEyODYwMSBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5iZWFuOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLQotcHVibGljIGNsYXNzIEJlYW5Db25maWdXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgCi17Ci0KLSAgcHJpdmF0ZSBCdXR0b24gICBycGNFbmNvZGVkQnV0dG9uXzsKLSAgcHJpdmF0ZSBCdXR0b24gICBycGNMaXRlcmFsQnV0dG9uXzsKLSAgcHJpdmF0ZSBCdXR0b24gICBkb2NMaXRlcmFsQnV0dG9uXzsKLSAgCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotICAKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhUGFyYW1ldGVyXzsKLSAgCi0gIC8qIENPTlRFWFRfSUQgUEJDRjAwMDEgZm9yIHRoZSBCZWFuIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUEJDRl9QQUdFID0gIlBCQ0YwMDAxIjsgLy8kTk9OLU5MUy0xJAotCQotICBwcml2YXRlIFN0cmluZyB3c2RsRm9sZGVyXzsKLSAgCi0gIHByaXZhdGUgVGV4dCB3c2RsRmlsZVRleHRfOwotICAvKiBDT05URVhUX0lEIFBCQ0YwMDA3IGZvciB0aGUgV1NETCBGaWxlIGZpZWxkIG9mIHRoZSBCZWFuIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUEJDRl9URVhUX1dTRExfRklMRSA9ICJQQkNGMDAwNyI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgcHJpdmF0ZSBUcmVlIG1ldGhvZHNUcmVlXzsKLSAgLyogQ09OVEVYVF9JRCBQQk1FMDAwMiBmb3IgdGhlIE1ldGhvZHMgdHJlZSBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQk1FX1RSRUVfTUVUSE9EUyA9ICJQQk1FMDAwMiI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgcHJpdmF0ZSBCdXR0b24gc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl87Ci0gIC8qIENPTlRFWFRfSUQgUEJNRTAwMTAgZm9yIHRoZSBTZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQk1FX0JVVFRPTl9TRUxFQ1RfQUxMID0gIlBCTUUwMDEwIjsgLy8kTk9OLU5MUy0xJAotCQotICBwcml2YXRlIEJ1dHRvbiBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fOwotICAvKiBDT05URVhUX0lEIFBCTUUwMDExIGZvciB0aGUgRGVzZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQk1FX0JVVFRPTl9ERVNFTEVDVF9BTEwgPSAiUEJNRTAwMTEiOyAvLyROT04tTkxTLTEkCi0JCi0gIHByaXZhdGUgQnV0dG9uIHNob3dNYXBwaW5nc0NoZWNrYm94XzsKLSAgLyogQ09OVEVYVF9JRCBQQkNGMDAxNiBmb3IgdGhlIFNob3cgTWFwcGluZ3MgY2hlY2tib3ggb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlICovICAgCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUDJOX1NIT1dfTUFQUElOR1MgPSAiUEJDRjAwMTYiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotCVN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiOwkgIAotCi0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgICAgICAgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkXyApOwotICAgIFVJVXRpbHMgICAgICBiYXNlQ29uVWlVdGlscyA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZF8gKTsKLSAgICAKLSAgICBzdGF0dXNMaXN0ZW5lcl8gPSBzdGF0dXNMaXN0ZW5lcjsgICAgCi0JcGFyZW50LnNldFRvb2xUaXBUZXh0KCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJDRl9QQUdFICApOwotCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWRfICsgIi4iICsgSU5GT1BPUF9QQkNGX1BBR0UgKTsKLSAgICAKLSAgICBDb21wb3NpdGUgY29uZmlnR3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAyICk7ICAgIAotICAgIAotICAgIHdzZGxGaWxlVGV4dF8gPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGNvbmZpZ0dyb3VwLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLkxBQkVMX09VVFBVVF9GSUxFX05BTUUsCi0gICAgCQlBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJDRl9URVhUX1dTRExfRklMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BCQ0ZfVEVYVF9XU0RMX0ZJTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgICk7Ci0gICAgd3NkbEZpbGVUZXh0Xy5hZGRMaXN0ZW5lciggU1dULk1vZGlmeSwgc3RhdHVzTGlzdGVuZXIgKTsKLSAgICAKLSAgICAvLyBUT0RPIHRoaXMgZ3JvdXAgaGFzIG5vIFRPT0xUSVAgb3IgSU5GT1BPUC4KLSAgICBHcm91cCAgICBtZXRob2RzR3JvdXAgPSBiYXNlQ29uVWlVdGlscy5jcmVhdGVHcm91cCggcGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfTUVUSE9EUywgbnVsbCwgbnVsbCApOwotCW1ldGhvZHNHcm91cC5zZXRMYXlvdXREYXRhKCB1aVV0aWxzLmNyZWF0ZUZpbGxBbGwoKSApOwotCQotCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCW1ldGhvZHNHcm91cC5zZXRMYXlvdXQoIGxheW91dCApOwotCQotCW1ldGhvZHNUcmVlXyA9IHVpVXRpbHMuY3JlYXRlVHJlZSggbWV0aG9kc0dyb3VwLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJNRV9UUkVFX01FVEhPRFMsIAotCQkJCQkJCQkJCUlORk9QT1BfUEJNRV9UUkVFX01FVEhPRFMsCi0JICAgICAgICAgICAgICAgICAgIAkJCQkgICBTV1QuTVVMVEkgfCBTV1QuQk9SREVSIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMCXwgU1dULkNIRUNLICk7Ci0JbWV0aG9kc1RyZWVfLmFkZExpc3RlbmVyKCBTV1QuU2VsZWN0aW9uLCBzdGF0dXNMaXN0ZW5lciApOwotCi0gICAgQ29tcG9zaXRlIHNlbGVjdEJ1dHRvbnMgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggbWV0aG9kc0dyb3VwLCAyICk7Ci0gICAgCi0gICAgc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8gCi0gICAgICA9IGJhc2VDb25VaVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIHNlbGVjdEJ1dHRvbnMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fU0VMRUNUX0FMTCwgCi0gICAgCQkgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCTUVfQlVUVE9OX1NFTEVDVF9BTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QQk1FX0JVVFRPTl9TRUxFQ1RfQUxMICk7Ci0gICAgc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RBbGwoIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIAotICAgIGRlc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl8gCi0gICAgICA9IGJhc2VDb25VaVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIHNlbGVjdEJ1dHRvbnMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fREVTRUxFQ1RfQUxMLCAKLSAgICAJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJNRV9CVVRUT05fREVTRUxFQ1RfQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJNRV9CVVRUT05fREVTRUxFQ1RfQUxMICk7Ci0gICAgZGVzZWxlY3RBbGxNZXRob2RzQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0QWxsKCBmYWxzZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIAotICAgIC8vIFRPRE8gdGhpcyBncm91cCBoYXMgbm8gVE9PTFRJUCBvciBJTkZPUE9QLgotICAgIEdyb3VwIHN0eWxlR3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUdyb3VwKCBwYXJlbnQsIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RZTEVfVVNFLCBudWxsLCBudWxsICk7Ci0gICAgCi0gICAgLy8gVE9ETyByYWRpbyBidXR0b25zIGhhdmUgbm8gVE9PTFRJUCBvciBJTkZPUE9QLgotICAgIGRvY0xpdGVyYWxCdXR0b25fID0gdWlVdGlscy5jcmVhdGVSYWRpb0J1dHRvbiggc3R5bGVHcm91cCwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5TVFlMRV9ET0NfTElURVJBTCwgbnVsbCwgbnVsbCApOwotICAgIHJwY0xpdGVyYWxCdXR0b25fID0gdWlVdGlscy5jcmVhdGVSYWRpb0J1dHRvbiggc3R5bGVHcm91cCwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5TVFlMRV9SUENfTElURVJBTCwgbnVsbCwgbnVsbCApOwotICAgIHJwY0VuY29kZWRCdXR0b25fID0gdWlVdGlscy5jcmVhdGVSYWRpb0J1dHRvbiggc3R5bGVHcm91cCwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5TVFlMRV9SUENfRU5DT0RFRCwgbnVsbCwgbnVsbCApOwotICAgIAotICAgIHNob3dNYXBwaW5nc0NoZWNrYm94XyA9IHVpVXRpbHMuY3JlYXRlQ2hlY2tib3goIHBhcmVudCwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5MQUJFTF9FWFBMT1JFX01BUFBJTkdTX0JFQU4yWE1MLAotICAgIAkJQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5UT09MVElQX1AyTl9TSE9XX01BUFBJTkdTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUDJOX1NIT1dfTUFQUElOR1MgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVNlbGVjdEFsbCggYm9vbGVhbiB2YWx1ZSApCi0gIHsKLQlUcmVlSXRlbVtdIGl0ZW1zID0gbWV0aG9kc1RyZWVfLmdldEl0ZW1zKCk7Ci0JCi0JZm9yKCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKyApIAotCXsKLQkgIGl0ZW1zW2ldLnNldENoZWNrZWQodmFsdWUpOwotCX0KLQkKLQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQoIG51bGwgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q3VzdG9taXplU2VydmljZU1hcHBpbmdzKCBib29sZWFuIHZhbHVlICkKLSAgewotICAgIHNob3dNYXBwaW5nc0NoZWNrYm94Xy5zZXRTZWxlY3Rpb24oIHZhbHVlICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEN1c3RvbWl6ZVNlcnZpY2VNYXBwaW5ncygpCi0gIHsKLSAgICByZXR1cm4gc2hvd01hcHBpbmdzQ2hlY2tib3hfID09IG51bGwgPyBmYWxzZSA6IHNob3dNYXBwaW5nc0NoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SmF2YVBhcmFtZXRlciggSmF2YVdTRExQYXJhbWV0ZXIgamF2YVBhcmFtZXRlciApCi0gIHsKLSAgICBqYXZhUGFyYW1ldGVyXyA9IGphdmFQYXJhbWV0ZXI7Ci0gICAgCi0JU3RyaW5nIHdzZGxMb2NhdGlvbiA9IGphdmFQYXJhbWV0ZXIuZ2V0T3V0cHV0V3NkbExvY2F0aW9uKCk7Ci0JSVBhdGggd3NkbFBhdGggPSBuZXcgUGF0aCggd3NkbExvY2F0aW9uICk7Ci0JCi0Jd3NkbEZvbGRlcl8gPSB3c2RsUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSkudG9TdHJpbmcoKTsgICAgCi0Jd3NkbEZpbGVUZXh0Xy5zZXRUZXh0KHdzZGxQYXRoLmxhc3RTZWdtZW50KCkpOwotICAgIAotCW1ldGhvZHNUcmVlXy5yZW1vdmVBbGwoKTsKLQlIYXNodGFibGUgbWV0aG9kcyA9IGphdmFQYXJhbWV0ZXIuZ2V0TWV0aG9kcygpOwotCUVudW1lcmF0aW9uIGUgPSBtZXRob2RzLmtleXMoKTsKLQkKLQl3aGlsZSggZS5oYXNNb3JlRWxlbWVudHMoKSApCi0JewotCSAgU3RyaW5nICAgbmFtZSA9IChTdHJpbmcpIGUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFRyZWVJdGVtIGl0ZW0gPSBuZXcgVHJlZUl0ZW0obWV0aG9kc1RyZWVfLCBTV1QuTlVMTCk7Ci0gICAgICAKLSAgIAkgIGl0ZW0uc2V0RGF0YShuYW1lKTsKLSAgICAgIGl0ZW0uc2V0VGV4dChuYW1lKTsKLSAgICAgIGl0ZW0uc2V0Q2hlY2tlZCgoKChCb29sZWFuKSBtZXRob2RzLmdldChuYW1lKSkuYm9vbGVhblZhbHVlKCkpKTsKLQl9Ci0JCi0JVHJlZUl0ZW1bXSBpdGVtcyA9IG1ldGhvZHNUcmVlXy5nZXRJdGVtcygpOwotCQotCWlmKCBpdGVtcy5sZW5ndGggPiAwICkgCi0JewotCSAgbWV0aG9kc1RyZWVfLnNldFNlbGVjdGlvbiggbmV3IFRyZWVJdGVtW117IGl0ZW1zWzBdIH0gKTsKLQl9Ci0JCi0JU3RyaW5nIHN0eWxlID0gamF2YVBhcmFtZXRlci5nZXRTdHlsZSgpOwotCQotCWlmKCBzdHlsZS5lcXVhbHMoIEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX1JQQyApICkKLQl7Ci0JICBycGNFbmNvZGVkQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JfQotCWVsc2UgaWYoIHN0eWxlLmVxdWFscyggSmF2YVdTRExQYXJhbWV0ZXIuU1RZTEVfRE9DVU1FTlQgKSApCi0JewotCSAgcnBjTGl0ZXJhbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOwkgIAotCX0KLQllbHNlCi0JewotCSAgZG9jTGl0ZXJhbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOyAgCi0JfQotICB9Ci0gIAotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVBhcmFtZXRlcigpCi0gIHsKLSAgICAKLSAgICBJUGF0aCB3c2RsUGF0aCAKLSAgICA9IG5ldyBQYXRoKCB3c2RsRm9sZGVyXy50cmltKCkgKS5hcHBlbmQoIHdzZGxGaWxlVGV4dF8uZ2V0VGV4dCgpLnRyaW0oKSApOwotICAgIAotCS8vIFRPRE8gRG8gd2UgbmVlZCB0byBnbyB0byB0aGUgZWNsaXBzZSBmaWxlIHN5c3RlbT8/Ci0JLy9TdHJpbmcgd3NkbExvY2F0aW9uID0gd29ya3NwYWNlLmdldEZpbGUod3NkbFBhdGgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQlTdHJpbmcgd3NkbExvY2F0aW9uID0gd3NkbFBhdGgudG9TdHJpbmcoKTsKLQkKLQlqYXZhUGFyYW1ldGVyXy5zZXRPdXRwdXRXc2RsTG9jYXRpb24od3NkbExvY2F0aW9uKTsKLQlqYXZhUGFyYW1ldGVyXy5zZXRJbnB1dFdzZGxMb2NhdGlvbihuZXcgRmlsZSh3c2RsTG9jYXRpb24pLnRvVVJJKCkudG9TdHJpbmcoKSk7Ci0JCi0JSGFzaHRhYmxlIG1ldGhvZHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLQlUcmVlSXRlbVtdIGl0ZW1zID0gbWV0aG9kc1RyZWVfLmdldEl0ZW1zKCk7Ci0JCi0JZm9yKCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKyApIAotCXsKLQkgIFRyZWVJdGVtIGl0ZW0gPSBpdGVtc1tpXTsKLQkgIG1ldGhvZHMucHV0KChTdHJpbmcpaXRlbS5nZXREYXRhKCksIG5ldyBCb29sZWFuKGl0ZW0uZ2V0Q2hlY2tlZCgpKSk7Ci0JfQotCQotCWphdmFQYXJhbWV0ZXJfLnNldE1ldGhvZHMobWV0aG9kcyk7Ci0JCi0JaWYoIHJwY0VuY29kZWRCdXR0b25fLmdldFNlbGVjdGlvbigpKSAKLQl7Ci0JICBqYXZhUGFyYW1ldGVyXy5zZXRTdHlsZShKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9SUEMpOwotCSAgamF2YVBhcmFtZXRlcl8uc2V0VXNlKEphdmFXU0RMUGFyYW1ldGVyLlVTRV9FTkNPREVEKTsKLQl9IAotCWVsc2UgaWYoIHJwY0xpdGVyYWxCdXR0b25fLmdldFNlbGVjdGlvbigpKSAKLQl7Ci0JICBqYXZhUGFyYW1ldGVyXy5zZXRTdHlsZShKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9ET0NVTUVOVCk7Ci0JICBqYXZhUGFyYW1ldGVyXy5zZXRVc2UoSmF2YVdTRExQYXJhbWV0ZXIuVVNFX0xJVEVSQUwpOwotCX0gCi0JZWxzZSAKLQl7Ci0JICBqYXZhUGFyYW1ldGVyXy5zZXRTdHlsZShKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9XUkFQUEVEKTsKLQkgIGphdmFQYXJhbWV0ZXJfLnNldFVzZShKYXZhV1NETFBhcmFtZXRlci5VU0VfTElURVJBTCk7Ci0JfQotICAgIAotCXJldHVybiBqYXZhUGFyYW1ldGVyXzsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yI2dldFN0YXR1cygpCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSAKLSAgewotICAgIElTdGF0dXMgICAgICAgcmVzdWx0ICAgPSBudWxsOwotICAgIAotICAgIGlmKCB3c2RsRmlsZVRleHRfLmdldFRleHQoKS5lcXVhbHMoICIiICkgKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX05PX0ZJTEVfU1BFQ0lGSUVEICk7IAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgVHJlZUl0ZW1bXSBpdGVtcyAgICAgICAgPSBtZXRob2RzVHJlZV8uZ2V0SXRlbXMoKTsKLSAgICAgIGJvb2xlYW4gICAgaXRlbVNlbGVjdGVkID0gZmFsc2U7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBpZiggaXRlbXNbaW5kZXhdLmdldENoZWNrZWQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmKCAhaXRlbVNlbGVjdGVkICkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfTk9fTUVUSE9EX1NFTEVDVEVEICk7IAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYzA3NDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9iZWFuL1ZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkphdmFNT0ZVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5KYXZhUmVzb3VyY2VGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgSkFWQV9FWFRFTlNJT04gPSAiLmphdmEiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgU3RyaW5nIENMQVNTX0VYVEVOU0lPTiA9ICIuY2xhc3MiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWU7Ci0KLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgc2VsZWN0ZWQgSmF2YSBiZWFuIGNhbiBiZSBsb2FkZWQgZnJvbSB0aGUgc2VydmljZSBwcm9qZWN0LiBJZiBpdCBjYW4ndCwgYW4gZXJyb3IgaXMgZGlzcGxheWVkLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAvL01ha2Ugc3VyZSBhIGJlYW4gaXMgc2VsZWN0ZWQKLSAgICBTdHJpbmcgamF2YUJlYW5OYW1lID0gbnVsbDsKLSAgICBpZiAob2JqZWN0U2VsZWN0aW9uICE9IG51bGwgJiYgIW9iamVjdFNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgewotICAgICAgT2JqZWN0IG9iamVjdCA9IG9iamVjdFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICB7Ci0gICAgICAgIGphdmFCZWFuTmFtZSA9ICgoU3RyaW5nKW9iamVjdCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAJLy9UaGUgT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IG5ldmVyIGFwcGVhcmVkIGFuZCBzbyB0aGUgSVN0dWN0dXJlZFNlbGVjdGlvbiBmcm9tIAotICAgICAgCS8vT2JqZWN0U2VsZWN0aW9uV2lkZ2V0T3V0cHV0Q29tbWFuZCBpcyB0aGUgaW5pdGlhbCBzZWxlY3Rpb24uIAotICAgICAgCS8vR2V0IHRoZSBKYXZhIGJlYW4gbmFtZSBmcm9tIHRoZSBzZWxlY3Rpb24uCi0gICAgICAJdHJ5Ci0JCXsKLSAgICAgIAkgIFN5c3RlbS5vdXQucHJpbnRsbihvYmplY3QuZ2V0Q2xhc3MoKS50b1N0cmluZygpKTsKLSAgICAgIAkgIGphdmFCZWFuTmFtZSA9IGdldEphdmFCZWFuRnJvbU9iamVjdFNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb24pOwotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotCQl7Ci0JCSAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0NBTk5PVF9OT19KQVZBX0JFQU4pOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCSAgcmV0dXJuIGVycm9yU3RhdHVzOwkJCQotCQl9Ci0gICAgICB9Ci0gICAgfSAgICAKLSAgICAKLSAgICBpZiAoamF2YUJlYW5OYW1lPT1udWxsIHx8IGphdmFCZWFuTmFtZS5sZW5ndGgoKT09MCkKLSAgICB7Ci0gICAgICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQ0FOTk9UX05PX0pBVkFfQkVBTik7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOwotICAgIH0KLSAgICAKLSAgICAvL01ha2Ugc3VyZSBhIHByb2plY3QgaXMgc2VsZWN0ZWQKLSAgICBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWUpOwotICAgIGlmIChzZXJ2aWNlUHJvamVjdD09bnVsbCkKLSAgICB7Ci0gICAgICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTk9fUFJPSkVDVCk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOyAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL01ha2Ugc3VyZSB0aGUgc2VsZWN0ZWQgYmVhbiBjYW4gYmUgbG9hZGVkIGZyb20gdGhlIHNlbGVjdGVkIHByb2plY3QKLQlpZiAoamF2YUJlYW5OYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoSkFWQV9FWFRFTlNJT04pCi0JCXx8IGphdmFCZWFuTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKENMQVNTX0VYVEVOU0lPTikpIHsKLQkJamF2YUJlYW5OYW1lID0gamF2YUJlYW5OYW1lLnN1YnN0cmluZygwLCBqYXZhQmVhbk5hbWUubGFzdEluZGV4T2YoJy4nKSk7Ci0JfQotCQotICAgIHRyeQotICAgIHsKLQkgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBKYXZhTU9GVXRpbHMuZ2V0SmF2YUNsYXNzKGphdmFCZWFuTmFtZSwgc2VydmljZVByb2plY3QpOyAKLQkgIGlmICghamF2YUNsYXNzLmlzRXhpc3RpbmdUeXBlKCkpIAotCSAgewkJCi0JCUlTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQ0FOTk9UX0xPQURfSkFWQV9CRUFOLCBuZXcgU3RyaW5nW10geyBqYXZhQmVhbk5hbWUsIHNlcnZpY2VQcm9qZWN0TmFtZSB9KSk7Ci0JCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCXJldHVybiBlcnJvclN0YXR1czsKLQkgIH0KLSAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgIHsKLQkgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQ0FOTk9UX0xPQURfSkFWQV9CRUFOLCBuZXcgU3RyaW5nW10geyBqYXZhQmVhbk5hbWUsIHNlcnZpY2VQcm9qZWN0TmFtZSB9KSk7Ci0JICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOyAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2aWNlUHJvamVjdE5hbWUgVGhlIHNlcnZpY2VQcm9qZWN0TmFtZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdE5hbWUoU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMuc2VydmljZVByb2plY3ROYW1lID0gc2VydmljZVByb2plY3ROYW1lOwotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIG9iamVjdFNlbGVjdGlvbiBUaGUgb2JqZWN0U2VsZWN0aW9uIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLm9iamVjdFNlbGVjdGlvbiA9IG9iamVjdFNlbGVjdGlvbjsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldEphdmFCZWFuRnJvbU9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgYmVhbkNsYXNzID0gIiI7Ci0gICAgSmF2YVJlc291cmNlRmlsdGVyIGZpbHRlciA9IG5ldyBKYXZhUmVzb3VyY2VGaWx0ZXIoKTsgCi0gICAgLy9JU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBpbml0aWFsU2VsZWN0aW9uXzsKLSAgICAvLwotICAgIGlmIChvYmplY3RTZWxlY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gb2JqZWN0U2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBnZXQgdGhlIElSZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGUgc2VsZWN0aW9uCi0gICAgICAgIElSZXNvdXJjZSByZXMgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgcmVzID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChmaWx0ZXIuYWNjZXB0cyhyZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZ2V0IHRoZSBwYWNrYWdlLXF1YWxpZmllZCBjbGFzcyBuYW1lIHdpdGhvdXQgZmlsZSBleHRlbnNpb25zCi0gICAgICAgICAgU3RyaW5nIGJlYW5QYWNrYWdlID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShyZXMuZ2V0RnVsbFBhdGgoKSk7Ci0gICAgICAgICAgaWYgKGJlYW5QYWNrYWdlPT1udWxsKQotICAgICAgICAgICAgYmVhblBhY2thZ2UgPSAiIjsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBiZWFuUGFja2FnZSA9IGJlYW5QYWNrYWdlICsgIi4iOwotCi0gICAgICAgICAgYmVhbkNsYXNzID0gYmVhblBhY2thZ2UgKyByZXMuZ2V0TmFtZSgpOwotCi0gICAgICAgICAgaWYgKGJlYW5DbGFzcy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuamF2YSIpIHx8IGJlYW5DbGFzcy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuY2xhc3MiKSkgewotICAgICAgICAgICAgYmVhbkNsYXNzID0gYmVhbkNsYXNzLnN1YnN0cmluZygwLGJlYW5DbGFzcy5sYXN0SW5kZXhPZignLicpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8KLSAgICByZXR1cm4gYmVhbkNsYXNzOwotICB9ICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9BeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9BeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2NiMWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLldTRExQYXJzZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbjsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSV87Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLSAgCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLSAgICBqYXZhV1NETFBhcmFtID0gbmV3IEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0gICAgamF2YVdTRExQYXJhbS5zZXRTZXJ2ZXJTaWRlKEphdmFXU0RMUGFyYW1ldGVyLlNFUlZFUl9TSURFX0JFQU4pOwotICAgIGphdmFXU0RMUGFyYW0uc2V0U2tlbGV0b25EZXBsb3kodHJ1ZSk7Ci0gICAgamF2YVdTRExQYXJhbS5zZXRNZXRhSW5mT25seShmYWxzZSk7Ci0gICAgamF2YVdTRExQYXJhbS5zZXRJbnB1dFdzZGxMb2NhdGlvbih3c2RsVVJJXyk7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikKLSAgewotICAgIHRoaXMuaW5pdGlhbFNlbGVjdGlvbiA9IGluaXRpYWxTZWxlY3Rpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRPYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgaWYgKHdlYlNlcnZpY2VzUGFyc2VyID09IG51bGwpCi0JCXdlYlNlcnZpY2VzUGFyc2VyID0gV1NETFBhcnNlckZhY3RvcnkuZ2V0V1NETFBhcnNlcigpOwotICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVVSSSgpCi0gIHsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbiAhPSBudWxsICYmICFpbml0aWFsU2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3QgZmlyc3RFbGVtZW50ID0gaW5pdGlhbFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChmaXJzdEVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHsKLSAgICAgICAgSUZpbGUgaWZpbGUgPSAoSUZpbGUpZmlyc3RFbGVtZW50OwotICAgICAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbiA9IGlmaWxlLmdldEZpbGVFeHRlbnNpb24oKTsKLSAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24uZXF1YWxzKCJ3c2RsIikgfHwKLSAgICAgICAgICAgIGZpbGVFeHRlbnNpb24uZXF1YWxzKCJ3c2lsIikgfHwKLSAgICAgICAgICAgIGZpbGVFeHRlbnNpb24uZXF1YWxzKCJodG1sIikpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gaWZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOyAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuICIiOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotICB7Ci0JICByZXR1cm4gd3NkbFVSSV87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLQkgIHdzZGxVUklfID0gd3NkbFVSSTsKLQkgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5XU0lMKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2lsVVJJKCkKLSAgewotICAgIFN0cmluZyB3c1VSSSA9IGdldFdzZGxVUkkoKTsKLSAgICBpbnQgaW5kZXggPSB3c1VSSS5sYXN0SW5kZXhPZignLicpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHdzVVJJLnN1YnN0cmluZygwLCBpbmRleCkpOwotICAgICAgc2IuYXBwZW5kKCIud3NpbCIpOwotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKQotICB7Ci0gICAgcmV0dXJuIGphdmFXU0RMUGFyYW07Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEh0dHBCYXNpY0F1dGhQYXNzd29yZCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0V2ViU2VydmljZXNQYXJzZXIoKS5nZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpLmdldEhUVFBCYXNpY0F1dGhVc2VybmFtZSgpOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9Ta2VsZXRvbkNvbmZpZ1dpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9Ta2VsZXRvbkNvbmZpZ1dpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTYwMzA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vU2tlbGV0b25Db25maWdXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMDYgICAxMjExOTkgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgTfhsbGVyCi0gKiAyMDA2MDMyMSAgIDEyODgyNyBqb2FuIC0gSm9hbiBIYWdnYXJ0eSwgcmVtb3ZlIHJlZHVuZGFudCB3c2RsIFVSSSwgZm9sZGVyIGFuZCBmaWxlIGNvbnRyb2xzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi1wdWJsaWMgY2xhc3MgU2tlbGV0b25Db25maWdXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotCi0gIC8qIENPTlRFWFRfSUQgUEJTQzAwMDEgZm9yIHRoZSBTa2VsZXRvbiBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQlNDX1BBR0UgPSAiUEJTQzAwMDEiOyAvLyROT04tTkxTLTEkCi0gIAotICAvLyBwcml2YXRlIFRleHQgdXJpVGV4dF87Ci0gIC8qIENPTlRFWFRfSUQgUEJDRjAwMDIgZm9yIHRoZSBVUkkgZmllbGQgb2YgdGhlIEJlYW4gQ29uZmlnIFBhZ2UgKi8KLSAgLy9wcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BCQ0ZfVEVYVF9VUkkgPSAiUEJDRjAwMDIiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIENvbWJvIHNrZWxldG9uRm9sZGVyVGV4dF87Ci0gIC8qIENPTlRFWFRfSUQgUEJTQzAwMDQgZm9yIHRoZSBTa2VsZXRvbiBGb2xkZXIgZmllbGQgb2YgdGhlIFNrZWxldG9uIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BCU0NfVEVYVF9TS0VMRVRPTl9GT0xERVIgPSAiUEJTQzAwMDQiOyAvLyROT04tTkxTLTEkCi0KLQotICAvKiBDT05URVhUX0lEIFBCU0MwMDA1IGZvciB0aGUgU2tlbGV0b24gRm9sZGVyIEJyb3dzZSBidXR0b24gb2YgdGhlIFNrZWxldG9uIENvbmZpZyBQYWdlICovCi0gIC8vIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BCU0NfQlVUVE9OX1NLRUxFVE9OX0ZPTERFUl9CUk9XU0UgPSAiUEJTQzAwMDUiOyAvLyROT04tTkxTLTEkCi0gIC8vIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MVElQX1BCU0NfQlVUVE9OX1NLRUxFVE9OX0ZPTERFUl9CUk9XU0UgPSAiVE9PTFRJUF9QQlNDX0JVVFRPTl9TS0VMRVRPTl9GT0xERVJfQlJPV1NFIjsKLSAgCi0gIHByaXZhdGUgQnV0dG9uIHNob3dNYXBwaW5nc0NoZWNrYm94XzsKLSAgLyogQ09OVEVYVF9JRCBQQlNDMDAxNiBmb3IgdGhlIFNob3cgTWFwcGluZ3MgY2hlY2tib3ggb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlICAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX04yUF9TSE9XX01BUFBJTkdTID0gIlBCU0MwMDE2IjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBzZXJ2ZXJQcm9qZWN0XzsKLQkKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKQotICB7Ci0gICAgU3RyaW5nICAgICAgIHBsdWdpbklkICAgICAgICA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aSI7Ci0gICAgCi0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgICAgICAgICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZCApOwotICAgIFVJVXRpbHMgICAgICBjb25VaVV0aWxzICAgICAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWQgKTsKLSAgICBVSVV0aWxzICAgICAgYmFzZUNvblVpVXRpbHMgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkICk7Ci0KLSAgCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWQgKyAiLiIgKyAgSU5GT1BPUF9QQlNDX1BBR0UgKTsKLSAgCXBhcmVudC5zZXRUb29sVGlwVGV4dCggQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCU0NfUEFHRSApOwotICAgIAotICAgIENvbXBvc2l0ZSB0ZXh0R3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAyLCAwLCAwICk7Ci0KLSAgICAvKgotICAgIHVyaVRleHRfID0gdWlVdGlscy5jcmVhdGVUZXh0KCB0ZXh0R3JvdXAsICJMQUJFTF9VUkkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUT09MVElQX1BCQ0ZfVEVYVF9VUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJDRl9URVhUX1VSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0gICAgKi8KLSAgICAKLSAgICBza2VsZXRvbkZvbGRlclRleHRfID0gYmFzZUNvblVpVXRpbHMuY3JlYXRlQ29tYm8oIHRleHRHcm91cCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NLRUxFVE9OX1JPT1RfTkFNRSwKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCU0NfVEVYVF9TS0VMRVRPTl9GT0xERVIsCi0gICAgICAgIElORk9QT1BfUEJTQ19URVhUX1NLRUxFVE9OX0ZPTERFUiwKLSAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0KLSAgICBzaG93TWFwcGluZ3NDaGVja2JveF8gPSBjb25VaVV0aWxzLmNyZWF0ZUNoZWNrYm94KCBwYXJlbnQsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRVhQTE9SRV9NQVBQSU5HU19YTUwyQkVBTiwKLSAgICAJCQkJCQkJCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX04yUF9TSE9XX01BUFBJTkdTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfTjJQX1NIT1dfTUFQUElOR1MgKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50VVJJKFN0cmluZyBlbmRwb2ludFVSSSkKLSAgewotICAJLyoKLSAgICBpZiAoZW5kcG9pbnRVUkkgIT0gbnVsbCkKLSAgICAgIHVyaVRleHRfLnNldFRleHQoZW5kcG9pbnRVUkkpOwotICAgICovCi0gIH0gIAotICAKLSAgcHVibGljIHZvaWQgc2V0T3V0cHV0SmF2YUZvbGRlcihTdHJpbmcgb3V0cHV0SmF2YUZvbGRlcikKLSAgewotICAgIGlmIChvdXRwdXRKYXZhRm9sZGVyICE9IG51bGwpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gc2tlbGV0b25Gb2xkZXJUZXh0Xy5pbmRleE9mKG91dHB1dEphdmFGb2xkZXIpOwotICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICBza2VsZXRvbkZvbGRlclRleHRfLnNlbGVjdChpbmRleCk7Ci0gICAgICBlbHNlIGlmIChza2VsZXRvbkZvbGRlclRleHRfLmdldEl0ZW1Db3VudCgpIDw9IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByb290ID0gZ2V0V29ya3NwYWNlUm9vdExvY2F0aW9uKCk7Ci0gICAgICAgIGlmIChvdXRwdXRKYXZhRm9sZGVyLnN0YXJ0c1dpdGgocm9vdCkpCi0gICAgICAgICAgc2tlbGV0b25Gb2xkZXJUZXh0Xy5zZXRUZXh0KG91dHB1dEphdmFGb2xkZXIuc3Vic3RyaW5nKHJvb3QubGVuZ3RoKCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNrZWxldG9uRm9sZGVyVGV4dF8uc2V0VGV4dChvdXRwdXRKYXZhRm9sZGVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNob3dNYXBwaW5nKGJvb2xlYW4gc2hvd01hcHBpbmcpCi0gIHsKLSAgICBzaG93TWFwcGluZ3NDaGVja2JveF8uc2V0U2VsZWN0aW9uKHNob3dNYXBwaW5nKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd01hcHBpbmcoKQotICB7Ci0gICAgcmV0dXJuIHNob3dNYXBwaW5nc0NoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICAqLwotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLQotLy8JICBEbyBub3QgYmFzZSBKYXZhIG91dHB1dCBkaXJlY3Rvcnkgb24gd29ya3NwYWNlIHJvb3Qgc2luY2UgdGhlIHByb2plY3QgY291bGQgYmUgbm90IAotLy8JICBwaHlzaWNhbGx5IGxvY2F0ZWQgaW4gdGhlIHdvcmtzcGFjZSByb290LCBnZXQgdGhlIHByb2plY3Qgc3BlY2lmaWMgcm9vdCBpbnN0ZWFkCi0JICAKLQkgIFN0cmluZyBwcm9qZWN0U3BlY2lmaWNSb290ID0gc2VydmVyUHJvamVjdF8uZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCSAgU3RyaW5nIHNrZWxldG9uRm9sZGVyID0gc2tlbGV0b25Gb2xkZXJUZXh0Xy5nZXRUZXh0KCk7Ci0JICBTdHJpbmcgcHJvamVjdFBhdGhTdHJpbmcgPSBzZXJ2ZXJQcm9qZWN0Xy5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0JICBpZiAoc2tlbGV0b25Gb2xkZXIuc3RhcnRzV2l0aChwcm9qZWN0UGF0aFN0cmluZykpIHsKLQkJICBza2VsZXRvbkZvbGRlciA9IHNrZWxldG9uRm9sZGVyLnN1YnN0cmluZyhwcm9qZWN0UGF0aFN0cmluZy5sZW5ndGgoKSk7Ci0JICB9Ci0JICBqYXZhV1NETFBhcmFtLnNldEphdmFPdXRwdXQocHJvamVjdFNwZWNpZmljUm9vdCArIHNrZWxldG9uRm9sZGVyKTsKLQkgIHJldHVybiBqYXZhV1NETFBhcmFtOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCSAgdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkKLSAgewotCSAgc2VydmVyUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLSAgICBTdHJpbmcgb3JpZ2luYWxTa2VsZXRvbkZvbGRlciA9IHNrZWxldG9uRm9sZGVyVGV4dF8uZ2V0VGV4dCgpOwotICAgIHNrZWxldG9uRm9sZGVyVGV4dF8ucmVtb3ZlQWxsKCk7Ci0gICAgSVBhdGhbXSBwYXRocyA9IFJlc291cmNlVXRpbHMuZ2V0QWxsSmF2YVNvdXJjZUxvY2F0aW9ucyhzZXJ2aWNlUHJvamVjdCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGggOyBpKyspCi0gICAgICBza2VsZXRvbkZvbGRlclRleHRfLmFkZChwYXRoc1tpXS50b1N0cmluZygpKTsKLSAgICBpbnQgaW5kZXggPSBza2VsZXRvbkZvbGRlclRleHRfLmluZGV4T2Yob3JpZ2luYWxTa2VsZXRvbkZvbGRlcik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgc2tlbGV0b25Gb2xkZXJUZXh0Xy5zZWxlY3QoaW5kZXgpOwotICAgIGVsc2UKLSAgICAgIHNrZWxldG9uRm9sZGVyVGV4dF8uc2VsZWN0KDApOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRXb3Jrc3BhY2VSb290TG9jYXRpb24oKQotICB7Ci0gIAlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRMb2NhdGlvbigpLnJlbW92ZVRyYWlsaW5nU2VwYXJhdG9yKCkudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9Ta2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL1NrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiZTg4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL1NrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBJUHJvamVjdCBzZXJ2ZXJQcm9qZWN0OwotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOwotCi0gIHB1YmxpYyBTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kKCApCi0gIHsKLSAgfQotICAKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQkKLQkJU3RyaW5nIG91dHB1dERpciA9CVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKEoyRUVVdGlscy5nZXRXZWJJbmZQYXRoKCBzZXJ2ZXJQcm9qZWN0ICkpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJamF2YVdTRExQYXJhbS5zZXRPdXRwdXQoIG91dHB1dERpciApOwotLy8JCURvIG5vdCBiYXNlIEphdmEgb3V0cHV0IGRpcmVjdG9yeSBvbiB3b3Jrc3BhY2Ugcm9vdCBzaW5jZSB0aGUgcHJvamVjdCBjb3VsZCBiZSBub3QgcGh5c2ljYWxseSBsb2NhdGVkIGluIHRoZSB3b3Jrc3BhY2Ugcm9vdAotLy8JCWphdmFXU0RMUGFyYW0uc2V0SmF2YU91dHB1dChnZXRSb290VVJMKCkgKyBnZXRPdXRwdXRKYXZhRm9sZGVyKCkpOyAKLQkJU3RyaW5nIGphdmFPdXRwdXQgPQlSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShnZXRPdXRwdXRKYXZhRm9sZGVyKCkpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJamF2YVdTRExQYXJhbS5zZXRKYXZhT3V0cHV0KGphdmFPdXRwdXQpOwotCQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChTdHJpbmcgc2VydmVyUHJvamVjdCkKLSAgewotICAgIHRoaXMuc2VydmVyUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kcG9pbnRVUkkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0V1NETEZvbGRlcigpCi0gIHsKLQkgIElQYXRoIHdzZGxQYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHNlcnZlclByb2plY3QgKS5hcHBlbmQoIndzZGwiKTsKLSAgICAgIHJldHVybiB3c2RsUGF0aC50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE91dHB1dFdTRExGaWxlKCkKLSAgewotICAgIGludCBpbmRleCA9IHdzZGxVUkkubGFzdEluZGV4T2YoJy8nKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICBpbmRleCA9IHdzZGxVUkkubGFzdEluZGV4T2YoJ1xcJyk7Ci0gICAgcmV0dXJuIHdzZGxVUkkuc3Vic3RyaW5nKGluZGV4KzEsIHdzZGxVUkkubGVuZ3RoKCkpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE91dHB1dEphdmFGb2xkZXIoKQotICB7Ci0gICAgaWYgKHNlcnZlclByb2plY3QhPW51bGwpewotICAgICAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHNlcnZlclByb2plY3QpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd01hcHBpbmcoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc1Nob3dNYXBwaW5nKCkKLSAgewotICAgIHJldHVybiBnZXRTaG93TWFwcGluZygpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pCi0gIHsKLSAgCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLSAgCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLSAgewotICAgIHJldHVybiBqYXZhV1NETFBhcmFtOwotICB9Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlclR5cGVJRCgpIHsKLQlyZXR1cm4gc2VydmljZVNlcnZlclR5cGVJRF87Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSUQpIHsKLQl0aGlzLnNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gc2VydmljZVNlcnZlclR5cGVJRDsKLX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpemFyZC9iZWFucy9XU0JlYW5BeGlzVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2l6YXJkL2JlYW5zL1dTQmVhbkF4aXNUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NGJjZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2l6YXJkL2JlYW5zL1dTQmVhbkF4aXNUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTIwMTM3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyMyAgIDE0MzI4NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNjA1ICAgMTQ1NDA3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA2MDcgICAxNDQ5Nzgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aXphcmQuYmVhbnM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0cy5BeGlzTWFwcGluZ3NXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkJVQ29kZUdlbk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkphdmFUb1dTRExNZXRob2RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLkRlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuYmVhbi5CZWFuQ29uZmlnV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgY2xhc3MgZm9yIHRoZQotKiBBeGlzIGJvdHRvbSB1cCBKYXZhIEJlYW4gc2NlbmFyaW8KLSogCi0qLwotcHVibGljIGNsYXNzIFdTQmVhbkF4aXNUeXBlIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsJCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZlck5hbWVfOwotICBwcml2YXRlIFN0cmluZyBydW50aW1lTmFtZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1dlYk1vZHVsZVJlcXVpcmVkXzsKLQotCi0gIC8qKgotICAqIFJldHVybnMgYSBsb2NhbGUgc3BlY2lmaWMgbGFiZWwgZm9yIHRoZSBTZXJ2ZXIgc3VwcG9ydGVkIGJ5IHRoaXMgV2ViIFNlcnZpY2UgdHlwZQotICAqIEByZXR1cm4gQSBsb2NhbGUgc3BlY2lmaWMgc2VydmVyIGxhYmVsIGZyb20gc2VydmVyIHBsdWdpbnMKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJMYWJlbCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmVyTmFtZV87Ci0gIH0KLQotICAvKioKLSAgKiBTZXRzIHRoZSBzZXJ2ZXIgbGFiZWwgdG8gdGhlIGFwcHJvcHJpYXRlIG5hbWUgZm91bmQgaW4gdGhlIHNlcnZlciBwbHVnaW5zLgotICAqIEBwYXJhbSBzZXJ2ZXIgbmFtZQotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJMYWJlbChTdHJpbmcgc2VydmVyTGFiZWwpCi0gIHsKLSAgICBzZXJ2ZXJOYW1lXyA9IHNlcnZlckxhYmVsOwotICB9Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIGEgbG9jYWxlIHNwZWNpZmljIGxhYmVsIGZvciB0aGUgZGVwbG95bWVudCBydW50aW1lIG9mIHRoaXMgV2ViIFNlcnZpY2UgdHlwZQotICAqIEByZXR1cm4gQSBsb2NhbGUgc3BlY2lmaWMgbGFiZWwgZm9yIHRoZSBkZXBsb3ltZW50IHJ1bnRpbWUKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSdW50aW1lTGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIHJ1bnRpbWVOYW1lXzsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIHJ1bnRpbWUgbGFiZWwgZm9yIHRoZSBhcHByb3ByaWF0ZSBydW50aW1lCi0gICogQHBhcmFtIHNlcnZlciBuYW1lCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFJ1bnRpbWVMYWJlbChTdHJpbmcgcnVudGltZUxhYmVsKQotICB7Ci0gICAgcnVudGltZU5hbWVfID0gcnVudGltZUxhYmVsOwotICB9Ci0KLQotICAvKioKLSAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgV2ViIE1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhpcyBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUKLSAgKiBAcmV0dXJuIHRydWUgaWYgcmVxdWlyZVdlYk1vZHVsZQotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dlYk1vZHVsZVJlcXVpcmVkKCkKLSAgewotICAgIHJldHVybiBpc1dlYk1vZHVsZVJlcXVpcmVkXzsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIGJvb2xlYW4gdmFsdWUgYXQgcnVudGltZSBhY2NvcmRpbmcgdG8gcmVxdWlyZVdlYk1vZHVsZSBhdHRyaWJ1dGUgZnJvbSB0aGUgbWFuaWZlc3QgZmlsZQotICAqIEBwYXJhbSByZXF1aXJlV2ViTW9kdWxlIAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJNb2R1bGVSZXF1aXJlZChib29sZWFuIHJlcXVpcmVXZWJNb2R1bGUpCi0gIHsKLSAgICBpc1dlYk1vZHVsZVJlcXVpcmVkXyA9IHJlcXVpcmVXZWJNb2R1bGU7Ci0gIH0KLQotICAKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLldlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSNpc0VKQk1vZHVsZVJlcXVpcmVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0VKQk1vZHVsZVJlcXVpcmVkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5XZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUjc2V0RUpCTW9kdWxlUmVxdWlyZWQoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFSkJNb2R1bGVSZXF1aXJlZChib29sZWFuIGFyZzApIHsKLQkJcmV0dXJuOwotCi0JfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSAKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotICB7Ci0gICAgLyoKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ3VycmVudFBhZ2VDb21tYW5kLmNsYXNzLCAiQ3VycmVudFBhZ2UiLCBCZWFuQ2xhc3NXaWRnZXQuY2xhc3MgKTsKLSAgICAvL0JlYW5DbGFzc1dpZGdldCAtIGFzIHRhcmdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YUJlYW5OYW1lIiwgQmVhbkNsYXNzV2lkZ2V0LmNsYXNzLCAiQmVhbkNsYXNzTmFtZSIsIG51bGwpOwotICAgIC8vQmVhbkNsYXNzV2lkZ2V0IC0gYXMgc291cmNlCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQmVhbkNsYXNzV2lkZ2V0LmNsYXNzLCAiQmVhbkNsYXNzTmFtZSIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzLCAiSmF2YUJlYW5OYW1lIiwgbnVsbCk7ICAgIC8vQmVhbkNvbmZpZ1dpZGdldAotICAgICovCi0gICAgLy8gT2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIC8vQmVhbkNvbmZpZ1dpZGdldCAtIGFzIHRhcmdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEphdmFUb1dTRExNZXRob2RDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEJlYW5Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgbnVsbCApOwotICAgIC8vQmVhbkNvbmZpZ1dpZGdldCAtIGFzIHNvdXJjZQotCi0gICAgLy8gIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhCZWFuQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsKLQotICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQmVhbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBKYXZhMldTRExDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOyAgICAgICAKLSAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEJlYW5Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgV1NETDJKYXZhQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhCZWFuQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsQlVDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOwotICAgIC8vQXhpc01hcHBpbmdzV2lkZ2V0IC0gYXMgdGFyZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQmVhbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vQXhpc01hcHBpbmdzV2lkZ2V0IC0gYXMgc291cmNlCi0KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgQlVDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOyAgICAgICAKLSAgCi0gICAgCi0gICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggRGVmYXVsdHNGb3JDb25maWcuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgQmVhbkNvbmZpZ1dpZGdldC5jbGFzcyApOwotICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIERlZmF1bHRzRm9yQ29uZmlnLmNsYXNzLCAiQ3VzdG9taXplU2VydmljZU1hcHBpbmdzIiwgQmVhbkNvbmZpZ1dpZGdldC5jbGFzcyApOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkgCi0gIHsKLSAgIAotICAgIC8qCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQmVhblNlbGVjdGlvbiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTQkVBTl9DTEFTUywKLSAgICAgICAgICAgICAgICAgICAgICAgIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTQkVBTl9DTEFTUywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQmVhbkNsYXNzV2lkZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAqLwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQmVhbkNvbmZpZyIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTQkVBTl9DT05GSUcsCi0gICAgICAgICAgICAgICAgICAgICAgICBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU0JFQU5fQ09ORklHLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCZWFuQ29uZmlnV2lkZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLQotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQXhpc1NlcnZpY2VCZWFuTWFwcGluZyIsIAotICAgIAkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX0JFQU4yWE1MLAotICAgIAkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfUDJOX01BUFBJTkdTLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBeGlzTWFwcGluZ3NXaWRnZXQoQXhpc01hcHBpbmdzV2lkZ2V0Lk1PREVfQkVBTjJYTUwgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIAotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICB7Ci0gICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICB7Ci0gICAgICAgICAgLy9kZWFkIGNvZGUgLSBkb2Vzbid0IG1hdHRlciB3aGF0IGdldHMgcmV0dXJuZWQgaGVyZS4KLSAgICAJICByZXR1cm4gbmV3IFNpbXBsZUZyYWdtZW50KCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotICAgIAotfQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2l6YXJkL3dzZGwvV1NXU0RMQXhpc1R5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpemFyZC93c2RsL1dTV1NETEF4aXNUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxM2RiODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2l6YXJkL3dzZGwvV1NXU0RMQXhpc1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjEgICAxMjg4Mjcgam9hbiAtIEpvYW4gSGFnZ2FydHksIHJlbW92ZSByZWR1bmRhbnQgd3NkbCBVUkksIGZvbGRlciBhbmQgZmlsZSBjb250cm9scwotICogMjAwNjA1MjMgICAxNDMyODQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDYwNSAgIDE0NTQwNyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aXphcmQud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0cy5BeGlzTWFwcGluZ3NGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzLkF4aXNNYXBwaW5nc1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQ29kZUdlbk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uLkF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b24uU2tlbGV0b25Db25maWdXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbi5Ta2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YS5Qcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGNsYXNzIGZvciB0aGUgQXhpcyBXZWIgc2VydmljZSB0eXBlLgotKi8KLXB1YmxpYyBjbGFzcyBXU1dTRExBeGlzVHlwZSBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nIAotewotCXByaXZhdGUgU3RyaW5nIHNlcnZlck5hbWVfOwotCXByaXZhdGUgU3RyaW5nIHJ1bnRpbWVOYW1lXzsKLQlwcml2YXRlIGJvb2xlYW4gaXNXZWJNb2R1bGVSZXF1aXJlZF87Ci0KLQkvKioKLQkqIFJldHVybnMgYSBsb2NhbGUgc3BlY2lmaWMgbGFiZWwgZm9yIHRoZSBTZXJ2ZXIgc3VwcG9ydGVkIGJ5IHRoaXMgV2ViIFNlcnZpY2UgdHlwZQotCSogQHJldHVybiBBIGxvY2FsZSBzcGVjaWZpYyBzZXJ2ZXIgbGFiZWwgZnJvbSBzZXJ2ZXIgcGx1Z2lucwotCSovCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJMYWJlbCgpIHsKLQkJcmV0dXJuIHNlcnZlck5hbWVfOwotCX0KLQotCS8qKgotCSogU2V0cyB0aGUgc2VydmVyIGxhYmVsIHRvIHRoZSBhcHByb3ByaWF0ZSBuYW1lIGZvdW5kIGluIHRoZSBzZXJ2ZXIgcGx1Z2lucy4KLQkqIEBwYXJhbSBzZXJ2ZXIgbmFtZQotCSovCi0JcHVibGljIHZvaWQgc2V0U2VydmVyTGFiZWwoU3RyaW5nIHNlcnZlckxhYmVsKSB7Ci0JCXNlcnZlck5hbWVfID0gc2VydmVyTGFiZWw7Ci0JfQotCi0JLyoqCi0JKiBSZXR1cm5zIGEgbG9jYWxlIHNwZWNpZmljIGxhYmVsIGZvciB0aGUgZGVwbG95bWVudCBydW50aW1lIG9mIHRoaXMgV2ViIFNlcnZpY2UgdHlwZQotCSogQHJldHVybiBBIGxvY2FsZSBzcGVjaWZpYyBsYWJlbCBmb3IgdGhlIGRlcGxveW1lbnQgcnVudGltZQotCSovCi0JcHVibGljIFN0cmluZyBnZXRSdW50aW1lTGFiZWwoKSB7Ci0JCXJldHVybiBydW50aW1lTmFtZV87Ci0JfQotCi0JLyoqCi0JKiBTZXRzIHRoZSBydW50aW1lIGxhYmVsIGZvciB0aGUgYXBwcm9wcmlhdGUgcnVudGltZQotCSogQHBhcmFtIHNlcnZlciBuYW1lCi0JKi8KLQlwdWJsaWMgdm9pZCBzZXRSdW50aW1lTGFiZWwoU3RyaW5nIHJ1bnRpbWVMYWJlbCkgewotCQlydW50aW1lTmFtZV8gPSBydW50aW1lTGFiZWw7Ci0JfQotCi0JLyoqCi0JKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgV2ViIE1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhpcyBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUKLQkqIEByZXR1cm4gdHJ1ZSBpZiByZXF1aXJlV2ViTW9kdWxlCi0JKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1dlYk1vZHVsZVJlcXVpcmVkKCkgewotCQlyZXR1cm4gaXNXZWJNb2R1bGVSZXF1aXJlZF87Ci0JfQotCi0JLyoqCi0JKiBTZXRzIHRoZSBib29sZWFuIHZhbHVlIGF0IHJ1bnRpbWUgYWNjb3JkaW5nIHRvIHJlcXVpcmVXZWJNb2R1bGUgYXR0cmlidXRlIGZyb20gdGhlIG1hbmlmZXN0IGZpbGUKLQkqIEBwYXJhbSByZXF1aXJlV2ViTW9kdWxlIAotCSovCi0JcHVibGljIHZvaWQgc2V0V2ViTW9kdWxlUmVxdWlyZWQoYm9vbGVhbiByZXF1aXJlV2ViTW9kdWxlKSB7Ci0JCWlzV2ViTW9kdWxlUmVxdWlyZWRfID0gcmVxdWlyZVdlYk1vZHVsZTsKLQl9Ci0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlI2lzRUpCTW9kdWxlUmVxdWlyZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRUpCTW9kdWxlUmVxdWlyZWQoKSB7Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5XZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUjc2V0RUpCTW9kdWxlUmVxdWlyZWQoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFSkJNb2R1bGVSZXF1aXJlZChib29sZWFuIGFyZzApIHsKLQkJcmV0dXJuOwotCi0JfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSAKLSAgewotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0gIHsKLSAgICAvLyBTa2VsZXRvbkNvbmZpZ1dpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIG5ldyBQcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW5kcG9pbnRVUkkiLCBTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIk91dHB1dEphdmFGb2xkZXIiLCBTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNob3dNYXBwaW5nIiwgU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MpOwotCi0gICAgLy8gIEJhY2t1cFNrZWxJbXBsQ29tbWFuZCAgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOwotICAgIAotICAgIC8vIEF4aXNNYXBwaW5nc0ZyYWdtZW50Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNob3dNYXBwaW5nIiwgQXhpc01hcHBpbmdzRnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzLCAiU2hvd01hcHBpbmciLCBBeGlzTWFwcGluZ3NGcmFnbWVudC5jbGFzcyk7Ci0KLSAgICAvLyBBeGlzTWFwcGluZ3NXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgbnVsbCk7Ci0KLSAgICAvLyBXU0RMMkphdmFDb21tYW5kCi0gICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFdTREwySmF2YUNvbW1hbmQuY2xhc3MpOwotICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgV1NETDJKYXZhQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkgCi0gIHsKLSAgIAotICAgIC8qCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiV1NETFNlbGVjdGlvbiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfU0VMRUNUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19TRUxFQ1RJT04sCi0JCSAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkJICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0JCSAgICAgICAgICAgICAgICAgIHsKLQkJICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdTRExTZWxlY3Rpb25XaWRnZXQoKTsKLQkJICAgICAgICAgICAgICAgICAgfQotCQkgICAgICAgICAgICAgICAgfSApOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiV1NETFNlbGVjdGlvblRyZWVXaWRnZXQiLCAKLSAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NETF9TRUxFQ1RJT04sCi0gICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NETF9TRUxFQ1RJT04sCi0gICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgV1NETFNlbGVjdGlvblRyZWVXaWRnZXQoKTsKLSAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAqLwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiU2tlbGV0b25Db25maWciLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTU0tFTF9DT05GSUcsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTU0tFTF9DT05GSUcsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNrZWxldG9uQ29uZmlnV2lkZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkF4aXNNYXBwaW5nc1dpZGdldCIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfWE1MMkJFQU4sCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX04yUF9NQVBQSU5HUywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXhpc01hcHBpbmdzV2lkZ2V0KEF4aXNNYXBwaW5nc1dpZGdldC5NT0RFX1hNTDJCRUFOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIAotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICB7Ci0gICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICB7Ci0gICAgICAgICAgLy9kZWFkIGNvZGUgLSBkb2Vzbid0IG1hdHRlciB3aGF0IGdldHMgcmV0dXJuZWQgaGVyZS4gCi0gICAgCSAgcmV0dXJuIG5ldyBTaW1wbGVGcmFnbWVudCgpOwotICAgICAgfQotICAgIH07Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc0JlYW5Db25maWdXaWRnZXRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNCZWFuQ29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2U2YjU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc0JlYW5Db25maWdXaWRnZXRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuYmVhbi5CZWFuQ29uZmlnV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpemFyZC5iZWFucy5XU0JlYW5BeGlzVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQXhpc0JlYW5Db25maWdXaWRnZXRGYWN0b3J5IGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHsKLQotCXByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgICAgICAgYmVhbkNvbmZpZ1dpZGdldF87Ci0JcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvciAgICAgICAgICAgICBtYXBwaW5nc1dpZGdldF87Ci0JcHJpdmF0ZSBCZWFuQ29uZmlnV2lkZ2V0ICAgICAgICAgICAgICAgICAgICBiZWFuV2lkZ2V0XzsKLQlwcml2YXRlIFdpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyIGFkYXB0ZXJfOwotCQotCXB1YmxpYyBBeGlzQmVhbkNvbmZpZ1dpZGdldEZhY3RvcnkoKQotCXsKLQkgIGFkYXB0ZXJfID0gbmV3IFdpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyKCBuZXcgV1NCZWFuQXhpc1R5cGUoKSApOwotCSAgCi0JICBiZWFuQ29uZmlnV2lkZ2V0XyA9IGFkYXB0ZXJfLmdldFdpZGdldCggIkJlYW5Db25maWciICk7Ci0JICBiZWFuV2lkZ2V0XyAgICAgICA9IChCZWFuQ29uZmlnV2lkZ2V0KWJlYW5Db25maWdXaWRnZXRfLmdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpLmNyZWF0ZSgpOwotCSAgbWFwcGluZ3NXaWRnZXRfICAgPSBhZGFwdGVyXy5nZXRXaWRnZXQoICJBeGlzU2VydmljZUJlYW5NYXBwaW5nIiApOwotCX0KLQkKLQlwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0Rmlyc3ROYW1lZFdpZGdldCgpIAotCXsKLQkgIHJldHVybiBiZWFuQ29uZmlnV2lkZ2V0XzsKLQl9Ci0KLQlwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0TmV4dE5hbWVkV2lkZ2V0KCBJTmFtZWRXaWRnZXRDb250cmlidXRvciB3aWRnZXRDb250cmlidXRvcikgCi0JewotCSAgcmV0dXJuIHdpZGdldENvbnRyaWJ1dG9yID09IGJlYW5Db25maWdXaWRnZXRfICYmIGJlYW5XaWRnZXRfLmdldEN1c3RvbWl6ZVNlcnZpY2VNYXBwaW5ncygpID8gbWFwcGluZ3NXaWRnZXRfIDogbnVsbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotCXsKLQkgIGFkYXB0ZXJfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhUmVnaXN0cnkgKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNTa2VsZXRvbkNvbmZpZ1dpZGdldEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1NrZWxldG9uQ29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDhiOGZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1NrZWxldG9uQ29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uLlNrZWxldG9uQ29uZmlnV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpemFyZC53c2RsLldTV1NETEF4aXNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBeGlzU2tlbGV0b25Db25maWdXaWRnZXRGYWN0b3J5IGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHsKLQotCXByaXZhdGUgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgICAgICAgc2tlbENvbmZpZ1dpZGdldF87Ci0JcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvciAgICAgICAgICAgICBtYXBwaW5nc1dpZGdldF87Ci0JcHJpdmF0ZSBTa2VsZXRvbkNvbmZpZ1dpZGdldCAgICAgICAgICAgICAgICBza2VsV2lkZ2V0XzsKLQlwcml2YXRlIFdpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyIGFkYXB0ZXJfOwotCQotCXB1YmxpYyBBeGlzU2tlbGV0b25Db25maWdXaWRnZXRGYWN0b3J5KCkKLQl7Ci0JICBhZGFwdGVyXyA9IG5ldyBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciggbmV3IFdTV1NETEF4aXNUeXBlKCkgKTsKLQkgIAotCSAgc2tlbENvbmZpZ1dpZGdldF8gPSBhZGFwdGVyXy5nZXRXaWRnZXQoICJTa2VsZXRvbkNvbmZpZyIgKTsKLQkgIHNrZWxXaWRnZXRfICAgICAgID0gKFNrZWxldG9uQ29uZmlnV2lkZ2V0KXNrZWxDb25maWdXaWRnZXRfLmdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpLmNyZWF0ZSgpOwotCSAgbWFwcGluZ3NXaWRnZXRfICAgPSBhZGFwdGVyXy5nZXRXaWRnZXQoICJBeGlzTWFwcGluZ3NXaWRnZXQiICk7Ci0JfQotCQotCXB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXRGaXJzdE5hbWVkV2lkZ2V0KCkgCi0JewotCSAgcmV0dXJuIHNrZWxDb25maWdXaWRnZXRfOwotCX0KLQotCXB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXROZXh0TmFtZWRXaWRnZXQoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldENvbnRyaWJ1dG9yKSAKLQl7Ci0JICByZXR1cm4gd2lkZ2V0Q29udHJpYnV0b3IgPT0gc2tlbENvbmZpZ1dpZGdldF8gJiYgc2tlbFdpZGdldF8uZ2V0U2hvd01hcHBpbmcoKSA/IG1hcHBpbmdzV2lkZ2V0XyA6IG51bGw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLQl7Ci0JICBhZGFwdGVyXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5ICk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzU2MzY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwMzMwICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyNCAgIDEyMDEzNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MDkgICAxMjUwOTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1LCBVc2UgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTE3ICAgMTQyMzI3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MjQgICAxMzA3NTUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjA3ICAgMTQ0OTc4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgxMCAgIDEzNTM5NSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRW5hYmxlIFdUUCBXZWIgc2VydmljZSBmcmFtZXdvcmsgb3BlbmluZyBKYXZhIGVkaXRvcgotICogMjAwNjEwMDQgICAxNTkzNTYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEdldCBjb3JyZWN0IG1vZHVsZSByb290IFVSTCBiYXNlZCBvbiBzZXJ2ZXIgY2hvc2VuCi0gKiAyMDA4MDIyNyAgIDExOTk2NCB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1hbmQuQXhpc0RlcGxveUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLkdlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5SZWZyZXNoUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5WYWxpZGF0ZVdTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5BeGlzT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkF4aXNSdW5JbnB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUF4aXNJbnB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5CVUNvZGVHZW5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5Db3B5RGVwbG95bWVudEZpbGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuSmF2YVRvV1NETE1ldGhvZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5Nb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQXhpc0lucHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlREQ29kZUdlbk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLlZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5CVUNvbmZpZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5EZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLlREQ29uZmlnQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW4uQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbi5BeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uLlNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkJ1aWxkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YS5Qcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uV2FpdEZvckF1dG9CdWlsZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuQWJzdHJhY3RXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi1wdWJsaWMgY2xhc3MgQXhpc1dlYlNlcnZpY2UgZXh0ZW5kcyBBYnN0cmFjdFdlYlNlcnZpY2UKLXsKLQlwcml2YXRlIEF4aXNXZWJTZXJ2aWNlSW5mbyBheGlzV2ViU2VydmljZUluZm9fOwotCi0JcHVibGljIEF4aXNXZWJTZXJ2aWNlKFdlYlNlcnZpY2VJbmZvIGluZm8pCi0JewotCQlzdXBlcihpbmZvKTsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwKLQkJCUlTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRlcGxveShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXZlbG9wKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQkKLQkJVmVjdG9yIGNvbW1hbmRzID0gbmV3IFZlY3RvcigpOwotICAgIEVjbGlwc2VFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IChFY2xpcHNlRW52aXJvbm1lbnQpZW52OwotCQkKLQkJaWYgKGN0eC5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgPT0gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKSB7Ci0JCQkKLQkJCXJlZ2lzdGVyQlVEYXRhTWFwcGluZ3MoIGVudmlyb25tZW50LmdldENvbW1hbmRNYW5hZ2VyKCkuZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkpOwotCQkJCi0JCQljb21tYW5kcy5hZGQobmV3IEJVQXhpc0lucHV0Q29tbWFuZCh0aGlzLCBwcm9qZWN0KSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kKCkpOwotLy8JCQljb21tYW5kcy5hZGQobmV3IFZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kKCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZCgpKTsKLQkJCS8vIGNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoICJCZWFuQ29uZmlnIiApKTsKLQkJCS8vIGNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoICJBeGlzU2VydmljZUJlYW5NYXBwaW5nIiApKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQlVDb25maWdDb21tYW5kKCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kKCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBXYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQlVDb2RlR2VuT3BlcmF0aW9uKCkpOwotLy8JCQljb21tYW5kcy5hZGQobmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQnVpbGRQcm9qZWN0Q29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQXhpc091dHB1dENvbW1hbmQodGhpcykpOwotCQkJCi0JCX0gZWxzZSBpZiAoY3R4LmdldFNjZW5hcmlvKCkuZ2V0VmFsdWUoKSA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikgewotCQkJCi0JCQlyZWdpc3RlclRERGF0YU1hcHBpbmdzKCBlbnZpcm9ubWVudC5nZXRDb21tYW5kTWFuYWdlcigpLmdldE1hcHBpbmdSZWdpc3RyeSgpKTsKLQkJCQotCQkJY29tbWFuZHMuYWRkKG5ldyBUREF4aXNJbnB1dENvbW1hbmQodGhpcywgcHJvamVjdCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZCgpKTsKLQkJICAgIGNvbW1hbmRzLmFkZChuZXcgVmFsaWRhdGVXU0RMQ29tbWFuZCgpKTsKLQkJICAgIGNvbW1hbmRzLmFkZChuZXcgU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpKTsKLS8vCQkJY29tbWFuZHMuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCggIlNrZWxldG9uQ29uZmlnIiApKTsKLS8vCQkJY29tbWFuZHMuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCggIkF4aXNNYXBwaW5nc1dpZGdldCIgKSk7Ci0JCSAgICBjb21tYW5kcy5hZGQobmV3IFREQ29uZmlnQ29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgVERDb2RlR2VuT3BlcmF0aW9uKCkpOwotLy8JCSAgICBjb21tYW5kcy5hZGQobmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpKTsKLQkJICAgIGNvbW1hbmRzLmFkZChuZXcgQnVpbGRQcm9qZWN0Q29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQXhpc091dHB1dENvbW1hbmQodGhpcykpOwotCQkJCi0JCX0gZWxzZSB7Ci0JCQkvL1RPRE86IFJlbW92ZSBwcmludGxuIGFuZCByZWFzc2VzcyB0aGlzICJlcnJvciIuCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIC0gV2ViU2VydmljZVNjZW5hcmlvIHNob3VsZCBub3QgYmUgQ2xpZW50IGZvciBBeGlzV2ViU2VydmljZSIpOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJCi0JCQotCQlyZXR1cm4gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KGNvbW1hbmRzKTsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGluc3RhbGwoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgcnVuKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlWZWN0b3IgY29tbWFuZHMgPSBuZXcgVmVjdG9yKCk7Ci0KLQkJaWYgKGN0eC5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgPT0gV2ViU2VydmljZVNjZW5hcmlvLkNMSUVOVCkgewotCQkJLy9UT0RPOiBSZW1vdmUgcHJpbnRsbiBhbmQgcmVhc3Nlc3MgdGhpcyAiZXJyb3IiLgotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciAtIFdlYlNlcnZpY2VTY2VuYXJpbyBzaG91bGQgbm90IGJlIENsaWVudCBmb3IgQXhpc1dlYlNlcnZpY2UiKTsKLQkJCXJldHVybiBudWxsOwotCQl9IGVsc2Ugey8vIEZvciBCT1RUT01fVVAgYW5kIFRPUF9ET1dOCi0JCQljb21tYW5kcy5hZGQobmV3IEF4aXNSdW5JbnB1dENvbW1hbmQodGhpcywgcHJvamVjdCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZCgpKTsKLQkJICAgIGNvbW1hbmRzLmFkZChuZXcgQXhpc0RlcGxveUNvbW1hbmQocHJvamVjdCkpOwotCi0JCQljb21tYW5kcy5hZGQobmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpKTsKLQotCQkJcmV0dXJuIG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeShjb21tYW5kcyk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJCVURhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KSAKLQkgIHsKLQkJLy9CVUF4aXNJbnB1dENvbW1hbmQKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJUeXBlSUQiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJKYXZhQmVhbk5hbWUiLCBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotCQkKLQkgICAgLy9WYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBWYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MpOwotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZC5jbGFzcywiU2VydmljZVByb2plY3ROYW1lIiwgbnVsbCApOwotCSAgICAKLQkgICAgLy9CVUF4aXNEZWZhdWx0aW5nQ29tbWFuZAotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotLy9LU0MgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0JICAgIAkgICAgCi0JCS8vIEF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIEF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kLmNsYXNzKTsKLQkJCi0JICAgIC8vQlVBeGlzQ29tbWFuZHMyIC0gdGhlc2UgcnVuIGFmdGVyIEJlYW5DbGFzc1dpZGdldAotCSAgICAvL0RlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLSAgICAgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVyVHlwZUlEIiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MpOyAKLSAgICAgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIiLCBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcyk7ICAgICAgICAKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFCZWFuTmFtZSIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlBhcnNlciIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vSmF2YVdTRExNZXRob2RDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQotCSAgICAvLyBCVUF4aXNDb21tYW5kczMgLSB0aGVzZSBydW4gYWZ0ZXIgQmVhbkNvbmZpZ1dpZGdldAotICAgIAkgICAgCi0JICAgIC8vQ29weUF4aXNKYXJDb21tYW5kCi0JICAgIC8vcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQ29weUF4aXNKYXJDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0JICAgIAkgICAgCi0JICAgIC8vIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCi0JICAgIC8vSmF2YTJXU0RMQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEphdmFUb1dTRExNZXRob2RDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEJVQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIAotCSAgICAvL1JlZnJlc2hQcm9qZWN0Q29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBSZWZyZXNoUHJvamVjdENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCi0JICAgIC8vVXBkYXRlV0VCWE1MQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBCVUNvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0JICAgIAotCSAgICAvL0J1aWxkUHJvamVjdENvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRm9yY2VCdWlsZCIsIEJ1aWxkUHJvamVjdENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVmFsaWRhdGlvbk1hbmFnZXIiLCBCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vU3RhcnRQcm9qZWN0Q29tbWFuZAotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFN0YXJ0UHJvamVjdENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7ICAgIAotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IiwgU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0vL0tTQyAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVyVHlwZUlEIiwgU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0vLwkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNhbXBsZVNlcnZlclR5cGVJRCIsIFN0YXJ0UHJvamVjdENvbW1hbmQuY2xhc3MpOwotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2FtcGxlRXhpc3RpbmdTZXJ2ZXIiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZCIsU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0JICAgICAgICAKLQkJLy8gQXhpc091dHB1dENvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUNvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJXc2RsVVJJIiwgQXhpc091dHB1dENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzT3V0cHV0Q29tbWFuZC5jbGFzcyk7CSAgICAKLSAgIAotCQkKLQkJLy8gUnVuIGV4dGVuc2lvbgotCQkKLS8vCQlNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJGYWN0b3J5SWQiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlBhcnNlciIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBudWxsKTsKLQotCQkvLyBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZC5jbGFzcyk7CQkKLQkgICAgCi0JCS8vQXhpc0RlcGxveUNvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzRGVwbG95Q29tbWFuZC5jbGFzcyk7Ci0JCQotCSAgICAvLyBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vUmVmcmVzaFByb2plY3RDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBSZWZyZXNoUHJvamVjdENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCi0JICB9Ci0KLQlwdWJsaWMgdm9pZCByZWdpc3RlclRERGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotCSAgewotCSAgICAvLyBUcmFuc2Zvcm1lcnMKLQkgICAgUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lciBwcm9qZWN0VHJhbnNmb3JtZXIgPSBuZXcgUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lcigpOwotCi0JCS8vIFRPRE86ICBtYXAgIkluaXRpYWxTZWxlY3Rpb24iIGFuZCAiT2JqZWN0U2VsZWN0aW9uIiBmcm9tIFREQXhpc0lucHV0Q29tbWFuZAotCQkKLS8vCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLS8vCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotLy8JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCSAgICAKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JICAgIC8vIFZhbGlkYXRlV1NETENvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIFZhbGlkYXRlV1NETENvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBWYWxpZGF0ZVdTRExDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlclR5cGVJRCIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCSAgICAgICAKLQkgICAgLy8gQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJIdHRwQmFzaWNBdXRoVXNlcm5hbWUiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkh0dHBCYXNpY0F1dGhQYXNzd29yZCIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIAotCSAgICAvLyBDb3B5QXhpc0phckNvbW1hbmQKLQkgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQ29weUF4aXNKYXJDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIHByb2plY3RUcmFuc2Zvcm1lcik7Ci0KLQkgICAgLy8gQmFja3VwU2tlbEltcGxDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOyAgICAgIAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlSW5mbyIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIAotCSAgICAvLyBTa2VsZXRvbjJXU0RMQ29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIHByb2plY3RUcmFuc2Zvcm1lcik7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJUeXBlSUQiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwkKLQotCSAgICAvLyBSZWZyZXNoUHJvamVjdENvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFJlZnJlc2hQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBwcm9qZWN0VHJhbnNmb3JtZXIpOwotCSAgICAKLQkgICAgLy8gQnVpbGRQcm9qZWN0Q29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBwcm9qZWN0VHJhbnNmb3JtZXIpOwotCi0JICAgIC8vCU1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVySW5zdGFuY2VJZCIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckZhY3RvcnlJZCIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0KLQkgICAgLy8gR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIEF4aXNEZXBsb3lDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEF4aXNEZXBsb3lDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIENvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIEF4aXNPdXRwdXRDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIldzZGxVUkkiLCBBeGlzT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzT3V0cHV0Q29tbWFuZC5jbGFzcyk7IAotCSAgfQotCXB1YmxpYyBBeGlzV2ViU2VydmljZUluZm8gZ2V0QXhpc1dlYlNlcnZpY2VJbmZvKCkgewotCQlyZXR1cm4gYXhpc1dlYlNlcnZpY2VJbmZvXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBeGlzV2ViU2VydmljZUluZm8oQXhpc1dlYlNlcnZpY2VJbmZvIGF4aXNXZWJTZXJ2aWNlSW5mbykgewotCQlheGlzV2ViU2VydmljZUluZm9fID0gYXhpc1dlYlNlcnZpY2VJbmZvOwotCX0KLX0JCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTdmNzhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQXhpc1dlYlNlcnZpY2VJbmZvIHsKLQkKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1ldGVyOwotCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW1ldGVyKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbWV0ZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbWV0ZXIoSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbWV0ZXIpIHsKLQkJdGhpcy5qYXZhV1NETFBhcmFtZXRlciA9IGphdmFXU0RMUGFyYW1ldGVyOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VSdW50aW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYmQxMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud3NydC5BeGlzV2ViU2VydmljZUNsaWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5BYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi1wdWJsaWMgY2xhc3MgQXhpc1dlYlNlcnZpY2VSdW50aW1lIGV4dGVuZHMgQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZQotewotCi0JcHVibGljIElXZWJTZXJ2aWNlIGdldFdlYlNlcnZpY2UoV2ViU2VydmljZUluZm8gaW5mbykKLQl7Ci0gICAgcmV0dXJuIG5ldyBBeGlzV2ViU2VydmljZShpbmZvKTsKLQl9Ci0KLQlwdWJsaWMgSVdlYlNlcnZpY2VDbGllbnQgZ2V0V2ViU2VydmljZUNsaWVudChXZWJTZXJ2aWNlQ2xpZW50SW5mbyBpbmZvKQotCXsKLQkJcmV0dXJuIG5ldyBBeGlzV2ViU2VydmljZUNsaWVudChpbmZvKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VSdW50aW1lQ2hlY2tlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MWE0MWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAzMjYgICAxOTg0Mzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LkFic3RyYWN0V2ViU2VydmljZVJ1bnRpbWVDaGVja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXI7Ci0KLXB1YmxpYyBjbGFzcyBBeGlzV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIGV4dGVuZHMKLQkJQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgaW1wbGVtZW50cyBJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIHsKLQkKLQlwdWJsaWMgSVN0YXR1cyBjaGVja1NlcnZpY2VDbGllbnRDb21wYXRpYmlsaXR5KGJvb2xlYW4gc2VydmljZU5lZWRFQVIsCi0JCQlTdHJpbmcgc2VydmljZUVBUk5hbWUsIFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWUsCi0JCQlib29sZWFuIGNsaWVudE5lZWRFQVIsIFN0cmluZyBjbGllbnRFQVJOYW1lLAotCQkJU3RyaW5nIGNsaWVudFByb2plY3ROYW1lKSB7Ci0KLQkJaWYgKHNlcnZpY2VQcm9qZWN0TmFtZSAhPSBudWxsICYmIHNlcnZpY2VQcm9qZWN0TmFtZS5lcXVhbHNJZ25vcmVDYXNlKGNsaWVudFByb2plY3ROYW1lKSkgewotCQkJcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TQU1FX0NMSUVOVF9BTkRfU0VSVklDRV9QUk9KRUNUUyk7Ci0JCX0KLQkJaWYgKHNlcnZpY2VOZWVkRUFSICYmIGNsaWVudE5lZWRFQVIpIHsKLQkJCWlmIChzZXJ2aWNlRUFSTmFtZSAhPSBudWxsICYmIHNlcnZpY2VFQVJOYW1lLmVxdWFscyhjbGllbnRFQVJOYW1lKSkgewotCQkJCXJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TQU1FX0NMSUVOVF9BTkRfU0VSVklDRV9FQVJTLAotCQkJCQkJbmV3IFN0cmluZ1tdIHsgIkVBUiIgfSkpOwotCQkJfQotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDIzNDYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjI4MWIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBKdW4gMDMgMDE6NTc6MDAgRURUIDIwMDcKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MQotY29tcGlsZXJzLnAuYnVpbGQ9MQotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5taXNzaW5nLXBhY2thZ2VzPTIKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTIKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGNjZWMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4zMDQsMS4xLjApIgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyOTQwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2ZlNjU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBDcmVhdGlvbiBFSkIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotIwotIyBXZWIgc2VydmljZSB0eXBlcwotIwotV0VCU0VSVklDRVRZUEVfTkFNRV9FSkJfVFA9RUpCIFdlYiBTZXJ2aWNlCi1XRUJTRVJWSUNFVFlQRV9OQU1FX1dTRExfRUpCX1RQPVNrZWxldG9uIEVKQiBXZWIgU2VydmljZQotCi0jCi0jIFBvcC11cCBhY3Rpb25zCi0jCi1BQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0U9Q3JlYXRlIFdlYiBzZXJ2aWNlCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MzVjMjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICAgPCEtLSBFSkIgV2ViIFNlcnZpY2UgVHlwZXMgLS0+Ci08IS0tICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSI+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlVHlwZQotICAgICAgICAgICAgbGFiZWw9IiVXRUJTRVJWSUNFVFlQRV9OQU1FX1dTRExfRUpCX1RQIgotICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YWRhdGE9IkZpbGUgSVJlc291cmNlIgotICAgICAgICAgICAgZXh0ZW5zaW9uTWV0YWRhdGE9Ii53c2RsIgotICAgICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0PSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldpZGdldCIKLSAgICAgICAgICAgIGluY2x1ZGVOYXR1cmVzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCTmF0dXJlIgotICAgICAgICAgICAgZXhjbHVkZU5hdHVyZXM9IiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MudHlwZS53c2RsLmVqYiI+Ci0gICAgICA8L3dlYlNlcnZpY2VUeXBlPgotCi0gICAgICA8d2ViU2VydmljZVR5cGUKLQkJICAgIGxhYmVsPSIlV0VCU0VSVklDRVRZUEVfTkFNRV9FSkJfVFAiCi0JCSAgICByZXNvdXJjZVR5cGVNZXRhZGF0YT0iRUpCT2JqZWN0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbiBTZXNzaW9uSW1wbCIKLQkJICAgIGV4dGVuc2lvbk1ldGFkYXRhPSIuamF2YSAuY2xhc3MgLlNlc3Npb25JbXBsIgotCQkgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0PSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuRUpCU2VsZWN0aW9uV2lkZ2V0IgotCQkgICAgaW5jbHVkZU5hdHVyZXM9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FSkJOYXR1cmUiCi0JCSAgICBleGNsdWRlTmF0dXJlcz0iIgotCQkgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy50eXBlLmVqYiI+Ci0gIAkgPC93ZWJTZXJ2aWNlVHlwZT4KLQk8L2V4dGVuc2lvbj4KLS0tPgotCi0gICA8IS0tIFBvcHVwcyAtLT4KLSAgICAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5lamIiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0UiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5lamIucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5FbnRlcnByaXNlQmVhbnMiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuZWpiMyI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LmVqYi5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLQotCi08IS0tIEVKQiBzdHVmZiAtLT4KLSAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzSW1wbCI+Ci0gICAgIDx3ZWJTZXJ2aWNlSW1wbAotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuZWpiIgotICAgICAgICAgICAgbGFiZWw9IiVXRUJTRVJWSUNFVFlQRV9OQU1FX0VKQl9UUCIKLSAgICAgICAgICAgIHJlc291cmNlVHlwZU1ldGFkYXRhPSJFSkJPYmplY3Qgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuIG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuZWpiLkVudGVycHJpc2VCZWFucyBTZXNzaW9uSW1wbCBTZXNzaW9uQmVhbkltcGwiCi0gICAgICAgICAgICBleHRlbnNpb25NZXRhZGF0YT0iLmphdmEgLmNsYXNzIC5TZXNzaW9uSW1wbCAuU2Vzc2lvbkJlYW5JbXBsIgotICAgICAgICAgICAgbWVyZ2VyQ2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uSmF2YU1lcmdlciIgCi0gICAgICAgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5FSkJTZWxlY3Rpb25XaWRnZXQiPgotICAgICA8L3dlYlNlcnZpY2VJbXBsPgotICAgIDwvZXh0ZW5zaW9uPiAgICAKLSAgICAKLQotICAgICAgICAgICAgCi0gICAKLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTZkNDlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTZlZGVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NzLXVpLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljOGJmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYWIxODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI1NhdCBKdW4gMDIgMTc6MDc6MDYgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NzFhYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQxOjA0IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBkNGY1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzA1LnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmFudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnNlcnZlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuYmluZGluZzt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnJ1bnRpbWU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0O3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb247YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbWZ3b3JrYmVuY2guaW50ZWdyYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuZm9ybXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWRlYzMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZXhwb3J0X3dzLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2V4cG9ydF93cy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNDRlZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZXhwb3J0X3dzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9uZXdfd2Vic2Vydl93aXouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L25ld193ZWJzZXJ2X3dpei5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNzM3ZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L25ld193ZWJzZXJ2X3dpei5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9leHBvcnRfd3Nfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2V4cG9ydF93c193aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDZiY2FiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2V4cG9ydF93c193aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1Zjg3NmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfYXNzZW1ibGUuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9hc3NlbWJsZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMzc5MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9hc3NlbWJsZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2RlcGxveS5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2RlcGxveS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNThiYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9kZXBsb3kuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9kZXZlbG9wLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfZGV2ZWxvcC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZmY2YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9kZXZlbG9wLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfaW5zdGFsbC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2luc3RhbGwuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGZjZGJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfaW5zdGFsbC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX3J1bi5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX3J1bi5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjOTEyZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9ydW4uanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV90ZXN0LmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfdGVzdC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNTY5NTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV90ZXN0LmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZTg1ZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBDcmVhdGlvbiBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1QTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M9V2ViIFNlcnZpY2VzCi1QTFVHSU5fTkVXX1dJWkFSRF9OQU1FX1dTX1NFUlZJQ0U9V2ViIFNlcnZpY2UKLVBMVUdJTl9FWFBPUlRfV0laQVJEX05BTUVfV1M9V2ViIFNlcnZpY2UKLVBMVUdJTl9ORVdfV0laQVJEX0RFU0NfV1NfU0VSVklDRT1DcmVhdGUgYSBuZXcgWE1MIHdlYiBzZXJ2aWNlLgotUExVR0lOX0VYUE9SVF9XSVpBUkRfREVTQ19XUz1BIHdpemFyZCBmb3IgZXhwb3J0aW5nIGEgd2ViIHNlcnZpY2UuCi0KLSMKLSMJV2ViIFNlcnZpY2VzIFByZWZlcmFuY2UgUGFnZXMKLSMKLSMgRGlhbG9ncwotQ0hFQ0tCT1hfU0hPV19ERVBMT1lfV0VCX1NFUlZJQ0VfRElBTE9HPUhpZGUgJkNyZWF0ZSBXZWIgc2VydmljZSBEaWFsb2cKLUNIRUNLQk9YX1NIT1dfR0VORVJBVEVfU0tFTEVUT05fRElBTE9HPUhpZGUgR2VuZXJhdGUgSmF2YSBCZWFuIFMma2VsZXRvbiBEaWFsb2cKLUNIRUNLQk9YX1NIT1dfR0VORVJBVEVfV1NETF9GSUxFU19ESUFMT0c9SGlkZSBHZW5lcmF0ZSBXU0RMIEZpbGVzIERpYWxvZwotQ0hFQ0tCT1hfU0hPV19QVUJMSVNIX1dTRExfRElBTE9HPUhpZGUgUHVibGlzaCAmV1NETCBEaWFsb2cKLQotUFJFRkVSRU5DRV9DQVRFR09SWV9TQ0VOQVJJT19ERUZBVUxUUz1TY2VuYXJpbyBEZWZhdWx0cwotCi0KLSMKLSMgUHJlZmVyZW5jZXMgVG9vbHRpcHMKLSMKLSNBY3Rpb24gRGlhbG9ncwotVE9PTFRJUF9QUEFEX0NIRUNLQk9YX0RFUExPWT1IaWRlcyB0aGUgZGlhbG9nIGZvciBkZXBsb3lpbmcgYSBXZWIgc2VydmljZSBhY3Rpb24KLVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9TS0VMRVRPTj1IaWRlcyB0aGUgZGlhbG9nIGZvciBnZW5lcmF0aW5nIEphdmEgYmVhbiBTa2VsZXRvbiBhY3Rpb24KLVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9XU0RMPUhpZGVzIHRoZSBkaWFsb2cgZm9yIGdlbmVyYXRpbmcgV1NETCBmaWxlcyBhY3Rpb24KLVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9QVUJMSVNIPUhpZGVzIHRoZSBkaWFsb2cgZm9yIHB1Ymxpc2hpbmcgdGhlIFdTREwgYWN0aW9uCi0KLSMKLSMgUG9wLXVwIGFjdGlvbnMKLSMKLUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRT1DcmVhdGUgV2ViIHNlcnZpY2UKLUFDVElPTl9HRU5FUkFURV9KQVZBX1NLRUxFVE9OPUdlbmVyYXRlIEphdmEgYmVhbiBza2VsZXRvbgotQUNUSU9OX1BVQkxJU0hfV1NETD1QdWJsaXNoIFdTREwgZmlsZQotCi0jCi0jIFdpemFyZHMuCi0jCi1XSVpBUkRfVElUTEVfV1NTPVdlYiBTZXJ2aWNlCi0KLQotIwotIyBQb3AtdXAgYWN0aW9ucwotIwotQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFPUNyZWF0ZSBXZWIgc2VydmljZQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI3MWY3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzk2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0KLSAgICAgPCEtLSBXaXphcmRzIC0tPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0gICAgICA8Y2F0ZWdvcnkKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1MiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyI+Ci0gICAgICA8L2NhdGVnb3J5PgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfU0VSVklDRSIKLSAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3Rvb2wxNi9uZXdfd2Vic2Vydl93aXouZ2lmIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAlUExVR0lOX05FV19XSVpBUkRfREVTQ19XU19TRVJWSUNFCi0gICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nIgotICAgICAgICAgICAgdGl0bGU9IiVXSVpBUkRfVElUTEVfV1NTIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuU2VydmVyV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmV4cG9ydFdpemFyZHMiPgotICAgICAgPGNhdGVnb3J5Ci0gICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53c2V4cG9ydC5jYXRlZ29yeSIKLSAgICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmV4cG9ydFdpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9FWFBPUlRfV0laQVJEX05BTUVfV1MiCi0gICAgICAgICAgICBpY29uPSJpY29ucy9leHBvcnRfd3MuZ2lmIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53c2V4cG9ydC5jYXRlZ29yeSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2V4cG9ydCI+Ci0gICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAlUExVR0lOX0VYUE9SVF9XSVpBUkRfREVTQ19XUwotICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDwvd2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vZXhwb3J0X3dzX3dpei5wbmciCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX0VYUE9SVF9XSVpBUkRfTkFNRV9XUyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5iaW5kaW5nLkV4cG9ydFdTV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NleHBvcnQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vZXhwb3J0X3dzX3dpei5wbmciCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX0VYUE9SVF9XSVpBUkRfTkFNRV9XUyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5iaW5kaW5nLkV4cG9ydFdTV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2giPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gIkRvbid0IFNob3cgTWUiIFByZWZlcmVuY2VzIC0tPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIj4KLQotICAgICAgPGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi0gICAgICAgICAgICBuYW1lPSIlQ0hFQ0tCT1hfU0hPV19ERVBMT1lfV0VCX1NFUlZJQ0VfRElBTE9HIgotICAgICAgICAgICAgdG9vbHRpcD0iJVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9ERVBMT1kiCi0gICAgICAgICAgICBpbmZvcG9wPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkuUFBBRDAwMDYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSIKLSAgICAgICAgICAgIG9iamVjdGlkcz0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuZWpiIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmVqYjMgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5maWxlIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuY29tcHVuaXQgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5zZXJ2aWNlLmJlYW4gb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5iZWFuLmxpbmsiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YSI+Ci0gICAgICA8L2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlPgotCi0gICAgICA8YWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVDSEVDS0JPWF9TSE9XX0dFTkVSQVRFX1NLRUxFVE9OX0RJQUxPRyIKLSAgICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX1BQQURfQ0hFQ0tCT1hfU0tFTEVUT04iCi0gICAgICAgICAgICBpbmZvcG9wPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkuUFBBRDAwMDgiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSIKLSAgICAgICAgICAgIG9iamVjdGlkcz0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24uZmlsZS53c2RsIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLnNlcnZpY2Ugb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24ud3NkbHJlcyBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5zZXJ2aWNlcmVmIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLmZpbGUud3NpbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbiI+Ci0gICAgICA8L2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlPgotCi0gICAgICA8YWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVDSEVDS0JPWF9TSE9XX1BVQkxJU0hfV1NETF9ESUFMT0ciCi0gICAgICAgICAgICB0b29sdGlwPSIlVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1BVQkxJU0giCi0gICAgICAgICAgICBpbmZvcG9wPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkuUFBBRDAwMDkiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSIKLSAgICAgICAgICAgIG9iamVjdGlkcz0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLmZpbGUgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLnNlcnZpY2Ugb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLndzZGxyZXMgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLnNlcnZpY2VyZWYiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoIj4KLSAgICAgIDwvYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIFBvcHVwcyAtLT4KLSAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLmphdmEiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5maWxlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5Db21waWxhdGlvblVuaXQiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLmphdmEiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5jb21wdW5pdCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24uZmlsZS53c2RsIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT04iCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLnNlcnZpY2UiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLndzZGxyZXMiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWYiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLnNlcnZpY2VyZWYiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmljZUltcGxCZWFuIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhLnNlcnZpY2UuYmVhbiI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICAKLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuQmVhbkxpbmsiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuYmVhbi5saW5rIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgICAgCi0gICAgICAKLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NpbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5maWxlLndzaWwiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLmZpbGUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fUFVCTElTSF9XU0RMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaC5zZXJ2aWNlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX1BVQkxJU0hfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgICAgCi0gICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbCIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLndzZGxyZXMiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fUFVCTElTSF9XU0RMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICAKLSAgICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2guc2VydmljZXJlZiI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9QVUJMSVNIX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2giPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDwhLS0gUHJlZmVyZW5jZSBQYWdlcyAtLT4KLQotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBuYW1lPSIlUFJFRkVSRU5DRV9DQVRFR09SWV9TQ0VOQVJJT19ERUZBVUxUUyIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucHJlZmVyZW5jZXMuU2NlbmFyaW9EZWZhdWx0c1ByZWZlcmVuY2VQYWdlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wcmVmZXJlbmNlcy5TY2VuYXJpb0RlZmF1bHRzUHJlZmVyZW5jZVBhZ2UiPgotICAgICAgPC9wYWdlPgotICAgPC9leHRlbnNpb24+Ci0gICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0UmVnaXN0cnkiPgotICAgICAgIDx3aWRnZXRGYWN0b3J5ICAgCi0gICAgICAgICAgICAgaWQ9IlN0YXJ0U2VydmljZVNlcnZlciIKLSAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uUHJlU2VydmljZVJ1bkNvbW1hbmQiCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5zZXJ2ZXIuU3RhcnRTZXJ2ZXJXaWRnZXRGYWN0b3J5Ii8+Ci0gICAgPC9leHRlbnNpb24+IAotICAgIAotICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuYW50U2NlbmFyaW8iPgotICAgICAgICA8YW50U2NlbmFyaW8KLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuYW50LkFudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50IgotICAgICAgICAgICAgc2NlbmFyaW9UeXBlPSJzZXJ2aWNlIi8+Ci0gICAgIDwvZXh0ZW5zaW9uPiAgICAKLSAgICAKLSAgICAgPGV4dGVuc2lvbgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFudERhdGFNYXBwaW5nIj4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJJbml0aWFsU2VsZWN0aW9uIgotICAgICAgICAgICAgICByZXF1aXJlZD0idHJ1ZSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJTZWxlY3Rpb25UcmFuc2Zvcm1lciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iSW5pdGlhbFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9Ik9iamVjdFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgcmVxdWlyZWQ9InRydWUiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIiLz4gICAgICAgICAgICAgIAotCQk8bWFwCi0gICAgICAgICAgICAgIGtleT0iUHJvamVjdCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlByb2plY3QiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNvbXBvbmVudE5hbWUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDb21wb25lbnROYW1lIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlJ1bnRpbWVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuU2VydmVySWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlR5cGVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4gICAgICAgICAgICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJHZW5lcmF0ZVByb3h5IgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJHZW5lcmF0ZVByb3h5Ii8+Ci0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5SdW50aW1lSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+Ci0gICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlNlcnZlcklkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuVHlwZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICAgICAgICAgICAKLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlUHJvamVjdE5hbWUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMucnVudGltZS5TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlUHJvamVjdE5hbWUiLz4KLSAgICAgICAgICAgICAgCi0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZVByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlUHJvamVjdE5hbWUiLz4KLSAgICAgICAgICAgICAgCi0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZUNvbXBvbmVudE5hbWUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VDb21wb25lbnROYW1lIi8+Ci0KLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlRWFyUHJvamVjdE5hbWUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VFYXJQcm9qZWN0TmFtZSIvPgotICAgICAgICAgICAgICAKLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlRWFyQ29tcG9uZW50TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZUVhckNvbXBvbmVudE5hbWUiLz4gICAgICAgICAgICAgIAotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuUnVudGltZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuU2VydmVySWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25GcmFnbWVudCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+Ci0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5UeXBlSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25GcmFnbWVudCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+Ci0gICAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL0NyZWF0aW9uVUkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvQ3JlYXRpb25VSS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjdkOThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvQ3JlYXRpb25VSS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIFdpemFyZCBwYWdlcwotIwotUEFHRV9USVRMRV9PQkpFQ1RfU0VMRUNUSU9OPU9iamVjdCBTZWxlY3Rpb24gUGFnZQotUEFHRV9ERVNDX09CSkVDVF9TRUxFQ1RJT049T2JqZWN0IFNlbGVjdGlvbiBQYWdlCi0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL0NyZWF0aW9uVUlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9DcmVhdGlvblVJTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxOWU4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL0NyZWF0aW9uVUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBDcmVhdGlvblVJTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5DcmVhdGlvblVJIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIENyZWF0aW9uVUlNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9PQkpFQ1RfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19PQkpFQ1RfU0VMRUNUSU9OOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgQ3JlYXRpb25VSU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9hbnQvQW50U2VydmljZVJvb3RDb21tYW5kRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvYW50L0FudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YzYwNTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9hbnQvQW50U2VydmljZVJvb3RDb21tYW5kRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUzMCAgIDE0NDM1OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MzAgICAxNDQzNTAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODIzICAgMTU0OTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwODI1ICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYxMDExICAgMTU5MjgzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBwcm9qZWN0IG5vdCBhc3NvY2lhdGVkIHRvIEVBUiB3aGVuIHVzaW5nIGFudCBvbiBjb21tYW5kLWxpbmUKLSAqIDIwMDcwNTAxICAgMTc4MTI5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3b3Jrc3BhY2UgcmVwb3J0cyAiY3Jhc2ggZGV0ZWN0ZWQiIGFmdGVyIHJ1bm5pbmcgV1MgYW50IHRhc2sgKGNtZGxpbmUpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmFudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkFudERlZmF1bHRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQW50UmVzdG9yaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5BbnRXb3Jrc3BhY2VTYXZlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5MaXN0T3B0aW9uc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5GaW5pc2hGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlNjZW5hcmlvQ2xlYW51cENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlbGVjdGlvbi5TZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uLlByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uLlNlcnZpY2VSb290RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5ydW50aW1lLlNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLSAKLS8qKgotICogCi0gKiBDb21tYW5kIGZyYWdtZW50IGZvciBnZW5lcmF0aW5nIHdlYiBzZXJ2aWNlIHRvcCBkb3duIG9yIGJvdHRvbSB1cCB1c2luZyBBbnQgdGFzay4KLSAqIFJ1biBoZWFkbGVzcyBFY2xpcHNlIG9yIHdpdGhpbiB3b3Jrc3BhY2UgdXNpbmcgUnVuIGFzIEFudCBCdWlsZC4gIFRoaXMgZnJhZ21lbnQgZWxpbWluYXRlcyBhbnkgVUkgc3BlY2lmaWMgCi0gKiBjb21tYW5kcyBhbmQgZGF0YSBtYXBwaW5ncyBiZXR3ZWVuIGNvbW1hbmRzIGFuZCB3aWRnZXRzLiAgV2lkZ2V0IHRvIGNvbW1hbmQgbWFwcGluZ3MgYXJlCi0gKiByZXBsYWNlZCBieSBBbnQgcHJvcGVydHkgZmlsZSB0byBjb21tYW5kIG1hcHBpbmdzIHdoaWNoIGFyZSBlbmFibGVkIGJ5IGEgYW50RGF0YU1hcHBpbmcgZXh0ZW5zaW9uIAotICogcG9pbnQgaW4gdGhlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiBwbHVnaW4uCi0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgQW50U2VydmljZVJvb3RDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci17Ci0JCi0gIHB1YmxpYyBBbnRTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudCgpCi0gIHsgCi0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KG5ldyBMaXN0T3B0aW9uc0NvbW1hbmQoKSwgIiIpKTsKLSAgICBhZGQgKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQW50RGVmYXVsdGluZ09wZXJhdGlvbigpLCAiIikpOyAgICAKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kKCksICIiICkpOyAgICAKLSAgICBhZGQoIG5ldyBPYmplY3RTZWxlY3Rpb25GcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7ICAgCi0gICAgYWRkKCBuZXcgU2VydmljZVJvb3RGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kKCksICIiICkpOwotICAgIGFkZChuZXcgRmluaXNoRnJhZ21lbnQoKSk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBBbnRSZXN0b3JpbmdDb21tYW5kKCksICIiICkpOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2NlbmFyaW9DbGVhbnVwQ29tbWFuZCgpLCAiIiApKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IEFudFdvcmtzcGFjZVNhdmVDb21tYW5kKCksICIiKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7IAkKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsU2VsZWN0aW9uIiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsUHJvamVjdCIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SW5pdGlhbFByb2plY3QiLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ29tcG9uZW50TmFtZSIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxDb21wb25lbnROYW1lIiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkNvbXBvbmVudE5hbWUiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsQ29tcG9uZW50TmFtZSIsIG51bGwpOyAgICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7ICAgIAotCQotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICAgIAkKLSAgICAvLyBNYXAgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC4KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgT2JqZWN0U2VsZWN0aW9uRnJhZ21lbnQuY2xhc3MsICJUeXBlUnVudGltZVNlcnZlciIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRlcGxveVNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAgIAotICAgIC8vTWFwIEFudERlZmF1bHRpbmdGcmFnbWVudAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJTZXJ2aWNlSWRzRml4ZWQiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJDbGllbnRJZHNGaXhlZCIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIkluc3RhbGxTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gTWFwIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVByb2plY3ROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VFYXJQcm9qZWN0TmFtZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50TmFtZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRWFyQ29tcG9uZW50TmFtZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlSjJFRVZlcnNpb24iLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZU5lZWRFQVIiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgCi0gICAgLy8gTWFwIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgCSAgCi0JLy8gU2V0dXAgdGhlIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC4JCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwkJCQotCQotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZVR5cGUiLCBudWxsKTsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudFR5cGUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VSdW50aW1lSWQiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVJ1bnRpbWVJZCIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VKMkVFVmVyc2lvbiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0RUFSIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIAotICAgIAotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgbmV3IFNlbGVjdGlvblRyYW5zZm9ybWVyKCkgKTsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MgKTsKLQotICAgIC8vIE1hcCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kIGZvciBTZXJ2ZXJTdGFydCgpCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0RUFSIiwgU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkVhclByb2plY3ROYW1lIiwgbnVsbCk7Ci0gICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIlJlbmRlcmVyVmFsaWRhdGlvbiIsIEFudFJlc3RvcmluZ0NvbW1hbmQuY2xhc3MpOwotICAgIAotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkNzQzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDMzMCAxMjg4MjcgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjQgICAxNDE5MjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzEyMTgJICAyMDAxOTMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNzEyMjAgICAyMTM2NDAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzI1ICAgMjIyNDczIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDcmVhdGUgRUFSIHZlcnNpb24gYmFzZWQgb24gdGhlIHZlcnNpb24gb2YgbW9kdWxlcyB0byBiZSBhZGRlZAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnBsdWdpbi5JSjJFRU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50TWVyZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklNZXJnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi1wdWJsaWMgY2xhc3MgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCXByaXZhdGUgSVdlYlNlcnZpY2UJCQkJd2ViU2VydmljZV87Ci0JcHJpdmF0ZSBTdHJpbmcJCQkJCQlwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBtb2R1bGVfOwotCXByaXZhdGUgU3RyaW5nCQkJCQkJZWFyUHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgZWFyXzsKLSAgcHJpdmF0ZSBJQ29udGV4dCAgICAgICAgICBjb250ZXh0XzsKLSAgcHJpdmF0ZSBJUHJvamVjdAkJaW5pdGlhbFByb2plY3RfOwotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgCi0JICAvLyBGb3IgdG9wIGRvd24gc2NlbmFyaW9zLCBtZXJnZSB0aGUgY29udGVudCBvZiB0aGUgc2tlbGV0b24gZmlsZXMgd2l0aCB0aGUgcHJldmlvdXMgdmVyc2lvbiBzdG9yZWQuCSAgCi0JICAvLyBUaGUgV2ViIHNlcnZpY2UgZXh0ZW5zaW9ucyB0cmlnZ2VycyB0aGUgc3RvcmluZyBvZiB0aGUgY29udGVudCBvZiB0aGUgb2xkIHNrZWxldG9uIGZpbGUgYnkgCi0JICAvLyBjYWxsaW5nIFdlYlNlcnZpY2VJbmZvLnNldEltcGxVUkxzKCkgYmVmb3JlIHRoZSBuZXcgc2tlbGV0b24gaXMgZ2VuZXJhdGVkIGluIHRoZSBleHRlbnNpb24ncyAKLQkgIC8vIGRldmVsb3AoKSBtZXRob2QuCi0JICAKLQkgIGlmIChjb250ZXh0Xy5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pIHsKLQkJICBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0JCSAgSU1lcmdlciBtZXJnZXIgPSB3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldE1lcmdlcigpOwotCQkgIGlmIChtZXJnZUNvbnRleHQuaXNTa2VsZXRvbk1lcmdlRW5hYmxlZCgpICYmIG1lcmdlciAhPSBudWxsKSB7Ci0JCQkgIHN0YXR1cyA9IG1lcmdlci5tZXJnZShtb25pdG9yLCBnZXRFbnZpcm9ubWVudCgpLmdldFN0YXR1c0hhbmRsZXIoKSk7CQotCQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQkgIHJldHVybiBzdGF0dXM7Ci0JCQkgIH0JCQotCQkgIH0KLQkgIH0KLQkgIAotCSAgaWYgKGNvbnRleHRfLmdldEFzc2VtYmxlKCkpIHsKLQotCQkgIC8vIENoZWNrIGlmIEVBUiBtb2R1bGUgaXMgcmVxJ2QsIGllLiAhPW51bGwKLQkJICBpZiAoZWFyUHJvamVjdF89PW51bGwpCi0JCQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0KLQotCQkgIC8vQ3JlYXRlIHRoZSBzZXJ2aWNlIEVBUiBtb2R1bGUKLQotCQkgIENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCBjb21tYW5kID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwotCQkgIGNvbW1hbmQuc2V0UHJvamVjdE5hbWUoZWFyUHJvamVjdF8pOwotCQkgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX1RFTVBMQVRFKTsKLQotCQkgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdF8pOwotCQkgIGNvbW1hbmQuc2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKEZhY2V0VXRpbHMuZ2V0UmVxdWlyZWRFQVJGYWNldFZlcnNpb25zKHByb2plY3QpKTsgCi0KLQkJICBjb21tYW5kLnNldFNlcnZlckZhY3RvcnlJZCh3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpKTsKLQkJICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQod2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkgIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgYWRhcHRhYmxlICk7Ci0JCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLQkJICB7Ci0JCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0JCQkgIHJldHVybiBzdGF0dXM7Ci0JCSAgfSAgICAgICAgICAgICAgICAKLQotCQkgIC8vQXNzb2NpYXRlIHRoZSBzZXJ2aWNlIG1vZHVsZSBhbmQgc2VydmljZSBFQVIKLQkJICBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZCBhc3NvY2lhdGVDb21tYW5kID0gbmV3IEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kKCk7Ci0JCSAgYXNzb2NpYXRlQ29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldE1vZHVsZShtb2R1bGVfKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldEVBUlByb2plY3QoZWFyUHJvamVjdF8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RWFyKGVhcl8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JCSAgc3RhdHVzID0gYXNzb2NpYXRlQ29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JCSAgewotCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsJCSAgCi0JCSAgfQkJCQotCi0JCSAgLy9tYWtlIHN1cmUgdGhlIGVhciBmaWxlIGhhcyBiZWVuIGNyZWF0ZWQuCi0JCSAgCi0JCSAgaWYoaW5pdGlhbFByb2plY3RfICE9IG51bGwgJiYgRmFjZXRVdGlscy5pc0phdmFQcm9qZWN0KGluaXRpYWxQcm9qZWN0XykpIHsKLQkJCSAgSVByb2plY3QgZWFyUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChlYXJQcm9qZWN0Xyk7Ci0JCQkgIEoyRUVVdGlscy5hZGRKYXZhUHJvamVjdEFzVXRpbGl0eUphcihpbml0aWFsUHJvamVjdF8sIGVhclByb2plY3QsIG1vbml0b3IpOwotCQkgIH0JCSAKLQkgIAotCSAgfQotCSAgcmV0dXJuIHN0YXR1czsJICAKLSAgfQotCQotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsUHJvamVjdChJUHJvamVjdCBpbml0aWFsUHJvamVjdCkKLSAgewotCSAgaW5pdGlhbFByb2plY3RfID0gaW5pdGlhbFByb2plY3Q7ICAKLSAgfQkKLSAgICAKLSAgcHVibGljIElQcm9qZWN0IGdldEluaXRpYWxQcm9qZWN0KCkKLSAgewotCSAgcmV0dXJuIGluaXRpYWxQcm9qZWN0XzsgIAotICB9CQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdCggU3RyaW5nIHByb2plY3QgKQotICB7Ci0JICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLQkgIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotICB7Ci0JICBtb2R1bGVfID0gbW9kdWxlOwotICB9CQotCQotICBwdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0KCBTdHJpbmcgZWFyUHJvamVjdCApCi0gIHsKLQkgIGVhclByb2plY3RfID0gZWFyUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotCSAgZWFyXyA9IGVhcjsgIAotICB9Ci0JCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UgKQotICB7Ci0JICB3ZWJTZXJ2aWNlXyA9IHdlYlNlcnZpY2U7ICAKLSAgfQkKLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQgKElDb250ZXh0IGNvbnRleHQpIHsKLQkgIGNvbnRleHRfID0gY29udGV4dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURlcGxveUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VEZXBsb3lDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNTU3NTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURlcGxveUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBQcmVTZXJ2aWNlRGVwbG95Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgY29udGV4dF87Ci0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgICBpZiAoY29udGV4dF8uZ2V0RGVwbG95KCkpCi0gICAgICB7Ci0gICAgICAgIC8vSWYgYW5kIHdoZW4gdGhlcmUgYXJlIGZyYW1ld29yayBzcGVjaWZpYyBkZXBsb3kgdGhpbmdzIHRvIGJlIGRvbmUsCi0gICAgICAgIC8vZG8gdGhlbSBoZXJlLgotICAgICAgfQotICAgICAgCi0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotICB7Ci0gICAgICBjb250ZXh0Xz1jb250ZXh0OwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURldmVsb3BDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YjIyMWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURldmVsb3BDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUxNiAgIDEyNjk2NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwMTIzICAgMTY3NDg3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA3MDQwMyAgIDE3MzY1NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMjEyCSAgMjAwMTkzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDcxMjIwICAgMjEzNjQwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNiAgIDIyMTM2NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uSFRUUFV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSU1lcmdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5TaW1wbGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU3RhdGU7Ci0KLXB1YmxpYyBjbGFzcyBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgc2VydmljZVJ1bnRpbWVJZF87Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgICAgICAgY29udGV4dF87Ci0gIHByaXZhdGUgSVNlbGVjdGlvbiAgICAgICAgc2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBTdHJpbmcJCQlwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBtb2R1bGVfOwotICBwcml2YXRlIFN0cmluZwkJCW1vZHVsZVR5cGVfOwotICBwcml2YXRlIFN0cmluZwkJCWVhclByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGVhcl87Ci0gIHByaXZhdGUgSVByb2plY3QJCQlpbml0aWFsUHJvamVjdF87Ci0JCi0gIHByaXZhdGUgSVdlYlNlcnZpY2UgICAgICAgd2ViU2VydmljZV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgajJlZUxldmVsXzsKLSAgcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgICByZXNvdXJjZUNvbnRleHRfOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIGRldmVsb3BfOwotICBwcml2YXRlIGJvb2xlYW4gYXNzZW1ibGVfOwotICBwcml2YXRlIGJvb2xlYW4gZGVwbG95XzsKLSAgcHJpdmF0ZSBib29sZWFuIGluc3RhbGxfOwotICBwcml2YXRlIGJvb2xlYW4gcnVuXzsKLSAgcHJpdmF0ZSBib29sZWFuIGNsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiB0ZXN0XzsKLSAgcHJpdmF0ZSBib29sZWFuIHB1Ymxpc2hfOwotICAKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgaWYgKGRldmVsb3BfKSB7Ci0JCSAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQotCQkgIC8vIFNwbGl0IHVwIHRoZSBwcm9qZWN0IGFuZCBtb2R1bGUKLQkJICBpbnQgaW5kZXggPSBtb2R1bGVfLmluZGV4T2YoIi8iKTsKLQkJICBpZiAoaW5kZXghPS0xKXsKLQkJCSAgcHJvamVjdF8gPSBtb2R1bGVfLnN1YnN0cmluZygwLGluZGV4KTsKLQkJCSAgbW9kdWxlXyA9IG1vZHVsZV8uc3Vic3RyaW5nKGluZGV4KzEpOwotCQkgIH0KLQotCQkgIGlmIChlYXJfIT1udWxsICYmIGVhcl8ubGVuZ3RoKCk+MCkKLQkJICB7Ci0JCQkgIGludCBlYXJJbmRleCA9IGVhcl8uaW5kZXhPZigiLyIpOwotCQkJICBpZiAoZWFySW5kZXghPS0xKSB7Ci0JCQkJICBlYXJQcm9qZWN0XyA9IGVhcl8uc3Vic3RyaW5nKDAsZWFySW5kZXgpOwotCQkJCSAgZWFyXyA9IGVhcl8uc3Vic3RyaW5nKGVhckluZGV4KzEpOwotCQkJICB9Ci0JCSAgfQotCi0KLQkJICBJV2ViU2VydmljZVJ1bnRpbWUgd3NydCAgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWUoIHNlcnZpY2VSdW50aW1lSWRfICk7Ci0JCSAgV2ViU2VydmljZUluZm8gICAgIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlSW5mbygpOwotCi0JCSAgd3NJbmZvLnNldFNlcnZlckZhY3RvcnlJZCggdHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkgKTsKLQkJICB3c0luZm8uc2V0U2VydmVySW5zdGFuY2VJZCggdHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCSAgd3NJbmZvLnNldFN0YXRlKCBXZWJTZXJ2aWNlU3RhdGUuVU5LTk9XTl9MSVRFUkFMICk7Ci0JCSAgd3NJbmZvLnNldFdlYlNlcnZpY2VSdW50aW1lSWQoIHR5cGVSdW50aW1lU2VydmVyXy5nZXRSdW50aW1lSWQoKSApOwotCQkgIAotCQkgIGVudmlyb25tZW50LmdldExvZygpLmxvZyhJTG9nLklORk8sICJ3c19mcmFtZXdvcmsiLCA1MTA3LCB0aGlzLCAiUHJlU2VydmljZURldmVsb3BDb21tYW5kIiwgInNlcnZpY2VSdW50aW1lSWRfID0gIisgc2VydmljZVJ1bnRpbWVJZF8pOwotCQkgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBzZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgPSAgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkXyk7Ci0JCSAgSU1lcmdlciBtZXJnZXIgPSBzZXJ2aWNlUnVudGltZURlc2NyaXB0b3IuZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpLmdldE1lcmdlckNsYXNzKCk7Ci0JCSAgd3NJbmZvLnNldE1lcmdlcihtZXJnZXIpOwkJICAKLQotCQkgIHdlYlNlcnZpY2VfICA9IHdzcnQuZ2V0V2ViU2VydmljZSggd3NJbmZvICk7Ci0KLQkJICAvL1NldCB1cCB0aGUgSUNvbnRleHQKLQkJICBXZWJTZXJ2aWNlU2NlbmFyaW8gc2NlbmFyaW8gPSBudWxsOwotCQkgIGludCBzY2VuYXJpb0ludCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0VHlwZUlkKCkpOwotCQkgIGlmIChzY2VuYXJpb0ludCA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApCi0JCSAgewotCQkJICBzY2VuYXJpbyA9IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUF9MSVRFUkFMOwotCQkJICBTdHJpbmcgaW1wbCA9IChTdHJpbmcpKHNlbGVjdGlvbl8uZ2V0U2VsZWN0aW9uKCkpWzBdOwotCQkJICB3c0luZm8uc2V0SW1wbFVSTChpbXBsKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAoc2NlbmFyaW9JbnQgPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0JCSAgewotCQkJICBzY2VuYXJpbyA9IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOX0xJVEVSQUw7Ci0JCQkgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZykoc2VsZWN0aW9uXy5nZXRTZWxlY3Rpb24oKSlbMF07Ci0JCQkgIAotCQkJICAvLyBjaGVjayBmb3IgcmVkaXJlY3Rpb24gaW4gdGhlIHdzZGwKLQkJCSAgSFRUUFV0aWxpdHkgaHR0cFV0aWwgPSBuZXcgSFRUUFV0aWxpdHkoKTsKLQkJCSAgd3NJbmZvLnNldFdzZGxVUkwoaHR0cFV0aWwuaGFuZGxlUmVkaXJlY3Qod3NkbFVSTCkpOyAgICAgIAotCQkgIH0KLQotCQkgIGNvbnRleHRfICAgICA9IG5ldyBTaW1wbGVDb250ZXh0KGRldmVsb3BfLCBhc3NlbWJsZV8sIGRlcGxveV8sIGluc3RhbGxfLCBydW5fLCBjbGllbnRfLCB0ZXN0XywgcHVibGlzaF8sIAotCQkJCSAgc2NlbmFyaW8sIAotCQkJCSAgcmVzb3VyY2VDb250ZXh0Xy5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpLAotCQkJCSAgcmVzb3VyY2VDb250ZXh0Xy5pc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCksCi0JCQkJICByZXNvdXJjZUNvbnRleHRfLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0KLQkJICAvLyBDcmVhdGUgdGhlIHNlcnZpY2UgbW9kdWxlIGlmIG5lZWRlZC4KLQkJICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdiA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZF8pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotCQkgIGlmICghcHJvamVjdC5leGlzdHMoKSkKLQkJICB7Ci0JCQkgIGJvb2xlYW4gbWF0Y2hlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRUZW1wbGF0ZShzZXJ2aWNlUnVudGltZUlkXywgbW9kdWxlVHlwZV8pOwotCQkJICBpZiAobWF0Y2hlcykKLQkJCSAgewkJCQkgIAotCQkJCSAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7Ci0JCQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKHByb2plY3RfKTsKLQkJCQkgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChtb2R1bGVUeXBlXyk7Ci0JCQkJICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhyZnYpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkJCSAgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBhZGFwdGFibGUgKTsKLQkJCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCQkJICB7Ci0JCQkJCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkJCQkJICByZXR1cm4gc3RhdHVzOwotCQkJCSAgfSAgICAgICAgCi0JCQkgIH0gICAgICAgICAgICAKLQkJICB9IGVsc2UgewotCQkJLy8gYWRkIGZhY2V0cyByZXF1aXJlZCBieSBXZWIgc2VydmljZSBydW50aW1lCi0JCSAgICAgICAgaWYgKHJmdi5sZW5ndGggIT0gMCkgewotCQkgICAgICAgIAlzdGF0dXMgPSBGYWNldFV0aWxzLmFkZFJlcXVpcmVkRmFjZXRzVG9Qcm9qZWN0KHByb2plY3QsIHJmdiwgbW9uaXRvcik7Ci0JCSAgICAgICAgCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCSAgICAgICAgCXsKLQkJICAgICAgICAJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0JCSAgICAgICAgCQlyZXR1cm4gc3RhdHVzOwotCQkgICAgICAgIAl9ICAgICAgCi0JCSAgICAgICAgfQotCQkgIH0KLQkgIAotCSAgCi0JCSAgaWYoaW5pdGlhbFByb2plY3RfICE9IG51bGwgJiYgRmFjZXRVdGlscy5pc0phdmFQcm9qZWN0KGluaXRpYWxQcm9qZWN0XykpewotCQkJICBKMkVFVXRpbHMuYWRkSmF2YVByb2plY3RBc1V0aWxpdHlKYXIoaW5pdGlhbFByb2plY3RfLCBwcm9qZWN0LCBtb25pdG9yKTsKLQkJCSAgdHJ5ewotCQkgIAkJU3RyaW5nIHVyaSA9IGluaXRpYWxQcm9qZWN0Xy5nZXROYW1lKCkgKyAiLmphciI7Ci0JCSAgCQlKMkVFVXRpbHMuYWRkSkFST3JNb2R1bGVEZXBlbmRlbmN5KHByb2plY3QsIHVyaSk7Ci0JCQkgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpewotCQkJCSAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTU9EVUxFX0RFUEVOREVOQ1ksIG5ldyBTdHJpbmdbXXtwcm9qZWN0LmdldE5hbWUoKSwgaW5pdGlhbFByb2plY3RfLmdldE5hbWUoKX0pOwotCQkJCSAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGVycm9yTWVzc2FnZSk7Ci0JCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQkJICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpewotCQkJCSAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTU9EVUxFX0RFUEVOREVOQ1ksIG5ldyBTdHJpbmdbXXtwcm9qZWN0LmdldE5hbWUoKSwgaW5pdGlhbFByb2plY3RfLmdldE5hbWUoKX0pOwotCQkJCSAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGVycm9yTWVzc2FnZSk7Ci0JCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwkJCQkJCi0JCQkgIH0JCQotCQkgIH0KLQl9Ci0JICByZXR1cm4gc3RhdHVzOwotCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXIgKQotICB7Ci0JICB0eXBlUnVudGltZVNlcnZlcl8gPSB0eXBlUnVudGltZVNlcnZlcjsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUnVudGltZUlkKFN0cmluZyBpZCkKLSAgewotICAgIHNlcnZpY2VSdW50aW1lSWRfID0gaWQ7Ci0gIH0KLQkgIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlSjJFRVZlcnNpb24oIFN0cmluZyBqMmVlTGV2ZWwgKQotICB7Ci0JajJlZUxldmVsXyA9IGoyZWVMZXZlbDsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEoyZWVMZXZlbCgpCi0gIHsKLQkgIHJldHVybiBqMmVlTGV2ZWxfOyAgCi0gIH0KLQkKLSAgcHVibGljIElXZWJTZXJ2aWNlIGdldFdlYlNlcnZpY2UoKQotICB7Ci0JcmV0dXJuIHdlYlNlcnZpY2VfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBJQ29udGV4dCBnZXRDb250ZXh0KCkKLSAgewotICAgIHJldHVybiBjb250ZXh0XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0ICkKLSAgewotICAgIHJlc291cmNlQ29udGV4dF8gPSByZXNvdXJjZUNvbnRleHQ7CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uXzsJICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKCBJU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0gIHsKLQlzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvamVjdF87CSAgCi0gIH0KLQkgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TW9kdWxlKCkKLSAgewotICAgIHJldHVybiBtb2R1bGVfOwkgIAotICB9Ci0JCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLQkgIG1vZHVsZV8gPSBtb2R1bGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZVR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLQkgIG1vZHVsZVR5cGVfID0gdHlwZTsKLSAgfQotCQotICBwdWJsaWMgU3RyaW5nIGdldEVhclByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIGVhclByb2plY3RfOwkgIAotICB9Ci0JCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RWFyKCkKLSAgewotCSAgcmV0dXJuIGVhcl87ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotCSAgZWFyXyA9IGVhcjsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsU2VydmljZShib29sZWFuIGluc3RhbGxTZXJ2aWNlKQotCXsKLQkJaW5zdGFsbF8gPSBpbnN0YWxsU2VydmljZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wU2VydmljZShib29sZWFuIGRldmVsb3BTZXJ2aWNlKSB7Ci0JCWRldmVsb3BfID0gZGV2ZWxvcFNlcnZpY2U7Ci0JfQkKLQkKLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZVNlcnZpY2UoYm9vbGVhbiBhc3NlbWJsZVNlcnZpY2UpIHsKLQkJYXNzZW1ibGVfID0gYXNzZW1ibGVTZXJ2aWNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlcGxveVNlcnZpY2UoYm9vbGVhbiBkZXBsb3lTZXJ2aWNlKSB7Ci0JCWRlcGxveV8gPSBkZXBsb3lTZXJ2aWNlOwotCX0KLSAgCi0JcHVibGljIHZvaWQgc2V0U3RhcnRTZXJ2aWNlKGJvb2xlYW4gc3RhcnRTZXJ2aWNlKQotCXsKLQkJcnVuXyA9IHN0YXJ0U2VydmljZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoYm9vbGVhbiB0ZXN0U2VydmljZSkKLQl7Ci0JCXRlc3RfID0gdGVzdFNlcnZpY2U7Ci0JfQkKLQkKLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFNlcnZpY2UoYm9vbGVhbiBwdWJsaXNoU2VydmljZSkKLSAgewotICAgIHB1Ymxpc2hfID0gcHVibGlzaFNlcnZpY2U7Ci0gIH0KLQkKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIGdlblByb3h5KQotICB7Ci0gICAgY2xpZW50XyA9IGdlblByb3h5OyAgCi0gIH0JCi0JCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxQcm9qZWN0KElQcm9qZWN0IGluaXRpYWxQcm9qZWN0KQotICB7Ci0JICBpbml0aWFsUHJvamVjdF8gPSBpbml0aWFsUHJvamVjdDsgIAotICB9CQotICAgIAotICBwdWJsaWMgSVByb2plY3QgZ2V0SW5pdGlhbFByb2plY3QoKQotICB7Ci0JICByZXR1cm4gaW5pdGlhbFByb2plY3RfOyAgCi0gIH0JCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYWUzNzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwODE1ICAgMTk5NjI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTEzMCAgIDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgUHJlU2VydmljZUluc3RhbGxDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0JcHJpdmF0ZSBJV2ViU2VydmljZSB3ZWJTZXJ2aWNlXzsKLQlwcml2YXRlIFN0cmluZwkJcHJvamVjdF87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgICAgICBtb2R1bGVfOwotCXByaXZhdGUgU3RyaW5nCQllYXJQcm9qZWN0XzsKLSAgICBwcml2YXRlIFN0cmluZyAgICAgIGVhcl87Ci0gICAgcHJpdmF0ZSBJQ29udGV4dCAgICBjb250ZXh0XzsKLQkJCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JICBpZiAoY29udGV4dF8uZ2V0SW5zdGFsbCgpKQotCSAgewotCSAgICAgICAgICAgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7ICAgICAgCi0JCQkgIAkJCQotCQkJCWlmICh3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKT09bnVsbCkKLQkJCQl7Ci0JCQkJCUNyZWF0ZVNlcnZlckNvbW1hbmQgY3JlYXRlU2VydmVyQ29tbWFuZCA9IG5ldyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCk7Ci0JCQkJCWNyZWF0ZVNlcnZlckNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeWlkKHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCkpOwotCQkJCQljcmVhdGVTZXJ2ZXJDb21tYW5kLnNldFNlcnZlclJ1bnRpbWVJZCh3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlclJ1bnRpbWVJZCgpKTsKLQkgICAgICAgICAgICAgICAgY3JlYXRlU2VydmVyQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52aXJvbm1lbnQgKTsKLQkJCQkJSVN0YXR1cyBjcmVhdGVTZXJ2ZXJTdGF0dXMgPSBjcmVhdGVTZXJ2ZXJDb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwpOwotCQkJCQlpZiAoY3JlYXRlU2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5PSykKLQkJCQkJewotCQkJCQkJd2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGNyZWF0ZVNlcnZlckNvbW1hbmQuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkJCQkJCXdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuc2V0U2VydmVyQ3JlYXRlZCh0cnVlKTsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCWlmIChjcmVhdGVTZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCQkJCQkJewotCQkJCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihjcmVhdGVTZXJ2ZXJTdGF0dXMpOwotCQkJCQkJfQkJCQkJCQkJCi0JCQkJCQlyZXR1cm4gY3JlYXRlU2VydmVyU3RhdHVzOwotCQkJCQl9Ci0JCQkJfQotCQkJCSAgCi0JCQkJCi0JCQkJCi0JCQkJQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kKCk7Ci0JCQkJY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkJCQlpZiAoZWFyUHJvamVjdF8gIT0gbnVsbCAmJiBlYXJQcm9qZWN0Xy5sZW5ndGgoKT4wICYmIGVhcl8hPSBudWxsICYmIGVhcl8ubGVuZ3RoKCk+MCkKLQkJCQl7Ci0JCQkJCWNvbW1hbmQuc2V0UHJvamVjdChlYXJQcm9qZWN0Xyk7Ci0JCQkJCWNvbW1hbmQuc2V0TW9kdWxlKGVhcl8pOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQljb21tYW5kLnNldFByb2plY3QocHJvamVjdF8pOwotCQkJCQljb21tYW5kLnNldE1vZHVsZShtb2R1bGVfKTsJCQkJCi0JCQkJfQotCQotCSAgICAgICAgICAgIGNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JCQkJSVN0YXR1cyBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkJCQl7Ci0JCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCX0JCQkKLQkJCSAgcmV0dXJuIHN0YXR1czsKLQkJICB9Ci0JCSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0KLQkgIHB1YmxpYyB2b2lkIHNldFByb2plY3QoIFN0cmluZyBwcm9qZWN0ICkKLQkgIHsKLQkJICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0JICB9Ci0JCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotCSAgewotCQkgIG1vZHVsZV8gPSBtb2R1bGU7Ci0JICB9CQotCQkKLQkgIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3QoIFN0cmluZyBlYXJQcm9qZWN0ICkKLQkgIHsKLQkJICBlYXJQcm9qZWN0XyA9IGVhclByb2plY3Q7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0JICB7Ci0JCSAgZWFyXyA9IGVhcjsgIAotCSAgfQotCQkKLQkgIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UgKQotCSAgewotCQkgIHdlYlNlcnZpY2VfID0gd2ViU2VydmljZTsgIAotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KElDb250ZXh0IGNvbnRleHQpCi0JICB7Ci0JCSAgY29udGV4dF89Y29udGV4dDsKLQkgIH0KLQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlUnVuQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZVJ1bkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc1OGJjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlUnVuQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLlN0YXJ0U2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgUHJlU2VydmljZVJ1bkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQlwcml2YXRlIElXZWJTZXJ2aWNlCQkJCXdlYlNlcnZpY2VfOwotCXByaXZhdGUgSUNvbnRleHQJCQkJY29udGV4dF87Ci0JCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgICAgIGlmIChjb250ZXh0Xy5nZXRSdW4oKSkKLQkJICB7Ci0JICAgICAgICAgICAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJCQkKLQkJCQlTdGFydFNlcnZlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBTdGFydFNlcnZlckNvbW1hbmQoKTsKLQkJCQljb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQod2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCSAgICAgICAgICAgIGNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JCQkJc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JCQkJewotCQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsJCQkgIAotCQkJCX0KLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIHN0YXR1czsJCQkKLQkgIH0KLQkJCi0JICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZSB3ZWJTZXJ2aWNlICkKLQkgIHsKLQkJICB3ZWJTZXJ2aWNlXyA9IHdlYlNlcnZpY2U7ICAKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0Q29udGV4dCAoSUNvbnRleHQgY29udGV4dCkKLQkgIHsKLQkJICBjb250ZXh0XyA9IGNvbnRleHQ7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1NlcnZpY2VSb290RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1NlcnZpY2VSb290RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZlODUzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9TZXJ2aWNlUm9vdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMzMxICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MTIxMgkgIDIwMDE5MyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5QcmVDbGllbnREZXZlbG9wQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EYXRhT2JqZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5Bc3NlbWJsZVNlcnZpY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5EZXBsb3lTZXJ2aWNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuRGV2ZWxvcFNlcnZpY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JbnN0YWxsU2VydmljZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLlJ1blNlcnZpY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VSb290RnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50IAotewotICBwdWJsaWMgU2VydmljZVJvb3RGcmFnbWVudCgpCi0gIHsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kKCksICIiICkgKTsKLSAgICBhZGQoIG5ldyBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVTZXJ2aWNlRGVwbG95Q29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgRGVwbG95U2VydmljZUZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgSW5zdGFsbFNlcnZpY2VGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVTZXJ2aWNlUnVuQ29tbWFuZCgpLCAKLSAgICAJICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uLlByZVNlcnZpY2VSdW5Db21tYW5kIiApICk7Ci0gICAgYWRkKCBuZXcgUnVuU2VydmljZUZyYWdtZW50KCkgKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkpIAotICB7Ci0JCS8vTWFwcGluZ3MgZnJvbSBmcmFtZXdvcmsgdG8gZXh0ZW5zaW9uIGZyYWdtZW50cwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBEZXZlbG9wU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBEZXZlbG9wU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQotCS8vIE1hcCB0aGUgUHJlU2VydmljZURldmVsb3BDb21tYW5kIGludG8gdGhlIGRhdGFPYmplY3QgYW5kIHRoZSBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC4KLQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGF0YU9iamVjdENvbW1hbmQuY2xhc3MsICJEYXRhT2JqZWN0IiwgbnVsbCApOwotCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkRhdGFPYmplY3QiLCBudWxsICk7Ci0JCQotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIERlcGxveVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIERlcGxveVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBJbnN0YWxsU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBJbnN0YWxsU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUnVuU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBSdW5TZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBSdW5TZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQkKLQkJLy9NYXBwaW5ncyBmcm9tIGZyYW1ld29yayB0byBmcmFtZXdvcmsgY29tbWFuZHMKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0JcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIFByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFByb2plY3QiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotCQkKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUHJlU2VydmljZURlcGxveUNvbW1hbmQuY2xhc3MgKTsKLSAgICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBQcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgUHJlU2VydmljZVJ1bkNvbW1hbmQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBQcmVTZXJ2aWNlUnVuQ29tbWFuZC5jbGFzcyApOwotCQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdiOGEwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTE1NjkwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MDQgICAxMzgxMTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wbHVnaW47Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci0KLQotLyoqCi0qIFRoaXMgaXMgdGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBDcmVhdGlvbiBVSSBwbHVnaW4uCi0qIDxwPgotKiBUaGUgV2ViIFNlcnZpY2VzIENyZWF0aW9uIFVJIHBsdWdpbidzIHNvbGUgZnVuY3Rpb24gaXMgdG8gYWRkIAotKiB1c2VyIGludGVyZmFjZSBvZiB0aGUgV2ViIFNlcnZpY2VzIENyZWF0aW9uIFdpemFyZCwgY29udGFpbmVkIGluICAKLSogdGhlIG9yZy5lY2xpcHNlLmpzdC53cy51aSBwbHVnaW4uCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0KLSAgLyoqCi0gICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIjsKLQotICAvKioKLSAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luIGluc3RhbmNlXzsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLSAgKiBUaGUgInBsdWdpbiIgZWxlbWVudCBpbiBwbHVnaW4ueG1sIHNob3VsZCBpbmNsdWRlIHRoZSBhdHRyaWJ1dGUKLSAgKiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luIi4KLSAgKiBAcGFyYW0gZGVzY3JpcHRvciBUaGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luICgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlXyA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAqIChXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbilQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSIpOwotICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luIHNpbmdsZXRvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCByZXNvdXJjZQotICAgKiBhcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLSAgICovCi0gICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IgKCBTdHJpbmcgbmFtZSApCi0gICB7Ci0gCXRyeQotICAgICB7CQotICAgICAJVVJMIGltYWdlVVJMID0gRmlsZUxvY2F0b3IuZmluZChpbnN0YW5jZV8uZ2V0QnVuZGxlKCksIG5ldyBQYXRoKCIkbmwkLyIrbmFtZSksIG51bGwpOwotICAgICAJcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLSAgICAgfQotICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgIHsKLSAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgfQotICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9wcmVmZXJlbmNlcy9TY2VuYXJpb0RlZmF1bHRzUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvcHJlZmVyZW5jZXMvU2NlbmFyaW9EZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZTA5ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9wcmVmZXJlbmNlcy9TY2VuYXJpb0RlZmF1bHRzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTcgICAxMzYzOTEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLQotCi0KLS8qKgotICoKLSAqLwotcHVibGljIGNsYXNzIFNjZW5hcmlvRGVmYXVsdHNQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIAotewotCXByaXZhdGUgU2VydmVyV2l6YXJkV2lkZ2V0IHNlcnZlcldpZGdldF8gPSBudWxsOwotCQotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICAgeyB9CQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2UjY3JlYXRlQ29udGVudHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotCSAqLwotCQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIAotCXsKLQkgIFVJVXRpbHMgdXRpbHMgPSBuZXcgVUlVdGlscyhudWxsKTsKLQkgIAotCSAgQ29tcG9zaXRlIHBhZ2UgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMSApOwotCSAgCi0gICAgICBzZXJ2ZXJXaWRnZXRfID0gbmV3IFNlcnZlcldpemFyZFdpZGdldCggZmFsc2UsIHRydWUgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uYWRkQ29udHJvbHMoIHBhZ2UsIG5ldyBMaXN0ZW5lcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KCBFdmVudCBldnQgKXt9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7ICAgICAgCi0JICBpbml0aWFsaXplVmFsdWVzKCk7Ci0JICBzZXJ2ZXJXaWRnZXRfLmRpc2FibGVOb25QcmVmZXJlbmNlV2lkZ2V0cygpOwotCSAgYXBwbHlEaWFsb2dGb250KHBhZ2UpOwotCSAgcmV0dXJuIHBhZ2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotCXsKLQkgIFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotCi0gICAgICAvLyBTZXQgdmFsdWVzIGZyb20gY29udGV4dC4KLQkgIFR5cGVSdW50aW1lU2VydmVyIHNlcnZlcklkcyA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwotCSAgVHlwZVJ1bnRpbWVTZXJ2ZXIgY2xpZW50SWRzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JCQotCSAgc2VydmVySWRzLnNldFR5cGVJZCggY29udGV4dC5nZXRXZWJTZXJ2aWNlVHlwZSgpICk7Ci0JICBjbGllbnRJZHMuc2V0VHlwZUlkKCBjb250ZXh0LmdldENsaWVudFdlYlNlcnZpY2VUeXBlKCkgKTsKLQkJCi0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlciggc2VydmVySWRzICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCBjbGllbnRJZHMgKTsKLSAgICAgIC8vanZoIHNlcnZlcldpZGdldF8uc2V0R2VuZXJhdGVQcm94eSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRHZW5lcmF0ZVByb3h5KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFB1Ymxpc2hTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlcigpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRJbnN0YWxsU2VydmljZSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRJbnN0YWxsV2ViU2VydmljZSgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRJbnN0YWxsQ2xpZW50KCBuZXcgQm9vbGVhbihjb250ZXh0LmdldEluc3RhbGxDbGllbnQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0U3RhcnRTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldFN0YXJ0V2ViU2VydmljZSgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRUZXN0U2VydmljZSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRUZXN0V2ViU2VydmljZSgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRUZXN0Q2xpZW50KCBuZXcgQm9vbGVhbihjb250ZXh0LmdldFRlc3RXZWJTZXJ2aWNlKCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldE1vbml0b3JTZXJ2aWNlKG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0TW9uaXRvcldlYlNlcnZpY2UoKSkpOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRTZXJ2aWNlR2VuZXJhdGlvbihjb250ZXh0LmdldEdlbmVyYXRlV2ViU2VydmljZSgpKTsgIC8vanZoICAgICAgCi0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldENsaWVudEdlbmVyYXRpb24oY29udGV4dC5nZXRHZW5lcmF0ZUNsaWVudCgpKTsgIC8vanZoCi0gICAgICBzZXJ2ZXJXaWRnZXRfLmludGVybmFsaXplKCk7Ci0JfQotCQotICAgIC8qKgotCSAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JKi8KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotCXsKLQkgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotCSAgc2V0VG9EZWZhdWx0cygpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VG9EZWZhdWx0cygpCi0JewotCSAgU2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0KLSAgICAgIC8vIFNldCB2YWx1ZXMgZnJvbSBjb250ZXh0LgotCSAgVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmVySWRzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JICBUeXBlUnVudGltZVNlcnZlciBjbGllbnRJZHMgPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkJCi0JICBzZXJ2ZXJJZHMuc2V0VHlwZUlkKCBjb250ZXh0LmdldFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpICk7Ci0JICBjbGllbnRJZHMuc2V0VHlwZUlkKCBjb250ZXh0LmdldENsaWVudFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpICk7Ci0JCQotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoIHNlcnZlcklkcyApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRDbGllbnRUeXBlUnVudGltZVNlcnZlciggY2xpZW50SWRzICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFB1Ymxpc2hTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlckRlZmF1bHQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0SW5zdGFsbFNlcnZpY2UoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0SW5zdGFsbFdlYlNlcnZpY2VEZWZhdWx0KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldEluc3RhbGxDbGllbnQoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0SW5zdGFsbENsaWVudERlZmF1bHQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0U3RhcnRTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldFN0YXJ0V2ViU2VydmljZURlZmF1bHQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0VGVzdFNlcnZpY2UoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0VGVzdFdlYlNlcnZpY2VEZWZhdWx0KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFRlc3RDbGllbnQoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0VGVzdFdlYlNlcnZpY2VEZWZhdWx0KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldE1vbml0b3JTZXJ2aWNlKG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCkpKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0U2VydmljZUdlbmVyYXRpb24oY29udGV4dC5nZXRHZW5lcmF0ZVdlYlNlcnZpY2VEZWZhdWx0KCkpOyAvL2p2aAotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRDbGllbnRHZW5lcmF0aW9uKGNvbnRleHQuZ2V0R2VuZXJhdGVDbGllbnREZWZhdWx0KCkpOyAvL2p2aAotICAgICAgc2VydmVyV2lkZ2V0Xy5pbnRlcm5hbGl6ZSgpOwotCX0KLQotCS8qKgotCSAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpCi0JewotCSAgc3RvcmVWYWx1ZXMoKTsKLQkgIHJldHVybiB0cnVlOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0JewotCSAgU2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0JICAKLQkgIFR5cGVSdW50aW1lU2VydmVyIHNlcnZlcklkcyA9IHNlcnZlcldpZGdldF8uZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCk7Ci0JICBUeXBlUnVudGltZVNlcnZlciBjbGllbnRJZHMgPSBzZXJ2ZXJXaWRnZXRfLmdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JICAKLSAgICAgIGNvbnRleHQuc2V0V2ViU2VydmljZVR5cGUoIHNlcnZlcklkcy5nZXRUeXBlSWQoKSApOwotICAgICAgY29udGV4dC5zZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSggY2xpZW50SWRzLmdldFR5cGVJZCgpICk7Ci0gICAgICBjb250ZXh0LnNldEdlbmVyYXRlUHJveHkoIHNlcnZlcldpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgICBjb250ZXh0LnNldExhdW5jaFdlYlNlcnZpY2VFeHBsb3Jlciggc2VydmVyV2lkZ2V0Xy5nZXRQdWJsaXNoU2VydmljZSgpLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgICBjb250ZXh0LnNldEluc3RhbGxXZWJTZXJ2aWNlKCBzZXJ2ZXJXaWRnZXRfLmdldEluc3RhbGxTZXJ2aWNlKCkuYm9vbGVhblZhbHVlKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0SW5zdGFsbENsaWVudCggc2VydmVyV2lkZ2V0Xy5nZXRJbnN0YWxsQ2xpZW50KCkuYm9vbGVhblZhbHVlKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0U3RhcnRXZWJTZXJ2aWNlKCBzZXJ2ZXJXaWRnZXRfLmdldFN0YXJ0U2VydmljZSgpLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgICBjb250ZXh0LnNldFRlc3RXZWJTZXJ2aWNlKCBzZXJ2ZXJXaWRnZXRfLmdldFRlc3RTZXJ2aWNlKCkuYm9vbGVhblZhbHVlKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0TW9uaXRvcldlYlNlcnZpY2Uoc2VydmVyV2lkZ2V0Xy5nZXRNb25pdG9yU2VydmljZSgpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIGNvbnRleHQuc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKHNlcnZlcldpZGdldF8uZ2V0U2VydmljZUdlbmVyYXRpb24oKSk7ICAgICAgCi0gICAgICBjb250ZXh0LnNldEdlbmVyYXRlQ2xpZW50KHNlcnZlcldpZGdldF8uZ2V0Q2xpZW50R2VuZXJhdGlvbigpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkKLQl7Ci0JICBwZXJmb3JtT2soKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldENvbnRyaWJ1dG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjOTZjMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXRDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5zZXJ2ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5zZXJ2ZXIuU3RhcnRTZXJ2ZXJXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotCi1wdWJsaWMgY2xhc3MgU3RhcnRTZXJ2ZXJXaWRnZXRDb250cmlidXRvciBpbXBsZW1lbnRzIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIAotewotICBwcml2YXRlIElTZXJ2ZXIgICAgICBzZXJ2ZXJfOwotCSAgCi0gIHB1YmxpYyBTdGFydFNlcnZlcldpZGdldENvbnRyaWJ1dG9yKCBJU2VydmVyIHNlcnZlciApCi0gIHsKLQlzZXJ2ZXJfID0gc2VydmVyOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgCi0gIHsKLQlyZXR1cm4gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19TVEFSVF9TRVJWRVI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSAKLSAgewotCXJldHVybiAiIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSAKLSAgewotCXJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19TVEFSVF9TRVJWRVI7Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpIAotICB7Ci0JcmV0dXJuIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCSAgICAgICB7Ci0JCQkgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpIAotCQkJIHsKLQkJCQlyZXR1cm4gbmV3IFN0YXJ0U2VydmVyV2lkZ2V0KCBzZXJ2ZXJfICk7Ci0gCQkJIH0KLQkgICAgICAgfTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg3MTdiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzAzMjggICAxNzMzNDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgUGVlayBuZXh0IHBhZ2UgcHJvYmxlbQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnNlcnZlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uUHJlU2VydmljZURldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBTdGFydFNlcnZlcldpZGdldEZhY3RvcnkgaW1wbGVtZW50cyBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgCi17Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2Ugd2Vic2VydmljZV87Ci0gIHByaXZhdGUgSUNvbnRleHQgY29udGV4dF87Ci0gIAotICBwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0Rmlyc3ROYW1lZFdpZGdldCgpIAotICB7Ci0gICAgSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotICAgIAotICAgIGlmKCB3ZWJzZXJ2aWNlXyAhPSBudWxsICYmIGNvbnRleHRfLmdldFJ1bigpKQotICAgIHsKLSAgICAgIFN0cmluZyBpbnN0YW5jZUlkID0gd2Vic2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0gICAgICAKLSAgICAgIGlmKCBpbnN0YW5jZUlkICE9IG51bGwgJiYgaW5zdGFuY2VJZC5sZW5ndGgoKSA+IDAgKQotICAgICAgewotICAgICAgICBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoIGluc3RhbmNlSWQgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYoIHNlcnZlciAhPSBudWxsICYmIHNlcnZlci5nZXRTZXJ2ZXJTdGF0ZSgpICE9IElTZXJ2ZXIuU1RBVEVfU1RBUlRFRCApCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdGFydFNlcnZlcldpZGdldENvbnRyaWJ1dG9yKCBzZXJ2ZXIgKTsKLSAgICB9Ci0gICAgCi0JcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0TmV4dE5hbWVkV2lkZ2V0KCBJTmFtZWRXaWRnZXRDb250cmlidXRvciB3aWRnZXRDb250cmlidXRvcikgCi0gIHsKLQlyZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLSAgewotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgU3RhcnRTZXJ2ZXJXaWRnZXRGYWN0b3J5LmNsYXNzICk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBTdGFydFNlcnZlcldpZGdldEZhY3RvcnkuY2xhc3MgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2Ugd2Vic2VydmljZSApCi0gIHsKLSAgICB3ZWJzZXJ2aWNlXyA9IHdlYnNlcnZpY2U7ICAKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0ICggSUNvbnRleHQgY29udGV4dCApCi0gIHsKLSAgICBjb250ZXh0XyA9IGNvbnRleHQ7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWE2MTJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2ODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA3ICAgMTM1NDE1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MDcgICAxMzU0NDMgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTAgICAxMzU0NDIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDEwICAgMTM1NDQxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDEwICAgMTM1NTYyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDExICAgMTM2MTY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQxNyAgIDEzNjM5MC8xMzYzOTEvMTM2MTU5IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDEzICAgMTM1NTgxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzYxNTggcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMCAgIDEzNjcwNSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM2MTgyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyMCAgIDEzNzgyMCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM1OTEyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDIxICAgMTM2NzYxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjQgICAxMzgwNTIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDI1ICAgMTM3ODMxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjYgICAxMzg1MTkgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjcgICAxMzgwNTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MDQgICAxMzgwMzUgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MjQgICAxNDIyNzYgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjA1ICAgMTQ1MDgxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNjA3ICAgMTQ0ODI2IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNjA3ICAgMTQ0MDQ5IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNjE0ICAgMTQ2MjcwIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNjE2ICAgMTQ3MzE3IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNzE3ICAgMTUwNTc3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA2MDcyNiAgIDE1MDg2NSBzZW5ncGxAY2EuaWJtLmNvbSAtICBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDgwMyAgIDE1MjQ4NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVHlwaW5nIFdTREwgaW4gU2VydmljZSBkZWZpbml0aW9uIGZpZWxkIGlzIHZlcnkgc2xvdwotICogMjAwNjA4MTcgICAxNDAwMTcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGxvbmdlciBwcm9qZWN0IG9yIHNlcnZlci9ydW50aW1lIHN0cmluZ3MgZG8gbm90IHJlc2l6ZSB3aXphcmQKLSAqIDIwMDYwODI1ICAgMTM1NTcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIFVSTCBub3QgZGlzcGxheWVkIHByb3Blcmx5IG9uIGZpcnN0IHBhZ2UKLSAqIDIwMDYwODI5ICAgMTU1NDQxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3ZWIgc2VydmljZSB3aXphcmQgaGFuZ3MgZHVyaW5nIHJlc2l6ZQotICogMjAwNjA4MzAgICAxNTUxMTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgVXBkYXRlZCBwYXRjaCBmb3IgdGhpcyBkZWZlY3QuCi0gKiAyMDA2MDgzMSAgIDE1NTQ0MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgU21hbGwgdHdlYWsgZm9yIHRoaXMgYnVnCi0gKiAyMDA2MTAwMyAgIDE1OTE0MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEyMTIgICAxNjQxNzcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEluY29ycmVjdCB2YWxpZGF0aW9uIGVycm9yIGNvbXBsYWluaW5nIGFib3V0IHJ1bnRpbWUgbm90IHN1cHBvcnRpbmcgYSBwcm9qZWN0IHR5cGUKLSAqIDIwMDYxMjEyICAgMTU5OTExIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBjaGFuZ2luZyBzZXJ2aWNlIGRlZmluaXRpb24gcmVzZXRzIHNvbWUgY29uZmlndXJhdGlvbiBmaWVsZHMKLSAqIDIwMDcwMjA1ICAgMTcyNjg3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBOUEUgaW4gU2NlbmNhcmlvIERlZmF1bHRzIHByZWZlcmVuY2VzIHBhZ2UKLSAqIDIwMDcxMTMwICAgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDIwNSAgIDE3MDE0MSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAyMTUgICAyMTYzMzcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAzMDEgICAyMjEwMzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwMzEyICAgMTQ3NDQyIHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nIEhhCi0gKiAyMDA4MDMxOCAgIDIxMzMzMCB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZywgTm9uLWNvbnZlbnRpb25hbCBKYXZhIG5hbWluZyBwcmV2ZW50cyBjcmVhdGluZyBXZWIgU2VydmljZXMgKGNsaWVudCkKLSAqIDIwMDgwMzI2ICAgMTk4NDM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDQwMiAgIDE5ODQzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRGVmYXVsdGluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uVmFsaWRhdGlvblV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSVBhY2thYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlByb2plY3RTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LklPYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LlRpbWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuUHJvamVjdFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLlJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMucnVudGltZS5TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuTGFiZWxzQW5kSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVDb250cm9sRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2NhbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuSHlwZXJsaW5rR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuSHlwZXJsaW5rU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkh5cGVybGlua0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5JSHlwZXJsaW5rTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5IeXBlcmxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlBhZ2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJXaXphcmRXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgaW1wbGVtZW50cyBSdW5uYWJsZSwgSVBhY2thYmxlIHsKLQkKLQkvL0lORk9QT1BTCi0gICAgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAwMSBmb3IgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fUEFHRSA9ICJXU1dTQ0VOMDAwMSI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMTAgZm9yIHRoZSBXZWIgU2VydmljZSBUeXBlIGNvbWJvIGJveCBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fQ09NQk9fU0VSVklDRVRZUEUgPSAiV1NXU0NFTjAwMTAiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDE0IGZvciB0aGUgbW9uaXRvciBzZXJ2aWNlIGNoZWNrYm94IG9mIHRoZSBTY2VuYXJpbyBwYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9NT05JVE9SX1NFUlZJQ0UgPSAiV1NXU0NFTjAwMTQiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDEyIGZvciB0aGUgTGF1bmNoIFVEREkgY2hlY2sgYm94IG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9MQVVOQ0hfV1MgPSAiV1NXU0NFTjAwMTIiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDIwIGZvciB0aGUgU2VydmljZSBJbXBsZW1lbmF0aW9uIHRleHQgZmllbGQgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX1RFWFRfU0VSVklDRV9JTVBMID0gIldTV1NDRU4wMDIwIjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyMSBmb3IgdGhlU2VydmljZSBTbGlkZXIgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX1NDQUxFX1NFUlZJQ0UgPSAiV1NXU0NFTjAwMjEiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDIyIGZvciB0aGUgU2VydmVyIGh5cGVybGluayBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1NFUlZFUiA9ICJXU1dTQ0VOMDAyMiI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMjMgZm9yIHRoZSBSdW50aW1lIGh5cGVybGluayBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1JVTlRJTUUgPSAiV1NXU0NFTjAwMjMiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDI0IGZvciB0aGVQcm9qZWN0cyBoeXBlcmxpbmsgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19QUk9KRUNUUyAgPSAiV1NXU0NFTjAwMjQiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDMwIGZvciB0aGUgT3ZlcndyaXRlIEZpbGVzIGNoZWNrYm94IG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9PVkVSV1JJVEUgPSAiV1NXU0NFTjAwMzAiOwotCSAKLQlwcml2YXRlIFNjYWxlU2VsZWN0aW9uTGlzdGVuZXIgc2NhbGVTZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBTY2FsZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0JcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcl87Ci0JcHJpdmF0ZSBNb2RpZnlMaXN0ZW5lciBvYmplY3RNb2RpZnlMaXN0ZW5lcl8gOwotCXByaXZhdGUgaW50IHZhbGlkYXRpb25TdGF0ZV87Ci0JYm9vbGVhbiB2YWxpZE9iamVjdFNlbGVjdGlvbl8gPSB0cnVlOwotCi0JcHJpdmF0ZSBJbWFnZVJlZ2lzdHJ5IGltYWdlUmVnXzsKLQkKLQlwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIGlkc187Ci0JcHJpdmF0ZSBMYWJlbHNBbmRJZHMgbGFiZWxJZHNfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZV87Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZUVhclByb2plY3ROYW1lXzsKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlQ29tcG9uZW50VHlwZV87Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXJfOwotCXByaXZhdGUgYm9vbGVhbiBuZWVkRWFyXzsKLQkJIAotCXByaXZhdGUgYm9vbGVhbiBkZXZlbG9wU2VydmljZV87Ci0JcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlU2VydmljZV87Ci0JcHJpdmF0ZSBib29sZWFuIGRlcGxveVNlcnZpY2VfOwotCQotCXByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uXzsKLQlwcml2YXRlIEJvb2xlYW4gdGVzdFNlcnZpY2VfOwotCXByaXZhdGUgQm9vbGVhbiBzdGFydFNlcnZpY2VfOwotCXByaXZhdGUgQm9vbGVhbiBpbnN0YWxsU2VydmljZV87Ci0KLQlwcml2YXRlIGJvb2xlYW4gZGlzcGxheVByZWZlcmVuY2VzXzsKLQlwcml2YXRlIGJvb2xlYW4gcHJlZmVyZW5jZXNQYWdlXzsKLQotCXByaXZhdGUgQ29tcG9zaXRlIGdyb3VwQ29tcG9zaXRlXzsKLQlwcml2YXRlIENvbXBvc2l0ZSBoQ29tcFNlcnZpY2VfOwkKLQlwcml2YXRlIFdlYlNlcnZpY2VDbGllbnRUeXBlV2lkZ2V0IGNsaWVudFdpZGdldF87Ci0gICAgcHJpdmF0ZSBMYWJlbCBzZXJ2aWNlTGFiZWxfOwotCXByaXZhdGUgQ29tYm8gd2Vic2VydmljZVR5cGVfOwotCXByaXZhdGUgVGV4dCBzZXJ2aWNlSW1wbF87Ci0JcHJpdmF0ZSBTY2FsZSBzZXJ2aWNlU2NhbGVfOwotCXByaXZhdGUgTGFiZWwgdG9wb2xvZ3lTcG90XzsKLQlwcml2YXRlIEJ1dHRvbiBicm93c2VCdXR0b25fOwotCXByaXZhdGUgQnV0dG9uIHB1Ymxpc2hCdXR0b25fOwotCXByaXZhdGUgQnV0dG9uIG1vbml0b3JCdXR0b25fOwotCXByaXZhdGUgQnV0dG9uIG92ZXJ3cml0ZUJ1dHRvbl87CQotCXByaXZhdGUgU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cgYnJvd3NlRGlhbG9nXzsKLQlwcml2YXRlIFByb2plY3RTZWxlY3Rpb25EaWFsb2cgcHJvamVjdERpYWxvZ187Ci0JcHJpdmF0ZSBIeXBlcmxpbmsgaExpbmtTZXJ2aWNlUnVudGltZV87Ci0JcHJpdmF0ZSBIeXBlcmxpbmsgaExpbmtTZXJ2aWNlU2VydmVyXzsKLQlwcml2YXRlIEh5cGVybGluayBoTGlua1NlcnZpY2VQcm9qZWN0XzsKLQlwcml2YXRlIEh5cGVybGluayBoTGlua1NlcnZpY2VFQVJfOwotCQkKLQlwcml2YXRlIE9iamVjdCBvYmplY3RTZWxlY3Rpb25XaWRnZXRfOyAvL21heSBiZSBJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSBvciBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci0JCi0JcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0XzsKLQkKLQlwcml2YXRlIFRpbWVyIHRpbWVyXyA9IG51bGw7Ci0JCQotCXByaXZhdGUgVUlVdGlscyB1dGlsc18gPSBuZXcgVUlVdGlscygib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIik7Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGZvcmNlUmVmcmVzaFJ1bnRpbWUgPSBmYWxzZTsKLQkKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfMD0iaWNvbnMvc2VydmljZV90ZXN0LmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfMT0iaWNvbnMvc2VydmljZV9ydW4uanBnIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfMj0iaWNvbnMvc2VydmljZV9pbnN0YWxsLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfMz0iaWNvbnMvc2VydmljZV9kZXBsb3kuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIEdSQVBISUNfU0VSVklDRV80PSJpY29ucy9zZXJ2aWNlX2Fzc2VtYmxlLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfNT0iaWNvbnMvc2VydmljZV9kZXZlbG9wLmpwZyI7IC8vJE5PTi1OTFMtTiQKLQkJCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18wPSJpY29ucy9zY2FsZTBfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18xPSJpY29ucy9zY2FsZTFfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18yPSJpY29ucy9zY2FsZTJfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18zPSJpY29ucy9zY2FsZTNfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR180PSJpY29ucy9zY2FsZTRfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR181PSJpY29ucy9zY2FsZTVfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR182PSJpY29ucy9zY2FsZTZfYmdyb3VuZC5qcGciOyAvLyROT04tTkxTLU4kCi0KLQlwcml2YXRlIFN0cmluZyBTRVJWSUNFX1JVTlRJTUVfUFJFRklYID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1JVTlRJTUVTX0xJU1QgOyAKLSAgICBwcml2YXRlIFN0cmluZyBTRVJWSUNFX1NFUlZFUl9QUkVGSVggPSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVDsKLSAgICBwcml2YXRlIFN0cmluZyBTRVJWSUNFX1BST0pFQ1RfUFJFRklYID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZJQ0VfUFJPSkVDVDsKLSAgICBwcml2YXRlIFN0cmluZyBTRVJWSUNFX0VBUl9QUkVGSVggPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVklDRV9FQVJfUFJPSkVDVDsKLSAgICAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0gZGlzcGxheVByZWZlcmVuY2VzIFNldCB0byB0cnVlIGlmIHByZWZlcmVuY2VzIHN1Y2ggYXMgb3ZlcndyaXRlIHNob3VsZCBiZSBkaXNwbGF5ZWQgb24gdGhlIHdpemFyZCBwYWdlCi0gICAgICogQHBhcmFtIHByZWZQYWdlICBTZXQgdG8gdHJ1ZSBpZiB0aGUgd2lkZ2V0IGlzIGJlaW5nIHVzZWQgb24gdGhlIHByZWZlcmVuY2VzIHBhZ2UuICBBbHRlcnMgd2lkZ2V0IGxheW91dC4KLSAgICAgKi8KLQlwdWJsaWMgU2VydmVyV2l6YXJkV2lkZ2V0KGJvb2xlYW4gZGlzcGxheVByZWZlcmVuY2VzLCBib29sZWFuIHByZWZQYWdlKSB7Ci0JCWRpc3BsYXlQcmVmZXJlbmNlc18gPSBkaXNwbGF5UHJlZmVyZW5jZXM7Ci0JCXByZWZlcmVuY2VzUGFnZV8gPSBwcmVmUGFnZTsKLQkJaW5pdEltYWdlUmVnaXN0cnkoKTsKLQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEw7Ci0JfQotCQotCXByaXZhdGUgQ29tcG9zaXRlIHNlcnZpY2VDb21wb3NpdGVfOwotCQotCS8qKgotCSAqIFJ1biB0aGlzIFNlcnZlcldpemFyZFdpZGdldCwgd2hpY2ggdmFsaWRhdGVzIHRoZSBlbnRyeSBmaWVsZCB2YWx1ZXMuCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQkKLQkJLy8gZG8gbWluaW1hbCBjaGVjayBoZXJlLCB0aGlzIGNhbGwgd2lsbCBkZXRlcm1pbmUgaWYgd2UgYXQgbGVhc3QKLQkJLy8gaGF2ZSBhICJ2YWxpZE9iamVjdFNlbGVjdGlvbl8iCi0JCWNoZWNrU2VydmljZUltcGxUZXh0U3RhdHVzKCk7Ci0JCQotCQlpZiAodmFsaWRPYmplY3RTZWxlY3Rpb25fKQotCQl7Ci0JCQlib29sZWFuIHJlZnJlc2hSdW50aW1lID0gKGdldFdlYlNlcnZpY2VTY2VuYXJpbygpICE9IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKTsgCi0JCQkKLQkJCWlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRfIGluc3RhbmNlb2YgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpCi0JCSAgICAgICB7Ci0JCQkJSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgbGF1bmNoYWJsZSA9IChJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSlvYmplY3RTZWxlY3Rpb25XaWRnZXRfOwotCQkJCWNhbGxPYmplY3RUcmFuc2Zvcm1hdGlvbihsYXVuY2hhYmxlLmdldE9iamVjdFNlbGVjdGlvbigpLCBsYXVuY2hhYmxlLmdldFByb2plY3QoKSwgbGF1bmNoYWJsZS5nZXRDb21wb25lbnROYW1lKCksIHJlZnJlc2hSdW50aW1lKTsJCQkJCQkJCQotCQkgICAgICAgfQotCQkJZWxzZSAKLQkJCXsKLQkJCQlJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IHdpZGdldCA9IChJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KW9iamVjdFNlbGVjdGlvbldpZGdldF87Ci0JCQkJY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKHdpZGdldC5nZXRPYmplY3RTZWxlY3Rpb24oKSwgd2lkZ2V0LmdldFByb2plY3QoKSwgd2lkZ2V0LmdldENvbXBvbmVudE5hbWUoKSwgcmVmcmVzaFJ1bnRpbWUpOwotCQkgICAgfQkKLQkJfQotCQllbHNlCi0JCQlzZXRPYmplY3RTZWxlY3Rpb24obnVsbCk7Ci0JCQotCQkvLyBkbyBmdWxsIHZhbGlkYXRpb24gYWZ0ZXIgYWxsIHRyYW5zZm9ybWF0aW9ucyBhbmQgY2FsY3VsYXRpb25zIGhhdmUgb2NjdXJyZWQKLQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEw7Ci0JCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsJCQotCX0KLQkKLQkvKioKLQkgKiBQYWNrIHRoaXMgd2lkZ2V0IGFuZCB0aGUgY2xpZW50LXNpZGUgd2lkZ2V0IGFzIHdlbGwuIAotCSAqLwotCXByaXZhdGUgdm9pZCBwYWNrU2VsZigpIHsKLQkJLy8gZG9uJ3QgbmVlZCB0byBjYWxsIHBhY2tJdCgpLCBzaW5jZSBjbGllbnRXaWRnZXRfIGhhcyBhIGNhbGxiYWNrIHRvIHBhY2tJdCgpIGFscmVhZHkuCi0JCWNsaWVudFdpZGdldF8ucGFja0l0KCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLklQYWNrYWJsZSNwYWNrSXQoKQotCSAqLwotCXB1YmxpYyB2b2lkIHBhY2tJdCgpIHsJCQotCQlncm91cENvbXBvc2l0ZV8ucGFjayh0cnVlKTsKLQkJdXRpbHNfLmhvcml6b250YWxSZXNpemUoZ3JvdXBDb21wb3NpdGVfLmdldFNoZWxsKCksIGdyb3VwQ29tcG9zaXRlXywgVUlVdGlscy5ERUZBVUxUX1BBRERJTkcpOwotCX0KLQkKLQlwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LAotCQkJTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpIHsKLQkJCQkKLQkJc3RhdHVzTGlzdGVuZXJfID0gc3RhdHVzTGlzdGVuZXI7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKHBhcmVudCwgSU5GT1BPUF9XU1dTQ0VOX1BBR0UpOwotCQkKLQkJQ29tcG9zaXRlIHR5cGVDb21wb3NpdGUgPSB1dGlsc18uY3JlYXRlQ29tcG9zaXRlKHBhcmVudCwgMyk7Ci0KLQkJd2Vic2VydmljZVR5cGVfID0gdXRpbHNfLmNyZWF0ZUNvbWJvKHR5cGVDb21wb3NpdGUsCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dFQlNFUlZJQ0VUWVBFLAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ09NQk9fVFlQRSwKLQkJCQlJTkZPUE9QX1dTV1NDRU5fQ09NQk9fU0VSVklDRVRZUEUsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSCi0JCQkJCQl8IFNXVC5SRUFEX09OTFkpOwotCQlHcmlkRGF0YSBnZGF0YTEgPSAoR3JpZERhdGEpIHdlYnNlcnZpY2VUeXBlXy5nZXRMYXlvdXREYXRhKCk7Ci0JCWdkYXRhMS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXdlYnNlcnZpY2VUeXBlXy5zZXRMYXlvdXREYXRhKGdkYXRhMSk7Ci0JCQotCQl3ZWJzZXJ2aWNlVHlwZV8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkge30KLQkJCQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCVN0cmluZyBvbGRUeXBlSWQgPSBpZHNfLmdldFR5cGVJZCgpOwotCQkJCWludCBjdXJyZW50U2VsZWN0aW9uSWR4ID0gd2Vic2VydmljZVR5cGVfLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0JCQkJU3RyaW5nIGN1cnJlbnRUeXBlSWQgPSBsYWJlbElkc18uZ2V0SWRzXygpW2N1cnJlbnRTZWxlY3Rpb25JZHhdOwotCQkJCWlmICghb2xkVHlwZUlkLmVxdWFscyhjdXJyZW50VHlwZUlkKSkgewkJCQkJCi0JCQkJCWlkc18uc2V0VHlwZUlkKGN1cnJlbnRUeXBlSWQpOwotCQkJCQkKLQkJCQkJLy8gZG9uJ3QgbmVlZCB0byByZWZyZXNoIHJ1bnRpbWUgb3IgdmFsaWRhdGUgZmllbGRzIGlmIHdlIGFyZSBvbiB0aGUgcHJlZmVyZW5jZSBwYWdlLCBqdXN0IHJldHVybgotCQkJCQlpZiAocHJlZmVyZW5jZXNQYWdlXykKLQkJCQkJCXJldHVybjsKLQkJCQkJCQotCQkJCQlpbnQgb2xkU2NlbmFyaW8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQob2xkVHlwZUlkKTsKLQkJCQkJaW50IGN1cnJlbnRTY2VuYXJpbyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZChjdXJyZW50VHlwZUlkKTsKLQotCQkJICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9IGdldFNlbGVjdGlvbldpZGdldCgpOwotCQkJCQkvLyBjaGFuZ2UgdGhlIGxhYmVsIGZvciB0aGUgc2VydmljZQotCQkJCQkvLyBpbXBsZW1lbnRhdGlvbi9kZWZpbml0aW9uIGJhc2VkIG9uIHRoZSB3ZWIgc2VydmljZSB0eXBlCi0JCQkJCWhhbmRsZVR5cGVDaGFuZ2UoKTsJCQkJCQotCi0JCQkJCS8vIEFmdGVyIGJ1ZyAxNTk5MTEsIHdlIHdpbGwgbm90IHJlZnJlc2ggdGhlIHJ1bnRpbWUgaW4gVE9QRE9XTiBzY2VuYXJpbyB1bmxlc3Mgd2UgYWJzb2x1dGVseQotCQkJCQkvLyBoYXZlIHRvLiAgVGhlcmVmb3JlLCBpZiB3ZSBhcmUgc3dpdGNoaW5nIGZyb20gYW5vdGhlciBzY2VuYXJpbyB0eXBlLCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIAotCQkJCQkvLyBjdXJyZW50IHNlbGVjdGlvbnMgYXJlIHZhbGlkIGZvciB0aGlzIFRPUERPV04gc2NlbmFyaW8sIGlmIG5vdCwgdHJ5IHRvIHBpY2sgYSBtb3JlIHN1aXRhYmxlIAotCQkJCQkvLyBydW50aW1lLgotCQkJCQlpZiAoY3VycmVudFNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKSB7Ci0JCQkJCQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVM7Ci0JCQkJCQkKLQkJCQkJCS8vIHRoaXMgd2lsbCBmb3JjZSBhIHJlZnJlc2ggdGhlIG5leHQgdGltZSB0aGUgd3NkbCBpcyBjaGFuZ2VkCi0JCQkJCQlmb3JjZVJlZnJlc2hSdW50aW1lID0gIWNoZWNrRXJyb3JTdGF0dXMoKS5pc09LKCk7Ci0JCQkJCX0KLQkJCQkJCi0JCQkJCS8vaWYgdGhlIHdlYiBzZXJ2aWNlIHR5cGUgY2hhbmdlIGlzIGZyb20gb25lIHRvcC1kb3duIHR5cGUgdG8gYW5vdGhlcgotCQkJCQkvL3RvcC1kb3duIHR5cGUgbGVhdmUgdGhlIG9iamVjdCBzZWxlY3Rpb24gZmllbGQgaW4gdGFjdCBhbmQgcmVmcmVzaAotCQkJCQkvL3RoZSBzZXJ2ZXIvcnVudGltZSBwcm9qZWN0IGRlZmF1bHRpbmcuCi0JCQkJCS8vT3RoZXJ3aXNlIGNsZWFyIHRoZSBvYmplY3Qgc2VsZWN0aW9uIGZpZWxkIHNpbmNlIGl0J3MgdmFsdWUgaXMgbm90IHZhbGlkIGFueW1vcmUKLQkJCQkJaWYgKG9sZFNjZW5hcmlvPT1XZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTiAmJiBjdXJyZW50U2NlbmFyaW89PVdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQkJCQkJCQotCQkJCQl7Ci0JCQkJCQkvLyBpZiBzd2l0Y2hpbmcgZnJvbSBvbmUgVE9QRE9XTiBzY2VuYXJpbyB0byBhbm90aGVyIFRPUERPV04gc2NlbmFyaW8gYW5kCi0JCQkJCQkvLyB3ZSd2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIGN1cnJlbnQgcnVudGltZSBzZWxlY3Rpb24gaXMgbm90IHN1aXRhYmxlLCB3ZSAKLQkJCQkJCS8vIGNhbiByZWZyZXNoIHRoZSBydW50aW1lIG5vdyAoZG9uJ3QgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCB0aW1lIHRoZQotCQkJCQkJLy8gd3NkbCBpcyBjaGFuZ2VkKS4KLQkJCQkJCWlmIChmb3JjZVJlZnJlc2hSdW50aW1lKSB7Ci0JCQkJCQkJcmVmcmVzaFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsKLQkJCQkJCQlmb3JjZVJlZnJlc2hSdW50aW1lID0gZmFsc2U7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCQkvL2NsZWFyIHRoZSBvYmplY3Qgc2VsZWN0aW9uIGZpZWxkCi0JCQkJCQkvLyBzZXJ2aWNlSW1wbCBtYXkgYmUgbnVsbCBpZiBvbiB0aGUgcHJlZmVyZW5jZXMgcGFnZQotCQkJCQkJaWYgKHNlcnZpY2VJbXBsXyAhPSBudWxsKQotCQkJCQkJewotCQkJCQkJCXNlcnZpY2VJbXBsXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJCQkJCXNlcnZpY2VJbXBsXy5zZXRUZXh0KCIiKTsKLQkJCQkJCQlzZXRPYmplY3RTZWxlY3Rpb24obnVsbCk7Ci0JCQkJCQkJc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkJCQl9CQkJCQkJICAgCi0JCQkJCX0JCQkJCQotCQkJICAgdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEw7Ci0JCQkgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7CQkJICAgCi0JCQkJCQotCQkJfQotCQkgIH0KLQkJCQotCQl9KTsKLQkJCi0JCS8vIENyZWF0ZSB0ZXh0IGZpZWxkIGFuZCBicm93c2UgZm9yIG9iamVjdCBzZWxlY3Rpb24gaWYgbm90IG9uIHByZWZlcmVuY2VzIHBhZ2UKLQkJaWYgKCFwcmVmZXJlbmNlc1BhZ2VfKQotCQl7Ci0JCQkvL3RleHQgb2YgdGhpcyBsYWJlbCBpcyBiYXNlZCBvbiB0aGUgd2ViIHNlcnZpY2UgdHlwZSBzZWxlY3RlZCBpbiB3ZWJzZXJ2aWNlVHlwZV8gY29tYm8KLQkJCXNlcnZpY2VMYWJlbF8gPSBuZXcgTGFiZWwoIHR5cGVDb21wb3NpdGUsIFNXVC5XUkFQKTsKLQkJCXNlcnZpY2VMYWJlbF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV0VCU0VSVklDRUlNUEwpOwotCQkJc2VydmljZUxhYmVsXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1RFWFRfSU1QTCk7Ci0KLQkJCXNlcnZpY2VJbXBsXyA9IG5ldyBUZXh0KHR5cGVDb21wb3NpdGUsIFNXVC5MRUZUIHwgU1dULkJPUkRFUiApOwotCQkJR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsJCSAgICAKLQkJCXNlcnZpY2VJbXBsXy5zZXRMYXlvdXREYXRhKCBncmlkZGF0YSApOwotCQkJc2VydmljZUltcGxfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fVEVYVF9JTVBMKTsKLQkJCXV0aWxzXy5jcmVhdGVJbmZvUG9wKHNlcnZpY2VJbXBsXywgSU5GT1BPUF9XU1dTQ0VOX1RFWFRfU0VSVklDRV9JTVBMKTsKLQkJCQotCQkJb2JqZWN0TW9kaWZ5TGlzdGVuZXJfID0gbmV3IE1vZGlmeUxpc3RlbmVyKCl7Ci0JCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkJICAgIGlmIChzZXJ2aWNlSW1wbF8uZ2V0VGV4dCgpLmluZGV4T2YoJzonKSA+IDApIHsKLQkJCQkgICAgICAgIHRpbWVyXyA9IFRpbWVyLm5ld0luc3RhbmNlKHRpbWVyXywgRGlzcGxheS5nZXRDdXJyZW50KCksIFNlcnZlcldpemFyZFdpZGdldC50aGlzKTsKLQkJCQkgICAgICAgIHRpbWVyXy5zdGFydFRpbWVyKCk7Ci0JCQkJICAgIH0KLQkJCQkgICAgZWxzZQotCQkJCSAgICAgICAgcnVuKCk7Ci0JCQkJfQotCQkJfTsKLQkJCQotCQkJc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0KLQkJCWJyb3dzZUJ1dHRvbl8gPSB1dGlsc18uY3JlYXRlUHVzaEJ1dHRvbih0eXBlQ29tcG9zaXRlLAotCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0JST1dTRSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9CVVRUT05fQlJPV1NFX0lNUEwsIG51bGwpOwotCi0JCQlJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0JCQlicm93c2VEaWFsb2dfID0gbmV3IFNlcnZpY2VJbXBsU2VsZWN0aW9uRGlhbG9nKHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpLCAKLQkJCQkJbmV3IFBhZ2VJbmZvKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5ESUFMT0dfVElUSUxFX1NFUlZJQ0VfSU1QTF9TRUxFQ1RJT04sICIiLCAKLQkJCQkJCQluZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLQkJCQkJewkKLQkJCQkJCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkJCQkJewkgIAkJCQkJCSAKLQkJCQkJCQlyZXR1cm4gbmV3IE9iamVjdFNlbGVjdGlvbldpZGdldCgpOwotCQkJCQkJfQotCQkJCQl9KSk7CQkKLQkJCWJyb3dzZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlcnZpY2VJbXBsQnJvd3NlTGlzdGVuZXIoKSk7Ci0JCX0KLQkJLy8gU2VydmljZSBMaWZlY3ljbGUgc2VjdGlvbiAtIHNjYWxlcyBmb3Igc2VydmljZSAmIGNsaWVudCwgZ3JhcGhpYwotCQkKLQkJZ3JvdXBDb21wb3NpdGVfID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBnY2xheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWdjbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQlnY2xheW91dC5ob3Jpem9udGFsU3BhY2luZz0wOwkJCi0JCWdjbGF5b3V0Lm1hcmdpbkhlaWdodD0wOwkJCi0JCWdjbGF5b3V0Lm1hcmdpbkJvdHRvbT01OwotCQlncm91cENvbXBvc2l0ZV8uc2V0TGF5b3V0KCBnY2xheW91dCApOwotCSAgICBHcmlkRGF0YSBnY0dyaWREYXRhID0gbmV3IEdyaWREYXRhKFNXVC5CRUdJTk5JTkcsIFNXVC5CRUdJTk5JTkcsIHRydWUsIHRydWUpOwotCSAgICBncm91cENvbXBvc2l0ZV8uc2V0TGF5b3V0RGF0YShnY0dyaWREYXRhKTsJCQotCSAgICAKLQkgICAgZ3JvdXBDb21wb3NpdGVfLmFkZENvbnRyb2xMaXN0ZW5lcihuZXcgQ29udHJvbExpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgY29udHJvbE1vdmVkKENvbnRyb2xFdmVudCBlKSB7Ci0JCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCQotCQkJfQotCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGUpIHsKLQkJCQlncm91cENvbXBvc2l0ZV8ucGFjayh0cnVlKTsJCQkJCi0JCQl9Ci0JCX0pOwotCSAgICAKLQkJc2VydmljZUNvbXBvc2l0ZV8gPSAgbmV3IENvbXBvc2l0ZShncm91cENvbXBvc2l0ZV8sIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBncmlkbGF5b3V0ICAgPSBuZXcgR3JpZExheW91dCgpOwotCSAgICBncmlkbGF5b3V0Lm51bUNvbHVtbnMgICA9IDI7Ci0JICAgIGdyaWRsYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmc9MDsKLQkgICAgZ3JpZGxheW91dC5tYXJnaW5IZWlnaHQ9MDsKLQkgICAgc2VydmljZUNvbXBvc2l0ZV8uc2V0TGF5b3V0KCBncmlkbGF5b3V0ICk7Ci0JICAgIEdyaWREYXRhIHNjR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLQkgICAgc2VydmljZUNvbXBvc2l0ZV8uc2V0TGF5b3V0RGF0YShzY0dyaWREYXRhKTsgICAgCi0JICAgIAotCQlzZXJ2aWNlQ29tcG9zaXRlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1NFUlZJQ0UpOwotCQotCQkKLQkJc2VydmljZVNjYWxlXyA9IG5ldyBTY2FsZShzZXJ2aWNlQ29tcG9zaXRlXywgU1dULlZFUlRJQ0FMIHwgU1dULkJPUkRFUik7Ci0JICAgIHV0aWxzXy5jcmVhdGVJbmZvUG9wKHNlcnZpY2VTY2FsZV8sIElORk9QT1BfV1NXU0NFTl9TQ0FMRV9TRVJWSUNFKTsKLQkJc2VydmljZVNjYWxlXy5zZXRNaW5pbXVtKDApOwotCQlzZXJ2aWNlU2NhbGVfLnNldE1heGltdW0oNik7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0SW5jcmVtZW50KDEpOwotCQlzZXJ2aWNlU2NhbGVfLnNldFBhZ2VJbmNyZW1lbnQoMSk7Ci0JCXNlcnZpY2VTY2FsZV8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoc2NhbGVTZWxlY3Rpb25MaXN0ZW5lcik7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0U2VsZWN0aW9uKGdldFNlcnZpY2VHZW5lcmF0aW9uKCkpOwotCQlzZXJ2aWNlU2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRSk7Ci0JCQotCQlBY2Nlc3NpYmxlIGFjY2Vzc2libGVTY2FsZSA9IHNlcnZpY2VTY2FsZV8uZ2V0QWNjZXNzaWJsZSgpOwotCQlhY2Nlc3NpYmxlU2NhbGUuYWRkQWNjZXNzaWJsZUxpc3RlbmVyKG5ldyBBY2Nlc3NpYmxlQWRhcHRlcigpewotCQkJLy8JcmV0dXJuIGEgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHdoYXQgdG8gZG8gd2l0aCB0aGUgc2xpZGVyCi0JCQkvLyAgdGhpcyBpcyByZWFkIGJ5IHRoZSBzY3JlZW4gcmVhZGVyIHdoZW4gdGhlIHNsaWRlciBmaXJzdCBnZXRzIGZvY3VzCi0JCQlwdWJsaWMgdm9pZCBnZXROYW1lKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1NFUlZJQ0U7CQkJCi0JCQl9CQkJCi0JCX0pOwotCQlhY2Nlc3NpYmxlU2NhbGUuYWRkQWNjZXNzaWJsZUNvbnRyb2xMaXN0ZW5lcihuZXcgQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyKCl7Ci0JCQkvLyByZXR1cm4gYSBtZWFuaW5nZnVsIHN0cmluZyB3aGVuIHRoZSBzY3JlZW4gcmVhZGVyCi0JCQkvLyBhdHRlbXB0cyB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHNlcnZpY2Ugc2NhbGUKLQkJCXB1YmxpYyB2b2lkIGdldFZhbHVlKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJCWludCBzZWxlY3Rpb24gPSBzZXJ2aWNlU2NhbGVfLmdldFNlbGVjdGlvbigpOwotCQkJCXN3aXRjaCAoc2VsZWN0aW9uKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfVEVTVDsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxOgotCQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfUlVOOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDI6Ci0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9JTlNUQUxMOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDM6Ci0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9ERVBMT1k7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNDoKLQkJCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0FTU0VNQkxFOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDU6CQkJCQkKLQkJCQljYXNlIDY6Ci0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9ERVZFTE9QOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCQl9CQkJCQkJCQkKLQkJCX0KLQkJfSk7CQotCQkKLQkJR3JpZERhdGEgbGF5b3V0RGF0YTEgPSBuZXcgR3JpZERhdGEoKTsKLQkJbGF5b3V0RGF0YTEuaG9yaXpvbnRhbEFsaWdubWVudD1TV1QuQ0VOVEVSOwotCQlsYXlvdXREYXRhMS52ZXJ0aWNhbEFsaWdubWVudCA9IFNXVC5CRUdJTk5JTkc7Ci0JCVJlY3RhbmdsZSBzY2FsZVIgPSAoaW1hZ2VSZWdfLmdldChJQ09OX1NDQUxFX0JHXzApKS5nZXRCb3VuZHMoKTsKLQkJbGF5b3V0RGF0YTEuaGVpZ2h0SGludD1zY2FsZVIuaGVpZ2h0OwotCQlsYXlvdXREYXRhMS53aWR0aEhpbnQ9c2NhbGVSLndpZHRoKzE7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0TGF5b3V0RGF0YShsYXlvdXREYXRhMSk7CQkKLQkJCi0JCXRvcG9sb2d5U3BvdF8gPSBuZXcgTGFiZWwoc2VydmljZUNvbXBvc2l0ZV8sIFNXVC5CT1JERVIgfCBTV1QuVE9QICk7Ci0JCXRvcG9sb2d5U3BvdF8uc2V0QmFja2dyb3VuZChEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfV0hJVEUpKTsKLQkJdG9wb2xvZ3lTcG90Xy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1NFUlZJQ0UpOwotCQkKLQkJR3JpZERhdGEgbGF5b3V0RGF0YTIgPSBuZXcgR3JpZERhdGEoKTsJCQotCQlsYXlvdXREYXRhMi5ob3Jpem9udGFsQWxpZ25tZW50PVNXVC5CRUdJTk5JTkc7CQkJCQotCQlsYXlvdXREYXRhMi52ZXJ0aWNhbEFsaWdubWVudCA9IFNXVC5CRUdJTk5JTkc7Ci0JCVJlY3RhbmdsZSB0b3BSID0gKGltYWdlUmVnXy5nZXQoR1JBUEhJQ19TRVJWSUNFXzApKS5nZXRCb3VuZHMoKTsKLQkJbGF5b3V0RGF0YTIuaGVpZ2h0SGludD10b3BSLmhlaWdodDsKLQkJbGF5b3V0RGF0YTIud2lkdGhIaW50PXRvcFIud2lkdGg7Ci0JCXRvcG9sb2d5U3BvdF8uc2V0TGF5b3V0RGF0YShsYXlvdXREYXRhMik7CQkKLQkJCQkKLQkJc2V0R3JhcGhpY3MoZ2V0U2VydmljZUdlbmVyYXRpb24oKSk7Ci0JCQotCQloQ29tcFNlcnZpY2VfID0gdXRpbHNfLmNyZWF0ZUNvbXBvc2l0ZShncm91cENvbXBvc2l0ZV8sIDEpOwotCQkKLQkJTGFiZWwgc2VydmljZURldGFpbHNMYWJlbCA9IG5ldyBMYWJlbChoQ29tcFNlcnZpY2VfLCBTV1QuTk9ORSk7Ci0JCXNlcnZpY2VEZXRhaWxzTGFiZWwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU1VNTUFSWSk7Ci0JCQotCQloTGlua1NlcnZpY2VTZXJ2ZXJfPSBuZXcgSHlwZXJsaW5rKGhDb21wU2VydmljZV8sIFNXVC5OVUxMKTsKLQkJdXRpbHNfLmNyZWF0ZUluZm9Qb3AoaExpbmtTZXJ2aWNlU2VydmVyXywgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19TRVJWRVIpOwotCQloTGlua1NlcnZpY2VTZXJ2ZXJfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfVEVYVF9TRVJWRVIpOwotCQloTGlua1NlcnZpY2VTZXJ2ZXJfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7CQkJCQotCQkJCWxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2coZmFsc2UsIHRydWUpOwkJCQkKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIGxpbmtFbnRlcmVkKEh5cGVybGlua0V2ZW50IGUpe30KLQkJCXB1YmxpYyB2b2lkIGxpbmtFeGl0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQkJCQotCQl9KTsKLQotCQloTGlua1NlcnZpY2VSdW50aW1lXyA9IG5ldyBIeXBlcmxpbmsoaENvbXBTZXJ2aWNlXywgU1dULk5VTEwpOwotCQl1dGlsc18uY3JlYXRlSW5mb1BvcChoTGlua1NlcnZpY2VSdW50aW1lXywgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19SVU5USU1FKTsKLQkJaExpbmtTZXJ2aWNlUnVudGltZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19URVhUX1JVTlRJTUUpOwotCQloTGlua1NlcnZpY2VSdW50aW1lXy5hZGRIeXBlcmxpbmtMaXN0ZW5lcihuZXcgSUh5cGVybGlua0xpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCBsaW5rQWN0aXZhdGVkKEh5cGVybGlua0V2ZW50IGUpewotCQkJCQkJCQlsYXVuY2hSdW50aW1lU2VsZWN0aW9uRGlhbG9nKGZhbHNlKTsKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIGxpbmtFbnRlcmVkKEh5cGVybGlua0V2ZW50IGUpe30KLQkJCXB1YmxpYyB2b2lkIGxpbmtFeGl0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQkJCQotCQl9KTsKLQkJCi0JCUlXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLQkJcHJvamVjdERpYWxvZ18gPSBuZXcgUHJvamVjdFNlbGVjdGlvbkRpYWxvZyh3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSwgCi0JCQkJbmV3IFBhZ2VJbmZvKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5ESUFMT0dfVElUSUxFX1NFUlZJQ0VfUFJPSkVDVF9TRVRUSU5HUywgIiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gIAkJCQkJCXsJCi0gIAkJCQkJCQlwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgCQkJCQkJCXsJICAJCQkJCQkgCi0gIAkJCQkJCQkgICByZXR1cm4gbmV3IFByb2plY3RTZWxlY3Rpb25XaWRnZXQoKTsKLSAgCQkJCQkJCX0KLSAgCQkJCQkJfSkpOwotCQkKLQkJaExpbmtTZXJ2aWNlUHJvamVjdF89IG5ldyBIeXBlcmxpbmsoaENvbXBTZXJ2aWNlXywgU1dULk5VTEwpOwotCQl1dGlsc18uY3JlYXRlSW5mb1BvcChoTGlua1NlcnZpY2VSdW50aW1lXywgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19QUk9KRUNUUyk7Ci0JCWhMaW5rU2VydmljZVByb2plY3RfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0VSVklDRVBST0pFQ1RfTElOSyk7Ci0JCWhMaW5rU2VydmljZVByb2plY3RfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7Ci0JCQkJbGF1bmNoUHJvamVjdERpYWxvZygpOwkJCQkKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIGxpbmtFbnRlcmVkKEh5cGVybGlua0V2ZW50IGUpe30KLQkJCXB1YmxpYyB2b2lkIGxpbmtFeGl0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQkJCQotCQl9KTsKLQkJCi0JCWhMaW5rU2VydmljZUVBUl89IG5ldyBIeXBlcmxpbmsoaENvbXBTZXJ2aWNlXywgU1dULk5VTEwpOwotCQl1dGlsc18uY3JlYXRlSW5mb1BvcChoTGlua1NlcnZpY2VSdW50aW1lXywgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19QUk9KRUNUUyk7Ci0JCWhMaW5rU2VydmljZUVBUl8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TRVJWSUNFUFJPSkVDVF9MSU5LKTsKLQkJaExpbmtTZXJ2aWNlRUFSXy5hZGRIeXBlcmxpbmtMaXN0ZW5lcihuZXcgSUh5cGVybGlua0xpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCBsaW5rQWN0aXZhdGVkKEh5cGVybGlua0V2ZW50IGUpewotCQkJCWxhdW5jaFByb2plY3REaWFsb2coKTsJCQkKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIGxpbmtFbnRlcmVkKEh5cGVybGlua0V2ZW50IGUpe30KLQkJCXB1YmxpYyB2b2lkIGxpbmtFeGl0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQkJCQotCQl9KTsJCQotCi0JCWhMaW5rU2VydmljZVNlcnZlcl8uc2V0VGV4dChTRVJWSUNFX1NFUlZFUl9QUkVGSVgpOyAKLQkJaExpbmtTZXJ2aWNlUnVudGltZV8uc2V0VGV4dChTRVJWSUNFX1JVTlRJTUVfUFJFRklYKTsKLQkJaExpbmtTZXJ2aWNlUHJvamVjdF8uc2V0VGV4dChTRVJWSUNFX1BST0pFQ1RfUFJFRklYKTsKLQkJaExpbmtTZXJ2aWNlRUFSXy5zZXRUZXh0KFNFUlZJQ0VfRUFSX1BSRUZJWCk7Ci0JCQotCQlIeXBlcmxpbmtHcm91cCBzZXJ2ZXJSdW50aW1lR3JvdXAgPSBuZXcgSHlwZXJsaW5rR3JvdXAoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkKLQkJc2VydmVyUnVudGltZUdyb3VwLmFkZChoTGlua1NlcnZpY2VTZXJ2ZXJfKTsKLQkJc2VydmVyUnVudGltZUdyb3VwLmFkZChoTGlua1NlcnZpY2VSdW50aW1lXyk7Ci0JCXNlcnZlclJ1bnRpbWVHcm91cC5hZGQoaExpbmtTZXJ2aWNlUHJvamVjdF8pOwotCQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rU2VydmljZUVBUl8pOwotCQlzZXJ2ZXJSdW50aW1lR3JvdXAuc2V0SHlwZXJsaW5rVW5kZXJsaW5lTW9kZShIeXBlcmxpbmtTZXR0aW5ncy5VTkRFUkxJTkVfQUxXQVlTKTsKLSAgICAKLQkJdXRpbHNfLmNyZWF0ZUhvcml6b250YWxTZXBhcmF0b3IocGFyZW50LCAxKTsJCQotCQkKLQkJLy8gQWRkIGNsaWVudCB3aWRnZXRzLi4uCi0JCWNsaWVudFdpZGdldF8gPSBuZXcgV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQoZmFsc2UpOwotCSAgICBjbGllbnRXaWRnZXRfLmFkZENvbnRyb2xzKHBhcmVudCwgc3RhdHVzTGlzdGVuZXIgKTsKLQkgICAgY2xpZW50V2lkZ2V0Xy5zZXRQYWNrYWJsZSh0aGlzKTsKLQkgICAgY2xpZW50V2lkZ2V0Xy5lbmFibGVDbGllbnRTbGlkZXIoc2VydmljZVNjYWxlXy5nZXRTZWxlY3Rpb24oKTw9U2NlbmFyaW9Db250ZXh0LldTX1NUQVJUKTsKLQkJCi0JCS8vIEFkdmFuY2VkIGJ1dHRvbnMgc2VjdGlvbgotCQl1dGlsc18uY3JlYXRlSG9yaXpvbnRhbFNlcGFyYXRvcihwYXJlbnQsIDMpOwotCQkKLQkJQ29tcG9zaXRlIGFkdmFuY2VkQnV0dG9uUGFuZWwgPSB1dGlsc18uY3JlYXRlQ29tcG9zaXRlKHBhcmVudCwgMSk7Ci0JCQotCQlwdWJsaXNoQnV0dG9uXyA9IHV0aWxzXy5jcmVhdGVDaGVja2JveChhZHZhbmNlZEJ1dHRvblBhbmVsLAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fV1NXU0NFTl9QVUJMSVNILCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1BSX0NIRUNLQk9YX0xBVU5DSF9XUywgSU5GT1BPUF9XU1dTQ0VOX0NIRUNLQk9YX0xBVU5DSF9XUyk7CQkKLQkJbW9uaXRvckJ1dHRvbl8gPSB1dGlsc18uY3JlYXRlQ2hlY2tib3goYWR2YW5jZWRCdXR0b25QYW5lbCwKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0hFQ0tCT1hfTU9OSVRPUl9XRUJTRVJWSUNFLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1BSX0NIRUNLQk9YX01PTklUT1JfU0VSVklDRSwgSU5GT1BPUF9XU1dTQ0VOX0NIRUNLQk9YX01PTklUT1JfU0VSVklDRSk7Ci0KLQkJaWYgKGRpc3BsYXlQcmVmZXJlbmNlc18gJiYgZ2V0UmVzb3VyY2VDb250ZXh0KCkuaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSkgewotCQkJdXRpbHNfLmNyZWF0ZUhvcml6b250YWxTZXBhcmF0b3IocGFyZW50LCAxKTsJCQkKLQkJCUNvbXBvc2l0ZSBwcmVmQnV0dG9uUGFuZWwgPSB1dGlsc18uY3JlYXRlQ29tcG9zaXRlKHBhcmVudCwgMSk7Ci0JCQlvdmVyd3JpdGVCdXR0b25fID0gdXRpbHNfLmNyZWF0ZUNoZWNrYm94KHByZWZCdXR0b25QYW5lbCwKLQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkNIRUNLQk9YX09WRVJXUklURV9GSUxFUywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9CVVRUT05fT1ZFUldSSVRFX0ZJTEVTLCBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfT1ZFUldSSVRFKTsKLQkJCW92ZXJ3cml0ZUJ1dHRvbl8uc2V0U2VsZWN0aW9uKGdldFJlc291cmNlQ29udGV4dCgpCi0JCQkJCS5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKTsKLQkJfQotCi0JCXJldHVybiB0aGlzOwotCX0JCi0JCi0JcHJpdmF0ZSB2b2lkIGxhdW5jaFByb2plY3REaWFsb2coKQotCXsKLQkJU3RyaW5nIGN1cnJlbnRQcm9qZWN0TmFtZSA9IGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpOwotCQlTdHJpbmcgY3VycmVudEVhclByb2plY3ROYW1lID0gZ2V0U2VydmljZUVhclByb2plY3ROYW1lKCk7Ci0JCVN0cmluZyBjdXJyZW50UHJvamVjdFR5cGUgPSBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpOwotCQlib29sZWFuIGN1cnJlbnROZWVkRWFyID0gZ2V0U2VydmljZU5lZWRFQVIoKTsKLQkJCi0JCXByb2plY3REaWFsb2dfLnNldFByb2plY3ROYW1lKGN1cnJlbnRQcm9qZWN0TmFtZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldEVhclByb2plY3ROYW1lKGN1cnJlbnRFYXJQcm9qZWN0TmFtZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldFByb2plY3RDb21wb25lbnRUeXBlKGN1cnJlbnRQcm9qZWN0VHlwZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldE5lZWRFQVIoY3VycmVudE5lZWRFYXIpOwotCQkKLQkJaW50IHN0YXR1cyA9IHByb2plY3REaWFsb2dfLm9wZW4oKTsKLQkJaWYgKHN0YXR1cyA9PSBXaW5kb3cuT0spCi0JCXsKLQkJCVN0cmluZyBuZXdQcm9qZWN0TmFtZSA9IHByb2plY3REaWFsb2dfLmdldFByb2plY3ROYW1lKCk7Ci0JCQlTdHJpbmcgbmV3RWFyUHJvamVjdE5hbWUgPSBwcm9qZWN0RGlhbG9nXy5nZXRFYXJQcm9qZWN0TmFtZSgpOwotCQkJU3RyaW5nIG5ld1Byb2plY3RUeXBlID0gcHJvamVjdERpYWxvZ18uZ2V0UHJvamVjdENvbXBvbmVudFR5cGUoKTsKLQkJCWJvb2xlYW4gbmV3TmVlZEVhciA9IHByb2plY3REaWFsb2dfLmdldE5lZWRFQVIoKTsJCi0JCQkKLQkJCS8vVXBkYXRlIHByb2plY3Qgc2V0dGluZ3MgYW5kIHZhbGlkYXRlIHBhZ2UgaWYgc2VsZWN0aW9ucyBjaGFuZ2VkLgotCQkJaWYgKCFuZXdQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudFByb2plY3ROYW1lKQotCQkJCQl8fCAhbmV3RWFyUHJvamVjdE5hbWUuZXF1YWxzKGN1cnJlbnRFYXJQcm9qZWN0TmFtZSkKLQkJCQkJfHwgIW5ld1Byb2plY3RUeXBlLmVxdWFscyhjdXJyZW50UHJvamVjdFR5cGUpCi0JCQkJCXx8IG5ld05lZWRFYXIgIT0gY3VycmVudE5lZWRFYXIpIHsKLQkJCQlzZXRTZXJ2aWNlUHJvamVjdE5hbWUobmV3UHJvamVjdE5hbWUpOwotCQkJCXNldFNlcnZpY2VFYXJQcm9qZWN0TmFtZShuZXdFYXJQcm9qZWN0TmFtZSk7Ci0JCQkJc2V0U2VydmljZUNvbXBvbmVudFR5cGUobmV3UHJvamVjdFR5cGUpOwotCQkJCXNldFNlcnZpY2VOZWVkRUFSKG5ld05lZWRFYXIpOwkJCQkKLQkJCQl2YWxpZGF0aW9uU3RhdGVfID0gKG5ldyBWYWxpZGF0aW9uVXRpbHMoKSkuZ2V0TmV3VmFsaWRhdGlvblN0YXRlKHZhbGlkYXRpb25TdGF0ZV8sIFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9QUk9KRUNUX0NIQU5HRVMpOwotCQkJCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsKLQkJCX0KLQkJCQotCQkJLypjaGVjayB0byBzZWUgaWYgdGV4dCBoYXMgY2hhbmdlZCBmb3IgcHJvamVjdCBhbmQgRUFSCi0JCQlpZiBzbywgcmVwYWludCBsaW5rcyAqLwotCQkJaWYgKCFuZXdQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudFByb2plY3ROYW1lKSkKLQkJCXsKLQkJCQloTGlua1NlcnZpY2VQcm9qZWN0Xy5wYWNrKHRydWUpOwotCQkJCXBhY2tTZWxmKCk7CSAKLQkJCX0KLQkJCWlmICghbmV3RWFyUHJvamVjdE5hbWUuZXF1YWxzKGN1cnJlbnRFYXJQcm9qZWN0TmFtZSkpCi0JCQl7Ci0JCQkJaExpbmtTZXJ2aWNlRUFSXy5wYWNrKHRydWUpOwotCQkJCXBhY2tTZWxmKCk7CSAgCQkJCQkKLQkJCX0KLQkJfQotCX0KLQkJCi0JcHJpdmF0ZSB2b2lkIGxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2coYm9vbGVhbiBjbGllbnRDb250ZXh0KQotCXsKLQkJbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhjbGllbnRDb250ZXh0LCBmYWxzZSk7Ci0JfQotCQkKLQlwcml2YXRlIHZvaWQgbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhib29sZWFuIGNsaWVudENvbnRleHQsIGJvb2xlYW4gc2VsZWN0U2VydmVyRmlyc3QpIAkKLQl7CQotCQlieXRlIG1vZGUgPSBjbGllbnRDb250ZXh0ID8gKGJ5dGUpMSA6IChieXRlKTA7Ci0JCQotCQkvL1RPRE86IGp2aCAtIGludmVzdGlnYXRlIC0gZG9uJ3QgdGhpbmsgajJlZSB2ZXJzaW9uIHNob3VsZG4ndCBiZSBoYXJkIGNvZGVkIChsYXN0IHBhcm0pIAotCQkvLyAgcXVlc3Rpb24gLSB3aGVyZSB0byBwaWNrIGl0IHVwIGZyb20/Ci0JCS8vUmVtZW1iZXIgdGhlIGN1cnJlbnQgdmFsdWVzCi0JCVR5cGVSdW50aW1lU2VydmVyIGN1cnJlbnRTZXJ2aWNlVFJTID0gZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCk7Ci0JCUlXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLQkJUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZyByc3NkID0gbmV3IFJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2coCi0JCQkJd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIG1vZGUsIGN1cnJlbnRTZXJ2aWNlVFJTLCAiMTQiKTsJCi0JCXJzc2Quc2V0U2VsZWN0U2VydmVyRmlyc3Qoc2VsZWN0U2VydmVyRmlyc3QpOwkJCi0JCWludCByZXN1bHQgPSByc3NkLm9wZW4oKTsJCQotCQlpZiAocmVzdWx0ID09IFdpbmRvdy5PSykKLQkJewotCQkJVHlwZVJ1bnRpbWVTZXJ2ZXIgbmV3U2VydmljZVRSUyA9IHJzc2QuZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkJCWlmICghY3VycmVudFNlcnZpY2VUUlMuZXF1YWxzKG5ld1NlcnZpY2VUUlMpKQotCQkJewotCQkJCXNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihuZXdTZXJ2aWNlVFJTKTsJCi0JCQkJcmVmcmVzaENsaWVudFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsJCi0JCQkJdmFsaWRhdGlvblN0YXRlXyA9IChuZXcgVmFsaWRhdGlvblV0aWxzKCkpLmdldE5ld1ZhbGlkYXRpb25TdGF0ZSh2YWxpZGF0aW9uU3RhdGVfLCBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUyk7Ci0JCQkJY2xpZW50V2lkZ2V0Xy5zZXRWYWxpZGF0aW9uU3RhdGUoVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMpOwotCQkJCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsgLy9SZXZhbGlkYXRlIHRoZSBwYWdlIHNpbmNlIHNlcnZlci9ydW50aW1lIHNlbGVjdGlvbnMgY2hhbmdlZC4KLQkJCX0KLQkJCQotCQl9CQkKLQl9CQotCQotCXB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIGlkcykgewotCQljbGllbnRXaWRnZXRfLnNldFR5cGVSdW50aW1lU2VydmVyKCBpZHMgKTsKLQl9Ci0KLQlwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKSB7Ci0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudChCb29sZWFuIGluc3RhbGwpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRJbnN0YWxsQ2xpZW50KCBpbnN0YWxsICk7Ci0JfQotCi0JcHVibGljIEJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRJbnN0YWxsQ2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFN0YXJ0Q2xpZW50KEJvb2xlYW4gc3RhcnRDbGllbnQpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRTdGFydENsaWVudCggc3RhcnRDbGllbnQgKTsKLQl9Ci0KLQlwdWJsaWMgQm9vbGVhbiBnZXRTdGFydENsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRTdGFydENsaWVudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRUZXN0Q2xpZW50KEJvb2xlYW4gdGVzdENsaWVudCkgewotCQljbGllbnRXaWRnZXRfLnNldFRlc3RDbGllbnQoIHRlc3RDbGllbnQgKTsKLQl9Ci0KLQlwdWJsaWMgQm9vbGVhbiBnZXRUZXN0Q2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldFRlc3RDbGllbnQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RGV2ZWxvcENsaWVudChib29sZWFuIGRldmVsb3ApIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXREZXZlbG9wQ2xpZW50KCBkZXZlbG9wICk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcENsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXREZXZlbG9wQ2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEFzc2VtYmxlQ2xpZW50KGJvb2xlYW4gYXNzZW1ibGUpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRBc3NlbWJsZUNsaWVudCggYXNzZW1ibGUgKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZUNsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRBc3NlbWJsZUNsaWVudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3kpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXREZXBsb3lDbGllbnQoIGRlcGxveSApOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldERlcGxveUNsaWVudCgpIHsJCQotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXREZXBsb3lDbGllbnQoKTsKLQl9Ci0KLXByaXZhdGUgdm9pZCBoYW5kbGVUeXBlQ2hhbmdlKCkKLQl7Ci0JCWlmICghcHJlZmVyZW5jZXNQYWdlXykgewotCQkgICBpbnQgc2NlbmFyaW8gPSBnZXRXZWJTZXJ2aWNlU2NlbmFyaW8oKTsKLQkJICAgCi0JCSAgIGlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApCi0JCSAgIHsKLQkJCSAgc2VydmljZUxhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XRUJTRVJWSUNFSU1QTCk7Ci0JCSAgIH0KLQkJICAgZWxzZSBpZiAoc2NlbmFyaW8gPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0JCSAgIHsKLQkJCSAgIHNlcnZpY2VMYWJlbF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfV0VCU0VSVklDRURFRik7Ci0JCSAgIH0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciBpZHMpIHsKLQkJTGFiZWxzQW5kSWRzIGxhYmVsSWRzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIKLQkJCQkuZ2V0U2VydmljZVR5cGVMYWJlbHMoKTsKLQkJLy8gcnNrcmVnCi0JCWludCBzZWxlY3Rpb24gPSAwOwotCQlTdHJpbmdbXSBzZXJ2aWNlSWRzID0gbGFiZWxJZHMuZ2V0SWRzXygpOwotCQlTdHJpbmcgc2VsZWN0ZWRJZCA9IGlkcy5nZXRUeXBlSWQoKTsKLQotCQl3ZWJzZXJ2aWNlVHlwZV8uc2V0SXRlbXMobGFiZWxJZHMuZ2V0TGFiZWxzXygpKTsKLQotCQkvLyBOb3cgZmluZCB0aGUgc2VsZWN0ZWQgb25lLgotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2VydmljZUlkcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCWlmIChzZWxlY3RlZElkLmVxdWFscyhzZXJ2aWNlSWRzW2luZGV4XSkpIHsKLQkJCQlzZWxlY3Rpb24gPSBpbmRleDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3ZWJzZXJ2aWNlVHlwZV8uc2VsZWN0KHNlbGVjdGlvbik7Ci0JCQotCQlpZHNfID0gaWRzOwotCQkKLQkJaWYgKGlkc18gIT0gbnVsbCkKLQkJewotCQkJU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUZXh0ID0gIiI7Ci0JCQlTdHJpbmcgc2VydmVySWQgPSBpZHNfLmdldFNlcnZlcklkKCk7Ci0JCQlpZiAoc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKT4wKQotCQkJewotCQkJICBzZXJ2aWNlU2VydmVyVGV4dCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCk7Ci0JCQl9Ci0JCQlTdHJpbmcgc2VydmljZVJ1bnRpbWVUZXh0ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChpZHNfLmdldFJ1bnRpbWVJZCgpKTsKLQkJCQotCQkJU3RyaW5nIGN1cnJlbnRTZXJ2ZXJUZXh0ID0gaExpbmtTZXJ2aWNlU2VydmVyXy5nZXRUZXh0KCk7Ci0JCQlTdHJpbmcgY3VycmVudFJ1bnRpbWVUZXh0ID0gaExpbmtTZXJ2aWNlUnVudGltZV8uZ2V0VGV4dCgpOwotCQkJU3RyaW5nIG5ld1NlcnZlclRleHQgPSBTRVJWSUNFX1NFUlZFUl9QUkVGSVggKyAiICIgKyBzZXJ2aWNlU2VydmVyVGV4dDsKLQkJCVN0cmluZyBuZXdSdW50aW1lVGV4dCA9IFNFUlZJQ0VfUlVOVElNRV9QUkVGSVggKyAiICIgKyBzZXJ2aWNlUnVudGltZVRleHQ7Ci0JCQloTGlua1NlcnZpY2VTZXJ2ZXJfLnNldFRleHQobmV3U2VydmVyVGV4dCk7Ci0JCQloTGlua1NlcnZpY2VSdW50aW1lXy5zZXRUZXh0KG5ld1J1bnRpbWVUZXh0KTsJCQotCQkJCi0JCQkvKmNoZWNrIHRvIHNlZSBpZiB0ZXh0IGhhcyBjaGFuZ2VkIGZvciBzZXJ2ZXIgb3IgcnVudGltZQotCQkJaWYgc28sIHJlcGFpbnQgbGlua3MgKi8KLQkJCWlmICghbmV3U2VydmVyVGV4dC5lcXVhbHMoY3VycmVudFNlcnZlclRleHQpKQotCQkJewotCQkJCWhMaW5rU2VydmljZVNlcnZlcl8ucGFjayh0cnVlKTsKLQkJCQlwYWNrU2VsZigpOwotCQkJfQkJCQotCQkJCi0JCQlpZiAoIW5ld1J1bnRpbWVUZXh0LmVxdWFscyhjdXJyZW50UnVudGltZVRleHQpKQotCQkJewotCQkJCWhMaW5rU2VydmljZVJ1bnRpbWVfLnBhY2sodHJ1ZSk7Ci0JCQkJcGFja1NlbGYoKTsKLQkJCX0gCi0JCX0JCQkJCi0JCWxhYmVsSWRzXyA9IGxhYmVsSWRzOwotCQloYW5kbGVUeXBlQ2hhbmdlKCk7Ci0JCQotCQlpZiAocHJvamVjdERpYWxvZ18gIT0gbnVsbCkKLQkJCXByb2plY3REaWFsb2dfLnNldFR5cGVSdW50aW1lU2VydmVyKGlkc18pOwotCQkKLQkJCi0JCS8vV2hlbiB0aGUgc2VydmVyIGNoYW5nZXMsIHRoZSBzdGF0ZSBvZiBuZWVkRWFyIGNvdWxkIGNoYW5nZS4KLQkJLy9JZiB0aGUgdGhlIHNlcnZlciBjaGFuZ2UgcmVzdWx0cyBpbiBhIGNoYW5nZSBpbiB0aGUgc3RhdGUgb2YgbmVlZEVhciwKLQkJLy91cGRhdGUgbmVlZEVhciBhbmQgc2VydmljZUVhclByb2plY3ROYW1lLgotCQlWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JCWJvb2xlYW4gb2xkTmVlZEVhciA9IGdldFNlcnZpY2VOZWVkRUFSKCk7Ci0JCWJvb2xlYW4gc2VydmljZVByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXI7Ci0KLQkJaWYgKCFvbGROZWVkRWFyKQotCQl7Ci0JCQkvL0lmIGFuIEVBUiB3YXMgbm90IG5lZWRlZCBwcmV2aW91c2x5IGl0IGNvdWxkIGhhdmUgYmVlbiBiZWNhdXNlIG9mIHRoZSBwcm9qZWN0L3Byb2plY3QgdHlwZSBvciB0aGUgc2VydmVyLgotCQkJLy9JZiBpdCB3YXMgYmVjYXVzZSBvZiB0aGUgcHJvamVjdC9wcm9qZWN0IHR5cGUsIGNoYW5naW5nIHRoZSBzZXJ2ZXIgc2hvdWxkIGhhdmUgbm8gaW1wYWN0Ci0JCQkvL29uIHRoZSBzdGF0ZSBvZiBuZWVkRWFyLgotCQkJc2VydmljZVByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIgPSB2dS5wcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyKGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpLCBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXNlcnZpY2VQcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyID0gdHJ1ZTsKLQkJfQotCQkKLQkJLy9ib29sZWFuIHNlcnZpY2VQcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyID0gdnUucHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcihnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKSwgZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKSk7Ci0JCWlmIChzZXJ2aWNlUHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcikKLQkJewotCQkJLy9Db3VsZCBub3QgcnVsZSBvdXQgbmVlZCBmb3IgYW4gRWFyIGZyb20gdGhlIHByb2plY3QvcHJvamVjdCB0eXBlIHNvIGNoYW5naW5nIHRoZSBzZXJ2ZXIKLQkJCS8vbWF5IGltcGFjdCB0aGUgbmVlZCBmb3IgYW4gRWFyLgotCi0JCQlib29sZWFuIGN1cnJlbnRTZXJ2aWNlU2VydmVyTmVlZHNFYXIgPSB2dS5zZXJ2ZXJOZWVkc0VBUihnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpKTsKLQkJCWlmIChvbGROZWVkRWFyICE9IGN1cnJlbnRTZXJ2aWNlU2VydmVyTmVlZHNFYXIpCi0JCQl7Ci0JCQkJLy9VcGRhdGUgbmVlZEVhciBhbmQgc2VydmljZUVhclByb2plY3ROYW1lLgotCQkJCWlmIChjdXJyZW50U2VydmljZVNlcnZlck5lZWRzRWFyKQotCQkJCXsKLQkJCQkJLy9DYWxjdWxhdGUgYSByZWFzb25hYmxlIGRlZmF1bHQgZm9yIHRoZSBFYXIgcHJvamVjdCBuYW1lCi0JCQkJCVN0cmluZyBlYXJQcm9qZWN0TmFtZSA9IERlZmF1bHRpbmdVdGlscy5nZXREZWZhdWx0RUFSUHJvamVjdE5hbWUoZ2V0U2VydmljZVByb2plY3ROYW1lKCkpOwotCQkJCQlzZXRTZXJ2aWNlTmVlZEVBUihjdXJyZW50U2VydmljZVNlcnZlck5lZWRzRWFyKTsKLQkJCQkJc2V0U2VydmljZUVhclByb2plY3ROYW1lKGVhclByb2plY3ROYW1lKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJc2V0U2VydmljZU5lZWRFQVIoY3VycmVudFNlcnZpY2VTZXJ2ZXJOZWVkc0Vhcik7Ci0JCQkJCXNldFNlcnZpY2VFYXJQcm9qZWN0TmFtZSgiIik7CQkJCQkKLQkJCQl9Ci0JCQkJCi0JCQl9Ci0JCX0JCQotCX0KLQotCXB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSB7Ci0JCXJldHVybiBpZHNfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VHZW5lcmF0aW9uKGludCB2YWx1ZSkKLQl7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0U2VsZWN0aW9uKHZhbHVlKTsKLQkJc2V0R3JhcGhpY3ModmFsdWUpOwotCQkKLQkJLy9lbmFibGUgY2xpZW50IHdpZGdldCBiYXNlZCBvbiBzZXJ2aWNlIHNjYWxlIHNldHRpbmcKLQkJY2xpZW50V2lkZ2V0Xy5lbmFibGVDbGllbnRTbGlkZXIodmFsdWU8PVNjZW5hcmlvQ29udGV4dC5XU19TVEFSVCk7Ci0JCQotCQkvKmZvciBwb3B1cCBjYXNlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFVJIGlzIHJlZnJlc2hlZCBiYXNlZCBvbiAKLQkJY2hhbmdlcyB0byBkYXRhKi8KLQkJcGFja1NlbGYoKTsKLQl9CQotCi0JcHVibGljIGludCBnZXRTZXJ2aWNlR2VuZXJhdGlvbigpCi0JewotCQlyZXR1cm4gc2VydmljZVNjYWxlXy5nZXRTZWxlY3Rpb24oKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcFNlcnZpY2UoKSB7Ci0JCXJldHVybiBkZXZlbG9wU2VydmljZV87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGV2ZWxvcFNlcnZpY2UoYm9vbGVhbiBkZXZlbG9wU2VydmljZSkgewotCQl0aGlzLmRldmVsb3BTZXJ2aWNlXyA9IGRldmVsb3BTZXJ2aWNlOwotCX0JCi0JCi0JcHVibGljIGJvb2xlYW4gZ2V0QXNzZW1ibGVTZXJ2aWNlKCkgewotCQlyZXR1cm4gYXNzZW1ibGVTZXJ2aWNlXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZVNlcnZpY2UoYm9vbGVhbiBhc3NlbWJsZVNlcnZpY2UpIHsKLQkJdGhpcy5hc3NlbWJsZVNlcnZpY2VfID0gYXNzZW1ibGVTZXJ2aWNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldERlcGxveVNlcnZpY2UoKSB7Ci0JCXJldHVybiBkZXBsb3lTZXJ2aWNlXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3lTZXJ2aWNlKGJvb2xlYW4gZGVwbG95U2VydmljZSkgewotCQl0aGlzLmRlcGxveVNlcnZpY2VfID0gZGVwbG95U2VydmljZTsKLQl9Ci0JCi0JcHVibGljIEJvb2xlYW4gZ2V0U3RhcnRTZXJ2aWNlKCl7Ci0JCXJldHVybiBzdGFydFNlcnZpY2VfOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTdGFydFNlcnZpY2UoQm9vbGVhbiB2YWx1ZSkgewotICAgICAgICBzdGFydFNlcnZpY2VfPXZhbHVlOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldEluc3RhbGxTZXJ2aWNlKCkgewotCQlyZXR1cm4gaW5zdGFsbFNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEluc3RhbGxTZXJ2aWNlKEJvb2xlYW4gdmFsdWUpIHsKLSAgICAgICAgaW5zdGFsbFNlcnZpY2VfPXZhbHVlOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldFRlc3RTZXJ2aWNlKCkgewotICAgICAgICByZXR1cm4gCi0gICAgICAgIG5ldyBCb29sZWFuKCB0ZXN0U2VydmljZV8uYm9vbGVhblZhbHVlKCkgfHwgY2xpZW50V2lkZ2V0Xy5nZXRUZXN0Q2xpZW50KCkuYm9vbGVhblZhbHVlKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKEJvb2xlYW4gdmFsdWUpIHsKLSAgICAgICAgdGVzdFNlcnZpY2VfPSB2YWx1ZTsKLQl9Ci0JcHVibGljIEJvb2xlYW4gZ2V0TW9uaXRvclNlcnZpY2UoKSB7Ci0JCXJldHVybiBuZXcgQm9vbGVhbihtb25pdG9yQnV0dG9uXy5nZXRTZWxlY3Rpb24oKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TW9uaXRvclNlcnZpY2UoQm9vbGVhbiB2YWx1ZSkgewotCQltb25pdG9yQnV0dG9uXy5zZXRTZWxlY3Rpb24odmFsdWUuYm9vbGVhblZhbHVlKCkpOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldFB1Ymxpc2hTZXJ2aWNlKCkgewkJCi0JCXJldHVybiBuZXcgQm9vbGVhbihwdWJsaXNoQnV0dG9uXy5nZXRTZWxlY3Rpb24oKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHVibGlzaFNlcnZpY2UoQm9vbGVhbiB2YWx1ZSkgewotCQlwdWJsaXNoQnV0dG9uXy5zZXRTZWxlY3Rpb24oIHZhbHVlLmJvb2xlYW5WYWx1ZSgpICk7Ci0JfQotCi0JcHVibGljIEJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpIHsKLQkJcmV0dXJuIG5ldyBCb29sZWFuKGNsaWVudFdpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpKTsJCQotCX0KLQotCXB1YmxpYyB2b2lkIHNldENsaWVudEdlbmVyYXRpb24oaW50IHZhbHVlKQotCXsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRDbGllbnRHZW5lcmF0aW9uKHZhbHVlKTsKLQkJLypmb3IgcG9wdXAgY2FzZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBVSSBpcyByZWZyZXNoZWQgYmFzZWQgb24gCi0JCQljaGFuZ2VzIHRvIGRhdGEqLwotCQlwYWNrU2VsZigpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldENsaWVudEVhclByb2plY3ROYW1lKCkKLQl7Ci0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudEVhclByb2plY3ROYW1lKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdE5hbWUoKQotCXsKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50UHJvamVjdE5hbWUoKTsKLQl9Ci0JCi0JcHVibGljIGludCBnZXRDbGllbnRHZW5lcmF0aW9uKCkKLQl7Ci0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudEdlbmVyYXRpb24oKTsKLQl9CQotCi0JcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKSB7Ci0JCWlmIChyZXNvdXJjZUNvbnRleHRfID09IG51bGwpIHsKLQkJCXJlc291cmNlQ29udGV4dF8gPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkKLQkJCQkJLmdldFJlc291cmNlQ29udGV4dCgpOwotCQl9Ci0JCXJldHVybiByZXNvdXJjZUNvbnRleHRfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dChSZXNvdXJjZUNvbnRleHQgY29udGV4dCkgewotCQlyZXNvdXJjZUNvbnRleHRfID0gY29udGV4dDsKLQl9Ci0KLQlwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLQl7Ci0JCXJldHVybiBvYmplY3RTZWxlY3Rpb25fOwkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldE9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotCXsKLQkJb2JqZWN0U2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsKLQl9Ci0JCi0JcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLQl7Ci0JCXJldHVybiBwYXJzZXJfOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpCi0JewotCQlwYXJzZXJfID0gcGFyc2VyOwotCQljbGllbnRXaWRnZXRfLnNldFdlYlNlcnZpY2VzUGFyc2VyKHBhcnNlcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGludGVybmFsaXplKCkgewkJCi0JCQotCQlpZiAocHJlZmVyZW5jZXNQYWdlXykKLQkJCXJldHVybjsKLQkJCi0JCWlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRfID09IG51bGwpCi0JCQlvYmplY3RTZWxlY3Rpb25XaWRnZXRfID0gZ2V0U2VsZWN0aW9uV2lkZ2V0KCk7Ci0JCQotCQlTdHJpbmcgZGlzcGxheWFibGUgPSBudWxsOwotCQkKLQkJaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldF8gaW5zdGFuY2VvZiBJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSkgewkJCi0JCQlJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSBsYXVuY2hhYmxlID0gKElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlKSBvYmplY3RTZWxlY3Rpb25XaWRnZXRfOwotCQkJbGF1bmNoYWJsZS5zZXRJbml0aWFsU2VsZWN0aW9uKG9iamVjdFNlbGVjdGlvbl8pOwotCQkJb2JqZWN0U2VsZWN0aW9uXyA9IGxhdW5jaGFibGUuZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0JCQlkaXNwbGF5YWJsZSA9IGxhdW5jaGFibGUuZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKTsKLQkJfQotCQllbHNlIHsKLQkJCUlPYmplY3RTZWxlY3Rpb25XaWRnZXQgc2VsZWN0aW9uV2lkZ2V0ID0gKElPYmplY3RTZWxlY3Rpb25XaWRnZXQpIG9iamVjdFNlbGVjdGlvbldpZGdldF87Ci0JCQlzZWxlY3Rpb25XaWRnZXQuc2V0SW5pdGlhbFNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb25fKTsKLQkJICAgIGRpc3BsYXlhYmxlID0gc2VsZWN0aW9uV2lkZ2V0LmdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCWlmIChkaXNwbGF5YWJsZSA9PSBudWxsIHx8IGRpc3BsYXlhYmxlLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm47Ci0JCQkKLQkJc2VydmljZUltcGxfLnJlbW92ZU1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCXNlcnZpY2VJbXBsXy5zZXRUZXh0KGRpc3BsYXlhYmxlKTsKLQkJc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkgewotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLQkJSVN0YXR1cyBtaXNzaW5nRmllbGRTdGF0dXMgPSBjaGVja01pc3NpbmdGaWVsZFN0YXR1cygpOwotCQlpZiAobWlzc2luZ0ZpZWxkU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJcmV0dXJuIG1pc3NpbmdGaWVsZFN0YXR1czsKLQkJfQotCi0JCUlTdGF0dXMgc2VydmljZUltcGxWYWxpZGF0aW9uU3RhdHVzID0gY2hlY2tTZXJ2aWNlSW1wbFRleHRTdGF0dXMoKTsKLQkJaWYgKHNlcnZpY2VJbXBsVmFsaWRhdGlvblN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBzZXJ2aWNlSW1wbFZhbGlkYXRpb25TdGF0dXM7Ci0JCX0KLQkJZWxzZSBpZiAoc2VydmljZUltcGxWYWxpZGF0aW9uU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKXsKLQkJCXJldHVybiBzZXJ2aWNlSW1wbFZhbGlkYXRpb25TdGF0dXM7Ci0JCX0KLQotCQlJU3RhdHVzIHBvc3NpYmxlRXJyb3JTdGF0dXMgPSBjaGVja0Vycm9yU3RhdHVzKCk7Ci0JCWlmIChwb3NzaWJsZUVycm9yU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiB8fCBwb3NzaWJsZUVycm9yU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSB7Ci0JCQlyZXR1cm4gcG9zc2libGVFcnJvclN0YXR1czsKLQkJfQotCi0JCUlTdGF0dXMgcG9zc2libGVXYXJuaW5nU3RhdHVzID0gY2hlY2tXYXJuaW5nU3RhdHVzKCk7Ci0JCWlmIChwb3NzaWJsZVdhcm5pbmdTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLldBUk5JTkcpIHsKLQkJCXJldHVybiBwb3NzaWJsZVdhcm5pbmdTdGF0dXM7Ci0JCX0KLQotCQkvLyBJZiBubyB3YXJuaW5ncy9lcnJvcnMgd2VyZSByZXBvcnRlZCwgY2xlYXIgdmFsaWRhdGlvbiBzdGF0ZSBvbgotCQkvLyBzZXJ2aWNlIHNpZGUgYW5kIGNsaWVudCBzaWRlIChpZiBlbmFibGVkKQotCQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX05PTkU7Ci0JCWlmIChjbGllbnRXaWRnZXRfLmdldEdlbmVyYXRlUHJveHkoKSkgewotCQkJY2xpZW50V2lkZ2V0Xy5zZXRWYWxpZGF0aW9uU3RhdGUoVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX05PTkUpOwotCQl9Ci0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0JCi0JLyoKLQkgKiBjYWxsIHZhbGlkYXRpb24gY29kZSBpbiB0aGUgb2JqZWN0IHNlbGVjdGlvbiB3aWRnZXQgdG8gZW5zdXJlIGFueQotCSAqIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHNlcnZpY2VJbXBsXyBmaWVsZCBhcmUgdmFsaWQKLQkgKi8KLQlwcml2YXRlIElTdGF0dXMgY2hlY2tTZXJ2aWNlSW1wbFRleHRTdGF0dXMoKSB7Ci0JCQotCQlTdHJpbmcgZmllbGRUZXh0ID0gc2VydmljZUltcGxfLmdldFRleHQoKS50cmltKCk7Ci0KLQkJaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldF8gPT0gbnVsbCkKLQkJewotCQkJb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9IGdldFNlbGVjdGlvbldpZGdldCgpOwotCQl9Ci0JCQotCQlJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSBsYXVuY2hhYmxlID0gbnVsbDsKLQkJaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldF8gaW5zdGFuY2VvZiBJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSkKLQkJICAgIHsgICAgICAJCi0JCQkJbGF1bmNoYWJsZSA9IChJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSlvYmplY3RTZWxlY3Rpb25XaWRnZXRfOwotCQkJCXZhbGlkT2JqZWN0U2VsZWN0aW9uXyA9IGxhdW5jaGFibGUudmFsaWRhdGUoZmllbGRUZXh0KTsKLQkJCX0KLQkJCWVsc2UgCi0JCQl7Ci0JCQkJSU9iamVjdFNlbGVjdGlvbldpZGdldCB3aWRnZXQgPSAoSU9iamVjdFNlbGVjdGlvbldpZGdldClvYmplY3RTZWxlY3Rpb25XaWRnZXRfOwotCQkJCXZhbGlkT2JqZWN0U2VsZWN0aW9uXyA9IHdpZGdldC52YWxpZGF0ZShmaWVsZFRleHQpOwotCQkJfQotCQkKLQkJaWYgKCF2YWxpZE9iamVjdFNlbGVjdGlvbl8pCi0JCXsKLQkJCWludCBzY2VuYXJpbyA9IGdldFdlYlNlcnZpY2VTY2VuYXJpbygpOwotCQkJCi0JCQlpZiAoc2NlbmFyaW8gPT0gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKXsKLQkJCQlpZiAobGF1bmNoYWJsZSAhPSBudWxsKXsKLQkJCQkJSVN0YXR1cyB2YWxTdGF0dXMgPSBsYXVuY2hhYmxlLnZhbGlkYXRlU2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGZpZWxkVGV4dCkpOwotCQkJCQlpZiAodmFsU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKQotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOX1NFUlZJQ0VfSU1QTF9OQU1JTkdfQ09OVkVOVElPTik7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5WQUxJRF9TRVJWSUNFX0lNUEwpOwotCQkJfQotCQkJZWxzZQotCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lOVkFMSURfU0VSVklDRV9ERUYpOwkJCQotCQl9CQkKLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCXByaXZhdGUgaW50IGdldFdlYlNlcnZpY2VTY2VuYXJpbygpCi0JewotCQkgICBpbnQgaW5kZXggPSB3ZWJzZXJ2aWNlVHlwZV8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsJCi0JCSAgIFN0cmluZyB0eXBlSWQgPSBsYWJlbElkc18uZ2V0SWRzXygpW2luZGV4XTsKLQkJICAgcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlSWQpOwkJCi0JfQotCQotCXByaXZhdGUgSVN0YXR1cyBjaGVja01pc3NpbmdGaWVsZFN0YXR1cygpIHsKLQotCQkvLyAxLiBDaGVjayBmb3IgbWlzc2luZyBmaWVsZHMgb24gc2VydmljZSBzaWRlCi0JCVZhbGlkYXRpb25VdGlscyB2YWxVdGlscyA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLQkJU3RyaW5nIHNlcnZpY2VJbXBsID0gc2VydmljZUltcGxfLmdldFRleHQoKS50cmltKCk7Ci0JCVN0cmluZyB0eXBlSWQgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRUeXBlSWQoKTsKLQkJU3RyaW5nIHJ1bnRpbWVJZCA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFJ1bnRpbWVJZCgpOwotCQlTdHJpbmcgc2VydmVySWQgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpOwotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKTsKLQkJYm9vbGVhbiBuZWVkRWFyID0gZ2V0U2VydmljZU5lZWRFQVIoKTsKLQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gZ2V0U2VydmljZUVhclByb2plY3ROYW1lKCk7Ci0JCVN0cmluZyBwcm9qZWN0VHlwZUlkID0gZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKTsKLQkJCi0JCUlTdGF0dXMgc2VydmljZU1pc3NpbmdGaWVsZFN0YXR1cyA9IHZhbFV0aWxzLmNoZWNrTWlzc2luZ0ZpZWxkU3RhdHVzKHZhbGlkYXRpb25TdGF0ZV8sIHR5cGVJZCwgc2VydmljZUltcGwsCi0JCQkJcnVudGltZUlkLCBzZXJ2ZXJJZCwgcHJvamVjdE5hbWUsIG5lZWRFYXIsIGVhclByb2plY3ROYW1lLCBwcm9qZWN0VHlwZUlkLCBmYWxzZSk7Ci0JCWlmIChzZXJ2aWNlTWlzc2luZ0ZpZWxkU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJcmV0dXJuIHNlcnZpY2VNaXNzaW5nRmllbGRTdGF0dXM7Ci0JCX0KLQotCQkvLyAyLiBDaGVjayBmb3IgbWlzc2luZyBmaWVsZHMgb24gdGhlIGNsaWVudCBzaWRlIGlmIGl0J3MgdmlzaWJsZS4KLQkJaWYgKGNsaWVudFdpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpKSB7Ci0JCQlJU3RhdHVzIGNsaWVudE1pc3NpbmdGaWVsZHNTdGF0dXMgPSBjbGllbnRXaWRnZXRfLmNoZWNrTWlzc2luZ0ZpZWxkU3RhdHVzKCk7Ci0JCQlpZiAoY2xpZW50TWlzc2luZ0ZpZWxkc1N0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCQlyZXR1cm4gY2xpZW50TWlzc2luZ0ZpZWxkc1N0YXR1czsKLQkJCX0KLQotCQl9Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrRXJyb3JTdGF0dXMoKSB7Ci0KLQkJVmFsaWRhdGlvblV0aWxzIHZhbFV0aWxzID0gbmV3IFZhbGlkYXRpb25VdGlscygpOwotCi0JCS8vIDEuIENoZWNrIGZvciBlcnJvcnMgb24gc2VydmljZSBzaWRlCi0JCVN0cmluZyBydW50aW1lSWQgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRSdW50aW1lSWQoKTsKLQkJU3RyaW5nIHNlcnZlcklkID0gZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0U2VydmVySWQoKTsKLQkJU3RyaW5nIHNlcnZlckluc3RhbmNlSWQgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0JCVN0cmluZyB0eXBlSWQgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRUeXBlSWQoKTsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gZ2V0U2VydmljZVByb2plY3ROYW1lKCk7Ci0JCWJvb2xlYW4gbmVlZEVhciA9IGdldFNlcnZpY2VOZWVkRUFSKCk7Ci0JCVN0cmluZyBlYXJQcm9qZWN0TmFtZSA9IGdldFNlcnZpY2VFYXJQcm9qZWN0TmFtZSgpOwotCQlTdHJpbmcgcHJvamVjdFR5cGVJZCA9IGdldFNlcnZpY2VDb21wb25lbnRUeXBlKCk7Ci0JCUlTdGF0dXMgc2VydmljZVNpZGVFcnJvclN0YXR1cyA9IHZhbFV0aWxzLmNoZWNrRXJyb3JTdGF0dXModmFsaWRhdGlvblN0YXRlXywgdHlwZUlkLCBydW50aW1lSWQsIHNlcnZlcklkLCAKLQkJCQlzZXJ2ZXJJbnN0YW5jZUlkLCBwcm9qZWN0TmFtZSwgbmVlZEVhciwgZWFyUHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQsIGZhbHNlKTsKLQkJaWYgKHNlcnZpY2VTaWRlRXJyb3JTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gc2VydmljZVNpZGVFcnJvclN0YXR1czsKLQkJfQotCi0JCS8vIDIuIENoZWNrIGZvciBlcnJvcnMgb24gY2xpZW50IHNpZGUgaWYgaXQgaXMgdmlzaWJsZQotCQlpZiAoY2xpZW50V2lkZ2V0Xy5nZXRHZW5lcmF0ZVByb3h5KCkpIHsKLQkJCUlTdGF0dXMgY2xpZW50U2lkZUVycm9yU3RhdHVzID0gY2xpZW50V2lkZ2V0Xy5jaGVja0Vycm9yU3RhdHVzKCk7Ci0JCQlpZiAoY2xpZW50U2lkZUVycm9yU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJCXJldHVybiBjbGllbnRTaWRlRXJyb3JTdGF0dXM7Ci0JCQl9Ci0KLQkJCS8vIDMuIENoZWNrIGZvciBlcnJvcnMgdGhhdCBzcGFuIHNlcnZpY2UgYW5kIGNsaWVudCBpZiBjbGllbnQgc2lkZQotCQkJLy8gaXMgdmlzaWJsZS4KLQkJCWludCBjbGllbnRWYWxpZGF0aW9uU3RhdGUgPSBjbGllbnRXaWRnZXRfLmdldFZhbGlkYXRpb25TdGF0ZSgpOwotCQkJaWYgKHZhbGlkYXRpb25TdGF0ZV8gPT0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTAotCQkJCQl8fCB2YWxpZGF0aW9uU3RhdGVfID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9QUk9KRUNUX0NIQU5HRVMKLQkJCQkJfHwgY2xpZW50VmFsaWRhdGlvblN0YXRlID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEwKLQkJCQkJfHwgY2xpZW50VmFsaWRhdGlvblN0YXRlID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9QUk9KRUNUX0NIQU5HRVMpIHsKLQkJCQlJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIHJ1bnRpbWVDaGVja2VyID0gbnVsbDsKLQotCQkJCVN0cmluZyBzZXJ2aWNlUnVudGltZUlkID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVJZChnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSwgcHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQpOwkgICAgCQkKLQkJCQlydW50aW1lQ2hlY2tlciA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lQ2hlY2tlcihzZXJ2aWNlUnVudGltZUlkKTsKLQotCQkJCWlmIChydW50aW1lQ2hlY2tlciAhPSBudWxsKSB7Ci0JCQkJCXJldHVybiBydW50aW1lQ2hlY2tlci5jaGVja1NlcnZpY2VDbGllbnRDb21wYXRpYmlsaXR5KAotCQkJCQkJCWdldFNlcnZpY2VOZWVkRUFSKCksIGdldFNlcnZpY2VFYXJQcm9qZWN0TmFtZSgpLCBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKSwgCi0JCQkJCQkJY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnROZWVkRUFSKCksIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKSwgCi0JCQkJCQkJY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRQcm9qZWN0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQlwcml2YXRlIElTdGF0dXMgY2hlY2tXYXJuaW5nU3RhdHVzKCkgewotCQlWYWxpZGF0aW9uVXRpbHMgdmFsVXRpbHMgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JCS8vIDEuIENoZWNrIGZvciB3YXJuaW5ncyBvbiB0aGUgc2VydmljZSBzaWRlCi0JCWludCBzY2FsZVNldHRpbmcgPSBnZXRTZXJ2aWNlR2VuZXJhdGlvbigpOwotCQlTdHJpbmcgc2VydmVySWQgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpOwotCQlJU3RhdHVzIHNlcnZpY2VXYXJuaW5nU3RhdHVzID0gdmFsVXRpbHMuY2hlY2tXYXJuaW5nU3RhdHVzKHZhbGlkYXRpb25TdGF0ZV8sIHNjYWxlU2V0dGluZywgc2VydmVySWQsIGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlckluc3RhbmNlSWQoKSwgZmFsc2UpOwotCQlpZiAoc2VydmljZVdhcm5pbmdTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLldBUk5JTkcpIHsKLQkJCXJldHVybiBzZXJ2aWNlV2FybmluZ1N0YXR1czsKLQkJfQotCi0JCS8vIDIuIENoZWNrIGZvciB3YXJuaW5ncyBvbiB0aGUgY2xpZW50IHNpZGUgaWYgaXQncyBlbmFibGVkCi0JCWlmIChjbGllbnRXaWRnZXRfLmdldEdlbmVyYXRlUHJveHkoKSkgewotCQkJSVN0YXR1cyBjbGllbnRXYXJuaW5nU3RhdHVzID0gY2xpZW50V2lkZ2V0Xy5jaGVja1dhcm5pbmdTdGF0dXMoKTsKLQkJCWlmIChjbGllbnRXYXJuaW5nU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSB7Ci0JCQkJcmV0dXJuIGNsaWVudFdhcm5pbmdTdGF0dXM7Ci0JCQl9Ci0KLQkJfQotCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQkJCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEltYWdlUmVnaXN0cnkoKQotCXsKLQkJaW1hZ2VSZWdfID0gbmV3IEltYWdlUmVnaXN0cnkoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkKLQkJaW1hZ2VSZWdfLnB1dChJQ09OX1NDQUxFX0JHXzAsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihJQ09OX1NDQUxFX0JHXzApKTsKLQkJaW1hZ2VSZWdfLnB1dChJQ09OX1NDQUxFX0JHXzEsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihJQ09OX1NDQUxFX0JHXzEpKTsKLQkJaW1hZ2VSZWdfLnB1dChJQ09OX1NDQUxFX0JHXzIsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihJQ09OX1NDQUxFX0JHXzIpKTsKLQkJaW1hZ2VSZWdfLnB1dChJQ09OX1NDQUxFX0JHXzMsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihJQ09OX1NDQUxFX0JHXzMpKTsKLQkJaW1hZ2VSZWdfLnB1dChJQ09OX1NDQUxFX0JHXzQsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihJQ09OX1NDQUxFX0JHXzQpKTsKLQkJaW1hZ2VSZWdfLnB1dChJQ09OX1NDQUxFX0JHXzUsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihJQ09OX1NDQUxFX0JHXzUpKTsKLQkJaW1hZ2VSZWdfLnB1dChJQ09OX1NDQUxFX0JHXzYsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihJQ09OX1NDQUxFX0JHXzYpKTsKLQkJCi0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19TRVJWSUNFXzAsIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX1NFUlZJQ0VfMCkpOwotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfU0VSVklDRV8xLCBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19TRVJWSUNFXzEpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX1NFUlZJQ0VfMiwgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfU0VSVklDRV8yKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19TRVJWSUNFXzMsIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX1NFUlZJQ0VfMykpOwotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfU0VSVklDRV80LCBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19TRVJWSUNFXzQpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX1NFUlZJQ0VfNSwgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfU0VSVklDRV81KSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRBZHZhbmNlZE9wdGlvbnMoYm9vbGVhbiBlbmFibGVkKQotCXsKLQkJbW9uaXRvckJ1dHRvbl8uc2V0RW5hYmxlZChlbmFibGVkKTsgCi0JCXB1Ymxpc2hCdXR0b25fLnNldEVuYWJsZWQoZW5hYmxlZCk7CQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotCSAgewotCQlzZXJ2aWNlUHJvamVjdE5hbWVfPSBuYW1lOwotCQloTGlua1NlcnZpY2VQcm9qZWN0Xy5zZXRUZXh0KFNFUlZJQ0VfUFJPSkVDVF9QUkVGSVggKyAiICIgKyBzZXJ2aWNlUHJvamVjdE5hbWVfKTsKLQkJaExpbmtTZXJ2aWNlUHJvamVjdF8ucGFjayh0cnVlKTsKLQkJcGFja1NlbGYoKTsJCi0JICB9Ci0JCi0JIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VFYXJQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLQkgIHsJICAKLQkJIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8gPSBuYW1lOwotCQkgcmVmcmVzaEVBUkxpbmsoKTsKLQkgIH0KLQkgCi0JICBwdWJsaWMgdm9pZCByZWZyZXNoRUFSTGluaygpCi0JICB7Ci0JCSAgaExpbmtTZXJ2aWNlRUFSXy5zZXRWaXNpYmxlKG5lZWRFYXJfKTsgCi0JCSAgaWYgKG5lZWRFYXJfKQotCQkgIHsJCQkgCi0JCQkgIGhMaW5rU2VydmljZUVBUl8uc2V0VGV4dChTRVJWSUNFX0VBUl9QUkVGSVggKyAiICIgKyBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfKTsKLQkJCSAgaExpbmtTZXJ2aWNlRUFSXy5wYWNrKHRydWUpOwotCQkJICBwYWNrU2VsZigpOwotCQkgIH0KLQkgIH0KLQkgcHVibGljIHZvaWQgc2V0U2VydmljZUNvbXBvbmVudFR5cGUoIFN0cmluZyB0eXBlICkKLQkgIHsKLQkJIHNlcnZpY2VDb21wb25lbnRUeXBlXyA9IHR5cGU7Ci0JICB9Ci0JIAotCSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0JICB7Ci0JICAgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50UHJvamVjdE5hbWUobmFtZSk7ICAKLQkgIH0gIAotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLQkgIHsKLQkgICAgY2xpZW50V2lkZ2V0Xy5zZXRDbGllbnRFYXJQcm9qZWN0TmFtZShuYW1lKTsgIAotCSAgfQotCSAgCi0JICBJUHJvamVjdCBwcm9qZWN0XzsKLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpCi0JICB7Ci0JCSAgcmV0dXJuIHNlcnZpY2VDb21wb25lbnRUeXBlXzsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0Q2xpZW50Q29tcG9uZW50VHlwZShTdHJpbmcgdHlwZSkKLQkgIHsKLQkJICBjbGllbnRXaWRnZXRfLnNldENsaWVudENvbXBvbmVudFR5cGUodHlwZSk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpCi0JICB7Ci0JCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpOwotCSAgfQotCSAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVByb2plY3ROYW1lKCkKLQkgIHsKLQkJICByZXR1cm4gc2VydmljZVByb2plY3ROYW1lXzsKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKQotCSAgewotCQkgIHJldHVybiBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpCi0JICB7Ci0JCSAgY2xpZW50V2lkZ2V0Xy5zZXRQcm9qZWN0KHByb2plY3QpOwotCSAgfQotCSAgCi0JICBwcml2YXRlIElQcm9qZWN0IGdldENsaWVudFByb2plY3QoKQotCSAgewotCQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldFByb2plY3QoKTsgCi0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLQkgIHsKLQkJICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0JICB9CSAgCi0JICAJICAKLQkgIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLQkgIHsKLQkJICByZXR1cm4gcHJvamVjdF87Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVJ1bnRpbWVJZCgpCi0JICB7Ci0JCSAgLy8gY2FsY3VsYXRlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHNlcnZpY2VSdW50aW1lSWQgYmFzZWQgb24gY3VycmVudCBzZXR0aW5ncy4KLQkJICByZXR1cm4gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVJZChnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSwgZ2V0U2VydmljZVByb2plY3ROYW1lKCksIGdldFNlcnZpY2VDb21wb25lbnRUeXBlKCkpOyAgICAKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lSWQoKQotCSAgewotCQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudFJ1bnRpbWVJZCgpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTmVlZEVBUihib29sZWFuIGIpCi0JICB7Ci0JCSAgbmVlZEVhcl8gPSBiOwotCQkgIHJlZnJlc2hFQVJMaW5rKCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBib29sZWFuIGdldFNlcnZpY2VOZWVkRUFSKCkKLQkgIHsKLQkJICByZXR1cm4gbmVlZEVhcl87Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldENsaWVudE5lZWRFQVIoYm9vbGVhbiBiKQotCSAgewotCSAgICBjbGllbnRXaWRnZXRfLnNldENsaWVudE5lZWRFQVIoYik7Ci0JICB9CSAgCi0JICAKLQkgIHB1YmxpYyBib29sZWFuIGdldENsaWVudE5lZWRFQVIoKQotCSAgewotCQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudE5lZWRFQVIoKTsKLQkgIH0KLQkgIAotCSAgLy8gbG9va3MgdGhyb3VnaCBleHRlbnNpb25zIGFuZCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBzZWxlY3Rpb24gd2lkZ2V0Ci0JICBwcml2YXRlIE9iamVjdCBnZXRTZWxlY3Rpb25XaWRnZXQoKQotCSAgewotCQkJU3RyaW5nICAgICAgICAgd3N0ICAgICAgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRUeXBlSWQoKTsKLQkJCWludCAgICAgICAgICAgIHNjZW5hcmlvID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHdzdCk7Ci0JCQlTdHJpbmcgICAgICAgICBpbXBsSWQgICA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHdzdCk7Ci0JCSAgV2ViU2VydmljZUltcGwgd3NpbXBsICAgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlSW1wbEJ5SWQoaW1wbElkKTsKLSAgICAgIE9iamVjdCAgICAgICAgIHJlc3VsdCAgID0gbnVsbDsKLSAgICAgICAgCi0JCSAgICAKLQkJICBpZiAod3NpbXBsICE9IG51bGwpCi0JCSAgewotCQkgICAgU3RyaW5nIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gbnVsbDsKLQkJICAgIGlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikKLQkJICAgIHsKLQkJICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LldTRExTZWxlY3Rpb25XaWRnZXQiOwotCQkgICAgfQotCQkgICAgZWxzZQotCQkgICAgewotCQkgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCA9IHdzaW1wbC5nZXRPYmplY3RTZWxlY3Rpb25XaWRnZXQoKTsKLQkJICAgIH0KLSAgICAgICAgCi0gICAgICAgIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgYm9vbGVhbiBlZGl0YWJsZSA9IHJlZ2lzdHJ5LmdldEV4dGVybmFsTW9kaWZ5KCBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCApOwotICAgICAgICAgICAgICAgIAotICAgICAgICBzZXJ2aWNlSW1wbF8uc2V0RWRpdGFibGUoIGVkaXRhYmxlICk7Ci0gICAgICAgIHJlc3VsdCA9IHJlZ2lzdHJ5LmdldFNlbGVjdGlvbldpZGdldCggb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgKTsKLSAgICAgIH0KLSAgICAgIAotCQkgIHJldHVybiByZXN1bHQ7Ci0JICB9Ci0JIAotCS8vIGZvciB0aGUgcHVycG9zZXMgb2YgZGlzYWJsaW5nIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGNvbnRyb2xzIGZyb20gdGhlIHByZWZlcmVuY2VzIGRpYWxvZwotCXB1YmxpYyB2b2lkIGRpc2FibGVOb25QcmVmZXJlbmNlV2lkZ2V0cygpCi0JewotCQlpZiAoc2VydmljZUltcGxfICE9IG51bGwpCi0JCQlzZXJ2aWNlSW1wbF8uc2V0RW5hYmxlZChmYWxzZSk7Ci0JCWlmIChicm93c2VCdXR0b25fICE9IG51bGwpCi0JCQlicm93c2VCdXR0b25fLnNldEVuYWJsZWQoZmFsc2UpOwotCQlpZiAoaENvbXBTZXJ2aWNlXyAhPSBudWxsKQotCQl7Ci0JCQloQ29tcFNlcnZpY2VfLnNldFZpc2libGUoZmFsc2UpOwkJCQotCQl9Ci0JCWNsaWVudFdpZGdldF8uZGlzYWJsZU5vblByZWZlcmVuY2VXaWRnZXRzKCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRHcmFwaGljcyhpbnQgdmFsdWUpCi0JewotCQlTdHJpbmcgaWNvbkltYWdlID0gIiI7Ci0JCVN0cmluZyB0b3Bsb2d5SW1hZ2UgPSAiIjsKLQkJc3dpdGNoICh2YWx1ZSkgewotCQljYXNlIDA6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR18wOwotCQkJdG9wbG9neUltYWdlPUdSQVBISUNfU0VSVklDRV8wOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzE7Ci0JCQl0b3Bsb2d5SW1hZ2U9R1JBUEhJQ19TRVJWSUNFXzE7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfMjsKLQkJCXRvcGxvZ3lJbWFnZT1HUkFQSElDX1NFUlZJQ0VfMjsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR18zOwotCQkJdG9wbG9neUltYWdlPUdSQVBISUNfU0VSVklDRV8zOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzQ7Ci0JCQl0b3Bsb2d5SW1hZ2U9R1JBUEhJQ19TRVJWSUNFXzQ7Ci0JCQlicmVhazsKLQkJY2FzZSA1OgkJCQkJCi0JCWNhc2UgNjoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzU7Ci0JCQl0b3Bsb2d5SW1hZ2U9R1JBUEhJQ19TRVJWSUNFXzU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCXNlcnZpY2VTY2FsZV8uc2V0QmFja2dyb3VuZEltYWdlKGltYWdlUmVnXy5nZXQoaWNvbkltYWdlKSk7Ci0JCXRvcG9sb2d5U3BvdF8uc2V0SW1hZ2UoaW1hZ2VSZWdfLmdldCh0b3Bsb2d5SW1hZ2UpKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHJlZnJlc2hTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uKCkKLQl7CQkKLQkJLy9uZXcgdXAgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kCi0JCVNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBzZXJ2ZXJSVERlZmF1bHRDbWQgPSBuZXcgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCk7Ci0JCQotCQkgIC8vY2FsbCBzZXR0ZXJzIG9mIG5ldyBkZWZhdWx0aW5nIGNvbW1hbmQ6Ci0JICAgICAgc2VydmVyUlREZWZhdWx0Q21kLnNldEluaXRpYWxTZWxlY3Rpb24oZ2V0T2JqZWN0U2VsZWN0aW9uKCkpOwotCSAgICAgIHNlcnZlclJURGVmYXVsdENtZC5zZXRJbml0aWFsUHJvamVjdChnZXRQcm9qZWN0KCkpOwotCSAgICAgIHNlcnZlclJURGVmYXVsdENtZC5zZXRHZW5lcmF0ZVByb3h5KGNsaWVudFdpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpKTsKLQkgICAgICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpKTsKLQkJICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0V2ViU2VydmljZXNQYXJzZXIoZ2V0V2ViU2VydmljZXNQYXJzZXIoKSk7ICAgICAKLQkJICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0Q2xpZW50SW5pdGlhbFNlbGVjdGlvbihnZXRPYmplY3RTZWxlY3Rpb24oKSk7Ci0JICAgICAgc2VydmVyUlREZWZhdWx0Q21kLnNldENsaWVudEluaXRpYWxQcm9qZWN0KGdldENsaWVudFByb2plY3QoKSk7Ci0JICAgICAgc2VydmVyUlREZWZhdWx0Q21kLnNldENsaWVudEVhclByb2plY3ROYW1lKGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKSk7Ci0JCSAgc2VydmVyUlREZWZhdWx0Q21kLnNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkpOwotCQkgIAkJICAKLQkJICBzZXJ2ZXJSVERlZmF1bHRDbWQuZXhlY3V0ZShudWxsLCBudWxsKTsKLQkJICAKLQkJICAvL3BlcmZvcm0gbWFwcGluZ3MgZnJvbSB0aGUgZGVmYXVsdGluZyBjb21tYW5kIHRvIHRoZSBwcm9qZWN0IHNldHRpbmdzLi4uCQotCQkgIHNldFNlcnZpY2VQcm9qZWN0TmFtZShzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0U2VydmljZVByb2plY3ROYW1lKCkpOwotCQkgIHNldFNlcnZpY2VFYXJQcm9qZWN0TmFtZShzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0U2VydmljZUVhclByb2plY3ROYW1lKCkpOwotCQkgIHNldFNlcnZpY2VDb21wb25lbnRUeXBlKHNlcnZlclJURGVmYXVsdENtZC5nZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpKTsKLQkJICBzZXRDbGllbnRQcm9qZWN0TmFtZShzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0Q2xpZW50UHJvamVjdE5hbWUoKSk7Ci0JCSAgc2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoc2VydmVyUlREZWZhdWx0Q21kLmdldENsaWVudEVhclByb2plY3ROYW1lKCkpOwotCQkgIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkpOwotICAgICAgICAgIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKHNlcnZlclJURGVmYXVsdENtZC5nZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpKTsKLSAgICAgICAgICBzZXRTZXJ2aWNlTmVlZEVBUihzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0U2VydmljZU5lZWRFQVIoKSk7Ci0gICAgICAgICAgc2V0Q2xpZW50TmVlZEVBUihzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0Q2xpZW50TmVlZEVBUigpKTsKLSAgICAgICAgICBzZXRDbGllbnRDb21wb25lbnRUeXBlKHNlcnZlclJURGVmYXVsdENtZC5nZXRDbGllbnRDb21wb25lbnRUeXBlKCkpOwotCX0KLQkKLQkvKioKLQkgKiAgVXBkYXRlIGNsaWVudCBzZXJ2ZXIgYW5kIHJ1bnRpbWUgYmFzZWQgb24gc2VydmljZSBzaWRlCi0JICovCi0JcHJpdmF0ZSB2b2lkIHJlZnJlc2hDbGllbnRTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uKCkKLQl7CQotCQlUeXBlUnVudGltZVNlcnZlciBjbGllbnRUeXBlUnVudGltZXNlcnZlciA9IGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JCWNsaWVudFR5cGVSdW50aW1lc2VydmVyLnNldFJ1bnRpbWVJZChnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRSdW50aW1lSWQoKSk7Ci0JCWNsaWVudFR5cGVSdW50aW1lc2VydmVyLnNldFNlcnZlcklkKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCkpOwotCQljbGllbnRUeXBlUnVudGltZXNlcnZlci5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCXNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKGNsaWVudFR5cGVSdW50aW1lc2VydmVyKTsKLQl9CQotCQkKLQkKLQlwcml2YXRlIHZvaWQgY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbiwKLQkJCUlQcm9qZWN0IHByb2plY3QsIFN0cmluZyBjb21wb25lbnROYW1lLCBib29sZWFuIHJlZnJlc2hSdW50aW1lKQotCXsKLQkJT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCBvYmpPdXRwdXRDb21tYW5kID0gbmV3IE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQoKTsKLQkJICAgb2JqT3V0cHV0Q29tbWFuZC5zZXRUeXBlUnVudGltZVNlcnZlcihnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0JCSAgIG9iak91dHB1dENvbW1hbmQuc2V0T2JqZWN0U2VsZWN0aW9uKG9iamVjdFNlbGVjdGlvbik7Ci0JICAgICAgIG9iak91dHB1dENvbW1hbmQuc2V0UHJvamVjdChwcm9qZWN0KTsKLQkgICAgICAgb2JqT3V0cHV0Q29tbWFuZC5zZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE5hbWUpOwkJCSAgIAotCSAgICAgICAKLQkgICAgICAgb2JqT3V0cHV0Q29tbWFuZC5leGVjdXRlKG51bGwsIG51bGwpOwotICAgICAgICAKLQkgICAgICAgc2V0V2ViU2VydmljZXNQYXJzZXIob2JqT3V0cHV0Q29tbWFuZC5nZXRXZWJTZXJ2aWNlc1BhcnNlcigpKTsKLQkgICAgICAgc2V0T2JqZWN0U2VsZWN0aW9uKG9iak91dHB1dENvbW1hbmQuZ2V0T2JqZWN0U2VsZWN0aW9uKCkpOwotCSAgICAgICBzZXRQcm9qZWN0KG9iak91dHB1dENvbW1hbmQuZ2V0UHJvamVjdCgpKTsgICAgICAJCSAgICAgICAKLQkgICAgICAgCi0JICAgICAgIGlmIChyZWZyZXNoUnVudGltZSB8fCBmb3JjZVJlZnJlc2hSdW50aW1lKQotCSAgICAJICAgcmVmcmVzaFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsgIAotCSAgICAgICAKLQkgICAgICAgZm9yY2VSZWZyZXNoUnVudGltZSA9IGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIGNsYXNzIFNjYWxlU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotCXsKLQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewkJCQotCQkJICAgIAotCQkJICAgIFNjYWxlIHNjYWxlID0gKFNjYWxlKWUud2lkZ2V0OwotCQkJCWludCBzZWxlY3Rpb24gPSBzY2FsZS5nZXRTZWxlY3Rpb24oKTsKLQkJCQkKLQkJCQkvL1RPRE86IGNoYW5nZSB0aGUgaGFyZCBjb2RlZCBpbnRlZ2VycyBoZXJlIHRvIHRoZSB0aGUgU2NlbmFyaW9Db250ZXh0LldTX3h4eCB3aGVuIGluIGxlc3MgY3JpdGljYWwgcGhhc2UKLQkJCQlzd2l0Y2ggKHNlbGVjdGlvbikgewotCQkJCWNhc2UgMDoKLQkJCQkJc2VydmljZVNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1RFU1QpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDE6Ci0JCQkJCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9SVU4pOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDI6Ci0JCQkJCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9JTlNUQUxMKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzOgotCQkJCQlzZXJ2aWNlU2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfREVQTE9ZKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA0OgotCQkJCQlzZXJ2aWNlU2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQVNTRU1CTEUpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDU6CQkJCQkKLQkJCQljYXNlIDY6Ci0JCQkJCXNlcnZpY2VTY2FsZV8uc2V0U2VsZWN0aW9uKFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsgLy8ibm8gc2VsZWN0aW9uIiBpcyBub3QgYWxsb3dlZC4uLm11c3QgZGV2ZWxvcCBzZXJ2aWNlIEAgbWluaW11bQotCQkJCQlzZXJ2aWNlU2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfREVWRUxPUCk7Ci0JCQkJCS8vcmVzZXQgbG9jYWwgc2VsZWN0aW9uIHNvIHRoYXQgc2V0dGVycyBnZXQgY29ycmVjdCB2YWx1ZSBiZWxvdwotCQkJCQlzZWxlY3Rpb24gPSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUDsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCQotCQkJCXNldERldmVsb3BTZXJ2aWNlKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUCk7Ci0JCQkJc2V0QXNzZW1ibGVTZXJ2aWNlKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfQVNTRU1CTEUpOwotCQkJCXNldERlcGxveVNlcnZpY2Uoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVBMT1kpOwotCQkJCQotCQkJCXNldFRlc3RTZXJ2aWNlKG5ldyBCb29sZWFuKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfVEVTVCkpOwotCQkJCXNldEluc3RhbGxTZXJ2aWNlKG5ldyBCb29sZWFuKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfSU5TVEFMTCkpOwotCQkJCXNldFN0YXJ0U2VydmljZShuZXcgQm9vbGVhbihzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX1NUQVJUKSk7Ci0JCQkJc2V0QWR2YW5jZWRPcHRpb25zKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfSU5TVEFMTCk7Ci0JCQkJY2xpZW50V2lkZ2V0Xy5lbmFibGVDbGllbnRTbGlkZXIoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19TVEFSVCk7Ci0JCQkJCi0JCQkJc2V0R3JhcGhpY3Moc2VsZWN0aW9uKTsKLQkJCQkKLQkJCQkvL1ZhbGlkYXRlIHRoZSBwYWdlCi0JCQkJdmFsaWRhdGlvblN0YXRlXyA9IChuZXcgVmFsaWRhdGlvblV0aWxzKCkpLmdldE5ld1ZhbGlkYXRpb25TdGF0ZSh2YWxpZGF0aW9uU3RhdGVfLCBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfU0NBTEVfQ0hBTkdFUyk7Ci0JCQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotCQkJCQotCQkJfQkJCi0KLQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCXdpZGdldFNlbGVjdGVkKGUpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgY2xhc3MgU2VydmljZUltcGxCcm93c2VMaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0JewotCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgkJCQotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7ICAgICAKLQkJCSAgIAotCQkJICBpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9PSBudWxsKQotCQkJCSAgIG9iamVjdFNlbGVjdGlvbldpZGdldF8gPSBnZXRTZWxlY3Rpb25XaWRnZXQoKTsKLQkJCSAgCi0JCQkgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24gPSBudWxsOwotCQkJICAgSVByb2plY3QgcHJvamVjdCA9IG51bGw7Ci0JCQkgICBTdHJpbmcgY29tcG9uZW50TmFtZT0iIjsKLQkJCSAgIGludCByZXN1bHQ9RGlhbG9nLkNBTkNFTDsKLQkJCSAgIAotCQkJICAgaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldF8gaW5zdGFuY2VvZiBJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSkKLQkJICAgICAgIHsgICAgICAJCi0JCQkJIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIGxhdW5jaGFibGUgPSAoKElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlKW9iamVjdFNlbGVjdGlvbldpZGdldF8pOwotCQkJCSBsYXVuY2hhYmxlLnNldEluaXRpYWxTZWxlY3Rpb24oZ2V0T2JqZWN0U2VsZWN0aW9uKCkpOwotCQkJCSBJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0JCSAgICAgICAgIHJlc3VsdCA9IGxhdW5jaGFibGUubGF1bmNoKHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpKTsKLQkJICAgICAgICAgaWYgKHJlc3VsdCA9PSBEaWFsb2cuT0spCi0JCSAgICAgICAgIHsKLQkJICAgICAgICAJIHNlcnZpY2VJbXBsXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJICAgICAgICAgc2VydmljZUltcGxfLnNldFRleHQobGF1bmNoYWJsZS5nZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpKTsKLQkJCSAgICAgICAgIHNlcnZpY2VJbXBsXy5hZGRNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJICAgICAgICAgb2JqZWN0U2VsZWN0aW9uID0gbGF1bmNoYWJsZS5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLQkJCSAgICAgICAgIHByb2plY3QgPSBsYXVuY2hhYmxlLmdldFByb2plY3QoKTsKLQkJCSAgICAgICAgIGNvbXBvbmVudE5hbWU9IGxhdW5jaGFibGUuZ2V0Q29tcG9uZW50TmFtZSgpOwotCQkgICAgICAgICB9Ci0JCSAgICAgICB9Ci0JCQkgICBlbHNlCi0JCQkgICB7Ci0JCQkJICAgYnJvd3NlRGlhbG9nXy5zZXRUeXBlUnVudGltZVNlcnZlcihnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0JCQkJICAgYnJvd3NlRGlhbG9nXy5zZXRJbml0aWFsU2VsZWN0aW9uKGdldE9iamVjdFNlbGVjdGlvbigpKTsKLQkJCSAgICAgICByZXN1bHQgPSBicm93c2VEaWFsb2dfLm9wZW4oKTsKLQkJCSAgICAgICBpZiAocmVzdWx0ID09IERpYWxvZy5PSykKLQkJCSAgICAgICB7Ci0JCQkgICAgCSAgIHNlcnZpY2VJbXBsXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJCSAgICAgICBzZXJ2aWNlSW1wbF8uc2V0VGV4dChicm93c2VEaWFsb2dfLmdldERpc3BsYXlhYmxlU2VsZWN0aW9uU3RyaW5nKCkpOyAKLQkJCQkgICAgICAgc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkJICAgICAgIG9iamVjdFNlbGVjdGlvbiA9IGJyb3dzZURpYWxvZ18uZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0JCQkJICAgICAgIHByb2plY3QgPSBicm93c2VEaWFsb2dfLmdldFByb2plY3QoKTsKLQkJCQkgICAgICAgY29tcG9uZW50TmFtZT0gYnJvd3NlRGlhbG9nXy5nZXRDb21wb25lbnROYW1lKCk7CQkJICAgICAgIAotCQkJICAgICAgIH0KLQkJCSAgIH0KLQkJCSAgIAotCQkJICAgLy8gY2FsbCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIHRvIGNhcnJ5IG91dCBhbnkgdHJhbnNmb3JtYXRpb24gb24gdGhlIG9iamVjdFNlbGVjdGlvbgotCQkJICAgaWYgKHJlc3VsdCA9PSBEaWFsb2cuT0spCi0JCQkgICB7Ci0JCQkJICAgY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKG9iamVjdFNlbGVjdGlvbiwgcHJvamVjdCwgY29tcG9uZW50TmFtZSwgZ2V0V2ViU2VydmljZVNjZW5hcmlvKCkgIT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pOwkJCQkgICAKLQkJCSAgICAgICB2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQkJCSAgICAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7IC8vIHZhbGlkYXRlIHRoZSBwYWdlCi0JCQkgICB9CQkJICAgCi0JICAgIH0KLQl9Ci0KLQkKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZjODYzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDIyMCAgIDIxOTUzNyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS51dGlscy5BZGFwdGVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZAoteyAgICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl87Ci0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbl87Ci0gIHByaXZhdGUgaW50IHNlcnZpY2VHZW5lcmF0aW9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIGRldmVsb3BTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBkZXBsb3lTZXJ2aWNlXzsKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAKLSAgICBTdHJpbmcgdHlwZSAgICAgID0gZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0V2ViU2VydmljZVR5cGUoKTsKLSAgICBTdHJpbmcgcnVudGltZSAgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0RGVmYXVsdFJ1bnRpbWVWYWx1ZUZvciggdHlwZSApOwotCQotICAgIFN0cmluZyBmYWN0b3J5SUQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXREZWZhdWx0U2VydmVyVmFsdWVGb3IodHlwZSk7ICAgIAotICAgIHR5cGVSdW50aW1lU2VydmVyXyA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwotICAgIAotICAgIHR5cGVSdW50aW1lU2VydmVyXy5zZXRUeXBlSWQoIHR5cGUgKTsKLSAgICB0eXBlUnVudGltZVNlcnZlcl8uc2V0UnVudGltZUlkKCBydW50aW1lICk7Ci0gICAgdHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFNlcnZlcklkKCBmYWN0b3J5SUQgKTsKLSAgICAKLSAgICAvL0RlZmF1bHQgdGhlIHR5cGVJZCBmcm9tIHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgIFN0cmluZ1tdIHR5cGVJZHMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlVHlwZUJ5U2VsZWN0aW9uKGluaXRpYWxTZWxlY3Rpb25fKTsKLQotICAgIGlmICh0eXBlSWRzIT1udWxsICYmIHR5cGVJZHMubGVuZ3RoPjApCi0gICAgewotICAgICAgdHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFR5cGVJZCh0eXBlSWRzWzBdKTsKLSAgfSBlbHNlIHsKLQkgIGlmIChpbml0aWFsU2VsZWN0aW9uXyAhPSBudWxsICYmICFpbml0aWFsU2VsZWN0aW9uXy5pc0VtcHR5KCkpCi0JICB7IAotCQkgIE9iamVjdCBpbml0aWFsT2JqZWN0ID0gaW5pdGlhbFNlbGVjdGlvbl8uZ2V0Rmlyc3RFbGVtZW50KCk7IAotCQkgIC8vIGluaXRpYWxPYmplY3Qgd291bGQgbm90IGJlIG51bGwgc2luY2UgIWluaXRpYWxTZWxlY3Rpb25fLmlzRW1wdHkoKQotCQkgIGJvb2xlYW4gaGFzQWRhcHRlciA9IEFkYXB0ZXJVdGlscy5oYXNBZGFwdGVyKGluaXRpYWxPYmplY3QpOwotCQkgIGlmIChoYXNBZGFwdGVyKSB7Ci0JCQkgIFN0cmluZ0J1ZmZlciBlbnRyeWJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkgIGVudHJ5YnVmZi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pKTsKLQkJCSAgZW50cnlidWZmLmFwcGVuZCgiLyIpOwotCQkJICBlbnRyeWJ1ZmYuYXBwZW5kKCJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmphdmEiKTsKLQkJCSAgU3RyaW5nIGVudHJ5ID0gZW50cnlidWZmLnRvU3RyaW5nKCk7ICAgICAKLQkJCSAgdHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFR5cGVJZChlbnRyeSk7Ci0JCSAgfQotCSAgfQotICB9Ci0gICAgCi0gICAgc2VydmljZUdlbmVyYXRpb25fID0gZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlKCk7Ci0gICAgCQotCWRldmVsb3BTZXJ2aWNlXyA9IHNlcnZpY2VHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUDsKLQlhc3NlbWJsZVNlcnZpY2VfID0gc2VydmljZUdlbmVyYXRpb25fIDw9IFNjZW5hcmlvQ29udGV4dC5XU19BU1NFTUJMRTsKLQlkZXBsb3lTZXJ2aWNlXyA9IHNlcnZpY2VHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVQTE9ZOwotICAgIAotCWRlZmF1bHRDbGllbnRTY2FsZSgpOwotCQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIGluaXRpYWxTZWxlY3Rpb25fID0gc2VsZWN0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0SW5pdGlhbFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaW5pdGlhbFNlbGVjdGlvbl8gOwotICB9Ci0gIAotICBJUHJvamVjdCBwcm9qZWN0XzsgIAotICAKLSAgcHVibGljIElQcm9qZWN0IGdldEluaXRpYWxQcm9qZWN0KCkKLSAgewotCSAgaWYgKHByb2plY3RfPT1udWxsKQotCSAgewotCSAgICBwcm9qZWN0XyA9IGdldFByb2plY3RGcm9tT2JqZWN0U2VsZWN0aW9uKGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgIH0gIAotCSAgCi0JICByZXR1cm4gcHJvamVjdF87Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVByb2plY3QgZ2V0UHJvamVjdEZyb21PYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICBpZiAocmVzb3VyY2U9PW51bGwpIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgSVByb2plY3QgcCA9IFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHJlc291cmNlLmdldEZ1bGxQYXRoKCkpOwotICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7IAotICAgIHJldHVybiB0eXBlUnVudGltZVNlcnZlcl87Ci0gIH0KLQotICBwdWJsaWMgQm9vbGVhbiBnZXRJbnN0YWxsU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oIGdldFNjZW5hcmlvQ29udGV4dCgpLmdldEluc3RhbGxXZWJTZXJ2aWNlKCkgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRTdGFydFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRTdGFydFdlYlNlcnZpY2UoKSApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldFRlc3RTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0VGVzdFdlYlNlcnZpY2UoKSApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldFB1Ymxpc2hTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkgKTsKLSAgfQotCi0gIHB1YmxpYyBCb29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRHZW5lcmF0ZVByb3h5KCkgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRSdW5UZXN0Q2xpZW50KCkKLSAgewotICAgIHJldHVybiAgZ2V0U2NlbmFyaW9Db250ZXh0KCkuaXNMYXVuY2hTYW1wbGVFbmFibGVkKCk7ICAKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0TW9uaXRvclNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKGdldFNjZW5hcmlvQ29udGV4dCgpLmdldE1vbml0b3JXZWJTZXJ2aWNlKCkpOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldFNlcnZpY2VHZW5lcmF0aW9uKCkKLSAgewotCSAgcmV0dXJuIHNlcnZpY2VHZW5lcmF0aW9uXzsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRDbGllbnRHZW5lcmF0aW9uKCkKLSAgewotCSAgcmV0dXJuIGdldFNjZW5hcmlvQ29udGV4dCgpLmdldEdlbmVyYXRlQ2xpZW50KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldERldmVsb3BTZXJ2aWNlKCkgewotCSAgcmV0dXJuIGRldmVsb3BTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0QXNzZW1ibGVTZXJ2aWNlKCkgewotCSAgcmV0dXJuIGFzc2VtYmxlU2VydmljZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldERlcGxveVNlcnZpY2UoKSB7Ci0JICByZXR1cm4gZGVwbG95U2VydmljZV87Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1MmNhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyNCAgIDE0MjYzNSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA3MjcgICAxNDQzNTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLQotCi1wdWJsaWMgY2xhc3MgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCBleHRlbmRzIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQKLXsgICAgCi0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXJfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGluc3RhbGxTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBzdGFydFNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIHRlc3RTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICB0ZXN0Q2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBydW5UZXN0Q2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBwdWJsaXNoU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZ2VuZXJhdGVQcm94eV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGV2ZWxvcFNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGFzc2VtYmxlU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGVwbG95U2VydmljZV87IAotICAKLQlwcml2YXRlIFJlc291cmNlQ29udGV4dCAgIHJlc291cmNlQ29udGV4dF87Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb25fOyAKLSAgICAKLSAgCi0gIHB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7IAotICAgIHJldHVybiB0eXBlUnVudGltZVNlcnZlcl87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFsbFNlcnZpY2VfOyAgCi0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRTdGFydFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHN0YXJ0U2VydmljZV87ICAKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiB0ZXN0U2VydmljZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFJ1blRlc3RDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIHJ1blRlc3RDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRQdWJsaXNoU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gcHVibGlzaFNlcnZpY2VfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVQcm94eV87ICAKLSAgfQotCQotCXB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkKLQl7Ci0JCXJldHVybiByZXNvdXJjZUNvbnRleHRfOwotCX0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gZ2VuZXJhdGVQcm94eV8gVGhlIGdlbmVyYXRlUHJveHlfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5XykKLSAgewotICAgIHRoaXMuZ2VuZXJhdGVQcm94eV8gPSBnZW5lcmF0ZVByb3h5XzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHB1Ymxpc2hTZXJ2aWNlXyBUaGUgcHVibGlzaFNlcnZpY2VfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hTZXJ2aWNlKGJvb2xlYW4gcHVibGlzaFNlcnZpY2VfKQotICB7Ci0gICAgdGhpcy5wdWJsaXNoU2VydmljZV8gPSBwdWJsaXNoU2VydmljZV87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBpbnN0YWxsU2VydmljZV8gVGhlIGluc3RhbGxTZXJ2aWNlXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsU2VydmljZShib29sZWFuIGluc3RhbGxTZXJ2aWNlXykKLSAgewotICAgIHRoaXMuaW5zdGFsbFNlcnZpY2VfID0gaW5zdGFsbFNlcnZpY2VfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gc3RhcnRTZXJ2aWNlXyBUaGUgc3RhcnRTZXJ2aWNlXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGFydFNlcnZpY2UoYm9vbGVhbiBzdGFydFNlcnZpY2VfKQotICB7Ci0gICAgdGhpcy5zdGFydFNlcnZpY2VfID0gc3RhcnRTZXJ2aWNlXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHRlc3RTZXJ2aWNlXyBUaGUgdGVzdFNlcnZpY2VfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RTZXJ2aWNlKGJvb2xlYW4gdGVzdFNlcnZpY2VfKQotICB7Ci0gICAgdGhpcy50ZXN0U2VydmljZV8gPSB0ZXN0U2VydmljZV87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gdGVzdFNlcnZpY2VfIFRoZSB0ZXN0U2VydmljZV8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UnVuVGVzdENsaWVudChib29sZWFuIHJ1blRlc3RDbGllbnRfKQotICB7Ci0gICAgdGhpcy5ydW5UZXN0Q2xpZW50XyA9IHJ1blRlc3RDbGllbnRfOwotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIHR5cGVSdW50aW1lU2VydmVyXyBUaGUgdHlwZVJ1bnRpbWVTZXJ2ZXJfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl8pCi0gIHsKLSAgICB0aGlzLnR5cGVSdW50aW1lU2VydmVyXyA9IHR5cGVSdW50aW1lU2VydmVyXzsKLSAgfQotCQotCXB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dChSZXNvdXJjZUNvbnRleHQgcmMpCi0JewotCQlyZXNvdXJjZUNvbnRleHRfID0gcmM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldE9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCSAgIHNlbGVjdGlvbl8gPSBzZWxlY3Rpb247CQotCX0JCi0JCi0JcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0JewotCSAgIHJldHVybiBzZWxlY3Rpb25fOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wU2VydmljZSgpIHsKLQkJcmV0dXJuIGRldmVsb3BTZXJ2aWNlXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wU2VydmljZShib29sZWFuIGRldmVsb3BTZXJ2aWNlKSB7Ci0JCXRoaXMuZGV2ZWxvcFNlcnZpY2VfID0gZGV2ZWxvcFNlcnZpY2U7Ci0JfQkKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZVNlcnZpY2UoKSB7Ci0JCXJldHVybiBhc3NlbWJsZVNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFzc2VtYmxlU2VydmljZShib29sZWFuIGFzc2VtYmxlU2VydmljZSkgewotCQl0aGlzLmFzc2VtYmxlU2VydmljZV8gPSBhc3NlbWJsZVNlcnZpY2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95U2VydmljZSgpIHsKLQkJcmV0dXJuIGRlcGxveVNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlcGxveVNlcnZpY2UoYm9vbGVhbiBkZXBsb3lTZXJ2aWNlKSB7Ci0JCXRoaXMuZGVwbG95U2VydmljZV8gPSBkZXBsb3lTZXJ2aWNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldFRlc3RDbGllbnQoKSB7Ci0JCXJldHVybiB0ZXN0Q2xpZW50XzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUZXN0Q2xpZW50KGJvb2xlYW4gdGVzdENsaWVudF8pIHsKLQkJdGhpcy50ZXN0Q2xpZW50XyA9IHRlc3RDbGllbnRfOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZpY2VJbXBsU2VsZWN0aW9uRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQyMTBhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTAgICAxMzU0NDEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTggICAxMzYzMzUgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQWJzdHJhY3RTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuUGFnZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cgZXh0ZW5kcyBBYnN0cmFjdFNlbGVjdGlvbkRpYWxvZyB7Ci0KLQlUeXBlUnVudGltZVNlcnZlciB0cnNfOwotCVN0cmluZyB0aXRsZVRleHRfOwotCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0JCi0JcHVibGljIFNlcnZpY2VJbXBsU2VsZWN0aW9uRGlhbG9nKFNoZWxsIHBhcmVudCwgUGFnZUluZm8gcGFnZUluZm8pIHsKLQkJc3VwZXIocGFyZW50LCBwYWdlSW5mbyk7Ci0JCXRpdGxlVGV4dF8gPSBwYWdlSW5mby5nZXRQYWdlTmFtZSgpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBjYWxsU2V0dGVycygpCi0JewkJCi0JCSgoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpKS5zZXRUeXBlUnVudGltZVNlcnZlcih0cnNfKTsKLQkJKChPYmplY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLnNldEluaXRpYWxTZWxlY3Rpb24oc2VsZWN0aW9uXyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIHRycykKLQl7Ci0JCXRyc18gPSB0cnM7IAotCQkKLQkJLy8gc2V0IGRpYWxvZyB0aXRsZSB0ZXh0IGJhc2VkIG9uIHRoZSB3ZWIgc2VydmljZSBzY2VuYXJpbwotCQlpZiAodHJzICE9IG51bGwpCi0JCXsKLQkJICAgU3RyaW5nIHR5cGVJZCA9IHRycy5nZXRUeXBlSWQoKTsKLQkJICAgaW50IHNjZW5hcmlvID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHR5cGVJZCk7Ci0JCSAgIAotCQkgICBpZiAoc2NlbmFyaW8gPT0gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQKQotCQkgICB7Ci0JCQkgIHRpdGxlVGV4dF8gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuRElBTE9HX1RJVElMRV9TRVJWSUNFX0lNUExfU0VMRUNUSU9OOwotCQkgICB9Ci0JCSAgIGVsc2UgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQotCQkgICB7Ci0JCQkgICB0aXRsZVRleHRfID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRJQUxPR19USVRJTEVfU0VSVklDRV9ERUZfU0VMRUNUSU9OOwotCQkgICB9Ci0JCX0gICAgICAgICAgICAgCSAgIAotCX0KLQkgCi0JICBwcm90ZWN0ZWQgdm9pZCBzZXRTaGVsbFN0eWxlKGludCBuZXdTaGVsbFN0eWxlKQotCSAgewotCSAgICBzdXBlci5zZXRTaGVsbFN0eWxlKCBuZXdTaGVsbFN0eWxlIHwgU1dULlJFU0laRSApOyAgCi0JICB9Ci0KLQkgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIG5ld1NoZWxsKQotCSAgewotCSAgICBuZXdTaGVsbC5zZXRUZXh0KHRpdGxlVGV4dF8pOyAgIAotCSAgICBzdXBlci5jb25maWd1cmVTaGVsbChuZXdTaGVsbCk7Ci0JICB9Ci0KLQkgIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheWFibGVTZWxlY3Rpb25TdHJpbmcoKSB7Ci0JCSAgCi0JCSByZXR1cm4gKChPYmplY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCk7Ci0JfQotCSAgCi0JICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkgewotCQkgIHJldHVybiAoKE9iamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0JfQotCSAgCi0JICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpewotCQkgIHJldHVybiAoKE9iamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0UHJvamVjdCgpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKXsKLQkJICByZXR1cm4gKChPYmplY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldENvbXBvbmVudE5hbWUoKTsgIAotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQkgIHsKLQkJICBzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAKLQkgIH0KLQkgIAotCSAgcHJvdGVjdGVkIFBvaW50IGdldEluaXRpYWxTaXplKCkKLQkgIHsJCi0JCSAgcmV0dXJuICgoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpKS5nZXRXaWRnZXRTaXplKCk7CSAgICAKLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0V4cG9ydFdTV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvRXhwb3J0V1NXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMDY3YTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvRXhwb3J0V1NXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlB1Ymxpc2hXU1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci0KLQotcHVibGljIGNsYXNzIEV4cG9ydFdTV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIHByaXZhdGUgQ2FuRmluaXNoUmVnaXN0cnkgICBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSAgICAgIHdpZGdldFJlZ2lzdHJ5OwotICBwcml2YXRlIERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YU1hcHBpbmdSZWdpc3RyeTsKLSAgcHJpdmF0ZSBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWc7Ci0KLSAgcHVibGljIEV4cG9ydFdTV2lkZ2V0QmluZGluZygpCi0gIHsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcgPSBuZXcgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQoKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIFNlcXVlbmNlRnJhZ21lbnQgcm9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgICAgICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIldTRXhwb3J0IikpOwotICAgICAgICAgICAgICAgcm9vdC5hZGQocHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnKTsKLSAgICAgICAgICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpLCAiIikpOwotICAgICAgICAgICAgICAgcmV0dXJuIHJvb3Q7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICAgIHRoaXMuY2FuRmluaXNoUmVnaXN0cnkgPSBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJDYW5GaW5pc2godGhpcy5jYW5GaW5pc2hSZWdpc3RyeSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmRhdGFNYXBwaW5nUmVnaXN0cnkgPSBkYXRhUmVnaXN0cnk7Ci0gICAgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKHRoaXMuZGF0YU1hcHBpbmdSZWdpc3RyeSk7Ci0gICAgCi0gICAgLy8gUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHJpdmF0ZVVEREkiLCBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gTGF1bmNoV2ViU2VydmljZXNFeHBsb3JlckNvbW1hbmQKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiRm9yY2VMYXVuY2hPdXRzaWRlSURFIiwgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeS5hZGRNYXBwaW5nKFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIkxhdW5jaE9wdGlvbnMiLCBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmNsYXNzKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgIHRoaXMud2lkZ2V0UmVnaXN0cnkgPSB3aWRnZXRSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyh0aGlzLndpZGdldFJlZ2lzdHJ5KTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCgiV1NFeHBvcnQiLCAKLSAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19QVUJMSVNILAotICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfUFVCTElTSCwKLSAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgewotICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBuZXcgUHVibGlzaFdTV2lkZ2V0KHRydWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvUHVibGlzaFdTRExXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9QdWJsaXNoV1NETFdpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQwZjM4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9QdWJsaXNoV1NETFdpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5iaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBQdWJsaXNoV1NETFdpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwotewotICBwdWJsaWMgUHVibGlzaFdTRExXaWRnZXRCaW5kaW5nKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbXBsZUZyYWdtZW50KCk7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKSwgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9TZXJ2ZXJXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9TZXJ2ZXJXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMmMxZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvU2VydmVyV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwNCAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjA0IDEyMTYwNSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgICAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDA3ICAgMTM1NDE1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MTAgICAxMzU1NjIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTcgICAxMzYzOTEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjUgICAxMzgwNTIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUzMCAgIDE0NDM1OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MDggICAxNDU1Mjkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjA5ICAgIDg2NDIxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcyNyAgIDE0NDM1NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA3MjggICAxNDU0MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODEwICAgMTM1Mzk1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBFbmFibGUgV1RQIFdlYiBzZXJ2aWNlIGZyYW1ld29yayBvcGVuaW5nIEphdmEgZWRpdG9yCi0gKiAyMDA2MDgyMSAgIDE1MzgzMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQWxsb3cgdGhlIFdlYiBTZXJ2aWNlIFRlc3QgZXh0ZW5zaW9uIHBvaW50IHRvIHNwZWNpZnkgdGhlIHN1cHBvcnRlZCBjbGllbnQgcnVudGltZQotICogMjAwNjA4MjUgICAxNTUxMTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA1MDIgICAxODAzMDQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNzEwMzEgICAxNDA1MTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNzEyMTgJICAyMDAxOTMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwODAzMjUgICAxODQ3NjEgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ29tcHV0ZUVuZHBvaW50Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVNb25pdG9yQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhLlNlcnZlckluc3RUb0lTZXJ2ZXJUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkZpbmlzaEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uU2NlbmFyaW9DbGVhbnVwQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uLkNsaWVudFJvb3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuZXh0ZW5zaW9uLlByZUNsaWVudERldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5zZWxlY3Rpb24uU2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHVibGlzaFdTV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0V2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuRmluaXNoRGVmYXVsdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5UZXN0RGVmYXVsdGluZ0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV1NETFRlc3RMYXVuY2hDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uLlByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uLlNlcnZpY2VSb290RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMucnVudGltZS5TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdC5MYXVuY2hGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0LlNlcnZpY2VUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdC5TZXJ2aWNlVGVzdFdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0LldlYlNlcnZpY2VUZXN0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLmNvbW1hbmQuT3BlbkVkaXRvckNvbW1hbmQ7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJXaWRnZXRCaW5kaW5nIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsKLSAgcHJpdmF0ZSBDYW5GaW5pc2hSZWdpc3RyeSAgIGNhbkZpbmlzaFJlZ2lzdHJ5XzsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSAgICAgIHdpZGdldFJlZ2lzdHJ5XzsKLSAgcHJpdmF0ZSBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFNYXBwaW5nUmVnaXN0cnlfOwotICBwcml2YXRlIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50IHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZzsKLQotICBwdWJsaWMgU2VydmVyV2lkZ2V0QmluZGluZygpCi0gIHsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcgPSBuZXcgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudCgpOyAgCi0gICAgICAgICAgICAgfQotICAgICAgICAgICB9OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpCi0gIHsKLSAgICBjYW5GaW5pc2hSZWdpc3RyeV8gPSBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJDYW5GaW5pc2goY2FuRmluaXNoUmVnaXN0cnlfKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYyksIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7Ci0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeV8gPSBkYXRhUmVnaXN0cnk7Ci0KLSAgICAvLyBCZWZvcmUgU2VydmVyV2l6YXJkV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUdlbmVyYXRpb24iLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOyAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ3JlYXRlTW9uaXRvckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDb21wdXRlRW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRHZW5lcmF0aW9uIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbnN0YWxsU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0KLSAgICAKLSAgICAvLyBBZnRlciBTZXJ2ZXJXaXphcmRXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENyZWF0ZU1vbml0b3JDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENvbXB1dGVFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiVGVzdENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgICAKLSAgICAvLyBCZWZvcmUgT2JqZWN0U2VsZWN0aW9uV2lkZ2V0ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdE5hbWUiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VFYXJQcm9qZWN0TmFtZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudFR5cGUiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VOZWVkRUFSIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRDb21wb25lbnRUeXBlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsgLy9qdmgKLSAgICAgICAgICAgICAgICAKLSAgICAvLyBBZnRlciBTZXJ2ZXJXaXphcmRXaWRnZXQgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlUnVudGltZUlkIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRSdW50aW1lSWQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU2VydmljZVByb2plY3ROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlNlcnZpY2VFYXJQcm9qZWN0TmFtZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU2VydmljZU5lZWRFQVIiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50TmVlZEVBUiIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0KLSAgICAvLyBNYXAgZnJhZ21lbnRzIHRoYXQgZGVwZW5kIG9uIGRhdGEuICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQuY2xhc3MpOwotICAgIAotICAgIC8vIENyZWF0ZU1vbml0b3JDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ3JlYXRlTW9uaXRvckNvbW1hbmQuY2xhc3MsICJNb25pdG9yZWRQb3J0IiwgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ3JlYXRlTW9uaXRvckNvbW1hbmQuY2xhc3MsICJNb25pdG9yZWRQb3J0IiwgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyBDb21wdXRlRW5kcG9pbnRDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcywgIkVuZHBvaW50IiwgU2VydmljZVRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbXB1dGVFbmRwb2ludENvbW1hbmQuY2xhc3MsICJFbmRwb2ludCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbXB1dGVFbmRwb2ludENvbW1hbmQuY2xhc3MsICJFbmRwb2ludCIsIENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gIENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZC5jbGFzcywgIkVuZHBvaW50IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gMTQ1NDI2Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb3h5RW5kcG9pbnQiLCBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotCi0gICAgLy9TZXJ2aWNlVGVzdFdpZGdldCBtYXBwaW5ncyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDcmVhdGVNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcyk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkIiwgU2VydmljZVRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUZXN0RmFjaWxpdGllcyIsIFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgU2VydmljZVRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzLCAiTGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZVRlc3RXaWRnZXQuY2xhc3MsICJMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSIsIEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZVRlc3RXaWRnZXQuY2xhc3MsICJMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSIsIFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MpOwotICAgICAgICAKLSAgICAvLyBCZWZvcmUgQ2xpZW50IFRlc3Qgd2lkZ2V0LgotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIAotICAgIC8vIEJlZm9yZSBDbGllbnRUZXN0V2lkZ2V0Ci0gICAgICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJGb2xkZXIiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJKc3BGb2xkZXIiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJSdW5DbGllbnRUZXN0IixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiTWV0aG9kcyIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vIEFmdGVyIENsaWVudFRlc3RXaWRnZXQgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlNhbXBsZVByb2plY3RFQVIiLEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJGb2xkZXIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJKc3BGb2xkZXIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiTWV0aG9kcyIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RTZXJ2aWNlIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJUZXN0SUQiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIklzVGVzdFdpZGdldCIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAvLyBQdWJsaXNoV1NXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHVibGljVURESSIsIG51bGwpOwotICAgIAotICAgIC8vIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHJpdmF0ZVVEREkiLCBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gTGF1bmNoV2ViU2VydmljZXNFeHBsb3JlckNvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJQdWJsaXNoVG9Qcml2YXRlVURESSIsIExhdW5jaEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJQdWJsaXNoVG9QdWJsaWNVRERJIiwgTGF1bmNoRnJhZ21lbnQuY2xhc3MpOwotICAgIC8vIFRPRE8gTmVlZCBkZWZhdWx0cyBmb3IgdGhlc2UgcHJvcGVydGllcy4KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJGb3JjZUxhdW5jaE91dHNpZGVJREUiLCBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJMYXVuY2hPcHRpb25zIiwgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5jbGFzcyk7Ci0gIAotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gICAKLSAgICB3aWRnZXRSZWdpc3RyeV8gPSB3aWRnZXRSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyh3aWRnZXRSZWdpc3RyeV8pOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiU2VydmVyV2l6YXJkV2lkZ2V0IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19QUk9KRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19TRVJWSUNFLAotCQkJCSAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0JCQkJICAgICAgICB7Ci0JCQkJICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkJCSAgICAgICAgICB7Ci0JCQkJICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2ZXJXaXphcmRXaWRnZXQoIHRydWUsIGZhbHNlICk7Ci0JCQkJICAgICAgICAgIH0KLQkJCQkgICAgICAgIH0gKTsKLQotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIlRlc3RTZXJ2aWNlIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTVEVTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmljZVRlc3RXaWRnZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIAotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkNsaWVudFRlc3RXaWRnZXQiLCAKLSAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NBTVBMRSwKLSAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfU0FNUExFLAotICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRUZXN0V2lkZ2V0KCk7IAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJQdWJsaXNoIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19QVUJMSVNILAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19QVUJMSVNILAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQdWJsaXNoV1NXaWRnZXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgfQotICAgICAgCi0gIHByaXZhdGUgY2xhc3MgQ2xpZW50RnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQKLSAgewotICAgIGJvb2xlYW4gZ2VuUHJveHlfID0gZmFsc2U7Ci0gICAgCi0gICAgcHVibGljIENsaWVudEZyYWdtZW50KCkKLSAgICB7ICAgICAgCi0gICAgICBzZXRDb25kaXRpb24oIG5ldyBDb25kaXRpb24oKSAKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuUHJveHlfOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAKLSAgICAgIFNlcXVlbmNlRnJhZ21lbnQgY2xpZW50Um9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgICAKLSAgICAgIGNsaWVudFJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCggZmFsc2UgKSwgIiIpKTsKLSAgICAgIC8vY2xpZW50Um9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBDbGllbnRTZXJ2ZXJEZXBsb3lhYmxlQ29uZmlnQ29tbWFuZCgpLCAiIikpOyAvL05vdGU6IGFkZGVkIGhlcmUgZm9yIGNsaWVudCAgICAgCi0gICAgICAvL2NsaWVudFJvb3QuYWRkKCBuZXcgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQoKSApOwotICAgICAgY2xpZW50Um9vdC5hZGQoIG5ldyBDbGllbnRSb290RnJhZ21lbnQoKSApOwotICAgICAgY2xpZW50Um9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICAKLSAgICAgIHNldFRydWVGcmFnbWVudCggY2xpZW50Um9vdCApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KCBib29sZWFuIGdlblByb3h5ICkKLSAgICB7Ci0gICAgICBnZW5Qcm94eV8gPSBnZW5Qcm94eTsKLSAgICB9Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgICB7Ci0gICAgICAvLyBNYXAgdGhlIG91dHB1dCBvZiB0aGUgc2VydmljZSBzY2VuYXJpbyB0byB0aGUgY2xpZW50IHNjZW5hcmlvLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVySW5zdGFuY2VJZCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0JICAKLSAgICAgIAotICAgICAgLy8gU2V0dXAgdGhlIFByZUNsaWVudERldmVsb3BDb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIG51bGwpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdFR5cGUiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZVR5cGUiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VDbGllbnQiLCBudWxsICk7ICAgICAgCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotICB7Ci0gICAgcHVibGljIFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50KCkKLSAgICB7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNjZW5hcmlvQ2xlYW51cENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICAKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCAobmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsgIAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoICJTZXJ2ZXJXaXphcmRXaWRnZXQiICkgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCgpLCAiIiApKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNlcnZpY2VSb290RnJhZ21lbnQoKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kKCksICIiICkpOwotICAgICAgYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ3JlYXRlTW9uaXRvckNvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IENvbXB1dGVFbmRwb2ludENvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNlcnZpY2VUZXN0RnJhZ21lbnQoICJUZXN0U2VydmljZSIpICk7Ci0gICAgICBhZGQoIG5ldyBDbGllbnRGcmFnbWVudCgpICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudChuZXcgVGVzdERlZmF1bHRpbmdGcmFnbWVudCgpLCIiKSk7IAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQobmV3IENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgQ2xpZW50VGVzdEZyYWdtZW50KCAiQ2xpZW50VGVzdFdpZGdldCIpICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggIlB1Ymxpc2giKSApOwotICAgICAgYWRkKHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZyk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IE9wZW5FZGl0b3JDb21tYW5kKCksICIiKSApOwotICAgICAgYWRkKG5ldyBMYXVuY2hGcmFnbWVudCgpKTsKLSAgICAgIGFkZChuZXcgRmluaXNoRnJhZ21lbnQoKSk7Ci0gICAgICAKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2NlbmFyaW9DbGVhbnVwQ29tbWFuZCgpLCAiIiApKTsKLSAgICB9Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgICB7Ci0gICAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJEYXRhTWFwcGluZ3MoZGF0YU1hcHBpbmdSZWdpc3RyeV8pOyAgIAotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7ICAgICAgICAgICAgCi0KLSAgICAgIC8vIE1hcCBTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCB0byBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJUeXBlUnVudGltZVNlcnZlciIsIG51bGwpOwotICAgICAgCi0gICAgICAvLyBNYXAgU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgdG8gU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFByb2plY3QiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbnN0YWxsU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiUHVibGlzaFRvUHVibGljVURESSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAvLyBLU0MKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRlcGxveVNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCi0gICAgICAKLSAgICAgIC8vTWFwIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQgdG8gU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxTZWxlY3Rpb24iLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFByb2plY3QiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SW5pdGlhbFByb2plY3QiLCBudWxsKTsgICAgICAKLQotICAgICAgLy9NYXAgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCB0byBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICAKLSAgICAgIC8vdG8gdGhlIHRlc3Qgd2l6YXJkCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZpY2VUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBXU0RMVGVzdExhdW5jaENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsgICAgIAotICAgICAgCi0gICAgICAvLyBNYXAgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUnVudGltZUlkIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRSdW50aW1lSWQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0MkVBUlByb2plY3QiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRWFyUHJvamVjdE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VFYXJDb21wb25lbnROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW50aW1lMkNsaWVudFR5cGVzIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VKMkVFVmVyc2lvbiIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SjJFRVZlcnNpb24iLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RnJhZ21lbnQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VOZWVkRUFSIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFByb2plY3QiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgCi0gICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlckV4dGVuc2lvbkZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBTZXJ2aWNlVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaCIsIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50LmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIixXU0RMVGVzdExhdW5jaENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIAotCSAgICAvLyBTZXR1cCB0aGUgUHJlU2VydmljZURldmVsb3BDb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveVNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIG5ldyBTZWxlY3Rpb25UcmFuc2Zvcm1lcigpICk7Ci0JCQotCSAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUNvbXBvbmVudFR5cGUiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGVUeXBlIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VSdW50aW1lSWQiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VKMkVFVmVyc2lvbiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdEVBUiIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlVHlwZSIsIG51bGwgKTsgICAgICAKLQkJCQotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzICk7Ci0gCi0gICAgICAvLyBNYXAgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2FuUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUiLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOyAKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgbnVsbCk7Ci0gICAJICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdENsaWVudCIsIFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgbnVsbCk7Ci0gICAJICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBudWxsKTsKLSAgIAkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBudWxsKTsKLQotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVySW5zdGFuY2VJZCIsIENyZWF0ZU1vbml0b3JDb21tYW5kLmNsYXNzKTsKLQotICAgICAgLy8gTWFwIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQgZm9yIFNlcnZlclN0YXJ0KCkKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdEVBUiIsIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0TmFtZSIsIG51bGwpOwotCi0gICAgICAvLyBNQVAgcG9zdCBzZXJ2ZXIgY29uZmlnIGNhbGwKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0TmFtZSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRTZXJ2ZXJJbnN0YW5jZSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFeGlzdGluZ1NlcnZlcklkIiwgbnVsbCk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ2FuR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2V0RW5kcG9pbnRNZXRob2QiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotCSAgCi0gICAgICAvLyBNYXAgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclNlcnZlciIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzLCJTZXJ2aWNlU2VydmVyVHlwZUlkIiwgbnVsbCk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlckluc3RhbmNlIiwgTWFuYWdlU2VydmVyU3RhcnRVcENvbW1hbmQuY2xhc3MsIlNhbXBsZUV4aXN0aW5nU2VydmVyIiwgbmV3IFNlcnZlckluc3RUb0lTZXJ2ZXJUcmFuc2Zvcm1lcigpKTsgICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJSdW5DbGllbnRUZXN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgICAgCi0gICAgCi0gICAgICAvLyBNYXAgT3BlbkVkaXRvckNvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgT3BlbkVkaXRvckNvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgICAgT3BlbkVkaXRvckNvbW1hbmQuY2xhc3MgKTsgICAgICAKLSAgICAgIAotICAgICAgLy9NYXAgRmluaXNoIENvbW1hbmQgCi0gICAgICAKLSAgICAgIAotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvcnVudGltZS9TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM1MGIzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvcnVudGltZS9TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMxNSAgIDEzMTk2MyByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDE4ICAgMTI5Njg4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjcgICAxMjY3ODAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNyAgIDEzODA1OCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUyMyAgIDEzMzcxNCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUyNSAgIDE0Mzg0MyBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDkwNSAgIDE1NjIzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgSGFuZGxpbmcgcHJvamVjdHMgd2l0aCBubyB0YXJnZXQgcnVudGltZQotICogMjAwNzAzMTkJICAxNTk0NTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uIGFkZGVkIGluIHNvbWUgbnVsbCBjaGVja3MKLSAqIDIwMDcxMjEyCSAgMjAwMTkzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDgwMzI2ICAgMTcxNzA1IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nLCBpbXByb3ZlIEFudFRhc2sgZXJyb3JzIHJlcG9ydAotICogMjAwODAzMjYgICAyMjEzNjQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNDAyICAgMjI1MDMyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMucnVudGltZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldE1hdGNoZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkRlZmF1bHRpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlByb2plY3RUb3BvbG9neUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuRmFjZXRNYXRjaENhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kCi17CQotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGdlbmVyYXRlUHJveHlfPXRydWU7IC8vanZoCi0gIAotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHNlcnZpY2VJZHNfOwotICBwcml2YXRlIGJvb2xlYW4gc2VydmljZUlkc0ZpeGVkXyA9IGZhbHNlOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUnVudGltZUlkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZUVhclByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNvbXBvbmVudFR5cGVfOwotICBwcml2YXRlIElQcm9qZWN0IGluaXRpYWxQcm9qZWN0XzsKLSAgcHJpdmF0ZSBib29sZWFuIHNlcnZpY2VOZWVkRUFSXyA9IHRydWU7Ci0gIHByaXZhdGUgRmFjZXRNYXRjaGVyIHNlcnZpY2VGYWNldE1hdGNoZXJfOwotCi0gIHB1YmxpYyBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotICAKLSAgCi0gIC8qKgotICAgKiBEZWZhdWx0cyB0aGUgZm9sbG93aW5nIGJpdHMgb2YgaW5mb3JtYXRpb24gaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKLSAgICogc2VydmljZVJ1bnRpbWVJZF8gOiB0aGUgc2VydmljZVJ1bnRpbWVJZC4gTXVzdCBiZSBkZWZhdWx0ZWQgdG8gbm9uLWVtcHR5IFN0cmluZy4KLSAgICogc2VydmljZUlkc18ucnVudGltZUlkXzogdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgaWQuIE11c3QgYmUgZGVmYXVsdGVkIHRvIG5vbi1lbXB0eSBTdHJpbmcuCi0gICAqIHNlcnZpY2VQcm9qZWN0TmFtZV8gOiB0aGUgbmFtZSBvZiB0aGUgc2VydmljZSBwcm9qZWN0LiBNdXN0IGJlIG5vbi1lbXB0eS4gTWF5IG9yIG1heSBub3QgZXhpc3QuCi0gICAqIHNlcnZpY2VDb21wb25lbnRUeXBlXzogdGhlIGlkIG9mIHRoZSBzZXJ2aWNlIHByb2plY3QgdGVtcGxhdGUuIE11c3QgYmUgZW1wdHkgaWYgdGhlIHNlcnZpY2UKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IGV4aXN0cy4gTXVzdCBiZSBub24tZW1wdHkgb2YgdGhlIHNlcnZpY2UgcHJvamVjdCBkb2VzIG5vdCBleGlzdC4KLSAgICogc2VydmljZUlkc18uc2VydmVySWRfOiB0aGUgc2VydmVyIHR5cGUgaWQuIE1heSBiZSBhbiBlbXB0eSBTdHJpbmcgaWYgdGhlIGRlZmF1bHRlZCBXZWIgc2VydmljZSBydW50aW1lCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgcmVxdWlyZSBhIHNlcnZlci4KLSAgICogc2VydmljZUlkc18uc2VydmVySW5zdGFuY2VJZF86IHRoZSBzZXJ2ZXIgaWQuIE1heSBiZSBudWxsIG9yIGFuIGVtcHR5IFN0cmluZy4KLSAgICogc2VydmljZU5lZWRFQVJfOiB0cnVlIGlmIGFuIEVBUiBpcyBuZWVkZWQuIEZhbHNlIG90aGVyd2lzZS4KLSAgICogc2VydmljZUVhclByb2plY3ROYW1lXzogdGhlIHNlcnZpY2UgRUFSIHByb2plY3QuIE11c3QgYmUgZW1wdHkgaWYgdGhlIHNlcnZpY2VOZWVkRUFSXyBpcyBmYWxzZS4KLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBub24tZW1wdHkgaWYgdGhlIHNlcnZpY2VOZWVkRUFSXyBpcyB0cnVlLgotICAgKiBEZWZhdWx0cyB0aGUgcGFyYWxsZWwgaW5mb3JtYXRpb24gb24gdGhlIGNsaWVudC1zaWRlIGlmIG5lZWRlZCAKLSAgICogKEBzZWUgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kI2V4ZWN1dGUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAgIHRyeQotICAgIHsgICAgCQotICAgICAKLSAgICAgLy8qKlN0ZXAgMSoqIERlZmF1bHQgdGhlIHNlcnZpY2VSdW50aW1lIGFuZCB0aGUgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICAgLy9zZXJ2aWNlSWRzRml4ZWRfIGlzIHNldCB0byB0cnVlIGZvciB0aGUgQW50IHNjZW5hcmlvLiBJdCdzIGFsd2F5cyBmYWxzZSBmb3IgdGhlIHdpemFyZAotICAgICAvL3NjZW5hcmlvcy4gICAgCQotICAgICBpZiAoc2VydmljZUlkc0ZpeGVkXykKLSAgICAgewotICAgICAgIC8vU2V0IHRoZSBzZXJ2aWNlUnVudGltZSBiYXNlZCBvbiB0aGUgcnVudGltZSBhbmQgc2VydmVyLgotICAgICAgIC8vSWYgdXNlciBzZXQgYSBzZXJ2aWNlIHByb2plY3QgdXNlIHRoYXQgYXMgaW5pdGlhbCBwcm9qZWN0IG90aGVyd2lzZSBkZWZhdWx0IGZyb20gaW5pdGlhbCBzZWxlY3Rpb24uCi0gICAgCSBpZiAoc2VydmljZVByb2plY3ROYW1lXyAhPSBudWxsKSAKLSAgICAJIHsKLSAgICAJCSBpbml0aWFsUHJvamVjdF8gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3Qoc2VydmljZVByb2plY3ROYW1lXyk7Ci0gICAgCQkgCi0gICAgCQkgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IGdldERlZmF1bHRSdW50aW1lKGluaXRpYWxQcm9qZWN0Xywgc2VydmljZUlkc18uZ2V0VHlwZUlkKCksIGZhbHNlLCBzZXJ2aWNlSWRzXy5nZXRTZXJ2ZXJJZCgpKTsKLSAgICAgICAgICAgICBzZXJ2aWNlRmFjZXRNYXRjaGVyXyA9IGRydC5nZXRGYWNldE1hdGNoZXIoKTsKLSAgICAJICAgICBzZXJ2aWNlUHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7Ci0gICAgCSAgICAgc2VydmljZVJ1bnRpbWVJZF8gPSBkcnQuZ2V0UnVudGltZUlkKCk7ICAgICAgIAotCi0gICAgCSAgICAgICBpZiAoc2VydmljZVJ1bnRpbWVJZF8gIT0gbnVsbCkKLSAgICAJICAgICAgIHsKLSAgICAJICAgIAkgICBzZXJ2aWNlSWRzXy5zZXRSdW50aW1lSWQoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkXykuZ2V0UnVudGltZSgpCi0gICAgCSAgICAgIAkgICAgICAgICAuZ2V0SWQoKSk7Ci0gICAgCSAgICAgICB9Ci0gICAgCSB9Ci0gICAgCSBlbHNlCi0gICAgCSB7Ci0gICAgCQkgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IGdldERlZmF1bHRTZXJ2aWNlUnVudGltZUZvckZpeGVkUnVudGltZUFuZFNlcnZlcihpbml0aWFsUHJvamVjdF8pOyAgCi0gICAgCSAgICAgc2VydmljZUZhY2V0TWF0Y2hlcl8gPSBkcnQuZ2V0RmFjZXRNYXRjaGVyKCk7Ci0gICAgCSAgICAgc2VydmljZVByb2plY3ROYW1lXyA9IGRydC5nZXRQcm9qZWN0TmFtZSgpOwotICAgIAkgICAgIHNlcnZpY2VSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOwkgCi0gICAgCSB9ICAgCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgLy8gU2V0IHRoZSBydW50aW1lIGJhc2VkIG9uIHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBnZXREZWZhdWx0UnVudGltZShpbml0aWFsUHJvamVjdF8sIHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpLCBmYWxzZSwgc2VydmljZUlkc18uZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgc2VydmljZUZhY2V0TWF0Y2hlcl8gPSBkcnQuZ2V0RmFjZXRNYXRjaGVyKCk7Ci0gICAgICAgc2VydmljZVByb2plY3ROYW1lXyA9IGRydC5nZXRQcm9qZWN0TmFtZSgpOwotICAgICAgIHNlcnZpY2VSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOyAgICAgICAKLQotICAgICAgIGlmIChzZXJ2aWNlUnVudGltZUlkXyAhPSBudWxsKQotICAgICAgIHsKLSAgICAJICAgc2VydmljZUlkc18uc2V0UnVudGltZUlkKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZF8pLmdldFJ1bnRpbWUoKQotICAgIAkJICAgICAgICAgLmdldElkKCkpOyAKLSAgICAgICB9IAotICAgICB9Ci0gICAgIAotICAgICAvLyoqU3RlcCAyKiogRGVmYXVsdCB0aGUgc2VydmljZSBwcm9qZWN0IGlmIGl0IHdhcyBub3QgYWxyZWFkeSBkZWZhdWx0ZWQgCi0gICAgIC8vYXMgcGFydCBvZiBkZWZhdWx0aW5nIHRoZSBXZWIgc2VydmljZSBydW50aW1lLgotICAgICBpZiAoc2VydmljZVByb2plY3ROYW1lXyA9PSBudWxsKQotICAgICB7Ci0gICAgICAgLy8gUHJvamVjdCBuYW1lIGRpZCBub3QgZ2V0IHNldCB3aGVuIHRoZSBydW50aW1lIHdhcyBzZXQsIHNvIHNldCBpdCBub3cKLSAgICAgICBzZXJ2aWNlUHJvamVjdE5hbWVfID0gZ2V0RGVmYXVsdFNlcnZpY2VQcm9qZWN0TmFtZSgpOwotICAgICB9Ci0KLSAgICAgLy8qKlN0ZXAgMyoqIERlZmF1bHQgdGhlIHNlcnZpY2UgcHJvamVjdCB0eXBlLgotICAgICBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWVfKTsgCi0gICAgIGlmICghc2VydmljZVByb2plY3QuZXhpc3RzKCkpCi0gICAgIHsKLSAgICAgICAvLyBTZXQgdGhlIHByb2plY3QgdGVtcGxhdGUKLSAgICAgICBzZXJ2aWNlQ29tcG9uZW50VHlwZV8gPSBnZXREZWZhdWx0U2VydmljZVByb2plY3RUZW1wbGF0ZSgpOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgIC8vU2V0IGl0IHRvIGFuIGVtcHR5IFN0cmluZwotICAgICAgIHNlcnZpY2VDb21wb25lbnRUeXBlXyA9ICIiOwotICAgICB9Ci0gICAgIC8vKipTdGVwIDQqKiBEZWZhdWx0IHRoZSBzZXJ2ZXIgaWYgdGhpcyBpcyBub3QgYW4gQW50IHNjZW5hcmlvLgotICAgICBpZiAoIXNlcnZpY2VJZHNGaXhlZF8pCi0gICAgIHsKLSAgICAgICAvLyBTZXQgdGhlIHNlcnZlcgotICAgICAgIElTdGF0dXMgc2VydmVyU3RhdHVzID0gc2V0U2VydmljZURlZmF1bHRTZXJ2ZXIoKTsKLSAgICAgICBpZiAoc2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgICAgIHsKLSAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc2VydmVyU3RhdHVzKTsKLSAgICAgICAgIHJldHVybiBzZXJ2ZXJTdGF0dXM7Ci0gICAgICAgfQotICAgICB9Ci0gICAgIAotICAgICAvLyoqU3RlcCA1KiogRGVmYXVsdCBjbGllbnROZWVkRUFSIGFuZCBjbGllbnQgRUFSIGlmIGFuIEVBUiBpcyBuZWVkZWQKLSAgICAgc2V0RGVmYXVsdFNlcnZpY2VFYXJQcm9qZWN0KCk7Ci0gICAgIAotICAgICAvLyBqdmggLSBmb3Igbm93IGNvbW1lbnQgb3V0IGdlbmVyYXRlIHByb3h5Ci0gICAgIC8vICAgbmVlZCB0byBsb29rIGF0IGRlZmF1bHRpbmcgYmFzZWQgb24gYW4gZXZlbnQKLSAgICAgLy8gICAgb24gcGFnZSAxIC0gd2hlbiBjbGllbnQgZ2VuZXJhdGlvbiBnb2VzIGZyb20gbm9uZQotICAgICAvLyAgICB0byBkZXZlbG9wLi4uCi0gICAgIC8qaWYgKGdlbmVyYXRlUHJveHlfKQotICAgICB7Ki8KLSAgICAJIC8vRGVmYXVsdCB0aGUgY2xpZW50LXNpZGUuCi0gICAgCSBJU3RhdHVzIGNsaWVudFNpZGVTdGF0dXMgPSBkZWZhdWx0Q2xpZW50U2lkZShtb25pdG9yKTsKLSAgICAgICAgIGlmIChjbGllbnRTaWRlU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgICAgICAgewotICAgICAgICAgICByZXR1cm4gY2xpZW50U2lkZVN0YXR1czsKLSAgICAgICAgIH0gICAgICAgICAgICAgICAgICAKLSAgICAvLyB9Ci0gICAgICAgICAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBDYXRjaCBhbGwgRXhjZXB0aW9ucyBpbiBvcmRlciB0byBnaXZlIHNvbWUgZmVlZGJhY2sgdG8gdGhlIHVzZXIKLSAgICAgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQsCi0gICAgICAgICAgbmV3IFN0cmluZ1tdIHsgZS5nZXRNZXNzYWdlKCkgfSksIGUpOwotICAgICAgCi0gICAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGhhcyBubyBlcnJvciBtc2csIGl0J3Mga2luZCBvZiB1c2VsZXNzIHRvIHRoZSB1c2VyIHNvIGxldCdzIGxvZyBpdAotICAgICAgaWYgKCBlLmdldE1lc3NhZ2UoKSA9PSBudWxsKXsKLSAgICAgIAlJTG9nIHBsdWdpbmxvZyA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TG9nKCk7Ci0gICAgICAJcGx1Z2lubG9nLmxvZyhlcnJvclN0YXR1cyk7Ci0gICAgICAJICAKLSAgICAgIAkvLyBjcmVhdGUgYSBuZXcgSVN0YXR1cyB3aGljaCBoYXMgYSBub24tbnVsbCBtc2csIHRoaXMgaXMgdG8gYmUgdGhyb3duIHRvIHRoZSB1c2VyLgotICAgICAgCWVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9UQVNLX0VYQ0VQVEVELAotICAgIAkgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgV1NVSVBsdWdpbk1lc3NhZ2VzLk1TR19TRUVfRVJST1JfTE9HIH0pLCBlKTsgIAotICAgICAgfQotICAgICAgICAKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgSVN0YXR1cyBkZWZhdWx0Q2xpZW50U2lkZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gIHsKLSAgICBJU3RhdHVzIGNsaWVudERlZmF1bHRGcm9tU2VydmljZVN0YXR1cyA9IGRlZmF1bHRDbGllbnRTaWRlRnJvbVNlcnZpY2VTaWRlKHNlcnZpY2VQcm9qZWN0TmFtZV8sIHNlcnZpY2VJZHNfLCBzZXJ2aWNlTmVlZEVBUl8sIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8pOwotCi0gICAgLy8gSWYgYW4gZXJyb3Igc3RhdHVzIGlzIHJldHVybmVkLCB0aGUgb25seSBwcm9wZXJ0eSB0aGF0IHdhcyBzZXQgb24gCi0gICAgLy8gQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGlzIGNsaWVudFByb2plY3ROYW1lXy4gCi0gICAgLy8gVGhlIHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMgaW5jbHVkaW5nIGNsaWVudFJ1bnRpbWVJZF8sIGNsaWVudENvbXBvbmVudFR5cGVfLCAKLSAgICAvLyBhbGwgdGhlIHZhbHVlcyBpbiBjbGllbnRJZHNfLCBjbGllbnROZWVkRUFSXywgYW5kIGNsaWVudEVhclByb2plY3ROYW1lXyAKLSAgICAvLyBoYXZlIG5vdCBiZWVuIHNldCBiZWNhdXNlIHRoZSBzZXJ2aWNlIHNpZGUgc2VydmVyIGFuZAotICAgIC8vIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgY291bGQgbm90IGJlIHVzZWQgb24gdGhlIGNsaWVudCBzaWRlLiBSdW4gdGhlIGVudGlyZQotICAgIC8vIGNsaWVudC1zaWRlIGRlZmF1bHRpbmcgYWxnb3JpdGhtIHVzaW5nIGNsaWVudFByb2plY3ROYW1lXyBhcyB0aGUgCi0gICAgLy8gY2xpZW50SW5pdGlhbFByb2plY3RfLiBUaGVuIHVwZGF0ZSB0aGUgY2xpZW50RWFyUHJvamVjdE5hbWVfIGJhc2VkIG9uIHRoZQotICAgIC8vIHNlcnZpY2Ugc2lkZSBFQVIuCi0gICAgaWYgKGNsaWVudERlZmF1bHRGcm9tU2VydmljZVN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0gICAgewotICAgICAgLy8gMS4gUnVuIGNsaWVudCBzaWRlIGRlZmF1bHRpbmcgZnJvbSBzY3JhdGNoIHdpdGggY2xpZW50SW5pdGlhbFByb2plY3RfCi0gICAgICAvLyBzZXQgdG8gdGhlIG5ldyBjbGllbnRQcm9qZWN0TmFtZV8uCi0gICAgICBJUHJvamVjdCBjbGllbnRQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KGdldENsaWVudFByb2plY3ROYW1lKCkpOwotICAgICAgc2V0Q2xpZW50SW5pdGlhbFByb2plY3QoY2xpZW50UHJvamVjdCk7Ci0gICAgICBJU3RhdHVzIGNsaWVudEV4ZWN1dGVTdGF0dXMgPSBzdXBlci5leGVjdXRlKG1vbml0b3IsIG51bGwpOwotICAgICAgaWYgKGNsaWVudEV4ZWN1dGVTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjbGllbnRFeGVjdXRlU3RhdHVzOwotICAgICAgfQotCi0gICAgICAvLyAyLiBVcGRhdGUgdGhlIGNsaWVudC1zaWRlIEVBUiBpZiBzZXJ2aWNlTmVlZEVBUl8gaXMgdHJ1ZTsKLSAgICAgIGlmIChzZXJ2aWNlTmVlZEVBUl8pCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRDbGllbnRFYXJGcm9tU2VydmljZUVhcihzZXJ2aWNlUHJvamVjdE5hbWVfLCBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICAKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldERlZmF1bHRTZXJ2aWNlRWFyUHJvamVjdCgpCi0gIHsKLSAgICAvL0Rvbid0IG5lZWQgYW4gZWFyIGlmIHRoaXMgaXMgYSBKYXZhIHByb2plY3QsIG9yIGlmIHRoZSBzZWxlY3RlZCB0ZW1wbGF0ZSBpcyBqc3QudXRpbGl0eQotICAgIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8pOwotICAgIGlmIChzZXJ2aWNlUHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBzZXJ2aWNlTmVlZEVBUl8gPSAhKEZhY2V0VXRpbHMuaXNKYXZhUHJvamVjdChzZXJ2aWNlUHJvamVjdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2VydmljZU5lZWRFQVJfID0gIShGYWNldFV0aWxzLmlzVXRpbGl0eVRlbXBsYXRlKHNlcnZpY2VDb21wb25lbnRUeXBlXykpOyAgCi0gICAgfSAgICAKLSAgICAKLSAgICAvL0lmIHNlcnZpY2VOZWVkRUFSXyBpcyBzdGlsbCB0cnVlLCBpdCBtZWFucyB0aGF0IHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSBKYXZhIHByb2plY3QKLSAgICAvL29yIEphdmEgcHJvamVjdCB0eXBlLiBDaGVjayB0aGUgc2VydmVyLgotICAgIAotICAgIAotICAgIGlmIChzZXJ2aWNlTmVlZEVBUl8pCi0gICAgewotICAgICAgCi0gICAgICAvLyBEZXRlcm1pbmUgaWYgYW4gZWFyIHNlbGVjdGlvbiBpcyBuZWVkZWQgYmFzZWQgb24gdGhlIHNlcnZlciB0eXBlLiAgICAgIAotICAgICAgU3RyaW5nIHNlcnZlcklkID0gc2VydmljZUlkc18uZ2V0U2VydmVySWQoKTsKLSAgICAgIGlmIChzZXJ2ZXJJZCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBVc2UgdGhlIHNlcnZlciB0eXBlCi0gICAgICAgIFN0cmluZyBzZXJ2ZXJUYXJnZXRJZCA9IFNlcnZlclV0aWxzLmdldFJ1bnRpbWVUYXJnZXRJZEZyb21GYWN0b3J5SWQoc2VydmVySWQpOwotICAgICAgICBpZiAoc2VydmVyVGFyZ2V0SWQgIT0gbnVsbCAmJiBzZXJ2ZXJUYXJnZXRJZC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIVNlcnZlclV0aWxzLmlzVGFyZ2V0VmFsaWRGb3JFQVIoc2VydmVyVGFyZ2V0SWQsICIxMyIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIERlZmF1bHQgdGhlIEVBUiBzZWxlY3Rpb24gdG8gYmUgZW1wdHkKLSAgICAgICAgICAgIHNlcnZpY2VOZWVkRUFSXyA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsgLy8gc2VydmVySWQgPT0gbnVsbCwgYXNzdW1lIHRoYXQgaXQgZG9lcyBub3QgbmVlZCBFQVIKLSAgICAJICBzZXJ2aWNlTmVlZEVBUl8gPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKHNlcnZpY2VOZWVkRUFSXykKLSAgICB7Ci0gICAgICBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfID0gRGVmYXVsdGluZ1V0aWxzLmdldERlZmF1bHRFQVJQcm9qZWN0TmFtZShzZXJ2aWNlUHJvamVjdE5hbWVfKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8gPSAiIjsKLSAgICB9ICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBzZXRTZXJ2aWNlRGVmYXVsdFNlcnZlcigpCi0gIHsKLSAgICAvL0Nob29zZSBhbiBleGlzdGluZyBzZXJ2ZXIgdGhlIG1vZHVsZSBpcyBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBpZiBwb3NzaWJsZQotICAgIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8pOwotICAgIElTZXJ2ZXJbXSBjb25maWd1cmVkU2VydmVycyA9IG51bGw7Ci0gICAgaWYoc2VydmljZVByb2plY3QuZXhpc3RzKCkpCi0gICAgCWNvbmZpZ3VyZWRTZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoU2VydmVyVXRpbHMuZ2V0TW9kdWxlKHNlcnZpY2VQcm9qZWN0KSwgbnVsbCk7Ci0gICAgCi0gICAgaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJzIT1udWxsICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzLmxlbmd0aD4wKQotICAgIHsKLSAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlcklkKGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpKTsKLSAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoY29uZmlndXJlZFNlcnZlcnNbMF0uZ2V0SWQoKSk7Ci0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsgICAgICAgICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0lmIHRoZSBwcm9qZWN0IGV4aXN0cywgY2hvb3NlIGEgc3VpdGFibGUgc2VydmVyIG9yIHNlcnZlciB0eXBlIGJhc2VkIG9uIHRoZSBleGlzdGluZyBwcm9qZWN0J3MgcnVudGltZSBvciBmYWNldHMKLSAgICBpZiAoc2VydmljZVByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgSVNlcnZlciBzZXJ2ZXIgPSBnZXRTZXJ2ZXJGcm9tUHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWVfLCBzZXJ2aWNlRmFjZXRNYXRjaGVyXyk7Ci0gICAgICBpZiAoc2VydmVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVyLmdldElkKCkpOwotICAgICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IGdldFNlcnZlclR5cGVGcm9tUHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWVfLCBzZXJ2aWNlRmFjZXRNYXRjaGVyXyk7Ci0gICAgICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlSWRzXy5zZXRTZXJ2ZXJJZChzZXJ2ZXJUeXBlLmdldElkKCkpOwotICAgICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vSGF2ZW4ndCBwaWNrZWQgYSBzZXJ2ZXIvc2VydmVyIHR5cGUgb24gdGhlIGJhc2lzIG9mIHRoZSBwcm9qZWN0LiBQaWNrIGEgc2VydmVyL3NlcnZlciB0eXBlCi0gICAgLy90aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgc2VydmljZVJ1bnRpbWVJZC4KLSAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21TZXJ2aWNlUnVudGltZUlkKCk7Ci0gICAgaWYgKHNlcnZlciE9bnVsbCkKLSAgICB7Ci0gICAgICBzZXJ2aWNlSWRzXy5zZXRTZXJ2ZXJJZChzZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXIuZ2V0SWQoKSk7Ci0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB9Ci0gICAgCi0gICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IGdldFNlcnZlclR5cGVGcm9tU2VydmljZVJ1bnRpbWVJZCgpOwotICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySWQoc2VydmVyVHlwZS5nZXRJZCgpKTsKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIH0gICAgCi0KLSAgICAvL05vIHN1aXRhYmxlIHNlcnZlciB3YXMgZm91bmQuIFBvcHVwIGFuIGVycm9yLgotICAgIFJ1bnRpbWVEZXNjcmlwdG9yIHJ1bnRpbWVEZXNjcmlwdG9yID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUJ5SWQoc2VydmljZUlkc18uZ2V0UnVudGltZUlkKCkpOwotICAgIGlmIChydW50aW1lRGVzY3JpcHRvci5nZXRTZXJ2ZXJSZXF1aXJlZCgpKQotICAgIHsgICAgCi0gICAgICBTdHJpbmcgcnVudGltZUxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChzZXJ2aWNlSWRzXy5nZXRSdW50aW1lSWQoKSk7ICAgIAotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX05PX1NFUlZFUl9SVU5USU1FLCBuZXcgU3RyaW5nW117cnVudGltZUxhYmVsfSkgKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9ICAKLSAgCi0gIHByaXZhdGUgSVNlcnZlciBnZXRTZXJ2ZXJGcm9tU2VydmljZVJ1bnRpbWVJZCgpCi0gIHsKLSAgICBJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotICAgIGlmIChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGggPiAwKSAKLSAgICB7Ci0gICAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLSAgICAgIFN0cmluZyBwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQgPSBjb250ZXh0LmdldFNlcnZlckZhY3RvcnlJZCgpOwotCi0gICAgICAvL0lmIGEgc2VydmVyIG9mIHRoZSBwcmVmZXJyZWQgc2VydmVyIHR5cGUgaXMgcHJlc2VudCwgY2hlY2sgdGhhdCBvbmUgZmlyc3QKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2VydmVycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAJaWYgKHNlcnZlcnNbal0gIT0gbnVsbCAmJiBzZXJ2ZXJzW2pdLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgIAl7Ci0JICAgICAgICBTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gc2VydmVyc1tqXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkgICAgICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWQuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKHNlcnZpY2VSdW50aW1lSWRfLCBzZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgcmV0dXJuIHNlcnZlcnNbal07Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0gIAotICAgIAl9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vQSBzZXJ2ZXIgb2YgdGhlIHByZWZlcnJlZCBzZXJ2ZXIgdHlwZSBjb3VsZCBub3QgYmUgZm91bmQgb3IgZGlkIG5vdCBtYXRjaC4gQ2hlY2sgYWxsIHRoZSBleGlzdGluZyBzZXJ2ZXJzLiAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAJaWYgKHNlcnZlcnNbaV0gIT0gbnVsbCAmJiBzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgIAl7Ci0JICAgICAgICBTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKHNlcnZpY2VSdW50aW1lSWRfLCBzZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgICAgewotCSAgICAgICAgICByZXR1cm4gc2VydmVyc1tpXTsKLQkgICAgICAgIH0KLSAgICAJfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVNlcnZlclR5cGUgZ2V0U2VydmVyVHlwZUZyb21TZXJ2aWNlUnVudGltZUlkKCkKLSAgewotICAgIFN0cmluZ1tdIHNlcnZlclR5cGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyRmFjdG9yeUlkc0J5U2VydmljZVJ1bnRpbWUoc2VydmljZVJ1bnRpbWVJZF8pOwotICAgIGlmIChzZXJ2ZXJUeXBlcyE9bnVsbCAmJiBzZXJ2ZXJUeXBlcy5sZW5ndGg+MCkKLSAgICB7Ci0gICAgICAvL1JldHVybiB0aGUgcHJlZmVycmVkIG9uZSBpZiBpdCBpcyBpbiB0aGUgbGlzdAotICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHNlcnZlclR5cGVzW2ldLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZXNbaV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlclR5cGVzWzBdKTsKLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiBudWxsOwotICB9ICAKLSAgCi0gIAotICBwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0U2VydmljZVByb2plY3RUZW1wbGF0ZSgpCi0gIHsKLSAgICBTdHJpbmdbXSB0ZW1wbGF0ZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUHJvamVjdFRlbXBsYXRlcyhzZXJ2aWNlSWRzXy5nZXRUeXBlSWQoKSwgc2VydmljZUlkc18uZ2V0UnVudGltZUlkKCkpOyAgICAKLSAgICAKLSAgICAvL1dhbGsgdGhlIGxpc3Qgb2Ygc2VydmljZSBwcm9qZWN0IHR5cGVzIGluIHRoZSBwcm9qZWN0IHRvcG9sb2d5IHByZWZlcmVuY2UKLSAgICBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IHB0Yz0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgU3RyaW5nW10gcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBwcmVmZXJyZWRUZW1wbGF0ZUlkcy5sZW5ndGg7IGorKykKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBsYXRlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscyhwcmVmZXJyZWRUZW1wbGF0ZUlkc1tqXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBib29sZWFuIG1hdGNoZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUoc2VydmljZVJ1bnRpbWVJZF8sIHRlbXBsYXRlSWQpOwotICAgICAgICAgIGlmIChtYXRjaGVzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vU2luY2UgdGhlIHByZWZlcnJlZFRlbXBsYXRlSWRzIGNvbnRhaW5zIHRoZSB1bmlvbiBvZiBhbGwgcHJvamVjdCB0eXBlcyBmb3IgYWxsIHNlcnZpY2UgcnVudGltZXMsIHdlIGFyZQotICAgIC8vZ3VhcmFudGVlZCB0byBoYXZlIHJldHVybmVkIGJ5IG5vdywgc28gdGhlIGNvZGUgYmVsb3cgd2lsbCBuZXZlciBiZSBleGVjdXRlZCB1bmRlciBub3JtYWwKLSAgICAvL2NpcmN1bXN0YW5jZXMuIEp1c3QgcmV0dXJuIHNvbWV0aGluZyB0byBzYXRpc2Z5IHRoZSBjb21waWxlci4KLSAgICBpZiAodGVtcGxhdGVzLmxlbmd0aCA+IDApCi0gICAgICByZXR1cm4gdGVtcGxhdGVzWzBdOwotICAgIAotICAgIHJldHVybiAiIjsgICAgCi0gICAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdFNlcnZpY2VQcm9qZWN0TmFtZSgpCi0gIHsKLSAgICBJUHJvamVjdFtdIHByb2plY3RzID0gRmFjZXRVdGlscy5nZXRBbGxQcm9qZWN0cygpOwotICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkXyk7Ci0gICAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnZzID0gZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAKLSAgICAvL0NoZWNrIGVhY2ggcHJvamVjdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBzZXJ2aWNlUnVudGltZQotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTZXQgZmFjZXRWZXJzaW9ucyA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdChwcm9qZWN0c1tpXS5nZXROYW1lKCkpOwotICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IG51bGw7Ci0gICAgICBTdHJpbmcgZlJ1bnRpbWVOYW1lID0gbnVsbDsKLSAgICAgIGZSdW50aW1lID0gRmFjZXRVdGlscy5nZXRGYWNldFJ1bnRpbWVGb3JQcm9qZWN0KHByb2plY3RzW2ldLmdldE5hbWUoKSk7Ci0gICAgICBpZiAoZlJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZlJ1bnRpbWVOYW1lID0gZlJ1bnRpbWUuZ2V0TmFtZSgpOyAgICAgICAgCi0gICAgICB9ICAgICAgICAgICAgICAKLSAgICAgIAotICAgICAgaWYgKGZhY2V0VmVyc2lvbnMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGZhbHNlLCBzZXJ2aWNlUnVudGltZUlkXywgcHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgICAgYm9vbGVhbiBmYWNldFJ1bnRpbWVNYXRjaGVzID0gdHJ1ZTsKLSAgICAgICAgaWYgKGZSdW50aW1lTmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZmFjZXRSdW50aW1lTWF0Y2hlcyA9IEZhY2V0VXRpbHMuaXNGYWNldFJ1bnRpbWVTdXBwb3J0ZWQocmZ2cywgZlJ1bnRpbWVOYW1lKTsgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoZm0uaXNNYXRjaCgpICYmIGZhY2V0UnVudGltZU1hdGNoZXMpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlRmFjZXRNYXRjaGVyXyA9IGZtOwotICAgICAgICAgIHJldHVybiBwcm9qZWN0c1tpXS5nZXROYW1lKCk7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvL05vIHByb2plY3Qgd2FzIHN1aXRhYmxlLCByZXR1cm4gYSBuZXcgcHJvamVjdCBuYW1lCi0gICAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0RGVmYXVsdFdlYlByb2plY3ROYW1lKCk7Ci0gICAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSBEZWZhdWx0UnVudGltZVRyaXBsZXQgZ2V0RGVmYXVsdFNlcnZpY2VSdW50aW1lRm9yRml4ZWRSdW50aW1lQW5kU2VydmVyKElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICBTdHJpbmdbXSBzZXJ2aWNlUnVudGltZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpKTsKLSAgICBBcnJheUxpc3Q8U3RyaW5nPiB2YWxpZFNlcnZpY2VSdW50aW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2aWNlUnVudGltZXMubGVuZ3RoOyBpKysgKQotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZXNbaV0pOwotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHNlcnZpY2VJZHNfLmdldFJ1bnRpbWVJZCgpKSkKLSAgICAgIHsKLSAgICAgICAgLy9DaGVjayBpZiB0aGlzIHNlcnZpY2UgcnVudGltZSBzdXBwb3J0cyB0aGUgc2VydmVyCi0gICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKGRlc2MuZ2V0SWQoKSwgc2VydmljZUlkc18uZ2V0U2VydmVySWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB2YWxpZFNlcnZpY2VSdW50aW1lcy5hZGQoZGVzYy5nZXRJZCgpKTsKLSAgICAgICAgICBpZiAocHJvamVjdCAhPSBudWxsICYmIHByb2plY3QuZXhpc3RzKCkpICAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTZXQgZmFjZXRWZXJzaW9ucyA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdChwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAoZmFjZXRWZXJzaW9ucyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRNYXRjaEZvclByb2plY3QoZmFsc2UsIHNlcnZpY2VSdW50aW1lc1tpXSwgcHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICBpZiAoZm0uaXNNYXRjaCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgICAgICAgICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKGZtKTsKLSAgICAgICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGRydC5zZXRSdW50aW1lSWQoZGVzYy5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZHJ0OwotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIAotICAgIGlmICh2YWxpZFNlcnZpY2VSdW50aW1lcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIC8vV2UgY291bGRuJ3QgbWF0Y2ggdG8gdGhlIGluaXRpYWxseSBzZWxlY3RlZCBwcm9qZWN0IHNvIHJldHVybiB0aGUgZmlyc3QgdmFsaWQgcnVudGltZS4KLSAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKG51bGwpOwotICAgICAgZHJ0LnNldFByb2plY3ROYW1lKG51bGwpOwotICAgICAgZHJ0LnNldFJ1bnRpbWVJZCgoKFN0cmluZ1tdKXZhbGlkU2VydmljZVJ1bnRpbWVzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpWzBdKTsKLSAgICAgIHJldHVybiBkcnQ7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1RoZXJlIGFyZSBubyBzZXJ2aWNlIHJ1bnRpbWVzIHRoYXQgbWF0Y2ggdGhlIGZpeGVkIHJ1bnRpbWUgYW5kIHNlcnZlci4gRmFsbCBiYWNrIHRvIG9yaWdpbmFsIGFsZ29yaXRobS4KLSAgICAgIHNlcnZpY2VJZHNGaXhlZF8gPSBmYWxzZTsKLSAgICAgIHJldHVybiBnZXREZWZhdWx0UnVudGltZShwcm9qZWN0LCBzZXJ2aWNlSWRzXy5nZXRUeXBlSWQoKSwgZmFsc2UsIHNlcnZpY2VJZHNfLmdldFNlcnZlcklkKCkpOwotICAgIH0KLSAgfQotICAKLQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFByb2plY3QoSVByb2plY3QgaW5pdGlhbFByb2plY3QpCi0gIHsKLSAgICBpbml0aWFsUHJvamVjdF8gPSBpbml0aWFsUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldEluaXRpYWxQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBpbml0aWFsUHJvamVjdF87ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbENvbXBvbmVudE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAvL1RPRE8gVGhpcyBtZXRob2QgYW5kIGFueSBtYXBwaW5ncyB0byBpdAotCS8vIHNob3VsZCBiZSByZW1vdmVkIGlmIG5vIGxvbmdlciBuZWVkZWQuCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzICkKLSAgewotICAgIHNlcnZpY2VJZHNfID0gaWRzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlSWRzRml4ZWQoYm9vbGVhbiBiKQotICB7Ci0gICAgc2VydmljZUlkc0ZpeGVkXyA9IGI7ICAKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUlkc187IAotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUnVudGltZUlkKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlUnVudGltZUlkXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBnZW5lcmF0ZVByb3h5Xy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlUHJveHlfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gZ2VuZXJhdGVQcm94eV8gVGhlIGdlbmVyYXRlUHJveHlfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5XykKLSAgewotICAgIHRoaXMuZ2VuZXJhdGVQcm94eV8gPSBnZW5lcmF0ZVByb3h5XzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VQcm9qZWN0TmFtZV87ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VDb21wb25lbnRUeXBlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U2VydmljZU5lZWRFQVIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VOZWVkRUFSXzsKLSAgfQotICAKLSAgLy8gVGhpcyBpcyBmb3IgdGhlIEFudCBzY2VuYXJpbyB3aGVyZSB0aGUgc2VydmljZSBwcm9qZWN0IG5hbWUgY2FuIGJlIHNldCBpbiB0aGUgcHJvcGVydHkgZmlsZS4KLSAgLy8gSWYgdGhlIHVzZXIgaGFzIHNldCB0aGUgU2VydmljZVByb2plY3ROYW1lIHVzZSBpdCBmb3IgZGVmYXVsdGluZyBwdXJwb3NlcwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLQkgIHNlcnZpY2VQcm9qZWN0TmFtZV8gPSBuYW1lOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvTGF1bmNoRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L0xhdW5jaEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNmRmODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvTGF1bmNoRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotCi0KLXB1YmxpYyBjbGFzcyBMYXVuY2hGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudAotewotICBwcml2YXRlIGJvb2xlYW4gcHVibGlzaFRvUHVibGljVURESV87ICAKLSAgcHJpdmF0ZSBib29sZWFuIHB1Ymxpc2hUb1ByaXZhdGVVRERJXzsKLSAgCi0gIHB1YmxpYyBMYXVuY2hGcmFnbWVudCgpCi0gIHsKLSAgICBDb25kaXRpb24gY29uZGl0aW9uID0gbmV3IENvbmRpdGlvbigpCi0gICAgewotICAgICAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICAgICAgewotICAgICAgICByZXR1cm4gKHB1Ymxpc2hUb1B1YmxpY1VERElfIHx8IHB1Ymxpc2hUb1ByaXZhdGVVRERJXyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBzZXRDb25kaXRpb24oIGNvbmRpdGlvbiApOwotICAgIHNldFRydWVGcmFnbWVudCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpLCAiIiApICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1B1YmxpY1VEREkoYm9vbGVhbiBwdWJsaXNoVG9QdWJsaWNVRERJKQotICB7Ci0gICAgcHVibGlzaFRvUHVibGljVURESV8gPSBwdWJsaXNoVG9QdWJsaWNVRERJOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoVG9Qcml2YXRlVURESShib29sZWFuIHB1Ymxpc2hUb1ByaXZhdGVVRERJKQotICB7Ci0gIAlwdWJsaXNoVG9Qcml2YXRlVURESV8gPSBwdWJsaXNoVG9Qcml2YXRlVURESTsKLSAgfQotICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9TZXJ2aWNlVGVzdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9TZXJ2aWNlVGVzdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMGUxNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvU2VydmljZVRlc3RGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XU0RMVGVzdExhdW5jaENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNlcnZpY2VUZXN0RnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RTZXJ2aWNlOwotICBwcml2YXRlIGJvb2xlYW4gZ2VuZXJhdGVQcm94eTsKLSAgCi0gIAotICBwdWJsaWMgU2VydmljZVRlc3RGcmFnbWVudCggU3RyaW5nIGlkICkKLSAgewotICAJU2VxdWVuY2VGcmFnbWVudCB0ZXN0Um9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gIAlDb25kaXRpb24gY29uZGl0aW9uID0gbmV3IENvbmRpdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RTZXJ2aWNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICBzZXRDb25kaXRpb24oIGNvbmRpdGlvbiApOwotICAgIAotICAgIHRlc3RSb290LmFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgdGVzdFJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIGlkICkgKTsKLSAgICBzZXRUcnVlRnJhZ21lbnQoIHRlc3RSb290ICk7Ci0gICAgICAKLSAgfQotIAotICAKLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgCQotICAJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RJRCIsV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsKLSAgCQotICAJLy9mcm9tIHRoZSB3aXphcmQgCi0gIAlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcywgIlRlc3RJRCIsV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsKLSAgCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VUZXN0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFeHRlcm5hbEJyb3dzZXIiLFdTRExUZXN0TGF1bmNoQ29tbWFuZC5jbGFzcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KQotICB7Ci0gIAl0aGlzLmdlbmVyYXRlUHJveHkgPSBnZW5lcmF0ZVByb3h5OwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotICAJcmV0dXJuIGdlbmVyYXRlUHJveHk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHRlc3RTZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoIGJvb2xlYW4gdGVzdFNlcnZpY2UgKQotICB7Ci0gICAgdGhpcy50ZXN0U2VydmljZSA9IHRlc3RTZXJ2aWNlOwotICB9Ci0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvU2VydmljZVRlc3RXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L1NlcnZpY2VUZXN0V2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMTg2ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvU2VydmljZVRlc3RXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV1NETFRlc3RMYXVuY2hDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNlcnZpY2VUZXN0V2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZVBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiOwotCi0gIHByaXZhdGUgQ29tYm8gdGVzdFR5cGVDb21ib187Ci0gIC8qQ09OVEVYVF9JRCBQU1RQMDAwMSBmb3IgdGhlIFRlc3QgVHlwZSBDb21ibyBib3ggb2YgdGhlIFNlcnZpY2UgVGVzdCBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QU1RQX0NPTUJPQk9YX1RFU1QgPSAiUFNUUDAwMDEiOwotCi0gIHByaXZhdGUgQnV0dG9uIGxhdW5jaEJ1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQU1RQMDAwMiBmb3IgdGhlIGxhdW5jaCBidXR0b24gb2YgdGhlIFNlcnZpY2UgVGVzdCBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QU1RQX0xBVU5DSF9CVVRUT04gPSAiUFNUUDAwMDIiOwotCi0gIAotICBwcml2YXRlIFNlbGVjdGlvbkxpc3QgZmFjaWxpdGllc187Ci0gIAotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZCA9IG51bGw7Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7Ci0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgID0gbmV3IFVJVXRpbHMoY3JlYXRlUGx1Z2luSWRfICk7Ci0gICAgICAgIAotICAgIENvbXBvc2l0ZSB0ZXN0Q29tcG9zaXRlID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMywgMCwgMCApOwotICAgIAotICAgIHRlc3RUeXBlQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyggdGVzdENvbXBvc2l0ZSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RFU1RfVFlQRVMsCi0gICAgCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFNUUF9DT01CT0JPWF9URVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QU1RQX0NPTUJPQk9YX1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkgKTsKLSAgICAKLSAgICBsYXVuY2hCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKCB0ZXN0Q29tcG9zaXRlLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0xBVU5DSF9TRVJWSUNFX1RFU1QsCi0gICAgCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFNUUF9MQVVOQ0hfQlVUVE9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QU1RQX0xBVU5DSF9CVVRUT04gKTsKLSAgICBsYXVuY2hCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2ZW50ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTGF1bmNoQnV0dG9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgIAotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHNlcnZpY2VpZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlclByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIG1vZHVsZTsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgPSAiIjsKLSAgcHJpdmF0ZSBJRW52aXJvbm1lbnQgZW52OwotICBwcml2YXRlIExpc3QgZW5kcG9pbnRzOwotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZUxhdW5jaEJ1dHRvbigpCi0gIHsKLQkvLyBTcGxpdCB1cCB0aGUgcHJvamVjdCBhbmQgbW9kdWxlCi0JaW50IHAgPSBzZXJ2ZXJQcm9qZWN0LmluZGV4T2YoIi8iKTsKLQlpZiAocCAhPSAtMSl7Ci0JCW1vZHVsZSA9IHNlcnZlclByb2plY3Quc3Vic3RyaW5nKHArMSk7Ci0JCXNlcnZlclByb2plY3QgPSBzZXJ2ZXJQcm9qZWN0LnN1YnN0cmluZygwLHApOwotCX0KLSAgCQotICAJU3RyaW5nIHRlc3RJRCA9IHRlc3RUeXBlQ29tYm9fLmdldFRleHQoKTsKLSAgCWxhdW5jaGVkU2VydmljZVRlc3ROYW1lID0gdGVzdElEOwotICAJV1NETFRlc3RMYXVuY2hDb21tYW5kIHd0bGMgPSBuZXcgV1NETFRlc3RMYXVuY2hDb21tYW5kKCk7Ci0gIAl3dGxjLnNldFRlc3RJRCh0ZXN0SUQpOwotICAJd3RsYy5zZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoc2VydmljZWlkcyk7Ci0JICB3dGxjLnNldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKTsKLSAgCXd0bGMuc2V0U2VydmVyUHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLQkgIHd0bGMuc2V0U2VydmVyTW9kdWxlKG1vZHVsZSk7Ci0gIAl3dGxjLnNldFdzZGxVUkkod3NkbFVSSSk7Ci0gIAl3dGxjLnNldEV4dGVybmFsQnJvd3Nlcih0cnVlKTsKLSAgCXd0bGMuc2V0RW5kcG9pbnQoZW5kcG9pbnRzKTsKLSAgCXd0bGMuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAJd3RsYy5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUZXN0RmFjaWxpdGllcyggU2VsZWN0aW9uTGlzdCBmYWNpbGl0aWVzICkKLSAgewotICAgIGZhY2lsaXRpZXNfID0gZmFjaWxpdGllczsKLSAgICB0ZXN0VHlwZUNvbWJvXy5zZXRJdGVtcyggZmFjaWxpdGllcy5nZXRMaXN0KCkgKTsKLSAgICB0ZXN0VHlwZUNvbWJvXy5zZWxlY3QoIGZhY2lsaXRpZXMuZ2V0SW5kZXgoKSApOwotICB9Ci0gIAotICBwdWJsaWMgU2VsZWN0aW9uTGlzdCBnZXRTZXJ2aWNlVGVzdEZhY2lsaXRpZXMoKQotICB7Ci0gICAgZmFjaWxpdGllc18uc2V0SW5kZXgoIHRlc3RUeXBlQ29tYm9fLmdldFNlbGVjdGlvbkluZGV4KCkgKTsKLSAgICByZXR1cm4gZmFjaWxpdGllc187Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRlc3RJRCgpCi0gIHsKLSAgCXJldHVybiB0ZXN0VHlwZUNvbWJvXy5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmVyUHJvamVjdChTdHJpbmcgc2VydmVyUHJvamVjdCkKLSAgewotICAgIHRoaXMuc2VydmVyUHJvamVjdCA9IHNlcnZlclByb2plY3Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmljZWlkcykKLSAgewotICAgIHRoaXMuc2VydmljZWlkcyA9IHNlcnZpY2VpZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW52aXJvbm1lbnQoSUVudmlyb25tZW50IGVudikKLSAgewotICAJdGhpcy5lbnYgPSBlbnY7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChTdHJpbmcgZW5kcG9pbnQpCi0gIHsKLSAgICBpZiAoZW5kcG9pbnQgIT0gbnVsbCAmJiBlbmRwb2ludC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB2LmFkZChlbmRwb2ludCk7Ci0gICAgICBzZXRFbmRwb2ludHModik7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludHMoTGlzdCBlbmRwb2ludHMpCi0gIHsKLSAgICB0aGlzLmVuZHBvaW50cyA9IGVuZHBvaW50czsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNzSW5zdGFuY2VJZCl7Ci0JICB0aGlzLnNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkID0gc3NJbnN0YW5jZUlkOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDFkNmFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VUZXN0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gQXByIDE1LCAyMDA0Ci0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlIGFuZCBDb21tZW50cwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUgYW5kIENvbW1lbnRzCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIAotICBwcml2YXRlIFNlbGVjdGlvbkxpc3Qgc2VydmljZVRlc3RGYWNpbGl0aWVzOwkKLSAgcHJpdmF0ZSBTdHJpbmdbXSB0ZXN0SUQ7Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgCVNjZW5hcmlvQ29udGV4dCBzY2VuYXJpb0NvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCkuY29weSgpOwotICAJdGVzdElEID0gc2NlbmFyaW9Db250ZXh0LmdldE5vbkphdmFUZXN0U2VydmljZSgpOwotICAJU3RyaW5nW10gdGVzdFR5cGVzID0gc2NlbmFyaW9Db250ZXh0LmdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKTsKLSAgCSAgCQotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJV2ViU2VydmljZVRlc3RSZWdpc3RyeSB3c3R0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIAkKLSAgICAKLSAgCVZlY3RvciB3c2RsTmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gIAlmb3IoaW50IGkgPTAgO2k8dGVzdFR5cGVzLmxlbmd0aDtpKyspewotICAJICBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiB3c2N0ZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbil3c3R0UmVnaXN0cnkuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUodGVzdFR5cGVzW2ldKTsgIAkKLSAgCSAgaWYod3NjdGUudGVzdFdTREwoKSl7Ci0gIAkgICAgd3NkbE5hbWVzLmFkZEVsZW1lbnQodGVzdFR5cGVzW2ldKTsKLSAgCSAgfQotICAJfQotICAgIAotICAJU3RyaW5nIGphdmFOYW1lc0FycmF5W10gPSBuZXcgU3RyaW5nW3dzZGxOYW1lcy5zaXplKCldOwotICAJRW51bWVyYXRpb24gZSA9IHdzZGxOYW1lcy5lbGVtZW50cygpOwotICAJaW50IGkgPSAwOwotICAJd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSl7Ci0gICAgICBqYXZhTmFtZXNBcnJheVtpXSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAJICBpKys7Ci0gIAl9Ci0gIAkKLSAgCQotICAJc2VydmljZVRlc3RGYWNpbGl0aWVzID0gbmV3IFNlbGVjdGlvbkxpc3QoamF2YU5hbWVzQXJyYXksMCk7ICAJCi0gIAkKLSAJcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0IGdldFNlcnZpY2VUZXN0RmFjaWxpdGllcygpCi0gIHsKLSAgCXJldHVybiBzZXJ2aWNlVGVzdEZhY2lsaXRpZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0VGVzdElEKCkKLSAgewotICAJcmV0dXJuIHRlc3RJRDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RXh0ZXJuYWxCcm93c2VyKCkKLSAgewotICAJcmV0dXJuIGZhbHNlOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxNjVlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc4NTNlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi11ZGRpcmVnaXN0cnkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MjU2MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJiMDI5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6MzY6NTggRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNjliNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MDo0OSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkxYTlhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LnBsdWdpbi5XZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZzt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkO3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGNvbS5pYm0uaWN1O2J1bmRsZS12ZXJzaW9uPSJbMy40LjQsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWRlYzMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9pY29ucy9yZWdpc3RyeS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvaWNvbnMvcmVnaXN0cnkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjQzY2FlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9pY29ucy9yZWdpc3RyeS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvaWNvbnMvd2l6YmFuL3VkZGlwcml2YXRlY29uZmlnX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvaWNvbnMvd2l6YmFuL3VkZGlwcml2YXRlY29uZmlnX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZDE1NWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2ljb25zL3dpemJhbi91ZGRpcHJpdmF0ZWNvbmZpZ193aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTBhZmI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDUxNiAgIDE2MzI2NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBVbml2ZXJzYWwgRGVzY3JpcHRpb24gRGlzY292ZXJ5IGFuZCBJbnRlZ3JhdGlvbiBSZWdpc3RyeQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfVU5JVF9URVNUX1VEREk9VW5pdCBUZXN0IFVEREkKLQotWFBfUFJJVkFURV9VRERJX1JFR0lTVFJZX1RZUEVTPVByaXZhdGUgVURESSBSZWdpc3RyeSBUeXBlcwotUFJJVkFURV9VRERJX1JFR0lTVFJZX0RFU0M9Q3JlYXRlIGFuZCBjb25maWd1cmUgYSB1bml0IHRlc3QgVURESSByZWdpc3RyeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZhYzc1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIGxpa2VseSB0byBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0icHJpdmF0ZVVERElSZWdpc3RyeVR5cGUiIG5hbWU9IiVYUF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVMiLz4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5wcml2YXRlVURESVJlZ2lzdHJ5VHlwZSI+Ci0gICAgICA8cHJpdmF0ZVVERElSZWdpc3RyeVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVQUklWQVRFX1VERElfUkVHSVNUUllfVFlQRV9JTVBMIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZC5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZUltcGwiPgotICAgICAgPC9wcml2YXRlVURESVJlZ2lzdHJ5VHlwZT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfVU5JVF9URVNUX1VEREkiCi0gICAgICAgICAgICBpY29uPSJpY29ucy9yZWdpc3RyeS5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5iaW5kaW5nLlByaXZhdGVVRERJV2lkZ2V0QmluZGluZyI+Ci0gICAgICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAlUFJJVkFURV9VRERJX1JFR0lTVFJZX0RFU0MKLSAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICA8L3dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19VTklUX1RFU1RfVURESSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZy5Qcml2YXRlVURESVdpZGdldEJpbmRpbmciCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy93aXpiYW4vdWRkaXByaXZhdGVjb25maWdfd2l6LnBuZyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZy5Qcml2YXRlVURESVdpZGdldEJpbmRpbmciPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0gICA8IS0tCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0gICAgICA8d2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19VTklUX1RFU1RfVURESSIKLSAgICAgICAgICAgIGljb249Imljb25zL3JlZ2lzdHJ5LmdpZiIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJV2l6YXJkIj4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICVQTFVHSU5fTkVXX1dJWkFSRF9ERVNDX1dTX1VOSVRfVEVTVF9VRERJCi0gICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgICAgPHNlbGVjdGlvbgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSI+Ci0gICAgICAgICA8L3NlbGVjdGlvbj4KLSAgICAgIDwvd2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0gICAtLT4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGQyNmJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBQcml2YXRlVURESUNvbmZpZ1BhZ2UKLSMKLVBBR0VfVElUTEVfUFJJVkFURV9VRERJX0NPTkZJRz1Vbml0IFRlc3QgVURESSBSZWdpc3RyeSBDb25maWd1cmF0aW9uCi1QQUdFX0RFU0NfUFJJVkFURV9VRERJX0NPTkZJRz1Db25maWd1cmUgdGhlIHVuaXQgdGVzdCBVRERJIHJlZ2lzdHJ5LgotCi0jCi0jIFRvb2x0aXAgZm9yIFByaXZhdGVVRERJQ29uZmlnUGFnZQotIwotVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9QQUdFPURlcGxveSBvciByZW1vdmUgYSBVbml0IFRlc3QgVURESSBSZWdpc3RyeQotVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFPUNob29zZSB0aGUgdHlwZSBvZiBVbml0IFRlc3QgVURESSBSZWdpc3RyeSB5b3Ugd2FudCB0byBkZXBsb3kKLVRPT0xUSVBfUFVQUl9ERVBMT1lfUFJJVkFURV9VRERJPURlcGxveSBhIFVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5Ci1UT09MVElQX1BVUFJfVVBEQVRFX1BSSVZBVEVfVUREST1VcGRhdGUgdGhlIGV4aXN0aW5nIFVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5Ci1UT09MVElQX1BVUFJfUkVNT1ZFX1BSSVZBVEVfVUREST1SZW1vdmUgdGhlIGV4aXN0aW5nIFVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5Ci0KLSMKLSMgQ29tbW9uIHdpemFyZCBzdHJpbmdzLgotIwotTEFCRUxfUFJJVkFURV9VRERJX1JFR0lTVFJZX1RZUEVTPVByaXZhdGUgVURESSBSZWdpc3RyeSB0eXBlOgotQlVUVE9OX0RFUExPWV9VRERJX1JFR0lTVFJZPURlcGxveSB0aGUgVW5pdCBUZXN0IFVEREkgUmVnaXN0cnkKLUJVVFRPTl9VUERBVEVfVURESV9SRUdJU1RSWT1VcGRhdGUgdGhlIHByZXZpb3VzbHkgZGVwbG95ZWQgVURESSByZWdpc3RyeQotQlVUVE9OX1JFTU9WRV9VRERJX1JFR0lTVFJZPVJlbW92ZSB0aGUgcHJldmlvdXNseSBkZXBsb3llZCBVRERJIHJlZ2lzdHJ5Ci0KLSMKLSMgV2l6YXJkIHBhZ2UgdGFzayBsYWJlbHMgYW5kIGRlc2NyaXB0aW9ucwotIyAodXNlZCBvbmx5IGZvciBwcm9ncmVzcyBpbmRpY2F0aW9uKS4KLSMKLQotIwotIyBEaWFsb2cgbWVzc2FnZXMKLSMKLQotIwotIyBQcm9ncmVzcyBtZXNzYWdlcwotIwotCi0jCi0jIFdhcm5pbmcgbWVzc2FnZXMKLSMKLQotIwotIyBFcnJvciBtZXNzYWdlcwotIwotTVNHX0VSUk9SX05PX1VERElfUkVHSVNUUllfQVZBSUxBQkxFPUlXQUIwMzYzRSBObyBVRERJIHJlZ2lzdHJ5IGF2YWlsYWJsZS4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMjllODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeU1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBVRERJUmVnaXN0cnlNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgVURESVJlZ2lzdHJ5TWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfUFJJVkFURV9VRERJX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfUFJJVkFURV9VRERJX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BVUFJfUFJJVkFURV9VRERJX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFVQUl9ERVBMT1lfUFJJVkFURV9VRERJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFVQUl9VUERBVEVfUFJJVkFURV9VRERJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFVQUl9SRU1PVkVfUFJJVkFURV9VRERJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1BSSVZBVEVfVURESV9SRUdJU1RSWV9UWVBFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fREVQTE9ZX1VERElfUkVHSVNUUlk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1VQREFURV9VRERJX1JFR0lTVFJZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9SRU1PVkVfVURESV9SRUdJU1RSWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfTk9fVURESV9SRUdJU1RSWV9BVkFJTEFCTEU7Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBVRERJUmVnaXN0cnlNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS9wbHVnaW4vV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3BsdWdpbi9XZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ODdhMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3BsdWdpbi9XZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgVURESSBSZWdpc3RyeSBwbHVnaW4uCi0qIDxwPgotKiBUaGUgV2ViIFNlcnZpY2VzIFVEREkgUmVnaXN0cnkgcGx1Z2luJ3MgaXMgdG8gYWRkIHRoZQotKiBvcHRpb24gdG8gY3JlYXRlIGEgdW5pdCB0ZXN0IFVEREkgcmVnaXN0cnkgCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLiI7Ci0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkiOwotCi0gIC8qKgotICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbiBpbnN0YW5jZV87Ci0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4gKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2VfID0gdGhpczsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICogKFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Iik7Ci0gICogQHJldHVybiBUaGUgV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbiBzaW5nbGV0b24uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlCi0gICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVVJMIGluc3RhbGxVUkwgPSBpbnN0YW5jZV8uZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKTsKLSAgICAgIFVSTCBpbWFnZVVSTCA9IG5ldyBVUkwoaW5zdGFsbFVSTCxuYW1lKTsKLSAgICAgIHJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQotICAqIHBsdWdpbi5wcm9wZXJ0aWVzLgotICAqIEByZXR1cm4gVGhlIFN0cmluZyBtZXNzYWdlLgotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIGtleSApCi0gIHsKLSAgICByZXR1cm4gUGxhdGZvcm0uZ2V0UmVzb3VyY2VTdHJpbmcoaW5zdGFuY2VfLmdldEJ1bmRsZSgpLGtleSk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQotICAqIHBsdWdpbi5wcm9wZXJ0aWVzLiBTdWJzdGl0dXRpb24gc2VxdWVuY2VzIGluIHRoZSBtZXNzYWdlIHN0cmluZwotICAqIGFyZSByZXBsYWNlZCBieSB0aGUgZ2l2ZW4gYXJyYXkgb2Ygc3Vic3RpdHV0aW9uIG9iamVjdHMgKHdoaWNoCi0gICogYXJlIG1vc3QgZnJlcXVlbnRseSBzdHJpbmdzKS4gU2VlIHRoZSBKREsncwotICAqIHtAbGluayBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdH0KLSAgKiBjbGFzcyBmb3IgZnVydGhlciBkZXRhaWxzIG9uIHN1YnN0aXR1dGlvbi4KLSAgKiBAcmV0dXJuIFRoZSBTdHJpbmcgbWVzc2FnZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MgKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldE1lc3NhZ2Uoa2V5KSxhcmdzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM0Zjk0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0vKgotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5FbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uTWVzc2FnZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TaW1wbGVTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LnBsdWdpbi5XZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luOwotKi8KLQotcHVibGljIGNsYXNzIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgYnl0ZSBvcGVyYXRpb25UeXBlOwotICBwcml2YXRlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIHJlZ2lzdHJ5VHlwZTsKLSAgCi0gIC8qCi0gIHB1YmxpYyBTdGF0dXMgZXhlY3V0ZShFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgICBNZXNzYWdlVXRpbHMgbXNnVXRpbHMgPSBuZXcgTWVzc2FnZVV0aWxzKFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uSUQgKyAiLnBsdWdpbiIsIHRoaXMpOwotICAJaWYgKHJlZ2lzdHJ5VHlwZSAhPSBudWxsKQotICAJewotICAJICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpCi0gIAkgIHsKLSAgCSAgCWNhc2UgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuT1BfREVQTE9ZOgotICAJICAgICAgcmV0dXJuIHJlZ2lzdHJ5VHlwZS5kZXBsb3koZW52KTsKLSAgCSAgCWNhc2UgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuT1BfVVBEQVRFOgotICAJICAJICByZXR1cm4gcmVnaXN0cnlUeXBlLnVwZGF0ZShlbnYpOwotICAJICAJY2FzZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5PUF9SRU1PVkU6Ci0gIAkgIAkgIHJldHVybiByZWdpc3RyeVR5cGUucmVtb3ZlKGVudik7Ci0gIAkgIAlkZWZhdWx0OgotICAJICB9Ci0gIAl9Ci0gIAlyZXR1cm4gbmV3IFNpbXBsZVN0YXR1cygiIik7Ci0gIH0KLSAgKi8KLQotICBwdWJsaWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgZ2V0UmVnaXN0cnlUeXBlKCkKLSAgewotICAgIHJldHVybiBnZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSgpOwotICB9Ci0gIAotICBwdWJsaWMgYnl0ZSBnZXRPcGVyYXRpb25UeXBlKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb25UeXBlOwotICB9Ci0gIAotICBwdWJsaWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKQotICB7Ci0gIAlyZXR1cm4gcmVnaXN0cnlUeXBlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVnaXN0cnlUeXBlKFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIHJlZ1R5cGUpCi0gIHsKLSAgCXNldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKHJlZ1R5cGUpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRPcGVyYXRpb25UeXBlKGJ5dGUgdHlwZSkKLSAgewotICAgIG9wZXJhdGlvblR5cGUgPSB0eXBlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZShQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSByZWdUeXBlKQotICB7Ci0gIAlyZWdpc3RyeVR5cGUgPSByZWdUeXBlOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmZhZmE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkFic3RyYWN0Q29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudAotewotICBwcml2YXRlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIHJlZ2lzdHJ5VHlwZTsKLSAgcHJpdmF0ZSBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0gIHByaXZhdGUgQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnk7Ci0gIHByaXZhdGUgV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnk7Ci0gIAotICBwdWJsaWMgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQoKQotICB7Ci0gIAlzdXBlcihudWxsLCAiIik7Ci0gIH0KLQotICAvKiogCi0gICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCkKLSAgewotICAJaWYgKHJlZ2lzdHJ5VHlwZSAhPSBudWxsKQotICAJewotICAgICAgcmVnaXN0cnlUeXBlLnJlZ2lzdGVyQ2FuRmluaXNoKGNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgICAgIHJlZ2lzdHJ5VHlwZS5yZWdpc3RlckRhdGFNYXBwaW5ncyhkYXRhTWFwcGluZ1JlZ2lzdHJ5KTsKLSAgICAgIHJlZ2lzdHJ5VHlwZS5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHdpZGdldFJlZ2lzdHJ5KTsKLSAgICAgIHJldHVybiByZWdpc3RyeVR5cGUuY3JlYXRlKCkuY3JlYXRlKCk7Ci0gIAl9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudChDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgCXJldHVybiBudWxsOwotICB9Ci0gIAotICAvKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGRhdGEgbWFwcGluZ3MgZm9yIHRoaXMgY29tbWFuZCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkpCi0gIHsKLSAgCWRhdGFNYXBwaW5nUmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5jYW5GaW5pc2hSZWdpc3RyeSA9IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgIHRoaXMud2lkZ2V0UmVnaXN0cnkgPSB3aWRnZXRSZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgICogQWxsIHdpemFyZCBmcmFnbWVudHMgbmVlZCB0byBiZSBjbG9uZWFibGUuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgewotICAJUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgPSBuZXcgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQoKTsKLSAgCWZyYWdtZW50LnJlZ2lzdGVyRGF0YU1hcHBpbmdzKGRhdGFNYXBwaW5nUmVnaXN0cnkpOwotICAJZnJhZ21lbnQucmVnaXN0ZXJDYW5GaW5pc2goY2FuRmluaXNoUmVnaXN0cnkpOwotICAJZnJhZ21lbnQucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyh3aWRnZXRSZWdpc3RyeSk7Ci0gIAlmcmFnbWVudC5zZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZShyZWdpc3RyeVR5cGUpOwotICAJcmV0dXJuIGZyYWdtZW50OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZShQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSByZWdpc3RyeVR5cGUpCi0gIHsKLSAgCXRoaXMucmVnaXN0cnlUeXBlID0gcmVnaXN0cnlUeXBlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhM2Q2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkucGx1Z2luLldlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLklXb3JrYmVuY2hIZWxwU3lzdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi0vKioKLSogVGhpcyBVRERJIGNvbmZpZ3VyYXRpb24gcGFnZSBwcm9tcHRzIHRoZSB1c2VyCi0qIGZvciB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gY29uZmlndXJlIHRoZQotKiB1bml0IHRlc3QgVURESSByZWdpc3RyeS4KLSovCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcjsKLQotICBwcml2YXRlIEJ1dHRvbiBkZXBsb3lSYWRpb187Ci0gIHByaXZhdGUgTGFiZWwgdHlwZXNMYWJlbF87Ci0gIHByaXZhdGUgQ29tYm8gdHlwZXNDb21ib187Ci0gIHByaXZhdGUgQnV0dG9uIHVwZGF0ZVJhZGlvXzsKLSAgcHJpdmF0ZSBCdXR0b24gcmVtb3ZlUmFkaW9fOwotICBwcml2YXRlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlW10gdHlwZXNfOwotICBwcml2YXRlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIGluc3RhbGxlZFR5cGVfOwotCi0gIC8vIEluZm9wb3AKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QVVBSX1BSSVZBVEVfVURESV9QQUdFID0gV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5JRCArICIucHVwcjAwMDEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BVUFJfUFJJVkFURV9VRERJX1RZUEUgPSBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLklEICsgIi5wdXByMDAwMiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFVQUl9ERVBMT1lfUFJJVkFURV9VRERJID0gV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5JRCArICIucHVwcjAwMDMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BVUFJfVVBEQVRFX1BSSVZBVEVfVURESSA9IFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uSUQgKyAiLnB1cHIwMDA1IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QVVBSX1JFTU9WRV9QUklWQVRFX1VEREkgPSBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLklEICsgIi5wdXByMDAwNCI7Ci0KLSAgcHVibGljIFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0KCkKLSAgewotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgCXRoaXMuc3RhdHVzTGlzdGVuZXIgPSBzdGF0dXNMaXN0ZW5lcjsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuVE9PTFRJUF9QVVBSX1BSSVZBVEVfVURESV9QQUdFKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgSU5GT1BPUF9QVVBSX1BSSVZBVEVfVURESV9QQUdFKTsKLQotICAgIEdyaWRMYXlvdXQgZ2w7Ci0gICAgR3JpZERhdGEgZ2Q7Ci0gICAgCi0gICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgCWhhbmRsZVdpZGdldEV2ZW50KGV2ZW50KTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgSVdvcmtiZW5jaEhlbHBTeXN0ZW0gaGVscFN5c3RlbSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpOwotICAgIAotICAgIGRlcGxveVJhZGlvXyA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuUkFESU8pOwotICAgIGRlcGxveVJhZGlvXy5zZXRUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLkJVVFRPTl9ERVBMT1lfVURESV9SRUdJU1RSWSk7Ci0gICAgZGVwbG95UmFkaW9fLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICBkZXBsb3lSYWRpb18uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXIpOwotICAgIGRlcGxveVJhZGlvXy5zZXRUb29sVGlwVGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5UT09MVElQX1BVUFJfREVQTE9ZX1BSSVZBVEVfVURESSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKGRlcGxveVJhZGlvXywgSU5GT1BPUF9QVVBSX0RFUExPWV9QUklWQVRFX1VEREkpOwotCi0gICAgQ29tcG9zaXRlIHR5cGVDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCxTV1QuTk9ORSk7Ci0gICAgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgIGdsLm1hcmdpbkhlaWdodCA9IDU7Ci0gICAgZ2wudmVydGljYWxTcGFjaW5nID0gMTU7Ci0gICAgZ2wubWFyZ2luV2lkdGggPSAyMDsKLSAgICB0eXBlQ29tcG9zaXRlLnNldExheW91dChnbCk7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICB0eXBlQ29tcG9zaXRlLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgdHlwZXNMYWJlbF8gPSBuZXcgTGFiZWwodHlwZUNvbXBvc2l0ZSwgU1dULldSQVApOwotICAgIHR5cGVzTGFiZWxfLnNldFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuTEFCRUxfUFJJVkFURV9VRERJX1JFR0lTVFJZX1RZUEVTKTsKLSAgICB0eXBlc0xhYmVsXy5zZXRUb29sVGlwVGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5UT09MVElQX1BVUFJfUFJJVkFURV9VRERJX1RZUEUpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh0eXBlc0xhYmVsXywgSU5GT1BPUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFKTsKLQotICAgIHR5cGVzQ29tYm9fID0gbmV3IENvbWJvKHR5cGVDb21wb3NpdGUsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotICAgIHR5cGVzQ29tYm9fLnNldExheW91dERhdGEoZ2QpOwotICAgIHR5cGVzQ29tYm9fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKLSAgICB0eXBlc0NvbWJvXy5zZXRUb29sVGlwVGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5UT09MVElQX1BVUFJfUFJJVkFURV9VRERJX1RZUEUpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh0eXBlc0NvbWJvXywgSU5GT1BPUF9QVVBSX1BSSVZBVEVfVURESV9UWVBFKTsKLQotICAgIHVwZGF0ZVJhZGlvXyA9IG5ldyBCdXR0b24ocGFyZW50LFNXVC5SQURJTyk7Ci0gICAgdXBkYXRlUmFkaW9fLnNldFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuQlVUVE9OX1VQREFURV9VRERJX1JFR0lTVFJZKTsKLSAgICB1cGRhdGVSYWRpb18uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICB1cGRhdGVSYWRpb18uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbixsaXN0ZW5lcik7Ci0gICAgdXBkYXRlUmFkaW9fLnNldFRvb2xUaXBUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLlRPT0xUSVBfUFVQUl9VUERBVEVfUFJJVkFURV9VRERJKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodXBkYXRlUmFkaW9fLCBJTkZPUE9QX1BVUFJfVVBEQVRFX1BSSVZBVEVfVURESSk7Ci0KLSAgICByZW1vdmVSYWRpb18gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULlJBRElPKTsKLSAgICByZW1vdmVSYWRpb18uc2V0VGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5CVVRUT05fUkVNT1ZFX1VERElfUkVHSVNUUlkpOwotICAgIHJlbW92ZVJhZGlvXy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHJlbW92ZVJhZGlvXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcik7Ci0gICAgcmVtb3ZlUmFkaW9fLnNldFRvb2xUaXBUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLlRPT0xUSVBfUFVQUl9SRU1PVkVfUFJJVkFURV9VRERJKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAocmVtb3ZlUmFkaW9fLCBJTkZPUE9QX1BVUFJfUkVNT1ZFX1BSSVZBVEVfVURESSk7ICAgICAgICAgICAgICAgIAotCi0gICAgbG9hZFR5cGVzKCk7Ci0gICAgaW5pdCgpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGxvYWRUeXBlcygpCi0gIHsKLSAgICB0eXBlc18gPSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0VHlwZXMoKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBpbml0KCkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXNfLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh0eXBlc19baV0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHlwZXNDb21ib18uYWRkKHR5cGVzX1tpXS5nZXROYW1lKCkpOwotICAgICAgICBpZiAodHlwZXNfW2ldLmlzUHJpdmF0ZVVERElSZWdpc3RyeUluc3RhbGxlZCgpKQotICAgICAgICAgIGluc3RhbGxlZFR5cGVfID0gdHlwZXNfW2ldOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHlwZXNDb21ib18uZ2V0SXRlbUNvdW50KCkgPiAwKQotICAgICAgdHlwZXNDb21ib18uc2V0VGV4dCh0eXBlc0NvbWJvXy5nZXRJdGVtKDApKTsKLSAgICBpZiAoaW5zdGFsbGVkVHlwZV8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cGRhdGVSYWRpb18uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgIHJlbW92ZVJhZGlvXy5zZXRFbmFibGVkKHRydWUpOyAgICAgICAgICAgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHVwZGF0ZVJhZGlvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgIHJlbW92ZVJhZGlvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlV2lkZ2V0RXZlbnQoRXZlbnQgZXZlbnQpCi0gIHsKLSAgICBpZiAoZXZlbnQud2lkZ2V0ID09IHJlbW92ZVJhZGlvXyB8fCBldmVudC53aWRnZXQgPT0gdXBkYXRlUmFkaW9fKQotICAgIHsKLSAgICAgIGJvb2xlYW4gaXNVcGRhdGVPclJlbW92ZVNlbGVjdGVkID0gKChCdXR0b24pZXZlbnQud2lkZ2V0KS5nZXRTZWxlY3Rpb24oKTsKLSAgICAgIHR5cGVzTGFiZWxfLnNldEVuYWJsZWQoIWlzVXBkYXRlT3JSZW1vdmVTZWxlY3RlZCk7Ci0gICAgICB0eXBlc0NvbWJvXy5zZXRFbmFibGVkKCFpc1VwZGF0ZU9yUmVtb3ZlU2VsZWN0ZWQpOwotICAgIH0KLSAgICBlbHNlIGlmIChldmVudC53aWRnZXQgPT0gZGVwbG95UmFkaW9fKQotICAgIHsKLSAgICAgIGJvb2xlYW4gaXNEZXBsb3lTZWxlY3RlZCA9ICgoQnV0dG9uKWV2ZW50LndpZGdldCkuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICB0eXBlc0xhYmVsXy5zZXRFbmFibGVkKGlzRGVwbG95U2VsZWN0ZWQpOwotICAgICAgdHlwZXNDb21ib18uc2V0RW5hYmxlZChpc0RlcGxveVNlbGVjdGVkKTsKLSAgICB9Ci0gICAgc3RhdHVzTGlzdGVuZXIuaGFuZGxlRXZlbnQoZXZlbnQpOwotICB9Ci0gIAotICBwdWJsaWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKQotICB7Ci0gIAlpZiAoZGVwbG95UmFkaW9fLmdldFNlbGVjdGlvbigpKQotICAJewotICAJICBTdHJpbmcgc2VsZWN0ZWRSZWdpc3RyeU5hbWUgPSB0eXBlc0NvbWJvXy5nZXRUZXh0KCk7Ci0gIAkgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXNfLmxlbmd0aDsgaSsrKQotICAgICAgICBpZiAoc2VsZWN0ZWRSZWdpc3RyeU5hbWUuZXF1YWxzKHR5cGVzX1tpXS5nZXROYW1lKCkpKQotICAJICAJICByZXR1cm4gdHlwZXNfW2ldOwotICAgICAgcmV0dXJuIG51bGw7Ci0gIAl9Ci0gIAllbHNlCi0gIAkgIHJldHVybiBpbnN0YWxsZWRUeXBlXzsKLSAgfQotICAKLSAgcHVibGljIGJ5dGUgZ2V0T3BlcmF0aW9uVHlwZSgpCi0gIHsKLSAgCWlmIChkZXBsb3lSYWRpb18uZ2V0U2VsZWN0aW9uKCkpCi0gIAkgIHJldHVybiBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5PUF9ERVBMT1k7Ci0gIAllbHNlIGlmICh1cGRhdGVSYWRpb18uZ2V0U2VsZWN0aW9uKCkpCi0gICAgICByZXR1cm4gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuT1BfVVBEQVRFOwotICAJZWxzZSBpZiAocmVtb3ZlUmFkaW9fLmdldFNlbGVjdGlvbigpKQotICAgICAgcmV0dXJuIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlLk9QX1JFTU9WRTsKLSAgCWVsc2UKLSAgCSAgcmV0dXJuIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlLk9QX0RFUExPWTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBwcml2YXRlVURESVJlZ2lzdHJ5VHlwZSA9IGdldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKCk7Ci0gICAgaWYgKHByaXZhdGVVRERJUmVnaXN0cnlUeXBlICE9IG51bGwpCi0gICAgICByZXR1cm4gcHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuZ2V0T3BlcmF0aW9uU3RhdHVzKGdldE9wZXJhdGlvblR5cGUoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBVRERJUmVnaXN0cnlNZXNzYWdlcy5NU0dfRVJST1JfTk9fVURESV9SRUdJU1RSWV9BVkFJTEFCTEUgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhlYWE5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gaW1wbGVtZW50cyBDb25kaXRpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIGNvbmRpdGlvbjsKLQotICBwdWJsaWMgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kKCkKLSAgewotICAgIGNvbmRpdGlvbiA9IHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgY29uZGl0aW9uID0gIWNvbmRpdGlvbjsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgdW5kbyggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBjb25kaXRpb24gPSAhY29uZGl0aW9uOwotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gY29uZGl0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9iaW5kaW5nL1ByaXZhdGVVRERJV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvYmluZGluZy9Qcml2YXRlVURESVdpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0NGE0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9iaW5kaW5nL1ByaXZhdGVVRERJV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5TWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLlByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLlByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBQcml2YXRlVURESVdpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwotewotICBwcml2YXRlIENhbkZpbmlzaFJlZ2lzdHJ5ICAgY2FuRmluaXNoUmVnaXN0cnk7Ci0gIHByaXZhdGUgV2lkZ2V0UmVnaXN0cnkgICAgICB3aWRnZXRSZWdpc3RyeTsKLSAgcHJpdmF0ZSBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0gIHByaXZhdGUgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQgcHJpdmF0ZVVERElTZWxGcmFnbWVudDsKLSAgcHJpdmF0ZSBQcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQgY29uZGl0aW9uQ29tbWFuZDsKLSAgCi0gIHB1YmxpYyBQcml2YXRlVURESVdpZGdldEJpbmRpbmcoKQotICB7Ci0gICAgcHJpdmF0ZVVERElTZWxGcmFnbWVudCA9IG5ldyBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudCgpOwotICAgIGNvbmRpdGlvbkNvbW1hbmQgPSBuZXcgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXRDb25kaXRpb25Db21tYW5kKCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgewotICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgewotICAgICAgICBTZXF1ZW5jZUZyYWdtZW50IHJvb3QgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoY29uZGl0aW9uQ29tbWFuZCwgIiIpKTsKLSAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KCJQcml2YXRlVURESVNlbGVjdGlvbldpZGdldCIpKTsKLSAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KGNvbmRpdGlvbkNvbW1hbmQsICIiKSk7Ci0gICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kKCksICIiKSk7Ci0gICAgICAgIHJvb3QuYWRkKHByaXZhdGVVRERJU2VsRnJhZ21lbnQpOwotICAgICAgICByZXR1cm4gcm9vdDsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmNhbkZpbmlzaFJlZ2lzdHJ5ID0gY2FuRmluaXNoUmVnaXN0cnk7Ci0gICAgcHJpdmF0ZVVERElTZWxGcmFnbWVudC5yZWdpc3RlckNhbkZpbmlzaCh0aGlzLmNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgICAKLSAgICBjYW5GaW5pc2hSZWdpc3RyeS5hZGRDb25kaXRpb24oY29uZGl0aW9uQ29tbWFuZCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5ID0gZGF0YVJlZ2lzdHJ5OwotICAgIHByaXZhdGVVRERJU2VsRnJhZ21lbnQucmVnaXN0ZXJEYXRhTWFwcGluZ3MoZGF0YU1hcHBpbmdSZWdpc3RyeSk7Ci0gICAgCi0gICAgLy8gUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kCi0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeS5hZGRNYXBwaW5nKFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUiLCBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQcml2YXRlVURESVNlbGVjdGlvbldpZGdldC5jbGFzcywgIk9wZXJhdGlvblR5cGUiLCBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIC8vIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50Ci0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeS5hZGRNYXBwaW5nKFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUiLCBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudC5jbGFzcyk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLndpZGdldFJlZ2lzdHJ5ID0gd2lkZ2V0UmVnaXN0cnk7Ci0gICAgcHJpdmF0ZVVERElTZWxGcmFnbWVudC5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHRoaXMud2lkZ2V0UmVnaXN0cnkpOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCJQcml2YXRlVURESVNlbGVjdGlvbldpZGdldCIsIAotICAgICAgVURESVJlZ2lzdHJ5TWVzc2FnZXMuUEFHRV9USVRMRV9QUklWQVRFX1VERElfQ09ORklHLAotICAgICAgVURESVJlZ2lzdHJ5TWVzc2FnZXMuUEFHRV9ERVNDX1BSSVZBVEVfVURESV9DT05GSUcsCi0JICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgIHsKLQkgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0JICAgIHsKLQkgICAgICByZXR1cm4gbmV3IFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0KCk7Ci0JICAgIH0KLQkgIH0KLSAgICApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NjNkNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci0KLQotcHVibGljIGludGVyZmFjZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBleHRlbmRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIC8vIG9wZXJhdGlvbiB0eXBlcwotICBwdWJsaWMgc3RhdGljIGJ5dGUgT1BfREVQTE9ZID0gMHgwOwotICBwdWJsaWMgc3RhdGljIGJ5dGUgT1BfVVBEQVRFID0gMHgxOwotICBwdWJsaWMgc3RhdGljIGJ5dGUgT1BfUkVNT1ZFID0gMHgyOwotCi0gIC8vIGdlbmVyYWwgaW5mb3JtYXRpb24KLSAgcHVibGljIFN0cmluZyBnZXRJRCgpOwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNQcml2YXRlVURESVJlZ2lzdHJ5SW5zdGFsbGVkKCk7Ci0gIHB1YmxpYyBJU3RhdHVzIGdldE9wZXJhdGlvblN0YXR1cyhieXRlIG9wZXJhdGlvbik7Ci0KLSAgLy8gcmVnaXN0cnkgVVJMcwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlBUEkoKTsKLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoQVBJKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEyZGJmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuYmluZGluZy5Qcml2YXRlVURESVdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci0KLQotcHVibGljIGNsYXNzIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbCBpbXBsZW1lbnRzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS51ZGRpLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlCi17Ci0gICAgcHVibGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbCgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSB7Ci0gICAgICAgIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlW10gdHlwZXMgPSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0VHlwZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKHR5cGVzW2ldLmlzUHJpdmF0ZVVERElSZWdpc3RyeUluc3RhbGxlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UHJpdmF0ZVVERElSZWdpc3RyeUlucXVpcnlBUEkoKSB7Ci0gICAgICAgIFZlY3RvciBpbnF1aXJ5QVBJVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVtdIHR5cGVzID0gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFR5cGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh0eXBlc1tpXS5pc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gdHlwZXNbaV0uZ2V0SW5xdWlyeUFQSSgpOwotICAgICAgICAgICAgICAgIGlmIChpbnF1aXJ5QVBJICE9IG51bGwgJiYgaW5xdWlyeUFQSS5zdGFydHNXaXRoKCJodHRwIikpCi0gICAgICAgICAgICAgICAgICAgIGlucXVpcnlBUElWZWN0b3IuYWRkKGlucXVpcnlBUEkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nW10gaW5xdWlyeUFQSUFycmF5ID0gbmV3IFN0cmluZ1tpbnF1aXJ5QVBJVmVjdG9yLnNpemUoKV07Ci0gICAgICAgIEVudW1lcmF0aW9uIGUgPSBpbnF1aXJ5QVBJVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgIGludCBqID0gMDsKLSAgICAgICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgaW5xdWlyeUFQSUFycmF5W2pdID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBqKys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlucXVpcnlBUElBcnJheTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVB1Ymxpc2hBUEkoKSB7Ci0gICAgICAgIFZlY3RvciBwdWJsaXNoQVBJVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVtdIHR5cGVzID0gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFR5cGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh0eXBlc1tpXS5pc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwdWJsaXNoQVBJID0gdHlwZXNbaV0uZ2V0UHVibGlzaEFQSSgpOwotICAgICAgICAgICAgICAgIGlmIChwdWJsaXNoQVBJICE9IG51bGwgJiYgcHVibGlzaEFQSS5zdGFydHNXaXRoKCJodHRwIikpCi0gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hBUElWZWN0b3IuYWRkKHB1Ymxpc2hBUEkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nW10gcHVibGlzaEFQSUFycmF5ID0gbmV3IFN0cmluZ1twdWJsaXNoQVBJVmVjdG9yLnNpemUoKV07Ci0gICAgICAgIEVudW1lcmF0aW9uIGUgPSBwdWJsaXNoQVBJVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgIGludCBqID0gMDsKLSAgICAgICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgcHVibGlzaEFQSUFycmF5W2pdID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBqKys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHB1Ymxpc2hBUElBcnJheTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIENvbW1hbmRXaWRnZXRCaW5kaW5nIGdldEJpbmRpbmcoKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc1NTEwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLXB1YmxpYyBjbGFzcyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5IHsKLQotICAgIHByaXZhdGUgc3RhdGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgaW5zdGFuY2VfOwotICAgIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnRWxlbWVudHNfOwotCi0gICAgcHJpdmF0ZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5KCkgewotICAgIH0KLSAgCi0gICAgLyoqCi0gICAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICAgKiBAcmV0dXJuIEEgc2luZ2xldG9uIFdlYlNlcnZpY2VDbGllbnRUeXBlUmVnaXN0cnkgb2JqZWN0LgotICAgICovCi0gICAgcHVibGljIHN0YXRpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5IGdldEluc3RhbmNlKCkgewotICAgICAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpIHsKLSAgICAgICAgICAgIGluc3RhbmNlXyA9IG5ldyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5KCk7Ci0gICAgICAgICAgICBpbnN0YW5jZV8uZ2V0Q29uZmlnRWxlbWVudHMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaW5zdGFuY2VfOwotICAgIH0KLSAgCi0gICAgcHVibGljIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGdldENvbmZpZ0VsZW1lbnRzKCkgewotICAgICAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAgICAgY29uZmlnRWxlbWVudHNfID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByaXZhdGVVRERJUmVnaXN0cnlUeXBlIik7Ci0gICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ0VsZW1lbnRzXy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGludCB3ZWlnaHQgPSBnZXRXZWlnaHQoY29uZmlnRWxlbWVudHNfW2ldKTsKLSAgICAgICAgICBpbnQgaW5kZXggPSAtMTsKLSAgICAgICAgICBmb3IgKGludCBqID0gdi5zaXplKCktMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHdlaWdodCA+IGdldFdlaWdodCgoSUNvbmZpZ3VyYXRpb25FbGVtZW50KXYuZ2V0KGopKSkKLSAgICAgICAgICAgICAgaW5kZXggPSBqOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICAgICAgdi5hZGQoaW5kZXgsIGNvbmZpZ0VsZW1lbnRzX1tpXSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdi5hZGQoY29uZmlnRWxlbWVudHNfW2ldKTsKLSAgICAgICAgfQotICAgICAgICB2LmNvcHlJbnRvKGNvbmZpZ0VsZW1lbnRzXyk7Ci0gICAgICAgIHJldHVybiBjb25maWdFbGVtZW50c187Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgZ2V0V2VpZ2h0KElDb25maWd1cmF0aW9uRWxlbWVudCBlKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChlLmdldEF0dHJpYnV0ZSgid2VpZ2h0IikpOwotICAgICAgfQotICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBnZXRDb25maWdFbGVtZW50QnlJRChTdHJpbmcgaWQpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPGNvbmZpZ0VsZW1lbnRzXy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKGNvbmZpZ0VsZW1lbnRzX1tpXS5nZXRBdHRyaWJ1dGUoImlkIikuZXF1YWxzKGlkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnRWxlbWVudHNfW2ldOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVtdIGdldFR5cGVzKCkgewotICAgICAgICBWZWN0b3IgdHlwZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnRWxlbWVudHNfLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIE9iamVjdCB0eXBlT2JqID0gY29uZmlnRWxlbWVudHNfW2ldLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVPYmogaW5zdGFuY2VvZiBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZXMuYWRkKHR5cGVPYmopOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICB9Ci0KLSAgICAgICAgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVbXSB0eXBlc0FycmF5ID0gbmV3IFByaXZhdGVVRERJUmVnaXN0cnlUeXBlW3R5cGVzLnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdHlwZXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgIHR5cGVzQXJyYXlbal0gPSAoUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUpdHlwZXMuZWxlbWVudEF0KGopOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlc0FycmF5OwotICAgIH0KLQotICAgIHB1YmxpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBnZXRUeXBlQnlJRChTdHJpbmcgaWQpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIE9iamVjdCB0eXBlT2JqID0gZ2V0Q29uZmlnRWxlbWVudEJ5SUQoaWQpLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgICAgICBpZiAodHlwZU9iaiBpbnN0YW5jZW9mIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiAoUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUpdHlwZU9iajsgCi0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0U3VwcG9ydGVkU2VydmVyRmFjdG9yeUlEQnlJRChTdHJpbmcgaWQpIHsKLSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQgPSBnZXRDb25maWdFbGVtZW50QnlJRChpZCk7Ci0gICAgICAgIGlmIChjb25maWdFbGVtZW50ID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgVmVjdG9yIGlkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJzZXJ2ZXJGYWN0b3J5SUQiKSwgIiwiKTsKLSAgICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgewotICAgICAgICAgICAgaWRWZWN0b3IuYWRkKHN0Lm5leHRUb2tlbigpKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmdbXSBpZHMgPSBuZXcgU3RyaW5nW2lkVmVjdG9yLnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRWZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlkc1tpXSA9IChTdHJpbmcpaWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpZHM7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxNjVlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRlZmZlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzLXVpLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwMTY2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMmE1YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mzc6MDcgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjZmZWEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MDo0NSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMGI1OTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMi5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuYWN0aW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2c7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnVkZGk7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjIwNCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZGVjMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9pY29ucy9qYXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2ljb25zL2phcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTJmNGYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2ljb25zL2phcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFkMDJhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLQotIwotIwlXZWIgU2VydmljZXMgUHJlZmVyYW5jZSBQYWdlcwotIwotIyBDYXRlZ29yaWVzCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1JFU09VUkNFX01BTkFHRU1FTlQ9UmVzb3VyY2UgTWFuYWdlbWVudAotCi0jCi0jICBXUy1JIFByZWZlcmVuY2UgcGFnZXMKLSMKLSMgV1MtSSBDb21wbGlhbmNlIFBhZ2UKLSMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfV1NJPVdTLUkgQ29tcGxpYW5jZQotCi0jCi0jIFBvcHVwIGFjdGlvbiBDYXRlZ29yeQotIwotTEFCRUxfUE9QVVBfQ0FURUdPUllfV0VCX1NFUlZJQ0VTPVdlYiBTZXJ2aWNlcwotCi0jCi0jIE1lc3NhZ2VzIGZvciBwb3B1cCBhY3Rpb24gKFRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXIpCi0jCi1QT1BVUF9URVNUX1dTREw9VGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCi0KLQotCi0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZhYjBiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0gICAgICA8Y2F0ZWdvcnkKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1MiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyI+Ci0gICAgICA8L2NhdGVnb3J5PgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotICAgICAgCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfUkVTT1VSQ0VfTUFOQUdFTUVOVCIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuUmVzb3VyY2VNYW5hZ21lbnRQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuUmVzb3VyY2VNYW5hZ21lbnRQcmVmZXJlbmNlUGFnZSI+Ci0gICAgICA8L3BhZ2U+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJvcGVydHlQYWdlcyI+Ci0KLSAgICAgIAotCi0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuIgotICAgICAgICAgICAgYWRhcHRhYmxlPSJ0cnVlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5lamIucG9wdXBNZW51Ij4KLSAgICAgICAgIDxtZW51Ci0gICAgICAgICAgICAgICBsYWJlbD0iJUxBQkVMX1BPUFVQX0NBVEVHT1JZX1dFQl9TRVJWSUNFUyIKLSAgICAgICAgICAgICAgIHBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkuZWpiLnBvcHVwTWVudSI+Ci0gICAgICAgICAgICA8c2VwYXJhdG9yCi0gICAgICAgICAgICAgICAgICBuYW1lPSJwb3B1cEFjdGlvbnMiPgotICAgICAgICAgICAgPC9zZXBhcmF0b3I+Ci0gICAgICAgICA8L21lbnU+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5FbnRlcnByaXNlQmVhbnMiCi0gICAgICAgICAgICBhZGFwdGFibGU9InRydWUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LmVqYjMucG9wdXBNZW51Ij4KLSAgICAgICAgIDxtZW51Ci0gICAgICAgICAgICAgICBsYWJlbD0iJUxBQkVMX1BPUFVQX0NBVEVHT1JZX1dFQl9TRVJWSUNFUyIKLSAgICAgICAgICAgICAgIHBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkuZWpiLnBvcHVwTWVudSI+Ci0gICAgICAgICAgICA8c2VwYXJhdG9yCi0gICAgICAgICAgICAgICAgICBuYW1lPSJwb3B1cEFjdGlvbnMiPgotICAgICAgICAgICAgPC9zZXBhcmF0b3I+Ci0gICAgICAgICA8L21lbnU+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgIAotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuYWN0aW9uLldTRExGaWxlTWVudSIKLSAgICAgICAgICAgIGFkYXB0YWJsZT0idHJ1ZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX1RFU1RfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucG9wdXAuUG9wdXBUZXN0U2VydmljZSIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBvcHVwLlBvcHVwVGVzdFNlcnZpY2UiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvV1NVSVBsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9XU1VJUGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MTFmMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9XU1VJUGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotIyAyMDA2MDMyOSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA2MDMyOSAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA2MDMzMSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA4MDMyNCAgIDIyMDk4MyB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotIyAyMDA4MDMyNiAgIDE3MTcwNSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZywgaW1wcm92ZSBBbnRUYXNrIGVycm9ycyByZXBvcnQKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1ZFTkRPUj1FY2xpcHNlLm9yZwotUExVR0lOX0RFU0M9XAotVGhlIFdlYiBzZXJ2aWNlcyBHVUkgcGx1Z2luIGRlbGl2ZXJzIHRoZSBncmFwaGljYWwgXAotdXNlciBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlcyBmdW5jdGlvbiBvZiB0aGUgXAotV2ViIHNlcnZpY2VzIHBsdWdpbi4KLQotUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTPVdlYiBTZXJ2aWNlcwotCi0jCi0jCVdlYiBTZXJ2aWNlcyBQcmVmZXJhbmNlIFBhZ2VzCi0jCi0jIENhdGVnb3JpZXMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfUkVTT1VSQ0VfTUFOQUdFTUVOVD1SZXNvdXJjZSBNYW5hZ2VtZW50Ci1QUkVGRVJFTkNFX0NBVEVHT1JZX0NPREVfR0VORVJBVElPTj1Db2RlIEdlbmVyYXRpb24KLVBSRUZFUkVOQ0VfQ0FURUdPUllfU0NFTkFSSU9fREVGQVVMVFM9U2NlbmFyaW8gRGVmYXVsdHMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfUFJPSkVDVF9UT1BPTE9HWT1Qcm9qZWN0IFRvcG9sb2d5Ci1QUkVGRVJFTkNFX0NBVEVHT1JZX0RSSVZFUl9KQVJTPUpEQkMgZHJpdmVycwotCi0jCi0jU2NlbmFyaW8gRGVmYXVsdHMKLUJVVFRPTl9MQVVOQ0hfU0FNUExFPSZMYXVuY2ggdGhlIHNhbXBsZSB3aGVuIGdlbmVyYXRlZAotTEFCRUxfTU9WRV9VUD0mVXAKLUxBQkVMX01PVkVfRE9XTj0mRG93bgotTEFCRUxfTU9WRV9VUF8yPVUmcAotTEFCRUxfTU9WRV9ET1dOXzI9RG93Jm4KLQotIwotIyBQcmVmZXJlbmNlcyBUb29sdGlwcwotIwotCi0jU2NlbmFyaW8gRGVmYXVsdHMKLVRPT0xUSVBfUFBTRF9QQUdFPVNldCB0aGUgZGVmYXVsdHMgZm9yIHRoZSBXZWIgc2VydmljZSBzY2VuYXJpb3MuCi1UT09MVElQX1BQU0RfQ0hFQ0tCT1hfTEFVTkNIX1NBTVBMRT1MYXVuY2ggdGhlIHNhbXBsZSBhcHBsaWNhdGlvbiBhZnRlciBnZW5lcmF0aW9uLgotVE9PTFRJUF9TRVJWSUNFX1RZUEVfVEFCTEVfVklFV0VSPVByZWZlcnJlZCBvcmRlciBvZiB0aGUgbGlzdCBvZiBzZXJ2aWNlIHByb2plY3QgdHlwZXMKLVRPT0xUSVBfQ0xJRU5UX1RZUEVfVEFCTEVfVklFV0VSPVByZWZlcnJlZCBvcmRlciBvZiB0aGUgbGlzdCBvZiBjbGllbnQgcHJvamVjdCB0eXBlcwotVE9PTFRJUF9NT1ZFX1VQPU1vdmUgdGhlIHNlbGVjdGVkIHByb2plY3QgdHlwZSB1cCB0aGUgbGlzdAotVE9PTFRJUF9NT1ZFX0RPV049TW92ZSB0aGUgc2VsZWN0ZWQgcHJvamVjdCB0eXBlIGRvd24gdGhlIGxpc3QKLQotIwotIyBSZXNvdXJjZSBNYW5hZ21lbnQKLVRPT0xUSVBfUFBSTV9QQUdFPVNldCBwcmVmZXJlbmNlcyB0aGF0IGNvbnRyb2wgcmVzb3VyY2VzIHVzZWQvZ2VuZXJhdGVkIGJ5IHRoZSBXZWIgc2VydmljZS4KLVRPT0xUSVBfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVM9T3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZy4KLVRPT0xUSVBfUFBSTV9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUz1DcmVhdGUgZm9sZGVycyB3aGVuIG5lY2Vzc2FyeS4KLVRPT0xUSVBfUFBSTV9DSEVDS0JPWF9DSEVDS19PVVQ9Q2hlY2sgb3V0IGZpbGVzIHdpdGhvdXQgd2FybmluZy4KLVRPT0xUSVBfUFBSTV9DSEVDS0JPWF9TS0VMRVRPTl9NRVJHRT1FbmFibGUgbWVyZ2luZyBvZiBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZS4KLUJVVFRPTl9DUkVBVEVfRk9MREVSUz0mQ3JlYXRlIGZvbGRlcnMgd2hlbiBuZWNlc3NhcnkKLUJVVFRPTl9PVkVSV1JJVEVfRklMRVM9Jk92ZXJ3cml0ZSBmaWxlcyB3aXRob3V0IHdhcm5pbmcKLUJVVFRPTl9DSEVDS09VVF9GSUxFUz1DJmhlY2sgb3V0IGZpbGVzIHdpdGhvdXQgd2FybmluZwotQlVUVE9OX1NLRUxFVE9OX01FUkdFPSZNZXJnZSBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZQotCi0jCi0jIEdlbmVyYWwgbWVzc2FnZXMuCi0jCi1JU1RBVFVTX1dJVEhPVVRfRVhDRVBUSU9OPXswfQotSVNUQVRVU19XSVRIX0VYQ0VQVElPTj17MH1cbkV4Y2VwdGlvbjogezF9Ci1NU0dfSU5GT19TQVZFRF9TVEFUVVM9SVdBQjAyOTdJIFByZXNzIHRoZSBEZXRhaWxzIGJ1dHRvbiB0byBzZWUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcy4KLU1TR19TRUVfRVJST1JfTE9HPVNlZSB0aGUgUGxhdGZvcm0ncyBlcnJvciBsb2cgZm9yIGRldGFpbAotCi0jCi0jIFR5cGVTZWxlY3Rpb25EaWFsb2cKLSMKLURJQUxPR19USVRMRV9DTEFTU19CUk9XU0U9QnJvd3NlIENsYXNzZXMKLUxBQkVMX0NMQVNTX0JST1dTRT1DbGFzcyBuYW1lOiAoPyA9IGFueSBjaGFyYWN0ZXIsICogPSBhbnkgc3RyaW5nKQotRElBTE9HX1RJVExFX0lOVEVSRkFDRV9CUk9XU0U9QnJvd3NlIEludGVyZmFjZXMKLQotIwotIyBDb21tb24gd2l6YXJkIHN0cmluZ3MuCi0jCi1MQUJFTF9TQU1QTEVfVFlQRVM9SmF2YSBwcm94eSBzYW1wbGU6Ci0KLSMKLSMgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cKLSMKLURJQUxPR19USVRMRV9SRVNPVVJDRV9CUk9XU0U9QnJvd3NlIEZpbGVzCi1MQUJFTF9SRVNPVVJDRV9GSUxURVI9RmlsdGVyOgotCi0jCi0jIFRvb2x0aXBzIGZvciBkaWFsb2cuUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cKLSMgRFJFUz1EaWFsb2cvUkVTb3VyY2VzCi0jCi1UT09MVElQX0RSRVNfQ09NQk9fUkVTT1VSQ0VfVFlQRT1UeXBlIG9mIHJlc291cmNlcyB0byBicm93c2UuCi1UT09MVElQX0RSRVNfVFJFRV9SRVNPVVJDRT1SZXNvdXJjZXMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uCi0KLSMKLSMgTWVzc2FnZXMgZm9yIHByb2plY3QgdG9wb2xvZ3kgcHJlZmVyZW5jZSBwYWdlCi0jCi1UT09MVElQX1BUUFBfUEFHRT1QcmVmZXJlbmNlIHRoYXQgY29udHJvbCB0aGUgcHJvamVjdCB0b3BvbG9neSBvZiB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBjbGllbnQgc2NlbmFyaW9zLgotVE9PTFRJUF9FTkFCTEVfVFdPX0VBUlM9RW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdlbmVyYXRlIHlvdXIgV2ViIHNlcnZpY2UgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCBpbiBkaWZmZXJlbnQgRUFSIHByb2plY3RzLgotCi1MQUJFTF9FTkFCTEVfVFdPX0VBUlM9JkdlbmVyYXRlIFdlYiBzZXJ2aWNlIGFuZCBXZWIgc2VydmljZSBjbGllbnQgaW4gZGlmZmVyZW50IEVBUiBwcm9qZWN0cwotTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRT1DbGllbnQgcHJvamVjdCB0eXBlcwotTEFCRUxfU0VSVklDRV9UWVBFX05BTUU9U2VydmljZSBwcm9qZWN0IHR5cGVzCi0jCi0jIFJlc291cmNlIEJyb3dzZXIKLSMKLURJQUxPR19USVRMRV9SRVNPVVJDRV9CUk9XU0VSPVJlc291cmNlIGJyb3dzZXIKLVRPT0xUSVBfUkVTT1VSQ0VfVFJFRT1DaG9vc2UgYSByZXNvdXJjZS4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvV1NVSVBsdWdpbk1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL1dTVUlQbHVnaW5NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmMxNTc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvV1NVSVBsdWdpbk1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMyOSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjAzMjkgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwMzMxICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUxNSAgIDE0MTM5OCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwODAzMjQgICAyMjA5ODMgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSAqIDIwMDgwMzI2ICAgMTcxNzA1IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nLCBpbXByb3ZlIEFudFRhc2sgZXJyb3JzIHJlcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXU1VJUGx1Z2luTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFdTVUlQbHVnaW5NZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX1ZFTkRPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fREVTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJFRkVSRU5DRV9DQVRFR09SWV9SRVNPVVJDRV9NQU5BR0VNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZFUkVOQ0VfQ0FURUdPUllfQ09ERV9HRU5FUkFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZFUkVOQ0VfQ0FURUdPUllfU0NFTkFSSU9fREVGQVVMVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJFRkVSRU5DRV9DQVRFR09SWV9QUk9KRUNUX1RPUE9MT0dZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZFUkVOQ0VfQ0FURUdPUllfRFJJVkVSX0pBUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0xBVU5DSF9TQU1QTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfTU9WRV9VUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9NT1ZFX0RPV047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfTU9WRV9VUF8yOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX01PVkVfRE9XTl8yOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBTRF9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBTRF9DSEVDS0JPWF9MQVVOQ0hfU0FNUExFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfQ0xJRU5UX1RZUEVfVEFCTEVfVklFV0VSOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfU0VSVklDRV9UWVBFX1RBQkxFX1ZJRVdFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX01PVkVfVVA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9NT1ZFX0RPV047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUFJNX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUFJNX0NIRUNLQk9YX09WRVJXUklURV9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQUk1fQ0hFQ0tCT1hfQ1JFQVRFX0ZPTERFUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NIRUNLX09VVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQUk1fQ0hFQ0tCT1hfU0tFTEVUT05fTUVSR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0NSRUFURV9GT0xERVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9PVkVSV1JJVEVfRklMRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0NIRUNLT1VUX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9TS0VMRVRPTl9NRVJHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJU1RBVFVTX1dJVEhPVVRfRVhDRVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElTVEFUVVNfV0lUSF9FWENFUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lORk9fU0FWRURfU1RBVFVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19TRUVfRVJST1JfTE9HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRMRV9DTEFTU19CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xBU1NfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRMRV9JTlRFUkZBQ0VfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NBTVBMRV9UWVBFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1JFU09VUkNFX0ZJTFRFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0RSRVNfQ09NQk9fUkVTT1VSQ0VfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0RSRVNfVFJFRV9SRVNPVVJDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BUUFBfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0VOQUJMRV9UV09fRUFSUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FTkFCTEVfVFdPX0VBUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1JFU09VUkNFX1RSRUU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRV9UWVBFX05BTUU7Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXU1VJUGx1Z2luTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL0xhdW5jaEltcG9ydFdpemFyZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vTGF1bmNoSW1wb3J0V2l6YXJkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmN2NkN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vTGF1bmNoSW1wb3J0V2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZDsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgbGF1bmNoZXMgdGhlIGltcG9ydCB3aXphcmQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXVuY2hJbXBvcnRXaXphcmRBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIAotICAgIHsKLSAgICAgIER5bmFtaWNXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNXaXphcmQoKTsKLSAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHdpemFyZC5zZXRJbml0aWFsRGF0YSggIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydCIgKTsKLSAgICAgICAgd2l6YXJkLmluaXQoIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCksIHNlbGVjdGlvbl8gKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIAotICAJICBXaXphcmREaWFsb2cgZGlhbG9nPSBuZXcgV2l6YXJkRGlhbG9nKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKLQkgIGRpYWxvZy5zZXRQYWdlU2l6ZSggNTAwLCA0MDAgKTsKLQkgIGRpYWxvZy5jcmVhdGUoKTsKLQkgIGRpYWxvZy5vcGVuKCk7Ci0gICAgfQotICAgIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIAotICAgIHsKLSAgICAgIGlmKCBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiApCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdGlvbl8gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uOwotICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3kuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3kuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkNDhiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XZWJTZXJ2aWNlRGVwbG95LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci0KLQotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRGVwbG95IHsKLQlwdWJsaWMgdm9pZCBydW4oSVJlc291cmNlIHNlbGVjdGlvbik7IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vV2ViU2VydmljZURlcGxveUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vV2ViU2VydmljZURlcGxveUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDQ4OTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3lBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5hY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlRGVwbG95QWN0aW9uIGV4dGVuZHMgV2luZG93QWN0aW9uRGVsZWdhdGUgewotcHVibGljIHZvaWQgcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uIGFjdGlvbikgewotCi0gICBJUHJvamVjdCBwcm9qZWN0ID0gZ2V0U2VsZWN0ZWRSZXNvdXJjZVByb2plY3QoKTsKLQotICAgU3RyaW5nIFtdIHR5cGVJZHMgPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJUeXBlSWRzQnlNb2R1bGUocHJvamVjdCk7Ci0gICBPYmplY3QgdGhlQWN0aW9uID0gbnVsbDsKLQotICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLmpzdC53cy51aSIsICJ3ZWJzZXJ2aWNlZGVwbG95Iik7Ci0gICB0cnkgewotICAgCQotICAgCWlmICh0eXBlSWRzID09IG51bGwgfHwgdHlwZUlkcy5sZW5ndGggPD0gMCkKLSAgIAl7Ci0gICAJIAkvLyB0aGF0IG1lYW5zIHRoZSBtb2R1bGUgaXMgbm90IGF0dGFjaGVkIHRvIGEgc2VydmVyIHRoZW4gcGljayB0aGUgZmlyc3QgZXh0ZW5zaW9uIGZvdW5kCi0gICAJICAgIHRoZUFjdGlvbiA9IGVsZW1lbnRzWzBdLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAJfQotICAgCWVsc2UgaWYgKCB0eXBlSWRzLmxlbmd0aCA9PSAxKQotICAgCXsKLSAgIAkJLy8gdGhhdCBtZWFucyB0aGUgbW9kdWxlIGlzIGF0dGFjaGVkIHRvIG9uZSBzZXJ2ZXIgdGhlbiBmaW5kcyBpdCBpZCBhbmQgYSBtYXRjaGluIGV4dGVuc2lvbiBvciBnaXZlIGEgbWVzc2FnZQotICAgCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgCXsKLQkJICAgCVN0cmluZyBpZCA9IGVsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZSgiZmFjdG9yeUlkIik7Ci0gICAgCSAgIAlpZiAoIHR5cGVJZHNbMF0uZXF1YWxzKGlkKSkKLQkJICAgCXsKLQkJICAgCQl0aGVBY3Rpb24gPSBlbGVtZW50c1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotCQkgICAJCWJyZWFrOwotCQkgICAJfQotICAgCQl9Ci0gICAJCWlmICh0aGVBY3Rpb24gPT0gbnVsbCApCi0gICAJCQl7Ci0gICAJCQkJLy8gZ2l2ZSBhIG1lc3NhZ2UKLSAgIAkJCX0KLSAgIAl9Ci0gICAJZWxzZQotICAgCXsKLQkJLy8gVGhlIG1vZHVsZSBpcyBhdHRhY2hlZCB0byBtb3JlIHRoYW4gb25lIHNlcnZlciBmaW5kIHRoZSBmaXJzdCBzZXJ2ZXItZXh0ZW5zaW9uIGNvdXBsZQotCQkvLyBUQkQ6IGFkZCBhIGRpYWxvZyB0byBjaG9vc2UgdGhlIHNlcnZlciBmb3IgZGVwbG95bWVudAotCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgCXsKLQkJICAgCVN0cmluZyBpZCA9IGVsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZSgiZmFjdG9yeUlkIik7Ci0JCSAgIAlmb3IgKCBpbnQgaz0wOyBrPCB0eXBlSWRzLmxlbmd0aDsgaysrKQotCQkgICAJewotICAgIAkgICAJCWlmICggdHlwZUlkc1trXS5lcXVhbHMoaWQpKQotCQkgICAJCXsKLQkJICAgCQkJdGhlQWN0aW9uID0gZWxlbWVudHNbaV0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLQkJICAgCQkJYnJlYWs7Ci0JCSAgIAkJfQotCQkgICAJfQotCQkgICBpZiAodGhlQWN0aW9uICE9IG51bGwpIGJyZWFrOwotICAgCQkgfQotCQlpZiAodGhlQWN0aW9uID09IG51bGwpIAotCQkJewotCQkJCS8vIGdpdmUgYSBNZXNzYWdlCi0JCQl9Ci0gICAJfQotCi0gICAgaWYgKHRoZUFjdGlvbiBpbnN0YW5jZW9mIFdlYlNlcnZpY2VEZXBsb3kpCi0gICAgICAgICAgKChXZWJTZXJ2aWNlRGVwbG95KXRoZUFjdGlvbikucnVuKHByb2plY3QpOyAgIAotICB9Ci0KLSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dpbmRvd0FjdGlvbkRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XaW5kb3dBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGQ1MTJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dpbmRvd0FjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuYWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotCi0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXaW5kb3dBY3Rpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7Ci1wcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZlNlbGVjdGlvbjsKLQotcHVibGljIFdpbmRvd0FjdGlvbkRlbGVnYXRlKCkgewotICAgIHN1cGVyKCk7Ci0gfQotCi1wdWJsaWMgdm9pZCBkaXNwb3NlKCkgCi0gewotIH0KLQotcHVibGljIHZvaWQgaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93IHdpbmRvdykgeyB9Ci0KLXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24gYWN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLSAgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgZlNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotIH0KLQotcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCWZTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci19Ci1wdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgewotCXJldHVybiBmU2VsZWN0aW9uOwotfQotCi1wdWJsaWMgSVByb2plY3QgZ2V0U2VsZWN0ZWRSZXNvdXJjZVByb2plY3QoKSB7Ci0gSVByb2plY3QgcHJvamVjdCA9IG51bGw7Ci0gSVJlc291cmNlIHJlc291cmNlXyA9IG51bGw7Ci0gICB0cnkgewotICAgCQlpZiAoZlNlbGVjdGlvbiAhPSBudWxsICYmIGZTZWxlY3Rpb24uc2l6ZSgpID09IDEpICAgIHsKLSAgICAgIAkJT2JqZWN0IG9iaiA9IGZTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLSAgICAgIAkJaWYgKG9iaiAhPSBudWxsKSAgICB7Ci0gICAgICAJCQlpZiAoIG9iaiBpbnN0YW5jZW9mIElSZXNvdXJjZSkgCi0gICAgICAJCQkJewotICAgICAgCQkJCQlyZXNvdXJjZV8gPSAoSVJlc291cmNlKSBvYmo7Ci0gICAgICAJCQkJfQotICAgICAgCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSUNvbXBpbGF0aW9uVW5pdCkKLSAgICAgIAkJCXsKLSAgICAgICAgCQkJSUNvbXBpbGF0aW9uVW5pdCBjb21wVW5pdCA9IChJQ29tcGlsYXRpb25Vbml0KW9iajsKLSAgICAgICAgCQkJcmVzb3VyY2VfPSBjb21wVW5pdC5nZXRDb3JyZXNwb25kaW5nUmVzb3VyY2UoKTsKLSAgICAgIAkJCX0KLQkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJSmF2YVByb2plY3QpIHsKLQkJCQkJcHJvamVjdCA9ICgoSUphdmFQcm9qZWN0KSBvYmopLmdldFByb2plY3QoKTsKLQkJCQl9Ci0KLQkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0JCQkJCXByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoKEVPYmplY3QpIG9iaik7Ci0JCQkJfQotCi0gICAgICAJCQlpZiAoIHJlc291cmNlXyAhPSBudWxsICkKLSAgIAkJCQkJcHJvamVjdCA9IHJlc291cmNlXy5nZXRQcm9qZWN0KCk7Ci0gICAgICAgICAJCQotICAgIAkJfQotICAgCQl9Ci0gICAJfQkKLSAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgIHJldHVybiBwcm9qZWN0OwotIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vRGlhbG9nUmVzb3VyY2VCcm93c2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9EaWFsb2dSZXNvdXJjZUJyb3dzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0OWRiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9EaWFsb2dSZXNvdXJjZUJyb3dzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MjMgICAxODMwNzUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5EZWNvcmF0aW5nTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBsdWdpbi5XZWJTZXJ2aWNlVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaExhYmVsUHJvdmlkZXI7Ci0KLS8qKgotKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZGlhbG9nIGZvciBicm93c2luZyB3b3Jrc3BhY2UgcmVzb3VyY2VzLgotKi8KLXB1YmxpYyBjbGFzcyBEaWFsb2dSZXNvdXJjZUJyb3dzZXIgZXh0ZW5kcyBEaWFsb2cKLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9SRVNPVVJDRV9UUkVFID0gV2ViU2VydmljZVVJUGx1Z2luLklEICsgIi5EUkVTMDAwMSI7Ci0KLSAgcHJpdmF0ZSBJUmVzb3VyY2Ugcm9vdF87Ci0gIHByaXZhdGUgSUZpbHRlcltdIGZpbHRlcnNfOwotICBwcml2YXRlIGJvb2xlYW4gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXzsKLSAgcHJpdmF0ZSBJUmVzb3VyY2VbXSBzZWxlY3Rpb25fOwotICBwcml2YXRlIFRyZWUgcmVzb3VyY2VUcmVlXzsKLSAgcHJpdmF0ZSBUcmVlVmlld2VyIGZpbGVWaWV3ZXJfOwotICBwcml2YXRlIEhhc2hNYXAgICAgdmlzaXRlZENvbnRhaW5lcnNfOwotICBwcml2YXRlIGJvb2xlYW4gICAgZm9sZGVyc1NlbGVjdGFibGVfOwotCi0gIHB1YmxpYyBEaWFsb2dSZXNvdXJjZUJyb3dzZXIoU2hlbGwgc2hlbGwsIElSZXNvdXJjZSByb290LCBJRmlsdGVyIGZpbHRlcikKLSAgewotICAgIHRoaXMoc2hlbGwsIHJvb3QsIG5ldyBJRmlsdGVyW117ZmlsdGVyfSwgZmFsc2UgKTsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+RGlhbG9nUmVzb3VyY2VCcm93c2VyPC9jb2RlPgotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5wYXJlbnQgU2hlbGw8L2NvZGU+LgotICAqIFRoZSBkaWFsb2cgcmVuZGVycyBhbGwgcmVzb3VyY2VzIGluY2x1ZGluZyBhbmQKLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cm9vdCBJUmVzb3VyY2U8L2NvZGU+Ci0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbH0uCi0gICogb3IgbnVsbCB0byBjcmVhdGUgYSB0b3AtbGV2ZWwgc2hlbGwuCi0gICogQHBhcmFtIHJvb3QgVGhlIHJvb3Qge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0sCi0gICogb3IgbnVsbCB0byBiZWdpbiB3aXRoIHRoZSB3b3Jrc3BhY2Ugcm9vdC4KLSAgKiBAcGFyYW0gZmlsdGVycyBBbiBhcnJheSBvZiBqYXZhLmxhbmcuU3RyaW5nCi0gICovCi0gIHB1YmxpYyBEaWFsb2dSZXNvdXJjZUJyb3dzZXIoU2hlbGwgc2hlbGwsIElSZXNvdXJjZSByb290LCBJRmlsdGVyW10gZmlsdGVycykKLSAgewotICAgIHRoaXMoIHNoZWxsLCByb290LCBmaWx0ZXJzLCBmYWxzZSApOwotICB9Ci0gIAotICBwdWJsaWMgRGlhbG9nUmVzb3VyY2VCcm93c2VyKFNoZWxsIHNoZWxsLCBJUmVzb3VyY2Ugcm9vdCwgSUZpbHRlcltdIGZpbHRlcnMsIGJvb2xlYW4gZm9sZGVyc1NlbGVjdGFibGUgKQotICB7Ci0gICAgc3VwZXIoc2hlbGwpOwotCi0gICAgSVJlc291cmNlIG1vZHVsZVJvb3QgPSByb290OwotICAgIGlmIChyb290IGluc3RhbmNlb2YgSVByb2plY3QpCi0gICAgewotICAgICAgSVByb2plY3QgcCA9IChJUHJvamVjdCltb2R1bGVSb290OwotICAgICAKLSAgICAgICAgbW9kdWxlUm9vdCA9IHA7Ci0gICAgCi0gICAgfQotCi0gICAgcm9vdF8gPSAobW9kdWxlUm9vdCA9PSBudWxsKSA/IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkgOiBtb2R1bGVSb290OwotICAgIGZpbHRlcnNfID0gKGZpbHRlcnMgPT0gbnVsbCkgPyBuZXcgSUZpbHRlclswXSA6IGZpbHRlcnM7Ci0gICAgdmlzaXRlZENvbnRhaW5lcnNfID0gbmV3IEhhc2hNYXAoKTsKLSAgICBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWRfID0gZmFsc2U7Ci0gICAgZm9sZGVyc1NlbGVjdGFibGVfID0gZm9sZGVyc1NlbGVjdGFibGU7Ci0gICAgc2V0U2hlbGxTdHlsZShTV1QuRElBTE9HX1RSSU0gfCBTV1QuUkVTSVpFIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKLSAgfQotCi0gIC8qKgotICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgbXVsdGlwbGUgc2VsZWN0aW9uIGluIHRoZSB0cmVlIHZpZXcuCi0gICogTXVsdGlwbGUgc2VsZWN0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICogQHBhcmFtIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZCBUcnVlIHRvIGVuYWJsZWQgb3IgZmFsc2UgdG8gZGlzYWJsZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0TXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkKGJvb2xlYW4gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkKQotICB7Ci0gICAgbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXyA9IG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHNlbGVjdGlvbnMgbWFkZSBpbiB0aGUgZGlhbG9nIGlmIE9LIHdhcyBwcmVzc2VkLAotICAqIG9yIG51bGwgaWYgQ2FuY2VsIHdhcyBwcmVzc2VkLiBSZXR1cm5zIG51bGwgaWYgdGhlIGRpYWxvZwotICAqIGhhcyBuZXZlciBiZWVuIG9wZW5lZC4KLSAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHNlbGVjdGVkIHJlc291cmNlcywgcG9zc2libHkgZW1wdHksIHBvc3NpYmx5IG51bGwuCi0gICovCi0gIHB1YmxpYyBJUmVzb3VyY2VbXSBnZXRTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgSVJlc291cmNlIGdldEZpcnN0U2VsZWN0aW9uKCkKLSAgewotICAgIGlmIChzZWxlY3Rpb25fICE9IG51bGwgJiYgc2VsZWN0aW9uXy5sZW5ndGggPiAwKQotICAgICAgcmV0dXJuIHNlbGVjdGlvbl9bMF07Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAgLyoqCi0gICogQ2FsbGVkIHdoZW4gdGhlIENhbmNlbCBidXR0b24gaXMgcHJlc3NlZC4KLSAgKiBJbnN1cmVzIHRoYXQge0BsaW5rICNnZXRSZXN1bHR9IHdpbGwgcmV0dXJuIG51bGwuCi0gICovCi0gIHByb3RlY3RlZCB2b2lkIGNhbmNlbFByZXNzZWQoKQotICB7Ci0gICAgc2VsZWN0aW9uXyA9IG51bGw7Ci0gICAgc2V0UmV0dXJuQ29kZShEaWFsb2cuQ0FOQ0VMKTsKLSAgICBzdXBlci5jYW5jZWxQcmVzc2VkKCk7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiB0aGUgT0sgYnV0dG9uIGlzIHByZXNzZWQuCi0gICogU3F1aXJyZWxzIGF3YXkgdGhlIGxpc3Qgb2YgemVybyBvciBtb3JlIHNlbGVjdGVkCi0gICogPGNvZGU+SVJlc291cmNlPC9jb2RlPnMgdG8gYmUgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRSZXN1bHR9LgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKQotICB7Ci0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmaWxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgewotICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWN0dXJlZFNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb247Ci0gICAgICBzZWxlY3Rpb25fID0gbmV3IElSZXNvdXJjZVtzdHJ1Y3R1cmVkU2VsZWN0aW9uLnNpemUoKV07Ci0gICAgICBpbnQgaSA9IDA7Ci0gICAgICBJdGVyYXRvciBpdCA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJUmVzb3VyY2UpCi0gICAgICAgICAgc2VsZWN0aW9uX1tpKytdID0gKElSZXNvdXJjZSlvYmplY3Q7Ci0gICAgICB9Ci0gICAgfQotICAgIHNldFJldHVybkNvZGUoRGlhbG9nLk9LKTsKLSAgICBzdXBlci5va1ByZXNzZWQoKTsKLSAgfQotCi0gIC8qKgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdyNjb25maWd1cmVTaGVsbH0uCi0gICogQHBhcmFtIHNoZWxsIFRoZSBzaGVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgc2hlbGwpCi0gIHsKLSAgICBzdXBlci5jb25maWd1cmVTaGVsbChzaGVsbCk7Ci0gICAgc2hlbGwuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX1JFU09VUkNFX0JST1dTRVIpOwotICB9Ci0KLSAgLyoqIAotICAqIENyZWF0ZXMgdGhlIGRpYWxvZyBhcmVhLgotICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb21wb3NpdGUuCi0gICogQHJldHVybiBUaGUgY29udHJvbCBhcmVhLgotICAqLwotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSlzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIGdkLndpZHRoSGludCA9IDQwMDsKLSAgICBnZC5oZWlnaHRIaW50ID0gMzAwOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBpZiAobXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXykKLSAgICB7Ci0gICAgICByZXNvdXJjZVRyZWVfID0gbmV3IFRyZWUoY29tcG9zaXRlLFNXVC5NVUxUSSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzb3VyY2VUcmVlXyA9IG5ldyBUcmVlKGNvbXBvc2l0ZSxTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0gICAgfQotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMKTsKLSAgICBnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgcmVzb3VyY2VUcmVlXy5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICByZXNvdXJjZVRyZWVfLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1JFU09VUkNFX1RSRUUpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVzb3VyY2VUcmVlXywgSU5GT1BPUF9SRVNPVVJDRV9UUkVFKTsKLQotICAgIGZpbGVWaWV3ZXJfID0gbmV3IFRyZWVWaWV3ZXIocmVzb3VyY2VUcmVlXyk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBXb3JrYmVuY2hDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgRGVjb3JhdGluZ0xhYmVsUHJvdmlkZXIobmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKSwgV2ViU2VydmljZVVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0RGVjb3JhdG9yTWFuYWdlcigpLmdldExhYmVsRGVjb3JhdG9yKCkpKTsKLSAgICBmaWxlVmlld2VyXy5hZGRGaWx0ZXIoCi0gICAgICBuZXcgVmlld2VyRmlsdGVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnRPYmplY3QsIE9iamVjdCBvYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXNWYWxpZFJlc291cmNlKCAoSVJlc291cmNlKW9iamVjdCApOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICAgIAotICAgIGlmKCAhZm9sZGVyc1NlbGVjdGFibGVfICkKLSAgICB7Ci0gICAgICBmaWxlVmlld2VyXy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoIG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdGlvbkNoYW5nZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0gICAgCi0gICAgZmlsZVZpZXdlcl8uc2V0SW5wdXQocm9vdF8pOwotICAgIHJldHVybiBjb21wb3NpdGU7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlZCgpCi0gIHsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiAgICAgID0gZmlsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgYm9vbGVhbiAgICB2YWxpZFNlbGVjdGlvbiA9IHRydWU7Ci0gICAgCi0gICAgaWYoIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICkKLSAgICB7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y1NlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb247Ci0gICAgICBJdGVyYXRvciAgICAgICAgICAgICBpdGVyICAgICAgICAgICA9IHN0cnVjU2VsZWN0aW9uLml0ZXJhdG9yKCk7Ci0gICAgICAKLSAgICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBzZWxlY3RlZCBpdGVtcyBhcmUgdmFsaWQuCi0gICAgICB3aGlsZSggaXRlci5oYXNOZXh0KCkgKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXRlci5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSUZpbGUgKQotICAgICAgICB7Ci0gICAgICAgICAgdmFsaWRTZWxlY3Rpb24gPSBhY2NlcHRzRmlsZSggKElGaWxlKW9iamVjdCApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHZhbGlkU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCAhdmFsaWRTZWxlY3Rpb24gKSBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhbGlkU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEJ1dHRvbiBva0J1dHRvbiA9IGdldEJ1dHRvbiggRGlhbG9nLk9LICk7Ci0gICAgb2tCdXR0b24uc2V0RW5hYmxlZCggdmFsaWRTZWxlY3Rpb24gKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGFjY2VwdHNGaWxlKCBJUmVzb3VyY2UgZmlsZSApCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsdGVyc18ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYoIGZpbHRlcnNfW2ldLmFjY2VwdHMoIGZpbGUgKSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaXNWYWxpZFJlc291cmNlKCBJUmVzb3VyY2UgcmVzb3VyY2UgKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiggcmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSApCi0gICAgewotICAgICAgLy8gTG9vcCBvdmVyIGFsbCBmaWx0ZXJzLiAgSWYgb25lIGlzIGFjY2VwdGFibGUgdGhlbiB3ZSB3aWxsCi0gICAgICAvLyByZXR1cm4gdHJ1ZS4KLSAgICAgIHJlc3VsdCA9IGFjY2VwdHNGaWxlKCByZXNvdXJjZSApOwotICAgIH0KLSAgICBlbHNlIGlmKCByZXNvdXJjZSBpbnN0YW5jZW9mIElDb250YWluZXIgKQotICAgIHsKLSAgICAgIC8vIE5vdyBzZWUgaWYgdGhpcyBjb250YWluZXIgY29udGFpbnMgYXQgbGVhc3Qgb25lIHZhbGlkIGZpbGUuCi0gICAgICBCb29sZWFuIHZhbGlkQ29udGFpbmVyID0gKEJvb2xlYW4pdmlzaXRlZENvbnRhaW5lcnNfLmdldCggcmVzb3VyY2UgKTsKLSAgICAgIAotICAgICAgaWYoIHZhbGlkQ29udGFpbmVyID09IG51bGwgKQotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlbid0IHNlZW4gdGhpcyBjb250YWluZXIgYmVmb3JlLgotICAgICAgICB0cnkgCi0gICAgICAgIHsKLSAgICAgICAgICBJQ29udGFpbmVyICBjb250YWluZXIgPSAoSUNvbnRhaW5lcilyZXNvdXJjZTsKLSAgICAgICAgICBJUmVzb3VyY2VbXSBtZW1iZXJzICAgPSBjb250YWluZXIubWVtYmVycygpOwotICAgICAgICAgIAotICAgICAgICAgIHZpc2l0ZWRDb250YWluZXJzXy5wdXQoIGNvbnRhaW5lciwgQm9vbGVhbi5GQUxTRSApOwotICAgICAgICAgIAotICAgICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBtZW1iZXJzLmxlbmd0aDsgaW5kZXgrKykgCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYoIGlzVmFsaWRSZXNvdXJjZShtZW1iZXJzW2luZGV4XSkgKSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdmlzaXRlZENvbnRhaW5lcnNfLnB1dCggY29udGFpbmVyLCBCb29sZWFuLlRSVUUgKTsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IAotICAgICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKSAKLSAgICAgICAgewotICAgICAgICAgIC8vIERvIG5vdGhpbmcKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSB2YWxpZENvbnRhaW5lci5ib29sZWFuVmFsdWUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9GaWxlRXh0ZW5zaW9uRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9GaWxlRXh0ZW5zaW9uRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzU1YzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vRmlsZUV4dGVuc2lvbkZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGludGVyZmFjZSBmb3IgYSBjbGFzcyBvZiBvYmplY3RzIHRoYXQgZmlsdGVyCi0qIG90aGVyIG9iamVjdHMgZm9yIGluY2x1c2lvbiBvciBleGNsdXNpb24gYnkgc29tZSBjb25zdW1lci4KLSovCi1wdWJsaWMgY2xhc3MgRmlsZUV4dGVuc2lvbkZpbHRlciBpbXBsZW1lbnRzIElGaWx0ZXIKLXsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBleHRlbnNpb25zXzsKLQotICBwdWJsaWMgRmlsZUV4dGVuc2lvbkZpbHRlcihTdHJpbmdbXSBleHRlbnNpb25zKQotICB7Ci0gICAgZXh0ZW5zaW9uc18gPSAoZXh0ZW5zaW9ucyAhPSBudWxsKSA/IGV4dGVuc2lvbnMgOiBuZXcgU3RyaW5nWzBdOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gIm9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkuZWRpdG9yLmNvbW1vbi5GaWxlRXh0ZW5zaW9uRmlsdGVyIjsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLmVkaXRvci5jb21tb24uRmlsZUV4dGVuc2lvbkZpbHRlciI7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyA8Y29kZT5GaWx0ZXI8L2NvZGU+Ci0gICogYWNjZXB0cyB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4gVGhpcyBtZXRob2QKLSAgKiBtdXN0IHJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIHtAbGluayAjc3RhdHVzT2Z9Ci0gICogcmV0dXJucyBhbiA8Y29kZT5JU3RhdHVzPC9jb2RlPiB3aXRoIGEgc2V2ZXJpdHkgb2YKLSAgKiBsZXNzIHRoYW4gPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4uCi0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyA8Y29kZT5GaWx0ZXI8L2NvZGU+Ci0gICogYWNjZXB0cyB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyhPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElGaWxlKQotICAgIHsKLSAgICAgIElGaWxlIGZpbGUgPSAoSUZpbGUpb2JqZWN0OwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25zXy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpICE9IG51bGwgJiYgZmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCkuZXF1YWxzKGV4dGVuc2lvbnNfW2ldKSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9JRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9JRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNWRiOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vSUZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIGEgY2xhc3Mgb2Ygb2JqZWN0cyB0aGF0IGZpbHRlcgotKiBvdGhlciBvYmplY3RzIGZvciBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIGJ5IHNvbWUgY29uc3VtZXIuCi0qLwotcHVibGljIGludGVyZmFjZSBJRmlsdGVyCi17Ci0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgPGNvZGU+RmlsdGVyPC9jb2RlPgotICAqIGFjY2VwdHMgdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uIFRoaXMgbWV0aG9kCi0gICogbXVzdCByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB7QGxpbmsgI3N0YXR1c09mfQotICAqIHJldHVybnMgYW4gPGNvZGU+SVN0YXR1czwvY29kZT4gd2l0aCBhIHNldmVyaXR5IG9mCi0gICogbGVzcyB0aGFuIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+LgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgPGNvZGU+RmlsdGVyPC9jb2RlPgotICAqIGFjY2VwdHMgdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGFjY2VwdHMoT2JqZWN0IG9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9VSVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9VSVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NzkzYzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vVUlVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MTcgICAxNDAwMTcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGxvbmdlciBwcm9qZWN0IG9yIHNlcnZlci9ydW50aW1lIHN0cmluZ3MgZG8gbm90IHJlc2l6ZSB3aXphcmQKLSAqIDIwMDYwODI5ICAgMTU1NDQxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3ZWIgc2VydmljZSB3aXphcmQgaGFuZ3MgZHVyaW5nIHJlc2l6ZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLQotcHVibGljIGNsYXNzIFVJVXRpbHMgCi17Ci0JLyoqCi0JICogQSBkZWZhdWx0IHBhZGRpbmcgdmFsdWUgZm9yIGhvcml6b250YWxSZXNpemUoKS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBERUZBVUxUX1BBRERJTkcgPSAzNTsKLQkKLSAgU3RyaW5nICAgICAgIGluZm9Qb3BpZF87Ci0gIAotICBwdWJsaWMgVUlVdGlscyggU3RyaW5nIGluZm9Qb3BpZCApCi0gIHsKLSAgICBpbmZvUG9waWRfID0gaW5mb1BvcGlkOwotICB9Ci0gIAotICBwdWJsaWMgQnV0dG9uIGNyZWF0ZVJhZGlvQnV0dG9uKCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUJ1dHRvbiggU1dULlJBRElPLCBwYXJlbnQsIGxhYmVsTmFtZSwgdG9vbHRpcCwgaW5mb3BvcCApOwotICB9Ci0gIAotICBwdWJsaWMgQnV0dG9uIGNyZWF0ZUNoZWNrYm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUJ1dHRvbiggU1dULkNIRUNLLCBwYXJlbnQsIGxhYmVsTmFtZSwgdG9vbHRpcCwgaW5mb3BvcCApOwotICB9Ci0gIAotICBwdWJsaWMgQnV0dG9uIGNyZWF0ZVB1c2hCdXR0b24oIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBsYWJlbE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCApCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlQnV0dG9uKCBTV1QuTk9ORSwgcGFyZW50LCBsYWJlbE5hbWUsIHRvb2x0aXAsIGluZm9wb3AgKTsKLSAgfQotICAKLSAgcHVibGljIEJ1dHRvbiBjcmVhdGVCdXR0b24oIGludCBraW5kLCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIHBhcmVudCwga2luZCApOwotICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyBsYWJlbE5hbWUgOiB0b29sdGlwOwotICAgIGJ1dHRvbi5zZXRUZXh0KCBsYWJlbE5hbWUgKTsKLSAgICBidXR0b24uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggYnV0dG9uLCBpbmZvUG9waWRfICsgIi4iICsgaW5mb3BvcCApOwotICAgIAotICAgIHJldHVybiBidXR0b247Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb21ibyBjcmVhdGVDb21ibyggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wLCBpbnQgc3R5bGUgKQotICB7ICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyBsYWJlbE5hbWUgOiB0b29sdGlwOwotICAgIAotICAgIGlmKCBsYWJlbE5hbWUgIT0gbnVsbCApCi0gICAgewotICAgICAgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoIHBhcmVudCwgU1dULldSQVApOwotICAgICAgbGFiZWwuc2V0VGV4dCggbGFiZWxOYW1lICk7Ci0gICAgICBsYWJlbC5zZXRUb29sVGlwVGV4dCggdG9vbHRpcCApOwotICAgIH0KLSAgICAKLSAgICBDb21ibyBjb21ibyA9IG5ldyBDb21ibyggcGFyZW50LCBzdHlsZSApOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgIAotICAgIGNvbWJvLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgY29tYm8uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggY29tYm8sIGluZm9Qb3BpZF8gKyAiLiIgKyBpbmZvcG9wICk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbWJvOyAgICAgIAotICB9Ci0gIAotICBwdWJsaWMgVGV4dCBjcmVhdGVUZXh0KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AsIGludCBzdHlsZSApCi0gIHsgICAgCi0gICAgdG9vbHRpcCA9IHRvb2x0aXAgPT0gbnVsbCA/IGxhYmVsTmFtZSA6IHRvb2x0aXA7Ci0gICAgCi0gICAgaWYoIGxhYmVsTmFtZSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbCggcGFyZW50LCBTV1QuV1JBUCk7Ci0gICAgICBsYWJlbC5zZXRUZXh0KCAgbGFiZWxOYW1lICApOwotICAgICAgbGFiZWwuc2V0VG9vbFRpcFRleHQoICB0b29sdGlwICk7Ci0gICAgfQotICAgIAotICAgIFRleHQgdGV4dCA9IG5ldyBUZXh0KCBwYXJlbnQsIHN0eWxlICk7Ci0gICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICAKLSAgICB0ZXh0LnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgdGV4dC5zZXRUb29sVGlwVGV4dCggdG9vbHRpcCk7Ci0gICAgCi0gICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHRleHQsIGluZm9Qb3BpZF8gKyAiLiIgKyBpbmZvcG9wICk7Ci0gICAgCi0gICAgcmV0dXJuIHRleHQ7ICAgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29tcG9zaXRlKCBDb21wb3NpdGUgcGFyZW50LCBpbnQgY29sdW1ucyApCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlQ29tcG9zaXRlKCBwYXJlbnQsIGNvbHVtbnMsIC0xLCAtMSApOwotICB9Ci0gIAotICBwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbXBvc2l0ZSggQ29tcG9zaXRlIHBhcmVudCwgaW50IGNvbHVtbnMsIGludCBtYXJnaW5IZWlnaHQsIGludCBtYXJnaW5XaWR0aCApCi0gIHsKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSggcGFyZW50LCBTV1QuTk9ORSApOwotICAgIAotICAgIEdyaWRMYXlvdXQgZ3JpZGxheW91dCAgID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBncmlkbGF5b3V0Lm51bUNvbHVtbnMgICA9IGNvbHVtbnM7Ci0gIAotICAgIGlmKCBtYXJnaW5IZWlnaHQgPj0gMCApIGdyaWRsYXlvdXQubWFyZ2luSGVpZ2h0ID0gbWFyZ2luSGVpZ2h0OwotICAgIGlmKCBtYXJnaW5XaWR0aCA+PSAwICkgIGdyaWRsYXlvdXQubWFyZ2luV2lkdGggID0gbWFyZ2luV2lkdGg7Ci0gICAgCi0gICAgY29tcG9zaXRlLnNldExheW91dCggZ3JpZGxheW91dCApOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgICAKLSAgfQotICBwdWJsaWMgR3JvdXAgY3JlYXRlR3JvdXAoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBncm91cE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCApCi0gIHsKLSAgCXJldHVybiBjcmVhdGVHcm91cCggcGFyZW50LCBncm91cE5hbWUsIHRvb2x0aXAsIGluZm9wb3AsIDEsIC0xLCAtMSApOwotICB9Ci0gIAotICBwdWJsaWMgR3JvdXAgY3JlYXRlR3JvdXAoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBncm91cE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCwgaW50IGNvbHVtbnMsIGludCBtYXJnaW5IZWlnaHQsIGludCBtYXJnaW5XaWR0aCApCi0gIHsKLSAgICBHcm91cCAgICAgIG5ld0dyb3VwICAgID0gbmV3IEdyb3VwKCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gICAgR3JpZERhdGEgICBncmlkZGF0YSAgICA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotICAgIEdyaWRMYXlvdXQgZ3JpZGxheW91dCAgPSBuZXcgR3JpZExheW91dCgpOwotICAgIAotICAgIGdyaWRsYXlvdXQubnVtQ29sdW1ucyAgPSBjb2x1bW5zOwotICAKLSAgICBpZiggbWFyZ2luSGVpZ2h0ID49IDAgKSBncmlkbGF5b3V0Lm1hcmdpbkhlaWdodCA9IG1hcmdpbkhlaWdodDsKLSAgICBpZiggbWFyZ2luV2lkdGggPj0gMCApICBncmlkbGF5b3V0Lm1hcmdpbldpZHRoICA9IG1hcmdpbldpZHRoOwotICAgICAgICAKLSAgICB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gZ3JvdXBOYW1lIDogdG9vbHRpcDsKLSAgICBuZXdHcm91cC5zZXRMYXlvdXQoIGdyaWRsYXlvdXQgKTsKLSAgICBuZXdHcm91cC5zZXRUZXh0KCAgZ3JvdXBOYW1lICApOwotICAgIG5ld0dyb3VwLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgbmV3R3JvdXAuc2V0VG9vbFRpcFRleHQoICB0b29sdGlwICk7Ci0gICAgCi0gICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobmV3R3JvdXAsIGluZm9Qb3BpZF8gKyAiLiIgKyBpbmZvcG9wKTsKLSAgICAKLSAgICByZXR1cm4gbmV3R3JvdXA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBUcmVlIGNyZWF0ZVRyZWUoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCwgaW50IHN0eWxlICkKLSAgewotICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyAiIiA6IHRvb2x0aXA7Ci0gICAgCi0gICAgVHJlZSB0cmVlID0gbmV3IFRyZWUoIHBhcmVudCwgc3R5bGUgKTsKLSAgICAgCi0gICAgdHJlZS5zZXRMYXlvdXREYXRhKCBjcmVhdGVGaWxsQWxsKCkgKTsKLSAgICB0cmVlLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggdHJlZSwgaW5mb1BvcGlkXyArICIuIiArIGluZm9wb3AgKTsKLSAgICAKLSAgICByZXR1cm4gdHJlZTsgICAgICAKLSAgICAKLSAgfQotICAKLSAgcHVibGljIFRhYmxlIGNyZWF0ZVRhYmxlKCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AsIGludCBzdHlsZSApCi0gIHsKLSAgICAKLSAgICB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gIiIgOiB0b29sdGlwOwotICAgIAotICAgIFRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKCBwYXJlbnQsIHN0eWxlICk7Ci0gICAgIAotICAgIC8vdGFibGUuc2V0TGF5b3V0RGF0YSggY3JlYXRlRmlsbEFsbCgpICk7Ci0gICAgdGFibGUuc2V0VG9vbFRpcFRleHQoIHRvb2x0aXApOwotICAgIAotICAgIGlmKCBpbmZvcG9wICE9IG51bGwgKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCB0YWJsZSwgaW5mb1BvcGlkXyArICIuIiArIGluZm9wb3AgKTsKLSAgICAKLSAgICByZXR1cm4gdGFibGU7ICAgICAgCi0gICAgCi0gIH0gIAotICAKLSAgcHVibGljIExhYmVsIGNyZWF0ZUhvcml6b250YWxTZXBhcmF0b3IoIENvbXBvc2l0ZSBwYXJlbnQsIGludCBzcGFjaW5nICkKLSAgewotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBjcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMSwgc3BhY2luZywgLTEgKTsKLSAgICAgCi0JTGFiZWwgc2VwYXJhdG9yID0gbmV3IExhYmVsKCBjb21wb3NpdGUsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCApOwotCQotCUdyaWREYXRhIGdyaWRkYXRhICA9IG5ldyBHcmlkRGF0YSggR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMICk7Ci0Jc2VwYXJhdG9yLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAKLQlyZXR1cm4gc2VwYXJhdG9yOwotICB9Ci0gIAotICBwdWJsaWMgR3JpZERhdGEgY3JlYXRlRmlsbEFsbCgpCi0gIHsKLQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfAotCQkJICAgICAgICAgICAgICAgICAgICAgIEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCApOwotICAgIHJldHVybiBkYXRhOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjcmVhdGVJbmZvUG9wKENvbnRyb2wgY3RybCwgU3RyaW5nIGluZm9wb3ApCi0gIHsKLQkgIGlmKCBpbmZvcG9wICE9IG51bGwgKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBjdHJsLCBpbmZvUG9waWRfICsgIi4iICsgaW5mb3BvcCApOwotICB9Ci0gIAotICAvKioKLSAgICogUmVzaXplcyB0aGUgd2lkdGggb2YgdGhlIHRhcmdldCBjb21wb3NpdGUgc28gdGhhdCBpdCBpcyBhcyB3aWRlIGFzIHRoZQotICAgKiByZWZlcmVuY2UgY29tcG9zaXRlIHBsdXMgYSBwYWRkaW5nIHZhbHVlLiAgCi0gICAqIAotICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBjb21wb3NpdGUgdG8gcmVzaXplLgotICAgKiBAcGFyYW0gcmVmZXJlbmNlIFRoZSByZWZlcmVuY2UgY29tcG9zaXRlCi0gICAqIEBwYXJhbSBwYWRkaW5nIFRoZSBwYWRkaW5nIHZhbHVlCi0gICAqLwotICBwdWJsaWMgdm9pZCBob3Jpem9udGFsUmVzaXplKENvbXBvc2l0ZSB0YXJnZXQsIENvbXBvc2l0ZSByZWZlcmVuY2UsIGludCBwYWRkaW5nKSB7Ci0JCQotCQlQb2ludCBvcmlnaW5hbFNpemUgID0gdGFyZ2V0LmdldFNpemUoKTsKLQkJUG9pbnQgcmVmZXJlbmNlU2l6ZSA9IHJlZmVyZW5jZS5nZXRTaXplKCk7Ci0JCQotCQlwYWRkaW5nID0gcGFkZGluZyA+PSAwID8gcGFkZGluZyA6IERFRkFVTFRfUEFERElORzsKLQkJCi0JCWlmIChyZWZlcmVuY2VTaXplLnggKyBwYWRkaW5nID4gb3JpZ2luYWxTaXplLngpCi0JCQl0YXJnZXQuc2V0U2l6ZShyZWZlcmVuY2VTaXplLnggKyBwYWRkaW5nLCBvcmlnaW5hbFNpemUueSk7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9kaWFsb2cvRGlhbG9nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvZGlhbG9nL0RpYWxvZ1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NmMwOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9kaWFsb2cvRGlhbG9nVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAzMjQgICAyMjA5ODMgdHJ1bmdoYUBjYS5pYm0uY29tIC0gVHJ1bmcgSGEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2c7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuc2VhcmNoLklKYXZhU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuc2VhcmNoLlNlYXJjaEVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQudWkuSUphdmFFbGVtZW50U2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC51aS5KYXZhVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5Db250YWluZXJTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TZWxlY3Rpb25EaWFsb2c7Ci0KLQotLyoqCi0qIENvbnRhaW5zIHV0aWxpdHkgbWV0aG9kcyBmb3IgbGF1bmNoaW5nIHZhcmlvdXMgY29tbW9uIGRpYWxvZ3MuCi0qLwotcHVibGljIGZpbmFsIGNsYXNzIERpYWxvZ1V0aWxzCi17Ci0KLSAgLyoqCi0gICogUmFpc2VzIGEgZGlhbG9nIGZvciBicm93c2luZyBjb250YWluZXJzLgotICAqIEBwYXJhbSBwYXJlbnRTaGVsbCBUaGUgcGFyZW50IHNoZWxsLCBvcHRpb25hbGx5IG51bGwuCi0gICogQHBhcmFtIGluaXRpYWxQYXRobmFtZSBUaGUgaW5pdGlhbCBzZWxlY3Rpb24uCi0gICogQHJldHVybiBUaGUgc2VsZWN0ZWQgY29udGFpbmVyIG9yIG51bGwgaWYgdGhlIGRpYWxvZwotICAqIGlzIGNhbmNlbGxlZCwgb3IgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLCBvciB0aGUgc2VsZWN0aW9uCi0gICogaXMgbm90IGEgcHJvamVjdCBvciBhIGZvbGRlci4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnJvd3NlQ29udGFpbmVycyAoIFNoZWxsIHBhcmVudFNoZWxsLCBTdHJpbmcgaW5pdGlhbFBhdGhuYW1lICkKLSAgewotICAgIFN0cmluZyBzZWxlY3RlZFBhdGhuYW1lID0gbnVsbDsKLSAgICBJUGF0aCBpbml0aWFsUGF0aCA9IG5ldyBQYXRoKGluaXRpYWxQYXRobmFtZSk7Ci0gICAgSVJlc291cmNlIGluaXRpYWxSZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIoaW5pdGlhbFBhdGgpOwotICAgIGlmIChpbml0aWFsUmVzb3VyY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoaW5pdGlhbFBhdGguc2VnbWVudENvdW50KCkgPT0gMSkKLSAgICAgIHsKLSAgICAgICAgaW5pdGlhbFJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChpbml0aWFsUGF0aC5zZWdtZW50KDApKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGluaXRpYWxQYXRoLnNlZ21lbnRDb3VudCgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgaW5pdGlhbFJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0Rm9sZGVyKGluaXRpYWxQYXRoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChpbml0aWFsUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotICAgICAgewotICAgICAgICBpbml0aWFsUmVzb3VyY2UgPSBpbml0aWFsUmVzb3VyY2UuZ2V0UGFyZW50KCk7Ci0gICAgICB9Ci0gICAgfQotICAgIENvbnRhaW5lclNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBuZXcgQ29udGFpbmVyU2VsZWN0aW9uRGlhbG9nKHBhcmVudFNoZWxsLChJQ29udGFpbmVyKWluaXRpYWxSZXNvdXJjZSx0cnVlLG51bGwpOwotICAgIGRpYWxvZy5vcGVuKCk7Ci0gICAgT2JqZWN0W10gcmVzdWx0ID0gZGlhbG9nLmdldFJlc3VsdCgpOwotICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBpZiAocmVzdWx0WzBdIGluc3RhbmNlb2YgSVBhdGgpCi0gICAgICB7Ci0gICAgICAgIElQYXRoIHBhdGggPSAoSVBhdGgpcmVzdWx0WzBdOwotICAgICAgICBzZWxlY3RlZFBhdGhuYW1lID0gcGF0aC50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc2VsZWN0ZWRQYXRobmFtZTsKLSAgfQotCi0gIC8qKgotICAqIFJhaXNlcyBhIGRpYWxvZyBmb3IgYnJvd3NpbmcgcmVzb3VyY2VzLgotICAqIEBwYXJhbSBwYXJlbnRTaGVsbCBUaGUgcGFyZW50IHNoZWxsLCBvcHRpb25hbGx5IG51bGwuCi0gICogQHBhcmFtIHRvcFJlc291cmNlIFRoZSByZXNvdXJjZSB1bmRlciB3aGljaCB0byBicm93c2UuCi0gICogSWYgbnVsbCwgYWxsIHJlc291cmNlcyBpbiB0aGUgd29ya3NwYWNlIGFyZSBicm93c2VkLgotICAqIEBwYXJhbSBpbml0aWFsU2VsZWN0aW9uIFRoZSBpbml0aWFsIHNlbGVjdGlvbiwgb3IgbnVsbCBmb3Igbm9uZS4KLSAgKiBJZiB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gaXMgbm90IG51bGwgYW5kIGV4aXN0cyBpbiB0aGUgc2V0IG9mCi0gICogcmVzb3VyY2VzIGZvdW5kIGJ5IHRoZSBicm93c2VyLCB0aGF0IHJlc291cmNlIGlzIHNlbGVjdGVkIGJ5IGRlZmF1bHQuCi0gICogQHBhcmFtIGZpbHRlciBUaGUgcmVzb3VyY2UgZmlsdGVyIG9iamVjdC4KLSAgKiBAcmV0dXJuIFRoZSBzZWxlY3RlZCByZXNvdXJjZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJUmVzb3VyY2UgYnJvd3NlUmVzb3VyY2VzICggU2hlbGwgcGFyZW50U2hlbGwsIElSZXNvdXJjZSB0b3BSZXNvdXJjZSwgSVJlc291cmNlIGluaXRpYWxTZWxlY3Rpb24sIEZpbHRlciBmaWx0ZXIpCi0gIHsKLSAgICBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyByZHMgPSBuZXcgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cocGFyZW50U2hlbGwsdG9wUmVzb3VyY2UsaW5pdGlhbFNlbGVjdGlvbixmaWx0ZXIpOwotICAgIHJkcy5zZXRNdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWQoZmFsc2UpOwotICAgIGlmIChyZHMub3BlbigpID09IERpYWxvZy5PSykKLSAgICB7Ci0gICAgICBJUmVzb3VyY2VbXSByZXNvdXJjZXMgPSByZHMuZ2V0UmVzdWx0KCk7Ci0gICAgICBpZiAocmVzb3VyY2VzICE9IG51bGwgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiByZXNvdXJjZXNbMF07Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogPGI+SW1wbGVtZW50YXRpb24gcmVtYWlucyBUQkQuPC9iPjxicj4KLSAgKiBSYWlzZXMgYSBkaWFsb2cgZm9yIGJyb3dzaW5nIGNsYXNzZXMgb24gYSBwcm9qZWN0J3MgY2xhc3MgcGF0aC4KLSAgKiBAcGFyYW0gcGFyZW50U2hlbGwgVGhlIHBhcmVudCBzaGVsbCwgb3B0aW9uYWxseSBudWxsLgotICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0LgotICAqIEByZXR1cm4gVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBqYXZhIGNsYXNzLgotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBicm93c2VDbGFzc2VzICggU2hlbGwgcGFyZW50U2hlbGwsIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgcmV0dXJuIGJyb3dzZUNsYXNzZXMocGFyZW50U2hlbGwsIHByb2plY3QsIChJUnVubmFibGVDb250ZXh0KW51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnJvd3NlQ2xhc3NlcyAoIFNoZWxsIHBhcmVudFNoZWxsLCBJUHJvamVjdCBwcm9qZWN0LCBJV2l6YXJkQ29udGFpbmVyIGNvbnRhaW5lcikKLSAgewotICAgIHJldHVybiBicm93c2VDbGFzc2VzKHBhcmVudFNoZWxsLCBwcm9qZWN0LCAoSVJ1bm5hYmxlQ29udGV4dCljb250YWluZXIpOwotICB9Ci0KLSAgLyoqCi0gICogUmFpc2VzIGEgZGlhbG9nIGZvciBicm93c2luZyBjbGFzc2VzIG9uIGEgcHJvamVjdCdzIGNsYXNzIHBhdGguCi0gICogQHBhcmFtIHBhcmVudFNoZWxsIFRoZSBwYXJlbnQgc2hlbGwsIG9wdGlvbmFsbHkgbnVsbC4KLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdC4KLSAgKiBAcGFyYW0gY29udGFpbmVyIFRoZSBjb250YWluZXIgb2YgdGhlIGxhdW5jaGluZyB3aXphcmQuCi0gICogQHJldHVybiBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlbGVjdGVkIGphdmEgY2xhc3MuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJyb3dzZUNsYXNzZXMgKCBTaGVsbCBwYXJlbnRTaGVsbCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvamVjdCBwcm9qZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSdW5uYWJsZUNvbnRleHQgY3R4dCkgCi0gIHsKLSAgICByZXR1cm4gYnJvd3NlQ2xhc3NlcyhwYXJlbnRTaGVsbCwgbmV3IElSZXNvdXJjZVtdIHtwcm9qZWN0fSwgY3R4dCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJyb3dzZUNsYXNzZXMoU2hlbGwgcGFyZW50U2hlbGwsIElSZXNvdXJjZVtdIHJlc291cmNlcywgSVJ1bm5hYmxlQ29udGV4dCBjdHh0KQotICB7Ci0gICAgSVR5cGUgaXR5cGUgPSBicm93c2VDbGFzc2VzQXNJVHlwZShwYXJlbnRTaGVsbCwgcmVzb3VyY2VzLCBjdHh0KTsKLSAgICBpZiAoaXR5cGUgIT0gbnVsbCkKLSAgICAgIHJldHVybiBpdHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJVHlwZSBicm93c2VDbGFzc2VzQXNJVHlwZShTaGVsbCBwYXJlbnRTaGVsbCwgSVJlc291cmNlW10gcmVzb3VyY2VzLCBJUnVubmFibGVDb250ZXh0IGN0eHQpCi0gIHsKLQlWZWN0b3IgamF2YUVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzb3VyY2VzLmxlbmd0aDsgaSsrKQotCXsKLQkgIElKYXZhRWxlbWVudCBqYXZhRWxlbWVudCA9IEphdmFDb3JlLmNyZWF0ZShyZXNvdXJjZXNbaV0pOwotCSAgaWYgKGphdmFFbGVtZW50ICE9IG51bGwpCi0JICAgIGphdmFFbGVtZW50cy5hZGQoamF2YUVsZW1lbnQpOwotCX0KLQlJSmF2YUVsZW1lbnRbXSBlbGVtZW50cyA9IChJSmF2YUVsZW1lbnRbXSlqYXZhRWxlbWVudHMudG9BcnJheShuZXcgSUphdmFFbGVtZW50WzBdKTsKLQkKLSAgICBJSmF2YVNlYXJjaFNjb3BlIHNjb3BlID0gU2VhcmNoRW5naW5lLmNyZWF0ZUphdmFTZWFyY2hTY29wZShlbGVtZW50cyk7Ci0gICAgc2NvcGUuc2V0SW5jbHVkZXNDbGFzc3BhdGhzKHRydWUpOwotICAgIHNjb3BlLnNldEluY2x1ZGVzQmluYXJpZXModHJ1ZSk7Ci0KLSAgICAvL0NyZWF0aW5nIGFuZCBvcGVuaW5nIGEgVHlwZVNlbGVjdGlvbkRpYWxvZwotICAgIHRyeQotCXsKLSAgICAgIC8vIFdlIHdhbnQgdG8gc2hvdyBldmVyeSBjbGFzcyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLCBzbyB0aHJvdyBpbiB0aGlzIFN0cmluZwotICAgICAgU3RyaW5nIGZpbHRlclN0cmluZ1RvU2VsZWN0RXZlcnl0aGluZyA9ICIqICI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIAotICAgICAgU2VsZWN0aW9uRGlhbG9nIGRpYWxvZyA9IEphdmFVSS5jcmVhdGVUeXBlRGlhbG9nKHBhcmVudFNoZWxsLCBjdHh0LCBzY29wZSwgSUphdmFFbGVtZW50U2VhcmNoQ29uc3RhbnRzLkNPTlNJREVSX0NMQVNTRVMsIGZhbHNlLCBmaWx0ZXJTdHJpbmdUb1NlbGVjdEV2ZXJ5dGhpbmcpOyAKLSAgICAgIGRpYWxvZy5zZXRUaXRsZShXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX0NMQVNTX0JST1dTRSk7Ci0gICAgICBkaWFsb2cuc2V0TWVzc2FnZShXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfQ0xBU1NfQlJPV1NFKTsgICAgCi0gICAgICBkaWFsb2cub3BlbigpOwotCi0gICAgICAvL0dldHRpbmcgdGhlIHJlc3VsdCBhbmQgcmV0dXJuaW5nIGl0Ci0gICAgICBPYmplY3RbXSByZXN1bHRzID0gZGlhbG9nLmdldFJlc3VsdCgpOwotICAgICAgaWYgKHJlc3VsdHMgIT0gbnVsbCAmJiByZXN1bHRzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChyZXN1bHRzWzBdIGluc3RhbmNlb2YgSVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKElUeXBlKXJlc3VsdHNbMF07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBqbWUpCi0JewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIFJhaXNlcyBhIGRpYWxvZyBmb3IgYnJvd3NpbmcgaW50ZXJmYWNlcyBvbiBhIHByb2plY3QncyBjbGFzcyBwYXRoLgotICAqIEBwYXJhbSBwYXJlbnRTaGVsbCBUaGUgcGFyZW50IHNoZWxsLCBvcHRpb25hbGx5IG51bGwuCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QuCi0gICogQHBhcmFtIGNvbnRhaW5lciBUaGUgY29udGFpbmVyIG9mIHRoZSBsYXVuY2hpbmcgd2l6YXJkLgotICAqIEByZXR1cm4gVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBqYXZhIGludGVyZmFjZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnJvd3NlSW50ZXJmYWNlcyggU2hlbGwgcGFyZW50U2hlbGwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvamVjdCBwcm9qZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdpemFyZENvbnRhaW5lciBjb250YWluZXIpIAotICAJCQkJCQkJCQkgICAgCi0gIHsKLSAgICBTdHJpbmcgaW50ZXJmYWNlTmFtZSA9IG51bGw7Ci0KLSAgICAvL0xpbWl0aW5nIHNlYXJjaCBzY29wZSB0byB0aGUgcHJvamVjdAotICAgIElSZXNvdXJjZVtdIHJlc291cmNlcyA9IG5ldyBJUmVzb3VyY2VbMV07Ci0gICAgcmVzb3VyY2VzWzBdPXByb2plY3Q7Ci0JSUphdmFFbGVtZW50W10gZWxlbWVudHMgPSBuZXcgSUphdmFFbGVtZW50WzFdOwotCWVsZW1lbnRzWzBdID0gSmF2YUNvcmUuY3JlYXRlKHJlc291cmNlc1swXSk7Ci0gICAgSUphdmFTZWFyY2hTY29wZSBzY29wZSA9IFNlYXJjaEVuZ2luZS5jcmVhdGVKYXZhU2VhcmNoU2NvcGUoZWxlbWVudHMpOwotICAgIHNjb3BlLnNldEluY2x1ZGVzQ2xhc3NwYXRocyh0cnVlKTsKLSAgICBzY29wZS5zZXRJbmNsdWRlc0JpbmFyaWVzKHRydWUpOwotCi0gICAgLy9DcmVhdGluZyBhbmQgb3BlbmluZyBhIFR5cGVTZWxlY3Rpb25EaWFsb2cKLSAgICB0cnkKLQl7Ci0gICAgCVNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBKYXZhVUkuY3JlYXRlVHlwZURpYWxvZyhwYXJlbnRTaGVsbCwgY29udGFpbmVyLCBzY29wZSwgSUphdmFFbGVtZW50U2VhcmNoQ29uc3RhbnRzLkNPTlNJREVSX1RZUEVTLCBmYWxzZSk7Ci0gICAgCWRpYWxvZy5zZXRUaXRsZShXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX0lOVEVSRkFDRV9CUk9XU0UpOwotICAgIAlkaWFsb2cuc2V0TWVzc2FnZShXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX0lOVEVSRkFDRV9CUk9XU0UpOyAgICAKLSAgICAJZGlhbG9nLm9wZW4oKTsKLQotICAgIAkvL0dldHRpbmcgdGhlIHJlc3VsdCBhbmQgcmV0dXJuaW5nIGl0Ci0gICAgCU9iamVjdFtdIHJlc3VsdHMgPSBkaWFsb2cuZ2V0UmVzdWx0KCk7Ci0gICAgCWlmIChyZXN1bHRzICE9IG51bGwgJiYgcmVzdWx0cy5sZW5ndGggPiAwKQotICAgIAl7Ci0gICAgCQlpZiAocmVzdWx0c1swXSBpbnN0YW5jZW9mIElUeXBlKQotICAgIAkJewotICAgIAkJCUlUeXBlIHJlc3VsdEludGVyZmFjZSA9IChJVHlwZSlyZXN1bHRzWzBdOwotICAgIAkJCWludGVyZmFjZU5hbWUgPSByZXN1bHRJbnRlcmZhY2UuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gICAgY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBqbWUpCi0JewotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW50ZXJmYWNlTmFtZTsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvZGlhbG9nL1Jlc291cmNlU2VsZWN0aW9uRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2RpYWxvZy9SZXNvdXJjZVNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGUzYmVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvZGlhbG9nL1Jlc291cmNlU2VsZWN0aW9uRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmRpYWxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRlY29yYXRpbmdMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uQW55RmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hMYWJlbFByb3ZpZGVyOwotCi0KLS8qKgotKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZGlhbG9nIGZvciBicm93c2luZyB3b3Jrc3BhY2UgcmVzb3VyY2VzLgotKiBTZWUgYWxzbyB7QGxpbmsgRGlhbG9nVXRpbHMjYnJvd3NlUmVzb3VyY2VzfS4KLSovCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cgZXh0ZW5kcyBEaWFsb2cgaW1wbGVtZW50cyBMaXN0ZW5lcgotewotCi0gIC8vIERpYWxvZyBjb250cm9scy4KLSAgLy8KLSAgcHJpdmF0ZSBMYWJlbCBmaWx0ZXJMYWJlbF87Ci0gIHByaXZhdGUgQ29tYm8gZmlsdGVyQ29tYm9fOwotICAvKkNPTlRFWFRfSUQgRFJFUzAwMDEgZm9yIHRoZSBSZXNvdXJjZSBUeXBlIGNvbWJvIGJveCBvZiB0aGUgUmVzb3VyY2UgU2VsZWN0aW9uIERpYWxvZyovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkZPUE9QX0RSRVNfQ09NQk9fUkVTT1VSQ0VfVFlQRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuRFJFUzAwMDEiOwotCi0gIHByaXZhdGUgVHJlZSByZXNvdXJjZVRyZWVfOwotICBwcml2YXRlIFRyZWVWaWV3ZXIgZmlsZVZpZXdlcl87Ci0gIC8qQ09OVEVYVF9JRCBEUkVTMDAwMiBmb3IgdGhlIFJlc291cmNlIHRyZWUgb2YgdGhlIFJlc291cmNlIFNlbGVjdGlvbiBEaWFsb2cqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5GT1BPUF9EUkVTX1RSRUVfUkVTT1VSQ0UgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLkRSRVMwMDAyIjsKLQotICAvLwotICAvLyBFc3NlbnRpYWwgZ29vZGllcy4KLSAgLy8KLSAgcHJpdmF0ZSBJUmVzb3VyY2Ugcm9vdF87Ci0gIHByaXZhdGUgSVJlc291cmNlIGluaXRpYWxTZWxlY3Rpb25fOwotICBwcml2YXRlIEZpbHRlcltdIGZpbHRlcnNfOwotICBwcml2YXRlIEZpbHRlciBjdXJyZW50RmlsdGVyXzsKLSAgcHJpdmF0ZSBJUmVzb3VyY2VbXSBzZWxlY3Rpb25fOwotICBwcml2YXRlIGJvb2xlYW4gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXzsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlJlc291cmNlU2VsZWN0aW9uRGlhbG9nPC9jb2RlPgotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5wYXJlbnQgU2hlbGw8L2NvZGU+LgotICAqIFRoZSBkaWFsb2cgcmVuZGVycyBhbGwgcmVzb3VyY2VzIGluY2x1ZGluZyBhbmQKLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cm9vdCBJUmVzb3VyY2U8L2NvZGU+LgotICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGx9LAotICAqIG9yIG51bGwgdG8gY3JlYXRlIGEgdG9wLWxldmVsIHNoZWxsLgotICAqIEBwYXJhbSByb290IFRoZSByb290IHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2V9LAotICAqIG9yIG51bGwgdG8gYmVnaW4gd2l0aCB0aGUgd29ya3NwYWNlIHJvb3QuCi0gICogQHBhcmFtIGluaXRpYWxTZWxlY3Rpb24gVGhlIGluaXRpYWxseSBzZWxlY3RlZCBvYmplY3Qgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cgKCBTaGVsbCBwYXJlbnQsIElSZXNvdXJjZSByb290LCBJUmVzb3VyY2UgaW5pdGlhbFNlbGVjdGlvbiApCi0gIHsKLSAgICB0aGlzKHBhcmVudCxyb290LGluaXRpYWxTZWxlY3Rpb24sbmV3IEZpbHRlcltdIHtuZXcgQW55RmlsdGVyKCl9KTsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+UmVzb3VyY2VTZWxlY3Rpb25EaWFsb2c8L2NvZGU+Ci0gICogdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnBhcmVudCBTaGVsbDwvY29kZT4uCi0gICogVGhlIGRpYWxvZyByZW5kZXJzIGFsbCByZXNvdXJjZXMgaW5jbHVkaW5nIGFuZAotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5yb290IElSZXNvdXJjZTwvY29kZT4gdGhhdAotICAqIGFyZSBhY2NlcHRlZCBieSB0aGUgZ2l2ZW4gZmlsdGVyLgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXIjYWNjZXB0c30uCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbH0sCi0gICogb3IgbnVsbCB0byBjcmVhdGUgYSB0b3AtbGV2ZWwgc2hlbGwuCi0gICogQHBhcmFtIHJvb3QgVGhlIHJvb3Qge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0sCi0gICogb3IgbnVsbCB0byBiZWdpbiB3aXRoIHRoZSB3b3Jrc3BhY2Ugcm9vdC4KLSAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiBUaGUgaW5pdGlhbGx5IHNlbGVjdGVkIG9iamVjdCBvciBudWxsIGlmIG5vbmUuCi0gICogQHBhcmFtIGZpbHRlciBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uRmlsdGVyfSwKLSAgKiBvciBudWxsIHRvIGRlZmF1bHQgdG8gYWxsIHJlc291cmNlcyB1bmRlciB0aGUgPGNvZGU+cm9vdDwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyAoIFNoZWxsIHBhcmVudCwgSVJlc291cmNlIHJvb3QsIElSZXNvdXJjZSBpbml0aWFsU2VsZWN0aW9uLCBGaWx0ZXIgZmlsdGVyICkKLSAgewotICAgIHRoaXMocGFyZW50LHJvb3QsaW5pdGlhbFNlbGVjdGlvbixuZXcgRmlsdGVyW10ge2ZpbHRlcn0pOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5SZXNvdXJjZVNlbGVjdGlvbkRpYWxvZzwvY29kZT4KLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cGFyZW50IFNoZWxsPC9jb2RlPi4KLSAgKiBUaGUgZGlhbG9nIHJlbmRlcnMgYWxsIHJlc291cmNlcyBpbmNsdWRpbmcgYW5kCi0gICogdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnJvb3QgSVJlc291cmNlPC9jb2RlPiB0aGF0Ci0gICogYXJlIGFjY2VwdGVkIGJ5IHRoZSBnaXZlbiBmaWx0ZXJzLgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXIjYWNjZXB0c30uCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbH0uCi0gICogb3IgbnVsbCB0byBjcmVhdGUgYSB0b3AtbGV2ZWwgc2hlbGwuCi0gICogQHBhcmFtIHJvb3QgVGhlIHJvb3Qge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0sCi0gICogb3IgbnVsbCB0byBiZWdpbiB3aXRoIHRoZSB3b3Jrc3BhY2Ugcm9vdC4KLSAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiBUaGUgaW5pdGlhbGx5IHNlbGVjdGVkIG9iamVjdCBvciBudWxsIGlmIG5vbmUuCi0gICogQHBhcmFtIGZpbHRlcnMgQW4gYXJyYXkgb2Yge0BsaW5rIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uRmlsdGVyfQotICAqIG9iamVjdHMuCi0gICogSWYgdGhlIGFycmF5IGlzIG51bGwgb3Igb2YgbGVuZ3RoIHplcm8sIHRoZW4gYWxsIHJlc291cmNlcyBhcmUgYWNjZXB0ZWQKLSAgKiAoaWUuIGVxdWl2YWxlbnQgdG8gPGNvZGU+UmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cocGFyZW50LHJvb3QpPC9jb2RlPi4KLSAgKiBJZiB0aGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG9uZSwgdGhlbiB0aGUgZGlhbG9nIHdpbGwgY29uc2lzdCBvZiBhIHNpbmdsZQotICAqIGNvbnRyb2wgc2hvd2luZyBhIGxpc3Qgb2YgYWxsIGZpbHRlcmVkIHJlc291cmNlcy4KLSAgKiBJZiB0aGUgYXJyYXkgaXMgb2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBvbmUsIHRoZW4gdGhlIGRpYWxvZyB3aWxsCi0gICogY29uc2lzdCBvZiBhIGNvbWJvIGJveCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgZmlsdGVycyBhbmQgd2l0aCB0aGUKLSAgKiBmaXJzdCBmaWx0ZXIgKGllLiA8Y29kZT5maWx0ZXJzWzBdPC9jb2RlPikgc2VsZWN0ZWQgYnkgZGVmYXVsdCwgZm9sbG93ZWQKLSAgKiBieSBhIGNvbnRyb2wgc2hvd2luZyBhIGxpc3Qgb2YgYWxsIHJlc291cmNlcyBmaWx0ZXJlZCBieSB0aGUgc2VsZWN0ZWQgZmlsdGVyLiAKLSAgKi8KLSAgcHVibGljIFJlc291cmNlU2VsZWN0aW9uRGlhbG9nICggU2hlbGwgcGFyZW50LCBJUmVzb3VyY2Ugcm9vdCwgSVJlc291cmNlIGluaXRpYWxTZWxlY3Rpb24sIEZpbHRlcltdIGZpbHRlcnMgKQotICB7Ci0gICAgc3VwZXIocGFyZW50KTsKLSAgICByb290XyA9IHJvb3QgPT0gbnVsbCA/IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpIDogcm9vdDsKLSAgICBpbml0aWFsU2VsZWN0aW9uXyA9IGluaXRpYWxTZWxlY3Rpb247Ci0gICAgZmlsdGVyc18gPSAoZmlsdGVycyA9PSBudWxsIHx8IGZpbHRlcnMubGVuZ3RoID09IDApID8gbmV3IEZpbHRlcltdIHtuZXcgQW55RmlsdGVyKCl9IDogZmlsdGVyczsKLSAgICBjdXJyZW50RmlsdGVyXyA9IGZpbHRlcnNfWzBdOwotICAgIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZF8gPSBmYWxzZTsKLSAgICBzZXRTaGVsbFN0eWxlKFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5SRVNJWkUgfCBTV1QuQVBQTElDQVRJT05fTU9EQUwpOwotICB9Ci0KLSAgLyoqCi0gICogRW5hYmxlcyBvciBkaXNhYmxlcyBtdWx0aXBsZSBzZWxlY3Rpb24gaW4gdGhlIHRyZWUgdmlldy4KLSAgKiBNdWx0aXBsZSBzZWxlY3Rpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgKiBAcGFyYW0gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkIFRydWUgdG8gZW5hYmxlZCBvciBmYWxzZSB0byBkaXNhYmxlLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRNdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWQgKCBib29sZWFuIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZCApCi0gIHsKLSAgICBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWRfID0gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2VsZWN0aW9ucyBtYWRlIGluIHRoZSBkaWFsb2cgaWYgT0sgd2FzIHByZXNzZWQsCi0gICogb3IgbnVsbCBpZiBDYW5jZWwgd2FzIHByZXNzZWQuIFJldHVybnMgbnVsbCBpZiB0aGUgZGlhbG9nCi0gICogaGFzIG5ldmVyIGJlZW4gb3BlbmVkLgotICAqIEByZXR1cm4gQW4gYXJyYXkgb2Ygc2VsZWN0ZWQgcmVzb3VyY2VzLCBwb3NzaWJseSBlbXB0eSwgcG9zc2libHkgbnVsbC4KLSAgKi8KLSAgcHVibGljIElSZXNvdXJjZVtdIGdldFJlc3VsdCAoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbl87Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiB0aGUgQ2FuY2VsIGJ1dHRvbiBpcyBwcmVzc2VkLgotICAqIEluc3VyZXMgdGhhdCB7QGxpbmsgI2dldFJlc3VsdH0gd2lsbCByZXR1cm4gbnVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY2FuY2VsUHJlc3NlZCAoKQotICB7Ci0gICAgc2VsZWN0aW9uXyA9IG51bGw7Ci0gICAgc2V0UmV0dXJuQ29kZShEaWFsb2cuQ0FOQ0VMKTsKLSAgICBzdXBlci5jYW5jZWxQcmVzc2VkKCk7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiB0aGUgT0sgYnV0dG9uIGlzIHByZXNzZWQuCi0gICogU3F1aXJyZWxzIGF3YXkgdGhlIGxpc3Qgb2YgemVybyBvciBtb3JlIHNlbGVjdGVkCi0gICogPGNvZGU+SVJlc291cmNlPC9jb2RlPnMgdG8gYmUgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRSZXN1bHR9LgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQgKCkKLSAgewotICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gZmlsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotICAgIHsKLSAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHN0cnVjdHVyZWRTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uOwotICAgICAgc2VsZWN0aW9uXyA9IG5ldyBJUmVzb3VyY2Vbc3RydWN0dXJlZFNlbGVjdGlvbi5zaXplKCldOwotICAgICAgaW50IGk9MDsKLSAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBzdHJ1Y3R1cmVkU2VsZWN0aW9uLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBpdGVyLm5leHQoKTsKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICAgICAgewotICAgICAgICAgIHNlbGVjdGlvbl9baSsrXSA9IChJUmVzb3VyY2Upb2JqZWN0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHNldFJldHVybkNvZGUoRGlhbG9nLk9LKTsKLSAgICBzdXBlci5va1ByZXNzZWQoKTsKLSAgfQotCi0gIC8qKgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdyNjb25maWd1cmVTaGVsbH0uCi0gICogQHBhcmFtIHNoZWxsIFRoZSBzaGVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwgKCBTaGVsbCBzaGVsbCApCi0gIHsKLSAgICBzdXBlci5jb25maWd1cmVTaGVsbChzaGVsbCk7Ci0gICAgc2hlbGwuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX1JFU09VUkNFX0JST1dTRSk7Ci0gIH0KLQotICAvKiogCi0gICogQ3JlYXRlcyB0aGUgZGlhbG9nIGFyZWEuCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbXBvc2l0ZS4KLSAgKiBAcmV0dXJuIFRoZSBjb250cm9sIGFyZWEuCi0gICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEgKCBDb21wb3NpdGUgcGFyZW50ICkKLSAgewotICAgIEdyaWRMYXlvdXQgZ2w7Ci0gICAgR3JpZERhdGEgZ2Q7Ci0KLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSlzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIGdkLndpZHRoSGludCA9IDQwMDsKLSAgICBnZC5oZWlnaHRIaW50ID0gMzAwOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBpZiAoZmlsdGVyc18ubGVuZ3RoID4gMSkKLSAgICB7Ci0gICAgICBDb21wb3NpdGUgZiA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLFNXVC5OT05FKTsKLSAgICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLSAgICAgIGYuc2V0TGF5b3V0KGdsKTsKLSAgICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgICBmLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgICBmaWx0ZXJMYWJlbF8gPSBuZXcgTGFiZWwoZixTV1QuV1JBUCk7Ci0gICAgICBmaWx0ZXJMYWJlbF8uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfUkVTT1VSQ0VfRklMVEVSKTsKLSAgICAgIGZpbHRlckxhYmVsXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9EUkVTX0NPTUJPX1JFU09VUkNFX1RZUEUpOwotCi0gICAgICBmaWx0ZXJDb21ib18gPSBuZXcgQ29tYm8oZixTV1QuRFJPUF9ET1dOIHwgU1dULlJFQURfT05MWSk7Ci0gICAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotICAgICAgZmlsdGVyQ29tYm9fLnNldExheW91dERhdGEoZ2QpOwotICAgICAgZmlsdGVyQ29tYm9fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sdGhpcyk7Ci0gICAgICBmaWx0ZXJDb21ib18uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfRFJFU19DT01CT19SRVNPVVJDRV9UWVBFKTsKLSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZmlsdGVyQ29tYm9fLElORk9QT1BfRFJFU19DT01CT19SRVNPVVJDRV9UWVBFKTsKLSAgICB9Ci0KLSAgICBpZiAobXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXykKLSAgICB7Ci0gICAgICByZXNvdXJjZVRyZWVfID0gbmV3IFRyZWUoY29tcG9zaXRlLFNXVC5NVUxUSSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzb3VyY2VUcmVlXyA9IG5ldyBUcmVlKGNvbXBvc2l0ZSxTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0gICAgfQotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMKTsKLSAgICBnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgcmVzb3VyY2VUcmVlXy5zZXRMYXlvdXREYXRhKGdkKTsKLS8vICByZXNvdXJjZVRyZWVfLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sdGhpcyk7Ci0gICAgcmVzb3VyY2VUcmVlXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9EUkVTX1RSRUVfUkVTT1VSQ0UpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVzb3VyY2VUcmVlXyxJTkZPUE9QX0RSRVNfVFJFRV9SRVNPVVJDRSk7Ci0KLSAgICBmaWxlVmlld2VyXyA9IG5ldyBUcmVlVmlld2VyKHJlc291cmNlVHJlZV8pOwotICAgIGZpbGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgV29ya2JlbmNoQ29udGVudFByb3ZpZGVyKCkpOwotICAgIGZpbGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIoCi0gICAgICAgICAgICAgICAgbmV3IERlY29yYXRpbmdMYWJlbFByb3ZpZGVyKAotCQkJCSAgICAgICAgbmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKSwgCi0JCQkJICAgICAgICBXZWJTZXJ2aWNlVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXREZWNvcmF0b3JNYW5hZ2VyKCkuZ2V0TGFiZWxEZWNvcmF0b3IoKSkpOwotICAgIGZpbGVWaWV3ZXJfLmFkZEZpbHRlcigKLSAgICAgIG5ldyBWaWV3ZXJGaWx0ZXIgKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gc2VsZWN0ICggVmlld2VyIHZpZXdlciwgT2JqZWN0IHBhcmVudE9iamVjdCwgT2JqZWN0IG9iamVjdCApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAoCi0gICAgICAgICAgICAoKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgJiYgKChJUmVzb3VyY2Upb2JqZWN0KS5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpCi0gICAgICAgICAgICB8fCAoUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cudGhpcy5jdXJyZW50RmlsdGVyXy5hY2NlcHRzKG9iamVjdCkpCi0gICAgICAgICAgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0SW5wdXQocm9vdF8pOwotICAgIGZpbGVWaWV3ZXJfLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLSAgICAgIG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyICgpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQgKCBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQgKQotICAgICAgICB7Ci0vLyAgICAgICAgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cudGhpcy52YWxpZGF0ZVBhZ2VUb1N0YXR1cygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbl8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmaWxlVmlld2VyXy5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cudGhpcy5pbml0aWFsU2VsZWN0aW9uXyksdHJ1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGFuIGV2ZW50IG9jY3VycyBvbiB0aGUgcGFnZS4KLSAgKiBIYW5kbGVzIHRoZSBldmVudCBhbmQgcmV2YWxpZGF0ZXMgdGhlIHBhZ2UuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IG9jY3VyZWQuCi0gICovCi0gIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50ICggRXZlbnQgZXZlbnQgKQotICB7Ci0vLyAgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wbHVnaW4vV2ViU2VydmljZVVJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BsdWdpbi9XZWJTZXJ2aWNlVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU1MWE1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BsdWdpbi9XZWJTZXJ2aWNlVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDExNTY5MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VVSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLQotICAvKioKLSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MudWkiOwotCi0gIC8qKgotICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVVJUGx1Z2luIGluc3RhbmNlXzsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZVVJUGx1Z2luKCkgewotCXN1cGVyKCk7Ci0JaW5zdGFuY2VfID0gdGhpczsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICogKFdlYlNlcnZpY2VVSVBsdWdpbilQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLmpzdC53cy51aSIpOwotICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VVSVBsdWdpbiBzaW5nbGV0b24uCi0gICovCi0gIHN0YXRpYyBwdWJsaWMgV2ViU2VydmljZVVJUGx1Z2luIGdldEluc3RhbmNlKCkgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQkJCi0gIC8qKgotICAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlCi0gICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLSAgKi8KLQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIG5hbWUpIHsKLQkJdHJ5IHsKLQkJCVVSTCBpbnN0YWxsVVJMID0gaW5zdGFuY2VfLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIik7Ci0JCQlVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsIG5hbWUpOwotCQkJcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BvcHVwL1BvcHVwVGVzdFNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcG9wdXAvUG9wdXBUZXN0U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjUzN2I3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcG9wdXAvUG9wdXBUZXN0U2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODAzICAgMTUyNzkwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiAoY3JlYXRlZCBjbGFzcykKLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDEyMyAgIDIxNjM3MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wb3B1cDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMuQWRhcHRlclV0aWxzOwotCi0KLXB1YmxpYyBjbGFzcyBQb3B1cFRlc3RTZXJ2aWNlIGV4dGVuZHMgUG9wdXBUZXN0V1NETAotewotICBwdWJsaWMgUG9wdXBUZXN0U2VydmljZSgpCi0gIHsKLQkgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0JU3RyaW5nIHN0YXRlTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblN0YXRlTG9jYXRpb24oKTsKLQlTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKTsKLSAgCVdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCk7Ci0gICAgY29tbWFuZC5zZXRGb3JjZUxhdW5jaE91dHNpZGVJREUoZmFsc2UpOwotICAgIFZlY3RvciBsYXVuY2hPcHRpb25zID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCkKLSAgICB7ICAgICAgCi0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB3c2RsVVJMID0gbnVsbDsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IGl0Lm5leHQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlUmVmKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZVJlZiBzZXJ2aWNlSW1wbCA9IChTZXJ2aWNlUmVmKW9iamVjdDsKLSAgICAgICAgICB3c2RsVVJMID0gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoc2VydmljZUltcGwpOwotICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykgewotICAgICAgICAJd3NkbFVSTCA9IChTdHJpbmcpIG9iamVjdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgCS8vIE9iamVjdCBpcyBub3QgYW55IHR5cGVzIHdlIHJlY29nbml6ZWQsIHdzZGxVUkwgaXMgc3RpbGwgbnVsbC4KLSAgICAgICAgICAJLy8gVHJ5IGxvb2tpbmcgdXAgYW4gYWRhcHRlciBmb3IgdGhlIG9iamVjdC4KLSAgICAgICAgCS8vIElmIGZvdW5kLCB1cGRhdGUgd3NkbFVSTCBjb250YWlucyB0aGUgYWRhcHRlZCBXU0RMIHN0cmluZy4gIAotICAgICAgICAJLy8gSWYgbm90IGZvdW5kLCB3c2RsVVJMIHdvdWxkIHN0aWxsIGJlIG51bGwuCi0gICAgICAgIAl3c2RsVVJMID0gQWRhcHRlclV0aWxzLmdldEFkYXB0ZWRXU0RMKG9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGFkZExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucywgd3NkbFVSTCwgc3RhdGVMb2NhdGlvbiwgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY29tbWFuZC5zZXRMYXVuY2hPcHRpb25zKChMYXVuY2hPcHRpb25bXSlsYXVuY2hPcHRpb25zLnRvQXJyYXkobmV3IExhdW5jaE9wdGlvblswXSkpOwotICAgIGNvbW1hbmQuZXhlY3V0ZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1Jlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcHJlZmVyZW5jZXMvUmVzb3VyY2VNYW5hZ21lbnRQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGIzZmU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcHJlZmVyZW5jZXMvUmVzb3VyY2VNYW5hZ21lbnRQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MDMgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZURlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLk1lcmdlRGVmYXVsdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRNZXJnZUNvbnRleHQ7Ci0KLQotCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VNYW5hZ21lbnRQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi17Ci0gIC8qQ09OVEVYVF9JRCBQUFJNMDAwMSBmb3IgdGhlIFJlc291cmNlIE1hbmFnbWVudCBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQUk1fUEFHRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBSTTAwMDEiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiBvdmVyV3JpdGVGaWxlczsKLSAgLypDT05URVhUX0lEIFBQUk0wMDAyIGZvciB0aGUgZmlsZSBvdmVyd3JpdGUgY2hlY2sgYm94IG9uIHRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVMgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQUk0wMDAyIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gY3JlYXRlRm9sZGVyczsKLSAgLypDT05URVhUX0lEIFBQUk0wMDAzIGZvciB0aGUgY3JlYXRlIGZvbGRlcnMgY2hlY2sgYm94IG9uIHRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBSTV9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUyA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBSTTAwMDMiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiBjaGVja291dEZpbGVzOwotICAvKkNPTlRFWFRfSUQgUFBSTTAwMDQgZm9yIHRoZSBjaGVja291dCBmaWxlcyBjaGVjayBib3ggb24gdGhlIFJlc291cmNlIE1hbmFnZW1lbnQgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUFJNX0NIRUNLQk9YX0NIRUNLX09VVCA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBSTTAwMDQiOwotICAKLSAgcHJpdmF0ZSBCdXR0b24gc2tlbGV0b25NZXJnZTsKLSAgLypDT05URVhUX0lEIFBQUk0wMDA1IGZvciB0aGUgc2tlbGV0b24gbWVyZ2UgY2hlY2sgYm94IG9uIHRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBSTV9DSEVDS0JPWF9TS0VMRVRPTl9NRVJHRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBSTTAwMDUiOwotCi0gLyoqCi0gICAqIENyZWF0ZXMgcHJlZmVyZW5jZSBwYWdlIGNvbnRyb2xzIG9uIGRlbWFuZC4KLSAgICogICBAcGFyYW0gcGFyZW50ICB0aGUgcGFyZW50IGZvciB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgc3VwZXJwYXJlbnQpCi0gIHsKLSAgCUlXb3JrYmVuY2hIZWxwU3lzdGVtIGhlbHBTeXN0ZW0gPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKTsKLSAgCQotICAgIENvbXBvc2l0ZSAgIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoIHN1cGVycGFyZW50LCBTV1QuTk9ORSApOwkKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHBhcmVudC5zZXRMYXlvdXQoIGxheW91dCApOwotICAgIHBhcmVudC5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFJNX1BBR0UpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChwYXJlbnQsIElORk9QT1BfUFBSTV9QQUdFKTsKLQotICAgIG92ZXJXcml0ZUZpbGVzID0gY3JlYXRlQ2hlY2tCb3gocGFyZW50LCBXU1VJUGx1Z2luTWVzc2FnZXMuQlVUVE9OX09WRVJXUklURV9GSUxFUyk7Ci0gICAgb3ZlcldyaXRlRmlsZXMuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVMpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChvdmVyV3JpdGVGaWxlcywgSU5GT1BPUF9QUFJNX0NIRUNLQk9YX09WRVJXUklURV9GSUxFUyk7Ci0KLSAgICBjcmVhdGVGb2xkZXJzICA9IGNyZWF0ZUNoZWNrQm94KHBhcmVudCwgV1NVSVBsdWdpbk1lc3NhZ2VzLkJVVFRPTl9DUkVBVEVfRk9MREVSUyk7Ci0gICAgY3JlYXRlRm9sZGVycy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NSRUFURV9GT0xERVJTKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAoY3JlYXRlRm9sZGVycywgSU5GT1BPUF9QUFJNX0NIRUNLQk9YX0NSRUFURV9GT0xERVJTKTsKLQotICAgIGNoZWNrb3V0RmlsZXMgPSBjcmVhdGVDaGVja0JveChwYXJlbnQsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fQ0hFQ0tPVVRfRklMRVMpOyAgICAKLSAgICBjaGVja291dEZpbGVzLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQUk1fQ0hFQ0tCT1hfQ0hFQ0tfT1VUKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAoY2hlY2tvdXRGaWxlcywgSU5GT1BPUF9QUFJNX0NIRUNLQk9YX0NIRUNLX09VVCk7Ci0gICAgCi0gICAgc2tlbGV0b25NZXJnZSA9IGNyZWF0ZUNoZWNrQm94KHBhcmVudCwgV1NVSVBsdWdpbk1lc3NhZ2VzLkJVVFRPTl9TS0VMRVRPTl9NRVJHRSk7ICAgIAotICAgIHNrZWxldG9uTWVyZ2Uuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9DSEVDS0JPWF9TS0VMRVRPTl9NRVJHRSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHNrZWxldG9uTWVyZ2UsIElORk9QT1BfUFBSTV9DSEVDS0JPWF9TS0VMRVRPTl9NRVJHRSk7Ci0KLSAgICBpbml0aWFsaXplVmFsdWVzKCk7Ci0gICAgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KHN1cGVycGFyZW50KTsgICAgCi0KLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0gCi0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUNoZWNrQm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdGV4dCApCi0gIHsKLSAgICBCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbiggcGFyZW50LCBTV1QuQ0hFQ0sgKTsKLSAgICBidXR0b24uc2V0VGV4dCggdGV4dCApOwotICAgIHJldHVybiBidXR0b247Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgc3RvcmVWYWx1ZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpCi0gIHsKLSAgICBwZXJmb3JtT2soKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgIHsgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIHVzaW5nIGRlZmF1bHQgdmFsdWVzCi0gICAqIGluIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVEZWZhdWx0cygpCi0gIHsKLSAgICBvdmVyV3JpdGVGaWxlcy5zZXRTZWxlY3Rpb24oIFJlc291cmNlRGVmYXVsdHMuZ2V0T3ZlcndyaXRlRmlsZXNEZWZhdWx0KCkpOwotICAgIGNyZWF0ZUZvbGRlcnMuc2V0U2VsZWN0aW9uKCBSZXNvdXJjZURlZmF1bHRzLmdldENyZWF0ZUZvbGRlcnNEZWZhdWx0KCkpOwotICAgIGNoZWNrb3V0RmlsZXMuc2V0U2VsZWN0aW9uKCBSZXNvdXJjZURlZmF1bHRzLmdldENoZWNrb3V0RmlsZXNEZWZhdWx0KCkpOwotICAgIHNrZWxldG9uTWVyZ2Uuc2V0U2VsZWN0aW9uKCBNZXJnZURlZmF1bHRzLmdldFNrZWxldG9uTWVyZ2VEZWZhdWx0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgZnJvbSB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkKLSAgewotICAgIC8vIGdldCB0aGUgcGVyc2lzdGVudCBjb250ZXh0IGZyb20gdGhlIHBsdWdpbgotICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpOwotICAgIFBlcnNpc3RlbnRNZXJnZUNvbnRleHQgbWVyZ2VDb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRNZXJnZUNvbnRleHQoKTsKLSAgICBvdmVyV3JpdGVGaWxlcy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSk7Ci0gICAgY3JlYXRlRm9sZGVycy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpKTsKLSAgICBjaGVja291dEZpbGVzLnNldFNlbGVjdGlvbiggY29udGV4dC5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkpOwotICAgIHNrZWxldG9uTWVyZ2Uuc2V0U2VsZWN0aW9uKCBtZXJnZUNvbnRleHQuaXNTa2VsZXRvbk1lcmdlRW5hYmxlZCgpKTsgCi0gICB9Ci0KLSAgLyoqCi0gICAqIFN0b3JlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb250cm9scyBiYWNrIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLSAgewotICAgIC8vIGdldCB0aGUgcGVyc2lzdGVudCBjb250ZXh0IGZyb20gdGhlIHBsdWdpbgotICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpOwotICAgIFBlcnNpc3RlbnRNZXJnZUNvbnRleHQgbWVyZ2VDb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRNZXJnZUNvbnRleHQoKTsKLSAgICBjb250ZXh0LnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCggb3ZlcldyaXRlRmlsZXMuZ2V0U2VsZWN0aW9uKCkgKTsKLSAgICBjb250ZXh0LnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKCBjcmVhdGVGb2xkZXJzLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCggY2hlY2tvdXRGaWxlcy5nZXRTZWxlY3Rpb24oKSApOyAgCi0gICAgbWVyZ2VDb250ZXh0LnNldFNrZWxldG9uTWVyZ2VFbmFibGVkKCBza2VsZXRvbk1lcmdlLmdldFNlbGVjdGlvbigpICk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wcmVmZXJlbmNlcy9UZXN0RmFjaWxpdHlEZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1Rlc3RGYWNpbGl0eURlZmF1bHRzUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIzMDY3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1Rlc3RGYWNpbGl0eURlZmF1bHRzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTcgICAxMTMxNjkgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAyMjIgICAxMTg3MTEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMTQgICAxNTQ1NDMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgaXMgdHJhY2tpbmcgZXh0ZW5zaW9ucyB1c2luZyBsYWJlbCBhdHRyaWJ1dGUgaW5zdGVhZCBvZiBJRAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvRGVmYXVsdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RGYWNpbGl0eURlZmF1bHRzUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSwgU2VsZWN0aW9uTGlzdGVuZXIKLXsKLSAgCi0gIHByaXZhdGUgVGFibGVWaWV3ZXIgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXzsgCi0gIHByaXZhdGUgQnV0dG9uIG1vdmVVcF87Ci0gIHByaXZhdGUgQnV0dG9uIG1vdmVEb3duXzsKLSAgcHJpdmF0ZSBWZWN0b3Igd2ViU2VydmljZVRlc3RUeXBlc187Ci0gIAotICAvKkNPTlRFWFRfSUQgUFBTRDAwMDEgZm9yIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQU0RfUEFHRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBTRDAwMDEiOwotICAvLwotICBwcml2YXRlIEJ1dHRvbiBsYXVuY2hTYW1wbGU7Ci0gIC8qQ09OVEVYVF9JRCBQUFNEMDAwMiBmb3IgdGhlIGxhdW5jaCBzYW1wbGUgY2hlY2sgYm94IG9uIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BQU0RfQ0hFQ0tCT1hfTEFVTkNIX1NBTVBMRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuUFBTRDAwMDIiOwotICAvLwotCi0gIC8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0gICAgCi0gIAlDb21wb3NpdGUgICBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKCBzdXBlcnBhcmVudCwgU1dULk5PTkUgKTsJCi0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0KCBsYXlvdXQgKTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBTRF9QQUdFKTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LElORk9QT1BfUFBTRF9QQUdFKTsgICAgCi0KLSAgICBsYXVuY2hTYW1wbGUgPSBjcmVhdGVDaGVja0JveChwYXJlbnQsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fTEFVTkNIX1NBTVBMRSk7Ci0gICAgbGF1bmNoU2FtcGxlLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQU0RfQ0hFQ0tCT1hfTEFVTkNIX1NBTVBMRSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChsYXVuY2hTYW1wbGUsIElORk9QT1BfUFBTRF9DSEVDS0JPWF9MQVVOQ0hfU0FNUExFKTsKLQotICAgIAotICAgIFRleHQgdGVzdFNlcnZpY2VUeXBlTGFiZWwgPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5SRUFEX09OTFkgfCBTV1QuV1JBUCk7Ci0gICAgdGVzdFNlcnZpY2VUeXBlTGFiZWwuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfU0FNUExFX1RZUEVTKTsKLSAgICB0ZXN0U2VydmljZVR5cGVMYWJlbC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApICk7Ci0KLSAgICBDb21wb3NpdGUgd2ViU2VydmljZVRlc3RUeXBlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMjsKLSAgICBnbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotCi0gICAgVGFibGUgdGFibGU9IG5ldyBUYWJsZSh3ZWJTZXJ2aWNlVGVzdFR5cGVDb21wb3NpdGUsIFNXVC5CT1JERVIgfCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgfCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKTsKLSAgICBnZC53aWR0aEhpbnQgPSAyNTY7Ci0gICAgdGFibGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgdGFibGUuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfQ0xJRU5UX1RZUEVfVEFCTEVfVklFV0VSKTsKLQotICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfID0gbmV3IFZlY3RvcigpOwotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIodGFibGUpOwotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBXZWJTZXJ2aWNlVGVzdFR5cGVDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBXZWJTZXJ2aWNlVGVzdFR5cGVMYWJlbFByb3ZpZGVyKCkpOwotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8uc2V0SW5wdXQod2ViU2VydmljZVRlc3RUeXBlc18pOwotCi0gICAgVGFibGVMYXlvdXQgdGFibGVMYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKLSAgICBUYWJsZUNvbHVtbiB0YWJsZUNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOwotICAgIHRhYmxlQ29sdW1uLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9UWVBFX05BTUUpOwotICAgIENvbHVtbldlaWdodERhdGEgY29sdW1uRGF0YSA9IG5ldyBDb2x1bW5XZWlnaHREYXRhKDI1NiwgMjU2LCBmYWxzZSk7Ci0gICAgdGFibGVMYXlvdXQuYWRkQ29sdW1uRGF0YShjb2x1bW5EYXRhKTsKLSAgICB0YWJsZS5zZXRMYXlvdXQodGFibGVMYXlvdXQpOwotCi0gICAgQ29tcG9zaXRlIGMgPSBuZXcgQ29tcG9zaXRlKHdlYlNlcnZpY2VUZXN0VHlwZUNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMTsKLSAgICBnbC5tYXJnaW5IZWlnaHQgPSAxMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgYy5zZXRMYXlvdXQoZ2wpOwotICAgIGMuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0KLSAgICBtb3ZlVXBfID0gbmV3IEJ1dHRvbihjLCBTV1QuUFVTSCk7Ci0gICAgbW92ZVVwXy5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9NT1ZFX1VQKTsKLSAgICBtb3ZlVXBfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotICAgIG1vdmVVcF8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgbW92ZVVwXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9NT1ZFX1VQKTsKLQotICAgIG1vdmVEb3duXyA9IG5ldyBCdXR0b24oYywgU1dULlBVU0gpOwotICAgIG1vdmVEb3duXy5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9NT1ZFX0RPV04pOwotICAgIG1vdmVEb3duXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBtb3ZlRG93bl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgbW92ZURvd25fLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX01PVkVfRE9XTik7Ci0KLSAgICB0YWJsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgVGFibGVTZWxlY3Rpb25MaXN0ZW5lcihtb3ZlVXBfLCBtb3ZlRG93bl8sIHRhYmxlKSk7Ci0gICAgCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7ICAgIAotCi0gICAgcmV0dXJuIHBhcmVudDsKLSAgfQotCi0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUNoZWNrQm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdGV4dCApCi0gIHsKLSAgICBCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbiggcGFyZW50LCBTV1QuQ0hFQ0sgKTsKLSAgICBidXR0b24uc2V0VGV4dCggdGV4dCApOwotICAgIHJldHVybiBidXR0b247Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgdHJ5ewotICAgICAgc3RvcmVWYWx1ZXMoKTsKLSAgICB9Y2F0Y2ggKEV4Y2VwdGlvbiBleGMpewotICAgIAlleGMucHJpbnRTdGFja1RyYWNlKCk7fQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkKLSAgewotICAgIHRyeXsKLSAgCXBlcmZvcm1PaygpOwotICAgIH1jYXRjaChOdWxsUG9pbnRlckV4Y2VwdGlvbiBleGMpewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgIHsgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIHRvIHRoZWlyIGJ1cm5lZC1pbiBkZWZhdWx0cy4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVmYXVsdHMoKQotICB7Ci0gICAgU2NlbmFyaW9EZWZhdWx0cyBkZWZhdWx0cyA9IG5ldyBTY2VuYXJpb0RlZmF1bHRzKCk7Ci0gICAgLy9wZ20gbGF1bmNoU2FtcGxlLnNldFNlbGVjdGlvbiggZGVmYXVsdHMuZ2V0TGF1bmNoU2FtcGxlRGVmYXVsdCgpKTsKLSAgICAKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5jbGVhcigpOwotICAgIFN0cmluZ1tdIHR5cGVzID0gZGVmYXVsdHMuZ2V0V2ViU2VydmljZVRlc3RJZHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKQotICAgICAgd2ViU2VydmljZVRlc3RUeXBlc18uYWRkKHR5cGVzW2ldKTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIGZyb20gdGhlIHByZWZlcmVuY2UgaGVscGVyLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotICB7Ci0gIAlTY2VuYXJpb0NvbnRleHQgIGNvbnRleHQgID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotICAgIFNjZW5hcmlvRGVmYXVsdHMgZGVmYXVsdHMgPSBuZXcgU2NlbmFyaW9EZWZhdWx0cygpOwotICAgIAotICAgIGxhdW5jaFNhbXBsZS5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNMYXVuY2hTYW1wbGVFbmFibGVkKCkpOwotICAgICAgICAKLSAgICBTdHJpbmdbXSB0eXBlcyA9IGNvbnRleHQuZ2V0V2ViU2VydmljZVRlc3RJZHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKQotICAgICAgd2ViU2VydmljZVRlc3RUeXBlc18uYWRkKHR5cGVzW2ldKTsKLSAgICAvLyBjaGVjayB3aGV0aGVyIHdlIG1pc3NlZCBhbnkgdHlwZXMgZnJvbSB0aGUgZGVmYXVsdCBsaXN0Ci0gICAgYm9vbGVhbiBtaXNzZWQgPSBmYWxzZTsKLSAgICB0eXBlcyA9IGRlZmF1bHRzLmdldFdlYlNlcnZpY2VUZXN0SWRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAod2ViU2VydmljZVRlc3RUeXBlc18uaW5kZXhPZih0eXBlc1tpXSkgPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfLmFkZCh0eXBlc1tpXSk7Ci0gICAgICAgIG1pc3NlZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChtaXNzZWQpCi0gICAgewotICAgICAgdHlwZXMgPSBuZXcgU3RyaW5nW3dlYlNlcnZpY2VUZXN0VHlwZXNfLnNpemUoKV07Ci0gICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5jb3B5SW50byh0eXBlcyk7Ci0gICAgICBjb250ZXh0LnNldFdlYlNlcnZpY2VUZXN0SWRzKHR5cGVzKTsKLSAgICB9Ci0gICAgLy8gcmVmcmVzaCB2aWV3ZXIKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAKLSAgICAvLyBTZWxlY3QgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHRhYmxlCi0gICAgVGFibGUgdGFibGUgPSB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLmdldFRhYmxlKCk7Ci0JaWYgKHRhYmxlLmdldEl0ZW1Db3VudCgpID4gMCl7Ci0gICAgCXRhYmxlLnNldFNlbGVjdGlvbigwKTsKLSAgICAJdGFibGUubm90aWZ5TGlzdGVuZXJzKFNXVC5TZWxlY3Rpb24sIG5ldyBFdmVudCgpKTsKLSAgICB9Ci0gICB9Ci0KLSAgLyoqCi0gICAqIFN0b3JlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb250cm9scyBiYWNrIHRvIHRoZSBwcmVmZXJlbmNlIGhlbHBlci4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0gIHsKLSAgICBTY2VuYXJpb0NvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLSAgICBTdHJpbmdbXSB0eXBlcyA9IG5ldyBTdHJpbmdbd2ViU2VydmljZVRlc3RUeXBlc18uc2l6ZSgpXTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5jb3B5SW50byh0eXBlcyk7Ci0gICAgY29udGV4dC5zZXRXZWJTZXJ2aWNlVGVzdElkcyh0eXBlcyk7Ci0gICAgCi0gICAgY29udGV4dC5zZXRMYXVuY2hTYW1wbGVFbmFibGVkKGxhdW5jaFNhbXBsZS5nZXRTZWxlY3Rpb24oKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICAgIGludCBpbmRleCA9IHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8uZ2V0VGFibGUoKS5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBpZiAoZS53aWRnZXQgPT0gbW92ZVVwXyAmJiBpbmRleCA+IDApCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5pbnNlcnRFbGVtZW50QXQob2JqZWN0LCBpbmRleC0xKTsKLSAgICAgICAgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlLndpZGdldCA9PSBtb3ZlRG93bl8gJiYgaW5kZXggPCB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5zaXplKCktMSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IHdlYlNlcnZpY2VUZXN0VHlwZXNfLnJlbW92ZShpbmRleCk7Ci0gICAgICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfLmluc2VydEVsZW1lbnRBdChvYmplY3QsIGluZGV4KzEpOwotICAgICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgIH0KLSAgICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8uZ2V0VGFibGUoKS5ub3RpZnlMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbiwgbmV3IEV2ZW50KCkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgV2ViU2VydmljZVRlc3RUeXBlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIKLSAgewotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciNnZXRFbGVtZW50cyhPYmplY3QpCi0gICAgICovCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCB2YWx1ZSkgCi0gICAgewotICAgICAgcmV0dXJuICgoVmVjdG9yKXZhbHVlKS50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2Rpc3Bvc2UoKQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSAKLSAgICB7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKFZpZXdlciwgT2JqZWN0LCBPYmplY3QpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciBhcmcwLCBPYmplY3QgYXJnMSwgT2JqZWN0IGFyZzIpIAotICAgIHsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIFdlYlNlcnZpY2VUZXN0VHlwZUxhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyCi0gIHsKLSAgICBwdWJsaWMgV2ViU2VydmljZVRlc3RUeXBlTGFiZWxQcm92aWRlcigpCi0gICAgewotICAgIH0KLQotICAgIC8qKgotICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKE9iamVjdCkKLSAgICAqLwotICAgIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgYXJnMCkgCi0gICAgeyAKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KE9iamVjdCkKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IHZhbHVlKSAKLSAgICB7Ci0gICAgICBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiBleHRlbnNpb24gPSAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKQotICAgICAgCQkuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeUlkKHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKQotICAgIAkgIHJldHVybiBleHRlbnNpb24uZ2V0TGFiZWwoKTsKLSAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIGNsYXNzIFRhYmxlU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0gICAgQnV0dG9uIHVwOwotICAgIEJ1dHRvbiBkb3duOwotICAgIFRhYmxlICB0YWJsZTsKLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGFyZzApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApCi0gICAgewotICAgICAgaW50IGkgPSB0YWJsZS5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgaWYgKGkgPT0gdGFibGUuZ2V0SXRlbUNvdW50KCkgLSAxKSBkb3duLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgZWxzZSBpZiAoaSA+IC0xKSBkb3duLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICBpZiAoaSA9PSAwKSB1cC5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgIGVsc2UgaWYgKGkgPiAtMSkgdXAuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVGFibGVTZWxlY3Rpb25MaXN0ZW5lcihCdXR0b24gdXAsIEJ1dHRvbiBkb3duLCBUYWJsZSB0YWJsZSkKLSAgICB7Ci0gICAgICB0aGlzLnVwID0gdXA7Ci0gICAgICB0aGlzLmRvd24gPSBkb3duOwotICAgICAgdGhpcy50YWJsZSA9IHRhYmxlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS91ZGRpL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3VkZGkvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg2ZDAyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3VkZGkvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkudWRkaTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotCi1wdWJsaWMgaW50ZXJmYWNlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlCi17Ci0gICAgcHVibGljIGJvb2xlYW4gaXNQcml2YXRlVURESVJlZ2lzdHJ5SW5zdGFsbGVkKCk7Ci0gICAgcHVibGljIFN0cmluZ1tdIGdldFByaXZhdGVVRERJUmVnaXN0cnlJbnF1aXJ5QVBJKCk7Ci0gICAgcHVibGljIFN0cmluZ1tdIGdldFByaXZhdGVVRERJUmVnaXN0cnlQdWJsaXNoQVBJKCk7Ci0gICAgcHVibGljIENvbW1hbmRXaWRnZXRCaW5kaW5nIGdldEJpbmRpbmcoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMDFiMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13cy5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MTQ1MTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3M8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzUyODRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM1OjI2IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJjYzhjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDE6NDIgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmIwZGZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzA0LnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbWFuZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRpYWxvZzt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3Q7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbTtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpmYWNlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ1OTM2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc3JjLmluY2x1ZGVzID0gY29tcG9uZW50LnhtbAotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc291cmNlLi4gPSBzcmMvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9jb21wb25lbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvY29tcG9uZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkwYmYxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9jb21wb25lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjb21wb25lbnQgeG1sbnM9Imh0dHA6Ly9lY2xpcHNlLm9yZy93dHAvcmVsZW5nL3Rvb2xzL2NvbXBvbmVudC1tb2RlbCIgbmFtZT0ib3JnLmVjbGlwc2UuanN0LndzIj4KLSAgIDxjb21wb25lbnQtZGVwZW5kcyB1bnJlc3RyaWN0ZWQ9InRydWUiPgotICAgPC9jb21wb25lbnQtZGVwZW5kcz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cyIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MudWkiIGZyYWdtZW50PSJmYWxzZSIvPgotPC9jb21wb25lbnQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDVhOGJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvV1NQbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvV1NQbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFhYTc1ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL1dTUGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotTVNHX0VSUk9SX1NFUlZFUj1JV0FCMDIxM0UgRXJyb3IgaW4gc3RhcnRpbmcgc2VydmVyLgotCi1BTllfRklMVEVSX05BTUU9QWxsIGZpbGVzCi1BTllfRklMVEVSX0RFU0M9VGhpcyBpcyBhIGtpbmQgb2YgRmlsdGVyIHRoYXQgYWNjZXB0cyBhbGwgb2JqZWN0cy4KLQotRVJST1JfU0VMRUNUSU9OX1RSQU5TRk9STT1TcGVjaWZpZWQgc2VsZWN0aW9uIGRvZXMgbm90IG1hdGNoIGEgcmVzb3VyY2UuCi0KLU1TR19KQVhSUEMxMV9OT1RfQ09NUExJQU5UPVRoZSBzZXJ2aWNlIGNsYXNzICJ7MH0iIGRvZXMgbm90IGNvbXBseSB0byBvbmUgb3IgbW9yZSByZXF1aXJlbWVudHMgb2YgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24sIGFuZCBtYXkgbm90IGRlcGxveSBvciBmdW5jdGlvbiBjb3JyZWN0bHkuCi1NU0dfSkFYUlBDMTFfVU5SRVNPTFZFRF9DTEFTUz1UaGUgY2xhc3MgInswfSIgY2Fubm90IGJlIGxvYWRlZCB2aWEgcHJvamVjdCAiezF9Ii4gQ2hlY2sgdGhhdCB0aGUgcHJvamVjdCBjb250YWlucyB0aGUgY2xhc3MsIG9yIHRoYXQgdGhlIGNsYXNzIGlzIGxvYWRhYmxlIGFjY29yZGluZyB0byB0aGUgSmF2YSBCdWlsZCBQYXRoIG9mIHRoZSBwcm9qZWN0LgotTVNHX0pBWFJQQzExX1VOUkVTT0xWRURfVFlQRT1BIGRhdGEgdHlwZSwgInswfSIsIGNvdWxkIG5vdCBiZSByZXNvbHZlZCB3aGlsZSBhbmFseXppbmcgdGhlIHNlcnZpY2UgY2xhc3MuIENoZWNrIHlvdXIgcHJvamVjdCBjbGFzc3BhdGguCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDAxPVRoZSBzZXJ2aWNlIGNsYXNzICJ7MH0iIGRvZXMgbm90IGhhdmUgYSBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gQ2hhcHRlciAxMC4xIG9mIHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIGEgc2VydmljZSBjbGFzcyB0byBoYXZlIGEgcHVibGljIGRlZmF1bHQgY29uc3RydWN0b3IsIG90aGVyd2lzZSBhIEpBWC1SUEMgMS4xIGNvbXBsaWFudCBXZWIgc2VydmljZSBlbmdpbmUgbWF5IGJlIHVuYWJsZSB0byBjb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZpY2UgY2xhc3MgdG8gaGFuZGxlIGFuIGluY29taW5nIHJlcXVlc3QgbWVzc2FnZS4gCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDAyPVRoZSB2YWx1ZSB0eXBlICJ7MH0iIHVzZWQgdmlhIHRoZSBzZXJ2aWNlIGNsYXNzICJ7MX0iIGRvZXMgbm90IGhhdmUgYSBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gQ2hhcHRlciA1LjQgb2YgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgYSB2YWx1ZSB0eXBlIHRvIGhhdmUgYSBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3Rvciwgb3RoZXJ3aXNlIGEgSkFYLVJQQyAxLjEgY29tcGxpYW50IFdlYiBzZXJ2aWNlIGVuZ2luZSBtYXkgYmUgdW5hYmxlIHRvIGNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgdmFsdWUgdHlwZSBkdXJpbmcgZGVzZXJpYWxpemF0aW9uLgotTVNHX0pBWFJQQzExX1JVTEVfMDAwMz1UaGUgbWV0aG9kICJ7MH0iIG9uIHRoZSBzZXJ2aWNlIGNsYXNzICJ7MX0iIGlzIG92ZXJsb2FkZWQuIE92ZXJsb2FkZWQgbWV0aG9kcyBhcmUgYWxsb3dlZCBieSBjaGFwdGVyIDUuNS41IG9mIHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uLCBob3dldmVyLCBzb21lIEpBWC1SUEMgMS4xIGNvbXBsaWFudCB0b29scyBtYXkgbm90IGFsbG93IG92ZXJsb2FkZWQgbWV0aG9kcyBvciBtYXkgZ2VuZXJhdGUgV1NETCB3aXRoIG92ZXJsb2FkZWQgb3BlcmF0aW9ucyBhcyBjb250cmFyeSB0byBydWxlIFIyMzA0IG9mIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDA0PVRoZSBzZXJ2aWNlIHNwZWNpZmljIGV4Y2VwdGlvbiBjbGFzcyAiezB9IiBkb2VzIG5vdCBoYXZlIGEgcHVibGljIGNvbnN0cnVjdG9yIHdpdGggcGFyYW1ldGVycyBjb3JyZXNwb25kaW5nIGluIG51bWJlciBhbmQgdHlwZSB0byB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIGNsYXNzLiBDaGFwdGVyIDUuNS41IG9mIHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIGEgc2VydmljZSBzcGVjaWZpYyBleGNlcHRpb24gdG8gaGF2ZSBhIHB1YmxpYyBjb25zdHJ1Y3RvciB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFzIHRoZXJlIGFyZSBnZXR0ZXIgbWV0aG9kcywgYW5kIG9mIG1hdGNoaW5nIGRhdGEgdHlwZXMsIG90aGVyd2lzZSBhIEpBWC1SUEMgMS4xIGNvbXBsaWFudCBXZWIgc2VydmljZSBlbmdpbmUgbWF5IGJlIHVuYWJsZSB0byBjb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgdGhlIGV4Y2VwdGlvbiBkdXJpbmcgZGVzZXJpYWxpemF0aW9uIG9mIGEgZmF1bHQgbWVzc2FnZS4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMDU9VGhlIG1ldGhvZCAiezB9IiBvbiB0aGUgc2VydmljZSBjbGFzcyAiezF9IiB1c2VzIGEgZGF0YSB0eXBlLCAiezJ9IiwgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uIEluc3RhbmNlcyBvZiB0aGUgdHlwZSBtYXkgbm90IHNlcmlhbGl6ZSBvciBkZXNlcmlhbGl6ZSBjb3JyZWN0bHkuIExvc3Mgb2YgZGF0YSBvciBjb21wbGV0ZSBmYWlsdXJlIG9mIHRoZSBXZWIgc2VydmljZSBtYXkgcmVzdWx0LgotTVNHX0pBWFJQQzExX1JVTEVfMDAwNj1UaGUgZmllbGQgb3IgcHJvcGVydHkgInswfSIgb24gdGhlIHZhbHVlIHR5cGUgInsxfSIgdXNlZCB2aWEgdGhlIHNlcnZpY2UgY2xhc3MgInsyfSIgaGFzIGEgZGF0YSB0eXBlLCAiezN9IiwgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uLiBJbnN0YW5jZXMgb2YgdGhlIHR5cGUgbWF5IG5vdCBzZXJpYWxpemUgb3IgZGVzZXJpYWxpemUgY29ycmVjdGx5LiBMb3NzIG9mIGRhdGEgb3IgY29tcGxldGUgZmFpbHVyZSBvZiB0aGUgV2ViIHNlcnZpY2UgbWF5IHJlc3VsdC4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMDc9VGhlIHByaW1pdGl2ZSB0eXBlICJ7MH0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24uIEFzIHN0YXRlZCBpbiBjaGFwdGVyIDUuMS4xIG9mIHRoZSBzcGVjaWZpY2F0aW9uLCB0aGUgc3VwcG9ydGVkIHByaW1pdGl2ZSB0eXBlcyBhcmUgImJvb2xlYW4iLCAiYnl0ZSIsICJzaG9ydCIsICJpbnQiLCAibG9uZyIsICJmbG9hdCIgYW5kICJkb3VibGUiLgotTVNHX0pBWFJQQzExX1JVTEVfMDAwOD1UaGUgd3JhcHBlciB0eXBlICJ7MH0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24uIEFzIHN0YXRlZCBpbiBjaGFwdGVyIDUuMS4xIG9mIHRoZSBzcGVjaWZpY2F0aW9uLCB0aGUgc3VwcG9ydGVkIHdyYXBwZXIgdHlwZXMgYXJlIHRob3NlIGNvcnJlc3BvbmRpbmcgdG8gImJvb2xlYW4iLCAiYnl0ZSIsICJzaG9ydCIsICJpbnQiLCAibG9uZyIsICJmbG9hdCIgYW5kICJkb3VibGUiLgotTVNHX0pBWFJQQzExX1JVTEVfMDAwOT1UaGUgSmF2YSB0eXBlICJ7MH0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24uIEFzIHN0YXRlZCBpbiBjaGFwdGVyIDUuMS4zIG9mIHRoZSBzcGVjaWZpY2F0aW9uLCB0aGUgc3VwcG9ydGVkIHN0YW5kYXJkIHR5cGVzIGFyZSAiamF2YS5sYW5nLlN0cmluZyIsICJqYXZhLnV0aWwuRGF0ZSIsICJqYXZhLnV0aWwuQ2FsZW5kYXIiLCAiamF2YS5tYXRoLkJpZ0ludGVnZXIiLCAiamF2YS5tYXRoLkJpZ0RlY2ltYWwiLCAiamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSIgYW5kICJqYXZhLm5ldC5VUkkiLgotTVNHX0pBWFJQQzExX1JVTEVfMDAxMD1TdXBwb3J0IGZvciBjb2xsZWN0aW9uIGFuZCBtYXAgY2xhc3NlcyBzdWNoIGFzICJ7MH0iIGlzIG5vdCByZXF1aXJlZCBieSBKQVgtUlBDIDEuMS4gRHVlIHRvIHRoZWlyIG5vbi10eXBlIHNhZmUgbmF0dXJlLCBhIEpBWC1SUEMgMS4xIGNvbXBsaWFudCBXZWIgc2VydmljZSBlbmdpbmUgbWF5IG5vdCBoYW5kbGUgY29sbGVjdGlvbnMsIG9yIG1heSByZXByZXNlbnQgdGhlbSBpbiBXU0RMIGRvY3VtZW50cyBhbmQgU09BUCBtZXNzYWdlcyBpbiBhIG1hbm5lciB0aGF0IGltcGFpcnMgaW50ZXJvcGVyYWJpbGl0eS4gVGhlIHVzZSBvZiBhcnJheXMgaW5zdGVhZCBvZiBjb2xsZWN0aW9ucyBpcyBzdHJvbmdseSByZWNvbW1lbmRlZC4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvV1NQbHVnaW5NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9XU1BsdWdpbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyOTU3OTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9XU1BsdWdpbk1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjAgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKiAyMDA2MDYwNyAgIDE0NTYwNCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NQbHVnaW5NZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFdTUGx1Z2luTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9TRVJWRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQU5ZX0ZJTFRFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFOWV9GSUxURVJfREVTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFUlJPUl9TRUxFQ1RJT05fVFJBTlNGT1JNOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9OT1RfQ09NUExJQU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9VTlJFU09MVkVEX0NMQVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9VTlJFU09MVkVEX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDAyOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwNDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDA1OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwNzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDA4OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAxMDsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFdTUGx1Z2luTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbWFuZC9OdWxsU3RhdHVzTW9uaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL051bGxTdGF0dXNNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1YWI3ZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL051bGxTdGF0dXNNb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbWFuZDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci0KLS8qKgotKiBBIE51bGxTdGF0dXNSZW5kZXJlciB0aHJvd3MgYXdheSBJU3RhdHVzIGluZm9ybWF0aW9uLgotKi8KLXB1YmxpYyBjbGFzcyBOdWxsU3RhdHVzTW9uaXRvciBpbXBsZW1lbnRzIFN0YXR1c01vbml0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiByZXN1bHQ7Ci0KLSAgLyoqCi0gICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgKi8KLSAgcHVibGljIE51bGxTdGF0dXNNb25pdG9yICgpICB7fQotICAvKioKLSAgKiBEb2VzIG5vdGhpbmcuCi0gICovCi0gIHB1YmxpYyBpbnQgcmVwb3J0U3RhdHVzKElTdGF0dXMgc3RhdHVzLCBWZWN0b3Igb3B0aW9ucykgeyByZXR1cm4gMDsgfQotICBwdWJsaWMgYm9vbGVhbiByZXBvcnRTdGF0dXMoSVN0YXR1cyBzdGF0dXMpIAotICB7IAotICAgIHN3aXRjaCAoc3RhdHVzLmdldFNldmVyaXR5KCkpCi0gICAgewotICAgICAgY2FzZSBJU3RhdHVzLkVSUk9SOgotICAgICAgY2FzZSBJU3RhdHVzLldBUk5JTkc6Ci0gICAgICAJCXJlc3VsdCA9IGZhbHNlOwotICAgICAgCQlicmVhazsKLQkgIGNhc2UgSVN0YXR1cy5JTkZPOgotICAgICAgZGVmYXVsdDogLy9JU3RhdHVzLk9LCi0gICAgICAJCXJlc3VsdCA9IHRydWU7IAotICAgICAgCQlicmVhazsKLSAgICAgfQotIAlyZXR1cm4gcmVzdWx0OwotICB9Ci0gIHB1YmxpYyB2b2lkIGR1bXBTYXZlZFN0YXR1cygpIHsgfQotICBwdWJsaWMgYm9vbGVhbiBjYW5Db250aW51ZSgpIAotICB7IAotCXJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXNldCAoKSB7Ci0gIAkJcmVzdWx0ID0gdHJ1ZTsKLSAgCX0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL1N0YXR1c01vbml0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbWFuZC9TdGF0dXNNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YWM4MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL1N0YXR1c01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tYW5kOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLQotLyoqCi0qIEEgU3RhdHVzTW9uaXRvciByZXBvcnRzIElTdGF0dXMgaW5mb3JtYXRpb24gdG8gYSBkaXNwbGF5IHN5c3RlbS4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIFN0YXR1c01vbml0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiByZXBvcnRzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gc3RhdHVzIG9iamVjdC4KLSAgKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHJlcG9ydAotICAqIElTdGF0dXMgaW5mb3JtYXRpb24gdG8gYSBnaXZlbiBkaXNwbGF5IHN5c3RlbSwKLSAgKiBzdWNoIGFzIFNXVCwgdGhlIGNvbW1hbmQgbGluZSwgb3IgYSB0cmFjZSBmaWxlLgotICAqLwotICBwdWJsaWMgaW50IHJlcG9ydFN0YXR1cyhJU3RhdHVzIHN0YXR1cywgVmVjdG9yIG9wdGlvbnMpOwotICBwdWJsaWMgYm9vbGVhbiByZXBvcnRTdGF0dXMoSVN0YXR1cyBzdGF0dXMpOwotICBwdWJsaWMgdm9pZCBkdW1wU2F2ZWRTdGF0dXMoKTsKLSAgcHVibGljIGJvb2xlYW4gY2FuQ29udGludWUoKTsKLSAgcHVibGljIHZvaWQgcmVzZXQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbWFuZC9TdGF0dXNSZW5kZXJlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL1N0YXR1c1JlbmRlcmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZmYzYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tYW5kL1N0YXR1c1JlbmRlcmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLQotLyoqCi0qIEEgU3RhdHVzUmVuZGVyZXIgcmVuZGVycyBJU3RhdHVzIGluZm9ybWF0aW9uIHRvIGEgZGlzcGxheSBzeXN0ZW0uCi0qLwotcHVibGljIGludGVyZmFjZSBTdGF0dXNSZW5kZXJlcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFJlbmRlcnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBzdGF0dXMgb2JqZWN0LgotICAqIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcmVuZGVyCi0gICogSVN0YXR1cyBpbmZvcm1hdGlvbiB0byBhIGdpdmVuIGRpc3BsYXkgc3lzdGVtLAotICAqIHN1Y2ggYXMgU1dULCB0aGUgY29tbWFuZCBsaW5lLCBvciBhIHRyYWNlIGZpbGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHJlbmRlciAoIElTdGF0dXMgc3RhdHVzICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9BbnlGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0FueUZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWE4ZjE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0FueUZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotCi0vKioKLSogVGhpcyBpcyBhIGtpbmQgb2Yge0BsaW5rIEZpbHRlcn0gdGhhdCBhY2NlcHRzIGFsbCBvYmplY3RzLAotKiBhbmQgaXMgYSBzdWl0YWJsZSBiYXNlIGNsYXNzIGZvciBuZXcgPGNvZGU+RmlsdGVyczwvY29kZT4uCi0qLwotcHVibGljIGNsYXNzIEFueUZpbHRlciBpbXBsZW1lbnRzIEZpbHRlcgotewotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+QW55RmlsdGVyPC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIEFueUZpbHRlciAoKQotICB7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgbmFtZSBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0gIHsKLSAgICByZXR1cm4gV1NQbHVnaW5NZXNzYWdlcy5BTllfRklMVEVSX05BTUU7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpCi0gIHsKLSAgICByZXR1cm4gV1NQbHVnaW5NZXNzYWdlcy5BTllfRklMVEVSX0RFU0M7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30KLSAgKiBkZXNjcmliaW5nIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+J3MgYXNzZXNzbWVudCBvZgotICAqIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqIFNlZSB7QGxpbmsgRmlsdGVyI3N0YXR1c09mfSBmb3IgZ2VuZXJhbCBjb21tZW50cy4KLSAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5BbnlGaWx0ZXI8L2NvZGU+Ci0gICogcmV0dXJucyBhIHN0YXR1cyB3aXRoIHNldmVyaXR5IDxjb2RlPklTdGF0dXMuT0s8L2NvZGU+LgotICAqIFN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlLgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBBbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9LgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBzdGF0dXNPZiAoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5PSyxXZWJTZXJ2aWNlUGx1Z2luLklELDAsIiIsbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYge0BsaW5rICNzdGF0dXNPZn0gcmV0dXJucwotICAqIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30gd2l0aCBhCi0gICogc2V2ZXJpdHkgb2YgbGVzcyB0aGFuIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+LgotICAqIFN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlIHRvIHByb3ZpZGUgYSBoaWdoZXItcGVyZm9ybWFuY2UKLSAgKiBpbXBsZW1lbnRhdGlvbi4KLSAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZmlsdGVyLgotICAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB7QGxpbmsgI3N0YXR1c09mfSByZXR1cm5zCi0gICogYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfSB3aXRoIGEKLSAgKiBzZXZlcml0eSBvZiBsZXNzIHRoYW4gPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGFjY2VwdHMgKCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIHJldHVybiAhc3RhdHVzT2Yob2JqZWN0KS5tYXRjaGVzKElTdGF0dXMuRVJST1IpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9GaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0ZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Njg3NmZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0ZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotCi0vKioKLSogVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciBhIGNsYXNzIG9mIG9iamVjdHMgdGhhdCBmaWx0ZXIKLSogb3RoZXIgb2JqZWN0cyBmb3IgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBieSBzb21lIGNvbnN1bWVyLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgRmlsdGVyCi17Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfQotICAqIGRlc2NyaWJpbmcgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4ncyBhc3Nlc3NtZW50IG9mCi0gICogdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICogVGhlIHNldmVyaXR5IG9mIHRoZQotICAqIHJldHVybmVkIDxjb2RlPklTdGF0dXM8L2NvZGU+IGlzIGFzIGZvbGxvd3M6Ci0gICogPHVsPgotICAqIDxsaT4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjT0t9Ci0gICogaWYgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4gYWNjZXB0cyB0aGUgPGNvZGU+b2JqZWN0PC9jb2RlPgotICAqIHdpdGggbm8gZnVydGhlciBpbmZvcm1hdGlvbiBmb3IgdGhlIGNhbGxlciAobWVhbmluZyB0aGUKLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjZ2V0TWVzc2FnZX0gYW5kCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldEV4Y2VwdGlvbn0gbWV0aG9kcwotICAqIGFyZSBpZ25vcmVkKS4KLSAgKiA8bGk+Ci0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI0lORk99Ci0gICogaWYgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4gYWNjZXB0cyB0aGUgPGNvZGU+b2JqZWN0PC9jb2RlPgotICAqIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGJlIGF2YWlsYWJsZSBmcm9tIHRoZQotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRNZXNzYWdlfSBhbmQKLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjZ2V0RXhjZXB0aW9ufSBtZXRob2RzLgotICAqIDxsaT4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjV0FSTklOR30KLSAgKiBpZiB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPiBhY2NlcHRzIHRoZSA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGJlIGF2YWlsYWJsZSBmcm9tIHRoZQotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRNZXNzYWdlfSBhbmQKLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjZ2V0RXhjZXB0aW9ufSBtZXRob2RzLgotICAqIDxsaT4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjRVJST1J9Ci0gICogaWYgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4gZG9lcyBub3QgYWNjZXB0IHRoZSA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGJlIGF2YWlsYWJsZSBmcm9tIHRoZQotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRNZXNzYWdlfSBhbmQKLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjZ2V0RXhjZXB0aW9ufSBtZXRob2RzLgotICAqIDwvdWw+Ci0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIEFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30KLSAgKiBkZXNjcmliaW5nIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+J3MgYXNzZXNzbWVudCBvZgotICAqIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBzdGF0dXNPZiAoIE9iamVjdCBvYmplY3QgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyA8Y29kZT5GaWx0ZXI8L2NvZGU+Ci0gICogYWNjZXB0cyB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4gVGhpcyBtZXRob2QKLSAgKiBtdXN0IHJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIHtAbGluayAjc3RhdHVzT2Z9Ci0gICogcmV0dXJucyBhbiA8Y29kZT5JU3RhdHVzPC9jb2RlPiB3aXRoIGEgc2V2ZXJpdHkgb2YKLSAgKiBsZXNzIHRoYW4gPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4uCi0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyA8Y29kZT5GaWx0ZXI8L2NvZGU+Ci0gICogYWNjZXB0cyB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyAoIE9iamVjdCBvYmplY3QgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0lQcm9qZWN0VG9TdHJpbmdUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSVByb2plY3RUb1N0cmluZ1RyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMDYxZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSVByb2plY3RUb1N0cmluZ1RyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLQotCi0vKioKLSAqIFRyYW5zZnJvbXMgYSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2plY3QgdG8gamF2YS5sYW5nLlN0cmluZwotICovCi1wdWJsaWMgY2xhc3MgSVByb2plY3RUb1N0cmluZ1RyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIgewotCQotCSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotCSAgewotCSAgCUlQcm9qZWN0IHByb2plY3QgPSAoSVByb2plY3QpdmFsdWU7Ci0JICAgIHJldHVybiBwcm9qZWN0LmdldE5hbWUoKTsKLQkgIH0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0oyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjQ1M2U1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0oyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNTU3NCB6aW5hQGNhLmlibS5jb20gLSBaaW5hIE1vc3RhZmlhCi0gKiAyMDA2MDIyMiAgIDIyNTU3NCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1heSA4LCAyMDA0Ci0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKi8KLXB1YmxpYyBjbGFzcyBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkgewotCQotIAkKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFVSSShTZXJ2aWNlSW1wbCBzZXJ2aWNlSW1wbCkKLSAgewotICAJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gc2VydmljZUltcGwuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAJU3RyaW5nIGxvY2F0aW9uID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOwotICAJCi0gIAlyZXR1cm4gbG9jYXRpb247Ci0gIH0KLSAgIAotICAvL2hhcyB0byBiZSB1bmRlciB0aGUgd2ViY29udGVudAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFSkJfTU9EVUxFID0gImVqYk1vZHVsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFQUENMSUVOVF9NT0RVTEUgPSAiYXBwQ2xpZW50TW9kdWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0VCX01PRFVMRSA9ICJXZWJDb250ZW50IjsKLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0RMVVJJKFNlcnZpY2VSZWYgc2VydmljZUltcGwpCi0gIHsKLSAgCSBTdHJpbmcgbW9kdWxlUm9vdCA9IG51bGw7Ci0JIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZUltcGwpOwotCSBpZihKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdCkpCi0JIHsKLQkgICBtb2R1bGVSb290ID0gV0VCX01PRFVMRTsKLQkgfQotICAgICBlbHNlIGlmIChKMkVFVXRpbHMuaXNFSkJDb21wb25lbnQocHJvamVjdCkpCi0JIHsKLQkgICBtb2R1bGVSb290ID0gRUpCX01PRFVMRTsKLQkgfQotCSBlbHNlIGlmIChKMkVFVXRpbHMuaXNBcHBDbGllbnRDb21wb25lbnQocHJvamVjdCkpCi0JIHsKLQkgICBtb2R1bGVSb290ID0gQVBQQ0xJRU5UX01PRFVMRTsKLQkgfQotCSBJUGF0aCBwYXRoID0gcHJvamVjdC5nZXRMb2NhdGlvbigpLmFkZFRyYWlsaW5nU2VwYXJhdG9yKCk7Ci0JIHBhdGggPSBwYXRoLmFwcGVuZChtb2R1bGVSb290KS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpOwotCSBwYXRoID0gcGF0aC5hcHBlbmQoc2VydmljZUltcGwuZ2V0V3NkbEZpbGUoKSk7Ci0JIEZpbGUgZmlsZSA9IG5ldyBGaWxlKHBhdGgudG9TdHJpbmcoKSk7Ci0JIHRyeXsKLQkgICBVUkwgdXJsID0gZmlsZS50b1VSTCgpOwotCSAgIHJldHVybiB1cmwudG9TdHJpbmcoKTsKLQkgfWNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKXtyZXR1cm4gbnVsbDt9Ci0JIAotICAKLQkgIAotCQotIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTRExVUkkoV1NETFJlc291cmNlSW1wbCB3c2RsUkkpCi0gIHsKLSAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxSSS5nZXREZWZpbml0aW9uKCk7Ci0gIAlTdHJpbmcgbG9jYXRpb24gPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0gIAkKLSAgCXJldHVybiBsb2NhdGlvbjsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NJTFBhdGgoV1NETFJlc291cmNlSW1wbCB3c2RsUkkpCi0gIHsKLSAgCXJldHVybiBjb252ZXJ0VG9SZWxhdGl2ZShnZXRXU0RMVVJJKHdzZGxSSSkpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0lMUGF0aChTZXJ2aWNlUmVmIHNlcnZpY2VJbXBsKQotICB7Ci0gIAlyZXR1cm4gY29udmVydFRvUmVsYXRpdmUoZ2V0V1NETFVSSShzZXJ2aWNlSW1wbCkpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0lMUGF0aChTZXJ2aWNlSW1wbCBzZXJ2aWNlSW1wbCkKLSAgewotICAJcmV0dXJuIGNvbnZlcnRUb1JlbGF0aXZlKGdldFdTRExVUkkoc2VydmljZUltcGwpKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRklMRT0iZmlsZTovIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRklMRUw9ImZpbGU6IjsgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbnZlcnRUb1JlbGF0aXZlKFN0cmluZyB1cmkpCi0gIHsKLSAgCS8vcmVtb3ZlIGZpbGU6Ci0gIAlTdHJpbmcgcm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotICAgIHJvb3QgPSBGSUxFICsgcm9vdDsKLSAgCVN0cmluZyByb290TCA9IEZJTEVMICsgcm9vdDsKLSAgICBpZih1cmkuc3RhcnRzV2l0aChyb290KSB8fCB1cmkuc3RhcnRzV2l0aChyb290TCkpewotICAgICAgcmV0dXJuIHVyaS5zdWJzdHJpbmcocm9vdC5sZW5ndGgoKSk7ICAJCi0gICAgfQotICAgIHJldHVybiB1cmk7Ci0gIH0KLQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0oyRUVVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSjJFRVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MzE3YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSjJFRVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwNCAgMTI0MTQzICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAKLSAqIDIwMDYwMzI5ICAgMTI4MDY5IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MDMgICAxMjY4MTkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUyNCAgIDEzMTEzMiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDcwNzIzICAgMTk0NDM0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBDaGVjayBmb3Igbm9uLWV4aXN0aW5nIEVBUiB3aXRoIGNvbnRlbnQgbm90IGRlbGV0ZWQKLSAqIDIwMDcxMjE4CSAgMjAwMTkzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDcxMjIxICAgMjEzNzI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDEyMyAgIDIxNjM0NSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDIxMiAgIDIwODc5NSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBXUyB3aXphcmQgZnJhbWV3b3JrIHNob3VsZCBzdXBwb3J0IEVKQiAzLjAKLSAqIDIwMDgwMjI5ICAgMjE4Njk2IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEFQSXMgdXNpbmcgRUpCQXJ0aWZhY3RFZGl0IG5vdCBhYmxlIHRvIGRlYWwgd2l0aCBzb21lIEVKQiAzLjAgYmVhbnMgcHJvcGVybHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLklKb2JNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwubG9nZ2VyLnByb3h5LkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcHBsaWNhdGlvbi5pbnRlcm5hbC5vcGVyYXRpb25zLkFkZENvbXBvbmVudFRvRW50ZXJwcmlzZUFwcGxpY2F0aW9uRGF0YU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuY29tbW9uYXJjaGl2ZWNvcmUuaW50ZXJuYWwuaGVscGVycy5BcmNoaXZlTWFuaWZlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQkphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5TZXNzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5TZXNzaW9uVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuY29tcG9uZW50Y29yZS51dGlsLkVKQkFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5KMkVFVmVyc2lvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5jb21tb24uSjJFRVZlcnNpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLmNvbW1vbi5jbGFzc3BhdGguSjJFRUNvbXBvbmVudENsYXNzcGF0aFVwZGF0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucGx1Z2luLklKMkVFTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnByb2plY3QuSjJFRVByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuSU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUubW9kZWwuTW9kZWxQcm92aWRlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5mYWNldC5JSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuZmFjZXQuSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmVqYi5FbnRlcnByaXNlQmVhbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS5lamIuU2Vzc2lvbkJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Db21wb25lbnRDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Nb2R1bGVDb3JlTmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5kYXRhbW9kZWwucHJvcGVydGllcy5JQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLm9wZXJhdGlvbi5DcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLnV0aWwuQ29tcG9uZW50VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5pbnRlcm5hbC51dGlsLklNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuRGF0YU1vZGVsRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLklEYXRhTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmludGVybmFsLm9wZXJhdGlvbnMuUHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvdmlkZXJOZXc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgc29tZSB1c2VmdWwgSjJFRSB1dGlsaXRpZXMgZm9yIFdlYiBzZXJ2aWNlcyBpbnRlcm5hbCB1c2UuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBKMkVFVXRpbHMgewotCQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdFQiA9IDE7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRUpCID0gMjsKLQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBBUFBDTElFTlQgPSA0OwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEVBUiA9IDg7CQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gSVZpcnR1YWxDb21wb25lbnQKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50IGdldFZpcnR1YWxDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCl7Ci0JCXJldHVybiBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3ROYW1lCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0VmlydHVhbENvbXBvbmVudChTdHJpbmcgcHJvamVjdE5hbWUpewotCQlJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQkJaWYgKHByb2plY3ROYW1lIT1udWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpID4gMCApCi0gICAgICBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCi0JCXJldHVybiBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQl9Ci0JCi0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKMkVFIHZlcnNpb24KLQkgKiBAcGFyYW0gcCBwcm9qZWN0Ci0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRKMkVFVmVyc2lvbihJUHJvamVjdCBwKXsKLQkJCi0JCVN0cmluZyB2ZXIgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFZlcnNpb24ocCk7Ci0JCXJldHVybiBKMkVFVmVyc2lvblV0aWwuY29udmVydFZlcnNpb25TdHJpbmdUb0ludCh2ZXIpOwotCi0JCS8qCi0JCWludCBqMmVlVmVyID0gLTE7Ci0JCXRyeSB7Ci0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwKTsKLSAgICAgICAgICBpZiAodmMhPW51bGwpewotICAgICAgICAgICAgajJlZVZlciA9IGdldEoyRUVWZXJzaW9uKHZjKTsKLSAgICAgICAgICB9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCXJldHVybiBqMmVlVmVyOwotCQkqLwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGludCBnZXRKMkVFVmVyc2lvbihJVmlydHVhbENvbXBvbmVudCBjaCl7Ci0gICAgICBpbnQgajJlZVZlciA9IC0xOwotICAgICAgLy9jaGVjayB0eXBlCi0gICAgICBpZiAoY2ghPW51bGwpewotICAgIAkgIElQcm9qZWN0IHByb2plY3QgPSBjaC5nZXRQcm9qZWN0KCk7Ci0gICAgCSAgajJlZVZlciA9IGdldEoyRUVWZXJzaW9uKHByb2plY3QpOwotICAgICAgfQotICAgICAgCi0gICAgICAvKiAgVXNlIG5ldyBBUEkgcHJvdmlkZWQgYnkgSjJFRSAKLSAgICAgIGlmIChjaCE9bnVsbCkgewotICAgICAgICBpZiAoaXNXZWJDb21wb25lbnQoY2gpKQotICAgICAgICAgIGoyZWVWZXIgPSBnZXRXZWJDb21wb25lbnRKMkVFVmVyc2lvbihjaCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzQXBwQ2xpZW50Q29tcG9uZW50KGNoKSkKLSAgICAgICAgICBqMmVlVmVyID0gZ2V0QXBwQ2xpZW50Q29tcG9uZW50SjJFRVZlcnNpb24oY2gpOwotICAgICAgICBlbHNlIGlmIChpc0VKQkNvbXBvbmVudChjaCkpCi0gICAgICAgICAgajJlZVZlciA9IGdldEVKQkNvbXBvbmVudEoyRUVWZXJzaW9uKGNoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNFQVJDb21wb25lbnQoY2gpKQotICAgICAgICAgIGoyZWVWZXIgPSBnZXRFQVJDb21wb25lbnRKMkVFVmVyc2lvbihjaCk7Ci0gICAgICB9Ci0gICAgICAqLwotICAgICAgCi0gICAgICByZXR1cm4gajJlZVZlcjsgCi0JfQotCQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSjJFRVZlcnNpb24KLQkgKiBAcGFyYW0gcCBJUHJvamVjdAotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SjJFRVZlcnNpb25Bc1N0cmluZyhJUHJvamVjdCBwKXsKLQkJCi0JCVN0cmluZyB2ZXIgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFZlcnNpb24ocCk7Ci0JCXJldHVybiAgdmVyICE9IG51bGwgPyB2ZXIgOiBudWxsOwotCQkgCi0JCS8qCi0JCWludCBqMmVlVmVyID0gZ2V0SjJFRVZlcnNpb24ocCk7Ci0JCWlmIChqMmVlVmVyIT0tMSl7Ci0JCQlyZXR1cm4gSjJFRVZlcnNpb25VdGlsLmdldEoyRUVUZXh0VmVyc2lvbihqMmVlVmVyKTsKLQkJfQotCQllbHNlIAotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQkqLwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0QWxsQ29tcG9uZW50cygpewotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0c1tpXSk7Ci0gICAgICAgICAgaWYodmMgIT0gbnVsbCkKLSAgICAgICAgCSAgdi5hZGQodmMpOwotICAgICAgICAgIH0KLQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYWxsIHRoZSBFQVIgY29tcG9uZW50cyBpbiB0aGUgd29ya3NwYWNlCi0JICogQHJldHVybiBJVmlydHVhbENvbXBvbmVudFtdOyBlbXB0eSBpZiBub25lCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldEFsbEVBUkNvbXBvbmVudHMoKSB7Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXRyeSB7Ci0JCQkJSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzID0gZ2V0RUFSQ29tcG9uZW50c0Zyb21Qcm9qZWN0KHByb2plY3RzW2ldKTsKLQkJCQlmb3IgKGludCBqPTA7IGo8Y29tcG9uZW50cy5sZW5ndGg7IGorKykgewotCQkJCQlpZiAoY29tcG9uZW50c1tqXSE9bnVsbCkKLQkJCQkJCXYuYWRkKGNvbXBvbmVudHNbal0pOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJCX0KLQotCQl9Ci0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldEFsbFdlYkNvbXBvbmVudHMoKXsKLQkJTGlzdCB2ID0gbmV3IEFycmF5TGlzdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQkJCQlJVmlydHVhbENvbXBvbmVudFtdIGNvbXBvbmVudHMgPSBnZXRXZWJDb21wb25lbnRzKHByb2plY3RzW2ldKTsKLQkJCQlmb3IgKGludCBqPTA7IGo8Y29tcG9uZW50cy5sZW5ndGg7IGorKykgewotCQkJCQlpZiAoY29tcG9uZW50c1tqXSE9bnVsbCkKLQkJCQkJCXYuYWRkKGNvbXBvbmVudHNbal0pOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJCX0KLQotCQl9Ci0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsJCQotCX0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0QWxsRUpCQ29tcG9uZW50cygpewotICAgICAgICBMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0cygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIElWaXJ0dWFsQ29tcG9uZW50W10gY29tcG9uZW50cyA9IGdldEVKQkNvbXBvbmVudHMocHJvamVjdHNbaV0pOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxjb21wb25lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzW2pdIT1udWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgdi5hZGQoY29tcG9uZW50c1tqXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIC8vaGFuZGxlIGV4Y2VwdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOyAgICAgICAgCi0gICAgfSAgICAKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBFQVIgY29tcG9uZW50cyBpbiBhIGdpdmVuIElQcm9qZWN0Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuIGVtcHR5IGlmIG5vIEVBUiBjb21wb25lbnRzOyBtdXN0IG5vdCByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRFQVJDb21wb25lbnRzRnJvbVByb2plY3QoSVByb2plY3QgcHJvamVjdCl7Ci0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsJCQotCQl0cnkgewotCQkJSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCQlpZiAoY29tcG9uZW50ICE9IG51bGwgJiYgaXNFQVJDb21wb25lbnQoY29tcG9uZW50KSl7Ci0JCQkJdi5hZGQoY29tcG9uZW50KTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJLy9oYW5kbGUgZXhjZXB0aW9uCi0JCX0KLQkJCi0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBXZWIgY29tcG9uZW50cyBpbiBhIHByb2plY3QKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4gZW1wdHkgYXJyYXkgaWYgbm8gd2ViIGNvbXBvbmVudHM7IG11c3Qgbm90IHJldHVybiBudWxsCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFdlYkNvbXBvbmVudHMoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQkvL2dldCBhbGwgY29tcG9uZW50cyBpbiB0aGUgcHJvamVjdAotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXRyeSB7Ci0JCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCQotCQkJCWlmIChjb21wb25lbnQgIT0gbnVsbCAmJiBpc1dlYkNvbXBvbmVudChjb21wb25lbnQpKXsKLQkJCQkJdi5hZGQoY29tcG9uZW50KTsKLQkJCQl9CQkKLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwotCX0gCi0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRXZWJDb21wb25lbnROYW1lcyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MgPSBnZXRXZWJDb21wb25lbnRzKHByb2plY3QpOwotCQlyZXR1cm4gdG9Db21wb25lbnROYW1lc0FycmF5KHZjcyk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0RUFSQ29tcG9uZW50TmFtZXMoSVByb2plY3QgcHJvamVjdCl7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50W10gdmNzID0gZ2V0RUFSQ29tcG9uZW50c0Zyb21Qcm9qZWN0KHByb2plY3QpOwotCQlyZXR1cm4gdG9Db21wb25lbnROYW1lc0FycmF5KHZjcyk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYWxsIGNvbXBvbmVudHMgb2YgdHlwZSwgY29tcG9uZW50VHlwZSBpbiB0aGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEBwYXJhbSBjb21wb25lbnRUeXBlIGkuZS4gSjJFRVV0aWxzLldFQgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0Q29tcG9uZW50c0J5VHlwZShJUHJvamVjdCBwcm9qZWN0LCBpbnQgY29tcG9uZW50VHlwZSl7Ci0JCQotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmICggKFdFQiAmIGNvbXBvbmVudFR5cGUpPT1XRUIgKXsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gd2ViVkMgPSBnZXRXZWJDb21wb25lbnRzKHByb2plY3QpOwotCQkJYWRkVG9BcnJheUxpc3RIZWxwZXIod2ViVkMsIHYpOwotCQl9Ci0JCWlmICggKEVKQiAmIGNvbXBvbmVudFR5cGUpPT1FSkIgKXsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gZWpiVkMgPSBnZXRFSkJDb21wb25lbnRzKHByb2plY3QpOwotCQkJYWRkVG9BcnJheUxpc3RIZWxwZXIoZWpiVkMsIHYpOwotCQl9Ci0JCWlmICggKEFQUENMSUVOVCAmIGNvbXBvbmVudFR5cGUpPT1BUFBDTElFTlQgKSB7Ci0JCQlJVmlydHVhbENvbXBvbmVudFtdIGFwcENsaWVudFZDID0gZ2V0QXBwQ2xpZW50Q29tcG9uZW50cyhwcm9qZWN0KTsKLQkJCWFkZFRvQXJyYXlMaXN0SGVscGVyKGFwcENsaWVudFZDLCB2KTsKLQkJfQotCQlpZiAoIChFQVIgJiBjb21wb25lbnRUeXBlKT09RUFSICkgewotCQkJSVZpcnR1YWxDb21wb25lbnRbXSBlYXJWQyA9IGdldEVBUkNvbXBvbmVudHNGcm9tUHJvamVjdChwcm9qZWN0KTsKLQkJCWFkZFRvQXJyYXlMaXN0SGVscGVyKGVhclZDLCB2KTsKLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwkJCi0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYWxsIGNvbXBvbmVudHMgb2YgdHlwZSwgY29tcG9uZW50VHlwZSBpbiB0aGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEBwYXJhbSBjb21wb25lbnRUeXBlSWQgYXMgZGVmaW5lZCBpbiBJTW9kdWxlQ29uc3RhbnRzLgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0Q29tcG9uZW50c0J5VHlwZShJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgY29tcG9uZW50VHlwZUlkKXsKLQkJCi0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0IG9mIHR5cGUgY29tcG9uZW50VHlwZUlkCi0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsJCi0JCQlpZiAoIHZjICE9IG51bGwgJiYgSjJFRVByb2plY3RVdGlsaXRpZXMuaXNQcm9qZWN0T2ZUeXBlKHByb2plY3QsY29tcG9uZW50VHlwZUlkKSkKLQkJCXsKLQkJCQl2LmFkZCh2Yyk7Ci0JCQl9Ci0JCQkvL2lmIChpc1dlYkNvbXBvbmVudChwcm9qZWN0LCBjb21wb25lbnRzW2ldLmdldE5hbWUoKSkpewotCQkJCS8vdi5hZGQoY29tcG9uZW50c1tpXSk7Ci0JCQkvL30JCQotCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UHJvamVjdHNDb250YWluaW5nQ29tcG9uZW50T2ZUeXBlKFN0cmluZyBjb21wb25lbnRUeXBlSWQpCi0JewotCSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsgCi0JICAgIElWaXJ0dWFsQ29tcG9uZW50W10gY29tcHMgPSBnZXRBbGxDb21wb25lbnRzKCk7Ci0JICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcHMubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChKMkVFUHJvamVjdFV0aWxpdGllcy5pc1Byb2plY3RPZlR5cGUoY29tcHNbaV0uZ2V0UHJvamVjdCgpLGNvbXBvbmVudFR5cGVJZCkpCi0JCQl7Ci0JCQkJLy9BZGQgdGhlIHByb2plY3QgbmFtZSB0byB0aGUgdmVjdG9yIGlmIGl0IGhhcyBub3QgYmVlbiBhZGRlZCBhbHJlYWR5Ci0JCQkJU3RyaW5nIG5hbWUgPSBjb21wc1tpXS5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpOwotCQkJCWlmICghdi5jb250YWlucyhuYW1lKSkKLQkJCQl7Ci0JCQkJCXYuYWRkKG5hbWUpOwkKLQkJCQl9CQkgICAgICAgIAkJCQotCQkJfQotCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKFN0cmluZ1tdKXYudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0gICAKLQkvKioKLQkgKiBIZWxwZXIgbWV0aG9kIGZvciBnZXRDb21wb25lbnRzQnlUeXBlCi0JICogQHBhcmFtIHZjcwotCSAqIEBwYXJhbSB2ZWN0Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRUb0FycmF5TGlzdEhlbHBlcihJVmlydHVhbENvbXBvbmVudFtdIHZjcywgTGlzdCBhbCl7Ci0JCWZvciAoaW50IGk9MDtpPHZjcy5sZW5ndGg7aSsrKXsKLQkJCWFsLmFkZCh2Y3NbaV0pOwotCQl9CQkKLQl9Ci0KLQkKLQkvKioKLQkgKiBFc3NlbnRpYWxseSwgcmV0dXJucyBhbGwgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0W10gZ2V0QWxsRmxleGlibGVQcm9qZWN0cygpewotCi0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQkJCUlQcm9qZWN0W10gcHJvamVjdHMgPSBQcm9qZWN0VXRpbGl0aWVzLmdldEFsbFByb2plY3RzKCk7Ci0JCQlmb3IoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7aSsrKSB7Ci0JCQkJaWYgKE1vZHVsZUNvcmVOYXR1cmUuZ2V0TW9kdWxlQ29yZU5hdHVyZShwcm9qZWN0c1tpXSkhPW51bGwpewotCQkJCQl2LmFkZChwcm9qZWN0c1tpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJfQotCi0JCXJldHVybiAoSVByb2plY3RbXSl2LnRvQXJyYXkobmV3IElQcm9qZWN0WzBdKTsKLQl9Ci0JCi0JCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGVyZSBleGlzdHMgYSB1bmRlcmx5aW5nIHJlc291cmNlIGJhY2tpbmcgdXAgdGhlIGNvbXBvbmVudCBhbmQgcHJvamVjdCAKLQkgKiBAcGFyYW0gcHJvamVjdE5hbWUKLQkgKiBAcGFyYW0gY29tcG9uZW50TmFtZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXhpc3RzKFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nIGNvbXBvbmVudE5hbWUpewotCQlJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQkJaWYgKHByb2plY3ROYW1lIT1udWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpID4gMCApIHsKLQkJICBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCQkKLQkJcmV0dXJuIGV4aXN0cyhwcm9qZWN0KTsKLQl9Ci0JCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGVyZSBleGlzdHMgYSB1bmRlcmx5aW5nIHJlc291cmNlIGJhY2tpbmcgdXAgdGhlIGNvbXBvbmVudCBhbmQgcHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBleGlzdHMoSVByb2plY3QgcHJvamVjdCl7Ci0JCWlmIChwcm9qZWN0IT1udWxsKSB7Ci0gICAgICAgICAgICBpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCXJldHVybiB2Yy5leGlzdHMoKTsKLQkJfQotCQllbHNlIAotCQkJcmV0dXJuIGZhbHNlOwotCQkKLQl9CQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBFQVIgY29tcG9uZW50cyB3aGljaCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgY29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFJlZmVyZW5jaW5nRUFSQ29tcG9uZW50cyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJTGlzdCBlYXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnl7Ci0JCQlJVmlydHVhbENvbXBvbmVudCB0YXJnZXRWQyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCi0JCQlJVmlydHVhbENvbXBvbmVudFtdIGVhclZDID0gZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotCQkJZm9yIChpbnQgaT0wOyBpPGVhclZDLmxlbmd0aDtpKyspIHsKLQkJCQlJVmlydHVhbFJlZmVyZW5jZVtdIHJlZnMgPSBlYXJWQ1tpXS5nZXRSZWZlcmVuY2VzKCk7Ci0JCQkJZm9yIChpbnQgaz0wO2s8cmVmcy5sZW5ndGg7aysrKSB7Ci0JCQkJCWlmICh0YXJnZXRWQy5lcXVhbHMocmVmc1trXS5nZXRSZWZlcmVuY2VkQ29tcG9uZW50KCkpKXsKLQkJCQkJCWVhcnMuYWRkKHJlZnNba10uZ2V0RW5jbG9zaW5nQ29tcG9uZW50KCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJfQotCi0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSllYXJzLnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgRUpCIENvbXBvbmVudHMgcmVmZXJlbmNlZCBieSB0aGUgZWFyCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFJlZmVyZW5jaW5nRUpCQ29tcG9uZW50c0Zyb21FQVIoSVByb2plY3QgcHJvamVjdCl7Ci0KLQkJTGlzdCBlamJDb21wcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5ewotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCUlWaXJ0dWFsUmVmZXJlbmNlW10gcmVmcyA9IHZjLmdldFJlZmVyZW5jZXMoKTsKLQkJCWZvciAoaW50IGk9MDtpPHJlZnMubGVuZ3RoO2krKyl7Ci0JCQkJaWYgKGlzRUpCQ29tcG9uZW50KHJlZnNbaV0uZ2V0UmVmZXJlbmNlZENvbXBvbmVudCgpKSl7Ci0JCQkJCWVqYkNvbXBzLmFkZChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKWVqYkNvbXBzLnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsJCQotCX0KLQotCQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBqYXIKLQkgKiBAcmV0dXJuICBWZWN0b3Igb2YgYmVhbiBTdHJpbmcgbmFtZXMuCi0JICogQGRlcHJlY2F0ZWQgdXNlIGdldEJlYW5OYW1lcyhJUHJvamVjdCBwcm9qZWN0KQotCSAqLwotCXB1YmxpYyBzdGF0aWMgVmVjdG9yIGdldEJlYW5OYW1lcyhFSkJKYXIgamFyKSB7Ci0JCS8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgU3RhdGVsZXNzIHNlc3Npb24gYmVhbnMuCi0JCS8vIExpc3QgY21wQmVhbnMgPSBqYXIuZ2V0QmVhbk1hbmFnZWRCZWFucygpOwotCQkvLyBMaXN0IGJtcEJlYW5zID0gamFyLmdldENvbnRhaW5lck1hbmFnZWRCZWFucygpOwotCQlMaXN0IHNlc3Npb25CZWFucyA9IGphci5nZXRTZXNzaW9uQmVhbnMoKTsKLQotCQlWZWN0b3IgbmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0KLQkJLy8gZ2V0QmVhbk5hbWVzKCBuYW1lcywgY21wQmVhbnMgKTsKLQkJLy8gZ2V0QmVhbk5hbWVzKCBuYW1lcywgYm1wQmVhbnMgKTsKLQkJZ2V0QmVhbk5hbWVzKG5hbWVzLCBzZXNzaW9uQmVhbnMpOwotCi0JCXJldHVybiBuYW1lczsKLQl9Ci0KLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdC0gdGhlIHByb2plY3QgdG8gZmluZCBzdGF0ZWxlc3Mgc2Vzc2lvbiBiZWFucyBpbgotCSAqIEByZXR1cm4gIFZlY3RvciBvZiBiZWFuIFN0cmluZyBuYW1lcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFZlY3RvciBnZXRCZWFuTmFtZXMoSVByb2plY3QgcHJvamVjdCkgewotCQkvLyBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IFN0YXRlbGVzcyBzZXNzaW9uIGJlYW5zLgotCQlWZWN0b3IgbmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCUlNb2RlbFByb3ZpZGVyIHByb3ZpZGVyID0gTW9kZWxQcm92aWRlck1hbmFnZXIuZ2V0TW9kZWxQcm92aWRlcihwcm9qZWN0KTsKLSAgICAJT2JqZWN0IG1vZGVsT2JqZWN0ID0gcHJvdmlkZXIuZ2V0TW9kZWxPYmplY3QoKTsKLQotICAgIAlMaXN0IHNlc3Npb25CZWFucyA9IG5ldyBWZWN0b3IoKTsKLQkJYm9vbGVhbiBpc0oyRUU1ID0gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNKRUVQcm9qZWN0KHByb2plY3QpOwotCQlpZiAoaXNKMkVFNSkgewotICAgIAkJLy9hIEpFRTUgcHJvamVjdAotICAgIAkJRW50ZXJwcmlzZUJlYW5zIGVCZWFucyA9ICgob3JnLmVjbGlwc2UuanN0LmphdmFlZS5lamIuRUpCSmFyKW1vZGVsT2JqZWN0KS5nZXRFbnRlcnByaXNlQmVhbnMoKTsKLSAgICAJCWlmIChlQmVhbnMgIT1udWxsKQotICAgIAkJCXNlc3Npb25CZWFucyA9IGVCZWFucy5nZXRTZXNzaW9uQmVhbnMoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJCXNlc3Npb25CZWFucyA9ICgoRUpCSmFyKW1vZGVsT2JqZWN0KS5nZXRTZXNzaW9uQmVhbnMoKTsKLSAgICAJfQotCi0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gc2Vzc2lvbkJlYW5zLml0ZXJhdG9yKCk7Ci0KLQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJT2JqZWN0IG5leHQgPSAoaXRlcmF0b3IubmV4dCgpKTsKLQkJCWlmIChuZXh0IGluc3RhbmNlb2YgRW50ZXJwcmlzZUJlYW4pIHsKLQkJCQlFbnRlcnByaXNlQmVhbiBiZWFuID0gKEVudGVycHJpc2VCZWFuKSBuZXh0OwotCi0JCQkJaWYgKGJlYW4uaXNTZXNzaW9uKCkpIHsKLQkJCQkJU2Vzc2lvbiBzZXNzaW9uQmVhbiA9IChTZXNzaW9uKSBiZWFuOwotCi0JCQkJCWlmIChzZXNzaW9uQmVhbi5nZXRTZXNzaW9uVHlwZSgpLmdldFZhbHVlKCkgPT0gU2Vzc2lvblR5cGUuU1RBVEVMRVNTKSB7Ci0JCQkJCQluYW1lcy5hZGQoYmVhbi5nZXROYW1lKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlTZXNzaW9uQmVhbiBiZWFuID0gKFNlc3Npb25CZWFuKSBuZXh0OwotCQkJCWlmIChiZWFuLmdldFNlc3Npb25UeXBlKCkuZ2V0VmFsdWUoKSA9PSBTZXNzaW9uVHlwZS5TVEFURUxFU1MpIHsKLQkJCQkJbmFtZXMuYWRkKGJlYW4uZ2V0RWpiTmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG5hbWVzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lcwotCSAqICAgICAgICAgICAgc3BlY2lmaWVzIHRoYXQgdmVjdG9yIG9mIHN0cmluZ3MgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYWRkIGJlYW4KLQkgKiAgICAgICAgICAgIG5hbWVzIHRvLgotCSAqIEBwYXJhbSBiZWFucwotCSAqICAgICAgICAgICAgc3BlY2lmaWVzIGEgbGlzdCBvZiBiZWFucy4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEJlYW5OYW1lcyhWZWN0b3IgbmFtZXMsIExpc3QgYmVhbnMpIHsKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBiZWFucy5pdGVyYXRvcigpOwotCi0JCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCUVudGVycHJpc2VCZWFuIGJlYW4gPSAoRW50ZXJwcmlzZUJlYW4pIChpdGVyYXRvci5uZXh0KCkpOwotCi0JCQlpZiAoYmVhbi5pc1Nlc3Npb24oKSkgewotCQkJCVNlc3Npb24gc2Vzc2lvbkJlYW4gPSAoU2Vzc2lvbikgYmVhbjsKLQotCQkJCWlmIChzZXNzaW9uQmVhbi5nZXRTZXNzaW9uVHlwZSgpLmdldFZhbHVlKCkgPT0gU2Vzc2lvblR5cGUuU1RBVEVMRVNTKSB7Ci0JCQkJCW5hbWVzLmFkZChiZWFuLmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCS8qKgotCSAqIFVzZXMgamVtIFByb2plY3RVdGlsaXRpZXMgdG8gZ2V0IHRoZSBwcm9qZWN0Ci0JICogQHBhcmFtIGVqYiBlT2JqZWN0Ci0JICogQHJldHVybiBJUHJvamVjdAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgZ2V0UHJvamVjdEZyb21FSkIoRW50ZXJwcmlzZUJlYW4gZWpiKSB7Ci0JCXJldHVybiBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWpiKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgZGVmYXVsdCBKMkVFIDEuMyBFQVIgY29tcG9uZW50IGluIHRoZSB3b3Jrc3BhY2UKLQkgKiBAcmV0dXJuIEVBUiBjb21wb25lbnQgbmFtZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0RGVmYXVsdDEzRUFSQ29tcG9uZW50KCl7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50W10gYWxsRUFSQ29tcG9uZW50cyA9IGdldEFsbEVBUkNvbXBvbmVudHMoKTsKLQkJZm9yIChpbnQgaj0wO2o8YWxsRUFSQ29tcG9uZW50cy5sZW5ndGg7aisrKXsKLQkJCWludCBqMmVlVmVyc2lvbiA9IGdldEoyRUVWZXJzaW9uKGFsbEVBUkNvbXBvbmVudHNbal0pOwotCQkJaWYgKGoyZWVWZXJzaW9uID09IEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEKQotCQkJCSByZXR1cm4gYWxsRUFSQ29tcG9uZW50c1tqXTsKLQkJIH0JCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGEgZGVmYXVsdCBKMkVFIDEuNCBFQVIgY29tcG9uZW50IGluIHRoZSB3b3Jrc3BhY2UKLQkgKiBAcmV0dXJuIEVBUiBjb21wb25lbnQgbmFtZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0RGVmYXVsdDE0RUFSQ29tcG9uZW50KCl7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50W10gYWxsRUFSQ29tcG9uZW50cyA9IGdldEFsbEVBUkNvbXBvbmVudHMoKTsKLQkJZm9yIChpbnQgaj0wO2o8YWxsRUFSQ29tcG9uZW50cy5sZW5ndGg7aisrKXsKLQkJCWludCBqMmVlVmVyc2lvbiA9IGdldEoyRUVWZXJzaW9uKGFsbEVBUkNvbXBvbmVudHNbal0pOwotCQkJaWYgKGoyZWVWZXJzaW9uID09IEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKQotCQkJCSByZXR1cm4gYWxsRUFSQ29tcG9uZW50c1tqXTsKLQkJIH0JCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmaXJzdCBFQVIgY29tcG9uZW50IG9mIHRoZSBKMkVFIHZlcnNpb24KLQkgKiBAcGFyYW0gdmVyc2lvbklkCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0RUFSQ29tcG9uZW50b2ZKMkVFVmVyc2lvbihpbnQgdmVyc2lvbklkKXsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzID0gZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotCQlmb3IgKGludCBpPTA7IGk8Y29tcG9uZW50cy5sZW5ndGg7IGkrKyl7Ci0JCQlpZiAoZ2V0SjJFRVZlcnNpb24oY29tcG9uZW50c1tpXSkgPT0gdmVyc2lvbklkKQotCQkJCXJldHVybiBjb21wb25lbnRzW2ldOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBqMmVlVmVyc2lvbkludAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMYWJlbEZyb21KMkVFVmVyc2lvbihTdHJpbmcgajJlZVZlcnNpb25JbnQpIHsKLQkJaWYgKGoyZWVWZXJzaW9uSW50ID09IG51bGwgfHwgajJlZVZlcnNpb25JbnQubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiAiIjsKLQotCQlpbnQgajJlZVZlcnNpb24gPSBJbnRlZ2VyLnBhcnNlSW50KGoyZWVWZXJzaW9uSW50KTsKLQkJc3dpdGNoIChqMmVlVmVyc2lvbikgewotCQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRCA6Ci0JCQkJcmV0dXJuIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8yX1RFWFQ7Ci0JCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEIDoKLQkJCQlyZXR1cm4gSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzNfVEVYVDsKLQkJCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQgOgotCQkJCXJldHVybiBKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfNF9URVhUOwotCQkJZGVmYXVsdCA6Ci0JCQkJcmV0dXJuICIiOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SjJFRVZlcnNpb25Gcm9tTGFiZWwoU3RyaW5nIGoyZWVMYWJlbCkgewotCQlTdHJpbmcgajJlZTEyU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzJfSUQpOwotCQlTdHJpbmcgajJlZTEzU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQpOwotCQlTdHJpbmcgajJlZTE0U3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpOwotCQlpZiAoajJlZUxhYmVsLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfMl9URVhUKSkKLQkJCXJldHVybiBqMmVlMTJTdHJpbmc7Ci0KLQkJaWYgKGoyZWVMYWJlbC5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzNfVEVYVCkpCi0JCQlyZXR1cm4gajJlZTEzU3RyaW5nOwotCi0JCWlmIChqMmVlTGFiZWwuZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQpKQotCQkJcmV0dXJuIGoyZWUxNFN0cmluZzsKLQotCQlyZXR1cm4gIiI7Ci0KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBTdHJpbmcgcmVwcmVzZW50YXRpb25zIG9mIEoyRUUgdmVyc2lvbnMKLQkgKiBAcGFyYW0gYVZlcnNpb24KLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SjJFRUludFZlcnNpb25Bc1N0cmluZyhTdHJpbmcgYVZlcnNpb24pIHsKLQkJaWYgKGFWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfNF9URVhUKSkKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCkudG9TdHJpbmcoKTsKLQkJaWYgKGFWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUKSkKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCkudG9TdHJpbmcoKTsKLQkJaWYgKGFWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfMl9URVhUKSkKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRCkudG9TdHJpbmcoKTsJCQotCQkvLyBkZWZhdWx0Ci0JCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCkudG9TdHJpbmcoKTsKLQl9CQotCi0JLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLQotCS8qKgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZCAgLy8gdXNlIGdldEFMTEVBUkNvbXBvbmVudHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0W10gZ2V0RUFSUHJvamVjdHMoKSB7Ci0JCVZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLS8vCQkJCWlmIChwcm9qZWN0c1tpXS5oYXNOYXR1cmUoSUVBUk5hdHVyZUNvbnN0YW50cy5OQVRVUkVfSUQpKSB7Ci0JCQkJaWYgKFJlc291cmNlVXRpbHMuaXNFQVJQcm9qZWN0KHByb2plY3RzW2ldKSkgewotCQkJCQl2LmFkZChwcm9qZWN0c1tpXSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQkJfQotCi0JCX0KLQotCQlyZXR1cm4gKElQcm9qZWN0W10pdi50b0FycmF5KG5ldyBJUHJvamVjdFswXSk7Ci0JfQotCQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZpcnN0IEVBUiBwcm9qZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvamVjdCBhbmQgc2VydmVyCi0JICogQHBhcmFtIHNlcnZpY2VQcm9qZWN0Ci0JICogQHBhcmFtIHNlcnZlcgotCSAqIEByZXR1cm4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZCAgLy8gdG8gYmUgc2ltcGxpZmllZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgZ2V0RGVmYXVsdEVBUlByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QsIElTZXJ2ZXIgc2VydmVyKSB7Ci0KLQkJSVByb2plY3RbXSBlYXJQcm9qZWN0cyA9IG51bGw7Ci0JCUlQcm9qZWN0IGVhciA9IG51bGw7Ci0KLQkJaWYgKHNlcnZpY2VQcm9qZWN0ICE9IG51bGwgJiYgc2VydmljZVByb2plY3QuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0KLQkJCQlib29sZWFuIGlzV2ViRUpCT3JBcHBDbGllbnQgPSBSZXNvdXJjZVV0aWxzLmlzV2ViUHJvamVjdChzZXJ2aWNlUHJvamVjdCkgLy9zZXJ2aWNlUHJvamVjdC5oYXNOYXR1cmUoSVdlYk5hdHVyZUNvbnN0YW50cy5KMkVFX05BVFVSRV9JRCkKLQkJCQkJCXx8ICBSZXNvdXJjZVV0aWxzLmlzRUpCUHJvamVjdChzZXJ2aWNlUHJvamVjdCkgLy9zZXJ2aWNlUHJvamVjdC5oYXNOYXR1cmUoSUVKQk5hdHVyZUNvbnN0YW50cy5OQVRVUkVfSUQpCi0JCQkJCQl8fCAgUmVzb3VyY2VVdGlscy5pc0FwcENsaWVudFByb2plY3Qoc2VydmljZVByb2plY3QpOy8vc2VydmljZVByb2plY3QuaGFzTmF0dXJlKElBcHBsaWNhdGlvbkNsaWVudE5hdHVyZUNvbnN0YW50cy5OQVRVUkVfSUQpOwotCQkJCWlmICghaXNXZWJFSkJPckFwcENsaWVudCkgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0KLQkJCQlJUHJvamVjdFtdIGVhcnMgPSBnZXRFQVJQcm9qZWN0cygpOwotCi0JCQkJLy8gc2VwYXJhdGUgRUFScyB3aGljaCBhcmUgYWxyZWFkeSBkZXBsb3llZCB0byB0aGUgZXhpc3RpbmcKLQkJCQkvLyBzZXJ2ZXIKLQkJCQlpZiAoZWFycyAhPSBudWxsICYmIGVhcnMubGVuZ3RoID49IDEpIHsKLQkJCQkJQXJyYXlMaXN0IHByZWZlcnJlZEVBUkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJCUFycmF5TGlzdCBzZWNvbmRhcnlFQVJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGVhcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCWVhciA9IGVhcnNbaV07Ci0JCQkJCQlJTW9kdWxlIG1vZHVsZSA9IFJlc291cmNlVXRpbHMuZ2V0TW9kdWxlKGVhcik7Ci0JCQkJCQlpZiAobW9kdWxlICE9IG51bGwpIHsKLQkJCQkJCQlpZiAoc2VydmVyICE9IG51bGwKLQkJCQkJCQkJCXx8IFNlcnZlclV0aWwuY29udGFpbnNNb2R1bGUoc2VydmVyLAotCQkJCQkJCQkJCQltb2R1bGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpKSB7Ci0JCQkJCQkJCXByZWZlcnJlZEVBUkxpc3QuYWRkKGVhcik7Ci0JCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJc2Vjb25kYXJ5RUFSTGlzdC5hZGQoZWFyKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJLy8gYWRkIHNlY29uZGFyeUVBUkxpc3QgaXRlbXMgdG8gZW5kIG9mIHByaW1hcnkgbGlzdAotCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IHNlY29uZGFyeUVBUkxpc3Quc2l6ZSgpOyBqKyspIHsKLQkJCQkJCXByZWZlcnJlZEVBUkxpc3QuYWRkKHNlY29uZGFyeUVBUkxpc3QuZ2V0KGopKTsKLQkJCQkJfQotCQkJCQkvLyB0b0FycmF5Ci0JCQkJCWlmIChwcmVmZXJyZWRFQVJMaXN0ICE9IG51bGwpIHsKLQkJCQkJCWVhclByb2plY3RzID0gKElQcm9qZWN0W10pIHByZWZlcnJlZEVBUkxpc3QudG9BcnJheShuZXcgSVByb2plY3RbMF0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGNlKSB7Ci0JCQkJSUxvZyBsb2cgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCQkJCWxvZy5sb2coSUxvZy5FUlJPUiwgNTAzOSwgSjJFRVV0aWxzLmNsYXNzLCAiZ2V0RUFSUHJvamVjdHMiLCBjZSk7Ci0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZWFyUHJvamVjdHNbMF07Ci0JfQotCi0JLyoqCi0JICogR2V0cyB0aGUgRUpCIENvbXBvbmVudHMgaW4gdGhlIHByb2plY3QKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0RUpCQ29tcG9uZW50cyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJCi0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCXRyeSB7Ci0JCQlpZiAoY29tcG9uZW50ICE9IG51bGwgJiYgaXNFSkJDb21wb25lbnQoY29tcG9uZW50KSl7Ci0JCQkJdi5hZGQoY29tcG9uZW50KTsKLQkJCX0JCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfSAKLQkKLQkvKioKLQkgKiBHZXRzIHRoZSBBcHBsaWNhdGlvbiBDbGllbnQgY29tcG9uZW50cyBpbiBhIHByb2plY3QuCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldEFwcENsaWVudENvbXBvbmVudHMoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQkvL2dldCBhbGwgY29tcG9uZW50cyBpbiB0aGUgcHJvamVjdAotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXRyeSB7Ci0JCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCQotCQkJCWlmIChjb21wb25lbnQgIT0gbnVsbCAmJiBpc0FwcENsaWVudENvbXBvbmVudChjb21wb25lbnQpKXsKLQkJCQkJdi5hZGQoY29tcG9uZW50KTsKLQkJCQl9CQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwotCX0gCQotCQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRSZWZlcmVuY2luZ0VKQjIwQ29tcG9uZW50c0Zyb21FQVIoSVByb2plY3QgcHJvamVjdCl7Ci0JCSAKLQkJTGlzdCBlamJDb21wcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5ewotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCUlWaXJ0dWFsUmVmZXJlbmNlW10gcmVmcyA9IHZjLmdldFJlZmVyZW5jZXMoKTsKLQkJCWZvciAoaW50IGk9MDsgaTxyZWZzLmxlbmd0aDtpKyspIHsKLQkJCQlpZiAoaXNFSkIyMENvbXBvbmVudChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSkpCi0JCQkJCWVqYkNvbXBzLmFkZChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKWVqYkNvbXBzLnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsJCQotCX0KLQkKLQkKLQkvKioKLQkgKiBVdGlsaXR5IG1ldGhvZCB0byBjb21iaW5lIHR3byBJUHJvamVjdFtdCi0JICogQHBhcmFtIHByb2plY3RBcnJheTEKLQkgKiBAcGFyYW0gcHJvamVjdEFycmF5MgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0W10gY29tYmluZVByb2plY3RBcnJheXMoSVByb2plY3RbXSBwcm9qZWN0QXJyYXkxLAotCQkJSVByb2plY3RbXSBwcm9qZWN0QXJyYXkyKSB7Ci0KLQkJLy8gY2hlY2sgaWYgZWl0aGVyIG9yIGJvdGggYXJyYXlzIGFyZSBudWxsLgotCQlpZiAocHJvamVjdEFycmF5MSA9PSBudWxsICYmIHByb2plY3RBcnJheTIgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQllbHNlIGlmIChwcm9qZWN0QXJyYXkxICE9IG51bGwgJiYgcHJvamVjdEFycmF5MiA9PSBudWxsKQotCQkJcmV0dXJuIHByb2plY3RBcnJheTE7Ci0JCWVsc2UgaWYgKHByb2plY3RBcnJheTEgPT0gbnVsbCAmJiBwcm9qZWN0QXJyYXkyICE9IG51bGwpCi0JCQlyZXR1cm4gcHJvamVjdEFycmF5MjsKLQotCQlJUHJvamVjdFtdIGNvbWJpbmVkUHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdEFycmF5MS5sZW5ndGgKLQkJCQkrIHByb2plY3RBcnJheTIubGVuZ3RoXTsKLQotCQlTeXN0ZW0uYXJyYXljb3B5KHByb2plY3RBcnJheTEsIDAsIGNvbWJpbmVkUHJvamVjdHMsIDAsCi0JCQkJcHJvamVjdEFycmF5MS5sZW5ndGgpOwotCQlpZiAocHJvamVjdEFycmF5Mi5sZW5ndGggPiAwKSB7Ci0JCQlTeXN0ZW0uYXJyYXljb3B5KHByb2plY3RBcnJheTIsIDAsIGNvbWJpbmVkUHJvamVjdHMsCi0JCQkJCXByb2plY3RBcnJheTEubGVuZ3RoLCBwcm9qZWN0QXJyYXkyLmxlbmd0aCk7Ci0JCX0KLQotCQlyZXR1cm4gY29tYmluZWRQcm9qZWN0czsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0UmVmZXJlbmNpbmdXZWJDb21wb25lbnRzRnJvbUVBUihJUHJvamVjdCBwcm9qZWN0KXsKLQkJTGlzdCB3ZWJDb21wcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5ewotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCUlWaXJ0dWFsUmVmZXJlbmNlW10gcmVmcyA9IHZjLmdldFJlZmVyZW5jZXMoKTsKLQkJCWZvciAoaW50IGk9MDsgaTxyZWZzLmxlbmd0aDtpKyspIHsKLQkJCQlpZiAoaXNXZWJDb21wb25lbnQocmVmc1tpXS5nZXRSZWZlcmVuY2VkQ29tcG9uZW50KCkpKQotCQkJCQl3ZWJDb21wcy5hZGQocmVmc1tpXS5nZXRSZWZlcmVuY2VkQ29tcG9uZW50KCkpOwotCQkJfQkJCQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXdlYkNvbXBzLnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsJCi0JfQotCQotCi0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVqYkNvbXBvbmVudAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFSkIyMENvbXBvbmVudChJVmlydHVhbENvbXBvbmVudCBlamJDb21wb25lbnQpewotCQlyZXR1cm4gaXNFSkIyMENvbXBvbmVudChlamJDb21wb25lbnQuZ2V0UHJvamVjdCgpKTsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUpCMjBDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCl7Ci0JCWJvb2xlYW4gaXNFSkIgPSBmYWxzZTsKLQkJdHJ5IHsKLSAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCSAgaWYgKEVKQkFydGlmYWN0RWRpdC5pc1ZhbGlkRUpCTW9kdWxlKHZjKSkgewotCQkJICBFSkJBcnRpZmFjdEVkaXQgIGVqYkVkaXQgPSBudWxsOwotCQkJICB0cnkgewotCQkJCSAgZWpiRWRpdCA9IEVKQkFydGlmYWN0RWRpdC5nZXRFSkJBcnRpZmFjdEVkaXRGb3JSZWFkKHZjKTsKLQkJCQkgIEVKQlJlc291cmNlIGVqYlJlcyA9IGVqYkVkaXQuZ2V0RUpCSmFyWG1pUmVzb3VyY2UoKTsKLQkJCQkgIGlmIChlamJSZXMuZ2V0TW9kdWxlVmVyc2lvbklEKCk9PSBKMkVFVmVyc2lvbkNvbnN0YW50cy5FSkJfMl8wX0lEKSB7Ci0JCQkJCSAgcmV0dXJuIHRydWU7Ci0JCQkJICB9Ci0JCQkgIH0KLQkJCSAgZmluYWxseSB7Ci0JCQkJICBpZiAoZWpiRWRpdCE9bnVsbCkKLQkJCQkJICBlamJFZGl0LmRpc3Bvc2UoKTsKLQkJCSAgfQotCQkgIH0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZXgpe30KLQkJCi0JCXJldHVybiBpc0VKQjsJCQkKLQl9Ci0KLQkKLQkvKioKLQkgKiBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBhdCBjb21wTmFtZSBpcyByZWZlcmVuY2VkIGJ5IHRoZSBlYXIgYXQgZWFyQ29tcE5hbWUKLQkgKiBAcGFyYW0gZWFyUHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NvbXBvbmVudEFzc29jaWF0ZWQoSVByb2plY3QgZWFyUHJvamVjdCwgSVByb2plY3QgcHJvamVjdCkgewotCQlJVmlydHVhbENvbXBvbmVudCB2YzEgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChlYXJQcm9qZWN0KTsKLQkJSVZpcnR1YWxDb21wb25lbnQgdmMyID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCXJldHVybiBpc0NvbXBvbmVudEFzc29jaWF0ZWQodmMxLCB2YzIpOwotCX0KLQkKLQkvKioKLQkgKiBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBpcyByZWZlcmVuY2VkIGJ5IHRoZSBlYXIKLQkgKiBAcGFyYW0gZWFyIAotCSAqIEBwYXJhbSBjb21wb25lbnQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbXBvbmVudEFzc29jaWF0ZWQoSVZpcnR1YWxDb21wb25lbnQgZWFyLCBJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQpewotCQlib29sZWFuIGlzQXNzb2NpYXRlZCA9IGZhbHNlOwotCQkKLQkJLy8gTm90ZTogbm90IGltcGxlbWVudGVkIGJ5IEoyRUUgeWV0Li4gdG8gYmUgdXNlZCBsYXRlci4KLQkJSVZpcnR1YWxSZWZlcmVuY2VbXSBjb21wUmVmcyA9IGVhci5nZXRSZWZlcmVuY2VzKCk7Ci0JCWlmIChjb21wUmVmcyE9IG51bGwpIHsKLQkJCWZvciAoaW50IGk9MDtpPGNvbXBSZWZzLmxlbmd0aDtpKyspewotCQkJCUlWaXJ0dWFsUmVmZXJlbmNlIHZyZWYgPSBjb21wUmVmc1tpXTsKLQkJCQlpZiAoY29tcG9uZW50LmVxdWFscyh2cmVmLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSkpCi0JCQkJCQlpc0Fzc29jaWF0ZWQgPSB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBpc0Fzc29jaWF0ZWQ7Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcGFyYW0gZWFyUHJvamVjdAotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBhc3NvY2lhdGVDb21wb25lbnRUb0VBUihJUHJvamVjdCBwcm9qZWN0LCBJUHJvamVjdCBlYXJQcm9qZWN0KSB7Ci0JCQotICAgICAgICBJRGF0YU1vZGVsIGFkZENvbXBvbmVudFRvRUFSRGF0YU1vZGVsID0gRGF0YU1vZGVsRmFjdG9yeS5jcmVhdGVEYXRhTW9kZWwobmV3IEFkZENvbXBvbmVudFRvRW50ZXJwcmlzZUFwcGxpY2F0aW9uRGF0YU1vZGVsUHJvdmlkZXIoKSk7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IGVhckNvbXAgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChlYXJQcm9qZWN0KTsKLSAgICAgICAgYWRkQ29tcG9uZW50VG9FQVJEYXRhTW9kZWwuc2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlNPVVJDRV9DT01QT05FTlQsIGVhckNvbXApOwotICAgICAgICBMaXN0IG1vZExpc3QgPSAoTGlzdCkgYWRkQ29tcG9uZW50VG9FQVJEYXRhTW9kZWwuZ2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlRBUkdFVF9DT01QT05FTlRfTElTVCk7Ci0gICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHRhcmdldENvbXAgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgICAgbW9kTGlzdC5hZGQodGFyZ2V0Q29tcCk7Ci0JCWFkZENvbXBvbmVudFRvRUFSRGF0YU1vZGVsLnNldFByb3BlcnR5KElDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvcGVydGllcy5UQVJHRVRfQ09NUE9ORU5UX0xJU1QsIG1vZExpc3QpOwotICAgICAgICAKLQkJdHJ5IHsKLQkJCWFkZENvbXBvbmVudFRvRUFSRGF0YU1vZGVsLmdldERlZmF1bHRPcGVyYXRpb24oKS5leGVjdXRlKG51bGwsIG51bGwpOwotCQl9IGNhdGNoIChFeGVjdXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmdldExvZ2dlcigpLmxvZyhlKTsKLQkJfQotICAgICAgICAgICAgCi0JfQotICAgIAotICAgIC8qCi0gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHByb2plY3QgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBlYXJQcm9qZWN0LgotICAgICAqIEByZXR1cm5zIElTdGF0dXMgb2YgT0sgaWYgdGhlIHByb2plY3QgaXMgYSBXZWIgcHJvamVjdCwgRUpCIHByb2plY3QsIG9yIEFwcENsaWVudAotICAgICAqIHByb2plY3QgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQVIgcHJvamVjdC4gCi0gICAgICogUmV0dXJucyBJU3RhdHVzIHdpdGggYW4gRVJST1Igc2V2ZXJpdHkgaWYgdGhlIHByb2plY3QgaXMgYSBXZWIgcHJvamVjdCwgCi0gICAgICogRUpCIHByb2plY3QsIG9yIEFwcENsaWVudCBwcm9qZWN0IHRoYXQgY2Fubm90IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSIHByb2plY3QuIAotICAgICAqIFdoZW4gYW4gSVN0YXR1cyBvZiBzZXZlcml0eSBFUlJPUiBpcyByZXR1cm5lZCwgdGhlIElTdGF0dXMnIG1lc3NhZ2Ugd2lsbCBjb250YWluIHRoZSAKLSAgICAgKiBsb3dlc3QgSjJFRSBsZXZlbCB0aGF0IHRoaXMgcHJvamVjdCByZXF1aXJlcyBvbiBhbiBFQVIuCi0gICAgICogUmV0dXJucyBhbiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgT0sgaWYgcHJvamVjdCBpcyBub3QgcmVjb2duaXplZCBhcyBhIFdlYiwgRUpCLCBvcgotICAgICAqIEFwcENsaWVudCBwcm9qZWN0IG9yIGlmIGVhclByb2plY3QgaXMgbm90IHJlY29nbml6ZWQgYXMgYW4gRUFSIHByb2plY3QuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBJU3RhdHVzIGNhbkFzc29jaWF0ZVByb2plY3RUb0VBUihJUHJvamVjdCBwcm9qZWN0LCBJUHJvamVjdCBlYXJQcm9qZWN0KQotICAgIHsKLSAgICAgIC8vSWYgcHJvamVjdCBjb250YWlucyB0aGUgd2ViLCBlamIsIG9yIGFwcGNsaWVudCBmYWNldCwgYW5kIGVhclByb2plY3QgY29udGFpbnMgdGhlIAotICAgICAgLy9lYXIgZmFjZXQsIHJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgZmFjZXQgdmVyc2lvbnMgYXJlIHN1Y2ggdGhhdCB0aGUgcHJvamVjdAotICAgICAgLy9jYW4gYmUgYWRkZWQgdG8gdGhlIGVhci4gICAgICAKLQotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgYm9vbGVhbiBpc1dlYiA9IGlzV2ViQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgYm9vbGVhbiBpc0VKQiA9IGlzRUpCQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgYm9vbGVhbiBpc0FwcENsaWVudCA9IGlzQXBwQ2xpZW50Q29tcG9uZW50KHByb2plY3QpOwotICAgICAgYm9vbGVhbiBpc0VBUiA9IGlzRUFSQ29tcG9uZW50KGVhclByb2plY3QpOwotICAgICAgaWYgKChpc1dlYiB8fCBpc0VKQiB8fCBpc0FwcENsaWVudCkgJiYgaXNFQVIpCi0gICAgICB7ICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZFYXJQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKGVhclByb2plY3QpOwotICAgICAgICAgIAotICAgICAgICAgIElQcm9qZWN0RmFjZXQgZWFyUGYgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9NT0RVTEUpOwotICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIGVhclBmdiA9IGZFYXJQcm9qZWN0LmdldEluc3RhbGxlZFZlcnNpb24oZWFyUGYpOwotICAgICAgICAgIFN0cmluZyBlYXJWZXJzaW9uID0gZWFyUGZ2LmdldFZlcnNpb25TdHJpbmcoKTsKLSAgICAgICAgICAKLSAgICAgICAgICBTdHJpbmcgd2ViVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgICAgU3RyaW5nIGVqYlZlcnNpb24gPSBudWxsOwotICAgICAgICAgIFN0cmluZyBhY1ZlcnNpb24gPSBudWxsOwotICAgICAgICAgICAgCi0gICAgICAgICAgaWYgKGlzV2ViKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXQgd2ViUGYgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUpOwotICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gd2ViUGZ2ID0gZlByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbih3ZWJQZik7Ci0gICAgICAgICAgICB3ZWJWZXJzaW9uID0gd2ViUGZ2LmdldFZlcnNpb25TdHJpbmcoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoaXNFSkIpICAgICAgICAgICAgCi0gICAgICAgICAgewotICAgICAgICAgICAgSVByb2plY3RGYWNldCBlamJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUpCX01PRFVMRSk7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBlamJQZnYgPSBmUHJvamVjdC5nZXRJbnN0YWxsZWRWZXJzaW9uKGVqYlBmKTsKLSAgICAgICAgICAgIGVqYlZlcnNpb24gPSBlamJQZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChpc0FwcENsaWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0IGFjUGYgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0FQUENMSUVOVF9NT0RVTEUpOwotICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gYWNQZnYgPSBmUHJvamVjdC5nZXRJbnN0YWxsZWRWZXJzaW9uKGFjUGYpOwotICAgICAgICAgICAgYWNWZXJzaW9uID0gYWNQZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICAgIH0gCi0gICAgICAgICAgCi0gICAgICAgICAgaWYgKChpc1dlYiAmJiB3ZWJWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfMl9URVhUKSkgfHwKLSAgICAgICAgICAgICAgKGlzRUpCICYmIGVqYlZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8xX1RFWFQpKSB8fAotICAgICAgICAgICAgICAoaXNBcHBDbGllbnQgJiYgYWNWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfMl9URVhUKSkKLSAgICAgICAgICAgICAgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZ3JlYXRlclRoYW5PckVxdWFsVG8oZWFyVmVyc2lvbiwgSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzJfVEVYVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8yX1RFWFQpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICgoaXNXZWIgJiYgd2ViVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8yXzNfVEVYVCkpIHx8Ci0gICAgICAgICAgICAgIChpc0VKQiAmJiBlamJWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfMF9URVhUKSkgfHwKLSAgICAgICAgICAgICAgKGlzQXBwQ2xpZW50ICYmIGFjVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzNfVEVYVCkpCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWdyZWF0ZXJUaGFuT3JFcXVhbFRvKGVhclZlcnNpb24sIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8zX1RFWFQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzNfVEVYVCk7Ci0gICAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAgIH0gICAgICAgICAgCi0gICAgICAgICAgZWxzZSBpZiAoKGlzV2ViICYmIHdlYlZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl80X1RFWFQpKSB8fAotICAgICAgICAgICAgICAoaXNFSkIgJiYgZWpiVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8yXzFfVEVYVCkpIHx8Ci0gICAgICAgICAgICAgIChpc0FwcENsaWVudCAmJiBhY1ZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQpKQotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCFncmVhdGVyVGhhbk9yRXF1YWxUbyhlYXJWZXJzaW9uLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfNF9URVhUKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQpOwotICAgICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgewotICAgICAgICAgIC8vSWYgZmFjZXQgQVBJIHRocm93cyBhIENvcmVFeGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGFuIElGYWNldGVkUHJvamVjdCBmcm9tIAotICAgICAgICAgIC8vYW4gSVByb2plY3QsIGFuIE9LIFN0YXR1cyB3aWxsIGJlIHJldHVybmVkIGFuZCBjbGllbnRzIG9mIHRoaXMgdXRpbGl0eSBtZXRob2QKLSAgICAgICAgICAvL3dvbid0IHJhaXNlIGEgdmFsaWRhdGlvbiBlcnJvci4KLSAgICAgICAgfSAgICAgICAgIAotICAgICAgfQotCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotCQotICAgIC8qCi0gICAgICogQHBhcmFtIHZlcnNpb25BIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBmb3JtIDEuMi4zCi0gICAgICogQHBhcmFtIHZlcnNpb25BIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBmb3JtIDEuMi4zCi0gICAgICogQHJldHVybiBib29sZWFuIHJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdmVyc2lvbkIKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGdyZWF0ZXJUaGFuT3JFcXVhbFRvKFN0cmluZyB2ZXJzaW9uQSwgU3RyaW5nIHZlcnNpb25CKQotICAgIHsKLSAgICAgIGlmICh2ZXJzaW9uQS5lcXVhbHModmVyc2lvbkIpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0QSA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmVyc2lvbkEsICIuIik7Ci0gICAgICAgIFN0cmluZ1Rva2VuaXplciBzdEIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZlcnNpb25CLCAiLiIpOwotCi0gICAgICAgIGludCBzaXplQSA9IHN0QS5jb3VudFRva2VucygpOwotICAgICAgICBpbnQgc2l6ZUIgPSBzdEIuY291bnRUb2tlbnMoKTsKLQotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKHNpemVBIDwgc2l6ZUIpCi0gICAgICAgIHsKLSAgICAgICAgICBzaXplID0gc2l6ZUE7Ci0gICAgICAgIH0gCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBzaXplID0gc2l6ZUI7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgYSA9IEludGVnZXIucGFyc2VJbnQoc3RBLm5leHRUb2tlbigpKTsKLSAgICAgICAgICBpbnQgYiA9IEludGVnZXIucGFyc2VJbnQoc3RCLm5leHRUb2tlbigpKTsKLSAgICAgICAgICBpZiAoYSAhPSBiKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhID4gYjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc2l6ZUEgPiBzaXplQjsKLSAgICAgIH0KLSAgICB9Ci0JCi0JLyoqCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEByZXR1cm4KLSAgICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRXZWJJbmZQYXRoKElQcm9qZWN0IHByb2plY3QpewotCQkKLQkJSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCQotCQkvL3Nob3VsZCBXRUItSU5GIGxvY2F0aW9uIGJlIHB1bGxlZCBpbiBmcm9tIHRoZSAuY29tcG9uZW50IGZpbGUgcmF0aGVyIHRoYW4gaGFyZGNvZGVkIGhlcmU/Ci0JCUlWaXJ0dWFsRm9sZGVyIHdlYkluZkRpciA9IGNvbXBvbmVudC5nZXRSb290Rm9sZGVyKCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKCIvV0VCLUlORiIpKTsKLQkJSVBhdGggbW9kdWxlUGF0aCA9IHdlYkluZkRpci5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKTsKLQkJCi0JCWlmICghd2ViSW5mRGlyLmV4aXN0cygpKQotCQl7CQotCQkJdHJ5IAotCQkJewkKLQkJCQl3ZWJJbmZEaXIuY3JlYXRlKDAsbnVsbCk7CQkJCQotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCXt9Ci0JCX0JCQotCQlyZXR1cm4gbW9kdWxlUGF0aDsKLQl9Ci0JCi0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICogCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRGaXJzdFdlYkNvbnRlbnRQYXRoKElQcm9qZWN0IHByb2plY3QpewotCQkKLQkJSVBhdGggbW9kdWxlUGF0aCA9IG51bGw7Ci0JCXRyeSB7Ci0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJICBpZiAoTW9kdWxlQ29yZU5hdHVyZS5pc0ZsZXhpYmxlUHJvamVjdChwcm9qZWN0KSkgewotICAgICAgICAgICAgbW9kdWxlUGF0aCA9IHZjLmdldFJvb3RGb2xkZXIoKS5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKTsKLQkJICB9Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGV4KXt9Ci0KLQkJcmV0dXJuIG1vZHVsZVBhdGg7CQkJCi0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0V2ViQ29udGVudFBhdGgoSVByb2plY3QgcHJvamVjdCl7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQlJUGF0aCBtb2R1bGVQYXRoID0gY29tcG9uZW50LmdldFJvb3RGb2xkZXIoKS5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKTsKLQkJcmV0dXJuIG1vZHVsZVBhdGg7Ci0JfQotCQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUNvbnRhaW5lciBnZXRGaXJzdFdlYkNvbnRlbnRDb250YWluZXIoSVByb2plY3QgcHJvamVjdCl7Ci0JCUlDb250YWluZXIgY29udGFpbmVyID0gbnVsbDsKLQkJSVBhdGggbW9kdWxlUGF0aCA9IGdldEZpcnN0V2ViQ29udGVudFBhdGgocHJvamVjdCk7Ci0JCUlSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShtb2R1bGVQYXRoKTsKLQkJaWYgKHJlcyE9bnVsbCl7Ci0JCSAgY29udGFpbmVyID0gcmVzLmdldFBhcmVudCgpOwotCQl9CQkKLQkJICAKLQkJcmV0dXJuIGNvbnRhaW5lcjsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJQ29udGFpbmVyIGdldFdlYkNvbnRlbnRDb250YWluZXIoSVByb2plY3QgcHJvamVjdCl7Ci0JCUlDb250YWluZXIgY29udGFpbmVyID0gbnVsbDsKLQkJSVBhdGggbW9kdWxlUGF0aCA9IGdldFdlYkNvbnRlbnRQYXRoKHByb2plY3QpOwotCQlJUmVzb3VyY2UgcmVzID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UobW9kdWxlUGF0aCk7Ci0JCWlmIChyZXMgaW5zdGFuY2VvZiBJQ29udGFpbmVyKXsKLQkJICBjb250YWluZXIgPSAoSUNvbnRhaW5lcilyZXM7Ci0JCX0JCQotCQlyZXR1cm4gY29udGFpbmVyOwotCX0KLQkKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmaXJzdCBNb2R1bGUgbmFtZSAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaXJzdFdlYk1vZHVsZU5hbWUoSVByb2plY3QgcHJvamVjdCl7Ci0gICAgICBTdHJpbmcgbW9kdWxlTmFtZSA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgICBtb2R1bGVOYW1lID0gdmMuZ2V0TmFtZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goRXhjZXB0aW9uIGV4KXt9Ci0gIAotICAgICAgcmV0dXJuIG1vZHVsZU5hbWU7ICAJCQkKLQl9Ci0JCi0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzV2ViQ29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCSAgICByZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNEeW5hbWljV2ViUHJvamVjdChjb21wLmdldFByb2plY3QoKSk7Ci0gIH0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFQVJDb21wb25lbnQoSVZpcnR1YWxDb21wb25lbnQgY29tcCl7Ci0JICAgIHJldHVybiBKMkVFUHJvamVjdFV0aWxpdGllcy5pc0VBUlByb2plY3QoY29tcC5nZXRQcm9qZWN0KCkpOwotCX0KLQotCS8qKgotCSAqIFRydWUgaWYgdGhlIGNvbXBvbmVudCBpcyBhIHZhbGlkIEVKQiBjb21wb25lbnQKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFSkJDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCkgewotICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gaXNFSkJDb21wb25lbnQodmMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VKQkNvbXBvbmVudChJVmlydHVhbENvbXBvbmVudCBjb21wKXsKLQkJcmV0dXJuIEoyRUVQcm9qZWN0VXRpbGl0aWVzLmlzRUpCUHJvamVjdChjb21wLmdldFByb2plY3QoKSk7Ci0JfQkKLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0FwcENsaWVudENvbXBvbmVudChJVmlydHVhbENvbXBvbmVudCBjb21wKXsKLQkJcmV0dXJuIEoyRUVQcm9qZWN0VXRpbGl0aWVzLmlzQXBwbGljYXRpb25DbGllbnRQcm9qZWN0KGNvbXAuZ2V0UHJvamVjdCgpKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzSmF2YUNvbXBvbmVudChJVmlydHVhbENvbXBvbmVudCBjb21wKXsKLQkJcmV0dXJuIEoyRUVQcm9qZWN0VXRpbGl0aWVzLmlzVXRpbGl0eVByb2plY3QoY29tcC5nZXRQcm9qZWN0KCkpOwotCX0JCi0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q29tcG9uZW50VHlwZUlkKElQcm9qZWN0IHByb2plY3QpIHsKLQkJcmV0dXJuIEoyRUVQcm9qZWN0VXRpbGl0aWVzLmdldEoyRUVQcm9qZWN0VHlwZShwcm9qZWN0KTsKLQl9Ci0gIAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gdG9Db21wb25lbnROYW1lc0FycmF5KElWaXJ0dWFsQ29tcG9uZW50W10gY29tcG9uZW50cyl7Ci0JCVN0cmluZ1tdIGVjTmFtZXMgPSBuZXcgU3RyaW5nW2NvbXBvbmVudHMubGVuZ3RoXTsKLQkJZm9yKGludCBpPTA7IGk8Y29tcG9uZW50cy5sZW5ndGg7IGkrKyl7Ci0JCQllY05hbWVzW2ldID0gY29tcG9uZW50c1tpXS5nZXROYW1lKCk7Ci0JCX0KLQkJcmV0dXJuIGVjTmFtZXM7CQkKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdFtdIHRvUHJvamVjdEFycmF5KElWaXJ0dWFsQ29tcG9uZW50W10gY29tcG9uZW50cyl7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBuZXcgSVByb2plY3RbY29tcG9uZW50cy5sZW5ndGhdOwotCQlmb3IgKGludCBpPTA7IGk8Y29tcG9uZW50cy5sZW5ndGg7IGkrKyl7Ci0JCQlwcm9qZWN0c1tpXSA9IGNvbXBvbmVudHNbaV0uZ2V0UHJvamVjdCgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0czsKLQl9Ci0JCi0JLyoqCi0JICogR2l2ZW4gYSBKMkVFIGxldmVsLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBzZXJ2bGV0IGxldmVsCi0JICogQHBhcmFtIGoyZWVMZXZlbAotCSAqIEByZXR1cm4gd2ViIGFwcCB2ZXJzaW9uCi0JICovCi0JcHVibGljIHN0YXRpYyBJbnRlZ2VyIGdldFNlcnZsZXRWZXJzaW9uRm9ySjJFRVZlcnNpb24oU3RyaW5nIGoyZWVMZXZlbCl7Ci0JCWludCBhVmVyc2lvbiA9IEludGVnZXIudmFsdWVPZihqMmVlTGV2ZWwpLmludFZhbHVlKCk7Ci0JCXN3aXRjaCAoYVZlcnNpb24pIHsKLQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRDoKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5XRUJfMl8yX0lEKTsKLQotCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEOgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl8yXzNfSUQpOwotCi0JCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuV0VCXzJfNF9JRCk7Ci0JCQkKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5XRUJfMl8zX0lEKTsKLQkJfQkJCi0JfQotCQotCS8qKgotCSAqIEdpdmVuIGEgSjJFRSBsZXZlbCwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgRUpCIHZlcnNpb24KLQkgKiBAcGFyYW0gajJlZUxldmVsCi0JICogQHJldHVybiBlamIgc3BlYyB2ZXJzaW9uCi0JICovCi0JcHVibGljIHN0YXRpYyBJbnRlZ2VyIGdldEVKQlZlcnNpb25Gb3JKMkVFVmVyc2lvbihTdHJpbmcgajJlZUxldmVsKXsKLQkJaW50IGFWZXJzaW9uID0gSW50ZWdlci52YWx1ZU9mKGoyZWVMZXZlbCkuaW50VmFsdWUoKTsKLQkJc3dpdGNoIChhVmVyc2lvbikgewotCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEOgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl8xXzFfSUQpOwotCi0JCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuRUpCXzJfMF9JRCk7Ci0KLQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRDoKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5FSkJfMl8xX0lEKTsKLQkJCQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl8yXzBfSUQpOwotCQl9CQkJCi0JfQotCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGUgY29tcG9uZW50IGlzIGEgdmFsaWQgSmF2YSBjb21wb25lbnQKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNKYXZhQ29tcG9uZW50KElQcm9qZWN0IHByb2plY3QpIHsKLQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBpZiAodmMgIT0gbnVsbCkKLSAgICAgIHsKLQkgICAgcmV0dXJuIGlzSmF2YUNvbXBvbmVudCh2Yyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vY2hlY2sgaWYgaXQncyBhIGZhY2V0ZWQgcHJvamVjdCB3aXRoIG9ubHkgdGhlIEphdmEgZmFjZXQuCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHByb2plY3QuZXhpc3RzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3QpOwotICAgICAgICAgICAgaWYgKGZQcm9qZWN0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNldCBmYWNldHMgPSBmUHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgICAgICAgICAgIGlmIChmYWNldHMuc2l6ZSgpPT0xKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKWZhY2V0cy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAocGZ2LmdldFByb2plY3RGYWNldCgpLmdldElkKCkuZXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX0pBVkEpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9UaGlzIGlzIG5vdCBhIGZhY2V0ZWQgcHJvamVjdC4gQ2hlY2sgaWYgdGhpcyBpcyBhIHNpbXBsZSBKYXZhIHByb2plY3QuICAgIAotICAgICAgICAgICAgICBpZiAoUmVzb3VyY2VVdGlscy5pc0phdmFQcm9qZWN0KHByb2plY3QpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgIH0gICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgewotICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBUcnVlIGlmIHRoZSBjb21wb25lbnQgaXMgYSB2YWxpZCBXZWIgY29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzV2ViQ29tcG9uZW50KElQcm9qZWN0IHByb2plY3QpIHsKLQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBpZiAodmMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGlzV2ViQ29tcG9uZW50KHZjKTsgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9CQotCX0KLQotCS8qKgotCSAqIFRydWUgaWYgdGhlIGNvbXBvbmVudCBpcyBhIHRydWUgQXBwbGljYXRpb24gY2xpZW50IGNvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0FwcENsaWVudENvbXBvbmVudChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgaWYgKHZjICE9IG51bGwpCi0gICAgICB7Ci0JICByZXR1cm4gaXNBcHBDbGllbnRDb21wb25lbnQodmMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0JfQotCi0JLyoqCi0JICogVHJ1ZSBpcyB0aGUgY29tcG9uZW50IGlzIGEgdmFsaWQgRUFSIGNvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VBUkNvbXBvbmVudChJUHJvamVjdCBwcm9qZWN0KXsKLQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBpZiAodmMgIT0gbnVsbCkKLSAgICAgIHsKLQkgIHJldHVybiBpc0VBUkNvbXBvbmVudCh2Yyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJRm9sZGVyIGdldE91dHB1dENvbnRhaW5lclJvb3QgKElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCkgewotCQlyZXR1cm4gKElGb2xkZXIpSjJFRVByb2plY3RVdGlsaXRpZXMuZ2V0T3V0cHV0Q29udGFpbmVycyhjb21wb25lbnQuZ2V0UHJvamVjdCgpKVswXTsKLQl9Ci0JCi0JLy8gMTk0NDM0IC0gQ2hlY2sgZm9yIG5vbi1leGlzdGluZyBFQVIgd2l0aCBjb250ZW50cyB0aGF0J3Mgbm90IGRlbGV0ZWQgcHJldmlvdXNseQotCXB1YmxpYyBzdGF0aWMgSVN0YXR1cyBjYW5DcmVhdGVFQVIoSVByb2plY3QgZWFyUHJvamVjdCkKLSAgICB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJaWYoICFlYXJQcm9qZWN0LmV4aXN0cygpICl7Ci0JCQlJUGF0aCBwYXRoID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRMb2NhdGlvbigpOwotCQkJcGF0aCA9IHBhdGguYXBwZW5kKGVhclByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCXN0YXR1cyA9IFByb2plY3RDcmVhdGlvbkRhdGFNb2RlbFByb3ZpZGVyTmV3LnZhbGlkYXRlRXhpc3RpbmcoZWFyUHJvamVjdC5nZXROYW1lKCksIHBhdGgudG9PU1N0cmluZygpKTsKLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotICAgIH0KLQkKLQotCSBwdWJsaWMgc3RhdGljIHZvaWQgYWRkSkFST3JNb2R1bGVEZXBlbmRlbmN5KElQcm9qZWN0IHByb2plY3QsIFN0cmluZyB1cmkpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbgotCSAgewotCSAgICBpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KHByb2plY3QpKQotCSAgICB7Ci0JICAgICAgQXJjaGl2ZU1hbmlmZXN0IG1hbmlmZXN0ID0gSjJFRVByb2plY3RVdGlsaXRpZXMucmVhZE1hbmlmZXN0KHByb2plY3QpOwotCSAgICAgIG1hbmlmZXN0Lm1lcmdlQ2xhc3NQYXRoKG5ldyBTdHJpbmdbXXt1cml9KTsKLQkgICAgICBKMkVFUHJvamVjdFV0aWxpdGllcy53cml0ZU1hbmlmZXN0KHByb2plY3QsIG1hbmlmZXN0KTsKLQkgICAgICBmb3JjZUNsYXNzcGF0aFVwZGF0ZShwcm9qZWN0KTsKLQkgICAgfQotCSAgfQotCSAgCi0JICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkSmF2YVByb2plY3RBc1V0aWxpdHlKYXIoSVByb2plY3QgamF2YVByb2plY3QsIElQcm9qZWN0IGVhclByb2plY3QsSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCSAgewotCQkgIHRyeSB7Ci0JCQkgIElEYXRhTW9kZWwgbWlncmF0aW9uZG0gPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm92aWRlcigpKTsKLQkJCSAgbWlncmF0aW9uZG0uc2V0UHJvcGVydHkoSUphdmFQcm9qZWN0TWlncmF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5QUk9KRUNUX05BTUUsIGphdmFQcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkgIG1pZ3JhdGlvbmRtLnNldFByb3BlcnR5KElKYXZhUHJvamVjdE1pZ3JhdGlvbkRhdGFNb2RlbFByb3BlcnRpZXMuQUREX1RPX0VBUiwgQm9vbGVhbi5GQUxTRSk7Ci0JCQkgIG1pZ3JhdGlvbmRtLmdldERlZmF1bHRPcGVyYXRpb24oKS5leGVjdXRlKG1vbml0b3IsIG51bGwpOwotCSAKLQkgCi0JCQkgIElEYXRhTW9kZWwgcmVmZG0gPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3ZpZGVyKCkpOwotCQkJICBMaXN0IHRhcmdldENvbXBMaXN0ID0gKExpc3QpIHJlZmRtLmdldFByb3BlcnR5KElDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvcGVydGllcy5UQVJHRVRfQ09NUE9ORU5UX0xJU1QpOwotCSAKLQkJCSAgSVZpcnR1YWxDb21wb25lbnQgdGFyZ2V0Y29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQoamF2YVByb2plY3QpOwotCQkJICBJVmlydHVhbENvbXBvbmVudCBzb3VyY2Vjb21wb25lbnQgPSBDb21wb25lbnRVdGlsaXRpZXMuZ2V0Q29tcG9uZW50KGVhclByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCSAgdGFyZ2V0Q29tcExpc3QuYWRkKHRhcmdldGNvbXBvbmVudCk7Ci0JIAotCQkJICByZWZkbS5zZXRQcm9wZXJ0eShJQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXMuU09VUkNFX0NPTVBPTkVOVCxzb3VyY2Vjb21wb25lbnQgKTsKLQkJCSAgcmVmZG0uc2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlRBUkdFVF9DT01QT05FTlRfTElTVCwgdGFyZ2V0Q29tcExpc3QpOwotCQkJICByZWZkbS5zZXRQcm9wZXJ0eShJQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXMuVEFSR0VUX0NPTVBPTkVOVFNfREVQTE9ZX1BBVEgsICAiL1dFQi1JTkYvbGliIik7Ci0JCQkgIHJlZmRtLmdldERlZmF1bHRPcGVyYXRpb24oKS5leGVjdXRlKG1vbml0b3IsIG51bGwpOwotCQkJCQkgIAotCQkgIH1jYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCSAgCi0JCSAgfQotCSAgfQotCSAgCi0JLy9Gb3JjaW5nIGNsYXNzcGF0aCB1cGRhdGUKLQkgIHB1YmxpYyBzdGF0aWMgdm9pZCBmb3JjZUNsYXNzcGF0aFVwZGF0ZSAoSVByb2plY3QgcHJvamVjdCkgewotCQkgIEoyRUVDb21wb25lbnRDbGFzc3BhdGhVcGRhdGVyIGNsYXNzcGF0aFVwZGF0ZXIgPSBKMkVFQ29tcG9uZW50Q2xhc3NwYXRoVXBkYXRlci5nZXRJbnN0YW5jZSgpOwotCQkgIENvbGxlY3Rpb24gcHJvakNvbGxlY3Rpb24gPSBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocHJvamVjdCk7Ci0JCSAgY2xhc3NwYXRoVXBkYXRlci5mb3JjZVVwZGF0ZShwcm9qQ29sbGVjdGlvbiwgdHJ1ZSk7Ci0JCSAgSUpvYk1hbmFnZXIgam0gPSBKb2IuZ2V0Sm9iTWFuYWdlcigpOwotCQkgIHRyeXsKLQkJCSAgam0uam9pbihKMkVFQ29tcG9uZW50Q2xhc3NwYXRoVXBkYXRlci5NT0RVTEVfVVBEQVRFX0pPQl9OQU1FLCBudWxsKTsKLQkJICB9Y2F0Y2goRXhjZXB0aW9uIGV4Yyl7fQotCSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KYXZhTU9GVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0phdmFNT0ZVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDU1ZmRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0phdmFNT0ZVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLm5hdHVyZS5FTUZOYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC51dGlsaXR5LkplbVByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFSZWZGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFWaXNpYmlsaXR5S2luZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci0KLS8qKgotKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHNvbWUgdXNlZnVsIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3aXRoIHRoZSBKYXZhTU9GCi0qLwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSmF2YU1PRlV0aWxzCi17Ci0gLyoqCi0gICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBjbGFzcyBvZiB0aGUgZ2l2ZW4gbmFtZSBpcyBsb2FkYWJsZSBpbiB0aGUgZ2l2ZW4KLSAgKiBwcm9qZWN0LgotICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjbGFzcwotICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0Ci0gICogQHJldHVybiBUcnVlIGlmIHRoZSBjbGFzcyBpcyBsb2FkYWJsZSBhbmQgbm8gZXhjZXB0aW9ucyBhcmUgdGhyb3duLiAKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ2xhc3NMb2FkYWJsZShTdHJpbmcgY2xhc3NOYW1lLCBJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAJcmV0dXJuIGlzQ2xhc3NMb2FkYWJsZShnZXRKYXZhQ2xhc3MoY2xhc3NOYW1lLHByb2plY3QpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NsYXNzTG9hZGFibGUoSmF2YUNsYXNzIGphdmFDbGFzcykKLSAgewotCXJldHVybiBqYXZhQ2xhc3MuaXNFeGlzdGluZ1R5cGUoKTsgICAgCi0gIH0KLQotICAvKioKLSAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNsYXNzIGhhcyBhIHB1YmxpYyBjb25zdHJ1Y3RvcgotICAqIHdpdGggYW4gZW1wdHkgcGFyYW1ldGVyIGxpc3QuCi0gICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNsYXNzCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QKLSAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNsYXNzIGlzIGxvYWRhYmxlIGZyb20gdGhlIHByb2plY3QgYW5kIHRoZSAKLSAgKiAgICAgICAgIGNsYXNzIGhhcyBhIHB1YmxpYyBjb25zdHJ1Y3RvciB3aXRoIGFuIGVtcHR5IHBhcmFtZXRlciBsaXN0ICAKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc1B1YmxpY0RlZmF1bHRDdG9yKFN0cmluZyBjbGFzc05hbWUsIElQcm9qZWN0IHByb2plY3QpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gaGFzUHVibGljRGVmYXVsdEN0b3IoZ2V0SmF2YUNsYXNzKGNsYXNzTmFtZSwgcHJvamVjdCkpOwotICB9Ci0KLQotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBoYXNQdWJsaWNEZWZhdWx0Q3RvcihKYXZhQ2xhc3MgamF2YUNsYXNzKQotICB7Ci0gICAKLSAgICBMaXN0IG1ldGhvZExpc3QgPSBqYXZhQ2xhc3MuZ2V0TWV0aG9kcygpOwotICAgIGlmIChtZXRob2RMaXN0PT1udWxsKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBJdGVyYXRvciBpTWV0aG9kcyA9IG1ldGhvZExpc3QuaXRlcmF0b3IoKTsKLSAgICBib29sZWFuIHVzZXJEZWZpbmVkQ3RvciA9IGZhbHNlOwotICAgIHdoaWxlIChpTWV0aG9kcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgTWV0aG9kIHRoaXNNZXRob2QgPSAoTWV0aG9kKWlNZXRob2RzLm5leHQoKTsKLQotICAgICAgaWYgKHRoaXNNZXRob2QuaXNDb25zdHJ1Y3RvcigpKQotICAgICAgewotICAgICAgICB1c2VyRGVmaW5lZEN0b3IgPSB0cnVlOyAKLQotICAgICAgICAvL1NpbmNlIHRoZSB1c2VyIGhhcyBkZWZpbmVkIGEgY3RvciwgdGhlIGRlZmF1bHQgY3RvciBpcyBubyBsb25nZXIgYXZhaWxhYmxlLgotICAgICAgICAvL1dlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHVzZXIgaGFzIHByb3ZpZGVkIGEgcHVibGljIGN0b3Igd2l0aCBubyBwYXJhbWV0ZXJzLgotCi0gICAgICAgIC8vY2hlY2sgaWYgcHVibGljCi0gICAgICAgIGlmICh0aGlzTWV0aG9kLmdldEphdmFWaXNpYmlsaXR5KCkuZ2V0VmFsdWUoKSA9PSBKYXZhVmlzaWJpbGl0eUtpbmQuUFVCTElDKQotICAgICAgICB7Ci0gICAgICAgICAgLy9zZWUgaWYgcGFyYW1ldGVyIGxpc3QgaXMgZW1wdHkKLSAgICAgICAgICBMaXN0IHBhcmFtTGlzdCA9IHRoaXNNZXRob2QuZ2V0UGFyYW1ldGVycygpOwotICAgICAgICAgIGlmIChwYXJhbUxpc3QuaXNFbXB0eSgpICkKLSAgICAgICAgICB7Ci0JICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICBpZiAodXNlckRlZmluZWRDdG9yKQotICAgIHsKLQkgIHJldHVybiBmYWxzZTsgLy9pZiB0aGUgdXNlciBkZWZpbmVkIGEgY3RvciBhbmQgd2Ugc3RpbGwgaGF2ZW4ndAotCSAgCSAgICAgICAgICAgIC8vcmV0dXJuZWQgdHJ1ZSwgbm9uZSBvZiB0aGVtIHdlcmUgcHVibGljIHdpdGggbm8gcGFyYW1ldGVycy4KLSAgICB9Ci0gICAgZWxzZQotICAgIHsgCi0gICAgICAgcmV0dXJuIHRydWU7ICAgIAotICAgIH0KLQotICB9Ci0gIC8qKgotICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2xhc3MgaW1wbGVtZW50cyB0aGUgc3BlY2lmaWVkIGludGVyZmFjZS4KLSAgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgY2xhc3MKLSAgKiBAcGFyYW0gaW50ZXJmYWNlTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGludGVyZmFjZQotICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0Ci0gICogQHJldHVybiBUcnVlIGlmIHRoZSBjbGFzcyBhbmQgaW50ZXJmYWNlIGFyZSBsb2FkYWJsZSBmcm9tIHRoZSBwcm9qZWN0IGFuZAotICAqICAgICAgICAgdGhlIGNsYXNzIGltcGxlbWVudHMgdGhlIGludGVyZmFjZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGltcGxlbWVudHNJbnRlcmZhY2UoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIGludGVyZmFjZU5hbWUsIElQcm9qZWN0IHByb2plY3QpCi0gIAkJCXRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgIHJldHVybiBpbXBsZW1lbnRzSW50ZXJmYWNlKGdldEphdmFDbGFzcyhjbGFzc05hbWUsIHByb2plY3QpLCBnZXRKYXZhQ2xhc3MoaW50ZXJmYWNlTmFtZSwgcHJvamVjdCkpOwotICB9Ci0KLXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpbXBsZW1lbnRzSW50ZXJmYWNlKEphdmFDbGFzcyBqYXZhQ2xhc3MsIEphdmFDbGFzcyBpbnRlcmZhY2VDbGFzcykKLSAgewotICAgCi0gICAgaWYgKCFqYXZhQ2xhc3MuaXNFeGlzdGluZ1R5cGUoKSkgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghaW50ZXJmYWNlQ2xhc3MuaXNFeGlzdGluZ1R5cGUoKSkgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgcmV0dXJuIGphdmFDbGFzcy5pbXBsZW1lbnRzSW50ZXJmYWNlKGludGVyZmFjZUNsYXNzKTsKLSAgfQotCi0gIC8qKgotICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2xhc3MgZXh0ZW5kcyB0aGUgc3BlY2lmaWVkIHN1cGVyY2xhc3MKLSAgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgY2xhc3MKLSAgKiBAcGFyYW0gc3VwZXJDbGFzc05hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBzdXBlcmNsYXNzCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QKLSAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNsYXNzIGFuZCBzdXBlckNsYXNzIGFyZSBsb2FkYWJsZSBmcm9tIHRoZSBwcm9qZWN0IGFuZAotICAqICAgICAgICAgdGhlIGNsYXNzIGV4dGVuZHMgdGhlIHN1cGVyQ2xhc3MKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGV4dGVuZHNDbGFzcyhTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgc3VwZXJDbGFzc05hbWUsIElQcm9qZWN0IHByb2plY3QpCi0gICAgICAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGV4dGVuZHNDbGFzcyhnZXRKYXZhQ2xhc3MoY2xhc3NOYW1lLHByb2plY3QpLCBnZXRKYXZhQ2xhc3Moc3VwZXJDbGFzc05hbWUsIHByb2plY3QpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBleHRlbmRzQ2xhc3MoSmF2YUNsYXNzIGphdmFDbGFzcywgSmF2YUNsYXNzIHN1cGVyQ2xhc3MpCi0gIHsKLSAgICByZXR1cm4gc3VwZXJDbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGphdmFDbGFzcyk7Ci0gIH0KLQotICAvKioKLSAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNsYXNzIGlzIGFjdHVhbGx5IGFuIGludGVyZmFjZQotICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjbGFzcwotICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0Ci0gICogQHJldHVybiBUcnVlIGlmIHRoZSBjbGFzcyBpcyBsb2FkYWJsZSBmcm9tIHRoZSBwcm9qZWN0IGFuZCBpcyAKLSAgKiAgICAgICAgIGFjdHVhbGx5IGFuIGludGVyZmFjZQotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNJbnRlcmZhY2UoU3RyaW5nIGNsYXNzTmFtZSwgSVByb2plY3QgcHJvamVjdCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgICByZXR1cm4gaXNJbnRlcmZhY2UoZ2V0SmF2YUNsYXNzKGNsYXNzTmFtZSwgcHJvamVjdCkpOwotICB9Ci0KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNJbnRlcmZhY2UoSmF2YUNsYXNzIGphdmFDbGFzcykKLSAgewotICAgICAgcmV0dXJuIGphdmFDbGFzcy5pc0ludGVyZmFjZSgpOwotICB9Ci0gcHVibGljIHN0YXRpYyBib29sZWFuIGhhc0Fic3RyYWN0TWV0aG9kcyAoU3RyaW5nIGNsYXNzTmFtZSwgSVByb2plY3QgcHJvamVjdCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAJewotCSAgICByZXR1cm4gaGFzQWJzdHJhY3RNZXRob2RzKGdldEphdmFDbGFzcyhjbGFzc05hbWUsIHByb2plY3QpKTsKLSAgCX0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzQWJzdHJhY3RNZXRob2RzIChKYXZhQ2xhc3MgamF2YUNsYXNzKQotIAl7Ci0JICAgTGlzdCBtZXRob2RMaXN0ID0gamF2YUNsYXNzLmdldE1ldGhvZHMoKTsKLSAgICAgICBpZiAobWV0aG9kTGlzdD09bnVsbCkKLSAgICAgIAlyZXR1cm4gZmFsc2U7Ci0KLQkgICBJdGVyYXRvciBpTWV0aG9kcyA9IG1ldGhvZExpc3QuaXRlcmF0b3IoKTsKLQkgICB3aGlsZSAoaU1ldGhvZHMuaGFzTmV4dCgpKQotICAgIAl7Ci0gICAgICAJCU1ldGhvZCB0aGlzTWV0aG9kID0gKE1ldGhvZClpTWV0aG9kcy5uZXh0KCk7Ci0JCQlpZiAoIHRoaXNNZXRob2QuaXNBYnN0cmFjdCgpKSByZXR1cm4gdHJ1ZTsKLQkgICAJfQotCQlyZXR1cm4gZmFsc2U7Ci0gCX0KLQotICAvKiAKLSAgICogCi0gICAqLwotIC8qKgotICogQHBhcmFtIGNsYXNzUU5hbWUgRnVsbHkgcXVhbGlmaWVkIGNsYXNzbmFtZSAocGFja2FnZU5hbWUgKyB0eXBlTmFtZSkKLSAqIEBwYXJhbSBwcm9qZWN0Ci0gKiBAcmV0dXJuCi0gKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLSAqLwotcHVibGljIHN0YXRpYyBKYXZhQ2xhc3MgZ2V0SmF2YUNsYXNzKFN0cmluZyBjbGFzc1FOYW1lICwgSVByb2plY3QgcHJvamVjdCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAJewotCSAJRU1GTmF0dXJlIGpNT0YgPSBKZW1Qcm9qZWN0VXRpbGl0aWVzLmdldEpFTV9FTUZfTmF0dXJlKHByb2plY3QsIHRydWUpOwotCSAJcmV0dXJuIChKYXZhQ2xhc3MpSmF2YVJlZkZhY3RvcnkuZUlOU1RBTkNFLnJlZmxlY3RUeXBlKGNsYXNzUU5hbWUsak1PRi5nZXRSZXNvdXJjZVNldCgpKTsKLSAJfQotIAotIC8qKgotICogQHBhcmFtIHBhY2thZ2VOYW1lCi0gKiBAcGFyYW0gdHlwZU5hbWUKLSAqIEBwYXJhbSBwcm9qZWN0Ci0gKiBAcmV0dXJuCi0gKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLSAqLwotcHVibGljIHN0YXRpYyBKYXZhQ2xhc3MgZ2V0SmF2YUNsYXNzKFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIHR5cGVOYW1lICwgSVByb2plY3QgcHJvamVjdCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JIAlFTUZOYXR1cmUgak1PRiA9IEplbVByb2plY3RVdGlsaXRpZXMuZ2V0SkVNX0VNRl9OYXR1cmUocHJvamVjdCwgdHJ1ZSk7Ci0JIAlyZXR1cm4gKEphdmFDbGFzcylKYXZhUmVmRmFjdG9yeS5lSU5TVEFOQ0UucmVmbGVjdFR5cGUocGFja2FnZU5hbWUsIHR5cGVOYW1lLCBqTU9GLmdldFJlc291cmNlU2V0KCkpOwotCX0KLQotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkU0VJRmlsZShKYXZhQ2xhc3MgYmVhbkNsYXNzLCBKYXZhQ2xhc3Mgc2VpQ2xhc3MpCi0gCXsKLSAJCWlmICghc2VpQ2xhc3MuaXNJbnRlcmZhY2UoKSkKLSAJCQlyZXR1cm4gZmFsc2U7Ci0KLQkJVmVjdG9yIGJlYW5NZXRob2RzTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAJCUxpc3QgYmVhbk1ldGhvZHMgPSBiZWFuQ2xhc3MuZ2V0TWV0aG9kcygpOwotCQlJdGVyYXRvciBiZWFuTWV0aG9kc0l0ZXJhdG9yID0gYmVhbk1ldGhvZHMuaXRlcmF0b3IoKTsKLQkgICAJd2hpbGUgKGJlYW5NZXRob2RzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIAl7Ci0gICAgICAJCU1ldGhvZCB0aGlzTWV0aG9kID0gKE1ldGhvZCliZWFuTWV0aG9kc0l0ZXJhdG9yLm5leHQoKTsKLQkJCWJlYW5NZXRob2RzTGlzdC5hZGQodGhpc01ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpOwotCSAgIAl9Ci0KLQkJTGlzdCBzZWlNZXRob2RzID0gc2VpQ2xhc3MuZ2V0TWV0aG9kcygpOwotIAkJaWYgKGJlYW5NZXRob2RzID09IG51bGwgKSB7Ci0gCQkJaWYgKCBzZWlNZXRob2RzID09IG51bGwpIHJldHVybiB0cnVlOwotIAkJCWVsc2UJcmV0dXJuIGZhbHNlOwotIAkJfQotCQlpZiAoc2VpTWV0aG9kcyA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0KLQkJSXRlcmF0b3Igc2VpTWV0aG9kc0l0ZXJhdG9yID0gc2VpTWV0aG9kcy5pdGVyYXRvcigpOwotCSAgIAl3aGlsZSAoc2VpTWV0aG9kc0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAJewotICAgICAgCQlNZXRob2QgdGhpc01ldGhvZCA9IChNZXRob2Qpc2VpTWV0aG9kc0l0ZXJhdG9yLm5leHQoKTsKLQkJCWlmICggIWJlYW5NZXRob2RzTGlzdC5jb250YWlucyh0aGlzTWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSkpIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JICAgCX0KLQkJcmV0dXJuIHRydWU7Ci0gCQkKLSAJfQotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vUmVzb3VyY2VVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vUmVzb3VyY2VVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWIwMzEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1Jlc291cmNlVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzMwICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyMSAgIDEzNjc2MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI0ICAgMTE1NjkwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MDMgICAxMjY4MTkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA4MDEyMiAgIDIxNTg2NiB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZyBIYQotICogMjAwODAzMDMgICAyMTg2OTYgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgQVBJcyB1c2luZyBFSkJBcnRpZmFjdEVkaXQgbm90IGFibGUgdG8gZGVhbCB3aXRoIHNvbWUgRUpCIDMuMCBiZWFucyBwcm9wZXJseQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklQYWNrYWdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVBhY2thZ2VGcmFnbWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvbnZlbnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuYXBwbGljYXRpb25jbGllbnQuY29tcG9uZW50Y29yZS51dGlsLkFwcENsaWVudEFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb21wb25lbnRjb3JlLnV0aWwuRUFSQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuY29tcG9uZW50Y29yZS51dGlsLkVKQkFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wcm9qZWN0LkoyRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUuZWpiLlNlc3Npb25CZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwuU3RydWN0dXJlRWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwuV29ya2JlbmNoQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbEZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5tb2RlbC5JVVJMUHJvdmlkZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyB1c2VmdWwgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIEVjbGlwc2UgcmVzb3VyY2VzLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUmVzb3VyY2VVdGlscyB7Ci0KLQkvLyBLZWVwcyB0aGUgSVdvcmtzcGFjZVJvb3QgaGFuZ2luZyBhcm91bmQuIFNlZSBnZXRXb3Jrc3BhY2VSb290KCkuCi0JcHJpdmF0ZSBzdGF0aWMgSVdvcmtzcGFjZVJvb3Qgcm9vdF8gPSBudWxsOwotCi0JLy8gS2VlcHMgdGhlIElXb3Jrc3BhY2UgaGFuZ2luZyBhcm91bmQuIFNlZSBnZXRXb3Jrc3BhY2UoKS4KLQotCXByaXZhdGUgc3RhdGljIElXb3Jrc3BhY2Ugd29ya3NwYWNlXyA9IG51bGw7Ci0KLQkvKioKLQkgKiBBcyByZXR1cm5lZCBieSB7QGxpbmsgI2dldFByb2plY3RUeXBlIGdldFByb2plY3RUeXBlKCl9LCBpbmRpY2F0ZXMgdGhhdAotCSAqIHRoZSBnaXZlbiBwcm9qZWN0IGhhcyBubyBKYXZhIG9yIFdlYiBuYXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBieXRlIFBST0pFQ1RfVFlQRV9OT05FID0gMDsKLQotCS8qKgotCSAqIEFzIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0UHJvamVjdFR5cGUgZ2V0UHJvamVjdFR5cGUoKX0sIGluZGljYXRlcyB0aGF0Ci0JICogdGhlIGdpdmVuIHByb2plY3QgaGFzIGEgSmF2YSBwcm9qZWN0IG5hdHVyZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJ5dGUgUFJPSkVDVF9UWVBFX0pBVkEgPSAxOwotCi0JLyoqCi0JICogQXMgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRQcm9qZWN0VHlwZSBnZXRQcm9qZWN0VHlwZSgpfSwgaW5kaWNhdGVzIHRoYXQKLQkgKiB0aGUgZ2l2ZW4gcHJvamVjdCBoYXMgYSBXZWIgcHJvamVjdCBuYXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBieXRlIFBST0pFQ1RfVFlQRV9XRUIgPSAyOwotCi0JLyoqCi0JICogQXMgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRQcm9qZWN0VHlwZSBnZXRQcm9qZWN0VHlwZSgpfSwgaW5kaWNhdGVzIHRoYXQKLQkgKiB0aGUgZ2l2ZW4gcHJvamVjdCBoYXMgYW4gRUpCIHByb2plY3QgbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYnl0ZSBQUk9KRUNUX1RZUEVfRUpCID0gNDsKLQkKLQkvKioKLQkgKiBBcyByZXR1cm5lZCBieSB7QGxpbmsgI2dldFByb2plY3RUeXBlIGdldFByb2plY3RUeXBlKCl9LCBpbmRpY2F0ZXMgdGhhdAotCSAqIHRoZSBnaXZlbiBwcm9qZWN0IGhhcyBhbiBBcHBsaWNhdGlvbiBjbGllbnQgcHJvamVjdCBuYXR1cmUuCi0JICovCQotCXB1YmxpYyBzdGF0aWMgYnl0ZSBQUk9KRUNUX1RZUEVfQVBQQ0xJRU5UID0gODsKLQotCS8qKgotCSAqIFRoZSBTT0FQIHJwY3JvdXRlciBzZXJ2bGV0IGV4dGVuc2lvbiB0byBiZSBhZGRlZCB0byB3ZWIgcHJvamVjdCBVUkwKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTRVJWTEVUX0VYVCA9ICIvc2VydmxldC9ycGNyb3V0ZXIiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfQ0xJRU5UX1dFQl9QUk9KRUNUX0VYVCA9ICJDbGllbnQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NMSUVOVF9FSkJfUFJPSkVDVF9FWFQgPSAiRUpCQ2xpZW50IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9FSkJfUFJPSkVDVF9OQU1FID0gIldlYlNlcnZpY2VFSkJQcm9qZWN0IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9FSkJfQ09NUE9ORU5UX05BTUUgPSAiV2ViU2VydmljZUVKQiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfV0VCX1BST0pFQ1RfTkFNRSA9ICJXZWJTZXJ2aWNlUHJvamVjdCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfV0VCX0NPTVBPTkVOVF9OQU1FID0gIldlYlNlcnZpY2VQcm9qZWN0IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9ST1VURVJfUFJPSkVDVF9FWFQgPSAiUm91dGVyIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NFUlZJQ0VfRUFSX1BST0pFQ1RfTkFNRSA9ICJXZWJTZXJ2aWNlUHJvamVjdEVBUiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU0VSVklDRV9FQVJfQ09NUE9ORU5UX05BTUUgPSAiV2ViU2VydmljZVByb2plY3RFQVIiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NMSUVOVF9FQVJfUFJPSkVDVF9OQU1FID0gIldlYlNlcnZpY2VQcm9qZWN0Q2xpZW50RUFSIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9DTElFTlRfRUFSX0NPTVBPTkVOVF9OQU1FID0gIldlYlNlcnZpY2VQcm9qZWN0Q2xpZW50RUFSIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9FQVJfRVhUID0gIkVBUiI7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBJV29ya3NwYWNlUm9vdCBvYmplY3QuCi0JICogQHJldHVybiBUaGUgSVdvcmtzcGFjZVJvb3Qgb2JqZWN0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZVJvb3QgZ2V0V29ya3NwYWNlUm9vdCgpIHsKLQkJaWYgKHJvb3RfID09IG51bGwpIHsKLQkJCXJvb3RfID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJfQotCQlyZXR1cm4gcm9vdF87Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSVdvcmtzcGFjZSBvYmplY3QuCi0JICogQHJldHVybiBUaGUgSVdvcmtzcGFjZSBvYmplY3QuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJaWYgKHdvcmtzcGFjZV8gPT0gbnVsbCkgewotCQkJaWYgKHJvb3RfID09IG51bGwpIHsKLQkJCQlyb290XyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQl9Ci0JCQl3b3Jrc3BhY2VfID0gcm9vdF8uZ2V0V29ya3NwYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHdvcmtzcGFjZV87Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIElSZXNvdXJjZX1vZiB0aGUKLQkgKiBnaXZlbiBhYnNvbHV0ZSBwYXRobmFtZSBvciBudWxsIGlmIG5vIHN1Y2ggcmVzb3VyY2UgZXhpc3RzLgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGhuYW1lCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcmVzb3VyY2UuCi0JICogQHJldHVybiBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElSZXNvdXJjZSBmaW5kUmVzb3VyY2UoU3RyaW5nIGFic29sdXRlUGF0aG5hbWUpIHsKLQkJaWYgKGFic29sdXRlUGF0aG5hbWUgPT0gbnVsbCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIGZpbmRSZXNvdXJjZShuZXcgUGF0aChhYnNvbHV0ZVBhdGhuYW1lKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIElSZXNvdXJjZX1vZiB0aGUKLQkgKiBnaXZlbiBhYnNvbHV0ZSBwYXRoIG9yIG51bGwgaWYgbm8gc3VjaCByZXNvdXJjZSBleGlzdHMuCi0JICogCi0JICogQHBhcmFtIGFic29sdXRlUGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIDxjb2RlPklQYXRoPC9jb2RlPiBvZiB0aGUgcmVzb3VyY2UuCi0JICogQHJldHVybiBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElSZXNvdXJjZSBmaW5kUmVzb3VyY2UoSVBhdGggYWJzb2x1dGVQYXRoKSB7Ci0JCWlmIChhYnNvbHV0ZVBhdGggPT0gbnVsbCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIoYWJzb2x1dGVQYXRoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UgSVJlc291cmNlfW9mIHRoZQotCSAqIGdpdmVuIGZpbGUgc3lzdGVtIHJlbGF0aXZlIHBhdGhuYW1lIGFuZCBwcm9qZWN0IG9yIG51bGwgaWYgbm8gc3VjaCByZXNvdXJjZSBleGlzdHMuCi0JICoKLQkgKiBAcGFyYW0gZmlsZVBhdGggRmlsZSBzeXN0ZW0gcmVsYXRpdmUgcGF0aG5hbWUKLQkgKiBAcGFyYW0gcHJvamVjdCBQcm9qZWN0Ci0JICogQHJldHVybiBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElSZXNvdXJjZSBmaW5kUmVzb3VyY2VBdExvY2F0aW9uKFN0cmluZyBmaWxlUGF0aCwgSVByb2plY3QgcHJvamVjdCkgewotCQkKLQkJcmV0dXJuIGZpbmRSZXNvdXJjZShmaW5kUGF0aEF0TG9jYXRpb24oIG5ldyBQYXRoKGZpbGVQYXRoKSwgcHJvamVjdCkpOwotCX0KLQkKLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBhdHRlbXB0cyB0byBjb252ZXJ0IGEgcGF0aCB0aGF0IGlzIHJlbGF0aXZlIHRvIGEgZmlsZSBzeXN0ZW0KLQkgKiB0byBhIHBhdGggdGhhdCBpcyByZWxhdGl2ZSB0byB0aGUgd29ya3NwYWNlLiBJbnN0ZWFkIG9mIGNvbXBhcmluZyB0aGUKLQkgKiBmaWxlUGF0aCB3aXRoIHRoZSBpbnN0YWxsIGxvY2F0aW9uIG9mIHRoZSB3b3Jrc3BhY2UgKGkuZS4KLQkgKiBQbGF0Zm9ybS5nZXRMb2NhdGlvbigpKSwgdGhlIGZpbGVQYXRoIGlzIGNvbXBhcmVkIHdpdGggdGhlIGxvY2F0aW9uIG9mIHRoZSBwcm9qZWN0Ci0JICogc2luY2UgdGhlIHByb2plY3QgY291bGQgYmUgaW4gYSBsb2NhdGlvbiBvdGhlciB0aGFuIHRoZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiByZWxhdGl2ZSB0byB0aGUKLQkgKiB3b3Jrc3BhY2UuCi0JICogCi0JICogQHBhcmFtIGZpbGVQYXRoCUZpbGUgcGF0aCByZWxhdGl2ZSB0byBhIGZpbGUgc3lzdGVtCi0JICogQHBhcmFtIHByb2plY3QJVGhlIHByb2plY3QgdGhlIGZpbGUgaXMgaW4KLQkgKiBAcmV0dXJuIAkJCVBhdGggcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZmluZFBhdGhBdExvY2F0aW9uKElQYXRoIGZpbGVQYXRoLCBJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCUlQYXRoIHJlc3VsdCA9IG51bGw7Ci0KLQkJSVBhdGggcHJvamVjdExvY2F0aW9uID0gcHJvamVjdC5nZXRMb2NhdGlvbigpOwotCi0JCWlmIChwcm9qZWN0TG9jYXRpb24ubWF0Y2hpbmdGaXJzdFNlZ21lbnRzKGZpbGVQYXRoKSA9PSBwcm9qZWN0TG9jYXRpb24KLQkJCQkuc2VnbWVudENvdW50KCkpIHsKLQkJCWZpbGVQYXRoID0gZmlsZVBhdGgucmVtb3ZlRmlyc3RTZWdtZW50cyhwcm9qZWN0TG9jYXRpb24KLQkJCQkJLnNlZ21lbnRDb3VudCgpIC0gMSk7Ci0JCQlyZXN1bHQgPSBmaWxlUGF0aC5zZXREZXZpY2UobnVsbCk7Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQkvKioKLQkgKiBWYWxpZGF0ZXMgdGhlIGdpdmVuIHN0cmluZyBhcyBhIG5hbWUgZm9yIGEgcmVzb3VyY2Ugb2YgdGhlIGdpdmVuIHR5cGUocykuCi0JICogVGhpcyBtZXRob2Qgb2JleXMgdGhlIGNvbnRyYWN0IG9mCi0JICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2UjdmFsaWRhdGVOYW1lIElXb3Jrc3BhY2UudmFsaWRhdGVOYW1lKCl9LgotCSAqIAotCSAqIEBwYXJhbSBzZWdtZW50Ci0JICogICAgICAgICAgICBUaGUgcGF0aCB0byB2YWxpZGF0ZS4KLQkgKiBAcGFyYW0gdHlwZU1hc2sKLQkgKiAgICAgICAgICAgIFRoZSA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+IHR5cGUgb3IgdHlwZXMuCi0JICogQHJldHVybiBUaGUgc3RhdHVzIHdpdGggYSB2YWx1ZSBpZiA8Y29kZT5JU3RhdHVzLk9LPC9jb2RlPiBpZiB0aGUgcGF0aAotCSAqICAgICAgICAgaXMgdmFsaWQsIG9yIHdpdGggYXBwcm9wcmlhdGUgc2V2ZXJpdHkgYW5kIG1lc3NhZ2UgaW5mb3JtYXRpb24gaWYKLQkgKiAgICAgICAgIHRoZSBwYXRoIGlzIG5vdCB2YWxpZC4KLQkgKiAgICAgICAgIAotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkICAgICAgICAgCi0JICovCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzIHZhbGlkYXRlTmFtZShTdHJpbmcgc2VnbWVudCwgaW50IHR5cGVNYXNrKSB7Ci0JCXJldHVybiBnZXRXb3Jrc3BhY2UoKS52YWxpZGF0ZU5hbWUoc2VnbWVudCwgdHlwZU1hc2spOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSBwYXRoIG9mIGEgcmVzb3VyY2Ugb2YgdGhlIGdpdmVuCi0JICogdHlwZShzKS4gVGhpcyBtZXRob2Qgb2JleXMgdGhlIGNvbnRyYWN0IG9mCi0JICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2UjdmFsaWRhdGVQYXRoIElXb3Jrc3BhY2UudmFsaWRhdGVQYXRoKCl9LgotCSAqIAotCSAqIEBwYXJhbSBwYXRoCi0JICogICAgICAgICAgICBUaGUgcGF0aCB0byB2YWxpZGF0ZS4KLQkgKiBAcGFyYW0gdHlwZU1hc2sKLQkgKiAgICAgICAgICAgIFRoZSA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+IHR5cGUgb3IgdHlwZXMuCi0JICogQHJldHVybiBUaGUgc3RhdHVzIHdpdGggYSB2YWx1ZSBpZiA8Y29kZT5JU3RhdHVzLk9LPC9jb2RlPiBpZiB0aGUgcGF0aAotCSAqICAgICAgICAgaXMgdmFsaWQsIG9yIHdpdGggYXBwcm9wcmlhdGUgc2V2ZXJpdHkgYW5kIG1lc3NhZ2UgaW5mb3JtYXRpb24gaWYKLQkgKiAgICAgICAgIHRoZSBwYXRoIGlzIG5vdCB2YWxpZC4KLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZCAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElTdGF0dXMgdmFsaWRhdGVQYXRoKFN0cmluZyBwYXRoLCBpbnQgdHlwZU1hc2spIHsKLQkJcmV0dXJuIGdldFdvcmtzcGFjZSgpLnZhbGlkYXRlUGF0aChwYXRoLCB0eXBlTWFzayk7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGVzIHRoZSBnaXZlbiBKYXZhIHR5cGUgbmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gdHlwZU5hbWUKLQkgKiAgICAgICAgICAgIFRoZSBKYXZhIHR5cGUgbmFtZS4KLQkgKiBAcmV0dXJuIFRoZSBzdGF0dXMgd2l0aCBhIHZhbHVlIG9mIDxjb2RlPklTdGF0dXMuT0s8L2NvZGU+IGlmIHRoZSBuYW1lCi0JICogICAgICAgICBpcyB2YWxpZCwgb3Igd2l0aCBhcHByb3ByaWF0ZSBzZXZlcml0eSBhbmQgbWVzc2FnZSBpbmZvcm1hdGlvbiBpZgotCSAqICAgICAgICAgbmFtZSBpcyBub3QgdmFsaWQuIFRoZSBwcmltaXRpdmUgdHlwZXMgKGJvb2xlYW4sIGNoYXIsIGJ5dGUsCi0JICogICAgICAgICBzaG9ydCwgaW50LCBsb25nLCBmbG9hdCwgZG91YmxlKSBhcmUgdmFsaWQuIEFycmF5cyBvZiB2YWxpZCB0eXBlcwotCSAqICAgICAgICAgYXJlIHRoZW1zZWx2ZXMgdmFsaWQuCi0JICogQGRlcHJlY2F0ZWQgdXNlIEphdmFDb252ZW50aW9ucyBpbiB0aGUgamR0IGNvcmUgCi0JICovCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzIHZhbGlkYXRlSmF2YVR5cGVOYW1lKFN0cmluZyB0eXBlTmFtZSkgewotCQkvLwotCQkvLyBTdHJpcCBvZmYgdGhlIHRyYWlsaW5nIGFycmF5IGJpdHMsIGlmIGFueS4KLQkJLy8KLQkJaW50IGEgPSB0eXBlTmFtZS5pbmRleE9mKCdbJyk7Ci0JCWlmIChhID4gMCkgewotCQkJdHlwZU5hbWUgPSB0eXBlTmFtZS5zdWJzdHJpbmcoMCwgYSk7Ci0JCX0KLQkJLy8KLQkJLy8gQWxsb3cgcHJpbWl0aXZlcy4KLQkJLy8KLQkJaWYgKGlzUHJpbWl0aXZlSmF2YVR5cGUodHlwZU5hbWUpKSB7Ci0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBXZWJTZXJ2aWNlUGx1Z2luLklELCAwLCAiIiwgbnVsbCk7Ci0JCX0KLQkJLy8KLQkJLy8gRGVmZXIgdG8gSmF2YUNvbnZlbnRpb25zLgotCQkvLwotCQlyZXR1cm4gSmF2YUNvbnZlbnRpb25zLnZhbGlkYXRlSmF2YVR5cGVOYW1lKHR5cGVOYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIDxjb2RlPnR5cGVOYW1lPC9jb2RlPiBpcyBhIEphdmEgcHJpbWl0aXZlCi0JICogKGJvb2xlYW4sIGNoYXIsIGJ5dGUsIHNob3J0LCBpbnQsIGxvbmcsIGZsb2F0LCBkb3VibGUpLgotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHlwZSBuYW1lIGlzIGEgSmF2YSBwcmltaXRpdmUuCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQcmltaXRpdmVKYXZhVHlwZShTdHJpbmcgdHlwZU5hbWUpIHsKLQkJcmV0dXJuICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImNoYXIiKQotCQkJCXx8IHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygic2hvcnQiKQotCQkJCXx8IHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJsb25nIikKLQkJCQl8fCB0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaGFuZGxlIG9mIHRoZSBJUHJvamVjdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBnaXZlbgotCSAqIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4uIE5laXRoZXIgdGhlIGdpdmVuIHBhdGggbm9yIHRoZSBwcm9qZWN0IG5lZWQKLQkgKiBleGlzdCBpbiB0aGUgd29ya3NwYWNlLiBUaGUgcGF0aCBtdXN0IGJlIGFic29sdXRlLCBhbmQgbXVzdCBjb25zaXN0IG9mIGF0Ci0JICogbGVhc3Qgb25lIHNlZ21lbnQuCi0JICogCi0JICogQHJldHVybiBBbiBJUHJvamVjdCBoYW5kbGUgZm9yIHRoZSBwcm9qZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdpdmVuCi0JICogICAgICAgICA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+LCBvciBudWxsIGlmIHRoZSBwYXRoIGRvZXMgbm90Ci0JICogICAgICAgICBzcGVjaWZ5IGEgcHJvamVjdC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGdldFByb2plY3RPZihJUGF0aCBhYnNvbHV0ZVBhdGgpIHsKLQkJaWYgKGFic29sdXRlUGF0aC5pc0Fic29sdXRlKCkpIHsKLQkJCVN0cmluZyBwcm9qZWN0TmFtZSA9IGFic29sdXRlUGF0aC5zZWdtZW50KDApOwotCQkJaWYgKHByb2plY3ROYW1lICE9IG51bGwpIHsKLQkJCQlyZXR1cm4gZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXRDb21wb25lbnRPZihJUGF0aCBhYnNvbHV0ZVBhdGgpewotCQlpZiAoYWJzb2x1dGVQYXRoLmlzQWJzb2x1dGUoKSkgewotCQkJCVN0cmluZyBwcm9qZWN0TmFtZSA9IGFic29sdXRlUGF0aC5zZWdtZW50KDApOwotCQkJCUlQcm9qZWN0IHByb2plY3QgPSBnZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCQkJaWYgKHByb2plY3ROYW1lICE9IG51bGwpIHsKLQkJCQkJcmV0dXJuIENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXRDb21wb25lbnRPZihJUmVzb3VyY2UgcmVzKQotCXsKLQkJSVZpcnR1YWxSZXNvdXJjZVtdIHZyZXNvdXJjZXMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZVJlc291cmNlcyhyZXMpOwotCQlJVmlydHVhbENvbXBvbmVudCB2Y29tcCA9IG51bGw7Ci0JCWlmICh2cmVzb3VyY2VzICE9IG51bGwgJiYgdnJlc291cmNlcy5sZW5ndGg+MCkKLQkJewotCQkJSVZpcnR1YWxSZXNvdXJjZSB2cmVzID0gdnJlc291cmNlc1swXTsKLQkJCXZjb21wID0gdnJlcy5nZXRDb21wb25lbnQoKTsKLQkJfQotCQlyZXR1cm4gdmNvbXA7Ci0JfQotCQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gaXMgYSBKYXZhIFByb2plY3QuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvamVjdCBpcyBhIEphdmEgUHJvamVjdC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNKYXZhUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRyeQotCQl7Ci0JCSAgcmV0dXJuIHByb2plY3QuaGFzTmF0dXJlKEphdmFDb3JlLk5BVFVSRV9JRCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JCXsKLQkJCS8vUmV0dXJuIGZhbHNlIGlmIENvcmVFeGNlcHRpb24gb2NjdXJzIHdoaWxlIGNoZWNraW5nIG5hdHVyZS4KLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gaXMgYSBKYXZhIFByb2plY3QuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvamVjdCBpcyBhIEphdmEgUHJvamVjdC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcnVlSmF2YVByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCQlyZXR1cm4gKCFpc1dlYlByb2plY3QocHJvamVjdCkgJiYgIWlzQXBwQ2xpZW50UHJvamVjdChwcm9qZWN0KSAmJiAhaXNFQVJQcm9qZWN0KHByb2plY3QpCi0JCQkJJiYgIWlzRUpCUHJvamVjdChwcm9qZWN0KSAmJiBpc0phdmFQcm9qZWN0KHByb2plY3QpKTsKLQkJLyoKLQkJICogdHJ5IHsgU3RyaW5nW10gbmF0dXJlcyA9IHByb2plY3QuZ2V0RGVzY3JpcHRpb24oKS5nZXROYXR1cmVJZHMoKTsKLQkJICogcmV0dXJuIChuYXR1cmVzLmxlbmd0aCA9PSAxICYmCi0JCSAqIG5hdHVyZXNbMF0uZXF1YWxzKEphdmFDb3JlLk5BVFVSRV9JRCkpOyB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsgfQotCQkgKiByZXR1cm4gZmFsc2U7Ci0JCSAqLwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gaXMgYSBXZWIgUHJvamVjdC4KLQkgKiBOb3RlOiBGb3IgY29tcG9uZW50czsgdXNlIEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudCgpCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvamVjdCBpcyBhIFdlYiBQcm9qZWN0LgotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXZWJQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLQkJYm9vbGVhbiBpc1dlYiA9IGZhbHNlOwotCQlTdHJ1Y3R1cmVFZGl0IG1jID0gbnVsbDsKLQkJdHJ5IHsKLQkJICBtYyA9IFN0cnVjdHVyZUVkaXQuZ2V0U3RydWN0dXJlRWRpdEZvclJlYWQocHJvamVjdCk7Ci0JCSAgV29ya2JlbmNoQ29tcG9uZW50W10gd2JjcyA9IG1jLmdldFdvcmtiZW5jaE1vZHVsZXMoKTsKLQkJICBpZiAod2Jjcy5sZW5ndGghPTApIHsKLQkJCSAgLy9pc1dlYiA9IFdlYkFydGlmYWN0RWRpdC5pc1ZhbGlkV2ViTW9kdWxlKHdiY3NbMF0pOwotCQkgIH0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZXgpewotCQkJLy8gaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCWZpbmFsbHl7Ci0JCQlpZiAobWMhPW51bGwpCi0JCQkJbWMuZGlzcG9zZSgpOwotCQl9Ci0KLQkJcmV0dXJuIGlzV2ViOwotCX0KLQotCS8qKgotCSAqIE5vdGU6IGZvciBjb21wb25lbnRzOyB1c2UgSjJFRVV0aWxzLmlzRUFSQ29tcG9uZW50KCkKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLSAgICogCi0gICAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUFSUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KXsKLQkJYm9vbGVhbiBpc0VBUiA9IGZhbHNlOwotCQlTdHJ1Y3R1cmVFZGl0IG1jID0gbnVsbDsKLQkJdHJ5IHsKLQkJICBtYyA9IFN0cnVjdHVyZUVkaXQuZ2V0U3RydWN0dXJlRWRpdEZvclJlYWQocHJvamVjdCk7Ci0JCSAgV29ya2JlbmNoQ29tcG9uZW50W10gd2JjcyA9IG1jLmdldFdvcmtiZW5jaE1vZHVsZXMoKTsKLQkJICBpZiAod2Jjcy5sZW5ndGghPTApIHsKLQkJCUVBUkFydGlmYWN0RWRpdCBlYXJFZGl0ID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkgIC8vZWFyRWRpdCA9IEVBUkFydGlmYWN0RWRpdC5nZXRFQVJBcnRpZmFjdEVkaXRGb3JSZWFkKHdiY3NbMF0pOwotCQkJICBpZiAoZWFyRWRpdCE9bnVsbCl7Ci0JCQkJaXNFQVIgPSB0cnVlOwotCQkJICB9Ci0JCQl9Ci0JCQlmaW5hbGx5ewotCQkJCWlmIChlYXJFZGl0IT1udWxsKQotCQkJCQllYXJFZGl0LmRpc3Bvc2UoKTsKLQkJCX0KLQkJICB9Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGV4KXt9Ci0JCWZpbmFsbHl7Ci0JCQlpZiAobWMhPW51bGwpCi0JCQkJbWMuZGlzcG9zZSgpOwotCQl9Ci0JCQotCQlyZXR1cm4gaXNFQVI7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gaXMgYW4gRUpCIDEuMSBvciBFSkIgMi4wCi0JICogUHJvamVjdC4KLQkgKiBOb3RlOiBmb3IgY29tcG9uZW50cywgdXNlIEoyRUVVdGlscy5pc0VKQkNvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHByb2plY3QgaXMgYW4gRUpCIDEuMSBvciBhbiBFSkIgMi4wIFByb2plY3QuCi0gICAqIAotICAgKiBAZGVwcmVjYXRlZAotICAgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFSkJQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLQkJYm9vbGVhbiBpc0VKQiA9IGZhbHNlOwotCQlTdHJ1Y3R1cmVFZGl0IG1jID0gbnVsbDsKLQkJdHJ5IHsKLQkJICBtYyA9IFN0cnVjdHVyZUVkaXQuZ2V0U3RydWN0dXJlRWRpdEZvclJlYWQocHJvamVjdCk7Ci0JCSAgV29ya2JlbmNoQ29tcG9uZW50W10gd2JjcyA9IG1jLmdldFdvcmtiZW5jaE1vZHVsZXMoKTsKLQkJICBpZiAod2Jjcy5sZW5ndGghPTApIHsKLQkJCUVKQkFydGlmYWN0RWRpdCBlamJFZGl0ID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkgIC8vZWpiRWRpdCA9IEVKQkFydGlmYWN0RWRpdC5nZXRFSkJBcnRpZmFjdEVkaXRGb3JSZWFkKHdiY3NbMF0pOwotCQkJICBpZiAoZWpiRWRpdCE9bnVsbCl7Ci0JCQkJaXNFSkIgPSB0cnVlOwotCQkJICB9Ci0JCQl9Ci0JCQlmaW5hbGx5ewotCQkJCWlmIChlamJFZGl0IT1udWxsKQotCQkJCQllamJFZGl0LmRpc3Bvc2UoKTsKLQkJCX0KLQkJICB9Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGV4KXt9Ci0JCWZpbmFsbHl7Ci0JCQlpZiAobWMhPW51bGwpCi0JCQkJbWMuZGlzcG9zZSgpOwotCQl9Ci0JCQotCQlyZXR1cm4gaXNFSkI7CQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gaXMgYW4gQXBwbGljYXRpb24gQ2xpZW50Ci0JICogUHJvamVjdC4KLQkgKiBOb3RlOiBmb3IgY29tcG9uZW50cywgdXNlIEoyRUVVdGlscy5pc0FwcENsaWVudENvbXBvbmVudCgpCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvamVjdCBpcyBhbiBBcHBsaWNhdGlvbiBDbGllbnQgUHJvamVjdAotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBcHBDbGllbnRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLQkJYm9vbGVhbiBpc0FwcENsaWVudCA9IGZhbHNlOwotCQlTdHJ1Y3R1cmVFZGl0IG1jID0gbnVsbDsKLQkJdHJ5IHsKLQkJICBtYyA9IFN0cnVjdHVyZUVkaXQuZ2V0U3RydWN0dXJlRWRpdEZvclJlYWQocHJvamVjdCk7Ci0JCSAgV29ya2JlbmNoQ29tcG9uZW50W10gd2JjcyA9IG1jLmdldFdvcmtiZW5jaE1vZHVsZXMoKTsKLQkJICBpZiAod2Jjcy5sZW5ndGghPTApIHsKLQkJCUFwcENsaWVudEFydGlmYWN0RWRpdCBhcHBDbGllbnRFZGl0ID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJLy9hcHBDbGllbnRFZGl0ID0gQXBwQ2xpZW50QXJ0aWZhY3RFZGl0LmdldEFwcENsaWVudEFydGlmYWN0RWRpdEZvclJlYWQod2Jjc1swXSk7Ci0JCQkgIGlmIChhcHBDbGllbnRFZGl0IT1udWxsKXsKLQkJCQkgIGlzQXBwQ2xpZW50ID0gdHJ1ZTsKLQkJCSAgfQotCQkJfQotCQkJZmluYWxseXsKLQkJCQlpZiAoYXBwQ2xpZW50RWRpdCE9bnVsbCkKLQkJCQkJYXBwQ2xpZW50RWRpdC5kaXNwb3NlKCk7Ci0JCQl9Ci0JCSAgfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBleCl7fQotCQlmaW5hbGx5ewotCQkJaWYgKG1jIT1udWxsKQotCQkJCW1jLmRpc3Bvc2UoKTsKLQkJfQotCQkKLQkJcmV0dXJuIGlzQXBwQ2xpZW50OwkKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBnaXZlbiA8Y29kZT5wcm9qZWN0PC9jb2RlPiBhcyBhIGJpdG1hc2suCi0JICogUmVsZXZhbnQgYml0bWFzayB2YWx1ZXMgYXJlOgotCSAqIDxvbD4KLQkgKiA8bGk+e0BsaW5rICNQUk9KRUNUX1RZUEVfSkFWQSBQUk9KRUNUX1RZUEVfSkFWQX0KLQkgKiA8bGk+e0BsaW5rICNQUk9KRUNUX1RZUEVfV0VCIFBST0pFQ1RfVFlQRV9XRUJ9Ci0JICogPGxpPntAbGluayAjUFJPSkVDVF9UWVBFX0VKQiBQUk9KRUNUX1RZUEVfRUpCfQotCSAqIDxsaT57QGxpbmsgI1BST0pFQ1RfVFlQRV9OT05FIFBST0pFQ1RfVFlQRV9OT05FfQotCSAqIDwvb2w+Ci0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVGhlIHR5cGUgYml0bWFzayBvZiB0aGUgcHJvamVjdC4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZCB1c2UgZ2V0Q29tcG9uZW50VHlwZQotCSAqLyAKLQlwdWJsaWMgc3RhdGljIGJ5dGUgZ2V0UHJvamVjdFR5cGUoSVByb2plY3QgcHJvamVjdCkgewotCQlieXRlIHByb2plY3RUeXBlID0gUFJPSkVDVF9UWVBFX05PTkU7Ci0JCWlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpIHsKLQkJCXByb2plY3RUeXBlIHw9IFBST0pFQ1RfVFlQRV9KQVZBOwotCQl9Ci0JCWlmIChSZXNvdXJjZVV0aWxzLmlzV2ViUHJvamVjdChwcm9qZWN0KSkgewotCQkJcHJvamVjdFR5cGUgfD0gUFJPSkVDVF9UWVBFX1dFQjsKLQkJfQotCQlpZiAoUmVzb3VyY2VVdGlscy5pc0VKQlByb2plY3QocHJvamVjdCkpIHsKLQkJCXByb2plY3RUeXBlIHw9IFBST0pFQ1RfVFlQRV9FSkI7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RUeXBlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNvbXBvbmVudCB0eXBlIGlkIGFzIGRlZmluZWQgaW4gSU1vZHVsZUNvbnN0YW50cwotCSAqIGkuZS4gSU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSA9ICJqc3Qud2ViIgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbXBvbmVudFR5cGUoSVByb2plY3QgcHJvamVjdCl7Ci0JCXJldHVybiBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFR5cGUocHJvamVjdCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNvbXBvbmVudCB0eXBlCi0JICogQHBhcmFtIGNvbXBvbmVudAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb21wb25lbnRUeXBlKElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCl7Ci0JCXJldHVybiBnZXRDb21wb25lbnRUeXBlKGNvbXBvbmVudC5nZXRQcm9qZWN0KCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIFdlYk1vZHVsZSBEZXBsb3lhYmxlIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPiBhcyBhbgotCSAqIDxjb2RlPklEZXBsb3lhYmxlPC9jb2RlPiwgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViIG5hdHVyZS4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBXZWJNb2R1bGUgRGVwbG95YWJsZSBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4gb3IgbnVsbCBpZiB0aGUKLQkgKiAgICAgICAgIHByb2plY3QgaGFzIG5vIFdlYiBuYXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBJTW9kdWxlIGdldE1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JcmV0dXJuIFNlcnZlclV0aWwuZ2V0TW9kdWxlKHByb2plY3QpOwotfQotCQotLy8gV29ya2Fyb3VuZCBmb3IgMTEzNjIxIAotLy9wdWJsaWMgc3RhdGljIElNb2R1bGUgZ2V0TW9kdWxlKElQcm9qZWN0IHByb2plY3QpIHsKLS8vCUlNb2R1bGVbXSBtb2R1bGVzID0gU2VydmVyVXRpbC5nZXRNb2R1bGVzKHByb2plY3QpOwotLy8JaWYgKG1vZHVsZXMhPW51bGwgJiYgbW9kdWxlcy5sZW5ndGghPTApIHsKLS8vCQlyZXR1cm4gbW9kdWxlc1swXTsKLS8vCX0KLS8vCXJldHVybiBudWxsOwotLy99Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBidWlsZCBvdXRwdXQgbG9jYXRpb24gb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IGFzIGFuCi0JICogPGNvZGU+SVBhdGg8L2NvZGU+LCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBKYXZhIG5hdHVyZS4KLQkgKiBpLmUuIFdQXC5kZXBsb3lhYmxlc1x3ZWJNb2R1bGVcV0VCLUlORlxjbGFzc2VzCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVGhlIGJ1aWxkIG91dHB1dCBsb2NhdGlvbiBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4gb3IgbnVsbAotCSAqICAgICAgICAgaWYgdGhlIHByb2plY3QgaGFzIG5vIEphdmEgbmF0dXJlLgotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0SmF2YU91dHB1dExvY2F0aW9uKElQcm9qZWN0IHByb2plY3QpIHsKLQkJSVBhdGggb3V0cHV0TG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQlvdXRwdXRMb2NhdGlvbiA9IGphdmFQcm9qZWN0LmdldE91dHB1dExvY2F0aW9uKCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJSUxvZyBsb2cgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCQlsb2cubG9nKElMb2cuSU5GTywgNTAzMiwgUmVzb3VyY2VVdGlscy5jbGFzcywgImdldEphdmFPdXRwdXRMb2NhdGlvbiIsCi0JCQkJInByb2plY3Q9IiArIHByb2plY3QgKyAiLG91dHB1dExvY2F0aW9uPSIgKyBvdXRwdXRMb2NhdGlvbik7Ci0KLQkJcmV0dXJuIG91dHB1dExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBidWlsZCBzb3VyY2UgbG9jYXRpb24gb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IGFzIGFuCi0JICogPGNvZGU+SVBhdGg8L2NvZGU+LCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGVpdGhlciBoYXMgbm8gSmF2YSBuYXR1cmUKLQkgKiBvciBpZiB0aGUgcHJvamVjdCdzIGJ1aWxkIGNsYXNzcGF0aCBjb250YWlucyBubyBmb2xkZXJzIGxvY2FsIHRvIHRoZQotCSAqIHByb2plY3QuIElmIHRoZSBwcm9qZWN0IGhhcyBtb3JlIHRoYW4gb25lIG9mIGl0cyBvd24gZm9sZGVycyBvbiB0aGUgYnVpbGQKLQkgKiBjbGFzc3BhdGgsIHRoZW4gb25lIG9mIHRoZW0gaXMgY2hvc2VuIGFyYml0cmFyaWx5IGFzIHRoZSBidWlsZCBzb3VyY2UKLQkgKiBsb2NhdGlvbi4gVG8gd29yayB3aXRoIGFsbCBlbnRyaWVzIG9uIHRoZSBidWlsZCBjbGFzc3BhdGgsIHVzZQotCSAqIHtAbGluayAjZ2V0SmF2YVBhY2thZ2VGcmFnbWVudFJvb3RzIGdldEphdmFQYWNrYWdlRnJhZ21lbnRSb290cygpfW9yCi0JICoge0BsaW5rICNnZXRKYXZhQ2xhc3NwYXRoIGdldEphdmFDbGFzc3BhdGgoKX0uCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gQSBidWlsZCBzb3VyY2UgbG9jYXRpb24gb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IG9yIG51bGwgaWYKLQkgKiAgICAgICAgIHRoZSBwcm9qZWN0IGhhcyBubyBKYXZhIG5hdHVyZSBvciBpZiB0aGUgcHJvamVjdCdzIGJ1aWxkCi0JICogICAgICAgICBjbGFzc3BhdGggY29udGFpbnMgbm8gZm9sZGVycyBsb2NhbCB0byB0aGUgcHJvamVjdC4KLQkgKi8KLQotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKElQcm9qZWN0IHByb2plY3QpIHsKLQkJSVBhdGggc291cmNlTG9jYXRpb24gPSBudWxsOwotCQlJUGFja2FnZUZyYWdtZW50Um9vdFtdIGZyYWdtZW50Um9vdHMgPSBnZXRKYXZhUGFja2FnZUZyYWdtZW50Um9vdHMocHJvamVjdCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRSb290cy5sZW5ndGggJiYgc291cmNlTG9jYXRpb24gPT0gbnVsbDsgaSsrKSB7Ci0JCQl0cnkgewotCQkJCUlSZXNvdXJjZSBmcmFnbWVudFJvb3QgPSBmcmFnbWVudFJvb3RzW2ldCi0JCQkJCQkuZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0JCQkJaWYgKGZyYWdtZW50Um9vdCAhPSBudWxsCi0JCQkJCQkmJiAoZnJhZ21lbnRSb290LmdldFByb2plY3QoKS5lcXVhbHMocHJvamVjdCkpCi0JCQkJCQkmJiAoZnJhZ21lbnRSb290LmdldFR5cGUoKSAhPSBJUmVzb3VyY2UuRklMRSkpIHsKLQkJCQkJc291cmNlTG9jYXRpb24gPSBmcmFnbWVudFJvb3QuZ2V0RnVsbFBhdGgoKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0KLQkJSUxvZyBsb2cgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCQlsb2cubG9nKElMb2cuSU5GTywgNTAzMCwgUmVzb3VyY2VVdGlscy5jbGFzcywgImdldEphdmFTb3VyY2VMb2NhdGlvbiIsCi0JCQkJInByb2plY3Q9IiArIHByb2plY3QgKyAiLHNvdXJjZUxvY2F0aW9uPSIgKyBzb3VyY2VMb2NhdGlvbik7Ci0JCQotCQlyZXR1cm4gc291cmNlTG9jYXRpb247Ci0JfQotCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgIkphdmFTb3VyY2UiIGZvbGRlcgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotICAgIC8qCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRKYXZhU291cmNlTG9jYXRpb24oSVByb2plY3QgcHJvamVjdCl7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQlyZXR1cm4gZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKGNvbXBvbmVudCk7CQkJCi0JfQotCSovCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSmF2YVNvdXJjZSBsb2NhdGlvbiBmb2xkZXIKLQkgKiBAcGFyYW0gY29tcAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEphdmFTb3VyY2VMb2NhdGlvbihJVmlydHVhbENvbXBvbmVudCBjb21wKXsKLQkJaWYgKGNvbXAhPW51bGwpewotCQkgICBJVmlydHVhbEZvbGRlciBmb2xkZXIgPSBjb21wLmdldFJvb3RGb2xkZXIoKS5nZXRGb2xkZXIobmV3IFBhdGgoIi9XRUItSU5GL2NsYXNzZXMiKSk7Ci0JCSAgIHJldHVybiBmb2xkZXIuZ2V0V29ya3NwYWNlUmVsYXRpdmVQYXRoKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEphdmFTb3VyY2UgbG9jYXRpb25zIGluIGVhY2ggcHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGhbXSBnZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKElQcm9qZWN0IHByb2plY3QpIHsKLQkJVmVjdG9yIHBhdGhWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0JCUlQYWNrYWdlRnJhZ21lbnRSb290W10gZnJhZ21lbnRSb290cyA9IGdldEphdmFQYWNrYWdlRnJhZ21lbnRSb290cyhwcm9qZWN0KTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50Um9vdHMubGVuZ3RoOyBpKyspIHsKLQkJCXRyeSB7Ci0JCQkJSVJlc291cmNlIGZyYWdtZW50Um9vdCA9IGZyYWdtZW50Um9vdHNbaV0uZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0JCQkJaWYgKGZyYWdtZW50Um9vdCAhPSBudWxsICYmIChmcmFnbWVudFJvb3QuZ2V0UHJvamVjdCgpLmVxdWFscyhwcm9qZWN0KSkKLQkJCQkJCSYmIChmcmFnbWVudFJvb3QuZ2V0VHlwZSgpICE9IElSZXNvdXJjZS5GSUxFKSkgewotCQkJCQlwYXRoVmVjdG9yLmFkZChmcmFnbWVudFJvb3QuZ2V0RnVsbFBhdGgoKSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKElQYXRoW10pIHBhdGhWZWN0b3IudG9BcnJheShuZXcgUGF0aFtwYXRoVmVjdG9yLnNpemUoKV0pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVBhdGhbXSBnZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKElWaXJ0dWFsQ29tcG9uZW50W10gY29tcG9uZW50cykgewotCi0JCWlmIChjb21wb25lbnRzIT1udWxsKXsKLQkJCUxpc3QgamF2YVNvdXJjZVBhdGhzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJZm9yIChpbnQgaT0wO2k8Y29tcG9uZW50cy5sZW5ndGg7aSsrKXsKLQkJCQlJUGF0aCBwYXRoID0gZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKGNvbXBvbmVudHNbaV0pOwotCQkJCWphdmFTb3VyY2VQYXRocy5hZGQocGF0aCk7Ci0JCQl9Ci0JCQlyZXR1cm4gKElQYXRoW10pamF2YVNvdXJjZVBhdGhzLnRvQXJyYXkobmV3IElQYXRoWzBdKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhIGJ1aWxkIHNvdXJjZSBwYWNrYWdlIGZyYWdtZW50IHJvb3Qgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+Ci0JICogYXMgYW4gPGNvZGU+SVBhY2thZ2VGcmFnbWVudFJvb3Q8L2NvZGU+LCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGVpdGhlcgotCSAqIGhhcyBubyBKYXZhIG5hdHVyZSBvciBpZiB0aGUgcHJvamVjdCdzIGJ1aWxkIGNsYXNzcGF0aCBjb250YWlucyBubwotCSAqIGZvbGRlcnMgbG9jYWwgdG8gdGhlIHByb2plY3QuIElmIHRoZSBwcm9qZWN0IGhhcyBtb3JlIHRoYW4gb25lIG9mIGl0cyBvd24KLQkgKiBmb2xkZXJzIG9uIHRoZSBidWlsZCBjbGFzc3BhdGgsIHRoZW4gb25lIG9mIHRoZW0gaXMgY2hvc2VuIGFyYml0cmFyaWx5IGFzCi0JICogdGhlIGJ1aWxkIHNvdXJjZSBsb2NhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBBIGJ1aWxkIHNvdXJjZSBwYWNrYWdlIGZyYWdtZW50IHJvb3Qgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+Ci0JICogICAgICAgICBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBKYXZhIG5hdHVyZSBvciBpZiB0aGUgcHJvamVjdCdzCi0JICogICAgICAgICBidWlsZCBjbGFzc3BhdGggY29udGFpbnMgbm8gZm9sZGVycyBsb2NhbCB0byB0aGUgcHJvamVjdC4KLQkgKiAgICAgICAgIAotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGFja2FnZUZyYWdtZW50Um9vdCBnZXRKYXZhU291cmNlUGFja2FnZUZyYWdtZW50Um9vdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCUlQYWNrYWdlRnJhZ21lbnRSb290IHBhY2thZ2VGcmFnbWVudFJvb3QgPSBudWxsOwotCQlJUGF0aCBqYXZhU291cmNlTG9jYXRpb24gPSBnZXRKYXZhU291cmNlTG9jYXRpb24ocHJvamVjdCk7Ci0JCXRyeSB7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCQlpZiAoamF2YVByb2plY3QgIT0gbnVsbCkgewotCQkJCXBhY2thZ2VGcmFnbWVudFJvb3QgPSBqYXZhUHJvamVjdC5maW5kUGFja2FnZUZyYWdtZW50Um9vdChqYXZhU291cmNlTG9jYXRpb24pOwotCQkJfQotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBwYWNrYWdlRnJhZ21lbnRSb290OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhY2thZ2UgZnJhZ21lbnQgcm9vdHMgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IGFzIGFuCi0JICogYXJyYXkgb2YgPGNvZGU+SVBhY2thZ2VGcmFnbWVudFJvb3Q8L2NvZGU+IG9iamVjdHMuIElmIHRoZSBwcm9qZWN0IGhhcwotCSAqIG5vIEphdmEgbmF0dXJlIHRoZW4gdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgb2YgbGVuZ3RoIHplcm8uCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVGhlIHBhY2thZ2UgZnJhZ21lbnQgcm9vdHMgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhY2thZ2VGcmFnbWVudFJvb3RbXSBnZXRKYXZhUGFja2FnZUZyYWdtZW50Um9vdHMoSVByb2plY3QgcHJvamVjdCkgewotCQl0cnkgewotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQlJUGFja2FnZUZyYWdtZW50Um9vdFtdIHBhY2thZ2VGcmFnbWVudFJvb3RzID0gamF2YVByb2plY3QKLQkJCQkJCS5nZXRQYWNrYWdlRnJhZ21lbnRSb290cygpOwotCQkJCXJldHVybiBwYWNrYWdlRnJhZ21lbnRSb290czsKLQkJCX0KLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gbmV3IElQYWNrYWdlRnJhZ21lbnRSb290WzBdOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGJ1aWxkIGNsYXNzcGF0aCBlbnRyaWVzIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPiBhcyBhbgotCSAqIGFycmF5IG9mIDxjb2RlPklDbGFzc3BhdGhFbnRyeTwvY29kZT4gb2JqZWN0cy4gSWYgdGhlIHByb2plY3QgaGFzIG5vCi0JICogSmF2YSBuYXR1cmUgdGhlbiB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBvZiBsZW5ndGggemVyby4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUaGUgY2xhc3NwYXRoIGVudHJpZXMgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+LgotCSAqIAotCSAqIEBkZXByZWNhdGVkIG5vdCB1c2VkCi0JICovCi0JcHVibGljIHN0YXRpYyBJQ2xhc3NwYXRoRW50cnlbXSBnZXRKYXZhQ2xhc3NwYXRoKElQcm9qZWN0IHByb2plY3QpIHsKLQkJdHJ5IHsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJCWlmIChqYXZhUHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJSUNsYXNzcGF0aEVudHJ5W10gY2xhc3NwYXRoRW50cmllcyA9IGphdmFQcm9qZWN0LmdldFJhd0NsYXNzcGF0aCgpOwotCQkJCXJldHVybiBjbGFzc3BhdGhFbnRyaWVzOwotCQkJfQotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBuZXcgSUNsYXNzcGF0aEVudHJ5WzBdOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZvbGRlciBnZXRXZWJDb21wb25lbnRTZXJ2ZXJSb290KElQcm9qZWN0IHByb2plY3QpewotCQkKLSAgICAgIElGb2xkZXIgd2ViTW9kdWxlU2VydmVyUm9vdCA9IG51bGw7Ci0gICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgaWYgKHZjLmV4aXN0cygpKQotICAgICAgICB3ZWJNb2R1bGVTZXJ2ZXJSb290ID0gSjJFRVV0aWxzLmdldE91dHB1dENvbnRhaW5lclJvb3QodmMpOwotCi0JICByZXR1cm4gd2ViTW9kdWxlU2VydmVyUm9vdDsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRXZWJDb21wb25lbnRTZXJ2ZXJSb290UGF0aChJUHJvamVjdCBwcm9qZWN0KXsKLQkJCi0gICAgICBJQ29udGFpbmVyIHdlYk1vZHVsZVNlcnZlclJvb3QgPSBudWxsOwotICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsICYmIHZjLmV4aXN0cygpKXsKLSAgICAgICAgSUNvbnRhaW5lcltdIGNvbnRhaW5lcnMgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRPdXRwdXRDb250YWluZXJzKHByb2plY3QuZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lcnMubGVuZ3RoID4gMCkKLSAgICAgICAgICB3ZWJNb2R1bGVTZXJ2ZXJSb290ID0gY29udGFpbmVyc1swXTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKHdlYk1vZHVsZVNlcnZlclJvb3QgIT0gbnVsbCkgCi0gICAgCXJldHVybiB3ZWJNb2R1bGVTZXJ2ZXJSb290LmdldEZ1bGxQYXRoKCk7Ci0gICAgICByZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBVUkwgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3Qgb2YgdGhlCi0JICogcHJvamVjdCBpbiBhIHNlcnZlciBpbnN0YW5jZSBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIgbmF0dXJlIG9yCi0JICogaGFzIG5vIGFzc29jaWF0aW9uIHRvIGEgc2VydmVyIGluc3RhbmNlLgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IFVSTCBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIKLQkgKiAgICAgICAgIG5hdHVyZSBvciBoYXMgbm8gYXNzb2NpYXRpb24gdG8gYSBzZXJ2ZXIgaW5zdGFuY2UuCi0JICogQGRlcHJlY2F0ZWQgdXNlIGdldFdlYkNvbXBvbmVudFVSTCguLikgd2hpY2ggYmVsb25ncyBpbiBTZXJ2ZXJVdGlscwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYlByb2plY3RVUkwoSVByb2plY3QgcHJvamVjdCwKLQkJCVN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIElTZXJ2ZXIgc2VydmVyKSB7Ci0KLQkJU3RyaW5nIHdlYlByb2plY3RVUkwgPSBudWxsOwotCQlJTW9kdWxlIG1vZHVsZSA9IGdldE1vZHVsZShwcm9qZWN0KTsKLQkJaWYgKG1vZHVsZSAhPSBudWxsKSB7Ci0JCQlJU2VydmVyIHNlcnZlckluc3RhbmNlID0gU2VydmVyVXRpbHMuZ2V0U2VydmVyRm9yTW9kdWxlKG1vZHVsZSwKLQkJCQkJc2VydmVyRmFjdG9yeUlkLCBzZXJ2ZXIsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJaWYgKHNlcnZlckluc3RhbmNlICE9IG51bGwpIHsKLS8vCQkJCVVSTCB1cmwgPSAoKElVUkxQcm92aWRlcikgc2VydmVySW5zdGFuY2UuZ2V0RGVsZWdhdGUoKSkuZ2V0TW9kdWxlUm9vdFVSTChtb2R1bGUpOwotCQkJCVVSTCB1cmwgPSAoKElVUkxQcm92aWRlcilzZXJ2ZXJJbnN0YW5jZS5nZXRBZGFwdGVyKElVUkxQcm92aWRlci5jbGFzcykpLmdldE1vZHVsZVJvb3RVUkwobW9kdWxlKTsKLQkJCQlpZiAodXJsICE9IG51bGwpIHsKLQkJCQkJU3RyaW5nIHMgPSB1cmwudG9TdHJpbmcoKTsKLQkJCQkJd2ViUHJvamVjdFVSTCA9IChzLmVuZHNXaXRoKCIvIikgPyBzLnN1YnN0cmluZygwLCBzCi0JCQkJCQkJLmxlbmd0aCgpIC0gMSkgOiBzKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCUlMb2cgbG9nID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLQkJbG9nLmxvZyhJTG9nLklORk8sIDUwMzYsIFJlc291cmNlVXRpbHMuY2xhc3MsICJnZXRXZWJQcm9qZWN0VVJMIiwKLQkJCQkicHJvamVjdD0iICsgcHJvamVjdCArICIsd2ViUHJvamVjdFVSTD0iICsgd2ViUHJvamVjdFVSTCk7Ci0KLQkJcmV0dXJuIHdlYlByb2plY3RVUkw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZvcmdlZCBVUkwgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3QKLQkgKiBvZiB0aGUgcHJvamVjdCBpbiBhIHNlcnZlciBpbnN0YW5jZSBvciBudWxsIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBXZWIKLQkgKiBuYXR1cmUgb3IgaGFzIG5vIGFzc29jaWF0aW9uIHRvIGEgc2VydmVyIGluc3RhbmNlLgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybiBUaGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBVUkwgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViCi0JICogICAgICAgICBuYXR1cmUgb3IgaGFzIG5vIGFzc29jaWF0aW9uIHRvIGEgc2VydmVyIGluc3RhbmNlLgotCSAqIEBkZXByZWNhdGVkICBub3QgdXNlZAotCSAqLwotLy8JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Rm9yZ2VkV2ViUHJvamVjdFVSTChJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBJU2VydmVyIHNlcnZlcil7Ci0vLyAgCQotLy8gIAlTdHJpbmcgd2ViUHJvamVjdFVSTCA9IG51bGw7Ci0vLyAgCUlNb2R1bGUgbW9kdWxlID0gZ2V0TW9kdWxlKHByb2plY3QpOwotLy8gIAlpZiAobW9kdWxlICE9IG51bGwpCi0vLyAgCXsKLS8vICAJCS8vSVNlcnZlciBzZXJ2ZXJJbnN0YW5jZSA9IFNlcnZlclV0aWxzLmdldFNlcnZlckZvck1vZHVsZShtb2R1bGUsCi0vLwkJICAvLyBzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlciwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0vLyAgCQlpZiAoc2VydmVyICE9IG51bGwpCi0vLyAgCQl7Ci0vLyAgCQkJU3RyaW5nIGhvc3RuYW1lID0gc2VydmVyLmdldEhvc3QoKTsKLS8vCi0vLyAgCQkJLy8gZ2V0IFNlcnZlclBvcnQKLS8vICAJCQlpbnQgcG9ydE51bWJlciA9IDA7Ci0vLwotLy8gIAkgICAgICAgICAgU2VydmVyUG9ydFtdIHBvcnRzID0gc2VydmVyLmdldFNlcnZlclBvcnRzKG51bGwpOwotLy8gIAkgICAgICAgICAgU2VydmVyUG9ydCBwb3J0ID0gbnVsbDsKLS8vICAJICAgICAgICAgIGZvciAoaW50IGl0ID0gMDsgaXQ8cG9ydHMubGVuZ3RoOyBpdCsrKQotLy8gIAkgICAgICAgICAgewotLy8gIAkgICAgICAgICAgICBTZXJ2ZXJQb3J0IHAgPSBwb3J0c1tpdF07Ci0vLyAgCSAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHAuZ2V0UHJvdG9jb2woKTsKLS8vICAJICAgICAgICAgICAgaWYgKHByb3RvY29sICE9IG51bGwgJiYgcHJvdG9jb2wudHJpbSgpLnRvTG93ZXJDYXNlKCkuZXF1YWxzKCJodHRwIikpCi0vLyAgCSAgICAgICAgICAgIHsKLS8vICAJICAgICAgICAgICAgICBwb3J0ID0gcDsKLS8vICAJICAgICAgICAgICAgICBwb3J0TnVtYmVyID0gcC5nZXRQb3J0KCk7Ci0vLyAgCSAgICAgICAgICAgICAgYnJlYWs7Ci0vLyAgCSAgICAgICAgICAgIH0KLS8vICAJICAgICAgICAgIH0KLS8vICAJICAgICAgICAgIAotLy8gIAkgICAgICAgIAotLy8gIAkgICAgICAgIAotLy8gIAkgICAgICAgIFVSTCB1cmwgPSBudWxsOwotLy8gIAkgICAgICAgIHRyeSB7Ci0vLyAgCSAgICAgICAgCXVybCA9IG5ldyBVUkwoImh0dHAiLCBob3N0bmFtZSwgcG9ydE51bWJlciwgIiIpOwotLy8gIAkgICAgICAgIH0KLS8vICAJICAgICAgICBjYXRjaChFeGNlcHRpb24gZSl7Ci0vLyAgCSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLyAgCSAgICAgICAgfQotLy8KLS8vICAJICAgICAgICAKLS8vICAJCQkvL1VSTCB1cmwgPSAoKElVUkxQcm92aWRlcikgc2VydmVySW5zdGFuY2UuZ2V0RGVsZWdhdGUoKSkuZ2V0TW9kdWxlUm9vdFVSTChtb2R1bGUpOwotLy8gIAkJCQotLy8gIAkJCWlmICh1cmwgIT0gbnVsbCkKLS8vICAJCQl7Ci0vLyAgCQkJCVN0cmluZyBzID0gdXJsLnRvU3RyaW5nKCk7Ci0vLyAgCQkJCXdlYlByb2plY3RVUkwgPSBzICsgIi8iK3Byb2plY3QuZ2V0TmFtZSgpOwotLy8gIAkJCQkvL3dlYlByb2plY3RVUkwgPSAocy5lbmRzV2l0aCgiLyIpID8gcy5zdWJzdHJpbmcoMCxzLmxlbmd0aCgpLTEpIDogcyk7Ci0vLyAgCQkJfQotLy8gIAkJfQotLy8gIAl9Ci0vLyAJSUxvZyBsb2cgPSBuZXcgRWNsaXBzZUxvZygpOwotLy8gICAgbG9nLmxvZyhJTG9nLklORk8sIDUwMzYsIFJlc291cmNlVXRpbHMuY2xhc3MsICJnZXRXZWJQcm9qZWN0VVJMIiwgInByb2plY3Q9Iitwcm9qZWN0KyIsd2ViUHJvamVjdFVSTD0iK3dlYlByb2plY3RVUkwpOwotLy8gIAlyZXR1cm4gd2ViUHJvamVjdFVSTDsgIAkKLS8vICB9Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgVVJMIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IG9mIHRoZQotCSAqIHByb2plY3QgaW4gYSBzZXJ2ZXIgaW5zdGFuY2Ugb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViIG5hdHVyZSBvcgotCSAqIGhhcyBubyBhc3NvY2lhdGlvbiB0byBhIHNlcnZlciBpbnN0YW5jZS4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUaGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBVUkwgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViCi0JICogICAgICAgICBuYXR1cmUgb3IgaGFzIG5vIGFzc29jaWF0aW9uIHRvIGEgc2VydmVyIGluc3RhbmNlLgotCSAqIEBkZXByZWNhdGVkIGJlbG9uZ3MgaW4gU2VydmVyVXRpbHMKLQkgKgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYlByb2plY3RVUkwoSVByb2plY3QgcHJvamVjdCkgewotCQlTdHJpbmcgd2ViUHJvamVjdFVSTCA9IG51bGw7Ci0JCUlNb2R1bGUgbW9kdWxlID0gZ2V0TW9kdWxlKHByb2plY3QpOwotCQlpZiAobW9kdWxlICE9IG51bGwpIHsKLQkJCUlTZXJ2ZXIgc2VydmVySW5zdGFuY2UgPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJGb3JNb2R1bGUobW9kdWxlKTsKLQkJCWlmIChzZXJ2ZXJJbnN0YW5jZSAhPSBudWxsKSB7Ci0JCQkJVVJMIHVybCA9ICgoSVVSTFByb3ZpZGVyKXNlcnZlckluc3RhbmNlLmdldEFkYXB0ZXIoSVVSTFByb3ZpZGVyLmNsYXNzKSkuZ2V0TW9kdWxlUm9vdFVSTChtb2R1bGUpOwotCQkJCWlmICh1cmwgIT0gbnVsbCkgewotCQkJCQlTdHJpbmcgcyA9IHVybC50b1N0cmluZygpOwotCQkJCQl3ZWJQcm9qZWN0VVJMID0gKHMuZW5kc1dpdGgoIi8iKSA/IHMuc3Vic3RyaW5nKDAsIHMKLQkJCQkJCQkubGVuZ3RoKCkgLSAxKSA6IHMpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlJTG9nIGxvZyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0JCWxvZy5sb2coSUxvZy5JTkZPLCA1MDM3LCBSZXNvdXJjZVV0aWxzLmNsYXNzLCAiZ2V0V2ViUHJvamVjdFVSTCIsCi0JCQkJInByb2plY3Q9IiArIHByb2plY3QgKyAiLHdlYlByb2plY3RVUkw9IiArIHdlYlByb2plY3RVUkwpOwotCi0JCXJldHVybiB3ZWJQcm9qZWN0VVJMOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqIAotCSAqIEBkZXByZWNhdGVkIHNob3VsZCBiZSBpbiBTZXJ2ZXJVdGlscwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEVuY29kZWRXZWJQcm9qZWN0VVJMKElQcm9qZWN0IHByb2plY3QpIHsKLQkJU3RyaW5nIHVybCA9IGdldFdlYlByb2plY3RVUkwocHJvamVjdCk7Ci0JCWlmICh1cmwgIT0gbnVsbCkgewotCQkJaW50IGluZGV4ID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmdCdWZmZXIgZW5jb2RlZFVSTCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQllbmNvZGVkVVJMLmFwcGVuZCh1cmwuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSkpOwotCQkJCXRyeSB7Ci0JCQkJCVN0cmluZyBjdHh0Um9vdCA9IFVSTEVuY29kZXIuZW5jb2RlKHVybC5zdWJzdHJpbmcoaW5kZXggKyAxLCB1cmwubGVuZ3RoKCkpLCAiVVRGLTgiKTsKLQkJCQkJaW50IHBsdXNJbmRleCA9IGN0eHRSb290LmluZGV4T2YoJysnKTsKLQkJCQkJd2hpbGUgKHBsdXNJbmRleCAhPSAtMSkgewotCQkJCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCQkJc2IuYXBwZW5kKGN0eHRSb290LnN1YnN0cmluZygwLCBwbHVzSW5kZXgpKTsKLQkJCQkJCXNiLmFwcGVuZCgiJTIwIik7Ci0JCQkJCQlzYi5hcHBlbmQoY3R4dFJvb3Quc3Vic3RyaW5nKHBsdXNJbmRleCArIDEsIGN0eHRSb290Ci0JCQkJCQkJLmxlbmd0aCgpKSk7Ci0JCQkJCQljdHh0Um9vdCA9IHNiLnRvU3RyaW5nKCk7Ci0JCQkJCQlwbHVzSW5kZXggPSBjdHh0Um9vdC5pbmRleE9mKCcrJyk7Ci0JCQkJCX0KLQkJCQkJZW5jb2RlZFVSTC5hcHBlbmQoY3R4dFJvb3QpOwotCQkJCX1jYXRjaCAoSU9FeGNlcHRpb24gaW8pewotCQkJCQkvL2hhbmRsZXIgZXhjZXB0aW9uCi0JCQkJfQkJCQkKLQkJCQl1cmwgPSBlbmNvZGVkVVJMLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHVybDsKLQl9Ci0KLQkvKioKLQkgKiBHaXZlbiB0aGUgPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBvZiBhIEphdmEgcmVzb3VyY2UsIHJldHVybnMgdGhlCi0JICogcGFja2FnZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBvciBudWxsIGlmIHRoZSByZXNvdXJjZSBpcyBub3QgcHJvcGVybHkKLQkgKiBsb2NhdGVkIGluIGEgcHJvamVjdCBvciBmb2xkZXIgb24gdGhlIGJ1aWxkIGNsYXNzcGF0aCBvciB0aGF0IGlzIHRoZQotCSAqIGJ1aWxkIG91dHB1dCBwYXRoLgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBKYXZhIHJlc291cmNlLgotCSAqIEByZXR1cm4gdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgSmF2YSByZXNvdXJjZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShJUGF0aCBhYnNvbHV0ZVBhdGgpIHsKLQkJdHJ5IHsKLQkJCUlQYXRoIGphdmFGb2xkZXJQYXRoID0gYWJzb2x1dGVQYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKTsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0T2YoYWJzb2x1dGVQYXRoKTsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJCWlmIChqYXZhUHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnbWVudCA9IGphdmFQcm9qZWN0Ci0JCQkJCQkuZmluZFBhY2thZ2VGcmFnbWVudChqYXZhRm9sZGVyUGF0aCk7Ci0JCQkJaWYgKGZyYWdtZW50ICE9IG51bGwpIHsKLQkJCQkJcmV0dXJuIGZyYWdtZW50LmdldEVsZW1lbnROYW1lKCk7Ci0JCQkJfQotCQkJCUlQYXRoIG91dHB1dFBhdGggPSBnZXRKYXZhT3V0cHV0TG9jYXRpb24ocHJvamVjdCk7Ci0JCQkJaWYgKG91dHB1dFBhdGguaXNQcmVmaXhPZihqYXZhRm9sZGVyUGF0aCkpIHsKLQkJCQkJSVBhdGggamF2YVBhY2thZ2VQYXRoID0gamF2YUZvbGRlclBhdGgKLQkJCQkJCQkucmVtb3ZlRmlyc3RTZWdtZW50cyhvdXRwdXRQYXRoLnNlZ21lbnRDb3VudCgpKTsKLQkJCQkJcmV0dXJuIGphdmFQYWNrYWdlUGF0aC5pc0VtcHR5KCkgPyBudWxsIDogamF2YVBhY2thZ2VQYXRoCi0JCQkJCQkJLnRvU3RyaW5nKCkucmVwbGFjZShJUGF0aC5TRVBBUkFUT1IsICcuJyk7Ci0JCQkJfQotCQkJfQotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEdpdmVuIHRoZSA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+IG9mIGEgSmF2YSByZXNvdXJjZSwgcmV0dXJucyB0aGUKLQkgKiBwYWNrYWdlIG5hbWUgb2YgdGhlIHJlc291cmNlIGFzIGEgcmVsYXRpdmUgcGF0aG5hbWUgb3IgbnVsbCBpZiB0aGUKLQkgKiByZXNvdXJjZSBpcyBub3QgcHJvcGVybHkgbG9jYXRlZCBpbiBhIHByb2plY3Qgb3IgZm9sZGVyIG9uIHRoZSBidWlsZAotCSAqIGNsYXNzcGF0aC4KLQkgKiAKLQkgKiBAcGFyYW0gYWJzb2x1dGVQYXRoCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgSmF2YSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIG5hbWUgb2YgdGhlIEphdmEgcmVzb3VyY2UgYXMgYSByZWxhdGl2ZSBwYXRoLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0SmF2YVJlc291cmNlUGFja2FnZVBhdGgoSVBhdGggYWJzb2x1dGVQYXRoKSB7Ci0JCVN0cmluZyBwYWNrYWdlTmFtZSA9IFJlc291cmNlVXRpbHMKLQkJCQkuZ2V0SmF2YVJlc291cmNlUGFja2FnZU5hbWUoYWJzb2x1dGVQYXRoKTsKLQkJcmV0dXJuIChwYWNrYWdlTmFtZSA9PSBudWxsID8gbnVsbCA6IG5ldyBQYXRoKHBhY2thZ2VOYW1lLnJlcGxhY2UoJy4nLAotCQkJCUlQYXRoLlNFUEFSQVRPUikpKTsKLQl9Ci0KLQkvKioKLQkgKiBHaXZlbiB0aGUgPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBvZiBhIEphdmEgcmVzb3VyY2UsIHJldHVybnMgdGhlCi0JICogYWJzb2x1dGUgcGF0aCBvZiB0aGUgcHJvamVjdCBvciBmb2xkZXIgdGhhdCBpcyBvbiB0aGUgYnVpbGQgY2xhc3NwYXRoIG9yCi0JICogaXMgdGhlIGJ1aWxkIG91dHB1dCBwYXRoIGFuZCB0aGF0IGNvbnRhaW5zIHRoZSBmdWxseSBxdWFsaWZpZWQgSmF2YQotCSAqIHJlc291cmNlLCBvciBudWxsIGlmIG5vIHN1Y2ggcHJvamVjdCBvciBmb2xkZXIgZXhpc3RzLgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBKYXZhIHJlc291cmNlLgotCSAqIEByZXR1cm4gVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHByb2plY3Qgb3IgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGZ1bGx5Ci0JICogICAgICAgICBxdWFsaWZpZWQgSmF2YSByZXNvdXJjZS4KLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0SmF2YVJlc291cmNlUm9vdFBhdGgoSVBhdGggYWJzb2x1dGVQYXRoKSB7Ci0JCXRyeSB7Ci0JCQlJUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdE9mKGFic29sdXRlUGF0aCk7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCQlpZiAoamF2YVByb2plY3QgIT0gbnVsbCkgewotCQkJCUlQYWNrYWdlRnJhZ21lbnRSb290W10gcGZycyA9IGphdmFQcm9qZWN0Ci0JCQkJCQkuZ2V0UGFja2FnZUZyYWdtZW50Um9vdHMoKTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHBmcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJSVJlc291cmNlIGZyYWdtZW50Um9vdCA9IHBmcnNbaV0uZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0JCQkJCWlmIChmcmFnbWVudFJvb3QgIT0gbnVsbCkgewotCQkJCQkJSVBhdGggZnJhZ21lbnRQYXRoID0gZnJhZ21lbnRSb290LmdldEZ1bGxQYXRoKCk7Ci0JCQkJCQlpZiAoZnJhZ21lbnRQYXRoLmlzUHJlZml4T2YoYWJzb2x1dGVQYXRoKSkgewotCQkJCQkJCXJldHVybiBmcmFnbWVudFBhdGg7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJSVBhdGggb3V0cHV0UGF0aCA9IGdldEphdmFPdXRwdXRMb2NhdGlvbihwcm9qZWN0KTsKLQkJCQlpZiAob3V0cHV0UGF0aC5pc1ByZWZpeE9mKGFic29sdXRlUGF0aCkpIHsKLQkJCQkJcmV0dXJuIG91dHB1dFBhdGg7Ci0JCQkJfQotCQkJfQotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgYW4gVVJMIChIVFRQIG9yIEZJTEUpIHRvIGFuIEVjbGlwc2UgcmVzb3VyY2UsIHJldHVybmluZyB0aGUKLQkgKiBVUkwgc3RyaW5nIGlmIHN1Y2Nlc3NmdWwgYW5kIGZhbHNlIG90aGVyd2lzZS4gQSB2YWx1ZSBvZiBudWxsIHdpbGwKLQkgKiBkZWZpbml0ZWx5IGJlIHJldHVybmVkIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQ6Ci0JICogPG9sPgotCSAqIDxsaT5UaGUgYWJzb2x1dGUgcGF0aCBiZWdpbnMgd2l0aCBhIFdlYiBQcm9qZWN0LgotCSAqIDxsaT5UaGUgbGVhZGluZyBwb3J0aW9uIG9mIHRoZSBhYnNvbHV0ZSBwYXRoIG1hdGNoZXMgdGhlIHBhdGggb2YgdGhlCi0JICogY29udGFpbmVyIHJldHVybmVkIGJ5IHsjbGluayAjZ2V0V2ViTW9kdWxlU2VydmVyUm9vdAotCSAqIGdldFdlYk1vZHVsZVNlcnZlclJvb3R9IGZvciB0aGUgcHJvamVjdC4KLQkgKiA8bGk+VGhlIHBhdGggZG9lcyBub3QgbGVhZCB0byB0aGUgV0VCLUlORiBmb2xkZXIgb3IgYW55IGRlc2NlbmRlbnQKLQkgKiB0aGVyZW9mLgotCSAqIDxsaT5UaGUgV2ViIFByb2plY3QgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGV4cGxpY2l0IG9yIGRlZmF1bHQgc2VydmVyCi0JICogaW5zdGFuY2UuCi0JICogPC9vbD4KLQkgKiAKLQkgKiBAcGFyYW0gYWJzb2x1dGVQYXRoCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcmVzb3VyY2UuCi0JICogQHJldHVybiBUaGUgVVJMIG9mIHRoZSBmaWxlLCBvciBudWxsIGlmIG5vIFVSTCBjYW4gYmUgZGV0ZXJtaW5lZC4KLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZAotCSAqLwotLy8JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VVJMRnJvbVBhdGgoSVBhdGggYWJzb2x1dGVQYXRoLAotLy8JCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBJU2VydmVyIHNlcnZlcikgewotLy8JCXJldHVybiBnZXRVUkxGcm9tUGF0aChhYnNvbHV0ZVBhdGgsIGdldFdlYlByb2plY3RVUkwoCi0vLwkJCQlnZXRQcm9qZWN0T2YoYWJzb2x1dGVQYXRoKSwgc2VydmVyRmFjdG9yeUlkLCBzZXJ2ZXIpKTsKLS8vCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiBAcGFyYW0gd2ViUHJvamVjdFVSTAotCSAqIEByZXR1cm4KLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZAotCSAqLwotLy8JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VVJMRnJvbVBhdGgoSVBhdGggYWJzb2x1dGVQYXRoLCBTdHJpbmcgd2ViUHJvamVjdFVSTCkgewotLy8JCVN0cmluZ0J1ZmZlciB1cmwgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0vLwkJSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3RPZihhYnNvbHV0ZVBhdGgpOwotLy8JCUlDb250YWluZXIgd2ViTW9kdWxlU2VydmVyUm9vdCA9IGdldFdlYk1vZHVsZVNlcnZlclJvb3QocHJvamVjdCk7Ci0vLwkJaWYgKHdlYk1vZHVsZVNlcnZlclJvb3QgIT0gbnVsbCkgewotLy8JCQlJUGF0aCB3ZWJNb2R1bGVTZXJ2ZXJSb290UGF0aCA9IHdlYk1vZHVsZVNlcnZlclJvb3QuZ2V0RnVsbFBhdGgoKTsKLS8vCQkJaWYgKHdlYk1vZHVsZVNlcnZlclJvb3RQYXRoLmlzUHJlZml4T2YoYWJzb2x1dGVQYXRoKSkgewotLy8JCQkJaW50IG51bVNlZ21lbnQgPSB3ZWJNb2R1bGVTZXJ2ZXJSb290UGF0aC5zZWdtZW50Q291bnQoKTsKLS8vCQkJCWludCBudW1TZWdtZW50RnJvbVBhdGggPSBhYnNvbHV0ZVBhdGguc2VnbWVudENvdW50KCk7Ci0vLwkJCQlpZiAobnVtU2VnbWVudEZyb21QYXRoID4gbnVtU2VnbWVudCkgewotLy8JCQkJCVN0cmluZyBuZXh0U2VnbWVudCA9IGFic29sdXRlUGF0aC5zZWdtZW50KG51bVNlZ21lbnQpOwotLy8JCQkJCS8vIGNoZWNrIGlmIHRoZSBzZWdtZW50IGFmdGVyIHRoZSBXZWJNb2R1bGVTZXJ2ZXJSb290IGlzCi0vLwkJCQkJLy8gV0VCLUlORiAoaWdub3JpbmcgY2FzZSkKLS8vCQkJCQlpZiAobmV4dFNlZ21lbnQgIT0gbnVsbAkmJiAhbmV4dFNlZ21lbnQuZXF1YWxzSWdub3JlQ2FzZSgiV0VCLUlORiIpKSB7Ci0vLwkJCQkJCUlQYXRoIHJlbGF0aXZlUGF0aCA9IGFic29sdXRlUGF0aC5yZW1vdmVGaXJzdFNlZ21lbnRzKG51bVNlZ21lbnQpOwotLy8JCQkJCQlpZiAod2ViUHJvamVjdFVSTCAhPSBudWxsKQotLy8JCQkJCQkJdXJsLmFwcGVuZCh3ZWJQcm9qZWN0VVJMKS5hcHBlbmQoSVBhdGguU0VQQVJBVE9SKS5hcHBlbmQocmVsYXRpdmVQYXRoLnRvU3RyaW5nKCkpOwotLy8JCQkJCX0KLS8vCQkJCX0gZWxzZSBpZiAobnVtU2VnbWVudEZyb21QYXRoID09IG51bVNlZ21lbnQpCi0vLwkJCQkJdXJsLmFwcGVuZCh3ZWJQcm9qZWN0VVJMKTsKLS8vCQkJfQotLy8JCX0KLS8vCQlpZiAodXJsLmxlbmd0aCgpIDwgMSkgewotLy8JCQlJV29ya3NwYWNlUm9vdCB3b3Jrc3BhY2UgPSBnZXRXb3Jrc3BhY2VSb290KCk7Ci0vLwkJCXVybC5hcHBlbmQoZ2V0UmVzb3VyY2VVUkkod29ya3NwYWNlLmdldEZpbGUoYWJzb2x1dGVQYXRoKSkpOwotLy8JCX0KLS8vCQlJTG9nIGxvZyA9IG5ldyBFY2xpcHNlTG9nKCk7Ci0vLwkJbG9nLmxvZyhJTG9nLklORk8sIDUwMzgsIFJlc291cmNlVXRpbHMuY2xhc3MsICJnZXRVUkxGcm9tUGF0aCIsCi0vLwkJCQkiYWJzb2x1dGVQYXRoPSIgKyBhYnNvbHV0ZVBhdGggKyAiLHVybD0iICsgdXJsKTsKLS8vCi0vLwkJcmV0dXJuIHVybC50b1N0cmluZygpOwotLy8JfQotCi0JLyoqCi0JICogQ29waWVzIGEgc2V0IG9mIGZpbGVzIGZyb20gYSBwbHVnaW4ncyBpbnN0YWxsYXRpb24gbG9jYXRpb24gdG8gYSBuYXRpdmUKLQkgKiBkaXJlY3RvcnkuIFRoZSBmaWxlcyBhcmUgbmFtZWQgaW4gYW4gaW5kZXggZmlsZSBsb2NhdGVkIHJlbGF0aXZlIHRvIHRoZQotCSAqIHBsdWdpbidzIGluc3RhbGxhdGlvbiBsb2NhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcGx1Z2luCi0JICogICAgICAgICAgICBUaGUgcGx1Z2luIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHNvdXJjZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgPGNvZGU+cGx1Z2luPC9jb2RlPiBpbnN0YWxsCi0JICogICAgICAgICAgICBsb2NhdGlvbiwgY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4gSWYgbnVsbCwgdGhlbiB0aGUKLQkgKiAgICAgICAgICAgIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIGlzIHRoZSBzb3VyY2UgcGF0aCAoaWUuIG51bGwgaXMKLQkgKiAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gIi4iKS4KLQkgKiBAcGFyYW0gaW5kZXhQYXRobmFtZQotCSAqICAgICAgICAgICAgQSBmaWxlIGNvbnRhaW5pbmcgYSB3aGl0ZXNwYWNlLWRlbGltaXR0ZWQgbGlzdCBvZiBwYXRobmFtZXMgb2YKLQkgKiAgICAgICAgICAgIHRoZSBmaWxlcyB0byBjb3B5LiBUaGUgcGF0aG5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUKLQkgKiAgICAgICAgICAgIDxjb2RlPnBsdWdpbiBzb3VyY2VQYXRoPC9jb2RlPi4gTXVzdCBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gdGFyZ2V0UGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIG5hdGl2ZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhlIGZpbGVzCi0JICogICAgICAgICAgICB3aWxsIGJlIGNvcGllZC4gVGhlIHJlbGF0aXZlIHBhdGhuYW1lcyBvZiB0aGUgZmlsZXMgbmFtZWQgaW4KLQkgKiAgICAgICAgICAgIHRoZSA8Y29kZT5pbmRleFBhdGhuYW1lPC9jb2RlPiBmaWxlIGFyZSBwcmVzZXJ2ZWQuIE11c3Qgbm90Ci0JICogICAgICAgICAgICBiZSBudWxsLgotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKiAgICAgICAgICAgIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBBbiBleGNlcHRpb24gaW5kaWNhdGluZyBhbiBJTyBlcnJvciBoYXMgb2NjdXJlZC4KLQkgKi8KLQlzdGF0aWMgcHVibGljIHZvaWQgY29weUluZGV4ZWRGaWxlc1RvT1MoUGx1Z2luIHBsdWdpbiwgSVBhdGggc291cmNlUGF0aCwKLQkJCUlQYXRoIGluZGV4UGF0aG5hbWUsIElQYXRoIHRhcmdldFBhdGgsCi0JCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBwbHVnaW4ub3BlblN0cmVhbShpbmRleFBhdGhuYW1lKTsKLQkJRW51bWVyYXRpb24gZmlsZW5hbWVzID0gU3RyaW5nVXRpbHMucGFyc2VGaWxlbmFtZXNGcm9tU3RyZWFtKGlucHV0KTsKLQkJY29weUVudW1lcmF0ZWRGaWxlc1RvT1MocGx1Z2luLCBzb3VyY2VQYXRoLCBmaWxlbmFtZXMsIHRhcmdldFBhdGgsCi0JCQkJcHJvZ3Jlc3NNb25pdG9yKTsKLQl9Ci0KLQkvKioKLQkgKiBDb3BpZXMgYSBzZXQgb2YgZmlsZXMgZnJvbSBhIHBsdWdpbidzIGluc3RhbGxhdGlvbiBsb2NhdGlvbiB0byBhIG5hdGl2ZQotCSAqIGRpcmVjdG9yeS4gVGhlIGZpbGVzIGFyZSBuYW1lZCBpbiBhbiBlbnVtZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcGx1Z2luCi0JICogICAgICAgICAgICBUaGUgcGx1Z2luIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHNvdXJjZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgPGNvZGU+cGx1Z2luPC9jb2RlPiBpbnN0YWxsCi0JICogICAgICAgICAgICBsb2NhdGlvbiwgY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4gSWYgbnVsbCwgdGhlbiB0aGUKLQkgKiAgICAgICAgICAgIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIGlzIHRoZSBzb3VyY2UgcGF0aCAoaWUuIG51bGwgaXMKLQkgKiAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gIi4iKS4KLQkgKiBAcGFyYW0gcGF0aG5hbWVzCi0JICogICAgICAgICAgICBBbiBlbnVtZXJhdGlvbiBvZiBwYXRobmFtZXMgb2YgdGhlIGZpbGVzIHRvIGNvcHkuIFRoZQotCSAqICAgICAgICAgICAgcGF0aG5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgPGNvZGU+cGx1Z2luIHNvdXJjZVBhdGg8L2NvZGU+LgotCSAqICAgICAgICAgICAgTXVzdCBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gdGFyZ2V0UGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIG5hdGl2ZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhlIGZpbGVzCi0JICogICAgICAgICAgICB3aWxsIGJlIGNvcGllZC4gVGhlIHJlbGF0aXZlIHBhdGhuYW1lcyBvZiB0aGUgZmlsZXMgbmFtZWQgaW4KLQkgKiAgICAgICAgICAgIHRoZSA8Y29kZT5wYXRobmFtZXM8L2NvZGU+IGVudW1lcmF0aW9uIGFyZSBwcmVzZXJ2ZWQuIE11c3QKLQkgKiAgICAgICAgICAgIG5vdCBiZSBudWxsLgotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKiAgICAgICAgICAgIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBBbiBleGNlcHRpb24gaW5kaWNhdGluZyBhbiBJTyBlcnJvciBoYXMgb2NjdXJlZC4KLQkgKi8KLQlzdGF0aWMgcHVibGljIHZvaWQgY29weUVudW1lcmF0ZWRGaWxlc1RvT1MoUGx1Z2luIHBsdWdpbiwgSVBhdGggc291cmNlUGF0aCwKLQkJCUVudW1lcmF0aW9uIHBhdGhuYW1lcywgSVBhdGggdGFyZ2V0UGF0aCwKLQkJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl3aGlsZSAocGF0aG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlTdHJpbmcgZmlsZW5hbWUgPSAoU3RyaW5nKSBwYXRobmFtZXMubmV4dEVsZW1lbnQoKTsKLQkJCWNvcHlGaWxlVG9PUyhwbHVnaW4sIHNvdXJjZVBhdGgsIG5ldyBQYXRoKGZpbGVuYW1lKSwgdGFyZ2V0UGF0aCwKLQkJCQkJcHJvZ3Jlc3NNb25pdG9yKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENvcGllcyBhIGZpbGUgZnJvbSBhIHBsdWdpbidzIGluc3RhbGxhdGlvbiBsb2NhdGlvbiB0byBhIG5hdGl2ZQotCSAqIGRpcmVjdG9yeS4KLQkgKiAKLQkgKiBAcGFyYW0gcGx1Z2luCi0JICogICAgICAgICAgICBUaGUgcGx1Z2luIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHNvdXJjZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgPGNvZGU+cGx1Z2luPC9jb2RlPiBpbnN0YWxsCi0JICogICAgICAgICAgICBsb2NhdGlvbiwgY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4gSWYgbnVsbCwgdGhlbiB0aGUKLQkgKiAgICAgICAgICAgIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIGlzIHRoZSBzb3VyY2UgcGF0aCAoaWUuIG51bGwgaXMKLQkgKiAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gIi4iKS4KLQkgKiBAcGFyYW0gcGF0aG5hbWUKLQkgKiAgICAgICAgICAgIFRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBjb3B5LiBUaGUgcGF0aG5hbWUgaXMgcmVsYXRpdmUgdG8KLQkgKiAgICAgICAgICAgIHRoZSA8Y29kZT5wbHVnaW4gc291cmNlUGF0aDwvY29kZT4uIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHRhcmdldFBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBuYXRpdmUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoZSBmaWxlCi0JICogICAgICAgICAgICB3aWxsIGJlIGNvcGllZC4gVGhlIHJlbGF0aXZlIHBhdGhuYW1lIG9mIHRoZSBmaWxlIGlzCi0JICogICAgICAgICAgICBwcmVzZXJ2ZWQuIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotCSAqICAgICAgICAgICAgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiBpbmRpY2F0aW5nIGFuIElPIGVycm9yIGhhcyBvY2N1cmVkLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgdm9pZCBjb3B5RmlsZVRvT1MoUGx1Z2luIHBsdWdpbiwgSVBhdGggc291cmNlUGF0aCwKLQkJCUlQYXRoIHBhdGhuYW1lLCBJUGF0aCB0YXJnZXRQYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikKLQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlQYXRoIHRhcmdldCA9IHRhcmdldFBhdGguYXBwZW5kKHBhdGhuYW1lKTsKLQkJSVBhdGggc291cmNlID0gc291cmNlUGF0aCA9PSBudWxsID8gcGF0aG5hbWUgOiBzb3VyY2VQYXRoCi0JCQkJLmFwcGVuZChwYXRobmFtZSk7Ci0JCUlucHV0U3RyZWFtIGlucHV0ID0gcGx1Z2luLm9wZW5TdHJlYW0oc291cmNlKTsKLQkJT3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHRhcmdldC50b09TU3RyaW5nKCkpOwotCQljb3B5U3RyZWFtKGlucHV0LCBvdXRwdXQpOwotCQlpbnB1dC5jbG9zZSgpOwotCQlvdXRwdXQuY2xvc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb3BpZXMgZGF0YSBmcm9tIG9uZSBzdHJlYW0gdG8gYW5vdGhlci4KLQkgKiAKLQkgKiBAcGFyYW0gaW5wdXQKLQkgKiAgICAgICAgICAgIFRoZSBpbnB1dCBzdHJlYW0uCi0JICogQHBhcmFtIG91dHB1dAotCSAqICAgICAgICAgICAgVGhlIG91dHB1dCBzdHJlYW0uCi0JICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgQW4gZXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBwcm9jZXNzaW5nIGVpdGhlciBvZgotCSAqICAgICAgICAgICAgIHRoZSBzdHJlYW1zLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgaW50IGNvcHlTdHJlYW0oSW5wdXRTdHJlYW0gaW5wdXQsIE91dHB1dFN0cmVhbSBvdXRwdXQpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpbnQgdCA9IDA7Ci0JCWJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsxMDI0XTsKLQkJaW50IG4gPSBpbnB1dC5yZWFkKGJ1ZmZlcik7Ci0JCXdoaWxlIChuID49IDApIHsKLQkJCW91dHB1dC53cml0ZShidWZmZXIsIDAsIG4pOwotCQkJdCArPSBuOwotCQkJbiA9IGlucHV0LnJlYWQoYnVmZmVyKTsKLQkJfQotCQlyZXR1cm4gdDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmF0aXZlIGRpcmVjdG9yeSBwYXRoIGVxdWFsIHRvIHRoZSBwYXJlbnQgcG9ydGlvbiBvZiB0aGUgZ2l2ZW4KLQkgKiA8Y29kZT5wYXRobmFtZTwvY29kZT4uIElmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMsIHRoZW4gbm8gYWN0aW9uCi0JICogaXMgdGFrZW4uCi0JICogCi0JICogQHBhcmFtIHBhdGhuYW1lCi0JICogICAgICAgICAgICBUaGUgcGF0aG5hbWUgdG8gdGhlIGZpbGUgd2hvc2UgcGFyZW50IGRpcmVjdG9yeSBzaG91bGQgYmUKLQkgKiAgICAgICAgICAgIGNyZWF0ZWQuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiBpZiBhbiBJTyBlcnJvciBvY2N1cnMuCi0JICovCi0Jc3RhdGljIHB1YmxpYyB2b2lkIGNyZWF0ZVBhcmVudERpcmVjdG9yeUZvcihTdHJpbmcgcGF0aG5hbWUpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRobmFtZSk7Ci0JCUZpbGUgcGFyZW50ID0gZmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0JCWlmIChwYXJlbnQgIT0gbnVsbCkgewotCQkJcGFyZW50Lm1rZGlycygpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSVJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBzZWxlY3Rpb24uCi0JICogCi0JICogQHBhcmFtIG9iamVjdAotCSAqICAgICAgICAgICAgVGhlIHNlbGVjdGlvbgotCSAqIEByZXR1cm4gSVJlc291cmNlIGlmIHRoZSBzZWxlY3Rpb24gcmVwcmVzZW50cyBhbiBJUmVzb3VyY2UuIFJldHVybnMgbnVsbAotCSAqICAgICAgICAgb3RoZXJ3aXNlLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqLwotCXN0YXRpYyBwdWJsaWMgSVJlc291cmNlIGdldFJlc291cmNlRnJvbVNlbGVjdGlvbihPYmplY3Qgb2JqKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJUmVzb3VyY2UgcmVzID0gbnVsbDsKLQkJaWYgKG9iaiAhPSBudWxsKSB7Ci0JCQlpZiAob2JqIGluc3RhbmNlb2YgSVJlc291cmNlKSB7Ci0JCQkJcmVzID0gKElSZXNvdXJjZSkgb2JqOwotCQkJfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJSmF2YUVsZW1lbnQpIHsKLQkJCQlJSmF2YUVsZW1lbnQgamF2YUVsZW1lbnQgPSAoSUphdmFFbGVtZW50KSBvYmo7Ci0JCQkJcmVzID0gamF2YUVsZW1lbnQuZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0JCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEVudGVycHJpc2VCZWFuKSB7Ci0JCQkJRW50ZXJwcmlzZUJlYW4gZWpiQmVhbiA9IChFbnRlcnByaXNlQmVhbikgb2JqOwotCQkJCUlQcm9qZWN0IGVqYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWpiQmVhbik7Ci0JCQkJaWYgKGVqYlByb2plY3QgIT0gbnVsbCkKLQkJCQkJcmVzID0gZWpiUHJvamVjdDsKLQkJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgU2Vzc2lvbkJlYW4pIHsKLQkJCQlTZXNzaW9uQmVhbiBKRUU1QmVhbiA9IChTZXNzaW9uQmVhbikgb2JqOwotCQkJCUlQcm9qZWN0IGVqYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoSkVFNUJlYW4pOwotCQkJCWlmIChlamJQcm9qZWN0ICE9IG51bGwpCi0JCQkJCXJlcyA9IGVqYlByb2plY3Q7Ci0JCQl9Ci0KLQkJfQotCi0JCXJldHVybiByZXM7Ci0JfQotCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8gTmF1Z2h0eSBiaXRzLi4uCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQkvLwotCS8vIENyZWF0ZXMgYSBwYXRoIG9mIGZvbGRlcnMuCi0JLy8gRG8gbm90IGNhbGwgd2l0aCBhbiBhYnNvbHV0ZVBhdGggb2YgbGVzcyB0aGFuIG9uZSBzZWdtZW50LgotCS8vCi0JLy8gIHByaXZhdGUgc3RhdGljIElDb250YWluZXIgbWFrZUZvbGRlclBhdGggKAotCS8vICAgICAgICBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotCS8vICAgIElQYXRoIGFic29sdXRlUGF0aCwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IKLQkvLyAgKQotCS8vICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCS8vICB7Ci0JLy8gICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8PSAxKQotCS8vICAgIHsKLQkvLyAgICAgIHJldHVybiBnZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChhYnNvbHV0ZVBhdGguc2VnbWVudCgwKSk7Ci0JLy8gICAgfQotCS8vICAgIGVsc2UKLQkvLyAgICB7Ci0JLy8gICAgICBJQ29udGFpbmVyIHBhcmVudCA9IG1ha2VGb2xkZXJQYXRoKHJlc291cmNlQ29udGV4dCwKLQkvLyBhYnNvbHV0ZVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotCS8vICAgICAgU3RyaW5nIGZvbGRlck5hbWUgPSBhYnNvbHV0ZVBhdGgubGFzdFNlZ21lbnQoKTsKLQkvLyAgICAgIHJldHVybiBtYWtlRm9sZGVyKHJlc291cmNlQ29udGV4dCwgcGFyZW50LGZvbGRlck5hbWUsIHByb2dyZXNzTW9uaXRvciAsCi0JLy8gc3RhdHVzTW9uaXRvcik7Ci0JLy8gICAgfQotCS8vICB9Ci0JLy8KLQkvLyBDcmVhdGVzIGEgZm9sZGVyIHVuZGVyIGEgY29udGFpbmVyLgotCS8vIFRoZSBjb250YWluZXIgbXVzdCBhbHJlYWR5IGV4aXN0LgotCS8vCi0JLy8gcHJpdmF0ZSBzdGF0aWMgSUZvbGRlciBtYWtlRm9sZGVyICgKLQkvLyAgICAgICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLQkvLyAgICBJQ29udGFpbmVyIHBhcmVudCwKLQkvLyAgICBTdHJpbmcgZm9sZGVyTmFtZSwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IKLQkvLyAgKQotCS8vICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCS8vICB7Ci0JLy8gICAgSVJlc291cmNlIGNoaWxkID0gcGFyZW50LmZpbmRNZW1iZXIoZm9sZGVyTmFtZSk7Ci0JLy8gICAgaWYgKGNoaWxkID09IG51bGwpCi0JLy8gICAgewotCS8vICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpKSB7Ci0JLy8gICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyhuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GT0xERVJfQ1JFQVRJT05fRElTQUJMRUQiLAotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGZvbGRlck5hbWV9KSxudWxsKSwKLQkvLyBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSk7Ci0JLy8gICAgICAgIGlmIChyZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQkvLwotCS8vICAgICAgICAgIGlmICggcmVzdWx0ID09IElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX1RPX0FMTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCh0cnVlKTsKLQkvLwotCS8vICAgICAgfQotCS8vICAgICAgSUZvbGRlciBmb2xkZXIgPSBwYXJlbnQuZ2V0Rm9sZGVyKG5ldyBQYXRoKGZvbGRlck5hbWUpKTsKLQkvLyAgICAgIGZvbGRlci5jcmVhdGUodHJ1ZSx0cnVlLHByb2dyZXNzTW9uaXRvcik7Ci0JLy8gICAgICByZXR1cm4gZm9sZGVyOwotCS8vICAgIH0KLQkvLyAgICBlbHNlIGlmIChjaGlsZC5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZPTERFUikKLQkvLyAgICB7Ci0JLy8gICAgICByZXR1cm4gKElGb2xkZXIpY2hpbGQ7Ci0JLy8gICAgfQotCS8vICAgIGVsc2UKLQkvLyAgICB7Ci0JLy8gICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXZWJTZXJ2aWNlUGx1Z2luLklELDAsV2ViU2VydmljZVBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GT0xERVIiLG5ldwotCS8vIE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS5hcHBlbmQoZm9sZGVyTmFtZSkudG9TdHJpbmcoKX0pLG51bGwpKTsKLQkvLyAgICB9Ci0JLy8gIH0KLQotCS8vCi0JLy8gQ3JlYXRlcyBhIGZpbGUgdW5kZXIgYSBjb250YWluZXIuCi0JLy8gVGhlIGNvbnRhaW5lciBtdXN0IGFscmVhZHkgZXhpc3QuCi0JLy8KLQkvLyBwcml2YXRlIHN0YXRpYyBJRmlsZSBtYWtlRmlsZSAoCi0JLy8gICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLQkvLyAgICBJQ29udGFpbmVyIHBhcmVudCwKLQkvLyAgICBTdHJpbmcgZmlsZU5hbWUsCi0JLy8gICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sCi0JLy8gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0JLy8gICAgU3RhdHVzTW9uaXRvciBzdGF0dXNNb25pdG9yCi0JLy8gICkKLQkvLyAgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkvLyAgewotCS8vICAgIElSZXNvdXJjZSBjaGlsZCA9IHBhcmVudC5maW5kTWVtYmVyKGZpbGVOYW1lKTsKLQkvLyAgICBpZiAoY2hpbGQgIT0gbnVsbCkKLQkvLyAgICB7Ci0JLy8gICAgICBpZiAoY2hpbGQuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotCS8vICAgICAgewotCS8vICAgICAgICBpZiAoIXJlc291cmNlQ29udGV4dC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKSB7Ci0JLy8gICAgICAgICAgaW50IHJlc3VsdCA9IHN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKCBuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRCIsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksZmlsZU5hbWV9KSxudWxsKSwKLQkvLyBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSk7Ci0JLy8KLQkvLyAgICAgICAgICBpZiAocmVzdWx0ID09IElTdGF0dXNEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0JLy8KLQkvLyAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotCS8vICAgICAgICB9Ci0JLy8gICAgICAgIC8vV2UgaGF2ZSBwZXJtaXNzaW9uIHRvIG92ZXJ3cml0ZSBzbyBjaGVjayBpZiBmaWxlIGlzIHJlYWQtb25seQotCS8vICAgICAgICBpZiAoY2hpbGQuaXNSZWFkT25seSgpKQotCS8vICAgICAgICB7Ci0JLy8gICAgICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKSB7Ci0JLy8KLQkvLyAgICAgICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyggbmV3Ci0JLy8gU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlUGx1Z2luLklELDAsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTZXJ2aWNlUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRCIsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksZmlsZU5hbWV9KSxudWxsKSwKLQkvLyBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSk7Ci0JLy8KLQkvLyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQkvLwotCS8vICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ZRVNfVE9fQUxMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VDb250ZXh0LnNldENoZWNrb3V0RmlsZXNFbmFibGVkKHRydWUpOwotCS8vICAgICAgICAgIH0KLQkvLwotCS8vICAgICAgICAgIElGaWxlW10gZmlsZXMgPSBuZXcgSUZpbGVbMV07Ci0JLy8gICAgICAgICAgZmlsZXNbMF0gPSAoSUZpbGUpY2hpbGQ7Ci0JLy8KLQkvLyAgICAgICAgICBpZiAoCi0JLy8gIXN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKGdldFdvcmtzcGFjZSgpLnZhbGlkYXRlRWRpdChmaWxlcyxudWxsKSkpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCS8vICAgICAgICB9Ci0JLy8KLQkvLyAgICAgICAgLy9DaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBleGlzdGluZyBmaWxlLgotCS8vICAgICAgICAgICAgSUZpbGUgZmlsZSA9IHBhcmVudC5nZXRGaWxlKG5ldyBQYXRoKGZpbGVOYW1lKSk7Ci0JLy8gICAgICAgIGZpbGUuc2V0Q29udGVudHMoaW5wdXRTdHJlYW0sdHJ1ZSx0cnVlLHByb2dyZXNzTW9uaXRvcik7Ci0JLy8gICAgICAgIHJldHVybiBmaWxlOwotCS8vCi0JLy8gICAgICB9Ci0JLy8gICAgICBlbHNlCi0JLy8gICAgICB7Ci0JLy8gICAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldwotCS8vIFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCxXZWJTZXJ2aWNlUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZJTEUiLG5ldwotCS8vIE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS5hcHBlbmQoZmlsZU5hbWUpfSksbnVsbCkpOwotCS8vICAgICAgfQotCS8vICAgIH0KLQkvLyAgICBlbHNlCi0JLy8gICAgewotCS8vICAgICAgICAvL0NyZWF0ZSBhIG5ldyBmaWxlLgotCS8vICAgICAgICBJRmlsZSBmaWxlID0gcGFyZW50LmdldEZpbGUobmV3IFBhdGgoZmlsZU5hbWUpKTsKLQkvLyAgICAgICAgZmlsZS5jcmVhdGUoaW5wdXRTdHJlYW0sdHJ1ZSxwcm9ncmVzc01vbml0b3IpOwotCS8vICAgICAgICByZXR1cm4gZmlsZTsKLQkvLyAgICB9Ci0JLy8gIH0KLQotCS8qKgotCSAqIERlbGV0ZXMgYSBmaWxlIHVuZGVyIGEgY29udGFpbmVyLiBUaGUgY29udGFpbmVyIG11c3QgYWxyZWFkeSBleGlzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSAtCi0JICogICAgICAgICAgICB0aGUgSUZpbGUgdG8gYmUgZGVsZXRlZAotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKiBAcGFyYW0gc3RhdHVzTW9uaXRvcgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpZiBpdCBleGlzdHMgYW5kIGlzCi0JICogICAgICAgICBzdWNjZXNzZnVsbHkgZGVsZXRlZC4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCS8vICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVsZXRlRmlsZSAoCi0JLy8gICAgICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0JLy8gICAgSUZpbGUgZmlsZSwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IgKQotCS8vICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JLy8gICAgewotCS8vICAgICAgICBpZiAoZmlsZS5leGlzdHMoKSkKLQkvLyAgICAgICAgewotCS8vICAgICAgICAgICAgICAgIGlmICghcmVzb3VyY2VDb250ZXh0LmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpIHsKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyggbmV3Ci0JLy8gU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlUGx1Z2luLklELDAsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRCIsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXQotCS8vIHtmaWxlLmdldFBhcmVudCgpLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSxmaWxlLmdldE5hbWUoKX0pLG51bGwpLAotCS8vIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpKTsKLQkvLwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JLy8KLQkvLyAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JLy8gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JLy8gICAgICAgICAgICAgICAgLy9XZSBoYXZlIHBlcm1pc3Npb24gdG8gb3ZlcndyaXRlIHNvIGNoZWNrIGlmIGZpbGUgaXMgcmVhZC1vbmx5Ci0JLy8gICAgICAgICAgICAgICAgaWYgKGZpbGUuaXNSZWFkT25seSgpKQotCS8vICAgICAgICAgICAgICAgIHsKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzb3VyY2VDb250ZXh0LmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSkgewotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyggbmV3Ci0JLy8gU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlUGx1Z2luLklELDAsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GSUxFX0NIRUNLT1VUX0RJU0FCTEVEIiwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdCi0JLy8ge2ZpbGUuZ2V0UGFyZW50KCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGZpbGUuZ2V0TmFtZSgpfSksbnVsbCksCi0JLy8gZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkpOwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQkvLwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ZRVNfVE9fQUxMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JLy8KLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgSUZpbGVbXSBmaWxlcyA9IG5ldyBJRmlsZVsxXTsKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzWzBdID0gZmlsZTsKLQkvLwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAotCS8vICFzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyhnZXRXb3Jrc3BhY2UoKS52YWxpZGF0ZUVkaXQoZmlsZXMsbnVsbCkpKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JLy8gICAgICAgICAgICAgICAgfQotCS8vICAgICAgICAgICAgICAgIGZpbGUuZGVsZXRlKHRydWUscHJvZ3Jlc3NNb25pdG9yKTsKLQkvLyAgICAgICAgICAgICAgICB9Ci0JLy8gICAgICAgIC8vQXQgdGhpcyBwb2ludCwgZWl0aGVyIHRoZSBmaWxlIGRpZCBub3QgZXhpc3Qgb3Igd2Ugc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQKLQkvLyBpdC4gUmV0dXJuIHN1Y2Nlc3MuCi0JLy8gICAgICAgIHJldHVybiB0cnVlOwotCS8vICB9Ci0JLyoqCi0JICogRGVsZXRlcyBhIGZvbGRlciB1bmRlciBhIGNvbnRhaW5lci4KLQkgKiAKLQkgKiBAcGFyYW0gZm9sZGVyIC0KLQkgKiAgICAgICAgICAgIHRoZSBJRm9sZGVyIHRvIGJlIGRlbGV0ZWQKLQkgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yCi0JICogQHBhcmFtIHN0YXR1c01vbml0b3IKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZvbGRlciBkb2VzIG5vdCBleGlzdCBvciBpZiBpdCBleGlzdHMgYW5kIGlzCi0JICogICAgICAgICBzdWNjZXNzZnVsbHkgZGVsZXRlZCBhbG9uZyB3aXRoIGl0cyBtZW1iZXJzLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JLy8gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWxldGVGb2xkZXIgKAotCS8vICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0JLy8gICAgSUZvbGRlciBmb2xkZXIsCi0JLy8gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0JLy8gICAgU3RhdHVzTW9uaXRvciBzdGF0dXNNb25pdG9yCi0JLy8gICkKLQkvLyAgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkvLyAgewotCS8vICAgIGlmICghZm9sZGVyLmV4aXN0cygpKSByZXR1cm4gdHJ1ZTsKLQkvLwotCS8vICAgIGJvb2xlYW4gZGVsZXRlZCA9IHRydWU7Ci0JLy8gICAgSVJlc291cmNlW10gcmVzb3VyY2VzID0gZm9sZGVyLm1lbWJlcnMoKTsKLQkvLyAgICBmb3IgKGludCBpPTA7IGk8cmVzb3VyY2VzLmxlbmd0aDsgaSsrKQotCS8vICAgIHsKLQkvLyAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKLQkvLyAgICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlKQotCS8vICAgICAgewotCS8vICAgICAgICBkZWxldGVkID0gZGVsZXRlRmlsZShyZXNvdXJjZUNvbnRleHQsIChJRmlsZSlyZXNvdXJjZSwgcHJvZ3Jlc3NNb25pdG9yLAotCS8vIHN0YXR1c01vbml0b3IpOwotCS8vICAgICAgfQotCS8vICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlcikKLQkvLyAgICAgIHsKLQkvLyAgICAgICAgZGVsZXRlZCA9IGRlbGV0ZUZvbGRlciggcmVzb3VyY2VDb250ZXh0LCAoSUZvbGRlcilyZXNvdXJjZSwKLQkvLyBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotCS8vICAgICAgfQotCS8vCi0JLy8gICAgICBpZiAoIWRlbGV0ZWQpIGJyZWFrOwotCS8vICAgIH0KLQkvLyAgICBpZiAoZGVsZXRlZCkgewotCS8vICAgICAgZm9sZGVyLmRlbGV0ZSh0cnVlLCB0cnVlLCBwcm9ncmVzc01vbml0b3IpOwotCS8vICAgICAgcmV0dXJuIHRydWU7Ci0JLy8gICAgfQotCS8vICAgIGVsc2UKLQkvLyAgICAgIHJldHVybiBmYWxzZTsKLQkvLwotCS8vICB9Ci0JLyoqCi0JICogRGVsZXRlcyBhIHNldCBvZiBmaWxlcyB0aGF0IGFyZSBuYW1lZCBpbiBhbiBpbmRleCBmaWxlIGxvY2F0ZWQgcmVsYXRpdmUKLQkgKiB0byB0aGUgcGx1Z2luJ3MgaW5zdGFsbGF0aW9uIGxvY2F0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBwbHVnaW4KLQkgKiAgICAgICAgICAgIFRoZSBwbHVnaW4gY29udGFpbmluZyB0aGUgaW5kZXhlZCBmaWxlIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHNvdXJjZVBhdGggLQotCSAqICAgICAgICAgICAgcmVsYXRpdmUgcGF0aCBvZiB0aGUgaW5kZXhlZCBmaWxlIHBhc3NpbmcgYSBudWxsIGluIGhhcyB0aGUKLQkgKiAgICAgICAgICAgIHNhbWUgZWZmZWN0IGFzIHBhc3NpbmcgYSAiLiIgaW4KLQkgKiBAcGFyYW0gaW5kZXhGaWxlUGF0aCAtCi0JICogICAgICAgICAgICB0aGUgaW5kZXhlZCBmaWxlbmFtZSBNdXN0IG5vdCBiZSBudWxsCi0JICogQHBhcmFtIHRhcmdldFBhdGggLQotCSAqICAgICAgICAgICAgcGF0aCBjb250YWluaW5nIHRoZSBmaWxlcyBuYW1lZCBpbiB0aGUgaW5kZXhlZCBmaWxlIE11c3Qgbm90Ci0JICogICAgICAgICAgICBiZSBudWxsLCB0aGlzIHBhdGggbXVzdCBlbmQgd2l0aCBhIHRyYWlsaW5nIHNlcGFyYXRvcgotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKi8KLQkvLyAgcHVibGljIHN0YXRpYyB2b2lkIGRlbGV0ZUluZGV4RmlsZXNGcm9tT1MgKAotCS8vICAgIFBsdWdpbiBwbHVnaW4sCi0JLy8gICAgSVBhdGggaW5kZXhGaWxlUGF0aCwKLQkvLyAgICBJUGF0aCB0YXJnZXRQYXRoCi0JLy8gICkKLQkvLyAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkvLyAgICBJbnB1dFN0cmVhbSBpbnB1dCA9IHBsdWdpbi5vcGVuU3RyZWFtKGluZGV4RmlsZVBhdGgpOwotCS8vICAgIEVudW1lcmF0aW9uIGZpbGVuYW1lcyA9IFN0cmluZ1V0aWxzLnBhcnNlRmlsZW5hbWVzRnJvbVN0cmVhbShpbnB1dCk7Ci0JLy8gICAgd2hpbGUgKGZpbGVuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCS8vICAgICAgRmlsZSB0YXJnZXRGaWxlID0KLQkvLyB0YXJnZXRQYXRoLmFwcGVuZCgoU3RyaW5nKWZpbGVuYW1lcy5uZXh0RWxlbWVudCgpKS50b0ZpbGUoKTsKLQkvLyAgICAgIGlmICh0YXJnZXRGaWxlLmV4aXN0cygpKQotCS8vICAgICAgICB0YXJnZXRGaWxlLmRlbGV0ZSgpOwotCS8vICAgIH0KLQkvLyAgfQotCS8qKgotCSAqIFJldHVybnMgYSBVUkkgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiBFY2xpcHNlIHJlc291cmNlLCBvciBudWxsIGlmIG5vIHN1Y2gKLQkgKiByZWZlcmVuY2UgY2FuIGJlIGRldGVybWluZWQgKGZvciBleGFtcGxlLCBpZiB0aGUgcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QKLQkgKiBpbiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtKS4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2UKLQkgKiAgICAgICAgICAgIFRoZSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIFRoZSBVUkkgYXMgYSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gVVJJIHRvIHRoZSByZXNvdXJjZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVVSSShJUmVzb3VyY2UgcmVzb3VyY2UpIHsKLQkJU3RyaW5nIHVyaSA9IG51bGw7Ci0JCUlQYXRoIGxvY2F0aW9uID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCXVyaSA9ICJmaWxlOiIgKyBsb2NhdGlvbi50b1N0cmluZygpOwotCQl9Ci0JCXJldHVybiB1cmk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIFVSSSByZWZlcmVuY2UgdG8gdGhlIGdpdmVuIEVjbGlwc2UgcmVzb3VyY2UgdXNpbmcgdGhlCi0JICogInBsYXRmb3JtOiIgcHJvdG9jb2wsIG9yIG51bGwgaWYgbm8gc3VjaCByZWZlcmVuY2UgY2FuIGJlIGRldGVybWluZWQgKGZvcgotCSAqIGV4YW1wbGUsIGlmIHRoZSByZXNvdXJjZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtKS4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2UKLQkgKiAgICAgICAgICAgIFRoZSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIFRoZSBVUkkgYXMgYSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gVVJJIHRvIHRoZSByZXNvdXJjZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQbGF0Zm9ybVJlc291cmNlVVJJKElSZXNvdXJjZSByZXNvdXJjZSkgewotCQlTdHJpbmcgdXJpID0gbnVsbDsKLQkJSVBhdGggbG9jYXRpb24gPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJdXJpID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyBsb2NhdGlvbi50b1N0cmluZygpOwotCQl9Ci0JCXJldHVybiB1cmk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZGVmYXVsdCBiaW5kaW5nIG5hbWVzcGFjZSBzdHJpbmcgZ2l2ZW4gYSBKYXZhIGJlYW4gbmFtZQotCSAqICh1c2luZyB0aGUgY29udmVudGlvbiB1c2VkIGJ5IENUQyBpbiBHTSkuIGUuZy4gSmF2YSBiZWFuIE15Q2xhc3MgcmVzdWx0Ci0JICogaW4gYmluZGluZyBuYW1lc3BhY2Ugb2YKLQkgKiAiaHR0cDovL3d3dy5teWNsYXNzLmNvbS9kZWZpbml0aW9ucy9NeUNsYXNzUmVtb3RlSW50ZXJmYWNlIgotCSAqIAotCSAqIEBwYXJhbSBiZWFuTmFtZQotCSAqICAgICAgICAgICAgVGhlIGphdmEgYmVhbi4KLQkgKiBAcmV0dXJuIFRoZSBiaW5kaW5nIG5hbWVzcGFjZSBhcyBhIHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCaW5kaW5nTmFtZXNwYWNlKFN0cmluZyBiZWFuTmFtZSkgewotCQlyZXR1cm4gImh0dHA6Ly93d3cuIiArIGJlYW5OYW1lLnRvTG93ZXJDYXNlKCkgKyAiLmNvbS9kZWZpbml0aW9ucy8iCi0JCQkJKyBiZWFuTmFtZSArICJSZW1vdGVJbnRlcmZhY2UiOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGRlZmF1bHQgc2NoZW1hIG5hbWVzcGFjZSBzdHJpbmcgZ2l2ZW4gYSBKYXZhIGJlYW4gbmFtZSAodXNpbmcKLQkgKiB0aGUgY29udmVudGlvbiB1c2VkIGJ5IENUQyBpbiBHTSkuIGUuZy4gSmF2YSBiZWFuIE15Q2xhc3MgcmVzdWx0IGluCi0JICogc2NoZW1hIG5hbWVzcGFjZSBvZgotCSAqICJodHRwOi8vd3d3Lm15Y2xhc3MuY29tL3NjaGVtYXMvTXlDbGFzc1JlbW90ZUludGVyZmFjZSIKLQkgKiAKLQkgKiBAcGFyYW0gYmVhbk5hbWUKLQkgKiAgICAgICAgICAgIFRoZSBqYXZhIGJlYW4uCi0JICogQHJldHVybiBUaGUgc2NoZW1hcyBuYW1lc3BhY2UgYXMgYSBzdHJpbmcuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2NoZW1hTmFtZXNwYWNlKFN0cmluZyBiZWFuTmFtZSkgewotCQlyZXR1cm4gImh0dHA6Ly93d3cuIiArIGJlYW5OYW1lLnRvTG93ZXJDYXNlKCkgKyAiLmNvbS9zY2hlbWFzLyIKLQkJCQkrIGJlYW5OYW1lICsgIlJlbW90ZUludGVyZmFjZSI7Ci0JfQotCi0JLy8gIHB1YmxpYyBzdGF0aWMgVmVjdG9yIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpIHsKLQkvLyAgICAgICAgVmVjdG9yIG9wdGlvbnMgPSBuZXcgVmVjdG9yKCk7Ci0JLy8gICAgb3B0aW9ucy5hZGQobmV3Ci0JLy8gU3RhdHVzT3B0aW9uKElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX0lELElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX0xBQkVMLCIiLCIiKSk7Ci0JLy8gICAgb3B0aW9ucy5hZGQobmV3Ci0JLy8gU3RhdHVzT3B0aW9uKElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX1RPX0FMTF9JRCxJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfTEFCRUwsIiIsIiIpKTsKLQkvLyAgICBvcHRpb25zLmFkZChuZXcKLQkvLyBTdGF0dXNPcHRpb24oSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQsSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwsIiIsIiIpKTsKLQkvLyAgICByZXR1cm4gb3B0aW9uczsKLQkvLyAgfQotCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQkvKioKLQkgKiBHZXRzIHRoZSBTT0FQIHJwY3JvdXRlciBzZXJ2bGV0IFVSTCBmb3IgdGhlIHNlcnZpY2UgcHJvamVjdAotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkCi0JICogICAgICAgICAgICBUaGUgc2VydmVyIGZhY3RvcnkgaWQKLQkgKiBAcGFyYW0gc2VydmVyCi0JICogICAgICAgICAgICBUaGUgc2VydmVyCi0JICogQHJldHVybiBUaGUgVVJMLCBwb3NzaWJseSBudWxsLgotCSAqLwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmxldFVSTChJUHJvamVjdCBwcm9qZWN0LAotCQkJU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgSVNlcnZlciBzZXJ2ZXIpIHsKLQkJcmV0dXJuIGdldFNlcnZsZXRVUkwoZ2V0V2ViUHJvamVjdFVSTChwcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlcikpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZsZXRVUkwoU3RyaW5nIHdlYlByb2plY3RVUkwpIHsKLQkJaWYgKHdlYlByb2plY3RVUkwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQllbHNlCi0JCQlyZXR1cm4gd2ViUHJvamVjdFVSTCArIFNFUlZMRVRfRVhUOwotCX0KLQotCS8qKgotCSAqIEdldHMgdGhlIGNsaWVudCBXZWIgcHJvamVjdCBuYW1lCi0JICogCi0JICogQHBhcmFtIHByb2plY3ROYW1lCi0JICogICAgICAgICAgICBUaGUgcHJvamVjdCBuYW1lIHRvIGJhc2Ugb24uCi0JICogQHBhcmFtIHR5cGVJZCB0aGUgd2Vic2VydmljZSB0eXBlIGlkLgotCSAqIEByZXR1cm4gVGhlIGNsaWVudCBXZWIgcHJvamVjdCBuYW1lLgotCSAqIAotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q2xpZW50V2ViUHJvamVjdE5hbWUoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgdHlwZUlkKSAKLQl7Ci0JCVN0cmluZyAgIGJhc2VDbGllbnRXZWJQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotCQlJUGF0aCAgICBwcm9qZWN0UGF0aDsKLQkJSVByb2plY3QgcHJvamVjdDsKLQkJYm9vbGVhbiAgZm91bmRXZWJQcm9qZWN0ICAgICA9IGZhbHNlOwotCQlpbnQgICAgICBpICAgICAgICAgICAgICAgICAgID0gMTsKLQkJCi0JCWlmKCBpc1NrZWxldG9uRUpCVHlwZSggdHlwZUlkICkgKQotCQl7Ci0JCSAgLy8gRm9yIHRoZSBza2VsZXRvbiBFSkIgc2NlbmFyaW8gd2UgbmVlZCB0byBjcmVhdGUgYSBzbGlnaHRseSBkaWZmZXJlbnQKLQkJICAvLyBiYXNlIG5hbWUuICBXaGVuIHRoZSBFSkIgcHJvamVjdCBpcyBjcmVhdGVkIGFub3RoZXIgcHJvamVjdAotCQkgIC8vIGlzIGNyZWF0ZWQgd2l0aCAiQ2xpZW50IiB0YWNrZWQgb250byB0aGUgZW5kLiAgV2Ugd2lsbAotCQkgIC8vIGFkZCAiV1MiIHRvIG91ciBjbGllbnQgc28gd2UgZG9uJ3QgY29sbGlkZSB3aXRoIHRoZSBvdGhlcgotCQkgIC8vIGNsaWVudCBwcm9qZWN0LgotCQkgIGJhc2VDbGllbnRXZWJQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgIldTIiArIERFRkFVTFRfQ0xJRU5UX1dFQl9QUk9KRUNUX0VYVDsgICAgCi0JCX0KLQkJCi0JCVN0cmluZyAgY2xpZW50V2ViUHJvamVjdE5hbWUgPSBiYXNlQ2xpZW50V2ViUHJvamVjdE5hbWU7Ci0JCQotCQl3aGlsZSAoIWZvdW5kV2ViUHJvamVjdCkgCi0JCXsKLQkJICBwcm9qZWN0UGF0aCA9IG5ldyBQYXRoKGNsaWVudFdlYlByb2plY3ROYW1lKS5tYWtlQWJzb2x1dGUoKTsKLQkJICBwcm9qZWN0ID0gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YocHJvamVjdFBhdGgpOwotCQkgIAotCQkgIGlmIChwcm9qZWN0LmV4aXN0cygpICYmICFSZXNvdXJjZVV0aWxzLmlzV2ViUHJvamVjdChwcm9qZWN0KSkgCi0JCSAgewotCQkJY2xpZW50V2ViUHJvamVjdE5hbWUgPSBiYXNlQ2xpZW50V2ViUHJvamVjdE5hbWUgKyBpOwotCQkJaSsrOwotCQkgIH0KLQkJICBlbHNlIAotCQkgIHsKLQkJCWZvdW5kV2ViUHJvamVjdCA9IHRydWU7Ci0JCSAgfQotCQl9Ci0JCQotCQlyZXR1cm4gY2xpZW50V2ViUHJvamVjdE5hbWU7Ci0JfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0Q2xpZW50UHJvamVjdENvbXBvbmVudE5hbWUoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgY29tcG9uZW50TmFtZSwgYm9vbGVhbiBpc0VKQikKLSAgewotICAgIFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZSA9IG51bGw7Ci0gICAgU3RyaW5nIGNsaWVudENvbXBvbmVudE5hbWUgPSBudWxsOwotICAgIGlmIChpc0VKQikKLSAgICB7Ci0gICAgICBjbGllbnRQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgREVGQVVMVF9DTElFTlRfRUpCX1BST0pFQ1RfRVhUOwotICAgICAgY2xpZW50Q29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgKyBERUZBVUxUX0NMSUVOVF9FSkJfUFJPSkVDVF9FWFQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjbGllbnRQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotLy8gICAgICBTdHJpbmcgYmFzZU5hbWUgPSBjbGllbnRQcm9qZWN0TmFtZTsKLSAgICAgIGNsaWVudENvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lICsgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotLy8gICAgICBTdHJpbmcgYmFzZUNvbXBOYW1lID0gY2xpZW50Q29tcG9uZW50TmFtZTsKLSAgICB9Ci0gICAgCi0gICAgLy9UT0RPIHdlIG1heSB3YW50IHRvIHJlbW92ZSB0aGlzIGlmIHN0YXRlbWVudCBvbmNlIGRlZmVjdCAxMDMzNjYgaXMgcmVzb2x2ZWQuCi0gICAgLy9UT0RPOiAgRGVmZWN0IDEwNzk5NyAtIFJldmlzaXQgcHJqZWN0IGFuZCBtb2R1bGUgY3JlYXRpb24gbG9naWMKLS8vICAgIGlmKCAhRmxleGlibGVKYXZhUHJvamVjdFByZWZlcmVuY2VVdGlsLmdldE11bHRpcGxlTW9kdWxlc1BlclByb2plY3RQcm9wKCkgKQotLy8gICAgewotLy8gICAgICBjbGllbnRDb21wb25lbnROYW1lID0gY2xpZW50UHJvamVjdE5hbWU7CQotLy8gICAgfQotICAgIAotLy8gICAgYm9vbGVhbiAgZm91bmRXZWJQcm9qZWN0ICAgICA9IGZhbHNlOwotLy8gICAgaW50ICAgICAgaSAgICAgICAgICAgICAgICAgICA9IDE7Ci0vLyAgICAKLS8vICAgIHdoaWxlICghZm91bmRXZWJQcm9qZWN0KSAKLS8vICAgIHsKLS8vICAgICAgSVBhdGggcHJvamVjdFBhdGggPSBuZXcgUGF0aChjbGllbnRQcm9qZWN0TmFtZSkubWFrZUFic29sdXRlKCk7Ci0vLyAgICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihwcm9qZWN0UGF0aCk7Ci0vLyAgICAgIAotLy8gICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkgCi0vLyAgICAgIHsKLS8vICAgICAgICBjbGllbnRQcm9qZWN0TmFtZSA9IGJhc2VOYW1lICsgaTsKLS8vICAgICAgICBjbGllbnRDb21wb25lbnROYW1lID0gYmFzZUNvbXBOYW1lICsgaTsKLS8vICAgICAgICBpKys7Ci0vLyAgICAgIH0KLS8vICAgICAgZWxzZSAKLS8vICAgICAgewotLy8gICAgICAgIGZvdW5kV2ViUHJvamVjdCA9IHRydWU7Ci0vLyAgICAgIH0KLS8vICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmV3IFN0cmluZ1tde2NsaWVudFByb2plY3ROYW1lLCBjbGllbnRDb21wb25lbnROYW1lfTsKLSAgfQotICAKLSAgICAvKioKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gdHlwZUlECi0gICAgICogQHJldHVybgotICAgICAqIAotICAgICAqIEBkZXByZWNhdGVkCi0gICAgICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzU2tlbGV0b25FSkJUeXBlKCBTdHJpbmcgdHlwZUlEICkKLQl7Ci0JICByZXR1cm4gdHlwZUlELmVxdWFscyggIm9yZy5lY2xpcHNlLmpzdC53cy50eXBlLndzZGwuZWpiIiApOyAgICAKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEVKQlByb2plY3ROYW1lKCkgewotCQlyZXR1cm4gREVGQVVMVF9FSkJfUFJPSkVDVF9OQU1FOwotCX0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRFSkJDb21wb25lbnROYW1lKCkgewotICAgIHJldHVybiBERUZBVUxUX0VKQl9DT01QT05FTlRfTkFNRTsKLSAgfSAgCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0V2ViUHJvamVjdE5hbWUoKSB7Ci0JCXJldHVybiBERUZBVUxUX1dFQl9QUk9KRUNUX05BTUU7Ci0JfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFdlYkNvbXBvbmVudE5hbWUoKSB7Ci0gICAgcmV0dXJuIERFRkFVTFRfV0VCX0NPTVBPTkVOVF9OQU1FOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudEV4dGVuc2lvbigpIHsKLSAgICByZXR1cm4gREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotICB9Ci0gIAotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0TmFtZQotCSAqIEByZXR1cm4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSb3V0ZXJQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWUpIHsKLQkJcmV0dXJuIHByb2plY3ROYW1lICsgREVGQVVMVF9ST1VURVJfUFJPSkVDVF9FWFQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFNlcnZpY2VFQVJQcm9qZWN0TmFtZSgpIHsKLQkJcmV0dXJuIERFRkFVTFRfU0VSVklDRV9FQVJfUFJPSkVDVF9OQU1FOwotCX0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRTZXJ2aWNlRUFSQ29tcG9uZW50TmFtZSgpIHsKLSAgICByZXR1cm4gREVGQVVMVF9TRVJWSUNFX0VBUl9DT01QT05FTlRfTkFNRTsKLSAgfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudEVBUlByb2plY3ROYW1lKCkgewotCQlyZXR1cm4gREVGQVVMVF9DTElFTlRfRUFSX1BST0pFQ1RfTkFNRTsKLQl9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudEVBUkNvbXBvbmVudE5hbWUoKSB7Ci0gICAgcmV0dXJuIERFRkFVTFRfQ0xJRU5UX0VBUl9DT01QT05FTlRfTkFNRTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEVBUkV4dGVuc2lvbigpIHsKLQkgICAgcmV0dXJuIERFRkFVTFRfRUFSX0VYVDsKLQkgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU2VsZWN0aW9uVG9SZXNvdXJjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU2VsZWN0aW9uVG9SZXNvdXJjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2U0MTIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1NlbGVjdGlvblRvUmVzb3VyY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0aW9uVG9SZXNvdXJjZSBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyI3RyYW5zZm9ybShqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXZhbHVlOwotICAgIElSZXNvdXJjZSAgICAgICAgICAgIHJlc291cmNlICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHNlbGVjdGlvbiAhPSBudWxsICkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgCi0gICAgICBpZiggb2JqZWN0ICE9IG51bGwgKQotICAgICAgewotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzb3VyY2UgPSAoSVJlc291cmNlKW9iamVjdDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBJQ29tcGlsYXRpb25Vbml0ICkKLSAgICAgICAgewotICAgICAgICAgIElDb21waWxhdGlvblVuaXQgY29tcFVuaXQgPSAoSUNvbXBpbGF0aW9uVW5pdClvYmplY3Q7Ci0gICAgICAgICAgCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVzb3VyY2UgPSBjb21wVW5pdC5nZXRDb3JyZXNwb25kaW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2goIEphdmFNb2RlbEV4Y2VwdGlvbiBleGMpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBFbnRlcnByaXNlQmVhbiApIAotICAgICAgICB7Ci0gICAgICAgICAgRW50ZXJwcmlzZUJlYW4gZWpiQmVhbiAgICA9IChFbnRlcnByaXNlQmVhbilvYmplY3Q7Ci0gICAgICAgICAgSVByb2plY3QgICAgICAgZWpiUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCggZWpiQmVhbiApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBlamJQcm9qZWN0ICE9IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc291cmNlID0gZWpiUHJvamVjdDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzb3VyY2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1NlcnZlclV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TZXJ2ZXJVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODdkNTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1NlcnZlclV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0ICAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEwMDQgICAxNTkzNTYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEdldCBjb3JyZWN0IG1vZHVsZSByb290IFVSTCBiYXNlZCBvbiBzZXJ2ZXIgY2hvc2VuCi0gKiAyMDA3MDExOSAgIDE1OTQ1OCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5sb2dnZXIucHJveHkuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnNlcnZlcnRhcmdldC5JU2VydmVyVGFyZ2V0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5JTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklVUkxQcm92aWRlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHVzZWZ1bCBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggU2VydmVyIHBsdWdpbiBmdW5jdGlvbnMKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFNlcnZlclV0aWxzIHsKLQotCXByaXZhdGUgSGFzaHRhYmxlIHNlcnZlcklkVG9MYWJlbF87Ci0KLQlwcml2YXRlIEhhc2h0YWJsZSBzZXJ2ZXJMYWJlbFRvSWRfOwotCi0JcHJpdmF0ZSBzdGF0aWMgU2VydmVyVXRpbHMgaW5zdGFuY2VfOwotCi0JcHVibGljIHN0YXRpYyBTZXJ2ZXJVdGlscyBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0JCQlpbnN0YW5jZV8gPSBuZXcgU2VydmVyVXRpbHMoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2VfOwotCi0JfQotCi0JcHVibGljIFNlcnZlclV0aWxzKCkgewotCX0KLQotCS8vIEdldHMgdGhlIFNlcnZlciBsYWJlbHMgZ2l2ZW4gdGhlIHNlcnZlciBmYWN0b3J5IGlkCi0JcHVibGljIHZvaWQgZ2V0U2VydmVyTGFiZWxzQW5kSWRzKCkgewotCQlzZXJ2ZXJJZFRvTGFiZWxfID0gbmV3IEhhc2h0YWJsZSgpOwotCQlzZXJ2ZXJMYWJlbFRvSWRfID0gbmV3IEhhc2h0YWJsZSgpOwotCQlJU2VydmVyVHlwZVtdIHNlcnZlclR5cGVzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCQlmb3IgKGludCBpZHggPSAwOyBpZHggPCBzZXJ2ZXJUeXBlcy5sZW5ndGg7IGlkeCsrKSB7Ci0KLQkJCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSAoSVNlcnZlclR5cGUpIHNlcnZlclR5cGVzW2lkeF07Ci0KLQkJCVN0cmluZyBpZCA9IHNlcnZlclR5cGUuZ2V0SWQoKTsKLQkJCVN0cmluZyBzZXJ2ZXJMYWJlbCA9IHNlcnZlclR5cGUuZ2V0TmFtZSgpOwotCQkJaWYgKCEoaWQgPT0gbnVsbCkgJiYgIShzZXJ2ZXJMYWJlbCA9PSBudWxsKSkgewotCQkJCXNlcnZlcklkVG9MYWJlbF8ucHV0KGlkLCBzZXJ2ZXJMYWJlbCk7Ci0JCQkJc2VydmVyTGFiZWxUb0lkXy5wdXQoc2VydmVyTGFiZWwsIGlkKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTGFiZWxGb3JJZChTdHJpbmcgZmFjdG9yeUlkKSB7Ci0JCWlmIChzZXJ2ZXJJZFRvTGFiZWxfID09IG51bGwpCi0JCQl0aGlzLmdldFNlcnZlckxhYmVsc0FuZElkcygpOwotCQlyZXR1cm4gKFN0cmluZykgc2VydmVySWRUb0xhYmVsXy5nZXQoZmFjdG9yeUlkKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlcklkRm9yTGFiZWwoU3RyaW5nIGZhY3RvcnlMYWJlbCkgewotCQlpZiAoc2VydmVyTGFiZWxUb0lkXyA9PSBudWxsKQotCQkJdGhpcy5nZXRTZXJ2ZXJMYWJlbHNBbmRJZHMoKTsKLQkJcmV0dXJuIChTdHJpbmcpIHNlcnZlckxhYmVsVG9JZF8uZ2V0KGZhY3RvcnlMYWJlbCk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgbW9kaWZ5TW9kdWxlcyhJRW52aXJvbm1lbnQgZW52LCBJU2VydmVyIHNlcnZlciwKLQkJCUlNb2R1bGUgbW9kdWxlLCBib29sZWFuIGFkZCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0KLQkJSVNlcnZlcldvcmtpbmdDb3B5IHdjID0gbnVsbDsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotCQl0cnkgewotCi0JCQlpZiAobW9kdWxlID09IG51bGwgfHwgIW1vZHVsZS5nZXRQcm9qZWN0KCkuZXhpc3RzKCkpIHsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCi0JCQkvLyBjaGVjayBpZiBtb2R1bGUgaXMgYSB0cnVlIEphdmEgcHJvamVjdAotCQkJaWYgKG1vZHVsZSBpbnN0YW5jZW9mIElNb2R1bGUpIHsKLQkJCQlJTW9kdWxlIHBtID0gKElNb2R1bGUpIG1vZHVsZTsKLQkJCQlpZiAocG0gIT0gbnVsbCkgewotCQkJCQlJUHJvamVjdCBwcm9qZWN0ID0gcG0uZ2V0UHJvamVjdCgpOwotCQkJCQlpZiAocHJvamVjdCA9PSBudWxsCi0JCQkJCQkJfHwgUmVzb3VyY2VVdGlscy5pc1RydWVKYXZhUHJvamVjdChwcm9qZWN0KSkgewotCQkJCQkJcmV0dXJuIHN0YXR1czsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJd2MgPSBzZXJ2ZXIuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQkJCWlmICh3YyAhPSBudWxsKSB7Ci0vLwkJCQlPYmplY3QgeCA9IHNlcnZlci5nZXRBZGFwdGVyKElSdW5uaW5nQWN0aW9uU2VydmVyLmNsYXNzKTsKLS8vCQkJCWlmICh4ICE9IG51bGwgJiYgeCBpbnN0YW5jZW9mIElSdW5uaW5nQWN0aW9uU2VydmVyKSB7Ci0vLwkJCQkJaW50IHN0YXRlID0gc2VydmVyLmdldFNlcnZlclN0YXRlKCk7Ci0vLwkJCQkJaWYgKHN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RPUFBFRAotLy8JCQkJCQkJfHwgc3RhdGUgPT0gSVNlcnZlci5TVEFURV9VTktOT1dOKSB7Ci0vLwkJCQkJCVN0cmluZyBtb2RlID0gSUxhdW5jaE1hbmFnZXIuUlVOX01PREU7Ci0vLwkJCQkJCXNlcnZlci5zeW5jaHJvbm91c1N0YXJ0KG1vZGUsIG1vbml0b3IpOwotLy8JCQkJCX0KLS8vCQkJCX0KLQotCQkJCUxpc3QgbGlzdCA9IEFycmF5cy5hc0xpc3Qoc2VydmVyLmdldE1vZHVsZXMoKSk7Ci0JCQkJaWYgKGFkZCkgewotCQkJCQlpZiAoIWxpc3QuY29udGFpbnMobW9kdWxlKSkgewotCQkJCQkJU2VydmVyVXRpbC5tb2RpZnlNb2R1bGVzKHdjLCBuZXcgSU1vZHVsZVtdIHsgbW9kdWxlIH0sCi0JCQkJCQkJCW5ldyBJTW9kdWxlWzBdLCBtb25pdG9yKTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7IC8vIHJlbW92ZXMgbW9kdWxlCi0JCQkJCWlmIChsaXN0LmNvbnRhaW5zKG1vZHVsZSkpIHsKLQkJCQkJCVNlcnZlclV0aWwubW9kaWZ5TW9kdWxlcyh3YywgbmV3IElNb2R1bGVbMF0sCi0JCQkJCQkJCW5ldyBJTW9kdWxlW10geyBtb2R1bGUgfSwgbW9uaXRvcik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8vIGhhbmRsZSBjYXNlIG9mIE51bGwgV0M7IG5vbi1pc3N1ZSBmb3Igbm93Ci0JCQl9Ci0JCX0gCi0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjICkgCi0gICAgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgZXhjICk7Ci0JCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9IGZpbmFsbHkgewotCQkJaWYgKHdjICE9IG51bGwpIHsKLQkJCQkvLyBBbHdheXMgc2F2ZUFsbCBhbmQgcmVsZWFzZSB0aGUgc2VydmVyV29ya2luZ0NvcHkKLQkJCQl0cnkgCi0gICAgICAgIHsKLQkJCQkJd2Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yKTsKLQkJCQl9IAotICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGMgKSAKLSAgICAgICAgewotCQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfU0VSVkVSLCBleGMgKTsKLQkJCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBnZXRTZXJ2ZXJGb3JNb2R1bGUoSU1vZHVsZSBtb2R1bGUsIFN0cmluZyBzZXJ2ZXJUeXBlSWQsIAotCQkJCQkJCQlJU2VydmVyIHNlcnZlciwgYm9vbGVhbiBjcmVhdGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlpZiAoc2VydmVyICE9IG51bGwpCi0JCQlyZXR1cm4gc2VydmVyOwotCQllbHNlCi0JCQlyZXR1cm4gZ2V0U2VydmVyRm9yTW9kdWxlKG1vZHVsZSwgc2VydmVyVHlwZUlkLCBjcmVhdGUsIG1vbml0b3IpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBnZXRTZXJ2ZXJGb3JNb2R1bGUoSU1vZHVsZSBtb2R1bGUsCi0JCQlTdHJpbmcgc2VydmVyVHlwZUlkLCBib29sZWFuIGNyZWF0ZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCXRyeSB7Ci0KLQkJCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUobW9kdWxlLCBtb25pdG9yKTsKLQotCQkJaWYgKHNlcnZlcnMgIT0gbnVsbCAmJiBzZXJ2ZXJzLmxlbmd0aCA+IDApIHsKLQkJCQlpZiAoc2VydmVyVHlwZUlkID09IG51bGwgfHwgc2VydmVyVHlwZUlkLmxlbmd0aCgpID09IDApCi0JCQkJCXJldHVybiBzZXJ2ZXJzWzBdOyAvLyBXU0FEIHY0IGJlaGF2aW9yCi0KLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJaWYgKHNlcnZlcnNbaV0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzSWdub3JlQ2FzZSgKLQkJCQkJCQlzZXJ2ZXJUeXBlSWQpKQotCQkJCQkJcmV0dXJuIHNlcnZlcnNbaV07Ci0JCQkJfQotCQkJfQotCi0JCQlyZXR1cm4gY3JlYXRlU2VydmVyKG1vZHVsZSwgc2VydmVyVHlwZUlkLCBtb25pdG9yKTsKLQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElTZXJ2ZXIgZ2V0U2VydmVyRm9yTW9kdWxlKElNb2R1bGUgbW9kdWxlKSB7Ci0JCXRyeSB7Ci0JCQlJU2VydmVyW10gc2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKG1vZHVsZSwgbnVsbCk7Ci0JCQlyZXR1cm4gKChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGggPiAwKSA/IHNlcnZlcnNbMF0gOiBudWxsKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVudgotCSAqIEBwYXJhbSBtb2R1bGUKLQkgKiBAcGFyYW0gc2VydmVyVHlwZUlkCi0JICogQHBhcmFtIG1vbml0b3IKLQkgKiBAcmV0dXJuCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoSUVudmlyb25tZW50IGVudiwgSU1vZHVsZSBtb2R1bGUsCi0JCQlTdHJpbmcgc2VydmVyVHlwZUlkLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcldDID0gbnVsbDsKLQkJSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotCQl0cnkgewotCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLQkJCXNlcnZlcldDID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIoc2VydmVyVHlwZUlkLCBudWxsLCBtb25pdG9yKTsKLQkJCXRyeSB7Ci0JCQkJaWYgKHNlcnZlcldDICE9IG51bGwpIHsKLQkJCQkJc2VydmVyID0gc2VydmVyV0Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSAKLSAgICAgIHsKLQkJCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGNlKTsKLQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCWlmIChzZXJ2ZXIgIT0gbnVsbCkgewotCi0vLwkJCQlPYmplY3QgeCA9IHNlcnZlci5nZXRBZGFwdGVyKElSdW5uaW5nQWN0aW9uU2VydmVyLmNsYXNzKTsKLS8vCQkJCWlmICh4ICE9IG51bGwgJiYgeCBpbnN0YW5jZW9mIElSdW5uaW5nQWN0aW9uU2VydmVyKSB7Ci0vLwkJCQkJaW50IHN0YXRlID0gc2VydmVyLmdldFNlcnZlclN0YXRlKCk7Ci0vLwkJCQkJaWYgKHN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RPUFBFRAotLy8JCQkJCQkJfHwgc3RhdGUgPT0gSVNlcnZlci5TVEFURV9VTktOT1dOKSB7Ci0vLwkJCQkJCVN0cmluZyBtb2RlID0gSUxhdW5jaE1hbmFnZXIuUlVOX01PREU7Ci0vLwkJCQkJCXNlcnZlci5zeW5jaHJvbm91c1N0YXJ0KG1vZGUsIG1vbml0b3IpOwotLy8JCQkJCX0KLS8vCQkJCX0KLQotCQkJCWlmIChtb2R1bGUgIT0gbnVsbCAmJiBtb2R1bGUuZ2V0UHJvamVjdCgpLmV4aXN0cygpKSB7Ci0JCQkJCUlNb2R1bGVbXSBwYXJlbnRNb2R1bGVzID0gc2VydmVyLmdldFJvb3RNb2R1bGVzKG1vZHVsZSwKLQkJCQkJCQltb25pdG9yKTsKLQkJCQkJaWYgKHBhcmVudE1vZHVsZXMgIT0gbnVsbCAmJiBwYXJlbnRNb2R1bGVzLmxlbmd0aCAhPSAwKSB7Ci0JCQkJCQltb2R1bGUgPSAoSU1vZHVsZSkgcGFyZW50TW9kdWxlc1swXTsKLQkJCQkJfQotCQkJCQlzZXJ2ZXJXQy5tb2RpZnlNb2R1bGVzKG5ldyBJTW9kdWxlW10geyBtb2R1bGUgfSwKLQkJCQkJCQluZXcgSU1vZHVsZVswXSwgbW9uaXRvcik7Ci0JCQkJfQotCi0JCQl9Ci0KLQkJCXJldHVybiBzZXJ2ZXI7Ci0JCX0gCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSAKLSAgICB7Ci0JCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGUpOwotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0gZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlmIChzZXJ2ZXJXQyAhPSBudWxsKSB7Ci0JCQkJCXNlcnZlcldDLnNhdmVBbGwodHJ1ZSwgbW9uaXRvcik7Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgY2UpOwotCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIGNyZWF0ZVNlcnZlciBUaGlzIGNyZWF0ZXMgYSBzZXJ2ZXIgYnV0IGRvZXMgbm90IHJlcG9ydCBlcnJvcnMuIEBwYXJhbQotCSAqIG1vZHVsZSAKLQkgKiBAcGFyYW0gc2VydmVyVHlwZUlkIAotCSAqIEBwYXJhbSBtb25pdG9yIHByb2dyZXNzIG1vbml0b3IgCi0JICogQHJldHVybiBJU2VydmVyIHJldHVybnMgbnVsbCBpZiB1bnN1Y2Nlc3NmdWwKLQkgKiAKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoSU1vZHVsZSBtb2R1bGUsIFN0cmluZyBzZXJ2ZXJUeXBlSWQsCi0JCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcldDID0gbnVsbDsKLQkJSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotCQl0cnkgewotCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLQkJCXNlcnZlcldDID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIoc2VydmVyVHlwZUlkLCBudWxsLCBtb25pdG9yKTsKLQotCQkJdHJ5IHsKLQkJCQlpZiAoc2VydmVyV0MgIT0gbnVsbCkgewotCQkJCQlzZXJ2ZXIgPSBzZXJ2ZXJXQy5zYXZlQWxsKHRydWUsIG1vbml0b3IpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJaWYgKHNlcnZlciAhPSBudWxsKSB7Ci0KLS8vCQkJCU9iamVjdCB4ID0gc2VydmVyLmdldEFkYXB0ZXIoSVJ1bm5pbmdBY3Rpb25TZXJ2ZXIuY2xhc3MpOwotLy8JCQkJaWYgKHggIT0gbnVsbCAmJiB4IGluc3RhbmNlb2YgSVJ1bm5pbmdBY3Rpb25TZXJ2ZXIpIHsKLS8vCQkJCQlpbnQgc3RhdGUgPSBzZXJ2ZXIuZ2V0U2VydmVyU3RhdGUoKTsKLS8vCQkJCQlpZiAoc3RhdGUgPT0gSVNlcnZlci5TVEFURV9TVE9QUEVECi0vLwkJCQkJCQl8fCBzdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1VOS05PV04pIHsKLS8vCQkJCQkJU3RyaW5nIG1vZGUgPSBJTGF1bmNoTWFuYWdlci5SVU5fTU9ERTsKLS8vCQkJCQkJc2VydmVyLnN5bmNocm9ub3VzU3RhcnQobW9kZSwgbW9uaXRvcik7Ci0vLwkJCQkJfQotLy8JCQkJfQotCQkJCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJCQlJTW9kdWxlW10gcGFyZW50TW9kdWxlcyA9IHNlcnZlci5nZXRSb290TW9kdWxlcyhtb2R1bGUsCi0JCQkJCQkJbW9uaXRvcik7Ci0JCQkJCWlmIChwYXJlbnRNb2R1bGVzICE9IG51bGwgJiYgcGFyZW50TW9kdWxlcy5sZW5ndGggIT0gMCkgewotCQkJCQkJbW9kdWxlID0gKElNb2R1bGUpIHBhcmVudE1vZHVsZXNbMF07Ci0JCQkJCX0KLQkJCQkJc2VydmVyV0MubW9kaWZ5TW9kdWxlcyhuZXcgSU1vZHVsZVtdIHsgbW9kdWxlIH0sCi0JCQkJCQkJbmV3IElNb2R1bGVbMF0sIG1vbml0b3IpOwotCQkJCX0KLQotCQkJfQotCi0JCQlyZXR1cm4gc2VydmVyOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0gZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlmIChzZXJ2ZXJXQyAhPSBudWxsKSB7Ci0JCQkJCXNlcnZlcldDLnNhdmVBbGwodHJ1ZSwgbW9uaXRvcik7Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJCXJldHVybiBudWxsOwotCQkJCS8vIGhhbmRsZXIgY29yZSBleGNlcHRpb24KLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyVHlwZUlkc0J5TW9kdWxlKElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCkgewotCQlJUHJvamVjdCBwcm9qZWN0ID0gY29tcG9uZW50LmdldFByb2plY3QoKTsKLQkJU3RyaW5nW10gc2VydmVySWRzID0gbnVsbDsKLQotCQlpZiAocHJvamVjdCAhPSBudWxsKSB7Ci0JCQlJU2VydmVyW10gc2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKGdldE1vZHVsZShwcm9qZWN0KSwgbnVsbCk7Ci0JCQlpZiAoc2VydmVycyAhPSBudWxsKSB7Ci0JCQkJc2VydmVySWRzID0gbmV3IFN0cmluZ1tzZXJ2ZXJzLmxlbmd0aF07Ci0KLQkJCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2VydmVycy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQkJc2VydmVySWRzW2luZGV4XSA9IHNlcnZlcnNbaW5kZXhdLmdldElkKCk7Ci0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc2VydmVySWRzID09IG51bGwpIHsKLQkJCXNlcnZlcklkcyA9IG5ldyBTdHJpbmdbMF07Ci0JCX0KLQotCQlyZXR1cm4gc2VydmVySWRzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqIEBkZXByZWNhdGVkIHNob3VsZCBiZSB1c2luZyBnZXRTZXJ2ZXJUeXBlSWRzQnlNb2R1bGUoIElWaXJ0dWFsQ29tcG9uZW50ICkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZlclR5cGVJZHNCeU1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVZlY3RvciBzZXJ2ZXJJZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCWlmIChwcm9qZWN0ICE9IG51bGwpIHsKLQkJCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoUmVzb3VyY2VVdGlscwotCQkJCQkuZ2V0TW9kdWxlKHByb2plY3QpLCBudWxsKTsKLQkJCWlmIChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGggPiAwKSB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCXNlcnZlcklkcy5hZGQoc2VydmVyc1tpXS5nZXRJZCgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChTdHJpbmdbXSkgc2VydmVySWRzLnRvQXJyYXkobmV3IFN0cmluZ1tzZXJ2ZXJJZHMuc2l6ZSgpXSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJTW9kdWxlIGdldE1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JcmV0dXJuIFNlcnZlclV0aWwuZ2V0TW9kdWxlKHByb2plY3QpOwotfQotCQotLy8gV29ya2Fyb3VuZCBmb3IgMTEzNjIxCi0vL3B1YmxpYyBzdGF0aWMgSU1vZHVsZSBnZXRNb2R1bGUoSVByb2plY3QgcHJvamVjdCkgewotLy8JSU1vZHVsZVtdIG1vZHVsZXMgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZXMocHJvamVjdCk7Ci0vLwlpZiAobW9kdWxlcyE9bnVsbCAmJiBtb2R1bGVzLmxlbmd0aCE9MCkgewotLy8JCXJldHVybiBtb2R1bGVzWzBdOwotLy8JfQotLy8JcmV0dXJuIG51bGw7Ci0vL30KLSAgCi0JLyoqCi0JICogUmV0dXJucyB0aGUgVVJMIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IG9mIHRoZQotCSAqIGNvbXBvbmVudCBiYXNlZCBvbiBhIHNlcnZlciBmYWN0b3J5IElEIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYiBuYXR1cmUKLQkgKiBvciB0aGUgbW9kdWxlIHJvb3QgY2Fubm90IGJlIGRldGVybWluZWQgKGUuZy4gRm9yIHNvbWUgdHlwZXMgb2YgCi0JICogc2VydmVycywgd2Ugd291bGQgbm90IGJlIGFibGUgdG8gZ2V0IG1vZHVsZSByb290IFVSTCBpZiB0aGUgc2VydmVyIGhhcyBub3QgYmVlbiBzdGFydGVkKS4KLQkgKiBOb3RlIHRoYXQgd2UgYXJlIG5vdCByZWx5aW5nIG9uIHdoaWNoIHNlcnZlciB0aGUgbW9kdWxlIGlzIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdG8gZGV0ZXJtaW5lCi0JICogdGhlIGNvcnJlY3QgbW9kdWxlIHNlcnZlciByb290IGJlY2F1c2UgdGhlIHByb2plY3QgbWlnaHQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2VydmVyIGJ1dCB3ZSBuZWVkIHRoZQotCSAqIG1vZHVsZSByb290IGJhc2VkIG9uIGFub3RoZXIgc2VydmVyIGZhY3RvcnkgSUQuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgc2VydmVyIGZhY3RvcnkgSUQKLQkgKiBAcmV0dXJuIFRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IFVSTCBvciBudWxsIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYkNvbXBvbmVudFVSTChJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkKSB7Ci0JCVN0cmluZyB3ZWJQcm9qZWN0VVJMID0gbnVsbDsKLQkJSU1vZHVsZSBtb2R1bGUgPSBnZXRNb2R1bGUocHJvamVjdCk7Ci0JCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyRmFjdG9yeUlkKTsgICAgICAgICAgICAgICAKLQkJCWlmIChzZXJ2ZXJUeXBlIT1udWxsKQotCQkJewotCQkJCXRyeSB7Ci0JCQkJCS8vQ2hvb3NlIGEgUnVudGltZSB3aGljaCBpcyBub3QgYSBzdHViCi0JCQkJCUlSdW50aW1lIG5vblN0dWJSdW50aW1lID0gbnVsbDsKLQkJCQkJSVJ1bnRpbWVbXSBydW50aW1lcyA9IFNlcnZlclV0aWwuZ2V0UnVudGltZXMobnVsbCwgbnVsbCk7Ci0JCQkJCVN0cmluZyBzZXJ2ZXJSdW50aW1lVHlwZUlkID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCUlSdW50aW1lIHJ1bnRpbWUgPSBydW50aW1lc1tpXTsKLQkJCQkJCUlSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkJCQkJCWlmIChydW50aW1lVHlwZSAhPSBudWxsKQotCQkJCQkJewotCQkJCQkJCVN0cmluZyB0aGlzUnVudGltZVR5cGVJZCA9IHJ1bnRpbWVUeXBlLmdldElkKCk7Ci0JCQkJCQkJaWYgKHRoaXNSdW50aW1lVHlwZUlkLmVxdWFscyhzZXJ2ZXJSdW50aW1lVHlwZUlkKSAmJiAhcnVudGltZS5pc1N0dWIoKSkgewotCQkJCQkJCQkvL0ZvdW5kIGFuIGFwcHJvcHJpYXRlIElSdW50aW1lIHRoYXQgaXMgbm90IGEgc3R1YgotCQkJCQkJCQlub25TdHViUnVudGltZSA9IHJ1bnRpbWU7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJCWlmIChub25TdHViUnVudGltZSAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyV0MgPSBzZXJ2ZXJUeXBlLmNyZWF0ZVNlcnZlcihudWxsLCBudWxsLCBub25TdHViUnVudGltZSwgbnVsbCk7Ci0JCQkJCQlJVVJMUHJvdmlkZXIgdXJsUHJvdmlkZXIgPSAoSVVSTFByb3ZpZGVyKSBzZXJ2ZXJXQy5sb2FkQWRhcHRlcihJVVJMUHJvdmlkZXIuY2xhc3MsIG51bGwpOwotCQkJCQkJaWYgKHVybFByb3ZpZGVyIT1udWxsKSB7Ci0JCQkJCQkJVVJMIHVybCA9IHVybFByb3ZpZGVyLmdldE1vZHVsZVJvb3RVUkwobW9kdWxlKTsJCQkJCQkJCi0JCQkJCQkJaWYgKHVybCAhPSBudWxsKSB7Ci0JCQkJCQkJCVN0cmluZyBzID0gdXJsLnRvU3RyaW5nKCk7Ci0JCQkJCQkJCXdlYlByb2plY3RVUkwgPSAocy5lbmRzV2l0aCgiLyIpID8gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGgoKSAtIDEpIDogcyk7Ci0JCQkJCQkJfQkJCQkKLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJfSBjYXRjaChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCQkJTG9nZ2VyLmdldExvZ2dlcigpLmxvZyhjZSk7Ci0JCQkJfQotCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIHdlYlByb2plY3RVUkw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgVVJMIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IG9mIHRoZQotCSAqIGNvbXBvbmVudCBiYXNlZCBvbiBhIHNlcnZlciBmYWN0b3J5IElEIGFuZCBzZXJ2ZXIuICBSZXR1cm5zIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYiBuYXR1cmUKLQkgKiBvciB0aGUgbW9kdWxlIHJvb3QgY2Fubm90IGJlIGRldGVybWluZWQgKGUuZy4gRm9yIHNvbWUgdHlwZXMgb2YgCi0JICogc2VydmVycywgd2Ugd291bGQgbm90IGJlIGFibGUgdG8gZ2V0IG1vZHVsZSByb290IFVSTCBpZiB0aGUgc2VydmVyIGhhcyBub3QgYmVlbiBzdGFydGVkKS4KLQkgKiBOb3RlIHRoYXQgd2UgYXJlIG5vdCByZWx5aW5nIG9uIHdoaWNoIHNlcnZlciB0aGUgbW9kdWxlIGlzIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdG8gZGV0ZXJtaW5lCi0JICogdGhlIGNvcnJlY3QgbW9kdWxlIHNlcnZlciByb290IGJlY2F1c2UgdGhlIHByb2plY3QgbWlnaHQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2VydmVyIGJ1dCB3ZSBuZWVkIHRoZQotCSAqIG1vZHVsZSByb290IGJhc2VkIG9uIGFub3RoZXIgc2VydmVyIC8gc2VydmVyIGZhY3RvcnkgSUQuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgc2VydmVyIGZhY3RvcnkgSUQKLQkgKiBAcGFyYW0gc2VydmVyIFNlcnZlciBpZAotCSAqIEByZXR1cm4gVGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3QgVVJMIG9yIG51bGwgCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V2ViQ29tcG9uZW50VVJMKElQcm9qZWN0IHByb2plY3QsCi0JCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBJU2VydmVyIHNlcnZlcikgewotCi0JCVN0cmluZyB3ZWJQcm9qZWN0VVJMID0gbnVsbDsKLQkJSU1vZHVsZSBtb2R1bGUgPSBnZXRNb2R1bGUocHJvamVjdCk7Ci0JCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJaWYgKHNlcnZlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgSVVSTFByb3ZpZGVyIHVybFByb3ZpZGVyID0gKElVUkxQcm92aWRlcikgc2VydmVyLmxvYWRBZGFwdGVyKElVUkxQcm92aWRlci5jbGFzcywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHVybFByb3ZpZGVyIT1udWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVSTCB1cmwgPSB1cmxQcm92aWRlci5nZXRNb2R1bGVSb290VVJMKG1vZHVsZSk7ICAgICAgICAgICAgICAKLQkJCQkJaWYgKHVybCAhPSBudWxsKSB7Ci0JCQkJCSAgU3RyaW5nIHMgPSB1cmwudG9TdHJpbmcoKTsKLQkJCQkJICB3ZWJQcm9qZWN0VVJMID0gKHMuZW5kc1dpdGgoIi8iKSA/IHMuc3Vic3RyaW5nKDAsIHMubGVuZ3RoKCkgLSAxKSA6IHMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl3ZWJQcm9qZWN0VVJMID0gZ2V0V2ViQ29tcG9uZW50VVJMKHByb2plY3QsIHNlcnZlckZhY3RvcnlJZCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHdlYlByb2plY3RVUkw7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEVuY29kZWRXZWJDb21wb25lbnRVUkwoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkgewotCQlTdHJpbmcgdXJsID0gZ2V0V2ViQ29tcG9uZW50VVJMKHByb2plY3QsIHNlcnZlckZhY3RvcnlJZCk7Ci0JCXJldHVybiBlbmNvZGVVUkwodXJsKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RW5jb2RlZFdlYkNvbXBvbmVudFVSTChJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBJU2VydmVyIHNlcnZlcikgewotCQlTdHJpbmcgdXJsID0gZ2V0V2ViQ29tcG9uZW50VVJMKHByb2plY3QsIHNlcnZlckZhY3RvcnlJZCwgc2VydmVyKTsKLQkJcmV0dXJuIGVuY29kZVVSTCh1cmwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGVuY29kZVVSTChTdHJpbmcgdXJsKSB7Ci0JCWlmICh1cmwgIT0gbnVsbCkgewotCQkJaW50IGluZGV4ID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmdCdWZmZXIgZW5jb2RlZFVSTCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQllbmNvZGVkVVJMLmFwcGVuZCh1cmwuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSkpOwotCQkJCXRyeSB7Ci0JCQkJCVN0cmluZyBjdHh0Um9vdCA9IFVSTEVuY29kZXIuZW5jb2RlKHVybC5zdWJzdHJpbmcoaW5kZXggKyAxLCB1cmwubGVuZ3RoKCkpLCAiVVRGLTgiKTsKLQkJCQkJaW50IHBsdXNJbmRleCA9IGN0eHRSb290LmluZGV4T2YoJysnKTsKLQkJCQkJd2hpbGUgKHBsdXNJbmRleCAhPSAtMSkgewotCQkJCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCQkJc2IuYXBwZW5kKGN0eHRSb290LnN1YnN0cmluZygwLCBwbHVzSW5kZXgpKTsKLQkJCQkJCXNiLmFwcGVuZCgiJTIwIik7Ci0JCQkJCQlzYi5hcHBlbmQoY3R4dFJvb3Quc3Vic3RyaW5nKHBsdXNJbmRleCArIDEsIGN0eHRSb290Ci0JCQkJCQkJLmxlbmd0aCgpKSk7Ci0JCQkJCQljdHh0Um9vdCA9IHNiLnRvU3RyaW5nKCk7Ci0JCQkJCQlwbHVzSW5kZXggPSBjdHh0Um9vdC5pbmRleE9mKCcrJyk7Ci0JCQkJCX0KLQkJCQkJZW5jb2RlZFVSTC5hcHBlbmQoY3R4dFJvb3QpOwotCQkJCX1jYXRjaCAoSU9FeGNlcHRpb24gaW8pewotCQkJCQkvL2hhbmRsZXIgZXhjZXB0aW9uCi0JCQkJfQkJCQkKLQkJCQl1cmwgPSBlbmNvZGVkVVJMLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHVybDsKLQl9CQotCi0JcHVibGljIHN0YXRpYyBJU2VydmVyIGdldERlZmF1bHRFeGlzdGluZ1NlcnZlcihJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQpIHsKLQkJSVByb2plY3QgcHJvamVjdCA9IGNvbXBvbmVudC5nZXRQcm9qZWN0KCk7Ci0JCUlNb2R1bGUgbW9kdWxlID0gZ2V0TW9kdWxlKHByb2plY3QpOwotCQlJU2VydmVyIHByZWZlcnJlZFNlcnZlciA9IFNlcnZlckNvcmUuZ2V0RGVmYXVsdFNlcnZlcihtb2R1bGUpOwotCQlpZiAocHJlZmVycmVkU2VydmVyICE9IG51bGwpCi0JCQlyZXR1cm4gcHJlZmVycmVkU2VydmVyOwotCQkKLQkJSVNlcnZlcltdIGNvbmZpZ3VyZWRTZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUobW9kdWxlLAotCQkJCW51bGwpOwotCi0JCWlmIChjb25maWd1cmVkU2VydmVycyAhPSBudWxsICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzLmxlbmd0aCA+IDApIHsKLQkJCXByZWZlcnJlZFNlcnZlciA9IGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdOwotCQl9IGVsc2UgewotCQkJSVNlcnZlcltdIG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzID0gU2VydmVyVXRpbAotCQkJCQkuZ2V0QXZhaWxhYmxlU2VydmVyc0Zvck1vZHVsZShtb2R1bGUsIGZhbHNlLCBudWxsKTsKLQotCQkJaWYgKG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzICE9IG51bGwKLQkJCQkJJiYgbm9uQ29uZmlndXJlZFNlcnZlcnMubGVuZ3RoID4gMCkgewotCQkJCXByZWZlcnJlZFNlcnZlciA9IG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzWzBdOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHByZWZlcnJlZFNlcnZlcjsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKiBAZGVwcmVjYXRlZCBzaG91bGQgYmUgdXNpbmcgZ2V0RGVmYXVsdEV4aXN0aW5nU2VydmVyKCBJVmlydHVhbENvbXBvbmVudCApCi0JICovCi0JcHVibGljIHN0YXRpYyBJU2VydmVyIGdldERlZmF1bHRFeGlzdGluZ1NlcnZlcihJUHJvamVjdCBwcm9qZWN0KSB7Ci0gICAgCi0gICAgICBJTW9kdWxlIG1vZHVsZSA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlKHByb2plY3QpOwotICAgICAgSVNlcnZlciBwcmVmZXJyZWRTZXJ2ZXIgPSBudWxsOwotICAgICAgcHJlZmVycmVkU2VydmVyID0gU2VydmVyQ29yZS5nZXREZWZhdWx0U2VydmVyKG1vZHVsZSk7Ci0JCQotLy8gV29ya2Fyb3VuZCBmb3IgMTEzNjIxCi0vLwkJSU1vZHVsZVtdIG1vZHVsZXMgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZXMocHJvamVjdCk7Ci0vLyAgICAgIElTZXJ2ZXIgcHJlZmVycmVkU2VydmVyID0gbnVsbDsKLS8vICAgICAgaWYgKG1vZHVsZXMubGVuZ3RoID4gMCl7Ci0vLyAgICAgICAgcHJlZmVycmVkU2VydmVyID0gU2VydmVyQ29yZS5nZXREZWZhdWx0U2VydmVyKG1vZHVsZXNbMF0pOwotLy8gICAgICB9Ci0gIAotCQlpZiAocHJlZmVycmVkU2VydmVyICE9IG51bGwpCi0JCQlyZXR1cm4gcHJlZmVycmVkU2VydmVyOwotCi0JCUlTZXJ2ZXJbXSBjb25maWd1cmVkU2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKAotCQkJCVJlc291cmNlVXRpbHMuZ2V0TW9kdWxlKHByb2plY3QpLCBudWxsKTsKLQkJaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJzICE9IG51bGwgJiYgY29uZmlndXJlZFNlcnZlcnMubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdOwotCQl9Ci0KLQkJSVNlcnZlcltdIG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzID0gU2VydmVyVXRpbAotCQkJCS5nZXRBdmFpbGFibGVTZXJ2ZXJzRm9yTW9kdWxlKFJlc291cmNlVXRpbHMuZ2V0TW9kdWxlKHByb2plY3QpLAotCQkJCQkJZmFsc2UsIG51bGwpOwotCQlpZiAobm9uQ29uZmlndXJlZFNlcnZlcnMgIT0gbnVsbCAmJiBub25Db25maWd1cmVkU2VydmVycy5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gbm9uQ29uZmlndXJlZFNlcnZlcnNbMF07Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoKLQkgKiBAcGFyYW0gbW9kdWxlVHlwZSAtIGFkIGRlZmluZWQgaW4gSVNlcnZlclRhcmdldENvbnN0YW50cyAoaS5lLiBFQVJfVFlQRSwKLQkgKiBXRUJfVFlQRSwgZXRjLikgQHBhcmFtIGoyZWVWZXJzaW9uIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50Ci0JICogdmFsdWVzIGluIEoyRUVWZXJzaW9uQ29uc3RhbnRzIGkuZS4gIjEyIiBvciAiMTMiIG9yICIxNCIgQHJldHVybiBTdHJpbmcKLQkgKiB0aGUgaWQgb2YgdGhlIHNlcnZlciB0YXJnZXQgLSB0byBiZSB1c2VkIGluIHByb2plY3QgY3JlYXRpb24gb3BlcmF0aW9ucy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXJ2ZXJUYXJnZXRJZEZyb21GYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwKLQkJCVN0cmluZyBtb2R1bGVUeXBlLCBTdHJpbmcgajJlZVZlcnNpb24pIHsKLQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyRmFjdG9yeUlkKTsKLQkJaWYgKHNlcnZlclR5cGUgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCVN0cmluZyBzZXJ2ZXJSdW50aW1lVHlwZUlkID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0KLQkJU3RyaW5nIHN0SjJFRVZlcnNpb24gPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJUYXJnZXRKMkVFVmVyc2lvbihqMmVlVmVyc2lvbik7Ci0gICAgICAgIExpc3QgcnVudGltZXMgPSBBcnJheXMuYXNMaXN0KFNlcnZlclV0aWwuZ2V0UnVudGltZXMobW9kdWxlVHlwZSwgc3RKMkVFVmVyc2lvbikpOyAgICAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBydW50aW1lcy5zaXplKCk7IGkrKykgewotCQkJSVJ1bnRpbWUgcnVudGltZSA9IChJUnVudGltZSkgcnVudGltZXMuZ2V0KGkpOwotCQkJSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlID0gcnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotCQkJaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIHRoaXNSdW50aW1lVHlwZUlkID0gcnVudGltZVR5cGUuZ2V0SWQoKTsKLQkJCQlpZiAodGhpc1J1bnRpbWVUeXBlSWQuZXF1YWxzKHNlcnZlclJ1bnRpbWVUeXBlSWQpICYmICFydW50aW1lLmlzU3R1YigpKSB7Ci0JCQkJCXJldHVybiBydW50aW1lLmdldElkKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoKLQkgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIHRoZSBzZXJ2ZXIncyBmYWN0b3J5IGlkIEByZXR1cm5zIHRoZSBydW50aW1lIHR5cGUKLQkgKiBpZCBnaXZlbiB0aGUgc2VydmVyJ3MgZmFjdG9yeSBpZC4gUmV0dXJucyBhIGJsYW5rIFN0cmluZyBpZiB0aGUgbm8KLQkgKiBTZXJ2ZXJUeXBlIGV4aXN0cyBmb3IgdGhlIGdpdmVuIGZhY3RvcnkgaWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UnVudGltZVRhcmdldElkRnJvbUZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKSB7Ci0JCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7Ci0JCWlmIChzZXJ2ZXJUeXBlICE9IG51bGwpIHsKLQkJCVN0cmluZyBzZXJ2ZXJSdW50aW1lSWQgPSBzZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKTsKLQkJCXJldHVybiBzZXJ2ZXJSdW50aW1lSWQ7Ci0JCX0gZWxzZQotCQkJcmV0dXJuICIiOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGYWN0b3J5SWRGcm9tUnVudGltZVRhcmdldElkKFN0cmluZyBydW50aW1lVGFyZ2V0SWQpewotCQlJU2VydmVyVHlwZVtdIHNlcnZlclR5cGVzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCQlmb3IgKGludCBpPTA7aTxzZXJ2ZXJUeXBlcy5sZW5ndGg7aSsrKSB7Ci0JCQlJUnVudGltZVR5cGUgcnVudGltZVR5cCA9IHNlcnZlclR5cGVzW2ldLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCQlpZiAocnVudGltZVR5cCE9bnVsbCl7Ci0JCQkJaWYgKHJ1bnRpbWVUeXAuZ2V0SWQoKS5lcXVhbHMocnVudGltZVRhcmdldElkKSkKLQkJCQkJcmV0dXJuIHNlcnZlclR5cGVzW2ldLmdldElkKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuICIiOwotCQkKLQl9Ci0JCi0KLQkvKgotCSAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgdGhlIHNlcnZlcidzIGZhY3RvcnkgaWQgQHJldHVybnMgdGhlIHNlcnZlciB0eXBlCi0JICogaWQgZ2l2ZW4gdGhlIHNlcnZlcidzIGZhY3RvcnkgaWQuIFJldHVybnMgYSBibGFuayBTdHJpbmcgaWYgdGhlIG5vCi0JICogU2VydmVyVHlwZSBleGlzdHMgZm9yIHRoZSBnaXZlbiBmYWN0b3J5IGlkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZlclR5cGVJZEZyb21GYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkgewotCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOwotCQlpZiAoc2VydmVyVHlwZSAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgc2VydmVyVHlwZUlkID0gc2VydmVyVHlwZS5nZXRJZCgpOwotCQkJcmV0dXJuIHNlcnZlclR5cGVJZDsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gIiI7Ci0JfQotCi0JLyoKLQkgKiBAcGFyYW0gajJlZVZlcnNpb24gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnQgdmFsdWVzIGluCi0JICogSjJFRVZlcnNpb25Db25zdGFudHMgaS5lLiAiMTIiIG9yICIxMyIgb3IgIjE0IgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RhcmdldFZhbGlkRm9yRUFSKFN0cmluZyBydW50aW1lVGFyZ2V0SWQsCi0JCQlTdHJpbmcgajJlZVZlcnNpb24pIHsKLQkJaWYgKHJ1bnRpbWVUYXJnZXRJZCA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyBlYXJNb2R1bGVUeXBlID0gSU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX01PRFVMRTsKLQkJU3RyaW5nIHN0SjJFRVZlcnNpb24gPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJUYXJnZXRKMkVFVmVyc2lvbihqMmVlVmVyc2lvbik7Ci0gICAgICAgIExpc3QgcnVudGltZXMgPSBBcnJheXMuYXNMaXN0KFNlcnZlclV0aWwuZ2V0UnVudGltZXMoZWFyTW9kdWxlVHlwZSwgc3RKMkVFVmVyc2lvbikpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLnNpemUoKTsgaSsrKSB7Ci0JCQlJUnVudGltZSBydW50aW1lID0gKElSdW50aW1lKSBydW50aW1lcy5nZXQoaSk7Ci0JCQlJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBydW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCQlpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLQkJCXsKLQkJCQlTdHJpbmcgdGhpc0lkID0gcnVudGltZVR5cGUuZ2V0SWQoKTsKLQkJCQlpZiAodGhpc0lkLmVxdWFscyhydW50aW1lVGFyZ2V0SWQpKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKgotCSAqIEBwYXJhbSBqMmVlVmVyc2lvbiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludCB2YWx1ZXMgaW4KLQkgKiBKMkVFVmVyc2lvbkNvbnN0YW50cyBpLmUuICIxMiIgb3IgIjEzIiBvciAiMTQiIEBwYXJhbSB0aGUgcHJvamVjdCB0eXBlCi0JICogZnJvbSBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVGFyZ2V0VmFsaWRGb3JQcm9qZWN0VHlwZShTdHJpbmcgcnVudGltZVRhcmdldElkLAotCQkJU3RyaW5nIGoyZWVWZXJzaW9uLCBTdHJpbmcgcHJvamVjdFR5cGUpIHsKLQkJaWYgKHJ1bnRpbWVUYXJnZXRJZCA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCWlmIChwcm9qZWN0VHlwZSA9PSBudWxsIHx8IHByb2plY3RUeXBlLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHN0SjJFRVZlcnNpb24gPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJUYXJnZXRKMkVFVmVyc2lvbihqMmVlVmVyc2lvbik7Ci0gICAgICAgIExpc3QgcnVudGltZXMgPSBBcnJheXMuYXNMaXN0KFNlcnZlclV0aWwuZ2V0UnVudGltZXMocHJvamVjdFR5cGUsIHN0SjJFRVZlcnNpb24pKTsgICAgCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMuc2l6ZSgpOyBpKyspIHsKLQkJCUlSdW50aW1lIHJ1bnRpbWUgPSAoSVJ1bnRpbWUpIHJ1bnRpbWVzLmdldChpKTsKLQkJCUlSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkJCWlmIChydW50aW1lVHlwZSAhPSBudWxsKQotCQkJewotCQkJCVN0cmluZyB0aGlzSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCQkJCWlmICh0aGlzSWQuZXF1YWxzKHJ1bnRpbWVUYXJnZXRJZCkpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZlclRhcmdldEoyRUVWZXJzaW9uKFN0cmluZyBqMmVlVmVyc2lvbikgewotCi0JCWlmIChqMmVlVmVyc2lvbiA9PSBudWxsIHx8IGoyZWVWZXJzaW9uLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpbnQgajJlZVZlcnNpb25JbnQgPSBJbnRlZ2VyLnBhcnNlSW50KGoyZWVWZXJzaW9uKTsKLQkJc3dpdGNoIChqMmVlVmVyc2lvbkludCkgewotCQljYXNlIChKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRCk6Ci0JCQlyZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5KMkVFXzEyOwotCQljYXNlIChKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCk6Ci0JCQlyZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5KMkVFXzEzOwotCQljYXNlIChKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCk6Ci0JCQlyZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5KMkVFXzE0OwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0JCi0JLy9Db252ZXJ0cyBhIG1vZHVsZSB0eXBlIGZyb20gSjJFRVV0aWxzIHRvIGEgbW9kdWxlIHR5cGUgbGlrZQotCS8vdGhlIG9uZSBpbiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzLgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZlclRhcmdldE1vZHVsZVR5cGUoaW50IG1vZHVsZVR5cGUpCi0JewotCQlzd2l0Y2ggKG1vZHVsZVR5cGUpCi0gICAgewotICAgIGNhc2UgSjJFRVV0aWxzLldFQiA6Ci0gICAgICByZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5XRUJfVFlQRTsKLSAgICBjYXNlIEoyRUVVdGlscy5FSkIgOgotICAgICAgcmV0dXJuIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMuRUpCX1RZUEU7Ci0gICAgY2FzZSBKMkVFVXRpbHMuQVBQQ0xJRU5UIDoKLSAgICAgIHJldHVybiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzLkFQUF9DTElFTlRfVFlQRTsKLSAgICBjYXNlIEoyRUVVdGlscy5FQVIgOgotICAgICAgcmV0dXJuIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMuRUFSX1RZUEU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBudWxsOwotICAgICAgCi0gICAgfSAgICAgIAkJCQotCX0KLSAgICAKLSAgLyoKLSAgICogUmV0dXJucyBhIG5vbi1zdHViIHJ1bnRpbWUgaWYgb25lIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZS4KLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCAtIHNlcnZlciB0eXBlIGlkCi0gICAqIEByZXR1cm5zIElSdW50aW1lIFJldHVybnMgYSBub24tc3R1YiBydW50aW1lIGlmIG9uZSBpcyBhdmFpbGFibGUgZm9yIHRoZSB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUuCi0gICAqIFJldHVybnMgbnVsbCBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElSdW50aW1lIGdldE5vblN0dWJSdW50aW1lKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpCi0gIHsKLSAgICAvL0ZpbmQgYSBSdW50aW1lIHdoaWNoIGlzIG5vdCBhIHN0dWIKLSAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOwotICAgIElSdW50aW1lIG5vblN0dWJSdW50aW1lID0gbnVsbDsKLSAgICBpZiAoc2VydmVyVHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vYm9vbGVhbiBmb3VuZE5vblN0dWJSdW50aW1lID0gZmFsc2U7Ci0gICAgICBJUnVudGltZVtdIHJ1bnRpbWVzID0gU2VydmVyVXRpbC5nZXRSdW50aW1lcyhudWxsLCBudWxsKTsKLSAgICAgIFN0cmluZyBzZXJ2ZXJSdW50aW1lVHlwZUlkID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBJUnVudGltZSBydW50aW1lID0gcnVudGltZXNbaV07Ci0gICAgICAgIElSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLSAgICAJaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwpCi0gICAgCXsKLSAgICAJCVN0cmluZyB0aGlzUnVudGltZVR5cGVJZCA9IHJ1bnRpbWVUeXBlLmdldElkKCk7Ci0JICAgICAgICBpZiAodGhpc1J1bnRpbWVUeXBlSWQuZXF1YWxzKHNlcnZlclJ1bnRpbWVUeXBlSWQpICYmICFydW50aW1lLmlzU3R1YigpKQotCSAgICAgICAgewotCSAgICAgICAgICAvLyBGb3VuZCBhbiBhcHByb3ByaWF0ZSBJUnVudGltZSB0aGF0IGlzIG5vdCBhIHN0dWIKLQkgICAgICAgICAgLy9mb3VuZE5vblN0dWJSdW50aW1lID0gdHJ1ZTsKLQkgICAgICAgICAgbm9uU3R1YlJ1bnRpbWUgPSBydW50aW1lOwotCSAgICAgICAgICBicmVhazsKLQkgICAgICAgIH0KLSAgICAJfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbm9uU3R1YlJ1bnRpbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0YXR1c09iamVjdEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0YXR1c09iamVjdEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0OTliMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdGF0dXNPYmplY3RIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTXVsdGlTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuV3JhcHBlZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFN0YXR1c09iamVjdEhhbmRsZXIKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfREVUQUlMUyA9IDE2OwotCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBnZW5lcmF0ZVRyZWVTdGF0dXMgKElTdGF0dXMgc3RhdHVzKSAKLSAgCXsKLSAgICAvLwotICAgIC8vIFRoZXJlIGNvdWxkIGJlIGxvdHMgb2YgVGhyb3dhYmxlcywgQ29yZUV4Y2VwdGlvbnMsCi0gICAgLy8gV3JhcHBlZEV4Y2VwdGlvbnMgYW5kIElTdGF0dXMgb2JqZWN0cyBiZW5lYXRoIHRoZQotICAgIC8vIGdpdmVuIHN0YXR1cy4gRmluZCB0aGVtLgotICAgIC8vCi0gICAgTGlua2VkTGlzdCBzdGF0dXNMaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLSAgICBhcHBlbmRTdGF0dXMoTUFYX0RFVEFJTFMsIHN0YXR1c0xpc3QsIHN0YXR1cywgc3RhdHVzLmdldFNldmVyaXR5KCkpOwotICAgIGlmIChzdGF0dXNMaXN0LnNpemUoKSA+IDApCi0gICAgewotICAgICAgSVN0YXR1cyBuZXdTdGF0dXMgPSAoSVN0YXR1cylzdGF0dXNMaXN0LnJlbW92ZUZpcnN0KCk7Ci0gICAgICBpZiAoc3RhdHVzTGlzdC5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBJU3RhdHVzW10gc2Vjb25kYXJ5U3RhdHVzQXJyYXkgPSBuZXcgSVN0YXR1c1tzdGF0dXNMaXN0LnNpemUoKV07Ci0gICAgICAgIGludCBuID0gMDsKLSAgICAgICAgSXRlcmF0b3IgaSA9IHN0YXR1c0xpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgc2Vjb25kYXJ5U3RhdHVzQXJyYXlbbisrXSA9IChJU3RhdHVzKWkubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIG5ld1N0YXR1cyA9IG5ldyBNdWx0aVN0YXR1cyhzdGF0dXMuZ2V0UGx1Z2luKCksc3RhdHVzLmdldENvZGUoKSxzZWNvbmRhcnlTdGF0dXNBcnJheSxzdGF0dXMuZ2V0TWVzc2FnZSgpLHN0YXR1cy5nZXRFeGNlcHRpb24oKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV3U3RhdHVzOwotICAgIH0KLSAgICBlbHNlIAotICAgIAlyZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8vCi0gIC8vIEFwcGVuZHMgemVybyBvciBtb3JlIElTdGF0dXMgb2JqZWN0cyB0byB0aGUgbGlzdCBvZiBJU3RhdHVzIG9iamVjdHMKLSAgLy8gYmFzZWQgdXBvbiBhbiBJU3RhdHVzLgotICAvLwotICBwcml2YXRlIHN0YXRpYyBpbnQgYXBwZW5kU3RhdHVzICggaW50IG1heCwgTGlzdCBzdGF0dXNMaXN0LCBJU3RhdHVzIHN0YXR1cywgaW50IHNldmVyaXR5ICkKLSAgewotICAgIGlmIChtYXggPiAwICYmIHN0YXR1cyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vCi0gICAgICAvLyBBcHBlbmQgYW4gSVN0YXR1cyBvYmplY3QgZm9yIHRoZSBnaXZlbiBzdGF0dXMnIG1lc3NhZ2UuCi0gICAgICAvLwotICAgICAgaWYgKHN0YXR1cy5nZXRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWF4ID0gYXBwZW5kKHN0YXR1c0xpc3QsbWF4LHNldmVyaXR5LHN0YXR1cy5nZXRQbHVnaW4oKSxzdGF0dXMuZ2V0Q29kZSgpLHN0YXR1cy5nZXRNZXNzYWdlKCksc3RhdHVzLmdldEV4Y2VwdGlvbigpKTsKLSAgICAgIH0KLSAgICAgIC8vCi0gICAgICAvLyBBcHBlbmQgdGhlIElTdGF0dXMnIFRocm93YWJsZSwgaWYgYW55LgotICAgICAgLy8KLSAgICAgIG1heCA9IGFwcGVuZFRocm93YWJsZShtYXgsc3RhdHVzTGlzdCxzdGF0dXMuZ2V0RXhjZXB0aW9uKCksc2V2ZXJpdHkpOwotICAgICAgLy8KLSAgICAgIC8vIElmIHRoZSBJU3RhdHVzIGlzIGEgbXVsdGkgc3RhdHVzLCBhcHBlbmQgdGhlIGNoaWxkcmVuLgotICAgICAgLy8KLSAgICAgIElTdGF0dXNbXSBjaGlsZHJlbiA9IHN0YXR1cy5nZXRDaGlsZHJlbigpOwotICAgICAgZm9yIChpbnQgaT0wOyBpPGNoaWxkcmVuLmxlbmd0aCAmJiBtYXg+MDsgaSsrKQotICAgICAgewotICAgICAgICBtYXggPSBhcHBlbmRTdGF0dXMobWF4LHN0YXR1c0xpc3QsY2hpbGRyZW5baV0sc2V2ZXJpdHkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWF4OwotICB9Ci0KLSAgLy8KLSAgLy8gQXBwZW5kcyB6ZXJvIG9yIG1vcmUgSVN0YXR1cyBvYmplY3RzIHRvIHRoZSBsaXN0IG9mIElTdGF0dXMgb2JqZWN0cwotICAvLyBiYXNlZCB1cG9uIGEgVGhyb3dhYmxlLiBXcmFwcGVkRXhjZXB0aW9ucyBhbmQgQ29yZUV4Y2VwdGlvbnMgYXJlCi0gIC8vIGdpdmVuIHNwZWNpYWwgdHJlYXRtZW50LgotICAvLwotICBwcml2YXRlIHN0YXRpYyBpbnQgYXBwZW5kVGhyb3dhYmxlICggaW50IG1heCwgTGlzdCBzdGF0dXNMaXN0LCBUaHJvd2FibGUgdGhyb3dhYmxlLCBpbnQgc2V2ZXJpdHkgKQotICB7Ci0gICAgaWYgKG1heCA+IDAgJiYgdGhyb3dhYmxlICE9IG51bGwpCi0gICAgewotICAgICAgLy8KLSAgICAgIC8vIEFwcGVuZCBhbiBJU3RhdHVzIG9iamVjdCBmb3IgdGhlIGV4Y2VwdGlvbidzIG1lc3NhZ2UuCi0gICAgICAvLwotICAgICAgaWYgKHRocm93YWJsZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWF4ID0gYXBwZW5kKHN0YXR1c0xpc3QsbWF4LHNldmVyaXR5LFdlYlNlcnZpY2VQbHVnaW4uSUQsMCx0aHJvd2FibGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpLHRocm93YWJsZSk7Ci0gICAgICB9Ci0gICAgICAvLwotICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBpcyBhIFdyYXBwZWRFeGNlcHRpb24sIGFwcGVuZCB0aGUgd3JhcHBlZCBFeGNlcHRpb24uCi0gICAgICAvLwotICAgICAgaWYgKHRocm93YWJsZSBpbnN0YW5jZW9mIFdyYXBwZWRFeGNlcHRpb24pCi0gICAgICB7Ci0gICAgICAgIFdyYXBwZWRFeGNlcHRpb24gd2V4YyA9IChXcmFwcGVkRXhjZXB0aW9uKXRocm93YWJsZTsKLSAgICAgICAgbWF4ID0gYXBwZW5kVGhyb3dhYmxlKG1heCxzdGF0dXNMaXN0LHdleGMuZXhjZXB0aW9uKCksc2V2ZXJpdHkpOwotICAgICAgfQotICAgICAgLy8KLSAgICAgIC8vIElmIHRoZSBleGNlcHRpb24gaXMgYSBDb3JlRXhjZXB0aW9uLCBhcHBlbmQgdGhlIGVuY2xvc2VkIElTdGF0dXMuCi0gICAgICAvLwotICAgICAgaWYgKHRocm93YWJsZSBpbnN0YW5jZW9mIENvcmVFeGNlcHRpb24pCi0gICAgICB7Ci0gICAgICAgIENvcmVFeGNlcHRpb24gY2V4YyA9IChDb3JlRXhjZXB0aW9uKXRocm93YWJsZTsKLSAgICAgICAgbWF4ID0gYXBwZW5kU3RhdHVzKG1heCxzdGF0dXNMaXN0LGNleGMuZ2V0U3RhdHVzKCksc2V2ZXJpdHkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWF4OwotICB9Ci0KLSAgLy8KLSAgLy8gQ3JlYXRlcyBhbmQgYXBwZW5kcyBhbiBJU3RhdHVzIHRvIHRoZSBsaXN0IG9mIElTdGF0dXMgb2JqZWN0cy4KLSAgLy8KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGFwcGVuZCAoIExpc3Qgc3RhdHVzTGlzdCwgaW50IG1heCwgaW50IHNldmVyaXR5LCBTdHJpbmcgaWQsIGludCBjb2RlLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIHRocm93YWJsZSApCi0gIHsKLSAgICBpZiAobWF4ID4gMCkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksaWQsY29kZSxtZXNzYWdlLHRocm93YWJsZSk7Ci0gICAgICBzdGF0dXNMaXN0LmFkZChzdGF0dXMpOwotICAgICAgbWF4LS07Ci0gICAgfQotICAgIHJldHVybiBtYXg7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJQYXRoVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJQYXRoVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3ZTFkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyUGF0aFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi0vKioKLSAqIAotICogVHJhbnNmb3JtcyBhIGlucHV0IFN0cmluZyB0byBhIFBhdGgKLSAqIAotICogQGF1dGhvciBqb2FuCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBTdHJpbmcyUGF0aFRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIgewotCQotCXB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkgewkJCQkgCi0JCVBhdGggcGF0aCA9IG5ldyBQYXRoKHZhbHVlLnRvU3RyaW5nKCkpOwotCQlyZXR1cm4gcGF0aDsJCSAKLQl9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwNjdkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMjgwOTQgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNzAzMDUgICAxNzUxOTQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEFudCB0YXNrIEluaXRpYWxTZWxlY3Rpb24gb25seSBhbGxvd3Mgd3NkbCB3aXRoaW4gdGhlIHdvcmtzcGFjZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQkphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5jb21wb25lbnRjb3JlLnV0aWwuRUpCQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotCi0vKioKLSAqIFRyYW5zZm9ybXMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIGEgd29ya3NwYWNlIHJlc291cmNlIHBhdGggaW50byBhIFN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0Ci0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIgewotCi0JcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKSB7Ci0JCQotCQlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0JCUlSZXNvdXJjZSByZXNvdXJjZSA9IEZpbGVSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKG5ldyBQYXRoKHZhbHVlLnRvU3RyaW5nKCkpKTsKLQkJaWYgKHJlc291cmNlICE9IG51bGwpCi0JCXsKLQkJCUlQcm9qZWN0IHJlc1Byb2plY3QgPSByZXNvdXJjZS5nZXRQcm9qZWN0KCk7CQkJCi0JCQkvLyBjaGVjayBpZiByZXNvdXJjZSBpcyBwYXJ0IG9mIGFuIEVKQgotCQkJaWYgKEoyRUVVdGlscy5pc0VKQkNvbXBvbmVudChyZXNQcm9qZWN0KSkKLQkJCXsKLQkJCQkvLyBpZiByZXNvdXJjZSBpcyBwYXJ0IG9mIEVKQiBuZWVkIHRvIGdldCB0aGUgRW50ZXJwcmlzZUJlYW4gYXMgdGhlIHNlbGVjdGlvbgotCQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gZWpiQ29tcG9uZW50cyA9IEoyRUVVdGlscy5nZXRFSkJDb21wb25lbnRzKHJlc1Byb2plY3QpOwotCQkJCUVKQkFydGlmYWN0RWRpdCAgZWpiRWRpdCA9IG51bGw7CQkJCi0JCQkJdHJ5ewkJCQkKLQkJCQkJZWpiRWRpdCA9IEVKQkFydGlmYWN0RWRpdC5nZXRFSkJBcnRpZmFjdEVkaXRGb3JSZWFkKGVqYkNvbXBvbmVudHNbMF0pOwkJCQkKLQkJICAgICAgICAgICAgRUpCUmVzb3VyY2UgZWpiUmVzID0gZWpiRWRpdC5nZXRFSkJKYXJYbWlSZXNvdXJjZSgpOwotCQkgICAgICAgICAgICBFSkJKYXIgZWpiSmFyID0gZWpiUmVzLmdldEVKQkphcigpOwkgICAgICAgICAgICAKLQkJICAgICAgICAgICAgSVBhdGggcGF0aCA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCk7Ci0JCSAgICAgICAgICAgIFN0cmluZyByZXNvdXJjZVBhdGggPSBSZXNvdXJjZVV0aWxzLmdldEphdmFSZXNvdXJjZVBhY2thZ2VOYW1lKHBhdGgpOwotCQkgICAgICAgICAgICBTdHJpbmcgamF2YUNsYXNzTmFtZSA9IHJlc291cmNlLmdldE5hbWUoKTsKLQkJICAgICAgICAgICAgLy8gc3RyaXAgb2ZmIGZpbGUgZXh0ZW5zaW9uIGlmIG5lY2Vzc2FyeQotCQkgICAgICAgICAgICBpZiAoamF2YUNsYXNzTmFtZS5sYXN0SW5kZXhPZignLicpPi0xKQotCQkgICAgICAgICAgICB7CQotCQkgICAgICAgICAgICAgIGphdmFDbGFzc05hbWUgPSBqYXZhQ2xhc3NOYW1lLnN1YnN0cmluZygwLCBqYXZhQ2xhc3NOYW1lLmxhc3RJbmRleE9mKCcuJykpOwkgICAgICAgICAgICAgIAotCQkgICAgICAgICAgICB9IAotCQkgICAgICAgICAgICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gSmF2YU1PRlV0aWxzLmdldEphdmFDbGFzcyhyZXNvdXJjZVBhdGgsIGphdmFDbGFzc05hbWUsIHJlc1Byb2plY3QpOwotCQkgICAgICAgICAgICBFbnRlcnByaXNlQmVhbiBlamIgPSBlamJKYXIuZ2V0RW50ZXJwcmlzZUJlYW5XaXRoUmVmZXJlbmNlKGphdmFDbGFzcyk7Ci0JCSAgICAgICAgICAgIGlmIChlamIgIT0gbnVsbCkKLQkJICAgICAgICAgICAgewotCQkgICAgICAgICAgICAJc2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWpiLmdldE5hbWUoKSk7CQotCQkgICAgICAgICAgICB9Ci0JCQkJfQotCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKQotCQkJCXsKLQkJCQkJCi0JCQkJfQotCQkJCWZpbmFsbHkgewotCQkgICAgICAgICAgICAgIGlmIChlamJFZGl0IT1udWxsKQotCQkgICAgICAgICAgICAgICAgZWpiRWRpdC5kaXNwb3NlKCk7Ci0JCSAgICAgICAgfQotCQkJfQotCQkJLy8gaWYgc2VsZWN0aW9uIG5vdCBhbHJlYWR5IHNldCAtIGNyZWF0ZSBpdCBmcm9tIHRoZSByZXNvdXJjZSBvYmplY3QKLQkJCWlmIChzZWxlY3Rpb24gPT0gbnVsbCkKLQkJCXsKLQkJCSAgc2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ocmVzb3VyY2UpOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nICYmIHZhbHVlLnRvU3RyaW5nKCkuaW5kZXhPZigiOiIpICE9IC0xKSB7Ci0JCQkvLyByZW1vdGUgZmlsZQotCQkJc2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odmFsdWUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLy8gc3RyaW5nIGRvZXNuJ3QgcmV0dXJuIHJlc291cmNlIC0gZXJyb3IgY29uZGl0aW9uCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFdTUGx1Z2luTWVzc2FnZXMuRVJST1JfU0VMRUNUSU9OX1RSQU5TRk9STSk7Ci0JCX0KLQkJcmV0dXJuIHNlbGVjdGlvbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJUZXN0RmFjaWxpdHlMaXN0VHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJUZXN0RmFjaWxpdHlMaXN0VHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg1OTYwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyVGVzdEZhY2lsaXR5TGlzdFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdDsKLQotcHVibGljIGNsYXNzIFN0cmluZzJUZXN0RmFjaWxpdHlMaXN0VHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lciB7Ci0KLQlwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIHsKLQkJU3RyaW5nIHRlc3RGYWNpbGl0eSA9IChTdHJpbmcpdmFsdWU7Ci0JCS8vdmFsdWUgcmVwcmVzZW50cyBuYW1lIG9mIGEgdGVzdCBmYWNpbGl0eQotCQkvL3BpY2sgdXAgbGlzdCBvZiB0ZXN0IGZhY2lsaXRpZXMKLQkJU3RyaW5nW10gdGVzdFR5cGVzID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpLmdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKTsgICAgICAgIAkKLQkJCi0JCWludCBpbmRleCA9IDA7Ci0JCS8vbWF0Y2ggdmFsdWUgdG8gbmFtZSBvZiB0ZXN0IGZhY2lsaXR5IGFuZCBzZXQgaW5kZXggYWNjb3JkaW5nbHkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCWlmICh0ZXN0VHlwZXNbaV0uZXF1YWxzKHRlc3RGYWNpbGl0eSkpCi0JCQl7CQkKLQkJCQlicmVhazsKLQkJCX0JCQkKLQkJCWluZGV4Kys7Ci0JCX0KLQkJCi0JCVNlbGVjdGlvbkxpc3Qgc2VsZWN0aW9uTGlzdCA9IG5ldyBTZWxlY3Rpb25MaXN0KHRlc3RUeXBlcywgaW5kZXgpOwkJCi0JCXJldHVybiBzZWxlY3Rpb25MaXN0OwotCX0KLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU4N2ZlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzAzICAgMTI4ODMyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQmVhbk1vZGlmaWVyOwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIgaW1wbGVtZW50cyBCZWFuTW9kaWZpZXIgewotCi0JcHJpdmF0ZSBTdHJpbmcgU0VSVklDRV9SVF9JRF9LRVkgPSAiU2VydmljZS5SdW50aW1lSWQiOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIFJVTlRJTUVfSUQgPSAiUnVudGltZUlkIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBTRVJWSUNFX1NSVl9JRF9LRVkgPSAiU2VydmljZS5TZXJ2ZXJJZCI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgU0VSVkVSX0lEID0gIlNlcnZlcklkIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBUWVBFX0lEID0gIlR5cGVJZCI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgVERfRUpCID0gIlRPUCBET1dOIEVKQiI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgQlVfRUpCID0gIkJPVFRPTSBVUCBFSkIiOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIFREX0VKQl9UWVBFX0lEID0gIjEvb3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5lamIiOwotCXByaXZhdGUgU3RyaW5nIEJVX0VKQl9UWVBFX0lEID0gIjAvb3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5lamIiOwotCXByaXZhdGUgU3RyaW5nIFNFUlZJQ0VfUFJFRklYID0gIlNlcnZpY2UuIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBDTElFTlRfUFJFRklYID0gIkNsaWVudC4iOyAgLy8kTk9OLU5MUy1OJAotCQotCS8qKgotCSAqIE1vZGlmaWVzIHRoZSBzdXBwbGllZCBUeXBlUnVudGltZVNlcnZlciBiZWFuIHdpdGggcHJvcGVydGllcyBpbiBob2xkZXIuCi0JICogSWYgdGhlIGJlYW4gaXMgbnVsbCwgY29uc3RydWN0IGEgbmV3IG9uZSBhbmQgc2V0IGl0cyBwcm9wZXJ0aWVzLgotCSAqIEBwYXJhbSBiZWFuIFR5cGVSdW50aW1lU2VydmVyIGJlYW4gdG8gYmUgbW9kaWZpZWQKLQkgKiBAcGFyYW0gaG9sZGVyIE1hcCBjb250YWluaW5nIHZhbHVlcyBmb3IgVHlwZVJ1bnRpbWVTZXJ2ZXIgcHJvcGVydGllcyAKLQkgKiBAcmV0dXJuIFR5cGVSdW50aW1lU2VydmVyIHdpdGggcHJvcGVydGllcyBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBtb2RpZnkoT2JqZWN0IGJlYW4sIE9iamVjdCBob2xkZXIpIHsKLQkJCi0JCVR5cGVSdW50aW1lU2VydmVyIHR5cGVzID0gbnVsbDsKLQkJaWYgKGJlYW4gPT0gbnVsbCB8fCAhKGJlYW4gaW5zdGFuY2VvZiBUeXBlUnVudGltZVNlcnZlcikpCi0JCXsKLQkJCXR5cGVzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7CQkJCi0JCX0KLQkJZWxzZQotCQl7Ci0JCQl0eXBlcyA9IChUeXBlUnVudGltZVNlcnZlciliZWFuOwotCQl9Ci0JCQotCQlpZiAoaG9sZGVyIGluc3RhbmNlb2YgTWFwKQotCQl7CQotCQkJTWFwIHR5cGVzTWFwID0gKE1hcClob2xkZXI7Ci0JCQlTdHJpbmcgcHJlZml4ID0gIiI7Ci0JCQkKLQkJCQotCQkJaWYgKHR5cGVzTWFwLmNvbnRhaW5zS2V5KFNFUlZJQ0VfUlRfSURfS0VZKXx8dHlwZXNNYXAuY29udGFpbnNLZXkoU0VSVklDRV9TUlZfSURfS0VZKSkKLQkJCXsKLQkJCQlwcmVmaXggPSBTRVJWSUNFX1BSRUZJWDsKLQkJCX0JCQkgIAkKLQkJCWVsc2UKLQkJCXsKLQkJCQlwcmVmaXggPSBDTElFTlRfUFJFRklYOwotCQkJfQotCQkJCi0JCQlTdHJpbmcgcnVudGltZUlEID0gKFN0cmluZyl0eXBlc01hcC5nZXQocHJlZml4K1JVTlRJTUVfSUQpOwotCQkJaWYgKHJ1bnRpbWVJRCAhPSBudWxsKQotCQkJCXR5cGVzLnNldFJ1bnRpbWVJZChydW50aW1lSUQpOwkJCi0JCQkKLQkJCVN0cmluZyBzZXJ2ZXJJRCA9IChTdHJpbmcpdHlwZXNNYXAuZ2V0KHByZWZpeCtTRVJWRVJfSUQpOwotCQkJaWYgKHNlcnZlcklEICAhPSBudWxsKQkJCQkKLQkJCQl0eXBlcy5zZXRTZXJ2ZXJJZChzZXJ2ZXJJRCk7CQotCQkJCi0JCQkvL2NoZWNrIGlmIHdlYiBzZXJ2aWNlIHR5cGUgaXMgRUpCIC0gaWYgbm90LCBkZWZhdWx0IGZvciBKYXZhIGJlYW4gdHlwZXMKLQkJCVN0cmluZyB0eXBlSUQgPSAoU3RyaW5nKXR5cGVzTWFwLmdldChwcmVmaXgrVFlQRV9JRCk7Ci0JCQlpZiAodHlwZUlEICE9IG51bGwpCi0JCQl7Ci0JCQkJaWYgKHR5cGVJRC50b1VwcGVyQ2FzZSgpLmVxdWFscyhURF9FSkIpKSAgLy9vbmx5IHNldHRpbmcgdHlwZUlEIHNwZWNpZmljYWxseSBmb3IgRUpCIGNhc2UKLQkJCQl7Ci0JCQkJCXR5cGVzLnNldFR5cGVJZChURF9FSkJfVFlQRV9JRCk7Ci0JCQkJfQkKLQkJCQllbHNlIGlmICh0eXBlSUQudG9VcHBlckNhc2UoKS5lcXVhbHMoQlVfRUpCKSkKLQkJCQl7Ci0JCQkJCXR5cGVzLnNldFR5cGVJZChCVV9FSkJfVFlQRV9JRCk7Ci0JCQkJfQkKLQkJCX0JCQkKLQkJfQotICB9CQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWI2NmQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotCi0vKioKLSAqIFRyYW5zZnJvbXMgYSBqYXZhLmxhbmcuU3RyaW5nIHRvIGFuIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvamVjdAotICovCi1wdWJsaWMgY2xhc3MgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXIjdHJhbnNmb3JtKGphdmEubGFuZy5PYmplY3QpCi0gICAqIEBwYXJhbSBPYmplY3QgVGhpcyBtdXN0IGJlIGEgamF2YS5sYW5nLlN0cmluZwotICAgKiBAcmV0dXJuIE9iamVjdCBSZXR1cm5zIGFuIElQcm9qZWN0Ci0gICAqLwotCi0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkKLSAgewotCVN0cmluZyBwcm9qZWN0ICAgICA9IChTdHJpbmcpdmFsdWU7Ci0JaW50ICAgIHNsYXNoSW5kZXggID0gcHJvamVjdC5pbmRleE9mKCAnLycgKTsKLQlTdHJpbmcgcHJvamVjdE5hbWUgPSBwcm9qZWN0OwotCQotCWlmKCBzbGFzaEluZGV4ICE9IC0xICkKLQl7Ci0JICBwcm9qZWN0TmFtZSA9IHByb2plY3Quc3Vic3RyaW5nKCAwLCBzbGFzaEluZGV4ICk7Ci0JfQotCQotICAgIHJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmdVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI1ZWFhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvbnZlbnRpb25zOwotCi0vKioKLSAgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHNvbWUgdXNlZnVsIHN0cmluZyB1dGlsaXRpZXMgdGhhdCBhcmUgbm90IHByb3ZpZGVkIGJ5Ci0gICogZWl0aGVyIFN0cmluZyBvciBTdHJpbmdCdWZmZXIuCi0gICoKLSAgKiBAYXV0aG9yIFBldGVyIE1vb2drCi0gICogQGRhdGUgICBKdWx5IDEzLCAyMDAwCi0qKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBTdHJpbmdVdGlscwotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBsaW5lIHNlcGFyYXRvci4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXTElORSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotICBwcml2YXRlIFN0cmluZ1V0aWxzKCl7fTsKLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHNwbGl0cyBhIHNpbmdsZSBsaW5lIG9mIHRleHQgaW50byBtdWx0aXBsZSBsaW5lcwotICAgICogYmFzZWQgb24gYSBtYXhpbXVtIGxpbmUgbGVuZ3RoLiAgVGhlIG1ldGhvZCB3aWxsIHRyeSB0byBmaXQgYXMKLSAgICAqIG1hbnkgd29yZHMgYXMgcG9zc2libGUgb250byBhIGxpbmUgd2l0aG91dCBleGNlZWRpbmcgdGhlIG1heGltdW0KLSAgICAqIGxpbmUgbGVuZ3RoLiAgTm90ZTogdGhlIG9ubHkgY2FzZSB3aGVyZSBhIGxpbmUgbWlnaHQgZXhjZWVkIHRoZQotICAgICogbWF4aW11bSBpcyBpZiBhIHNpbmdsZSB3b3JkIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtLgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBzcGxpdHRlciggU3RyaW5nIHRleHQsIGludCBtYXhfbGVuZ3RoICkKLSAgewotICAgIFZlY3RvciAgICAgICAgICByZXR1cm5fdGV4dCA9IG5ldyBWZWN0b3IoMjApOwotICAgIFN0cmluZ1tdICAgICAgICByZXR1cm5fc3RyOwotICAgIGludCAgICAgICAgICAgICBpbmRleCA9IDA7Ci0KLSAgICB3aGlsZSggaW5kZXggPCB0ZXh0Lmxlbmd0aCgpICkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gdGV4dC5zdWJzdHJpbmcoIGluZGV4LCBNYXRoLm1pbiggbWF4X2xlbmd0aCArIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQubGVuZ3RoKCkgKSApOwotICAgICAgaW50IHNwYWNlX2luZGV4ID0gc3RyLmxhc3RJbmRleE9mKCAiICIgKTsKLQotICAgICAgaWYoIGluZGV4ICsgc3RyLmxlbmd0aCgpIDwgdGV4dC5sZW5ndGgoKSAmJgotICAgICAgICAgIHRleHQuY2hhckF0KCBpbmRleCArIHN0ci5sZW5ndGgoKSAtIDEgKSAhPSAnICcgJiYKLSAgICAgICAgICB0ZXh0LmNoYXJBdCggaW5kZXggKyBzdHIubGVuZ3RoKCkgKSAhPSAnICcgJiYKLSAgICAgICAgICBzcGFjZV9pbmRleCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIHJldHVybl90ZXh0LmFkZEVsZW1lbnQoIHN0ci5zdWJzdHJpbmcoIDAsIHNwYWNlX2luZGV4ICkgKTsKLSAgICAgICAgaW5kZXggKz0gc3BhY2VfaW5kZXggKyAxOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm5fdGV4dC5hZGRFbGVtZW50KCBzdHIudHJpbSgpICk7Ci0gICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGgoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm5fc3RyID0gbmV3IFN0cmluZ1tyZXR1cm5fdGV4dC5zaXplKCldOwotCi0gICAgZm9yKCBpbmRleCA9IDA7IGluZGV4IDwgcmV0dXJuX3RleHQuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICByZXR1cm5fc3RyW2luZGV4XSA9IChTdHJpbmcpKHJldHVybl90ZXh0LmVsZW1lbnRBdChpbmRleCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5fc3RyOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgc3RyaW5nIHdpdGggYSByZXBlYXRlZCBudW1iZXIgb2YgY2hhcmFjdGVycy4KLSAgKiovCi0gIHN0YXRpYyBwdWJsaWMgU3RyaW5nIHJlcGVhdCggY2hhciB0aGVfY2hhciwgaW50IGNvdW50ICkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCBjb3VudCApOwotCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBidWYuYXBwZW5kKCB0aGVfY2hhciApOwotICAgIH0KLQotICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgZmxhdHRlbnMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHRvIGEgc3RyaW5nLgotICAgICogVGhlIG1ldGhvZCByZXNwZWN0cyBlbWJlZGRlZCB3aGl0ZXNwYWNlIGFuZCBxdW90ZXMuCi0gICAgKiA8dWw+Ci0gICAgKiA8bGk+QW55IGFyZ3VtZW50IHdpdGggZW1iZWRkZWQgd2hpdGVzcGFjZSB3aWxsIGJlIGZsYXR0ZW5lZCBvdXQKLSAgICAqIHdpdGggZW5jbG9zaW5nIHF1b3Rlcy4gRm9yIGV4YW1wbGUsIHRoZSBzaW5nbGUgYXJndW1lbnQKLSAgICAqIDx1PkhlbGxvIFdvcmxkPC91PgotICAgICogd2lsbCBiZSByZXR1cm5lZCBhcwotICAgICogPHU+IkhlbGxvIFdvcmxkIjwvdT4uCi0gICAgKiA8bGk+QW55IGFyZ3VtZW50IHdpdGggcXVvdGVzIHdpbGwgYmUgZmxhdHRlbmVkIG91dCB3aXRoIHRoZQotICAgICogcXVvdGVzIGVzY2FwZWQuIEZvciBleGFtcGxlLCB0aGUgc2luZ2xlIGFyZ3VtZW50Ci0gICAgKiA8dT4iSGFwcHkgZGF5cyI8L3U+Ci0gICAgKiB3aWxsIGJlIHJldHVybmVkIGFzCi0gICAgKiA8dT5cIkhhcHB5IGRheXNcIjwvdT4uCi0gICAgKiA8L3VsPgotICAgICogQHBhcmFtIGFyZ3VtZW50cyBUaGUgYXJyYXkgb2Ygc3RyaW5ncyB0byBmbGF0dGVuLgotICAgICogQHJldHVybiB0aGUgZmxhdHRlbmVkIHN0cmluZy4KLSAgKi8KLSAgc3RhdGljIHB1YmxpYyBTdHJpbmcgZmxhdHRlbkFyZ3VtZW50cyAoIFN0cmluZ1tdIGFyZ3VtZW50cyApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgZm9yIChpbnQgaT0wOyBpPGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAvLwotICAgICAgLy8gQXBwZW5kIGEgc2VwYXJhdG9yIChleGNlcHQgdGhlIGZpcnN0IHRpbWUpLgotICAgICAgLy8KLSAgICAgIGlmIChpID4gMCkgYnVmLmFwcGVuZCgnICcpOwotCi0gICAgICAvLwotICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZS4KLSAgICAgIC8vCi0gICAgICBib29sZWFuIHdoaXRlc3BhY2UgPSBmYWxzZTsKLSAgICAgIGNoYXJbXSBjaGFycyA9IGFyZ3VtZW50c1tpXS50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaj0wOyAhd2hpdGVzcGFjZSAmJiBqPGNoYXJzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjaGFyc1tqXSkpCi0gICAgICAgIHsKLSAgICAgICAgICB3aGl0ZXNwYWNlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLwotICAgICAgLy8gQXBwZW5kIHRoZSBhcmd1bWVudCwgcXVvdGVkIGFzIG5lY2Vzc2FyeS4KLSAgICAgIC8vCi0gICAgICBpZiAod2hpdGVzcGFjZSkgYnVmLmFwcGVuZCgnIicpOwotICAgICAgZm9yIChpbnQgaj0wOyBqPGNoYXJzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoY2hhcnNbal0gPT0gJyInKSBidWYuYXBwZW5kKCdcXCcpOwotICAgICAgICBidWYuYXBwZW5kKGNoYXJzW2pdKTsKLSAgICAgIH0KLSAgICAgIGlmICh3aGl0ZXNwYWNlKSBidWYuYXBwZW5kKCciJyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCBwYXJzZXMgd2hpdGVzcGFjZS1kZWxpbWl0dGVkIGZpbGVuYW1lcyBmcm9tCi0gICAgKiB0aGUgZ2l2ZW4gPGNvZGU+aW5wdXQ8L2NvZGU+IHN0cmVhbS4gPGI+TGltaXRhdGlvbjo8L2I+Ci0gICAgKiBRdW90ZWQgZmlsZW5hbWVzIG9yIGZpbGVuYW1lcyB3aXRoIGVtYmVkZGVkIHdoaXRlc3BhY2UKLSAgICAqIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KLSAgICAqIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgc3RyZWFtLgotICAgICogQHJldHVybiBBbiBlbnVtZXJhdGlvbiBvZiBmaWxlbmFtZXMgZnJvbSB0aGUgc3RyZWFtLgotICAqLwotICBzdGF0aWMgcHVibGljIEVudW1lcmF0aW9uIHBhcnNlRmlsZW5hbWVzRnJvbVN0cmVhbSAoIElucHV0U3RyZWFtIGlucHV0ICkKLSAgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBWZWN0b3IgZmlsZW5hbWVzID0gbmV3IFZlY3Rvcig2NCw2NCk7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG51bGw7Ci0gICAgYnl0ZSBzdGF0ZSA9IFNUQVRFX1dTOwotICAgIGludCBpYyA9IGlucHV0LnJlYWQoKTsKLSAgICB3aGlsZSAoaWMgPj0gMCkKLSAgICB7Ci0gICAgICBjaGFyIGMgPSAoY2hhcilpYzsKLSAgICAgIHN3aXRjaCAoc3RhdGUpCi0gICAgICB7Ci0gICAgICAgIGNhc2UgU1RBVEVfV1M6Ci0gICAgICAgICAgaWYgKCFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYyk7Ci0gICAgICAgICAgICBzdGF0ZSA9IFNUQVRFX05XUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1RBVEVfTldTOgotICAgICAgICAgIGlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gYnVmZmVyLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBmaWxlbmFtZXMuYWRkKGZpbGVuYW1lKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IG51bGw7Ci0gICAgICAgICAgICBzdGF0ZSA9IFNUQVRFX1dTOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGljID0gaW5wdXQucmVhZCgpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZW5hbWVzLmVsZW1lbnRzKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFNUQVRFX1dTID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBTVEFURV9OV1MgPSAxOwotCi0KLSAgLyoqCi0gICogUmV0dXJucyB0cnVlIGlzIHRoZSB0eXBlIHBhc3NlZCBpbiBpcyBhIHByaW10aXZlIGphdmEgdHlwZQotICAqIEBwYXJhbSBjbGFzcyBuYW1lIFN0cmluZwotICAqIEByZXR1cm4gdHJ1ZSBpcyBwcmltaXRpdmUgdHlwZQotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQcmltaXRpdmVUeXBlKFN0cmluZyB0eXBlTmFtZSkgCi0gIHsKLQotICAgIGlmICh0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJib29sZWFuIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImJ5dGUiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiZG91YmxlIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImZsb2F0IikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImludCIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJsb25nIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNob3J0IikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImNoYXIiKSkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLQotICB9Ci0KLSAgLyoqCi0gICogVGhlIG1ldGhvZCByZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIGFsbG93ZWQgaW4gVVJJcwotICAqIGFuZCBub3QgYWxsb3dlZCBpbiBKYXZhIGNsYXNzIG5hbWVzIHRvIGFuIHVuZGVyc2NvcmUgKCdfJykKLSAgKiBAcGFyYW0gVVJJIFN0cmluZwotICAqIEByZXR1cm4gdmFsaWQgSmF2YSBjbGFzcyBuYW1lIFN0cmluZwotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBVUkkyQ2xhc3NOYW1lKCBTdHJpbmcgdXJpICkgewotICAgIFN0cmluZyBjbGFzc05hbWUgPSB1cmk7Ci0gICAgZm9yICggaW50IGkgPSAwOyBpIDwgVVJJX1NZTUJPTFMubGVuZ3RoOyBpKysgKSB7Ci0gICAgCWNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlICggVVJJX1NZTUJPTFNbaV0sIFVOREVSU0NPUkUgKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBVUklfU1lNQk9MUyA9IHsnLScsICd+JywgJyMnLCAnLycsICcuJ307Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgVU5ERVJTQ09SRSA9ICdfJzsKLQotCi0gIC8qKgotICAgKiBUaGlzIHJldHVybnMgYSB2YWxpZCBKYXZhIGlkZW50aWZpZXIgYmFzZWQgb24gdGhlIGdpdmVuIG5hbWUuIAotICAgKiAoZm9sbG93cyBKQVgtUlBDIDEuMCBQdWJsaWMgUmV2aWV3IERyYWZ0IDIgcmVjb21tZW5kYXRpb25zKQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgamF2YUlkZW50aWZpZXJGb3IoU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgYm9vbGVhbiBza2lwcGVkID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IGxvY2FsTmFtZS5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKQotICAgIHsKLSAgICAgIGNoYXIgY2hhcmFjdGVyID0gbG9jYWxOYW1lLmNoYXJBdChpKTsKLSAgICAgIGlmIChDaGFyYWN0ZXIuaXNKYXZhSWRlbnRpZmllclBhcnQoY2hhcmFjdGVyKSAmJiAhaXNEZWxpbWl0ZXIoY2hhcmFjdGVyKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNraXBwZWQgJiYgcmVzdWx0Lmxlbmd0aCgpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyYWN0ZXIgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoY2hhcmFjdGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKGNoYXJhY3Rlcik7Ci0gICAgICAgIHNraXBwZWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2tpcHBlZCA9dHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIUphdmFDb252ZW50aW9ucy52YWxpZGF0ZUlkZW50aWZpZXIocmVzdWx0LnRvU3RyaW5nKCkpLmlzT0soKSkKLSAgICB7Ci0gICAgICByZXN1bHQuaW5zZXJ0KDAsICJfIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0RlbGltaXRlcihjaGFyIGNoYXJhY3RlcikKLSAgewotICAgIHJldHVybiAiXHUwMDJEXHUwMDJFXHUwMDNBXHUwMDVGXHUwMEI3XHUwMzg3XHUwNkREXHUwNkRFIi5pbmRleE9mKGNoYXJhY3RlcikgIT0gLTE7Ci0gIH0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YUJlYW5Qcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YUJlYW5Qcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2ZlMjdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFCZWFuUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIFRoaXMgb2JqZWN0IHJlcHJlc2VudHMgYSBzaW1wbGUgb3IgaW5kZXhlZCBwcm9wZXJ0eQotICogYXMgZGVmaW5lZCBieSB0aGUgSmF2YSBCZWFuIHNwZWNpZmljYXRpb24uIEV2ZXJ5Ci0gKiBJSmF2YUJlYW5Qcm9wZXJ0eSBpcyBjaGFyYWN0ZXJpemVkIGJ5IGZvdXIgdGhpbmdzOgotICogPG9sPgotICogPGxpPlRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS48L2xpPgotICogPGxpPldoZXRoZXIgb3Igbm90IHRoZSBwcm9wZXJ0eSBpcyBpbmRleGVkLjwvbGk+Ci0gKiA8bGk+VGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBnZXR0ZXIsIGlmIGFueS48L2xpPgotICogPGxpPlRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgc2V0dGVyLCBpZiBhbnkuPC9saT4KLSAqIDwvb2w+Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUphdmFCZWFuUHJvcGVydHkKLXsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLQkgKiBAcmV0dXJuIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIHByb3BlcnR5IGlzIGluZGV4ZWQuCi0JICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBwcm9wZXJ0eSBpcyBpbmRleGVkLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSW5kZXhlZCAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBnZXR0ZXIuCi0JICogRm9yIGluZGV4ZWQgcHJvcGVydGllcywKLQkgKiB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGdldHRlciB3aWxsIGJlIGFuIGFycmF5LgotCSAqIEZvciBzaW1wbGUgcHJvcGVydGllcywKLQkgKiB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGdldHRlciB3aWxsIG5vdCBiZSBhbiBhcnJheS4KLQkgKiBAcmV0dXJuIFRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgZ2V0dGVyLAotCSAqIG9yIG51bGwgaWYgdGhpcyBpcyBhIHdyaXRlLW9ubHkgcHJvcGVydHkuCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0R2V0dGVyICgpOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBpbmRleGVkIGdldHRlciwKLQkgKiBvciBudWxsIGlmIHRoaXMgaXMgZWl0aGVyIG5vdCBhbiBpbmRleGVkIHByb3BlcnR5LAotCSAqIG9yIGlzIGFuIGluZGV4ZWQgcHJvcGVydHkgYnV0IGhhcyBvbmx5IHRoZSBhcnJheS0KLQkgKiBiYXNlZCBnZXR0ZXIuCi0JICogQHJldHVybiBUaGUgSkRUIElNZXRob2Qgb2YgdGhlIGluZGV4ZWQgZ2V0dGVyLAotCSAqIG9yIG51bGwgaWYgdGhpcyBpcyBub3QgYW4gaW5kZXhlZCBwcm9wZXJ0eSBvcgotCSAqIGlmIHRoZXJlIGlzIG5vIGluZGV4ZWQgZ2V0dGVyLgotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldEluZGV4ZWRHZXR0ZXIgKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgc2V0dGVyLgotCSAqIEZvciBpbmRleGVkIHByb3BlcnRpZXMsCi0JICogdGhlIHBhcmFtZXRlciB0eXBlIG9mIHRoZSBzZXR0ZXIgd2lsbCBiZSBhbiBhcnJheS4KLQkgKiBGb3Igc2ltcGxlIHByb3BlcnRpZXMsCi0JICogdGhlIHBhcmFtZXRlciB0eXBlIG9mIHRoZSBzZXR0ZXIgd2lsbCBub3QgYmUgYW4gYXJyYXkuCi0JICogQHJldHVybiBUaGUgSkRUIElNZXRob2Qgb2YgdGhlIHNldHRlciwKLQkgKiBvciBudWxsIGlmIHRoaXMgaXMgYSByZWFkLW9ubHkgcHJvcGVydHkuCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0U2V0dGVyICgpOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBpbmRleGVkIHNldHRlciwKLQkgKiBvciBudWxsIGlmIHRoaXMgaXMgZWl0aGVyIG5vdCBhbiBpbmRleGVkIHByb3BlcnR5LAotCSAqIG9yIGlzIGFuIGluZGV4ZWQgcHJvcGVydHkgYnV0IGhhcyBvbmx5IHRoZSBhcnJheS0KLQkgKiBiYXNlZCBzZXR0ZXIuCi0JICogQHJldHVybiBUaGUgSkRUIElNZXRob2Qgb2YgdGhlIGluZGV4ZWQgc2V0dGVyLAotCSAqIG9yIG51bGwgaWYgdGhpcyBpcyBub3QgYW4gaW5kZXhlZCBwcm9wZXJ0eSBvcgotCSAqIGlmIHRoZXJlIGlzIG5vIGluZGV4ZWQgc2V0dGVyLgotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldEluZGV4ZWRTZXR0ZXIgKCk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdHlwZSB3aXRoaW4gd2hpY2ggdGhlIGdldHRlciBhbmQvb3Igc2V0dGVyCi0JICogb2YgdGhpcyBwcm9wZXJ0eSBpcyBkZWNsYXJlZCwgb3IgbnVsbCBpZiBub25lLgotCSAqIEByZXR1cm4gVGhlIHR5cGUgd2l0aGluIHdoaWNoIHRoZSBnZXR0ZXIgYW5kL29yIHNldHRlcgotCSAqIG9mIHRoaXMgcHJvcGVydHkgaXMgZGVjbGFyZWQuCi0JICovCi0JcHVibGljIElUeXBlIGdldERlY2xhcmluZ1R5cGUgKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhV2ViU2VydmljZVJ1bGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFXZWJTZXJ2aWNlUnVsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTEyYzlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFXZWJTZXJ2aWNlUnVsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBBIEphdmEgV2ViIHNlcnZpY2UgY29uZm9ybWFuY2UgUnVsZSB0ZXN0cyBzb21lIGNvbGxlY3Rpb24KLSAqIG9mIEphdmEgcmVzb3VyY2VzIHRoYXQgaW1wbGVtZW50LCBvciBhcmUgbWVhbnQgdG8gaW1wbGVtZW50LAotICogYSBXZWIgc2VydmljZSBhZ2FpbnN0IGEgc2luZ2xlLCBjb25jaXNlIHJlcXVpcmVtZW50IGFzIGlzCi0gKiB0eXBpY2FsbHkgZGVmaW5lZCBieSBhIHNwZWNpZmljYXRpb24gKGVnLiBKQVgtUlBDLCBKU1IgMTA5KQotICogb3IgYSBydW50aW1lIChlZy4gQXBhY2hlIEF4aXMpLgotICogPHA+Ci0gKiBFdmVyeSBydWxlIG11c3QgaGF2ZSBhIG5hbWVzcGFjZSBhbmQgYSB1bmlxdWUgSUQgdW5kZXIgdGhhdAotICogdGhhdCBuYW1lc3BhY2UuIEV2ZXJ5IHJ1bGUgbWF5IGhhdmUgYSBzaG9ydCBuYW1lIGFuZCBhIGxvbmcKLSAqIGRlc2NyaXB0aW9uLCBib3RoIG9mIHdoaWNoIGFyZSByZWNvbW1lbmRlZCBidXQgb3B0aW9uYWwuCi0gKiA8cD4KLSAqIEV2ZXJ5IHJ1bGUgZm9sbG93cyBhIGxpZmVjeWNsZSBvZiBpbml0aWFsaXphdGlvbiwgYW5hbHlzaXMKLSAqIGFuZCBjb21wbGV0aW9uLiBBIEphdmEgV2ViIHNlcnZpY2UgcnVsZSBlbmdpbmUgd2lsbCBkcml2ZQotICogdGhlIDxjb2RlPmluaXQoKTwvY29kZT4gbWV0aG9kIHRvIGluaXRpYWxpemUgdGhlIHJ1bGUsIHRoZW4KLSAqIGRyaXZlIHRoZSB2YXJpb3VzIDxjb2RlPnZpc2l0Li4uKCk8L2NvZGU+IG1ldGhvZHMgYXMgaXQKLSAqIG5hdmlnYXRlcyBzb21lIGNvbGxlY3Rpb24gb2YgSkRUIHJlc291cmNlcywgdGhlbiBkcml2ZSB0aGUKLSAqIDxjb2RlPmdldFJlc3VsdHMoKTwvY29kZT4gbWV0aG9kIHRvIGluZGljYXRlIGFuYWx5c2lzIGlzIGRvbmUKLSAqIGFuZCByZXRyaWV2ZSBhIHN0YXR1cyBvYmplY3Qgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUphdmFXZWJTZXJ2aWNlUnVsZQotewotCS8qKgotCSAqIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBydWxlCi0JICogd2l0aGluIHRoZSBuYW1lc3BhY2UgdG8gd2hpY2ggdGhlIHJ1bGUgYmVsb25ncy4KLQkgKiBAcmV0dXJuIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcnVsZS4KLQkgKiBWYWxpZCBydWxlIGlkZW50aWZpZXJzIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgotCSAqLwotCXB1YmxpYyBpbnQgZ2V0SWQgKCk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbmFtZXNwYWNlIHRvIHdoaWNoIHRoaXMgcnVsZSBiZWxvbmdzLgotCSAqIEByZXR1cm4gVGhlIG5hbWVzcGFjZSB0byB3aGljaCB0aGlzIHJ1bGUgYmVsb25ncy4KLQkgKiBOZXZlciByZXR1cm5zIG51bGwuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UgKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGFibGUgc2hvcnQgbmFtZSBvZiB0aGlzIHJ1bGUuICAKLQkgKiBAcmV0dXJuIFRoZSB0cmFuc2xhdGFibGUgc2hvcnQgbmFtZSBvZiB0aGlzIHJ1bGUsCi0JICogb3IgbnVsbCBpZiB0aGUgcnVsZSBoYXMgbm8gbmFtZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGFibGUgZGVzY3JpcHRpb24gb2YgdGhpcyBydWxlLgotCSAqIEByZXR1cm4gVGhlIHRyYW5zbGF0YWJsZSBkZXNjcmlwdGlvbiBvZiB0aGlzIHJ1bGUsCi0JICogb3IgbnVsbCBpZiB0aGUgcnVsZSBoYXMgbm8gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKTsKLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgcnVsZSBlbmdpbmUgdG8gZ2l2ZSB0aGlzIHJ1bGUgYSBjaGFuY2UKLQkgKiB0byBpbml0aWFsaXplIGl0c2VsZiBwcmlvciB0byB2aXNpdGluZyBKRFQgb2JqZWN0cy4KLQkgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgaW5pdGlhbGl6aW5nIHRoaXMgcnVsZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0ICggSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmUgKTsKLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgcnVsZSBlbmdpbmUgd2hlbiBpdCBkZWNpZGVzIHRvIHZpc2l0Ci0JICogYSBKYXZhIGNsYXNzIChpZS4gcHJpbWl0aXZlIHR5cGVzIGFyZSBleGNsdWRlZCkuCi0JICogQHBhcmFtIGpkdENsYXNzIFRoZSBjbGFzcyB0byB2aXNpdC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHRyYWlsIG9mIG9iamVjdHMgYmFjayB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICk7Ci0KLQkvKioKLQkgKiBDYWxsZWQgYnkgdGhlIHJ1bGUgZW5naW5lIHdoZW4gaXQgZGVjaWRlcyB0byB2aXNpdAotCSAqIGEgSmF2YSBjbGFzcyBmb3VuZCBvbiB0aGUgdGhyb3dzIGNsYXVzZSBvZiBhIG1ldGhvZC4KLQkgKiBAcGFyYW0gamR0Q2xhc3MgVGhlIGV4Y2VwdGlvbiBjbGFzcyB0byB2aXNpdC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHRyYWlsIG9mIG9iamVjdHMgYmFjayB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdEV4Y2VwdGlvbiAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApOwotCi0JLyoqCi0JICogQ2FsbGVkIGJ5IHRoZSBydWxlIGVuZ2luZSB3aGVuIGl0IGRlY2lkZXMgdG8gdmlzaXQKLQkgKiBhIGZpZWxkIGJlbG9uZ2luZyB0byBhIGNsYXNzLgotCSAqIEBwYXJhbSBqZHRGaWVsZCBUaGUgZmllbGQgdG8gdmlzaXQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSB0cmFpbCBvZiBvYmplY3RzIGJhY2sgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRGaWVsZCAoIElGaWVsZCBqZHRGaWVsZCwgU3RhY2sgcGVhbnV0VHJhaWwgKTsKLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgcnVsZSBlbmdpbmUgd2hlbiBpdCBkZWNpZGVzIHRvIHZpc2l0Ci0JICogYSBKYXZhIEJlYW4gcHJvcGVydHkgKGllLiByZXByZXNlbnRlZCBieSBhICJnZXQiIGFuZC9vcgotCSAqICJzZXQiIG1ldGhvZCkgYmVsb25pbmcgdG8gYSBjbGFzcy4KLQkgKiBAcGFyYW0gYmVhblByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byB2aXNpdC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHRyYWlsIG9mIG9iamVjdHMgYmFjayB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdFByb3BlcnR5ICggSUphdmFCZWFuUHJvcGVydHkgYmVhblByb3BlcnR5LCBTdGFjayBwZWFudXRUcmFpbCApOwotCi0JLyoqCi0JICogQ2FsbGVkIGJ5IHRoZSBydWxlIGVuZ2luZSB3aGVuIGl0IGRlY2lkZXMgdG8gdmlzaXQgYSBtZXRob2QuCi0JICogQHBhcmFtIGpkdE1ldGhvZCBUaGUgbWV0aG9kIHRvIHZpc2l0LgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgdHJhaWwgb2Ygb2JqZWN0cyBiYWNrIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kICggSU1ldGhvZCBqZHRNZXRob2QsIFN0YWNrIHBlYW51dFRyYWlsICk7Ci0KLQkvKioKLQkgKiBDYWxsZWQgYnkgdGhlIHJ1bGUgZW5naW5lIGFmdGVyIGFsbCBKRFQgb2JqZWN0cyBoYXZlCi0JICogYmVlbiB2aXNpdGVkIHNvIHRoYXQgdGhlIHJ1bGUgY2FuIHJldHVybiBhIHN0YXR1cwotCSAqIG9iamVjdCAodXN1YWxseSBhIG11bHRpLXN0YXR1cykgd2l0aCBhIHN1bW1hcnkgb2YKLQkgKiBhbnkgdmlvbGF0aW9ucyBieSBKRFQgb2JqZWN0cyBkZXRlY3RlZCBieSB0aGlzIHJ1bGUuCi0JICogQHJldHVybiBUaGUgcmVzdWx0cyBvZiB0aGUgcnVsZSdzIGFuYWx5c2lzLgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGdldFJlc3VsdHMgKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2VmMGI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIFRoaXMgaXMgYW4gZW5naW5lIHRoYXQgd2Fsa3MgYSBKRFQgbW9kZWwgYW5kIHJ1bnMgcnVsZXMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZQotewotCS8qKgotCSAqIEFuYWx5emVzIHRoZSBnaXZlbiBjbGFzcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ2l2ZW4gCi0JICogcHJvamVjdCBmb3IgY29tcGxpYW5jZSB0byBhIHNldCBvZiBKQVgtUlBDIHJ1bGVzLgotCSAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IGNvbnRleHQgb2YgdGhlIGFuYWx5c2lzLgotCSAqIEBwYXJhbSByb290Q2xhc3MgVGhlIElUeXBlIG9mIHRoZSBjbGFzcyB0byBhbmFseXplLgotCSAqIEBwYXJhbSBydWxlcyBUaGUgcnVsZXMgdG8gdXNlIGZvciB0aGUgYW5hbHlzaXMuCi0JICogQHJldHVybiBBbiBJU3RhdHVzIHN1bW1hcml6aW5nIHRoZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBhbmFseXplICggSVByb2plY3QgcHJvamVjdCwgSVR5cGUgcm9vdENsYXNzLCBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgKTsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFRSZXNvbHZlciBpbiB1c2UgYnkgdGhpcyBhbmFseXplci4KLQkgKiBUaGUgSkRUUmVzb2x2ZXIgaXMgZ3VhcmFudGVlZCBub3QgdG8gYmUgbnVsbCBvbmx5Ci0JICogYWZ0ZXIgdGhlIGFuYWx5emUgbWV0aG9kIGhhcyBiZWVuIGludm9rZWQgYW5kIGJlZm9yZQotCSAqIHRoZSBmaXJzdCBydWxlIGlzIHZpc2l0ZWQuIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkCi0JICogZm9yIHVzZSBieSBpbXBsZW1lbnRhdGlvbnMgb2YgSUphdmFXZWJTZXJ2aWNlUnVsZS4KLQkgKiBAcmV0dXJuIFRoZSBKRFRSZXNvbHZlciBpbiB1c2UgYnkgdGhpcyBhbmFseXplci4KLQkgKi8KLQlwdWJsaWMgSkRUUmVzb2x2ZXIgZ2V0SkRUUmVzb2x2ZXIgKCk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcHJvZ3Jlc3MgbW9uaXRvciBpbiB1c2UgYnkgdGhpcyBhbmFseXplciwKLQkgKiBvciBudWxsIGlmIG5vIHByb2dyZXNzIG1vbml0b3IgaXMgaW4gdXNlLgotCSAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciB1c2UgYnkgaW1wbGVtZW50YXRpb25zCi0JICogb2YgSUphdmFXZWJTZXJ2aWNlUnVsZS4KLQkgKiBAcmV0dXJuIFRoZSBwcm9ncmVzcyBtb25pdG9yIGluIHVzZSBieSB0aGlzIGFuYWx5emVyLAotCSAqIG9yIG51bGwgZm9yIG5vbmUuCi0JICovCi0JcHVibGljIElQcm9ncmVzc01vbml0b3IgZ2V0UHJvZ3Jlc3NNb25pdG9yICgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNWVmYjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKiAyMDA2MDYwNyAgIDE0NTYwNCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc0ZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNvbXBpbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXMuSkFYUlBDUnVsZVNldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGFuYWx5emluZwotICogY29tcGxpYW5jZSBvZiBKYXZhIHNlcnZpY2UgY2xhc3NlcyBhbmQgdmFsdWUgdHlwZXMgdG8KLSAqIHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uLiBUeXBpY2FsIHVzYWdlIG9mIHRoaXMKLSAqIGNsYXNzOgotICogPGNvZGU+Ci0gKiBJVHlwZSB0eXBlID0gSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLmFzVHlwZShteUphdmFGaWxlUmVzb3VyY2UpOwotICogSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzID0gSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLmdldFJ1bGVTZXQoKTsKLSAqIEpBWFJQQ1dlYlNlcnZpY2VBbmFseXplci5nZXRSdWxlRW5naW5lKCkuYW5hbHl6ZSh0eXBlLHJ1bGVzLG15UHJvZ3Jlc3NNb25pdG9yKTsKLSAqIDwvY29kZT4gCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIKLXsKLQlwcml2YXRlIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlU2V0XzsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGEgbmV3IEpBWC1SUEMgV2ViIHNlcnZpY2UgYW5hbHl6ZXIsCi0JICogYSBjb252ZW5pZW5jZSBjbGFzcyB3cmFwcGVkIGFyb3VuZCBhCi0JICogSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLgotCSAqLwotCXB1YmxpYyBKQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIgKCkKLQl7Ci0JCXJ1bGVTZXRfID0gSkFYUlBDUnVsZVNldEZhY3RvcnkubmV3UnVsZVNldCgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNldCBvZiBydWxlcyBpbiB1c2UsIHRoZSBjb250ZW50cyBvZgotCSAqIHdoaWNoIGNhbiBiZSBtYW5pcHVsYXRlZCBhbmQgd2lsbCBiZSByZXNwZWN0ZWQgYnkKLQkgKiB0aGlzIGFuYWx5emVyLiBJbiBvdGhlciB3b3JkcywgdGhpcyBtZXRob2QgcmV0dXJucyBhCi0JICogcmVmZXJlbmNlIHRvLCBub3QgYSBjb3B5IG9mLCB0aGUgc2V0IG9mIHJ1bGVzIGluIHVzZS4KLQkgKiBAcmV0dXJuIFRoZSBzZXQgb2YgcnVsZXMgaW4gdXNlIGJ5IHRoZSBhbmFseXplci4KLQkgKi8KLQlwdWJsaWMgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IGdldFJ1bGVTZXQgKCkKLQl7Ci0JCXJldHVybiBydWxlU2V0XzsKLQl9Ci0JCi0JLyoqCi0JICogQW5hbHl6ZXMgdGhlIEphdmEgc2VydmljZSBjbGFzcyByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4KLQkgKiBKRFQgdHlwZSBmb3IgY29tcGxpYW5jZSB0byB0aGUgSkFYLVJQQyBmb3IgY29tcGxpYW5jZSB0bwotCSAqIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uCi0JICogUHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBwcm92aWRlZCBieSB0aGUgZ2l2ZW4gbW9uaXRvci4gCi0JICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgY29udGV4dCBpbiB3aGljaCB0aGUgYW5hbHlzaXMKLQkgKiBzaG91bGQgdGFrZSBwbGFjZS4KLQkgKiBAcGFyYW0gcm9vdENsYXNzIFRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciB0byB1c2UsCi0JICogb3IgbnVsbCBpZiBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBzdGF0dXMgb2JqZWN0IHdob3NlIHNldmVyaXR5LCBtZXNzYWdlIGFuZAotCSAqIGNoaWxkIHN0YXR1cyBvYmplY3RzLCBpZiBhbnksIGRlc2NyaWJlIGFueSBKQVgtUlBDCi0JICogcnVsZXMgdGhhdCBtYXkgYmUgY29tcHJvbWlzZWQgYnkgdGhlIHNlcnZpY2UgY2xhc3MuCi0JICogTmV2ZXIgcmV0dXJucyBudWxsLgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGFuYWx5emUgKCBJUHJvamVjdCBwcm9qZWN0LCBJVHlwZSByb290Q2xhc3MsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZSA9IG5ldyBKQVhSUENXZWJTZXJ2aWNlUnVsZUVuZ2luZShtb25pdG9yKTsKLQkJcmV0dXJuIGVuZ2luZS5hbmFseXplKHByb2plY3Qscm9vdENsYXNzLHJ1bGVTZXRfKTsKLQl9Ci0KLQkvKioKLQkgKiBBbmFseXplcyB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbgotCSAqIEpEVCB0eXBlIGZvciBjb21wbGlhbmNlIHRvIHRoZSBKQVgtUlBDIGZvciBjb21wbGlhbmNlIHRvCi0JICogdGhlIEpBWC1SUEMgc3BlY2lmaWNhdGlvbi4KLQkgKiBQcm9ncmVzcyBtb25pdG9yaW5nIGlzIHByb3ZpZGVkIGJ5IHRoZSBnaXZlbiBtb25pdG9yLiAKLQkgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdCBjb250ZXh0IGluIHdoaWNoIHRoZSBhbmFseXNpcwotCSAqIHNob3VsZCB0YWtlIHBsYWNlLgotCSAqIEBwYXJhbSByb290Q2xhc3MgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZQotCSAqIEphdmEgc2VydmljZSBjbGFzcyB0byBhbmFseXplLgotCSAqIEBwYXJhbSBtb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIHVzZSwKLQkgKiBvciBudWxsIGlmIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIHN0YXR1cyBvYmplY3Qgd2hvc2Ugc2V2ZXJpdHksIG1lc3NhZ2UgYW5kCi0JICogY2hpbGQgc3RhdHVzIG9iamVjdHMsIGlmIGFueSwgZGVzY3JpYmUgYW55IEpBWC1SUEMKLQkgKiBydWxlcyB0aGF0IG1heSBiZSBjb21wcm9taXNlZCBieSB0aGUgc2VydmljZSBjbGFzcy4KLQkgKiBOZXZlciByZXR1cm5zIG51bGwuCi0JICovCi0JcHVibGljIElTdGF0dXMgYW5hbHl6ZSAoIElQcm9qZWN0IHByb2plY3QsIFN0cmluZyByb290Q2xhc3MsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQl0cnkKLQkJewotCQkJSVR5cGUgcm9vdFR5cGUgPSBhc1R5cGUocm9vdENsYXNzLHByb2plY3QpOwotCQkJaWYgKHJvb3RUeXBlID09IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9VTlJFU09MVkVEX0NMQVNTLHJvb3RDbGFzcyxwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCk7Ci0JCQl9Ci0JCQlyZXR1cm4gYW5hbHl6ZShwcm9qZWN0LHJvb3RUeXBlLG1vbml0b3IpOwotCQl9Ci0JCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gQW4gZXhjZXB0aW9uIG1heSBiZSB0aHJvd24gZnJvbSB0aGUgY2FsbCB0byBhc1R5cGUoLi4uKSwKLQkJCS8vIG5vdCBmcm9tIHRoZSBjYWxsIHRvIGFuYWx5emUoLi4uKS4gRXhjZXB0aW9ucyB3aXRoaW4gdGhlCi0JCQkvLyBhbmFseXplKC4uLikgbWV0aG9kIGFyZSBjYXB0dXJlZCBpbiB0aGUgcmV0dXJuZWQgSVN0YXR1cy4KLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCwiSW50ZXJuYWwgZXJyb3IiLGUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQW5hbHl6ZXMgdGhlIEphdmEgc2VydmljZSBjbGFzcyByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4KLQkgKiAiLmphdmEiIGNvbXBpbGF0aW9uIHVuaXQgb3IgIi5jbGFzcyIgZmlsZSBmb3IgY29tcGxpYW5jZQotCSAqIHRvIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uCi0JICogUHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBwcm92aWRlZCBieSB0aGUgZ2l2ZW4gbW9uaXRvci4gCi0JICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgY29udGV4dCBpbiB3aGljaCB0aGUgYW5hbHlzaXMKLQkgKiBzaG91bGQgdGFrZSBwbGFjZS4KLQkgKiBAcGFyYW0gcm9vdENsYXNzIFRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciB0byB1c2UsCi0JICogb3IgbnVsbCBpZiBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBzdGF0dXMgb2JqZWN0IHdob3NlIHNldmVyaXR5LCBtZXNzYWdlIGFuZAotCSAqIGNoaWxkIHN0YXR1cyBvYmplY3RzLCBpZiBhbnksIGRlc2NyaWJlIGFueSBKQVgtUlBDCi0JICogcnVsZXMgdGhhdCBtYXkgYmUgY29tcHJvbWlzZWQgYnkgdGhlIHNlcnZpY2UgY2xhc3MuCi0JICogTmV2ZXIgcmV0dXJucyBudWxsLgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGFuYWx5emUgKCBJUHJvamVjdCBwcm9qZWN0LCBJRmlsZSByb290Q2xhc3MsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQl0cnkKLQkJewotCQkJSVR5cGUgcm9vdFR5cGUgPSBhc1R5cGUocm9vdENsYXNzKTsKLQkJCWlmIChyb290VHlwZSA9PSBudWxsKQotCQkJewotCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfVU5SRVNPTFZFRF9DTEFTUyxyb290Q2xhc3MuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKTsKLQkJCX0KLQkJCXJldHVybiBhbmFseXplKHByb2plY3Qscm9vdFR5cGUsbW9uaXRvcik7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvLyBBbiBleGNlcHRpb24gbWF5IGJlIHRocm93biBmcm9tIHRoZSBjYWxsIHRvIGFzVHlwZSguLi4pLAotCQkJLy8gbm90IGZyb20gdGhlIGNhbGwgdG8gYW5hbHl6ZSguLi4pLiBFeGNlcHRpb25zIHdpdGhpbiB0aGUKLQkJCS8vIGFuYWx5emUoLi4uKSBtZXRob2QgYXJlIGNhcHR1cmVkIGluIHRoZSByZXR1cm5lZCBJU3RhdHVzLgotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLCJJbnRlcm5hbCBlcnJvciIsZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKYXZhIHR5cGUgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGZpbGUsCi0JICogb3IgbnVsbCBpZiBubyBzdWNoIHR5cGUgY2FuIGJlIGNsZWFybHkgZGV0ZXJtaW5lZC4KLQkgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB3aG9zZSB0eXBlIHRvIGluZmVyLCB1c3VhbGx5IGEKLQkgKiAiLmphdmEiIG9yICIuY2xhc3MiIGZpbGUuIEZvciAiLmphdmEiIGZpbGVzLCB0aGlzCi0JICogbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBwcmltYXJ5IHR5cGUuCi0JICogQHJldHVybiBUaGUgaW5mZXJyZWQgSkRUIEphdmEgdHlwZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgZ2l2ZW4gZmlsZSBjb3VsZCBub3QKLQkgKiBtYXBwZWQgdG8gYSBKRFQgSVR5cGUuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVR5cGUgYXNUeXBlICggU3RyaW5nIHFuYW1lLCBJUHJvamVjdCBwcm9qZWN0ICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJVHlwZSB0eXBlID0gbnVsbDsKLQkJSUphdmFFbGVtZW50IGphdmFFbGVtZW50ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQlpZiAoamF2YUVsZW1lbnQgaW5zdGFuY2VvZiBJSmF2YVByb2plY3QpCi0JCXsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IChJSmF2YVByb2plY3QpamF2YUVsZW1lbnQ7Ci0JCQl0eXBlID0gamF2YVByb2plY3QuZmluZFR5cGUocW5hbWUpOwotCQl9Ci0JCXJldHVybiB0eXBlOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKYXZhIHR5cGUgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGZpbGUsCi0JICogb3IgbnVsbCBpZiBubyBzdWNoIHR5cGUgY2FuIGJlIGNsZWFybHkgZGV0ZXJtaW5lZC4KLQkgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB3aG9zZSB0eXBlIHRvIGluZmVyLCB1c3VhbGx5IGEKLQkgKiAiLmphdmEiIG9yICIuY2xhc3MiIGZpbGUuIEZvciAiLmphdmEiIGZpbGVzLCB0aGlzCi0JICogbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBwcmltYXJ5IHR5cGUuCi0JICogQHJldHVybiBUaGUgaW5mZXJyZWQgSkRUIEphdmEgdHlwZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgZ2l2ZW4gZmlsZSBjb3VsZCBub3QKLQkgKiBtYXBwZWQgdG8gYSBKRFQgSVR5cGUuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVR5cGUgYXNUeXBlICggSUZpbGUgZmlsZSApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSVR5cGUgdHlwZSA9IG51bGw7Ci0JCUlKYXZhRWxlbWVudCBqYXZhRWxlbWVudCA9IEphdmFDb3JlLmNyZWF0ZShmaWxlKTsKLQkJaWYgKGphdmFFbGVtZW50IGluc3RhbmNlb2YgSUNvbXBpbGF0aW9uVW5pdCkKLQkJewotCQkJSUNvbXBpbGF0aW9uVW5pdCBjb21waWxhdGlvblVuaXQgPSAoSUNvbXBpbGF0aW9uVW5pdClqYXZhRWxlbWVudDsKLQkJCXR5cGUgPSBjb21waWxhdGlvblVuaXQuZmluZFByaW1hcnlUeXBlKCk7Ci0JCX0KLQkJZWxzZSBpZiAoamF2YUVsZW1lbnQgaW5zdGFuY2VvZiBJQ2xhc3NGaWxlKQotCQl7Ci0JCQlJQ2xhc3NGaWxlIGNsYXNzRmlsZSA9IChJQ2xhc3NGaWxlKWphdmFFbGVtZW50OwotCQkJdHlwZSA9IGNsYXNzRmlsZS5nZXRUeXBlKCk7Ci0JCX0KLQkJcmV0dXJuIHR5cGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KQVhSUENXZWJTZXJ2aWNlUnVsZUVuZ2luZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KQVhSUENXZWJTZXJ2aWNlUnVsZUVuZ2luZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzU5N2YwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkFYUlBDV2ViU2VydmljZVJ1bGVFbmdpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ5NDExIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIFRoaXMgZW5naW5lIG5hdmlnYXRlZCBKRFQgY2xhc3NlcyBhY2NvcmRpbmcgdG8gYSBKQVgtUlBDCi0gKiBpbnRlcnByZXRhdGlvbi4gVGhlIHJvb3QgY2xhc3MgaXMgY29uc2lkZXJlZCB0byBiZSBhCi0gKiBjYW5kaWRhdGUgSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLCBhbmQgYW55IG5vbi1zdGFuZGFyZAotICogb3Igbm9uLXByaW1pdGl2ZSB0eXBlcyB1c2VkIGJ5IHRoZSBtZXRob2RzIG9mIHRoZSBzZXJ2aWNlCi0gKiBjbGFzcyBhcmUgY29uc2lkZXJlZCB0byBiZSBjYW5kaWRhdGVzIGZvciBKQVgtUlBDIHZhbHVlCi0gKiB0eXBlIGNsYXNzZXMuIAotICovCi1wdWJsaWMgY2xhc3MgSkFYUlBDV2ViU2VydmljZVJ1bGVFbmdpbmUgaW1wbGVtZW50cyBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lCi17Ci0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBKQVgtUlBDIGFuYWx5c2lzIGVuZ2luZSB3aXRoIHRoZSBnaXZlbgotCSAqIHByb2dyZXNzIG1vbml0b3IuCi0JICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlCi0JICogZW5naW5lIHRvIHVzZSwgb3IgbnVsbCBpZiBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqLwotCXB1YmxpYyBKQVhSUENXZWJTZXJ2aWNlUnVsZUVuZ2luZSAoIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yICkKLQl7Ci0JCXByb2dyZXNzTW9uaXRvcl8gPSBwcm9ncmVzc01vbml0b3I7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lI2FuYWx5emUob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QsIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlLCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlU2V0LCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBhbmFseXplICggSVByb2plY3QgcHJvamVjdCwgSVR5cGUgcm9vdENsYXNzLCBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgKQotCXsKLQkJdmlzaXRlZF8gPSBuZXcgSGFzaFNldCgpOwotCQlwZWFudXRUcmFpbF8gPSBuZXcgU3RhY2soKTsJCQotCQlyZXNvbHZlcl8gPSBuZXcgSkRUUmVzb2x2ZXIocHJvamVjdCxwcm9ncmVzc01vbml0b3JfKTsKLQkJSVN0YXR1cyBzdGF0dXMgPSBudWxsOwotCQlydWxlcy5pbml0KHRoaXMpOwotCQl0cnkKLQkJewotCQkJYW5hbHl6ZVNlcnZpY2VDbGFzcyhyb290Q2xhc3MscnVsZXMpOwotCQkJU3RyaW5nIGluQ2FzZU9mRmFpbHVyZU1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9OT1RfQ09NUExJQU5ULHJvb3RDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7Ci0JCQlzdGF0dXMgPSBydWxlcy5nZXRSZXN1bHRzKGluQ2FzZU9mRmFpbHVyZU1lc3NhZ2UpOwotCQl9Ci0JCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJewotCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIkludGVybmFsIEVycm9yIixlKTsKLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYW5hbHl6ZVNlcnZpY2VDbGFzcyAoIElUeXBlIHR5cGUsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJcnVsZXMudmlzaXRDbGFzcyh0eXBlLHBlYW51dFRyYWlsXyk7Ci0JCXZpc2l0ZWRfLmFkZCh0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKTsKLQkJcHVzaCh0eXBlKTsKLQkJdHJ5Ci0JCXsKLQkJCUlUeXBlW10gc3VwZXJDbGFzc2VzID0gcmVzb2x2ZXJfLmdldFN1cGVyQ2xhc3Nlcyh0eXBlKTsKLQkJCUlNZXRob2RbXSBtZXRob2RzID0gcmVzb2x2ZXJfLmdldFB1YmxpY01ldGhvZHModHlwZSxzdXBlckNsYXNzZXMpOwotCQkJZm9yIChpbnQgbT0wOyBtPG1ldGhvZHMubGVuZ3RoOyBtKyspCi0JCQl7Ci0JCQkJYW5hbHl6ZU1ldGhvZChtZXRob2RzW21dLHJ1bGVzKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCXBvcCgpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhbmFseXplTWV0aG9kICggSU1ldGhvZCBtZXRob2QsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJcnVsZXMudmlzaXRNZXRob2QobWV0aG9kLHBlYW51dFRyYWlsXyk7Ci0JCXB1c2gobWV0aG9kKTsKLQkJdHJ5Ci0JCXsKLQkJCUlUeXBlIHJldHVyblR5cGUgPSByZXNvbHZlcl8uZ2V0UmV0dXJuVHlwZShtZXRob2QpOwotCQkJYW5hbHl6ZURhdGFUeXBlKHJldHVyblR5cGUscnVsZXMpOwotCQkJSVR5cGVbXSBwYXJhbWV0ZXJUeXBlcyA9IHJlc29sdmVyXy5nZXRQYXJhbWV0ZXJUeXBlcyhtZXRob2QpOwotCQkJZm9yIChpbnQgcD0wOyBwPHBhcmFtZXRlclR5cGVzLmxlbmd0aDsgcCsrKQotCQkJewotCQkJCWFuYWx5emVEYXRhVHlwZShwYXJhbWV0ZXJUeXBlc1twXSxydWxlcyk7Ci0JCQl9Ci0JCQlJVHlwZVtdIGV4Y2VwdGlvblR5cGVzID0gcmVzb2x2ZXJfLmdldEV4Y2VwdGlvblR5cGVzKG1ldGhvZCk7Ci0JCQlmb3IgKGludCBlPTA7IGU8ZXhjZXB0aW9uVHlwZXMubGVuZ3RoOyBlKyspCi0JCQl7Ci0JCQkJYW5hbHl6ZUV4Y2VwdGlvblR5cGUoZXhjZXB0aW9uVHlwZXNbZV0scnVsZXMpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJcG9wKCk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVEYXRhVHlwZSAoIElUeXBlIHR5cGUsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJaWYgKHR5cGUgIT0gbnVsbCAmJiAhcmVzb2x2ZXJfLmlzU3RhbmRhcmRUeXBlKHR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpICYmICF2aXNpdGVkXy5jb250YWlucyh0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKSkKLQkJewotCQkJcnVsZXMudmlzaXRDbGFzcyh0eXBlLHBlYW51dFRyYWlsXyk7CQkJCi0JCQl2aXNpdGVkXy5hZGQodHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7Ci0JCQlwdXNoKHR5cGUpOwotCQkJdHJ5Ci0JCQl7CQotCQkJCUlUeXBlW10gc3VwZXJDbGFzc2VzID0gcmVzb2x2ZXJfLmdldFN1cGVyQ2xhc3Nlcyh0eXBlKTsKLQkJCQlJRmllbGRbXSBmaWVsZHMgPSByZXNvbHZlcl8uZ2V0UHVibGljRmllbGRzKHR5cGUsc3VwZXJDbGFzc2VzKTsKLQkJCQlmb3IgKGludCBmPTA7IGY8ZmllbGRzLmxlbmd0aDsgZisrKQotCQkJCXsKLQkJCQkJYW5hbHl6ZUZpZWxkKGZpZWxkc1tmXSxydWxlcyk7Ci0JCQkJfQotCQkJCUlKYXZhQmVhblByb3BlcnR5W10gcHJvcGVydGllcyA9IHJlc29sdmVyXy5nZXRQdWJsaWNQcm9wZXJ0aWVzKHR5cGUsc3VwZXJDbGFzc2VzKTsKLQkJCQlmb3IgKGludCBwPTA7IHA8cHJvcGVydGllcy5sZW5ndGg7IHArKykKLQkJCQl7Ci0JCQkJCWFuYWx5emVQcm9wZXJ0eShwcm9wZXJ0aWVzW3BdLHJ1bGVzKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5Ci0JCQl7Ci0JCQkJcG9wKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVGaWVsZCAoIElGaWVsZCBmaWVsZCwgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlpZiAoZmllbGQgIT0gbnVsbCkKLQkJewotCQkJcnVsZXMudmlzaXRGaWVsZChmaWVsZCxwZWFudXRUcmFpbF8pOwotCQkJcHVzaChmaWVsZCk7Ci0JCQl0cnkKLQkJCXsKLQkJCQkvL1RPRE86IEdldCBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZmllbGQgdHlwZQotCQkJCS8vYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIElUeXBlCi0JCQkJLy9mb3IgaXQgYW5kIGFuYWx5emUgaXQuCi0JCQkJSVR5cGUgdHlwZSA9IHJlc29sdmVyXy5nZXRGaWVsZFR5cGUoZmllbGQpOwotCQkJCWFuYWx5emVEYXRhVHlwZSh0eXBlLHJ1bGVzKTsKLQkJCX0KLQkJCWZpbmFsbHkKLQkJCXsKLQkJCQlwb3AoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgYW5hbHl6ZVByb3BlcnR5ICggSUphdmFCZWFuUHJvcGVydHkgcHJvcGVydHksIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJaWYgKHByb3BlcnR5ICE9IG51bGwpCi0JCXsKLQkJCXJ1bGVzLnZpc2l0UHJvcGVydHkocHJvcGVydHkscGVhbnV0VHJhaWxfKTsKLQkJCXB1c2gocHJvcGVydHkpOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJSVR5cGUgdHlwZSA9IHJlc29sdmVyXy5nZXRQcm9wZXJ0eVR5cGUocHJvcGVydHkpOwotCQkJCWFuYWx5emVEYXRhVHlwZSh0eXBlLHJ1bGVzKTsKLQkJCX0KLQkJCWZpbmFsbHkKLQkJCXsKLQkJCQlwb3AoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBhbmFseXplRXhjZXB0aW9uVHlwZSAoIElUeXBlIHR5cGUsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJaWYgKHR5cGUgIT0gbnVsbCAmJiAhcmVzb2x2ZXJfLmlzU3RhbmRhcmRUeXBlKHR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpICYmICF2aXNpdGVkXy5jb250YWlucyh0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKSkKLQkJewotCQkJcnVsZXMudmlzaXRFeGNlcHRpb24odHlwZSxwZWFudXRUcmFpbF8pOwotCQkJdmlzaXRlZF8uYWRkKHR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpOwotCQkJcHVzaCh0eXBlKTsKLQkJCXRyeQotCQkJewotCQkJCS8vIFdlIHRydXN0IGphdmEubGFuZy5FeGNlcHRpb24vVGhyb3dhYmxlIGFzIHN1cGVyY2xhc3NlcwotCQkJCS8vIGZvciBzZXJ2aWNlIHNwZWNpZmljIGV4Y2VwdGlvbiBjbGFzc2VzLCB0aGVyZWZvcmUgd2UgZG8KLQkJCQkvLyBub3QgdHJ5IHRvIGFuYWx5emUgdGhlaXIgcHJvcGVydGllcyAoc29tZSBvZiB3aGljaCB3b3VsZAotCQkJCS8vIG90aGVyd2lzZSB2aW9sYXRlIEpBWC1SUEMncyBydWxlcyBhbnl3YXlzKS4KLQkJCQlJVHlwZVtdIHN1cGVyQ2xhc3NlcyA9IHJlc29sdmVyXy5nZXRTdXBlckNsYXNzZXModHlwZSwiamF2YS5sYW5nLkV4Y2VwdGlvbiIpOwotCQkJCUlKYXZhQmVhblByb3BlcnR5W10gcHJvcGVydGllcyA9IHJlc29sdmVyXy5nZXRQdWJsaWNQcm9wZXJ0aWVzKHR5cGUsc3VwZXJDbGFzc2VzKTsKLQkJCQlmb3IgKGludCBwPTA7IHA8cHJvcGVydGllcy5sZW5ndGg7IHArKykKLQkJCQl7Ci0JCQkJCWFuYWx5emVQcm9wZXJ0eShwcm9wZXJ0aWVzW3BdLHJ1bGVzKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5Ci0JCQl7Ci0JCQkJcG9wKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSNnZXRKRFRSZXNvbHZlcigpCi0JICovCi0JcHVibGljIEpEVFJlc29sdmVyIGdldEpEVFJlc29sdmVyICgpCi0JewotCQlyZXR1cm4gcmVzb2x2ZXJfOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSNnZXRQcm9ncmVzc01vbml0b3IoKQotCSAqLwotCXB1YmxpYyBJUHJvZ3Jlc3NNb25pdG9yIGdldFByb2dyZXNzTW9uaXRvciAoKQotCXsKLQkJcmV0dXJuIHByb2dyZXNzTW9uaXRvcl87Ci0JfQotCQotCS8qCi0JICogUHVzaGVzIGEgcGVhbnV0IG9udG8gdGhlIHBlYW51dCB0cmFpbC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgcHVzaCAoIE9iamVjdCBwZWFudXQgKQotCXsKLQkJcGVhbnV0VHJhaWxfLnB1c2gocGVhbnV0KTsKLQl9Ci0JCi0JLyoKLQkgKiBQb3BzIGEgcGVhbnV0IG9mZiB0aGUgcGVhbnV0IHRyYWlsLiAKLQkgKi8KLQlwcml2YXRlIHZvaWQgcG9wICgpCi0JewotCQlwZWFudXRUcmFpbF8ucG9wKCk7Ci0JfQotCQotCS8qCi0JICogVGhlIEpEVFJlc29sdmVyIHVzZWQgYnkgdGhpcyBhbmFseXplci4KLQkgKi8KLQlwcml2YXRlIEpEVFJlc29sdmVyIHJlc29sdmVyXzsKLQkKLQkvKgotCSAqIFRoZSBwcm9ncmVzcyBtb25pdG9yIHVzZWQgYnkgdGhpcyBhbmFseXplci4gCi0JICovCi0JcHJpdmF0ZSBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcl87Ci0JCi0JLyoKLQkgKiBUaGlzIHNldCBrZWVwcyB0cmFjayBvZiB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWVzIG9mCi0JICogY2xhc3NlcyB3ZSBoYXZlIHZpc2l0ZWQgc28gdGhhdCB3ZSBkb24ndCB2aXNpdCB0aGUgc2FtZQotCSAqIHNlcnZpY2UgY2xhc3MsIHZhbHVlIHR5cGUgb3IgZXhjZXB0aW9uIGNsYXNzIG1vcmUgdGhhbiBvbmNlLgotCSAqLwotCXByaXZhdGUgU2V0IHZpc2l0ZWRfOwotCi0JLyoKLQkgKiBUaGlzIHN0YWNrIGtlZXBzIGEgdHJhaWwgb2YgSkRUIG9iamVjdHMgYmFjayB0byB0aGUKLQkgKiBzZXJ2aWNlIGNsYXNzIHdlIGJlZ2FuIHdpdGguIFRoaXMgY2FuIGJlIHVzZWZ1bCB0bwotCSAqIHZpc2l0b3JzIHRoYXQgbmVlZCB0byBpbnNwZWN0IHRoZSBKRFQgZWxlbWVudHMgdGhhdAotCSAqIGVuY2xvc2UgdGhlIGN1cnJlbnRseSB2aXNpdGVkIGVsZW1lbnQuCi0JICovCi0JcHJpdmF0ZSBTdGFjayBwZWFudXRUcmFpbF87Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pEVFJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pEVFJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYzU3NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KRFRSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDk0MTEgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDcwMTAyICAgMTk2MzcxIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5GbGFnczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlSGllcmFyY2h5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5TaWduYXR1cmU7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleQotICogQSBKRFRSZXNvbHZlciBwcm92aWRlcyBzZXZlcmFsIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yCi0gKiBuYXZpZ2F0aW5nIHJlZmVyZW5jZXMgYmV0d2VlbiBKYXZhIGNsYXNzZXMsIG1ldGhvZHMsCi0gKiBmaWVsZHMgYW5kIHByb3BlcnRpZXMuIEEgSkRUUmVzb2x2ZXIgaXMgY29uc3RydWN0ZWQKLSAqIGZvciBhIEphdmEgcHJvamVjdCB3aG9zZSBlZmZlY3RpdmUgY2xhc3NwYXRoIHdpbGwKLSAqIGdvdmVybiB0aGUgc2NvcGUgb2Ygc2VhcmNoIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGJ5IHRoZQotICogSkRUUmVzb2x2ZXIgd2hlbmV2ZXIgaXQgbmVlZHMgdG8gY29udmVydCBhIHNpZ25hdHVyZQotICogaW50byBhIEpEVCBJVHlwZSBvYmplY3QuCi0gKi8KLXB1YmxpYyBjbGFzcyBKRFRSZXNvbHZlcgotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgSkRUUmVzb2x2ZXIgZm9yIHRoZSBnaXZlbiBwcm9qZWN0LgotCSAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IHByb3ZpZGluZyB0aGUgY29udGV4dAotCSAqIEBwYXJhbSBtb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGlzIHJlc29sdmVyCi0JICogdG8gdXNlLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogd2l0aGluIHdoaWNoIHRoaXMgcmVzb2x2ZXIgd2lsbCBzZWFyY2ggZm9yIGNsYXNzZXMuCi0JICovCi0JcHVibGljIEpEVFJlc29sdmVyICggSVByb2plY3QgcHJvamVjdCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCWphdmFQcm9qZWN0XyA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJbW9uaXRvcl8gPSBtb25pdG9yOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIEpEVCBJVHlwZSBpcyBhbiBpbnRlcmZhY2UuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIEpEVCBJVHlwZSBpcyBhbiBpbnRlcmZhY2UuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBtb2RlbCBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJbnRlcmZhY2UgKCBJVHlwZSBqZHRUeXBlICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gamR0VHlwZS5pc0ludGVyZmFjZSgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIEpEVCBJVHlwZSBpcyBhbiBhYnN0cmFjdCBjbGFzcy4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gSkRUIElUeXBlIGlzIGFuIGFic3RyYWN0IGNsYXNzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgbW9kZWwgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWJzdHJhY3QgKCBJVHlwZSBqZHRUeXBlICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gRmxhZ3MuaXNBYnN0cmFjdChqZHRUeXBlLmdldEZsYWdzKCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgaW5zdGFuY2VzIG9mIHRoZSBnaXZlbiBKRFQgSVR5cGUKLQkgKiBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBhIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yLiBUaGUgY2xhc3MKLQkgKiBtdXN0IGhhdmUgYW4gZXhwbGljaXQgcHVibGljIGRlZmF1bHQgY29uc3RydWN0b3IsIG9yIGhhdmUgbm8KLQkgKiBleHBsaWNpdCBjb25zdHJ1Y3RvcnMgYXQgYWxsIHRvIG1lZXQgdGhpcyBjcml0ZXJpYS4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiBpbnN0YW5jZXMgb2YgdGhlIHR5cGUgYXJlCi0JICogcHVibGljIGRlZmF1bHQgY29uc3RydWN0YWJsZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIG1vZGVsIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0NvbnN0cnVjdGFibGUgKCBJVHlwZSBqZHRUeXBlICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJTWV0aG9kW10gbWV0aG9kcyA9IGpkdFR5cGUuZ2V0TWV0aG9kcygpOwotCQlpbnQgbnVtYmVyT2ZDb25zdHJ1Y3RvcnMgPSAwOwotCQlmb3IgKGludCBtPTA7IG08bWV0aG9kcy5sZW5ndGg7IG0rKykKLQkJewotCQkJaWYgKG1ldGhvZHNbbV0uaXNDb25zdHJ1Y3RvcigpKQotCQkJewotCQkJCW51bWJlck9mQ29uc3RydWN0b3JzKys7Ci0JCQkJaWYgKG1ldGhvZHNbbV0uZ2V0TnVtYmVyT2ZQYXJhbWV0ZXJzKCkgPT0gMCAmJiBGbGFncy5pc1B1YmxpYyhtZXRob2RzW21dLmdldEZsYWdzKCkpKQotCQkJCXsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBudW1iZXJPZkNvbnN0cnVjdG9ycyA9PSAwOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIGZ1bGx5IHF1YWxpZmllZAotCSAqIHR5cGUgbmFtZSBpcyBhIHR5cGUgZnJvbSB0aGUgc3RhbmRhcmQgSkRLLCB0aGF0IGlzLAotCSAqIGlmIHRoZSBnaXZlbiB0eXBlIG5hbWUgYmVsb25ncyB1bmRlciB0aGUgImphdmEiIG9yCi0JICogImphdmF4IiBwYWNrYWdlcy4KLQkgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHR5cGUgdG8gY2hlY2suCi0JICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSB0eXBlIGlzIGEgbm9uLXByaW1pdGl2ZSwKLQkgKiBKYXZhIHN0YW5kYXJkIHR5cGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNTdGFuZGFyZFR5cGUgKCBTdHJpbmcgdHlwZU5hbWUgKQotCXsKLQkJcmV0dXJuIHR5cGVOYW1lLnN0YXJ0c1dpdGgoImphdmEuIikgfHwgdHlwZU5hbWUuc3RhcnRzV2l0aCgiamF2YXguIik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gdHlwZSBuYW1lIGlzIGEKLQkgKiBKYXZhIHByaW1pdGl2ZSB0eXBlLgotCSAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIHR5cGUgaXMgYSBKYXZhIHByaW1pdGl2ZSB0eXBlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzUHJpbWl0aXZlVHlwZSAoIFN0cmluZyB0eXBlTmFtZSApCi0JewotCQlmb3IgKGludCBpPTA7IGk8cHJpbWl0aXZlVHlwZXNfLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAocHJpbWl0aXZlVHlwZXNfW2ldLmVxdWFscyh0eXBlTmFtZSkpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIGZ1bGx5IHF1YWxpZmllZAotCSAqIHR5cGUgbmFtZSBpcyBhIEphdmEgd3JhcHBlciB0eXBlLgotCSAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIHR5cGUgaXMgYSBKYXZhIHdyYXBwZXIgdHlwZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1dyYXBwZXJUeXBlICggU3RyaW5nIHR5cGVOYW1lICkKLQl7Ci0JCWZvciAoaW50IGk9MDsgaTx3cmFwcGVyVHlwZXNfLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAod3JhcHBlclR5cGVzX1tpXS5lcXVhbHModHlwZU5hbWUpKQotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gZnVsbHkgcXVhbGlmaWVkCi0JICogdHlwZSBuYW1lIGlzIGEgSmF2YSBwcmltaXRpdmUgb3Igc3RhbmRhcmQgdHlwZSBzdXBwb3J0ZWQKLQkgKiBieSB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLgotCSAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIHR5cGUgaXMgYSBKYXZhIHdyYXBwZXIgdHlwZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0pBWFJQQ1N0YW5kYXJkVHlwZSAoIFN0cmluZyB0eXBlTmFtZSApCi0JewotCQlmb3IgKGludCBpPTA7IGk8amF4cnBjVHlwZXNfLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoamF4cnBjVHlwZXNfW2ldLmVxdWFscyh0eXBlTmFtZSkpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJaWYgKGlzV3JhcHBlclR5cGUodHlwZU5hbWUpICYmICEiamF2YS5sYW5nLkNoYXJhY3RlciIuZXF1YWxzKHR5cGVOYW1lKSkKLQkJewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKGlzUHJpbWl0aXZlVHlwZSh0eXBlTmFtZSkgJiYgISJjaGFyIi5lcXVhbHModHlwZU5hbWUpKQotCQl7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBKRFQgSVR5cGUgb2JqZWN0cwotCSAqIGZvciB0aGUgcHVibGljIGZpZWxkcyBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIHR5cGUKLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEBwYXJhbSBqZHRTdXBlclR5cGVzIEFueSBzdXBlcnR5cGVzIHRvIGFuYWx5emUsCi0JICogb3IgbnVsbCB0byBhbmFseXplIG9ubHkgdGhlIDxjb2RlPmpkdFR5cGU8L2NvZGU+LgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHB1YmxpYyBmaWVsZCB0eXBlcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGVzIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJRmllbGRbXSBnZXRQdWJsaWNGaWVsZHMgKCBJVHlwZSBqZHRUeXBlLCBJVHlwZVtdIGpkdFN1cGVyQ2xhc3NlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJTGlzdCBmaWVsZHNMaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLQkJaGFydmVzdFB1YmxpY0ZpZWxkcyhqZHRUeXBlLGZpZWxkc0xpc3QpOwotCQlpZiAoamR0U3VwZXJDbGFzc2VzICE9IG51bGwpCi0JCXsKLQkJCWZvciAoaW50IHQ9MDsgdDxqZHRTdXBlckNsYXNzZXMubGVuZ3RoOyB0KyspCi0JCQl7Ci0JCQkJaGFydmVzdFB1YmxpY0ZpZWxkcyhqZHRTdXBlckNsYXNzZXNbdF0sZmllbGRzTGlzdCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChJRmllbGRbXSlmaWVsZHNMaXN0LnRvQXJyYXkobmV3IElGaWVsZFswXSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIEpEVCBJTWV0aG9kIG9iamVjdHMKLQkgKiBmb3IgdGhlIHB1YmxpYyBtZXRob2RzIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gdHlwZS4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEBwYXJhbSBqZHRTdXBlclR5cGVzIEFueSBzdXBlcnR5cGVzIHRvIGFuYWx5emUsCi0JICogb3IgbnVsbCB0byBhbmFseXplIG9ubHkgdGhlIDxjb2RlPmpkdFR5cGU8L2NvZGU+LgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHB1YmxpYyBtZXRob2RzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZXMgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElNZXRob2RbXSBnZXRQdWJsaWNNZXRob2RzICggSVR5cGUgamR0VHlwZSwgSVR5cGVbXSBqZHRTdXBlckNsYXNzZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUxpc3QgbWV0aG9kc0xpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQloYXJ2ZXN0UHVibGljTWV0aG9kcyhqZHRUeXBlLG1ldGhvZHNMaXN0KTsKLQkJaWYgKGpkdFN1cGVyQ2xhc3NlcyAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKGludCB0PTA7IHQ8amR0U3VwZXJDbGFzc2VzLmxlbmd0aDsgdCsrKQotCQkJewotCQkJCWhhcnZlc3RQdWJsaWNNZXRob2RzKGpkdFN1cGVyQ2xhc3Nlc1t0XSxtZXRob2RzTGlzdCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChJTWV0aG9kW10pbWV0aG9kc0xpc3QudG9BcnJheShuZXcgSU1ldGhvZFswXSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIEpEVCBJVHlwZSBvYmplY3RzCi0JICogZm9yIHRoZSBwdWJsaWMgcHJvcGVydGllcyAoZ2V0dGVycyBhbmQvb3Igc2V0dGVycykKLQkgKiBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIHR5cGUuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gamR0U3VwZXJUeXBlcyBBbnkgc3VwZXJ0eXBlcyB0byBhbmFseXplLAotCSAqIG9yIG51bGwgdG8gYW5hbHl6ZSBvbmx5IHRoZSA8Y29kZT5qZHRUeXBlPC9jb2RlPi4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBwdWJsaWMgcHJvcGVydHkgdHlwZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlcyB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSUphdmFCZWFuUHJvcGVydHlbXSBnZXRQdWJsaWNQcm9wZXJ0aWVzICggSVR5cGUgamR0VHlwZSwgSVR5cGVbXSBqZHRTdXBlckNsYXNzZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlNZXRob2RbXSBtZXRob2RzID0gZ2V0UHVibGljTWV0aG9kcyhqZHRUeXBlLGpkdFN1cGVyQ2xhc3Nlcyk7Ci0JCU1hcCBwcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZm9yIChpbnQgbT0wOyBtPG1ldGhvZHMubGVuZ3RoOyBtKyspCi0JCXsKLQkJCVN0cmluZyBuYW1lID0gZ2V0R2V0dGVyTmFtZShtZXRob2RzW21dKTsKLQkJCWlmIChuYW1lICE9IG51bGwpCi0JCQl7Ci0JCQkJSmF2YUJlYW5Qcm9wZXJ0eSBwcm9wZXJ0eSA9IChKYXZhQmVhblByb3BlcnR5KXByb3BlcnRpZXMuZ2V0KG5hbWUpOwotCQkJCWlmIChwcm9wZXJ0eSA9PSBudWxsKQotCQkJCXsKLQkJCQkJcHJvcGVydHkgPSBuZXcgSmF2YUJlYW5Qcm9wZXJ0eSgpOwotCQkJCQlwcm9wZXJ0eS5zZXROYW1lKG5hbWUpOwotCQkJCQlwcm9wZXJ0aWVzLnB1dChuYW1lLHByb3BlcnR5KTsKLQkJCQl9Ci0JCQkJcHJvcGVydHkuc2V0R2V0dGVyKG1ldGhvZHNbbV0pOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCW5hbWUgPSBnZXRTZXR0ZXJOYW1lKG1ldGhvZHNbbV0pOwotCQkJCWlmIChuYW1lICE9IG51bGwpCi0JCQkJewotCQkJCQlKYXZhQmVhblByb3BlcnR5IHByb3BlcnR5ID0gKEphdmFCZWFuUHJvcGVydHkpcHJvcGVydGllcy5nZXQobmFtZSk7Ci0JCQkJCWlmIChwcm9wZXJ0eSA9PSBudWxsKQotCQkJCQl7Ci0JCQkJCQlwcm9wZXJ0eSA9IG5ldyBKYXZhQmVhblByb3BlcnR5KCk7Ci0JCQkJCQlwcm9wZXJ0eS5zZXROYW1lKG5hbWUpOwotCQkJCQkJcHJvcGVydGllcy5wdXQobmFtZSxwcm9wZXJ0eSk7Ci0JCQkJCX0KLQkJCQkJcHJvcGVydHkuc2V0U2V0dGVyKG1ldGhvZHNbbV0pOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gKElKYXZhQmVhblByb3BlcnR5W10pcHJvcGVydGllcy52YWx1ZXMoKS50b0FycmF5KG5ldyBKYXZhQmVhblByb3BlcnR5WzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElUeXBlIG9iamVjdCBmb3IgdGhlIGdpdmVuIGZpZWxkLgotCSAqIEBwYXJhbSBqZHRGaWVsZCBUaGUgZmllbGQgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRoZSBmaWVsZCB0eXBlLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gZmllbGQgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElUeXBlIGdldEZpZWxkVHlwZSAoIElGaWVsZCBqZHRGaWVsZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRGaWVsZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmcgc2lnbmF0dXJlID0gamR0RmllbGQuZ2V0VHlwZVNpZ25hdHVyZSgpOwotCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlKTsKLQkJcmV0dXJuIGZpbmRUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdHlwZSBuYW1lIGZvciB0aGUgZ2l2ZW4gZmllbGQuCi0JICogQHBhcmFtIGpkdEZpZWxkIFRoZSBmaWVsZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVGhlIGZpZWxkIHR5cGUgbmFtZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIGZpZWxkIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RmllbGRUeXBlTmFtZSAoIElGaWVsZCBqZHRGaWVsZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRGaWVsZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmcgc2lnbmF0dXJlID0gamR0RmllbGQuZ2V0VHlwZVNpZ25hdHVyZSgpOwotCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlKTsKLQkJcmV0dXJuIHJlc29sdmVUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElUeXBlIG9iamVjdCBmb3IgdGhlIGdpdmVuIGJlYW4gcHJvcGVydHkuCi0JICogQHBhcmFtIGphdmFCZWFuUHJvcGVydHkgVGhlIGJlYW4gcHJvcGVydHkgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSB0eXBlLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gYmVhbiBwcm9wZXJ0eSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSVR5cGUgZ2V0UHJvcGVydHlUeXBlICggSUphdmFCZWFuUHJvcGVydHkgamF2YUJlYW5Qcm9wZXJ0eSApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSU1ldGhvZCBtZXRob2QgPSBqYXZhQmVhblByb3BlcnR5LmdldEdldHRlcigpOwotCQlpZiAobWV0aG9kICE9IG51bGwpCi0JCXsKLQkJCXJldHVybiBnZXRSZXR1cm5UeXBlKG1ldGhvZCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQltZXRob2QgPSBqYXZhQmVhblByb3BlcnR5LmdldFNldHRlcigpOwotCQkJaWYgKG1ldGhvZCAhPSBudWxsKQotCQkJewotCQkJCUlUeXBlW10gcGFyYW1ldGVycyA9IGdldFBhcmFtZXRlclR5cGVzKG1ldGhvZCk7Ci0JCQkJaWYgKHBhcmFtZXRlcnMubGVuZ3RoID4gMCkKLQkJCQl7Ci0JCQkJCS8vCi0JCQkJCS8vIEl0J3MgdGhlIGxhc3QgcGFyYW1ldGVyJ3MgdHlwZSB3ZSB3YW50LAotCQkJCQkvLyBmb3IgaW5kZXhlZCBvciBub24taW5kZXhlZCBzZXR0ZXJzLgotCQkJCQkvLwotCQkJCQlyZXR1cm4gcGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aC0xXTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIHR5cGUgbmFtZSBmb3IgdGhlIGdpdmVuIGJlYW4gcHJvcGVydHkuCi0JICogQHBhcmFtIGphdmFCZWFuUHJvcGVydHkgVGhlIGJlYW4gcHJvcGVydHkgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSB0eXBlIG5hbWUuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBiZWFuIHByb3BlcnR5IHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUeXBlTmFtZSAoIElKYXZhQmVhblByb3BlcnR5IGphdmFCZWFuUHJvcGVydHkgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlNZXRob2QgbWV0aG9kID0gamF2YUJlYW5Qcm9wZXJ0eS5nZXRHZXR0ZXIoKTsKLQkJaWYgKG1ldGhvZCAhPSBudWxsKQotCQl7Ci0JCQlyZXR1cm4gZ2V0UmV0dXJuVHlwZU5hbWUobWV0aG9kKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCW1ldGhvZCA9IGphdmFCZWFuUHJvcGVydHkuZ2V0U2V0dGVyKCk7Ci0JCQlpZiAobWV0aG9kICE9IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nW10gcGFyYW1ldGVyVHlwZU5hbWVzID0gZ2V0UGFyYW1ldGVyVHlwZU5hbWVzKG1ldGhvZCk7Ci0JCQkJaWYgKHBhcmFtZXRlclR5cGVOYW1lcy5sZW5ndGggPiAwKQotCQkJCXsKLQkJCQkJcmV0dXJuIHBhcmFtZXRlclR5cGVOYW1lc1swXTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJVHlwZSBvYmplY3QgZm9yIHRoZSByZXR1cm4gdHlwZQotCSAqIG9mIHRoZSBnaXZlbiBtZXRob2QsIG9yIG51bGwgaWYgdGhlIG1ldGhvZCBpcyB2b2lkLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVGhlIG1ldGhvZCByZXR1cm4gdHlwZSwgb3IgbnVsbCBpZiBub25lLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gbWV0aG9kIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJVHlwZSBnZXRSZXR1cm5UeXBlICggSU1ldGhvZCBqZHRNZXRob2QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlKYXZhRWxlbWVudCBlbGVtID0gamR0TWV0aG9kLmdldEFuY2VzdG9yKElKYXZhRWxlbWVudC5UWVBFKTsKLQkJSVR5cGUgYW5jZXN0b3IgPSBlbGVtIGluc3RhbmNlb2YgSVR5cGUgPyAoSVR5cGUpZWxlbSA6IG51bGw7Ci0JCVN0cmluZyBzaWduYXR1cmUgPSBqZHRNZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlKTsKLQkJcmV0dXJuIGZpbmRUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdHlwZSBuYW1lIGZvciB0aGUgcmV0dXJuIHR5cGUKLQkgKiBvZiB0aGUgZ2l2ZW4gbWV0aG9kLCBvciBudWxsIGlmIHRoZSBtZXRob2QgaXMgdm9pZC4KLQkgKiBAcGFyYW0gamR0TWV0aG9kIFRoZSBtZXRob2QgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRoZSBtZXRob2QgcmV0dXJuIHR5cGUgbmFtZSwgb3IgbnVsbCBpZiBub25lLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gbWV0aG9kIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UmV0dXJuVHlwZU5hbWUgKCBJTWV0aG9kIGpkdE1ldGhvZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRNZXRob2QuZ2V0QW5jZXN0b3IoSUphdmFFbGVtZW50LlRZUEUpOwotCQlJVHlwZSBhbmNlc3RvciA9IGVsZW0gaW5zdGFuY2VvZiBJVHlwZSA/IChJVHlwZSllbGVtIDogbnVsbDsKLQkJU3RyaW5nIHNpZ25hdHVyZSA9IGpkdE1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7Ci0JCVN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShzaWduYXR1cmUpOwotCQlyZXR1cm4gcmVzb2x2ZVR5cGUodHlwZU5hbWUsYW5jZXN0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBKRFQgSVR5cGUgb2JqZWN0cwotCSAqIGZvciB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZ2l2ZW4gbWV0aG9kLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHBhcmFtZXRlciB0eXBlcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIG1ldGhvZCB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSVR5cGVbXSBnZXRQYXJhbWV0ZXJUeXBlcyAoIElNZXRob2QgamR0TWV0aG9kICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdE1ldGhvZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmdbXSBzaWduYXR1cmVzID0gamR0TWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCUlUeXBlW10gdHlwZXMgPSBuZXcgSVR5cGVbc2lnbmF0dXJlcy5sZW5ndGhdOwotCQlmb3IgKGludCBzPTA7IHM8c2lnbmF0dXJlcy5sZW5ndGg7IHMrKykKLQkJewotCQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZXNbc10pOwotCQkJdHlwZXNbc10gPSBmaW5kVHlwZSh0eXBlTmFtZSxhbmNlc3Rvcik7Ci0JCX0KLQkJcmV0dXJuIHR5cGVzOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSB0eXBlIG5hbWVzCi0JICogZm9yIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBnaXZlbiBtZXRob2QuCi0JICogQHBhcmFtIGpkdE1ldGhvZCBUaGUgbWV0aG9kIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgcGFyYW1ldGVyIHR5cGUgbmFtZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBtZXRob2QgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFBhcmFtZXRlclR5cGVOYW1lcyAoIElNZXRob2QgamR0TWV0aG9kICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdE1ldGhvZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmdbXSBzaWduYXR1cmVzID0gamR0TWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCVN0cmluZ1tdIHR5cGVOYW1lcyA9IG5ldyBTdHJpbmdbc2lnbmF0dXJlcy5sZW5ndGhdOwotCQlmb3IgKGludCBzPTA7IHM8c2lnbmF0dXJlcy5sZW5ndGg7IHMrKykKLQkJewotCQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZXNbc10pOwotCQkJdHlwZU5hbWVzW3NdID0gcmVzb2x2ZVR5cGUodHlwZU5hbWUsYW5jZXN0b3IpOwotCQl9Ci0JCXJldHVybiB0eXBlTmFtZXM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIEpEVCBJVHlwZSBvYmplY3RzCi0JICogZm9yIHRoZSBleGNlcHRpb25zIHRocm93biBieSB0aGUgZ2l2ZW4gbWV0aG9kLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIGV4Y2VwdGlvbiB0eXBlcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIG1ldGhvZCB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSVR5cGVbXSBnZXRFeGNlcHRpb25UeXBlcyAoIElNZXRob2QgamR0TWV0aG9kICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdE1ldGhvZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmdbXSBzaWduYXR1cmVzID0gamR0TWV0aG9kLmdldEV4Y2VwdGlvblR5cGVzKCk7Ci0JCUlUeXBlW10gdHlwZXMgPSBuZXcgSVR5cGVbc2lnbmF0dXJlcy5sZW5ndGhdOwotCQlmb3IgKGludCBzPTA7IHM8c2lnbmF0dXJlcy5sZW5ndGg7IHMrKykKLQkJewotCQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZXNbc10pOwotCQkJdHlwZXNbc10gPSBmaW5kVHlwZSh0eXBlTmFtZSxhbmNlc3Rvcik7Ci0JCX0KLQkJcmV0dXJuIHR5cGVzOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSB0eXBlIG5hbWVzCi0JICogZm9yIHRoZSBleGNlcHRpb25zIHRocm93biBieSB0aGUgZ2l2ZW4gbWV0aG9kLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIGV4Y2VwdGlvbiB0eXBlIG5hbWVzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gbWV0aG9kIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRFeGNlcHRpb25UeXBlTmFtZXMgKCBJTWV0aG9kIGpkdE1ldGhvZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRNZXRob2QuZ2V0QW5jZXN0b3IoSUphdmFFbGVtZW50LlRZUEUpOwotCQlJVHlwZSBhbmNlc3RvciA9IGVsZW0gaW5zdGFuY2VvZiBJVHlwZSA/IChJVHlwZSllbGVtIDogbnVsbDsKLQkJU3RyaW5nW10gc2lnbmF0dXJlcyA9IGpkdE1ldGhvZC5nZXRFeGNlcHRpb25UeXBlcygpOwotCQlTdHJpbmdbXSB0eXBlTmFtZXMgPSBuZXcgU3RyaW5nW3NpZ25hdHVyZXMubGVuZ3RoXTsKLQkJZm9yIChpbnQgcz0wOyBzPHNpZ25hdHVyZXMubGVuZ3RoOyBzKyspCi0JCXsKLQkJCVN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShzaWduYXR1cmVzW3NdKTsKLQkJCXR5cGVOYW1lc1tzXSA9IHJlc29sdmVUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQkJfQotCQlyZXR1cm4gdHlwZU5hbWVzOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSB0eXBlcyByZXByZXNlbnRpbmcKLQkgKiB0aGUgc3VwZXJjbGFzc2VzLCBpZiBhbnksIG9mIHRoZSBnaXZlbiBJVHlwZSBpbiBib3R0b20tdXAKLQkgKiBvcmRlciBleGNsdWRpbmcgamF2YS5sYW5nLk9iamVjdC4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHN1cGVyY2xhc3MgdHlwZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJVHlwZVtdIGdldFN1cGVyQ2xhc3NlcyAoIElUeXBlIGpkdFR5cGUgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBnZXRTdXBlckNsYXNzZXMoamR0VHlwZSwiamF2YS5sYW5nLk9iamVjdCIpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSB0eXBlcyByZXByZXNlbnRpbmcKLQkgKiB0aGUgc3VwZXJjbGFzc2VzLCBpZiBhbnksIG9mIHRoZSBnaXZlbiBJVHlwZS4KLQkgKiBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywgamF2YS5sYW5nLk9iamVjdCBpcyBpbmNsdWRlZC4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEBwYXJhbSBzdG9wQ2xhc3NOYW1lIFRoZSBuYW1lIG9mIGEgc3RvcCBjbGFzcyB1c2VkIHRvIGxpbWl0Ci0JICogdGhlIHN1cGVyY2xhc3NlcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiBJZiB0aGUgc3RvcCBjbGFzcwotCSAqIGlzIG51bGwgb3IgbmFtZXMgYSBjbGFzcyBub3QgZm91bmQgaW4gdGhlIGhpZXJhcmNoeSwgYWxsCi0JICogc3VwZXJjbGFzc2VzIGFyZSByZXR1cm5lZC4gT3RoZXJ3aXNlLCBvbmx5IHN1cGVyY2xhc3NlcyB1cAotCSAqIHRvIGJ1dCBleGNsdWRpbmcgdGhlIHN0b3AgY2xhc3MgYXJlIHJldHVybmVkLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHN1cGVyY2xhc3MgdHlwZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJVHlwZVtdIGdldFN1cGVyQ2xhc3NlcyAoIElUeXBlIGpkdFR5cGUsIFN0cmluZyBzdG9wQ2xhc3NOYW1lICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJVHlwZUhpZXJhcmNoeSBoaWVyYXJjaHkgPSBqZHRUeXBlLm5ld1N1cGVydHlwZUhpZXJhcmNoeShtb25pdG9yXyk7Ci0JCUlUeXBlW10gYWxsU3VwZXJDbGFzc2VzID0gaGllcmFyY2h5LmdldEFsbFN1cGVyY2xhc3NlcyhqZHRUeXBlKTsKLQkJTGlzdCBzdXBlckNsYXNzZXMgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlmb3IgKGludCBpPTA7IGk8YWxsU3VwZXJDbGFzc2VzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoYWxsU3VwZXJDbGFzc2VzW2ldLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpLmVxdWFscyhzdG9wQ2xhc3NOYW1lKSkKLQkJCQlicmVhazsKLQkJCXN1cGVyQ2xhc3Nlcy5hZGQoYWxsU3VwZXJDbGFzc2VzW2ldKTsKLQkJfQotCQlyZXR1cm4gKElUeXBlW10pc3VwZXJDbGFzc2VzLnRvQXJyYXkobmV3IElUeXBlWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogRXh0cmFjdHMgdGhlIHF1YWxpZmllZCB0eXBlIG5hbWUgZnJvbSBhIEpEVCBzaWduYXR1cmUuCi0JICogQHBhcmFtIHNpZ25hdHVyZSBUaGUgc2lnbmF0dXJlIHRvIGV4YW1pbmUuCi0JICogQHJldHVybiBUaGUgcXVhbGlmaWVkIHR5cGUgbmFtZSBmcm9tIHRoZSBzaWduYXR1cmUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUgKCBTdHJpbmcgc2lnbmF0dXJlICkKLQl7Ci0KLQkJU3RyaW5nIHBhY2thZ2VOYW1lID0gU2lnbmF0dXJlLmdldFNpZ25hdHVyZVF1YWxpZmllcihzaWduYXR1cmUpOwotCQlTdHJpbmcgYmFzZU5hbWUgPSBTaWduYXR1cmUuZ2V0U2lnbmF0dXJlU2ltcGxlTmFtZShzaWduYXR1cmUpOwotCQlpZiAoYmFzZU5hbWUuZW5kc1dpdGgoIltdIikpewotCQkJYmFzZU5hbWUgPSBiYXNlTmFtZS5zdWJzdHJpbmcoMCwgYmFzZU5hbWUuaW5kZXhPZigiWyIpKTsKLQkJfQotCQkJCi0JCVN0cmluZyB0eXBlTmFtZSA9IChwYWNrYWdlTmFtZS50cmltKCkuZXF1YWxzKCIiKT8iIjpwYWNrYWdlTmFtZSsiLiIpICsgYmFzZU5hbWU7Ci0JCXJldHVybiB0eXBlTmFtZTsKLQl9Ci0JCi0JLyoqCi0JICogQXR0ZW1wdHMgdG8gcmVzb2x2ZSBhbiB1bnJlc29sdmVkIHR5cGUgbmFtZSBpbiB0aGUKLQkgKiBjb250ZXh0IG9mIHRoZSBnaXZlbiBhbmNlc3RvciB0eXBlIChpZS4gdGhlIHR5cGUKLQkgKiBhY3RpbmcgYXMgdGhlIGNvbnRleHQgd2l0aGluIHdoaWNoIHRoZSB0eXBlIG5hbWUKLQkgKiBzaG91bGQgYmUgcmVzb2x2ZWQpLgotCSAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHR5cGUgdG8gZmluZC4KLQkgKiBAcGFyYW0gYW5jZXN0b3IgVGhlIHR5cGUgcHJvdmlkaW5nIHRoZSBjb250ZXh0IHdpdGhpbgotCSAqIHdoaWNoIHRvIGxvb2sgdXAgdGhlIHR5cGUuCi0JICogQHJldHVybiBUaGUgcXVhbGlmaWVkIG5hbWUsIG9yIHRoZSBvcmlnaW5hbCB0eXBlIG5hbWUKLQkgKiBpZiBpdCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuCi0JICovCi0JcHVibGljIFN0cmluZyByZXNvbHZlVHlwZSAoIFN0cmluZyB0eXBlTmFtZSwgSVR5cGUgYW5jZXN0b3IgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCWlmIChhbmNlc3RvciAhPSBudWxsKQotCQl7Ci0JCQlTdHJpbmdbXVtdIG1hdGNoZXMgPSBhbmNlc3Rvci5yZXNvbHZlVHlwZSh0eXBlTmFtZSk7Ci0JCQlpZiAobWF0Y2hlcyAhPSBudWxsICYmIG1hdGNoZXMubGVuZ3RoID4gMCkKLQkJCXsKLQkJCQlTdHJpbmdCdWZmZXIgcW5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJaW50IG4gPSBtYXRjaGVzWzBdLmxlbmd0aDsKLQkJCQlmb3IgKGludCBqPTA7IGo8bi0xOyBqKyspCi0JCQkJewotCQkJCQlxbmFtZS5hcHBlbmQobWF0Y2hlc1swXVtqXSkuYXBwZW5kKCIuIik7Ci0JCQkJfQotCQkJCWlmIChuID49IDApCi0JCQkJewotCQkJCQlxbmFtZS5hcHBlbmQobWF0Y2hlc1swXVtuLTFdKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIHFuYW1lLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHR5cGVOYW1lOwotCX0KLQotCS8qKgotCSAqIEF0dGVtcHRzIHRvIGZpbmQgYSBKRFQgSVR5cGUgb2JqZWN0IGZvciB0aGUgZ2l2ZW4KLQkgKiByZXNvbHZlZCBvciB1bnJlc29sdmVkIHR5cGUgbmFtZSBpbiB0aGUgY29udGV4dCBvZgotCSAqIHRoZSBnaXZlbiBhbmNlc3RvciB0eXBlIChpZS4gdGhlIHR5cGUgYWN0aW5nIGFzIHRoZQotCSAqIGNvbnRleHQgd2l0aGluIHdoaWNoIHRoZSB0eXBlIG5hbWUgc2hvdWxkIGJlIHJlc29sdmVkKS4KLQkgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB0eXBlIHRvIGZpbmQuCi0JICogQHBhcmFtIGFuY2VzdG9yIFRoZSB0eXBlIHByb3ZpZGluZyB0aGUgY29udGV4dCB3aXRoaW4KLQkgKiB3aGljaCB0byBsb29rIHVwIHRoZSB0eXBlLgotCSAqIEByZXR1cm4gVGhlIElUeXBlIG9iamVjdCBvZiB0aGUgZ2l2ZW4gcXVhbGlmaWVkIG5hbWUsCi0JICogb3IgbnVsbCBpZiBubyB0eXBlIGNvdWxkIGJlIGZvdW5kIGluIHRoZSB3b3Jrc3BhY2UuCi0JICovCi0JcHVibGljIElUeXBlIGZpbmRUeXBlICggU3RyaW5nIHR5cGVOYW1lLCBJVHlwZSBhbmNlc3RvciApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSVR5cGUgdHlwZSA9IGphdmFQcm9qZWN0Xy5maW5kVHlwZSh0eXBlTmFtZSk7Ci0JCWlmICh0eXBlID09IG51bGwgJiYgYW5jZXN0b3IgIT0gbnVsbCkKLQkJewotCQkJU3RyaW5nW11bXSBtYXRjaGVzID0gYW5jZXN0b3IucmVzb2x2ZVR5cGUodHlwZU5hbWUpOwotCQkJaWYgKG1hdGNoZXMgIT0gbnVsbCkKLQkJCXsKLQkJCQlpbnQgaT0wOwotCQkJCXdoaWxlICh0eXBlID09IG51bGwgJiYgaTxtYXRjaGVzLmxlbmd0aCkKLQkJCQl7Ci0JCQkJCVN0cmluZ0J1ZmZlciBxbmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQkJaW50IG4gPSBtYXRjaGVzW2ldLmxlbmd0aDsKLQkJCQkJZm9yIChpbnQgaj0wOyBqPG4tMTsgaisrKQotCQkJCQl7Ci0JCQkJCQlxbmFtZS5hcHBlbmQobWF0Y2hlc1tpXVtqXSkuYXBwZW5kKCIuIik7Ci0JCQkJCX0KLQkJCQkJaWYgKG4gPj0gMCkKLQkJCQkJewotCQkJCQkJcW5hbWUuYXBwZW5kKG1hdGNoZXNbaV1bbi0xXSk7Ci0JCQkJCX0KLQkJCQkJdHlwZSA9IGphdmFQcm9qZWN0Xy5maW5kVHlwZShxbmFtZS50b1N0cmluZygpKTsKLQkJCQkJaSsrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gdHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBGaW5kcyBhbGwgcHVibGljLCBub24tY29uc3RydWN0b3IgSU1ldGhvZHMgYmVsb25naW5nCi0JICogdG8gdGhlIGdpdmVuIElUeXBlIGFuZCBhZGRzIHRoZW0gdG8gdGhlIGdpdmVuIGxpc3QuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgd2hvc2UgbWV0aG9kcyBhcmUgdG8gYmUgaGFydmVzdGVkLgotCSAqIEBwYXJhbSBsaXN0IFRoZSBsaXN0IHRvIHdoaWNoIHRoZSBoYXJ2ZXN0ZWQgbWV0aG9kcyB3aWxsIGJlIGFkZGVkLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBoYXJ2ZXN0UHVibGljTWV0aG9kcyAoIElUeXBlIGpkdFR5cGUsIExpc3QgbGlzdCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSU1ldGhvZFtdIG1ldGhvZHMgPSBqZHRUeXBlLmdldE1ldGhvZHMoKTsKLQkJZm9yIChpbnQgbT0wOyBtPG1ldGhvZHMubGVuZ3RoOyBtKyspCi0JCXsKLQkJCWlmICghbWV0aG9kc1ttXS5pc0NvbnN0cnVjdG9yKCkgJiYgRmxhZ3MuaXNQdWJsaWMobWV0aG9kc1ttXS5nZXRGbGFncygpKSkKLQkJCXsKLQkJCQlsaXN0LmFkZChtZXRob2RzW21dKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBGaW5kcyBhbGwgcHVibGljIElGaWVsZHMgYmVsb25naW5nCi0JICogdG8gdGhlIGdpdmVuIElUeXBlIGFuZCBhZGRzIHRoZW0gdG8gdGhlIGdpdmVuIGxpc3QuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgd2hvc2UgZmllbGRzIGFyZSB0byBiZSBoYXJ2ZXN0ZWQuCi0JICogQHBhcmFtIGxpc3QgVGhlIGxpc3QgdG8gd2hpY2ggdGhlIGhhcnZlc3RlZCBmaWVsZHMgd2lsbCBiZSBhZGRlZC4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGUgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIHZvaWQgaGFydmVzdFB1YmxpY0ZpZWxkcyAoIElUeXBlIGpkdFR5cGUsIExpc3QgbGlzdCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUZpZWxkW10gZmllbGRzID0gamR0VHlwZS5nZXRGaWVsZHMoKTsKLQkJZm9yIChpbnQgZj0wOyBmPGZpZWxkcy5sZW5ndGg7IGYrKykKLQkJewotCQkJaWYgKEZsYWdzLmlzUHVibGljKGZpZWxkc1tmXS5nZXRGbGFncygpKSkKLQkJCXsKLQkJCQlsaXN0LmFkZChmaWVsZHNbZl0pOwotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIElmIHRoZSBnaXZlbiBtZXRob2QgaXMgYSBnZXR0ZXIgYWNjb3JkaW5nIHRvIHRoZSBCZWFuIHNwZWMKLQkgKiAoZWcuICJNeVR5cGUgZ2V0TXlQcm9wZXJ0eSAoKSIgb3IgImJvb2xlYW4gaXNNeVByb3BlcnR5ICgpIikKLQkgKiByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgYmVhbiBwcm9wZXJ0eSBuYW1lIChlZy4gIm15UHJvcGVydHkiKSwKLQkgKiBvdGhlcndpc2UsIHJldHVybiBudWxsLgotCSAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSBuYW1lIG9yIG5vbmUgaWYgdGhlIG1ldGhvZCBpcyBub3QgYSBnZXR0ZXIuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRHZXR0ZXJOYW1lICggSU1ldGhvZCBtZXRob2QgKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCVN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kLmdldEVsZW1lbnROYW1lKCk7Ci0JCQlpZiAobWV0aG9kTmFtZS5zdGFydHNXaXRoKCJnZXQiKSAmJiBtZXRob2ROYW1lLmxlbmd0aCgpID4gMykKLQkJCXsKLQkJCQlTdHJpbmcgc2lnbmF0dXJlID0gbWV0aG9kLmdldFNpZ25hdHVyZSgpOwotCQkJCVN0cmluZyByZXR1cm5UeXBlTmFtZSA9IFNpZ25hdHVyZS5nZXRSZXR1cm5UeXBlKHNpZ25hdHVyZSk7Ci0JCQkJLy8KLQkJCQkvLyBHZXR0ZXJzIG11c3Qgbm90IGJlIHZvaWQuCi0JCQkJLy8KLQkJCQlpZiAocmV0dXJuVHlwZU5hbWUgIT0gbnVsbCAmJiByZXR1cm5UeXBlTmFtZSAhPSBTaWduYXR1cmUuU0lHX1ZPSUQpCi0JCQkJewotCQkJCQlTdHJpbmdbXSBwYXJhbWV0ZXJTaWduYXR1cmVzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCQkJCS8vCi0JCQkJCS8vIE5vbi1pbmRleGVkIGdldHRlcnMgbXVzdCBoYXZlIHplcm8gcGFyYW1ldGVycy4KLQkJCQkJLy8KLQkJCQkJaWYgKHBhcmFtZXRlclNpZ25hdHVyZXMubGVuZ3RoID09IDApCi0JCQkJCXsKLQkJCQkJCXJldHVybiBtZXRob2ROYW1lLnN1YnN0cmluZygzLDQpLnRvTG93ZXJDYXNlKCkgKyBtZXRob2ROYW1lLnN1YnN0cmluZyg0KTsKLQkJCQkJfQotCQkJCQkvLwotCQkJCQkvLyBJbmRleGVkIGdldHRlcnMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtZXRlciBvZiB0eXBlICJpbnQiLgotCQkJCQkvLwotCQkJCQllbHNlIGlmIChwYXJhbWV0ZXJTaWduYXR1cmVzLmxlbmd0aCA9PSAxKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgaW5kZXhUeXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShwYXJhbWV0ZXJTaWduYXR1cmVzWzBdKTsKLQkJCQkJCWlmIChpbmRleFR5cGVOYW1lLmVxdWFscygiaW50IikpCi0JCQkJCQl7Ci0JCQkJCQkJcmV0dXJuIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDMsNCkudG9Mb3dlckNhc2UoKSArIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDQpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAobWV0aG9kTmFtZS5zdGFydHNXaXRoKCJpcyIpICYmIG1ldGhvZE5hbWUubGVuZ3RoKCkgPiAyKQotCQkJewotCQkJCVN0cmluZyBzaWduYXR1cmUgPSBtZXRob2QuZ2V0U2lnbmF0dXJlKCk7Ci0JCQkJU3RyaW5nIHJldHVyblR5cGVOYW1lID0gU2lnbmF0dXJlLmdldFJldHVyblR5cGUoc2lnbmF0dXJlKTsKLQkJCQkvLwotCQkJCS8vICJpcyIgZ2V0dGVycyBtdXN0IGJlIGJvb2xlYW4uCi0JCQkJLy8KLQkJCQlpZiAoU2lnbmF0dXJlLlNJR19CT09MRUFOLmVxdWFscyhyZXR1cm5UeXBlTmFtZSkpCi0JCQkJewotCQkJCQkvLwotCQkJCQkvLyAiaXMiIGdldHRlcnMgbXVzdCBoYXZlIG5vIHBhcmFtZXRlcnMuCi0JCQkJCS8vCi0JCQkJCWlmIChtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMCkKLQkJCQkJewotCQkJCQkJcmV0dXJuIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDIsMykudG9Mb3dlckNhc2UoKSArIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDMpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIElmIHRoZSBnaXZlbiBtZXRob2QgaXMgYSBzZXR0ZXIgYWNjb3JkaW5nIHRvIHRoZSBCZWFuIHNwZWMKLQkgKiAoZWcuICJ2b2lkIHNldE15UHJvcGVydHkgKE15VHlwZSkiIHJldHVybiB0aGUgY29ycmVzcG9uZGluZwotCSAqIGJlYW4gcHJvcGVydHkgbmFtZSAoZWcuICJteVByb3BlcnR5IiksIG90aGVyd2lzZSwgcmV0dXJuIG51bGwuCi0JICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGNoZWNrLgotCSAqIEByZXR1cm4gVGhlIHByb3BlcnR5IG5hbWUgb3Igbm9uZSBpZiB0aGUgbWV0aG9kIGlzIG5vdCBhIHNldHRlci4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFNldHRlck5hbWUgKCBJTWV0aG9kIG1ldGhvZCApCi0JewotCQl0cnkKLQkJewotCQkJU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2QuZ2V0RWxlbWVudE5hbWUoKTsKLQkJCWlmIChtZXRob2ROYW1lLnN0YXJ0c1dpdGgoInNldCIpICYmIG1ldGhvZE5hbWUubGVuZ3RoKCkgPiAzKQotCQkJewotCQkJCVN0cmluZyBzaWduYXR1cmUgPSBtZXRob2QuZ2V0U2lnbmF0dXJlKCk7Ci0JCQkJU3RyaW5nIHJldHVyblR5cGVOYW1lID0gU2lnbmF0dXJlLmdldFJldHVyblR5cGUoc2lnbmF0dXJlKTsKLQkJCQkvLwotCQkJCS8vIFNldHRlcnMgbXVzdCBiZSB2b2lkLgotCQkJCS8vCi0JCQkJaWYgKFNpZ25hdHVyZS5TSUdfVk9JRC5lcXVhbHMocmV0dXJuVHlwZU5hbWUpKQotCQkJCXsKLQkJCQkJU3RyaW5nW10gcGFyYW1ldGVyU2lnbmF0dXJlcyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQkJCQkvLwotCQkJCQkvLyBOb24taW5kZXhlZCBzZXR0ZXJzIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXIuCi0JCQkJCS8vCi0JCQkJCWlmIChwYXJhbWV0ZXJTaWduYXR1cmVzLmxlbmd0aCA9PSAxKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gbWV0aG9kTmFtZS5zdWJzdHJpbmcoMyw0KS50b0xvd2VyQ2FzZSgpICsgbWV0aG9kTmFtZS5zdWJzdHJpbmcoNCk7Ci0JCQkJCX0KLQkJCQkJLy8KLQkJCQkJLy8gSW5kZXhlZCBzZXR0ZXJzIG11c3QgaGF2ZSBleGFjdGx5IHR3byBwYXJhbWV0ZXJzLAotCQkJCQkvLyB0aGUgZmlyc3Qgb2Ygd2hpY2ggbXVzdCBiZSAiaW50Ii4KLQkJCQkJLy8KLQkJCQkJZWxzZSBpZiAocGFyYW1ldGVyU2lnbmF0dXJlcy5sZW5ndGggPT0gMikKLQkJCQkJewotCQkJCQkJaWYgKFNpZ25hdHVyZS5TSUdfSU5ULmVxdWFscyhwYXJhbWV0ZXJTaWduYXR1cmVzWzBdKSkKLQkJCQkJCXsKLQkJCQkJCQlyZXR1cm4gbWV0aG9kTmFtZS5zdWJzdHJpbmcoMyw0KS50b0xvd2VyQ2FzZSgpICsgbWV0aG9kTmFtZS5zdWJzdHJpbmcoNCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoKLQkgKiBUaGUgSmF2YSBwcm9qZWN0IHRoYXQgZ292ZXJucyB0aGUgc2VhcmNoIHNjb3BlIGZvciB0aGlzIHJlc29sdmVyLgotCSAqLwotCXByaXZhdGUgSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0XzsKLQkKLQkvKgotCSAqIFRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIHVzZSwgaWYgYW55LiAKLQkgKi8KLQlwcml2YXRlIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcl87Ci0JCi0JLyoKLQkgKiBUaGUgc2V0IG9mIEphdmEgd3JhcHBlciB0eXBlcy4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSB3cmFwcGVyVHlwZXNfID0gewotCQkiamF2YS5sYW5nLkNoYXJhY3RlciIsCi0JCSJqYXZhLmxhbmcuQm9vbGVhbiIsCi0JCSJqYXZhLmxhbmcuQnl0ZSIsCi0JCSJqYXZhLmxhbmcuU2hvcnQiLAotCQkiamF2YS5sYW5nLkludGVnZXIiLAotCQkiamF2YS5sYW5nLkxvbmciLAotCQkiamF2YS5sYW5nLkZsb2F0IiwKLQkJImphdmEubGFuZy5Eb3VibGUiCi0JfTsKLQotCS8qCi0JICogVGhlIHNldCBvZiBKYXZhIHByaW1pdGl2ZSB0eXBlcy4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBwcmltaXRpdmVUeXBlc18gPSB7Ci0JCSJjaGFyIiwKLQkJImJvb2xlYW4iLAotCQkiYnl0ZSIsCi0JCSJzaG9ydCIsCi0JCSJpbnQiLAotCQkibG9uZyIsCi0JCSJmbG9hdCIsCi0JCSJkb3VibGUiCi0JfTsKLQotCS8qCi0JICogVGhlIHNldCBvZiBKQVgtUlBDIHN1cHBvcnRlZCBKYXZhIHN0YW5kYXJkIHR5cGVzLAotCSAqIGV4Y2x1ZGluZyBwcmltaXRpdmVzIGFuZCB3cmFwcGVyIHR5cGVzLgotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIGpheHJwY1R5cGVzXyA9IHsKLQkJImJvb2xlYW4iLAotCQkiYnl0ZSIsCi0JCSJzaG9ydCIsCi0JCSJpbnQiLAotCQkibG9uZyIsCi0JCSJmbG9hdCIsCi0JCSJkb3VibGUiLAotCQkiamF2YS5sYW5nLlN0cmluZyIsCi0JCSJqYXZhLmxhbmcuQm9vbGVhbiIsCi0JCSJqYXZhLmxhbmcuQnl0ZSIsCi0JCSJqYXZhLmxhbmcuU2hvcnQiLAotCQkiamF2YS5sYW5nLkludGVnZXIiLAotCQkiamF2YS5sYW5nLkxvbmciLAotCQkiamF2YS5sYW5nLkZsb2F0IiwKLQkJImphdmEubGFuZy5Eb3VibGUiLAotCQkiamF2YS51dGlsLkRhdGUiLAotCQkiamF2YS51dGlsLkNhbGVuZGFyIiwKLQkJImphdmEubWF0aC5CaWdJbnRlZ2VyIiwKLQkJImphdmEubWF0aC5CaWdEZWNpbWFsIiwKLQkJImphdmEubmV0LlVSSSIsCi0JCSJqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIgotCX07Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0phdmFCZWFuUHJvcGVydHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YUJlYW5Qcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjlkNTUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YUJlYW5Qcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIFRoaXMgaXMgYSBnYXJkZW4gdmFyaWV0eSBpbXBsZW1lbnRhdGlvbiBvZiBJSmF2YUJlYW5Qcm9wZXJ0eSwKLSAqIGNvbnN0cnVjdGFibGUgYnkgZGVmYXVsdCBhbmQgZXF1aXBwZWQgd2l0aCBnZXR0ZXJzIGFuZCBzZXR0ZXJzCi0gKiBmb3IgdGhlIHByb3BlcnRpZXMgb2YgSUphdmFCZWFuUHJvcGVydHkuCi0gKi8KLXB1YmxpYyBjbGFzcyBKYXZhQmVhblByb3BlcnR5IGltcGxlbWVudHMgSUphdmFCZWFuUHJvcGVydHkKLXsKLQlwcml2YXRlIFN0cmluZyBuYW1lXzsKLQlwcml2YXRlIGJvb2xlYW4gaW5kZXhlZF87Ci0JcHJpdmF0ZSBJTWV0aG9kIGdldHRlcl87Ci0JcHJpdmF0ZSBJTWV0aG9kIHNldHRlcl87Ci0JcHJpdmF0ZSBJTWV0aG9kIGluZGV4ZWRHZXR0ZXJfOwotCXByaXZhdGUgSU1ldGhvZCBpbmRleGVkU2V0dGVyXzsKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHkjZ2V0TmFtZSgpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0JewotCQlyZXR1cm4gbmFtZV87Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlICJuYW1lIiBwcm9wZXJ0eSBvZiB0aGlzIEphdmEgQmVhbiBQcm9wZXJ0eSBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBuYW1lIFRoZSBzdHJpbmcgdmFsdWUgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWUgKCBTdHJpbmcgbmFtZSApCi0JewotCQluYW1lXyA9IG5hbWU7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSNpc0luZGV4ZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSW5kZXhlZCAoKQotCXsKLQkJcmV0dXJuIGluZGV4ZWRfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSAiaW5kZXhlZCIgcHJvcGVydHkgb2YgdGhpcyBKYXZhIEJlYW4gUHJvcGVydHkgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gaW5kZXhlZCBUaGUgYm9vbGVhbiB2YWx1ZSB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SW5kZXhlZCAoIGJvb2xlYW4gaW5kZXhlZCApCi0JewotCQlpbmRleGVkXyA9IGluZGV4ZWQ7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSNnZXRHZXR0ZXIoKQotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldEdldHRlciAoKQotCXsKLQkJcmV0dXJuIGdldHRlcl87Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlICJnZXR0ZXIiIHByb3BlcnR5IG9mIHRoaXMgSmF2YSBCZWFuIFByb3BlcnR5IGRlc2NyaXB0b3IuCi0JICogQHBhcmFtIGdldHRlciBUaGUgSU1ldGhvZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0R2V0dGVyICggSU1ldGhvZCBnZXR0ZXIgKQotCXsKLQkJZ2V0dGVyXyA9IGdldHRlcjsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5I2dldFNldHRlcigpCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0U2V0dGVyICgpCi0JewotCQlyZXR1cm4gc2V0dGVyXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgInNldHRlciIgcHJvcGVydHkgb2YgdGhpcyBKYXZhIEJlYW4gUHJvcGVydHkgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gc2V0dGVyIFRoZSBJTWV0aG9kIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXR0ZXIgKCBJTWV0aG9kIHNldHRlciApCi0JewotCQlzZXR0ZXJfID0gc2V0dGVyOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHkjZ2V0SW5kZXhlZEdldHRlcigpCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0SW5kZXhlZEdldHRlciAoKQotCXsKLQkJcmV0dXJuIGluZGV4ZWRHZXR0ZXJfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSAiaW5kZXhlZEdldHRlciIgcHJvcGVydHkgb2YgdGhpcyBKYXZhIEJlYW4gUHJvcGVydHkgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gaW5kZXhlZEdldHRlciBUaGUgSU1ldGhvZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SW5kZXhlZEdldHRlciAoIElNZXRob2QgaW5kZXhlZEdldHRlciApCi0JewotCQlpbmRleGVkR2V0dGVyXyA9IGluZGV4ZWRHZXR0ZXI7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSNnZXRJbmRleGVkU2V0dGVyKCkKLQkgKi8KLQlwdWJsaWMgSU1ldGhvZCBnZXRJbmRleGVkU2V0dGVyICgpCi0JewotCQlyZXR1cm4gaW5kZXhlZFNldHRlcl87Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlICJpbmRleGVkU2V0dGVyIiBwcm9wZXJ0eSBvZiB0aGlzIEphdmEgQmVhbiBQcm9wZXJ0eSBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBpbmRleGVkU2V0dGVyIFRoZSBJTWV0aG9kIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJbmRleGVkU2V0dGVyICggSU1ldGhvZCBpbmRleGVkU2V0dGVyICkKLQl7Ci0JCWluZGV4ZWRTZXR0ZXJfID0gaW5kZXhlZFNldHRlcjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHkjZ2V0RGVjbGFyaW5nVHlwZSgpCi0JICovCi0JcHVibGljIElUeXBlIGdldERlY2xhcmluZ1R5cGUgKCkKLQl7Ci0JCUlNZXRob2QgbWV0aG9kID0gZ2V0R2V0dGVyKCk7Ci0JCWlmIChtZXRob2QgPT0gbnVsbCkgbWV0aG9kID0gZ2V0U2V0dGVyKCk7Ci0JCWlmIChtZXRob2QgPT0gbnVsbCkgbWV0aG9kID0gZ2V0SW5kZXhlZEdldHRlcigpOwotCQlpZiAobWV0aG9kID09IG51bGwpIG1ldGhvZCA9IGdldEluZGV4ZWRTZXR0ZXIoKTsKLQkJcmV0dXJuIG1ldGhvZCAhPSBudWxsID8gbWV0aG9kLmdldERlY2xhcmluZ1R5cGUoKSA6IG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhV2ViU2VydmljZVJ1bGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YVdlYlNlcnZpY2VSdWxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZmZhMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhV2ViU2VydmljZVJ1bGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5NdWx0aVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotCi0vKioKLSAqIEEgYmFzaWMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJSmF2YVdlYlNlcnZpY2VSdWxlLgotICovCi1wdWJsaWMgY2xhc3MgSmF2YVdlYlNlcnZpY2VSdWxlIGltcGxlbWVudHMgSUphdmFXZWJTZXJ2aWNlUnVsZQotewotCXByb3RlY3RlZCBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZV87Ci0JcHJvdGVjdGVkIExpc3Qgc3RhdHVzTGlzdF87Ci0JcHJvdGVjdGVkIGludCBpZF87Ci0JcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2VfOwotCXByb3RlY3RlZCBTdHJpbmcgbmFtZV87Ci0JcHJvdGVjdGVkIFN0cmluZyBkZXNjcmlwdGlvbl87Ci0JCi0JcHJvdGVjdGVkIEphdmFXZWJTZXJ2aWNlUnVsZSAoKQotCXsKLQkJLy8gTm90IHB1YmxpY2x5IGNvbnN0cnVjdGFibGUuCi0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI2dldElkKCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldElkICgpCi0JewotCQlyZXR1cm4gaWRfOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSNnZXROYW1lc3BhY2UoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlICgpCi0JewotCQlyZXR1cm4gbmFtZXNwYWNlXzsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjZ2V0TmFtZSgpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0JewotCQlyZXR1cm4gbmFtZV87Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI2dldERlc2NyaXB0aW9uKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpCi0JewotCQlyZXR1cm4gZGVzY3JpcHRpb25fOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSNpbml0KCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0ICggSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmUgKQotCXsKLQkJZW5naW5lXyA9IGVuZ2luZTsKLQkJc3RhdHVzTGlzdF8gPSBuZXcgTGlua2VkTGlzdCgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdENsYXNzKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRDbGFzcyAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdEV4Y2VwdGlvbihvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdEV4Y2VwdGlvbiAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdEZpZWxkKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZCwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0RmllbGQgKCBJRmllbGQgamR0RmllbGQsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0UHJvcGVydHkob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCwgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0UHJvcGVydHkgKCBJSmF2YUJlYW5Qcm9wZXJ0eSBiZWFuUHJvcGVydHksIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0TWV0aG9kKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2QsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZCAoIElNZXRob2QgamR0TWV0aG9kLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSNnZXRSZXN1bHRzKCkKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBnZXRSZXN1bHRzICgpCi0JewotCQlJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCWlmIChzdGF0dXNMaXN0Xy5zaXplKCkgPT0gMCkKLQkJewotCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIiIsbnVsbCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlNdWx0aVN0YXR1cyBtdWx0aVN0YXR1cyA9IG5ldyBNdWx0aVN0YXR1cygib3JnLmVjbGlwc2UuanN0LndzIiwwLCIiLG51bGwpOwotCQkJSXRlcmF0b3IgaSA9IHN0YXR1c0xpc3RfLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCQl7Ci0JCQkJbXVsdGlTdGF0dXMuYWRkKChJU3RhdHVzKWkubmV4dCgpKTsKLQkJCX0KLQkJCXN0YXR1cyA9IG11bHRpU3RhdHVzOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhV2ViU2VydmljZVJ1bGVTZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YVdlYlNlcnZpY2VSdWxlU2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ODc3MTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhV2ViU2VydmljZVJ1bGVTZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTXVsdGlTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBUaGlzIG9iamVjdCBtYW5hZ2VzIGEgc2V0IG9mIHJ1bGVzLgotICogUnVsZXMgaW4gdGhlIHNldCBtYXkgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAqLwotcHVibGljIGNsYXNzIEphdmFXZWJTZXJ2aWNlUnVsZVNldAotewotCXByaXZhdGUgU2V0IGVuYWJsZWRSdWxlc18gPSBuZXcgSGFzaFNldCgpOwotCXByaXZhdGUgU2V0IGRpc2FibGVkUnVsZXNfID0gbmV3IEhhc2hTZXQoKTsKLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3LCBpbml0aWFsbHkgZW1wdHkgc2V0IG9mIHJ1bGVzLgotCSAqLwotCXB1YmxpYyBKYXZhV2ViU2VydmljZVJ1bGVTZXQgKCkKLQl7Ci0JCS8vIE5vdGhpbmcgdG8gZG8uCi0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBzZXQgb2YgcnVsZXMgaW5pdGlhbGl6ZWQgd2l0aCB0aG9zZQotCSAqIGZyb20gdGhlIGdpdmVuIGFycmF5IG9mIDxjb2RlPnJ1bGVzPC9jb2RlPi4KLQkgKiBAcGFyYW0gcnVsZXMgQW4gYXJyYXkgb2YgcnVsZXMgdG8gYWRkLgotCSAqLwotCXB1YmxpYyBKYXZhV2ViU2VydmljZVJ1bGVTZXQgKCBJSmF2YVdlYlNlcnZpY2VSdWxlW10gcnVsZXMgKQotCXsKLQkJYWRkUnVsZXMocnVsZXMpOwotCX0KLQkKLQkvKioKLQkgKiBBZGRzIGEgPGNvZGU+cnVsZTwvY29kZT4gdG8gdGhlIHNldC4KLQkgKiBSdWxlcyBhZGRlZCB0byB0aGUgc2V0IGFyZSBpbml0aWFsbHkgZW5hYmxlZC4KLQkgKiBAcGFyYW0gcnVsZSBUaGUgcnVsZSB0byBhZGQuCi0JICovCi0JcHVibGljIHZvaWQgYWRkUnVsZSAoIElKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSApCi0JewotCQllbmFibGVkUnVsZXNfLmFkZChydWxlKTsKLQl9Ci0JCi0JLyoqCi0JICogQWRkcyBzZXZlcmFsIDxjb2RlPnJ1bGVzPC9jb2RlPiB0byB0aGUgc2V0LgotCSAqIFJ1bGVzIGFkZGVkIHRvIHRoZSBzZXQgYXJlIGluaXRpYWxseSBlbmFibGVkLgotCSAqIEBwYXJhbSBydWxlcyBUaGUgYXJyYXkgb2YgcnVsZXMgdG8gYWRkLgotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFJ1bGVzICggSUphdmFXZWJTZXJ2aWNlUnVsZVtdIHJ1bGVzICkKLQl7Ci0JCWVuYWJsZWRSdWxlc18uYWRkQWxsKEFycmF5cy5hc0xpc3QocnVsZXMpKTsKLQl9Ci0JCi0JLyoqCi0JICogTWFya3MgdGhlIGdpdmVuIDxjb2RlPnJ1bGU8L2NvZGU+IGFzIGRpc2FibGVkIG9yIGVuYWJsZWQuCi0JICogVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgcnVsZSBpcyBub3QgYWxyZWFkeSBpbgotCSAqIHRoZSBzZXQsIGluIG90aGVyIHdvcmRzLCB0aGlzIG1ldGhvZCB3aWxsIG5vdCBoYXZlIHRoZQotCSAqIHNpZGUgZWZmZWN0IG9mIGFkZGluZyBhIHJ1bGUgdG8gdGhlIHNldC4KLQkgKiBAcGFyYW0gcnVsZSBUaGUgcnVsZSB0byBkaXNhYmxlIG9yIGVuYWJsZS4KLQkgKiBAcGFyYW0gZGlzYWJsZWQgVHJ1ZSB0byBkaXNhYmxlIHRoZSBydWxlIG9yIGZhbHNlIHRvIGVuYWJsZSBpdC4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYSBjaGFuZ2UgaW4gc3RhdHVzIHdhcyBhY3R1YWxseSBtYWRlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHNldFJ1bGVEaXNhYmxlZCAoIElKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSwgYm9vbGVhbiBkaXNhYmxlZCApCi0JewotCQlpZiAoZGlzYWJsZWQpCi0JCXsKLQkJCWlmIChlbmFibGVkUnVsZXNfLnJlbW92ZShydWxlKSkKLQkJCXsKLQkJCQlkaXNhYmxlZFJ1bGVzXy5hZGQocnVsZSk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlpZiAoZGlzYWJsZWRSdWxlc18ucmVtb3ZlKHJ1bGUpKQotCQkJewotCQkJCWVuYWJsZWRSdWxlc18uYWRkKHJ1bGUpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcnVsZXMgaW4gdGhlIHNldC4KLQkgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgcnVsZXMgaW4gdGhlIHNldC4KLQkgKi8KLQlwdWJsaWMgaW50IHNpemUgKCkKLQl7Ci0JCXJldHVybiBlbmFibGVkUnVsZXNfLnNpemUoKSArIGRpc2FibGVkUnVsZXNfLnNpemUoKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVuYWJsZWQgcnVsZXMgaW4gdGhlIHNldC4KLQkgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgZW5hYmxlZCBydWxlcyBpbiB0aGUgc2V0LgotCSAqLwotCXB1YmxpYyBpbnQgbnVtYmVyRW5hYmxlZCAoKQotCXsKLQkJcmV0dXJuIGVuYWJsZWRSdWxlc18uc2l6ZSgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgcnVsZXMgaW4gdGhlIHNldC4KLQkgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgZGlzYWJsZWQgcnVsZXMgaW4gdGhlIHNldC4KLQkgKi8KLQlwdWJsaWMgaW50IG51bWJlckRpc2FibGVkICgpCi0JewotCQlyZXR1cm4gZGlzYWJsZWRSdWxlc18uc2l6ZSgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgZW5hYmxlZCBydWxlcyBmcm9tIHRoZSBzZXQuCi0JICogQHJldHVybiBBbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IGVuYWJsZWQgcnVsZXMgZnJvbSB0aGUgc2V0LgotCSAqLwotCXB1YmxpYyBJSmF2YVdlYlNlcnZpY2VSdWxlW10gZ2V0RW5hYmxlZFJ1bGVzICgpCi0JewotCQlyZXR1cm4gKElKYXZhV2ViU2VydmljZVJ1bGVbXSllbmFibGVkUnVsZXNfLnRvQXJyYXkobmV3IElKYXZhV2ViU2VydmljZVJ1bGVbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgZGlzYWJsZWQgcnVsZXMgZnJvbSB0aGUgc2V0LgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgYWxsIGN1cnJlbnRseSBkaXNhYmxlZCBydWxlcyBmcm9tIHRoZSBzZXQuCi0JICovCi0JcHVibGljIElKYXZhV2ViU2VydmljZVJ1bGVbXSBnZXREaXNhYmxlZFJ1bGVzICgpCi0JewotCQlyZXR1cm4gKElKYXZhV2ViU2VydmljZVJ1bGVbXSlkaXNhYmxlZFJ1bGVzXy50b0FycmF5KG5ldyBJSmF2YVdlYlNlcnZpY2VSdWxlWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYWxsIHJ1bGVzIGluIHRoZSBzZXQgYnkgY2FsbGluZwotCSAqIHRoZWlyIGluaXQoKSBtZXRob2RzIHdpdGggdGhlIGdpdmVuIGVuZ2luZS4KLQkgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgaW5pdGlhbGl6aW5nIAotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQgKCBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZSApCi0JewotCQlJdGVyYXRvciBpID0gZW5hYmxlZFJ1bGVzXy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCXsKLQkJCUlKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSA9IChJSmF2YVdlYlNlcnZpY2VSdWxlKWkubmV4dCgpOwotCQkJcnVsZS5pbml0KGVuZ2luZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBWaXNpdHMgdGhlICJ2aXNpdENsYXNzIiBtZXRob2Qgb2YgYWxsIHJ1bGVzIGluIHRoZSBzZXQuIAotCSAqIEBwYXJhbSBqZHRDbGFzcyBUaGUgSkRUIElUeXBlIGJlaW5nIHZpc2l0ZWQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSBzdGFjayBvZiBvYmplY3RzIHVwIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJSXRlcmF0b3IgaSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSlpLm5leHQoKTsKLQkJCXJ1bGUudmlzaXRDbGFzcyhqZHRDbGFzcyxwZWFudXRUcmFpbCk7Ci0JCX0JCQotCX0KLQotCS8qKgotCSAqIFZpc2l0cyB0aGUgInZpc2l0RXhjZXB0aW9uIiBtZXRob2Qgb2YgYWxsIHJ1bGVzIGluIHRoZSBzZXQuIAotCSAqIEBwYXJhbSBqZHRDbGFzcyBUaGUgSkRUIElUeXBlIGJlaW5nIHZpc2l0ZWQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSBzdGFjayBvZiBvYmplY3RzIHVwIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0RXhjZXB0aW9uICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCUl0ZXJhdG9yIGkgPSBlbmFibGVkUnVsZXNfLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkJSUphdmFXZWJTZXJ2aWNlUnVsZSBydWxlID0gKElKYXZhV2ViU2VydmljZVJ1bGUpaS5uZXh0KCk7Ci0JCQlydWxlLnZpc2l0RXhjZXB0aW9uKGpkdENsYXNzLHBlYW51dFRyYWlsKTsKLQkJfQotCX0KLQotCi0JLyoqCi0JICogVmlzaXRzIHRoZSAidmlzaXRGaWVsZCIgbWV0aG9kIG9mIGFsbCBydWxlcyBpbiB0aGUgc2V0LiAKLQkgKiBAcGFyYW0gamR0Q2xhc3MgVGhlIEpEVCBJRmllbGQgYmVpbmcgdmlzaXRlZC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHN0YWNrIG9mIG9iamVjdHMgdXAgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRGaWVsZCAoIElGaWVsZCBqZHRGaWVsZCwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJSXRlcmF0b3IgaSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSlpLm5leHQoKTsKLQkJCXJ1bGUudmlzaXRGaWVsZChqZHRGaWVsZCxwZWFudXRUcmFpbCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBWaXNpdHMgdGhlICJ2aXNpdFByb3BlcnR5IiBtZXRob2Qgb2YgYWxsIHJ1bGVzIGluIHRoZSBzZXQuIAotCSAqIEBwYXJhbSBqZHRDbGFzcyBUaGUgSUphdmFCZWFuUHJvcGVydHkgYmVpbmcgdmlzaXRlZC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHN0YWNrIG9mIG9iamVjdHMgdXAgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRQcm9wZXJ0eSAoIElKYXZhQmVhblByb3BlcnR5IGJlYW5Qcm9wZXJ0eSwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJSXRlcmF0b3IgaSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSlpLm5leHQoKTsKLQkJCXJ1bGUudmlzaXRQcm9wZXJ0eShiZWFuUHJvcGVydHkscGVhbnV0VHJhaWwpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVmlzaXRzIHRoZSAidmlzaXRNZXRob2QiIG1ldGhvZCBvZiBhbGwgcnVsZXMgaW4gdGhlIHNldC4gCi0JICogQHBhcmFtIGpkdENsYXNzIFRoZSBKRFQgSU1ldGhvZCBiZWluZyB2aXNpdGVkLgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgc3RhY2sgb2Ygb2JqZWN0cyB1cCB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZCAoIElNZXRob2QgamR0TWV0aG9kLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQlJdGVyYXRvciBpID0gZW5hYmxlZFJ1bGVzXy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCXsKLQkJCUlKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSA9IChJSmF2YVdlYlNlcnZpY2VSdWxlKWkubmV4dCgpOwotCQkJcnVsZS52aXNpdE1ldGhvZChqZHRNZXRob2QscGVhbnV0VHJhaWwpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIENvbGxlY3RzIHRoZSByZXN1bHRzIG9mIGFsbCBydWxlcyBpbiB0aGUgc2V0IHRvZ2V0aGVyLgotCSAqIElmIG9uZSBvciBtb3JlIHdhcm5pbmdzIG9yIGVycm9ycyBhcmUgZm91bmQsIHJldHVybnMKLQkgKiBhIHN0YXR1cyBvYmplY3Qgd2hvc2UgdG9wIGxldmVsIG1lc3NhZ2UgaXMgdGhlIHJvb3QKLQkgKiBtZXNzYWdlIHBhc3NlZCB0byB0aGlzIG1lc3NhZ2UsIG90aGVyd2lzZSwgcmV0dXJucyBhCi0JICogYmFzaWMgIk9LIiBzdGF0dXMuCi0JICogQHBhcmFtIHJvb3RNZXNzYWdlIFRoZSB3YXJuaW5nL2Vycm9yIG1lc3NhZ2UgdG8gYWN0IGFzCi0JICogdGhlIHJvb3QgbWVzc2FnZSBpZiBuZWNlc3NhcnkgKGllLiBpZiBhdCBsZWFzdCBvbmUgcnVsZQotCSAqIGluIHRoZSBzZXQgcmVwb3J0ZWQgYXQgbGVhc3Qgb25lIHdhcm5pbmcvZXJyb3IpLgotCSAqIEByZXR1cm4gVGhlIGNvbGxlY3RpdmUgc3RhdHVzLgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGdldFJlc3VsdHMgKCBTdHJpbmcgcm9vdE1lc3NhZ2UgKQotCXsKLQkJTGlzdCBsaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLQkJSXRlcmF0b3IgZSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGUuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSllLm5leHQoKTsKLQkJCUlTdGF0dXMgc3RhdHVzID0gcnVsZS5nZXRSZXN1bHRzKCk7Ci0JCQlpZiAoIXN0YXR1cy5pc09LKCkpCi0JCQl7Ci0JCQkJbGlzdC5hZGQoc3RhdHVzKTsKLQkJCX0KLQkJfQotCQlpZiAobGlzdC5zaXplKCkgPiAwKQotCQl7Ci0JCQlNdWx0aVN0YXR1cyBtdWx0aVN0YXR1cyA9IG5ldyBNdWx0aVN0YXR1cygib3JnLmVjbGlwc2UuanN0LndzIiwwLHJvb3RNZXNzYWdlLG51bGwpOwotCQkJSXRlcmF0b3IgbCA9IGxpc3QuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChsLmhhc05leHQoKSkKLQkJCXsKLQkJCQlJU3RhdHVzIHN0YXR1cyA9IChJU3RhdHVzKWwubmV4dCgpOwotCQkJCW11bHRpU3RhdHVzLmFkZEFsbChzdGF0dXMpOwotCQkJfQotCQkJcmV0dXJuIG11bHRpU3RhdHVzOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5PSywib3JnLmVjbGlwc2UuanN0LndzIiwwLCIiLG51bGwpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDQxMDc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSkRUUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIFRoaXMgcnVsZSBjaGVja3MgaWYgYSBzZXJ2aWNlIGNsYXNzCi0gKiBpcyBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3RhYmxlLgotICovCi1wdWJsaWMgY2xhc3MgSkFYUlBDUnVsZTAwMDEgZXh0ZW5kcyBKYXZhV2ViU2VydmljZVJ1bGUKLXsKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgcnVsZS4KLQkgKi8KLQlwdWJsaWMgSkFYUlBDUnVsZTAwMDEgKCkKLQl7Ci0JCWlkXyA9IDE7Ci0JCW5hbWVzcGFjZV8gPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9vcmcuZWNsaXBzZS5qc3Qud3MvamF4cnBjLzEuMSI7Ci0JCW5hbWVfID0gbnVsbDsKLQkJZGVzY3JpcHRpb25fID0gbnVsbDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0Q2xhc3Mob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vIEFuIGVtcHR5IHBlYW51dCB0cmFpbCBpbXBsaWVzIHRoaXMgaXMgdGhlIHJvb3QKLQkJLy8gY2xhc3Mgb3IgSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLgotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID09IDApCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCUpEVFJlc29sdmVyIHJlc29sdmVyID0gZW5naW5lXy5nZXRKRFRSZXNvbHZlcigpOwotCQkJCWlmICghcmVzb2x2ZXIuaXNDb25zdHJ1Y3RhYmxlKGpkdENsYXNzKSB8fCByZXNvbHZlci5pc0ludGVyZmFjZShqZHRDbGFzcykgfHwgcmVzb2x2ZXIuaXNBYnN0cmFjdChqZHRDbGFzcykpCi0JCQkJewotCQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1JVTEVfMDAwMSxqZHRDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7Ci0JCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCkpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIkludGVybmFsIGVycm9yIixlKSk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNDljMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5ydWxlczsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KRFRSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogVGhpcyBydWxlIGNoZWNrcyBpZiBhIHZhbHVlIHR5cGUgY2xhc3MKLSAqIGlzIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdGFibGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENSdWxlMDAwMiBleHRlbmRzIEphdmFXZWJTZXJ2aWNlUnVsZQotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBydWxlLgotCSAqLwotCXB1YmxpYyBKQVhSUENSdWxlMDAwMiAoKQotCXsKLQkJaWRfID0gMjsKLQkJbmFtZXNwYWNlXyA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL29yZy5lY2xpcHNlLmpzdC53cy9qYXhycGMvMS4xIjsKLQkJbmFtZV8gPSBudWxsOwotCQlkZXNjcmlwdGlvbl8gPSBudWxsOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRDbGFzcyhvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8gQW4gZW1wdHkgcGVhbnV0IHRyYWlsIGltcGxpZXMgdGhpcyBpcyB0aGUgcm9vdCBjbGFzcwotCQkvLyByb290IGNsYXNzIG9yIEpBWC1SUEMgc2VydmljZSBjbGFzcywgd2hlcmVhcyBhIG5vbi1lbXB0eQotCQkvLyBwZWFudXQgdHJhaWwgaW1wbGllcyB0aGlzIGlzIGEgY2xhc3MgZnJvbSBhIG1ldGhvZCwgZmllbGQKLQkJLy8gb3IgcHJvcGVydHkgc2lnbmF0dXJlLiBJbiB0aGUgZm9ybWVyIGNhc2UsIHJlbWVtYmVyIHRoZQotCQkvLyBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdHlwZSBqdXN0IGluIGNhc2Ugd2UgbmVlZCBpdCBmb3IgdGhlCi0JCS8vIGxhdHRlciBjYXNlLgotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID09IDApCi0JCXsKLQkJCXNlcnZpY2VDbGFzc05hbWVfID0gamR0Q2xhc3MuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlKRFRSZXNvbHZlciByZXNvbHZlciA9IGVuZ2luZV8uZ2V0SkRUUmVzb2x2ZXIoKTsKLQkJCQlTdHJpbmcgcW5hbWUgPSBqZHRDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJCQlpZiAoIXJlc29sdmVyLmlzU3RhbmRhcmRUeXBlKHFuYW1lKSkKLQkJCQl7IAotCQkJCQlpZiAoIXJlc29sdmVyLmlzQ29uc3RydWN0YWJsZShqZHRDbGFzcykgfHwgcmVzb2x2ZXIuaXNJbnRlcmZhY2UoamR0Q2xhc3MpIHx8IHJlc29sdmVyLmlzQWJzdHJhY3QoamR0Q2xhc3MpKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1JVTEVfMDAwMixxbmFtZSxzZXJ2aWNlQ2xhc3NOYW1lXyk7Ci0JCQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIkludGVybmFsIGVycm9yIixlKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNsYXNzTmFtZV87Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjViY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogVGhpcyBydWxlIHZlcmlmaWVzIHRoYXQgYSBzZXJ2aWNlIGNsYXNzIGhhcyBubyBvdmVybG9hZGVkIG1ldGhvZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENSdWxlMDAwMyBleHRlbmRzIEphdmFXZWJTZXJ2aWNlUnVsZQotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBydWxlLgotCSAqLwotCXB1YmxpYyBKQVhSUENSdWxlMDAwMyAoKQotCXsKLQkJaWRfID0gMzsKLQkJbmFtZXNwYWNlXyA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL29yZy5lY2xpcHNlLmpzdC53cy9qYXhycGMvMS4xIjsKLQkJbmFtZV8gPSBudWxsOwotCQlkZXNjcmlwdGlvbl8gPSBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI2luaXQob3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdCAoIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUgZW5naW5lICkKLQl7Ci0JCXN1cGVyLmluaXQoZW5naW5lKTsKLQkJbWV0aG9kTmFtZXNfID0gbmV3IEhhc2hNYXAoKTsKLQkJb3ZlcmxvYWRlZE1ldGhvZE5hbWVzXyA9IG5ldyBIYXNoU2V0KCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRDbGFzcyhvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8KLQkJLy8gQW4gZW1wdHkgcGVhbnV0IHRyYWlsIGltcGxpZXMgdGhpcyBpcyB0aGUgcm9vdAotCQkvLyBjbGFzcywgYWthLiBKQVgtUlBDIHNlcnZpY2UgY2xhc3MuIFB1dCBhc2lkZQotCQkvLyB0aGUgY2xhc3MgbmFtZSBpbiBjYXNlIHZpc2l0TWV0aG9kKCkgbmVlZHMgaXQuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPT0gMCkKLQkJewotCQkJc2VydmljZUNsYXNzTmFtZV8gPSBqZHRDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJfQotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRNZXRob2Qob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kICggSU1ldGhvZCBqZHRNZXRob2QsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vCi0JCS8vIEEgcGVhbnV0IHRyYWlsIG9mIGxlbmd0aCBvbmUgaW1wbGllcyB0aGlzIGlzIGEgbWV0aG9kCi0JCS8vIGJlbG9uZ2luZyB0byB0aGUgcm9vdCBjbGFzcywgYWthLiBKQVgtUlBDIHNlcnZpY2UgY2xhc3MuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPT0gMSkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJLy8KLQkJCQkvLyBJZiB3ZSBoYXZlIGVuY291bnRlcmVkIHRoaXMgbWV0aG9kIGFscmVhZHkgYnV0IGhhdmVuJ3QKLQkJCQkvLyByZXBvcnRlZCB0aGUgb3ZlcmxvYWQgY29uZGl0aW9uLCByZXBvcnQgaXQuCi0JCQkJLy8KLQkJCQlTdHJpbmcgbWV0aG9kTmFtZSA9IGpkdE1ldGhvZC5nZXRFbGVtZW50TmFtZSgpOwotCQkJCVN0cmluZyBmaXJzdFBhcmFtZXRlclNpZ25hdHVyZSA9IChTdHJpbmcpbWV0aG9kTmFtZXNfLmdldChtZXRob2ROYW1lKTsKLQkJCQlTdHJpbmcgdGhpc1BhcmFtZXRlclNpZ25hdHVyZSA9IGZsYXR0ZW5lZFNpZ25hdHVyZU9mKGpkdE1ldGhvZCk7Ci0JCQkJaWYgKHRoaXNQYXJhbWV0ZXJTaWduYXR1cmUgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWlmIChmaXJzdFBhcmFtZXRlclNpZ25hdHVyZSAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQkvLwotCQkJCQkJLy8gSWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCB0aGlzIG1ldGhvZCdzIG5hbWUgYWxyZWFkeSwKLQkJCQkJCS8vIGJ1dCBoYXZlIG5vdCB5ZXQgZGV0ZXJtaW5lZCBpZiBpdCBpcyBvdmVybG9hZGVkLAotCQkJCQkJLy8gdGhlbiBjb21wYXJlIHRoaXMgbWV0aG9kJ3MgcGFyYW1ldGVyIHNpZ25hdHVyZSB3aXRoCi0JCQkJCQkvLyB0aGF0IG9mIHRoZSAiZmlyc3Qgc2lnbmF0dXJlIiBvZiB0aGUgbWV0aG9kIG5hbWUuCi0JCQkJCQkvLyBUaGUgbW9tZW50IHdlIGZpbmQgYSBzZWNvbmQgc2lnbmF0dXJlIGZvciBhIGdpdmVuCi0JCQkJCQkvLyBtZXRob2QgbmFtZSwgd2UgaGF2ZSBhbiBvdmVybG9hZCBjb25kaXRpb24uCi0JCQkJCQkvLwotCQkJCQkJaWYgKCFvdmVybG9hZGVkTWV0aG9kTmFtZXNfLmNvbnRhaW5zKG1ldGhvZE5hbWUpICYmICF0aGlzUGFyYW1ldGVyU2lnbmF0dXJlLmVxdWFscyhmaXJzdFBhcmFtZXRlclNpZ25hdHVyZSkpCi0JCQkJCQl7Ci0JCQkJCQkJb3ZlcmxvYWRlZE1ldGhvZE5hbWVzXy5hZGQobWV0aG9kTmFtZSk7Ci0JCQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9SVUxFXzAwMDMsbWV0aG9kTmFtZSxzZXJ2aWNlQ2xhc3NOYW1lXyk7Ci0JCQkJCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCQkvLwotCQkJCQkJLy8gSWYgd2UgaGF2ZSByZWNvcmRlZCBubyBzaWduYXR1cmUgZm9yIHRoZSBnaXZlbiBtZXRob2QKLQkJCQkJCS8vIG5hbWUgKGllLiB3ZSBoYXZlIG5vdCBlbmNvdW50ZXJlZCB0aGUgbWV0aG9kIG5hbWUgeWV0KSwKLQkJCQkJCS8vIHRoZW4gcmVjb3JkIHRoaXMgb25lLiBBbnkgImZpcnN0IHNpZ25hdHVyZSIgd2lsbCBkby4KLQkJCQkJCS8vCi0JCQkJCQltZXRob2ROYW1lc18ucHV0KG1ldGhvZE5hbWUsdGhpc1BhcmFtZXRlclNpZ25hdHVyZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJLy8gRG8gbm90aGluZy4KLQkJCX0KLQkJfQotCX0KLQkKLQkvKgotCSAqIEdyYWJzIHRoZSB0eXBlcyBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZ2l2ZW4gbWV0aG9kCi0JICogYW5kIGZsYXR0ZW5zIHRoZW4gaW50byBhIHNpbmdsZSBzdHJpbmcgc3VmZmljaWVudCB0bwotCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gb3ZlcmxvYWRlZCB2cy4gb3ZlcnJpZGRlbiBtZXRob2RzLgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGZsYXR0ZW5lZFNpZ25hdHVyZU9mICggSU1ldGhvZCBqZHRNZXRob2QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCVN0cmluZ1tdIHNpZ25hdHVyZXMgPSBlbmdpbmVfLmdldEpEVFJlc29sdmVyKCkuZ2V0UGFyYW1ldGVyVHlwZU5hbWVzKGpkdE1ldGhvZCk7Ci0JCVN0cmluZ0J1ZmZlciBmbGF0dGVuZWRTaWduYXR1cmUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvciAoaW50IHM9MDsgczxzaWduYXR1cmVzLmxlbmd0aDsgcysrKQotCQl7Ci0JCQlmbGF0dGVuZWRTaWduYXR1cmUuYXBwZW5kKHNpZ25hdHVyZXNbc10pLmFwcGVuZCgiLCIpOwotCQl9Ci0JCXJldHVybiBmbGF0dGVuZWRTaWduYXR1cmUudG9TdHJpbmcoKTsKLQl9Ci0JCi0JcHJpdmF0ZSBNYXAgbWV0aG9kTmFtZXNfOwotCXByaXZhdGUgU2V0IG92ZXJsb2FkZWRNZXRob2ROYW1lc187Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNsYXNzTmFtZV87Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDA1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NmNmN2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KRFRSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogVGhpcyBydWxlIHZlcmlmaWVzIHRoYXQgdGhlIG1ldGhvZHMgb2YgYSBzZXJ2aWNlIGNsYXNzCi0gKiB1c2VzIG9ubHkgSkFYLVJQQyBzdXBwb3J0ZWQgdHlwZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENSdWxlMDAwNSBleHRlbmRzIEphdmFXZWJTZXJ2aWNlUnVsZQotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBydWxlLgotCSAqLwotCXB1YmxpYyBKQVhSUENSdWxlMDAwNSAoKQotCXsKLQkJaWRfID0gNTsKLQkJbmFtZXNwYWNlXyA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL29yZy5lY2xpcHNlLmpzdC53cy9qYXhycGMvMS4xIjsKLQkJbmFtZV8gPSBudWxsOwotCQlkZXNjcmlwdGlvbl8gPSBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI2luaXQob3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdCAoIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUgZW5naW5lICkKLQl7Ci0JCXN1cGVyLmluaXQoZW5naW5lKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdENsYXNzKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRDbGFzcyAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLwotCQkvLyBBbiBlbXB0eSBwZWFudXQgdHJhaWwgaW1wbGllcyB0aGlzIGlzIHRoZSByb290Ci0JCS8vIGNsYXNzLCBha2EuIEpBWC1SUEMgc2VydmljZSBjbGFzcy4gUHV0IGFzaWRlCi0JCS8vIHRoZSBjbGFzcyBuYW1lIGluIGNhc2UgdmlzaXRNZXRob2QoKSBuZWVkcyBpdC4KLQkJLy8KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA9PSAwKQotCQl7Ci0JCQlzZXJ2aWNlQ2xhc3NOYW1lXyA9IGpkdENsYXNzLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdE1ldGhvZChvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRNZXRob2QgKCBJTWV0aG9kIGpkdE1ldGhvZCwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8KLQkJLy8gQSBwZWFudXQgdHJhaWwgb2YgbGVuZ3RoIG9uZSBpbXBsaWVzIHRoaXMgaXMgYSBtZXRob2QKLQkJLy8gYmVsb25naW5nIHRvIHRoZSByb290IGNsYXNzLCBha2EuIEpBWC1SUEMgc2VydmljZSBjbGFzcy4KLQkJLy8KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA9PSAxKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlTdHJpbmcgbWV0aG9kTmFtZSA9IGpkdE1ldGhvZC5nZXRFbGVtZW50TmFtZSgpOwotCQkJCS8vCi0JCQkJLy8gQ2hlY2sgdGhlIG1ldGhvZCByZXR1cm4gdHlwZSBmb3IgY29tcGxpYW5jZS4KLQkJCQkvLyBBbnkgSmF2YSBwcmltaXRpdmUgb3Igc3RhbmRhcmQgKCJqYXZhLiIgb3IgImphdmF4LiIpIHR5cGUKLQkJCQkvLyB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgSkFYLVJQQyB3aWxsIGdldCBmbGFnZ2VkLgotCQkJCS8vIEFueSBub24tcHJpbWl0aXZlIG9yIG5vbi1zdGFuZGFyZCB0eXBlIGlzIHByZXN1bWVkIHRvIGJlIGEKLQkJCQkvLyBwb3RlbnRpYWwgdmFsdWUgdHlwZSBhbmQgaXMgYnlwYXNzZWQgc2luY2UgdGhlIHJ1bGUgZW5naW5lCi0JCQkJLy8gd2lsbCBuYXZpZ2F0ZSBpbnRvIHRoZSBwb3RlbnRpYWwgdmFsdWUgdHlwZSdzIGNsYXNzLgotCQkJCS8vCi0JCQkJSkRUUmVzb2x2ZXIgcmVzb2x2ZXIgPSBlbmdpbmVfLmdldEpEVFJlc29sdmVyKCk7Ci0JCQkJU3RyaW5nIHJldHVyblR5cGVOYW1lID0gcmVzb2x2ZXIuZ2V0UmV0dXJuVHlwZU5hbWUoamR0TWV0aG9kKTsKLQkJCQlpZiAoKHJlc29sdmVyLmlzUHJpbWl0aXZlVHlwZShyZXR1cm5UeXBlTmFtZSkgfHwgcmVzb2x2ZXIuaXNTdGFuZGFyZFR5cGUocmV0dXJuVHlwZU5hbWUpKSAmJiAhcmVzb2x2ZXIuaXNKQVhSUENTdGFuZGFyZFR5cGUocmV0dXJuVHlwZU5hbWUpKQotCQkJCXsKLQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9SVUxFXzAwMDUsbmV3IFN0cmluZ1tdIHttZXRob2ROYW1lLHNlcnZpY2VDbGFzc05hbWVfLHJldHVyblR5cGVOYW1lfSk7Ci0JCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCkpOwotCQkJCX0KLQkJCQkvLwotCQkJCS8vIENoZWNrIHRoZSBtZXRob2QgcGFyYW1ldGVyIHR5cGVzIGZvciBjb21wbGlhbmNlLgotCQkJCS8vIFNhbWUgY29tbWVudCBhcyBhYm92ZSwgb25seSBhcHBsaWVkIHRvIHRoZSBtZXRob2QncyBwYXJhbWV0ZXJzLgotCQkJCS8vCi0JCQkJU3RyaW5nW10gcGFyYW1ldGVyVHlwZU5hbWVzID0gcmVzb2x2ZXIuZ2V0UGFyYW1ldGVyVHlwZU5hbWVzKGpkdE1ldGhvZCk7Ci0JCQkJZm9yIChpbnQgcD0wOyBwPHBhcmFtZXRlclR5cGVOYW1lcy5sZW5ndGg7IHArKykKLQkJCQl7Ci0JCQkJCWlmICgocmVzb2x2ZXIuaXNQcmltaXRpdmVUeXBlKHBhcmFtZXRlclR5cGVOYW1lc1twXSkgfHwgcmVzb2x2ZXIuaXNTdGFuZGFyZFR5cGUocGFyYW1ldGVyVHlwZU5hbWVzW3BdKSkgJiYgIXJlc29sdmVyLmlzSkFYUlBDU3RhbmRhcmRUeXBlKHBhcmFtZXRlclR5cGVOYW1lc1twXSkpCi0JCQkJCXsKLQkJCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfUlVMRV8wMDA1LG5ldyBTdHJpbmdbXSB7bWV0aG9kTmFtZSxzZXJ2aWNlQ2xhc3NOYW1lXyxwYXJhbWV0ZXJUeXBlTmFtZXNbcF19KTsKLQkJCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQkJewotCQkJCS8vIERvIG5vdGhpbmcuCi0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNsYXNzTmFtZV87Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwN2FmZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KRFRSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogVGhpcyBydWxlIHZlcmlmaWVzIHRoYXQgdGhlIGZpZWxkcyBhbmQgcHJvcGVydGllcyBvZiBhCi0gKiB2YWx1ZSB0eXBlIGNsYXNzIHVzZXMgb25seSBKQVgtUlBDIHN1cHBvcnRlZCB0eXBlcy4KLSAqLwotcHVibGljIGNsYXNzIEpBWFJQQ1J1bGUwMDA2IGV4dGVuZHMgSmF2YVdlYlNlcnZpY2VSdWxlCi17Ci0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHJ1bGUuCi0JICovCi0JcHVibGljIEpBWFJQQ1J1bGUwMDA2ICgpCi0JewotCQlpZF8gPSA2OwotCQluYW1lc3BhY2VfID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvb3JnLmVjbGlwc2UuanN0LndzL2pheHJwYy8xLjEiOwotCQluYW1lXyA9IG51bGw7Ci0JCWRlc2NyaXB0aW9uXyA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjaW5pdChvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0ICggSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmUgKQotCXsKLQkJc3VwZXIuaW5pdChlbmdpbmUpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0Q2xhc3Mob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vCi0JCS8vIEFuIGVtcHR5IHBlYW51dCB0cmFpbCBpbXBsaWVzIHRoaXMgaXMgdGhlIHJvb3QKLQkJLy8gY2xhc3MsIGFrYS4gSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLiBQdXQgYXNpZGUKLQkJLy8gdGhlIGNsYXNzIG5hbWUgaW4gY2FzZSB2aXNpdE1ldGhvZCgpIG5lZWRzIGl0LgotCQkvLwotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID09IDApCi0JCXsKLQkJCXNlcnZpY2VDbGFzc05hbWVfID0gamR0Q2xhc3MuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCX0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0TWV0aG9kKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2QsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdEZpZWxkICggSUZpZWxkIGpkdEZpZWxkLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLwotCQkvLyBBIHBlYW51dCB0cmFpbCBvZiBsZW5ndGggZ3JlYXRlciB0aGFuIG9uZSBpbXBsaWVzIHRoaXMgaXMgYQotCQkvLyBmaWVsZCBiZWxvbmdpbmcgdG8gYSBjbGFzcyBvdGhlciB0aGFuIHRoZSByb290IChha2EuIEpBWC1SUEMKLQkJLy8gc2VydmljZSkgY2xhc3MsIG5hbWVseSBhIHByZXN1bWVkIHZhbHVlIHR5cGUgY2xhc3MuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPiAxKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQkvLwotCQkJCS8vIEFueSBKYXZhIHByaW1pdGl2ZSBvciBzdGFuZGFyZCAoImphdmEuIiBvciAiamF2YXguIikgdHlwZQotCQkJCS8vIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBKQVgtUlBDIHdpbGwgZ2V0IGZsYWdnZWQuCi0JCQkJLy8gQW55IG5vbi1wcmltaXRpdmUgb3Igbm9uLXN0YW5kYXJkIHR5cGUgaXMgcHJlc3VtZWQgdG8gYmUgYQotCQkJCS8vIHBvdGVudGlhbCB2YWx1ZSB0eXBlIGFuZCBpcyBieXBhc3NlZCBzaW5jZSB0aGUgcnVsZSBlbmdpbmUKLQkJCQkvLyB3aWxsIG5hdmlnYXRlIGludG8gdGhlIHBvdGVudGlhbCB2YWx1ZSB0eXBlJ3MgY2xhc3MuCi0JCQkJLy8KLQkJCQlKRFRSZXNvbHZlciByZXNvbHZlciA9IGVuZ2luZV8uZ2V0SkRUUmVzb2x2ZXIoKTsKLQkJCQlTdHJpbmcgZmllbGRUeXBlTmFtZSA9IHJlc29sdmVyLmdldEZpZWxkVHlwZU5hbWUoamR0RmllbGQpOwotCQkJCWlmICgocmVzb2x2ZXIuaXNQcmltaXRpdmVUeXBlKGZpZWxkVHlwZU5hbWUpIHx8IHJlc29sdmVyLmlzU3RhbmRhcmRUeXBlKGZpZWxkVHlwZU5hbWUpKSAmJiAhcmVzb2x2ZXIuaXNKQVhSUENTdGFuZGFyZFR5cGUoZmllbGRUeXBlTmFtZSkpCi0JCQkJewotCQkJCQkvLwotCQkJCQkvLyBUaGUgZmllbGQgcHJldHR5IG11Y2ggTVVTVCBiZSBkZWNsYXJlZCBpbiBhIHR5cGUgb3IKLQkJCQkJLy8gd2Ugd291bGQgbm90IGhhdmUgZ290dGVuIGhlcmUuIFN0aWxsLCBiZXN0IHRvIGJlIHNhZmUuCi0JCQkJCS8vCi0JCQkJCUlUeXBlIHZhbHVlVHlwZSA9IGpkdEZpZWxkLmdldERlY2xhcmluZ1R5cGUoKTsKLQkJCQkJaWYgKHZhbHVlVHlwZSAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgdmFsdWVUeXBlQ2xhc3NOYW1lID0gdmFsdWVUeXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQkJCQkJU3RyaW5nIGZpZWxkTmFtZSA9IGpkdEZpZWxkLmdldEVsZW1lbnROYW1lKCk7Ci0JCQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1JVTEVfMDAwNixuZXcgU3RyaW5nW10ge2ZpZWxkTmFtZSx2YWx1ZVR5cGVDbGFzc05hbWUsc2VydmljZUNsYXNzTmFtZV8sZmllbGRUeXBlTmFtZX0pOwotCQkJCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJLy8gRG8gbm90aGluZy4KLQkJCX0KLQkJfQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0UHJvcGVydHkob3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5LCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRQcm9wZXJ0eSAoIElKYXZhQmVhblByb3BlcnR5IHByb3BlcnR5LCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLwotCQkvLyBBIHBlYW51dCB0cmFpbCBvZiBsZW5ndGggZ3JlYXRlciB0aGFuIG9uZSBpbXBsaWVzIHRoaXMgaXMgYQotCQkvLyBwcm9wZXJ0eSBiZWxvbmdpbmcgdG8gYSBjbGFzcyBvdGhlciB0aGFuIHRoZSByb290IChha2EuIEpBWC1SUEMKLQkJLy8gc2VydmljZSkgY2xhc3MsIG5hbWVseSBhIHByZXN1bWVkIHZhbHVlIHR5cGUgY2xhc3MuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPiAxKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQkvLwotCQkJCS8vIEFueSBKYXZhIHByaW1pdGl2ZSBvciBzdGFuZGFyZCAoImphdmEuIiBvciAiamF2YXguIikgdHlwZQotCQkJCS8vIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBKQVgtUlBDIHdpbGwgZ2V0IGZsYWdnZWQuCi0JCQkJLy8gQW55IG5vbi1wcmltaXRpdmUgb3Igbm9uLXN0YW5kYXJkIHR5cGUgaXMgcHJlc3VtZWQgdG8gYmUgYQotCQkJCS8vIHBvdGVudGlhbCB2YWx1ZSB0eXBlIGFuZCBpcyBieXBhc3NlZCBzaW5jZSB0aGUgcnVsZSBlbmdpbmUKLQkJCQkvLyB3aWxsIG5hdmlnYXRlIGludG8gdGhlIHBvdGVudGlhbCB2YWx1ZSB0eXBlJ3MgY2xhc3MuCi0JCQkJLy8KLQkJCQlKRFRSZXNvbHZlciByZXNvbHZlciA9IGVuZ2luZV8uZ2V0SkRUUmVzb2x2ZXIoKTsKLQkJCQlTdHJpbmcgcHJvcGVydHlUeXBlTmFtZSA9IHJlc29sdmVyLmdldFByb3BlcnR5VHlwZU5hbWUocHJvcGVydHkpOwotCQkJCWlmICgocmVzb2x2ZXIuaXNQcmltaXRpdmVUeXBlKHByb3BlcnR5VHlwZU5hbWUpIHx8IHJlc29sdmVyLmlzU3RhbmRhcmRUeXBlKHByb3BlcnR5VHlwZU5hbWUpKSAmJiAhcmVzb2x2ZXIuaXNKQVhSUENTdGFuZGFyZFR5cGUocHJvcGVydHlUeXBlTmFtZSkpCi0JCQkJewotCQkJCQkvLwotCQkJCQkvLyBUaGUgZmllbGQgcHJldHR5IG11Y2ggTVVTVCBiZSBkZWNsYXJlZCBpbiBhIHR5cGUgb3IKLQkJCQkJLy8gd2Ugd291bGQgbm90IGhhdmUgZ290dGVuIGhlcmUuIFN0aWxsLCBiZXN0IHRvIGJlIHNhZmUuCi0JCQkJCS8vCi0JCQkJCUlUeXBlIHZhbHVlVHlwZSA9IHByb3BlcnR5LmdldERlY2xhcmluZ1R5cGUoKTsKLQkJCQkJaWYgKHZhbHVlVHlwZSAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgdmFsdWVUeXBlQ2xhc3NOYW1lID0gdmFsdWVUeXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQkJCQkJU3RyaW5nIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LmdldE5hbWUoKTsKLQkJCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfUlVMRV8wMDA2LG5ldyBTdHJpbmdbXSB7cHJvcGVydHlOYW1lLHZhbHVlVHlwZUNsYXNzTmFtZSxzZXJ2aWNlQ2xhc3NOYW1lXyxwcm9wZXJ0eVR5cGVOYW1lfSk7Ci0JCQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQkvLyBEbyBub3RoaW5nLgotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VDbGFzc05hbWVfOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlU2V0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlU2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjFjN2E2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZVNldEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlU2V0OwotCi0vKioKLSAqIEEgZmFjdG9yeSB0aGF0IHByb2R1Y2VzIGEgSmF2YVdlYlNlcnZpY2VSdWxlU2V0Ci0gKiBmb3IgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENSdWxlU2V0RmFjdG9yeQotewotCXByaXZhdGUgSkFYUlBDUnVsZVNldEZhY3RvcnkgKCkKLQl7Ci0JCS8vIE5vdCBwdWJsaWNseSBjb25zdHJ1Y3RhYmxlLgotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGEgc2V0IG9mIHJ1bGVzIGZvciBhbmFseXppbmcgSmF2YSBjbGFzc2VzCi0JICogZm9yIGNvbXBsaWFuY2UgdG8gdGhlIHJ1bGVzIG9mIEpBWC1SUEMgMS4xLiAgCi0JICogQHJldHVybiBBIHNldCBvZiBKQVgtUlBDIDEuMSBhbmFseXNpcyBydWxlcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBuZXdSdWxlU2V0ICgpCi0JewotCQlKYXZhV2ViU2VydmljZVJ1bGVTZXQgc2V0ID0gbmV3IEphdmFXZWJTZXJ2aWNlUnVsZVNldCgpOwotCQlzZXQuYWRkUnVsZShuZXcgSkFYUlBDUnVsZTAwMDEoKSk7Ci0JCXNldC5hZGRSdWxlKG5ldyBKQVhSUENSdWxlMDAwMigpKTsKLQkJc2V0LmFkZFJ1bGUobmV3IEpBWFJQQ1J1bGUwMDAzKCkpOwotCQlzZXQuYWRkUnVsZShuZXcgSkFYUlBDUnVsZTAwMDUoKSk7Ci0JCXNldC5hZGRSdWxlKG5ldyBKQVhSUENSdWxlMDAwNigpKTsKLQkJcmV0dXJuIHNldDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1BlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE0Y2Y5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDMxNCAgIDE1NDU0MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBpcyB0cmFja2luZyBleHRlbnNpb25zIHVzaW5nIGxhYmVsIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIElECi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0IGltcGxlbWVudHMgU2NlbmFyaW9Db250ZXh0Ci17Ci0gIHB1YmxpYyBQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0KCkKLSAgewotICAgIHN1cGVyKFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7IAotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9hZCgpCi0gIHsKLSAgICBTY2VuYXJpb0RlZmF1bHRzIGRlZmF1bHRzID0gbmV3IFNjZW5hcmlvRGVmYXVsdHMoKTsKLSAgICBTdHJpbmdbXSBpZHMgPSBkZWZhdWx0cy5nZXRXZWJTZXJ2aWNlVGVzdElkcygpOwotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaSAhPSAwKSBzYi5hcHBlbmQoIiwiKTsKLSAgICAgIHNiLmFwcGVuZChpZHNbaV0pOwotICAgIH0KLSAgICBTdHJpbmcgbm9uSmF2YVRlc3RTZXJ2aWNlID0gZGVmYXVsdHMuZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlRGVmYXVsdCgpOwotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVEVTVF9UWVBFUywgc2IudG9TdHJpbmcoKSk7Ci0gICAgc2V0RGVmYXVsdFN0cmluZ0lmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfTk9OX0pBVkFfVEVTVF9TRVJWSUNFLCBub25KYXZhVGVzdFNlcnZpY2UpOwotICAgIAotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUsIGRlZmF1bHRzLndlYnNlcnZpY2VDbGllbnRUeXBlRGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdFN0cmluZ0lmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfV0VCU0VSVklDRV9UWVBFLCBkZWZhdWx0cy53ZWJzZXJ2aWNlVHlwZUlkRGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdEJvb2xlYW5JZk5vRGVmYXVsdChQUkVGRVJFTkNFX0dFTkVSQVRFX1BST1hZLCBkZWZhdWx0cy5nZW5lcmF0ZVByb3h5RGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdEJvb2xlYW5JZk5vRGVmYXVsdChQUkVGRVJFTkNFX0xBVU5DSF9XRUJTRVJWSUNFX0VYUExPUkVSLCBkZWZhdWx0cy5sYXVuY2hXZWJzZXJ2aWNlRXhwbG9yZXJEZWZhdWx0KCkgKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfSU5TVEFMTF9XRUJTRVJWSUNFLCBkZWZhdWx0cy5pbnN0YWxsV2Vic2VydmljZURlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9JTlNUQUxMX0NMSUVOVCwgZGVmYXVsdHMuaW5zdGFsbENsaWVudERlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9TVEFSVF9XRUJTRVJWSUNFLCBkZWZhdWx0cy5zdGFydFdlYnNlcnZpY2VEZWZhdWx0KCkgKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfVEVTVF9XRUJTRVJWSUNFLCBkZWZhdWx0cy50ZXN0V2Vic2VydmljZURlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9NT05JVE9SX1dFQlNFUlZJQ0UsIGRlZmF1bHRzLmdldE1vbml0b3JXZWJTZXJ2aWNlRGVmYXVsdCgpKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSwgZGVmYXVsdHMubGF1bmNoU2FtcGxlKCkgKTsKLSAgICAKLSAgICBzZXREZWZhdWx0SW50SWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9HRU5FUkFURV9XRUJTRVJWSUNFLCBkZWZhdWx0cy5zZXJ2aWNlR2VuZXJhdGlvbkRlZmF1bHQoKSk7IC8vanZoCi0gICAgc2V0RGVmYXVsdEludElmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfR0VORVJBVEVfQ0xJRU5ULCBkZWZhdWx0cy5jbGllbnRHZW5lcmF0aW9uRGVmYXVsdCgpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXROb25KYXZhVGVzdFNlcnZpY2UoKQotICB7Ci0gICAgV2ViU2VydmljZVRlc3RSZWdpc3RyeSByZWdpc3RyeSA9IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICBTdHJpbmdbXSBpZHMgPSBnZXRXZWJTZXJ2aWNlVGVzdElkcygpOwotICAgIFZlY3RvciBuZXdUZXN0Q2FzZXMgPSBuZXcgVmVjdG9yKCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgV2ViU2VydmljZVRlc3RFeHRlbnNpb24gd3NlID0gKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKSByZWdpc3RyeQotICAgICAgICAgIC5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5SWQoaWRzW2ldKTsKLSAgICAgIGlmICh3c2UgIT0gbnVsbCAmJiB3c2UudGVzdFdTREwoKSkgCi0JCSAgbmV3VGVzdENhc2VzLmFkZEVsZW1lbnQod3NlLmdldExhYmVsKCkpOwotICAgIH0KLQlTdHJpbmdbXSB3c2RsVGVzdEFycmF5ID0gbmV3IFN0cmluZ1tuZXdUZXN0Q2FzZXMuc2l6ZSgpXTsKLQlFbnVtZXJhdGlvbiBlID0gbmV3VGVzdENhc2VzLmVsZW1lbnRzKCk7Ci0JaW50IGkgPSAwOwotCXdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotCSAgd3NkbFRlc3RBcnJheVtpXSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotCSAgaSsrOwotCX0KLQkKLQlyZXR1cm4gd3NkbFRlc3RBcnJheTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVRlc3RJZHMoU3RyaW5nW10gaWRzKQotICB7Ci0JU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotCXsKLQkgIGlmIChpICE9IDApIHNiLmFwcGVuZCgiLCIpOwotCSAgc2IuYXBwZW5kKGlkc1tpXSk7Ci0JfQotCXNldFZhbHVlKFBSRUZFUkVOQ0VfV0VCU0VSVklDRV9URVNUX1RZUEVTLCBzYi50b1N0cmluZygpKTsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RJZHMoKQotICB7Ci0JU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcigKLQkgICAgZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVEVTVF9UWVBFUyksICIsIik7Ci0JU3RyaW5nW10gcyA9IG5ldyBTdHJpbmdbc3QuY291bnRUb2tlbnMoKV07Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7Ci0JICAvLyAxNTQ1NDM6IHdlIGhhdmUgdG8gY29udGludWUgdG8gaW50ZXJwcmV0IHRoZSBvbGQgbGFiZWwgc3R5bGUgcHJlZmVyZW5jZXMKLQkgIHNbaV0gPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCkubGFiZWxUb0lkKHN0Lm5leHRUb2tlbigpKTsKLQl9Ci0JcmV0dXJuIHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUZXN0VHlwZXMoU3RyaW5nW10gaWRzKQotICB7Ci0JLy8gMTU0NTQzOiBkZXByZWNhdGVkLCBub29wCi0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpCi0gIHsKLQlXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCVN0cmluZ1tdIGlkcyA9IGdldFdlYlNlcnZpY2VUZXN0SWRzKCk7ICAKLSAgICBWZWN0b3IgbGFiZWxzID0gbmV3IFZlY3RvcigpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHdzZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbikgcmVnaXN0cnkKLSAgICAgICAgICAuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeUlkKGlkc1tpXSk7Ci0gICAgICBpZiAod3NlICE9IG51bGwpIAotCQkgIGxhYmVscy5hZGRFbGVtZW50KHdzZS5nZXRMYWJlbCgpKTsKLSAgICB9CSAgCSAgCi0gICAgU3RyaW5nW10gcyA9IG5ldyBTdHJpbmdbbGFiZWxzLnNpemUoKV07Ci0gICAgbGFiZWxzLmNvcHlJbnRvKHMpOwotICAgIHJldHVybiBzOwotICB9Ci0KLSAgcHVibGljIFNjZW5hcmlvQ29udGV4dCBjb3B5KCkKLSAgewotICAgIFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCgpOwotICAgIGNvbnRleHQuc2V0V2ViU2VydmljZVRlc3RJZHMoZ2V0V2ViU2VydmljZVRlc3RJZHMoKSk7Ci0gICAgY29udGV4dC5zZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKGdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKSk7Ci0gICAgY29udGV4dC5zZXROb25KYXZhVGVzdFNlcnZpY2UoZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKCkpOwotICAgIAotICAgIGNvbnRleHQuc2V0Q2xpZW50V2ViU2VydmljZVR5cGUoIGdldENsaWVudFdlYlNlcnZpY2VUeXBlKCkgKTsKLSAgICBjb250ZXh0LnNldFdlYlNlcnZpY2VUeXBlKCBnZXRXZWJTZXJ2aWNlVHlwZSgpICk7Ci0gICAgY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlcigpICk7Ci0gICAgY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIGdldFN0YXJ0V2ViU2VydmljZSgpICk7Ci0gICAgY29udGV4dC5zZXRHZW5lcmF0ZVByb3h5KCBnZXRHZW5lcmF0ZVByb3h5KCkgKTsKLSAgICBjb250ZXh0LnNldFRlc3RXZWJTZXJ2aWNlKCBnZXRUZXN0V2ViU2VydmljZSgpICk7Ci0gICAgY29udGV4dC5zZXRNb25pdG9yV2ViU2VydmljZShnZXRNb25pdG9yV2ViU2VydmljZSgpKTsKLSAgICBjb250ZXh0LnNldExhdW5jaFNhbXBsZUVuYWJsZWQoIGlzTGF1bmNoU2FtcGxlRW5hYmxlZCgpICk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRleHQ7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldEdlbmVyYXRlUHJveHkoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHlEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBnZXREZWZhdWx0Qm9vbGVhbihQUkVGRVJFTkNFX0dFTkVSQVRFX1BST1hZKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX0xBVU5DSF9XRUJTRVJWSUNFX0VYUExPUkVSKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9MQVVOQ0hfV0VCU0VSVklDRV9FWFBMT1JFUik7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0U3RhcnRXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0V2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9TVEFSVF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9TVEFSVF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9JTlNUQUxMX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfSU5TVEFMTF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX0lOU1RBTExfQ0xJRU5UKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudERlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfSU5TVEFMTF9DTElFTlQpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldFRlc3RXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX1RFU1RfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9URVNUX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldFdlYlNlcnZpY2VUeXBlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNTdHJpbmcoUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RZUEUpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVFlQRSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0Q2xpZW50V2ViU2VydmljZVR5cGUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFdlYlNlcnZpY2VUeXBlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUsIHZhbHVlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldExhdW5jaFdlYlNlcnZpY2VFeHBsb3Jlcihib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9MQVVOQ0hfV0VCU0VSVklDRV9FWFBMT1JFUiwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldEluc3RhbGxXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsV2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc2V0VmFsdWUoIFBSRUZFUkVOQ0VfSU5TVEFMTF9XRUJTRVJWSUNFLCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0SW5zdGFsbFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxDbGllbnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX0lOU1RBTExfQ0xJRU5ULCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0U3RhcnRXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGFydFdlYlNlcnZpY2UoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX1NUQVJUX1dFQlNFUlZJQ0UsIHZhbHVlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRUZXN0V2ViU2VydmljZShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGVzdFdlYlNlcnZpY2UoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX1RFU1RfV0VCU0VSVklDRSwgdmFsdWUpOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0V2ViU2VydmljZVR5cGUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUeXBlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVFlQRSwgdmFsdWUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRNb25pdG9yV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yV2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9NT05JVE9SX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfTU9OSVRPUl9XRUJTRVJWSUNFKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0TW9uaXRvcldlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZShQUkVGRVJFTkNFX01PTklUT1JfV0VCU0VSVklDRSwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBnZXREZWZhdWx0Qm9vbGVhbihQUkVGRVJFTkNFX0xBVU5DSF9TQU1QTEUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2lzTGF1bmNoU2FtcGxlRW5hYmxlZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0TGF1bmNoU2FtcGxlRW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoU2FtcGxlRW5hYmxlZChib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc2V0VmFsdWUoIFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSwgdmFsdWUpOwotICB9Ci0gIAotICAvL2p2aAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlV2ViU2VydmljZSgpCi0gIHsKLQkgIHJldHVybiBnZXRWYWx1ZUFzSW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBnZXREZWZhdWx0SW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlV2ViU2VydmljZShpbnQgdmFsdWUpCi0gIHsKLQkgIHNldFZhbHVlKFBSRUZFUkVOQ0VfR0VORVJBVEVfV0VCU0VSVklDRSwgdmFsdWUpOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50RGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBnZXREZWZhdWx0SW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfQ0xJRU5UKTsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRHZW5lcmF0ZUNsaWVudCgpCi0gIHsKLQkgIHJldHVybiBnZXRWYWx1ZUFzSW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfQ0xJRU5UKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVDbGllbnQoaW50IHZhbHVlKQotICB7Ci0JICBzZXRWYWx1ZShQUkVGRVJFTkNFX0dFTkVSQVRFX0NMSUVOVCwgdmFsdWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1BlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyYjFlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50VURESVByZWZlcmVuY2VDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQgaW1wbGVtZW50cyBVRERJUHJlZmVyZW5jZUNvbnRleHQKLXsKLSAgcHVibGljIFBlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQoKQotICB7Ci0gICAgc3VwZXIoV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvYWQoKQotICB7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1VERElfQ0FUX0RBVEFfQ09MVU1OX0RFTElNSVRFUiwgVURESVByZWZlcmVuY2VEZWZhdWx0cy5nZXRVZGRpQ2F0RGF0YUNvbHVtbkRlbGltaXRlcigpKTsKLSAgICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9TVFJJTkdfREVMSU1JVEVSLCBVRERJUHJlZmVyZW5jZURlZmF1bHRzLmdldFVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoU3RyaW5nIGRlbGltaXRlcikKLSAgewotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9DT0xVTU5fREVMSU1JVEVSLCBkZWxpbWl0ZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVZGRpQ2F0RGF0YUNvbHVtbkRlbGltaXRlcigpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX1VERElfQ0FUX0RBVEFfQ09MVU1OX0RFTElNSVRFUik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVZGRpQ2F0RGF0YVN0cmluZ0RlbGltaXRlcihTdHJpbmcgZGVsaW1pdGVyKQotICB7Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9VRERJX0NBVF9EQVRBX1NUUklOR19ERUxJTUlURVIsIGRlbGltaXRlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9TVFJJTkdfREVMSU1JVEVSKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTdkNjYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9TY2VuYXJpb0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotcHVibGljIGludGVyZmFjZSBTY2VuYXJpb0NvbnRleHQgCi17Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RFU1RfVFlQRVMgPSAid2ViU2VydmljZVRlc3RUeXBlcyI7Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9OT05fSkFWQV9URVNUX1NFUlZJQ0U9ICJub25KYXZhVGVzdFNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVFlQRSA9ICJ3ZWJTZXJ2aWNlVHlwZSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfU1RBUlRfV0VCU0VSVklDRSA9ICJzdGFydFdlYlNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0lOU1RBTExfV0VCU0VSVklDRSA9ICJpbnN0YWxsV2ViU2VydmljZSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfSU5TVEFMTF9DTElFTlQgPSAiaW5zdGFsbENsaWVudCI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfTEFVTkNIX1dFQlNFUlZJQ0VfRVhQTE9SRVIgPSAibGF1bmNoV2ViU2VydmljZUV4cGxvcmVyIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSA9ICJnZW5lcmF0ZVByb3h5IjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9DTElFTlRfV0VCU0VSVklDRV9UWVBFID0gImNsaWVudFdlYlNlcnZpY2VUeXBlIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9URVNUX1dFQlNFUlZJQ0UgPSAidGVzdFdlYlNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX01PTklUT1JfV0VCU0VSVklDRSA9ICJtb25pdG9yV2ViU2VydmljZSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSA9ICJsYXVuY2hTYW1wbGUiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0dFTkVSQVRFX1dFQlNFUlZJQ0UgPSAiZ2VuZXJhdGVXZWJTZXJ2aWNlIjsgLy9qdmgKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0dFTkVSQVRFX0NMSUVOVCA9ICJnZW5lcmF0ZUNsaWVudCI7IC8vanZoICAKLSAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdTX1RFU1Q9MDsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfU1RBUlQ9MTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfSU5TVEFMTD0yOwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU19ERVBMT1k9MzsgIAotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU19BU1NFTUJMRT00OwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU19ERVZFTE9QPTU7ICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfTk9ORT02OwotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0SWRzKCk7Ci0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUZXN0SWRzKFN0cmluZ1tdIGlkcyk7Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpOwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKFN0cmluZ1tdIHRlc3RUeXBlcyk7Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKCk7Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVR5cGVEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgc2V0V2ViU2VydmljZVR5cGUoIFN0cmluZyB2YWx1ZSApOwotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2VEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldEluc3RhbGxXZWJTZXJ2aWNlKCBib29sZWFuIHZhbHVlICk7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxDbGllbnREZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldEluc3RhbGxDbGllbnQoIGJvb2xlYW4gdmFsdWUgKTsKLSAgICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRXZWJTZXJ2aWNlKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0V2ViU2VydmljZURlZmF1bHQoKTsKLSAgcHVibGljIHZvaWQgICAgc2V0U3RhcnRXZWJTZXJ2aWNlKCBib29sZWFuIHZhbHVlICk7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgICBzZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGJvb2xlYW4gdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eURlZmF1bHQoKTsKLSAgcHVibGljIHZvaWQgICAgc2V0R2VuZXJhdGVQcm94eSggYm9vbGVhbiB2YWx1ZSApOwotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgIHNldENsaWVudFdlYlNlcnZpY2VUeXBlKCBTdHJpbmcgdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgICBzZXRUZXN0V2ViU2VydmljZSggYm9vbGVhbiB2YWx1ZSApOwotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2UoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpOwotICAKLSAgcHVibGljIGJvb2xlYW4gaXNMYXVuY2hTYW1wbGVFbmFibGVkKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldExhdW5jaFNhbXBsZUVuYWJsZWQoIGJvb2xlYW4gdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlRGVmYXVsdCgpOwotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlV2ViU2VydmljZSgpOwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVdlYlNlcnZpY2UoaW50IHZhbHVlKTsKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVDbGllbnREZWZhdWx0KCk7Ci0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVDbGllbnQoKTsKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVDbGllbnQoaW50IHZhbHVlKTsKLSAgCi0gIHB1YmxpYyBTY2VuYXJpb0NvbnRleHQgY29weSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvRGVmYXVsdHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9TY2VuYXJpb0RlZmF1bHRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNGUxNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuTGFiZWxzQW5kSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotCi0KLQotcHVibGljIGNsYXNzIFNjZW5hcmlvRGVmYXVsdHMKLXsgIAotICAKLQkKLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0SWRzKCkKLSAgewotICAJLy93ZSB3aWxsIHNldCB0aGUgaG9tZSBncm93biBzYW1wbGUgYXMgdGhlIGZpcnN0IGNob2ljZQotICAJV2ViU2VydmljZVRlc3RSZWdpc3RyeSB0ZXN0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIAkKLSAgCUxhYmVsc0FuZElkcyBsYWJlbHNhbmRpZHMgPSB0ZXN0UmVnaXN0cnkuZ2V0TGFiZWxzQW5kSURzKCk7Ci0gIAlTdHJpbmdbXSBpZHMgPSBsYWJlbHNhbmRpZHMuZ2V0SWRzXygpOwotICAJCi0gIAlTdHJpbmdbXSBuZXdJZHMgPSBuZXcgU3RyaW5nW2lkcy5sZW5ndGhdOwotICAJaW50IGluZGV4ID0gLTE7Ci0gIAlmb3IoaW50IGkgPSAwO2k8aWRzLmxlbmd0aDtpKyspewotICAJICBpZihpZHNbaV0uZXF1YWxzKCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LldlYlNlcnZpY2VTYW1wbGVUZXN0IikpICAJCi0gIAkgICAgaW5kZXggPSBpOyAgIAotICAJfQotICAJaWYoaW5kZXggIT0gLTEpewotICAJICBuZXdJZHNbMF0gPSBpZHNbaW5kZXhdOwotICAJICBpbnQgaiA9IDE7Ci0gIAkgIGZvcihpbnQgaSA9IDA7aTxpZHMubGVuZ3RoO2krKyl7Ci0gIAkgICAgaWYoaSAhPSBpbmRleCl7Ci0gIAkgIAkgIG5ld0lkc1tqXSA9IGlkc1tpXTsgCi0gIAkgICAgICBqKys7Ci0gIAkgICAgfQotICAJICB9Ci0gIAl9Ci0gIAllbHNlIHJldHVybiBpZHM7Ci0gIAkKLSAgCXJldHVybiBuZXdJZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gIldlYiBTZXJ2aWNlcyBFeHBsb3JlciI7CQotICB9IAotICAKLSAgcHVibGljIFN0cmluZyB3ZWJzZXJ2aWNlVHlwZUlkRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gIjAvb3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5qYXZhIjsKLSAgfQotICAKLSAgcHVibGljIGludCBzZXJ2aWNlR2VuZXJhdGlvbkRlZmF1bHQoKQotICB7Ci0JICByZXR1cm4gU2NlbmFyaW9Db250ZXh0LldTX1NUQVJUOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgY2xpZW50R2VuZXJhdGlvbkRlZmF1bHQoKQotICB7Ci0JICByZXR1cm4gU2NlbmFyaW9Db250ZXh0LldTX05PTkU7ICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gc3RhcnRXZWJzZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaW5zdGFsbFdlYnNlcnZpY2VEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpbnN0YWxsQ2xpZW50RGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gbGF1bmNoV2Vic2VydmljZUV4cGxvcmVyRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdlbmVyYXRlUHJveHlEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyB3ZWJzZXJ2aWNlQ2xpZW50VHlwZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHRlc3RXZWJzZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBsYXVuY2hTYW1wbGUoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9UcmFuc2llbnRTY2VuYXJpb0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9UcmFuc2llbnRTY2VuYXJpb0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVjZTk4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE1NDU0MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBpcyB0cmFja2luZyBleHRlbnNpb25zIHVzaW5nIGxhYmVsIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIElECi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotcHVibGljIGNsYXNzIFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCBpbXBsZW1lbnRzIFNjZW5hcmlvQ29udGV4dAotewotICBwcml2YXRlIFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0SWRzOwotICBwcml2YXRlIFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0VHlwZXM7Ci0gIHByaXZhdGUgU3RyaW5nW10gbm9uSmF2YVRlc3RTZXJ2aWNlOwotICBwcml2YXRlIFN0cmluZyAgIHdlYlNlcnZpY2VUeXBlXzsKLSAgcHJpdmF0ZSBib29sZWFuICBpbnN0YWxsV2ViU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgaW5zdGFsbENsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgc3RhcnRXZWJTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICBsYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJfOwotICBwcml2YXRlIGJvb2xlYW4gIGdlbmVyYXRlUHJveHlfOwotICBwcml2YXRlIFN0cmluZyAgIGNsaWVudFdlYlNlcnZpY2VUeXBlXzsKLSAgcHJpdmF0ZSBib29sZWFuICB0ZXN0V2ViU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgbW9uaXRvcldlYlNlcnZpY2U7Ci0gIHByaXZhdGUgYm9vbGVhbiAgbGF1bmNoU2FtcGxlXzsKLSAgcHJpdmF0ZSBpbnQgZ2VuZXJhdGVXZWJTZXJ2aWNlXzsgLy9qdmgKLSAgcHJpdmF0ZSBpbnQgZ2VuZXJhdGVDbGllbnRfOyAvL2p2aAotICAKLSAgcHJpdmF0ZSBTY2VuYXJpb0RlZmF1bHRzIGRlZmF1bHRzID0gbmV3IFNjZW5hcmlvRGVmYXVsdHMoKTsKLSAKLSAgcHVibGljIFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCAoKSB7fQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXROb25KYXZhVGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5vbkphdmFUZXN0U2VydmljZTsKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXROb25KYXZhVGVzdFNlcnZpY2UoU3RyaW5nW10gbm9uSmF2YVRlc3RTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5ub25KYXZhVGVzdFNlcnZpY2UgPSBub25KYXZhVGVzdFNlcnZpY2U7CQotICB9Ci0gCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUZXN0SWRzKFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0SWRzKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlVGVzdElkcyA9IHdlYlNlcnZpY2VUZXN0SWRzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RJZHMoKSB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VUZXN0SWRzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0VHlwZXMpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VUZXN0VHlwZXMgPSB3ZWJTZXJ2aWNlVGVzdFR5cGVzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gd2ViU2VydmljZVRlc3RUeXBlczsJCi0gIH0KLSAKLSAgcHVibGljIFNjZW5hcmlvQ29udGV4dCBjb3B5KCkgewotICAJVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBuZXcgVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0KCk7Ci0gIAljb250ZXh0LnNldFdlYlNlcnZpY2VUZXN0SWRzKGdldFdlYlNlcnZpY2VUZXN0SWRzKCkpOwotCWNvbnRleHQuc2V0V2ViU2VydmljZVRlc3RUeXBlcyhnZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKCkpOwotCWNvbnRleHQuc2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKGdldE5vbkphdmFUZXN0U2VydmljZSgpKTsKLQkKLQljb250ZXh0LnNldFdlYlNlcnZpY2VUeXBlKCBnZXRXZWJTZXJ2aWNlVHlwZSgpICk7Ci0JY29udGV4dC5zZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSggZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKSApOwotCWNvbnRleHQuc2V0R2VuZXJhdGVQcm94eSggZ2V0R2VuZXJhdGVQcm94eSgpICk7Ci0JY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlcigpICk7Ci0JY29udGV4dC5zZXRJbnN0YWxsV2ViU2VydmljZSggZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKSApOwotCWNvbnRleHQuc2V0SW5zdGFsbENsaWVudCggZ2V0SW5zdGFsbENsaWVudCgpICk7Ci0JY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIGdldFN0YXJ0V2ViU2VydmljZSgpICk7Ci0JY29udGV4dC5zZXRUZXN0V2ViU2VydmljZSggZ2V0VGVzdFdlYlNlcnZpY2UoKSApOwotCWNvbnRleHQuc2V0TW9uaXRvcldlYlNlcnZpY2UoZ2V0TW9uaXRvcldlYlNlcnZpY2UoKSk7Ci0JY29udGV4dC5zZXRMYXVuY2hTYW1wbGVFbmFibGVkKCBpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKSApOwotCWNvbnRleHQuc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKGdldEdlbmVyYXRlV2ViU2VydmljZSgpKTsgIC8vanZoCi0JcmV0dXJuIGNvbnRleHQ7Ci0gIH0KLSAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFdlYlNlcnZpY2VUeXBlKCkKLSAgewotICAgIHJldHVybiBjbGllbnRXZWJTZXJ2aWNlVHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50V2ViU2VydmljZVR5cGVEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy53ZWJzZXJ2aWNlQ2xpZW50VHlwZURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRHZW5lcmF0ZVByb3h5KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlUHJveHlfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5RGVmYXVsdCgpeyByZXR1cm4gZGVmYXVsdHMuZ2VuZXJhdGVQcm94eURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkKLSAgewotICAgIHJldHVybiBsYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy5sYXVuY2hXZWJzZXJ2aWNlRXhwbG9yZXJEZWZhdWx0KCk7IH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbGxXZWJTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2VEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy5pbnN0YWxsV2Vic2VydmljZURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotICAgIHJldHVybiBpbnN0YWxsQ2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudERlZmF1bHQoKXsgcmV0dXJuIGRlZmF1bHRzLmluc3RhbGxDbGllbnREZWZhdWx0KCk7IH0KLSAgCi0gIAotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRTdGFydFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBzdGFydFdlYlNlcnZpY2VfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRTdGFydFdlYlNlcnZpY2VEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy5zdGFydFdlYnNlcnZpY2VEZWZhdWx0KCk7IH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0VGVzdFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdFdlYlNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHRlc3RXZWJTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdFdlYlNlcnZpY2VEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy50ZXN0V2Vic2VydmljZURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRXZWJTZXJ2aWNlVHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlKCkKLSAgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlVHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVR5cGVEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy53ZWJzZXJ2aWNlVHlwZUlkRGVmYXVsdCgpOyB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldENsaWVudFdlYlNlcnZpY2VUeXBlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRXZWJTZXJ2aWNlVHlwZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBjbGllbnRXZWJTZXJ2aWNlVHlwZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBnZW5lcmF0ZVByb3h5XyA9IHZhbHVlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldExhdW5jaFdlYlNlcnZpY2VFeHBsb3Jlcihib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBsYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0SW5zdGFsbFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBpbnN0YWxsV2ViU2VydmljZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRJbnN0YWxsV2ViU2VydmljZShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudChib29sZWFuIHZhbHVlKQotICB7Ci0gICAgaW5zdGFsbENsaWVudF8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRTdGFydFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0YXJ0V2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc3RhcnRXZWJTZXJ2aWNlXyA9IHZhbHVlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldFRlc3RXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXN0V2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdGVzdFdlYlNlcnZpY2VfID0gdmFsdWU7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRXZWJTZXJ2aWNlVHlwZShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVR5cGUoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgd2ViU2VydmljZVR5cGVfID0gdmFsdWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldE1vbml0b3JXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldE1vbml0b3JXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBtb25pdG9yV2ViU2VydmljZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0cy5nZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0TW9uaXRvcldlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBtb25pdG9yV2ViU2VydmljZSA9IHZhbHVlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0cy5sYXVuY2hTYW1wbGUoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNMYXVuY2hTYW1wbGVFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBsYXVuY2hTYW1wbGVfOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldExhdW5jaFNhbXBsZUVuYWJsZWQoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaFNhbXBsZUVuYWJsZWQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIGxhdW5jaFNhbXBsZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKGludCB2YWx1ZSkKLSAgewotCSAgZ2VuZXJhdGVXZWJTZXJ2aWNlXyA9IHZhbHVlOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBkZWZhdWx0cy5zZXJ2aWNlR2VuZXJhdGlvbkRlZmF1bHQoKTsgIAotICB9ICAKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlKCkKLSAgewotCSAgcmV0dXJuIGdlbmVyYXRlV2ViU2VydmljZV87IAotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50RGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBkZWZhdWx0cy5jbGllbnRHZW5lcmF0aW9uRGVmYXVsdCgpOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50KCkKLSAgewotCSAgcmV0dXJuIGdlbmVyYXRlQ2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVDbGllbnQoaW50IHZhbHVlKQotICB7Ci0JICBnZW5lcmF0ZUNsaWVudF8gPSB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjRhZGRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9VRERJUHJlZmVyZW5jZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgVURESVByZWZlcmVuY2VDb250ZXh0IAotewotICAvKgotICAgKiBUaGlzIGNvbnN0YW50IFN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgY29sdW1uIGRlbGltaXRlciBmb3IgdXNlci1kZWZpbmVkIFVEREkKLSAgICogQ2F0ZWdvcnkgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9DT0xVTU5fREVMSU1JVEVSID0gInVkZGlDYXREYXRhQ29sdW1uRGVsaW1pdGVyIjsKLSAgCi0gIC8qCi0gICAqIFRoaXMgY29uc3RhbnQgU3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBzdHJpbmcgZGVsaW1pdGVyIGZvciB1c2VyLWRlZmluZWQgVURESQotICAgKiBDYXRlZ29yeSBkYXRhLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9VRERJX0NBVF9EQVRBX1NUUklOR19ERUxJTUlURVIgPSAidWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIiOwotICAKLSAgcHVibGljIHZvaWQgc2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoU3RyaW5nIGRlbGltaXRlcik7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoKTsKLSAgcHVibGljIHZvaWQgc2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoU3RyaW5nIGRlbGltaXRlcik7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVURESVByZWZlcmVuY2VEZWZhdWx0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlRGVmYXVsdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzllYmE5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVURESVByZWZlcmVuY2VEZWZhdWx0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotcHVibGljIGNsYXNzIFVERElQcmVmZXJlbmNlRGVmYXVsdHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuICIjIjsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuICJcIiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9MYWJlbHNBbmRJZHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9MYWJlbHNBbmRJZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkMGY2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RhdGEvTGFiZWxzQW5kSWRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YTsKLQotcHVibGljIGNsYXNzIExhYmVsc0FuZElkcwotewotICBwcml2YXRlIFN0cmluZ1tdIGxhYmVsc187Ci0gIHByaXZhdGUgU3RyaW5nW10gaWRzXzsKLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGlkc18uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0SWRzXygpCi0gIHsKLSAgICByZXR1cm4gaWRzXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGlkc18gVGhlIGlkc18gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWRzXyhTdHJpbmdbXSBpZHNfKQotICB7Ci0gICAgdGhpcy5pZHNfID0gaWRzXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBsYWJlbHNfLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldExhYmVsc18oKQotICB7Ci0gICAgcmV0dXJuIGxhYmVsc187Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBsYWJlbHNfIFRoZSBsYWJlbHNfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExhYmVsc18oU3RyaW5nW10gbGFiZWxzXykKLSAgewotICAgIHRoaXMubGFiZWxzXyA9IGxhYmVsc187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9UeXBlUnVudGltZVNlcnZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9kYXRhL1R5cGVSdW50aW1lU2VydmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YjQ0NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9kYXRhL1R5cGVSdW50aW1lU2VydmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDEzICAgMTM1NTgxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YTsKLQotcHVibGljIGNsYXNzIFR5cGVSdW50aW1lU2VydmVyCi17Ci0gIHByaXZhdGUgU3RyaW5nIHR5cGVJZF8gICAgID0gIiI7Ci0gIHByaXZhdGUgU3RyaW5nIHJ1bnRpbWVJZF8gID0gIiI7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlcklkXyAgID0gIiI7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWRfOwotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcnVudGltZUlkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZUlkKCkKLSAgewotICAgIHJldHVybiBydW50aW1lSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gcnVudGltZUlkXyBUaGUgcnVudGltZUlkXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lSWQoU3RyaW5nIHJ1bnRpbWVJZF8pCi0gIHsKLSAgICB0aGlzLnJ1bnRpbWVJZF8gPSBydW50aW1lSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlcklkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlcklkXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHNlcnZlcklkXyBUaGUgc2VydmVySWRfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlcklkKFN0cmluZyBzZXJ2ZXJJZF8pCi0gIHsKLSAgICB0aGlzLnNlcnZlcklkXyA9IHNlcnZlcklkXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmVySW5zdGFuY2VJZF87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2ZXJJbnN0YW5jZUlkXyBUaGUgc2VydmVySW5zdGFuY2VJZF8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdGFuY2VJZF8pCi0gIHsKLSAgICB0aGlzLnNlcnZlckluc3RhbmNlSWRfID0gc2VydmVySW5zdGFuY2VJZF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdHlwZUlkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZUlkKCkKLSAgewotICAgIHJldHVybiB0eXBlSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gdHlwZUlkXyBUaGUgdHlwZUlkXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlSWQoU3RyaW5nIHR5cGVJZF8pCi0gIHsKLSAgICB0aGlzLnR5cGVJZF8gPSB0eXBlSWRfOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiAidHlwZSgiICsgdHlwZUlkXyArICIpIHJ1bnRpbWUoIiArIHJ1bnRpbWVJZF8gKyAiKSBmYWN0b3J5KCIgKyBzZXJ2ZXJJZF8gKyAiKSBzZXJ2SW5zdElkKCIgKyBzZXJ2ZXJJbnN0YW5jZUlkXyArICIpIjsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmplY3QpCi0gIHsKLQlpZiAob2JqZWN0ICE9IG51bGwgJiYgb2JqZWN0IGluc3RhbmNlb2YgVHlwZVJ1bnRpbWVTZXJ2ZXIpCi0JewotCQlUeXBlUnVudGltZVNlcnZlciB0cnMgPSAoVHlwZVJ1bnRpbWVTZXJ2ZXIpb2JqZWN0OwotCQlTdHJpbmcgdHJzVHlwZUlkID0gdHJzLmdldFR5cGVJZCgpOwotCQlTdHJpbmcgdHJzUnVudGltZUlkID0gdHJzLmdldFJ1bnRpbWVJZCgpOwotCQlTdHJpbmcgdHJzU2VydmVySWQgPSB0cnMuZ2V0U2VydmVySWQoKTsKLQkJU3RyaW5nIHRyc1NlcnZlckluc3RhbmNlSWQgPSB0cnMuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQkKLQkJYm9vbGVhbiB0eXBlSWRzTWF0Y2ggPSAoKHR5cGVJZF8gPT0gbnVsbCkgJiYgKHRyc1R5cGVJZCA9PSBudWxsKSkgfHwgKCh0eXBlSWRfICE9IG51bGwpICYmICh0eXBlSWRfLmVxdWFscyh0cnNUeXBlSWQpKSk7Ci0JCWlmICghdHlwZUlkc01hdGNoKSByZXR1cm4gZmFsc2U7Ci0JCWJvb2xlYW4gcnVudGltZUlkc01hdGNoID0gKChydW50aW1lSWRfID09IG51bGwpICYmICh0cnNSdW50aW1lSWQgPT0gbnVsbCkpIHx8ICgocnVudGltZUlkXyAhPSBudWxsKSAmJiAocnVudGltZUlkXy5lcXVhbHModHJzUnVudGltZUlkKSkpOwotCQlpZiAoIXJ1bnRpbWVJZHNNYXRjaCkgcmV0dXJuIGZhbHNlOwotCQlib29sZWFuIHNlcnZlcklkc01hdGNoID0gKChzZXJ2ZXJJZF8gPT0gbnVsbCkgJiYgKHRyc1NlcnZlcklkID09IG51bGwpKSB8fCAoKHNlcnZlcklkXyAhPSBudWxsKSAmJiAoc2VydmVySWRfLmVxdWFscyh0cnNTZXJ2ZXJJZCkpKTsKLQkJaWYgKCFzZXJ2ZXJJZHNNYXRjaCkgcmV0dXJuIGZhbHNlOwotCQlib29sZWFuIHNlcnZlckluc3RhbmNlSWRzTWF0Y2ggPSAoKHNlcnZlckluc3RhbmNlSWRfID09IG51bGwpICYmICh0cnNTZXJ2ZXJJbnN0YW5jZUlkID09IG51bGwpKSB8fCAoKHNlcnZlckluc3RhbmNlSWRfICE9IG51bGwpICYmIChzZXJ2ZXJJbnN0YW5jZUlkXy5lcXVhbHModHJzU2VydmVySW5zdGFuY2VJZCkpKTsKLQkJaWYgKCFzZXJ2ZXJJbnN0YW5jZUlkc01hdGNoKSByZXR1cm4gZmFsc2U7Ci0JCQotCQlyZXR1cm4gdHJ1ZTsJCQotCX0KLQkKLQlyZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGlhbG9nL0lTdGF0dXNEaWFsb2dDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGlhbG9nL0lTdGF0dXNEaWFsb2dDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViMTM0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RpYWxvZy9JU3RhdHVzRGlhbG9nQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGlhbG9nOwotCi0vKioKLSogQ29uc3RhbnRzIGZvciBzdGF0dXMgZGlhbG9ncwotKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVN0YXR1c0RpYWxvZ0NvbnN0YW50cyB7Ci0KLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiWWVzIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWUVTX0lEID0gMjsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiWWVzIHRvIGFsbCIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlFU19UT19BTExfSUQgPSA0OwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJDYW5jZWwiIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU5DRUxfSUQgPSAxOwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJPSyIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0lEID0gMDsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiRGV0YWlscyIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVEFJTFNfSUQgPSAxMzsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4ZWN1dGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeGVjdXRhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YzY5MTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4ZWN1dGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSogQWxsIEV4dGVuc2lvbnMgd2l0aCBleGVjdHV0YWJsZSBleHRlbnNpb25zIHNob3VsZCBpbXBsZW1lbnQgdGhpcyAKLSogdG8gZml0IG91ciBmcmFtZXdvcmsKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VFeGVjdXRhYmxlCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICAvKioKLSAgKlJldHVybnMgYSB3aXphcmQgZnJhZ21lbnQgZm9yIHRoaXMgZXhlbnRpb24gdHlwZSAKLSAgKgotICAqLwotICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gZ2V0RmluaXNoQ29tbWFuZCgpOwotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2YTlhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLQotCi0vKioKLSogVGhpcyByZXByZXNlbnRzIGFuIGV4dGVuc2lvbiBpbiB0aGUgcGx1Z2luIHJlZ2lzdHJ5IAotKiBJdCBqb2IgaXMgdG8gYWN0IGFzIGEgcHJveHkgdG8gdGhlIGljb25maWdlbGVtZW50Ci0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRXh0ZW5zaW9uCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCBvciBhIGZyYWdtZW50IGFkZGVkCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB0aGlzIGludGVyZmFjZSBob2xkcyBleGVjdXRhYmxlIGNvZGUgYW5kIGEgCi0gICogZnJhZ21lbnQKLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpOwotCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50IHRoYXQgaG9sZHMgdGhlIGV4dGVuc2lvbiBpbmZvCi0gICogQHBhcmFtIElDb25maWd1cmF0aW9uRWxlbWVudCBFeHRlbnNpb24gZWxlbWVudAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb25maWdFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KTsKLSAKLSAgLyoqCi0gICogSWYgdGhlIGV4dGVuc2lvbiBoYXMgY29kZSB0aGF0IAotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudCgpOwotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDcyMGQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLQotCi0KLS8qKgotKiBUaGlzIHJlcHJlc2VudHMgYW4gZXh0ZW5zaW9uIGluIHRoZSBwbHVnaW4gcmVnaXN0cnkgCi0qIEl0IGpvYiBpcyB0byBhY3QgYXMgYSBwcm94eSB0byB0aGUgaWNvbmZpZ2VsZW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUV4dGVuc2lvbkltcGwgaW1wbGVtZW50cyBXZWJTZXJ2aWNlRXh0ZW5zaW9uCi17Ci0KLQlwcml2YXRlIElMb2cJbG9nXzsKLQkKLSAgLyoKLSAgKiBUaGUgQ29uZmlnRWxlbWVudCB0aGF0IGhvbGRzIGV4dGVuc2lvbiBpbmZvCi0gICovCi0gIHByb3RlY3RlZCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudF87Ci0KLSAgLyoKLSAgKiBUaGUgZXh0ZW5zaW9uIGV4ZWN1dGFibGUgCi0gICovCi0gIHByb3RlY3RlZCBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB3ZWJTZXJ2aWNlRXhlY3V0YWJsZV87Ci0gIAotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLSAgewotICAgIGNvbmZpZ0VsZW1lbnRfID0gY29uZmlnRWxlbWVudDsKLSAgICBsb2dfID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgfQotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCBvciBhIGZyYWdtZW50IGFkZGVkCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB0aGlzIGludGVyZmFjZSBob2xkcyBleGVjdXRhYmxlIGNvZGUgYW5kIGEgCi0gICogZnJhZ21lbnQKLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpCi0gIHsKLSAgICBpZih3ZWJTZXJ2aWNlRXhlY3V0YWJsZV8gIT0gbnVsbCkgcmV0dXJuIHdlYlNlcnZpY2VFeGVjdXRhYmxlXzsKLQotICAgIHRyeXsKLSAgICAgIHJldHVybiBjb25maWdFbGVtZW50Xy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgIH1jYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKXsKLSAgICAgIGxvZ18ubG9nKElMb2cuRVJST1IsIDUwMjksIHRoaXMsICJnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbiIsZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEBwYXJhbSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgRXh0ZW5zaW9uIGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29uZmlnRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLSAgewotICAgIGNvbmZpZ0VsZW1lbnRfID0gY29uZmlnRWxlbWVudDsKLSAgfQkKLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gY29uZmlnRWxlbWVudF87Ci0gIH0KLSAgCi0gIC8qKgotICAqIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gYmVpbmcgdXNlZAotICAqIEByZXR1cm4gU3RyaW5nIG5hbWUgb2YgdGhpcyBleHRlbnNpb24KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAibmFtZSIgKTsKLSAgfQotCi0KLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmMxZDA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLQotLyoqCi0qIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBleHRlbnNpb25zIGZvciBhIGdpdmVuIGV4dGVuc2lvbi1wb2ludCAKLSogYWxzbyByZXR1cm5zIHRoZSBleHRlbnNpb24gb2JqZWN0cyAKLSoKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeQotewotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucwotICAqIEByZXR1cm4gVGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMuCi0gICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMgKCk7Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBleHRlbnNpb24gb2JqZWN0IG9mIHRoZSBnaXZlbiBuYW1lCi0gICpAcmV0dXJuIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0Ci0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKCBTdHJpbmcgbmFtZSk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBBbGwgZXh0ZW50aW9uIG9iamVjdHMgaW4gdGhpcyByZWdpc3RyeQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdHMKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25bXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9ucygpOwotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YmVhMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MjEgICAxNTM4MzMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEFsbG93IHRoZSBXZWIgU2VydmljZSBUZXN0IGV4dGVuc2lvbiBwb2ludCB0byBzcGVjaWZ5IHRoZSBzdXBwb3J0ZWQgY2xpZW50IHJ1bnRpbWUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5MYWJlbHNBbmRJZHM7Ci0KLQotLyoqCi0qIFRoaXMgaXMgYSBnZW5lcmljIHJlZ2lzdHJ5IHdoaWNoIHNldHMgdXAgZ2VuZXJhbCBjb2RlIGluIGhhbmRsaW5nICAgCi0qIElDb25maWdFbGVtZW50cyBmb3IgYW4gZXh0ZW5zaW9uCi0qLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwgaW1wbGVtZW50cyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIAotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIG5hbWVFeHRlbnNpb25UYWJsZV87Ci0gIHByb3RlY3RlZCBWZWN0b3IgaWRfOwotICBwcm90ZWN0ZWQgVmVjdG9yIGxhYmVsXzsKLSAgcHJpdmF0ZSBMYWJlbHNBbmRJZHMgbGFiZWxzYW5kaWRzXzsKLSAgICAKLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwoKQotICB7Ci0gICAgbmFtZUV4dGVuc2lvblRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBsYWJlbF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWRfID0gbmV3IFZlY3RvcigpOwotICAgIGxvYWRFeHRlbnNpb25zKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqIENoaWxkcmVuIHJlZ2lzdHJpZXMgd2lsbCBoYXZlIGRpZmZlcmVudCBleHRlbnNpb24gdHlwZXMgCi0gICogQHJldHVybiBXZWJzZXJ2aWNlRXh0ZW5zaW9uIGhvbGRzIGEgY29uZmlnIGVsZW0KLSAgKiBmb3IgdGhhdCBleHRlbnNpb24gY2FwYWJsZSBvZiBjcmVhdGluZyBhbiBleGVjdXRhYmxlIGZpbGUKLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IFdlYlNlcnZpY2VFeHRlbnNpb24gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCk7Ci0KLSAgLyoqCi0gICogQ2hpbGRyZW4gbXVzdCBpbXBsZW1lbnQgaG93IHRoZXkgZ2V0IHRoZSBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSAKLSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGFuIGFycmF5IG9mIGVsZW1lbnRzIHBhcnRpY3VsYXIgdG8gdGhhdAotICAqIGV4dGVuc2lvbgotICAqLwotICBwdWJsaWMgYWJzdHJhY3QgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQotICAvKgotICAqIExvYWRzIFdlYlNlcnZpY2VFeHRlbnNpb25zIGZvciBXZWJTZXJ2aWNlQ2xpZW50VGVzdCBpbnRvIHRoaXMgcmVnaXN0cnkuCi0gICogVGhpcyBpcyBkb25lIGJ5IHF1ZXJ5aW5nIHRoZSBwbHVnaW4gcmVnaXN0cnkgZm9yIGFsbCBleHRlbnNpb25zCi0gICogdGhhdCBleHRlbmQgd2ViU2VydmljZUNsaWVudFRlc3QgIAotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBsb2FkRXh0ZW5zaW9ucyAoKQotICB7ICAgIAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IGdldENvbmZpZ0VsZW1lbnRzKCk7Ci0KLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y29uZmlnLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gY29uZmlnW2lkeF07Ci0gICAgICBTdHJpbmcgbGFiZWwgPSBlbGVtLmdldEF0dHJpYnV0ZSggImxhYmVsIiApOwotICAgICAgU3RyaW5nIGlkID0gICBlbGVtLmdldEF0dHJpYnV0ZSggImlkIiApOyAgICAgIAotICAgICAgV2ViU2VydmljZUV4dGVuc2lvbiB3ZWJTZXJ2aWNlRXh0ZW5zaW9uID0gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihlbGVtKTsJCi0gICAgICBuYW1lRXh0ZW5zaW9uVGFibGVfLnB1dChsYWJlbCx3ZWJTZXJ2aWNlRXh0ZW5zaW9uKTsKLSAgICAgIGxhYmVsXy5hZGQobGFiZWwpOwotICAgICAgaWRfLmFkZChpZCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucwotICAqIEByZXR1cm4gVGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMuCi0gICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMgKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nW10pbmFtZUV4dGVuc2lvblRhYmxlXy5rZXlTZXQoKS50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBuYW1lcyBhbmQgSWRzIAotICAgKi8KLSAgcHVibGljIExhYmVsc0FuZElkcyBnZXRMYWJlbHNBbmRJRHMoKQotICB7Ci0gIAlsYWJlbHNhbmRpZHNfID0gbmV3IExhYmVsc0FuZElkcygpOwotICAJbGFiZWxzYW5kaWRzXy5zZXRMYWJlbHNfKChTdHJpbmdbXSlsYWJlbF8udG9BcnJheSggbmV3IFN0cmluZ1swXSApKTsKLSAgCWxhYmVsc2FuZGlkc18uc2V0SWRzXygoU3RyaW5nW10paWRfLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKSk7Ci0gIAlyZXR1cm4gbGFiZWxzYW5kaWRzXzsKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9iamVjdCBvZiB0aGUgZ2l2ZW4gbmFtZQotICAqIEByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3QKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoIFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChXZWJTZXJ2aWNlRXh0ZW5zaW9uKW5hbWVFeHRlbnNpb25UYWJsZV8uZ2V0KG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBBbGwgZXh0ZW50aW9uIG9iamVjdHMgaW4gdGhpcyByZWdpc3RyeQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdHMKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25bXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9ucygpCi0gIHsKLSAgICByZXR1cm4gKFdlYlNlcnZpY2VFeHRlbnNpb25bXSluYW1lRXh0ZW5zaW9uVGFibGVfLnZhbHVlcygpLnRvQXJyYXkoIG5ldyBXZWJTZXJ2aWNlRXh0ZW5zaW9uWzBdICk7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L0phdmFQcm94eVRlc3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L0phdmFQcm94eVRlc3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYjM2N2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9KYXZhUHJveHlUZXN0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSmF2YVByb3h5VGVzdENvbW1hbmQgZXh0ZW5kcyBXZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQKLXsKLQotIC8qKgotICAqIFRoaXMgaG9sZHMgYW4gaW5mbyBjbGFzcyB0aGF0IGNvbWVzIGZyb20gdXNlciBpbnB1dCBvciBzb21lIGNhbGNpbGF0aW9ucyB0aGF0IG5lZWRzIHRvIGJlCi0gICogdXNlZCBmb3IgdGhlIGZpbmlzaAotICAqLwotICAKLSAgcHVibGljIHZvaWQgc2V0SnNwRm9sZGVyKFN0cmluZyBqc3BGb2xkZXIpOwotICAKLSAgcHVibGljIHZvaWQgc2V0UnVuQ2xpZW50VGVzdChib29sZWFuIHJ1bkNsaWVudFRlc3QpOwotICAKLSAgcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdChTdHJpbmcgc2FtcGxlUHJvamVjdCk7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbik7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXRFbmRwb2ludE1ldGhvZChTdHJpbmcgc2V0RW5kcG9pbnRNZXRob2QpOwotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCk7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNZXRob2RzKEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzKTsKLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XU0RMVGVzdEZpbmlzaENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV1NETFRlc3RGaW5pc2hDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMTcyNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XU0RMVGVzdEZpbmlzaENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDsKLQotcHVibGljIGludGVyZmFjZSBXU0RMVGVzdEZpbmlzaENvbW1hbmQgZXh0ZW5kcyBXZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQKLXsKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoU3RyaW5nIHNlcnZlclByb2plY3QpOwotICBwdWJsaWMgdm9pZCBzZXRXc2RsU2VydmljZVVSTChTdHJpbmcgd3NkbFVSSSk7Ci0gIHB1YmxpYyB2b2lkIHNldEV4dGVybmFsQnJvd3Nlcihib29sZWFuIGV4dGVybmFsKTsgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1N2VmNGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgxNiAgIDEwNDg3MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MjEgICAxNTM4MzMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEFsbG93IHRoZSBXZWIgU2VydmljZSBUZXN0IGV4dGVuc2lvbiBwb2ludCB0byBzcGVjaWZ5IHRoZSBzdXBwb3J0ZWQgY2xpZW50IHJ1bnRpbWUKLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqIDIwMDgwMzI1ICAgMTg0NzYxIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvbkltcGw7Ci0KLQotCi0KLS8qKgotKiBUaGlzIHJlcHJlc2VudHMgYW4gZXh0ZW5zaW9uIGluIHRoZSBwbHVnaW4gcmVnaXN0cnkgCi0qIEl0IGpvYiBpcyB0byBhY3QgYXMgYSBwcm94eSB0byB0aGUgaWNvbmZpZ2VsZW1lbnQKLSogSW4gcGFydGljdWxhciBpdCBob2xkcyBhIGNsaWVudCB0ZXN0IGV4dGVuc2lvbiBlbGVtZW50IAotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiBleHRlbmRzIFdlYlNlcnZpY2VFeHRlbnNpb25JbXBsCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgTGlzdCBzdXBwb3J0ZWRSdW50aW1lc18gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZVRlc3RFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0gIHsKLSAgICBzdXBlcihjb25maWdFbGVtZW50KTsKLSAgICAgICAKLSAgICBTdHJpbmcgcnVudGltZXNMaXN0ID0gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSgic3VwcG9ydGVkQ2xpZW50UnVudGltZXMiKTsgIAotICAgCi0gICAgYWRkUnVudGltZXMocnVudGltZXNMaXN0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZHMgYSBsaXN0IG9mIHNwYWNlIGRlbGltaXRlZCBydW50aW1lIElEcy4KLSAgICogCi0gICAqIEBwYXJhbSBydW50aW1lc0xpc3QgVGhlIGxpc3Qgb2YgcnVudGltZSBJRHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRSdW50aW1lcyhTdHJpbmcgcnVudGltZXNMaXN0KSB7Ci0JICAKLQkgIGlmIChydW50aW1lc0xpc3QgPT0gbnVsbCkKLQkJICByZXR1cm47Ci0JICAKLQkgIFN0cmluZ1tdIHJ1bnRpbWVzID0gcnVudGltZXNMaXN0LnNwbGl0KCJcXHMrIik7Ci0JICAgIAotCSAgZm9yIChpbnQgaSA9IDA7IGkgPCBydW50aW1lcy5sZW5ndGg7IGkrKykgewkgICAgCQotCQkgIGlmIChydW50aW1lc1tpXS5sZW5ndGgoKSA+IDApCi0JCQkgIHN1cHBvcnRlZFJ1bnRpbWVzXy5hZGQocnVudGltZXNbaV0pOyAgIAotCSAgfQotICB9Ci0gIAotICAvKioKLSAgKiBXaWxsIHRoaXMgdGVzdENsaWVudCBnZW5lcmF0ZSBjb2RlCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29kZWdlbiBuZWVkZWQKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNDb2RlR2VuTmVlZGVkKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImNvZGVHZW5lcmF0ZWQiICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9Ci0gIAotICAvKioKLSAgKiBVc2UgdGhlIGRlZmF1bHQgRm9sZGVyIFByb3ZpZGVkIGJ5IHVzCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgbm8gc3BlY2lhbCBmb2xkZXIgcmVxdWlyZXMKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gdXNlRGVmYXVsdENvZGVHZW5Gb2xkZXIoKQotICB7Ci0gICAgcmV0dXJuIEJvb2xlYW4udmFsdWVPZihnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAiZGVmYXVsdGNvZGVnZW5mb2xkZXIiICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICogVXNlIFNwZWNpYWwgRm9sZGVyIGZvciBnZW5lcmF0ZWQgY29kZQotICAqIEByZXR1cm4gU3RyaW5nIHNwZWNpYWwgZm9sZGVyIG5hbWUKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDb2RlR2VuRm9sZGVyKCkKLSAgewotICAgIHJldHVybiBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAiY29kZWdlbmZvbGRlciIgKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRGVmYXVsdEpBWFJQQygpCi0gIHsKLQkgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImlzZGVmYXVsdGpheHJwYyIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0KLSAgIAotICAvKioKLSAgKiBEbyB3ZSBuZWVkIHRvIGxhdW5jaCBzb21ldGhpbmcKLSAgKiBAcmV0dXJuIEJvb2xlYW4gaWYgdHJ1ZSBsYXVuY2ggY29kZWdlbgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xhdW5jaFJlcXVpcmVkKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImxhdW5jaFJlcXVpcmVkIiApKS5ib29sZWFuVmFsdWUoKTsKLSAgfQotCi0gIC8qKgotICAqIERvIHdlIG5lZWQgdGhlIG1ldGhvZHMgZm9yIHRoZSBwcm94eQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHByb3h5IG1ldGhvZHMgbmVlZGVkCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGFyZU1ldGhvZHNOZWVkZWQoKQotICB7Ci0gICAgcmV0dXJuIEJvb2xlYW4udmFsdWVPZihnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAibWV0aG9kc25lZWRlZCIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0KLQotICAvKioKLSAgKiBEb2VzIHRoaXMgdGVzdCBtYWNoaW5lIG5lZWQgYSBzZXJ2ZXIKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBhIHNlcnZlciBpcyByZXF1aXJlZAotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1NlcnZlck5lZWRlZCgpCi0gIHsKLSAgICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJzZXJ2ZXJSZXF1aXJlZCIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0KLQotICAvKioKLSAgKiBVc2UgdGhlIERlZmF1bHQgU2VydmVyIGNob3NlbiBieSB0aGUgd2l6YXJkCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhlIGRlZmF1bHQgc2VydmVyIGlzIHdhbnRlZAotICAqLwotICBwdWJsaWMgYm9vbGVhbiB1c2VEZWZhdWx0U2VydmVyKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImRlZmF1bHRzZXJ2ZXIiICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICogVXNlIHRoZSBEZWZhdWx0IFNlcnZlciBjaG9zZW4gYnkgdGhlIHdpemFyZAotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBkZWZhdWx0IHNlcnZlciBpcyB3YW50ZWQKLSAgKi8KLSAgcHVibGljIFN0cmluZyB1c2VTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJ1c2VzZXJ2ZXIiICk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB0ZXN0V1NETCgpCi0gIHsKLSAgCVN0cmluZyB3c2RsID0gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggInRlc3RXU0RMIiApOwotICAgIGlmKHdzZGwuZXF1YWxzKCJ5ZXMiKSB8fCB3c2RsLmVxdWFscygidHJ1ZSIpKQotCSAgcmV0dXJuIHRydWU7Ci0JIAotCXJldHVybiBmYWxzZTsgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiB0ZXN0SmF2YVByb3h5KCkKLSAgewotICAJU3RyaW5nIGphdmFQcm94eSA9IGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJ0ZXN0SmF2YVByb3h5IiApOwotICAgIGlmKGphdmFQcm94eSA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gIAlpZihqYXZhUHJveHkuZXF1YWxzKCJ5ZXMiKSB8fCBqYXZhUHJveHkuZXF1YWxzKCJ0cnVlIikpCi0JICByZXR1cm4gdHJ1ZTsKLQkgCi0JcmV0dXJuIGZhbHNlOyAgCi0gIH0KLSAgCQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgYXR0cmlidXRlIG9mIHRoaXMgV2ViU2VydmljZVRlc3RFeHRlbnNpb24KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElkKCkgewotCXJldHVybiBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAiaWQiICk7IAotICB9Ci0gICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxhYmVsIGF0dHJpYnV0ZSBvZiB0aGlzIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgbGFiZWwgYXR0cmlidXRlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsKLSAgICByZXR1cm4gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImxhYmVsIiApOwotICB9Ci0gIAotICAvKioKLSAgICogRG9lcyB0aGlzIGV4dGVuc2lvbiBhbGxvdyBleHRlbmRlcnMgdG8gcmVzdHJpY3QgdGhlIHJ1bnRpbWVzIHRoYXQgYXJlIHN1cHBvcnRlZD8KLSAgICogIAotICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgYWxsb3dSdW5pbWVzUmVzdHJpY3Rpb24gYXR0cmlidXRlLCBmYWxzZSBpZiBub3QgcHJlc2VudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGFsbG93Q2xpZW50UnVudGltZXNSZXN0cmljdGlvbigpIHsKLQkgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImFsbG93Q2xpZW50UnVudGltZXNSZXN0cmljdGlvbiIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0gIAotICAgICAgIAotICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiB0aGlzIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHN1cHBvcnRzIHRoZSBnaXZlIGNsaWVudCBydW50aW1lIElELgotICAgKiAKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjbGllbnQgcnVudGltZSBJRCBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzUnVudGltZShTdHJpbmcgcnVudGltZUlkKSB7Ci0JICAKLQkgaWYgKCFhbGxvd0NsaWVudFJ1bnRpbWVzUmVzdHJpY3Rpb24oKSB8fCBzdXBwb3J0ZWRSdW50aW1lc18uaXNFbXB0eSgpKQotCQkgcmV0dXJuIHRydWU7Ci0JICAKLQkgcmV0dXJuIHN1cHBvcnRlZFJ1bnRpbWVzXy5jb250YWlucyhydW50aW1lSWQpOwotICB9Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV2ViU2VydmljZVRlc3RGaW5pc2hDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMWU5ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VUZXN0RmluaXNoQ29tbWFuZCAKLXsKLQotICAvKioKLSAgICogSWYgdGhlIGNvbW1hbmQgbmVlZHMgYSBzZXJ2ZXIgdGhpcyBpcyB0aGUgY2hvc2VuIAotICAgKiBjbGllbnQgc2VydmVySUQKLSAgICogQHBhcmFtIHNhbXBsZVNlcnZlclR5cGVJRAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmVyVHlwZUlEKFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIGlzIHRoZSBJU2VydmVyIGlmIHJlcXVpcmVkCi0gICAqIEBwYXJhbSBzYW1wbGVFeGlzdGluZ1NlcnZlcgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpOwotICAKLSAgLyoqCi0gICAqIFRoaXMgaXMgdGhlIGVuZHBvaW50cyBpZiBtb25pdG9yIHNlcnZpY2UgaXMgZW5hYmxlZAotICAgKiBAcGFyYW0gZW5kcG9pbnRzCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChMaXN0IGVuZHBvaW50cyk7Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0UmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNmZWNjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODIxICAgMTUzODMzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbGxvdyB0aGUgV2ViIFNlcnZpY2UgVGVzdCBleHRlbnNpb24gcG9pbnQgdG8gc3BlY2lmeSB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lCi0gKiAyMDA3MDMxNCAgIDE1NDU0MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBpcyB0cmFja2luZyBleHRlbnNpb25zIHVzaW5nIGxhYmVsIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIElECi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbDsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgZXh0ZW5kcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICAvKgotICAgKiBUaGlzIGlzIGEgc2luZ2xldG9uIGJlY2FzdWUgaXQgd2FzIGRlY2lkZWQgdGhhdCB0aGUgbWVtb3J5IGZvb3QgcHJpbnQgCi0gICAqIGlzIG5vdCBhcyBleHBlbnNpdmUgYXMgdGhlIHRpbWUgdGFrZW4gcmV0cmlldmluZyB0aGUgZGF0YQotICAgKiAKLSAgICovCi0gIAotICAKLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVRlc3RSZWdpc3RyeSB3c3RyOwotICAKLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAJaWYod3N0ciA9PSBudWxsKSB3c3RyID0gbmV3IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkoKTsKLSAgICByZXR1cm4gd3N0cjsKLSAgfQotICAKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5KCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIHRvICJqb2luIiBhbiBleGlzdGluZyB2YWx1ZSBhbmQgYSBuZXcgdmFsdWUgdG9nZXRoZXIgYnkKLSAgICogYSBzcGFjZSBpbiBiZXR3ZWVuLiAgSGFuZGxlcyBzcGVjaWFsIGNhc2Ugd2hlbiBlaXRoZXIgdmFsdWUgaXMgbnVsbC4gCi0gICAqICAKLSAgICogQHBhcmFtIGV4aXN0aW5nVmFsdWUgVGhlIGV4aXN0aW5nIHZhbHVlCi0gICAqIEBwYXJhbSBuZXdWYWx1ZSBUaGUgbmV3IHZhbHVlCi0gICAqIEByZXR1cm4gSWYgZWl0ZXIgdGhlIGV4aXN0aW5nIG9yIG5ldyB2YWx1ZSBpcyBudWxsLCBzaW1wbHkgcmV0dXJucyB0aGUKLSAgICogbmV3IHZhbHVlIGFzIGlzICh3aGljaCBjb3VsZCBiZSBudWxsKS4gIE90aGVyd2lzZSByZXR1cm5zIHRoZSB2YWx1ZSBqb2luZWQKLSAgICogYnkgYSBzcGFjZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdlbk5ld1ZhbHVlKFN0cmluZyBleGlzdGluZ1ZhbHVlLCBTdHJpbmcgbmV3VmFsdWUpIHsKLQkgIAotCSAgaWYgKGV4aXN0aW5nVmFsdWUgPT0gbnVsbCB8fCBuZXdWYWx1ZSA9PSBudWxsKQotCQkgIHJldHVybiBuZXdWYWx1ZTsKLQkgIAkgIAkgCi0JICByZXR1cm4gZXhpc3RpbmdWYWx1ZSArICIgIiArIG5ld1ZhbHVlOwotICB9Ci0gICAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwjbG9hZEV4dGVuc2lvbnMoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgbG9hZEV4dGVuc2lvbnMgKCkKLSAgewotCS8vIGtlZXAgdHJhY2sgb2YgdGhlIHN1cHBvcnQgcnVudGltZXMgZm9yIGVhY2ggdGVzdCBmYWNpbGl0eSBJRAotICAgIEhhc2h0YWJsZSBzdXBwb3J0ZWRDbGllbnRSdW50aW1lcyA9IG5ldyBIYXNodGFibGUoKTsKLQkgIAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IGdldENvbmZpZ0VsZW1lbnRzKCk7Ci0gICAgCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PGNvbmZpZy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IGNvbmZpZ1tpZHhdOwotICAgICAgU3RyaW5nIGxhYmVsID0gZWxlbS5nZXRBdHRyaWJ1dGUoICJsYWJlbCIgKTsKLSAgICAgIFN0cmluZyBpZCA9ICAgZWxlbS5nZXRBdHRyaWJ1dGUoICJpZCIgKTsgICAgICAKLSAgICAgIAotICAgICAgLy8gbGFiZWwgaXMgZm91bmQsIGhlbmNlIHdlIGhhdmUgYSBtYXN0ZXIgZXh0ZW5zaW9uIGVsZW1lbnQKLSAgICAgIGlmIChsYWJlbCAhPSBudWxsKSB7Ci0gICAgCSAgV2ViU2VydmljZUV4dGVuc2lvbiB3ZWJTZXJ2aWNlRXh0ZW5zaW9uID0gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihlbGVtKTsJCi0gICAgCSAgbmFtZUV4dGVuc2lvblRhYmxlXy5wdXQoaWQsd2ViU2VydmljZUV4dGVuc2lvbik7Ci0gICAgCSAgbGFiZWxfLmFkZChsYWJlbCk7Ci0gICAgCSAgaWRfLmFkZChpZCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIHNsYXZlIGV4dGVuc2lvbiBlbGVtZW50LCB3aGljaCBvbmx5IGhhcyB0aGUgaWQgYW5kIHN1cHBvcnRlZENsaWVudFJ1bnRpbWVzIGF0dHJpYnV0ZXMKLSAgICAgIGVsc2UgewotICAgIAkgIFN0cmluZyBleGlzdGluZ1ZhbHVlID0gKFN0cmluZykgc3VwcG9ydGVkQ2xpZW50UnVudGltZXMuZ2V0KGlkKTsKLSAgICAJICBTdHJpbmcgbmV3VmFsdWUgPSBnZW5OZXdWYWx1ZShleGlzdGluZ1ZhbHVlLCBlbGVtLmdldEF0dHJpYnV0ZSgic3VwcG9ydGVkQ2xpZW50UnVudGltZXMiKSk7Ci0gICAgCSAgCi0gICAgCSAgaWYgKG5ld1ZhbHVlICE9IG51bGwpCi0gICAgCQkgIHN1cHBvcnRlZENsaWVudFJ1bnRpbWVzLnB1dChpZCwgbmV3VmFsdWUpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBtZXJnZSBhbnkgc3VwcG9ydGVkQ2xpZW50UnVudGltZXMgYXR0cmlidXRlcyBmcm9tIHRoZSBzbGF2ZSBlbGVtZW50cyBiYWNrIHRvIHRoZSBtYXN0ZXIgZWxlbWVudHMKLSAgICAKLSAgICBJdGVyYXRvciBpdGVyID0gbmFtZUV4dGVuc2lvblRhYmxlXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIAotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewotICAgIAlXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiB3ZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbikgaXRlci5uZXh0KCk7Ci0gICAgCi0gICAgCS8vIHNraXAgaWYgdGhlIGV4dGVuc2lvbiBkb2VzIG5vdCBhbGxvdyByZXN0cmljdGlvbiBvbiB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lcwotICAgIAlpZiAod2ViU2VydmljZVRlc3RFeHRlbnNpb24uYWxsb3dDbGllbnRSdW50aW1lc1Jlc3RyaWN0aW9uKCkpIHsKLSAgICAJCVN0cmluZyBpZCA9IHdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uLmdldElkKCk7Ci0gICAgCQl3ZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbi5hZGRSdW50aW1lcygoU3RyaW5nKSBzdXBwb3J0ZWRDbGllbnRSdW50aW1lcy5nZXQoaWQpKTsKLSAgICAJfQotICAgIH0gICAgCi0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwjZ2V0V2ViU2VydmljZUV4dGVuc2lvbk5hbWVzKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMoKSB7Ci0JcmV0dXJuIChTdHJpbmdbXSlsYWJlbF8udG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICB9IAotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIElEIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxhYmVsLgotICAgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsLgotICAgKiBAcmV0dXJuIFRoZSBJRCBjb3JyZXNwb25kaW5nIHRvIHRoZSBsYWJlbCwgb3IgaWYgdGhlIGxhYmVsIHBhcmFtZXRlciBpcyBub3QgYSBsYWJlbAotICAgKiAobXVzdCBiZSBhbHJlYWR5IGFuIElEKSwgaXQgaXMgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGxhYmVsVG9JZChTdHJpbmcgbGFiZWwpIHsKLSAgICBpbnQgbGFiZWxJbmRleCA9IGxhYmVsXy5pbmRleE9mKGxhYmVsKTsKLSAgICBpZiAobGFiZWxJbmRleCA9PSAtMSkKLSAgICAgIHJldHVybiBsYWJlbDsKLSAgICByZXR1cm4gKFN0cmluZykgaWRfLmVsZW1lbnRBdChsYWJlbEluZGV4KTsKLSAgfSAKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgV2ViU2VydmljZUV4dGVuc2lvbiB3aXRoIHRoZSBnaXZlbiBJRC4KLSAgICogQHBhcmFtIGlkIFRoZSBJRC4KLSAgICogQHJldHVybiBUaGUgV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbiBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5SWQoU3RyaW5nIGlkKSB7Ci0gICAgcmV0dXJuIChXZWJTZXJ2aWNlRXh0ZW5zaW9uKSBuYW1lRXh0ZW5zaW9uVGFibGVfLmdldChpZCk7Ci0gIH0gCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbCNnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICByZXR1cm4gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeUlkKGxhYmVsVG9JZChuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgKiBDaGlsZHJlbiByZWdpc3RyaWVzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgZXh0ZW5zaW9uIHR5cGVzIAotICAqIEByZXR1cm4gV2Vic2VydmljZUV4dGVuc2lvbiBob2xkcyBhIGNvbmZpZyBlbGVtCi0gICogZm9yIHRoYXQgZXh0ZW5zaW9uIGNhcGFibGUgb2YgY3JlYXRpbmcgYW4gZXhlY3V0YWJsZSBmaWxlCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGNyZWF0ZVdlYlNlcnZpY2VFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gbmV3IFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKGNvbmZpZ0VsZW1lbnQpOwotICB9Ci0KLSAgLyoqCi0gICogQ2hpbGRyZW4gbXVzdCBpbXBsZW1lbnQgaG93IHRoZXkgZ2V0IHRoZSBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSAKLSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGFuIGFycmF5IG9mIGVsZW1lbnRzIHBhcnRpY3VsYXIgdG8gdGhhdAotICAqIGV4dGVuc2lvbgotICAqLwotICBwdWJsaWMgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZ2V0Q29uZmlnRWxlbWVudHMoKQotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGVyIik7Ci0gICAgcmV0dXJuIGNvbmZpZzsgICAgCi0gIH0KLQotCi0gICAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9wbHVnaW4vV2ViU2VydmljZVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9wbHVnaW4vV2ViU2VydmljZVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTIwZDEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dlYlNlcnZpY2VQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDExNTY5MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuVURESVByZWZlcmVuY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci0KLQotLyoqCi0qIFRoaXMgaXMgdGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBwbHVnaW4uCi0qIDxwPgotKiBUaGlzIHBsdWdpbiBjb250YWlucyB0aGUgYnVsayBvZiB0aGUgV2ViIFNlcnZpY2VzIHJ1bnRpbWUuCi0qIE9ubHkgdGhlIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBwb3J0aW9uIG9mIHRoZSBydW50aW1lIGlzCi0qIGZvdW5kIGVsc2V3aGVyZSAtIGluIHRoZSBvcmcuZWNsaXBzZS5qc3Qud3MudWkgcGx1Z2luLgotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cyI7Ci0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlUGx1Z2luIGluc3RhbmNlXzsKLQotICBwcml2YXRlIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0XzsKLSAgcHJpdmF0ZSBQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0IHNjZW5hcmlvQ29udGV4dF87Ci0gIHByaXZhdGUgUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dCB1ZGRpUHJlZmVyZW5jZUNvbnRleHQ7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZVBsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlXyA9IHRoaXM7IAotICB9Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICogQHJldHVybiBUaGUgV2ViU2VydmljZVBsdWdpbiBzaW5nbGV0b24uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEZWZhdWx0UGx1Z2luUHJlZmVyZW5jZXMoKSAKLSAgewotICAJCSgoUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dCkgZ2V0VURESVByZWZlcmVuY2VDb250ZXh0KCkpLmxvYWQoKTsKLSAgfQotCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkKLSAgewotICAJCWlmIChyZXNvdXJjZUNvbnRleHRfID09IG51bGwpIAotICAJCQlyZXNvdXJjZUNvbnRleHRfID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotCQlyZXR1cm4gcmVzb3VyY2VDb250ZXh0XzsKLSAgfQotCi0gIHB1YmxpYyBTY2VuYXJpb0NvbnRleHQgZ2V0U2NlbmFyaW9Db250ZXh0KCkKLSAgewotICAJCWlmIChzY2VuYXJpb0NvbnRleHRfID09IG51bGwpCi0gIAkJewotICAJCSAgc2NlbmFyaW9Db250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0KCk7Ci0gIAkJICBzY2VuYXJpb0NvbnRleHRfLmxvYWQoKTsKLSAgCQl9Ci0KLQkJcmV0dXJuIHNjZW5hcmlvQ29udGV4dF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBVRERJUHJlZmVyZW5jZUNvbnRleHQgZ2V0VURESVByZWZlcmVuY2VDb250ZXh0KCkKLSAgewotICAgIGlmICh1ZGRpUHJlZmVyZW5jZUNvbnRleHQgPT0gbnVsbCkKLSAgICAgIHVkZGlQcmVmZXJlbmNlQ29udGV4dCA9IG5ldyBQZXJzaXN0ZW50VURESVByZWZlcmVuY2VDb250ZXh0KCk7Ci0gICAgcmV0dXJuIHVkZGlQcmVmZXJlbmNlQ29udGV4dDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUphdmFDbGllbnRJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUphdmFDbGllbnRJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOTAwMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhQ2xpZW50SW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYyMCAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlQ2xpZW50SW5mbzsKLQotLyoqCi0gKiBUaGlzIHN1YmNsYXNzIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIGFkZHMgcHJvcGVydGllcwotICogcmVsZXZhbnQgdG8gZGVzY3JpcHRvcnMgb2YgSmF2YSBXZWIgc2VydmljZSBjbGllbnRzLgotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUphdmFDbGllbnRJbmZvIGV4dGVuZHMgV2ViU2VydmljZUNsaWVudEluZm8KLXsKLQlwcml2YXRlIElUeXBlIGpkdFR5cGVfOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJVHlwZSBvZiB0aGUgcHJpbWFyeSBKYXZhIHByb3h5IGNsYXNzCi0JICogb2YgYSBXZWIgc2VydmljZSBjbGllbnQsIG9yIG51bGwgaWYgbm8gc3VjaCBjbGFzcyBoYXMKLQkgKiBiZWVuIGxvY2F0ZWQuCi0JICogQHJldHVybiBUaGUgSkRUIElUeXBlIG9mIHRoZSBKYXZhIGNsaWVudCBwcm94eSBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgSVR5cGUgZ2V0VHlwZSAoKQotCXsKLQkJcmV0dXJuIGpkdFR5cGVfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSBKRFQgSVR5cGUgb2YgdGhlIHByaW1hcnkgSmF2YSBwcm94eSBjbGFzcwotCSAqIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50LgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSBKRFQgSVR5cGUgb2YgdGhlIEphdmEgY2xpZW50IHByb3h5IGNsYXNzLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFR5cGUgKCBJVHlwZSBqZHRUeXBlICkKLQl7Ci0JCWpkdFR5cGVfID0gamR0VHlwZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUphdmFJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUphdmFJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZDllYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYyMCAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSW5mbzsKLQotLyoqCi0gKiBUaGlzIHN1YmNsYXNzIG9mIFdlYlNlcnZpY2VJbmZvIGFkZHMgcHJvcGVydGllcwotICogcmVsZXZhbnQgdG8gZGVzY3JpcHRvcnMgb2YgSmF2YSBXZWIgc2VydmljZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlSmF2YUluZm8gZXh0ZW5kcyBXZWJTZXJ2aWNlSW5mbwotewotCXByaXZhdGUgSVR5cGUgamR0VHlwZV87Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElUeXBlIG9mIHRoZSBwcmltYXJ5IEphdmEgaW1wbGVtZW50YXRpb24KLQkgKiBjbGFzcyBvZiBhIFdlYiBzZXJ2aWNlLCBvciBudWxsIGlmIG5vIHN1Y2ggY2xhc3MgaGFzCi0JICogYmVlbiBsb2NhdGVkLgotCSAqIEByZXR1cm4gVGhlIEpEVCBJVHlwZSBvZiB0aGUgSmF2YSBpbXBsZW1lbnRhdGlvbiBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgSVR5cGUgZ2V0VHlwZSAoKQotCXsKLQkJcmV0dXJuIGpkdFR5cGVfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSBKRFQgSVR5cGUgb2YgdGhlIHByaW1hcnkgSmF2YSBpbXBsZW1lbnRhdGlvbgotCSAqIGNsYXNzIG9mIGEgV2ViIHNlcnZpY2UuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIEpEVCBJVHlwZSBvZiB0aGUgSmF2YSBpbXBsZW1lbnRhdGlvbiBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUeXBlICggSVR5cGUgamR0VHlwZSApCi0JewotCQlqZHRUeXBlXyA9IGpkdFR5cGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNjhiMDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotcnVudGltZQotdGVtcC5mb2xkZXIKLWVudmNvcmUuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMyN2RlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVkZTg0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM3OjIxIEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkN2EyMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6MzQgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkM2NhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDQucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5yZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnVyaTt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjIwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHM7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4yMDAsMi4wLjApIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YjgyYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gKi5qYXIsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc3JjLmluY2x1ZGVzID0gY29tcG9uZW50LnhtbAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9jb21wb25lbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9jb21wb25lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzQ1OGY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvY29tcG9uZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjb21wb25lbnQgeG1sbnM9Imh0dHA6Ly9lY2xpcHNlLm9yZy93dHAvcmVsZW5nL3Rvb2xzL2NvbXBvbmVudC1tb2RlbCIgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQiPgotICAgPGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+Ci0gICA8L2NvbXBvbmVudC1kZXBlbmRzPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08L2NvbXBvbmVudD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzE3MDlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1FbnZpcm9ubWVudCBDb21tYW5kIEZyYW1ld29yayAoY29yZSkKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvQ29tbWFuZEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0NvbW1hbmRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZDhkZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvQ29tbWFuZEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjcmVhdGUgQ29tbWFuZCBvYmplY3RzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tYW5kRmFjdG9yeSAKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBjcmVhdGVkIENvbW1hbmQgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGNyZWF0ZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvQ29tbWFuZE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0NvbW1hbmRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiOTQ2ZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvQ29tbWFuZE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLQotLyoqCi0gKiBDb21tYW5kTWFuYWdlcnMgaGVscCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiBDb21tYW5kcy4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tYW5kTWFuYWdlcgotewotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgQ29tbWFuZE1hbmFnZXIgaXMgY2FwYWJsZSBvZiB1bmRvaW5nCi0gICAqIENvbW1hbmRzLiBTb21lIENvbW1hbmRNYW5hZ2VycyBhbmQgRW52aXJvbm1lbnRzIG1heSBiZSBvZgotICAgKiBhIHNvcnQgdGhhdCB3aWxsIG5ldmVyIHVuZG8oKSBDb21tYW5kcy4gQ29tbWFuZC5leGVjdXRlKCkKLSAgICogbWV0aG9kcyBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgdG8gb3B0aW1pemUKLSAgICogb3V0IGFueSBjYWNoaW5nIGxvZ2ljIHdoZW5ldmVyIHRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VuZG9FbmFibGVkICgpOwotCi0gIC8vIFRoZXJlJ3MgcHJvYmFibHkgbW9yZSwgbGlrZSBmYWN0b3J5IG1ldGhvZHMgZm9yIGNyZWF0aW5nCi0gIC8vIFVuZG8vUmVkbyBzdGFja3MgYW5kIHN0dWZmIGxpa2UgdGhhdC4KLSAgCi0gIHB1YmxpYyBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGdldE1hcHBpbmdSZWdpc3RyeSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9FbnZpcm9ubWVudENvcmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzExZDhjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9FbnZpcm9ubWVudENvcmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDQxOCAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgQ29tbW9uIE1lc3NhZ2VzCi0jCi1NU0dfRVJST1JfVU5FWFBFQ1RFRF9FUlJPUj1JV0FCMDAxNEUgVW5leHBlY3RlZCBleGNlcHRpb24gb2NjdXJyZWQuCi0KLVRJVExFX1dBUk5JTkc9V2FybmluZzoKLVRJVExFX0VSUk9SPUVycm9yOgotVElUTEVfSU5GTz1JbmZvOgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0Vudmlyb25tZW50Q29yZU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NTgxYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBFbnZpcm9ubWVudENvcmVNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuRW52aXJvbm1lbnRDb3JlIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5FWFBFQ1RFRF9FUlJPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUSVRMRV9XQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRJVExFX0VSUk9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRJVExFX0lORk87Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBFbnZpcm9ubWVudENvcmVNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0lDb21tYW5kRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvSUNvbW1hbmRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MmEyOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvSUNvbW1hbmRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSAqIAotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJldHVybiBhIHNlcXVlbmNlIG9mIENvbW1hbmRzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJQ29tbWFuZEZhY3RvcnkgZXh0ZW5kcyBJdGVyYXRvciAKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgQ29tbWFuZCBpbiB0aGUgc2VxdWVuY2UuCi0gICAqLwotICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gZ2V0TmV4dENvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL1NpbXBsZUNvbW1hbmRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9TaW1wbGVDb21tYW5kRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWZkYzRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL1NpbXBsZUNvbW1hbmRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIFNpbXBsZUNvbW1hbmRGYWN0b3J5IGltcGxlbWVudHMgSUNvbW1hbmRGYWN0b3J5IAotewotICAgIHByaXZhdGUgVmVjdG9yIGNvbW1hbmRzXzsKLQlwcml2YXRlIGludCAgICBpbmRleF87Ci0JCi0JcHVibGljIFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBWZWN0b3IgY29tbWFuZHMgKQotCXsKLQkgIGNvbW1hbmRzXyA9IGNvbW1hbmRzOwotCSAgaW5kZXhfICAgID0gMDsKLQl9Ci0JCi0JcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGdldE5leHRDb21tYW5kKCkgCi0JewotCQlyZXR1cm4gKEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uKW5leHQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmUoKSAKLQl7Ci0gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgCi0JewotCQlyZXR1cm4gaW5kZXhfIDwgY29tbWFuZHNfLnNpemUoKTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IG5leHQoKSAKLQl7Ci0JCXJldHVybiBjb21tYW5kc18uZWxlbWVudEF0KGluZGV4XysrKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9Db25kaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9Db25kaXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxMmNmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vQ29uZGl0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBib29sZWFuIGNvbmRpdGlvbiB0aGF0IGNhbiBiZSBldmFsdWF0ZWQgZm9yIGFueSBvYmplY3QuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29uZGl0aW9uCi17Ci0gIC8qKgotICAgKiBUaGlzIHJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IHBhc3NlcyB0aGlzIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vRXZhbHVhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9FdmFsdWF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWZhODA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9FdmFsdWF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjsKLQotLyoqCi0gICogVGhpcyBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgd2hlbiBhIGNvbmRpdGlvbmFsIG9iamVjdCBuZWVkcyB0byBiZSByZXR1cm5lZC4KLSoqLwotcHVibGljIGludGVyZmFjZSBFdmFsdWF0ZQotewotICAvKioKLSAgICAqIEByZXR1cm4gcmV0dXJucyBhbiBvYmplY3QgYmFzZWQgb24gc29tZSBldmFsdWF0ZWQgY29uZGl0aW9uLgotICAqKi8KLSAgcHVibGljIE9iamVjdCBldmFsdWF0ZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL01lc3NhZ2VVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL01lc3NhZ2VVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzJjZDQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9NZXNzYWdlVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBjb252aWVuZW50IHdheSB0byBhY2Nlc3MgcmVzb3VyY2UgYnVuZGxlcyBhbmQKLSAqIHJldGlldmUgdHJhbnNsYXRlZCBzdHJpbmdzLgotICoKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlVXRpbHMKLXsKLSAgcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZV87Ci0gIAotICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgYnVuZGxlc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBidW5kbGVJZCB0aGUgcmVzb3VyY2UgYnVuZGxlIElELgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBjbGFzcyBsb2FkZXIgZm9yIHRoaXMgb2JqZWN0IHdpbGwgYmUgdXNlZCB0byByZXRyaWV2ZQotICAgKiAgICAgICAgICAgICAgIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVV0aWxzKCBTdHJpbmcgYnVuZGxlSWQsIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgdGhpcyggYnVuZGxlSWQsIG9iamVjdC5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gYnVuZGxlSWQgdGhlIHJlc291cmNlIGJ1bmRsZSBJRC4KLSAgICogQHBhcmFtIGxvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJldHJpZXZlCi0gICAqICAgICAgICAgICAgICAgdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlVXRpbHMoIFN0cmluZyBidW5kbGVJZCwgQ2xhc3NMb2FkZXIgbG9hZGVyICkKLSAgewotICAgIHJlc291cmNlXyA9IChSZXNvdXJjZUJ1bmRsZSlidW5kbGVzXy5nZXQoIGJ1bmRsZUlkICk7Ci0gICAgCi0gICAgaWYoIHJlc291cmNlXyA9PSBudWxsICkKLSAgICB7Ci0gICAgICByZXNvdXJjZV8gPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIGJ1bmRsZUlkLCBMb2NhbGUuZ2V0RGVmYXVsdCgpLCBsb2FkZXIgKTsKLSAgICAgIGJ1bmRsZXNfLnB1dCggYnVuZGxlSWQsIHJlc291cmNlXyApOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgZm9yIHRoZSBzdHJpbmcgdG8gcmV0cmlldmUuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgdHJhbnNsYXRlZCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcga2V5ICkKLSAgewotICAgIFN0cmluZyB2YWx1ZSA9IGtleTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICB2YWx1ZSA9IHJlc291cmNlXy5nZXRTdHJpbmcoIGtleSApOyAKLSAgICB9Ci0gICAgY2F0Y2goIFRocm93YWJsZSBleGMgKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBrZXkgdGhlIGtleSBmb3IgdGhlIHN0cmluZyB0byByZXRyaWV2ZS4KLSAgICogQHBhcmFtIGFyZ3MgVGhlc2UgYXJndW1lbnRzIHdpbGwgYmUgc3Vic3RpdHV0ZWQgaW50byB0aGUgdHJhbnNsYXRlZCBzdHJpbmcuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgdHJhbnNsYXRlZCBzdHJpbmcgd2l0aCBhbnkgc3Vic3RpdHV0aW9ucy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MgKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KCBnZXRNZXNzYWdlKGtleSksYXJncyApOwotICB9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1Byb2dyZXNzVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9Qcm9ncmVzc1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMjhjYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1Byb2dyZXNzVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUKLSAqIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLXB1YmxpYyBjbGFzcyBQcm9ncmVzc1V0aWxzCi17Ci0gIHN0YXRpYyBwdWJsaWMgdm9pZCByZXBvcnQoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgU3RyaW5nIG1lc3NhZ2UgKQotICB7Ci0gICAgaWYoIG1vbml0b3IgIT0gbnVsbCApIAotICAgIHsKLSAgICAgICBtb25pdG9yLmJlZ2luVGFzayggbWVzc2FnZSwgSVByb2dyZXNzTW9uaXRvci5VTktOT1dOICk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUmFuZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9SYW5nZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTIyNGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9SYW5nZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLklVUkk7Ci0KLS8qKgotICogQ2FycmllcyBwb3NpdGlvbiBpbmZvcm1hdGlvbiB3aXRoaW4gYSByZXNvdXJjZS4KLSAqLwotcHVibGljIGludGVyZmFjZSBSYW5nZQotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTktOT1dOID0gLTE7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHJlc291cmNlIHRoZSByYW5nZSBhcHBsaWVzIHRvLgotICAgKi8KLSAgcHVibGljIElVUkkgZ2V0VVJJICgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbmRleCwgemVyby1pbmRleGVkLCBvZiB0aGUgZmlyc3QgbGluZQotICAgKiBvZiB0aGUgcmFuZ2UuCi0gICAqLwotICBwdWJsaWMgaW50IGdldFN0YXJ0aW5nTGluZU51bWJlciAoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5kZXgsIHplcm8taW5kZXhlZCwgb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgotICAgKiBvZiB0aGUgcmFuZ2UgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0U3RhcnRpbmdDaGFyTnVtYmVySW5MaW5lICgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbmRleCwgemVyby1pbmRleGVkLCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyCi0gICAqIG9mIHRoZSByYW5nZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgotICAgKi8KLSAgcHVibGljIGludCBnZXRTdGFydGluZ0NoYXJOdW1iZXJJblVSSSAoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5kZXgsIHplcm8taW5kZXhlZCwgb2YgdGhlIGxhc3QgbGluZQotICAgKiBvZiB0aGUgcmFuZ2UuCi0gICAqLwotICBwdWJsaWMgaW50IGdldEVuZGluZ0xpbmVOdW1iZXIgKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG9mZnNldCwgemVyby1pbmRleGVkLCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIKLSAgICogb2YgdGhlIHJhbmdlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuCi0gICAqLwotICBwdWJsaWMgaW50IGdldEVuZGluZ0NoYXJOdW1iZXJJbkxpbmUgKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGluZGV4LCB6ZXJvLWluZGV4ZWQsIG9mIHRoZSBsYXN0IGNoYXJhY3RlcgotICAgKiBvZiB0aGUgcmFuZ2UgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RW5kaW5nQ2hhck51bWJlckluVVJJICgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1JhbmdlVmVjdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUmFuZ2VWZWN0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0NjBiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUmFuZ2VWZWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKioKLSAqIFRoaXMgVmVjdG9yIG1ha2VzIHRoZSBwcm90ZWN0ZWQgbWV0aG9kIHJlbW92ZVJhbmdlIHB1YmxpYy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBSYW5nZVZlY3RvciBleHRlbmRzIFZlY3RvcgotewotICAvKioKLSAgICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDQwNDg3OTM0NzY2NTkyMzA3NzNMOwotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVJhbmdlKCBpbnQgc3RhcnQsIGludCBlbmQgKQotICB7Ci0gICAgc3VwZXIucmVtb3ZlUmFuZ2UoIHN0YXJ0LCBlbmQgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1N0YXR1c1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vU3RhdHVzVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAzYTU3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vU3RhdHVzVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUKLSAqIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk11bHRpU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci0KLXB1YmxpYyBjbGFzcyBTdGF0dXNVdGlscwotewotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgZXJyb3JTdGF0dXMoIFN0cmluZyBlcnJvck1lc3NhZ2UgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsICJpZCIsIDAsIGVycm9yTWVzc2FnZSwgbnVsbCApOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgZXJyb3JTdGF0dXMoIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBleGMuZ2V0TWVzc2FnZSgpOwotICAgIAotICAgIHJldHVybiBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAiaWQiLCAwLCBtZXNzYWdlID09IG51bGwgPyAiIiA6IG1lc3NhZ2UsIGV4YyApOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgZXJyb3JTdGF0dXMoIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIHJldHVybiBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAiaWQiLCAwLCBtZXNzYWdlLCBleGMgKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBNdWx0aVN0YXR1cyBtdWx0aVN0YXR1cyggU3RyaW5nIG1lc3NhZ2UsIElTdGF0dXNbXSBjaGlsZHJlbiwgVGhyb3dhYmxlIGV4YyApCi0gIHsKLSAgICByZXR1cm4gbmV3IE11bHRpU3RhdHVzKCAiaWQiLCAwLCBjaGlsZHJlbiwgbWVzc2FnZSwgZXhjICk7ICAKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBNdWx0aVN0YXR1cyBtdWx0aVN0YXR1cyggU3RyaW5nIG1lc3NhZ2UsIElTdGF0dXNbXSBjaGlsZHJlbiApCi0gIHsKLSAgICByZXR1cm4gbmV3IE11bHRpU3RhdHVzKCAiaWQiLCAwLCBjaGlsZHJlbiwgbWVzc2FnZSwgbnVsbCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyB3YXJuaW5nU3RhdHVzKCBTdHJpbmcgd2FybmluZ01lc3NhZ2UgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdGF0dXMoIElTdGF0dXMuV0FSTklORywgImlkIiwgMCwgd2FybmluZ01lc3NhZ2UsIG51bGwgKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIHdhcm5pbmdTdGF0dXMoIFN0cmluZyB3YXJuaW5nTWVzc2FnZSwgVGhyb3dhYmxlIGV4YyApCi0gIHsKLSAgICByZXR1cm4gbmV3IFN0YXR1cyggSVN0YXR1cy5XQVJOSU5HLCAiaWQiLCAwLCB3YXJuaW5nTWVzc2FnZSwgZXhjICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBpbmZvU3RhdHVzKCBTdHJpbmcgaW5mb01lc3NhZ2UgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdGF0dXMoIElTdGF0dXMuSU5GTywgImlkIiwgMCwgaW5mb01lc3NhZ2UsIG51bGwgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9Db250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk3MjZhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5IHRvIGdldCBhbmQgc2V0IHByZWZlcmVuY2UgaW5mb3JtYXRpb24uCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbnRleHQgCi17Ci0gLyoqCi0gICogTG9hZHMgdGhlIHByZWZlcmVuY2UgZGF0YSBpbnRvIHRoaXMgQ29udGV4dCBvYmplY3QuCi0gICoKLSAgKi8KLSBwdWJsaWMgdm9pZCBsb2FkKCk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0IChTdHJpbmcgbmFtZSwgYm9vbGVhbiB2YWx1ZSk7IAotIAotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0RGVmYXVsdCAoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSk7Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCBmb3IgYSBpbnQgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0IChTdHJpbmcgbmFtZSwgaW50IHZhbHVlKTsgCi0KLSAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSk7Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgYm9vbGVhbiBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldFZhbHVlIChTdHJpbmcgbmFtZSwgYm9vbGVhbiB2YWx1ZSk7Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgaW50IHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0VmFsdWUgKFN0cmluZyBuYW1lLCBpbnQgdmFsdWUpOyAgIAotCi0gLyoqCi0gICogR2V0cyB0aGUgdmFsdWUgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcmV0dXJuIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWVBc1N0cmluZyAoIFN0cmluZyBuYW1lKTsKLSAKLSAvKioKLSAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBib29sZWFuIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcmV0dXJuIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyBib29sZWFuIGdldFZhbHVlQXNCb29sZWFuICggU3RyaW5nIG5hbWUpOwotIAotIC8qKgotICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIGludCBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgaW50IGdldFZhbHVlQXNJbnQgKCBTdHJpbmcgbmFtZSk7ICAJCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9SZXNvdXJjZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvUmVzb3VyY2VDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNWM3NWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9SZXNvdXJjZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0OwotCi1wdWJsaWMgaW50ZXJmYWNlIFJlc291cmNlQ29udGV4dCAKLXsKLSAvKioKLSAgICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIG92ZXJ3cml0ZSBmaWxlcyBnZW5lcmFsIHByZWZlcmVuY2UgZnJvbQotICAgKiB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLSAqKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX09WRVJXUklURSA9ICJmaWxlc092ZXJ3cml0ZSI7Ci0KLSAvKioKLSAgICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIGNyZWF0ZSBmb2xkZXJzIGdlbmVyYWwgcHJlZmVyZW5jZSBmcm9tCi0gICAqIHRoZSBwbHVnaW5zIGxvY2FsIHByZWZlcmVuY2VzIHN0b3JlLgotICoqLwotIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfQ1JFQVRFX0ZPTERFUlMgPSAiY3JlYXRlRm9sZGVycyI7Ci0gCi0gLyoqCi0gICAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBjaGVja291dCBmaWxlcyBnZW5lcmFsIHByZWZlcmVuY2UgZnJvbQotICAgKiB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLSAqKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0NIRUNLT1VUID0gImZpbGVzQ2hlY2tvdXQiOwotCi0gLyoqCi0gICogCi0gICogQHBhcmFtIGVuYWJsZSBzZXQgd2hldGhlciBvdmVyd3JpdGluZyBvZiBmaWxlcyBpcyBlbmFibGVkLgotICAqLwotIHB1YmxpYyB2b2lkIHNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCAoIGJvb2xlYW4gZW5hYmxlKTsKLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgd2hldGhlciBvdmVyd3JpdGluZyBvZiBmaWxlcyBpcyBlbmFibGVkLgotICAqLwotIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCk7Ci0gCi0gLyoqCi0gICogCi0gICogQHBhcmFtIGVuYWJsZSBzZXQgd2hldGhlciBjcmVhdGlvbiBvZiBmb2xkZXJzIGlzIGVuYWJsZWQuCi0gICovCi0gcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoIGJvb2xlYW4gZW5hYmxlKTsKLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgd2hldGhlciBjcmVhdGlvbiBvZiBmb2xkZXJzIGlzIGVuYWJsZWQuCi0gICovCi0gcHVibGljIGJvb2xlYW4gaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpOyAKLSAKLSAvKioKLSAgKiAKLSAgKiBAcGFyYW0gZW5hYmxlIHNldHMgd2hldGhlciBhdXRvbWF0aWMgY2hlY2tvdXQgb2YgZmlsZXMgaXMgZW5hYmxlZC4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRDaGVja291dEZpbGVzRW5hYmxlZCggYm9vbGVhbiBlbmFibGUpOwotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIGF1dG9tYXRpYyBjaGVja291dCBvZiBmaWxlcyBpcyBlbmFibGVkLgotICAqLwotIHB1YmxpYyBib29sZWFuIGlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKTsKLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgUmVzb3VyY2VDb250ZXh0LgotICAqLwotIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgY29weSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9SZXNvdXJjZURlZmF1bHRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1Jlc291cmNlRGVmYXVsdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxMzQ0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1Jlc291cmNlRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VEZWZhdWx0cwotewotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9PVkVSV1JJVEVfREVGQVVMVCA9IGZhbHNlOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9DUkVBVEVfRk9MREVSU19ERUZBVUxUID0gdHJ1ZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfQ0hFQ0tPVVRfREVGQVVMVCA9IGZhbHNlOwotCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIG92ZXJ3cml0aW5nIGZpbGVzLgotICAqLwotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRPdmVyd3JpdGVGaWxlc0RlZmF1bHQgKCkKLSB7Ci0gCXJldHVybiBQUkVGRVJFTkNFX09WRVJXUklURV9ERUZBVUxUOwotIH0KLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBvZnIgY3JlYXRpbmcgZm9sZGVycy4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0Q3JlYXRlRm9sZGVyc0RlZmF1bHQgKCkKLSB7IAotCXJldHVybiBQUkVGRVJFTkNFX0NSRUFURV9GT0xERVJTX0RFRkFVTFQ7Ci0gfQotCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIGNoZWNraW5nIG91dCBmaWxlcy4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0Q2hlY2tvdXRGaWxlc0RlZmF1bHQoKQotIHsKLQlyZXR1cm4gUFJFRkVSRU5DRV9DSEVDS09VVF9ERUZBVUxUOwotIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1RyYW5zaWVudFJlc291cmNlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjBiYTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBSZXNvdXJjZUNvbnRleHQgaW50ZXJmYWNlIHdoZXJlIHRoZSBzdGF0ZQotICogb2YgdGhlIGNvbnRleHQgZGF0YSBpcyB0cmFuc2llbnQuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0IGltcGxlbWVudHMgUmVzb3VyY2VDb250ZXh0IAotewotICBwcml2YXRlIGJvb2xlYW4gb3ZlcldyaXRlRmlsZXM7Ci0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVGb2xkZXJzOwotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tPdXRGaWxlczsKLQotICBwdWJsaWMgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCkgewotICAgIHNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChSZXNvdXJjZURlZmF1bHRzLmdldE92ZXJ3cml0ZUZpbGVzRGVmYXVsdCgpKTsKLSAgICBzZXRDcmVhdGVGb2xkZXJzRW5hYmxlZChSZXNvdXJjZURlZmF1bHRzLmdldENyZWF0ZUZvbGRlcnNEZWZhdWx0KCkpOwotICAgIHNldENoZWNrb3V0RmlsZXNFbmFibGVkKFJlc291cmNlRGVmYXVsdHMuZ2V0Q2hlY2tvdXRGaWxlc0RlZmF1bHQoKSk7Ci0gIH0KLQotICAvKiogIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0I3NldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgb3ZlcldyaXRlRmlsZXMgPSBlbmFibGU7Ci0gIH0KLSAgCi0gIC8qKiAgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQjaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSB7Ci0gICAgcmV0dXJuIG92ZXJXcml0ZUZpbGVzOwotICB9Ci0KLSAgLyoqICAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dCNzZXRDcmVhdGVGb2xkZXJzRW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBjcmVhdGVGb2xkZXJzID0gZW5hYmxlOwotICB9Ci0gIAotICAvKiogIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0I2lzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpIHsKLSAgICByZXR1cm4gY3JlYXRlRm9sZGVyczsKLSAgfQotCi0gIC8qKiAgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQjc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENoZWNrb3V0RmlsZXNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgY2hlY2tPdXRGaWxlcyA9IGVuYWJsZTsKLSAgfQotICAKLSAgLyoqICAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dCNpc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSB7Ci0gICAgcmV0dXJuIGNoZWNrT3V0RmlsZXM7Ci0gIH0KLSAgCi0gIC8qKiAgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQjY29weSgpCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGNvcHkoKSB7Ci0gICAgUmVzb3VyY2VDb250ZXh0IGNjID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotICAgIGNjLnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChpc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKTsKLSAgICBjYy5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZChpc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCkpOwotICAgIGNjLnNldENoZWNrb3V0RmlsZXNFbmFibGVkKGlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0gICAgcmV0dXJuIGNjOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0JlYW5Nb2RpZmllci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9CZWFuTW9kaWZpZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU2ZmM2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0JlYW5Nb2RpZmllci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhOwotCi1wdWJsaWMgaW50ZXJmYWNlIEJlYW5Nb2RpZmllciB7Ci0KLQkvKioKLQkgKiBQZXJmb3JtcyBtb2RpZmljYXRpb24gb24gYmVhbiBwcm9wZXJ0aWVzIHVzaW5nIGRhdGEgcHJvdmlkZWQKLQkgKiBAcGFyYW0gYmVhbiAgVGhlIGJlYW4gdG8gYmUgbW9kaWZpZWQKLQkgKiBAcGFyYW0gcHJvcGVydHlIb2xkZXIgVGhlIGRhdGEgdG8gdXNlIHRvIG1ha2UgdGhlIG1vZGlmaWNhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIG1vZGlmeShPYmplY3QgYmVhbiwgT2JqZWN0IHByb3BlcnR5SG9sZGVyKTsKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvQ2xhc3NFbnRyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9DbGFzc0VudHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZTVjNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9DbGFzc0VudHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTMgICAxMzA5NTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDbGFzc0VudHJ5Ci17Ci0gIC8vIEEgbGlzdCBvZiBnZXR0ZXIgbWV0aG9kcyBmb3IgYSBwYXJ0aWN1bGFyIGNsYXNzLgotICBwdWJsaWMgVmVjdG9yIGdldHRlckxpc3RfOwotICAKLSAgLy8gQSBsaXN0IG9mIHNldHRlciBtZXRob2RzIGZvciBhIHBhcnRpY3VsYXIgY2xhc3MuCi0gIHB1YmxpYyBWZWN0b3Igc2V0dGVyTGlzdF87Ci0gIAotICAvLyBBIGxpc3Qgb2YgaW5zdGFuY2Ugb2JqZWN0cyBmb3IgdGhpcyBjbGFzcy4gIE9ubHkgdGhlIGxhc3QgZW50cnkKLSAgLy8gc2hvdWxkIGJlIGxvb2tlZCBhdC4gCi0gIHByaXZhdGUgVmVjdG9yIG9iamVjdExpc3RfID0gbmV3IFZlY3RvcigpOwotICAKLSAgLy8gQSBsaXN0IG9mIEludGVyZ2VyIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYW4gb3JkZXJpbmcgb2Ygb2JqZWN0cy4KLSAgLy8gVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBvYmplY3RMaXN0IHZlY3RvciBhbmQgdGhlIG9yZGVyTGlzdCB2ZWN0b3IKLSAgLy8gc2hvdWxkIGJlIHRoZSBzYW1lLiAgRWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0TGlzdCB2ZWN0b3IgaXMKLSAgLy8gY29yZWxhdGVkIHdpdGggZWFjaCBlbnRyeSBpbiB0aGUgb3JkZXJMaXN0IHZlY3Rvci4KLSAgcHJpdmF0ZSBWZWN0b3Igb3JkZXJMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgCi0gIHB1YmxpYyB2b2lkIGFkZE9iamVjdCggT2JqZWN0IG9iamVjdCwgaW50IG9yZGVyICkKLSAgewotICAgIG9iamVjdExpc3RfLmFkZChvYmplY3QpOwotICAgIG9yZGVyTGlzdF8uYWRkKCBuZXcgSW50ZWdlcihvcmRlcikgKTsKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBnZXRMYXN0T2JqZWN0KCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGlmKCBvYmplY3RMaXN0Xy5zaXplKCkgPiAwICkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBvYmplY3RMaXN0Xy5sYXN0RWxlbWVudCgpOwotICAgIH0KLSAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0TGFzdE9yZGVyKCkKLSAgewotICAgIGludCByZXN1bHQgPSAtMTsKLSAgICAKLSAgICBpZiggb3JkZXJMaXN0Xy5zaXplKCkgPiAwICkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKEludGVnZXIpb3JkZXJMaXN0Xy5sYXN0RWxlbWVudCgpKS5pbnRWYWx1ZSgpOwotICAgIH0KLSAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZU9iamVjdCggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICBpbnQgcmVtb3ZhbEluZGV4ID0gb2JqZWN0TGlzdF8uaW5kZXhPZihvYmplY3QpOwotICAgIAotICAgIGlmKCByZW1vdmFsSW5kZXggIT0gLTEgKQotICAgIHsKLSAgICAgIG9iamVjdExpc3RfLnJlbW92ZShyZW1vdmFsSW5kZXgpOwotICAgICAgb3JkZXJMaXN0Xy5yZW1vdmUocmVtb3ZhbEluZGV4KTsKLSAgICB9ICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YUZsb3dNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFGbG93TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2ZmZTAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YUZsb3dNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzEzICAgMTMwOTU4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLQotCi1wdWJsaWMgY2xhc3MgRGF0YUZsb3dNYW5hZ2VyIAotewotICBwcml2YXRlIERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsIHJlZ2lzdHJ5XzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICAgICAgICAgICBjbGFzc1RhYmxlXzsKLSAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgICAgICBvcmRlcl87Ci0gIHByaXZhdGUgSUVudmlyb25tZW50CQkJCSAgICBlbnZpcm9ubWVudF87Ci0gIAotICBwdWJsaWMgRGF0YUZsb3dNYW5hZ2VyKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCByZWdpc3RyeSwgSUVudmlyb25tZW50IGVudmlyb25tZW50ICkKLSAgewotICAgIHJlZ2lzdHJ5XyAgID0gcmVnaXN0cnk7Ci0gICAgY2xhc3NUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgb3JkZXJfICAgICAgPSAwOwotICAgIGVudmlyb25tZW50XyA9IGVudmlyb25tZW50OwotICB9Ci0gIAotICBwdWJsaWMgRGF0YU1hcHBpbmdSZWdpc3RyeSBnZXRNYXBwaW5nUmVnaXN0cnkoKQotICB7Ci0gICAgcmV0dXJuIHJlZ2lzdHJ5XzsgCi0gIH0KLSAgCi0gIC8vIFJlbW92ZSB0aGlzIGluc3RhbmNlIG9iamVjdCBmcm9tIHRoZSBtYXBwaW5nIHRhYmxlLgotICBwdWJsaWMgdm9pZCB1bnByb2Nlc3MoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgU3RyaW5nICAgICBvYmplY3RUeXBlID0gb2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotICAgIENsYXNzRW50cnkgY2xhc3NFbnRyeSA9IChDbGFzc0VudHJ5KWNsYXNzVGFibGVfLmdldCggb2JqZWN0VHlwZSApOwotCi0gICAgaWYoIGNsYXNzRW50cnkgIT0gbnVsbCApCi0gICAgewotICAgICAgY2xhc3NFbnRyeS5yZW1vdmVPYmplY3Qob2JqZWN0KTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8vIEFkZCB0aGlzIG9iamVjdCB0byBvdXIgbWFwcGluZyB0YWJsZSBhbmQgY2FsbCB0aGUgc2V0dGVycwotICAvLyB0aGF0IGhhdmUgY29ycmVzcG9uZGluZyBnZXR0ZXIgb2JqZWN0cy4KLSAgcHVibGljIHZvaWQgcHJvY2VzcyggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICAvLyBBZGQgdGhpcyBvYmplY3QgdG8gdGhlIGNsYXNzVGFibGVfIGlmIHJlcXVpcmVkLgotICAgIFN0cmluZyAgICAgb2JqZWN0VHlwZSA9IG9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLSAgICBDbGFzc0VudHJ5IGNsYXNzRW50cnkgPSAoQ2xhc3NFbnRyeSljbGFzc1RhYmxlXy5nZXQoIG9iamVjdFR5cGUgKTsKLQkKLSAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImRhdGEiLCA1MDA0LCB0aGlzLCAicHJvY2VzcyIsICJQcm9jZXNzaW5nOiAiICsgb2JqZWN0VHlwZSApOwotICAgIAotICAgIGlmKCBjbGFzc0VudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIGNsYXNzRW50cnkgPSBuZXcgQ2xhc3NFbnRyeSgpOwotICAgICAgY2xhc3NUYWJsZV8ucHV0KCBvYmplY3RUeXBlLCBjbGFzc0VudHJ5ICk7Ci0gICAgfQotICAgICAgICAKLSAgICBjbGFzc0VudHJ5LmFkZE9iamVjdChvYmplY3QsIG9yZGVyXysrICk7Ci0gICAgCi0gICAgLy8gTm93IHByb2Nlc3MgdGhlIHNldHRlcnMgZm9yIHRoaXMgb2JqZWN0Ci0gICAgVmVjdG9yIHJ1bGVFbnRyaWVzICA9IHJlZ2lzdHJ5Xy5nZXRSdWxlRW50cmllcyggb2JqZWN0VHlwZSApOwotICAgIAotICAgIGlmKCBydWxlRW50cmllcyAhPSBudWxsICkKLSAgICB7Ci0gICAgICBpZiggY2xhc3NFbnRyeS5zZXR0ZXJMaXN0XyA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgY2xhc3NFbnRyeS5zZXR0ZXJMaXN0XyA9IGdldFNldHRlckxpc3QoIG9iamVjdCApOyAgCi0gICAgICB9ICAgIAotICAgICAgCi0gICAgICAvLyBGb3IgZWFjaCBzZXR0ZXIgaW4gdGhpcyBvYmplY3QgdHJ5IHRvIGZpbmQgYSBydWxlLgotICAgICAgZm9yKCBpbnQgc2V0dGVySW5kZXggPSAwOyBzZXR0ZXJJbmRleCA8IGNsYXNzRW50cnkuc2V0dGVyTGlzdF8uc2l6ZSgpOyBzZXR0ZXJJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0TWV0aG9kIGN1cnJlbnRPYmplY3RNZXRob2QgPSBuZXcgT2JqZWN0TWV0aG9kKCk7Ci0gICAgICAgIE1ldGhvZCAgICAgICBzZXR0ZXJNZXRob2QgICAgICAgID0gKE1ldGhvZCljbGFzc0VudHJ5LnNldHRlckxpc3RfLmVsZW1lbnRBdCggc2V0dGVySW5kZXggKTsKLSAgICAgICAgUnVsZUVudHJ5ICAgIGN1cnJlbnRSdWxlRW50cnkgICAgPSBudWxsOwotCi0gICAgICAgIGN1cnJlbnRPYmplY3RNZXRob2Qub3JkZXIgPSAtMTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgcnVsZXMgdGhhdCBtYXRjaCB0aGlzIHNldHRlci4gIE5vdGU6IHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIHJ1bGUKLSAgICAgICAgLy8gdGhhdCBtYXRjaGVzIHRoaXMgc2V0dGVyLiAgSW4gdGhpcyBjYXNlIHdlIHVzZSB0aGUgbW9zdCByZWNlbnQsIHdoaWNoIGlzIAotICAgICAgICAvLyBkZWZpbmVkIGJ5IHRoZSBvcmRlciBmaWVsZC4KLSAgICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHJ1bGVFbnRyaWVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgICAgIHsKLSAgICAgICAgICBSdWxlRW50cnkgcnVsZUVudHJ5ID0gKFJ1bGVFbnRyeSlydWxlRW50cmllcy5lbGVtZW50QXQoIGluZGV4ICk7ICAgICAgIAotICAgICAgICAgIAotICAgICAgICAgIGlmKCBzZXR0ZXJNZXRob2QuZ2V0TmFtZSgpLmVxdWFscyggInNldCIgKyBydWxlRW50cnkudGFyZ2V0UHJvcGVydHlfICkgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgc2V0dGVyIGZvciB0aGlzIHJ1bGUuICBOb3cgZmluZCB0aGUgZ2V0dGVyIG1ldGhvZC4KLSAgICAgICAgICAgIC8vIE5vdGU6IGdldEdldHRlck1ldGhvZCBhbHdheXMgcmV0dXJucyBhIHZhbHVlLCBidXQgaWYgdGhlcmUgaXMgbm8KLSAgICAgICAgICAgIC8vICAgICAgIGdldHRlcnMgYXZhaWxhYmxlIGl0IHdpbGwgc2V0IHRoZSBvcmRlciB0byAtMS4KLSAgICAgICAgICAgIE9iamVjdE1ldGhvZCBnZXR0ZXIgPSBnZXRHZXR0ZXJNZXRob2QoIHJ1bGVFbnRyeS5zb3VyY2VUeXBlXywgcnVsZUVudHJ5LnNvdXJjZVByb3BlcnR5XyApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiggZ2V0dGVyLm9yZGVyID09IC0xICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIAllbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTyAsICJkYXRhIiwgNTAwNSwgdGhpcywgInByb2Nlc3MiLCAiICA+Pk5vIGdldHRlciBmb3VuZCBmb3IgcHJvcGVydHk6ICIgKyBzZXR0ZXJNZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYoIGN1cnJlbnRPYmplY3RNZXRob2Qub3JkZXIgPCBnZXR0ZXIub3JkZXIgKSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBtb3JlIHJlY2VudCBnZXR0ZXIuCi0gICAgICAgICAgICAgIGN1cnJlbnRPYmplY3RNZXRob2QgPSBnZXR0ZXI7Ci0gICAgICAgICAgICAgIGN1cnJlbnRSdWxlRW50cnkgPSBydWxlRW50cnk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IAotICAgICAgICAKLSAgICAgICAgaWYoIGN1cnJlbnRPYmplY3RNZXRob2Qub3JkZXIgIT0gLTEgKQotICAgICAgICB7Ci0gICAgICAgICAgaW52b2tlTWV0aG9kKCBjdXJyZW50T2JqZWN0TWV0aG9kLm9iamVjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2JqZWN0TWV0aG9kLm1ldGhvZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyTWV0aG9kLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSdWxlRW50cnkudHJhbnNmb3JtZXJfICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgIAllbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImRhdGEiLCA1MDA2LCB0aGlzLCAicHJvY2VzcyIsICIgID4+Tm8gcnVsZSBmb3VuZCBmb3Igc2V0dGVyOiAiICsgc2V0dGVyTWV0aG9kLmdldE5hbWUoKSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgIAotICB9Ci0gIAotICAvKioKLSAgICogRmluZCBhbGwgdGhlIHNldHRlcnMgZm9yIHRoaXMgb2JqZWN0IGFuZCByZXR1cm4gYSB2ZWN0b3Igb2YgdGhlbS4KLSAgICogCi0gICAqIEBwYXJhbSBvYmplY3QKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBWZWN0b3IgZ2V0U2V0dGVyTGlzdCggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICBWZWN0b3IgcmVzdWx0ID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBvYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1ldGhvZHMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBNZXRob2QgIG1ldGhvZCAgICAgPSBtZXRob2RzW2luZGV4XTsKLSAgICAgIGJvb2xlYW4gaXNQdWJsaWMgICA9IE1vZGlmaWVyLmlzUHVibGljKCBtZXRob2QuZ2V0TW9kaWZpZXJzKCkgKTsKLSAgICAgIENsYXNzICAgcmV0dXJuVHlwZSA9IG1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7Ci0gICAgCi0gICAgICBpZiggaXNQdWJsaWMgJiYgCi0gICAgICAgICAgcmV0dXJuVHlwZSA9PSBWb2lkLlRZUEUgJiYgCi0gICAgICAgICAgbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IDEgJiYKLSAgICAgICAgICBtZXRob2QuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoICJzZXQiICkpCi0gICAgICB7Ci0gICAgICAgIG1ldGhvZC5zZXRBY2Nlc3NpYmxlKCB0cnVlICk7Ci0gICAgICAgIHJlc3VsdC5hZGQoIG1ldGhvZCApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwcml2YXRlIE9iamVjdE1ldGhvZCBnZXRHZXR0ZXJNZXRob2QoIFN0cmluZyBzb3VyY2VUeXBlLCBTdHJpbmcgc291cmNlUHJvcGVydHkgKQotICB7Ci0gICAgQ2xhc3NFbnRyeSAgIGNsYXNzRW50cnkgPSAoQ2xhc3NFbnRyeSljbGFzc1RhYmxlXy5nZXQoIHNvdXJjZVR5cGUgKTsKLSAgICBPYmplY3RNZXRob2QgZ2V0dGVyRm91bmQgPSBuZXcgT2JqZWN0TWV0aG9kKCk7Ci0gICAgCi0gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyBnZXR0ZXIgeWV0LgotICAgIGdldHRlckZvdW5kLm9yZGVyID0gLTE7Ci0gICAgCi0gICAgaWYoIGNsYXNzRW50cnkgIT0gbnVsbCApCi0gICAgewotICAgICAgT2JqZWN0IGxhc3RPYmplY3QgPSBjbGFzc0VudHJ5LmdldExhc3RPYmplY3QoKTsKLSAgICAgIAotICAgICAgaWYoIGxhc3RPYmplY3QgIT0gbnVsbCApCi0gICAgICB7ICAgICAgICAKLSAgICAgICAgaWYoIGNsYXNzRW50cnkuZ2V0dGVyTGlzdF8gPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBCdWlsZCB0aGUgZ2V0dGVyIGxpc3QuCi0gICAgICAgICAgY2xhc3NFbnRyeS5nZXR0ZXJMaXN0XyA9IGdldEdldHRlckxpc3QoIGxhc3RPYmplY3QgKTsKLSAgICAgICAgfQotICAgICAgCi0gICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjbGFzc0VudHJ5LmdldHRlckxpc3RfLnNpemUoKTsgaW5kZXgrKyApCi0gICAgICAgIHsKLSAgICAgICAgICBNZXRob2QgZ2V0dGVyID0gKE1ldGhvZCljbGFzc0VudHJ5LmdldHRlckxpc3RfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAgICAgCi0gICAgICAgICAgaWYoIGdldHRlci5nZXROYW1lKCkuZXF1YWxzKCAiZ2V0IiArIHNvdXJjZVByb3BlcnR5ICkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZ2V0dGVyRm91bmQub3JkZXIgID0gY2xhc3NFbnRyeS5nZXRMYXN0T3JkZXIoKTsKLSAgICAgICAgICAgIGdldHRlckZvdW5kLm1ldGhvZCA9IGdldHRlcjsKLSAgICAgICAgICAgIGdldHRlckZvdW5kLm9iamVjdCA9IGxhc3RPYmplY3Q7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGdldHRlckZvdW5kOwotICB9Ci0gIAotICBwcml2YXRlIFZlY3RvciBnZXRHZXR0ZXJMaXN0KCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIFZlY3RvciByZXN1bHQgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgTWV0aG9kW10gbWV0aG9kcyA9IG9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIE1ldGhvZCAgbWV0aG9kICAgICA9IG1ldGhvZHNbaW5kZXhdOwotICAgICAgYm9vbGVhbiBpc1B1YmxpYyAgID0gTW9kaWZpZXIuaXNQdWJsaWMoIG1ldGhvZC5nZXRNb2RpZmllcnMoKSApOwotICAgICAgQ2xhc3MgICByZXR1cm5UeXBlID0gbWV0aG9kLmdldFJldHVyblR5cGUoKTsKLSAgICAKLSAgICAgIGlmKCBpc1B1YmxpYyAmJiAKLSAgICAgICAgICByZXR1cm5UeXBlICE9IFZvaWQuVFlQRSAmJiAKLSAgICAgICAgICBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMCAmJgotICAgICAgICAgIG1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCggImdldCIgKSkKLSAgICAgIHsKLSAgICAgICAgbWV0aG9kLnNldEFjY2Vzc2libGUoIHRydWUgKTsKLSAgICAgICAgcmVzdWx0LmFkZCggbWV0aG9kICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSB2b2lkIGludm9rZU1ldGhvZCggT2JqZWN0ICAgICAgc291cmNlT2JqZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kICAgICAgc291cmNlTWV0aG9kICwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAgICAgIGNsaWVudE9iamVjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGhvZCAgICAgIGNsaWVudE1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIpCi0gIHsgIAkKLSAgCU9iamVjdCBkYXRhID0gbnVsbDsKLSAgCSAgCSAgCQotICAJdHJ5Ci0gIAl7Ci0gIAkgIGRhdGEgPSBzb3VyY2VNZXRob2QuaW52b2tlKCBzb3VyY2VPYmplY3QsIG5ldyBPYmplY3RbMF0gKTsKLSAgCX0KLSAgCWNhdGNoKCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4YyApCi0gIAl7Ci0gIAkgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIC8vIHBnbSBOZWVkIHRvIGV4dGVybmFsaXplIHRoaXMgc3RyaW5nLgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIlByb3ZpZGVyIFwiIiArIHNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgdGhyZXcgYW4gZXhjZXB0aW9uLiIgKTsKLSAgCX0KLSAgCWNhdGNoKCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGV4YyApCi0gIAl7Ci0gIAkgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIC8vIHBnbSBOZWVkIHRvIGV4dGVybmFsaXplIHRoaXMgc3RyaW5nLgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIlByb3ZpZGVyIFwiIiArIHNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIHRocmV3IGFuIGV4Y2VwdGlvbi4iICk7Ci0gIAl9Ci0gIAkKLSAgCWVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAiZGF0YSIsIDUwMDcsIHRoaXMsICJpbnZva2VNZXRob2QgIiwiICBTZXR0aW5nIHByb3A6ICIgKyBjbGllbnRNZXRob2QuZ2V0TmFtZSgpICsgIiBkYXRhPSIgKyBkYXRhICsgIiBmcm9tOiAiICsgc291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpICk7Ci0gIAkKLSAgCQotICAJaWYoIHRyYW5zZm9ybWVyICE9IG51bGwgKQotICAJewotICAJICBkYXRhID0gdHJhbnNmb3JtZXIudHJhbnNmb3JtKCBkYXRhICk7ICAJICAgIAotICAJfQotICAJCi0gIAl0cnkKLSAgCXsgIAkgIAotICAJICBjbGllbnRNZXRob2QuaW52b2tlKCBjbGllbnRPYmplY3QsIG5ldyBPYmplY3RbXXsgZGF0YSB9ICk7Ci0gIAl9Ci0gIAljYXRjaCggSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBleGMgKQotICAJewotICAJICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAvLyBwZ20gTmVlZCB0byBleHRlcm5hbGl6ZSB0aGlzIHN0cmluZy4KLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJDbGllbnQgXCIiICsgY2xpZW50T2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiB0aHJldyBhbiBleGNlcHRpb24uIiApOwotICAJfQotICAJY2F0Y2goIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXhjICkKLSAgCXsKLSAgCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgLy8gcGdtIE5lZWQgdG8gZXh0ZXJuYWxpemUgdGhpcyBzdHJpbmcuCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiQ2xpZW50IFwiIiArIGNsaWVudE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgdGhyZXcgYW4gZXhjZXB0aW9uLiIgKTsKLSAgCX0KLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBPYmplY3RNZXRob2QKLSAgewotICAgIHB1YmxpYyBPYmplY3Qgb2JqZWN0OwotICAgIHB1YmxpYyBNZXRob2QgbWV0aG9kOwotICAgIHB1YmxpYyBpbnQgICAgb3JkZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YU1hcHBpbmdSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhTWFwcGluZ1JlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMDM3MzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhTWFwcGluZ1JlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTsKLQotcHVibGljIGludGVyZmFjZSBEYXRhTWFwcGluZ1JlZ2lzdHJ5Ci17Ci0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgZGF0YSBtYXBwaW5nIGZyb20gYSBzb3VyY2Ugb2JqZWN0IHRvIGEgdGFyZ2V0Ci0gICAqIG9iamVjdC4gIFdoZW4gdGhlIHNvdXJjZU9iamVjdCBpcyBlbmNvdW50ZXJlZCBieSB0aGUgZnJhbWV3b3JrIHRoZQotICAgKiBzb3VyY2VQcm9wZXJ0eSB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCi0gICAqIHRhcmdldFByb3BlcnR5IGluIHRoZSB0YXJnZXRPYmplY3QuICBJZiBhIHRyYW5zZm9ybWVyIG9iamVjdCBpcwotICAgKiBzcGVjaWZpZWQgdGhlIHNvdXJjZU9iamVjdCBpcyB0cmFuc2Zvcm1lZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvCi0gICAqIHRoZSB0YXJnZXQgb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIHNvdXJjZVR5cGUgICAgICBUaGUgc291cmNlIG9iamVjdC4KLSAgICogQHBhcmFtIHNvdXJjZVByb3BlcnR5ICBUaGUgc291cmNlIHByb3BlcnR5LgotICAgKiBAcGFyYW0gdGFyZ2V0VHlwZSAgICAgIFRoZSB0YXJnZXQgb2JqZWN0LgotICAgKiBAcGFyYW0gdGFyZ2V0UHJvcGVydHkgIFRoZSB0YXJnZXQgcHJvcGVydHkuCi0gICAqIEBwYXJhbSB0cmFuc2Zvcm1lciAgICAgVGhlIHRyYW5zZm9ybWVyIG9iamVjdCB0aGF0IHRyYW5zZm9ybXMgdGhlCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRNYXBwaW5nKCBDbGFzcyAgICAgICBzb3VyY2VUeXBlLAotCQkJCQkJICBTdHJpbmcgICAgICBzb3VyY2VQcm9wZXJ0eSwKLQkJCQkJCSAgQ2xhc3MgICAgICAgdGFyZ2V0VHlwZSwKLQkJCQkJCSAgU3RyaW5nICAgICAgdGFyZ2V0UHJvcGVydHksCi0JCQkJCQkgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byB0aGUgYWJvdmUgd2l0aCB0YXJnZXRQcm9wZXJ0eSB0aGUgc2FtZQotICAgKiBhcyB0aGUgc291cmNlUHJvcGVydHkgYW5kIHdpdGggdGhlIHRyYW5zZm9ybWVyIHNldCB0byBudWxsLgotICAgKiAKLSAgICogQHBhcmFtIHNvdXJjZVR5cGUgICAgIFRoZSBzb3VyY2Ugb2JqZWN0LgotICAgKiBAcGFyYW0gc291cmNlUHJvcGVydHkgVGhlIHNvdXJjZSBwcm9wZXJ0eS4KLSAgICogQHBhcmFtIHRhcmdldFR5cGUgICAgIFRoZSB0YXJnZXQgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTWFwcGluZyggQ2xhc3MgICAgICAgc291cmNlVHlwZSwKLQkgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgc291cmNlUHJvcGVydHksCi0JICAgICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgIHRhcmdldFR5cGUgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFhNWYyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFNYXBwaW5nUmVnaXN0cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLQotcHVibGljIGNsYXNzIERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsIGltcGxlbWVudHMgRGF0YU1hcHBpbmdSZWdpc3RyeQoteyAgCi0gIHByaXZhdGUgSGFzaHRhYmxlIHJ1bGVzVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UnVsZUVudHJpZXMoIFN0cmluZyB0YXJnZXRUeXBlICkKLSAgewotICAgIHJldHVybiAoVmVjdG9yKXJ1bGVzVGFibGVfLmdldCggdGFyZ2V0VHlwZSApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5I2FkZE1hcHBpbmcoamF2YS5sYW5nLkNsYXNzLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuQ2xhc3MsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRNYXBwaW5nKCBDbGFzcyBzb3VyY2VUeXBlLCBTdHJpbmcgc291cmNlUHJvcGVydHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzIHRhcmdldFR5cGUsIFN0cmluZyB0YXJnZXRQcm9wZXJ0eSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKSAKLSAgewotICAgIFZlY3RvciAgICBydWxlRW50cmllcyA9IChWZWN0b3IpcnVsZXNUYWJsZV8uZ2V0KCB0YXJnZXRUeXBlLmdldE5hbWUoKSApOwotICAgIFJ1bGVFbnRyeSBydWxlRW50cnkgICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHJ1bGVFbnRyaWVzID09IG51bGwgKQotICAgIHsKLSAgICAgIHJ1bGVFbnRyaWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgcnVsZXNUYWJsZV8ucHV0KCB0YXJnZXRUeXBlLmdldE5hbWUoKSwgcnVsZUVudHJpZXMgKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRmluZCB0aGUgcnVsZSBlbnRyeQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBydWxlRW50cmllcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIFJ1bGVFbnRyeSBuZXdFbnRyeSA9IChSdWxlRW50cnkpcnVsZUVudHJpZXMuZWxlbWVudEF0KCBpbmRleCApOwotICAgIAotICAgICAgaWYoIHNvdXJjZVByb3BlcnR5LmVxdWFscyggbmV3RW50cnkuc291cmNlUHJvcGVydHlfICkgJiYKLSAgICAgICAgICBzb3VyY2VUeXBlLmVxdWFscyggbmV3RW50cnkuc291cmNlVHlwZV8gKSAmJgotICAgICAgICAgIHRhcmdldFByb3BlcnR5LmVxdWFscyggbmV3RW50cnkudGFyZ2V0UHJvcGVydHlfICkgKQotICAgICAgewotICAgICAgICAvLyBUaGUgZW50cnkgYWxyZWFkeSBleGlzdHMKLSAgICAgICAgcnVsZUVudHJ5ID0gbmV3RW50cnk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiggcnVsZUVudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIC8vIFRoZSBydWxlIGRpZG4ndCBleGlzdCBhbHJlYWR5IHNvIHdlIHdpbGwgY3JlYXRlIGEgbmV3IG9uZS4KLSAgICAgIHJ1bGVFbnRyeSA9IG5ldyBSdWxlRW50cnkoc291cmNlVHlwZS5nZXROYW1lKCksIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSwgdHJhbnNmb3JtZXIgKTsKLSAgICAgIHJ1bGVFbnRyaWVzLmFkZCggcnVsZUVudHJ5ICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBKdXN0IHVwZGF0ZSB0aGUgdHJhbnNmb3JtZXIuCi0gICAgICBydWxlRW50cnkudHJhbnNmb3JtZXJfID0gdHJhbnNmb3JtZXI7ICAKLSAgICB9Ci0gIH0KLSAgICAKLSAgICAvL3J1bGVFbnRyaWVzXy4KLS8vICAgIFN0cmluZyAgICBzb3VyY2VDbGFzcyA9IHNvdXJjZVR5cGUuZ2V0TmFtZSgpOwotLy8gICAgU3RyaW5nICAgIHRhcmdldENsYXNzID0gdGFyZ2V0VHlwZS5nZXROYW1lKCk7Ci0vLyAgICBWZWN0b3IgICAgZW50cmllcyAgICAgPSAoVmVjdG9yKXJ1bGVFbnRyaWVzXy5nZXQoIHNvdXJjZUNsYXNzICk7IAotLy8gICAgUnVsZUVudHJ5IHJ1bGVFbnRyeSAgID0gbnVsbDsKLS8vICAgIAotLy8gICAgaWYoIGVudHJpZXMgIT0gbnVsbCApCi0vLyAgICB7Ci0vLyAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMuCi0vLyAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBlbnRyaWVzLnNpemUoKTsgaW5kZXgrKyApCi0vLyAgICAgIHsKLS8vICAgICAgICBSdWxlRW50cnkgZm91bmRFbnRyeSA9IChSdWxlRW50cnkpZW50cmllcy5lbGVtZW50QXQoIGluZGV4ICk7Ci0vLyAgICAgICAgCi0vLyAgICAgICAgaWYoIHNvdXJjZVByb3BlcnR5LmVxdWFscyggZm91bmRFbnRyeS5zb3VyY2VQcm9wZXJ0eV8gKSAmJgotLy8gICAgICAgICAgICB0YXJnZXRUeXBlLmVxdWFscyggZm91bmRFbnRyeS50YXJnZXRUeXBlXyApICYmCi0vLyAgICAgICAgICAgIHRhcmdldFByb3BlcnR5LmVxdWFscyggZm91bmRFbnRyeS50YXJnZXRQcm9wZXJ0eV8gKSApCi0vLyAgICAgICAgewotLy8gICAgICAgICAgcnVsZUVudHJ5ID0gZm91bmRFbnRyeTsKLS8vICAgICAgICAgIHJ1bGVFbnRyeS50cmFuc2Zvcm1lcl8gPSB0cmFuc2Zvcm1lcjsKLS8vICAgICAgICB9Ci0vLyAgICAgIH0KLS8vICAgICAgCi0vLyAgICAgIC8vIFRoZXJlIGlzIGFuIGV4aXN0aW5nIHZlY3RvciBmb3IgdGhpcyBzb3VyY2VDbGFzcywgYnV0IGl0IGRpZG4ndAotLy8gICAgICAvLyBjb250YWluIHRoaXMgbmV3IHJ1bGUgc28gd2Ugd2lsbCBhZGQgaXQgaW4uCi0vLyAgICAgIGlmKCBydWxlRW50cnkgPT0gbnVsbCApCi0vLyAgICAgIHsKLS8vICAgICAgICBydWxlRW50cnkgPSBuZXcgUnVsZUVudHJ5KCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0Q2xhc3MsIHRhcmdldFByb3BlcnR5LCB0cmFuc2Zvcm1lciApOwotLy8gICAgICAgIGVudHJpZXMuYWRkKCBydWxlRW50cnkgKTsKLS8vICAgICAgfQotLy8gICAgfQotLy8gICAgZWxzZQotLy8gICAgewotLy8gICAgICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB2ZWN0b3IgZm9yIHRoaXMgc291cmNlQ2xhc3MuCi0vLyAgICAgIGVudHJpZXMgPSBuZXcgVmVjdG9yKCk7Ci0vLyAgICAgIHJ1bGVFbnRyeSA9IG5ldyBSdWxlRW50cnkoIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRDbGFzcywgdGFyZ2V0UHJvcGVydHksIHRyYW5zZm9ybWVyICk7Ci0vLyAgICAgIGVudHJpZXMuYWRkKCBydWxlRW50cnkgKTsKLS8vICAgICAgcnVsZUVudHJpZXNfLnB1dCggc291cmNlQ2xhc3MsIGVudHJpZXMgKTsgIAotLy8gICAgfSAgICAKLS8vICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5I2FkZE1hcHBpbmcoamF2YS5sYW5nLkNsYXNzLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuQ2xhc3MpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRNYXBwaW5nKENsYXNzIHNvdXJjZVR5cGUsIFN0cmluZyBzb3VyY2VQcm9wZXJ0eSwgQ2xhc3MgdGFyZ2V0VHlwZSkgCi0gIHsKLSAgICBhZGRNYXBwaW5nKCBzb3VyY2VUeXBlLCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0VHlwZSwgc291cmNlUHJvcGVydHksIG51bGwgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9SdWxlRW50cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvUnVsZUVudHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOTA5MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9SdWxlRW50cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhOwotCi0KLXB1YmxpYyBjbGFzcyBSdWxlRW50cnkgCi17Ci0gIHB1YmxpYyBTdHJpbmcgICAgICBzb3VyY2VUeXBlXzsKLSAgcHVibGljIFN0cmluZyAgICAgIHNvdXJjZVByb3BlcnR5XzsKLSAgcHVibGljIFN0cmluZyAgICAgIHRhcmdldFByb3BlcnR5XzsKLSAgcHVibGljIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyXzsKLSAgCi0gCi0gIHB1YmxpYyBSdWxlRW50cnkoIFN0cmluZyBzb3VyY2VUeXBlLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNlUHJvcGVydHksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YXJnZXRQcm9wZXJ0eSwgCi0gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyICkKLSAgewotICAgIHNvdXJjZVR5cGVfICAgICA9IHNvdXJjZVR5cGU7Ci0gICAgc291cmNlUHJvcGVydHlfID0gc291cmNlUHJvcGVydHk7Ci0gICAgdGFyZ2V0UHJvcGVydHlfID0gdGFyZ2V0UHJvcGVydHk7ICAgIAotICAgIHRyYW5zZm9ybWVyXyAgICA9IHRyYW5zZm9ybWVyOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL1RyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL1RyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ODBhNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGE7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byB0cmFuc2Zvcm0gYW4gb2JqZWN0IGZyb20gb25lIGNsYXNzIHRvIGFub3RoZXIuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFRyYW5zZm9ybWVyCi17Ci0gIC8qCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIHRyYW5zZm9ybWVkIG9iamVjdCBiYXNlZCBvbiB0aGUgaW5wdXQgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybSggT2JqZWN0IHZhbHVlICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9BYnN0cmFjdENvbW1hbmRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFkMDY3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9BYnN0cmFjdENvbW1hbmRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLQotCi0vKioKLSAgKiBUaGlzIGNsYXNzIGlzIHVzZWQgYXMgdGhlIGJhc2UgY2xhc3MgZm9yIG90aGVyIHN0YW5kYXJkIGZyYWdtZW50IGNsYXNzZXMuCi0gICogCi0qKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudCBpbXBsZW1lbnRzIENvbW1hbmRGcmFnbWVudAotewotICBwcml2YXRlIENvbW1hbmRGYWN0b3J5IGNvbW1hbmRGYWN0b3J5XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICBpZF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgZG9Ob3RSdW5JblRyYW5zYWN0aW9uXyA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDb3B5IGNvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gZnJhZ21lbnQKLSAgICovCi0gIHByb3RlY3RlZCBBYnN0cmFjdENvbW1hbmRGcmFnbWVudCggQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgY29tbWFuZEZhY3RvcnlfID0gZnJhZ21lbnQuY29tbWFuZEZhY3RvcnlfOwotICAgIGlkXyAgICAgICAgICAgICA9IGZyYWdtZW50LmlkXzsKLSAgfQotICAKLSAgLyoqCi0gICAgKiBDcmVhdGVzIGEgbmV3IEFic3RyYWN0Q29tbWFuZEZyYWdtZW50LgotICAgICoKLSAgICAqIEBwYXJhbSBjb21tYW5kIHRoZSBleGVjdXRhYmxlIGNvbW1hbmQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwdWJsaWMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQoIENvbW1hbmRGYWN0b3J5IGNvbW1hbmRGYWN0b3J5LCBTdHJpbmcgaWQgKQotICB7Ci0gICAgY29tbWFuZEZhY3RvcnlfID0gY29tbWFuZEZhY3Rvcnk7ICAKLSAgICBpZF8gICAgICA9IGlkOwotICB9IAotICAKLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gaWRfOwotICB9Ci0gICAKLSAgcHVibGljIHZvaWQgc2V0SWQoIFN0cmluZyBpZCApCi0gIHsKLSAgICBpZF8gPSBpZDsgCi0gIH0KLSAgCi0gIC8qKiAKLSAgICAqIEdldHMgZXhlY3V0YWJsZSBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZhY3RvcnkgZ2V0Q29tbWFuZEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIGNvbW1hbmRGYWN0b3J5XzsKLSAgfQotICAKLSAgLyoqCi0gICAqICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgcmV0cmlldmUgdGhlIGRhdGEgbWFwcGluZ3MgZm9yIHRoaXMgY29tbWFuZCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5ICkKLSAgewotICAgIC8vIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub3QgdG8gYWRkIGFueSBlbnRyaWVzIHRvIHRoZSByZWdpc3RyeS4KLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIElmIHRoZSBjb21tYW5kcyBmb3IgdGhpcyBmcmFnbWVudCBzaG91bGQgbm90IGJlIHJ1biB3aXRoaW4gYSB0cmFuc2FjdGlvbiB0aGVuCi0gICAqIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdHJ1ZS4gIElmIHRoZSBmcmFnbWVudCBkb2VzIG5vdCBjYXJlIGlmIGl0IGlzIHJ1biBpbiBhIHRyYW5zYWN0aW9uCi0gICAqIG9yIG5vdCBpdCBzaG91bGQgcmV0dXJuIGZhbHNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZG9Ob3RSdW5JblRyYW5zYWN0aW9uKCkKLSAgewotICAgIHJldHVybiBkb05vdFJ1bkluVHJhbnNhY3Rpb25fOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgcnVuIGluIHRyYW5zYWN0aW9uIHByb3BlcnR5LgotICAgKiBAcGFyYW0gZG9Ob3RSdW5JblRyYW5zYWN0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb05vdFJ1bkluVHJhbnNhY3Rpb24oIGJvb2xlYW4gZG9Ob3RSdW5JblRyYW5zYWN0aW9uICkKLSAgewotICAgIGRvTm90UnVuSW5UcmFuc2FjdGlvbl8gPSBkb05vdFJ1bkluVHJhbnNhY3Rpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgICogQWxsIGZyYWdtZW50cyBuZWVkIHRvIGJlIGNsb25lYWJsZS4KLSAgKiovCi0gIGFic3RyYWN0IHB1YmxpYyBPYmplY3QgY2xvbmUoKTsgIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0Jvb2xlYW5GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQm9vbGVhbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NmIzNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQm9vbGVhbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLQotCi0vKioKLSAgKiBUaGlzIGNsYXNzIHJldHVybnMgZWl0aGVyIHRoZSB0cnVlIGZyYWdtZW50IG9yIHRoZSBmYWxzZSBmcmFnbWVudAotICAqIGJhc2VkIG9uIHRoZSByZXNwb25zZSBmcm9tIHRoZSBjb25kaXRpb24gb2JqZWN0LgotKiovCi1wdWJsaWMgY2xhc3MgQm9vbGVhbkZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBDb21tYW5kRnJhZ21lbnQgdHJ1ZUZyYWdtZW50XzsKLSAgcHJpdmF0ZSBDb21tYW5kRnJhZ21lbnQgZmFsc2VGcmFnbWVudF87Ci0gIHByaXZhdGUgQ29uZGl0aW9uICAgICAgIGNvbmRpdGlvbl87Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIEJvb2xlYW5GcmFnbWVudCB3aXRoIGRlZmF1bHQgdmFsdWVzLgotICAgKgotICAgKi8KLSAgcHVibGljIEJvb2xlYW5GcmFnbWVudCgpCi0gIHsKLSAgICB0aGlzKCBudWxsLCBudWxsLCBuZXcgQ29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0sIAotICAgICAgICAgICAgICAgICAgICAgIG51bGwsICIiICk7ICAKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gdHJ1ZUZyYWdtZW50ICBUaGUgZnJhZ21lbnQgY2hvc2VuIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZS4KLSAgICogQHBhcmFtIGZhbHNlRnJhZ21lbnQgVGhlIGZyYWdtZW50IGNob3NlbiBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLgotICAgKiBAcGFyYW0gY29uZGl0aW9uICAgICBUaGUgY29uZGl0aW9uLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW5GcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IHRydWVGcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZyYWdtZW50IGZhbHNlRnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiAgICAgICBjb25kaXRpb24gKQotICB7Ci0gICAgdGhpcyggdHJ1ZUZyYWdtZW50LCBmYWxzZUZyYWdtZW50LCBjb25kaXRpb24sIG51bGwsICIiICk7Ci0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gIC8qKgotICAgICogQ3JlYXRlcyBhIG5ldyBCb29sZWFuRnJhZ21lbnQuCi0gICAgKgotICAgICogQHBhcmFtIHRydWVGcmFnbWVudCByZXR1cm5lZCBpZiBjb25kaXRpb24gaXMgdHJ1ZS4KLSAgICAqIEBwYXJhbSBmYWxzZUZyYWdtZW50IHJldHVybmVkIGlmIGNvbmRpdGlvbiBpcyBmYWxzZS4KLSAgICAqIEBwYXJhbSBjb25kaXRpb24gdGhlIGNvbmRpdGlvbiBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqIEBwYXJhbSBzdGF0ZSB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSBjb25kaXRpb24uCi0gICAgKiBAcGFyYW0gY29tbWFuZCB0aGUgZXhlY3RhYmxlIGNvbW1hbmQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwdWJsaWMgQm9vbGVhbkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgIHRydWVGcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGcmFnbWVudCBmYWxzZUZyYWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uICAgICAgIGNvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGYWN0b3J5ICBjb21tYW5kRmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICBpZCApCi0gIHsKLSAgICBzdXBlciggY29tbWFuZEZhY3RvcnksIGlkICk7Ci0KLSAgICB0cnVlRnJhZ21lbnRfICAgICAgID0gdHJ1ZUZyYWdtZW50OwotICAgIGZhbHNlRnJhZ21lbnRfICAgICAgPSBmYWxzZUZyYWdtZW50OwotICAgIGNvbmRpdGlvbl8gICAgICAgICAgPSBjb25kaXRpb247IAotICB9Ci0KLSAgLyoqCi0gICAqIENvcHkgY29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmcmFnCi0gICAqLwotICBwcm90ZWN0ZWQgQm9vbGVhbkZyYWdtZW50KCBCb29sZWFuRnJhZ21lbnQgZnJhZyApCi0gIHsKLSAgICB0aGlzKCBudWxsLAotICAgIAkgIG51bGwsCi0gICAgCSAgZnJhZy5jb25kaXRpb25fLAotICAgIAkgIGZyYWcuZ2V0Q29tbWFuZEZhY3RvcnkoKSwKLSAgICAJICBmcmFnLmdldElkKCkgKTsKLQotICAgIC8vIE5vdyB3ZSBoYXZlIHRvIGNsb25lIGluIHRoZSB0cnVlIGFuZCBmYWxzZQotICAgIC8vIGZyYWdtZW50cy4KLSAgICB0cnVlRnJhZ21lbnRfICA9IChDb21tYW5kRnJhZ21lbnQpdHJ1ZUZyYWdtZW50Xy5jbG9uZSgpOwotICAgIGZhbHNlRnJhZ21lbnRfID0gKENvbW1hbmRGcmFnbWVudClmYWxzZUZyYWdtZW50Xy5jbG9uZSgpOwotICB9Ci0gIAotICAvKioKLSAgICAqIE1ha2VzIGEgY29weSBvZiB0aGUgQ29tbWFuZEZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuRnJhZ21lbnQoIHRoaXMgKTsKLSAgfQotCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7ICAgIAotICAgIHJldHVybiBjb25kaXRpb25fLmV2YWx1YXRlKCkgPyB0cnVlRnJhZ21lbnRfIDogZmFsc2VGcmFnbWVudF87Ci0gIH0KLSAgCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBjb25kaXRpb24uCi0gICAqIEBwYXJhbSBjb25kaXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbmRpdGlvbiggQ29uZGl0aW9uIGNvbmRpdGlvbiApCi0gIHsKLSAgICBjb25kaXRpb25fID0gY29uZGl0aW9uOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIHRydWUgZnJhZ21lbnQuCi0gICAqIEBwYXJhbSBmcmFnbWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHJ1ZUZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgdHJ1ZUZyYWdtZW50XyA9IGZyYWdtZW50OwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgZmFsc2UgZnJhZ21lbnQuCi0gICAqIEBwYXJhbSBmcmFnbWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFsc2VGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIGZhbHNlRnJhZ21lbnRfID0gZnJhZ21lbnQ7Ci0gIH0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9DaG9pY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ2hvaWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJjNzcyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9DaG9pY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkV2YWx1YXRlOwotCi0KLS8qKgotICAqIFRoaXMgY2xhc3MgcmV0dXJucyBhIGZyYWdtZW50IGZyb20gYSBsaXN0IG9mIGZyYWdtZW50cyBiYXNlZAotICAqIG9uIHRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUgRXZhbHVhdGUgb2JqZWN0LgotKiovCi1wdWJsaWMgY2xhc3MgQ2hvaWNlRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudCAKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICBmcmFnbWVudFRhYmxlXzsKLSAgcHJpdmF0ZSBFdmFsdWF0ZSAgICAgICBldmFsdWF0ZV87Ci0KLSAgLyoqCi0gICAgKiBDcmVhdGUgYSBjbG9uZSB3aXRoIG5ldyBhIG5ldyBoYXNodGFibGUuCi0gICoqLwotICBwcm90ZWN0ZWQgQ2hvaWNlRnJhZ21lbnQoIENob2ljZUZyYWdtZW50IGZyYWcgKQotICB7Ci0gICAgc3VwZXIoIGZyYWcuZ2V0Q29tbWFuZEZhY3RvcnkoKSwgZnJhZy5nZXRJZCgpICk7Ci0gICAgCi0gICAgZXZhbHVhdGVfICAgICAgPSBmcmFnLmV2YWx1YXRlXzsKLSAgICBmcmFnbWVudFRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgIAotICAgIEVudW1lcmF0aW9uIGtleXMgPSBmcmFnLmZyYWdtZW50VGFibGVfLmtleXMoKTsKLQotICAgIC8vIENsb25lIHRoZSBmcmFnbWVudHMgaW4gdGhlIHRhYmxlLgotICAgIHdoaWxlKCBrZXlzLmhhc01vcmVFbGVtZW50cygpICkKLSAgICB7Ci0gICAgICBPYmplY3Qga2V5ID0ga2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgZnJhZ21lbnRUYWJsZV8ucHV0KCBrZXksICgoQ29tbWFuZEZyYWdtZW50KWZyYWcuZnJhZ21lbnRUYWJsZV8uZ2V0KGtleSkpLmNsb25lKCkgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBDaG9pY2VGcmFnbWVudCggT2JqZWN0W10gICAgICAgICAga2V5cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRnJhZ21lbnRbXSBmcmFnbWVudHMgKQotICB7Ci0gIAl0aGlzKCBrZXlzLCBmcmFnbWVudHMsIG51bGwsIG51bGwsICIiICk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgQ2hvaWNlRnJhZ21lbnQoIE9iamVjdFtdICAgICAgICAgIGtleXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZyYWdtZW50W10gZnJhZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEV2YWx1YXRlICAgICAgICAgIGV2YWx1YXRlICkKLSAgewotICAJdGhpcygga2V5cywgZnJhZ21lbnRzLCBldmFsdWF0ZSwgbnVsbCwgIiIgKTsKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEV2YWx1YXRlKCBFdmFsdWF0ZSBldmFsdWF0ZSApCi0gIHsKLSAgICBldmFsdWF0ZV8gPSBldmFsdWF0ZTsgIAotICB9Ci0gIAotICAvKioKLSAgICAqIENvbnN0cnVjdHMgYSBjaG9pY2UgZnJhZ21lbnQuICBUaGUga2V5IGF0IGluZGV4IFggaXMgbWFwcGVkIHRvIAotICAgICogdG8gdGhlIGZyYWdtZW50IGF0IGluZGV4IFguCi0gICAgKgotICAgICogQHBhcmFtIGtleXMgdGhlc2Uga2V5cyBtdXN0IGJlIHVuaXF1ZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBlcXVhbHMgbWV0aG9kLgotICAgICogVGhleSBhcmUgdXNlZCB0byBpZGVudGlmeSB3aGljaCBmcmFnbWVudCB0byByZXR1cm4uCi0gICAgKiBAcGFyYW0gZnJhZ21lbnRzIHRoZXNlIGFyZSB0aGUgZnJhZ21lbnRzIHRvIGJlIHJldHVybmVkLiAgTnVsbCBpcyBub3QgYWxsb3dlZAotICAgICogYXMgYW4gZW50cnkgaW4gdGhlIGFycmF5LgotICAgICogQHBhcmFtIGV2YWx1YXRlIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhpcyBldmFsdWF0ZSBvYmplY3QgaXMgdXNlZAotICAgICogYXMgdGhlIGtleSB0byBsb2NhdGUgYSBmcmFnbWVudC4KLSAgICAqIEBwYXJhbSBzdGF0ZSB0aGUgc3RhdGUgcGFzc2VkIHRvIGV2YWx1YXRlLgotICAqKi8KLSAgcHVibGljIENob2ljZUZyYWdtZW50KCBPYmplY3RbXSAgICAgICAgICBrZXlzLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGcmFnbWVudFtdIGZyYWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBFdmFsdWF0ZSAgICAgICAgICBldmFsdWF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRmFjdG9yeSAgICBjb21tYW5kRmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICBpZCApCi0gIHsKLSAgICBzdXBlciggY29tbWFuZEZhY3RvcnksIGlkICk7Ci0KLSAgICBldmFsdWF0ZV8gICAgICA9IGV2YWx1YXRlOwotICAgIGZyYWdtZW50VGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gICAgaWYoIGtleXMgPT0gbnVsbCB8fCBmcmFnbWVudHMgPT0gbnVsbCB8fCBrZXlzLmxlbmd0aCAhPSBmcmFnbWVudHMubGVuZ3RoICkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiQmFkIGtleXMgb3IgZnJhZ21lbnRzLiIgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIENyZWF0ZSB0aGUgZnJhZ21lbnQgdGFibGUuCi0gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwga2V5cy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBmcmFnbWVudFRhYmxlXy5wdXQoIGtleXNbaW5kZXhdLCBmcmFnbWVudHNbaW5kZXhdICk7Ci0gICAgICB9ICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgICogTWFrZXMgYSBjb3B5IG9mIHRoZSBDb21tYW5kRnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIGEgY29weSBvZiB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IENob2ljZUZyYWdtZW50KCB0aGlzICk7Ci0gIH0KLSAgCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7ICAgIAotICAgIE9iamVjdCBrZXkgICAgICAgICAgICAgID0gZXZhbHVhdGVfLmV2YWx1YXRlKCk7Ci0gICAgQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ID0gKENvbW1hbmRGcmFnbWVudClmcmFnbWVudFRhYmxlXy5nZXQoa2V5KTsKLQotICAgIGlmKCBmcmFnbWVudCA9PSBudWxsICkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiS2V5IG5vdCBmb3VuZCBpbiB0YWJsZS4gS2V5PSIgKyBrZXkgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGYWN0b3J5RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGYWN0b3J5RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkwNzVhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRmFjdG9yeUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQgaW1wbGVtZW50cyBDb21tYW5kRnJhZ21lbnQgCi17Ci0gIHByaXZhdGUgVmVjdG9yIGNvbW1hbmRzXzsKLSAgCi0gIC8qKgotICAgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBhbmQgcmV0dXJuCi0gICAqIGFuIENvbW1hbmRGYWN0b3J5LgotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpOwotICAKLSAgLyoqCi0gICAqIEFsbCB3aXphcmQgZnJhZ21lbnRzIG5lZWQgdG8gYmUgY2xvbmVhYmxlLgotICAqKi8KLSAgcHVibGljIGFic3RyYWN0IE9iamVjdCBjbG9uZSgpOwotICAKLSAgcHJvdGVjdGVkIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQoIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQgZnJhZyApCi0gIHsKLSAgICBjb21tYW5kc18gPSBmcmFnLmNvbW1hbmRzXzsgIAotICB9Ci0gIAotICBwdWJsaWMgQ29tbWFuZEZhY3RvcnlGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci0gIAotICAvKiogCi0gICAgKiBHZXRzIGV4ZWN1dGFibGUgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGYWN0b3J5IGdldENvbW1hbmRGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpCi0gIHsKLQlDb21tYW5kRnJhZ21lbnQgcmVzdWx0ID0gbnVsbDsKLQkKLSAgICBjb21tYW5kc18gPSBjcmVhdGVDb21tYW5kcygpOwkKLQotCWlmKCBjb21tYW5kc18uc2l6ZSgpID4gMCApCi0JewotCSAgcmVzdWx0ID0gKENoaWxkRnJhZ21lbnQpY29tbWFuZHNfLmVsZW1lbnRBdCgwKTsKLQl9Ci0JCi0JcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0JQ29tbWFuZEZyYWdtZW50IHJlc3VsdCA9IG51bGw7Ci0JCQotCWlmKCBjb21tYW5kc18gIT0gbnVsbCAmJiBmcmFnbWVudCBpbnN0YW5jZW9mIENoaWxkRnJhZ21lbnQgKSAKLQl7Ci0JICBDaGlsZEZyYWdtZW50IGNoaWxkID0gKENoaWxkRnJhZ21lbnQpZnJhZ21lbnQ7Ci0JICAKLQkgIGludCBpbmRleCA9IGNoaWxkLmluZGV4XzsKLQkKLSAgICAgIGlmKCBpbmRleCAhPSAtMSApCi0JICB7Ci0JICAgIGluZGV4Kys7Ci0JICAKLQkgICAgaWYoIGluZGV4IDwgY29tbWFuZHNfLnNpemUoKSApCi0JCXsKLQkJICByZXN1bHQgPSAoQ29tbWFuZEZyYWdtZW50KWNvbW1hbmRzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0JCX0KLQkgIH0KLQl9Ci0JCi0JcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgLyoKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1hcHBpbmdzIGZvciB0aGlzIGNvbW1hbmQgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyggRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSApCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBJZiB0aGUgY29tbWFuZHMgZm9yIHRoaXMgZnJhZ21lbnQgc2hvdWxkIG5vdCBiZSBydW4gd2l0aGluIGEgdHJhbnNhY3Rpb24gdGhlbgotICAgKiB0aGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRydWUuICBJZiB0aGUgZnJhZ21lbnQgZG9lcyBub3QgY2FyZSBpZiBpdCBpcyBydW4gaW4gYSB0cmFuc2FjdGlvbgotICAgKiBvciBub3QgaXQgc2hvdWxkIHJldHVybiBmYWxzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRvTm90UnVuSW5UcmFuc2FjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSBWZWN0b3IgY3JlYXRlQ29tbWFuZHMoKQotICB7Ci0JVmVjdG9yICAgICAgICAgIGNvbW1hbmRzID0gbmV3IFZlY3RvcigpOwotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ICA9IGdldElDb21tYW5kRmFjdG9yeSgpOwotCWludCAgICAgICAgICAgICBpbmRleCAgICA9IDA7Ci0JCSAgCi0Jd2hpbGUoIGZhY3RvcnkgIT0gbnVsbCAmJiBmYWN0b3J5Lmhhc05leHQoKSApCi0JewotCSAgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gY29tbWFuZCA9IGZhY3RvcnkuZ2V0TmV4dENvbW1hbmQoKTsKLQkJCQotCSAgY29tbWFuZHMuYWRkKCBuZXcgQ2hpbGRGcmFnbWVudCggY29tbWFuZCwgaW5kZXgrKyApICk7Ci0JfQotCQotCXJldHVybiBjb21tYW5kczsKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBDaGlsZEZyYWdtZW50IGV4dGVuZHMgU2ltcGxlRnJhZ21lbnQKLSAgewotCSAgaW50IGluZGV4XzsKLQkKLQkgIHB1YmxpYyBDaGlsZEZyYWdtZW50KCBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBjb21tYW5kLCBpbnQgaW5kZXggKQotCSAgewotCSAgICBzdXBlciggY29tbWFuZCwgY29tbWFuZC5nZXRJRCgpICk7Ci0JICAgIGluZGV4XyA9IGluZGV4OwotCSAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjc2MmE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi0KLS8qKgotICAqIFRoaXMgaW50ZXJmYWNlIGRlc2NyaWJlcyBhIGxpc3Qgb2YgaW50ZXJydXB0YWJsZSBjb21tYW5kcy4gIFRoZQotICAqIG9yZGVyIG9mIHRoaXMgbGlzdCBvZiBjb21tYW5kcyBpcyBkZWZpbmVkIGJ5IHRoZSBnZXRGaXJzdFN1YkZyYWdtZW50IGFuZAotICAqIGdldE5leHRTdWJGcmFnbWVudCBtZXRob2RzLgotKiovCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1hbmRGcmFnbWVudCBleHRlbmRzIENsb25lYWJsZQoteyAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKTsKLSAgCi0gIC8qKiAKLSAgICAqIEdldHMgZXhlY3V0YWJsZSBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZhY3RvcnkgZ2V0Q29tbWFuZEZhY3RvcnkoKTsKLQotICAvKiogCi0gICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCk7Ci0KLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApOwotICAKLSAgLyoKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1hcHBpbmdzIGZvciB0aGlzIGNvbW1hbmQgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyggRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSApOwotCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBJZiB0aGUgY29tbWFuZHMgZm9yIHRoaXMgZnJhZ21lbnQgc2hvdWxkIG5vdCBiZSBydW4gd2l0aGluIGEgdHJhbnNhY3Rpb24gdGhlbgotICAgKiB0aGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRydWUuICBJZiB0aGUgZnJhZ21lbnQgZG9lcyBub3QgY2FyZSBpZiBpdCBpcyBydW4gaW4gYSB0cmFuc2FjdGlvbgotICAgKiBvciBub3QgaXQgc2hvdWxkIHJldHVybiBmYWxzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRvTm90UnVuSW5UcmFuc2FjdGlvbigpOwotICAKLSAgLyoqCi0gICAgKiBBbGwgd2l6YXJkIGZyYWdtZW50cyBuZWVkIHRvIGJlIGNsb25lYWJsZS4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKTsgIAotfSAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRFbmdpbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEVuZ2luZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTExNjk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEVuZ2luZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMyAgIDEyOTIzMiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDMxMyAgIDEzMDk1OCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MTAxMSAgIDE1OTI4MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgcHJvamVjdCBub3QgYXNzb2NpYXRlZCB0byBFQVIgd2hlbiB1c2luZyBhbnQgb24gY29tbWFuZC1saW5lCi0gKiAyMDA3MDMyMyAgIDE3NTgwMCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDczMCAgIDE5NzE0NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBQYXNzIHByb2dyZXNzIG1vbml0b3IgdG8gdW5kbyBjb21tYW5kcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5NdWx0aVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkVudmlyb25tZW50Q29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotCi0vKioKLSAqIFRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUgcHJvdmlkZXMgYSBjb252aWVuZW50IHdheSB0byB0cmF2ZXJzZSBDb21tYW5kRnJhZ21lbnRzCi0gKiBhbmQgcG9zc2libGl0eSBleGVjdXRlIGl0cyBhc3NvY2lhdGUgQ29tbWFuZC4KLSAqLwotcHVibGljIGNsYXNzIENvbW1hbmRGcmFnbWVudEVuZ2luZSBpbXBsZW1lbnRzIENvbW1hbmRNYW5hZ2VyCi17Ci0gIHByaXZhdGUgU3RhY2sgICAgICAgICAgICBjb21tYW5kU3RhY2tfOwotICBwcml2YXRlIEZyYWdtZW50TGlzdGVuZXIgdW5kb0ZyYWdtZW50TGlzdGVuZXJfOwotICBwcml2YXRlIEZyYWdtZW50TGlzdGVuZXIgbmV4dEZyYWdtZW50TGlzdGVuZXJfOwotICBwcml2YXRlIEZyYWdtZW50TGlzdGVuZXIgYWZ0ZXJFeGVjdXRlRnJhZ21lbnRMaXN0ZW5lcl87Ci0gIHByaXZhdGUgRnJhZ21lbnRMaXN0ZW5lciBwZWVrRnJhZ21lbnRMaXN0ZW5lcl87Ci0gIHByaXZhdGUgRGF0YUZsb3dNYW5hZ2VyICBkYXRhTWFuYWdlcl87Ci0gIHByaXZhdGUgSUVudmlyb25tZW50ICAgICBlbnZpcm9ubWVudF87Ci0gIHByaXZhdGUgSVN0YXR1cyAgICAgICAgICBsYXN0U3RhdHVzXzsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgQ29tbWFuZEZyYWdtZW50RW5naW5lLgotICAgKiAKLSAgICogQHBhcmFtIHN0YXJ0RnJhZ21lbnQgdGhlIHJvb3QgZnJhZ21lbnQgd2hlcmUgdHJhdmVyc2FsIHdpbGwgYmVnaW4uCi0gICAqIEBwYXJhbSBkYXRhTWFuYWdlciB0aGUgZGF0YSBtYW5hZ2VyIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBkYXRhIG1hcHBpbmdzLgotICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgdGhlIGVudmlyb25tZW50LgotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEVuZ2luZSggQ29tbWFuZEZyYWdtZW50IHN0YXJ0RnJhZ21lbnQsIERhdGFGbG93TWFuYWdlciBkYXRhTWFuYWdlciwgSUVudmlyb25tZW50IGVudmlyb25tZW50ICkKLSAgewotICAJU2VxdWVuY2VGcmFnbWVudCByb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgCXJvb3QuYWRkKCBzdGFydEZyYWdtZW50ICk7Ci0gIAkgIAkKLSAgCWNvbW1hbmRTdGFja18gPSBuZXcgU3RhY2soKTsKLSAgCQotICAJYWRkVG9TdGFjayggcm9vdCwgLTEgKTsKLSAgCWFkZFRvU3RhY2soIHN0YXJ0RnJhZ21lbnQsIDAgKTsKLSAgCQotICAJZGF0YU1hbmFnZXJfID0gZGF0YU1hbmFnZXI7Ci0gIAllbnZpcm9ubWVudF8gPSBlbnZpcm9ubWVudDsKLSAgfSAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nICAgICAgbmV3bGluZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgICAgCi0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAKLSAgICBidWZmZXIuYXBwZW5kKG5ld2xpbmUpOwotICAgIGJ1ZmZlci5hcHBlbmQoIkNvbW1hbmQgc3RhY2sgc3RhcnQ6Iik7Ci0gICAgYnVmZmVyLmFwcGVuZChuZXdsaW5lKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY29tbWFuZFN0YWNrXy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIENvbW1hbmRMaXN0RW50cnkgZW50cnkgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBlbnRyeS5kdW1wKGJ1ZmZlciwgaW5kZXgpOwotICAgIH0KLSAgICAKLSAgICBidWZmZXIuYXBwZW5kKCJDb21tYW5kIHN0YXJ0IGVuZDoiKTsKLSAgICBidWZmZXIuYXBwZW5kKG5ld2xpbmUpOwotICAgIAotICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgRGF0YSBtYXBwaW5nIHJlZ2lzdHJ5LgotICAgKi8KLSAgcHVibGljIERhdGFNYXBwaW5nUmVnaXN0cnkgZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkKLSAgewotCXJldHVybiBkYXRhTWFuYWdlcl8uZ2V0TWFwcGluZ1JlZ2lzdHJ5KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiB0aGUgU3RhdHVzIGZyb20gdGhlIGxhc3QgQ29tbWFuZCBleGVjdXRlZC4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGdldExhc3RTdGF0dXMoKQotICB7Ci0gICAgcmV0dXJuIGxhc3RTdGF0dXNfOwotICB9Ci0gIAotICAvKioKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVW5kb0VuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBuZXh0IGZyYWdtZW50IGxpc3RlbmVyIGZvciB0aGlzIGVuZ2luZS4gIFRoaXMgbGlzdGVuZXIgd2lsbCBiZQotICAgKiBjYWxsZWQgZm9yIGVhY2ggZnJhZ21lbnQgdGhhdCBpcyB0cmF2ZXJzZWQgaW4gbW92ZUZvcndhcmRUb05leHRTdG9wIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgZnJhZ21lbnQgbGlzdGVuZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROZXh0RnJhZ21lbnRMaXN0ZW5lciggRnJhZ21lbnRMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICBuZXh0RnJhZ21lbnRMaXN0ZW5lcl8gPSBsaXN0ZW5lcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QWZ0ZXJFeGVjdXRlRnJhZ21lbnRMaXN0ZW5lciggRnJhZ21lbnRMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICBhZnRlckV4ZWN1dGVGcmFnbWVudExpc3RlbmVyXyA9IGxpc3RlbmVyOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgbmV4dCBmcmFnbWVudCBsaXN0ZW5lciBmb3IgdGhpcyBlbmdpbmUuICBUaGlzIGxpc3RlbmVyIHdpbGwgYmUKLSAgICogY2FsbGVkIGZvciBlYWNoIGZyYWdtZW50IHRoYXQgaXMgdHJhdmVyc2VkIGluIHBlZWtGb3J3YXJkVG9OZXh0U3RvcCBvcGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGZyYWdtZW50IGxpc3RlbmVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGVla0ZyYWdtZW50TGlzdGVuZXIoIEZyYWdtZW50TGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgcGVla0ZyYWdtZW50TGlzdGVuZXJfID0gbGlzdGVuZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBwZWVrIGZyYWdtZW50IGxpc3RlbmVyIGZvciB0aGlzIGVuZ2luZS4gIFRoaXMgbGlzdGVuZXIgd2lsbCBiZQotICAgKiBjYWxsZWQgZm9yIGVhY2ggZnJhZ21lbnQgdGhhdCBpcyB0cmF2ZXJzZWQgaW4gdW5kb1RvTGFzdFN0b3Agb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBmcmFnbWVudCBsaXN0ZW5lci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVuZG9GcmFnbWVudExpc3RlbmVyKCBGcmFnbWVudExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIHVuZG9GcmFnbWVudExpc3RlbmVyXyA9IGxpc3RlbmVyOwotICB9Ci0gIAotICAvKioKLSAgICogVHJhdmVyc2UgdGhlIENvbW1hbmRGcmFnbWVudHMgc3RhcnRpbmcgd2l0aCB0aGUgQ29tbWFuZEZyYWdtZW50IG9uIHRoZQotICAgKiB0b3Agb2YgdGhlIGNvbW1hbmQgZnJhZ21lbnQgc3RhY2suICBUaGUgb3BlcmF0aW9uIGRvZXMgTk9UIGNoYW5nZSB0aGUKLSAgICogY29tbWFuZCBmcmFnbWVudCBzdGFjayBhbmQgZG9lcyBub3QgZXhlY3V0ZSBhbnkgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGgKLSAgICogYSBDb21tYW5kRnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwZWVrRm9yd2FyZFRvTmV4dFN0b3AoKQotICB7Ci0gIAlDb21tYW5kTGlzdEVudHJ5IHRvcEVudHJ5ICAgICAgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmxhc3RFbGVtZW50KCk7ICAJCi0gIAlpbnQgICAgICAgICAgICAgIHBhcmVudEluZGV4ICAgPSB0b3BFbnRyeS5wYXJlbnRJbmRleF87Ci0gIAlDb21tYW5kRnJhZ21lbnQgIGNoaWxkRnJhZ21lbnQgPSB0b3BFbnRyeS5mcmFnbWVudF87IAotICAJYm9vbGVhbiAgICAgICAgICBjb250aW51ZUxvb3AgID0gbmF2aWdhdGVDaGlsZEZyYWdtZW50cyggY2hpbGRGcmFnbWVudCwgZmFsc2UgKTsKLSAgCSAgCQotICAJd2hpbGUoIHBhcmVudEluZGV4ICE9IC0xICYmIGNvbnRpbnVlTG9vcCApCi0gIAl7ICAJCi0gIAkgIENvbW1hbmRMaXN0RW50cnkgcGFyZW50RW50cnkgICAgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmVsZW1lbnRBdCggcGFyZW50SW5kZXggKTsKLSAgCSAgQ29tbWFuZEZyYWdtZW50ICBwYXJlbnRGcmFnbWVudCA9IHBhcmVudEVudHJ5LmZyYWdtZW50XzsKLSAgCSAgQ29tbWFuZEZyYWdtZW50ICBuZXh0RnJhZ21lbnQgICA9IHBhcmVudEZyYWdtZW50LmdldE5leHRTdWJGcmFnbWVudCggY2hpbGRGcmFnbWVudCApOwotICAJICAKLSAgCSAgaWYoIG5leHRGcmFnbWVudCA9PSBudWxsICkKLSAgCSAgewotICAJICAJLy8gVGhlcmUgYXJlIG5vIG1vcmUgc2libGluZyBmcmFnbWVudHMgdG8gbmF2aWdhdGUgc28gd2Ugd2lsbCBwb3AgdXAgdG8gdGhlIHBhcmVudAotICAJICAJLy8gYW4gY29udGludWUgbmF2aWdhdGlvbiB0aGVyZS4KLSAgCSAgCXBhcmVudEluZGV4ICAgPSBwYXJlbnRFbnRyeS5wYXJlbnRJbmRleF87Ci0gIAkgIAljaGlsZEZyYWdtZW50ID0gcGFyZW50RnJhZ21lbnQ7IAotICAJICB9Ci0gIAkgIGVsc2UKLSAgCSAgeyAgCSAgCQotICAJICAJaWYoIG5hdmlnYXRlQ2hpbGRGcmFnbWVudHMoIG5leHRGcmFnbWVudCwgdHJ1ZSApICkgCi0gIAkgIAl7Ci0gIAkgIAkgIC8vIFdlIGFyZSBjb250aW51aW5nIHRvIG5hdmlnYXRlLiAgVGhpcyB0aW1lIHdlIHdhbnQgdG8gdHJhdmVyc2UgdGhlIHNpYmxpbmcKLSAgCSAgCSAgLy8gb2YgbmV4dEZyYWdtZW50LiAKLSAgCSAgCSAgY2hpbGRGcmFnbWVudCA9IG5leHRGcmFnbWVudDsKLSAgCSAgCX0KLSAgCSAgCWVsc2UKLSAgCSAgCXsKLSAgCSAgCSAgLy8gV2UgYXJlIHN0b3BwaW5nIG91ciBuYXZpZ2F0aW9uLgotICAJICAJICBjb250aW51ZUxvb3AgPSBmYWxzZTsKLSAgCSAgCX0KLSAgCSAgfQotICAJfQotICB9Ci0gIAotICAKLSAgLyoqCi0gICAqIFRyYXZlcnNlIHRoZSBDb21tYW5kRnJhZ21lbnRzIHN0YXJ0aW5nIHdpdGggdGhlIENvbW1hbmRGcmFnbWVudCBvbiB0aGUKLSAgICogdG9wIG9mIHRoZSBjb21tYW5kIGZyYWdtZW50IHN0YWNrLiAgVGhpcyBvcGVyYXRpb24gZG9lcyBjaGFuZ2UgdGhlCi0gICAqIGNvbW1hbmQgZnJhZ21lbnQgc3RhY2sgYW5kIGRvZXMgZXhlY3V0ZSBhbnkgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGgKLSAgICogYSBDb21tYW5kRnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBtb3ZlRm9yd2FyZFRvTmV4dFN0b3AoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsKLSAgCUNvbW1hbmRMaXN0RW50cnkgdG9wRW50cnkgICAgICAgID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5sYXN0RWxlbWVudCgpOyAgCQotICAJaW50ICAgICAgICAgICAgICBwYXJlbnRJbmRleCAgICAgPSB0b3BFbnRyeS5wYXJlbnRJbmRleF87Ci0gIAlDb21tYW5kRnJhZ21lbnQgIGN1cnJlbnRGcmFnbWVudCA9IHRvcEVudHJ5LmZyYWdtZW50XzsgIAotICAJYm9vbGVhbiAgICAgICAgICBjb250aW51ZUV4ZWN1dGUgPSB2aXNpdFRvcCggbW9uaXRvciApOwotICAJQ29tbWFuZEZyYWdtZW50ICBjaGlsZEZyYWdtZW50ICAgID0gY3VycmVudEZyYWdtZW50LmdldEZpcnN0U3ViRnJhZ21lbnQoKTsKLSAgCSAgICAKLSAgCS8vIElmIHRoZSBjdXJyZW50IGZyYWdtZW50IGhhcyBjaGlsZCBmcmFnbWVudHMgd2UgbmVlZCB0byB0cmF2ZXJzZSB0aGVzZSBjaGlsZHJlbi4KLSAgCXdoaWxlKCBjaGlsZEZyYWdtZW50ICE9IG51bGwgJiYgY29udGludWVFeGVjdXRlICkKLSAgCXsKLSAgCSAgcGFyZW50SW5kZXggPSBjb21tYW5kU3RhY2tfLnNpemUoKSAtIDE7Ci0gIAkgIGFkZFRvU3RhY2soIGNoaWxkRnJhZ21lbnQsIHBhcmVudEluZGV4ICk7Ci0gIAkgIGNvbnRpbnVlRXhlY3V0ZSA9IHZpc2l0VG9wKCBtb25pdG9yICk7Ci0gIAkgIGN1cnJlbnRGcmFnbWVudCA9IGNoaWxkRnJhZ21lbnQ7Ci0gIAkgIGNoaWxkRnJhZ21lbnQgICA9IGN1cnJlbnRGcmFnbWVudC5nZXRGaXJzdFN1YkZyYWdtZW50KCk7Ci0gIAl9Ci0gIAkKLSAgCS8vIFRoZSBwcmV2aW91cyB3aGlsZSBsb29wIGhhcyBndWFyYW50ZWVkIHRoYXQgY3VycmVudEZyYWdtZW50IGhhcyBubwotICAJLy8gY2hpbGQgZnJhZ21lbnRzLiBUaGlzIHdoaWxlIGxvb3AgYXNzdW1lcyB0aGlzIHRvIGJlIHRoZSBjYXNlLgotICAJd2hpbGUoIHBhcmVudEluZGV4ICE9IC0xICYmIGNvbnRpbnVlRXhlY3V0ZSApCi0gIAl7ICAJICAgCQotICAJICBDb21tYW5kTGlzdEVudHJ5IHBhcmVudEVudHJ5ICAgID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5lbGVtZW50QXQoIHBhcmVudEluZGV4ICk7Ci0gIAkgIENvbW1hbmRGcmFnbWVudCAgcGFyZW50RnJhZ21lbnQgPSBwYXJlbnRFbnRyeS5mcmFnbWVudF87Ci0gIAkgIENvbW1hbmRGcmFnbWVudCAgbmV4dEZyYWdtZW50ICAgPSBudWxsOwotICAJICAKLSAgCSAgaWYoIGN1cnJlbnRGcmFnbWVudCA9PSBudWxsICkKLSAgCSAgewotICAJICAgIG5leHRGcmFnbWVudCA9IHBhcmVudEZyYWdtZW50LmdldEZpcnN0U3ViRnJhZ21lbnQoKTsKLSAgCSAgfQotICAJICBlbHNlCi0gIAkgIHsJCi0gIAkgICAgbmV4dEZyYWdtZW50ID0gcGFyZW50RnJhZ21lbnQuZ2V0TmV4dFN1YkZyYWdtZW50KCBjdXJyZW50RnJhZ21lbnQgKTsKLSAgCSAgfQotICAJICAKLSAgCSAgaWYoIG5leHRGcmFnbWVudCA9PSBudWxsICkKLSAgCSAgewotICAJICAJLy8gVGhlcmUgYXJlIG5vIG1vcmUgc2libGluZyBmcmFnbWVudHMgdG8gbmF2aWdhdGUgc28gd2Ugd2lsbCBwb3AgdXAgdG8gdGhlIHBhcmVudAotICAJICAJLy8gYW5kIGNvbnRpbnVlIG5hdmlnYXRpb24gdGhlcmUuCi0gIAkgIAlwYXJlbnRJbmRleCAgICAgPSBwYXJlbnRFbnRyeS5wYXJlbnRJbmRleF87Ci0gIAkgIAljdXJyZW50RnJhZ21lbnQgPSBwYXJlbnRGcmFnbWVudDsgCi0gIAkgIH0KLSAgCSAgZWxzZQotICAJICB7ICAJCi0gIAkgIAkvLyBXZSBoYXZlIGEgbmV3IGZyYWdtZW50IHRoYXQgd2UgbmVlZCB0byBhZGQgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2suCi0gIAkgIAlhZGRUb1N0YWNrKCBuZXh0RnJhZ21lbnQsIHBhcmVudEluZGV4ICk7ICAJICAJCi0gIAkgICAgcGFyZW50SW5kZXggICAgID0gY29tbWFuZFN0YWNrXy5zaXplKCkgLSAxOyAgCQotICAJICAgIGNvbnRpbnVlRXhlY3V0ZSA9IHZpc2l0VG9wKCBtb25pdG9yICk7Ci0gIAkgICAgY3VycmVudEZyYWdtZW50ID0gbnVsbDsgIAkgIAkKLSAgCSAgfQotICAJfQotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSB0aGVyZSBpcyBub3QgbG9uZ2VyIGFueSBlbGVtZW50cyBvbiB0aGUgc3RhY2suICBOb3RlOgotICAgKiAgICAgICAgICAgICAgICAgdGhhdCBsYXN0IHR3byBlbnRyaWVzIGFyZSBhbHdheXMgbGVmdCBvbiB0aGUgc3RhY2suCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiB1bmRvVG9MYXN0U3RvcCggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgeyAgICAKLSAgCUNvbW1hbmRMaXN0RW50cnkgdG9wRW50cnkgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmxhc3RFbGVtZW50KCk7CQotICAJCi0JICBpZiggdG9wRW50cnkuZnJhZ21lbnRTdG9wcGVkXyAmJiAhdG9wRW50cnkuYmVmb3JlRXhlY3V0ZV8gKQotICAgIHsKLSAgICAgIC8vIE5vcm1hbGx5IHRoZSBjb21tYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGhhcyBub3QgYmVlbiBleGVjdXRlZC4gIElmCi0gICAgICAvLyBpdCBoYXMgYmVlbiBleGVjdXRlLCBpdCBtZWFucyB0aGF0IHdlIHRyaWVkIHRvIGV4ZWN1dGUgYW5kIGl0IGZhaWxlZC4KLSAgICAgIC8vIFRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBjb21tYW5kIHN0YWNrIGZhaWxlZC4gIFRoZXJlZm9yZSwgd2Ugc2hvdWxkCi0gICAgICAvLyBvbmx5IHVuZG8gdGhpcyBjb21tYW5kLgotICAgICAgcGVyZm9ybVVuZG8oIHRvcEVudHJ5LCBtb25pdG9yICk7Ci0gICAgICByZXR1cm4gdG9wRW50cnkucGFyZW50SW5kZXhfID09IDA7Ci0gICAgfQotICAgIAotICAJcGVyZm9ybVVuZG8oIHRvcEVudHJ5LCBtb25pdG9yICk7Ci0gIAkJCi0gICAgd2hpbGUoIHRvcEVudHJ5LnBhcmVudEluZGV4XyAhPSAwICkKLSAgCXsKLSAgICAgIGNvbW1hbmRTdGFja18ucG9wKCk7Ci0gIAkgIHRvcEVudHJ5ID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5sYXN0RWxlbWVudCgpOwkgIAotICAgICAgCi0gIAkgIHBlcmZvcm1VbmRvKCB0b3BFbnRyeSwgbW9uaXRvciApOwotICAJICAKLSAgCSAgaWYoIHRvcEVudHJ5LmZyYWdtZW50U3RvcHBlZF8gKQotICAJICB7Ci0gIAkgICAgYnJlYWs7Ci0gIAkgIH0KLSAgCX0KLSAgCQotICAJcmV0dXJuIHRvcEVudHJ5LnBhcmVudEluZGV4XyA9PSAwOwotICB9Ci0gICAKLSAgcHJpdmF0ZSB2b2lkIHBlcmZvcm1VbmRvKCBDb21tYW5kTGlzdEVudHJ5IGVudHJ5LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7Ci0gICAgaWYoIGVudHJ5LnBhcmVudEluZGV4XyA9PSAwICkgcmV0dXJuOwotICAgIAotCSAgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gY21kID0gZW50cnkuY29tbWFuZF87Ci0gIAkgIAotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCBjbWQgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGlmKCBjbWQuY2FuVW5kbygpICYmICFlbnRyeS5iZWZvcmVFeGVjdXRlXyApCi0JICAgICAgewotCSAgICAgICAgY21kLnVuZG8oIG1vbml0b3IsIG51bGwgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZGF0YU1hbmFnZXJfLnVucHJvY2VzcyggY21kICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIAotCSAgZW50cnkuYmVmb3JlRXhlY3V0ZV8gPSB0cnVlOyAgCi0JICB1bmRvRnJhZ21lbnRMaXN0ZW5lcl8ubm90aWZ5KCBlbnRyeS5mcmFnbWVudF8gKTsgIAkKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIG5hdmlnYXRlQ2hpbGRGcmFnbWVudHMoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCwgYm9vbGVhbiB2aXNpdEN1cnJlbnQgKQotICB7Ci0gIAlib29sZWFuICAgICAgICAgY29udGludWVOYXZpZ2F0ZSA9IHRydWU7Ci0gIAlDb21tYW5kRnJhZ21lbnQgY2hpbGRGcmFnICAgICAgICA9IG51bGw7IAotICAJICAKLSAgCWlmKCB2aXNpdEN1cnJlbnQgKQotICAJewotICAJICBjb250aW51ZU5hdmlnYXRlID0gcGVla0ZyYWdtZW50TGlzdGVuZXJfLm5vdGlmeSggZnJhZ21lbnQgKTsKLSAgICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBmcmFnbWVudCApOwotICAJfQotICAJCi0gIAljaGlsZEZyYWcgPSBmcmFnbWVudC5nZXRGaXJzdFN1YkZyYWdtZW50KCk7Ci0gICAJCi0gIAl3aGlsZSggY2hpbGRGcmFnICE9IG51bGwgJiYgY29udGludWVOYXZpZ2F0ZSApCi0gIAl7Ci0gIAkgIGNvbnRpbnVlTmF2aWdhdGUgPSBuYXZpZ2F0ZUNoaWxkRnJhZ21lbnRzKCBjaGlsZEZyYWcsIHRydWUgKTsKLSAgCSAgY2hpbGRGcmFnICAgICAgICA9IGZyYWdtZW50LmdldE5leHRTdWJGcmFnbWVudCggY2hpbGRGcmFnICk7Ci0gIAl9Ci0gIAkKLSAgCXJldHVybiBjb250aW51ZU5hdmlnYXRlOwotICB9Ci0gICAgCi0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFRvcCggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgeyAgCi0gIAlDb21tYW5kTGlzdEVudHJ5IGVudHJ5ICAgICAgICAgICA9IChDb21tYW5kTGlzdEVudHJ5KWNvbW1hbmRTdGFja18ubGFzdEVsZW1lbnQoKTsKLSAgCWJvb2xlYW4gICAgICAgICBjb250aW51ZU5hdmlnYXRlID0gbmV4dEZyYWdtZW50TGlzdGVuZXJfLm5vdGlmeSggZW50cnkuZnJhZ21lbnRfICk7Ci0gIAkgIAotICAJaWYoIGNvbnRpbnVlTmF2aWdhdGUgKQotICAJewotICAJICAvLyBDYWxsIHRoZSBzZXR0ZXJzIGZvciB0aGlzIGZyYWdtZW50LgotICAgICAgZGF0YU1hbmFnZXJfLnByb2Nlc3MoIGVudHJ5LmZyYWdtZW50XyApOwotICAgICAgCi0gICAgICAvLyBBZGQgYW55IHJ1bGVzIHRvIHRoZSBtYXBwaW5nIHJlZ2lzdHJ5IGJlZm9yZSB3ZSBleGVjdXRlIHRoZSBjb21tYW5kLgotICAgICAgZW50cnkuZnJhZ21lbnRfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhTWFuYWdlcl8uZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkgKTsKLSAgIAotICAJICBsYXN0U3RhdHVzXyA9IHJ1bkNvbW1hbmQoIGVudHJ5LCBtb25pdG9yICk7Ci0gIAkgIAotICAgICAgaWYoIGFmdGVyRXhlY3V0ZUZyYWdtZW50TGlzdGVuZXJfICE9IG51bGwgKQotICAgICAgewotICAgICAgICBjb250aW51ZU5hdmlnYXRlID0gYWZ0ZXJFeGVjdXRlRnJhZ21lbnRMaXN0ZW5lcl8ubm90aWZ5KCBlbnRyeS5mcmFnbWVudF8gKTsgIAotICAgICAgICAKLSAgICAgICAgaWYoICFjb250aW51ZU5hdmlnYXRlICkKLSAgICAgICAgewotICAgICAgICAgIC8vIFRoZSBhZnRlciBleGVjdXRpb24gbGlzdGVuZXIgaGFzIGluZGljYXRlZCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcC4KLSAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHdpbGwgdXBncmFkZSB0aGUgc2V2ZXJpdHkgb2YgdGhlIGxhc3Qgc3RhdHVzIHRvIEVSUk9SLgotICAgICAgICAgIGxhc3RTdGF0dXNfID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3RhdHVzXy5nZXRQbHVnaW4oKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3RhdHVzXy5nZXRDb2RlKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFN0YXR1c18uZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFN0YXR1c18uZ2V0RXhjZXB0aW9uKCkgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gIAkgIGlmKCBjb250aW51ZU5hdmlnYXRlICYmIGxhc3RTdGF0dXNfLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApIGNvbnRpbnVlTmF2aWdhdGUgPSBmYWxzZTsKLSAgCX0KLSAgCQotICAgCWlmKCAhY29udGludWVOYXZpZ2F0ZSApIGVudHJ5LmZyYWdtZW50U3RvcHBlZF8gPSB0cnVlOwotICAgCQotICAJcmV0dXJuIGNvbnRpbnVlTmF2aWdhdGU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBhZGRUb1N0YWNrKCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQsIGludCBwYXJlbnRJbmRleCApCi0gIHsKLSAgICBDb21tYW5kTGlzdEVudHJ5IGVudHJ5ID0gbmV3IENvbW1hbmRMaXN0RW50cnkoIGZyYWdtZW50LCBwYXJlbnRJbmRleCApOwotICAgIGNvbW1hbmRTdGFja18ucHVzaCggZW50cnkgKTsKLSAgfQotICAKLSAgLy8gU3ViY2xhc3NlcyBjYW4gZG8gaW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoZSBleGVjdXRpb24gb2YgYSBjb21tYW5kIGhlcmUKLSAgcHJvdGVjdGVkIElTdGF0dXMgaW5pdEJlZm9yZUV4ZWN1dGUoIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wZXJhdGlvbiApCi0gIHsgIAotCSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBydW5Db21tYW5kKCBDb21tYW5kTGlzdEVudHJ5IGVudHJ5LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7Ci0JQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSAgPSBlbnRyeS5mcmFnbWVudF8uZ2V0Q29tbWFuZEZhY3RvcnkoKTsKLSAgCUlTdGF0dXMgICAgICBzdGF0dXMgICA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAkKLSAgCWlmKCBmYWN0b3J5ICE9IG51bGwgKQotICAJewotICAJICBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBjbWQgID0gZmFjdG9yeS5jcmVhdGUoKTsKLSAgICAgIAotICAJICBlbnRyeS5jb21tYW5kXyA9IGNtZDsKLSAgCSAgICAKLSAgCSAgaWYoIGNtZCAhPSBudWxsICkKLSAgCSAgewotICAJICAgIHRyeQotICAJICAgIHsKLSAgCSAgICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBjbWQgKTsgIAkgICAgCQotICAJICAgIAkKLSAgICAgICAgICBzdGF0dXMgPSBpbml0QmVmb3JlRXhlY3V0ZSggY21kICk7Ci0gICAgICAgICAgCi0gIAkgICAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImNvbW1hbmQiLCA1MDAxLCB0aGlzLCAicnVuQ29tbWFuZCIsICJFeGVjdXRpbmc6ICIgKyBjbWQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAJICAJICAgIAotIAkgICAgICAgIGNtZC5zZXRFbnZpcm9ubWVudCggZW52aXJvbm1lbnRfICk7Ci0gICAgICAgICAgc3RhdHVzID0gY21kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLSAgICAgICAgICAKLQkJICAgICAgZW50cnkuYmVmb3JlRXhlY3V0ZV8gPSBmYWxzZTsKLSAgCSAgICB9Ci0gIAkgICAgY2F0Y2goIFRocm93YWJsZSBleGMgKQotICAJICAgIHsKLSAgCSAgICAgIElTdGF0dXMgICAgICB1bmV4cGVjdGVkRXJyb3IgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggZXhjICk7Ci0gICAgICAgICAgTXVsdGlTdGF0dXMgIHBhcmVudFN0YXR1cyAgICA9IG5ldyBNdWx0aVN0YXR1cyggImlkIiwgMCwgbmV3IElTdGF0dXNbXXt1bmV4cGVjdGVkRXJyb3J9LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudENvcmVNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FUlJPUiwgbnVsbCApOwotICAJICAgICAgZW52aXJvbm1lbnRfLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggcGFyZW50U3RhdHVzICk7Ci0gIAkgICAgICBzdGF0dXMgPSB1bmV4cGVjdGVkRXJyb3I7Ci0gIAkgICAgfQotICAJICAgIGZpbmFsbHkKLSAgCSAgICB7Ci0gIAkgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJPayI7Ci0gIAkgICAgICAKLSAgCSAgICAgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IgKQotICAJICAgICAgewotICAJICAgICAgICBtZXNzYWdlID0gIkVycm9yOiAiICsgc3RhdHVzLmdldE1lc3NhZ2UoKTsgCi0gIAkgICAgICB9Ci0gIAkgICAgICAKLQkgICAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImNvbW1hbmQiLCA1MDAxLCB0aGlzLCAicnVuQ29tbWFuZCIsICJFeGVjdXRpb24gc3RhdHVzOiAiICsgbWVzc2FnZSApOwotICAJICAgIH0KLSAgCSAgfQotICAJfQotICAJCi0gIAlyZXR1cm4gc3RhdHVzOwotICB9Ci0gICAgCi0gIHByaXZhdGUgY2xhc3MgQ29tbWFuZExpc3RFbnRyeQotICB7Ci0gIAlwdWJsaWMgQ29tbWFuZExpc3RFbnRyeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50LCBpbnQgcGFyZW50SW5kZXggKQotICAJewotICAJICBmcmFnbWVudF8gICAgICAgID0gZnJhZ21lbnQ7Ci0gIAkgIHBhcmVudEluZGV4XyAgICAgPSBwYXJlbnRJbmRleDsKLSAgCSAgZnJhZ21lbnRTdG9wcGVkXyA9IGZhbHNlOwotCSAgYmVmb3JlRXhlY3V0ZV8gICA9IHRydWU7Ci0gIAl9Ci0gIAkgIAkKLSAgCXB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBjb21tYW5kXzsKLSAgCXB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnRfOwotICAJcHVibGljIGludCAgICAgICAgICAgICBwYXJlbnRJbmRleF87Ci0gIAlwdWJsaWMgYm9vbGVhbiAgICAgICAgIGZyYWdtZW50U3RvcHBlZF87Ci0gIAlwdWJsaWMgYm9vbGVhbiAgICAgICAgIGJlZm9yZUV4ZWN1dGVfOwotICAgIAotICAgIHB1YmxpYyB2b2lkIGR1bXAoIFN0cmluZ0J1ZmZlciBidWZmZXIsIGludCBpbmRleCApCi0gICAgewotICAgICAgU3RyaW5nIG5ld2xpbmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7ICAgIAotICAgICAgU3RyaW5nIGxpbmUgICAgPSAiICAiICsgaW5kZXggKyAiLSBmcmFnOiAiICsgZnJhZ21lbnRfLmdldElkKCkgKyAiIHBhckluZGV4OiAiICsgcGFyZW50SW5kZXhfICsgIiBzdG9wOiAiICsgZnJhZ21lbnRTdG9wcGVkXyArICIgYmVmb3JlRXhlY3V0ZTogIiArIGJlZm9yZUV4ZWN1dGVfIDsKLSAgICAgIGJ1ZmZlci5hcHBlbmQobGluZSk7IAotICAgICAgYnVmZmVyLmFwcGVuZChuZXdsaW5lKTsKLSAgICB9Ci0gIH0gICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyM2M5NjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5IHRvIGNyZWF0ZSBDb21tYW5kRnJhZ21lbnRzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tYW5kRnJhZ21lbnRGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgY3JlYXRlZCBDb21tYW5kRnJhZ21lbnQgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTlmYjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkgCi17Ci0gIC8qKgotICAgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGdldCB0aGUgQ29tbWFuZEZyYWdtZW50RmFjdG9yeQotICAgKiBmb3IgYSBwYXJ0aWN1bGFyIGV4dGVuc2lvbi4KLSAgICogCi0gICAqIEByZXR1cm4gQ3JlYXRlcyBhIENvbW1hbmRGcmFnbWVudEZhY3RvcnkuCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKTsgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvRXh0ZW5zaW9uRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0V4dGVuc2lvbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MTczZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvRXh0ZW5zaW9uRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUucmVnaXN0cnkuQ29tbWFuZFJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBFeHRlbnNpb25GcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50IAotewotICBwcml2YXRlIFN0cmluZ1tdICAgICAgICBpZHNfOzsKLSAgcHJpdmF0ZSBDb21tYW5kUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnlfOwotICBwcml2YXRlIEhhc2h0YWJsZSAgICAgICBmcmFnbWVudHNfOwotICAKLSAgLyoqCi0gICAqICBUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgKgotICAgKi8KLSAgcHVibGljIEV4dGVuc2lvbkZyYWdtZW50KCkKLSAgewotICAgIHN1cGVyKCBudWxsLCAiIiApOyAgCi0gICAgZnJhZ21lbnRzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotICAgIAotICAvKioKLSAgICogQ29weSBjb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIEZyYWdtZW50IHRoZSBmcmFnbWVudCB0byBjb3B5Ci0gICAqLwotICBwcm90ZWN0ZWQgRXh0ZW5zaW9uRnJhZ21lbnQoIEV4dGVuc2lvbkZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIHN1cGVyKCBmcmFnbWVudCApOwotICAgIAotICAgIGlkc18gICAgICAgICAgICAgICA9IGZyYWdtZW50Lmlkc187Ci0gICAgZXh0ZW5zaW9uUmVnaXN0cnlfID0gZnJhZ21lbnQuZXh0ZW5zaW9uUmVnaXN0cnlfOwotICAgIGZyYWdtZW50c18gICAgICAgICA9IGZyYWdtZW50LmZyYWdtZW50c187Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGlkcyBTZXRzIHRoZSBJRHMgZm9yIHRoaXMgZXh0ZW5zaW9uIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXh0ZW5zaW9uSWRzKCBTdHJpbmdbXSBpZHMgKQotICB7Ci0gICAgaWRzXyA9IGlkczsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gcmVnaXN0cnkgU2V0cyB0aGUgcmVnaXN0cnkgZm9yIHRoaXMgZXh0ZW5zaW9uIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXh0ZW5zaW9uUmVnaXN0cnkoIENvbW1hbmRSZWdpc3RyeSByZWdpc3RyeSApCi0gIHsKLSAgICBleHRlbnNpb25SZWdpc3RyeV8gPSByZWdpc3RyeTsgCi0gIH0KLSAgICAgIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjZ2V0Rmlyc3RTdWJGcmFnbWVudCgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKSAKLSAgewotICAgIENvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5IGZhY3RvcnkgID0gZXh0ZW5zaW9uUmVnaXN0cnlfLmdldEZhY3RvcnlGYWN0b3J5KCBpZHNfICk7Ci0gICAgCi0gICAgaWYoIGZhY3RvcnkgPT0gbnVsbCApIHJldHVybiBudWxsOwotICAgIAotICAgIENvbW1hbmRGcmFnbWVudCAgICAgICAgICAgICAgIGZyYWdtZW50ID0gKENvbW1hbmRGcmFnbWVudClmcmFnbWVudHNfLmdldCggZmFjdG9yeSApOwotICAgIAotICAgIGlmKCBmcmFnbWVudCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBmcmFnbWVudCA9IGZhY3RvcnkuY3JlYXRlKCkuY3JlYXRlKCk7Ci0gICAgICBmcmFnbWVudHNfLnB1dCggZmFjdG9yeSwgZnJhZ21lbnQgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICBmcmFnbWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I2dldE5leHRTdWJGcmFnbWVudChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudChDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQpIAotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjY2xvbmUoKQotICAgKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0gICAgcmV0dXJuIG5ldyBFeHRlbnNpb25GcmFnbWVudCggdGhpcyApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9GcmFnbWVudExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9GcmFnbWVudExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZGU3ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvRnJhZ21lbnRMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHNob3VsZCBiZSBpbXBsZW1lbnQgZm9yIGNvZGUgdGhhdCBuZWVkcyB0byBsaXN0ZW4gdG8gZnJhZ21lbnRzCi0gKiB0aGF0IGFyZSBiZWluZyB0cmF2ZXJzZSBieSB0aGUgQ29tbWFuZEZyYWdtZW50RW5naW5lLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBGcmFnbWVudExpc3RlbmVyIAotewotICAvKgotICAgKiBOb3RpZmllcyB0aGlzIGxpc3RlbmVyIHRoYXQgYSBjb21tYW5kRnJhZ21lbnQgaXMgYmVpbmcgdmlzaXRlZCBkdXJpbmcKLSAgICogYSB0cmF2ZXJzYWwuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBjb21tYW5kRnJhZ21lbnQgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0xvb3BDb25kaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0xvb3BDb25kaXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAzYjFhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Mb29wQ29uZGl0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLS8qKgotICAqIFRoaXMgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIHdoZW4gYSBjb25kaXRpb25hbCBvYmplY3QgbmVlZHMgdG8gYmUgcmV0dXJuZWQuCi0qKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9vcENvbmRpdGlvbgotewotICAvKioKLSAgICAqIEV2YWx1YXRlcyBhIGxvb3AgY29uZGl0aW9uLgotICAgICoKLSAgICAqIEBwYXJhbSBsb29wIHRoZSBsb29wIGZyYWdtZW50IHRoYXQgaXMgYmVpbmcgZXZhbHVhdGVkLgotICAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBjaGlsZCBmcmFnbWVudCBvZiB0aGUgbG9vcCAKLSAgICAqICAgICAgICB1bmRlciBldmFsdWF0aW9uLiAgTm90ZTogZnJhZ21lbnQgY2FuIGJlIG51bGwuCi0gICAgKiBAcmV0dXJuIHJldHVybnMgYW4gb2JqZWN0IGJhc2VkIG9uIHNvbWUgZXZhbHVhdGVkIGNvbmRpdGlvbi4KLSAgKiovCi0gIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCBMb29wRnJhZ21lbnQgbG9vcCwgQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Mb29wRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0xvb3BGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzk3MWEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0xvb3BGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5SYW5nZVZlY3RvcjsKLQotCi0vKioKLSAgKiBUaGlzIGNsYXNzIHJldHVybnMgYSBkeW5hbWljYWxseSBkZXRlcm1pbmVkIG51bWJlciBvZgotICAqIGZyYWdtZW50cy4gIFRoaXMgbG9vcCB3aWxsIHJldHVybiB0aGUgZnJhZ21lbnQgcGFyYW1ldGVyCi0gICogYXMgbG9uZyBhcyB0aGUgc3RvcENvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2UuICBPdGhlcndpc2UsCi0gICogbnVsbCBpcyByZXR1cm5lZC4KLSoqLwotcHVibGljIGNsYXNzIExvb3BGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50Ci17Ci0gIHByaXZhdGUgTG9vcENvbmRpdGlvbiAgIHN0b3BDb25kaXRpb25fOwotICBwcml2YXRlIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudF87Ci0gIHByaXZhdGUgUmFuZ2VWZWN0b3IgICAgIGZyYWdtZW50SGlzdG9yeV87Ci0KLSAgLyoqCi0gICAgKiBDb3B5IGNvbnRydWN0b3IgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwcm90ZWN0ZWQgTG9vcEZyYWdtZW50KCBMb29wRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgdGhpcyggZnJhZ21lbnQuZnJhZ21lbnRfLAotICAgIAkgIGZyYWdtZW50LnN0b3BDb25kaXRpb25fLAotICAgIAkgIGZyYWdtZW50LmdldENvbW1hbmRGYWN0b3J5KCksCi0gICAgCSAgZnJhZ21lbnQuZ2V0SWQoKSApOwotICB9Ci0gIAotICBwdWJsaWMgTG9vcEZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBMb29wQ29uZGl0aW9uICAgc3RvcENvbmRpdGlvbiApCi0gIHsKLSAgICB0aGlzKCBmcmFnbWVudCwgc3RvcENvbmRpdGlvbiwgbnVsbCwgIiIgKTsKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgCi0gIAotICAvKioKLSAgICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgZnJhZ21lbnQgdGhhdCB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSBsb29wLgotICAgICogQHBhcmFtIHN0b3BDb25kaXRpb24gd2hlbiBmYWxzZSB0aGUgZnJhZ21lbnQgd2lsbCBiZSByZXR1cm5lZCwgCi0gICAgKiBvdGhlcndpc2UgbnVsbCBpcyByZXR1cm5lZC4KLSAgICAqIEBwYXJhbSBzdGF0ZSB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSBjb25kaXRpb24uCi0gICAgKiBAcGFyYW0gY29tbWFuZCB0aGUgZXhlY3V0YWJsZSBjb21tYW5kIGZvciB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIExvb3BGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICBMb29wQ29uZGl0aW9uICAgc3RvcENvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZhY3RvcnkgIGNvbW1hbmRGYWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgaWQgICApCi0gIHsKLSAgICBzdXBlciggY29tbWFuZEZhY3RvcnksIGlkICk7Ci0KLSAgICBmcmFnbWVudF8gICAgICAgID0gZnJhZ21lbnQ7Ci0gICAgc3RvcENvbmRpdGlvbl8gICA9IHN0b3BDb25kaXRpb247Ci0gICAgZnJhZ21lbnRIaXN0b3J5XyA9IG5ldyBSYW5nZVZlY3RvcigpOwotICB9Ci0gIAotICAvKioKLSAgICAqIE1ha2VzIGEgY29weSBvZiB0aGUgQ29tbWFuZEZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBMb29wRnJhZ21lbnQoIHRoaXMgKTsKLSAgfQotCi0gIC8qKgotICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZyYWdtZW50Ci0gICAgKgotICAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBmcmFnbWVudCB0byBzZWFyY2guCi0gICAgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIGludCBpbmRleE9mKCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgcmV0dXJuIGZyYWdtZW50SGlzdG9yeV8uaW5kZXhPZiggZnJhZ21lbnQgKTsKLSAgfQotCi0KLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpCi0gIHsgICAgCi0gICAgcmV0dXJuIGdldE5leHRTdWJGcmFnbWVudCggbnVsbCApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnICkKLSAgewotICAgIENvbW1hbmRGcmFnbWVudCBuZXh0RnJhZyAgPSBudWxsOwotICAgIAotICAgIGlmKCBzdG9wQ29uZGl0aW9uXy5ldmFsdWF0ZSggdGhpcywgZnJhZyApICkKLSAgICB7Ci0gICAgICAvLyBUaGUgc3RvcCBjb25kaXRpb24gaGFzIGJlZW4gbWV0LgotICAgICAgLy8gRG8gbm90aGluZy4KLSAgICB9Ci0gICAgZWxzZQotICAgIHsgICAgICAKLSAgICAgIGludCBmcmFnSW5kZXggPSBpbmRleE9mKCBmcmFnICk7Ci0KLSAgICAgIC8vIE5vdGU6IHdoZW4gZnJhZ21lbnQgPT0gbnVsbCB0aGUgZnJhZ0luZGV4Ci0gICAgICAvLyAgICAgICBzaG91bGQgYmUgLTEuICBUaGVyZWZvcmUsIGlmIHRoZXJlCi0gICAgICAvLyAgICAgICBpcyBhbHJlYWR5IGEgZmlyc3QgZnJhZ21lbnQgaW4KLSAgICAgIC8vICAgICAgIGZyYWdtZW50SGlzdG9yeSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICBpZiggZnJhZ0luZGV4ICsgMSA8IGZyYWdtZW50SGlzdG9yeV8uc2l6ZSgpICkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhIGNvcHkgb2YgdGhlIGZyYWdtZW50IGFscmVhZHkuCi0gICAgICAgIG5leHRGcmFnID0gKENvbW1hbmRGcmFnbWVudCkoZnJhZ21lbnRIaXN0b3J5Xy5lbGVtZW50QXQoIGZyYWdJbmRleCArIDEgKSk7IAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBuZXh0RnJhZyA9IChDb21tYW5kRnJhZ21lbnQpKGZyYWdtZW50Xy5jbG9uZSgpKTsKLSAgICAgICAgZnJhZ21lbnRIaXN0b3J5Xy5hZGQoIG5leHRGcmFnICk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5leHRGcmFnOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9TZXF1ZW5jZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9TZXF1ZW5jZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMGNlNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvU2VxdWVuY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotCi0KLS8qKgotICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHNlcXVlbmNlIG9mIENvbW1hbmRGcmFnbWVudHMuCi0qKi8KLXB1YmxpYyBjbGFzcyBTZXF1ZW5jZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBMaXN0IGZyYWdtZW50TGlzdF87Ci0KLSAgcHJvdGVjdGVkIFNlcXVlbmNlRnJhZ21lbnQoIFNlcXVlbmNlRnJhZ21lbnQgZnJhZyApCi0gIHsKLSAgCXN1cGVyKCBmcmFnLmdldENvbW1hbmRGYWN0b3J5KCksIGZyYWcuZ2V0SWQoKSApOwotICAJCi0gICAgZnJhZ21lbnRMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgZnJhZy5mcmFnbWVudExpc3RfLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgT2JqZWN0IG5ld0ZyYWcgPSAoKENvbW1hbmRGcmFnbWVudClmcmFnLmZyYWdtZW50TGlzdF8uZ2V0KGluZGV4KSkuY2xvbmUoKTsKLSAgICAgIGZyYWdtZW50TGlzdF8uYWRkKCBuZXdGcmFnICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgU2VxdWVuY2VGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50W10gZnJhZ21lbnRzLCAKLQkJCQkJCSAgIENvbW1hbmRGYWN0b3J5ICAgIGNvbW1hbmRGYWN0b3J5LCAKLQkJCQkJICAgICAgIFN0cmluZyAgICAgICAgICAgIGlkICApCi0gIHsKLSAgCXN1cGVyKCBjb21tYW5kRmFjdG9yeSwgaWQgKTsKLSAgCQotICAgIGlmKCBmcmFnbWVudHMgIT0gbnVsbCApCi0gICAgewotICAgICAgZnJhZ21lbnRMaXN0XyA9IEFycmF5cy5hc0xpc3QoIGZyYWdtZW50cyApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZnJhZ21lbnRMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTZXF1ZW5jZUZyYWdtZW50KCkKLSAgewotICAJc3VwZXIoIG51bGwsICIiICk7Ci0gIAkKLSAgCWZyYWdtZW50TGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICAvKioKLSAgICAqIEFwcGVuZHMgYSBmcmFnbWVudCB0byB0aGUgc2VxdWVuY2UuIAotICAqKi8KLSAgcHVibGljIHZvaWQgYWRkKCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgZnJhZ21lbnRMaXN0Xy5hZGQoIGZyYWdtZW50ICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgICogTWFrZXMgYSBjb3B5IG9mIHRoZSBDb21tYW5kRnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIGEgY29weSBvZiB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNlcXVlbmNlRnJhZ21lbnQoIHRoaXMgKTsKLSAgfQotCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7Ci0gICAgQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ID0gbnVsbDsKLQotICAgIGlmKCBmcmFnbWVudExpc3RfID09IG51bGwgfHwgZnJhZ21lbnRMaXN0Xy5zaXplKCkgPT0gMCApCi0gICAgewotICAgICAgZnJhZ21lbnQgPSBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgeyAgICAgIAotICAgICAgZnJhZ21lbnQgPSAoQ29tbWFuZEZyYWdtZW50KSggZnJhZ21lbnRMaXN0Xy5nZXQoMCkgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZnJhZ21lbnQ7ICAgIAotICB9Ci0KLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBpbnQgaW5kZXggPSBmcmFnbWVudExpc3RfLmluZGV4T2YoIGZyYWdtZW50ICk7Ci0KLSAgICBpZiggaW5kZXggPT0gLTEgKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJGcmFnbWVudCBub3QgZm91bmQgaW4gc2VxdWVuY2UuIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpbmRleCsrOwotCi0gICAgICBpZiggaW5kZXggPj0gZnJhZ21lbnRMaXN0Xy5zaXplKCkgKQotICAgICAgewotICAgICAgICAvLyBUaGVyZSBpcyBub3RoaW5nIGZvbGxvd2luZyB0aGlzIGZyYWdtZW50IHNvIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gUmV0dXJuIHRoZSBuZXh0IGZyYWdtZW50LgotICAgICAgICByZXR1cm4gKENvbW1hbmRGcmFnbWVudCkoZnJhZ21lbnRMaXN0Xy5nZXQoIGluZGV4ICkpOwotICAgICAgfQotICAgIH0KLSAgfQkKLX0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvU2ltcGxlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L1NpbXBsZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlM2ViYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvU2ltcGxlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbiBlbXB0eSBvZiBXaXphcmRGcmFnbWVudC4KLSoqLwotcHVibGljIGNsYXNzIFNpbXBsZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQKLXsKLSAgcHVibGljIFNpbXBsZUZyYWdtZW50KCkKLSAgewotICAgIHRoaXMoIChDb21tYW5kRmFjdG9yeSludWxsLCAiIiApOwotICB9Ci0gIAotICBwdWJsaWMgU2ltcGxlRnJhZ21lbnQoIFN0cmluZyBpZCApCi0gIHsKLSAgICB0aGlzKCAoQ29tbWFuZEZhY3RvcnkpbnVsbCwgaWQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgU2ltcGxlRnJhZ21lbnQoIGZpbmFsIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIGlkICkKLSAgewotICAgIHN1cGVyKCBuZXcgQ29tbWFuZEZhY3RvcnkoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbjsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH0sIGlkICk7ICAKLSAgfQotICAKLSAgcHVibGljIFNpbXBsZUZyYWdtZW50KCBDb21tYW5kRmFjdG9yeSBjb21tYW5kRmFjdG9yeSwgU3RyaW5nIGlkICkKLSAgewotICAJc3VwZXIoIGNvbW1hbmRGYWN0b3J5LCBpZCApOwotICB9Ci0gIAotICAvKioKLSAgICAqIENvcHkgY29uc3RydWN0b3IgZm9yIGZyYWdtZW50LgotICAqKi8KLSAgcHJvdGVjdGVkIFNpbXBsZUZyYWdtZW50KCBTaW1wbGVGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBzdXBlciggZnJhZ21lbnQuZ2V0Q29tbWFuZEZhY3RvcnkoKSwgZnJhZ21lbnQuZ2V0SWQoKSApOwotICB9Ci0gICAgCi0gIC8qKgotICAgICogQWxsIHdpemFyZCBmcmFnbWVudHMgbmVlZCB0byBiZSBjbG9uZWFibGUuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgewotICAgIHJldHVybiBuZXcgU2ltcGxlRnJhZ21lbnQoIHRoaXMgKTsKLSAgfQotCi0KLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpeyByZXR1cm4gbnVsbDsgfQotCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqIFNpbmNlIHRoaXMgaXMgYSBzaW1wbGUgZnJhZ21lbnQsIHRoZXJlIGlzIG5vIG5leHQgZnJhZ21lbnQKLSAgICAqIHNvIHdlIHdpbGwgYWx3YXlzIHJldHVybiBudWxsLiAKLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovICAKLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApeyByZXR1cm4gbnVsbDsgfQotfSAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9yZWdpc3RyeS9Db21tYW5kUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3JlZ2lzdHJ5L0NvbW1hbmRSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTZlZjg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3JlZ2lzdHJ5L0NvbW1hbmRSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3Rvcnk7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB3YXkgdG8gY3JlYXRlIGEgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkKLSAqIGZyb20gYW4gYXJyYXkgb2YgaWRzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tYW5kUmVnaXN0cnkgCi17ICAKLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBDb21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSBmcm9tIGFuIGFycmF5IG9mIGlkcy4KLSAgICogCi0gICAqIEBwYXJhbSBpZHMgdGhlIGlkcy4KLSAgICogQHJldHVybiB0aGUgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3Rvcnkgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5IGdldEZhY3RvcnlGYWN0b3J5KCBTdHJpbmdbXSBpZHMgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9Cb29sZWFuU2VsZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vQm9vbGVhblNlbGVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjgwNWEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9Cb29sZWFuU2VsZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogVGhpcyBjbGFzcyBjb21iaW5lcyBhIHN0cmluZyB3aXRoIGEgYm9vbGVhbiB2YWx1ZS4gIFRoaXMgaXMKLSAqIHVzZWZ1bCBmb3Igc3RvcmluZyB0aGUgc3RhdGUgZGF0YSBmb3IgYSBib29sZWFuIHNlbGVjdGlvbiBsaXN0LgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbjsKLQotcHVibGljIGNsYXNzIEJvb2xlYW5TZWxlY3Rpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgIHZhbHVlXzsKLSAgcHJpdmF0ZSBib29sZWFuIHNlbGVjdGVkXzsKLSAgCi0gIHB1YmxpYyBCb29sZWFuU2VsZWN0aW9uKCBTdHJpbmcgdmFsdWUsIGJvb2xlYW4gc2VsZWN0ZWQgKQotICB7Ci0gICAgdmFsdWVfICAgID0gdmFsdWU7Ci0gICAgc2VsZWN0ZWRfID0gc2VsZWN0ZWQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBHZXQgdGhlIHN0cmluZyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKQotICB7Ci0gICAgcmV0dXJuIHZhbHVlXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIEdldCB0aGUgYm9vbGVhbiB2YWx1ZSBmb3IgdGhpcyBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1NlbGVjdGVkKCkKLSAgewotICAgIHJldHVybiBzZWxlY3RlZF87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9DaG9pY2VzVG9TdHJpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9DaG9pY2VzVG9TdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMzM2M2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vQ2hvaWNlc1RvU3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotLyoqCi0gKiBUaGlzIHRyYW5zZm9ybWVyIGNsYXNzIHNlbGVjdHMgYSBzdHJpbmcgYXQgYSBwYXJ0aWN1bGFyIGxldmVsCi0gKiBpbiBhIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgQ2hvaWNlc1RvU3RyaW5nIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLSAgcHJpdmF0ZSBpbnQgbGV2ZWxfOwotICAKLSAgcHVibGljIENob2ljZXNUb1N0cmluZyggaW50IGxldmVsICkKLSAgewotICAgIGxldmVsXyA9IGxldmVsOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lciN0cmFuc2Zvcm0oamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKCBPYmplY3QgdmFsdWUgKQotICB7Ci0gICAgU2VsZWN0aW9uTGlzdENob2ljZXMgY2hvaWNlcyA9IChTZWxlY3Rpb25MaXN0Q2hvaWNlcyl2YWx1ZTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGV2ZWxfOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBjaG9pY2VzID0gY2hvaWNlcy5nZXRDaG9pY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNob2ljZXMuZ2V0TGlzdCgpLmdldFNlbGVjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIFNlbGVjdGlvbkxpc3QgdHJhbnNmb3JtKCBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBjaG9pY2VzICkKLSAgewotICAgIHJldHVybiAoU2VsZWN0aW9uTGlzdCl0cmFuc2Zvcm0oIChPYmplY3QpY2hvaWNlcyApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vRHluYW1pY0xpc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9EeW5hbWljTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmVjNzFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9EeW5hbWljTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qKgotICogVGhpcyBpcyBhIER5bmFtaWMgdmVyc2lvbiBvZiB0aGUgU2VsZWN0aW9uTGlzdENob2ljZXMgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBEeW5hbWljTGlzdCAKLXsKLSAgcHJpdmF0ZSBWZWN0b3Igc3RyaW5nTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIGR5bmFtaWNMaXN0VmVjdG9yTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gIAotICAvKioKLSAgICogQWRkcyBhbiBlbnRyeSBpbnRvIHRoZSBkeW5hbWljIGxpc3QuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsdWVzIHRoZSBzdHJpbmcgdmFsdWVzIHRoYXQgbGVhZCB0byB0aGUgdGFyZ2V0LgotICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoIFN0cmluZ1tdIHZhbHVlcywgT2JqZWN0IHRhcmdldCApCi0gIHsKLSAgICBEeW5hbWljTGlzdCBjdXJyZW50TGlzdCA9IHRoaXM7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHZhbHVlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIFN0cmluZyB2YWx1ZSAgICAgID0gdmFsdWVzW2luZGV4XTsKLSAgICAgIGludCAgICBsZW5ndGggICAgID0gY3VycmVudExpc3Quc3RyaW5nTGlzdF8uc2l6ZSgpOwotICAgICAgaW50ICAgIGZvdW5kSW5kZXggPSAtMTsKLSAgICAgIAotICAgICAgLy8gRmluZCB0aGUgc3RyaW5nIGluIHRoZSBjdXJyZW50IGxpc3QuCi0gICAgICBmb3IoIGludCBzZWFyY2hJbmRleCA9IDA7IHNlYXJjaEluZGV4IDwgbGVuZ3RoOyBzZWFyY2hJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZyA9IChTdHJpbmcpY3VycmVudExpc3Quc3RyaW5nTGlzdF8uZWxlbWVudEF0KCBzZWFyY2hJbmRleCApOyAKLSAgICAgICAgCi0gICAgICAgIGlmKCBzdHJpbmcuZXF1YWxzKCB2YWx1ZSApICkgCi0gICAgICAgIHsKLSAgICAgICAgICBmb3VuZEluZGV4ID0gc2VhcmNoSW5kZXg7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoIGZvdW5kSW5kZXggPT0gLTEgKQotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlIGEgbmV3IHN0cmluZyBzbyBhZGQgaXQgdG8gdGhlIGxpc3QuCi0gICAgICAgIGN1cnJlbnRMaXN0LnN0cmluZ0xpc3RfLmFkZCggdmFsdWUgKTsKLSAgICAgICAgY3VycmVudExpc3QuZHluYW1pY0xpc3RWZWN0b3JMaXN0Xy5hZGQoIG5ldyBEeW5hbWljTGlzdCgpICk7Ci0gICAgICAgIGZvdW5kSW5kZXggPSBsZW5ndGg7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGN1cnJlbnRMaXN0ID0gKER5bmFtaWNMaXN0KWN1cnJlbnRMaXN0LmR5bmFtaWNMaXN0VmVjdG9yTGlzdF8uZWxlbWVudEF0KCBmb3VuZEluZGV4ICk7ICAgICAgIAotICAgIH0KLSAgICAKLSAgICBjdXJyZW50TGlzdC5keW5hbWljTGlzdFZlY3Rvckxpc3RfLmFkZCggdGFyZ2V0ICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgU2VsZWN0aW9uTGlzdENob2ljZXMgb2JqZWN0IGZyb20gdGhpcyBEeW5hbWljTGlzdAotICAgKiBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU2VsZWN0aW9uTGlzdENob2ljZXMgdG9MaXN0Q2hvaWNlcygpCi0gIHsKLSAgICBTZWxlY3Rpb25MaXN0IGxpc3QgICA9IG5ldyBTZWxlY3Rpb25MaXN0KCAoU3RyaW5nW10pc3RyaW5nTGlzdF8udG9BcnJheSggbmV3IFN0cmluZ1swXSApLCAwKTsKLSAgICBpbnQgICAgICAgICAgIGxlbmd0aCA9IGR5bmFtaWNMaXN0VmVjdG9yTGlzdF8uc2l6ZSgpOwotICAgIFZlY3RvciAgICAgICAgdmVjdG9yID0gbmV3IFZlY3RvcigpOyAKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gZHluYW1pY0xpc3RWZWN0b3JMaXN0Xy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgCi0gICAgICBpZiggb2JqIGluc3RhbmNlb2YgRHluYW1pY0xpc3QgKQotICAgICAgewotICAgICAgICB2ZWN0b3IuYWRkKCAoKER5bmFtaWNMaXN0KW9iaikudG9MaXN0Q2hvaWNlcygpICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHZlY3Rvci5hZGQoIG9iaiApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmV3IFNlbGVjdGlvbkxpc3RDaG9pY2VzKCBsaXN0LCB2ZWN0b3IgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL1NlbGVjdGlvbkxpc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9TZWxlY3Rpb25MaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwODU3NzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL1NlbGVjdGlvbkxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBzdG9yZXMgYSBsaXN0IHN0cmluZ3MgYWxvbmcgd2l0aCBhIHNlbGVjdGlvbkluZGV4IHdoaWNoCi0gKiBzdG9yZXMgdGhlIGN1cnJlbnQgc3RyaW5nIHRoYXQgc2VsZWN0ZWQuICBUaGVyZSBpcyBhbHNvIGEgc2VsZWN0aW9uCi0gKiB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgb25lIG9mIHRoZSBzdHJpbmdzIGluIHRoZSB0aGUgc3RyaW5nIGxpc3QKLSAqIHRoZW4gc2VsZWN0aW9uSW5kZXggd2lsbCBjb250YWluIHRoZSBpbmRleCBvZiB0aGlzIHN0cmluZy4gIElmIGl0Ci0gKiBpcyBub3QgaW4gdGhlIGxpc3QgdGhlbiB0aGUgc2VsZWN0aW9uVmFsdWUgc3RyaW5nIHdpbGwgY29udGFpbiB0aGlzCi0gKiB2YWx1ZSBhbmQgc2VsZWN0aW9uSW5kZXggd2lsbCBiZSBzZXQgdG8gLTEuICBUaGlzIGNsYXNzIGNhbiBiZQotICogdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUgZGF0YSBmb3IgYSBDb21ibyBib3guCi0gKi8KLXB1YmxpYyBjbGFzcyBTZWxlY3Rpb25MaXN0Ci17Ci0gIHByaXZhdGUgaW50ICAgICAgc2VsZWN0aW9uSW5kZXhfOwotICBwcml2YXRlIFN0cmluZ1tdIGxpc3RfOwotICBwcml2YXRlIFN0cmluZyAgIHNlbGVjdGlvblZhbHVlXzsKLSAgCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0KCBTdHJpbmdbXSBsaXN0LCBpbnQgc2VsZWN0aW9uSW5kZXggKQotICB7Ci0gICAgbGlzdF8gICAgICAgICAgID0gbGlzdDsKLSAgICBzZWxlY3Rpb25JbmRleF8gPSBzZWxlY3Rpb25JbmRleDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIHNlbGVjdGlvbiB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVmFsdWUoIFN0cmluZyB2YWx1ZSApCi0gIHsKLSAgICBzZWxlY3Rpb25WYWx1ZV8gPSB2YWx1ZTsgIAotICAgIHNlbGVjdGlvbkluZGV4XyA9IC0xOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Xy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGlmKCB2YWx1ZS5lcXVhbHMoIGxpc3RfW2luZGV4XSApICkKLSAgICAgIHsKLSAgICAgICAgc2VsZWN0aW9uSW5kZXhfID0gaW5kZXg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfSAKLSAgCi0gIC8qCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc3RyaW5nIGxpc3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gbGlzdF87Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFNldHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzdHJpbmcgaW4gdGhlIGxpc3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbmRleCggaW50IGluZGV4ICkKLSAgewotICAgIHNlbGVjdGlvbkluZGV4XyA9IGluZGV4OwotICAgIHNlbGVjdGlvblZhbHVlXyA9IG51bGw7Ci0gIH0KLSAKLSAgLyoKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdHJpbmcuICBUaGUgdmFsdWUKLSAgICogd2lsbCBiZSAtMSBpZiB0aGUgc2VsZWN0aW9uIHZhbHVlIGlzIG5vdCBpbiB0aGUgc3RyaW5nIGxpc3QuCi0gICAqLwotICBwdWJsaWMgaW50IGdldEluZGV4KCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25JbmRleF87ICAKLSAgfQotICAKLSAgLyoKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZyBzZWxlY3Rpb24gZm9yIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3Rpb24oKQotICB7Ci0gICAgaWYoIHNlbGVjdGlvblZhbHVlXyAhPSBudWxsICkgcmV0dXJuIHNlbGVjdGlvblZhbHVlXzsKLSAgICAKLSAgICBpZiggc2VsZWN0aW9uSW5kZXhfID09IC0xIHx8IHNlbGVjdGlvbkluZGV4XyA+IGxpc3RfLmxlbmd0aC0xICkKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbGlzdF9bIHNlbGVjdGlvbkluZGV4XyBdOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL1NlbGVjdGlvbkxpc3RDaG9pY2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vU2VsZWN0aW9uTGlzdENob2ljZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MyMTBiZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vU2VsZWN0aW9uTGlzdENob2ljZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoKLSAqIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYSBoaWVyYXJjaHkgb2YgU2VsZWN0aW9uTGlzdAotICogb2JqZWN0cy4KLSAqLwotcHVibGljIGNsYXNzIFNlbGVjdGlvbkxpc3RDaG9pY2VzCi17Ci0gIHByaXZhdGUgU2VsZWN0aW9uTGlzdCBzZWxlY3Rpb25MaXN0XzsKLSAgcHJpdmF0ZSBWZWN0b3IgICAgICAgIGNob2ljZXNfOwotICBwcml2YXRlIFNlbGVjdGlvbkxpc3QgbmV3VmFsdWVTZWxlY3Rpb25MaXN0XzsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGxpc3QgICAgIFRoZSBzZWxlY3Rpb24gbGlzdC4KLSAgICogQHBhcmFtIGNob2ljZXMgIFRoaXMgaXMgYSB2ZWN0b3Igb2YgU2VsZWN0aW9uTGlzdENob2llcyBhbmQgY2FuIGJlCi0gICAqICAgICAgICAgICAgICAgICBudWxsIGlmIHRoZXJlIGFyZSBubyBjaG9pY2VzLiAgVGhpcyBpbmRleCBvZiBsaXN0Ci0gICAqICAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGluZGV4IGludG8gY2hvaWNlcy4gIElmIGluZGV4IGlzIC0xIHRoZW4KLSAgICogICAgICAgICAgICAgICAgIHRoZSBuZXdWYWx1ZVNlbGVjdGlvbkxpc3QgaXMgdXNlZC4KLSAgICovCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyggU2VsZWN0aW9uTGlzdCBsaXN0LCBWZWN0b3IgY2hvaWNlcyApCi0gIHsKLSAgICBzZWxlY3Rpb25MaXN0XyA9IGxpc3Q7Ci0gICAgY2hvaWNlc18gICAgICAgPSBjaG9pY2VzOwotICAgIAotICAgIG5ld1ZhbHVlU2VsZWN0aW9uTGlzdF8gPSBuZXcgU2VsZWN0aW9uTGlzdCggbmV3IFN0cmluZ1swXSwgLTEgKTsKLSAgfQotICAKLSAgcHVibGljIFNlbGVjdGlvbkxpc3RDaG9pY2VzKCBTZWxlY3Rpb25MaXN0IGxpc3QsIFZlY3RvciBjaG9pY2VzLCBTZWxlY3Rpb25MaXN0IG5ld0xpc3QgKQotICB7Ci0gICAgdGhpcyggbGlzdCwgY2hvaWNlcyApOwotICAgIG5ld1ZhbHVlU2VsZWN0aW9uTGlzdF8gPSBuZXdMaXN0OwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBjdXJyZW50IFNlbGVjdGlvbiBsaXN0LgotICAgKi8KLSAgcHVibGljIFNlbGVjdGlvbkxpc3QgZ2V0TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uTGlzdF87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBjaG9pY2VzIGZvciB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0Q2hvaWNlcygpCi0gIHsKLSAgICByZXR1cm4gY2hvaWNlc187Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGxldmVsIHRoZSBsZXZlbCBpbiB0aGUgaGllcmFyY2h5IHdoZXJlIHdlIHdhbnQgdG8gZ2V0IHRoZSBjaG9pY2VzLgotICAgKiBAcmV0dXJuIHJldHVybnMgYSB2ZWN0b3Igb2YgU2VsZWN0aW9uTGlzdENob2ljZXMuCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldENob2ljZXNBdExldmVsKCBpbnQgbGV2ZWwgKQotICB7Ci0gICAgU2VsZWN0aW9uTGlzdENob2ljZXMgY2hvaWNlcyA9IHRoaXM7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxldmVsOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBjaG9pY2VzID0gY2hvaWNlcy5nZXRDaG9pY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNob2ljZXMuZ2V0Q2hvaWNlcygpOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgY3VycmVudCBTZWxlY3Rpb25MaXN0Q2hvaWNlCi0gICAqLwotICBwdWJsaWMgU2VsZWN0aW9uTGlzdENob2ljZXMgZ2V0Q2hvaWNlKCkKLSAgewotICAgIGludCAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkluZGV4ID0gc2VsZWN0aW9uTGlzdF8uZ2V0SW5kZXgoKTsKLSAgICBTZWxlY3Rpb25MaXN0Q2hvaWNlcyByZXN1bHQgICAgICAgICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHNlbGVjdGlvbkluZGV4ID09IC0xICkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMoIG5ld1ZhbHVlU2VsZWN0aW9uTGlzdF8sIG51bGwgKTsKLSAgICB9Ci0gICAgZWxzZSBpZiggY2hvaWNlc18gIT0gbnVsbCAmJiBjaG9pY2VzXy5zaXplKCkgIT0gMCApIAotICAgIHsKLSAgICAgIHJlc3VsdCA9IChTZWxlY3Rpb25MaXN0Q2hvaWNlcyljaG9pY2VzXy5lbGVtZW50QXQoIHNlbGVjdGlvbkluZGV4ICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgY2hvaWNlIHdlIHdhbnQuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgU2VsZWN0aW9uTGlzdENob2ljZSBhdCB0aGUgaW5kZXggc3BlY2lmaWVkLgotICAgKi8KLSAgcHVibGljIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGdldENob2ljZShpbnQgaW5kZXgpCi0gIHsKLSAgICBTZWxlY3Rpb25MaXN0Q2hvaWNlcyByZXN1bHQgPSBudWxsOwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gZ2V0TGlzdCgpLmdldExpc3QoKS5sZW5ndGgpCi0gICAgewotICAgICAgcmVzdWx0ID0gbmV3IFNlbGVjdGlvbkxpc3RDaG9pY2VzKCBuZXdWYWx1ZVNlbGVjdGlvbkxpc3RfLCBudWxsICk7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoU2VsZWN0aW9uTGlzdENob2ljZXMpY2hvaWNlc18uZWxlbWVudEF0KCBpbmRleCApOwotICAgIH0KLSAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3VyaS9OYXRpdmVGaWxlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvdXJpL05hdGl2ZUZpbGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTU1MDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvdXJpL05hdGl2ZUZpbGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnVyaTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5JVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLlVSSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTmF0aXZlRmlsZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWU7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBkZXNjcmlwdGlvbjsKLQotICBwcm90ZWN0ZWQgSVVSSVtdIHVyaXNUb1JlYWQ7Ci0KLSAgcHJvdGVjdGVkIElVUklbXSB1cmlzVG9Xcml0ZTsKLQotICBwcm90ZWN0ZWQgTmF0aXZlRmlsZUNvbW1hbmQgKCkKLSAgewotICAgIHRoaXMobnVsbCxudWxsKTsKLSAgfQotCi0gIHByb3RlY3RlZCBOYXRpdmVGaWxlQ29tbWFuZCAoIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24gKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKQotICB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VVJJc1RvUmVhZCAoIElVUklbXSB1cmlzVG9SZWFkICkKLSAgewotICAgIHRoaXMudXJpc1RvUmVhZCA9IHVyaXNUb1JlYWQ7Ci0gIH0KLQotICBwdWJsaWMgSVVSSVtdIGdldFVSSXNUb1JlYWQgKCkKLSAgewotICAgIHJldHVybiB1cmlzVG9SZWFkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VVJJc1RvV3JpdGUgKCBJVVJJW10gdXJpc1RvV3JpdGUgKQotICB7Ci0gICAgdGhpcy51cmlzVG9Xcml0ZSA9IHVyaXNUb1dyaXRlOwotICB9Ci0KLSAgcHVibGljIElVUklbXSBnZXRVUklzVG9Xcml0ZSAoKQotICB7Ci0gICAgcmV0dXJuIHVyaXNUb1dyaXRlOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgRmlsZVtdIGZpbGVzVG9SZWFkID0gZ2V0RmlsZXModXJpc1RvUmVhZCk7Ci0gICAgRmlsZVtdIGZpbGVzVG9Xcml0ZSA9IGdldEZpbGVzKHVyaXNUb1dyaXRlKTsKLSAgICBwcmVQcm9jZXNzKGZpbGVzVG9SZWFkLGZpbGVzVG9Xcml0ZSk7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBleGVjdXRlKGZpbGVzVG9SZWFkLGZpbGVzVG9Xcml0ZSk7Ci0gICAgcG9zdFByb2Nlc3MoZmlsZXNUb1JlYWQsZmlsZXNUb1dyaXRlKTsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IElTdGF0dXMgZXhlY3V0ZSAoIEZpbGVbXSBmaWxlc1RvUmVhZCwgRmlsZVtdIGZpbGVzVG9Xcml0ZSApOwotCi0gIHByaXZhdGUgdm9pZCBwcmVQcm9jZXNzICggRmlsZVtdIGZpbGVzVG9SZWFkLCBGaWxlW10gZmlsZXNUb1dyaXRlICkKLSAgewotICAgIC8vIFRCRC4KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwb3N0UHJvY2VzcyAoIEZpbGVbXSBmaWxlc1RvUmVhZCwgRmlsZVtdIGZpbGVzVG9Xcml0ZSApCi0gIHsKLSAgICAvLyBUQkQuCi0gIH0KLQotICBwcml2YXRlIEZpbGVbXSBnZXRGaWxlcyAoIElVUklbXSB1cmlzICkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gICAgaWYgKHVyaXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8dXJpcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHVyaXNbaV0uaXNBdmFpbGFibGVBc0ZpbGUoKSkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGxpc3QuYWRkKHVyaXNbaV0uYXNGaWxlKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVVJJRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKEZpbGVbXSlsaXN0LnRvQXJyYXkobmV3IEZpbGVbMF0pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjhjN2E3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi1ydW50aW1lCi10ZW1wLmZvbGRlcgotZW52dWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWIwYjM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg3YWVlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNzoyOCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYWU4NzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjMwIEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY3NDY4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5wbHVnaW4uRW52VUlQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2U7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnJlZ2lzdHJ5O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMjAzLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjMwNSwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4yMDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZDdlNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgKi5qYXIsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1zcmMuaW5jbHVkZXMgPSBzY2hlbWEvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9pY29ucy9mdWxsL29iajE2L2FudF9idWlsZGZpbGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvaWNvbnMvZnVsbC9vYmoxNi9hbnRfYnVpbGRmaWxlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmMzQ2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9pY29ucy9mdWxsL29iajE2L2FudF9idWlsZGZpbGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvaWNvbnMvZnVsbC93aXpiYW4vbmV3YW50ZmlsZXNfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2ljb25zL2Z1bGwvd2l6YmFuL25ld2FudGZpbGVzX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MjNjNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvaWNvbnMvZnVsbC93aXpiYW4vbmV3YW50ZmlsZXNfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YjcwNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIDIwMDgwMjIxIDE0NjAyMyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1FbnZpcm9ubWVudCBDb21tYW5kIEZyYW1ld29yayAoR1VJKQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVdJREdFVF9SRUdJU1RSWV9OQU1FPVdpZGdldCBjb250cmlidXRvciByZWdpc3RyeQotCi1QTFVHSU5fWFBfQU5UX1dJWkFSRF9OQU1FPUFudCBGaWxlcwotUExVR0lOX1hQX0FOVF9XSVpBUkRfREVTQz1DcmVhdGUgQW50IHNjcmlwdCBhbmQgcHJvcGVydGllcyBmaWxlcyBpbiB0aGUgd29ya3NwYWNlLgotCi1MQUJFTF9BTlRfRVhURU5USU9OPUFudCBFeHRlbnRpb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3NzIzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9YUF9BTlRfV0laQVJEX05BTUUiCi0gICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L2FudF9idWlsZGZpbGUuZ2lmIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZy5BbnRGaWxlSW1wb3J0V2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS5BbnRGaWxlSW1wb3J0V2l6YXJkIj4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICVQTFVHSU5fWFBfQU5UX1dJWkFSRF9ERVNDCi0gICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJ3aWRnZXRSZWdpc3RyeSIgbmFtZT0iJVdJREdFVF9SRUdJU1RSWV9OQU1FIiBzY2hlbWE9InNjaGVtYS93aWRnZXRSZWdpc3RyeS5leHNkIi8+Ci0KLQk8IS0tIEFudCBGaWxlIEV4dGVuc2lvbnMgYmVnaW5uaW5nICAtLT4KLQkKLQk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJhbnRmaWxlcyIgbmFtZT0iJUxBQkVMX0FOVF9FWFRFTlRJT04iLz4KLQkKLQkKLQkKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc2NoZW1hL3dpZGdldFJlZ2lzdHJ5LmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zY2hlbWEvd2lkZ2V0UmVnaXN0cnkuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk2Y2M3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zY2hlbWEvd2lkZ2V0UmVnaXN0cnkuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSIgaWQ9IndpZGdldFJlZ2lzdHJ5IiBuYW1lPSJXaWRnZXQgUmVnaXN0cnkiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndpZGdldEZhY3RvcnkiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3aWRnZXRGYWN0b3J5Ij4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW5zZXJ0QmVmb3JlQ29tbWFuZElkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL0Vudmlyb25tZW50VUkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvRW52aXJvbm1lbnRVSS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzk1YzIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvRW52aXJvbm1lbnRVSS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwNTA5ICAgMTE5Mjk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMgMjAwODAyMjEgICAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSMgMjAwODAzMjYgICAyMjM4Mjkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwODA0MDIgICAyMjIwOTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFVwZGF0ZSBwcm9wZXJ0aWVzIGZpbGUuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLUJVVFRPTl9TSE9XX0FMTF9ESUFMT0dTPSZTaG93IEFsbAotQlVUVE9OX0hJREVfQUxMX0RJQUxPR1M9JkhpZGUgQWxsCi1DSEVDS0JPWF9ET19OT1RfU0hPV19ESUFMT0dfQUdBSU49RG8gbm90IHNob3cgbWUgdGhpcyBkaWFsb2cgYm94IGFnYWluLgotCi1UT09MVElQX1BQQURfUEFHRT1Db250cm9sIHRvIHNob3cvaGlkZSB0aGUgZGlhbG9ncyB0aGF0IGFwcGVhciB3aGVuIGEgcG9wLXVwIGFjdGlvbiBpcyBleGVjdXRlZC4KLVRPT0xUSVBfRE9fTk9UX1NIT1dfRElBTE9HX0FHQUlOPVRvIGFsbG93IHRoaXMgZGlhbG9nIHRvIHNob3cgYWdhaW4sIGVuYWJsZSBmcm9tIHByZWZlcmVuY2UgLSBkaWFsb2dzLgotVE9PTFRJUF9QUEFEX0JVVFRPTl9TSE9XX0FMTD1TaG93IGFsbCBkaWFsb2dzLgotVE9PTFRJUF9QUEFEX0JVVFRPTl9ISURFX0FMTD1IaWRlIGFsbCBkaWFsb2dzIGFuZCBleGVjdXRlIHBvcC11cCBhY3Rpb25zLgotVE9PTFRJUF9QUEFEX0NPTUJPX1JVTlRJTUU9VGhlIHJ1bnRpbWUgeW91IHJlcXVpcmUgYW50IHRlbXBsYXRlcyBmb3IuCi1UT09MVElQX1BQQURfQ09NQk9fU0NFTkFSSU89VGhlIHNjZW5hcmlvIHlvdSByZXF1aXJlIGFudCB0ZW1wbGF0ZXMgZm9yLgotCi1XSVpBUkRfVElUTEVfQU5UPUNyZWF0ZSBBbnQgRmlsZXMKLVdJWkFSRF9QQUdFX1RJVExFX0FOVD1DcmVhdGUgV2ViIFNlcnZpY2UgQW50IGZpbGVzCi1XSVpBUkRfUEFHRV9ERVNDX0FOVD1TZWxlY3Qgd29ya3NwYWNlIGZvbGRlciBmb3IgQW50IHNjcmlwdCBhbmQgcHJvcGVydGllcyBmaWxlcwotTVNHX1NUQVRVU19DT1BZSU5HX0FOVF9GSUxFUz1Db3B5aW5nIHdlYiBzZXJ2aWNlcyBBbnQgZmlsZXMKLU1TR19FUlJfQ09QWUlOR19BTlRfRklMRVM9RXJyb3IgZW5jb3VudGVyZWQgY29weWluZyBBbnQgZmlsZXMKLU1TR19FUlJfQU5UX0ZJTEVTX05PVF9GT1VORD1BbnQgZmlsZSBub3QgZm91bmQgYXQgezB9Ci1NU0dfV0FSTklOR19GSUxFX0VYSVNUUz1UaGUgZmlsZSB7MH0gZXhpc3RzLiAgRG8geW91IHdhbnQgdG8gb3ZlcndyaXRlPwotRElBTE9HX1RJVExFX09WRVJXUklURT1Db25maXJtIE92ZXJ3cml0ZQotCi1NU0dfRVJST1JfV0laQVJEX0lEX05PVF9GT1VORD1JV0FCMDAxM0UgQ291bGQgbm90IGZpbmQgd2l6YXJkIGlkOiB7MH0KLU1TR19FUlJPUl9PUEVSQVRJT05fVElNRURfT1VUPU9wZXJhdGlvbiB0aW1lZCBvdXQuCi0KLUxBQkVMX1JVTlRJTUVTX0xJU1Q9V2ViIHNlcnZpY2UgcnVudGltZToKLUxBQkVMX1NFUlZFUlNfTElTVD1XZWIgc2VydmljZSB0eXBlOgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9FbnZpcm9ubWVudFVJTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvRW52aXJvbm1lbnRVSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ODQ5YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9FbnZpcm9ubWVudFVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwOSAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDIyMSAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSAqIDIwMDgwNDAyICAgMjIyMDk0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBVcGRhdGUgcHJvcGVydGllcyBmaWxlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBFbnZpcm9ubWVudFVJTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5FbnZpcm9ubWVudFVJIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIEVudmlyb25tZW50VUlNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1NIT1dfQUxMX0RJQUxPR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0hJREVfQUxMX0RJQUxPR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfRE9fTk9UX1NIT1dfRElBTE9HX0FHQUlOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRF9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfRE9fTk9UX1NIT1dfRElBTE9HX0FHQUlOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRF9CVVRUT05fU0hPV19BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUEFEX0JVVFRPTl9ISURFX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQURfQ09NQk9fUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQURfQ09NQk9fU0NFTkFSSU87Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dJWkFSRF9JRF9OT1RfRk9VTkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0laQVJEX1RJVExFX0FOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXSVpBUkRfUEFHRV9USVRMRV9BTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0laQVJEX1BBR0VfREVTQ19BTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NUQVRVU19DT1BZSU5HX0FOVF9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJSX0NPUFlJTkdfQU5UX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJfQU5UX0ZJTEVTX05PVF9GT1VORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTklOR19GSUxFX0VYSVNUUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfT1ZFUldSSVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9PUEVSQVRJT05fVElNRURfT1VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1JVTlRJTUVTX0xJU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVkVSU19MSVNUOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgRW52aXJvbm1lbnRVSU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2NvbW1vbi9MYWJlbHNBbmRJZHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvY29tbW9uL0xhYmVsc0FuZElkcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGZiODlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvY29tbW9uL0xhYmVsc0FuZElkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAyMjEgMTQ2MDIzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgTGFiZWxzQW5kSWRzCi17Ci0gIHByaXZhdGUgVmVjdG9yIGxhYmVsc18gPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIGlkc18gPSBuZXcgVmVjdG9yKCk7Ci0gIAotICAKLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBpZCwgU3RyaW5nIGxhYmVsKXsKLQkgIGlkc18uYWRkKGlkKTsKLQkgIGxhYmVsc18uYWRkKGxhYmVsKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRJZChpbnQgaW5kZXgpewotCSAgcmV0dXJuIChTdHJpbmcpaWRzXy5nZXQoaW5kZXgpOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpZHNfLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldElkcygpCi0gIHsKLQkgIFN0cmluZ1tdIHN0cmluZ0FycmF5ID0gbmV3IFN0cmluZ1tpZHNfLnNpemUoKV07IAotCSAgaWRzXy5jb3B5SW50byhzdHJpbmdBcnJheSk7Ci0JICByZXR1cm4gc3RyaW5nQXJyYXk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRMYWJlbHMoKQotICB7Ci0JICBTdHJpbmdbXSBzdHJpbmdBcnJheSA9IG5ldyBTdHJpbmdbaWRzXy5zaXplKCldOyAKLQkgIGxhYmVsc18uY29weUludG8oc3RyaW5nQXJyYXkpOwotCSAgcmV0dXJuIHN0cmluZ0FycmF5OwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9jb21tb24vVGltZWRPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvY29tbW9uL1RpbWVkT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMTJkY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9jb21tb24vVGltZWRPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDQgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA4MjIgICAxNTQ3NTAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuQWJzdHJhY3RPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLklVbmRvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuSVVuZG9hYmxlT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLkVudmlyb25tZW50VUlNZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFRpbWVkT3BlcmF0aW9uIGltcGxlbWVudHMgSVVuZG9hYmxlT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgQWJzdHJhY3RPcGVyYXRpb24gb3BlcmF0aW9uOwotICBwcml2YXRlIGludCAgICAgICAgICAgICAgIHRpbWVvdXQ7Ci0gIHByaXZhdGUgSVByb2dyZXNzTW9uaXRvciAgdGVtcE1vbml0b3I7Ci0gIHByaXZhdGUgSUFkYXB0YWJsZSAgICAgICAgdGVtcEluZm87Ci0gIHByaXZhdGUgSVN0YXR1cyAgICAgICAgICAgcmV0dXJuU3RhdHVzOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIG9wZXJhdGlvbkNvbXBsZXRlOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHRpbWVPdXRNZXNzYWdlOwotICAKLSAgcHVibGljIFRpbWVkT3BlcmF0aW9uKCBBYnN0cmFjdE9wZXJhdGlvbiBvcGVyYXRpb24sIGludCB0aW1lb3V0LCBTdHJpbmcgdGltZU91dE1lc3NhZ2UgKQotICB7Ci0gICAgdGhpcy5vcGVyYXRpb24gICAgICA9IG9wZXJhdGlvbjsKLSAgICB0aGlzLnRpbWVvdXQgICAgICAgID0gdGltZW91dDsKLSAgICB0aGlzLnRpbWVPdXRNZXNzYWdlID0gdGltZU91dE1lc3NhZ2U7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSAKLSAgewotICAgIFRocmVhZCAgZXhlY3V0ZVRocmVhZCA9IG5ldyBUaHJlYWQoIG5ldyBPcGVyYXRpb25SdW5uYWJsZSgpICk7Ci0gICAgCi0gICAgcmV0dXJuU3RhdHVzICAgICAgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIHRlbXBNb25pdG9yICAgICAgID0gbW9uaXRvcjsKLSAgICB0ZW1wSW5mbyAgICAgICAgICA9IGluZm87Ci0gICAgb3BlcmF0aW9uQ29tcGxldGUgPSBmYWxzZTsKLSAgICBleGVjdXRlVGhyZWFkLnN0YXJ0KCk7Ci0gICAgCi0gICAgc3luY2hyb25pemVkKCBvcGVyYXRpb24gKQotICAgIHsKLSAgICAgIHdoaWxlKCAhb3BlcmF0aW9uQ29tcGxldGUgKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIG9wZXJhdGlvbi53YWl0KHRpbWVvdXQpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgICAgID0gZXhjLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICBTdGF0dXMgZXJyb3JTdGF0dXMgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCJpZCIsIDAsIG1lc3NhZ2UgPT0gbnVsbCA/ICIiIDogbWVzc2FnZSwgZXhjICk7Ci0gICAgICAgICAgZXhlY3V0ZVRocmVhZC5pbnRlcnJ1cHQoKTsKLSAgICAgICAgICByZXR1cm4gZXJyb3JTdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCAhb3BlcmF0aW9uQ29tcGxldGUgKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gV2UgdGltZWQgb3V0LCBzaW5jZSB0aGUgZXhlY3V0aW9uIHRocmVhZCBoYXNuJ3Qgc2V0IG9wZXJhdGlvbkNvbXBsZXRlIAotICAgICAgICAgIC8vIHRvIHRydWUuCi0gICAgICAgICAgU3RhdHVzICBlcnJvclN0YXR1cyA9IG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsImlkIiwgMCwgRW52aXJvbm1lbnRVSU1lc3NhZ2VzLk1TR19FUlJPUl9PUEVSQVRJT05fVElNRURfT1VULCBudWxsKTsKLSAgICAgICAgICBTaGVsbCAgIHNoZWxsICAgICAgID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotICAgICAgICAgIGJvb2xlYW4gd2FpdE1vcmUgICAgPSBNZXNzYWdlRGlhbG9nLm9wZW5Db25maXJtKHNoZWxsLCBFbnZpcm9ubWVudFVJTWVzc2FnZXMuTVNHX0VSUk9SX09QRVJBVElPTl9USU1FRF9PVVQsIHRpbWVPdXRNZXNzYWdlICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoICF3YWl0TW9yZSApCi0gICAgICAgICAgewotICAgICAgICAgICAgZXhlY3V0ZVRocmVhZC5pbnRlcnJ1cHQoKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbkNvbXBsZXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclN0YXR1czsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gV2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gIFRoZXJlZm9yZSByZXR1cm4gdGhlIHN0YXR1cyBzZXQgaW4gdGhlIGZvcmtlZAotICAgIC8vIHRocmVhZC4KLSAgICByZXR1cm4gcmV0dXJuU3RhdHVzOwotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBPcGVyYXRpb25SdW5uYWJsZSBpbXBsZW1lbnRzIFJ1bm5hYmxlCi0gIHsKLSAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICByZXR1cm5TdGF0dXMgPSBvcGVyYXRpb24uZXhlY3V0ZSh0ZW1wTW9uaXRvciwgdGVtcEluZm8pOwotICAgICAgfQotICAgICAgY2F0Y2goIFRocm93YWJsZSBleGMgKQotICAgICAgewotICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IGV4Yy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm5TdGF0dXMgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCJpZCIsIDAsIG1lc3NhZ2UgPT0gbnVsbCA/ICIiIDogbWVzc2FnZSwgZXhjICk7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCggb3BlcmF0aW9uICkKLSAgICAgICAgewotICAgICAgICAgIG9wZXJhdGlvbkNvbXBsZXRlID0gdHJ1ZTsKLSAgICAgICAgICBvcGVyYXRpb24ubm90aWZ5KCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgcmVkbyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi5yZWRvKG1vbml0b3IsIGluZm8pOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgdW5kbyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi51bmRvKG1vbml0b3IsIGluZm8pOwotICB9Ci0gIHB1YmxpYyBJVW5kb0NvbnRleHRbXSBnZXRDb250ZXh0cygpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLmdldENvbnRleHRzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBoYXNDb250ZXh0KElVbmRvQ29udGV4dCBjb250ZXh0KQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi5oYXNDb250ZXh0KGNvbnRleHQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQ29udGV4dChJVW5kb0NvbnRleHQgY29udGV4dCkKLSAgewotICAgIG9wZXJhdGlvbi5hZGRDb250ZXh0KGNvbnRleHQpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gY2FuRXhlY3V0ZSgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLmNhbkV4ZWN1dGUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGNhblJlZG8oKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi5jYW5SZWRvKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBjYW5VbmRvKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb24uY2FuVW5kbygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsKLSAgICBvcGVyYXRpb24uZGlzcG9zZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLmdldExhYmVsKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVDb250ZXh0KElVbmRvQ29udGV4dCBjb250ZXh0KQotICB7Ci0gICAgb3BlcmF0aW9uLnJlbW92ZUNvbnRleHQoY29udGV4dCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRMYWJlbChTdHJpbmcgbmFtZSkKLSAgewotICAgIG9wZXJhdGlvbi5zZXRMYWJlbChuYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzNGVhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDIyMSAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBBbnRFeHRlbnNpb24gewotCQotCXByaXZhdGUgU3RyaW5nIGxhYmVsXzsKLQlwcml2YXRlIFN0cmluZyBydW50aW1lXzsKLQlwcml2YXRlIFN0cmluZyBzY2VuYXJpb187Ci0JcHJpdmF0ZSBTdHJpbmcgaWRfOwotCXByaXZhdGUgU3RyaW5nIHJ1bnRpbWVJRF87Ci0JcHJpdmF0ZSBTdHJpbmcgcGx1Z2luXzsKLQlwcml2YXRlIFN0cmluZyBwYXRoXzsKLQlwcml2YXRlIFN0cmluZyB3c2dlbnBhdGhfOwotCXByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnRfOwotCQotCXB1YmxpYyBBbnRFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQllbGVtZW50XyA9IGVsZW1lbnQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKQotCXsKLQkgICAgaWYgKGxhYmVsXz09bnVsbCkKLQkgICAgewotCSAgICAJbGFiZWxfID0gZWxlbWVudF8uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwotCSAgICB9Ci0JICAgIHJldHVybiBsYWJlbF87Ci0JfSAgIAotCi0JcHVibGljIFN0cmluZyBnZXRSdW50aW1lTGFiZWwoKQotCXsKLQkgICAgaWYgKHJ1bnRpbWVfPT1udWxsKQotCSAgICB7Ci0JICAgIAlydW50aW1lXyA9IGVsZW1lbnRfLmdldEF0dHJpYnV0ZSgicnVudGltZWxhYmVsIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuIHJ1bnRpbWVfOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNjZW5hcmlvTGFiZWwoKQotCXsKLQkgICAgaWYgKHNjZW5hcmlvXz09bnVsbCkKLQkgICAgewotCSAgICAJc2NlbmFyaW9fID0gZWxlbWVudF8uZ2V0QXR0cmlidXRlKCJzY2VuYXJpb2xhYmVsIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuIHNjZW5hcmlvXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRJRCgpCi0JewotCSAgICBpZiAoaWRfPT1udWxsKQotCSAgICB7Ci0JICAgIAlpZF8gPSBlbGVtZW50Xy5nZXRBdHRyaWJ1dGUoImlkIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuIGlkXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRSdW50aW1lSUQoKQotCXsKLQkgICAgaWYgKHJ1bnRpbWVJRF89PW51bGwpCi0JICAgIHsKLQkgICAgCXJ1bnRpbWVJRF8gPSBlbGVtZW50Xy5nZXRBdHRyaWJ1dGUoInJ1bnRpbWVpZCIpOwotCSAgICB9Ci0JICAgIHJldHVybiBydW50aW1lSURfOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFBsdWdpbigpCi0JewotCSAgICBpZiAocGx1Z2luXz09bnVsbCkKLQkgICAgewotCSAgICAJcGx1Z2luXyA9IGVsZW1lbnRfLmdldEF0dHJpYnV0ZSgicGx1Z2lubG9jYXRpb24iKTsKLQkgICAgfQotCSAgICByZXR1cm4gcGx1Z2luXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRQYXRoKCkKLQl7Ci0JICAgIGlmIChwYXRoXz09bnVsbCkKLQkgICAgewotCSAgICAJcGF0aF8gPSBlbGVtZW50Xy5nZXRBdHRyaWJ1dGUoInBhdGgiKTsKLQkgICAgfQotCSAgICByZXR1cm4gcGF0aF87Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXU0dlblBhdGgoKQotCXsKLQkgICAgaWYgKHdzZ2VucGF0aF89PW51bGwpCi0JICAgIHsKLQkgICAgCXdzZ2VucGF0aF8gPSBlbGVtZW50Xy5nZXRBdHRyaWJ1dGUoIndzZ2VucGF0aCIpOwotCSAgICB9Ci0JICAgIHJldHVybiB3c2dlbnBhdGhfOwotCX0KLQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RXh0ZW5zaW9uQ3JlYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEV4dGVuc2lvbkNyZWF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzRmMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RXh0ZW5zaW9uQ3JlYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDIyMSAxNDYwMjMgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuY29tbW9uLkxhYmVsc0FuZElkczsKLQotcHVibGljIGNsYXNzIEFudEV4dGVuc2lvbkNyZWF0aW9uIHsKLQotCXByaXZhdGUgSGFzaHRhYmxlIGFudEV4dGVudGlvbnNfOwotCXByaXZhdGUgc3RhdGljIEFudEV4dGVuc2lvbkNyZWF0aW9uIGFudEV4dGVuc2lvbkNfOwotCXByaXZhdGUgSGFzaHRhYmxlIHJ1bnRpbWVTdHJ1Y3RzXyA9IG51bGw7Ci0JCi0JCi0JcHVibGljIHN0YXRpYyBBbnRFeHRlbnNpb25DcmVhdGlvbiBnZXRJbnN0YW5jZSgpewotCQlpZihhbnRFeHRlbnNpb25DXyA9PSBudWxsKXsKLQkJCWFudEV4dGVuc2lvbkNfID0gbmV3IEFudEV4dGVuc2lvbkNyZWF0aW9uKCk7Ci0JCX0KLQkJcmV0dXJuIGFudEV4dGVuc2lvbkNfOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVFeHRlbnNpb25zKCkKLQl7Ci0JCWFudEV4dGVudGlvbnNfID0gbmV3IEhhc2h0YWJsZSgpOwotCQlJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJLy9Mb2FkICBieSByZWFkaW5nIGFsbCBleHRlbnNpb25zIHRvIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS5hbnRmaWxlcwotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBhbnRFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0Zvcigib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpIiwgImFudGZpbGVzIik7Ci0gICAgCi0JCWZvcihpbnQgaWR4PTA7IGlkeDxhbnRFeHRzLmxlbmd0aDsgaWR4KyspIAotCQl7Ci0JCQlJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IGFudEV4dHNbaWR4XTsKLQkJCWlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoImFudGZpbGVzIikpCi0JCQl7Ci0JCQkJQW50RXh0ZW5zaW9uIGFlID0gbmV3IEFudEV4dGVuc2lvbihlbGVtKTsKLQkJCQlhbnRFeHRlbnRpb25zXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIGFlKTsKLQkJCX0gICAgICAgIAotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZVJ1bnRpbWVzKCl7Ci0JCUVudW1lcmF0aW9uIGFudEV4dHNFbnVtID0gYW50RXh0ZW50aW9uc18uZWxlbWVudHMoKTsKLQkJcnVudGltZVN0cnVjdHNfID0gbmV3IEhhc2h0YWJsZSgpOwotCQkKLQkJd2hpbGUoYW50RXh0c0VudW0uaGFzTW9yZUVsZW1lbnRzKCkpewotCQkJQW50RXh0ZW5zaW9uIGFudEV4dCA9IChBbnRFeHRlbnNpb24pYW50RXh0c0VudW0ubmV4dEVsZW1lbnQoKTsKLQkJCVJ1bnRpbWVTdHJ1Y3QgcnMgPSAoUnVudGltZVN0cnVjdClydW50aW1lU3RydWN0c18uZ2V0KGFudEV4dC5nZXRSdW50aW1lSUQoKSk7Ci0JCQlpZihycyA9PSBudWxsKXsKLQkJCQlycyA9IG5ldyBSdW50aW1lU3RydWN0KGFudEV4dC5nZXRSdW50aW1lSUQoKSk7IAotCQkJCXJzLnNldFJ1bnRpbWVMYWJlbChhbnRFeHQuZ2V0UnVudGltZUxhYmVsKCkpOwotCQkJCXJzLnNldFNjZW5hcmlvKGFudEV4dC5nZXRJRCgpLCBhbnRFeHQuZ2V0U2NlbmFyaW9MYWJlbCgpKTsKLQkJCQlydW50aW1lU3RydWN0c18ucHV0KHJzLmdldFJ1bnRpbWVJRCgpLCBycyk7Ci0JCQl9Ci0JCQllbHNlewotCQkJCXJzLnNldFNjZW5hcmlvKGFudEV4dC5nZXRJRCgpLCBhbnRFeHQuZ2V0U2NlbmFyaW9MYWJlbCgpKTsKLQkJCX0KLQkJfQotCX0KLQkJCi0JcHVibGljIExhYmVsc0FuZElkcyBnZXRSdW50aW1lTGFiZWxzQW5kSWRzKCl7Ci0JCWlmKGFudEV4dGVudGlvbnNfID09IG51bGwpIGNyZWF0ZUV4dGVuc2lvbnMoKTsKLQkJaWYocnVudGltZVN0cnVjdHNfID09IG51bGwpY3JlYXRlUnVudGltZXMoKTsKLQkJTGFiZWxzQW5kSWRzIHJ1bnRpbWUgPSBuZXcgTGFiZWxzQW5kSWRzKCk7IAotCQlFbnVtZXJhdGlvbiBydW50aW1lU3RydWN0cyA9IHJ1bnRpbWVTdHJ1Y3RzXy5lbGVtZW50cygpOwotCQl3aGlsZShydW50aW1lU3RydWN0cy5oYXNNb3JlRWxlbWVudHMoKSl7Ci0JCQlSdW50aW1lU3RydWN0IHJzID0gKFJ1bnRpbWVTdHJ1Y3QpcnVudGltZVN0cnVjdHMubmV4dEVsZW1lbnQoKTsJCi0JCQlydW50aW1lLmFkZChycy5nZXRSdW50aW1lSUQoKSxycy5nZXRSdW50aW1lTGFiZWwoKSk7Ci0JCX0KLQkJcmV0dXJuIHJ1bnRpbWU7Ci0JfQotCQotCXB1YmxpYyBMYWJlbHNBbmRJZHMgZ2V0U2NlbmFyaW9MYWJlbHNCeVJ1bnRpbWUoU3RyaW5nIHJ1bnRpbWVJZCl7Ci0JCWlmKGFudEV4dGVudGlvbnNfID09IG51bGwpIGNyZWF0ZUV4dGVuc2lvbnMoKTsKLQkJaWYocnVudGltZVN0cnVjdHNfID09IG51bGwpIGNyZWF0ZVJ1bnRpbWVzKCk7Ci0JCVJ1bnRpbWVTdHJ1Y3QgcnMgPSAoUnVudGltZVN0cnVjdClydW50aW1lU3RydWN0c18uZ2V0KHJ1bnRpbWVJZCk7CQotCQlyZXR1cm4gcnMuZ2V0U2NlbmFyaW9MYWJlbHMoKTsKLQl9Ci0JCi0JCQotCXB1YmxpYyBBbnRFeHRlbnNpb24gZ2V0QW5yRXh0QnlTY2VuYXJpbyhTdHJpbmcgc2VsZWN0aW9uKXsKLQkJaWYoYW50RXh0ZW50aW9uc18gPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0JCXJldHVybiAoQW50RXh0ZW5zaW9uKWFudEV4dGVudGlvbnNfLmdldChzZWxlY3Rpb24pOwkKLQl9Ci0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEZpbGVJbXBvcnRXaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEZpbGVJbXBvcnRXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjMWE5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNSAgIDEyODcxMSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA4MDIyMSAgIDE0NjAyMyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lc3NhZ2VCb3g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2V0U2VsZWN0aW9uVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW4uRW52UGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5FbnZpcm9ubWVudFVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnBsdWdpbi5FbnZVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuTnVsbFN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGNsYXNzIEFudEZpbGVJbXBvcnRXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKLQotCS8vcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZkNvbmZpZ0VsZW1lbnQ7Ci0JcHJpdmF0ZSBBbnRGaWxlSW1wb3J0V2l6YXJkUGFnZSBtYWluUGFnZTsKLQkvKioKLSAgICAgKiBUaGUgd29ya2JlbmNoLgotICAgICAqLwotICAgIHByaXZhdGUgSVdvcmtiZW5jaCB3b3JrYmVuY2g7Ci0gICAgcHJpdmF0ZSBBbnRFeHRlbnNpb25DcmVhdGlvbiBhbnRFeHRDXzsKLQotICAgIC8qKgotICAgICAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbi4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOwotICAgIAotCXB1YmxpYyBBbnRGaWxlSW1wb3J0V2l6YXJkKCkKLQl7Ci0JCXN1cGVyKCk7CQkgCi0JCXNldFdpbmRvd1RpdGxlKEVudmlyb25tZW50VUlNZXNzYWdlcy5XSVpBUkRfVElUTEVfQU5UKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0V2luZG93VGl0bGUoU3RyaW5nIG5ld1RpdGxlKSB7Ci0JCXN1cGVyLnNldFdpbmRvd1RpdGxlKG5ld1RpdGxlKTsKLQl9Ci0JCi0JIHB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgewotCSAgICAgICAgc3VwZXIuYWRkUGFnZXMoKTsJICAgICAgICAKLQkgICAgICAgIG1haW5QYWdlID0gbmV3IEFudEZpbGVJbXBvcnRXaXphcmRQYWdlKEVudmlyb25tZW50VUlNZXNzYWdlcy5XSVpBUkRfUEFHRV9USVRMRV9BTlQsIGdldFNlbGVjdGlvbigpKTsKLSAgICAgICAgICAgIGFkZFBhZ2UobWFpblBhZ2UpOwotCSAgICB9Ci0JCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsJCi0JCWFudEV4dENfID0gQW50RXh0ZW5zaW9uQ3JlYXRpb24uZ2V0SW5zdGFuY2UoKTsKLQkJSVBhdGggZGVzdGluYXRpb24gPSBtYWluUGFnZS5nZXRQYXRoKCk7Ci0JCWlmIChkZXN0aW5hdGlvbiA9PSBudWxsKQotCQl7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0JCQkKLQkJZWxzZQotCQl7Ci0JCQlBbnRFeHRlbnNpb24gYW50RXh0ID0gYW50RXh0Q18uZ2V0QW5yRXh0QnlTY2VuYXJpbyhtYWluUGFnZS5nZXRTY2VuYXJpbygpKTsKLQkJCUJ1bmRsZSB3c0J1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShhbnRFeHQuZ2V0UGx1Z2luKCkpOwotCQkJSVBhdGggcHJvcGVydHlQYXRoID0gbmV3IFBhdGgoYW50RXh0LmdldFBhdGgoKSk7Ci0JCQlVUkwgcHJvcGVydHlVUkwgPSBGaWxlTG9jYXRvci5maW5kKCB3c0J1bmRsZSwgcHJvcGVydHlQYXRoLCBudWxsKTsKLQkJCQotCQkJVVJMQ29ubmVjdGlvbiBjb25uOwotCQkJSW5wdXRTdHJlYW0gaXNQcm9wZXJ0eSA9IG51bGw7Ci0JCQl0cnl7Ci0JCQkJY29ubiA9IHByb3BlcnR5VVJMLm9wZW5Db25uZWN0aW9uKCk7Ci0JCQkJaXNQcm9wZXJ0eSA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKLQkJICAgIH0KLQkJICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2Upe30KLQkJICAgIAotCQkgICAgUGx1Z2luIHNvdXJjZVBsdWdpbiA9IEVudlBsdWdpbi5nZXRJbnN0YW5jZSgpOyAgCi0JCQlTdHJpbmcgdGFyZ2V0RmlsZSA9IGFudEV4dC5nZXRQYXRoKCk7Ci0JCSAgICBjcmVhdGVJRmlsZShzb3VyY2VQbHVnaW4sIGlzUHJvcGVydHksIGRlc3RpbmF0aW9uLCB0YXJnZXRGaWxlLCAoSVByb2dyZXNzTW9uaXRvciluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJICAgIAotCQkgICAgSVBhdGggd3NnZW5QYXRoID0gbmV3IFBhdGgoYW50RXh0LmdldFdTR2VuUGF0aCgpKTsKLQkJCVVSTCBmaWxlVVJMID0gRmlsZUxvY2F0b3IuZmluZCggd3NCdW5kbGUsIHdzZ2VuUGF0aCwgbnVsbCk7Ci0JCQkKLQkJCVVSTENvbm5lY3Rpb24gY29ubldTR2VuOwotCQkJSW5wdXRTdHJlYW0gaXNXU0dlbiA9IG51bGw7Ci0JCQl0cnl7Ci0JCQkJY29ubldTR2VuID0gZmlsZVVSTC5vcGVuQ29ubmVjdGlvbigpOwotCQkJCWlzV1NHZW4gPSBjb25uV1NHZW4uZ2V0SW5wdXRTdHJlYW0oKTsKLQkJICAgIH0KLQkJICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2Upe30KLQkJICAgIAotCQkgICAgU3RyaW5nIHRhcmdldEZpbGVXU0dlbiA9IGFudEV4dC5nZXRXU0dlblBhdGgoKTsKLQkJICAgIGNyZWF0ZUlGaWxlKHNvdXJjZVBsdWdpbiwgaXNXU0dlbiwgZGVzdGluYXRpb24sIHRhcmdldEZpbGVXU0dlbiwgKElQcm9ncmVzc01vbml0b3IpbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkKLQkJICAgIAotCQkgICAKLQkJfQotCSAgICByZXR1cm4gdHJ1ZTsJCQotICB9CQotCQotCQotCQotCXByaXZhdGUgSVN0YXR1cyBjcmVhdGVJRmlsZShQbHVnaW4gcGx1Z2luLCBJbnB1dFN0cmVhbSBzb3VyY2UsIElQYXRoIHRhcmdldFBhdGgsIFN0cmluZyB0YXJnZXRGaWxlLCAvKklFbnZpcm9ubWVudCBlbnYsKi8gSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JICAgIAotCSAgaWYgKHBsdWdpbiAhPSBudWxsKQotCSAgewotCSAgICBJUGF0aCB0YXJnZXQgPSB0YXJnZXRQYXRoLmFwcGVuZChuZXcgUGF0aCh0YXJnZXRGaWxlKSk7Ci0JICAgIAotCSAgICBQcm9ncmVzc1V0aWxzLnJlcG9ydCggbW9uaXRvciwgRW52aXJvbm1lbnRVSU1lc3NhZ2VzLk1TR19TVEFUVVNfQ09QWUlOR19BTlRfRklMRVMpOwotCSAgICB0cnkKLQkgICAgewotCSAgICAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9IG5ldyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQoKTsKLQkgICAgICAgLy8gY2hlY2sgdG8gc2VlIGlmIGZpbGUgZXhpc3RzIGJlZm9yZSBjb3B5Ci0JICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IEZpbGVSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh0YXJnZXQpOwkgICAgIAotCSAgICAgICAKLQkgICAgICAgaWYgKHJlc291cmNlICE9IG51bGwpCi0JCQl7Ci0JCQkJTWVzc2FnZUJveCBvdmVyd3JpdGVCb3ggPSBuZXcgTWVzc2FnZUJveChnZXRTaGVsbCgpLCBTV1QuSUNPTl9RVUVTVElPTnxTV1QuWUVTfFNXVC5OTyk7Ci0JCQkJb3ZlcndyaXRlQm94LnNldE1lc3NhZ2UoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLmJpbmQoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLk1TR19XQVJOSU5HX0ZJTEVfRVhJU1RTLCB0YXJnZXQudG9TdHJpbmcoKSkpOwkJCQkKLQkJCQlvdmVyd3JpdGVCb3guc2V0VGV4dChFbnZpcm9ubWVudFVJTWVzc2FnZXMuRElBTE9HX1RJVExFX09WRVJXUklURSk7Ci0JCQkJaW50IHJlc3VsdCA9IG92ZXJ3cml0ZUJveC5vcGVuKCk7Ci0JCQkJaWYgKHJlc3VsdCAhPSBTV1QuTk8pCi0JCQkJCUZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGUoY29udGV4dCwgdGFyZ2V0LCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uaXRvciwgKElTdGF0dXNIYW5kbGVyKW5ldyBOdWxsU3RhdHVzSGFuZGxlcigpKTsKLQkJCQllbHNlIAotCQkJCQlyZXR1cm4gU3RhdHVzLkNBTkNFTF9TVEFUVVM7Ci0JCQl9ICAgICAgIAotCQkJZWxzZSAKLQkJCXsKLQkJCQlGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGNvbnRleHQsIHRhcmdldCwgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uaXRvciwgKElTdGF0dXNIYW5kbGVyKW5ldyBOdWxsU3RhdHVzSGFuZGxlcigpKTsKLQkJCX0KLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsJICAgIAkKLQkgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLk1TR19FUlJfQ09QWUlOR19BTlRfRklMRVMsIGUpOwotCSAgICB9Ci0JICB9CSAgCi0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgc2VsZWN0aW9uIHdoaWNoIHdhcyBwYXNzZWQgdG8gPGNvZGU+aW5pdDwvY29kZT4uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBzZWxlY3Rpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgewotICAgICAgICByZXR1cm4gc2VsZWN0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHdvcmtiZW5jaCB3aGljaCB3YXMgcGFzc2VkIHRvIDxjb2RlPmluaXQ8L2NvZGU+LgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgd29ya2JlbmNoCi0gICAgICovCi0gICAgcHVibGljIElXb3JrYmVuY2ggZ2V0V29ya2JlbmNoKCkgewotICAgICAgICByZXR1cm4gd29ya2JlbmNoOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSA8Y29kZT5CYXNpY05ld1Jlc291cmNlV2l6YXJkPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIAotICAgICAqIDxjb2RlPklXb3JrYmVuY2hXaXphcmQ8L2NvZGU+IG1ldGhvZCByZWNvcmRzIHRoZSBnaXZlbiB3b3JrYmVuY2ggYW5kCi0gICAgICogc2VsZWN0aW9uLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIGRlZmF1bHQgYmFubmVyIGltYWdlIGZvciB0aGUgcGFnZXMKLSAgICAgKiBieSBjYWxsaW5nIDxjb2RlPmluaXRpYWxpemVEZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcjwvY29kZT4uCi0gICAgICogU3ViY2xhc3NlcyBtYXkgZXh0ZW5kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24pIHsKLSAgICAgICAgdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjsKLQotICAgICAgICBpbml0aWFsaXplRGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXplcyB0aGUgZGVmYXVsdCBwYWdlIGltYWdlIGRlc2NyaXB0b3IgdG8gYW4gYXBwcm9wcmlhdGUgYmFubmVyLgotICAgICAqIEJ5IGNhbGxpbmcgPGNvZGU+c2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3I8L2NvZGU+LgotICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHVzZXMgYSBnZW5lcmljIG5ldyB3aXphcmQgaW1hZ2UuCi0gICAgICogPHA+Ci0gICAgICogU3ViY2xhc3NlcyBtYXkgcmVpbXBsZW1lbnQuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcigpIHsKLSAgICAJSW1hZ2VEZXNjcmlwdG9yIGRlc2MgPSBFbnZVSVBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2Z1bGwvd2l6YmFuL25ld2FudGZpbGVzX3dpei5wbmciKTsvLyROT04tTkxTLTEkCi0gICAgICAgIHNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKGRlc2MpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbGVjdHMgYW5kIHJldmVhbHMgdGhlIG5ld2x5IGFkZGVkIHJlc291cmNlIGluIGFsbCBwYXJ0cwotICAgICAqIG9mIHRoZSBhY3RpdmUgd29ya2JlbmNoIHdpbmRvdydzIGFjdGl2ZSBwYWdlLgotICAgICAqCi0gICAgICogQHNlZSBJU2V0U2VsZWN0aW9uVGFyZ2V0Ci0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgc2VsZWN0QW5kUmV2ZWFsKElSZXNvdXJjZSBuZXdSZXNvdXJjZSkgewotICAgICAgICBzZWxlY3RBbmRSZXZlYWwobmV3UmVzb3VyY2UsIGdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBdHRlbXB0cyB0byBzZWxlY3QgYW5kIHJldmVhbCB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGluIGFsbAotICAgICAqIHBhcnRzIHdpdGhpbiB0aGUgc3VwcGxpZWQgd29ya2JlbmNoIHdpbmRvdydzIGFjdGl2ZSBwYWdlLgotICAgICAqIDxwPgotICAgICAqIENoZWNrcyBhbGwgcGFydHMgaW4gdGhlIGFjdGl2ZSBwYWdlIHRvIHNlZSBpZiB0aGV5IGltcGxlbWVudCA8Y29kZT5JU2V0U2VsZWN0aW9uVGFyZ2V0PC9jb2RlPiwKLSAgICAgKiBlaXRoZXIgZGlyZWN0bHkgb3IgYXMgYW4gYWRhcHRlci4gSWYgc28sIHRlbGxzIHRoZSBwYXJ0IHRvIHNlbGVjdCBhbmQgcmV2ZWFsIHRoZQotICAgICAqIHNwZWNpZmllZCByZXNvdXJjZS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVzb3VyY2UgdGhlIHJlc291cmNlIHRvIGJlIHNlbGVjdGVkIGFuZCByZXZlYWxlZAotICAgICAqIEBwYXJhbSB3aW5kb3cgdGhlIHdvcmtiZW5jaCB3aW5kb3cgdG8gc2VsZWN0IGFuZCByZXZlYWwgdGhlIHJlc291cmNlCi0gICAgICogCi0gICAgICogQHNlZSBJU2V0U2VsZWN0aW9uVGFyZ2V0Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNlbGVjdEFuZFJldmVhbChJUmVzb3VyY2UgcmVzb3VyY2UsCi0gICAgICAgICAgICBJV29ya2JlbmNoV2luZG93IHdpbmRvdykgewotICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgaW5wdXQKLSAgICAgICAgaWYgKHdpbmRvdyA9PSBudWxsIHx8IHJlc291cmNlID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3aW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIGdldCBhbGwgdGhlIHZpZXcgYW5kIGVkaXRvciBwYXJ0cwotICAgICAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBJV29ya2JlbmNoUGFydFJlZmVyZW5jZSByZWZzW10gPSBwYWdlLmdldFZpZXdSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgSVdvcmtiZW5jaFBhcnQgcGFydCA9IHJlZnNbaV0uZ2V0UGFydChmYWxzZSk7Ci0gICAgICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChwYXJ0KTsKLSAgICAgICAgfQotICAgICAgICByZWZzID0gcGFnZS5nZXRFZGl0b3JSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKHJlZnNbaV0uZ2V0UGFydChmYWxzZSkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBwYXJ0cy5hZGQocmVmc1tpXS5nZXRQYXJ0KGZhbHNlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHJlc291cmNlKTsKLSAgICAgICAgSXRlcmF0b3IgaXRyID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIElXb3JrYmVuY2hQYXJ0IHBhcnQgPSAoSVdvcmtiZW5jaFBhcnQpIGl0ci5uZXh0KCk7Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgcGFydCdzIElTZXRTZWxlY3Rpb25UYXJnZXQgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICAgIElTZXRTZWxlY3Rpb25UYXJnZXQgdGFyZ2V0ID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSAoSVNldFNlbGVjdGlvblRhcmdldCkgcGFydDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSAoSVNldFNlbGVjdGlvblRhcmdldCkgcGFydAotICAgICAgICAgICAgICAgICAgICAgICAgLmdldEFkYXB0ZXIoSVNldFNlbGVjdGlvblRhcmdldC5jbGFzcyk7Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBhbmQgcmV2ZWFsIHJlc291cmNlCi0gICAgICAgICAgICAgICAgZmluYWwgSVNldFNlbGVjdGlvblRhcmdldCBmaW5hbFRhcmdldCA9IHRhcmdldDsKLSAgICAgICAgICAgICAgICB3aW5kb3cuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxUYXJnZXQuc2VsZWN0UmV2ZWFsKHNlbGVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEZpbGVJbXBvcnRXaXphcmRQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTY0MWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEZpbGVJbXBvcnRXaXphcmRQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogMjAwODAyMjEgMTQ2MDIzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MgCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkUmVzb3VyY2VJbXBvcnRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5FbnZpcm9ubWVudFVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmNvbW1vbi5MYWJlbHNBbmRJZHM7Ci0KLXB1YmxpYyBjbGFzcyBBbnRGaWxlSW1wb3J0V2l6YXJkUGFnZSBleHRlbmRzIFdpemFyZFJlc291cmNlSW1wb3J0UGFnZXsKLQkgIAotCXByaXZhdGUgU3RyaW5nIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkiOwotCQotCS8qIENPTlRFWFRfSUQgU1JQRjAwMDEgZm9yIHNlcnZlciBwcmVmZXJlbmNlIG9uIHRoZSBzZXJ2ZXIgcnVudGltZSBwcmVmZXJlbmNlIHBhZ2UgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1NSUEZfU0VSVkVSX1BSRUYgPSBwbHVnaW5JZF8gKyAiLlNSUEYwMDAxIjsKLQlwcml2YXRlIENvbWJvIHNjZW5hcmlvXzsKLQotCS8qIENPTlRFWFRfSUQgU1JQRjAwMDIgZm9yIHJ1bnRpbWUgcHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyIHJ1bnRpbWUgcHJlZmVyZW5jZSBwYWdlICovCi0JcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9TUlBGX1JVTlRJTUVfUFJFRiA9IHBsdWdpbklkXyArICIuU1JQRjAwMDIiOwotCXByaXZhdGUgQ29tYm8gcnVudGltZV87CQotCQotCXByaXZhdGUgQW50RXh0ZW5zaW9uQ3JlYXRpb24gYW50RXh0Q187Ci0JcHJpdmF0ZSBMYWJlbHNBbmRJZHMgbGFiZWxzQW5kSWRzU2NlbmFyaW9fOwotCXByaXZhdGUgTGFiZWxzQW5kSWRzIGxhYmVsc0FuZElkc1J1bnRpbWVfOwotCXByaXZhdGUgaW50IHJ1bnRpbWVJZHhfOwotCXByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotCQotCXB1YmxpYyBBbnRGaWxlSW1wb3J0V2l6YXJkUGFnZShTdHJpbmcgcGFnZU5hbWUsCi0JICAgICAgICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JICAgICAgICBzdXBlcigiV1NBbnRGaWxlc1BhZ2UxIiwgc2VsZWN0aW9uKTsvLyROT04tTkxTLTEkCi0JICAgICAgICBzZXRUaXRsZShwYWdlTmFtZSk7CSAgICAgICAgCi0JICAgICAgICBzZXREZXNjcmlwdGlvbihFbnZpcm9ubWVudFVJTWVzc2FnZXMuV0laQVJEX1BBR0VfREVTQ19BTlQpOwkgICAgICAgIAotCSAgICB9Ci0JCi0JCQotCXB1YmxpYyBDb21ibyBjcmVhdGVDb21ibyggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wLCBpbnQgc3R5bGUgKQotCSAgeyAgICAKLQkgICAgdG9vbHRpcCA9IHRvb2x0aXAgPT0gbnVsbCA/IGxhYmVsTmFtZSA6IHRvb2x0aXA7Ci0JICAgIAotCSAgICBpZiggbGFiZWxOYW1lICE9IG51bGwgKQotCSAgICB7Ci0JICAgICAgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoIHBhcmVudCwgU1dULldSQVApOwotCSAgICAgIGxhYmVsLnNldFRleHQoIGxhYmVsTmFtZSApOwotCSAgICAgIGxhYmVsLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwICk7Ci0JICAgIH0KLQkgICAgCi0JICAgIENvbWJvIGNvbWJvID0gbmV3IENvbWJvKCBwYXJlbnQsIHN0eWxlICk7Ci0JICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0JICAgICAKLQkgICAgY29tYm8uc2V0TGF5b3V0RGF0YSggZ3JpZGRhdGEgKTsKLQkgICAgY29tYm8uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLQkgICAgCi0JICAgIGlmKCBpbmZvcG9wICE9IG51bGwgKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBjb21ibywgcGx1Z2luSWRfICsgIi4iICsgaW5mb3BvcCApOwotCSAgICAKLQkgICAgcmV0dXJuIGNvbWJvOyAgICAgIAotCSAgfQotCQotCXByb3RlY3RlZCBJVHJlZUNvbnRlbnRQcm92aWRlciBnZXRGaWxlUHJvdmlkZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgSVBhdGggZ2V0UGF0aCgpCi0JewotCQlyZXR1cm4gZ2V0Q29udGFpbmVyRnVsbFBhdGgoKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlU291cmNlR3JvdXAoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgcGFnZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotCQlnbC5udW1Db2x1bW5zID0gMjsKLQkJcGFnZS5zZXRMYXlvdXQoZ2wpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLQkJcGFnZS5zZXRMYXlvdXREYXRhKGdkKTsKLQkgIAotCQlydW50aW1lXyA9IGNyZWF0ZUNvbWJvKHBhZ2UsRW52aXJvbm1lbnRVSU1lc3NhZ2VzLkxBQkVMX1JVTlRJTUVTX0xJU1QsCi0JCQkgIEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX1BQQURfQ09NQk9fUlVOVElNRSwKLQkJCQkJCQkJCSBJTkZPUE9QX1NSUEZfUlVOVElNRV9QUkVGLAotCQkJCQkJCQkJIFNXVC5TSU5HTEV8U1dULkJPUkRFUnxTV1QuUkVBRF9PTkxZKTsKLQkKLQkJcnVudGltZV8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkge30KLQkJCQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCWhhbmRsZVJ1bnRpbWVTZWxlY3RlZCgpOwkJCQkJCi0JCQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwkJCSAgIAotCQkJfQotCQl9KTsKLQkKLQkJc2NlbmFyaW9fID0gY3JlYXRlQ29tYm8ocGFnZSxFbnZpcm9ubWVudFVJTWVzc2FnZXMuTEFCRUxfU0VSVkVSU19MSVNULAotCQkJCSAgRW52aXJvbm1lbnRVSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRF9DT01CT19TQ0VOQVJJTywKLQkJCQkJCQkJCQlJTkZPUE9QX1NSUEZfU0VSVkVSX1BSRUYsCi0JCQkJCQkJCQkJU1dULlNJTkdMRXxTV1QuQk9SREVSfFNXVC5SRUFEX09OTFkpOwotCQkKLQkJaW5pYXRpYWxpemUoKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIElUcmVlQ29udGVudFByb3ZpZGVyIGdldEZvbGRlclByb3ZpZGVyKCkgewotCQkgcmV0dXJuIG51bGw7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZU9wdGlvbnNHcm91cChDb21wb3NpdGUgcGFyZW50KSB7Ci0gICAgICAgIC8vZW1wdHkgLSBkb24ndCB3YW50IGFuIG9wdGlvbnMgZ3JvdXAgCi0gICAgfQotCQotCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKHNjZW5hcmlvXyA9PSBldmVudC53aWRnZXQpCi0JCQloYW5kbGVTY2VuYXJpb1NlbGVjdGVkKCk7Ci0JCWVsc2UgaWYgKHJ1bnRpbWVfID09IGV2ZW50LndpZGdldCkKLQkJCWhhbmRsZVJ1bnRpbWVTZWxlY3RlZCgpOwotCQllbHNlCi0JCQlzdXBlci5oYW5kbGVFdmVudChldmVudCk7Ci0JCQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlUnVudGltZVNlbGVjdGVkKCl7Ci0JCWxhYmVsc0FuZElkc1NjZW5hcmlvXyA9IGFudEV4dENfLmdldFNjZW5hcmlvTGFiZWxzQnlSdW50aW1lKGxhYmVsc0FuZElkc1J1bnRpbWVfLmdldElkKHJ1bnRpbWVfLmdldFNlbGVjdGlvbkluZGV4KCkpKTsKLQkJc2V0U2NlbmFyaW9MYWJlbHMobGFiZWxzQW5kSWRzU2NlbmFyaW9fLmdldExhYmVscygpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlU2NlbmFyaW9TZWxlY3RlZCgpewotCQkKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGluaWF0aWFsaXplKCl7Ci0JCWFudEV4dENfID0gQW50RXh0ZW5zaW9uQ3JlYXRpb24uZ2V0SW5zdGFuY2UoKTsKLQkJbGFiZWxzQW5kSWRzUnVudGltZV8gPSBhbnRFeHRDXy5nZXRSdW50aW1lTGFiZWxzQW5kSWRzKCk7Ci0JCXNldFJ1bnRpbWVMYWJlbHMobGFiZWxzQW5kSWRzUnVudGltZV8uZ2V0TGFiZWxzKCkpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNjZW5hcmlvKCl7Ci0JCXJldHVybiBsYWJlbHNBbmRJZHNTY2VuYXJpb18uZ2V0SWQoc2NlbmFyaW9fLmdldFNlbGVjdGlvbkluZGV4KCkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0U2VsZWN0aW9uKENvbWJvIGNvbWJvLCBTdHJpbmcgcykKLQl7Ci0JCVN0cmluZ1tdIGl0ZW1zID0gY29tYm8uZ2V0SXRlbXMoKTsKLQkJZm9yIChpbnQgaT0wOyBpPGl0ZW1zLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoaXRlbXNbaV0uZXF1YWxzKHMpKQotCQkJewotCQkJCWNvbWJvLnNlbGVjdChpKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFJ1bnRpbWVMYWJlbHMoU3RyaW5nW10gcnVudGltZUxhYmVscykKLQl7Ci0JCXJ1bnRpbWVfLnNldEl0ZW1zKHJ1bnRpbWVMYWJlbHMpOwotCSAgICAvL3VudGlsIHRoZSBwcmVmZXJlbmNlcyBhcmUgc2V0IHVwCi0JCXNldFNlbGVjdGlvbihydW50aW1lXyxydW50aW1lTGFiZWxzWzBdKTsKLQkJcnVudGltZUlkeF8gPSAwOwotCQlsYWJlbHNBbmRJZHNTY2VuYXJpb18gPSBhbnRFeHRDXy5nZXRTY2VuYXJpb0xhYmVsc0J5UnVudGltZShsYWJlbHNBbmRJZHNSdW50aW1lXy5nZXRJZCgwKSk7Ci0JCXNldFNjZW5hcmlvTGFiZWxzKGxhYmVsc0FuZElkc1NjZW5hcmlvXy5nZXRMYWJlbHMoKSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRTY2VuYXJpb0xhYmVscyhTdHJpbmdbXSBzY2VuYXJpb0xhYmVscykKLQl7Ci0JCXNjZW5hcmlvXy5zZXRJdGVtcyhzY2VuYXJpb0xhYmVscyk7Ci0JICAgIC8vdW50aWwgdGhlIHByZWZlcmVuY2VzIGFyZSBzZXQgdXAKLQkJc2V0U2VsZWN0aW9uKHNjZW5hcmlvXyxzY2VuYXJpb0xhYmVsc1swXSk7Ci0JCQotCX0KLQkKLX0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0Vycm9yRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9FcnJvckRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmQxYzExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0Vycm9yRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLQotCi0vKioKLSAqIEEgZGlhbG9nIHRvIGRpc3BsYXkgb25lIG9yIG1vcmUgZXJyb3JzIHRvIHRoZSB1c2VyLCBhcyBjb250YWluZWQgaW4gYW4KLSAqIDxjb2RlPlN0YXR1czwvY29kZT4gb2JqZWN0LiBJZiBhbiBlcnJvciBjb250YWlucyBhZGRpdGlvbmFsIGRldGFpbGVkCi0gKiBpbmZvcm1hdGlvbiB0aGVuIGEgRGV0YWlscyBidXR0b24gaXMgYXV0b21hdGljYWxseSBzdXBwbGllZCwgd2hpY2ggc2hvd3Mgb3IKLSAqIGhpZGVzIGFuIGVycm9yIGRldGFpbHMgdmlld2VyIHdoZW4gcHJlc3NlZCBieSB0aGUgdXNlci4KLSAqICAKLSAqLwotcHVibGljIGNsYXNzIEVycm9yRGlhbG9nIGV4dGVuZHMgTWVzc2FnZURpYWxvZwotewotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGVycm9yIGRpYWxvZy4gTm90ZSB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIG5vIHZpc3VhbAotICAgKiByZXByZXNlbnRhdGlvbiAobm8gd2lkZ2V0cykgdW50aWwgaXQgaXMgdG9sZCB0byBvcGVuLgotICAgKiA8cD4KLSAgICogTm9ybWFsbHkgb25lIHNob3VsZCB1c2UgPGNvZGU+b3BlbkVycm9yPC9jb2RlPiB0byBjcmVhdGUgYW5kIG9wZW4gb25lIG9mCi0gICAqIHRoZXNlLiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWZ1bCBvbmx5IGlmIHRoZSBlcnJvciBvYmplY3QgYmVpbmcgZGlzcGxheWVkCi0gICAqIGNvbnRhaW5zIGNoaWxkIGl0ZW1zIDxpdD5hbmQ8L2l0PiB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgbWFzayB3aGljaCB3aWxsCi0gICAqIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIHRoZXNlIGNoaWxkcmVuLgotICAgKiA8L3A+Ci0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50U2hlbGwKLSAgICogICAgICAgICAgICB0aGUgc2hlbGwgdW5kZXIgd2hpY2ggdG8gY3JlYXRlIHRoaXMgZGlhbG9nCi0gICAqIEBwYXJhbSBkaWFsb2dUaXRsZQotICAgKiAgICAgICAgICAgIHRoZSB0aXRsZSB0byB1c2UgZm9yIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGRlZmF1bHQgdGl0bGUgc2hvdWxkIGJlIHVzZWQKLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogICAgICAgICAgICB0aGUgbWVzc2FnZSB0byBzaG93IGluIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGVycm9yJ3MgbWVzc2FnZSBzaG91bGQgYmUgc2hvd24gYXMgdGhlCi0gICAqICAgICAgICAgICAgcHJpbWFyeSBtZXNzYWdlCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogICAgICAgICAgICB0aGUgZXJyb3IgdG8gc2hvdyB0byB0aGUgdXNlcgotICAgKiBAcGFyYW0gZGlzcGxheU1hc2sKLSAgICogICAgICAgICAgICB0aGUgbWFzayB0byB1c2UgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIGNoaWxkIGl0ZW1zLCBhcyBwZXIKLSAgICogICAgICAgICAgICA8Y29kZT5TdGF0dXMubWF0Y2hlczwvY29kZT4KLSAgICovCi0gIHB1YmxpYyBFcnJvckRpYWxvZygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgZGlhbG9nVGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrKQotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwsIGRpYWxvZ1RpdGxlLCBtZXNzYWdlLCBzdGF0dXMsIGRpc3BsYXlNYXNrKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykgVGhpcyBzaG91bGQgYWxzbyBiZSBvdmVyd3JpdHRlbiBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIE9LIGFuZCBEZXRhaWxzIGJ1dHRvbnMKLSAgICBjcmVhdGVCdXR0b24oCi0gICAgICBwYXJlbnQsCi0gICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuT0tfSUQsCi0gICAgICBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotICAgICAgdHJ1ZSk7Ci0gICAgaWYgKHN0YXR1cy5pc011bHRpU3RhdHVzKCkgfHwgc3RhdHVzLmdldEV4Y2VwdGlvbigpICE9IG51bGwgKQotICAgIHsKLSAgICAgIGRldGFpbHNCdXR0b24gPQotICAgICAgICBjcmVhdGVCdXR0b24oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lELAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMLAotICAgICAgICAgIGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgZmV3IG1ldGhvZHMgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUKLSAgICogc3ViY2xhc3Nlcy4gVGhlIGltYWdlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgRGlhbG9nIGNsYXNzCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2UgZ2V0RGlhbG9nSW1hZ2UoKQotICB7Ci0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUltYWdlKFNXVC5JQ09OX0VSUk9SKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9JbmZvRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9JbmZvRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMDdkYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvSW5mb0RpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLQotLyoqCi0gKiBBIGRpYWxvZyB0byBkaXNwbGF5IG9uZSBvciBtb3JlIGVycm9ycyB0byB0aGUgdXNlciwgYXMgY29udGFpbmVkIGluIGFuCi0gKiA8Y29kZT5TdGF0dXM8L2NvZGU+IG9iamVjdC4gSWYgYW4gZXJyb3IgY29udGFpbnMgYWRkaXRpb25hbCBkZXRhaWxlZAotICogaW5mb3JtYXRpb24gdGhlbiBhIERldGFpbHMgYnV0dG9uIGlzIGF1dG9tYXRpY2FsbHkgc3VwcGxpZWQsIHdoaWNoIHNob3dzIG9yCi0gKiBoaWRlcyBhbiBlcnJvciBkZXRhaWxzIHZpZXdlciB3aGVuIHByZXNzZWQgYnkgdGhlIHVzZXIuCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmZvRGlhbG9nIGV4dGVuZHMgTWVzc2FnZURpYWxvZwotewotICAvKioKLSAgICogQ3JlYXRlcyBhbiBlcnJvciBkaWFsb2cuIE5vdGUgdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSBubyB2aXN1YWwKLSAgICogcmVwcmVzZW50YXRpb24gKG5vIHdpZGdldHMpIHVudGlsIGl0IGlzIHRvbGQgdG8gb3Blbi4KLSAgICogPHA+Ci0gICAqIE5vcm1hbGx5IG9uZSBzaG91bGQgdXNlIDxjb2RlPm9wZW5FcnJvcjwvY29kZT4gdG8gY3JlYXRlIGFuZCBvcGVuIG9uZSBvZgotICAgKiB0aGVzZS4gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VmdWwgb25seSBpZiB0aGUgZXJyb3Igb2JqZWN0IGJlaW5nIGRpc3BsYXllZAotICAgKiBjb250YWlucyBjaGlsZCBpdGVtcyA8aXQ+YW5kPC9pdD4geW91IG5lZWQgdG8gc3BlY2lmeSBhIG1hc2sgd2hpY2ggd2lsbAotICAgKiBiZSB1c2VkIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiB0aGVzZSBjaGlsZHJlbi4KLSAgICogPC9wPgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudFNoZWxsCi0gICAqICAgICAgICAgICAgdGhlIHNoZWxsIHVuZGVyIHdoaWNoIHRvIGNyZWF0ZSB0aGlzIGRpYWxvZwotICAgKiBAcGFyYW0gZGlhbG9nVGl0bGUKLSAgICogICAgICAgICAgICB0aGUgdGl0bGUgdG8gdXNlIGZvciB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBkZWZhdWx0IHRpdGxlIHNob3VsZCBiZSB1c2VkCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBlcnJvcidzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duIGFzIHRoZQotICAgKiAgICAgICAgICAgIHByaW1hcnkgbWVzc2FnZQotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqICAgICAgICAgICAgdGhlIGVycm9yIHRvIHNob3cgdG8gdGhlIHVzZXIKLSAgICogQHBhcmFtIGRpc3BsYXlNYXNrCi0gICAqICAgICAgICAgICAgdGhlIG1hc2sgdG8gdXNlIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiBjaGlsZCBpdGVtcywgYXMgcGVyCi0gICAqICAgICAgICAgICAgPGNvZGU+U3RhdHVzLm1hdGNoZXM8L2NvZGU+Ci0gICAqLwotICBwdWJsaWMgSW5mb0RpYWxvZygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgZGlhbG9nVGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrKQotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwsIGRpYWxvZ1RpdGxlLCBtZXNzYWdlLCBzdGF0dXMsIGRpc3BsYXlNYXNrKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykgVGhpcyBzaG91bGQgYWxzbyBiZSBvdmVyd3JpdHRlbiBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIE9LIGFuZCBEZXRhaWxzIGJ1dHRvbnMKLSAgICBjcmVhdGVCdXR0b24oCi0gICAgICBwYXJlbnQsCi0gICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuT0tfSUQsCi0gICAgICBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotICAgICAgdHJ1ZSk7Ci0gICAgaWYgKHN0YXR1cy5pc011bHRpU3RhdHVzKCkgKQotICAgIHsKLSAgICAgIGRldGFpbHNCdXR0b24gPQotICAgICAgICBjcmVhdGVCdXR0b24oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lELAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMLAotICAgICAgICAgIGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgZmV3IG1ldGhvZHMgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUKLSAgICogc3ViY2xhc3Nlcy4gVGhlIGltYWdlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgRGlhbG9nIGNsYXNzCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2UgZ2V0RGlhbG9nSW1hZ2UoKQotICB7Ci0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUltYWdlKFNXVC5JQ09OX0lORk9STUFUSU9OKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9NZXNzYWdlRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9NZXNzYWdlRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYWY3MjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvTWVzc2FnZURpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwNCAgIDEyODk4NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotCi0KLS8qKgotICogQSBkaWFsb2cgdG8gZGlzcGxheSBvbmUgb3IgbW9yZSBlcnJvcnMgdG8gdGhlIHVzZXIsIGFzIGNvbnRhaW5lZCBpbiBhbgotICogPGNvZGU+U3RhdHVzPC9jb2RlPiBvYmplY3QuIElmIGFuIGVycm9yIGNvbnRhaW5zIGFkZGl0aW9uYWwgZGV0YWlsZWQKLSAqIGluZm9ybWF0aW9uIHRoZW4gYSBEZXRhaWxzIGJ1dHRvbiBpcyBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkLCB3aGljaCBzaG93cyBvcgotICogaGlkZXMgYW4gZXJyb3IgZGV0YWlscyB2aWV3ZXIgd2hlbiBwcmVzc2VkIGJ5IHRoZSB1c2VyLgotICogIAotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZURpYWxvZyBleHRlbmRzIERpYWxvZwotewotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIHBhcmVudDsKLQotICAvKioKLSAgICogUmVzZXJ2ZSByb29tIGZvciB0aGlzIG1hbnkgbGlzdCBpdGVtcy4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IExJU1RfSVRFTV9DT1VOVCA9IDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBEZXRhaWxzIGJ1dHRvbi4KLSAgICovCi0gIHByb3RlY3RlZCBCdXR0b24gZGV0YWlsc0J1dHRvbjsKLQotICAvKioKLSAgICogVGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHRpdGxlOwotCi0gIC8qKgotICAgKiBUaGUgbWVzc2FnZSB0byBkaXNwbGF5LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBtZXNzYWdlOwotCi0gIC8qKgotICAgKiBUaGUgU1dUIGxpc3QgY29udHJvbCB0aGF0IGRpc3BsYXlzIHRoZSBlcnJvciBkZXRhaWxzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgbGlzdDsKLSAgcHJvdGVjdGVkIFRleHQgZGV0YWlsczsKLQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVycm9yIGRldGFpbHMgdmlld2VyIGlzIGN1cnJlbnRseSBjcmVhdGVkLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gbGlzdENyZWF0ZWQgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gZGV0YWlsc0NyZWF0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogRmlsdGVyIG1hc2sgZm9yIGRldGVybWluaW5nIHdoaWNoIHN0YXR1cyBpdGVtcyB0byBkaXNwbGF5LgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBkaXNwbGF5TWFzayA9IDB4RkZGRjsKLQotICAvKioKLSAgICogVGhlIG1haW4gc3RhdHVzIG9iamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBJU3RhdHVzIHN0YXR1czsKLSAgCi0gIHByaXZhdGUgUG9pbnQgc2F2ZWRTaXplID0gbnVsbDsKLQotICAvKioKLSAgICogTGlzdCBvZiB0aGUgbWFpbiBlcnJvciBvYmplY3QncyBkZXRhaWxlZCBlcnJvcnMgKGVsZW1lbnQgdHlwZTogPGNvZGU+U3RhdHVzPC9jb2RlPikuCi0gICAqLwotICBwcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Qgc3RhdHVzTGlzdDsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gZXJyb3IgZGlhbG9nLiBOb3RlIHRoYXQgdGhlIGRpYWxvZyB3aWxsIGhhdmUgbm8gdmlzdWFsCi0gICAqIHJlcHJlc2VudGF0aW9uIChubyB3aWRnZXRzKSB1bnRpbCBpdCBpcyB0b2xkIHRvIG9wZW4uCi0gICAqIDxwPgotICAgKiBOb3JtYWxseSBvbmUgc2hvdWxkIHVzZSA8Y29kZT5vcGVuRXJyb3I8L2NvZGU+IHRvIGNyZWF0ZSBhbmQgb3BlbiBvbmUgb2YKLSAgICogdGhlc2UuIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZnVsIG9ubHkgaWYgdGhlIGVycm9yIG9iamVjdCBiZWluZyBkaXNwbGF5ZWQKLSAgICogY29udGFpbnMgY2hpbGQgaXRlbXMgPGl0PmFuZDwvaXQ+IHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBtYXNrIHdoaWNoIHdpbGwKLSAgICogYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgdGhlc2UgY2hpbGRyZW4uCi0gICAqIDwvcD4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRTaGVsbAotICAgKiAgICAgICAgICAgIHRoZSBzaGVsbCB1bmRlciB3aGljaCB0byBjcmVhdGUgdGhpcyBkaWFsb2cKLSAgICogQHBhcmFtIGRpYWxvZ1RpdGxlCi0gICAqICAgICAgICAgICAgdGhlIHRpdGxlIHRvIHVzZSBmb3IgdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZGVmYXVsdCB0aXRsZSBzaG91bGQgYmUgdXNlZAotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIHNob3cgaW4gdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZXJyb3IncyBtZXNzYWdlIHNob3VsZCBiZSBzaG93biBhcyB0aGUKLSAgICogICAgICAgICAgICBwcmltYXJ5IG1lc3NhZ2UKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKiAgICAgICAgICAgIHRoZSBlcnJvciB0byBzaG93IHRvIHRoZSB1c2VyCi0gICAqIEBwYXJhbSBkaXNwbGF5TWFzawotICAgKiAgICAgICAgICAgIHRoZSBtYXNrIHRvIHVzZSB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgY2hpbGQgaXRlbXMsIGFzIHBlcgotICAgKiAgICAgICAgICAgIDxjb2RlPlN0YXR1cy5tYXRjaGVzPC9jb2RlPgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VEaWFsb2coCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIGRpYWxvZ1RpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaykKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsKTsKLSAgICAgIHRoaXMudGl0bGUgPSBkaWFsb2dUaXRsZSA9PSBudWxsID8gSkZhY2VSZXNvdXJjZXMuZ2V0U3RyaW5nKCJQcm9ibGVtX09jY3VycmVkIikgOiAvLyROT04tTkxTLTEkCi0gIGRpYWxvZ1RpdGxlOwotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgPT0gbnVsbCA/IHN0YXR1cy5nZXRNZXNzYWdlKCkgOiBKRmFjZVJlc291cmNlcy5mb3JtYXQoIlJlYXNvbiIsIG5ldyBPYmplY3RbXSB7IG1lc3NhZ2UsIHN0YXR1cy5nZXRNZXNzYWdlKCl9KTsgLy8kTk9OLU5MUy0xJAotICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwotICAgIHN0YXR1c0xpc3QgPSBBcnJheXMuYXNMaXN0KHN0YXR1cy5nZXRDaGlsZHJlbigpKTsKLSAgICB0aGlzLmRpc3BsYXlNYXNrID0gZGlzcGxheU1hc2s7Ci0gICAgc2V0U2hlbGxTdHlsZShTV1QuRElBTE9HX1RSSU0gfCBTV1QuUkVTSVpFIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKLSAgfQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuIEhhbmRsZXMgdGhlIHByZXNzaW5nIG9mIHRoZSBPayBvcgotICAgKiBEZXRhaWxzIGJ1dHRvbiBpbiB0aGlzIGRpYWxvZy4gSWYgdGhlIE9rIGJ1dHRvbiB3YXMgcHJlc3NlZCB0aGVuIGNsb3NlCi0gICAqIHRoaXMgZGlhbG9nLiBJZiB0aGUgRGV0YWlscyBidXR0b24gd2FzIHByZXNzZWQgdGhlbiB0b2dnbGUgdGhlIGRpc3BsYXlpbmcKLSAgICogb2YgdGhlIGVycm9yIGRldGFpbHMgYXJlYS4gTm90ZSB0aGF0IHRoZSBEZXRhaWxzIGJ1dHRvbiB3aWxsIG9ubHkgYmUKLSAgICogdmlzaWJsZSBpZiB0aGUgZXJyb3IgYmVpbmcgZGlzcGxheWVkIHNwZWNpZmllcyBjaGlsZCBkZXRhaWxzLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYnV0dG9uUHJlc3NlZChpbnQgaWQpCi0gIHsKLSAgICBpZiAoaWQgPT0gU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkRFVEFJTFNfSUQpCi0gICAgeyAvLyB3YXMgdGhlIGRldGFpbHMgYnV0dG9uIHByZXNzZWQ/Ci0gICAgICB0b2dnbGVEZXRhaWxzQXJlYSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc3VwZXIuYnV0dG9uUHJlc3NlZChpZCk7Ci0gICAgfQotICB9Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykgTWV0aG9kIGRlY2xhcmVkIGluIFdpbmRvdy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIHNoZWxsKQotICB7Ci0gICAgc3VwZXIuY29uZmlndXJlU2hlbGwoc2hlbGwpOwotICAgIHNoZWxsLnNldFRleHQodGl0bGUpOwotICB9Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykgVGhpcyBzaG91bGQgYWxzbyBiZSBvdmVyd3JpdHRlbiBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIE9LIGFuZCBEZXRhaWxzIGJ1dHRvbnMKLSAgICBjcmVhdGVCdXR0b24oCi0gICAgICBwYXJlbnQsCi0gICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuT0tfSUQsCi0gICAgICBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotICAgICAgdHJ1ZSk7Ci0gICAgaWYgKHN0YXR1cy5pc011bHRpU3RhdHVzKCkgfHwgc3RhdHVzLmdldEV4Y2VwdGlvbigpICE9IG51bGwgKQotICAgIHsKLSAgICAgIGRldGFpbHNCdXR0b24gPQotICAgICAgICBjcmVhdGVCdXR0b24oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lELAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMLAotICAgICAgICAgIGZhbHNlKTsKLSAgICB9Ci0gICAgCi0gICAgcGFyZW50LnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkpOwotICB9Ci0KLSAgLyoKLSAgICogVGhpcyBpcyBvbmUgb2YgdGhlIGZldyBtZXRob2RzIHRoYXQgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlCi0gICAqIHN1YmNsYXNzZXMuIFRoZSBpbWFnZSBuYW1lcyBjYW4gYmUgZm91bmQgaW4gdGhlIERpYWxvZyBjbGFzcwotICAgKi8KLSAgcHJvdGVjdGVkIEltYWdlIGdldERpYWxvZ0ltYWdlKCkKLSAgewotICAgIC8vIGNyZWF0ZSBpbWFnZQotICAgIHJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9JTkZPUk1BVElPTik7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIGNvbnRlbnRzCi0gICAqIG9mIHRoZSB1cHBlciBwYXJ0IG9mIHRoZSBkaWFsb2cgKGFib3ZlIHRoZSBidXR0b24gYmFyKS4KLSAgICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIHRoaXMucGFyZW50ID0gcGFyZW50OwotCi0gICAgLy8gY3JlYXRlIGNvbXBvc2l0ZQotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgQ29tcG9zaXRlIGltYWdlQW5kTGFiZWwgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgIGltYWdlQW5kTGFiZWwuc2V0TGF5b3V0KGdsKTsKLSAgICBpbWFnZUFuZExhYmVsLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSk7Ci0gICAgCi0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgSW1hZ2UgaW1hZ2UgPSBnZXREaWFsb2dJbWFnZSgpOwotICAgIGlmIChpbWFnZSAhPSBudWxsKQotICAgIHsKLSAgICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGltYWdlQW5kTGFiZWwsIDApOwotICAgICAgaW1hZ2Uuc2V0QmFja2dyb3VuZChsYWJlbC5nZXRCYWNrZ3JvdW5kKCkpOwotICAgICAgbGFiZWwuc2V0SW1hZ2UoaW1hZ2UpOwotICAgICAgbGFiZWwuc2V0TGF5b3V0RGF0YSgKLSAgICAgICAgbmV3IEdyaWREYXRhKAotICAgICAgICAgIEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQ0VOVEVSCi0gICAgICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORykpOwotICAgIH0KLQotICAgIC8vIGNyZWF0ZSBtZXNzYWdlCi0gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBUZXh0IHRleHQgPSBuZXcgVGV4dChpbWFnZUFuZExhYmVsLCBTV1QuUkVBRF9PTkxZfFNXVC5XUkFQKTsKLSAgICAgIHRleHQuc2V0VGV4dChtZXNzYWdlKTsKLSAgICAgIEdyaWREYXRhIGRhdGEgPQotICAgICAgICBuZXcgR3JpZERhdGEoCi0gICAgICAgICAgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMCi0gICAgICAgICAgICB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwKLSAgICAgICAgICAgIHwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMCi0gICAgICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0NFTlRFUik7Ci0gICAgICBkYXRhLndpZHRoSGludCA9Ci0gICAgICAgIGNvbnZlcnRIb3Jpem9udGFsRExVc1RvUGl4ZWxzKAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuTUlOSU1VTV9NRVNTQUdFX0FSRUFfV0lEVEgpOwotICAgICAKLSAgICAgIHRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAgIHRleHQuc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29tcG9zaXRlOwotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgY3JlYXRlRHJvcERvd25MaXN0KENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBjcmVhdGUgdGhlIGxpc3QKLSAgICBsaXN0ID0gbmV3IExpc3QocGFyZW50LCBTV1QuQk9SREVSIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLQotICAgIC8vIGZpbGwgdGhlIGxpc3QKLSAgICBwb3B1bGF0ZUxpc3QobGlzdCk7Ci0KLSAgICBHcmlkRGF0YSBkYXRhID0KLSAgICAgIG5ldyBHcmlkRGF0YSgKLSAgICAgICAgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMCi0gICAgICAgICAgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwKLSAgICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwKLSAgICAgICAgICB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIGRhdGEuaGVpZ2h0SGludCA9IGxpc3QuZ2V0SXRlbUhlaWdodCgpICogTElTVF9JVEVNX0NPVU5UOwotICAgIGxpc3Quc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBsaXN0Q3JlYXRlZCA9IHRydWU7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLSAgcHJvdGVjdGVkIFRleHQgY3JlYXRlRHJvcERvd25EZXRhaWxzKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBkZXRhaWxzID0gbmV3IFRleHQocGFyZW50LCBTV1QuQk9SREVSIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMIHwgU1dULlJFQURfT05MWSB8IFNXVC5XUkFQICk7Ci0gICAgLy9kZXRhaWxzLnNldEVkaXRhYmxlKGZhbHNlKTsKLSAgICBDb2xvciBjb2xvciA9IHBhcmVudC5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvciggU1dULkNPTE9SX1dISVRFICk7Ci0gICAgZGV0YWlscy5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLSAgICBwb3B1bGF0ZURldGFpbHMoZGV0YWlscywgc3RhdHVzLCAwKTsKLSAgICBHcmlkRGF0YSBkYXRhID0KLSAgICAgIG5ldyBHcmlkRGF0YSgKLSAgICAgICAgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMCi0gICAgICAgICAgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwKLSAgICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwKLSAgICAgICAgICB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIAotICAgIGRldGFpbHMuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBkZXRhaWxzLnNldFNlbGVjdGlvbigwKTsKLSAgICBkZXRhaWxzQ3JlYXRlZCA9IHRydWU7Ci0gICAgcmV0dXJuIGRldGFpbHM7Ci0gIH0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSBNZXRob2QgZGVjbGFyZWQgb24gV2luZG93LgotICAgKi8KLSAgLyoqCi0gICAqIEV4dGVuZHMgPGNvZGU+V2luZG93Lm9wZW4oKTwvY29kZT4uIE9wZW5zIGFuIGVycm9yIGRpYWxvZyB0byBkaXNwbGF5Ci0gICAqIHRoZSBlcnJvci4gSWYgeW91IHNwZWNpZmllZCBhIG1hc2sgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIHRoZXNlCi0gICAqIGNoaWxkcmVuLCB0aGUgZXJyb3IgZGlhbG9nIHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lCi0gICAqIGNoaWxkIHN0YXR1cyBtYXRjaGluZyB0aGUgbWFzay4KLSAgICovCi0gIHB1YmxpYyBpbnQgb3BlbigpCi0gIHsKLSAgICBpZiAoc2hvdWxkRGlzcGxheShzdGF0dXMsIGRpc3BsYXlNYXNrKSkKLSAgICB7Ci0gICAgICByZXR1cm4gc3VwZXIub3BlbigpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLSAgfQotICAvKioKLSAgICogVGhpcyBlc3NlbnRpYWxseSBkb2VzIHRoZSB3b3JrIG9mIGEgZmFjdG9yeSBPcGVucyBhbiBlcnJvciBkaWFsb2cgdG8KLSAgICogZGlzcGxheSB0aGUgZ2l2ZW4gZXJyb3IuIFVzZSB0aGlzIG1ldGhvZCBpZiB0aGUgZXJyb3Igb2JqZWN0IGJlaW5nCi0gICAqIGRpc3BsYXllZCBkb2VzIG5vdCBjb250YWluIGNoaWxkIGl0ZW1zLCBvciBpZiB5b3Ugd2lzaCB0byBkaXNwbGF5IGFsbCBzdWNoCi0gICAqIGl0ZW1zIHdpdGhvdXQgZmlsdGVyaW5nLgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudAotICAgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgc2hlbGwgb2YgdGhlIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm9uZQotICAgKiBAcGFyYW0gZGlhbG9nVGl0bGUKLSAgICogICAgICAgICAgICB0aGUgdGl0bGUgdG8gdXNlIGZvciB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBkZWZhdWx0IHRpdGxlIHNob3VsZCBiZSB1c2VkCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBlcnJvcidzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duIGFzIHRoZQotICAgKiAgICAgICAgICAgIHByaW1hcnkgbWVzc2FnZQotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqICAgICAgICAgICAgdGhlIGVycm9yIHRvIHNob3cgdG8gdGhlIHVzZXIKLSAgICogQHJldHVybiB0aGUgY29kZSBvZiB0aGUgYnV0dG9uIHRoYXQgd2FzIHByZXNzZWQgdGhhdCByZXN1bHRlZCBpbiB0aGlzCi0gICAqICAgICAgICAgZGlhbG9nIGNsb3NpbmcuIFRoaXMgd2lsbCBiZSA8Y29kZT5EaWFsb2cuT0s8L2NvZGU+IGlmIHRoZSBPSwotICAgKiAgICAgICAgIGJ1dHRvbiB3YXMgcHJlc3NlZCwgb3IgPGNvZGU+RGlhbG9nLkNBTkNFTDwvY29kZT4gaWYgdGhpcwotICAgKiAgICAgICAgIGRpYWxvZydzIGNsb3NlIHdpbmRvdyBkZWNvcmF0aW9uIG9yIHRoZSBFU0Mga2V5IHdhcyB1c2VkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgb3Blbk1lc3NhZ2UoCi0gICAgU2hlbGwgcGFyZW50LAotICAgIFN0cmluZyBkaWFsb2dUaXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cykKLSAgewotCi0gICAgc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkKLSAgICB7Ci0gICAgICBjYXNlIElTdGF0dXMuSU5GTyA6Ci0gICAgICAgIHJldHVybiBvcGVuSW5mbygKLSAgICAgICAgICBwYXJlbnQsCi0gICAgICAgICAgZGlhbG9nVGl0bGUsCi0gICAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgICBzdGF0dXMsCi0gICAgICAgICAgSVN0YXR1cy5PSyB8IElTdGF0dXMuSU5GTyB8IElTdGF0dXMuV0FSTklORyB8IElTdGF0dXMuRVJST1IpOwotICAgICAgY2FzZSBJU3RhdHVzLldBUk5JTkcgOgotICAgICAgICByZXR1cm4gb3Blbldhcm5pbmcoCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIGRpYWxvZ1RpdGxlLAotICAgICAgICAgIG1lc3NhZ2UsCi0gICAgICAgICAgc3RhdHVzLAotICAgICAgICAgIElTdGF0dXMuT0sgfCBJU3RhdHVzLklORk8gfCBJU3RhdHVzLldBUk5JTkcgfCBJU3RhdHVzLkVSUk9SKTsKLSAgICAgIGRlZmF1bHQgOgotICAgICAgICByZXR1cm4gb3BlbkVycm9yKAotICAgICAgICAgIHBhcmVudCwKLSAgICAgICAgICBkaWFsb2dUaXRsZSwKLSAgICAgICAgICBtZXNzYWdlLAotICAgICAgICAgIHN0YXR1cywKLSAgICAgICAgICBJU3RhdHVzLk9LIHwgSVN0YXR1cy5JTkZPIHwgSVN0YXR1cy5XQVJOSU5HIHwgSVN0YXR1cy5FUlJPUik7Ci0gICAgfQotCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIGludCBvcGVuTWVzc2FnZSgKLSAgICBTaGVsbCBwYXJlbnQsCi0gICAgU3RyaW5nIGRpYWxvZ1RpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIENob2ljZVtdIG9wdGlvbnMpCi0gIHsKLQotICAgIHJldHVybiBvcGVuT3B0aW9ucygKLSAgICAgIHBhcmVudCwKLSAgICAgIGRpYWxvZ1RpdGxlLAotICAgICAgbWVzc2FnZSwKLSAgICAgIHN0YXR1cywKLSAgICAgIElTdGF0dXMuT0sgfCBJU3RhdHVzLklORk8gfCBJU3RhdHVzLldBUk5JTkcgfCBJU3RhdHVzLkVSUk9SLAotICAgICAgb3B0aW9ucyk7Ci0gIH0KLQotICAvKioKLSAgICogT3BlbnMgYW4gZXJyb3IgZGlhbG9nIHRvIGRpc3BsYXkgdGhlIGdpdmVuIGVycm9yLiBVc2UgdGhpcyBtZXRob2QgaWYgdGhlCi0gICAqIGVycm9yIG9iamVjdCBiZWluZyBkaXNwbGF5ZWQgY29udGFpbnMgY2hpbGQgaXRlbXMgPGl0PmFuZDwvaXQ+IHlvdSB3aXNoCi0gICAqIHRvIHNwZWNpZnkgYSBtYXNrIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgdGhlc2UKLSAgICogY2hpbGRyZW4uIFRoZSBlcnJvciBkaWFsb2cgd2lsbCBvbmx5IGJlIGRpc3BsYXllZCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUKLSAgICogY2hpbGQgc3RhdHVzIG1hdGNoaW5nIHRoZSBtYXNrLgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudFNoZWxsCi0gICAqICAgICAgICAgICAgdGhlIHBhcmVudCBzaGVsbCBvZiB0aGUgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lCi0gICAqIEBwYXJhbSBkaWFsb2dUaXRsZQotICAgKiAgICAgICAgICAgIHRoZSB0aXRsZSB0byB1c2UgZm9yIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGRlZmF1bHQgdGl0bGUgc2hvdWxkIGJlIHVzZWQKLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogICAgICAgICAgICB0aGUgbWVzc2FnZSB0byBzaG93IGluIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGVycm9yJ3MgbWVzc2FnZSBzaG91bGQgYmUgc2hvd24gYXMgdGhlCi0gICAqICAgICAgICAgICAgcHJpbWFyeSBtZXNzYWdlCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogICAgICAgICAgICB0aGUgZXJyb3IgdG8gc2hvdyB0byB0aGUgdXNlcgotICAgKiBAcGFyYW0gZGlzcGxheU1hc2sKLSAgICogICAgICAgICAgICB0aGUgbWFzayB0byB1c2UgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIGNoaWxkIGl0ZW1zLCBhcyBwZXIKLSAgICogICAgICAgICAgICA8Y29kZT5TdGF0dXMubWF0Y2hlczwvY29kZT4KLSAgICogQHJldHVybiB0aGUgY29kZSBvZiB0aGUgYnV0dG9uIHRoYXQgd2FzIHByZXNzZWQgdGhhdCByZXN1bHRlZCBpbiB0aGlzCi0gICAqICAgICAgICAgZGlhbG9nIGNsb3NpbmcuIFRoaXMgd2lsbCBiZSA8Y29kZT5EaWFsb2cuT0s8L2NvZGU+IGlmIHRoZSBPSwotICAgKiAgICAgICAgIGJ1dHRvbiB3YXMgcHJlc3NlZCwgb3IgPGNvZGU+RGlhbG9nLkNBTkNFTDwvY29kZT4gaWYgdGhpcwotICAgKiAgICAgICAgIGRpYWxvZydzIGNsb3NlIHdpbmRvdyBkZWNvcmF0aW9uIG9yIHRoZSBFU0Mga2V5IHdhcyB1c2VkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgb3BlbkVycm9yKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyB0aXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2spCi0gIHsKLSAgICBFcnJvckRpYWxvZyBkaWFsb2cgPQotICAgICAgbmV3IEVycm9yRGlhbG9nKHBhcmVudFNoZWxsLCB0aXRsZSwgbWVzc2FnZSwgc3RhdHVzLCBkaXNwbGF5TWFzayk7Ci0gICAgcmV0dXJuIGRpYWxvZy5vcGVuKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGludCBvcGVuSW5mbygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgdGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrKQotICB7Ci0gICAgSW5mb0RpYWxvZyBkaWFsb2cgPQotICAgICAgbmV3IEluZm9EaWFsb2cocGFyZW50U2hlbGwsIHRpdGxlLCBtZXNzYWdlLCBzdGF0dXMsIGRpc3BsYXlNYXNrKTsKLSAgICByZXR1cm4gZGlhbG9nLm9wZW4oKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgaW50IG9wZW5XYXJuaW5nKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyB0aXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2spCi0gIHsKLSAgICBXYXJuaW5nRGlhbG9nIGRpYWxvZyA9Ci0gICAgICBuZXcgV2FybmluZ0RpYWxvZyhwYXJlbnRTaGVsbCwgdGl0bGUsIG1lc3NhZ2UsIHN0YXR1cywgZGlzcGxheU1hc2spOwotICAgIHJldHVybiBkaWFsb2cub3BlbigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBpbnQgb3Blbk9wdGlvbnMoCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIHRpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaywKLSAgICBDaG9pY2VbXSBvcHRpb25zKQotICB7Ci0gICAgT3B0aW9uc0RpYWxvZyBkaWFsb2cgPQotICAgICAgbmV3IE9wdGlvbnNEaWFsb2coCi0gICAgICAgIHBhcmVudFNoZWxsLAotICAgICAgICB0aXRsZSwKLSAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgc3RhdHVzLAotICAgICAgICBkaXNwbGF5TWFzaywKLSAgICAgICAgb3B0aW9ucyk7Ci0gICAgZGlhbG9nLm9wZW4oKTsKLSAgICByZXR1cm4gZGlhbG9nLmdldFJldHVybkNvZGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQb3B1bGF0ZXMgdGhlIGxpc3QgdXNpbmcgdGhpcyBlcnJvciBkaWFsb2cncyBzdGF0dXMgb2JqZWN0LiBUaGlzIHdhbGtzIHRoZQotICAgKiBjaGlsZCBzdGF0aSBvZiB0aGUgc3RhdHVzIG9iamVjdCBhbmQgZGlzcGxheXMgdGhlbSBpbiBhIGxpc3QuIFRoZSBmb3JtYXQKLSAgICogZm9yIGVhY2ggZW50cnkgaXMgc3RhdHVzX3BhdGggOiBzdGF0dXNfbWVzc2FnZSBJZiB0aGUgc3RhdHVzJ3MgcGF0aCB3YXMKLSAgICogbnVsbCB0aGVuIGl0IChhbmQgdGhlIGNvbG9uKSBhcmUgb21pdHRlZC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwb3B1bGF0ZUxpc3QoTGlzdCBsaXN0KQotICB7Ci0gICAgSXRlcmF0b3IgZW51bWVyYXRpb24gPSBzdGF0dXNMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGVudW1lcmF0aW9uLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIGNoaWxkU3RhdHVzID0gKElTdGF0dXMpIGVudW1lcmF0aW9uLm5leHQoKTsKLSAgICAgIHBvcHVsYXRlTGlzdChsaXN0LCBjaGlsZFN0YXR1cywgMCk7Ci0gICAgfQotICB9Ci0gIHByaXZhdGUgdm9pZCBwb3B1bGF0ZUxpc3QoTGlzdCBsaXN0LCBJU3RhdHVzIHN0YXR1cywgaW50IG5lc3RpbmcpCi0gIHsKLSAgICBpZiAoIXN0YXR1cy5tYXRjaGVzKGRpc3BsYXlNYXNrKSkKLSAgICB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5lc3Rpbmc7IGkrKykKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQoIiAgIik7Ci0gICAgfQotICAgIHNiLmFwcGVuZChzdGF0dXMuZ2V0TWVzc2FnZSgpKTsKLSAgICBsaXN0LmFkZChzYi50b1N0cmluZygpKTsKLSAgICBJU3RhdHVzW10gY2hpbGRyZW4gPSBzdGF0dXMuZ2V0Q2hpbGRyZW4oKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHBvcHVsYXRlTGlzdChsaXN0LCBjaGlsZHJlbltpXSwgbmVzdGluZyArIDEpOwotICAgIH0KLSAgfQotICBwcml2YXRlIHZvaWQgcG9wdWxhdGVEZXRhaWxzKFRleHQgdGV4dCwgSVN0YXR1cyBzdGF0dXMsIGludCBuZXN0aW5nKQotICB7Ci0gICAgaWYgKCFzdGF0dXMubWF0Y2hlcyhkaXNwbGF5TWFzaykpCi0gICAgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAgU3RyaW5nICAgIHRhYkNoYXJzICAgID0gU3RyaW5nVXRpbHMucmVwZWF0KCAnICcsIG5lc3RpbmcgKiAyICk7Ci0gICAgU3RyaW5nICAgIG1lc3NhZ2VMaW5lID0gdGFiQ2hhcnMgKyBzdGF0dXMuZ2V0TWVzc2FnZSgpICsgU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotICAgIFRocm93YWJsZSBleGNlcHQgICAgICA9IHN0YXR1cy5nZXRFeGNlcHRpb24oKTsKLSAgICAKLSAgICB0ZXh0LmFwcGVuZCggbWVzc2FnZUxpbmUgKTsKLSAgICAKLSAgICBpZiggZXhjZXB0ICE9IG51bGwgKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIHRyYWNlID0gU3RyaW5nVXRpbHMuZ2V0U3RhY2tUcmFjZSggZXhjZXB0ICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCB0cmFjZS5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICB0ZXh0LmFwcGVuZCggdGFiQ2hhcnMgKyAiICAgICIgKyB0cmFjZVtpbmRleF0gKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgSVN0YXR1c1tdIGNoaWxkcmVuID0gc3RhdHVzLmdldENoaWxkcmVuKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBwb3B1bGF0ZURldGFpbHModGV4dCwgY2hpbGRyZW5baV0sIG5lc3RpbmcgKyAxKTsKLSAgICB9Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gc3RhdHVzIG9iamVjdCBzaG91bGQgYmUgZGlzcGxheWVkLgotICAgKiAKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKiAgICAgICAgICAgIGEgc3RhdHVzIG9iamVjdAotICAgKiBAcGFyYW0gbWFzawotICAgKiAgICAgICAgICAgIGEgbWFzayBhcyBwZXIgPGNvZGU+U3RhdHVzLm1hdGNoZXM8L2NvZGU+Ci0gICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIHN0YXR1cyBzaG91bGQgYmUgZGlzcGxheWVkLCBhbmQKLSAgICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gc2hvdWxkRGlzcGxheShJU3RhdHVzIHN0YXR1cywgaW50IG1hc2spCi0gIHsKLSAgICBJU3RhdHVzW10gY2hpbGRyZW4gPSBzdGF0dXMuZ2V0Q2hpbGRyZW4oKTsKLSAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCB8fCBjaGlsZHJlbi5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gc3RhdHVzLm1hdGNoZXMobWFzayk7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGNoaWxkcmVuW2ldLm1hdGNoZXMobWFzaykpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIFRvZ2dsZXMgdGhlIHVuZm9sZGluZyBvZiB0aGUgZGV0YWlscyBhcmVhLiBUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgdXNlcgotICAgKiBwcmVzc2luZyB0aGUgZGV0YWlscyBidXR0b24uCi0gICAqLwotICBwcml2YXRlIHZvaWQgdG9nZ2xlRGV0YWlsc0FyZWEoKQotICB7Ci0gICAgUG9pbnQgd2luZG93U2l6ZSA9IGdldFNoZWxsKCkuZ2V0U2l6ZSgpOwotICAgIGludCAgIG5ld0hlaWdodCAgPSAtMTsKLSAgICAKLSAgICBpZiAoZGV0YWlsc0NyZWF0ZWQpCi0gICAgewotICAgICAgZGV0YWlscy5kaXNwb3NlKCk7Ci0gICAgICBkZXRhaWxzQ3JlYXRlZCA9IGZhbHNlOwotICAgICAgZGV0YWlsc0J1dHRvbi5zZXRUZXh0KElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMKTsKLSAgICAgIAotICAgICAgLy8gV2l0aG91dCB0aGUgZm9sbG93aW5nIGNvbXB1dGVTaXplIGNhbGwgdGhlIHNldFNpemUgY2FsbCBiZWxvdyB0aHJvd3MgYW4gYXJyYXkgb3V0IG9mIGJvdW5kcyBleGNlcHRpb24uCi0gICAgICAvLyBWZXJ5IHdlaXJkLgotICAgICAgZ2V0Q29udGVudHMoKS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAgICAgCi0gICAgICBuZXdIZWlnaHQgPSBzYXZlZFNpemUueTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmKCBzYXZlZFNpemUgPT0gbnVsbCApIHNhdmVkU2l6ZSA9IHdpbmRvd1NpemU7Ci0gICAgICAgIAotICAgICAgZGV0YWlscyA9IGNyZWF0ZURyb3BEb3duRGV0YWlscygoQ29tcG9zaXRlKSBnZXRDb250ZW50cygpKTsKLSAgICAgIGRldGFpbHNCdXR0b24uc2V0VGV4dChJRGlhbG9nQ29uc3RhbnRzLkhJREVfREVUQUlMU19MQUJFTCk7Ci0gICAgICBuZXdIZWlnaHQgPSBnZXRDb250ZW50cygpLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCkueTsKLSAgICAgIG5ld0hlaWdodCA9IG5ld0hlaWdodCA8IDI1MCA/IDI1MCA6IG5ld0hlaWdodDsKLSAgICB9Ci0KLSAgICBuZXdIZWlnaHQgPSBuZXdIZWlnaHQgPiA0MDAgPyA0MDAgOiBuZXdIZWlnaHQ7Ci0gICAgCi0gICAgZ2V0U2hlbGwoKS5zZXRTaXplKCBuZXcgUG9pbnQod2luZG93U2l6ZS54LCBuZXdIZWlnaHQpICk7Ci0gICAgcGFyZW50LmxheW91dCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9PcHRpb25zRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9PcHRpb25zRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMTE3OWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvT3B0aW9uc0RpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotCi0KLS8qKgotICogQSBkaWFsb2cgdG8gZGlzcGxheSBvbmUgb3IgbW9yZSBlcnJvcnMgdG8gdGhlIHVzZXIsIGFzIGNvbnRhaW5lZCBpbiBhbgotICogPGNvZGU+U3RhdHVzPC9jb2RlPiBvYmplY3QuIElmIGFuIGVycm9yIGNvbnRhaW5zIGFkZGl0aW9uYWwgZGV0YWlsZWQKLSAqIGluZm9ybWF0aW9uIHRoZW4gYSBEZXRhaWxzIGJ1dHRvbiBpcyBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkLCB3aGljaCBzaG93cyBvcgotICogaGlkZXMgYW4gZXJyb3IgZGV0YWlscyB2aWV3ZXIgd2hlbiBwcmVzc2VkIGJ5IHRoZSB1c2VyLgotICogIAotICovCi1wdWJsaWMgY2xhc3MgT3B0aW9uc0RpYWxvZyBleHRlbmRzIE1lc3NhZ2VEaWFsb2cKLXsKLSAgcHJpdmF0ZSBDaG9pY2VbXSBjaG9pY2VzOwotICBwcml2YXRlIGludCByZXR1cm5Db2RlXzsKLQotICBwdWJsaWMgT3B0aW9uc0RpYWxvZygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgZGlhbG9nVGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrLAotICAgIENob2ljZVtdIGNob2ljZXMpCi0gIHsKLSAgICBzdXBlcihwYXJlbnRTaGVsbCwgZGlhbG9nVGl0bGUsIG1lc3NhZ2UsIHN0YXR1cywgZGlzcGxheU1hc2spOwotICAgIHRoaXMuY2hvaWNlcyA9IGNob2ljZXM7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIFRoaXMgc2hvdWxkIGFsc28gYmUgb3ZlcndyaXR0ZW4gTWV0aG9kIGRlY2xhcmVkIG9uIERpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIC8vIGNyZWF0ZSBhIGJ1dHRvbiBmb3IgZWFjaCBvcHRpb25zCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGNyZWF0ZUJ1dHRvbihwYXJlbnQsIGNob2ljZXNbaV0uZ2V0U2hvcnRjdXQoKSwgY2hvaWNlc1tpXS5nZXRMYWJlbCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgaWYgKHN0YXR1cy5pc011bHRpU3RhdHVzKCkgKQotICAgIHsKLSAgICAgIGRldGFpbHNCdXR0b24gPQotICAgICAgICBjcmVhdGVCdXR0b24oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lELAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMLAotICAgICAgICAgIGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBidXR0b25QcmVzc2VkKGludCBpZCkKLSAgewotICAgIGlmIChpZCA9PSBTdGF0dXNEaWFsb2dDb25zdGFudHMuREVUQUlMU19JRCkKLSAgICAgIC8vIHdhcyB0aGUgRGV0YWlscyBidXR0b24gcHJlc3NlZD8KLSAgICAgIHN1cGVyLmJ1dHRvblByZXNzZWQoaWQpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRSZXR1cm5Db2RlKGlkKTsKLSAgICAgIGNsb3NlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgc2V0UmV0dXJuQ29kZShpbnQgaWQpCi0gIHsKLSAgICByZXR1cm5Db2RlXyA9IGlkOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRSZXR1cm5Db2RlKCkKLSAgewotICAgIHJldHVybiByZXR1cm5Db2RlXzsKLSAgfQotICAvKgotICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgZmV3IG1ldGhvZHMgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUKLSAgICogc3ViY2xhc3Nlcy4gVGhlIGltYWdlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgRGlhbG9nIGNsYXNzCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2UgZ2V0RGlhbG9nSW1hZ2UoKQotICB7Ci0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkKLSAgICB7Ci0gICAgICBjYXNlIElTdGF0dXMuSU5GTyA6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9JTkZPUk1BVElPTik7Ci0gICAgICBjYXNlIElTdGF0dXMuV0FSTklORyA6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9XQVJOSU5HKTsKLSAgICAgIGRlZmF1bHQgOgotICAgICAgICByZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtSW1hZ2UoU1dULklDT05fRVJST1IpOwotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9SdW50aW1lU3RydWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9SdW50aW1lU3RydWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTAyNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvUnVudGltZVN0cnVjdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAyMjEgMTQ2MDIzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuY29tbW9uLkxhYmVsc0FuZElkczsKLQotcHVibGljIGNsYXNzIFJ1bnRpbWVTdHJ1Y3QgewotCi0JcHJpdmF0ZSBTdHJpbmcgcnVudGltZUlEXzsKLQlwcml2YXRlIFN0cmluZyBydW50aW1lTGFiZWxfOwotCXByaXZhdGUgTGFiZWxzQW5kSWRzIHNjZW5hcmlvc187Ci0JCi0JcHVibGljIFJ1bnRpbWVTdHJ1Y3QoU3RyaW5nIHJ1bnRpbWVJRCl7Ci0JCXJ1bnRpbWVJRF8gPSBydW50aW1lSUQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRSdW50aW1lSUQoKXsKLQkJcmV0dXJuIHJ1bnRpbWVJRF87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UnVudGltZUxhYmVsKFN0cmluZyBsYWJlbCl7Ci0JCXJ1bnRpbWVMYWJlbF8gPSBsYWJlbDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRSdW50aW1lTGFiZWwoKXsKLQkJcmV0dXJuIHJ1bnRpbWVMYWJlbF87Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFNjZW5hcmlvKFN0cmluZyBpZCwgU3RyaW5nIGxhYmVsKXsKLQkJaWYoc2NlbmFyaW9zXyA9PSBudWxsKSBzY2VuYXJpb3NfID0gbmV3IExhYmVsc0FuZElkcygpOyAKLQkJaWYoaWQgPT0gbnVsbCB8fCBsYWJlbCA9PSBudWxsKSByZXR1cm47Ci0JCXNjZW5hcmlvc18uYWRkKGlkLGxhYmVsKTsKLQl9Ci0JCi0JcHVibGljIExhYmVsc0FuZElkcyBnZXRTY2VuYXJpb0xhYmVscygpewotCQlyZXR1cm4gc2NlbmFyaW9zXzsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9TdGF0dXNEaWFsb2dDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1N0YXR1c0RpYWxvZ0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTU2Nzg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1N0YXR1c0RpYWxvZ0NvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi0vKioKLSogQ29uc3RhbnRzIGZvciBzdGF0dXMgZGlhbG9ncwotKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdHVzRGlhbG9nQ29uc3RhbnRzIHsKLQotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJZZXMiIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZRVNfSUQgPSAyOwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJZZXMgdG8gYWxsIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWUVTX1RPX0FMTF9JRCA9IDQ7Ci0gIC8qCi0gICogQnV0dG9uIElEIGZvciB0aGUgIkNhbmNlbCIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTkNFTF9JRCA9IDE7Ci0gIC8qCi0gICogQnV0dG9uIElEIGZvciB0aGUgIk9LIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfSUQgPSAwOwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJEZXRhaWxzIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVUQUlMU19JRCA9IDEzOwotCi0gIC8qCi0gICogQnV0dG9uIGxhYmVsIGZvciB0aGUgIlllcyIgYnV0dG9uCi0gICovCi0gLy8gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWUVTX0xBQkVMID0gRW52aXJvbm1lbnRQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRNZXNzYWdlKCIlU1RBVFVTX0RJQUxPR19ZRVNfTEFCRUwiKTsKLSAgLyoKLSAgKiBCdXR0b24gbGFiZWwgZm9yIHRoZSAiWWVzIHRvIGFsbCIgYnV0dG9uCi0gICovCi0gLy8gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWUVTX1RPX0FMTF9MQUJFTCA9IEVudmlyb25tZW50UGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVzc2FnZSgiJVNUQVRVU19ESUFMT0dfWUVTX1RPX0FMTF9MQUJFTCIpOwotICAvKgotICAqIEJ1dHRvbiBsYWJlbCBmb3IgdGhlICJDYW5jZWwiIGJ1dHRvbgotICAqLwotIC8vIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBTkNFTF9MQUJFTCA9IEVudmlyb25tZW50UGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVzc2FnZSgiJVNUQVRVU19ESUFMT0dfQ0FOQ0VMX0xBQkVMIik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9XYXJuaW5nRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9XYXJuaW5nRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNTY5NWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvV2FybmluZ0RpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotCi0KLS8qKgotICogQSBkaWFsb2cgdG8gZGlzcGxheSBvbmUgb3IgbW9yZSBlcnJvcnMgdG8gdGhlIHVzZXIsIGFzIGNvbnRhaW5lZCBpbiBhbgotICogPGNvZGU+U3RhdHVzPC9jb2RlPiBvYmplY3QuIElmIGFuIGVycm9yIGNvbnRhaW5zIGFkZGl0aW9uYWwgZGV0YWlsZWQKLSAqIGluZm9ybWF0aW9uIHRoZW4gYSBEZXRhaWxzIGJ1dHRvbiBpcyBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkLCB3aGljaCBzaG93cyBvcgotICogaGlkZXMgYW4gZXJyb3IgZGV0YWlscyB2aWV3ZXIgd2hlbiBwcmVzc2VkIGJ5IHRoZSB1c2VyLgotICogIAotICovCi1wdWJsaWMgY2xhc3MgV2FybmluZ0RpYWxvZyBleHRlbmRzIE1lc3NhZ2VEaWFsb2cKLXsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gZXJyb3IgZGlhbG9nLiBOb3RlIHRoYXQgdGhlIGRpYWxvZyB3aWxsIGhhdmUgbm8gdmlzdWFsCi0gICAqIHJlcHJlc2VudGF0aW9uIChubyB3aWRnZXRzKSB1bnRpbCBpdCBpcyB0b2xkIHRvIG9wZW4uCi0gICAqIDxwPgotICAgKiBOb3JtYWxseSBvbmUgc2hvdWxkIHVzZSA8Y29kZT5vcGVuRXJyb3I8L2NvZGU+IHRvIGNyZWF0ZSBhbmQgb3BlbiBvbmUgb2YKLSAgICogdGhlc2UuIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZnVsIG9ubHkgaWYgdGhlIGVycm9yIG9iamVjdCBiZWluZyBkaXNwbGF5ZWQKLSAgICogY29udGFpbnMgY2hpbGQgaXRlbXMgPGl0PmFuZDwvaXQ+IHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBtYXNrIHdoaWNoIHdpbGwKLSAgICogYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgdGhlc2UgY2hpbGRyZW4uCi0gICAqIDwvcD4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRTaGVsbAotICAgKiAgICAgICAgICAgIHRoZSBzaGVsbCB1bmRlciB3aGljaCB0byBjcmVhdGUgdGhpcyBkaWFsb2cKLSAgICogQHBhcmFtIGRpYWxvZ1RpdGxlCi0gICAqICAgICAgICAgICAgdGhlIHRpdGxlIHRvIHVzZSBmb3IgdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZGVmYXVsdCB0aXRsZSBzaG91bGQgYmUgdXNlZAotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIHNob3cgaW4gdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZXJyb3IncyBtZXNzYWdlIHNob3VsZCBiZSBzaG93biBhcyB0aGUKLSAgICogICAgICAgICAgICBwcmltYXJ5IG1lc3NhZ2UKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKiAgICAgICAgICAgIHRoZSBlcnJvciB0byBzaG93IHRvIHRoZSB1c2VyCi0gICAqIEBwYXJhbSBkaXNwbGF5TWFzawotICAgKiAgICAgICAgICAgIHRoZSBtYXNrIHRvIHVzZSB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgY2hpbGQgaXRlbXMsIGFzIHBlcgotICAgKiAgICAgICAgICAgIDxjb2RlPlN0YXR1cy5tYXRjaGVzPC9jb2RlPgotICAgKi8KLSAgcHVibGljIFdhcm5pbmdEaWFsb2coCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIGRpYWxvZ1RpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaykKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsLCBkaWFsb2dUaXRsZSwgbWVzc2FnZSwgc3RhdHVzLCBkaXNwbGF5TWFzayk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIFRoaXMgc2hvdWxkIGFsc28gYmUgb3ZlcndyaXR0ZW4gTWV0aG9kIGRlY2xhcmVkIG9uIERpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIC8vIGNyZWF0ZSBPSywgQ2FuY2VsIGFuZCBEZXRhaWxzIGJ1dHRvbnMKLSAgICBjcmVhdGVCdXR0b24oCi0gICAgICBwYXJlbnQsCi0gICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuT0tfSUQsCi0gICAgICBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotICAgICAgdHJ1ZSk7Ci0gICAgY3JlYXRlQnV0dG9uKAotICAgICAgcGFyZW50LAotICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCwKLSAgICAgIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMLAotICAgICAgZmFsc2UpOwotICAgIGlmIChzdGF0dXMuaXNNdWx0aVN0YXR1cygpKQotICAgIHsKLSAgICAgIGRldGFpbHNCdXR0b24gPQotICAgICAgICBjcmVhdGVCdXR0b24oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lELAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMLAotICAgICAgICAgIGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgZmV3IG1ldGhvZHMgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUKLSAgICogc3ViY2xhc3Nlcy4gVGhlIGltYWdlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgRGlhbG9nIGNsYXNzCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2UgZ2V0RGlhbG9nSW1hZ2UoKQotICB7Ci0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUltYWdlKFNXVC5JQ09OX1dBUk5JTkcpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9FY2xpcHNlU3RhdHVzSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL0VjbGlwc2VTdGF0dXNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5Yzc2NDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL0VjbGlwc2VTdGF0dXNIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTAyICAgMTYyMjg3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2ZXIgcHVibGlzaCBjYW5jZWwgYnV0dG9uIHVuYXZhaWxhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuRW52aXJvbm1lbnRDb3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2cuU3RhdHVzRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotCi0KLS8qKgotICogVGhpcyBpcyB0aGUgRWNsaXBzZSBVSSB2ZXJzaW9uIG9mIHRoZSBJU3RhdHVzSGFuZGxlcgotICovCi1wdWJsaWMgY2xhc3MgRWNsaXBzZVN0YXR1c0hhbmRsZXIgZXh0ZW5kcyBCYXNlU3RhdHVzSGFuZGxlcgotewotICBwcml2YXRlIFNoZWxsICAgc2hlbGwgICAgICAgPSBudWxsOwotICAgIAotICBwdWJsaWMgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKQotICB7ICAKLSAgfQotICAKLSAgcHVibGljIEVjbGlwc2VTdGF0dXNIYW5kbGVyKCBTaGVsbCB0aGVTaGVsbCApCi0gIHsKLSAgICBzaGVsbCA9IHRoZVNoZWxsOyAgCi0gIH0KLSAgICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW52LmNvbW1vbi5JU3RhdHVzSGFuZGxlciNyZXBvcnQob3JnLmVjbGlwc2UuZW52LmNvbW1vbi5TdGF0dXMsIG9yZy5lY2xpcHNlLmVudi5jb21tb24uQ2hvaWNlW10pCi0gICAqLwotICBwdWJsaWMgQ2hvaWNlIHJlcG9ydCggZmluYWwgSVN0YXR1cyBzdGF0dXMsIGZpbmFsIENob2ljZVtdIGNob2ljZXMpIAotICB7Ci0gICAgZmluYWwgaW50W10gcmVzdWx0ID0gbmV3IGludFsxXTsKLSAgICAKLSAgICBjaGVja1N0YXR1cyggc3RhdHVzICk7Ci0gICAgCi0gICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdFswXSA9Ci0gICAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuTWVzc2FnZSggZ2V0U2hlbGwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudENvcmVNZXNzYWdlcy5USVRMRV9XQVJOSU5HLCAvL1RPRE86IFNob3VsZCBiZSBpbmZlcnJlZCBmcm9tIHN0YXR1cycgc2V2ZXJpdHkuCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyggcnVubmFibGUgKTsKLSAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspCi0gICAgIHsKLSAgICAgIGlmIChjaG9pY2VzW2ldLmdldFNob3J0Y3V0KCkgPT0gcmVzdWx0WzBdICkKLSAgICAgICAgcmV0dXJuIGNob2ljZXNbaV07Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW52LmNvbW1vbi5JU3RhdHVzSGFuZGxlciNyZXBvcnQob3JnLmVjbGlwc2UuZW52LmNvbW1vbi5TdGF0dXMpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXBvcnQoSVN0YXR1cyBzdGF0dXMpIHRocm93cyBTdGF0dXNFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gdXNlck9rID0gZmFsc2U7Ci0gICAgCi0gICAgY2hlY2tTdGF0dXMoIHN0YXR1cyApOwotICAgIAotICAgIHN3aXRjaCAoc3RhdHVzLmdldFNldmVyaXR5KCkpCi0gICAgewotICAgICAgLy8gYW4gZXJyb3IgaGFzIGJlZW4gcmVwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gc3RvcCBleGVjdXRpbmcgdGhlIGNvbW1pbmcKLSAgICAgIC8vIGNvbW1hbmRzCi0gICAgICBjYXNlIFN0YXR1cy5FUlJPUiA6Ci0gICAgICB7Ci0gICAgICAgIHVzZXJPayA9IHJlcG9ydEVycm9yU3RhdHVzKHN0YXR1cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBTdGF0dXMuV0FSTklORyA6Ci0gICAgICB7Ci0gICAgICAgIHVzZXJPayA9IHJlcG9ydFdhcm5pbmcoc3RhdHVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9ICAgICAKLSAgICAgIGNhc2UgU3RhdHVzLklORk8gOgotICAgICAgewotICAgICAgICB1c2VyT2sgPSB0cnVlOwotICAgICAgICByZXBvcnRJbmZvKHN0YXR1cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiggIXVzZXJPayApIHRocm93IG5ldyBTdGF0dXNFeGNlcHRpb24oIHN0YXR1cyApOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gcmVwb3J0V2FybmluZyggZmluYWwgSVN0YXR1cyBzdGF0dXMgKQotICB7Ci0gICAgZmluYWwgaW50IHVzZXJSZXNwb25zZVtdID0gbmV3IGludFsxXTsKLSAgICAKLSAgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgIHsKLSAgICAgICAgdXNlclJlc3BvbnNlWzBdID0KLSAgICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5NZXNzYWdlKCBnZXRTaGVsbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzLlRJVExFX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpOwotICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMoIHJ1bm5hYmxlICk7Ci0gICAgCi0gICAgcmV0dXJuICh1c2VyUmVzcG9uc2VbMF0gPT0gU3RhdHVzRGlhbG9nQ29uc3RhbnRzLk9LX0lEKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiByZXBvcnRFcnJvclN0YXR1cyhmaW5hbCBJU3RhdHVzIHN0YXR1cykKLSAgewotCS8vIG5vIG5lZWQgdG8gcmVwb3J0IGFuIGVtcHR5IG1lc3NhZ2Ugd2l0aCBubyBleGNlcHRpb24KLQlpZiAoIiIuZXF1YWxzKHN0YXR1cy5nZXRNZXNzYWdlKCkpICYmIHN0YXR1cy5nZXRFeGNlcHRpb24oKSA9PSBudWxsKQotCQlyZXR1cm4gZmFsc2U7Ci0JICAKLSAgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuTWVzc2FnZSggZ2V0U2hlbGwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuVElUTEVfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyggcnVubmFibGUgKTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLklTdGF0dXNIYW5kbGVyI3JlcG9ydEVycm9yKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXMpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihJU3RhdHVzIHN0YXR1cykKLSAgewotICAgIGNoZWNrU3RhdHVzKCBzdGF0dXMgKTsKLSAgICByZXBvcnRFcnJvclN0YXR1cyggc3RhdHVzICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5JU3RhdHVzSGFuZGxlciNyZXBvcnRJbmZvKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXMpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXBvcnRJbmZvKGZpbmFsIElTdGF0dXMgc3RhdHVzKQotICB7Ci0gICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2VEaWFsb2cub3Blbk1lc3NhZ2UoIGdldFNoZWxsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzLlRJVExFX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyggcnVubmFibGUgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTaGVsbCBnZXRTaGVsbCgpCi0gIHsKLSAgICBpZiggc2hlbGwgIT0gbnVsbCApIHJldHVybiBzaGVsbDsKLSAgICAKLSAgICBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKLSAgICAKLSAgICByZXR1cm4gZGlzcGxheSA9PSBudWxsID8gbnVsbCA6IGRpc3BsYXkuZ2V0QWN0aXZlU2hlbGwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL0Vudmlyb25tZW50VXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9FbnZpcm9ubWVudFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMWRlMzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL0Vudmlyb25tZW50VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotcHVibGljIGZpbmFsIGNsYXNzIEVudmlyb25tZW50VXRpbHMKLXsgICAgIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBlbnYgVGhpcyBzaG91bGQgYmUgYW4gRWNsaXBzZUVudmlyb25tZW50LgotICAgKiBAcmV0dXJuIFJldHVybnMgYSBSZXNvdXJjZUNvbnRleHQuCi0gICAqLyAKLSAgcHVibGljIHN0YXRpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCBJRW52aXJvbm1lbnQgZW52ICkKLSAgewotICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLSAgICAKLSAgICBpZiggZW52IGluc3RhbmNlb2YgRWNsaXBzZUVudmlyb25tZW50ICkKLSAgICB7Ci0gICAgICBjb250ZXh0ID0gKChFY2xpcHNlRW52aXJvbm1lbnQpZW52KS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbnRleHQgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb250ZXh0OwotICB9Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9TV1RFbnZpcm9ubWVudE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9TV1RFbnZpcm9ubWVudE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxMzJiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2VjbGlwc2UvU1dURW52aXJvbm1lbnRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlCi0gKiBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLQotcHVibGljIGNsYXNzIFNXVEVudmlyb25tZW50TWFuYWdlcgotewotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBJRW52aXJvbm1lbnQgZm9yIHRoZSBFY2xpcHNlIFNXVCBHVUkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJhc2VFY2xpcHNlRW52aXJvbm1lbnQgZ2V0TmV3U1dURW52aXJvbm1lbnQoKQotICB7Ci0gICAgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCBjb250ZXh0ICAgICAgICA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLSAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgIGhhbmRsZXIgICAgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgICBlbnZpcm9ubWVudCAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwsIGNvbnRleHQsIGhhbmRsZXIgKTsKLSAgICAKLSAgICByZXR1cm4gZW52aXJvbm1lbnQ7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9wbHVnaW4vRW52VUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcGx1Z2luL0VudlVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTVkNjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9wbHVnaW4vRW52VUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnBsdWdpbjsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEVudlVJUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBFbnZVSVBsdWdpbiBpbnN0YW5jZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgRW52VUlQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCWluc3RhbmNlID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbnZVSVBsdWdpbiBnZXRJbnN0YW5jZSgpIHsKLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQkgcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yICggU3RyaW5nIG5hbWUgKQotCSAgewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIFVSTCBpbnN0YWxsVVJMID0gaW5zdGFuY2UuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKTsKLQkgICAgICBVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsbmFtZSk7Ci0JICAgICAgcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLQkgICAgfQotCSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0JICAgIHsKLQkgICAgICByZXR1cm4gbnVsbDsKLQkgICAgfQotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9wcmVmZXJlbmNlcy9BY3Rpb25EaWFsb2dzUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcHJlZmVyZW5jZXMvQWN0aW9uRGlhbG9nc1ByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZTRhNzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9wcmVmZXJlbmNlcy9BY3Rpb25EaWFsb2dzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI2ICAgMTUxODY2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBQb3B1cCBEaWFsb2cgU2VsZWN0aW9uIHByZWZlcmVuY2VzIGRlZmF1bHRzIGluY29ycmVjdGx5IHRvIGhpZGUgYWxsCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXhlY3V0YWJsZUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXMuQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLkVudmlyb25tZW50VUlNZXNzYWdlczsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgcG9wdXAgYWN0aW9ucyBwcmVmZXJlbmNlIHBhZ2UgZm9yIGEgCi0gKiBwYXJ0aWN1bGFyIGNhdGVnb3J5LiAgRm9yIGV4YW1wbGU6Ci0gKgotICogPHByZT4KLSAqICAmbHQ7ZXh0ZW5zaW9uCi0gKiAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyImZ3Q7Ci0gKiAgICAgJmx0O3BhZ2UKLSAqICAgICAgICAgICBuYW1lPSIlUFJFRkVSRU5DRV9DQVRFR09SWV9ESUFMT0dTIgotICogICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkucHJlZmVyZW5jZXMubmFtZSIKLSAqICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnByZWZlcmVuY2VzLkFjdGlvbkRpYWxvZ3NQcmVmZXJlbmNlUGFnZSIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSImZ3Q7Ci0gKiAgICAgJmx0Oy9wYWdlJmd0OwotICogKiA8L3ByZT4KLSAqIFRoaXMgZW50cnkgc3BlY2lmaWVzIHRoYXQgYWxsIHBvcHVwIGFjdGlvbnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZQotICogb3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGlzCi0gKiBwcmVmZXJlbmNlIHBhZ2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3Rpb25EaWFsb2dzUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSwgTGlzdGVuZXIsIElFeGVjdXRhYmxlRXh0ZW5zaW9uCi17Ci0gIC8qQ09OVEVYVF9JRCBQUEFEMDAwMSBmb3IgdGhlIEFjdGlvbiBEaWFsb2dzIFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRF9QQUdFID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS5QUEFEMDAwMSI7Ci0gIC8vCi0gIHByaXZhdGUgQnV0dG9uIHNob3dBbGw7Ci0gIC8qQ09OVEVYVF9JRCBQUEFEMDAwMiBmb3IgdGhlICBzaG93IGFsbCBjaGVjayBib3ggb24gdGhlIEFjdGlvbiBEaWFsb2dzIFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRF9CVVRUT05fU0hPV19BTEwgPSAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLlBQQUQwMDAyIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gaGlkZUFsbDsKLSAgLypDT05URVhUX0lEIFBQQUQwMDAzIGZvciB0aGUgIGhpZGUgYWxsIGNoZWNrIGJveCBvbiB0aGUgQWN0aW9uIERpYWxvZ3MgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFEX0JVVFRPTl9ISURFX0FMTCA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkuUFBBRDAwMDMiOwotCi0gIHByaXZhdGUgSGFzaHRhYmxlIGNoZWNrQm94ZXNfOwotICBwcml2YXRlIFN0cmluZyAgICBjYXRlZ29yeUlkXzsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxpemF0aW9uRGF0YSggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAgICAgICAgICAgICAgICBkYXRhICkKLSAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgY2F0ZWdvcnlJZF8gICA9IGNvbmZpZy5nZXRBdHRyaWJ1dGUoICJpZCIgKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0gICAKLSAgICBjaGVja0JveGVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBhZGRPcHRpb25hbERpYWxvZ3NDaGVja0JveGVzIChzdXBlcnBhcmVudCk7Ci0JbmV3IExhYmVsKHN1cGVycGFyZW50LCBTV1QuSE9SSVpPTlRBTCk7Ci0JCi0gICAgQ29tcG9zaXRlICAgcGFyZW50ID0gbmV3IENvbXBvc2l0ZSggc3VwZXJwYXJlbnQsIFNXVC5OT05FICk7CQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgcGFyZW50LnNldExheW91dCggbGF5b3V0ICk7Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX1BQQURfUEFHRSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsIElORk9QT1BfUFBBRF9QQUdFICk7Ci0JCi0gICAgc2hvd0FsbCA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgc2hvd0FsbC5zZXRUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5CVVRUT05fU0hPV19BTExfRElBTE9HUyk7Ci0gICAgc2hvd0FsbC5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLSAgICBzaG93QWxsLnNldFRvb2xUaXBUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX1BQQURfQlVUVE9OX1NIT1dfQUxMKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHNob3dBbGwsIElORk9QT1BfUFBBRF9CVVRUT05fU0hPV19BTEwgKTsKLSAgIAotICAgIGhpZGVBbGwgPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULk5PTkUpOwotICAgIGhpZGVBbGwuc2V0VGV4dChFbnZpcm9ubWVudFVJTWVzc2FnZXMuQlVUVE9OX0hJREVfQUxMX0RJQUxPR1MpOwotICAgIGhpZGVBbGwuYWRkTGlzdGVuZXIgKCBTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLSAgICBoaWRlQWxsLnNldFRvb2xUaXBUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX1BQQURfQlVUVE9OX0hJREVfQUxMKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGhpZGVBbGwsIElORk9QT1BfUFBBRF9CVVRUT05fSElERV9BTEwgKTsKLQotICAgIGluaXRpYWxpemVWYWx1ZXMoKTsKLSAgICBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOwotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50IChFdmVudCBldmVudCkgCi0gewotICAgIGlmIChzaG93QWxsID09IGV2ZW50LndpZGdldCkKLQkJaGFuZGxlU2hvd0FsbEV2ZW50KCk7Ci0gICAgCi0gICAgZWxzZSBpZiAoIGhpZGVBbGwgPT0gZXZlbnQud2lkZ2V0KQotICAgIAloYW5kbGVIaWRlQWxsRXZlbnQoKTsKLSB9Ci0KLSBwcml2YXRlIHZvaWQgaGFuZGxlU2hvd0FsbEV2ZW50ICgpCi0gewotICAgIEVudW1lcmF0aW9uIGUgPSBjaGVja0JveGVzXy5lbGVtZW50cygpOwotIAlmb3IgKGludCBpPTA7IGUuaGFzTW9yZUVsZW1lbnRzKCk7IGkrKykKLSAgICAJewotICAgIAkJQnV0dG9uIGRpYWxvZyA9IChCdXR0b24pIGUubmV4dEVsZW1lbnQoKTsKLSAgICAJCWRpYWxvZy5zZXRTZWxlY3Rpb24oIGZhbHNlICk7Ci0gICAgCX0gICAgICAgICAgICAgICAgICAgICAgCi0gfQotCi0gcHJpdmF0ZSB2b2lkIGhhbmRsZUhpZGVBbGxFdmVudCAoKQotIHsKLSAJRW51bWVyYXRpb24gZSA9IGNoZWNrQm94ZXNfLmVsZW1lbnRzKCk7Ci0gCWZvciAoaW50IGk9MDsgZS5oYXNNb3JlRWxlbWVudHMoKTsgaSsrKQotICAgIAl7Ci0gICAgCQlCdXR0b24gZGlhbG9nID0gKEJ1dHRvbikgZS5uZXh0RWxlbWVudCgpOwotICAgIAkJZGlhbG9nLnNldFNlbGVjdGlvbiggdHJ1ZSApOwotICAgIAl9Ci0gfQotIAotIHByaXZhdGUgdm9pZCBhZGRPcHRpb25hbERpYWxvZ3NDaGVja0JveGVzICggQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBjb250ZXh0ID0gUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0gICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVbXSBkaWFsb2dzID0gY29udGV4dC5nZXREaWFsb2dzKCk7Ci0gICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWFsb2dzLmxlbmd0aDsgaSsrKSAKLSAgICB7Ci0gICAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBkaWFsb2cgICA9IGRpYWxvZ3NbaV07Ci0gICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IGRpYWxvZy5nZXRDYXRlZ29yeSgpOwotICAgICAgCi0gICAgICBpZiggZGlhbG9nLmdldFNob3dDaGVja2JveCgpICYmICBjYXRlZ29yeSAhPSBudWxsICYmIGNhdGVnb3J5LmVxdWFscyggY2F0ZWdvcnlJZF8pICkKLSAgICAgIHsKLSAgICAJQnV0dG9uIGNoZWNrQm94ID0gY3JlYXRlQ2hlY2tCb3gocGFyZW50LCBkaWFsb2cuZ2V0TmFtZSgpKTsKLSAgICAJY2hlY2tCb3guc2V0VG9vbFRpcFRleHQoIGRpYWxvZy5nZXRUb29sdGlwKCkgKTsKLSAgICAJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjaGVja0JveCwgZGlhbG9nLmdldEluZm9wb3AoKSApOwotICAgIAljaGVja0JveGVzXy5wdXQoZGlhbG9nLmdldElkKCksIGNoZWNrQm94KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUNoZWNrQm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdGV4dCApCi0gIHsKLSAgICBCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbiggcGFyZW50LCBTV1QuQ0hFQ0sgKTsKLSAgICBidXR0b24uc2V0VGV4dCggdGV4dCApOwotICAgIHJldHVybiBidXR0b247Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgc3RvcmVWYWx1ZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpCi0gIHsKLSAgICBwZXJmb3JtT2soKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgIHsgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIHVzaW5nIGRlZmF1bHQgdmFsdWVzCi0gICAqIGluIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVEZWZhdWx0cygpCi0gIHsKLSAgICBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgY29udGV4dCA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOyAgCi0gICAgRW51bWVyYXRpb24gZSA9IGNoZWNrQm94ZXNfLmtleXMoKTsKLSAgICBmb3IgKGludCBpPTA7IGUuaGFzTW9yZUVsZW1lbnRzKCk7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKSBlLm5leHRFbGVtZW50KCk7ICAgICAgICAgICAgCQotICAgICAgQnV0dG9uIGRpYWxvZyA9IChCdXR0b24pIGNoZWNrQm94ZXNfLmdldChpZCk7Ci0gICAgICBkaWFsb2cuc2V0U2VsZWN0aW9uKGNvbnRleHQuZ2V0RGVmYXVsdEJvb2xlYW4oaWQpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlcy4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkKLSAgewotICAgIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBjb250ZXh0ID0gUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGNoZWNrQm94ZXNfLmtleXMoKTsKLSAgICBmb3IgKGludCBpPTA7IGUuaGFzTW9yZUVsZW1lbnRzKCk7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbikgY2hlY2tCb3hlc18uZ2V0KGlkKTsKLSAgICAgIGJ1dHRvbi5zZXRTZWxlY3Rpb24oY29udGV4dC5pc0FjdGlvbkRpYWxvZ0VuYWJsZWQoaWQpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU3RvcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnRyb2xzIGJhY2sgdG8gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgc3RvcmVWYWx1ZXMoKQotICB7Ci0gICAgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGNvbnRleHQgPSBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQotICAgIEVudW1lcmF0aW9uIGUgPSBjaGVja0JveGVzXy5rZXlzKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBlLmhhc01vcmVFbGVtZW50cygpOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIGlkID0gKFN0cmluZykgZS5uZXh0RWxlbWVudCgpOwotICAgICAgY29udGV4dC5zZXRBY3Rpb25EaWFsb2dFbmFibGVkKGlkLCAoKEJ1dHRvbiljaGVja0JveGVzXy5nZXQoaWQpKS5nZXRTZWxlY3Rpb24oKSk7Ci0gICAgfQotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcmVnaXN0cnkvV2lkZ2V0UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcmVnaXN0cnkvV2lkZ2V0UmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiNWIzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3JlZ2lzdHJ5L1dpZGdldFJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgV2lkZ2V0UmVnaXN0cnkgCi17Ci0gIHByaXZhdGUgc3RhdGljIFdpZGdldFJlZ2lzdHJ5IHJlZ2lzdHJ5XzsKLSAgCi0gIHByaXZhdGUgSGFzaHRhYmxlIGVudHJpZXNfOwotICAKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSgpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBXaWRnZXRSZWdpc3RyeSBpbnN0YW5jZSgpCi0gIHsKLQlpZiAocmVnaXN0cnlfID09IG51bGwpCi0JewotCQlyZWdpc3RyeV8gPSBuZXcgV2lkZ2V0UmVnaXN0cnkoKTsKLQkJcmVnaXN0cnlfLmxvYWQoKTsKLQl9Ci0KLQlyZXR1cm4gcmVnaXN0cnlfOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpCi0gIHsKLSAgICByZWdpc3RyeV8gPSBudWxsOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGlkIHRoZSBtZXRob2RJZCB0aGF0IG1heSBoYXZlIFdpZGdldENvbnRyaWJ1dG9yIGFzc29jaWF0ZWQgd2l0aCBpdC4KLSAgICogQHJldHVybiByZXR1cm5zIGEgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGlmIG9uZSB3YXMgZGVmaW5lZCBpbiB0aGUgcmVnaXN0cnkuCi0gICAqIE90aGVyd2lzZSBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBnZXRGYWN0b3J5KCBTdHJpbmcgaWQgKQotICB7Ci0JSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCUVudHJ5ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSAgID0gKEVudHJ5KWVudHJpZXNfLmdldCggaWQgKTsKLQkKLQlpZiggZW50cnkgIT0gbnVsbCApCi0JewotCSAgdHJ5Ci0JICB7Ci0JCWlmKCBlbnRyeS5mYWN0b3J5XyA9PSBudWxsICkKLQkJewotCQkgIGVudHJ5LmZhY3RvcnlfID0gKElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSllbnRyeS5lbGVtZW50Xy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCAiY2xhc3MiICk7Ci0JCX0KLQkJCi0JCWZhY3RvcnkgPSBlbnRyeS5mYWN0b3J5XzsKLQkgIH0KLQkgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0JICB7Ci0JICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkgIH0KLQkgIGNhdGNoKCBUaHJvd2FibGUgZXhjICkKLQkgIHsKLQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWQoKQotICB7Ci0JSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0Zvcigib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldFJlZ2lzdHJ5Iik7Ci0JCi0JZW50cmllc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCi0JZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnRzLmxlbmd0aDsgaW5kZXgrKyApCi0JewotCSAgLy8gSWYgdGhpcyBpcyBub3QgYW4gZWxlbWVudCB0aGF0IGtub3cgYWJvdXQgd2Ugd2lsbCBza2lwIGl0LgotCSAgaWYoICFlbGVtZW50c1tpbmRleF0uZ2V0TmFtZSgpLmVxdWFscygid2lkZ2V0RmFjdG9yeSIpICkgY29udGludWU7Ci0JICAKLQkgIEVudHJ5ICAgICAgICAgICAgICAgICBlbnRyeSAgICA9IG5ldyBFbnRyeSgpOwotCSAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgID0gZWxlbWVudHNbaW5kZXhdOwotCSAgU3RyaW5nICAgICAgICAgICAgICAgIGlkICAgICAgID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoICJpZCIgKTsKLQkgIFN0cmluZyAgICAgICAgICAgICAgICBtZXRob2RJZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCAiaW5zZXJ0QmVmb3JlQ29tbWFuZElkIiApOwotCSAgCi0JICBlbnRyeS5lbGVtZW50XyA9IGVsZW1lbnQ7Ci0JICBlbnRyeS5pZF8gICAgICA9IGlkOwotCSAgCi0JICBlbnRyaWVzXy5wdXQoIG1ldGhvZElkLCBlbnRyeSApOwotCX0KLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBFbnRyeQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgIGlkXzsKLQlJQ29uZmlndXJhdGlvbkVsZW1lbnQgICAgICAgICAgZWxlbWVudF87Ci0JSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnlfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQWJzdHJhY3RTZWxlY3Rpb25EaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9BYnN0cmFjdFNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk0ZWNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9BYnN0cmFjdFNlbGVjdGlvbkRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2VsZWN0aW9uRGlhbG9nIGV4dGVuZHMgU2ltcGxlRGlhbG9nIHsKLQkKLQlwdWJsaWMgQWJzdHJhY3RTZWxlY3Rpb25EaWFsb2coIFNoZWxsIHNoZWxsLCBQYWdlSW5mbyBwYWdlSW5mbykKLQl7Ci0JCXN1cGVyKHNoZWxsLCBwYWdlSW5mbyk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY2FsbFNldHRlcnMoKSB7Ci0JCS8vIGV4dGVuZGVycyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlhYmxlU2VsZWN0aW9uU3RyaW5nKCkKLQl7Ci0JCXJldHVybiAiIjsKLQl9Ci0JCi0JcHVibGljIGFic3RyYWN0IElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ2FuRmluaXNoUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9DYW5GaW5pc2hSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODY2NDA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9DYW5GaW5pc2hSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLQotLyoqCi0gKiBUaGlzIGlzIGFuIGludGVyZmFjZSBmb3IgYW4gYWJzdHJhY3QgY2FuIGZpbmlzaCByZWdpc3RyeS4KLSAqIFRoaXMgcmVnaXN0cnkgaXMgdXN1YWxseSBhc3NvY2lhdGUgd2l0aCBhbiBFY2xpcHNlIHdpemFyZC4gIFRoaXMKLSAqIHJlZ2lzdHJ5IGFsbG93IGNvbmRpdGlvbiBvYmplY3QgdG8gYmUgYWRkZWQgdG8gaXQgaW4gb3JkZXIgdG8KLSAqIGRldGVybWluZSBpZiB0aGUgd2l6YXJkIGNhbiBmaW5pc2ggb3Igbm90LgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBDYW5GaW5pc2hSZWdpc3RyeQotewotICAvKioKLSAgICogQWRkIGEgY29uZGl0aW9uIG9iamVjdCB0byB0aGUgcmVnaXN0cnkuCi0gICAqIEBwYXJhbSBjb25kaXRpb24gdGhlIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmRpdGlvbiggQ29uZGl0aW9uIGNvbmRpdGlvbiApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NvbW1hbmRXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ29tbWFuZFdpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjZmMzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ29tbWFuZFdpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeTsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1hbmRXaWRnZXRCaW5kaW5nIGV4dGVuZHMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgZXh0ZW5zaW9ucyB0byByZWdpc3RlciB0aGVpciB3aWRnZXRzIHdpdGgKLSAgICogQ29tbWFuZEZyYWdtZW50cwotICAgKiAKLSAgICogQHBhcmFtIHdpZGdldFJlZ2lzdHJ5Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKCBXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSApOwotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgZXh0ZW5pb25zIHRvIHJlZ2lzdGVyIHRoZSBkYXRhIG1hcHBpbmdzCi0gICAqIHRoYXQgdGhlaXIgd2lkZ2V0cyB1c2UuCi0gICAqIAotICAgKiBAcGFyYW0gZGF0YVJlZ2lzdHJ5Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyggRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkgKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGV4dGVuc2lvbnMgdG8gcmVnaXN0ZXIgY29uZGl0aW9uIG9iamVjdHMKLSAgICogdGhhdCBjb250cm9sIGlmIHRoZSB3aXphcmQgY2FuIGZpbmlzaCBvciBub3QuCi0gICAqIAotICAgKiBAcGFyYW0gY2FuRmluaXNoUmVnaXN0cnkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKCBDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NvbW1hbmRXaWRnZXRCaW5kaW5nTGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NvbW1hbmRXaWRnZXRCaW5kaW5nTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzE5ODA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9Db21tYW5kV2lkZ2V0QmluZGluZ0xpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLQotcHVibGljIGNsYXNzIENvbW1hbmRXaWRnZXRCaW5kaW5nTGlzdCBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIHByaXZhdGUgVmVjdG9yICAgICAgICAgICAgICAgICBiaW5kaW5nc187Ci0gIHByaXZhdGUgVmVjdG9yICAgICAgICAgICAgICAgICBmcmFnbWVudHNfOwotICBwcml2YXRlIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgZmFjdG9yeV87Ci0gIAotICAvKioKLSAgICogVGhpcyBDb21tYW5kV2lkZ2V0QmluZGluZyBjb21iaW5lcyBhIGxpc3Qgb2YgQ29tbWFuZFdpZGdldEJpbmRpbmdzLgotICAgKiBUaGVyZSBzaG91bGQgYmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYm90aCB0aGUgYmluZGluZ3MKLSAgICogcGFyYW1ldGVyIGFuZCB0aGUgZnJhZ21lbnRzIHBhcmFtZXRlci4gIEVudHJpZXMgaW4gZWl0aGVyIG9mIHRoZQotICAgKiBiaW5kaW5ncyBmb3IgZnJhZ21lbnRzIHZlY3RvcnMgYXJlIGFsbG93ZWQgdG8gYmUgbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5ncyAgIHRoZSBiaW5kaW5ncyB0byBjb21iaW5lLgotICAgKiBAcGFyYW0gZnJhZ21lbnRzICBUaGVzZSBmcmFnbWVudHMgd2lsbCBiZSBpbnRlcnNwZXJzZWQgd2l0aCB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGJpbmRpbmcuICBUaGUgZmlyc3QKLSAgICogICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgd2lsbCBiZSBwdXQgYmVmb3JlIHRoZSBmcmFnbWVudCBmcm9tIHRoZQotICAgKiAgICAgICAgICAgICAgICAgICBmaXJzdCBiaW5kaW5nLiAgRm9sbG93aW5nIHRoaXMgd2lsbCBiZSB0aGUgc2Vjb25kCi0gICAqICAgICAgICAgICAgICAgICAgIGZyYWdtZW50IGZyb20gdGhlIGZyYWdtZW50cyB2ZWN0b3IgYW5kIHRoZW4gdGhlCi0gICAqICAgICAgICAgICAgICAgICAgIHNlY29uZCBmcmFnbWVudCBmcm9tIHRoZSBiaW5kaW5ncyB2ZWN0b3IsIGV0Yy4KLSAgICovCi0gIHB1YmxpYyBDb21tYW5kV2lkZ2V0QmluZGluZ0xpc3QoIFZlY3RvciBiaW5kaW5ncywgVmVjdG9yIGZyYWdtZW50cyApCi0gIHsKLSAgICBiaW5kaW5nc18gID0gYmluZGluZ3M7IAotICAgIGZyYWdtZW50c18gPSBmcmFnbWVudHM7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSAKLSAgewotICAgIGludCBsZW5ndGggPSBiaW5kaW5nc18uc2l6ZSgpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcgPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpYmluZGluZ3NfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAgIAotICAgICAgaWYoIGJpbmRpbmcgIT0gbnVsbCApIGJpbmRpbmcucmVnaXN0ZXJDYW5GaW5pc2goIGNhbkZpbmlzaFJlZ2lzdHJ5ICk7Ci0gICAgfQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotICB7Ci0gICAgaW50IGxlbmd0aCA9IGJpbmRpbmdzXy5zaXplKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgQ29tbWFuZFdpZGdldEJpbmRpbmcgYmluZGluZyA9IChDb21tYW5kV2lkZ2V0QmluZGluZyliaW5kaW5nc18uZWxlbWVudEF0KCBpbmRleCApOwotICAgICAgaWYoIGJpbmRpbmcgIT0gbnVsbCApIGJpbmRpbmcucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeSApOwotICAgIH0KLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KSAKLSAgewotICAgIGludCBsZW5ndGggPSBiaW5kaW5nc18uc2l6ZSgpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcgPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpYmluZGluZ3NfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAgIGlmKCBiaW5kaW5nICE9IG51bGwgKSBiaW5kaW5nLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoIHdpZGdldFJlZ2lzdHJ5ICk7Ci0gICAgfQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIAotICB7Ci0gICAgaWYoIGZhY3RvcnlfID09IG51bGwgKQotICAgIHsKLSAgICAgIGZhY3RvcnlfID0gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNlcXVlbmNlRnJhZ21lbnQgZnJhZ21lbnRMaXN0ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgICAgICAgIGludCAgICAgICAgICAgICAgbGVuZ3RoICAgICAgID0gYmluZGluZ3NfLnNpemUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCA9IChDb21tYW5kRnJhZ21lbnQpZnJhZ21lbnRzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBpZiggZnJhZ21lbnQgIT0gbnVsbCApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudExpc3QuYWRkKCBmcmFnbWVudCApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBDb21tYW5kV2lkZ2V0QmluZGluZyBiaW5kaW5nID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKWJpbmRpbmdzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBpZiggYmluZGluZyAhPSBudWxsICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYWdtZW50TGlzdC5hZGQoIGJpbmRpbmcuY3JlYXRlKCkuY3JlYXRlKCkgKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnRMaXN0OwotICAgICAgICAgIH0KLSAgICAgICAgfTsgCi0gICAgfQotICAgIAotICAgIHJldHVybiBmYWN0b3J5XzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0N1cnJlbnRQYWdlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0N1cnJlbnRQYWdlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzg1NWQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9DdXJyZW50UGFnZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSAqIFRoaXMgQ29tbWFuZCBjYW4gYmUgdXNlZCB0byBnZXQgdGhlIGN1cnJlbnQgcGFnZS4KLSAqIFVzZSBvZiB0aGlzIGNsYXNzIGlzIG5vdCByZWNvbW1lbmRlZC4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDdXJyZW50UGFnZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyXzsKLSAgCi0gIHB1YmxpYyBDdXJyZW50UGFnZUNvbW1hbmQoIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyICkKLSAgewotICAgIHBhZ2VNYW5hZ2VyXyA9IHBhZ2VNYW5hZ2VyOwotICB9Ci0gIAotICBwdWJsaWMgSVdpemFyZFBhZ2UgZ2V0Q3VycmVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHBhZ2VNYW5hZ2VyXy5nZXRDdXJyZW50UGFnZSgpOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EYXRhT2JqZWN0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0RhdGFPYmplY3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NTBhZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0RhdGFPYmplY3RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0gKiBUaGlzIENvbW1hbmQgY2FuIGJlIHVzZSB0byBnZXQgdGhlIHJlc3VsdGluZyBkYXRhIG9iamVjdCBmb3IKLSAqIHRoaXMgd2l6YXJkLgotICoKLSAqLwotcHVibGljIGNsYXNzIERhdGFPYmplY3RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBPYmplY3QgZGF0YU9iamVjdF87Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREYXRhT2JqZWN0KCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGRhdGFPYmplY3RfID0gb2JqZWN0OwotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGdldERhdGFPYmplY3QoKQotICB7Ci0gICAgcmV0dXJuIGRhdGFPYmplY3RfOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EaWFsb2dEYXRhRXZlbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRGlhbG9nRGF0YUV2ZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmZkMTlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EaWFsb2dEYXRhRXZlbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLQotLyoqCi0gKiBEeW5hbWljIHdpemFyZCBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3YW50IHRvIGNyZWF0ZSBkaWZmZXJlbnQKLSAqIGtpbmRzIG9mIHdpemFyZCBwYWdlcyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KLSAqIFRoZSBXaXphcmRQYWdlRmFjdG9yeSByZXR1cm5zIGEgY2xhc3Mgb2YgdGhpcyB0eXBlLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBEaWFsb2dEYXRhRXZlbnRzCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBXaWRnZXREYXRhRXZlbnRzIG9iamVjdCBjcmVhdGVkIGJ5IHRoZSBhZGRDb250cm9scwotICAgKiBtZXRob2Qgb2YgYSBXaWRnZXRDb250cmlidXRvci4KLSAgICovCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGdldERhdGFFdmVudHMoKTsKLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGlzIHdpemFyZCBwYWdlIGlzIGNvbXBsZXRlLiAKLSAgICoKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EeW5hbWljV2l6YXJkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRHluYW1pY1dpemFyZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmE3YTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EeW5hbWljV2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwODIyICAgMTU0NzUwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTI5ICAgMTg3NzgwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXhlY3V0YWJsZUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YUZsb3dNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5FbnZpcm9ubWVudFVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnJlZ2lzdHJ5LldpZGdldFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gYWRkIGR5bmFtaWMgd2l6YXJkcyBpbnRvIEVjbGlwc2UuICBXaGVuIGFkZGluZwotICogYSBkeW5hbWljIHdpemFyZCBpbnRvIGVjbGlwc2UgdHdvIGVudHJpZXMgbmVlZCB0byBiZSBtYWRlIGluIHRoZSBwbHVnaW4ueG1sCi0gKiBmaWxlLiAgVGhpcyBmaXJzdCBlbnRyeSB0ZWxscyBFY2xpcHNlIHRoYXQgYSBuZXcgd2l6YXJkIHNob3VsZCBiZSBhZGRlZAotICogYW5kIGl0IHJlZmVyZW5jZXMgdGhpcyBjbGFzcy4gIFRoZSBzZWNvbmQgZW50cnkgc3BlY2lmaWVzIGRldGFpbGVkIGluZm9ybWF0aW9uCi0gKiB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB3aXphcmQgdG8gYmUgYWRkZWQuICBUaGVzZSB0d28gcGx1Z2luLnhtbCBlbnRyaWVzCi0gKiBhcmUgbGlua2VkIHRvZ2V0aGVyIHZpYSB0aGVpciBpZCBhdHRyaWJ1dGVzLiAgRm9yIGV4YW1wbGUgaGVyZSBpcyBhbgotICogZW50cnkgdGhhdCByZWdpc3RlcnMgYSBuZXcgd2l6YXJkIHdpdGggZWNsaXBzZS4gIE5vdGUgdGhlIGNsYXNzIGF0dHJpYnV0ZQotICogcmVmZXJlbmNlcyB0aGlzIGNsYXNzLgotICogPHByZT4KLSAqICAgJmx0O2V4dGVuc2lvbgotICogICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIiZndDsKLSAqICAgICAmbHQ7d2l6YXJkCi0gKiAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfQ0xJRU5UIgotICogICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3Rvb2wxNi9uZXdjbGllbnRfd2Vic2Vydl93aXouZ2lmIgotICogICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotICogICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICogICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiJmd0OwotICogICAgICAgICZsdDtkZXNjcmlwdGlvbiZndDsKLSAqICAgICAgICAgICAlUExVR0lOX05FV19XSVpBUkRfREVTQ19XU19DTElFTlQKLSAqICAgICAgICAmbHQ7L2Rlc2NyaXB0aW9uJmd0OwotICogICAgICAgICZsdDtzZWxlY3Rpb24KLSAqICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIiZndDsKLSAqICAgICAgICAmbHQ7L3NlbGVjdGlvbiZndDsKLSAqICAgICAmbHQ7L3dpemFyZCZndDsKLSAqICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0gKgotICogPC9wcmU+Ci0gKiBIZXJlIGlzIHRoZSBkeW5hbWljV2l6YXJkIGVudHJ5IGZvciB0aGlzIHBhcnRpY3VsYXIgd2l6YXJkLiAgVGhpcyBpZCBhdHRyaWJ1dGVzCi0gKiBsaW5rIHRoZXNlIHR3byBlbnRyaWVzIHRvZ2V0aGVyLiAgVGhlIGNsYXNzIGF0dHJpYnV0ZSBtdXN0IHNwZWNpZnkgYSBjbGFzcyB0aGF0Ci0gKiBpbXBsZW1lbnRzIHRoZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyBpbnRlcmZhY2UuICBUaGlzCi0gKiBpbnRlcmZhY2Ugc3BlY2lmaWVzIHdoYXQgdGhlIFVJIHNob3VsZCBsb29rIGxpa2UgYW5kIHRoZSBjb21tYW5kcyB0aGUgc2hvdWxkCi0gKiBiZSBleGVjdXRlZCBpbiB0aGUgd2l6YXJkLgotICogCi0gKiA8cHJlPgotICogICAmbHQ7ZXh0ZW5zaW9uCi0gKiAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIiZndDsKLSAqICAgICAmbHQ7ZHluYW1pY1dpemFyZAotICogICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzY2xpZW50X3dpei5naWYiCi0gKiAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuQ2xpZW50V2lkZ2V0QmluZGluZyIKLSAqICAgICAgICAgICB0aXRsZT0iJVdJWkFSRF9USVRMRV9XU0MiCi0gKiAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCImZ3Q7Ci0gKiAgICAgJmx0Oy9keW5hbWljV2l6YXJkJmd0OwotICogICAmbHQ7L2V4dGVuc2lvbiZndDsKLSAqIDwvcHJlPgotICoKLSAqLwotcHVibGljIGNsYXNzIER5bmFtaWNXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkLCBJRXhlY3V0YWJsZUV4dGVuc2lvbgotewotICBwcml2YXRlICAgU3RyaW5nICAgICAgICAgICAgICAgICAgaWNvbkJhbm5lck5hbWVfOwotICBwcml2YXRlICAgQnVuZGxlICAgICAgICAgICAgICAgICAgYnVuZGxlXzsKLSAgcHJpdmF0ZSAgIFNpbXBsZUNhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5XzsgCi0gIHByaXZhdGUgICBTdHJpbmcgICAgICAgICAgICAgICAgICB3aXphcmRUaXRsZV87Ci0gIHByaXZhdGUgICBEYXRhT2JqZWN0Q29tbWFuZCAgICAgICBkYXRhT2JqZWN0Q29tbWFuZF8gPSBudWxsOwotICBwcml2YXRlICAgV2l6YXJkUGFnZU1hbmFnZXIgICAgICAgcGFnZU1hbmFnZXJfOwotICAKLSAgcHJvdGVjdGVkIElDb25maWd1cmF0aW9uRWxlbWVudCAgIHdpemFyZEVsZW1lbnRfOwotICBwcm90ZWN0ZWQgSUNvbmZpZ3VyYXRpb25FbGVtZW50ICAgb3JpZ2luYWxFbGVtZW50XzsKLSAgcHJvdGVjdGVkIENvbW1hbmRXaWRnZXRCaW5kaW5nICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXzsKLSAgCi0gIHB1YmxpYyBEeW5hbWljV2l6YXJkKCkKLSAgewotCXNldE5lZWRzUHJvZ3Jlc3NNb25pdG9yKHRydWUpOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIER5bmFtaWMgd2l6YXJkIGlzIGNyZWF0ZWQgYnkgZWNsaXBzZS4KLSAgICogV2UgbmVlZCB0byBmaW5kIGEgZHluYW1pY1dpemFyZCBleHRlbnNpb24gcG9pbnQgdGhhdCBtYXRjaGVzIHRoZSBpZAotICAgKiBmb3IgdGhpcyB3aXphcmQuICBPbmNlIHRoZSBleHRlbnNpb24gcG9pbnQgaXMgZm91bmQgaXQgd2lsbCBjb250YWluCi0gICAqIGEgcmVmZXJlbmNlIHRvIGEgQ29tbWFuZFdpZGdldEJpbmRpbmcgY2xhc3Mgd2hpY2ggZGVmaW5lcyB0aGUgd2lkZ2V0cyAKLSAgICogYW5kIGNvbW1hbmRzIGZvciB0aGlzIHdpemFyZC4KLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeGVjdXRhYmxlRXh0ZW5zaW9uI3NldEluaXRpYWxpemF0aW9uRGF0YShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25EYXRhKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICAgIGRhdGEgKQotICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgd2l6YXJkSWQgICA9IGNvbmZpZy5nZXRBdHRyaWJ1dGUoICJpZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHNldEluaXRpYWxEYXRhKCB3aXphcmRJZCApOwotICAgIG9yaWdpbmFsRWxlbWVudF8gPSBjb25maWc7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIER5bmFtaWMgV2l6YXJkIGlzIGJlaW5nCi0gICAqIGxhdW5jaGVkIHRocm91Z2ggc29tZSBvdGhlciBtZWNoYW5pc2Ugb3RoZXIgdGhhbiB0aGUgRWNsaXBzZSBOZXcgV2l6YXJkCi0gICAqIG1lY2hhbmlzbS4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nICAgICAgICB0aGUgY29tbWFuZCB3aWRnZXQgYmluZGluZyBmb3IgdGhpcyB3aXphcmQuCi0gICAqIEBwYXJhbSBkZXNjcmlwdG9yICAgICB0aGUgcGx1Z2luIGRlc2NyaXB0b3Igd2hlcmUgdGhlIGljb24gYmFubmVyIGlzCi0gICAqICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkLgotICAgKiBAcGFyYW0gaWNvbkJhbm5lclBhdGggdGhlIGljb24gYmFubmVyIHBhdGggZm9yIHRoaXMgd2l6YXJkLiAgVGhlIHBhdGgKLSAgICogICAgICAgICAgICAgICAgICAgICAgIGlzIHJlbGF0aXZlIHRvIHRoZSBwbHVnaW4gc3BlY2lmaWVkIGJ5IHRoZSAKLSAgICogICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgcGFyYW1ldGVyLgotICAgKiBAcGFyYW0gd2l6YXJkVGl0bGUgICAgdGhlIHdpemFyZCB0aXRsZQotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQgVXNlIGVpdGhlciBzZXRJbml0aWFsRGF0YSh3aXphcmRJZCkgb3IKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBzZXRJbml0aWFsRGF0YSh3aXphcmRJZCwgYnVuZGxlLCBpY29uQmFubmVyUGF0aCwgd2l6YXJkVGl0bGUgKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbERhdGEoIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdW5kbGUgICAgICAgICAgICAgICBidW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICBpY29uQmFubmVyUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgIHdpemFyZFRpdGxlICkKLSAgewotICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXyA9IGJpbmRpbmc7Ci0gICAgYnVuZGxlXyAgICAgICAgICAgICAgID0gYnVuZGxlOwotICAgIGljb25CYW5uZXJOYW1lXyAgICAgICA9IGljb25CYW5uZXJQYXRoOwotICAgIHdpemFyZFRpdGxlXyAgICAgICAgICA9IHdpemFyZFRpdGxlOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgaW5pdGlhbCBkYXRhIGJhc2VkIG9uIHRoZSBkeW5hbWljIHdpemFyZCBpZC4KLSAgICogCi0gICAqIEBwYXJhbSB3aXphcmRJZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbERhdGEoIFN0cmluZyB3aXphcmRJZCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBzZXRJbml0aWFsRGF0YSh3aXphcmRJZCwgbnVsbCwgbnVsbCwgbnVsbCApOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgaW5pdGlhbCBkYXRhIGJhc2VkIG9uIHRoZSBkeW5hbWljIHdpemFyZCBpZC4KLSAgICogCi0gICAqIEBwYXJhbSB3aXphcmRJZCB0aGUgSUQgb2YgdGhlIHdpemFyZC4KLSAgICogQHBhcmFtIGJ1bmRsZSB0aGUgYnVuZGxlIHVzZWQgdG8gZmluZCBhbiBpY29uIGJhbm5lci4gIENhbiBiZSBudWxsIGlmCi0gICAqIG5vIGljb24gYmFubmVyIGlzIHNwZWNpZmllZC4KLSAgICogQHBhcmFtIGljb25CYW5uZXJQYXRoIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBidW5kbGUgc3BlY2lmaWVkLgotICAgKiBAcGFyYW0gd2l6YXJkVGl0bGUgdGhlIHRpdGxlIG9mIHRoZSB3aXphcmQuCi0gICAqIAotICAgKiBOb3RlOiBub3JtYWxseSB0aGUgd2l6YXJkIGFzc29jaWF0ZWQgd2l0aCBhIHdpemFyZElkIHdpbGwgaGF2ZSBhbgotICAgKiBpY29uIGJhbm5lciBhbmQgYSB0aXRsZS4gIFRoZSBwYXJhbWV0ZXJzIG9uIHRoaXMgbWV0aG9kIGFsbG93IHRoZSBjYWxsZXIKLSAgICogdG8gb3ZlcnJpZGUgdGhlc2UgdmFsdWVzLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbERhdGEoIFN0cmluZyB3aXphcmRJZCwgQnVuZGxlIGJ1bmRsZSwgU3RyaW5nIGljb25CYW5uZXJQYXRoLCBTdHJpbmcgd2l6YXJkVGl0bGUgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5ICAgIHJlZ2lzdHJ5ICAgICAgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElFeHRlbnNpb25Qb2ludCAgICAgICBwb2ludCAgICAgICAgID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIik7IC8vJE5PTi1OTFMtMSQKLSAgICBJRXh0ZW5zaW9uW10gICAgICAgICAgZXh0ZW5zaW9ucyAgICA9IHBvaW50LmdldEV4dGVuc2lvbnMoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGluZGV4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gZXh0ZW5zaW9uc1tpbmRleF0uZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICAKLSAgICAgIGlmKCBlbGVtZW50cy5sZW5ndGggPT0gMSAmJiBlbGVtZW50c1swXS5nZXROYW1lKCkuZXF1YWxzKCAiZHluYW1pY1dpemFyZCIpICkgIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlkID0gZWxlbWVudHNbMF0uZ2V0QXR0cmlidXRlKCAiaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCi0gICAgICAgIGlmKCBpZCAhPSBudWxsICYmIGlkLmVxdWFscyggd2l6YXJkSWQgKSApCi0gICAgICAgIHsKLSAgICAgICAgICB3aXphcmRFbGVtZW50XyA9IGVsZW1lbnRzWzBdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgICAgIAotICAgIGJ1bmRsZV8gICAgICAgICA9IGJ1bmRsZTsKLSAgICBpY29uQmFubmVyTmFtZV8gPSBpY29uQmFubmVyUGF0aDsKLSAgICB3aXphcmRUaXRsZV8gICAgPSB3aXphcmRUaXRsZTsKLSAgICAKLSAgICBpZiggd2l6YXJkRWxlbWVudF8gPT0gbnVsbCApCi0gICAgewotICAgICAgU3RhdHVzIHN0YXR1cyA9IG5ldyBTdGF0dXMoIFN0YXR1cy5FUlJPUiwgImlkIiwgMCwgTkxTLmJpbmQoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLk1TR19FUlJPUl9XSVpBUkRfSURfTk9UX0ZPVU5ELCBuZXcgU3RyaW5nW117IHdpemFyZElkfSkgLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKCBzdGF0dXMgKTsKLSAgICB9Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZWNsaXBzZSBmcmFtZXdvcmsgdG8gaW5pdGlhbGl6ZSB0aGUKLSAgICogd2l6YXJkLiAKLSAgICogCi0gICAqIE5vdGU6IGlmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBwcm9ncmFtYXRpY2FsbHkoaWUuIG5vdCBieSB0aGUgZWNsaXBzZQotICAgKiBmcmFtZXdvcmsuKSBvbmUgb2YgdGhlIHNldEluaXRhbERhdGEgbWV0aG9kcyBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoaXMKLSAgICogbWV0aG9kIGlzIGludm9rZWQuCi0gICAqIAotICAgKiBAcGFyYW0gd29ya2JlbmNoIHRoZSBlY2xpcHNlIHdvcmtiZW5jaAotICAgKiBAcGFyYW0gc2VsZWN0aW9uIHRoZSBpbml0aWFsIHNlbGVjdGlvbiB0aGF0IHRoZSB1c2VyIGhhcyBtYWRlIHdpdGhpbgotICAgKiAgICAgICAgICAgICAgICAgIGVjbGlwc2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0ICggSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0gIHsgICAgCi0gICAgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCBjb250ZXh0ICAgICAgICA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLSAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgIGhhbmRsZXIgICAgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgICBlbnZpcm9ubWVudCAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwsIGNvbnRleHQsIGhhbmRsZXIgKTsKLSAgICAKLSAgICBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCBkYXRhUmVnaXN0cnlfICAgPSBuZXcgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwoKTsKLSAgICBTaW1wbGVXaWRnZXRSZWdpc3RyeSAgICB3aWRnZXRSZWdpc3RyeV8gPSBuZXcgU2ltcGxlV2lkZ2V0UmVnaXN0cnkoKTsgIAotICAgIERhdGFGbG93TWFuYWdlciAgICAgICAgIGRhdGFNYW5hZ2VyICAgICA9IG5ldyBEYXRhRmxvd01hbmFnZXIoIGRhdGFSZWdpc3RyeV8sIGVudmlyb25tZW50ICk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYoIHdpemFyZEVsZW1lbnRfICE9IG51bGwgKQotICAgICAgewotICAgICAgICBpZiggY29tbWFuZFdpZGdldEJpbmRpbmdfID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgY29tbWFuZFdpZGdldEJpbmRpbmdfID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKXdpemFyZEVsZW1lbnRfLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggYnVuZGxlXyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGJ1bmRsZV8gPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIHdpemFyZEVsZW1lbnRfLmdldE5hbWVzcGFjZSgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBpY29uQmFubmVyTmFtZV8gPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBpY29uQmFubmVyTmFtZV8gPSB3aXphcmRFbGVtZW50Xy5nZXRBdHRyaWJ1dGUoICJpY29uYmFubmVyIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCB3aXphcmRUaXRsZV8gPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICB3aXphcmRUaXRsZV8gPSB3aXphcmRFbGVtZW50Xy5nZXRBdHRyaWJ1dGUoICJ0aXRsZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLQlkYXRhT2JqZWN0Q29tbWFuZF8gPSBuZXcgRGF0YU9iamVjdENvbW1hbmQoKTsKLSAgICBjYW5GaW5pc2hSZWdpc3RyeV8gPSBuZXcgU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkoKTsgCi0gICAgcGFnZU1hbmFnZXJfICAgICAgID0gbmV3IFdpemFyZFBhZ2VNYW5hZ2VyKCB3aWRnZXRSZWdpc3RyeV8sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0V2l6YXJkUGFnZUZhY3RvcnkoKSwgCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hbmFnZXIsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCApOyAgCi0gICAgCi0gICAgcGFnZU1hbmFnZXJfLnNldFJvb3RGcmFnbWVudCggZ2V0Um9vdEZyYWdtZW50KCBzZWxlY3Rpb24sIHBhZ2VNYW5hZ2VyXyApICk7Ci0gICAgCi0gICAgY29tbWFuZFdpZGdldEJpbmRpbmdfLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoIHdpZGdldFJlZ2lzdHJ5XyApOwotICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5XyApOwotICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXy5yZWdpc3RlckNhbkZpbmlzaCggY2FuRmluaXNoUmVnaXN0cnlfICk7Ci0gICAgICAgIAotICAgIC8vIElmIGEgcGFnZSBpcyBub3QgY29tcGxldGUgZW5zdXJlIHRoYXQgY2FuRmluaXNoIGlzIGZhbHNlLgotICAgIENvbmRpdGlvbiBjYW5GaW5pc2ggPSBuZXcgQ29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV2l6YXJkUGFnZSBjdXJyZW50UGFnZSA9IHBhZ2VNYW5hZ2VyXy5nZXRDdXJyZW50UGFnZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBhZ2UgIT0gbnVsbCA/IGN1cnJlbnRQYWdlLmlzUGFnZUNvbXBsZXRlKCkgOiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsgCi0gICAgCi0gICAgY2FuRmluaXNoUmVnaXN0cnlfLmFkZCggY2FuRmluaXNoICk7Ci0gICAgCi0gICAgLy8gU2V0IHRoYXQgd2UgbmVlZCBhIHByb2dyZXNzIG1vbml0b3IuCi0gICAgc2V0TmVlZHNQcm9ncmVzc01vbml0b3IoIHRydWUgKTsKLSAgICAKLSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbmV4dC9iYWNrIGJ1dHRvbnMgYXJlIGVuYWJsZWQuCi0Jc2V0Rm9yY2VQcmV2aW91c0FuZE5leHRCdXR0b25zKCB0cnVlICk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBpY29uIGJhbm5lciBpZiBzcGVjaWZpZWQuCi0gICAgaWYoIGljb25CYW5uZXJOYW1lXyAhPSBudWxsICYmIGljb25CYW5uZXJOYW1lXy5sZW5ndGgoKSA+IDAgKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBVUkwgaW5zdGFsbFVSTCAgICAgICAgPSBidW5kbGVfLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgVVJMIGltYWdlVVJMICAgICAgICAgID0gbmV3IFVSTChpbnN0YWxsVVJMLCBpY29uQmFubmVyTmFtZV8gKTsKLSAgICAgICAgSW1hZ2VEZXNjcmlwdG9yIGltYWdlID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwoaW1hZ2VVUkwpOwotICAgICAgICAKLSAgICAgICAgaWYoIGltYWdlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoIGltYWdlICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYoIHdpemFyZFRpdGxlXyAhPSBudWxsICYmIHdpemFyZFRpdGxlXy5sZW5ndGgoKSA+IDAgKQotICAgIHsKLSAgICAgIHNldFdpbmRvd1RpdGxlKCB3aXphcmRUaXRsZV8gKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8vIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMuCi0gIHByb3RlY3RlZCBXaXphcmRQYWdlRmFjdG9yeSBnZXRXaXphcmRQYWdlRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNpbXBsZVBhZ2VGYWN0b3J5KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGFnZXMgYXJlIGNvbXBsZXRlLgotICAqIEByZXR1cm4gVHJ1ZSBpZiBhbGwgcGFnZXMgYXJlIGNvbXBsZXRlLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBjYW5GaW5pc2ggKCkKLSAgewotICAJaW50ICAgICBsZW5ndGggPSBjYW5GaW5pc2hSZWdpc3RyeV8uc2l6ZSgpOwotICAJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAJCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgQ29uZGl0aW9uIGNvbmRpdGlvbiA9IChDb25kaXRpb24pY2FuRmluaXNoUmVnaXN0cnlfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAKLSAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbi5ldmFsdWF0ZSgpOwotICAgICAgCi0gICAgICBpZiggIXJlc3VsdCApIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBwYWdlIGZvciB0aGlzIHdpemFyZC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBwYWdlIGZvciB0aGlzIHdpemFyZC4KLSAgKiovCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXRTdGFydGluZ1BhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHBhZ2VNYW5hZ2VyXy5nZXRTdGFydGluZ1BhZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgICogUmV0dXJucyB0aGUgbmV4dCBwYWdlIGFmdGVyIHBhZ2UgYW5kCi0gICAgKiBydW5zIHRoZSBhcHByb3ByaWF0ZSB0YXNrcy4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHRoZSBuZXh0IHBhZ2UgYWZ0ZXIgcGFnZS4KLSAgKiovCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZSggSVdpemFyZFBhZ2UgcGFnZSApCi0gIHsgICAKLSAgICByZXR1cm4gcGFnZU1hbmFnZXJfLmdldE5leHRQYWdlKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoICgpCi0gIHsgCi0gICAgYm9vbGVhbiByZXN1bHQgPSBwYWdlTWFuYWdlcl8ucGVyZm9ybUZpbmlzaCgpOwotICAgIAotICAgIGlmKCByZXN1bHQgKSBjbGVhbnVwKCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBVbmRvIGZyYWdtZW50cwotICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtQ2FuY2VsICgpCi0gIHsKLSAgCWJvb2xlYW4gcmVzdWx0ID0gcGFnZU1hbmFnZXJfLnBlcmZvcm1DYW5jZWwoKTsKLSAgCQotICAJaWYoIHJlc3VsdCApIGNsZWFudXAoKTsKLSAgCQotICAJcmV0dXJuIHJlc3VsdDsKLSAgfSAgCi0gICAgICAKLSAgcHVibGljIE9iamVjdCBnZXREYXRhT2JqZWN0KCkKLSAgewotICAgIHJldHVybiBkYXRhT2JqZWN0Q29tbWFuZF8uZ2V0RGF0YU9iamVjdCgpOyAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBDb21tYW5kRnJhZ21lbnQgZ2V0Um9vdEZyYWdtZW50KCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyICkKLSAgewotICAgIFNlcXVlbmNlRnJhZ21lbnQgcm9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgCi0gICAgcm9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlbGVjdGlvbkNvbW1hbmQoIHNlbGVjdGlvbiApLCAiIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICByb290LmFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ3VycmVudFBhZ2VDb21tYW5kKCBwYWdlTWFuYWdlciApLCAiIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICByb290LmFkZCggY29tbWFuZFdpZGdldEJpbmRpbmdfLmNyZWF0ZSgpLmNyZWF0ZSgpICk7Ci0Jcm9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggZGF0YU9iamVjdENvbW1hbmRfLCAiIiApKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHJldHVybiByb290OwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGdldENvbmZpZ0VsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdpemFyZEVsZW1lbnRfOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgZnJlZXMgdXAgdGhlIG1lbW9yeSBoZWxkIGJ5IHRoaXMgb2JqZWN0LgotICAgKgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNsZWFudXAoKQotICB7Ci0JICBpY29uQmFubmVyTmFtZV8gICAgICAgPSBudWxsOwotCSAgYnVuZGxlXyAgICAgICAgICAgICAgID0gbnVsbDsKLQkgIGNhbkZpbmlzaFJlZ2lzdHJ5XyAgICA9IG51bGw7IAotCSAgcGFnZU1hbmFnZXJfICAgICAgICAgID0gbnVsbDsKLQkgIHdpemFyZFRpdGxlXyAgICAgICAgICA9IG51bGw7Ci0JICBjb21tYW5kV2lkZ2V0QmluZGluZ18gPSBudWxsOwotCSAgV2lkZ2V0UmVnaXN0cnkuaW5pdGlhbGl6ZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9JTmFtZWRXaWRnZXRDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWJhZjMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9JTmFtZWRXaWRnZXRDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBXaWRnZXRDb250cmlidXRvciBmb3IgdGhpcyBOYW1lZCB3aWRnZXQuCi0gICAqLwotICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGRlc2NyaXB0aW9uIHRoYXQgbWlnaHQgYmUgZGlzcGxheWVkIG9uCi0gICAqIGEgd2l6YXJkIHBhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGl0bGUgdGhhdCBtYXkgYmUgZGlzcGxheWVkIG9uIAotICAgKiBhIHdpemFyZCBwYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNGZmMDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0lOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi1wdWJsaWMgaW50ZXJmYWNlIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSAKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IG5hbWVkIHdpZGdldC4KLSAgICovCi0gIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldEZpcnN0TmFtZWRXaWRnZXQoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHdpZGdldENvbnRyaWJ1dG9yCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBuYW1lZCB3aWRnZXQgYWZ0ZXIgdGhlIG9uZSBzcGVjaWZpZWQuCi0gICAqLwotICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXROZXh0TmFtZWRXaWRnZXQoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldENvbnRyaWJ1dG9yICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBieSBleHRlbmlvbnMgdG8gcmVnaXN0ZXIgdGhlIGRhdGEgbWFwcGluZ3MKLSAgICogdGhhdCB0aGVpciB3aWRnZXRzIHVzZS4KLSAgICogCi0gICAqIEBwYXJhbSBkYXRhUmVnaXN0cnkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSApOwotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1BhZ2VJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ODQzNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1BhZ2VJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLQotCi1wdWJsaWMgY2xhc3MgUGFnZUluZm8gCi17Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgIHBhZ2VOYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlXzsKLSAgcHJpdmF0ZSBXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeV87Ci0gIAotICBwdWJsaWMgUGFnZUluZm8oIFN0cmluZyAgICAgICAgICAgICAgICAgICBwYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlLAotICAgICAgICAgICAgICAgICAgIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSB3aWRnZXRGYWN0b3J5ICkKLSAgewotICAgIHBhZ2VOYW1lXyAgICAgICA9IHBhZ2VOYW1lOwotICAgIHBhZ2VUaXRsZV8gICAgICA9IHBhZ2VUaXRsZTsKLSAgICB3aWRnZXRGYWN0b3J5XyAgPSB3aWRnZXRGYWN0b3J5OwotICB9ICAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldFBhZ2VOYW1lKCkKLSAgewotICAgIHJldHVybiBwYWdlTmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFnZVRpdGxlKCkKLSAgewotICAgIHJldHVybiBwYWdlVGl0bGVfOwotICB9Ci0gIAotICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGdldFdpZGdldEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIHdpZGdldEZhY3RvcnlfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvUGFnZVdpemFyZERhdGFFdmVudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlV2l6YXJkRGF0YUV2ZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWI2NWYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlV2l6YXJkRGF0YUV2ZW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOwotCi0vKioKLSAqIER5bmFtaWMgd2l6YXJkIGltcGxlbWVudGF0aW9ucyB0aGF0IHdhbnQgdG8gY3JlYXRlIGRpZmZlcmVudAotICoga2luZHMgb2Ygd2l6YXJkIHBhZ2VzIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgotICogVGhlIFdpemFyZFBhZ2VGYWN0b3J5IHJldHVybnMgYSBjbGFzcyBvZiB0aGlzIHR5cGUuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGV4dGVuZHMgSVdpemFyZFBhZ2UKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIFdpZGdldERhdGFFdmVudHMgb2JqZWN0IGNyZWF0ZWQgYnkgdGhlIGFkZENvbnRyb2xzCi0gICAqIG1ldGhvZCBvZiBhIFdpZGdldENvbnRyaWJ1dG9yLgotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgZ2V0RGF0YUV2ZW50cygpOwotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGF0IHRoaXMgd2l6YXJkIHBhZ2UgaXMgY29tcGxldGUuIAotICAgKgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TZWxlY3Rpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2VsZWN0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjEzYmNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TZWxlY3Rpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLS8qKgotICogVGhpcyBTZWxlY3Rpb25Db21tYW5kIGlzIGV4ZWN1dGUgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZQotICogZHluYW1pYyB3aXphcmQuICBDb21tYW5kcyBleGVjdXRlZCBpbiB0aGUgd2l6YXJkIHRoYXQgbmVlZAotICogdGhlIGluaXRpYWwgc2VsZWN0aW9uIGNhbiBnZXQgaXQgdGhyb3VnaCBhIGRhdGEgbWFwcGluZyBmcm9tIAotICogdGhpcyBjb21tYW5kIHRvIHRoZSBjb21tYW5kIHRoYXQgbmVlZHMgaXQuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU2VsZWN0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uXzsKLSAgCi0gIHB1YmxpYyBTZWxlY3Rpb25Db21tYW5kKCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0gICAgc2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsgIAotICB9Ci0gIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0SW5pdGlhbFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDYW5GaW5pc2hSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTk5ZGM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDYW5GaW5pc2hSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci0KLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkgZXh0ZW5kcyBWZWN0b3IgaW1wbGVtZW50cyBDYW5GaW5pc2hSZWdpc3RyeQotewotCi0gIC8qKgotICAgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1NzI4NTgzNzg3MDc0MTMwNUw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVudi53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5I2FkZENvbmRpdGlvbihvcmcuZWNsaXBzZS5lbnYuY29tbWFuZC5mcmFnbWVudC5Db25kaXRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRDb25kaXRpb24oQ29uZGl0aW9uIGNvbmRpdGlvbikKLSAgewotICAgIGFkZCggY29uZGl0aW9uICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWFhN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNzMwICAgMTk3MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFBhc3MgcHJvZ3Jlc3MgbW9uaXRvciB0byB1bmRvIGNvbW1hbmRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5GcmFnbWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIG1hbmFnZXMgdGhlIGV4ZWN1dGlvbiBvZiBDb21tYW5kcyBpbiBhIGZsb3cgb2YgQ29tbWFuZEZyYWdtZW50cy4KLSAqIFRoZSBidWxrIG9mIHRoaXMgd29yayBpcyBkb25lIGJ5IHRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUuICBUaGUgbWFpbiBqb2Igb2YKLSAqIHRoaXMgY2xhc3MgaXMgcnVuIHRoZSBmcmFnbWVudHMgaW4gYSBwYXJ0aWN1bGFyIHRyYW5zYWN0aW9uYWwgZW52aXJvbm1lbnQuCi0gKiBBIGZyYWdtZW50IGhhcyBhIG1ldGhvZCBjYWxsZWQgZG9Ob3RSdW5JblRyYW5zYWN0aW9uIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCi0gKiBpZiBpdHMgY29tbWFuZHMgc2hvdWxkIGJlIHJ1biBpbiBhIHRyYW5zYWN0aW9uIG9yIG5vdC4gIElmIHRoaXMgbWV0aG9kIHJldHVybnMKLSAqIHRydWUoaWUuIG5vdCBpbiBhIHRyYW5zYWN0aW9uKSB0aGUgQ29tbWFuZHMgYXJlIHdyYXBwZWQgaW4gYSBJUnVubmFibGVXaXRoUHJvZ3Jlc3MuCi0gKiBJZiBmYWxzZSggaWUuIGluIGEgdHJhbnNhY3Rpb24gKSB0aGUgQ29tbWFuZHMgYXJlIHdyYXBwZWQgaW4gYSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24uIAotICoKLSAqLwotcHVibGljIGNsYXNzIFNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyCi17Ci0gIHByb3RlY3RlZCBDb21tYW5kRnJhZ21lbnRFbmdpbmUgZW5naW5lXzsKLSAgcHJvdGVjdGVkIERhdGFGbG93TWFuYWdlciAgICAgICBkYXRhTWFuYWdlcl87Ci0gIHByb3RlY3RlZCAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICBlbnZpcm9ubWVudF87Ci0gIAotICBwcml2YXRlICAgYm9vbGVhbiAgICAgICAgICAgICAgIGZvdW5kU3RvcF87Ci0gIHByaXZhdGUgICBib29sZWFuICAgICAgICAgICAgICAgZG9Ob3RSdW5JblRyYW5zYWN0aW9uXzsKLSAgCi0gIHB1YmxpYyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlciggRWNsaXBzZUVudmlyb25tZW50IGVudmlyb25tZW50LCBEYXRhRmxvd01hbmFnZXIgZGF0YU1hbmFnZXIgKQotICB7Ci0gICAgZW52aXJvbm1lbnRfID0gZW52aXJvbm1lbnQ7Ci0gICAgZGF0YU1hbmFnZXJfID0gZGF0YU1hbmFnZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSByb290IGZyYWdtZW50LiAgVGhlIGV4ZWN1dGlvbiBlbmdpbmUgd2lsbCBzdGFydCBleGVjdXRpbmcgY29tbWFuZHMKLSAgICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHJvb3QgZnJhZ21lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcm9vdCB0aGUgcm9vdCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJvb3RGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IHJvb3QgKQotICB7Ci0gIAllbmdpbmVfID0gbmV3IENvbW1hbmRGcmFnbWVudEVuZ2luZSggcm9vdCwgZGF0YU1hbmFnZXJfLCBlbnZpcm9ubWVudF8gKTsKLQkKLQkgIGVudmlyb25tZW50Xy5zZXRDb21tYW5kTWFuYWdlciggZW5naW5lXyApOwotICAJCi0gICAgZW5naW5lXy5zZXRQZWVrRnJhZ21lbnRMaXN0ZW5lciggCi0gICAgICBuZXcgRnJhZ21lbnRMaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyAgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gcGVla0ZyYWdtZW50KCBmcmFnbWVudCApOwotICAgICAgICB9Ci0gICAgICB9ICk7ICAKLSAgICAgICAgICAgICAgICAgIAotICAgIGVuZ2luZV8uc2V0TmV4dEZyYWdtZW50TGlzdGVuZXIoIAotICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgIGJvb2xlYW4gbm90aWZ5KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5leHRGcmFnbWVudCggZnJhZ21lbnQgKTsKLSAgICAgICAgfQotICAgICAgfSApOyAgCi0gICAgCi0gICAgZW5naW5lXy5zZXRBZnRlckV4ZWN1dGVGcmFnbWVudExpc3RlbmVyKCAKLSAgICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljICBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWZ0ZXJFeGVjdXRlTmV4dEZyYWdtZW50KCBmcmFnbWVudCApOwotICAgICAgICAgIH0KLSAgICAgICAgfSApOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICBlbmdpbmVfLnNldFVuZG9GcmFnbWVudExpc3RlbmVyKAotICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdW5kb0ZyYWdtZW50KCBmcmFnbWVudCApOwotICAgICAgICB9Ci0gICAgICB9ICk7ICAgICAgICAgICAgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBhZnRlckV4ZWN1dGVOZXh0RnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBib29sZWFuICAgICAgICAgICBjb250aW51ZUV4ZWN1dGUgPSB0cnVlOwotICAgIEJhc2VTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgICA9IChCYXNlU3RhdHVzSGFuZGxlcillbnZpcm9ubWVudF8uZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgIElTdGF0dXMgICAgICAgICAgIGNvbW1hbmRTdGF0dXMgICA9IGVuZ2luZV8uZ2V0TGFzdFN0YXR1cygpOwotICAgIElTdGF0dXMgICAgICAgICAgIGhhbmRsZXJTdGF0dXMgICA9IHN0YXR1c0hhbmRsZXIuZ2V0U3RhdHVzKCk7Ci0gICAgCi0gICAgaWYoIGNvbW1hbmRTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICYmCi0gICAgICAgIGhhbmRsZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKSAhPSBJU3RhdHVzLkVSUk9SICkKLSAgICB7Ci0gICAgICAvLyBUaGUgY29tbWFuZCByZXR1cm5lZCBhbiBlcnJvciBzdGF0dXMgZm9yIHRoZSBlbmdpbmUgdG8gc3RvcCwKLSAgICAgIC8vIGJ1dCB0aGUgc3RhdHVzIGhhbmRsZXIgZGlkIG5vdCBoYXZlIHJlcG9ydCBhbmQgZXJyb3IuCi0gICAgICAvLyBUaGVyZWZvcmUsIHdlIHdpbGwgcmVwb3J0IHRoaXMgc3RhdHVzIHJldHVybmVkIGJ5IHRoZSBjb21tYW5kCi0gICAgICAvLyBpZiB0aGVyZSBpcyBhIG1lc3NhZ2UgdG8gZGlzcGxheS4gIAotICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGNvbW1hbmRTdGF0dXMuZ2V0TWVzc2FnZSgpOwotICAgICAgCi0gICAgICBpZiggZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgZXJyb3JNZXNzYWdlLmxlbmd0aCgpID4gMCApCi0gICAgICB7Ci0gICAgICAgIHN0YXR1c0hhbmRsZXIucmVwb3J0RXJyb3IoIGNvbW1hbmRTdGF0dXMgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiggY29tbWFuZFN0YXR1cy5nZXRTZXZlcml0eSgpICE9IElTdGF0dXMuRVJST1IgJiYKLSAgICAgICAgICAgICBoYW5kbGVyU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gICAgewotICAgICAgLy8gVGhlIGxhc3QgY29tbWFuZCBkaWRuJ3QgcmV0dXJuIGFuIGVycm9yLCBidXQgdGhlIHN0YXR1cyBoYW5kbGVyCi0gICAgICAvLyBkaWQgcmVwb3J0IGFuZCBlcnJvci4gIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIHN0b3AuCi0gICAgICBjb250aW51ZUV4ZWN1dGUgPSBmYWxzZTsgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRpbnVlRXhlY3V0ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUgY2FsbHMgdGhpcyBtZXRob2Qgd2hlbiBpdCBpcyBwZWVraW5nIGZvcndhcmQKLSAgICogaW4gdGhlIGZyYWdtZW50cy4gIFdoZW4gcGVla2luZyBmb3J3YXJkIHRoZSBjb21tYW5kIHN0YWNrIHN0YXRlIGluIHRoZQotICAgKiBlbmdpbmUgaXMgbm90IGNoYW5nZXMuCi0gICAqIAotICAgKiAKLSAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBmcmFnbWVudCB0aGF0IGl0IGlzIHBlZWtpbmcgYXQuCi0gICAqIEByZXR1cm4gSW5kaWNhdGVzIHdoZXRoZXIgcGVla2luZyBzaG91bGQgc3RvcCBvciBub3QuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBwZWVrRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsgICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICAvKioKLSAgICogVGhlIENvbW1hbmRGcmFnbWVudEVuZ2luZSBjYWxscyB0aGlzIG1ldGhvZCB3aGVuIGl0IGlzIG1vdmluZyBmb3J3YXJkCi0gICAqIGluIHRoZSBmcmFnbWVudHMuICAgV2hlbiBtb3ZpbmcgZm9yd2FyZCB0aGUgY29tbWFuZCBzdGFjayBzdGF0ZSBpcyBzYXZlZAotICAgKiBhdCBlYWNoIGZyYWdtZW50IGlzIHRyYXZlcnNlZC4KLSAgICogCi0gICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgZnJhZ21lbnQgdGhhdCBpcyBiZWluZyB0cmF2ZXJzZWQuCi0gICAqIEByZXR1cm4gaW5kaWNhdGVzIGlmIHRoZSBmb3J3YXJkIHRyYXZlcnNhbCBzaG91bGQgY29udGludWUuICAKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIG5leHRGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgeyAgICAgCi0gICAgaWYoIGZyYWdtZW50LmRvTm90UnVuSW5UcmFuc2FjdGlvbigpICE9IGRvTm90UnVuSW5UcmFuc2FjdGlvbl8gKQotICAgIHsKLSAgICAgIC8vIFRoZSBmcmFnbWVudCBpcyByZXF1ZXN0aW5nIGEgZGlmZmVyZW50IHRyYW5zYWN0aW9uIGVudmlyb25tZW50IHRoYW4KLSAgICAgIC8vIHRoZSBvbmUgdGhhdCB3ZSBhcmUgaW4gc28gd2UgbXVzdCBzdG9wIGFuZCBjaGFuZ2UgZW52aXJvbm1lbnRzLgotICAgICAgZG9Ob3RSdW5JblRyYW5zYWN0aW9uXyA9IGZyYWdtZW50LmRvTm90UnVuSW5UcmFuc2FjdGlvbigpOwotICAgICAgZm91bmRTdG9wXyAgICAgICAgICAgICA9IGZhbHNlOyAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZm91bmRTdG9wXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZWFjaCBmcmFnbWVudCB3aGVuIHRoZSBjb21tYW5kIGVuZ2luZSBpcyB1bndpbmRpbmcKLSAgICogaXRzIHN0YWNrIGR1cmluZyBhbiB1bmRvIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBmcmFnbWVudCAgdGhlIGZyYWdtZW50IGJlaW5nIHVuZG9uZS4KLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIHVuZG8gcHJvY2VzcyBzaG91bGQgY29udGludWUuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRvRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsgIAkgIAkKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAgIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgdW5kb2VzIHRoZSBjb21tYW5kcyB0aGF0IHdlcmUgZXhlY3V0ZWQgaW4gdGhlIHJ1bkZvcndhcmRUb05leHRTdG9wCi0gICAqIG1ldGhvZC4KLSAgICogQHBhcmFtIGNvbnRleHQgdGhlIHJ1bm5hYmxlIGNvbnRleHQuCi0gICAqIEByZXR1cm4gcmV0dXJucyBpZiBhbGwgY29tbWFuZHMgaGF2ZSBiZWVuIHVuZG9uZSBvciBub3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBydW5VbmRvVG9OZXh0U3RvcCggSVJ1bm5hYmxlQ29udGV4dCBjb250ZXh0ICkKLSAgewotICAgIGZpbmFsIGJvb2xlYW4gcmVzdWx0W10gPSBuZXcgYm9vbGVhbltde3RydWV9OwotICAgIAotICAgIElSdW5uYWJsZVdpdGhQcm9ncmVzcyB1bmRvT3BlcmF0aW9uIAotICAgICAgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0WzBdID0gZW5naW5lXy51bmRvVG9MYXN0U3RvcChtb25pdG9yKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgIHRyeQotICAgIHsgICAgICAKLSAgICAgIGlmKCBjb250ZXh0ID09IG51bGwgKQotICAgICAgewotICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgY29udGFpbmVyIHlldCBzbyBqdXN0IHJ1biB0aGUgb3BlcmF0aW9uLgotICAgICAgICB1bmRvT3BlcmF0aW9uLnJ1biggbnVsbCApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlIGEgY29udGFpbmVyIHdoZXJlIHRoaXMgb3BlcmF0aW9uIGNhbiBydW4gYW5kIGhhdmUKLSAgICAgICAgLy8gaXRzIHByb2dyZXNzIGRpc3BsYXllZC4KLSAgICAgICAgY29udGV4dC5ydW4oIGZhbHNlLCBmYWxzZSwgdW5kb09wZXJhdGlvbiApOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgLy8gRm9yIG5vdyB3ZSB3aWxsIGlnbm9yZSBhbGwgZXhjZXB0aW9ucy4KLSAgICB9IAotICAgIAotICAgIHJldHVybiByZXN1bHRbMF07Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGV4ZWN1dGVzIHRoZSBDb21tYW5kRnJhZ21lbnQgY29tbWFuZHMgaW4gdGhlIGNvbnRleHQgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGV4dCB0aGUgY29udGV4dAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHN0YXR1cyBvZiBleGVjdXRpbmcgdGhlIGNvbW1hbmRzLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgcnVuRm9yd2FyZFRvTmV4dFN0b3AoIElSdW5uYWJsZUNvbnRleHQgY29udGV4dCApCi0gIHsKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgb3BlcmF0aW9uID0gbnVsbDsKLSAgICAKLSAgCWRvTm90UnVuSW5UcmFuc2FjdGlvbl8gPSBmYWxzZTsKLSAgCQotICAJZG8KLSAgCXsKLSAgCSAgLy8gV2Ugd2lsbCBzdG9wIHVubGVzcyB3ZSBhcmUgY2hhbmdpbmcgdHJhbnNhY3Rpb24gbW9kZXMuCi0gICAgICBmb3VuZFN0b3BfID0gdHJ1ZTsKLSAgICAgIAotICAJICBpZiggZG9Ob3RSdW5JblRyYW5zYWN0aW9uXyApCi0gIAkgIHsKLSAgCSAgICBvcGVyYXRpb24gPSBnZXROb1RyYW5zYWN0aW9uT3BlcmF0aW9uKCk7Ci0gIAkgIH0KLSAgCSAgZWxzZQotICAJICB7Ci0gIAkgICAgb3BlcmF0aW9uID0gZ2V0VHJhbnNhY3Rpb25PcGVyYXRpb24oKTsKLSAgCSAgfQotICAJICAKLSAgIAkgIHRyeQotICAJICB7ICAJICAgCi0gIAkgICAgaWYoIGNvbnRleHQgPT0gbnVsbCApCi0gIAkgICAgewotICAJICAgCSAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvbnRhaW5lciB5ZXQgc28ganVzdCBydW4gdGhlIG9wZXJhdGlvbi4KLSAgCSAgIAkgIG9wZXJhdGlvbi5ydW4oIG51bGwgKTsKLSAgCSAgICB9Ci0gIAkgICAgZWxzZQotICAJICAgIHsKLSAgCSAgIAkgIC8vIFdlIGhhdmUgYSBjb250YWluZXIgd2hlcmUgdGhpcyBvcGVyYXRpb24gY2FuIHJ1biBhbmQgaGF2ZQotICAJICAgCSAgLy8gaXRzIHByb2dyZXNzIGRpc3BsYXllZC4KLSAgCSAgICAgIGNvbnRleHQucnVuKCBmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbiApOwotICAJICAgIH0KLSAgCSAgfQotICAJICBjYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZXhjICkKLSAgCSAgewotICAJICAgIC8vVE9ETyBzaG91bGQgbG9nIHRoZXNlIGV4Y2VwdGlvbnMuCi0gIAkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAJICB9Ci0gIAkgIGNhdGNoKCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4YyApCi0gIAkgIHsKLSAgCSAgICAvL1RPRE8gc2hvdWxkIGxvZyB0aGVzZSBleGNlcHRpb25zLgotICAJICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgCSAgfQotICAJfSAgCi0gIAl3aGlsZSggIWZvdW5kU3RvcF8gKTsgCi0gIAkKLSAgCXJldHVybiBlbmdpbmVfLmdldExhc3RTdGF0dXMoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgZ2V0VHJhbnNhY3Rpb25PcGVyYXRpb24oKQotICB7Ci0gICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIG9wZXJhdGlvbiA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1biggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgICAgIHsKLSAgICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTAwMiwgdGhpcywgImdldFRyYW5zYWN0aW9uT3BlcmF0aW9uIiwgIlN0YXJ0IG9mIHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIAotICAgICAgICBCYXNlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gKEJhc2VTdGF0dXNIYW5kbGVyKWVudmlyb25tZW50Xy5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0dXNIYW5kbGVyLnJlc2V0U3RhdHVzKCk7Ci0gICAgICAgIGVuZ2luZV8ubW92ZUZvcndhcmRUb05leHRTdG9wKCBtb25pdG9yICk7Ci0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTAwMywgdGhpcywgImdldFRyYW5zYWN0aW9uT3BlcmF0aW9uIiwgIkVuZCBvZiB0cmFuc2FjdGlvbiIpOwotICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgcmV0dXJuIG9wZXJhdGlvbjsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgZ2V0Tm9UcmFuc2FjdGlvbk9wZXJhdGlvbigpCi0gIHsKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgb3BlcmF0aW9uID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICAgICAgewotICAgICAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImNvbW1hbmQiLCA1MDg1LCB0aGlzLCAiZ2V0Tm9UcmFuc2FjdGlvbk9wZXJhdGlvbiIsICJTdGFydCBvZiBOT04gdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgCi0gICAgICAgIEJhc2VTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSAoQmFzZVN0YXR1c0hhbmRsZXIpZW52aXJvbm1lbnRfLmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXR1c0hhbmRsZXIucmVzZXRTdGF0dXMoKTsKLSAgICAgICAgZW5naW5lXy5tb3ZlRm9yd2FyZFRvTmV4dFN0b3AoIG1vbml0b3IgKTsKLSAgICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTA4NiwgdGhpcywgImdldE5vVHJhbnNhY3Rpb25PcGVyYXRpb24iLCAiRW5kIG9mIE5PTiB0cmFuc2FjdGlvbiIpOwotICAgICAgfQotICAgIH07IAotICAgIAotICAgIHJldHVybiBvcGVyYXRpb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2ZjhmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE4ICAgMTM2MzM1IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDE4ICAgMTM2NzU5IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYxMTA2ICAgMTQyNTAwIGRhdmlkLnNjaG5laWRlckB1bmlzeXMuY29tIC0gRGF2aWQgU2NobmVpZGVyCi0gKiAyMDA2MDgyOSAgIDE4MDgzMyBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCAgTmV3IFdlYiBTZXJ2aWNlIHdpemFyZCBzZXJ2aWNlIHNldHRpbmdzIGRpYWxvZyBoYXMgdW5sYWJlbGxlZCBlbmFibGVkIHRleHQgZmllbGRzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2ltcGxlRGlhbG9nIGV4dGVuZHMgRGlhbG9nIGltcGxlbWVudHMgRGlhbG9nRGF0YUV2ZW50cwotewotICBwcml2YXRlICAgV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0XzsKLSAgcHJpdmF0ZSAgIFdpZGdldERhdGFFdmVudHMgIGRhdGFFdmVudHNfOwotICBwcml2YXRlICAgTGlzdGVuZXIgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfOwotICBwcm90ZWN0ZWQgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXJfOyAgCi0gIHByaXZhdGUgVGV4dCBtZXNzYWdlVGV4dF87Ci0gIHByaXZhdGUgYm9vbGVhbiBva187Ci0gIAkKLSAgcHVibGljIFNpbXBsZURpYWxvZyggU2hlbGwgc2hlbGwsIFBhZ2VJbmZvIHBhZ2VJbmZvKQotICB7Ci0Jc3VwZXIoc2hlbGwpOwotCXdpZGdldF8gID0gcGFnZUluZm8uZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZSgpOwotICAJc3RhdHVzTGlzdGVuZXJfID0gbmV3IFN0YXR1c0xpc3RlbmVyKCk7Ci0gIH0gCSAKLSAgCi0gIENvbXBvc2l0ZSBwYXJlbnRfOwotICBwdWJsaWMgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKCBDb21wb3NpdGUgcGFyZW50ICkKLSAgewkKLQkgIHBhcmVudF8gPSBwYXJlbnQ7Ci0JQ29tcG9zaXRlIGNvbnRyb2wgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JZGF0YUV2ZW50c18gPSB3aWRnZXRfLmFkZENvbnRyb2xzKCBjb250cm9sLCBzdGF0dXNMaXN0ZW5lcl8gKTsKLQkKLQkvL1RleHQgYXJlYSB0byBkaXNwbGF5IHZhbGlkYXRpb24gbWVzc2FnZXMKLQltZXNzYWdlVGV4dF8gPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5XUkFQIHwgU1dULk1VTFRJIHwgU1dULlJFQURfT05MWSk7Ci0JbWVzc2FnZVRleHRfLnNldEJhY2tncm91bmQocGFyZW50LmdldEJhY2tncm91bmQoKSk7Ci0gICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICBncmlkZGF0YS5ob3Jpem9udGFsSW5kZW50ID0gMTA7Ci0gICAgbWVzc2FnZVRleHRfLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7ICAgIAotICAgIHBhcmVudF8uc2V0Rm9jdXMoKTsKLSAgICAKLSAgICAvL0NhbGwgZXh0ZW5kZXJzIG92ZXJyaWRlIG9mIHRoZSBjYWxsU2V0dGVycyBtZXRob2QgdG8gaW50aWFsaXplIGFueSBkYXRhIGluIHdpZGdldAotICAgIGNhbGxTZXR0ZXJzKCk7ICAgCi0gICAgRGlhbG9nLmFwcGx5RGlhbG9nRm9udChwYXJlbnQpOwotICAgIHJldHVybiBjb250cm9sOwotICB9ICAKLSAgCi0gIC8vT3ZlcnJpZGUgb2YgRGlhbG9nLmNyZWF0ZUNvbnRlbnRzIHNvIHdlIGNhbiBhZmZlY3QgYnV0dG9uIGVuYWJsZW1lbnQgCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQlDb250cm9sIGMgPSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOwotCS8vZW5hYmxlIGNvbnRyb2xzIGZvciBpbml0aWFsIGVudHJ5IHRvIGRpYWxvZwotCXZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci0JcmV0dXJuIGM7Ci0gIH0KLQotICAvLyBFbmFibGUgb3IgZGlzYWJsZSBvayBidXR0b24gYmFzZWQgb24gc3RhdGUKLSAgcHJpdmF0ZSB2b2lkIGVuYWJsZU9rKGJvb2xlYW4gc3RhdGUpCi0gIHsKLQkgIEJ1dHRvbiBva0J1dHRvbiA9IGdldEJ1dHRvbihJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKTsKLQkgIGlmIChva0J1dHRvbiAhPSBudWxsKQotCSAgICBva0J1dHRvbi5zZXRFbmFibGVkKHN0YXRlKTsKLSAgfQotICAKLSAgLy9JbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gY2FsbCBhbGwgc2V0dGVycyBvbiB0aGUgZGlhbG9nIHdpZGdldCBhZnRlciB0aGUgY29udHJvbHMgYXJlIGNyZWF0ZWQKLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgY2FsbFNldHRlcnMoKTsKLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGdldERhdGFFdmVudHMoKQotICB7Ci0gICAgcmV0dXJuIGRhdGFFdmVudHNfOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgV2lkZ2V0Q29udHJpYnV0b3IgZ2V0V2lkZ2V0KCkKLSAgewotCSAgcmV0dXJuIHdpZGdldF87Ci0gIH0KLSAgCi0gIC8vIHNldHMgbWVzc2FnZSBpbiBtZXNzYWdlIGFyZWEgYWJvdmUgT0sgYW5kIENhbmNlbCBidXR0b25zCi0gIHByaXZhdGUgdm9pZCBzZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKQotICB7ICAKLQkgIGlmIChtZXNzYWdlID09IG51bGwpCi0JCSAgbWVzc2FnZVRleHRfLnNldFRleHQoIiIpOwkgICAgICAKLQkgIGVsc2UJCSAgCi0JICAgICAgbWVzc2FnZVRleHRfLnNldFRleHQobWVzc2FnZSk7Ci0gICAgICAvLyBmb3JjZSBhIHJlc2l6ZSBvZiB0aGUgcGFyZW50IGNvbXBvc2l0ZSBhbmQgd3JhcCBvZiB0aGUgdGV4dCBmaWVsZCBpZiBuZWNlc3NhcnkKLQkgIHBhcmVudF8ubGF5b3V0KCk7ICAKLSAgfQotICAJICAKLSAgCi0gIAotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVBhZ2VUb1N0YXR1cygpCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyAgPSB3aWRnZXRfLmdldFN0YXR1cygpOyAgICAKLSAgICAgICAgCi0gICAgaWYoIHN0YXR1cyAhPSBudWxsICkKLSAgICB7Ci0gICAgICBTdHJpbmcgbWVzc2FnZSA9IHN0YXR1cy5nZXRNZXNzYWdlKCk7Ci0gICAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsKLSAgICAgIAotICAgICAgLy8gZm9yIGVycm9yIGNvbmRpdGlvbiwgZGlzYWJsZSBvayBhbmQgcHJpbnQgbWVzc2FnZQotICAgICAgaWYoIHNldmVyaXR5ID09IElTdGF0dXMuRVJST1IgKQotICAgICAgeyAKLSAgICAgICAgaWYoIG1lc3NhZ2UubGVuZ3RoKCkgPT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRNZXNzYWdlKCBudWxsKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIG9rXyA9IGZhbHNlOwotICAgICAgfQotICAgICAgLy8gZGlzcGxheSB3YXJuaW5nIGFuZCBpbmZvIG1lc3NhZ2VzIGJ1dCBzdGlsbCBlbmFibGUgT0sKLSAgICAgIGVsc2UgaWYgKHNldmVyaXR5ID09IElTdGF0dXMuV0FSTklORyB8IHNldmVyaXR5ID09IElTdGF0dXMuSU5GTykKLSAgICAgIHsKLSAgICAgICAgc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgb2tfID0gdHJ1ZTsgICAgICAgIAotICAgICAgfSAgICAgCi0gICAgICAvLyBubyBtZXNzYWdlIHRvIGRpc3BsYXkKLSAgICAgIGVsc2UgIAotICAgICAgewotICAgICAgICBzZXRNZXNzYWdlKCBudWxsKTsKLSAgICAgICAgb2tfID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gbnVsbCBzdGF0dXMgY2FzZQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRNZXNzYWdlKG51bGwpOwotICAgICAgb2tfID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgZW5hYmxlT2sob2tfKTsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgU3RhdHVzTGlzdGVuZXIgaW1wbGVtZW50cyBMaXN0ZW5lcgotICB7Ci0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoIEV2ZW50IGV2dCApIAotCXsKLSAgICAgIHZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci0JfQotICB9Ci19ICAKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBhZ2VGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUGFnZUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5NGU3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUGFnZUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlUGFnZUZhY3RvcnkgaW1wbGVtZW50cyBXaXphcmRQYWdlRmFjdG9yeQoteyAgIAotICBwdWJsaWMgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0UGFnZSggUGFnZUluZm8gcGFnZUluZm8sIFdpemFyZFBhZ2VNYW5hZ2VyIG1hbmFnZXIgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVXaXphcmRQYWdlKCBwYWdlSW5mbywgbWFuYWdlciApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUG9wdXBQYWdlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwUGFnZUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUzMzFkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUG9wdXBQYWdlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0KLXB1YmxpYyBjbGFzcyBTaW1wbGVQb3B1cFBhZ2VGYWN0b3J5IGltcGxlbWVudHMgV2l6YXJkUGFnZUZhY3RvcnkKLXsgICAKLSAgcHJpdmF0ZSBTdHJpbmcgaWRfOwotICAKLSAgcHVibGljIFNpbXBsZVBvcHVwUGFnZUZhY3RvcnkoIFN0cmluZyBpZCApCi0gIHsKLSAgICBpZF8gPSBpZDsgIAotICB9Ci0gIAotICBwdWJsaWMgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0UGFnZSggUGFnZUluZm8gcGFnZUluZm8sIFdpemFyZFBhZ2VNYW5hZ2VyIG1hbmFnZXIgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVQb3B1cFdpemFyZFBhZ2UoIHBhZ2VJbmZvLCBtYW5hZ2VyLCBpZF8gKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwV2l6YXJkUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwV2l6YXJkUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzUwOWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVQb3B1cFdpemFyZFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDczMSAgIDEyMDM3OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRmllbGRzIG5vdCB2aXNpYmxlIGluIExhcmdlIGZvbnQgc2V0dGluZ3MKLSAqIDIwMDcwNTIyICAgMTg0MDA2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSU1lc3NhZ2VzOwotCi0KLQotcHVibGljIGNsYXNzIFNpbXBsZVBvcHVwV2l6YXJkUGFnZSBleHRlbmRzIFNpbXBsZVdpemFyZFBhZ2UKLXsgIAotICBwcml2YXRlIFN0cmluZyBpZF87Ci0gIAotICBwdWJsaWMgU2ltcGxlUG9wdXBXaXphcmRQYWdlKCBQYWdlSW5mbyBwYWdlSW5mbywgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXIsIFN0cmluZyBpZCApCi0gIHsKLSAgCXN1cGVyKCBwYWdlSW5mbywgcGFnZU1hbmFnZXIgKTsKLSAgCQotICAJaWRfID0gaWQ7Ci0gIH0gCSAgCi0gIAkKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBpbnRlcm5hbENyZWF0ZUNvbnRyb2woIENvbXBvc2l0ZSBwYXJlbnQgKSAKLSAgeyAgCQotCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBzdXBlci5pbnRlcm5hbENyZWF0ZUNvbnRyb2wocGFyZW50KTsKLQkgIAotICAJZmluYWwgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGNvbnRleHQgICA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAJCi0gIAkvLyBJZiB0aGUgY3VycmVudCBwYWdlIGlzIG51bGwgdGhlbiB0aGlzIG11c3QgYmUgdGhlIGZpcnN0IHBhZ2UuCi0gIAlpZiggcGFnZU1hbmFnZXJfLmdldEN1cnJlbnRQYWdlKCkgPT0gbnVsbCAmJiBjb250ZXh0LnNob3dDaGVja2JveChpZF8pICkKLSAgCXsKLSAgICAgIGZpbmFsICBCdXR0b24gYnV0dG9uICA9IG5ldyBCdXR0b24oIGNvbXBvc2l0ZSwgU1dULkNIRUNLICk7Ci0gICAgICBTdHJpbmcgbGFiZWwgICA9IEVudmlyb25tZW50VUlNZXNzYWdlcy5DSEVDS0JPWF9ET19OT1RfU0hPV19ESUFMT0dfQUdBSU47Ci0gICAgICAKLSAgICAgIC8qQ09OVEVYVF9JRCBUV1AwMDAxIGZvciB0aGUgc2hvdy9oaWRlIGNoZWNrIGJveCovCi0gICAgICBTdHJpbmcgaW5mb3BvcCA9CSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkuVFdQMDAwMSI7Ci0gICAgICBTdHJpbmcgdG9vbHRpcCA9IEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX0RPX05PVF9TSE9XX0RJQUxPR19BR0FJTjsKLSAgICAgIAotICAgICAgYnV0dG9uLnNldFRleHQoIGxhYmVsICk7Ci0gICAgICBidXR0b24uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICAgIGJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRPYmplY3RBY3Rpb25EaWFsb2dFbmFibGVkKCBpZF8sIGJ1dHRvbi5nZXRTZWxlY3Rpb24oKSApOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgIGJ1dHRvbi5zZXRTZWxlY3Rpb24oIGZhbHNlICk7Ci0gICAgICAKLSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGJ1dHRvbiwgaW5mb3BvcCApOyAgCQotICAJfQotICAJCi0gIAlyZXR1cm4gY29tcG9zaXRlOwotICB9ICAKLX0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlV2lkZ2V0Q29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUyYzJmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlV2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi1wdWJsaWMgY2xhc3MgU2ltcGxlV2lkZ2V0Q29udHJpYnV0b3IgaW1wbGVtZW50cyBJTmFtZWRXaWRnZXRDb250cmlidXRvciAKLXsKLSAgICBwcml2YXRlIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5XzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICBuYW1lXzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl87Ci0JcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgdGl0bGVfOwotCQotCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgCi0JewotCQlkZXNjcmlwdGlvbl8gPSBkZXNjcmlwdGlvbjsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRGYWN0b3J5KFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5KSAKLQl7Ci0JCWZhY3RvcnlfID0gZmFjdG9yeTsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSAKLQl7Ci0JCW5hbWVfID0gbmFtZTsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpIAotCXsKLQkJdGl0bGVfID0gdGl0bGU7Ci0JfQotCQotCi0JcHVibGljIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBnZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSAKLQl7Ci0JCXJldHVybiBmYWN0b3J5XzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSAKLQl7Ci0JCXJldHVybiBuYW1lXzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgCi0JewotCQlyZXR1cm4gZGVzY3JpcHRpb25fOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSAKLQl7Ci0JCXJldHVybiB0aXRsZV87Ci0JfQotCi0JLyoqCi0JICogU3Vic2NsYXNzZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0JewotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldERhdGFDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldERhdGFDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjgwNmExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW1wbGUgV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIGNsYXNzIHRoYXQgY29uY3JldGUgCi0gKiBXaWRnZXREYXRhQ29udHJpYnV0b3JzIGNhbiBzdWJjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgaW1wbGVtZW50cyBXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsgIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvciNhZGRDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyKQotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKQotICB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvciNnZXRTdGF0dXMoKQotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50cyNleHRlcm5hbGl6ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBleHRlcm5hbGl6ZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHMjaW50ZXJuYWxpemUoKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXRSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldFJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNmZhZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldFJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi0KLQotcHVibGljIGNsYXNzIFNpbXBsZVdpZGdldFJlZ2lzdHJ5IGltcGxlbWVudHMgV2lkZ2V0UmVnaXN0cnkKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgdGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAKLSAgcHVibGljIHZvaWQgYWRkKCBTdHJpbmcgZnJhZ21lbnRJZCwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhZ2VUaXRsZSwKLSAgICAgICAgICAgICAgICAgICBXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeSApCi0gIHsKLSAgCVBhZ2VJbmZvIGVudHJ5ID0gbmV3IFBhZ2VJbmZvKCBwYWdlTmFtZSwgcGFnZVRpdGxlLCB3aWRnZXRGYWN0b3J5ICk7Ci0gIAl0YWJsZV8ucHV0KCBmcmFnbWVudElkLCBlbnRyeSApOwotICB9ICAgICAgICAgICAgICAgICAgIAotICAKLSAgcHVibGljIFBhZ2VJbmZvIGdldFBhZ2VJbmZvKCBTdHJpbmcgZnJhZ21lbnRJZCApCi0gIHsKLSAgICByZXR1cm4gKFBhZ2VJbmZvKXRhYmxlXy5nZXQoIGZyYWdtZW50SWQgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpemFyZFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaXphcmRQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjU5NjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpemFyZFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzMxICAgMTIwMzc4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBGaWVsZHMgbm90IHZpc2libGUgaW4gTGFyZ2UgZm9udCBzZXR0aW5ncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci0KLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlV2l6YXJkUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBQYWdlV2l6YXJkRGF0YUV2ZW50cwotewotICBwcml2YXRlICAgV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0XzsKLSAgcHJpdmF0ZSAgIFdpZGdldERhdGFFdmVudHMgIGRhdGFFdmVudHNfOwotICBwcml2YXRlICAgTGlzdGVuZXIgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfOwotICBwcm90ZWN0ZWQgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXJfOwotICAJCi0gIHB1YmxpYyBTaW1wbGVXaXphcmRQYWdlKCBQYWdlSW5mbyBwYWdlSW5mbywgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXIgKQotICB7Ci0gIAlzdXBlciggIiIgKTsKLSAgCQotICAJc2V0VGl0bGUoIHBhZ2VJbmZvLmdldFBhZ2VOYW1lKCkgKTsKLSAgCXNldERlc2NyaXB0aW9uKCBwYWdlSW5mby5nZXRQYWdlVGl0bGUoKSk7Ci0gIAkgIAotICAJd2lkZ2V0XyAgICAgICAgID0gcGFnZUluZm8uZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZSgpOwotICAJc3RhdHVzTGlzdGVuZXJfID0gbmV3IFN0YXR1c0xpc3RlbmVyKCk7Ci0gIAlwYWdlTWFuYWdlcl8gICAgPSBwYWdlTWFuYWdlcjsKLSAgfSAJICAKLSAgCQotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKCBDb21wb3NpdGUgcGFyZW50ICkgCi0gIHsJICAKLQlTY3JvbGxlZENvbXBvc2l0ZSBjb250cm9sID0gbmV3IFNjcm9sbGVkQ29tcG9zaXRlKCBwYXJlbnQsIFNXVC5WX1NDUk9MTCApOwkKLQlDb21wb3NpdGUgaW5uZXIgPSBpbnRlcm5hbENyZWF0ZUNvbnRyb2woY29udHJvbCk7Ci0JCi0JY29udHJvbC5zZXRFeHBhbmRIb3Jpem9udGFsKHRydWUpOwotICAJY29udHJvbC5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKLQljb250cm9sLnNldENvbnRlbnQoaW5uZXIpOyAgCQotICAgIGNvbnRyb2wuc2V0TWluU2l6ZShpbm5lci5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsJCi0JCi0gICAgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KGNvbnRyb2wpOwotICAgIHNldENvbnRyb2woIGNvbnRyb2wgKTsKLSAgfQotCQotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGludGVybmFsQ3JlYXRlQ29udHJvbCggQ29tcG9zaXRlIHBhcmVudCApIHsKLQotCUNvbXBvc2l0ZSBjb250cm9sID0gbmV3IENvbXBvc2l0ZSggcGFyZW50LCBTV1QuTk9ORSApOwotCWNvbnRyb2wuc2V0TGF5b3V0KCBuZXcgR3JpZExheW91dCgpICk7Ci0gIAljb250cm9sLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9CT1RIICkpOwotCQotCWRhdGFFdmVudHNfID0gd2lkZ2V0Xy5hZGRDb250cm9scyggY29udHJvbCwgc3RhdHVzTGlzdGVuZXJfICk7CQotCQotCXJldHVybiBjb250cm9sOwotICB9Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBnZXREYXRhRXZlbnRzKCkKLSAgewotICAgIHJldHVybiBkYXRhRXZlbnRzXzsKLSAgfQotICAJICAKLSAgcHVibGljIHZvaWQgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgID0gd2lkZ2V0Xy5nZXRTdGF0dXMoKTsKLSAgICAKLSAgICBpZiggc3RhdHVzICE9IG51bGwgKQotICAgIHsKLSAgICAgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBzdGF0dXMuZ2V0TWVzc2FnZSgpOwotCi0gICAgICAgIGlmKCBtZXNzYWdlLmxlbmd0aCgpID09IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKCBudWxsICk7Ci0gICAgICAgICAgc2V0TWVzc2FnZSggZ2V0RGVzY3JpcHRpb24oKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHNldEVycm9yTWVzc2FnZSggbWVzc2FnZSApOwotICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIHNldFBhZ2VDb21wbGV0ZSggZmFsc2UgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORyApCi0gICAgICB7Ci0gICAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgICBzZXRNZXNzYWdlKHN0YXR1cy5nZXRNZXNzYWdlKCksIElTdGF0dXMuV0FSTklORyApOwotICAgICAgICBzZXRQYWdlQ29tcGxldGUoIHRydWUgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuSU5GTyApCi0gICAgICB7Ci0gICAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgICBzZXRNZXNzYWdlKCBzdGF0dXMuZ2V0TWVzc2FnZSgpLCBJU3RhdHVzLklORk8gKTsKLSAgICAgICAgc2V0UGFnZUNvbXBsZXRlKCB0cnVlICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgICBzZXRNZXNzYWdlKCBnZXREZXNjcmlwdGlvbigpICk7Ci0gICAgICAgIHNldFBhZ2VDb21wbGV0ZSggdHJ1ZSApOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0RXJyb3JNZXNzYWdlKCBudWxsICk7Ci0gICAgICBzZXRNZXNzYWdlKCBnZXREZXNjcmlwdGlvbigpICk7Ci0gICAgICBzZXRQYWdlQ29tcGxldGUoIHRydWUgKTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0Q29udGFpbmVyKCkudXBkYXRlQnV0dG9ucygpOwotICB9Ci0gICAgCi0gIHB1YmxpYyBib29sZWFuIGNhbkZsaXBUb05leHRQYWdlKCkgCi0gIHsKLQlyZXR1cm4gaXNQYWdlQ29tcGxldGUoKSAmJiBwYWdlTWFuYWdlcl8uaGFzTmV4dFBhZ2UoKTsKLSAgfQotCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZSgpIAotICB7Ci0JcmV0dXJuIHBhZ2VNYW5hZ2VyXy5nZXROZXh0UGFnZSgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmFsdWUpIAotICB7Ci0gIAlwYWdlTWFuYWdlcl8uaGFuZGxlUGFnZVZpc2libGUoIHRoaXMsIHZhbHVlICk7Ci0gIAkKLSAgICBzdXBlci5zZXRWaXNpYmxlKHZhbHVlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBTdGF0dXNMaXN0ZW5lciBpbXBsZW1lbnRzIExpc3RlbmVyCi0gIHsKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudCggRXZlbnQgZXZ0ICkgCi0JewotICAgICAgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKTsKLQl9Ci0gIH0KLX0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUyZjdjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0KLXB1YmxpYyBjbGFzcyBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciAKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICAgICAgICB3aWRnZXRDb250cmlidXRvcl87Ci0gIHByaXZhdGUgQ29tbWFuZFdpZGdldEJpbmRpbmcgYmluZGluZ187Ci0gIAotICBwdWJsaWMgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIoIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcgKQotICB7Ci0gICAgd2lkZ2V0Q29udHJpYnV0b3JfID0gbmV3IEhhc2h0YWJsZSgpOyAKLQliaW5kaW5nXyAgICAgICAgICAgPSBiaW5kaW5nOwotCQotCWJpbmRpbmcucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyggbmV3IE15V2lkZ2V0UmVnaXN0cnkoKSApOwotICB9Ci0gIAotICBwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0V2lkZ2V0KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgcmV0dXJuIChJTmFtZWRXaWRnZXRDb250cmlidXRvcil3aWRnZXRDb250cmlidXRvcl8uZ2V0KCBpZCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5ICkKLSAgewotICAgIGJpbmRpbmdfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCByZWdpc3RyeSApOyAgCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgTXlXaWRnZXRSZWdpc3RyeSBpbXBsZW1lbnRzIFdpZGdldFJlZ2lzdHJ5Ci0gIHsKLQlwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIGZyYWdtZW50SWQsIFN0cmluZyBwYWdlTmFtZSwgU3RyaW5nIHBhZ2VUaXRsZSwgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHdpZGdldEZhY3RvcnkpIAotCXsKLQkgIFNpbXBsZVdpZGdldENvbnRyaWJ1dG9yIHdpZGdldCA9IG5ldyBTaW1wbGVXaWRnZXRDb250cmlidXRvcigpOwotCSAgd2lkZ2V0LnNldFRpdGxlKCBwYWdlTmFtZSApOwotCSAgd2lkZ2V0LnNldERlc2NyaXB0aW9uKCBwYWdlVGl0bGUgKTsKLQkgIHdpZGdldC5zZXRGYWN0b3J5KCBuZXcgTXlXaWRnZXRDb250cmlidXRvckZhY3RvcnkoIHdpZGdldEZhY3RvcnkgKSApOwotCSAgCi0JICB3aWRnZXRDb250cmlidXRvcl8ucHV0KCBmcmFnbWVudElkLCB3aWRnZXQgKTsKLQl9CSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgTXlXaWRnZXRDb250cmlidXRvckZhY3RvcnkgaW1wbGVtZW50cyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkKLSAgewotCXByaXZhdGUgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnlfOwotCXByaXZhdGUgV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgIHdpZGdldF87Ci0JCi0JcHVibGljIE15V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSApCi0JewotCSAgZmFjdG9yeV8gPSBmYWN0b3J5OwkKLQl9Ci0JCi0JcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpIAotCXsKLSAgICAgIGlmKCB3aWRnZXRfID09IG51bGwgKQotCSAgewotCSAgICB3aWRnZXRfID0gZmFjdG9yeV8uY3JlYXRlKCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiB3aWRnZXRfOwotCX0JICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4YWZjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLQotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5IGZvciBkZXZlbG9wZXJzIHRvIGNyZWF0ZSB2YWxpZGF0YWJsZSB3aWRnZXRzCi0gKiB0aGF0IGNhbiBiZSB1c2VkIGluIG1hbnkgZGlmZmVyZW50IEVjbGlwc2UgVUkgY29udGV4dHMuIChpZS4gaW4gYSBXaW5kb3dzLCBEaWFnbG9ncywKLSAqIHdpemFyZCBwYWdlcywgZXRjKQotICoKLSAqIFRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgdGhpcyBpbnRlcmZhY2UgaGFzIG92ZXIganVzdCBhIHJlZ3VsYXIgRWNsaXBzZSBDb21wb3NpdGUKLSAqIGlzIHRoYXQgaXQgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHZhbGlkYXRpbmcgdGhlIFdpZGdldC4gIFdoZW4gdmFsaWRhdGluZwotICogdGhlcmUgYXJlIHR3byBhc3BlY3RzIHRvIGtlZXAgaW4gbWluZC4gIFRoZSBmaXJzdCBhc3BlY3QgZGVhbHMgd2l0aCBXSEVOIHZhbGlkYXRpb24KLSAqIG9jY3VycyBhbmQgdGhlIHNlY29uZCBhc3BlY3QgZGVhbHMgd2l0aCBXSEFUIHRvIGRvIGZvciBhIHZhbGlkYXRpb24gZXZlbnQuCi0gKiAKLSAqIFRoZSBmaXJzdCBhc3BlY3Qgb2YgdHJpZ2dlcmluZyB2YWxpZGF0aW9uIGV2ZW50cyBpcyBoYW5kbGVkIGJ5IHRoZSBzdGF0dXNMaXN0ZW5lcgotICogcGFyYW1ldGVyIG9mIHRoZSBhZGRDb250cm9scyBtZXRob2QuICBJZiBhIHBhcnRpY3VsYXIgY29udHJvbCB0aGF0IGlzIGNvbnRyaWJ1dGVkIGNhbgotICogYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGlzIFdpZGdldENvbnRyaWJ1dG9yIHRoZW4gdGhlIHN0YXR1c0xpc3RlbmVyIG9iamVjdAotICogc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBsaXN0ZW5lciBsaXN0IG9mIHRoYXQgY29udHJvbC4gIEZvciBleGFtcGxlLCBpZiB0aGUgdGV4dCBpbgotICogYSBUZXh0IHdpZGdldCBjYW4gYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGlzIFdpZGdldENvbnRyaWJ1dG9yIHRoZW4geW91IHdvdWxkCi0gKiBhZGQgdGhlIHN0YXR1c0xpc3RlbmVyIHRvIHRoZSBUZXh0IHdpZGdldHMgTW9kaWZ5IGxpc3RlbmVyIGxpc3Q6Ci0gKiAKLSAqIAotICogICBUZXh0IHNvbWVUZXh0ID0gbmV3IFRleHQoIHBhcmVudCwgU1dULk5PTkUgKTsKLSAqICAgc29tZVRleHQuYWRkTGlzdGVuZXIoIFNXVC5Nb2RpZnksIHN0YXR1c0xpc3RlbmVyICk7Ci0gKiAKLSAqIE5vdGU6IGlmIHlvdSB3YW50IHRvIGZvcmNlIHZhbGlkYXRpb24gb2YgdGhpcyB3aWRnZXQgeW91IGNhbiBjYWxsCi0gKiAgICAgICB0aGUgc3RhdHVzTGlzdGVuZXIuaGFuZGxlRXZlbnQobnVsbCkgbWV0aG9kIGRpcmVjdGx5LiAgVGhpcwotICogICAgICAgaXMgbm90IHRoZSBwcmVmZXJlZCBtYXkgdG8gdHJpZ2dlciB2YWxpZGF0aW9uLCBob3dldmVyLgotICogICAgICAgCi0gKiBUaGUgc2Vjb25kIGFzcGVjdCBvZiB2YWxpYXRpb24gaXMgd2hhdCB0byBkbyB3aGVuIHRoZSB2YWxpZGF0aW9uIGV2ZW50IG9jY3Vycy4KLSAqIFRoaXMgaXMgaGFuZGxlZCBieSBnZXRTdGF0dXMgbWV0aG9kLiAgQW55IGNvZGUgdGhhdCBlbnN1cmVzIHRoYXQgdGhpcyB3aWRnZXQgaXMKLSAqIHZhbGlkIHNob3VsZCBiZSBwdXQgaW4gdGhlIGdldFN0YXR1cyBpbXBsZW1lbnRhdGlvbi4gCi0gKiAKLSAqIAotKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCB0byBpbXBsZW1lbnQgdGhlIFVJIGNvbnRyaWJ1dGlvbnMgZm9yIHRoaXMgd2lkZ2V0LgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudCBUaGUgY29tcG9zaXRlIHBhcmVudCB0aGF0IHN1YiB3aWRnZXRzIHNob3VsZCB1c2UuCi0gICAqIEBwYXJhbSBzdGF0dXNMaXN0ZW5lciBUaGlzIGxpc3RlbmVyIHNob3VsZCBiZSBhZGRlZCB0byBhbnkgd2lkZ2V0IHRoYXQgY2FuCi0gICAqICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoaXMgV2lkZ2V0Q29udHJpYnV0b3IuCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIFdpZGdldERhdGFFdmVudHMgb2JqZWN0LiAgVGhpcyBvYmplY3QgaXMgdXNlZCBieSB0aGUKLSAgICogICAgICAgICBmcmFtZXdvcmsgdG8gaW50ZXJuYWxpemUgYW5kIGV4dGVybmFsaXplIGRhdGEgZm9yIHRoaXMgd2lkZ2V0LgotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGltcGxlbWVudCB2YWxpZGF0aW9uIGNvZGUgZm9yIHRoaXMgV2lkZ2V0Q29udHJpYnV0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBzdGF0dXMgb2JqZWN0IGluZGljYXRpbmcgdGhlIHZhbGlkaXR5IG9mIHRoaXMgd2lkZ2V0LgotICAgKiAgICAgICAgIElmIHRoZSBzdGF0dXMgc2V2ZXJpdHkgaXMgRVJST1IgdGhlbiB0aGlzIHdpZGdldCBpcyBjb25zaWRlcmVkIHRvCi0gICAqICAgICAgICAgYmUgaW52YWxpZC4gIEZvciBhbnkgb3RoZXIgc3RhdHVzIHNldmVyaXR5IG9yIGlmIHRoZSBzdGF0dXMgcmV0dXJuZWQKLSAgICogICAgICAgICBpcyBudWxsIHRoaXMgd2lkZ2V0IGlzIGNvbnNpZGVyZWQgdG8gYmUgdmFsaWQuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRDb250cmlidXRvckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRDb250cmlidXRvckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3ZWZjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZSBhIHdheSBmb3IgY3JlYXRpbmcgV2lkZ2V0Q29udHJpYnV0b3JzCi0gKgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgCi17Ci0gIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4MWFjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgV2lkZ2V0Q29udHJpYnV0b3IgaW50ZXJmYWNlIGFuZAotICogdGhlIFdpZGdldERhdGFFdmVudHMgaW50ZXJmYWNlLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBXaWRnZXREYXRhQ29udHJpYnV0b3IgZXh0ZW5kcyBXaWRnZXRDb250cmlidXRvciwgV2lkZ2V0RGF0YUV2ZW50cyAKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhRXZlbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0RGF0YUV2ZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDFkOWY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhRXZlbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB3YXkgZm9yIGludGVybmFsaXppbmcgYW5kIGV4dGVybmFsaXppbmcgc3RhdGUKLSAqIGRhdGEgaW4gYSBXaWRnZXRDb250cmlidXRvci4gIFRoZSBpbnRlcm5hbGl6ZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQKLSAqIGJlZm9yZSB0aGUgd2lkZ2V0IGlzIGRpc3BsYXllZCBzbyB0aGF0IGl0IGNhbiBzZXQgdGhlIGRlZmF1bHQgZGF0YQotICogZm9yIHRoYXQgd2lkZ2V0LiAgVGhlIGV4dGVybmFsaXplIG1ldGhvZCBwcm92aWRlcyBhIHdheSBvZiBnZXR0aW5nIGRhdGEKLSAqIGZyb20gdGhlIHdpZGdldCBhZnRlciBpdCBpcyBkaXNwbGF5ZWQuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdpZGdldERhdGFFdmVudHMgCi17Ci0gIC8qKgotICAgKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHNldCB3aWRnZXQgc3RhdGUgZGF0YSBoZXJlLgotICAgKgotICAgKi8KLSAgcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKTsKLSAgCi0gIC8qKgotICAgKiBJbXBsZW1lbmF0aW9ucyBzaG91bGQgZ2V0IHdpZGdldCBzdGF0ZSBkYXRhIGhlcmUuCi0gICAqCi0gICAqLwotICBwdWJsaWMgdm9pZCBleHRlcm5hbGl6ZSgpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTFiMThmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgaG93IFdpZGdldENvbnRyaWJ1dG9ycyBhcmUgbWFkZSBrbm93biB0byB0aGUKLSAqIGR5bmFtaWMgd2l6YXJkIGZyYW1ld29yay4gIFRoaXMgd2lkZ2V0IHdpbGwgYmUgZGlzcGxheWVkIGFzIGEgd2l6YXJkIHBhZ2UKLSAqIHdpdGggdGhlIG5hbWUgYW5kIHRpdGxlIHNwZWNpZmllZCBpbiB0aGUgYWRkIG1ldGhvZC4gIFRoZSBmcmFnbWVudElkIGlzIAotICogdXNlZCB0byBhc3NvY2lhdGUgdGhpcyB3aWRnZXQgd2l0aCBhIHBhcnRpY3VsYXIgQ29tbWFuZEZyYWdtZW50LiAgV2hlbgotICogYSBDb21tYW5kRnJhZ21lbnQgd2l0aCB0aGlzIGZyYWdtZW50SWQgaXMgdHJhdmVyc2VkIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBXaWRnZXRDb250cmlidXRvciB3aWxsIGJlIGRpc3BsYXllZC4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2lkZ2V0UmVnaXN0cnkKLXsKLSAgLyoqCi0gICAqIEFkZHMgYSBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgdG8gdGhlIGZyYW1ld29yay4gIFRoaXMgZmFjdG9yeQotICAgKiBpcyB1c2VkIHRvIGdldCB0aGUgV2lkZ2V0Q29udHJpYnV0b3IuICBUaGlzIFdpZGdldENvbnRyaWJ1dG9yCi0gICAqIHdpbGwgYmUgdXNlZCB0byByZW5kZXIgdGhlIHdpemFyZCBwYWdlLgotICAgKiAKLSAgICogQHBhcmFtIGZyYWdtZW50SWQgdGhlIENvbW1hbmRGcmFnbWVudCBpZCB0aGF0IHRoaXMgV2lkZ2V0Q29udHJpYnV0b3IgaXMgYXNzb2NpYXRlZCB3aXRoLgotICAgKiBAcGFyYW0gcGFnZU5hbWUgdGhlIG5hbWUgb2YgdGhpcyB3aXphcmQgcGFnZS4KLSAgICogQHBhcmFtIHBhZ2VUaXRsZSB0aGUgdGl0bGUgb2YgdGhpcyB3aXphcmQgcGFnZS4KLSAgICogQHBhcmFtIHdpZGdldEZhY3RvcnkgdGhlIGZhY3Rvcnkgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIFdpZGdldENvbnRyaWJ1dG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKCBTdHJpbmcgZnJhZ21lbnRJZCwKLQkJCQkgICBTdHJpbmcgcGFnZU5hbWUsCi0JCQkJICAgU3RyaW5nIHBhZ2VUaXRsZSwKLQkJCQkgICBXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeSApOwotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaXphcmRQYWdlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YjY2NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLQotLyoqCi0gKiAKLSAqCi0gKgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBXaXphcmRQYWdlRmFjdG9yeSAKLXsKLSAgcHVibGljIFBhZ2VXaXphcmREYXRhRXZlbnRzIGdldFBhZ2UoIFBhZ2VJbmZvIHBhZ2VJbmZvLCBXaXphcmRQYWdlTWFuYWdlciBtYW5hZ2VyICk7IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2l6YXJkUGFnZU1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY4ZWQ3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2l6YXJkUGFnZU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjMgICAxMjkyMzIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAzMTMgICAxMzA5NTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMTkgICAxNzU3MjEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMjggICAxNzMzNDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgUGVlayBuZXh0IHBhZ2UgcHJvYmxlbQotICogMjAwNzA3MzAgICAxOTcxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgUGFzcyBwcm9ncmVzcyBtb25pdG9yIHRvIHVuZG8gY29tbWFuZHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5yZWdpc3RyeS5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotCi1wdWJsaWMgY2xhc3MgV2l6YXJkUGFnZU1hbmFnZXIgZXh0ZW5kcyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcgotewotICBwcml2YXRlICAgV2l6YXJkUGFnZUZhY3RvcnkgICAgICBwYWdlRmFjdG9yeV87Ci0gIHByaXZhdGUgICBIYXNodGFibGUgICAgICAgICAgICAgIHBhZ2VUYWJsZV87Ci0gIHByaXZhdGUgICBJV2l6YXJkICAgICAgICAgICAgICAgIHdpemFyZF87Ci0gIHByb3RlY3RlZCBTaW1wbGVXaWRnZXRSZWdpc3RyeSAgIHJlZ2lzdHJ5XzsKLSAgCi0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCBhbmQgc2V0IGJ5IG91ciBtZXRob2RzIHdoaWNoIGlzCi0gIC8vIHdoeSB0aGV5IGFyZSBub3QgaW5pdGlhbGl6ZWQgaW4gdGhlIGNvbnN0cnVjdG9yLgotICBwcml2YXRlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGN1cnJlbnRQYWdlXzsKLSAgcHJpdmF0ZSBQYWdlV2l6YXJkRGF0YUV2ZW50cyBuZXh0UGFnZV87Ci0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgbmV4dFBlZWtQYWdlXzsKLSAgcHJpdmF0ZSBQYWdlV2l6YXJkRGF0YUV2ZW50cyBmaXJzdFBhZ2VfOwotICBwcml2YXRlIENvbW1hbmRGcmFnbWVudCAgICAgIGxhc3RVbmRvRnJhZ21lbnRfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgIGZpcnN0RnJhZ21lbnRfOwotICAKLSAgcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeV87Ci0gIHByaXZhdGUgU3RhY2sgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YWNrXzsKLSAgcHJpdmF0ZSBTdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RhY2tTdGFja187Ci0gIHByaXZhdGUgSGFzaHRhYmxlICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFRhYmxlXzsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSAgICAgICAgICAgICAgICAgd2lkZ2V0UmVnaXN0cnlfOwotICBwcml2YXRlIEhhc2h0YWJsZSAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRGYWN0b3J5VGFibGVfOwotICAgIAotICBwdWJsaWMgV2l6YXJkUGFnZU1hbmFnZXIoIFNpbXBsZVdpZGdldFJlZ2lzdHJ5ICByZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXphcmRQYWdlRmFjdG9yeSAgICAgcGFnZUZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdpemFyZCAgICAgICAgICAgICAgIHdpemFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhRmxvd01hbmFnZXIgICAgICAgZGF0YU1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZUVudmlyb25tZW50ICAgIGVudmlyb25tZW50ICkKLSAgeyAKLSAgICBzdXBlciggZW52aXJvbm1lbnQsIGRhdGFNYW5hZ2VyICk7ICAKLSAgICAKLSAgCXBhZ2VGYWN0b3J5XyAgICAgICAgPSBwYWdlRmFjdG9yeTsKLSAgCXBhZ2VUYWJsZV8gICAgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7ICAKLSAgCXJlZ2lzdHJ5XyAgICAgICAgICAgPSByZWdpc3RyeTsKLSAgCXdpemFyZF8gICAgICAgICAgICAgPSB3aXphcmQ7Ci0JICB3aWRnZXRUYWJsZV8gICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOwotCSAgd2lkZ2V0RmFjdG9yeVRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLQkgIHdpZGdldFJlZ2lzdHJ5XyAgICAgPSBXaWRnZXRSZWdpc3RyeS5pbnN0YW5jZSgpOwotCSAgd2lkZ2V0U3RhY2tTdGFja18gICA9IG5ldyBTdGFjaygpOwotICB9Ci0gIAotICBwdWJsaWMgIElXaXphcmRQYWdlIGdldFN0YXJ0aW5nUGFnZSgpCi0gIHsKLSAgICBpZiggZmlyc3RQYWdlXyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBmaXJzdFBhZ2VfID0gKFBhZ2VXaXphcmREYXRhRXZlbnRzKWdldE5leHRQYWdlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaXJzdFBhZ2VfOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBydW5Gb3J3YXJkVG9OZXh0U3RvcCgpCi0gIHsgICAgCi0gIAlmaXJzdEZyYWdtZW50XyAgPSB0cnVlOwotICAJbmV4dFBhZ2VfICAgICAgID0gbnVsbDsKLSAgIAkKLSAgCXJldHVybiBzdXBlci5ydW5Gb3J3YXJkVG9OZXh0U3RvcCggZ2V0Q29udGFpbmVyKCkgKTsKLSAgfQotICAgIAotICBwcml2YXRlIElXaXphcmRDb250YWluZXIgZ2V0Q29udGFpbmVyKCkKLSAgewotICAgIElXaXphcmRDb250YWluZXIgY29udGFpbmVyID0gd2l6YXJkXy5nZXRDb250YWluZXIoKTsKLSAgICAKLSAgICBpZiggY29udGFpbmVyID09IG51bGwgfHwgY29udGFpbmVyLmdldEN1cnJlbnRQYWdlKCkgPT0gbnVsbCApCi0gICAgewotICAgICAgY29udGFpbmVyID0gbnVsbDsKLSAgICB9ICAgCi0gICAgCi0gICAgcmV0dXJuIGNvbnRhaW5lcjsKLSAgfQotICAKLSAgcHVibGljIElXaXphcmRQYWdlIGdldEN1cnJlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBjdXJyZW50UGFnZV87Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gaGFzTmV4dFBhZ2UoKQotICB7CQotCSAKLSAgICBuZXh0UGVla1BhZ2VfID0gbnVsbDsKLSAgICAKLQl0cnkKLQl7Ci0gIAluZXh0UGVla1BhZ2VfID0gZ2V0TmV4dFBhZ2VJbkdyb3VwKCB3aWRnZXRGYWN0b3J5Xywgd2lkZ2V0U3RhY2tfLCBmYWxzZSApOwotCQkKLQkgIGlmKCBuZXh0UGVla1BhZ2VfID09IG51bGwgKQotCSAgewotCSAgICAvLyBJZiBhIHBhZ2UgaXMgZm91bmQgbmV4dFBhZ2VfIHdpbGwgYmUgc2V0IHRvIGl0cyB2YWx1ZSBpbiB0aGUgbWV0aG9kIGJlbG93LgotICAJICAgIGVuZ2luZV8ucGVla0ZvcndhcmRUb05leHRTdG9wKCk7Ci0JICB9Ci0JfQotCWNhdGNoKCBUaHJvd2FibGUgZXhjICkKLQl7Ci0JICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotICAJCi0gICAgcmV0dXJuIG5leHRQZWVrUGFnZV8gIT0gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIElXaXphcmRQYWdlIGdldE5leHRQYWdlKCkKLSAgeyAgCQotCXRyeQotCXsgICAgCi0gIAkvLyBOZWVkIHRvIGV4dGVybmFsaXplIHRoZSBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlIHNvIHRoYXQKLSAgCS8vIHdoZW4gd2UgbW92ZSBmb3J3YXJkIGJlbG93IHRoZSBkYXRhIGlzIGF2YWlsYWJsZS4KLSAgCWlmKCBjdXJyZW50UGFnZV8gIT0gbnVsbCApIGN1cnJlbnRQYWdlXy5nZXREYXRhRXZlbnRzKCkuZXh0ZXJuYWxpemUoKTsKLSAgCQotICAgIGlmKCBlbnZpcm9ubWVudF8uZ2V0TG9nKCkuaXNFbmFibGVkKCkgKQotICAgIHsKLSAgICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAid3NfZHRfY21kX2VuZ2luZSIsIDUwMTAsIHRoaXMsICJDbWQgc3RhY2sgZHVtcDoiLCBlbmdpbmVfICk7Ci0gICAgfQotICAgIAotCSAgbmV4dFBhZ2VfID0gZ2V0TmV4dFBhZ2VJbkdyb3VwKCB3aWRnZXRGYWN0b3J5Xywgd2lkZ2V0U3RhY2tfLCB0cnVlICk7Ci0JCi0JICBpZiggbmV4dFBhZ2VfID09IG51bGwgKQotCSAgewotCSAgICB3aWRnZXRGYWN0b3J5XyA9IG51bGw7Ci0JICAgIHdpZGdldFN0YWNrXyAgID0gbnVsbDsKLQkJCi0gIAkgIElTdGF0dXMgc3RhdHVzID0gcnVuRm9yd2FyZFRvTmV4dFN0b3AoKTsKLSAgCQotICAJICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gIAkgIHsKLSAgCSAgICAvLyBBbiBlcnJvciBoYXMgb2NjdXJlZCBzbyB3ZSBuZWVkIHVuZG8gdG8gdGhlIHByZXZpb3VzIHN0b3AgcG9pbnQuCi0gIAkgICAgdW5kb1RvTGFzdFBhZ2UoKTsKLSAgCSAgfQotCSAgfQotCQotICAJaWYoIG5leHRQYWdlXyAhPSBudWxsICkgbmV4dFBhZ2VfLnNldFdpemFyZCggd2l6YXJkXyApOwotICAJICAJCi0gIAlyZXR1cm4gbmV4dFBhZ2VfOwotCX0KLQljYXRjaCggVGhyb3dhYmxlIGV4YyApCi0JewotCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwkKLQl9Ci0JCi0JcmV0dXJuIG51bGw7Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgaGFuZGxlUGFnZVZpc2libGUoIFBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UsIGJvb2xlYW4gaXNQYWdlVmlzaWJsZSApCi0gIHsKLSAgICBpZiggIWlzUGFnZVZpc2libGUgJiYgcGFnZSA9PSBmaXJzdFBhZ2VfICYmIHBhZ2UgPT0gY3VycmVudFBhZ2VfICkKLSAgICB7Ci0gICAgICAvLyBXZSBhcmUgbW92aW5nIGJhY2sgb25lIHBhZ2UgZnJvbSB0aGUgZmlyc3QgcGFnZS4gIFRoaXMgY2FuJ3QgaGFwcGVuIHdpdGggcG9wdXAgd2l6YXJkcwotICAgICAgLy8gc2luY2UgdGhlIHByZXZpb3VzIGJ1dHRvbiB3b3VsZCBiZSBncmV5ZWQgb3V0LiAgQnV0IHdoZW4gdGhlIG5ldyB3aXphcmQgbGF1bmNoZXMgdGhpcyB3aXphcmQKLSAgICAgIC8vIHRoZSBwcmV2aW91cyBidXR0b24gaXMgbm90IGdyZXllZCBvdXQgYW5kIGJyaW5ncyB0aGUgdXNlciBiYWNrIHRvIHRoZSBsaXN0IHdpemFyZHMgdG8gc2VsZWN0LgotICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBtdXN0IHVud2luZCB0aGUgY29tbWFuZCBlbmdpbmUgYW5kIGdldCByZWFkeSBmb3IgdGhlIHVzZXIgdG8gaW52b2tlIHRoaXMgd2l6YXJkIAotICAgICAgLy8gYWdhaW4uICBXZSBhcmUgYXNzdW1pbmcgaGVyZSB0aGF0IHRoZSBmaXJzdCBwYWdlIGlzIG5ldmVyIHBhcnQgb2YgYSB3aWRnZXQgZ3JvdXAhCi0gIAkgIHVuZG9Ub0xhc3RQYWdlKCk7CSAgCi0gICAgICBjdXJyZW50UGFnZV8gPSBudWxsOwotICAgICAgZmlyc3RQYWdlXyAgID0gbnVsbDsKLSAgICB9Ci0gIAlpZiggY3VycmVudFBhZ2VfICE9IG51bGwgJiYgcGFnZSA9PSBjdXJyZW50UGFnZV8uZ2V0UHJldmlvdXNQYWdlKCkgJiYgaXNQYWdlVmlzaWJsZSApCi0gIAl7Ci0gIAkgIC8vIFdlIGFyZSBtb3ZpbmcgYmFjayBvbmUgcGFnZS4KLSAgCSAgLy8gTm90ZTogd2UgZG9uJ3QgaW50ZXJuYWxpemUgdGhlIHByZXZpb3VzIHBhZ2UgYW5kIHdlIGRvIG5vdCBleHRlcm5hbGl6ZSB0aGUgY3VycmVudCBwYWdlLgotICAJICAvLyAgICAgICB3ZSBhcmUgYmFzaWNhbGx5IGp1c3QgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlIHdpdGhvdXQgcmV0cmlldmluZyBpdHMgc3RhdGUgYW5kCi0gIAkgIC8vICAgICAgIG1vdmluZyB0byB0aGUgcHJldmlvdXMgcGFnZSB3aGljaCBhbHJlYWR5IGhhcyBpdHMgc3RhdGUgc2V0LgotCQotCSAgICBpZiggd2lkZ2V0RmFjdG9yeV8gIT0gbnVsbCApCi0JICAgIHsKLQkJICAgIGlmKCB3aWRnZXRTdGFja18uc2l6ZSgpID4gMCApCi0JCSAgICB7Ci0JCSAgICAgIHdpZGdldFN0YWNrXy5wb3AoKTsKLQkJICAgIH0KLQkJCi0JCSAgICBpZiggd2lkZ2V0U3RhY2tfLnNpemUoKSA9PSAwICkKLQkJICAgIHsKLQkJICAgICAgd2lkZ2V0RmFjdG9yeV8gPSBudWxsOwotCQkgICAgICB3aWRnZXRTdGFja18gPSBudWxsOwotCQkgICAgICB3aWRnZXRTdGFja1N0YWNrXy5wb3AoKTsKLQkJICAgIH0KLQkgICAgfQotCSAgCi0JICAgIGlmKCB3aWRnZXRGYWN0b3J5XyA9PSBudWxsICkKLQkgICAgewotICAJICAgIHVuZG9Ub0xhc3RQYWdlKCk7Ci0JICAgIH0KLQkgIAotICAgICAgLy8gU2luY2Ugd2UgYXJlIG1vdmluZyBiYWNrd2FyZHMgd2UgbmVlZCB0byByZW1vdmUgdGhlCi0gICAgICAvLyBjdXJyZW50IHBhZ2Ugb2JqZWN0IGZyb20gdGhlIG1hcHBpbmcgdGFibGUuCi0gICAgICBkYXRhTWFuYWdlcl8udW5wcm9jZXNzKCBjdXJyZW50UGFnZV8uZ2V0RGF0YUV2ZW50cygpICk7Ci0gICAgICAKLSAgCSAgY3VycmVudFBhZ2VfID0gcGFnZTsKLSAgCX0JCi0gIAllbHNlIGlmKCBpc1BhZ2VWaXNpYmxlICkKLSAgCXsKLQkgICAgdHJ5Ci0JICAgIHsKLSAgCSAgICAvLyBXZSBhcmUgbW92aW5nIGZvcndhcmQgb25lIHBhZ2UuCi0gIAkgICAgV2lkZ2V0RGF0YUV2ZW50cyBkYXRhRXZlbnRzID0gcGFnZS5nZXREYXRhRXZlbnRzKCk7Ci0gIAkgIAotICAJICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBkYXRhRXZlbnRzICk7ICAvLyBQdXNoIG1vZGVsIGRhdGEgaW50byB0aGUgbmV3IHBhZ2UuCi0gIAkgICAgZGF0YUV2ZW50cy5pbnRlcm5hbGl6ZSgpOwotICAJICAKLSAgCSAgICBwYWdlLnZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7ICAJICAKLQkgICAgfQotCSAgICBjYXRjaCggVGhyb3dhYmxlIGV4YyApCi0JICAgIHsKLQkJICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICBmaW5hbGx5Ci0JICAgIHsKLQkgIAkgIGlmKCBjdXJyZW50UGFnZV8gIT0gbnVsbCApIHBhZ2Uuc2V0UHJldmlvdXNQYWdlKCBjdXJyZW50UGFnZV8gKTsKLQkgICAgCSAgCi0JICAJICBjdXJyZW50UGFnZV8gPSBwYWdlOyAgCi0JICAgIH0KLSAgCX0KLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpCi0gIHsgCQotICAJLy8gV2UgbmVlZCB0byBzaW11bGF0ZSB0aGUgbmV4dCBidXR0b24gYmVpbmcgcHJlc3NlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBwYWdlcy4KLSAgCS8vIElmIGFuIGVycm9yIG9jY3VycyB3ZSB3aWxsIHJldHVybiBmYWxzZSBhbmQgcmVzZXQgdGhlIGNvbW1hbmQgc3RhY2sgYmFjayBvdXIgb3JpZ2luYWwgc3RhdGUuCi0gIAlib29sZWFuICAgICAgICAgICAgICBkb25lT2sgICAgICAgICA9IHRydWU7Ci0gIAlQYWdlV2l6YXJkRGF0YUV2ZW50cyBzdGFydFBhZ2UgICAgICA9IGN1cnJlbnRQYWdlXzsKLSAgICBpbnQgICAgICAgICAgICAgICAgICBzdGFja1N0YWNrU2l6ZSA9IHdpZGdldFN0YWNrU3RhY2tfLnNpemUoKTsKLSAgICAKLSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgY3VycmVudEZhY3RvcnkgPSB3aWRnZXRGYWN0b3J5XzsKLSAgCQotICAJLy8gRXh0ZXJuYWxpemUgdGhlIGN1cnJlbnQgcGFnZS4KLSAgCWN1cnJlbnRQYWdlXy5nZXREYXRhRXZlbnRzKCkuZXh0ZXJuYWxpemUoKTsKLSAgCQotICAJLy8gTG9vcCB0aHJvdWdoIHN1YnNlcXVlbnQgcGFnZXMuCi0gIAlkbwotICAJeyAgCSAgCi0gIAkgIElTdGF0dXMgc3RhdHVzID0gcnVuRm9yd2FyZFRvTmV4dFN0b3AoKTsJICAKLSAgCSAgCi0gIAkgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICkKLSAgCSAgewotICAJICAJLy8gQW4gZXJyb3Igb2NjdXJlZCBpbiBvbmUgb2YgdGhlIGNvbW1hbmRzLgotICAJICAJZG9uZU9rID0gZmFsc2U7Ci0gIAkgIH0KLSAgCX0KLSAgCXdoaWxlKCBuZXh0UGFnZV8gIT0gbnVsbCAmJiBkb25lT2spOwotICAJCi0gIAlpZiggIWRvbmVPayApCi0gIAl7Ci0gIAkgIC8vIEFuIGVycm9yIG9jY3VyZWQsIHNvIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSBjb21tYW5kIHN0YWNrIHRvIGl0J3MKLSAgCSAgLy8gb3JnaW5hbCBzdGF0ZS4KLSAgCSAgUGFnZVdpemFyZERhdGFFdmVudHMgcGFnZSA9IG51bGw7Ci0gIAkgIGJvb2xlYW4gICAgICAgICAgICAgIGRvbmUgPSBmYWxzZTsKLSAgCSAgCi0gIAkgIGRvCi0gIAkgIHsKLSAgCSAgICBkb25lID0gcnVuVW5kb1RvTmV4dFN0b3AoIGdldENvbnRhaW5lcigpICk7Ci0gIAkgICAgcGFnZSA9IGdldFBhZ2UoIGxhc3RVbmRvRnJhZ21lbnRfICk7Ci0gICAgICAgIAotICAgICAgICBpZiggcGFnZSA9PSBudWxsICYmIAotICAgICAgICAgICAgY3VycmVudEZhY3RvcnkgIT0gbnVsbCAmJiAKLSAgICAgICAgICAgIGxhc3RVbmRvRnJhZ21lbnRfICE9IG51bGwgJiYKLSAgICAgICAgICAgIGdldFdpZGdldEZhY3RvcnkoIGxhc3RVbmRvRnJhZ21lbnRfLmdldElkKCkgKSA9PSBjdXJyZW50RmFjdG9yeSApCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgY3VycmVudCB3aWRnZXQgZmFjdG9yeSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxhc3QgZnJhZ21lbnQgdGhhdCB3YXMgdW5kb25lLgotICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgYXJlIGJhY2sgdG8gd2hlcmUgd2Ugc3RhcnRlZC4KLSAgICAgICAgICBkb25lID0gdHJ1ZTsgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gUmVzdG9yZSB0aGUgd2lkZ2V0U3RhY2tTdGFjayBiYWNrIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYmVmb3JlCi0gICAgICAgICAgLy8gcnVubmluZyBmb3J3YXJkLgotICAgICAgICAgIHdpZGdldFN0YWNrU3RhY2tfLnNldFNpemUoIHN0YWNrU3RhY2tTaXplICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgU3RhY2tFbnRyeSBlbnRyeSA9IChTdGFja0VudHJ5KXdpZGdldFN0YWNrU3RhY2tfLnBlZWsoKTsKLSAgICAgICAgICAKLSAgICAgICAgICB3aWRnZXRGYWN0b3J5XyA9IGVudHJ5LmZhY3RvcnlfOwotICAgICAgICAgIHdpZGdldFN0YWNrXyAgID0gZW50cnkuc3RhY2tfOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIHBhZ2UgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICB3aWRnZXRGYWN0b3J5XyA9IG51bGw7Ci0gICAgICAgICAgd2lkZ2V0U3RhY2tfID0gbnVsbDsKLSAgICAgICAgfQotICAJICB9Ci0gIAkgIHdoaWxlKCBwYWdlICE9IHN0YXJ0UGFnZSAmJiAhZG9uZSApOyAJICAKLSAgCX0KLSAgCQotICAJcmV0dXJuIGRvbmVPazsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUNhbmNlbCgpCi0gIHsKLSAgICBJV2l6YXJkQ29udGFpbmVyIGNvbnRhaW5lciA9IGdldENvbnRhaW5lcigpOwotICAgIAotICAJd2hpbGUoICFydW5VbmRvVG9OZXh0U3RvcCggY29udGFpbmVyICkgKXt9Ci0gIAkKLSAgCXJldHVybiB0cnVlOwotICB9Ci0gICAgCi0gIHByb3RlY3RlZCBib29sZWFuIHBlZWtGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgeyAgICAgCQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGZyYWdtZW50IGlzIGluIG91ciBwYWdlIHRhYmxlLgotICAgIG5leHRQZWVrUGFnZV8gPSBnZXRQYWdlKCBmcmFnbWVudCApOwotICAgICAgICAgIAkKLQkgIGlmKCBuZXh0UGVla1BhZ2VfID09IG51bGwgKQotCSAgewotCSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSA9IGdldFdpZGdldEZhY3RvcnkoIGZyYWdtZW50LmdldElkKCkgKTsKLQkgIAotCSAgICBpZiggZmFjdG9yeSAhPSBudWxsICkKLQkgICAgewotCQkgICAgbmV4dFBlZWtQYWdlXyA9IGdldE5leHRQYWdlSW5Hcm91cCggZmFjdG9yeSwgbnVsbCwgZmFsc2UgKTsgIAotCSAgICB9Ci0JICB9Ci0JCi0gICAgcmV0dXJuIG5leHRQZWVrUGFnZV8gPT0gbnVsbDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gbmV4dEZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgLy8gSWYgdGhlIHN1cGVyIGNsYXNzIG5leHRGcmFnbWVudCB3YW50IHVzIHRvIHN0b3AgdGhlbiB3ZSB3aWxsIHN0b3AgcmlnaHQgYXdheS4KLSAgICBpZiggIXN1cGVyLm5leHRGcmFnbWVudCggZnJhZ21lbnQgKSApIHJldHVybiBmYWxzZTsKLSAgICAKLSAgCS8vIFRoZSBmaXJzdCBmcmFnbWVudCBpcyBlaXRoZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3aXphcmQKLSAgCS8vIG9yIGl0IGlzIG9uIGEgd2l6YXJkIHBhZ2UuICBJbiBlaXRoZXIgY2FzZSB3ZSBkbyBub3Qgd2FudCAKLSAgCS8vIHRvIHN0b3AgaWYgYSBwYWdlIGlzIGZvdW5kLgotICAJaWYoIGZpcnN0RnJhZ21lbnRfICkKLSAgCXsKLSAgCSAgZmlyc3RGcmFnbWVudF8gPSBmYWxzZTsKLSAgCX0KLSAgCWVsc2UKLSAgCXsKLQkgICAgd2lkZ2V0RmFjdG9yeV8gPSBnZXRXaWRnZXRGYWN0b3J5KCBmcmFnbWVudC5nZXRJZCgpICk7Ci0JICAKLQkgICAgaWYoIHdpZGdldEZhY3RvcnlfICE9IG51bGwgKQotCSAgICB7Ci0JCSAgICB3aWRnZXRTdGFja18gPSBuZXcgU3RhY2soKTsKLSAgICAgICAgCi0gICAgICAgIG5leHRQYWdlXyA9IGdldE5leHRQYWdlSW5Hcm91cCggd2lkZ2V0RmFjdG9yeV8sIHdpZGdldFN0YWNrXywgdHJ1ZSApOwotCQkKLSAgICAgICAgaWYoIG5leHRQYWdlXyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIGZvdW5kIGEgd2lkZ2V0IGNvbnRyaWJ1dG9yIGZvciB0aGlzIGZyYWdtZW50LCBidXQgbm8gcGFnZSB3YXMgZGVsaXZlcmVkIGZvciBpdC4KLSAgICAgICAgICAvLyBXZSB3aWxsIHRoZXJlZm9yZSwgbm90IHB1dCBpdCBvbiBvdXIgc3RhY2sgb2Ygd2lkZ2V0IHN0YWNrcy4KLSAgICAgICAgICB3aWRnZXRTdGFja18gPSBudWxsOwotICAgICAgICAgIHdpZGdldEZhY3RvcnlfID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLQkJICAgICAgU3RhY2tFbnRyeSBlbnRyeSA9IG5ldyBTdGFja0VudHJ5KCk7Ci0JCQotCQkgICAgICBlbnRyeS5mYWN0b3J5XyA9IHdpZGdldEZhY3RvcnlfOwotCQkgICAgICBlbnRyeS5zdGFja18gICA9IHdpZGdldFN0YWNrXzsKLQkJICAgICAgd2lkZ2V0U3RhY2tTdGFja18ucHVzaCggZW50cnkgKTsKLSAgICAgICAgfQotCSAgICB9Ci0JICAgIGVsc2UKLQkgICAgewotICAJICAgIG5leHRQYWdlXyA9IGdldFBhZ2UoIGZyYWdtZW50ICk7Ci0JICAgIH0KLSAgCX0gIAkgIAkKLSAgCQotICAgIHJldHVybiBuZXh0UGFnZV8gPT0gbnVsbDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gdW5kb0ZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gIAlsYXN0VW5kb0ZyYWdtZW50XyA9IGZyYWdtZW50OwotICAJCi0gIAlyZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0TmV4dFBhZ2VJbkdyb3VwKCBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSwgU3RhY2sgd2lkZ2V0U3RhY2ssIGJvb2xlYW4gcHVzaE5ld1dpZGdldCApCi0gIHsKLQkgIFBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UgPSBudWxsOwotCQotCSAgaWYoIGZhY3RvcnkgIT0gbnVsbCApCi0JICB7CSAgCi0JICAgIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIG5ld1dpZGdldCA9IG51bGw7Ci0JCSAgCi0JICAgIGlmKCB3aWRnZXRTdGFjayA9PSBudWxsIHx8IHdpZGdldFN0YWNrLnNpemUoKSA9PSAwICkKLQkgICAgewotCQkgICAgbmV3V2lkZ2V0ID0gZmFjdG9yeS5nZXRGaXJzdE5hbWVkV2lkZ2V0KCk7ICAgCi0JICAgIH0KLQkgICAgZWxzZQotCSAgICB7Ci0JCSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBjdXJyZW50V2lkZ2V0ID0gKElOYW1lZFdpZGdldENvbnRyaWJ1dG9yKXdpZGdldFN0YWNrLnBlZWsoKTsKLQkJICAgIG5ld1dpZGdldCA9IGZhY3RvcnkuZ2V0TmV4dE5hbWVkV2lkZ2V0KCBjdXJyZW50V2lkZ2V0ICk7IAotCSAgICB9Ci0JCSAgCi0JICAgIGlmKCBuZXdXaWRnZXQgIT0gbnVsbCApCi0JICAgIHsKLQkJICAgIHBhZ2UgPSBnZXRQYWdlKCBuZXdXaWRnZXQgKTsKLQkJCi0JCSAgICBpZiggcHVzaE5ld1dpZGdldCApCi0JCSAgICB7Ci0JCSAgICAgIHdpZGdldFN0YWNrLnB1c2goIG5ld1dpZGdldCApOwotCQkgICAgfQotCSAgICB9Ci0JICB9Ci0JCQotCSAgcmV0dXJuIHBhZ2U7ICAKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHVuZG9Ub0xhc3RQYWdlKCkKLSAgewotICAgIGJvb2xlYW4gc3RhY2tFbXB0eSAgPSBmYWxzZTsKLQkgIGJvb2xlYW4gZG9uZVVuZG9pbmcgPSBmYWxzZTsKLSAgICAKLQkgIHdoaWxlKCAhZG9uZVVuZG9pbmcgKQotCSAgewotCSAgICBzdGFja0VtcHR5ID0gcnVuVW5kb1RvTmV4dFN0b3AoIGdldENvbnRhaW5lcigpICk7Ci0JICAKLQkgICAgSVdpemFyZFBhZ2UgcGFnZSA9IG51bGw7Ci0JICAKLQkgICAgaWYoIGxhc3RVbmRvRnJhZ21lbnRfICE9IG51bGwgKQotCSAgICB7Ci0JICAgICAgcGFnZSA9IGdldFBhZ2UoIGxhc3RVbmRvRnJhZ21lbnRfICk7Ci0JCQotCSAgICAgIGlmKCBwYWdlID09IG51bGwgKQotCSAgICAgIHsKLQkJICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGEgZ3JvdXAgcGFnZSBmcmFnbWVudCB3YXMgZm91bmQuCi0JCSAgICAgIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5ID0gZ2V0V2lkZ2V0RmFjdG9yeSggbGFzdFVuZG9GcmFnbWVudF8uZ2V0SWQoKSApOwotCQkgIAotCQkgICAgICBpZiggZmFjdG9yeSAhPSBudWxsICYmICF3aWRnZXRTdGFja1N0YWNrXy5lbXB0eSgpICkKLQkJICAgICAgewotCQkgICAgICAgIFN0YWNrRW50cnkgZW50cnkgPSAoU3RhY2tFbnRyeSl3aWRnZXRTdGFja1N0YWNrXy5wZWVrKCk7Ci0JCQkKLSAgICAgICAgICAgIGlmKCBlbnRyeS5mYWN0b3J5XyA9PSBmYWN0b3J5ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gV2UgZm91bmQgdGhlIGZhY3RvcnkgZm9yIHRoZSBlbnRyeSBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KLQkJICAgICAgICAgIHdpZGdldEZhY3RvcnlfID0gZW50cnkuZmFjdG9yeV87Ci0JCSAgICAgICAgICB3aWRnZXRTdGFja18gICA9IGVudHJ5LnN0YWNrXzsJCi0JCQkKLQkJICAgICAgICAgIGlmKCB3aWRnZXRTdGFja18gIT0gbnVsbCAmJiAhd2lkZ2V0U3RhY2tfLmVtcHR5KCkgKQotCQkgICAgICAgICAgewotCQkgICAgICAgICAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBjdXJyZW50V2lkZ2V0ID0gKElOYW1lZFdpZGdldENvbnRyaWJ1dG9yKXdpZGdldFN0YWNrXy5wZWVrKCk7Ci0JCQkKLQkJICAgICAgICAgICAgcGFnZSA9IGdldFBhZ2UoIGN1cnJlbnRXaWRnZXQgKTsKLQkJICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQkJICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgCi0JICAgIGRvbmVVbmRvaW5nID0gcGFnZSAhPSBudWxsIHx8IHN0YWNrRW1wdHk7Ci0JICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0UGFnZSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGZyYWdtZW50IGlzIGluIG91ciBwYWdlIHRhYmxlLgotICAJUGFnZVdpemFyZERhdGFFdmVudHMgcGFnZSA9IChQYWdlV2l6YXJkRGF0YUV2ZW50cylwYWdlVGFibGVfLmdldCggZnJhZ21lbnQgKTsgCi0gIAlTdHJpbmcgICAgICBpZCAgID0gZnJhZ21lbnQuZ2V0SWQoKTsgICAgICAJCi0gICAgICAgICAgCQotICAgIGlmKCBwYWdlID09IG51bGwgJiYgaWQgIT0gbnVsbCApCi0gICAgewotICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgZnJhZ21lbnQgaWQgaXMgaW4gdGhlIHJlZ2lzdHJ5LgotICAgICAgUGFnZUluZm8gcGFnZUluZm8gPSByZWdpc3RyeV8uZ2V0UGFnZUluZm8oIGlkICk7ICAgICAgICAgIAkgIAotICAgICAgICAgICAgICAKLSAgICAgIGlmKCBwYWdlSW5mbyAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgcGFnZSA9IHBhZ2VGYWN0b3J5Xy5nZXRQYWdlKCBwYWdlSW5mbywgdGhpcyApOwotICAgICAgICBwYWdlVGFibGVfLnB1dCggZnJhZ21lbnQsIHBhZ2UgKTsgICAgICAgICAgICAJCi0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhZ2U7Ci0gIH0gICAgCi0gIAotICBwcml2YXRlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGdldFBhZ2UoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldCApCi0gIHsKLQkgIFBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UgPSAoUGFnZVdpemFyZERhdGFFdmVudHMpd2lkZ2V0VGFibGVfLmdldCggd2lkZ2V0ICk7Ci0KLQkgIGlmKCBwYWdlID09IG51bGwgKQotCSAgewotCSAgICBQYWdlSW5mbyBwYWdlSW5mbyA9IG5ldyBQYWdlSW5mbyh3aWRnZXQuZ2V0VGl0bGUoKSwgd2lkZ2V0LmdldERlc2NyaXB0aW9uKCksIHdpZGdldC5nZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSApOwotCSAgCi0JICAgIHBhZ2UgPSBwYWdlRmFjdG9yeV8uZ2V0UGFnZSggcGFnZUluZm8sIHRoaXMgKTsKLQkgICAgd2lkZ2V0VGFibGVfLnB1dCggd2lkZ2V0LCBwYWdlICk7Ci0JICB9Ci0JCi0JICByZXR1cm4gcGFnZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZ2V0V2lkZ2V0RmFjdG9yeSggU3RyaW5nIGlkICkKLSAgewotCSAgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnkgPSAoSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KXdpZGdldEZhY3RvcnlUYWJsZV8uZ2V0KCBpZCApOwotCQotCSAgaWYoIGZhY3RvcnkgPT0gbnVsbCApCi0JICB7Ci0JICAgIC8vIFRoZSBmYWN0b3J5IGlzIG5vdCBpbiBvdXIgdGFibGUgc28gd2Ugd2lsbCB0cnkgdGhlIHJlZ2lzdHJ5LgotCSAgICBmYWN0b3J5ID0gd2lkZ2V0UmVnaXN0cnlfLmdldEZhY3RvcnkoIGlkICk7Ci0JICAKLQkgICAgaWYoIGZhY3RvcnkgIT0gbnVsbCApCi0JICAgIHsKLQkgICAgICB3aWRnZXRGYWN0b3J5VGFibGVfLnB1dCggaWQsIGZhY3RvcnkgKTsKLQkgICAgICBmYWN0b3J5LnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhTWFuYWdlcl8uZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkgKTsKLQkJICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBmYWN0b3J5ICk7Ci0JICAgIH0KLQkgIH0KLQkgIGVsc2UKLQkgIHsKLQkgICAgZGF0YU1hbmFnZXJfLnByb2Nlc3MoIGZhY3RvcnkgKTsKLQkgIH0KLQkKLQkgIHJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFN0YWNrRW50cnkKLSAgewotICAgIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5XzsKLQkgIFN0YWNrICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9wb3B1cC9EeW5hbWljUG9wdXBXaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9wb3B1cC9EeW5hbWljUG9wdXBXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGExNzQ4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvcG9wdXAvRHluYW1pY1BvcHVwV2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNDE3ICAgMTM2NTk2IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNzMxICAgMTIwMzc4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBGaWVsZHMgbm90IHZpc2libGUgaW4gTGFyZ2UgZm9udCBzZXR0aW5ncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVQb3B1cFBhZ2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpemFyZFBhZ2VGYWN0b3J5OwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHBvcHVwIGR5bmFtaWMgd2l6YXJkcy4gIFRoZSBwb3B1cE1lbnVzIGV4dGVuc2lvbiBpcyB1c2VkCi0gKiB0aGUgY29udHJpYnV0ZSBhIHBvcHVwIHRvIEVjbGlwc2UuICBUaGUgY2xhc3MgaW4gdGhlIGFjdGlvbiBlbGVtZW50IHNob3VsZCByZWZlcmVuY2UKLSAqIHRoaXMgRHluYW1pY1BvcHVwV2l6YXJkIGNsYXNzLiAgVGhpcyBpZCBhdHRyaWJ1dGUgaW4gdGhlIGFjdGlvbiBlbGVtZW50IHNob3VsZCBjb250YWluCi0gKiBhbiBpZCB0aGF0IHJlZmVyZW5jZXMgYSBkeW5hbWljV2l6YXJkIGV4dGVuc2lvbiBwb2ludC4gIFRoaXMgaXMgaG93IHRoZSBEeW5hbWljUG9wdXBXaXphcmQKLSAqIGNsYXNzIGtub3dzIHdoaWNoIHdpemFyZCB0byBkaXNwbGF5LgotICogICAKLSAqIE5vdGU6IHRoZSBpZCBhdHRyaWJ1dGUgaW4gdGhlIG9iamVjdENvbnRyaWJ1dGlvbiBlbGVtZW50IHJlZmVycyB0byBhbgotICogICAgICAgYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZXh0ZW5zaW9uIHBvaW50LiAgVGhlIGlkcyBpbiBvYmplY3RDb250cmlidXRpb24KLSAqICAgICAgIGVsZW1lbnQgYW5kIHRoZSBhY3Rpb24gZWxlbWVudCBuZWVkIG5vdCBiZSB0aGUgc2FtZSBhcyB0aGV5IGFyZSBpbiB0aGUKLSAqICAgICAgIGV4YW1wbGUgYmVsb3cuCi0gKgotICo8cHJlPgotICogICAmbHQ7ZXh0ZW5zaW9uCi0gKiAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIiZndDsKLSAqJmx0OyEtLSBJRmlsZSAqLndzZGwgcG9wdXAgbWVudSAtLSZndDsKLSAqICAgICAmbHQ7b2JqZWN0Q29udHJpYnV0aW9uCi0gKiAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICogICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqJmx0OyEtLSBXU0RMIFRvIEphdmEgQmVhbiBQcm94eSAtLSZndDsKLSAqICAgICAgICAmbHQ7YWN0aW9uCi0gKiAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWSIKLSAqICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICogICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAqICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqICAgICAgICAmbHQ7L2FjdGlvbiZndDsKLSAqICAgICAmbHQ7L29iamVjdENvbnRyaWJ1dGlvbiZndDsKLSAqICAmbHQ7L2V4dGVuc2lvbiZndDsKLSAqCi0gKiAgICZsdDtleHRlbnNpb24KLSAqICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiJmd0OwotICogICAgICZsdDtkeW5hbWljV2l6YXJkCi0gKiAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNjbGllbnRfd2l6LmdpZiIKLSAqICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZy5DbGllbnRXaWRnZXRCaW5kaW5nIgotICogICAgICAgICAgIHRpdGxlPSIlV0laQVJEX1RJVExFX1dTQyIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqICAgICAmbHQ7L2R5bmFtaWNXaXphcmQmZ3Q7Ci0gKiAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0gKjwvcHJlPgotICoKLSAqLwotcHVibGljIGNsYXNzIER5bmFtaWNQb3B1cFdpemFyZCBleHRlbmRzIER5bmFtaWNXaXphcmQgaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0gIAotICBwdWJsaWMgRHluYW1pY1BvcHVwV2l6YXJkKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkI2dldFdpemFyZFBhZ2VGYWN0b3J5KCkKLSAgICovCi0gIHByb3RlY3RlZCBXaXphcmRQYWdlRmFjdG9yeSBnZXRXaXphcmRQYWdlRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNpbXBsZVBvcHVwUGFnZUZhY3RvcnkoIGdldElkKCkgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuICgoSUNvbmZpZ3VyYXRpb25FbGVtZW50KW9yaWdpbmFsRWxlbWVudF8uZ2V0UGFyZW50KCkpLmdldEF0dHJpYnV0ZSggImlkIiApOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIElBY3Rpb25EZWxlZ2F0ZSNydW4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgCi0gIHsKLSAgICBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgY29udGV4dCA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAgID0gZ2V0SWQoKTsKLSAgICAKLQlpZiggY29udGV4dC5zaG93RGlhbG9nKGlkKSApCi0JewotCSAgLy8gTGF1bmNoIHRoZSB3aXphcmQuCi0JICBpbml0KCBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLCBnZXRTZWxlY3Rpb24oKSApOyAgCi0JICAgIAotCSAgV2l6YXJkRGlhbG9nIGRpYWxvZz0gbmV3IFdpemFyZERpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIHRoaXMpOwotCSAgZGlhbG9nLmNyZWF0ZSgpOwotICAgIAotICAgIGlmKCBnZXRTdGFydGluZ1BhZ2UoKSAhPSBudWxsICkKLSAgICB7Ci0JICAgIGRpYWxvZy5vcGVuKCk7Ci0gICAgfQotCX0KLQllbHNlCi0JewotCSAgZmluYWwgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nIG1vbml0b3IgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSk7Ci0JICAKLQkgIHRyeQotCSAgewotCSAgICBtb25pdG9yLnJ1biggZmFsc2UsIGZhbHNlLCBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1biggSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgKQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkgICAgIHJ1bkhlYWRMZXNzKCBnZXRTZWxlY3Rpb24oKSwgbW9uaXRvciApOwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotCSAgfQotCSAgY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIGV4YyApCi0JICB7IAotCSAgfQotCSAgY2F0Y2goIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXhjICkKLQkgIHsKLQkgIH0KLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSdW5zIG9ubHkgdGhlIENvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHluYW1pYyB3aXphcmQuCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0aW9uIHRoZSBpbml0aWFsIHNlbGVjdGlvbiBmcm9tIHRoZSB1c2VyLgotICAgKiBAcGFyYW0gY29udGV4dCB0aGUgY29udGV4dCB0aGF0IHRoaXMgZXhlY3V0aW9uIHNob3VsZCB0YWtlIHBsYWNlIGluLiAgVGhpcwotICAgKiAgICAgICAgICAgICAgICBpcyB1c3VhbGx5IGEgcHJvZ3Jlc3MgY29udGV4dCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBnZXQgZmVlZGJhY2sKLSAgICogICAgICAgICAgICAgICAgb24gaG93IGV4ZWN1dGlvbiBpcyBwcm9ncmVzc2luZy4gIFRoZSBjb250ZXh0IG1heSBiZSBudWxsLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuSGVhZExlc3MoIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiwgSVJ1bm5hYmxlQ29udGV4dCBjb250ZXh0ICkKLSAgewotCVBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQlFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgICBoYW5kbGVyICAgICAgICAgPSBuZXcgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKTsKLQlFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgICBlbnZpcm9ubWVudCAgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCByZXNvdXJjZUNvbnRleHQsIGhhbmRsZXIgKTsKLQkgICAgCi0JRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwgICAgZGF0YVJlZ2lzdHJ5XyAgID0gbmV3IERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsKCk7CSAgICAKLQlEYXRhRmxvd01hbmFnZXIgICAgICAgICAgICBkYXRhTWFuYWdlciAgICAgPSBuZXcgRGF0YUZsb3dNYW5hZ2VyKCBkYXRhUmVnaXN0cnlfLCBlbnZpcm9ubWVudCApOwotCVNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyIG1hbmFnZXIgICAgICAgICA9IG5ldyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcihlbnZpcm9ubWVudCwgZGF0YU1hbmFnZXIgKTsKLQkKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb21tYW5kV2lkZ2V0QmluZGluZ18gPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpd2l6YXJkRWxlbWVudF8uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbiggImNsYXNzIiApOwotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0JICAKLQljb21tYW5kV2lkZ2V0QmluZGluZ18ucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeV8gKTsKLQkKLQlDb21tYW5kRnJhZ21lbnQgcm9vdEZyYWdtZW50ID0gZ2V0Um9vdEZyYWdtZW50KCBzZWxlY3Rpb24sIG51bGwgKTsKLQkKLQltYW5hZ2VyLnNldFJvb3RGcmFnbWVudCggcm9vdEZyYWdtZW50ICk7Ci0JbWFuYWdlci5ydW5Gb3J3YXJkVG9OZXh0U3RvcCggY29udGV4dCApOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBJQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIAotICB7Ci0gICAgICBzZWxlY3Rpb25fID0gc2VsZWN0aW9uOwotICB9Ci0gIAotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0gIHsKLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiByZXN1bHQgPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotICAgIAotCWlmKCBzZWxlY3Rpb25fICE9IG51bGwpIAotCXsJCi0JICBpZiggc2VsZWN0aW9uXyBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICkgCi0JICB7Ci0JICAgIHJlc3VsdCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb25fOwotCSAgfQotCX0KLQllbHNlIAotCXsKLQkgIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkgIAotCSAgaWYoIHdpbmRvdyAhPSBudWxsICkgCi0JICB7Ci0JCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvblNlcnZpY2UoKS5nZXRTZWxlY3Rpb24oKTsKLQkJCi0JCWlmKCBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiApIAotCQl7Ci0JCSAgcmVzdWx0ID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbjsKLQkJfQotCSAgfQotCX0KLQkKLQlyZXR1cm4gcmVzdWx0OwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2U2MmI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImFudC1zcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTkxODNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotcnVudGltZQotdGVtcC5mb2xkZXIKLWVudi5qYXIKLUBkb3QKLXNyYy56aXAKLWVudnNyYy56aXAKLWphdmFDb21waWxlci5lbnYuamFyLmFyZ3MKLWphdmFDb21waWxlci5hbnQtbGliX2FudHRhc2tzLmphci5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uZXh0ZXJuYWxUb29sQnVpbGRlcnMvYnVpbGQtYW50dGFza3MubGF1bmNoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmV4dGVybmFsVG9vbEJ1aWxkZXJzL2J1aWxkLWFudHRhc2tzLmxhdW5jaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgwZWU0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uZXh0ZXJuYWxUb29sQnVpbGRlcnMvYnVpbGQtYW50dGFza3MubGF1bmNoCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLmFudC5BbnRMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5BVFRSX0xPQ0FUSU9OIiB2YWx1ZT0iJHt3b3Jrc3BhY2VfbG9jOi9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQtYW50dGFza3MueG1sfSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuTUFJTl9UWVBFIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LmludGVybmFsLnVpLmFudHN1cHBvcnQuSW50ZXJuYWxBbnRSdW5uZXIiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcudWkuQVRUUl9MQVVOQ0hfSU5fQkFDS0dST1VORCIgdmFsdWU9ImZhbHNlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9KRUNUX0FUVFIiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL2libS1zZGstamF2YTUtMjAwNjA5MTIiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5BVFRSX1RSSUdHRVJTX0NPTkZJR1VSRUQiIHZhbHVlPSJ0cnVlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5DTEFTU1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkuQW50Q2xhc3NwYXRoUHJvdmlkZXIiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuYW50LnVpLkRFRkFVTFRfVk1fSU5TVEFMTCIgdmFsdWU9InRydWUiLz4KLTxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfVFlQRVMiPgotPGxpc3RFbnRyeSB2YWx1ZT0iMSIvPgotPC9saXN0QXR0cmlidXRlPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuU09VUkNFX1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkuQW50Q2xhc3NwYXRoUHJvdmlkZXIiLz4KLTxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfUEFUSFMiPgotPGxpc3RFbnRyeSB2YWx1ZT0iL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC1hbnR0YXNrcy54bWwiLz4KLTwvbGlzdEF0dHJpYnV0ZT4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5hcHBlbmRFbnZpcm9ubWVudFZhcmlhYmxlcyIgdmFsdWU9InRydWUiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJwcm9jZXNzX2ZhY3RvcnlfaWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkucmVtb3RlQW50UHJvY2Vzc0ZhY3RvcnkiLz4KLTwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMjgxZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuRXh0ZXJuYWxUb29sQnVpbGRlcjwvbmFtZT4KLQkJCTx0cmlnZ2Vycz5mdWxsLGluY3JlbWVudGFsLDwvdHJpZ2dlcnM+Ci0JCQk8YXJndW1lbnRzPgotCQkJCTxkaWN0aW9uYXJ5PgotCQkJCQk8a2V5PkxhdW5jaENvbmZpZ0hhbmRsZTwva2V5PgotCQkJCQk8dmFsdWU+Jmx0O3Byb2plY3QmZ3Q7Ly5leHRlcm5hbFRvb2xCdWlsZGVycy9idWlsZC1hbnR0YXNrcy5sYXVuY2g8L3ZhbHVlPgotCQkJCTwvZGljdGlvbmFyeT4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTJmMjA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBNYXkgMDcgMjM6MTQ6NTcgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTZjMWMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM3OjE1IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZmMDlhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEphbiAzMSAwMDoxNjo1NCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBmYWEwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6MzggRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjI5ZTk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBlbnYuamFyCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDUucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucGx1Z2luLkVudlBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tYW5kbGluZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMjAzLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjIwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHM7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMjAwLDIuMC4wKSIsCi0gb3JnLmFwYWNoZS5hbnQ7YnVuZGxlLXZlcnNpb249IlsxLjcuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmFudC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50LWxpYi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50LWxpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGRiYzM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYW50dGFza3MuamFyCi1hbnR0YXNrc3NyYy56aXAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1zcmMvd3MvYW50L3Rhc2svV2ViU2VydmljZUdlbmVyYXRpb25BbnRUYXNrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQtc3JjL3dzL2FudC90YXNrL1dlYlNlcnZpY2VHZW5lcmF0aW9uQW50VGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmI0MjE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1zcmMvd3MvYW50L3Rhc2svV2ViU2VydmljZUdlbmVyYXRpb25BbnRUYXNrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MjIgICAxNzY5NDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIHdzLmFudC50YXNrOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQuQW50Q29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VHZW5lcmF0aW9uQW50VGFzayBleHRlbmRzIFRhc2sgCi17CQotCQlwdWJsaWMgdm9pZCBleGVjdXRlKCkKLQkJewkJCQotCQkJLy9nZXQgcHJvcGVydGllcyBzZXQgaW4gdGhlIEFudCBmaWxlCi0JCQlQcm9qZWN0IHByb2ogPSBnZXRQcm9qZWN0KCk7Ci0gICAgICAKLSAgICAgIGlmKCBwcm9qICE9IG51bGwgKQotICAgICAgewotICAgICAgICAvL2NhbGwgdGhlIEFudENvbnRyb2xsZXIgdG8ga2ljayBvZmYgZ2VuZXJhdGlvbgotICAgIAkJQW50Q29udHJvbGxlciBjb250cm9sbGVyICAgPSBuZXcgQW50Q29udHJvbGxlcihwcm9qLmdldFByb3BlcnRpZXMoKSk7Ci0gICAgICAgIFN0cmluZyAgICAgICAgZXJyb3JNZXNzYWdlID0gY29udHJvbGxlci5nZXRFcnJvck1lc3NhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBlcnJvck1lc3NhZ2UgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24oIGVycm9yTWVzc2FnZSApOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgICAgICAJCQotCQl9CQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzY2xpZW50LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc2NsaWVudC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODk2ZTFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzY2xpZW50LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0hLS1TY2VuYXJpb1R5cGUgUkVRVUlSRUQuIERpZmZlcmVudGlhdGVzIGZyb20gInNlcnZpY2UiIHNjZW5hcmlvLiAgU2VlIGF4aXNzZXJ2aWNlLnByb3BlcnRpZXMuCi1TY2VuYXJpb1R5cGU9Y2xpZW50Ci0KLSEtLUluaXRpYWxTZWxlY3Rpb24gUkVRVUlSRUQuICBXb3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBpbnB1dCBXU0RMIG9yIEphdmEuCi1Jbml0aWFsU2VsZWN0aW9uPS9keW5hbWljV2ViUHJvamVjdE5hbWUvV2ViQ29udGVudC93c2RsL215U2VydmljZS53c2RsCi0KLSEtLVV0aWxpdHkgcHJvcGVydHkgdmFsdWVzIC0gdXNlIHRoZXNlIHRvIGxpc3QgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0hLS0gQ2xpZW50LlJ1bnRpbWVJZCwgQ2xpZW50LlNlcnZlcklkIAotTGlzdFJ1bnRpbWVzPXRydWUKLUxpc3RTZXJ2ZXJzPXRydWUKLSEtLSBWZXJib3NlIHdpbGwgbGlzdCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZXJyb3JzIGlmIHNldCB0byB0cnVlCi1WZXJib3NlPXRydWUKLQotIAotIS0tQ2xpZW50LlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCi1DbGllbnQuUnVudGltZUlkPW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQKLSEtLUNsaWVudC5TZXJ2ZXJJZCAtIElEIG9mIHRhcmdldCBzZXJ2ZXIgCi1DbGllbnQuU2VydmVySWQ9b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAKLQotIS0tQ2xpZW50UHJvamVjdE5hbWUgLSBuYW1lIG9mIENsaWVudCBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBjbGllbnQgcHJvamVjdCBhIAotIS0tIGRpZmZlcmVudCBuYW1lIHRoYW4gdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSEtLUNsaWVudFByb2plY3ROYW1lPWNsaWVudFByb2plY3ROYW1lCi0KLSEtLUNsaWVudEVhclByb2plY3ROYW1lLSBuYW1lIG9mIENsaWVudCBFQVIgcHJvamVjdCAtIHNldCBvbmx5IGlmIGFwcGxpY2FibGUgZm9yIHNlbGVjdGVkIHNlcnZlciB0eXBlCi0hLS1DbGllbnRFYXJQcm9qZWN0TmFtZT1jbGllbnRFQVJQcm9qZWN0TmFtZQotCi0hLS1DbGllbnRDb21wb25lbnRUeXBlIC0gdHlwZSBvZiBDbGllbnQgcHJvamVjdCAtIHRoZSBmb2xsb3dpbmcgYXJlIHZhbGlkIEF4aXMgdGVtcGxhdGVzOiB0ZW1wbGF0ZS5qc3Qud2ViIGFuZCB0ZW1wbGF0ZS5qc3QudXRpbGl0eQotIS0tQ2xpZW50Q29tcG9uZW50VHlwZT10ZW1wbGF0ZS5qc3Qud2ViCi0KLSEtLSBDdXN0b21pemVDbGllbnRNYXBwaW5ncyAtIHNldCB0byB0cnVlIHRvIHN1cHBseSBwYWNrYWdlLW5hbWVzcGFjZSBtYXBwaW5ncyB0eXBlOiBib29sZWFuCi0hLS1DdXN0b21pemVDbGllbnRNYXBwaW5ncz1mYWxzZSAgCi0gICAgCi0hLS0gTWFwcGluZ3MgCi0hLS0gV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MKLSEtLSBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgSmF2YSBjbGFzc2VzLgotIS0tIE5lZWQgbm90IGJlIHNldCBpZiBDdXN0b21pemVDbGllbnRNYXBwaW5ncyBpcyBmYWxzZSAgCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZS4KLSEtLU1hcHBpbmdzPS90ZXN0UHJvai9tYXBwaW5ncy9tYXBwaW5ncy50eHQKLQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gb3ZlcndyaXRlIGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdC4gdHlwZTpib29sZWFuIAotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIE92ZXJ3cml0ZUZpbGVzRW5hYmxlZD10cnVlCi0KLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkIC0gc2V0IHRvIHRydWUgY3JlYXRlIGZvbGRlcnMgbmVjZXNzYXJ5IGR1cmluZyBmaWxlIGdlbmVyYXRpb24gdHlwZTpib29sZWFuCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS0gQ3JlYXRlRm9sZGVyc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DaGVja291dEZpbGVzRW5hYmxlZCAtIHNldCB0byB0cnVlIHRvIGNoZWNrIG91dCBmaWxlcyB3aXRoIG5vIHdhcm5pbmcgdG8gdGhlIHVzZXIgdHlwZTpib29sZWFuCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS0gQ2hlY2tvdXRGaWxlc0VuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L2F4aXNzZXJ2aWNlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc3NlcnZpY2UucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhN2M5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc3NlcnZpY2UucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBTY2VuYXJpb1R5cGUgUkVRVUlSRUQuIERpZmZlcmVudGlhdGVzIGZyb20gImNsaWVudCIgc2NlbmFyaW8uICBTZWUgYXhpc2NsaWVudC5wcm9wZXJ0aWVzLgotU2NlbmFyaW9UeXBlPXNlcnZpY2UKLQotIS0tIEluaXRpYWxTZWxlY3Rpb24gUkVRVUlSRUQuICBXb3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBpbnB1dCBXU0RMIG9yIEphdmEKLUluaXRpYWxTZWxlY3Rpb249L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsCi0KLSEtLVV0aWxpdHkgcHJvcGVydHkgdmFsdWVzIC0gdXNlIHRoZXNlIHRvIGxpc3QgdmFsaWQgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0hLS0gU2VydmljZS5SdW50aW1lSWQsIFNlcnZpY2UuU2VydmVySWQgCi1MaXN0UnVudGltZXM9dHJ1ZQotTGlzdFNlcnZlcnM9dHJ1ZQotIS0tIFZlcmJvc2Ugd2lsbCBsaXN0IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgYXMgd2VsbCBhcyBlcnJvcnMgaWYgc2V0IHRvIHRydWUKLVZlcmJvc2U9dHJ1ZQotCi0hLS0gIFNlcnZpY2UuUnVudGltZUlkIC0gSUQgb2Ygd2ViIHNlcnZpY2UgcnVudGltZSAKLVNlcnZpY2UuUnVudGltZUlkPW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQKLSEtLSBTZXJ2aWNlLlNlcnZlcklkIC0gIElEIG9mIHRhcmdldCBzZXJ2ZXIgCi1TZXJ2aWNlLlNlcnZlcklkPW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwCi0hLS0gU2VydmljZS5UeXBlSWQgLSAgIlRvcCBEb3duIEVKQiIgb3IgIkJvdHRvbSBVcCBFSkIiICAKLSEtLSBKYXZhIEJlYW4gaXMgZGVmYXVsdCBmb3IgYm90aCBUb3AgRG93biBhbmQgQm90dG9tIFVwCi0hLS0gU2VydmljZS5UeXBlSWQ9VG9wIERvd24gRUpCCi0KLSEtLSBTZXJ2aWNlUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIHByb2plY3QgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uLiAgdHlwZTogU3RyaW5nICAgIAotIS0tU2VydmljZVByb2plY3ROYW1lPXNlcnZpY2VQcm9qZWN0TmFtZQotIS0tIFNlcnZpY2VFYXJQcm9qZWN0TmFtZSAtICEtLXR5cGU6U3RyaW5nIC0gbmFtZSBvZiBTZXJ2aWNlIHByb2plY3QgLSB0aGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGdpdmUgdGhlIHNlcnZpY2UgRUFSIHByb2plY3QgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uLiAgdHlwZTogU3RyaW5nCi0hLS1TZXJ2aWNlRWFyUHJvamVjdE5hbWU9c2VydmljZUVhclByb2plY3ROYW1lCi0KLSEtLSBNYXBwaW5ncwotIS0tIFRvcCBkb3duIG9yIGJvdHRvbSB1cCBzY2VuYXJpby4gV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MuCi0hLS0gVG9wIERvd246IE1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBhY2thZ2UgbmFtZXMgb2YgdGhlIGdlbmVyYXRlZCBKYXZhIHRlbXBsYXRlIGNsYXNzZXMuCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgbmFtZXNwYWNlPXBhY2thZ2UgIAotIS0tIEJvdHRvbSBVcDogTWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG5hbWVzIGluIHRoZSBnZW5lcmF0ZWQgV1NETC4KLSEtLSBUaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCBwYWNrYWdlID0gbmFtZXNwYWNlIAotIS0tTWFwcGluZ3M9L3Rlc3RQcm9qL21hcHBpbmdzL21hcHBpbmdzLnR4dAotCi0hLS0gSmF2YU91dHB1dAotIS0tIFRvcCBkb3duIC0gU3RyaW5nOiB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSBmb3IgYSBKYXZhIHNvdXJjZSBmb2xkZXIgZm9yIHRoZSBnZW5lcmF0ZWQgSmF2YSBjb2RlIC0gbXVzdCBiZSBleGlzdGluZyB3b3Jrc3BhY2Ugc291cmNlIGZvbGRlcgotIS0tSmF2YU91dHB1dD0vcHJvamVjdE5hbWUvSmF2YVNvdXJjZQotCi0hLS0gTWV0aG9kcwotIS0tIEJvdHRvbSB1cCAtIHNwYWNlIGRlbGltaXRlZCBzdHJpbmcgb2YgbWV0aG9kIHNpZ25hdHVyZXMgKGkuZS4gbWV0aG9kMShwYXJtVHlwZTEpIG1ldGhvZDIocGFybVR5cGUyKSkgdG8gYmUgZXhwb3NlZCBpbiBvdXRwdXQgV1NETC4gIElmIG5vIGxpc3QgaXMgcHJvdmlkZWQsIGFsbCBtZXRob2RzIGFyZSBleHBvc2VkLgotIS0tIE1ldGhvZHM9Ci0KLSEtLSBTdHlsZQotIS0tIEJvdHRvbSB1cCAtIFN0cmluZzogb25lIG9mOiBSUEMsIERPQ1VNRU5ULCBXUkFQUEVECi0hLS1TdHlsZT1ET0NVTUVOVAotCi0hLS0gVXNlCi0hLS0gQm90dG9tIHVwIC0gU3RyaW5nOiBvbmUgb2Y6IExJVEVSQUwsIEVOQ09ERUQgCi0hLS1Vc2U9TElURVJBTAotCi0hLS1PdmVyd3JpdGVGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBvdmVyd3JpdGUgZmlsZXMgdGhhdCBhbHJlYWR5IGV4aXN0LiB0eXBlOmJvb2xlYW4gCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS1PdmVyd3JpdGVGaWxlc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DcmVhdGVGb2xkZXJzRW5hYmxlZCAtIHNldCB0byB0cnVlIGNyZWF0ZSBmb2xkZXJzIG5lY2Vzc2FyeSBkdXJpbmcgZmlsZSBnZW5lcmF0aW9uIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tQ3JlYXRlRm9sZGVyc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DaGVja291dEZpbGVzRW5hYmxlZCAtIHNldCB0byB0cnVlIHRvIGNoZWNrIG91dCBmaWxlcyB3aXRoIG5vIHdhcm5pbmcgdG8gdGhlIHVzZXIgdHlwZTpib29sZWFuCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS1DaGVja291dEZpbGVzRW5hYmxlZD10cnVlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvd3NhbnQuYmF0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlhNDI2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvd3NhbnQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotcmVtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLXJlbSAgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotcmVtICBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi1yZW0gIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotcmVtICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotcmVtICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotcmVtIAotcmVtICBDb250cmlidXRvcnM6Ci1yZW0gICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLXJlbSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1lY2hvIG9mZgotc2V0bG9jYWwKLQotUkVNICoqKioqKioqKioqIExvY2FsIGVudmFycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotUkVNIFRoZSBKUkUgamF2YS5leGUgdG8gYmUgdXNlZCBieSBBbnQuICBOb3RlOiBmb3IgV1RQIDIuMCB0aGUgSkRLIG5lZWRzIHRvIGJlIDEuNSBvciBoaWdoZXIuCi1zZXQgSkFWQUVYRT0iQzpcamRrMS41LjBcanJlXGJpblxqYXZhLmV4ZSIKLQotUkVNIFRoZSBFY2xpcHNlIGluc3RhbGwgZGlyZWN0b3J5LiAgU29tZSBFY2xpcHNlIGJhc2VkIHByb2R1Y3RzIG1heSByZWZlciB0byB0aGlzIGRpcmVjdG9yeQotUkVNIGFzIHRoZSBub24gc2hhcmVkIGRpcmVjdG9yeS4KLXNldCBJTlNUQUxMX0RJUkVDVE9SWT1kOlxwcm9kdWN0ZGlyZWN0b3J5XGVjbGlwc2UKLQotUkVNIFRoZSBzaGFyZWQgRWNsaXBzZSBmZWF0dXJlcyBkaXJlY3RvcnkuICBTb21lIEVjbGlwc2UgYmFzZWQgcHJvZHVjdHMgbWF5IHNwbGl0IHRoZWlyIAotUkVNIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW50byBzaGFyZWQgYW5kIG5vbiBzaGFyZWQgZm9sZGVycy4gIFRoZSB2YXJpYWJsZSBiZWxvdyBzaG91bGQgYmUKLVJFTSBzZXQgdG8gdGhlIHNoYXJlZCBkaXJlY3RvcnkuICBOb3RlOiBhIGRlZmF1bHQgV1RQIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzcGxpdCBpdCdzCi1SRU0gZGlyZWN0b3J5IHN0cnVjdHVyZSBzbyB0aGUgSU5TVEFMTF9ESVJFQ1RPUlkgYW5kIHRoZSBTSEFSRURfRElSRUNUT1JZIHNob3VsZCBiZSB0aGUgc2FtZS4KLXNldCBTSEFSRURfRElSRUNUT1JZPSVJTlNUQUxMX0RJUkVDVE9SWSUKLQotUkVNIFRoZSBFY2xpcHNlIEVxdWlub3ggTGF1bmNoZXIgamFyLiAgVXN1YWxseSB0aGlzIHBsdWdpbiBqYXIgZmlsZSBpcyBsb2NhdGVkIGluIHRoZQotUkVNIHNoYXJlZCBwbHVnaW4gZGlyZWN0b3J5KGllLiBwbHVnaW5zXG9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIqLmphciApCi1zZXQgTEFVTkNIRVJfSkFSPSIlU0hBUkVEX0RJUkVDVE9SWSVccGx1Z2luc1xvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyXzEuMC4wLnYyMDA3MDYwNi5qYXIiCi0KLVJFTSBUaGUgbG9jYXRpb24gb2YgeW91ciB3b3Jrc3BhY2UKLXNldCBXT1JLU1BBQ0U9Qzpcd29ya3NwYWNlCi0KLVJFTSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLWlmIG5vdCBleGlzdCAlSkFWQUVYRSUgZWNobyBFUlJPUjogaW5jb3JyZWN0IGphdmEuZXhlPSVKQVZBRVhFJSwgZWRpdCB0aGlzIGZpbGUgYW5kIGNvcnJlY3QgdGhlIEpBVkFFWEUgZW52YXIKLWlmIG5vdCBleGlzdCAlSkFWQUVYRSUgZ290byBkb25lCi0KLWlmIG5vdCBleGlzdCAlTEFVTkNIRVJfSkFSJSBlY2hvIEVSUk9SOiBpbmNvcnJlY3QgbGF1bmNoZXIgamFyPSVMQVVOQ0hFUl9KQVIlLCBlZGl0IHRoaXMgZmlsZSBhbmQgY29ycmVjdCB0aGUgTEFVTkNIRVJfSkFSIGVudmFyCi1pZiBub3QgZXhpc3QgJUxBVU5DSEVSX0pBUiUgZ290byBkb25lCi0KLTpydW4KLUBlY2hvIG9uCi0lSkFWQUVYRSUgLWphciAlTEFVTkNIRVJfSkFSJSAtaW5zdGFsbCAlSU5TVEFMTF9ESVJFQ1RPUlklIC1jb25maWd1cmF0aW9uICVJTlNUQUxMX0RJUkVDVE9SWSVcY29uZmlndXJhdGlvbiAtYXBwbGljYXRpb24gb3JnLmVjbGlwc2UuYW50LmNvcmUuYW50UnVubmVyIC1kYXRhICVXT1JLU1BBQ0UlIC1maWxlIHdzZ2VuLnhtbCAlKiA+d3NnZW4udHh0IDI+JjEKLQotOmRvbmUKLXBhdXNlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvd3NhbnQuc2ggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvd3NhbnQuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYzlmZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LnNoCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jIS9iaW4vc2gKLXNldCArdgotCi0jU2NyaXB0IHRvIHJ1biBXZWJTZXJ2aWNlIEFudCB0YXNrcyBpbiBoZWFkbGVzcyBFY2xpcHNlIG1vZGUKLQotZWNobyAiU2V0dGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMiCi0KLSMgVGhlIEpSRSBqYXZhLmV4ZSB0byBiZSB1c2VkIGJ5IEFudC4gIE5vdGU6IGZvciBXVFAgMi4wIHRoZSBKREsgbmVlZHMgdG8gYmUgMS41IG9yIGhpZ2hlci4KLUpBVkFFWEU9L2hvbWUvdGVzdGVyL2pkazEuNS4wL2pyZS9iaW4vamF2YQotICAgICAgIAotICAgICAgIAotIyBUaGUgRWNsaXBzZSBpbnN0YWxsIGRpcmVjdG9yeS4gIFNvbWUgRWNsaXBzZSBiYXNlZCBwcm9kdWN0cyBtYXkgcmVmZXIgdG8gdGhpcyBkaXJlY3RvcnkKLSMgYXMgdGhlIG5vbiBzaGFyZWQgZGlyZWN0b3J5LgotSU5TVEFMTF9ESVJFQ1RPUlk9L3Byb2R1Y3RkaXJlY3RvcnkvZWNsaXBzZQotCi0jIFRoZSBzaGFyZWQgRWNsaXBzZSBmZWF0dXJlcyBkaXJlY3RvcnkuICBTb21lIEVjbGlwc2UgYmFzZWQgcHJvZHVjdHMgbWF5IHNwbGl0IHRoZWlyIAotIyBkaXJlY3Rvcnkgc3RydWN0dXJlIGludG8gc2hhcmVkIGFuZCBub24gc2hhcmVkIGZvbGRlcnMuICBUaGUgdmFyaWFibGUgYmVsb3cgc2hvdWxkIGJlCi0jIHNldCB0byB0aGUgc2hhcmVkIGRpcmVjdG9yeS4gIE5vdGU6IGEgZGVmYXVsdCBXVFAgaW5zdGFsbGF0aW9uIGRvZXMgbm90IHNwbGl0IGl0J3MKLSMgZGlyZWN0b3J5IHN0cnVjdHVyZSBzbyB0aGUgSU5TVEFMTF9ESVJFQ1RPUlkgYW5kIHRoZSBTSEFSRURfRElSRUNUT1JZIHNob3VsZCBiZSB0aGUgc2FtZS4KLVNIQVJFRF9ESVJFQ1RPUlk9JElOU1RBTExfRElSRUNUT1JZCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIyBUaGUgRWNsaXBzZSBFcXVpbm94IExhdW5jaGVyIGphci4gIFVzdWFsbHkgdGhpcyBwbHVnaW4gamFyIGZpbGUgaXMgbG9jYXRlZCBpbiB0aGUKLSMgc2hhcmVkIHBsdWdpbiBkaXJlY3RvcnkoaWUuIHBsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlciouamFyICkKLUxBVU5DSEVSX0pBUj0kU0hBUkVEX0RJUkVDVE9SWS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXJfMS4wLjAudjIwMDcwNjA2LmphcgotCi0KLSMgVGhlIGxvY2F0aW9uIG9mIHlvdXIgd29ya3NwYWNlCi1XT1JLU1BBQ0U9L2hvbWUvdGVzdGVyL3dvcmtzcGFjZQotCi1ydW4oKSB7Ci0gIHNldCAtdgotICAkSkFWQUVYRSAtamFyICRMQVVOQ0hFUl9KQVIgLWluc3RhbGwgJElOU1RBTExfRElSRUNUT1JZIC1jb25maWd1cmF0aW9uICRJTlNUQUxMX0RJUkVDVE9SWS9jb25maWd1cmF0aW9uIC1hcHBsaWNhdGlvbiBvcmcuZWNsaXBzZS5hbnQuY29yZS5hbnRSdW5uZXIgLWRhdGEgJFdPUktTUEFDRSAtZmlsZSB3c2dlbi54bWwgJGxzID4gd3NnZW4udHh0IDI+JjEKLX0KLQotaWYgWyAhIC1lICRKQVZBRVhFIF07IHRoZW4gCi0gIGVjaG8gIkVSUk9SOiBpbmNvcnJlY3QgamF2YS5leGU9JEpBVkFFWEUsIGVkaXQgdGhlIHNjcmlwdCBhbmQgY29ycmVjdCB0aGUgSkFWQUVYRSBlbnZpcm9ubWVudCB2YXJpYWJsZSI7Ci0gIGV4aXQgMTsKLWZpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLWlmIFsgISAtZSAkTEFVTkNIRVJfSkFSIF07IHRoZW4KLWVjaG8gIkVSUk9SOiBpbmNvcnJlY3QgbGF1bmNoZXI9JExBVU5DSEVSX0pBUiwgZWRpdCB0aGUgc2NyaXB0IGFuZCBjb3JyZWN0IHRoZSBMQVVOQ0hFUl9KQVIgZW52aXJvbm1lbnQgdmFyaWFibGUiOwotZXhpdCAxOwotZmkgIAotCi1ydW4KLWV4aXQgMApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzZ2VuLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2dlbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0N2E2YzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzZ2VuLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBkZWZhdWx0PSJtYWluIiBiYXNlZGlyPSIuIj4KLQotPGVjaG8gbWVzc2FnZT0icHVsbGluZyBpbiBwcm9wZXJ0eSBmaWxlcyIvPgotPHByb3BlcnR5IGZpbGU9ImF4aXNzZXJ2aWNlLnByb3BlcnRpZXMiLz4KLQkKLTxlY2hvIG1lc3NhZ2U9ImNhbGxpbmcgdGhlIHdlYiBzZXJ2aWNlcyBnZW5lcmF0aW9uIGFudCB0YXNrOiB3c2dlbiIvPgotIDx0YXJnZXQgbmFtZT0ibWFpbiIgPgotICAJIDx3c2dlbi8+Ci0gIDwvdGFyZ2V0PgotICAKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2J1aWxkLWFudHRhc2tzLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2J1aWxkLWFudHRhc2tzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUxZWQ4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC1hbnR0YXNrcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgbmFtZT0iQnVpbGQgQW50IEVudmlyb25tZW50IHN1cHBvcnQgSkFSIiBkZWZhdWx0PSJidWlsZCIgYmFzZWRpcj0iLiI+Ci0KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXNjcmlwdGlvbj0iQ2xlYW5zLCBidWlsZHMgYW5kIHJlZnJlc2hlcyIgZGVwZW5kcz0iY2xlYW4sIGFudC1saWIvYW50dGFza3MuamFyIi8+Ci0KLQk8dGFyZ2V0IG5hbWU9ImluaXQiIGRlcGVuZHM9InByb3BlcnRpZXMiPgotCQk8cHJvcGVydHkgbmFtZT0idmVyc2lvbi5zdWZmaXgiIHZhbHVlPSJfMy4xLjAiLz4KLQkJPHByb3BlcnR5IG5hbWU9Im5ldy52ZXJzaW9uLnN1ZmZpeCIgdmFsdWU9Il8zLjIuMCIvPgotCQk8cHJvcGVydHkgbmFtZT0iYm9vdGNsYXNzcGF0aCIgdmFsdWU9IiIvPgotCQk8cHJvcGVydHkgbmFtZT0idGVtcC5mb2xkZXIiIHZhbHVlPSIke2Jhc2VkaXJ9L3RlbXAuZm9sZGVyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJidWlsZC5yZXN1bHQuZm9sZGVyIiB2YWx1ZT0iJHtiYXNlZGlyfSIvPgotCQk8cHJvcGVydHkgbmFtZT0id2luMzIuamFyIiB2YWx1ZT0iJHtlY2xpcHNlLmhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3d0LndpbjMyLndpbjMyLng4NiR7dmVyc2lvbi5zdWZmaXh9LmphciIvPgotCQk8cHJvcGVydHkgbmFtZT0iZ3RrLmphciIgdmFsdWU9IiR7ZWNsaXBzZS5ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnN3dC5ndGsubGludXgueDg2JHt2ZXJzaW9uLnN1ZmZpeH0uamFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJtb3RpZi5qYXIiIHZhbHVlPSIke2VjbGlwc2UuaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zd3QubW90aWYke3ZlcnNpb24uc3VmZml4fS5qYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9Im9zeC5qYXIiIHZhbHVlPSIke2VjbGlwc2UuaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zd3QuY2FyYm9uLm1hY29zeC5wcGMke3ZlcnNpb24uc3VmZml4fS5qYXIiLz4KLQkJPGF2YWlsYWJsZSBmaWxlPSIke3dpbjMyLmphcn0iIHByb3BlcnR5PSJzd3QuamFyIiB2YWx1ZT0iJHt3aW4zMi5qYXJ9Ii8+Ci0JCTxhdmFpbGFibGUgZmlsZT0iJHtndGsuamFyfSIgcHJvcGVydHk9InN3dC5qYXIiIHZhbHVlPSIke2d0ay5qYXJ9Ii8+Ci0JCTxhdmFpbGFibGUgZmlsZT0iJHttb3RpZi5qYXJ9IiBwcm9wZXJ0eT0ic3d0LmphciIgdmFsdWU9IiR7bW90aWYuamFyfSIvPgotCQk8YXZhaWxhYmxlIGZpbGU9IiR7b3N4Lmphcn0iIHByb3BlcnR5PSJzd3QuamFyIiB2YWx1ZT0iJHtvc3guamFyfSIvPgotCTwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0icHJvcGVydGllcyIgaWY9ImVjbGlwc2UucnVubmluZyI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJidWlsZC5jb21waWxlciIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5jb3JlLkpEVENvbXBpbGVyQWRhcHRlciIvPgotCTwvdGFyZ2V0PgotCQkKLQkJPHRhcmdldCBuYW1lPSJhbnQtbGliL2FudHRhc2tzLmphciIgZGVzY3JpcHRpb249ICJDcmVhdGVzIHRoZSBhbnRydW5uZXIuamFyIiBkZXBlbmRzPSJpbml0Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkZXN0ZGlyIiB2YWx1ZT0iJHt0ZW1wLmZvbGRlcn0vYW50LWxpYi9hbnR0YXNrcy5qYXIiLz4KLQkJCTxkZWxldGUgZGlyPSIke2Rlc3RkaXJ9Ii8+Ci0JCQk8bWtkaXIgZGlyPSIke2Rlc3RkaXJ9Ii8+Ci0JCQk8amF2YWMgZGVzdGRpcj0iJHtkZXN0ZGlyfSIgZmFpbG9uZXJyb3I9InRydWUiIHZlcmJvc2U9ImZhbHNlIiBkZWJ1Zz0ib24iIGluY2x1ZGVKYXZhUnVudGltZT0gInllcyIKLQkJCSAJYm9vdGNsYXNzcGF0aD0iJHtib290Y2xhc3NwYXRofSIKLQkJCSAJY2xhc3NwYXRoPSIke2Jhc2VkaXJ9L2JpbiI+Ci0JCQkJPHNyYyBwYXRoPSJhbnQtc3JjLyIvPgotCQkJPC9qYXZhYz4KLQkJCTxjb3B5IHRvZGlyPSIke2Rlc3RkaXJ9Ij4KLQkJCQk8ZmlsZXNldCBkaXI9ImFudC1zcmMvIiBleGNsdWRlcz0iKiovKi5qYXZhIi8+Ci0JCQk8L2NvcHk+Ci0JCQk8bWtkaXIgZGlyPSIke2J1aWxkLnJlc3VsdC5mb2xkZXJ9L2FudC1saWIiLz4KLQkJCTxqYXIgZGVzdGZpbGU9IiR7YnVpbGQucmVzdWx0LmZvbGRlcn0vYW50LWxpYi9hbnR0YXNrcy5qYXIiIGJhc2VkaXI9IiR7ZGVzdGRpcn0iLz4KLQkJCTxkZWxldGUgZGlyPSIke3RlbXAuZm9sZGVyfSIvPgotCQk8L3RhcmdldD4KLQotCQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iRGVsZXRlcyBwcmV2aW91cyBidWlsZCByZW1uYW50cyIgZGVwZW5kcz0iaW5pdCI+Ci0JCQk8ZGVsZXRlIGZpbGU9IiR7YnVpbGQucmVzdWx0LmZvbGRlcn0vYW50LWxpYi9hbnR0YXNrcy5qYXIiLz4KLQkJCTxkZWxldGUgZGlyPSIke3RlbXAuZm9sZGVyfSIvPgotCQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9InJlZnJlc2giPgotCTxlY2xpcHNlLkxvY2FsUmVmcmVzaCByZXNvdXJjZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiBkZXB0aD0iaW5maW5pdGUiLz4KLQk8L3RhcmdldD4KLQkKLQk8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE1NzA2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBlbnYuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFudC8sXAotICAgICAgICAgICAgICAgYW50LWxpYi9hbnR0YXNrcy5qYXIKLXNvdXJjZS5lbnYuamFyID0gc3JjLwotb3V0cHV0LmVudi5qYXIgPSBiaW4vCi1qYXJzLmNvbXBpbGUub3JkZXIgPSBlbnYuamFyLFwKLSAgICAgICAgICAgICAgICAgICAgIGFudC1saWIvYW50dGFza3MuamFyCi1zb3VyY2UuYW50LWxpYi9hbnR0YXNrcy5qYXIgPSBhbnQtc3JjLwotb3V0cHV0LmFudC1saWIvYW50dGFza3MuamFyID0gYmluLwotcm9vdC5wZXJtaXNzaW9ucy43NzcgPSBhbnQvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzdkM2NjYmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPUVudmlyb25tZW50IENvbW1hbmQgRnJhbWV3b3JrIChoZWFkbGVzcykKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1QTFVHSU5fWFBfRFlOQU1JQ19XSVpBUkQ9RHluYW1pYyBXaXphcmQKLVBMVUdJTl9YUF9QT1BVUF9ESUFMT0dTPU9wdGlvbmFsIFBvcC11cCBBY3Rpb24gRGlhbG9ncyBUeXBlcwotCi1YUF9hbnREYXRhTWFwcGluZz1BbnQgRW52aXJvbm1lbnQgcHJvcGVydHkgbWFwcGluZ3MKLVhQX2FudFNjZW5hcmlvPUFudCBFbnZpcm9ubWVudCBzY2VuYXJpb3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTYyMjE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gY2hhbmdlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJkeW5hbWljV2l6YXJkIgotICAgICAgbmFtZT0iJVBMVUdJTl9YUF9EWU5BTUlDX1dJWkFSRCIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gY2hhbmdlLiAtLT4gICAKLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSIKLSAgICAgIG5hbWU9IiVQTFVHSU5fWFBfUE9QVVBfRElBTE9HUyIvPgotCi0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJhbnREYXRhTWFwcGluZyIgbmFtZT0iJVhQX2FudERhdGFNYXBwaW5nIiBzY2hlbWE9InNjaGVtYS9hbnRkYXRhbWFwcGluZy5leHNkIi8+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJhbnRTY2VuYXJpbyIgbmFtZT0iJVhQX2FudFNjZW5hcmlvIiBzY2hlbWE9InNjaGVtYS9hbnRTY2VuYXJpby5leHNkIi8+Ci0gICAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9IndzZ2VuIgotICAgICAgICAgbmFtZT0id3NnZW4iCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuYW50LmNvcmUuYW50VGFza3MiPgotICAgICAgPGFudFRhc2sKLSAgICAgICAgICAgIGNsYXNzPSJ3cy5hbnQudGFzay5XZWJTZXJ2aWNlR2VuZXJhdGlvbkFudFRhc2siCi0gICAgICAgICAgICBlY2xpcHNlUnVudGltZT0idHJ1ZSIKLSAgICAgICAgICAgIGhlYWRsZXNzPSJ0cnVlIgotICAgICAgICAgICAgbGlicmFyeT0iYW50LWxpYi9hbnR0YXNrcy5qYXIiCi0gICAgICAgICAgICBuYW1lPSJ3c2dlbiIvPgotICAgPC9leHRlbnNpb24+IAotICAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5hbnQuY29yZS5leHRyYUNsYXNzcGF0aEVudHJpZXMiPgotICAgICAgICA8ZXh0cmFDbGFzc3BhdGhFbnRyeSBsaWJyYXJ5PSJhbnQtbGliL2FudHRhc2tzLmphciIvPgotICAgICA8L2V4dGVuc2lvbj4gICAgIAotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NjaGVtYS9hbnRTY2VuYXJpby5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc2NoZW1hL2FudFNjZW5hcmlvLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYWZmNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc2NoZW1hL2FudFNjZW5hcmlvLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ij4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiIGlkPSJhbnRTY2VuYXJpbyIgbmFtZT0iQW50IEVudmlyb25tZW50IFNjZW5hcmlvcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iYW50U2NlbmFyaW8iLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJhbnRTY2VuYXJpbyI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InNjZW5hcmlvVHlwZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc2NoZW1hL2FudGRhdGFtYXBwaW5nLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zY2hlbWEvYW50ZGF0YW1hcHBpbmcuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNzM5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zY2hlbWEvYW50ZGF0YW1hcHBpbmcuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIgaWQ9ImFudERhdGFNYXBwaW5nIiBuYW1lPSJBbnQgRW52aXJvbm1lbnQgUHJvcGVydHkgTWFwcGluZ3MiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1hcCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9Im1hcCI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImtleSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJvcGVyYXRpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvcGVydHkiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHJhbnNmb3JtIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVkIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvRW52aXJvbm1lbnQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvRW52aXJvbm1lbnQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM2M2U0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA0MTggICAxNzcwMDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA4MDMyNiAgIDE3MTcwNSB0cnVuZ2hhQGNhLmlibS5jb20gLSBUcnVuZwotIyAyMDA4MDMyNiAgIDE0OTA2MCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDgwMzI1ICAgMjIzOTEyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIEFkZGluZyBQSUkvTVJJIHRvIHBhcnRpYWxseSBhZGRyZXNzIDE3MTcwNQotIyAyMDA4MDMyOCAgIDIyNDU2MyBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBUZXh0IGluY29ycmVjdCBnZW5lcmF0aW5nIHdlYiBzZXJ2aWNlcyAmIGNsaWVudHMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBmb3IgUmVzb3VjZVV0aWxzCi0jCi1NU0dfRVJST1JfUEFUSF9OT1RfQUJTT0xVVEU9SVdBQjAwMDNFIFBhdGggezB9IGlzIG5vdCBhYnNvbHV0ZSBmb3IgY3JlYXRpbmcgYSBmaWxlLgotTVNHX0VSUk9SX1BBVEhfRU1QVFk9SVdBQjAwMDRFIFBhdGggezB9IGlzIGVtcHR5IHdoaWxlIGNyZWF0aW5nIGEgZmlsZS4KLU1TR19FUlJPUl9QQVRIX05PVF9GT0xERVI9SVdBQjAwMDVFIFBhdGggezB9IGlzIG5vdCBhIGZvbGRlciBmb3IgY3JlYXRpbmcgYSBmaWxlLgotTVNHX0VSUk9SX0ZPTERFUl9DUkVBVElPTl9ESVNBQkxFRD1JV0FCMDAwN0UgRm9sZGVyIGNyZWF0aW9uIGhhcyBiZWVuIGRpc2FibGVkIGZvciBwYXJlbnQgZm9sZGVyIHswfS4gRG8geW91IHdhbnQgdG8gY3JlYXRlIGZvbGRlciB7MX0/Ci1NU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZPTERFUj1JV0FCMDAwOEUgUmVzb3VyY2UgezB9IGlzIG5vdCBhIGZvbGRlci4KLU1TR19XQVJOX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEPUlXQUIwMDA5VyBDYW5ub3Qgb3ZlcndyaXRlIGZpbGUgezF9IGluIGZvbGRlciB7MH0uCi1NU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRD1JV0FCMDAxMEUgQ2Fubm90IGNoZWNrb3V0IGZpbGUgezF9IGluIGZvbGRlciB7MH0uCi1NU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZJTEU9SVdBQjAwMTFFIFRoZSBmb2xsb3dpbmcgcGF0aCBpcyBub3QgYSByZXNvdXJjZTogezB9LgotTVNHX0VSUk9SX0ZPTERFUl9IQVNfQ0hJTERSRU49SVdBQjAwMTJFIENhbm5vdCBjcmVhdGUgZm9sZGVyOiB7MH0gdGhhdCBhbHJlYWR5IGhhcyBjaGlsZHJlbi4KLU1TR19FUlJPUl9JTz1JV0FCMDAwNkUgQW4gaW5wdXQvb3V0cHV0IGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIHJlc291cmNlICJ7MH0iLgotTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEPUlXQUIwMTY0RSBDYW5ub3QgY3JlYXRlIHRoZSBmaWxlICJ7MX0iIHJlbGF0aXZlIHRvIHRoZSBwYXRoICJ7MH0iIGJlY2F1c2UgYXV0b21hdGljIGZpbGUgb3ZlcndyaXRpbmcgaGFzIG5vdCBiZWVuIGVuYWJsZWQuIERvIHlvdSB3YW50IHRvIGVuYWJsZSBpdCBmb3IgdGhpcyBmaWxlPwotTVNHX0VSUk9SX1VORVhQRUNURURfRVJST1I9SVdBQjAwMTRFIFVuZXhwZWN0ZWQgZXhjZXB0aW9uIG9jY3VycmVkLgotTVNHX0VSUk9SX0FOVF9EQVRBX1RSQU5TRk9STT1FeGNlcHRpb24gdHJhbnNmb3JtaW5nIEFudCBwcm9wZXJ0eSBrZXkgezB9IHVzaW5nIHRyYW5zZm9ybWF0aW9uIHsxfS4KLU1TR19FUlJPUl9BTlRfQ0FMTF9TRVRURVI9RXhjZXB0aW9uIGludm9raW5nIHNldHRlciBtZXRob2QgezB9IGZvciBBbnQgcHJvcGVydHkuCi1NU0dfRVJST1JfQU5UX0NNRF9GUkFHTUVOVD1FeGNlcHRpb24gcmV0cmlldmluZyBBbnQgY29tbWFuZCBmcmFnbWVudCBmcm9tIHJlZ2lzdHJ5LgotTVNHX0VSUk9SX0FOVF9TQ0VOQVJJT19UWVBFPUNhbm5vdCBkZXRlcm1pbmUgc2NlbmFyaW8gdHlwZS4gIFBsZWFzZSBlbnN1cmUgU2NlbmFyaW9UeXBlIEFudCBwcm9wZXJ0eSBpcyBzZXQuCi1NU0dfRVJST1JfQU5UX1JFUVVJUkVEX1BST1BFUlRZPVJlcXVpcmVkIHByb3BlcnR5IHswfSB3YXMgbm90IHNldCBpbiB0aGUgQW50IHByb3BlcnR5IGZpbGUuCi1NU0dfRVJST1JfQU5UX1BST1BFUlRZX1dJVEhfSU5WQUxJRF9WQUxVRT1Qcm9wZXJ0eSB7MH0gd2FzIHNldCB3aXRoIGFuIGludmFsaWQgdmFsdWU6IHsxfS4KLU1TR19JTkZPX0FOVF9fUFJPUEVSVFlfREVGQVVMVD1Qcm9wZXJ0eSB7MH0gd2FzIG5vdCBzZXQgaW4gdGhlIEFudCBwcm9wZXJ0eSBmaWxlLiAgQSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgdXNlZC4KLU1TR19FUlJPUl9BTlRfV09SS1NQQUNFX0xPQ0tFRD0iQ2Fubm90IHBlcmZvcm0gdGhlIFdlYiBzZXJ2aWNlcyBnZW5lcmF0aW9uIGFudCB0YXNrLiAgVGhlIGFzc29jaWF0ZWQgd29ya3NwYWNlIGlzIGN1cnJlbnRseSBpbiB1c2UgYnkgYW5vdGhlciBFY2xpcHNlIGFwcGxpY2F0aW9uLiIKLQotTEFCRUxfWUVTPVllcwotTEFCRUxfWUVTX1RPX0FMTD1ZZXMgdG8gQWxsCi1MQUJFTF9DQU5DRUw9Q2FuY2VsCi0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50TWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvRW52aXJvbm1lbnRNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTcxZGI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvRW52aXJvbm1lbnRNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMzI2ICAgMTcxNzA1IHRydW5naGFAY2EuaWJtLmNvbSAtIFRydW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIEVudmlyb25tZW50TWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5FbnZpcm9ubWVudCI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBFbnZpcm9ubWVudE1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUEFUSF9OT1RfQUJTT0xVVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BBVEhfRU1QVFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BBVEhfTk9UX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfRk9MREVSX0NSRUFUSU9OX0RJU0FCTEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9SRVNPVVJDRV9OT1RfRk9MREVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GSUxFX0NIRUNLT1VUX0RJU0FCTEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9SRVNPVVJDRV9OT1RfRklMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfRk9MREVSX0hBU19DSElMRFJFTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSU87Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTkVYUEVDVEVEX0VSUk9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BTlRfREFUQV9UUkFOU0ZPUk07Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FOVF9DQUxMX1NFVFRFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQU5UX0NNRF9GUkFHTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQU5UX1NDRU5BUklPX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FOVF9SRVFVSVJFRF9QUk9QRVJUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQU5UX1BST1BFUlRZX1dJVEhfSU5WQUxJRF9WQUxVRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5GT19BTlRfX1BST1BFUlRZX0RFRkFVTFQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfWUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1lFU19UT19BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0FOQ0VMOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgRW52aXJvbm1lbnRNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50Q29udHJvbGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50Q29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmQyNGEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjYgICAxNTE2MTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjEwMTEgICAxNTkyODMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHByb2plY3Qgbm90IGFzc29jaWF0ZWQgdG8gRUFSIHdoZW4gdXNpbmcgYW50IG9uIGNvbW1hbmQtbGluZQotICogMjAwNzA1MjIgICAxNzY5NDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA3MzAgICAxOTcxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgUGFzcyBwcm9ncmVzcyBtb25pdG9yIHRvIHVuZG8gY29tbWFuZHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LkVudmlyb25tZW50TWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlRyYW5zaWVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5GcmFnbWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIAotICogQ2VudHJhbCBwb2ludCBvZiBjb250cm9sIGZvciB3ZWIgc2VydmljZSBBbnQgdGFza3MuCi0gKiBDb25zdHJ1Y3RzIEFudCBlbnZpcm9ubWVudCwgcm9vdCBmcmFnbWVudCBhbmQgY29tbWFuZCBtYW5hZ2VyLiAgU3RhcnRzIGV4ZWN1dGlvbiBvZiB0aGUgY29tbWFuZCBzdGFjay4KLSAqIAotICogQGF1dGhvciBqb2FuCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBBbnRDb250cm9sbGVyIAotewkKLSAgIHByaXZhdGUgQW50T3BlcmF0aW9uTWFuYWdlciBvcGVyYXRpb25NYW5hZ2VyXzsKLSAgIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VfID0gbnVsbDsKLSAgIHByaXZhdGUgQW50RW52aXJvbm1lbnQgICAgICBlbnZpcm9ubWVudF87Ci0JCi0gICBwdWJsaWMgQW50Q29udHJvbGxlcihIYXNodGFibGUgcHJvcGVydGllcykKLSAgIHsKLQkgICAvLyBjb25zdHJ1Y3QgdGhlIGVudmlyb25tZW50IC0gcGFzc2luZyBpbiB0aGUgcHJvcGVydHkgdGFibGUJICAgCi0JICAgLy8gLS1tYWludGFpbnMgbGluayB0byBwcm9wZXJ0eSB0YWJsZSBwbHVzIGFueSBvdGhlciBlbnZpcm9ubWVudCBwcm9wZXJ0aWVzCi0JICAgLy8gLS1jb2RlIHRvIGFjY2VzcyBleHRlbnNpb24gcG9pbnQgbWFwcGluZ3MgZm9yIG9wZXJhdGlvbnMgdG8gcmV0cmlldmUgZGF0YSBmcm9tIHByb3BlcnR5IHRhYmxlCi0JICAgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQgPSAoVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KVBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKS5jb3B5KCk7Ci0JICAgQW50U3RhdHVzSGFuZGxlciAgICAgICAgICBoYW5kbGVyICAgICAgICAgPSBuZXcgQW50U3RhdHVzSGFuZGxlcigpOwotICAgICAKLQkgICBlbnZpcm9ubWVudF8gPSBuZXcgQW50RW52aXJvbm1lbnQodGhpcywgcmVzb3VyY2VDb250ZXh0LCBoYW5kbGVyLCBwcm9wZXJ0aWVzKTsKLSAgICAgICAKLQkgICAvLyBjb25zdHJ1Y3QgZGF0YSBtYW5hZ2VyIGZvciBtYWludGFpbmluZyBzdGF0ZSBhY3Jvc3Mgb3BlcmF0aW9ucwotCSAgIERhdGFGbG93TWFuYWdlciBkYXRhTWFuYWdlciA9IG5ldyBEYXRhRmxvd01hbmFnZXIoIG5ldyBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCgpLCBlbnZpcm9ubWVudF8gKTsKLSAgICAgICAKLQkgICAvLyAgc2V0IHVwIG9wZXJhdGlvbiBmcmFnbWVudHMgLSBjb25kaXRpb25hbCBvbiBvcHRpb25zIGJ5IHVzZXIuLi4gc2VydmljZSBvciBjbGllbnQKLQkgICAvLyAgYWxzbyBuZWVkIHRvIGluaXRpYWxpemUgdGhlICJzZWxlY3Rpb24iIG9yIGlucHV0IGZpbGUgKFdTREwsIEphdmEpIGhlcmUKLQkgICAKLQkgICBDb21tYW5kRnJhZ21lbnQgcm9vdEZyYWdtZW50ID0gIGVudmlyb25tZW50Xy5nZXRSb290Q29tbWFuZEZyYWdtZW50KCk7Ci0JICAgCi0JICAgaWYgKHJvb3RGcmFnbWVudCAhPSBudWxsKQotCSAgIHsJCSAgIAotCSAgICAgICAvL2NvbnN0cnVjdCB0aGUgZW5naW5lIC0gbWFuYWdlcyBleGVjdXRpb24gb2Ygb3BlcmF0aW9ucwotCQkgICBjcmVhdGVPcGVyYXRpb25NYW5hZ2VyKCByb290RnJhZ21lbnQsIGRhdGFNYW5hZ2VyLCBlbnZpcm9ubWVudF8gKTsKLQkJICAgCi0JCSAgIERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsICAgIGRhdGFSZWdpc3RyeV8gICA9IG5ldyBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCgpOwotCQkgICByb290RnJhZ21lbnQucmVnaXN0ZXJEYXRhTWFwcGluZ3MoZGF0YVJlZ2lzdHJ5Xyk7CQkgICAKLQkgICB9Ci0JICAgZWxzZSAgLy9wcm9ibGVtIGdldHRpbmcgdGhlIHJvb3QgZnJhZ21lbnQgLSBzY2VuYXJpbyB0eXBlIGlzIGxpa2VseSBtaXNzaW5nCi0JICAgewotICAgICAgIGVycm9yTWVzc2FnZV8gPSBFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfU0NFTkFSSU9fVFlQRTsKLQkJICAgaGFuZGxlci5yZXBvcnRFcnJvcihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsICJ3c19hbnQiLCA5OTk5LCBlcnJvck1lc3NhZ2VfLCBudWxsKSk7Ci0JCSAgIHJldHVybjsKLQkgICB9Ci0JICAgICAgCi0JICAgLy9yZWFkeSB0byBzdGFydCBydW5uaW5nIG9wZXJhdGlvbnMKLQkgICBJUHJvZ3Jlc3NNb25pdG9yIG51bGxNb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLQkgICAKLSAJICAgb3BlcmF0aW9uTWFuYWdlcl8ubW92ZUZvcndhcmRUb05leHRTdG9wKCBudWxsTW9uaXRvciApOwotCi0gICAgIElTdGF0dXMgbGFzdFN0YXR1cyA9IG9wZXJhdGlvbk1hbmFnZXJfLmdldExhc3RTdGF0dXMoKTsKLSAgICAgCi0gCSAgIGlmICggIWxhc3RTdGF0dXMuaXNPSygpICkgCi0gICAgIHsKLSAgICAgICBlcnJvck1lc3NhZ2VfID0gbGFzdFN0YXR1cy5nZXRNZXNzYWdlKCk7Ci0gCQkgICBvcGVyYXRpb25NYW5hZ2VyXy51bmRvVG9MYXN0U3RvcCggbnVsbE1vbml0b3IgKTsKLSAgICAgfQotICAgfQotICAgCi0gICBwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpCi0gICB7Ci0gICAgIHJldHVybiBlcnJvck1lc3NhZ2VfOyAgCi0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCBjcmVhdGVPcGVyYXRpb25NYW5hZ2VyKENvbW1hbmRGcmFnbWVudCBmcmFnLCBEYXRhRmxvd01hbmFnZXIgbWdyLCBBbnRFbnZpcm9ubWVudCBlbnYpCi0gICB7CQkgICAKLQkJICAgb3BlcmF0aW9uTWFuYWdlcl8gPSBuZXcgQW50T3BlcmF0aW9uTWFuYWdlcihmcmFnLCBtZ3IsIGVudik7CQkJCi0JCi0JCSAgIG9wZXJhdGlvbk1hbmFnZXJfLnNldFBlZWtGcmFnbWVudExpc3RlbmVyKCAKLQkJCQkgICAgICBuZXcgRnJhZ21lbnRMaXN0ZW5lcigpCi0JCQkJICAgICAgewotCQkJCSAgICAgICAgcHVibGljICBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLQkJCQkgICAgICAgIHsKLQkJCQkgICAgICAgICAgcmV0dXJuIHBlZWtGcmFnbWVudCggZnJhZ21lbnQgKTsKLQkJCQkgICAgICAgIH0KLQkJCQkgICAgICB9ICk7ICAKLQkJCQkgICAgICAgICAgICAgICAgICAKLQkJICAgb3BlcmF0aW9uTWFuYWdlcl8uc2V0TmV4dEZyYWdtZW50TGlzdGVuZXIoIAotCQkJCSAgICAgIG5ldyBGcmFnbWVudExpc3RlbmVyKCkKLQkJCQkgICAgICB7Ci0JCQkJICAgICAgICBwdWJsaWMgIGJvb2xlYW4gbm90aWZ5KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotCQkJCSAgICAgICAgewotCQkJCSAgICAgICAgICByZXR1cm4gbmV4dEZyYWdtZW50KCBmcmFnbWVudCApOwotCQkJCSAgICAgICAgfQotCQkJCSAgICAgIH0gKTsgIAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJICAgb3BlcmF0aW9uTWFuYWdlcl8uc2V0VW5kb0ZyYWdtZW50TGlzdGVuZXIoCi0JCQkJICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotCQkJCSAgICAgIHsKLQkJCQkgICAgICAgIHB1YmxpYyBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLQkJCQkgICAgICAgIHsKLQkJCQkgICAgICAgICAgcmV0dXJuIHVuZG9GcmFnbWVudCggZnJhZ21lbnQgKTsKLQkJCQkgICAgICAgIH0KLQkJCQkgICAgICB9ICk7Ci0gICAgICAgCi0gICAgICAgb3BlcmF0aW9uTWFuYWdlcl8uc2V0QWZ0ZXJFeGVjdXRlRnJhZ21lbnRMaXN0ZW5lcigKLSAgICAgICAgICAgIG5ldyBGcmFnbWVudExpc3RlbmVyKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gbm90aWZ5KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFmdGVyRXhlY3V0ZU5leHRGcmFnbWVudCggZnJhZ21lbnQgKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSApOwotICAgfQotCQotCXByb3RlY3RlZCBDb21tYW5kTWFuYWdlciBnZXRPcGVyYXRpb25NYW5hZ2VyKCkKLQl7Ci0JCXJldHVybiBvcGVyYXRpb25NYW5hZ2VyXzsKLQl9Ci0JCi0JLyoqCi0JICAgKiBUaGUgQ29tbWFuZEZyYWdtZW50RW5naW5lIGNhbGxzIHRoaXMgbWV0aG9kIHdoZW4gaXQgaXMgcGVla2luZyBmb3J3YXJkCi0JICAgKiBpbiB0aGUgZnJhZ21lbnRzLiAgV2hlbiBwZWVraW5nIGZvcndhcmQgdGhlIGNvbW1hbmQgc3RhY2sgc3RhdGUgaW4gdGhlCi0JICAgKiBlbmdpbmUgaXMgbm90IGNoYW5nZXMuCi0JICAgKiAKLQkgICAqIAotCSAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBmcmFnbWVudCB0aGF0IGl0IGlzIHBlZWtpbmcgYXQuCi0JICAgKiBAcmV0dXJuIEluZGljYXRlcyB3aGV0aGVyIHBlZWtpbmcgc2hvdWxkIHN0b3Agb3Igbm90LgotCSAgICovCi0JICBwcm90ZWN0ZWQgYm9vbGVhbiBwZWVrRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0JICB7ICAgICAKLQkgICAgcmV0dXJuIHRydWU7Ci0JICB9Ci0JICAKLQkgIC8qKgotCSAgICogVGhlIENvbW1hbmRGcmFnbWVudEVuZ2luZSBjYWxscyB0aGlzIG1ldGhvZCB3aGVuIGl0IGlzIG1vdmluZyBmb3J3YXJkCi0JICAgKiBpbiB0aGUgZnJhZ21lbnRzLiAgIFdoZW4gbW92aW5nIGZvcndhcmQgdGhlIGNvbW1hbmQgc3RhY2sgc3RhdGUgaXMgc2F2ZWQKLQkgICAqIGF0IGVhY2ggZnJhZ21lbnQgaXMgdHJhdmVyc2VkLgotCSAgICogCi0JICAgKiBAcGFyYW0gZnJhZ21lbnQgdGhlIGZyYWdtZW50IHRoYXQgaXMgYmVpbmcgdHJhdmVyc2VkLgotCSAgICogQHJldHVybiBpbmRpY2F0ZXMgaWYgdGhlIGZvcndhcmQgdHJhdmVyc2FsIHNob3VsZCBjb250aW51ZS4gIAotCSAgICovCi0JICBwcm90ZWN0ZWQgYm9vbGVhbiBuZXh0RnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0JICB7ICAgICAKLQkgICAgcmV0dXJuIHRydWU7Ci0JICB9Ci0JICAKLQkgIC8qKgotCSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZvciBlYWNoIGZyYWdtZW50IHdoZW4gdGhlIGNvbW1hbmQgZW5naW5lIGlzIHVud2luZGluZwotCSAgICogaXRzIHN0YWNrIGR1cmluZyBhbiB1bmRvIG9wZXJhdGlvbi4KLQkgICAqIAotCSAgICogQHBhcmFtIGZyYWdtZW50ICB0aGUgZnJhZ21lbnQgYmVpbmcgdW5kb25lLgotCSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIHVuZG8gcHJvY2VzcyBzaG91bGQgY29udGludWUuCi0JICAgKi8KLQkgIHByb3RlY3RlZCBib29sZWFuIHVuZG9GcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLQkgIHsgIAkgIAkKLQkgICAgcmV0dXJuIHRydWU7Ci0JICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gYWZ0ZXJFeGVjdXRlTmV4dEZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICAgIHsKLSAgICAgIGJvb2xlYW4gICAgICAgICAgIGNvbnRpbnVlRXhlY3V0ZSA9IHRydWU7Ci0gICAgICBCYXNlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyICAgPSAoQmFzZVN0YXR1c0hhbmRsZXIpZW52aXJvbm1lbnRfLmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgIElTdGF0dXMgICAgICAgICAgIGNvbW1hbmRTdGF0dXMgICA9IG9wZXJhdGlvbk1hbmFnZXJfLmdldExhc3RTdGF0dXMoKTsKLSAgICAgIElTdGF0dXMgICAgICAgICAgIGhhbmRsZXJTdGF0dXMgICA9IHN0YXR1c0hhbmRsZXIuZ2V0U3RhdHVzKCk7Ci0gICAgICAKLSAgICAgIGlmKCBjb21tYW5kU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiAmJgotICAgICAgICAgIGhhbmRsZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKSAhPSBJU3RhdHVzLkVSUk9SICkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlIGNvbW1hbmQgcmV0dXJuZWQgYW4gZXJyb3Igc3RhdHVzIGZvciB0aGUgZW5naW5lIHRvIHN0b3AsCi0gICAgICAgIC8vIGJ1dCB0aGUgc3RhdHVzIGhhbmRsZXIgZGlkIG5vdCBoYXZlIHJlcG9ydCBhbmQgZXJyb3IuCi0gICAgICAgIC8vIFRoZXJlZm9yZSwgd2Ugd2lsbCByZXBvcnQgdGhpcyBzdGF0dXMgcmV0dXJuZWQgYnkgdGhlIGNvbW1hbmQKLSAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBtZXNzYWdlIHRvIGRpc3BsYXkuICAKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGNvbW1hbmRTdGF0dXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICAKLSAgICAgICAgaWYoIGVycm9yTWVzc2FnZSAhPSBudWxsICYmIGVycm9yTWVzc2FnZS5sZW5ndGgoKSA+IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzSGFuZGxlci5yZXBvcnRFcnJvciggY29tbWFuZFN0YXR1cyApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBjb21tYW5kU3RhdHVzLmdldFNldmVyaXR5KCkgIT0gSVN0YXR1cy5FUlJPUiAmJgotICAgICAgICAgICAgICAgaGFuZGxlclN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IgKQotICAgICAgewotICAgICAgICAvLyBUaGUgbGFzdCBjb21tYW5kIGRpZG4ndCByZXR1cm4gYW4gZXJyb3IsIGJ1dCB0aGUgc3RhdHVzIGhhbmRsZXIKLSAgICAgICAgLy8gZGlkIHJlcG9ydCBhbmQgZXJyb3IuICBUaGVyZWZvcmUsIHdlIHNob3VsZCBzdG9wLgotICAgICAgICBlcnJvck1lc3NhZ2VfID0gaGFuZGxlclN0YXR1cy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIGNvbnRpbnVlRXhlY3V0ZSA9IGZhbHNlOyAgIAotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gY29udGludWVFeGVjdXRlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudEVudmlyb25tZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRFbnZpcm9ubWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjEyNWVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudEVudmlyb25tZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1ODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTIzICAgMTMzNzE0IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNzI2ICAgMTUxNjE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50OwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LkVudmlyb25tZW50TWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5CZWFuTW9kaWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5DbGFzc0VudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5JRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnBsdWdpbi5FbnZQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogCi0gKiBBY2Nlc3MgdG8gc3RhdHVzIGhhbmRsZXIsIGxvZywgcmVzb3VyY2UgY29udGV4dCBhbmQgY29tbWFuZCBtYW5hZ2VyLiAgCi0gKiBJbml0aWFsaXplcyBkYXRhIGZvciBjb21tYW5kcyBmcm9tIEFudCBwcm9wZXJ0eSBmaWxlcyBiYXNlZCBvbiBhbnREYXRhTWFwcGluZyBleHRlbnNpb25zLiAKLSAqIAotICogQGF1dGhvciBqb2FuCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBBbnRFbnZpcm9ubWVudCBleHRlbmRzIEVjbGlwc2VFbnZpcm9ubWVudHsKLQkKLQlwcml2YXRlIEhhc2h0YWJsZSBhbnRQcm9wZXJ0aWVzXzsKLQlwcml2YXRlIEhhc2h0YWJsZSBvcGVyYXRpb25EYXRhUmVjb3JkXyA9IG5ldyBIYXNodGFibGUoKTsKLQlwcml2YXRlIGJvb2xlYW4gbWFwcGluZ0NvbXBsZXRlXzsKLQlwcml2YXRlIENsYXNzRW50cnkgY2xhc3NFbnRyeTsJCi0JCQotCS8vIGV4dGVuc2lvblBvaW50IG5hbWVzIGFuZCBuYW1lc3BhY2UKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgTUFQUEVSX0VYVF9QVCA9ICJhbnREYXRhTWFwcGluZyI7ICAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFNDRU5BUklPX0VYVF9QVCA9ICJhbnRTY2VuYXJpbyI7ICAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEVYVF9QVF9OQU1FU1BBQ0UgPSAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IjsgLy8vLyROT04tTkxTLTEkCi0JCi0JLy8gYW50RGF0YU1hcHBpbmcgZXh0ZW5zaW9uIHBvaW50IGF0dHJpYnV0ZXMKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQUEVSX09QRVJBVElPTl9BVFRSSUJVVEU9ICJvcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BUFBFUl9LRVlfQVRUUklCVVRFPSAia2V5IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVBQRVJfUFJPUEVSVFlfQVRUUklCVVRFPSAicHJvcGVydHkiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BUFBFUl9UUkFOU0ZPUk1fQVRUUklCVVRFPSAidHJhbnNmb3JtIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVBQRVJfUkVRVUlSRURfQVRUUklCVVRFPSAicmVxdWlyZWQiOyAvLyROT04tTkxTLTEkCi0JCQotCS8vIGFudFNjZW5hcmlvIGV4dGVuc2lvbiBwb2ludCBhdHRyaWJ1dGVzCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDRU5BUklPX1RZUEVfQVRUUklCVVRFID0gInNjZW5hcmlvVHlwZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU9fQ0xBU1NfQVRUUklCVVRFID0gImNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCi0JLy8gQW50IHByb3BlcnR5IElEcwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJCT1NFX1BST1BFUlRZID0gIlZlcmJvc2UiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9WRVJXUklURV9QUk9QRVJUWSA9ICJPdmVyd3JpdGVGaWxlc0VuYWJsZWQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENSRUFURUZPTERFUl9QUk9QRVJUWSA9ICJDcmVhdGVGb2xkZXJzRW5hYmxlZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hFQ0tPVVRfUFJPUEVSVFkgPSAiQ2hlY2tvdXRGaWxlc0VuYWJsZWQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDRU5BUklPX1RZUEVfUFJPUEVSVFkgPSAiU2NlbmFyaW9UeXBlIjsgLy8kTk9OLU5MUy0xJAotCQotICAgIHByaXZhdGUgQW50Q29udHJvbGxlciBjb250cm9sbGVyXzsKLQkKLQlwdWJsaWMgQW50RW52aXJvbm1lbnQoQW50Q29udHJvbGxlciBjb250cm9sbGVyLCBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQgY29udGV4dCwgSUVjbGlwc2VTdGF0dXNIYW5kbGVyIGhhbmRsZXIsIEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotCXsKLQkgICBzdXBlcihjb250cm9sbGVyLmdldE9wZXJhdGlvbk1hbmFnZXIoKSwgY29udGV4dCwgaGFuZGxlcik7Ci0JICAgYW50UHJvcGVydGllc18gPSBwcm9wZXJ0aWVzOwkKLQkgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7CQotCSAgIHNldENvbnRleHQoIGNvbnRleHQgKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldENvbnRleHQoVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0IGNvbnRleHQpIAotCXsKLQkgIEJvb2xlYW4gb3ZlcndyaXRlU2V0ICAgID0gZ2V0Qm9vbGVhblByb3BlcnR5KCBPVkVSV1JJVEVfUFJPUEVSVFkgKTsKLQkgIEJvb2xlYW4gY3JlYXRlZm9sZGVyU2V0ID0gZ2V0Qm9vbGVhblByb3BlcnR5KCBDUkVBVEVGT0xERVJfUFJPUEVSVFkgKTsKLQkgIEJvb2xlYW4gY2hlY2tvdXRTZXQgICAgID0gZ2V0Qm9vbGVhblByb3BlcnR5KCBDSEVDS09VVF9QUk9QRVJUWSApOwotCSAgCi0JICBpZiggb3ZlcndyaXRlU2V0ICE9IG51bGwgKSBjb250ZXh0LnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCggb3ZlcndyaXRlU2V0LmJvb2xlYW5WYWx1ZSgpICk7Ci0JICBpZiggY3JlYXRlZm9sZGVyU2V0ICE9IG51bGwgKSBjb250ZXh0LnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKCBjcmVhdGVmb2xkZXJTZXQuYm9vbGVhblZhbHVlKCkgKTsKLQkgIGlmKCBjaGVja291dFNldCAhPSBudWxsICkgY29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCggY2hlY2tvdXRTZXQuYm9vbGVhblZhbHVlKCkgKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiB2ZXJib3NlKCkKLQl7Ci0JICBCb29sZWFuIHJlc3VsdCA9IGdldEJvb2xlYW5Qcm9wZXJ0eSggVkVSQk9TRV9QUk9QRVJUWSApOwotCSAgCi0JICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyBmYWxzZSA6IHJlc3VsdC5ib29sZWFuVmFsdWUoKTsKLQl9Ci0JCi0JcHVibGljIEJvb2xlYW4gZ2V0Qm9vbGVhblByb3BlcnR5KCBTdHJpbmcgcHJvcGVydHkgKQotCXsKLQkgIFN0cmluZyAgdmFsdWUgID0gZ2V0UHJvcGVydHkoIHByb3BlcnR5ICk7CQotCSAgQm9vbGVhbiByZXN1bHQgPSBudWxsOwotCQkgIAotCSAgaWYoIHZhbHVlICE9IG51bGwgKQotCSAgewotCQl2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7Ci0JCXJlc3VsdCA9IG5ldyBCb29sZWFuKCB2YWx1ZS5lcXVhbHMoICJ0cnVlIikgKTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0JCi0JLy8gcmV0dXJucyBTdHJpbmcgc2luY2UgdGhlIHByb3BlcnR5IHRhYmxlIGJ1aWx0IGJ5IEFudCBpcyBwcm9wZXJ0eSB2YWx1ZSBwYWlycyB3aGVyZSB0aGUgdmFsdWUgaXMgYSBTdHJpbmcKLQlwcml2YXRlIFN0cmluZyBnZXRQcm9wZXJ0eShTdHJpbmcga2V5KQotCXsKLQkJT2JqZWN0IHByb3BlcnR5ID0gYW50UHJvcGVydGllc18uZ2V0KGtleSk7Ci0JCWlmIChwcm9wZXJ0eSAhPSBudWxsICYmICghcHJvcGVydHkudG9TdHJpbmcoKS5lcXVhbHMoIiIpKSkKLQkJCXJldHVybiBwcm9wZXJ0eS50b1N0cmluZygpLnRyaW0oKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8vIGNhbGwgZnJvbSBlbmdpbmUgcHJpb3IgdG8gZXhlY3V0aW5nIHRoZSBvcGVyYXRpb24gCi0JcHVibGljIElTdGF0dXMgaW5pdE9wZXJhdGlvbkRhdGEoQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3ApCi0JewotCQkvL2NoZWNrIHRvIHNlZSBpZiBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gcHJpbWVkIGZvciB0aGlzIG9wZXJhdGlvbiAKLQkJU3RyaW5nIHF1YWxpZmllZENsYXNzTmFtZSA9IG9wLmdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQlpZiAob3BlcmF0aW9uRGF0YVJlY29yZF8uZ2V0KHF1YWxpZmllZENsYXNzTmFtZSkgPT0gbnVsbCkKLQkJewotCQkJY2xhc3NFbnRyeSA9IG5ldyBDbGFzc0VudHJ5KCk7Ci0JCQkKLQkJCXRyeSB7Ci0JCQkJLy9leHRlbnNpb24gbG9va3VwIGZvciB0aGUgYmVhbiAtIG1heSBiZSBtb3JlIHRoYW4gb25lIHByb3BlcnR5IGZvciBpdAotCQkJCUVudW1lcmF0aW9uIG9wZXJhdGlvbkRhdGEgPSBnZXRNYXBwaW5nRXh0ZW5zaW9ucyhvcCk7CQkJCQkKLQkJCQljbGFzc0VudHJ5LnNldHRlckxpc3RfPSBnZXRTZXR0ZXJMaXN0KG9wKTsJCQotCQkJCXdoaWxlIChvcGVyYXRpb25EYXRhLmhhc01vcmVFbGVtZW50cygpKQotCQkJCXsJCQkJCi0JCQkJCVByb3BlcnR5RGF0YUhvbGRlciBtYXBwaW5nID0gKFByb3BlcnR5RGF0YUhvbGRlcilvcGVyYXRpb25EYXRhLm5leHRFbGVtZW50KCk7Ci0JCQkJCQkKLQkJCQkJICAgIG1hcHBpbmdDb21wbGV0ZV8gPSBmYWxzZTsKLQkJCQkJCVN0cmluZyBwcm9wZXJ0eSA9IG1hcHBpbmcucHJvcGVydHlfOwotCQkJCQkJU3RyaW5nIHNldHRlck1ldGhvZE5hbWUgPSBjcmVhdGVTZXR0ZXJOYW1lKHByb3BlcnR5KTsJCQotCQkJCQkJCQkJCQkJCi0JCQkJCQlpbnQgc3RlcCA9IDE7Ci0JCQkJCQl3aGlsZSAoIW1hcHBpbmdDb21wbGV0ZV8pCi0JCQkJCQl7CQkJCQkJCQotCQkJCQkJICAgc3dpdGNoIChzdGVwKSB7Ci0JCQkJCQkJY2FzZSAxOgotCQkJCQkJCQltYXBwaW5nQ29tcGxldGVfID0gdHJhbnNmb3JtQW5kU2V0KG1hcHBpbmcsIHNldHRlck1ldGhvZE5hbWUpOwkJCQkJCQkJCi0JCQkJCQkJCWJyZWFrOwkJCQkJCQkJCi0JCQkJCQkJY2FzZSAyOgotCQkJCQkJCQltYXBwaW5nQ29tcGxldGVfID0gY2FsbFNldHRlcihtYXBwaW5nLm9wZXJhdGlvbl8sIG1hcHBpbmcudmFsdWVfLCBzZXR0ZXJNZXRob2ROYW1lKTsKLQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCQotCQkJCQkJCWNhc2UgMzoKLQkJCQkJCQkJbWFwcGluZ0NvbXBsZXRlXyA9IGNhbGxQcmltaXRpdmVTZXR0ZXIobWFwcGluZyk7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCQotCQkJCQkJCWNhc2UgNDoKLQkJCQkJCQkJbWFwcGluZ0NvbXBsZXRlXyA9IGNhbGxTZXR0ZXJDb25zdHJ1Y3RvcihtYXBwaW5nKTsKLQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCQotCQkJCQkJCWRlZmF1bHQ6Ci0JCQkJCQkJCW1hcHBpbmdDb21wbGV0ZV8gPSB0cnVlOwotCQkJCQkJCQlicmVhazsJCQkJCQkJCQotCQkJCQkJCX0KLQkJCQkJCSAgIHN0ZXArKzsKLQkJCQkJCX0JCQkJCQotCQkJCSAgfQkJCQkKLSAgICAgICAgICAgICAgICAvL2FkZCBvcGVyYXRpb24gdG8gdGhlIHJlY29yZCAtIG5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBhZ2Fpbi4uLgotICAgICAgICAgICAgICAgIG9wZXJhdGlvbkRhdGFSZWNvcmRfLnB1dChxdWFsaWZpZWRDbGFzc05hbWUsICIiKTsKLQkJCX0JCQkKLQkJCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJCXsJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0KLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIHNldHRlciBuYW1lIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eSBwYXNzZWQgaW4uICBJZiB0aGUgCi0JICogcHJvcGVydHkgaGFzIGFueSBsZWFkaW5nIHF1YWxpZmllcnMgdGhleSBhcmUgc3RyaXBwZWQgb2ZmLgotCSAqIFRoZSBwcm9wZXJ0eSBpcyBjYXBpdGFsaXplZCBhbmQgc2V0IGlzIHByZXBlbmRlZC4KLQkgKiBAcGFyYW0gcHJvcGVydHkgIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHJlcXVpcmVzIGEgc2V0dGVyLgotCSAqIEByZXR1cm4KLQkgKi8JCi0JcHJpdmF0ZSBTdHJpbmcgY3JlYXRlU2V0dGVyTmFtZShTdHJpbmcgcHJvcGVydHkpCi0JewkJCi0JCXdoaWxlIChwcm9wZXJ0eS5pbmRleE9mKCIuIik+PTApCi0JCXsKLQkJCXByb3BlcnR5PXByb3BlcnR5LnN1YnN0cmluZyhwcm9wZXJ0eS5pbmRleE9mKCIuIikrMSk7Ci0JCX0JCSAKLQkJIFN0cmluZyBmaXJzdENoYXIgPSBwcm9wZXJ0eS5zdWJzdHJpbmcoMCwxKTsKLQkJIGZpcnN0Q2hhciA9IGZpcnN0Q2hhci50b1VwcGVyQ2FzZSgpOwotCQkgcHJvcGVydHkgPSBmaXJzdENoYXIgKyBwcm9wZXJ0eS5zdWJzdHJpbmcoMSk7ICAKLQkJIFN0cmluZyBzZXR0ZXJOYW1lID0gInNldCIgKyBwcm9wZXJ0eTsJCSAKLQkJIHJldHVybiBzZXR0ZXJOYW1lOwkJIAotCX0JCi0JCi0JICAgLyoqCi0JICAgICogUmV0cmlldmVzIGV4dGVuc2lvbnMgZm9yIHRoZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYgYW50RGF0YU1hcHBpbmcKLQkgICAgKiBleHRlbnNpb24gcG9pbnQuICBFeHRyYWN0cyB0aG9zZSB0aGF0IHdpdGggY2xhc3MgYXR0cmlidXRlIHZhbHVlcyB0aGF0IG1hdGNoIG9wZXJhdGlvbk5hbWUuCi0JICAgICogQWxsIG1hcHBpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gUHJvcGVydHlEYXRhSG9sZGVyIG9iamVjdHMuCi0JICAgICogQW55IG06MSBBbnQga2V5IHRvIHByb3BlcnR5IG1hcHBpbmdzIGFyZSBjb2xsZWN0ZWQgaW50byBhIGtleS12YWx1ZSBtYXAgd2l0aGluCi0JICAgICogYSBzaW5nbGUgUHJvcGVydHlEYXRhSG9sZGVyLiAgCi0JICAgICogQHBhcmFtIG9wZXJhdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGlzIGJlaW5nIGluaXRpYWxpemVkLgotCSAgICAqIEByZXR1cm4gQSBjb2xsZWN0aW9uIG9mIFByb3BlcnR5RGF0YUhvbGRlciBvYmplY3RzLiBSZXR1cm5zIG51bGwgaWYgdGhlcmUgYXJlIG5vIGV4dGVuc2lvbnMgbWF0Y2hpbmcgdGhlIG9wZXJhdGlvbk5hbWUuCi0JICAgICovCi0JICAgcHJpdmF0ZSBFbnVtZXJhdGlvbiBnZXRNYXBwaW5nRXh0ZW5zaW9ucyhBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBvcGVyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICAgewkgICAJCSAgIAotCQkgICBTdHJpbmcgb3BlcmF0aW9uTmFtZSA9IG9wZXJhdGlvbi5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJICAgLy9nbyB0byBleHQgcmVnaXN0cnkgYW5kIGdldCBhbGwgYW50TWFwcGluZyBleHRlbnNpb25zCi0JCSAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkgICBJRXh0ZW5zaW9uUG9pbnQgZXh0UHQgPSByZWcuZ2V0RXh0ZW5zaW9uUG9pbnQoRVhUX1BUX05BTUVTUEFDRSwgTUFQUEVSX0VYVF9QVCk7Ci0JCSAgIEhhc2h0YWJsZSBkYXRhVGFibGUgPSBuZXcgSGFzaHRhYmxlKDI1KTsKLQkJICAgCi0JCSAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gZXh0UHQuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0JCSAgIAotCQkgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkKLQkJCSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2UgPSBlbGVtZW50c1tpXTsKLQkJCSBPYmplY3Qgb2JqID0gY2UuZ2V0QXR0cmlidXRlKE1BUFBFUl9PUEVSQVRJT05fQVRUUklCVVRFKTsKLQkJCSAvLyBsb29rIGZvciBtYXBwaW5ncyBmb3IgdGhpcyBvcGVyYXRpb24KLQkJCSBpZiAob2JqLmVxdWFscyhvcGVyYXRpb25OYW1lKSkKLQkJCSB7CQkJCSAKLQkJCQkgU3RyaW5nIGtleSA9IGNlLmdldEF0dHJpYnV0ZShNQVBQRVJfS0VZX0FUVFJJQlVURSk7Ci0JCQkJIFN0cmluZyB2YWx1ZSA9IGdldFByb3BlcnR5KGtleSk7Ci0JCQkJIAotCQkJCSAvL2NoZWNrIHRvIHNlZSBpZiB0aGUgcHJvcGVydHkgZm9yIHRoaXMgZXh0ZW5zaW9uIGlzIGFscmVhZHkgaW4gdGhlIGRhdGEgdGFibGUKLQkJCQkgLy8gaWYgc28sIHRoZXJlIGlzIGEgbToxIG1hcHBpbmcKLQkJCQkgaWYgKHZhbHVlICE9IG51bGwpICAvL29ubHkgZG8gYSBtYXBwaW5nIGlmIHRoZXJlIGlzIGFuIEFudCBwcm9wZXJ0eSB2YWx1ZSBwYXNzZWQgaW4uLi4KLQkJCQkgewotCQkJCQotCQkJCQkgU3RyaW5nIHByb3BlcnR5ID0gY2UuZ2V0QXR0cmlidXRlKE1BUFBFUl9QUk9QRVJUWV9BVFRSSUJVVEUpOwotCQkJCQkgT2JqZWN0IHRyYW5zZm9ybSA9IG51bGw7Ci0JCQkJCSB0cnkKLQkJCQkJIHsKLQkJCQkJCSAvL2NoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBhbiB0cmFuc2Zvcm0gYXR0cmlidXRlIHByb3ZpZGVkCi0JCQkJCQkgLy8gIGlmIHNvLCBnZXQgdGhlIGNsYXNzIHRvIGRvIHRoZSB0cmFuc2Zvcm1hdGlvbgotCQkJCQkJIGlmIChjZS5nZXRBdHRyaWJ1dGUoTUFQUEVSX1RSQU5TRk9STV9BVFRSSUJVVEUpIT0gbnVsbCkKLQkJCQkJCQkgdHJhbnNmb3JtID0gY2UuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihNQVBQRVJfVFJBTlNGT1JNX0FUVFJJQlVURSk7CSAKLQkJCQkJIH0KLQkJCQkJIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNleCkgewotCQkJCQkgICBTdGF0dXMgZXJyb3JTdGF0dXMgPSBuZXcgU3RhdHVzKFN0YXR1cy5FUlJPUiwgIndzX2FudCIsIDUwOTIsIGNleC5nZXRNZXNzYWdlKCksIGNleCk7Ci0JCQkJCSAgIGdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCQkJCSAgIGdldExvZygpLmxvZyhJTG9nLkVSUk9SLCAid3NfYW50IiwgNTA5MiwgdGhpcywgImdldE1hcHBpbmdFeHRlbnNpb25zIiwgRW52aXJvbm1lbnRNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0FOVF9EQVRBX1RSQU5TRk9STSwga2V5LCB0cmFuc2Zvcm0pKTsKLQkJCQkJICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oZXJyb3JTdGF0dXMpOwotCQkJCQkgfQotCQkJCQkgCi0JCQkJCSBpZiAodHJhbnNmb3JtICE9IG51bGwgJiYgdHJhbnNmb3JtIGluc3RhbmNlb2YgQmVhbk1vZGlmaWVyLypkYXRhVGFibGUuY29udGFpbnNLZXkocHJvcGVydHkpKi8pCi0JCQkJCSB7Ci0JCQkJCQkgLy9nZXQgdGhlIFByb3BlcnR5RGF0YUhvbGRlciBmcm9tIHRoZSB0YWJsZQotCQkJCQkJIFByb3BlcnR5RGF0YUhvbGRlciBob2xkZXIgPSAoUHJvcGVydHlEYXRhSG9sZGVyKWRhdGFUYWJsZS5nZXQocHJvcGVydHkpOwotCQkJCQkJIGlmIChob2xkZXIgPT0gbnVsbCkKLQkJCQkJCSB7Ci0JCQkJCQkJIGhvbGRlciA9IG5ldyBQcm9wZXJ0eURhdGFIb2xkZXIoKTsKLQkJCQkJCQkgaG9sZGVyLmtleV8gPSAiIjsKLQkJCQkJCQkgaG9sZGVyLnZhbHVlXyA9ICIiOwkKLQkJCQkJCQkgaG9sZGVyLnRyYW5zZm9ybV8gPSB0cmFuc2Zvcm07Ci0JCQkJCQkJIGhvbGRlci5vcGVyYXRpb25fID0gb3BlcmF0aW9uOwotCQkJCQkJCSBob2xkZXIucHJvcGVydHlfID0gcHJvcGVydHk7Ci0JCQkJCQkJIGhvbGRlci5tYXBfID0gbmV3IEhhc2hNYXAoKTsKLQkJCQkJCQkgaG9sZGVyLm1hcF8ucHV0KGtleSwgdmFsdWUpOwotCQkJCQkJCSBkYXRhVGFibGUucHV0KHByb3BlcnR5LCBob2xkZXIpOwotCQkJCQkJIH0JCQkJCQkgCi0JCQkJCQkgZWxzZQotCQkJCQkJIHsJCQkJCQkKLQkJCQkJCQlob2xkZXIubWFwXy5wdXQoa2V5LCB2YWx1ZSk7Ci0JCQkJCQkgfQkJCQkJCi0JCQkJCSB9Ci0JCQkJCSBlbHNlICAvL3BsYWluIHByb3BlcnR5IG1hcHBpbmcgbm90IGEgYmVhbgotCQkJCQkgewotCQkJCQkJIFByb3BlcnR5RGF0YUhvbGRlciBob2xkZXIgPSBuZXcgUHJvcGVydHlEYXRhSG9sZGVyKCk7Ci0JCQkJCQkgaG9sZGVyLm9wZXJhdGlvbl8gPSBvcGVyYXRpb247Ci0JCQkJCQkgaG9sZGVyLmtleV8gPSBrZXk7Ci0JCQkJCQkgaG9sZGVyLnByb3BlcnR5XyA9IHByb3BlcnR5OwotCQkJCQkJIGhvbGRlci50cmFuc2Zvcm1fID0gdHJhbnNmb3JtOwotCQkJCQkJIGhvbGRlci52YWx1ZV8gPSB2YWx1ZTsKLQkJCQkJCSBkYXRhVGFibGUucHV0KHByb3BlcnR5LCBob2xkZXIpOwotCQkJCQkgfQkJCSAKLQkJCQkgfQotCQkJCSBlbHNlIGlmKGNlLmdldEF0dHJpYnV0ZShNQVBQRVJfUkVRVUlSRURfQVRUUklCVVRFKSE9bnVsbCAmJiBjZS5nZXRBdHRyaWJ1dGUoTUFQUEVSX1JFUVVJUkVEX0FUVFJJQlVURSkuZXF1YWxzKCJ0cnVlIikpCi0JCQkJIHsJCQkJCi0JCQkJCSBTdHJpbmcgbXNnID0gRW52aXJvbm1lbnRNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0FOVF9SRVFVSVJFRF9QUk9QRVJUWSwga2V5LnRvU3RyaW5nKCkpOwotCQkJCQkgU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgCi0JCQkJCQkJCUVudlBsdWdpbi5JRCwKLQkJCQkJCQkJSVN0YXR1cy5FUlJPUiwKLQkJCQkJCQkJbXNnLCAKLQkJCQkJCQkJbnVsbCk7Ci0JCQkJCSBnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzT2JqKTsKLQkgICAgICAgICAgICAgICAgIGdldExvZygpLmxvZyhJTG9nLkVSUk9SLCAid3NfYW50IiwgOTk5OSwgdGhpcywgImdldE1hcHBpbmdFeHRlbnNpb25zIiwgbXNnKTsJCQkJCSAKLQkJCQkgfQotCQkJCSBlbHNlIGlmICh2ZXJib3NlKCkpCi0JCQkJIHsKLQkJCQkJIFN0cmluZyBtc2cgPSBFbnZpcm9ubWVudE1lc3NhZ2VzLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfSU5GT19BTlRfX1BST1BFUlRZX0RFRkFVTFQsIGtleS50b1N0cmluZygpKTsKLQkJCQkJIFN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgCi0JCQkJCQkJCUVudlBsdWdpbi5JRCwKLQkJCQkJCQkJSVN0YXR1cy5JTkZPLAotCQkJCQkJCQltc2csIAotCQkJCQkJCQludWxsKTsKLQkJCQkJIGdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRJbmZvKHN0YXR1c09iaik7Ci0JCQkJCSBnZXRMb2coKS5sb2coSUxvZy5JTkZPLCAid3NfYW50IiwgOTk5OSwgdGhpcywgImdldE1hcHBpbmdFeHRlbnNpb25zIiwgbXNnKTsJCQkJCSAKLQkJCQkgfQotCQkgICAgICB9ICAgIAkgCi0JCSAgfQotCQkgICByZXR1cm4gZGF0YVRhYmxlLmVsZW1lbnRzKCk7Ci0JCX0gICAgIAotCSAgIAotCSAgIHByaXZhdGUgYm9vbGVhbiB0cmFuc2Zvcm1BbmRTZXQoUHJvcGVydHlEYXRhSG9sZGVyIG1hcHBpbmcsIFN0cmluZyBzZXR0ZXJNZXRob2ROYW1lKQotCSAgIHsKLQkJCU9iamVjdCB0cmFuc2Zvcm0gPSBtYXBwaW5nLnRyYW5zZm9ybV87Ci0JCQlpZiAodHJhbnNmb3JtICE9IG51bGwpCi0JCQl7Ci0JCQkJLy8gZ2V0IHRyYW5zZm9ybSBjbGFzcyAmIGNyZWF0ZSBzZXR0ZXIgcGFyYW1ldGVycwkJCi0JCQkJdHJ5Ci0JCQkJewotCQkJCQkvL09iamVjdCBjbGFzc09iamVjdCA9IENsYXNzLmZvck5hbWUodHJhbnNmb3JtKS5uZXdJbnN0YW5jZSgpOwotCQkJCQlPYmplY3QgcGFyYW0gPSBuZXcgT2JqZWN0KCk7Ci0JCQkJCWlmICh0cmFuc2Zvcm0gaW5zdGFuY2VvZiBUcmFuc2Zvcm1lcikKLQkJCQkJewotCQkJCQkJVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSAoVHJhbnNmb3JtZXIpdHJhbnNmb3JtOwkJCQkJCQotCQkJCQkJLy8gdHJhbnNmb3JtIHRoZSBwcm9wZXJ0eSB2YWx1ZQotCQkJCQkJcGFyYW0gPSB0cmFuc2Zvcm1lci50cmFuc2Zvcm0obWFwcGluZy52YWx1ZV8pOwkJCQkJCQotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKG1hcHBpbmcubWFwXyAhPSBudWxsICYmIHRyYW5zZm9ybSBpbnN0YW5jZW9mIEJlYW5Nb2RpZmllcikKLQkJCQkJewotCQkJCQkJICBCZWFuTW9kaWZpZXIgbW9kaWZpZXIgPSAoQmVhbk1vZGlmaWVyKXRyYW5zZm9ybTsJCQotICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRob2QgZ2V0dGVyID0gZ2V0R2V0dGVyTWV0aG9kKG1hcHBpbmcpOwotCQkJCQkJICBwYXJhbSA9IGdldHRlci5pbnZva2UobWFwcGluZy5vcGVyYXRpb25fLCBuZXcgT2JqZWN0W117fSk7CQkJCQkJICAKLQkJCQkJCSAgbW9kaWZpZXIubW9kaWZ5KHBhcmFtLCBtYXBwaW5nLm1hcF8pOwotCQkJCQl9CQkJCQkJCQkJCQkJCi0JCQkJCXJldHVybiBjYWxsU2V0dGVyKG1hcHBpbmcub3BlcmF0aW9uXywgcGFyYW0sIHNldHRlck1ldGhvZE5hbWUpOwotCQkJCQkKLQkJCQl9Ci0JCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpCi0JCQkJewotCQkJCQlnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IobmV3IFN0YXR1cyhTdGF0dXMuRVJST1IsICJ3c19hbnQiLCA1MDkzLCBleGMuZ2V0TWVzc2FnZSgpLCBleGMpKTsKLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9nKCkubG9nKElMb2cuRVJST1IsICJ3c19hbnQiLCA1MDkzLCB0aGlzLCAidHJhbnNmb3JtQW5kU2V0IiwgRW52aXJvbm1lbnRNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0FOVF9EQVRBX1RSQU5TRk9STSwgbWFwcGluZy5rZXlfLCBtYXBwaW5nLnRyYW5zZm9ybV8pKTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihleGMuZ2V0TWVzc2FnZSgpKTsKLQkJCQl9CQkJCQotCQkJfQotCQkJcmV0dXJuIGZhbHNlOwotCSAgIH0JICAgCi0JICAgCi0JICAgcHJpdmF0ZSBWZWN0b3IgZ2V0U2V0dGVyTGlzdChPYmplY3Qgb3ApCi0JICAgewotCQkgICBWZWN0b3IgcmVzdWx0ID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gb3AuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7CQkgICAgIAotCQkgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBtZXRob2RzLmxlbmd0aDsgaW5kZXgrKyApCi0JCSAgICAgewotCQkgICAgICAgTWV0aG9kICBtZXRob2QgICAgID0gbWV0aG9kc1tpbmRleF07Ci0JCSAgICAgICBib29sZWFuIGlzUHVibGljICAgPSBNb2RpZmllci5pc1B1YmxpYyggbWV0aG9kLmdldE1vZGlmaWVycygpICk7Ci0JCSAgICAgICBDbGFzcyAgIHJldHVyblR5cGUgPSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotCQkgICAgIAotCQkgICAgICAgaWYoIGlzUHVibGljICYmIAotCQkgICAgICAgICAgIHJldHVyblR5cGUgPT0gVm9pZC5UWVBFICYmIAotCQkgICAgICAgICAgIG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA9PSAxICYmCi0JCSAgICAgICAgICAgbWV0aG9kLmdldE5hbWUoKS5zdGFydHNXaXRoKCAic2V0IiApKQotCQkgICAgICAgewotCQkgICAgICAgICBtZXRob2Quc2V0QWNjZXNzaWJsZSggdHJ1ZSApOwotCQkgICAgICAgICByZXN1bHQuYWRkKCBtZXRob2QgKTsKLQkJICAgICAgIH0KLQkJICAgICB9Ci0JCQkgICAgIAotCSAgICAgcmV0dXJuIHJlc3VsdDsKLQkgICB9Ci0JICAgCi0JICAgcHJpdmF0ZSBNZXRob2QgZ2V0R2V0dGVyTWV0aG9kKFByb3BlcnR5RGF0YUhvbGRlciBtYXBwaW5nKQotCSAgIHsKLQkgICAgICAgTWV0aG9kIGdldHRlckZvdW5kID0gbnVsbDsgICAgIAotCi0JICAgICAgIGlmIChjbGFzc0VudHJ5LmdldHRlckxpc3RfID09IG51bGwpCi0JICAgICAgIHsKLQkgICAgCSAgIGNsYXNzRW50cnkuZ2V0dGVyTGlzdF8gPSBnZXRHZXR0ZXJMaXN0KG1hcHBpbmcub3BlcmF0aW9uXyk7ICAKLQkgICAgICAgfQotCSAgICAgICAKLQkgICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNsYXNzRW50cnkuZ2V0dGVyTGlzdF8uc2l6ZSgpOyBpbmRleCsrICkKLQkgICAgICAgewotCSAgICAgICAgIE1ldGhvZCBnZXR0ZXIgPSAoTWV0aG9kKWNsYXNzRW50cnkuZ2V0dGVyTGlzdF8uZWxlbWVudEF0KCBpbmRleCApOwotCSAgICAgICAgIAotCSAgICAgICAgIGlmKCBnZXR0ZXIuZ2V0TmFtZSgpLmVxdWFscyggImdldCIgKyBtYXBwaW5nLnByb3BlcnR5XyApKQotCSAgICAgICAgIHsKLQkgICAgICAgICAgICBnZXR0ZXJGb3VuZCA9IGdldHRlcjsKLQkgICAgICAgICAgICBicmVhazsKLQkgICAgICAgICB9ICAgICAgIAotCSAgICAgICB9Ci0JICAgICAgIHJldHVybiBnZXR0ZXJGb3VuZDsKLQkgICB9Ci0JICAgCi0JICAgcHJpdmF0ZSBWZWN0b3IgZ2V0R2V0dGVyTGlzdCggT2JqZWN0IG9iamVjdCApCi0JICAgewotCSAgICAgVmVjdG9yIHJlc3VsdCA9IG5ldyBWZWN0b3IoKTsJICAgICAKLQkgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBvYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7Ci0JICAgICAKLQkgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBtZXRob2RzLmxlbmd0aDsgaW5kZXgrKyApCi0JICAgICB7Ci0JICAgICAgIE1ldGhvZCAgbWV0aG9kICAgICA9IG1ldGhvZHNbaW5kZXhdOwotCSAgICAgICBib29sZWFuIGlzUHVibGljICAgPSBNb2RpZmllci5pc1B1YmxpYyggbWV0aG9kLmdldE1vZGlmaWVycygpICk7Ci0JICAgICAgIENsYXNzICAgcmV0dXJuVHlwZSA9IG1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7Ci0JICAgICAKLQkgICAgICAgaWYoIGlzUHVibGljICYmIAotCSAgICAgICAgICAgcmV0dXJuVHlwZSAhPSBWb2lkLlRZUEUgJiYgCi0JICAgICAgICAgICBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMCAmJgotCSAgICAgICAgICAgbWV0aG9kLmdldE5hbWUoKS5zdGFydHNXaXRoKCAiZ2V0IiApKQotCSAgICAgICB7Ci0JICAgICAgICAgbWV0aG9kLnNldEFjY2Vzc2libGUoIHRydWUgKTsKLQkgICAgICAgICByZXN1bHQuYWRkKCBtZXRob2QgKTsKLQkgICAgICAgfQotCSAgICAgfQotCSAgICAgCi0JICAgICByZXR1cm4gcmVzdWx0OwotCSAgIH0gICAKLSAgICAgICAKLQkgICBwcml2YXRlIGJvb2xlYW4gY2FsbFNldHRlcihBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBvcCwgT2JqZWN0IHBhcmFtLCBTdHJpbmcgc2V0dGVyTWV0aG9kTmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgICB7Ci0JCSAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBjbGFzc0VudHJ5LnNldHRlckxpc3RfLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIAotCQkgICB7Ci0JCQkJTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCQlpZiAobWV0aG9kLmdldE5hbWUoKS5lcXVhbHMoc2V0dGVyTWV0aG9kTmFtZSkpCi0JCQkJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJCSAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkJCSAgICAgICBpZiAocGFyYW1UeXBlcy5sZW5ndGggPT0gMSAmJiBwYXJhbSAhPSBudWxsKQotCQkJICAgICAgIHsJCQkgIAotCQkJICAgICAgICAJIHRyeXsJCQkgICAgICAJCQkKLQkJCSAgICAgCQkJIG1ldGhvZC5pbnZva2Uob3AsIG5ldyBPYmplY3RbXXtwYXJhbX0pOwotCQkJICAgICAJCQkgcmV0dXJuIHRydWU7Ci0JCQkgICAgIAkJIH0KLQkJCSAgICAgCQkgY2F0Y2goRXhjZXB0aW9uIGNleCl7Ci0JCQkgICAgIAkJCVN0YXR1cyBlcnJvclN0YXR1cyA9IG5ldyBTdGF0dXMoU3RhdHVzLkVSUk9SLCAid3NfYW50IiwgNTA5NCwgY2V4LmdldE1lc3NhZ2UoKSwgY2V4KTsKLQkJCSAgICAgCQkJZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJCSAgICAgCQkJZ2V0TG9nKCkubG9nKElMb2cuRVJST1IsICJ3c19hbnQiLCA1MDk0LCB0aGlzLCAiY2FsbFNldHRlciIsIEVudmlyb25tZW50TWVzc2FnZXMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfQ0FMTF9TRVRURVIsIHNldHRlck1ldGhvZE5hbWUpKTsKLQkJCSAgICAgCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oZXJyb3JTdGF0dXMpOwotCQkJICAgICAJCSB9Ci0JCQkgICAgICAgfSAgCi0JCQkJfQotCQkJfQotCQkgICAgcmV0dXJuIGZhbHNlOwotCSAgIH0KLQkgICAKLQkKLQkgICAvLyBsb29rIGZvciBzZXR0ZXIgd2l0aCBwcmltaXRpdmUgdHlwZSBwYXJhbWV0ZXIgLSBpZiBmaW5kIG9uZSwgY29udmVydCBTdHJpbmcgcHJvcGVydHlWYWx1ZSBhbmQgY2FsbCBpdAotCSAgIHByaXZhdGUgYm9vbGVhbiBjYWxsUHJpbWl0aXZlU2V0dGVyKFByb3BlcnR5RGF0YUhvbGRlciBtYXBwaW5nKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgIHsJCQkKLQkJCWZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBjbGFzc0VudHJ5LnNldHRlckxpc3RfLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKLQkJCQlNZXRob2QgZWxlbWVudCA9IChNZXRob2QpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCQlDbGFzc1tdIHBhcm1UeXBlcyA9IGVsZW1lbnQuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkJCQlpZiAocGFybVR5cGVzLmxlbmd0aD09MSAmJiBwYXJtVHlwZXNbMF0uaXNQcmltaXRpdmUoKSkKLQkJCQl7CQkJCQkJCQkJCQotCQkJCQlDbGFzcyBwYXJtVHlwZSA9IHBhcm1UeXBlc1swXS5nZXRDbGFzcygpOwotCQkJCQlPYmplY3Qgc2V0dGVyUGFybSA9IG51bGw7Ci0JCQkJCWlmIChwYXJtVHlwZS5lcXVhbHMoSW50ZWdlci5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBJbnRlZ2VyLnZhbHVlT2YobWFwcGluZy52YWx1ZV8pOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHBhcm1UeXBlLmVxdWFscyhCb29sZWFuLmNsYXNzKSkKLQkJCQkJewotCQkJCQkJc2V0dGVyUGFybSA9IEJvb2xlYW4udmFsdWVPZihtYXBwaW5nLnZhbHVlXyk7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAocGFybVR5cGUuZXF1YWxzKENoYXJhY3Rlci5jbGFzcykgJiYgbWFwcGluZy52YWx1ZV8ubGVuZ3RoKCkgPT0gMSkKLQkJCQkJewotCQkJCQkJc2V0dGVyUGFybSA9IG5ldyBDaGFyYWN0ZXIobWFwcGluZy52YWx1ZV8uY2hhckF0KDApKTsgIAotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHBhcm1UeXBlLmVxdWFscyhCeXRlLmNsYXNzKSkKLQkJCQkJewotCQkJCQkJc2V0dGVyUGFybSA9IEJ5dGUudmFsdWVPZihtYXBwaW5nLnZhbHVlXyk7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAocGFybVR5cGUuZXF1YWxzKFNob3J0LmNsYXNzKSkKLQkJCQkJewotCQkJCQkJc2V0dGVyUGFybSA9IFNob3J0LnZhbHVlT2YobWFwcGluZy52YWx1ZV8pOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHBhcm1UeXBlLmVxdWFscyhMb25nLmNsYXNzKSkKLQkJCQkJewotCQkJCQkJc2V0dGVyUGFybSA9IExvbmcudmFsdWVPZihtYXBwaW5nLnZhbHVlXyk7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAocGFybVR5cGUuZXF1YWxzKEZsb2F0LmNsYXNzKSkKLQkJCQkJewotCQkJCQkJc2V0dGVyUGFybSA9IEZsb2F0LnZhbHVlT2YobWFwcGluZy52YWx1ZV8pOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHBhcm1UeXBlLmVxdWFscyhEb3VibGUuY2xhc3MpKQotCQkJCQl7Ci0JCQkJCQlzZXR0ZXJQYXJtID0gRG91YmxlLnZhbHVlT2YobWFwcGluZy52YWx1ZV8pOwotCQkJCQl9Ci0JCQkJCQkJCQkJCQkJCQotCQkJCSAgICBpZiAoc2V0dGVyUGFybSAhPSBudWxsKQotCQkJCSAgICB7CQotCQkJCSAgICAJdHJ5Ci0JCQkJICAgIAl7Ci0JCQkJICAgIAkJZWxlbWVudC5pbnZva2UobWFwcGluZy5vcGVyYXRpb25fLCBuZXcgT2JqZWN0W117c2V0dGVyUGFybX0pOwotCQkJCQkgICAgCXJldHVybiB0cnVlOwkKLQkJCQkgICAgCX0KLQkJCQkgICAgCWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJCQkgICAgCQlTdGF0dXMgZXJyb3JTdGF0dXMgPSBuZXcgU3RhdHVzKFN0YXR1cy5FUlJPUiwgIndzX2FudCIsIDUwOTUsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJCQkgICAgCQlnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQkJCSAgICAJCWdldExvZygpLmxvZyhJTG9nLkVSUk9SLCAid3NfYW50IiwgNTA5NSwgdGhpcywgImNhbGxQcmltaXRpdmVTZXR0ZXIiLCBFbnZpcm9ubWVudE1lc3NhZ2VzLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfQU5UX0NBTExfU0VUVEVSLCBlbGVtZW50LmdldE5hbWUoKSkpOwotCQkJCSAgICAJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKGVycm9yU3RhdHVzKTsKLQkJCQkgICAgCX0KLQkJCQkgICAgfQkJCQotCQkJCX0KLQkJICAgIH0gICAKLQkJCXJldHVybiBmYWxzZTsKLQkgICB9Ci0JCQotCQkvL2NoZWNrIGZvciBzZXR0ZXIgd2l0aCBwYXJhbWV0ZXIgdHlwZSB0aGF0IHRha2VzIGEgU3RyaW5nIHRvIGNvbnN0cnVjdAotCQkvLyBjb25zdHJ1Y3QgdGhlIHBhcmFtZXRlciB1c2luZyBTdHJpbmcgJiBjYWxsIHRoZSBzZXR0ZXIgIAotCSAgIHByaXZhdGUgYm9vbGVhbiBjYWxsU2V0dGVyQ29uc3RydWN0b3IoUHJvcGVydHlEYXRhSG9sZGVyIG1hcHBpbmcpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICAgewkKLQkJCWZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBjbGFzc0VudHJ5LnNldHRlckxpc3RfLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKLQkJCQlNZXRob2QgZWxlbWVudCA9IChNZXRob2QpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCQlDbGFzc1tdIHBhcm1UeXBlcyA9IGVsZW1lbnQuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkJCQlDbGFzc1tdIHN0cmluZ1Bhcm0gPSBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9OwotCQkJCWlmIChwYXJtVHlwZXMubGVuZ3RoPT0xKQotCQkJCXsKLQkJCQkJdHJ5Ci0JCQkJCXsJCQkKLQkJCQkJCUNvbnN0cnVjdG9yIGN0b3IgPSBwYXJtVHlwZXMuZ2V0Q2xhc3MoKS5nZXRDb25zdHJ1Y3RvcihzdHJpbmdQYXJtKTsKLQkJCQkJCU9iamVjdCBwYXJhbWV0ZXIgPSBjdG9yLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbXXttYXBwaW5nLnZhbHVlX30pOwotCQkJCQkJZWxlbWVudC5pbnZva2UobWFwcGluZy5vcGVyYXRpb25fLCBuZXcgT2JqZWN0W117cGFyYW1ldGVyfSk7CQkJCQkJCi0JCQkJCX0KLQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpCi0JCQkJCXsKLQkJCQkJCVN0YXR1cyBlcnJvclN0YXR1cyA9IG5ldyBTdGF0dXMoU3RhdHVzLkVSUk9SLCAid3NfYW50IiwgNTA5NiwgZXhjLmdldE1lc3NhZ2UoKSwgZXhjKTsKLQkJCQkJCWdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCQkJCQlnZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgIndzX2FudCIsIDUwOTYsIHRoaXMsICJjYWxsU2V0dGVyQ29uc3RydWN0b3IiLCBFbnZpcm9ubWVudE1lc3NhZ2VzLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfQU5UX0NBTExfU0VUVEVSLCBlbGVtZW50LmdldE5hbWUoKSkpOwotCQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oZXJyb3JTdGF0dXMpOwotCQkJCQl9Ci0JCQkJfQotCSAgICAgICAgfQkJCQotCQkgICByZXR1cm4gZmFsc2U7Ci0JICAgfQotCi0JICAgLyoqCi0JICAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBoZWxwcyBtYW5hZ2UgZXhlY3V0aW9uL3VuZG9pbmcgb2YgQ29tbWFuZHMuCi0JICAgICovCi0JICAgcHVibGljIENvbW1hbmRNYW5hZ2VyIGdldENvbW1hbmRNYW5hZ2VyICgpewotCQkgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0T3BlcmF0aW9uTWFuYWdlcigpOwotCSAgIH0gCi0JICAgCi0JICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRSb290Q29tbWFuZEZyYWdtZW50KCkgCi0gICAgICAgewotICAgIAkgICAKLSAgICAJICAgLy9sb29rIHVwIHRoZSBjb21tYW5kRnJhZ21lbnQgaW4gdGhlIHNjZW5hcmlvUmVnaXN0cnkgZXh0ZW5zaW9uIHBvaW50IHdpdGggYW4gSUQgY29ycmVzcG9uZGluZyB0byB0aGUgc2NlbmFyaW8gcHJvcGVydHkgaW4gdGhlIHByb3BlcnR5dGFibGUKLSAgICAJICAgU3RyaW5nIHNjZW5hcmlvUHJvcGVydHkgPSAoU3RyaW5nKWdldFByb3BlcnR5KFNDRU5BUklPX1RZUEVfUFJPUEVSVFkpOwotICAgIAkgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJICAgSUV4dGVuc2lvblBvaW50IGV4dFB0ID0gcmVnLmdldEV4dGVuc2lvblBvaW50KEVYVF9QVF9OQU1FU1BBQ0UsIFNDRU5BUklPX0VYVF9QVCk7Ci0JCSAgIAotCQkgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IGV4dFB0LmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOwotCQkgICAKLQkJICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewotCQkJCi0JCQkgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQgPSBlbGVtZW50c1tpXTsJCQkgCi0JCQkgaWYgKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKFNDRU5BUklPX1RZUEVfQVRUUklCVVRFKS5lcXVhbHMoc2NlbmFyaW9Qcm9wZXJ0eSkpCi0JCQkgewkJCQkgCi0JCQkJIHRyeQotCQkJCSB7CQkJCQkgCi0JCQkJCU9iamVjdCBvYmogPSBjb25maWdFbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oU0NFTkFSSU9fQ0xBU1NfQVRUUklCVVRFKTsKLQkJCi0JCQkJCWlmIChvYmogaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQpCi0JCQkJCXsKLQkJCQkJCXJldHVybiAob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50KW9iajsKLQkJCQkJfQotCQkJCSB9Ci0JCQkJIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotCQkJCSB7Ci0JCQkJCSBTdGF0dXMgZXJyb3JTdGF0dXMgPSBuZXcgU3RhdHVzKFN0YXR1cy5FUlJPUiwgIndzX2FudCIsIDUwOTcsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JCQkJCSBnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQkJCQkgZ2V0TG9nKCkubG9nKElMb2cuRVJST1IsICJ3c19hbnQiLCA1MDk3LCB0aGlzLCAiZ2V0Um9vdENvbW1hbmRGcmFnbWVudCIsIEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0FOVF9DTURfRlJBR01FTlQpOwkJCQkJIAotCQkJCSB9CQkJCSAKLQkJCSAgfSAgICAJICAgCi0gICAgICAgICAgIH0KLQkJICAgcmV0dXJuIG51bGw7Ci0gICAgICAgfQotICB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRPcGVyYXRpb25NYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRPcGVyYXRpb25NYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNGQwOTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50T3BlcmF0aW9uTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YUZsb3dNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRFbmdpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogTWFuYWdlcyB0aGUgZXhlY3V0aW9uIG9mIGNvbW1hbmRzIGluIHRoZSByb290IGZyYWdtZW50IHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCi0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwkKLQotcHVibGljIGNsYXNzIEFudE9wZXJhdGlvbk1hbmFnZXIgZXh0ZW5kcyBDb21tYW5kRnJhZ21lbnRFbmdpbmUKLXsJCi0JICBwcml2YXRlIEFudEVudmlyb25tZW50IGVudmlyb25tZW50XzsKLQkgIAotCSAgcHJvdGVjdGVkIElTdGF0dXMgaW5pdEJlZm9yZUV4ZWN1dGUoIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wZXJhdGlvbiApCi0gICAgeyAgICAgIAotICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJ3c19hbnQiLCA1MDk4LCB0aGlzLCAiaW5pdEJlZm9yZUV4ZWN1dGUiLCAiSW5pdGlhbGl6aW5nIGRhdGEgZm9yOiAiICsgb3BlcmF0aW9uLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgIElTdGF0dXMgaW5pdFN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAJICBpbml0U3RhdHVzID0gZW52aXJvbm1lbnRfLmluaXRPcGVyYXRpb25EYXRhKCBvcGVyYXRpb24gKTsgIAotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgIAkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7ICAKLSAgICAgIH0gICAgICAgIAotICAgICAgcmV0dXJuIGluaXRTdGF0dXM7Ci0gICAgfQotCi0gICAgLyoqCi0JICAgKiBDcmVhdGVzIGEgQ29tbWFuZEZyYWdtZW50RW5naW5lLgotCSAgICogCi0JICAgKiBAcGFyYW0gc3RhcnRGcmFnbWVudCB0aGUgcm9vdCBmcmFnbWVudCB3aGVyZSB0cmF2ZXJzYWwgd2lsbCBiZWdpbi4KLQkgICAqIEBwYXJhbSBkYXRhTWFuYWdlciB0aGUgZGF0YSBtYW5hZ2VyIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBkYXRhIG1hcHBpbmdzLgotCSAgICogQHBhcmFtIGVudmlyb25tZW50IHRoZSBlbnZpcm9ubWVudC4KLQkgICAqLwotCSAgcHVibGljIEFudE9wZXJhdGlvbk1hbmFnZXIoIENvbW1hbmRGcmFnbWVudCBzdGFydEZyYWdtZW50LCBEYXRhRmxvd01hbmFnZXIgZGF0YU1hbmFnZXIsIEFudEVudmlyb25tZW50IGVudmlyb25tZW50ICkKLQkgIHsKLSAgICAgIHN1cGVyKCBzdGFydEZyYWdtZW50LCBkYXRhTWFuYWdlciwgZW52aXJvbm1lbnQgKTsKLSAgICAgIAotCSAgCWVudmlyb25tZW50XyA9IGVudmlyb25tZW50OwotCSAgfSAKLX0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudFN0YXR1c0hhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudFN0YXR1c0hhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBlYTVjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRTdGF0dXNIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTQgICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA1MjIgICAxNzY5NDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIEFudFN0YXR1c0hhbmRsZXIgZXh0ZW5kcyBCYXNlU3RhdHVzSGFuZGxlcgotewotCi0JcHVibGljIENob2ljZSByZXBvcnQoSVN0YXR1cyBzdGF0dXMsIENob2ljZVtdIGNob2ljZXMpIHsKLQkJLy8gVE9ETyAKLQkgIGNoZWNrU3RhdHVzKHN0YXR1cyk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlcG9ydChJU3RhdHVzIHN0YXR1cykgdGhyb3dzIFN0YXR1c0V4Y2VwdGlvbiB7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotCQkJcmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJZWxzZQotCQkJcmVwb3J0SW5mbyhzdGF0dXMpOwotCi0JfQotCi0JcHVibGljIHZvaWQgcmVwb3J0RXJyb3IoSVN0YXR1cyBzdGF0dXMpIHsKLQkgIGNoZWNrU3RhdHVzKHN0YXR1cyk7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbihzdGF0dXMuZ2V0TWVzc2FnZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXBvcnRJbmZvKElTdGF0dXMgc3RhdHVzKSB7CQotCSAgY2hlY2tTdGF0dXMoc3RhdHVzKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKHN0YXR1cy5nZXRNZXNzYWdlKCkpOwkJCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9Qcm9wZXJ0eURhdGFIb2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L1Byb3BlcnR5RGF0YUhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDlhYjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L1Byb3BlcnR5RGF0YUhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50OwotCi0vKioKLSAqIFNpbXBsZSBjbGFzcyB0byBob2xkIGRhdGEgbWFwcGluZyBpbmZvcm1hdGlvbiBvbmNlIHJldHJpZXZlZCBmcm9tIEFudCBwcm9wZXJ0eSBmaWxlLgotICogTWFwIGlzIHVzZWQgZm9yIG1hbnkgdG8gb25lIG1hcHBpbmdzIGludm9sdmluZyBtYXBwaW5nIG9mIG11bHRpcGxlIHByb3BlcnRpZXMgdG8gYSBiZWFuLgotICogSW4gdGhpcyBjYXNlLCB0aGUga2V5XyBhbmQgdmFsdWVfIHNob3VsZCBiZSBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGFuZCBhbGwga2V5IHZhbHVlIHBhaXJzCi0gKiBmb3IgcHJvcGVydGllcyBwdXQgaW50byB0aGUgbWFwIGluc3RlYWQuICBUaGUgdHJhbnNmb3JtYXRpb24gZm9yIHRoaXMgY2FzZSB3b3VsZCBiZSBhIG1vZGlmaWVyCi0gKiB3aGljaCB3aWxsIHNldCB0aGUgcHJvcGVydGllcyBvbnRvIHRoZSBiZWFuLgotICovCi0gCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eURhdGFIb2xkZXIgewotCSAgIHB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBvcGVyYXRpb25fOwotCSAgIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtXzsKLQkgICBwdWJsaWMgU3RyaW5nIGtleV87Ci0JICAgcHVibGljIFN0cmluZyBwcm9wZXJ0eV87Ci0JICAgcHVibGljIFN0cmluZyB2YWx1ZV87CQkKLQkgICBwdWJsaWMgTWFwIG1hcF87Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L1N0cmluZzJCb29sZWFuVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L1N0cmluZzJCb29sZWFuVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgzZTU0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9TdHJpbmcyQm9vbGVhblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nMkJvb2xlYW5UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyIHsKLQotCXB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkgewotCQkJU3RyaW5nIHN0ciA9IChTdHJpbmcpdmFsdWU7Ci0JCQlzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTsKLQkJCWlmIChzdHIuZXF1YWxzKCJ0cnVlIikpCi0JCQl7Ci0JCQkJcmV0dXJuIG5ldyBCb29sZWFuKHRydWUpOwotCQkJfQotCQkJZWxzZSByZXR1cm4gbmV3IEJvb2xlYW4oZmFsc2UpOwkJCi0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvQ29tbWFuZExpbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvQ29tbWFuZExpbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEwOWJkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL0NvbW1hbmRMaW5lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tYW5kbGluZTsKLQotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkJpdFNldDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLlN0cmluZ1V0aWxzOwotCi0KLS8qKgotICAqIDxwPlRoaXMgaXMgYSBnZW5lcmljIGNvbW1hbmQgbGluZSBwYXJzaW5nIGNsYXNzLiAgVGhlIHByb2dyYW1tZXIgbmVlZCBvbmx5IHNwZWNpZnkKLSAgKiB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZWlyIGNvbW1hbmQgbGluZShpZS4gcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBmbGFncywgZXRjKQotICAqIGFuZCB0aGlzIGNsYXNzIHdpbGwgcGVyZm9ybSB0aGUgcmVzdCBvZiB0aGUgcGFyc2luZyB3b3JrLiAgQXMgYW4gYWRkZWQgYm9udXMgdGhpcwotICAqIGNsYXNzIHdpbGwgYWxzbyBjcmVhdGUgZm9ybWF0ZWQgaGVscCB0ZXh0IHRoYXQgZGlzcGxheXMgdGhlIHN5bnRheCBvZiB0aGlzCi0gICogY29tbWFuZCBsaW5lLgotICAqCi0gICogPHA+VGhlIG1haW4gcGFyYW1ldGVyIHRvIHRoZSBDb21tYW5kTGluZSBjb25zdHJ1Y3RvciBpcyBhIHR3byBkaW1lbnNpb25hbCBTdHJpbmcKLSAgKiBhcnJheS4gIFRoZXJlIGFyZSA1IGNvbHVtbnMgaW4gdGhpcyBhcnJheSBhbmQgYXMgbWFueSByb3dzIGFzIG5lZWRlZCBmb3IgZWFjaAotICAqIGZsYWcgb3IgcG9zaXRpb25hbCBwYXJhbWV0ZXIuICBUaGUgZml2ZSBjb2x1bW5zIGFyZToKLSAgKgotICAqIDxvbD4KLSAgKiA8bGk+VGhlIG5hbWUgb2YgdGhlIGZsYWcoZWcuICJoZWxwIiBvciAiYSIsIGV0YykKLSAgKiAgICAgTm90ZTogbm8gZGFzaCBzaG91bGQgYmUgaW4gdGhlIG5hbWUgaGVyZS4gIFRoZSB1c2VyIHdvdWxkIHNwZWNpZnkgIi1oZWxwIiBvbiB0aGUKLSAgKiAgICAgICAgICAgY29tbWFuZCBsaW5lIHRob3VnaC4KLSAgKiA8bGk+VGhlIG5hbWUgb2YgdGhlIGZsYWcgcGFyYW1ldGVyKGlmIGFueSkKLSAgKiA8bGk+QSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgZmxhZyBjYW4gYXBwZWFyIG1vcmUgdGhhbiBvbmNlIG9uIHRoZQotICAqICAgICBjb21tYW5kIGxpbmUuCi0gICogPGxpPkEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciB0aGlzIGZsYWcgbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAgKiA8bGk+QSBoZWxwIHRleHQgc3RyaW5nIHdoaWNoIGRlc2NyaWJlcyB0aGlzIHBhcnRpY3VsYXIgZmxhZyBvciBwb3NpdGlvbmFsIHBhcmFtZXRlci4KLSAgKiA8L29sPgotICAqCi0gICogPHA+RWFjaCByb3cgaW4gdGhlIHN0cmluZyBhcnJheSBpcyBhc3NvY2lhdGUgd2l0aCBlaXRoZXIgYSBwb3NpdGlvbmFsIHBhcmFtZXRlcgotICAqIG9yIHdpdGggYSBmbGFnLiAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMgY29tbWFuZCBsaW5lOgotICAqIDx1bD4KLSAgKiA8bGk+TXlfcHJvZyByZXF1aXJlZF9wYXJtMSAtYWIgcGFybV9mb3JfYWIgcmVxdWlyZWRfcGFybTIgLWhlbHAgb3B0aW9uYWxfcGFybXMKLSAgKiA8L3VsPgotICAqCi0gICogPHA+SW4gdGhpcyBleGFtcGxlIE15X3Byb2cgaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0uICByZXF1aXJlZF9wYXJtMSBhbmQKLSAgKiByZXF1aXJlZF9wYXJtMiBtdXN0IGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgTm90aWNlIHRoYXQgdGhleSBkbyBub3QKLSAgKiBoYXZlIHRvIGJlIGFkamFjZW50IHRvIGVhY2ggb3RoZXIgb24gdGhlIGNvbW1hbmQgbGluZS4gb3B0aW9uYWxfcGFybXMgbWF5IG9wdGlvbmFsbHkKLSAgKiBzcGVjaWZpZWQuICBvcHRpb25hbF9wYXJtcyBjYW4gYmUgMCBvciBtb3JlIHBhcmFtZXRlcnMuICBUaGV5IGRvZXMgbm90IG5lZWQgdG8gYmUKLSAgKiBhZGphY2VudCB0byB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycywgYnV0IHRoZXkgZG8gbmVlZCB0byBmb2xsb3cgdGhlIHJlcXVpcmVkCi0gICogcGFyYW1ldGVycy4gVHdvIGZsYWdzIGFyZSBzcGVjaWZpZWQgIi1hYiIgYW5kICItaGVscCIuICBUaGUgIi1hYiIgZmxhZyBoYXMgYQotICAqIHBhcmFtZXRlciAicGFybV9mb3JfYWIiIGFzc29jaWF0ZWQgd2l0aCBpdC4gIE5vdGU6IGEgZmxhZyBjYW4gbm90IGhhdmUgYW4gb3B0aW9uYWwKLSAgKiBwYXJhbWV0ZXIuIChpZS4gYSBmbGFnIGVpdGhlciBuZXZlciBoYXZlIGEgcGFyYW1ldGVyIG9yIGl0IGFsd2F5cyBoYXMgYSBwYXJhbWV0ZXIpCi0gICogSW4gdGhpcyBleGFtcGxlLCB0aGUgZmlyc3QgdHdvIHJvd3MgaW4gdGhlIHN0cmluZyBhcnJheSB3b3VsZCBkZXNjcmliZSByZXF1aXJlZF9wYXJtMQotICAqIGFuZCByZXF1aXJlZF9wYXJtMi4gIFRoZSB0aGlyZCBlbnRyeSB3b3VsZCBkZXNjcmliZSBvcHRpb25hbF9wYXJtcy4gIFRoZSBmb3VydGggYW5kCi0gICogZmlmdGggcm93cyB3b3VsZCBkZXNjcmliZSAiLWFiIiBhbmQgIi1oZWxwIi4gIEZvciB0aGlzIGNvbW1hbmQgbGluZSB0aGUgc3RyaW5nIGFycmF5Ci0gICogd291bGQgbG9vayBsaWtlIHRoaXM6Ci0gICoKLSAgKiA8dWw+Ci0gICogPGxpPnsgeyBDb21tYW5kTGluZS5QT1NJVElPTkFMLCAicGFybTEiLCBDb21tYW5kTGluZS5OT19EVVBTLAotICAqICAgICAgIENvbW1hbmRMaW5lLlJFUVVJUkVELCAicGFybTEgaGVscCB0ZXh0IiB9LAotICAqIDxsaT57IENvbW1hbmRMaW5lLlBPU0lUSU9OQUwsICJwYXJtMiIsIENvbW1hbmRMaW5lLk5PX0RVUFMsCi0gICogICAgICAgQ29tbWFuZExpbmUuUkVRVUlSRUQsICJwYXJtMiBoZWxwIHRleHQiIH0sCi0gICogPGxpPnsgQ29tbWFuZExpbmUuUE9TSVRJT05BTCwgIm9wdGlvbmFsX3Bhcm1zIiwgQ29tbWFuZExpbmUuRFVQU19PSywKLSAgKiAgICAgICBDb21tYW5kTGluZS5SRVFVSVJFRCwgIm9wdGlvbmFsIGhlbHAgdGV4dCIgfSwKLSAgKiA8bGk+eyAiYWIiLCAicGFybV9mb3JfYWIiLCBDb21tYW5kTGluZS5OT19EVVBTLAotICAqICAgICAgIENvbW1hbmRMaW5lLk9QVElPTkFMLCAiYWIgaGVscCB0ZXh0IiB9LAotICAqIDxsaT57ICJoZWxwIiwgQ29tbWFuZExpbmUuTk9fUEFSTSwgQ29tbWFuZExpbmUuTk9fRFVQUywKLSAgKiAgICAgICBDb21tYW5kTGluZS5PUFRJT05BTCwgImRpc3BsYXlzIHRoaXMgaGVscCB0ZXh0IiB9IH0KLSAgKiA8L3VsPgotICAqCi0gICogPHA+U3RyaW5nIGFycmF5IHJ1bGVzOgotICAqCi0gICogPG9sPgotICAqIDxsaT5Qb3NpdGlvbmFsIHJvd3MgbXVzdCBhbHdheXMgY29tZSBmaXJzdCBpbiB0aGUgYXJyYXkuICBUaGVzZSByb3dzIG11c3QKLSAgKiAgICAgaGF2ZSBhIG5hbWUgc3BlY2lmaWVkIGluIGNvbHVtbiAyLCBleGNlcHQgZm9yIG9uZSBjYXNlLiAgSWYgeW91IHdhbnQgdG8gaW5kaWNhdGUgdGhhdAotICAqICAgICB0aGVyZSBhcmUgbm8gb3B0aW9uYWwgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHlvdSB3b3VsZCBwdXQgQ29tbWFuZExpbmUuTk9fUEFSTQotICAqICAgICBpbiBjb2x1bW4gMiBvZiB0aGUgcG9zaXRpb25hbCByb3cuICBZb3Ugd291bGQgYWxzbyBuZWVkIHRvIHB1dCBDb21tYW5kTGluZS5PUFRJT05BTAotICAqICAgICBpbiBjb2x1bW4gNCBzaW5jZSB0aGlzIHJvdyBpcyBmb3Igb3B0aW9uYWwgcGFyYW1ldGVycyhvciB0aGUgbm9uLWV4aXN0ZW5jZSBvZgotICAqICAgICBvcHRpb25hbCBwYXJhbWV0ZXJzIGFzIHRoZSBjYXNlIG1heSBiZSkKLSAgKiA8bGk+T25jZSBhIHBvc2l0aW9uYWwgcm93IHNwZWNpZmllcyB0aGF0IGl0IGlzIG9wdGlvbmFsLCBubyBmdXJ0aGVyIHBvc2l0aW9uYWwgcm93cwotICAqICAgICBtYXkgYmUgc3BlY2lmaWVkLgotICAqIDxsaT5BdCBsZWFzdCBvbmUgcG9zaXRpb25hbCByb3cgbXVzdCBiZSBzcGVjaWZpZWQsIGV2ZW4gaWYgaXQgaXMgdG8ganVzdCB0byBzcGVjaWZ5IHRoYXQKLSAgKiAgICAgdGhlcmUgYXJlIG5vIG9wdGlvbmFsIHBhcmFtZXRlcnMuCi0gICogPGxpPkZsYWcgbmFtZXMgbXVzdCBiZSBpbiBsb3dlciBjYXNlLiAgTm90ZTogdGhlIHVzZXIgY2FuIHNwZWNpZnkgdXBwZXIgb3IgbG93ZXIgY2FzZQotICAqICAgICBvbiB0aGUgY29tbWFuZCBsaW5lLgotICAqIDxsaT5JZiBhIGZsYWcgaGFzIGEgcGFyYW1ldGVyIHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHB1dCBpbnRvIGNvbHVtbiAyLgotICAqICAgICBvdGhlcndpc2UgQ29tbWFuZExpbmUuTk9fUEFSTSBzaG91bGQgYmUgcHV0IGluIGNvbHVtbiAyLgotICAqIDxsaT5JZiBhIGZsYWcgaXMgYWxsb3dlZCB0byBhcHBlYXIgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIGNvbW1hbmQgbGluZSB0aGVuCi0gICogICAgIENvbW1hbmRMaW5lLkRVUFNfT0sgc2hvdWxkIGJlIHB1dCBpbnRvIGNvbHVtbiAzLCBvdGhlcndpc2UgQ29tbWFuZExpbmUuTk9fRFVQUwotICAqICAgICBzaG91bGQgYmUgcHV0IGludG8gY29sdW1uIDMuCi0gICogPGxpPklmIGEgZmxhZyBtdXN0IGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIHRoZW4gQ29tbWFuZExpbmUuUkVRVUlSRUQgc2hvdWxkCi0gICogICAgIGJlIHNwZWNpZmllZCBpbiBjb2x1bW4gNCwgb3RoZXJ3aXNlIENvbW1hbmRMaW5lLk9QVElPTkFMIHNob3VsZCBiZSBzcGVjaWZpZWQuCi0gICogPGxpPkEgaGVscCBmbGFnIG11c3QgYmUgc3BlY2lmaWVkLgotICAqIDxsaT5UaGUgc3RyaW5ncyBzcGVjaWZpZWQgaW4gdGhlIGZsYWdzIGNvbHVtbiwgdGhlIHBhcmFtZXRlciBuYW1lIGNvbHVtbiwgYW5kIHRoZQotICAqICAgICBoZWxwIGNvbHVtbiBhcmUgYWx3YXlzIHRyYW5zbGF0ZWQgdXNpbmcgdGhlIHJlc291cmNlIGJ1bmRsZSBzcGVjaWZpZWQuICBPZgotICAqICAgICBjb3Vyc2UgdGhlIHNwZWNpYWwgc3RyaW5nIHZhbHVlcyBzdWNoIGFzIFBPU0lUSU9OQUwgYW5kIE5PX1BBUk0gYXJlIG5vdAotICAqICAgICB0cmFuc2xhdGVkLgotICAqIDwvb2w+Ci0gICoKLSAgKiA8cD4gRmxhZyBtYXRjaGluZyBydWxlczoKLSAgKiA8b2w+Ci0gICogPGxpPlRoZSBwYXJzZXIgd2lsbCBhdHRlbXB0IHRvIG1hdGNoIGEgdXNlciBzcGVjaWZpZWQgZmxhZyB3aXRoIHRoZSBtaW5pbXVtIG51bWJlcgotICAqICAgICBvZiBwcm9ncmFtbWVyIHNwZWNpZmllZCBmbGFnIGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHByb2dyYW1tZXIgaGFzCi0gICogICAgIHNwZWNpZmllZCB0aGF0IHRoZSBmbGFnIGlzICJoZWxwIiB0aGUgdXNlciBjb3VsZCBzcGVjaWZ5ICItaCIsICItaGUiLCAiLWhlbCIsIG9yCi0gICogICAgICItaGVscCIuICBJZiB0aGUgcHJvZ3JhbW1lciBoYXMgYWxzbyBzcGVjaWZpZWQgYSBmbGFnIGNhbGxlZCAiaGVsbG8iLCB0aGUKLSAgKiAgICAgdXNlciB3b3VsZCBnZXQgYW4gZXJyb3IgbWVzc2FnZSBmb3Igc3BlY2lmaW5nIGVpdGhlciAiLWgiLCAiLWhlIiBvciAiLWhlbCIsIHNpbmNlCi0gICogICAgIGl0IGlzIGFtYmlndW91cyB3aGljaCBmbGFnIGlzIGJlaW5nIHJlZmVyZWQgdG8uICBCb3RoICItaGVsbCIgYW5kICItaGVsbG8iCi0gICogICAgIHdvdWxkIGJlIG9rIGZvciB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBoZWxsbyBmbGFnIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gICogPGxpPklmIGEgZmxhZyBoYXMgYSBwYXJhbWV0ZXIsIHRoZSBwYXJhbWV0ZXIgbWF5IGJlIGltbWVkaWF0ZWx5IGFkamFjZW50IHRvIHRoZSBmbGFnLgotICAqICAgICBGb3IgZXhhbXBsZSBpZiAiYWJjZCIgaXMgc3BlY2lmaWVkIGFzIGEgZmxhZyB3aXRoIGEgcGFyYW1ldGVyLCB0aGUgdXNlciBjb3VsZAotICAqICAgICBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgYXNzdW1pbmcgdGhlcmUgYXJlIG5vIG90aGVyIGFtYmlndW91cyBmbGFncy4gIi1hYmNkcGFybSIsCi0gICogICAgICItYWJjcGFybSIsICItYWJwYXJtIiwgb3IgIi1hcGFybSIgd2hlcmUgcGFybSBpcyB0aGUgcGFyYW1ldGVyIGZvciB0aGUgZmxhZy4KLSAgKiAgICAgKE9mIGNvdXJzZSB0aGUgdXNlciBjYW4gYWx3YXlzIHB1dCBhIHdoaXRlIHNwYWNlIGJldHdlZW4gdGhlIGZsYWcgYW5kIHRoZQotICAqICAgICBwYXJhbWV0ZXIuKQotICAqIDxsaT5JZiBhIGZsYWcgZG9lcyBub3QgaGF2ZSBhIHBhcmFtZXRlciBhbmQgYSBwYXJhbWV0ZXIgaXMgYWRqYWNlbnQgdG8gaXQgdGhlbiB0aGlzCi0gICogICAgIHBhcmFtZXRlciBpcyBpbnRlcnByZXRlZCBhcyBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyLiAgRm9yIGV4YW1wbGUgaWYgImFiY2IiIGlzCi0gICogICAgIHNwZWNpZmllZCBhcyBhIGZsYWcgYW5kIHRoZSB1c2VyIHNwZWNpZmllcyAiLWFiaGVsbG8iLCB0aGVuIHRoZSBmaXJzdCAiYWIiIHdpbGwgYmUKLSAgKiAgICAgaW50ZXJwcmV0ZWQgYXMgdGhlIGZsYWcgYW5kICJoZWxsbyIgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHBvc2l0aW9uYWwKLSAgKiAgICAgcGFyYW1ldGVyLgotICAqIDwvb2w+Ci0gICoKLSAgKiBAYXV0aG9yIFBldGVyIE1vb2drCi0gICogQGRhdGUgICBKdWx5IDEzLCAyMDAwCi0qKi8KLQotcHVibGljIGNsYXNzIENvbW1hbmRMaW5lCi17Ci0gIC8vIENvbnN0YW50IHN0cmluZ3MgdGhhdCB0aGUgdXNlciBzaG91bGQgdXNlIGluIHRoZWlyIGZsYWdzX2luZm8gaW5wdXQgYXJyYXkuCi0gIC8qKgotICAgICogU3BlY2lmaWVzIHRoYXQgdGhpcyBmbGFnIG9yIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUlSRUQgICA9ICJyZXF1aXJlZCI7Ci0gIC8qKgotICAgICogU3BlY2lmaWVzIHRoYXQgdGhpcyBmbGFnIG9yIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BUSU9OQUwgICA9ICJvcHRpb25hbCI7Ci0gIC8qKgotICAgICogU3BlY2lmaWVzIHRoYXQgdGhpcyBmbGFnIG1heSBiZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIGNvbW1hbmQgbGluZS4KLSAgICAqIE5vdGU6IFRoaXMgc3RyaW5nIGhhcyBubyBtZWFuaW5nIGZvciBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBEVVBTX09LICAgID0gImR1cHNfb2siOwotICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGF0IHRoaXMgZmxhZyBtYXkgbm90IGJlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgY29tbWFuZCBsaW5lLgotICAgICogTm90ZTogVGhpcyBzdHJpbmcgaGFzIG5vIG1lYW5pbmcgZm9yIHBvc2l0aW9uYWwgcGFyYW1ldGVycy4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX0RVUFMgICAgPSAibm9fZHVwcyI7Ci0gIC8qKgotICAgICogU3BlY2lmaWVzIHRoYXQgYSByb3cgaXMgYSBwb3NpdGlvbmFsIHBhcmFtZXRlciByb3cuCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQT1NJVElPTkFMID0gIiI7Ci0gIC8qKgotICAgICogU3BlY2lmaWVzIHRoYXQgYSBmbGFnIGhhcyBubyBwYXJhbWV0ZXIuICBGb3IgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHRoaXMKLSAgICAqIHN0cmluZyBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgbm8gb3B0aW9uYWwgcGFyYW1ldGVycy4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX1BBUk0gICAgPSAiIjsKLSAgCi0gIC8qKgotICAgICogQHBhcmFtIGZsYWdzX2luZm8gVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlCi0gICAgKiAgICAgICAgICAgICAgICAgICBjb21tYW5kIGxpbmUgcGFyc2VyLiAgU2VlIHRoZSBjbGFzcyBkZXNjcmlwdGlvbiBmb3IgYQotICAgICogICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiBvZiB3aGF0IHRoaXMgc3RyaW5nIGFycmF5IHNob3VsZCBsb29rIGxpa2UuCi0gICAgKiBAcGFyYW0gaGVscF9mbGFnICBUaGlzIHN0cmluZyBpbmRpY2F0ZXMgd2hpY2ggZmxhZyBpbiB0aGUgZmxhZ3NfaW5mbwotICAgICogICAgICAgICAgICAgICAgICAgYXJyYXkgaXMgdGhlIGhlbHAgZmxhZy4KLSAgICAqIEBwYXJhbSB0b29sX25hbWUgIFRoaXMgc3RyaW5nIGluZGljYXRlcyB0aGUgbmFtZSBvZiB0aGUgdG9vbCB0aGF0IHRoaXMKLSAgICAqICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbGluZSBwYXJzZXIgaXMgYmVpbmcgdXNlZCBmb3IuICBUaGlzIHN0cmluZwotICAgICogICAgICAgICAgICAgICAgICAgaXMgb25seSB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIGhlbHAgdGV4dC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kTGluZSggU3RyaW5nW11bXSAgICAgZmxhZ3NfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgaGVscF9mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICB0b29sX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlQnVuZGxlIGZsYWdNZXNzYWdlcyApCi0gICAgICAgICAgICAgICAgICAgCi0gICAgdGhyb3dzIEludGVybmFsRXJyb3JFeGMKLSAgewotICAgIHRoaXMuZmxhZ3NfaW5mbyAgID0gZmxhZ3NfaW5mbzsKLSAgICB0aGlzLmhlbHBfZmxhZyAgICA9IGhlbHBfZmxhZzsKLSAgICB0aGlzLnRvb2xfbmFtZSAgICA9IHRvb2xfbmFtZTsKLSAgICB0aGlzLmZsYWdNZXNzYWdlcyA9IGZsYWdNZXNzYWdlczsKLSAgICAKLSAgICBtZXNzYWdlcyA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSggIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tYW5kbGluZS5jb21tYW5kbGluZSIgKTsKLSAgICB2ZXJpZnlfZmxhZ3NfaW5mbygpOwotICB9Ci0KLSAgLyoqCi0gICAgKiBDYWxsIHRoaXMgbWV0aG9kIHRvIHBhcnNlIGEgY29tbWFuZCBsaW5lLgotICAgICogQHBhcmFtIGFyZ3MgVGhpcyBpcyB0aGUgc3RyaW5nIGFycmF5IGZyb20gdGhlIGNvbW1hbmQgbGluZS4KLSAgICAqIEB0aHJvd3MgRmxhZ19lcnJvciBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBjb21tYW5kIGxpbmUgaW5jb3JyZWN0bHkKLSAgICAqICAgICAgICAgICAgICAgICAgICBhIEZsYWdfZXJyb3IgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLiAgVXNlIGdldE1lc3NhZ2UKLSAgICAqICAgICAgICAgICAgICAgICAgICB0byBnZXQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdXNlciBlcnJvci4KLSAgICAqCi0gICAgKiBAdGhyb3dzIEhlbHBfc3BlY2lmaWVkIElmIHRoZSB1c2VyIHNwZWNpZmllcyB0aGUgaGVscCBmbGFnIHRoaXMgZXhjZXB0aW9uCi0gICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdGhyb3duLiAgVXNlIGdldE1lc3NhZ2UgdG8gZ2V0IGEgZnVsbHkKLSAgICAqICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkIHN5bnRheCBkZXNjcmlwdGlvbiBvZiB0aGlzIGNvbW1hbmQgbGluZS4KLSAgKiovCi0gIHB1YmxpYyB2b2lkIGNoZWNrX2ZsYWdzKCBTdHJpbmdbXSBhcmdzICkgdGhyb3dzIEZsYWdfZXJyb3IKLSAgewotICAgIGZsYWdzX3NwZWNpZmllZCA9IG5ldyBWZWN0b3JbZmxhZ3NfaW5mby5sZW5ndGhdOwotCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBib29sZWFuIHByb2Nlc3NlZF90aGVfbmV4dF9hcmcgPSBwcm9jZXNzX2FyZyggYXJncywgaW5kZXggKTsKLSAgICAgIGlmKCBwcm9jZXNzZWRfdGhlX25leHRfYXJnID09IHRydWUgKSBpbmRleCsrOwotICAgIH0KLQotICAgIC8vIElmIGhlbHAgd2FzIHNwZWNpZmllZCB3ZSB3aWxsIG5vdCBjaGVjayB0aGUgcmVndWxhciBydWxlcy4KLSAgICBpZiggIWZsYWdfc3BlY2lmaWVkKCBoZWxwX2ZsYWcgKSApCi0gICAgewotICAgICAgLy8gQ2hlY2sgZm9yIGZsYWdzIGJyZWFraW5nIHRoZSBydWxlcyBzcGVjaWZpZWQgaW4gZmxhZ3NfaW5mby4KLSAgICAgIGNoZWNrX3J1bGVzKCk7Ci0KLSAgICAgIC8vIENhbGwgc3ViY2xhc3NlZCBtZXRob2QgdG8gc2VlIGlmIG1vcmUgcHJvY2Vzc2luZyBpcyByZXF1aXJlZC4KLSAgICAgIG1vcmVfcHJvY2Vzc2luZygpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgb2YgdGhpcyBjbGFzcy4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdAotICAgICogdGhlIHZlcnkgZW5kIG9mIGNoZWNrX2ZsYWdzIG1ldGhvZC4gIEl0IGlzIGludGVuZGVkIHRoYXQgc3ViY2xhc3NlcyB3b3VsZAotICAgICogcGVyZm9ybSBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBjaGVja2luZyBoZXJlLgotICAqKi8KLSAgcHJvdGVjdGVkIHZvaWQgbW9yZV9wcm9jZXNzaW5nKCkgdGhyb3dzIEZsYWdfZXJyb3IsIEludGVybmFsRXJyb3JFeGMKLSAgewotICB9Ci0KLSAgLyoqCi0gICAgKiBPbmNlIHRoZSBjb21tYW5kIGxpbmUgaGFzIGJlZW4gcGFyc2VkIGJ5IGNhbGxpbmcgY2hlY2tfZmxhZ3MgYQotICAgICogY2FsbCBjYW4gYmUgbWFkZSB0byB0aGlzIG1ldGhvZCB0byBnZXQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoaXMgZmxhZy4KLSAgICAqIElmIHRoZSBmbGFnIHdhcyBub3Qgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgbnVsbCB3aWxsIGJlIHJldHVybmVkLgotICAgICogSWYgdGhlIGZsYWcgd2FzIHNwZWNpZmllZCwgYnV0IGhhcyBubyBwYXJhbWV0ZXJzIGEgdmFsaWQgdmVjdG9yIHdpbGwgYmUKLSAgICAqIHJldHVybmVkIGNvbnRhaW5pbmcgYSBudWxsLgotICAqKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldF9mbGFnX3Bhcm1zKCBTdHJpbmcgZmxhZyApCi0gIHsKLSAgICBpbnQgICAgIHJvdyAgICAgICAgPSAwOwotICAgIGJvb2xlYW4gZmxhZ19mb3VuZCA9IGZhbHNlOwotCi0gICAgd2hpbGUoIGZsYWdfZm91bmQgPT0gZmFsc2UgJiYgcm93IDwgZmxhZ3NfaW5mby5sZW5ndGggKQotICAgIHsKLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdLmVxdWFscyggZmxhZyApICkKLSAgICAgIHsKLSAgICAgICAgZmxhZ19mb3VuZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJvdysrOwotICAgICAgfQotICAgIH0KLQotICAgIGlmKCBmbGFnX2ZvdW5kID09IHRydWUgKSAKLSAgICB7Ci0gICAgICBWZWN0b3IgcGFybXMgPSBmbGFnc19zcGVjaWZpZWRbcm93XTsKLSAgICAgIHJldHVybiBwYXJtcyA9PSBudWxsID8gbnVsbCA6IChTdHJpbmdbXSkocGFybXMudG9BcnJheSggbmV3IFN0cmluZ1swXSApKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byBnZXQgYWxsIG9mIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCi0gICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGJvdGggdGhlIHJlcXVpcmVkIHBvc2l0aW9uYWxzIGFuZCB0aGUKLSAgICAqIG9wdGlvbmFsIHBvc2l0aW9uYWxzIGluIHRoYXQgb3JkZXIuICBJZiBubyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKLSAgICAqIHdlcmUgc3BlY2lmaWVkIG51bGwgd2lsbCBiZSByZXR1cm5lZC4KLSAgKiovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRfcG9zaXRpb25hbHMoKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmdbXSlmbGFnc19zcGVjaWZpZWRbUE9TSVRJT05BTF9ST1ddLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKTsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoaXMgZmxhZyB3YXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyCi0gICAgKiBvdGhlcndpc2UgZmFsc2UgaXMgcmV0dXJuZWQuCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBmbGFnX3NwZWNpZmllZCggU3RyaW5nIGZsYWcgKQotICB7Ci0gICAgcmV0dXJuIGdldF9mbGFnX3Bhcm1zKCBmbGFnICkgIT0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBmdWxseSBmb3JtYXRlZCBoZWxwIHRleHQgc3ludGF4IGZvciB0aGlzCi0gICAgKiBjb21tYW5kIGxpbmUuCi0gICoqLwotICBwdWJsaWMgU3RyaW5nIGdldF9oZWxwX3RleHQoKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGhlbHBfdGV4dCAgPSBuZXcgU3RyaW5nQnVmZmVyKDQwMCk7Ci0gICAgaW50ICAgICAgICAgIGhlbHBfd2lkdGggPSBIRUxQX0xJTkVfTEVOIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSAgICAgICAgICAgICAgLy8gYmxhbmtzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gICAgICAgICAgICAgIC8vIGRhc2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9mbGFnX3NpemUgLSAgLy8gZmxhZyBmaWVsZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtICAgICAgICAgICAgICAvLyBibGFuawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X25hbWVfc2l6ZSAtICAvLyBuYW1lIGZpZWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOyAgICAgICAgICAgICAgIC8vIGJsYW5rCi0KLSAgICBoZWxwX3RleHQuYXBwZW5kKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfSU5GT19TWU5UQVggKSArCi0gICAgICAgICAgICAgICAgICAgICAgIjogIiArIHRvb2xfbmFtZSArICIgIiApOwotCi0gICAgLy8gRGlzcGxheSB0aGUgcmVxdWlyZWQgcG9zaXRpb25hbHMgaWYgYW55LgotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCByZXF1aXJlZF9wb3NpdGlvbmFsczsgaW5kZXgrKyApCi0gICAgewotICAgICAgaGVscF90ZXh0LmFwcGVuZCggZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tpbmRleF1bTkFNRV9DT0xdICkgKwotICAgICAgICAgICAgICAgICAgICAgICAgIiAiICk7Ci0gICAgfQotCi0gICAgaGVscF90ZXh0LmFwcGVuZCggIlsiICsgbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0ZMQUdTICkgKwotICAgICAgICAgICAgICAgICAgICAgICJdICIgKTsKLQotICAgIGlmKCBvcHRpb25hbF9wb3NpdGlvbmFsc19hbGxvd2VkID09IHRydWUgKQotICAgIHsKLSAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9bb3B0aW9uYWxfbGlzdF9pbmRleF1bTkFNRV9DT0xdICkgKTsKLSAgICB9Ci0KLSAgICBoZWxwX3RleHQuYXBwZW5kKCAiXG4gICIgKyBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfSU5GT19XSEVSRSApICsgIlxuIiApOwotCi0gICAgLy8gQ3JlYXRlIG9uZSBsaW5lIG9mIGRlc2NyaXB0aW9uIGZvciBlYWNoIHBhcmFtZXRlcgotICAgIGZvciggaW50IHJvdyA9IDA7IHJvdyA8IGZsYWdzX2luZm8ubGVuZ3RoOyByb3crKyApCi0gICAgewotICAgICAgU3RyaW5nIGNvbHVtbklkICAgPSBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdOwotICAgICAgU3RyaW5nIGNvbHVtbk5hbWUgPSBjb2x1bW5JZCA9PSBOT19QQVJNID8gIiIgOiBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBjb2x1bW5JZCApOwotCi0gICAgICBTdHJpbmcgZmxhZ0lkICAgICA9IGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF07Ci0gICAgICBTdHJpbmcgZmxhZ05hbWUgICA9IGZsYWdJZCA9PSBQT1NJVElPTkFMID8gUE9TSVRJT05BTCA6IGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoZmxhZ0lkKTsKLQotICAgICAgaW50IGZsYWdfcGFkZGluZyA9IG1heF9mbGFnX3NpemUgLSBmbGFnTmFtZS5sZW5ndGgoKTsKLSAgICAgIGludCBuYW1lX3BhZGRpbmcgPSBtYXhfbmFtZV9zaXplIC0gY29sdW1uTmFtZS5sZW5ndGgoKTsKLQotICAgICAgLy8gU2tpcCB0aGlzIHJvdyBpZiB0aGlzIGlzIGEgbWFya2VyIGZvciBubyBvcHRpb25hbCBwb3NpdGlvbmFscy4KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdID09IFBPU0lUSU9OQUwgJiYKLSAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdID09IE5PX1BBUk0gKSBjb250aW51ZTsKLQotICAgICAgaWYoIGZsYWdOYW1lID09IFBPU0lUSU9OQUwgKQotICAgICAgewotICAgICAgICBoZWxwX3RleHQuYXBwZW5kKCBnZXRCbGFua3MoMyApICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGhlbHBfdGV4dC5hcHBlbmQoICIgIC0iICsgZmxhZ05hbWUgKTsKLSAgICAgIH0KLQotICAgICAgaGVscF90ZXh0LmFwcGVuZCggZ2V0QmxhbmtzKCBmbGFnX3BhZGRpbmcgKyAxICkgKTsKLSAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIGNvbHVtbk5hbWUgKTsKLSAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIGdldEJsYW5rcyggbmFtZV9wYWRkaW5nICsgMSApICk7Ci0KLSAgICAgIFN0cmluZyAgIGNvbHVtbkhlbHAgPSBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW3Jvd11bSEVMUF9DT0xdICk7Ci0gICAgICBTdHJpbmdbXSBzcGxpdF9oZWxwX3RleHQKLSAgICAgICAgPSBTdHJpbmdVdGlscy5zcGxpdHRlciggY29sdW1uSGVscCwgaGVscF93aWR0aCApOwotCi0gICAgICBpZiggc3BsaXRfaGVscF90ZXh0Lmxlbmd0aCA+IDAgKQotICAgICAgICBoZWxwX3RleHQuYXBwZW5kKCBzcGxpdF9oZWxwX3RleHRbMF0gKyAiXG4iICk7Ci0gICAgICBlbHNlCi0gICAgICAgIGhlbHBfdGV4dC5hcHBlbmQoICJcbiIgKTsKLQotICAgICAgZm9yKCBpbnQgaW5kZXggPSAxOyBpbmRleCA8IHNwbGl0X2hlbHBfdGV4dC5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBoZWxwX3RleHQuYXBwZW5kKCBnZXRCbGFua3MoIEhFTFBfTElORV9MRU4gLSBoZWxwX3dpZHRoICkgKTsKLSAgICAgICAgaGVscF90ZXh0LmFwcGVuZCggc3BsaXRfaGVscF90ZXh0W2luZGV4XSArICJcbiIgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaGVscF90ZXh0LmFwcGVuZCggIlxuIiApOwotICAgIH0KLQotICAgIHJldHVybiAiIiArIGhlbHBfdGV4dDsKLSAgfQotICAKLSAgLyoqCi0gICAqICBSZXR1cm4gYSBzdHJpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBibGFua3MuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRCbGFua3MoIGludCBjb3VudCApCi0gIHsKLSAgCWNoYXJbXSBibGFua3MgPSBuZXcgY2hhcltjb3VudF07Ci0gIAlBcnJheXMuZmlsbCggYmxhbmtzLCAwLCBjb3VudCwgJyAnICk7Ci0gIAkKLSAgCXJldHVybiBuZXcgU3RyaW5nKCBibGFua3MgKTsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBjbGFzcyBpcyB0aGUgYmFzZSBmb3IgYWxsIGNvbW1hbmQgbGluZSBleGNlcHRpb24gY2xhc3Nlcy4KLSAgKiovCi0gIHN0YXRpYyBwdWJsaWMgY2xhc3MgRXJyb3JFeGMgZXh0ZW5kcyBFeGNlcHRpb24KLSAgewotICAJLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzMjU3NTY3MzE3MjU5NzkzNzIwTDsKLQotCXB1YmxpYyBFcnJvckV4YyggU3RyaW5nIG1lc3NhZ2UsIFN0cmluZ1tdIGFyZ3MgKQotICAJewotICAJICBzdXBlciggTWVzc2FnZUZvcm1hdC5mb3JtYXQoIG1lc3NhZ2UsIGFyZ3MgKSApOwotICAJfQotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIGNsYXNzIHdpbGwgYmUgdGhyb3duIHdoZW4gYW4gaW50ZXJuYWwgZXJyb3IgaXMgZGV0ZWN0ZWQuCi0gICAgKiBUaGlzIHVzdWFsbHkgaGFwcGVucyBpZiB0aGUgZmxhZyBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiB3YXMKLSAgICAqIHNwZWNpZmllZCBpbmNvcnJlY3RseS4KLSAgKiovCi0gIHN0YXRpYyBwdWJsaWMgY2xhc3MgSW50ZXJuYWxFcnJvckV4YyBleHRlbmRzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgotICB7ICAJCi0gIAkvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMyNTg0MTA2MjExMzY2MTQ0NTBMOwotCi0JcHVibGljIEludGVybmFsRXJyb3JFeGMoIFN0cmluZyBtZXNzYWdlLCBTdHJpbmdbXSBhcmdzICkKLSAgCXsKLSAgCSAgc3VwZXIoIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KCBtZXNzYWdlLCBhcmdzICkgKTsKLSAgCX0KLSAgCQotICAJcHVibGljIEludGVybmFsRXJyb3JFeGMoIFN0cmluZyBtZXNzYWdlICkKLSAgCXsKLSAgCSAgdGhpcyggbWVzc2FnZSwgKFN0cmluZ1tdKW51bGwgKTsKLSAgCX0KLSAgCQotICAJcHVibGljIEludGVybmFsRXJyb3JFeGMoIFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgYXJnICkKLSAgCXsKLSAgCSAgdGhpcyggbWVzc2FnZSwgbmV3IFN0cmluZ1tdeyBhcmcgfSApOwotICAJfQotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIGNsYXNzIHdpbGwgYmUgdGhyb3duIGlmIGEgdXNlciBlcnJvciBvY2N1cnMgd2hpbGUgcGFyc2luZyB0aGUgY29tbWFuZCBsaW5lLgotICAqKi8KLSAgc3RhdGljIHB1YmxpYyBjbGFzcyBGbGFnX2Vycm9yIGV4dGVuZHMgRXJyb3JFeGMKLSAgewotICAgIC8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzgzMjYyMTc3Njg3NzY2MzUzN0w7Ci0KLQlwdWJsaWMgRmxhZ19lcnJvciggU3RyaW5nIG1lc3NhZ2UsIFN0cmluZ1tdIGFyZ3MgKQotICAgIHsKLSAgICAgIHN1cGVyKCBtZXNzYWdlLCBhcmdzICk7Ci0gICAgfQotCi0gICAgcHVibGljIEZsYWdfZXJyb3IoIFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgYXJnICkKLSAgICB7Ci0gICAgICBzdXBlciggbWVzc2FnZSwgbmV3IFN0cmluZ1tdeyBhcmcgfSApOwotICAgIH0KLQotICAgIHB1YmxpYyBGbGFnX2Vycm9yKCBTdHJpbmcgbWVzc2FnZSApCi0gICAgewotICAgICAgc3VwZXIoIG1lc3NhZ2UsIG51bGwgKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICAqIFRyaWVzIHRvIHByb2Nlc3MgYSBzaW5nbGUgZmxhZyBvbiB0aGUgY29tbWFuZCBsaW5lLgotICAgICogQHBhcmFtICBhcmdzICAgICAgQWxsIHRoZSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycy4KLSAgICAqIEBwYXJhbSAgYXJnX2luZGV4IFRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBhcmd1bWVudCB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZC4KLSAgICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSBhcmd1bWVudCB3ZSBhcmUgcHJvY2Vzc2luZyBpcyBhIGZsYWcgdGhhdCBoYXMgYQotICAgICogICAgICAgICBwYXJhbWV0ZXIgYW5kIHRoZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGluIHRoZSBuZXh0IGFyZ3VtZW50LgotICAqKi8KLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NfYXJnKCBTdHJpbmdbXSBhcmdzLCBpbnQgYXJnX2luZGV4ICkgdGhyb3dzIEZsYWdfZXJyb3IKLSAgewotICAgIGJvb2xlYW4gcHJvY2Vzc2VkX25leHRfYXJnID0gZmFsc2U7Ci0KLSAgICBpZiggYXJnc1thcmdfaW5kZXhdLmNoYXJBdCgwKSA9PSAnLScgKQotICAgIHsKLSAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgZmxhZy4KLSAgICAgIGludCBmbGFnX2luZGV4ID0gMTsKLSAgICAgIGludCBpbmZvX2luZGV4ID0gZ2V0X2luZm9faW5kZXgoIGFyZ3NbYXJnX2luZGV4XSwgZmxhZ19pbmRleCApOwotICAgICAgaW50IG1heF9pbmRleCAgPSBnZXRfbWF4X2luZGV4KCBhcmdzW2FyZ19pbmRleF0sIGZsYWdfaW5kZXgsIGluZm9faW5kZXggKTsKLQotICAgICAgaWYoIGZsYWdzX2luZm9baW5mb19pbmRleF1bTkFNRV9DT0xdICE9IE5PX1BBUk0gKQotICAgICAgewotICAgICAgICAvLyBUaGlzIGZsYWcgdGFrZXMgYSBwYXJhbWV0ZXIgc28gY2hlY2sgaWYgaXQgaXMgc3R1Y2sgdG8gdGhpcwotICAgICAgICAvLyBhcmcuCi0gICAgICAgIGlmKCBtYXhfaW5kZXggPCBhcmdzW2FyZ19pbmRleF0ubGVuZ3RoKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgYWRkX2ZsYWdfcGFybSggaW5mb19pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2FyZ19pbmRleF0uc3Vic3RyaW5nKCBtYXhfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdfaW5kZXhdLmxlbmd0aCgpICkgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGlzIGZsYWcgaGFzIGEgcGFyYW1ldGVyIGFuZCBpdCB3YXNuJ3Qgc3R1Y2sgdG8gdGhlIGZsYWcsCi0gICAgICAgICAgLy8gc28gd2Ugd2lsbCB0cnkgdG8gZ2V0IGl0IGZyb20gdGhlIG5leHQgYXJnLgotICAgICAgICAgIGlmKCBhcmdfaW5kZXgrMSA8IGFyZ3MubGVuZ3RoICYmCi0gICAgICAgICAgICAgIGFyZ3NbYXJnX2luZGV4KzFdLmNoYXJBdCgwKSAhPSAnLScgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdlIGZvdW5kIGFuIHBhcmFtZXRlciBpbiB0aGUgbmV4dCBzdHJpbmcgc28gd2Ugd2lsbCB1c2UgdGhpcwotICAgICAgICAgICAgLy8gb25lIGFzIGEgcGFyYW1ldGVyIGZvciB0aGlzIGZsYWcuICBOb3RlOiBpZiB3YXMgbm8gcGFyYW1ldGVyCi0gICAgICAgICAgICAvLyBhZnRlciB0aGUgZmxhZyBhdCBhbGwsIHRoZSBlcnJvciB3aWxsIGJlIGNhdWdodCBpbiB0aGUKLSAgICAgICAgICAgIC8vIGNoZWNrX3J1bGVzIG1ldGhvZC4KLSAgICAgICAgICAgIGFkZF9mbGFnX3Bhcm0oIGluZm9faW5kZXgsIGFyZ3NbYXJnX2luZGV4KzFdICk7Ci0gICAgICAgICAgICBwcm9jZXNzZWRfbmV4dF9hcmcgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gRXJyb3IgbWlzc2luZyBwYXJhbWF0ZXIuIFRoaXMgZXJyb3IgaXMgY2F1Z2h0IGJ5IGNoZWNrX3J1bGVzLgotICAgICAgICAgICAgYWRkX2ZsYWdfcGFybSggaW5mb19pbmRleCwgbnVsbCApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaGUgZmxhZyBkb2VzIG5vdCBoYXZlIGEgcGFyYW1ldGVyIHNvIHdlIHdpbGwgYWRkIGEgbnVsbC4KLSAgICAgICAgYWRkX2ZsYWdfcGFybSggaW5mb19pbmRleCwgbnVsbCApOwotCi0gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGlzIHN0dWNrIHRvIHRoaXMgZmxhZy4KLSAgICAgICAgaWYoIG1heF9pbmRleCA8IGFyZ3NbYXJnX2luZGV4XS5sZW5ndGgoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBhZGRfcG9zaXRpb25hbCggYXJnc1thcmdfaW5kZXhdLnN1YnN0cmluZyggbWF4X2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2FyZ19pbmRleF0ubGVuZ3RoKCkgKSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUaGlzIGlzIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIuCi0gICAgICBhZGRfcG9zaXRpb25hbCggYXJnc1thcmdfaW5kZXhdICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHByb2Nlc3NlZF9uZXh0X2FyZzsKLSAgfQotCi0gIC8qKgotICAgICogRmluZHMgdGhlIHJvdyBmb3IgdGhlIGZsYWcgdGhhdCB1bmlxdWVseSBtYXRjaGVkIHRoaXMgZmxhZyBzdHIuCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZsYWdzX2luZm8gaW5kZXggb2YgdGhlIG1hdGNoaW5nIGZsYWcuCi0gICoqLwotICBwcml2YXRlIGludCBnZXRfaW5mb19pbmRleCggU3RyaW5nIGZsYWdfc3RyLCBpbnQgc3RhcnRfaW5kZXggKQotICAgIHRocm93cyBGbGFnX2Vycm9yCi0gIHsKLSAgICAvL2ludCBpbmZvX3N0YXJ0ICA9IDE7Ci0gICAgLy9pbnQgaW5mb19lbmQgICAgPSBmbGFnc19pbmZvLmxlbmd0aDsKLSAgICBpbnQgaW5mb19pbmRleDsKLSAgICBpbnQgZm91bmRfY291bnQgPSAwOwotICAgIGludCBpbmZvX2NvbF9pbmRleCA9IDA7Ci0gICAgaW50IGxhc3RfaW5mb19pbmRleCA9IDA7Ci0KLSAgICBCaXRTZXQgZmxhZ3NfcmVqZWN0ZWQgPSBuZXcgQml0U2V0KCk7Ci0KLSAgICAvLyBMb29wIG92ZXIgZWFjaCBjaGFyIGluIGZsYWdfc3RyLiAgTm90ZTogd2Ugd2lsbCBwcm9iYWJseSBiYWlsIGVhcmx5LgotICAgIGZvciggaW50IGZsYWdfY29sX2luZGV4ID0gc3RhcnRfaW5kZXg7IGZsYWdfY29sX2luZGV4IDwgZmxhZ19zdHIubGVuZ3RoKCk7IGZsYWdfY29sX2luZGV4KysgKQotICAgIHsKLSAgICAgIC8vIExvb3Agb3ZlciBlYWNoIGZsYWcgaW4gZmxhZ19pbmZvCi0gICAgICBmb3IoIGluZm9faW5kZXggPSAwOyBpbmZvX2luZGV4IDwgZmxhZ3NfaW5mby5sZW5ndGg7IGluZm9faW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBmbGFnSWQgICA9IGZsYWdzX2luZm9baW5mb19pbmRleF1bRkxBR19DT0xdOwotICAgICAgICBTdHJpbmcgZmxhZ05hbWUgPSBmbGFnSWQgPT0gUE9TSVRJT05BTCA/IFBPU0lUSU9OQUwgOiBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnSWQgKTsKLQotICAgICAgICBpZiggZmxhZ3NfcmVqZWN0ZWQuZ2V0KCBpbmZvX2luZGV4ICkgPT0gZmFsc2UgJiYKLSAgICAgICAgICAgIGluZm9fY29sX2luZGV4IDwgZmxhZ05hbWUubGVuZ3RoKCkgJiYKLSAgICAgICAgICAgICAgQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGZsYWdfc3RyLmNoYXJBdChmbGFnX2NvbF9pbmRleCkpID09Ci0gICAgICAgICAgICAgIGZsYWdOYW1lLmNoYXJBdChpbmZvX2NvbF9pbmRleCkgKQotICAgICAgICB7Ci0gICAgICAgICAgZm91bmRfY291bnQrKzsKLSAgICAgICAgICBsYXN0X2luZm9faW5kZXggPSBpbmZvX2luZGV4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGZsYWdzX3JlamVjdGVkLnNldCggaW5mb19pbmRleCApOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmKCBmb3VuZF9jb3VudCA9PSAxICkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhIG1hdGNoLgotICAgICAgICByZXR1cm4gbGFzdF9pbmZvX2luZGV4OwotICAgICAgfQotICAgICAgZWxzZSBpZiggZm91bmRfY291bnQgPT0gMCApCi0gICAgICB7Ci0gICAgICAgIC8vIEZsYWcgbm90IGZvdW5kIGF0IGFsbC4KLSAgICAgICAgdGhyb3cgbmV3IEZsYWdfZXJyb3IoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9GTEFHX05PVF9GT1VORCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19zdHIuc3Vic3RyaW5nKCBzdGFydF9pbmRleCApICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1vcmUgdGhhbiBvbmUgZmxhZyB3YXMgZm91bmQgd2l0aCB0aGlzIGNoYXIgc28gd2Ugd2lsbCBnbyB0byB0aGUKLSAgICAgICAgLy8gbmV4dCBjaGFyIHRvIHVuaXF1ZWx5IG1hdGNoIGl0LgotICAgICAgICBpbmZvX2NvbF9pbmRleCsrOwotICAgICAgICAvL2luZm9fc3RhcnQgPSBsYXN0X2luZm9faW5kZXggLSBmb3VuZF9jb3VudCArIDE7Ci0gICAgICAgIC8vaW5mb19lbmQgICA9IGxhc3RfaW5mb19pbmRleCArIDE7Ci0gICAgICAgIGZvdW5kX2NvdW50ID0gMDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgb25seSB3YXkgdG8gZ2V0IHRvIHRoaXMgY29kZSBpcyBpZiB0aGUgbG9vcCBleGl0ZWQgd2l0aAotICAgIC8vIHRoZSBmb3VuZF9jb3VudCBncmVhdGVyIHRoYW4gMS4gIFRoZXJlZm9yZSwgdGhlIGZsYWcgc3BlY2lmaWVkIGlzCi0gICAgLy8gYW1iaWd1b3VzLgotICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfQU1CSUdVT1VTX0ZMQUcgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19zdHIuc3Vic3RyaW5nKCBzdGFydF9pbmRleCkgKTsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgdHJpZXMgdG8gbWF0Y2ggYXMgbWFueSBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlIG9mIHRoZSB1c2VyCi0gICAgKiBzcGVjaWZpZWQgZmxhZyB3aXRoIHRoZSBtYXRjaGVkIGZsYWcgc3RyaW5nLgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBtYXRjaGluZyBmbGFnIGNoYXJhcmFjdGVyLgotICAqKi8KLSAgcHJpdmF0ZSBpbnQgZ2V0X21heF9pbmRleCggU3RyaW5nIGZsYWdfc3RyLCBpbnQgZmxhZ19zdGFydCwgaW50IGluZm9faW5kZXggKQotICB7Ci0gICAgaW50IGZsYWdfY29sX2luZGV4ID0gZmxhZ19zdGFydDsKLSAgICBpbnQgaW5mb19jb2xfaW5kZXggPSAwOwotCi0gICAgU3RyaW5nIGluZm9fc3RyID0gZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tpbmZvX2luZGV4XVtGTEFHX0NPTF0gKTsKLQotICAgIHdoaWxlKCBmbGFnX2NvbF9pbmRleCA8IGZsYWdfc3RyLmxlbmd0aCgpICYmCi0gICAgICAgICAgIGluZm9fY29sX2luZGV4IDwgaW5mb19zdHIubGVuZ3RoKCkgKQotICAgIHsKLSAgICAgIGlmKCBDaGFyYWN0ZXIudG9Mb3dlckNhc2UoIGZsYWdfc3RyLmNoYXJBdChmbGFnX2NvbF9pbmRleCkgKSAhPQotICAgICAgICAgIGluZm9fc3RyLmNoYXJBdChpbmZvX2NvbF9pbmRleCkgKQotICAgICAgICBicmVhazsKLQotICAgICAgZmxhZ19jb2xfaW5kZXgrKzsKLSAgICAgIGluZm9fY29sX2luZGV4Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZsYWdfY29sX2luZGV4OwotICB9Ci0KLSAgLyoqCi0gICAgKiBBZGRzIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIgdG8gZmxhZ3Nfc3BlY2lmaWVkLgotICAqKi8KLSAgcHJpdmF0ZSB2b2lkIGFkZF9wb3NpdGlvbmFsKCBTdHJpbmcgcG9zaXRpb25hbF9wYXJtICkKLSAgewotICAgIGlmKCBmbGFnc19zcGVjaWZpZWRbUE9TSVRJT05BTF9ST1ddID09IG51bGwgKQotICAgICAgZmxhZ3Nfc3BlY2lmaWVkW1BPU0lUSU9OQUxfUk9XXSA9IG5ldyBWZWN0b3IoMyk7Ci0KLSAgICBmbGFnc19zcGVjaWZpZWRbUE9TSVRJT05BTF9ST1ddLmFkZCggcG9zaXRpb25hbF9wYXJtICk7Ci0gIH0KLQotICAvKioKLSAgICAqIEFkZHMgYSBmbGFnIGFuZCBpdHMgcGFyYW1ldGVyIHRvIGZsYWdzX3NwZWNpZmllZC4gIElmIG9ubHkgdGhlCi0gICAgKiBmbGFnIHdhcyBzcGVjaWZpZWQsIHRoZW4gYSBudWxsIHNob3VsZCBiZSBwYXNzZWQgdG8gZmxhZ19wYXJtLgotICAqKi8KLSAgcHJpdmF0ZSB2b2lkIGFkZF9mbGFnX3Bhcm0oIGludCBmbGFnX2luZGV4LCBTdHJpbmcgZmxhZ19wYXJtICkKLSAgICB0aHJvd3MgRmxhZ19lcnJvcgotICB7Ci0gICAgaWYoIGZsYWdzX2luZm9bZmxhZ19pbmRleF1bRFVQX0NPTF0gPT0gTk9fRFVQUyAmJgotICAgICAgICBmbGFnc19zcGVjaWZpZWRbZmxhZ19pbmRleF0gIT0gbnVsbCApCi0gICAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0RVUExJQ0FURV9GTEFHU19OT1RfQUxMT1dFRCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW2ZsYWdfaW5kZXhdW0ZMQUdfQ09MXSApICk7Ci0KLSAgICBpZiggZmxhZ3Nfc3BlY2lmaWVkW2ZsYWdfaW5kZXhdID09IG51bGwgKQotICAgICAgZmxhZ3Nfc3BlY2lmaWVkW2ZsYWdfaW5kZXhdID0gbmV3IFZlY3RvcigzKTsKLQotICAgIGZsYWdzX3NwZWNpZmllZFtmbGFnX2luZGV4XS5hZGQoIGZsYWdfcGFybSApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBDaGVja3MgdGhhdCB0aGUgdXNlciBoYXNuJ3QgYnJva2VuIGFueSBjb21tYW5kIGxpbmUgcnVsZXMuCi0gICoqLwotICBwcml2YXRlIHZvaWQgY2hlY2tfcnVsZXMoKSB0aHJvd3MgRmxhZ19lcnJvcgotICB7Ci0gICAgLy8gQ2hlY2sgdGhhdCBhbGwgb2YgdGhlIHJlcXVpcmVkIHBvc2l0aW9uYWxzIHdlcmUgc3BlY2lmaWVkLgotICAgIGludCBwb3NpdGlvbmFsX2NvdW50ID0gMDsKLQotICAgIGlmKCBmbGFnc19zcGVjaWZpZWRbUE9TSVRJT05BTF9ST1ddICE9IG51bGwgKQotICAgIHsKLSAgICAgIHBvc2l0aW9uYWxfY291bnQgPSBmbGFnc19zcGVjaWZpZWRbUE9TSVRJT05BTF9ST1ddLnNpemUoKTsKLSAgICB9Ci0KLSAgICBpZiggcmVxdWlyZWRfcG9zaXRpb25hbHMgPiBwb3NpdGlvbmFsX2NvdW50ICkKLSAgICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfTUlTU0lOR19QT1NJVElPTkFMICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9bcmVxdWlyZWRfcG9zaXRpb25hbHMtMV1bTkFNRV9DT0xdICkgKTsKLQotICAgIGVsc2UgaWYoIHJlcXVpcmVkX3Bvc2l0aW9uYWxzIDwgcG9zaXRpb25hbF9jb3VudCAmJgotICAgICAgICAgICAgIG9wdGlvbmFsX3Bvc2l0aW9uYWxzX2FsbG93ZWQgPT0gZmFsc2UgKQotICAgICAgdGhyb3cgbmV3IEZsYWdfZXJyb3IoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9UT09fTUFOWV9QT1NJVElPTkFMUyApICk7Ci0KLSAgICBmb3IoIGludCByb3cgPSAwOyByb3cgPCBmbGFnc19pbmZvLmxlbmd0aDsgcm93KysgKQotICAgIHsKLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdID09IFBPU0lUSU9OQUwgKSBjb250aW51ZTsKLQotICAgICAgaWYoIGZsYWdzX3NwZWNpZmllZFtyb3ddID09IG51bGwgJiYKLSAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bUkVRVUlSRURfQ09MXSA9PSBSRVFVSVJFRCApCi0gICAgICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfTUlTU0lOR19SRVFVSVJFRF9GTEFHICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSApICk7Ci0KLSAgICAgIGludCBwYXJtX2NvdW50ID0gMDsKLQotICAgICAgaWYoIGZsYWdzX3NwZWNpZmllZFtyb3ddICE9IG51bGwgKSBwYXJtX2NvdW50ID0gZmxhZ3Nfc3BlY2lmaWVkW3Jvd10uc2l6ZSgpOwotCi0gICAgICAvLyBDaGVjayBmb3IgdG9vIG1hbnkgZmxhZyBwYXJhbWV0ZXJzLgotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtEVVBfQ09MXSA9PSBOT19EVVBTICYmIHBhcm1fY291bnQgPiAxICkKLSAgICAgICAgdGhyb3cgbmV3IEZsYWdfZXJyb3IoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9EVVBMSUNBVEVfRkxBR1NfTk9UX0FMTE9XRUQgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdICkgKTsKLQotICAgICAgLy8gQ2hlY2sgZm9yIG1pc3NpbmcgZmxhZyBwYXJhbWV0ZXIuCi0gICAgICBpZiggcGFybV9jb3VudCA+IDAgJiYgZmxhZ3NfaW5mb1tyb3ddW05BTUVfQ09MXSAhPSBOT19QQVJNICkKLSAgICAgIHsKLSAgICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGZsYWdzX3NwZWNpZmllZFtyb3ddLnNpemUoKTsgaW5kZXgrKyApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggZmxhZ3Nfc3BlY2lmaWVkW3Jvd10uZWxlbWVudEF0KGluZGV4KSA9PSBudWxsICkKLSAgICAgICAgICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfTUlTU0lOR19GTEFHX1BBUkFNRVRFUiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9bcm93XVtOQU1FX0NPTF0gKSB9ICk7Ci0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgdmVyaWZpZXMgdGhhdCBhIHByb3BlciBmbGFnc19pbmZvIHN0cmluZyBhcnJheSB3YXMgcGFzc2VkCi0gICAgKiB0byB1cyBieSB0aGUgcHJvZ3JhbW1lci4KLSAgKiovCi0gIHByaXZhdGUgdm9pZCB2ZXJpZnlfZmxhZ3NfaW5mbygpIHRocm93cyBJbnRlcm5hbEVycm9yRXhjCi0gIHsKLSAgICBib29sZWFuIGRvbmVfcG9zaXRpb25hbHMgPSBmYWxzZTsKLSAgICBib29sZWFuIGhlbHBfc3BlY2lmaWVkICAgPSBmYWxzZTsKLQotICAgIHJlcXVpcmVkX3Bvc2l0aW9uYWxzID0gMDsKLSAgICBvcHRpb25hbF9wb3NpdGlvbmFsc19hbGxvd2VkID0gZmFsc2U7Ci0gICAgb3B0aW9uYWxfbGlzdF9pbmRleCA9IC0xOwotICAgIG1heF9mbGFnX3NpemUgPSAwOwotICAgIG1heF9uYW1lX3NpemUgPSAwOwotCi0gICAgaWYoIGZsYWdzX2luZm8gPT0gbnVsbCB8fCBmbGFnc19pbmZvLmxlbmd0aCA9PSAwICkKLSAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfTk9fRkxBR1NfREFUQV9TUEVDSUZJRUQgICkgKTsKLQotICAgIGlmKCBmbGFnc19pbmZvW1BPU0lUSU9OQUxfUk9XXSAhPSBudWxsICYmCi0gICAgICAgIGZsYWdzX2luZm9bUE9TSVRJT05BTF9ST1ddLmxlbmd0aCA+IDAgJiYKLSAgICAgICAgZmxhZ3NfaW5mb1tQT1NJVElPTkFMX1JPV11bRkxBR19DT0xdICE9IFBPU0lUSU9OQUwgKQotICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9GSVJTVF9GTEFHX05PVF9QT1NJVElPTkFMICkgKTsKLQotICAgIGZvciggaW50IHJvdyA9IDA7IHJvdyA8IGZsYWdzX2luZm8ubGVuZ3RoOyByb3crKyApCi0gICAgewotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XSA9PSBudWxsICkKLSAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9OVUxMX0ZMQUdfUk9XICkgKTsKLQotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XS5sZW5ndGggIT0gNSApCi0gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfSU5DT1JSRUNUX1JPV19TSVpFICkgKTsKLQotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gPT0gbnVsbCB8fAotICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtOQU1FX0NPTF0gPT0gbnVsbCB8fAotICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtIRUxQX0NPTF0gPT0gbnVsbCApCi0gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfTlVMTF9JTl9ST1cgKSApOwotCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXS5lcXVhbHMoIGhlbHBfZmxhZyApICkgaGVscF9zcGVjaWZpZWQgPSB0cnVlOwotCi0gICAgICBTdHJpbmcgZmxhZ0lkICAgPSBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdOwotICAgICAgU3RyaW5nIG5hbWVJZCAgID0gZmxhZ3NfaW5mb1tyb3ddW05BTUVfQ09MXTsKLQotICAgICAgU3RyaW5nIGZsYWdfY29sID0gZmxhZ0lkID09IFBPU0lUSU9OQUwgPyBQT1NJVElPTkFMIDogZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ0lkICk7Ci0gICAgICBTdHJpbmcgbmFtZV9jb2wgPSBuYW1lSWQgPT0gTk9fUEFSTSA/IE5PX1BBUk0gOiBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBuYW1lSWQgKTsKLQotICAgICAgaWYoIGZsYWdfY29sLmxlbmd0aCgpID4gbWF4X2ZsYWdfc2l6ZSApCi0gICAgICAgIG1heF9mbGFnX3NpemUgPSBmbGFnX2NvbC5sZW5ndGgoKTsKLQotICAgICAgaWYoIG5hbWVfY29sICE9IE5PX1BBUk0gJiYgbmFtZV9jb2wubGVuZ3RoKCkgPiBtYXhfbmFtZV9zaXplICkKLSAgICAgICAgbWF4X25hbWVfc2l6ZSA9IG5hbWVfY29sLmxlbmd0aCgpOwotCi0gICAgICAvLyBFbnN1cmUgdGhhdCBmbGFncyBhcmUgYWxsIGluIGxvd2VyY2FzZS4KLSAgICAgIGlmKCAhZmxhZ19jb2wuZXF1YWxzKCBmbGFnX2NvbC50b0xvd2VyQ2FzZSgpICkgKQotICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0ZMQUdfTk9UX0xPV0VSQ0FTRSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19jb2wgKTsKLQotICAgICAgLy8gRW5zdXJlIHRoYXQgb25seSB0aGUgcHJlZGVmaW5lZCBkdXAgc3RyaW5ncyBhcmUgdXNlZC4KLSAgICAgIC8vIE5vdGU6IGl0J3Mgb2sgdG8gdXNlICE9IHdoZW4gY29tcGFyaW5nIGNvbnN0YW50IHN0cmluZ3MgbGl0ZXJhbHMuCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0RVUF9DT0xdID09IG51bGwgfHwKLSAgICAgICAgICAoIGZsYWdzX2luZm9bcm93XVtEVVBfQ09MXSAhPSBOT19EVVBTICYmCi0gICAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bRFVQX0NPTF0gIT0gRFVQU19PSyApICkKLSAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfRFVQX1NUUklORyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW0RVUF9DT0xdICk7Ci0KLSAgICAgIC8vIEVuc3VyZSB0aGF0IG9ubHkgdGhlIHByZWRlZmluZWQgcmVxdWlyZWQgc3RyaW5ncyBhcmUgdXNlZC4KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bUkVRVUlSRURfQ09MXSA9PSBudWxsIHx8Ci0gICAgICAgICAgKCBmbGFnc19pbmZvW3Jvd11bUkVRVUlSRURfQ09MXSAhPSBSRVFVSVJFRCAmJgotICAgICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW1JFUVVJUkVEX0NPTF0gIT0gT1BUSU9OQUwgKSApCi0gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfSU5DT1JSRUNUX1JFUVVJUkVEX1NUUklORyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW1JFUVVJUkVEX0NPTF0gKTsKLQotICAgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiByZXF1aXJlZCBwb3NpdGlvbmFscy4KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdID09IFBPU0lUSU9OQUwgKQotICAgICAgewotICAgICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW1JFUVVJUkVEX0NPTF0gPT0gUkVRVUlSRUQgKQotICAgICAgICB7Ci0gICAgICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtOQU1FX0NPTF0gPT0gTk9fUEFSTSApCi0gICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX1JFUVVJUkVEX1BPU0lUSU9OQUxfTkVFRFNfTkFNRSApICk7Ci0KLSAgICAgICAgICByZXF1aXJlZF9wb3NpdGlvbmFscysrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIGZsYWdzX2luZm9bcm93XVtOQU1FX0NPTF0gIT0gTk9fUEFSTSApCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBXZSB1c2UgdGhlIE5BTUVfQ09MIGZpZWxkIGZvciBhbiBvcHRpb25hbCBwb3NpdGlvbmFsIHRvIGRlbm90ZQotICAgICAgICAgIC8vIHdoZXRoZXIgYWRkaXRpb25hbCBwb3NpdGlvbmFscyBhcmUgYWxsb3dlZCBvciBub3QuCi0gICAgICAgICAgb3B0aW9uYWxfcG9zaXRpb25hbHNfYWxsb3dlZCA9IHRydWU7Ci0gICAgICAgICAgb3B0aW9uYWxfbGlzdF9pbmRleCA9IHJvdzsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBFbnN1cmUgdGhhdCBwb3NpdGlvbmFscyBhcmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5mby4KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdICE9IFBPU0lUSU9OQUwgfHwKLSAgICAgICAgICAoIGRvbmVfcG9zaXRpb25hbHMgPT0gZmFsc2UgJiYKLSAgICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gPT0gUE9TSVRJT05BTCAmJgotICAgICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW1JFUVVJUkVEX0NPTF0gPT0gT1BUSU9OQUwgKSApCi0gICAgICB7Ci0gICAgICAgIGRvbmVfcG9zaXRpb25hbHMgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZSBpZiggZG9uZV9wb3NpdGlvbmFscyA9PSB0cnVlICkKLSAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9QT1NJVElPTkFMX05PVF9BVF9CRUdJTk5JTkcgKSApOwotICAgIH0KLQotICAgIC8vIEVuc3VyZSB0aGF0IGEgaGVscCBmbGFnIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGluZm8gbGlzdC4KLSAgICBpZiggaGVscF9zcGVjaWZpZWQgPT0gZmFsc2UgKQotICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9IRUxQX0ZMQUdfTk9UX1NQRUNJRklFRCApICk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZHVtcCBpbnRlcm5hbCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnNlZAotICAgICogY29tbWFuZCBsaW5lLgotICAqKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYiA9IG5ldyBTdHJpbmdCdWZmZXIoMTAwKTsKLQotICAgIGZvciggaW50IHJvdyA9IDA7IHJvdyA8IGZsYWdzX2luZm8ubGVuZ3RoOyByb3crKyApCi0gICAgewotICAgICAgYi5hcHBlbmQoICJcbiIgKTsKLQotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gPT0gUE9TSVRJT05BTCApCi0gICAgICAgIGIuYXBwZW5kKCAiUG9zaXRpb25hbDoiICk7Ci0gICAgICBlbHNlCi0gICAgICAgIGIuYXBwZW5kKCBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdICkgKyAiOiIgKTsKLQotCi0gICAgICBpZiggZmxhZ3Nfc3BlY2lmaWVkW3Jvd10gPT0gbnVsbCApCi0gICAgICAgIGIuYXBwZW5kKCAibm8gcGFyYW1ldGVycyIgKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZm9yKCBpbnQgcGFybV9pbmRleCA9IDA7IHBhcm1faW5kZXggPCBmbGFnc19zcGVjaWZpZWRbcm93XS5zaXplKCk7IHBhcm1faW5kZXgrKyApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgcGFybSA9IChTdHJpbmcpZmxhZ3Nfc3BlY2lmaWVkW3Jvd10uZWxlbWVudEF0KHBhcm1faW5kZXgpOwotICAgICAgICAgIGIuYXBwZW5kKCBwYXJtICsgIjoiICk7Ci0gICAgICAgIH0KLSAgICAgIGIuYXBwZW5kKCAiXG4iICk7Ci0gICAgfQotCi0gICAgcmV0dXJuICIiK2I7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19DT0wgICAgID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5BTUVfQ09MICAgICA9IDE7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEVVBfQ09MICAgICAgPSAyOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVRVUlSRURfQ09MID0gMzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFTFBfQ09MICAgICA9IDQ7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBPU0lUSU9OQUxfUk9XID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFTFBfTElORV9MRU4gID0gNzU7Ci0KLSAgcHJpdmF0ZSBTdHJpbmdbXVtdIGZsYWdzX2luZm87Ci0gIHByaXZhdGUgU3RyaW5nICAgICBoZWxwX2ZsYWc7Ci0gIHByaXZhdGUgU3RyaW5nICAgICB0b29sX25hbWU7Ci0gIHByaXZhdGUgVmVjdG9yW10gICBmbGFnc19zcGVjaWZpZWQ7Ci0gIHByaXZhdGUgaW50ICAgICAgICByZXF1aXJlZF9wb3NpdGlvbmFsczsKLSAgcHJpdmF0ZSBib29sZWFuICAgIG9wdGlvbmFsX3Bvc2l0aW9uYWxzX2FsbG93ZWQ7Ci0gIHByaXZhdGUgaW50ICAgICAgICBvcHRpb25hbF9saXN0X2luZGV4OwotICBwcml2YXRlIGludCAgICAgICAgbWF4X2ZsYWdfc2l6ZTsKLSAgcHJpdmF0ZSBpbnQgICAgICAgIG1heF9uYW1lX3NpemU7Ci0KLSAgcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIG1lc3NhZ2VzOwotICBwcml2YXRlICAgUmVzb3VyY2VCdW5kbGUgZmxhZ01lc3NhZ2VzOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9GbGFnTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvRmxhZ01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ODQxNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9GbGFnTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbWFuZGxpbmU7Ci0KLS8qKgotICAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzdG9yZSBjb25zdGFudCBzdHJpbmcgZXJyb3IgbWVzc2FnZXMKLSAgKiBnZW5lcmF0ZWQgYnkgQ29tbWFuZExpbmUuamF2YQotICAqCi0gICoKLSAgKiBAYXV0aG9yIFBldGVyIE1vb2drCi0gICogQGRhdGUgICBKdWx5IDEzLCAyMDAwCi0gICogQHNlZSAgICBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbWFuZGxpbmUuQ29tbWFuZExpbmUKLSoqLwotCi1wdWJsaWMgZmluYWwgY2xhc3MgRmxhZ01lc3NhZ2VzCi17Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0ZMQUdfTk9UX0ZPVU5EID0gIlBBUlNFUl9FUlJPUl9GTEFHX05PVF9GT1VORCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0FNQklHVU9VU19GTEFHID0gIlBBUlNFUl9FUlJPUl9BTUJJR1VPVVNfRkxBRyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX01JU1NJTkdfUE9TSVRJT05BTCA9ICJQQVJTRVJfRVJST1JfTUlTU0lOR19QT1NJVElPTkFMIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfVE9PX01BTllfUE9TSVRJT05BTFMgPSAiUEFSU0VSX0VSUk9SX1RPT19NQU5ZX1BPU0lUSU9OQUxTIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfTUlTU0lOR19SRVFVSVJFRF9GTEFHID0gIlBBUlNFUl9FUlJPUl9NSVNTSU5HX1JFUVVJUkVEX0ZMQUciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9EVVBMSUNBVEVfRkxBR1NfTk9UX0FMTE9XRUQgPSAiUEFSU0VSX0VSUk9SX0RVUExJQ0FURV9GTEFHU19OT1RfQUxMT1dFRCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX01JU1NJTkdfRkxBR19QQVJBTUVURVIgPSAiUEFSU0VSX0VSUk9SX01JU1NJTkdfRkxBR19QQVJBTUVURVIiOwotCi0gIC8vIEVycm9yIGludGVybmFsIGVycm9yIG1lc3NhZ2VzLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfTUVTU0FHRV9NSVNTSU5HX0FSRyA9ICJQQVJTRVJfRVJST1JfTUVTU0FHRV9NSVNTSU5HX0FSRyI7Ci0KLSAgLy8gSW50ZXJuYWwgY29tbWFuZCBsaW5lIGVycm9yIG1lc3NhZ2VzLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfTk9fRkxBR1NfREFUQV9TUEVDSUZJRUQgPSAiUEFSU0VSX0VSUk9SX05PX0ZMQUdTX0RBVEFfU1BFQ0lGSUVEIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfRklSU1RfRkxBR19OT1RfUE9TSVRJT05BTCA9ICJQQVJTRVJfRVJST1JfRklSU1RfRkxBR19OT1RfUE9TSVRJT05BTCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX05VTExfRkxBR19ST1cgPSAiUEFSU0VSX0VSUk9SX05VTExfRkxBR19ST1ciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUk9XX1NJWkUgPSAiUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9ST1dfU0laRSI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX05VTExfSU5fUk9XID0gIlBBUlNFUl9FUlJPUl9OVUxMX0lOX1JPVyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9EVVBfU1RSSU5HID0gIlBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfRFVQX1NUUklORyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9SRVFVSVJFRF9TVFJJTkcgPSAiUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9SRVFVSVJFRF9TVFJJTkciOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9QT1NJVElPTkFMX05PVF9BVF9CRUdJTk5JTkcgPSAiUEFSU0VSX0VSUk9SX1BPU0lUSU9OQUxfTk9UX0FUX0JFR0lOTklORyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0hFTFBfRkxBR19OT1RfU1BFQ0lGSUVEID0gIlBBUlNFUl9FUlJPUl9IRUxQX0ZMQUdfTk9UX1NQRUNJRklFRCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0ZMQUdTX05PVF9PUkRFUkVEID0gIlBBUlNFUl9FUlJPUl9GTEFHU19OT1RfT1JERVJFRCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0ZMQUdfTk9UX0xPV0VSQ0FTRSA9ICJQQVJTRVJfRVJST1JfRkxBR19OT1RfTE9XRVJDQVNFIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfUkVRVUlSRURfUE9TSVRJT05BTF9ORUVEU19OQU1FID0gIlBBUlNFUl9FUlJPUl9SRVFVSVJFRF9QT1NJVElPTkFMX05FRURTX05BTUUiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9JTkZPX1NZTlRBWCA9ICJQQVJTRVJfU1lOVEFYIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRkxBR1MgPSAiUEFSU0VSX0ZMQUdTIjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9JTkZPX1dIRVJFID0gIlBBUlNFUl9XSEVSRSI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL2NvbW1hbmRsaW5lLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL2NvbW1hbmRsaW5lLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NTI5ODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9jb21tYW5kbGluZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotUEFSU0VSX0VSUk9SX0ZMQUdfTk9UX0ZPVU5EPUlXQUIwMTIzRSBGbGFnIC17MH0gaXMgbm90IHZhbGlkLgotUEFSU0VSX0VSUk9SX0FNQklHVU9VU19GTEFHPUlXQUIwMjg0RSBGbGFnIC17MH0gaXMgYW1iaWd1b3VzLgotUEFSU0VSX0VSUk9SX01JU1NJTkdfUE9TSVRJT05BTD1JV0FCMDI4NUUgTWlzc2luZyB7MH0gcGFyYW1ldGVyLgotUEFSU0VSX0VSUk9SX1RPT19NQU5ZX1BPU0lUSU9OQUxTPUlXQUIwMjg2RSBUb28gbWFueSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgc3BlY2lmaWVkLgotUEFSU0VSX0VSUk9SX01JU1NJTkdfUkVRVUlSRURfRkxBRz1JV0FCMDI4OEUgRmxhZyAtezB9IGlzIG1pc3NpbmcuCi1QQVJTRVJfRVJST1JfRFVQTElDQVRFX0ZMQUdTX05PVF9BTExPV0VEPUlXQUIwMjkzRSBGbGFnIC17MH0gaGFzIGJlZW4gc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLgotUEFSU0VSX0VSUk9SX01JU1NJTkdfRkxBR19QQVJBTUVURVI9SVdBQjAyOTRFIEZsYWcgLXswfSBpcyBtaXNzaW5nIHBhcmFtZXRlciB7MX0uCi1QQVJTRVJfRVJST1JfTUVTU0FHRV9NSVNTSU5HX0FSRz1JV0FCMDMxOUUgRXJyb3IgbWVzc2FnZSB7MH0gaXMgbWlzc2luZyBhbiBhcmd1bWVudC4KLVBBUlNFUl9FUlJPUl9OT19GTEFHU19EQVRBX1NQRUNJRklFRD1JV0FCMDM0NUUgU3BlY2lmeSBmbGFnIGluZm9ybWF0aW9uLgotUEFSU0VSX0VSUk9SX0ZJUlNUX0ZMQUdfTk9UX1BPU0lUSU9OQUw9SVdBQjAzNDZFIFRoZSBmaXJzdCBmbGFnIG11c3QgYmUgcG9zaXRpb25hbC4KLVBBUlNFUl9FUlJPUl9OVUxMX0ZMQUdfUk9XPUlXQUIwMzQ3RSBOdWxsIGZsYWcgcm93LgotUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9ST1dfU0laRT1JV0FCMDM0OEUgRmxhZyByb3cgbXVzdCBoYXZlIDUgc3RyaW5ncy4KLVBBUlNFUl9FUlJPUl9OVUxMX0lOX1JPVz1JV0FCMDM0OUUgRmxhZyBpbmZvcm1hdGlvbiBjb250YWlucyBhIG51bGwgc3RyaW5nLgotUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9EVVBfU1RSSU5HPUlXQUIwMzUwRSBEdXBsaWNhdGUgc3RyaW5nIHswfSBpcyBub3QgdmFsaWQuCi1QQVJTRVJfRVJST1JfSU5DT1JSRUNUX1JFUVVJUkVEX1NUUklORz1JV0FCMDM1MUUgUmVxdWlyZWQgc3RyaW5nIHswfSBpcyBub3QgdmFsaWQuCi1QQVJTRVJfRVJST1JfUE9TSVRJT05BTF9OT1RfQVRfQkVHSU5OSU5HPUlXQUIwMzUyRSBQb3NpdGlvbmFsIGZsYWcgaXMgbm90IGF0IHRoZSBiZWdpbm5pbmcuCi1QQVJTRVJfRVJST1JfSEVMUF9GTEFHX05PVF9TUEVDSUZJRUQ9SVdBQjAzNTNFIEhlbHAgZmxhZyBpcyBub3Qgc3BlY2lmaWVkIGluIGluZm9ybWF0aW9uIGFycmF5LgotUEFSU0VSX0VSUk9SX0ZMQUdTX05PVF9PUkRFUkVEPUlXQUIwMzU0RSBGbGFncyBhcmUgbm90IGluIGxleGljYWwgb3JkZXIuCi1QQVJTRVJfRVJST1JfRkxBR19OT1RfTE9XRVJDQVNFPUlXQUIwMzU1RSBGbGFnIHswfSBpcyBub3QgbG93ZXJjYXNlLgotUEFSU0VSX0VSUk9SX1JFUVVJUkVEX1BPU0lUSU9OQUxfTkVFRFNfTkFNRT1JV0FCMDM1NkUgUmVxdWlyZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIG11c3QgaGF2ZSBhIG5hbWUgc3BlY2lmaWVkLgotUEFSU0VSX1NZTlRBWD1TeW50YXgKLVBBUlNFUl9GTEFHUz1GbGFncwotUEFSU0VSX1dIRVJFPVdoZXJlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9DbGFzc1BhdGguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0NsYXNzUGF0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDhhNGE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0NsYXNzUGF0aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLS8qKgotICogCi0gKiBUaGUgY2xhc3MgcHJvdmlkZXMgYW5kIGVhc3kgd2F5IHRvIGJ1aWxkIGNsYXNzcGF0aHMuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQ2xhc3NQYXRoIAotewotICBwcml2YXRlIFN0cmluZ0J1ZmZlciBwYXRoID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gbmV3UGF0aCBhcHBlbmRzIHRoaXMgbmV3IHBhdGggdG8gdGhlIGVuZCBvZiB0aGUgY2xhc3NwYXRoLgotICAgKi8KLSAgcHVibGljIHZvaWQgYXBwZW5kUGF0aCggU3RyaW5nIG5ld1BhdGggKQotICB7Ci0gIAkvLyBObyB2YWx1ZSB0byBwdXQgb24gcGF0aCwgc28ganVzdCByZXR1cm4KLSAgCWlmKCBuZXdQYXRoLmVxdWFscyggIiIgKSApIHJldHVybjsKLSAgCQotICAJLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgcGF0aCBpbiB0aGUgc3RyaW5nIHRoZW4gd2UgZG9uJ3QgbmVlZCBhIHBhdGgKLSAgCS8vIHNlcGFyYXRvci4KLSAgCWlmKCBwYXRoLmxlbmd0aCgpID09IDAgKQotICAJewotICAJICBwYXRoLmFwcGVuZCggbmV3UGF0aCApOwotICAJfQotICAJZWxzZQotICAJewotICAJICBwYXRoLmFwcGVuZCggRmlsZS5wYXRoU2VwYXJhdG9yQ2hhciArIG5ld1BhdGggKTsKLSAgCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYWxsIGphciBhbmQgemlwIGZpbGVzIGluIGEgcGFydGljdWxhciBkaXJlY3RvcnkgdG8KLSAgICogdGhlIGNsYXNzcGF0aC4KLSAgICogCi0gICAqIEBwYXJhbSBkaXJlY3Rvcnkgc3BlY2lmaWVzIGEgZGlyZWN0b3J5IGNvbnRhaW5zIGphciBhbmQgemlwIGZpbGVzLgotICAgKi8KLSAgcHVibGljIHZvaWQgYXBwZW5kRGlyKCBTdHJpbmcgZGlyZWN0b3J5ICkKLSAgewotICAJRmlsZSBkaXIgPSBuZXcgRmlsZSggZGlyZWN0b3J5ICk7Ci0gIAkKLSAgCWlmKCAhZGlyLmlzRGlyZWN0b3J5KCkgKSByZXR1cm47Ci0gIAkKLSAgCUZpbGVbXSBmaWxlcyA9IGRpci5saXN0RmlsZXMoKTsKLSAgCQotICAJZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGZpbGVzLmxlbmd0aDsgaW5kZXgrKyApCi0gIAl7Ci0gIAkgIEZpbGUgICBmaWxlID0gZmlsZXNbaW5kZXhdOwotICAJICBTdHJpbmcgbmFtZSA9IGZpbGUuZ2V0TmFtZSgpOwotICAJICAKLSAgCSAgaWYoIGZpbGUuaXNGaWxlKCkgJiYKLSAgCSAgICAgICggbmFtZS5lbmRzV2l0aCggIi5qYXIiICkgfHwKLSAgCSAgICAgICAgbmFtZS5lbmRzV2l0aCggIi56aXAiICkgKSApCi0gIAkgIHsKLSAgCSAgCWFwcGVuZFBhdGgoIGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKTsKLSAgCSAgfQotICAJICAgICAgICAKLSAgCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gbmV3UGF0aCBhcHBlbmRzIGEgbmV3IGNsYXNzcGF0aCB0byB0aGUgZW5kIG9mIHRoaXMgY2xhc3NwYXRoLgotICAgKi8KLSAgcHVibGljIHZvaWQgYXBwZW5kUGF0aCggQ2xhc3NQYXRoIG5ld1BhdGggKQotICB7Ci0gIAlhcHBlbmRQYXRoKCBuZXdQYXRoLnBhdGgudG9TdHJpbmcoKSApOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBmdWxsIHN0cmluZyBjbGFzc3BhdGggd2l0aCBzZXBhcmF0b3JzLgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgCXJldHVybiBwYXRoLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0ZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vRmlsZVJlc291cmNlT3V0cHV0U3RyZWFtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiYzRhNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vRmlsZVJlc291cmNlT3V0cHV0U3RyZWFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci0KLQotCi0vKioKLSogVGhpcyBjbGFzcyBkZWZpbmVzIGFuIG91dHB1dCBzdHJlYW0gdGhhdCB3cml0ZXMgdG8gYW4KLSoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIElGaWxlfS4KLSovCi1wdWJsaWMgY2xhc3MgRmlsZVJlc291cmNlT3V0cHV0U3RyZWFtIGV4dGVuZHMgT3V0cHV0U3RyZWFtCi17Ci0KLSAgSVBhdGggICAgICAgICAgICAgICAgIGZGaWxlUGF0aDsKLSAgUmVzb3VyY2VDb250ZXh0ICAgICAgIGZSZXNvdXJjZUNvbnRleHQ7IAotICBJUHJvZ3Jlc3NNb25pdG9yICAgICAgIGZNb25pdG9yOyAgIAotICBJU3RhdHVzSGFuZGxlciAgICAgICAgIGZTdGF0dXNIYW5kbGVyOwotICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gZkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLSAgYm9vbGVhbiAgICAgICAgICAgICAgIGZPcGVuOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYW4gb3V0cHV0IHN0cmVhbSB0aGF0IGNhbiBiZSB1c2VkIHRvIHdyaXRlIHRvIHRoZQotICAqIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+LiBUaGUgd29ya3NwYWNlIGlzIG5laXRoZXIgZXhhbWluZWQgbm9yCi0gICogYWx0ZXJlZCBkdXJpbmcgY29uc3RydWN0aW9uLiBBbGwgcmVzb3VyY2UgY3JlYXRpb24gaXMgZGVmZXJyZWQKLSAgKiB1bnRpbCBsYXRlciBpbiB0aGUgc3RyZWFtJ3MgbGlmZWN5Y2xlLCBzdWNoIGFzIGR1cmluZyB3cml0aW5nCi0gICogb3IgY2xvc3VyZS4KLSAgKiA8Yj5Ob3RlOjwvYj4gVGhlIHByZWZlcnJlZCBtZWNoYW5pc20gZm9yIGNyZWF0aW5nIGEgc3RyZWFtIHRoYXQKLSAgKiB3cml0ZXMgdG8gYW4gSUZpbGUgaXMgdG8gY2FsbCB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kCi0gICoge0BsaW5rIEZpbGVSZXNvdXJjZVV0aWxzI25ld0ZpbGVPdXRwdXRTdHJlYW0gRmlsZVJlc291cmNlVXRpbHMubmV3RmlsZU91dHB1dFN0cmVhbSgpfQotICAqIGFuZCB3b3JrIHdpdGggdGhlIHJlc3VsdGluZyA8Y29kZT5PdXRwdXRTdHJlYW08L2NvZGU+LgotICAqIERpcmVjdCBjb25zdHJ1Y3Rpb24gb2YgYSBGaWxlUmVzb3VyY2VPdXRwdXRTdHJlYW0gaXMgbm90IHJlY29tbWVuZGVkLgotICAqIEBwYXJhbSBmaWxlIFRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUgSUZpbGV9Ci0gICogaGFuZGxlIG9mIHRoZSBmaWxlIHJlc291cmNlIHRvIGNyZWF0ZS4gVGhlIHByb2plY3QgaW1wbGllZCBieSB0aGUKLSAgKiBwYXRobmFtZSBvZiB0aGUgZmlsZSBtdXN0IGFscmVhZHkgZXhpc3QsCi0gICogdGhhdCBpcywgdGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gY3JlYXRlIHByb2plY3RzLgotICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0gICovCi0gIHB1YmxpYyBGaWxlUmVzb3VyY2VPdXRwdXRTdHJlYW0gKCAKLSAgCQkJUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwgCi0gIAkJCUlQYXRoICAgICAgICAgICBmaWxlUGF0aCwgCi0gIAkJCUlQcm9ncmVzc01vbml0b3IgbW9uaXRvciwKLSAgCQkJSVN0YXR1c0hhbmRsZXIgICBzdGF0dXNIYW5kbGVyCi0gIAkJCSkKLSAgewotICAgIGZGaWxlUGF0aCA9IGZpbGVQYXRoOwotICAgIGZSZXNvdXJjZUNvbnRleHQgPSByZXNvdXJjZUNvbnRleHQ7Ci0gICAgZk1vbml0b3IgPSBtb25pdG9yOwotICAgIGZTdGF0dXNIYW5kbGVyID0gc3RhdHVzSGFuZGxlcjsKLSAgICBmQnl0ZUFycmF5T3V0cHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgIGZPcGVuID0gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAqIENsb3NlcyB0aGUgc3RyZWFtLgotICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNsb3NpbmcgdGhlIHN0cmVhbS4KLSAgKiBGb3IgZXhhbXBsZSwgaWYgdGhpcyBzdHJlYW0gd2FzIGNvbnN0cnVjdGVkIHdpdGggb3ZlcndyaXRlRmlsZSA9IGZhbHNlCi0gICogYW5kIGEgZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGVuIGFuIElPRXhjZXB0aW9uIHdpbGwKLSAgKiBiZSB0aHJvd24gZWl0aGVyIG5vdyBvciBkdXJpbmcgYW4gZWFybGllciB7QGxpbmsgI3dyaXRlIHdyaXRlfS4KLSAgKi8KLSAgcHVibGljIHZvaWQgY2xvc2UgKCkKLSAgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoIWZPcGVuKSByZXR1cm47Ci0gICAgZk9wZW4gPSBmYWxzZTsKLSAgICBmQnl0ZUFycmF5T3V0cHV0U3RyZWFtLmNsb3NlKCk7Ci0gICAgYnl0ZVtdIGJ1ZmZlciA9IGZCeXRlQXJyYXlPdXRwdXRTdHJlYW0udG9CeXRlQXJyYXkoKTsKLSAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSB0ZW1wSW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYnVmZmVyKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGZSZXNvdXJjZUNvbnRleHQsIGZGaWxlUGF0aCwgdGVtcElucHV0U3RyZWFtLCBmTW9uaXRvciwgZlN0YXR1c0hhbmRsZXIpOwotICAgIH0KLSAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogRmx1c2hlcyB0aGUgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGltcGx5IHRoZSBGaWxlIHJlc291cmNlCi0gICogd2lsbCBiZSBjcmVhdGVkIG9yIGJlY29tZSB2aXNpYmxlIHdpdGhpbiB0aGUgd29ya2JlbmNoLgotICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgYW4gZXJyb3Igb2NjdXJzLiBGb3IgZXhhbXBsZSwgaWYgdGhpcwotICAqIHN0cmVhbSB3YXMgY29uc3RydWN0ZWQgd2l0aCBvdmVyd3JpdGVGaWxlID0gZmFsc2UgYW5kIGEgZmlsZSBvZiB0aGUKLSAgKiBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZW4gYW4gSU9FeGNlcHRpb24gbWF5IGJlIHRocm93biBhdAotICAqIHRoaXMgcG9pbnQuCi0gICovCi0gIHB1YmxpYyB2b2lkIGZsdXNoICgpCi0gIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgZkJ5dGVBcnJheU91dHB1dFN0cmVhbS5mbHVzaCgpOwotICB9Ci0KLSAgLyoqCi0gICogV3JpdGVzIGFsbCBieXRlcyBmcm9tIHRoZSBnaXZlbiBhcnJheSB0byB0aGUgc3RyZWFtLgotICAqIEBwYXJhbSBiIFRoZSBhcnJheSBvZiBieXRlcyB0byB3cml0ZS4KLSAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3Vycy4gRm9yIGV4YW1wbGUsIGlmIHRoaXMKLSAgKiBzdHJlYW0gd2FzIGNvbnN0cnVjdGVkIHdpdGggb3ZlcndyaXRlRmlsZSA9IGZhbHNlIGFuZCBhIGZpbGUgb2YgdGhlCi0gICogc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGVuIGFuIElPRXhjZXB0aW9uIG1heSBiZSB0aHJvd24gYXQKLSAgKiB0aGlzIHBvaW50LgotICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZSAoIGJ5dGVbXSBiICkKLSAgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBmQnl0ZUFycmF5T3V0cHV0U3RyZWFtLndyaXRlKGIpOwotICB9Ci0KLSAgLyoqCi0gICogV3JpdGVzIGJ5dGVzIGZyb20gdGhlIGdpdmVuIGFycmF5IGJlZ2lubmluZyBhdCBzb21lIG9mZnNldAotICAqIGFuZCBjb250aW51aW5nIGZvciBzb21lIG51bWJlciBvZiBieXRlcyAobGVuKSB0byB0aGUgc3RyZWFtLgotICAqIEBwYXJhbSBiIFRoZSBhcnJheSBvZiBieXRlcyB0byB3cml0ZS4KLSAgKiBAcGFyYW0gb2ZmIFRoZSBvZmZzZXQgaW50byB0aGUgYXJyYXkgdG8gYmVnaW4gd3JpdGluZy4KLSAgKiBAcGFyYW0gbGVuIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUuCi0gICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiBhbiBlcnJvciBvY2N1cnMuIEZvciBleGFtcGxlLCBpZiB0aGlzCi0gICogc3RyZWFtIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIG92ZXJ3cml0ZUZpbGUgPSBmYWxzZSBhbmQgYSBmaWxlIG9mIHRoZQotICAqIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlbiBhbiBJT0V4Y2VwdGlvbiBtYXkgYmUgdGhyb3duIGF0Ci0gICogdGhpcyBwb2ludC4KLSAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUgKCBieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbiApCi0gIHsKLSAgICBmQnl0ZUFycmF5T3V0cHV0U3RyZWFtLndyaXRlKGIsb2ZmLGxlbik7Ci0gIH0KLQotICAvKioKLSAgKiBXcml0ZXMgYSBzaW5nbGUgYnl0ZSB0byB0aGUgc3RyZWFtLgotICAqIEBwYXJhbSBiIFRoZSBieXRlIHRvIHdyaXRlLgotICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgYW4gZXJyb3Igb2NjdXJzLiBGb3IgZXhhbXBsZSwgaWYgdGhpcwotICAqIHN0cmVhbSB3YXMgY29uc3RydWN0ZWQgd2l0aCBvdmVyd3JpdGVGaWxlID0gZmFsc2UgYW5kIGEgZmlsZSBvZiB0aGUKLSAgKiBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZW4gYW4gSU9FeGNlcHRpb24gbWF5IGJlIHRocm93biBhdAotICAqIHRoaXMgcG9pbnQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlICggaW50IGIgKQotICB7Ci0gICAgZkJ5dGVBcnJheU91dHB1dFN0cmVhbS53cml0ZShiKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9GaWxlUmVzb3VyY2VVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vRmlsZVJlc291cmNlVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRkMWI5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9GaWxlUmVzb3VyY2VVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDExMiAgIDEyMTE5OSBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBN+GxsZXIKLSAqIDIwMDcwODEzICAgMTg4OTk5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5FbnZpcm9ubWVudE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotCi0KLQotLyoqCi0qIFRoaXMgY2xhc3MgY29udGFpbnMgdXNlZnVsIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBFY2xpcHNlIHJlc291cmNlcy4KLSovCi1wdWJsaWMgZmluYWwgY2xhc3MgRmlsZVJlc291cmNlVXRpbHMKLXsKLSAgLy8KLSAgLy8gS2VlcHMgdGhlIElXb3Jrc3BhY2UgaGFuZ2luZyBhcm91bmQuIFNlZSBnZXRXb3Jrc3BhY2UoKS4KLSAgLy8KLSAgcHJpdmF0ZSBzdGF0aWMgSVdvcmtzcGFjZSB3b3Jrc3BhY2VfID0gbnVsbDsKLSAgLy8KLSAgLy8gS2VlcHMgdGhlIElXb3Jrc3BhY2VSb290IGhhbmdpbmcgYXJvdW5kLiBTZWUgZ2V0V29ya3NwYWNlUm9vdCgpLgotICAvLwotICBwcml2YXRlIHN0YXRpYyBJV29ya3NwYWNlUm9vdCByb290XyA9IG51bGw7Ci0gIAotLy8gIHByaXZhdGUgc3RhdGljIE1lc3NhZ2VVdGlscyBtc2dfID0gbmV3IE1lc3NhZ2VVdGlscyggIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uZW52aXJvbm1lbnQiLCBuZXcgRmlsZVJlc291cmNlVXRpbHMoKSApOwotCi0KLSAvKioKLSAgKiBSZXR1cm5zIHRoZSBJV29ya3NwYWNlUm9vdCBvYmplY3QuCi0gICogQHJldHVybiBUaGUgSVdvcmtzcGFjZVJvb3Qgb2JqZWN0LgotICAqLwotICBwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2VSb290IGdldFdvcmtzcGFjZVJvb3QgKCkKLSAgewotICAgIGlmIChyb290XyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJvb3RfID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJvb3RfOwotICB9Ci0KLSAgLyoqCi0JICogUmV0dXJucyB0aGUgSVdvcmtzcGFjZSBvYmplY3QuCi0JICogCi0JICogQHJldHVybiBUaGUgSVdvcmtzcGFjZSBvYmplY3QuCi0JICovCi0gIHB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UgKCkKLSAgewotICAgIGlmICh3b3Jrc3BhY2VfID09IG51bGwpCi0gICAgewotICAgICAgaWYgKHJvb3RfID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJvb3RfID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgd29ya3NwYWNlXyA9IHJvb3RfLmdldFdvcmtzcGFjZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gd29ya3NwYWNlXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYW4gYXJyYXkgb2YgdGhyZWUgY29tbW9uIGNob2ljZXMuIChpZS4gWWVzLCB5ZXMgYWxsLCBhbmQgY2FuY2VsICkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQ2hvaWNlW10gZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkgCi0gIHsKLSAgICBWZWN0b3IgY2hvaWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBjaG9pY2VzLmFkZChuZXcgQ2hvaWNlKCAnWScsIEVudmlyb25tZW50TWVzc2FnZXMuTEFCRUxfWUVTKSk7Ci0gICAgY2hvaWNlcy5hZGQobmV3IENob2ljZSggJ0EnLCBFbnZpcm9ubWVudE1lc3NhZ2VzLkxBQkVMX1lFU19UT19BTEwpKTsKLSAgICBjaG9pY2VzLmFkZChuZXcgQ2hvaWNlKCAnQycsIEVudmlyb25tZW50TWVzc2FnZXMuTEFCRUxfQ0FOQ0VMKSk7Ci0gICAgCi0gICAgcmV0dXJuIChDaG9pY2VbXSljaG9pY2VzLnRvQXJyYXkobmV3IENob2ljZVtjaG9pY2VzLnNpemUoKV0pOwotICB9Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIGFuCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSBJUmVzb3VyY2V9Ci0gICogb2YgdGhlIGdpdmVuIGFic29sdXRlIHBhdGhuYW1lIG9yIG51bGwgaWYgbm8gc3VjaCByZXNvdXJjZSBleGlzdHMuCi0gICogQHBhcmFtIGFic29sdXRlUGF0aG5hbWUgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHJlc291cmNlLgotICAqIEByZXR1cm4gVGhlIDxjb2RlPklSZXNvdXJjZTwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgSVJlc291cmNlIGZpbmRSZXNvdXJjZSAoIFN0cmluZyBhYnNvbHV0ZVBhdGhuYW1lICkKLSAgewotICAgIGlmIChhYnNvbHV0ZVBhdGhuYW1lID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaW5kUmVzb3VyY2UobmV3IFBhdGgoYWJzb2x1dGVQYXRobmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UgSVJlc291cmNlfQotICAqIG9mIHRoZSBnaXZlbiBhYnNvbHV0ZSBwYXRoIG9yIG51bGwgaWYgbm8gc3VjaCByZXNvdXJjZSBleGlzdHMuCi0gICogQHBhcmFtIGFic29sdXRlUGF0aCBUaGUgYWJzb2x1dGUgPGNvZGU+SVBhdGg8L2NvZGU+IG9mIHRoZSByZXNvdXJjZS4KLSAgKiBAcmV0dXJuIFRoZSA8Y29kZT5JUmVzb3VyY2U8L2NvZGU+LgotICAqLwotICBwdWJsaWMgc3RhdGljIElSZXNvdXJjZSBmaW5kUmVzb3VyY2UgKCBJUGF0aCBhYnNvbHV0ZVBhdGggKQotICB7Ci0gICAgaWYgKGFic29sdXRlUGF0aCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gRmlsZVJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIoYWJzb2x1dGVQYXRoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvcGllcyBhIGZpbGUgZnJvbSBhIHBsdWdpbidzIGluc3RhbGxhdGlvbiBsb2NhdGlvbgotICAgKiB0byBhbiBFY2xpcHNlIGZvbGRlci4KLSAgICogQHBhcmFtIHBsdWdpbiBUaGUgcGx1Z2luIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuCi0gICAqIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEBwYXJhbSBzb3VyY2VQYXRoIFRoZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgPGNvZGU+cGx1Z2luPC9jb2RlPgotICAgKiBpbnN0YWxsIGxvY2F0aW9uLCBjb250YWluaW5nIHRoZSBmaWxlcyB0byBjb3B5LgotICAgKiBJZiBudWxsLCB0aGVuIHRoZSBwbHVnaW4gaW5zdGFsbCBsb2NhdGlvbiBpcyB0aGUgc291cmNlIHBhdGgKLSAgICogKGllLiBudWxsIGlzIGVxdWl2YWxlbnQgdG8gIi4iKS4KLSAgICogQHBhcmFtIHBhdGhuYW1lIFRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBjb3B5LgotICAgKiBUaGUgcGF0aG5hbWUgaXMgcmVsYXRpdmUgdG8gdGhlIDxjb2RlPnBsdWdpbiBzb3VyY2VQYXRoPC9jb2RlPi4KLSAgICogTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHBhcmFtIHRhcmdldFBhdGggVGhlIGFic29sdXRlIEVjbGlwc2UgcGF0aCBvZiB0aGUgZm9sZGVyIHRvCi0gICAqIHdoaWNoIHRoZSBmaWxlIHdpbGwgYmUgY29waWVkLiBUaGUgcmVsYXRpdmUgcGF0aG5hbWUgb2YgdGhlCi0gICAqIGZpbGUgaXMgcHJlc2VydmVkLgotICAgKiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gY3JlYXRlRm9sZGVycyBUaGUgaW50ZXJtZWRpYXRlIGZvbGRlciBjcmVhdGlvbiBwb2xpY3ksIG9uZSBvZgotICAgKiB7QGxpbmsgI0NSRUFURSBDUkVBVEV9IG9yIHtAbGluayAjRE9OVF9DUkVBVEUgRE9OVF9DUkVBVEV9LgotICAgKiA8dWw+Ci0gICAqIDxsaT48Y29kZT5DUkVBVEU8L2NvZGU+IC0KLSAgICogSWYgYW55IGludGVybWVkaWF0ZSBmb2xkZXJzIGluIHRoZSBnaXZlbiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+Ci0gICAqIGRvIG5vdCBleGlzdCwgdGhleSB3aWxsIGJlIGNyZWF0ZWQuCi0gICAqIDxsaT48Y29kZT5ET05UX0NSRUFURTwvY29kZT4gLQotICAgKiBJZiBhbnkgaW50ZXJtZWRpYXRlIGZvbGRlcnMgaW4gdGhlIGdpdmVuIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4KLSAgICogZG8gbm90IGV4aXN0LCB0aGUgbWV0aG9kIHdpbGwgdGhyb3cgYSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPi4KLSAgICogPC91bD4KLSAgICogQHBhcmFtIG92ZXJ3cml0ZUZpbGUgVGhlIHBvbGljeSBmb3IgZXhpc3RpbmcgZmlsZXMsIG9uZSBvZgotICAgKiB7QGxpbmsgI09WRVJXUklURSBPVkVSV1JJVEV9IG9yIHtAbGluayAjRE9OVF9PVkVSV1JJVEUgRE9OVF9PVkVSV1JJVEV9LgotICAgKiA8dWw+Ci0gICAqIDxsaT48Y29kZT5PVkVSV1JJVEU8L2NvZGU+IC0KLSAgICogSWYgYSByZXNvdXJjZSBvZiB0aGUgc2FtZSBuYW1lIGFzIHRoZSBnaXZlbgotICAgKiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+IGFscmVhZHkgZXhpc3RzIGFuZCBpcyBhIGZpbGUsCi0gICAqIGl0IHdpbGwgYmUgcmVwbGFjZWQuCi0gICAqIElmIHRoZSByZXNvdXJjZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXQgaXMgbm90IGEgZmlsZSwKLSAgICogdGhlbiBubyBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhbmQKLSAgICogYSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiB3aWxsIGJlIHRocm93bi4KLSAgICogPGxpPjxjb2RlPkRPTlRfT1ZFUldSSVRFPC9jb2RlPiAtCi0gICAqIElmIGFueSByZXNvdXJjZSBvZiB0aGUgc2FtZSBuYW1lIGFzIHRoZSBnaXZlbgotICAgKiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+IGFscmVhZHkgZXhpc3RzLAotICAgKiB0aGVuIG5vIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGFuZAotICAgKiBhIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IHdpbGwgYmUgdGhyb3duLgotICAgKiA8L3VsPgotICAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotICAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gQW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgYW4KLSAgICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzIElTdGF0dXN9Ci0gICAqIHdpdGggYSBzZXZlcml0eSBvZiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPiBhbmQgYQotICAgKiBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlLgotICAgKi8KLSAgIHN0YXRpYyBwdWJsaWMgdm9pZCBjb3B5RmlsZSggUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGx1Z2luIHBsdWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBhdGggc291cmNlUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBhdGggcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQYXRoIHRhcmdldFBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU3RhdHVzSGFuZGxlciBzdGF0dXNNb25pdG9yICkKLSAgICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgIHsKLSAgICAgdHJ5Ci0gICAgIHsKLSAgICAgICBJUGF0aCB0YXJnZXQgPSB0YXJnZXRQYXRoLmFwcGVuZChwYXRobmFtZSk7Ci0gICAgICAgSVBhdGggc291cmNlID0gc291cmNlUGF0aCA9PSBudWxsID8gcGF0aG5hbWUgOiBzb3VyY2VQYXRoLmFwcGVuZChwYXRobmFtZSk7Ci0gICAgICAgSW5wdXRTdHJlYW0gaW5wdXQgPSBwbHVnaW4ub3BlblN0cmVhbShzb3VyY2UpOwotICAgICAgIGNyZWF0ZUZpbGUocmVzb3VyY2VDb250ZXh0LCB0YXJnZXQsIGlucHV0LCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotICAgICB9Ci0gICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICB7Ci0gICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0lPLGUpKTsKLSAgICAgfQotICAgfQotICAgCi0gIC8qKgotICAgKiBEZWxldGVzIGEgZmlsZSB1bmRlciBhIGNvbnRhaW5lci4KLSAgICogVGhlIGNvbnRhaW5lciBtdXN0IGFscmVhZHkgZXhpc3QuCi0gICAqIEBwYXJhbSBmaWxlIC0gdGhlIElGaWxlIHRvIGJlIGRlbGV0ZWQKLSAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotICAgKiBAcGFyYW0gc3RhdHVzTW9uaXRvcgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaWYgaXQgZXhpc3RzIGFuZCBpcyBzdWNjZXNzZnVsbHkgZGVsZXRlZC4gRmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRlbGV0ZUZpbGUoIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUZpbGUgZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTdGF0dXNIYW5kbGVyIHN0YXR1c01vbml0b3IpCi0gICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIGlmIChmaWxlLmV4aXN0cygpKQotICAgIHsKLSAgICAgIGlmICghcmVzb3VyY2VDb250ZXh0LmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpCi0gICAgICB7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzIAotICAgICAgICAgID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfRklMRV9PVkVSV1JJVEVfRElTQUJMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsgZmlsZS5nZXRQYXJlbnQoKS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5nZXROYW1lKCl9KSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAKLSAgICAgICAgQ2hvaWNlIGNob2ljZSA9IHN0YXR1c01vbml0b3IucmVwb3J0KCBzdGF0dXMsIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpICk7Ci0gICAgICAgIAotICAgICAgICBpZiggY2hvaWNlLmdldFNob3J0Y3V0KCkgPT0gJ0MnICkgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYoIGNob2ljZS5nZXRTaG9ydGN1dCgpID09ICdBJyApIHJlc291cmNlQ29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vV2UgaGF2ZSBwZXJtaXNzaW9uIHRvIG92ZXJ3cml0ZSBzbyBjaGVjayBpZiBmaWxlIGlzIHJlYWQtb25seQotICAgICAgaWYgKGZpbGUuaXNSZWFkT25seSgpKQotICAgICAgewotICAgICAgICBpZiAoIXJlc291cmNlQ29udGV4dC5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJU3RhdHVzIHN0YXR1cyAKLSAgICAgICAgICAgID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117IGZpbGUuZ2V0UGFyZW50KCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5nZXROYW1lKCl9KSApOwotICAgICAgICAgIAotICAgICAgICAgIENob2ljZSBjaG9pY2UgPSBzdGF0dXNNb25pdG9yLnJlcG9ydCggc3RhdHVzLCBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBjaG9pY2UuZ2V0U2hvcnRjdXQoKSA9PSAnQycgKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIGNob2ljZS5nZXRTaG9ydGN1dCgpID09ICdBJyApIHJlc291cmNlQ29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCh0cnVlKTsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIElGaWxlW10gZmlsZXMgPSBuZXcgSUZpbGVbMV07Ci0gICAgICAgIGZpbGVzWzBdID0gZmlsZTsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBnZXRXb3Jrc3BhY2UoKS52YWxpZGF0ZUVkaXQoZmlsZXMsIG51bGwpOwotICAgICAgICAKLSAgICAgICAgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IgKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzTW9uaXRvci5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGZpbGUuZGVsZXRlKHRydWUsIG51bGwpOwotICAgIH0KLSAgICAvL0F0IHRoaXMgcG9pbnQsIGVpdGhlciB0aGUgZmlsZSBkaWQgbm90IGV4aXN0IG9yIHdlIHN1Y2Nlc3NmdWxseSBkZWxldGVkCi0gICAgLy8gaXQuIFJldHVybiBzdWNjZXNzLgotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIERlbGV0ZXMgYSBmb2xkZXIgdW5kZXIgYSBjb250YWluZXIuCi0gICAqIEBwYXJhbSBmb2xkZXIgLSB0aGUgSUZvbGRlciB0byBiZSBkZWxldGVkCi0gICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLSAgICogQHBhcmFtIHN0YXR1c01vbml0b3IKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmb2xkZXIgZG9lcyBub3QgZXhpc3Qgb3IgaWYgaXQgZXhpc3RzIGFuZCBpcyBzdWNjZXNzZnVsbHkgZGVsZXRlZCBhbG9uZyB3aXRoIGl0cyBtZW1iZXJzLiBGYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICAgcHVibGljIHN0YXRpYyBib29sZWFuIGRlbGV0ZUZvbGRlciggUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElGb2xkZXIgZm9sZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU3RhdHVzSGFuZGxlciBzdGF0dXNNb25pdG9yICkKLSAgICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgIHsKLSAgICAgaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHJldHVybiB0cnVlOwotCi0gICAgIGJvb2xlYW4gICAgIGRlbGV0ZWQgICA9IHRydWU7Ci0gICAgIElSZXNvdXJjZVtdIHJlc291cmNlcyA9IGZvbGRlci5tZW1iZXJzKCk7Ci0gICAgIAotICAgICBmb3IgKGludCBpPTA7IGk8cmVzb3VyY2VzLmxlbmd0aDsgaSsrKQotICAgICB7Ci0gICAgICAgSVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VzW2ldOwotICAgICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgIHsKLSAgICAgICAgIGRlbGV0ZWQgPSBkZWxldGVGaWxlKHJlc291cmNlQ29udGV4dCwgKElGaWxlKXJlc291cmNlLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotICAgICAgIH0KLSAgICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyKQotICAgICAgIHsKLSAgICAgICAgIGRlbGV0ZWQgPSBkZWxldGVGb2xkZXIoIHJlc291cmNlQ29udGV4dCwgKElGb2xkZXIpcmVzb3VyY2UsIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzTW9uaXRvcik7Ci0gICAgICAgfQotCi0gICAgICAgaWYoICFkZWxldGVkICkgYnJlYWs7Ci0gICAgIH0KLSAgICAgCi0gICAgIGlmKCBkZWxldGVkICkKLSAgICAgewotICAgICAgIGZvbGRlci5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0gICAgICAgcmV0dXJuIHRydWU7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICAgIHJldHVybiBmYWxzZTsKLSAgIH0KLQotICAvKioKLSAgKiBDcmVhdGVzIGEgZmlsZSBvZiB0aGUgZ2l2ZW4gPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPgotICAqIGFuZCByZXR1cm5zIGl0cyBoYW5kbGUgYXMgYW4gPGNvZGU+SUZpbGU8L2NvZGU+LgotICAqIElmIHRoZSBmaWxlIGNhbm5vdCBiZSBjcmVhdGVkLCBhCi0gICogPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gY29udGFpbmluZyBhbgotICAqIDxjb2RlPklTdGF0dXM8L2NvZGU+IG9iamVjdCBpcyB0aHJvd24uCi0gICogQHBhcmFtIGFic29sdXRlUGF0aCBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZSB0byBjcmVhdGUuCi0gICogVGhlIHByb2plY3QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aCBtdXN0IGFscmVhZHkgZXhpc3QsCi0gICogdGhhdCBpcywgdGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gY3JlYXRlIHByb2plY3RzLgotICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0gICogQHJldHVybiBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIElGaWxlfQotICAqIGhhbmRsZSBvZiB0aGUgZmlsZS4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gQW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgYW4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgSVN0YXR1c30KLSAgKiB3aXRoIGEgc2V2ZXJpdHkgb2YgPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4gYW5kIGEKLSAgKiBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlLgotICAqLwotICBwdWJsaWMgc3RhdGljIElGaWxlIGNyZWF0ZUZpbGUgKAotICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0gICAgSVBhdGggICAgICAgICAgIGFic29sdXRlUGF0aCwKLSAgICBJbnB1dFN0cmVhbSAgICAgaW5wdXRTdHJlYW0sCi0gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgSVN0YXR1c0hhbmRsZXIgICBzdGF0dXNIYW5kbGVyICkKLQotICAgIHRocm93cyBDb3JlRXhjZXB0aW9uIAotICB7ICAgIAotICAgIGlmICghYWJzb2x1dGVQYXRoLmlzQWJzb2x1dGUoKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsICJSZXNvdXJjZVV0aWxzIiwwLE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1BBVEhfTk9UX0FCU09MVVRFLG5ldyBPYmplY3RbXSB7YWJzb2x1dGVQYXRoLnRvU3RyaW5nKCl9KSxudWxsKSk7Ci0gICAgfQotICAgIGlmIChhYnNvbHV0ZVBhdGguc2VnbWVudENvdW50KCkgPCAxKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiUmVzb3VyY2VVdGlscyIsMCxOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9QQVRIX0VNUFRZLG5ldyBPYmplY3RbXSB7YWJzb2x1dGVQYXRoLnRvU3RyaW5nKCl9KSxudWxsKSk7Ci0gICAgfQotICAgIGlmIChhYnNvbHV0ZVBhdGguc2VnbWVudENvdW50KCkgPCAyKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiUmVzb3VyY2VVdGlscyIsMCxOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9QQVRIX05PVF9GT0xERVIsbmV3IE9iamVjdFtdIHthYnNvbHV0ZVBhdGgudG9TdHJpbmcoKX0pLG51bGwpKTsKLSAgICB9Ci0gICAgSUNvbnRhaW5lciBwYXJlbnQgICA9IG1ha2VGb2xkZXJQYXRoKHJlc291cmNlQ29udGV4dCwgYWJzb2x1dGVQYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLSAgICBTdHJpbmcgICAgIGZpbGVOYW1lID0gYWJzb2x1dGVQYXRoLmxhc3RTZWdtZW50KCk7Ci0gICAgCi0gICAgcmV0dXJuIG1ha2VGaWxlKHJlc291cmNlQ29udGV4dCwgcGFyZW50LCBmaWxlTmFtZSwgaW5wdXRTdHJlYW0sIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzSGFuZGxlcik7Ci0gIH0KLQotICAvKioKLSAgKiBDcmVhdGVzIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5wcm9qZWN0PC9jb2RlPgotICAqIGEgZmlsZSBvZiB0aGUgZ2l2ZW4gPGNvZGU+cmVsYXRpdmVQYXRoPC9jb2RlPgotICAqIGFuZCByZXR1cm5zIGl0cyBoYW5kbGUgYXMgYW4gPGNvZGU+SUZpbGU8L2NvZGU+LgotICAqIElmIHRoZSBmaWxlIGNhbm5vdCBiZSBjcmVhdGVkLCBhCi0gICogPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gY29udGFpbmluZyBhbgotICAqIDxjb2RlPklTdGF0dXM8L2NvZGU+IG9iamVjdCBpcyB0aHJvd24uCi0gICogQHBhcmFtIGFic29sdXRlUGF0aCBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZSB0byBjcmVhdGUuCi0gICogVGhlIHByb2plY3QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aCBtdXN0IGFscmVhZHkgZXhpc3QsCi0gICogdGhhdCBpcywgdGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gY3JlYXRlIHByb2plY3RzLgotICAqIEBwYXJhbSBjcmVhdGVGb2xkZXJzIFRoZSBpbnRlcm1lZGlhdGUgZm9sZGVyIGNyZWF0aW9uIHBvbGljeSwgb25lIG9mCi0gICoge0BsaW5rICNDUkVBVEUgQ1JFQVRFfSBvciB7QGxpbmsgI0RPTlRfQ1JFQVRFIERPTlRfQ1JFQVRFfS4KLSAgKiA8dWw+Ci0gICogPGxpPjxjb2RlPkNSRUFURTwvY29kZT4gLQotICAqIElmIGFueSBpbnRlcm1lZGlhdGUgZm9sZGVycyBpbiB0aGUgZ2l2ZW4gPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPgotICAqIGRvIG5vdCBleGlzdCwgdGhleSB3aWxsIGJlIGNyZWF0ZWQuCi0gICogPGxpPjxjb2RlPkRPTlRfQ1JFQVRFPC9jb2RlPiAtCi0gICogSWYgYW55IGludGVybWVkaWF0ZSBmb2xkZXJzIGluIHRoZSBnaXZlbiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+Ci0gICogZG8gbm90IGV4aXN0LCB0aGUgbWV0aG9kIHdpbGwgdGhyb3cgYSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPi4KLSAgKiA8L3VsPgotICAqIEBwYXJhbSBvdmVyd3JpdGVGaWxlIFRoZSBwb2xpY3kgZm9yIGV4aXN0aW5nIGZpbGVzLCBvbmUgb2YKLSAgKiB7QGxpbmsgI09WRVJXUklURSBPVkVSV1JJVEV9IG9yIHtAbGluayAjRE9OVF9PVkVSV1JJVEUgRE9OVF9PVkVSV1JJVEV9LgotICAqIDx1bD4KLSAgKiA8bGk+PGNvZGU+T1ZFUldSSVRFPC9jb2RlPiAtCi0gICogSWYgYSByZXNvdXJjZSBvZiB0aGUgc2FtZSBuYW1lIGFzIHRoZSBnaXZlbgotICAqIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4gYWxyZWFkeSBleGlzdHMgYW5kIGlzIGEgZmlsZSwKLSAgKiBpdCB3aWxsIGJlIHJlcGxhY2VkLgotICAqIElmIHRoZSByZXNvdXJjZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXQgaXMgbm90IGEgZmlsZSwKLSAgKiB0aGVuIG5vIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGFuZAotICAqIGEgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gd2lsbCBiZSB0aHJvd24uCi0gICogPGxpPjxjb2RlPkRPTlRfT1ZFUldSSVRFPC9jb2RlPiAtCi0gICogSWYgYW55IHJlc291cmNlIG9mIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGdpdmVuCi0gICogPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBhbHJlYWR5IGV4aXN0cywKLSAgKiB0aGVuIG5vIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGFuZAotICAqIGEgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gd2lsbCBiZSB0aHJvd24uCi0gICogPC91bD4KLSAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotICAqIEByZXR1cm4gVGhlIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSBJRmlsZX0KLSAgKiBoYW5kbGUgb2YgdGhlIGZpbGUuCi0gICogQHRocm93cyBDb3JlRXhjZXB0aW9uIEFuIGV4Y2VwdGlvbiBjb250YWluaW5nIGFuCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzIElTdGF0dXN9Ci0gICogd2l0aCBhIHNldmVyaXR5IG9mIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+IGFuZCBhCi0gICogbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJRmlsZSBjcmVhdGVGaWxlICgKLSAgICBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotICAgIElQcm9qZWN0ICAgICAgICBwcm9qZWN0LAotICAgIElQYXRoICAgICAgICAgICByZWxhdGl2ZVBhdGgsCi0gICAgSW5wdXRTdHJlYW0gICAgIGlucHV0U3RyZWFtLAotICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgIElTdGF0dXNIYW5kbGVyICAgc3RhdHVzTW9uaXRvciApCi0gCi0gICAgdGhyb3dzIENvcmVFeGNlcHRpb24gCi0gIHsKLSAgICBJUGF0aCBhYnNvbHV0ZVBhdGggPSBwcm9qZWN0LmdldEZ1bGxQYXRoKCkuYXBwZW5kKHJlbGF0aXZlUGF0aCk7Ci0gICAgcmV0dXJuIGNyZWF0ZUZpbGUocmVzb3VyY2VDb250ZXh0LCBhYnNvbHV0ZVBhdGgsIGlucHV0U3RyZWFtLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotICB9Ci0KLSAgLyoqCi0gICogQ3JlYXRlcyBhbiBvdXRwdXQgc3RyZWFtIHRoYXQgY2FuIGJlIHVzZWQgdG8gd3JpdGUgdG8gdGhlCi0gICogZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4uIEFjdHVhbCBjaGFuZ2VzIHRvIHRoZSB3b3Jrc3BhY2UKLSAgKiBtYXkgb2NjdXIgZHVyaW5nIGNyZWF0aW9uIG9mIHRoZSBzdHJlYW0sIHdoaWxlIHdyaXRpbmcgdG8KLSAgKiB0aGUgc3RyZWFtLCBvciB3aGVuIHRoZSBzdHJlYW0gaXMgY2xvc2VkLgotICAqIEEgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gY29udGFpbmluZwotICAqIGFuIDxjb2RlPklTdGF0dXM8L2NvZGU+IHdpbGwgYmUgdGhyb3duCi0gICogYXQgc29tZSBwb2ludCBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBzdHJlYW0KLSAgKiBpZiB0aGUgZmlsZSByZXNvdXJjZSBjYW5ub3QgYmUgY3JlYXRlZC4KLSAgKiBAcGFyYW0gZmlsZSBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIElGaWxlfQotICAqIGhhbmRsZSBvZiB0aGUgZmlsZSByZXNvdXJjZSB0byBjcmVhdGUuIFRoZSBwcm9qZWN0IGltcGxpZWQgYnkgdGhlCi0gICogcGF0aG5hbWUgb2YgdGhlIGZpbGUgbXVzdCBhbHJlYWR5IGV4aXN0LAotICAqIHRoYXQgaXMsIHRoaXMgbWV0aG9kIGNhbm5vdCBiZSB1c2VkIHRvIGNyZWF0ZSBwcm9qZWN0cy4KLSAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotICAqIEByZXR1cm4gQW4gPGNvZGU+T3V0cHV0U3RyZWFtPC9jb2RlPiB0aWVkIHRvIHRoZSBmaWxlIHJlc291cmNlLgotICAqIEFjdHVhbCBjaGVja3Mgb2Ygb3IgY2hhbmdlcyB0byB0aGUgd29ya3NwYWNlIG1heSBvY2N1ciBhcyBlYXJseSBkdXJpbmcKLSAgKiBzdHJlYW0gY3JlYXRpb24sIGNsb3N1cmUsIG9yIGFueSB0aW1lIGluIGJldHdlZW4uCi0gICogQHRocm93cyBDb3JlRXhjZXB0aW9uIEFuIGV4Y2VwdGlvbiBjb250YWluaW5nIGFuCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzIElTdGF0dXN9Ci0gICogd2l0aCBhIHNldmVyaXR5IG9mIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+IGFuZCBhCi0gICogbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZS4KLSAgKiBSZWFzb25zIGluY2x1ZGU6Ci0gICogPG9sPgotICAqIDxsaT5UaGUgcHJvamVjdCBvZiB0aGUgZ2l2ZW4gZmlsZSdzIHBhdGggZG9lcyBub3QgZXhpc3QuCi0gICogPGxpPkEgbm9uLWZpbGUgcmVzb3VyY2Ugb2YgdGhlIHNhbWUgbmFtZSBvZiB0aGUgZ2l2ZW4gZmlsZQotICAqIGFscmVhZHkgZXhpc3RzLgotICAqIDxsaT5BIGZpbGUgcmVzb3VyY2Ugb2YgdGhlIHNhbWUgbmFtZSBvZiB0aGUgZ2l2ZW4gZmlsZQotICAqIGFscmVhZHkgZXhpc3RzLCBhbmQgPGNvZGU+b3ZlcndyaXRlRmlsZTwvY29kZT4gaXMgZmFsc2UuCi0gICogPGxpPk9uZSBvciBtb3JlIGludGVybWVkaWF0ZSBmb2xkZXJzIHRvIHRoZSBnaXZlbiBmaWxlCi0gICogZG8gbm90IGV4aXN0LCBhbmQgPGNvZGU+Y3JlYXRlRm9sZGVyczwvY29kZT4gaXMgZmFsc2UuCi0gICogPC9vbD4KLSAgKi8KLQotICBwdWJsaWMgc3RhdGljIE91dHB1dFN0cmVhbSBuZXdGaWxlT3V0cHV0U3RyZWFtICgKLSAgICAgICBSZXNvdXJjZUNvbnRleHQgIGNvbnRleHQsCi0gICAgICAgSVBhdGggICAgICAgICAgICBmaWxlLAotICAgICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgICAgIElTdGF0dXNIYW5kbGVyICAgIHN0YXR1c0hhbmRsZXIgKQotIAotICB7Ci0gICAgcmV0dXJuIG5ldyBGaWxlUmVzb3VyY2VPdXRwdXRTdHJlYW0oY29udGV4dCwgZmlsZSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLSAgfQotCi0gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBOYXVnaHR5IGJpdHMuLi4KLSAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8KLSAgLy8gQ3JlYXRlcyBhIHBhdGggb2YgZm9sZGVycy4KLSAgLy8gRG8gbm90IGNhbGwgd2l0aCBhbiBhYnNvbHV0ZVBhdGggb2YgbGVzcyB0aGFuIG9uZSBzZWdtZW50LgotICAvLwotICAvKioKLSAgICogQ3JlYXRlcyBhIHBhdGggb2YgZm9sZGVycy4KLSAgICogRG8gbm90IGNhbGwgd2l0aCBhbiBhYnNvbHV0ZVBhdGggb2YgbGVzcyB0aGFuIG9uZSBzZWdtZW50LgotICAgKiBAcGFyYW0gcmVzb3VyY2VDb250ZXh0IHRoZSByZXNvdXJjZSBjb250ZXh0IGZvciBtYWtpbmcgZm9sZGVycy4KLSAgICogQHBhcmFtIGFic29sdXRlUGF0aCB0aGUgcGF0aCBvZiBmb2xkZXJzIHRoYXQgd2lsbCBiZSBjcmVhdGVkLgotICAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIHRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIGJlIHVzZWQuCi0gICAqIEBwYXJhbSBzdGF0dXNIYW5kbGVyIHRoZSBzdGF0dXMgaGFuZGxlci4KLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBJQ29udGFpbmVyIG9mIHRoZSBjcmVhdGVkIGZvbGRlci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSUNvbnRhaW5lciBtYWtlRm9sZGVyUGF0aCAoCi0gICAgUmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQsCi0gICAgSVBhdGggICAgICAgICAgICBhYnNvbHV0ZVBhdGgsCi0gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgSVN0YXR1c0hhbmRsZXIgICAgc3RhdHVzSGFuZGxlciApCi0gIAotICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoYWJzb2x1dGVQYXRoLnNlZ21lbnRDb3VudCgpIDw9IDEpCi0gICAgewotICAgICAgcmV0dXJuIGdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KGFic29sdXRlUGF0aC5zZWdtZW50KDApKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIElDb250YWluZXIgcGFyZW50ID0gbWFrZUZvbGRlclBhdGgocmVzb3VyY2VDb250ZXh0LCBhYnNvbHV0ZVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIgKTsKLSAgICAgIFN0cmluZyBmb2xkZXJOYW1lID0gYWJzb2x1dGVQYXRoLmxhc3RTZWdtZW50KCk7Ci0gICAgICAKLSAgICAgIGNoZWNrUGFyZW50KCBwYXJlbnQsIGFic29sdXRlUGF0aCApOwotICAgICAgcmV0dXJuIG1ha2VGb2xkZXIocmVzb3VyY2VDb250ZXh0LCBwYXJlbnQsZm9sZGVyTmFtZSwgcHJvZ3Jlc3NNb25pdG9yICwgc3RhdHVzSGFuZGxlciApOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja1BhcmVudCggSUNvbnRhaW5lciBwYXJlbnQsIElQYXRoIGFic29sdXRlUGF0aCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBpZiggcGFyZW50ID09IG51bGwgKQotICAgIHsKLSAgICAgIC8vIFRoZSBwYXJlbnQgaXMgbnVsbCwgc28gdGhlcmUgbXVzdCBoYXZlIGJlZW4gcHJvYmxlbXMgY3JlYXRpbmcgaXQuICBXZSB3aWxsIHRocm93Ci0gICAgICAvLyBhIENvcmVFeGNlcHRpb24gd2FybmluZyBmb3IgdGhpcyBwcm9ibGVtLgotICAgICAgSVBhdGggIHBhcmVudFBhdGggPSBhYnNvbHV0ZVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpOwotICAgICAgU3RyaW5nIGZvbGRlclBhdGggPSBhYnNvbHV0ZVBhdGgubGFzdFNlZ21lbnQoKTsKLSAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKCBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0ZPTERFUl9DUkVBVElPTl9ESVNBQkxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117IHBhcmVudFBhdGgudG9TdHJpbmcoKSwgZm9sZGVyUGF0aH0gKSApICk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIC8vCi0gIC8vIENyZWF0ZXMgYSBmb2xkZXIgdW5kZXIgYSBjb250YWluZXIuCi0gIC8vIFRoZSBjb250YWluZXIgbXVzdCBhbHJlYWR5IGV4aXN0LgotICAvLwotIHByaXZhdGUgc3RhdGljIElGb2xkZXIgbWFrZUZvbGRlciAoCi0gICAgUmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQsCi0gICAgSUNvbnRhaW5lciAgICAgICBwYXJlbnQsCi0gICAgU3RyaW5nICAgICAgICAgICBmb2xkZXJOYW1lLAotICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgIElTdGF0dXNIYW5kbGVyICAgIHN0YXR1c0hhbmRsZXIgKQotICAKLSAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIElSZXNvdXJjZSBjaGlsZCAgPSBwYXJlbnQuZmluZE1lbWJlcihmb2xkZXJOYW1lKTsKLSAgICBDaG9pY2UgICAgcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBpZiggY2hpbGQgPT0gbnVsbCApCi0gICAgewotICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpKSAgCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHN0YXR1c0hhbmRsZXIucmVwb3J0KAotICAgICAgICAgICAgICAgIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoCi0gICAgICAgICAgICAgICAgCQlOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9GT0xERVJfQ1JFQVRJT05fRElTQUJMRUQsCi0gICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeyBwYXJlbnQuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCBmb2xkZXJOYW1lfSApICksIAotICAgICAgICAgICAgICAgIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpICk7Ci0gICAgICAgIAotICAgICAgICBpZiggcmVzdWx0ID09IG51bGwgfHwgcmVzdWx0LmdldFNob3J0Y3V0KCkgPT0gJ0MnICkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIHJlc3VsdC5nZXRTaG9ydGN1dCgpID09ICdBJyApCi0gICAgICAgIHsKLSAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgSUZvbGRlciBmb2xkZXIgPSBwYXJlbnQuZ2V0Rm9sZGVyKG5ldyBQYXRoKGZvbGRlck5hbWUpKTsKLSAgICAgIGZvbGRlci5jcmVhdGUodHJ1ZSx0cnVlLG51bGwpOwotICAgICAgcmV0dXJuIGZvbGRlcjsKLSAgICB9Ci0gICAgZWxzZSBpZiggY2hpbGQuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GT0xERVIgKQotICAgIHsKLSAgICAgIHJldHVybiAoSUZvbGRlciljaGlsZDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKAotICAgICAgICBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAKLSAgICAgICAgICAgICAgICAgICAgIlJlc291cmNlVXRpbHMiLAotICAgICAgICAgICAgICAgICAgICAwLCAKLSAgICAgICAgICAgICAgICAgICAgTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZPTERFUiwKLQkJCQkJICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117IHBhcmVudC5nZXRGdWxsUGF0aCgpLmFwcGVuZChmb2xkZXJOYW1lKS50b1N0cmluZygpIH0pLAotCQkJbnVsbCApICk7Ci0gICAgfQotICB9Ci0KLSAgLy8KLSAgLy8gQ3JlYXRlcyBhIGZpbGUgdW5kZXIgYSBjb250YWluZXIuCi0gIC8vIFRoZSBjb250YWluZXIgbXVzdCBhbHJlYWR5IGV4aXN0LgotICAvLwotIHByaXZhdGUgc3RhdGljIElGaWxlIG1ha2VGaWxlICgKLSAgICBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCwKLSAgICBJQ29udGFpbmVyICAgICAgIHBhcmVudCwKLSAgICBTdHJpbmcgICAgICAgICAgIGZpbGVOYW1lLAotICAgIElucHV0U3RyZWFtICAgICAgaW5wdXRTdHJlYW0sCi0gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgSVN0YXR1c0hhbmRsZXIgICAgc3RhdHVzSGFuZGxlciApCi0gCi0gICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIElSZXNvdXJjZSBjaGlsZCAgPSBwYXJlbnQuZmluZE1lbWJlcihmaWxlTmFtZSk7Ci0gICAgQ2hvaWNlICAgIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgaWYoIGNoaWxkICE9IG51bGwgKQotICAgIHsKLSAgICAgIGlmKCBjaGlsZC5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUgKQotICAgICAgewotICAgICAgICBpZiggIXJlc291cmNlQ29udGV4dC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpICkgICAKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IHN0YXR1c0hhbmRsZXIucmVwb3J0KCAKLSAgICAgICAgICAgICAgICBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksZmlsZU5hbWV9KSApLAkJCQkJICAJCSAgICAKLSAgICAgICAgICAgICAgICBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCByZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQuZ2V0U2hvcnRjdXQoKSA9PSAnQycgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmKCByZXN1bHQuZ2V0U2hvcnRjdXQoKSA9PSAnQScgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9CQotICAgICAgICAKLSAgICAgICAgLy9XZSBoYXZlIHBlcm1pc3Npb24gdG8gb3ZlcndyaXRlIHNvIGNoZWNrIGlmIGZpbGUgaXMgcmVhZC1vbmx5Ci0gICAgICAgIGlmKCBjaGlsZC5nZXRSZXNvdXJjZUF0dHJpYnV0ZXMoKS5pc1JlYWRPbmx5KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgaWYoICFyZXNvdXJjZUNvbnRleHQuaXNDaGVja291dEZpbGVzRW5hYmxlZCgpICkgCi0gICAgICAgICAgeyAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdHVzSGFuZGxlci5yZXBvcnQoIAotICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFX0NIRUNLT1VUX0RJU0FCTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117IHBhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksZmlsZU5hbWV9ICkgKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkgKTsKLSAgICAgICAgICAgIAotCQkgICAgaWYoIHJlc3VsdCA9PSBudWxsIHx8IHJlc3VsdC5nZXRTaG9ydGN1dCgpID09ICdDJyApCi0JCSAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiBudWxsOwotCQkgICAgfQotICAgICAgICAgICAgZWxzZSBpZiggcmVzdWx0LmdldFNob3J0Y3V0KCkgPT0gJ0EnICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzb3VyY2VDb250ZXh0LnNldENoZWNrb3V0RmlsZXNFbmFibGVkKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIElGaWxlW10gZmlsZXMgPSBuZXcgSUZpbGVbMV07Ci0gICAgICAgICAgZmlsZXNbMF0gPSAoSUZpbGUpY2hpbGQ7Ci0gICAgICAgICAgCi0gICAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBnZXRXb3Jrc3BhY2UoKS52YWxpZGF0ZUVkaXQoZmlsZXMsbnVsbCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgc3RhdHVzSGFuZGxlci5yZXBvcnQoIHN0YXR1cyApOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCggU3RhdHVzRXhjZXB0aW9uIGV4YyApCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy9DaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBleGlzdGluZyBmaWxlLgotICAgICAgICBJRmlsZSBmaWxlID0gcGFyZW50LmdldEZpbGUoIG5ldyBQYXRoKGZpbGVOYW1lKSApOwotICAgICAgICBmaWxlLnNldENvbnRlbnRzKCBpbnB1dFN0cmVhbSwgdHJ1ZSwgdHJ1ZSwgbnVsbCApOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZpbGU7Ci0gICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oIAotICAgICAgICAgIG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgIlJlc291cmNlVXRpbHMiLAotICAgICAgICAgICAgICAgICAgICAgIDAsIAotICAgICAgICAgICAgICAgICAgICAgIE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GSUxFLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS5hcHBlbmQoZmlsZU5hbWUpfSksCi0JCQkJCSAgbnVsbCApICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL0NyZWF0ZSBhIG5ldyBmaWxlLgotICAgICAgSUZpbGUgZmlsZSA9IHBhcmVudC5nZXRGaWxlKCBuZXcgUGF0aChmaWxlTmFtZSkgKTsKLSAgICAgIGZpbGUuY3JlYXRlKCBpbnB1dFN0cmVhbSwgdHJ1ZSwgbnVsbCk7Ci0gICAgICAKLSAgICAgIHJldHVybiBmaWxlOwotICAgIH0KLSAgfQotCi0gCi0gLyoqCi0gICAqIENyZWF0ZXMgYSBmaWxlIG9mIHRoZSBnaXZlbiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+Ci0gICAqIGFuZCByZXR1cm5zIGl0cyBoYW5kbGUgYXMgYW4gPGNvZGU+SUZpbGU8L2NvZGU+LgotICAgKiBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgY3JlYXRlZCwgYQotICAgKiA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBjb250YWluaW5nIGFuCi0gICAqIDxjb2RlPklTdGF0dXM8L2NvZGU+IG9iamVjdCBpcyB0aHJvd24uCi0gICAqIEBwYXJhbSBhYnNvbHV0ZVBhdGggVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLgotICAgKiBUaGUgcHJvamVjdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIG11c3QgYWxyZWFkeSBleGlzdCwKLSAgICogdGhhdCBpcywgdGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gY3JlYXRlIHByb2plY3RzLgotICAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotICAgKiBAcmV0dXJuIFRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUgSUZpbGV9Ci0gICAqIGhhbmRsZSBvZiB0aGUgZmlsZS4KLSAgICogQHRocm93cyBDb3JlRXhjZXB0aW9uIEFuIGV4Y2VwdGlvbiBjb250YWluaW5nIGFuCi0gICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyBJU3RhdHVzfQotICAgKiB3aXRoIGEgc2V2ZXJpdHkgb2YgPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4gYW5kIGEKLSAgICogbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZS4KLSAgICovCi0gICBwdWJsaWMgc3RhdGljIElGaWxlIGNyZWF0ZUZpbGVBdExvY2F0aW9uICgKLSAgICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLSAgICAgSVBhdGggICAgICAgICAgIGFic29sdXRlUGF0aCwKLSAgICAgSW5wdXRTdHJlYW0gICAgIGlucHV0U3RyZWFtLAotICAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICAgSVN0YXR1c0hhbmRsZXIgICBzdGF0dXNIYW5kbGVyICkKLQotICAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbiAKLSAgIHsgICAgCi0gICAgIGlmICghYWJzb2x1dGVQYXRoLmlzQWJzb2x1dGUoKSkKLSAgICAgewotICAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgIlJlc291cmNlVXRpbHMiLDAsTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUEFUSF9OT1RfQUJTT0xVVEUsbmV3IE9iamVjdFtdIHthYnNvbHV0ZVBhdGgudG9TdHJpbmcoKX0pLG51bGwpKTsKLSAgICAgfQotICAgICBpZiAoYWJzb2x1dGVQYXRoLnNlZ21lbnRDb3VudCgpIDwgMSkKLSAgICAgewotICAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiUmVzb3VyY2VVdGlscyIsMCxOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9QQVRIX0VNUFRZLG5ldyBPYmplY3RbXSB7YWJzb2x1dGVQYXRoLnRvU3RyaW5nKCl9KSxudWxsKSk7Ci0gICAgIH0KLSAgICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8IDIpCi0gICAgIHsKLSAgICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIlJlc291cmNlVXRpbHMiLDAsTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUEFUSF9OT1RfRk9MREVSLG5ldyBPYmplY3RbXSB7YWJzb2x1dGVQYXRoLnRvU3RyaW5nKCl9KSxudWxsKSk7Ci0gICAgIH0KLSAgICAgSUNvbnRhaW5lciBwYXJlbnQgICA9IG1ha2VGb2xkZXJQYXRoQXRMb2NhdGlvbihyZXNvdXJjZUNvbnRleHQsIGFic29sdXRlUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSksIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzSGFuZGxlcik7Ci0gICAgIFN0cmluZyAgICAgZmlsZU5hbWUgPSBhYnNvbHV0ZVBhdGgubGFzdFNlZ21lbnQoKTsKLSAgICAgCi0gICAgIGNoZWNrUGFyZW50KCBwYXJlbnQsIGFic29sdXRlUGF0aCApOwotICAgICAKLSAgICAgcmV0dXJuIG1ha2VGaWxlKHJlc291cmNlQ29udGV4dCwgcGFyZW50LCBmaWxlTmFtZSwgaW5wdXRTdHJlYW0sIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzSGFuZGxlcik7Ci0gICB9Ci0KLS8qKgotICAqIENyZWF0ZXMgYSBwYXRoIG9mIGZvbGRlcnMgdXNpbmcgYWJzb2x1dGUgZmlsZW5hbWVzLgotICAqIERvIG5vdCBjYWxsIHdpdGggYW4gYWJzb2x1dGVQYXRoIG9mIGxlc3MgdGhhbiBvbmUgc2VnbWVudC4KLSAgKiBAcGFyYW0gcmVzb3VyY2VDb250ZXh0IHRoZSByZXNvdXJjZSBjb250ZXh0IGZvciBtYWtpbmcgZm9sZGVycy4KLSAgKiBAcGFyYW0gcmVzb3VyY2UgdGhlIHJlc291cmNlIHRoYXQgd2lsbCBiZSBjcmVhdGVkLgotICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgdGhlIHByb2dyZXNzIG1vbml0b3IgdG8gYmUgdXNlZC4KLSAgKiBAcGFyYW0gc3RhdHVzSGFuZGxlciB0aGUgc3RhdHVzIGhhbmRsZXIuCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBJQ29udGFpbmVyIG9mIHRoZSBjcmVhdGVkIGZvbGRlci4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIElDb250YWluZXIgbWFrZUZvbGRlclBhdGhBdExvY2F0aW9uICgKLSAgIFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0LAotICAgSUNvbnRhaW5lciAgICAgICByZXNvdXJjZSwKLSAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgSVN0YXR1c0hhbmRsZXIgICBzdGF0dXNIYW5kbGVyICkKLSAKLSAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICB7Ci0JIGlmIChyZXNvdXJjZS5leGlzdHMoKSkKLQkgewotCQkgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUNvbnRhaW5lcikKLQkJIHsKLQkJCSByZXR1cm4gKElDb250YWluZXIpIHJlc291cmNlOwotCQkgfQotCQkgZWxzZQotCQkgewotCQkJIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKAotCQkJCQkgbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgCi0JCQkJCQkJICJSZXNvdXJjZVV0aWxzIiwKLQkJCQkJCQkgMCwgCi0JCQkJCQkJIE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GT0xERVIsCi0JCQkJCQkJCQkgbmV3IE9iamVjdFtdeyByZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkgfSksCi0JCQkJCQkJCQkgbnVsbCApICk7Ci0JCSB9Ci0JIH0KLQkgZWxzZQotCSB7Ci0JCSBJQ29udGFpbmVyIHBhcmVudCA9IG1ha2VGb2xkZXJQYXRoQXRMb2NhdGlvbihyZXNvdXJjZUNvbnRleHQsIHJlc291cmNlLmdldFBhcmVudCgpLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIgKTsKLQkJIFN0cmluZyBmb2xkZXJOYW1lID0gcmVzb3VyY2UuZ2V0TmFtZSgpOwotCQkgCi0JCSByZXR1cm4gbWFrZUZvbGRlcihyZXNvdXJjZUNvbnRleHQsIHBhcmVudCwgZm9sZGVyTmFtZSwgcHJvZ3Jlc3NNb25pdG9yICwgc3RhdHVzSGFuZGxlciApOwotCSB9Ci0gfQotIAotIC8qKgotICAqIENyZWF0ZXMgYSBwYXRoIG9mIGZvbGRlcnMuCi0gICogRG8gbm90IGNhbGwgd2l0aCBhbiBhYnNvbHV0ZVBhdGggb2YgbGVzcyB0aGFuIG9uZSBzZWdtZW50LgotICAqIEBwYXJhbSByZXNvdXJjZUNvbnRleHQgdGhlIHJlc291cmNlIGNvbnRleHQgZm9yIG1ha2luZyBmb2xkZXJzLgotICAqIEBwYXJhbSBhYnNvbHV0ZVBhdGggdGhlIHBhdGggb2YgZm9sZGVycyB0aGF0IHdpbGwgYmUgY3JlYXRlZC4KLSAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yIHRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIGJlIHVzZWQuCi0gICogQHBhcmFtIHN0YXR1c0hhbmRsZXIgdGhlIHN0YXR1cyBoYW5kbGVyLgotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgSUNvbnRhaW5lciBvZiB0aGUgY3JlYXRlZCBmb2xkZXIuCi0gICovCi0gcHVibGljIHN0YXRpYyBJQ29udGFpbmVyIG1ha2VGb2xkZXJQYXRoQXRMb2NhdGlvbiAoCi0gICBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCwKLSAgIElQYXRoICAgICAgICAgICAgYWJzb2x1dGVQYXRoLAotICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICBJU3RhdHVzSGFuZGxlciAgICBzdGF0dXNIYW5kbGVyICkKLSAKLSAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gewotIAlyZXR1cm4gbWFrZUZvbGRlclBhdGhBdExvY2F0aW9uKHJlc291cmNlQ29udGV4dCwKLSAJCWdldFdvcmtzcGFjZVJvb3QoKS5nZXRDb250YWluZXJGb3JMb2NhdGlvbihhYnNvbHV0ZVBhdGgpLAotIAkJcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLSB9Ci0gCi0gCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL1N0cmluZ1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9TdHJpbmdVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzRlYTk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL1N0cmluZ1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKioKLSAgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHNvbWUgdXNlZnVsIHN0cmluZyB1dGlsaXRpZXMgdGhhdCBhcmUgbm90IHByb3ZpZGVkIGJ5Ci0gICogZWl0aGVyIFN0cmluZyBvciBTdHJpbmdCdWZmZXIuCi0gICoKLSAgKiBAYXV0aG9yIFBldGVyIE1vb2drCi0gICogQGRhdGUgICBKdWx5IDEzLCAyMDAwCi0qKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBTdHJpbmdVdGlscwotewotICAvKioKLSAgKiBUaGUgcGxhdGZvcm0tc3BlY2lmaWMgbGluZSBzZXBhcmF0b3IuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5FV0xJTkUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0KLSAgcHJpdmF0ZSBTdHJpbmdVdGlscygpe307Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCBzcGxpdHMgYSBzaW5nbGUgbGluZSBvZiB0ZXh0IGludG8gbXVsdGlwbGUgbGluZXMKLSAgICAqIGJhc2VkIG9uIGEgbWF4aW11bSBsaW5lIGxlbmd0aC4gIFRoZSBtZXRob2Qgd2lsbCB0cnkgdG8gZml0IGFzCi0gICAgKiBtYW55IHdvcmRzIGFzIHBvc3NpYmxlIG9udG8gYSBsaW5lIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBtYXhpbXVtCi0gICAgKiBsaW5lIGxlbmd0aC4gIE5vdGU6IHRoZSBvbmx5IGNhc2Ugd2hlcmUgYSBsaW5lIG1pZ2h0IGV4Y2VlZCB0aGUKLSAgICAqIG1heGltdW0gaXMgaWYgYSBzaW5nbGUgd29yZCBpcyBsb25nZXIgdGhhbiB0aGUgbWF4aW11bS4KLSAgICAqIEBwYXJhbSB0ZXh0IGEgc2luZ2xlIGxpbmUgYSB0ZXh0IHRoYXQgaXMgdG8gYmUgc3BsaXQuCi0gICAgKiBAcGFyYW0gbWF4X2xlbmd0aCB0aGUgbWF4aW11bSBsZW5ndGggb2YgZWFjaCBzcGxpdCBsaW5lLgotICAgICogQHJldHVybiBhIHN0cmluZyBhcnJheSBvZiB0aGUgc3BsaXQgbGluZXMuCi0gICoqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIHNwbGl0dGVyKCBTdHJpbmcgdGV4dCwgaW50IG1heF9sZW5ndGggKQotICB7Ci0gICAgVmVjdG9yICAgICAgICAgIHJldHVybl90ZXh0ID0gbmV3IFZlY3RvcigyMCk7Ci0gICAgU3RyaW5nW10gICAgICAgIHJldHVybl9zdHI7Ci0gICAgaW50ICAgICAgICAgICAgIGluZGV4ID0gMDsKLQotICAgIHdoaWxlKCBpbmRleCA8IHRleHQubGVuZ3RoKCkgKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSB0ZXh0LnN1YnN0cmluZyggaW5kZXgsIE1hdGgubWluKCBtYXhfbGVuZ3RoICsgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5sZW5ndGgoKSApICk7Ci0gICAgICBpbnQgc3BhY2VfaW5kZXggPSBzdHIubGFzdEluZGV4T2YoICIgIiApOwotCi0gICAgICBpZiggaW5kZXggKyBzdHIubGVuZ3RoKCkgPCB0ZXh0Lmxlbmd0aCgpICYmCi0gICAgICAgICAgdGV4dC5jaGFyQXQoIGluZGV4ICsgc3RyLmxlbmd0aCgpIC0gMSApICE9ICcgJyAmJgotICAgICAgICAgIHRleHQuY2hhckF0KCBpbmRleCArIHN0ci5sZW5ndGgoKSApICE9ICcgJyAmJgotICAgICAgICAgIHNwYWNlX2luZGV4ICE9IC0xICkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuX3RleHQuYWRkRWxlbWVudCggc3RyLnN1YnN0cmluZyggMCwgc3BhY2VfaW5kZXggKSApOwotICAgICAgICBpbmRleCArPSBzcGFjZV9pbmRleCArIDE7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybl90ZXh0LmFkZEVsZW1lbnQoIHN0ci50cmltKCkgKTsKLSAgICAgICAgaW5kZXggKz0gc3RyLmxlbmd0aCgpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybl9zdHIgPSBuZXcgU3RyaW5nW3JldHVybl90ZXh0LnNpemUoKV07Ci0KLSAgICBmb3IoIGluZGV4ID0gMDsgaW5kZXggPCByZXR1cm5fdGV4dC5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIHJldHVybl9zdHJbaW5kZXhdID0gKFN0cmluZykocmV0dXJuX3RleHQuZWxlbWVudEF0KGluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldHVybl9zdHI7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgd2l0aCBhIHJlcGVhdGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzLgotICAgICogQHBhcmFtIHRoZV9jaGFyIHRoZSBjaGFyYWN0ZXIgdG8gYmUgcmVwZWF0ZWQuCi0gICAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lIHRoaXMgY2hhcmFjdGVyIHNob3VsZCBiZSByZXBlYXRlZC4KLSAgICAqIEByZXR1cm4gdGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgcmVwZWF0ZWQgY2hhcmFjdGVycy4KLSAgKiovCi0gIHN0YXRpYyBwdWJsaWMgU3RyaW5nIHJlcGVhdCggY2hhciB0aGVfY2hhciwgaW50IGNvdW50ICkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCBjb3VudCApOwotCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBidWYuYXBwZW5kKCB0aGVfY2hhciApOwotICAgIH0KLQotICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgZmxhdHRlbnMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHRvIGEgc3RyaW5nLgotICAgICogVGhlIG1ldGhvZCByZXNwZWN0cyBlbWJlZGRlZCB3aGl0ZXNwYWNlIGFuZCBxdW90ZXMuCi0gICAgKiA8dWw+Ci0gICAgKiA8bGk+QW55IGFyZ3VtZW50IHdpdGggZW1iZWRkZWQgd2hpdGVzcGFjZSB3aWxsIGJlIGZsYXR0ZW5lZCBvdXQKLSAgICAqIHdpdGggZW5jbG9zaW5nIHF1b3Rlcy4gRm9yIGV4YW1wbGUsIHRoZSBzaW5nbGUgYXJndW1lbnQKLSAgICAqIDx1PkhlbGxvIFdvcmxkPC91PgotICAgICogd2lsbCBiZSByZXR1cm5lZCBhcwotICAgICogPHU+IkhlbGxvIFdvcmxkIjwvdT4uCi0gICAgKiA8bGk+QW55IGFyZ3VtZW50IHdpdGggcXVvdGVzIHdpbGwgYmUgZmxhdHRlbmVkIG91dCB3aXRoIHRoZQotICAgICogcXVvdGVzIGVzY2FwZWQuIEZvciBleGFtcGxlLCB0aGUgc2luZ2xlIGFyZ3VtZW50Ci0gICAgKiA8dT4iSGFwcHkgZGF5cyI8L3U+Ci0gICAgKiB3aWxsIGJlIHJldHVybmVkIGFzCi0gICAgKiA8dT5cIkhhcHB5IGRheXNcIjwvdT4uCi0gICAgKiA8L3VsPgotICAgICogQHBhcmFtIGFyZ3VtZW50cyBUaGUgYXJyYXkgb2Ygc3RyaW5ncyB0byBmbGF0dGVuLgotICAgICogQHJldHVybiB0aGUgZmxhdHRlbmVkIHN0cmluZy4KLSAgKi8KLSAgc3RhdGljIHB1YmxpYyBTdHJpbmcgZmxhdHRlbkFyZ3VtZW50cyAoIFN0cmluZ1tdIGFyZ3VtZW50cyApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgZm9yIChpbnQgaT0wOyBpPGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAvLwotICAgICAgLy8gQXBwZW5kIGEgc2VwYXJhdG9yIChleGNlcHQgdGhlIGZpcnN0IHRpbWUpLgotICAgICAgLy8KLSAgICAgIGlmIChpID4gMCkgYnVmLmFwcGVuZCgnICcpOwotCi0gICAgICAvLwotICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZS4KLSAgICAgIC8vCi0gICAgICBib29sZWFuIHdoaXRlc3BhY2UgPSBmYWxzZTsKLSAgICAgIGNoYXJbXSBjaGFycyA9IGFyZ3VtZW50c1tpXS50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaj0wOyAhd2hpdGVzcGFjZSAmJiBqPGNoYXJzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjaGFyc1tqXSkpCi0gICAgICAgIHsKLSAgICAgICAgICB3aGl0ZXNwYWNlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLwotICAgICAgLy8gQXBwZW5kIHRoZSBhcmd1bWVudCwgcXVvdGVkIGFzIG5lY2Vzc2FyeS4KLSAgICAgIC8vCi0gICAgICBpZiAod2hpdGVzcGFjZSkgYnVmLmFwcGVuZCgnIicpOwotICAgICAgZm9yIChpbnQgaj0wOyBqPGNoYXJzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoY2hhcnNbal0gPT0gJyInKSBidWYuYXBwZW5kKCdcXCcpOwotICAgICAgICBidWYuYXBwZW5kKGNoYXJzW2pdKTsKLSAgICAgIH0KLSAgICAgIGlmICh3aGl0ZXNwYWNlKSBidWYuYXBwZW5kKCciJyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCBwYXJzZXMgd2hpdGVzcGFjZS1kZWxpbWl0dGVkIGZpbGVuYW1lcyBmcm9tCi0gICAgKiB0aGUgZ2l2ZW4gPGNvZGU+aW5wdXQ8L2NvZGU+IHN0cmVhbS4gPGI+TGltaXRhdGlvbjo8L2I+Ci0gICAgKiBRdW90ZWQgZmlsZW5hbWVzIG9yIGZpbGVuYW1lcyB3aXRoIGVtYmVkZGVkIHdoaXRlc3BhY2UKLSAgICAqIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KLSAgICAqIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgc3RyZWFtLgotICAgICogQHJldHVybiBBbiBlbnVtZXJhdGlvbiBvZiBmaWxlbmFtZXMgZnJvbSB0aGUgc3RyZWFtLgotICAqLwotICBzdGF0aWMgcHVibGljIEVudW1lcmF0aW9uIHBhcnNlRmlsZW5hbWVzRnJvbVN0cmVhbSAoIElucHV0U3RyZWFtIGlucHV0ICkKLSAgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBWZWN0b3IgZmlsZW5hbWVzID0gbmV3IFZlY3Rvcig2NCw2NCk7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG51bGw7Ci0gICAgYnl0ZSBzdGF0ZSA9IFNUQVRFX1dTOwotICAgIGludCBpYyA9IGlucHV0LnJlYWQoKTsKLSAgICB3aGlsZSAoaWMgPj0gMCkKLSAgICB7Ci0gICAgICBjaGFyIGMgPSAoY2hhcilpYzsKLSAgICAgIHN3aXRjaCAoc3RhdGUpCi0gICAgICB7Ci0gICAgICAgIGNhc2UgU1RBVEVfV1M6Ci0gICAgICAgICAgaWYgKCFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYyk7Ci0gICAgICAgICAgICBzdGF0ZSA9IFNUQVRFX05XUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1RBVEVfTldTOgotICAgICAgICAgIGlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gYnVmZmVyLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBmaWxlbmFtZXMuYWRkKGZpbGVuYW1lKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IG51bGw7Ci0gICAgICAgICAgICBzdGF0ZSA9IFNUQVRFX1dTOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGljID0gaW5wdXQucmVhZCgpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZW5hbWVzLmVsZW1lbnRzKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFNUQVRFX1dTID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBTVEFURV9OV1MgPSAxOwotCi0KLSAgLyoqCi0gICogUmV0dXJucyB0cnVlIGlzIHRoZSB0eXBlIHBhc3NlZCBpbiBpcyBhIHByaW10aXZlIGphdmEgdHlwZQotICAqIEBwYXJhbSBjbGFzcyBuYW1lIFN0cmluZwotICAqIEByZXR1cm4gdHJ1ZSBpcyBwcmltaXRpdmUgdHlwZQotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQcmltaXRpdmVUeXBlKFN0cmluZyB0eXBlTmFtZSkgCi0gIHsKLQotICAgIGlmICh0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJib29sZWFuIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImJ5dGUiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiZG91YmxlIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImZsb2F0IikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImludCIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJsb25nIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNob3J0IikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImNoYXIiKSkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLQotICB9Ci0KLSAgLyoqCi0gICogVGhlIG1ldGhvZCByZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIGFsbG93ZWQgaW4gVVJJcwotICAqIGFuZCBub3QgYWxsb3dlZCBpbiBKYXZhIGNsYXNzIG5hbWVzIHRvIGFuIHVuZGVyc2NvcmUgKCdfJykKLSAgKiBAcGFyYW0gVVJJIFN0cmluZwotICAqIEByZXR1cm4gdmFsaWQgSmF2YSBjbGFzcyBuYW1lIFN0cmluZwotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBVUkkyQ2xhc3NOYW1lKCBTdHJpbmcgdXJpICkgewotICAgIFN0cmluZyBjbGFzc05hbWUgPSB1cmk7Ci0gICAgZm9yICggaW50IGkgPSAwOyBpIDwgVVJJX1NZTUJPTFMubGVuZ3RoOyBpKysgKSB7Ci0gICAgCWNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlICggVVJJX1NZTUJPTFNbaV0sIFVOREVSU0NPUkUgKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuZCBhcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGV4Y2VwdGlvbiB0cmFjZWJhY2sgaW5mb3JtYXRpb24gb2YKLSAgICogYSBUaHJvd2FibGUuICBUaGlzIGlzIHRoZSBzYW1lIHRyYWNlYmFjayBkYXRhIHRoYXQgaXMgZGlzcGxheWVkIGJ5IGV4Yy5wcmludFN0YWNrVHJhY2UoKS4KLSAgICogQHBhcmFtIGV4YyB0aGUgZXhjZXB0aW9uCi0gICAqIEByZXR1cm4gYSBzdHJpbmcgYXJyYXkgb2YgdGhlIHRyYWNlYmFjayBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U3RhY2tUcmFjZSggVGhyb3dhYmxlIGV4YyApCi0gIHsKLSAgICBWZWN0b3IgICAgICAgbGluZXMgICAgICAgID0gbmV3IFZlY3RvcigpOwotICAgIFN0cmluZ1dyaXRlciBzdHJpbmdXcml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgIHByaW50V3JpdGVyICA9IG5ldyBQcmludFdyaXRlciggc3RyaW5nV3JpdGVyICk7Ci0gICAgCi0gICAgZXhjLnByaW50U3RhY2tUcmFjZSggcHJpbnRXcml0ZXIgKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBwcmludFdyaXRlci5jbG9zZSgpOwotICAgICAgc3RyaW5nV3JpdGVyLmNsb3NlKCk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gbmVzdGVkRXhjICkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0gICAgCi0gICAgU3RyaW5nUmVhZGVyIHN0cmluZ1JlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoIHN0cmluZ1dyaXRlci50b1N0cmluZygpICk7Ci0gICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyICAgICA9IG5ldyBCdWZmZXJlZFJlYWRlciggc3RyaW5nUmVhZGVyICk7Ci0gICAgU3RyaW5nICAgICAgICAgbGluZSAgICAgICA9IG51bGw7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpOwotICAgIAotICAgICAgd2hpbGUoIGxpbmUgIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGxpbmVzLmFkZCggbGluZS50cmltKCkgKTsKLSAgICAgICAgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIG5lc3RlZEV4YyApCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pbGluZXMudG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gVVJJX1NZTUJPTFMgPSB7Jy0nLCAnficsICcjJywgJy8nLCAnLid9OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFVOREVSU0NPUkUgPSAnXyc7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9XYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vV2FpdEZvckF1dG9CdWlsZENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNkNTFlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9XYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgV2FpdEZvckF1dG9CdWlsZENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbnRpdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAkKLQl0cnkgCi0JewotCSAgUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELCBudWxsKTsKLQl9IAotCWNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleGMgKSAKLQl7Ci0JICAvLyBVSVN5bmNocm9uaXplci5zeW5jRXhlYyBzZWVtcyB0byBpbnRlcnJ1cHQgdGhlIFVJIHRyZWFkIHdoZW4gdGhlIGF1dG9idWlsZGVyIGlzIGRvbmUuICBOb3Qgc3VyZSwgd2h5LgotCSAgLy8gSSdtIGFzc3VtaW5nIGhlcmUgdGhhdCB0aGUgYXV0b2J1aWxkZXIgaGFzIGFjdHVhbGx5IGNvbXBsZXRlZCBpdHMgc3R1ZmYuCQotCX0KLQkJCi0JcmV0dXJuIHN0YXR1czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L0FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZGE5ZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L0FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MjIgICAxODQwMDYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnByZWZlcmVuY2VzLkFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlOwotCi0KLXB1YmxpYyBjbGFzcyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5Ci17Ci0gIHByaXZhdGUgVmVjdG9yIHByZWZlcmVuY2VzXzsKLSAgCi0gIHByaXZhdGUgc3RhdGljIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkgcmVnaXN0cnlfOwotCi0gIHByaXZhdGUgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeSgpCi0gIHsKLSAgICBwcmVmZXJlbmNlc18gPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgbG9hZERpYWxvZ3NQcmVmZXJlbmNlcygpOyAgCi0gIH0KLSAgCi0gIHN0YXRpYyBwdWJsaWMgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiggcmVnaXN0cnlfID09IG51bGwgKQotICAgIHsKLSAgICAgIHJlZ2lzdHJ5XyA9IG5ldyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZWdpc3RyeV87Ci0gIH0KLSAgCi0gIC8vCi0gIHByaXZhdGUgdm9pZCBsb2FkRGlhbG9nc1ByZWZlcmVuY2VzICgpCi0gIHsKLSAgCUlFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxjb25maWcubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50ICAgICAgZWxlbSAgID0gY29uZmlnW2lkeF07ICAgICAKLSAgICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGRpYWxvZyA9IG5ldyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSgpOwotICAgICAgCi0gICAgICBkaWFsb2cuc2V0SWQoIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpICk7Ci0gICAgICBkaWFsb2cuc2V0TmFtZSggZWxlbS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSApOwotICAgICAgZGlhbG9nLnNldEluZm9wb3AoIGVsZW0uZ2V0QXR0cmlidXRlKCJpbmZvcG9wIikgKTsKLSAgICAgIGRpYWxvZy5zZXRUb29sdGlwKCBlbGVtLmdldEF0dHJpYnV0ZSgidG9vbHRpcCIpICk7Ci0gICAgICBkaWFsb2cuc2V0Q2F0ZWdvcnkoIGVsZW0uZ2V0QXR0cmlidXRlKCJjYXRlZ29yeSIpICk7Ci0gICAgICAKLSAgICAgIFN0cmluZyBzaG93Q2hlY2tib3ggPSBlbGVtLmdldEF0dHJpYnV0ZSggInNob3djaGVja2JveCIgKTsKLSAgICAgIFN0cmluZyBhbHdheXNIaWRlICAgPSBlbGVtLmdldEF0dHJpYnV0ZSggImFsd2F5c2hpZGUiICk7Ci0gICAgICAKLSAgICAgIGRpYWxvZy5zZXRTaG93Q2hlY2tib3goIHNob3dDaGVja2JveCA9PSBudWxsID8gdHJ1ZSA6IHNob3dDaGVja2JveC5lcXVhbHMoICJ0cnVlIiApICk7Ci0gICAgICBkaWFsb2cuc2V0QWx3YXlzSGlkZSggYWx3YXlzSGlkZSA9PSBudWxsID8gZmFsc2UgOiBhbHdheXNIaWRlLmVxdWFscyggInRydWUiICkgKTsKLSAgICAgIAotICAgICAgc2V0T2JqZWN0SWRzKCBlbGVtLmdldEF0dHJpYnV0ZSggIm9iamVjdGlkcyIgKSwgZGlhbG9nICk7Ci0gICAgICAKLSAgICAgIHByZWZlcmVuY2VzXy5hZGQoZGlhbG9nKTsgICAgICAgIAotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRPYmplY3RJZHMoIFN0cmluZyBpZExpc3QsIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGRpYWxvZyApCi0gIHsKLSAgICBpZiggaWRMaXN0ICE9IG51bGwgKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIGlkcyA9IGlkTGlzdC5zcGxpdCggIiAiICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBpZHMubGVuZ3RoOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgZGlhbG9nLmFkZE9iamVjdElkKCBpZHNbaW5kZXhdICk7ICAgCi0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIGFsbCByZWdpc3RlcmVkIDxjb2RlPldlYlNlcnZpY2VUeXBlPC9jb2RlPiBvYmplY3RzLgotICAqIEByZXR1cm4gQWxsIHJlZ2lzdGVyZWQgPGNvZGU+V2ViU2VydmljZVR5cGU8L2NvZGU+IG9iamVjdHMuCi0gICovCi0gIHB1YmxpYyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVtdIGdldEFjdGlvbkRpYWxvZ3NQcmVmcmVuY2VzICgpCi0gIHsKLSAgICByZXR1cm4gKEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlW10pcHJlZmVyZW5jZXNfLnRvQXJyYXkoIG5ldyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVswXSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBnZXRBY3Rpb25EaWFsb2dzUHJlZnJlbmNlKCBTdHJpbmcgaWQgKQotICB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcHJlZmVyZW5jZXNfLnNpemUoKTsKLSAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIHByZWZlcmVuY2UgPSAoQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUpcHJlZmVyZW5jZXNfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAgIAotICAgICAgaWYoIHByZWZlcmVuY2UuZ2V0T2JqZWN0SWRzKCkuY29udGFpbnMoIGlkICkgKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBwcmVmZXJlbmNlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDJhNjFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MjIgICAxODQwMDYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnBsdWdpbi5FbnZQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnByZWZlcmVuY2VzLkFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlOwotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dAotewotICBwcml2YXRlIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkgcmVnaXN0cnk7Ci0gIAotICBwcml2YXRlIHN0YXRpYyBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgaW5zdGFuY2VfID0gbnVsbDsKLQotICBwcml2YXRlIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCgpCi0gIHsKLSAgICBzdXBlcihFbnZQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0gIH0KLSAgCi0gIHN0YXRpYyBwdWJsaWMgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmKCBpbnN0YW5jZV8gPT0gbnVsbCApCi0gICAgewotICAgICAgaW5zdGFuY2VfID0gbmV3IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCgpOwotICAgICAgaW5zdGFuY2VfLmxvYWQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvYWQoKQotICB7Ci0gICAgcmVnaXN0cnkgPSBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVbXSBkaWFsb2dzID0gcmVnaXN0cnkuZ2V0QWN0aW9uRGlhbG9nc1ByZWZyZW5jZXMoKTsKLSAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWFsb2dzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHNldERlZmF1bHQoZGlhbG9nc1tpXS5nZXRJZCgpLCBmYWxzZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlW10gZ2V0RGlhbG9ncygpCi0gIHsKLSAgICByZXR1cm4gcmVnaXN0cnkuZ2V0QWN0aW9uRGlhbG9nc1ByZWZyZW5jZXMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFjdGlvbkRpYWxvZ0VuYWJsZWQoU3RyaW5nIGlkLCBib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc2V0VmFsdWUoaWQsIHZhbHVlKTsKLSAgfQotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIHVzdWFsbHkgY2FsbGVkIGZyb20gdGhlIHBvcHVwIHdpemFyZCB3aXRoIHRoZSBJZAotICAvLyBvZiB0aGUgT2JqZWN0Q29udHJpYnV0aW9uIGRlZmluaW5nIHRoZSBwb3B1cC4KLSAgcHVibGljIHZvaWQgc2V0T2JqZWN0QWN0aW9uRGlhbG9nRW5hYmxlZCggU3RyaW5nIGlkLCBib29sZWFuIHZhbHVlICkKLSAgewotICAgIC8vIE5lZWQgdG8gZmlyc3QgZmluZCB0aGUgZGlhbG9nIG9iamVjdCB0aGF0IHJlZmVyZW5jZXMgdGhlIHBvcHVwLgotICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGRpYWxvZyA9IHJlZ2lzdHJ5LmdldEFjdGlvbkRpYWxvZ3NQcmVmcmVuY2UoIGlkICk7Ci0gICAgCi0gICAgaWYoIGRpYWxvZyAhPSBudWxsICkKLSAgICB7Ci0gICAgICBzZXRBY3Rpb25EaWFsb2dFbmFibGVkKCBkaWFsb2cuZ2V0SWQoKSwgdmFsdWUgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzQWN0aW9uRGlhbG9nRW5hYmxlZChTdHJpbmcgaWQpCi0gIHsKLSAgICBpZiAoaWQgPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKGlkKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gc2hvd0RpYWxvZyggU3RyaW5nIGlkICkKLSAgewotICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGRpYWxvZyA9IHJlZ2lzdHJ5LmdldEFjdGlvbkRpYWxvZ3NQcmVmcmVuY2UoIGlkICk7ICAgIAotICAgCi0gICAgLy8gV2UgYXJlIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgdGhlIHBvcHVwIHdpemFyZCBzaG91bGQgYmUgZGlzcGxheWVkCi0gICAgLy8gb3Igbm90IHdpdGggdGhpcyBsb2dpYy4gIElmIHRoZSBkaWFsb2cgdmFyaWFibGUgaXMgbnVsbCB0aGVuCi0gICAgLy8gdGhlcmUgd2FzIG5vIHBvcHVwIGV4dGVuc2lvbiBwb2ludCBwb2ludCBkZWZpbmVkIGZvciB0aGlzIHdpemFyZC4gIEluCi0gICAgLy8gdGhpcyBjYXNlIHdlIHdpbGwgYXNzdW1lIHRoYXQgdGhlIHBvcHVwIHNob3VsZCBhbHdheXMgYmUgZGlzcGxheWVkLgotICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBleHRlbnNpb24gc2F5cyB0aGF0IHRoZSBzaG93IGNoZWNrIGJveCBjb250cm9sCi0gICAgLy8gc2hvdWxkIGJlIGRpc3BsYXllZCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdpemFyZCBzaG91bGQgbm90IGFsd2F5cwotICAgIC8vIGJlIGhpZGRlbiwgYXMgd2VsbCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBjdXJyZW50IHNldHRpbmcgb2YgdGhlIGNoZWNrCi0gICAgLy8gYm94IHZpYSB0aGUgaXNBY3Rpb25EaWFsb2dFbmFibGVkIGNhbGwuICBJZiB0aGUgc2hvdyBjaGVjayBib3ggc3RhdGUKLSAgICAvLyBkZWZpbmVkIGluIHRoZSBleHRlbnNpb24gaXMgZmFsc2UsIGJ1dCBhbHdheXMgaGlkZSBpcyBhbHNvIGZhbHNlIHRoZW4KLSAgICAvLyB3ZSB3aWxsIGRpc3BsYXkgdGhlIHBvcCB3aXphcmQuCi0gICAgcmV0dXJuIGRpYWxvZyA9PSBudWxsIHx8Ci0gICAgICAgICAgICggKCBkaWFsb2cuZ2V0U2hvd0NoZWNrYm94KCkgJiYgCi0gICAgICAgICAgICAgICAhZGlhbG9nLmdldEFsd2F5c0hpZGUoKSAmJiAKLSAgICAgICAgICAgICAgICFpc0FjdGlvbkRpYWxvZ0VuYWJsZWQoIGRpYWxvZy5nZXRJZCgpKSApIHx8Ci0gICAgICAgICAgICAgKCAhZGlhbG9nLmdldFNob3dDaGVja2JveCgpICYmIAotICAgICAgICAgICAgICAgIWRpYWxvZy5nZXRBbHdheXNIaWRlKCkgKSApOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBzaG93Q2hlY2tib3goIFN0cmluZyBpZCApCi0gIHsKLSAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBkaWFsb2cgPSByZWdpc3RyeS5nZXRBY3Rpb25EaWFsb2dzUHJlZnJlbmNlKCBpZCApOyAgICAKLSAgICAKLSAgICByZXR1cm4gZGlhbG9nID09IG51bGwgPyBmYWxzZSA6IGRpYWxvZy5nZXRTaG93Q2hlY2tib3goKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudENvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFhNWJkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudENvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LkNvbnRleHQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIGFzIHRoZSBiYXNlIGNsYXNzIGZvciB0eXBlcyB0aGF0IHdoYXQgdG8gcGVyc2lzdCBwcmVmZXJlbmNlCi0gKiBkYXRhIGluIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMgYXJlYS4KLSAqCi0gKgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGVyc2lzdGVudENvbnRleHQgaW1wbGVtZW50cyBDb250ZXh0Ci17Ci0gcHJvdGVjdGVkIFByZWZlcmVuY2VzIHByZWZlcmVuY2VzXzsKLSBwcm90ZWN0ZWQgUGx1Z2luIHBsdWdpbl87Ci0KLSBwdWJsaWMgUGVyc2lzdGVudENvbnRleHQgKCBQbHVnaW4gcGx1Z2luKQotIAl7Ci0gCQlwbHVnaW5fID0gcGx1Z2luOwotIAkgIAlwcmVmZXJlbmNlc18gPSBwbHVnaW4uZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLSAJfQotCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCBmb3IgYSBib29sZWFuIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0RGVmYXVsdCAoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpIHsKLSAJcHJlZmVyZW5jZXNfLnNldERlZmF1bHQobmFtZSwgdmFsdWUpOwotIAl9Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0IChTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7Ci0gCXByZWZlcmVuY2VzXy5zZXREZWZhdWx0KG5hbWUsdmFsdWUpOwotIAl9Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCBmb3IgYSBpbnQgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0IChTdHJpbmcgbmFtZSwgaW50IHZhbHVlKSB7Ci0gCXByZWZlcmVuY2VzXy5zZXREZWZhdWx0KG5hbWUsdmFsdWUpOwotIAl9Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0VmFsdWUgKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLSAJcHJlZmVyZW5jZXNfLnNldFZhbHVlKG5hbWUsdmFsdWUpOwotIAlwbHVnaW5fLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOwotIAl9Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgYm9vbGVhbiBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldFZhbHVlIChTdHJpbmcgbmFtZSwgYm9vbGVhbiB2YWx1ZSkgewotIAlwcmVmZXJlbmNlc18uc2V0VmFsdWUobmFtZSwgdmFsdWUpOwotIAlwbHVnaW5fLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOwotIAl9Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgaW50IHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0VmFsdWUgKFN0cmluZyBuYW1lLCBpbnQgdmFsdWUpIHsKLSAJcHJlZmVyZW5jZXNfLnNldFZhbHVlKG5hbWUsIHZhbHVlKTsKLSAJcGx1Z2luXy5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRWYWx1ZUFzU3RyaW5nICggU3RyaW5nIG5hbWUpIHsKLSAJcmV0dXJuIHByZWZlcmVuY2VzXy5nZXRTdHJpbmcobmFtZSk7Ci0gCX0KLSAKLSAvKioKLSAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBib29sZWFuIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcmV0dXJuIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRWYWx1ZUFzQm9vbGVhbiAoIFN0cmluZyBuYW1lKSB7Ci0gCXJldHVybiBwcmVmZXJlbmNlc18uZ2V0Qm9vbGVhbihuYW1lKTsKLSAJfQotICAKLSAgLyoqCi0gICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIGludCBwcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAgKiBAcmV0dXJuIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAgKi8KLSBwdWJsaWMgaW50IGdldFZhbHVlQXNJbnQoIFN0cmluZyBuYW1lKSB7Ci0gCQlyZXR1cm4gcHJlZmVyZW5jZXNfLmdldEludChuYW1lKTsKLSAJfQotIAotIC8qKgotICAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcmV0dXJuIHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIFN0cmluZyBnZXREZWZhdWx0U3RyaW5nKFN0cmluZyBuYW1lKQotIHsKLSAJcmV0dXJuIHByZWZlcmVuY2VzXy5nZXREZWZhdWx0U3RyaW5nKG5hbWUpOwotIH0KLSAKLSAvKioKLSAgKiBHZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgYm9vbGVhbiBnZXREZWZhdWx0Qm9vbGVhbihTdHJpbmcgbmFtZSkKLSB7Ci0gCXJldHVybiBwcmVmZXJlbmNlc18uZ2V0RGVmYXVsdEJvb2xlYW4obmFtZSk7Ci0gfQotIAotIC8qKgotICAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgaW50IHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcmV0dXJuIHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIGludCBnZXREZWZhdWx0SW50KFN0cmluZyBuYW1lKQotIHsKLSAJcmV0dXJuIHByZWZlcmVuY2VzXy5nZXREZWZhdWx0SW50KG5hbWUpOwotIH0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHN0cmluZyBwcmVmZXJlbmNlIGlmIGEgZGVmYXVsdCB2YWx1ZSBoYXMKLSAgKiBub3QgYWxyZWFkeSBiZWVuIHNldC4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlCi0gICovCi0gcHVibGljIHZvaWQgc2V0RGVmYXVsdFN0cmluZ0lmTm9EZWZhdWx0KCBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUgKQotIHsKLSAgIC8vIElmIHRoZSBrZXkgYWxyZWFkeSBoYXMgYSBkZWZhdWx0IHZhbHVlIHdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgaXQuCi0gICBpZiggcHJlZmVyZW5jZXNfLmdldERlZmF1bHRTdHJpbmcoIGtleSApLmVxdWFscygiIikgKSAKLSAgIHsKLSAgICAgcHJlZmVyZW5jZXNfLnNldERlZmF1bHQoIGtleSwgdmFsdWUgKTsKLSAgIH0KLSB9Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBib29sZWFuIHByZWZlcmVuY2UgaWYgYSBkZWZhdWx0IHZhbHVlIGhhcwotICAqIG5vdCBhbHJlYWR5IGJlZW4gc2V0LgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KCBTdHJpbmcga2V5LCBib29sZWFuIHZhbHVlICkKLSB7Ci0gICAvLyBJZiB0aGUga2V5IGFscmVhZHkgaGFzIGEgZGVmYXVsdCB2YWx1ZSB3ZSBkb24ndCB3YW50IHRvIG92ZXJyaWRlIGl0LgotICAgaWYoIHByZWZlcmVuY2VzXy5nZXREZWZhdWx0U3RyaW5nKCBrZXkgKS5lcXVhbHMoIiIpICkgCi0gICB7Ci0gICAgIHByZWZlcmVuY2VzXy5zZXREZWZhdWx0KCBrZXksIHZhbHVlICk7Ci0gICB9Ci0gfQotIAotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgaW50IHByZWZlcmVuY2UgaWYgYSBkZWZhdWx0IHZhbHVlIGhhcwotICAqIG5vdCBhbHJlYWR5IGJlZW4gc2V0LgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0SW50SWZOb0RlZmF1bHQoIFN0cmluZyBrZXksIGludCB2YWx1ZSApCi0gewotICAgLy8gSWYgdGhlIGtleSBhbHJlYWR5IGhhcyBhIGRlZmF1bHQgdmFsdWUgd2UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZSBpdC4KLSAgIGlmKCBwcmVmZXJlbmNlc18uZ2V0RGVmYXVsdFN0cmluZygga2V5ICkuZXF1YWxzKCIiKSApIAotICAgewotICAgICBwcmVmZXJlbmNlc18uc2V0RGVmYXVsdCgga2V5LCB2YWx1ZSApOwotICAgfQotIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmZiNGJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlRGVmYXVsdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnBsdWdpbi5FbnZQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dCBpbXBsZW1lbnRzIFJlc291cmNlQ29udGV4dAotewotICBwcml2YXRlIHN0YXRpYyBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0IGNvbnRleHRfID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiggY29udGV4dF8gPT0gbnVsbCApCi0gICAgewotICAgICAgY29udGV4dF8gPSBuZXcgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCgpOwotICAgICAgY29udGV4dF8ubG9hZCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29udGV4dF87Ci0gIH0KLSAgCi0gIHByaXZhdGUgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCgpCi0gIHsKLSAgICBzdXBlcihFbnZQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2FkKCkKLSAgewotICAgIHNldERlZmF1bHQoUFJFRkVSRU5DRV9PVkVSV1JJVEUsIFJlc291cmNlRGVmYXVsdHMKLSAgICAgICAgLmdldE92ZXJ3cml0ZUZpbGVzRGVmYXVsdCgpKTsKLSAgICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfQ1JFQVRFX0ZPTERFUlMsIFJlc291cmNlRGVmYXVsdHMKLSAgICAgICAgLmdldENyZWF0ZUZvbGRlcnNEZWZhdWx0KCkpOwotICAgIHNldERlZmF1bHQoUFJFRkVSRU5DRV9DSEVDS09VVCwgUmVzb3VyY2VEZWZhdWx0cy5nZXRDaGVja291dEZpbGVzRGVmYXVsdCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChib29sZWFuIGVuYWJsZSkKLSAgewotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfT1ZFUldSSVRFLCBlbmFibGUpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfT1ZFUldSSVRFKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENyZWF0ZUZvbGRlcnNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKQotICB7Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9DUkVBVEVfRk9MREVSUywgZW5hYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfQ1JFQVRFX0ZPTERFUlMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpCi0gIHsKLSAgICBzZXRWYWx1ZShQUkVGRVJFTkNFX0NIRUNLT1VULCBlbmFibGUpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNDaGVja291dEZpbGVzRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9DSEVDS09VVCk7Ci0gIH0KLQotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGNvcHkoKQotICB7Ci0gICAgUmVzb3VyY2VDb250ZXh0IGNjID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotICAgIGNjLnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZChpc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKTsKLSAgICBjYy5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZChpc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCkpOwotICAgIGNjLnNldENoZWNrb3V0RmlsZXNFbmFibGVkKGlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0gICAgcmV0dXJuIGNjOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9BY2N1bXVsYXRlU3RhdHVzSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzAzMGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9BY2N1bXVsYXRlU3RhdHVzSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUxMCAgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgZXh0ZW5kcyBCYXNlU3RhdHVzSGFuZGxlcnsKLQotCUFycmF5TGlzdCBzdGF0dXNMaXN0XyA9IG51bGw7Ci0JQXJyYXlMaXN0IGVycm9yTGlzdF8gPSBudWxsOwotCUFycmF5TGlzdCB3YXJuaW5nTGlzdF8gPSBudWxsOwotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKCl7Ci0JCXJlc2V0U3RhdHVzKCk7Ci0JfQotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciByZWxvYWRpbmcgc3RhdHVzIHZhbHVlcyBhbmQgdXNpbmcgdGhlIHV0aWxpdHkgbWV0aG9kcwotCSAqLwotCXB1YmxpYyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihJU3RhdHVzW10gc3RhdHVzKXsKLQkJcmVzZXRTdGF0dXMoKTsKLQkJZm9yIChpbnQgaT0wO2k8c3RhdHVzLmxlbmd0aDtpKyspCi0JCQlzdGF0dXNMaXN0Xy5hZGQoc3RhdHVzW2ldKTsKLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkgewotCSAgICBJU3RhdHVzIHdvcnN0U3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgICAgCi0JICAgIC8vIEZpbmQgdGhlIHdvcnN0IGVycm9yIHN0YXR1cyBjb2RlCi0JICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBzdGF0dXNMaXN0Xy5zaXplKCk7IGluZGV4KysgKQotCSAgICB7Ci0JICAgICAgSVN0YXR1cyBzdGF0dXMgPSAoSVN0YXR1cylzdGF0dXNMaXN0Xy5nZXQoIGluZGV4ICk7Ci0JICAgICAgCi0JICAgICAgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID4gd29yc3RTdGF0dXMuZ2V0U2V2ZXJpdHkoKSApCi0JICAgICAgewotCSAgICAgICAgd29yc3RTdGF0dXMgPSBzdGF0dXM7Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIAotCSAgICByZXR1cm4gd29yc3RTdGF0dXM7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVzZXRTdGF0dXMoKSB7Ci0JICAgIHN0YXR1c0xpc3RfID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICBlcnJvckxpc3RfID0gbnVsbDsKLQkgICAgd2FybmluZ0xpc3RfID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXBvcnQoSVN0YXR1cyBzdGF0dXMpIHRocm93cyBTdGF0dXNFeGNlcHRpb24gewotCQlzdGF0dXNMaXN0Xy5hZGQoc3RhdHVzKTsKLQl9Ci0KLQlwdWJsaWMgQ2hvaWNlIHJlcG9ydChJU3RhdHVzIHN0YXR1cywgQ2hvaWNlW10gY2hvaWNlcykgewotCSAgCUNob2ljZSByZXN1bHQgPSBudWxsOwotCSAgCQotCSAgCS8vIEFsd2F5cyB0YWtlIHRoZSBmaXJzdCBjaG9pY2UgaWYgYXZhaWxhYmxlLgotCSAgICBpZiggY2hvaWNlcyAhPSBudWxsICYmIGNob2ljZXMubGVuZ3RoID4gMCApCi0JICAgIHsKLQkgICAgCXJlc3VsdCA9IGNob2ljZXNbMF07Ci0JICAgIH0KLQkgICAgCi0JICAgIHN0YXR1c0xpc3RfLmFkZCggc3RhdHVzICk7Ci0JICAgIAotCSAgICByZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyB2b2lkIHJlcG9ydEVycm9yKElTdGF0dXMgc3RhdHVzKSB7Ci0JCXN0YXR1c0xpc3RfLmFkZChzdGF0dXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlcG9ydEluZm8oSVN0YXR1cyBzdGF0dXMpIHsKLQkJc3RhdHVzTGlzdF8uYWRkKHN0YXR1cyk7Ci0JfQotCQotCS8qKgotCSAqIEZvciB1c2UgYnkgYXNzZXJ0aW9uIG1ldGhvZHMKLQkgKiBAcmV0dXJuIElTdGF0dXNbXQotCSAqLwotCXB1YmxpYyBJU3RhdHVzW10gZ2V0QWxsUmVwb3J0cygpewotCQlpZiAoc3RhdHVzTGlzdF89PW51bGwgfHwgc3RhdHVzTGlzdF8uaXNFbXB0eSgpKXsKLQkJCXJldHVybiBuZXcgSVN0YXR1c1tde1N0YXR1cy5PS19TVEFUVVN9OwotCQl9Ci0JCXJldHVybiAoSVN0YXR1c1tdKXN0YXR1c0xpc3RfLnRvQXJyYXkobmV3IElTdGF0dXNbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgZXJyb3Igc3RhdHVzZXMgb25seQotCSAqIEByZXR1cm4gSVN0YXR1c1tdCi0JICovCi0JcHVibGljIElTdGF0dXNbXSBnZXRFcnJvclJlcG9ydHMoKXsKLQkJaWYgKGVycm9yTGlzdF89PW51bGwpCi0JCQlzb3J0UmVwb3J0cygpOwotCSAgICByZXR1cm4gKElTdGF0dXNbXSllcnJvckxpc3RfLnRvQXJyYXkobmV3IElTdGF0dXNbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgd2FybmluZyBzdGF0dXNlcyBvbmx5Ci0JICogQHJldHVybiBJU3RhdHVzW10KLQkgKi8KLQlwdWJsaWMgSVN0YXR1c1tdIGdldFdhcm5pbmdSZXBvcnRzKCl7Ci0JCWlmICh3YXJuaW5nTGlzdF89PW51bGwpCi0JCQlzb3J0UmVwb3J0cygpOwotCQlyZXR1cm4gKElTdGF0dXNbXSl3YXJuaW5nTGlzdF8udG9BcnJheShuZXcgSVN0YXR1c1swXSk7Ci0JfQotCQotCS8qKgotCSAqIFNvcnQgYWxsIHN0YXR1cyByZXBvcnRzCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNvcnRSZXBvcnRzKCl7Ci0JICAgIGVycm9yTGlzdF8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIHdhcm5pbmdMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgCi0JICAgIC8vIFNvcnQgYWNjb3JkaW5nIHRvIGVycm9yIHN0YXR1cyBjb2RlCi0JICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBzdGF0dXNMaXN0Xy5zaXplKCk7IGluZGV4KysgKQotCSAgICB7Ci0JICAgICAgSVN0YXR1cyBzdGF0dXMgPSAoSVN0YXR1cylzdGF0dXNMaXN0Xy5nZXQoaW5kZXgpOwotCSAgICAgIAotCSAgICAgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09IElTdGF0dXMuRVJST1IpewotCSAgICAgICAgZXJyb3JMaXN0Xy5hZGQoc3RhdHVzKTsKLQkgICAgICB9Ci0JICAgICAgZWxzZSBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PUlTdGF0dXMuV0FSTklORyl7Ci0JICAgICAgICB3YXJuaW5nTGlzdF8uYWRkKHN0YXR1cyk7Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIAotCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvQmFzZUVjbGlwc2VFbnZpcm9ubWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Jhc2VFY2xpcHNlRW52aXJvbm1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMwYTQzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvQmFzZUVjbGlwc2VFbnZpcm9ubWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBhZGRzIHJlc291cmNlcyB0byB0aGUgYmFzZSBJRW52aXJvbm1lbnQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQmFzZUVjbGlwc2VFbnZpcm9ubWVudCBleHRlbmRzIElFbnZpcm9ubWVudCAKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBSZXNvdXJjZUNvbnRleHQgb2JqZWN0IGZvciB0aGlzIGVudmlyb25tZW50LgotICAgKi8JCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvQmFzZVN0YXR1c0hhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9CYXNlU3RhdHVzSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTU5YzRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9CYXNlU3RhdHVzSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBCYXNlU3RhdHVzSGFuZGxlciBpbXBsZW1lbnRzIElFY2xpcHNlU3RhdHVzSGFuZGxlcgotewotICBwcml2YXRlIElTdGF0dXMgd29yc3RTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAKLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkgCi0gIHsKLQlyZXR1cm4gd29yc3RTdGF0dXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXNldFN0YXR1cygpIAotICB7Ci0gICAgd29yc3RTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwkJCi0gIH0KLQotICBwdWJsaWMgdm9pZCByZXBvcnQoSVN0YXR1cyBzdGF0dXMpIHRocm93cyBTdGF0dXNFeGNlcHRpb24gCi0gIHsKLSAgICBjaGVja1N0YXR1cyhzdGF0dXMpOwotICB9Ci0KLSAgcHVibGljIENob2ljZSByZXBvcnQoSVN0YXR1cyBzdGF0dXMsIENob2ljZVtdIGNob2ljZXMpIAotICB7Ci0JY2hlY2tTdGF0dXMoc3RhdHVzKTsKLQlyZXR1cm4gY2hvaWNlcyA9PSBudWxsIHx8IGNob2ljZXMubGVuZ3RoID09IDA/IG51bGwgOiBjaG9pY2VzWzBdOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVwb3J0RXJyb3IoSVN0YXR1cyBzdGF0dXMpIAotICB7Ci0JY2hlY2tTdGF0dXMoc3RhdHVzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlcG9ydEluZm8oSVN0YXR1cyBzdGF0dXMpIAotICB7Ci0JY2hlY2tTdGF0dXMoc3RhdHVzKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY2hlY2tTdGF0dXMoIElTdGF0dXMgc3RhdHVzICkKLSAgewotICAgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA+IHdvcnN0U3RhdHVzLmdldFNldmVyaXR5KCkgKQotICAgIHsKLSAgICAgIHdvcnN0U3RhdHVzID0gc3RhdHVzOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0VjbGlwc2VFbnZpcm9ubWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0VjbGlwc2VFbnZpcm9ubWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODY1NWI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9FY2xpcHNlRW52aXJvbm1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkVudmlyb25tZW50U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5TaW1wbGVVUklGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLklVUklGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLklVUklTY2hlbWU7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYW4gSUVudmlyb25tZW50IGNsYXNzIGZvciB0aGUgRWNsaXBzZSBJRW52aXJvbm1lbnQuCi0gKiBUaGlzIElFbnZpcm9ubWVudCBjdXJyZW50bHkgc3VwcG9ydHMgdGhlICJwbGF0Zm9ybSIgcHJvdG9jb2wgYW5kIHRoZSAiZmlsZSIKLSAqIHByb3RvY29sLgotICoKLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VFbnZpcm9ubWVudCBpbXBsZW1lbnRzIEJhc2VFY2xpcHNlRW52aXJvbm1lbnQKLXsKLSAgcHJpdmF0ZSBDb21tYW5kTWFuYWdlciAgIGNvbW1hbmRNYW5hZ2VyXyAgPSBudWxsOwotICBwcml2YXRlIFNpbXBsZVVSSUZhY3RvcnkgdXJpRmFjdG9yeV8gICAgICA9IG51bGw7Ci0gIHByaXZhdGUgUmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHRfID0gbnVsbDsKLSAgcHJpdmF0ZSBJU3RhdHVzSGFuZGxlciAgICBzdGF0dXNIYW5kbGVyXyAgID0gbnVsbDsKLSAgcHJpdmF0ZSBJTG9nICAgICAgICAgICAgICBsb2dnZXJfICAgICAgICAgID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBFY2xpcHNlRW52aXJvbm1lbnQoIENvbW1hbmRNYW5hZ2VyICBjb21tYW5kTWFuYWdlciwgCi0gCQkgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLQkJCQkJCSAgICAgICAgICAgICAgICAgSVN0YXR1c0hhbmRsZXIgICBzdGF0dXNIYW5kbGVyICkKLSAgewotICAgIElVUklTY2hlbWUgZWNsaXBzZVNjaGVtZSA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlU2NoZW1lKCk7Ci0gICAgSVVSSVNjaGVtZSBmaWxlU2NoZW1lICAgID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEZpbGVTY2hlbWUoKTsKLSAgICAKLSAgICBjb21tYW5kTWFuYWdlcl8gID0gY29tbWFuZE1hbmFnZXI7Ci0gICAgcmVzb3VyY2VDb250ZXh0XyA9IHJlc291cmNlQ29udGV4dDsKLSAgICB1cmlGYWN0b3J5XyAgICAgID0gbmV3IFNpbXBsZVVSSUZhY3RvcnkoKTsKLSAgICBzdGF0dXNIYW5kbGVyXyAgID0gc3RhdHVzSGFuZGxlcjsKLSAgICAKLSAgICB1cmlGYWN0b3J5Xy5yZWdpc3RlclNjaGVtZSggInBsYXRmb3JtIiwgZWNsaXBzZVNjaGVtZSApOwotICAgIHVyaUZhY3RvcnlfLnJlZ2lzdGVyU2NoZW1lKCAiZmlsZSIsIGZpbGVTY2hlbWUgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLklFbnZpcm9ubWVudCNnZXRDb21tYW5kTWFuYWdlcigpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZE1hbmFnZXIgZ2V0Q29tbWFuZE1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbW1hbmRNYW5hZ2VyXzsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5JRW52aXJvbm1lbnQjZ2V0TG9nKCkKLSAgICovCi0gIHB1YmxpYyBJTG9nIGdldExvZygpCi0gIHsKLQkgIGlmKCBsb2dnZXJfID09IG51bGwgKQotICAgIHsgIAotICAgICAgbG9nZ2VyXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7IAotICAgIH07Ci0JCi0gICAgcmV0dXJuIGxvZ2dlcl87Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBsb2dnZXIgdGhlIG5ldyBsb2dnZXIgZm9yIHRoaXMgZW52aXJvbm1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2coIElMb2cgbG9nZ2VyICkKLSAgewotCWxvZ2dlcl8gPSBsb2dnZXI7ICAKLSAgfQotICAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5JRW52aXJvbm1lbnQjZ2V0U3RhdHVzSGFuZGxlcigpCi0gICAqLwotICBwdWJsaWMgSVN0YXR1c0hhbmRsZXIgZ2V0U3RhdHVzSGFuZGxlcigpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzSGFuZGxlcl87Ci0gIH0KLQotICAvKiogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5JRW52aXJvbm1lbnQjZ2V0VVJJRmFjdG9yeSgpCi0gICAqLwotICBwdWJsaWMgSVVSSUZhY3RvcnkgZ2V0VVJJRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gdXJpRmFjdG9yeV87Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiByZXR1cm5zIGEgUmVzb3VyY2VDb250ZXh0IGZvciB0aGlzIElFbnZpcm9ubWVudC4KLSAgICovCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkKLSAgewotICAgIHJldHVybiByZXNvdXJjZUNvbnRleHRfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb21tYW5kTWFuYWdlciggQ29tbWFuZE1hbmFnZXIgbWFuYWdlciApCi0gIHsKLQljb21tYW5kTWFuYWdlcl8gPSBtYW5hZ2VyOyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9FbnZpcm9ubWVudE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9FbnZpcm9ubWVudE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU0MjE2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvRW52aXJvbm1lbnRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTQgICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLQotcHVibGljIGNsYXNzIEVudmlyb25tZW50TWFuYWdlcgotewotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBJRW52aXJvbm1lbnQgZm9yIHRoZSBFY2xpcHNlIG5vbi1HVUkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJhc2VFY2xpcHNlRW52aXJvbm1lbnQgZ2V0TmV3RW52aXJvbm1lbnQoKQotICB7Ci0gICAgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCBjb250ZXh0ICAgICAgICA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLSAgICBJRWNsaXBzZVN0YXR1c0hhbmRsZXIgICAgIGhhbmRsZXIgICAgICAgID0gbmV3IEJhc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgICBlbnZpcm9ubWVudCAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwsIGNvbnRleHQsIGhhbmRsZXIgKTsKLSAgICAKLSAgICByZXR1cm4gZW52aXJvbm1lbnQ7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0lFY2xpcHNlU3RhdHVzSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0lFY2xpcHNlU3RhdHVzSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDgwOTg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9JRWNsaXBzZVN0YXR1c0hhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotCi1wdWJsaWMgaW50ZXJmYWNlIElFY2xpcHNlU3RhdHVzSGFuZGxlciBleHRlbmRzIElTdGF0dXNIYW5kbGVyCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSB3b3JzdCBzdGF0dXMgdGhhdCBoYXMgYmVlbiByZXBvcnRlZC4KLSAgICovCQotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKTsKLSAgCi0gIC8qKgotICAgKiBSZXNldHMgdGhlIHdvcnN0IHN0YXR1cyByZXBvcnRlZCB0byBiZSBPSy4KLSAgICoKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc2V0U3RhdHVzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3BsdWdpbi9FbnZQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvcGx1Z2luL0VudlBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWUxMDcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvcGx1Z2luL0VudlBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucGx1Z2luOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEVudlBsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgRW52UGx1Z2luIGluc3RhbmNlOwotCi0JLyoqCi0JICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0JICAqLwotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IjsJCi0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBFbnZQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCWluc3RhbmNlID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbnZQbHVnaW4gZ2V0SW5zdGFuY2UoKSB7Ci0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3ByZWZlcmVuY2VzL0FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3ByZWZlcmVuY2VzL0FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZjFjMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9wcmVmZXJlbmNlcy9BY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUyMiAgIDE4NDAwNiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnByZWZlcmVuY2VzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGRlZmluZSBwcmVmZXJlbmNlIGlkcy4gSXQgY29ycmVzcG9uZHMgdG8gaW5mb3JtYXRpb24KLSAqIHNwZWNpZmllZCBieSBhIGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGV4dGVuc2lvbiBwb2ludC4KLSAqIEVhY2ggYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZW50cnkgd2lsbCByZXN1bHQgaW4gYW4gZW50cnkgaW4gdGhlCi0gKiBhY3Rpb24gZGlhbG9ncyBwcmVmZXJlbmNlIHBhZ2UgaWYgdGhlIHNob3djaGVja2JveCBmaWVsZCBpcyB0cnVlLgotICogICAKLSAqIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC4KLSAqIAotICogPHByZT4KLSAgKiAgICZsdDtleHRlbnNpb24KLSAqICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUiJmd0OwotICogICAgICZsdDthY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotICogICAgICAgICAgIHNob3djaGVja2JveD0idHJ1ZSIKLSAqICAgICAgICAgICBuYW1lPSIlQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9KQVZBX1BST1hZX0RJQUxPRyIKLSAqICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSIKLSAqICAgICAgICAgICB0b29sdGlwPSIlVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1dTREwyUFJPWFkiCi0gKiAgICAgICAgICAgaW5mb3BvcD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLlBQQUQwMDA0IgotICogICAgICAgICAgIG9iamVjdGlkcz0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkLmZpbGUiCi0gKiAgICAgICAgICAgYWx3YXlzaGlkZT0iZmFsc2UiCi0gKiAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCImZ3Q7Ci0gKiAgICAgJmx0Oy9hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSZndDsKLSAqIDwvcHJlPgotICoKLSAqIFRoaXMgYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZXh0ZW5zaW9uIHBvaW50IGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBPYmplY3RDb250cmlidXRpb24KLSAqIGV4dGVuc2lvbiBwb2ludC4gIEZvciBleGFtcGxlOiAKLSAqIAotICogICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gKiAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICogICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkLmZpbGUiPgotICogPCEtLSBXU0RMIFRvIEphdmEgQmVhbiBQcm94eSAtLT4KLSAqICAgICAgICA8YWN0aW9uCi0gKiAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWSIKLSAqICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICogICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAqICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAqICAgICAgICA8L2FjdGlvbj4KLSAqICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAqCi0gKiBUaGUgT2JqZWN0Q29udHJpYnV0aW9uIGVudHJ5IGlzIGxpbmtlZCB3aXRoIHRoZSBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBlbnRyeQotICogdmlhIHRoZSBpZCBhdHRyaWJ1dGUgb2YgdGhlIE9iamVjdENvbnRpcmJ1dGlvbiBhbmQgdGhlIGlkIGF0dHJpYnV0ZSBvZiBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZS4KLSAqIE5vdGU6IHRoZSBpZCBpbiB0aGUgYWN0aW9uIGVudHJ5IGlzIGFsd2F5cyBhc3NvY2lhdGVkIHdpdGggdGhlIGR5bmFtaWMgd2l6YXJkIHRoYXQKLSAqIHNob3VsZCBiZSBwb3B1cGVkIHVwLiAgSW4gdGhlIGV4YW1wbGUgYWJvdmUgdGhlIE9iamVjdGlvbkNvbnRyaWJ1dGlvbiBpZCBhbmQgdGhlCi0gKiBhY3Rpb24gaWRzIGFyZSB0aGUgc2FtZSwgYnV0IHRoaXMgbmVlZCBub3QgYmUgdGhlIGNhc2UuICAKLSAqLwotcHVibGljIGNsYXNzIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi17Ci0gIHByaXZhdGUgU3RyaW5nICBpZF87Ci0gIHByaXZhdGUgU3RyaW5nICBuYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgIGluZm9wb3BfOwotICBwcml2YXRlIFN0cmluZyAgdG9vbHRpcF87Ci0gIHByaXZhdGUgYm9vbGVhbiBzaG93Q2hlY2tib3hfOwotICBwcml2YXRlIGJvb2xlYW4gYWx3YXlzSGlkZV87Ci0gIHByaXZhdGUgU3RyaW5nICBjYXRlZ29yeV87Ci0gIHByaXZhdGUgSGFzaFNldCBvYmplY3RJZHNfID0gbmV3IEhhc2hTZXQoKTsKLQotICBwdWJsaWMgSGFzaFNldCBnZXRPYmplY3RJZHMoKQotICB7Ci0gICAgcmV0dXJuIG9iamVjdElkc187Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZE9iamVjdElkKCBTdHJpbmcgaWQgKQotICB7Ci0gICAgb2JqZWN0SWRzXy5hZGQoIGlkICk7ICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGlkIGZvciB0aGlzIHBvcHVwIGFjdGlvbi4gIFRoaXMgaWQgbGluayB0aGUgYWN0aW9uRGlhbG9nUHJlZmVyZW5jZQotICAgKiB3aXRoIGFuIE9iamVjdENvbnRyaWJ1dGlvbi4KLSAgICogQHBhcmFtIGlkIHRoZSBpZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkKLSAgewotICAgIGlkXyA9IGlkOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGlkIGZvciB0aGlzIHBvcHVwIGFjdGlvbi4KLSAgICogQHJldHVybiB0aGUgaWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiBpZF87Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgbmFtZSBmb3IgdGhpcyBwb3B1cCBhY3Rpb24uICBUaGlzIG5hbWUgaXMgZGlzcGxheWVkIG9uIHRoZQotICAgKiBkaWFsb2cgcHJlZmVyZW5jZXMgcGFnZSBhbmQgbXVzdCBiZSB0cmFuc2xhdGVkLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgcG9wdXAgY2hlY2sgYm94LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIG5hbWVfID0gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBkaXNwbGF5IHZhbHVlIGZvciB0aGlzIHBvcHVwIGNoZWNrIGJveC4KLSAgICogTm90ZTogdGhpcyB2YWx1ZSBtYXkgYmUgbnVsbCBpZiB0aGUgZ2V0U2hvd0NoZWNrQm94IG1ldGhvZCByZXR1cm5zIGZhbHNlLgotICAgKiBAcmV0dXJuIHRoZSBuYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lXzsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBpbmZvIHBvcCB2YWx1ZSBmb3IgdGhpcyBwb3B1cCBjaGVjayBib3guCi0gICAqIEBwYXJhbSBpbmZvcG9wCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbmZvcG9wKFN0cmluZyBpbmZvcG9wKQotICB7Ci0gICAgaW5mb3BvcF8gPSBpbmZvcG9wOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGluZm8gcG9wIHZhbHVlIGZvciB0aGlzIHBvcHVwIGNoZWNrIGJveC4KLSAgICogTm90ZTogdGhpcyB2YWx1ZSBtYXkgYmUgbnVsbCBpZiB0aGUgZ2V0U2hvd0NoZWNrQm94IG1ldGhvZCByZXR1cm5zIGZhbHNlLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5mb3BvcCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3BvcCgpCi0gIHsKLSAgICByZXR1cm4gaW5mb3BvcF87Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdG9vbHRpcCB2YWx1ZSBmb3IgdGhpcyBwb3B1cCBjaGVjayBib3guCi0gICAqIEBwYXJhbSB0b29sdGlwCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUb29sdGlwKFN0cmluZyB0b29sdGlwKQotICB7Ci0gICAgdG9vbHRpcF8gPSB0b29sdGlwOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIHRvb2x0aXAgdmFsdWUgZm9yIHRoaXMgcG9wdXAgY2hlY2sgYm94LgotICAgKiBOb3RlOiB0aGlzIHZhbHVlIG1heSBiZSBudWxsIGlmIHRoZSBnZXRTaG93Q2hlY2tCb3ggbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSB0b29sdGlwIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUb29sdGlwKCkKLSAgewotICAgIHJldHVybiB0b29sdGlwXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIHNob3cgY2hlY2sgYm94IHZhbHVlIGZvciB0aGlzIHBvcHVwLiAgSWYgdGhlIHZhbHVlIGlzIHRydWUgdGhlbgotICAgKiB0aGlzIHBvcHVwIHdpbGwgYXBwZWFyIG9uIGFuIGFjdGlvbiBkaWFsb2dzIHByZWZlcmVuY2UgcGFnZS4gIEFsc28gaWYgdGhpcwotICAgKiB2YWx1ZSBpcyB0cnVlIGFuZCB0aGUgYWx3YXlzIGhpZGUgdmFsdWUgaXMgZmFsc2UgdGhlbiBhIGNoZWNrIGJveCB3aWxsIGJlIGRpc3BsYXllZAotICAgKiBvbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGlzIHBvcHVwIHdoaWNoIGFza3MgdGhlIHVzZXIgaWYgdGhleSB3YW50IHRoZSBwb3B1cAotICAgKiB0byBiZSBkaXNwbGF5ZWQgdGhlIG5leHQgdGltZSBhcmUgdG8ganVzdCBleGVjdXRlIHRoZSBwb3B1cCBhY3Rpb24uCi0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgc2hvdyBjaGVjayBib3ggdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93Q2hlY2tib3goIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgc2hvd0NoZWNrYm94XyA9IHZhbHVlOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0cyB0aGUgc2hvdyBjaGVjayBib3ggdmFsdWUuCi0gICAqIEByZXR1cm4gdGhlIHNob3cgY2hlY2sgYm94IHZhbHVlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd0NoZWNrYm94KCkKLSAgewotICAgIHJldHVybiBzaG93Q2hlY2tib3hfOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgYWx3YXlzIGhpZGUgdmFsdWUuICBUaGlzIHZhbHVlIHNwZWNpZmllcyB0aGF0IHRoZSBwb3B1cCBzaG91bGQgYWx3YXlzCi0gICAqIGJlIGV4ZWN1dGVkIHdpdGhvdXQgYnJpbmdpbmcgdXAgdGhlIHBvcHVwIHdpemFyZC4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBhbHdheXMgaGlkZSB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFsd2F5c0hpZGUoIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgYWx3YXlzSGlkZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGFsd2F5cyBoaWRlIHZhbHVlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0QWx3YXlzSGlkZSgpCi0gIHsKLSAgICByZXR1cm4gYWx3YXlzSGlkZV87IAotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgY2F0ZWdvcnkgaWQgZm9yIHBvcHVwIGFjdGlvbi4gIEFsbCBwb3B1cCBhY3Rpb25zIHdpdGggdGhlIHNhbWUKLSAgICogY2F0ZWdvcnkgaWQgd2lsbCBiZSBncm91cGVkIHRvZ2V0aGVyIG9uIHRoZSBzYW1lIHBvcHVwIGFjdGlvbiBwcmVmZXJlbmNlIHBhZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgY2F0ZWdvcnkuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDYXRlZ29yeSggU3RyaW5nIHZhbHVlICkKLSAgewotICAgIGNhdGVnb3J5XyA9IHZhbHVlOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGNhdGVnb3J5IGlkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDYXRlZ29yeSgpCi0gIHsKLSAgICByZXR1cm4gY2F0ZWdvcnlfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE5M2NlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ3c2V4cGxvcmVyLXByb3BlcnRpZXMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGFhZTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLWJpbgotYnVpbGQKLXdlYmFwcHMKLXRlbXAuZm9sZGVyCi1idWlsZC54bWwKLSoud2FyCi1leHBsb3JlcnNyYy56aXAKLWphdmFDb21waWxlci4qLmFyZ3MKLSouamFyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjIxOTk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU2OGY1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTYXQgRGVjIDIyIDE5OjU2OjM0IEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UxNjEyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0jV2VkIEp1biAwNiAxNDozMjozNyBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWluc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1hYm9ydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzAwZjc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNGcmkgSnVuIDAzIDAwOjMyOjAyIEVEVCAyMDA1Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzFlOTNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MDowNCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNTdjNDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwNS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGV4cGxvcmVyLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLmZhdm9yaXRlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXA7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0O3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5oZWxwLmFwcHNlcnZlcjtidW5kbGUtdmVyc2lvbj0iWzMuMS4xMDAsMy4yLjApIiwKLSBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS54c2Q7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5hcGFjaGUud3NpbDRqO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMS4xLjApIiwKLSBvcmcudWRkaTRqO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjQsMi4xLjApIiwKLSBvcmcuYXBhY2hlLmF4aXM7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGNvbS5pYm0uaWN1O2J1bmRsZS12ZXJzaW9uPSJbMy40LjQsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5qZXR0eSwKLSBvcmcuZWNsaXBzZS5lcXVpbm94LmpzcC5qYXNwZXIucmVnaXN0cnksCi0gb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1JbXBvcnQtUGFja2FnZTogamF2YXguc2VydmxldDt2ZXJzaW9uPSIyLjQuMCIsCi0gamF2YXguc2VydmxldC5odHRwO3ZlcnNpb249IjIuNC4wIiwKLSBvcmcub3NnaS5zZXJ2aWNlLmh0dHA7dmVyc2lvbj0iMS4yLjAiCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkwNmRlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLmV4cGxvcmVyLmphciA9IHNyYy8sd3NleHBsb3Jlci1wcm9wZXJ0aWVzLwotamFycy5jb21waWxlLm9yZGVyID0gZXhwbG9yZXIuamFyCi0gICAgICAgICAgICAgICAgICAgICAKLW91dHB1dC53c2V4cGxvcmVyL1dFQi1JTkYvbGliL3dzZXhwbG9yZXIuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIGV4cGxvcmVyLmphcixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwcm9wZXJ0aWVzLyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgd3NleHBsb3Jlci8sXAotICAgICAgICAgICAgICAgd3NleHBsb3Jlci1wcm9wZXJ0aWVzLwotCi0KLWN1c3RvbUJ1aWxkQ2FsbGJhY2tzPWJ1aWxkSlNQcy54bWwKLQotCi1zcmMuaW5jbHVkZXMgPSBzY2hlbWEvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9idWlsZEpTUHMueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGRKU1BzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0YmEzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9idWlsZEpTUHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIEFudCBidWlsZCBzY3JpcHQgZm9yIEpTUHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHByb2plY3QgbmFtZT0iSlNQIEJ1aWxkIj4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gV29ya3NwYWNlIChkZXYpIGJ1aWxkOyBjYWxsZWQgYXMgYW4gQW50IGJ1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0iYnVpbGQiPgotCi0JCTwhLS0gQ29uc3RydWN0IHRoZSBmdWxsIGNsYXNzcGF0aCAtLT4KLQkJPHBhdGggaWQ9ImV4cGxvcmVyLmphci5jbGFzc3BhdGgiID4KLQkJCTxwYXRoZWxlbWVudCBwYXRoPSIke3RhcmdldC5mb2xkZXJ9Ii8+Ci0JCQk8ZGlyc2V0IGRpcj0iJHt3b3Jrc3BhY2VfbG9jfSI+Ci0JCQkJPHBhdHRlcm5zZXQ+Ci0JCQkJCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9iaW4iLz4KLQkJCQkJCi0JCQkJPC9wYXR0ZXJuc2V0PgotCQkJPC9kaXJzZXQ+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7dGFyZ2V0X2hvbWV9L3BsdWdpbnMiPgotCQkJCTxwYXR0ZXJuc2V0PgotCQkJCQk8aW5jbHVkZSBuYW1lPSJqYXZheC5zZXJ2bGV0Ki5qYXIiLz4KLQkJCQkJPGluY2x1ZGUgbmFtZT0iamF2YXguc2VydmxldC5qc3AqLmphciIvPgotCQkJCQk8aW5jbHVkZSBuYW1lPSJvcmcuYXBhY2hlLmFudCovbGliL2FudC5qYXIiLz4KLQkJCQkJPGluY2x1ZGUgbmFtZT0ib3JnLmFwYWNoZS5jb21tb25zLmVsKi5qYXIiLz4KLQkJCQkJPGluY2x1ZGUgbmFtZT0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcqLmphciIvPgotCQkJCQk8aW5jbHVkZSBuYW1lPSJvcmcuYXBhY2hlLmphc3BlciouamFyIi8+Ci0JCQkJCQotCQkJCTwvcGF0dGVybnNldD4KLQkJCTwvZmlsZXNldD4KLQkJPC9wYXRoPgotCi0JCTwhLS0gQ29tcGlsZSB0aGUgSlNQcyAtLT4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlIj4KLQkJCTxyZWZlcmVuY2UgcmVmaWQ9ImV4cGxvcmVyLmphci5jbGFzc3BhdGgiLz4KLQkJPC9hbnRjYWxsPgotCQkKLQk8L3RhcmdldD4KLQotCTxwcm9wZXJ0eSBuYW1lPSJ3c2V4cGxvcmVyRGlyIiB2YWx1ZT0iJHtiYXNlZGlyfS93c2V4cGxvcmVyIi8+Ci0JCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBDb21waWxlIHRoZSBKU1BzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJjb21waWxlIj4KLQkJCi0JCTwhLS0gSW52b2tlIEphc3BlciBjb21waWxlciAtLT4KLQkJPGphdmEKLQkJCWNsYXNzbmFtZT0ib3JnLmFwYWNoZS5qYXNwZXIuSnNwQyIKLQkJCWNsYXNzcGF0aHJlZj0iZXhwbG9yZXIuamFyLmNsYXNzcGF0aCIKLQkJCWZvcms9InRydWUiCi0JCQlmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JCQk8YXJnIHZhbHVlPSItY29tcGlsZSIvPgotCQkJPGFyZyB2YWx1ZT0iLWQiLz4KLQkJCTxhcmcgdmFsdWU9IiR7d3NleHBsb3JlckRpcn0iIC8+Ci0JCQk8YXJnIHZhbHVlPSItcCIvPgotCQkJPGFyZyB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLmpzcCIvPgotCQkJPGFyZyB2YWx1ZT0iLXdlYmFwcCIvPgotCQkJPGFyZyB2YWx1ZT0iJHt3c2V4cGxvcmVyRGlyfSIvPgotCQkJPGFyZyB2YWx1ZT0iLWRpZSIvPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHt0YXJnZXQuZm9sZGVyfSIvPgotCQkJCTxkaXJzZXQgZGlyPSIke2Jhc2VkaXJ9Ij4KLQkJCQkJCTxpbmNsdWRlIG5hbWU9IiovQGRvdCIgLz4KLQkJCQk8L2RpcnNldD4KLQkJCQk8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iPgotCQkJCQkJPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+IAotCQkJCTwvZmlsZXNldD4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JCQotCTwvdGFyZ2V0PgotCQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHRoZSB0YXJnZXQgYnVpbGQuamFycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIHRvIGNvbnRhaW4gdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icHJlLmJ1aWxkLmphcnMiPgotCTwvdGFyZ2V0PgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBTdGVwcyB0byBkbyBhZnRlciB0aGUgdGFyZ2V0IGJ1aWxkLmphcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGJ1aWxkLnJlc3VsdC5mb2xkZXIgLSBmb2xkZXIgdG8gY29udGFpbiB0aGUgYnVpbGQgcmVzdWx0cyAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwb3N0LmJ1aWxkLmphcnMiPgotCTwvdGFyZ2V0PgotCQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHRoZSB0YXJnZXQgYnVpbGQuc291cmNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIHRvIGNvbnRhaW4gdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icHJlLmJ1aWxkLnNvdXJjZXMiPgotCTwvdGFyZ2V0PgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBTdGVwcyB0byBkbyBhZnRlciB0aGUgdGFyZ2V0IGJ1aWxkLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGJ1aWxkLnJlc3VsdC5mb2xkZXIgLSBmb2xkZXIgdG8gY29udGFpbiB0aGUgYnVpbGQgcmVzdWx0cyAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwb3N0LmJ1aWxkLnNvdXJjZXMiPgotCTwvdGFyZ2V0PgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uIHRhcmdldCA8bmFtZT4gICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBTdWJzdGl0dXRlICJuYW1lIiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjb21waWxhdGlvbiB0YXJnZXQsIGVnIEBkb3QgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIHNvdXJjZS5mb2xkZXJuIDogbiA9IDEgLi4uIE4sIHRoZSBzb3VyY2UgZm9sZGVycyAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIHRhcmdldC5mb2xkZXIgIDogd2hlcmUgdGhlIHJlc3VsdHMgb2YgdGhlIGNvbXBpbGF0aW9uIGdvICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIDxuYW1lPi5jbGFzc3BhdGggOiBuYW1lID0gbmFtZSBvZiB0aGUgY29tcGlsYXRpb24gdGFyZ2V0LiBBICAgICAgICAgLS0+Ci0JPCEtLSAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UgdG8gdGhlIGNsYXNzcGF0aCBzdHJ1Y3R1cmUuICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwcmUuZXhwbG9yZXIuamFyIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gZHVyaW5nIHRoZSBjb21waWxhdGlvbiB0YXJnZXQgPG5hbWU+LCBhZnRlciB0aGUgY29tcGlsZSAgIC0tPgotCTwhLS0gYnV0IGJlZm9yZSBqYXJpbmcuICBTdWJzdGl0dXRlICJuYW1lIiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjb21waWxhdGlvbi0tPgotCTwhLS0gdGFyZ2V0LCBlZyBAZG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBzb3VyY2UuZm9sZGVybiA6IG4gPSAxIC4uLiBOLCB0aGUgc291cmNlIGZvbGRlcnMgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICB0YXJnZXQuZm9sZGVyICA6IHdoZXJlIHRoZSByZXN1bHRzIG9mIHRoZSBjb21waWxhdGlvbiBnbyAgICAgICAgICAgIC0tPgotCTwhLS0gICA8bmFtZT4uY2xhc3NwYXRoIDogbmFtZSA9IG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHRhcmdldC4gQSAgICAgICAgIC0tPgotCTwhLS0gICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRvIHRoZSBjbGFzc3BhdGggc3RydWN0dXJlLiAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5jb21waWxlLmV4cGxvcmVyLmphciI+Ci0JCQotCQk8IS0tIENvbXBpbGUgdGhlIEpTUHMgLS0+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZSI+Ci0JCQk8cmVmZXJlbmNlIHJlZmlkPSJleHBsb3Jlci5qYXIuY2xhc3NwYXRoIi8+Ci0JCTwvYW50Y2FsbD4KLQkJCi0JCTwhLS0gSnNwQyBhbHdheXMgZ2VuZXJhdGVzIC5qYXZhIGZpbGVzOyBkZWxldGUgdGhlbSAtLT4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iJHt0YXJnZXQuZm9sZGVyfSIgaW5jbHVkZXM9IioqLyouamF2YSIvPgotCQk8L2RlbGV0ZT4KLQotCTwvdGFyZ2V0PgotCQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIHRhcmdldCA8bmFtZT4gICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gU3Vic3RpdHV0ZSAibmFtZSIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29tcGlsYXRpb24gdGFyZ2V0LCBlZyBAZG90ICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBqYXIubG9jYXRpb24gLSB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbXBpbGF0aW9uIHJlc3VsdHMgICAgICAgICAgICAgIC0tPgotCTwhLS0gICA8bmFtZT4uY2xhc3NwYXRoIDogbmFtZSA9IG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHRhcmdldC4gQSAgICAgICAgIC0tPgotCTwhLS0gICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRvIHRoZSBjbGFzc3BhdGggc3RydWN0dXJlLiAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5leHBsb3Jlci5qYXIiPgotCTwvdGFyZ2V0PgotCQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHRoZSB0YXJnZXQgZ2F0aGVyLmJpbi5wYXJ0cyAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgYnVpbGQucmVzdWx0LmZvbGRlciAtIGZvbGRlciBjb250YWluaW5nIHRoZSBidWlsZCByZXN1bHRzICAgICAgICAgICAtLT4KLQk8IS0tICAgdGFyZ2V0LmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5nYXRoZXIuYmluLnBhcnRzIj4KLQk8L3RhcmdldD4KLQkJCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBTdGVwcyB0byBkbyBhZnRlciB0aGUgdGFyZ2V0IGdhdGhlci5iaW4ucGFydHMgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGJ1aWxkLnJlc3VsdC5mb2xkZXIgLSBmb2xkZXIgY29udGFpbmluZyB0aGUgYnVpbGQgcmVzdWx0cyAgICAgICAgICAgLS0+Ci0JPCEtLSAgIHRhcmdldC5mb2xkZXIgLSBkZXN0aW5hdGlvbiBmb2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwb3N0LmdhdGhlci5iaW4ucGFydHMiPgotCTwvdGFyZ2V0PgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgdGhlIHRhcmdldCBnYXRoZXIuc291cmNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGRlc3RpbmF0aW9uLnRlbXAuZm9sZGVyIC0gZGVzdGluYXRpb24gZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwcmUuZ2F0aGVyLnNvdXJjZXMiPgotCTwvdGFyZ2V0PgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBTdGVwcyB0byBkbyBhZnRlciB0aGUgdGFyZ2V0IGdhdGhlci5zb3VyY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGRlc3RpbmF0aW9uLnRlbXAuZm9sZGVyIC0gZGVzdGluYXRpb24gZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwb3N0LmdhdGhlci5zb3VyY2VzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHRoZSB0YXJnZXQgZ2F0aGVyLmxvZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icHJlLmdhdGhlci5sb2dzIj4gICAgICAgIAotCTwvdGFyZ2V0PgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBTdGVwcyB0byBkbyBhZnRlciB0aGUgdGFyZ2V0IGdhdGhlci5sb2dzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGRlc3RpbmF0aW9uLnRlbXAuZm9sZGVyIC0gZGVzdGluYXRpb24gZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwb3N0LmdhdGhlci5sb2dzIj4gICAgICAgCi0JPC90YXJnZXQ+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGNsZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgZGVzdGluYXRpb24udGVtcC5mb2xkZXIgLSBkZXN0aW5hdGlvbiBmb2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5jbGVhbiI+ICAgICAgICAgICAgICAKLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBjbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBwbHVnaW4uZGVzdGluYXRpb24gLSBmaW5hbCBkZXN0aW5hdGlvbiBvZiB0aGUgYnVpbGQgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gcmVzdWx0cyBvZiB0aGUgY29tcGlsYXRpb24gICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICB0ZW1wLmZvbGRlciAtIHRlbXBvcmFyeSBmb2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5jbGVhbiI+ICAgICAgICAgICAgIAotCTwvdGFyZ2V0PgotCi0JPHRhcmdldCBuYW1lPSJwcmUud3NleHBsb3Jlci1wcm9wZXJ0aWVzLmphciI+ICAgICAgICAgICAgICAKLQkJPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJwb3N0LndzZXhwbG9yZXItcHJvcGVydGllcy5qYXIiPiAgICAgICAgICAgICAgCi0JCQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9InBvc3QuY29tcGlsZS53c2V4cGxvcmVyLXByb3BlcnRpZXMuamFyIj4gICAgICAgICAgICAgIAotCQkJPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2ljb25zL2V0b29sMTYvbGF1bmNoX3dzX2V4cGxvcmVyLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2ljb25zL2V0b29sMTYvbGF1bmNoX3dzX2V4cGxvcmVyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhMGJhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9pY29ucy9ldG9vbDE2L2xhdW5jaF93c19leHBsb3Jlci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDk4NmQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0jIDIwMDcwODIwICAgMTkxNTg1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotWFBfV1NFX1RSQU5TUE9SVF9QUk9WSURFUj1XZWIgU2VydmljZXMgRXhwbG9yZXIgVHJhbnNwb3J0IFByb3ZpZGVyCi1TT0FQX1RSQU5TUE9SVF9QUk9WSURFUj1EZWZhdWx0IFNPQVAgVHJhbnNwb3J0IFByb3ZpZGVyCi0KLSMKLSMgTWVzc2FnZXMgZm9yIHRoZSBjbGllbnQgdHlwZSBleHRlbnNpb24KLSMKLVdFQlNFUlZJQ0VDTElFTlRUWVBFX05BTUVfV1NFWFBMT1JFUj1TdHVibGVzcyAoV2ViIFNlcnZpY2VzIEV4cGxvcmVyKQotVEFTS19MQUJFTF9FWFBMT1JFX1dTRExfVVNJTkdfV1NFPUV4cGxvcmVyIFdTREwgdXNpbmcgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLgotCi0jCi0jIE1lc3NhZ2VzIGZvciB0aGUgV1NFeHBsb3JlciB0eXBlIGV4dGVuc2lvbgotIwotTVNHX0VSUk9SX0xBVU5DSF9XU0VYUExPUkVSPUlXQUIwMzY2RSBVbmFibGUgdG8gbGF1bmNoIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4KLU1TR19FUlJPUl9MT0FEX0xBVU5DSF9PUFRJT05TPUlXQUIwMzY3RSBVbmFibGUgdG8gbG9hZCBsYXVuY2ggb3B0aW9ucy4KLU1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOD1Ccm9rZW4gVk0gZG9lcyBub3Qgc3VwcG9ydCBVVEYtOC4KLQotIwotIyBNZXNzYWdlcyBmb3IgcG9wdXAgYWN0aW9uIChUZXN0IHdpdGggV2ViIFNlcnZpY2VzIEV4cGxvcmVyKQotIwotUE9QVVBfVEVTVF9XU0RMPVRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXIKLQotIwotIyBTT0FQIHRyYW5zcG9ydCBtZXNzYWdlcwotIwotTVNHX0VSUk9SX1VOU1VQUE9SVEVEX0JJTkRJTkc9ezB9IGJpbmRpbmcgaXMgdW5zdXBwb3J0ZWQuCi1NU0dfRVJST1JfVU5TVVBQT1JURURfVFJBTlNQT1JUPXswfSB0cmFuc3BvcnQgaXMgdW5zdXBwb3J0ZWQuCi0KLSMKLSMgV2ViU2VydmljZVB1Ymxpc2hQYWdlCi0jCi1UT09MVElQX0xBVU5DSF9XU19FWFBMT1JFUj1MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotQ09NTUFORF9MQVVOQ0hfV1NfRVhQTE9SRVI9TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLQotIwotIyBQb3AtdXAgYWN0aW9ucwotIwotTUVOVV9SVU49JlJ1bgotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY4NGMwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJ3c2VUcmFuc3BvcnRQcm92aWRlciIgbmFtZT0iJVhQX1dTRV9UUkFOU1BPUlRfUFJPVklERVIiIHNjaGVtYT0ic2NoZW1hL3dzZVRyYW5zcG9ydFByb3ZpZGVyLmV4c2QiLz4KLQotICAgIAotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gRXh0ZW5zaW9uIHBvaW50OiBFY2xpcHNlIFBvcHVwIEFjdGlvbiAob3JnLmVjbGlwc2UudWkucG9wdXBNZW51cykgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2RsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aS5hY3Rpb24uV1NETEZpbGVNZW51LmZpbGUud3NkbCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX1RFU1RfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudWkuYWN0aW9uLldTRExGaWxlTWVudS53c2RscmVzIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfVEVTVF9XU0RMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aS5hY3Rpb24uV1NETEZpbGVNZW51LnNlcnZpY2UiCi0gICAgICAgICAgICBhZGFwdGFibGU9InRydWUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9URVNUX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIud3NlVHJhbnNwb3J0UHJvdmlkZXIiPgotICAgICAgPHNvYXBUcmFuc3BvcnRQcm92aWRlcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydC5TT0FQVHJhbnNwb3J0UHJvdmlkZXIiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLnNvYXBUcmFuc3BvcnRQcm92aWRlciIKLSAgICAgICAgICAgIG5hbWU9IiVTT0FQX1RSQU5TUE9SVF9QUk9WSURFUiIKLSAgICAgICAgICAgIG5hbWVzcGFjZVVSST0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLSAgICAgICAgICAgIHRyYW5zcG9ydFVSST0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnkuaHR0cGNvbnRleHRzIj4KLSAgICAgIDxodHRwY29udGV4dAotICAgICAgICAgICAgaWQ9IndzZSI+Ci0gICAgICAgICA8cmVzb3VyY2UtbWFwcGluZwotICAgICAgICAgICAgICAgcGF0aD0iL3dzZXhwbG9yZXIiPgotICAgICAgICAgPC9yZXNvdXJjZS1tYXBwaW5nPgotICAgICAgPC9odHRwY29udGV4dD4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeS5yZXNvdXJjZXMiPgotICAgICAgPHJlc291cmNlCi0gICAgICAgICAgICBhbGlhcz0iLyIKLSAgICAgICAgICAgIGJhc2UtbmFtZT0iLyIKLSAgICAgICAgICAgIGh0dHBjb250ZXh0SWQ9IndzZSI+Ci0gICAgICA8L3Jlc291cmNlPgotICAgICAgPHNlcnZpY2VTZWxlY3RvcgotICAgICAgICAgICAgZmlsdGVyPSIob3RoZXIuaW5mbz1vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIpIj4KLSAgICAgIDwvc2VydmljZVNlbGVjdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5LnNlcnZsZXRzIj4KLSAgICAgIDxzZXJ2bGV0Ci0gICAgICAgICAgICBhbGlhcz0iLyouanNwIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmVxdWlub3guanNwLmphc3Blci5yZWdpc3RyeS5KU1BGYWN0b3J5Oi8iCi0gICAgICAgICAgICBodHRwY29udGV4dElkPSJ3c2UiPgotICAgICAgPC9zZXJ2bGV0PgotICAgICAgPHNlcnZpY2VTZWxlY3RvcgotICAgICAgICAgICAgZmlsdGVyPSIob3RoZXIuaW5mbz1vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIpIj4KLSAgICAgIDwvc2VydmljZVNlbGVjdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZUV4dGVuc2lvbnMiPgotICAgICAgPHBlcnNwZWN0aXZlRXh0ZW5zaW9uCi0gICAgICAgICAgICB0YXJnZXRJRD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuSjJFRVBlcnNwZWN0aXZlIj4KLSAgICAgICAgIDxhY3Rpb25TZXQKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIuZXhwbG9yZXIiPgotICAgICAgICAgPC9hY3Rpb25TZXQ+Ci0gICAgICA8L3BlcnNwZWN0aXZlRXh0ZW5zaW9uPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIAotICAgIDwhLS0gTWFpbiBNZW51IEFjdGlvbnMgLS0+Ci0KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldHMiPgotCi0gICAgICA8YWN0aW9uU2V0Ci0gICAgICAgICAgICBsYWJlbD0iJUNPTU1BTkRfTEFVTkNIX1dTX0VYUExPUkVSIgotICAgICAgICAgICAgdmlzaWJsZT0iZmFsc2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLmV4cGxvcmVyIj4KLSAgICAgICAgIDxtZW51Ci0gICAgICAgICAgICAgICBsYWJlbD0iJU1FTlVfUlVOIgotICAgICAgICAgICAgICAgcGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnVpLnJ1biI+Ci0gICAgICAgICAgICA8c2VwYXJhdG9yIG5hbWU9ImV4cGxvcmVyIj4KLSAgICAgICAgICAgIDwvc2VwYXJhdG9yPgotICAgICAgICAgPC9tZW51PgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVDT01NQU5EX0xBVU5DSF9XU19FWFBMT1JFUiIKLSAgICAgICAgICAgICAgIGljb249Imljb25zL2V0b29sMTYvbGF1bmNoX3dzX2V4cGxvcmVyLmdpZiIKLSAgICAgICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX0xBVU5DSF9XU19FWFBMT1JFUiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuYWN0aW9uLkxhdW5jaFdTRUFjdGlvbiIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS51aS5ydW4vZXhwbG9yZXIiCi0gICAgICAgICAgICAgICB0b29sYmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5hY3Rpb24uTGF1bmNoV1NFQWN0aW9uIj4KLSAgICAgICAgPC9hY3Rpb24+Ci0gICAgIDwvYWN0aW9uU2V0PgotCi0gICA8L2V4dGVuc2lvbj4KLSAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wcm9wZXJ0aWVzL2Zhdm9yaXRlc19kZWZhdWx0LndzaWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wcm9wZXJ0aWVzL2Zhdm9yaXRlc19kZWZhdWx0LndzaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjcwMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcHJvcGVydGllcy9mYXZvcml0ZXNfZGVmYXVsdC53c2lsCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxpbnNwZWN0aW9uIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vIgotICB4bWxuczp3c2lsd3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uL3dzZGwvIgotICB4bWxuczp3c2lsdWRkaT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uL3VkZGkvIgotICB4bWxuczp1ZGRpPSJ1cm46dWRkaS1vcmc6YXBpIj4KLSAgPGFic3RyYWN0IHhtbDpsYW5nPSJlbi1VUyI+djVfMF8xXzA8L2Fic3RyYWN0PgotCi0gICA8bGluayByZWZlcmVuY2VkTmFtZXNwYWNlPSJ1cm46dWRkaS1vcmc6YXBpIj4KLSAgICA8YWJzdHJhY3QgeG1sOmxhbmc9ImVuLVVTIj4lUmVnaXN0cnkgTmFtZTwvYWJzdHJhY3Q+Ci0gICAgPGFic3RyYWN0IHhtbDpsYW5nPSJlbi1VUyI+RmlsbCBJbiBJbnF1aXJ5IFVSTDwvYWJzdHJhY3Q+Ci0gICAgPGFic3RyYWN0IHhtbDpsYW5nPSJlbi1VUyI+RmlsbCBJbiBQdWJsaXNoIFVSTDwvYWJzdHJhY3Q+Ci0gICAgPGFic3RyYWN0IHhtbDpsYW5nPSJlbi1VUyI+RmlsZSBJbiBTaXRlPC9hYnN0cmFjdD4KLSAgPC9saW5rPgotCi0gCi0KLSAgPGxpbmsgcmVmZXJlbmNlZE5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uLyIgbG9jYXRpb249Imh0dHA6Ly93d3cueG1ldGhvZHMuY29tL2luc3BlY3Rpb24ud3NpbCIvPgotPC9pbnNwZWN0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2NoZW1hL3dzZVRyYW5zcG9ydFByb3ZpZGVyLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zY2hlbWEvd3NlVHJhbnNwb3J0UHJvdmlkZXIuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMyZWVmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zY2hlbWEvd3NlVHJhbnNwb3J0UHJvdmlkZXIuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIgaWQ9IndzZVRyYW5zcG9ydFByb3ZpZGVyIiBuYW1lPSJXZWIgU2VydmljZXMgRXhwbG9yZXIgVHJhbnNwb3J0IFByb3ZpZGVyIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBkZXNjcmlwdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2UgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InNvYXBUcmFuc3BvcnRQcm92aWRlciIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEFuIG9wdGlvbmFsIGlkZW50aWZpZXIgZm9yIHRoaXMgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBbiBvcHRpb25hbCBuYW1lIHRoaXMgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0ic29hcFRyYW5zcG9ydFByb3ZpZGVyIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGV4dGVuc2lvbiBwb2ludCBlbnRyeSBhbGxvd3MgYW4gZXh0ZW5kZXIgdG8gcGx1ZyBpbiBhIG5ldyBmYWN0b3J5IGZvciBjcmVhdGluZyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0IGluc3RhbmNlcy4gIFRoZSBJU09BUFRyYW5wb3J0IGlzIHVzZWQgYnkgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmb3IgaW52b2tpbmcgd2ViIHNlcnZpY2VzIG9wZXJhdGlvbnMgdGhhdCB1c2VzIHRoZSBTT0FQIG1lc3NhZ2UgcHJvdG9jb2wuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgY2xhc3MgbXVzdCBpbXBsZW1lbnQgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnRQcm92aWRlciBpbnRlcmZhY2UuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXIiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlkIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBzb2FwVHJhbnNwb3J0UHJvdmlkZXIgZWxlbWVudC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoaXMgc29hcFRyYW5zcG9ydFByb3ZpZGVyIGVsZW1lbnQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2VVUkkiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIHNvYXA6YmluZGluZyBlbGVtZW50IHRoYXQgdGhpcyB0cmFuc3BvcnQgcHJvdmlkZXIgY2xhaW1zIHN1cHBvcnQgZm9yLiAgRm9yIGV4YW1wbGUsIGlmIHRoaXMgdHJhbnNwb3J0IHByb3ZpZGVyIHN1cHBvcnRzIHRoZSBTT0FQIDEuMSBiaW5kaW5nLCB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgd291bGQgYmUgaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLy4gIElmIHVuc3BlY2lmaWVkLCB0aGlzIHRyYW5zcG9ydCBwcm92aWRlciBjbGFpbXMgc3VwcG9ydCBmb3IgYWxsIFNPQVAgYmluZGluZ3MuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHJhbnNwb3J0VVJJIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSB0cmFuc3BvcnQgcHJvdG9jb2wgVVJJIG9mIHRoZSBzb2FwOmJpbmRpbmcgZWxlbWVudCB0aGF0IHRoaXMgdHJhbnNwb3J0IHByb3ZpZGVyIGNsYWltcyBzdXBwb3J0IGZvci4gIEZvciBleGFtcGxlLCBpZiB0aGlzIHRyYW5zcG9ydCBwcm92aWRlciBzdXBwb3J0cyBTT0FQIG92ZXIgSFRUUCwgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHdvdWxkIGJlIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cC4gIElmIHVuc3BlY2lmaWVkLCB0aGlzIHRyYW5zcG9ydCBwcm92aWRlciBjbGFpbXMgc3VwcG9ydCBmb3IgYWxsIHRyYW5zcG9ydCBwcm90b2NvbHMuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2VydmxldGFwaS9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXQuYXBpXzEuMC4wLnYyMDA2MDIwNi5qYXIgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zZXJ2bGV0YXBpL29yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldC5hcGlfMS4wLjAudjIwMDYwMjA2LmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRhZDU3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zZXJ2bGV0YXBpL29yZy5lY2xpcHNlLmVxdWlub3guc2VydmxldC5hcGlfMS4wLjAudjIwMDYwMjA2LmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvSmV0dHlSdW5uYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9KZXR0eVJ1bm5hYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNzQyYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9KZXR0eVJ1bm5hYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5oZWxwLmludGVybmFsLmFwcHNlcnZlci5BcHBzZXJ2ZXJQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIEpldHR5UnVubmFibGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgSmV0dHlSdW5uYWJsZSBqZXR0eVJ1bm5hYmxlXzsKLQotCXByaXZhdGUgSmV0dHlSdW5uYWJsZSgpIHsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEpldHR5UnVubmFibGUgZ2V0SmV0dHlSdW5uYWJsZSgpIHsKLQkJaWYgKGpldHR5UnVubmFibGVfID09IG51bGwpIHsKLQkJCWpldHR5UnVubmFibGVfID0gbmV3IEpldHR5UnVubmFibGUoKTsKLQkJCWpldHR5UnVubmFibGVfLmluaXQoKTsKLQkJfQotCQlyZXR1cm4gamV0dHlSdW5uYWJsZV87Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNKZXR0eVN0YXJ0ZWQoKSB7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gQXBwc2VydmVyUGx1Z2luLmdldERlZmF1bHQoKS5nZXRBcHBTZXJ2ZXIoKS5pc1J1bm5pbmcoKTsKLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCXB1YmxpYyBpbnQgZ2V0SmV0dHlQb3J0KCkgewotCQlyZXR1cm4gV2ViYXBwTWFuYWdlci5nZXRQb3J0KCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRKZXR0eUhvc3QoKSB7Ci0JCXJldHVybiBXZWJhcHBNYW5hZ2VyLmdldEhvc3QoKTsKLQl9Ci0KLQkKLQlwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQkJdHJ5IHsKLQkJCVdlYmFwcE1hbmFnZXIuc3RhcnQoIndzZSIpOwotCQl9IGNhdGNoIChUaHJvd2FibGUgdCkgewotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hPcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoT3B0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NjZlZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hPcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleUBjYS5pYm0uY29tCi0gKiAKLSAqIFRoaXMgc2ltcGxlIGNsYXNzIGlzIHVzZWQgdG8gaG9sZCBhIHNpbmdsZSBXZWIgU2VydmljZXMKLSAqIEV4cGxvcmVyIGxhdW5jaCBvcHRpb24gcHJvcGVydHkgYW5kIGl0cyB2YWx1ZS4gQWxsb3dlZAotICogbGF1bmNoIG9wdGlvbiBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIGJ5Ci0gKiA8Y29kZT57QGxpbmsgTGF1bmNoT3B0aW9uc308L2NvZGU+LgotICovCi1wdWJsaWMgY2xhc3MgTGF1bmNoT3B0aW9uIHsKLQlwcml2YXRlIFN0cmluZyBrZXlfOwotCi0JcHJpdmF0ZSBTdHJpbmcgb3B0aW9uXzsKLQotCS8qCi0JICogQ29uc3RydWN0cyBhIG5ldyBsYXVuY2ggb3B0aW9uIHdpdGggdGhlIGdpdmVuCi0JICogcHJvcGVydHkgbmFtZSBhbmQgdmFsdWUuIAotCSAqLwotCXB1YmxpYyBMYXVuY2hPcHRpb24oU3RyaW5nIGtleSwgU3RyaW5nIG9wdGlvbikgewotCQlrZXlfID0ga2V5OwotCQlvcHRpb25fID0gb3B0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHByb3BlcnR5IG5hbWUgb2YgdGhpcyBsYXVuY2ggb3B0aW9uLgotCSAqIEByZXR1cm4gVGhlIHByb3BlcnR5IG5hbWUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRLZXkoKSB7Ci0JCXJldHVybiBrZXlfOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoaXMgbGF1bmNoIG9wdGlvbi4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE9wdGlvbigpIHsKLQkJcmV0dXJuIG9wdGlvbl87Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hPcHRpb25zLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaE9wdGlvbnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkyZjAzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaE9wdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleUBjYS5pYm0uY29tCi0gKiAKLSAqIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgcHJvcGVydHkgbmFtZXMgdW5kZXJzdG9vZCBieSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0gKiBhbmQgdXNlZCB0byBjb25maWd1cmUgaXQncyBpbml0aWFsIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW91ciBhdCB0aGUgdGltZSBpdCBpcwotICogbGF1bmNoZWQuCi0gKiBAc2VlIExhdW5jaE9wdGlvbgotICovCi1wdWJsaWMgY2xhc3MgTGF1bmNoT3B0aW9ucyB7Ci0JLy8gR2VuZXJhbCBwdXJwb3NlIHByZWxvYWQgY29uc3RhbnRzCi0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBVEVfTE9DQVRJT04gPSAic3RhdGVMb2NhdGlvbiI7Ci0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04gPSAiZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uIjsKLQkKLQkvLyBXU0RMIFBhZ2UgcHJlbG9hZCBjb25zdGFudHMKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfVVJMID0gIndzZGwiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0VCX1NFUlZJQ0VfRU5EUE9JTlQgPSAid2ViU2VydmljZUVuZHBvaW50IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfUU5BTUVfU1RSSU5HID0gInNlcnZpY2VRTmFtZVN0cmluZyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX05BTUVfU1RSSU5HID0gImJpbmRpbmdOYW1lU3RyaW5nIjsKLQotCS8vIFVEREkgUGFnZSBwcmVsb2FkIGNvbnN0YW50cwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5RVUlSWV9VUkwgPSAiaW5xdWlyeSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIX1VSTCA9ICJwdWJsaXNoIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfTkFNRSA9ICJzZXJ2aWNlTmFtZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX0tFWSA9ICJzZXJ2aWNlS2V5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JJRVNfRElSRUNUT1JZID0gImNhdGVnb3JpZXNEaXJlY3RvcnkiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hXaXphcmRSdW5uYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hXaXphcmRSdW5uYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDhiNjk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoV2l6YXJkUnVubmFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkOwotCi1wdWJsaWMgY2xhc3MgTGF1bmNoV2l6YXJkUnVubmFibGUgZXh0ZW5kcyBUaHJlYWQgaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0JcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0KLQlwcml2YXRlIFN0cmluZyB3c2RsVVJMOwotCi0JcHJpdmF0ZSBib29sZWFuIGZpbmlzaDsKLQotCXB1YmxpYyBMYXVuY2hXaXphcmRSdW5uYWJsZShTdHJpbmcgaWQsIFN0cmluZyB3c2RsVVJMKSB7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy53c2RsVVJMID0gKHdzZGxVUkwgIT0gbnVsbCkgPyB3c2RsVVJMIDogIiI7Ci0JCWZpbmlzaCA9IGZhbHNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRmluaXNoKCkgewotCQlyZXR1cm4gZmluaXNoOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJdHJ5IHsKLQkJCUR5bmFtaWNXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNXaXphcmQoKTsKLQkJCXdpemFyZC5zZXRJbml0aWFsRGF0YShpZCk7Ci0JCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWwgPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih3c2RsVVJMKTsKLQkJCXdpemFyZC5pbml0KG51bGwsIHNlbCk7Ci0JCQlXaXphcmREaWFsb2cgd2QgPSBuZXcgV2l6YXJkRGlhbG9nKG5ldyBTaGVsbChEaXNwbGF5LmdldERlZmF1bHQoKSwKLQkJCQkJU1dULkFQUExJQ0FUSU9OX01PREFMKSwgd2l6YXJkKTsKLQkJCXdkLm9wZW4oKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJfSBmaW5hbGx5IHsKLQkJCWZpbmlzaCA9IHRydWU7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaFdpemFyZFRhc2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoV2l6YXJkVGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDIxNTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoV2l6YXJkVGFzay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3JlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLQotcHVibGljIGNsYXNzIExhdW5jaFdpemFyZFRhc2sgewotCS8vIHNpbmdsZXRvbgotCXByaXZhdGUgc3RhdGljIExhdW5jaFdpemFyZFRhc2sgdGFza187Ci0KLQkvLyB0aGUgc2hlbGwgZm9yIHRoZSB3aXphcmQgdG8gYmUgbGF1bmNoZWQKLQlwcml2YXRlIFNoZWxsIHNoZWxsXzsKLQotCS8vIHRoZSBMYXVuY2hXaXphcmRSdW5uYWJsZSB0aGF0IGlzIGN1cnJlbnRseSBydW5uaW5nCi0JcHJpdmF0ZSBMYXVuY2hXaXphcmRSdW5uYWJsZSBydW5uYWJsZV87Ci0KLQlwcml2YXRlIExhdW5jaFdpemFyZFRhc2soU2hlbGwgc2hlbGwpIHsKLQkJc2hlbGxfID0gc2hlbGw7Ci0JCXJ1bm5hYmxlXyA9IG51bGw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMYXVuY2hXaXphcmRUYXNrIGdldEluc3RhbmNlKCkgewotCQlpZiAodGFza18gPT0gbnVsbCkKLQkJCXRhc2tfID0gbmV3IExhdW5jaFdpemFyZFRhc2soUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKQotCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSk7Ci0JCXJldHVybiB0YXNrXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhc3luY0V4ZWMoUnVubmFibGUgcnVubmFibGUpIHRocm93cyBTV1RFeGNlcHRpb24gewotCQlzaGVsbF8uZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2hlY2tBbmRBc3luY0V4ZWMoTGF1bmNoV2l6YXJkUnVubmFibGUgcnVubmFibGUpIHsKLQkJdHJ5IHsKLQkJCWlmICghZ2V0SXNFeGVjdXRpbmcoKSkgewotCQkJCWFzeW5jRXhlYyhydW5uYWJsZSk7Ci0JCQkJcnVubmFibGVfID0gcnVubmFibGU7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9IGVsc2UKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRJc0V4ZWN1dGluZygpIHsKLQkJaWYgKHJ1bm5hYmxlXyAhPSBudWxsKSB7Ci0JCQlib29sZWFuIGlzRmluaXNoID0gcnVubmFibGVfLmlzRmluaXNoKCk7Ci0JCQlpZiAoaXNGaW5pc2gpCi0JCQkJcnVubmFibGVfID0gbnVsbDsKLQkJCXJldHVybiAhaXNGaW5pc2g7Ci0JCX0gZWxzZQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3Jlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9XU0V4cGxvcmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMmM0ZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9XU0V4cGxvcmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzIxICAgMTUxNDA5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0UgZG9lcyBub3Qgb3BlbiBpbiBleHRlcm5hbCBicm93c2VyIG9uIFJICi0gKiAyMDA2MDgwMiAgIDE1MDQyOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYxMjE5ICAgMTY4NjIwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0UgZG9lcyBub3Qgb3BlbiBpbiBleHRlcm5hbCBicm93c2VyIG9uIExpbnV4Ci0gKiAyMDA3MDIyMCAgIDE2ODYyMCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIGRvZXMgbm90IG9wZW4gaW4gZXh0ZXJuYWwgYnJvd3NlciBvbiBMaW51eCAoY29udC4pCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5icm93c2VyLklXZWJCcm93c2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmJyb3dzZXIuSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBXU0V4cGxvcmVyIHsKLQlwcml2YXRlIHN0YXRpYyBXU0V4cGxvcmVyIGluc3RhbmNlOwotCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGxhdW5jaE9wdGlvbnNLZXlfID0gMDsKLQotCXByaXZhdGUgSVdlYkJyb3dzZXIgaW50ZXJuYWxCcm93c2VyXyA9IG51bGw7Ci0JCi0JcHVibGljIFdTRXhwbG9yZXIoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBXU0V4cGxvcmVyIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotCQkJaW5zdGFuY2UgPSBuZXcgV1NFeHBsb3JlcigpOwotCQl9Ci0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldENvbnRleHROYW1lKCkgewotCQlyZXR1cm4gIndzZXhwbG9yZXIiOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UGFyZW50UGx1Z2luSUQoKSB7Ci0JCXJldHVybiBFeHBsb3JlclBsdWdpbi5JRDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdlYkFwcExvY2F0aW9uKCkgewotCQlyZXR1cm4gIndzZXhwbG9yZXIiOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0V2VsY29tZVVSTCgpIHsKLQkJcmV0dXJuICJ3c2V4cGxvcmVyLmpzcCI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRMYXVuY2hPcHRpb25SZWdpc3RyeVVSTCgpIHsKLQkJcmV0dXJuICJsYXVuY2hfb3B0aW9uc19yZWdpc3RyeS5qc3AiOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0QmFzZVVSTCgpIHsKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkgIAotCQkKLQkJc2IuYXBwZW5kKCJodHRwOi8vIik7IAotCQlzYi5hcHBlbmQoSmV0dHlSdW5uYWJsZS5nZXRKZXR0eVJ1bm5hYmxlKCkuZ2V0SmV0dHlIb3N0KCkpOyAKLQkJc2IuYXBwZW5kKCI6Iik7Ci0JCXNiLmFwcGVuZChKZXR0eVJ1bm5hYmxlLmdldEpldHR5UnVubmFibGUoKS5nZXRKZXR0eVBvcnQoKSk7Ci0JCXNiLmFwcGVuZCgiLyIpOwotCQlzYi5hcHBlbmQoIndzZSIpOwotCQlzYi5hcHBlbmQoIi8iKTsKLQkJc2IuYXBwZW5kKGdldENvbnRleHROYW1lKCkpOwotCQlzYi5hcHBlbmQoIi8iKTsKLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRNZXRhZGF0YURpcmVjdG9yeSgpIHsKLQkJLy8gPHdvcmtzcGFjZT4vLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8gKG5vdGUKLQkJLy8gdGhlIHRyYWlsaW5nIHNlcGFyYXRvcikuCi0JCXJldHVybiBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblN0YXRlTG9jYXRpb24oKTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBsYXVuY2goSVdvcmtiZW5jaCB3YiwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsLAotCQlMYXVuY2hPcHRpb25bXSBvcHRpb25zLCBib29sZWFuIGZvcmNlTGF1bmNoT3V0c2lkZUlERSkgewotCQkvLyBsYXVuY2hPcHRpb25LZXkKLQkJaW50IGxhdW5jaE9wdGlvbktleSA9IGdldExhdW5jaE9wdGlvbnNLZXkoKTsKLQkJLy8gV2ViIFNlcnZpY2VzIEV4cGxvcmVyIFVSTAotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXNiLmFwcGVuZChnZXRCYXNlVVJMKCkpOwotCQlzYi5hcHBlbmQoZ2V0V2VsY29tZVVSTCgpKTsKLQkJc2IuYXBwZW5kKCI/Iik7Ci0JCWlmIChvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSB7Ci0JCQlTdHJpbmcgZW5jb2RlZElEID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJZW5jb2RlZElEID0gVVJMRW5jb2Rlci5lbmNvZGUoRXhwbG9yZXJQbHVnaW4uSUQsCi0JCQkJCQlFeHBsb3JlclBsdWdpbi5DSEFSU0VUKTsKLQkJCX0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJCXJldHVybiBuZXcgU3RhdHVzKAotCQkJCQkJSVN0YXR1cy5FUlJPUiwKLQkJCQkJCUV4cGxvcmVyUGx1Z2luLklELAotCQkJCQkJMCwKLQkJCQkJCUV4cGxvcmVyUGx1Z2luCi0JCQkJCQkJCS5nZXRNZXNzYWdlKCIlTVNHX0JST0tFTl9WTV9ET0VTX05PVF9TVVBQT1JUX1VURi04IiksCi0JCQkJCQllKTsKLQkJCX0KLQkJCXNiLmFwcGVuZChlbmNvZGVkSUQpOwotCQkJc2IuYXBwZW5kKCI9Iik7Ci0JCQlzYi5hcHBlbmQobGF1bmNoT3B0aW9uS2V5KTsKLQkJfQotCQkvLyBsYXVuY2ggV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0JCXRyeSB7Ci0JCQlJV29ya2JlbmNoQnJvd3NlclN1cHBvcnQgYnJvd3NlclN1cHBvcnQgPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEJyb3dzZXJTdXBwb3J0KCk7Ci0JCQlJV2ViQnJvd3NlciBicm93c2VyID0gbnVsbDsKLQkJCQotCQkJaWYgKGZvcmNlTGF1bmNoT3V0c2lkZUlERSkgewotCQkJCQotCQkJCS8vIGV4dGVybmFsIGJyb3dzZXIgc3VwcG9ydCB1c2VzIHN3dCBQcm9ncmFtLmZpbmRQcm9ncmFtKCkgdG8gbG9jYXRlIGFuIGFwcHJvcHJpYXRlIGJyb3dzZXIgZm9yIEhUTUwgZmlsZXMKLQkJCQkvLyBjZXJ0YWluIHZlcnNpb25zIG9mIHN3dCBQcm9ncmFtIGNsYXNzIG5lZWQgdG8gYmUgcnVuIGZyb20gdGhlIFVJIHRocmVhZCwgb3RoZXJ3aXNlIGZpbmRQcm9ncmFtKCkgZG9lcyBub3QKLQkJCQkvLyB3b3JrIHByb3Blcmx5ICh0aGlzIGFwcGxpZXMgdG8gTGludXggb25seSkuICBUaGUgY29kZSBiZWxvdyBpcyB0byB3b3JrYXJvdW5kIHRoaXMgcHJvYmxlbS4KLQkJCQkKLQkJCQkvLyBEaXNwbGF5LmdldEN1cnJlbnQoKSB3aWxsIGJlIG51bGwgaWYgdGhpcyBpcyBub3QgdGhlIFVJIHRocmVhZAotCQkJCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSA9PSBudWxsKSB7Ci0JCQkJCQotCQkJCQkvLyBjcmVhdGUgYSBydW5uYWJsZSB0byBvcGVuIHRoZSBicm93c2VyLCBydW4gaXQgaW4gdGhlIFVJIHRocmVhZAotCQkJCQlPcGVuQnJvd3NlclJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IE9wZW5Ccm93c2VyUnVubmFibGUoYnJvd3NlclN1cHBvcnQsIG5ldyBVUkwoc2IudG9TdHJpbmcoKSkpOwotCQkJCQlEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyhydW5uYWJsZSk7Ci0JCQkJCQotCQkJCQlpZiAocnVubmFibGUuZ2V0RXhjZXB0aW9uKCkgIT0gbnVsbCkKLQkJCQkJCXRocm93IHJ1bm5hYmxlLmdldEV4Y2VwdGlvbigpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJYnJvd3NlciA9IGJyb3dzZXJTdXBwb3J0LmdldEV4dGVybmFsQnJvd3NlcigpOwotCQkJCQlicm93c2VyLm9wZW5VUkwobmV3IFVSTChzYi50b1N0cmluZygpKSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gYnJvd3NlcklkCi0JCQkJU3RyaW5nQnVmZmVyIGJyb3dzZXJJZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQlicm93c2VySWQuYXBwZW5kKEV4cGxvcmVyUGx1Z2luLklEKTsKLQkJCQlicm93c2VySWQuYXBwZW5kKGdldENvbnRleHROYW1lKCkpOwotCQkJCQotCQkJCWlmIChpbnRlcm5hbEJyb3dzZXJfPT1udWxsKQotCQkJCQlpbnRlcm5hbEJyb3dzZXJfID0gYnJvd3NlclN1cHBvcnQuY3JlYXRlQnJvd3Nlcihicm93c2VySWQudG9TdHJpbmcoKSk7Ci0JCQkJYnJvd3NlciA9IGludGVybmFsQnJvd3Nlcl87Ci0JCQkJYnJvd3Nlci5vcGVuVVJMKG5ldyBVUkwoc2IudG9TdHJpbmcoKSkpOwotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgRXhwbG9yZXJQbHVnaW4uSUQsIDAsCi0JCQkJCUV4cGxvcmVyUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfTEFVTkNIX1dTRVhQTE9SRVIiKSwKLQkJCQkJZSk7Ci0JCX0KLQkJLy8gcmVnaXN0ZXIgbGF1bmNoIG9wdGlvbnMKLQkJaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHsKLQkJCXRyeSB7Ci0JCQkJU3RyaW5nQnVmZmVyIGxhdW5jaE9wdGlvbnNSZWdVUkwgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJbGF1bmNoT3B0aW9uc1JlZ1VSTC5hcHBlbmQoZ2V0QmFzZVVSTCgpKTsKLQkJCQlsYXVuY2hPcHRpb25zUmVnVVJMLmFwcGVuZChnZXRMYXVuY2hPcHRpb25SZWdpc3RyeVVSTCgpKTsKLQkJCQlVUkwgdXJsID0gbmV3IFVSTChsYXVuY2hPcHRpb25zUmVnVVJMLnRvU3RyaW5nKCkpOwotCQkJCVVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotCQkJCWNvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7Ci0JCQkJUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKGNvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCkpOwotCQkJCVN0cmluZ0J1ZmZlciBwYXJhbXMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJU3RyaW5nIGVuY29kZWRJRCA9IG51bGw7Ci0JCQkJdHJ5IHsKLQkJCQkJZW5jb2RlZElEID0gVVJMRW5jb2Rlci5lbmNvZGUoRXhwbG9yZXJQbHVnaW4uSUQsCi0JCQkJCQkJRXhwbG9yZXJQbHVnaW4uQ0hBUlNFVCk7Ci0JCQkJfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCXJldHVybiBuZXcgU3RhdHVzKAotCQkJCQkJCUlTdGF0dXMuRVJST1IsCi0JCQkJCQkJRXhwbG9yZXJQbHVnaW4uSUQsCi0JCQkJCQkJMCwKLQkJCQkJCQlFeHBsb3JlclBsdWdpbgotCQkJCQkJCQkJLmdldE1lc3NhZ2UoIiVNU0dfQlJPS0VOX1ZNX0RPRVNfTk9UX1NVUFBPUlRfVVRGLTgiKSwKLQkJCQkJCQllKTsKLQkJCQl9Ci0JCQkJcGFyYW1zLmFwcGVuZChlbmNvZGVkSUQpOwotCQkJCXBhcmFtcy5hcHBlbmQoIj0iKTsKLQkJCQlwYXJhbXMuYXBwZW5kKGxhdW5jaE9wdGlvbktleSk7Ci0JCQkJcGFyYW1zLmFwcGVuZCgiJiIpOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCQlpZiAob3B0aW9uc1tpXSAhPSBudWxsKSB7Ci0JCQkJCQlwYXJhbXMuYXBwZW5kKG9wdGlvbnNbaV0uZ2V0S2V5KCkpOwotCQkJCQkJcGFyYW1zLmFwcGVuZCgiPSIpOwotCQkJCQkJU3RyaW5nIG9wdGlvbiA9IG51bGw7Ci0JCQkJCQl0cnkgewotCQkJCQkJCW9wdGlvbiA9IFVSTEVuY29kZXIuZW5jb2RlKG9wdGlvbnNbaV0uZ2V0T3B0aW9uKCksCi0JCQkJCQkJCQlFeHBsb3JlclBsdWdpbi5DSEFSU0VUKTsKLQkJCQkJCX0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJCQkJCXJldHVybiBuZXcgU3RhdHVzKAotCQkJCQkJCQkJSVN0YXR1cy5FUlJPUiwKLQkJCQkJCQkJCUV4cGxvcmVyUGx1Z2luLklELAotCQkJCQkJCQkJMCwKLQkJCQkJCQkJCUV4cGxvcmVyUGx1Z2luCi0JCQkJCQkJCQkJCS5nZXRNZXNzYWdlKCIlTVNHX0JST0tFTl9WTV9ET0VTX05PVF9TVVBQT1JUX1VURi04IiksCi0JCQkJCQkJCQllKTsKLQkJCQkJCX0KLQkJCQkJCXBhcmFtcy5hcHBlbmQob3B0aW9uKTsKLQkJCQkJCXBhcmFtcy5hcHBlbmQoIiYiKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlvdXQucHJpbnQocGFyYW1zLnRvU3RyaW5nKCkpOwotCQkJCW91dC5jbG9zZSgpOwotCQkJCW91dCA9IG51bGw7Ci0JCQkJSW5wdXRTdHJlYW0gaXMgPSBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCk7Ci0JCQkJaXMuY2xvc2UoKTsKLQkJCQlpcyA9IG51bGw7Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywgRXhwbG9yZXJQbHVnaW4uSUQsIDAsCi0JCQkJCQlFeHBsb3JlclBsdWdpbgotCQkJCQkJCQkuZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9MT0FEX0xBVU5DSF9PUFRJT05TIiksCi0JCQkJCQllKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBFeHBsb3JlclBsdWdpbi5JRCwgMCwgIiIsIG51bGwpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGludCBnZXRMYXVuY2hPcHRpb25zS2V5KCkgewotCQlyZXR1cm4gbGF1bmNoT3B0aW9uc0tleV8rKzsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBsYXVuY2goSVdvcmtiZW5jaCB3YiwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nW10gaW5xdWlyeVVSTCwgU3RyaW5nW10gcHVibGlzaFVSTCwKLQkJCWJvb2xlYW4gZm9yY2VMYXVuY2hPdXRzaWRlSURFKSB7Ci0JCWludCBpbnF1aXJ5VVJMT3B0aW9uTGVuZ3RoID0gKGlucXVpcnlVUkwgIT0gbnVsbCkgPyBpbnF1aXJ5VVJMLmxlbmd0aAotCQkJCTogMDsKLQkJaW50IHB1Ymxpc2hVUkxPcHRpb25MZW5ndGggPSAocHVibGlzaFVSTCAhPSBudWxsKSA/IHB1Ymxpc2hVUkwubGVuZ3RoCi0JCQkJOiAwOwotCQlMYXVuY2hPcHRpb25bXSBvcHRpb25zID0gbmV3IExhdW5jaE9wdGlvbltpbnF1aXJ5VVJMT3B0aW9uTGVuZ3RoCi0JCQkJKyBwdWJsaXNoVVJMT3B0aW9uTGVuZ3RoXTsKLQkJaW50IGluZGV4ID0gMDsKLQkJaWYgKGlucXVpcnlVUkwgIT0gbnVsbCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnF1aXJ5VVJMLmxlbmd0aDsgaSsrKSB7Ci0JCQkJb3B0aW9uc1tpbmRleF0gPSBuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuSU5RVUlSWV9VUkwsCi0JCQkJCQlpbnF1aXJ5VVJMW2ldKTsKLQkJCQlpbmRleCsrOwotCQkJfQotCQl9Ci0JCWlmIChwdWJsaXNoVVJMICE9IG51bGwpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHVibGlzaFVSTC5sZW5ndGg7IGkrKykgewotCQkJCW9wdGlvbnNbaW5kZXhdID0gbmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlBVQkxJU0hfVVJMLAotCQkJCQkJcHVibGlzaFVSTFtpXSk7Ci0JCQkJaW5kZXgrKzsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbGF1bmNoKHdiLCBzZWwsIG9wdGlvbnMsIGZvcmNlTGF1bmNoT3V0c2lkZUlERSk7Ci0JfQotfQotCi0vKioKLSAqIEhlbHBlciBjbGFzcyBmb3Igb3BlbmluZyBhIGJyb3dzZXIgYW5kIHN0b3JpbmcgdGhlCi0gKiBFeGNlcHRpb24gdGhyb3duIGlmIGl0IHdhcyB1bnN1Y2Nlc3NmdWwuIAotICovCi1jbGFzcyBPcGVuQnJvd3NlclJ1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgewotCQotCXByaXZhdGUgSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0IGJyb3dzZXJTdXBwb3J0OwotCXByaXZhdGUgVVJMIHVybDsKLQlwcml2YXRlIEV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOwotCQotCXB1YmxpYyBPcGVuQnJvd3NlclJ1bm5hYmxlKElXb3JrYmVuY2hCcm93c2VyU3VwcG9ydCBicm93c2VyU3VwcG9ydCwgVVJMIHVybCkgewotCQl0aGlzLmJyb3dzZXJTdXBwb3J0ID0gYnJvd3NlclN1cHBvcnQ7Ci0JCXRoaXMudXJsID0gdXJsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCXRyeSB7Ci0JCQlicm93c2VyU3VwcG9ydC5nZXRFeHRlcm5hbEJyb3dzZXIoKS5vcGVuVVJMKHVybCk7CQkJCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlleGNlcHRpb24gPSBlOwotCQl9Ci0JfQotCQotCXB1YmxpYyBFeGNlcHRpb24gZ2V0RXhjZXB0aW9uKCkgewotCQlyZXR1cm4gZXhjZXB0aW9uOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3JlckNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3JlckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc3ZGU1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NFeHBsb3JlckNvbnRleHQgewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmM3NjVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3JlcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleUBjYS5pYm0uY29tCi0gKiAKLSAqIFRoaXMgPGNvZGU+Q29tbWFuZDwvY29kZT4sIHdoZW4gZXhlY3V0ZWQsIGxhdW5jaGVzIHRoZQotICogV2ViIFNlcnZpY2VzIEV4cGxvcmVyLgotICovCi1wdWJsaWMgY2xhc3MgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQlwcml2YXRlIGJvb2xlYW4gZm9yY2VMYXVuY2hPdXRzaWRlSURFOwotCi0JcHJpdmF0ZSBMYXVuY2hPcHRpb25bXSBsYXVuY2hPcHRpb25zOwotCi0JcHVibGljIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQoKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgd3JpdGVDYXRlZ29yeUluZm8oU3RyaW5nIGlucXVpcnlVUkwsIFN0cmluZyBjYXRlZ29yaWVzRGlyZWN0b3J5KSB7Ci0JCXRyeSB7Ci0JCQlQcm9wZXJ0aWVzIHAgPSBuZXcgUHJvcGVydGllcygpOwotCQkJcC5zZXRQcm9wZXJ0eShMYXVuY2hPcHRpb25zLkNBVEVHT1JJRVNfRElSRUNUT1JZLAotCQkJCQljYXRlZ29yaWVzRGlyZWN0b3J5KTsKLQkJCVN0cmluZ0J1ZmZlciBwcm9wZXJ0aWVzRmlsZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQlwcm9wZXJ0aWVzRmlsZU5hbWUuYXBwZW5kKFdTRXhwbG9yZXIuZ2V0SW5zdGFuY2UoKQotCQkJCQkuZ2V0TWV0YWRhdGFEaXJlY3RvcnkoKSk7Ci0JCQlGaWxlIG1ldGFkYXRhRGlyZWN0b3J5RmlsZSA9IG5ldyBGaWxlKHByb3BlcnRpZXNGaWxlTmFtZS50b1N0cmluZygpKTsKLQkJCWlmICghbWV0YWRhdGFEaXJlY3RvcnlGaWxlLmV4aXN0cygpKSB7Ci0JCQkJbWV0YWRhdGFEaXJlY3RvcnlGaWxlLm1rZGlycygpOwotCQkJfQotCQkJcHJvcGVydGllc0ZpbGVOYW1lLmFwcGVuZChVUkxFbmNvZGVyLmVuY29kZShpbnF1aXJ5VVJMLCJVVEYtOCIpKS5hcHBlbmQoCi0JCQkJCSIucHJvcGVydGllcyIpOwotCQkJRmlsZU91dHB1dFN0cmVhbSBmb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ocHJvcGVydGllc0ZpbGVOYW1lCi0JCQkJCS50b1N0cmluZygpKTsKLQkJCXAuc3RvcmUoZm91dCwgbnVsbCk7Ci0JCQlmb3V0LmNsb3NlKCk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJfQotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoKSB7Ci0JCXJldHVybiBXU0V4cGxvcmVyLmdldEluc3RhbmNlKCkubGF1bmNoKG51bGwsIG51bGwsIGxhdW5jaE9wdGlvbnMsCi0JCQkJZm9yY2VMYXVuY2hPdXRzaWRlSURFKTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0gIHsKLSAgICByZXR1cm4gZXhlY3V0ZSgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmb3JjZUxhdW5jaE91dHNpZGVJREUKLQkgKiAgICAgICAgICAgIFRoZSBmb3JjZUxhdW5jaE91dHNpZGVJREUgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvcmNlTGF1bmNoT3V0c2lkZUlERShib29sZWFuIGZvcmNlTGF1bmNoT3V0c2lkZUlERSkgewotCQl0aGlzLmZvcmNlTGF1bmNoT3V0c2lkZUlERSA9IGZvcmNlTGF1bmNoT3V0c2lkZUlERTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbGF1bmNoT3B0aW9ucwotCSAqICAgICAgICAgICAgVGhlIGxhdW5jaE9wdGlvbnMgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhdW5jaE9wdGlvbnMoTGF1bmNoT3B0aW9uW10gbGF1bmNoT3B0aW9ucykgewotCQl0aGlzLmxhdW5jaE9wdGlvbnMgPSBsYXVuY2hPcHRpb25zOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dlYmFwcE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV2ViYXBwTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDUwNzUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV2ViYXBwTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRGljdGlvbmFyeTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuamV0dHkuSmV0dHlDb25maWd1cmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkludmFsaWRTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLlNlcnZpY2VSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBXZWJhcHBNYW5hZ2VyIHsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBob3N0OwotCXByaXZhdGUgc3RhdGljIGludCBwb3J0ID0gLTE7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFVVE9fU0VMRUNUX0pFVFRZX1BPUlQgPSAwOwotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzdGFydChTdHJpbmcgd2ViYXBwTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCURpY3Rpb25hcnkgZCA9IG5ldyBIYXNodGFibGUoKTsKLQkJCi0JCQotCQlkLnB1dCgiaHR0cC5wb3J0IiwgbmV3IEludGVnZXIoZ2V0UG9ydFBhcmFtZXRlcigpKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkvLyBzZXQgdGhlIGJhc2UgVVJMCi0JCWQucHV0KCJjb250ZXh0LnBhdGgiLCAiL3dzZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZC5wdXQoIm90aGVyLmluZm8iLCAib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkKLQkJLy8gc3VwcHJlc3MgSmV0dHkgSU5GTy9ERUJVRyBtZXNzYWdlcyB0byBzdGRlcnIKLQkJTG9nZ2VyLmdldExvZ2dlcigib3JnLm1vcnRiYXkiKS5zZXRMZXZlbChMZXZlbC5XQVJOSU5HKTsgLy8kTk9OLU5MUy0xJAkKLQotCQlKZXR0eUNvbmZpZ3VyYXRvci5zdGFydFNlcnZlcih3ZWJhcHBOYW1lLCBkKTsKLQkJY2hlY2tCdW5kbGUoKTsKLQkJCi0JfQotCQotCS8qCi0JICogRW5zdXJlcyB0aGF0IHRoZSBidW5kbGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIHRoZSBoaWdoZXN0IGF2YWlsYWJsZQotCSAqIHZlcnNpb24gaXMgc3RhcnRlZCBhbmQgcmVhZHMgdGhlIHBvcnQgbnVtYmVyCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja0J1bmRsZSgpIHRocm93cyBJbnZhbGlkU3ludGF4RXhjZXB0aW9uLCBCdW5kbGVFeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnkiKTsgLy8kTk9OLU5MUy0xJGlmIChidW5kbGUgIT0gbnVsbCkgewotCQlpZiAoYnVuZGxlLmdldFN0YXRlKCkgPT0gQnVuZGxlLlJFU09MVkVEKSB7Ci0JCQlidW5kbGUuc3RhcnQoQnVuZGxlLlNUQVJUX1RSQU5TSUVOVCk7Ci0JCX0KLQkJaWYgKHBvcnQgPT0gLTEpIHsKLQkJCS8vIEpldHR5IHNlbGVjdGVkIGEgcG9ydCBudW1iZXIgZm9yIHVzCi0JCQlTZXJ2aWNlUmVmZXJlbmNlW10gcmVmZXJlbmNlID0gYnVuZGxlLmdldEJ1bmRsZUNvbnRleHQoKS5nZXRTZXJ2aWNlUmVmZXJlbmNlcygib3JnLm9zZ2kuc2VydmljZS5odHRwLkh0dHBTZXJ2aWNlIiwgIihvdGhlci5pbmZvPW9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcikiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlPYmplY3QgYXNzaWduZWRQb3J0ID0gcmVmZXJlbmNlWzBdLmdldFByb3BlcnR5KCJodHRwLnBvcnQiKTsgLy8kTk9OLU5MUy0xJAotCQkJcG9ydCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylhc3NpZ25lZFBvcnQpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHN0b3AoU3RyaW5nIHdlYmFwcE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCUpldHR5Q29uZmlndXJhdG9yLnN0b3BTZXJ2ZXIod2ViYXBwTmFtZSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkvL0hlbHBCYXNlUGx1Z2luLmxvZ0Vycm9yKCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHN0b3BwaW5nIHRoZSBoZWxwIHNlcnZlciIsIGUpOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGludCBnZXRQb3J0KCkgewotCQlyZXR1cm4gcG9ydDsKLQl9Ci0KLQkvKgotCSAqIEdldCB0aGUgcG9ydCBudW1iZXIgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gSmV0dHkKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBpbnQgZ2V0UG9ydFBhcmFtZXRlcigpIHsKLQkJaWYgKHBvcnQgPT0gLTEpIHsgCi0JCQlyZXR1cm4gQVVUT19TRUxFQ1RfSkVUVFlfUE9SVDsKLQkJfQotCQlyZXR1cm4gcG9ydDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIb3N0KCkgewotCQlpZiAoaG9zdCA9PSBudWxsKSB7Ci0JCQlTdHJpbmcgaG9zdENvbW1hbmRMaW5lT3ZlcnJpZGUgPSBFeHBsb3JlclBsdWdpbi5nZXRCdW5kbGVDb250ZXh0KCkuZ2V0UHJvcGVydHkoInNlcnZlcl9ob3N0Iik7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChob3N0Q29tbWFuZExpbmVPdmVycmlkZSAhPSBudWxsICYmIGhvc3RDb21tYW5kTGluZU92ZXJyaWRlLnRyaW0oKS5sZW5ndGgoKSA+IDApIHsKLQkJCQlob3N0ID0gaG9zdENvbW1hbmRMaW5lT3ZlcnJpZGU7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlob3N0ID0gIjEyNy4wLjAuMSI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJfQotCQlyZXR1cm4gaG9zdDsKLQl9Ci0JCi0JcHJpdmF0ZSBXZWJhcHBNYW5hZ2VyKCkgewotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvYWN0aW9uL0xhdW5jaFdTRUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9hY3Rpb24vTGF1bmNoV1NFQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMzI0ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9hY3Rpb24vTGF1bmNoV1NFQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA4MjAgICAxOTE1ODUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5hY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgTGF1bmNoV1NFQWN0aW9uIGltcGxlbWVudHMgSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlCi17Ci0gIHB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLSAgewotICAgIEVjbGlwc2VTdGF0dXNIYW5kbGVyICAgICAgICAgICAgIGhhbmRsZXIgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0ICAgICAgICAgY29udGV4dCAgICAgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCBjb250ZXh0LCBoYW5kbGVyICk7IAotICAgIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQgICAgICAgIGNtZCAgICAgICAgID0gbmV3IFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQoKTsKLSAgICAKLSAgICBTdHJpbmcgc3RhdGVMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpOwotCVN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotCUxhdW5jaE9wdGlvbltdIGxhdW5jaE9wdGlvbnMgPSBuZXcgTGF1bmNoT3B0aW9uW10gewotCQluZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuU1RBVEVfTE9DQVRJT04sc3RhdGVMb2NhdGlvbiksCi0JCW5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTixkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pCi0JfTsKLSAgICBjbWQuc2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKLSAgICBjbWQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JICBjbWQuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlI2Rpc3Bvc2UoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsgIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93KQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeyAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeyAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDljODE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlcy5GYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdDsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQgZXh0ZW5kcyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdCB7Ci0JcHJpdmF0ZSBzdGF0aWMgV1NJTERvY3VtZW50IHdzaWxEb2NfOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkFWT1JJVEVTX0RFRkFVTFQgPSAicHJvcGVydGllcy9mYXZvcml0ZXNfZGVmYXVsdC53c2lsIjsKLQkKLQlwcml2YXRlIFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzXyA9IG51bGw7Ci0KLQlwdWJsaWMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdCgpIHsKLQkJc3VwZXIoKTsKLQkJd3NpbERvY18gPSBudWxsOwotCX0KLQotCXB1YmxpYyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0KFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzKSB7Ci0JCXN1cGVyKCk7Ci0JCXdzaWxEb2NfID0gbnVsbDsKLQkJZGVmYXVsdEZhdm9yaXRlc18gPSBkZWZhdWx0RmF2b3JpdGVzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVhZExvY2F0aW9uKCkgewotCQlTdHJpbmdCdWZmZXIgcmVhZExvY2F0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpZiAoZGVmYXVsdEZhdm9yaXRlc18gPT0gbnVsbCkKLQkJewotCQkJcmVhZExvY2F0aW9uLmFwcGVuZChFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpbkluc3RhbGxMb2NhdGlvbigpKTsKLQkJCXJlYWRMb2NhdGlvbi5hcHBlbmQoRkFWT1JJVEVTX0RFRkFVTFQpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcmVhZExvY2F0aW9uLmFwcGVuZChkZWZhdWx0RmF2b3JpdGVzXyk7Ci0JCX0KLQkJcmV0dXJuIHJlYWRMb2NhdGlvbi50b1N0cmluZygpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVMb2NhdGlvbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIFdTSUxEb2N1bWVudCBnZXRXU0lMRG9jdW1lbnQoKSB7Ci0JCWlmICh3c2lsRG9jXyA9PSBudWxsKSB7Ci0JCQl3c2lsRG9jXyA9IGxvYWRXU0lMRG9jdW1lbnQoZ2V0UmVhZExvY2F0aW9uKCksIHRydWUpOwotCQkJZ2V0RmF2b3JpdGVzVURESVJlZ2lzdHJpZXMoKTsKLQkJCS8qIFRPRE86IFB1YmxpYyByZWdpc3RyeSBzdHJpbmdzIHNob3VsZG4ndCBiZSBpbiBwcm9wZXJ0aWVzIC0gQWluJ3QgZXh0ZW5zaWJsZS4KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVnaXN0cmllcy5sZW5ndGg7IGkrKykgewotCQkJCXJlZ2lzdHJpZXNbaV0uc2V0TmFtZShXU1BsdWdpbi5nZXRSZXNvdXJjZVN0cmluZyhyZWdpc3RyaWVzW2ldLmdldE5hbWUoKSkpOwotCQkJfQotCQkJKi8KLQkJfQotCQlyZXR1cm4gd3NpbERvY187Ci0JfQotCi0JcHVibGljIFdTSUxEb2N1bWVudCBnZXRGYXZvcml0ZXNEZWZhdWx0KCkgewotCQlyZXR1cm4gZ2V0V1NJTERvY3VtZW50KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2F2ZSgpIHRocm93cyBXU0lMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL2Zhdm9yaXRlcy9GYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3NmExZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL2Zhdm9yaXRlcy9GYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3Q7Ci0KLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZVdTRSBleHRlbmRzIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0Ci17Ci0gIHByaXZhdGUgc3RhdGljIFdTSUxEb2N1bWVudCB3c2lsRG9jXzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkFWT1JJVEVTX1dTRVhQTE9SRVIgPSAiZmF2b3JpdGVzLndzaWwiOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzXyA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIHN0YXRlTG9jYXRpb25fID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB3c2lsRG9jXyA9IG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UoU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXMsIFN0cmluZyBzdGF0ZUxvY2F0aW9uKSB7Ci0Jc3VwZXIoKTsKLQl3c2lsRG9jXyA9IG51bGw7Ci0JZGVmYXVsdEZhdm9yaXRlc18gPSBkZWZhdWx0RmF2b3JpdGVzOwotCXN0YXRlTG9jYXRpb25fID0gc3RhdGVMb2NhdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZExvY2F0aW9uKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciByZWFkTG9jYXRpb24gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgcmVhZExvY2F0aW9uLmFwcGVuZChzdGF0ZUxvY2F0aW9uXyA9PSBudWxsID8gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCkgOiBzdGF0ZUxvY2F0aW9uXyk7Ci0gICAgcmVhZExvY2F0aW9uLmFwcGVuZChGQVZPUklURVNfV1NFWFBMT1JFUik7Ci0gICAgcmV0dXJuIHJlYWRMb2NhdGlvbi50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRSZWFkTG9jYXRpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50KCkKLSAgewotICAgIGlmICh3c2lsRG9jXyA9PSBudWxsKQotICAgIHsKLSAgICAgIHdzaWxEb2NfID0gbG9hZFdTSUxEb2N1bWVudChnZXRSZWFkTG9jYXRpb24oKSwgZmFsc2UpOwotICAgICAgaWYgKHdzaWxEb2NfID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3RvcmVGYXZvcml0ZXNEZWZhdWx0KCk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgc2F2ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB3c2lsRG9jXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVGYXZvcml0ZXNEZWZhdWx0KCkKLSAgewotICAgIHdzaWxEb2NfID0gKG5ldyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0KGRlZmF1bHRGYXZvcml0ZXNfKSkuZ2V0V1NJTERvY3VtZW50KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIwN2ZlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5QZXJzcGVjdGl2ZTsKLQotLy8gQWJzdHJhY3QgYWN0aW9uIGNsYXNzIHVzZWQgZm9yIGJvdGggTGluayBhbmQgRm9ybSBhY3Rpb25zLgotcHVibGljIGFic3RyYWN0IGNsYXNzIEFjdGlvbgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlXzsKLSAgcHJvdGVjdGVkIFZlY3RvciByZW1vdmVkUHJvcGVydGllc187Ci0KLSAgcHVibGljIEFjdGlvbigpCi0gIHsKLSAgICB0aGlzKG51bGwpOwotICB9Ci0KLSAgcHVibGljIEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gICAgcHJvcGVydHlUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgcmVtb3ZlZFByb3BlcnRpZXNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIENvbnRyb2xsZXIgZ2V0Q29udHJvbGxlcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl87Ci0gIH0KLQotICAvKioKLSAgKiBSZWFkIHByb3BlcnRpZXMgZnJvbSBhbiBIdHRwU2VydmxldFJlcXVlc3QgYW5kIGFkZCB0aGVtIHRvIHRoZSBwcm9wZXJ0eSB0YWJsZS4KLSAgKiBAcGFyYW0gSHR0cFNlcnZsZXRSZXF1ZXN0IFRoZSBIdHRwU2VydmxldFJlcXVlc3QgY29udGFpbmluZyB0aGUgZW1iZWRkZWQgcGFyYW1ldGVycy4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gV2hldGhlciBvciBub3QgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KTsKLQotICAvKioKLSAgKiBHZXQgdGhlIHByb3BlcnR5IHRhYmxlLgotICAqIEByZXR1cm4gSGFzaHRhYmxlIEEgaGFzaHRhYmxlIGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgYWN0aW9uLgotICAqLwotICBwdWJsaWMgZmluYWwgSGFzaHRhYmxlIGdldFByb3BlcnR5VGFibGUoKQotICB7Ci0gICAgcmV0dXJuIHByb3BlcnR5VGFibGVfOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBwcm9wZXJ0eSB0YWJsZS4KLSAgICogQHJldHVybiB2b2lkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlKQotICB7Ci0gICBwcm9wZXJ0eVRhYmxlXyA9IHByb3BlcnR5VGFibGU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgcHJvcGVydHkgdGFibGUuCi0gICAqIEBwYXJhbSB2b2lkCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRQcm9wZXJ0eShPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoa2V5LCB2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgKiBSZW1vdmUgYSBwcm9wZXJ0eSBmcm9tIHRoZSBwcm9wZXJ0eSB0YWJsZS4gVHJhY2sgdGhlIGRlbGV0aW9ucy4KLSAgKiBAcGFyYW0gT2JqZWN0IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IGJlaW5nIHJlbW92ZWQuCi0gICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZVByb3BlcnR5KE9iamVjdCBrZXkpCi0gIHsKLSAgICBwcm9wZXJ0eVRhYmxlXy5yZW1vdmUoa2V5KTsKLSAgICByZW1vdmVkUHJvcGVydGllc18uYWRkRWxlbWVudChrZXkpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nW10gZ2V0UHJvcGVydHlBc1N0cmluZ0FycmF5KE9iamVjdCBrZXkpCi0gIHsKLSAgICBPYmplY3Qgb2JqZWN0ID0gcHJvcGVydHlUYWJsZV8uZ2V0KGtleSk7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZ1tdKQotICAgICAgcmV0dXJuIChTdHJpbmdbXSlvYmplY3Q7Ci0gICAgZWxzZSBpZiAob2JqZWN0ICE9IG51bGwpCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHtvYmplY3QudG9TdHJpbmcoKX07Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBleGVjdXRlKCkKLSAgewotICAgIHJldHVybiBleGVjdXRlKHRydWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gZXhlY3V0ZShib29sZWFuIHVzZUFjdGlvbkVuZ2luZSkKLSAgewotICAgIGlmICh1c2VBY3Rpb25FbmdpbmUpCi0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0QWN0aW9uRW5naW5lKCkuZXhlY3V0ZUFjdGlvbih0aGlzKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcnVuKCk7Ci0gIH0KLQotICAvLyBBYnN0cmFjdCBtZXRob2QgZm9yIHJ1bm5pbmcgdGhpcyBhY3Rpb24uCi0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHJ1bigpOwotICAKLSAgLyoqCi0gICogUmV0dXJuIHRoZSB0cmFuc2Zvcm1lcnMgdXNlZCB0byBub3JtYWxpemUgdGhlIGlucHV0L291dHB1dCBwYXJhbWV0ZXJzIGZvciB0aGlzIGFjdGlvbgotICAqIEByZXR1cm4gSVRyYW5zZm9ybWVyW10KLSAgKi8KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICByZXR1cm4gbmV3IElUcmFuc2Zvcm1lcltdIHtuZXcgQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXyl9OwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKFBlcnNwZWN0aXZlIHBlcnNwZWN0aXZlLE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUsU3RyaW5nIGV4Y2VwdGlvbk5hbWUsVGhyb3dhYmxlIHQpCi0gIHsKLSAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShwZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZXhjZXB0aW9uTmFtZSk7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodC5nZXRNZXNzYWdlKCkpOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0NoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ODMyZjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0NoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAiYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbkpTUC5qc3AiOwotICB9Ci0gICAgCi0gIHB1YmxpYyBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUzZmRjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MDYgICAxNTYzOTggamVmZmxpdUBjYS5pYm0uY29tIC0gSmVmZnJleSBMaXUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2xlYXJOb2RlQWN0aW9uIGV4dGVuZHMgTm9kZUFjdGlvbgotewotICBwdWJsaWMgQ2xlYXJOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsbm9kZU1hbmFnZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpZiAoIWlzU3RhbGVOb2RlKG5vZGVJZCkpCi0gICAgewotICAgICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAvL2VsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgTGlzdCBlbGVtZW50czJyZW1vdmUgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBjb2xsZWN0RWxlbWVudHMyUmVtb3ZlKGVsZW1lbnQsIGVsZW1lbnRzMnJlbW92ZSk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZWxlbWVudHMycmVtb3ZlLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFRyZWVFbGVtZW50IGUgPSAoVHJlZUVsZW1lbnQpaXQubmV4dCgpOwotICAgICAgICBlLmdldE1vZGVsKCkucmVtb3ZlRWxlbWVudChlKTsKLSAgICAgIH0KLSAgICAgIGlmIChlbGVtZW50LmdldE1vZGVsKCkuZ2V0Um9vdEVsZW1lbnQoKSAhPSBlbGVtZW50KQotICAgICAgICBub2RlTWFuYWdlcl8ucmVtb3ZlRnJvbU5vZGVUYWJsZShub2RlSWQpOwotICAgICAgLy8gRG8gbm90IGFkZCB0aGlzIHRvIHRoZSBoaXN0b3J5LgotICAgICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IGNvbnRyb2xsZXJfLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0lORk9fTk9ERV9DTEVBUkVEIixub2RlLmdldE5vZGVOYW1lKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY29sbGVjdEVsZW1lbnRzMlJlbW92ZShUcmVlRWxlbWVudCBlbGVtZW50LCBMaXN0IGVsZW1lbnRzMnJlbW92ZSkKLSAgewotICAgIGlmICghZWxlbWVudHMycmVtb3ZlLmNvbnRhaW5zKGVsZW1lbnQpKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50LmdldE1vZGVsKCkuZ2V0Um9vdEVsZW1lbnQoKSAhPSBlbGVtZW50KQotICAgICAgICBlbGVtZW50czJyZW1vdmUuYWRkKGVsZW1lbnQpOwotICAgICAgRW51bWVyYXRpb24gcmVscyA9IGVsZW1lbnQuZ2V0UmVscygpOwotICAgICAgd2hpbGUgKHJlbHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIFJlbCByZWwgPSAoUmVsKXJlbHMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgU3RyaW5nIHJlbE5hbWUgPSByZWwuZ2V0TmFtZSgpOwotICAgICAgICBpZiAoIU1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUi5lcXVhbHMocmVsTmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBFbnVtZXJhdGlvbiBjaGlsZHJlbiA9IGVsZW1lbnQuZ2V0RWxlbWVudHMocmVsLmdldE5hbWUoKSk7Ci0gICAgICAgICAgd2hpbGUgKGNoaWxkcmVuLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbGxlY3RFbGVtZW50czJSZW1vdmUoKFRyZWVFbGVtZW50KWNoaWxkcmVuLm5leHRFbGVtZW50KCksIGVsZW1lbnRzMnJlbW92ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8vIERlbGV0aW5nIGEgbm9kZSBmcm9tIHRoZSB0cmVlIHJlc3VsdHMgaW4gY2hhbmdlcyB0byB0aGUgdHJlZXZpZXcgYW5kIHN0YXR1cyBjb250ZW50cy4KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0NsZWFyVmlld0VsZW1lbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DbGVhclZpZXdFbGVtZW50QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NTk4ZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0NsZWFyVmlld0VsZW1lbnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLQotLy8gQWJzdHJhY3QgYWN0aW9uIGNsYXNzIHVzZWQgZm9yIGJvdGggTGluayBhbmQgRm9ybSBhY3Rpb25zLgotcHVibGljIGFic3RyYWN0IGNsYXNzIENsZWFyVmlld0VsZW1lbnRBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIGxpc3RNYW5hZ2VyUmVsXzsKLSAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gIHB1YmxpYyBDbGVhclZpZXdFbGVtZW50QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixOb2RlTWFuYWdlciBub2RlTWFuYWdlcixTdHJpbmcgbGlzdE1hbmFnZXJSZWwpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBub2RlTWFuYWdlcl8gID0gbm9kZU1hbmFnZXI7Ci0gICAgbGlzdE1hbmFnZXJSZWxfID0gbGlzdE1hbmFnZXJSZWw7Ci0gIH0KLQotICAvLyAuLi5qc3A/dmlld0lkPS4uLgotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgdmlld0lkU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgLy8gUGVyZm9ybSBkYXRhIHZhbGlkYXRpb24uCi0gICAgdHJ5Ci0gICAgewotICAgICAgSW50ZWdlci5wYXJzZUludCh2aWV3SWRTdHJpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsZWQhCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELHZpZXdJZFN0cmluZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IHZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFZpZXdUb29sIHZpZXdUb29sID0gKFZpZXdUb29sKXNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGlmICh2aWV3VG9vbC5nZXRUb29sTWFuYWdlcih2aWV3SWQpID09IG51bGwpCi0gICAgewotICAgICAgLy8gU3RhbGUgdmlldy4KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIExpc3RNYW5hZ2VyIGxpc3RNYW5hZ2VyID0gKExpc3RNYW5hZ2VyKWVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChsaXN0TWFuYWdlclJlbF8pOwotICAgIGxpc3RNYW5hZ2VyLnJlbW92ZUVsZW1lbnRXaXRoVmlld0lkKHZpZXdJZCk7Ci0gICAgdmlld1Rvb2wuY2xlYXJWaWV3VG9vbE1hbmFnZXIodmlld0lkKTsKLSAgICBzZWxlY3RlZE5vZGUuc2V0Vmlld0lkKEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0gICAgLy8gRG8gbm90IGFkZCB0aGlzIHRvIHRoZSBoaXN0b3J5LgotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk0ZDMwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvRm9ybUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRm9ybUFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwdWJsaWMgRm9ybUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciA9IG5ldyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcigpOwotICAgICAgcGFyc2VyLnBhcnNlUmVxdWVzdChyZXF1ZXN0LEhUTUxVdGlscy5VVEY4X0VOQ09ESU5HKTsKLSAgICAgIGdldFNlbGVjdGVkRm9ybVRvb2woKS5jbGVhckVycm9ycygpOwotICAgICAgYm9vbGVhbiByZXN1bHQgPSBwcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgICAgcmVtb3ZlZFByb3BlcnRpZXNfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBjYXRjaCAoTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlUYWJsZShIYXNodGFibGUgcHJvcGVydHlUYWJsZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHByb2Nlc3NQYXJzZWRSZXN1bHRzKG5ldyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcihwcm9wZXJ0eVRhYmxlKSk7Ci0gICAgfQotICAgIGNhdGNoIChNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiBtZmRlKQotICAgIHsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHByb3BlcnR5VGFibGUua2V5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPYmplY3Qga2V5ID0gaXQubmV4dCgpOwotICAgICAgSGFzaHRhYmxlIHRoaXNQcm9wZXJ0eVRhYmxlID0gZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgaWYgKCF0aGlzUHJvcGVydHlUYWJsZS5jb250YWluc0tleShrZXkpKQotICAgICAgICBhZGRQcm9wZXJ0eShrZXksIHByb3BlcnR5VGFibGUuZ2V0KGtleSkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZFRvSGlzdG9yeShpbnQgcGVyc3BlY3RpdmVJZCxTdHJpbmcgdXJsKQotICB7Ci0gICAgY29udHJvbGxlcl8uYWRkVG9IaXN0b3J5KHBlcnNwZWN0aXZlSWQsdXJsKTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvRm9ybUlucHV0RXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvRm9ybUlucHV0RXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMmNjYTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1JbnB1dEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLS8vIEEgY2xhc3MgZm9yIHJlcG9ydGluZyBmb3JtIGlucHV0IGV4Y2VwdGlvbnMuCi1wdWJsaWMgY2xhc3MgRm9ybUlucHV0RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0gIC8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1Nzg0NjYwMTY4NTkzODc0Mkw7Ci0KLXB1YmxpYyBGb3JtSW5wdXRFeGNlcHRpb24oU3RyaW5nIG1zZykKLSAgewotICAgIHN1cGVyKG1zZyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ3MjQ1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExXcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICAvLyBvcyBpcyB0aGUgT3V0cHV0U3RyZWFtIG9mIHRoZSBmaWxlIGluIHRoZSBmaWxlIHN5c3RlbQotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiB3cml0ZShPdXRwdXRTdHJlYW0gb3MpOwotCi0gIC8vIHRoZSBkZWZhdWx0IG5hbWUgZm9yIHRoZSBmaWxlCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0RGVmYXVsdEZpbGVOYW1lKCk7Ci0KLSAgcHVibGljIGJvb2xlYW4gd3JpdGVXU0RMRGVmaW5pdGlvbihPdXRwdXRTdHJlYW0gb3MsIERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdTRExGYWN0b3J5IHdzZGxGYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICAgICAgV1NETFdyaXRlciB3c2RsV3JpdGVyID0gd3NkbEZhY3RvcnkubmV3V1NETFdyaXRlcigpOwotICAgICAgd3NkbFdyaXRlci53cml0ZVdTREwoZGVmaW5pdGlvbiwgb3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gd3JpdGVXU0lMRG9jdW1lbnQoT3V0cHV0U3RyZWFtIG9zLCBXU0lMRG9jdW1lbnQgd3NpbERvYykKLSAgewotICAgIE91dHB1dFN0cmVhbVdyaXRlciBvc3cgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIG9zdyA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3MpOwotICAgICAgd3NpbERvYy53cml0ZShvc3cpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYgKG9zdyAhPSBudWxsKQotICAgICAgICAgIG9zdy5jbG9zZSgpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQsIFN0cmluZyBqc3BQYWdlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKGpzcFBhZ2UpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc/Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBub2RlSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBTdHJpbmcgdG9vbElEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgU3RyaW5nIHZpZXdJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIFN0cmluZyB2aWV3VG9vbElEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQobm9kZUlEKTsKLSAgICAgIEludGVnZXIucGFyc2VJbnQodG9vbElEKTsKLSAgICAgIEludGVnZXIucGFyc2VJbnQodmlld0lEKTsKLSAgICAgIEludGVnZXIucGFyc2VJbnQodmlld1Rvb2xJRCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgbm9kZUlEKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVE9PTElELCB0b29sSUQpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIHZpZXdJRCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQsIHZpZXdUb29sSUQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMGMzZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzIxICAgMTQ5MDcwIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MsIHVwZGF0ZSB0byByZXNwZWN0IHByZWZlcmVuY2VzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzaWwuQWRkV1NETFRvV1NJTENvbW1hbmQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiBleHRlbmRzIEZvcm1BY3Rpb24gewotICBwcml2YXRlIElXb3Jrc3BhY2VSb290IGlXb3Jrc3BhY2VSb290XzsKLSAgcHJpdmF0ZSBJUHJvamVjdCBpUHJvamVjdF87Ci0gIHByaXZhdGUgSVJlc291cmNlIHRhcmdldEZpbGVSZXNvdXJjZV87Ci0KLSAgICBwdWJsaWMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgICAgICBpV29ya3NwYWNlUm9vdF8gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICAgICAgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgICAgICBNZXNzYWdlUXVldWUgbXNnUXVldWUgPSBjb250cm9sbGVyXy5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgICAgIFN0cmluZyB3b3JrYmVuY2hQcm9qZWN0TmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLldPUktCRU5DSF9QUk9KRUNUX05BTUUpOwotICAgICAgICBpZiAod29ya2JlbmNoUHJvamVjdE5hbWUgPT0gbnVsbCB8fCB3b3JrYmVuY2hQcm9qZWN0TmFtZS5sZW5ndGgoKSA8PSAwKSB7Ci0gICAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dPUktCRU5DSF9QUk9KRUNUIikpOwotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlQcm9qZWN0XyA9IGlXb3Jrc3BhY2VSb290Xy5nZXRQcm9qZWN0KHdvcmtiZW5jaFByb2plY3ROYW1lKTsKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuV09SS0JFTkNIX1BST0pFQ1RfTkFNRSwgd29ya2JlbmNoUHJvamVjdE5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBpbXBvcnRGaWxlID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUpOwotICAgICAgICBpZiAoaW1wb3J0RmlsZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFLCBBY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUpOwotICAgICAgICAgICAgU3RyaW5nIGltcG9ydGVkRmlsZU5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUpOwotICAgICAgICAgICAgaWYgKGltcG9ydGVkRmlsZU5hbWUgPT0gbnVsbCB8fCBpbXBvcnRlZEZpbGVOYW1lLmxlbmd0aCgpIDw9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9GSUxFX05BTUUiKSk7Ci0gICAgICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLklNUE9SVEVEX0ZJTEVfTkFNRSwgaW1wb3J0ZWRGaWxlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGltcG9ydFRvV1NJTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLklNUE9SVF9UT19XU0lMKTsKLSAgICAgICAgaWYgKGltcG9ydFRvV1NJTCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLklNUE9SVF9UT19XU0lMLCBBY3Rpb25JbnB1dHMuSU1QT1JUX1RPX1dTSUwpOwotICAgICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9XU0RMX1VSTCwgcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuSU1QT1JURURfV1NETF9VUkwpKTsKLSAgICAgICAgICAgIFN0cmluZyB3c2lsRmlsZU5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5XU0lMX0ZJTEVfTkFNRSk7Ci0gICAgICAgICAgICBpZiAod3NpbEZpbGVOYW1lID09IG51bGwgfHwgd3NpbEZpbGVOYW1lLmxlbmd0aCgpIDw9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XU0lMX0ZJTEVfTkFNRSIpKTsKLSAgICAgICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuV1NJTF9GSUxFX05BTUUsIHdzaWxGaWxlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGltcG9ydEZpbGUgPT0gbnVsbCAmJiBpbXBvcnRUb1dTSUwgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fSU1QT1JUX09QVElPTl9TRUxFQ1RFRCIpKTsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICAgIH0KLQotICAgIHByaXZhdGUgT3V0cHV0U3RyZWFtIGdldE91dHB1dFN0cmVhbShTdHJpbmcgZGVmYXVsdEZpbGVOYW1lKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSArIGRlZmF1bHRGaWxlTmFtZSk7Ci0gICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7Ci0gICAgICAgIHJldHVybiBmb3M7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGltcG9ydFRlbXBGaWxlVG9XZWJQcm9qZWN0KFN0cmluZyBkZWZhdWx0RmlsZU5hbWUpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLSAgICB7Ci0gICAgICBpZiAodGFyZ2V0RmlsZVJlc291cmNlXyAhPSBudWxsICYmIHRhcmdldEZpbGVSZXNvdXJjZV8uZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotICAgICAgICB0YXJnZXRGaWxlUmVzb3VyY2VfLmRlbGV0ZSh0cnVlLG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCi0gICAgICBTdHJpbmcgaW1wb3J0ZWRGaWxlTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUpOwotICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKStkZWZhdWx0RmlsZU5hbWUpOwotICAgICAgQnVmZmVyZWRJbnB1dFN0cmVhbSBiaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpKTsKLQotICAgICAgSUZpbGUgaUZpbGUgPSBpUHJvamVjdF8uZ2V0RmlsZSgiLyIraW1wb3J0ZWRGaWxlTmFtZSk7Ci0gICAgICBpRmlsZS5jcmVhdGUoYmlzLHRydWUsbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLSAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGUKLSAgICAgIGZpbGUuZGVsZXRlKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBmaWxlRXhpc3RzKCkKLSAgICB7Ci0gICAgICBTdHJpbmcgaW1wb3J0ZWRGaWxlTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUpOwotICAgICAgaWYgKGltcG9ydGVkRmlsZU5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGFyZ2V0RmlsZVJlc291cmNlXyA9IGlQcm9qZWN0Xy5maW5kTWVtYmVyKGltcG9ydGVkRmlsZU5hbWUpOwotICAgICAgICByZXR1cm4gKHRhcmdldEZpbGVSZXNvdXJjZV8gIT0gbnVsbCAmJiB0YXJnZXRGaWxlUmVzb3VyY2VfLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1RhcmdldEZpbGVSZXNvdXJjZVJlYWRPbmx5KCkKLSAgICB7Ci0gICAgICByZXR1cm4gdGFyZ2V0RmlsZVJlc291cmNlXy5nZXRSZXNvdXJjZUF0dHJpYnV0ZXMoKS5pc1JlYWRPbmx5KCk7Ci0gICAgfQotCi0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gaXNDaGVja291dEZpbGVzRW5hYmxlZCgpCi0gICAgewotICAgIAlyZXR1cm4gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VQbHVnaW5GaWxlTWVzc2FnZShTdHJpbmcgbWVzc2FnZUlkKQotICAgIHsKLSAgICAgIFN0cmluZyBpbXBvcnRlZEZpbGVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLklNUE9SVEVEX0ZJTEVfTkFNRSk7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0TWVzc2FnZShtZXNzYWdlSWQsbmV3IFN0cmluZ1tde2lQcm9qZWN0Xy5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksaW1wb3J0ZWRGaWxlTmFtZX0pOwotICAgIH0KLQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkKLSAgICB7Ci0gICAgCXJldHVybiBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCkuaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUVkaXQoKQotICAgIHsKLSAgICAgIElGaWxlW10gZmlsZXMgPSBuZXcgSUZpbGVbMV07Ci0gICAgICBmaWxlc1swXSA9IChJRmlsZSl0YXJnZXRGaWxlUmVzb3VyY2VfOwotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkudmFsaWRhdGVFZGl0KGZpbGVzLG51bGwpOwotICAgICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IGNvbnRyb2xsZXJfLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uoc3RhdHVzLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gc3RhdHVzLmlzT0soKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgICAgIE1lc3NhZ2VRdWV1ZSBtc2dRdWV1ZSA9IGNvbnRyb2xsZXJfLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgICAgICBpZiAocHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRfRklMRSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgICAgIFN0cmluZyBkZWZhdWx0RmlsZU5hbWUgPSBhY3Rpb24uZ2V0RGVmYXVsdEZpbGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3Rpb24ud3JpdGUoZ2V0T3V0cHV0U3RyZWFtKGRlZmF1bHRGaWxlTmFtZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1dSSVRJTkdfVEVNUF9GSUxFX1RPX0ZTIikpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGltcG9ydFRlbXBGaWxlVG9XZWJQcm9qZWN0KGRlZmF1bHRGaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGltcG9ydGVkRmlsZU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FKTsKLSAgICAgICAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19JTkZPX0lNUE9SVF9UT19XT1JLQkVOQ0hfU1VDQ0VTU0ZVTCIsIGltcG9ydGVkRmlsZU5hbWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZm5mZSkgewotICAgICAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoZm5mZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0gICAgICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRfVE9fV1NJTCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLldPUktCRU5DSF9QUk9KRUNUX05BTUUpOwotICAgICAgICAgICAgU3RyaW5nIGltcG9ydGVkV1NJTEZpbGVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLldTSUxfRklMRV9OQU1FKTsKLSAgICAgICAgICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLklNUE9SVEVEX1dTRExfVVJMKTsKLSAgICAgICAgICAgIFN0cmluZ0J1ZmZlciB3c2lsUGxhdGZvcm1VUkwgPSBuZXcgU3RyaW5nQnVmZmVyKCJwbGF0Zm9ybTovcmVzb3VyY2UvIik7Ci0gICAgICAgICAgICB3c2lsUGxhdGZvcm1VUkwuYXBwZW5kKHByb2plY3ROYW1lKTsKLSAgICAgICAgICAgIHdzaWxQbGF0Zm9ybVVSTC5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAgIHdzaWxQbGF0Zm9ybVVSTC5hcHBlbmQoaW1wb3J0ZWRXU0lMRmlsZU5hbWUpOwotICAgICAgICAgICAgQWRkV1NETFRvV1NJTENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRXU0RMVG9XU0lMQ29tbWFuZCgpOwotICAgICAgICAgICAgU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbNV07Ci0gICAgICAgICAgICBhcmdzWzBdID0gQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1dTSUw7Ci0gICAgICAgICAgICBhcmdzWzFdID0gd3NpbFBsYXRmb3JtVVJMLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBhcmdzWzJdID0gQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1dTREw7Ci0gICAgICAgICAgICBhcmdzWzNdID0gd3NkbFVSTDsKLSAgICAgICAgICAgIGFyZ3NbNF0gPSBBZGRXU0RMVG9XU0lMQ29tbWFuZC5BUkdfUkVTT0xWRV9XU0RMOwotICAgICAgICAgICAgY29tbWFuZC5zZXRBcmd1bWVudHMoYXJncyk7Ci0gICAgICAgICAgICBJRW52aXJvbm1lbnQgZW52ID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudChudWxsLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgIGNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgICAgICAgICAgY29tbWFuZC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gICAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19JTkZPX0lNUE9SVF9TRVJWSUNFX1JFRl9UT19XU0lMX1NVQ0NFU1NGVUwiLCBpbXBvcnRlZFdTSUxGaWxlTmFtZSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIG5ld0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1M2EzNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hXaXphcmRSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoV2l6YXJkVGFzazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gZXh0ZW5kcyBGb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB3aXphcmRJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1dJWkFSRCk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9XSVpBUkQsIHdpemFyZElEKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGxhdW5jaFdpemFyZChTdHJpbmcgd3NkbFVSTCkKLSAgewotICAgIExhdW5jaFdpemFyZFRhc2sgdGFzayA9IExhdW5jaFdpemFyZFRhc2suZ2V0SW5zdGFuY2UoKTsKLSAgICBpZiAodGFzay5nZXRJc0V4ZWN1dGluZygpKQotICAgIHsKLSAgICAgIGNvbnRyb2xsZXJfLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1dJWkFSRF9BTFJFQURZX1JVTk5JTkciKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGludCB3aXphcmRJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1dJWkFSRCkpOwotICAgIExhdW5jaFdpemFyZFJ1bm5hYmxlIHJ1bm5hYmxlOwotICAgIGlmICh3aXphcmRJRCA9PSBBY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfQ0xJRU5UX1dJWkFSRCkKLSAgICAgIHJ1bm5hYmxlID0gbmV3IExhdW5jaFdpemFyZFJ1bm5hYmxlKCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiLCB3c2RsVVJMKTsKLSAgICBlbHNlIGlmICh3aXphcmRJRCA9PSBBY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfU0tFTEVUT05fV0laQVJEKQotICAgICAgcnVubmFibGUgPSBuZXcgTGF1bmNoV2l6YXJkUnVubmFibGUoIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIiwgd3NkbFVSTCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhc2suY2hlY2tBbmRBc3luY0V4ZWMocnVubmFibGUpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0xpbmtBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MaW5rQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZjY0NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0xpbmtBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotLy8gQWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSBhY3Rpb24gb2YgY2xpY2tpbmcgYSBsaW5rLiBUaGVzZSBhY3Rpb25zCi0vLyBtYXkgY2hhbmdlIHRoZSBoaXN0b3J5IGxpc3QuCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGlua0FjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwcml2YXRlIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1N0YWxlQnJlYWRDcnVtYl87Ci0KLSAgcHVibGljIExpbmtBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgaXNBZGRlZFRvSGlzdG9yeV8gPSBmYWxzZTsKLSAgICBpc1N0YWxlQnJlYWRDcnVtYl8gPSBmYWxzZTsKLSAgfQotCi0gIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhpcyBoaXN0b3J5IGxpc3QuCi0gIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUgcnVuKCkgbWV0aG9kLgotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBpc0FkZGVkVG9IaXN0b3J5XzsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCk7Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgU3RyaW5nIGlzSGlzdG9yeVN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpOwotICAgIGlmIChpc0hpc3RvcnlTdHJpbmcgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuSVNISVNUT1JZLGlzSGlzdG9yeVN0cmluZyk7Ci0gICAgcmV0dXJuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhyZXF1ZXN0KTsKLSAgfQotCi0gIC8vIEFkZCB0aGUgYWN0aW9uJ3MgVVJMIHRvIHRoZSBjb250cm9sbGVyJ3MgaGlzdG9yeSBsaXN0LgotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRUb0hpc3RvcnkoaW50IHBlcnNwZWN0aXZlSWQsU3RyaW5nIHVybCkKLSAgewotICAgIGlmICghaXNIaXN0b3J5QWN0aW9uKCkpCi0gICAgICBpc0FkZGVkVG9IaXN0b3J5XyA9IGNvbnRyb2xsZXJfLmFkZFRvSGlzdG9yeShwZXJzcGVjdGl2ZUlkLHVybCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0hpc3RvcnlBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIChwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTdGFsZUJyZWFkQ3J1bWIoKQotICB7Ci0gICAgaWYgKGlzSGlzdG9yeUFjdGlvbigpKQotICAgIHsKLSAgICAgIGlzU3RhbGVCcmVhZENydW1iXyA9IHRydWU7Ci0gICAgICBjb250cm9sbGVyXy5wcm9jZXNzU3RhbGVCcmVhZENydW1iKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdGFsZUJyZWFkQ3J1bWIoKQotICB7Ci0gICAgcmV0dXJuIGlzU3RhbGVCcmVhZENydW1iXzsKLSAgfQotCi0gIC8vIENhbGwgdGhpcyB3aGVuIGEgc3RhbGUgYnJlYWRjcnVtYiBpcyBlbmNvdW50ZXJlZCB3aGlsZSB0cmF2ZXJzaW5nIGhpc3RvcnkgY2hhaW4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV4dEhpc3RvcnlBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24uZ2V0QWN0aW9uTGluayhjb250cm9sbGVyXy5nZXRIaXN0b3J5RGlyZWN0aW9uKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL05vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I0NGE2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOb2RlQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfOwotICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNOb2RlU2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzVmlld1NlbGVjdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiByZXF1aXJlc1N0YXR1c1VwZGF0ZV87Ci0KLSAgcHVibGljIE5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbm9kZU1hbmFnZXJfID0gbm9kZU1hbmFnZXI7Ci0gICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfID0gZmFsc2U7Ci0gICAgcmVxdWlyZXNOb2RlU2VsZWN0aW9uXyA9IGZhbHNlOwotICAgIHJlcXVpcmVzVmlld1NlbGVjdGlvbl8gPSBmYWxzZTsKLSAgICByZXF1aXJlc1N0YXR1c1VwZGF0ZV8gPSBmYWxzZTsKLSAgfQotCi0gIC8vIC4uLmpzcD9ub2RlSWQ9Li4uPCZpc0hpc3Rvcnk9MT4KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgU3RyaW5nIG5vZGVJZFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQobm9kZUlkU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFZhbGlkYXRpb24gZmFpbGVkIQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxub2RlSWRTdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gaXNTdGFsZU5vZGUoaW50IG5vZGVJZCkKLSAgewotICAgIHJldHVybiAobm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKSA9PSBudWxsKTsKLSAgfQotCi0gIC8qKgotICAqIE1ha2UgYSBub2RlIHZpc2libGUuIEEgbm9kZSBpcyB2aXNpYmxlIHdoZW4gYWxsIG9mIGl0cyBhbmNlc3RvcnMgYXJlIGV4cGFuZGVkLgotICAqIEBwYXJhbSBOb2RlIFRoZSBub2RlIHRvIGJlIG1hZGUgdmlzaWJsZS4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gSW5kaWNhdG9yIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgdHJlZSBzdHJ1Y3R1cmUgd2FzIGNoYW5nZWQgKGkuZS4gZXhwYW5kZWQgdG8gc2hvdyB0aGUgbm9kZSBpbiBxdWVzdGlvbikuCi0gICovCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIG1ha2VOb2RlVmlzaWJsZShOb2RlIG5vZGUpCi0gIHsKLSAgICByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF8gPSBub2RlLmdldE5vZGVNYW5hZ2VyKCkubWFrZU5vZGVWaXNpYmxlKG5vZGUpOwotICAgIHJldHVybiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF87Ci0gIH0KLQotICAvKioKLSAgICogTWFrZSBhIG5vZGUgdmlzaWJsZS4gQSBub2RlIGlzIHZpc2libGUgd2hlbiBhbGwgb2YgaXRzIGFuY2VzdG9ycyBhcmUgZXhwYW5kZWQuCi0gICAqIEBwYXJhbSBOb2RlIFRoZSBub2RlIHRvIGJlIG1hZGUgdmlzaWJsZS4KLSAgICogQHJldHVybiBib29sZWFuIEluZGljYXRvciBmb3Igd2hldGhlciBvciBub3QgdGhlIHRyZWUgc3RydWN0dXJlIHdhcyBjaGFuZ2VkIChpLmUuIGV4cGFuZGVkIHRvIHNob3cgdGhlIG5vZGUgaW4gcXVlc3Rpb24pLgotICAgKi8KLSAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFRyZWVSZWZyZXNoTmVlZGVkKCkKLSAgIHsKLSAgICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfID0gdHJ1ZTsKLSAgICAgCi0gICB9Ci0gIAotICAvKioKLSAgKiBTZWxlY3QgYSBub2RlIHdpdGggaWQgbm9kZUlkLgotICAqIEBwYXJhbSBpbnQgVGhlIGlkIG9mIHRoZSBub2RlIHRvIGJlIHNlbGVjdGVkLgotICAqLwotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRTZWxlY3RlZE5vZGVJZChpbnQgbm9kZUlkKQotICB7Ci0gICAgaWYgKG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGVJZCgpICE9IG5vZGVJZCkKLSAgICB7Ci0gICAgICByZXF1aXJlc05vZGVTZWxlY3Rpb25fID0gdHJ1ZTsKLSAgICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChub2RlSWQpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldFNlbGVjdGVkVmlld0lkKGludCB2aWV3SWQpCi0gIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpICE9IHZpZXdJZCkKLSAgICB7Ci0gICAgICByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fID0gdHJ1ZTsKLSAgICAgIHNlbGVjdGVkTm9kZS5zZXRWaWV3SWQodmlld0lkKTsKLSAgICB9Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIHRyZWV2aWV3IHJlcXVpcmVzIHJlbG9hZGluZyBhcyBhIHJlc3VsdCBvZiB0aGlzIGFjdGlvbi4KLSAgLy8gUmVsb2FkaW5nIGlzIHJlcXVpcmVkIHdoZW4gYnJhbmNoZXMgYXJlIGFkZGVkL3JlbW92ZWQuCi0gIHB1YmxpYyBib29sZWFuIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoKCkKLSAgewotICAgIHJldHVybiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF87Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSBuZXcgbm9kZSBoYXMgYmVlbiBzZWxlY3RlZCBhcyBhIHJlc3VsdCBvZiB0aGUgYWN0aW9uLgotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc05vZGVTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTm9kZVNlbGVjdGlvbl87Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgaWYgYSBuZXcgdmlldyBlbGVtZW50IGlzIHNlbGVjdGVkLgotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1ZpZXdTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzVmlld1NlbGVjdGlvbl87Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgaWYgYW55IHN0YXR1cyBtZXNzYWdlcyBhcm9zZSBmcm9tIHRoaXMgYWN0aW9uLgotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1N0YXR1c1VwZGF0ZSgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWlyZXNTdGF0dXNVcGRhdGVfOwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL09wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9PcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMjIxMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL09wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIE9wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIE9wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24oKQotICB7Ci0gIH0KLQotICAvLyBjYWxlbmRhcl9icm93c2VyLmpzcD9zZXNzaW9uSWQ9Li4uJmNhbGVuZGFyVHlwZT0uLi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLGludCBjYWxlbmRhclR5cGUpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImNhbGVuZGFyX2Jyb3dzZXIuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFKS5hcHBlbmQoJz0nKS5hcHBlbmQoY2FsZW5kYXJUeXBlKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yRGF0ZShTdHJpbmcgc2Vzc2lvbklkKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEUpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yRGF0ZVRpbWUoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFVElNRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JHWWVhck1vbnRoKFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR1lFQVJNT05USCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JHRGF5KFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR0RBWSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JHTW9udGhEYXkoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HTU9OVEhEQVkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9PcGVuV1NETEJyb3dzZXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9PcGVuV1NETEJyb3dzZXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA0Y2Q4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvT3BlbldTRExCcm93c2VyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuV1NETEJyb3dzZXJBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIE9wZW5XU0RMQnJvd3NlckFjdGlvbigpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxpbnQgd3NkbFR5cGUpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGxfYnJvd3Nlci5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLldTRExfVFlQRSkuYXBwZW5kKCc9JykuYXBwZW5kKHdzZGxUeXBlKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0ZvclNlcnZpY2UoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yU2VydmljZUludGVyZmFjZShTdHJpbmcgc2Vzc2lvbklkKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLEFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0UpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Qcm94eUxvYWRQYWdlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUHJveHlMb2FkUGFnZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWU5MzA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Qcm94eUxvYWRQYWdlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBQcm94eUxvYWRQYWdlQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIC8vIEdldCB0aGUgYWN0aW9uIGdpdmVuIGEgcmVsYXRpdmUgdGFyZ2V0UGFnZSBVUkwuIGUuZy4gImZvcm1zL0xvbmdMb2FkaW5nRm9ybS5qc3AiCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHRhcmdldFBhZ2UpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhudWxsLHRhcmdldFBhZ2UpOwotICB9Ci0gIAotICAvLyBHZXQgdGhlIGFjdGlvbiBnaXZlbiBhIHNlc3Npb25JZCBhbmQgYSByZWxhdGl2ZSB0YXJnZXRQYWdlIFVSTC4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLFN0cmluZyB0YXJnZXRQYWdlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmb3Jtcy9Qcm94eUxvYWRQYWdlLmpzcD8iKTsKLSAgICBpZiAoc2Vzc2lvbklkICE9IG51bGwpCi0gICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKS5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVEFSR0VUX1BBR0UpLmFwcGVuZCgnPScpLmFwcGVuZCh0YXJnZXRQYWdlKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUmVzaXplRnJhbWVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUmVzaXplRnJhbWVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NzA1MGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Jlc2l6ZUZyYW1lc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlc2l6ZUZyYW1lc0FjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBmcmFtZU5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5GUkFNRV9OQU1FKTsKLSAgICBpZiAoZnJhbWVOYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLkZSQU1FX05BTUUsZnJhbWVOYW1lKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHByb2Nlc3NPdGhlcnMocGFyc2VyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLSAgCi0gIHB1YmxpYyBSZXNpemVGcmFtZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIgPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIoKTsKLSAgICAgIHBhcnNlci5wYXJzZVJlcXVlc3QocmVxdWVzdCxIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gICAgICBib29sZWFuIHJlc3VsdCA9IHByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBjYXRjaCAoTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1JldHJpZXZlSGlzdG9yeUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1JldHJpZXZlSGlzdG9yeUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDlkMjJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQnJlYWRDcnVtYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFJldHJpZXZlSGlzdG9yeUFjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24KLXsKLSAgcHJpdmF0ZSBCcmVhZENydW1iIGJyZWFkQ3J1bWJfOwotCi0gIHB1YmxpYyBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgYnJlYWRDcnVtYl8gPSBudWxsOwotICB9Ci0KLSAgLy8gYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb24uanNwP2p1bXA9MSAgLSBmb3J3YXJkICAoQWN0aW9uSW5wdXRzLkpVTVBfRk9SV0FSRCkKLSAgLy8gYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb24uanNwP2p1bXA9LTEgLSBiYWNrd2FyZCAoQWN0aW9uSW5wdXRzLkpVTVBfQkFDSykKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQganVtcCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5KVU1QKS5hcHBlbmQoJz0nKS5hcHBlbmQoanVtcCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBqdW1wU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkpVTVApOwotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQoanVtcFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCEKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5KVU1QLGp1bXBTdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBqdW1wID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSlVNUCkpOwotICAgIHN3aXRjaCAoanVtcCkKLSAgICB7Ci0gICAgICBjYXNlIEFjdGlvbklucHV0cy5KVU1QX0ZPUldBUkQ6Ci0gICAgICAgIGJyZWFkQ3J1bWJfID0gY29udHJvbGxlcl8uZm9yd2FyZCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgQWN0aW9uSW5wdXRzLkpVTVBfQkFDSzoKLSAgICAgICAgYnJlYWRDcnVtYl8gPSBjb250cm9sbGVyXy5iYWNrKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgQnJlYWRDcnVtYiBnZXRCcmVhZENydW1iKCkKLSAgewotICAgIHJldHVybiBicmVhZENydW1iXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMzhlODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFNlbGVjdE5vZGVBY3Rpb24gZXh0ZW5kcyBOb2RlQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBOb2RlIHNlbGVjdGVkTm9kZV87Ci0KLSAgcHVibGljIFNlbGVjdE5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixub2RlTWFuYWdlcik7Ci0gICAgc2VsZWN0ZWROb2RlXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBwZXJmb3JtQmFzZUFjdGlvbihpbnQgbm9kZUlkKQotICB7Ci0gICAgc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkKTsKLSAgICBzZWxlY3RlZE5vZGVfID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGVyZm9ybUV4dGVuZGVkQWN0aW9uKCkKLSAgewotCSAvL3RoZSBleHRlbmRlZCBjbGFzc2VzIGNhbiBpbnRlcmplY3QgaGVyZSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBub2RlIGlzIHZpc2libGUuCi0gICAgICBtYWtlTm9kZVZpc2libGUobm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKSk7Ci0gICAgICBwZXJmb3JtQmFzZUFjdGlvbihub2RlSWQpOwotICAgICAgcGVyZm9ybUV4dGVuZGVkQWN0aW9uKCk7Ci0gICAgICBhZGRUb0hpc3RvcnkoZ2V0UGVyc3BlY3RpdmVJZCgpLGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHNldFN0YWxlQnJlYWRDcnVtYigpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFNlbGVjdGVkTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWROb2RlXzsKLSAgfQotICAKLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICByZXR1cm4gbmV3IElUcmFuc2Zvcm1lcltdIHtuZXcgTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfKX07Ci0gIH0KLQotICAvLyBTZWxlY3RpbmcgYSBub2RlIGNoYW5nZXMgdGhlIHRyZWV2aWV3IGNvbnRlbnQgYW5kIHRoZSBwcm9wZXJ0aWVzIGNvbnRhaW5lci4KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBlcnNwZWN0aXZlSWQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNmZmZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLkN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZWxlY3ROb2RlVG9vbEFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgcHJvdGVjdGVkIFRvb2wgc2VsZWN0ZWRUb29sXzsKLQotICBwdWJsaWMgU2VsZWN0Tm9kZVRvb2xBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixub2RlTWFuYWdlcik7Ci0gICAgbm9kZU1hbmFnZXJfID0gbm9kZU1hbmFnZXI7Ci0gICAgc2VsZWN0ZWRUb29sXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVNYW5hZ2VyXzsKLSAgfQotCi0gIC8vIC4uLmpzcD9ub2RlSWQ9Li4uJnRvb2xJZD0uLi48JnZpZXdJZD0uLi4mdmlld1Rvb2xJZD0uLi4+PCZpc0hpc3Rvcnk9MT4KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBzdXBlci5wcm9jZXNzTGlua1BhcmFtZXRlcnMocmVxdWVzdCk7Ci0gICAgU3RyaW5nIHRvb2xJZFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIFN0cmluZyB2aWV3SWRTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBTdHJpbmcgdmlld1Rvb2xJZFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLQotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQodG9vbElkU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFZhbGlkYXRpb24gZmFpbGVkLgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCx0b29sSWRTdHJpbmcpOwotCi0gICAgLy8gT3B0aW9uYWwgcHJvcGVydGllcwotICAgIHRyeQotICAgIHsKLSAgICAgIGludCB2aWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KHZpZXdJZFN0cmluZyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCx2aWV3SWRTdHJpbmcpOwotICAgICAgaWYgKHZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICB7Ci0gICAgICAgIEludGVnZXIucGFyc2VJbnQodmlld1Rvb2xJZFN0cmluZyk7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCx2aWV3VG9vbElkU3RyaW5nKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBub2RlIGlzIHZpc2libGUuCi0gICAgICBtYWtlTm9kZVZpc2libGUobm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKSk7Ci0gICAgICBzZXRTZWxlY3RlZE5vZGVJZChub2RlSWQpOwotICAgICAgc2VsZWN0ZWROb2RlXyA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgIGludCB0b29sSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5UT09MSUQpKTsKLSAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgICAgdG9vbE1hbmFnZXIuc2V0U2VsZWN0ZWRUb29sSWQodG9vbElkKTsKLSAgICAgIHNlbGVjdGVkVG9vbF8gPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIFN0cmluZyB2aWV3SWRTdHJpbmcgPSAoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgICAgaWYgKHZpZXdJZFN0cmluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBpbnQgdmlld0lkID0gSW50ZWdlci5wYXJzZUludCh2aWV3SWRTdHJpbmcpOwotICAgICAgICBzZXRTZWxlY3RlZFZpZXdJZCh2aWV3SWQpOwotICAgICAgICBpZiAodmlld0lkICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB2aWV3VG9vbElkU3RyaW5nID0gKChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXVE9PTElEKSk7Ci0gICAgICAgICAgVmlld1Rvb2wgdmlld1Rvb2wgPSAoVmlld1Rvb2wpc2VsZWN0ZWRUb29sXzsKLSAgICAgICAgICBpZiAodmlld1Rvb2xJZFN0cmluZyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCB2aWV3VG9vbElkID0gSW50ZWdlci5wYXJzZUludCh2aWV3VG9vbElkU3RyaW5nKTsKLSAgICAgICAgICAgIFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZV8uZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgICAgICAgICBpZiAodmlld1Rvb2xNYW5hZ2VyID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghaXNIaXN0b3J5QWN0aW9uKCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2aWV3VG9vbE1hbmFnZXIgPSB2aWV3VG9vbC5jcmVhdGVUb29sTWFuYWdlcih2aWV3SWQpOwotICAgICAgICAgICAgICAgIHZpZXdUb29sSWQgPSB2aWV3VG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzZXRTdGFsZUJyZWFkQ3J1bWIoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZpZXdUb29sTWFuYWdlci5zZXRTZWxlY3RlZFRvb2xJZCh2aWV3VG9vbElkKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgc2V0U2VsZWN0ZWRWaWV3SWQoQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSAgICAgIGFkZFRvSGlzdG9yeShnZXRQZXJzcGVjdGl2ZUlkKCksZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgc2V0U3RhbGVCcmVhZENydW1iKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICByZXR1cm4gbmV3IElUcmFuc2Zvcm1lcltdIHtuZXcgQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXyl9OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRvb2wgZ2V0U2VsZWN0ZWRWaWV3VG9vbCgpCi0gIHsKLSAgICBpZiAocHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpICE9IG51bGwpCi0gICAgICByZXR1cm4gc2VsZWN0ZWROb2RlXy5nZXRWaWV3VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUb29sIGdldFNlbGVjdGVkVG9vbCgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWRUb29sXzsKLSAgfQotCi0gIC8vIFNlbGVjdGluZyBhIG5vZGUgdG9vbCB1cGRhdGVzIHRoZSBwcm9wZXJ0aWVzIGNvbnRlbnQuIEFsc28sIGluIHRoZSBldmVudAotICAvLyBvZiBhIGhpc3Rvcnkgc3dpdGNoLCBub2RlcyBtYXkgbmVlZCB0byBiZSBzZWxlY3RlZCByZXN1bHRpbmcgaW4gY2hhbmdlcyB0bwotICAvLyBib3RoIHRoZSB0cmVldmlldyBjb250ZW50IGFuZCB0aGUgcHJvcGVydGllcyBjb250YWluZXIuIFRoZXNlIHJlcXVpcmVtZW50cyBhcmUKLSAgLy8gY292ZXJlZCB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzLgotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50VmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTc0ZmEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBTaG93UGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBTaG93UGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICAvLyBhY3Rpb25zL3Nob3dfcGVyc3BlY3RpdmUuanNwP3BlcnNwZWN0aXZlPTA8JmlzSGlzdG9yeT0xPiAtIFVEREkgKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJKQotICAvLyBhY3Rpb25zL3Nob3dfcGVyc3BlY3RpdmUuanNwP3BlcnNwZWN0aXZlPTE8JmlzSGlzdG9yeT0xPiAtIFdTSUwgKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMKQotICAvLyBhY3Rpb25zL3Nob3dfcGVyc3BlY3RpdmUuanNwP3BlcnNwZWN0aXZlPTI8JmlzSGlzdG9yeT0xPiAtIFdTREwgKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMKQotICAvLyBhY3Rpb25zL3Nob3dfcGVyc3BlY3RpdmUuanNwP3BlcnNwZWN0aXZlPTM8JmlzSGlzdG9yeT0xPiAtIEZhdm9yaXRlcyAoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUykKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbmV3UGVyc3BlY3RpdmUsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJhY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKS5hcHBlbmQoJz0nKS5hcHBlbmQobmV3UGVyc3BlY3RpdmUpOwotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpOwotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQocGVyc3BlY3RpdmVTdHJpbmcpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRSxwZXJzcGVjdGl2ZVN0cmluZyk7Ci0gICAgICBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIgPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIoKTsKLSAgICAgIHBhcnNlci5wYXJzZVJlcXVlc3QocmVxdWVzdCxIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gICAgICByZXN1bHQgPSBwcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgICAgcmVtb3ZlZFByb3BlcnRpZXNfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCEgLSBUaGlzIHNob3VsZCBub3QgaGFwcGVuLgotICAgIH0KLSAgICBjYXRjaCAoTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IHBlcnNwZWN0aXZlID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpKTsKLSAgICBjb250cm9sbGVyXy5zZXRDdXJyZW50UGVyc3BlY3RpdmUocGVyc3BlY3RpdmUpOwotICAgIGFkZFRvSGlzdG9yeShwZXJzcGVjdGl2ZSxnZXRBY3Rpb25MaW5rKHBlcnNwZWN0aXZlLHRydWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMDViNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuTm9kZUlkVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVG9nZ2xlTm9kZUFjdGlvbiBleHRlbmRzIE5vZGVBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIE5vZGUgdG9nZ2xlZE5vZGVfOwotICBwdWJsaWMgVG9nZ2xlTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLG5vZGVNYW5hZ2VyKTsKLSAgICB0b2dnbGVkTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgLy8gVG9nZ2xlIHRoZSBjdXJyZW50IG5vZGUgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIGlmZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkCi0gIC8vIGlzIGEgcmVsYXRlZCBkZXNjZW5kYW50IG9mIGEgY29sbGFwc2VkIG5vZGUuCi0gIC8qKgotICAqIFRvZ2dsZSB0aGUgY3VycmVudCBub2RlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpZmYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAotICAqIG5vZGUgaXMgYSByZWxhdGVkIGRlc2NlbmRhbnQgb2YgdGhlIGN1cnJlbnQgbm9kZSBhbmQgdGhlIGN1cnJlbnQgbm9kZSBpcwotICAqIG5vdyBjb2xsYXBzZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBhY3Rpb24uCi0gICoKLSAgKiBAcGFyYW0gaW50IFRoZSBub2RlIElEIG9mIHRoZSBub2RlIGZvciB3aGljaCB0aGlzIGFjdGlvbiBhcHBsaWVzIHRvLgotICAqIEByZXR1cm4gYm9vbGVhbiBJbmRpY2F0b3Igb2Ygd2hldGhlciBvciBub3QgYSBzZWxlY3Rpb24gY2hhbmdlIHdhcyBuZWNlc3NhcnkuCi0gICovCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBlcmZvcm1CYXNlQWN0aW9uKGludCBub2RlSWQpCi0gIHsKLSAgICB0b2dnbGVkTm9kZV8gPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpOwotICAgIG5vZGVNYW5hZ2VyXy5zZXRGb2N1c2VkTm9kZUlkKG5vZGVJZCk7Ci0gICAgdG9nZ2xlZE5vZGVfLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKCF0b2dnbGVkTm9kZV8uaXNPcGVuKCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoIXNlbGVjdGVkTm9kZS5pc1Zpc2libGUoKSkKLSAgICAgIHsKLSAgICAgICAgc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIGlmIChwZXJmb3JtQmFzZUFjdGlvbihub2RlSWQpKQotICAgICAgewotICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHRvZ2dsZSBsaW5rIGluIHRoZSBoaXN0b3J5LgotICAgICAgICBhZGRUb0hpc3RvcnkoZ2V0UGVyc3BlY3RpdmVJZCgpLGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkpOwotICAgICAgfQotICAgICAgLy8gRG8gbm90IHNhdmUgdGhlIHRvZ2dsZSBpbiBoaXN0b3J5LgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHNldFN0YWxlQnJlYWRDcnVtYigpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFRvZ2dsZWROb2RlKCkKLSAgewotICAgIHJldHVybiB0b2dnbGVkTm9kZV87Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIHJldHVybiBuZXcgSVRyYW5zZm9ybWVyW10ge25ldyBOb2RlSWRUcmFuc2Zvcm1lcihjb250cm9sbGVyXyl9OwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBlcnNwZWN0aXZlSWQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9WYWxpZGF0ZUVkaXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9WYWxpZGF0ZUVkaXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA5NGY1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZUVkaXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gImFjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uSlNQLmpzcCI7Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1dTRExGaWxlTmFtZUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1dTRExGaWxlTmFtZUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjI0ZjI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9XU0RMRmlsZU5hbWVIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1wdWJsaWMgY2xhc3MgV1NETEZpbGVOYW1lSGVscGVyCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBkZWZhdWx0XyA9ICJ0ZW1wLndzZGwiOwotICAKLSAgLyoqCi0gICogR2l2ZW4gYSB3c2RsIHBhdGggKGZpbGUsIFVSTCBldGMuKSwgZ3Vlc3MgYXQgdGhlIGZpbGUgbmFtZSBieSBsb29raW5nIGZvciB0aGUgLndzZGwgZXh0ZW5zaW9uIGF0IHRoZSBlbmQgb2YgdGhlCi0gICogcGF0aCBhbmQgdGhlIGZpbGUgdGhhdCBpdCBiZWxvbmdzIHRvLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcmV0dXJuIHRoZSBkZWZhdWx0IGRlZmluZWQgaW4gdGhpcyBjbGFzcy4KLSAgKiBAcGFyYW0gU3RyaW5nIFRoZSBwYXRoIChmaWxlLCBVUkwgZXRjLikgb2YgdGhpcyBXU0RMIGZpbGUuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIFdTREwgZmlsZSBuYW1lIGRldGVybWluZWQgYnkgdGhpcyByb3V0aW5lLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRXU0RMRmlsZU5hbWUoU3RyaW5nIHdzZGxQYXRobmFtZSkKLSAgewotICAgIGlmICh3c2RsUGF0aG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAod3NkbFBhdGhuYW1lLmVuZHNXaXRoKCIud3NkbCIpKQotICAgICAgewotICAgICAgICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IE1hdGgubWF4KHdzZGxQYXRobmFtZS5sYXN0SW5kZXhPZigiLyIpLHdzZGxQYXRobmFtZS5sYXN0SW5kZXhPZigiXFwiKSk7Ci0gICAgICAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID4gMCkKLSAgICAgICAgICByZXR1cm4gd3NkbFBhdGhuYW1lLnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsd3NkbFBhdGhuYW1lLmxlbmd0aCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGRlZmF1bHRfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Xcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTM2OWIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Xcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotCi1wdWJsaWMgY2xhc3MgV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gImFjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIjsKLSAgfQotICAgIAotICBwdWJsaWMgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9BY3Rpb25JbnB1dHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL0FjdGlvbklucHV0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTYwY2YwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL0FjdGlvbklucHV0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgQWN0aW9uSW5wdXRzCi17Ci0gIC8vIFVSTCBwYXJtIGZvciBhbGwgYWN0aW9ucyB3aGljaCBhcmUgaW4gdGhlIGhpc3RvcnkgbGlzdC4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVNISVNUT1JZID0gImlzSGlzdG9yeSI7Ci0KLSAgLy8gVXRpbGl0eSBjb25zdGFudCBmb3IgdHJlZSBub2RlIGlkZW50aWZpY2F0aW9uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFSUQgPSAibm9kZUlkIjsKLQotICAvLyBVdGlsaXR5IGNvbnN0YW50IGZvciB0b29sIGlkZW50aWZpY2F0aW9uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MSUQgPSAidG9vbElkIjsKLQotICAvLyBVdGlsaXR5IGNvbnN0YW50IGZvciB2aWV3IGlkZW50aWZpY2F0aW9uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWSUVXSUQgPSAidmlld0lkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVklFV0lEX0RFRkFVTFQgPSAtMTsKLQotICAvLyBVdGlsaXR5IGNvbnN0YW50IGZvciB2aWV3IHRvb2wgaWRlbnRpZmljYXRpb24uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZJRVdUT09MSUQgPSAidmlld1Rvb2xJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZJRVdUT09MSURfREVGQVVMVCA9IC0xOwotCi0gIC8vIFV0aWxpdHkgY29uc3RhbnRzIGZvciB0cmFuc3BvcnQgY2xhc3NlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFOU1BPUlRfQ0xBU1NfTkFNRSA9ICJvcmcudWRkaTRqLlRyYW5zcG9ydENsYXNzTmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQVNQT1JUX0NMQVNTID0gIm9yZy51ZGRpNGoudHJhbnNwb3J0LkFwYWNoZUF4aXNUcmFuc3BvcnQiOwotICAvL3B1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFYSVNfVFJBTlNQT1JUX0NMQVNTID0gIm9yZy51ZGRpNGoudHJhbnNwb3J0LkFwYWNoZUF4aXNUcmFuc3BvcnQiOwotICAvL3B1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfVFJBTlNQT1JUX0NMQVNTID0gIm9yZy51ZGRpNGoudHJhbnNwb3J0LkFwYWNoZVNPQVBUcmFuc3BvcnQiOwotCi0gIC8vIFRvZ2dsZU5vZGVBY3Rpb24gYW5kIGl0cyBkZXJpdmF0aXZlcy4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFTiA9ICJvcGVuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFTl9OT0RFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xPU0VfTk9ERSA9IDA7Ci0KLSAgLy8gU2hvd1BlcnNwZWN0aXZlQWN0aW9uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBFUlNQRUNUSVZFID0gInBlcnNwZWN0aXZlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSU1BFQ1RJVkVfVURESSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBFUlNQRUNUSVZFX1dTSUwgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJTUEVDVElWRV9XU0RMID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSU1BFQ1RJVkVfRkFWT1JJVEVTID0gMzsKLQotICAvLyBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSlVNUCA9ICJqdW1wIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSlVNUF9GT1JXQVJEID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSlVNUF9CQUNLID0gLTE7Ci0KLSAgLy8gTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbgotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXRUJfU0VSVklDRV9XSVpBUkQgPSAid2ViU2VydmljZVdpemFyZCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdFQl9TRVJWSUNFX0NMSUVOVF9XSVpBUkQgPSAwOwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXRUJfU0VSVklDRV9TS0VMRVRPTl9XSVpBUkQgPSAxOwotCi0gIC8vIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdPUktCRU5DSF9QUk9KRUNUX05BTUUgPSAid29ya2JlbmNoUHJvamVjdE5hbWUiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJTVBPUlRfRklMRSA9ICJpbXBvcnRXU0RMIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU1QT1JURURfRklMRV9OQU1FID0gImltcG9ydGVkRmlsZU5hbWUiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJTVBPUlRfVE9fV1NJTCA9ICJpbXBvcnRUb1dTSUwiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX0ZJTEVfTkFNRSA9ICJXU0lMRmlsZU5hbWUiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJTVBPUlRFRF9XU0RMX1VSTCA9ICJpbXBvcnRlZFdzZGxVcmwiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJTVBPUlRfQUNUSU9OID0gImltcG9ydEFjdGlvbiI7Ci0KLSAgLy8gUHJveHlMb2FkQWN0aW9uCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBUkdFVF9QQUdFID0gInRhcmdldFBhZ2UiOwotCi0gIC8vIFNlc3Npb24gSUQgZm9yIHBvcCB1cHMgd2hvc2UgYnJvd3NlcnMgY2hvb3NlIHRvIGlnbm9yZSB0aGUgc2Vzc2lvbi4KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU0VTU0lPTklEID0gInNJZCI7Ci0KLSAgLy8gV1NETCBCcm93c2VyCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1QgPSAicHJvamVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JZID0gImNhdGVnb3J5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9UWVBFID0gIndzZGxUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1NETF9UWVBFX1NFUlZJQ0UgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMID0gIndlYlByb2plY3RXU0RMVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfRkFWT1JJVEVfV1NETF9VUkwgPSAiZmF2b3JpdGVXU0RMVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfV1NETF9VUkwgPSAid3NkbFVSTCI7Ci0KLSAgLy8gQ2FsZW5kYXIgQnJvd3NlcgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQUxFTkRBUl9UWVBFID0gImNhbGVuZGFyVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTEVOREFSX1RZUEVfREFURSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTEVOREFSX1RZUEVfREFURVRJTUUgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxFTkRBUl9UWVBFX0dZRUFSTU9OVEggPSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxFTkRBUl9UWVBFX0dEQVkgPSAzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxFTkRBUl9UWVBFX0dNT05USERBWSA9IDQ7Ci0KLSAgLy8gUmVzaXplRnJhbWVBY3Rpb24KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBTUVfTkFNRSA9ICJmcmFtZU5hbWUiOwotCi0gIC8vIE90aGVyIEFjdGlvbnMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1VSUkVOVF9UT09MX01BTkFHRVIgPSAiY3VycmVudFRvb2xNYW5hZ2VyIjsKLSAgCi0gIC8vIEFjdGlvbiBFbmdpbmUKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0VOR0lORV9TQ0VOQVJJTyA9ICJhY3Rpb25FbmdpbmVTY2VuYXJpbyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9FTkdJTkVfTU9ERSA9ICJhY3Rpb25FbmdpbmVNb2RlIjsKLQotICAvLyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUiA9ICJtdWx0aXBhcnRGb3JtRGF0YVBhcnNlciI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9GcmFtZU5hbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9GcmFtZU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlODUzODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvRnJhbWVOYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBGcmFtZU5hbWVzCi17Ci0gIC8vIHdzZXhwbG9yZXIuanNwCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdJTkRPV19OQU1FX1dTRVhQTE9SRVJfSlNQID0gIndzZXhwbG9yZXIuanNwIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUEVSU1BFQ1RJVkVfV09SS0FSRUEgPSAicGVyc3BlY3RpdmVfd29ya2FyZWEiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQRVJTUEVDVElWRV9UT09MQkFSID0gInBlcnNwZWN0aXZlX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQRVJTUEVDVElWRV9DT05URU5UID0gInBlcnNwZWN0aXZlX2NvbnRlbnQiOwotICAKLSAgLy8gV1NETCBCcm93c2VyCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfVE9PTEJBUiA9ICJ3c2RsX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlQgPSAid3NkbF9jb250ZW50IjsKLSAgCi0gIC8vIENhbGVuZGFyIEJyb3dzZXIKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0FMRU5EQVJfVE9PTEJBUiA9ICJjYWxlbmRhcl90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0FMRU5EQVJfQ09OVEVOVCA9ICJjYWxlbmRhcl9jb250ZW50IjsgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvTW9kZWxDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL01vZGVsQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhODdkZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvTW9kZWxDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgTW9kZWxDb25zdGFudHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX0lEID0gInJlbGF0aW9uc2hpcElkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IgPSAiIyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9PV05FUiA9ICJvd25lciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9DSElMRFJFTiA9ICJjaGlsZHJlbiI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9Ub29sVHlwZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL1Rvb2xUeXBlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjkyY2I0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL1Rvb2xUeXBlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFRvb2xUeXBlcwotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRk9STSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBBQ1RJT04gPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgVklFVyA9IDI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2RhdGFtb2RlbC9MaXN0RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRlOGMyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2RhdGFtb2RlbC9MaXN0RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgTGlzdEVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBpbnQgdmlld0lkXzsKLSAgcHJpdmF0ZSBPYmplY3Qgb2JqZWN0XzsKLSAgLy8gRm9yIHNlYXJjaCBwYXJhbWV0ZXJzOiBpbmZvIG9uIHRoZSBOb2RlIGFuZCBWaWV3VG9vbCBob2xkaW5nIHRoaXMgZWxlbWVudC4KLSAgcHJpdmF0ZSBpbnQgdGFyZ2V0Tm9kZUlkXzsKLSAgcHJpdmF0ZSBpbnQgdGFyZ2V0VG9vbElkXzsKLSAgcHJpdmF0ZSBpbnQgdGFyZ2V0Vmlld0lkXzsKLQotICBwdWJsaWMgTGlzdEVsZW1lbnQoT2JqZWN0IG9iamVjdCkKLSAgewotICAgIG9iamVjdF8gPSBvYmplY3Q7Ci0gICAgdmlld0lkXyA9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVDsKLSAgICB0YXJnZXROb2RlSWRfID0gLTE7Ci0gICAgdGFyZ2V0VG9vbElkXyA9IC0xOwotICAgIHRhcmdldFZpZXdJZF8gPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgT2JqZWN0IGdldE9iamVjdCgpCi0gIHsKLSAgICByZXR1cm4gb2JqZWN0XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZpZXdJZChpbnQgdmlld0lkKQotICB7Ci0gICAgdmlld0lkXyA9IHZpZXdJZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiB2aWV3SWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkKQotICB7Ci0gICAgdGFyZ2V0Tm9kZUlkXyA9IG5vZGVJZDsKLSAgICB0YXJnZXRUb29sSWRfID0gdG9vbElkOwotICAgIHRhcmdldFZpZXdJZF8gPSB2aWV3SWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFRhcmdldE5vZGVJZCgpCi0gIHsKLSAgICByZXR1cm4gdGFyZ2V0Tm9kZUlkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VGFyZ2V0VG9vbElkKCkKLSAgewotICAgIHJldHVybiB0YXJnZXRUb29sSWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRUYXJnZXRWaWV3SWQoKQotICB7Ci0gICAgcmV0dXJuIHRhcmdldFZpZXdJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBnZXRPYmplY3QoKS50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2RhdGFtb2RlbC9MaXN0TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhhNzhhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2RhdGFtb2RlbC9MaXN0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgTGlzdE1hbmFnZXIKLXsKLSAgcHJpdmF0ZSBpbnQgbmV4dFZpZXdJZF87Ci0gIHByaXZhdGUgVmVjdG9yIGl0ZW1zTGlzdF87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGl0ZW1zVGFibGVfOwotCi0gIHB1YmxpYyBMaXN0TWFuYWdlcigpCi0gIHsKLSAgICBuZXh0Vmlld0lkXyA9IDA7Ci0gICAgaXRlbXNMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpdGVtc1RhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCB1cGRhdGVNYW5hZ2VyKExpc3RFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpdGVtc1RhYmxlXy5wdXQoU3RyaW5nLnZhbHVlT2YobmV4dFZpZXdJZF8pLGVsZW1lbnQpOwotICAgIGVsZW1lbnQuc2V0Vmlld0lkKG5leHRWaWV3SWRfKTsKLSAgICBuZXh0Vmlld0lkXysrOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkKExpc3RFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpdGVtc0xpc3RfLmFkZEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgdXBkYXRlTWFuYWdlcihlbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZFdpdGhDdXJyZW50Vmlld0lkKExpc3RFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpdGVtc0xpc3RfLmFkZEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaXRlbXNUYWJsZV8ucHV0KFN0cmluZy52YWx1ZU9mKGVsZW1lbnQuZ2V0Vmlld0lkKCkpLGVsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIExpc3RFbGVtZW50IGVsZW1lbnRBdChpbnQgaW5kZXgpCi0gIHsKLSAgICByZXR1cm4gKExpc3RFbGVtZW50KWl0ZW1zTGlzdF8uZWxlbWVudEF0KGluZGV4KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBMaXN0RWxlbWVudCBnZXRFbGVtZW50V2l0aFZpZXdJZChpbnQgdmlld0lkKQotICB7Ci0gICAgcmV0dXJuIChMaXN0RWxlbWVudClpdGVtc1RhYmxlXy5nZXQoU3RyaW5nLnZhbHVlT2Yodmlld0lkKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVFbGVtZW50V2l0aFZpZXdJZChpbnQgdmlld0lkKQotICB7Ci0gICAgaXRlbXNUYWJsZV8ucmVtb3ZlKFN0cmluZy52YWx1ZU9mKHZpZXdJZCkpOwotICAgIGZvciAoaW50IGk9MDtpPGl0ZW1zTGlzdF8uc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IGVsZW1lbnRBdChpKTsKLSAgICAgIGlmIChsaXN0RWxlbWVudC5nZXRWaWV3SWQoKSA9PSB2aWV3SWQpCi0gICAgICB7Ci0gICAgICAgIGl0ZW1zTGlzdF8ucmVtb3ZlRWxlbWVudEF0KGkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVFbGVtZW50QXQoaW50IGluZGV4KQotICB7Ci0gICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZWxlbWVudEF0KGluZGV4KTsKLSAgICBpdGVtc0xpc3RfLnJlbW92ZUVsZW1lbnRBdChpbmRleCk7Ci0gICAgaXRlbXNUYWJsZV8ucmVtb3ZlKFN0cmluZy52YWx1ZU9mKGxpc3RFbGVtZW50LmdldFZpZXdJZCgpKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbnNlcnRFbGVtZW50QXQoTGlzdEVsZW1lbnQgZWxlbWVudCxpbnQgaW5kZXgpCi0gIHsKLSAgICBpdGVtc0xpc3RfLmluc2VydEVsZW1lbnRBdChlbGVtZW50LGluZGV4KTsKLSAgICB1cGRhdGVNYW5hZ2VyKGVsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEVudW1lcmF0aW9uIGdldExpc3RFbGVtZW50cygpCi0gIHsKLSAgICByZXR1cm4gaXRlbXNMaXN0Xy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXIoKQotICB7Ci0gICAgaXRlbXNMaXN0Xy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgIGl0ZW1zVGFibGVfLmNsZWFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTGlzdE1hbmFnZXIgY29weShMaXN0TWFuYWdlciBuZXdMaXN0TWFuYWdlcikKLSAgewotICAgIG5ld0xpc3RNYW5hZ2VyLmNsZWFyKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8aXRlbXNMaXN0Xy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWVsZW1lbnRBdChpKTsKLSAgICAgIExpc3RFbGVtZW50IG5ld0xpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KGxpc3RFbGVtZW50LmdldE9iamVjdCgpKTsKLSAgICAgIG5ld0xpc3RFbGVtZW50LnNldFZpZXdJZChsaXN0RWxlbWVudC5nZXRWaWV3SWQoKSk7Ci0gICAgICBuZXdMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8obGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCksbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCksbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkpOwotICAgICAgbmV3TGlzdE1hbmFnZXIuYWRkV2l0aEN1cnJlbnRWaWV3SWQobmV3TGlzdEVsZW1lbnQpOwotICAgIH0KLSAgICBuZXdMaXN0TWFuYWdlci5zZXROZXh0Vmlld0lkKG5leHRWaWV3SWRfKTsKLSAgICByZXR1cm4gbmV3TGlzdE1hbmFnZXI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXROZXh0Vmlld0lkKGludCBuZXh0Vmlld0lkKQotICB7Ci0gICAgbmV4dFZpZXdJZF8gPSBuZXh0Vmlld0lkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXROZXh0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiBuZXh0Vmlld0lkXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvVHJlZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZGF0YW1vZGVsL1RyZWVFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZDA5ODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvVHJlZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVHJlZUVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5XzsKLQotICBwdWJsaWMgVHJlZUVsZW1lbnQoU3RyaW5nIG5hbWUsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICBrZXlfID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEtleShTdHJpbmcga2V5KQotICB7Ci0gICAga2V5XyA9IGtleTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkKLSAgewotICAgIHJldHVybiBrZXlfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoa2V5XyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBrZXlfLmVxdWFscyhlbGVtZW50LmdldEtleSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvQWN0aW9uRGF0YVBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvQWN0aW9uRGF0YVBhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2FmMmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL0FjdGlvbkRhdGFQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmNvbnN0YW50cy5BY3Rpb25EYXRhQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5BY3Rpb25EZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5TY2VuYXJpb0Rlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhLlRyYW5zYWN0aW9uRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5DREFUQVNlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRE9NRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIEFjdGlvbkRhdGFQYXJzZXIKLXsKLSAgcHJpdmF0ZSBEb2N1bWVudCBkb2M7Ci0KLSAgcHVibGljIFNjZW5hcmlvRGVzY3JpcHRvciBwYXJzZVNjZW5hcmlvKEVsZW1lbnQgZSkKLSAgewotICAgIFNjZW5hcmlvRGVzY3JpcHRvciBzY2VuYXJpb0Rlc2NyaXB0b3IgPSBuZXcgU2NlbmFyaW9EZXNjcmlwdG9yKCk7Ci0gICAgTm9kZUxpc3QgdHJhbnNhY3Rpb25zID0gZS5nZXRFbGVtZW50c0J5VGFnTmFtZShBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfVFJBTlNBQ1RJT04pOwotICAgIFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnMgPSBuZXcgVHJhbnNhY3Rpb25EZXNjcmlwdG9yW3RyYW5zYWN0aW9ucy5nZXRMZW5ndGgoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaSsrKQotICAgICAgdHJhbnNhY3Rpb25EZXNjcmlwdG9yc1tpXSA9IHBhcnNlVHJhbnNhY3Rpb24oKEVsZW1lbnQpIHRyYW5zYWN0aW9ucy5pdGVtKGkpKTsKLSAgICBzY2VuYXJpb0Rlc2NyaXB0b3Iuc2V0VHJhbnNhY3Rpb25EZXNjcmlwdG9ycyh0cmFuc2FjdGlvbkRlc2NyaXB0b3JzKTsKLSAgICByZXR1cm4gc2NlbmFyaW9EZXNjcmlwdG9yOwotICB9Ci0KLSAgcHVibGljIFRyYW5zYWN0aW9uRGVzY3JpcHRvciBwYXJzZVRyYW5zYWN0aW9uKEVsZW1lbnQgZSkKLSAgewotICAgIFRyYW5zYWN0aW9uRGVzY3JpcHRvciB0cmFuc2FjdGlvbkRlc2NyaXB0b3IgPSBuZXcgVHJhbnNhY3Rpb25EZXNjcmlwdG9yKCk7Ci0gICAgTm9kZUxpc3QgYWN0aW9ucyA9IGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX0FDVElPTik7Ci0gICAgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzID0gbmV3IEFjdGlvbkRlc2NyaXB0b3JbYWN0aW9ucy5nZXRMZW5ndGgoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICAgIGFjdGlvbkRlc2NyaXB0b3JzW2ldID0gcGFyc2VBY3Rpb24oKEVsZW1lbnQpIGFjdGlvbnMuaXRlbShpKSk7Ci0gICAgdHJhbnNhY3Rpb25EZXNjcmlwdG9yLnNldEFjdGlvbkRlc2NyaXB0b3JzKGFjdGlvbkRlc2NyaXB0b3JzKTsKLSAgICByZXR1cm4gdHJhbnNhY3Rpb25EZXNjcmlwdG9yOwotICB9Ci0KLSAgcHVibGljIEFjdGlvbkRlc2NyaXB0b3IgcGFyc2VBY3Rpb24oRWxlbWVudCBlKQotICB7Ci0gICAgQWN0aW9uRGVzY3JpcHRvciBhY3Rpb25EZXNjcmlwdG9yID0gbmV3IEFjdGlvbkRlc2NyaXB0b3IoKTsKLSAgICBhY3Rpb25EZXNjcmlwdG9yLnNldElkKGUuZ2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9JRCkpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGFjdGlvbkRlc2NyaXB0b3Iuc2V0QXR0ZW1wdHMoSW50ZWdlci5wYXJzZUludChlLmdldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfQVRURU1QVFMpKSk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICBhY3Rpb25EZXNjcmlwdG9yLnNldEF0dGVtcHRzKDEpOwotICAgIH0KLSAgICBhY3Rpb25EZXNjcmlwdG9yLnNldFN0YXR1c0lkKGUuZ2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9TVEFUVVNfSUQpKTsKLSAgICBIYXNodGFibGUgcHJvcGVydGllc1RhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIE5vZGVMaXN0IHByb3BlcnRpZXMgPSBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9QUk9QRVJUWSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmdldExlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCBwcm9wZXJ0eSA9IChFbGVtZW50KSBwcm9wZXJ0aWVzLml0ZW0oaSk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5LmdldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgICBOb2RlTGlzdCB2YWx1ZUxpc3QgPSBwcm9wZXJ0eS5nZXRFbGVtZW50c0J5VGFnTmFtZShBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfVkFMVUUpOwotICAgICAgaWYgKHZhbHVlTGlzdC5nZXRMZW5ndGgoKSA+IDEpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1tdIHZhbHVlcyA9IG5ldyBTdHJpbmdbdmFsdWVMaXN0LmdldExlbmd0aCgpXTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2YWx1ZXMubGVuZ3RoOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IHZhbHVlID0gKEVsZW1lbnQpIHZhbHVlTGlzdC5pdGVtKGopOwotICAgICAgICAgIE5vZGUgdGV4dE5vZGUgPSB2YWx1ZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICAgICAgdmFsdWVzW2pdID0gKHRleHROb2RlICE9IG51bGwpID8gdGV4dE5vZGUuZ2V0Tm9kZVZhbHVlKCkudHJpbSgpIDogIiI7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGVydGllc1RhYmxlLnB1dChuYW1lLCB2YWx1ZXMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBOb2RlIHRleHROb2RlID0gKChFbGVtZW50KSB2YWx1ZUxpc3QuaXRlbSgwKSkuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICBwcm9wZXJ0aWVzVGFibGUucHV0KG5hbWUsICh0ZXh0Tm9kZSAhPSBudWxsKSA/IHRleHROb2RlLmdldE5vZGVWYWx1ZSgpLnRyaW0oKSA6ICIiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYWN0aW9uRGVzY3JpcHRvci5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXNUYWJsZSk7Ci0gICAgTm9kZUxpc3Qgc3RhdHVzTGlzdCA9IGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1NUQVRVUyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0dXNMaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCBzdGF0dXMgPSAoRWxlbWVudClzdGF0dXNMaXN0Lml0ZW0oaSk7Ci0gICAgICBDREFUQVNlY3Rpb24gY0RhdGEgPSAoQ0RBVEFTZWN0aW9uKXN0YXR1cy5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICBhY3Rpb25EZXNjcmlwdG9yLmFkZFN0YXR1cyhjRGF0YS5nZXREYXRhKCkpOwotICAgIH0KLSAgICByZXR1cm4gYWN0aW9uRGVzY3JpcHRvcjsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IHRvRWxlbWVudChTY2VuYXJpb0Rlc2NyaXB0b3Igc2NlbmFyaW9EZXNjcmlwdG9yKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpOwotICAgICAgRWxlbWVudCBzY2VuYXJpb0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9TQ0VOQVJJTyk7Ci0gICAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzID0gc2NlbmFyaW9EZXNjcmlwdG9yLmdldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCB0cmFuc2FjdGlvbkVsZW1lbnQgPSB0b0VsZW1lbnQodHJhbnNhY3Rpb25EZXNjcmlwdG9yc1tpXSk7Ci0gICAgICAgIGlmICh0cmFuc2FjdGlvbkVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICBzY2VuYXJpb0VsZW1lbnQuYXBwZW5kQ2hpbGQodHJhbnNhY3Rpb25FbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzY2VuYXJpb0VsZW1lbnQ7Ci0gICAgfQotICAgIGNhdGNoIChET01FeGNlcHRpb24gZG9tZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCB0b0VsZW1lbnQoVHJhbnNhY3Rpb25EZXNjcmlwdG9yIHRyYW5zYWN0aW9uRGVzY3JpcHRvcikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTsKLSAgICAgIEVsZW1lbnQgdHJhbnNhY3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfVFJBTlNBQ1RJT04pOwotICAgICAgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzID0gdHJhbnNhY3Rpb25EZXNjcmlwdG9yLmdldEFjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBFbGVtZW50IGFjdGlvbkVsZW1lbnQgPSB0b0VsZW1lbnQoYWN0aW9uRGVzY3JpcHRvcnNbaV0pOwotICAgICAgICBpZiAoYWN0aW9uRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHRyYW5zYWN0aW9uRWxlbWVudC5hcHBlbmRDaGlsZChhY3Rpb25FbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cmFuc2FjdGlvbkVsZW1lbnQ7Ci0gICAgfQotICAgIGNhdGNoIChET01FeGNlcHRpb24gZG9tZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCB0b0VsZW1lbnQoQWN0aW9uRGVzY3JpcHRvciBhY3Rpb25EZXNjcmlwdG9yKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpOwotICAgICAgRWxlbWVudCBhY3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfQUNUSU9OKTsKLSAgICAgIGFjdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9JRCwgYWN0aW9uRGVzY3JpcHRvci5nZXRJZCgpKTsKLSAgICAgIGFjdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9BVFRFTVBUUywgU3RyaW5nLnZhbHVlT2YoYWN0aW9uRGVzY3JpcHRvci5nZXRBdHRlbXB0cygpKSk7Ci0gICAgICBTdHJpbmcgc3RhdHVzSWQgPSBhY3Rpb25EZXNjcmlwdG9yLmdldFN0YXR1c0lkKCk7Ci0gICAgICBpZiAoc3RhdHVzSWQgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoQWN0aW9uRGF0YUNvbnN0YW50cy5BVFRSX1NUQVRVU19JRCwgc3RhdHVzSWQpOwotICAgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBhY3Rpb25EZXNjcmlwdG9yLmdldFByb3BlcnRpZXMoKTsKLSAgICAgIGlmIChwcm9wZXJ0aWVzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwcm9wZXJ0aWVzLmtleVNldCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3Qga2V5ID0gaXQubmV4dCgpOwotICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IHByb3BlcnRpZXMuZ2V0KGtleSk7Ci0gICAgICAgICAgT2JqZWN0W10gdmFsdWVzOwotICAgICAgICAgIGlmICh2YWx1ZS5nZXRDbGFzcygpLmlzQXJyYXkoKSkKLSAgICAgICAgICAgIHZhbHVlcyA9IChPYmplY3RbXSl2YWx1ZTsKLSAgICAgICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpc3QpCi0gICAgICAgICAgICB2YWx1ZXMgPSAoKExpc3QpdmFsdWUpLnRvQXJyYXkoKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZXMgPSBuZXcgT2JqZWN0W10ge3ZhbHVlfTsKLSAgICAgICAgICBib29sZWFuIGlzQWRkZWQgPSBmYWxzZTsKLSAgICAgICAgICBFbGVtZW50IHByb3BlcnR5RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1BST1BFUlRZKTsKLSAgICAgICAgICBwcm9wZXJ0eUVsZW1lbnQuc2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9OQU1FLCBrZXkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHZhbHVlc1tpXSBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCB2YWx1ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9WQUxVRSk7Ci0gICAgICAgICAgICAgIHZhbHVlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZXNbaV0udG9TdHJpbmcoKSkpOwotICAgICAgICAgICAgICBwcm9wZXJ0eUVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWVFbGVtZW50KTsKLSAgICAgICAgICAgICAgaXNBZGRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChpc0FkZGVkKQotICAgICAgICAgICAgYWN0aW9uRWxlbWVudC5hcHBlbmRDaGlsZChwcm9wZXJ0eUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBMaXN0IHN0YXR1cyA9IGFjdGlvbkRlc2NyaXB0b3IuZ2V0U3RhdHVzKCk7Ci0gICAgICBpZiAoc3RhdHVzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzdGF0dXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIEVsZW1lbnQgc3RhdHVzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1NUQVRVUyk7Ci0gICAgICAgICAgQ0RBVEFTZWN0aW9uIGNEYXRhID0gZG9jdW1lbnQuY3JlYXRlQ0RBVEFTZWN0aW9uKGl0Lm5leHQoKS50b1N0cmluZygpKTsKLSAgICAgICAgICBzdGF0dXNFbGVtZW50LmFwcGVuZENoaWxkKGNEYXRhKTsKLSAgICAgICAgICBhY3Rpb25FbGVtZW50LmFwcGVuZENoaWxkKHN0YXR1c0VsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gYWN0aW9uRWxlbWVudDsKLSAgICB9Ci0gICAgY2F0Y2ggKERPTUV4Y2VwdGlvbiBkb21lKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgICAgZG9jID0gYnVpbGRlci5uZXdEb2N1bWVudCgpOwotICAgICAgfQotICAgICAgcmV0dXJuIGRvYzsKLSAgICB9Ci0gICAgY2F0Y2ggKEZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZmNlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBwY2UpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9BY3Rpb25FbmdpbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL0FjdGlvbkVuZ2luZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDJlMmRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL0FjdGlvbkVuZ2luZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmNvbnN0YW50cy5BY3Rpb25EYXRhQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5BY3Rpb25EZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5TY2VuYXJpb0Rlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhLlRyYW5zYWN0aW9uRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIEFjdGlvbkVuZ2luZQotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTU9ERV9ESVNBQkxFRCA9IDB4MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfU1RPUCA9IDB4MTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfUkVDT1JEID0gMHgyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTU9ERV9QTEFZID0gMHgzOwotCi0gIHByaXZhdGUgQ29udHJvbGxlciBjb250cm9sbGVyOwotICBwcml2YXRlIGJ5dGUgbW9kZTsKLSAgcHJpdmF0ZSBWZWN0b3IgYWN0aW9uRGVzY3JpcHRvcnM7Ci0KLSAgcHVibGljIEFjdGlvbkVuZ2luZShDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIG1vZGUgPSBNT0RFX0RJU0FCTEVEOwotICAgIGFjdGlvbkRlc2NyaXB0b3JzID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZXhlY3V0ZVNjZW5hcmlvKFNjZW5hcmlvRGVzY3JpcHRvciBzY2VuYXJpb0Rlc2NyaXB0b3IpCi0gIHsKLSAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzID0gc2NlbmFyaW9EZXNjcmlwdG9yLmdldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspCi0gICAgICBleGVjdXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25EZXNjcmlwdG9yc1tpXSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25EZXNjcmlwdG9yIHRyYW5zYWN0aW9uRGVzY3JpcHRvcikKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBBY3Rpb25EZXNjcmlwdG9yW10gYWN0aW9uRGVzY3JpcHRvcnMgPSB0cmFuc2FjdGlvbkRlc2NyaXB0b3IuZ2V0QWN0aW9uRGVzY3JpcHRvcnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChyZXN1bHQpCi0gICAgICB7Ci0gICAgICAgIGlmICghZXhlY3V0ZUFjdGlvbihhY3Rpb25EZXNjcmlwdG9yc1tpXSkpCi0gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIGFjdGlvbkRlc2NyaXB0b3JzW2ldLnNldFN0YXR1c0lkKEFjdGlvbkRhdGFDb25zdGFudHMuVkFMVUVfU1RBVFVTX0lEX1VOQVRURU1QVEVEKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVBY3Rpb24oQWN0aW9uRGVzY3JpcHRvciBhY3Rpb25EZXNjcmlwdG9yKQotICB7Ci0gICAgaW50IGF0dGVtcHRzID0gYWN0aW9uRGVzY3JpcHRvci5nZXRBdHRlbXB0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ZW1wdHM7IGkrKykKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgQ2xhc3MgY2xhc3NBY3Rpb24gPSBDbGFzcy5mb3JOYW1lKGFjdGlvbkRlc2NyaXB0b3IuZ2V0SWQoKSk7Ci0gICAgICAgIGlmIChBY3Rpb24uY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjbGFzc0FjdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAgICBBY3Rpb24gYWN0aW9uID0gKEFjdGlvbikgbmV3SW5zdGFuY2UoY2xhc3NBY3Rpb24pOwotICAgICAgICAgIGlmIChhY3Rpb24gIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IGFjdGlvbkRlc2NyaXB0b3IuZ2V0UHJvcGVydGllcygpOwotICAgICAgICAgICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gYWN0aW9uLmdldFRyYW5zZm9ybWVycygpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0cmFuc2Zvcm1lcnMubGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB0cmFuc2Zvcm1lcnNbal0uZGVOb3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgICAgICAgICBhY3Rpb24uc2V0UHJvcGVydHlUYWJsZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgLy8gVE9ETyBhY3Rpb25EZXNjcmlwdG9yLmFkZFN0YXR1cyhhY3Rpb24uZ2V0U3RhdHVzKCkpOwotICAgICAgICAgICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYWN0aW9uRGVzY3JpcHRvci5zZXRTdGF0dXNJZChBY3Rpb25EYXRhQ29uc3RhbnRzLlZBTFVFX1NUQVRVU19JRF9QQVNTRUQpOwotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24oYWN0aW9uRGVzY3JpcHRvci5nZXRJZCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY25mZSkKLSAgICAgIHsKLSAgICAgICAgY25mZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgICBjbmZlLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIoc3cpKTsKLSAgICAgICAgYWN0aW9uRGVzY3JpcHRvci5hZGRTdGF0dXMoc3cuZ2V0QnVmZmVyKCkudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgICAgdC5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHN3KSk7Ci0gICAgICAgIGFjdGlvbkRlc2NyaXB0b3IuYWRkU3RhdHVzKHN3LmdldEJ1ZmZlcigpLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0KLSAgICBhY3Rpb25EZXNjcmlwdG9yLnNldFN0YXR1c0lkKEFjdGlvbkRhdGFDb25zdGFudHMuVkFMVUVfU1RBVFVTX0lEX0ZBSUxFRCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBTY2VuYXJpb0Rlc2NyaXB0b3IgbmV3U2NlbmFyaW9EZXNjcmlwdG9yKCkKLSAgewotICAgIHJldHVybiBuZXcgU2NlbmFyaW9EZXNjcmlwdG9yKCk7Ci0gIH0KLQotICBwcml2YXRlIFRyYW5zYWN0aW9uRGVzY3JpcHRvciBuZXdUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKTsKLSAgfQotCi0gIHByaXZhdGUgQWN0aW9uRGVzY3JpcHRvciBuZXdBY3Rpb25EZXNjcmlwdG9yKEFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICBBY3Rpb25EZXNjcmlwdG9yIGFjdGlvbkRlc2NyaXB0b3IgPSBuZXcgQWN0aW9uRGVzY3JpcHRvcigpOwotICAgIGFjdGlvbkRlc2NyaXB0b3Iuc2V0SWQoYWN0aW9uLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKSk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gYWN0aW9uLmdldFRyYW5zZm9ybWVycygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNmb3JtZXJzLmxlbmd0aDsgaSsrKQotICAgICAgcHJvcGVydGllcyA9IHRyYW5zZm9ybWVyc1tpXS5ub3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgYWN0aW9uRGVzY3JpcHRvci5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpOwotICAgIHJldHVybiBhY3Rpb25EZXNjcmlwdG9yOwotICB9Ci0KLSAgcHJpdmF0ZSBPYmplY3QgbmV3SW5zdGFuY2UoQ2xhc3MgYykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIGluc3RhbnRpYXRlcyB0aGUgYWN0aW9uIHVzaW5nIHRoZSBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGluIGEKLSAgICAgIC8vIGNvbnRyb2xsZXIgb2JqZWN0Ci0gICAgICBDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IGMuZ2V0Q29uc3RydWN0b3IobmV3IENsYXNzW117Q29udHJvbGxlci5jbGFzc30pOwotICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbXXtjb250cm9sbGVyfSk7Ci0gICAgfQotICAgIGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gbnNtZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGllKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICB9Ci0gICAgT2JqZWN0IGluc3RhbmNlID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBpbnN0YW50aWF0ZXMgdGhlIGFjdGlvbiB1c2luZyB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBjLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzc1swXSk7Ci0gICAgICBpbnN0YW5jZSA9IGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbMF0pOwotICAgICAgTWV0aG9kIG1ldGhvZCA9IGMuZ2V0TWV0aG9kKCJzZXRDb250cm9sbGVyIiwgbmV3IENsYXNzW117Q29udHJvbGxlci5jbGFzc30pOwotICAgICAgbWV0aG9kLmludm9rZShpbnN0YW5jZSwgbmV3IE9iamVjdFtde2NvbnRyb2xsZXJ9KTsKLSAgICB9Ci0gICAgY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBuc21lKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gaWUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgcHVibGljIGJ5dGUgZ2V0TW9kZSgpCi0gIHsKLSAgICByZXR1cm4gbW9kZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TW9kZShieXRlIG1vZGUpCi0gIHsKLSAgICB0aGlzLm1vZGUgPSBtb2RlOwotICAgIGlmIChtb2RlID09IE1PREVfUkVDT1JEKQotICAgIHsKLSAgICAgIGFjdGlvbkRlc2NyaXB0b3JzID0gbmV3IFZlY3RvcigpOwotICAgICAgU2hvd1BlcnNwZWN0aXZlQWN0aW9uIHNob3dQZXJzcGVjdGl2ZUFjdGlvbiA9IG5ldyBTaG93UGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICBzaG93UGVyc3BlY3RpdmVBY3Rpb24uYWRkUHJvcGVydHkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFLCBTdHJpbmcudmFsdWVPZihjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBlcnNwZWN0aXZlSWQoKSkpOwotICAgICAgYWN0aW9uRGVzY3JpcHRvcnMuYWRkKG5ld0FjdGlvbkRlc2NyaXB0b3Ioc2hvd1BlcnNwZWN0aXZlQWN0aW9uKSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlQWN0aW9uKEFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICBpZiAobW9kZSA9PSBNT0RFX1JFQ09SRCkKLSAgICB7Ci0gICAgICBBY3Rpb25EZXNjcmlwdG9yIGFjdGlvbkRlc2NyaXB0b3IgPSBuZXdBY3Rpb25EZXNjcmlwdG9yKGFjdGlvbik7Ci0gICAgICBhY3Rpb25EZXNjcmlwdG9ycy5hZGQoYWN0aW9uRGVzY3JpcHRvcik7Ci0gICAgfQotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTY2VuYXJpb0Rlc2NyaXB0b3IgZ2V0U2NlbmFyaW8oKQotICB7Ci0gICAgU2NlbmFyaW9EZXNjcmlwdG9yIHNjZW5hcmlvRGVzY3JpcHRvciA9IG5ld1NjZW5hcmlvRGVzY3JpcHRvcigpOwotICAgIFRyYW5zYWN0aW9uRGVzY3JpcHRvciB0cmFuc2FjdGlvbkRlc2NyaXB0b3IgPSBuZXdUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKTsKLSAgICBBY3Rpb25EZXNjcmlwdG9yW10gYWN0aW9uRGVzY3JpcHRvckFycmF5ID0gKEFjdGlvbkRlc2NyaXB0b3JbXSlhY3Rpb25EZXNjcmlwdG9ycy50b0FycmF5KG5ldyBBY3Rpb25EZXNjcmlwdG9yWzBdKTsKLSAgICB0cmFuc2FjdGlvbkRlc2NyaXB0b3Iuc2V0QWN0aW9uRGVzY3JpcHRvcnMoYWN0aW9uRGVzY3JpcHRvckFycmF5KTsKLSAgICBzY2VuYXJpb0Rlc2NyaXB0b3Iuc2V0VHJhbnNhY3Rpb25EZXNjcmlwdG9ycyhuZXcgVHJhbnNhY3Rpb25EZXNjcmlwdG9yW10ge3RyYW5zYWN0aW9uRGVzY3JpcHRvcn0pOwotICAgIHJldHVybiBzY2VuYXJpb0Rlc2NyaXB0b3I7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2NvbnN0YW50cy9BY3Rpb25EYXRhQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9jb25zdGFudHMvQWN0aW9uRGF0YUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjcxNmRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2NvbnN0YW50cy9BY3Rpb25EYXRhQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBBY3Rpb25EYXRhQ29uc3RhbnRzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSUQgPSAiaWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUUgPSAibmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQVRURU1QVFMgPSAiYXR0ZW1wdHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1NUQVRVU19JRCA9ICJzdGF0dXNJZCI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX1NDRU5BUklPID0gInNjZW5hcmlvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9UUkFOU0FDVElPTiA9ICJ0cmFuc2FjdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfQUNUSU9OID0gImFjdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfUFJPUEVSVFkgPSAicHJvcGVydHkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX1ZBTFVFID0gInZhbHVlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9TVEFUVVMgPSAic3RhdHVzIjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX1NUQVRVU19JRF9VTkFUVEVNUFRFRCA9ICJ1bmF0dGVtcHRlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX1NUQVRVU19JRF9QQVNTRUQgPSAicGFzc2VkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfU1RBVFVTX0lEX0ZBSUxFRCA9ICJmYWlsZWQiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9BY3Rpb25EZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL0FjdGlvbkRlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdhNjAwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL0FjdGlvbkRlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBBY3Rpb25EZXNjcmlwdG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nIGlkOwotICBwcml2YXRlIEhhc2h0YWJsZSBwcm9wZXJ0aWVzOwotICBwcml2YXRlIGludCBhdHRlbXB0czsKLSAgcHJpdmF0ZSBTdHJpbmcgc3RhdHVzSWQ7Ci0gIHByaXZhdGUgTGlzdCBzdGF0dXNMaXN0OwotICAKLSAgcHVibGljIEFjdGlvbkRlc2NyaXB0b3IoKQotICB7Ci0gICAgYXR0ZW1wdHMgPSAxOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkKLSAgewotICAgIHRoaXMuaWQgPSBpZDsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZ2V0UHJvcGVydGllcygpCi0gIHsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydGllcyhIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0QXR0ZW1wdHMoKQotICB7Ci0gIAlyZXR1cm4gYXR0ZW1wdHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEF0dGVtcHRzKGludCBhdHRlbXB0cykKLSAgewotICAJdGhpcy5hdHRlbXB0cyA9IGF0dGVtcHRzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0lkKCkKLSAgewotICAgIHJldHVybiBzdGF0dXNJZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U3RhdHVzSWQoU3RyaW5nIHN0YXR1c0lkKQotICB7Ci0gICAgdGhpcy5zdGF0dXNJZCA9IHN0YXR1c0lkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRTdGF0dXMoT2JqZWN0IHN0YXR1cykKLSAgewotICAgIGlmIChzdGF0dXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoc3RhdHVzTGlzdCA9PSBudWxsKQotICAgICAgICBzdGF0dXNMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgICAgc3RhdHVzTGlzdC5hZGQoc3RhdHVzKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZVN0YXR1cyhPYmplY3Qgc3RhdHVzKQotICB7Ci0gICAgaWYgKHN0YXR1cyAhPSBudWxsICYmIHN0YXR1c0xpc3QgIT0gbnVsbCkKLSAgICAgIHJldHVybiBzdGF0dXNMaXN0LnJlbW92ZShzdGF0dXMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBzdGF0dXNMaXN0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL1NjZW5hcmlvRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9TY2VuYXJpb0Rlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZlOTJhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL1NjZW5hcmlvRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YTsKLQotcHVibGljIGNsYXNzIFNjZW5hcmlvRGVzY3JpcHRvcgotewotICBwcml2YXRlIFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnM7Ci0KLSAgcHVibGljIFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIGdldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMoKQotICB7Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMoVHJhbnNhY3Rpb25EZXNjcmlwdG9yW10gdHJhbnNhY3Rpb25EZXNjcmlwdG9ycykKLSAgewotICAgIHRoaXMudHJhbnNhY3Rpb25EZXNjcmlwdG9ycyA9IHRyYW5zYWN0aW9uRGVzY3JpcHRvcnM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2RhdGEvVHJhbnNhY3Rpb25EZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL1RyYW5zYWN0aW9uRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTE3YTEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2RhdGEvVHJhbnNhY3Rpb25EZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhOwotCi1wdWJsaWMgY2xhc3MgVHJhbnNhY3Rpb25EZXNjcmlwdG9yCi17Ci0gIHByaXZhdGUgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzOwotCi0gIHB1YmxpYyBBY3Rpb25EZXNjcmlwdG9yW10gZ2V0QWN0aW9uRGVzY3JpcHRvcnMoKQotICB7Ci0gICAgcmV0dXJuIGFjdGlvbkRlc2NyaXB0b3JzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25EZXNjcmlwdG9ycyhBY3Rpb25EZXNjcmlwdG9yW10gYWN0aW9uRGVzY3JpcHRvcnMpCi0gIHsKLSAgICB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzID0gYWN0aW9uRGVzY3JpcHRvcnM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL0N1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL0N1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2NmU2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9DdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBDdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcga2V5OwotCi0gIHB1YmxpYyBDdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMoY29udHJvbGxlciwgQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gIH0KLQotICBwdWJsaWMgQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIsIFN0cmluZyBrZXkpCi0gIHsKLSAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHRoaXMua2V5ID0ga2V5OwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBub3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotICAKLSAgcHVibGljIEhhc2h0YWJsZSBkZU5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIE5vZGUgY3Vyck5vZGUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKGN1cnJOb2RlICE9IG51bGwpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChrZXksIFN0cmluZy52YWx1ZU9mKGN1cnJOb2RlLmdldE5vZGVJZCgpKSk7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL0lUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvSVRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MTZkMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvSVRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVRyYW5zZm9ybWVyCi17Ci0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKTsKLSAgcHVibGljIEhhc2h0YWJsZSBkZU5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcyk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9NYXNzTm9kZUlkVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL01hc3NOb2RlSWRUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yjc0ZTgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL01hc3NOb2RlSWRUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBNYXNzTm9kZUlkVHJhbnNmb3JtZXIgZXh0ZW5kcyBOb2RlSWRUcmFuc2Zvcm1lcgotewotICBwcm90ZWN0ZWQgU3RyaW5nIG1hc3NOb2RlSWRLZXk7Ci0KLSAgcHVibGljIE1hc3NOb2RlSWRUcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIsIFN0cmluZyBtYXNzTm9kZUlkS2V5KQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgdGhpcy5tYXNzTm9kZUlkS2V5ID0gbWFzc05vZGVJZEtleTsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1hc3NOb2RlSWRLZXkpKQotICAgICAgcmV0dXJuIHN1cGVyLm5vcm1hbGl6ZShwcm9wZXJ0aWVzKTsKLSAgICBPYmplY3Qgb3JpZ05vZGVJZCA9IHByb3BlcnRpZXMuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIFN0cmluZ1tdIG1hc3NOb2RlSWRzID0gZ2V0VmFsdWVBc1N0cmluZ0FycmF5KHByb3BlcnRpZXMsIG1hc3NOb2RlSWRLZXkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFzc05vZGVJZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcHJvcGVydGllcy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgbWFzc05vZGVJZHNbaV0pOwotICAgICAgcHJvcGVydGllcyA9IHN1cGVyLm5vcm1hbGl6ZShwcm9wZXJ0aWVzKTsKLSAgICAgIFN0cmluZ1tdIHJlbHMgPSBnZXRWYWx1ZUFzU3RyaW5nQXJyYXkocHJvcGVydGllcywgTW9kZWxDb25zdGFudHMuUkVMX0lEKTsKLSAgICAgIGlmIChyZWxzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoTW9kZWxDb25zdGFudHMuUkVMX0lEKTsKLSAgICAgICAgc2IuYXBwZW5kKE1vZGVsQ29uc3RhbnRzLlJFTF9MT0NBTE5BTUVfU0VQQVJBVE9SKTsKLSAgICAgICAgc2IuYXBwZW5kKG1hc3NOb2RlSWRzW2ldKTsKLSAgICAgICAgcHJvcGVydGllcy5wdXQoc2IudG9TdHJpbmcoKSwgcmVscyk7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0aWVzLnJlbW92ZShBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgIHByb3BlcnRpZXMucmVtb3ZlKE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgfQotICAgIGlmIChvcmlnTm9kZUlkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBvcmlnTm9kZUlkKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBpZiAoIXByb3BlcnRpZXMuY29udGFpbnNLZXkobWFzc05vZGVJZEtleSkpCi0gICAgICByZXR1cm4gc3VwZXIuZGVOb3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgVmVjdG9yIG1hc3NOb2RlSWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgT2JqZWN0IG9yaWdOb2RlSWQgPSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBwcm9wZXJ0aWVzLnJlbW92ZShBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBTdHJpbmdbXSBtYXNzTm9kZUlkcyA9IGdldFZhbHVlQXNTdHJpbmdBcnJheShwcm9wZXJ0aWVzLCBtYXNzTm9kZUlkS2V5KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hc3NOb2RlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoTW9kZWxDb25zdGFudHMuUkVMX0lEKTsKLSAgICAgIHNiLmFwcGVuZChNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICBzYi5hcHBlbmQobWFzc05vZGVJZHNbaV0pOwotICAgICAgT2JqZWN0IHJlbHMgPSBwcm9wZXJ0aWVzLmdldChzYi50b1N0cmluZygpKTsKLSAgICAgIGlmIChyZWxzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMucHV0KE1vZGVsQ29uc3RhbnRzLlJFTF9JRCwgcmVscyk7Ci0gICAgICAgIHByb3BlcnRpZXMgPSBzdXBlci5kZU5vcm1hbGl6ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgT2JqZWN0IG5vZGVJZCA9IHByb3BlcnRpZXMuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBpZiAobm9kZUlkICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBtYXNzTm9kZUlkVmVjdG9yLmFkZChub2RlSWQpOwotICAgICAgICAgIHByb3BlcnRpZXMucmVtb3ZlKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICB9Ci0gICAgICAgIHByb3BlcnRpZXMucmVtb3ZlKE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChvcmlnTm9kZUlkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBvcmlnTm9kZUlkKTsKLSAgICBpbnQgc2l6ZSA9IG1hc3NOb2RlSWRWZWN0b3Iuc2l6ZSgpOwotICAgIGlmIChzaXplID09IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChtYXNzTm9kZUlkS2V5LCBtYXNzTm9kZUlkVmVjdG9yLmdldCgwKSk7Ci0gICAgZWxzZSBpZiAoc2l6ZSA+IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChtYXNzTm9kZUlkS2V5LCBtYXNzTm9kZUlkVmVjdG9yLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOwotICAgIGVsc2UKLSAgICAgIHByb3BlcnRpZXMucmVtb3ZlKG1hc3NOb2RlSWRLZXkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmdbXSBnZXRWYWx1ZUFzU3RyaW5nQXJyYXkoSGFzaHRhYmxlIHByb3BlcnRpZXMsIFN0cmluZyBrZXkpCi0gIHsKLSAgICBPYmplY3QgdmFsdWVzID0gcHJvcGVydGllcy5nZXQoa2V5KTsKLSAgICBpZiAodmFsdWVzID09IG51bGwpCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICBlbHNlIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmdbXSkKLSAgICAgIHJldHVybiAoU3RyaW5nW10pdmFsdWVzOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10ge3ZhbHVlcy50b1N0cmluZygpfTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzJjMTY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL011bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0KLSAgcHVibGljIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyID0gKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKXByb3BlcnRpZXMuZ2V0KEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUik7Ci0gICAgU3RyaW5nW10ga2V5czsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBrZXlzID0gcGFyc2VyLmdldFBhcmFtZXRlck5hbWVzKCk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICBrZXlzID0gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBuZXdLZXkgPSBuZXcgU3RyaW5nQnVmZmVyKEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUik7Ci0gICAgICBuZXdLZXkuYXBwZW5kKGtleXNbaV0pOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMucHV0KG5ld0tleS50b1N0cmluZygpLCBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKGtleXNbaV0pKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gcHJvcGVydGllcy5rZXlzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgT2JqZWN0IGtleSA9IGUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICB7Ci0gICAgICAgIGlmICgoKFN0cmluZylrZXkpLnN0YXJ0c1dpdGgoQWN0aW9uSW5wdXRzLk1VTFRJUEFSVF9GT1JNX0RBVEFfUEFSU0VSKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyByZWFsS2V5ID0gKChTdHJpbmcpa2V5KS5zdWJzdHJpbmcoQWN0aW9uSW5wdXRzLk1VTFRJUEFSVF9GT1JNX0RBVEFfUEFSU0VSLmxlbmd0aCgpKTsKLSAgICAgICAgICBpZiAoIXByb3BlcnRpZXMuY29udGFpbnNLZXkocmVhbEtleSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gcHJvcGVydGllcy5yZW1vdmUoa2V5KTsKLSAgICAgICAgICAgIHByb3BlcnRpZXMucHV0KHJlYWxLZXksIHZhbHVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL05vZGVJZFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9Ob2RlSWRUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTU0MTNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL05vZGVJZFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTm9kZUlkVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBJVHJhbnNmb3JtZXIKLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLQotICBwdWJsaWMgTm9kZUlkVHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgVmVjdG9yIHJlbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgIE5vZGUgcm9vdE5vZGUgPSBub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSWQpOwotICAgICAgaW50IGRlcHRoID0gMDsKLSAgICAgIGlmIChub2RlICE9IG51bGwpCi0gICAgICAgIGRlcHRoID0gbm9kZS5nZXROb2RlRGVwdGgoKTsKLSAgICAgIHdoaWxlIChyZWxzLnNpemUoKSA8IGRlcHRoICYmIG5vZGUgIT0gbnVsbCAmJiBub2RlICE9IHJvb3ROb2RlKQotICAgICAgewotICAgICAgICBOb2RlIHBhcmVudE5vZGUgPSBub2RlLmdldFBhcmVudCgpOwotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIFJlbCByZWwgPSBnZXRSZWwocGFyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpLCBlbGVtZW50KTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHJlbFZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcihyZWwuZ2V0TmFtZSgpKTsKLSAgICAgICAgcmVsVmFsdWUuYXBwZW5kKE1vZGVsQ29uc3RhbnRzLlJFTF9MT0NBTE5BTUVfU0VQQVJBVE9SKTsKLSAgICAgICAgcmVsVmFsdWUuYXBwZW5kKGVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgcmVscy5pbnNlcnRFbGVtZW50QXQocmVsVmFsdWUudG9TdHJpbmcoKSwgMCk7Ci0gICAgICAgIG5vZGUgPSBwYXJlbnROb2RlOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICB7Ci0gICAgfQotICAgIGludCBudW1SZWxhdGlvbnNoaXBzID0gcmVscy5zaXplKCk7Ci0gICAgaWYgKG51bVJlbGF0aW9uc2hpcHMgPT0gMSkKLSAgICAgIHByb3BlcnRpZXMucHV0KE1vZGVsQ29uc3RhbnRzLlJFTF9JRCwgcmVscy5nZXQoMCkudG9TdHJpbmcoKSk7Ci0gICAgZWxzZSBpZiAobnVtUmVsYXRpb25zaGlwcyA+IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChNb2RlbENvbnN0YW50cy5SRUxfSUQsIChTdHJpbmdbXSlyZWxzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHJpdmF0ZSBSZWwgZ2V0UmVsKEVsZW1lbnQgc291cmNlRWxlbWVudCwgRWxlbWVudCB0YXJnZXRFbGVtZW50KQotICB7Ci0gICAgRW51bWVyYXRpb24gcmVscyA9IHNvdXJjZUVsZW1lbnQuZ2V0UmVscygpOwotICAgIHdoaWxlIChyZWxzLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFJlbCByZWwgPSAoUmVsKXJlbHMubmV4dEVsZW1lbnQoKTsKLSAgICAgIEVudW1lcmF0aW9uIHRhcmdldEVsZW1lbnRzID0gcmVsLmdldFRhcmdldEVsZW1lbnRzKCk7Ci0gICAgICB3aGlsZSAodGFyZ2V0RWxlbWVudHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRFbGVtZW50cy5uZXh0RWxlbWVudCgpID09IHRhcmdldEVsZW1lbnQpCi0gICAgICAgICAgcmV0dXJuIHJlbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBPYmplY3QgdmFsdWUgPSBwcm9wZXJ0aWVzLmdldChNb2RlbENvbnN0YW50cy5SRUxfSUQpOwotICAgIFN0cmluZ1tdIHJlbGF0aW9uc2hpcHMgPSBudWxsOwotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZ1tdKQotICAgICAgcmVsYXRpb25zaGlwcyA9IChTdHJpbmdbXSl2YWx1ZTsKLSAgICBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKQotICAgICAgcmVsYXRpb25zaGlwcyA9IG5ldyBTdHJpbmdbXSB7dmFsdWUudG9TdHJpbmcoKX07Ci0gICAgaWYgKHJlbGF0aW9uc2hpcHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlbGF0aW9uc2hpcHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGludCBpbmRleCA9IHJlbGF0aW9uc2hpcHNbaV0uaW5kZXhPZihNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAgICByZXR1cm4gZGVOb3JtYWxpemVBc1NlbGVjdGVkTm9kZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgU3RyaW5nIHJlbCA9IChpbmRleCAhPSAtMSkgPyByZWxhdGlvbnNoaXBzW2ldLnN1YnN0cmluZygwLCBpbmRleCkgOiByZWxhdGlvbnNoaXBzW2ldOwotICAgICAgICBTdHJpbmcgbG9jYWxuYW1lID0gKGluZGV4ICE9IC0xKSA/IHJlbGF0aW9uc2hpcHNbaV0uc3Vic3RyaW5nKGluZGV4ICsgMSwgcmVsYXRpb25zaGlwc1tpXS5sZW5ndGgoKSkgOiBudWxsOwotICAgICAgICBpZiAobG9jYWxuYW1lID09IG51bGwpCi0gICAgICAgICAgcmV0dXJuIGRlTm9ybWFsaXplQXNTZWxlY3RlZE5vZGUocHJvcGVydGllcyk7Ci0gICAgICAgIG5vZGUgPSBnZXROb2RlKG5vZGUsIHJlbCwgbG9jYWxuYW1lKTsKLSAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkKLSAgICAgICAgICByZXR1cm4gZGVOb3JtYWxpemVBc1NlbGVjdGVkTm9kZShwcm9wZXJ0aWVzKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnRpZXMucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKG5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZGVOb3JtYWxpemVBc1NlbGVjdGVkTm9kZShwcm9wZXJ0aWVzKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBIYXNodGFibGUgZGVOb3JtYWxpemVBc1NlbGVjdGVkTm9kZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIHJldHVybiAobmV3IEN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcikpLmRlTm9ybWFsaXplKHByb3BlcnRpZXMpOwotICB9Ci0KLSAgcHJpdmF0ZSBOb2RlIGdldE5vZGUoTm9kZSBwYXJlbnQsIFN0cmluZyByZWwsIFN0cmluZyBsb2NhbG5hbWUpCi0gIHsKLSAgICBFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBwYXJlbnQuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gcGFyZW50RWxlbWVudC5nZXRFbGVtZW50cyhyZWwpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChsb2NhbG5hbWUuZXF1YWxzKGVsZW1lbnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRDaGlsZE5vZGUoKFRyZWVFbGVtZW50KWVsZW1lbnQpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9Ob2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNmNTdlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9Ob2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBOb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBJVHJhbnNmb3JtZXIKLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLQotICBwdWJsaWMgTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgTm9kZSBuZXh0Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUoSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgICAgTm9kZSBjdXJyTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgaWYgKGN1cnJOb2RlID09IG51bGwpCi0gICAgICAgIGN1cnJOb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICAgIFZlY3RvciBuZXh0UmVscyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFZlY3RvciBjdXJyUmVscyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHdoaWxlIChuZXh0Tm9kZSAhPSBudWxsICYmIGN1cnJOb2RlICE9IG51bGwgJiYgKCFpc1Jvb3RFbGVtZW50KG5leHROb2RlLmdldFRyZWVFbGVtZW50KCkpIHx8ICFpc1Jvb3RFbGVtZW50KGN1cnJOb2RlLmdldFRyZWVFbGVtZW50KCkpKSAmJiBuZXh0Tm9kZSAhPSBjdXJyTm9kZSkKLSAgICAgIHsKLSAgICAgICAgaWYgKG5leHROb2RlLmdldE5vZGVEZXB0aCgpID49IGN1cnJOb2RlLmdldE5vZGVEZXB0aCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBwYXJlbnROb2RlID0gbmV4dE5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICAgICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IG5leHROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgUmVsIHJlbCA9IGdldFJlbChwYXJlbnROb2RlLmdldFRyZWVFbGVtZW50KCksIG5leHRFbGVtZW50KTsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgcmVsVmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKHJlbC5nZXROYW1lKCkpOwotICAgICAgICAgIHJlbFZhbHVlLmFwcGVuZChNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgICAgcmVsVmFsdWUuYXBwZW5kKG5leHRFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgbmV4dFJlbHMuaW5zZXJ0RWxlbWVudEF0KHJlbFZhbHVlLnRvU3RyaW5nKCksIDApOwotICAgICAgICAgIG5leHROb2RlID0gcGFyZW50Tm9kZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIHBhcmVudE5vZGUgPSBjdXJyTm9kZS5nZXRQYXJlbnQoKTsKLSAgICAgICAgICBFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBwYXJlbnROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgUmVsIHJlbCA9IGdldFJlbChjdXJyTm9kZS5nZXRUcmVlRWxlbWVudCgpLCBwYXJlbnRFbGVtZW50KTsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgcmVsVmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKHJlbC5nZXROYW1lKCkpOwotICAgICAgICAgIHJlbFZhbHVlLmFwcGVuZChNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgICAgcmVsVmFsdWUuYXBwZW5kKHBhcmVudEVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBjdXJyUmVscy5hZGQocmVsVmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgY3Vyck5vZGUgPSBwYXJlbnROb2RlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjdXJyUmVscy5hZGRBbGwobmV4dFJlbHMpOwotICAgICAgaW50IG51bVJlbGF0aW9uc2hpcHMgPSBjdXJyUmVscy5zaXplKCk7Ci0gICAgICBpZiAobnVtUmVsYXRpb25zaGlwcyA9PSAxKQotICAgICAgICBwcm9wZXJ0aWVzLnB1dChNb2RlbENvbnN0YW50cy5SRUxfSUQsIGN1cnJSZWxzLmdldCgwKS50b1N0cmluZygpKTsKLSAgICAgIGVsc2UgaWYgKG51bVJlbGF0aW9uc2hpcHMgPiAxKQotICAgICAgICBwcm9wZXJ0aWVzLnB1dChNb2RlbENvbnN0YW50cy5SRUxfSUQsIChTdHJpbmdbXSkgY3VyclJlbHMudG9BcnJheShuZXcgU3RyaW5nWzBdKSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNSb290RWxlbWVudChFbGVtZW50IGUpCi0gIHsKLSAgICByZXR1cm4gZS5nZXRNb2RlbCgpLmdldFJvb3RFbGVtZW50KCkgPT0gZTsKLSAgfQotCi0gIHByaXZhdGUgUmVsIGdldFJlbChFbGVtZW50IHNvdXJjZUVsZW1lbnQsIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCkKLSAgewotICAgIEVudW1lcmF0aW9uIHJlbHMgPSBzb3VyY2VFbGVtZW50LmdldFJlbHMoKTsKLSAgICB3aGlsZSAocmVscy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBSZWwgcmVsID0gKFJlbCkgcmVscy5uZXh0RWxlbWVudCgpOwotICAgICAgRW51bWVyYXRpb24gdGFyZ2V0RWxlbWVudHMgPSByZWwuZ2V0VGFyZ2V0RWxlbWVudHMoKTsKLSAgICAgIHdoaWxlICh0YXJnZXRFbGVtZW50cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHRhcmdldEVsZW1lbnRzLm5leHRFbGVtZW50KCkgPT0gdGFyZ2V0RWxlbWVudCkKLSAgICAgICAgICByZXR1cm4gcmVsOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHJvb3ROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBOb2RlIGN1cnJOb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKGN1cnJOb2RlID09IG51bGwpCi0gICAgICBjdXJyTm9kZSA9IHJvb3ROb2RlOwotICAgIE9iamVjdCB2YWx1ZSA9IHByb3BlcnRpZXMuZ2V0KE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgU3RyaW5nW10gcmVsYXRpb25zaGlwcyA9IG51bGw7Ci0gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nW10pCi0gICAgICByZWxhdGlvbnNoaXBzID0gKFN0cmluZ1tdKSB2YWx1ZTsKLSAgICBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKQotICAgICAgcmVsYXRpb25zaGlwcyA9IG5ldyBTdHJpbmdbXXt2YWx1ZS50b1N0cmluZygpfTsKLSAgICBpZiAocmVsYXRpb25zaGlwcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgY3VyckVsZW1lbnQgPSBjdXJyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGlvbnNoaXBzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpbnQgaW5kZXggPSByZWxhdGlvbnNoaXBzW2ldLmluZGV4T2YoTW9kZWxDb25zdGFudHMuUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IpOwotICAgICAgICBTdHJpbmcgcmVsID0gKGluZGV4ICE9IC0xKSA/IHJlbGF0aW9uc2hpcHNbaV0uc3Vic3RyaW5nKDAsIGluZGV4KSA6IHJlbGF0aW9uc2hpcHNbaV07Ci0gICAgICAgIFN0cmluZyBsb2NhbG5hbWUgPSAoaW5kZXggIT0gLTEpID8gcmVsYXRpb25zaGlwc1tpXS5zdWJzdHJpbmcoaW5kZXggKyAxLCByZWxhdGlvbnNoaXBzW2ldLmxlbmd0aCgpKSA6IG51bGw7Ci0gICAgICAgIEVudW1lcmF0aW9uIGUgPSBjdXJyRWxlbWVudC5nZXRFbGVtZW50cyhyZWwpOwotICAgICAgICBFbGVtZW50IHRhcmdldEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAobG9jYWxuYW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IGZpcnN0RWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IChFbGVtZW50KSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoZmlyc3RFbGVtZW50ID09IG51bGwpCi0gICAgICAgICAgICAgIGZpcnN0RWxlbWVudCA9IG5leHRFbGVtZW50OwotICAgICAgICAgICAgaWYgKGxvY2FsbmFtZS5lcXVhbHMobmV4dEVsZW1lbnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IG5leHRFbGVtZW50OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBmaXJzdEVsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgICAgICB0YXJnZXRFbGVtZW50ID0gKEVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgY3VyckVsZW1lbnQgPSAoRWxlbWVudCkgdGFyZ2V0RWxlbWVudDsKLSAgICAgICAgICBOb2RlIHBhcmVudE5vZGUgPSBjdXJyTm9kZS5nZXRQYXJlbnQoKTsKLSAgICAgICAgICBpZiAocGFyZW50Tm9kZSAhPSBudWxsICYmIHBhcmVudE5vZGUuZ2V0VHJlZUVsZW1lbnQoKSA9PSBjdXJyRWxlbWVudCkKLSAgICAgICAgICAgIGN1cnJOb2RlID0gcGFyZW50Tm9kZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyTm9kZSA9IGN1cnJOb2RlLmdldENoaWxkTm9kZSgoVHJlZUVsZW1lbnQpIGN1cnJFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBwcm9wZXJ0aWVzLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihjdXJyTm9kZS5nZXROb2RlSWQoKSkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9WaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL1ZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjYxZjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL1ZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgbGlzdE1hbmFnZXJLZXk7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdmlld0tleTsKLQotICBwdWJsaWMgVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlciwgU3RyaW5nIGxpc3RNYW5hZ2VyS2V5LCBTdHJpbmcgdmlld0tleSkKLSAgewotICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgdGhpcy5saXN0TWFuYWdlcktleSA9IGxpc3RNYW5hZ2VyS2V5OwotICAgIHRoaXMudmlld0tleSA9IHZpZXdLZXk7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIFZlY3RvciBub3JtYWxpemVkVmlld0lkcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIGN1cnJOb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgY3VyckVsZW1lbnQgPSBjdXJyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIE9iamVjdCBsaXN0TWFuYWdlck9iaiA9IGN1cnJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QobGlzdE1hbmFnZXJLZXkpOwotICAgIGlmIChsaXN0TWFuYWdlck9iaiBpbnN0YW5jZW9mIExpc3RNYW5hZ2VyKQotICAgIHsKLSAgICAgIExpc3RNYW5hZ2VyIGxpc3RNYW5hZ2VyID0gKExpc3RNYW5hZ2VyKSBsaXN0TWFuYWdlck9iajsKLSAgICAgIFN0cmluZ1tdIHZpZXdJZHMgPSBnZXRWaWV3VmFsdWVzKHByb3BlcnRpZXMpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aWV3SWRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdEVsZW1lbnQgPSBsaXN0TWFuYWdlci5nZXRFbGVtZW50V2l0aFZpZXdJZChJbnRlZ2VyLnBhcnNlSW50KHZpZXdJZHNbaV0pKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGlmIChsaXN0RWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGlmIChvYmplY3QgIT0gbnVsbCAmJiBvYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSBvYmplY3Q7Ci0gICAgICAgICAgICBub3JtYWxpemVkVmlld0lkcy5hZGQoZWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBwcm9wZXJ0aWVzLnB1dCh2aWV3S2V5LCBub3JtYWxpemVkVmlld0lkcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBWZWN0b3Igdmlld0lkcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBOb2RlIGN1cnJOb2RlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChjdXJyTm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFRyZWVFbGVtZW50IGN1cnJFbGVtZW50ID0gY3Vyck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIE9iamVjdCBsaXN0TWFuYWdlck9iaiA9IGN1cnJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QobGlzdE1hbmFnZXJLZXkpOwotICAgICAgaWYgKGxpc3RNYW5hZ2VyT2JqIGluc3RhbmNlb2YgTGlzdE1hbmFnZXIpCi0gICAgICB7Ci0gICAgICAgIExpc3RNYW5hZ2VyIGxpc3RNYW5hZ2VyID0gKExpc3RNYW5hZ2VyKSBsaXN0TWFuYWdlck9iajsKLSAgICAgICAgU3RyaW5nW10gbm9ybWFsaXplZFZpZXdJZHMgPSBnZXRWaWV3VmFsdWVzKHByb3BlcnRpZXMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vcm1hbGl6ZWRWaWV3SWRzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgRW51bWVyYXRpb24gZSA9IGxpc3RNYW5hZ2VyLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmIG5vcm1hbGl6ZWRWaWV3SWRzW2ldLmVxdWFscyhlbGVtZW50LmdldE5hbWUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHZpZXdJZHMuYWRkKFN0cmluZy52YWx1ZU9mKGxpc3RFbGVtZW50LmdldFZpZXdJZCgpKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpbnQgc2l6ZSA9IHZpZXdJZHMuc2l6ZSgpOwotICAgIGlmIChzaXplID09IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dCh2aWV3S2V5LCB2aWV3SWRzLmdldCgwKSk7Ci0gICAgZWxzZSBpZiAoc2l6ZSA+IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dCh2aWV3S2V5LCB2aWV3SWRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmdbXSBnZXRWaWV3VmFsdWVzKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgT2JqZWN0IHZpZXdWYWx1ZU9iaiA9IHByb3BlcnRpZXMuZ2V0KHZpZXdLZXkpOwotICAgIFN0cmluZ1tdIHZpZXdWYWx1ZXM7Ci0gICAgaWYgKHZpZXdWYWx1ZU9iaiA9PSBudWxsKQotICAgICAgdmlld1ZhbHVlcyA9IG5ldyBTdHJpbmdbMF07Ci0gICAgZWxzZSBpZiAodmlld1ZhbHVlT2JqLmdldENsYXNzKCkuaXNBcnJheSgpKQotICAgICAgdmlld1ZhbHVlcyA9IChTdHJpbmdbXSkgdmlld1ZhbHVlT2JqOwotICAgIGVsc2UKLSAgICAgIHZpZXdWYWx1ZXMgPSBuZXcgU3RyaW5nW117KFN0cmluZykgdmlld1ZhbHVlT2JqfTsKLSAgICByZXR1cm4gdmlld1ZhbHVlczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhMjdlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgIFN0cmluZyBidXNpbmVzc05hbWUgPSBidXNFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IGJ1c0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAvLyBjcmVhdGUgdGhlIHJlZ2lzdHJ5IGluIHRoZSBVRERJIHBlcnNwZWN0aXZlCi0gICAgaWYgKCFjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKGlucXVpcnlBUEksIG51bGwsIGlucXVpcnlBUEksIG51bGwsIHRydWUpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLCBidXNpbmVzc0tleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLCBidXNpbmVzc05hbWUpOwotICAgIGlmICghYWN0aW9uLnJ1bigpKQotICAgIHsKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4odHJ1ZSk7Ci0gICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YTYxNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgU3RyaW5nIHJlZ2lzdHJ5TmFtZSA9IHJlZ0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgU3RyaW5nIHB1Ymxpc2hBUEkgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0gcmVnRWxlbWVudC5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgICBpZiAoIWNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoaW5xdWlyeUFQSSwgcHVibGlzaEFQSSwgcmVnaXN0cnlOYW1lLCByZWdpc3RyYXRpb25VUkwsIGZhbHNlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCByZWdpc3RyeU5hbWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRTZXJ2aWNlSW50ZXJmYWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkU2VydmljZUludGVyZmFjZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZmY4MjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRTZXJ2aWNlSW50ZXJmYWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VJbnRlcmZhY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRTZXJ2aWNlSW50ZXJmYWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzZXJJbnRFbGVtZW50ID0gKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgIFN0cmluZyBzZXJJbnROYW1lID0gc2VySW50RWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSBzZXJJbnRFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBTdHJpbmcgc2VySW50S2V5ID0gc2VySW50RWxlbWVudC5nZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCk7Ci0gICAgLy8gY3JlYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgVURESSBwZXJzcGVjdGl2ZQotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5QVBJLCBudWxsLCBpbnF1aXJ5QVBJLCBudWxsLCB0cnVlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksIHNlckludEtleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLCBzZXJJbnROYW1lKTsKLSAgICBpZiAoIWFjdGlvbi5ydW4oKSkKLSAgICB7Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fVURESV9QRVJTUEVDVElWRSIsIHNlckludE5hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbih0cnVlKTsKLSAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCBzZXJJbnROYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTIzOWMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgc2VyRWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBzZXJFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHNlckVsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gc2VyRWxlbWVudC5nZXRTZXJ2aWNlS2V5KCk7Ci0gICAgLy8gY3JlYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgVURESSBwZXJzcGVjdGl2ZQotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5QVBJLCBudWxsLCBpbnF1aXJ5QVBJLCBudWxsLCB0cnVlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSwgc2VydmljZUtleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLCBzZXJ2aWNlTmFtZSk7Ci0gICAgaWYgKCFhY3Rpb24ucnVuKCkpCi0gICAgewotICAgICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiLCBzZXJ2aWNlTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKHRydWUpOwotICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX1VERElfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTCIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4NmI2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5PcGVuUmVnaXN0cnlBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESU1haW5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24gewotICAgIHB1YmxpYyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AiOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBwdWJsaXNoQVBJLCBTdHJpbmcgcmVnaXN0cnlOYW1lLCBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMLCBib29sZWFuIHVzZUV4aXN0aW5nKQotICAgIHsKLSAgICAgIHJldHVybiBjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKGlucXVpcnlBUEksIHB1Ymxpc2hBUEksIHJlZ2lzdHJ5TmFtZSwgcmVnaXN0cmF0aW9uVVJMLCBudWxsLCBudWxsLCBudWxsLCB1c2VFeGlzdGluZyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHB1Ymxpc2hBUEksIFN0cmluZyByZWdpc3RyeU5hbWUsIFN0cmluZyByZWdpc3RyYXRpb25VUkwsIFN0cmluZyBkZWZhdWx0TG9naW4sIFN0cmluZyBkZWZhdWx0UGFzc3dvcmQsIFRheG9ub215W10gdGF4b25vbWllcywgYm9vbGVhbiB1c2VFeGlzdGluZykgewotICAgICAgVmVjdG9yIHJlZ2lzdHJ5Tm9kZXMgPSBnZXRSZWdpc3RyeU5vZGVzQnlJbnF1aXJ5VVJMKGlucXVpcnlBUEkpOwotICAgICAgICBpZiAocmVnaXN0cnlOb2RlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHVzZUV4aXN0aW5nKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgcmVnaXN0cnlOb2RlID0gKE5vZGUpcmVnaXN0cnlOb2Rlcy5lbGVtZW50QXQoMCk7Ci0gICAgICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ2lzdHJ5Tm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICAgICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQocmVnaXN0cnlOb2RlLmdldE5vZGVJZCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gb3BlbiB0aGUgcmVnaXN0cnkgaWYgaXQgaXMgbm90IGFscmVhZHkgb3BlbmVkIGluIHRoZSBVRERJIHBlcnNwZWN0aXZlCi0gICAgICAgIE9wZW5SZWdpc3RyeUFjdGlvbiBvcGVuUmVnQWN0aW9uID0gbmV3IE9wZW5SZWdpc3RyeUFjdGlvbihjb250cm9sbGVyXyk7Ci0KLSAgICAgICAgLy8gcG9wdWxhdGUgdGhlIHByb3BlcnR5IHRhYmxlCi0gICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gb3BlblJlZ0FjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocmVnaXN0cnlOYW1lKSkKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSxyZWdpc3RyeU5hbWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChpbnF1aXJ5QVBJKSkKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwsaW5xdWlyeUFQSSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hBUEkpKQotICAgICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX1VSTCxwdWJsaXNoQVBJKTsKLQotICAgICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHJlZ2lzdHJhdGlvblVSTCkpCi0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJBVElPTl9VUkwscmVnaXN0cmF0aW9uVVJMKTsKLQotICAgICAgICBpZiAoZGVmYXVsdExvZ2luICE9IG51bGwpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5VRERJX1VTRVJOQU1FLCBkZWZhdWx0TG9naW4pOwotCi0gICAgICAgIGlmIChkZWZhdWx0UGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlVERElfUEFTU1dPUkQsIGRlZmF1bHRQYXNzd29yZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gSWYgdXNlci1kZWZpbmVkIGNhdGVnb3J5IG1ldGFkYXRhIGV4aXN0cywgc2VhcmNoIGFuZCBtYWtlIHRoZSBhc3NvY2lhdGlvbnMuCi0gICAgICAgIFN0cmluZ0J1ZmZlciBkaXJlY3RvcnlCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuZm9ybUNhdGVnb3JpZXNEaXJlY3RvcnkoZGlyZWN0b3J5QnVmZmVyLGNvbnRyb2xsZXJfLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkscmVnaXN0cnlOYW1lKTsKLSAgICAgICAgRmlsZSBjYXRlZ29yaWVzRGlyZWN0b3J5ID0gbmV3IEZpbGUoZGlyZWN0b3J5QnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgICBGaWxlW10gY2F0ZWdvcnlGaWxlcyA9IG51bGw7Ci0gICAgICAgIGlmIChjYXRlZ29yaWVzRGlyZWN0b3J5LmV4aXN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgY2F0ZWdvcnlGaWxlcyA9IGNhdGVnb3JpZXNEaXJlY3RvcnkubGlzdEZpbGVzKCk7Ci0gICAgICAgICAgaWYgKGNhdGVnb3J5RmlsZXMubGVuZ3RoID4gMCkKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuQ0hFQ0tfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMsQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJ1biB0aGUgYWN0aW9uCi0gICAgICAgIGlmICghb3BlblJlZ0FjdGlvbi5ydW4oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0YXhvbm9taWVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBIYXNodGFibGUgdGF4b25vbXlUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgICBmb3IgKGludCBpPTA7IGk8dGF4b25vbWllcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBUYXhvbm9teSB0YXhvbm9teSA9IHRheG9ub21pZXNbaV07Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHRheG9ub215LmdldE5hbWUoKTsKLSAgICAgICAgICAgIFN0cmluZyB0bW9kZWxLZXkgPSB0YXhvbm9teS5nZXRUbW9kZWxLZXkoKTsKLSAgICAgICAgICAgIENhdGVnb3J5TW9kZWwgY2F0TW9kZWwgPSBuZXcgQ2F0ZWdvcnlNb2RlbCgpOwotICAgICAgICAgICAgY2F0TW9kZWwuc2V0RGlzcGxheU5hbWUobmFtZSk7Ci0gICAgICAgICAgICBjYXRNb2RlbC5zZXRDYXRlZ29yeUtleShuYW1lKTsKLSAgICAgICAgICAgIGNhdE1vZGVsLnNldFRNb2RlbEtleSh0bW9kZWxLZXkpOwotICAgICAgICAgICAgY2F0TW9kZWwubG9hZEZyb21UYXhvbm9teSh0YXhvbm9teSk7Ci0gICAgICAgICAgICB0YXhvbm9teVRhYmxlLnB1dCh0bW9kZWxLZXksIGNhdE1vZGVsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KShjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgICAgICAgcmVnRWxlbWVudC5zZXRVc2VyRGVmaW5lZENhdGVnb3JpZXModGF4b25vbXlUYWJsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChjYXRlZ29yeUZpbGVzICE9IG51bGwgJiYgY2F0ZWdvcnlGaWxlcy5sZW5ndGggPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KShjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgICAgICAgcmVnRWxlbWVudC5zZXRDaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcyh0cnVlKTsKLSAgICAgICAgICByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpOwotICAgICAgICAgIGxpbmtDYXRlZ29yeU1vZGVsc1dpdGhTYXZlZERhdGEocmVnaXN0cnlOYW1lLHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBsaW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKFN0cmluZyByZWdpc3RyeU5hbWUsRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBkaXJlY3RvcnlCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGRpcmVjdG9yeUJ1ZmZlcixjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpLHJlZ2lzdHJ5TmFtZSk7Ci0gICAgICBsaW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyxkaXJlY3RvcnlCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIGxpbmtDYXRlZ29yeU1vZGVsc1dpdGhTYXZlZERhdGEoRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzLFN0cmluZyBjYXRlZ29yaWVzRGlyZWN0b3J5KQotICAgIHsKLSAgICAgIEZpbGUgY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShjYXRlZ29yaWVzRGlyZWN0b3J5KTsKLSAgICAgIEZpbGVbXSBjYXRlZ29yeUZpbGVzID0gbnVsbDsKLSAgICAgIGlmIChjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgY2F0ZWdvcnlGaWxlcyA9IGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlLmxpc3RGaWxlcygpOyAKLSAgICAgICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgd2hpbGUgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBDYXRlZ29yeU1vZGVsIGNhdGVnb3J5TW9kZWwgPSAoQ2F0ZWdvcnlNb2RlbCl1c2VyRGVmaW5lZENhdGVnb3JpZXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgIFN0cmluZyBjYXRlZ29yeUtleSA9IGNhdGVnb3J5TW9kZWwuZ2V0Q2F0ZWdvcnlLZXkoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPGNhdGVnb3J5RmlsZXMubGVuZ3RoO2krKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIGNhdGVnb3J5UHJvcGVydGllc0ZpbGVOYW1lID0gY2F0ZWdvcnlGaWxlc1tpXS5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgIGludCBsYXN0RG90UG9zID0gY2F0ZWdvcnlQcm9wZXJ0aWVzRmlsZU5hbWUubGFzdEluZGV4T2YoIi4iKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGRlY29kZWRDYXRlZ29yeVByb3BlcnRpZXNGaWxlTmFtZUJhc2UgPSBVUkxVdGlscy5kZWNvZGUoY2F0ZWdvcnlQcm9wZXJ0aWVzRmlsZU5hbWUuc3Vic3RyaW5nKDAsbGFzdERvdFBvcykpOwotICAgICAgICAgICAgICBpZiAobGFzdERvdFBvcyA+IDAgJiYgY2F0ZWdvcnlQcm9wZXJ0aWVzRmlsZU5hbWUuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikgJiYgY2F0ZWdvcnlLZXkuZXF1YWxzKGRlY29kZWRDYXRlZ29yeVByb3BlcnRpZXNGaWxlTmFtZUJhc2UpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2F0ZWdvcnlNb2RlbC5zZXREZWZhdWx0RGF0YUZpbGUoY2F0ZWdvcnlGaWxlc1tpXS5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0gICAgICAgICAgICAgICAgY2F0ZWdvcnlNb2RlbC5sb2FkRnJvbURlbGltaXRlckZpbGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBWZWN0b3IgZ2V0UmVnaXN0cnlOb2Rlc0J5SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgICB7Ci0gICAgICBWZWN0b3IgcmVnaXN0cnlOb2RlcyA9IG51bGw7Ci0gICAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpKG5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKSk7Ci0gICAgICBWZWN0b3IgY2hpbGROb2RlcyA9IHVkZGlNYWluTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjaGlsZE5vZGVzLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGlmIChjaGlsZE5vZGUgaW5zdGFuY2VvZiBSZWdpc3RyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpY2hpbGROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgU3RyaW5nIGN1cnJJbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICAgICAgaWYgKGN1cnJJbnF1aXJ5VVJMICE9IG51bGwgJiYgY3VycklucXVpcnlVUkwuZXF1YWxzKGlucXVpcnlVUkwpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWdpc3RyeU5vZGVzID09IG51bGwpCi0gICAgICAgICAgICAgIHJlZ2lzdHJ5Tm9kZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICByZWdpc3RyeU5vZGVzLmFkZEVsZW1lbnQoY2hpbGROb2RlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgICAgcmV0dXJuIHJlZ2lzdHJ5Tm9kZXM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gbmV3QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgPSBudWxsOwotCi0gICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSB7Ci0gICAgICAgICAgICBmYXZvcml0ZXNGb2xkZXJFbGVtZW50ID0gKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc0VsZW1lbnQpIHsKLSAgICAgICAgICAgIGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgPSAoKEZhdm9yaXRlc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRQYXJlbnRGb2xkZXJFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJldHVybiBhbiBpbnN0YW5jZSBvZiBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YKLSAgICAgICAgLy8gZmF2b3JpdGVzIGZvbGRlciBlbGVtZW50IGJlaW5nIHNlbGVjdGVkLgotICAgICAgICBpZiAoZmF2b3JpdGVzRm9sZGVyRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbmV3IEFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UgaWYgKGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UgaWYgKGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgICBlbHNlIGlmIChmYXZvcml0ZXNGb2xkZXJFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UgaWYgKGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbmV3IEFkZFNlcnZpY2VJbnRlcmZhY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRVc2VyRGVmUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRVc2VyRGVmUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODA5NTM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci0KLXB1YmxpYyBjbGFzcyBBZGRVc2VyRGVmUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRVc2VyRGVmUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSByZWdFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIFN0cmluZyBwdWJsaXNoQVBJID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIGRlZmF1bHRMb2dpbiA9IHJlZ0VsZW1lbnQuZ2V0RGVmYXVsdExvZ2luKCk7Ci0gICAgU3RyaW5nIGRlZmF1bHRQYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0RGVmYXVsdFBhc3N3b3JkKCk7Ci0gICAgVGF4b25vbXlbXSB0YXhvbm9taWVzID0gcmVnRWxlbWVudC5nZXRUYXhvbm9taWVzKCk7Ci0gICAgaWYgKCFjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKGlucXVpcnlBUEksIHB1Ymxpc2hBUEksIHJlZ2lzdHJ5TmFtZSwgbnVsbCwgZGVmYXVsdExvZ2luLCBkZWZhdWx0UGFzc3dvcmQsIHRheG9ub21pZXMsIGZhbHNlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCByZWdpc3RyeU5hbWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYjU4YzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzV1NJTEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5PcGVuV1NJTEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIE11bHRpcGxlTGlua0FjdGlvbgotewotICBwdWJsaWMgQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvYWN0aW9ucy9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIjsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNXU0lMRWxlbWVudCB3c2lsRWxlbWVudCA9IChGYXZvcml0ZXNXU0lMRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgIFN0cmluZyB3c2lsVVJMID0gd3NpbEVsZW1lbnQuZ2V0V3NpbFVybCgpOwotICAgIE9wZW5XU0lMQWN0aW9uIG9wZW5XU0lMQWN0aW9uID0gbmV3IE9wZW5XU0lMQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5XU0lMQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMLCB3c2lsVVJMKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChXc2lsQWN0aW9uSW5wdXRzLldTSUxfSU5TUEVDVElPTl9UWVBFLCBTdHJpbmcudmFsdWVPZihXc2lsQWN0aW9uSW5wdXRzLldTSUxfREVUQUlMUykpOwotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gb3BlbldTSUxBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1dTSUxfVE9fV1NJTF9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgd3NpbFVSTCkpOwotICAgIGVsc2UKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9XU0lMX1RPX1dTSUxfUEVSU1BFQ1RJVkUiLCB3c2lsVVJMKSk7Ci0gICAgcmV0dXJuIGFjdGlvblJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTUyOGQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLk9wZW5XU0RMQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHVibGljIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IHdzZGxFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCkgc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHdzZGxVcmwgPSB3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCk7Ci0gICAgT3BlbldTRExBY3Rpb24gb3BlbldTRExBY3Rpb24gPSBuZXcgT3BlbldTRExBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gb3BlbldTRExBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCwgd3NkbFVybCk7Ci0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBvcGVuV1NETEFjdGlvbi5ydW4oKTsKLSAgICBpZiAoYWN0aW9uUmVzdWx0KQotICAgICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCB3c2RsVXJsKSk7Ci0gICAgZWxzZQotICAgICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRSIsIHdzZGxVcmwpKTsKLSAgICByZXR1cm4gYWN0aW9uUmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZjMWUzZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5XU0RMRmlsZU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gZXh0ZW5kcyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gewotCi0gICAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZl87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgd3NkbEZpbGVOYW1lXzsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxpbnQgdG9vbElkLGludCB2aWV3SWQsaW50IHZpZXdUb29sSWQpCi0gICAgewotICAgICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9ydGllc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB3cml0ZShPdXRwdXRTdHJlYW0gb3MpIHsKLSAgICAgICAgaWYgKGRlZl8gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHdyaXRlV1NETERlZmluaXRpb24ob3MsIGRlZl8pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0RmlsZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiB3c2RsRmlsZU5hbWVfOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICAgICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotCi0gICAgICAgIC8vIHJldHVybiBmYWxzZSBpZiBub2RlSUQgPT0gMCwgdGhhdCBpcyB0aGUgbWFpbiBub2RlCi0gICAgICAgIGlmIChub2RlSUQgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgICAgIFN0cmluZyB3c2RsVVJMID0gKChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRXc2RsVXJsKCk7Ci0gICAgICAgIHdzZGxGaWxlTmFtZV8gPSBXU0RMRmlsZU5hbWVIZWxwZXIuZ2V0V1NETEZpbGVOYW1lKHdzZGxVUkwpOwotICAgICAgICB0cnkgewotICAgICAgICAgIGRlZl8gPSAobmV3IFVkZGk0akhlbHBlcigpKS5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UodC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2Y1MWU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvV29ya2JlbmNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gewotICAgIHB1YmxpYyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgcmV0dXJuIChGb3JtVG9vbClmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgfQotCi0gICAgcHVibGljIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBuZXdJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oKSB7Ci0gICAgICAgIEZhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLQotICAgICAgICB0YWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2Yoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKSk7Ci0gICAgICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkpKTsKLQotICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2ZmE3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gewotCi0gICAgcHVibGljIEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBuZXdBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHJldHVybiBuZXcgRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICByZXR1cm4gKEZvcm1Ub29sKWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBsYXVuY2hXaXphcmQoKChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRXc2RsVXJsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwNTMyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGlua0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0ZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24KLXsKLSAgcHVibGljIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNDb25maXJtSlNQLmpzcCIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgbWFpbk5vZGUgPSBub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IG1haW5FbGVtZW50ID0gKEZhdm9yaXRlc01haW5FbGVtZW50KW1haW5Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBtYWluRWxlbWVudC5yZXN0b3JlRmF2b3JpdGVzRGVmYXVsdCgpOwotICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgewotICAgICAgVmVjdG9yIGZvbGRlck5vZGVzID0gbWFpbk5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb2xkZXJOb2Rlcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBmb2xkZXJOb2RlID0gKE5vZGUpZm9sZGVyTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IGZvbGRlck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KXRyZWVFbGVtZW50OwotICAgICAgICAgIGZvbGRlckVsZW1lbnQucmVtb3ZlQWxsRmF2b3JpdGVzKGNvbnRyb2xsZXJfLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkpOwotICAgICAgICAgIGZvbGRlckVsZW1lbnQuaW5pdChtYWluRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fRkFWT1JJVEVTX1JFU1RPUkVEX1RPX0RFRkFVTFQiKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX09QRU5fRkFWT1JJVEVTX0JBQ0tVUCIpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZTk5MjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Ub2dnbGVOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb24gZXh0ZW5kcyBUb2dnbGVOb2RlQWN0aW9uIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCwgYm9vbGVhbiBvcGVuKSB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSWQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuT1BFTik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGlmIChvcGVuKQotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk9QRU5fTk9ERSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5DTE9TRV9OT0RFKTsKLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHRvZ2dsZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgICBpbnQgbm9kZUlkID0gdG9nZ2xlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgICAgICBpbnQgdG9vbElkID0gc2VsZWN0ZWRUb29sLmdldFRvb2xJZCgpOwotICAgICAgICBpbnQgdmlld0lkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgICAgICBpbnQgdmlld1Rvb2xJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsIHRvb2xJZCwgdmlld0lkLCB2aWV3VG9vbElkLCB0cnVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsIHRydWUpOwotICAgIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9NdWx0aXBsZUxpbmtBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MGRlZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9NdWx0aXBsZUxpbmtBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuTWFzc05vZGVJZFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc0FjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIE11bHRpcGxlTGlua0FjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24KLXsKLSAgcHVibGljIE11bHRpcGxlTGlua0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBpc011bHRpcGxlTGlua0FjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTik7Ci0gICAgaWYgKGlzTXVsdGlwbGVMaW5rQWN0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiwgaXNNdWx0aXBsZUxpbmtBY3Rpb24pOwotICAgICAgcmV0dXJuIHByb2Nlc3NNdWx0aXBsZUxpbmtBY3Rpb25QYXJhbWV0ZXJzKHJlcXVlc3QpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKEZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTik7Ci0gICAgICBTdHJpbmcgbm9kZUlEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICBTdHJpbmcgdG9vbElEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgICBTdHJpbmcgdmlld0lEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICBTdHJpbmcgdmlld1Rvb2xJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICAgIGlmIChub2RlSURTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG5vZGVJRFN0cmluZyk7Ci0gICAgICBpZiAodG9vbElEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVE9PTElELCB0b29sSURTdHJpbmcpOwotICAgICAgaWYgKHZpZXdJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCwgdmlld0lEU3RyaW5nKTsKLSAgICAgIGlmICh2aWV3VG9vbElEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCwgdmlld1Rvb2xJRFN0cmluZyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTXVsdGlwbGVMaW5rQWN0aW9uUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZ1tdIG1hc3NBY3Rpb25Ob2RlSURzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCwgbWFzc0FjdGlvbk5vZGVJRHMpOwotICAgIGlmIChtYXNzQWN0aW9uTm9kZUlEcy5sZW5ndGggPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBJVHJhbnNmb3JtZXJbXSB7bmV3IE1hc3NOb2RlSWRUcmFuc2Zvcm1lcihjb250cm9sbGVyXywgRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQpfTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlXy5jb250YWluc0tleShGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZ1tdIGdldE1hc3NBY3Rpb25Ob2RlSWRzKCkKLSAgewotICAgIE9iamVjdCBvYmplY3QgPSBwcm9wZXJ0eVRhYmxlXy5nZXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQpOwotICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIGVsc2UgaWYgKG9iamVjdC5nZXRDbGFzcygpLmlzQXJyYXkoKSkKLSAgICAgIHJldHVybiAoU3RyaW5nW10pb2JqZWN0OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyhTdHJpbmcpb2JqZWN0fTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gKGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkpID8gZXhlY3V0ZU11bHRpcGxlTGlua0FjdGlvbigpIDogZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVNdWx0aXBsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBTdHJpbmdbXSBtYXNzQWN0aW9uTm9kZUlEcyA9IGdldE1hc3NBY3Rpb25Ob2RlSWRzKCk7Ci0gICAgaWYgKG1hc3NBY3Rpb25Ob2RlSURzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXNzQWN0aW9uTm9kZUlEcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG1hc3NBY3Rpb25Ob2RlSURzW2ldKTsKLSAgICAgICAgaWYgKGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkpCi0gICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnJlbW92ZShBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhhMzE4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0ZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZW1vdmVGYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHVibGljIFJlbW92ZUZhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFN0cmluZyBub2RlSURTdHJpbmcgPSAoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgaW50IG5vZGVJRDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgIHsKLSAgICAgIG5vZGVJRCA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZUlkKCk7Ci0gICAgfQotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkgPSBjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpOwotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0OwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNFbGVtZW50KQotICAgICAgYWN0aW9uUmVzdWx0ID0gKChGYXZvcml0ZXNFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLmdldFBhcmVudEZvbGRlckVsZW1lbnQoKS5yZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKG5vZGVJRCwgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpOwotICAgIGVsc2UgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpCi0gICAgICBhY3Rpb25SZXN1bHQgPSAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudCkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNNYWluRWxlbWVudCkKLSAgICB7Ci0gICAgICBFbnVtZXJhdGlvbiBlOwotICAgICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgbWFpbkVsZW1lbnQgPSAoRmF2b3JpdGVzTWFpbkVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICAgIGUgPSBtYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9GT0xERVJfTk9ERSk7Ci0gICAgICBhY3Rpb25SZXN1bHQgPSAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKSkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICAgIGUgPSBtYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgICAgIGFjdGlvblJlc3VsdCA9IGFjdGlvblJlc3VsdCAmJiAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKSkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICAgIGUgPSBtYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgICAgIGFjdGlvblJlc3VsdCA9IGFjdGlvblJlc3VsdCAmJiAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKSkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICAgIGUgPSBtYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSk7Ci0gICAgICBhY3Rpb25SZXN1bHQgPSBhY3Rpb25SZXN1bHQgJiYgKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBlLm5leHRFbGVtZW50KCkpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgICBlID0gbWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfRk9MREVSX05PREUpOwotICAgICAgYWN0aW9uUmVzdWx0ID0gYWN0aW9uUmVzdWx0ICYmICgoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCkgZS5uZXh0RWxlbWVudCgpKS5yZW1vdmVBbGxGYXZvcml0ZXMocGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpOwotICAgICAgZSA9IG1haW5FbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFKTsKLSAgICAgIGFjdGlvblJlc3VsdCA9IGFjdGlvblJlc3VsdCAmJiAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKSkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgYWN0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0lORk9fTk9ERV9DTEVBUkVEIiwgc2VsZWN0ZWROb2RlLmdldE5vZGVOYW1lKCkpKTsKLSAgICByZXR1cm4gYWN0aW9uUmVzdWx0OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gImZhdk5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJmYXZQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJmYXZTdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzRiZTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUmVzaXplRnJhbWVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc0FjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNGcmFtZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb24gZXh0ZW5kcyBSZXNpemVGcmFtZXNBY3Rpb24KLXsKLSAgcHVibGljIFJlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBmcmFtZXNldCBzaXplcy4KLSAgICBTdHJpbmcgZnJhbWVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLkZSQU1FX05BTUUpOwotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBuZXcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgaWYgKGZyYW1lTmFtZS5lcXVhbHMoRmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhmYXZQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMTAwJSwwJSIpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZU5hbWUuZXF1YWxzKEZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoZmF2UGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhmYXZQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygiMTAwJSwwJSIpOwotICAgICAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZU5hbWUuZXF1YWxzKEZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoZmF2UGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhmYXZQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygiMCUsMTAwJSIpOwotICAgICAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI5NzQ3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVBY3Rpb24KLXsKLSAgICBwdWJsaWMgU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBib29sZWFuIGtlZXBIaXN0b3J5KQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGlmIChrZWVwSGlzdG9yeSkgewotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoIj0xIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgICB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCB0cnVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfRkFWT1JJVEVTOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNjcyN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZVRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZVRvb2xBY3Rpb24KLXsKLSAgICBwdWJsaWMgU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCwgYm9vbGVhbiBrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICAgICAgaWYgKHZpZXdJRCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoa2VlcEhpc3RvcnkpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCI9MSIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gICAgewotICAgICAgICBpZiAoZ2V0U2VsZWN0ZWRUb29sKCkuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKSB7Ci0gICAgICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBnZXRTZWxlY3RlZFRvb2woKS5nZXRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250ZW50VmFyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFByb3BlcnRpZXNDb250ZW50UGFnZSgpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfRkFWT1JJVEVTOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ2NDU5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uIGV4dGVuZHMgU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbgotewotICAgIHB1YmxpYyBTZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwZXJmb3JtRXh0ZW5kZWRBY3Rpb24oKQotICAgIHsKLSAgICAJVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIAkoKEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkucmVmcmVzaCgpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGJvb2xlYW4ga2VlcEhpc3RvcnkpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGlmIChrZWVwSGlzdG9yeSkgewotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoIj0xIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNkOTA4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2hvd1BlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc0FjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgU2hvd1BlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gcGFyc2VyLmdldFBhcmFtZXRlcihGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgIT0gbnVsbCAmJiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQscGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUixhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgCi0gICAgLy8gU2F2ZSB0aGUgZnJhbWVzZXQgc2l6ZXMgaWZmIG5vIGZyYW1lIGlzIG1heGltaXplZC4KLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpICYmICFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgCi0gICAgaWYgKCFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIAotICAgIHJldHVybiBzdXBlci5ydW4oKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUFjdGlvbkxpbmsoaW50IHRhcmdldFBlcnNwZWN0aXZlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGZvcm1MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb25KU1AuanNwPyIpOwotICAgIGZvcm1MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpLmFwcGVuZCgnPScpLmFwcGVuZCh0YXJnZXRQZXJzcGVjdGl2ZUlkKTsKLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGZvcm1MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7ICAgIAotICAgIHJldHVybiBmb3JtTGluay50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9jb25zdGFudHMvRmF2b3JpdGVzQWN0aW9uSW5wdXRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9jb25zdGFudHMvRmF2b3JpdGVzQWN0aW9uSW5wdXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNGQzN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc0FjdGlvbklucHV0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNBY3Rpb25JbnB1dHMKLXsKLSAgICAvLyBtYXNzIGFjdGlvbnMKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBNVUxUSVBMRV9MSU5LX0FDVElPTiA9ICJtdWx0aXBsZUxpbmtBY3Rpb24iOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE1BU1NfQUNUSU9OX05PREVfSUQgPSAibWFzc0FjdGlvbk5vZGVJRCI7Ci0KLSAgICAvLyByZXNpemUgZmF2b3JpdGVzIGZyYW1lcyBhY3Rpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBGUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQgPSAiZnJhbWVzZXRDb2xzUGVyc3BlY3RpdmVDb250ZW50IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBGUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSID0gImZyYW1lc2V0Um93c0FjdGlvbnNDb250YWluZXIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc0ZyYW1lTmFtZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2NvbnN0YW50cy9GYXZvcml0ZXNGcmFtZU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNmMyNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc0ZyYW1lTmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzRnJhbWVOYW1lcwotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOQVZJR0FUT1JfQ09OVEFJTkVSID0gImZhdl9uYXZpZ2F0b3JfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX1RPT0xCQVIgPSAiZmF2X25hdmlnYXRvcl90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX0NPTlRFTlQgPSAiZmF2X25hdmlnYXRvcl9jb250ZW50IjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQUNUSU9OU19DT05UQUlORVIgPSAiZmF2X2FjdGlvbnNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19DT05UQUlORVIgPSAiZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19UT09MQkFSID0gImZhdl9wcm9wZXJ0aWVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0NPTlRFTlQgPSAiZmF2X3Byb3BlcnRpZXNfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNUQVRVU19DT05UQUlORVIgPSAiZmF2X3N0YXR1c19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTVEFUVVNfVE9PTEJBUiA9ICJmYXZfc3RhdHVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTVEFUVVNfQ09OVEVOVCA9ICJmYXZfc3RhdHVzX2NvbnRlbnQiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc01vZGVsQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9jb25zdGFudHMvRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmMGMyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9jb25zdGFudHMvRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMgewotICAgIC8vIFJlbGF0aW9ucwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0lMX0ZPTERFUl9OT0RFID0gInJlbFdTSUxGb2xkZXJOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFID0gInJlbFdTRExTZXJ2aWNlRm9sZGVyTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSA9ICJyZWxVRERJU2VydmljZUZvbGRlck5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX0JVU0lORVNTX0ZPTERFUl9OT0RFID0gInJlbFVERElCdXNpbmVzc0ZvbGRlck5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0ZPTERFUl9OT0RFID0gInJlbFVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUgPSAicmVsVURESVJlZ2lzdHJ5Rm9sZXJOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSA9ICJyZWxVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1dTSUxfTk9ERSA9ICJyZWxXU0lMTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1dTRExfU0VSVklDRV9OT0RFID0gInJlbFdTRExTZXJ2aWNlTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfU0VSVklDRV9OT0RFID0gInJlbFVERElTZXJ2aWNlTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfQlVTSU5FU1NfTk9ERSA9ICJyZWxVRERJQnVzaW5lc3NOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFID0gInJlbFVERElTZXJ2aWNlSW50ZXJmYWNlTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfUkVHSVNUUllfTk9ERSA9ICJyZWxVRERJUmVnaXN0cnlOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9OT0RFID0gInJlbFVzZXJEZWZVRERJUmVnaXN0cnlOb2RlIjsKLQotICAgIC8vIFByb3BlcnRpZXMKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1BMVUdJTl9NRVRBREFUQV9ESVJFQ1RPUlkgPSAicGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfV1NJTF9VUkwgPSAid3NpbFVSTCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9XU0RMX1VSTCA9ICJ3c2RsVVJMIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfU0VSVklDRV9OQU1FID0gIlVERElTZXJ2aWNlTmFtZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEkgPSAiVURESVNlcnZpY2VJbnF1aXJ5QVBJIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfU0VSVklDRV9LRVkgPSAiVURESVNlcnZpY2VLZXkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9CVVNJTkVTU19OQU1FID0gIlVERElCdXNpbmVzc05hbWUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSA9ICJVRERJQnVzaW5lc3NJbnF1aXJ5QVBJIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfQlVTSU5FU1NfS0VZID0gIlVERElCdXNpbmVzc0tleSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUgPSAiVURESVNlcnZpY2VJbnRlcmZhY2VOYW1lIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfSU5RVUlSWV9BUEkgPSAiVURESVNlcnZpY2VJbnRlcmZhY2VJbnF1aXJ5QVBJIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfS0VZID0gIlVERElTZXJ2aWNlSW50ZXJmYWNlS2V5IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfUkVHSVNUUllfTkFNRSA9ICJVRERJUmVnaXN0cnlOYW1lIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfUkVHSVNUUllfSU5RVUlSWV9BUEkgPSAiVURESVJlZ2lzdHJ5SW5xdWlyeUFQSSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1JFR0lTVFJZX1BVQkxJU0hfQVBJID0gIlVERElSZWdpc3RyeVB1Ymxpc2hBUEkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9SRUdJU1RSWV9SRUdJU1RSQVRJT05fVVJMID0gIlVERElSZWdpc3RyeVJlZ2lzdHJhdGlvblVSTCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1JFR0lTVFJZX0NBVEVHT1JJRVNfRU5VTSA9ICJVRERJUmVnaXN0cnlDYXRlZ29yaWVzRW51bSI7Ci0KLSAgICAvLyBMaXN0IE1hbmFnZXJzIGZvciBGYXZvcml0ZXMKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUyA9ICJ3c2RsU2VydmljZXMiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTID0gInVkZGlTZXJ2aWNlcyI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1VERElfQlVTSU5FU1MgPSAidWRkaUJ1c2luZXNzIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfV1NJTF9MSU5LUyA9ICJ3c2lsTGlua3MiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX1JFR0lTVFJZID0gInVkZGlSZWdpc3RyeSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1VERElfU0VSVklDRV9JTlRFUkZBQ0UgPSAidWRkaVNlcnZpY2VJbnRlcmZhY2UiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNjc3ZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNFbGVtZW50IGV4dGVuZHMgVHJlZUVsZW1lbnQgewotCi0gIHB1YmxpYyBGYXZvcml0ZXNFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCkgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgfQotCi0gIHB1YmxpYyBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGdldFBhcmVudEZvbGRlckVsZW1lbnQoKSB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgaWYgKCFlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc0ZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YjljMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc0ZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBleHRlbmRzIFRyZWVFbGVtZW50Ci17Ci0gICAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgICAKLSAgICBwdWJsaWMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICAgICAgbm9kZU1hbmFnZXJfID0gbm9kZU1hbmFnZXI7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIEZhdm9yaXRlc01haW5FbGVtZW50IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCkgewotICAgICAgICByZXR1cm4gKEZhdm9yaXRlc01haW5FbGVtZW50KW5vZGVNYW5hZ2VyXy5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgfQotCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5pdChGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiByZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKGludCBub2RlSUQsU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHJlbW92ZUFsbEZhdm9yaXRlcyhTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpOwotCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgRW51bWVyYXRpb24gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNNYWluRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc01haW5FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OWVlY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc01haW5FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5mYXZvcml0ZXMuRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZXh0ZW5kcyBUcmVlRWxlbWVudAotewotICBwcml2YXRlIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByaXZhdGUgRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFIGZhdlJlZ2lzdHJ5XzsKLQotICBwdWJsaWMgRmF2b3JpdGVzTWFpbkVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIGZhdlJlZ2lzdHJ5XyA9IG5ldyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UoCi0JCQljb250cm9sbGVyLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpLAotCQkJY29udHJvbGxlci5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpCi0JKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlc3RvcmVGYXZvcml0ZXNEZWZhdWx0KCkKLSAgewotICAgIGZhdlJlZ2lzdHJ5Xy5yZXN0b3JlRmF2b3JpdGVzRGVmYXVsdCgpOwotICAgIHJldHVybiBzYXZlRmF2b3JpdGVzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzYXZlRmF2b3JpdGVzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGZhdlJlZ2lzdHJ5Xy5zYXZlKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1NBVkVfRkFWT1JJVEVTX1dTSUwiLCBmYXZSZWdpc3RyeV8uZ2V0V3JpdGVMb2NhdGlvbigpKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIExpbmsgYWRkVURESVJlZ2lzdHJ5KFN0cmluZyByZWdpc3RyeU5hbWUsIFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgcHVibGlzaEFQSSwgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8uYWRkVURESVJlZ2lzdHJ5KHJlZ2lzdHJ5TmFtZSwgaW5xdWlyeUFQSSwgcHVibGlzaEFQSSwgcmVnaXN0cmF0aW9uVVJMKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGFkZFVERElCdXNpbmVzcyhTdHJpbmcgYnVzaW5lc3NOYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIGJ1c2luZXNzS2V5KQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5hZGRVRERJQnVzaW5lc3MoYnVzaW5lc3NOYW1lLCBpbnF1aXJ5QVBJLCBidXNpbmVzc0tleSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBhZGRVRERJU2VydmljZShTdHJpbmcgc2VydmljZU5hbWUsIFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgc2VydmljZUtleSkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8uYWRkVURESVNlcnZpY2Uoc2VydmljZU5hbWUsIGlucXVpcnlBUEksIHNlcnZpY2VLZXkpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgYWRkVURESVNlcnZpY2VJbnRlcmZhY2UoU3RyaW5nIHNlckludE5hbWUsIFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgc2VySW50S2V5KQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5hZGRVRERJU2VydmljZUludGVyZmFjZShzZXJJbnROYW1lLCBpbnF1aXJ5QVBJLCBzZXJJbnRLZXkpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgYWRkV1NETFNlcnZpY2UoU3RyaW5nIHVybCkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8uYWRkV1NETFNlcnZpY2UodXJsKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGFkZFdTSUxMaW5rKFN0cmluZyB1cmwpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmFkZFdTSUxMaW5rKHVybCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkgewotICAgIGZhdlJlZ2lzdHJ5Xy5yZW1vdmVTZXJ2aWNlKHNlcnZpY2UpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlTGluayhMaW5rIGxpbmspIHsKLSAgICBmYXZSZWdpc3RyeV8ucmVtb3ZlTGluayhsaW5rKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rW10gbG9hZFVERElSZWdpc3RyaWVzKCkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8ubG9hZFVERElSZWdpc3RyaWVzKCk7Ci0gIH0KLSAgICAKLSAgcHVibGljIExpbmtbXSBsb2FkVURESUJ1c2luZXNzZXMoKQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5sb2FkVURESUJ1c2luZXNzZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlW10gbG9hZFVERElTZXJ2aWNlcygpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmxvYWRVRERJU2VydmljZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlW10gbG9hZFVERElTZXJ2aWNlSW50ZXJmYWNlcygpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmxvYWRVRERJU2VydmljZUludGVyZmFjZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlW10gbG9hZFdTRExTZXJ2aWNlcygpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmxvYWRXU0RMU2VydmljZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rW10gbG9hZFdTSUxzKCkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8ubG9hZFdTSUxzKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50IGdldEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIChGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KShnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSkubmV4dEVsZW1lbnQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmQxN2ZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzVURESUJ1c2luZXNzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQgewotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESUJ1c2luZXNzIHVkZGlCdXNpbmVzc187Ci0KLSAgcHVibGljIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBMaW5rIGxpbmspIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgdWRkaUJ1c2luZXNzXyA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3MoKTsKLSAgICB1ZGRpQnVzaW5lc3NfLnNldExpbmsobGluayk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBnZXRMaW5rKCkgewotICAgIHJldHVybiB1ZGRpQnVzaW5lc3NfLmdldExpbmsoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICByZXR1cm4gdWRkaUJ1c2luZXNzXy5nZXROYW1lKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKSB7Ci0gICAgcmV0dXJuIHVkZGlCdXNpbmVzc18uZ2V0SW5xdWlyeVVSTCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRCdXNpbmVzc0tleSgpIHsKLSAgICByZXR1cm4gdWRkaUJ1c2luZXNzXy5nZXRCdXNpbmVzc0tleSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE0YWI0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudAotewotICBwdWJsaWMgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwsIG5vZGVNYW5hZ2VyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQpIHsKLSAgICBMaW5rW10gbGlua3MgPSBmYXZNYWluRWxlbWVudC5sb2FkVURESUJ1c2luZXNzZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBMaW5rIGxpbmsgPSBsaW5rc1tpXTsKLSAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZmF2VURESUJ1c2luZXNzRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KChsaW5rLmdldEFic3RyYWN0cygpKVswXS5nZXRUZXh0KCksIGdldE1vZGVsKCksIGxpbmspOwotICAgICAgY29ubmVjdChmYXZVRERJQnVzaW5lc3NFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBidXNpbmVzc05hbWUgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfTkFNRSk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19LRVkpOwotICAgIGlmIChidXNpbmVzc05hbWUgPT0gbnVsbCB8fCBpbnF1aXJ5QVBJID09IG51bGwgfHwgYnVzaW5lc3NLZXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGUgPSBnZXRGYXZvcml0ZShpbnF1aXJ5QVBJLCBidXNpbmVzc0tleSk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHJlbW92ZUZhdm9yaXRlKGUpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBMaW5rIGxpbmsgPSBmYXZNYWluRWxlbWVudC5hZGRVRERJQnVzaW5lc3MoYnVzaW5lc3NOYW1lLCBpbnF1aXJ5QVBJLCBidXNpbmVzc0tleSk7Ci0gICAgYm9vbGVhbiBzYXZlZCA9IGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgICBpZiAoc2F2ZWQpIHsKLSAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZmF2VURESUJ1c2luZXNzRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KGJ1c2luZXNzTmFtZSwgZ2V0TW9kZWwoKSwgbGluayk7Ci0gICAgICBjb25uZWN0KGZhdlVERElCdXNpbmVzc0VsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICAgIHJldHVybiBzYXZlZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0lOUVVJUllfQVBJKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfS0VZKTsKLSAgICBpZiAoaW5xdWlyeUFQSSA9PSBudWxsIHx8IGJ1c2luZXNzS2V5ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChnZXRGYXZvcml0ZShpbnF1aXJ5QVBJLCBidXNpbmVzc0tleSkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKGludCBub2RlSUQsU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCkKLSAgICAgIHJldHVybiAocmVtb3ZlRmF2b3JpdGUoKEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KSAmJiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiByZW1vdmVGYXZvcml0ZShGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBMaW5rIGxpbmsgPSBlbGVtZW50LmdldExpbmsoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKGZhdk1haW5FbGVtZW50LnJlbW92ZUxpbmsobGluaykpIHsKLSAgICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUFsbEZhdm9yaXRlcyhTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZmF2VURESUJ1c2luZXNzRWxlbWVudCA9IChGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIExpbmsgbGluayA9IGZhdlVERElCdXNpbmVzc0VsZW1lbnQuZ2V0TGluaygpOwotICAgICAgZmF2TWFpbkVsZW1lbnQucmVtb3ZlTGluayhsaW5rKTsKLSAgICB9Ci0gICAgZGlzY29ubmVjdFJlbChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFKTsKLSAgICByZXR1cm4gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfTk9ERSk7Ci0gIH0KLQotICBwcml2YXRlIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBidXNpbmVzc0tleSkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKGlucXVpcnlBUEkuZXF1YWxzKGJ1c0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpKSAmJgotICAgICAgICAgIGJ1c2luZXNzS2V5LmVxdWFscyhidXNFbGVtZW50LmdldEJ1c2luZXNzS2V5KCkpKQotICAgICAgICByZXR1cm4gYnVzRWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODNmNjZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzVURESVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLklGYXZvcml0ZXNVRERJUmVnaXN0cnk7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRWxlbWVudCB7Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNVRERJUmVnaXN0cnkgdWRkaVJlZ187Ci0KLSAgcHVibGljIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBMaW5rIGxpbmspIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgdWRkaVJlZ18gPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5KCk7Ci0gICAgdWRkaVJlZ18uc2V0TGluayhsaW5rKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGdldExpbmsoKSB7Ci0gICAgcmV0dXJuIHVkZGlSZWdfLmdldExpbmsoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICByZXR1cm4gdWRkaVJlZ18uZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgIHJldHVybiB1ZGRpUmVnXy5nZXRJbnF1aXJ5VVJMKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKSB7Ci0gICAgcmV0dXJuIHVkZGlSZWdfLmdldFB1Ymxpc2hVUkwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVnaXN0cmF0aW9uVVJMKCkgewotICAgIHJldHVybiB1ZGRpUmVnXy5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotICAKLSAgcHVibGljIElGYXZvcml0ZXNVRERJUmVnaXN0cnkgZ2V0SUZhdm9yaXRlc1VERElSZWdpc3RyeUludGVyZmFjZSgpCi0gIHsKLSAgICByZXR1cm4gdWRkaVJlZ187Ci0gIH0KLX0KLSAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE4ZmNjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQ2F0ZWdvcnlNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgTGlua1tdIGxpbmtzID0gZmF2TWFpbkVsZW1lbnQubG9hZFVERElSZWdpc3RyaWVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykgewotICAgICAgTGluayBsaW5rID0gbGlua3NbaV07Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGZhdlVERElSZWdzaXRyeUVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCgobGluay5nZXRBYnN0cmFjdHMoKSlbMF0uZ2V0VGV4dCgpLCBnZXRNb2RlbCgpLCBsaW5rKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVJlZ3NpdHJ5RWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfTkFNRSk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBwdWJsaXNoQVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX1BVQkxJU0hfQVBJKTsKLSAgICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX1JFR0lTVFJBVElPTl9VUkwpOwotICAgIEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IChFbnVtZXJhdGlvbil0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX0NBVEVHT1JJRVNfRU5VTSk7Ci0gICAgLy8gU2F2ZSB0aGUgY2F0ZWdvcnkgZGF0YSBmaXJzdCBhbmQgdW5kbyBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfUExVR0lOX01FVEFEQVRBX0RJUkVDVE9SWSk7Ci0gICAgICBTdHJpbmdCdWZmZXIgZGlyZWN0b3J5QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgZm9ybUNhdGVnb3JpZXNEaXJlY3RvcnkoZGlyZWN0b3J5QnVmZmVyLHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LHJlZ2lzdHJ5TmFtZSk7Ci0gICAgICBGaWxlIGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5QnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUubWtkaXJzKCk7Ci0gICAgICBTdHJpbmdCdWZmZXIgY2F0ZWdvcnlGaWxlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIHdoaWxlICh1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIENhdGVnb3J5TW9kZWwgY2F0ZWdvcnlNb2RlbCA9IChDYXRlZ29yeU1vZGVsKXVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5uZXh0RWxlbWVudCgpOyAgICAgICAgCi0gICAgICAgIGNhdGVnb3J5RmlsZU5hbWUuc2V0TGVuZ3RoKDApOwotICAgICAgICBTdHJpbmcgZW5jb2RlZENhdGVnb3J5S2V5ID0gVVJMVXRpbHMuZW5jb2RlKGNhdGVnb3J5TW9kZWwuZ2V0Q2F0ZWdvcnlLZXkoKSk7Ci0gICAgICAgIGNhdGVnb3J5RmlsZU5hbWUuYXBwZW5kKGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlLmdldEFic29sdXRlUGF0aCgpKS5hcHBlbmQoRmlsZS5zZXBhcmF0b3JDaGFyKS5hcHBlbmQoZW5jb2RlZENhdGVnb3J5S2V5KS5hcHBlbmQoIi50eHQiKTsKLSAgICAgICAgYnl0ZSByYyA9IGNhdGVnb3J5TW9kZWwuc2F2ZURhdGEoY2F0ZWdvcnlGaWxlTmFtZS50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKHJjICE9IENhdGVnb3J5TW9kZWwuT1BFUkFUSU9OX1NVQ0NFU1NGVUwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBEZWxldGUgdGhlIGNhdGVnb3J5IGZpbGUgaWYgaXQgZXhpc3RzLgotICAgICAgICAgIEZpbGUgY2F0ZWdvcnlGaWxlID0gbmV3IEZpbGUoY2F0ZWdvcnlGaWxlTmFtZS50b1N0cmluZygpKTsKLSAgICAgICAgICBpZiAoY2F0ZWdvcnlGaWxlLmV4aXN0cygpKQotICAgICAgICAgICAgY2F0ZWdvcnlGaWxlLmRlbGV0ZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjbGVhbnVwQ2F0ZWdvcnlEaXJlY3RvcmllcyhjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZSk7Ci0gICAgfQotICAgIGlmIChyZWdpc3RyeU5hbWUgPT0gbnVsbCB8fCBpbnF1aXJ5QVBJID09IG51bGwgfHwgcHVibGlzaEFQSSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZSA9IGdldEZhdm9yaXRlKHJlZ2lzdHJ5TmFtZSk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHJlbW92ZUZhdm9yaXRlKGUpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBMaW5rIGxpbmsgPSBmYXZNYWluRWxlbWVudC5hZGRVRERJUmVnaXN0cnkocmVnaXN0cnlOYW1lLCBpbnF1aXJ5QVBJLCBwdWJsaXNoQVBJLCByZWdpc3RyYXRpb25VUkwpOwotICAgIGJvb2xlYW4gc2F2ZWQgPSBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgaWYgKHNhdmVkKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGZhdlVERElSZWdzaXRyeUVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudChyZWdpc3RyeU5hbWUsIGdldE1vZGVsKCksIGxpbmspOwotICAgICAgY29ubmVjdChmYXZVRERJUmVnc2l0cnlFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgICByZXR1cm4gc2F2ZWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBmb3JtQ2F0ZWdvcmllc0RpcmVjdG9yeShTdHJpbmdCdWZmZXIgY2F0ZWdvcmllc0RpcmVjdG9yeSxTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnksU3RyaW5nIHJlZ2lzdHJ5TmFtZSkKLSAgewotICAgIC8vIDxtZXRhZGF0YT4vdWRkaS88cmVnaXN0cnlJZD4vY2F0ZWdvcmllcwotCVN0cmluZyBlbmNvZGVkUmVnaXN0cnlOYW1lID0gVVJMVXRpbHMuZW5jb2RlKHJlZ2lzdHJ5TmFtZSk7Ci0gICAgY2F0ZWdvcmllc0RpcmVjdG9yeS5hcHBlbmQocGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpLmFwcGVuZCgidWRkaSIpLmFwcGVuZChGaWxlLnNlcGFyYXRvckNoYXIpLmFwcGVuZChlbmNvZGVkUmVnaXN0cnlOYW1lKS5hcHBlbmQoRmlsZS5zZXBhcmF0b3JDaGFyKS5hcHBlbmQoImNhdGVnb3JpZXMiKTsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgdm9pZCBjbGVhclJlZ2lzdHJ5TWV0YWRhdGEoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LFN0cmluZyByZWdpc3RyeU5hbWUpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3JtQ2F0ZWdvcmllc0RpcmVjdG9yeShjYXRlZ29yaWVzRGlyZWN0b3J5LHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LHJlZ2lzdHJ5TmFtZSk7Ci0gICAgRmlsZSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZSA9IG5ldyBGaWxlKGNhdGVnb3JpZXNEaXJlY3RvcnkudG9TdHJpbmcoKSk7Ci0gICAgRmlsZVtdIGNhdGVnb3J5RmlsZXMgPSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5saXN0RmlsZXMoKTsKLSAgICBpZiAoY2F0ZWdvcnlGaWxlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdGVnb3J5RmlsZXMubGVuZ3RoO2krKykKLSAgICAgICAgY2F0ZWdvcnlGaWxlc1tpXS5kZWxldGUoKTsKLSAgICB9Ci0gICAgY2xlYW51cENhdGVnb3J5RGlyZWN0b3JpZXMoY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUpOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgY2xlYW51cENhdGVnb3J5RGlyZWN0b3JpZXMoRmlsZSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZSkKLSAgewotICAgIC8vIERlbGV0ZSB0aGUgY2F0ZWdvcmllcyBzdWJkaXJlY3RvcnkgaWYgaXQgaXMgZW1wdHkuCi0gICAgU3RyaW5nW10gZmlsZUxpc3Q7Ci0gICAgZmlsZUxpc3QgPSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5saXN0KCk7Ci0gICAgaWYgKGZpbGVMaXN0ID09IG51bGwgfHwgZmlsZUxpc3QubGVuZ3RoID09IDApCi0gICAgICBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5kZWxldGUoKTsKLSAgICAvLyBEZWxldGUgdGhlIDxyZWdpc3RyeUlkPiBzdWJkaXJlY3RvcnkgaWYgaXQgaXMgZW1wdHkuCi0gICAgRmlsZSByZWdpc3RyeUlkRGlyZWN0b3J5RmlsZSA9IGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlLmdldFBhcmVudEZpbGUoKTsKLSAgICBmaWxlTGlzdCA9IHJlZ2lzdHJ5SWREaXJlY3RvcnlGaWxlLmxpc3QoKTsKLSAgICBpZiAoZmlsZUxpc3QgPT0gbnVsbCB8fCBmaWxlTGlzdC5sZW5ndGggPT0gMCkKLSAgICAgIHJlZ2lzdHJ5SWREaXJlY3RvcnlGaWxlLmRlbGV0ZSgpOwotICAgIC8vIERlbGV0ZSB0aGUgdWRkaSBzdWJkaXJlY3RvcnkgaWYgaXQgaXMgZW1wdHkuCi0gICAgRmlsZSB1ZGRpRGlyZWN0b3J5RmlsZSA9IHJlZ2lzdHJ5SWREaXJlY3RvcnlGaWxlLmdldFBhcmVudEZpbGUoKTsKLSAgICBmaWxlTGlzdCA9IHVkZGlEaXJlY3RvcnlGaWxlLmxpc3QoKTsKLSAgICBpZiAoZmlsZUxpc3QgPT0gbnVsbCB8fCBmaWxlTGlzdC5sZW5ndGggPT0gMCkKLSAgICAgIHVkZGlEaXJlY3RvcnlGaWxlLmRlbGV0ZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHJlZ2lzdHJ5TmFtZSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9OQU1FKTsKLSAgICBpZiAocmVnaXN0cnlOYW1lID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChnZXRGYXZvcml0ZShyZWdpc3RyeU5hbWUpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpCi0gICAgewotICAgICAgY2xlYXJSZWdpc3RyeU1ldGFkYXRhKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LHNlbGVjdGVkRWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgYm9vbGVhbiByYyA9IHJlbW92ZUZhdm9yaXRlKChGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KXNlbGVjdGVkRWxlbWVudCk7Ci0gICAgICByYyA9IHJjICYmIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgICAgIHJldHVybiByYzsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJlbW92ZUZhdm9yaXRlKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZWxlbWVudCkgewotICAgIExpbmsgbGluayA9ICgoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCllbGVtZW50KS5nZXRMaW5rKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVMaW5rKGxpbmspKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGZhdlVERElSZWdpc3RyeUVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBjbGVhclJlZ2lzdHJ5TWV0YWRhdGEocGx1Z2luTWV0YWRhdGFEaXJlY3RvcnksZmF2VURESVJlZ2lzdHJ5RWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgTGluayBsaW5rID0gZmF2VURESVJlZ2lzdHJ5RWxlbWVudC5nZXRMaW5rKCk7Ci0gICAgICBmYXZNYWluRWxlbWVudC5yZW1vdmVMaW5rKGxpbmspOwotICAgIH0KLSAgICBkaXNjb25uZWN0UmVsKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpOwotICAgIHJldHVybiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QWxsRmF2b3JpdGVzKCkgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFKTsKLSAgfQotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBnZXRGYXZvcml0ZShTdHJpbmcgcmVnaXN0cnlOYW1lKSB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAocmVnaXN0cnlOYW1lLmVxdWFscyhyZWdFbGVtZW50LmdldE5hbWUoKSkpCi0gICAgICAgIHJldHVybiByZWdFbGVtZW50OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDBiMzRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlcy5GYXZvcml0ZXNVRERJU2VydmljZTsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQgewotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESVNlcnZpY2UgdWRkaVNlcnZpY2VfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgdWRkaVNlcnZpY2VfID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlKCk7Ci0gICAgdWRkaVNlcnZpY2VfLnNldFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKCkgewotICAgIHJldHVybiB1ZGRpU2VydmljZV8uZ2V0U2VydmljZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgIHJldHVybiB1ZGRpU2VydmljZV8uZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgIHJldHVybiB1ZGRpU2VydmljZV8uZ2V0SW5xdWlyeVVSTCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlS2V5KCkgewotICAgIHJldHVybiB1ZGRpU2VydmljZV8uZ2V0U2VydmljZUtleSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhYjRmOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNGb2xkZXJFbGVtZW50Ci17Ci0KLSAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwsIG5vZGVNYW5hZ2VyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQpIHsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBmYXZNYWluRWxlbWVudC5sb2FkVURESVNlcnZpY2VzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gc2VydmljZXNbaV07Ci0gICAgICBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgZmF2VURESVNlcnZpY2VFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCgoc2VydmljZS5nZXRTZXJ2aWNlTmFtZXMoKSlbMF0uZ2V0VGV4dCgpLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVNlcnZpY2VFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSk7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9LRVkpOwotICAgIGlmIChzZXJ2aWNlTmFtZSA9PSBudWxsIHx8IGlucXVpcnlBUEkgPT0gbnVsbCB8fCBzZXJ2aWNlS2V5ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGUgPSBnZXRGYXZvcml0ZShpbnF1aXJ5QVBJLCBzZXJ2aWNlS2V5KTsKLSAgICBpZiAoZSAhPSBudWxsKQotICAgICAgcmVtb3ZlRmF2b3JpdGUoZSk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIFNlcnZpY2Ugc2VydmljZSA9IGZhdk1haW5FbGVtZW50LmFkZFVERElTZXJ2aWNlKHNlcnZpY2VOYW1lLCBpbnF1aXJ5QVBJLCBzZXJ2aWNlS2V5KTsKLSAgICBib29sZWFuIHNhdmVkID0gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICAgIGlmIChzYXZlZCkgewotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGZhdlVERElTZXJ2aWNlRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQoc2VydmljZU5hbWUsIGdldE1vZGVsKCksIHNlcnZpY2UpOwotICAgICAgY29ubmVjdChmYXZVRERJU2VydmljZUVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhdmVkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSk7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9LRVkpOwotICAgIGlmIChpbnF1aXJ5QVBJID09IG51bGwgfHwgc2VydmljZUtleSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoZ2V0RmF2b3JpdGUoaW5xdWlyeUFQSSwgc2VydmljZUtleSkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKGludCBub2RlSUQsU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KQotICAgICAgcmV0dXJuIChyZW1vdmVGYXZvcml0ZSgoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkgJiYgZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGUoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoKEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCllbGVtZW50KS5nZXRTZXJ2aWNlKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVTZXJ2aWNlKHNlcnZpY2UpKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgZmF2VURESVNlcnZpY2VFbGVtZW50ID0gKEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYXZVRERJU2VydmljZUVsZW1lbnQuZ2V0U2VydmljZSgpOwotICAgICAgZmF2TWFpbkVsZW1lbnQucmVtb3ZlU2VydmljZShzZXJ2aWNlKTsKLSAgICB9Ci0gICAgZGlzY29ubmVjdFJlbChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUpOwotICAgIHJldHVybiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QWxsRmF2b3JpdGVzKCkgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUpOwotICB9Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBzZXJ2aWNlS2V5KSB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgc2VyRWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKGlucXVpcnlBUEkuZXF1YWxzKHNlckVsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpKSAmJgotICAgICAgICAgIHNlcnZpY2VLZXkuZXF1YWxzKHNlckVsZW1lbnQuZ2V0U2VydmljZUtleSgpKSkKLSAgICAgICAgcmV0dXJuIHNlckVsZW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwOWIyYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRWxlbWVudCB7Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSB1ZGRpU2VySW50XzsKLQotICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHVkZGlTZXJJbnRfID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKCk7Ci0gICAgdWRkaVNlckludF8uc2V0U2VydmljZShzZXJ2aWNlKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGdldFNlcnZpY2UoKSB7Ci0gICAgcmV0dXJuIHVkZGlTZXJJbnRfLmdldFNlcnZpY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICByZXR1cm4gdWRkaVNlckludF8uZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgIHJldHVybiB1ZGRpU2VySW50Xy5nZXRJbnF1aXJ5VVJMKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKSB7Ci0gICAgcmV0dXJuIHVkZGlTZXJJbnRfLmdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWI0OWRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudAotewotCi0gIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gZmF2TWFpbkVsZW1lbnQubG9hZFVERElTZXJ2aWNlSW50ZXJmYWNlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IHNlcnZpY2VzW2ldOwotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGZhdlVERElTZXJJbnRFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCgoc2VydmljZS5nZXRTZXJ2aWNlTmFtZXMoKSlbMF0uZ2V0VGV4dCgpLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVNlckludEVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHNlckludE5hbWUgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBzZXJJbnRLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsKLSAgICBpZiAoc2VySW50TmFtZSA9PSBudWxsIHx8IGlucXVpcnlBUEkgPT0gbnVsbCB8fCBzZXJJbnRLZXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZSA9IGdldEZhdm9yaXRlKGlucXVpcnlBUEksIHNlckludEtleSk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHJlbW92ZUZhdm9yaXRlKGUpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYXZNYWluRWxlbWVudC5hZGRVRERJU2VydmljZUludGVyZmFjZShzZXJJbnROYW1lLCBpbnF1aXJ5QVBJLCBzZXJJbnRLZXkpOwotICAgIGJvb2xlYW4gc2F2ZWQgPSBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgaWYgKHNhdmVkKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZmF2VURESVNlckludEVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KHNlckludE5hbWUsIGdldE1vZGVsKCksIHNlcnZpY2UpOwotICAgICAgY29ubmVjdChmYXZVRERJU2VySW50RWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhdmVkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBzZXJJbnRLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsKLSAgICBpZiAoaW5xdWlyeUFQSSA9PSBudWxsIHx8IHNlckludEtleSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoZ2V0RmF2b3JpdGUoaW5xdWlyeUFQSSwgc2VySW50S2V5KSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUZhdm9yaXRlQnlOb2RlSUQoaW50IG5vZGVJRCxTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpCi0gICAgICByZXR1cm4gKHJlbW92ZUZhdm9yaXRlKChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KSAmJiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiByZW1vdmVGYXZvcml0ZShGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZWxlbWVudCkgewotICAgIFNlcnZpY2Ugc2VydmljZSA9ICgoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWVsZW1lbnQpLmdldFNlcnZpY2UoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKGZhdk1haW5FbGVtZW50LnJlbW92ZVNlcnZpY2Uoc2VydmljZSkpIHsKLSAgICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUFsbEZhdm9yaXRlcyhTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBmYXZVRERJU2VySW50RWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gZmF2VURESVNlckludEVsZW1lbnQuZ2V0U2VydmljZSgpOwotICAgICAgZmF2TWFpbkVsZW1lbnQucmVtb3ZlU2VydmljZShzZXJ2aWNlKTsKLSAgICB9Ci0gICAgZGlzY29ubmVjdFJlbChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFKTsKLSAgICByZXR1cm4gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTk9ERSk7Ci0gIH0KLQotICBwcml2YXRlIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBnZXRGYXZvcml0ZShTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHNlckludEtleSkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNlckludEVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChpbnF1aXJ5QVBJLmVxdWFscyhzZXJJbnRFbGVtZW50LmdldElucXVpcnlVUkwoKSkgJiYKLSAgICAgICAgICAgc2VySW50S2V5LmVxdWFscyhzZXJJbnRFbGVtZW50LmdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKSkpCi0gICAgICAgIHJldHVybiBzZXJJbnRFbGVtZW50OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdhNGRlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTEyICAgMTQxNzk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlJlZ2lzdHJ5U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuVURESVJlZ2lzdHJ5U2VydmljZTsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRWxlbWVudAotewotICBwcml2YXRlIExpc3QgbmFtZXM7Ci0gIHByaXZhdGUgTGlzdCBkZXNjczsKLSAgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdExvZ2luOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0UGFzc3dvcmQ7Ci0gIHByaXZhdGUgU3RyaW5nIGlucXVpcnlVUkw7Ci0gIHByaXZhdGUgU3RyaW5nIHB1Ymxpc2hVUkw7Ci0gIHByaXZhdGUgU3RyaW5nIHNlY3VyZUlucXVpcnlVUkw7Ci0gIHByaXZhdGUgU3RyaW5nIHNlY3VyZVB1Ymxpc2hVUkw7Ci0gIHByaXZhdGUgVGF4b25vbXlbXSB0YXhvbm9taWVzOwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdExvZ2luKCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0TG9naW47Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0TG9naW4oU3RyaW5nIGRlZmF1bHRMb2dpbikKLSAgewotICAgIHRoaXMuZGVmYXVsdExvZ2luID0gZGVmYXVsdExvZ2luOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0UGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIGRlZmF1bHRQYXNzd29yZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmF1bHRQYXNzd29yZChTdHJpbmcgZGVmYXVsdFBhc3N3b3JkKQotICB7Ci0gICAgdGhpcy5kZWZhdWx0UGFzc3dvcmQgPSBkZWZhdWx0UGFzc3dvcmQ7Ci0gIH0KLQotICBwdWJsaWMgVGF4b25vbXlbXSBnZXRUYXhvbm9taWVzKCkKLSAgewotICAgIHJldHVybiB0YXhvbm9taWVzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VGF4b25vbWllcyhUYXhvbm9teVtdIHRheG9ub21pZXMpCi0gIHsKLSAgICB0aGlzLnRheG9ub21pZXMgPSB0YXhvbm9taWVzOwotICB9Ci0KLSAgcHVibGljIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldERlc2NzKCkKLSAgewotICAgIHJldHVybiBkZXNjczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlc2NzKExpc3QgZGVzY3MpCi0gIHsKLSAgICB0aGlzLmRlc2NzID0gZGVzY3M7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKQotICB7Ci0gICAgcmV0dXJuIGlucXVpcnlVUkw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgdGhpcy5pbnF1aXJ5VVJMID0gaW5xdWlyeVVSTDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldE5hbWVzKCkKLSAgewotICAgIHJldHVybiBuYW1lczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzKExpc3QgbmFtZXMpCi0gIHsKLSAgICB0aGlzLm5hbWVzID0gbmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKQotICB7Ci0gICAgcmV0dXJuIHB1Ymxpc2hVUkw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoVVJMKFN0cmluZyBwdWJsaXNoVVJMKQotICB7Ci0gICAgdGhpcy5wdWJsaXNoVVJMID0gcHVibGlzaFVSTDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VjdXJlSW5xdWlyeVVSTCgpCi0gIHsKLSAgICByZXR1cm4gc2VjdXJlSW5xdWlyeVVSTDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlY3VyZUlucXVpcnlVUkwoU3RyaW5nIHNlY3VyZUlucXVpcnlVUkwpCi0gIHsKLSAgICB0aGlzLnNlY3VyZUlucXVpcnlVUkwgPSBzZWN1cmVJbnF1aXJ5VVJMOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWN1cmVQdWJsaXNoVVJMKCkKLSAgewotICAgIHJldHVybiBzZWN1cmVQdWJsaXNoVVJMOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VjdXJlUHVibGlzaFVSTChTdHJpbmcgc2VjdXJlUHVibGlzaFVSTCkKLSAgewotICAgIHRoaXMuc2VjdXJlUHVibGlzaFVSTCA9IHNlY3VyZVB1Ymxpc2hVUkw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFZlcnNpb24oKQotICB7Ci0gICAgcmV0dXJuIHZlcnNpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRWZXJzaW9uKFN0cmluZyB2ZXJzaW9uKQotICB7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVmcmVzaE1ldGEoKXsKLQkgICAgCi0JICAgIFJlZ2lzdHJ5U2VydmljZSByZWdTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JICAgIElSZWdpc3RyeU1hbmFnZXIgcmVnTWFuYWdlciA9IHJlZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotCSAgICB0cnkKLQkgICAgewotCSAgICAgIAotCSAgICAJCi0JICAgICAgcmVnTWFuYWdlci5yZWZyZXNoTWFuYWdlcigpOwotCSAgICAgIFN0cmluZ1tdIHJlZ1VSSXMgPSByZWdNYW5hZ2VyLmdldFJlZ2lzdHJ5VVJJcygpOwotCSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVnVVJJcy5sZW5ndGg7IGkrKykKLQkgICAgICB7Ci0JICAgICAgICBSZWdpc3RyeSByZWcgPSByZWdNYW5hZ2VyLmxvYWRSZWdpc3RyeShyZWdVUklzW2ldKTsKLQkgICAgICAgIGlmIChyZWcgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIFVERElSZWdpc3RyeSB1ZGRpUmVnID0gKFVERElSZWdpc3RyeSlyZWc7Ci0JICAgICAgICAgIExpc3QgbmFtZXMgPSB1ZGRpUmVnLmdldE5hbWUoKTsKLQkgICAgICAgICAgCi0JICAgICAgICAgIGlmKHVkZGlSZWcuZ2V0RGlzY292ZXJ5VVJMKCkuZXF1YWxzKGdldElucXVpcnlVUkwoKSkpewotCSAgICAgICAgICAKLQkgICAgICAgIAkgIHNldE5hbWVzKG5hbWVzKTsKLQkgICAgICAgIAkgIHNldERlc2NzKHVkZGlSZWcuZ2V0RGVzY3JpcHRpb24oKSk7Ci0JICAgICAgICAJICBzZXRWZXJzaW9uKHVkZGlSZWcuZ2V0VmVyc2lvbigpKTsKLQkgICAgICAgIAkgIHNldERlZmF1bHRMb2dpbih1ZGRpUmVnLmdldERlZmF1bHRMb2dpbigpKTsKLQkgICAgICAgIAkgIHNldERlZmF1bHRQYXNzd29yZCh1ZGRpUmVnLmdldERlZmF1bHRQYXNzd29yZCgpKTsKLQkgICAgICAgIAkgIHNldElucXVpcnlVUkwodWRkaVJlZy5nZXREaXNjb3ZlcnlVUkwoKSk7Ci0JICAgICAgICAJICBzZXRQdWJsaXNoVVJMKHVkZGlSZWcuZ2V0UHVibGljYXRpb25VUkwoKSk7Ci0JICAgICAgICAJICBzZXRTZWN1cmVJbnF1aXJ5VVJMKHVkZGlSZWcuZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpKTsKLQkgICAgICAgIAkgIHNldFNlY3VyZVB1Ymxpc2hVUkwodWRkaVJlZy5nZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKSk7Ci0JICAgICAgICAJICBUYXhvbm9teVtdIHRheG9ub21pZXMgPSByZWdNYW5hZ2VyLmxvYWRUYXhvbm9taWVzKFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKS5nZXRUYXhvbm9teVVSSXModWRkaVJlZykpOwotCSAgICAgICAgCSAgc2V0VGF4b25vbWllcyh0YXhvbm9taWVzKTsKLQkgICAgICAgICAgfQotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkgICAgewotCSAgICAgIC8vIFRPRE86IEJldHRlciBlcnJvciByZXBvcnRpbmcKLQkgICAgICBjZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MWFkMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkwNiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuUmVnaXN0cnlTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5VRERJUmVnaXN0cnlTZXJ2aWNlOwotCi0vKioKLSAqIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIGEgV1NJTCBkb2N1bWVudAotICovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNGb2xkZXJFbGVtZW50Ci17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwsIG5vZGVNYW5hZ2VyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQpCi0gIHsKLSAgICByZWZyZXNoKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoKCl7Ci0JICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfTk9ERSk7Ci0JICAgIFJlZ2lzdHJ5U2VydmljZSByZWdTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JICAgIElSZWdpc3RyeU1hbmFnZXIgcmVnTWFuYWdlciA9IHJlZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHJlZ01hbmFnZXIucmVmcmVzaE1hbmFnZXIoKTsKLQkgICAgICBTdHJpbmdbXSByZWdVUklzID0gcmVnTWFuYWdlci5nZXRSZWdpc3RyeVVSSXMoKTsKLQkgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZ1VSSXMubGVuZ3RoOyBpKyspCi0JICAgICAgewotCSAgICAgICAgUmVnaXN0cnkgcmVnID0gcmVnTWFuYWdlci5sb2FkUmVnaXN0cnkocmVnVVJJc1tpXSk7Ci0JICAgICAgICBpZiAocmVnIGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5KQotCSAgICAgICAgewotCSAgICAgICAgICBVRERJUmVnaXN0cnkgdWRkaVJlZyA9IChVRERJUmVnaXN0cnkpcmVnOwotCSAgICAgICAgICBMaXN0IG5hbWVzID0gdWRkaVJlZy5nZXROYW1lKCk7Ci0JICAgICAgICAgIFN0cmluZyBkaXNwbGF5TmFtZSA9IG5hbWVzICE9IG51bGwgJiYgIW5hbWVzLmlzRW1wdHkoKSA/ICgoTmFtZSluYW1lcy5nZXQoMCkpLmdldFZhbHVlKCkgOiAiIjsKLQkgICAgICAgICAgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQgZmF2VXNlckRlZlVERElSZWdFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KGRpc3BsYXlOYW1lLCBnZXRNb2RlbCgpKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldE5hbWVzKG5hbWVzKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldERlc2NzKHVkZGlSZWcuZ2V0RGVzY3JpcHRpb24oKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRWZXJzaW9uKHVkZGlSZWcuZ2V0VmVyc2lvbigpKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldERlZmF1bHRMb2dpbih1ZGRpUmVnLmdldERlZmF1bHRMb2dpbigpKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldERlZmF1bHRQYXNzd29yZCh1ZGRpUmVnLmdldERlZmF1bHRQYXNzd29yZCgpKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldElucXVpcnlVUkwodWRkaVJlZy5nZXREaXNjb3ZlcnlVUkwoKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRQdWJsaXNoVVJMKHVkZGlSZWcuZ2V0UHVibGljYXRpb25VUkwoKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRTZWN1cmVJbnF1aXJ5VVJMKHVkZGlSZWcuZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpKTsKLQkgICAgICAgICAgZmF2VXNlckRlZlVERElSZWdFbGVtZW50LnNldFNlY3VyZVB1Ymxpc2hVUkwodWRkaVJlZy5nZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKSk7Ci0JICAgICAgICAgIFRheG9ub215W10gdGF4b25vbWllcyA9IHJlZ01hbmFnZXIubG9hZFRheG9ub21pZXMoVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpLmdldFRheG9ub215VVJJcyh1ZGRpUmVnKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRUYXhvbm9taWVzKHRheG9ub21pZXMpOwotCSAgICAgICAgICBjb25uZWN0KGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgIH0KLQkgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JICAgIHsKLQkgICAgICAvLyBUT0RPOiBCZXR0ZXIgZXJyb3IgcmVwb3J0aW5nCi0JICAgICAgY2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0gIAotICB9Ci0gIAotICAKLSAgcHVibGljIGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKQotICB7Ci0gICAgLy8gZG8gbm90aGluZwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlKQotICB7Ci0gICAgLy8gZG8gbm90aGluZwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELCBTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpCi0gIHsKLSAgICAvLyBkbyBub3RoaW5nCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KQotICB7Ci0gICAgLy8gZG8gbm90aGluZwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpCi0gIHsKLSAgICAgcmV0dXJuIGdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX05PREUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MmJiNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1dTREw7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNFbGVtZW50IHsKLQotICBwcml2YXRlIEZhdm9yaXRlc1dTREwgd3NkbF87Ci0KLSAgcHVibGljIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICB3c2RsXyA9IG5ldyBGYXZvcml0ZXNXU0RMKCk7Ci0gICAgd3NkbF8uc2V0U2VydmljZShzZXJ2aWNlKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGdldFNlcnZpY2UoKSB7Ci0gICAgcmV0dXJuIHdzZGxfLmdldFNlcnZpY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVybCgpIHsKLSAgICByZXR1cm4gd3NkbF8uZ2V0V3NkbFVybCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gZ2V0V3NkbFVybCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmODNmNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudAotewotCi0gIHB1YmxpYyBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gZmF2TWFpbkVsZW1lbnQubG9hZFdTRExTZXJ2aWNlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IHNlcnZpY2VzW2ldOwotICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGZhdldTRExTZXJ2aWNlRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQoKHNlcnZpY2UuZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldExvY2F0aW9uKCksIGdldE1vZGVsKCksIHNlcnZpY2UpOwotICAgICAgY29ubmVjdChmYXZXU0RMU2VydmljZUVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBhZGRGYXZvcml0ZShIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NETF9VUkwpOwotICAgIGlmICh3c2RsVVJMID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGUgPSBnZXRGYXZvcml0ZSh3c2RsVVJMKTsKLSAgICBpZiAoZSAhPSBudWxsKQotICAgICAgcmVtb3ZlRmF2b3JpdGUoZSk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIFNlcnZpY2Ugc2VydmljZSA9IGZhdk1haW5FbGVtZW50LmFkZFdTRExTZXJ2aWNlKHdzZGxVUkwpOwotICAgIGJvb2xlYW4gc2F2ZWQgPSBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgaWYgKHNhdmVkKSB7Ci0gICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZmF2V1NETFNlcnZpY2VFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCh3c2RsVVJMLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2V1NETFNlcnZpY2VFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICAgIHJldHVybiBzYXZlZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCk7Ci0gICAgaWYgKHdzZGxVUkwgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKGdldEZhdm9yaXRlKHdzZGxVUkwpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCkKLSAgICAgIHJldHVybiAocmVtb3ZlRmF2b3JpdGUoKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpICYmIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGUoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCllbGVtZW50KS5nZXRTZXJ2aWNlKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVTZXJ2aWNlKHNlcnZpY2UpKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZmF2V1NETFNlcnZpY2VFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYXZXU0RMU2VydmljZUVsZW1lbnQuZ2V0U2VydmljZSgpOwotICAgICAgZmF2TWFpbkVsZW1lbnQucmVtb3ZlU2VydmljZShzZXJ2aWNlKTsKLSAgICB9Ci0gICAgZGlzY29ubmVjdFJlbChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUpOwotICAgIHJldHVybiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QWxsRmF2b3JpdGVzKCkgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUpOwotICB9Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIHdzZGxVcmwpIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCB3c2RsRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHdzZGxVcmwuZXF1YWxzKHdzZGxFbGVtZW50LmdldFdzZGxVcmwoKSkpCi0gICAgICAgIHJldHVybiB3c2RsRWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0lMRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTSUxFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MGI2MDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTSUxFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzV1NJTDsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTSUxFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRWxlbWVudCB7Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNXU0lMIHdzaWxfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNXU0lMRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIExpbmsgbGluaykgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICB3c2lsXyA9IG5ldyBGYXZvcml0ZXNXU0lMKCk7Ci0gICAgd3NpbF8uc2V0TGluayhsaW5rKTsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGdldExpbmsoKSB7Ci0gICAgcmV0dXJuIHdzaWxfLmdldExpbmsoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NpbFVybCgpIHsKLSAgICByZXR1cm4gd3NpbF8uZ2V0V3NpbFVybCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gZ2V0V3NpbFVybCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0lMRm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWE0OTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0lMRm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IHsKLQotICBwdWJsaWMgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgTGlua1tdIGxpbmtzID0gZmF2TWFpbkVsZW1lbnQubG9hZFdTSUxzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykgewotICAgICAgTGluayBsaW5rID0gbGlua3NbaV07Ci0gICAgICBGYXZvcml0ZXNXU0lMRWxlbWVudCBmYXZXU0lMRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNXU0lMRWxlbWVudChsaW5rLmdldExvY2F0aW9uKCksIGdldE1vZGVsKCksIGxpbmspOwotICAgICAgY29ubmVjdChmYXZXU0lMRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBhZGRGYXZvcml0ZShIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NJTF9VUkwpOwotICAgIGlmICh3c2lsVVJMID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgZSA9IGdldEZhdm9yaXRlKHdzaWxVUkwpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgICByZW1vdmVGYXZvcml0ZShlKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgTGluayBsaW5rID0gZmF2TWFpbkVsZW1lbnQuYWRkV1NJTExpbmsod3NpbFVSTCk7Ci0gICAgYm9vbGVhbiBzYXZlZCA9IGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgICBpZiAoc2F2ZWQpIHsKLSAgICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IGZhdldTSUxFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1dTSUxFbGVtZW50KHdzaWxVUkwsIGdldE1vZGVsKCksIGxpbmspOwotICAgICAgY29ubmVjdChmYXZXU0lMRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhdmVkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHdzaWxVUkwgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTSUxfVVJMKTsKLSAgICBpZiAod3NpbFVSTCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoZ2V0RmF2b3JpdGUod3NpbFVSTCkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKGludCBub2RlSUQsU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzV1NJTEVsZW1lbnQpCi0gICAgICByZXR1cm4gKHJlbW92ZUZhdm9yaXRlKChGYXZvcml0ZXNXU0lMRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpICYmIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJlbW92ZUZhdm9yaXRlKEZhdm9yaXRlc1dTSUxFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBMaW5rIGxpbmsgPSBlbGVtZW50LmdldExpbmsoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKGZhdk1haW5FbGVtZW50LnJlbW92ZUxpbmsobGluaykpIHsKLSAgICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUFsbEZhdm9yaXRlcyhTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IGZhdldTSUxFbGVtZW50ID0gKEZhdm9yaXRlc1dTSUxFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIExpbmsgbGluayA9IGZhdldTSUxFbGVtZW50LmdldExpbmsoKTsKLSAgICAgIGZhdk1haW5FbGVtZW50LnJlbW92ZUxpbmsobGluayk7Ci0gICAgfQotICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfTk9ERSk7Ci0gICAgcmV0dXJuIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRBbGxGYXZvcml0ZXMoKSB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUpOwotICB9Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNXU0lMRWxlbWVudCBnZXRGYXZvcml0ZShTdHJpbmcgd3NpbFVybCkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NJTEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHdzaWxVcmwuZXF1YWxzKHdzaWxFbGVtZW50LmdldFdzaWxVcmwoKSkpCi0gICAgICAgIHJldHVybiB3c2lsRWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0FkZFRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YTE3OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEFkZFRvVURESVBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotCi0gICAgcHVibGljIEFkZFRvVURESVBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiLCAiZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0ODEyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0KLSAgICBwdWJsaWMgQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiLCAiZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTAwZmFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCB7Ci0KLSAgcHVibGljIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MTEwYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9GaWxlU3lzdGVtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AiKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjYWM4ZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvV29ya2JlbmNoVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaFRvb2wgZXh0ZW5kcyBJbXBvcnRUb1dvcmtiZW5jaFRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTliMzU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sIGV4dGVuZHMgTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNNYWluTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTWFpbk5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU2MDEwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNNYWluTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNNYWluRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzTWFpbk5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzTWFpbk5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgMSwgImltYWdlcy9yb290X21haW4uZ2lmIik7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIFVEREkgUmVnaXN0cnkgRm9sZGVyIE5vZGUKLSAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBmYXZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1VERElfUkVHSVNUUklFU19GT0xERVJfTk9ERSIpLCB0cmVlRWxlbWVudC5nZXRNb2RlbCgpLCBub2RlTWFuYWdlcik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmNvbm5lY3QoZmF2VURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlck5vZGUgZmF2VURESVJlZ2lzdHJ5Rm9sZGVyTm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlKGZhdlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgIGFkZENoaWxkKGZhdlVERElSZWdpc3RyeUZvbGRlck5vZGUpOwotICAgICAgICBmYXZVRERJUmVnaXN0cnlGb2xkZXJOb2RlLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgICAgICAgZmF2VURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5pbml0KChGYXZvcml0ZXNNYWluRWxlbWVudCl0cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIFVzZXIgZGVmaW5lZCBVRERJIFJlZ2lzdHJ5IEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50IGZhdlVzZXJEZWZVRERJRm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudChnZXRNZXNzYWdlKCJGQVZPUklURVNfVVNFUl9ERUZfVURESV9SRUdJU1RSSUVTX0ZPTERFUl9OT0RFIiksIHRyZWVFbGVtZW50LmdldE1vZGVsKCksIG5vZGVNYW5hZ2VyKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuY29ubmVjdChmYXZVc2VyRGVmVURESUZvbGRlckVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZSBmYXZVc2VyRGVmVURESUZvbGRlck5vZGUgPSBuZXcgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUoZmF2VXNlckRlZlVERElGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZVc2VyRGVmVURESUZvbGRlck5vZGUpOwotICAgICAgICBmYXZVc2VyRGVmVURESUZvbGRlck5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgICAgICBmYXZVc2VyRGVmVURESUZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBVRERJIEJ1c2luZXNzIEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQgZmF2VURESUJ1c2luZXNzRm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19VRERJX0JVU0lORVNTRVNfRk9MREVSX05PREUiKSwgdHJlZUVsZW1lbnQuZ2V0TW9kZWwoKSwgbm9kZU1hbmFnZXIpOwotICAgICAgICB0cmVlRWxlbWVudC5jb25uZWN0KGZhdlVERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJOb2RlIGZhdlVERElCdXNpbmVzc0ZvbGRlck5vZGUgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZShmYXZVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZVRERJQnVzaW5lc3NGb2xkZXJOb2RlKTsKLSAgICAgICAgZmF2VURESUJ1c2luZXNzRm9sZGVyTm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgICAgIGZhdlVERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBVRERJIFNlcnZpY2UgRm9sZGVyIE5vZGUKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50IGZhdlVERElTZXJ2aWNlRm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSIpLCB0cmVlRWxlbWVudC5nZXRNb2RlbCgpLCBub2RlTWFuYWdlcik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmNvbm5lY3QoZmF2VURESVNlcnZpY2VGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUgZmF2VURESVNlcnZpY2VGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyTm9kZShmYXZVRERJU2VydmljZUZvbGRlckVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgIGFkZENoaWxkKGZhdlVERElTZXJ2aWNlRm9sZGVyTm9kZSk7Ci0gICAgICAgIGZhdlVERElTZXJ2aWNlRm9sZGVyTm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgICAgIGZhdlVERElTZXJ2aWNlRm9sZGVyRWxlbWVudC5pbml0KChGYXZvcml0ZXNNYWluRWxlbWVudCl0cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIFVEREkgU2VydmljZSBJbnRlcmZhY2UgRm9sZGVyIE5vZGUKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50IGZhdlVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1VERElfU0VSVklDRV9JTlRFUkZBQ0VTX0ZPTERFUl9OT0RFIiksIHRyZWVFbGVtZW50LmdldE1vZGVsKCksIG5vZGVNYW5hZ2VyKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuY29ubmVjdChmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUgZmF2VURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZShmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgIGFkZENoaWxkKGZhdlVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZSk7Ci0gICAgICAgIGZhdlVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgICAgIGZhdlVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudC5pbml0KChGYXZvcml0ZXNNYWluRWxlbWVudCl0cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIFdTSUwgRm9sZGVyIE5vZGUKLSAgICAgICAgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQgZmF2V1NJTEZvbGRlckVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1dTSUxfRk9MREVSX05PREUiKSwgdHJlZUVsZW1lbnQuZ2V0TW9kZWwoKSwgbm9kZU1hbmFnZXIpOwotICAgICAgICB0cmVlRWxlbWVudC5jb25uZWN0KGZhdldTSUxGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9GT0xERVJfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgRmF2b3JpdGVzV1NJTEZvbGRlck5vZGUgZmF2V1NJTEZvbGRlck5vZGUgPSBuZXcgRmF2b3JpdGVzV1NJTEZvbGRlck5vZGUoZmF2V1NJTEZvbGRlckVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgIGFkZENoaWxkKGZhdldTSUxGb2xkZXJOb2RlKTsKLSAgICAgICAgZmF2V1NJTEZvbGRlck5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgICAgICBmYXZXU0lMRm9sZGVyRWxlbWVudC5pbml0KChGYXZvcml0ZXNNYWluRWxlbWVudCl0cmVlRWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIFdTREwgU2VydmljZSBGb2xkZXIgTm9kZQotICAgICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQgZmF2V1NETFNlcnZpY2VGb2xkZXJFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudChnZXRNZXNzYWdlKCJGQVZPUklURVNfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFIiksIHRyZWVFbGVtZW50LmdldE1vZGVsKCksIG5vZGVNYW5hZ2VyKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuY29ubmVjdChmYXZXU0RMU2VydmljZUZvbGRlckVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfRk9MREVSX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZSBmYXZXU0RMU2VydmljZUZvbGRlck5vZGUgPSBuZXcgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJOb2RlKGZhdldTRExTZXJ2aWNlRm9sZGVyRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgYWRkQ2hpbGQoZmF2V1NETFNlcnZpY2VGb2xkZXJOb2RlKTsKLSAgICAgICAgZmF2V1NETFNlcnZpY2VGb2xkZXJOb2RlLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgICAgICAgZmF2V1NETFNlcnZpY2VGb2xkZXJFbGVtZW50LmluaXQoKEZhdm9yaXRlc01haW5FbGVtZW50KXRyZWVFbGVtZW50KTsKLQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtc2cpIHsKLSAgICAgICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIHJldHVybiBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKG1zZyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNWQwYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvbGRlck5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZSBleHRlbmRzIEZvbGRlck5vZGUgewotCi0gICAgcHVibGljIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkgewotICAgICAgICByZXR1cm4gRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8saXNPcGVuXyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpIHsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLCBmYWxzZSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNOYXZpZ2F0b3JOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNOYXZpZ2F0b3JOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiODdkNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmF2b3JpdGVzTmF2aWdhdG9yTm9kZSBleHRlbmRzIE5vZGUgewotCi0gICAgcHVibGljIEZhdm9yaXRlc05hdmlnYXRvck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoLCBTdHJpbmcgaW1hZ2VQYXRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCBpbWFnZVBhdGgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKSB7Ci0gICAgICAgIHJldHVybiBGYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXyxpc09wZW5fKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCkgewotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sIGZhbHNlKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1BlcnNwZWN0aXZlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNQZXJzcGVjdGl2ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTQ5OGY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1BlcnNwZWN0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5QZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlsczsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGV4dGVuZHMgUGVyc3BlY3RpdmUKLXsKLSAgICBwcml2YXRlIEJhc2ljTW9kZWwgbW9kZWxfOwotICAgIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICAgIHByaXZhdGUgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIHByaXZhdGUgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIHByaXZhdGUgU3RyaW5nIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzUGVyc3BlY3RpdmUoQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoImZhdm9yaXRlcyIsY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHZvaWQgaW5pdFBlcnNwZWN0aXZlKFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICAgIHsKLSAgICAgICAgbW9kZWxfID0gbmV3IEJhc2ljTW9kZWwoIkZhdm9yaXRlc01vZGVsIik7Ci0gICAgICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdm9yaXRlc01haW5FbGVtZW50ID0gbmV3IEZhdm9yaXRlc01haW5FbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19NQUlOX05PREUiKSwgbW9kZWxfLCBjb250cm9sbGVyXyk7Ci0gICAgICAgIG1vZGVsXy5zZXRSb290RWxlbWVudChmYXZvcml0ZXNNYWluRWxlbWVudCk7Ci0gICAgICAgIG5vZGVNYW5hZ2VyXyA9IG5ldyBOb2RlTWFuYWdlcihjb250cm9sbGVyXyk7Ci0gICAgICAgIEZhdm9yaXRlc01haW5Ob2RlIGZhdk1haW5Ob2RlID0gbmV3IEZhdm9yaXRlc01haW5Ob2RlKGZhdm9yaXRlc01haW5FbGVtZW50LCBub2RlTWFuYWdlcl8pOwotICAgICAgICBub2RlTWFuYWdlcl8uc2V0Um9vdE5vZGUoZmF2TWFpbk5vZGUpOwotICAgICAgICAKLSAgICAgICAgLy8gU3RhcnRpbmcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgICAgIGlmICghRGlyVXRpbHMuaXNSVEwoKSkKLSAgICAgICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gIjMwJSwqIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSAiKiwzMCUiOwotICAgICAgICBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgICAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9ICI3NSUsKiI7Ci0gICAgICAgIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsgICAgICAgIAotICAgIH0KLQotICAgIHB1YmxpYyBOb2RlTWFuYWdlciBnZXROb2RlTWFuYWdlcigpIHsKLSAgICAgICAgcmV0dXJuIG5vZGVNYW5hZ2VyXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9GQVZPUklURVM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQYW5lc0ZpbGUoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9jZXNzRnJhbWVzZXRzRm9ybSgpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvUHJvY2Vzc0Zhdm9yaXRlc0ZyYW1lc2V0c0Zvcm0uanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRGcmFtZXNldHNGaWxlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc2ZyYW1lc2V0cy5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2TmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpIHsKLSAgICAgICAgcmV0dXJuICJmYXZQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2U3RhdHVzQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJmYXZQcm9wZXJ0aWVzQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gICAgewotICAgICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhTdHJpbmcgY29scykKLSAgICB7Ci0gICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gICAgewotICAgICAgcmV0dXJuIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gICAgewotICAgICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkKLSAgICB7Ci0gICAgICByZXR1cm4gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gICAgewotICAgICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gICAgewotICAgICAgcmV0dXJuIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhTdHJpbmcgcm93cykKLSAgICB7Ci0gICAgICBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gcm93czsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgICB7Ci0gICAgICByZXR1cm4gU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uLmdldEZvcm1BY3Rpb25MaW5rKHRhcmdldFBlcnNwZWN0aXZlSWQsZm9ySGlzdG9yeSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2YzZjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCkpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzU2V0RGVmYXVsdFZpZXdUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNTZXREZWZhdWx0Vmlld1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlYzRmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNTZXREZWZhdWx0Vmlld1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2V0RGVmYXVsdFZpZXdUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1NldERlZmF1bHRWaWV3VG9vbCBleHRlbmRzIFNldERlZmF1bHRWaWV3VG9vbCB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1NldERlZmF1bHRWaWV3VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQsIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQsIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxULCBmYWxzZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NjE1MzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjJmY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc05vZGUgZmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3NOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChmYXZvcml0ZXNVRERJQnVzaW5lc3NOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfQlVTSU5FU1MiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2M4YTJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc05vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElCdXNpbmVzc05vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgsICJmYXZvcml0ZXMvaW1hZ2VzL3VkZGlfYnVzaW5lc3Nfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfQlVTSU5FU1NfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IEFkZFRvVURESVBlcnNwZWN0aXZlVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fVURESV9QRVJTUEVDVElWRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNmNmNkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2MGExMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbC5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUVsZW1lbnQgcmVnRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbWFnZVBhdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBjYXRlZ29yaWVzRGlyZWN0b3J5ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGNhdGVnb3JpZXNEaXJlY3Rvcnksbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpLHJlZ0VsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBjYXRlZ29yeURpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShjYXRlZ29yaWVzRGlyZWN0b3J5LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBjYXRlZ29yeUZpbGVzID0gY2F0ZWdvcnlEaXJlY3RvcnlGaWxlLmxpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5RmlsZXMgIT0gbnVsbCAmJiBjYXRlZ29yeUZpbGVzLmxlbmd0aCA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9jYXRfbm9kZS5naWYiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9ub2RlLmdpZiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeU5vZGUgZmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlKHJlZ0VsZW1lbnQsIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEsIGltYWdlUGF0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKGZhdm9yaXRlc1VERElSZWdpc3RyeU5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBMaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfVURESV9SRUdJU1RSWSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZjI4MTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCBpbWFnZVBhdGgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9SRUdJU1RSWV9ERVRBSUxTIikpOwotICAgICAgICBuZXcgQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0ZjRlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMxNGQyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbC5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZU5vZGUgZmF2b3JpdGVzVURESVNlcnZpY2VOb2RlID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQoZmF2b3JpdGVzVURESVNlcnZpY2VOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IExpc3RGYXZvcml0ZVVERElTZXJ2aWNlVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiOTJlN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVNlcnZpY2VJbnREZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZjY2NzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZSBmYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZU5vZGUgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChmYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZU5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBMaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODZjY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZU5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgImZhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX2ludGVyZmFjZV9ub2RlLmdpZiIpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBBZGRUb1VERElQZXJzcGVjdGl2ZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZU5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVhYjc3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZU5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCAiZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3NlcnZpY2Vfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9TRVJWSUNFX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBBZGRUb1VERElQZXJzcGVjdGl2ZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5NTcyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNQYWdlLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmZjMGVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgdHJlZUVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9OT0RFKSkKLSAgICAgICAgewotICAgICAgICAgIFRyZWVFbGVtZW50IHJlZ0VsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIFN0cmluZyBpbWFnZVBhdGggPSAiZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3JlZ2lzdHJ5X25vZGUuZ2lmIjsKLSAgICAgICAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZSBmYXZVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZSA9IG5ldyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZShyZWdFbGVtZW50LCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxLCBpbWFnZVBhdGgpOwotICAgICAgICAgIGFkZENoaWxkKGZhdlVzZXJEZWZVRERJUmVnaXN0cnlOb2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfTk9ERSkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX05PREUpKQotICAgICAgICB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBMaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VTRVJfREVGX1VERElfUkVHSVNUUlkiKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCkgewotICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXywgZmFsc2UpOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNjE3NTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCwgU3RyaW5nIGltYWdlUGF0aCkKLSAgewotICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCBpbWFnZVBhdGgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVUQUlMUyIpKTsKLSAgICBuZXcgQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDBlNTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0RMRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzV1NETERldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTRExEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZjQ4ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlIGZhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZSA9IG5ldyBGYXZvcml0ZXNXU0RMU2VydmljZU5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKGZhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBMaXN0RmF2b3JpdGVXU0RMU2VydmljZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9XU0RMX1NFUlZJQ0UiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMU2VydmljZU5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM0MTZhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMU2VydmljZU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNXU0RMU2VydmljZU5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCAiZmF2b3JpdGVzL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzV1NETERldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19XU0RMX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaFRvb2wodG9vbE1hbmFnZXJfLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKSk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sKHRvb2xNYW5hZ2VyXywgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh0b29sTWFuYWdlcl8sIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQiKSk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzAyYjgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0lMRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzV1NJTERldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTSUxEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGY0NjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0lMRm9sZGVyTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNXU0lMRm9sZGVyTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgpOwotICAgICAgICB0cmVlRWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNXU0lMTm9kZSBmYXZvcml0ZXNXU0lMTm9kZSA9IG5ldyBGYXZvcml0ZXNXU0lMTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQoZmF2b3JpdGVzV1NJTE5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBMaXN0RmF2b3JpdGVXU0lMVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1dTSUwiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NJTE5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZjJkMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NJTE5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTSUxOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1dTSUxOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgImZhdm9yaXRlcy9pbWFnZXMvd3NpbF9ub2RlLmdpZiIpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBGYXZvcml0ZXNXU0lMRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1dTSUxfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1dTSUxfVE9fV1NJTF9QRVJTUEVDVElWRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMWE4ZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBMaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X2J1c2luZXNzX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVmlldy5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5VG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGNkMTUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5VG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9lbmFibGVkLmdpZiIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVZpZXcuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYWYyNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIExpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VWaWV3LmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjQ5YzBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExpc3RGYXZvcml0ZVVERElTZXJ2aWNlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJU2VydmljZVZpZXcuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWI4Yzk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHB1YmxpYyBMaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlWaWV3LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjIwODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIExpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3dzZGxfZW5hYmxlZC5naWYiLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVmlldy5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlV1NJTFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTSUxUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ODMyNWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlV1NJTFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZhdm9yaXRlV1NJTFRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExpc3RGYXZvcml0ZVdTSUxUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYiLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTSUxWaWV3LmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9SZW1vdmVGYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9SZW1vdmVGYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NjcyZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvUmVtb3ZlRmF2b3JpdGVzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5SZW1vdmVGYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgUmVtb3ZlRmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotCi0gICAgcHVibGljIFJlbW92ZUZhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQWN0aW9uVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9BY3Rpb25Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzM2VkZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9BY3Rpb25Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFjdGlvblRvb2wgZXh0ZW5kcyBUb29sCi17Ci0gIHB1YmxpYyBBY3Rpb25Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2VMaW5rLFN0cmluZyBoaWdobGlnaHRlZEltYWdlTGluayxTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsZW5hYmxlZEltYWdlTGluayxoaWdobGlnaHRlZEltYWdlTGluayxhbHQsVG9vbFR5cGVzLkFDVElPTik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9BZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYzZDQ0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0FkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sIGV4dGVuZHMgQWN0aW9uVG9vbAotewotICBwdWJsaWMgQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwiaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIiwiaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9CcmVhZENydW1iLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0JyZWFkQ3J1bWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ5N2MyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0JyZWFkQ3J1bWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotLy8gQSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBhIGJyb3dlciBicmVhZGNydW1iLiBFYWNoIGJyZWFkY3J1bWIgZW5jYXBzdWxhdGVzCi0vLyBhIG5hdmlnYXRlZCBVUkwuCi1wdWJsaWMgY2xhc3MgQnJlYWRDcnVtYgotewotICBwcml2YXRlIGludCBwZXJzcGVjdGl2ZUlkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgdXJsXzsKLQotICBwdWJsaWMgQnJlYWRDcnVtYihpbnQgcGVyc3BlY3RpdmVJZCxTdHJpbmcgdXJsKQotICB7Ci0gICAgcGVyc3BlY3RpdmVJZF8gPSBwZXJzcGVjdGl2ZUlkOwotICAgIHVybF8gPSB1cmw7Ci0gIH0KLQotICAvKioKLSAgKiBHZXQgdGhlIFVSTCBhc3NvY2lhdGVkIHdpdGggdGhpcyBicmVhZGNydW1iLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBVUkwuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VVJMKCkKLSAgewotICAgIHJldHVybiB1cmxfOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBJRCBvZiB0aGUgcGVyc3BlY3RpdmUgd2hlcmUgdGhpcyBicmVhZGNydW1iIGJlbG9uZ3MuCi0gICogQHJldHVybiBpbnQgVGhlIHBlcnNwZWN0aXZlSUQgYXMgZGVmaW5lZCBpbiBBY3Rpb25JbnB1dHMuCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gcGVyc3BlY3RpdmVJZF87Ci0gIH0KLQotICAvKioKLSAgKiBUZXN0IGVxdWFsaXR5IGJldHdlZW4gdGhpcyBicmVhZGNydW1iIGFuZCBhbm90aGVyLiBCb3RoIHRoZSBVUkxzIGFuZCBwZXJzcGVjdGl2ZQotICAqIElEcyBtdXN0IGJlIGVxdWFsIGZvciB0d28gYnJlYWRjcnVtYnMgdG8gYmUgZXF1YWwuCi0gICogQHBhcmFtIEJyZWFkQ3J1bWIgQSBicmVhZGNydW1iLgotICAqIEByZXR1cm4gYm9vbGVhbiBUaGUgcmVzdWx0IG9mIHRoZSBlcXVhbGl0eSB0ZXN0LgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoQnJlYWRDcnVtYiBiKQotICB7Ci0gICAgcmV0dXJuICgodXJsXy5lcXVhbHMoYi5nZXRVUkwoKSkpICYmIChwZXJzcGVjdGl2ZUlkXyA9PSBiLmdldFBlcnNwZWN0aXZlSWQoKSkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0NvbnRyb2xsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQ29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTk3ODdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQ29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5BY3Rpb25FbmdpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIENvbnRyb2xsZXIgZXh0ZW5kcyBNZXNzYWdlUHJvdmlkZXIKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgc2Vzc2lvbklkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc3RhdGVMb2NhdGlvbl87Ci0gIHByaXZhdGUgU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbl87Ci0gIHByaXZhdGUgU3RyaW5nIGNvbnRleHRQYXRoXzsKLSAgcHJpdmF0ZSBpbnQgaGlzdG9yeURpcmVjdGlvbl87Ci0gIHByaXZhdGUgSGlzdG9yeSBoaXN0b3J5XzsKLSAgcHJpdmF0ZSBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlXzsKLSAgcHJpdmF0ZSBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlXzsKLSAgcHJpdmF0ZSBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlXzsKLSAgcHJpdmF0ZSBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZV87Ci0gIHByaXZhdGUgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzUGVyc3BlY3RpdmVDb250ZW50QmxhbmtfOwotICBwcml2YXRlIEFjdGlvbkVuZ2luZSBhY3Rpb25FbmdpbmU7Ci0gIAotICAvLyBXU0RMIEJyb3dzZXIKLSAgcHJpdmF0ZSBpbnQgd3NkbFR5cGVfOwotCi0gIHB1YmxpYyBDb250cm9sbGVyKCkKLSAgewotICAgIHN1cGVyKCJleHBsb3JlciIpOwotICAgIGNvbnRleHRQYXRoXyA9IG51bGw7Ci0Jc3RhdGVMb2NhdGlvbl8gPSBudWxsOwotICAgIGhpc3RvcnlfID0gbmV3IEhpc3RvcnkoKTsKLSAgICB1ZGRpUGVyc3BlY3RpdmVfID0gbmV3IFVERElQZXJzcGVjdGl2ZSh0aGlzKTsKLSAgICB3c2lsUGVyc3BlY3RpdmVfID0gbmV3IFdTSUxQZXJzcGVjdGl2ZSh0aGlzKTsKLSAgICB3c2RsUGVyc3BlY3RpdmVfID0gbmV3IFdTRExQZXJzcGVjdGl2ZSh0aGlzKTsKLSAgICBmYXZvcml0ZXNQZXJzcGVjdGl2ZV8gPSBuZXcgRmF2b3JpdGVzUGVyc3BlY3RpdmUodGhpcyk7Ci0gICAgLy8gU2V0IHRoZSBkZWZhdWx0IHBlcnNwZWN0aXZlIHRvIFVEREkuCi0gICAgY3VycmVudFBlcnNwZWN0aXZlXyA9IHVkZGlQZXJzcGVjdGl2ZV87Ci0gICAgaGlzdG9yeURpcmVjdGlvbl8gPSBBY3Rpb25JbnB1dHMuSlVNUF9CQUNLOwotICAgIHdzZGxUeXBlXyA9IEFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0U7Ci0gICAgaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFua18gPSB0cnVlOwotICAgIGFjdGlvbkVuZ2luZSA9IG5ldyBBY3Rpb25FbmdpbmUodGhpcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN0YXRlTG9jYXRpb24oU3RyaW5nIHN0YXRlTG9jYXRpb24pCi0gIHsKLQlzdGF0ZUxvY2F0aW9uXyA9IHN0YXRlTG9jYXRpb247Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbikKLSAgewotCSAgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uXyA9IGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbjsKLSAgfQotICAKLSAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgQ29udHJvbGxlciBiZWFuIGlzIGluc3RhbnRpYXRlZC4KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHNldENvbnRleHRQYXRoKFN0cmluZyBjb250ZXh0UGF0aCkKLSAgewotICAgIGlmIChjb250ZXh0UGF0aF8gPT0gbnVsbCkKLSAgICAgIGNvbnRleHRQYXRoXyA9IGNvbnRleHRQYXRoOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBhdGhXaXRoQ29udGV4dChTdHJpbmcgcmVsYXRpdmVQYXRoKQotICB7Ci0gICAgaWYgKHJlbGF0aXZlUGF0aCA9PSBudWxsKQotICAgICAgcmV0dXJuIHJlbGF0aXZlUGF0aDsKLSAgICBTdHJpbmdCdWZmZXIgcGF0aCA9IG5ldyBTdHJpbmdCdWZmZXIocmVsYXRpdmVQYXRoKTsKLSAgICBpZiAoY29udGV4dFBhdGhfICE9IG51bGwpCi0gICAgICBwYXRoLmluc2VydCgwLCcvJykuaW5zZXJ0KDAsY29udGV4dFBhdGhfKTsKLSAgICByZXR1cm4gcGF0aC50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTZXNzaW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlc3Npb25JZF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q29udGV4dFBhdGgoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHRQYXRoXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpIHsKLQlyZXR1cm4gc3RhdGVMb2NhdGlvbl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uICgpIHsKLQlyZXR1cm4gZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdChTdHJpbmcgc2Vzc2lvbklkLFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uLFN0cmluZyBjb250ZXh0UGF0aCkKLSAgewotICAgIHNlc3Npb25JZF8gPSBzZXNzaW9uSWQ7Ci0gICAgc2V0Q29udGV4dFBhdGgoY29udGV4dFBhdGgpOwotICAgIHVkZGlQZXJzcGVjdGl2ZV8uaW5pdFBlcnNwZWN0aXZlKGFwcGxpY2F0aW9uKTsKLSAgICB3c2lsUGVyc3BlY3RpdmVfLmluaXRQZXJzcGVjdGl2ZShhcHBsaWNhdGlvbik7Ci0gICAgd3NkbFBlcnNwZWN0aXZlXy5pbml0UGVyc3BlY3RpdmUoYXBwbGljYXRpb24pOwotICAgIGZhdm9yaXRlc1BlcnNwZWN0aXZlXy5pbml0UGVyc3BlY3RpdmUoYXBwbGljYXRpb24pOwotICB9Ci0KLSAgLy8gU2V0dGVyIGZvciB0aGUgY3VycmVudCBwZXJzcGVjdGl2ZS4KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q3VycmVudFBlcnNwZWN0aXZlKGludCBwZXJzcGVjdGl2ZSkKLSAgewotICAgIHN3aXRjaCAocGVyc3BlY3RpdmUpCi0gICAgewotICAgICAgY2FzZSBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESToKLSAgICAgICAgY3VycmVudFBlcnNwZWN0aXZlXyA9IHVkZGlQZXJzcGVjdGl2ZV87Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTDoKLSAgICAgICAgY3VycmVudFBlcnNwZWN0aXZlXyA9IHdzaWxQZXJzcGVjdGl2ZV87Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETDoKLSAgICAgICAgY3VycmVudFBlcnNwZWN0aXZlXyA9IHdzZGxQZXJzcGVjdGl2ZV87Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfRkFWT1JJVEVTOgotICAgICAgICBjdXJyZW50UGVyc3BlY3RpdmVfID0gZmF2b3JpdGVzUGVyc3BlY3RpdmVfOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvLyBHZXR0ZXIgZm9yIHRoZSBjdXJyZW50IHBlcnNwZWN0aXZlLgotICBwdWJsaWMgZmluYWwgUGVyc3BlY3RpdmUgZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkKLSAgewotICAgIHJldHVybiBjdXJyZW50UGVyc3BlY3RpdmVfOwotICB9Ci0KLSAgLy8gR2V0dGVyIGZvciB0aGUgVURESSBwZXJzcGVjdGl2ZS4KLSAgcHVibGljIGZpbmFsIFVERElQZXJzcGVjdGl2ZSBnZXRVRERJUGVyc3BlY3RpdmUoKQotICB7Ci0gICAgcmV0dXJuIHVkZGlQZXJzcGVjdGl2ZV87Ci0gIH0KLQotICAvLyBHZXR0ZXIgZm9yIHRoZSBXU0lMIHBlcnNwZWN0aXZlLgotICBwdWJsaWMgZmluYWwgV1NJTFBlcnNwZWN0aXZlIGdldFdTSUxQZXJzcGVjdGl2ZSgpCi0gIHsKLSAgICByZXR1cm4gd3NpbFBlcnNwZWN0aXZlXzsKLSAgfQotICAKLSAgLy8gR2V0dGVyIGZvciB0aGUgV1NETCBwZXJzcGVjdGl2ZS4KLSAgcHVibGljIGZpbmFsIFdTRExQZXJzcGVjdGl2ZSBnZXRXU0RMUGVyc3BlY3RpdmUoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxQZXJzcGVjdGl2ZV87Ci0gIH0KLQotICAvLyBHZXR0ZXIgZm9yIHRoZSBGYXZvcml0ZXMgcGVyc3BlY3RpdmUuCi0gIHB1YmxpYyBmaW5hbCBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBnZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpIHsKLSAgICByZXR1cm4gZmF2b3JpdGVzUGVyc3BlY3RpdmVfOwotICB9Ci0gIAotICAvLyBHZXR0ZXIgZm9yIHRoZSBhY3Rpb24gZW5naW5lCi0gIHB1YmxpYyBmaW5hbCBBY3Rpb25FbmdpbmUgZ2V0QWN0aW9uRW5naW5lKCkgewotICAgIHJldHVybiBhY3Rpb25FbmdpbmU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBhZGRUb0hpc3RvcnkoaW50IHBlcnNwZWN0aXZlSWQsU3RyaW5nIHVybCkKLSAgewotICAgIGlmICh1cmwgIT0gbnVsbCkKLSAgICAgIHJldHVybiBoaXN0b3J5Xy5hZGRCcmVhZENydW1iKG5ldyBCcmVhZENydW1iKHBlcnNwZWN0aXZlSWQsdXJsKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gV3JhcHBlciBmb3IgbW92aW5nIGZvcndhcmQgaW4gdGhlIGhpc3RvcnkgbGlzdCBhbmQgb2J0YWluaW5nIHRoZSBicmVhZGNydW1iLgotICBwdWJsaWMgZmluYWwgQnJlYWRDcnVtYiBmb3J3YXJkKCkKLSAgewotICAgIGhpc3RvcnlEaXJlY3Rpb25fID0gQWN0aW9uSW5wdXRzLkpVTVBfRk9SV0FSRDsKLSAgICByZXR1cm4gaGlzdG9yeV8uZm9yd2FyZCgpOwotICB9Ci0KLSAgLy8gV3JhcHBlciBmb3IgbW92aW5nIGJhY2sgaW4gdGhlIGhpc3RvcnkgbGlzdCBhbmQgb2J0YWluaW5nIHRoZSBicmVhZGNydW1iLgotICBwdWJsaWMgZmluYWwgQnJlYWRDcnVtYiBiYWNrKCkKLSAgewotICAgIGhpc3RvcnlEaXJlY3Rpb25fID0gQWN0aW9uSW5wdXRzLkpVTVBfQkFDSzsKLSAgICByZXR1cm4gaGlzdG9yeV8uYmFjaygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRIaXN0b3J5RGlyZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBoaXN0b3J5RGlyZWN0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByb2Nlc3NTdGFsZUJyZWFkQ3J1bWIoKQotICB7Ci0gICAgaGlzdG9yeV8ucmVtb3ZlQ3VycmVudEJyZWFkQ3J1bWIoKTsKLSAgfQotICAKLSAgLy8gV1NETCBCcm93c2VyCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFdTRExUeXBlKGludCB3c2RsVHlwZSkKLSAgewotICAgIHdzZGxUeXBlXyA9IHdzZGxUeXBlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRXU0RMVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gd3NkbFR5cGVfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rKCkKLSAgewotICAgIHJldHVybiBpc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgZW5hYmxlUGVyc3BlY3RpdmVDb250ZW50QmxhbmsoYm9vbGVhbiBpc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rKQotICB7Ci0gICAgaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFua18gPSBpc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBkdW1wSGlzdG9yeSgpCi0gIHsKLSAgICBoaXN0b3J5Xy5kdW1wKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYTM5MTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRm9sZGVyTm9kZSBleHRlbmRzIE5vZGUKLXsKLSAgcHVibGljIEZvbGRlck5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsImltYWdlcy9mb2xkZXJfY2xvc2VkLmdpZiIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRPcGVuSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiAiaW1hZ2VzL2ZvbGRlcl9vcGVuLmdpZiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQyZjQ3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZvcm1Ub29sIGV4dGVuZHMgVG9vbCBpbXBsZW1lbnRzIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBwcm90ZWN0ZWQgRm9ybVRvb2xQcm9wZXJ0aWVzIGZvcm1Ub29sUHJvcGVydGllc187Ci0KLSAgcHVibGljIEZvcm1Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2VMaW5rLFN0cmluZyBoaWdobGlnaHRlZEltYWdlTGluayxTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsZW5hYmxlZEltYWdlTGluayxoaWdobGlnaHRlZEltYWdlTGluayxhbHQsVG9vbFR5cGVzLkZPUk0pOwotICAgIGZvcm1Ub29sUHJvcGVydGllc18gPSBuZXcgRm9ybVRvb2xQcm9wZXJ0aWVzKCk7Ci0gICAgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgT2JqZWN0IGdldFByb3BlcnR5KE9iamVjdCBrZXkpCi0gIHsKLSAgICByZXR1cm4gZm9ybVRvb2xQcm9wZXJ0aWVzXy5nZXRQcm9wZXJ0eShrZXkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UHJvcGVydHkoT2JqZWN0IGtleSxPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLnNldFByb3BlcnR5KGtleSx2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVQcm9wZXJ0eShPYmplY3Qga2V5KQotICB7Ci0gICAgZm9ybVRvb2xQcm9wZXJ0aWVzXy5yZW1vdmVQcm9wZXJ0eShrZXkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18uY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCB1cGRhdGVQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBuZXdQcm9wZXJ0eVRhYmxlKQotICB7Ci0gICAgZm9ybVRvb2xQcm9wZXJ0aWVzXy51cGRhdGVQcm9wZXJ0eVRhYmxlKG5ld1Byb3BlcnR5VGFibGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UHJvcGVydHlUYWJsZShIYXNodGFibGUgbmV3UHJvcGVydHlUYWJsZSkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18uc2V0UHJvcGVydHlUYWJsZShuZXdQcm9wZXJ0eVRhYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGZsYWdFcnJvcihPYmplY3QgaW5wdXRLZXkpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLmZsYWdFcnJvcihpbnB1dEtleSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LGludCByb3dOdW1iZXIpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLmZsYWdSb3dFcnJvcihpbnB1dEtleSxyb3dOdW1iZXIpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LE9iamVjdCByb3dJZCkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18uZmxhZ1Jvd0Vycm9yKGlucHV0S2V5LHJvd0lkKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyRXJyb3JzKCkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18uY2xlYXJFcnJvcnMoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzSW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXkpCi0gIHsKLSAgICByZXR1cm4gZm9ybVRvb2xQcm9wZXJ0aWVzXy5pc0lucHV0VmFsaWQoaW5wdXRLZXkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNSb3dJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSxpbnQgcm93TnVtYmVyKQotICB7Ci0gICAgcmV0dXJuIGZvcm1Ub29sUHJvcGVydGllc18uaXNSb3dJbnB1dFZhbGlkKGlucHV0S2V5LFN0cmluZy52YWx1ZU9mKHJvd051bWJlcikpOwotICB9Ci0gIAotICAvLyBUaGUgcm93IG51bWJlciBtYXkgYWxzbyBiZSByZXByZXNlbnRlZCBieSBhIHVuaXF1ZSBvYmplY3QgKGUuZy4gVVVJRCkKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNSb3dJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSxPYmplY3Qgcm93SWQpCi0gIHsKLSAgICByZXR1cm4gZm9ybVRvb2xQcm9wZXJ0aWVzXy5pc1Jvd0lucHV0VmFsaWQoaW5wdXRLZXkscm93SWQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sUHJvcGVydGllcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbFByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBjZjc5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sUHJvcGVydGllcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1wdWJsaWMgY2xhc3MgRm9ybVRvb2xQcm9wZXJ0aWVzIGltcGxlbWVudHMgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHByb3BlcnR5VGFibGVfOwotICBwcml2YXRlIEhhc2h0YWJsZSBlcnJhbnRWYWx1ZXNfOwotCi0gIHB1YmxpYyBGb3JtVG9vbFByb3BlcnRpZXMoKQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZXJyYW50VmFsdWVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBPYmplY3QgZ2V0UHJvcGVydHkoT2JqZWN0IGtleSkKLSAgewotICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlXy5nZXQoa2V5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFByb3BlcnR5KE9iamVjdCBrZXksT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KGtleSx2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVQcm9wZXJ0eShPYmplY3Qga2V5KQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKGtleSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjbGVhclByb3BlcnR5VGFibGUoKQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8uY2xlYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHVwZGF0ZVByb3BlcnR5VGFibGUoSGFzaHRhYmxlIG5ld1Byb3BlcnR5VGFibGUpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gbmV3UHJvcGVydHlUYWJsZS5rZXlzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KGtleSxuZXdQcm9wZXJ0eVRhYmxlLmdldChrZXkpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBuZXdQcm9wZXJ0eVRhYmxlKQotICB7Ci0gICAgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgdXBkYXRlUHJvcGVydHlUYWJsZShuZXdQcm9wZXJ0eVRhYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGZsYWdFcnJvcihPYmplY3QgaW5wdXRLZXkpCi0gIHsKLSAgICBpZiAoaXNJbnB1dFZhbGlkKGlucHV0S2V5KSkKLSAgICAgIGVycmFudFZhbHVlc18ucHV0KGlucHV0S2V5LEJvb2xlYW4uVFJVRSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LGludCByb3dOdW1iZXIpCi0gIHsKLSAgICBmbGFnUm93RXJyb3IoaW5wdXRLZXksU3RyaW5nLnZhbHVlT2Yocm93TnVtYmVyKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGZsYWdSb3dFcnJvcihPYmplY3QgaW5wdXRLZXksT2JqZWN0IHJvd0lkKQotICB7Ci0gICAgT2JqZWN0IGVycm9yT2JqZWN0ID0gZXJyYW50VmFsdWVzXy5nZXQoaW5wdXRLZXkpOwotICAgIEhhc2h0YWJsZSByb3dIYXNoOwotICAgIGlmIChlcnJvck9iamVjdCBpbnN0YW5jZW9mIEhhc2h0YWJsZSkKLSAgICAgIHJvd0hhc2ggPSAoSGFzaHRhYmxlKWVycm9yT2JqZWN0OwotICAgIGVsc2UKLSAgICAgIHJvd0hhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgcm93SGFzaC5wdXQocm93SWQsQm9vbGVhbi5UUlVFKTsKLSAgICBlcnJhbnRWYWx1ZXNfLnB1dChpbnB1dEtleSxyb3dIYXNoKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJFcnJvcnMoKQotICB7Ci0gICAgZXJyYW50VmFsdWVzXy5jbGVhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSkKLSAgewotICAgIHJldHVybiAoZXJyYW50VmFsdWVzXy5nZXQoaW5wdXRLZXkpID09IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNSb3dJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSxpbnQgcm93TnVtYmVyKQotICB7Ci0gICAgcmV0dXJuIGlzUm93SW5wdXRWYWxpZChpbnB1dEtleSxTdHJpbmcudmFsdWVPZihyb3dOdW1iZXIpKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNSb3dJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSxPYmplY3Qgcm93SWQpCi0gIHsKLSAgICBIYXNodGFibGUgcm93SGFzaCA9IChIYXNodGFibGUpZXJyYW50VmFsdWVzXy5nZXQoaW5wdXRLZXkpOwotICAgIGlmIChyb3dIYXNoID09IG51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gKHJvd0hhc2guZ2V0KHJvd0lkKSA9PSBudWxsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMDc0NzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIC8vIEdldHRlciBhbmQgU2V0dGVyIGZvciBhIHByb3BlcnR5LgotICBwdWJsaWMgYWJzdHJhY3QgT2JqZWN0IGdldFByb3BlcnR5KE9iamVjdCBrZXkpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQcm9wZXJ0eShPYmplY3Qga2V5LE9iamVjdCB2YWx1ZSk7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlbW92ZVByb3BlcnR5KE9iamVjdCBrZXkpOwotCi0gIC8vIFByb3BlcnR5IHRhYmxlIG9wZXJhdG9ycy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHVwZGF0ZVByb3BlcnR5VGFibGUoSGFzaHRhYmxlIHByb3BlcnR5VGFibGUpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlKTsKLQotICAvLyBFcnJvciBoYW5kbGluZy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgZmxhZ0Vycm9yKE9iamVjdCBpbnB1dEtleSk7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZsYWdSb3dFcnJvcihPYmplY3QgaW5wdXRLZXksaW50IHJvd051bWJlcik7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZsYWdSb3dFcnJvcihPYmplY3QgaW5wdXRLZXksT2JqZWN0IHJvd0lkKTsKLSAgcHVibGljIGFic3RyYWN0IHZvaWQgY2xlYXJFcnJvcnMoKTsKLSAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNJbnB1dFZhbGlkKE9iamVjdCBpbnB1dEtleSk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksaW50IHJvd051bWJlcik7Ci0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksT2JqZWN0IHJvd0lkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSGlzdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9IaXN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MDJkNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9IaXN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vLyBBIGNsYXNzIHJlcHJlc2VudGluZyBhIFZlY3RvciBvZiBicmVhZGNydW1icy4gQSBwb3NpdGlvbiBpbmRleCBpcyB1c2VkCi0vLyB0byBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSBkYXRhIHN0cnVjdHVyZS4KLXB1YmxpYyBjbGFzcyBIaXN0b3J5Ci17Ci0gIHByaXZhdGUgVmVjdG9yIGl0ZW1zXzsKLSAgcHJpdmF0ZSBpbnQgcG9zaXRpb25fOwotCi0gIHB1YmxpYyBIaXN0b3J5KCkKLSAgewotICAgIGl0ZW1zXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBwb3NpdGlvbl8gPSAtMTsKLSAgfQotCi0gIC8vIEFkZCBhIG5ldyBicmVhZGNydW1iIHRvIHRoZSBoaXN0b3J5IGxpc3QuIFdoZW4gYWRkaW5nIGEgbmV3IGJyZWFkY3J1bWIKLSAgLy8gd2l0aGluIHRoZSBjdXJyZW50IGxpc3QsIGFsbCBicmVhZGNydW1icyBhZnRlciB0aGUgbmV3bHkgYWRkZWQgb25lIGFyZQotICAvLyByZW1vdmVkLgotICBwdWJsaWMgYm9vbGVhbiBhZGRCcmVhZENydW1iKEJyZWFkQ3J1bWIgYikKLSAgewotICAgIGludCBudW1iZXJPZkl0ZW1zID0gaXRlbXNfLnNpemUoKTsKLSAgICBpZiAobnVtYmVyT2ZJdGVtcyA9PSAwKQotICAgIHsKLSAgICAgIHBvc2l0aW9uXysrOwotICAgICAgaXRlbXNfLmFkZEVsZW1lbnQoYik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIEJyZWFkQ3J1bWIgY3VycmVudEJyZWFkQ3J1bWIgPSAoQnJlYWRDcnVtYilpdGVtc18uZWxlbWVudEF0KHBvc2l0aW9uXyk7Ci0gICAgICBpZiAoIWN1cnJlbnRCcmVhZENydW1iLmVxdWFscyhiKSkKLSAgICAgIHsKLSAgICAgICAgcG9zaXRpb25fKys7Ci0gICAgICAgIGl0ZW1zXy5pbnNlcnRFbGVtZW50QXQoYixwb3NpdGlvbl8pOwotICAgICAgICBmb3IgKGludCBpPWl0ZW1zXy5zaXplKCktMTtpPnBvc2l0aW9uXztpLS0pCi0gICAgICAgICAgaXRlbXNfLnJlbW92ZUVsZW1lbnRBdChpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIE1vdmUgZm9yd2FyZCB3aXRoaW4gdGhlIGhpc3RvcnkgbGlzdCBhbmQgb2J0YWluIHRoZSBicmVhZGNydW1iLgotICBwdWJsaWMgQnJlYWRDcnVtYiBmb3J3YXJkKCkKLSAgewotICAgIGlmIChwb3NpdGlvbl8gPCBpdGVtc18uc2l6ZSgpLTEpCi0gICAgewotICAgICAgcG9zaXRpb25fKys7Ci0gICAgICBCcmVhZENydW1iIGIgPSAoQnJlYWRDcnVtYilpdGVtc18uZWxlbWVudEF0KHBvc2l0aW9uXyk7Ci0gICAgICByZXR1cm4gYjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvLyBNb3ZlIGJhY2sgd2l0aGluIHRoZSBoaXN0b3J5IGxpc3QgYW5kIG9idGFpbiB0aGUgYnJlYWRjcnVtYi4KLSAgcHVibGljIEJyZWFkQ3J1bWIgYmFjaygpCi0gIHsKLSAgICBpZiAocG9zaXRpb25fID4gMCkKLSAgICB7Ci0gICAgICBwb3NpdGlvbl8tLTsKLSAgICAgIEJyZWFkQ3J1bWIgYiA9IChCcmVhZENydW1iKWl0ZW1zXy5lbGVtZW50QXQocG9zaXRpb25fKTsKLSAgICAgIHJldHVybiBiOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUN1cnJlbnRCcmVhZENydW1iKCkKLSAgewotICAgIGl0ZW1zXy5yZW1vdmVFbGVtZW50QXQocG9zaXRpb25fKTsKLSAgICBpZiAocG9zaXRpb25fID4gaXRlbXNfLnNpemUoKS0xKQotICAgICAgcG9zaXRpb25fLS07Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGR1bXAoKQotICB7Ci0gICAgZm9yIChpbnQgaT0wO2k8aXRlbXNfLnNpemUoKTtpKyspCi0gICAgewotICAgICAgaXRlbXNfLmVsZW1lbnRBdChpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9JbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOTFiYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9JbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEltcG9ydFRvRmlsZVN5c3RlbVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvaW1wb3J0X2ZzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9pbXBvcnRfZnNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSW1wb3J0VG9Xb3JrYmVuY2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGMzZWVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSW1wb3J0VG9Xb3JrYmVuY2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbXBvcnRUb1dvcmtiZW5jaFRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIEltcG9ydFRvV29ya2JlbmNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmb3Jtcy9JbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTGF1bmNoT3B0aW9uc01hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTGF1bmNoT3B0aW9uc01hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMyNWI4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaE9wdGlvbnNNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgTGF1bmNoT3B0aW9uc01hbmFnZXIKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgTGF1bmNoT3B0aW9uc01hbmFnZXIgaW5zdGFuY2VfOwotCi0gIHByaXZhdGUgSGFzaHRhYmxlIG9wdGlvbnNUYWJsZV87Ci0KLSAgcHJpdmF0ZSBMYXVuY2hPcHRpb25zTWFuYWdlcigpCi0gIHsKLSAgICBvcHRpb25zVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBMYXVuY2hPcHRpb25zTWFuYWdlciBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpCi0gICAgICBpbnN0YW5jZV8gPSBuZXcgTGF1bmNoT3B0aW9uc01hbmFnZXIoKTsKLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG1hbmFnZShTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUsIFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICB7Ci0gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgbWFuYWdlU2Vzc2lvbihrZXksIChTdHJpbmcpdmFsdWUsIGFwcGxpY2F0aW9uKTsKLSAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEhhc2h0YWJsZSkKLSAgICAgIG1hbmFnZU9wdGlvbnMoa2V5LCAoSGFzaHRhYmxlKXZhbHVlLCBhcHBsaWNhdGlvbik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbWFuYWdlU2Vzc2lvbihTdHJpbmcga2V5LCBTdHJpbmcgc2Vzc2lvbklkLCBTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgewotICAgIE9iamVjdCBvYmogPSBvcHRpb25zVGFibGVfLnJlbW92ZShrZXkpOwotICAgIGlmIChvYmogIT0gbnVsbCAmJiAob2JqIGluc3RhbmNlb2YgSGFzaHRhYmxlKSkKLSAgICAgIGxvYWRPcHRpb25zKHNlc3Npb25JZCwgKEhhc2h0YWJsZSlvYmosIGFwcGxpY2F0aW9uKTsKLSAgICBlbHNlCi0gICAgICBvcHRpb25zVGFibGVfLnB1dChrZXksIHNlc3Npb25JZCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbWFuYWdlT3B0aW9ucyhTdHJpbmcga2V5LCBIYXNodGFibGUgb3B0aW9ucywgU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gIHsKLSAgICBPYmplY3Qgb2JqID0gb3B0aW9uc1RhYmxlXy5yZW1vdmUoa2V5KTsKLSAgICBpZiAob2JqICE9IG51bGwgJiYgKG9iaiBpbnN0YW5jZW9mIFN0cmluZykpCi0gICAgICBsb2FkT3B0aW9ucygoU3RyaW5nKW9iaiwgb3B0aW9ucywgYXBwbGljYXRpb24pOwotICAgIGVsc2UKLSAgICAgIG9wdGlvbnNUYWJsZV8ucHV0KGtleSwgb3B0aW9ucyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9hZE9wdGlvbnMoU3RyaW5nIHNlc3Npb25JZCwgSGFzaHRhYmxlIG9wdGlvbnMsIFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICB7Ci0gICAgSHR0cFNlc3Npb24gaHR0cFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICAgaWYgKGh0dHBTZXNzaW9uICE9IG51bGwpCi0gICAgewotICAgICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpaHR0cFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0JICBTdHJpbmdbXSBzdGF0ZUxvY2F0aW9ucyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLlNUQVRFX0xPQ0FUSU9OKTsKLQkgIFN0cmluZ1tdIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbnMgPSAoU3RyaW5nW10pb3B0aW9ucy5nZXQoTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTik7Ci0gICAgICBTdHJpbmdbXSBpbnF1aXJ5VVJMcyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLklOUVVJUllfVVJMKTsKLSAgICAgIFN0cmluZ1tdIHB1Ymxpc2hVUkxzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nW10gc2VydmljZU5hbWVzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuU0VSVklDRV9OQU1FKTsKLSAgICAgIFN0cmluZ1tdIHNlcnZpY2VLZXlzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuU0VSVklDRV9LRVkpOwotICAgICAgU3RyaW5nW10gd3NkbFVSTHMgPSAoU3RyaW5nW10pb3B0aW9ucy5nZXQoTGF1bmNoT3B0aW9ucy5XU0RMX1VSTCk7Ci0gICAgICBTdHJpbmdbXSBlbmRwb2ludHMgPSAoU3RyaW5nW10pb3B0aW9ucy5nZXQoTGF1bmNoT3B0aW9ucy5XRUJfU0VSVklDRV9FTkRQT0lOVCk7Ci0gICAgICBTdHJpbmdbXSBzZXJ2aWNlUU5hbWVTdHJpbmdzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuU0VSVklDRV9RTkFNRV9TVFJJTkcpOwotICAgICAgU3RyaW5nW10gYmluZGluZ05hbWVTdHJpbmdzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuQklORElOR19OQU1FX1NUUklORyk7Ci0JICBTdHJpbmcgc3RhdGVMb2NhdGlvbiA9IChzdGF0ZUxvY2F0aW9ucyA9PSBudWxsIHx8IHN0YXRlTG9jYXRpb25zLmxlbmd0aCA9PSAwKSA/IG51bGwgOiBzdGF0ZUxvY2F0aW9uc1swXTsKLQkgIGNvbnRyb2xsZXIuc2V0U3RhdGVMb2NhdGlvbihzdGF0ZUxvY2F0aW9uKTsKLQkgIFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24gPSAoZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9ucyA9PSBudWxsIHx8IGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbnMubGVuZ3RoID09IDApID8gbnVsbCA6IGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbnNbMF07Ci0JICBjb250cm9sbGVyLnNldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbihkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pOwotICAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgICB1ZGRpUGVyc3BlY3RpdmUucHJlbG9hZFVERElSZWdpc3RyaWVzKGlucXVpcnlVUkxzLCBwdWJsaXNoVVJMcyk7Ci0gICAgICB1ZGRpUGVyc3BlY3RpdmUucHJlbG9hZFNlcnZpY2VzKGlucXVpcnlVUkxzLHNlcnZpY2VOYW1lcyxzZXJ2aWNlS2V5cyk7Ci0gICAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAgIHdzZGxQZXJzcGVjdGl2ZS5wcmVsb2FkV1NETCh3c2RsVVJMcyk7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUucHJlbG9hZEVuZHBvaW50cyh3c2RsVVJMcywgZW5kcG9pbnRzKTsKLSAgICAgIHdzZGxQZXJzcGVjdGl2ZS5wcmVzZWxlY3RTZXJ2aWNlT3JCaW5kaW5nKHdzZGxVUkxzLHNlcnZpY2VRTmFtZVN0cmluZ3MsYmluZGluZ05hbWVTdHJpbmdzKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDViM2QzZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9sYXVuY2hfd3N3aXphcmRfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gImZvcm1zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VCdW5kbGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTWVzc2FnZUJ1bmRsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2E1ZDUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTWVzc2FnZUJ1bmRsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0vKioKLSogQW4gbWVzc2FnZSBidW5kbGUgaXMgYSBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzIGRyYXduIGZyb20gc29tZQotKiBzZXQgb2YgcHJvcGVydGllcy4KLSovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUJ1bmRsZQotewotICBwcml2YXRlIFJlc291cmNlQnVuZGxlIGZSZXNvdXJjZUJ1bmRsZTsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IE1lc3NhZ2VCdW5kbGUgZnJvbSB0aGUgZ2l2ZW4gUmVzb3VyY2VCdW5kbGUuCi0gICovCi0gIHB1YmxpYyBNZXNzYWdlQnVuZGxlICggUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGUgKQotICB7Ci0gICAgZlJlc291cmNlQnVuZGxlID0gcmVzb3VyY2VCdW5kbGU7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIGlkZW50aWZpZWQgYnkgbWVzc2FnZUlkLgotICAqIEBwYXJhbSBtZXNzYWdlSWQgVGhlIG1lc3NhZ2UgSUQuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG1lc3NhZ2UgdGV4dC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIG1lc3NhZ2VJZCApCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gZlJlc291cmNlQnVuZGxlLmdldFN0cmluZyhtZXNzYWdlSWQpOwotICAgIH0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG1lc3NhZ2VJZDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIGlkZW50aWZpZWQgYnkgbWVzc2FnZUlkLgotICAqIEBwYXJhbSBtZXNzYWdlSWQgVGhlIG1lc3NhZ2UgSUQuCi0gICogQHBhcmFtIHN1YiBBIHN1YnN0aXR1dGlvbiB2YWx1ZSBmb3IgIiUxIiBpbiB0aGUgbWVzc2FnZS4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbWVzc2FnZSB0ZXh0LgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcgbWVzc2FnZUlkLCBTdHJpbmcgc3ViICkKLSAgewotICAgIFN0cmluZ1tdIHMgPSB7c3VifTsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZShtZXNzYWdlSWQscyk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIGlkZW50aWZpZWQgYnkgbWVzc2FnZUlkLgotICAqIEBwYXJhbSBtZXNzYWdlSWQgVGhlIG1lc3NhZ2UgSUQuCi0gICogQHBhcmFtIHN1YiBTdWJzdGl0dXRpb24gdmFsdWVzIGZvciAiJTEuLiVuIiAoc3ViWzBdLi5zdWJbbi0xXSkgaW4KLSAgKiB0aGUgbWVzc2FnZS4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbWVzc2FnZSB0ZXh0LgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcgbWVzc2FnZUlkLCBTdHJpbmdbXSBzdWIgKQotICB7Ci0gICAgU3RyaW5nIG0gPSBnZXRNZXNzYWdlKG1lc3NhZ2VJZCk7Ci0gICAgaW50IGxlbiA9IG0ubGVuZ3RoKCk7Ci0gICAgaW50IG1heCA9IHN1Yi5sZW5ndGg7Ci0gICAgU3RyaW5nQnVmZmVyIGIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgaW50IHBvcyA9IDA7Ci0gICAgd2hpbGUgKHBvcyA+PSAwKQotICAgIHsKLSAgICAgIGludCBwY3QgPSBtLmluZGV4T2YoJyUnLHBvcyk7Ci0gICAgICBpZiAocGN0ID49IDApCi0gICAgICB7Ci0gICAgICAgIGIuYXBwZW5kKG0uc3Vic3RyaW5nKHBvcyxwY3QpKTsKLSAgICAgICAgcG9zID0gcGN0ICsgMTsKLSAgICAgICAgaWYgKHBvcyA8IGxlbikKLSAgICAgICAgewotICAgICAgICAgIGNoYXIgZCA9IG0uY2hhckF0KHBvcyk7Ci0gICAgICAgICAgaWYgKENoYXJhY3Rlci5pc0RpZ2l0KGQpICYmIGQgIT0gJzAnKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCB2ID0gSW50ZWdlci5wYXJzZUludChuZXcgQ2hhcmFjdGVyKGQpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgaWYgKHYgPD0gbWF4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBiLmFwcGVuZChzdWJbdi0xXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGIuYXBwZW5kKCc/Jyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGIuYXBwZW5kKCclJyk7Ci0gICAgICAgICAgICBiLmFwcGVuZChkKTsKLSAgICAgICAgICAgIHBvcysrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBiLmFwcGVuZCgnJScpOwotICAgICAgICAgIHBvcyA9IC0xOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGIuYXBwZW5kKG0uc3Vic3RyaW5nKHBvcykpOwotICAgICAgICBwb3MgPSAtMTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGIudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpCi0gIHsKLSAgICByZXR1cm4gZlJlc291cmNlQnVuZGxlOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTWVzc2FnZVByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDUyZTRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTWVzc2FnZVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotLy8gQSBDbGFzcyB3aGljaCBwcm92aWRlcyBTdHJpbmcgbWVzc2FnZXMuCi1wdWJsaWMgY2xhc3MgTWVzc2FnZVByb3ZpZGVyCi17Ci0gIHByb3RlY3RlZCBNZXNzYWdlQnVuZGxlIG1lc3NhZ2VCdW5kbGVfOwotICBwcml2YXRlIFN0cmluZyBtZXNzYWdlUHJvdmlkZXJOYW1lXzsKLQotICBwdWJsaWMgTWVzc2FnZVByb3ZpZGVyKFN0cmluZyBtZXNzYWdlQnVuZGxlRmlsZU5hbWUpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBMb2FkIHRoZSBtZXNzYWdlIGJ1bmRsZSBmcm9tIHRoZSBXRUItSU5GXGNsYXNzZXMgc3ViZGlyZWN0b3J5LgotICAgICAgbWVzc2FnZVByb3ZpZGVyTmFtZV8gPSBtZXNzYWdlQnVuZGxlRmlsZU5hbWU7Ci0gICAgICBtZXNzYWdlQnVuZGxlXyA9IG5ldyBNZXNzYWdlQnVuZGxlKFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShtZXNzYWdlQnVuZGxlRmlsZU5hbWUpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJU3lzdGVtLmVyci5wcmludGxuKCJDb3VsZCBub3QgbG9hZCAiK21lc3NhZ2VCdW5kbGVGaWxlTmFtZSk7Ci0gICAgCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlSWQpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZUJ1bmRsZV8uZ2V0TWVzc2FnZShtZXNzYWdlSWQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlSWQsU3RyaW5nIHN1YikKLSAgewotICAgIHJldHVybiBtZXNzYWdlQnVuZGxlXy5nZXRNZXNzYWdlKG1lc3NhZ2VJZCxzdWIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlSWQsU3RyaW5nW10gc3ViKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VCdW5kbGVfLmdldE1lc3NhZ2UobWVzc2FnZUlkLHN1Yik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZVByb3ZpZGVyTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZVByb3ZpZGVyTmFtZV87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTWVzc2FnZVF1ZXVlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VRdWV1ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzgwOGVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTWVzc2FnZVF1ZXVlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBNZXNzYWdlUXVldWUKLXsKLSAgcHJvdGVjdGVkIFZlY3RvciBtZXNzYWdlTGlzdF87Ci0KLSAgcHVibGljIE1lc3NhZ2VRdWV1ZSgpCi0gIHsKLSAgICBtZXNzYWdlTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgbWVzc2FnZUxpc3RfLmFkZEVsZW1lbnQobWVzc2FnZSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2VzRnJvbUxpc3QoKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgaWYgKG1lc3NhZ2VMaXN0Xy5zaXplKCk9PTApCi0gICAgICByZXR1cm4gIiI7Ci0KLSAgICBFbnVtZXJhdGlvbiBlID0gbWVzc2FnZUxpc3RfLmVsZW1lbnRzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHRoaXNNZXNzYWdlID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gICAgICBtZXNzYWdlcy5hcHBlbmQodGhpc01lc3NhZ2UpOwotICAgICAgbWVzc2FnZXMuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgfQotICAgIG1lc3NhZ2VMaXN0Xy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgIHJldHVybiBtZXNzYWdlcy50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL05vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmE1M2I0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDMyNCAgIDE4NjQ1NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOb2RlCi17Ci0gIHByb3RlY3RlZCBUcmVlRWxlbWVudCBlbGVtZW50XzsKLSAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgcHJvdGVjdGVkIGludCBub2RlSWRfOwotICBwcm90ZWN0ZWQgaW50IG5vZGVEZXB0aF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgaW1hZ2VQYXRoXzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNPcGVuXzsKLSAgcHJvdGVjdGVkIFZlY3RvciBjaGlsZE5vZGVzXzsKLSAgcHJvdGVjdGVkIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyXzsKLSAgcHJvdGVjdGVkIE5vZGUgcGFyZW50XzsKLSAgcHJpdmF0ZSBTdHJpbmcgYW5jaG9yTmFtZV87Ci0gIHByaXZhdGUgaW50IHZpZXdJZF87Ci0KLSAgcHVibGljIE5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoLFN0cmluZyBpbWFnZVBhdGgpCi0gIHsKLSAgICBlbGVtZW50XyA9IGVsZW1lbnQ7Ci0gICAgbm9kZU1hbmFnZXJfID0gbm9kZU1hbmFnZXI7Ci0gICAgbm9kZUlkXyA9IG5vZGVNYW5hZ2VyLmFkZFRvTm9kZVRhYmxlKHRoaXMpOwotICAgIG5vZGVEZXB0aF8gPSBub2RlRGVwdGg7Ci0gICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICBpZiAoaW1hZ2VQYXRoID09IG51bGwpCi0gICAgICBpbWFnZVBhdGhfID0gY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9TUEFDRSk7Ci0gICAgZWxzZQotICAgICAgaW1hZ2VQYXRoXyA9IGltYWdlUGF0aDsKLSAgICBpc09wZW5fID0gdHJ1ZTsKLSAgICBjaGlsZE5vZGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICB0b29sTWFuYWdlcl8gPSBuZXcgVG9vbE1hbmFnZXIodGhpcyk7Ci0gICAgaW5pdFRvb2xzKCk7Ci0gICAgYW5jaG9yTmFtZV8gPSAobmV3IFN0cmluZ0J1ZmZlcigiYWN0aW9uIikpLmFwcGVuZChub2RlSWRfKS50b1N0cmluZygpOwotICAgIHBhcmVudF8gPSBudWxsOwotICAgIHZpZXdJZF8gPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQ7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBUcmVlRWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlLgotICAqIEByZXR1cm4gVHJlZUVsZW1lbnQgVGhlIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4KLSAgKi8KLSAgcHVibGljIFRyZWVFbGVtZW50IGdldFRyZWVFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBlbGVtZW50XzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG5vZGUuCi0gICogQHJldHVybiBTdHJpbmcKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROb2RlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudF8uZ2V0TmFtZSgpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgTm9kZU1hbmFnZXIgbWFuYWdpbmcgdGhpcyBub2RlLgotICAqIEByZXR1cm4gTm9kZU1hbmFnZXIKLSAgKi8KLSAgcHVibGljIE5vZGVNYW5hZ2VyIGdldE5vZGVNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiBub2RlTWFuYWdlcl87Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGlzIG5vZGUuCi0gICogQHJldHVybiBpbnQKLSAgKi8KLSAgcHVibGljIGludCBnZXROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVJZF87Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBkZXB0aCBpbiB0aGUgdHJlZSBvZiB0aGlzIG5vZGUgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgbm9kZQotICAqIEByZXR1cm4gaW50Ci0gICovCi0gIHB1YmxpYyBpbnQgZ2V0Tm9kZURlcHRoKCkKLSAgewotICAgIHJldHVybiBub2RlRGVwdGhfOwotICB9Ci0KLSAgLyoqCi0gICogU2V0IHRoZSBwYXRoIG9mIHRoZSBpbWFnZSByZXByZXNlbnRpbmcgdGhpcyBjbGFzcyBvZiBOb2RlLgotICAqIEBwYXJhbSBTdHJpbmcgVGhlIHBhdGguCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldEltYWdlUGF0aChTdHJpbmcgcGF0aCkKLSAgewotICAgIGltYWdlUGF0aF8gPSBwYXRoOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0cnVlIGlmIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUgYXJlIHZpc2libGUuIFJldHVybnMgZmFsc2UKLSAgKiBpZiB0aGV5IGFyZSBub3QuCi0gICogQHJldHVybiBib29sZWFuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzT3BlbigpCi0gIHsKLSAgICByZXR1cm4gaXNPcGVuXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzVmlzaWJsZSgpCi0gIHsKLSAgICBOb2RlIHBhcmVudE5vZGUgPSBwYXJlbnRfOwotICAgIHdoaWxlIChwYXJlbnROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKCFwYXJlbnROb2RlLmlzT3BlbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXRQYXJlbnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgKiBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoaXMgbm9kZSdzIGNoaWxkcmVuIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCi0gICogVXBkYXRlcyB0aGUgTm9kZU1hbmFnZXIncyByZWNvcmQgb2YgdGhlIG1heGltdW0gZGVwdGggdmlzaWJsZSBpbiB0aGUgdHJlZS4KLSAgKiBAcGFyYW0gYm9vbGVhbgotICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihib29sZWFuIG9wZW4pCi0gIHsKLSAgICBpc09wZW5fID0gb3BlbjsKLSAgICBub2RlTWFuYWdlcl8udXBkYXRlTWF4RGVwdGhWaXNpYmxlKCk7Ci0gIH0KLQotICAvKioKLSAgKiBHZXRzIHRoZSBtYXhpbXVtIGRlcHRoIGRpc3BsYXllZCBpbiB0aGlzIG5vZGUncyBicmFuY2ggb2YgdGhlIHRyZWUKLSAgKiBVc2VkIGJ5IE5vZGVNYW5hZ2VyIGZvciBodG1sIGRpc3BsYXkgcHVycG9zZXMuCi0gICogQHJldHVybiBpbnQKLSAgKi8KLSAgcHVibGljIGludCBnZXRNYXhEZXB0aFZpc2libGUoKQotICB7Ci0gICAgaWYgKCFpc09wZW5fKQotICAgICAgcmV0dXJuIG5vZGVEZXB0aF87Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGludCBjdXJyZW50RGVwdGggPSBub2RlRGVwdGhfOwotICAgICAgRW51bWVyYXRpb24gZSA9IGNoaWxkTm9kZXNfLmVsZW1lbnRzKCk7Ci0gICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgTm9kZSB0aGlzTm9kZSA9IChOb2RlKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgaW50IGRlcHRoID0gdGhpc05vZGUuZ2V0TWF4RGVwdGhWaXNpYmxlKCk7Ci0gICAgICAgIGlmIChkZXB0aD5jdXJyZW50RGVwdGgpCi0gICAgICAgICAgY3VycmVudERlcHRoPWRlcHRoOwotICAgICAgfQotICAgICAgcmV0dXJuIGN1cnJlbnREZXB0aDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQYXJlbnQoTm9kZSBub2RlKQotICB7Ci0gICAgcGFyZW50XyA9IG5vZGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRQYXJlbnQoKQotICB7Ci0gICAgcmV0dXJuIHBhcmVudF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRWaWV3SWQoaW50IHZpZXdJZCkKLSAgewotICAgIHZpZXdJZF8gPSB2aWV3SWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFZpZXdJZCgpCi0gIHsKLSAgICByZXR1cm4gdmlld0lkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Vmlld1Rvb2xJZCgpCi0gIHsKLSAgICBUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIgPSBnZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICBpZiAodmlld1Rvb2xNYW5hZ2VyICE9IG51bGwpCi0gICAgICByZXR1cm4gdmlld1Rvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbElkKCk7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQ7Ci0gIH0KLQotICAvKioKLSAgKiBBZGRzIHRoZSBzcGVjaWZpZWQgbm9kZSBhcyBhIGNoaWxkIG9mIHRoaXMgbm9kZS4KLSAgKiBAcGFyYW0gTm9kZSBUaGUgY2hpbGQgYmVpbmcgYWRkZWQuCi0gICogQHJldHVybiBib29sZWFuIEFsd2F5cyB0cnVlLgotICAqLwotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBhZGRDaGlsZChOb2RlIGNoaWxkTm9kZSkKLSAgewotICAgIGNoaWxkTm9kZS5zZXRQYXJlbnQodGhpcyk7Ci0gICAgY2hpbGROb2Rlc18uYWRkRWxlbWVudChjaGlsZE5vZGUpOwotICAgIG5vZGVNYW5hZ2VyXy51cGRhdGVNYXhEZXB0aFZpc2libGUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZS4gSWYgdGhpcyBub2RlIGhhcyBubyBjaGlsZHJlbiwgYW4KLSAgKiBlbXB0eSB2ZWN0b3IgaXMgcmV0dXJuZWQuCi0gICogQHJldHVybiBWZWN0b3IKLSAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRDaGlsZE5vZGVzKCkKLSAgewotICAgIHJldHVybiBjaGlsZE5vZGVzXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldENoaWxkTm9kZShUcmVlRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGNoaWxkTm9kZXNfLmVsZW1lbnRzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgTm9kZSBwcmVzZW50Tm9kZSA9IChOb2RlKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChwcmVzZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpID09IGVsZW1lbnQpCi0gICAgICAgIHJldHVybiBwcmVzZW50Tm9kZTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVDaGlsZE5vZGVzKGJvb2xlYW4gaXNFbnRyeSkKLSAgewotICAgIGludCBudW1iZXJPZkNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzXy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT1udW1iZXJPZkNoaWxkTm9kZXMtMTtpPj0wO2ktLSkKLSAgICB7Ci0gICAgICBOb2RlIGNoaWxkTm9kZSA9IChOb2RlKWNoaWxkTm9kZXNfLmVsZW1lbnRBdChpKTsKLSAgICAgIGNoaWxkTm9kZS5yZW1vdmVDaGlsZE5vZGVzKGZhbHNlKTsKLSAgICAgIG5vZGVNYW5hZ2VyXy5yZW1vdmVGcm9tTm9kZVRhYmxlKGNoaWxkTm9kZS5nZXROb2RlSWQoKSk7Ci0gICAgfQotICAgIGlmIChudW1iZXJPZkNoaWxkTm9kZXMgPiAwKQotICAgIHsKLSAgICAgIGNoaWxkTm9kZXNfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgICBpZiAoaXNFbnRyeSkKLSAgICAgICAgbm9kZU1hbmFnZXJfLnVwZGF0ZU1heERlcHRoVmlzaWJsZSgpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlbW92ZUNoaWxkTm9kZShUcmVlRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgTm9kZSBjaGlsZE5vZGUgPSBnZXRDaGlsZE5vZGUoZWxlbWVudCk7Ci0gICAgaWYgKGNoaWxkTm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBjaGlsZE5vZGVJZCA9IGNoaWxkTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgIGlmIChub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlSWQoKSA9PSBjaGlsZE5vZGVJZCkKLSAgICAgICAgbm9kZU1hbmFnZXJfLnNldFNlbGVjdGVkTm9kZUlkKG5vZGVJZF8pOwotICAgICAgY2hpbGROb2Rlc18ucmVtb3ZlRWxlbWVudChjaGlsZE5vZGUpOwotICAgICAgbm9kZU1hbmFnZXJfLnJlbW92ZUZyb21Ob2RlVGFibGUoY2hpbGROb2RlSWQpOwotICAgICAgbm9kZU1hbmFnZXJfLnVwZGF0ZU1heERlcHRoVmlzaWJsZSgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgSFRNTCBhbmNob3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbmFtZSBvZiB0aGUgYW5jaG9yLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFuY2hvck5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGFuY2hvck5hbWVfOwotICB9Ci0KLSAgcHVibGljIFRvb2xNYW5hZ2VyIGdldFRvb2xNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiB0b29sTWFuYWdlcl87Ci0gIH0KLQotICBwdWJsaWMgVG9vbE1hbmFnZXIgZ2V0Vmlld1Rvb2xNYW5hZ2VyKCkKLSAgewotICAgIGlmICh2aWV3SWRfICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICB7Ci0gICAgICBWaWV3VG9vbCB2aWV3VG9vbCA9IChWaWV3VG9vbCl0b29sTWFuYWdlcl8uZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICByZXR1cm4gdmlld1Rvb2wuZ2V0VG9vbE1hbmFnZXIodmlld0lkXyk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgVG9vbE1hbmFnZXIgZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkKLSAgewotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgaWYgKHRvb2xNYW5hZ2VyID09IG51bGwpCi0gICAgICB0b29sTWFuYWdlciA9IHRvb2xNYW5hZ2VyXzsKLSAgICByZXR1cm4gdG9vbE1hbmFnZXI7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbml0VG9vbHMoKTsKLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCk7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uVGFyZ2V0KCkKLSAgewotICAgIHJldHVybiBGcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkVG9nZ2xlKEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsU3RyaW5nQnVmZmVyIHRyZWVWaWV3LGJvb2xlYW4gaXNMYXN0Q2hpbGQpCi0gIHsKLSAgICBpZiAobm9kZURlcHRoXyAhPSAxKQotICAgIHsKLSAgICAgIHRyZWVWaWV3LmFwcGVuZCgiICAgIDx0ZCBhbGlnbj1cImxlZnRcIiB3aWR0aD0xNiBoZWlnaHQ9MTYgbm93cmFwPiIpOwotICAgICAgU3RyaW5nIHRvZ2dsZUltYWdlVGFnOwotICAgICAgaWYgKGNoaWxkTm9kZXNfLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIC8vIDxhIGhyZWY9Ii4uLiIgdGFyZ2V0PSIuLi4iPnRvZ2dsZUltYWdlVGFnPC9hPgotICAgICAgICBTdHJpbmcgaHJlZiA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkpOwotICAgICAgICBpZiAoaXNPcGVuXykKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB0b2dnbGVBbHQgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIkFMVF9DTE9TRSIpOwotICAgICAgICAgIGlmIChpc0xhc3RDaGlsZCkKLSAgICAgICAgICAgIHRvZ2dsZUltYWdlVGFnID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX01JTlVTX0xBU1QpLHRvZ2dsZUFsdCwiMTYiLCIxNiIsbnVsbCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9nZ2xlSW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfTUlOVVNfTk9UTEFTVCksdG9nZ2xlQWx0LCIxNiIsIjE2IixudWxsKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdG9nZ2xlQWx0ID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJBTFRfT1BFTiIpOwotICAgICAgICAgIGlmIChpc0xhc3RDaGlsZCkKLSAgICAgICAgICAgIHRvZ2dsZUltYWdlVGFnID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX1BMVVNfTEFTVCksdG9nZ2xlQWx0LCIxNiIsIjE2IixudWxsKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b2dnbGVJbWFnZVRhZyA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9QTFVTX05PVExBU1QpLHRvZ2dsZUFsdCwiMTYiLCIxNiIsbnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGxpbmtUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTExpbmtUYWcocmVzcG9uc2UsaHJlZixnZXRUb2dnbGVOb2RlQWN0aW9uVGFyZ2V0KCksU3RyaW5nLnZhbHVlT2Yobm9kZUlkXyksdG9nZ2xlSW1hZ2VUYWcsbnVsbCk7Ci0gICAgICAgIHRyZWVWaWV3LmFwcGVuZChsaW5rVGFnKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gPGltZy4uLj4KLSAgICAgICAgaWYgKGlzTGFzdENoaWxkKQotICAgICAgICAgIHRvZ2dsZUltYWdlVGFnID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX0xJTkVfTEFTVCksIiIsIjE2IiwiMTYiLG51bGwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdG9nZ2xlSW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfTElORV9OT1RMQVNUKSwiIiwiMTYiLCIxNiIsbnVsbCk7Ci0gICAgICAgIHRyZWVWaWV3LmFwcGVuZCh0b2dnbGVJbWFnZVRhZyk7Ci0gICAgICB9Ci0gICAgICB0cmVlVmlldy5hcHBlbmQoIjwvdGQ+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0TGlua0FjdGlvblRhcmdldCgpCi0gIHsKLSAgICByZXR1cm4gRnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3BlbkltYWdlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gaW1hZ2VQYXRoXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiBpbWFnZVBhdGhfOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkSFRNTExhYmVsKEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsU3RyaW5nQnVmZmVyIHRyZWVWaWV3LGJvb2xlYW4gaXNMYXN0Q2hpbGQpCi0gIHsKLSAgICAvLyA8YSBocmVmPSIuLi4iIHRhcmdldD0iLi4uIiBvbkNsaWNrPSJzZWxlY3ROb2RlKCcuLi4nKSI+PGltZy4uLj48L2E+Ci0gICAgSGFzaHRhYmxlIGFkZGl0aW9uYWxBdHRyaWJ1dGVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGFkZGl0aW9uYWxBdHRyaWJ1dGVzLnB1dCgibmFtZSIsYW5jaG9yTmFtZV8pOwotICAgIFN0cmluZyBpbWFnZVBhdGggPSAobm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZUlkKCkgPT0gbm9kZUlkXyk/Z2V0T3BlbkltYWdlUGF0aCgpOmdldENsb3NlZEltYWdlUGF0aCgpOwotCi0gICAgU3RyaW5nIGltYWdlVGFnID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChpbWFnZVBhdGgpLGdldE5vZGVOYW1lKCksIjE2IiwiMTYiLGFkZGl0aW9uYWxBdHRyaWJ1dGVzKTsKLSAgICBTdHJpbmcgYmFzZUhyZWYgPSBnZXRMaW5rQWN0aW9uSHJlZigpOwotICAgIFN0cmluZyBocmVmID0gKChiYXNlSHJlZiA9PSBudWxsKT9iYXNlSHJlZjpub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChiYXNlSHJlZikpOwotICAgIFN0cmluZyB0YXJnZXQgPSBnZXRMaW5rQWN0aW9uVGFyZ2V0KCk7Ci0gICAgYWRkaXRpb25hbEF0dHJpYnV0ZXMuY2xlYXIoKTsKLQotICAgIHRyZWVWaWV3LmFwcGVuZCgiICAgIDx0ZCBhbGlnbj1cImxlZnRcIiB3aWR0aD0xNiBoZWlnaHQ9MTYgbm93cmFwPiIpOwotICAgIGlmIChocmVmICE9IG51bGwpCi0gICAgICB0cmVlVmlldy5hcHBlbmQoSFRNTFV0aWxzLmdldEhUTUxMaW5rVGFnKHJlc3BvbnNlLGhyZWYsdGFyZ2V0LG51bGwsaW1hZ2VUYWcsYWRkaXRpb25hbEF0dHJpYnV0ZXMpKTsKLSAgICBlbHNlCi0gICAgICB0cmVlVmlldy5hcHBlbmQoaW1hZ2VUYWcpOwotICAgIHRyZWVWaWV3LmFwcGVuZCgiPC90ZD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB0cmVlVmlldy5hcHBlbmQoIiAgICA8dGQgYWxpZ249XCJsZWZ0XCIgd2lkdGg9MyBoZWlnaHQ9MTAgbm93cmFwPiIpLmFwcGVuZChIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfU1BBQ0UpLCIiLCIzIiwiMTAiLG51bGwpKS5hcHBlbmQoIjwvdGQ+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0KLSAgICAvLyA8YSBuYW1lPSIuLi4iIGhyZWY9Ii4uLiIgdGFyZ2V0PSIuLi4iPmxhYmVsPC9hPgotICAgIHRyZWVWaWV3LmFwcGVuZCgiICAgIDx0ZCBhbGlnbj1cImxlZnRcIiBub3dyYXA+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCIgICAgICAiKTsKLSAgICBpZiAoaHJlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB0ZXh0QW5jaG9yQ2xhc3M7Ci0gICAgICBpZiAobm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZUlkKCkgPT0gbm9kZUlkXykKLSAgICAgICAgdGV4dEFuY2hvckNsYXNzPSJzZWxlY3RlZFRleHRBbmNob3IiOwotICAgICAgZWxzZQotICAgICAgICB0ZXh0QW5jaG9yQ2xhc3M9InVuc2VsZWN0ZWRUZXh0QW5jaG9yIjsKLSAgICAgIGFkZGl0aW9uYWxBdHRyaWJ1dGVzLnB1dCgiY2xhc3MiLHRleHRBbmNob3JDbGFzcyk7Ci0gICAgICB0cmVlVmlldy5hcHBlbmQoSFRNTFV0aWxzLmdldEhUTUxMaW5rVGFnKHJlc3BvbnNlLGhyZWYsdGFyZ2V0LGFuY2hvck5hbWVfLGdldE5vZGVOYW1lKCksYWRkaXRpb25hbEF0dHJpYnV0ZXMpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgdHJlZVZpZXcuYXBwZW5kKCI8c3Ryb25nPiIpLmFwcGVuZChnZXROb2RlTmFtZSgpKS5hcHBlbmQoIjwvc3Ryb25nPiIpOwotICAgIHRyZWVWaWV3LmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpLmFwcGVuZCgiICAgIDwvdGQ+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW5kZXJOb2RlKEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsU3RyaW5nQnVmZmVyIHRyZWVWaWV3LFN0cmluZyBwcmVmaXhDb2x1bW5zLGJvb2xlYW4gaXNMYXN0Q2hpbGQpCi0gIHsKLSAgICBTdHJpbmcgc3BhY2VfMTZ4MTYgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfU1BBQ0UpLCIiLCIxNiIsIjE2IixudWxsKTsKLSAgICBTdHJpbmcgbGluZV8xNngxNiA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9MSU5FKSwiIiwiMTYiLCIxNiIsbnVsbCk7Ci0KLSAgICAvLyBVc2UgYm9yZGVyPTEgdG8gaGVscCB3aXRoIGRlYnVnZ2luZy4KLSAgICB0cmVlVmlldy5hcHBlbmQoIjx0YWJsZSBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTAgYm9yZGVyPTA+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCIgIDx0cj4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB0cmVlVmlldy5hcHBlbmQoIiAgICA8dGQgYWxpZ249XCJsZWZ0XCIgd2lkdGg9MTYgaGVpZ2h0PTE2IG5vd3JhcD4iKS5hcHBlbmQoc3BhY2VfMTZ4MTYpLmFwcGVuZCgiPC90ZD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICBTdHJpbmdCdWZmZXIgbmV3UHJlZml4Q29sdW1ucyA9IG5ldyBTdHJpbmdCdWZmZXIocHJlZml4Q29sdW1ucyk7Ci0gICAgaWYgKG5vZGVEZXB0aF8gPj0gMikKLSAgICB7Ci0gICAgICBpZiAocHJlZml4Q29sdW1ucy5sZW5ndGgoKSA+IDApCi0gICAgICAgIHRyZWVWaWV3LmFwcGVuZChwcmVmaXhDb2x1bW5zKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICAgIC8vIGdlbmVyYXRlIGEgbmV3IHByZWZpeCBjb2x1bW5zLgotICAgICAgbmV3UHJlZml4Q29sdW1ucy5hcHBlbmQoIiAgICA8dGQgYWxpZ249XCJsZWZ0XCIgd2lkdGg9MTYgaGVpZ2h0PTE2IG5vd3JhcD4iKTsKLSAgICAgIGlmIChpc0xhc3RDaGlsZCkKLSAgICAgICAgbmV3UHJlZml4Q29sdW1ucy5hcHBlbmQoc3BhY2VfMTZ4MTYpOwotICAgICAgZWxzZQotICAgICAgICBuZXdQcmVmaXhDb2x1bW5zLmFwcGVuZChsaW5lXzE2eDE2KTsKLSAgICAgIG5ld1ByZWZpeENvbHVtbnMuYXBwZW5kKCI8L3RkPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIH0KLSAgICBhZGRUb2dnbGUocmVzcG9uc2UsdHJlZVZpZXcsaXNMYXN0Q2hpbGQpOwotICAgIGFkZEhUTUxMYWJlbChyZXNwb25zZSx0cmVlVmlldyxpc0xhc3RDaGlsZCk7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCIgIDwvdHI+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCI8L3RhYmxlPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIGludCBudW1iZXJPZkNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzXy5zaXplKCk7Ci0gICAgaWYgKG51bWJlck9mQ2hpbGROb2RlcyA+IDApCi0gICAgewotICAgICAgaWYgKGlzT3Blbl8pCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPG51bWJlck9mQ2hpbGROb2Rlcy0xO2krKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlc18uZWxlbWVudEF0KGkpOwotICAgICAgICAgIGNoaWxkTm9kZS5yZW5kZXJOb2RlKHJlc3BvbnNlLHRyZWVWaWV3LG5ld1ByZWZpeENvbHVtbnMudG9TdHJpbmcoKSxmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgTm9kZSBsYXN0Q2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlc18uZWxlbWVudEF0KG51bWJlck9mQ2hpbGROb2Rlcy0xKTsKLSAgICAgICAgbGFzdENoaWxkTm9kZS5yZW5kZXJOb2RlKHJlc3BvbnNlLHRyZWVWaWV3LG5ld1ByZWZpeENvbHVtbnMudG9TdHJpbmcoKSx0cnVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBGb3Igc29ydGluZyBwdXJwb3Nlcy4gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBnZXROb2RlTmFtZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL05vZGVNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL05vZGVNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZDQ4YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ob2RlTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci0KLXB1YmxpYyBjbGFzcyBOb2RlTWFuYWdlcgotewotICAvLyBwYXRocyB0byBpY29uIGltYWdlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX1BMVVNfTk9UTEFTVCA9ICJpbWFnZXMvcGx1c19ub3RsYXN0LmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfUExVU19MQVNUID0gImltYWdlcy9wbHVzX2xhc3QuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9NSU5VU19OT1RMQVNUID0gImltYWdlcy9taW51c19ub3RsYXN0LmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfTUlOVVNfTEFTVCA9ICJpbWFnZXMvbWludXNfbGFzdC5naWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX0xJTkUgPSAiaW1hZ2VzL2xpbmUuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9MSU5FX05PVExBU1QgPSAiaW1hZ2VzL2xpbmVfbm90bGFzdC5naWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX0xJTkVfTEFTVCA9ICJpbWFnZXMvbGluZV9sYXN0LmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfU1BBQ0UgPSAiaW1hZ2VzL3NwYWNlLmdpZiI7Ci0KLSAgcHJpdmF0ZSBDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICBwcml2YXRlIE5vZGUgcm9vdE5vZGVfOwotICBwcml2YXRlIEhhc2h0YWJsZSBub2RlVGFibGVfOwotICBwcml2YXRlIGludCBmb2N1c2VkTm9kZUlkXzsKLSAgcHJpdmF0ZSBpbnQgc2VsZWN0ZWROb2RlSWRfOwotICBwcml2YXRlIGludCBwcmV2aW91c1NlbGVjdGVkTm9kZUlkXzsKLSAgcHJpdmF0ZSBpbnQgbWF4RGVwdGhWaXNpYmxlXzsKLSAgcHJpdmF0ZSBpbnQgbmV4dElkXzsKLQotICBwdWJsaWMgTm9kZU1hbmFnZXIoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIHJvb3ROb2RlXyA9IG51bGw7Ci0gICAgbm9kZVRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmb2N1c2VkTm9kZUlkXyA9IC0xOwotICAgIHNlbGVjdGVkTm9kZUlkXyA9IC0xOwotICAgIHByZXZpb3VzU2VsZWN0ZWROb2RlSWRfID0gLTE7Ci0gICAgbWF4RGVwdGhWaXNpYmxlXyA9IDE7Ci0gICAgbmV4dElkXyA9IDA7Ci0gIH0KLQotICAvKioKLSAgKiBIb29rIGZvciB0aGUgY29udHJvbGxlci4KLSAgKiBAcmV0dXJuIENvbnRyb2xsZXIgVGhlIHBlcnNwZWN0aXZlIGNvbnRyb2xsZXIuCi0gICovCi0gIHB1YmxpYyBDb250cm9sbGVyIGdldENvbnRyb2xsZXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfOwotICB9Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgcm9vdCBub2RlIG9mIHRoZSB0cmVlLgotICAqIEBwYXJhbSByb290Tm9kZSBUaGUgbm9kZSBiZWluZyBkZXNpZ25hdGVkIGFzIHRoZSByb290IG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFJvb3ROb2RlKE5vZGUgcm9vdE5vZGUpCi0gIHsKLSAgICByb290Tm9kZV8gPSByb290Tm9kZTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZSBtYW5hZ2VkIGJ5IHRoaXMgTm9kZU1hbmFnZXIuCi0gICogQHJldHVybiBOb2RlIFRoZSByb290IG5vZGUuCi0gICovCi0gIHB1YmxpYyBOb2RlIGdldFJvb3ROb2RlKCkKLSAgewotICAgIHJldHVybiByb290Tm9kZV87Ci0gIH0KLQotICAvKioKLSAgKiBAcGFyYW0gSW50ZWdlciBUaGUgaWQgb2YgdGhlIG5vZGUgYmVpbmcgYWRkZWQuCi0gICogQHBhcmFtIE5vZGUgVGhlIG5vZGUgYmVpbmcgYWRkZWQuCi0gICogQHJldHVybiBUaGUgbm9kZUlkIGFzc2lnbmVkIHRvIHRoaXMgbm9kZS4KLSAgKi8KLSAgcHVibGljIGludCBhZGRUb05vZGVUYWJsZShOb2RlIG5vZGUpCi0gIHsKLSAgICBpbnQgYXNzaWduZWROb2RlSWQgPSBuZXh0SWRfOwotICAgIG5vZGVUYWJsZV8ucHV0KFN0cmluZy52YWx1ZU9mKGFzc2lnbmVkTm9kZUlkKSxub2RlKTsKLSAgICBuZXh0SWRfKys7Ci0gICAgcmV0dXJuIGFzc2lnbmVkTm9kZUlkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRnJvbU5vZGVUYWJsZShpbnQgbm9kZUlkKQotICB7Ci0gICAgVmVjdG9yIG5vZGVzVG9SZW1vdmUgPSBuZXcgVmVjdG9yKCk7Ci0gICAgTm9kZSBub2RlID0gZ2V0Tm9kZShub2RlSWQpOwotICAgIGdhdGhlck5vZGVzVG9SZW1vdmUobm9kZXNUb1JlbW92ZSwgbm9kZSk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IG5vZGVzVG9SZW1vdmUuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewotICAgICAgbm9kZVRhYmxlXy5yZW1vdmUoU3RyaW5nLnZhbHVlT2YoKChOb2RlKWl0Lm5leHQoKSkuZ2V0Tm9kZUlkKCkpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZ2F0aGVyTm9kZXNUb1JlbW92ZShWZWN0b3Igbm9kZXNUb1JlbW92ZSwgTm9kZSBub2RlKSB7Ci0gICAgaWYgKG5vZGUgIT0gbnVsbCkgewotICAgICAgbm9kZXNUb1JlbW92ZS5hZGQobm9kZSk7Ci0gICAgICBWZWN0b3IgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGNoaWxkTm9kZXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewotICAgICAgICBnYXRoZXJOb2Rlc1RvUmVtb3ZlKG5vZGVzVG9SZW1vdmUsIChOb2RlKWl0Lm5leHQoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZGVwdGggb2YgdGhlIGRlZXBlc3QgdmlzaWJsZSBub2RlIGluIHRoZSB0cmVlLgotICAqIEByZXR1cm4gaW50Ci0gICovCi0gIHB1YmxpYyBpbnQgZ2V0TWF4RGVwdGhWaXNpYmxlKCkKLSAgewotICAgIHJldHVybiBtYXhEZXB0aFZpc2libGVfOwotICB9Ci0KLSAgLyoqCi0gICogVXBkYXRlcyB0aGUgZGVwdGggb2YgdGhlIGRlZXBlc3QgdmlzaWJsZSBub2RlIGluIHRoZSB0cmVlLiBOb2RlcwotICAqIG11c3QgY2FsbCB0aGlzIHdoZW4gdGhlIHZpc2liaWxpdHkgb2YgdGhlaXIgY2hpbGRyZW4gY2hhbmdlcy4KLSAgKiAoZS5nLiBleHBhbmQvY29sbGFwc2Ugb2YgYSBwYXJlbnQgbm9kZSkuCi0gICovCi0gIHB1YmxpYyB2b2lkIHVwZGF0ZU1heERlcHRoVmlzaWJsZSgpCi0gIHsKLSAgICBpZiAocm9vdE5vZGVfICE9IG51bGwpCi0gICAgICBtYXhEZXB0aFZpc2libGVfID0gcm9vdE5vZGVfLmdldE1heERlcHRoVmlzaWJsZSgpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmV4dCBhdmFpbGFibGUgaWQgZm9yIGEgbmV3bHkgY3JlYXRlZCBub2RlLgotICAqIEByZXR1cm4gaW50Ci0gICovCi0gIHB1YmxpYyBpbnQgZ2V0TmV4dE5vZGVJZCgpCi0gIHsKLSAgICByZXR1cm4gbmV4dElkXzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGlkIG9mIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBub2RlIGluIHRoZSB0cmVlLiBBIG5vZGUKLSAgKiBiZWNvbWVzIGZvY3VzZWQgd2hlbiBhbnkgb2YgdGhlIGZvbGxvd2luZyBldmVudHMgb2NjdXI6Ci0gICogMSkgVGhlIG5vZGUncyBpY29uIG9yIGltYWdlIGFyZSBzZWxlY3RlZCBieSBhIHVzZXIuCi0gICogMikgVGhlIG5vZGUncyBleHBhbmQvY29sbGFwc2UgaWNvbiBpcyBjbGlja2VkLgotICAqIDMpIFByb2dyYW1tYXRpY2FsbHkgc2V0IGJ5IHRoZSBwcm9ncmFtbWVyLgotICAqIFRoZSB0cmVldmlldyB3aWxsIGFsd2F5cyBzY3JvbGwgdG8gdGhlIGN1cnJlbnQgZm9jdXNlZCBub2RlIHdoZW4gbG9hZGVkLgotICAqIEByZXR1cm4gaW50IFRoZSBpZC4KLSAgKi8KLSAgcHVibGljIGludCBnZXRGb2N1c2VkTm9kZUlkKCkKLSAgewotICAgIHJldHVybiBmb2N1c2VkTm9kZUlkXzsKLSAgfQotCi0gIC8qKgotICAqIEFsbG93cyBtb2RpZmljYXRpb24gb2YgdGhlIGZvY3VzZWQgbm9kZS4KLSAgKiBAcGFyYW0gaW50IFRoZSBpZCBvZiB0aGUgbm9kZSB0aGF0IGlzIGluIGZvY3VzLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRGb2N1c2VkTm9kZUlkKGludCBub2RlSWQpCi0gIHsKLSAgICBmb2N1c2VkTm9kZUlkXyA9IG5vZGVJZDsKLSAgfQotCi0gIHB1YmxpYyBOb2RlIGdldEZvY3VzZWROb2RlKCkKLSAgewotICAgIHJldHVybiBnZXROb2RlKGZvY3VzZWROb2RlSWRfKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGlkIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBpbiB0aGUgdHJlZS4KLSAgKiBAcmV0dXJuIGludCBUaGUgaWQuCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0U2VsZWN0ZWROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkTm9kZUlkXzsKLSAgfQotCi0gIHB1YmxpYyBOb2RlIGdldFNlbGVjdGVkTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0Tm9kZShzZWxlY3RlZE5vZGVJZF8pOwotICB9Ci0KLSAgLyoqCi0gICogUmV0cmlldmUgYSByZWZlcmVuY2UgdG8gYSBOb2RlIGluIHRoaXMgbWFuYWdlcidzIG5vZGUgdGFibGUuCi0gICogQHJldHVybiBOb2RlIFRoZSBub2RlLgotICAqLwotICBwdWJsaWMgTm9kZSBnZXROb2RlKGludCBub2RlSWQpCi0gIHsKLSAgICByZXR1cm4gKE5vZGUpbm9kZVRhYmxlXy5nZXQoU3RyaW5nLnZhbHVlT2Yobm9kZUlkKSk7Ci0gIH0KLQotICAvKioKLSAgKiBBbGxvd3MgbW9kaWZpY2F0aW9uIG9mIHRoZSBzZWxlY3RlZCBOb2RlLiBOb3RlIHRoYXQgc2V0dGluZyBhIG5vZGUgdG8gYmVjb21lCi0gICogc2VsZWN0ZWQgYXV0b21hdGljYWxseSBtYWtlcyBpdCB0aGUgZm9jdXNlZCBub2RlLiBIb3dldmVyLCB0aGlzIGlzIG9ubHkgYSBvbmUKLSAgKiB3YXkgcmVsYXRpb25zaGlwLgotICAqIEBwYXJhbSBpbnQgVGhlIGlkIG9mIHRoZSBub2RlIHRoYXQgaXMgYmVpbmcgc2VsZWN0ZWQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkTm9kZUlkKGludCBub2RlSWQpCi0gIHsKLSAgICBwcmV2aW91c1NlbGVjdGVkTm9kZUlkXyA9IHNlbGVjdGVkTm9kZUlkXzsKLSAgICBzZWxlY3RlZE5vZGVJZF8gPSBub2RlSWQ7Ci0gICAgc2V0Rm9jdXNlZE5vZGVJZChzZWxlY3RlZE5vZGVJZF8pOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRQcmV2aW91c1NlbGVjdGVkTm9kZUlkKCkKLSAgewotICAgIHJldHVybiBwcmV2aW91c1NlbGVjdGVkTm9kZUlkXzsKLSAgfQotCi0gIHB1YmxpYyBOb2RlIGdldFByZXZpb3VzU2VsZWN0ZWROb2RlKCkKLSAgewotICAgIHJldHVybiAoTm9kZSlub2RlVGFibGVfLmdldChTdHJpbmcudmFsdWVPZihwcmV2aW91c1NlbGVjdGVkTm9kZUlkXykpOwotICB9Ci0KLSAgLyoqCi0gICogUmVuZGVyIHRoZSBIVE1MIHRyZWUgdmlldyBmb3IgdGhpcyBub2RlLgotICAqIEBwYXJhbSBIdHRwU2VydmxldFJlc3BvbnNlIEZvciBlbmNvZGluZyBVUkxzLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBIVE1MIHJlcHJlc2VudGluZyB0aGUgdHJlZSB2aWV3LgotICAqLwotICBwdWJsaWMgU3RyaW5nIHJlbmRlclRyZWVWaWV3KEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgdHJlZVZpZXcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgcm9vdE5vZGVfLnJlbmRlck5vZGUocmVzcG9uc2UsdHJlZVZpZXcsIiIsZmFsc2UpOwotICAgIHJldHVybiB0cmVlVmlldy50b1N0cmluZygpOwotICB9Ci0gIAotICAvKioKLSAgKiBNYWtlIHRoZSBwcm92aWRlZCBub2RlIGlzIHZpc2libGUgYnkgZW5zdXJpbmcgdGhhdCBpdHMgYW5jZXN0b3JzIGFyZSB2aXNpYmxlLgotICAqIEBwYXJhbSBOb2RlIFRoZSBub2RlIHRvIGJlIG1hZGUgdmlzaWJsZS4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gSW5kaWNhdG9yIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgdHJlZXZpZXcgbmVlZHMgcmVmcmVzaGluZyAoaS5lLiBhbiBhbmNlc3RvciB3YXMgbm90IHZpc2libGUpLgotICAqLwotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBtYWtlTm9kZVZpc2libGUoTm9kZSBub2RlKQotICB7Ci0gICAgYm9vbGVhbiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCA9IGZhbHNlOwotICAgIHdoaWxlICgobm9kZSA9IG5vZGUuZ2V0UGFyZW50KCkpICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKCFub2RlLmlzT3BlbigpKQotICAgICAgewotICAgICAgICByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCA9IHRydWU7Ci0gICAgICAgIG5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4odHJ1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaDsKLSAgfQotICAKLSAgLyoqCi0gICogTWFrZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgdmlzaWJsZSBieSBlbnN1cmluZyB0aGF0IGl0cyBhbmNlc3RvcnMgYXJlIHZpc2libGUuCi0gICovCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIG1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCkKLSAgewotICAgIHJldHVybiBtYWtlTm9kZVZpc2libGUoZ2V0U2VsZWN0ZWROb2RlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1BlcnNwZWN0aXZlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1BlcnNwZWN0aXZlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NWYxNGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9QZXJzcGVjdGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQZXJzcGVjdGl2ZSBleHRlbmRzIE1lc3NhZ2VQcm92aWRlcgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWVfOwotCi0gIHB1YmxpYyBQZXJzcGVjdGl2ZShTdHJpbmcgbWVzc2FnZUJ1bmRsZUZpbGVOYW1lLENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKG1lc3NhZ2VCdW5kbGVGaWxlTmFtZSk7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIG1lc3NhZ2VRdWV1ZV8gPSBuZXcgTWVzc2FnZVF1ZXVlKCk7Ci0gIH0KLQotICBwdWJsaWMgTWVzc2FnZVF1ZXVlIGdldE1lc3NhZ2VRdWV1ZSgpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZVF1ZXVlXzsKLSAgfQotCi0gIHB1YmxpYyBDb250cm9sbGVyIGdldENvbnRyb2xsZXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQYW5lc0ZpbGUoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRGcmFtZXNldHNGaWxlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvY2Vzc0ZyYW1lc2V0c0Zvcm0oKTsKLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBlcnNwZWN0aXZlSWQoKTsKLQotICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciB0aGUgcGVyc3BlY3RpdmUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbnRpYXRlZC4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5pdFBlcnNwZWN0aXZlKFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKTsKLSAgCi0gIC8vIE5vZGUgbWFuYWdlciBmb3IgdGhlIG5hdmlnYXRvci90cmVlIGNvbnRlbnQgcGFnZQotICBwdWJsaWMgYWJzdHJhY3QgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvU2VjdGlvbkhlYWRlckluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvU2VjdGlvbkhlYWRlckluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdlNWU0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1NlY3Rpb25IZWFkZXJJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBTZWN0aW9uSGVhZGVySW5mbwotewotICBwcml2YXRlIFN0cmluZyBjb250YWluZXJJZF87Ci0gIHByaXZhdGUgYm9vbGVhbiBkeW5hbWljXzsKLSAgcHJpdmF0ZSBPYmplY3Qgb3RoZXJQcm9wZXJ0aWVzXzsKLQotICBwdWJsaWMgU2VjdGlvbkhlYWRlckluZm8oKQotICB7Ci0gICAgY2xlYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyKCkKLSAgewotICAgIGNvbnRhaW5lcklkXyA9ICIiOwotICAgIGR5bmFtaWNfID0gdHJ1ZTsKLSAgICBvdGhlclByb3BlcnRpZXNfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENvbnRhaW5lcklkKFN0cmluZyBjb250YWluZXJJZCkKLSAgewotICAgIGNvbnRhaW5lcklkXyA9IGNvbnRhaW5lcklkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRDb250YWluZXJJZCgpCi0gIHsKLSAgICByZXR1cm4gY29udGFpbmVySWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZW5hYmxlRHluYW1pYyhib29sZWFuIGlzRW5hYmxlZCkKLSAgewotICAgIGR5bmFtaWNfID0gaXNFbmFibGVkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNEeW5hbWljKCkKLSAgewotICAgIHJldHVybiBkeW5hbWljXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldE90aGVyUHJvcGVydGllcyhPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgb3RoZXJQcm9wZXJ0aWVzXyA9IG9iamVjdDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBPYmplY3QgZ2V0T3RoZXJQcm9wZXJ0aWVzKCkKLSAgewotICAgIHJldHVybiBvdGhlclByb3BlcnRpZXNfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1NldERlZmF1bHRWaWV3VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9TZXREZWZhdWx0Vmlld1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5MWI5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1NldERlZmF1bHRWaWV3VG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2V0RGVmYXVsdFZpZXdUb29sIGV4dGVuZHMgQWN0aW9uVG9vbAotewotICBwdWJsaWMgU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodmlld1Rvb2xNYW5hZ2VyLCJpbWFnZXMvdG9wX2VuYWJsZWQuZ2lmIiwiaW1hZ2VzL3RvcF9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YmZiOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzOwotCi0vLyBBIGNsYXNzIGZvciByZXByZXNlbnRpbmcgdG9vbGJhciB0b29scy4KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBUb29sCi17Ci0gIHByb3RlY3RlZCBUb29sTWFuYWdlciB0b29sTWFuYWdlcl87Ci0gIHByaXZhdGUgU3RyaW5nIGVuYWJsZWRJbWFnZUxpbmtfOwotICBwcml2YXRlIFN0cmluZyBoaWdobGlnaHRlZEltYWdlTGlua187Ci0gIHByaXZhdGUgU3RyaW5nIGFsdF87Ci0gIHByb3RlY3RlZCBpbnQgdG9vbElkXzsKLSAgcHJvdGVjdGVkIGJ5dGUgdG9vbFR5cGVfOwotCi0gIHB1YmxpYyBUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2VMaW5rLFN0cmluZyBoaWdobGlnaHRlZEltYWdlTGluayxTdHJpbmcgYWx0LGJ5dGUgdG9vbFR5cGUpCi0gIHsKLSAgICB0b29sTWFuYWdlcl8gPSB0b29sTWFuYWdlcjsKLSAgICBlbmFibGVkSW1hZ2VMaW5rXyA9IGVuYWJsZWRJbWFnZUxpbms7Ci0gICAgaGlnaGxpZ2h0ZWRJbWFnZUxpbmtfID0gaGlnaGxpZ2h0ZWRJbWFnZUxpbms7Ci0gICAgYWx0XyA9IGFsdDsKLSAgICB0b29sSWRfID0gdG9vbE1hbmFnZXJfLmFkZFRvb2wodGhpcyk7Ci0gICAgdG9vbFR5cGVfID0gdG9vbFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSk7Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uVGFyZ2V0KCkKLSAgewotICAgIHJldHVybiBGcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGdlbmVyYXRlT25Nb3VzZVZhbHVlKFN0cmluZ0J1ZmZlciB2YWx1ZSxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLFN0cmluZyBmdWxsSW1hZ2VMaW5rKQotICB7Ci0gICAgdmFsdWUuYXBwZW5kKCJzcmM9JyIpLmFwcGVuZChyZXNwb25zZS5lbmNvZGVVUkwoZnVsbEltYWdlTGluaykpLmFwcGVuZCgnXCcnKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgcmVuZGVyVG9vbChIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIEhhc2h0YWJsZSBqc0ltYWdlUHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBTdHJpbmdCdWZmZXIgcHJvcGVydHlWYWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmcgZnVsbEVuYWJsZWRJbWFnZUxpbmsgPSBjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChlbmFibGVkSW1hZ2VMaW5rXyk7Ci0gICAgZ2VuZXJhdGVPbk1vdXNlVmFsdWUocHJvcGVydHlWYWx1ZSxyZXNwb25zZSxmdWxsRW5hYmxlZEltYWdlTGluayk7Ci0gICAgaW50IHByb3BlcnR5VmFsdWVMZW5ndGggPSBwcm9wZXJ0eVZhbHVlLmxlbmd0aCgpOwotICAgIGpzSW1hZ2VQcm9wZXJ0aWVzLnB1dCgiY2xhc3MiLCJub3JtYWwiKTsKLSAgICBqc0ltYWdlUHJvcGVydGllcy5wdXQoIm9uTW91c2VPdXQiLHByb3BlcnR5VmFsdWUuYXBwZW5kKCI7bW91c2VvdXQodGhpcykiKS50b1N0cmluZygpKTsKLSAgICBwcm9wZXJ0eVZhbHVlLmRlbGV0ZShwcm9wZXJ0eVZhbHVlTGVuZ3RoLHByb3BlcnR5VmFsdWUubGVuZ3RoKCkpOwotICAgIGpzSW1hZ2VQcm9wZXJ0aWVzLnB1dCgib25Nb3VzZVVwIixwcm9wZXJ0eVZhbHVlLmFwcGVuZCgiO21vdXNldXAodGhpcykiKS50b1N0cmluZygpKTsKLSAgICBwcm9wZXJ0eVZhbHVlLnNldExlbmd0aCgwKTsKLSAgICBnZW5lcmF0ZU9uTW91c2VWYWx1ZShwcm9wZXJ0eVZhbHVlLHJlc3BvbnNlLGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGhpZ2hsaWdodGVkSW1hZ2VMaW5rXykpOwotICAgIHByb3BlcnR5VmFsdWVMZW5ndGggPSBwcm9wZXJ0eVZhbHVlLmxlbmd0aCgpOwotICAgIGpzSW1hZ2VQcm9wZXJ0aWVzLnB1dCgib25Nb3VzZU92ZXIiLHByb3BlcnR5VmFsdWUuYXBwZW5kKCI7bW91c2VvdmVyKHRoaXMpIikudG9TdHJpbmcoKSk7Ci0gICAgcHJvcGVydHlWYWx1ZS5kZWxldGUocHJvcGVydHlWYWx1ZUxlbmd0aCxwcm9wZXJ0eVZhbHVlLmxlbmd0aCgpKTsKLSAgICBqc0ltYWdlUHJvcGVydGllcy5wdXQoIm9uTW91c2VET3duIixwcm9wZXJ0eVZhbHVlLmFwcGVuZCgiO21vdXNlZG93bih0aGlzKSIpLnRvU3RyaW5nKCkpOwotCi0gICAgU3RyaW5nIGltYWdlVGFnID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxmdWxsRW5hYmxlZEltYWdlTGluayxhbHRfLCIxNiIsIjE2Iixqc0ltYWdlUHJvcGVydGllcyk7Ci0gICAgcmV0dXJuIEhUTUxVdGlscy5nZXRIVE1MTGlua1RhZyhyZXNwb25zZSxjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihmYWxzZSkpLGdldFNlbGVjdFRvb2xBY3Rpb25UYXJnZXQoKSxudWxsLGltYWdlVGFnLG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRvb2xNYW5hZ2VyIGdldFRvb2xNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiB0b29sTWFuYWdlcl87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFRvb2xJZCgpCi0gIHsKLSAgICByZXR1cm4gdG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBieXRlIGdldFRvb2xUeXBlKCkKLSAgewotICAgIHJldHVybiB0b29sVHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RW5hYmxlZEltYWdlTGluaygpCi0gIHsKLSAgICByZXR1cm4gZW5hYmxlZEltYWdlTGlua187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SGlnaGxpZ2h0ZWRJbWFnZUxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGhpZ2hsaWdodGVkSW1hZ2VMaW5rXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBbHRUZXh0KCkKLSAgewotICAgIHJldHVybiBhbHRfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRBbHRUZXh0KFN0cmluZyBhbHQpCi0gIHsKLSAgCWFsdF8gPSBhbHQ7Ci0gIH0gIAotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRBY3Rpb25MaW5rKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1Rvb2xNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1Rvb2xNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYTkxYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ub29sTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBUb29sTWFuYWdlcgotewotICBwcml2YXRlIFZlY3RvciB0b29sc187Ci0gIHByaXZhdGUgaW50IHNlbGVjdGVkVG9vbElkXzsKLSAgcHJpdmF0ZSBOb2RlIG5vZGVfOwotCi0gIHB1YmxpYyBUb29sTWFuYWdlcihOb2RlIG5vZGUpCi0gIHsKLSAgICB0b29sc18gPSBuZXcgVmVjdG9yKCk7Ci0gICAgc2VsZWN0ZWRUb29sSWRfID0gMDsKLSAgICBub2RlXyA9IG5vZGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFNlbGVjdGVkVG9vbElkKCkKLSAgewotICAgIHJldHVybiBzZWxlY3RlZFRvb2xJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IHNldFNlbGVjdGVkVG9vbElkKGludCB0b29sSWQpCi0gIHsKLSAgICBpZiAodG9vbElkID49IDAgJiYgdG9vbElkIDwgdG9vbHNfLnNpemUoKSkKLSAgICAgIHNlbGVjdGVkVG9vbElkXyA9IHRvb2xJZDsKLSAgICByZXR1cm4gc2VsZWN0ZWRUb29sSWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBhZGRUb29sKFRvb2wgdG9vbCkKLSAgewotICAgIHRvb2xzXy5hZGRFbGVtZW50KHRvb2wpOwotICAgIHJldHVybiB0b29sc18uc2l6ZSgpLTE7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVG9vbCBnZXRUb29sKGludCB0b29sSWQpCi0gIHsKLSAgICBpZiAodG9vbElkID49MCAmJiB0b29sSWQgPCBnZXROdW1iZXJPZlRvb2xzKCkpCi0gICAgICByZXR1cm4gKFRvb2wpdG9vbHNfLmVsZW1lbnRBdCh0b29sSWQpOwotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgTGlzdCBnZXRUb29scygpCi0gIHsKLSAgICByZXR1cm4gdG9vbHNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRvb2wgZ2V0U2VsZWN0ZWRUb29sKCkKLSAgewotICAgIGlmIChzZWxlY3RlZFRvb2xJZF8gPj0wICYmIHNlbGVjdGVkVG9vbElkXyA8IGdldE51bWJlck9mVG9vbHMoKSkKLSAgICAgIHJldHVybiAoVG9vbCl0b29sc18uZWxlbWVudEF0KHNlbGVjdGVkVG9vbElkXyk7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldE51bWJlck9mVG9vbHMoKQotICB7Ci0gICAgcmV0dXJuIHRvb2xzXy5zaXplKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXROb2RlKCkKLSAgewotICAgIHJldHVybiBub2RlXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9UcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1RyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNiOThkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1RyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcidzIHRyYW5zcG9ydCBwcm92aWRlcgotICogZXh0ZW5zaW9ucyBhbmQgaW5zdGFudGlhdGluZyB0aGVtIHdoZW4gbmVlZGVkLiAKLSAqLwotcHVibGljIGNsYXNzIFRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZfVFJBTlNQT1JUX1BST1ZJREVSUyA9ICJUUkFOU1BPUlRfUFJPVklERVJTIjsJCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVEVOU0lPTl9OQU1FICAgICAgICAgICA9ICJ3c2VUcmFuc3BvcnRQcm92aWRlciI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfVFJBTlNQT1JUX1BST1ZJREVSICA9ICJzb2FwVHJhbnNwb3J0UHJvdmlkZXIiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVVJJICAgICAgICAgICAgPSAibmFtZXNwYWNlVVJJIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBTlNQT1JUX1VSSSAgICAgICAgICAgID0gInRyYW5zcG9ydFVSSSI7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeSBpbnN0YW5jZSA9IG51bGw7Ci0JCi0JcHJpdmF0ZSBMaXN0IHByZWZlcnJlZElEcyAgICAgICAgPSBudWxsOyAKLQlwcml2YXRlIE1hcCBzb2FwUHJvdmlkZXJFbGVtZW50cyA9IG51bGw7Ci0JcHJpdmF0ZSBNYXAgc29hcFByb3ZpZGVyQ2FjaGUgICAgPSBudWxsOwotCQotCS8qKgotCSAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBUcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5LgotCSAqICAKLQkgKiBAcmV0dXJuIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeSBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpCi0JCQlpbnN0YW5jZSA9IG5ldyBUcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5KCk7Ci0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JCi0JLyoKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKi8KLQlwcml2YXRlIFRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkoKSB7CQkKLQkJCi0JCS8vIGdldCB0aGUgcHJlZmVyZW5jZSB2YWx1ZQotCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJU3RyaW5nIHRyYW5zcG9ydFByb3ZpZGVycyA9IHByZWZlcmVuY2VzLmdldFN0cmluZyhQUkVGX1RSQU5TUE9SVF9QUk9WSURFUlMpLnJlcGxhY2VBbGwoIlxccyIsICIiKTsKLQkJCi0JCS8vIHNwbGl0IGl0IGludG8gYSBsaXN0IG9mIHByZWZlcnJlZCB0cmFuc3BvcnQgcHJvdmlkZXIgSURzCi0JCWlmICh0cmFuc3BvcnRQcm92aWRlcnMubGVuZ3RoKCkgPT0gMCkKLQkJCXByZWZlcnJlZElEcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZWxzZQkJCQotCQkJcHJlZmVycmVkSURzID0gQXJyYXlzLmFzTGlzdCh0cmFuc3BvcnRQcm92aWRlcnMuc3BsaXQoIiwiKSk7Ci0JCQotCQkvLyBub3cgZmluZCBhbGwgZXh0ZW5kZXJzCi0JCUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZ3MgPSAKLQkgICAgCXJlZ2lzdHJ5LmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihFeHBsb3JlclBsdWdpbi5JRCwgRVhURU5TSU9OX05BTUUpOyAKLQotCSAgICAvLyBjdXJyZW50bHkgd2Ugb25seSBoYXZlIG9uZSB0eXBlIG9mIHByb3ZpZGVyczogU09BUCB0cmFuc3BvcnQgcHJvdmlkZXJzCi0JICAgIHNvYXBQcm92aWRlckVsZW1lbnRzID0gbmV3IEhhc2h0YWJsZSgpOwkgICAgCi0JICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlncy5sZW5ndGg7IGkrKykgewkgICAgCQkgICAgCQotICAgIAkJaWYgKFNPQVBfVFJBTlNQT1JUX1BST1ZJREVSLmVxdWFscyhjb25maWdzW2ldLmdldE5hbWUoKSkpIHsJICAgIAkJCQotICAgIAkJCVN0cmluZyBpZCA9IGNvbmZpZ3NbaV0uZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIAkJCXNvYXBQcm92aWRlckVsZW1lbnRzLnB1dChpZCwgY29uZmlnc1tpXSk7ICAgIAkJCSAgICAJCQkJCi0gICAgCQl9CSAgICAJCSAgICAJCi0JICAgIH0KLQkgICAgCi0JICAgIHNvYXBQcm92aWRlckNhY2hlID0gbmV3IEhhc2h0YWJsZSgpOwotCX0JCQotCQotCS8qCi0JICogRGV0ZXJtaW5lIGlmIHRoZSBVUklzIG1hdGNoLgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiB1cmlNYXRjaChTdHJpbmcgcmVxdWlyZWQsIFN0cmluZyBzdXBwb3J0ZWQpIHsKLQkJCi0JCS8vIG5vdCBzcGVjaWZpZWQgbWVhbiBzdXBwb3J0IGV2ZXJ5dGhpbmcKLQkJaWYgKHN1cHBvcnRlZCA9PSBudWxsKQotCQkJcmV0dXJuIHRydWU7Ci0JCQkJCi0JCWlmICghcmVxdWlyZWQuZW5kc1dpdGgoIi8iKSkgIHJlcXVpcmVkICs9ICIvIjsKLQkJaWYgKCFzdXBwb3J0ZWQuZW5kc1dpdGgoIi8iKSkgc3VwcG9ydGVkICs9ICIvIjsKLQkJCi0JCXJldHVybiByZXF1aXJlZC5lcXVhbHMoc3VwcG9ydGVkKTsKLQl9Ci0JCi0JLyoKLQkgKiBDcmVhdGUgdGhlIGV4dGVuc2lvbiBmb3IgdGhlIGdpdmVuIGtleSwgYnV0IG9ubHkgaWYgaXQgc3VwcG9ydHMgdGhlIGJpbmRpbmcgbmFtZXNwYWNlIGFuZCB0cmFuc3BvcnQKLQkgKi8KLQlwcml2YXRlIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgY3JlYXRlRXh0ZW5zaW9uKE9iamVjdCBrZXksIFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyB0cmFuc3BvcnRVUkkpIHsKLQkJCi0JCUlDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gKElDb25maWd1cmF0aW9uRWxlbWVudCkgc29hcFByb3ZpZGVyRWxlbWVudHMuZ2V0KGtleSk7CQkJCQkJCi0JCWlmIChlbGVtZW50ID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCWJvb2xlYW4gc3VwcG9ydHNOYW1lc3BhY2UgPSB1cmlNYXRjaChuYW1lc3BhY2VVUkksIGVsZW1lbnQuZ2V0QXR0cmlidXRlKE5BTUVTUEFDRV9VUkkpKTsKLQkJYm9vbGVhbiBzdXBwb3J0c1RyYW5zcG9ydCA9IHVyaU1hdGNoKHRyYW5zcG9ydFVSSSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoVFJBTlNQT1JUX1VSSSkpOwkJCQotCQkKLQkJaWYgKHN1cHBvcnRzTmFtZXNwYWNlICYmIHN1cHBvcnRzVHJhbnNwb3J0KSB7CQkJCi0JCQkKLQkJCVN0cmluZyBwcm92aWRlckNsYXNzSUQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLQkJCU9iamVjdCBvYmogPSBudWxsOwotCQkJCi0JCQl0cnkgewotCQkJCS8vIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGUgdHJhbnNwb3J0IHByb3ZpZGVyIGNhY2hlZCwKLQkJCQkvLyBpZiBub3QsIHRoZW4gY3JlYXRlIG9uZQotCQkJCXN5bmNocm9uaXplZCAoc29hcFByb3ZpZGVyQ2FjaGUpIHsKLQkJCQkJb2JqID0gc29hcFByb3ZpZGVyQ2FjaGUuZ2V0KHByb3ZpZGVyQ2xhc3NJRCk7IAkJCQkJCi0JCQkJCWlmIChvYmogPT0gbnVsbCkgewkJCQkJCi0JCQkJCQlvYmogPSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0JCQkJCQlzb2FwUHJvdmlkZXJDYWNoZS5wdXQocHJvdmlkZXJDbGFzc0lELCBvYmopOwotCQkJCQl9CQkJCQkKLQkJCQl9Ci0JCQkJcmV0dXJuIChJU09BUFRyYW5zcG9ydFByb3ZpZGVyKSBvYmo7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7fQkJCQkJCi0JCX0KLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgYW4gSVNPQVBUcmFuc3BvcnRQcm92aWRlciB0aGF0IHN1cHBvcnRzIHRoZSBiaW5kaW5nIG5hbWVzcGFjZSBhbmQgdHJhbnNwb3J0LiAgVGhpcyBtZXRob2Qgd2lsbAotCSAqIGZpcnN0IGxvb2sgZm9yIHByZWZlcnJlZCBJRHMgZGVmaW5lZCB1c2luZyB0aGUgVFJBTlNQT1JUX1BST1ZJREVSUyBwcmVmZXJlbmNlIGtleS4gIElmIGEgc3VpdGFibGUKLQkgKiBwcm92aWRlciBpcyBub3QgZm91bmQsIGl0IHdpbGwgdGhlbiBsb29rIGF0IGFsbCBvdGhlciBleHRlbmRlcnMgaW4gbm9uLWRldGVybWluaXN0aWMgb3JkZXIuCi0JICogCi0JICogQHBhcmFtIG5hbWVzcGFjZVVSSSBUaGUgYmluZGluZyBuYW1lc3BhY2UgVVJJCi0JICogQHBhcmFtIHRyYW5zcG9ydFVSSSBUaGUgYmluZGluZyB0cmFuc3BvcnQgVVJJCi0JICogCi0JICogQHJldHVybiBSZXR1cm5zIGEgc3VpdGFibGUgSVNPQVBUcmFucG9ydFByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gYmluZGluZyBpbmZvcm1hdGlvbiwgb3IgbnVsbAotCSAqIGlmIHRoZXJlJ3Mgbm8gbWF0Y2guCi0JICovCi0JcHVibGljIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyB0cmFuc3BvcnRVUkkpIHsKLQkKLQkJSVNPQVBUcmFuc3BvcnRQcm92aWRlciBwcm92aWRlciA9IG51bGw7Ci0JCQotCQlJdGVyYXRvciBpdGVyID0gcHJlZmVycmVkSURzLml0ZXJhdG9yKCk7Ci0JCQotCQkvLyBjaGVjayBwcmVmZXJyZWQgSURzIGZpcnN0Ci0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJcHJvdmlkZXIgPSBjcmVhdGVFeHRlbnNpb24oaXRlci5uZXh0KCksIG5hbWVzcGFjZVVSSSwgdHJhbnNwb3J0VVJJKTsKLQkJCWlmIChwcm92aWRlciAhPSBudWxsKQotCQkJCXJldHVybiBwcm92aWRlcjsKLQkJfQotCQkKLQkJaXRlciA9IHNvYXBQcm92aWRlckVsZW1lbnRzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQotCQkvLyBjaGVjayByZXN0IG9mIHRoZSBwcm92aWRlcnMKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3Qga2V5ID0gaXRlci5uZXh0KCk7Ci0JCQotCQkJLy8gYWxyZWFkeSBjaGVja2VkIHRoZSBwcmVmZXJyZWQgSURzCi0JCQlpZiAocHJlZmVycmVkSURzLmNvbnRhaW5zKGtleSkpCi0JCQkJY29udGludWU7Ci0JCQkKLQkJCXByb3ZpZGVyID0gY3JlYXRlRXh0ZW5zaW9uKGtleSwgbmFtZXNwYWNlVVJJLCB0cmFuc3BvcnRVUkkpOwotCQkJaWYgKHByb3ZpZGVyICE9IG51bGwpCi0JCQkJcmV0dXJuIHByb3ZpZGVyOwkJCQotCQl9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1ZpZXdUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1ZpZXdUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNTk2MDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9WaWV3VG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFZpZXdUb29sIGV4dGVuZHMgRm9ybVRvb2wKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgdmlld1Rvb2xNYW5hZ2Vyc187Ci0KLSAgcHVibGljIFZpZXdUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2VMaW5rLFN0cmluZyBoaWdobGlnaHRlZEltYWdlTGluayxTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsZW5hYmxlZEltYWdlTGluayxoaWdobGlnaHRlZEltYWdlTGluayxhbHQpOwotICAgIHRvb2xUeXBlXyA9IFRvb2xUeXBlcy5WSUVXOwotICAgIHZpZXdUb29sTWFuYWdlcnNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgYWRkU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlcixpbnQgaW5kZXgpOwotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBhZGRUb29scyhUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsaW50IGluZGV4KTsKLQotICBwdWJsaWMgZmluYWwgVG9vbE1hbmFnZXIgY3JlYXRlVG9vbE1hbmFnZXIoaW50IHZpZXdJZCkKLSAgewotICAgIFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciA9IG5ldyBUb29sTWFuYWdlcih0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpKTsKLSAgICBhZGRUb29scyh2aWV3VG9vbE1hbmFnZXIsdmlld0lkKTsKLSAgICBhZGRTZXREZWZhdWx0Vmlld1Rvb2wodmlld1Rvb2xNYW5hZ2VyLHZpZXdJZCk7Ci0gICAgdmlld1Rvb2xNYW5hZ2Vyc18ucHV0KFN0cmluZy52YWx1ZU9mKHZpZXdJZCksdmlld1Rvb2xNYW5hZ2VyKTsKLSAgICByZXR1cm4gdmlld1Rvb2xNYW5hZ2VyOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRvb2xNYW5hZ2VyIGdldFRvb2xNYW5hZ2VyKGludCB2aWV3SWQpCi0gIHsKLSAgICByZXR1cm4gKFRvb2xNYW5hZ2VyKSh2aWV3VG9vbE1hbmFnZXJzXy5nZXQoU3RyaW5nLnZhbHVlT2Yodmlld0lkKSkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJWaWV3VG9vbE1hbmFnZXIoaW50IHZpZXdJZCkKLSAgewotICAgIHZpZXdUb29sTWFuYWdlcnNfLnJlbW92ZShTdHJpbmcudmFsdWVPZih2aWV3SWQpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyVmlld1Rvb2xNYW5hZ2VycygpCi0gIHsKLSAgICB2aWV3VG9vbE1hbmFnZXJzXy5jbGVhcigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjODdlNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwdWJsaWMgQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgLy8gVGhlIGNsaWVudCBKYXZhc2NyaXB0IGVuZm9yY2VzIHRoZSBydWxlIHRoYXQgYXQgbGVhc3Qgb25lIGl0ZW0gd2FzIHNlbGVjdGVkIGJlZm9yZSB0aGUgZm9ybSBjYW4gYmUgc3VibWl0dGVkLgotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMsc2VsZWN0ZWROb2RlSWRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTKTsKLSAgICBBZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgQWRkVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBmb3IgKGludCBpPTA7aTxzZWxlY3RlZE5vZGVJZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELHNlbGVjdGVkTm9kZUlkc1tpXSk7Ci0gICAgICBpZiAoYWN0aW9uLmZhdm9yaXRlRXhpc3RzKCkpIHsKLSAgICAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlIG5vZGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChzZWxlY3RlZE5vZGVJZHNbaV0pKTsKLSAgICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbm9kZS5nZXROb2RlTmFtZSgpOwotICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0ZBVk9SSVRFX0FMUkVBRFlfRVhJU1RTIixub2RlTmFtZSkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBhY3Rpb24ucnVuKCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NmI3NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmFzc2VydGlvbi5QdWJsaXNoZXJBc3NlcnRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBleHRlbmRzIENvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24KLXsKLSAgcHVibGljIEFkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotCi0gICAgLy8gaWRzIGZyb20gdWRkaU9iamVjdHNfdGFibGUuanNwCi0gICAgU3RyaW5nW10gc2VsZWN0ZWRCdXNJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICBpZiAoc2VsZWN0ZWRCdXNJZHMgPT0gbnVsbCB8fCBzZWxlY3RlZEJ1c0lkcy5sZW5ndGggPT0gMCkgewotICAgICAgLy8gU3luY2hyb25pemUgY2xpZW50IHZpZXcgYW5kIHNlcnZlciBtb2RlbCAodWRkaU9iamVjdF90YWJsZS5qc3ApCi0gICAgICBzeW5jaHJvbml6ZVVERElPYmplY3RUYWJsZSgpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQsIHNlbGVjdGVkQnVzSWRzKTsKLSAgICAgIC8vIFN5bmNocm9uaXplIGNsaWVudCB2aWV3IGFuZCBzZXJ2ZXIgbW9kZWwgKHVkZGlPYmplY3RfdGFibGUuanNwKQotICAgICAgc3luY2hyb25pemVVRERJT2JqZWN0VGFibGUoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmdbXSBhc3NlcnRpb25UeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFKTsKLSAgICBpZiAoYXNzZXJ0aW9uVHlwZXMgIT0gbnVsbCAmJiBhc3NlcnRpb25UeXBlcy5sZW5ndGggPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRSwgYXNzZXJ0aW9uVHlwZXMpOwotICAgIGVsc2UKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0KLSAgICBTdHJpbmdbXSBkaXJlY3Rpb25zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX0RJUkVDVElPTik7Ci0gICAgaWYgKGRpcmVjdGlvbnMgIT0gbnVsbCAmJiBkaXJlY3Rpb25zLmxlbmd0aCA+IDApCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19ESVJFQ1RJT04sIGRpcmVjdGlvbnMpOwotICAgIGVsc2UKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGxvZyBpbgotICAgIGlmICghaXNMb2dnZWRJbl8pIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgfQotICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHB1Ymxpc2hVUkwpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVzZXJJRCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgIH0KLSAgCi0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySUQpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUklEIikpOwotICAgICAgfQotCi0gICAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgbG9nIGluIGZpcnN0Ci0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgcmVnaXN0cnlFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLCB1c2VySUQsIHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gdGUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGllLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKG1lLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBVRERJUHJveHkgcHJveHkgPSByZWdpc3RyeUVsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldENyZWQoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotCi0gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIG93bmVkIGJ1c2luZXNzCi0gICAgLy8gaWYgbm90LCB0aGUgQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkCi0gICAgaWYgKCFpc0J1c2luZXNzT3duZWQoYnVzRWxlbWVudCkpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RfT1dORURfQlVTSU5FU1MiKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgU3RyaW5nW10gYXNzZXJ0aW9uVHlwZXMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRSk7Ci0gICAgICBTdHJpbmdbXSBkaXJlY3Rpb25zID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX0RJUkVDVElPTik7Ci0gICAgICBTdHJpbmcgdGhpc0J1c2luZXNzS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0KLSAgICAgIC8vIGdldCBhbGwgc2VsZWN0ZWQgYnVzaW5lc3NlcwotICAgICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5KTsKLSAgICAgIFZlY3RvciBzZWxlY3RlZEJ1c2luZXNzZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMpOwotICAgICAgRW51bWVyYXRpb24gZSA9IHNlbGVjdGVkQnVzaW5lc3Nlcy5lbGVtZW50cygpOwotICAgICAgaWYgKCFlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgLy8gY3JlYXRlIGEgdmVjdG9yIG9mIHB1Ymxpc2hlciBhc3NlcnRpb25zIGJhc2VkIG9uIGFsbCB0aGUgc2VsZWN0ZWQgYnVzaW5lc3NlcwotICAgICAgVmVjdG9yIHB1YkFzc2VydGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGludCBpID0gMDsKLSAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxlID0gKExpc3RFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgQnVzaW5lc3NFbnRpdHkgc3AgPSAoQnVzaW5lc3NFbnRpdHkpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmID0gbmV3IEtleWVkUmVmZXJlbmNlKGFzc2VydGlvblR5cGVzW2ldLCBhc3NlcnRpb25UeXBlc1tpXSwgVE1vZGVsLlJFTEFUSU9OU0hJUFNfVE1PREVMX0tFWSk7Ci0gICAgICAgIGlmIChJbnRlZ2VyLnBhcnNlSW50KGRpcmVjdGlvbnNbaV0pID09IFVERElBY3Rpb25JbnB1dHMuRElSRUNUSU9OX1RPKQotICAgICAgICAgIHB1YkFzc2VydGlvblZlY3Rvci5hZGQobmV3IFB1Ymxpc2hlckFzc2VydGlvbihzcC5nZXRCdXNpbmVzc0tleSgpLCB0aGlzQnVzaW5lc3NLZXksIGtleWVkUmVmKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwdWJBc3NlcnRpb25WZWN0b3IuYWRkKG5ldyBQdWJsaXNoZXJBc3NlcnRpb24odGhpc0J1c2luZXNzS2V5LCBzcC5nZXRCdXNpbmVzc0tleSgpLCBrZXllZFJlZikpOwotICAgICAgICBpKys7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHByb3h5LmFkZF9wdWJsaXNoZXJBc3NlcnRpb25zKC4uLikKLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHByb3h5LmFkZF9wdWJsaXNoZXJBc3NlcnRpb25zKHJlZ2lzdHJ5RWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBwdWJBc3NlcnRpb25WZWN0b3IpOwotCi0gICAgICAvLyByZWZyZXNoIHB1Ymxpc2hlciBhc3NlcnRpb25zIGlmZiBwcm94eSByZXBvcnRzIHN1Y2Nlc3MKLSAgICAgIGlmIChyZXBvcnQuc3VjY2VzcygpKSB7Ci0gICAgICAgIHNlbGVjdGVkQnVzaW5lc3Nlcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgICBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBzaG93UEFBY3Rpb24gPSBuZXcgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHNob3dQQUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICAgIE9iamVjdCBpZHMgPSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQpOwotICAgICAgICBpZiAoaWRzICE9IG51bGwpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQsIGlkcyk7Ci0gICAgICAgIHNob3dQQUFjdGlvbi5ydW4oKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHJlcG9ydC5zdWNjZXNzKCk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBEaXNwb3NpdGlvblJlcG9ydCByZXBvcnQgPSB1ZGRpZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotCSAgVmVjdG9yIHJlcG9ydEVyckluZm8gPSByZXBvcnQuZ2V0UmVzdWx0VmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcG9ydEVyckluZm8uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoKChSZXN1bHQpIHJlcG9ydEVyckluZm8uZ2V0KGkpKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIkV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYzMzZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0ZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5CdXNpbmVzc05vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VJbnRlcmZhY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIEFkZFRvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHVibGljIEFkZFRvRmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlZ2lzdHJ5RXhpc3RzKFN0cmluZyByZWdpc3RyeU5hbWUsTm9kZSByZWdpc3RyeU5vZGUpCi0gIHsKLSAgICByZWdpc3RyeU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9OQU1FLHJlZ2lzdHJ5TmFtZSk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlRXhpc3RzKHRhYmxlLEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGJ1c2luZXNzRXhpc3RzKFN0cmluZyBidXNpbmVzc05hbWUsTm9kZSBidXNpbmVzc05vZGUpCi0gIHsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpYnVzaW5lc3NOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19OQU1FLGJ1c2luZXNzTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0tFWSwgYnVzaW5lc3NLZXkpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSk7Ci0gIH0KLQotICAgcHVibGljIGZpbmFsIGJvb2xlYW4gc2VydmljZUV4aXN0cyhTdHJpbmcgc2VydmljZU5hbWUsTm9kZSBzZXJ2aWNlTm9kZSkKLSAgewotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKS5nZXRTZXJ2aWNlS2V5KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX05BTUUsc2VydmljZU5hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfS0VZLHNlcnZpY2VLZXkpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHNlcnZpY2VJbnRlcmZhY2VFeGlzdHMoU3RyaW5nIHNpTmFtZSxOb2RlIHNpTm9kZSkKLSAgewotICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClzaU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgdE1vZGVsS2V5ID0gc2lFbGVtZW50LmdldFRNb2RlbCgpLmdldFRNb2RlbEtleSgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxzaU5hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfSU5RVUlSWV9BUEksaW5xdWlyeVVSTCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9LRVksdE1vZGVsS2V5KTsKLSAgICByZXR1cm4gZmF2b3JpdGVFeGlzdHModGFibGUsRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWRkUmVnaXN0cnlUb0Zhdm9yaXRlcyhTdHJpbmcgcmVnaXN0cnlOYW1lLE5vZGUgcmVnaXN0cnlOb2RlKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX1BVQkxJU0hfQVBJLHB1Ymxpc2hVUkwpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfSU5RVUlSWV9BUEksaW5xdWlyeVVSTCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9OQU1FLHJlZ2lzdHJ5TmFtZSk7Ci0gICAgRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzRW51bSA9IHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCk7Ci0gICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0VudW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX0NBVEVHT1JJRVNfRU5VTSx1c2VyRGVmaW5lZENhdGVnb3JpZXNFbnVtKTsKLSAgICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1BMVUdJTl9NRVRBREFUQV9ESVJFQ1RPUlksY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSk7Ci0gICAgfQotICAgIHJldHVybiBhZGRUb0Zhdm9yaXRlcyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBhZGRCdXNpbmVzc1RvRmF2b3JpdGVzKFN0cmluZyBidXNpbmVzc05hbWUsTm9kZSBidXNpbmVzc05vZGUpCi0gIHsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpYnVzaW5lc3NOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19OQU1FLGJ1c2luZXNzTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0tFWSwgYnVzaW5lc3NLZXkpOwotICAgIHJldHVybiBhZGRUb0Zhdm9yaXRlcyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGFkZFNlcnZpY2VUb0Zhdm9yaXRlcyhTdHJpbmcgc2VydmljZU5hbWUsTm9kZSBzZXJ2aWNlTm9kZSkKLSAgewotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKS5nZXRTZXJ2aWNlS2V5KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX05BTUUsc2VydmljZU5hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfS0VZLHNlcnZpY2VLZXkpOwotICAgIHJldHVybiBhZGRUb0Zhdm9yaXRlcyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWRkU2VydmljZUludGVyZmFjZVRvRmF2b3JpdGVzKFN0cmluZyBzaU5hbWUsTm9kZSBzaU5vZGUpCi0gIHsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2lOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHRNb2RlbEtleSA9IHNpRWxlbWVudC5nZXRUTW9kZWwoKS5nZXRUTW9kZWxLZXkoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsc2lOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0lOUVVJUllfQVBJLGlucXVpcnlVUkwpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIGFkZFRvRmF2b3JpdGVzKHRhYmxlLEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCkKLSAgewotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpOwotICAgIFN0cmluZyBub2RlTmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFJlZ2lzdHJ5Tm9kZSkKLSAgICAgIHJldHVybiByZWdpc3RyeUV4aXN0cyhub2RlTmFtZSxub2RlKTsKLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgICAgcmV0dXJuIGJ1c2luZXNzRXhpc3RzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSkKLSAgICAgIHJldHVybiBzZXJ2aWNlRXhpc3RzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlTm9kZSkKLSAgICAgIHJldHVybiBzZXJ2aWNlSW50ZXJmYWNlRXhpc3RzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICBTdHJpbmcgbm9kZU5hbWUgPSBub2RlLmdldE5vZGVOYW1lKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgYm9vbGVhbiBhZGRUb0Zhdm9yaXRlc1Jlc3VsdCA9IGZhbHNlOwotICAgIGlmIChub2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgIHsKLSAgICAgIGFkZFRvRmF2b3JpdGVzUmVzdWx0ID0gYWRkUmVnaXN0cnlUb0Zhdm9yaXRlcyhub2RlTmFtZSxub2RlKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKTsKLSAgICAgIGlmIChlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICB7Ci0gICAgICAgICAgQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsID0gKENhdGVnb3J5TW9kZWwpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgIFRocm93YWJsZSBlcnJvckV4Y2VwdGlvbiA9IGNhdGVnb3J5TW9kZWwuZ2V0RXJyb3JFeGNlcHRpb24oKTsKLSAgICAgICAgICBpZiAoZXJyb3JFeGNlcHRpb24gIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBhcmdzID0ge2NhdGVnb3J5TW9kZWwuZ2V0RGlzcGxheU5hbWUoKSxlcnJvckV4Y2VwdGlvbi5nZXRNZXNzYWdlKCl9OwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9TQVZJTkdfQ0FURUdPUllfREFUQSIsYXJncykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgICAgYWRkVG9GYXZvcml0ZXNSZXN1bHQgPSBhZGRCdXNpbmVzc1RvRmF2b3JpdGVzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSkKLSAgICAgIGFkZFRvRmF2b3JpdGVzUmVzdWx0ID0gYWRkU2VydmljZVRvRmF2b3JpdGVzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlTm9kZSkKLSAgICAgIGFkZFRvRmF2b3JpdGVzUmVzdWx0ID0gYWRkU2VydmljZUludGVyZmFjZVRvRmF2b3JpdGVzKG5vZGVOYW1lLG5vZGUpOwotICAgIGlmIChhZGRUb0Zhdm9yaXRlc1Jlc3VsdCkKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19GQVZPUklURV9BRERFRCIsbm9kZU5hbWUpKTsKLSAgICBlbHNlCi0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0ZBVk9SSVRFX05PVF9BRERFRCIsbm9kZU5hbWUpKTsKLSAgICByZXR1cm4gYWRkVG9GYXZvcml0ZXNSZXN1bHQ7ICAgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGFkZFRvRmF2b3JpdGVzKEhhc2h0YWJsZSB0YWJsZSwgU3RyaW5nIHJlbCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBmYXZOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2Um9vdEVsZW1lbnQgPSBmYXZOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGZhdlJvb3RFbGVtZW50LmdldEVsZW1lbnRzKHJlbCk7Ci0gICAgaWYgKCFlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZmF2Rm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICByZXR1cm4gZmF2Rm9sZGVyRWxlbWVudC5hZGRGYXZvcml0ZSh0YWJsZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cyhIYXNodGFibGUgdGFibGUsIFN0cmluZyByZWwpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgZmF2Tm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFRyZWVFbGVtZW50IGZhdlJvb3RFbGVtZW50ID0gZmF2Tm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBmYXZSb290RWxlbWVudC5nZXRFbGVtZW50cyhyZWwpOwotICAgIGlmICghZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZhdkZvbGRlckVsZW1lbnQgPSAoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIGZhdkZvbGRlckVsZW1lbnQuZmF2b3JpdGVFeGlzdHModGFibGUpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4M2Q2ZjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci0KLXB1YmxpYyBjbGFzcyBCdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwcml2YXRlIFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24gcmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbl87Ci0gIHB1YmxpYyBCdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25fID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8gPSByZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uXy5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBOb2RlIGJ1c2luZXNzTm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNpbmVzc0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWJ1c2luZXNzTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEJ1c2luZXNzRW50aXR5IGJ1c2luZXNzRW50aXR5ID0gYnVzaW5lc3NFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgTGlzdEVsZW1lbnQgYnVzTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQoYnVzaW5lc3NFbnRpdHkpOwotICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkuYWRkRWxlbWVudChidXNMaXN0RWxlbWVudCk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25fLnByb2Nlc3NPdGhlcnMocGFyc2VyLGZvcm1Ub29sUEkpOwotICAgIGlmICghcHJvcGVydHlUYWJsZV8uY29udGFpbnNLZXkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLGJ1c2luZXNzRW50aXR5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiByZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uXy5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYzcwODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotCi1wdWJsaWMgY2xhc3MgQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHByaXZhdGUgUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gcmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25fOwotCi0gIHB1YmxpYyBCdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICByZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbl8gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8gPSByZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbl8uZ2V0UHJvcGVydHlUYWJsZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgTm9kZSBidXNpbmVzc05vZGUgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzaW5lc3NFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClidXNpbmVzc05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBCdXNpbmVzc0VudGl0eSBidXNpbmVzc0VudGl0eSA9IGJ1c2luZXNzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgIExpc3RFbGVtZW50IGJ1c0xpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KGJ1c2luZXNzRW50aXR5KTsKLSAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LmFkZEVsZW1lbnQoYnVzTGlzdEVsZW1lbnQpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOyAKLSAgICBib29sZWFuIHJlc3VsdCA9IHJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uXy5wcm9jZXNzT3RoZXJzKHBhcnNlcixmb3JtVG9vbFBJKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGVfLmNvbnRhaW5zS2V5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUikpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLGJ1c2luZXNzRW50aXR5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiByZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbl8ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5NDU4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5CdXNpbmVzc05vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci0KLXB1YmxpYyBjbGFzcyBCdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBCdXNpbmVzc05vZGUgYnVzTm9kZV87Ci0gIHB1YmxpYyBCdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIGJ1c05vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uSlNQLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZUJ1c2luZXNzKCkKLSAgewotICAgIGludCBidXNOb2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBidXNOb2RlXyA9IChCdXNpbmVzc05vZGUpbm9kZU1hbmFnZXJfLmdldE5vZGUoYnVzTm9kZUlkKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpYnVzTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCkpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgQnVzaW5lc3NFbnRpdHkgc3AgPSAoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0KLSAgICBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9CVVNJTkVTU19TRVJWSUNFUyIsYnVzTm9kZV8uZ2V0Tm9kZU5hbWUoKSkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLHNwKTsgICAgCi0gICAgCi0gICAgTGlzdEVsZW1lbnQgYnVzaW5lc3NMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChzcCk7Ci0gICAgYnVzaW5lc3NMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oYnVzTm9kZV8uZ2V0Tm9kZUlkKCksYnVzTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLGJ1c05vZGVfLmdldFZpZXdJZCgpKTsKLSAgICBWZWN0b3IgYnVzaW5lc3NMaXN0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGJ1c2luZXNzTGlzdFZlY3Rvci5hZGRFbGVtZW50KGJ1c2luZXNzTGlzdEVsZW1lbnQpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxidXNpbmVzc0xpc3RWZWN0b3IpOwotICAgIAotICAgIAotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yRm9sZGVyTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYmViODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uIGV4dGVuZHMgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBDbGVhck5hdmlnYXRvckZvbGRlck5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yRm9sZGVyTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgZWxlbWVudC5kaXNjb25uZWN0UmVsKGVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhNb2RlbENvbnN0YW50cy5SRUxfQ0hJTERSRU4pKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWY2M2U0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkNsZWFyTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbiBleHRlbmRzIENsZWFyTm9kZUFjdGlvbgotewotICBwdWJsaWMgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELFN0cmluZy52YWx1ZU9mKGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZUlkKCkpKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIm5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJwcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJzdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkyZTU2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGNsYXNzIENsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIENsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGlmIChzZWxlY3RlZE5vZGVJZHMgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMsc2VsZWN0ZWROb2RlSWRzKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nW10gc2VsZWN0ZWROb2RlSWRzID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMpOwotICAgIGlmIChzZWxlY3RlZE5vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxzZWxlY3RlZE5vZGVJZHMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxzZWxlY3RlZE5vZGVJZHNbaV0pOwotICAgICAgICBhY3Rpb24ucnVuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Db21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Db21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NDAzOTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZWdpc3RlcmVkSW5mbzsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIENvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLQotICBwcm90ZWN0ZWQgUmVnaXN0cnlOb2RlIHJlZ2lzdHJ5Tm9kZV87Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzTG9nZ2VkSW5fOwotCi0gIHB1YmxpYyBDb21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotCi0gICAgcmVnaXN0cnlOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotICAgIGlmIChyZWdpc3RyeU5vZGVfICE9IG51bGwpCi0gICAgICBpc0xvZ2dlZEluXyA9ICgoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKSkuaXNMb2dnZWRJbigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgc3luY2hyb25pemVVRERJT2JqZWN0VGFibGUoKSB7Ci0gICAgU3RyaW5nW10gc2VsZWN0ZWRCdXNJZHMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleSk7Ci0gICAgVmVjdG9yIGJ1c2luZXNzVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TKTsKLSAgICBMaXN0TWFuYWdlciBidXNpbmVzc0NvcHkgPSAoTGlzdE1hbmFnZXIpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OU19DT1BZKTsKLSAgICBpZiAoc2VsZWN0ZWRCdXNJZHMgPT0gbnVsbCB8fCBzZWxlY3RlZEJ1c0lkcy5sZW5ndGggPD0gMCkgewotICAgICAgYnVzaW5lc3NWZWN0b3IucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIGJ1c2luZXNzQ29weS5jbGVhcigpOwotICAgIH0KLSAgICBFbnVtZXJhdGlvbiBlID0gYnVzaW5lc3NDb3B5LmdldExpc3RFbGVtZW50cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBib29sZWFuIGlzSWRGb3VuZCA9IGZhbHNlOwotICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoTGlzdEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaW50IGxpc3RFbGVtZW50Vmlld0lkID0gbGUuZ2V0Vmlld0lkKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlbGVjdGVkQnVzSWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChsaXN0RWxlbWVudFZpZXdJZCA9PSBJbnRlZ2VyLnBhcnNlSW50KHNlbGVjdGVkQnVzSWRzW2ldKSkgewotICAgICAgICAgIGlzSWRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghaXNJZEZvdW5kKQotICAgICAgICBidXNpbmVzc1ZlY3Rvci5yZW1vdmUobGUpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzQnVzaW5lc3NPd25lZChCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCkgewotICAgIGJvb2xlYW4gaXNCdXNpbmVzc093bmVkID0gZmFsc2U7Ci0gICAgU3RyaW5nIGlzQnVzaW5lc3NPd25lZFN0cmluZyA9IGJ1c0VsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuSVNfQlVTSU5FU1NfT1dORUQpOwotICAgIGlmIChpc0J1c2luZXNzT3duZWRTdHJpbmcgIT0gbnVsbCkgewotICAgICAgaXNCdXNpbmVzc093bmVkID0gQm9vbGVhbi52YWx1ZU9mKGlzQnVzaW5lc3NPd25lZFN0cmluZykuYm9vbGVhblZhbHVlKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGlzTG9nZ2VkSW5fKSB7Ci0gICAgICB0cnkgewotICAgICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICAgIFJlZ2lzdGVyZWRJbmZvIHJpID0gcHJveHkuZ2V0X3JlZ2lzdGVyZWRJbmZvKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSk7Ci0gICAgICAgIFZlY3RvciBiZVZlY3RvciA9IHJpLmdldEJ1c2luZXNzSW5mb3MoKS5nZXRCdXNpbmVzc0luZm9WZWN0b3IoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGJlVmVjdG9yLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHsgCi0gICAgICAgICAgQnVzaW5lc3NJbmZvIGJpID0gKEJ1c2luZXNzSW5mbylpdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGJpLmdldEJ1c2luZXNzS2V5KCkuZXF1YWxzKGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpKSkKLSAgICAgICAgICB7ICAKLSAgICAgICAgICAgIGlzQnVzaW5lc3NPd25lZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnVzRWxlbWVudC5zZXRQcm9wZXJ0eUFzU3RyaW5nKFVERElNb2RlbENvbnN0YW50cy5JU19CVVNJTkVTU19PV05FRCwgU3RyaW5nLnZhbHVlT2YoaXNCdXNpbmVzc093bmVkKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgfQotICAgIHJldHVybiBpc0J1c2luZXNzT3duZWQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxODRiNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5Db21wbGV0aW9uU3RhdHVzOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGV4dGVuZHMgQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbgotewotICBwdWJsaWMgQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIGlmIChyZWdpc3RyeU5vZGVfID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLQotICAgIC8vIGlkcyBmcm9tIHVkZGlPYmplY3RzX3RhYmxlCi0gICAgU3RyaW5nW10gc2VsZWN0ZWRCdXNJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICBpZiAoc2VsZWN0ZWRCdXNJZHMgIT0gbnVsbCAmJiBzZWxlY3RlZEJ1c0lkcy5sZW5ndGggPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lELCBzZWxlY3RlZEJ1c0lkcyk7Ci0gICAgLy8gU3luY2hyb25pemUgY2xpZW50IHZpZXcgYW5kIHNlcnZlciBtb2RlbCAodWRkaU9iamVjdF90YWJsZS5qc3ApCi0gICAgc3luY2hyb25pemVVRERJT2JqZWN0VGFibGUoKTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gbG9nIGluCi0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICB9Ci0gIAotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocHVibGlzaFVSTCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1BVQkxJU0hfVVJMIikpOwotICAgICAgfQotCi0gICAgICBpZiAodXNlcklEICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgfQotICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJRCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIGlkcyBmcm9tIHB1Ymxpc2hlciBhc3NlcnRpb24gdGFibGUKLSAgICBTdHJpbmdbXSBwdWJBc3NlcnRpb25zVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQpOwotICAgIGlmIChwdWJBc3NlcnRpb25zVmlld0lkcyA9PSBudWxsIHx8IHB1YkFzc2VydGlvbnNWaWV3SWRzLmxlbmd0aCA9PSAwKQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICBlbHNlCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQsIHB1YkFzc2VydGlvbnNWaWV3SWRzKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCBsb2cgaW4gZmlyc3QKLSAgICBpZiAoIWlzTG9nZ2VkSW5fKSB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJRCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICB0cnkgewotICAgICAgICByZWdpc3RyeUVsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsIHVzZXJJRCwgcGFzc3dvcmQpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiB0ZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh0ZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UobWUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSAgICAgIAotICAgIH0KLQotICAgIFVERElQcm94eSBwcm94eSA9IHJlZ2lzdHJ5RWxlbWVudC5nZXRQcm94eSgpOwotICAgIHJlZ2lzdHJ5RWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0Q3JlZCgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgTGlzdE1hbmFnZXIgcHViQXNzZXJ0aW9ucyA9IGJ1c0VsZW1lbnQuZ2V0UHVibGlzaGVyQXNzZXJ0aW9ucygpOwotCi0gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIG93bmVkIGJ1c2luZXNzCi0gICAgLy8gaWYgbm90LCB0aGUgQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkCi0gICAgaWYgKCFpc0J1c2luZXNzT3duZWQoYnVzRWxlbWVudCkpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RfT1dORURfQlVTSU5FU1MiKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgU3RyaW5nW10gcHViQXNzZXJ0aW9uVmlld0lkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQpOwotICAgICAgVmVjdG9yIHB1YkFzc2VydGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwdWJBc3NlcnRpb25WaWV3SWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KHB1YkFzc2VydGlvblZpZXdJZHNbaV0pOwotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IHB1YkFzc2VydGlvbnMuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCBwdWJBc3NlcnRpb25FbGVtZW50ID0gKFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmICghKHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0U3RhdHVzKCkuZXF1YWxzKENvbXBsZXRpb25TdGF0dXMuQ09NUExFVEUpKSkKLSAgICAgICAgICBwdWJBc3NlcnRpb25WZWN0b3IuYWRkKHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0UHVibGlzaGVyQXNzZXJ0aW9uKCkpOwotICAgICAgfQotCi0gICAgICBpZiAocHViQXNzZXJ0aW9uVmVjdG9yLnNpemUoKSA8PSAwKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fSU5DT01QTEVURV9BU1NFUlRJT05fU0VMRUNURUQiKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gcHJveHkuYWRkX3B1Ymxpc2hlckFzc2VydGlvbnMocmVnaXN0cnlFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIHB1YkFzc2VydGlvblZlY3Rvcik7Ci0gICAgICAvL3JlcG9ydCBzdGF0dXMKLQkgIFZlY3RvciByZXBvcnRFcnJJbmZvID0gcmVwb3J0LmdldFJlc3VsdFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZXBvcnRFcnJJbmZvLnNpemUoKTsgaisrKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCgoUmVzdWx0KSByZXBvcnRFcnJJbmZvLmdldChqKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKSk7Ci0gICAgICB9Ci0KLSAgICAgIFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIHNob3dQQUFjdGlvbiA9IG5ldyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHNob3dQQUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICBPYmplY3QgaWRzID0gcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICAgIGlmIChpZHMgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQsIGlkcyk7Ci0gICAgICBzaG93UEFBY3Rpb24ucnVuKCk7Ci0KLSAgICAgIHJldHVybiByZXBvcnQuc3VjY2VzcygpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gdWRkaWUuZ2V0RGlzcG9zaXRpb25SZXBvcnQoKTsKLQkgIFZlY3RvciByZXBvcnRFcnJJbmZvID0gcmVwb3J0LmdldFJlc3VsdFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZXBvcnRFcnJJbmZvLnNpemUoKTsgaisrKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCgoUmVzdWx0KSByZXBvcnRFcnJJbmZvLmdldChqKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9GaW5kQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9GaW5kQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MzdmOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvRmluZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlQYXJlbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUXVlcnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeVRyYW5zZmVyVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGaW5kQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBRdWVyeUVsZW1lbnQgcXVlcnlFbGVtZW50XzsKLSAgcHJvdGVjdGVkIFN0cmluZyBzdWJRdWVyeUtleV87Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzU3ViUXVlcnlHZXRfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5XzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeUl0ZW1fOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIHByb3RlY3RlZCBSZWdpc3RyeU5vZGUgcmVnTm9kZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1JlZnJlc2hBY3Rpb25fOwotCi0gIHB1YmxpYyBGaW5kQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHF1ZXJ5RWxlbWVudF8gPSBudWxsOwotICAgIHN1YlF1ZXJ5S2V5XyA9IG51bGw7Ci0gICAgaXNTdWJRdWVyeUdldF8gPSBmYWxzZTsKLSAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSBmYWxzZTsKLSAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotICAgIGlzUmVmcmVzaEFjdGlvbl8gPSBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIC8vIFNldHVwIGZvciBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUiwgcGFyc2VyKTsKLQotICAgIG5ld1N1YlF1ZXJ5XyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEKTsKLSAgICBTdHJpbmcgaXNTdWJRdWVyeUdldFN0cmluZyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgIG5ld1N1YlF1ZXJ5SXRlbV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0pOwotICAgIHN1YlF1ZXJ5S2V5XyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIFN0cmluZyBxdWVyeU5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgZm9ybVRvb2xQSS5jbGVhckVycm9ycygpOwotCi0gICAgaWYgKG5ld1N1YlF1ZXJ5XyAhPSBudWxsICYmIG5ld1N1YlF1ZXJ5Xy5sZW5ndGgoKSA+IDApCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotICAgICAgCi0gICAgaWYgKGlzU3ViUXVlcnlHZXRTdHJpbmcgIT0gbnVsbCkKLSAgICAgIGlzU3ViUXVlcnlHZXRfID0gQm9vbGVhbi52YWx1ZU9mKGlzU3ViUXVlcnlHZXRTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgaWYgKHF1ZXJ5TmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSxxdWVyeU5hbWUpOwotCi0gICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocXVlcnlOYW1lKSAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1FVRVJZX05BTUUiKSk7Ci0gICAgfQotCi0gICAgaWYgKCFwcm9jZXNzT3RoZXJzKHBhcnNlcixmb3JtVG9vbFBJKSAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIAotICAgIGZvciAoaW50IGk9MDtpPHJlbW92ZWRQcm9wZXJ0aWVzXy5zaXplKCk7aSsrKQotICAgICAgZm9ybVRvb2xQSS5yZW1vdmVQcm9wZXJ0eShyZW1vdmVkUHJvcGVydGllc18uZWxlbWVudEF0KGkpKTsKLSAgICBmb3JtVG9vbFBJLnVwZGF0ZVByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZV8pOwotICAgICAgCi0gICAgLy8gUHJvY2VzcyBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4gSWYgdmFsaWQsIHRoZXNlIHNob3VsZCBiZSBzZXQgaW4gdGhlIGZvcm1Ub29sIChub3QgdGhlIGZvcm1Ub29sUEkpLgotICAgIFN0cmluZyBvd25lZENoZWNrZWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQpOwotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGJvb2xlYW4gdmFsaWRhdGVBdXRoZW50aWNhdGlvbiA9IChvd25lZENoZWNrZWQgIT0gbnVsbCkgJiYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkgJiYgIW92ZXJyaWRlQXV0aGVudGljYXRpb25WYWxpZGF0aW9uKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICB9ICAgICAgCi0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiB2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocHVibGlzaFVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICB9Ci0KLSAgICBpZiAodXNlcklkICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIH0KLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmIHZhbGlkYXRlQXV0aGVudGljYXRpb24gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySWQpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICB9Ci0KLSAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICB9ICAgICAgICAKLSAgICAgIAotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIG92ZXJyaWRlQXV0aGVudGljYXRpb25WYWxpZGF0aW9uKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUluaXRpYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0KCkKLSAgewotICAgIHJldHVybiBpc1N1YlF1ZXJ5R2V0XzsKLSAgfSAgICAKLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN1YlF1ZXJ5S2V5KCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUtleV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5KCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5SXRlbSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlJdGVtXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UmVmcmVzaEFjdGlvbihib29sZWFuIGlzUmVmcmVzaEFjdGlvbikKLSAgewotICAgIGlzUmVmcmVzaEFjdGlvbl8gPSBpc1JlZnJlc2hBY3Rpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUmVmcmVzaEFjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaXNSZWZyZXNoQWN0aW9uXzsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZFF1ZXJ5Tm9kZSgpCi0gIHsKLSAgICAvLyBJZiB0aGUgcXVlcnlFbGVtZW50IGFscmVhZHkgZXhpc3RzLCByZW1vdmUgaXQgZmlyc3QuCi0gICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IHF1ZXJ5RWxlbWVudF8uZ2V0TmFtZSgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFF1ZXJ5UGFyZW50RWxlbWVudCBxdWVyeVBhcmVudEVsZW1lbnQgPSByZWdFbGVtZW50LmdldFF1ZXJ5UGFyZW50RWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBxdWVyeVBhcmVudEVsZW1lbnQuZ2V0UXVlcmllcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFF1ZXJ5RWxlbWVudCBxZSA9IChRdWVyeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHFlLmdldE5hbWUoKS5lcXVhbHMocXVlcnlOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgU3ViUXVlcnlUcmFuc2ZlclRhcmdldCBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0ID0gKFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQpcWUuZ2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VUKTsKLSAgICAgICAgaWYgKHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgIT0gbnVsbCAmJiAocWUuZ2V0UXVlcnlUeXBlKCkgPT0gcXVlcnlFbGVtZW50Xy5nZXRRdWVyeVR5cGUoKSkpCi0gICAgICAgICAgcXVlcnlFbGVtZW50Xy5zZXRQcm9wZXJ0eUFzT2JqZWN0KFVERElNb2RlbENvbnN0YW50cy5TVUJRVUVSWV9UUkFOU0ZFUl9UQVJHRVQsc3ViUXVlcnlUcmFuc2ZlclRhcmdldCk7Ci0gICAgICAgIHFlLmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghaXNSZWZyZXNoQWN0aW9uXykKLSAgICB7Ci0gICAgICAvLyBXZSBjYW4gbWFrZSBzYWZlIGFzc3VtcHRpb25zIGFib3V0IHRoZSBub2RlIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLgotICAgICAgaWYgKHN1YlF1ZXJ5S2V5XyAhPSBudWxsICYmIHN1YlF1ZXJ5S2V5Xy5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwYXJlbnRRdWVyeUtleTsKLSAgICAgICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBzdWJRdWVyeUtleV8ubGFzdEluZGV4T2YoJzonKTsKLSAgICAgICAgaWYgKGxhc3RTZXBhcmF0b3JQb3MgPT0gLTEpCi0gICAgICAgICAgcGFyZW50UXVlcnlLZXkgPSAiIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmVudFF1ZXJ5S2V5ID0gc3ViUXVlcnlLZXlfLnN1YnN0cmluZygwLGxhc3RTZXBhcmF0b3JQb3MpOwotICAgICAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgcGFyZW50Rm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMocGFyZW50UXVlcnlLZXkpOwotICAgICAgICBPYmplY3QgcXVlcnlJdGVtID0gcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pOwotICAgICAgICBPYmplY3QgcXVlcnlTdHlsZUJ1cyA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTKTsKLSAgICAgICAgT2JqZWN0IHF1ZXJ5U3R5bGVTZXIgPSBwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMpOwotICAgICAgICBPYmplY3QgcXVlcnlTdHlsZVNlckludCA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgICBIYXNodGFibGUgcGFyZW50UXVlcnlEYXRhID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICBpZiAocXVlcnlJdGVtICE9IG51bGwpCi0gICAgICAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sIHF1ZXJ5SXRlbSk7Ci0gICAgICAgIGlmIChxdWVyeVN0eWxlQnVzICE9IG51bGwpCi0gICAgICAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsIHF1ZXJ5U3R5bGVCdXMpOwotICAgICAgICBpZiAocXVlcnlTdHlsZVNlciAhPSBudWxsKQotICAgICAgICAgIHBhcmVudFF1ZXJ5RGF0YS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUywgcXVlcnlTdHlsZVNlcik7Ci0gICAgICAgIGlmIChxdWVyeVN0eWxlU2VySW50ICE9IG51bGwpCi0gICAgICAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUywgcXVlcnlTdHlsZVNlckludCk7Ci0gICAgICAgIHF1ZXJ5RWxlbWVudF8uc2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VULG5ldyBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLHN1YlF1ZXJ5S2V5XyxwYXJlbnRRdWVyeURhdGEpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcXVlcnlQYXJlbnRFbGVtZW50LmNvbm5lY3QocXVlcnlFbGVtZW50XyxVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBRdWVyeU5vZGUgcXVlcnlOb2RlID0gKFF1ZXJ5Tm9kZSkocmVnTm9kZV8uZ2V0Q2hpbGROb2RlKHF1ZXJ5UGFyZW50RWxlbWVudCkuZ2V0Q2hpbGROb2RlKHF1ZXJ5RWxlbWVudF8pKTsKLSAgICBpbnQgbmV3U2VsZWN0ZWROb2RlSWQ7Ci0gICAgLy8gSWYgdGhlcmUgaXMgb25seSAxIHJlc3VsdCwgc2VsZWN0IHRoZSByZXN1bHQuIE90aGVyd2lzZSwgc2VsZWN0IHRoZSBxdWVyeSBub2RlIHRvIHByZXNlbnQgYSBzdW1tYXJ5LgotICAgIGlmIChxdWVyeU5vZGUuZ2V0Q2hpbGROb2RlcygpLnNpemUoKSA9PSAxICYmIChzdWJRdWVyeUtleV8gPT0gbnVsbCB8fCBzdWJRdWVyeUtleV8ubGVuZ3RoKCkgPT0gMCkpCi0gICAgICBuZXdTZWxlY3RlZE5vZGVJZCA9ICgoTm9kZSkocXVlcnlOb2RlLmdldENoaWxkTm9kZXMoKS5lbGVtZW50QXQoMCkpKS5nZXROb2RlSWQoKTsKLSAgICBlbHNlCi0gICAgICBuZXdTZWxlY3RlZE5vZGVJZCA9IHF1ZXJ5Tm9kZS5nZXROb2RlSWQoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQobmV3U2VsZWN0ZWROb2RlSWQpOwotICAgIHF1ZXJ5Tm9kZS5zZXRGaW5kVG9vbFByb3BlcnRpZXModGhpcyk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxzZWxlY3RlZFRvb2wuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYodHJ1ZSkpOwotICB9Ci0gIAotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCArIDFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoIC0gMV0gPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcihjb250cm9sbGVyXyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDdlMGFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0xvZ2luQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLAotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMzY0NDkgYnJ1bnNzZW5AdXMuaWJtLmNvbSAtIFZpbmNlIEJydW5zc2VuCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBjbGJ1c2hAdXMuaWJtLmNvbSAtIENocmlzdG9waGVyIEJ1c2ggIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YS5ybWkuQWxyZWFkeUJvdW5kRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVnaXN0ZXJlZEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgTG9naW5BZHZhbmNlZEFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24gewotICAgcHVibGljIExvZ2luQWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sIFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXwotICAgICAgICAgICAgLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsIFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQpKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VULCBTdHJpbmcKLSAgICAgICAgICAgIC52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTLCBTdHJpbmcKLSAgICAgICAgICAgIC52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1JFU1VMVFMpKTsKLSAgIH0KLQotICAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKQotICAgICAgICAgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICAgIFN0cmluZyBvd25lZENoZWNrZWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQpOwotCi0gICAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgICAgaWYgKG93bmVkQ2hlY2tlZCAhPSBudWxsKQotICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQsIG93bmVkQ2hlY2tlZCk7Ci0gICAgICBlbHNlCi0gICAgICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX09XTkVEKTsKLQotICAgICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICAgfQotICAgCi0gICBwcml2YXRlIGJvb2xlYW4gYXR0ZW1wdGluZ0RvdWJsZUxvZ2luKCl7Ci0JICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0JICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0JICAgTm9kZSByb290Tm9kZSA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Um9vdE5vZGUoKTsKLSAgICAgICBWZWN0b3IgYWxsTm9kZXMgPSByb290Tm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgCi0gICAgICAgZm9yKGludCBrID0gMDsgayA8IGFsbE5vZGVzLnNpemUoKTsgaysrKXsKLSAgICAgIAkgTm9kZSBuID0gKE5vZGUpYWxsTm9kZXMuZ2V0KGspOwotICAgICAgCSBpZiAobiBpbnN0YW5jZW9mIFJlZ2lzdHJ5Tm9kZSl7Ci0gICAgICAJCSBSZWdpc3RyeUVsZW1lbnQgbXlFbGVtZW50ID0gKChSZWdpc3RyeUVsZW1lbnQpbi5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICAgIAkJIGlmIChuLmdldE5vZGVJZCgpICE9IHJlZ05vZGVfLmdldE5vZGVJZCgpICYmIHB1Ymxpc2hVUkwuZXF1YWxzKG15RWxlbWVudC5nZXRQdWJsaXNoVVJMKCkpKQotICAgICAgCQkJIGlmKHVzZXJJZC5lcXVhbHMobXlFbGVtZW50LmdldFVzZXJJZCgpKSkKLSAgICAgIAkJCQkgcmV0dXJuIHRydWU7Ci0gICAgICAJIH0KLSAgICAgICB9Ci0gICAgICAgcmV0dXJuIGZhbHNlOwotICAgfQotICAgCi0gICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKSB7Ci0gICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCIrKysrKyBUcnlpbmcgdG8gbG9naW4gKysrKysiKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7Ci0gICAgICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgICAgaW50IG1heFJlc3VsdHMgPSAzMDA7Ci0gICAgICAgICAKLSAgICAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhCi0gICAgICAgICAvLyBxdWVyeSBub2RlLgotICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KSByZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgCi0gICAgICAgICAgICAgICAgIAotICAgICAgICAgaWYoYXR0ZW1wdGluZ0RvdWJsZUxvZ2luKCkpCi0gICAgICAgIAkgdGhyb3cgbmV3IEFscmVhZHlCb3VuZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fTk9fTVVMVElQTEVfTE9HSU4iKSk7IAotICAgICAgICAgCi0gICAgICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCwgdXNlcklkLCBwYXNzd29yZCk7Ci0KLSAgICAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLQotICAgICAgICAgQnVzaW5lc3NJbmZvcyBidXNJbmZvcyA9IG51bGw7Ci0gICAgICAgICBUTW9kZWxJbmZvcyB0bUluZm9zID0gbnVsbDsKLQotICAgICAgICAgUmVnaXN0ZXJlZEluZm8gcmkgPSBwcm94eS5nZXRfcmVnaXN0ZXJlZEluZm8ocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpKTsKLSAgICAgICAgIGJ1c0luZm9zID0gcmkuZ2V0QnVzaW5lc3NJbmZvcygpOwotICAgICAgICAgdG1JbmZvcyA9IHJpLmdldFRNb2RlbEluZm9zKCk7Ci0KLSAgICAgICAgIGludCBmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA9IE1hdGgubWluKG1heFJlc3VsdHMsIGJ1c0luZm9zLnNpemUoKSk7Ci0gICAgICAgICBWZWN0b3IgYnVzaW5lc3NLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllczsgaSsrKSB7Ci0gICAgICAgICAgICBCdXNpbmVzc0luZm8gYnVzSW5mbyA9IChCdXNpbmVzc0luZm8pIGJ1c0luZm9zLmdldChpKTsKLSAgICAgICAgICAgIGJ1c2luZXNzS2V5cy5hZGRFbGVtZW50KGJ1c0luZm8uZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGlmIChmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA+IDApIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpIHsKLSAgICAgICAgICAgICAgIFZlY3RvciBiZVZlY3RvciA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbChidXNpbmVzc0tleXMpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICAgICAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IG51bGw7Ci0gICAgICAgICAgICAgICBCdXNpbmVzc1NlcnZpY2VzIGJzID0gbnVsbDsKLSAgICAgICAgICAgICAgIGludCBzaXplID0gYmVWZWN0b3Iuc2l6ZSgpOwotICAgICAgICAgICAgICAgaWYgKHNpemUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgYmUgPSAoQnVzaW5lc3NFbnRpdHkpIGJlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKGJlLCByZWdFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgIGJzID0gYmUuZ2V0QnVzaW5lc3NTZXJ2aWNlcygpOwotICAgICAgICAgICAgICAgICAgICAgaWYgKGJzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvciB2U2VydmljZXMgPSBicy5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXJ2aWNlcyA9IHZTZXJ2aWNlcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNlcnZpY2VzOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKGJzLmdldChqKSwgcmVnRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBtZXNzYWdlUXVldWUKLSAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU0VTX0ZPVU5EIiwgU3RyaW5nLnZhbHVlT2Yoc2l6ZSkpKTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLQotICAgICAgICAgaW50IGZpbmFsTnVtYmVyT2ZUTW9kZWxzID0gTWF0aC5taW4obWF4UmVzdWx0cywgdG1JbmZvcy5zaXplKCkpOwotICAgICAgICAgVmVjdG9yIHRNb2RlbEtleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbmFsTnVtYmVyT2ZUTW9kZWxzOyBpKyspIHsKLSAgICAgICAgICAgIFRNb2RlbEluZm8gdG1JbmZvID0gKFRNb2RlbEluZm8pIHRtSW5mb3MuZ2V0KGkpOwotICAgICAgICAgICAgdE1vZGVsS2V5cy5hZGRFbGVtZW50KHRtSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGlmIChmaW5hbE51bWJlck9mVE1vZGVscyA+IDApIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpIHsKLSAgICAgICAgICAgICAgIFZlY3RvciBmaW5hbFRNb2RlbFZlY3RvciA9IHByb3h5LmdldF90TW9kZWxEZXRhaWwodE1vZGVsS2V5cykuZ2V0VE1vZGVsVmVjdG9yKCk7Ci0KLSAgICAgICAgICAgICAgIGludCBzaXplID0gZmluYWxUTW9kZWxWZWN0b3Iuc2l6ZSgpOwotICAgICAgICAgICAgICAgaWYgKHNpemUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICBUTW9kZWwgdG0gPSBudWxsOwotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgIHRtID0gKFRNb2RlbCkgZmluYWxUTW9kZWxWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUodG0sIHJlZ0VsZW1lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIsIFN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlT2Yoc2l6ZSkpKTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLQotICAgICAgICAgaW50IGlkID0gMTsKLSAgICAgICAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gZ2V0UmVnaXN0cnlOb2RlKCk7Ci0KLSAgICAgICAgIC8vIHdlIGFyZSBsb2dnZWQgaW4gc28gY2hhbmdlIHRoZSBsb2dpblRvb2wgdG8gYWN0IGFzIGEgbG9nb3V0VG9vbDsKLSAgICAgICAgIHJlZ05vZGUuZ2V0TG9naW5Ub29sKCkuc2V0QWx0VGV4dCh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xPR09VVCIpKTsKLSAgICAgICAgIHJlZ05vZGUuZ2V0TG9naW5Ub29sKCkuc2V0VG9Mb2dvdXRMaW5rKCk7Ci0gICAgICAgICBTdHJpbmcgcmVnaXN0cnlOYW1lID0gcmVnRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgICAgICBTdHJpbmdbXSBzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgICAgIHNbMF0gPSByZWdpc3RyeU5hbWU7Ci0gICAgICAgICBzWzFdID0gdXNlcklkOwotICAgICAgICAgcmVnRWxlbWVudC5zZXROYW1lKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19MT0dHRURfSU5fTk9ERSIsIHMpKTsKLQotICAgICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzID4gMCkgewotICAgICAgICAgICAgTm9kZSBwYmVOb2RlID0gcmVnTm9kZS5nZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCgpKTsKLSAgICAgICAgICAgIGlkID0gcGJlTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgICAgIH0gZWxzZSBpZiAoZmluYWxOdW1iZXJPZlRNb2RlbHMgPiAwKSB7Ci0gICAgICAgICAgICBOb2RlIHBzaU5vZGUgPSByZWdOb2RlLmdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzRWxlbWVudCgpKTsKLSAgICAgICAgICAgIGlkID0gcHNpTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgICAgIH0gCi0gICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIk5vZGUgaWQgPSAiICsgaWQpOwotICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuc2V0U2VsZWN0ZWROb2RlSWQoaWQpOwotICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLQotICAgICAgICAgaWYgKChmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA8IDEpICYmIChmaW5hbE51bWJlck9mVE1vZGVscyA8IDEpKQotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX05PX0JVU0lORVNTRVNfT1JfU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIikpOwotCi0gICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0gY2F0Y2ggKFVERElFeGNlcHRpb24gZSkgewotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICAgIH0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0gY2F0Y2ggKEFscmVhZHlCb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgCSBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJBbHJlYWR5Qm91bmRFeGNlcHRpb24iKTsKLSAgICAJIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIGZhbHNlOwotICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Mb2dvdXRBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzZkZjM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBMb2dvdXRBZHZhbmNlZEFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24KLXsKLSAgcHVibGljIExvZ291dEFkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHJlZ05vZGVfLmdldExvZ2luVG9vbCgpLnNldFRvUmVnaXN0cnlMaW5rKCk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmIChyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkgewotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dvdXQoKTsKLSAgICAgICAgcmVnRWxlbWVudC5yZW1vdmUoKTsKLSAgICAgICAgcmVnTm9kZV8uZ2V0Tm9kZU1hbmFnZXIoKS5zZXRTZWxlY3RlZE5vZGVJZCgwKTsgIAotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhODZmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIDIwMDcwNDE5ICAgMTgyODY0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlczsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBzdWJRdWVyeUtleV87Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzU3ViUXVlcnlHZXRfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5XzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeUl0ZW1fOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIHByb3RlY3RlZCBSZWdpc3RyeU5vZGUgcmVnTm9kZV87Ci0KLSAgcHVibGljIE1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzdWJRdWVyeUtleV8gPSBudWxsOwotICAgIGlzU3ViUXVlcnlHZXRfID0gZmFsc2U7Ci0gICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0gICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBuZXdTdWJRdWVyeV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCk7Ci0gICAgU3RyaW5nIGlzU3ViUXVlcnlHZXRTdHJpbmcgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICBuZXdTdWJRdWVyeUl0ZW1fID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNKTsKLSAgICBzdWJRdWVyeUtleV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmdbXSByZWZlcmVuY2VkU2VydmljZXNDaGVja2JveGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlJFRkVSRU5DRURfU0VSVklDRV9TRUxFQ1RfU1RBVEUpOwotICAgIFN0cmluZ1tdIHNlcnZpY2VOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFKTsKLSAgICBTdHJpbmcgb3BlcmF0aW9uID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTik7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleV8pOwotICAgIGZvcm1Ub29sUEkuY2xlYXJFcnJvcnMoKTsKLQotICAgIGlmIChuZXdTdWJRdWVyeV8gIT0gbnVsbCAmJiBuZXdTdWJRdWVyeV8ubGVuZ3RoKCkgPiAwKQotICAgICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSBmYWxzZTsKLQotICAgIGlmIChpc1N1YlF1ZXJ5R2V0U3RyaW5nICE9IG51bGwpCi0gICAgICBpc1N1YlF1ZXJ5R2V0XyA9IEJvb2xlYW4udmFsdWVPZihpc1N1YlF1ZXJ5R2V0U3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTixvcGVyYXRpb24pOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OKTsKLQotICAgIGlmIChyZWZlcmVuY2VkU2VydmljZXNDaGVja2JveGVzICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5SRUZFUkVOQ0VEX1NFUlZJQ0VfU0VMRUNUX1NUQVRFLHJlZmVyZW5jZWRTZXJ2aWNlc0NoZWNrYm94ZXMpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUkVGRVJFTkNFRF9TRVJWSUNFX1NFTEVDVF9TVEFURSk7Ci0KLSAgICBpZiAoc2VydmljZU5vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igc2VydmljZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyk7Ci0gICAgICBpZiAoc2VydmljZXMgPT0gbnVsbCkKLSAgICAgICAgc2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBIYXNodGFibGUgcmVzdWx0SGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VOb2RlSWRzLmxlbmd0aDtpKyspCi0gICAgICAgIHJlc3VsdEhhc2gucHV0KHNlcnZpY2VOb2RlSWRzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlcy5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGlmIChyZXN1bHRIYXNoLmdldChTdHJpbmcudmFsdWVPZihsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKSkpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlcy5yZW1vdmVFbGVtZW50QXQoaSk7Ci0gICAgICAgICAgaS0tOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyxzZXJ2aWNlcyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0VSVklDRVMpOwotCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICB7Ci0gICAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhwdWJsaXNoVVJMKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1c2VySWQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklkKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaT0wO2k8cmVtb3ZlZFByb3BlcnRpZXNfLnNpemUoKTtpKyspCi0gICAgICBmb3JtVG9vbFBJLnJlbW92ZVByb3BlcnR5KHJlbW92ZWRQcm9wZXJ0aWVzXy5lbGVtZW50QXQoaSkpOwotICAgIGZvcm1Ub29sUEkudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgU3RyaW5nIG9wZXJhdGlvblN0cmluZyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OKTsKLSAgICBpbnQgb3BlcmF0aW9uID0gSW50ZWdlci5wYXJzZUludChvcGVyYXRpb25TdHJpbmcpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudCkoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlfKTsKLSAgICBWZWN0b3IgcmVmZXJlbmNlZFNlcnZpY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfUkVGRVJFTkNFRF9TRVJWSUNFUyk7Ci0gICAgYm9vbGVhbiBvcGVyYXRpb25SZXN1bHQgPSB0cnVlOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBjdXJyZW50U1AgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBzcCA9IChCdXNpbmVzc0VudGl0eSlwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoY3VycmVudFNQLmdldEJ1c2luZXNzS2V5KCkpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApOwotICAgICAgCi0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICAgIAotICAgICAgSGFzaHRhYmxlIHNlcnZpY2VzSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIFZlY3RvciBiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgc3dpdGNoIChvcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT05fQUREOgotICAgICAgICAgIFZlY3RvciBzZXJ2aWNlcyA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0VSVklDRVMpOyAgICAgICAgICAKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlcy5zaXplKCk7aSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIExpc3RFbGVtZW50IHNlcnZpY2VMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXNlcnZpY2VMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgIHNlcnZpY2VzSGFzaC5wdXQoYnMuZ2V0U2VydmljZUtleSgpLGJzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBsaXN0IG9mIEJ1c2luZXNzU2VydmljZXMgZm9yIHJvbGxiYWNrIG9wZXJhdGlvbnMuCi0gICAgICAgICAgYmFja3VwQW5kVXBkYXRlQnVzaW5lc3NTZXJ2aWNlcyhiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLHNwLHNlcnZpY2VzSGFzaCx0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgVmVjdG9yIGJlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgYmVWZWN0b3IuYWRkKHNwKTsKLSAgICAgICAgICAgIHNwID0gKEJ1c2luZXNzRW50aXR5KXByb3h5LnNhdmVfYnVzaW5lc3MocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBiZVZlY3RvcikuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlcy5zaXplKCk7aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBMaXN0RWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2Upc2VydmljZUVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBic05hbWUgPSBicy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9SRUZFUkVOQ0VEIixic05hbWUpKTsKLSAgICAgICAgICAgICAgc2VydmljZXMucmVtb3ZlRWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSb2xsIGJhY2sgYW5kIHJlc3RvcmUgdGhlIG9sZCBsaXN0IG9mIHNlcnZpY2VzLgotICAgICAgICAgICAgcm9sbGJhY2tCdXNpbmVzc1NlcnZpY2VzKHNwLGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3Isc2VydmljZXMsdWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTVNHX0VSUk9SX1NFUlZJQ0VfTk9UX1JFRkVSRU5DRUQiKTsKLSAgICAgICAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvbGwgYmFjayBhbmQgcmVzdG9yZSB0aGUgb2xkIGxpc3Qgb2Ygc2VydmljZXMuCi0gICAgICAgICAgICByb2xsYmFja0J1c2luZXNzU2VydmljZXMoc3AsYmFja3VwQnVzU2VydmljZVZlY3RvcixzZXJ2aWNlcyx1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNU0dfRVJST1JfU0VSVklDRV9OT1RfUkVGRVJFTkNFRCIpOwotICAgICAgICAgICAgaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAgICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NFUlZJQ0VTLHNlcnZpY2VzKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTl9SRU1PVkU6Ci0gICAgICAgICAgU3RyaW5nW10gcmVmZXJlbmNlZFNlcnZpY2VzQ2hlY2tib3hlcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5SRUZFUkVOQ0VEX1NFUlZJQ0VfU0VMRUNUX1NUQVRFKTsKLSAgICAgICAgICBWZWN0b3Igc2VsZWN0ZWRSZWZlcmVuY2VkU2VydmljZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxyZWZlcmVuY2VkU2VydmljZXNDaGVja2JveGVzLmxlbmd0aDtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBpc0NoZWNrZWQgPSBCb29sZWFuLnZhbHVlT2YocmVmZXJlbmNlZFNlcnZpY2VzQ2hlY2tib3hlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoaXNDaGVja2VkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBMaXN0RWxlbWVudCByZWZlcmVuY2VkU2VydmljZUxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXJlZmVyZW5jZWRTZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpcmVmZXJlbmNlZFNlcnZpY2VMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgc2VydmljZXNIYXNoLnB1dChicy5nZXRTZXJ2aWNlS2V5KCksYnMpOwotICAgICAgICAgICAgICBzZWxlY3RlZFJlZmVyZW5jZWRTZXJ2aWNlVmVjdG9yLmFkZEVsZW1lbnQoYnMpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gICAgICAgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBsaXN0IG9mIGJ1c2luZXNzIHNlcnZpY2VzIGZvciByb2xsYmFjayBvcGVyYXRpb25zLgotICAgICAgICAgIGJhY2t1cEFuZFVwZGF0ZUJ1c2luZXNzU2VydmljZXMoYmFja3VwQnVzU2VydmljZVZlY3RvcixzcCxzZXJ2aWNlc0hhc2gsZmFsc2UpOwotICAgICAgICAgIAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFZlY3RvciBiZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgIGJlVmVjdG9yLmFkZChzcCk7Ci0gICAgICAgICAgICBzcCA9IChCdXNpbmVzc0VudGl0eSlwcm94eS5zYXZlX2J1c2luZXNzKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYmVWZWN0b3IpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8c2VsZWN0ZWRSZWZlcmVuY2VkU2VydmljZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXNlbGVjdGVkUmVmZXJlbmNlZFNlcnZpY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICBTdHJpbmcgYnNOYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfUkVGRVJFTkNFX1JFTU9WRUQiLGJzTmFtZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gUm9sbCBiYWNrIGFuZCByZXN0b3JlIHRoZSBvbGQgbGlzdCBvZiBzZXJ2aWNlcy4KLSAgICAgICAgICAgIHJvbGxiYWNrQnVzaW5lc3NTZXJ2aWNlcyhzcCxiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLHNlbGVjdGVkUmVmZXJlbmNlZFNlcnZpY2VWZWN0b3IsdWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTVNHX0VSUk9SX1JFRkVSRU5DRV9OT1RfUkVNT1ZFRCIpOwotICAgICAgICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgICAgICAgICAgb3BlcmF0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gUm9sbCBiYWNrIGFuZCByZXN0b3JlIHRoZSBvbGQgbGlzdCBvZiBzZXJ2aWNlcy4KLSAgICAgICAgICAgIHJvbGxiYWNrQnVzaW5lc3NTZXJ2aWNlcyhzcCxiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLHNlbGVjdGVkUmVmZXJlbmNlZFNlcnZpY2VWZWN0b3IsdWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTVNHX0VSUk9SX1JFRkVSRU5DRV9OT1RfUkVNT1ZFRCIpOwotICAgICAgICAgICAgaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAgICAgICAgIAlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgcmVmZXJlbmNlZCBzZXJ2aWNlcyBhcmUgcmVmcmVzaGVkIHdoZW4gdGhlIGZvcm0gcmVsb2Fkcy4KLSAgICAgIGZvcm1Ub29sUEkucmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9SRUZFUkVOQ0VEX1NFUlZJQ0VTKTsKLSAgICAgIGJ1c0VsZW1lbnQuc2V0QnVzaW5lc3NFbnRpdHkoc3ApOwotICAgICAgcmV0dXJuIG9wZXJhdGlvblJlc3VsdDsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICAgIG9wZXJhdGlvblJlc3VsdCA9IGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICAJb3BlcmF0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIsZSk7Ci0gICAgICBvcGVyYXRpb25SZXN1bHQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIG9wZXJhdGlvblJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3ViUXVlcnlJbml0aWF0ZWQoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5SW5pdGlhdGVkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3ViUXVlcnlHZXQoKQotICB7Ci0gICAgcmV0dXJuIGlzU3ViUXVlcnlHZXRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdWJRdWVyeUtleSgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlLZXlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROZXdTdWJRdWVyeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROZXdTdWJRdWVyeUl0ZW0oKQotICB7Ci0gICAgcmV0dXJuIG5ld1N1YlF1ZXJ5SXRlbV87Ci0gIH0KLSAgCi0gIC8vIEJhY2t1cCB0aGUgYnVzaW5lc3Mgc2VydmljZXMgYW5kIHJlbW92ZSB0aG9zZSBpbiBzZXJ2aWNlSGFzaCBmcm9tIHRoZSBjdXJyZW50IGxpc3QuIFJldHVybiB0aGUgdXBkYXRlZCBsaXN0IG9mIGJ1c2luZXNzIHNlcnZpY2VzCi0gIHByaXZhdGUgZmluYWwgdm9pZCBiYWNrdXBBbmRVcGRhdGVCdXNpbmVzc1NlcnZpY2VzKFZlY3RvciBiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLEJ1c2luZXNzRW50aXR5IGJlLEhhc2h0YWJsZSBzZXJ2aWNlc0hhc2gsYm9vbGVhbiBpc0FkZCkKLSAgewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgbGlzdCBvZiBidXNpbmVzcyBzZXJ2aWNlcyBmb3Igcm9sbGJhY2sgb3BlcmF0aW9ucy4KLSAgICBCdXNpbmVzc1NlcnZpY2VzIGN1cnJlbnRCdXNTZXJ2aWNlcyA9IGJlLmdldEJ1c2luZXNzU2VydmljZXMoKTsKLSAgICBpZiAoY3VycmVudEJ1c1NlcnZpY2VzID09IG51bGwpCi0gICAgICBjdXJyZW50QnVzU2VydmljZXMgPSBuZXcgQnVzaW5lc3NTZXJ2aWNlcygpOwotICAgIFZlY3RvciBjdXJyZW50QnVzU2VydmljZVZlY3RvciA9IGN1cnJlbnRCdXNTZXJ2aWNlcy5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7aTxjdXJyZW50QnVzU2VydmljZVZlY3Rvci5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBjdXJyZW50QnVzU2VydmljZSA9IChCdXNpbmVzc1NlcnZpY2UpY3VycmVudEJ1c1NlcnZpY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgYmFja3VwQnVzU2VydmljZVZlY3Rvci5hZGRFbGVtZW50KGN1cnJlbnRCdXNTZXJ2aWNlKTsKLSAgICAgIC8vIElmIHRoZSBjdXJyZW50IGJ1c2luZXNzIHNlcnZpY2UgaXMgYSBtZW1iZXIgb2YgdGhlIGxpc3QgdG8gYmUgcmVtb3ZlZC9hZGRlZCwgcmVtb3ZlIGl0IG5vdy4KLSAgICAgIGlmIChzZXJ2aWNlc0hhc2guZ2V0KGN1cnJlbnRCdXNTZXJ2aWNlLmdldFNlcnZpY2VLZXkoKSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEJ1c1NlcnZpY2VWZWN0b3IucmVtb3ZlRWxlbWVudEF0KGkpOwotICAgICAgICBpLS07Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChpc0FkZCkKLSAgICB7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gc2VydmljZXNIYXNoLmVsZW1lbnRzKCk7Ci0gICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgY3VycmVudEJ1c1NlcnZpY2VWZWN0b3IuYWRkRWxlbWVudCgoQnVzaW5lc3NTZXJ2aWNlKWUubmV4dEVsZW1lbnQoKSk7Ci0gICAgfQotICAgIGJlLnNldEJ1c2luZXNzU2VydmljZXMoY3VycmVudEJ1c1NlcnZpY2VzKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHJvbGxiYWNrQnVzaW5lc3NTZXJ2aWNlcyhCdXNpbmVzc0VudGl0eSBiZSxWZWN0b3IgYmFja3VwQnVzU2VydmljZVZlY3RvcixWZWN0b3Igb3BlcmF0ZWRTZXJ2aWNlcyxQZXJzcGVjdGl2ZSBwZXJzcGVjdGl2ZSxNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlLFN0cmluZyBlcnJvck1lc3NhZ2VLZXkpCi0gIHsKLSAgICAvLyBSb2xsIGJhY2sgYW5kIHJlc3RvcmUgdGhlIG9sZCBsaXN0IG9mIHNlcnZpY2VzLgotICAgIGJlLmdldEJ1c2luZXNzU2VydmljZXMoKS5zZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoYmFja3VwQnVzU2VydmljZVZlY3Rvcik7Ci0gICAgZm9yIChpbnQgaT0wO2k8b3BlcmF0ZWRTZXJ2aWNlcy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IHNlcnZpY2VMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClvcGVyYXRlZFNlcnZpY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2Upc2VydmljZUxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgU3RyaW5nIGJzTmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShwZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKGVycm9yTWVzc2FnZUtleSxic05hbWUpKTsKLSAgICB9ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9PcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9PcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkY2Y4NGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwdWJsaWMgT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbigpCi0gIHsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgYWRkU2Vzc2lvbkFuZFRNb2RlbEtleShTdHJpbmdCdWZmZXIgcmVzdWx0LFN0cmluZyBzZXNzaW9uSWQsU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5KQotICB7Ci0gICAgcmVzdWx0LmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKS5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZKS5hcHBlbmQoJz0nKS5hcHBlbmQoY2F0ZWdvcnlUTW9kZWxLZXkpOwotICB9Ci0gIAotICAvLyB1ZGRpL2NhdGVnb3J5X2Jyb3dzZXIuanNwP3Nlc3Npb25JZD0uLi4mY2F0ZWdvcnlUTW9kZWxLZXk9Li4uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvY2F0ZWdvcnlfYnJvd3Nlci5qc3A/Iik7Ci0gICAgYWRkU2Vzc2lvbkFuZFRNb2RlbEtleShhY3Rpb25MaW5rLHNlc3Npb25JZCxjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0Q2F0ZWdvcnlDb250ZW50UGFnZShTdHJpbmcgc2Vzc2lvbklkLFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9jYXRlZ29yeV9jb250ZW50LmpzcD8iKTsKLSAgICBhZGRTZXNzaW9uQW5kVE1vZGVsS2V5KGFjdGlvbkxpbmssc2Vzc2lvbklkLGNhdGVnb3J5VE1vZGVsS2V5KTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRXaWxkQ2FyZEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCwiJSIpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvT3BlblJlZ2lzdHJ5QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI4OGM3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTEyICAgMTQxNzk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuVURESU1haW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElNYWluTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsTGlzdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIE9wZW5SZWdpc3RyeUFjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwdWJsaWMgT3BlblJlZ2lzdHJ5QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIC8vIFNlbGVjdCBVRERJIE1haW4uCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHJlZ2lzdHJ5TmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCk7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VybmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5VRERJX1VTRVJOQU1FKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuVURESV9QQVNTV09SRCk7Ci0gICAgU3RyaW5nIGNoZWNrVXNlckRlZmluZWRDYXRlZ29yaWVzQ2hlY2tlZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5DSEVDS19VU0VSX0RFRklORURfQ0FURUdPUklFUyk7Ci0gICAgU3RyaW5nIGNhdGVnb3JpZXNEaXJlY3RvcnkgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUklFU19ESVJFQ1RPUlkpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgaWYgKHJlZ2lzdHJ5TmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSxyZWdpc3RyeU5hbWUpOwotCi0gICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocmVnaXN0cnlOYW1lKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUkVHSVNUUllfTkFNRSIpKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5xdWlyeVVSTCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwsaW5xdWlyeVVSTCk7Ci0gICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeVVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9JTlFVSVJZX1VSTCIpKTsKLSAgICB9Ci0KLSAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9VUkwsIHB1Ymxpc2hVUkwpOwotICAgIAotICAgIGlmICh1c2VybmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuVURESV9VU0VSTkFNRSwgdXNlcm5hbWUpOwotCi0gICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5VRERJX1BBU1NXT1JELCBwYXNzd29yZCk7Ci0KLSAgICBpZiAoY2hlY2tVc2VyRGVmaW5lZENhdGVnb3JpZXNDaGVja2VkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5DSEVDS19VU0VSX0RFRklORURfQ0FURUdPUklFUyxjaGVja1VzZXJEZWZpbmVkQ2F0ZWdvcmllc0NoZWNrZWQpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuQ0hFQ0tfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMpOwotICAgICAgCi0gICAgaWYgKGNhdGVnb3JpZXNEaXJlY3RvcnkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JJRVNfRElSRUNUT1JZLGNhdGVnb3JpZXNEaXJlY3RvcnkpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUklFU19ESVJFQ1RPUlkpOwotCi0gICAgZm9ybVRvb2wudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2F0aGVyV1NVc2VyRGVmaW5lZENhdGVnb3JpZXMoVURESVByb3h5IHByb3h5LEhhc2h0YWJsZSBjYXRlZ29yeU1vZGVscykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBjYXRlZ29yeUJhZy5hZGQobmV3IEtleWVkUmVmZXJlbmNlKCIiLCJjYXRlZ29yaXphdGlvbiIsVE1vZGVsLlRZUEVTX1RNT0RFTF9LRVkpKTsKLSAgICAgIFRNb2RlbExpc3QgdE1vZGVsTGlzdCA9IHByb3h5LmZpbmRfdE1vZGVsKCIlIixjYXRlZ29yeUJhZyxudWxsLG51bGwsMTAwKTsKLSAgICAgIFRNb2RlbEluZm9zIHRNb2RlbEluZm9zID0gdE1vZGVsTGlzdC5nZXRUTW9kZWxJbmZvcygpOwotICAgICAgVmVjdG9yIHRNb2RlbEtleVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbEluZm9zLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbEluZm8gdE1vZGVsSW5mbyA9IHRNb2RlbEluZm9zLmdldChpKTsKLSAgICAgICAgdE1vZGVsS2V5VmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICB9Ci0gICAgICBUTW9kZWxEZXRhaWwgdE1vZGVsRGV0YWlsID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbCh0TW9kZWxLZXlWZWN0b3IpOwotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbCl0TW9kZWxWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICBib29sZWFuIGNoZWNrZWQgPSBmYWxzZTsKLSAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIGNhdGVnb3J5S2V5ID0gbnVsbDsKLSAgICAgICAgY2F0ZWdvcnlCYWcgPSB0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICAgICAgZm9yIChpbnQgaj0wO2o8Y2F0ZWdvcnlCYWcuc2l6ZSgpO2orKykKLSAgICAgICAgewotICAgICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gY2F0ZWdvcnlCYWcuZ2V0KGopOwotICAgICAgICAgIFN0cmluZyBrclRNb2RlbEtleSA9IGtyLmdldFRNb2RlbEtleSgpOwotICAgICAgICAgIGlmIChrclRNb2RlbEtleS5lcXVhbHNJZ25vcmVDYXNlKFRNb2RlbC5HRU5FUkFMX0tFWVdPUkRTX1RNT0RFTF9LRVkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBrcktleU5hbWUgPSBrci5nZXRLZXlOYW1lKCk7Ci0gICAgICAgICAgICBpZiAoa3JLZXlOYW1lLmVxdWFscygidXJuOngtaWJtOnVkZGk6Y3VzdG9tVGF4b25vbXk6a2V5IikpCi0gICAgICAgICAgICAgIGNhdGVnb3J5S2V5ID0ga3IuZ2V0S2V5VmFsdWUoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGtyS2V5TmFtZS5lcXVhbHMoInVybjp4LWlibTp1ZGRpOmN1c3RvbVRheG9ub215OmRpc3BsYXlOYW1lIikpCi0gICAgICAgICAgICAgIGRpc3BsYXlOYW1lID0ga3IuZ2V0S2V5VmFsdWUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoa3JUTW9kZWxLZXkuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkpCi0gICAgICAgICAgICBjaGVja2VkID0ga3IuZ2V0S2V5VmFsdWUoKS5lcXVhbHMoImNoZWNrZWQiKTsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBpZiAoY2F0ZWdvcnlLZXkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChkaXNwbGF5TmFtZSA9PSBudWxsKQotICAgICAgICAgICAgZGlzcGxheU5hbWUgPSB0TW9kZWwuZ2V0TmFtZVN0cmluZygpOwotICAgICAgICAgIENhdGVnb3J5TW9kZWwgY2F0ZWdvcnlNb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0gICAgICAgICAgY2F0ZWdvcnlNb2RlbC5zZXRDYXRlZ29yeUtleShjYXRlZ29yeUtleSk7Ci0gICAgICAgICAgY2F0ZWdvcnlNb2RlbC5lbmFibGVDaGVja2VkKGNoZWNrZWQpOwotICAgICAgICAgIGNhdGVnb3J5TW9kZWwuc2V0RGlzcGxheU5hbWUoZGlzcGxheU5hbWUpOwotICAgICAgICAgIFN0cmluZyB0TW9kZWxLZXkgPSB0TW9kZWwuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgICAgICAgY2F0ZWdvcnlNb2RlbC5zZXRUTW9kZWxLZXkodE1vZGVsS2V5KTsKLSAgICAgICAgICBjYXRlZ29yeU1vZGVscy5wdXQodE1vZGVsS2V5LGNhdGVnb3J5TW9kZWwpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUpOwotICAgICAgU3RyaW5nIGlucXVpcnlVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMKTsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5SRUdJU1RSQVRJT05fVVJMKTsKLSAgICAgIFN0cmluZyB1c2VybmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuVURESV9VU0VSTkFNRSk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlVERElfUEFTU1dPUkQpOwotICAgICAgYm9vbGVhbiBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc0NoZWNrZWQgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuQ0hFQ0tfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMpICE9IG51bGwpOwotICAgICAgU3RyaW5nIGNhdGVnb3JpZXNEaXJlY3RvcnkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JJRVNfRElSRUNUT1JZKTsKLQotICAgICAgU3RyaW5nIHJlY29nbml6ZWRQdWJsaXNoVVJMID0gdWRkaVBlcnNwZWN0aXZlLmdldEtub3duUmVnaXN0cnlQdWJsaXNoVVJMKGlucXVpcnlVUkwpOwotICAgICAgU3RyaW5nIHJlY29nbml6ZWRSZWdpc3RyYXRpb25VUkwgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0S25vd25SZWdpc3RyeVJlZ2lzdHJhdGlvblVSTChpbnF1aXJ5VVJMKTsKLSAgICAgIAotICAgICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgICAgcHVibGlzaFVSTCA9IHJlY29nbml6ZWRQdWJsaXNoVVJMOwotICAgICAgaWYgKHJlZ2lzdHJhdGlvblVSTCA9PSBudWxsKQotICAgICAgICByZWdpc3RyYXRpb25VUkwgPSByZWNvZ25pemVkUmVnaXN0cmF0aW9uVVJMOwotICAgICAgICAKLSAgICAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKShjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0Um9vdE5vZGUoKSk7Ci0gICAgICBVRERJTWFpbkVsZW1lbnQgdWRkaU1haW5FbGVtZW50ID0gKFVERElNYWluRWxlbWVudCl1ZGRpTWFpbk5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotICAgICAgcHJvcHMucHV0KEFjdGlvbklucHV0cy5UUkFOU1BPUlRfQ0xBU1NfTkFNRSwgQWN0aW9uSW5wdXRzLlRSQVNQT1JUX0NMQVNTKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IG5ldyBVRERJUHJveHkocHJvcHMpOwotICAgICAgcHJveHkuc2V0SW5xdWlyeVVSTChuZXcgVVJMKGlucXVpcnlVUkwpKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSBuZXcgUmVnaXN0cnlFbGVtZW50KHByb3h5LGlucXVpcnlVUkwscmVnaXN0cnlOYW1lLHVkZGlNYWluRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgIC8vIFNldCByZWdpc3RyeSBlbGVtZW50J3MgcHVibGlzaCBVUkwgYW5kIHJlZ2lzdHJhdGlvbiBVUkwgcHJvdmlkZWQgYnkgZXh0ZXJuYWwgY2FsbGVycyAoZS5nLiBmYXZvcml0ZXMpLgotICAgICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICAgICAgcmVnaXN0cnlFbGVtZW50LnNldENhY2hlZFB1Ymxpc2hVUkwocHVibGlzaFVSTCk7Ci0gICAgICBpZiAocmVnaXN0cmF0aW9uVVJMICE9IG51bGwpCi0gICAgICAgIHJlZ2lzdHJ5RWxlbWVudC5zZXRSZWdpc3RyYXRpb25VUkwocmVnaXN0cmF0aW9uVVJMKTsKLSAgICAgIGlmICh1c2VybmFtZSAhPSBudWxsKQotICAgICAgCXJlZ2lzdHJ5RWxlbWVudC5zZXRVc2VySWQodXNlcm5hbWUpOwotICAgICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICAJcmVnaXN0cnlFbGVtZW50LnNldENyZWQocGFzc3dvcmQpOwotICAgICAgcmVnaXN0cnlFbGVtZW50LnNldENoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzKGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzQ2hlY2tlZCk7Ci0gICAgICBpZiAoY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXNDaGVja2VkKQotICAgICAgewotICAgICAgICBIYXNodGFibGUgY2F0ZWdvcnlNb2RlbHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgIGdhdGhlcldTVXNlckRlZmluZWRDYXRlZ29yaWVzKHByb3h5LGNhdGVnb3J5TW9kZWxzKTsKLSAgICAgICAgaWYgKGNhdGVnb3J5TW9kZWxzLnNpemUoKSA+IDApCi0gICAgICAgICAgcmVnaXN0cnlFbGVtZW50LnNldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcyhjYXRlZ29yeU1vZGVscyk7Ci0gICAgICB9Ci0gICAgICByZWdpc3RyeUVsZW1lbnQuc2V0Q2F0ZWdvcmllc0RpcmVjdG9yeShjYXRlZ29yaWVzRGlyZWN0b3J5KTsKLSAgICAgIHVkZGlNYWluRWxlbWVudC5jb25uZWN0KHJlZ2lzdHJ5RWxlbWVudCxVRERJTW9kZWxDb25zdGFudHMuUkVMX1JFR0lTVFJJRVMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gdWRkaU1haW5Ob2RlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICBpbnQgbmV3UmVnaXN0cnlOb2RlSWQgPSB1ZGRpTWFpbk5vZGUuZ2V0Q2hpbGROb2RlKHJlZ2lzdHJ5RWxlbWVudCkuZ2V0Tm9kZUlkKCk7Ci0gICAgICAvLyBTZWxlY3QgdGhlIG5ldyByZWdpc3RyeSBub2RlIGFuZCBhZGQgdGhlIHNlbGVjdCBhY3Rpb24gdG8gdGhlIGhpc3RvcnkuCi0gICAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChuZXdSZWdpc3RyeU5vZGVJZCk7Ci0gICAgICBOb2RlIHJlZ2lzdHJ5Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSByZWdpc3RyeU5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCkuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYodHJ1ZSkpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1JFR0lTVFJZX09QRU5FRCIsbmV3IFN0cmluZ1tde3JlZ2lzdHJ5TmFtZSxpbnF1aXJ5VVJMfSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwpOwotICAgIH0KLSAgICAvKgotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgICovCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9QdWJsaXNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9QdWJsaXNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjliNjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUHVibGlzaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUHVibGlzaGVkSXRlbXNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHVibGlzaEFjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5XzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNTdWJRdWVyeUdldF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3U3ViUXVlcnlJdGVtXzsKLSAgcHJvdGVjdGVkIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlXzsKLQotICBwdWJsaWMgUHVibGlzaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzdWJRdWVyeUtleV8gPSBudWxsOwotICAgIGlzU3ViUXVlcnlHZXRfID0gZmFsc2U7Ci0gICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0gICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIC8vIFNldHVwIGZvciBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUiwgcGFyc2VyKTsKLSAKLSAgICBuZXdTdWJRdWVyeV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCk7Ci0gICAgU3RyaW5nIGlzU3ViUXVlcnlHZXRTdHJpbmcgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICBuZXdTdWJRdWVyeUl0ZW1fID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNKTsKLSAgICBzdWJRdWVyeUtleV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgZm9ybVRvb2xQSS5jbGVhckVycm9ycygpOwotCi0gICAgaWYgKG5ld1N1YlF1ZXJ5XyAhPSBudWxsICYmIG5ld1N1YlF1ZXJ5Xy5sZW5ndGgoKSA+IDApCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotCi0gICAgaWYgKGlzU3ViUXVlcnlHZXRTdHJpbmcgIT0gbnVsbCkKLSAgICAgIGlzU3ViUXVlcnlHZXRfID0gQm9vbGVhbi52YWx1ZU9mKGlzU3ViUXVlcnlHZXRTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgaWYgKCFwcm9jZXNzT3RoZXJzKHBhcnNlcixmb3JtVG9vbFBJKSAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLQotICAgIGZvciAoaW50IGk9MDtpPHJlbW92ZWRQcm9wZXJ0aWVzXy5zaXplKCk7aSsrKQotICAgICAgZm9ybVRvb2xQSS5yZW1vdmVQcm9wZXJ0eShyZW1vdmVkUHJvcGVydGllc18uZWxlbWVudEF0KGkpKTsKLSAgICBmb3JtVG9vbFBJLnVwZGF0ZVByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZV8pOwotCi0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgYm9vbGVhbiB2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uID0gIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgfQotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgdmFsaWRhdGVBdXRoZW50aWNhdGlvbiAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHB1Ymxpc2hVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgfQotCi0gICAgaWYgKHVzZXJJZCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiB2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklkKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgfQotCi0gICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgYWRkUHVibGlzaGVkSXRlbU5vZGUoQnVzaW5lc3NFbnRpdHkgYmUsUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYmVFbGVtZW50ID0gbmV3IEJ1c2luZXNzRWxlbWVudChiZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkQnVzaW5lc3Nlc0VsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gcHVibGlzaGVkQnVzaW5lc3Nlc0VsZW1lbnQuZ2V0SXRlbXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBCdXNpbmVzc0VsZW1lbnQgZWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgZWxlbWVudEJFID0gZWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgICAgaWYgKGVsZW1lbnRCRS5nZXRCdXNpbmVzc0tleSgpLmVxdWFscyhiZS5nZXRCdXNpbmVzc0tleSgpKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBjb25uZWN0RWxlbWVudHMocHVibGlzaGVkQnVzaW5lc3Nlc0VsZW1lbnQsYmVFbGVtZW50KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKEJ1c2luZXNzU2VydmljZSBicyxSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFNlcnZpY2VFbGVtZW50IHNFbGVtZW50ID0gbmV3IFNlcnZpY2VFbGVtZW50KGJzLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZFNlcnZpY2VzRWxlbWVudCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZXNFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IHB1Ymxpc2hlZFNlcnZpY2VzRWxlbWVudC5nZXRJdGVtcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFNlcnZpY2VFbGVtZW50IGVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGVsZW1lbnRCUyA9IGVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICBpZiAoZWxlbWVudEJTLmdldFNlcnZpY2VLZXkoKS5lcXVhbHMoYnMuZ2V0U2VydmljZUtleSgpKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBjb25uZWN0RWxlbWVudHMocHVibGlzaGVkU2VydmljZXNFbGVtZW50LHNFbGVtZW50KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKFRNb2RlbCB0TW9kZWwsUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSBuZXcgU2VydmljZUludGVyZmFjZUVsZW1lbnQodE1vZGVsLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzRWxlbWVudCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZXNFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzRWxlbWVudC5nZXRJdGVtcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgVE1vZGVsIGVsZW1lbnRUTW9kZWwgPSBlbGVtZW50LmdldFRNb2RlbCgpOwotICAgICAgaWYgKHRNb2RlbC5nZXRUTW9kZWxLZXkoKS5lcXVhbHMoZWxlbWVudFRNb2RlbC5nZXRUTW9kZWxLZXkoKSkpCi0gICAgICB7Ci0gICAgICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgY29ubmVjdEVsZW1lbnRzKHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzRWxlbWVudCxzaUVsZW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNvbm5lY3RFbGVtZW50cyhQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50LFRyZWVFbGVtZW50IGl0ZW1FbGVtZW50KQotICB7Ci0gICAgcHVibGlzaGVkSXRlbXNFbGVtZW50LmNvbm5lY3QoaXRlbUVsZW1lbnQsVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfSVRFTVMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBpbnQgbmV3Tm9kZUlkID0gcmVnTm9kZV8uZ2V0Q2hpbGROb2RlKHB1Ymxpc2hlZEl0ZW1zRWxlbWVudCkuZ2V0Q2hpbGROb2RlKGl0ZW1FbGVtZW50KS5nZXROb2RlSWQoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQobmV3Tm9kZUlkKTsKLSAgICBOb2RlIG5ld05vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IG5ld05vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxzZWxlY3RlZFRvb2wuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYodHJ1ZSkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUluaXRpYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUdldCgpCi0gIHsKLSAgICByZXR1cm4gaXNTdWJRdWVyeUdldF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN1YlF1ZXJ5S2V5KCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUtleV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5KCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5SXRlbSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlJdGVtXzsKLSAgfQotICAKLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGggKyAxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aCAtIDFdID0gbmV3IE11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMWFkYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5CdXNpbmVzc05vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUHVibGlzaGVkSXRlbXNOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlF1ZXJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5RdWVyeVBhcmVudE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VJbnRlcmZhY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFVERElOb2RlQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBWZWN0b3Igc3RhbGVOb2Rlc187Ci0gIHB1YmxpYyBSZWZyZXNoVURESU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsU3RyaW5nLnZhbHVlT2YoY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlSWQoKSkpOwotICAgIHN0YWxlTm9kZXNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbkpTUC5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2ZXJpZnlOb2RlRGF0YSgpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEJ1c2luZXNzTm9kZSkKLSAgICAgIHJldHVybiByZWZyZXNoQnVzaW5lc3NFbGVtZW50KChCdXNpbmVzc05vZGUpbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VOb2RlKQotICAgICAgcmV0dXJuIHJlZnJlc2hTZXJ2aWNlRWxlbWVudCgoU2VydmljZU5vZGUpbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgICAgcmV0dXJuIHJlZnJlc2hTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCgoU2VydmljZUludGVyZmFjZU5vZGUpbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICB7Ci0gICAgICAvLyBOb3RoaW5nIHRvIHZlcmlmeQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBSZWdpc3RyeU5vZGUKLSAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgICAgICByZWZyZXNoUmVnaXN0cnlFbGVtZW50KChSZWdpc3RyeU5vZGUpbm9kZSk7Ci0gICAgICAgIAotICAgICAgLy8gRm9sZGVyTm9kZXMKLSAgICAgIFZlY3RvciBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBWZWN0b3IgcmVmcmVzaEFjdGlvbnMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjaGlsZE5vZGVzLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIFJlZnJlc2hVRERJTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVmcmVzaFVERElOb2RlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgYWN0aW9uLnNldFN0YWxlTm9kZXMoc3RhbGVOb2Rlc18pOwotICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICAgIFN0cmluZyBjaGlsZE5vZGVJZFN0cmluZyA9IFN0cmluZy52YWx1ZU9mKGNoaWxkTm9kZS5nZXROb2RlSWQoKSk7Ci0gICAgICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsY2hpbGROb2RlSWRTdHJpbmcpOwotICAgICAgICBpZiAoIWFjdGlvbi52ZXJpZnlOb2RlRGF0YSgpKQotICAgICAgICAgIHN0YWxlTm9kZXNfLmFkZEVsZW1lbnQoY2hpbGROb2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJlZnJlc2hBY3Rpb25zLmFkZEVsZW1lbnQoYWN0aW9uKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QscmVmcmVzaEFjdGlvbnMpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgcmVmcmVzaFJlZ2lzdHJ5RWxlbWVudChSZWdpc3RyeU5vZGUgcmVnTm9kZSkKLSAgewotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgSGFzaHRhYmxlIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IG51bGw7Ci0gICAgaWYgKHJlZ0VsZW1lbnQuZ2V0Q2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMoKSkKLSAgICB7Ci0gICAgICB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBPcGVuUmVnaXN0cnlBY3Rpb24gb3BlblJlZ0FjdGlvbiA9IG5ldyBPcGVuUmVnaXN0cnlBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgb3BlblJlZ0FjdGlvbi5nYXRoZXJXU1VzZXJEZWZpbmVkQ2F0ZWdvcmllcyhyZWdFbGVtZW50LmdldFByb3h5KCksdXNlckRlZmluZWRDYXRlZ29yaWVzKTsKLSAgICAgIGlmICghdXNlckRlZmluZWRDYXRlZ29yaWVzLmtleXMoKS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgdXNlckRlZmluZWRDYXRlZ29yaWVzID0gbnVsbDsKLSAgICAgICAgcmVnTm9kZS5zZXRJbWFnZVBhdGgoUmVnaXN0cnlOb2RlLklNQUdFX1BBVEhfU1RBTkRBUkQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IHJlZ0VsZW1lbnQuZ2V0Q2F0ZWdvcmllc0RpcmVjdG9yeSgpOwotICAgICAgICBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uIGFkZEFjdGlvbiA9IG5ldyBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgaWYgKGNhdGVnb3JpZXNEaXJlY3RvcnkgIT0gbnVsbCkKLSAgICAgICAgICBhZGRBY3Rpb24ubGlua0NhdGVnb3J5TW9kZWxzV2l0aFNhdmVkRGF0YSh1c2VyRGVmaW5lZENhdGVnb3JpZXMuZWxlbWVudHMoKSxjYXRlZ29yaWVzRGlyZWN0b3J5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGFkZEFjdGlvbi5saW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKHJlZ0VsZW1lbnQuZ2V0TmFtZSgpLHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5lbGVtZW50cygpKTsKLSAgICAgICAgcmVnTm9kZS5zZXRJbWFnZVBhdGgoUmVnaXN0cnlOb2RlLklNQUdFX1BBVEhfV0lUSF9VU0VSX0RFRklORURfQ0FURUdPUklFUyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJlZ0VsZW1lbnQuc2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gcmVmcmVzaEJ1c2luZXNzRWxlbWVudChCdXNpbmVzc05vZGUgYnVzTm9kZSkKLSAgewotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClidXNOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSx1dWlkS2V5KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFRlJFU0hfTk9ERSxidXNOb2RlKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFLEJvb2xlYW4uVFJVRSk7Ci0gICAgYm9vbGVhbiB2ZXJpZnlSZXN1bHQgPSB2ZXJpZnlBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKHZlcmlmeVJlc3VsdCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsbmV3IEJ1c2luZXNzRWxlbWVudCgoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKSxidXNFbGVtZW50LmdldE1vZGVsKCkpKTsKLSAgICByZXR1cm4gdmVyaWZ5UmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIHJlZnJlc2hTZXJ2aWNlRWxlbWVudChTZXJ2aWNlTm9kZSBzZXJ2aWNlTm9kZSkKLSAgewotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKS5nZXRTZXJ2aWNlS2V5KCk7Ci0gICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksdXVpZEtleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5SRUZSRVNIX05PREUsc2VydmljZU5vZGUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUsQm9vbGVhbi5UUlVFKTsKLSAgICBib29sZWFuIHZlcmlmeVJlc3VsdCA9IHZlcmlmeUFjdGlvbi5ydW4oKTsKLSAgICBpZiAodmVyaWZ5UmVzdWx0KQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxuZXcgU2VydmljZUVsZW1lbnQoKEJ1c2luZXNzU2VydmljZSlwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpLHNlcnZpY2VFbGVtZW50LmdldE1vZGVsKCkpKTsKLSAgICByZXR1cm4gdmVyaWZ5UmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIHJlZnJlc2hTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudChTZXJ2aWNlSW50ZXJmYWNlTm9kZSBzaU5vZGUpCi0gIHsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2lOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCkuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHV1aWRLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUkVGUkVTSF9OT0RFLHNpTm9kZSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIGJvb2xlYW4gdmVyaWZ5UmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmICh2ZXJpZnlSZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULG5ldyBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCgoVE1vZGVsKXByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCksc2lFbGVtZW50LmdldE1vZGVsKCkpKTsKLSAgICByZXR1cm4gdmVyaWZ5UmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY29ubmVjdEVsZW1lbnRzKE5vZGUgcGFyZW50Tm9kZSxUcmVlRWxlbWVudCBuZXdFbGVtZW50KQotICB7Ci0gICAgVHJlZUVsZW1lbnQgcGFyZW50RWxlbWVudCA9IHBhcmVudE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgcmVsID0gbnVsbDsKLSAgICBpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIFB1Ymxpc2hlZEl0ZW1zTm9kZSkKLSAgICAgIHJlbCA9IFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TOwotICAgIGVsc2UgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBRdWVyeU5vZGUpCi0gICAgICByZWwgPSBVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFM7Ci0gICAgZWxzZSBpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIFF1ZXJ5UGFyZW50Tm9kZSkKLSAgICAgIHJlbCA9IFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFUzsKLSAgICBwYXJlbnRFbGVtZW50LmNvbm5lY3QobmV3RWxlbWVudCxyZWwsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBOb2RlIG5ld05vZGUgPSBwYXJlbnROb2RlLmdldENoaWxkTm9kZShuZXdFbGVtZW50KTsKLSAgICBpbnQgbmV3Tm9kZUlkID0gbmV3Tm9kZS5nZXROb2RlSWQoKTsKLSAgICBub2RlTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQobmV3Tm9kZUlkKTsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IG5ld05vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxzZWxlY3RlZFRvb2wuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYodHJ1ZSkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgICBPYmplY3QgbGF0ZXN0T2JqZWN0ID0gcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0gICAgICBpZiAobGF0ZXN0T2JqZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChsYXRlc3RPYmplY3QgaW5zdGFuY2VvZiBWZWN0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICBWZWN0b3IgcmVmcmVzaEFjdGlvbnMgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotICAgICAgICAgIGZvciAoaW50IGk9MDtpPHJlZnJlc2hBY3Rpb25zLnNpemUoKTtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgUmVmcmVzaFVERElOb2RlQWN0aW9uIHJlZnJlc2hBY3Rpb24gPSAoUmVmcmVzaFVERElOb2RlQWN0aW9uKXJlZnJlc2hBY3Rpb25zLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgIHJlZnJlc2hBY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChub2RlSWQpOyAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgVHJlZUVsZW1lbnQgb2xkRWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgICBvbGRFbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgICAgICBjb25uZWN0RWxlbWVudHMobm9kZS5nZXRQYXJlbnQoKSwoVHJlZUVsZW1lbnQpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFF1ZXJ5Tm9kZXMKLSAgICAgICAgUXVlcnlOb2RlIHF1ZXJ5Tm9kZSA9IChRdWVyeU5vZGUpbm9kZTsKLSAgICAgICAgRmluZEFjdGlvbiBmaW5kQWN0aW9uID0gcXVlcnlOb2RlLmdldEZpbmRBY3Rpb24oKTsKLSAgICAgICAgZmluZEFjdGlvbi5zZXRSZWZyZXNoQWN0aW9uKHRydWUpOwotICAgICAgICBpZiAoIWZpbmRBY3Rpb24ucnVuKCkpCi0gICAgICAgICAgcXVlcnlOb2RlLnJlbW92ZUNoaWxkTm9kZXModHJ1ZSk7Ci0gICAgICAgIGZpbmRBY3Rpb24uc2V0UmVmcmVzaEFjdGlvbihmYWxzZSk7Ci0gICAgICB9Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fTk9ERV9SRUZSRVNIRUQiLG5vZGUuZ2V0Tm9kZU5hbWUoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFZlY3RvciBnZXRTdGFsZU5vZGVzKCkKLSAgewotICAgIHJldHVybiBzdGFsZU5vZGVzXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U3RhbGVOb2RlcyhWZWN0b3Igc3RhbGVOb2RlcykKLSAgewotICAgIHN0YWxlTm9kZXNfID0gc3RhbGVOb2RlczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTNjYWRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFVERElOb2Rlc0FjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwcml2YXRlIFZlY3RvciBzdGFsZU5vZGVzXzsKLQotICBwdWJsaWMgUmVmcmVzaFVERElOb2Rlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzdGFsZU5vZGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIC8vIFRoZSBjbGllbnQgSmF2YXNjcmlwdCBlbmZvcmNlcyB0aGUgcnVsZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIHdhcyBzZWxlY3RlZCBiZWZvcmUgdGhlIGZvcm0gY2FuIGJlIHN1Ym1pdHRlZC4KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTLHNlbGVjdGVkTm9kZUlkcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgaW50IGNvbGxlY3Rvck5vZGVJZCA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldE5vZGVJZCgpOwotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTKTsKLSAgICBSZWZyZXNoVURESU5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZnJlc2hVRERJTm9kZUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIGZvciAoaW50IGk9MDtpPHNlbGVjdGVkTm9kZUlkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsc2VsZWN0ZWROb2RlSWRzW2ldKTsKLSAgICAgIGlmIChhY3Rpb24udmVyaWZ5Tm9kZURhdGEoKSkKLSAgICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludChzZWxlY3RlZE5vZGVJZHNbaV0pOwotICAgICAgICBzdGFsZU5vZGVzXy5hZGRFbGVtZW50KG5hdmlnYXRvck1hbmFnZXIuZ2V0Tm9kZShub2RlSWQpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT0RFX0RBVEFfVkFMSURBVElPTl9GQUlMRUQiLG5hdmlnYXRvck1hbmFnZXIuZ2V0Tm9kZShub2RlSWQpLmdldE5vZGVOYW1lKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgbmF2aWdhdG9yTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChjb2xsZWN0b3JOb2RlSWQpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFZlY3RvciBnZXRTdGFsZU5vZGVzKCkKLSAgewotICAgIHJldHVybiBzdGFsZU5vZGVzXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTMxNzI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAKLSAgICBpZiAodXVpZEtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksdXVpZEtleSk7Ci0gICAgICAKLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHV1aWRLZXkpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VVUlEX0tFWSIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsgICAgICAKLSAgICAgIFN0cmluZyB1dWlkS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgICAKLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUgb3IgZXZlbiBVRERJTWFpbk5vZGUuCi0gICAgICBpZiAocmVnTm9kZV8gPT0gbnVsbCkKLSAgICAgICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKE5vZGUpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUkVGUkVTSF9OT0RFKSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIEJ1c2luZXNzRW50aXR5W10gYmVMaXN0ID0gbmV3IEJ1c2luZXNzRW50aXR5WzFdOwotICAgICAgVmVjdG9yIGJlVmVjdG9yID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKHV1aWRLZXkpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICBpZiAoYmVWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgYmVWZWN0b3IudG9BcnJheShiZUxpc3QpOwotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQoYmVMaXN0LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZihiZUxpc3QubGVuZ3RoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsYmVMaXN0WzBdKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19CVVNJTkVTU0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYTU3NTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMczsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcnM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5UTW9kZWxCYWc7Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEKSk7ICAgIAotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VULFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfUkVTVUxUUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgb3duZWRDaGVja2VkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEKTsKLSAgICBTdHJpbmdbXSBsYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUpOwotICAgIFN0cmluZ1tdIGlkS2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBzaU5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFKTsKLSAgICBTdHJpbmdbXSBkaXNjb3ZlcnlVUkxWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRElTQ09WRVJZVVJMKTsKLSAgICBTdHJpbmdbXSBmaW5kUXVhbGlmaWVyVmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0ZJTkRRVUFMSUZJRVIpOwotICAgIFN0cmluZyBtYXhTZWFyY2hTZXQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1NFQVJDSF9TRVQpOwotICAgIFN0cmluZyBtYXhSZXN1bHRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIGdldFJlZ2lzdHJ5Tm9kZSgpOwotICAgIHJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICBpZiAob3duZWRDaGVja2VkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19PV05FRCxvd25lZENoZWNrZWQpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQpOwotCi0gICAgaWYgKGxhbmd1YWdlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChsYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSxsYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldKTsKLSAgICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KHVkZGk0ak5hbWUpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsbmFtZVZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotCi0gICAgaWYgKGlkVHlwZXMgIT0gbnVsbCAmJiBpZEtleU5hbWVzICE9IG51bGwgJiYgaWRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gbmV3IElkZW50aWZpZXJCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGlkS2V5TmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoaWRLZXlOYW1lc1tpXSxpZEtleVZhbHVlc1tpXSxpZFR5cGVzW2ldKTsKLSAgICAgICAgaWRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTLGlkQmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0KLSAgICBpZiAoY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTLGNhdEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0KLSAgICBpZiAoc2lOb2RlSWRzICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQWx0aG91Z2ggd2UgYWxyZWFkeSBoYXZlIHRoZSAic3VibWl0dGVkIiBkYXRhLCBkZWxldGlvbnMgb2NjdXIgb24gdGhlIGNsaWVudCBzaWRlIGFuZCB0aHVzIHRoZSBuZWVkIHRvIHRyYWNrIHRoaXMgdXNpbmcgaGlkZGVuIGZvcm0gZWxlbWVudHMuCi0gICAgICBWZWN0b3IgYnVzU2VydmljZUludGVyZmFjZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgaWYgKGJ1c1NlcnZpY2VJbnRlcmZhY2VzID09IG51bGwpCi0gICAgICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzID0gbmV3IFZlY3RvcigpOwotICAgICAgZWxzZQotICAgICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZKTsKLSAgICAgIFZlY3RvciB0TW9kZWxLZXlTdHJpbmdWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBIYXNodGFibGUgcmVzdWx0SGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNpTm9kZUlkcy5sZW5ndGg7aSsrKQotICAgICAgICByZXN1bHRIYXNoLnB1dChzaU5vZGVJZHNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weS5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkuZWxlbWVudEF0KGkpOwotICAgICAgICBpZiAocmVzdWx0SGFzaC5nZXQoU3RyaW5nLnZhbHVlT2YobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCkpKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgYnVzU2VydmljZUludGVyZmFjZXMuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgdE1vZGVsS2V5U3RyaW5nVmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsLmdldFRNb2RlbEtleSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgVE1vZGVsQmFnIHRNb2RlbEJhZyA9IG5ldyBUTW9kZWxCYWcodE1vZGVsS2V5U3RyaW5nVmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFUyxidXNTZXJ2aWNlSW50ZXJmYWNlcyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19UTU9ERUxCQUcsdE1vZGVsQmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfVE1PREVMQkFHKTsKLSAgICB9Ci0KLSAgICBpZiAoZGlzY292ZXJ5VVJMVmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgRGlzY292ZXJ5VVJMcyBkaXNjb3ZlcnlVUkxzID0gbmV3IERpc2NvdmVyeVVSTHMoKTsKLSAgICAgIFZlY3RvciBkaXNjb3ZlcnlVUkxWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxWYWx1ZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgRGlzY292ZXJ5VVJMIGRpc2NvdmVyeVVSTCA9IG5ldyBEaXNjb3ZlcnlVUkwoZGlzY292ZXJ5VVJMVmFsdWVzW2ldLCIiKTsKLSAgICAgICAgZGlzY292ZXJ5VVJMVmVjdG9yLmFkZEVsZW1lbnQoZGlzY292ZXJ5VVJMKTsKLSAgICAgIH0KLSAgICAgIGRpc2NvdmVyeVVSTHMuc2V0RGlzY292ZXJ5VVJMVmVjdG9yKGRpc2NvdmVyeVVSTFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLGRpc2NvdmVyeVVSTHMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotCi0gICAgaWYgKGZpbmRRdWFsaWZpZXJWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBGaW5kUXVhbGlmaWVycyBmaW5kUXVhbGlmaWVycyA9IG5ldyBGaW5kUXVhbGlmaWVycygpOwotICAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxmaW5kUXVhbGlmaWVyVmFsdWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEZpbmRRdWFsaWZpZXIgZmluZFF1YWxpZmllciA9IG5ldyBGaW5kUXVhbGlmaWVyKGZpbmRRdWFsaWZpZXJWYWx1ZXNbaV0pOwotICAgICAgICBmaW5kUXVhbGlmaWVyVmVjdG9yLmFkZEVsZW1lbnQoZmluZFF1YWxpZmllcik7Ci0gICAgICB9Ci0gICAgICBmaW5kUXVhbGlmaWVycy5zZXRGaW5kUXVhbGlmaWVyVmVjdG9yKGZpbmRRdWFsaWZpZXJWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRklORFFVQUxJRklFUlMsZmluZFF1YWxpZmllcnMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0ZJTkRRVUFMSUZJRVJTKTsKLQotICAgIGlmIChtYXhTZWFyY2hTZXQgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZUludGVnZXIobWF4U2VhcmNoU2V0KSkKLSAgICB7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VUKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9NQVhfU0VBUkNIX1NFVCIpKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1heFJlc3VsdHMgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVJbnRlZ2VyKG1heFJlc3VsdHMpKQotICAgIHsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX01BWF9SRVNVTFRTIikpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHJpdmF0ZSBEaXNjb3ZlcnlVUkxzIGR1cERpc2NvdmVyeVVSTHMoRGlzY292ZXJ5VVJMcyBkaXNjb3ZlcnlVUkxzLCBTdHJpbmcgdXNlVHlwZSwgU3RyaW5nIGR1cFVzZVR5cGUpIHsKLSAgICBpZiAoZGlzY292ZXJ5VVJMcyA9PSBudWxsKQotICAgICAgcmV0dXJuIGRpc2NvdmVyeVVSTHM7Ci0gICAgVmVjdG9yIGRpc2NvdmVyeVVSTFZlY3RvciA9IGRpc2NvdmVyeVVSTHMuZ2V0RGlzY292ZXJ5VVJMVmVjdG9yKCk7Ci0gICAgaWYgKGRpc2NvdmVyeVVSTFZlY3RvciA9PSBudWxsKQotICAgICAgcmV0dXJuIGRpc2NvdmVyeVVSTHM7Ci0gICAgVmVjdG9yIG5ld0Rpc2NvdmVyeVVSTFZlY3RvciA9IG5ldyBWZWN0b3IoZGlzY292ZXJ5VVJMVmVjdG9yKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZGlzY292ZXJ5VVJMVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSAoRGlzY292ZXJ5VVJMKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChkaXNjb3ZlcnlVUkwuZ2V0VXNlVHlwZSgpLmVxdWFscyh1c2VUeXBlKSkgewotICAgICAgICBuZXdEaXNjb3ZlcnlVUkxWZWN0b3IuYWRkKG5ldyBEaXNjb3ZlcnlVUkwoZGlzY292ZXJ5VVJMLmdldFRleHQoKSwgZHVwVXNlVHlwZSkpOwotICAgICAgfQotICAgIH0KLSAgICBEaXNjb3ZlcnlVUkxzIG5ld0Rpc2NvdmVyeVVSTHMgPSBuZXcgRGlzY292ZXJ5VVJMcygpOwotICAgIG5ld0Rpc2NvdmVyeVVSTHMuc2V0RGlzY292ZXJ5VVJMVmVjdG9yKG5ld0Rpc2NvdmVyeVVSTFZlY3Rvcik7Ci0gICAgcmV0dXJuIG5ld0Rpc2NvdmVyeVVSTHM7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOyAgICAgIAotICAgICAgRmluZFF1YWxpZmllcnMgZmluZFF1YWxpZmllcnMgPSAoRmluZFF1YWxpZmllcnMpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRklORFFVQUxJRklFUlMpOwotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgICAgIERpc2NvdmVyeVVSTHMgZGlzY292ZXJ5VVJMcyA9IChEaXNjb3ZlcnlVUkxzKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotICAgICAgSWRlbnRpZmllckJhZyBpZGVudGlmaWVyQmFnID0gKElkZW50aWZpZXJCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotICAgICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSAoQ2F0ZWdvcnlCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICAgICBUTW9kZWxCYWcgdE1vZGVsQmFnID0gKFRNb2RlbEJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19UTU9ERUxCQUcpOwotICAgICAgYm9vbGVhbiBvd25lZCA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19PV05FRCkgIT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgaW50IG1heFNlYXJjaFNldCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfU0VBUkNIX1NFVCkpOwotICAgICAgaW50IG1heFJlc3VsdHMgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMpKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKG93bmVkICYmICFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotCi0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgIEJ1c2luZXNzSW5mb3MgYnVzSW5mb3MgPSBudWxsOwotICAgICAgaWYgKG93bmVkKQotICAgICAgICBidXNJbmZvcyA9IHByb3h5LmdldF9yZWdpc3RlcmVkSW5mbyhyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCkpLmdldEJ1c2luZXNzSW5mb3MoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnVzSW5mb3MgPSBwcm94eS5maW5kX2J1c2luZXNzKG5hbWVWZWN0b3IsIGR1cERpc2NvdmVyeVVSTHMoZGlzY292ZXJ5VVJMcywiIixVRERJQWN0aW9uSW5wdXRzLkRJU0NPVkVSWV9VUkxfVFlQRSksIGlkZW50aWZpZXJCYWcsIGNhdGVnb3J5QmFnLCB0TW9kZWxCYWcsIGZpbmRRdWFsaWZpZXJzLCBtYXhTZWFyY2hTZXQpLmdldEJ1c2luZXNzSW5mb3MoKTsKLSAgICAgIAotICAgICAgaW50IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzID0gTWF0aC5taW4obWF4UmVzdWx0cywgYnVzSW5mb3Muc2l6ZSgpKTsKLSAgICAgIFZlY3RvciBidXNpbmVzc0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJ1c2luZXNzSW5mbyBidXNJbmZvID0gKEJ1c2luZXNzSW5mbylidXNJbmZvcy5nZXQoaSk7Ci0gICAgICAgIGJ1c2luZXNzS2V5cy5hZGRFbGVtZW50KGJ1c0luZm8uZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBWZWN0b3IgYmVWZWN0b3IgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoYnVzaW5lc3NLZXlzKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgICAgIEJ1c2luZXNzRW50aXR5W10gYmVMaXN0ID0gbmV3IEJ1c2luZXNzRW50aXR5W2JlVmVjdG9yLnNpemUoKV07Ci0gICAgICAgICAgYmVWZWN0b3IudG9BcnJheShiZUxpc3QpOwotICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KGJlTGlzdCxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YoYmVMaXN0Lmxlbmd0aCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0JVU0lORVNTRVNfRk9VTkQiKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMzA0Y2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FLG5hbWUpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUaGlzIHNob3VsZG4ndCBvY2N1ci4KLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpOwotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQobmV3IE5hbWUobmFtZSkpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIAotICAgICAgQnVzaW5lc3NJbmZvcyBidXNJbmZvcyA9IHByb3h5LmZpbmRfYnVzaW5lc3MobmFtZVZlY3RvciwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCkuZ2V0QnVzaW5lc3NJbmZvcygpOwotICAgICAgaW50IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzID0gTWF0aC5taW4oVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUywgYnVzSW5mb3Muc2l6ZSgpKTsKLSAgICAgIFZlY3RvciBidXNpbmVzc0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJ1c2luZXNzSW5mbyBidXNJbmZvID0gYnVzSW5mb3MuZ2V0KGkpOwotICAgICAgICBidXNpbmVzc0tleXMuYWRkRWxlbWVudChidXNJbmZvLmdldEJ1c2luZXNzS2V5KCkpOwotICAgICAgfQotCi0gICAgICBpZiAoZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXMgPiAwKQotICAgICAgewotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgVmVjdG9yIGJlVmVjdG9yID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKGJ1c2luZXNzS2V5cykuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgICAgICBCdXNpbmVzc0VudGl0eVtdIGJlTGlzdCA9IG5ldyBCdXNpbmVzc0VudGl0eVtiZVZlY3Rvci5zaXplKCldOwotICAgICAgICAgIGJlVmVjdG9yLnRvQXJyYXkoYmVMaXN0KTsKLSAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudChiZUxpc3QscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0JVU0lORVNTRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKGJlTGlzdC5sZW5ndGgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19CVVNJTkVTU0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjViZDQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSk7Ci0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAodXVpZEtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksdXVpZEtleSk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHV1aWRLZXkpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VVUlEX0tFWSIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsgICAgICAKLSAgICAgIFN0cmluZyB1dWlkS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUgb3IgZXZlbiBVRERJTWFpbk5vZGUuCi0gICAgICBpZiAocmVnTm9kZV8gPT0gbnVsbCkKLSAgICAgICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKE5vZGUpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUkVGUkVTSF9OT0RFKSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFRNb2RlbERldGFpbCB0TW9kZWxEZXRhaWwgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKHV1aWRLZXkpOwotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKTsKLSAgICAgIGlmICh0TW9kZWxWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpdE1vZGVsVmVjdG9yLmVsZW1lbnRBdCgwKTsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFRNb2RlbFtdIHRNb2RlbEFycmF5ID0gbmV3IFRNb2RlbFsxXTsKLSAgICAgICAgICB0TW9kZWxBcnJheVswXSA9IHRNb2RlbDsKLSAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudCh0TW9kZWxBcnJheSxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZih0TW9kZWxBcnJheS5sZW5ndGgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCx0TW9kZWwpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3MWZkODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLlRNb2RlbEluc3RhbmNlRGV0YWlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuVE1vZGVsSW5zdGFuY2VJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZWdpc3RlcmVkSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbExpc3Q7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcnM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VULFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfUkVTVUxUUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXNlU2VydmljZUNoZWNrZWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UpOwotICAgIFN0cmluZ1tdIHNlcnZpY2VOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFKTsKLSAgICBTdHJpbmcgb3duZWRDaGVja2VkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEKTsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGZpbmRRdWFsaWZpZXJWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUik7Ci0gICAgU3RyaW5nIG1heFNlYXJjaFNldCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgU3RyaW5nIG1heFJlc3VsdHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGlmICh1c2VTZXJ2aWNlQ2hlY2tlZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UsdXNlU2VydmljZUNoZWNrZWQpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UpOwotICAgIAotICAgIGlmIChzZXJ2aWNlTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEFsdGhvdWdoIHdlIGFscmVhZHkgaGF2ZSB0aGUgInN1Ym1pdHRlZCIgZGF0YSwgZGVsZXRpb25zIG9jY3VyIG9uIHRoZSBjbGllbnQgc2lkZSBhbmQgdGh1cyB0aGUgbmVlZCB0byB0cmFjayB0aGlzIHVzaW5nIGhpZGRlbiBmb3JtIGVsZW1lbnRzLgotICAgICAgVmVjdG9yIHNpU2VydmljZSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UpOwotICAgICAgaWYgKHNpU2VydmljZSA9PSBudWxsKQotICAgICAgICBzaVNlcnZpY2UgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNpU2VydmljZS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNpU2VydmljZUNvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFX0NPUFkpOwotICAgICAgLy8gVGhlIGJyb3dzZXIgd2lsbCBlbmZvcmNlIHRoZSBydWxlIG9mIGhhdmluZyBvbmx5IG9uZSBzZXJ2aWNlIGluIHRoaXMgbGlzdC4KLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNpU2VydmljZUNvcHkuZWxlbWVudEF0KDApOwotICAgICAgc2lTZXJ2aWNlLmFkZEVsZW1lbnQobGlzdEVsZW1lbnQpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0Usc2lTZXJ2aWNlKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0JVU0lORVNTX1NFUlZJQ0UsYnMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFKTsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQlVTSU5FU1NfU0VSVklDRSk7Ci0gICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiB1c2VTZXJ2aWNlQ2hlY2tlZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfU0VSVklDRSIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG93bmVkQ2hlY2tlZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfT1dORUQsb3duZWRDaGVja2VkKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX09XTkVEKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWUpOwotCi0gICAgaWYgKGlkVHlwZXMgIT0gbnVsbCAmJiBpZEtleU5hbWVzICE9IG51bGwgJiYgaWRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gbmV3IElkZW50aWZpZXJCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGlkS2V5TmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoaWRLZXlOYW1lc1tpXSxpZEtleVZhbHVlc1tpXSxpZFR5cGVzW2ldKTsKLSAgICAgICAgaWRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTLGlkQmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0KLSAgICBpZiAoY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTLGNhdEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0KLSAgICBpZiAoZmluZFF1YWxpZmllclZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEZpbmRRdWFsaWZpZXJzIGZpbmRRdWFsaWZpZXJzID0gbmV3IEZpbmRRdWFsaWZpZXJzKCk7Ci0gICAgICBWZWN0b3IgZmluZFF1YWxpZmllclZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGZpbmRRdWFsaWZpZXJWYWx1ZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gbmV3IEZpbmRRdWFsaWZpZXIoZmluZFF1YWxpZmllclZhbHVlc1tpXSk7Ci0gICAgICAgIGZpbmRRdWFsaWZpZXJWZWN0b3IuYWRkRWxlbWVudChmaW5kUXVhbGlmaWVyKTsKLSAgICAgIH0KLSAgICAgIGZpbmRRdWFsaWZpZXJzLnNldEZpbmRRdWFsaWZpZXJWZWN0b3IoZmluZFF1YWxpZmllclZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9GSU5EUVVBTElGSUVSUyxmaW5kUXVhbGlmaWVycyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfRklORFFVQUxJRklFUlMpOwotCi0gICAgaWYgKG1heFNlYXJjaFNldCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfU0VBUkNIX1NFVCxtYXhTZWFyY2hTZXQpOwotICAgIH0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlSW50ZWdlcihtYXhTZWFyY2hTZXQpKQotICAgIHsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX01BWF9TRUFSQ0hfU0VUIikpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobWF4UmVzdWx0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0gICAgfQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVJbnRlZ2VyKG1heFJlc3VsdHMpKQotICAgIHsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX01BWF9SRVNVTFRTIikpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBvdmVycmlkZUF1dGhlbnRpY2F0aW9uVmFsaWRhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7ICAgICAgCi0gICAgICBib29sZWFuIHVzZVNlcnZpY2UgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UpICE9IG51bGwpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9CVVNJTkVTU19TRVJWSUNFKTsKLSAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIEZpbmRRdWFsaWZpZXJzIGZpbmRRdWFsaWZpZXJzID0gKEZpbmRRdWFsaWZpZXJzKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0ZJTkRRVUFMSUZJRVJTKTsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRlbnRpZmllckJhZyA9IChJZGVudGlmaWVyQmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gKENhdGVnb3J5QmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotICAgICAgYm9vbGVhbiBvd25lZCA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9PV05FRCkgIT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgaW50IG1heFNlYXJjaFNldCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfU0VBUkNIX1NFVCkpOwotICAgICAgaW50IG1heFJlc3VsdHMgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMpKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVmVjdG9yIHRNb2RlbEtleVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIAotICAgICAgaWYgKG93bmVkKQotICAgICAgewotICAgICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgICAgdE1vZGVsS2V5VmVjdG9yID0gZmluZEFsbE93bmVkVE1vZGVscyhwcm94eSwgcmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBtYXhSZXN1bHRzKTsKLSAgICAgIH0KLSAgICAgIGlmICh1c2VTZXJ2aWNlKQotICAgICAgewotICAgICAgICBCaW5kaW5nVGVtcGxhdGVzIGJpbmRpbmdUZW1wbGF0ZXMgPSBicy5nZXRCaW5kaW5nVGVtcGxhdGVzKCk7Ci0gICAgICAgIGJvb2xlYW4gZW5kU2VhcmNoID0gZmFsc2U7Ci0gICAgICAgIGlmIChiaW5kaW5nVGVtcGxhdGVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxiaW5kaW5nVGVtcGxhdGVzLnNpemUoKTtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ1RlbXBsYXRlIGJ0ID0gYmluZGluZ1RlbXBsYXRlcy5nZXQoaSk7Ci0gICAgICAgICAgICBUTW9kZWxJbnN0YW5jZURldGFpbHMgdE1vZGVsSW5zdGFuY2VEZXRhaWxzID0gYnQuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqPTA7ajx0TW9kZWxJbnN0YW5jZURldGFpbHMuc2l6ZSgpO2orKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVE1vZGVsSW5zdGFuY2VJbmZvIHRNb2RlbEluc3RhbmNlSW5mbyA9IHRNb2RlbEluc3RhbmNlRGV0YWlscy5nZXQoaik7Ci0gICAgICAgICAgICAgIGlmICh0TW9kZWxLZXlWZWN0b3Iuc2l6ZSgpIDwgbWF4UmVzdWx0cykKLSAgICAgICAgICAgICAgICB0TW9kZWxLZXlWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWxJbnN0YW5jZUluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbmRTZWFyY2ggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZW5kU2VhcmNoKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgIAotICAgICAgICBUTW9kZWxMaXN0IHRNb2RlbExpc3QgPSBwcm94eS5maW5kX3RNb2RlbChuYW1lLGNhdGVnb3J5QmFnLGlkZW50aWZpZXJCYWcsZmluZFF1YWxpZmllcnMsbWF4U2VhcmNoU2V0KTsKLSAgICAgICAgVE1vZGVsSW5mb3MgdE1vZGVsSW5mb3MgPSB0TW9kZWxMaXN0LmdldFRNb2RlbEluZm9zKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbEluZm9zLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBUTW9kZWxJbmZvIHRNb2RlbEluZm8gPSB0TW9kZWxJbmZvcy5nZXQoaSk7Ci0gICAgICAgICAgaWYgKHRNb2RlbEtleVZlY3Rvci5zaXplKCkgPCBtYXhSZXN1bHRzKQotICAgICAgICAgICAgdE1vZGVsS2V5VmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaW50IGZpbmFsTnVtYmVyT2ZUTW9kZWxLZXlzID0gdE1vZGVsS2V5VmVjdG9yLnNpemUoKTsKLSAgICAgIGlmIChmaW5hbE51bWJlck9mVE1vZGVsS2V5cyA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBWZWN0b3IgZmluYWxUTW9kZWxWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgaW50IGN1cnJlbnRJbmRleCA9IDA7Ci0gICAgICAgICAgaW50IHdpbmRvd1NpemUgPSBmaW5hbE51bWJlck9mVE1vZGVsS2V5czsKLSAgICAgICAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgdE1vZGVsS2V5VmVjdG9yLnNpemUoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3ViTGlzdFRvSW5kZXggPSBNYXRoLm1pbihjdXJyZW50SW5kZXgrd2luZG93U2l6ZSx0TW9kZWxLZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBUTW9kZWxEZXRhaWwgdE1vZGVsRGV0YWlsID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbChuZXcgVmVjdG9yKHRNb2RlbEtleVZlY3Rvci5zdWJMaXN0KGN1cnJlbnRJbmRleCxzdWJMaXN0VG9JbmRleCkpKTsKLSAgICAgICAgICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKTsKLSAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8dE1vZGVsVmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgICAgICAgICAgZmluYWxUTW9kZWxWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWxWZWN0b3IuZWxlbWVudEF0KGkpKTsKLSAgICAgICAgICAgICAgaWYgKHRNb2RlbERldGFpbC5nZXRUcnVuY2F0ZWRCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgd2luZG93U2l6ZSA9IHRNb2RlbFZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgICAgIGN1cnJlbnRJbmRleCArPSB3aW5kb3dTaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRGlzcG9zaXRpb25SZXBvcnQgZHIgPSBlLmdldERpc3Bvc2l0aW9uUmVwb3J0KCk7Ci0gICAgICAgICAgICAgIGlmICgoKFJlc3VsdCkgZHIuZ2V0UmVzdWx0VmVjdG9yKCkuZ2V0KDApKS5nZXRFcnJJbmZvKCkuZ2V0RXJyQ29kZSgpID09IERpc3Bvc2l0aW9uUmVwb3J0LkVfaW52YWxpZEtleVBhc3NlZCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBlcnJJbmZvVGV4dCA9ICgoUmVzdWx0KSBkci5nZXRSZXN1bHRWZWN0b3IoKS5nZXQoMCkpLmdldEVyckluZm8oKS5nZXRUZXh0KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaT1jdXJyZW50SW5kZXg7aTxzdWJMaXN0VG9JbmRleDtpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgU3RyaW5nIHRNb2RlbEtleSA9IChTdHJpbmcpdE1vZGVsS2V5VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgIGlmIChlcnJJbmZvVGV4dC5pbmRleE9mKHRNb2RlbEtleSkgIT0gLTEgfHwgZXJySW5mb1RleHQuaW5kZXhPZih0TW9kZWxLZXkudG9VcHBlckNhc2UoKSkgIT0gLTEgfHwgZXJySW5mb1RleHQuaW5kZXhPZih0TW9kZWxLZXkudG9Mb3dlckNhc2UoKSkgIT0gLTEpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRNb2RlbEtleVZlY3Rvci5yZW1vdmVFbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgaW50IGZpbmFsTnVtYmVyT2ZUTW9kZWxzID0gZmluYWxUTW9kZWxWZWN0b3Iuc2l6ZSgpOwotICAgICAgICAgIGlmIChmaW5hbE51bWJlck9mVE1vZGVscyA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgVE1vZGVsW10gdE1vZGVsQXJyYXkgPSBuZXcgVE1vZGVsW2ZpbmFsTnVtYmVyT2ZUTW9kZWxzXTsKLSAgICAgICAgICAgIGZpbmFsVE1vZGVsVmVjdG9yLnRvQXJyYXkodE1vZGVsQXJyYXkpOwotICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudCh0TW9kZWxBcnJheSxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YodE1vZGVsQXJyYXkubGVuZ3RoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvLyBDb3BpZWQgZGlyZWN0bHkgZnJvbSBVRERJV1NETFByb3h5J3MgZmluZEFsbFNlcnZpY2VJbnRlcmZhY2VzKCkgbWV0aG9kIHdpdGggbWlub3IgbW9kaWZpY2F0aW9ucy4gVGhlIGhhcmRjb2RlZCBzdHJpbmdzIHNob3VsZCBOT1QgYmUgdHJhbnNsYXRlZC4KLSAgcHJpdmF0ZSBmaW5hbCBWZWN0b3IgZmluZEFsbE93bmVkVE1vZGVscyhVRERJUHJveHkgcHJveHksIFN0cmluZyBhdXRoSW5mb1N0cmluZywgaW50IG1heFJlc3VsdHMpIHRocm93cyBVRERJRXhjZXB0aW9uLCBUcmFuc3BvcnRFeGNlcHRpb24KLSAgewotICAgIFJlZ2lzdGVyZWRJbmZvIHJlZ2lzdGVyZWRJbmZvID0gbnVsbDsKLQotICAgIC8vIEdldCB0aGUgY29tcGxldGUgbGlzdCBvZiBvd25lZCAocmVnaXN0ZXJlZCkgaW5mby4KLSAgICAvLyAoQSBSZWdpc3RlcmVkSW5mbyBjb25zaXN0cyBvZiBCdXNpbmVzc0luZm9zIGFuZCBUTW9kZWxJbmZvcy4KLSAgICAvLyBCdXNpbmVzc0luZm9zIGFsc28gY29udGFpbiBTZXJ2aWNlSW5mb3MuKQotICAgIHJlZ2lzdGVyZWRJbmZvID0gcHJveHkuZ2V0X3JlZ2lzdGVyZWRJbmZvKGF1dGhJbmZvU3RyaW5nKTsKLQotICAgIC8vQ3JlYXRlIGEgVmVjdG9yIHRvIGFkZCB0aGUgVE1vZGVsS2V5cyBmcm9tIHRoZSByZWdpc3RlcmVkSW5mby4KLSAgICBWZWN0b3IgdE1vZGVsS2V5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vR2V0IHRoZSBUTW9kZWxJbmZvcyBmcm9tIHRoZSByZWdpc3RlcmVkSW5mby4KLSAgICBUTW9kZWxJbmZvcyB0TW9kZWxJbmZvcyA9IHJlZ2lzdGVyZWRJbmZvLmdldFRNb2RlbEluZm9zKCk7Ci0KLSAgICAvL0dldCBhbGwgdGhlIFRNb2RlbEtleXMgZnJvbSB3aXRoaW4gdGhlIFRNb2RlbEluZm9zCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0TW9kZWxJbmZvcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBUTW9kZWxJbmZvIHRNb2RlbEluZm8gPSB0TW9kZWxJbmZvcy5nZXQoaSk7Ci0gICAgICBpZiAodE1vZGVsS2V5TGlzdC5zaXplKCkgPCBtYXhSZXN1bHRzKQotICAgICAgICB0TW9kZWxLZXlMaXN0LmFkZEVsZW1lbnQodE1vZGVsSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGJyZWFrOwotICAgIH0gICAgCi0gICAgcmV0dXJuIHRNb2RlbEtleUxpc3Q7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhiZmVkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxuYW1lKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgb2NjdXIuCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOyAgICAgIAotICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFRNb2RlbExpc3QgdE1vZGVsTGlzdCA9IHByb3h5LmZpbmRfdE1vZGVsKG5hbWUsbnVsbCxudWxsLG51bGwsVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgICBUTW9kZWxJbmZvcyB0TW9kZWxJbmZvcyA9IHRNb2RlbExpc3QuZ2V0VE1vZGVsSW5mb3MoKTsKLSAgICAgIFZlY3RvciB0TW9kZWxLZXlWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAKLSAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbEluZm9zLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbEluZm8gdE1vZGVsSW5mbyA9IHRNb2RlbEluZm9zLmdldChpKTsKLSAgICAgICAgaWYgKHRNb2RlbEtleVZlY3Rvci5zaXplKCkgPCBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKQotICAgICAgICAgIHRNb2RlbEtleVZlY3Rvci5hZGRFbGVtZW50KHRNb2RlbEluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmICh0TW9kZWxLZXlWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFRNb2RlbERldGFpbCB0TW9kZWxEZXRhaWwgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKHRNb2RlbEtleVZlY3Rvcik7Ci0gICAgICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKTsKLSAgICAgICAgICBUTW9kZWxbXSB0TW9kZWxBcnJheSA9IG5ldyBUTW9kZWxbdE1vZGVsVmVjdG9yLnNpemUoKV07Ci0gICAgICAgICAgdE1vZGVsVmVjdG9yLnRvQXJyYXkodE1vZGVsQXJyYXkpOwotICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KHRNb2RlbEFycmF5LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKHRNb2RlbEFycmF5Lmxlbmd0aCkpKTsgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZVVVSURBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWVhNWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZURldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIGlmICh1dWlkS2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLHV1aWRLZXkpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1dWlkS2V5KSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VVUlEX0tFWSIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsKLSAgICAgIFN0cmluZyB1dWlkS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZSBvciBldmVuIFVERElNYWluTm9kZS4KLSAgICAgIGlmIChyZWdOb2RlXyA9PSBudWxsKQotICAgICAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgoTm9kZSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5SRUZSRVNIX05PREUpKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlW10gYnNBcnJheSA9IG5ldyBCdXNpbmVzc1NlcnZpY2VbMV07Ci0gICAgICBTZXJ2aWNlRGV0YWlsIHNlcnZpY2VEZXRhaWwgPSBwcm94eS5nZXRfc2VydmljZURldGFpbCh1dWlkS2V5KTsKLSAgICAgIFZlY3RvciBic1ZlY3RvciA9IHNlcnZpY2VEZXRhaWwuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCk7Ci0gICAgICBpZiAoYnNWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgYnNWZWN0b3IudG9BcnJheShic0FycmF5KTsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KGJzQXJyYXkscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZihic0FycmF5Lmxlbmd0aCkpKTsKLSAgICAgICAgfQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULGJzQXJyYXlbMF0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI2ZDJjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlZ2lzdGVyZWRJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVzdWx0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZURldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZUluZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZUxpc3Q7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcnM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5UTW9kZWxCYWc7Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1NFQVJDSF9TRVQsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCkpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUykpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG93bmVkQ2hlY2tlZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCk7Ci0gICAgU3RyaW5nW10gYnVzTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MpOwotICAgIFN0cmluZ1tdIGxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gc2lOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSk7Ci0gICAgU3RyaW5nW10gZmluZFF1YWxpZmllclZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9GSU5EUVVBTElGSUVSKTsKLSAgICBTdHJpbmcgbWF4U2VhcmNoU2V0ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUKTsKLSAgICBTdHJpbmcgbWF4UmVzdWx0cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfUkVTVUxUUyk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICByZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgaWYgKG93bmVkQ2hlY2tlZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9PV05FRCxvd25lZENoZWNrZWQpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9PV05FRCk7Ci0KLSAgICBpZiAoYnVzTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEFsdGhvdWdoIHdlIGFscmVhZHkgaGF2ZSB0aGUgInN1Ym1pdHRlZCIgZGF0YSwgZGVsZXRpb25zIG9jY3VyIG9uIHRoZSBjbGllbnQgc2lkZSBhbmQgdGh1cyB0aGUgbmVlZCB0byB0cmFjayB0aGlzIHVzaW5nIGhpZGRlbiBmb3JtIGVsZW1lbnRzLgotICAgICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgaWYgKHNlcnZpY2VCdXNpbmVzcyA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlQnVzaW5lc3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNlcnZpY2VCdXNpbmVzcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFkpOwotICAgICAgLy8gVGhlIGJyb3dzZXIgd2lsbCBlbmZvcmNlIHRoZSBydWxlIG9mIGhhdmluZyBvbmx5IG9uZSBidXNpbmVzcyBpbiB0aGlzIGxpc3QuCi0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlQnVzaW5lc3NDb3B5LmVsZW1lbnRBdCgwKTsKLSAgICAgIHNlcnZpY2VCdXNpbmVzcy5hZGRFbGVtZW50KGxpc3RFbGVtZW50KTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IHNwID0gKEJ1c2luZXNzRW50aXR5KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxzZXJ2aWNlQnVzaW5lc3MpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLHNwKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUik7Ci0gICAgfQotCi0gICAgaWYgKGxhbmd1YWdlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChsYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSxsYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldKTsKLSAgICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KHVkZGk0ak5hbWUpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxuYW1lVmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLQotICAgIGlmIChjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyxjYXRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0KLSAgICBpZiAoc2lOb2RlSWRzICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQWx0aG91Z2ggd2UgYWxyZWFkeSBoYXZlIHRoZSAic3VibWl0dGVkIiBkYXRhLCBkZWxldGlvbnMgb2NjdXIgb24gdGhlIGNsaWVudCBzaWRlIGFuZCB0aHVzIHRoZSBuZWVkIHRvIHRyYWNrIHRoaXMgdXNpbmcgaGlkZGVuIGZvcm0gZWxlbWVudHMuCi0gICAgICBWZWN0b3Igc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgaWYgKHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcyA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZKTsKLSAgICAgIFZlY3RvciB0TW9kZWxLZXlTdHJpbmdWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBIYXNodGFibGUgcmVzdWx0SGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNpTm9kZUlkcy5sZW5ndGg7aSsrKQotICAgICAgICByZXN1bHRIYXNoLnB1dChzaU5vZGVJZHNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weS5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGlmIChyZXN1bHRIYXNoLmdldChTdHJpbmcudmFsdWVPZihsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKSkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgdE1vZGVsS2V5U3RyaW5nVmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsLmdldFRNb2RlbEtleSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgVE1vZGVsQmFnIHRNb2RlbEJhZyA9IG5ldyBUTW9kZWxCYWcodE1vZGVsS2V5U3RyaW5nVmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTLHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTEJBRyx0TW9kZWxCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMQkFHKTsKLSAgICB9Ci0KLSAgICBpZiAoZmluZFF1YWxpZmllclZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEZpbmRRdWFsaWZpZXJzIGZpbmRRdWFsaWZpZXJzID0gbmV3IEZpbmRRdWFsaWZpZXJzKCk7Ci0gICAgICBWZWN0b3IgZmluZFF1YWxpZmllclZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGZpbmRRdWFsaWZpZXJWYWx1ZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gbmV3IEZpbmRRdWFsaWZpZXIoZmluZFF1YWxpZmllclZhbHVlc1tpXSk7Ci0gICAgICAgIGZpbmRRdWFsaWZpZXJWZWN0b3IuYWRkRWxlbWVudChmaW5kUXVhbGlmaWVyKTsKLSAgICAgIH0KLSAgICAgIGZpbmRRdWFsaWZpZXJzLnNldEZpbmRRdWFsaWZpZXJWZWN0b3IoZmluZFF1YWxpZmllclZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0ZJTkRRVUFMSUZJRVJTLGZpbmRRdWFsaWZpZXJzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0ZJTkRRVUFMSUZJRVJTKTsKLQotICAgIGlmIChtYXhTZWFyY2hTZXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCxtYXhTZWFyY2hTZXQpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCxtYXhTZWFyY2hTZXQpOwotICAgIH0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlSW50ZWdlcihtYXhTZWFyY2hTZXQpKQotICAgIHsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTUFYX1NFQVJDSF9TRVQiKSk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtYXhSZXN1bHRzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICAgIH0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlSW50ZWdlcihtYXhSZXN1bHRzKSkKLSAgICB7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX01BWF9SRVNVTFRTIikpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsgICAgICAKLSAgICAgIEZpbmRRdWFsaWZpZXJzIGZpbmRRdWFsaWZpZXJzID0gKEZpbmRRdWFsaWZpZXJzKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfRklORFFVQUxJRklFUlMpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgc3AgPSAoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSKTsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gKENhdGVnb3J5QmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICAgICBUTW9kZWxCYWcgdE1vZGVsQmFnID0gKFRNb2RlbEJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTEJBRyk7Ci0gICAgICBib29sZWFuIG93bmVkID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfT1dORUQpICE9IG51bGwpOwotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIGludCBtYXhTZWFyY2hTZXQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCkpOwotICAgICAgaW50IG1heFJlc3VsdHMgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfUkVTVUxUUykpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAob3duZWQgJiYgIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICAgIAotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgU3RyaW5nIGJ1c2luZXNzS2V5OwotICAgICAgaWYgKHNwICE9IG51bGwpCi0gICAgICAgIGJ1c2luZXNzS2V5ID0gc3AuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnVzaW5lc3NLZXkgPSAiIjsKLQotICAgICAgaW50IGZpbmFsTnVtYmVyT2ZTZXJ2aWNlS2V5czsKLSAgICAgIFZlY3RvciBzZXJ2aWNlS2V5VmVjdG9yOwotICAgICAgaWYgKG93bmVkKQotICAgICAgewotICAgICAgICBzZXJ2aWNlS2V5VmVjdG9yID0gZmluZEFsbE93bmVkU2VydmljZXMocHJveHkscmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLGJ1c2luZXNzS2V5LG1heFJlc3VsdHMpOwotICAgICAgICBmaW5hbE51bWJlck9mU2VydmljZUtleXMgPSBzZXJ2aWNlS2V5VmVjdG9yLnNpemUoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU2VydmljZUxpc3Qgc2VydmljZUxpc3QgPSBwcm94eS5maW5kX3NlcnZpY2UoYnVzaW5lc3NLZXksbmFtZVZlY3RvcixjYXRlZ29yeUJhZyx0TW9kZWxCYWcsZmluZFF1YWxpZmllcnMsbWF4U2VhcmNoU2V0KTsKLSAgICAgICAgU2VydmljZUluZm9zIHNJbmZvcyA9IHNlcnZpY2VMaXN0LmdldFNlcnZpY2VJbmZvcygpOwotICAgICAgICBmaW5hbE51bWJlck9mU2VydmljZUtleXMgPSBNYXRoLm1pbihtYXhSZXN1bHRzLHNJbmZvcy5zaXplKCkpOwotICAgICAgICBzZXJ2aWNlS2V5VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxmaW5hbE51bWJlck9mU2VydmljZUtleXM7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZUluZm8gc0luZm8gPSBzSW5mb3MuZ2V0KGkpOwotICAgICAgICAgIHNlcnZpY2VLZXlWZWN0b3IuYWRkRWxlbWVudChzSW5mby5nZXRTZXJ2aWNlS2V5KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChmaW5hbE51bWJlck9mU2VydmljZUtleXMgPiAwKQotICAgICAgeyAgICAgIAotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgVmVjdG9yIGZpbmFsQnVzU2VydmljZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBpbnQgY3VycmVudEluZGV4ID0gMDsKLSAgICAgICAgICBpbnQgd2luZG93U2l6ZSA9IGZpbmFsTnVtYmVyT2ZTZXJ2aWNlS2V5czsKLSAgICAgICAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgc2VydmljZUtleVZlY3Rvci5zaXplKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW50IHN1Ykxpc3RUb0luZGV4ID0gTWF0aC5taW4oY3VycmVudEluZGV4K3dpbmRvd1NpemUsc2VydmljZUtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNlcnZpY2VEZXRhaWwgc2VydmljZURldGFpbCA9IHByb3h5LmdldF9zZXJ2aWNlRGV0YWlsKG5ldyBWZWN0b3Ioc2VydmljZUtleVZlY3Rvci5zdWJMaXN0KGN1cnJlbnRJbmRleCxzdWJMaXN0VG9JbmRleCkpKTsKLSAgICAgICAgICAgICAgVmVjdG9yIGJ1c1NlcnZpY2VWZWN0b3IgPSBzZXJ2aWNlRGV0YWlsLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTxidXNTZXJ2aWNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgICAgICAgICAgZmluYWxCdXNTZXJ2aWNlVmVjdG9yLmFkZEVsZW1lbnQoYnVzU2VydmljZVZlY3Rvci5lbGVtZW50QXQoaSkpOwotICAgICAgICAgICAgICBpZiAoc2VydmljZURldGFpbC5nZXRUcnVuY2F0ZWRCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgd2luZG93U2l6ZSA9IGJ1c1NlcnZpY2VWZWN0b3Iuc2l6ZSgpOwotICAgICAgICAgICAgICBjdXJyZW50SW5kZXggKz0gd2luZG93U2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IGRyID0gZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotICAgICAgICAgICAgICBpZiAoKChSZXN1bHQpIGRyLmdldFJlc3VsdFZlY3RvcigpLmdldCgwKSkuZ2V0RXJySW5mbygpLmdldEVyckNvZGUoKSA9PSBEaXNwb3NpdGlvblJlcG9ydC5FX2ludmFsaWRLZXlQYXNzZWQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZXJySW5mb1RleHQgPSAoKFJlc3VsdCkgZHIuZ2V0UmVzdWx0VmVjdG9yKCkuZ2V0KDApKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGk9Y3VycmVudEluZGV4O2k8c3ViTGlzdFRvSW5kZXg7aSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gKFN0cmluZylzZXJ2aWNlS2V5VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgIGlmIChlcnJJbmZvVGV4dC5pbmRleE9mKHNlcnZpY2VLZXkpICE9IC0xIHx8IGVyckluZm9UZXh0LmluZGV4T2Yoc2VydmljZUtleS50b1VwcGVyQ2FzZSgpKSAhPSAtMSB8fCBlcnJJbmZvVGV4dC5pbmRleE9mKHNlcnZpY2VLZXkudG9Mb3dlckNhc2UoKSkgIT0gLTEpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VLZXlWZWN0b3IucmVtb3ZlRWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGludCBmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlcyA9IGZpbmFsQnVzU2VydmljZVZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZCdXNpbmVzc1NlcnZpY2VzID4gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCdXNpbmVzc1NlcnZpY2VbXSBic0FycmF5ID0gbmV3IEJ1c2luZXNzU2VydmljZVtmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlc107Ci0gICAgICAgICAgICBmaW5hbEJ1c1NlcnZpY2VWZWN0b3IudG9BcnJheShic0FycmF5KTsKLSAgICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQoYnNBcnJheSxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZihic0FycmF5Lmxlbmd0aCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VTX0ZPVU5EIikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRVNfRk9VTkQiKSk7Ci0gICAgfSAgIAotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0gCi0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvLyBDb3BpZWQgZGlyZWN0bHkgZnJvbSBVRERJV1NETFByb3h5J3MgZmluZEFsbE93bmVkU2VydmljZXMoKSBtZXRob2Qgd2l0aCBtaW5vciBtb2RpZmljYXRpb25zLiBUaGUgaGFyZGNvZGVkIHN0cmluZ3Mgc2hvdWxkIE5PVCBiZSB0cmFuc2xhdGVkLgotICBwcml2YXRlIGZpbmFsIFZlY3RvciBmaW5kQWxsT3duZWRTZXJ2aWNlcyhVRERJUHJveHkgcHJveHksU3RyaW5nIGF1dGhJbmZvU3RyaW5nLFN0cmluZyBidXNpbmVzc0tleSxpbnQgbWF4UmVzdWx0cykgdGhyb3dzIFVERElFeGNlcHRpb24sIFRyYW5zcG9ydEV4Y2VwdGlvbgotICB7Ci0gICAgUmVnaXN0ZXJlZEluZm8gcmVnaXN0ZXJlZEluZm8gPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSBjb21wbGV0ZSBsaXN0IG9mIG93bmVkIChyZWdpc3RlcmVkKSBpbmZvLgotICAgIC8vIChBIFJlZ2lzdGVyZWRJbmZvIGNvbnNpc3RzIG9mIEJ1c2luZXNzSW5mb3MgYW5kIFRNb2RlbEluZm9zLgotICAgIC8vIEJ1c2luZXNzSW5mb3MgYWxzbyBjb250YWluIFNlcnZpY2VJbmZvcy4pCi0gICAgcmVnaXN0ZXJlZEluZm8gPSBwcm94eS5nZXRfcmVnaXN0ZXJlZEluZm8oYXV0aEluZm9TdHJpbmcpOwotCi0gICAgLy9DcmVhdGUgYSB2ZWN0b3IgdG8gYWRkIHRoZSBzZXJ2aWNlS2V5cyBmcm9tIHRoZSByZWdpc3RlcmVkSW5mbyB0by4KLSAgICBWZWN0b3Igc2VydmljZUtleUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvL0dldCB0aGUgYnVzaW5lc3NJbmZvcyBmcm9tIHRoZSByZWdpc3RlcmVkSW5mby4KLSAgICBCdXNpbmVzc0luZm9zIGJ1c2luZXNzSW5mb3MgPSByZWdpc3RlcmVkSW5mby5nZXRCdXNpbmVzc0luZm9zKCk7Ci0KLSAgICAvL0dldCBhbGwgdGhlIHNlcnZpY2VLZXlzIGZyb20gdGhlIHNlcnZpY2VJbmZvcyB3aXRoaW4gdGhlIGJ1c2luZXNzSW5mb3MsCi0gICAgLy9hbmQgYWRkIHRoZW0gdG8gdGhlIHNlcnZpY2VLZXlMaXN0LgotICAgIGJvb2xlYW4gZW5kU2VhcmNoID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidXNpbmVzc0luZm9zLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIEJ1c2luZXNzSW5mbyBidXNpbmVzc0luZm8gPSBidXNpbmVzc0luZm9zLmdldChpKTsKLSAgICAgIFN0cmluZyBjdXJyZW50QnVzaW5lc3NLZXkgPSBidXNpbmVzc0luZm8uZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgIGlmIChidXNpbmVzc0tleS5sZW5ndGgoKSA+IDAgJiYgY3VycmVudEJ1c2luZXNzS2V5LmVxdWFscyhidXNpbmVzc0tleSkpCi0gICAgICAgIGVuZFNlYXJjaCA9IHRydWU7Ci0gICAgICBTZXJ2aWNlSW5mb3Mgc2VydmljZUluZm9zID0gYnVzaW5lc3NJbmZvLmdldFNlcnZpY2VJbmZvcygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZXJ2aWNlSW5mb3Muc2l6ZSgpOyBqKyspCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VJbmZvIHNlcnZpY2VJbmZvID0gc2VydmljZUluZm9zLmdldChqKTsKLSAgICAgICAgaWYgKHNlcnZpY2VJbmZvLmdldEJ1c2luZXNzS2V5KCkuZXF1YWxzKGN1cnJlbnRCdXNpbmVzc0tleSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoc2VydmljZUtleUxpc3Quc2l6ZSgpIDwgbWF4UmVzdWx0cykKLSAgICAgICAgICAgIHNlcnZpY2VLZXlMaXN0LmFkZChzZXJ2aWNlSW5mby5nZXRTZXJ2aWNlS2V5KCkpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbmRTZWFyY2ggPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoZW5kU2VhcmNoKQotICAgICAgICBicmVhazsKLSAgICB9ICAgIAotICAgIHJldHVybiBzZXJ2aWNlS2V5TGlzdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1NzU0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FLG5hbWUpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUaGlzIHNob3VsZG4ndCBvY2N1ci4KLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSk7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudChuZXcgTmFtZShuYW1lKSk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgU2VydmljZUxpc3Qgc2VydmljZUxpc3QgPSBwcm94eS5maW5kX3NlcnZpY2UoIiIsbmFtZVZlY3RvcixudWxsLG51bGwsbnVsbCxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9TRUFSQ0hfU0VUKTsKLSAgICAgIAotICAgICAgU2VydmljZUluZm9zIHNJbmZvcyA9IHNlcnZpY2VMaXN0LmdldFNlcnZpY2VJbmZvcygpOwotICAgICAgaW50IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc1NlcnZpY2VzID0gTWF0aC5taW4oVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUyxzSW5mb3Muc2l6ZSgpKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlS2V5VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZmluYWxOdW1iZXJPZkJ1c2luZXNzU2VydmljZXM7aSsrKQotICAgICAgewotICAgICAgICBTZXJ2aWNlSW5mbyBzSW5mbyA9IHNJbmZvcy5nZXQoaSk7Ci0gICAgICAgIHNlcnZpY2VLZXlWZWN0b3IuYWRkRWxlbWVudChzSW5mby5nZXRTZXJ2aWNlS2V5KCkpOwotICAgICAgfQotICAgICAgICAKLSAgICAgIGlmIChmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlcyA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlRGV0YWlsIHNlcnZpY2VEZXRhaWwgPSBwcm94eS5nZXRfc2VydmljZURldGFpbChzZXJ2aWNlS2V5VmVjdG9yKTsKLSAgICAgICAgICBWZWN0b3IgYnVzaW5lc3NTZXJ2aWNlVmVjdG9yID0gc2VydmljZURldGFpbC5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICBCdXNpbmVzc1NlcnZpY2VbXSBic0FycmF5ID0gbmV3IEJ1c2luZXNzU2VydmljZVtmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlc107Ci0gICAgICAgICAgYnVzaW5lc3NTZXJ2aWNlVmVjdG9yLnRvQXJyYXkoYnNBcnJheSk7Ci0gICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQoYnNBcnJheSxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKGJzQXJyYXkubGVuZ3RoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRVNfRk9VTkQiKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzQwY2NkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkxzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwdWJsaWMgUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIG5hbWVMYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25MYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTik7Ci0gICAgU3RyaW5nW10gaWRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUpOwotICAgIFN0cmluZ1tdIGlkS2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBkaXNjb3ZlcnlVUkxWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRElTQ09WRVJZVVJMKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgSGFzaHRhYmxlIGxhbmd1YWdlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBpZiAobmFtZUxhbmd1YWdlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvLyBVRERJJ3Mgc2F2ZSBBUEkgKEFwcGVuZGl4IEMgb2YgdGhlIFVEREkgVjIgUHJvZ3JhbW1lcnMgQVBJIFNwZWNpZmljYXRpb24pIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAvLyAxKSBPbmx5IHRoZSBmaXJzdCByb3cgY2FuIGhhdmUgYSBibGFuayBsYW5ndWFnZS4KLSAgICAgIC8vIDIpIE9ubHkgMSBuYW1lIHBlciBsYW5ndWFnZS4KLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChuYW1lTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0sbmFtZUxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQobmFtZUxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChuYW1lTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmIChuYW1lc1tpXS50cmltKCkubGVuZ3RoKCkgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudCh1ZGRpNGpOYW1lKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLG5hbWVWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fTkFNRVMiKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzICE9IG51bGwgJiYgZGVzY3JpcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKTsKLSAgICAgIGxhbmd1YWdlSGFzaC5jbGVhcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25zLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBEZXNjcmlwdGlvbiB1ZGRpNGpEZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0sZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDAgJiYgIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1tpXS50cmltKCkubGVuZ3RoKCkgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBkZXNjcmlwdGlvblZlY3Rvci5hZGRFbGVtZW50KHVkZGk0akRlc2NyaXB0aW9uKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TKTsKLQotICAgIGlmIChpZFR5cGVzICE9IG51bGwgJiYgaWRLZXlOYW1lcyAhPSBudWxsICYmIGlkS2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgSWRlbnRpZmllckJhZyBpZEJhZyA9IG5ldyBJZGVudGlmaWVyQmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxpZEtleU5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGlkS2V5TmFtZXNbaV0saWRLZXlWYWx1ZXNbaV0saWRUeXBlc1tpXSk7Ci0gICAgICAgIGlkQmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyxpZEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotCi0gICAgaWYgKGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyxjYXRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgICAgCi0gICAgaWYgKGRpc2NvdmVyeVVSTFZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIERpc2NvdmVyeVVSTHMgZGlzY292ZXJ5VVJMcyA9IG5ldyBEaXNjb3ZlcnlVUkxzKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkwiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRpc2NvdmVyeVVSTFZhbHVlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVVSTChkaXNjb3ZlcnlVUkxWYWx1ZXNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGlzY292ZXJ5VVJMcy5hZGQobmV3IERpc2NvdmVyeVVSTChkaXNjb3ZlcnlVUkxWYWx1ZXNbaV0sIiIpKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsZGlzY292ZXJ5VVJMcyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7ICAgICAgCi0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkZW50aWZpZXJCYWcgPSAoSWRlbnRpZmllckJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRlZ29yeUJhZyA9IChDYXRlZ29yeUJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLSAgICAgIERpc2NvdmVyeVVSTHMgZGlzY292ZXJ5VVJMcyA9IChEaXNjb3ZlcnlVUkxzKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gbmV3IEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICBiZS5zZXRCdXNpbmVzc0tleSgiIik7Ci0gICAgICBiZS5zZXROYW1lVmVjdG9yKG5hbWVWZWN0b3IpOwotICAgICAgYmUuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgYmUuc2V0SWRlbnRpZmllckJhZyhpZGVudGlmaWVyQmFnKTsKLSAgICAgIGJlLnNldENhdGVnb3J5QmFnKGNhdGVnb3J5QmFnKTsKLSAgICAgIGJlLnNldERpc2NvdmVyeVVSTHMoZGlzY292ZXJ5VVJMcyk7Ci0gICAgICBWZWN0b3IgYmVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBiZVZlY3Rvci5hZGQoYmUpOwotCi0gICAgICBiZSA9IChCdXNpbmVzc0VudGl0eSlwcm94eS5zYXZlX2J1c2luZXNzKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYmVWZWN0b3IpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApOwotICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUoYmUscmVnRWxlbWVudCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NfUFVCTElTSEVEIixiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjE5OWI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwdWJsaWMgUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpOwotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04pOwotCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUsbmFtZSk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWUpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9OQU1FIikpOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX0RFU0NSSVBUSU9OLGRlc2NyaXB0aW9uKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTik7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotCi0gICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IG5ldyBCdXNpbmVzc0VudGl0eSgpOwotICAgICAgYmUuc2V0QnVzaW5lc3NLZXkoIiIpOwotICAgICAgYmUuc2V0RGVmYXVsdE5hbWUobmV3IE5hbWUobmFtZSkpOwotICAgICAgYmUuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKGRlc2NyaXB0aW9uKTsKLSAgICAgIFZlY3RvciBiZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJlVmVjdG9yLmFkZChiZSk7Ci0KLSAgICAgIGJlID0gKEJ1c2luZXNzRW50aXR5KXByb3h5LnNhdmVfYnVzaW5lc3MocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBiZVZlY3RvcikuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZShiZSxyZWdFbGVtZW50KTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU19QVUJMSVNIRUQiLGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQyNDFmNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBidXNOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyk7Ci0gICAgU3RyaW5nW10gc2VySW50SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nW10gbmFtZUxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FKTsgICAgCi0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25MYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTik7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAoYnVzTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3MgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgICAgIGlmIChzZXJ2aWNlQnVzaW5lc3MgPT0gbnVsbCkKLSAgICAgICAgc2VydmljZUJ1c2luZXNzID0gbmV3IFZlY3RvcigpOwotICAgICAgZWxzZQotICAgICAgICBzZXJ2aWNlQnVzaW5lc3MucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZKTsKLSAgICAgIC8vIFRoZSBicm93c2VyIHdpbGwgZW5mb3JjZSB0aGUgcnVsZSBvZiBoYXZpbmcgb25seSBvbmUgYnVzaW5lc3MgaW4gdGhpcyBsaXN0LgotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzQ29weS5lbGVtZW50QXQoMCk7Ci0gICAgICBzZXJ2aWNlQnVzaW5lc3MuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBzcCA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1Msc2VydmljZUJ1c2luZXNzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUixzcCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSxzcC5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUik7Ci0gICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX0JVU0lORVNTIikpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICAKLSAgICBpZiAoc2VySW50SWRzICE9IG51bGwgJiYgc2VySW50SWRzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgVmVjdG9yIHNlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgaWYgKHNlcnZpY2VJbnRlcmZhY2VzID09IG51bGwpCi0gICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzID0gbmV3IFZlY3RvcigpOwotICAgICAgZWxzZQotICAgICAgICBzZXJ2aWNlSW50ZXJmYWNlcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgICAgVmVjdG9yIHRtb2RlbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc2VydmljZUludGVyZmFjZXNDb3B5Lml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWl0Lm5leHQoKTsKLSAgICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlckludElkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXROb2RlSWQgPT0gSW50ZWdlci5wYXJzZUludChzZXJJbnRJZHNbaV0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBzZXJ2aWNlSW50ZXJmYWNlcy5hZGQobGlzdEVsZW1lbnQpOwotICAgICAgICAgICAgICB0bW9kZWxzLmFkZChsaXN0RWxlbWVudC5nZXRPYmplY3QoKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUywgc2VydmljZUludGVyZmFjZXMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUwsIHRtb2RlbHMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLHdzZGxVUkwpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCx3c2RsVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHdzZGxVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMIikpOwotICAgIH0KLQotICAgIEhhc2h0YWJsZSBsYW5ndWFnZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVMYW5ndWFnZXMgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgLy8gVURESSdzIHNhdmUgQVBJIChBcHBlbmRpeCBDIG9mIHRoZSBVRERJIFYyIFByb2dyYW1tZXJzIEFQSSBTcGVjaWZpY2F0aW9uKSByZXF1aXJlcyB0aGUgZm9sbG93aW5nOgotICAgICAgLy8gMSkgT25seSB0aGUgZmlyc3Qgcm93IGNhbiBoYXZlIGEgYmxhbmsgbGFuZ3VhZ2UuCi0gICAgICAvLyAyKSBPbmx5IDEgbmFtZSBwZXIgbGFuZ3VhZ2UuCi0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIik7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgTmFtZSB1ZGRpNGpOYW1lOwotICAgICAgICBpZiAobmFtZUxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldLG5hbWVMYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDAgJiYgIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQobmFtZUxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KG5hbWVMYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKG5hbWVzW2ldLnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQodWRkaTRqTmFtZSk7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLG5hbWVWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX05BTUVTIikpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIik7Ci0gICAgICBsYW5ndWFnZUhhc2guY2xlYXIoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9ucy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgRGVzY3JpcHRpb24gdWRkaTRqRGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldLGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwICYmICFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2ldLnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IuYWRkRWxlbWVudCh1ZGRpNGpEZXNjcmlwdGlvbik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotCi0gICAgaWYgKGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLGNhdEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSKTsKLSAgICAgIFN0cmluZyBidXNpbmVzc0tleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUwpOwotICAgICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRlZ29yeUJhZyA9IChDYXRlZ29yeUJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLQotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzOwotICAgICAgaWYgKHRNb2RlbFZlY3RvciAhPSBudWxsICYmIHRNb2RlbFZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgICBicyA9IHVkZGk0akhlbHBlci5uZXdCdXNpbmVzc1NlcnZpY2Uod3NkbFVSTCwgZGVmLCAoVE1vZGVsW10pdE1vZGVsVmVjdG9yLnRvQXJyYXkobmV3IFRNb2RlbFswXSkpOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbiByZWdQdWJsaXNoU0lBY3Rpb24gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBpbnQgY3VycmVudE5vZGVJZCA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldE5vZGVJZCgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIFRNb2RlbFtdIHRNb2RlbHMgPSBudWxsOwotICAgICAgICBpZiAodWRkaTRqSGVscGVyLmlzTW9ub2xpdGhpY1dTREwoZGVmKSkKLSAgICAgICAgewotICAgICAgICAgIHRNb2RlbHMgPSBuZXcgVE1vZGVsWzFdOwotICAgICAgICAgIHRNb2RlbHNbMF0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKHdzZGxVUkwsIGRlZik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nW10gaW1wb3J0cyA9IHVkZGk0akhlbHBlci5nZXRJbXBvcnRzKGRlZiwgd3NkbFVSTCk7Ci0gICAgICAgICAgdE1vZGVscyA9IG5ldyBUTW9kZWxbaW1wb3J0cy5sZW5ndGhdOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdE1vZGVscy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHRNb2RlbHNbaV0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKGltcG9ydHNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIEhhc2h0YWJsZSB0TW9kZWxzVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgIGlmICh0TW9kZWxzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTx0TW9kZWxzLmxlbmd0aDtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHJlZ1B1Ymxpc2hTSUFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUodWRkaTRqSGVscGVyLmdldFdTREwodE1vZGVsc1tpXSksIHRNb2RlbHNbaV0pOwotICAgICAgICAgICAgaWYgKGlucHV0c1ZhbGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZWdQdWJsaXNoU0lBY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgICAgIE9iamVjdCBzYXZlZFRNb2RlbCA9IHJlZ1B1Ymxpc2hTSUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfT1VUUFVUX1NBVkVEX1RNT0RFTCk7Ci0gICAgICAgICAgICAgIGlmIChzYXZlZFRNb2RlbCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHRNb2RlbHNUYWJsZS5wdXQoKChUTW9kZWwpc2F2ZWRUTW9kZWwpLmdldE5hbWVTdHJpbmcoKSwgc2F2ZWRUTW9kZWwpOwotICAgICAgICAgICAgICAvLyBSZXNlbGVjdCB0aGUgY3VycmVudCBub2RlLgotICAgICAgICAgICAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChjdXJyZW50Tm9kZUlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnMgPSB1ZGRpNGpIZWxwZXIubmV3QnVzaW5lc3NTZXJ2aWNlKHdzZGxVUkwsIGRlZiwgdE1vZGVsc1RhYmxlKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKGJlICE9IG51bGwpCi0gICAgICAgIGJzLnNldEJ1c2luZXNzS2V5KGJlLmdldEJ1c2luZXNzS2V5KCkpOwotICAgICAgZWxzZSBpZiAoYnVzaW5lc3NLZXkgIT0gbnVsbCkKLSAgICAgICAgYnMuc2V0QnVzaW5lc3NLZXkoYnVzaW5lc3NLZXkpOwotICAgICAgYnMuc2V0TmFtZVZlY3RvcihuYW1lVmVjdG9yKTsKLSAgICAgIGJzLnNldERlc2NyaXB0aW9uVmVjdG9yKGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICAgIGJzLnNldENhdGVnb3J5QmFnKGNhdGVnb3J5QmFnKTsKLSAgICAgIFZlY3RvciBic1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJzVmVjdG9yLmFkZChicyk7Ci0gICAgICByZWdFbGVtZW50LmhhbmRsZVByZUludm9jYXRpb24oYnMpOwotICAgICAgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXByb3h5LnNhdmVfc2VydmljZShyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJzVmVjdG9yKS5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZShicyxyZWdFbGVtZW50KTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX1BVQkxJU0hFRCIsYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiV1NETEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKXsKLSAgICAJCVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAl9Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7ICAgICAgCi0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDFmNWM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25MYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTik7Ci0gICAgU3RyaW5nW10gaWRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUpOwotICAgIFN0cmluZ1tdIGlkS2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgSGFzaHRhYmxlIGxhbmd1YWdlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLQotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCx3c2RsVVJMKTsKLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcod3NkbFVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMIikpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWUpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9OQU1FIikpOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIik7Ci0gICAgICBsYW5ndWFnZUhhc2guY2xlYXIoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9ucy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgRGVzY3JpcHRpb24gdWRkaTRqRGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldLGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwICYmICFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbnNbaV0udHJpbSgpLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IuYWRkRWxlbWVudCh1ZGRpNGpEZXNjcmlwdGlvbik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsZGVzY3JpcHRpb25WZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyk7Ci0KLSAgICBpZiAoaWRUeXBlcyAhPSBudWxsICYmIGlkS2V5TmFtZXMgIT0gbnVsbCAmJiBpZEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRCYWcgPSBuZXcgSWRlbnRpZmllckJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aWRLZXlOYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShpZEtleU5hbWVzW2ldLGlkS2V5VmFsdWVzW2ldLGlkVHlwZXNbaV0pOwotICAgICAgICBpZEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMsaWRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLQotICAgIGlmIChjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMsY2F0QmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRlbnRpZmllckJhZyA9IChJZGVudGlmaWVyQmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gKENhdGVnb3J5QmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgIFRNb2RlbCB0TW9kZWwgPSAobmV3IFVkZGk0akhlbHBlcigpKS5uZXdUTW9kZWwod3NkbFVSTCk7Ci0gICAgICB0TW9kZWwuc2V0TmFtZShuYW1lKTsKLSAgICAgIHRNb2RlbC5zZXREZXNjcmlwdGlvblZlY3RvcihkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgICB0TW9kZWwuc2V0SWRlbnRpZmllckJhZyhpZGVudGlmaWVyQmFnKTsKLSAgICAgIAotICAgICAgLy8gVGhlIGNhdGVnb3J5IGJhZyBtYXkgY29udGFpbiB3c2RsU3BlYy4KLSAgICAgIENhdGVnb3J5QmFnIGRlZmF1bHRDYXRlZ29yeUJhZyA9IHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpOwotICAgICAgVmVjdG9yIGRlZmF1bHRLZXllZFJlZmVyZW5jZVZlY3RvciA9IG51bGw7Ci0gICAgICBpZiAoZGVmYXVsdENhdGVnb3J5QmFnICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChjYXRlZ29yeUJhZyA9PSBudWxsKQotICAgICAgICAgIGNhdGVnb3J5QmFnID0gZGVmYXVsdENhdGVnb3J5QmFnOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZhdWx0S2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBkZWZhdWx0Q2F0ZWdvcnlCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxkZWZhdWx0S2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlkZWZhdWx0S2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgaWYgKGNhdGVnb3J5QmFnICE9IG51bGwpCi0gICAgICAgICAgICAgIGNhdGVnb3J5QmFnLmFkZChrcik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB0TW9kZWwuc2V0Q2F0ZWdvcnlCYWcoY2F0ZWdvcnlCYWcpOwotCi0gICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgdE1vZGVsVmVjdG9yLmFkZCh0TW9kZWwpOwotICAgICAgdE1vZGVsID0gKFRNb2RlbClwcm94eS5zYXZlX3RNb2RlbChyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIHRNb2RlbFZlY3RvcikuZ2V0VE1vZGVsVmVjdG9yKCkuZ2V0KDApOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfT1VUUFVUX1NBVkVEX1RNT0RFTCwgdE1vZGVsKTsKLSAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKHRNb2RlbCxyZWdFbGVtZW50KTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRV9QVUJMSVNIRUQiLHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIldTRExFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSl7Ci0gICAgCQlSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJfQotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE3ZmZlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTik7Ci0KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwsd3NkbFVSTCk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHdzZGxVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkwiKSk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWUpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTkFNRSIpKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTixkZXNjcmlwdGlvbik7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShTdHJpbmcgd3NkbFVSTCwgVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFN0cmluZyBuYW1lID0gdE1vZGVsLmdldE5hbWVTdHJpbmcoKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSB0TW9kZWwuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCx3c2RsVVJMKTsKLSAgICBlbHNlCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIAotICAgIGlmIChuYW1lICE9IG51bGwpIAotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsbmFtZSk7Ci0gICAgZWxzZQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTixkZXNjcmlwdGlvbik7Ci0gICAgZWxzZQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OLCIiKTsKLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT04pOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLQotICAgICAgVE1vZGVsIHRNb2RlbCA9IChuZXcgVWRkaTRqSGVscGVyKCkpLm5ld1RNb2RlbCh3c2RsVVJMKTsKLSAgICAgIHRNb2RlbC5zZXROYW1lKG5hbWUpOwotICAgICAgdE1vZGVsLnNldERlZmF1bHREZXNjcmlwdGlvblN0cmluZyhkZXNjcmlwdGlvbik7Ci0KLSAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB0TW9kZWxWZWN0b3IuYWRkKHRNb2RlbCk7Ci0gICAgICB0TW9kZWwgPSAoVE1vZGVsKXByb3h5LnNhdmVfdE1vZGVsKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgdE1vZGVsVmVjdG9yKS5nZXRUTW9kZWxWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9PVVRQVVRfU0FWRURfVE1PREVMLCB0TW9kZWwpOwotICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUodE1vZGVsLHJlZ0VsZW1lbnQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1BVQkxJU0hFRCIsdE1vZGVsLmdldE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIldTRExFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7ICAgCi0gICAgCWlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpCi0gICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjNjYwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7ICAgIAotICAgIFN0cmluZyBidXNOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OKTsKLQotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgaWYgKGJ1c05vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgaWYgKHNlcnZpY2VCdXNpbmVzcyA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlQnVzaW5lc3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNlcnZpY2VCdXNpbmVzcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU19DT1BZKTsKLSAgICAgIC8vIFRoZSBicm93c2VyIHdpbGwgZW5mb3JjZSB0aGUgcnVsZSBvZiBoYXZpbmcgb25seSBvbmUgYnVzaW5lc3MgaW4gdGhpcyBsaXN0LgotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzQ29weS5lbGVtZW50QXQoMCk7Ci0gICAgICBzZXJ2aWNlQnVzaW5lc3MuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTLHNlcnZpY2VCdXNpbmVzcyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLGJlKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLGJlLmdldEJ1c2luZXNzS2V5KCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpOwotICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfQlVTSU5FU1MiKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLHdzZGxVUkwpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwsd3NkbFVSTCk7Ci0gICAgfQotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh3c2RsVVJMKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkwiKSk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUsbmFtZSk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWUpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX05BTUUiKSk7Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0aW9uICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTixkZXNjcmlwdGlvbik7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpOwotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04pOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgIAotICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgIERlZmluaXRpb24gZGVmID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotICAgICAgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gcmVnUHVibGlzaFNJQWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgIGludCBjdXJyZW50Tm9kZUlkID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Tm9kZUlkKCk7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCk7Ci0KLSAgICAgIEhhc2h0YWJsZSB0TW9kZWxzVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBUTW9kZWxbXSB0TW9kZWxzID0gbnVsbDsKLSAgICAgIGlmICh1ZGRpNGpIZWxwZXIuaXNNb25vbGl0aGljV1NETChkZWYpKQotICAgICAgewotICAgICAgICB0TW9kZWxzID0gbmV3IFRNb2RlbFsxXTsKLSAgICAgICAgdE1vZGVsc1swXSA9IHVkZGk0akhlbHBlci5uZXdUTW9kZWwod3NkbFVSTCwgZGVmKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nW10gaW1wb3J0cyA9IHVkZGk0akhlbHBlci5nZXRJbXBvcnRzKGRlZiwgd3NkbFVSTCk7Ci0gICAgICAgIHRNb2RlbHMgPSBuZXcgVE1vZGVsW2ltcG9ydHMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0TW9kZWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHRNb2RlbHNbaV0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKGltcG9ydHNbaV0pOwotICAgICAgfQotCi0gICAgICBpZiAodE1vZGVscyAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpPTA7aTx0TW9kZWxzLmxlbmd0aDtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gcmVnUHVibGlzaFNJQWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZSh1ZGRpNGpIZWxwZXIuZ2V0V1NETCh0TW9kZWxzW2ldKSwgdE1vZGVsc1tpXSk7Ci0gICAgICAgICAgaWYgKGlucHV0c1ZhbGlkKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ1B1Ymxpc2hTSUFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgIE9iamVjdCBzYXZlZFRNb2RlbCA9IHJlZ1B1Ymxpc2hTSUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfT1VUUFVUX1NBVkVEX1RNT0RFTCk7Ci0gICAgICAgICAgICBpZiAoc2F2ZWRUTW9kZWwgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdE1vZGVsc1RhYmxlLnB1dCgoKFRNb2RlbClzYXZlZFRNb2RlbCkuZ2V0TmFtZVN0cmluZygpLCBzYXZlZFRNb2RlbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBSZXNlbGVjdCB0aGUgY3VycmVudCBub2RlLgotICAgICAgICAgICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQoY3VycmVudE5vZGVJZCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHVkZGk0akhlbHBlci5uZXdCdXNpbmVzc1NlcnZpY2Uod3NkbFVSTCwgZGVmLCB0TW9kZWxzVGFibGUpOwotICAgICAgaWYgKGJlICE9IG51bGwpCi0gICAgICAgIGJzLnNldEJ1c2luZXNzS2V5KGJlLmdldEJ1c2luZXNzS2V5KCkpOwotICAgICAgZWxzZSBpZiAoYnVzaW5lc3NLZXkgIT0gbnVsbCkKLSAgICAgICAgYnMuc2V0QnVzaW5lc3NLZXkoYnVzaW5lc3NLZXkpOwotICAgICAgYnMuc2V0RGVmYXVsdE5hbWUobmV3IE5hbWUobmFtZSkpOwotICAgICAgYnMuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKGRlc2NyaXB0aW9uKTsKLSAgICAgIFZlY3RvciBic1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJzVmVjdG9yLmFkZChicyk7Ci0gICAgICByZWdFbGVtZW50LmhhbmRsZVByZUludm9jYXRpb24oYnMpOwotICAgICAgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXByb3h5LnNhdmVfc2VydmljZShyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJzVmVjdG9yKS5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZShicyxyZWdFbGVtZW50KTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX1BVQkxJU0hFRCIsYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiV1NETEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKQotICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZWM0OTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5QdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYXNzZXJ0aW9uLlB1Ymxpc2hlckFzc2VydGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkNvbXBsZXRpb25TdGF0dXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGV4dGVuZHMgQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbgotewotICBwdWJsaWMgUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0KLSAgICAvLyBpZHMgZnJvbSB1ZGRpT2JqZWN0c190YWJsZQotICAgIFN0cmluZ1tdIHNlbGVjdGVkQnVzSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCk7Ci0gICAgaWYgKHNlbGVjdGVkQnVzSWRzICE9IG51bGwgJiYgc2VsZWN0ZWRCdXNJZHMubGVuZ3RoID4gMCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCwgc2VsZWN0ZWRCdXNJZHMpOwotICAgIC8vIFN5bmNocm9uaXplIGNsaWVudCB2aWV3IGFuZCBzZXJ2ZXIgbW9kZWwgKHVkZGlPYmplY3RfdGFibGUuanNwKQotICAgIHN5bmNocm9uaXplVURESU9iamVjdFRhYmxlKCk7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGxvZyBpbgotICAgIGlmICghaXNMb2dnZWRJbl8pIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgfQotICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVzZXJJRCE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgfQotICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJRCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIGlkcyBmcm9tIHB1Ymxpc2hlciBhc3NlcnRpb24gdGFibGUKLSAgICBTdHJpbmdbXSBwdWJBc3NlcnRpb25zVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQpOwotICAgIGlmIChwdWJBc3NlcnRpb25zVmlld0lkcyA9PSBudWxsIHx8IHB1YkFzc2VydGlvbnNWaWV3SWRzLmxlbmd0aCA9PSAwKQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICBlbHNlCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQsIHB1YkFzc2VydGlvbnNWaWV3SWRzKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGlmICghKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEJ1c2luZXNzRWxlbWVudCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgbG9nIGluIGZpcnN0Ci0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgcmVnaXN0cnlFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLCB1c2VySUQsIHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gdGUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGllLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKG1lLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0KLSAgICBVRERJUHJveHkgcHJveHkgPSByZWdpc3RyeUVsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldENyZWQoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgIExpc3RNYW5hZ2VyIHB1YkFzc2VydGlvbnMgPSBidXNFbGVtZW50LmdldFB1Ymxpc2hlckFzc2VydGlvbnMoKTsKLQotICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBvd25lZCBidXNpbmVzcwotICAgIC8vIGlmIG5vdCwgdGhlIEFkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gY2Fubm90IGJlIHBlcmZvcm1lZAotICAgIGlmICghaXNCdXNpbmVzc093bmVkKGJ1c0VsZW1lbnQpKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9UX09XTkVEX0JVU0lORVNTIikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIFN0cmluZ1tdIHB1YkFzc2VydGlvblZpZXdJZHMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVklFV0lEKTsKLSAgICAgIFZlY3RvciBwdWJBc3NlcnRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBib29sZWFuIHJlZnJlc2hSZXF1aXJlZCA9IGZhbHNlOwotCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHB1YkFzc2VydGlvblZpZXdJZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQocHViQXNzZXJ0aW9uVmlld0lkc1tpXSk7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gcHViQXNzZXJ0aW9ucy5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHB1YkFzc2VydGlvbkVsZW1lbnQgPSAoUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uIHB1YkFzc2VydGlvbiA9IHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0UHVibGlzaGVyQXNzZXJ0aW9uKCk7Ci0gICAgICAgIHB1YkFzc2VydGlvblZlY3Rvci5hZGQocHViQXNzZXJ0aW9uKTsKLSAgICAgICAgaWYgKHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0U3RhdHVzKCkuZXF1YWxzKENvbXBsZXRpb25TdGF0dXMuQ09NUExFVEUpKQotICAgICAgICAgIHJlZnJlc2hSZXF1aXJlZCA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHByb3h5LmRlbGV0ZV9wdWJsaXNoZXJBc3NlcnRpb25zKHJlZ2lzdHJ5RWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBwdWJBc3NlcnRpb25WZWN0b3IpOwotICAgICAgLy9yZXBvcnQgc3RhdHVzCi0JICBWZWN0b3IgcmVwb3J0RXJySW5mbyA9IHJlcG9ydC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwb3J0RXJySW5mby5zaXplKCk7IGkrKykgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoKFJlc3VsdCkgcmVwb3J0RXJySW5mby5nZXQoaSkpLmdldEVyckluZm8oKS5nZXRUZXh0KCkpOwotICAgICAgfQotCi0gICAgICAvLyByZWZyZXNoIGlzIHJlcXVpcmVkLCByZWZyZXNoIHRoZSB3aG9sZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIHRhYmxlCi0gICAgICBpZiAocmVmcmVzaFJlcXVpcmVkKSB7Ci0gICAgICAgIFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIHNob3dQQUFjdGlvbiA9IG5ldyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gc2hvd1BBQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgICAgT2JqZWN0IGlkcyA9IHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCk7Ci0gICAgICAgIGlmIChpZHMgIT0gbnVsbCkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCwgaWRzKTsKLSAgICAgICAgc2hvd1BBQWN0aW9uLnJ1bigpOwotICAgICAgfQotICAgICAgLy8gcmVmcmVzaCBpcyBub3QgcmVxdWlyZWQsIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgcHVibGlzaGVyIGFzc2VydGlvbiBlbGVtZW50cwotICAgICAgZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcHViQXNzZXJ0aW9uVmlld0lkcy5sZW5ndGg7IGsrKykgewotICAgICAgICAgIHB1YkFzc2VydGlvbnMucmVtb3ZlRWxlbWVudFdpdGhWaWV3SWQoSW50ZWdlci5wYXJzZUludChwdWJBc3NlcnRpb25WaWV3SWRzW2tdKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHJlcG9ydC5zdWNjZXNzKCk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBEaXNwb3NpdGlvblJlcG9ydCByZXBvcnQgPSB1ZGRpZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotCSAgVmVjdG9yIHJlcG9ydEVyckluZm8gPSByZXBvcnQuZ2V0UmVzdWx0VmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcG9ydEVyckluZm8uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoKChSZXN1bHQpIHJlcG9ydEVyckluZm8uZ2V0KGkpKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ODRlMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHByaXZhdGUgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgCi0gIHB1YmxpYyBSZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gIH0KLSAgCi0gIC8vIHVkZGkvYWN0aW9ucy9SZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwP3N1YlF1ZXJ5S2V5PS4uLiZzdWJRdWVyeUxpc3RLZXk9Li4uJnN1YlF1ZXJ5TGlzdEl0ZW1JZD0uLi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc3ViUXVlcnlLZXksU3RyaW5nIHN1YlF1ZXJ5TGlzdEtleSxpbnQgc3ViUXVlcnlMaXN0SXRlbUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5S2V5KTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKS5hcHBlbmQoJz0nKS5hcHBlbmQoc3ViUXVlcnlMaXN0S2V5KTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc3ViUXVlcnlMaXN0SXRlbUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5TGlzdEtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVkpOwotICAgIFN0cmluZyBzdWJRdWVyeUxpc3RJdGVtSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKTsKLSAgICAKLSAgICBpZiAoc3ViUXVlcnlLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSxzdWJRdWVyeUtleSk7Ci0gICAgICAKLSAgICBpZiAoc3ViUXVlcnlMaXN0S2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSxzdWJRdWVyeUxpc3RLZXkpOwotICAgICAgCi0gICAgaWYgKHN1YlF1ZXJ5TGlzdEl0ZW1JZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9JVEVNSUQsc3ViUXVlcnlMaXN0SXRlbUlkKTsKLSAgICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSk7Ci0gICAgaW50IHN1YlF1ZXJ5TGlzdEl0ZW1JZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCkpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIGN1cnJlbnROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoY3VycmVudE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKSk7Ci0gICAgVmVjdG9yIGxpc3QgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSkpOwotICAgIGxpc3QucmVtb3ZlRWxlbWVudEF0KHN1YlF1ZXJ5TGlzdEl0ZW1JZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVkZTM4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlJlc2l6ZUZyYW1lc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUZyYW1lTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgUmVzaXplVURESUZyYW1lc0FjdGlvbiBleHRlbmRzIFJlc2l6ZUZyYW1lc0FjdGlvbgotewotICBwdWJsaWMgUmVzaXplVURESUZyYW1lc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgIT0gbnVsbCAmJiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSLGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgZnJhbWVzZXQgc2l6ZXMuCi0gICAgU3RyaW5nIGZyYW1lTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5GUkFNRV9OQU1FKTsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBuZXcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgaWYgKGZyYW1lTmFtZS5lcXVhbHMoVURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHModWRkaVBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjEwMCUsMCUiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhVRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHModWRkaVBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKHVkZGlQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCIxMDAlLDAlIik7Ci0gICAgICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhVRERJRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICBpZiAoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHModWRkaVBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKHVkZGlQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCIwJSwxMDAlIik7Ci0gICAgICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMTY1ZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVBY3Rpb24KLXsKLSAgcHVibGljIFNlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0Q2F0ZWdvcnlNYW5hZ2VyKCkpOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbi5qc3A/c2Vzc2lvbklkPS4uLiZub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIC8vIERvIG5vdCBhZGQgdGhpcyBhY3Rpb24gdG8gdGhlIGhpc3RvcnkuCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgcGVyZm9ybUJhc2VBY3Rpb24obm9kZUlkKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJjYXRlZ29yeUJyb3dzZXJXaW5kb3dDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0RmluZFRvb2xBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTQ3NzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0RmluZFRvb2xBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RGaW5kVG9vbEFjdGlvbiBleHRlbmRzIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgc3ViUXVlcnlLZXlfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiB0b29sTGlua0NoYW5nZWRfOwotCi0gIHB1YmxpYyBTZWxlY3RGaW5kVG9vbEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzdWJRdWVyeUtleV8gPSBudWxsOwotICAgIHRvb2xMaW5rQ2hhbmdlZF8gPSBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gc3VwZXIucHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKHJlcXVlc3QpOwotICAgIHN1YlF1ZXJ5S2V5XyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLy8gL3VkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbi5qc3A/bm9kZUlkPS4uLiZ0b29sSWQ9Li4uPCZ2aWV3SWQ9Li4uJnZpZXdUb29sSWQ9Li4uPiZzdWJRdWVyeUtleT0uLi48JmlzSGlzdG9yeT0xPgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkLFN0cmluZyBzdWJRdWVyeUtleSxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHRvb2xJZCk7Ci0gICAgaWYgKHZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgewotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHZpZXdJZCk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHZpZXdUb29sSWQpOwotICAgIH0KLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5S2V5KTsKLQotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaWYgKCFzdXBlci5ydW4oKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlXy5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgU3RyaW5nIGN1cnJlbnRTdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIGlmIChzdWJRdWVyeUtleV8gIT0gbnVsbCAmJiAhc3ViUXVlcnlLZXlfLmVxdWFscyhjdXJyZW50U3ViUXVlcnlLZXkpKQotICAgIHsKLSAgICAgIHRvb2xMaW5rQ2hhbmdlZF8gPSB0cnVlOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksc3ViUXVlcnlLZXlfKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1ZpZXdTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHRvb2xMaW5rQ2hhbmdlZF87Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIGludCBub2RlSWQgPSBzZWxlY3RlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2xfLmdldFRvb2xJZCgpOwotICAgIGludCB2aWV3SWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgIGludCB2aWV3VG9vbElkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCxzdWJRdWVyeUtleV8sdHJ1ZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNiZWUzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZUFjdGlvbgotewotICBwdWJsaWMgU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uPCZpc0hpc3Rvcnk9MT4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgaW50IG5vZGVJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgc2VsZWN0ZWRUb29sLmdldFRvb2xJZCgpOwotICAgIHNlbGVjdGVkTm9kZV8uZ2V0Vmlld0lkKCk7Ci0gICAgc2VsZWN0ZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgaWYgKHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgICByZXR1cm4gc2VsZWN0ZWRUb29sLmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKHRydWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKG5vZGVJZCx0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJuYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAicHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg2ZTE1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZVRvb2xBY3Rpb24KLXsKLSAgcHVibGljIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpKTsKLSAgfQotCi0gIC8vIC91ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uanNwP25vZGVJZD0uLi4mdG9vbElkPS4uLjwmdmlld0lkPS4uLiZ2aWV3VG9vbElkPS4uLj48JmlzSGlzdG9yeT0xPgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKS5hcHBlbmQoJz0nKS5hcHBlbmQodG9vbElkKTsKLSAgICBpZiAodmlld0lkICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICB7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKS5hcHBlbmQoJz0nKS5hcHBlbmQodmlld0lkKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKS5hcHBlbmQoJz0nKS5hcHBlbmQodmlld1Rvb2xJZCk7Ci0gICAgfQotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIGludCBub2RlSWQgPSBzZWxlY3RlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2xfLmdldFRvb2xJZCgpOwotICAgIGludCB2aWV3SWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgIGludCB2aWV3VG9vbElkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCx0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJuYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAicHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gInByb3BlcnRpZXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdiYjViZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uIGV4dGVuZHMgU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzVmlld1NlbGVjdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiBuZXdVVUlEUXVlcnlDcmVhdGVkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaXRlbU5hbWVfOwotICBwdWJsaWMgU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXyA9IGZhbHNlOwotICAgIHJlcXVpcmVzVmlld1NlbGVjdGlvbl8gPSBmYWxzZTsKLSAgICBuZXdVVUlEUXVlcnlDcmVhdGVkXyA9IGZhbHNlOwotICAgIGl0ZW1OYW1lXyA9IG51bGw7Ci0gIH0KLQotICAvLyAvdWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5qc3A/bm9kZUlkPS4uLiZ0b29sSWQ9Li4uPCZ2aWV3SWQ9Li4uPiZzdWJRdWVyeUtleT0uLi4mc3ViUXVlcnlMaXN0S2V5PS4uLiZzdWJRdWVyeUxpc3RJdGVtSWQ9Li4uJnF1ZXJ5SXRlbT0uLi48JmlzSGlzdG9yeT0xPgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLFN0cmluZyBzdWJRdWVyeUtleSxTdHJpbmcgc3ViUXVlcnlMaXN0S2V5LGludCBzdWJRdWVyeUxpc3RJdGVtSWQsaW50IHF1ZXJ5SXRlbSxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpLmFwcGVuZCgnPScpLmFwcGVuZCh0b29sSWQpOwotICAgIGlmICh2aWV3SWQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHZpZXdJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpLmFwcGVuZCgnPScpLmFwcGVuZChzdWJRdWVyeUtleSk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5TGlzdEtleSk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5TGlzdEl0ZW1JZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKS5hcHBlbmQoJz0nKS5hcHBlbmQocXVlcnlJdGVtKTsKLQotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHN1cGVyLnByb2Nlc3NMaW5rUGFyYW1ldGVycyhyZXF1ZXN0KTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5TGlzdEtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVkpOwotICAgIFN0cmluZyBzdWJRdWVyeUxpc3RJdGVtSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKTsKLSAgICBTdHJpbmcgcXVlcnlJdGVtU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKTsKLQotICAgIGlmIChzdWJRdWVyeUtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLHN1YlF1ZXJ5S2V5KTsKLQotICAgIGlmIChzdWJRdWVyeUxpc3RLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZLHN1YlF1ZXJ5TGlzdEtleSk7Ci0KLSAgICBpZiAoc3ViUXVlcnlMaXN0SXRlbUlkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCxzdWJRdWVyeUxpc3RJdGVtSWQpOwotCi0gICAgaWYgKHF1ZXJ5SXRlbVN0cmluZyAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxxdWVyeUl0ZW1TdHJpbmcpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gZmluZEJ5VVVJRCgpCi0gIHsKLSAgICBOb2RlIGN1cnJlbnROb2RlID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShjdXJyZW50Tm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpKTsKLSAgICBWZWN0b3IgbGlzdCA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eSgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKSk7Ci0gICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpbGlzdC5lbGVtZW50QXQoSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKSkpOwotICAgIGludCBxdWVyeUl0ZW0gPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSkpOwotICAgIEZpbmRBY3Rpb24gZmluZEFjdGlvbiA9IG51bGw7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBudWxsOwotICAgIFN0cmluZyB1dWlkS2V5VmFsdWUgPSBudWxsOwotICAgIHN3aXRjaCAocXVlcnlJdGVtKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIGZpbmRBY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIHV1aWRLZXkgPSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZOwotICAgICAgICBCdXNpbmVzc0VudGl0eSBzcCA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgdXVpZEtleVZhbHVlID0gc3AuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgICAgaXRlbU5hbWVfID0gc3AuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgZmluZEFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICB1dWlkS2V5ID0gVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZOwotICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICB1dWlkS2V5VmFsdWUgPSBicy5nZXRTZXJ2aWNlS2V5KCk7Ci0gICAgICAgIGl0ZW1OYW1lXyA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZmluZEFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICB1dWlkS2V5ID0gVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWTsKLSAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIHV1aWRLZXlWYWx1ZSA9IHRNb2RlbC5nZXRUTW9kZWxLZXkoKTsKLSAgICAgICAgaXRlbU5hbWVfID0gdE1vZGVsLmdldE5hbWVTdHJpbmcoKTsKLSAgICB9Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBmaW5kQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdXVpZEtleVZhbHVlKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dCh1dWlkS2V5LHV1aWRLZXlWYWx1ZSk7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmaW5kQWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgewotICAgICAgTm9kZSBpdGVtTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgIGludCBub2RlSWQgPSBpdGVtTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgIGludCB0b29sSWQgPSBpdGVtTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCk7Ci0gICAgICBpbnQgdmlld0lkID0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUOwotICAgICAgaW50IHZpZXdUb29sSWQgPSBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxUOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsU3RyaW5nLnZhbHVlT2Yobm9kZUlkKSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCxTdHJpbmcudmFsdWVPZih0b29sSWQpKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELFN0cmluZy52YWx1ZU9mKHZpZXdJZCkpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXVE9PTElELFN0cmluZy52YWx1ZU9mKHZpZXdUb29sSWQpKTsKLSAgICAgIHN1cGVyLnJ1bigpOwotICAgICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfID0gdHJ1ZTsKLSAgICAgIHJlcXVpcmVzVmlld1NlbGVjdGlvbl8gPSB0cnVlOwotICAgICAgbmV3VVVJRFF1ZXJ5Q3JlYXRlZF8gPSB0cnVlOwotICAgICAgbGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKG5vZGVJZCx0b29sSWQsdmlld0lkKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gVGhlIGl0ZW0gaXMgbm8gbG9uZ2VyIGluIHRoZSByZWdpc3RyeS4KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEl0ZW1OYW1lKCkKLSAgewotICAgIHJldHVybiBpdGVtTmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICAvLyBHaXZlbiB0aGUgbm9kZUlkLCB0b29sSWQgYW5kIHZpZXdJZCwgY2hlY2sgaWYgdGhlIG5vZGUgb3IgdmlldyBpcyBzdGFsZS4KLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHRvb2xJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlRPT0xJRCkpOwotICAgIGludCB2aWV3SWQgPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQ7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgdmlld0lkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIGludCB2aWV3VG9vbElkID0gMDsKLSAgICBpZiAoIWlzU3RhbGVOb2RlKG5vZGVJZCkpCi0gICAgewotICAgICAgLy8gRW51c3JlIHRoZSBub2RlIGlzIHZpc2libGUuCi0gICAgICByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF8gPSBtYWtlTm9kZVZpc2libGUobm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKSk7Ci0KLSAgICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgICBpZiAodmlld0lkICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgIHsKLSAgICAgICAgVmlld1Rvb2wgdmlld1Rvb2wgPSAoVmlld1Rvb2wpKG5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRUb29sKHRvb2xJZCkpOwotICAgICAgICBUb29sTWFuYWdlciBlbGVtZW50VG9vbE1hbmFnZXIgPSB2aWV3VG9vbC5nZXRUb29sTWFuYWdlcih2aWV3SWQpOwotICAgICAgICBpZiAoZWxlbWVudFRvb2xNYW5hZ2VyICE9IG51bGwpCi0gICAgICAgICAgdmlld1Rvb2xJZCA9IGVsZW1lbnRUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2xJZCgpOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBTdGFsZSB2aWV3Ci0gICAgICAgICAgcmV0dXJuIGZpbmRCeVVVSUQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXVE9PTElELFN0cmluZy52YWx1ZU9mKHZpZXdUb29sSWQpKTsKLSAgICAgIHJldHVybiBzdXBlci5ydW4oKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFN0YWxlIG5vZGUKLSAgICAgIHJldHVybiBmaW5kQnlVVUlEKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gc2VsZWN0ZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICBpbnQgdG9vbElkID0gc2VsZWN0ZWRUb29sXy5nZXRUb29sSWQoKTsKLSAgICBpbnQgdmlld0lkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICBpbnQgdmlld1Rvb2xJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCgpCi0gIHsKLSAgICByZXR1cm4gc3VwZXIucmVxdWlyZXNUcmVlVmlld1JlZnJlc2goKXxyZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1ZpZXdTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLnJlcXVpcmVzVmlld1NlbGVjdGlvbigpfHJlcXVpcmVzVmlld1NlbGVjdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1N0YXR1c1VwZGF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3VVVJRFF1ZXJ5Q3JlYXRlZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJzdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5OTUzMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Ob2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TZXJ2aWNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbiBleHRlbmRzIE5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBTZXJ2aWNlTm9kZSBzZXJ2aWNlTm9kZV87Ci0gIHB1YmxpYyBTZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKSk7Ci0gICAgc2VydmljZU5vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb25KU1AuanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVTZXJ2aWNlKCkKLSAgewotICAgIGludCBzZXJ2aWNlTm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgc2VydmljZU5vZGVfID0gKFNlcnZpY2VOb2RlKW5vZGVNYW5hZ2VyXy5nZXROb2RlKHNlcnZpY2VOb2RlSWQpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSxzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKS5nZXRTZXJ2aWNlS2V5KCkpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotCi0gICAgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX1NFUlZJQ0VfQlVTSU5FU1MiLHNlcnZpY2VOb2RlXy5nZXROb2RlTmFtZSgpKSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSxicy5nZXRCdXNpbmVzc0tleSgpKTsKLQotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNmVmMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBTZXJ2aWNlTm9kZSBzZXJ2aWNlTm9kZV87Ci0gIHB1YmxpYyBTZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgc2VydmljZU5vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb25KU1AuanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVTZXJ2aWNlKCkKLSAgewotICAgIGludCBzZXJ2aWNlTm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgc2VydmljZU5vZGVfID0gKFNlcnZpY2VOb2RlKW5vZGVNYW5hZ2VyXy5nZXROb2RlKHNlcnZpY2VOb2RlSWQpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSxzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKS5nZXRTZXJ2aWNlS2V5KCkpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKTsKLSAgICBSZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyIsc2VydmljZU5vZGVfLmdldE5vZGVOYW1lKCkpKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFLEJvb2xlYW4uVFJVRSk7Ci0gICAgTGlzdEVsZW1lbnQgc2VydmljZUxpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KGJzKTsKLSAgICBzZXJ2aWNlTGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKHNlcnZpY2VOb2RlXy5nZXROb2RlSWQoKSxzZXJ2aWNlTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLHNlcnZpY2VOb2RlXy5nZXRWaWV3SWQoKSk7Ci0gICAgVmVjdG9yIHNlcnZpY2VMaXN0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIHNlcnZpY2VMaXN0VmVjdG9yLmFkZEVsZW1lbnQoc2VydmljZUxpc3RFbGVtZW50KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0Usc2VydmljZUxpc3RWZWN0b3IpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQlVTSU5FU1NfU0VSVklDRSxicyk7Ci0gICAgcmV0dXJuIGFjdGlvbi5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4M2I3MjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU2VydmljZUludGVyZmFjZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuVE1vZGVsQmFnOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24gZXh0ZW5kcyBVRERJTm9kZUFjdGlvbgotewotICBwcml2YXRlIFNlcnZpY2VJbnRlcmZhY2VOb2RlIHNpTm9kZV87Ci0gIHB1YmxpYyBTZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzaU5vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNHZXRCdXNpbmVzc2VzQWN0aW9uSlNQLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVTZXJ2aWNlSW50ZXJmYWNlKCkKLSAgewotICAgIGludCBzaU5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIHNpTm9kZV8gPSAoU2VydmljZUludGVyZmFjZU5vZGUpbm9kZU1hbmFnZXJfLmdldE5vZGUoc2lOb2RlSWQpOwotICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClzaU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFLEJvb2xlYW4uVFJVRSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSxzaUVsZW1lbnQuZ2V0VE1vZGVsKCkuZ2V0VE1vZGVsS2V5KCkpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0KLSAgICBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfU0lfQlVTSU5FU1NFUyIsc2lOb2RlXy5nZXROb2RlTmFtZSgpKSk7Ci0gICAgCi0gICAgTGlzdEVsZW1lbnQgc2lMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudCh0TW9kZWwpOwotICAgIHNpTGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKHNpTm9kZV8uZ2V0Tm9kZUlkKCksc2lOb2RlXy5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksc2lOb2RlXy5nZXRWaWV3SWQoKSk7Ci0gICAgVmVjdG9yIHNpTGlzdFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBzaUxpc3RWZWN0b3IuYWRkRWxlbWVudChzaUxpc3RFbGVtZW50KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFUyxzaUxpc3RWZWN0b3IpOwotICAgIAotICAgIFZlY3RvciB0TW9kZWxLZXlTdHJpbmdWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgdE1vZGVsS2V5U3RyaW5nVmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsLmdldFRNb2RlbEtleSgpKTsKLSAgICBUTW9kZWxCYWcgdE1vZGVsQmFnID0gbmV3IFRNb2RlbEJhZyh0TW9kZWxLZXlTdHJpbmdWZWN0b3IpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfVE1PREVMQkFHLHRNb2RlbEJhZyk7Ci0gICAgCi0gICAgcmV0dXJuIGFjdGlvbi5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUzYTQ3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU2VydmljZUludGVyZmFjZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuVE1vZGVsQmFnOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBTZXJ2aWNlSW50ZXJmYWNlTm9kZSBzaU5vZGVfOwotICBwdWJsaWMgU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHNpTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY0dldFNlcnZpY2VzQWN0aW9uSlNQLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHZhbGlkYXRlU2VydmljZUludGVyZmFjZSgpCi0gIHsKLSAgICBpbnQgc2lOb2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBzaU5vZGVfID0gKFNlcnZpY2VJbnRlcmZhY2VOb2RlKW5vZGVNYW5hZ2VyXy5nZXROb2RlKHNpTm9kZUlkKTsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2lOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksc2lFbGVtZW50LmdldFRNb2RlbCgpLmdldFRNb2RlbEtleSgpKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHZlcmlmeUFjdGlvbi5ydW4oKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotCi0gICAgUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfU0lfU0VSVklDRVMiLHNpTm9kZV8uZ2V0Tm9kZU5hbWUoKSkpOwotICAgIAotICAgIExpc3RFbGVtZW50IHNpTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQodE1vZGVsKTsKLSAgICBzaUxpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbyhzaU5vZGVfLmdldE5vZGVJZCgpLHNpTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLHNpTm9kZV8uZ2V0Vmlld0lkKCkpOwotICAgIFZlY3RvciBzaUxpc3RWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgc2lMaXN0VmVjdG9yLmFkZEVsZW1lbnQoc2lMaXN0RWxlbWVudCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxzaUxpc3RWZWN0b3IpOwotICAgIAotICAgIFZlY3RvciB0TW9kZWxLZXlTdHJpbmdWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgdE1vZGVsS2V5U3RyaW5nVmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsLmdldFRNb2RlbEtleSgpKTsKLSAgICBUTW9kZWxCYWcgdE1vZGVsQmFnID0gbmV3IFRNb2RlbEJhZyh0TW9kZWxLZXlTdHJpbmdWZWN0b3IpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUxCQUcsdE1vZGVsQmFnKTsKLSAgICAKLSAgICByZXR1cm4gYWN0aW9uLnJ1bigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFiODY0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5QdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5Bc3NlcnRpb25TdGF0dXNJdGVtOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQXNzZXJ0aW9uU3RhdHVzUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQ29tcGxldGlvblN0YXR1czsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkRpc3Bvc2l0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVsYXRlZEJ1c2luZXNzSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlbGF0ZWRCdXNpbmVzc2VzTGlzdDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNoYXJlZFJlbGF0aW9uc2hpcHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5GaW5kUXVhbGlmaWVyczsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBleHRlbmRzIENvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24KLXsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNTdWJRdWVyeUdldF87Ci0gIHByb3RlY3RlZCBib29sZWFuIHN1YlF1ZXJ5SW5pdGlhdGVkXzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeV87Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3U3ViUXVlcnlJdGVtXzsKLQotICBwdWJsaWMgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0KLSAgICBzdWJRdWVyeUtleV8gPSBudWxsOwotICAgIGlzU3ViUXVlcnlHZXRfID0gZmFsc2U7Ci0gICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIGlkcyBmcm9tIHVkZGlPYmplY3RzX3RhYmxlCi0gICAgU3RyaW5nW10gc2VsZWN0ZWRCdXNJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICBpZiAoc2VsZWN0ZWRCdXNJZHMgIT0gbnVsbCAmJiBzZWxlY3RlZEJ1c0lkcy5sZW5ndGggPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lELCBzZWxlY3RlZEJ1c0lkcyk7Ci0KLSAgICBuZXdTdWJRdWVyeV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCk7Ci0gICAgU3RyaW5nIGlzU3ViUXVlcnlHZXRTdHJpbmcgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICBuZXdTdWJRdWVyeUl0ZW1fID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNKTsKLSAgICBzdWJRdWVyeUtleV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgZm9ybVRvb2xQSS5jbGVhckVycm9ycygpOwotCi0gICAgaWYgKG5ld1N1YlF1ZXJ5XyAhPSBudWxsICYmIG5ld1N1YlF1ZXJ5Xy5sZW5ndGgoKSA+IDApCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotCi0gICAgaWYgKGlzU3ViUXVlcnlHZXRTdHJpbmcgIT0gbnVsbCkKLSAgICAgIGlzU3ViUXVlcnlHZXRfID0gQm9vbGVhbi52YWx1ZU9mKGlzU3ViUXVlcnlHZXRTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBsb2cgaW4KLSAgICAvLyBOT1RFOiBUaGlzIGFjdGlvbiBkb2VzIE5PVCByZXF1aXJlIHRoZSB1c2VyIHRvIGJlIGxvZ2dlZCBpbi4KLSAgICBpZiAoIWlzTG9nZ2VkSW5fKSB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklEID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVzZXJJRCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5SW5pdGlhdGVkKCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0KCkKLSAgewotICAgIHJldHVybiBpc1N1YlF1ZXJ5R2V0XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3ViUXVlcnlLZXkoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5S2V5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV3U3ViUXVlcnkoKQotICB7Ci0gICAgcmV0dXJuIG5ld1N1YlF1ZXJ5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV3U3ViUXVlcnlJdGVtKCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeUl0ZW1fOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIC8vIFN5bmNocm9uaXplIGNsaWVudCB2aWV3IGFuZCBzZXJ2ZXIgbW9kZWwgKHVkZGlPYmplY3RfdGFibGUuanNwKQotICAgIHN5bmNocm9uaXplVURESU9iamVjdFRhYmxlKCk7Ci0KLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGlmICghKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEJ1c2luZXNzRWxlbWVudCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgbG9nIGluIGZpcnN0Ci0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoVVJMKSAmJgotICAgICAgICAgICAgVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJRCkgJiYKLSAgICAgICAgICAgIHBhc3N3b3JkICE9IG51bGwpIHsKLSAgICAgICAgICByZWdpc3RyeUVsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsIHVzZXJJRCwgcGFzc3dvcmQpOwotICAgICAgICAgIGlzTG9nZ2VkSW5fID0gcmVnaXN0cnlFbGVtZW50LmlzTG9nZ2VkSW4oKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiB0ZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh0ZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UobWUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSAgICAgIAotICAgIH0KLQotICAgIC8vIHNob3cgYWxsIGFzc2VydGlvbiBpZmYgaXMgbG9nZ2VkIGluIGFuZCBidXNpbmVzcyBpcyBvd25lZAotICAgIC8vIGVsc2Ugc2hvdyBvbmx5IGNvbXBsZXRlZCBvbmVzCi0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICBpZiAoaXNMb2dnZWRJbl8gJiYgaXNCdXNpbmVzc093bmVkKGJ1c0VsZW1lbnQpKQotICAgICAgcmV0dXJuIHNob3dQdWJsaXNoZXJBc3NlcnRpb25zRm9yT3duZWRCdXMoYnVzRWxlbWVudCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHNob3dQdWJsaXNoZXJBc3NlcnRpb25zRm9yTm9uT3duZWRCdXMoYnVzRWxlbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2hvd1B1Ymxpc2hlckFzc2VydGlvbnNGb3JPd25lZEJ1cyhCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCkgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgLy8gdHJ5IHRvIGdldCBhIGxpc3Qgb2YgYWxsIHB1Ymxpc2hlciBhc3NlcnRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgcmVnaXN0cnkncyBhdXRoVG9rZW4KLSAgICBMaXN0TWFuYWdlciBsaXN0TWFuYWdlciA9IG5ldyBMaXN0TWFuYWdlcigpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgZm9ybVRvb2xQSS5yZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0VYSVNUSU5HX1BVQkxJU0hFUl9BU1NFUlRJT05TKTsKLSAgICBWZWN0b3IgcXVlcnlJbnB1dFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnaXN0cnlFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIHJlZ2lzdHJ5RWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICAvLyBzaG93IGFsbCBwdWJsaXNoZXIgYXNzZXJ0aW9ucwotICAgIFVERElQcm94eSBwcm94eSA9ICgoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKSkuZ2V0UHJveHkoKTsKLSAgICBBc3NlcnRpb25TdGF0dXNSZXBvcnQgYXNzZXJ0aW9uUmVwb3J0OwotICAgIHRyeSB7Ci0gICAgICBhc3NlcnRpb25SZXBvcnQgPSBwcm94eS5nZXRfYXNzZXJ0aW9uU3RhdHVzUmVwb3J0KHJlZ2lzdHJ5RWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCAoQ29tcGxldGlvblN0YXR1cyludWxsKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHVkZGllLmdldERpc3Bvc2l0aW9uUmVwb3J0KCk7Ci0JICBWZWN0b3IgcmVwb3J0RXJySW5mbyA9IHJlcG9ydC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwb3J0RXJySW5mby5zaXplKCk7IGkrKykgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoKFJlc3VsdCkgcmVwb3J0RXJySW5mby5nZXQoaSkpLmdldEVyckluZm8oKS5nZXRUZXh0KCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIkV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBWZWN0b3IgYXNzZXJ0aW9uVmVjdG9yID0gYXNzZXJ0aW9uUmVwb3J0LmdldEFzc2VydGlvblN0YXR1c0l0ZW1WZWN0b3IoKTsKLSAgICBWZWN0b3Igb3RoZXJCdXNpbmVzc0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yIHB1YkFzc2VydGlvbkVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhc3NlcnRpb25WZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLSAgICAgIEFzc2VydGlvblN0YXR1c0l0ZW0gYXNzZXJ0aW9uSXRlbSA9IChBc3NlcnRpb25TdGF0dXNJdGVtKWFzc2VydGlvblZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAvLyBkZXRlcm1pbmUgdGhlIGZyb20vdG8gYnVzaW5lc3Mga2V5cwotICAgICAgU3RyaW5nIGZyb21LZXkgPSBhc3NlcnRpb25JdGVtLmdldEZyb21LZXkoKS5nZXRUZXh0KCk7Ci0gICAgICBTdHJpbmcgdG9LZXkgPSBhc3NlcnRpb25JdGVtLmdldFRvS2V5KCkuZ2V0VGV4dCgpOwotICAgICAgU3RyaW5nIG93bmluZ0J1c2luZXNzS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICAvLyBpZ25vcmUgdGhpcyBhc3NlcnRpb24gaWYgbmVpdGhlciB0aGUgZnJvbSBrZXkgbm9yIHRoZSB0byBrZXkgZXF1YWxzIHRvIHRoaXMgYnVzaW5lc3MncyBrZXkKLSAgICAgIGlmICghb3duaW5nQnVzaW5lc3NLZXkuZXF1YWxzKGZyb21LZXkpICYmICFvd25pbmdCdXNpbmVzc0tleS5lcXVhbHModG9LZXkpKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIFN0cmluZyBvdGhlckJ1c2luZXNzS2V5ID0gKChvd25pbmdCdXNpbmVzc0tleS5lcXVhbHMoZnJvbUtleSkpID8gdG9LZXkgOiBmcm9tS2V5KTsKLSAgICAgIC8vIHJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgIm90aGVyIGJ1c2luZXNzIgotICAgICAgb3RoZXJCdXNpbmVzc0tleXMuYWRkKG90aGVyQnVzaW5lc3NLZXkpOwotCi0gICAgICAvLyByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uCi0gICAgICBTdHJpbmcgc3RhdHVzID0gYXNzZXJ0aW9uSXRlbS5nZXRDb21wbGV0aW9uU3RhdHVzKCkuZ2V0VGV4dCgpOwotICAgICAgS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWYgPSBhc3NlcnRpb25JdGVtLmdldEtleWVkUmVmZXJlbmNlKCk7Ci0gICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHB1YkFzc2VydGlvbkVsZW1lbnQgPSBuZXcgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21LZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmluZ0J1c2luZXNzS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZWRSZWYpOwotICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudHMuYWRkKHB1YkFzc2VydGlvbkVsZW1lbnQpOwotICAgIH0KLSAgICBpZiAob3RoZXJCdXNpbmVzc0tleXMuc2l6ZSgpID4gMCkgewotICAgICAgVmVjdG9yIGJ1c0VudGl0aWVzOwotICAgICAgdHJ5IHsKLSAgICAgICAgYnVzRW50aXRpZXMgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwob3RoZXJCdXNpbmVzc0tleXMpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgIGJ1c0VudGl0aWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBpZiAob3RoZXJCdXNpbmVzc0tleXMuc2l6ZSgpID4gMSkgewotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgb3RoZXJCdXNpbmVzc0tleXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgIGJ1c0VudGl0aWVzLmFkZChwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoKFN0cmluZylvdGhlckJ1c2luZXNzS2V5cy5nZXQoaikpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRzLnJlbW92ZShqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRzLnJlbW92ZSgwKTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYnVzRW50aXRpZXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpYnVzRW50aXRpZXMuZ2V0KGopOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHB1YkFzc2VydGlvbkVsZW1lbnQgPSAoUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudClwdWJBc3NlcnRpb25FbGVtZW50cy5nZXQoaik7Ci0gICAgICAgIExpc3RFbGVtZW50IGxlID0gbmV3IExpc3RFbGVtZW50KGJlKTsKLSAgICAgICAgcXVlcnlJbnB1dFZlY3Rvci5hZGQobGUpOwotICAgICAgICBpbnQgc3ViUXVlcnlJdGVtSWQgPSBxdWVyeUlucHV0VmVjdG9yLmluZGV4T2YobGUpOwotICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50LnNldFNlcnZpY2VQcm92aWRlcihsZSk7Ci0gICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnQuc2V0U3ViUXVlcnlJdGVtSWQoc3ViUXVlcnlJdGVtSWQpOwotICAgICAgICBsaXN0TWFuYWdlci5hZGQobmV3IExpc3RFbGVtZW50KHB1YkFzc2VydGlvbkVsZW1lbnQpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYnVzRWxlbWVudC5zZXRQdWJsaXNoZXJBc3NlcnRpb25zKGxpc3RNYW5hZ2VyKTsKLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfRVhJU1RJTkdfUFVCTElTSEVSX0FTU0VSVElPTlMsIHF1ZXJ5SW5wdXRWZWN0b3IpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19QVUJMSVNIRVJfQVNTRVJUSU9OU19SRUZSRVNIRUQiKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2hvd1B1Ymxpc2hlckFzc2VydGlvbnNGb3JOb25Pd25lZEJ1cyhCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCkgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgLy8gdHJ5IHRvIGdldCBhIGxpc3Qgb2YgcHVibGlzaGVyIGFzc2VydGlvbnMgYmFzZWQgb24gdGhlIGJ1c2luZXNzIGtleQotICAgIExpc3RNYW5hZ2VyIGxpc3RNYW5hZ2VyID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlfKTsKLSAgICBmb3JtVG9vbFBJLnJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfRVhJU1RJTkdfUFVCTElTSEVSX0FTU0VSVElPTlMpOwotICAgIFZlY3RvciBxdWVyeUlucHV0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIFVERElQcm94eSBwcm94eSA9ICgoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKSkuZ2V0UHJveHkoKTsKLSAgICBSZWxhdGVkQnVzaW5lc3Nlc0xpc3QgcmVsYXRlZEJ1c0xpc3Q7Ci0gICAgdHJ5IHsKLSAgICAgIHJlbGF0ZWRCdXNMaXN0ID0gcHJveHkuZmluZF9yZWxhdGVkQnVzaW5lc3NlcyhidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChLZXllZFJlZmVyZW5jZSludWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZpbmRRdWFsaWZpZXJzKW51bGwpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gdWRkaWUuZ2V0RGlzcG9zaXRpb25SZXBvcnQoKTsKLQkgIFZlY3RvciByZXBvcnRFcnJJbmZvID0gcmVwb3J0LmdldFJlc3VsdFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBvcnRFcnJJbmZvLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCgoUmVzdWx0KSByZXBvcnRFcnJJbmZvLmdldChpKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFZlY3RvciByZWxhdGVkQnVzVmVjdG9yID0gcmVsYXRlZEJ1c0xpc3QuZ2V0UmVsYXRlZEJ1c2luZXNzSW5mb3MoKS5nZXRSZWxhdGVkQnVzaW5lc3NJbmZvVmVjdG9yKCk7Ci0gICAgVmVjdG9yIG90aGVyQnVzaW5lc3NLZXlzID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciBwdWJBc3NlcnRpb25FbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpICA9IDA7IGkgPCByZWxhdGVkQnVzVmVjdG9yLnNpemUoKTsgaSsrKSB7Ci0gICAgICBSZWxhdGVkQnVzaW5lc3NJbmZvIHJlbGF0ZWRCdXNJbmZvID0gKFJlbGF0ZWRCdXNpbmVzc0luZm8pcmVsYXRlZEJ1c1ZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAvLyBkZXRlcm1pbmUgdGhlIGZyb20vdG8gYnVzaW5lc3Mga2V5cwotICAgICAgU3RyaW5nIGZyb21LZXk7Ci0gICAgICBTdHJpbmcgdG9LZXk7Ci0gICAgICBTdHJpbmcgb3duaW5nQnVzaW5lc3NLZXk7Ci0gICAgICBpZiAocmVsYXRlZEJ1c0luZm8uZ2V0RGVmYXVsdFNoYXJlZFJlbGF0aW9uc2hpcHMoKS5nZXREaXJlY3Rpb24oKS5lcXVhbHMoU2hhcmVkUmVsYXRpb25zaGlwcy5ESVJFQ1RJT05fRlJPTUtFWSkpIHsKLSAgICAgICAgZnJvbUtleSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpOwotICAgICAgICB0b0tleSA9IHJlbGF0ZWRCdXNJbmZvLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICAgIG93bmluZ0J1c2luZXNzS2V5ID0gZnJvbUtleTsKLSAgICAgICAgb3RoZXJCdXNpbmVzc0tleXMuYWRkKHRvS2V5KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBmcm9tS2V5ID0gcmVsYXRlZEJ1c0luZm8uZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgICAgdG9LZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgICAgb3duaW5nQnVzaW5lc3NLZXkgPSB0b0tleTsKLSAgICAgICAgb3RoZXJCdXNpbmVzc0tleXMuYWRkKGZyb21LZXkpOwotICAgICAgfQotCi0gICAgICBWZWN0b3Iga2V5ZWRSZWZWZWN0b3IgPSByZWxhdGVkQnVzSW5mby5nZXREZWZhdWx0U2hhcmVkUmVsYXRpb25zaGlwcygpLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50W10gcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5ID0gbmV3IFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnRba2V5ZWRSZWZWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwga2V5ZWRSZWZWZWN0b3Iuc2l6ZSgpOyBrKyspIHsKLSAgICAgICAgLy8gcmV0cmlldmUgdGhlIHN0YXR1cyBvZiB0aGUgcHVibGlzaGVyIGFzc2VydGlvbgotICAgICAgICBTdHJpbmcgc3RhdHVzID0gQ29tcGxldGlvblN0YXR1cy5DT01QTEVURTsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWYgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZWZWN0b3IuZWxlbWVudEF0KGspOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHB1YkFzc2VydGlvbkVsZW1lbnQgPSBuZXcgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9LZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmluZ0J1c2luZXNzS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXllZFJlZik7Ci0gICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRBcnJheVtrXSA9IHB1YkFzc2VydGlvbkVsZW1lbnQ7Ci0gICAgICB9Ci0gICAgICBwdWJBc3NlcnRpb25FbGVtZW50cy5hZGQocHViQXNzZXJ0aW9uRWxlbWVudEFycmF5KTsKLSAgICB9Ci0gICAgaWYgKG90aGVyQnVzaW5lc3NLZXlzLnNpemUoKSA+IDApIHsKLSAgICAgIFZlY3RvciBidXNFbnRpdGllczsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGJ1c0VudGl0aWVzID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKG90aGVyQnVzaW5lc3NLZXlzKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICBidXNFbnRpdGllcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgaWYgKG90aGVyQnVzaW5lc3NLZXlzLnNpemUoKSA+IDEpIHsKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG90aGVyQnVzaW5lc3NLZXlzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBidXNFbnRpdGllcy5hZGQocHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKChTdHJpbmcpb3RoZXJCdXNpbmVzc0tleXMuZ2V0KGopKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotICAgICAgICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50cy5yZW1vdmUoaik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50cy5yZW1vdmUoMCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBqICA9IDA7IGogPCBidXNFbnRpdGllcy5zaXplKCk7IGorKykgewotICAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlidXNFbnRpdGllcy5nZXQoaik7Ci0gICAgICAgIExpc3RFbGVtZW50IGxlID0gbmV3IExpc3RFbGVtZW50KGJlKTsKLSAgICAgICAgcXVlcnlJbnB1dFZlY3Rvci5hZGQobGUpOwotICAgICAgICBpbnQgc3ViUXVlcnlJdGVtSWQgPSBxdWVyeUlucHV0VmVjdG9yLmluZGV4T2YobGUpOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50W10gcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5ID0gKFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnRbXSlwdWJBc3NlcnRpb25FbGVtZW50cy5nZXQoaik7Ci0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5Lmxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5W2tdLnNldFNlcnZpY2VQcm92aWRlcihsZSk7Ci0gICAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5W2tdLnNldFN1YlF1ZXJ5SXRlbUlkKHN1YlF1ZXJ5SXRlbUlkKTsKLSAgICAgICAgICBsaXN0TWFuYWdlci5hZGQobmV3IExpc3RFbGVtZW50KHB1YkFzc2VydGlvbkVsZW1lbnRBcnJheVtrXSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJ1c0VsZW1lbnQuc2V0UHVibGlzaGVyQXNzZXJ0aW9ucyhsaXN0TWFuYWdlcik7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0VYSVNUSU5HX1BVQkxJU0hFUl9BU1NFUlRJT05TLCBxdWVyeUlucHV0VmVjdG9yKTsKLSAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUFVCTElTSEVSX0FTU0VSVElPTlNfUkVGUkVTSEVEIikpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MDE5YjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uIGV4dGVuZHMgU2hvd1BlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgIT0gbnVsbCAmJiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSLGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIAotICAgIC8vIFNhdmUgdGhlIGZyYW1lc2V0IHNpemVzIGlmZiBubyBmcmFtZSBpcyBtYXhpbWl6ZWQuCi0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAKLSAgICBpZiAoIWFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpICYmICFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIAotICAgIHJldHVybiBzdXBlci5ydW4oKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUFjdGlvbkxpbmsoaW50IHRhcmdldFBlcnNwZWN0aXZlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGZvcm1MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb25KU1AuanNwPyIpOwotICAgIGZvcm1MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpLmFwcGVuZCgnPScpLmFwcGVuZCh0YXJnZXRQZXJzcGVjdGl2ZUlkKTsKLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGZvcm1MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7Ci0gICAgcmV0dXJuIGZvcm1MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxM2QzNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuVG9nZ2xlTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBUb2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24gZXh0ZW5kcyBUb2dnbGVOb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBUb2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldENhdGVnb3J5TWFuYWdlcigpKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9zSWQ9Li4uJm5vZGVJZD0uLi4mb3Blbj0uLi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLGludCBub2RlSWQsYm9vbGVhbiBvcGVuKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuT1BFTikuYXBwZW5kKCc9JykuYXBwZW5kKG9wZW4/QWN0aW9uSW5wdXRzLk9QRU5fTk9ERTpBY3Rpb25JbnB1dHMuQ0xPU0VfTk9ERSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgcGVyZm9ybUJhc2VBY3Rpb24obm9kZUlkKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAiY2F0ZWdvcnlCcm93c2VyV2luZG93Q29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIE9wZW5DYXRlZ29yeUJyb3dzZXJBY3Rpb24uZ2V0Q2F0ZWdvcnlDb250ZW50UGFnZShjb250cm9sbGVyXy5nZXRTZXNzaW9uSWQoKSx1ZGRpUGVyc3BlY3RpdmUuZ2V0Q2F0ZWdvcnlUTW9kZWxLZXkoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250YWluZXJQYWdlKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rKGNvbnRyb2xsZXJfLmdldFNlc3Npb25JZCgpLHVkZGlQZXJzcGVjdGl2ZS5nZXRDYXRlZ29yeVRNb2RlbEtleSgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY2ZDU2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuVG9nZ2xlTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBUb2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uIGV4dGVuZHMgVG9nZ2xlTm9kZUFjdGlvbgotewotICBwdWJsaWMgVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uJm9wZW49Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxib29sZWFuIG9wZW4pCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuT1BFTikuYXBwZW5kKCc9JykuYXBwZW5kKG9wZW4/QWN0aW9uSW5wdXRzLk9QRU5fTk9ERTpBY3Rpb25JbnB1dHMuQ0xPU0VfTk9ERSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHRvIHNlbGVjdCB0aGUgdG9nZ2xlZCBub2RlIHdoZW4sIGF0IHRoZSB0aW1lIG9mCi0gIC8vIHRoZSBjb2xsYXBzZSBldmVudCwgYSBkZXNjZW5kYW50IG5vZGUgd2FzIHNlbGVjdGVkLgotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gdG9nZ2xlZE5vZGVfLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpbnQgbm9kZUlkID0gdG9nZ2xlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2wuZ2V0VG9vbElkKCk7Ci0gICAgaW50IHZpZXdJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICBpbnQgdmlld1Rvb2xJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgaWYgKHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLHRydWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRydWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIm5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJwcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTYyOTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeVRyYW5zZmVyVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGNsYXNzIFRyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByaXZhdGUgTm9kZSB0YXJnZXROb2RlXzsKLSAgcHVibGljIFRyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHRhcmdldE5vZGVfID0gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIC8vIFRoZSBjbGllbnQgSmF2YXNjcmlwdCBlbmZvcmNlcyB0aGUgcnVsZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIHdhcyBzZWxlY3RlZCBiZWZvcmUgdGhlIGZvcm0gY2FuIGJlIHN1Ym1pdHRlZC4KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTLHNlbGVjdGVkTm9kZUlkcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yUmV0dXJuKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNIT1dfUkVTVUxUU19UQVJHRVQpLmFwcGVuZCgiPTEiKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZW5hYmxlU2hvd1Jlc3VsdHNUYXJnZXQoKQotICB7Ci0gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSB0YXJnZXQgbGluayBvbiB0aGUgcXVlcnkgcmVzdWx0cyBwYWdlLiBJbnNlcnQgYSB6ZXJvIGVsZW1lbnQKLSAgICAvLyBhcnJheSBzbyB0aGF0IG5vIHJlc3VsdHMgYXJlIHRyYW5zZmVycmVkIGJ1dCB0aGUganVtcCBiYWNrIHRvIHRoZSBjb3JyZWN0IHF1ZXJ5IGFuZCBpdHMgaW5mbyBvY2N1cnMuCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyxuZXcgU3RyaW5nWzBdKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICAvLyBUcmFuc2ZlciB0aGUgcmVzdWx0cyBpbiB0aGlzIFF1ZXJ5IG5vZGUgaW50byB0aGUgcHJvcGVydHkgZXhwZWN0ZWQgYnkgdGhlIG9yaWdpbmF0aW5nIG5vZGUuCi0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTKTsKLSAgICBOb2RlIGN1cnJlbnROb2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgdGFyZ2V0ID0gKFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQpKGN1cnJlbnRFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoVURESU1vZGVsQ29uc3RhbnRzLlNVQlFVRVJZX1RSQU5TRkVSX1RBUkdFVCkpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IHRhcmdldC5nZXRTdWJRdWVyeUtleSgpOwotICAgIFN0cmluZyB0YXJnZXRRdWVyeUtleTsKLQotICAgIGludCBsYXN0U2VwYXJhdG9yUG9zID0gc3ViUXVlcnlLZXkubGFzdEluZGV4T2YoJzonKTsKLSAgICBpZiAobGFzdFNlcGFyYXRvclBvcyA9PSAtMSkKLSAgICAgIHRhcmdldFF1ZXJ5S2V5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgdGFyZ2V0UXVlcnlLZXkgPSBzdWJRdWVyeUtleS5zdWJzdHJpbmcoMCxsYXN0U2VwYXJhdG9yUG9zKTsKLQotICAgIFN0cmluZyB0YXJnZXRQcm9wZXJ0eSA9IHN1YlF1ZXJ5S2V5LnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsc3ViUXVlcnlLZXkubGVuZ3RoKCkpOwotICAgIEZvcm1Ub29sIHRhcmdldEZvcm1Ub29sID0gdGFyZ2V0LmdldFRhcmdldEZvcm1Ub29sKCk7Ci0gICAgKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSl0YXJnZXRGb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5KTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgdGFyZ2V0UXVlcnlGb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSl0YXJnZXRGb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHRhcmdldFF1ZXJ5S2V5KTsKLSAgICBWZWN0b3IgdGFyZ2V0TGlzdCA9IChWZWN0b3IpdGFyZ2V0UXVlcnlGb3JtVG9vbFBJLmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KTsKLSAgICBpZiAodGFyZ2V0TGlzdCA9PSBudWxsKQotICAgICAgdGFyZ2V0TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY3VycmVudE5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBmb3IgKGludCBpPTA7aTxzZWxlY3RlZE5vZGVJZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpbnQgc2VsZWN0ZWROb2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KHNlbGVjdGVkTm9kZUlkc1tpXSk7Ci0gICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUoc2VsZWN0ZWROb2RlSWQpOwotICAgICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIE9iamVjdCBvYmplY3Q7Ci0gICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0VsZW1lbnQpCi0gICAgICAgIG9iamVjdCA9ICgoQnVzaW5lc3NFbGVtZW50KXRyZWVFbGVtZW50KS5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgICAgZWxzZSBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlRWxlbWVudCkKLSAgICAgICAgb2JqZWN0ID0gKChTZXJ2aWNlRWxlbWVudCl0cmVlRWxlbWVudCkuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFNlcnZpY2UgaW50ZXJmYWNlCi0gICAgICAgIG9iamVjdCA9ICgoU2VydmljZUludGVyZmFjZUVsZW1lbnQpdHJlZUVsZW1lbnQpLmdldFRNb2RlbCgpOwotICAgICAgfQotICAgICAgTGlzdEVsZW1lbnQgdGFyZ2V0TGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQob2JqZWN0KTsKLSAgICAgIHRhcmdldExpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbyhzZWxlY3RlZE5vZGVJZCxzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSk7Ci0gICAgICBpZiAodGFyZ2V0UHJvcGVydHkuZXF1YWxzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MpIHx8IHRhcmdldFByb3BlcnR5LmVxdWFscyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpIHx8IHRhcmdldFByb3BlcnR5LmVxdWFscyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UpKQotICAgICAgewotICAgICAgICAvLyBDbGVhciB0aGUgbWFuYWdlciBzbyBhIHJlcGxhY2VtZW50IG9jY3Vycy4KLSAgICAgICAgdGFyZ2V0TGlzdC5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgfQotICAgICAgdGFyZ2V0TGlzdC5hZGRFbGVtZW50KHRhcmdldExpc3RFbGVtZW50KTsKLSAgICB9Ci0gICAgdGFyZ2V0UXVlcnlGb3JtVG9vbFBJLnNldFByb3BlcnR5KHRhcmdldFByb3BlcnR5LHRhcmdldExpc3QpOwotICAgIEhhc2h0YWJsZSBzYXZlZFBhcmVudFF1ZXJ5UHJvcGVydGllcyA9IHRhcmdldC5nZXRQYXJlbnRRdWVyeURhdGEoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gc2F2ZWRQYXJlbnRRdWVyeVByb3BlcnRpZXMua2V5cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIHRhcmdldFF1ZXJ5Rm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShrZXksc2F2ZWRQYXJlbnRRdWVyeVByb3BlcnRpZXMuZ2V0KGtleSkpOwotICAgIH0KLQotICAgIC8vIFNlbGVjdCB0aGUgbm9kZSBhbmQgdGhlIGRhdGFzdHJ1Y3R1cmUgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgc3VicXVlcnkuCi0gICAgaW50IHRhcmdldE5vZGVJZCA9IHRhcmdldC5nZXROb2RlSWQoKTsKLSAgICBpbnQgdGFyZ2V0VG9vbElkID0gdGFyZ2V0LmdldFRvb2xJZCgpOwotICAgIGludCB0YXJnZXRWaWV3SWQgPSB0YXJnZXQuZ2V0Vmlld0lkKCk7Ci0gICAgaW50IHRhcmdldFZpZXdUb29sSWQgPSB0YXJnZXQuZ2V0Vmlld1Rvb2xJZCgpOwotICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKHRhcmdldE5vZGVJZCk7Ci0gICAgdGFyZ2V0Tm9kZV8gPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICB0YXJnZXROb2RlXy5nZXRUb29sTWFuYWdlcigpLnNldFNlbGVjdGVkVG9vbElkKHRhcmdldFRvb2xJZCk7Ci0gICAgdGFyZ2V0Tm9kZV8uc2V0Vmlld0lkKHRhcmdldFZpZXdJZCk7Ci0gICAgaWYgKHRhcmdldFZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICB0YXJnZXROb2RlXy5nZXRWaWV3VG9vbE1hbmFnZXIoKS5zZXRTZWxlY3RlZFRvb2xJZCh0YXJnZXRWaWV3VG9vbElkKTsKLSAgICB0YXJnZXRGb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSx0YXJnZXRRdWVyeUtleSk7Ci0gICAgYWRkVG9IaXN0b3J5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsdGFyZ2V0Vmlld1Rvb2xJZCx0YXJnZXRRdWVyeUtleSx0cnVlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRUYXJnZXROb2RlKCkKLSAgewotICAgIHJldHVybiB0YXJnZXROb2RlXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWI1MDgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIFRyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIFRyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb24oKQotICB7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbkpTUC5qc3A/c2Vzc2lvbklkPS4uLiZjYXRlZ29yeVRNb2RlbEtleT0uLi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1RyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1RNT0RFTF9LRVkpLmFwcGVuZCgnPScpLmFwcGVuZChjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OWU4MWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGlua0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5PcGVuV1NETEFjdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwdWJsaWMgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGludCB0b29sSWQsaW50IHZpZXdJZCxpbnQgdmlld1Rvb2xJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBub2RlSWRTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAvLyBQZXJmb3JtIGRhdGEgdmFsaWRhdGlvbi4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KG5vZGVJZFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCEKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsbm9kZUlkU3RyaW5nKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlkKTsKLSAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUVsZW1lbnQpCi0gICAgewotICAgICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpZWxlbWVudDsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgIFN0cmluZyB3c2RsVVJMID0gdWRkaTRqSGVscGVyLmdldFdTREwoYnMsIHNlcnZpY2VFbGVtZW50LmdldFJlZ2lzdHJ5RWxlbWVudCgpLmdldFByb3h5KCkpOwotICAgICAgaWYgKHdzZGxVUkwgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBEZWZpbml0aW9uIGRlZiA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICAgICAgICBGaWxlIHRlbXBGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgidGVtcCIsIi53c2RsIik7Ci0gICAgICAgICAgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgICBhY3Rpb24ud3JpdGVXU0RMRGVmaW5pdGlvbihuZXcgRmlsZU91dHB1dFN0cmVhbSh0ZW1wRmlsZSksZGVmKTsKLSAgICAgICAgICB3c2RsVVJMID0gdGVtcEZpbGUudG9VUkwoKS50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsVVJMID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsVVJMID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxVUkwgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAgIAotICAgICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT3BlbldTRExBY3Rpb24gb3BlbldTRExBY3Rpb24gPSBuZXcgT3BlbldTRExBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5XU0RMQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLHdzZGxVUkwpOwotICAgICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IG9wZW5XU0RMQWN0aW9uLnJ1bigpOwotICAgICAgICBpZiAoYWN0aW9uUmVzdWx0KSB7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1dTRExfQURERURfVE9fV1NETF9QRVJTUEVDVElWRSIsd3NkbFVSTCkpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfV1NETF9OT1RfQURERURfVE9fV1NETF9QRVJTUEVDVElWRSIpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElFeGNlcHRpb25IYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJRXhjZXB0aW9uSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmZhODQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElFeGNlcHRpb25IYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkRpc3Bvc2l0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVzdWx0OwotCi1wdWJsaWMgY2xhc3MgVURESUV4Y2VwdGlvbkhhbmRsZXIgewotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIHJlcXVpcmVzUmVzZXQoVURESUV4Y2VwdGlvbiBlKXsKLQkJCi0gICAgCURpc3Bvc2l0aW9uUmVwb3J0IGRwID0gZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotICAgIAlWZWN0b3IgcnYgPSBkcC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAJZm9yKGludCBpID0gMDtpIDwgcnYuc2l6ZSgpO2krKyl7Ci0gICAgCQlSZXN1bHQgcmVzdWx0ID0gKFJlc3VsdClydi5nZXQoaSk7Ci0gICAgCQlpZihyZXN1bHQuZ2V0RXJybm8oKS5lcXVhbHMoIjEwMTQwIikpCi0gICAgCQkJIHJldHVybiB0cnVlOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmZGQ2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLldTRExGaWxlTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbgotewotICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZl87Ci0gIHByaXZhdGUgU3RyaW5nIGRlZmF1bHRXU0RMRmlsZU5hbWVfOwotCi0gIHB1YmxpYyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBub2RlTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBkZWZfID0gbnVsbDsKLSAgICBkZWZhdWx0V1NETEZpbGVOYW1lXyA9ICJ0ZW1wLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGludCB0b29sSWQsaW50IHZpZXdJZCxpbnQgdmlld1Rvb2xJZCkKLSAgewotICAgIHJldHVybiBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLCJ1ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB3cml0ZShPdXRwdXRTdHJlYW0gb3MpCi0gIHsKLSAgICByZXR1cm4gd3JpdGVXU0RMRGVmaW5pdGlvbihvcyxkZWZfKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGVmYXVsdEZpbGVOYW1lKCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0V1NETEZpbGVOYW1lXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICBTdHJpbmcgd3NkbFVybCA9IG51bGw7Ci0gICAgaWYgKG5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICAgIHdzZGxVcmwgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETChicywgc2VydmljZUVsZW1lbnQuZ2V0UmVnaXN0cnlFbGVtZW50KCkuZ2V0UHJveHkoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWVsZW1lbnQpLmdldFRNb2RlbCgpOwotICAgICAgICB3c2RsVXJsID0gdWRkaTRqSGVscGVyLmdldFdTREwodE1vZGVsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHdzZGxVcmwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZGVmXyA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVXJsKTsKLSAgICAgICAgaWYgKGRlZl8gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB3c2RsUGF0aG5hbWU7Ci0gICAgICAgICAgaW50IGluZGV4ID0gd3NkbFVybC5pbmRleE9mKCcvJyk7Ci0gICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICAgICAgd3NkbFBhdGhuYW1lID0gd3NkbFVybC5zdWJzdHJpbmcoaW5kZXgrMSwgd3NkbFVybC5sZW5ndGgoKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgd3NkbFBhdGhuYW1lID0gd3NkbFVybDsKLSAgICAgICAgICBkZWZhdWx0V1NETEZpbGVOYW1lXyA9IFdTRExGaWxlTmFtZUhlbHBlci5nZXRXU0RMRmlsZU5hbWUod3NkbFBhdGhuYW1lKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JFVFJJRVZJTkdfV1NETF9ET0MiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjgyM2Q5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24gZXh0ZW5kcyBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbgotewotICBwdWJsaWMgVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gKEZvcm1Ub29sKXVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gIH0KLQotICAgIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCkgewotICAgICAgICBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBIYXNodGFibGUgdGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotCi0gICAgICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotCi0gICAgICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpKTsKLQotICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDk1Mjg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGNsYXNzIFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIGV4dGVuZHMgTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbgotewotICBwdWJsaWMgVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgU3RyaW5nIHdzZGxVcmwgPSBudWxsOwotICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUVsZW1lbnQpCi0gICAgewotICAgICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpZWxlbWVudDsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgd3NkbFVybCA9IHVkZGk0akhlbHBlci5nZXRXU0RMKGJzLCBzZXJ2aWNlRWxlbWVudC5nZXRSZWdpc3RyeUVsZW1lbnQoKS5nZXRQcm94eSgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KQotICAgIHsKLSAgICAgIFRNb2RlbCB0TW9kZWwgPSAoKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWVsZW1lbnQpLmdldFRNb2RlbCgpOwotICAgICAgd3NkbFVybCA9IHVkZGk0akhlbHBlci5nZXRXU0RMKHRNb2RlbCk7Ci0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHdzZGxVcmwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWYgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVybCk7Ci0gICAgICAgIEZpbGUgdGVtcEZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJ0ZW1wIiwiLndzZGwiKTsKLSAgICAgICAgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgYWN0aW9uLndyaXRlV1NETERlZmluaXRpb24obmV3IEZpbGVPdXRwdXRTdHJlYW0odGVtcEZpbGUpLGRlZik7Ci0gICAgICAgIHdzZGxVcmwgPSB0ZW1wRmlsZS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBsYXVuY2hXaXphcmQod3NkbFVybCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUkVUUklFVklOR19XU0RMX0RPQyIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1ODkyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLk5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElNYWluTm9kZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFVERElOb2RlQWN0aW9uIGV4dGVuZHMgTm9kZUFjdGlvbgotewotICBwcm90ZWN0ZWQgUmVnaXN0cnlOb2RlIHJlZ05vZGVfOwotICBwdWJsaWMgVURESU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKSk7Ci0gICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpCi0gIHsKLSAgICBOb2RlIHNlbGVjdGVkTmF2aWdhdG9yTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICByZXR1cm4gc2VsZWN0ZWROYXZpZ2F0b3JOb2RlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFJlZ2lzdHJ5Tm9kZSBnZXRSZWdpc3RyeU5vZGUoKQotICB7Ci0gICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbm9kZU1hbmFnZXJfLmdldFJvb3ROb2RlKCk7Ci0gICAgcmV0dXJuIHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElQcm9wZXJ0aWVzRm9ybUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTgwMWRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElQcm9wZXJ0aWVzRm9ybUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESU1haW5Ob2RlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uIGV4dGVuZHMgRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlcl87Ci0gIHB1YmxpYyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbmF2aWdhdG9yTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gbmF2aWdhdG9yTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpCi0gIHsKLSAgICByZXR1cm4gKEZvcm1Ub29sKShnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUmVnaXN0cnlOb2RlIGdldFJlZ2lzdHJ5Tm9kZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0UmVnaXN0cnlOb2RlKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBSZWdpc3RyeU5vZGUgZ2V0UmVnaXN0cnlOb2RlKE5vZGUgcmVnaXN0cnlDaGlsZE5vZGUpCi0gIHsKLSAgICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyXy5nZXRSb290Tm9kZSgpOwotICAgIHJldHVybiB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHJlZ2lzdHJ5Q2hpbGROb2RlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVW5wdWJsaXNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjMzdkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgVW5wdWJsaXNoQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBSZWdpc3RyeU5vZGUgcmVnaXN0cnlOb2RlXzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNMb2dnZWRJbl87Ci0KLSAgcHVibGljIFVucHVibGlzaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICByZWdpc3RyeU5vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gbG9nIGluCi0gICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLCBwdWJsaXNoVVJMKTsKLSAgICAgICAgCi0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoVVJMKSkKLSAgICAgIHsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1c2VySWQgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgICAgIAotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklkKSkKLSAgICAgIHsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICAgIH0KLQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQsIHBhc3N3b3JkKTsKLSAgICAgIAotICAgICAgZm9ybVRvb2wudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0KLSAgICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLQotCVJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoIXJlZ2lzdHJ5RWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCBsb2cgaW4gZmlyc3QKLSAgICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICAgIAotICAgICAgICByZWdpc3RyeUVsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIHNlbGVjdGVkRWxlbWVudEtleSA9IHNlbGVjdGVkRWxlbWVudC5nZXRLZXkoKTsKLSAgICAgIFN0cmluZyB1bnB1Ymxpc2hUeXBlTWVzc2FnZUtleSA9IG51bGw7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdpc3RyeUVsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFN0cmluZyBhdXRoSW5mbyA9IHJlZ2lzdHJ5RWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpOwotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgZHIgPSBudWxsOwotICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEJ1c2luZXNzRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgdW5wdWJsaXNoVHlwZU1lc3NhZ2VLZXkgPSAiTVNHX0lORk9fQlVTSU5FU1NfVU5QVUJMSVNIRUQiOwotICAgICAgICBkciA9IHByb3h5LmRlbGV0ZV9idXNpbmVzcyhhdXRoSW5mbyxzZWxlY3RlZEVsZW1lbnRLZXkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHVucHVibGlzaFR5cGVNZXNzYWdlS2V5ID0gIk1TR19JTkZPX1NFUlZJQ0VfVU5QVUJMSVNIRUQiOwotICAgICAgICBkciA9IHByb3h5LmRlbGV0ZV9zZXJ2aWNlKGF1dGhJbmZvLHNlbGVjdGVkRWxlbWVudEtleSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgdW5wdWJsaXNoVHlwZU1lc3NhZ2VLZXkgPSAiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfVU5QVUJMSVNIRUQiOwotICAgICAgICBkciA9IHByb3h5LmRlbGV0ZV90TW9kZWwoYXV0aEluZm8sc2VsZWN0ZWRFbGVtZW50S2V5KTsKLSAgICAgIH0KLSAgICAgIGlmICghZHIuc3VjY2VzcygpKQotICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGRyLnRvU3RyaW5nKCkpOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzZWxlY3RlZEVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh1bnB1Ymxpc2hUeXBlTWVzc2FnZUtleSxzZWxlY3RlZEVsZW1lbnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAJCXJlZ2lzdHJ5RWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIAlyZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIsZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSwgbWVzc2FnZVF1ZXVlLCAiRXhjZXB0aW9uIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmU0NjZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUHVibGlzaGVkSXRlbXNOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVcGRhdGVBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHJvdGVjdGVkIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzQXV0aGVudGljYXRpb25fOwotICBwdWJsaWMgVXBkYXRlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixib29sZWFuIHJlcXVpcmVzQXV0aGVudGljYXRpb24pCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotICAgIHJlcXVpcmVzQXV0aGVudGljYXRpb25fID0gcmVxdWlyZXNBdXRoZW50aWNhdGlvbjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLSAgCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBTZXR1cCBmb3IgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcgotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTVVMVElQQVJUX0ZPUk1fREFUQV9QQVJTRVIsIHBhcnNlcik7Ci0KLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9IGZvcm1Ub29sOwotICAgIGZvcm1Ub29sUEkuY2xlYXJFcnJvcnMoKTsKLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gcHJvY2Vzc090aGVycyhwYXJzZXIsZm9ybVRvb2xQSSk7Ci0gICAgZm9yIChpbnQgaT0wO2k8cmVtb3ZlZFByb3BlcnRpZXNfLnNpemUoKTtpKyspCi0gICAgICBmb3JtVG9vbFBJLnJlbW92ZVByb3BlcnR5KHJlbW92ZWRQcm9wZXJ0aWVzXy5lbGVtZW50QXQoaSkpOwotICAgIGZvcm1Ub29sUEkudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0gICAgCi0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIAotICAgIGJvb2xlYW4gdmFsaWRhdGVBdXRoZW50aWNhdGlvbiA9ICFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSAmIHJlcXVpcmVzQXV0aGVudGljYXRpb25fOwotICAgIAotICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIH0KLSAgICAKLSAgICBpZiAodmFsaWRhdGVBdXRoZW50aWNhdGlvbiAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHB1Ymxpc2hVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgfQotICAgIAotICAgIGlmICh1c2VySWQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgfQotICAgIAotICAgIGlmICh2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklkKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgfQotICAgIAotICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiByZWZyZXNoRnJvbVJlZ2lzdHJ5KCk7Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCByZWZyZXNoTm9kZShCdXNpbmVzc0VudGl0eSBiZSkKLSAgewotICAgIE5vZGUgbm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIE5vZGUgcGFyZW50Tm9kZSA9IG5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgbmV3QnVzaW5lc3NFbGVtZW50ID0gbmV3IEJ1c2luZXNzRWxlbWVudChiZSxyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpLmdldE1vZGVsKCkpOwotICAgIGNvbm5lY3RFbGVtZW50cyhwYXJlbnROb2RlLG5ld0J1c2luZXNzRWxlbWVudCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJlZnJlc2hOb2RlKEJ1c2luZXNzU2VydmljZSBicykKLSAgewotICAgIE5vZGUgbm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIE5vZGUgcGFyZW50Tm9kZSA9IG5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICBTZXJ2aWNlRWxlbWVudCBuZXdTZXJ2aWNlRWxlbWVudCA9IG5ldyBTZXJ2aWNlRWxlbWVudChicyxyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpLmdldE1vZGVsKCkpOwotICAgIGNvbm5lY3RFbGVtZW50cyhwYXJlbnROb2RlLG5ld1NlcnZpY2VFbGVtZW50KTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVmcmVzaE5vZGUoVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIE5vZGUgbm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIE5vZGUgcGFyZW50Tm9kZSA9IG5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBuZXdTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCA9IG5ldyBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCh0TW9kZWwscmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKS5nZXRNb2RlbCgpKTsKLSAgICBjb25uZWN0RWxlbWVudHMocGFyZW50Tm9kZSxuZXdTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgdm9pZCBjb25uZWN0RWxlbWVudHMoTm9kZSBwYXJlbnROb2RlLFRyZWVFbGVtZW50IG5ld0VsZW1lbnQpCi0gIHsKLSAgICBUcmVlRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gcGFyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyByZWwgPSBudWxsOwotICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgUHVibGlzaGVkSXRlbXNOb2RlKQotICAgICAgcmVsID0gVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfSVRFTVM7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFF1ZXJ5Tm9kZQotICAgICAgcmVsID0gVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSWV9SRVNVTFRTOwotICAgIH0KLSAgICBwYXJlbnRFbGVtZW50LmNvbm5lY3QobmV3RWxlbWVudCxyZWwsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBOb2RlIG5ld05vZGUgPSBwYXJlbnROb2RlLmdldENoaWxkTm9kZShuZXdFbGVtZW50KTsKLSAgICBpbnQgbmV3Tm9kZUlkID0gbmV3Tm9kZS5nZXROb2RlSWQoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHBhcmVudE5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChuZXdOb2RlSWQpOwotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gbmV3Tm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgYWRkVG9IaXN0b3J5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLHNlbGVjdGVkVG9vbC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZih0cnVlKSk7Ci0gIH0KLSAgICAKLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKFZlY3RvciB2KQotICB7Ci0gICAgZm9yIChpbnQgaT0wO2k8di5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXYuZWxlbWVudEF0KGkpOwotICAgICAgbGlzdEVsZW1lbnQuc2V0Vmlld0lkKGkpOwotICAgICAgLy8gdGFyZ2V0Vmlld0lkIGRldGVybWluZXMgd2hldGhlciBvciBub3QgYSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkIGxpc3QgZWxlbWVudCByZW1haW5zIGluIGVkaXQgc3RhdGUuCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCArIDFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoIC0gMV0gPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcihjb250cm9sbGVyXyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZUJ1c2luZXNzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNTFkMDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlQnVzaW5lc3NBY3Rpb24gZXh0ZW5kcyBVcGRhdGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVXBkYXRlXzsKLSAgcHVibGljIFVwZGF0ZUJ1c2luZXNzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsdHJ1ZSk7Ci0gICAgaXNVcGRhdGVfID0gdHJ1ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgIFN0cmluZ1tdIGRpc2NvdmVyeVVSTE1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkRJU0NPVkVSWVVSTF9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gZGlzY292ZXJ5VVJMVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ESVNDT1ZFUllVUkxfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBkaXNjb3ZlcnlVUkxzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RJU0NPVkVSWVVSTCk7Ci0gICAgU3RyaW5nW10gbmFtZU1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIG5hbWVWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5BTUVfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBuYW1lTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIG5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04pOwotICAgIFN0cmluZ1tdIGlkTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuSURFTlRJRklFUl9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gaWRWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLklERU5USUZJRVJfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBpZFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gY2F0TW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGNhdFZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0gICAgCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgCi0gICAgaWYgKHV1aWRLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLHV1aWRLZXkpOwotICAgIAotICAgIAotICAgIGlmIChkaXNjb3ZlcnlVUkxNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGRpc2NvdmVyeVVSTFZpZXdJZHMgIT0gbnVsbCAmJiBkaXNjb3ZlcnlVUkxzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZERpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0gICAgICBWZWN0b3IgbmV3RGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkwiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRpc2NvdmVyeVVSTHMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSBuZXcgRGlzY292ZXJ5VVJMKGRpc2NvdmVyeVVSTHNbaV0sIiIpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTChkaXNjb3ZlcnlVUkxzW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgZGlzY292ZXJ5VVJMVmlld0lkID0gSW50ZWdlci5wYXJzZUludChkaXNjb3ZlcnlVUkxWaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGRpc2NvdmVyeVVSTE1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkaXNjb3ZlcnlVUkxWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdEaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudChkaXNjb3ZlcnlVUkwpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0Rpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkRGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGRpc2NvdmVyeVVSTFZpZXdJZCkpOyAgICAgCi0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3RGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyxuZXdEaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3Rvcik7ICAgICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotICAgIAotICAgIEhhc2h0YWJsZSBsYW5ndWFnZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIG5hbWVWaWV3SWRzICE9IG51bGwgJiYgbmFtZUxhbmd1YWdlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZE5hbWVMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgICAgIFZlY3RvciBuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvLyBVRERJJ3Mgc2F2ZSBBUEkgKEFwcGVuZGl4IEMgb2YgdGhlIFVEREkgVjIgUHJvZ3JhbW1lcnMgQVBJIFNwZWNpZmljYXRpb24pIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAvLyAxKSBPbmx5IHRoZSBmaXJzdCByb3cgY2FuIGhhdmUgYSBibGFuayBsYW5ndWFnZS4KLSAgICAgIC8vIDIpIE9ubHkgMSBuYW1lIHBlciBsYW5ndWFnZS4KLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChuYW1lTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0sbmFtZUxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KG5hbWVMYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQobmFtZUxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGludCBuYW1lVmlld0lkID0gSW50ZWdlci5wYXJzZUludChuYW1lVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihuYW1lTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgCi0gICAgICAgIGlmIChuYW1lVmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KHVkZGk0ak5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZE5hbWVMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQobmFtZVZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX05BTUVTIikpOwotICAgIH0KLSAgICAKLSAgICBpZiAoZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9uVmlld0lkcyAhPSBudWxsICYmIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzICE9IG51bGwgJiYgZGVzY3JpcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZERlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpOwotICAgICAgVmVjdG9yIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpOwotICAgICAgbGFuZ3VhZ2VIYXNoLmNsZWFyKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbnMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIERlc2NyaXB0aW9uIHVkZGk0akRlc2NyaXB0aW9uOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSxkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcoZGVzY3JpcHRpb25zW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGludCBkZXNjcmlwdGlvblZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoZGVzY3JpcHRpb25WaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgCi0gICAgICAgIGlmIChkZXNjcmlwdGlvblZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQodWRkaTRqRGVzY3JpcHRpb24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGREZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChkZXNjcmlwdGlvblZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IpOyAgICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyk7Ci0gICAgICAKLSAgICBpZiAoaWRNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGlkVmlld0lkcyAhPSBudWxsICYmIGlkVHlwZXMgIT0gbnVsbCAmJiBpZEtleU5hbWVzICE9IG51bGwgJiYgaWRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkSWRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLSAgICAgIFZlY3RvciBuZXdJZExpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aWRLZXlOYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShpZEtleU5hbWVzW2ldLGlkS2V5VmFsdWVzW2ldLGlkVHlwZXNbaV0pOwotICAgICAgICBpbnQgaWRWaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGlkVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihpZE1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGlkVmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3SWRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudChrcikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3SWRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZElkTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGlkVmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3SWRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyxuZXdJZExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICAgICAKLSAgICBpZiAoY2F0TW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBjYXRWaWV3SWRzICE9IG51bGwgJiYgY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGRDYXRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgICAgVmVjdG9yIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgaW50IGNhdFZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoY2F0Vmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihjYXRNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChjYXRWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdDYXRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudChrcikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGRDYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoY2F0Vmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyxuZXdDYXRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7ICAgICAgICAgICAgCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVmcmVzaEZyb21SZWdpc3RyeSgpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyB1dWlkS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFZlY3RvciBiZVZlY3RvciA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbCh1dWlkS2V5KS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgYmU7Ci0gICAgICBpZiAoYmVWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgICAgYmUgPSAoQnVzaW5lc3NFbnRpdHkpYmVWZWN0b3IuZ2V0KDApOwotICAgICAgZWxzZQotICAgICAgICBiZSA9IG51bGw7Ci0gICAgICBpZiAoYmUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxiZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRmVlZGJhY2sgdmlhIEphdmFzY3JpcHQgcG9wdXBzLgotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEZlZWRiYWNrIHZpYSBKYXZhc2NyaXB0IHBvcHVwcy4KLSAgICB9Ci0gICAgaXNVcGRhdGVfID0gZmFsc2U7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKTsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBWZWN0b3IgZGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotICAgICAgVmVjdG9yIG5hbWVMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBWZWN0b3IgaWRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotICAgICAgVmVjdG9yIGNhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLSAgICAgIAotICAgICAgVmVjdG9yIGRpc2NvdmVyeVVSTFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGlmIChkaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSAoRGlzY292ZXJ5VVJMKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGRpc2NvdmVyeVVSTFZlY3Rvci5hZGRFbGVtZW50KGRpc2NvdmVyeVVSTCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICAgCi0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCluYW1lTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KG5hbWUpOwotICAgICAgfQotICAgICAgCi0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBudWxsOwotICAgICAgaWYgKGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQoZGVzY3JpcHRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElkZW50aWZpZXJCYWcgaWRCYWcgPSBudWxsOwotICAgICAgaWYgKGlkTGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWRCYWcgPSBuZXcgSWRlbnRpZmllckJhZygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxpZExpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClpZExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBpZEJhZy5hZGQoa3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG51bGw7Ci0gICAgICBpZiAoY2F0TGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGNhdExpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGRpc2NvdmVyeVVSTFZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgICBiZS5zZXREaXNjb3ZlcnlVUkxzKG5ldyBEaXNjb3ZlcnlVUkxzKGRpc2NvdmVyeVVSTFZlY3RvcikpOwotICAgICAgZWxzZQotICAgICAgICBiZS5zZXREaXNjb3ZlcnlVUkxzKG51bGwpOwotICAgICAgYmUuc2V0TmFtZVZlY3RvcihuYW1lVmVjdG9yKTsKLSAgICAgIGJlLnNldERlc2NyaXB0aW9uVmVjdG9yKGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICAgIGJlLnNldElkZW50aWZpZXJCYWcoaWRCYWcpOwotICAgICAgYmUuc2V0Q2F0ZWdvcnlCYWcoY2F0QmFnKTsKLSAgICAgIAotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBWZWN0b3IgYmVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBiZVZlY3Rvci5hZGQoYmUpOwotICAgICAgYmUgPSAoQnVzaW5lc3NFbnRpdHkpcHJveHkuc2F2ZV9idXNpbmVzcyhyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJlVmVjdG9yKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKTsKLSAgICAgIHJlZnJlc2hOb2RlKGJlKTsKLSAgICAgIGlmIChpc1VwZGF0ZV8pICAgICAgCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU19VUERBVEVEIixiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU19QVUJMSVNIRUQiLGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSl7Ci0gICAgCQlSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJfQkKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iLGUpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlUmVnaXN0cnlBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2ZjE3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLQotcHVibGljIGNsYXNzIFVwZGF0ZVJlZ2lzdHJ5QWN0aW9uIGV4dGVuZHMgVXBkYXRlQWN0aW9uCi17Ci0gIHB1YmxpYyBVcGRhdGVSZWdpc3RyeUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGZhbHNlKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG5hbWVNb2RpZmllZFN0YXRlID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQpOwotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUpOwotICAgIFN0cmluZ1tdIHVzZXJEZWZpbmVkQ2F0ZWdvcnlUTW9kZWxLZXlzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1RNT0RFTF9LRVkpOwotICAgIFN0cmluZ1tdIHVzZXJEZWZpbmVkQ2F0ZWdvcnlEYXRhID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX0ZJTEVOQU1FKTsKLSAgICAKLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAKLSAgICBpZiAobmFtZU1vZGlmaWVkU3RhdGUgIT0gbnVsbCAmJiBuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKG5hbWVNb2RpZmllZFN0YXRlKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIFN0cmluZyBuZXdOYW1lOwotICAgICAgaWYgKGlzTW9kaWZpZWQpCi0gICAgICAgIG5ld05hbWUgPSBuYW1lOwotICAgICAgZWxzZQotICAgICAgICBuZXdOYW1lID0gKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FLG5ld05hbWUpOwotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcobmFtZSkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9OQU1FIikpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUpOwotICAgIAotICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3J5VE1vZGVsS2V5cyAhPSBudWxsICYmIHVzZXJEZWZpbmVkQ2F0ZWdvcnlEYXRhICE9IG51bGwpCi0gICAgewotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTx1c2VyRGVmaW5lZENhdGVnb3J5VE1vZGVsS2V5cy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBDYXRlZ29yeU1vZGVsIHVzZXJEZWZpbmVkQ2F0ZWdvcnkgPSByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcnkodXNlckRlZmluZWRDYXRlZ29yeVRNb2RlbEtleXNbaV0pOwotLy8gICAgICBUT0RPOiBNb3ZlIFVERElQcmVmZXJlbmNlQ29udGV4dCBkb3duIHRvIG9yZy5lY2xpcHNlLndzdC53cyAKLS8vICAgICAgVURESVByZWZlcmVuY2VDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0VURESVByZWZlcmVuY2VDb250ZXh0KCk7ICAgICAgICAKLS8vICAgICAgdXNlckRlZmluZWRDYXRlZ29yeS5zZXRDb2x1bW5EZWxpbWl0ZXIoY29udGV4dC5nZXRVZGRpQ2F0RGF0YUNvbHVtbkRlbGltaXRlcigpKTsKLS8vICAgICAgdXNlckRlZmluZWRDYXRlZ29yeS5zZXRTdHJpbmdEZWxpbWl0ZXIoY29udGV4dC5nZXRVZGRpQ2F0RGF0YVN0cmluZ0RlbGltaXRlcigpKTsKLSAgICAgICAgdXNlckRlZmluZWRDYXRlZ29yeS5zZXRDb2x1bW5EZWxpbWl0ZXIoIiMiKTsKLSAgICAgICAgdXNlckRlZmluZWRDYXRlZ29yeS5zZXRTdHJpbmdEZWxpbWl0ZXIoIlwiIik7Ci0gICAgICAgIFN0cmluZyBkaXNwbGF5TmFtZSA9IHVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0RGlzcGxheU5hbWUoKTsKLSAgICAgICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcnlEYXRhW2ldID09IG51bGwgfHwgdXNlckRlZmluZWRDYXRlZ29yeURhdGFbaV0ubGVuZ3RoKCkgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRSIsZGlzcGxheU5hbWUpKTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlVTRVJfREVGSU5FRF9DQVRFR09SSUVTLHVzZXJEZWZpbmVkQ2F0ZWdvcnlUTW9kZWxLZXlzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBieXRlIHJjID0gdXNlckRlZmluZWRDYXRlZ29yeS5sb2FkRGF0YShuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcih1c2VyRGVmaW5lZENhdGVnb3J5RGF0YVtpXSkpKTsKLSAgICAgICAgICBzd2l0Y2ggKHJjKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgQ2F0ZWdvcnlNb2RlbC5PUEVSQVRJT05fU1VDQ0VTU0ZVTDoKLSAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0xPQURFRCIsZGlzcGxheU5hbWUpKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENhdGVnb3J5TW9kZWwuRVJST1JfRklMRToKLSAgICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgUGFyc2VFeGNlcHRpb24gcGUgPSAoUGFyc2VFeGNlcHRpb24pdXNlckRlZmluZWRDYXRlZ29yeS5nZXRFcnJvckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICBTdHJpbmdbXSBhcmdzMSA9IHtTdHJpbmcudmFsdWVPZihwZS5nZXRFcnJvck9mZnNldCgpKSxkaXNwbGF5TmFtZSxwZS5nZXRNZXNzYWdlKCksdXNlckRlZmluZWRDYXRlZ29yeS5nZXRDYXRlZ29yeUtleSgpfTsKLSAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0ZJTEVfRk9STUFUIixhcmdzMSkpOwotICAgICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlVTRVJfREVGSU5FRF9DQVRFR09SSUVTLHVzZXJEZWZpbmVkQ2F0ZWdvcnlUTW9kZWxLZXlzW2ldKTsKLSAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQ2F0ZWdvcnlNb2RlbC5FUlJPUl9DQVRFR09SWV9LRVk6Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICBTdHJpbmdbXSBhcmdzMiA9IHtkaXNwbGF5TmFtZSx1c2VyRGVmaW5lZENhdGVnb3J5LmdldEVycm9yRXhjZXB0aW9uKCkuZ2V0TWVzc2FnZSgpLHVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0Q2F0ZWdvcnlLZXkoKX07Ci0gICAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFX0tFWSIsYXJnczIpKTsKLSAgICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5VU0VSX0RFRklORURfQ0FURUdPUklFUyx1c2VyRGVmaW5lZENhdGVnb3J5VE1vZGVsS2V5c1tpXSk7ICAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVmcmVzaEZyb21SZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICByZWdFbGVtZW50LnNldE5hbWUobmFtZSk7Ci0gICAgcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKS5zZXROYW1lKG5hbWUpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19SRUdJU1RSWV9VUERBVEVEIixuYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFhYmZiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ1B1Ymxpc2hUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZURldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFVwZGF0ZVNlcnZpY2VBY3Rpb24gZXh0ZW5kcyBVcGRhdGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVXBkYXRlXzsKLSAgcHVibGljIFVwZGF0ZVNlcnZpY2VBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcix0cnVlKTsKLSAgICBpc1VwZGF0ZV8gPSB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHV1aWRCdXNpbmVzc0tleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgU3RyaW5nIHV1aWRTZXJ2aWNlS2V5ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVkpOwotICAgIFN0cmluZyB3c2RsVVJMTW9kaWZpZWRTdGF0ZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5XU0RMX1VSTF9NT0RJRklFRCk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nW10gbmFtZU1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIG5hbWVWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5BTUVfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBuYW1lTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIG5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04pOwotICAgIFN0cmluZ1tdIGNhdE1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBjYXRWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAodXVpZEJ1c2luZXNzS2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSx1dWlkQnVzaW5lc3NLZXkpOwotCi0gICAgaWYgKHV1aWRTZXJ2aWNlS2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLHV1aWRTZXJ2aWNlS2V5KTsKLQotICAgIGlmICh3c2RsVVJMTW9kaWZpZWRTdGF0ZSAhPSBudWxsICYmIHdzZGxVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKHdzZGxVUkxNb2RpZmllZFN0YXRlKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIGlmIChpc01vZGlmaWVkKQotICAgICAgICB3c2RsVVJMTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQod3NkbFVSTCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHdzZGxVUkwgPSAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwsd3NkbFVSTExpc3RFbGVtZW50KTsKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHdzZGxVUkwpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkwiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0KLSAgICBIYXNodGFibGUgbGFuZ3VhZ2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGlmIChuYW1lTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBuYW1lVmlld0lkcyAhPSBudWxsICYmIG5hbWVMYW5ndWFnZXMgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGROYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIFZlY3RvciBuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvLyBVRERJJ3Mgc2F2ZSBBUEkgKEFwcGVuZGl4IEMgb2YgdGhlIFVEREkgVjIgUHJvZ3JhbW1lcnMgQVBJIFNwZWNpZmljYXRpb24pIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAvLyAxKSBPbmx5IHRoZSBmaXJzdCByb3cgY2FuIGhhdmUgYSBibGFuayBsYW5ndWFnZS4KLSAgICAgIC8vIDIpIE9ubHkgMSBuYW1lIHBlciBsYW5ndWFnZS4KLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChuYW1lTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0sbmFtZUxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQobmFtZUxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KG5hbWVMYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcobmFtZXNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbmFtZVZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQobmFtZVZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YobmFtZU1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLQotICAgICAgICBpZiAobmFtZVZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudCh1ZGRpNGpOYW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGROYW1lTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KG5hbWVWaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OQU1FUyIpKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9uVmlld0lkcyAhPSBudWxsICYmIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzICE9IG51bGwgJiYgZGVzY3JpcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZERlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBWZWN0b3IgbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIik7Ci0gICAgICBsYW5ndWFnZUhhc2guY2xlYXIoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9ucy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgRGVzY3JpcHRpb24gdWRkaTRqRGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldLGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcoZGVzY3JpcHRpb25zW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBkZXNjcmlwdGlvblZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoZGVzY3JpcHRpb25WaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgICAgIGlmIChkZXNjcmlwdGlvblZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQodWRkaTRqRGVzY3JpcHRpb24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGREZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChkZXNjcmlwdGlvblZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotCi0gICAgaWYgKGNhdE1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgY2F0Vmlld0lkcyAhPSBudWxsICYmIGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkQ2F0TGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgICAgVmVjdG9yIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgaW50IGNhdFZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoY2F0Vmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihjYXRNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChjYXRWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdDYXRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudChrcikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGRDYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoY2F0Vmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLG5ld0NhdExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlZnJlc2hCdXNpbmVzc0Zyb21SZWdpc3RyeSgpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyB1dWlkQnVzaW5lc3NLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVmVjdG9yIGJlVmVjdG9yID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKHV1aWRCdXNpbmVzc0tleSkuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IGJlOwotICAgICAgaWYgKGJlVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICAgIGJlID0gKEJ1c2luZXNzRW50aXR5KWJlVmVjdG9yLmdldCgwKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYmUgPSBudWxsOwotICAgICAgaWYgKGJlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9CVVNJTkVTUyxiZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRmVlZGJhY2sgdmlhIEphdmFzY3JpcHQgcG9wdXBzLgotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEZlZWRiYWNrIHZpYSBKYXZhc2NyaXB0IHBvcHVwcy4KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiByZWZyZXNoRnJvbVJlZ2lzdHJ5KCkKLSAgewotICAgIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyB1dWlkU2VydmljZUtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFNlcnZpY2VEZXRhaWwgc2VydmljZURldGFpbCA9IHByb3h5LmdldF9zZXJ2aWNlRGV0YWlsKHV1aWRTZXJ2aWNlS2V5KTsKLSAgICAgIFZlY3RvciBidXNpbmVzc1NlcnZpY2VWZWN0b3IgPSBzZXJ2aWNlRGV0YWlsLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotICAgICAgaWYgKGJ1c2luZXNzU2VydmljZVZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULGJ1c2luZXNzU2VydmljZVZlY3Rvci5lbGVtZW50QXQoMCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGlzVXBkYXRlXyA9IGZhbHNlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFJlZ1B1Ymxpc2hUb29sIHNldHVwUmVnUHVibGlzaFRvb2woKQotICB7Ci0gICAgLy8gUHJlcGFyZSBmb3IgcmUtcHVibGlzaGluZyBhIG5vdy1zdGFsZSBzZXJ2aWNlIHdob3NlIGJ1c2luZXNzIGhhcyBhbHNvIGJlZW4gZWxpbWluYXRlZC4KLSAgICBSZWdQdWJsaXNoVG9vbCByZWdQdWJsaXNoVG9vbCA9IHJlZ05vZGVfLmdldFJlZ1B1Ymxpc2hUb29sKCk7Ci0gICAgcmVnUHVibGlzaFRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksIiIpOwotICAgIHJlZ1B1Ymxpc2hUb29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpKTsKLSAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQpKTsKLSAgICAKLSAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwscHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCkpOwotICAgIAotICAgIFZlY3RvciBuYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgIFZlY3RvciBkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgVmVjdG9yIGNhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgIAotICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPG5hbWVMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KW5hbWVMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICBOYW1lIG5hbWUgPSAoTmFtZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudChuYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbnVsbDsKLSAgICBpZiAoZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgIHsKLSAgICAgIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQoZGVzY3JpcHRpb24pOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZWdQdWJsaXNoVG9vbC5yZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAKLSAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBudWxsOwotICAgIGlmIChjYXRMaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgIHsKLSAgICAgIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0TGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpY2F0TGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlZ1B1Ymxpc2hUb29sLnJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgICAKLSAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsbmFtZVZlY3Rvcik7Ci0gICAgaWYgKGRlc2NyaXB0aW9uVmVjdG9yICE9IG51bGwpCi0gICAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICBpZiAoY2F0QmFnICE9IG51bGwpCi0gICAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyxjYXRCYWcpOwotICAgIHJldHVybiByZWdQdWJsaXNoVG9vbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsgICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX0JVU0lORVNTKTsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBTdHJpbmcgdXVpZFNlcnZpY2VLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVkpOwotICAgICAgTGlzdEVsZW1lbnQgd3NkbFVSTExpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgVmVjdG9yIG5hbWVMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotICAgICAgVmVjdG9yIGNhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotCi0gICAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpd3NkbFVSTExpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgICAgCi0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCluYW1lTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KG5hbWUpOwotICAgICAgfQotCi0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBudWxsOwotICAgICAgaWYgKGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQoZGVzY3JpcHRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG51bGw7Ci0gICAgICBpZiAoY2F0TGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGNhdExpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgIAlyZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgIC8vIE5vdGU6IFRoZSBKU1Agd2lsbCBwcmV2ZW50IHRoaXMgcm91dGluZSBmcm9tIGV4ZWN1dGluZyBpZiBiZSBpcyBudWxsLgotICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgIERlZmluaXRpb24gZGVmID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotICAgICAgCi0gICAgICAvLyBQdWJsaXNoL3VwZGF0ZSB0aGUgc2VydmljZSBpbnRlcmZhY2VzIGZpcnN0LgotICAgICAgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gcmVnUHVibGlzaFNJQWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgIGludCBjdXJyZW50Tm9kZUlkID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Tm9kZUlkKCk7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCk7Ci0KLSAgICAgIEhhc2h0YWJsZSB0TW9kZWxzVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBUTW9kZWxbXSB0TW9kZWxzID0gbnVsbDsKLSAgICAgIGlmICh1ZGRpNGpIZWxwZXIuaXNNb25vbGl0aGljV1NETChkZWYpKQotICAgICAgewotICAgICAgCXRNb2RlbHMgPSBuZXcgVE1vZGVsWzFdOwotICAgICAgCXRNb2RlbHNbMF0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKHdzZGxVUkwsIGRlZik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAJU3RyaW5nW10gaW1wb3J0cyA9IHVkZGk0akhlbHBlci5nZXRJbXBvcnRzKGRlZiwgd3NkbFVSTCk7Ci0gICAgICAJdE1vZGVscyA9IG5ldyBUTW9kZWxbaW1wb3J0cy5sZW5ndGhdOwotICAgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgdE1vZGVscy5sZW5ndGg7IGkrKykKLSAgICAgIAkgIHRNb2RlbHNbaV0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKGltcG9ydHNbaV0pOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAodE1vZGVscyAhPSBudWxsKQotICAgICAgewotICAgICAgCWZvciAoaW50IGk9MDtpPHRNb2RlbHMubGVuZ3RoO2krKykKLSAgICAgIAl7Ci0gICAgICAJICBib29sZWFuIGlucHV0c1ZhbGlkID0gcmVnUHVibGlzaFNJQWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZSh1ZGRpNGpIZWxwZXIuZ2V0V1NETCh0TW9kZWxzW2ldKSwgdE1vZGVsc1tpXSk7Ci0gICAgICAJICBpZiAoaW5wdXRzVmFsaWQpCi0gICAgICAJICB7Ci0gICAgICAJICAgIHJlZ1B1Ymxpc2hTSUFjdGlvbi5ydW4oKTsKLSAgICAgIAkgICAgT2JqZWN0IHNhdmVkVE1vZGVsID0gcmVnUHVibGlzaFNJQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9PVVRQVVRfU0FWRURfVE1PREVMKTsKLSAgICAgIAkgICAgaWYgKHNhdmVkVE1vZGVsICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAJICAgICAgdE1vZGVsc1RhYmxlLnB1dCgoKFRNb2RlbClzYXZlZFRNb2RlbCkuZ2V0TmFtZVN0cmluZygpLCBzYXZlZFRNb2RlbCk7Ci0gICAgICAJICAgIH0KLSAgICAgICAgICAgIC8vIFJlc2VsZWN0IHRoZSBjdXJyZW50IG5vZGUuCi0gICAgICAJICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKGN1cnJlbnROb2RlSWQpOwotICAgICAgICAgIH0KLSAgICAgIAl9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIEJ1c2luZXNzU2VydmljZSBidXNTZXJ2aWNlID0gdWRkaTRqSGVscGVyLm5ld0J1c2luZXNzU2VydmljZSh3c2RsVVJMLCBkZWYsIHRNb2RlbHNUYWJsZSk7Ci0gICAgICBpZiAoaXNVcGRhdGVfKQotICAgICAgICBidXNTZXJ2aWNlLnNldFNlcnZpY2VLZXkodXVpZFNlcnZpY2VLZXkpOwotICAgICAgYnVzU2VydmljZS5zZXRCdXNpbmVzc0tleShiZS5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICAgIGJ1c1NlcnZpY2Uuc2V0TmFtZVZlY3RvcihuYW1lVmVjdG9yKTsKLSAgICAgIGJ1c1NlcnZpY2Uuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgYnVzU2VydmljZS5zZXRDYXRlZ29yeUJhZyhjYXRCYWcpOwotICAgICAgcmVnRWxlbWVudC5oYW5kbGVQcmVJbnZvY2F0aW9uKGJ1c1NlcnZpY2UpOyAgICAgIAotICAgICAgVmVjdG9yIGJzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgYnNWZWN0b3IuYWRkKGJ1c1NlcnZpY2UpOwotICAgICAgYnVzU2VydmljZSA9IChCdXNpbmVzc1NlcnZpY2UpcHJveHkuc2F2ZV9zZXJ2aWNlKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYnNWZWN0b3IpLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpLmdldCgwKTsKLSAgICAgIHJlZnJlc2hOb2RlKGJ1c1NlcnZpY2UpOwotICAgICAgaWYgKGlzVXBkYXRlXykKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfVVBEQVRFRCIsYnVzU2VydmljZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX1BVQkxJU0hFRCIsYnVzU2VydmljZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIldTRExFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIsZSk7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg0NTZiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFVwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24gZXh0ZW5kcyBVcGRhdGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVXBkYXRlXzsKLSAgcHVibGljIFVwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcix0cnVlKTsKLSAgICBpc1VwZGF0ZV8gPSB0cnVlOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7Ci0gICAgU3RyaW5nIHdzZGxVUkxNb2RpZmllZFN0YXRlID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLldTRExfVVJMX01PRElGSUVEKTsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nIG5hbWVNb2RpZmllZFN0YXRlID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQpOwotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04pOwotICAgIFN0cmluZ1tdIGlkTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuSURFTlRJRklFUl9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gaWRWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLklERU5USUZJRVJfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBpZFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gY2F0TW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGNhdFZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0gICAgCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgCi0gICAgaWYgKHV1aWRLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHV1aWRLZXkpOwotICAgIAotICAgIGlmICh3c2RsVVJMTW9kaWZpZWRTdGF0ZSAhPSBudWxsICYmIHdzZGxVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsgICAgICAKLSAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZih3c2RsVVJMTW9kaWZpZWRTdGF0ZSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICBpZiAoaXNNb2RpZmllZCkKLSAgICAgICAgd3NkbFVSTExpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHdzZGxVUkwpOwotICAgICAgZWxzZQotICAgICAgICB3c2RsVVJMID0gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCx3c2RsVVJMTGlzdEVsZW1lbnQpOwotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwod3NkbFVSTCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkwiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgIAotICAgIGlmIChuYW1lTW9kaWZpZWRTdGF0ZSAhPSBudWxsICYmIG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBuYW1lTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKG5hbWVNb2RpZmllZFN0YXRlKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIGlmIChpc01vZGlmaWVkKQotICAgICAgICBuYW1lTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQobmFtZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIG5hbWUgPSAoU3RyaW5nKW5hbWVMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsbmFtZUxpc3RFbGVtZW50KTsKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWUpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTkFNRSIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIAotICAgIEhhc2h0YWJsZSBsYW5ndWFnZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvblZpZXdJZHMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvbkxhbmd1YWdlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGREZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAgIFZlY3RvciBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKTsKLSAgICAgIGxhbmd1YWdlSGFzaC5jbGVhcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25zLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBEZXNjcmlwdGlvbiB1ZGRpNGpEZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0sZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKGRlc2NyaXB0aW9uc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgZGVzY3JpcHRpb25WaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGRlc2NyaXB0aW9uVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihkZXNjcmlwdGlvbk1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIAotICAgICAgICBpZiAoZGVzY3JpcHRpb25WaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KHVkZGk0akRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkRGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoZGVzY3JpcHRpb25WaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yKTsgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpOwotICAgICAgCi0gICAgaWYgKGlkTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBpZFZpZXdJZHMgIT0gbnVsbCAmJiBpZFR5cGVzICE9IG51bGwgJiYgaWRLZXlOYW1lcyAhPSBudWxsICYmIGlkS2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZElkTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0gICAgICBWZWN0b3IgbmV3SWRMaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGlkS2V5TmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoaWRLZXlOYW1lc1tpXSxpZEtleVZhbHVlc1tpXSxpZFR5cGVzW2ldKTsKLSAgICAgICAgaW50IGlkVmlld0lkID0gSW50ZWdlci5wYXJzZUludChpZFZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoaWRNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChpZFZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQoa3IpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGRJZExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpZFZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMsbmV3SWRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgICAgCi0gICAgaWYgKGNhdE1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgY2F0Vmlld0lkcyAhPSBudWxsICYmIGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkQ2F0TGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLSAgICAgIFZlY3RvciBuZXdDYXRMaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGludCBjYXRWaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGNhdFZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoY2F0TW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoY2F0Vmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQoa3IpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkQ2F0TGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGNhdFZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0NhdExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMsbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOyAgICAgICAgICAgIAotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlZnJlc2hGcm9tUmVnaXN0cnkoKQotICB7Ci0gICAgY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHV1aWRLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9IHByb3h5LmdldF90TW9kZWxEZXRhaWwodXVpZEtleSk7Ci0gICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gdE1vZGVsRGV0YWlsLmdldFRNb2RlbFZlY3RvcigpOwotICAgICAgaWYgKHRNb2RlbFZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHRNb2RlbFZlY3Rvci5lbGVtZW50QXQoMCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGlzVXBkYXRlXyA9IGZhbHNlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAgIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHV1aWRLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsgICAgICAKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgICAgTGlzdEVsZW1lbnQgbmFtZUxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBWZWN0b3IgaWRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgICAgVmVjdG9yIGNhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLSAgICAgIAotICAgICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIAotICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKW5hbWVMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIAotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbnVsbDsKLSAgICAgIGlmIChkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBkZXNjcmlwdGlvblZlY3Rvci5hZGRFbGVtZW50KGRlc2NyaXB0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gbnVsbDsKLSAgICAgIGlmIChpZExpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlkQmFnID0gbmV3IElkZW50aWZpZXJCYWcoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8aWRMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpaWRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgaWRCYWcuYWRkKGtyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBudWxsOwotICAgICAgaWYgKGNhdExpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxjYXRMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpY2F0TGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIFRNb2RlbCB0TW9kZWwgPSAobmV3IFVkZGk0akhlbHBlcigpKS5uZXdUTW9kZWwod3NkbFVSTCk7Ci0gICAgICBpZiAoaXNVcGRhdGVfKQotICAgICAgICB0TW9kZWwuc2V0VE1vZGVsS2V5KHV1aWRLZXkpOwotICAgICAgdE1vZGVsLnNldE5hbWUobmFtZSk7ICAgICAgCi0gICAgICB0TW9kZWwuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgdE1vZGVsLnNldElkZW50aWZpZXJCYWcoaWRCYWcpOwotICAgICAgdE1vZGVsLnNldENhdGVnb3J5QmFnKGNhdEJhZyk7Ci0gICAgICAKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHRNb2RlbFZlY3Rvci5hZGQodE1vZGVsKTsKLSAgICAgIHRNb2RlbCA9IChUTW9kZWwpcHJveHkuc2F2ZV90TW9kZWwocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCB0TW9kZWxWZWN0b3IpLmdldFRNb2RlbFZlY3RvcigpLmdldCgwKTsKLSAgICAgIHJlZnJlc2hOb2RlKHRNb2RlbCk7Ci0gICAgICBpZiAoaXNVcGRhdGVfKSAgICAgIAotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfVVBEQVRFRCIsdE1vZGVsLmdldE5hbWVTdHJpbmcoKSkpOwotICAgICAgZWxzZQotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfUFVCTElTSEVEIix0TW9kZWwuZ2V0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIldTRExFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSl7Ci0gICAgCQlSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJfQotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESUFjdGlvbklucHV0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJQWN0aW9uSW5wdXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0N2IyYjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJQWN0aW9uSW5wdXRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFVERElBY3Rpb25JbnB1dHMKLXsKLSAgLy8gT3BlblJlZ2lzdHJ5QWN0aW9uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFR0lTVFJZX05BTUUgPSAicmVnaXN0cnlOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5RVUlSWV9VUkwgPSAiaW5xdWlyeVVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hfVVJMID0gInB1Ymxpc2hVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUdJU1RSQVRJT05fVVJMID0gInJlZ2lzdHJhdGlvblVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTID0gImNoZWNrVXNlckRlZmluZWRDYXRlZ29yaWVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVURESV9VU0VSTkFNRSA9ICJ1ZGRpVXNlcm5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVRERJX1BBU1NXT1JEID0gInVkZGlQYXNzd29yZCI7Ci0KLSAgLy8gRml4ZWQgYW5kIHVzZXItZGVmaW5lZCBjYXRlZ29yaWVzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JJRVNfRElSRUNUT1JZID0gImNhdGVnb3JpZXNEaXJlY3RvcnkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWV9UTU9ERUxfS0VZID0gImNhdGVnb3J5VE1vZGVsS2V5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUllfRklMRU5BTUUgPSAiY2F0ZWdvcnlGaWxlTmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRVJfREVGSU5FRF9DQVRFR09SSUVTID0gInVzZXJEZWZpbmVkQ2F0ZWdvcmllcyI7Ci0KLSAgLy8gRGlzY292ZXJ5IFVSTCB1c2UgdHlwZQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNDT1ZFUllfVVJMX1RZUEUgPSAiYnVzaW5lc3NFbnRpdHkiOwotCi0gIC8vIFJlc3VsdHMgKE5PREVJRCkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFID0gIm5vZGVJZF9TZXJ2aWNlSW50ZXJmYWNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERUlEX1NFUlZJQ0UgPSAibm9kZUlkX1NlcnZpY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFSURfQlVTSU5FU1MgPSAibm9kZUlkX0J1c2luZXNzIjsKLQotICAvLyBSZWdGaW5kLi5BY3Rpb25zL1JlZ1B1Ymxpc2guLkFjdGlvbnMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUgPSAib3ZlcnJpZGVBZGRRdWVyeU5vZGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9OQU1FID0gInF1ZXJ5TmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lURU0gPSAicXVlcnlJdGVtIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfSVRFTV9RVUVSSUVTID0gLTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX0lURU1fQlVTSU5FU1NFUyA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX0lURU1fU0VSVklDRVMgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX1NUWUxFX1NJTVBMRSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX1NUWUxFX0FEVkFOQ0VEID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfU1RZTEVfVVVJRCA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEID0gImFkdmFuY2VkT3duZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCA9ICJhZHZhbmNlZFB1Ymxpc2hVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQgPSAiYWR2YW5jZWRVc2VySWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCA9ICJhZHZhbmNlZFBhc3N3b3JkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSA9ICJhZHZhbmNlZE5hbWVMYW5ndWFnZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUgPSAiYWR2YW5jZWROYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9UWVBFID0gImFkdmFuY2VkSWRlbnRpZmllclR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FID0gImFkdmFuY2VkSWRlbnRpZmllcktleU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSA9ICJhZHZhbmNlZElkZW50aWZpZXJLZXlWYWx1ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUgPSAiYWR2YW5jZWRDYXRlZ29yeVR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSA9ICJhZHZhbmNlZENhdGVnb3J5S2V5TmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSA9ICJhZHZhbmNlZENhdGVnb3J5S2V5VmFsdWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9ESVNDT1ZFUllVUkwgPSAiYWR2YW5jZWREaXNjb3ZlcnlVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9GSU5EUVVBTElGSUVSID0gImFkdmFuY2VkRmluZFF1YWxpZmllciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NPUlRfQllfTkFNRSA9ICJhZHZhbmNlZFNvcnRCeU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TT1JUX0JZX0RBVEUgPSAiYWR2YW5jZWRTb3J0QnlEYXRlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1NFQVJDSF9TRVQgPSAiYWR2YW5jZWRNYXhTZWFyY2hTZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9NQVhfU0VBUkNIX1NFVCA9IDEwMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMgPSAiYWR2YW5jZWRNYXhSZXN1bHRzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfTUFYX1JFU1VMVFMgPSAxMDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9TVFlMRV9CVVNJTkVTU0VTID0gInF1ZXJ5U3R5bGVCdXNpbmVzc2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUgPSAic2ltcGxlQnVzaW5lc3NOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQgPSAiYWR2YW5jZWRCdXNpbmVzc093bmVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMgPSAiYWR2YW5jZWRCdXNpbmVzc05hbWVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMgPSAiYWR2YW5jZWRCdXNpbmVzc0lkZW50aWZpZXJzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyA9ICJhZHZhbmNlZEJ1c2luZXNzQ2F0ZWdvcmllcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMgPSAiYWR2YW5jZWRCdXNpbmVzc0Rpc2NvdmVyeVVSTHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVMgPSAiYWR2YW5jZWRCdXNpbmVzc1NlcnZpY2VJbnRlcmZhY2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkgPSAiYWR2YW5jZWRCdXNpbmVzc1NlcnZpY2VJbnRlcmZhY2VzQ29weSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1RNT0RFTEJBRyA9ICJhZHZhbmNlZEJ1c2luZXNzVE1vZGVsQmFnIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRklORFFVQUxJRklFUlMgPSAiYWR2YW5jZWRCdXNpbmVzc0ZpbmRRdWFsaWZpZXJzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQgPSAiYWR2YW5jZWRCdXNpbmVzc01heFNlYXJjaFNldCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTID0gImFkdmFuY2VkQnVzaW5lc3NNYXhSZXN1bHRzIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9TVFlMRV9TRVJWSUNFUyA9ICJxdWVyeVN0eWxlU2VydmljZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FID0gInNpbXBsZVNlcnZpY2VOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9PV05FRCA9ICJhZHZhbmNlZFNlcnZpY2VPd25lZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MgPSAiYWR2YW5jZWRTZXJ2aWNlQnVzaW5lc3MiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFkgPSAiYWR2YW5jZWRTZXJ2aWNlQnVzaW5lc3NDb3B5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSID0gImFkdmFuY2VkU2VydmljZVNlcnZpY2VQcm92aWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMgPSAiYWR2YW5jZWRTZXJ2aWNlTmFtZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMgPSAiYWR2YW5jZWRTZXJ2aWNlQ2F0ZWdvcmllcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTID0gImFkdmFuY2VkU2VydmljZVNlcnZpY2VJbnRlcmZhY2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSA9ICJhZHZhbmNlZFNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTCA9ICJhZHZhbmNlZFNlcnZpY2VUTW9kZWwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTEJBRyA9ICJhZHZhbmNlZFNlcnZpY2VUTW9kZWxCYWciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0ZJTkRRVUFMSUZJRVJTID0gImFkdmFuY2VkU2VydmljZUZpbmRRdWFsaWZpZXJzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCA9ICJhZHZhbmNlZFNlcnZpY2VNYXhTZWFyY2hTZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9SRVNVTFRTID0gImFkdmFuY2VkU2VydmljZU1heFJlc3VsdHMiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyA9ICJxdWVyeVN0eWxlU2VydmljZUludGVyZmFjZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSA9ICJzaW1wbGVTZXJ2aWNlSW50ZXJmYWNlTmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFID0gImFkdmFuY2VkVXNlU2VydmljZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlU2VydmljZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0VfQ09QWSA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VTZXJ2aWNlQ29weSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0JVU0lORVNTX1NFUlZJQ0UgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlQnVzaW5lc3NTZXJ2aWNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfT1dORUQgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlT3duZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VJZGVudGlmaWVycyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlQ2F0ZWdvcmllcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0ZJTkRRVUFMSUZJRVJTID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZUZpbmRRdWFsaWZpZXJzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlTWF4U2VhcmNoU2V0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlTWF4UmVzdWx0cyI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FID0gImFkdmFuY2VkUmVnaXN0cnlOYW1lIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9VVUlEX0tFWSA9ICJ1dWlkS2V5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkgPSAidXVpZEJ1c2luZXNzS2V5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSA9ICJ1dWlkU2VydmljZUtleSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZID0gInV1aWRTZXJ2aWNlSW50ZXJmYWNlS2V5IjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX09VVFBVVF9TQVZFRF9UTU9ERUwgPSAic2F2ZWRUTW9kZWwiOwotCi0gIC8vIFN1YiBRdWVyaWVzOgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJRVUVSSUVTX1BST1BFUlRJRVMgPSAic3ViUXVlcmllc1Byb3BlcnRpZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJRVUVSWV9LRVkgPSAic3ViUXVlcnlLZXkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBORVdfU1VCUVVFUllfSU5JVElBVEVEID0gIm5ld1N1YlF1ZXJ5SW5pdGlhdGVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0gPSAibmV3U3ViUXVlcnlRdWVyeUl0ZW0iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRUxFQ1RFRF9OT0RFSURTID0gInNlbGVjdGVkTm9kZUlkcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlFVRVJZX0xJU1RfS0VZID0gInN1YlF1ZXJ5TGlzdEtleSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlFVRVJZX0xJU1RfSVRFTUlEID0gInN1YlF1ZXJ5TGlzdEl0ZW1JZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNIT1dfUkVTVUxUU19UQVJHRVQgPSAic2hvd1Jlc3VsdHNUYXJnZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJRVUVSWV9HRVQgPSAic3ViUXVlcnlHZXQiOwotCi0gIC8vIFJlZ1B1Ymxpc2guLkFjdGlvbnMgKHNvbWUgY29uc3RhbnRzIGZyb20gdGhlIFJlZ0ZpbmQuLi5BY3Rpb25zIHdpbGwgYmUgcmV1c2VkLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04gPSAic2ltcGxlQnVzaW5lc3NEZXNjcmlwdGlvbiI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UgPSAiYWR2YW5jZWREZXNjcmlwdGlvbkxhbmd1YWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04gPSAiYWR2YW5jZWREZXNjcmlwdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyA9ICJhZHZhbmNlZEJ1c2luZXNzRGVzY3JpcHRpb25zIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9XU0RMX1VSTCA9ICJ3c2RsVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMID0gInNpbXBsZVNlcnZpY2VJbnRlcmZhY2VXU0RMVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OID0gInNpbXBsZVNlcnZpY2VJbnRlcmZhY2VEZXNjcmlwdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZVdTRExVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlRGVzY3JpcHRpb25zIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyA9ICJzaW1wbGVTZXJ2aWNlQnVzaW5lc3MiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU19DT1BZID0gInNpbXBsZVNlcnZpY2VCdXNpbmVzc0NvcHkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSID0gInNpbXBsZVNlcnZpY2VTZXJ2aWNlUHJvdmlkZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCA9ICJzaW1wbGVTZXJ2aWNlV1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OID0gInNpbXBsZVNlcnZpY2VEZXNjcmlwdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwgPSAiYWR2YW5jZWRTZXJ2aWNlV1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TID0gImFkdmFuY2VkU2VydmljZURlc2NyaXB0aW9ucyI7Ci0KLSAgLy8gV1NETCBCcm93c2VyCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1QgPSAicHJvamVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfVFlQRSA9ICJ3c2RsVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTRExfVFlQRV9TRVJWSUNFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCA9ICJ3ZWJQcm9qZWN0V1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0ZBVk9SSVRFX1dTRExfVVJMID0gImZhdm9yaXRlV1NETFVSTCI7Ci0KLSAgLy8gRGV0YWlscwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMQVRFU1RfT0JKRUNUID0gImxhdGVzdE9iamVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0NPVkVSWVVSTF9NT0RJRklFRCA9ICJkaXNjb3ZlcnlVUkxNb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0NPVkVSWVVSTF9WSUVXSUQgPSAiZGlzY292ZXJ5VVJMVmlld0lkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9NT0RJRklFRCA9ICJuYW1lTW9kaWZpZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX1ZJRVdJRCA9ICJidXNpbmVzc1ZpZXdJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NSSVBUSU9OX01PRElGSUVEID0gImRlc2NyaXB0aW9uTW9kaWZpZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERVNDUklQVElPTl9WSUVXSUQgPSAiZGVzY3JpcHRpb25WaWV3SWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElGSUVSX01PRElGSUVEID0gImlkZW50aWZpZXJNb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElERU5USUZJRVJfVklFV0lEID0gImlkZW50aWZpZXJWaWV3SWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWV9NT0RJRklFRCA9ICJjYXRlZ29yeU1vZGlmaWVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUllfVklFV0lEID0gImNhdGVnb3J5Vmlld0lkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9VUkxfTU9ESUZJRUQgPSAid3NkbFVSTE1vZGlmaWVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSF9BQ1RJT04gPSAicHVibGlzaEFjdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExBVEVTVF9CVVNJTkVTUyA9ICJsYXRlc3RCdXNpbmVzcyI7Ci0KLSAgLy8gUmVmcmVzaCBhY3Rpb24KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGUkVTSF9OT0RFID0gInJlZnJlc2hOb2RlIjsKLQotICAvLyBNYW5hZ2UgUHVibGlzaGVyQXNzZXJ0aW9ucwotICAvLyAiVG8iIG1lYW5zIGZyb20gYW5vdGhlciBidXNpbmVzcyB0byBteSBvd25pbmcgYnVzaW5lc3MKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElSRUNUSU9OX1RPID0gMDsKLSAgLy8gIkZyb20iIG1lYW5zIGZyb20gbXkgb3duaW5nIGJ1c2luZXNzIHRvIGFub3RoZXIgYnVzaW5lc3MKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElSRUNUSU9OX0ZST00gPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQgPSAicHVibGlzaGVyQXNzZXJ0aW9uc1ZpZXdJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCA9ICJwdWJsaXNoZXJBc3NlcnRpb25zU2VsZWN0ZWRCdXNJRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hFUl9BU1NFUlRJT05TX0RJUkVDVElPTiA9ICJwdWJsaXNoZXJBc3NlcnRpb25zRGlyZWN0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TID0gInF1ZXJ5SW5wdXRBZGRQdWJsaXNoZXJBc3NlcnRpb25zIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TX0NPUFkgPSAicXVlcnlJbnB1dEFkZFB1Ymxpc2hlckFzc2VydGlvbnNDb3B5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfRVhJU1RJTkdfUFVCTElTSEVSX0FTU0VSVElPTlMgPSAicXVlcnlJbnB1dEV4aXN0aW5nUHVibGlzaGVyQXNzZXJ0aW9ucyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEUgPSAicHVibGlzaGVyQXNzZXJ0aW9uc1R5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFX1BBUkVOVF9DSElMRCA9ICJwYXJlbnQtY2hpbGQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFX1BFRVJfVE9fUEVFUiA9ICJwZWVyLXBlZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFX0lERU5USVRZID0gImlkZW50aXR5IjsKLQotICAvLyBNYW5hZ2UgUmVmZXJlbmNlZCBTZXJ2aWNlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9SRUZFUkVOQ0VEX1NFUlZJQ0VTID0gInJlZmVyZW5jZWRTZXJ2aWNlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NFUlZJQ0VTID0gInNlcnZpY2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OID0gIm1hbmFnZWRSZWZlcmVuY2VkU2VydmljZXNPcGVyYXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT05fQUREID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OX1JFTU9WRSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRURfU0VSVklDRV9TRUxFQ1RfU1RBVEUgPSAicmVmZXJlbmNlZFNlcnZpY2VTZWxlY3RTdGF0ZSI7Ci0gIAotICAvLyBSZXNpemVVRERJRnJhbWVBY3Rpb24KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UID0gImZyYW1lc2V0Q29sc1BlcnNwZWN0aXZlQ29udGVudCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIgPSAiZnJhbWVzZXRSb3dzQWN0aW9uc0NvbnRhaW5lciI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElGcmFtZU5hbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElGcmFtZU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZDBiNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJRnJhbWVOYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgVURESUZyYW1lTmFtZXMKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX0NPTlRBSU5FUiA9ICJ1ZGRpX25hdmlnYXRvcl9jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOQVZJR0FUT1JfVE9PTEJBUiA9ICJ1ZGRpX25hdmlnYXRvcl90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX0NPTlRFTlQgPSAidWRkaV9uYXZpZ2F0b3JfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEFDVElPTlNfQ09OVEFJTkVSID0gInVkZGlfYWN0aW9uc19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0NPTlRBSU5FUiA9ICJ1ZGRpX3Byb3BlcnRpZXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19UT09MQkFSID0gInVkZGlfcHJvcGVydGllc190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19DT05URU5UID0gInVkZGlfcHJvcGVydGllc19jb250ZW50IjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFVTX0NPTlRBSU5FUiA9ICJ1ZGRpX3N0YXR1c19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTVEFUVVNfVE9PTEJBUiA9ICJ1ZGRpX3N0YXR1c190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFVTX0NPTlRFTlQgPSAidWRkaV9zdGF0dXNfY29udGVudCI7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0FURUdPUklFU19XT1JLQVJFQSA9ICJjYXRlZ29yaWVzX3dvcmthcmVhIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0FURUdPUklFU19UT09MQkFSID0gImNhdGVnb3JpZXNfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENBVEVHT1JJRVNfQ09OVEVOVCA9ICJjYXRlZ29yaWVzX2NvbnRlbnQiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJTW9kZWxDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESU1vZGVsQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlM2M5YTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJTW9kZWxDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFVERElNb2RlbENvbnN0YW50cwotewotICAvLyBSZWdpc3RyaWVzIHVuZGVyIFVERElNYWluLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUkVHSVNUUklFUyA9ICJyZWdpc3RyaWVzIjsKLQotICAvLyBFeGVjdXRlZCBRdWVyaWVzIGZvbGRlciB1bmRlciBhIHJlZ2lzdHJ5LgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUVVFUklFU19QQVJFTlQgPSAicXVlcmllc1BhcmVudCI7Ci0KLSAgLy8gUHVibGlzaGVkIEJ1c2luZXNzZXMgZm9sZGVyIHVuZGVyIGEgcmVnaXN0cnkuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9QVUJMSVNIRURfQlVTSU5FU1NFU19QQVJFTlQgPSAicHVibGlzaGVkQnVzaW5lc3Nlc1BhcmVudCI7Ci0KLSAgLy8gUHVibGlzaGVkIFNlcnZpY2VzIGZvbGRlciB1bmRlciBhIHJlZ2lzdHJ5LgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUFVCTElTSEVEX1NFUlZJQ0VTX1BBUkVOVCA9ICJwdWJsaXNoZWRTZXJ2aWNlc1BhcmVudCI7Ci0KLSAgLy8gUHVibGlzaGVkIFNlcnZpY2UgaW50ZXJmYWNlcyBmb2xkZXIgdW5kZXIgYSByZWdpc3RyeS4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1BVQkxJU0hFRF9TRVJWSUNFX0lOVEVSRkFDRVNfUEFSRU5UID0gInB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzUGFyZW50IjsKLQotICAvLyBRdWVyaWVzIHVuZGVyIHRoZSBRdWVyaWVzIGZvbGRlci4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1FVRVJJRVMgPSAicXVlcmllcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOSVRJQUxfUkVTVUxUUyA9ICJpbml0aWFsUmVzdWx0cyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX1RZUEUgPSAicXVlcnlUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VUID0gInN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQiOwotCi0gIC8vIE9iamVjdHMgdW5kZXIgYSBRdWVyeSBub2RlLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUVVFUllfUkVTVUxUUyA9ICJxdWVyeVJlc3VsdHMiOwotCi0gIC8vIENhdGVnb3JpZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1NVQkNBVEVHT1JJRVMgPSAic3ViQ2F0ZWdvcmllcyI7Ci0KLSAgLy8gUHVibGlzaGVkIGl0ZW1zIGluc2lkZSB0aGUgUHVibGlzaGVkIGl0ZW1zIGZvbGRlci4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1BVQkxJU0hFRF9JVEVNUyA9ICJwdWJsaXNoZWRJdGVtcyI7Ci0KLSAgLy8gQnVzaW5lc3NlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJU19CVVNJTkVTU19PV05FRCA9ICJpc0J1c2luZXNzT3duZWQiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9BYnN0cmFjdFVERElFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0Fic3RyYWN0VURESUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNiNWQwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0Fic3RyYWN0VURESUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFVERElFbGVtZW50IGV4dGVuZHMgVHJlZUVsZW1lbnQKLXsKLSAgcHVibGljIEFic3RyYWN0VURESUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRyZWVFbGVtZW50IGdldFBhcmVudEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGdldFBhcmVudEVsZW1lbnQodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVHJlZUVsZW1lbnQgZ2V0UGFyZW50RWxlbWVudChUcmVlRWxlbWVudCBjaGlsZCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBjaGlsZC5nZXRFbGVtZW50cyhNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGlmIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIChUcmVlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUmVnaXN0cnlFbGVtZW50IGdldFJlZ2lzdHJ5RWxlbWVudCgpCi0gIHsKLSAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJlZ2lzdHJ5RWxlbWVudCkKLSAgICAgIHJldHVybiAoUmVnaXN0cnlFbGVtZW50KXRoaXM7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IHRoaXM7Ci0gICAgICBUcmVlRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gZ2V0UGFyZW50RWxlbWVudChjaGlsZEVsZW1lbnQpOwotICAgICAgd2hpbGUgKHBhcmVudEVsZW1lbnQgIT0gbnVsbCAmJiBwYXJlbnRFbGVtZW50ICE9IGNoaWxkRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBSZWdpc3RyeUVsZW1lbnQpCi0gICAgICAgICAgcmV0dXJuIChSZWdpc3RyeUVsZW1lbnQpcGFyZW50RWxlbWVudDsKLSAgICAgICAgY2hpbGRFbGVtZW50ID0gcGFyZW50RWxlbWVudDsKLSAgICAgICAgcGFyZW50RWxlbWVudCA9IGdldFBhcmVudEVsZW1lbnQoY2hpbGRFbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9CdXNpbmVzc0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQnVzaW5lc3NFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZTYxM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9CdXNpbmVzc0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLQotcHVibGljIGNsYXNzIEJ1c2luZXNzRWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBCdXNpbmVzc0VudGl0eSBiZV87Ci0gIHByaXZhdGUgTGlzdE1hbmFnZXIgcHVibGlzaGVyQXNzZXJ0aW9uc187Ci0gIAotICBwdWJsaWMgQnVzaW5lc3NFbGVtZW50KEJ1c2luZXNzRW50aXR5IGJlLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIoYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSxtb2RlbCk7Ci0gICAgYmVfID0gYmU7Ci0gICAgc2V0S2V5KGJlXy5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICBwdWJsaXNoZXJBc3NlcnRpb25zXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgQnVzaW5lc3NFbnRpdHkgZ2V0QnVzaW5lc3NFbnRpdHkoKQotICB7Ci0gICAgcmV0dXJuIGJlXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0QnVzaW5lc3NFbnRpdHkoQnVzaW5lc3NFbnRpdHkgYmUpCi0gIHsKLSAgICBiZV8gPSBiZTsKLSAgICBzZXRLZXkoYmVfLmdldEJ1c2luZXNzS2V5KCkpOwotICB9Ci0KLSAgcHVibGljIExpc3RNYW5hZ2VyIGdldFB1Ymxpc2hlckFzc2VydGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIHB1Ymxpc2hlckFzc2VydGlvbnNfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaGVyQXNzZXJ0aW9ucyhMaXN0TWFuYWdlciBsaXN0TWFuYWdlcikKLSAgewotICAgIHB1Ymxpc2hlckFzc2VydGlvbnNfID0gbGlzdE1hbmFnZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQ2F0ZWdvcnlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0NhdGVnb3J5RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDdmM2ExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQ2F0ZWdvcnlFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBDYXRlZ29yeUVsZW1lbnQgZXh0ZW5kcyBBYnN0cmFjdFVERElFbGVtZW50Ci17Ci0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2UgY2F0ZWdvcnlfOwotCi0gIHB1YmxpYyBDYXRlZ29yeUVsZW1lbnQoU3RyaW5nIG5hbWUsS2V5ZWRSZWZlcmVuY2UgY2F0ZWdvcnksTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICBjYXRlZ29yeV8gPSBjYXRlZ29yeTsKLSAgICBzYXZlQ2F0ZWdvcnlQcm9wZXJ0aWVzKCk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgc2F2ZUNhdGVnb3J5UHJvcGVydGllcygpCi0gIHsKLSAgICBpZiAoY2F0ZWdvcnlfICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGtleU5hbWUgPSBjYXRlZ29yeV8uZ2V0S2V5TmFtZSgpOwotICAgICAgaWYgKGtleU5hbWUgIT0gbnVsbCkKLSAgICAgICAgc2V0TmFtZShrZXlOYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgS2V5ZWRSZWZlcmVuY2UgZ2V0Q2F0ZWdvcnkoKQotICB7Ci0gICAgcmV0dXJuIGNhdGVnb3J5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmFtZUZvclRyZWUoKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG5hbWVGb3JUcmVlID0gbmV3IFN0cmluZ0J1ZmZlcigiWyIpOwotICAgIG5hbWVGb3JUcmVlLmFwcGVuZChjYXRlZ29yeV8uZ2V0S2V5VmFsdWUoKSkuYXBwZW5kKCJdICIpLmFwcGVuZChjYXRlZ29yeV8uZ2V0S2V5TmFtZSgpKTsKLSAgICByZXR1cm4gbmFtZUZvclRyZWUudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHVwZGF0ZUNhdGVnb3J5KFN0cmluZyBrZXlOYW1lLFN0cmluZyBrZXlWYWx1ZSxTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgY2F0ZWdvcnlfLnNldEtleU5hbWUoa2V5TmFtZSk7Ci0gICAgY2F0ZWdvcnlfLnNldEtleVZhbHVlKGtleVZhbHVlKTsKLSAgICBjYXRlZ29yeV8uc2V0VE1vZGVsS2V5KHRNb2RlbEtleSk7Ci0gICAgc2F2ZUNhdGVnb3J5UHJvcGVydGllcygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0NhdGVnb3J5TW9kZWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQ2F0ZWdvcnlNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjk2NjU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQ2F0ZWdvcnlNb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIENhdGVnb3J5TW9kZWwgZXh0ZW5kcyBCYXNpY01vZGVsCi17Ci0gIHByaXZhdGUgU2VydmxldENvbnRleHQgYXBwbGljYXRpb25fOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0RGF0YUZpbGVfOwotICBwcml2YXRlIEhhc2h0YWJsZSBjYXRlZ29yeUVsZW1lbnRzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY29sdW1uRGVsaW1pdGVyXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc3RyaW5nRGVsaW1pdGVyXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2F0ZWdvcnlLZXlfOwotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tlZF87Ci0gIHByaXZhdGUgU3RyaW5nIGRpc3BsYXlOYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgdE1vZGVsS2V5XzsKLSAgcHJpdmF0ZSBUaHJvd2FibGUgZXJyb3JFeGNlcHRpb25fOwotICAKLSAgLy8gUmV0dXJuIGNvZGVzIGZvciBsb2FkaW5nIGFuZCBzYXZpbmcgY2F0ZWdvcnkgZGF0YS4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE9QRVJBVElPTl9TVUNDRVNTRlVMID0gMHgwMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIEVSUk9SX0ZJTEUgPSAweDAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRVJST1JfU0VDVVJJVFkgPSAweDAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRVJST1JfRU5DT0RJTkcgPSAweDAzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRVJST1JfSU8gPSAweDA0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRVJST1JfQ0FURUdPUllfS0VZID0gMHgwNTsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGRlZmF1bHRDb2x1bW5EZWxpbWl0ZXJfID0gIiMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBkZWZhdWx0U3RyaW5nRGVsaW1pdGVyXyA9ICJcIiI7Ci0gIAotICBwdWJsaWMgQ2F0ZWdvcnlNb2RlbCgpCi0gIHsKLSAgICBzdXBlcigiY2F0ZWdvcmllcyIpOwotICAgIGFwcGxpY2F0aW9uXyA9IG51bGw7Ci0JZGVmYXVsdERhdGFGaWxlXyA9IG51bGw7Ci0gICAgY29sdW1uRGVsaW1pdGVyXyA9IGRlZmF1bHRDb2x1bW5EZWxpbWl0ZXJfOwotICAgIHN0cmluZ0RlbGltaXRlcl8gPSBkZWZhdWx0U3RyaW5nRGVsaW1pdGVyXzsKLSAgICBjYXRlZ29yeUVsZW1lbnRzXyA9IG51bGw7Ci0gICAgY2F0ZWdvcnlLZXlfID0gbnVsbDsKLSAgICBjaGVja2VkXyA9IHRydWU7Ci0gICAgZGlzcGxheU5hbWVfID0gbnVsbDsKLSAgICB0TW9kZWxLZXlfID0gbnVsbDsKLSAgICBlcnJvckV4Y2VwdGlvbl8gPSBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogQ2F0ZWdvcnlNb2RlbHMgbG9hZCB0aGVpciBkYXRhIGZyb20gdGhlIGZpbGUgbmFtZWQgdmlhIHRoZQotICAgKiB7QGxpbmsgI3NldERlZmF1bHREYXRhRmlsZShTdHJpbmcpfSBtZXRob2QuIFRoZSBkYXRhIGZpbGUKLSAgICogbmFtZSBpcyBpbnRlcnByZXR0ZWQgYXMgZWl0aGVyIGEgcGh5c2ljYWwgcGF0aG5hbWUgb3IgYQotICAgKiBjb250ZXh0LXJvb3QgcmVsYXRpdmUgcGF0aG5hbWUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCi0gICAqIHNlcnZsZXQgY29udGV4dCBvciAiYXBwbGljYXRpb24iIGlzIG51bGwgKGRlZmF1bHQpIG9yIG5vdC4KLSAgICogQHBhcmFtIGFwcGxpY2F0aW9uIFRoZSBhcHBsaWNhdGlvbiBjb250ZXh0LCBudWxsIGJ5IGRlZmF1bHQuCi0gICAqIFZhbHVlIGNhbiBiZSB0aGUgU2VydmxldENvbnRleHQgb2YgdGhlIFdTRXhwbG9yZXIgb3IgbnVsbC4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNlcnZsZXRDb250ZXh0KFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICB7Ci0JYXBwbGljYXRpb25fID0gYXBwbGljYXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldERlZmF1bHREYXRhRmlsZShTdHJpbmcgZGVmYXVsdERhdGFGaWxlKQotICB7Ci0gICAgZGVmYXVsdERhdGFGaWxlXyA9IGRlZmF1bHREYXRhRmlsZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENhdGVnb3J5S2V5KFN0cmluZyBjYXRlZ29yeUtleSkKLSAgewotICAgIGNhdGVnb3J5S2V5XyA9IGNhdGVnb3J5S2V5OwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldENhdGVnb3J5S2V5KCkKLSAgewotICAgIHJldHVybiBjYXRlZ29yeUtleV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENvbHVtbkRlbGltaXRlcihTdHJpbmcgY29sdW1uRGVsaW1pdGVyKQotICB7Ci0gICAgY29sdW1uRGVsaW1pdGVyXyA9IGNvbHVtbkRlbGltaXRlcjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRDb2x1bW5EZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbHVtbkRlbGltaXRlcl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN0cmluZ0RlbGltaXRlcihTdHJpbmcgc3RyaW5nRGVsaW1pdGVyKQotICB7Ci0gICAgc3RyaW5nRGVsaW1pdGVyXyA9IHN0cmluZ0RlbGltaXRlcjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdHJpbmdEZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuIHN0cmluZ0RlbGltaXRlcl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGVuYWJsZUNoZWNrZWQoYm9vbGVhbiBpc0NoZWNrZWQpCi0gIHsKLSAgICBjaGVja2VkXyA9IGlzQ2hlY2tlZDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNDaGVja2VkKCkKLSAgewotICAgIHJldHVybiBjaGVja2VkXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0RGlzcGxheU5hbWUoU3RyaW5nIGRpc3BsYXlOYW1lKQotICB7Ci0gICAgZGlzcGxheU5hbWVfID0gZGlzcGxheU5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGRpc3BsYXlOYW1lXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0VE1vZGVsS2V5KFN0cmluZyB0TW9kZWxLZXkpCi0gIHsKLSAgICB0TW9kZWxLZXlfID0gdE1vZGVsS2V5OwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRNb2RlbEtleSgpCi0gIHsKLSAgICByZXR1cm4gdE1vZGVsS2V5XzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNEYXRhTG9hZGVkKCkKLSAgewotICAgIHJldHVybiAoY2F0ZWdvcnlFbGVtZW50c18gIT0gbnVsbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBUaHJvd2FibGUgZ2V0RXJyb3JFeGNlcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIGVycm9yRXhjZXB0aW9uXzsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzRW5jbG9zZWRJblF1b3RlcyhTdHJpbmcgc3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIHN0cmluZy5zdGFydHNXaXRoKCJcIiIpICYmIHN0cmluZy5lbmRzV2l0aCgiXCIiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGxvYWRGcm9tVGF4b25vbXkoVGF4b25vbXkgdGF4b25vbXkpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IHRheG9ub215LmdldE5hbWUoKTsKLSAgICBDYXRlZ29yeUVsZW1lbnQgcm9vdCA9IG5ldyBDYXRlZ29yeUVsZW1lbnQobmFtZSxudWxsLHRoaXMpOwotICAgIHNldFJvb3RFbGVtZW50KHJvb3QpOwotICAgIGNhdGVnb3J5RWxlbWVudHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSB0YXhvbm9teS5nZXRDYXRlZ29yeSgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgYWRkQ2F0ZWdvcnkocm9vdCwgKENhdGVnb3J5KWl0Lm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZENhdGVnb3J5KENhdGVnb3J5RWxlbWVudCBwYXJlbnQsIENhdGVnb3J5IGNhdGVnb3J5KQotICB7Ci0gICAgU3RyaW5nIGtleU5hbWUgPSBjYXRlZ29yeS5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGtleVZhbHVlID0gY2F0ZWdvcnkuZ2V0Q29kZSgpOwotICAgIENhdGVnb3J5RWxlbWVudCBjaGlsZCA9IG5ldyBDYXRlZ29yeUVsZW1lbnQoa2V5TmFtZSxuZXcgS2V5ZWRSZWZlcmVuY2Uoa2V5TmFtZSxrZXlWYWx1ZSx0TW9kZWxLZXlfKSx0aGlzKTsKLSAgICBwYXJlbnQuY29ubmVjdChjaGlsZCxVRERJTW9kZWxDb25zdGFudHMuUkVMX1NVQkNBVEVHT1JJRVMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBjYXRlZ29yeUVsZW1lbnRzXy5wdXQoa2V5VmFsdWUsIGNoaWxkKTsgICAKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gY2F0ZWdvcnkuZ2V0Q2F0ZWdvcnkoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIGFkZENhdGVnb3J5KGNoaWxkLCAoQ2F0ZWdvcnkpaXQubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYnl0ZSBsb2FkRnJvbURlZmF1bHREYXRhRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoZGVmYXVsdERhdGFGaWxlXyA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCk7Ci0JICBCdWZmZXJlZFJlYWRlciBiciA9IG51bGw7Ci0JICBpZiAoYXBwbGljYXRpb25fID09IG51bGwpCi0JCWJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKGRlZmF1bHREYXRhRmlsZV8pLEhUTUxVdGlscy5VVEY4X0VOQ09ESU5HKSk7Ci0JICBlbHNlCi0JICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihhcHBsaWNhdGlvbl8uZ2V0UmVzb3VyY2VBc1N0cmVhbShkZWZhdWx0RGF0YUZpbGVfKSxIVE1MVXRpbHMuVVRGOF9FTkNPRElORykpOwotICAgICAgcmV0dXJuIGxvYWREYXRhKGJyKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICByZXR1cm4gRVJST1JfRklMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybiBFUlJPUl9TRUNVUklUWTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuIEVSUk9SX0VOQ09ESU5HOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJ5dGUgbG9hZEZyb21EZWxpbWl0ZXJGaWxlKCkKLSAgewotICAgIC8vIEdldCB0aGUgYXNzb2NpYXRlZCAucHJvcGVydGllcyBmaWxlIGFuZCBzZXQgdGhlIGRlbGltaXRlcnMuIFRoZSBkZWZhdWx0RGF0YUZpbGVfIGlzIHNldCB0byB0aGUgZGVsaW1pdGVyIGZpbGUgaW4gdGhpcyBjYXNlLgotICAgIC8vIFRoZSBwcm9wZXJ0aWVzIGZpbGUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBrZXlzOgotICAgIC8vIHdzYWQuZGF0YUZpbGUgLSBsb2NhdGlvbiBvZiB0aGUgY2F0ZWdvcnkgZGF0YSBmaWxlLgotICAgIC8vIHdzYWQuY2hlY2tlZCAtIHdoZXRoZXIgb3Igbm90IHRoZSBjYXRlZ29yeSBpcyBjaGVja2VkLgotICAgIC8vIHdzYWQubmFtZSAtIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNhdGVnb3J5LgotICAgIC8vIGNvbHVtbi5kZWxpbWl0ZXIgLSB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB1c2VkIGZvciBzZXBhcmF0aW5nIGNvbHVtbnMuCi0gICAgLy8gc3RyaW5nLmRlbGltaXRlciAtIHRoZSBkZWxpbWl0ZXIgY2hhcmFjdGVyIHVzZWQgdG8gZW5jYXBzdWxhdGUgZGF0YSBzdWNoIHRoYXQgY29sdW1uIGRlbGltaXRlciBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIGRhdGEuCi0gICAgdHJ5Ci0gICAgewotICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgIElucHV0U3RyZWFtIGZpbiA9IG51bGw7Ci0JICBpZiAoYXBwbGljYXRpb25fID09IG51bGwpCi0JICAgIGZpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZGVmYXVsdERhdGFGaWxlXyk7Ci0JICBlbHNlCi0JCWZpbiA9IGFwcGxpY2F0aW9uXy5nZXRSZXNvdXJjZUFzU3RyZWFtKGRlZmF1bHREYXRhRmlsZV8pOwotICAgICAgcC5sb2FkKGZpbik7Ci0gICAgICBmaW4uY2xvc2UoKTsKLSAgICAgIGNvbHVtbkRlbGltaXRlcl8gPSBwLmdldFByb3BlcnR5KCJjb2x1bW4uZGVsaW1pdGVyIik7Ci0gICAgICBzdHJpbmdEZWxpbWl0ZXJfID0gcC5nZXRQcm9wZXJ0eSgic3RyaW5nLmRlbGltaXRlciIpOwotICAgICAgZGVmYXVsdERhdGFGaWxlXyA9IHAuZ2V0UHJvcGVydHkoIndzYWQuZGF0YUZpbGUiKTsKLSAgICAgIHJldHVybiBsb2FkRnJvbURlZmF1bHREYXRhRmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybiBFUlJPUl9GSUxFOwotICAgIH0KLSAgICBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuIEVSUk9SX1NFQ1VSSVRZOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuIEVSUk9SX0lPOwotICAgIH0gICAgICAgIAotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYnl0ZSBsb2FkRGF0YShCdWZmZXJlZFJlYWRlciBicikKLSAgewotICAgIGVycm9yRXhjZXB0aW9uXyA9IG51bGw7Ci0gICAgQ2F0ZWdvcnlFbGVtZW50IHJvb3RFbGVtZW50ID0gbnVsbDsKLSAgICBjYXRlZ29yeUVsZW1lbnRzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBieXRlIHJldHVybkNvZGUgPSBPUEVSQVRJT05fU1VDQ0VTU0ZVTDsKLSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNoYXIgY29sdW1uRGVsaW1pdGVyQ2hhciA9IGNvbHVtbkRlbGltaXRlcl8uY2hhckF0KDApOwotICAgICAgY2hhciBzdHJpbmdEZWxpbWl0ZXJDaGFyID0gc3RyaW5nRGVsaW1pdGVyXy5jaGFyQXQoMCk7Ci0gICAgICBWZWN0b3IgdmFsdWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgd2hpbGUoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBsaW5lTnVtYmVyKys7Ci0gICAgICAgIC8vIElnbm9yZSBibGFuayBsaW5lcy4KLSAgICAgICAgaWYgKGxpbmUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgIGludCBsZW5ndGggPSBsaW5lLmxlbmd0aCgpOwotICAgICAgICBib29sZWFuIGluU3RyaW5nRGVsaW1pdGVycyA9IGZhbHNlOwotICAgICAgICB2YWx1ZXMucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGN1cnJlbnRUb2tlbiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgY2hhciBjdXJyZW50Q2hhciA9IGxpbmUuY2hhckF0KGluZGV4KTsKLSAgICAgICAgICBpZiAoaW5TdHJpbmdEZWxpbWl0ZXJzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEluIHF1b3RlIHNvIGlnbm9yaW5nIGRlbGltaXRlcnMKLSAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhciA9PSBzdHJpbmdEZWxpbWl0ZXJDaGFyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggLSAxKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gY3VycmVudENoYXIgY291bGQgYmUgYSBjbG9zaW5nIHN0cmluZyBkZWxpbWl0ZXIgb3IgZXNjYXBlCi0gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBsb29rIGFoZWFkIHRvIGJlIHN1cmUuLi4KLSAgICAgICAgICAgICAgICBjaGFyIGZvbGxvd2luZ0NoYXIgPSBsaW5lLmNoYXJBdChpbmRleCArIDEpOwotICAgICAgICAgICAgICAgIGlmIChmb2xsb3dpbmdDaGFyID09IHN0cmluZ0RlbGltaXRlckNoYXIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYW4gZXNjYXBlZCBxdW90ZQotICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuLmFwcGVuZChzdHJpbmdEZWxpbWl0ZXJDaGFyKTsKLSAgICAgICAgICAgICAgICAgIC8vIGp1bXAgZm9yd2FyZCB0d28gY2hhcmFjdGVycy4KLSAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBUaGVyZSB3YXMgYSBjbG9zaW5nIHN0cmluZyBkZWxpbWl0ZXIuLi5qdW1wIGZvcndhcmQgdG8gdGhlIG5leHQgZGVsaW1pdGVyCi0gICAgICAgICAgICAgICAgICBpblN0cmluZ0RlbGltaXRlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIC8vbG9vayBmb3IgdGhlIG5leHQgY29sdW1uIGRlbGltaXRlciBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICAgIGludCBuZXh0RGVsaW1pdGVyID0gbGluZS5pbmRleE9mKGNvbHVtbkRlbGltaXRlckNoYXIsIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgIGlmIChuZXh0RGVsaW1pdGVyID09IC0xKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSB3ZXJlIG5vIG1vcmUgZGVsaW1pdGVycyBzbyBicmVhayBvdXQgb2YgdGhlIGxvb3AKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hZGRFbGVtZW50KGN1cnJlbnRUb2tlbi50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgLy92YWx1ZXNbdG9rZW5Db3VudCsrXSA9IGN1cnJlbnRUb2tlbi50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4uc2V0TGVuZ3RoKDApOwotICAgICAgICAgICAgICAgICAgICBpblN0cmluZ0RlbGltaXRlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBuZXh0RGVsaW1pdGVyICsgMTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgYW5kIGl0J3MgYSBjbG9zaW5nIHN0cmluZyBkZWxpbWl0ZXIuCi0gICAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgICAgICBpblN0cmluZ0RlbGltaXRlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjdXJyZW50VG9rZW4uYXBwZW5kKGN1cnJlbnRDaGFyKTsKLSAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoY3VycmVudENoYXIgPT0gY29sdW1uRGVsaW1pdGVyQ2hhcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGVyZSB3YXMgYSBkZWxpbWl0ZXIgb3V0c2lkZSBvZiBxdW90ZXMKLSAgICAgICAgICAgIHZhbHVlcy5hZGRFbGVtZW50KGN1cnJlbnRUb2tlbi50b1N0cmluZygpKTsKLSAgICAgICAgICAgIC8vdmFsdWVzW3Rva2VuQ291bnQrK10gPSBjdXJyZW50VG9rZW4udG9TdHJpbmcoKTsKLSAgICAgICAgICAgIGN1cnJlbnRUb2tlbi5zZXRMZW5ndGgoMCk7Ci0gICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhciA9PSBzdHJpbmdEZWxpbWl0ZXJDaGFyKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEEgcXVvdGUgYXBwZWFyaW5nIG91dHNpZGUgb2YgcXVvdGVzIG11c3QgYmUgYSBvcGVuaW5nIHF1b3RlCi0gICAgICAgICAgICBpblN0cmluZ0RlbGltaXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgbm9ybWFsIGNoYXIgb3V0c2lkZSBvZiBxdW90ZXMKLSAgICAgICAgICAgIGN1cnJlbnRUb2tlbi5hcHBlbmQoY3VycmVudENoYXIpOwotICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRXhwZWN0IHRva2VuIGNvdW50IHRvIGJlIHZhbHVlcy5sZW5ndGggLSAxIGF0IHRoaXMgcG9pbnQgaWYgZXZlcnl0aGluZyBpcyBvawotICAgICAgICBpZiAoaW5TdHJpbmdEZWxpbWl0ZXJzKQotICAgICAgICB7Ci0gICAgICAgICAgYnIuY2xvc2UoKTsKLSAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24obGluZSxsaW5lTnVtYmVyKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQWRkIHRoZSBmaW5hbCB0b2tlbi4KLSAgICAgICAgdmFsdWVzLmFkZEVsZW1lbnQoY3VycmVudFRva2VuLnRvU3RyaW5nKCkpOwotCi0gICAgICAgIC8vIDMgY29sdW1ucyBmb3JtYXQuIEZyb20gbGVmdCB0byByaWdodCwgdGhlc2UgYXJlOgotICAgICAgICAvLyAxKSBjYXRlZ29yeSdzIGtleSB2YWx1ZQotICAgICAgICAvLyAyKSBjYXRlZ29yeSdzIGtleSBuYW1lCi0gICAgICAgIC8vIDMpIGNhdGVnb3J5J3MgcGFyZW50IGtleSB2YWx1ZQotICAgICAgICAvLyBDb252ZXJ0IHRvIDQgY29sdW1ucyBmb3JtYXQuCi0gICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpID09IDMpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY2F0ZWdvcnlLZXlfICE9IG51bGwpCi0gICAgICAgICAgICB2YWx1ZXMuaW5zZXJ0RWxlbWVudEF0KGNhdGVnb3J5S2V5XywgMCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWVzLmluc2VydEVsZW1lbnRBdCh0TW9kZWxLZXlfLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQgY29sdW1ucyBmb3JtYXQuIEZyb20gbGVmdCB0byByaWdodCwgdGhlc2UgYXJlOgotICAgICAgICAvLyAxKSB0eXBlIG9mIGNhdGVnb3J5IChjYXRlZ29yeUtleSkKLSAgICAgICAgLy8gMikgY2F0ZWdvcnkncyBrZXkgdmFsdWUKLSAgICAgICAgLy8gMykgY2F0ZWdvcnkncyBrZXkgbmFtZQotICAgICAgICAvLyA0KSBjYXRlZ29yeSdzIHBhcmVudCBrZXkgdmFsdWUKLSAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gNCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBjYXRlZ29yeUtleSA9IChTdHJpbmcpdmFsdWVzLmVsZW1lbnRBdCgwKTsKLSAgICAgICAgICBpZiAoY2F0ZWdvcnlLZXlfID09IG51bGwpCi0gICAgICAgICAgICBjYXRlZ29yeUtleV8gPSBjYXRlZ29yeUtleTsKLSAgICAgICAgICBlbHNlIGlmICghY2F0ZWdvcnlLZXlfLmVxdWFscyhjYXRlZ29yeUtleSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGNhdGVnb3J5S2V5KTsKLSAgICAgICAgICBTdHJpbmcga2V5VmFsdWUgPSAoU3RyaW5nKXZhbHVlcy5lbGVtZW50QXQoMSk7Ci0gICAgICAgICAgU3RyaW5nIGtleU5hbWUgPSAoU3RyaW5nKXZhbHVlcy5lbGVtZW50QXQoMik7Ci0gICAgICAgICAgU3RyaW5nIHBhcmVudEtleVZhbHVlID0gKFN0cmluZyl2YWx1ZXMuZWxlbWVudEF0KDMpOwotICAgICAgICAgIGlmIChyb290RWxlbWVudCA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJvb3RFbGVtZW50ID0gbmV3IENhdGVnb3J5RWxlbWVudChkaXNwbGF5TmFtZV8sbnVsbCx0aGlzKTsKLSAgICAgICAgICAgIHNldFJvb3RFbGVtZW50KHJvb3RFbGVtZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGlzRW5jbG9zZWRJblF1b3RlcyhrZXlOYW1lKSkKLSAgICAgICAgICAgIGtleU5hbWUgPSBrZXlOYW1lLnN1YnN0cmluZygxLGtleU5hbWUubGVuZ3RoKCktMSk7Ci0gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIENhdGVnb3J5RWxlbWVudCBhbHJlYWR5IGV4aXN0cy4gSWYgaXQgZG9lcywgcmVmcmVzaCB0aGUgQ2F0ZWdvcnkuCi0gICAgICAgICAgQ2F0ZWdvcnlFbGVtZW50IGNhdGVnb3J5RWxlbWVudCA9IChDYXRlZ29yeUVsZW1lbnQpY2F0ZWdvcnlFbGVtZW50c18uZ2V0KGtleVZhbHVlKTsKLSAgICAgICAgICBpZiAoY2F0ZWdvcnlFbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgICBjYXRlZ29yeUVsZW1lbnQudXBkYXRlQ2F0ZWdvcnkoa2V5TmFtZSxrZXlWYWx1ZSx0TW9kZWxLZXlfKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYXRlZ29yeUVsZW1lbnQgPSBuZXcgQ2F0ZWdvcnlFbGVtZW50KGtleU5hbWUsbmV3IEtleWVkUmVmZXJlbmNlKGtleU5hbWUsa2V5VmFsdWUsdE1vZGVsS2V5XyksdGhpcyk7Ci0gICAgICAgICAgRWxlbWVudCBwYXJlbnRFbGVtZW50OwotICAgICAgICAgIGlmIChwYXJlbnRLZXlWYWx1ZS5lcXVhbHMoa2V5VmFsdWUpKQotICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IHJvb3RFbGVtZW50OwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcmVudEVsZW1lbnQgPSAoRWxlbWVudCljYXRlZ29yeUVsZW1lbnRzXy5nZXQocGFyZW50S2V5VmFsdWUpOwotICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50ID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IG5ldyBDYXRlZ29yeUVsZW1lbnQoInRlbXAiLG5ldyBLZXllZFJlZmVyZW5jZSgiIixwYXJlbnRLZXlWYWx1ZSx0TW9kZWxLZXlfKSx0aGlzKTsKLSAgICAgICAgICAgIGNhdGVnb3J5RWxlbWVudHNfLnB1dChwYXJlbnRLZXlWYWx1ZSxwYXJlbnRFbGVtZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyZW50RWxlbWVudC5jb25uZWN0KGNhdGVnb3J5RWxlbWVudCxVRERJTW9kZWxDb25zdGFudHMuUkVMX1NVQkNBVEVHT1JJRVMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgICBjYXRlZ29yeUVsZW1lbnRzXy5wdXQoa2V5VmFsdWUsY2F0ZWdvcnlFbGVtZW50KTsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYnIuY2xvc2UoKTsKLSAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24obGluZSxsaW5lTnVtYmVyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnIuY2xvc2UoKTsKLSAgICAgIHJldHVybiByZXR1cm5Db2RlOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX0lPOwotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX0ZJTEU7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX0NBVEVHT1JZX0tFWTsKLSAgICB9Ci0gICAgY2F0ZWdvcnlFbGVtZW50c18gPSBudWxsOwotICAgIHJldHVybiByZXR1cm5Db2RlOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgc2F2ZURhdGEoUHJpbnRXcml0ZXIgcHcsQ2F0ZWdvcnlFbGVtZW50IGNhdGVnb3J5RWxlbWVudCxDYXRlZ29yeUVsZW1lbnQgcGFyZW50RWxlbWVudCxib29sZWFuIGlzRmlyc3QpCi0gIHsKLSAgICAvLyBGaWxlIGZvcm1hdDoKLSAgICAvLyA8Y2F0ZWdvcnlLZXk+IzxrZXlWYWx1ZT4jPGtleU5hbWU+IzxwYXJlbnRLZXlWYWx1ZT4KLSAgICBLZXllZFJlZmVyZW5jZSBrciA9IGNhdGVnb3J5RWxlbWVudC5nZXRDYXRlZ29yeSgpOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgbm90IHRoZSByb290IGVsZW1lbnQuCi0gICAgaWYgKGtyICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGtleU5hbWUgPSBrci5nZXRLZXlOYW1lKCk7Ci0gICAgICBTdHJpbmcga2V5VmFsdWUgPSBrci5nZXRLZXlWYWx1ZSgpOwotICAgICAgU3RyaW5nIHBhcmVudEtleVZhbHVlOwotICAgICAgaWYgKHBhcmVudEVsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgcGFyZW50S2V5VmFsdWUgPSBrZXlWYWx1ZTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2UgcGFyZW50S3IgPSBwYXJlbnRFbGVtZW50LmdldENhdGVnb3J5KCk7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBwYXJlbnQgaXMgdGhlIHJvb3QgZWxlbWVudC4KLSAgICAgICAgaWYgKHBhcmVudEtyID09IG51bGwpCi0gICAgICAgICAgcGFyZW50S2V5VmFsdWUgPSBrZXlWYWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmVudEtleVZhbHVlID0gcGFyZW50S3IuZ2V0S2V5VmFsdWUoKTsKLSAgICAgIH0KLSAgICAgIGlmICghaXNGaXJzdCkKLSAgICAgICAgcHcucHJpbnRsbigpOwotICAgICAgZWxzZQotICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7Ci0gICAgICBwdy5wcmludChtYW5nbGUoY2F0ZWdvcnlLZXlfKSk7Ci0gICAgICBwdy5wcmludChjb2x1bW5EZWxpbWl0ZXJfKTsKLSAgICAgIHB3LnByaW50KG1hbmdsZShrZXlWYWx1ZSkpOwotICAgICAgcHcucHJpbnQoY29sdW1uRGVsaW1pdGVyXyk7Ci0gICAgICBwdy5wcmludChtYW5nbGUoa2V5TmFtZSkpOwotICAgICAgcHcucHJpbnQoY29sdW1uRGVsaW1pdGVyXyk7Ci0gICAgICBwdy5wcmludChtYW5nbGUocGFyZW50S2V5VmFsdWUpKTsKLSAgICB9Ci0gICAgRW51bWVyYXRpb24gZSA9IGNhdGVnb3J5RWxlbWVudC5nZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1NVQkNBVEVHT1JJRVMpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgewotICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgIHNhdmVEYXRhKHB3LChDYXRlZ29yeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpLGNhdGVnb3J5RWxlbWVudCxpc0ZpcnN0KTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8vIE1hbmdsZSBhbiBpbnB1dCBzdHJpbmcgaWYgaXQgY29udGFpbnMgZGVmYXVsdCBjb2x1bW4gZGVsaW1pdGVyIGNoYXJhY3RlcnMgYnkgc3Vycm91bmRpbmcgaXQgd2l0aCB0aGUgc3RyaW5nIGRlbGltaXRlcnMuCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIG1hbmdsZShTdHJpbmcgaW5wdXQpCi0gIHsKLSAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5pbmRleE9mKGNvbHVtbkRlbGltaXRlcl8pICE9IC0xKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcihpbnB1dCk7Ci0gICAgICBzLmluc2VydCgwLHN0cmluZ0RlbGltaXRlcl8pLmFwcGVuZChzdHJpbmdEZWxpbWl0ZXJfKTsKLSAgICAgIHJldHVybiBzLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJ5dGUgc2F2ZURhdGEoU3RyaW5nIGZpbGVOYW1lKQotICB7Ci0gICAgLy8gVGhlIGZpbGVOYW1lIHNob3VsZCBhbHJlYWR5IGJlIFVSTEVuY29kZWQuCi0gICAgYnl0ZSByZXR1cm5Db2RlID0gT1BFUkFUSU9OX1NVQ0NFU1NGVUw7Ci0gICAgZXJyb3JFeGNlcHRpb25fID0gbnVsbDsKLSAgICBpZiAoaXNEYXRhTG9hZGVkKCkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIobmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZU5hbWUpLEhUTUxVdGlscy5VVEY4X0VOQ09ESU5HKSx0cnVlKTsKLSAgICAgICAgQ2F0ZWdvcnlFbGVtZW50IHJvb3RFbGVtZW50ID0gKENhdGVnb3J5RWxlbWVudClnZXRSb290RWxlbWVudCgpOwotICAgICAgICBzYXZlRGF0YShwdyxyb290RWxlbWVudCxudWxsLHRydWUpOwotICAgICAgICBwdy5mbHVzaCgpOwotICAgICAgICBwdy5jbG9zZSgpOwotICAgICAgICAvLyBTYXZlIHRoZSBwcm9wZXJ0aWVzIGZpbGUuCi0gICAgICAgIFByb3BlcnRpZXMgcCA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHAuc2V0UHJvcGVydHkoIndzYWQuZGF0YUZpbGUiLGZpbGVOYW1lKTsKLSAgICAgICAgcC5zZXRQcm9wZXJ0eSgid3NhZC5jaGVja2VkIixTdHJpbmcudmFsdWVPZihjaGVja2VkXykpOwotICAgICAgICBwLnNldFByb3BlcnR5KCJ3c2FkLm5hbWUiLGRpc3BsYXlOYW1lXyk7Ci0gICAgICAgIHAuc2V0UHJvcGVydHkoImNvbHVtbi5kZWxpbWl0ZXIiLGNvbHVtbkRlbGltaXRlcl8pOwotICAgICAgICBwLnNldFByb3BlcnR5KCJzdHJpbmcuZGVsaW1pdGVyIixzdHJpbmdEZWxpbWl0ZXJfKTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHByb3BlcnRpZXNGaWxlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoZmlsZU5hbWUuc3Vic3RyaW5nKDAsZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSkpOwotICAgICAgICBwcm9wZXJ0aWVzRmlsZU5hbWUuYXBwZW5kKCIucHJvcGVydGllcyIpOwotICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShwcm9wZXJ0aWVzRmlsZU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHAuc3RvcmUoZm91dCxudWxsKTsKLSAgICAgICAgZm91dC5jbG9zZSgpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgICByZXR1cm5Db2RlID0gRVJST1JfRklMRTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgICByZXR1cm5Db2RlID0gRVJST1JfU0VDVVJJVFk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgICByZXR1cm5Db2RlID0gRVJST1JfRU5DT0RJTkc7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX0lPOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmV0dXJuQ29kZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gZGlzcGxheU5hbWVfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1B1Ymxpc2hlZEl0ZW1zRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9QdWJsaXNoZWRJdGVtc0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI3NWVmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1B1Ymxpc2hlZEl0ZW1zRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHVibGljIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudChpbnQgdHlwZSxTdHJpbmcgbmFtZSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbW9kZWwpOwotICAgIHNldFByb3BlcnR5QXNTdHJpbmcoTW9kZWxDb25zdGFudHMuUkVMX0NISUxEUkVOLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKTsKLSAgICBzZXRQcm9wZXJ0eUFzU3RyaW5nKFVERElNb2RlbENvbnN0YW50cy5RVUVSWV9UWVBFLFN0cmluZy52YWx1ZU9mKHR5cGUpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChnZXRQcm9wZXJ0eUFzU3RyaW5nKFVERElNb2RlbENvbnN0YW50cy5RVUVSWV9UWVBFKSk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0SXRlbXMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9QdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1B1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzMmM4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1B1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYXNzZXJ0aW9uLlB1Ymxpc2hlckFzc2VydGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHsKLQotICAvLyBvd25pbmdCdXNpbmVzc0tleV8gaXMgdGhlIGtleSBvZiB0aGUgYnVzaW5lc3MgZWxlbWVudCB0aGF0IG93bnMgdGhpcwotICAvLyBwdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50Ci0gIHByaXZhdGUgU3RyaW5nIGZyb21LZXlfOwotICBwcml2YXRlIFN0cmluZyB0b0tleV87Ci0gIHByaXZhdGUgU3RyaW5nIG93bmluZ0J1c2luZXNzS2V5XzsKLQotICAvLyB0aGUgb3RoZXIgYnVzaW5lc3MgdGhhdCB0aGUgY29udGFpbmluZyBidXNpbmVzcyBpcyBhc3NlcnRlZCBmcm9tIG9yIHRvCi0gIHByaXZhdGUgTGlzdEVsZW1lbnQgc3BfOwotICBwcml2YXRlIGludCBzdWJRdWVyeUl0ZW1JZF87Ci0KLSAgLy8gc3RhdHVzIG9mIHRoaXMgcHVibGlzaGVyQXNzZXJ0aW9uCi0gIHByaXZhdGUgU3RyaW5nIHN0YXR1c187Ci0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWZlcmVuY2VfOwotCi0gIHB1YmxpYyBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50KFN0cmluZyBmcm9tS2V5LCBTdHJpbmcgdG9LZXksIFN0cmluZyBvd25pbmdCdXNpbmVzc0tleSwgTGlzdEVsZW1lbnQgc3AsIGludCBzdWJRdWVyeUl0ZW1JZCwgU3RyaW5nIHN0YXR1cywgS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWYpIHsKLSAgICBmcm9tS2V5XyA9IGZyb21LZXk7Ci0gICAgdG9LZXlfID0gdG9LZXk7Ci0gICAgb3duaW5nQnVzaW5lc3NLZXlfID0gb3duaW5nQnVzaW5lc3NLZXk7Ci0gICAgc3BfID0gc3A7Ci0gICAgc3ViUXVlcnlJdGVtSWRfID0gc3ViUXVlcnlJdGVtSWQ7Ci0gICAgc3RhdHVzXyA9IHN0YXR1czsKLSAgICBrZXllZFJlZmVyZW5jZV8gPSBrZXllZFJlZjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEZyb21LZXkoU3RyaW5nIGZyb21LZXkpIHsKLSAgICBmcm9tS2V5XyA9IGZyb21LZXk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZyb21LZXkoKSB7Ci0gICAgcmV0dXJuIGZyb21LZXlfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VG9LZXkoU3RyaW5nIHRvS2V5KSB7Ci0gICAgdG9LZXlfID0gdG9LZXk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRvS2V5KCkgewotICAgIHJldHVybiB0b0tleV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRPd25pbmdCdXNpbmVzc0tleShTdHJpbmcga2V5KSB7Ci0gICAgb3duaW5nQnVzaW5lc3NLZXlfID0ga2V5OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRPd25pbmdCdXNpbmVzc0tleSgpIHsKLSAgICByZXR1cm4gb3duaW5nQnVzaW5lc3NLZXlfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb3ZpZGVyKExpc3RFbGVtZW50IHNwKSB7Ci0gICAgc3BfID0gc3A7Ci0gIH0KLQotICBwdWJsaWMgTGlzdEVsZW1lbnQgZ2V0U2VydmljZVByb3ZpZGVyKCkgewotICAgIHJldHVybiBzcF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTdWJRdWVyeUl0ZW1JZChpbnQgaWQpIHsKLSAgICBzdWJRdWVyeUl0ZW1JZF8gPSBpZDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0U3ViUXVlcnlJdGVtSWQoKSB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5SXRlbUlkXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFN0YXR1cyhTdHJpbmcgc3RhdHVzKSB7Ci0gICAgc3RhdHVzXyA9IHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCkgewotICAgIHJldHVybiBzdGF0dXNfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0S2V5ZWRSZWYoS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWYpIHsKLSAgICBrZXllZFJlZmVyZW5jZV8gPSBrZXllZFJlZjsKLSAgfQotCi0gIHB1YmxpYyBLZXllZFJlZmVyZW5jZSBnZXRLZXllZFJlZigpIHsKLSAgICByZXR1cm4ga2V5ZWRSZWZlcmVuY2VfOwotICB9Ci0KLSAgcHVibGljIFB1Ymxpc2hlckFzc2VydGlvbiBnZXRQdWJsaXNoZXJBc3NlcnRpb24oKSB7Ci0gICAgaWYgKGZyb21LZXlfID09IG51bGwgfHwKLSAgICAgICAgdG9LZXlfID09IG51bGwgfHwKLSAgICAgICAga2V5ZWRSZWZlcmVuY2VfID09IG51bGwpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIFB1Ymxpc2hlckFzc2VydGlvbiBwdWJBc3NlcnRpb24gPSBuZXcgUHVibGlzaGVyQXNzZXJ0aW9uKGZyb21LZXlfLCB0b0tleV8sIGtleWVkUmVmZXJlbmNlXyk7Ci0gICAgcmV0dXJuIHB1YkFzc2VydGlvbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1F1ZXJ5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9RdWVyeUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ2ZGU5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1F1ZXJ5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGNsYXNzIFF1ZXJ5RWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGluaXRRdWVyeVByb3BlcnRpZXMoaW50IGl0ZW1UeXBlLE9iamVjdFtdIHJlc3VsdHMpCi0gIHsKLSAgICBWZWN0b3IgcmVzdWx0c1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7aTxyZXN1bHRzLmxlbmd0aDtpKyspCi0gICAgICByZXN1bHRzVmVjdG9yLmFkZEVsZW1lbnQocmVzdWx0c1tpXSk7Ci0gICAgc2V0UHJvcGVydHlBc1N0cmluZyhNb2RlbENvbnN0YW50cy5SRUxfQ0hJTERSRU4sVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSWV9SRVNVTFRTKTsKLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFVERElNb2RlbENvbnN0YW50cy5JTklUSUFMX1JFU1VMVFMscmVzdWx0c1ZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuUVVFUllfVFlQRSxTdHJpbmcudmFsdWVPZihpdGVtVHlwZSkpOwotICB9Ci0gIAotICBwdWJsaWMgUXVlcnlFbGVtZW50KEJ1c2luZXNzRW50aXR5W10gc3BMaXN0LFN0cmluZyBuYW1lLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgaW5pdFF1ZXJ5UHJvcGVydGllcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyxzcExpc3QpOwotICB9Ci0KLSAgcHVibGljIFF1ZXJ5RWxlbWVudChCdXNpbmVzc1NlcnZpY2VbXSBic0xpc3QsU3RyaW5nIG5hbWUsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICBpbml0UXVlcnlQcm9wZXJ0aWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyxic0xpc3QpOwotICB9Ci0KLSAgcHVibGljIFF1ZXJ5RWxlbWVudChUTW9kZWxbXSB0TW9kZWxMaXN0LFN0cmluZyBuYW1lLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgaW5pdFF1ZXJ5UHJvcGVydGllcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLHRNb2RlbExpc3QpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRRdWVyeVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQoZ2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuUVVFUllfVFlQRSkpOwotICB9Ci0KLSAgcHVibGljIFF1ZXJ5UGFyZW50RWxlbWVudCBnZXRRdWVyeVBhcmVudEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIChRdWVyeVBhcmVudEVsZW1lbnQpZ2V0UGFyZW50RWxlbWVudCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1F1ZXJ5UGFyZW50RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9RdWVyeVBhcmVudEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI2ZjM3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1F1ZXJ5UGFyZW50RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFF1ZXJ5UGFyZW50RWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHVibGljIFF1ZXJ5UGFyZW50RWxlbWVudChTdHJpbmcgbmFtZSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbW9kZWwpOwotICAgIHNldFByb3BlcnR5QXNTdHJpbmcoTW9kZWxDb25zdGFudHMuUkVMX0NISUxEUkVOLFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UXVlcmllcygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9SZWdpc3RyeUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUmVnaXN0cnlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMDlmMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9SZWdpc3RyeUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKiAyMDA2MDkxMiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA3MDQxOSAgIDE4Mjg2NCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuUmVnaXN0cnlTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5VRERJUmVnaXN0cnlTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQXV0aFRva2VuOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ2lzdHJ5RWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBmaW5hbCBsb25nIEFVVEhfSU5GT19USU1FT1VUID0gMzAwMDAwMDsKLSAgcHJpdmF0ZSBVRERJUHJveHkgcHJveHlfOwotICBwcml2YXRlIGxvbmcgYXV0aFRva2VuVGltZXN0YW1wXzsKLSAgcHJpdmF0ZSBBdXRoVG9rZW4gYXV0aFRva2VuXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaWRfOwotICBwcml2YXRlIFN0cmluZyBwYXNzd29yZF87Ci0gIHByaXZhdGUgU3RyaW5nIGlucXVpcnlVUkxfOwotICBwcml2YXRlIFN0cmluZyBwdWJsaXNoVVJMXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2FjaGVkUHVibGlzaFVSTF87Ci0gIHByaXZhdGUgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTF87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc187Ci0gIHByaXZhdGUgYm9vbGVhbiBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc187Ci0gIHByaXZhdGUgU3RyaW5nIGNhdGVnb3JpZXNEaXJlY3RvcnlfOwotCi0gIHB1YmxpYyBSZWdpc3RyeUVsZW1lbnQoVURESVByb3h5IHByb3h5LCBTdHJpbmcgaW5xdWlyeVVSTCwgU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHByb3h5XyA9IHByb3h5OwotICAgIGlucXVpcnlVUkxfID0gaW5xdWlyeVVSTDsKLSAgICBwdWJsaXNoVVJMXyA9IG51bGw7Ci0gICAgYXV0aFRva2VuVGltZXN0YW1wXyA9IC0xOwotICAgIGF1dGhUb2tlbl8gPSBudWxsOwotICAgIGlkXyA9IG51bGw7Ci0gICAgcGFzc3dvcmRfID0gbnVsbDsKLSAgICBjYWNoZWRQdWJsaXNoVVJMXyA9IG51bGw7Ci0gICAgcmVnaXN0cmF0aW9uVVJMXyA9IG51bGw7Ci0gICAgdXNlckRlZmluZWRDYXRlZ29yaWVzXyA9IG51bGw7Ci0gICAgY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXNfID0gZmFsc2U7Ci0gICAgY2F0ZWdvcmllc0RpcmVjdG9yeV8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFVERElQcm94eSBnZXRQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gcHJveHlfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoKQotICB7Ci0JICAKLQkgIGF1dGhUb2tlblRpbWVzdGFtcF8gPSAtMTsKLQkgIGF1dGhUb2tlbl8gPSBudWxsOwotCSAgY2FjaGVkUHVibGlzaFVSTF8gPSBudWxsOyAKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIHJldHVybiBpbnF1aXJ5VVJMXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBRdWVyeVBhcmVudEVsZW1lbnQgZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoUXVlcnlQYXJlbnRFbGVtZW50KSAoZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkubmV4dEVsZW1lbnQoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUHVibGlzaGVkSXRlbXNFbGVtZW50IGdldFB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoUHVibGlzaGVkSXRlbXNFbGVtZW50KSAoZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfQlVTSU5FU1NFU19QQVJFTlQpLm5leHRFbGVtZW50KCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBnZXRQdWJsaXNoZWRTZXJ2aWNlc0VsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIChQdWJsaXNoZWRJdGVtc0VsZW1lbnQpIChnZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9TRVJWSUNFU19QQVJFTlQpLm5leHRFbGVtZW50KCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBnZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIChQdWJsaXNoZWRJdGVtc0VsZW1lbnQpIChnZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9TRVJWSUNFX0lOVEVSRkFDRVNfUEFSRU5UKS5uZXh0RWxlbWVudCgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHBlcmZvcm1Mb2dpbihTdHJpbmcgcHVibGlzaFVSTCwgU3RyaW5nIHVzZXJJZCwgU3RyaW5nIHBhc3N3b3JkKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uLCBVRERJRXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLSAgewotICAgIHB1Ymxpc2hVUkxfID0gcHVibGlzaFVSTDsKLSAgICBwcm94eV8uc2V0UHVibGlzaFVSTChOZXRVdGlscy5jcmVhdGVVUkwocHVibGlzaFVSTCkpOwotICAgIGF1dGhUb2tlbl8gPSBwcm94eV8uZ2V0X2F1dGhUb2tlbih1c2VySWQsIHBhc3N3b3JkKTsKLSAgICBhdXRoVG9rZW5UaW1lc3RhbXBfID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgaWRfID0gdXNlcklkOwotICAgIHBhc3N3b3JkXyA9IHBhc3N3b3JkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcGVyZm9ybUxvZ291dCgpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24sIFVERElFeGNlcHRpb24KLSAgewotICAgIHByb3h5Xy5kaXNjYXJkX2F1dGhUb2tlbihhdXRoVG9rZW5fLmdldEF1dGhJbmZvU3RyaW5nKCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBdXRoSW5mb1N0cmluZygpCi0gIHsKLSAgICBpZiAoIWlzTG9nZ2VkSW4oKSkKLSAgICAgIHJldHVybiBudWxsOwotICAgIGlmICgoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBhdXRoVG9rZW5UaW1lc3RhbXBfKSA+IEFVVEhfSU5GT19USU1FT1VUKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBhdXRoVG9rZW5fID0gcHJveHlfLmdldF9hdXRoVG9rZW4oaWRfLCBwYXNzd29yZF8pOwotICAgICAgICBhdXRoVG9rZW5UaW1lc3RhbXBfID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhdXRoVG9rZW5fLmdldEF1dGhJbmZvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0xvZ2dlZEluKCkKLSAgewotICAgIHJldHVybiBhdXRoVG9rZW5fICE9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRDYWNoZWRQdWJsaXNoVVJMKFN0cmluZyBwdWJsaXNoVVJMKQotICB7Ci0gICAgY2FjaGVkUHVibGlzaFVSTF8gPSBwdWJsaXNoVVJMOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkKLSAgewotICAgIGlmIChpc0xvZ2dlZEluKCkgJiYgcHVibGlzaFVSTF8gIT0gbnVsbCkKLSAgICAgIHJldHVybiBwdWJsaXNoVVJMXzsKLSAgICByZXR1cm4gY2FjaGVkUHVibGlzaFVSTF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRSZWdpc3RyYXRpb25VUkwoU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCkKLSAgewotICAgIHJlZ2lzdHJhdGlvblVSTF8gPSByZWdpc3RyYXRpb25VUkw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpCi0gIHsKLSAgICByZXR1cm4gcmVnaXN0cmF0aW9uVVJMXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VXNlcklkKCkKLSAgewotICAgIHJldHVybiBpZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRVc2VySWQoU3RyaW5nIHVzZXJJZCkKLSAgewotICAgIGlkXyA9IHVzZXJJZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q3JlZCgpCi0gIHsKLSAgICByZXR1cm4gcGFzc3dvcmRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q3JlZChTdHJpbmcgY3JlZCkKLSAgewotICAgIHBhc3N3b3JkXyA9IGNyZWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoSGFzaHRhYmxlIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcykKLSAgewotICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc18gPSB1c2VyRGVmaW5lZENhdGVnb3JpZXM7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgRW51bWVyYXRpb24gZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCkKLSAgewotICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXNfICE9IG51bGwpCi0gICAgICByZXR1cm4gdXNlckRlZmluZWRDYXRlZ29yaWVzXy5lbGVtZW50cygpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIENhdGVnb3J5TW9kZWwgZ2V0VXNlckRlZmluZWRDYXRlZ29yeShTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgcmV0dXJuIChDYXRlZ29yeU1vZGVsKSB1c2VyRGVmaW5lZENhdGVnb3JpZXNfLmdldCh0TW9kZWxLZXkpOwotICB9Ci0KLSAgLy8gU3BlY2lhbCBoYW5kbGVyIHRvIGJlIGludm9rZWQgYmVmb3JlIHNlbmRpbmcgYSBtZXNzYWdlIHRvIHRoZSByZWdpc3RyeS4KLSAgcHVibGljIGZpbmFsIHZvaWQgaGFuZGxlUHJlSW52b2NhdGlvbihCdXNpbmVzc1NlcnZpY2UgYnVzU2VydmljZSkKLSAgewotICAgIC8vIEZvciBYTWV0aG9kcywgYnVzaW5lc3Mgc2VydmljZXMgbXVzdCBjb250YWluIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm06Ci0gICAgLy8gSU1QTEVNRU5UQVRJT046IGlibXdzCi0gICAgaWYgKGdldElucXVpcnlVUkwoKS5lcXVhbHMoImh0dHA6Ly91ZGRpLnhtZXRob2RzLm5ldC9pbnF1aXJlIikpCi0gICAgewotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gYnVzU2VydmljZS5nZXREZXNjcmlwdGlvblZlY3RvcigpOwotICAgICAgaWYgKGRlc2NyaXB0aW9uVmVjdG9yID09IG51bGwpCi0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgYm9vbGVhbiBjb250YWluc0ltcGxlbWVudGF0aW9uRGVzY3JpcHRpb24gPSBmYWxzZTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRpb25WZWN0b3Iuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKSBkZXNjcmlwdGlvblZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbi5nZXRUZXh0KCkuc3RhcnRzV2l0aCgiSU1QTEVNRU5UQVRJT046ICIpKQotICAgICAgICB7Ci0gICAgICAgICAgY29udGFpbnNJbXBsZW1lbnRhdGlvbkRlc2NyaXB0aW9uID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFjb250YWluc0ltcGxlbWVudGF0aW9uRGVzY3JpcHRpb24pCi0gICAgICB7Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQobmV3IERlc2NyaXB0aW9uKCJJTVBMRU1FTlRBVElPTjogaWJtd3MiKSk7Ci0gICAgICAgIGJ1c1NlcnZpY2Uuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzKGJvb2xlYW4gY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMpCi0gIHsKLSAgICBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc18gPSBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllczsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGdldENoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzKCkKLSAgewotICAgIHJldHVybiBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRDYXRlZ29yaWVzRGlyZWN0b3J5KFN0cmluZyBkaXJlY3RvcnkpCi0gIHsKLSAgICBjYXRlZ29yaWVzRGlyZWN0b3J5XyA9IGRpcmVjdG9yeTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q2F0ZWdvcmllc0RpcmVjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gY2F0ZWdvcmllc0RpcmVjdG9yeV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoTWV0YSgpewotCSAgICAKLQkgIFJlZ2lzdHJ5U2VydmljZSByZWdTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JICBJUmVnaXN0cnlNYW5hZ2VyIHJlZ01hbmFnZXIgPSByZWdTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLQkgIAotCSAgCi0JICB0cnkKLQkgIHsKLSAgICAJICByZWdNYW5hZ2VyLnJlZnJlc2hNYW5hZ2VyKCk7Ci0JCSAgU3RyaW5nW10gcmVnVVJJcyA9IHJlZ01hbmFnZXIuZ2V0UmVnaXN0cnlVUklzKCk7Ci0JCSAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWdVUklzLmxlbmd0aDsgaSsrKQotCQkgIHsKLQkJCSAgUmVnaXN0cnkgcmVnID0gcmVnTWFuYWdlci5sb2FkUmVnaXN0cnkocmVnVVJJc1tpXSk7Ci0JCQkgIGlmIChyZWcgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnkpCi0JCQkgIHsKLQkJCQkgIFVERElSZWdpc3RyeSB1ZGRpUmVnID0gKFVERElSZWdpc3RyeSlyZWc7Ci0JCQkJICBpZih1ZGRpUmVnLmdldERpc2NvdmVyeVVSTCgpLmVxdWFscyhnZXRJbnF1aXJ5VVJMKCkpKXsKLQkJCQkJICAKLQkJCQkJICAKLQkJCQkJIAotCQkJCQkgIFRheG9ub215W10gdGF4b25vbWllcyA9IHJlZ01hbmFnZXIubG9hZFRheG9ub21pZXMoVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpLmdldFRheG9ub215VVJJcyh1ZGRpUmVnKSk7Ci0JCQkJCSAgaWYgKHRheG9ub21pZXMgIT0gbnVsbCkKLQkJCQkgICAgICAgIHsKLQkJCQkgICAgICAgICAgSGFzaHRhYmxlIHRheG9ub215VGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQkJICAgICAgICAgIGZvciAoaW50IGo9MDsgajx0YXhvbm9taWVzLmxlbmd0aDsgaisrKQotCQkJCSAgICAgICAgICB7Ci0JCQkJICAgICAgICAgICAgVGF4b25vbXkgdGF4b25vbXkgPSB0YXhvbm9taWVzW2pdOwotCQkJCSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdGF4b25vbXkuZ2V0TmFtZSgpOwotCQkJCSAgICAgICAgICAgIFN0cmluZyB0bW9kZWxLZXkgPSB0YXhvbm9teS5nZXRUbW9kZWxLZXkoKTsKLQkJCQkgICAgICAgICAgICBDYXRlZ29yeU1vZGVsIGNhdE1vZGVsID0gbmV3IENhdGVnb3J5TW9kZWwoKTsKLQkJCQkgICAgICAgICAgICBjYXRNb2RlbC5zZXREaXNwbGF5TmFtZShuYW1lKTsKLQkJCQkgICAgICAgICAgICBjYXRNb2RlbC5zZXRDYXRlZ29yeUtleShuYW1lKTsKLQkJCQkgICAgICAgICAgICBjYXRNb2RlbC5zZXRUTW9kZWxLZXkodG1vZGVsS2V5KTsKLQkJCQkgICAgICAgICAgICBjYXRNb2RlbC5sb2FkRnJvbVRheG9ub215KHRheG9ub215KTsKLQkJCQkgICAgICAgICAgICB0YXhvbm9teVRhYmxlLnB1dCh0bW9kZWxLZXksIGNhdE1vZGVsKTsKLQkJCQkgICAgICAgICAgfQotCQkJCSAgICAgICAgICAKLQkJCQkgICAgICAgICAgc2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKHRheG9ub215VGFibGUpOwotCQkJCSAgICAgICAgfSAgIAotCQkJCSAgfQotCQkgIAotCQkJICB9Ci0JICAKLQkJICB9Ci0JICB9Y2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JICB7Ci0JCSAgLy8gVE9ETzogQmV0dGVyIGVycm9yIHJlcG9ydGluZwotCQkgIGNlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfSAgCi0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYzN2NiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1NlcnZpY2VFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBBYnN0cmFjdFVERElFbGVtZW50Ci17Ci0gIHByaXZhdGUgQnVzaW5lc3NTZXJ2aWNlIGJzXzsKLSAgCi0gIHB1YmxpYyBTZXJ2aWNlRWxlbWVudChCdXNpbmVzc1NlcnZpY2UgYnMsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihicy5nZXREZWZhdWx0TmFtZVN0cmluZygpLG1vZGVsKTsKLSAgICBzZXRLZXkoYnMuZ2V0U2VydmljZUtleSgpKTsKLSAgICBic18gPSBiczsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIEJ1c2luZXNzU2VydmljZSBnZXRCdXNpbmVzc1NlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIGJzXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzJkODgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvU2VydmljZUludGVyZmFjZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGV4dGVuZHMgQWJzdHJhY3RVRERJRWxlbWVudAotewotICBwcml2YXRlIFRNb2RlbCB0TW9kZWxfOwotICAgIAotICBwdWJsaWMgU2VydmljZUludGVyZmFjZUVsZW1lbnQoVE1vZGVsIHRNb2RlbCxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKHRNb2RlbC5nZXROYW1lU3RyaW5nKCksbW9kZWwpOwotICAgIHRNb2RlbF8gPSB0TW9kZWw7Ci0gICAgc2V0S2V5KHRNb2RlbC5nZXRUTW9kZWxLZXkoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVE1vZGVsIGdldFRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gdE1vZGVsXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9VRERJTWFpbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvVURESU1haW5FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNzEyMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9VRERJTWFpbkVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVURESU1haW5FbGVtZW50IGV4dGVuZHMgVHJlZUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcmVnaXN0cnlOYW1lc187Ci0KLSAgcHVibGljIFVERElNYWluRWxlbWVudChTdHJpbmcgbmFtZSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbW9kZWwpOwotICAgIHJlZ2lzdHJ5TmFtZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gY29udGFpbnNSZWdpc3RyeU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKHJlZ2lzdHJ5TmFtZXNfLmdldChuYW1lKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZFJlZ2lzdHJ5TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJlZ2lzdHJ5TmFtZXNfLnB1dChuYW1lLEJvb2xlYW4uVFJVRSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVSZWdpc3RyeU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZWdpc3RyeU5hbWVzXy5yZW1vdmUobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjbGVhclJlZ2lzdHJ5TmFtZXMoKQotICB7Ci0gICAgcmVnaXN0cnlOYW1lc18uY2xlYXIoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0FkZFRvRmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0FkZFRvRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODUzYTQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9BZGRUb0Zhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFRvRmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBBZGRUb0Zhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNQdWJsaXNoU2VydmljZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNQdWJsaXNoU2VydmljZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU3OTEwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzUHVibGlzaFNlcnZpY2VUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RGaW5kVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQnVzUHVibGlzaFNlcnZpY2VUb29sIGV4dGVuZHMgRm9ybVRvb2wgaW1wbGVtZW50cyBNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBwcml2YXRlIFJlZ0ZpbmRUb29sIHJlZ0ZpbmRUb29sXzsKLQotICBwdWJsaWMgQnVzUHVibGlzaFNlcnZpY2VUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwidWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgICByZWdGaW5kVG9vbF8gPSBuZXcgUmVnRmluZFRvb2wobmV3IFRvb2xNYW5hZ2VyKHRvb2xNYW5hZ2VyLmdldE5vZGUoKSksICIiKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksIiIpOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIFN0cmluZyBzaW1wbGVTdHlsZVN0cmluZyA9IFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uIGlucHV0cwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTiwiIik7Ci0KLSAgICAvLyBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uIGlucHV0cwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCwiIik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgcmVnRmluZFRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCkKLSAgewotICAgIC8vIEVtcHR5L05vbi1leGlzdGVudCBzdWJxdWVyeWtleSBpbXBsaWVzIHB1Ymxpc2ggZm9ybS4gQWxsIGVsc2UgaW1wbGllcyBxdWVyeSBmb3JtLgotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpc3ViUXVlcnlLZXlPYmplY3Q7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5ID09IG51bGwgfHwgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPCAxKQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHJldHVybiBTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLHN1YlF1ZXJ5S2V5LGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICBPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QgPSBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gbnVsbDsKLSAgICBpZiAoc3ViUXVlcnlLZXlPYmplY3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJJRVNfUFJPUEVSVElFUyk7Ci0gICAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Ugc3ViUXVlcnlQcm9wZXJ0aWVzID0gZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5T2JqZWN0KTsKLSAgICAgIE9iamVjdCBzdWJRdWVyeUdldE9iamVjdCA9IHN1YlF1ZXJ5UHJvcGVydGllcy5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCk7Ci0gICAgICBpZiAoc3ViUXVlcnlHZXRPYmplY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0ID0gKChCb29sZWFuKXN1YlF1ZXJ5R2V0T2JqZWN0KS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGlzU3ViUXVlcnlHZXQpCi0gICAgICAgICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL0dldEZvcm0uanNwIjsKLSAgICAgIH0KLSAgICAgIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICB9Ci0gICAgICAKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gInVkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VGb3JtLmpzcCI7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtTGluaygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c2luZXNzRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQxZjYzYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci0KLXB1YmxpYyBjbGFzcyBCdXNpbmVzc0RldGFpbHNUb29sIGV4dGVuZHMgRGV0YWlsc1Rvb2wKLXsKLSAgcHVibGljIEJ1c2luZXNzRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCxQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoInVkZGkvZm9ybXMvQnVzaW5lc3NEZXRhaWxzRm9ybS5qc3AiKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KSh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIEJ1c2luZXNzRW50aXR5IGJlID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSxiZS5nZXRCdXNpbmVzc0tleSgpKTsKLQotICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGNvcHlJbmRleFZlY3RvcihiZS5nZXROYW1lVmVjdG9yKCksbmFtZVZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxuYW1lVmVjdG9yKTsKLQotICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBjb3B5SW5kZXhWZWN0b3IoYmUuZ2V0RGVzY3JpcHRpb25WZWN0b3IoKSxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsZGVzY3JpcHRpb25WZWN0b3IpOwotCi0gICAgSWRlbnRpZmllckJhZyBpZEJhZyA9IGJlLmdldElkZW50aWZpZXJCYWcoKTsKLSAgICBpZiAoaWRCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgaWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoaWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKSxpZFZlY3Rvcik7Ci0gICAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTLGlkVmVjdG9yKTsKLSAgICB9Ci0KLSAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBiZS5nZXRDYXRlZ29yeUJhZygpOwotICAgIGlmIChjYXRCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgY2F0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgY29weUluZGV4VmVjdG9yKGNhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpLGNhdFZlY3Rvcik7Ci0gICAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMsY2F0VmVjdG9yKTsKLSAgICB9Ci0KLSAgICBEaXNjb3ZlcnlVUkxzIGRpc2NvdmVyeVVSTHMgPSBiZS5nZXREaXNjb3ZlcnlVUkxzKCk7Ci0gICAgaWYgKGRpc2NvdmVyeVVSTHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgZGlzY292ZXJ5VVJMVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgY29weUluZGV4VmVjdG9yKGRpc2NvdmVyeVVSTHMuZ2V0RGlzY292ZXJ5VVJMVmVjdG9yKCksZGlzY292ZXJ5VVJMVmVjdG9yKTsKLSAgICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyxkaXNjb3ZlcnlVUkxWZWN0b3IpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c2luZXNzTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c2luZXNzTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTZiYWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNpbmVzc05vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBCdXNpbmVzc05vZGUgZXh0ZW5kcyBVRERJTmF2aWdhdG9yTm9kZQotewotICBwcml2YXRlIERldGFpbHNUb29sIGRldGFpbHNUb29sXzsKLSAgcHJpdmF0ZSBCdXNQdWJsaXNoU2VydmljZVRvb2wgcHVibGlzaFNlcnZpY2VUb29sXzsKLSAgcHJpdmF0ZSBNYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbCBtYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbF87Ci0gIHByaXZhdGUgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbCBtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sXzsKLSAgcHJpdmF0ZSBVbnB1Ymxpc2hUb29sIHVucHVibGlzaFRvb2xfOwotCi0gIHB1YmxpYyBCdXNpbmVzc05vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsInVkZGkvaW1hZ2VzL2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZGV0YWlsc1Rvb2xfID0gbmV3IEJ1c2luZXNzRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQlVTSU5FU1NfREVUQUlMUyIpKTsKLSAgICBuZXcgR2V0U2VydmljZXNUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0dFVF9TRVJWSUNFUyIpLEJ1c2luZXNzR2V0U2VydmljZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfKSk7ICAgIAotICAgIHB1Ymxpc2hTZXJ2aWNlVG9vbF8gPSBuZXcgQnVzUHVibGlzaFNlcnZpY2VUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1BVQkxJU0hfU0VSVklDRSIpKTsKLSAgICBtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sXyA9IG5ldyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX01BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTIikpOwotICAgIG1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sXyA9IG5ldyBNYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9NQU5BR0VfUFVCTElTSEVSX0FTU0VSVElPTlMiKSk7Ci0gICAgbmV3IEFkZFRvRmF2b3JpdGVzVG9vbCh0b29sTWFuYWdlcl8sIHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICB1bnB1Ymxpc2hUb29sXyA9IG5ldyBVbnB1Ymxpc2hUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvdW5wdWJsaXNoX2J1c19lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1VOUFVCTElTSF9CVVNJTkVTUyIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIGRldGFpbHNUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgcHVibGlzaFNlcnZpY2VUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgbWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIG1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgdW5wdWJsaXNoVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQ2F0ZWdvcnlOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQ2F0ZWdvcnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjN2ZlY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0NhdGVnb3J5Tm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElGcmFtZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIENhdGVnb3J5Tm9kZSBleHRlbmRzIE5vZGUKLXsKLSAgcHVibGljIENhdGVnb3J5Tm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwidWRkaS9pbWFnZXMvY2F0ZWdvcnkuZ2lmIik7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGRyZW4oKQotICB7Ci0gICAgRW51bWVyYXRpb24gY2hpbGRyZW4gPSBlbGVtZW50Xy5nZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1NVQkNBVEVHT1JJRVMpOwotICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHdoaWxlIChjaGlsZHJlbi5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgQ2F0ZWdvcnlFbGVtZW50IGNhdGVnb3J5RWxlbWVudCA9IChDYXRlZ29yeUVsZW1lbnQpY2hpbGRyZW4ubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgQ2F0ZWdvcnlOb2RlIGNhdGVnb3J5Tm9kZSA9IG5ldyBDYXRlZ29yeU5vZGUoY2F0ZWdvcnlFbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgICAgICBhZGRDaGlsZChjYXRlZ29yeU5vZGUpOwotICAgICAgICBjYXRlZ29yeU5vZGUuY3JlYXRlQ2hpbGRyZW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5vZGVOYW1lKCkKLSAgewotICAgIENhdGVnb3J5RWxlbWVudCBjYXRlZ29yeUVsZW1lbnQgPSAoQ2F0ZWdvcnlFbGVtZW50KWVsZW1lbnRfOwotICAgIHJldHVybiBjYXRlZ29yeUVsZW1lbnQuZ2V0TmFtZUZvclRyZWUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFRvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFNlc3Npb25JZCgpLG5vZGVJZF8saXNPcGVuXyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCkKLSAgewotICAgIHJldHVybiBTZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhnZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRTZXNzaW9uSWQoKSxub2RlSWRfKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvblRhcmdldCgpCi0gIHsKLSAgICByZXR1cm4gVURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19XT1JLQVJFQTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0TGlua0FjdGlvblRhcmdldCgpCi0gIHsKLSAgICByZXR1cm4gVURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19XT1JLQVJFQTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFkNmM1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwcml2YXRlIFN0cmluZyBmb3JtTGlua187Ci0KLSAgcHVibGljIERldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQsU3RyaW5nIGZvcm1MaW5rKQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICAgIGZvcm1MaW5rXyA9IGZvcm1MaW5rOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gZm9ybUxpbmtfOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgY29weUluZGV4VmVjdG9yKFZlY3RvciBzb3VyY2UsVmVjdG9yIGRlc3RpbmF0aW9uKQotICB7Ci0gICAgZGVzdGluYXRpb24ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICBmb3IgKGludCBpPTA7aTxzb3VyY2Uuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChzb3VyY2UuZWxlbWVudEF0KGkpKTsKLSAgICAgIGxpc3RFbGVtZW50LnNldFZpZXdJZChpKTsKLSAgICAgIC8vIFRoZSBuZXh0IGl0ZW0gaW5kaWNhdGVzIHRoYXQgdGhpcyBlbGVtZW50IGlzIHRvIGJlIGluIG5vbi1lZGl0IHN0YXRlLgotICAgICAgbGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKC0xLC0xLGkpOwotICAgICAgZGVzdGluYXRpb24uYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0QnVzaW5lc3Nlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRCdXNpbmVzc2VzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDg5MTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRCdXNpbmVzc2VzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEdldEJ1c2luZXNzZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbAotewotICBwcml2YXRlIFN0cmluZyBhY3Rpb25MaW5rXzsKLSAgcHVibGljIEdldEJ1c2luZXNzZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2VQYXRoLFN0cmluZyBoaWdobGlnaHRlZEltYWdlUGF0aCxTdHJpbmcgYWx0LFN0cmluZyBhY3Rpb25MaW5rKQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsZW5hYmxlZEltYWdlUGF0aCxoaWdobGlnaHRlZEltYWdlUGF0aCxhbHQpOwotICAgIGFjdGlvbkxpbmtfID0gYWN0aW9uTGluazsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uTGlua187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRTZXJ2aWNlSW50ZXJmYWNlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRTZXJ2aWNlSW50ZXJmYWNlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcxZjQ4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0U2VydmljZUludGVyZmFjZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgR2V0U2VydmljZUludGVyZmFjZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbAotewotICBwcml2YXRlIFN0cmluZyBhY3Rpb25MaW5rXzsKLSAgcHVibGljIEdldFNlcnZpY2VJbnRlcmZhY2VzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0LFN0cmluZyBhY3Rpb25MaW5rKQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgICBhY3Rpb25MaW5rXyA9IGFjdGlvbkxpbms7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmtfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0U2VydmljZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0U2VydmljZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNTY4NjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0dldFNlcnZpY2VzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEdldFNlcnZpY2VzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uTGlua187Ci0gIHB1YmxpYyBHZXRTZXJ2aWNlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCxTdHJpbmcgYWN0aW9uTGluaykKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICAgIGFjdGlvbkxpbmtfID0gYWN0aW9uTGluazsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uTGlua187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9JdGVtc1N1bW1hcnlUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvSXRlbXNTdW1tYXJ5VG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODA3YjhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9JdGVtc1N1bW1hcnlUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwotCi1wdWJsaWMgY2xhc3MgSXRlbXNTdW1tYXJ5VG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHByaXZhdGUgU3RyaW5nIGZvcm1MaW5rXzsKLQotICBwdWJsaWMgSXRlbXNTdW1tYXJ5VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgZW5hYmxlZEltYWdlLFN0cmluZyBoaWdobGlnaHRlZEltYWdlLFN0cmluZyBhbHQsaW50IHF1ZXJ5SXRlbSkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGVuYWJsZWRJbWFnZSxoaWdobGlnaHRlZEltYWdlLGFsdCk7Ci0gICAgU3RyaW5nQnVmZmVyIGZvcm1MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9mb3Jtcy9JdGVtc1N1bW1hcnlGb3JtLmpzcD8iKTsKLSAgICBmb3JtTGluay5hcHBlbmQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKS5hcHBlbmQoJz0nKS5hcHBlbmQocXVlcnlJdGVtKTsKLQlTdHJpbmcgZW5jb2RlZEZvcm1MaW5rID0gVVJMVXRpbHMuZW5jb2RlKGZvcm1MaW5rLnRvU3RyaW5nKCkpOwotICAgIGZvcm1MaW5rXyA9IFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluayhlbmNvZGVkRm9ybUxpbmspOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gZm9ybUxpbmtfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTG9naW5Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTG9naW5Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNmIyNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0xvZ2luVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIExvZ2luVG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHByaXZhdGUgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZm9ybUxpbmsgPSAidWRkaS9mb3Jtcy9Mb2dpblVkZGlGb3JtLmpzcCI7Ci0gIAotICBwdWJsaWMgTG9naW5Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsInVkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBjb250cm9sbGVyXyA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiBmb3JtTGluazsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VG9Mb2dvdXRMaW5rKCkgCi0gIHsKLSAgCWZvcm1MaW5rID0gInVkZGkvYWN0aW9ucy9Mb2dvdXRBZHZhbmNlZEFjdGlvbkpTUC5qc3AiOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUb1JlZ2lzdHJ5TGluaygpIAotICB7Ci0gIAlmb3JtTGluayA9ICIiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgRW51bWVyYXRpb24gZ2V0RmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzKCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBmYXZvcml0ZXNOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVzTWFpbkVsZW1lbnQgPSBmYXZvcml0ZXNOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVSZWdpc3RyaWVzRWxlbWVudCA9IChUcmVlRWxlbWVudCkoZmF2b3JpdGVzTWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUpLm5leHRFbGVtZW50KCkpOwotICAgIHJldHVybiBmYXZvcml0ZVJlZ2lzdHJpZXNFbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDU3ZDFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RGaW5kVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCBpbXBsZW1lbnRzIE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIFRvb2xNYW5hZ2VyIGludmlzaWJsZVRvb2xNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBSZWdGaW5kVG9vbCByZWdGaW5kVG9vbF87Ci0KLSAgcHVibGljIE1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsICJ1ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19lbmFibGVkLmdpZiIsICJ1ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIGludmlzaWJsZVRvb2xNYW5hZ2VyXyA9IG5ldyBUb29sTWFuYWdlcih0b29sTWFuYWdlci5nZXROb2RlKCkpOwotICAgIHJlZ0ZpbmRUb29sXyA9IG5ldyBSZWdGaW5kVG9vbChpbnZpc2libGVUb29sTWFuYWdlcl8sIiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBTdHJpbmcgc2ltcGxlU3R5bGVTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGdldEZvcm1Ub29sUHJvcGVydGllcyhPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QpCi0gIHsKLSAgICAvLyBFbXB0eS9Ob24tZXhpc3RlbnQgc3VicXVlcnlrZXkgaW1wbGllcyBwdWJsaXNoIGZvcm0uIEFsbCBlbHNlIGltcGxpZXMgcXVlcnkgZm9ybS4KLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiB0aGlzOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5T2JqZWN0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICByZXR1cm4gU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxzdWJRdWVyeUtleSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIGlmICh1c2VySWQgPT0gbnVsbCkKLSAgICAgIHVzZXJJZCA9ICIiOwotICAgIGlmIChwYXNzd29yZCA9PSBudWxsKQotICAgICAgcGFzc3dvcmQgPSAiIjsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICByZWdGaW5kVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICBPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QgPSBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gbnVsbDsKLSAgICBpZiAoc3ViUXVlcnlLZXlPYmplY3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJJRVNfUFJPUEVSVElFUyk7Ci0gICAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Ugc3ViUXVlcnlQcm9wZXJ0aWVzID0gZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5T2JqZWN0KTsKLSAgICAgIE9iamVjdCBzdWJRdWVyeUdldE9iamVjdCA9IHN1YlF1ZXJ5UHJvcGVydGllcy5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCk7Ci0gICAgICBpZiAoc3ViUXVlcnlHZXRPYmplY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0ID0gKChCb29sZWFuKXN1YlF1ZXJ5R2V0T2JqZWN0KS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGlzU3ViUXVlcnlHZXQpCi0gICAgICAgICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL0dldEZvcm0uanNwIjsKLSAgICAgIH0KLSAgICAgIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICB9Ci0KLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gUHJveHlMb2FkUGFnZUFjdGlvbi5nZXRBY3Rpb25MaW5rKCJ1ZGRpL2Zvcm1zL01hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNGb3JtLmpzcCIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybUxpbmsoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNzg5ZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdEZpbmRUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sIGV4dGVuZHMgRm9ybVRvb2wgaW1wbGVtZW50cyBNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBUb29sTWFuYWdlciBpbnZpc2libGVUb29sTWFuYWdlcl87Ci0gIHByaXZhdGUgUmVnRmluZFRvb2wgcmVnRmluZFRvb2xfOwotCi0gIHB1YmxpYyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsICJ1ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2VuYWJsZWQuZ2lmIiwgInVkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICBpbnZpc2libGVUb29sTWFuYWdlcl8gPSBuZXcgVG9vbE1hbmFnZXIodG9vbE1hbmFnZXIuZ2V0Tm9kZSgpKTsKLSAgICByZWdGaW5kVG9vbF8gPSBuZXcgUmVnRmluZFRvb2woaW52aXNpYmxlVG9vbE1hbmFnZXJfLCIiKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIFN0cmluZyBzaW1wbGVTdHlsZVN0cmluZyA9IFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCkKLSAgewotICAgIC8vIEVtcHR5L05vbi1leGlzdGVudCBzdWJxdWVyeWtleSBpbXBsaWVzIHB1Ymxpc2ggZm9ybS4gQWxsIGVsc2UgaW1wbGllcyBxdWVyeSBmb3JtLgotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpc3ViUXVlcnlLZXlPYmplY3Q7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5ID09IG51bGwgfHwgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPCAxKQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHJldHVybiBTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLHN1YlF1ZXJ5S2V5LGZvckhpc3RvcnkpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotICAgIAotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotICAgICAgCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgIHJlZ0ZpbmRUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCA9IGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBudWxsOwotICAgIGlmIChzdWJRdWVyeUtleU9iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBzdWJRdWVyeVByb3BlcnRpZXMgPSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICAgICAgT2JqZWN0IHN1YlF1ZXJ5R2V0T2JqZWN0ID0gc3ViUXVlcnlQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICAgIGlmIChzdWJRdWVyeUdldE9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBib29sZWFuIGlzU3ViUXVlcnlHZXQgPSAoKEJvb2xlYW4pc3ViUXVlcnlHZXRPYmplY3QpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoaXNTdWJRdWVyeUdldCkKLSAgICAgICAgICByZXR1cm4gInVkZGkvZm9ybXMvR2V0Rm9ybS5qc3AiOwotICAgICAgfQotICAgICAgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIH0KLQotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNGb3JtLmpzcCI7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtTGluaygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTBjODg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotCi1wdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIHB1YmxpYyBhYnN0cmFjdCBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKE9iamVjdCBrZXkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL09wZW5SZWdpc3RyeVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9PcGVuUmVnaXN0cnlUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMzBjOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL09wZW5SZWdpc3RyeVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyNCAgIDEyMjc1MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuUmVnaXN0cnlUb29sIGV4dGVuZHMgRm9ybVRvb2wKLXsKLSAgcHJpdmF0ZSBDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICAKLSAgcHVibGljIE9wZW5SZWdpc3RyeVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJ1ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgY29udHJvbGxlcl8gPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldERlZmF1bHRVRERJUmVnaXN0cnkoKS5nZXROYW1lKCkpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwsdWRkaVBlcnNwZWN0aXZlLmdldERlZmF1bHRVRERJUmVnaXN0cnkoKS5nZXRJbnF1aXJ5VVJMKCkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvZm9ybXMvT3BlblJlZ2lzdHJ5Rm9ybS5qc3AiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgRW51bWVyYXRpb24gZ2V0RmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzKCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBmYXZvcml0ZXNOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVzTWFpbkVsZW1lbnQgPSBmYXZvcml0ZXNOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVSZWdpc3RyaWVzRWxlbWVudCA9IChUcmVlRWxlbWVudCkoZmF2b3JpdGVzTWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUpLm5leHRFbGVtZW50KCkpOwotICAgIHJldHVybiBmYXZvcml0ZVJlZ2lzdHJpZXNFbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUHVibGlzaGVkSXRlbXNOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUHVibGlzaGVkSXRlbXNOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OTA0ZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1B1Ymxpc2hlZEl0ZW1zTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUHVibGlzaGVkSXRlbXNFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUHVibGlzaGVkSXRlbXNOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvckZvbGRlck5vZGUKLXsKLSAgcHVibGljIFB1Ymxpc2hlZEl0ZW1zTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCk7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKSkKLSAgICAgICAgewotICAgICAgICAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICBjcmVhdGVDaGlsZE5vZGUodHJlZUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKSkKLSAgICAgICAgICB0cmVlRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICBlbHNlIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfSVRFTVMpKQotICAgICAgICAgIHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZSh0cmVlRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50ID0gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCllbGVtZW50XzsKLSAgICBOb2RlIGNoaWxkTm9kZSA9IG51bGw7Ci0gICAgc3dpdGNoIChwdWJsaXNoZWRJdGVtc0VsZW1lbnQuZ2V0VHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIGNoaWxkTm9kZSA9IG5ldyBCdXNpbmVzc05vZGUoZWxlbWVudCxub2RlTWFuYWdlcl8sbm9kZURlcHRoXysxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgY2hpbGROb2RlID0gbmV3IFNlcnZpY2VOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICBjaGlsZE5vZGUgPSBuZXcgU2VydmljZUludGVyZmFjZU5vZGUoZWxlbWVudCxub2RlTWFuYWdlcl8sbm9kZURlcHRoXysxKTsKLSAgICB9Ci0gICAgaWYgKGNoaWxkTm9kZSAhPSBudWxsKQotICAgICAgYWRkQ2hpbGQoY2hpbGROb2RlKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQgPSAoUHVibGlzaGVkSXRlbXNFbGVtZW50KWVsZW1lbnRfOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIGludCBwdWJsaXNoZWRJdGVtc1R5cGUgPSBwdWJsaXNoZWRJdGVtc0VsZW1lbnQuZ2V0VHlwZSgpOwotICAgIHN3aXRjaCAocHVibGlzaGVkSXRlbXNUeXBlKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIG5ldyBJdGVtc1N1bW1hcnlUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VNTUFSWV9CVVNJTkVTU0VTIikscHVibGlzaGVkSXRlbXNUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgbmV3IEl0ZW1zU3VtbWFyeVRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfU0VSVklDRVMiKSxwdWJsaXNoZWRJdGVtc1R5cGUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5ldyBJdGVtc1N1bW1hcnlUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfU0VSVklDRV9JTlRFUkZBQ0VTIikscHVibGlzaGVkSXRlbXNUeXBlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3BlbkltYWdlUGF0aCgpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50ID0gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCllbGVtZW50XzsKLSAgICBpbnQgcHVibGlzaGVkSXRlbXNUeXBlID0gcHVibGlzaGVkSXRlbXNFbGVtZW50LmdldFR5cGUoKTsKLSAgICBzd2l0Y2ggKHB1Ymxpc2hlZEl0ZW1zVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfb3Blbl9oaWdobGlnaHRlZC5naWYiOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgIHJldHVybiAidWRkaS9pbWFnZXMvc2VydmljZXNfb3Blbl9oaWdobGlnaHRlZC5naWYiOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5nZXRPcGVuSW1hZ2VQYXRoKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkKLSAgewotICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQgPSAoUHVibGlzaGVkSXRlbXNFbGVtZW50KWVsZW1lbnRfOwotICAgIGludCBwdWJsaXNoZWRJdGVtc1R5cGUgPSBwdWJsaXNoZWRJdGVtc0VsZW1lbnQuZ2V0VHlwZSgpOwotICAgIHN3aXRjaCAocHVibGlzaGVkSXRlbXNUeXBlKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIHJldHVybiAidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmdldENsb3NlZEltYWdlUGF0aCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMmI4Y2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1F1ZXJ5Tm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLkZpbmRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgUXVlcnlOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHJpdmF0ZSBGb3JtVG9vbCByZWdGaW5kVG9vbF87Ci0gIHByaXZhdGUgRmluZEFjdGlvbiBmaW5kQWN0aW9uXzsKLSAgcHVibGljIFF1ZXJ5Tm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwidWRkaS9pbWFnZXMvcXVlcnkuZ2lmIik7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUllfUkVTVUxUUykpCi0gICAgICAgIHsKLSAgICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgY3JlYXRlQ2hpbGROb2RlKHRyZWVFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMpKQotICAgICAgICAgIHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMpKQotICAgICAgICAgIHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZSh0cmVlRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgY3JlYXRlQ2hpbGRyZW4oKTsKLSAgICBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgZmluZEFjdGlvbl8gPSBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkcmVuKCkKLSAgewotICAgIFZlY3RvciBpbml0aWFsUmVzdWx0cyA9IChWZWN0b3IpZWxlbWVudF8uZ2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuSU5JVElBTF9SRVNVTFRTKTsKLSAgICBmb3IgKGludCBpPTA7aTxpbml0aWFsUmVzdWx0cy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBpbml0aWFsUmVzdWx0cy5lbGVtZW50QXQoaSk7Ci0gICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJ1c2luZXNzRW50aXR5KQotICAgICAgICBjaGlsZEVsZW1lbnQgPSBuZXcgQnVzaW5lc3NFbGVtZW50KChCdXNpbmVzc0VudGl0eSlvYmplY3QsZWxlbWVudF8uZ2V0TW9kZWwoKSk7Ci0gICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCdXNpbmVzc1NlcnZpY2UpCi0gICAgICAgIGNoaWxkRWxlbWVudCA9IG5ldyBTZXJ2aWNlRWxlbWVudCgoQnVzaW5lc3NTZXJ2aWNlKW9iamVjdCxlbGVtZW50Xy5nZXRNb2RlbCgpKTsKLSAgICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFRNb2RlbCkKLSAgICAgICAgY2hpbGRFbGVtZW50ID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KChUTW9kZWwpb2JqZWN0LGVsZW1lbnRfLmdldE1vZGVsKCkpOwotICAgICAgaWYgKGNoaWxkRWxlbWVudCAhPSBudWxsKQotICAgICAgICBlbGVtZW50Xy5jb25uZWN0KGNoaWxkRWxlbWVudCxVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBOb2RlIGNoaWxkTm9kZSA9IG51bGw7Ci0gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0VsZW1lbnQpCi0gICAgICBjaGlsZE5vZGUgPSBuZXcgQnVzaW5lc3NOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VFbGVtZW50KQotICAgICAgY2hpbGROb2RlID0gbmV3IFNlcnZpY2VOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KQotICAgICAgY2hpbGROb2RlID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgaWYgKGNoaWxkTm9kZSAhPSBudWxsKQotICAgICAgYWRkQ2hpbGQoY2hpbGROb2RlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBSZXN1bHRzVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfUkVTVUxUUyIpKTsKLSAgICByZWdGaW5kVG9vbF8gPSBuZXcgUmVnRmluZFRvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRklORCIpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEZpbmRUb29sUHJvcGVydGllcyhGaW5kQWN0aW9uIGZpbmRBY3Rpb24pCi0gIHsKLSAgICBmaW5kQWN0aW9uXyA9IGZpbmRBY3Rpb247Ci0gICAgcmVnRmluZFRvb2xfLnVwZGF0ZVByb3BlcnR5VGFibGUoZmluZEFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgKChSZWdGaW5kVG9vbClyZWdGaW5kVG9vbF8pLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICBWZWN0b3IgY2hpbGROb2RlcyA9IGdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTxjaGlsZE5vZGVzLnNpemUoKTtpKyspCi0gICAgewotICAgICAgVURESU5hdmlnYXRvck5vZGUgbmF2aWdhdG9yTm9kZSA9IChVRERJTmF2aWdhdG9yTm9kZSljaGlsZE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIG5hdmlnYXRvck5vZGUuYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGaW5kQWN0aW9uIGdldEZpbmRBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIGZpbmRBY3Rpb25fOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlQYXJlbnROb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlQYXJlbnROb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZjQyZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1F1ZXJ5UGFyZW50Tm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFF1ZXJ5UGFyZW50Tm9kZSBleHRlbmRzIFVERElOYXZpZ2F0b3JGb2xkZXJOb2RlCi17Ci0gIHB1YmxpYyBRdWVyeVBhcmVudE5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVMpKQotICAgICAgICB7Ci0gICAgICAgICAgUXVlcnlFbGVtZW50IHF1ZXJ5RWxlbWVudCA9IChRdWVyeUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIGNyZWF0ZUNoaWxkTm9kZShxdWVyeUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFF1ZXJ5RWxlbWVudCBxdWVyeUVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTKSkKLSAgICAgICAgICBxdWVyeUVsZW1lbnQgPSAoUXVlcnlFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVMpKQotICAgICAgICAgIHF1ZXJ5RWxlbWVudCA9IChRdWVyeUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0KLSAgICAgICAgaWYgKHF1ZXJ5RWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShxdWVyeUVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkTm9kZShRdWVyeUVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIFF1ZXJ5Tm9kZSBxdWVyeU5vZGUgPSBuZXcgUXVlcnlOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgLy8gQWRkIHJlZ2lzdHJ5IGF1dGhlbnRpY2F0aW9uIHByb3BlcnRpZXMuCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KShnZXRQYXJlbnQoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICBxdWVyeU5vZGUuYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIGFkZENoaWxkKHF1ZXJ5Tm9kZSk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfUVVFUklFUyIpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9RVUVSSUVTKTsKLSAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfQlVTSU5FU1NFUyIpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKTsKLSAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VNTUFSWV9TRVJWSUNFUyIpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyk7Ci0gICAgbmV3IEl0ZW1zU3VtbWFyeVRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VNTUFSWV9TRVJWSUNFX0lOVEVSRkFDRVMiKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRPcGVuSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiAidWRkaS9pbWFnZXMvcXVlcmllc19vcGVuX2hpZ2hsaWdodGVkLmdpZiI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiAidWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZnJlc2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVmcmVzaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4YTFiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVmcmVzaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuUmVmcmVzaFVERElOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoVG9vbCBleHRlbmRzIEFjdGlvblRvb2wKLXsKLSAgcHVibGljIFJlZnJlc2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiLCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuIFJlZnJlc2hVRERJTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZUlkKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnRmluZFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdGaW5kVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDQ1MTY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdGaW5kVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdEZpbmRUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kVG9vbCBleHRlbmRzIEZvcm1Ub29sIGltcGxlbWVudHMgTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UKLXsKLSAgcHVibGljIFJlZ0ZpbmRUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwidWRkaS9pbWFnZXMvZmluZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIGluaXREZWZhdWx0UHJvcGVydGllcyh0aGlzKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSSUVTX1BST1BFUlRJRVMsbmV3IEhhc2h0YWJsZSgpKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkRFRkFVTFRfUVVFUllfTkFNRSIpKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpCi0gIHsKLSAgICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBTdHJpbmcgc2ltcGxlU3R5bGVTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0KLSAgICBTdHJpbmcgbWF4U2VhcmNoU2V0ID0gU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgU3RyaW5nIG1heFJlc3VsdHMgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKTsKLQotICAgIC8vIFJlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uIGlucHV0cwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSwiIik7Ci0KLSAgICAvLyBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uIGlucHV0cwotICAgIC8vIFRoZSBhdXRoZW50aWNhdGlvbiBpbnB1dHMgbXVzdCBiZSBhZGRlZCBsYXRlciBhcyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHdlIGNhbiBnZXQgYSB2YWxpZCBoYW5kbGUKLSAgICAvLyB0byB0aGUgUmVnaXN0cnlFbGVtZW50IGluIHRoZSBjYXNlIG9mIGEgcXVlcnkgbm9kZS4KLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQsbWF4U2VhcmNoU2V0KTsKLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0KLSAgICAvLyBSZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUsIiIpOwotCi0gICAgLy8gUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24gaW5wdXRzCi0gICAgLy8gVGhlIGF1dGhlbnRpY2F0aW9uIGlucHV0cyBtdXN0IGJlIGFkZGVkIGxhdGVyIGFzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgd2UgY2FuIGdldCBhIHZhbGlkIGhhbmRsZQotICAgIC8vIHRvIHRoZSBSZWdpc3RyeUVsZW1lbnQgaW4gdGhlIGNhc2Ugb2YgYSBxdWVyeSBub2RlLgotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0KLSAgICAvLyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLCIiKTsKLQotICAgIC8vIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uIGlucHV0cwotICAgIC8vIFRoZSBhdXRoZW50aWNhdGlvbiBpbnB1dHMgbXVzdCBiZSBhZGRlZCBsYXRlciBhcyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHdlIGNhbiBnZXQgYSB2YWxpZCBoYW5kbGUKLSAgICAvLyB0byB0aGUgUmVnaXN0cnlFbGVtZW50IGluIHRoZSBjYXNlIG9mIGEgcXVlcnkgbm9kZS4KLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSwiIik7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0KQotICB7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gdGhpczsKLSAgICBIYXNodGFibGUgc3ViUXVlcmllc1Byb3BlcnRpZXMgPSAoSGFzaHRhYmxlKWdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Ugc3ViUXVlcnlQcm9wZXJ0aWVzID0gKEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlzdWJRdWVyaWVzUHJvcGVydGllcy5nZXQoc3ViUXVlcnlLZXkpOwotICAgIGlmIChzdWJRdWVyeVByb3BlcnRpZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBzdWJRdWVyeVByb3BlcnRpZXMgPSBuZXcgRm9ybVRvb2xQcm9wZXJ0aWVzKCk7Ci0gICAgICBpbml0RGVmYXVsdFByb3BlcnRpZXMoc3ViUXVlcnlQcm9wZXJ0aWVzKTsKLSAgICAgIHN1YlF1ZXJpZXNQcm9wZXJ0aWVzLnB1dChzdWJRdWVyeUtleSxzdWJRdWVyeVByb3BlcnRpZXMpOwotICAgIH0KLSAgICByZXR1cm4gc3ViUXVlcnlQcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHJldHVybiBTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLHN1YlF1ZXJ5S2V5LGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICBPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QgPSBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5T2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSSUVTX1BST1BFUlRJRVMpOwotICAgICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHN1YlF1ZXJ5UHJvcGVydGllcyA9IGdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gICAgICBPYmplY3Qgc3ViUXVlcnlHZXRPYmplY3QgPSBzdWJRdWVyeVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgICAgaWYgKHN1YlF1ZXJ5R2V0T2JqZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJvb2xlYW4gaXNTdWJRdWVyeUdldCA9ICgoQm9vbGVhbilzdWJRdWVyeUdldE9iamVjdCkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChpc1N1YlF1ZXJ5R2V0KQotICAgICAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9HZXRGb3JtLmpzcCI7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAidWRkaS9mb3Jtcy9SZWdGaW5kRm9ybS5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnUHVibGlzaFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdQdWJsaXNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWIyZTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdQdWJsaXNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0RmluZFRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hUb29sIGV4dGVuZHMgRm9ybVRvb2wgaW1wbGVtZW50cyBNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBUb29sTWFuYWdlciBpbnZpc2libGVUb29sTWFuYWdlcl87Ci0gIHByaXZhdGUgUmVnRmluZFRvb2wgcmVnRmluZFRvb2xfOwotICBwdWJsaWMgUmVnUHVibGlzaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJ1ZGRpL2ltYWdlcy9wdWJsaXNoX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvcHVibGlzaF9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gICAgaW52aXNpYmxlVG9vbE1hbmFnZXJfID0gbmV3IFRvb2xNYW5hZ2VyKHRvb2xNYW5hZ2VyLmdldE5vZGUoKSk7Ci0gICAgcmVnRmluZFRvb2xfID0gbmV3IFJlZ0ZpbmRUb29sKGludmlzaWJsZVRvb2xNYW5hZ2VyXywiIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLCIiKTsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgIFN0cmluZyBzaW1wbGVTdHlsZVN0cmluZyA9IFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTiwiIik7Ci0KLSAgICAvLyBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04sIiIpOwotCi0gICAgLy8gUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwsIiIpOwotCi0gICAgLy8gUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OLCIiKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLCIiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIGlmICh1c2VySWQgPT0gbnVsbCkKLSAgICAgIHVzZXJJZCA9ICIiOwotICAgIGlmIChwYXNzd29yZCA9PSBudWxsKQotICAgICAgcGFzc3dvcmQgPSAiIjsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICByZWdGaW5kVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0KQotICB7Ci0gICAgLy8gRW1wdHkvTm9uLWV4aXN0ZW50IHN1YnF1ZXJ5a2V5IGltcGxpZXMgcHVibGlzaCBmb3JtLiBBbGwgZWxzZSBpbXBsaWVzIHF1ZXJ5IGZvcm0uCi0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gdGhpczsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcmVnRmluZFRvb2xfLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgcmV0dXJuIFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksc3ViUXVlcnlLZXksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCA9IGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBudWxsOwotICAgIGlmIChzdWJRdWVyeUtleU9iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBzdWJRdWVyeVByb3BlcnRpZXMgPSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICAgICAgT2JqZWN0IHN1YlF1ZXJ5R2V0T2JqZWN0ID0gc3ViUXVlcnlQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICAgIGlmIChzdWJRdWVyeUdldE9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBib29sZWFuIGlzU3ViUXVlcnlHZXQgPSAoKEJvb2xlYW4pc3ViUXVlcnlHZXRPYmplY3QpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoaXNTdWJRdWVyeUdldCkKLSAgICAgICAgICByZXR1cm4gInVkZGkvZm9ybXMvR2V0Rm9ybS5qc3AiOwotICAgICAgfQotICAgICAgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIH0KLSAgICAgIAotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9SZWdQdWJsaXNoRm9ybS5qc3AiOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybUxpbmsoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdpc3RyeURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkOTc1OGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgZXh0ZW5kcyBEZXRhaWxzVG9vbAotewotICBwdWJsaWMgUmVnaXN0cnlEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0LFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9SZWdEZXRhaWxzRm9ybS5qc3AiKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FLHJlZ0VsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5Tm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjg3ODQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdpc3RyeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5QdWJsaXNoZWRJdGVtc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlQYXJlbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeU5vZGUgZXh0ZW5kcyBVRERJTmF2aWdhdG9yTm9kZQotewotICBwcml2YXRlIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgcmVnRGV0YWlsc1Rvb2xfOwotICBwcml2YXRlIFJlZ1B1Ymxpc2hUb29sIHJlZ1B1Ymxpc2hUb29sXzsKLSAgcHJpdmF0ZSBMb2dpblRvb2wgbG9naW5Ub29sXzsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX1BBVEhfU1RBTkRBUkQgPSAidWRkaS9pbWFnZXMvcmVnaXN0cnkuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1BR0VfUEFUSF9XSVRIX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTID0gInVkZGkvaW1hZ2VzL3JlZ3N0cnljYXRfb2JqLmdpZiI7Ci0gIAotICBwdWJsaWMgUmVnaXN0cnlOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsaW1hZ2VQYXRoKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkpCi0gICAgICAgIHsKLSAgICAgICAgICBRdWVyeVBhcmVudEVsZW1lbnQgcXVlcnlQYXJlbnRFbGVtZW50ID0gKFF1ZXJ5UGFyZW50RWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgY3JlYXRlQ2hpbGROb2RlKHF1ZXJ5UGFyZW50RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXNQdWJsaXNoZWRJdGVtc1JlbChyZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZEl0ZW1zRWxlbWVudCA9IChQdWJsaXNoZWRJdGVtc0VsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIGNyZWF0ZUNoaWxkTm9kZShwdWJsaXNoZWRJdGVtc0VsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBTdHJpbmcgaW5Cb3VuZFJlbE5hbWUgPSBldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpOwotICAgICAgICBTdHJpbmcgb3V0Qm91bmRSZWxOYW1lID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChpbkJvdW5kUmVsTmFtZS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkgfHwgaXNQdWJsaXNoZWRJdGVtc1JlbChpbkJvdW5kUmVsTmFtZSkpCi0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIGVsc2UgaWYgKG91dEJvdW5kUmVsTmFtZS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkgfHwgaXNQdWJsaXNoZWRJdGVtc1JlbChvdXRCb3VuZFJlbE5hbWUpKQotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLQotICAgICAgICBpZiAoY2hpbGRFbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZWxlbWVudC5jb25uZWN0KG5ldyBRdWVyeVBhcmVudEVsZW1lbnQodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9RVUVSSUVTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFU19QQVJFTlQsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBlbGVtZW50LmNvbm5lY3QobmV3IFB1Ymxpc2hlZEl0ZW1zRWxlbWVudChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX1BVQkxJU0hFRF9CVVNJTkVTU0VTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0JVU0lORVNTRVNfUEFSRU5ULE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgZWxlbWVudC5jb25uZWN0KG5ldyBQdWJsaXNoZWRJdGVtc0VsZW1lbnQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfUFVCTElTSEVEX1NFUlZJQ0VTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VTX1BBUkVOVCxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGVsZW1lbnQuY29ubmVjdChuZXcgUHVibGlzaGVkSXRlbXNFbGVtZW50KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9QVUJMSVNIRURfU0VSVklDRV9JTlRFUkZBQ0VTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19QQVJFTlQsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNQdWJsaXNoZWRJdGVtc1JlbChTdHJpbmcgcmVsKQotICB7Ci0gICAgcmV0dXJuIHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfQlVTSU5FU1NFU19QQVJFTlQpIHx8IHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfU0VSVklDRVNfUEFSRU5UKSB8fCByZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19QQVJFTlQpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkTm9kZShRdWVyeVBhcmVudEVsZW1lbnQgcXVlcnlQYXJlbnRFbGVtZW50KQotICB7Ci0gICAgUXVlcnlQYXJlbnROb2RlIHF1ZXJ5UGFyZW50Tm9kZSA9IG5ldyBRdWVyeVBhcmVudE5vZGUocXVlcnlQYXJlbnRFbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgIGFkZENoaWxkKHF1ZXJ5UGFyZW50Tm9kZSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc05vZGUgcHVibGlzaGVkSXRlbXNOb2RlID0gbmV3IFB1Ymxpc2hlZEl0ZW1zTm9kZShwdWJsaXNoZWRJdGVtc0VsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgYWRkQ2hpbGQocHVibGlzaGVkSXRlbXNOb2RlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHJlZ0RldGFpbHNUb29sXyA9IG5ldyBSZWdpc3RyeURldGFpbHNUb29sKHRvb2xNYW5hZ2VyXyAsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9SRUdJU1RSWV9ERVRBSUxTIikpOwotICAgIFJlZ0ZpbmRUb29sIHJlZ0ZpbmRUb29sID0gbmV3IFJlZ0ZpbmRUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZJTkQiKSk7Ci0gICAgcmVnUHVibGlzaFRvb2xfID0gbmV3IFJlZ1B1Ymxpc2hUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1BVQkxJU0giKSk7Ci0gICAgbG9naW5Ub29sXyA9IG5ldyBMb2dpblRvb2wodG9vbE1hbmFnZXJfLCB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xPR0lOIikpOwotICAgIG5ldyBBZGRUb0Zhdm9yaXRlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICByZWdGaW5kVG9vbC5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoKFJlZ2lzdHJ5RWxlbWVudCllbGVtZW50Xyk7Ci0gICAgcmVnUHVibGlzaFRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcygoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgZ2V0UmVnRGV0YWlsc1Rvb2woKQotICB7Ci0gICAgcmV0dXJuIHJlZ0RldGFpbHNUb29sXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBSZWdQdWJsaXNoVG9vbCBnZXRSZWdQdWJsaXNoVG9vbCgpCi0gIHsKLSAgICByZXR1cm4gcmVnUHVibGlzaFRvb2xfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIExvZ2luVG9vbCBnZXRMb2dpblRvb2woKQotICB7Ci0gICAgcmV0dXJuIGxvZ2luVG9vbF87Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgYWRkRGlzY292ZXJlZE5vZGVzKFZlY3RvciBhbGxOb2RlcyxOb2RlIHF1ZXJ5UGFyZW50Tm9kZSxpbnQgcXVlcnlUeXBlKQotICB7Ci0gICAgVmVjdG9yIHF1ZXJ5Tm9kZXMgPSBxdWVyeVBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgIGZvciAoaW50IGk9MDtpPHF1ZXJ5Tm9kZXMuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBRdWVyeU5vZGUgcXVlcnlOb2RlID0gKFF1ZXJ5Tm9kZSlxdWVyeU5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIFF1ZXJ5RWxlbWVudCBxdWVyeUVsZW1lbnQgPSAoUXVlcnlFbGVtZW50KXF1ZXJ5Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKHF1ZXJ5VHlwZSA9PSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fUVVFUklFUykKLSAgICAgICAgYWxsTm9kZXMuYWRkRWxlbWVudChxdWVyeU5vZGUpOwotICAgICAgZWxzZSBpZiAocXVlcnlFbGVtZW50LmdldFF1ZXJ5VHlwZSgpID09IHF1ZXJ5VHlwZSkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIGRpc2NvdmVyZWROb2RlcyA9IHF1ZXJ5Tm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGo9MDtqPGRpc2NvdmVyZWROb2Rlcy5zaXplKCk7aisrKQotICAgICAgICAgIGFsbE5vZGVzLmFkZEVsZW1lbnQoZGlzY292ZXJlZE5vZGVzLmVsZW1lbnRBdChqKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGFkZFB1Ymxpc2hlZE5vZGVzKFZlY3RvciBhbGxOb2RlcyxOb2RlIHB1Ymxpc2hlZEl0ZW1zTm9kZSkKLSAgewotICAgIFZlY3RvciBpdGVtTm9kZXMgPSBwdWJsaXNoZWRJdGVtc05vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgIGZvciAoaW50IGk9MDtpPGl0ZW1Ob2Rlcy5zaXplKCk7aSsrKQotICAgICAgYWxsTm9kZXMuYWRkRWxlbWVudChpdGVtTm9kZXMuZWxlbWVudEF0KGkpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGdldEFsbEJ1c2luZXNzTm9kZXMoVmVjdG9yIGFsbEJ1c2luZXNzTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBxdWVyeVBhcmVudE5vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKSk7Ci0gICAgTm9kZSBwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZSA9IGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50KCkpOwotICAgIGFkZERpc2NvdmVyZWROb2RlcyhhbGxCdXNpbmVzc05vZGVzLHF1ZXJ5UGFyZW50Tm9kZSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMoYWxsQnVzaW5lc3NOb2RlcyxwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXRBbGxTZXJ2aWNlTm9kZXMoVmVjdG9yIGFsbFNlcnZpY2VzTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBxdWVyeVBhcmVudE5vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKSk7Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlc0VsZW1lbnQoKSk7Ci0gICAgYWRkRGlzY292ZXJlZE5vZGVzKGFsbFNlcnZpY2VzTm9kZXMscXVlcnlQYXJlbnROb2RlLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMoYWxsU2VydmljZXNOb2RlcyxwdWJsaXNoZWRTZXJ2aWNlc05vZGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2V0QWxsU2VydmljZUludGVyZmFjZU5vZGVzKFZlY3RvciBhbGxTZXJ2aWNlSW50ZXJmYWNlTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBxdWVyeVBhcmVudE5vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKSk7Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKSk7Ci0gICAgYWRkRGlzY292ZXJlZE5vZGVzKGFsbFNlcnZpY2VJbnRlcmZhY2VOb2RlcyxxdWVyeVBhcmVudE5vZGUsVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMoYWxsU2VydmljZUludGVyZmFjZU5vZGVzLHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzTm9kZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXRQdWJsaXNoZWRCdXNpbmVzc05vZGVzKFZlY3RvciBwdWJsaXNoZWRCdXNpbmVzc05vZGVzKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkQnVzaW5lc3Nlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCgpKTsKLSAgICBhZGRQdWJsaXNoZWROb2RlcyhwdWJsaXNoZWRCdXNpbmVzc05vZGVzLHB1Ymxpc2hlZEJ1c2luZXNzZXNOb2RlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGdldFB1Ymxpc2hlZFNlcnZpY2VOb2RlcyhWZWN0b3IgcHVibGlzaGVkU2VydmljZU5vZGVzKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkU2VydmljZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZXNFbGVtZW50KCkpOwotICAgIGFkZFB1Ymxpc2hlZE5vZGVzKHB1Ymxpc2hlZFNlcnZpY2VOb2RlcyxwdWJsaXNoZWRTZXJ2aWNlc05vZGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZU5vZGVzKFZlY3RvciBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKSk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMocHVibGlzaGVkU2VydmljZUludGVyZmFjZU5vZGVzLHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzTm9kZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXREaXNjb3ZlcmVkTm9kZXMoVmVjdG9yIGRpc2NvdmVyZWROb2RlcyxpbnQgcXVlcnlJdGVtKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcXVlcnlQYXJlbnROb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpOwotICAgIGFkZERpc2NvdmVyZWROb2RlcyhkaXNjb3ZlcmVkTm9kZXMscXVlcnlQYXJlbnROb2RlLHF1ZXJ5SXRlbSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaGFzUXVlcnlSZXN1bHRzKE5vZGUgcXVlcnlQYXJlbnROb2RlLGludCBxdWVyeVR5cGUpCi0gIHsKLSAgICBWZWN0b3IgcXVlcmllcyA9IHF1ZXJ5UGFyZW50Tm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8cXVlcmllcy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIFF1ZXJ5Tm9kZSBxdWVyeU5vZGUgPSAoUXVlcnlOb2RlKXF1ZXJpZXMuZWxlbWVudEF0KGkpOwotICAgICAgaWYgKHF1ZXJ5Tm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgUXVlcnlFbGVtZW50IHF1ZXJ5RWxlbWVudCA9IChRdWVyeUVsZW1lbnQpcXVlcnlOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIGlmIChxdWVyeUVsZW1lbnQuZ2V0UXVlcnlUeXBlKCkgPT0gcXVlcnlUeXBlKQotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNCdXNpbmVzcygpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZSA9IGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50KCkpOwotICAgIGlmIChwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBoYXNRdWVyeVJlc3VsdHMoZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhc1NlcnZpY2UoKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkU2VydmljZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZXNFbGVtZW50KCkpOwotICAgIGlmIChwdWJsaXNoZWRTZXJ2aWNlc05vZGUuZ2V0Q2hpbGROb2RlcygpLnNpemUoKSA+IDApCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gaGFzUXVlcnlSZXN1bHRzKGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFF1ZXJ5UGFyZW50RWxlbWVudCgpKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFzU2VydmljZUludGVyZmFjZSgpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKSk7Ci0gICAgaWYgKHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzTm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBoYXNRdWVyeVJlc3VsdHMoZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVzdWx0c1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZXN1bHRzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjU3ZjZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZXN1bHRzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFJlc3VsdHNUb29sIGV4dGVuZHMgRm9ybVRvb2wKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgZm9ybUxpbmtfOwotCi0gIHB1YmxpYyBSZXN1bHRzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICAgIGZvcm1MaW5rXyA9IFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9SZXN1bHRzRm9ybS5qc3AiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGZvcm1MaW5rXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1Jvb3RDYXRlZ29yeU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9Sb290Q2F0ZWdvcnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMWMwY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1Jvb3RDYXRlZ29yeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJvb3RDYXRlZ29yeU5vZGUgZXh0ZW5kcyBOb2RlCi17Ci0gIHB1YmxpYyBSb290Q2F0ZWdvcnlOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLDEsImltYWdlcy9yb290X21haW4uZ2lmIik7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4odHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjcmVhdGVDaGlsZHJlbigpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBjaGlsZHJlbiA9IGVsZW1lbnRfLmdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfU1VCQ0FURUdPUklFUyk7Ci0gICAgaWYgKGNoaWxkcmVuICE9IG51bGwpCi0gICAgewotICAgICAgd2hpbGUgKGNoaWxkcmVuLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBDYXRlZ29yeUVsZW1lbnQgY2F0ZWdvcnlFbGVtZW50ID0gKENhdGVnb3J5RWxlbWVudCljaGlsZHJlbi5uZXh0RWxlbWVudCgpOwotICAgICAgICBDYXRlZ29yeU5vZGUgY2F0ZWdvcnlOb2RlID0gbmV3IENhdGVnb3J5Tm9kZShjYXRlZ29yeUVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgICAgIGFkZENoaWxkKGNhdGVnb3J5Tm9kZSk7Ci0gICAgICAgIGNhdGVnb3J5Tm9kZS5jcmVhdGVDaGlsZHJlbigpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFJvb3Qgbm9kZTogbm8gbmVlZCBmb3IgdG9nZ2xlIGFjdGlvbi4KLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLy8gVGV4dCBvbmx5IG5vZGUuCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTA2YmRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VEZXRhaWxzVG9vbCBleHRlbmRzIERldGFpbHNUb29sCi17Ci0gIHB1YmxpYyBTZXJ2aWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCxQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoInVkZGkvZm9ybXMvU2VydmljZURldGFpbHNGb3JtLmpzcCIpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBjbGVhclByb3BlcnR5VGFibGUoKTsKLSAgICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KSh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIEJ1c2luZXNzU2VydmljZSBidXNTZXJ2aWNlID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksYnVzU2VydmljZS5nZXRTZXJ2aWNlS2V5KCkpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksYnVzU2VydmljZS5nZXRCdXNpbmVzc0tleSgpKTsKLQotICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGNvcHlJbmRleFZlY3RvcihidXNTZXJ2aWNlLmdldE5hbWVWZWN0b3IoKSxuYW1lVmVjdG9yKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsbmFtZVZlY3Rvcik7Ci0KLSAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgY29weUluZGV4VmVjdG9yKGJ1c1NlcnZpY2UuZ2V0RGVzY3JpcHRpb25WZWN0b3IoKSxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0KLSAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBidXNTZXJ2aWNlLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgaWYgKGNhdEJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBjYXRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoY2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCksY2F0VmVjdG9yKTsKLSAgICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLGNhdFZlY3Rvcik7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdjOTg0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU2VydmljZUludGVyZmFjZURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZURldGFpbHNUb29sIGV4dGVuZHMgRGV0YWlsc1Rvb2wKLXsKLSAgcHVibGljIFNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0LFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Zvcm0uanNwIikpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIGNsZWFyUHJvcGVydHlUYWJsZSgpOwotICAgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCk7Ci0gICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KSh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIFRNb2RlbCB0TW9kZWwgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCk7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHRNb2RlbC5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgTGlzdEVsZW1lbnQgbmFtZUxpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpOwotICAgIG5hbWVMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oLTEsLTEsMCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWVMaXN0RWxlbWVudCk7Ci0KLSAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgY29weUluZGV4VmVjdG9yKHRNb2RlbC5nZXREZXNjcmlwdGlvblZlY3RvcigpLGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0KLSAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gdE1vZGVsLmdldElkZW50aWZpZXJCYWcoKTsKLSAgICBpZiAoaWRCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgaWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoaWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKSxpZFZlY3Rvcik7Ci0gICAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTLGlkVmVjdG9yKTsKLSAgICB9Ci0KLSAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSB0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICBpZiAoY2F0QmFnICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGNhdFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGNvcHlJbmRleFZlY3RvcihjYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKSxjYXRWZWN0b3IpOwotICAgICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTLGNhdFZlY3Rvcik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VJbnRlcmZhY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OTM4ZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VJbnRlcmZhY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZU5vZGUgZXh0ZW5kcyBVRERJTmF2aWdhdG9yTm9kZQotewotICBwcml2YXRlIERldGFpbHNUb29sIGRldGFpbHNUb29sXzsKLSAgcHJpdmF0ZSBVbnB1Ymxpc2hUb29sIHVucHVibGlzaFRvb2xfOwotICBwdWJsaWMgU2VydmljZUludGVyZmFjZU5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZGV0YWlsc1Rvb2xfID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIikpOwotICAgIG5ldyBHZXRTZXJ2aWNlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUX1NFUlZJQ0VTIiksU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXykpOwotICAgIG5ldyBHZXRCdXNpbmVzc2VzVG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0dFVF9CVVNJTkVTU0VTIiksU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfKSk7Ci0gICAgbmV3IFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKHRvb2xNYW5hZ2VyXyxjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKSk7Ci0gICAgbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgbmV3IFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTEFVTkNIX1dFQl9TRVJWSUNFX1dJWkFSRCIpKTsKLSAgICBuZXcgQWRkVG9GYXZvcml0ZXNUb29sKHRvb2xNYW5hZ2VyXywgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fRkFWT1JJVEVTIikpOwotICAgIHVucHVibGlzaFRvb2xfID0gbmV3IFVucHVibGlzaFRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1VOUFVCTElTSF9TRVJWSUNFX0lOVEVSRkFDRSIpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgZGV0YWlsc1Rvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICB1bnB1Ymxpc2hUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFVSTEZyb21EZXRhaWxzVG9vbCgpCi0gIHsKLSAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGV0YWlsc1Rvb2xfLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgIGlmICh3c2RsVVJMTGlzdEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHJldHVybiAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gInRlbXAud3NkbCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZWFjNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHJpdmF0ZSBEZXRhaWxzVG9vbCBkZXRhaWxzVG9vbF87Ci0gIHByaXZhdGUgVW5wdWJsaXNoVG9vbCB1bnB1Ymxpc2hUb29sXzsKLSAgcHVibGljIFNlcnZpY2VOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZGV0YWlsc1Rvb2xfID0gbmV3IFNlcnZpY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TRVJWSUNFX0RFVEFJTFMiKSk7Ci0gICAgbmV3IEdldEJ1c2luZXNzZXNUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvYnVzaW5lc3NfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9idXNpbmVzc19oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUX0JVU0lORVNTIiksU2VydmljZUdldEJ1c2luZXNzQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXykpOwotICAgIG5ldyBHZXRTZXJ2aWNlSW50ZXJmYWNlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUX1NFUlZJQ0VfSU5URVJGQUNFUyIpLFNlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8pKTsKLSAgICBuZXcgVURESUltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wodG9vbE1hbmFnZXJfLGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSCIpKTsKLSAgICBuZXcgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sKHRvb2xNYW5hZ2VyXyxjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0lNUE9SVF9UT19GUyIpKTsKLSAgICBuZXcgVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKHRvb2xNYW5hZ2VyXyxjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEIikpOwotICAgIG5ldyBVRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19XU0RMX1BFUlNQRUNUSVZFIikpOwotICAgIG5ldyBBZGRUb0Zhdm9yaXRlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICB1bnB1Ymxpc2hUb29sXyA9IG5ldyBVbnB1Ymxpc2hUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfVU5QVUJMSVNIX1NFUlZJQ0UiKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIGRldGFpbHNUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgdW5wdWJsaXNoVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMVVJMRnJvbURldGFpbHNUb29sKCkKLSAgewotICAgIExpc3RFbGVtZW50IHdzZGxVUkxMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXRhaWxzVG9vbF8uZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICBpZiAod3NkbFVSTExpc3RFbGVtZW50ICE9IG51bGwpCi0gICAgICByZXR1cm4gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICJ0ZW1wLndzZGwiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlLZXlQcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1N1YlF1ZXJ5S2V5UHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNhN2RkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlLZXlQcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBTdWJRdWVyeUtleVByb3BlcnR5Ci17Ci0gIHByaXZhdGUgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLQotICBwdWJsaWMgU3ViUXVlcnlLZXlQcm9wZXJ0eSgpCi0gIHsKLSAgICBzdWJRdWVyeUtleV8gPSAiIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN1YlF1ZXJ5S2V5KFN0cmluZyBzdWJRdWVyeUtleSkKLSAgewotICAgIHN1YlF1ZXJ5S2V5XyA9IHN1YlF1ZXJ5S2V5OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdWJRdWVyeUtleSgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlLZXlfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlUcmFuc2ZlclRhcmdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1N1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE5ZTYxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlUcmFuc2ZlclRhcmdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLQotcHVibGljIGNsYXNzIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQKLXsKLSAgcHJpdmF0ZSBpbnQgbm9kZUlkXzsKLSAgcHJpdmF0ZSBpbnQgdG9vbElkXzsKLSAgcHJpdmF0ZSBpbnQgdmlld0lkXzsKLSAgcHJpdmF0ZSBpbnQgdmlld1Rvb2xJZF87Ci0gIHByaXZhdGUgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLSAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gIEhhc2h0YWJsZSBwYXJlbnRRdWVyeURhdGFfOwotCi0gIHB1YmxpYyBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KE5vZGUgbm9kZSxTdHJpbmcgc3ViUXVlcnlLZXksSGFzaHRhYmxlIHBhcmVudFF1ZXJ5RGF0YSkKLSAgewotICAgIG5vZGVJZF8gPSBub2RlLmdldE5vZGVJZCgpOwotICAgIHRvb2xJZF8gPSBub2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgICB2aWV3SWRfID0gbm9kZS5nZXRWaWV3SWQoKTsKLSAgICB2aWV3VG9vbElkXyA9IG5vZGUuZ2V0Vmlld1Rvb2xJZCgpOwotICAgIHN1YlF1ZXJ5S2V5XyA9IHN1YlF1ZXJ5S2V5OwotICAgIG5vZGVNYW5hZ2VyXyA9IG5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBwYXJlbnRRdWVyeURhdGFfID0gcGFyZW50UXVlcnlEYXRhOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFRvb2xJZCgpCi0gIHsKLSAgICByZXR1cm4gdG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiB2aWV3SWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRWaWV3VG9vbElkKCkKLSAgewotICAgIHJldHVybiB2aWV3VG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3ViUXVlcnlLZXkoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5S2V5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbCBnZXRUYXJnZXRGb3JtVG9vbCgpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWRfKTsKLSAgICBpZiAobm9kZSA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBUb29sIHRvb2wgPSBub2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0VG9vbCh0b29sSWRfKTsKLQotICAgIGlmICh2aWV3SWRfICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICB7Ci0gICAgICBWaWV3VG9vbCB2aWV3VG9vbCA9IChWaWV3VG9vbCl0b29sOwotICAgICAgVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyID0gdmlld1Rvb2wuZ2V0VG9vbE1hbmFnZXIodmlld0lkXyk7Ci0gICAgICBpZiAodmlld1Rvb2xNYW5hZ2VyICE9IG51bGwpCi0gICAgICAgIHRvb2wgPSB2aWV3VG9vbE1hbmFnZXIuZ2V0VG9vbCh2aWV3VG9vbElkXyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHRvb2wgPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gKEZvcm1Ub29sKXRvb2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBIYXNodGFibGUgZ2V0UGFyZW50UXVlcnlEYXRhKCkKLSAgewotICAgIHJldHVybiBwYXJlbnRRdWVyeURhdGFfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTllMmI2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCB7Ci0gIHB1YmxpYyBVRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFVERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDg1YTAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvRmlsZVN5c3RlbVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbVRvb2wKLXsKLSAgcHVibGljIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZjMzYyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvV29ya2JlbmNoVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hUb29sCi17Ci0gIHB1YmxpYyBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q3ZTM2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sCi17Ci0gIHB1YmxpYyBVRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAidWRkaS9mb3Jtcy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElNYWluTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElNYWluTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzkwMDBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTWFpbk5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlVERElNYWluRWxlbWVudDsKLQotLy8gUm9vdCBub2RlIGZvciB0aGUgVURESSBOYXZpZ2F0b3IgVHJlZSBWaWV3Ci1wdWJsaWMgY2xhc3MgVURESU1haW5Ob2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIFVERElNYWluTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlciwxLCJpbWFnZXMvcm9vdF9tYWluLmdpZiIpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1JFR0lTVFJJRVMpKQotICAgICAgICB7Ci0gICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIFVERElNYWluRWxlbWVudCB1ZGRpTWFpbkVsZW1lbnQgPSAoVURESU1haW5FbGVtZW50KWVsZW1lbnRfOwotICAgICAgICAgIHVkZGlNYWluRWxlbWVudC5hZGRSZWdpc3RyeU5hbWUocmVnaXN0cnlFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgY3JlYXRlQ2hpbGROb2RlKHJlZ2lzdHJ5RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgUmVnaXN0cnlFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1JFR0lTVFJJRVMpKQotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUkVHSVNUUklFUykpCi0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLQotICAgICAgICBpZiAoY2hpbGRFbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBVRERJTWFpbkVsZW1lbnQgdWRkaU1haW5FbGVtZW50ID0gKFVERElNYWluRWxlbWVudCllbGVtZW50XzsKLSAgICAgICAgICB1ZGRpTWFpbkVsZW1lbnQucmVtb3ZlUmVnaXN0cnlOYW1lKGNoaWxkRWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudDsKLSAgICBFbnVtZXJhdGlvbiB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpOwotICAgIFN0cmluZyBpbWFnZVBhdGg7Ci0gICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsICYmIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIGltYWdlUGF0aCA9IFJlZ2lzdHJ5Tm9kZS5JTUFHRV9QQVRIX1dJVEhfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVM7Ci0gICAgZWxzZQotICAgICAgaW1hZ2VQYXRoID0gUmVnaXN0cnlOb2RlLklNQUdFX1BBVEhfU1RBTkRBUkQ7Ci0gICAgCi0gICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSBuZXcgUmVnaXN0cnlOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSxpbWFnZVBhdGgpOwotICAgIGFkZENoaWxkKHJlZ05vZGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IE9wZW5SZWdpc3RyeVRvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfT1BFTl9SRUdJU1RSWSIpKTsKLSAgfQotICAKLSAgLy8gR2l2ZW4gYSBub2RlIHVuZGVyIGEgcGFydGljdWxhciByZWdpc3RyeSBub2RlLCBvYnRhaW4gdGhlIHJlZ2lzdHJ5IG5vZGUuCi0gIHB1YmxpYyBmaW5hbCBSZWdpc3RyeU5vZGUgZ2V0UmVnaXN0cnlOb2RlKE5vZGUgY3VycmVudE5vZGUpCi0gIHsKLSAgICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IG51bGw7Ci0gICAgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgIHsKLSAgICAgIHJlZ05vZGUgPSAoUmVnaXN0cnlOb2RlKWN1cnJlbnROb2RlOwotICAgIH0KLSAgICBlbHNlIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICB7Ci0gICAgICAvLyBRdWVyeSAtPiBRdWVyeSBmb2xkZXIgLT4gUmVnaXN0cnkKLSAgICAgIHJlZ05vZGUgPSAoUmVnaXN0cnlOb2RlKShjdXJyZW50Tm9kZS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgUXVlcnlQYXJlbnROb2RlIHx8IGN1cnJlbnROb2RlIGluc3RhbmNlb2YgUHVibGlzaGVkSXRlbXNOb2RlKQotICAgIHsKLSAgICAgIC8vIFF1ZXJ5IGZvbGRlciAtPiBSZWdpc3RyeQotICAgICAgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpKGN1cnJlbnROb2RlLmdldFBhcmVudCgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUgfHwgY3VycmVudE5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSB8fCBjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgIHsKLSAgICAgIC8vIGl0ZW1Ob2RlIC0+IFB1Ymxpc2hlZCBJdGVtcyBmb2xkZXIgLT4gUmVnaXN0cnkKLSAgICAgIC8vIE9SOgotICAgICAgLy8gaXRlbU5vZGUgLT4gUXVlcnlOb2RlIC0+IFF1ZXJ5IGZvbGRlciAtPiBSZWdpc3RyeQotICAgICAgTm9kZSBwYXJlbnROb2RlID0gY3VycmVudE5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICBpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICAgICAgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpKHBhcmVudE5vZGUuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkpOwotICAgICAgZWxzZQotICAgICAgICByZWdOb2RlID0gKFJlZ2lzdHJ5Tm9kZSlwYXJlbnROb2RlLmdldFBhcmVudCgpOwotICAgIH0KLSAgICByZXR1cm4gcmVnTm9kZTsgICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElOYXZpZ2F0b3JGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YzhjZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElOYXZpZ2F0b3JGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvbGRlck5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVRERJTmF2aWdhdG9yRm9sZGVyTm9kZSBleHRlbmRzIEZvbGRlck5vZGUKLXsKLSAgcHVibGljIFVERElOYXZpZ2F0b3JGb2xkZXJOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGlzT3Blbl8pOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sZmFsc2UpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESU5hdmlnYXRvck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGUwNzI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVRERJTmF2aWdhdG9yTm9kZSBleHRlbmRzIE5vZGUKLXsKLSAgcHVibGljIFVERElOYXZpZ2F0b3JOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsaW1hZ2VQYXRoKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGlzT3Blbl8pOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJUGVyc3BlY3RpdmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJUGVyc3BlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdjYmRiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESVBlcnNwZWN0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjI0ICAgMTIyNzUyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLmZhdm9yaXRlcy5GYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5PcGVuUmVnaXN0cnlBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5SZWdGaW5kU2VydmljZVVVSURBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlVERElNYWluRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuSUZhdm9yaXRlc1VERElSZWdpc3RyeTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBVRERJUGVyc3BlY3RpdmUgZXh0ZW5kcyBQZXJzcGVjdGl2ZQotewotICBwcml2YXRlIEhhc2h0YWJsZSBrbm93blJlZ2lzdHJpZXNfOwotICBwcml2YXRlIElGYXZvcml0ZXNVRERJUmVnaXN0cnkgZGVmYXVsdFVERElSZWdpc3RyeV87Ci0gIHByaXZhdGUgTW9kZWwgbmF2aWdhdG9yTW9kZWxfOwotICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXJfOwotICBwcml2YXRlIGludCB3c2RsVHlwZV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGNhdGVnb3J5TWFuYWdlcnNfOwotICBTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXlfOwotICAKLSAgLy8gV2luZG93IHNpemVzCi0gIHByaXZhdGUgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIHByaXZhdGUgU3RyaW5nIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIHByaXZhdGUgU3RyaW5nIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0KLSAgcHVibGljIFVERElQZXJzcGVjdGl2ZShDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcigidWRkaSIsY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0UGVyc3BlY3RpdmUoU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gIHsKLSAgICBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlcyA9IGNvbnRyb2xsZXJfLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotCUZhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQgZmF2UmVnVHlwZURlZmF1bHQgPSBuZXcgRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdChkZWZhdWx0RmF2b3JpdGVzKTsKLSAgICBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5W10gZmF2UmVnaXN0cmllc0RlZmF1bHQgPSBmYXZSZWdUeXBlRGVmYXVsdC5nZXRGYXZvcml0ZXNVRERJUmVnaXN0cmllcygpOwotICAgIGtub3duUmVnaXN0cmllc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8ZmF2UmVnaXN0cmllc0RlZmF1bHQubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBrbm93blJlZ2lzdHJpZXNfLnB1dChmYXZSZWdpc3RyaWVzRGVmYXVsdFtpXS5nZXRJbnF1aXJ5VVJMKCksZmF2UmVnaXN0cmllc0RlZmF1bHRbaV0pOwotICAgIH0KLSAgICBpZiAoZmF2UmVnaXN0cmllc0RlZmF1bHQubGVuZ3RoID4gMCkKLSAgICAgIGRlZmF1bHRVRERJUmVnaXN0cnlfID0gZmF2UmVnaXN0cmllc0RlZmF1bHRbMF07Ci0gICAgCi0gICAgbmF2aWdhdG9yTW9kZWxfID0gbmV3IEJhc2ljTW9kZWwoInVkZGlNb2RlbCIpOwotICAgIFVERElNYWluRWxlbWVudCB1ZGRpTWFpbkVsZW1lbnQgPSBuZXcgVURESU1haW5FbGVtZW50KGdldE1lc3NhZ2UoIk5PREVfTkFNRV9VRERJX01BSU4iKSxuYXZpZ2F0b3JNb2RlbF8pOwotICAgIG5hdmlnYXRvck1vZGVsXy5zZXRSb290RWxlbWVudCh1ZGRpTWFpbkVsZW1lbnQpOwotICAgIG5hdmlnYXRvck1hbmFnZXJfID0gbmV3IE5vZGVNYW5hZ2VyKGNvbnRyb2xsZXJfKTsKLSAgICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gbmV3IFVERElNYWluTm9kZSh1ZGRpTWFpbkVsZW1lbnQsbmF2aWdhdG9yTWFuYWdlcl8pOwotICAgIG5hdmlnYXRvck1hbmFnZXJfLnNldFJvb3ROb2RlKHVkZGlNYWluTm9kZSk7Ci0KLSAgICB3c2RsVHlwZV8gPSBVRERJQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRTsKLSAgICBjYXRlZ29yeU1hbmFnZXJzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZWZhdWx0IGNhdGVnb3J5IG1vZGVscy4KLSAgICBpZiAoYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKCJjb21tb25DYXRlZ29yeU1vZGVscyIpID09IG51bGwpCi0gICAgewotICAgICAgc3luY2hyb25pemVkIChhcHBsaWNhdGlvbikKLSAgICAgIHsKLSAgICAgICAgaWYgKGFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZSgiY29tbW9uQ2F0ZWdvcnlNb2RlbHMiKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSGFzaHRhYmxlIGNvbW1vbkNhdGVnb3J5TW9kZWxzID0gbmV3IEhhc2h0YWJsZSgpOwotCQkgIAotICAgICAgICAgIENhdGVnb3J5TW9kZWwgbmFpY3NNb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0gICAgICAgICAgbmFpY3NNb2RlbC5zZXRTZXJ2bGV0Q29udGV4dChhcHBsaWNhdGlvbik7Ci0gICAgICAgICAgbmFpY3NNb2RlbC5zZXREZWZhdWx0RGF0YUZpbGUoIi91ZGRpL2RhdGEvbmFpY3MtZGF0YS50eHQiKTsKLSAgICAgICAgICBuYWljc01vZGVsLnNldERpc3BsYXlOYW1lKGdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0NBVEVHT1JZX05BSUNTIikpOwotICAgICAgICAgIG5haWNzTW9kZWwuc2V0VE1vZGVsS2V5KFRNb2RlbC5OQUlDU19UTU9ERUxfS0VZKTsKLSAgICAgICAgICBjb21tb25DYXRlZ29yeU1vZGVscy5wdXQoVE1vZGVsLk5BSUNTX1RNT0RFTF9LRVksbmFpY3NNb2RlbCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgQ2F0ZWdvcnlNb2RlbCB1bnNwc2NNb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0JCSAgdW5zcHNjTW9kZWwuc2V0U2VydmxldENvbnRleHQoYXBwbGljYXRpb24pOwotICAgICAgICAgIHVuc3BzY01vZGVsLnNldERlZmF1bHREYXRhRmlsZSgiL3VkZGkvZGF0YS91bnNwc2MtZGF0YS50eHQiKTsKLSAgICAgICAgICB1bnNwc2NNb2RlbC5zZXREaXNwbGF5TmFtZShnZXRNZXNzYWdlKCJGT1JNX09QVElPTl9DQVRFR09SWV9VTlNQU0NfNzMiKSk7Ci0gICAgICAgICAgdW5zcHNjTW9kZWwuc2V0VE1vZGVsS2V5KFRNb2RlbC5VTlNQU0NfNzNfVE1PREVMX0tFWSk7Ci0gICAgICAgICAgY29tbW9uQ2F0ZWdvcnlNb2RlbHMucHV0KFRNb2RlbC5VTlNQU0NfNzNfVE1PREVMX0tFWSx1bnNwc2NNb2RlbCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgQ2F0ZWdvcnlNb2RlbCBnZW9Nb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0JCSAgZ2VvTW9kZWwuc2V0U2VydmxldENvbnRleHQoYXBwbGljYXRpb24pOwotICAgICAgICAgIGdlb01vZGVsLnNldERlZmF1bHREYXRhRmlsZSgiL3VkZGkvZGF0YS9nZW8tZGF0YS50eHQiKTsKLSAgICAgICAgICBnZW9Nb2RlbC5zZXREaXNwbGF5TmFtZShnZXRNZXNzYWdlKCJGT1JNX09QVElPTl9DQVRFR09SWV9HRU8iKSk7Ci0gICAgICAgICAgZ2VvTW9kZWwuc2V0VE1vZGVsS2V5KFRNb2RlbC5JU09fQ0hfVE1PREVMX0tFWSk7Ci0gICAgICAgICAgY29tbW9uQ2F0ZWdvcnlNb2RlbHMucHV0KFRNb2RlbC5JU09fQ0hfVE1PREVMX0tFWSxnZW9Nb2RlbCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgYXBwbGljYXRpb24uc2V0QXR0cmlidXRlKCJjb21tb25DYXRlZ29yeU1vZGVscyIsY29tbW9uQ2F0ZWdvcnlNb2RlbHMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGVnb3J5VE1vZGVsS2V5XyA9IG51bGw7Ci0gICAgCi0gICAgLy8gU3RhcnRpbmcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgaWYgKCFEaXJVdGlscy5pc1JUTCgpKQotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIzMCUsKiI7Ci0gICAgZWxzZQotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIqLDMwJSI7Ci0gICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9ICI3NSUsKiI7Ci0gICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgSGFzaHRhYmxlIGdldEtub3duUmVnaXN0cmllcygpCi0gIHsKLSAgICAvLyBXZSBtdXN0IGFsd2F5cyBxdWVyeSB0aGUgZmF2b3JpdGVzIHRvIHNlZSBpZiBhZGRpdGlvbmFsIHJlZ2lzdHJpZXMgd2VyZSBhZGRlZCBvdmVyIHRpbWUuIFRoaXMgcHJvcGVydHkgY2Fubm90IGJlIGNhY2hlZC4KLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IChGYXZvcml0ZXNNYWluRWxlbWVudCkoY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBmYXZSZWdGb2xkZXJFbGVtZW50ID0gZmF2TWFpbkVsZW1lbnQuZ2V0RmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBmYXZSZWdGb2xkZXJFbGVtZW50LmdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZmF2UmVnRWxlbWVudCA9IChGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gZmF2UmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICBpZiAoa25vd25SZWdpc3RyaWVzXy5nZXQoaW5xdWlyeVVSTCkgPT0gbnVsbCkKLSAgICAgICAga25vd25SZWdpc3RyaWVzXy5wdXQoaW5xdWlyeVVSTCxmYXZSZWdFbGVtZW50LmdldElGYXZvcml0ZXNVRERJUmVnaXN0cnlJbnRlcmZhY2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBrbm93blJlZ2lzdHJpZXNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRLbm93blJlZ2lzdHJ5UHVibGlzaFVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICAgIElGYXZvcml0ZXNVRERJUmVnaXN0cnkga25vd25SZWdpc3RyeSA9IChJRmF2b3JpdGVzVURESVJlZ2lzdHJ5KWdldEtub3duUmVnaXN0cmllcygpLmdldChpbnF1aXJ5VVJMKTsKLSAgICBpZiAoa25vd25SZWdpc3RyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0ga25vd25SZWdpc3RyeS5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpKQotICAgICAgICByZXR1cm4gcHVibGlzaFVSTDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEtub3duUmVnaXN0cnlSZWdpc3RyYXRpb25VUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgICBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGtub3duUmVnaXN0cnkgPSAoSUZhdm9yaXRlc1VERElSZWdpc3RyeSlnZXRLbm93blJlZ2lzdHJpZXMoKS5nZXQoaW5xdWlyeVVSTCk7Ci0gICAgaWYgKGtub3duUmVnaXN0cnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0ga25vd25SZWdpc3RyeS5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocmVnaXN0cmF0aW9uVVJMKSkKLSAgICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvblVSTDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0KLSAgcHVibGljIGZpbmFsIElGYXZvcml0ZXNVRERJUmVnaXN0cnkgZ2V0RGVmYXVsdFVERElSZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdFVERElSZWdpc3RyeV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZWxvYWRVRERJUmVnaXN0cmllcyhTdHJpbmdbXSBpbnF1aXJ5VVJMcywgU3RyaW5nW10gcHVibGlzaFVSTHMpCi0gIHsKLSAgICBpZiAoaW5xdWlyeVVSTHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBIYXNodGFibGUga25vd25SZWdpc3RyaWVzID0gZ2V0S25vd25SZWdpc3RyaWVzKCk7Ci0gICAgICBTdHJpbmdCdWZmZXIgZGlyZWN0b3J5QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnF1aXJ5VVJMcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLQkJU3RyaW5nIGlucXVpcnlVUkwgPSBVUkxVdGlscy5kZWNvZGUoaW5xdWlyeVVSTHNbaV0pOwotICAgICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IG51bGw7Ci0gICAgICAgIFN0cmluZyByZWdOYW1lID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IG51bGw7Ci0gICAgICAgIC8vIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHJlZ2lzdHJ5IGlmIGlucXVpcnlVUkwgZG9lcyBub3QgZXhpc3QKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeVVSTCkpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIHBvcHVsYXRlIGFuZCBydW4gYW4gT3BlblJlZ2lzdHJ5QWN0aW9uCi0gICAgICAgIE9wZW5SZWdpc3RyeUFjdGlvbiBhY3Rpb24gPSBuZXcgT3BlblJlZ2lzdHJ5QWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGtub3duUmVnaXN0cnkgPSAoSUZhdm9yaXRlc1VERElSZWdpc3RyeSlrbm93blJlZ2lzdHJpZXMuZ2V0KGlucXVpcnlVUkwpOwotICAgICAgICBib29sZWFuIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzID0gZmFsc2U7Ci0gICAgICAgIEZpbGUgZGlyZWN0b3J5RmlsZSA9IG51bGw7Ci0gICAgICAgIGlmIChrbm93blJlZ2lzdHJ5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaXNoVVJMID0ga25vd25SZWdpc3RyeS5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgICAgICAgcmVnTmFtZSA9IGtub3duUmVnaXN0cnkuZ2V0TmFtZSgpOwotICAgICAgICAgIHJlZ2lzdHJhdGlvblVSTCA9IGtub3duUmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0gICAgICAgICAgZGlyZWN0b3J5QnVmZmVyLnNldExlbmd0aCgwKTsKLSAgICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGRpcmVjdG9yeUJ1ZmZlcixjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpLHJlZ05hbWUpOwotICAgICAgICAgIGRpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShkaXJlY3RvcnlCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKGRpcmVjdG9yeUZpbGUuZXhpc3RzKCkgJiYgZGlyZWN0b3J5RmlsZS5saXN0RmlsZXMoKS5sZW5ndGggPiAwKQotICAgICAgICAgICAgY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWdOYW1lID09IG51bGwpCi0gICAgICAgICAgcmVnTmFtZSA9IGlucXVpcnlVUkw7Ci0gICAgICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwgJiYgcHVibGlzaFVSTHMgIT0gbnVsbCAmJiBpIDwgcHVibGlzaFVSTHMubGVuZ3RoICYmIHB1Ymxpc2hVUkxzW2ldICE9IG51bGwpIHsKLSAgICAgICAgICBwdWJsaXNoVVJMID0gVVJMVXRpbHMuZGVjb2RlKHB1Ymxpc2hVUkxzW2ldKTsKLSAgICAgICAgfSAgCi0gICAgICAgIC8vIHBvcHVsYXRlIHRoZSBhY3Rpb24KLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCwgaW5xdWlyeVVSTCk7Ci0gICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSwgcmVnTmFtZSk7Ci0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX1VSTCwgcHVibGlzaFVSTCk7Ci0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocmVnaXN0cmF0aW9uVVJMKSkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJBVElPTl9VUkwsIHJlZ2lzdHJhdGlvblVSTCk7Ci0gICAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIGlmIHByaXZhdGUgcmVnaXN0cnkgY2F0ZWdvcnkgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGlzIHJlZ2lzdHJ5LgotICAgICAgICBkaXJlY3RvcnlCdWZmZXIuc2V0TGVuZ3RoKDApOwotICAgICAgICBTdHJpbmcgZW5jb2RlZElucXVpcnlVUkwgPSBVUkxVdGlscy5lbmNvZGUoaW5xdWlyeVVSTCk7Ci0gICAgICAgIGRpcmVjdG9yeUJ1ZmZlci5hcHBlbmQoY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSkuYXBwZW5kKGVuY29kZWRJbnF1aXJ5VVJMKS5hcHBlbmQoIi5wcm9wZXJ0aWVzIik7Ci0gICAgICAgIGRpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShkaXJlY3RvcnlCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChkaXJlY3RvcnlGaWxlLmV4aXN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRpcmVjdG9yeUZpbGUpOwotICAgICAgICAgICAgcC5sb2FkKGZpbik7Ci0gICAgICAgICAgICBmaW4uY2xvc2UoKTsKLSAgICAgICAgICAgIGRpcmVjdG9yeUZpbGUuZGVsZXRlKCk7Ci0gICAgICAgICAgICBTdHJpbmcgZGF0YURpcmVjdG9yeSA9IHAuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5DQVRFR09SSUVTX0RJUkVDVE9SWSk7Ci0gICAgICAgICAgICBpZiAoZGF0YURpcmVjdG9yeSAhPSBudWxsKQotICAgICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JJRVNfRElSRUNUT1JZLGRhdGFEaXJlY3RvcnkpOwotICAgICAgICAgICAgY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcykKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnJlbW92ZShVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgLy8gcnVuIHRoZSBhY3Rpb24KLSAgICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgICAKLSAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KShuYXZpZ2F0b3JNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICAgICAgRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzID0gcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKTsKLSAgICAgICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsICYmIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgewotICAgICAgICAgIEFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uMiA9IG5ldyBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgICBTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IHJlZ0VsZW1lbnQuZ2V0Q2F0ZWdvcmllc0RpcmVjdG9yeSgpOwotICAgICAgICAgIGlmIChjYXRlZ29yaWVzRGlyZWN0b3J5ICE9IG51bGwpCi0gICAgICAgICAgICBhY3Rpb24yLmxpbmtDYXRlZ29yeU1vZGVsc1dpdGhTYXZlZERhdGEodXNlckRlZmluZWRDYXRlZ29yaWVzLGNhdGVnb3JpZXNEaXJlY3RvcnkpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFjdGlvbjIubGlua0NhdGVnb3J5TW9kZWxzV2l0aFNhdmVkRGF0YShyZWdFbGVtZW50LmdldE5hbWUoKSx1c2VyRGVmaW5lZENhdGVnb3JpZXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoaW5xdWlyeVVSTHMubGVuZ3RoID4gMCkKLSAgICAgICAgY29udHJvbGxlcl8uc2V0Q3VycmVudFBlcnNwZWN0aXZlKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8vIFByZWNvbmRpdGlvbnM6IAotICAvLyBzZXJ2aWNlTmFtZXMgYW5kIHNlcnZpY2VLZXlzIGhhdmUgbGVuZ3RoID49IDEuCi0gIC8vIHJlZ05vZGUgIT0gbnVsbAotICBwcml2YXRlIGZpbmFsIHZvaWQgcHJlbG9hZFNlcnZpY2VzRm9yUmVnaXN0cnkoUmVnaXN0cnlOb2RlIHJlZ05vZGUsU3RyaW5nW10gc2VydmljZU5hbWVzLFN0cmluZ1tdIHNlcnZpY2VLZXlzKQotICB7Ci0gICAgaW50IHJlZ05vZGVJZCA9IHJlZ05vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUtleXMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBuYXZpZ2F0b3JNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChyZWdOb2RlSWQpOwotICAgICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHNlcnZpY2VOYW1lc1tpXSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksc2VydmljZUtleXNbaV0pOwotICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgbmF2aWdhdG9yTWFuYWdlcl8ubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZWxvYWRTZXJ2aWNlcyhTdHJpbmdbXSBpbnF1aXJ5VVJMcyxTdHJpbmdbXSBzZXJ2aWNlTmFtZXMsU3RyaW5nW10gc2VydmljZUtleXMpCi0gIHsKLSAgICAvLyBUaGUgYWxnb3JpdGhtIHdpbGwgc2VhcmNoIGZvciBlYWNoIHNlcnZpY2Uga2V5IGluIGVhY2ggaW5xdWlyeSBVUkwuCi0gICAgaWYgKHNlcnZpY2VLZXlzICE9IG51bGwgJiYgc2VydmljZU5hbWVzICE9IG51bGwgJiYgc2VydmljZU5hbWVzLmxlbmd0aCA9PSBzZXJ2aWNlS2V5cy5sZW5ndGgpCi0gICAgewotICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUtleXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGlucXVpcnlVUkxzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBFbGltaW5hdGUgZHVwbGljYXRlIGlucXVpcnkgVVJMcy4KLSAgICAgICAgICBIYXNodGFibGUgaW5xdWlyeVVSTHNIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICAgIGZvciAoaW50IGo9MDtqPGlucXVpcnlVUkxzLmxlbmd0aDtqKyspCi0gICAgICAgICAgICBpbnF1aXJ5VVJMc0hhc2gucHV0KGlucXVpcnlVUkxzW2pdLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgYXZhaWxhYmxlIHJlZ2lzdHJpZXMgYW5kIHVzZSB0aGVtIGlmIHBvc3NpYmxlLgotICAgICAgICAgIE5vZGUgdWRkaU1haW5Ob2RlID0gbmF2aWdhdG9yTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKTsKLSAgICAgICAgICBWZWN0b3IgcmVnaXN0cnlOb2RlcyA9IHVkZGlNYWluTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaz0wO2s8cmVnaXN0cnlOb2Rlcy5zaXplKCk7aysrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gKFJlZ2lzdHJ5Tm9kZSlyZWdpc3RyeU5vZGVzLmVsZW1lbnRBdChrKTsKLSAgICAgICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgZXhpc3RpbmdSZWdpc3RyeUlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICAgICAgICAgIGlmIChpbnF1aXJ5VVJMc0hhc2guZ2V0KGV4aXN0aW5nUmVnaXN0cnlJbnF1aXJ5VVJMKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwcmVsb2FkU2VydmljZXNGb3JSZWdpc3RyeShyZWdOb2RlLHNlcnZpY2VOYW1lcyxzZXJ2aWNlS2V5cyk7Ci0gICAgICAgICAgICAgIGlucXVpcnlVUkxzSGFzaC5yZW1vdmUoZXhpc3RpbmdSZWdpc3RyeUlucXVpcnlVUkwpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBFbnVtZXJhdGlvbiBpbnF1aXJ5VVJMc0VudW0gPSBpbnF1aXJ5VVJMc0hhc2gua2V5cygpOwotICAgICAgICAgIHdoaWxlIChpbnF1aXJ5VVJMc0VudW0uaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGlucXVpcnlVUkwgPSAoU3RyaW5nKWlucXVpcnlVUkxzRW51bS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgcHJlbG9hZFVERElSZWdpc3RyaWVzKG5ldyBTdHJpbmdbXSB7aW5xdWlyeVVSTH0sbnVsbCk7Ci0gICAgICAgICAgICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpbmF2aWdhdG9yTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgICAgICBwcmVsb2FkU2VydmljZXNGb3JSZWdpc3RyeShyZWdOb2RlLHNlcnZpY2VOYW1lcyxzZXJ2aWNlS2V5cyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q2F0ZWdvcnlUTW9kZWxLZXkoU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5KQotICB7Ci0gICAgY2F0ZWdvcnlUTW9kZWxLZXlfID0gY2F0ZWdvcnlUTW9kZWxLZXk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q2F0ZWdvcnlUTW9kZWxLZXkoKQotICB7Ci0gICAgcmV0dXJuIGNhdGVnb3J5VE1vZGVsS2V5XzsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGluaXRDYXRlZ29yeUJyb3dzZXIoQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgVHJlZUVsZW1lbnQgY2F0ZWdvcnlSb290RWxlbWVudCA9IChUcmVlRWxlbWVudCljYXRlZ29yeU1vZGVsLmdldFJvb3RFbGVtZW50KCk7Ci0gICAgUm9vdENhdGVnb3J5Tm9kZSByb290Q2F0ZWdvcnlOb2RlID0gbmV3IFJvb3RDYXRlZ29yeU5vZGUoY2F0ZWdvcnlSb290RWxlbWVudCxub2RlTWFuYWdlcik7Ci0gICAgbm9kZU1hbmFnZXIuc2V0Um9vdE5vZGUocm9vdENhdGVnb3J5Tm9kZSk7Ci0gICAgcm9vdENhdGVnb3J5Tm9kZS5jcmVhdGVDaGlsZHJlbigpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgTm9kZU1hbmFnZXIgZ2V0Q2F0ZWdvcnlNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiAoTm9kZU1hbmFnZXIpY2F0ZWdvcnlNYW5hZ2Vyc18uZ2V0KGNhdGVnb3J5VE1vZGVsS2V5Xyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBOb2RlTWFuYWdlciBnZXRDYXRlZ29yeU1hbmFnZXIoQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsKQotICB7Ci0gICAgU3RyaW5nIHRNb2RlbEtleSA9IGNhdGVnb3J5TW9kZWwuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgTm9kZU1hbmFnZXIgY2F0ZWdvcnlNYW5hZ2VyID0gKE5vZGVNYW5hZ2VyKWNhdGVnb3J5TWFuYWdlcnNfLmdldCh0TW9kZWxLZXkpOwotICAgIGlmIChjYXRlZ29yeU1hbmFnZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBjYXRlZ29yeU1hbmFnZXIgPSBuZXcgTm9kZU1hbmFnZXIoY29udHJvbGxlcl8pOwotICAgICAgaW5pdENhdGVnb3J5QnJvd3NlcihjYXRlZ29yeU1vZGVsLGNhdGVnb3J5TWFuYWdlcik7Ci0gICAgICBjYXRlZ29yeU1hbmFnZXJzXy5wdXQodE1vZGVsS2V5LGNhdGVnb3J5TWFuYWdlcik7ICAgICAgCi0gICAgfQotICAgIHJldHVybiBjYXRlZ29yeU1hbmFnZXI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZU1hbmFnZXIgZ2V0TmF2aWdhdG9yTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gbmF2aWdhdG9yTWFuYWdlcl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBOb2RlTWFuYWdlciBnZXROb2RlTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0V1NETFR5cGUoaW50IHdzZGxUeXBlKQotICB7Ci0gICAgd3NkbFR5cGVfID0gd3NkbFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFdTRExUeXBlKCkKLSAgewotICAgIHJldHVybiB3c2RsVHlwZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3VkZGlfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGcmFtZXNldHNGaWxlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9jZXNzRnJhbWVzZXRzRm9ybSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvZm9ybXMvUHJvY2Vzc1VERElGcmFtZXNldHNGb3JtLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBhbmVzRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIm5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJwcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJzdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2F2ZVBlcnNwZWN0aXZlQWN0aW9uTGluaygpCi0gIHsKLSAgICAvL3JldHVybiBTYXZlVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoKTsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gIHsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gIHsKLSAgICBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBjb2xzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkKLSAgewotICAgIHJldHVybiBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gIHsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IHJvd3M7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhTdHJpbmcgcm93cykKLSAgewotICAgIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gIHsKLSAgICByZXR1cm4gc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIHJldHVybiBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uLmdldEZvcm1BY3Rpb25MaW5rKHRhcmdldFBlcnNwZWN0aXZlSWQsZm9ySGlzdG9yeSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VbnB1Ymxpc2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVW5wdWJsaXNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzIyNzYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VbnB1Ymxpc2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVW5wdWJsaXNoVG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHB1YmxpYyBVbnB1Ymxpc2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgZW5hYmxlSW1hZ2UsIFN0cmluZyBoaWdobGlnaHRJbWFnZSwgU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBlbmFibGVJbWFnZSwgaGlnaGxpZ2h0SW1hZ2UsIGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAidWRkaS9mb3Jtcy9VbnB1Ymxpc2hGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS91dGlsL1VkZGk0akhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3V0aWwvVWRkaTRqSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhN2IyZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3V0aWwvVWRkaTRqSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYxMDA0ICAgMTQ4MDUyIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk92ZXJ2aWV3RG9jOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuT3ZlcnZpZXdVUkw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkFjY2Vzc1BvaW50OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkluc3RhbmNlRGV0YWlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuVE1vZGVsSW5zdGFuY2VEZXRhaWxzOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5UTW9kZWxJbnN0YW5jZUluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBVZGRpNGpIZWxwZXIKLXsKLSAgcHVibGljIGZpbmFsIEtleWVkUmVmZXJlbmNlIGdldFdTRExLZXllZFJlZmVyZW5jZSgpCi0gIHsKLSAgICBLZXllZFJlZmVyZW5jZSBrZXlSZWYgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoInR5cGVzIiwgIndzZGxTcGVjIik7Ci0gICAga2V5UmVmLnNldFRNb2RlbEtleSgiVVVJRDpDMUFDRjI2RC05NjcyLTQ0MDQtOUQ3MC0zOUI3NTZFNjJBQjQiKTsKLSAgICByZXR1cm4ga2V5UmVmOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRNb2RlbCBuZXdUTW9kZWwoU3RyaW5nIHdzZGxVcmwpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbmV3VE1vZGVsKHdzZGxVcmwsIGdldFdTRExEZWZpbml0aW9uKHdzZGxVcmwpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUTW9kZWwgbmV3VE1vZGVsKFN0cmluZyB3c2RsVXJsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFRNb2RlbCB0TW9kZWwgPSBuZXcgVE1vZGVsKCk7Ci0gICAgdE1vZGVsLnNldFRNb2RlbEtleSgiIik7Ci0gICAgdE1vZGVsLnNldE5hbWUoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICB0TW9kZWwuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCIiKTsKLSAgICBPdmVydmlld0RvYyBvdmVydmlld0RvYyA9IG5ldyBPdmVydmlld0RvYygpOwotICAgIG92ZXJ2aWV3RG9jLnNldE92ZXJ2aWV3VVJMKHdzZGxVcmwpOwotICAgIHRNb2RlbC5zZXRPdmVydmlld0RvYyhvdmVydmlld0RvYyk7Ci0gICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgVmVjdG9yIGtleVJlZlZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBrZXlSZWZWZWN0b3IuYWRkKGdldFdTRExLZXllZFJlZmVyZW5jZSgpKTsKLSAgICBjYXRCYWcuc2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3Ioa2V5UmVmVmVjdG9yKTsKLSAgICB0TW9kZWwuc2V0Q2F0ZWdvcnlCYWcoY2F0QmFnKTsKLSAgICByZXR1cm4gdE1vZGVsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEJ1c2luZXNzU2VydmljZSBuZXdCdXNpbmVzc1NlcnZpY2UoU3RyaW5nIHdzZGxVcmwsIEhhc2h0YWJsZSB0TW9kZWxzVGFibGUpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbmV3QnVzaW5lc3NTZXJ2aWNlKHdzZGxVcmwsIGdldFdTRExEZWZpbml0aW9uKHdzZGxVcmwpLCB0TW9kZWxzVGFibGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEJ1c2luZXNzU2VydmljZSBuZXdCdXNpbmVzc1NlcnZpY2UoU3RyaW5nIHdzZGxVcmwsIERlZmluaXRpb24gZGVmLCBIYXNodGFibGUgdE1vZGVsc1RhYmxlKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gbmV3IEJ1c2luZXNzU2VydmljZSgpOwotICAgIGJzLnNldFNlcnZpY2VLZXkoIiIpOwotICAgIEJpbmRpbmdUZW1wbGF0ZXMgYmluZGluZ1RlbXBsYXRlcyA9IG5ldyBCaW5kaW5nVGVtcGxhdGVzKCk7Ci0gICAgVmVjdG9yIGJpbmRpbmdUZW1wbGF0ZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSAoU2VydmljZVtdKWRlZi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLnRvQXJyYXkobmV3IFNlcnZpY2VbMF0pOwotICAgIGlmIChzZXJ2aWNlcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIFBvcnRbXSBwb3J0cyA9IChQb3J0W10pc2VydmljZXNbMF0uZ2V0UG9ydHMoKS52YWx1ZXMoKS50b0FycmF5KG5ldyBQb3J0WzBdKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbEluc3RhbmNlRGV0YWlscyB0TW9kZWxEZXRhaWxzID0gbmV3IFRNb2RlbEluc3RhbmNlRGV0YWlscygpOwotICAgICAgICBWZWN0b3IgdE1vZGVsSW5mb1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpdE1vZGVsc1RhYmxlLmdldChwb3J0c1tpXS5nZXRCaW5kaW5nKCkuZ2V0UG9ydFR5cGUoKS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgdE1vZGVsSW5mb1ZlY3Rvci5hZGQoY3JlYXRlVE1vZGVsSW5zdGFuY2VJbmZvKHdzZGxVcmwsIHBvcnRzW2ldLCB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkpKTsKLSAgICAgICAgdE1vZGVsRGV0YWlscy5zZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IodE1vZGVsSW5mb1ZlY3Rvcik7Ci0gICAgICAgIEJpbmRpbmdUZW1wbGF0ZSBiaW5kaW5nVGVtcGxhdGUgPSBuZXcgQmluZGluZ1RlbXBsYXRlKCk7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoY3JlYXRlRGVzY3JpcHRpb24ocG9ydHNbaV0pKTsKLSAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldEFjY2Vzc1BvaW50KGNyZWF0ZUFjY2Vzc1BvaW50KHBvcnRzW2ldKSk7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXRUTW9kZWxJbnN0YW5jZURldGFpbHModE1vZGVsRGV0YWlscyk7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXRCaW5kaW5nS2V5KCIiKTsKLSAgICAgICAgYmluZGluZ1RlbXBsYXRlVmVjdG9yLmFkZChiaW5kaW5nVGVtcGxhdGUpOwotICAgICAgfQotICAgIH0KLSAgICBiaW5kaW5nVGVtcGxhdGVzLnNldEJpbmRpbmdUZW1wbGF0ZVZlY3RvcihiaW5kaW5nVGVtcGxhdGVWZWN0b3IpOwotICAgIGJzLnNldEJpbmRpbmdUZW1wbGF0ZXMoYmluZGluZ1RlbXBsYXRlcyk7Ci0gICAgcmV0dXJuIGJzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgQnVzaW5lc3NTZXJ2aWNlIG5ld0J1c2luZXNzU2VydmljZShTdHJpbmcgd3NkbFVybCwgRGVmaW5pdGlvbiBkZWYsIFRNb2RlbFtdIHRNb2RlbHMpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSBuZXcgQnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgYnMuc2V0U2VydmljZUtleSgiIik7Ci0gICAgQmluZGluZ1RlbXBsYXRlcyBiaW5kaW5nVGVtcGxhdGVzID0gbmV3IEJpbmRpbmdUZW1wbGF0ZXMoKTsKLSAgICBWZWN0b3IgYmluZGluZ1RlbXBsYXRlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IChTZXJ2aWNlW10pZGVmLmdldFNlcnZpY2VzKCkudmFsdWVzKCkudG9BcnJheShuZXcgU2VydmljZVswXSk7Ci0gICAgaWYgKHNlcnZpY2VzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgUG9ydFtdIHBvcnRzID0gKFBvcnRbXSlzZXJ2aWNlc1swXS5nZXRQb3J0cygpLnZhbHVlcygpLnRvQXJyYXkobmV3IFBvcnRbMF0pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0TW9kZWxzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsSW5zdGFuY2VEZXRhaWxzIHRNb2RlbERldGFpbHMgPSBuZXcgVE1vZGVsSW5zdGFuY2VEZXRhaWxzKCk7Ci0gICAgICAgICAgVmVjdG9yIHRNb2RlbEluZm9WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgdE1vZGVsSW5mb1ZlY3Rvci5hZGQoY3JlYXRlVE1vZGVsSW5zdGFuY2VJbmZvKHdzZGxVcmwsIHBvcnRzW2ldLCB0TW9kZWxzW2pdLmdldFRNb2RlbEtleSgpKSk7Ci0gICAgICAgICAgdE1vZGVsRGV0YWlscy5zZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IodE1vZGVsSW5mb1ZlY3Rvcik7Ci0gICAgICAgICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9IG5ldyBCaW5kaW5nVGVtcGxhdGUoKTsKLSAgICAgICAgICBiaW5kaW5nVGVtcGxhdGUuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKGNyZWF0ZURlc2NyaXB0aW9uKHBvcnRzW2ldKSk7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldEFjY2Vzc1BvaW50KGNyZWF0ZUFjY2Vzc1BvaW50KHBvcnRzW2ldKSk7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldFRNb2RlbEluc3RhbmNlRGV0YWlscyh0TW9kZWxEZXRhaWxzKTsKLSAgICAgICAgICBiaW5kaW5nVGVtcGxhdGUuc2V0QmluZGluZ0tleSgiIik7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlVmVjdG9yLmFkZChiaW5kaW5nVGVtcGxhdGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJpbmRpbmdUZW1wbGF0ZXMuc2V0QmluZGluZ1RlbXBsYXRlVmVjdG9yKGJpbmRpbmdUZW1wbGF0ZVZlY3Rvcik7Ci0gICAgYnMuc2V0QmluZGluZ1RlbXBsYXRlcyhiaW5kaW5nVGVtcGxhdGVzKTsKLSAgICByZXR1cm4gYnM7Ci0gIH0KLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXRXU0RMRGVmaW5pdGlvbihTdHJpbmcgd3NkbFVybCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VzUGFyc2VyRXh0IHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAgICAgU3RyaW5nIHByb3h5U2V0ID0gU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5U2V0Iik7Ci0gICAgICBpZiAocHJveHlTZXQgIT0gbnVsbCAmJiBwcm94eVNldC5lcXVhbHMoInRydWUiKSkKLSAgICAgIHsKLSAgICAgICAgcGFyc2VyLnNldEhUVFBCYXNpY0F1dGhVc2VybmFtZShTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlVc2VyTmFtZSIpKTsKLSAgICAgICAgcGFyc2VyLnNldEhUVFBCYXNpY0F1dGhQYXNzd29yZChTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlQYXNzd29yZCIpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBwYXJzZXIuZ2V0V1NETERlZmluaXRpb25WZXJib3NlKHdzZGxVcmwpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5QQVJTRVJfRVJST1IsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBjcmVhdGVEZXNjcmlwdGlvbihQb3J0IHBvcnQpCi0gIHsKLSAgICBTdHJpbmcgZGVzYyA9IG51bGw7Ci0gICAgRWxlbWVudCBlID0gcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgewotICAgICAgTm9kZSBub2RlID0gZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICB3aGlsZSAobm9kZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUuZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6Ci0gICAgICAgICAgY2FzZSBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERToKLSAgICAgICAgICAgIHNiLmFwcGVuZCgoKENoYXJhY3RlckRhdGEpbm9kZSkuZ2V0RGF0YSgpKTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBkZXNjID0gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlc2M7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgVE1vZGVsSW5zdGFuY2VJbmZvIGNyZWF0ZVRNb2RlbEluc3RhbmNlSW5mbyhTdHJpbmcgd3NkbFVybCwgUG9ydCBwb3J0LCBTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgSW5zdGFuY2VEZXRhaWxzIGRldGFpbHMgPSBuZXcgSW5zdGFuY2VEZXRhaWxzKCk7Ci0gICAgT3ZlcnZpZXdEb2Mgb3ZlcnZpZXdEb2MgPSBuZXcgT3ZlcnZpZXdEb2MoKTsKLSAgICBUTW9kZWxJbnN0YW5jZUluZm8gdE1vZGVsSW5mbyA9IG5ldyBUTW9kZWxJbnN0YW5jZUluZm8oKTsKLSAgICBTdHJpbmdCdWZmZXIgb3ZlcnZpZXdVUkxTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKHdzZGxVcmwpOwotICAgIFN0cmluZyBwb3J0TmFtZSA9IHBvcnQuZ2V0TmFtZSgpOwotICAgIGlmIChwb3J0TmFtZSAhPSBudWxsKQotICAgIHsgIAotICAgICAgb3ZlcnZpZXdVUkxTdHJpbmcuYXBwZW5kKCIjIik7Ci0gICAgICBvdmVydmlld1VSTFN0cmluZy5hcHBlbmQocG9ydE5hbWUpOwotICAgIH0KLSAgICBvdmVydmlld0RvYy5zZXRPdmVydmlld1VSTChuZXcgT3ZlcnZpZXdVUkwob3ZlcnZpZXdVUkxTdHJpbmcudG9TdHJpbmcoKSkpOwotICAgIGRldGFpbHMuc2V0T3ZlcnZpZXdEb2Mob3ZlcnZpZXdEb2MpOwotICAgIHRNb2RlbEluZm8uc2V0SW5zdGFuY2VEZXRhaWxzKGRldGFpbHMpOwotICAgIGlmICh0TW9kZWxLZXkgIT0gbnVsbCkKLSAgICAgIHRNb2RlbEluZm8uc2V0VE1vZGVsS2V5KHRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIHRNb2RlbEluZm87Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgQWNjZXNzUG9pbnQgY3JlYXRlQWNjZXNzUG9pbnQoUG9ydCBwb3J0KQotICB7Ci0gICAgQWNjZXNzUG9pbnQgYWNjZXNzUG9pbnQgPSBudWxsOwotICAgIExpc3QgbGlzdCA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBsaXN0LnNpemUoKTsgaisrKQotICAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWxpc3QuZ2V0KGopOwotICAgICAgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICB7ICAKLSAgICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gKChTT0FQQWRkcmVzcylleHRFbGVtZW50KS5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICBhY2Nlc3NQb2ludCA9IG5ldyBBY2Nlc3NQb2ludChsb2NhdGlvblVSSSwgZ2V0VVJMVHlwZShsb2NhdGlvblVSSSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykKLSAgICAgICB7Ci0gICAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9ICgoSFRUUEFkZHJlc3MpZXh0RWxlbWVudCkuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgYWNjZXNzUG9pbnQgPSBuZXcgQWNjZXNzUG9pbnQobG9jYXRpb25VUkksIGdldFVSTFR5cGUobG9jYXRpb25VUkkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhY2Nlc3NQb2ludDsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVVJMX1RZUEVfT1RIRVIgPSAib3RoZXIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVUkxfVFlQRVMgPSAiaHR0cCBodHRwcyBtYWlsIGZ0cCBmYXggcGhvbmUgb3RoZXIiOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZ2V0VVJMVHlwZShTdHJpbmcgdXJsKQotICB7Ci0gICAgaW50IGkgPSB1cmwuaW5kZXhPZigiOiIpOwotICAgIFN0cmluZyB0eXBlOwotICAgIGlmIChpID09IC0xKQotICAgICAgdHlwZSA9IFVSTF9UWVBFX09USEVSOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0eXBlID0gdXJsLnN1YnN0cmluZygwLCBpKTsKLSAgICAgIGlmICh0eXBlLmVxdWFscygiIikgfHwgVVJMX1RZUEVTLmluZGV4T2YodHlwZSkgPT0gLTEpCi0gICAgICAgIHR5cGUgPSBVUkxfVFlQRV9PVEhFUjsKLSAgICB9Ci0gICAgcmV0dXJuIHR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzTW9ub2xpdGhpY1dTREwoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICByZXR1cm4gaGFzTWVzc2FnZShkZWYpICYmIGhhc1BvcnRUeXBlKGRlZikgJiYgaGFzQmluZGluZyhkZWYpICYmIGhhc1NlcnZpY2UoZGVmKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlSW1wbGVtZW50KERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuIGhhc0ltcG9ydChkZWYpICYmIGhhc1NlcnZpY2UoZGVmKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlSW50ZXJmYWNlKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuIGhhc01lc3NhZ2UoZGVmKSAmJiBoYXNQb3J0VHlwZShkZWYpICYmIGhhc0JpbmRpbmcoZGVmKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlSW50ZXJmYWNlV2l0aEJpbmRpbmdzT25seShEZWZpbml0aW9uIGRlZikKLSAgewotICAgIHJldHVybiAhaGFzU2VydmljZShkZWYpICYmIGhhc0JpbmRpbmcoZGVmKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNNZXNzYWdlKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgZm9yKEl0ZXJhdG9yIGl0ID0gZGVmLmdldE1lc3NhZ2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIGlmICghKChNZXNzYWdlKWl0Lm5leHQoKSkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaGFzUG9ydFR5cGUoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBmb3IoSXRlcmF0b3IgaXQgPSBkZWYuZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIGlmICghKChQb3J0VHlwZSlpdC5uZXh0KCkpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGhhc0JpbmRpbmcoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBmb3IoSXRlcmF0b3IgaXQgPSBkZWYuZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgaWYgKCEoKEJpbmRpbmcpaXQubmV4dCgpKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNTZXJ2aWNlKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuICFkZWYuZ2V0U2VydmljZXMoKS5pc0VtcHR5KCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaGFzSW1wb3J0KERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuICFkZWYuZ2V0SW1wb3J0cygpLmlzRW1wdHkoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEltcG9ydHMoRGVmaW5pdGlvbiBkZWYsIFN0cmluZyB3c2RsVXJsKQotICB7Ci0gIAotCSAgCi0JTWFwIGltcG9ydHNNYXAgPSBkZWYuZ2V0SW1wb3J0cygpOwotICAgIENvbGxlY3Rpb24gdmFsdWVzID0gaW1wb3J0c01hcC52YWx1ZXMoKTsKLSAgICBJdGVyYXRvciBpdCA9IHZhbHVlcy5pdGVyYXRvcigpOwotICAgIAotICAgIFZlY3RvciBpbXBvcnRzVmVjID0gbmV3IFZlY3RvcigpOyAgCi0gICAgZm9yKGludCBpID0wO2l0Lmhhc05leHQoKTtpKyspewotICAgIAlBcnJheUxpc3QgYUxpc3QgPSAoQXJyYXlMaXN0KWl0Lm5leHQoKTsKLSAgICAgICAgSXRlcmF0b3IgaXRJbXBvcnRzID0gYUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUoaXRJbXBvcnRzLmhhc05leHQoKSl7Ci0gICAgICAgIAlpbXBvcnRzVmVjLmFkZChpdEltcG9ydHMubmV4dCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBJbXBvcnQgaW1wb3J0c1tdID0gbmV3IEltcG9ydFtpbXBvcnRzVmVjLnNpemUoKV0gOwotICAgIEl0ZXJhdG9yIGl0VmVjID0gaW1wb3J0c1ZlYy5pdGVyYXRvcigpOwotICAgIGZvcihpbnQgaiA9IDA7aXRWZWMuaGFzTmV4dCgpO2orKyl7Ci0gICAgCWltcG9ydHNbal0gPSAoSW1wb3J0KWl0VmVjLm5leHQoKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgCi0gICAgU3RyaW5nW10gaW1wb3J0U3RyaW5ncyA9IG5ldyBTdHJpbmdbaW1wb3J0cy5sZW5ndGhdOwotICAgIFN0cmluZyBzOwotICAgIGlmICh3c2RsVXJsICE9IG51bGwgJiYgd3NkbFVybC5pbmRleE9mKCcvJykgIT0gLTEpCi0gICAgICBzID0gd3NkbFVybC5zdWJzdHJpbmcoMCwgd3NkbFVybC5sYXN0SW5kZXhPZignLycpKzEpOwotICAgIGVsc2UKLSAgICAgIHMgPSAiIjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGltcG9ydFN0cmluZ3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gaW1wb3J0c1tpXS5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgaWYgKGxvY2F0aW9uVVJJLmluZGV4T2YoJzonKSAhPSAtMSkKLSAgICAgICAgc2IuYXBwZW5kKGxvY2F0aW9uVVJJKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2IuYXBwZW5kKHMpLmFwcGVuZChsb2NhdGlvblVSSSk7Ci0gICAgICBpbXBvcnRTdHJpbmdzW2ldID0gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGltcG9ydFN0cmluZ3M7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdTREwoQnVzaW5lc3NTZXJ2aWNlIGJzLCBVRERJUHJveHkgcHJveHkpCi0gIHsKLSAgICBWZWN0b3IgYmluZGluZ1RlbXBsYXRlVmVjdG9yID0gYnMuZ2V0QmluZGluZ1RlbXBsYXRlcygpLmdldEJpbmRpbmdUZW1wbGF0ZVZlY3RvcigpOwotICAgIGlmIChiaW5kaW5nVGVtcGxhdGVWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBCaW5kaW5nVGVtcGxhdGUgYnQgPSAoQmluZGluZ1RlbXBsYXRlKWJpbmRpbmdUZW1wbGF0ZVZlY3Rvci5nZXQoMCk7Ci0gICAgICBUTW9kZWxJbnN0YW5jZURldGFpbHMgdE1vZGVsRGV0YWlscyA9IGJ0LmdldFRNb2RlbEluc3RhbmNlRGV0YWlscygpOwotICAgICAgaWYgKHRNb2RlbERldGFpbHMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHRNb2RlbEluZm9WZWN0b3IgPSB0TW9kZWxEZXRhaWxzLmdldFRNb2RlbEluc3RhbmNlSW5mb1ZlY3RvcigpOwotICAgICAgICBpZiAodE1vZGVsSW5mb1ZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsSW5zdGFuY2VJbmZvIHRNb2RlbEluZm8gPSAoVE1vZGVsSW5zdGFuY2VJbmZvKXRNb2RlbEluZm9WZWN0b3IuZ2V0KDApOwotICAgICAgICAgIEluc3RhbmNlRGV0YWlscyBkZXRhaWxzID0gdE1vZGVsSW5mby5nZXRJbnN0YW5jZURldGFpbHMoKTsKLSAgICAgICAgICBpZiAoZGV0YWlscyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE92ZXJ2aWV3RG9jIG92ZXJ2aWV3RG9jID0gZGV0YWlscy5nZXRPdmVydmlld0RvYygpOwotICAgICAgICAgICAgaWYgKG92ZXJ2aWV3RG9jICE9IG51bGwpCi0gICAgICAgICAgICAgIHJldHVybiBwYXJzZShvdmVydmlld0RvYy5nZXRPdmVydmlld1VSTFN0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocHJveHkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgCVN0cmluZyB0TW9kZWxLZXkgPSB0TW9kZWxJbmZvLmdldFRNb2RlbEtleSgpOwotICAgICAgICAgIAlpZiAodE1vZGVsS2V5ICE9IG51bGwpCi0gICAgICAgICAgCXsKLSAgICAgICAgICAJICB0cnkKLQkJCSAgewotICAgICAgICAgIAkgICAgVE1vZGVsRGV0YWlsIHQgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKHRNb2RlbEtleSk7Ci0gICAgICAgICAgCSAgICBpZiAodCAhPSBudWxsKQotICAgICAgICAgIAkgICAgewotICAgICAgICAgICAgICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHQuZ2V0VE1vZGVsVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgICBpZiAodE1vZGVsVmVjdG9yICE9IG51bGwgJiYgdE1vZGVsVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXU0RMKChUTW9kZWwpdE1vZGVsVmVjdG9yLmdldCgwKSk7Ci0gICAgICAgICAgCSAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAJICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkKLQkJCSAgewotICAgICAgICAgIAkgIH0KLSAgICAgICAgICAJICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIHRlKQotCQkJICB7Ci0gICAgICAgICAgCSAgfQotICAgICAgICAgIAl9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdTREwoVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIE92ZXJ2aWV3RG9jIG92ZXJ2aWV3RG9jID0gdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCk7Ci0gICAgaWYgKG92ZXJ2aWV3RG9jICE9IG51bGwpCi0gICAgICByZXR1cm4gcGFyc2Uob3ZlcnZpZXdEb2MuZ2V0T3ZlcnZpZXdVUkxTdHJpbmcoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIHBhcnNlKFN0cmluZyBzKQotICB7Ci0gICAgaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSBzLmluZGV4T2YoJyMnKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9Ccm93c2VyRGV0ZWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQnJvd3NlckRldGVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzIwNTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9Ccm93c2VyRGV0ZWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgdXNlZCB0byBkZXRlY3QgdGhlIHR5cGUgb2YgYnJvd3NlciB1c2VkLiAKLSAqLwotcHVibGljIGNsYXNzIEJyb3dzZXJEZXRlY3QgewotCQotCS8qKgotCSAqIERldGVybWluZSBpZiBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIgaXMgdXNlZC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVxdWVzdCBUaGUgSFRUUCByZXF1ZXN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xpZW50IGlzIGEgTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIHdlYiBicm93c2VyLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcihIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkgewotCQlTdHJpbmcgdXNlckFnZW50ID0gcmVxdWVzdC5nZXRIZWFkZXIoIlVzZXItQWdlbnQiKTsKLQkJCi0JCWlmICh1c2VyQWdlbnQgIT0gbnVsbCAmJiB1c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtc2llIikgIT0gLTEpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQ2hhckFycmF5V3JhcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0NoYXJBcnJheVdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmMDg1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQ2hhckFycmF5V3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkNoYXJBcnJheVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlV3JhcHBlcjsKLQotcHVibGljIGNsYXNzIENoYXJBcnJheVdyYXBwZXIgZXh0ZW5kcyBIdHRwU2VydmxldFJlc3BvbnNlV3JhcHBlcgotewotCXByaXZhdGUgQ2hhckFycmF5V3JpdGVyIGNoYXJBcnJheVdyaXRlcl87Ci0JCi0JcHVibGljIENoYXJBcnJheVdyYXBwZXIoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLQl7Ci0JCXN1cGVyKHJlc3BvbnNlKTsKLQkgIGNoYXJBcnJheVdyaXRlcl8gPSBuZXcgQ2hhckFycmF5V3JpdGVyKCk7Ci0JfQotCQotCXB1YmxpYyBQcmludFdyaXRlciBnZXRXcml0ZXIoKQotCXsKLQkJcmV0dXJuIG5ldyBQcmludFdyaXRlcihjaGFyQXJyYXlXcml0ZXJfKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0JewotCQlyZXR1cm4gY2hhckFycmF5V3JpdGVyXy50b1N0cmluZygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9EaXJVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0RpclV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYThiYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0RpclV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLQotcHVibGljIGZpbmFsIGNsYXNzIERpclV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JUTCgpCi0gIHsKLSAgICByZXR1cm4gInJ0bCIuZXF1YWxzKGdldERpcigpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERpcigpCi0gIHsKLSAgICBTdHJpbmcgcnRsID0gInJ0bCI7Ci0gICAgU3RyaW5nIGx0ciA9ICJsdHIiOwotCi0gICAgLy8gZnJvbSBzeXN0ZW0gcHJvcGVydHkKLSAgICBTdHJpbmcgb3JpZW50YXRpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImVjbGlwc2Uub3JpZW50YXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIGlmIChydGwuZXF1YWxzKG9yaWVudGF0aW9uKSkgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuIHJ0bDsKLSAgICBlbHNlIGlmIChsdHIuZXF1YWxzKG9yaWVudGF0aW9uKSkgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuIGx0cjsKLQotICAgIC8vIGZyb20gY29tbWFuZCBsaW5lCi0gICAgU3RyaW5nW10gYXJncyA9IFBsYXRmb3JtLmdldENvbW1hbmRMaW5lQXJncygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoIi1kaXIiLmVxdWFsc0lnbm9yZUNhc2UoYXJnc1tpXSkpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgaWYgKChpICsgMSkgPCBhcmdzLmxlbmd0aCAmJiAicnRsIi5lcXVhbHNJZ25vcmVDYXNlKGFyZ3NbaSArIDFdKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHJ0bDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbHRyOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIHByb3BlcnR5IGlzIHNldC4gSWYgbm90IGRvIG5vdAotICAgIC8vIHJlbHkgb24gdGhlIHZtLgotICAgIGlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zZ2kubmwudXNlciIpID09IG51bGwpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBsdHI7Ci0KLSAgICAvLyBndWVzcyBmcm9tIGRlZmF1bHQgbG9jYWxlCi0gICAgU3RyaW5nIGxvY2FsZSA9IFBsYXRmb3JtLmdldE5MKCk7Ci0gICAgaWYgKGxvY2FsZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgaWYgKGxvY2FsZS5zdGFydHNXaXRoKCJhciIpIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJmYSIpIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0gICAgICAgIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJoZSIpIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJpdyIpIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0gICAgICAgIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJ1ciIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmV0dXJuIHJ0bDsKLSAgICB9Ci0gICAgcmV0dXJuIGx0cjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0hUTUxVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0hUTUxVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2Y2Zjc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9IVE1MVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqIDIwMDgwMzI0ICAgMTg2NDU2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSFRNTFV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVURjhfRU5DT0RJTkcgPSAiVVRGLTgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5FX0JSRUFLID0gIjxicj4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5FX1NFUEFSQVRPUiA9IFN5c3RlbS5nZXRQcm9wZXJ0aWVzKCkuZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBIVE1MIHRhZyBmb3IgYW4gaW1hZ2UuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIEhUTUwgdGFnIGZvciB0aGlzIGltYWdlLgotICAqIEBwYXJhbSBIdHRwU2VydmxldFJlc3BvbnNlIFRvIGVuY29kZSB0aGUgc3JjIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIHNyYyBhdHRyaWJ1dGUgZGVmaW5pbmcgdGhlIHBhdGggdG8gdGhlIGltYWdlIGZpbGUuIFRoaXMgbXVzdCBpbmNsdWRlIHRoZSBjb250ZXh0IHBhdGguCi0gICogQHBhcmFtIFN0cmluZyBPcHRpb25hbCBhbHQgdGV4dCB0byBiZSBkaXNwbGF5ZWQgd2l0aCB0aGUgaW1hZ2UuIFNldCB0aGlzIHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgYXR0cmlidXRlLgotICAqIEBwYXJhbSBTdHJpbmcgT3B0aW9uYWwgd2lkdGggb2YgdGhlIHJlbmRlcmVkIGltYWdlLiBTZXQgdGhpcyB0byBudWxsIHRvIGRpc2FibGUgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE9wdGlvbmFsIGhlaWdodCBvZiB0aGUgcmVuZGVyZWQgaW1hZy4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIEhhc2h0YWJsZSBPcHRpb25hbCBrZXktdmFsdWUgcGFpcnMgb2YgYWRkaXRpb25hbCBzdHJpbmdzIHRvIGJlIGFkZGVkIGFzLWlzIHRvIHRoZSB0YWcuIFNldCB0aGlzIHRvIG51bGwgdG8gZGlzYWJsZS4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgaW1hZ2UgdGFnLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRIVE1MSW1hZ2VUYWcoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmcgc3JjLFN0cmluZyBhbHQsU3RyaW5nIHdpZHRoLFN0cmluZyBoZWlnaHQsSGFzaHRhYmxlIGFkZGl0aW9uYWxBdHRyaWJ1dGVzKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHRhZyA9IG5ldyBTdHJpbmdCdWZmZXIoIjxpbWcgc3JjPVwiIik7Ci0gICAgdGFnLmFwcGVuZChyZXNwb25zZS5lbmNvZGVVUkwoc3JjKSkuYXBwZW5kKCdcIicpOwotICAgIGlmIChhbHQgPT0gbnVsbCkKLSAgICAJYWx0ID0gIiI7Ci0gICAgdGFnLmFwcGVuZCgiIGFsdD1cIiIpLmFwcGVuZChhbHQpLmFwcGVuZCgnXCInKTsKLSAgICB0YWcuYXBwZW5kKCIgdGl0bGU9XCIiKS5hcHBlbmQoYWx0KS5hcHBlbmQoJ1wiJyk7Ci0gICAgaWYgKHdpZHRoICE9IG51bGwpCi0gICAgICB0YWcuYXBwZW5kKCIgd2lkdGg9IikuYXBwZW5kKHdpZHRoKTsKLSAgICBpZiAoaGVpZ2h0ICE9IG51bGwpCi0gICAgICB0YWcuYXBwZW5kKCIgaGVpZ2h0PSIpLmFwcGVuZChoZWlnaHQpOwotICAgIHRhZy5hcHBlbmQoIiBib3JkZXI9MCIpOwotICAgIGlmIChhZGRpdGlvbmFsQXR0cmlidXRlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBhZGRpdGlvbmFsQXR0cmlidXRlcy5rZXlzKCk7Ci0gICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICB0YWcuYXBwZW5kKCcgJykuYXBwZW5kKGtleSkuYXBwZW5kKCI9XCIiKS5hcHBlbmQoKFN0cmluZylhZGRpdGlvbmFsQXR0cmlidXRlcy5nZXQoa2V5KSkuYXBwZW5kKCdcIicpOwotICAgICAgfQotICAgIH0KLSAgICB0YWcuYXBwZW5kKCc+Jyk7Ci0gICAgcmV0dXJuIHRhZy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBIVE1MIHRhZyBmb3IgdGhpcyBsaW5rLiBUaGUgY29tcGxldGUgdGFnIGNvbnNpc3RzIG9mIHRoZSBvcGVuIHRhZyA8YT4gZm9sbG93ZWQgYnkgYSBzdWJlbGVtZW50IGFuZCwgZmluYWxseSwgYnkgYW4gZW5kIHRhZyA8L2E+LgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBIVE1MIHRhZyBvZiB0aGUgbGluay4KLSAgKiBAcGFyYW0gSHR0cFNlcnZsZXRSZXNwb25zZSBUbyBlbmNvZGUgdGhlIGhyZWYgYXR0cmlidXRlLgotICAqIEBwYXJhbSBTdHJpbmcgVGhlIGhyZWYgYXR0cmlidXRlIG9mIHRoZSBsaW5rLiBUaGlzIG11c3QgaW5jbHVkZSB0aGUgY29udGV4dCBwYXRoLgotICAqIEBwYXJhbSBTdHJpbmcgdGFyZ2V0IE9wdGlvbmFsIHRhcmdldCBhdHRyaWJ1dGUgZm9yIHRoZSBsaW5rLiBTZXQgdGhpcyB0byBudWxsIHRvIGRpc2FibGUgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSBsaW5rLiBTZXQgdGhpcyB0byBudWxsIHRvIGRpc2FibGUgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIFRoZSBsYWJlbCB3aGljaCBhY3RzIGFzIHRoZSBzdWJlbGVtZW50LiBpLmUuIDxhPmxhYmVsPC9hPi4KLSAgKiBAcGFyYW0gSGFzaHRhYmxlIE9wdGlvbmFsIGtleS12YWx1ZSBwYWlycyBvZiBhZGRpdGlvbmFsIHN0cmluZyBhdHRyaWJ1dGVzIHRvIGJlIGFkZGVkIGFzLWlzIHRvIHRoZSBvcGVuIHRhZy4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRIVE1MTGlua1RhZyhIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLFN0cmluZyBocmVmLFN0cmluZyB0YXJnZXQsU3RyaW5nIG5hbWUsU3RyaW5nIGxhYmVsLEhhc2h0YWJsZSBhZGRpdGlvbmFsQXR0cmlidXRlcykKLSAgewotICAgIFN0cmluZ0J1ZmZlciB0YWcgPSBuZXcgU3RyaW5nQnVmZmVyKCI8YSBocmVmPVwiIik7Ci0gICAgdGFnLmFwcGVuZChyZXNwb25zZS5lbmNvZGVVUkwoaHJlZikpLmFwcGVuZCgnXCInKTsKLSAgICBpZiAodGFyZ2V0ICE9IG51bGwpCi0gICAgICB0YWcuYXBwZW5kKCIgdGFyZ2V0PVwiIikuYXBwZW5kKHRhcmdldCkuYXBwZW5kKCdcIicpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICB0YWcuYXBwZW5kKCIgbmFtZT1cIiIpLmFwcGVuZChuYW1lKS5hcHBlbmQoJ1wiJyk7Ci0gICAgaWYgKGFkZGl0aW9uYWxBdHRyaWJ1dGVzICE9IG51bGwpCi0gICAgewotICAgICAgRW51bWVyYXRpb24ga2V5cyA9IGFkZGl0aW9uYWxBdHRyaWJ1dGVzLmtleXMoKTsKLSAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIHRhZy5hcHBlbmQoJyAnKS5hcHBlbmQoa2V5KS5hcHBlbmQoIj1cIiIpLmFwcGVuZCgoU3RyaW5nKWFkZGl0aW9uYWxBdHRyaWJ1dGVzLmdldChrZXkpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHRhZy5hcHBlbmQoJz4nKTsKLSAgICB0YWcuYXBwZW5kKGxhYmVsKTsKLSAgICB0YWcuYXBwZW5kKCI8L2E+Iik7Ci0gICAgcmV0dXJuIHRhZy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBIVE1MIHRhZyBmb3IgYSByZWQgYXN0ZXJpc3QuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIEhUTUwgdGFnIGZvciB0aGUgcmVkIGFzdGVyaXNrLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyByZWRBc3RlcmlzaygpCi0gIHsKLSAgICByZXR1cm4gIjxmb250IGNvbG9yPVwiI2ZmMDAwMFwiPio8L2ZvbnQ+IjsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgSmF2YXNjcmlwdCBtYW5nbGVkIHZlcnNpb24gb2YgYSBnaXZlbiBpbnB1dCBTdHJpbmcuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIEphdmFzY3JpcHQgbWFuZ2xlZCBTdHJpbmcuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpTTWFuZ2xlKFN0cmluZyBpbnB1dCkKLSAgewotICAgIGlmIChpbnB1dCA9PSBudWxsKQotICAgICAgcmV0dXJuICIiOwotCi0gICAgU3RyaW5nQnVmZmVyIG1hbmdsZWRPdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8aW5wdXQubGVuZ3RoKCk7aSsrKQotICAgIHsKLSAgICAgIGNoYXIgYyA9IGlucHV0LmNoYXJBdChpKTsKLSAgICAgIHN3aXRjaCAoYykKLSAgICAgIHsKLSAgICAgICAgY2FzZSAnXG4nOgotICAgICAgICAgIG1hbmdsZWRPdXRwdXQuYXBwZW5kKCJcXG4iKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgIG1hbmdsZWRPdXRwdXQuYXBwZW5kKCJcXHIiKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICBjYXNlICdcIic6Ci0gICAgICAgIGNhc2UgJ1wnJzoKLSAgICAgICAgICBtYW5nbGVkT3V0cHV0LmFwcGVuZCgnXFwnKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBtYW5nbGVkT3V0cHV0LmFwcGVuZChjKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1hbmdsZWRPdXRwdXQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMRVNTX1RIQU4gPSAiPCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMRVNTX1RIQU5fSFRNTF9FTlRJVFkgPSAiJmx0OyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHUkVBVEVSX1RIQU4gPSAiPiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHUkVBVEVSX1RIQU5fSFRNTF9FTlRJVFkgPSAiJmd0OyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTUEFDRSA9ICIgIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQQUNFX0hUTUxfRU5USVRZID0gIiZuYnNwOyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBTVBFUlNBTkQgPSAiJiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBTVBFUlNBTkRfSFRNTF9FTlRJVFkgPSAiJmFtcDsiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVPVEFUSU9OID0gIlwiIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFFVT1RBVElPTl9IVE1MX0VOVElUWSA9ICImcXVvdDsiOwotCi0gIC8qKgotICAqIFJlcGxhY2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggSFRNTCBlbnRpdGllcyByZXByZXNlbnRpbmcgdGhlc2UgY2hhcmFjdGVycy4KLSAgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIGFsc28gY29udmVydCBub3JtYWwgc3BhY2VzIGludG8gbm9uLWJyZWFraW5nIHNwYWNlcywgd2hpY2ggbWF5IGJlIGdvb2QgZm9yCi0gICogcHJlc2VudGF0aW9uIGJ1dCBub3QgZm9yIGVkaXRpbmcuCi0gICogCi0gICogQHJldHVybiBTdHJpbmcgVGhlIGNvbnZlcnRlZCBTdHJpbmcuIE5vdGU6IE9yZGVyIGlzIGltcG9ydGFudCBzbyB0aGF0IGNvcnJlY3RlZCBlbnRpdHkgcmVmZXJlbmNlcyBhcmUgbm90IHJlLW1hbmdsZWQuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhTdHJpbmcgcykgewotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEFNUEVSU0FORCwgQU1QRVJTQU5EX0hUTUxfRU5USVRZKTsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBMRVNTX1RIQU4sIExFU1NfVEhBTl9IVE1MX0VOVElUWSk7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgR1JFQVRFUl9USEFOLCBHUkVBVEVSX1RIQU5fSFRNTF9FTlRJVFkpOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIFNQQUNFLCBTUEFDRV9IVE1MX0VOVElUWSk7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgUVVPVEFUSU9OLCBRVU9UQVRJT05fSFRNTF9FTlRJVFkpOwotICAgIHJldHVybiBzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlcGxhY2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggSFRNTCBlbnRpdGllcyByZXByZXNlbnRpbmcgdGhlc2UgY2hhcmFjdGVycwotICAgKiBAcmV0dXJuIFN0cmluZyBUaGUgY29udmVydGVkIFN0cmluZy4gTm90ZTogT3JkZXIgaXMgaW1wb3J0YW50IHNvIHRoYXQgY29ycmVjdGVkIGVudGl0eSByZWZlcmVuY2VzIGFyZSBub3QgcmUtbWFuZ2xlZC4KLSAgICovCi0gICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QoU3RyaW5nIHMpIHsKLSAgICAgcyA9IHN0cmluZ1JlcGxhY2UocywgQU1QRVJTQU5ELCBBTVBFUlNBTkRfSFRNTF9FTlRJVFkpOwotICAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBMRVNTX1RIQU4sIExFU1NfVEhBTl9IVE1MX0VOVElUWSk7Ci0gICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEdSRUFURVJfVEhBTiwgR1JFQVRFUl9USEFOX0hUTUxfRU5USVRZKTsKLSAgICAgcyA9IHN0cmluZ1JlcGxhY2UocywgUVVPVEFUSU9OLCBRVU9UQVRJT05fSFRNTF9FTlRJVFkpOwotICAgICByZXR1cm4gczsKLSAgIH0KLQotICAvKioKLSAgKiBSZXBsYWNlIEhUTUwgY2hhcmFjdGVyIGVudGl0aWVzIHdpdGggdGhlaXIgYXNzb2NpYXRlZCBjaGFyYWN0ZXJzLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBjb252ZXJ0ZWQgU3RyaW5nLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBodG1sRW50aXRpZXNUb0NoYXJhY3RlcnMoU3RyaW5nIHMpIHsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBMRVNTX1RIQU5fSFRNTF9FTlRJVFksIExFU1NfVEhBTik7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgR1JFQVRFUl9USEFOX0hUTUxfRU5USVRZLCBHUkVBVEVSX1RIQU4pOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIFNQQUNFX0hUTUxfRU5USVRZLCBTUEFDRSk7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgQU1QRVJTQU5EX0hUTUxfRU5USVRZLCBBTVBFUlNBTkQpOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIFFVT1RBVElPTl9IVE1MX0VOVElUWSwgUVVPVEFUSU9OKTsKLSAgICByZXR1cm4gczsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzdHJpbmdSZXBsYWNlKFN0cmluZyBzLCBTdHJpbmcgb2xkU3RyaW5nLCBTdHJpbmcgbmV3U3RyaW5nKSB7Ci0gICAgU3RyaW5nIHNDb3B5ID0gczsKLSAgICBpbnQgZnJvbUluZGV4ID0gMDsKLSAgICBpbnQgb2xkU3RyaW5nSW5kZXggPSBzQ29weS5pbmRleE9mKG9sZFN0cmluZywgZnJvbUluZGV4KTsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgd2hpbGUgKG9sZFN0cmluZ0luZGV4ICE9IC0xKSB7Ci0gICAgICBzYi5zZXRMZW5ndGgoMCk7Ci0gICAgICBzYi5hcHBlbmQoc0NvcHkuc3Vic3RyaW5nKDAsIG9sZFN0cmluZ0luZGV4KSk7Ci0gICAgICBzYi5hcHBlbmQobmV3U3RyaW5nKTsKLSAgICAgIHNiLmFwcGVuZChzQ29weS5zdWJzdHJpbmcob2xkU3RyaW5nSW5kZXggKyBvbGRTdHJpbmcubGVuZ3RoKCksIHNDb3B5Lmxlbmd0aCgpKSk7Ci0gICAgICBzQ29weSA9IHNiLnRvU3RyaW5nKCk7Ci0gICAgICBmcm9tSW5kZXggPSBvbGRTdHJpbmdJbmRleCArIG5ld1N0cmluZy5sZW5ndGgoKTsKLSAgICAgIG9sZFN0cmluZ0luZGV4ID0gc0NvcHkuaW5kZXhPZihvbGRTdHJpbmcsIGZyb21JbmRleCk7Ci0gICAgfQotICAgIHJldHVybiBzQ29weTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL011bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzViNTk1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gZXh0ZW5kcyBUaHJvd2FibGUKLXsKLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzMjU3ODQ1NDcyMjI3MTEwOTYxTDsKLQotcHVibGljIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgc3VwZXIobWVzc2FnZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9NdWx0aXBhcnRGb3JtRGF0YVBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL011bHRpcGFydEZvcm1EYXRhUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOGVkZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL011bHRpcGFydEZvcm1EYXRhUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcgotewotICBwcml2YXRlIEhhc2h0YWJsZSBwYXJhbVRhYmxlXzsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfVFlQRSAgICAgICAgPSAiQ29udGVudC1UeXBlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NVUxUSVBBUlQgICAgICAgICAgID0gIm11bHRpcGFydCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQk9VTkRBUlkgICAgICAgICAgICA9ICJib3VuZGFyeT0iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfRElTUE9TSVRJT04gPSAiQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9OQU1FICAgICAgICAgICAgICAgID0gIm5hbWU9XCIiOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgUEFSU0VSX1NUQVRFX0lOSVRJQUwgICAgICAgICA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgUEFSU0VSX1NUQVRFX0JPVU5EQVJZICAgICAgICA9IDE7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgUEFSU0VSX1NUQVRFX1BBUkFNRVRFUiAgICAgICA9IDI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgUEFSU0VSX1NUQVRFX0JMQU5LICAgICAgICAgICA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgUEFSU0VSX1NUQVRFX0RBVEEgICAgICAgICAgICA9IDQ7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHBhcnNlclN0YXRlc1tdID0geyJpbml0aWFsIiwiYm91bmRhcnkiLCJwYXJhbWV0ZXIgbmFtZSIsImJsYW5rIGxpbmUiLCJkYXRhIn07Ci0KLSAgcHVibGljIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKCkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIoSGFzaHRhYmxlIHBhcmFtZXRlcnMpCi0gIHsKLSAgICBwYXJhbVRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcGFyYW1ldGVycy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCBrZXkgPSBpdC5uZXh0KCk7Ci0gICAgICBPYmplY3QgdmFsdWUgPSBwYXJhbWV0ZXJzLmdldChrZXkpOwotICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGlzdCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gKExpc3QpdmFsdWU7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQyID0gbGlzdC5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykKLSAgICAgICAgICBzYXZlRGF0YShrZXkudG9TdHJpbmcoKSwgaXQyLm5leHQoKS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHZhbHVlLmdldENsYXNzKCkuaXNBcnJheSgpKQotICAgICAgewotICAgICAgICBPYmplY3RbXSBhcnJheSA9IChPYmplY3RbXSl2YWx1ZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykKLSAgICAgICAgICBzYXZlRGF0YShrZXkudG9TdHJpbmcoKSwgYXJyYXlbaV0udG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNhdmVEYXRhKGtleS50b1N0cmluZygpLCB2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBtdWx0aXBhcnQvZm9ybS1kYXRhIGVuY29kZWQgcG9zdCByZXF1ZXN0IHdpdGggYSBnaXZlbiBlbmNvZGluZy4KLSAgICogSWYgdGhlIGVuY29kaW5nIGlzIG51bGwsIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcuIHV0Zi04IGlzIG5vdCBhCi0gICAqIGJhZCBjaG9pY2UgZm9yIHRoZSBlbmNvZGluZy4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHBhcnNlUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxTdHJpbmcgZW5jb2RpbmcpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ29udGVudC1UeXBlIGhlYWRlciBzaG91bGQgaGF2ZSB0aGUgZm9ybToKLSAgICAvLyBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0uLi4KLSAgICAvLwotICAgIC8vIFJGQzIwNDYgNS4xLjEgcGFnZSAxOSwgcGFyYWdyYXBoIDI6Ci0gICAgLy8gVGhlIENvbnRlbnQtVHlwZSBmaWVsZCBmb3IgbXVsdGlwYXJ0IGVudGl0aWVzIHJlcXVpcmVzIG9uZSBwYXJhbWV0ZXIsICJib3VuZGFyeSIgKG5vIHF1b3RlcykKLSAgICBTdHJpbmcgY29udGVudFR5cGUgPSByZXF1ZXN0LmdldEhlYWRlcihIRUFERVJfQ09OVEVOVF9UWVBFKTsKLSAgICBpZiAoY29udGVudFR5cGUgPT0gbnVsbCB8fCAhY29udGVudFR5cGUuc3RhcnRzV2l0aChIRUFERVJfTVVMVElQQVJUKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKEhFQURFUl9CT1VOREFSWSkgPT0gLTEpCi0gICAgICB0aHJvdyBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24oIkNvbnRlbnQtVHlwZSBpcyBub3QgbXVsdGlwYXJ0L2Zvcm0tZGF0YSIpOwotCi0gICAgLy8gUkZDMjA0NiA1LjEuMSBwYWdlIDE5LCBwYXJhZ3JhcGggNDoKLSAgICAvLyBUaGUgYm91bmRhcnkgdmFsdWUgbWF5IGJlIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMuIFN0cmlwIHRoZXNlIGlmIHRoZXkgYXJlIHByZXNlbnQuCi0gICAgU3RyaW5nIGJvdW5kYXJ5ID0gY29udGVudFR5cGUuc3Vic3RyaW5nKGNvbnRlbnRUeXBlLmluZGV4T2YoSEVBREVSX0JPVU5EQVJZKStIRUFERVJfQk9VTkRBUlkubGVuZ3RoKCksY29udGVudFR5cGUubGVuZ3RoKCkpOwotICAgIGlmIChib3VuZGFyeS5jaGFyQXQoMCkgPT0gJ1wiJyAmJiBib3VuZGFyeS5jaGFyQXQoYm91bmRhcnkubGVuZ3RoKCktMSkgPT0gJ1wiJykKLSAgICAgIGJvdW5kYXJ5ID0gYm91bmRhcnkuc3Vic3RyaW5nKDEsYm91bmRhcnkubGVuZ3RoKCktMSk7Ci0KLSAgICAvLyBSRkMyMDQ2IDUuMS4xIHBhZ2UgMTksIHBhcmFncmFwaCAyOgotICAgIC8vIFRoZSBib3VuZGFyeSBkZWxpbWl0ZXIgbGluZSBpcyB0aGVuIGRlZmluZWQgYXMgYSBsaW5lIGNvbnNpc3RpbmcgZW50aXJlbHkKLSAgICAvLyBvZiB0d28gaHlwaGVuIGNoYXJhY3RlcnMuCi0gICAgU3RyaW5nIGRlbGltaXRlciA9ICItLSIrYm91bmRhcnk7Ci0KLSAgICBpZiAocGFyYW1UYWJsZV8gPT0gbnVsbCkKLSAgICAgIHBhcmFtVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGVsc2UKLSAgICAgIHBhcmFtVGFibGVfLmNsZWFyKCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIocmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpLGVuY29kaW5nKSk7Ci0gICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgICBTdHJpbmcgcGFyYW1ldGVyTmFtZSA9IG51bGw7Ci0gICAgICBTdHJpbmdCdWZmZXIgcGFyYW1ldGVyVmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBieXRlIGN1cnJlbnRQYXJzZXJTdGF0ZSA9IFBBUlNFUl9TVEFURV9JTklUSUFMOwotICAgICAgd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gTGluZXMgYXBwZWFyIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UuCi0gICAgICAgIC8vIDEpIGJvdW5kYXJ5IGluZGljYXRpbmcgdGhlIHN0YXJ0IG9mIGEgbmV3IHBhcmFtZXRlciBhbmQgZW5kIG9mIGEgZGF0YSBzZWdtZW50LgotICAgICAgICAvLyAyKSBDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9Ii4uLiIgLSB0aGUgbmFtZSBvZiBhIG5ldyBwYXJhbWV0ZXIuCi0gICAgICAgIC8vIDMpIGEgYmxhbmsgbGluZQotICAgICAgICAvLyA0KSBkYXRhCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEZvciBlYWNoIHBhcmFtZXRlciwgdGhlIHNlcXVlbmNlIGlzIHJlcGVhdGVkLgotICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGRlbGltaXRlcikpCi0gICAgICAgIHsKLSAgICAgICAgICBieXRlW10gZXhwZWN0ZWRQYXJzZXJTdGF0ZXMgPSB7UEFSU0VSX1NUQVRFX0lOSVRJQUwsUEFSU0VSX1NUQVRFX0RBVEF9OwotICAgICAgICAgIGlmIChpc1ZhbGlkUGFyc2VyU3RhdGUoY3VycmVudFBhcnNlclN0YXRlLGV4cGVjdGVkUGFyc2VyU3RhdGVzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTYXZlIGFueSBjdXJyZW50IGRhdGEgYW5kIHByZXBhcmUgZm9yIGEgbmV3IHBhcmFtZXRlciBuYW1lLgotICAgICAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc2F2ZURhdGEocGFyYW1ldGVyTmFtZSxwYXJhbWV0ZXJWYWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgcGFyYW1ldGVyTmFtZSA9IG51bGw7Ci0gICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnNldExlbmd0aCgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnRQYXJzZXJTdGF0ZSA9IFBBUlNFUl9TVEFURV9CT1VOREFSWTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3cgbmV3IE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uKGdldFBhcnNlckV4Y2VwdGlvbk1lc3NhZ2UoY3VycmVudFBhcnNlclN0YXRlLGV4cGVjdGVkUGFyc2VyU3RhdGVzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIGJ5dGVbXSBleHBlY3RlZFBhcnNlclN0YXRlcyA9IHtQQVJTRVJfU1RBVEVfQk9VTkRBUll9OwotICAgICAgICAgIGlmIChpc1ZhbGlkUGFyc2VyU3RhdGUoY3VycmVudFBhcnNlclN0YXRlLGV4cGVjdGVkUGFyc2VyU3RhdGVzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBPYnRhaW4gdGhlIHBhcmFtZXRlciBuYW1lIHdpdGhvdXQgdGhlIHN1cnJvdW5kaW5nIGRvdWJsZSBxdW90ZXMuIEFjY291bnRzIGZvciBSRkMgMTg2NyB0b28uCi0gICAgICAgICAgICBpbnQgcGFyYW1ldGVyTmFtZVN0YXJ0aW5nUG9zaXRpb24gPSBsaW5lLmluZGV4T2YoSEVBREVSX05BTUUpK0hFQURFUl9OQU1FLmxlbmd0aCgpOwotICAgICAgICAgICAgcGFyYW1ldGVyTmFtZSA9IGxpbmUuc3Vic3RyaW5nKHBhcmFtZXRlck5hbWVTdGFydGluZ1Bvc2l0aW9uLCtwYXJhbWV0ZXJOYW1lU3RhcnRpbmdQb3NpdGlvbitsaW5lLnN1YnN0cmluZyhwYXJhbWV0ZXJOYW1lU3RhcnRpbmdQb3NpdGlvbikuaW5kZXhPZignXCInKSk7Ci0gICAgICAgICAgICBjdXJyZW50UGFyc2VyU3RhdGUgPSBQQVJTRVJfU1RBVEVfUEFSQU1FVEVSOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjdXJyZW50UGFyc2VyU3RhdGUgPT0gUEFSU0VSX1NUQVRFX1BBUkFNRVRFUikKLSAgICAgICAgewotICAgICAgICAgIC8vIEEgYmxhbmsgbGluZSBzaG91bGQgZm9sbG93IHRoZSBQQVJBTUVURVIuIERpc2NhcmQgdGhlIGxpbmUgYW5kIG1vdmUgb24uCi0gICAgICAgICAgY3VycmVudFBhcnNlclN0YXRlID0gUEFSU0VSX1NUQVRFX0JMQU5LOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIEV4cGVjdCB0aGUgbGluZSB0byBjb250YWluIGRhdGEuCi0gICAgICAgICAgaWYgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS5hcHBlbmQobGluZSk7Ci0gICAgICAgICAgY3VycmVudFBhcnNlclN0YXRlID0gUEFSU0VSX1NUQVRFX0RBVEE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHRocm93IG5ldyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIC8vZHVtcFBhcmFtVGFibGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHJlcXVlc3QgcGFyYW1ldGVyIGFzIGEgU3RyaW5nLCBvciBudWxsIGlmIHRoZSBwYXJhbWV0ZXIgZG9lcyBub3QgZXhpc3QuCi0gICAqIElmIHRoZSBwYXJhbWV0ZXIgaGFzIG11bHRpcGxlIHZhbHVlcywgb25seSB0aGUgZmlyc3QgdmFsdWUgaXMgcmV0dXJuZWQuIFVzZSBnZXRQYXJhbWV0ZXJWYWx1ZXMoKQotICAgKiBmb3IgcGFyYW1ldGVycyB3aXRoIG11bHRpcGxlIHZhbHVlcy4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UGFyYW1ldGVyKFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHBhcmFtVGFibGVfID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24oIlBhcnNlciBjb250YWlucyBubyBwYXJzZWQgZGF0YSIpOwotICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKXBhcmFtVGFibGVfLmdldChwYXJhbWV0ZXIpOwotICAgIHJldHVybiAoKHZhbHVlcyAhPSBudWxsKT8oKFN0cmluZyl2YWx1ZXMuZWxlbWVudEF0KDApKTpudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtZXRlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocGFyYW1UYWJsZV8gPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbigiUGFyc2VyIGNvbnRhaW5zIG5vIHBhcnNlZCBkYXRhIik7Ci0gICAgVmVjdG9yIHZhbHVlc1ZlY3RvciA9IChWZWN0b3IpcGFyYW1UYWJsZV8uZ2V0KHBhcmFtZXRlcik7Ci0gICAgaWYgKHZhbHVlc1ZlY3RvciA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgU3RyaW5nW10gdmFsdWVzQXJyYXkgPSBuZXcgU3RyaW5nW3ZhbHVlc1ZlY3Rvci5zaXplKCldOwotICAgIGZvciAoaW50IGk9MDtpPHZhbHVlc0FycmF5Lmxlbmd0aDtpKyspCi0gICAgICB2YWx1ZXNBcnJheVtpXSA9IChTdHJpbmcpdmFsdWVzVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICByZXR1cm4gdmFsdWVzQXJyYXk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nW10gZ2V0UGFyYW1ldGVyTmFtZXMoKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIGlmIChwYXJhbVRhYmxlXyA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uKCJQYXJzZXIgY29udGFpbnMgbm8gcGFyc2VkIGRhdGEiKTsKLQotICAgIGludCBzaXplID0gcGFyYW1UYWJsZV8uc2l6ZSgpOwotICAgIGlmIChzaXplID09IDApCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgRW51bWVyYXRpb24ga2V5cyA9IHBhcmFtVGFibGVfLmtleXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTxzaXplO2krKykKLSAgICAgIG5hbWVzW2ldID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHNhdmVEYXRhKFN0cmluZyBwYXJhbWV0ZXJOYW1lLFN0cmluZyBwYXJhbWV0ZXJWYWx1ZSkKLSAgewotICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKXBhcmFtVGFibGVfLmdldChwYXJhbWV0ZXJOYW1lKTsKLSAgICBpZiAodmFsdWVzID09IG51bGwpCi0gICAgICB2YWx1ZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgdmFsdWVzLmFkZEVsZW1lbnQocGFyYW1ldGVyVmFsdWUpOwotICAgIHBhcmFtVGFibGVfLnB1dChwYXJhbWV0ZXJOYW1lLHZhbHVlcyk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNWYWxpZFBhcnNlclN0YXRlKGJ5dGUgY3VycmVudFN0YXRlLGJ5dGVbXSBleHBlY3RlZFN0YXRlcykKLSAgewotICAgIGJvb2xlYW4gdmFsaWRpdHkgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpPTA7aTxleHBlY3RlZFN0YXRlcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChjdXJyZW50U3RhdGUgPT0gZXhwZWN0ZWRTdGF0ZXNbaV0pCi0gICAgICB7Ci0gICAgICAgIHZhbGlkaXR5ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGl0eTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGdldFBhcnNlckV4Y2VwdGlvbk1lc3NhZ2UoYnl0ZSBjdXJyZW50U3RhdGUsYnl0ZVtdIGV4cGVjdGVkU3RhdGVzKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG1zZyA9IG5ldyBTdHJpbmdCdWZmZXIoIlBhcnNlciBzdGF0ZSBpbmNvbnNpc3RlbmN5ISIpOwotICAgIG1zZy5hcHBlbmQoJ1xuJyk7Ci0gICAgbXNnLmFwcGVuZCgiQ3VycmVudCBzdGF0ZSAgICA6ICIpLmFwcGVuZChwYXJzZXJTdGF0ZXNbY3VycmVudFN0YXRlXSkuYXBwZW5kKCdcbicpOwotICAgIG1zZy5hcHBlbmQoIkV4cGVjdGVkIHN0YXRlKHMpOiAiKTsKLSAgICBmb3IgKGludCBpPTA7aTxleHBlY3RlZFN0YXRlcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIG1zZy5hcHBlbmQocGFyc2VyU3RhdGVzW2V4cGVjdGVkU3RhdGVzW2ldXSk7Ci0gICAgICBpZiAoaSAhPSBleHBlY3RlZFN0YXRlcy5sZW5ndGgtMSkKLSAgICAgICAgbXNnLmFwcGVuZCgiLCAiKTsKLSAgICB9Ci0gICAgbXNnLmFwcGVuZCgnXG4nKTsKLSAgICByZXR1cm4gbXNnLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9RdWlja1NvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9RdWlja1NvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAxOGVlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvUXVpY2tTb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTcgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQ29sbGF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBRdWlja1NvcnQKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHNvcnQoT2JqZWN0W10gYSxpbnQgbG8saW50IGhpKQotICB7Ci0gICAgT2JqZWN0IHRtcDsKLSAgICBpbnQgaSA9IGxvOwotICAgIGludCBqID0gaGk7Ci0gICAgT2JqZWN0IHggPSBhWyhsbytoaSkvMl07Ci0gICAgQ29sbGF0b3IgY29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZSgpOwotCi0gICAgZG8KLSAgICB7Ci0gICAgICB3aGlsZSAoY29sbGF0b3IuY29tcGFyZShhW2ldLnRvU3RyaW5nKCkseC50b1N0cmluZygpKSA8IDApIGkrKzsKLSAgICAgIHdoaWxlIChjb2xsYXRvci5jb21wYXJlKGFbal0udG9TdHJpbmcoKSx4LnRvU3RyaW5nKCkpID4gMCkgai0tOwotICAgICAgaWYgKGkgPD0gaikKLSAgICAgIHsKLSAgICAgICAgdG1wID0gYVtpXTsKLSAgICAgICAgYVtpXSA9IGFbal07Ci0gICAgICAgIGFbal0gPSB0bXA7Ci0gICAgICAgIGkrKzsKLSAgICAgICAgai0tOwotICAgICAgfQotICAgIH0gd2hpbGUgKGkgPD0gaik7Ci0KLSAgICBpZiAobG8gPCBqKQotICAgICAgc29ydChhLGxvLGopOwotICAgIGlmIChpIDwgaGkpCi0gICAgICBzb3J0KGEsaSxoaSk7Ci0gIH0KLQotICAvKgotICAqIFRoaXMgbWV0aG9kIHdpbGwgdXNlIHRoZSBzYW1lIGFsZ29yaXRobSBhcyBhYm92ZQotICAqIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGFueSBudWxscyB3aWxsIGJlIGF0dGFjaGVkCi0gICogYXQgdGhlIGVuZAotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgc29ydChWZWN0b3IgdikKLSAgewotICAgIC8vIGRvIG5vdCBzb3J0IGlmIHZlY3RvciBjb250YWlucyBsZXNzIHRoYW4gMiBlbGVtZW50cwotICAgIGlmICh2LnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybjsKLSAgCi0gICAgLy8gcHVsbHMgb3V0IHRoZSBudWxscwotICAgIFZlY3RvciBudWxscyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKLSAgICAgIE9iamVjdCBvYmogPSB2LmVsZW1lbnRBdChpKTsKLSAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmoudG9TdHJpbmcoKSA9PSBudWxsKSB7Ci0gICAgICAgIG51bGxzLmFkZChvYmopOwotICAgICAgICB2LnJlbW92ZShpKTsKLSAgICAgICAgaS0tOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIHNvcnQgdGhlIG5vdCBudWxsIG9iamVjdHMKLSAgICBPYmplY3RbXSBvYmpzID0gdi50b0FycmF5KCk7Ci0gICAgLy8gZG8gbm90IHNvcnQgaWYgYXJyYXkgY29udGFpbnMgbGVzcyB0aGFuIDIgb2JqZWN0cwotICAgIGlmIChvYmpzLmxlbmd0aCA+PSAyKQotICAgICAgICBzb3J0KG9ianMsIDAsIG9ianMubGVuZ3RoLTEpOwotCi0gICAgLy8gcmUtY29uc3RydWN0IHRoZSB2ZWN0b3IgZnJvbSB0aGUgc29ydGVkIG9iamVjdHMsIHRoZW4gdGhlIG51bGxzCi0gICAgdi5jbGVhcigpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgb2Jqcy5sZW5ndGg7IGorKykgewotICAgICAgICB2LmFkZChvYmpzW2pdKTsKLSAgICB9Ci0gICAgdi5hZGRBbGwobnVsbHMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvVHJpbUZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1RyaW1GaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI4NGY5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvVHJpbUZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuRmlsdGVyOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuRmlsdGVyQ2hhaW47Ci1pbXBvcnQgamF2YXguc2VydmxldC5GaWx0ZXJDb25maWc7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2U7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci0KLXB1YmxpYyBjbGFzcyBUcmltRmlsdGVyIGltcGxlbWVudHMgRmlsdGVyCi17Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmF4LnNlcnZsZXQuRmlsdGVyI2luaXQoamF2YXguc2VydmxldC5GaWx0ZXJDb25maWcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBhcmcwKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbgotICB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YXguc2VydmxldC5GaWx0ZXIjZG9GaWx0ZXIoamF2YXguc2VydmxldC5TZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2UsIGphdmF4LnNlcnZsZXQuRmlsdGVyQ2hhaW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXNwLCBGaWx0ZXJDaGFpbiBmYykgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uCi0gIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgQ2hhckFycmF5V3JhcHBlciByZXNwb25zZVdyYXBwZXIgPSBuZXcgQ2hhckFycmF5V3JhcHBlcigoSHR0cFNlcnZsZXRSZXNwb25zZSlyZXNwKTsKLSAgICAvLyBIYWNrIGZvciBUb21jYXQgcGVyZm9ybWFuY2UgcHJvYmxlbSB3aXRoIGZpbHRlcnMuCi0gICAgT3V0cHV0U3RyZWFtV3JpdGVyIG9zdyA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIocmVzcC5nZXRPdXRwdXRTdHJlYW0oKSxIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gICAgZmMuZG9GaWx0ZXIocmVxLHJlc3BvbnNlV3JhcHBlcik7Ci0gICAgU3RyaW5nIHJlc3BvbnNlU3RyaW5nID0gcmVzcG9uc2VXcmFwcGVyLnRvU3RyaW5nKCk7Ci0gICAgb3N3LndyaXRlKHJlc3BvbnNlU3RyaW5nLnRyaW0oKSk7Ci0gICAgb3N3LmNsb3NlKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YXguc2VydmxldC5GaWx0ZXIjZGVzdHJveSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBkZXN0cm95KCkKLSAgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9VUkxVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1VSTFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MDcwYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1VSTFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkxEZWNvZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyB1dGlsaXR5IG1ldGhvZHMgZm9yIG1hbmFnaW5nIFVSTHMKLSAqIGFzIHVzZWQgYnkgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBXZWIgYXBwbGljYXRpb24uCi0gKiBAYXV0aG9yIGNicmVhbGV5QGNhLmlibS5jb20KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFVSTFV0aWxzCi17Ci0JLyoqCi0JICogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHNob3VsZCBub3QgYmUgY29uc3RydWN0ZWQuCi0JICovCi0JcHJpdmF0ZSBVUkxVdGlscyAoKQotCXsKLQl9Ci0KLQkvKioKLQkgKiBVVEYtOAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVURjggPSAiVVRGLTgiOwotCi0JLyoqCi0JICogRXF1aXZhbGVudCB0byB7QGxpbmsgI2VuY29kZShTdHJpbmcsU3RyaW5nKX0KLQkgKiB3aXRoIHNlY29uZCBwYXJhbWV0ZXIgc2V0IHRvIHRoZSAiVVRGLTgiIGVuY29kaW5nLgotCSAqIEBwYXJhbSBzIFRoZSBzdHJpbmcgdG8gZW5jb2RlLgotCSAqIEByZXR1cm4gVGhlIGVuY29kZWQgc3RyaW5nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGVuY29kZShTdHJpbmcgcykKLQl7Ci0JCXJldHVybiBlbmNvZGUocyxVVEY4KTsKLQl9Ci0JCi0JLyoqCi0JICogRXF1aXZhbGVudCB0byB7QGxpbmsgVVJMRW5jb2RlciNlbmNvZGUoU3RyaW5nLFN0cmluZyl9LAotCSAqIG9ubHkgdGhyb3dzIGFuIHVuY2hlY2tlZCB7QGxpbmsgUnVudGltZUV4Y2VwdGlvbn0gd3JhcHBlZAotCSAqIGFyb3VuZCBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbn0gaW5zdGVhZCBvZgotCSAqIGFuIHtAbGluayBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9ufS4KLQkgKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIGVuY29kZS4KLQkgKiBAcGFyYW0gZW5jIFRoZSBlbmNvZGluZyB0byB1c2UuCi0JICogQHJldHVybiBUaGUgZW5jb2RlZCBzdHJpbmcuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZW5jb2RlKFN0cmluZyBzLCBTdHJpbmcgZW5jKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCXJldHVybiBVUkxFbmNvZGVyLmVuY29kZShzLGVuYyk7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gVE9ETzogTVNHX0JST0tFTl9WTV9ET0VTX05PVF9TVVBQT1JUX1VURi04Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiJU1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOCIsZSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogRXF1aXZhbGVudCB0byB7QGxpbmsgI2RlY29kZShTdHJpbmcsU3RyaW5nKX0KLQkgKiB3aXRoIHNlY29uZCBwYXJhbWV0ZXIgc2V0IHRvIHRoZSAiVVRGLTgiIGVuY29kaW5nLgotCSAqIEBwYXJhbSBzIFRoZSBzdHJpbmcgdG8gZGVjb2RlLgotCSAqIEByZXR1cm4gVGhlIGRlY29kZWQgc3RyaW5nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGRlY29kZShTdHJpbmcgcykKLQl7Ci0JCXJldHVybiBkZWNvZGUocyxVVEY4KTsKLQl9Ci0JCi0JLyoqCi0JICogRXF1aXZhbGVudCB0byB7QGxpbmsgVVJMRW5jb2RlciNkZWNvZGUoU3RyaW5nLFN0cmluZyl9LAotCSAqIG9ubHkgdGhyb3dzIGFuIHVuY2hlY2tlZCB7QGxpbmsgUnVudGltZUV4Y2VwdGlvbn0gd3JhcHBlZAotCSAqIGFyb3VuZCBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbn0gaW5zdGVhZCBvZgotCSAqIGFuIHtAbGluayBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9ufS4KLQkgKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIGRlY29kZS4KLQkgKiBAcGFyYW0gZW5jIFRoZSBlbmNvZGluZyB0byB1c2UuCi0JICogQHJldHVybiBUaGUgZGVjb2RlZCBzdHJpbmcuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZGVjb2RlKFN0cmluZyBzLCBTdHJpbmcgZW5jKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCXJldHVybiBVUkxEZWNvZGVyLmRlY29kZShzLGVuYyk7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gVE9ETzogTVNHX0JST0tFTl9WTV9ET0VTX05PVF9TVVBQT1JUX1VURi04Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiJU1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOCIsZSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MzhlYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1ZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQyMjkwIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZVN0cmluZyhTdHJpbmcgaW5wdXQpCi0gIHsKLSAgICByZXR1cm4gKChpbnB1dCAhPSBudWxsKSAmJiAoaW5wdXQudHJpbSgpLmxlbmd0aCgpID4gMCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIHZhbGlkYXRlVVJMKFN0cmluZyBpbnB1dCkKLSAgewotCSAgcmV0dXJuIChpbnB1dCAhPSBudWxsICYmIGlucHV0Lm1hdGNoZXMoIlthLXpBLVpcXCtcXC1cXC5dKys6LioiKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZUludGVnZXIoU3RyaW5nIGlucHV0KQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSW50ZWdlci5wYXJzZUludChpbnB1dCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9YTUxVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1hNTFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZDU2MzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1hNTFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgWE1MVXRpbHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVRGOF9FTkNPRElORyA9ICJVVEYtOCI7IAotCQotICAvKioKLSAgICogU2VyaWFsaXplIGFuIFhNTCBFbGVtZW50IGludG8gYSBTdHJpbmcuCi0gICAqIEBwYXJhbSBlIEVsZW1lbnQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogQHBhcmFtIG9taXRYTUxEZWNsYXJhdGlvbiBib29sZWFuIHJlcHJlc2VudGluZyB3aGV0aGVyIG9yIG5vdCB0byBvbWl0IHRoZSBYTUwgZGVjbGFyYXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBYTUwgZG9jdW1lbnQgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzZXJpYWxpemUoRWxlbWVudCBlLGJvb2xlYW4gb21pdFhNTERlY2xhcmF0aW9uKQotICB7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLQkJRE9NU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZSk7Ci0JCVRyYW5zZm9ybWVyIHNlcmlhbGl6ZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuT01JVF9YTUxfREVDTEFSQVRJT04sICgob21pdFhNTERlY2xhcmF0aW9uKSA/ICJ5ZXMiIDogIm5vIikpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgVVRGOF9FTkNPRElORyk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjIiKTsKLQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCXNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3CVN0cmVhbVJlc3VsdChiYW9zKSk7Ci0JCWJhb3MuY2xvc2UoKTsKLQkJcmV0dXJuIG5ldyBTdHJpbmcoYmFvcy50b0J5dGVBcnJheSgpLCBVVEY4X0VOQ09ESU5HKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIFNlcmlhbGl6ZSBhbiBYTUwgRWxlbWVudCBpbnRvIGEgU3RyaW5nLgotICAgKiBAcGFyYW0gZGYgRG9jdW1lbnRGcmFnbWVudCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBAcGFyYW0gb21pdFhNTERlY2xhcmF0aW9uIGJvb2xlYW4gcmVwcmVzZW50aW5nIHdoZXRoZXIgb3Igbm90IHRvIG9taXQgdGhlIFhNTCBkZWNsYXJhdGlvbi4KLSAgICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFhNTCBkb2N1bWVudCBmcmFnbWVudC4KLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2VyaWFsaXplKERvY3VtZW50RnJhZ21lbnQgZGYsYm9vbGVhbiBvbWl0WE1MRGVjbGFyYXRpb24pCi0gIHsKLSAgICBpZiAoZGYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLQkJRE9NU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZGYpOwotCQlUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLk9NSVRfWE1MX0RFQ0xBUkFUSU9OLCAoKG9taXRYTUxEZWNsYXJhdGlvbikgPyAieWVzIiA6ICJubyIpKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsIFVURjhfRU5DT0RJTkcpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICIyIik7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldwlTdHJlYW1SZXN1bHQoYmFvcykpOwotCQliYW9zLmNsb3NlKCk7Ci0JCXJldHVybiBuZXcgU3RyaW5nKGJhb3MudG9CeXRlQXJyYXkoKSwgVVRGOF9FTkNPRElORyk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgbmV3IFhNTCBEb2N1bWVudC4KLSAgICogQHBhcmFtIGRvY0J1aWxkZXIgRG9jdW1lbnRCdWlsZGVyLiBTZXR0aW5nIHRoaXMgdG8gbnVsbCB3aWxsIGNyZWF0ZSBhIG5ldyBEb2N1bWVudEJ1aWxkZXIuCi0gICAqIEByZXR1cm4gRG9jdW1lbnQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRG9jdW1lbnQgY3JlYXRlTmV3RG9jdW1lbnQoRG9jdW1lbnRCdWlsZGVyIGRvY0J1aWxkZXIpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoZG9jQnVpbGRlciA9PSBudWxsKQotICAgIHsKLSAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUoZmFsc2UpOwotICAgICAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLSAgICAgIGRvY0J1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgIH0KLSAgICBEb2N1bWVudCBkb2MgPSBkb2NCdWlsZGVyLm5ld0RvY3VtZW50KCk7Ci0gICAgcmV0dXJuIGRvYzsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudCBpbnRvIGFuIEVsZW1lbnQKLSAgICogQHBhcmFtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBFbGVtZW50LgotICAgKiBAcmV0dXJuIEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBzdHJpbmdUb0VsZW1lbnQoU3RyaW5nIHMpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gc3RyaW5nVG9FbGVtZW50KHMsIGZhbHNlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudCBpbnRvIGFuIEVsZW1lbnQKLSAgICogQHBhcmFtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBFbGVtZW50LgotICAgKiBAcGFyYW0gYm9vbGVhbiBzZXQgd2hldGhlciB0aGUgcmV0dXJuIEVsZW1lbnQgc2hvdWxkIGJlIG5hbWVzcGFjZSBhd2FyZS4KLSAgICogQHJldHVybiBFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgc3RyaW5nVG9FbGVtZW50KFN0cmluZyBzLCBib29sZWFuIG5hbWVzcGFjZUF3YXJlKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGJ5dGVBcnJheVRvRWxlbWVudChzLmdldEJ5dGVzKFVURjhfRU5DT0RJTkcpLCBuYW1lc3BhY2VBd2FyZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCB0aGUgYnl0ZSBhcnJheSByZXByZXNlbnRhdGlvbiBvZiBhbiBFbGVtZW50IGludG8gYW4gRWxlbWVudAotICAgKiBAcGFyYW0gYnl0ZVtdIHJlcHJlc2VudGF0aW9uIG9mIGFuIEVsZW1lbnQuCi0gICAqIEBwYXJhbSBib29sZWFuIHNldCB3aGV0aGVyIHRoZSByZXR1cm4gRWxlbWVudCBzaG91bGQgYmUgbmFtZXNwYWNlIGF3YXJlLgotICAgKiBAcmV0dXJuIEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBieXRlQXJyYXlUb0VsZW1lbnQoYnl0ZVtdIGIsIGJvb2xlYW4gbmFtZXNwYWNlQXdhcmUpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRvY0J1aWxkZXJGYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgIGRvY0J1aWxkZXJGYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKG5hbWVzcGFjZUF3YXJlKTsKLSAgICBkb2NCdWlsZGVyRmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLSAgICBEb2N1bWVudEJ1aWxkZXIgZG9jQnVpbGRlciA9IGRvY0J1aWxkZXJGYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgIERvY3VtZW50IGRvYyA9IGRvY0J1aWxkZXIucGFyc2UobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGIpKTsKLSAgICByZXR1cm4gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0NsZWFyV1NETEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDgxNGI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0NsZWFyV1NETEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkNsZWFyTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMTWFpbk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETE5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBDbGVhcldTRExBY3Rpb24gZXh0ZW5kcyBDbGVhck5vZGVBY3Rpb24gewotCi0gIHB1YmxpYyBDbGVhcldTRExBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCkgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL0NsZWFyV1NETEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKLSAgICBTdHJpbmcgbm9kZUlEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgaW50IG5vZGVJRDsKLSAgICB0cnkgewotICAgICAgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludChub2RlSURTdHJpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotICAgICAgbm9kZUlEID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZUlkKCk7Ci0gICAgfQotICAgIGJvb2xlYW4gcGFyYW1WYWxpZCA9IGZhbHNlOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBXU0RMTWFpbk5vZGUpCi0gICAgICBwYXJhbVZhbGlkID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgV1NETE5vZGUpCi0gICAgICBwYXJhbVZhbGlkID0gdHJ1ZTsKLSAgICBlbHNlIHsKLSAgICAgIHdoaWxlIChub2RlICE9IG51bGwgJiYgIShub2RlIGluc3RhbmNlb2YgV1NETE1haW5Ob2RlKSkgewotICAgICAgICBub2RlID0gbm9kZS5nZXRQYXJlbnQoKTsKLSAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBXU0RMTm9kZSkgewotICAgICAgICAgIG5vZGVJRCA9IG5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICAgICAgcGFyYW1WYWxpZCA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKG5vZGVJRCkpOwotICAgIHJldHVybiBwYXJhbVZhbGlkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgIGlmIChzdXBlci5ydW4oKSkgewotICAgICAgbm9kZU1hbmFnZXJfLnNldFNlbGVjdGVkTm9kZUlkKG5vZGVNYW5hZ2VyXy5nZXRSb290Tm9kZSgpLmdldE5vZGVJZCgpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgIHJldHVybiAid3NkbE5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKSB7Ci0gICAgcmV0dXJuICJ3c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpIHsKLSAgICByZXR1cm4gIndzZGxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSB7Ci0gICAgcmV0dXJuICJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpIHsKLSAgICByZXR1cm4gIndzZGxTdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSB7Ci0gICAgcmV0dXJuICJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvQ3JlYXRlSW5zdGFuY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YTA3NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvQ3JlYXRlSW5zdGFuY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RNYXBGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5JbnZva2VXU0RMT3BlcmF0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBDcmVhdGVJbnN0YW5jZUFjdGlvbiBleHRlbmRzIFdTRExQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwdWJsaWMgQ3JlYXRlSW5zdGFuY2VBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIucHJvY2Vzc1BhcnNlZFJlc3VsdHMocGFyc2VyKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIEludm9rZVdTRExPcGVyYXRpb25Ub29sIGludm9rZVdTRExPcGVyYXRpb25Ub29sID0gKEludm9rZVdTRExPcGVyYXRpb25Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBTdHJpbmcgZnJhZ21lbnRJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfSUQpOwotICAgIGlmIChmcmFnbWVudElEICE9IG51bGwgJiYgZnJhZ21lbnRJRC5sZW5ndGgoKSA+IDApCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfSUQsIGZyYWdtZW50SUQpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5yZW1vdmUoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfSUQpOwotICAgICAgcmVzdWx0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIFN0cmluZyBuYW1lQW5jaG9ySUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKTsKLSAgICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRGcmFnbWVudE5hbWVBbmNob3JJRChuYW1lQW5jaG9ySUQpOwotICAgIHJldHVybiByZXN1bHRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpCi0gIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZyBmcmFnbWVudElEID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfSUQpOwotICAgIGlmIChmcmFnbWVudElEICE9IG51bGwgJiYgZnJhZ21lbnRJRC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdtZW50SUQpOwotICAgICAgaWYgKChmcmFnIGluc3RhbmNlb2YgSVhTRE1hcEZyYWdtZW50KSAmJiAoKElYU0RNYXBGcmFnbWVudClmcmFnKS5jcmVhdGVJbnN0YW5jZSgpICE9IG51bGwpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3OWYyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuTmV0VXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBJbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb24gZXh0ZW5kcyBJbnZva2VXU0RMSHR0cE9wZXJhdGlvbkZvcm1BY3Rpb24KLXsKLSAgcHVibGljIEludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAgIAotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgU3RyaW5nQnVmZmVyIGVuZFBvaW50ID0gbmV3IFN0cmluZ0J1ZmZlcihnZXRFbmRQb2ludCgpKTsKLSAgICBlbmRQb2ludC5hcHBlbmQoJz8nKTsKLSAgICBhZGRQYXJhbWV0ZXJzKGVuZFBvaW50KTsKLSAgICBTdHJpbmcgZW5kUG9pbnRTdHJpbmcgPSBlbmRQb2ludC50b1N0cmluZygpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVVJMQ29ubmVjdGlvbiBjb25uID0gTmV0VXRpbHMuZ2V0VVJMQ29ubmVjdGlvbihlbmRQb2ludFN0cmluZyk7Ci0gICAgICBpZiAoY29ubiAhPSBudWxsKQotICAgICAgewotICAgICAgICByZWNvcmRIdHRwUmVzcG9uc2UoY29ubixtZXNzYWdlUXVldWUpOwotICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0T3BlcmF0aW9uTm9kZShnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKSk7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VOQUJMRV9UT19DT05ORUNUIixlbmRQb2ludFN0cmluZykpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIklPRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI0MTg1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuSFRUUFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2w7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnZva2VXU0RMSHR0cE9wZXJhdGlvbkZvcm1BY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfVFlQRV9DSEFSU0VURVEgPSAiY2hhcnNldD0iOwotICAKLSAgcHVibGljIEludm9rZVdTRExIdHRwT3BlcmF0aW9uRm9ybUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgU3RyaW5nIGVuZFBvaW50ID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbCA9IChJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRFbmRQb2ludChlbmRQb2ludCk7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpKHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV1NETEFjdGlvbklucHV0cy5PUEVSQVRJT05fRUxFTUVOVCxvcGVyRWxlbWVudCk7Ci0gICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICBib29sZWFuIHJlc3VsdHNWYWxpZCA9IHRydWU7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgSUZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0c1ZhbGlkOwotICB9ICAKLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RW5kUG9pbnQoKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGVuZFBvaW50ID0gbmV3IFN0cmluZ0J1ZmZlcigoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCkpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLk9QRVJBVElPTl9FTEVNRU5UKTsKLSAgICBpZiAoZW5kUG9pbnQuY2hhckF0KGVuZFBvaW50Lmxlbmd0aCgpLTEpICE9ICcvJykKLSAgICAgIGVuZFBvaW50LmFwcGVuZCgnLycpOwotICAgIGVuZFBvaW50LmFwcGVuZChvcGVyRWxlbWVudC5nZXROYW1lKCkpOwotICAgIHJldHVybiBlbmRQb2ludC50b1N0cmluZygpOyAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgYWRkUGFyYW1ldGVycyhTdHJpbmdCdWZmZXIgYnVmZmVyKQotICB7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpcHJvcGVydHlUYWJsZV8uZ2V0KFdTRExBY3Rpb25JbnB1dHMuT1BFUkFUSU9OX0VMRU1FTlQpOwotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydClpdC5uZXh0KCk7Ci0gICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgYnVmZmVyLmFwcGVuZChIVFRQVXRpbC5nZW5VUkxFbmNvZGVkUGFyYW1ldGVycyhmcmFnKSk7Ci0gICAgICBpZiAoaXQuaGFzTmV4dCgpKQotICAgICAgICBidWZmZXIuYXBwZW5kKCcmJyk7Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWNvcmRIdHRwUmVzcG9uc2UoVVJMQ29ubmVjdGlvbiBjb25uLE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtUmVhZGVyIGluID0gbnVsbDsKLSAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IGNvbm4uZ2V0Q29udGVudFR5cGUoKTsKLSAgICAgIGlmIChjb250ZW50VHlwZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpbnQgY2hhcnNldEVxUG9zID0gY29udGVudFR5cGUuaW5kZXhPZihDT05URU5UX1RZUEVfQ0hBUlNFVEVRKTsKLSAgICAgICAgaWYgKGNoYXJzZXRFcVBvcyAhPSAtMSkKLSAgICAgICAgICBpbiA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihjb25uLmdldElucHV0U3RyZWFtKCksY29udGVudFR5cGUuc3Vic3RyaW5nKGNoYXJzZXRFcVBvcytDT05URU5UX1RZUEVfQ0hBUlNFVEVRLmxlbmd0aCgpKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoaW4gPT0gbnVsbCkKLSAgICAgICAgaW4gPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29ubi5nZXRJbnB1dFN0cmVhbSgpKTsKLSAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGluKTsKLSAgICAgIFN0cmluZyBzOwotICAgICAgd2hpbGUgKChzID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uocyk7Ci0gICAgICBici5jbG9zZSgpOwotICAgICAgYnIgPSBudWxsOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBpZiAoYnIgIT0gbnVsbCkKLSAgICAgICAgYnIuY2xvc2UoKTsKLSAgICAgIHRocm93IGU7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MTEzZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5Lk5ldFV0aWxzOwotCi1wdWJsaWMgY2xhc3MgSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbiBleHRlbmRzIEludm9rZVdTRExIdHRwT3BlcmF0aW9uRm9ybUFjdGlvbgotewotCi0gIHB1YmxpYyBJbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgU3RyaW5nIGVuZFBvaW50U3RyaW5nID0gZ2V0RW5kUG9pbnQoKTsKLSAgICBVUkxDb25uZWN0aW9uIGNvbm4gPSBOZXRVdGlscy5nZXRVUkxDb25uZWN0aW9uKGVuZFBvaW50U3RyaW5nKTsKLSAgICBpZiAoY29ubiAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgYWRkUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKLSAgICAgIGNvbm4uc2V0RG9PdXRwdXQodHJ1ZSk7Ci0gICAgICBQcmludFdyaXRlciBvdXQgPSBudWxsOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIG91dCA9IG5ldyBQcmludFdyaXRlcihjb25uLmdldE91dHB1dFN0cmVhbSgpKTsKLSAgICAgICAgb3V0LnByaW50KHBhcmFtZXRlcnMpOwotICAgICAgICBvdXQuY2xvc2UoKTsKLSAgICAgICAgb3V0ID0gbnVsbDsKLSAgICAgICAgcmVjb3JkSHR0cFJlc3BvbnNlKGNvbm4sbWVzc2FnZVF1ZXVlKTsKLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldE9wZXJhdGlvbk5vZGUoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkpOwotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiSU9FeGNlcHRpb24iLGUpOwotICAgICAgfQotICAgICAgZmluYWxseQotICAgICAgewotICAgICAgICBpZiAob3V0ICE9IG51bGwpCi0gICAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiRXhjZXB0aW9uIixuZXcgSU9FeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkFCTEVfVE9fQ09OTkVDVCIsZW5kUG9pbnRTdHJpbmcpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YWQzYjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICogMjAwNzA1MTAgICAxODYzNzUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENvbXBpbGUgZXJyb3JzIGluIHdzdC53cy5leHBsb3JlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5FbmRwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEJpbmRpbmdFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5JbnZva2VXU0RMT3BlcmF0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudXRpbC5TT0FQTWVzc2FnZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnZva2VXU0RMU09BUE9wZXJhdGlvbkFjdGlvbiBleHRlbmRzIFdTRExQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwdWJsaWMgSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIucHJvY2Vzc1BhcnNlZFJlc3VsdHMocGFyc2VyKTsKLSAgICBTdHJpbmcgZW5kUG9pbnQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UKTsKLSAgICBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbCA9IChJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCkoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgIGludm9rZVdTRExPcGVyYXRpb25Ub29sLnNldEVuZFBvaW50KGVuZFBvaW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIElTT0FQTWVzc2FnZSB0byB1c2UgZm9yIHRoZSBjdXJyZW50IFNPQVAgb3BlcmF0aW9uIGludm9jYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gb3BlckVsZW1lbnQgVGhlIG9wZXJhdGlvbiBlbGVtZW50IGZyb20gdGhlIFdTREwgbW9kZWwuCi0gICAqIAotICAgKiBAcmV0dXJuIEFuIElTT0FQTWVzc2FnZSwgb3IgbnVsbCBpZiBhIG1lc3NhZ2UgY2Fubm90IGJlIGNvbnN0cnVjdGVkLgotICAgKi8KLSAgcHJvdGVjdGVkIElTT0FQTWVzc2FnZSBnZXRTT0FQUmVxdWVzdE1lc3NhZ2UoV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHsKLQkgIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgcHJvdmlkZXIgPSBvcGVyRWxlbWVudC5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKTsKLQkgIGlmIChwcm92aWRlciA9PSBudWxsKQotCQkgIHJldHVybiBudWxsOwkgIAotCSAgcmV0dXJuIHByb3ZpZGVyLm5ld1RyYW5zcG9ydCgpLm5ld01lc3NhZ2Uob3BlckVsZW1lbnQuZ2V0TWVzc2FnZUNvbnRleHQoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQb3B1bGF0ZSB0aGUgZ2l2ZW4gSVNPQVBNZXNzYWdlJ3MgaGVhZGVyIHVzaW5nIHRoZSBpbnB1dHMgZnJvbSBXU0UKLSAgICogCi0gICAqIEBwYXJhbSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSBIYXNodGFibGUgY29udGFpbmluZyBhIG1hcCBvZiB0aGUgbmFtZXNwYWNlIFVSSXMgdG8gcHJlZml4ZXMuCi0gICAqIEBwYXJhbSBvcGVyRWxlbWVudCBXU0RMT3BlcmF0aW9uRWxlbWVudCBlbmNhcHN1bGF0aW5nIHRoZSBXU0RMIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIHNvYXBNZXNzYWdlIFRoZSBJU09BUE1lc3NhZ2UgdG8gcG9wdWxhdGUgCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRIZWFkZXJDb250ZW50KEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQsIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSkKLSAgICB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgU09BUE1lc3NhZ2VVdGlscy5zZXRIZWFkZXJDb250ZW50RnJvbU1vZGVsKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFBvcHVsYXRlIHRoZSBnaXZlbiBJU09BUE1lc3NhZ2UncyBib2R5IHVzaW5nIHRoZSBpbnB1dHMgZnJvbSBXU0UKLSAgICogCi0gICAqIEBwYXJhbSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSBIYXNodGFibGUgY29udGFpbmluZyBhIG1hcCBvZiB0aGUgbmFtZXNwYWNlIFVSSXMgdG8gcHJlZml4ZXMuCi0gICAqIEBwYXJhbSBvcGVyRWxlbWVudCBXU0RMT3BlcmF0aW9uRWxlbWVudCBlbmNhcHN1bGF0aW5nIHRoZSBXU0RMIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIHNvYXBNZXNzYWdlIFRoZSBJU09BUE1lc3NhZ2UgdG8gcG9wdWxhdGUgCi0gICAqLyAgCi0gIHByb3RlY3RlZCB2b2lkIHNldEJvZHlDb250ZW50KEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQsIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSkgCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gewotCVNPQVBNZXNzYWdlVXRpbHMuc2V0Qm9keUNvbnRlbnRGcm9tTW9kZWwoc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7Ci0gIH0gICAgICAgIAotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgc29hcEFkZHJlc3NMb2NhdGlvbiA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCA9IChXU0RMQmluZGluZ0VsZW1lbnQpb3BlckVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETEFjdGlvbklucHV0cy5TT0FQX1JFU1BPTlNFX0NBQ0hFRCwgbmV3IEJvb2xlYW4oZmFsc2UpKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZW5lcmF0ZSB0aGUgU09BUCBlbnZlbG9wZSBhbmQgaXRzIGNoaWxkcmVuLiBXZSBuZWVkIHRvIGNyZWF0ZSBhIERPTSBlbGVtZW50IHZlcnNpb24gdG8gZGlzcGxheSBhbmQgdGhlIG9iamVjdCB2ZXJzaW9uIHRvIGV4ZWN1dGUuCi0gICAgICAvLyA8U09BUC1FTlY6RW52ZWxvcGUKLSAgICAgIC8vICAgIHhtbG5zOlNPQVAtRU5WPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIKLSAgICAgIC8vICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAvLyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIC8vIC4uLgotCi0JICBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UgPSBnZXRTT0FQUmVxdWVzdE1lc3NhZ2Uob3BlckVsZW1lbnQpOwotCSAgaWYgKHNvYXBNZXNzYWdlID09IG51bGwpCi0JCSAgdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NVSVRBQkxFX1RSQU5TUE9SVCIpKTsKLQkgIAotCSAgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlID0gbmV3IEhhc2h0YWJsZShzb2FwTWVzc2FnZS5nZXROYW1lc3BhY2VUYWJsZSgpKTsJICAKLQkgIHNldEhlYWRlckNvbnRlbnQobmFtZXNwYWNlVGFibGUsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7Ci0JICBzZXRCb2R5Q29udGVudChuYW1lc3BhY2VUYWJsZSwgb3BlckVsZW1lbnQsIHNvYXBNZXNzYWdlKTsgICAgICAKLQkgIHNvYXBNZXNzYWdlLnNldE5hbWVzcGFjZVRhYmxlKG5hbWVzcGFjZVRhYmxlKTsKLQotCSAgLy8gc3RvcmUgdGhlIHJlcXVlc3QKLQkgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVFVRVNULCBzb2FwTWVzc2FnZSk7ICAKLQkgIAotCSAgLy8gRXhlY3V0ZSB0aGUgU09BUCBvcGVyYXRpb24uCi0gICAgICBpZiAoc29hcEFkZHJlc3NMb2NhdGlvbiAhPSBudWxsKQotICAgICAgeyAgICAJCi0gICAgCXNvYXBNZXNzYWdlLnNldFByb3BlcnR5KElTT0FQTWVzc2FnZS5QUk9QX1NPQVBfQUNUSU9OLCBvcGVyRWxlbWVudC5nZXRTb2FwQWN0aW9uKCkpOwotICAgIAlTdHJpbmdbXSBhdXRoUGFyYW1zID0gcmV0cmlldmVBdXRoUGFyYW1zKGJpbmRpbmdFbGVtZW50LCBzb2FwQWRkcmVzc0xvY2F0aW9uKTsKLSAgICAJCi0gICAgCS8vIGludm9rZSEKLSAgICAJSVNPQVBNZXNzYWdlIHNvYXBSZXNwb25zZSA9IG9wZXJFbGVtZW50LmdldFNPQVBUcmFuc3BvcnRQcm92aWRlcigpLm5ld1RyYW5zcG9ydCgpCi0gICAgCQkuc2VuZChzb2FwQWRkcmVzc0xvY2F0aW9uLCBhdXRoUGFyYW1zWzBdLCBhdXRoUGFyYW1zWzFdLCBzb2FwTWVzc2FnZSk7Ci0gICAgCQotICAgIAkvLyBzdG9yZSB0aGUgcmVzcG9uc2UKLSAgICAJb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT0FQX1JFU1BPTlNFLCBzb2FwUmVzcG9uc2UpOwotICAgIAkKLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldE9wZXJhdGlvbk5vZGUoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VOQUJMRV9UT19DT05ORUNUIixzb2FwQWRkcmVzc0xvY2F0aW9uKSk7Ci0gICAgfQotICAgIGNhdGNoIChIVFRQVHJhbnNwb3J0RXhjZXB0aW9uIGUpIHsKLSAgICAgIHRocm93SFRUUFRyYW5zcG9ydEV4Y2VwdGlvbihiaW5kaW5nRWxlbWVudCwgc29hcEFkZHJlc3NMb2NhdGlvbiwgZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgVGhyb3dhYmxlIHQgPSBlOwotICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUcmFuc3BvcnRFeGNlcHRpb24gJiYgZS5nZXRDYXVzZSgpICE9IG51bGwpCi0gICAgCXQgPSBlLmdldENhdXNlKCk7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSwgbWVzc2FnZVF1ZXVlLCB0LmdldENsYXNzKCkuZ2V0TmFtZSgpLCB0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgdGhyb3dIVFRQVHJhbnNwb3J0RXhjZXB0aW9uKFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCwgU3RyaW5nIGVuZHBvaW50U3RyaW5nLCBIVFRQVHJhbnNwb3J0RXhjZXB0aW9uIGh0dHBUcmFuc3BvcnRFeGNlcHRpb24pIHRocm93cyBIVFRQVHJhbnNwb3J0RXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoaHR0cFRyYW5zcG9ydEV4Y2VwdGlvbi5nZXRTdGF0dXNDb2RlKCkgPT0gSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19VTkFVVEhPUklaRUQpCi0gICAgewotICAgICAgRW5kcG9pbnQgZW5kcG9pbnQgPSBiaW5kaW5nRWxlbWVudC5nZXRFbmRwb2ludChlbmRwb2ludFN0cmluZyk7Ci0gICAgICBpZiAoZW5kcG9pbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZW5kcG9pbnQuc2V0UmVxdWlyZUhUVFBCYXNpY0F1dGgodHJ1ZSk7Ci0gICAgICAgIGVuZHBvaW50LnNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShudWxsKTsKLSAgICAgICAgZW5kcG9pbnQuc2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKG51bGwpOwotICAgICAgfQotICAgIH0KLSAgICB0aHJvdyBodHRwVHJhbnNwb3J0RXhjZXB0aW9uOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZ1tdIHJldHJpZXZlQXV0aFBhcmFtcyhXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQsIFN0cmluZyBlbmRwb2ludFN0cmluZykKLSAgewotCVN0cmluZ1tdIGF1dGhQYXJhbXMgPSBuZXcgU3RyaW5nW10geyBudWxsLCBudWxsIH07Ci0gICAgRW5kcG9pbnQgZW5kcG9pbnQgPSBiaW5kaW5nRWxlbWVudC5nZXRFbmRwb2ludChlbmRwb2ludFN0cmluZyk7Ci0gICAgaWYgKGVuZHBvaW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVuZHBvaW50LmlzUmVxdWlyZUhUVFBCYXNpY0F1dGgoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGVuZHBvaW50LmdldEh0dHBCYXNpY0F1dGhVc2VybmFtZSgpOwotICAgICAgICBTdHJpbmcgaHR0cEJhc2ljQXV0aFBhc3N3b3JkID0gZW5kcG9pbnQuZ2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKCk7Ci0gICAgICAgIGlmIChodHRwQmFzaWNBdXRoVXNlcm5hbWUgPT0gbnVsbCB8fCBodHRwQmFzaWNBdXRoUGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdTRExBY3Rpb25JbnB1dHMuSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FKTsKLSAgICAgICAgICBodHRwQmFzaWNBdXRoUGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkhUVFBfQkFTSUNfQVVUSF9QQVNTV09SRCk7Ci0gICAgICAgICAgZW5kcG9pbnQuc2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKGh0dHBCYXNpY0F1dGhVc2VybmFtZSk7Ci0gICAgICAgICAgZW5kcG9pbnQuc2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKGh0dHBCYXNpY0F1dGhQYXNzd29yZCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGh0dHBCYXNpY0F1dGhVc2VybmFtZSAhPSBudWxsICYmIGh0dHBCYXNpY0F1dGhQYXNzd29yZCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgYXV0aFBhcmFtc1swXSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLSAgICAgICAgICBhdXRoUGFyYW1zWzFdID0gaHR0cEJhc2ljQXV0aFBhc3N3b3JkOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhdXRoUGFyYW1zOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmJiNmQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc2Zvcm1lci5GcmFnbWVudFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotCi1wdWJsaWMgY2xhc3MgSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uIGV4dGVuZHMgSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24KLXsKLSAgcHVibGljIEludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdHNWYWxpZCA9IHRydWU7Ci0gICAgc3VwZXIucHJvY2Vzc1BhcnNlZFJlc3VsdHMocGFyc2VyKTsKLSAgICBTdHJpbmcgc291cmNlQ29udGVudCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlQpOwotICAgIGlmIChzb3VyY2VDb250ZW50ID09IG51bGwpCi0gICAgewotICAgICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgCi0gICAgICAvLyB2YWxpZGF0ZSBoZWFkZXJzCi0gICAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldFNPQVBIZWFkZXJzKCkuaXRlcmF0b3IoKTsgICAgICAKLQkgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKSBpdC5uZXh0KCk7ICAgICAgICAKLSAgICAgICAgSUZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRIZWFkZXJGcmFnbWVudChzb2FwSGVhZGVyKTsKLSAgICAgICAgaWYgKCFmcmFnLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgICAgewotICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHNvYXBIZWFkZXIuZ2V0RU1lc3NhZ2UoKTsKLSAgICAgICAgICBQYXJ0IHBhcnQgPSBzb2FwSGVhZGVyLmdldEVQYXJ0KCk7ICAgICAgICAJCi0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9WQUxJREFUSU5HX1BBUkFNRVRFUiIsIG1lc3NhZ2UuZ2V0UU5hbWUoKSArICIgIiArIHBhcnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgcmVzdWx0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gdmFsaWRhdGUgYm9keQotICAgICAgaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgICAgIElGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gICAgICAgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1ZBTElEQVRJTkdfUEFSQU1FVEVSIiwgcGFydC5nZXROYW1lKCkpKTsKLSAgICAgICAgICByZXN1bHRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGggKyAxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aCAtIDFdID0gbmV3IEZyYWdtZW50VHJhbnNmb3JtZXIoY29udHJvbGxlcl8pOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg2NzBhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZTsKLQotcHVibGljIGNsYXNzIEludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uIGV4dGVuZHMgSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIG5ld0ZpbGVTZWxlY3RlZF87Ci0gIHByaXZhdGUgYm9vbGVhbiBzYXZlQXNTZWxlY3RlZF87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0hlYWRlcl87Ci0gIAotICBwdWJsaWMgSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbmV3RmlsZVNlbGVjdGVkXyA9IGZhbHNlOwotICAgIHNhdmVBc1NlbGVjdGVkXyA9IGZhbHNlOwotICAgIGlzSGVhZGVyXyA9IGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBuZXdGaWxlU2VsZWN0ZWRfID0gZmFsc2U7Ci0gICAgc2F2ZUFzU2VsZWN0ZWRfID0gZmFsc2U7Ci0gICAgaXNIZWFkZXJfID0gZmFsc2U7Ci0gICAgLyogIHRyeSBhbmQgY2F0Y2ggaXMgbmVlZGVkIGlmIHdlIGFyZSBkb2luZyBmcmFnbWVudGl6YXRpb24uCi0gICAgdHJ5Ci0gICAgewotICAgICovCi0gICAgICBTdHJpbmcgc3VibWlzc2lvbkFjdGlvbiA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTik7Ci0gICAgICBTdHJpbmcgc291cmNlQ29udGVudHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX0hFQURFUik7Ci0gICAgICBpZiAoc291cmNlQ29udGVudHMgIT0gbnVsbCkKLSAgICAJb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIsc291cmNlQ29udGVudHMpOyAgCi0gICAgICBzb3VyY2VDb250ZW50cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlQpOwotICAgICAgaWYgKHNvdXJjZUNvbnRlbnRzICE9IG51bGwpCi0gICAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlQsc291cmNlQ29udGVudHMpOwotICAgICAgaWYgKFdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fQlJPV1NFX0ZJTEVfSEVBREVSLmVxdWFscyhzdWJtaXNzaW9uQWN0aW9uKSkKLSAgICAgIHsKLSAgICAJbmV3RmlsZVNlbGVjdGVkXyA9IHRydWU7Ci0gICAgICAgIFN0cmluZyBmaWxlQ29udGVudHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuU0VMRUNURURfRklMRV9IRUFERVIpOwotICAgICAgICBpZiAoZmlsZUNvbnRlbnRzICE9IG51bGwpCi0gICAgICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIsZmlsZUNvbnRlbnRzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fQlJPV1NFX0ZJTEUuZXF1YWxzKHN1Ym1pc3Npb25BY3Rpb24pKQotICAgICAgewotICAgICAgICBuZXdGaWxlU2VsZWN0ZWRfID0gdHJ1ZTsKLSAgICAgICAgU3RyaW5nIGZpbGVDb250ZW50cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5TRUxFQ1RFRF9GSUxFKTsKLSAgICAgICAgaWYgKGZpbGVDb250ZW50cyAhPSBudWxsKQotICAgICAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlQsZmlsZUNvbnRlbnRzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fU0FWRV9BU19IRUFERVIuZXF1YWxzKHN1Ym1pc3Npb25BY3Rpb24pKQotICAgICAgewotICAgIAlzYXZlQXNTZWxlY3RlZF8gPSB0cnVlOwotICAgIAlpc0hlYWRlcl8gPSB0cnVlOwotICAgIAlyZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fU0FWRV9BUy5lcXVhbHMoc3VibWlzc2lvbkFjdGlvbikpCi0gICAgICB7Ci0gICAgICAgIC8vIFNhdmUgQXMuLi4gYWN0aW9uCi0gICAgICAgIHNhdmVBc1NlbGVjdGVkXyA9IHRydWU7ICAgICAgCi0gICAgCXJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgCi0gICAgICBTdHJpbmdbXSBuc0RlY2xhcmF0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoRnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFKTsKLSAgICAgIGlmIChuc0RlY2xhcmF0aW9ucyAhPSBudWxsKQotICAgICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX05BTUVTUEFDRSxuc0RlY2xhcmF0aW9ucyk7ICAgIAkKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLyoKLSAgICB9ICAgICAgIAotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiU0FYRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIklPRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgICovCi0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLkludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uI2dldFNPQVBSZXF1ZXN0TWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQpCi0gICAqLwotICBwcm90ZWN0ZWQgSVNPQVBNZXNzYWdlIGdldFNPQVBSZXF1ZXN0TWVzc2FnZShXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCkgewkgIAotCSAgcmV0dXJuIChJU09BUE1lc3NhZ2UpIG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVFVRVNUX1RNUCk7Ci0gIH0gCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24jc2V0SGVhZGVyQ29udGVudChqYXZhLnV0aWwuSGFzaHRhYmxlLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0SGVhZGVyQ29udGVudChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpIHsJCi0gICAJU3RyaW5nIGhlYWRlckNvbnRlbnQgPSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX0hFQURFUik7Ci0gICAgb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCkubmV3RGVzZXJpYWxpemVyKCkKLSAgICAJLmRlc2VyaWFsaXplKElTT0FQTWVzc2FnZS5IRUFERVJfQ09OVEVOVCwgaGVhZGVyQ29udGVudCwgc29hcE1lc3NhZ2UpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5JbnZva2VXU0RMU09BUE9wZXJhdGlvbkFjdGlvbiNzZXRCb2R5Q29udGVudChqYXZhLnV0aWwuSGFzaHRhYmxlLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlKQotICAgKi8gCi0gIHByb3RlY3RlZCB2b2lkIHNldEJvZHlDb250ZW50KEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQsIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSkgewotICAgIFN0cmluZyBib2R5Q29udGVudCA9IG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlQpOyAgICAKLSAgICBvcGVyRWxlbWVudC5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKS5uZXdUcmFuc3BvcnQoKS5uZXdEZXNlcmlhbGl6ZXIoKQotICAgIAkuZGVzZXJpYWxpemUoSVNPQVBNZXNzYWdlLkJPRFlfQ09OVEVOVCwgYm9keUNvbnRlbnQsIHNvYXBNZXNzYWdlKTsgICAgICAgIAotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gd2FzTmV3RmlsZVNlbGVjdGVkKCkKLSAgewotICAgIHJldHVybiBuZXdGaWxlU2VsZWN0ZWRfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB3YXNTYXZlQXNTZWxlY3RlZCgpCi0gIHsKLSAgICByZXR1cm4gc2F2ZUFzU2VsZWN0ZWRfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldERlZmF1bHRTYXZlQXNGaWxlTmFtZSgpCi0gIHsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudCkoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIChuZXcgU3RyaW5nQnVmZmVyKG9wZXJFbGVtZW50LmdldE9wZXJhdGlvbigpLmdldE5hbWUoKSkpLmFwcGVuZCgiLnR4dCIpLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlU291cmNlQ29udGVudChPdXRwdXRTdHJlYW0gb3MpCi0gIHsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudCkoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIob3MpOwotICAgIGlmIChpc0hlYWRlcl8pCi0gICAgICBwdy5wcmludGxuKG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSKSk7Ci0gICAgZWxzZQotICAgCSAgcHcucHJpbnRsbihvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UKSk7Ci0gICAgcHcuY2xvc2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvT3BlbldTRExBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL09wZW5XU0RMQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NDIyZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvT3BlbldTRExBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuV1NETEFjdGlvbiBleHRlbmRzIFdTRExQcm9wZXJ0aWVzRm9ybUFjdGlvbiB7Ci0KLSAgcHVibGljIE9wZW5XU0RMQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIFN0cmluZyB3c2RsVXJsID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwsIHdzZGxVcmwpOwotICAgIGZvcm1Ub29sLnVwZGF0ZVByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZV8pOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgIFN0cmluZyB3c2RsVXJsID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgcm9vdE5vZGUgPSBub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHJvb3RFbGVtZW50ID0gcm9vdE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIC8vIGNyZWF0ZSBhIFdTRExFbGVtZW50IHJlcHJlc2VudGluZyB0aGUgV1NETAotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gbmV3IFdTRExFbGVtZW50KHdzZGxVcmwsIHJvb3RFbGVtZW50LmdldE1vZGVsKCksIHdzZGxVcmwpOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIG9wZW4gV1NETAotICAgICAgVmVjdG9yIGVycm9yTWVzc2FnZXMgPSB3c2RsRWxlbWVudC5sb2FkV1NETCgpOwotICAgICAgaWYgKGVycm9yTWVzc2FnZXMuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9YU0RfVkFMSURBVElPTiIpKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZXJyb3JNZXNzYWdlcy5zaXplKCk7aSsrKQotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKChTdHJpbmcpZXJyb3JNZXNzYWdlcy5lbGVtZW50QXQoaSkpOwotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfT1BFTl9XU0RMIix3c2RsVXJsKSk7ICAgICAgICAgIAotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJXU0RMRXhjZXB0aW9uIixlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcm9vdEVsZW1lbnQuY29ubmVjdCh3c2RsRWxlbWVudCxXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTREwsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0KLSAgICAvLyBidWlsZCB0aGUgZGF0YW1vZGVsIGZvciB0aGlzIFdTRExFbGVtZW50Ci0gICAgd3NkbEVsZW1lbnQuYnVpbGRNb2RlbCgpOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgc2VydmljZSBub2RlLCBzZWxlY3QgdGhlIFdTREwgbm9kZS4gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgYmluZGluZyBub2RlLCBzZWxlY3QgdGhlIHNlcnZpY2Ugbm9kZS4KLSAgICAvLyBJZiB0aGVyZSBpcyBqdXN0IHRoZSBvbmUgc2VydmljZSBhbmQgYmluZGluZyBub2RlLCBzZWxlY3QgdGhlIGJpbmRpbmcgbm9kZS4KLSAgICAvLyBzZWxlY3QgdGhlIG5ldyBXU0RMIG5vZGUKLSAgICBOb2RlIHdzZGxOb2RlID0gcm9vdE5vZGUuZ2V0Q2hpbGROb2RlKHdzZGxFbGVtZW50KTsKLSAgICBWZWN0b3Igc2VydmljZU5vZGVzID0gd3NkbE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgIGludCBuZXdTZWxlY3RlZE5vZGVJZCA9IHdzZGxOb2RlLmdldE5vZGVJZCgpOwotICAgIGlmIChzZXJ2aWNlTm9kZXMuc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgTm9kZSBzZXJ2aWNlTm9kZSA9IChOb2RlKXNlcnZpY2VOb2Rlcy5lbGVtZW50QXQoMCk7Ci0gICAgICBWZWN0b3IgYmluZGluZ05vZGVzID0gc2VydmljZU5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgaWYgKGJpbmRpbmdOb2Rlcy5zaXplKCkgPT0gMSkKLSAgICAgIHsKLSAgICAgICAgTm9kZSBiaW5kaW5nTm9kZSA9IChOb2RlKWJpbmRpbmdOb2Rlcy5lbGVtZW50QXQoMCk7Ci0gICAgICAgIG5ld1NlbGVjdGVkTm9kZUlkID0gYmluZGluZ05vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIG5ld1NlbGVjdGVkTm9kZUlkID0gc2VydmljZU5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgfQotICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKG5ld1NlbGVjdGVkTm9kZUlkKTsKLSAgICBub2RlTWFuYWdlci5tYWtlTm9kZVZpc2libGUobm9kZU1hbmFnZXIuZ2V0Tm9kZShuZXdTZWxlY3RlZE5vZGVJZCkpOwotICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCxTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhuZXdTZWxlY3RlZE5vZGVJZCwgMCwgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxULCB0cnVlKSk7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX09QRU5fV1NETF9TVUNDRVNTRlVMIiwgd3NkbFVybCkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9PcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvT3BlblhTREluZm9EaWFsb2dBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJkZDg0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9PcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgT3BlblhTREluZm9EaWFsb2dBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uKCkKLSAgewotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLGludCBub2RlSWQsU3RyaW5nIGZyYWdJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9mcmFnbWVudC9YU0RJbmZvRGlhbG9nLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKS5hcHBlbmQoJz0nKS5hcHBlbmQoZnJhZ0lkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1JlZnJlc2hXU0RMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODI4ZDhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1JlZnJlc2hXU0RMQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxpbmtBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExNYWluTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoV1NETEFjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24gewotCi0gIHB1YmxpYyBSZWZyZXNoV1NETEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9XU0RMUmVmcmVzaEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkgewotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBTdHJpbmcgbm9kZUlEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgaW50IG5vZGVJRDsKLSAgICB0cnkgewotICAgICAgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludChub2RlSURTdHJpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotICAgICAgbm9kZUlEID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlSWQoKTsKLSAgICB9Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIHdoaWxlIChub2RlICE9IG51bGwgJiYgIShub2RlIGluc3RhbmNlb2YgV1NETE1haW5Ob2RlKSkgewotICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBXU0RMTm9kZSkgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2Yobm9kZS5nZXROb2RlSWQoKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIG5vZGUgPSBub2RlLmdldFBhcmVudCgpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSB3c2RsTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCl3c2RsTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbkNvcHkgPSB3c2RsRWxlbWVudC5nZXREZWZpbml0aW9uKCk7Ci0gICAgVmVjdG9yIHNjaGVtYUxpc3RDb3B5ID0gd3NkbEVsZW1lbnQuZ2V0U2NoZW1hTGlzdCgpOwotICAgIHdzZGxFbGVtZW50LnNldERlZmluaXRpb24obnVsbCk7Ci0gICAgd3NkbEVsZW1lbnQuc2V0U2NoZW1hTGlzdChuZXcgVmVjdG9yKCkpOwotICAgIGludCBzZWxlY3RlZE5vZGVJRCA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpLmdldE5vZGVJZCgpOwotCi0gICAgdHJ5IHsKLSAgICAgIC8vIG9wZW4gV1NETAotICAgICAgVmVjdG9yIGVycm9yTWVzc2FnZXMgPSB3c2RsRWxlbWVudC5sb2FkV1NETCgpOwotICAgICAgaWYgKGVycm9yTWVzc2FnZXMuc2l6ZSgpID4gMCkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1hTRF9WQUxJREFUSU9OIikpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxlcnJvck1lc3NhZ2VzLnNpemUoKTtpKyspCi0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoKFN0cmluZyllcnJvck1lc3NhZ2VzLmVsZW1lbnRBdChpKSk7Ci0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9PUEVOX1dTREwiLHdzZGxFbGVtZW50LmdldFdzZGxVcmwoKSkpOyAgICAgICAgICAKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiV1NETEV4Y2VwdGlvbiIsZSk7Ci0gICAgICB3c2RsRWxlbWVudC5zZXREZWZpbml0aW9uKGRlZmluaXRpb25Db3B5KTsKLSAgICAgIHdzZGxFbGVtZW50LnNldFNjaGVtYUxpc3Qoc2NoZW1hTGlzdENvcHkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIGJ1aWxkIHRoZSBkYXRhbW9kZWwgZm9yIHRoaXMgV1NETEVsZW1lbnQKLSAgICB3c2RsRWxlbWVudC5idWlsZE1vZGVsKCk7Ci0KLSAgICAvLyBTZWxlY3QgYSBuZXcgbm9kZSBpZiB0aGUgcHJldmlvdXMgc2VsZWN0ZWQgbm9kZSBubyBsb25nZXIgZXhpc3RzCi0gICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgc2VydmljZSBub2RlLCBzZWxlY3QgdGhlIFdTREwgbm9kZS4gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgYmluZGluZyBub2RlLCBzZWxlY3QgdGhlIHNlcnZpY2Ugbm9kZS4KLSAgICAvLyBJZiB0aGVyZSBpcyBqdXN0IHRoZSBvbmUgc2VydmljZSBhbmQgYmluZGluZyBub2RlLCBzZWxlY3QgdGhlIGJpbmRpbmcgbm9kZS4KLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKHNlbGVjdGVkTm9kZUlEKTsKLSAgICBpZiAobm9kZSA9PSBudWxsKSB7Ci0gICAgICBzZWxlY3RlZE5vZGVJRCA9IHdzZGxOb2RlLmdldE5vZGVJZCgpOwotICAgICAgVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGlmIChzZXJ2aWNlTm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICB7Ci0gICAgICAgIE5vZGUgc2VydmljZU5vZGUgPSAoTm9kZSlzZXJ2aWNlTm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgICBWZWN0b3IgYmluZGluZ05vZGVzID0gc2VydmljZU5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICBpZiAoYmluZGluZ05vZGVzLnNpemUoKSA9PSAxKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBiaW5kaW5nTm9kZSA9IChOb2RlKWJpbmRpbmdOb2Rlcy5lbGVtZW50QXQoMCk7Ci0gICAgICAgICAgc2VsZWN0ZWROb2RlSUQgPSBiaW5kaW5nTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgc2VsZWN0ZWROb2RlSUQgPSBzZXJ2aWNlTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgIH0KLSAgICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKHNlbGVjdGVkTm9kZUlEKTsKLSAgICAgIG5vZGVNYW5hZ2VyLm1ha2VOb2RlVmlzaWJsZShub2RlTWFuYWdlci5nZXROb2RlKHNlbGVjdGVkTm9kZUlEKSk7Ci0gICAgfQotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19SRUZSRVNIX1dTRExfU1VDQ0VTU0ZVTCIsIHdzZGxFbGVtZW50LmdldFdzZGxVcmwoKSkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Y2ExNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5SZXNpemVGcmFtZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFJlc2l6ZVdTRExGcmFtZXNBY3Rpb24gZXh0ZW5kcyBSZXNpemVGcmFtZXNBY3Rpb24KLXsKLSAgcHVibGljIFJlc2l6ZVdTRExGcmFtZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCxwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUixhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGZyYW1lc2V0IHNpemVzLgotICAgIFN0cmluZyBmcmFtZU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuRlJBTUVfTkFNRSk7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIAotICAgIC8vIFNldCB0aGUgbmV3IGZyYW1lc2V0IHNpemVzLgotICAgIGlmIChmcmFtZU5hbWUuZXF1YWxzKFdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMod3NkbFBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjEwMCUsMCUiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhXU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICBpZiAoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh3c2RsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Mod3NkbFBlcnNwZWN0aXZlLmdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjEwMCUsMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZU5hbWUuZXF1YWxzKFdTRExGcmFtZU5hbWVzLldTRExfU1RBVFVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHdzZGxQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyh3c2RsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heGltaXplLgotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygiMCUsMTAwJSIpOwotICAgICAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NWYxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNlbGVjdE5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlQWN0aW9uCi17Ci0KLSAgICBwdWJsaWMgU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgYm9vbGVhbiBmb3JIaXN0b3J5KQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlEKTsKLSAgICAgICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gICAgewotICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGVfLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgaW50IG5vZGVJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgICAKLSAgICAgIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgICByZXR1cm4gc2VsZWN0ZWRUb29sLmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKHRydWUpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhub2RlSWQsdHJ1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsTmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkgewotICAgICAgICByZXR1cm4gIndzZGxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTU2MDg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVUb29sQWN0aW9uCi17Ci0KLSAgICBwdWJsaWMgU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCwgYm9vbGVhbiBrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL1NlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICAgICAgaWYgKHZpZXdJRCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoa2VlcEhpc3RvcnkpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCI9MSIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gICAgewotICAgICAgICBpbnQgbm9kZUlkID0gc2VsZWN0ZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICAgICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbF8uZ2V0VG9vbElkKCk7Ci0gICAgICAgIGludCB2aWV3SWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgICAgICBpbnQgdmlld1Rvb2xJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgICAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbE5hdmlnYXRvckNvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzZGxQcm9wZXJ0aWVzQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNWJjM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uIGV4dGVuZHMgU2hvd1BlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgIT0gbnVsbCAmJiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSLGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIAotICAgIC8vIFNhdmUgdGhlIGZyYW1lc2V0IHNpemVzIGlmZiBubyBmcmFtZSBpcyBtYXhpbWl6ZWQuCi0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAKLSAgICBpZiAoIWFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpICYmICFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIAotICAgIHJldHVybiBzdXBlci5ydW4oKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUFjdGlvbkxpbmsoaW50IHRhcmdldFBlcnNwZWN0aXZlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGZvcm1MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb25KU1AuanNwPyIpOwotICAgIGZvcm1MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpLmFwcGVuZCgnPScpLmFwcGVuZCh0YXJnZXRQZXJzcGVjdGl2ZUlkKTsKLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGZvcm1MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7ICAgIAotICAgIHJldHVybiBmb3JtTGluay50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDMzZTkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudXRpbC5TT0FQTWVzc2FnZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIFN5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5wcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgCi0gICAgSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgU3RyaW5nIHZpZXdJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19JRCk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfSUQsIHZpZXdJRCk7Ci0gICAgaWYgKHZpZXdJRC5lcXVhbHMoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UpKQotICAgIHsKLSAgICAgIGludm9rZVdTRExPcGVyYXRpb25Ub29sLnNldEZyYWdtZW50Vmlld0lEKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFKTsKLSAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFLCBudWxsKTsKLSAgICAgIAotICAgICAgcmV0dXJuIHByb2Nlc3NGb3JtVmlld1BhcnNlZFJlc3VsdHNIZWFkZXIocGFyc2VyLCBvcGVyRWxlbWVudCkgJgkJLy8gbmVlZCB0byBwcm9jZXNzIGJvdGggaGVhZGVyIGFuZCBib2R5IAotICAgICAgICAgICAgIHByb2Nlc3NGb3JtVmlld1BhcnNlZFJlc3VsdHMocGFyc2VyLCBvcGVyRWxlbWVudCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRGcmFnbWVudFZpZXdJRChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9TT1VSQ0VfVE9fRk9STSk7Ci0gICAgICBTdHJpbmdbXSBuc0RlY2xhcmF0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoRnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFKTsgICAgCi0gICAgICBpZiAobnNEZWNsYXJhdGlvbnMgIT0gbnVsbCkKLSAgICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9OQU1FU1BBQ0UsbnNEZWNsYXJhdGlvbnMpOwotICAgICAgCi0gICAgICBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UgPSAoSVNPQVBNZXNzYWdlKSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVRVUVTVF9UTVApOwotICAgICAgYm9vbGVhbiByYyA9IHByb2Nlc3NTb3VyY2VWaWV3UGFyc2VkUmVzdWx0c0hlYWRlcihwYXJzZXIsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSkgJgkvLyBuZWVkIHRvIHByb2Nlc3MgYm90aCBoZWFkZXIgYW5kIGJvZHkKLQkJIAkJICAgcHJvY2Vzc1NvdXJjZVZpZXdQYXJzZWRSZXN1bHRzKHBhcnNlciwgb3BlckVsZW1lbnQsIHNvYXBNZXNzYWdlKTsgCi0gICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVRVUVTVF9UTVAsIG51bGwpOwotICAgICAgCi0gICAgICByZXR1cm4gcmM7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NGb3JtVmlld1BhcnNlZFJlc3VsdHNIZWFkZXIoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLCBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsgCi0Jb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIsIG51bGwpOwkKLQlib29sZWFuIHJlc3VsdHNWYWxpZCA9IHRydWU7Ci0JICAgIAotCUl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0U09BUEhlYWRlcnMoKS5pdGVyYXRvcigpOwotCXdoaWxlIChpdC5oYXNOZXh0KCkpCi0JewotCSAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gKFNPQVBIZWFkZXIpIGl0Lm5leHQoKTsgICAgICAgIAotCSAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRIZWFkZXJGcmFnbWVudChzb2FwSGVhZGVyKTsKLQkgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotCX0KLQlpZiAocmVzdWx0c1ZhbGlkKQotCSAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIsbnVsbCk7Ci0gICAgcmV0dXJuIHJlc3VsdHNWYWxpZDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NGb3JtVmlld1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLCBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5ULCBudWxsKTsKLSAgICBib29sZWFuIHJlc3VsdHNWYWxpZCA9IHRydWU7Ci0JCi0gICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsgICAgCi0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydClpdC5uZXh0KCk7Ci0gICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgaWYgKCFmcmFnLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgICAgcmVzdWx0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChyZXN1bHRzVmFsaWQpCi0gICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5ULG51bGwpOwotICAgIHJldHVybiByZXN1bHRzVmFsaWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU291cmNlVmlld1BhcnNlZFJlc3VsdHNIZWFkZXIoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLCBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCwgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlKSAKLSAgCXRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0JICAKLSAgICBTdHJpbmcgc291cmNlQ29udGVudCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlRfSEVBREVSKTsKLSAgICBpZiAoc291cmNlQ29udGVudCAhPSBudWxsKQotICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIsIHNvdXJjZUNvbnRlbnQpOyAgICAKLSAgICAgICAgICAgCi0gICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRTT0FQSGVhZGVycygpLml0ZXJhdG9yKCk7Ci0gICAgaWYgKCFpdC5oYXNOZXh0KCkpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBvcGVyRWxlbWVudC5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKS5uZXdUcmFuc3BvcnQoKS5uZXdEZXNlcmlhbGl6ZXIoKQotICAgICAgCS5kZXNlcmlhbGl6ZShJU09BUE1lc3NhZ2UuSEVBREVSX0NPTlRFTlQsIHNvdXJjZUNvbnRlbnQsIHNvYXBNZXNzYWdlKTsgIAotICAgIAkKLSAgICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IHNvYXBNZXNzYWdlLmdldEhlYWRlckNvbnRlbnQoKTsKLSAgICAgIE1hcCBuYW1lc3BhY2VUYWJsZSA9IHNvYXBNZXNzYWdlLmdldE5hbWVzcGFjZVRhYmxlKCk7Ci0gICAgICAKLSAgICAgIGJvb2xlYW4gc291cmNlRWxlbWVudHNWYWxpZCA9IHRydWU7Ci0gICAgICBpbnQgc3RhcnQgPSAwOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSAmJiBzdGFydCA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aCkKLSAgICAgIHsKLSAgICAgICAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gKFNPQVBIZWFkZXIpaXQubmV4dCgpOwotICAgICAgICBTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50IGZyYWcgPSAoU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCkgb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlcik7Ci0gICAgICAgIAotICAgICAgICBpbnQgcG9zID0gU09BUE1lc3NhZ2VVdGlscy5maW5kRmlyc3RNYXRjaGluZ0VsZW1lbnQoCi0gICAgICAgIAkJc29hcEhlYWRlci5nZXRFUGFydCgpLAotCQkJCWluc3RhbmNlRG9jdW1lbnRzLAotCQkJCW5hbWVzcGFjZVRhYmxlLAotCQkJCWZyYWcuZ2V0TmFtZSgpLAotCQkJCXN0YXJ0KTsKLQkJCQotCQlpZiAocG9zID09IC0xKQotCQkJY29udGludWU7Ci0JCQkKLQkJRWxlbWVudCBlbGVtZW50ID0gaW5zdGFuY2VEb2N1bWVudHNbcG9zXTsKLQkJc3RhcnQgPSBwb3MgKyAxOwkJCQotICAgICAgICAKLSAgICAgICAgaWYgKCFmcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50KGVsZW1lbnQsIG5hbWVzcGFjZVRhYmxlKSkKLSAgICAgICAgICBzb3VyY2VFbGVtZW50c1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc291cmNlRWxlbWVudHNWYWxpZDsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9ICAgIAotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NvdXJjZVZpZXdQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQsIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSkKLSAgCXRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0JICAKLSAgICBTdHJpbmcgc291cmNlQ29udGVudCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlQpOwotICAgIGlmIChzb3VyY2VDb250ZW50ICE9IG51bGwpCi0gICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5ULCBzb3VyY2VDb250ZW50KTsKLSAgICAKLSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOyAgICAKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBvcGVyRWxlbWVudC5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKS5uZXdUcmFuc3BvcnQoKS5uZXdEZXNlcmlhbGl6ZXIoKQotICAgICAgCS5kZXNlcmlhbGl6ZShJU09BUE1lc3NhZ2UuQk9EWV9DT05URU5ULCBzb3VyY2VDb250ZW50LCBzb2FwTWVzc2FnZSk7ICAgICAgCQotICAgIAkKLSAgICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IHNvYXBNZXNzYWdlLmdldEJvZHlDb250ZW50KCk7Ci0gICAgICAKLSAgICAgIGJvb2xlYW4gc291cmNlRWxlbWVudHNWYWxpZCA9IHRydWU7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydClpdC5uZXh0KCk7Ci0gICAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gICAgICAgIGlmICghZnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoaW5zdGFuY2VEb2N1bWVudHMpKQotICAgICAgICAgIHNvdXJjZUVsZW1lbnRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzb3VyY2VFbGVtZW50c1ZhbGlkOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1RvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDhjZDkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1RvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuVG9nZ2xlTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBUb2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbiBleHRlbmRzIFRvZ2dsZU5vZGVBY3Rpb24KLXsKLSAgcHVibGljIFRvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uJm9wZW49Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxib29sZWFuIG9wZW4pCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLk9QRU4pLmFwcGVuZCgnPScpLmFwcGVuZChvcGVuP0FjdGlvbklucHV0cy5PUEVOX05PREU6QWN0aW9uSW5wdXRzLkNMT1NFX05PREUpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgb25seSB0byBzZWxlY3QgdGhlIHRvZ2dsZWQgbm9kZSB3aGVuLCBhdCB0aGUgdGltZSBvZgotICAvLyB0aGUgY29sbGFwc2UgZXZlbnQsIGEgZGVzY2VuZGFudCBub2RlIHdhcyBzZWxlY3RlZC4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHRvZ2dsZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgaW50IG5vZGVJZCA9IHRvZ2dsZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICBpbnQgdG9vbElkID0gc2VsZWN0ZWRUb29sLmdldFRvb2xJZCgpOwotICAgIGludCB2aWV3SWQgPSB0b2dnbGVkTm9kZV8uZ2V0Vmlld0lkKCk7Ci0gICAgaW50IHZpZXdUb29sSWQgPSB0b2dnbGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgIGlmIChzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsdHJ1ZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRydWUpOwotICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzZGxOYXZpZ2F0b3JDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gICAgewotICAgICAgcmV0dXJuICJ3c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiAid3NkbFByb3BlcnRpZXNDb250YWluZXIiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiAid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gICAgewotICAgICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1VwZGF0ZVdTRExCaW5kaW5nQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWU2NjU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1VwZGF0ZVdTRExCaW5kaW5nQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMQmluZGluZ0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETEJpbmRpbmdOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uIGV4dGVuZHMgV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBVcGRhdGVXU0RMQmluZGluZ0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBub2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBpZiAobm9kZUlkcyA9PSBudWxsKQotICAgICAgbm9kZUlkcyA9IG5ldyBTdHJpbmdbMF07Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG5vZGVJZHMpOwotICAgIFN0cmluZ1tdIGVuZHBvaW50cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoV1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQpOwotICAgIGlmIChlbmRwb2ludHMgPT0gbnVsbCkKLSAgICAgIGVuZHBvaW50cyA9IG5ldyBTdHJpbmdbMF07Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5ULCBlbmRwb2ludHMpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZ1tdIG5vZGVJZHMgPSBnZXRQcm9wZXJ0eUFzU3RyaW5nQXJyYXkoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgU3RyaW5nW10gZW5kcG9pbnRzID0gZ2V0UHJvcGVydHlBc1N0cmluZ0FycmF5KFdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIE5vZGUgYmluZGluZ05vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlkc1tpXSkpOwotICAgICAgICBpZiAoYmluZGluZ05vZGUgaW5zdGFuY2VvZiBXU0RMQmluZGluZ05vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KWJpbmRpbmdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgU3RyaW5nW10gZW5kcG9pbnRzQ29weSA9IGVuZHBvaW50czsKLSAgICAgICAgICBiaW5kaW5nRWxlbWVudC5zZXRFbmRQb2ludHMoZW5kcG9pbnRzQ29weSk7Ci0gICAgICAgICAgaWYgKGVuZHBvaW50c0NvcHkubGVuZ3RoIDw9IDApCi0gICAgICAgICAgICBlbmRwb2ludHNDb3B5ID0gYmluZGluZ0VsZW1lbnQuZ2V0RW5kUG9pbnRzKCk7Ci0gICAgICAgICAgaWYgKGVuZHBvaW50c0NvcHkubGVuZ3RoID4gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBWZWN0b3Igb3BlcmF0aW9uTm9kZXMgPSBiaW5kaW5nTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gb3BlcmF0aW9uTm9kZXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTm9kZSBvcGVyYXRpb25Ob2RlID0gKE5vZGUpaXQubmV4dCgpOwotICAgICAgICAgICAgICBMaXN0IHRvb2xzID0gb3BlcmF0aW9uTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRUb29scygpOwotICAgICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIHRvb2xzSXRlcmF0b3IgPSB0b29scy5pdGVyYXRvcigpOyB0b29sc0l0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUb29sIHRvb2wgPSAoVG9vbCl0b29sc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAodG9vbCBpbnN0YW5jZW9mIEludm9rZVdTRExPcGVyYXRpb25Ub29sKQotICAgICAgICAgICAgICAgICAgKChJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCl0b29sKS5zZXRFbmRQb2ludChlbmRwb2ludHNDb3B5WzBdKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1VQREFURV9XU0RMX0JJTkRJTkdfU1VDQ0VTU0ZVTCIpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyY2JhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxpbmtBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uIHsKLSAgcHVibGljIFdTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkgewotICAgIFN0cmluZyBub2RlSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICB0cnkgewotICAgICAgSW50ZWdlci5wYXJzZUludChub2RlSUQpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG5vZGVJRCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlEKSB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL2FjdGlvbnMvV1NETENoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoKSB7Ci0gICAgU3RyaW5nIHdzZGxVcmwgPSBnZXRXc2RsVXJsKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTRExfVVJMLCB3c2RsVXJsKTsKLSAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZhdkZvbGRlckVsZW1lbnQgPSBnZXRGYXZXU0RMRm9sZGVyRWxlbWVudCgpOwotICAgIHJldHVybiBmYXZGb2xkZXJFbGVtZW50LmZhdm9yaXRlRXhpc3RzKHRhYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgU3RyaW5nIHdzZGxVcmwgPSBnZXRXc2RsVXJsKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTRExfVVJMLCB3c2RsVXJsKTsKLSAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZhdkZvbGRlckVsZW1lbnQgPSBnZXRGYXZXU0RMRm9sZGVyRWxlbWVudCgpOwotICAgIGlmIChmYXZGb2xkZXJFbGVtZW50LmFkZEZhdm9yaXRlKHRhYmxlKSkgewotICAgICAgd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19GQVZPUklURVNfU1VDQ0VTU0ZVTCIsIHdzZGxVcmwpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX0ZBVk9SSVRFUyIsIHdzZGxVcmwpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRXc2RsVXJsKCkgewotICAgIFN0cmluZyBub2RlSUQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgd3NkbE5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgV1NETEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdTRExFbGVtZW50KXdzZGxOb2RlTWFuYWdlci5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlEKSkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50LmdldFdzZGxVcmwoKTsKLSAgfQotCi0gIHByaXZhdGUgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBnZXRGYXZXU0RMRm9sZGVyRWxlbWVudCgpIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgZmF2Tm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFRyZWVFbGVtZW50IGZhdlJvb3RFbGVtZW50ID0gZmF2Tm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBmYXZSb290RWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgICByZXR1cm4gKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY3Y2UzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuV1NETEZpbGVOYW1lSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gZXh0ZW5kcyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbl87Ci0gIHByaXZhdGUgU3RyaW5nIGRlZmF1bHRXU0RMRmlsZU5hbWVfOwotCi0gIHB1YmxpYyBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBkZWZpbml0aW9uXyA9IG51bGw7Ci0gICAgZGVmYXVsdFdTRExGaWxlTmFtZV8gPSAidGVtcC53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxpbnQgdG9vbElkLGludCB2aWV3SWQsaW50IHZpZXdUb29sSWQpIHsKLSAgICByZXR1cm4gSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCwid3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCIpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gd3JpdGUoT3V0cHV0U3RyZWFtIG9zKSB7Ci0gICAgcmV0dXJuIHdyaXRlV1NETERlZmluaXRpb24ob3MsIGRlZmluaXRpb25fKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGVmYXVsdEZpbGVOYW1lKCkgewotICAgIHJldHVybiBkZWZhdWx0V1NETEZpbGVOYW1lXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpIHsKLSAgICBpbnQgbm9kZUlEOwotICAgIHRyeSB7Ci0gICAgICBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIGRlZmluaXRpb25fID0gd3NkbEVsZW1lbnQuZ2V0RGVmaW5pdGlvbigpOwotICAgIGRlZmF1bHRXU0RMRmlsZU5hbWVfID0gV1NETEZpbGVOYW1lSGVscGVyLmdldFdTRExGaWxlTmFtZSh3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCkpOwotICAgIHJldHVybiAoZGVmaW5pdGlvbl8gIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKSB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1MmM0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gewotICBwdWJsaWMgV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkgewotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gKEZvcm1Ub29sKXdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICB9Ci0KLSAgcHVibGljIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBuZXdJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oKSB7Ci0gICAgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgdGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkpOwotICAgIHJldHVybiBhY3Rpb247Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKSB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTk1ZWVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gewotCi0gIHB1YmxpYyBXU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkgewotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gKEZvcm1Ub29sKXdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFdTRExFbGVtZW50IGVsZW1lbnQgPSAoV1NETEVsZW1lbnQpbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIHJldHVybiBsYXVuY2hXaXphcmQoZWxlbWVudC5nZXRXc2RsVXJsKCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExQcm9wZXJ0aWVzRm9ybUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDgwODFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExQcm9wZXJ0aWVzRm9ybUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24gZXh0ZW5kcyBGb3JtQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyXzsKLSAgcHVibGljIFdTRExQcm9wZXJ0aWVzRm9ybUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBuYXZpZ2F0b3JNYW5hZ2VyXyA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBrZXlzID0gcGFyc2VyLmdldFBhcmFtZXRlck5hbWVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIHZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoa2V5c1tpXSk7Ci0gICAgICBpZiAodmFsdWVzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09IDEpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KGtleXNbaV0sIHZhbHVlc1swXSk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPiAxKQotICAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChrZXlzW2ldLCB2YWx1ZXMpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBOb2RlIGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gbmF2aWdhdG9yTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpCi0gIHsKLSAgICByZXR1cm4gKEZvcm1Ub29sKShnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvQmluZGluZ1R5cGVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL0JpbmRpbmdUeXBlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWRkYTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvQmluZGluZ1R5cGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nVHlwZXMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5TVVBQT1JURUQgPSAtMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09BUCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhUVFBfR0VUID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSFRUUF9QT1NUID0gMjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfVkVSQl9HRVQgPSAiR0VUIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9WRVJCX1BPU1QgPSAiUE9TVCI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL0ZyYWdtZW50Q29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL0ZyYWdtZW50Q29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMmMyMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9GcmFnbWVudENvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEZyYWdtZW50Q29uc3RhbnRzCi17Ci0gIC8vIFhTRCBtaW5PY2N1cnMgYW5kIG1heE9jY3VycwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX01JTl9PQ0NVUlMgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX01BWF9PQ0NVUlMgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTkJPVU5ERUQgPSAtMTsKLQotICAvLyBXU0RMIHN0eWxlCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0RPQ1VNRU5UID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfUlBDID0gMTsKLQotICAvLyBXU0RMIEVuY29kaW5nIHN0eWxlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkNPRElOR19MSVRFUkFMID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5DT0RJTkdfU09BUCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVOQ09ESU5HX1VSTCA9IDI7IC8vIEhUVFAgR2V0L1Bvc3QKLQotICAvLyBJRHMgdXNlZCBieSB0aGUgZnJhZ21lbnQgbW9kZWwKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU0VQRVJBVE9SID0gIjo6IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5QVVRfSUQgPSAiOjppbnB1dCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9VVFBVVF9JRCA9ICI6Om91dHB1dCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBQkxFX0lEID0gIjo6dGFibGVJRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX0lEID0gIjo6ZnJhZ21lbnRJRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfQU5DSE9SX0lEID0gIjo6bmFtZUFuY2hvcklEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBR01FTlRfVklFV19JRCA9ICI6OmZyYWdtZW50Vmlld0lEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNEX0FUT01JQ19FTlVNX0lEID0gIjo6eHNkQXRvbWljRW51bUlEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNEX0FMTF9HUk9VUF9JRCA9ICI6OnhzZEFsbEdyb3VwSUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX1RPS0VOID0gIl4iOwotCi0gIC8vIEZyYWdtZW50IHZpZXcgSURzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFID0gIjo6ZnJhZ21lbnRWaWV3U3dpdGNoRm9ybVRvU291cmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk0gPSAiOjpmcmFnbWVudFZpZXdTd2l0Y2hTb3VyY2VUb0Zvcm0iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT1VSQ0VfQ09OVEVOVF9IRUFERVIgPSAiOjpzb3VyY2VDb250ZW50SGVhZGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09VUkNFX0NPTlRFTlQgPSAiOjpzb3VyY2VDb250ZW50IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFID0gIjo6c291cmNlQ29udGVudE5TIjsKLQotICAvLyBBY3Rpb24gaW5wdXQgY29uc3RhbnRzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfQU5DSE9SID0gIm5hbWVBbmNob3IiOwotCi0gIC8vIE5hbWVzcGFjZXMgY29udGFudHMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1hTRCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9TT0FQID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1NPQVBfRU5WID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1dTREwgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfWFNJID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTkNfQVJSQVlfVFlQRSA9ICJhcnJheVR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYU0lfVFlQRSA9ICJ0eXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUU5BTUVfUFJFRklYID0gInEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRTkFNRV9MT0NBTF9OQU1FX0FSUkFZX1RZUEUgPSAiYXJyYXlUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUU5BTUVfTE9DQUxfTkFNRV9BUlJBWSA9ICJBcnJheSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTE9OID0gIjoiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRTkFNRV9MT0NBTF9OQU1FX0hFQURFUiA9ICJIZWFkZXIiOyAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFOQU1FX0xPQ0FMX05BTUVfQk9EWSA9ICJCb2R5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUU5BTUVfTE9DQUxfTkFNRV9GQVVMVCA9ICJGYXVsdCI7Ci0KLSAgLy8gTGlzdAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSVNUX1NFUEVSQVRPUiA9ICIgIjsKLQotICAvLyBTT0FQLUVOQzpBcnJheQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMRUZUX1NRVUFSRV9CUkFDS0VUID0gIlsiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSSUdIVF9TUVVBUkVfQlJBQ0tFVCA9ICJdIjsKLQotICAvLyBYU0REZWZhdWx0RnJhZ21lbnQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVF9FTEVNRU5UX1NUQVJUX1RBRyA9ICI8cm9vdD4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBST09UX0VMRU1FTlRfRU5EX1RBRyA9ICI8L3Jvb3Q+IjsKLQotICAvLyBOYW1lc3BhY2UgVVJJcy4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hNTE5TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1NPQVBfRU5WID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1NPQVBfRU5DID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJXzE5OTlfU0NIRU1BX1hTSSA9ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV8xOTk5X1NDSEVNQV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YTUxTY2hlbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfMjAwMF9TQ0hFTUFfWFNJID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMTAvWE1MU2NoZW1hLWluc3RhbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJXzIwMDBfU0NIRU1BX1hTRCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV8yMDAxX1NDSEVNQV9YU0kgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfMjAwMV9TQ0hFTUFfWFNEID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX0NVUlJFTlRfU0NIRU1BX1hTSSA9IE5TX1VSSV8yMDAxX1NDSEVNQV9YU0k7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9DVVJSRU5UX1NDSEVNQV9YU0QgPSBOU19VUklfMjAwMV9TQ0hFTUFfWFNEOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfWE1MX1NPQVAgPSAiaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hNTF9TT0FQX0RFUExPWU1FTlQgPSAiaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwL2RlcGxveW1lbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfTElURVJBTF9YTUwgPSAiaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwL2xpdGVyYWx4bWwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfWE1JX0VOQyA9ICJodHRwOi8vd3d3LmlibS5jb20vbmFtZXNwYWNlcy94bWkiOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETEFjdGlvbklucHV0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9XU0RMQWN0aW9uSW5wdXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNTRiOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9XU0RMQWN0aW9uSW5wdXRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETEFjdGlvbklucHV0cwotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQgPSAiZnJhbWVzZXRDb2xzUGVyc3BlY3RpdmVDb250ZW50IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiA9ICJmcmFtZXNldFJvd3NBY3Rpb25zQ29udGFpbmVyIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVNTSU9OX0lEID0gInNlc3Npb25JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX0lEID0gImZyYWdtZW50SUQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRU5WRUxPUEVfVFlQRSA9ICJzb2FwRW52ZWxvcGVUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09BUF9FTlZFTE9QRV9UWVBFX1JFUVVFU1QgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT0FQX0VOVkVMT1BFX1RZUEVfUkVTUE9OU0UgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX1JFU1BPTlNFX0NBQ0hFRCA9ICJzb2FwUmVzcG9uc2VDYWNoZWQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1JU1NJT05fQUNUSU9OID0gInN1Ym1pc3Npb25BY3Rpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJNSVNTSU9OX0FDVElPTl9GT1JNID0gInN1Ym1pc3Npb25BY3Rpb25Gb3JtIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUlTU0lPTl9BQ1RJT05fQlJPV1NFX0ZJTEVfSEVBREVSID0gInN1Ym1pc3Npb25BY3Rpb25Ccm93c2VGaWxlSGVhZGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUlTU0lPTl9BQ1RJT05fQlJPV1NFX0ZJTEUgPSAic3VibWlzc2lvbkFjdGlvbkJyb3dzZUZpbGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJNSVNTSU9OX0FDVElPTl9TQVZFX0FTX0hFQURFUiA9ICJzdWJtaXNzaW9uQWN0aW9uU2F2ZUFzSGVhZGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUlTU0lPTl9BQ1RJT05fU0FWRV9BUyA9ICJzdWJtaXNzaW9uQWN0aW9uU2F2ZUFzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VMRUNURURfRklMRV9IRUFERVIgPSAic2VsZWN0ZWRGaWxlSGVhZGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VMRUNURURfRklMRSA9ICJzZWxlY3RlZEZpbGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRJT05fRUxFTUVOVCA9ICJvcGVyYXRpb25FbGVtZW50IjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTkRfUE9JTlQgPSAiOjplbmRQb2ludCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRSA9ICJodHRwQmFzaWNBdXRoVXNlcm5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQgPSAiaHR0cEJhc2ljQXV0aFBhc3N3b3JkIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETEZyYW1lTmFtZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETEZyYW1lTmFtZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5NjBjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExGcmFtZU5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMRnJhbWVOYW1lcwotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX05BVklHQVRPUl9DT05UQUlORVIgPSAid3NkbF9uYXZpZ2F0b3JfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9OQVZJR0FUT1JfVE9PTEJBUiA9ICJ3c2RsX25hdmlnYXRvcl90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9OQVZJR0FUT1JfQ09OVEVOVCA9ICJ3c2RsX25hdmlnYXRvcl9jb250ZW50IjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9BQ1RJT05TX0NPTlRBSU5FUiA9ICJ3c2RsX2FjdGlvbnNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9QUk9QRVJUSUVTX0NPTlRBSU5FUiA9ICJ3c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9QUk9QRVJUSUVTX1RPT0xCQVIgPSAid3NkbF9wcm9wZXJ0aWVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX1BST1BFUlRJRVNfQ09OVEVOVCA9ICJ3c2RsX3Byb3BlcnRpZXNfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfU1RBVFVTX0NPTlRBSU5FUiA9ICJ3c2RsX3N0YXR1c19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX1NUQVRVU19UT09MQkFSID0gIndzZGxfc3RhdHVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX1NUQVRVU19DT05URU5UID0gIndzZGxfc3RhdHVzX2NvbnRlbnQiOwotCi0gIC8vIFhTRCBJbmZvIERpYWxvZwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBYU0RfSU5GT19UT09MQkFSID0gInhzZF9pbmZvX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBYU0RfSU5GT19DT05URU5UID0gInhzZF9pbmZvX2NvbnRlbnQiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9XU0RMTW9kZWxDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETE1vZGVsQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YjlmYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9XU0RMTW9kZWxDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTW9kZWxDb25zdGFudHMKLXsKLSAgICAvLyBSZWxhdGlvbgotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0RMID0gInJlbFdTREwiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0RMX1NFUlZJQ0UgPSAicmVsV1NETFNlcnZpY2UiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0RMX0JJTkRJTkcgPSAicmVsV1NETEJpbmRpbmciOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0RMX09QRVJBVElPTiA9ICJyZWxXU0RMT3BlcmF0aW9uIjsKLQotICAgIC8vIERvY3VtZW50YXRpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX0RPQ1VNRU5UQVRJT04gPSAicHJvcERvY3VtZW50YXRpb24iOwotCi0gICAgLy8gU291cmNlIENvbnRlbnQKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1NPVVJDRV9DT05URU5UX0hFQURFUiA9ICJwcm9wU291cmNlQ29udGVudEhlYWRlciI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9TT1VSQ0VfQ09OVEVOVCA9ICJwcm9wU291cmNlQ29udGVudCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9TT1VSQ0VfQ09OVEVOVF9OQU1FU1BBQ0UgPSAicHJvcFNvdXJjZUNvbnRlbnROUyI7Ci0gICAgCi0gICAgLy8gVHJhbnNwb3J0Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9TT0FQX1JFUVVFU1RfVE1QID0gInByb3BTT0FQUmVxdWVzdFRtcCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9TT0FQX1JFUVVFU1QgPSAicHJvcFNPQVBSZXF1ZXN0IjsgICAgCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9TT0FQX1JFU1BPTlNFID0gInByb3BTT0FQUmVzcG9uc2UiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9FbmRwb2ludC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9FbmRwb2ludC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWQ3ZDE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvRW5kcG9pbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBFbmRwb2ludAotewotICBwcml2YXRlIFN0cmluZyBlbmRwb2ludDsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVIVFRQQmFzaWNBdXRoOwotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgCi0gIHB1YmxpYyBFbmRwb2ludCgpCi0gIHsKLSAgICBlbmRwb2ludCA9IG51bGw7Ci0gICAgcmVxdWlyZUhUVFBCYXNpY0F1dGggPSBmYWxzZTsKLSAgICBodHRwQmFzaWNBdXRoVXNlcm5hbWUgPSBudWxsOwotICAgIGh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVuZHBvaW50KCkKLSAgewotICAgIHJldHVybiBlbmRwb2ludDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoU3RyaW5nIGVuZHBvaW50KQotICB7Ci0gICAgdGhpcy5lbmRwb2ludCA9IGVuZHBvaW50OwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc1JlcXVpcmVIVFRQQmFzaWNBdXRoKCkKLSAgewotICAgIHJldHVybiByZXF1aXJlSFRUUEJhc2ljQXV0aDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UmVxdWlyZUhUVFBCYXNpY0F1dGgoYm9vbGVhbiByZXF1aXJlSFRUUEJhc2ljQXV0aCkKLSAgewotICAgIHRoaXMucmVxdWlyZUhUVFBCYXNpY0F1dGggPSByZXF1aXJlSFRUUEJhc2ljQXV0aDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWUpCi0gIHsKLSAgICB0aGlzLmh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQpCi0gIHsKLSAgICB0aGlzLmh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMQmluZGluZ0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEJpbmRpbmdFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1OTc4ODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMQmluZGluZ0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5CaW5kaW5nVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdTRExCaW5kaW5nRWxlbWVudCBleHRlbmRzIFdTRExDb21tb25FbGVtZW50Ci17Ci0gIHByaXZhdGUgaW50IGJpbmRpbmdUeXBlXzsKLSAgcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmdfOwotICBwcml2YXRlIEV4dGVuc2liaWxpdHlFbGVtZW50IGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudF87Ci0gIHByaXZhdGUgVmVjdG9yIGVuZFBvaW50c187Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHNldEJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICBiaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnRfID0gbnVsbDsKLSAgICBiaW5kaW5nVHlwZV8gPSBCaW5kaW5nVHlwZXMuVU5TVVBQT1JURUQ7Ci0gICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nXy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTtpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpLm5leHQoKTsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgSFRUUEJpbmRpbmcpCi0gICAgICB7Ci0gICAgICAgIEhUVFBCaW5kaW5nIGJpbmRpbmcgPSAoSFRUUEJpbmRpbmcpZTsKLSAgICAgICAgU3RyaW5nIHZlcmIgPSBiaW5kaW5nLmdldFZlcmIoKTsKLSAgICAgICAgaWYgKEJpbmRpbmdUeXBlcy5IVFRQX1ZFUkJfR0VULmVxdWFscyh2ZXJiKSkKLSAgICAgICAgICBiaW5kaW5nVHlwZV8gPSBCaW5kaW5nVHlwZXMuSFRUUF9HRVQ7Ci0gICAgICAgIGVsc2UgaWYgKEJpbmRpbmdUeXBlcy5IVFRQX1ZFUkJfUE9TVC5lcXVhbHModmVyYikpCi0gICAgICAgICAgYmluZGluZ1R5cGVfID0gQmluZGluZ1R5cGVzLkhUVFBfUE9TVDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBTT0FQQmluZGluZykKLSAgICAgICAgYmluZGluZ1R5cGVfID0gQmluZGluZ1R5cGVzLlNPQVA7Ci0gICAgICBpZiAoYmluZGluZ1R5cGVfICE9IEJpbmRpbmdUeXBlcy5VTlNVUFBPUlRFRCkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50XyA9IGU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFdTRExCaW5kaW5nRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICBzZXRCaW5kaW5nKGJpbmRpbmcpOwotICAgIGVuZFBvaW50c18gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRCaW5kaW5nKEJpbmRpbmcgYmluZGluZykgewotICAgIGJpbmRpbmdfID0gYmluZGluZzsKLSAgICBzZXREb2N1bWVudGF0aW9uKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgc2V0QmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgQmluZGluZyBnZXRCaW5kaW5nKCkgewotICAgIHJldHVybiBiaW5kaW5nXzsKLSAgfQotICAKLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGdldEJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50XzsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRCaW5kaW5nVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ1R5cGVfOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlc2V0RW5kUG9pbnRzKCkKLSAgewotICAgIFdTRExTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpZ2V0UGFyZW50RWxlbWVudCgpOwotICAgIFN0cmluZyBmaXhlZEVuZHBvaW50U3RyaW5nID0gc2VydmljZUVsZW1lbnQuZ2V0QWRkcmVzc0xvY2F0aW9uKGJpbmRpbmdfKTsKLSAgICBFbmRwb2ludCBmaXhlZEVuZHBvaW50ID0gZ2V0RW5kcG9pbnQoZml4ZWRFbmRwb2ludFN0cmluZyk7Ci0gICAgaWYgKGZpeGVkRW5kcG9pbnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBmaXhlZEVuZHBvaW50ID0gbmV3IEVuZHBvaW50KCk7Ci0gICAgICBmaXhlZEVuZHBvaW50LnNldEVuZHBvaW50KGZpeGVkRW5kcG9pbnRTdHJpbmcpOwotICAgIH0KLSAgICBlbmRQb2ludHNfLmNsZWFyKCk7Ci0gICAgZW5kUG9pbnRzXy5hZGQoZml4ZWRFbmRwb2ludCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0RW5kUG9pbnRzKCkKLSAgewotICAgIFN0cmluZ1tdIGVuZFBvaW50cyA9IG5ldyBTdHJpbmdbZW5kUG9pbnRzXy5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW5kUG9pbnRzLmxlbmd0aDsgaSsrKQotICAgICAgZW5kUG9pbnRzW2ldID0gKChFbmRwb2ludCllbmRQb2ludHNfLmdldChpKSkuZ2V0RW5kcG9pbnQoKTsKLSAgICByZXR1cm4gZW5kUG9pbnRzOwotICB9Ci0gIAotICBwdWJsaWMgRW5kcG9pbnQgZ2V0RW5kcG9pbnQoU3RyaW5nIGVuZHBvaW50U3RyaW5nKQotICB7Ci0gICAgaWYgKGVuZHBvaW50U3RyaW5nICE9IG51bGwgJiYgZW5kcG9pbnRTdHJpbmcubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBlbmRQb2ludHNfLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEVuZHBvaW50IGVuZHBvaW50ID0gKEVuZHBvaW50KWl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGVuZHBvaW50U3RyaW5nLmVxdWFscyhlbmRwb2ludC5nZXRFbmRwb2ludCgpKSkKLSAgICAgICAgICByZXR1cm4gZW5kcG9pbnQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW5kUG9pbnRzKFN0cmluZ1tdIGVuZHBvaW50cykKLSAgewotICAgIFZlY3RvciBlbmRwb2ludFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZHBvaW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBFbmRwb2ludCBlbmRwb2ludCA9IGdldEVuZHBvaW50KGVuZHBvaW50c1tpXSk7Ci0gICAgICBpZiAoZW5kcG9pbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZW5kcG9pbnQgPSBuZXcgRW5kcG9pbnQoKTsKLSAgICAgICAgZW5kcG9pbnQuc2V0RW5kcG9pbnQoZW5kcG9pbnRzW2ldKTsKLSAgICAgIH0KLSAgICAgIGVuZHBvaW50VmVjdG9yLmFkZChlbmRwb2ludCk7Ci0gICAgfQotICAgIHJlc2V0RW5kUG9pbnRzKCk7Ci0gICAgZW5kUG9pbnRzXy5hZGRBbGwoZW5kcG9pbnRWZWN0b3IpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRW5kUG9pbnQoU3RyaW5nIGVuZHBvaW50U3RyaW5nKQotICB7Ci0gICAgaWYgKGVuZHBvaW50U3RyaW5nICE9IG51bGwgJiYgZW5kcG9pbnRTdHJpbmcubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIEVuZHBvaW50IGVuZHBvaW50ID0gbmV3IEVuZHBvaW50KCk7Ci0gICAgICBlbmRwb2ludC5zZXRFbmRwb2ludChlbmRwb2ludFN0cmluZyk7Ci0gICAgICBlbmRQb2ludHNfLmFkZChlbmRwb2ludCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRW5kUG9pbnQoU3RyaW5nIGVuZHBvaW50U3RyaW5nKQotICB7Ci0gICAgaWYgKGVuZHBvaW50U3RyaW5nICE9IG51bGwgJiYgZW5kcG9pbnRTdHJpbmcubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIFdTRExTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgU3RyaW5nIGZpeGVkRW5kcG9pbnRTdHJpbmcgPSBzZXJ2aWNlRWxlbWVudC5nZXRBZGRyZXNzTG9jYXRpb24oYmluZGluZ18pOwotICAgICAgaWYgKGZpeGVkRW5kcG9pbnRTdHJpbmcgPT0gbnVsbCB8fCAhZml4ZWRFbmRwb2ludFN0cmluZy5lcXVhbHMoZW5kcG9pbnRTdHJpbmcpKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZFBvaW50c18uc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoZW5kcG9pbnRTdHJpbmcuZXF1YWxzKCgoRW5kcG9pbnQpZW5kUG9pbnRzXy5nZXQoaSkpLmdldEVuZHBvaW50KCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVuZFBvaW50c18ucmVtb3ZlKGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgYnVpbGRNb2RlbCgpIHsKLSAgICByZXNldEVuZFBvaW50cygpOwotICAgIGlmIChiaW5kaW5nXyAhPSBudWxsKSB7Ci0gICAgICBQb3J0VHlwZSBwdCA9IGJpbmRpbmdfLmdldFBvcnRUeXBlKCk7Ci0gICAgICBpZiAocHQgIT0gbnVsbCkgewotICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBwdC5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICAgIEhhc2hNYXAgb3BlcmF0aW9uc01hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7aXQuaGFzTmV4dCgpOykgewotICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKWl0Lm5leHQoKTsKLSAgICAgICAgICBvcGVyYXRpb25zTWFwLnB1dChjcmVhdGVPcGVyYXRpb25VbmlxdWVOYW1lKG9wZXJhdGlvbiksIG9wZXJhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgV1NETE9wZXJhdGlvbkVsZW1lbnRbXSB3c2RsT3BlcmF0aW9uRWxlbWVudHMgPSBuZXcgV1NETE9wZXJhdGlvbkVsZW1lbnRbZ2V0TnVtYmVyT2ZFbGVtZW50cyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfT1BFUkFUSU9OKV07Ci0gICAgICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfT1BFUkFUSU9OKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsT3BlcmF0aW9uRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB3c2RsT3BlcmF0aW9uRWxlbWVudHNbaV0gPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd3NkbE9wZXJhdGlvbkVsZW1lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBjcmVhdGVPcGVyYXRpb25VbmlxdWVOYW1lKHdzZGxPcGVyYXRpb25FbGVtZW50c1tqXS5nZXRPcGVyYXRpb24oKSk7Ci0gICAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pb3BlcmF0aW9uc01hcC5nZXQob3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBvcGVyYXRpb25zTWFwLnJlbW92ZShvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgICAgIHdzZGxPcGVyYXRpb25FbGVtZW50c1tqXS5zZXRPcGVyYXRpb24odGhpcywgb3BlcmF0aW9uKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlzY29ubmVjdCh3c2RsT3BlcmF0aW9uRWxlbWVudHNbal0sIFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBvcGVyYXRpb25zTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7aXQuaGFzTmV4dCgpOykgewotICAgICAgICAgIE9wZXJhdGlvbiBvcGVyID0gKE9wZXJhdGlvbilpdC5uZXh0KCk7Ci0gICAgICAgICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgd3NkbE9wZXJhdGlvbkVsZW1lbnQgPSBuZXcgV1NETE9wZXJhdGlvbkVsZW1lbnQob3Blci5nZXROYW1lKCksIHRoaXMsIG9wZXIpOwotICAgICAgICAgIGNvbm5lY3Qod3NkbE9wZXJhdGlvbkVsZW1lbnQsV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTixNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlT3BlcmF0aW9uVW5pcXVlTmFtZShPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgbmFtZS5hcHBlbmQob3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgSW5wdXQgaW5wdXRNc2cgPSBvcGVyYXRpb24uZ2V0SW5wdXQoKTsKLSAgICBpZiAoaW5wdXRNc2cgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBRTmFtZSBxbmFtZSA9IGlucHV0TXNnLmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpOwotICAgICAgbmFtZS5hcHBlbmQocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgbmFtZS5hcHBlbmQoIjoiKTsKLSAgICAgIG5hbWUuYXBwZW5kKHFuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgT3V0cHV0IG91dHB1dE1zZyA9IG9wZXJhdGlvbi5nZXRPdXRwdXQoKTsKLSAgICBpZiAob3V0cHV0TXNnICE9IG51bGwpCi0gICAgewotICAgICAgUU5hbWUgcW5hbWUgPSBvdXRwdXRNc2cuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCk7Ci0gICAgICBuYW1lLmFwcGVuZChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBuYW1lLmFwcGVuZCgiOiIpOwotICAgICAgbmFtZS5hcHBlbmQocW5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLSAgICByZXR1cm4gbmFtZS50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExDb21tb25FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExDb21tb25FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OGNhM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMQ29tbW9uRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQ29tbW9uRWxlbWVudCBleHRlbmRzIFRyZWVFbGVtZW50Ci17Ci0KLSAgcHVibGljIFdTRExDb21tb25FbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCkgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUcmVlRWxlbWVudCBnZXRQYXJlbnRFbGVtZW50KCkgewotICAgICAgcmV0dXJuIChUcmVlRWxlbWVudClnZXRFbGVtZW50cyhNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpLm5leHRFbGVtZW50KCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldERvY3VtZW50YXRpb24oTm9kZSBkb2N1bWVudGF0aW9uRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBkb2N1bWVudGF0aW9uID0gIiI7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKGRvY3VtZW50YXRpb25FbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLmNyZWF0ZU5ld0RvY3VtZW50KG51bGwpOwotICAgICAgICBEb2N1bWVudEZyYWdtZW50IGRmID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAgTm9kZUxpc3QgZG9jdW1lbnRhdGlvbk5vZGVzID0gZG9jdW1lbnRhdGlvbkVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxkb2N1bWVudGF0aW9uTm9kZXMuZ2V0TGVuZ3RoKCk7aSsrKQotICAgICAgICAgIGRmLmFwcGVuZENoaWxkKGRvYy5pbXBvcnROb2RlKGRvY3VtZW50YXRpb25Ob2Rlcy5pdGVtKGkpLHRydWUpKTsKLSAgICAgICAgZG9jdW1lbnRhdGlvbiA9IFhNTFV0aWxzLnNlcmlhbGl6ZShkZix0cnVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfRE9DVU1FTlRBVElPTixkb2N1bWVudGF0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjdlYTgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MTcgICAxNDY3MDcgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDEyNCAgIDE2NzQ4NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA4MDExNSAgIDIxNDk1NSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUVuY29kZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbi5IVFRQVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5Lk5ldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERGlhZ25vc3RpYzsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERGlhZ25vc3RpY1NldmVyaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYURpcmVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RTY2hlbWFJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RSZXNvdXJjZUZhY3RvcnlJbXBsOwotCi1wdWJsaWMgY2xhc3MgV1NETEVsZW1lbnQgZXh0ZW5kcyBXU0RMQ29tbW9uRWxlbWVudAotewotCi0gIHByaXZhdGUgU3RyaW5nIHdzZGxVcmxfOwotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbl87Ci0gIHByaXZhdGUgVmVjdG9yIHNjaGVtYUxpc3RfOwotICBwcml2YXRlIFZlY3RvciBzY2hlbWFVUklfOwotCi0gIHByaXZhdGUgc3RhdGljIFZlY3RvciB3M1NjaGVtYVFOYW1lTGlzdF87Ci0gIHByaXZhdGUgc3RhdGljIFZlY3RvciBjb25zdGFudFNjaGVtYUxpc3RfOwotICAKLSAgLy9BIFJlc291cmNlU2V0IGZvciBhbGwgc2NoZW1hcyBpbiB0aGlzIFdTREwKLSAgcHJpdmF0ZSBSZXNvdXJjZVNldCByZXNvdXJjZVNldDsKLQotICBzdGF0aWMKLSAgewotICAgIC8vIHczIHNjaGVtYSBVUkkgbGlzdDoKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnLzIwMDAvMTAvWE1MU2NoZW1hCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvMTk5OS9YTUxTY2hlbWEKLSAgICB3M1NjaGVtYVFOYW1lTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgdzNTY2hlbWFRTmFtZUxpc3RfLmFkZEVsZW1lbnQobmV3IFFOYW1lKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV9DVVJSRU5UX1NDSEVNQV9YU0QsInNjaGVtYSIpKTsKLSAgICB3M1NjaGVtYVFOYW1lTGlzdF8uYWRkRWxlbWVudChuZXcgUU5hbWUoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJXzIwMDBfU0NIRU1BX1hTRCwic2NoZW1hIikpOwotICAgIHczU2NoZW1hUU5hbWVMaXN0Xy5hZGRFbGVtZW50KG5ldyBRTmFtZShGcmFnbWVudENvbnN0YW50cy5OU19VUklfMTk5OV9TQ0hFTUFfWFNELCJzY2hlbWEiKSk7Ci0KLSAgICAvLyBDb25zdGFudCBzY2hlbWEgVVJJIGxpc3Q6Ci0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hCi0gICAgLy8gaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8KLSAgICAvLyBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLwotICAgIGNvbnN0YW50U2NoZW1hTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgY29uc3RhbnRTY2hlbWFMaXN0Xy5hZGRFbGVtZW50KFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV9DVVJSRU5UX1NDSEVNQV9YU0QpKTsKLSAgICBjb25zdGFudFNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJXzIwMDBfU0NIRU1BX1hTRCkpOwotICAgIGNvbnN0YW50U2NoZW1hTGlzdF8uYWRkRWxlbWVudChYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShGcmFnbWVudENvbnN0YW50cy5OU19VUklfMTk5OV9TQ0hFTUFfWFNEKSk7Ci0gICAgY29uc3RhbnRTY2hlbWFMaXN0Xy5hZGRFbGVtZW50KFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV9TT0FQX0VOQykpOwotICAgIGNvbnN0YW50U2NoZW1hTGlzdF8uYWRkRWxlbWVudChYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShGcmFnbWVudENvbnN0YW50cy5VUklfV1NETCkpOwotICB9Ci0KLSAgcHVibGljIFdTRExFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgU3RyaW5nIHdzZGxVcmwpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgc2V0V3NkbFVybCh3c2RsVXJsKTsKLSAgICBkZWZpbml0aW9uXyA9IG51bGw7Ci0gICAgc2NoZW1hTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0Jc2NoZW1hVVJJXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVcmwoU3RyaW5nIHdzZGxVcmwpIHsKLQkgIEhUVFBVdGlsaXR5IGh0dHAgPSBuZXcgSFRUUFV0aWxpdHkoKTsKLQkgIHdzZGxVcmxfID0gaHR0cC5oYW5kbGVSZWRpcmVjdCh3c2RsVXJsKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVybCgpIHsKLSAgICByZXR1cm4gd3NkbFVybF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTY2hlbWFMaXN0KFZlY3RvciBzY2hlbWFMaXN0KQotICB7Ci0gICAgc2NoZW1hTGlzdF8gPSBzY2hlbWFMaXN0OwotICB9Ci0KLSAgcHVibGljIFZlY3RvciBnZXRTY2hlbWFMaXN0KCkKLSAgewotICAgIHJldHVybiBzY2hlbWFMaXN0XzsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBEZWZpbml0aW9uIGxvYWRXU0RMKFN0cmluZyB3c2RsVVJMKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvblZlcmJvc2Uod3NkbFVSTCk7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIHdzZGxlKQotICAgIHsKLSAgICAgIHRocm93IHdzZGxlOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiAsIHQuZ2V0TWVzc2FnZSgpLCB0KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgVmVjdG9yIGxvYWRXU0RMKCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotCSAgCi0JLy8JUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVudGlvbnMuCi0JcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0JcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTixuZXcgWFNEUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsgICAgCQkKLQkvL1JlZ2lzdGVyIHRoZSBwYWNrYWdlIHRvIGVuc3VyZSBpdCBpcyBhdmFpbGFibGUgZHVyaW5nIGxvYWRpbmcuCi0JcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0KFhTRFBhY2thZ2UuZU5TX1VSSSxYU0RQYWNrYWdlLmVJTlNUQU5DRSk7CQotCSAgCi0JICAKLSAgICBWZWN0b3IgZXJyb3JNZXNzYWdlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBkZWZpbml0aW9uXyA9IGxvYWRXU0RMKHdzZGxVcmxfKTsKLSAgICAKLSAgICAKLSAgICBpZiAoZGVmaW5pdGlvbl8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXREb2N1bWVudGF0aW9uKGRlZmluaXRpb25fLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgICAgZ2F0aGVyU2NoZW1hcyhkZWZpbml0aW9uXywgd3NkbFVybF8pOwotICAgICAgLy8gVmFsaWRhdGUgdGhlIHNjaGVtYXMuCi0gICAgICBmb3IgKGludCBpPTA7aTxzY2hlbWFMaXN0Xy5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gKFhTRFNjaGVtYSlzY2hlbWFMaXN0Xy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIHhzZFNjaGVtYS52YWxpZGF0ZSgpOwotICAgICAgICBFTGlzdCBlcnJvcnMgPSB4c2RTY2hlbWEuZ2V0QWxsRGlhZ25vc3RpY3MoKTsKLSAgICAgICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChMaXN0SXRlcmF0b3IgbGkgPSBlcnJvcnMubGlzdEl0ZXJhdG9yKCk7bGkuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBYU0REaWFnbm9zdGljIHhkID0gKFhTRERpYWdub3N0aWMpbGkubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIG1zZyA9IHhkLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIC8vIGRvIG5vdCByZXBvcnQgbG93IHNldmVyaXR5IGRpYWdub3N0aWNzIG9yIGVycm9uZW91cyBhcnJheSByZWZlcmVuY2UgZXJyb3JzLgotICAgICAgICAgICAgaWYgKHhkLmdldFNldmVyaXR5KCkuZ2V0VmFsdWUoKSA9PSBYU0REaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUxfTElURVJBTC5nZXRWYWx1ZSgpIHx8IChtc2cgIT0gbnVsbCAmJiBtc2cubGVuZ3RoKCkgPiAwICYmIG1zZy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIiNhcnJheSIpICE9IC0xKSkKLSAgICAgICAgICAgICAgbGkucmVtb3ZlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChtc2cgIT0gbnVsbCAmJiBtc2cubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMuYWRkRWxlbWVudCh4ZC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBmb3IgKGludCBpPTA7aTxjb25zdGFudFNjaGVtYUxpc3RfLnNpemUoKTtpKyspCi0gICAgICAgIHNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoY29uc3RhbnRTY2hlbWFMaXN0Xy5lbGVtZW50QXQoaSkpOwotICAgICAgCi0JfQotICAgIHJldHVybiBlcnJvck1lc3NhZ2VzOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGdhdGhlclNjaGVtYXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgZGVmaW5pdGlvblVSTCkKLSAgewotICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgZXh0VHlwZXMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGlmIChleHRUeXBlcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpPTA7aTxleHRUeXBlcy5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IG51bGw7Ci0gICAgICAgICAgT2JqZWN0IG9iaiA9IGV4dFR5cGVzLmdldChpKTsKLSAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBzY2hlbWFFbGVtZW50ID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudClvYmo7Ci0gICAgICAgICAgICBpZiAoaXNXM1NjaGVtYUVsZW1lbnRUeXBlKHNjaGVtYUVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuY3JlYXRlU2NoZW1hKHNjaGVtYUVsZW1lbnQuZ2V0RWxlbWVudCgpKTsKLQkJCSAgaWYoIWNoZWNrU2NoZW1hVVJJKGRlZmluaXRpb25VUkwpKXsKLQkJCQkgIHNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoeHNkU2NoZW1hKTsKLQkJCQkgIGdhdGhlclNjaGVtYURpcmVjdGl2ZSh4c2RTY2hlbWEsIGRlZmluaXRpb25VUkwpOwotICAgICAgICAgICAgICB9Ci0JCQkgIC8vV2UgbmVlZCB0byBhZGQgdGhlIHNjaGVtYSB0byBhIFJlc291cmNlIGluIGEgUmVzb3VyY2Ugc2V0IGZvciBwcm9wZXIgdmFsaWRhdGlvbgotICAgICAgICAJICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJIHVyaSA9IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkuY3JlYXRlVVJJKGRlZmluaXRpb25VUkwpOyAgICAJCQotICAgICAgICAJICBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKHVyaSk7Ci0gICAgICAgIAkgIC8vQWRkIHRoZSBTY2hlbWEgdG8gdGhlIHJlc291cmNlCi0gICAgICAgIAkgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHhzZFNjaGVtYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSAJCi0gICAgICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBzY2hlbWFFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClvYmo7Ci0gICAgICAgICAgICB4c2RTY2hlbWEgPSBzY2hlbWFFbGVtZW50LmdldFNjaGVtYSgpOwotICAgICAgICAgICAgaWYoIXNjaGVtYUxpc3RfLmNvbnRhaW5zKHhzZFNjaGVtYSkpewotCQkJCXNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoeHNkU2NoZW1hKTsKLQkJCQlnYXRoZXJTY2hlbWFEaXJlY3RpdmUoeHNkU2NoZW1hLCBkZWZpbml0aW9uVVJMKTsKLQkJCX0KLQkJICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgTWFwIGltcG9ydHMgPSBkZWZpbml0aW9uLmdldEltcG9ydHMoKTsKLSAgICBpZiAoaW1wb3J0cyAhPSBudWxsKQotICAgICAgZ2F0aGVySW1wb3J0ZWRTY2hlbWFzKGRlZmluaXRpb24saW1wb3J0cyk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgZ2F0aGVyU2NoZW1hRGlyZWN0aXZlKFhTRFNjaGVtYSB4c2RTY2hlbWEsIFN0cmluZyB4c2RTY2hlbWFVUkwpCi0gIHsKLSAgICBpZiAoeHNkU2NoZW1hICE9IG51bGwpCi0gICAgewotICAgICAgRUxpc3QgeHNkU2NoZW1hQ29udGVudHMgPSB4c2RTY2hlbWEuZ2V0Q29udGVudHMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB4c2RTY2hlbWFDb250ZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3QgY29udGVudCA9IGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFEaXJlY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICBYU0RTY2hlbWFEaXJlY3RpdmUgeHNkU2NoZW1hRGlyZWN0aXZlID0gKFhTRFNjaGVtYURpcmVjdGl2ZSljb250ZW50OwotICAgICAgICAgIFN0cmluZ0J1ZmZlciB4c2RTY2hlbWFEaXJlY3RpdmVVUkwgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgU3RyaW5nIHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uID0geHNkU2NoZW1hRGlyZWN0aXZlLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0gICAgICAgICAgaWYgKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uICE9IG51bGwgJiYgeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24uaW5kZXhPZignOicpID09IC0xICYmIHhzZFNjaGVtYVVSTCAhPSBudWxsICYmIHhzZFNjaGVtYVVSTC5pbmRleE9mKCc6JykgIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gcmVsYXRpdmUgVVJMCi0gICAgICAgICAgICBpbnQgaW5kZXggPSB4c2RTY2hlbWFVUkwubGFzdEluZGV4T2YoJy8nKTsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgICAgICAgeHNkU2NoZW1hRGlyZWN0aXZlVVJMLmFwcGVuZCh4c2RTY2hlbWFVUkwuc3Vic3RyaW5nKDAsIGluZGV4KzEpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeHNkU2NoZW1hRGlyZWN0aXZlVVJMLmFwcGVuZCh4c2RTY2hlbWFVUkwpOwotICAgICAgICAgICAgICB4c2RTY2hlbWFEaXJlY3RpdmVVUkwuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHhzZFNjaGVtYURpcmVjdGl2ZVVSTC5hcHBlbmQoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24pOwotICAgICAgICAgIC8vIHJlc29sdmUgc2NoZW1hIGRpcmVjdGl2ZQotICAgICAgICAgIFhTRFNjaGVtYSByZXNvbHZlZFNjaGVtYSA9IHhzZFNjaGVtYURpcmVjdGl2ZS5nZXRSZXNvbHZlZFNjaGVtYSgpOwotICAgICAgICAgIGlmIChyZXNvbHZlZFNjaGVtYSA9PSBudWxsICYmIHhzZFNjaGVtYURpcmVjdGl2ZVVSTC5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICByZXNvbHZlZFNjaGVtYSA9IGdldFNjaGVtYSh4c2RTY2hlbWFEaXJlY3RpdmVVUkwudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKHJlc29sdmVkU2NoZW1hICE9IG51bGwpCi0gICAgICAgICAgewotCQkJaWYoIWNoZWNrU2NoZW1hVVJJKHhzZFNjaGVtYURpcmVjdGl2ZVVSTC50b1N0cmluZygpKSl7Ci0JCQkJc2NoZW1hTGlzdF8uYWRkRWxlbWVudChyZXNvbHZlZFNjaGVtYSk7Ci0JCQkJZ2F0aGVyU2NoZW1hRGlyZWN0aXZlKHJlc29sdmVkU2NoZW1hLCB4c2RTY2hlbWFEaXJlY3RpdmVVUkwudG9TdHJpbmcoKSk7Ci0gICAgICAJCX0KLSAgICAgIAkgIH0KLSAgICAgICAgfQotCSAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBjaGVja1NjaGVtYVVSSShTdHJpbmcgc2NoZW1hVVJJKXsKLQkgIAlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JICAJIAkKLQkJCi0JCXNjaGVtYVVSSSA9IG5vcm1hbGl6ZShzY2hlbWFVUkkpOyAKLQkJaWYoc2NoZW1hVVJJLmVxdWFscyhub3JtYWxpemUod3NkbFVybF8pKSlyZXR1cm4gZmFsc2U7Ci0JCUVudW1lcmF0aW9uIGUgPSBzY2hlbWFVUklfLmVsZW1lbnRzKCk7Ci0JCXdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotCQkJU3RyaW5nIHVyaSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwkKLQkJCWlmKHNjaGVtYVVSSS5lcXVhbHModXJpKSl7IAotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQlicmVhazsKLQkJCX0JCi0JCX0KLQkJCi0JICAgIGlmICghZm91bmQpewotCSAgICAJc2NoZW1hVVJJXy5hZGRFbGVtZW50KHNjaGVtYVVSSSk7Ci0JICAgIH0KLQkgICAgcmV0dXJuIGZvdW5kOwotCSAgCi0JICB9Ci0JICAKLSAgcHJpdmF0ZSBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyB1cmkgKQotICB7Ci0JICB0cnkgewotCQkgIFN0cmluZyBlbmNvZGVkVVJJID0gVVJJRW5jb2Rlci5lbmNvZGUodXJpLCJVVEYtOCIpOwotCQkgIFVSSSBub3JtYWxpemVkVVJJID0gbmV3IFVSSShlbmNvZGVkVVJJKTsKLQkJICBub3JtYWxpemVkVVJJID0gbm9ybWFsaXplZFVSSS5ub3JtYWxpemUoKTsKLQkJICByZXR1cm4gbm9ybWFsaXplZFVSSS50b1N0cmluZygpOwotCSAgfSBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpIHsKLQkJICByZXR1cm4gdXJpOwotCSAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCSAgcmV0dXJuIHVyaTsKLQkgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzVzNTY2hlbWFFbGVtZW50VHlwZShRTmFtZSBxbmFtZSkKLSAgewotICAgIGZvciAoaW50IGk9MDtpPHczU2NoZW1hUU5hbWVMaXN0Xy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIFFOYW1lIHczU2NoZW1hUU5hbWUgPSAoUU5hbWUpdzNTY2hlbWFRTmFtZUxpc3RfLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmICh3M1NjaGVtYVFOYW1lLmVxdWFscyhxbmFtZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgZ2F0aGVySW1wb3J0ZWRTY2hlbWFzKERlZmluaXRpb24gZGVmaW5pdGlvbixNYXAgaW1wb3J0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBpbXBvcnRzLmtleVNldCgpLml0ZXJhdG9yKCk7aXRlcmF0b3IuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBMaXN0IGltcG9ydExpc3QgPSAoTGlzdClpbXBvcnRzLmdldChpdGVyYXRvci5uZXh0KCkpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aW1wb3J0TGlzdC5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBJbXBvcnQgaW1wID0gKEltcG9ydClpbXBvcnRMaXN0LmdldChpKTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGxvY1VSSSA9IG5ldyBTdHJpbmdCdWZmZXIoaW1wLmdldExvY2F0aW9uVVJJKCkpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTChsb2NVUkkudG9TdHJpbmcoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgYmFzZSA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgICAgICAgbG9jVVJJLmluc2VydCgwLGJhc2Uuc3Vic3RyaW5nKDAsYmFzZS5sYXN0SW5kZXhPZignLycpKzEpKTsKLSAgICAgICAgfQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIERlZmluaXRpb24gaW1wb3J0RGVmID0gbG9hZFdTREwobG9jVVJJLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGdhdGhlclNjaGVtYXMoaW1wb3J0RGVmLCBsb2NVUkkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heSBiZSBhbiBYU0QgZmlsZS4KLSAgICAgICAgICBnYXRoZXJTY2hlbWEobG9jVVJJLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGdhdGhlclNjaGVtYShTdHJpbmcgbG9jVVJJKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IGdldFNjaGVtYShsb2NVUkkpOwotICAgIGlmICh4c2RTY2hlbWEgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzY2hlbWFMaXN0Xy5hZGRFbGVtZW50KHhzZFNjaGVtYSk7Ci0gICAgICBnYXRoZXJTY2hlbWFEaXJlY3RpdmUoeHNkU2NoZW1hLCBsb2NVUkkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgZmluYWwgWFNEU2NoZW1hIGdldFNjaGVtYShTdHJpbmcgbG9jVVJJKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKGxvY1VSSSk7Ci0gICAgaWYgKHhzZFNjaGVtYSA9PSBudWxsKQotICAgIHsKLSAgICAgIFhTRFBhcnNlciBwID0gbmV3IFhTRFBhcnNlcigpOwotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBOZXRVdGlscy5nZXRVUkxJbnB1dFN0cmVhbShsb2NVUkkpOwotICAgICAgaWYgKGlzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHAucGFyc2UoaXMpOwotICAgICAgICB4c2RTY2hlbWEgPSBwLmdldFNjaGVtYSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geHNkU2NoZW1hOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBkZWZpbml0aW9uXyA9IGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBkZWZpbml0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGJ1aWxkTW9kZWwoKSB7Ci0gICAgaWYgKGRlZmluaXRpb25fICE9IG51bGwpIHsKLSAgICAgIE1hcCBzZXJ2aWNlcyA9IG5ldyBIYXNoTWFwKGRlZmluaXRpb25fLmdldFNlcnZpY2VzKCkpOwotICAgICAgV1NETFNlcnZpY2VFbGVtZW50W10gd3NkbFNlcnZpY2VFbGVtZW50cyA9IG5ldyBXU0RMU2VydmljZUVsZW1lbnRbZ2V0TnVtYmVyT2ZFbGVtZW50cyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRSldOwotICAgICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbFNlcnZpY2VFbGVtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICB3c2RsU2VydmljZUVsZW1lbnRzW2ldID0gKFdTRExTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHdzZGxTZXJ2aWNlRWxlbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgUU5hbWUgcW5hbWUgPSB3c2RsU2VydmljZUVsZW1lbnRzW2pdLmdldFNlcnZpY2UoKS5nZXRRTmFtZSgpOwotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlzZXJ2aWNlcy5nZXQocW5hbWUpOwotICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgc2VydmljZXMucmVtb3ZlKHFuYW1lKTsKLSAgICAgICAgICB3c2RsU2VydmljZUVsZW1lbnRzW2pdLnNldFNlcnZpY2Uoc2VydmljZSk7Ci0gICAgICAgICAgd3NkbFNlcnZpY2VFbGVtZW50c1tqXS5idWlsZE1vZGVsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGRpc2Nvbm5lY3Qod3NkbFNlcnZpY2VFbGVtZW50c1tqXSwgV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0UpOwotICAgICAgfQotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7aXQuaGFzTmV4dCgpOykgewotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlpdC5uZXh0KCk7Ci0gICAgICAgIFdTRExTZXJ2aWNlRWxlbWVudCB3c2RsU2VydmljZUVsZW1lbnQgPSBuZXcgV1NETFNlcnZpY2VFbGVtZW50KHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgZ2V0TW9kZWwoKSwgc2VydmljZSk7Ci0gICAgICAgIGNvbm5lY3Qod3NkbFNlcnZpY2VFbGVtZW50LFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgIHdzZGxTZXJ2aWNlRWxlbWVudC5idWlsZE1vZGVsKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExPcGVyYXRpb25FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExPcGVyYXRpb25FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NzMzNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMT3BlcmF0aW9uRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKiAyMDA3MTAyNCAgIDIwNjU1NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5UcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5CaW5kaW5nVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5NZXNzYWdlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMT3BlcmF0aW9uRWxlbWVudCBleHRlbmRzIFdTRExDb21tb25FbGVtZW50Ci17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9UWVBFX1NPQVAgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fVFlQRV9IVFRQX0dFVCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9UWVBFX0hUVFBfUE9TVCA9IDI7Ci0KLSAgcHJpdmF0ZSBpbnQgb3BlcmF0aW9uVHlwZV87Ci0gIHByaXZhdGUgT3BlcmF0aW9uIG9wZXJhdGlvbl87Ci0gIHByaXZhdGUgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl87Ci0gIHByaXZhdGUgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgZnJhZ0NvbnRyb2xsZXJfOwotICBwcml2YXRlIGJvb2xlYW4gaXNEb2N1bWVudFN0eWxlXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVXNlTGl0ZXJhbF87Ci0gIHByaXZhdGUgU3RyaW5nIHNvYXBBY3Rpb25fOwotICBwcml2YXRlIFN0cmluZyBlbmNvZGluZ1N0eWxlXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RpbmdOYW1lc3BhY2VfOwotCi0gIHByaXZhdGUgTWFwIGhlYWRlckNhY2hlOwotICAKLSAgcHJpdmF0ZSBNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCA9IG51bGw7Ci0gIHByaXZhdGUgSVNPQVBUcmFuc3BvcnRQcm92aWRlciBzb2FwVHJhbnNwb3J0UHJvdmlkZXIgPSBudWxsOyAgCi0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgZ2F0aGVyU29hcEluZm9ybWF0aW9uKFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCxTT0FQQmluZGluZyBzb2FwQmluZGluZykKLSAgewotICAgIC8vIEluaXRpYWxpemUgZGVmYXVsdHMuCi0gICAgaXNEb2N1bWVudFN0eWxlXyA9IHRydWU7Ci0gICAgc29hcEFjdGlvbl8gPSAiIjsKLSAgICBpc1VzZUxpdGVyYWxfID0gdHJ1ZTsKLSAgICBlbmNvZGluZ1N0eWxlXyA9IG51bGw7Ci0gICAgZW5jb2RpbmdOYW1lc3BhY2VfID0gbnVsbDsKLQotICAgIGlmIChzb2FwQmluZGluZyAhPSBudWxsKQotICAgICAgaXNEb2N1bWVudFN0eWxlXyA9ICJkb2N1bWVudCIuZXF1YWxzKHNvYXBCaW5kaW5nLmdldFN0eWxlKCkpOwotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ0VsZW1lbnQpOwotICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IG51bGw7Ci0gICAgCi0gICAgZm9yIChJdGVyYXRvciBpID0gYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpO2kuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWkubmV4dCgpOwotICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICBzb2FwT3BlcmF0aW9uID0gKFNPQVBPcGVyYXRpb24pZTsKLSAgICAgICAgc29hcEFjdGlvbl8gPSBzb2FwT3BlcmF0aW9uLmdldFNvYXBBY3Rpb25VUkkoKTsKLSAgICAgICAgaWYoc29hcEFjdGlvbl8gPT0gbnVsbCkgc29hcEFjdGlvbl8gPSAiIjsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBzdHlsZSA9IHNvYXBPcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICAgICAgaWYgKHN0eWxlICE9IG51bGwpCi0gICAgICAgICAgaXNEb2N1bWVudFN0eWxlXyA9IHN0eWxlLmVxdWFscygiZG9jdW1lbnQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpO2kuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWkubmV4dCgpOwotICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgIHsKLSAgICAgICAgc29hcEJvZHkgPSAoU09BUEJvZHkpZTsKLSAgICAgICAgaXNVc2VMaXRlcmFsXyA9ICJsaXRlcmFsIi5lcXVhbHMoc29hcEJvZHkuZ2V0VXNlKCkpOwotICAgICAgICBpZiAoIWlzVXNlTGl0ZXJhbF8pCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBFbmNvZGVkLgotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IHNvYXBCb2R5LmdldEVuY29kaW5nU3R5bGVzKCkuaXRlcmF0b3IoKTtqLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgZW5jb2RpbmdTdHlsZV8gPSAoU3RyaW5nKWoubmV4dCgpOwotICAgICAgICAgICAgZW5jb2RpbmdOYW1lc3BhY2VfID0gc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFdTRExPcGVyYXRpb25FbGVtZW50KFN0cmluZyBuYW1lLFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCxPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgc3VwZXIobmFtZSwgYmluZGluZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgLy8gU2V0IHRoZSBkZWZhdWx0IG9wZXJhdGlvbiB0eXBlIHRvIGJlIFNPQVAuCi0gICAgc2V0T3BlcmF0aW9uKGJpbmRpbmdFbGVtZW50LG9wZXJhdGlvbik7Ci0gIH0KLQotICBwcml2YXRlIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbihXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQpIHsKLQkgIFdTRExTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpIGJpbmRpbmdFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KSBzZXJ2aWNlRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICByZXR1cm4gd3NkbEVsZW1lbnQuZ2V0RGVmaW5pdGlvbigpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0TWVzc2FnZUNvbnRleHQoV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50KSB7Ci0JICBtZXNzYWdlQ29udGV4dCA9IG5ldyBNZXNzYWdlQ29udGV4dCgpOwotCSAgbWVzc2FnZUNvbnRleHQuc2V0RGVmaW5pdGlvbihnZXREZWZpbml0aW9uKGJpbmRpbmdFbGVtZW50KSk7Ci0JICBtZXNzYWdlQ29udGV4dC5zZXRCaW5kaW5nT3BlcmF0aW9uKGdldEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ0VsZW1lbnQpKTsKLQkgIG1lc3NhZ2VDb250ZXh0LnNldEJpbmRpbmdQcm90b2NvbChiaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0JICBtZXNzYWdlQ29udGV4dC5zZXREb2N1bWVudFN0eWxlKGlzRG9jdW1lbnRTdHlsZV8pOwotICB9Ci0gIAotICBwdWJsaWMgTWVzc2FnZUNvbnRleHQgZ2V0TWVzc2FnZUNvbnRleHQoKSB7Ci0JICByZXR1cm4gbWVzc2FnZUNvbnRleHQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoU09BUEJpbmRpbmcgc29hcEJpbmRpbmcpIHsKLQkgIAkgIAotCSAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHNvYXBCaW5kaW5nLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JICBTdHJpbmcgdHJhbnNwb3J0VVJJID0gc29hcEJpbmRpbmcuZ2V0VHJhbnNwb3J0VVJJKCk7Ci0JICAJICAKLQkgIHNvYXBUcmFuc3BvcnRQcm92aWRlciA9IFRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKQotCSAgCS5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIobmFtZXNwYWNlVVJJLCB0cmFuc3BvcnRVUkkpOwotICB9Ci0gIAotICBwdWJsaWMgSVNPQVBUcmFuc3BvcnRQcm92aWRlciBnZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKSB7Ci0JICByZXR1cm4gc29hcFRyYW5zcG9ydFByb3ZpZGVyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRPcGVyYXRpb24oV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50LE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKLSAgICBvcGVyYXRpb25fID0gb3BlcmF0aW9uOwotICAgIHNldERvY3VtZW50YXRpb24ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIGZyYWdDb250cm9sbGVyXyA9IG51bGw7Ci0gICAgd3NkbFBhcnRzVG9Yc2RUeXBlTWFwcGVyXyA9IG51bGw7Ci0gICAgb3BlcmF0aW9uVHlwZV8gPSBiaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nVHlwZSgpOwotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZV8pCi0gICAgewotICAgICAgY2FzZSBCaW5kaW5nVHlwZXMuU09BUDoKLSAgICAgICAgZ2F0aGVyU29hcEluZm9ybWF0aW9uKGJpbmRpbmdFbGVtZW50LChTT0FQQmluZGluZyliaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBzZXRNZXNzYWdlQ29udGV4dChiaW5kaW5nRWxlbWVudCk7Ci0gICAgICAgIHNldFNPQVBUcmFuc3BvcnRQcm92aWRlcigoU09BUEJpbmRpbmcpIGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGhlYWRlckNhY2hlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgY2FzZSBCaW5kaW5nVHlwZXMuSFRUUF9HRVQ6Ci0gICAgICBjYXNlIEJpbmRpbmdUeXBlcy5IVFRQX1BPU1Q6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgT3BlcmF0aW9uIGdldE9wZXJhdGlvbigpIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uIGdldEJpbmRpbmdPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldEJpbmRpbmdPcGVyYXRpb24oKFdTRExCaW5kaW5nRWxlbWVudClnZXRQYXJlbnRFbGVtZW50KCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBCaW5kaW5nT3BlcmF0aW9uIGdldEJpbmRpbmdPcGVyYXRpb24oV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50KQotICB7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gYmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZygpOwotICAgIFN0cmluZyBvcGVyYXRpb25JbnB1dE5hbWUgPSBudWxsOwotICAgIFN0cmluZyBvcGVyYXRpb25PdXRwdXROYW1lID0gbnVsbDsKLSAgICBJbnB1dCBvcGVyYXRpb25JbnB1dCA9IG9wZXJhdGlvbl8uZ2V0SW5wdXQoKTsKLSAgICBPdXRwdXQgb3BlcmF0aW9uT3V0cHV0ID0gb3BlcmF0aW9uXy5nZXRPdXRwdXQoKTsKLSAgICBpZiAob3BlcmF0aW9uSW5wdXQgIT0gbnVsbCkKLSAgICAgIG9wZXJhdGlvbklucHV0TmFtZSA9IG9wZXJhdGlvbklucHV0LmdldE5hbWUoKTsKLSAgICBpZiAob3BlcmF0aW9uT3V0cHV0ICE9IG51bGwpCi0gICAgICBvcGVyYXRpb25PdXRwdXROYW1lID0gb3BlcmF0aW9uT3V0cHV0LmdldE5hbWUoKTsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uXy5nZXROYW1lKCksb3BlcmF0aW9uSW5wdXROYW1lLG9wZXJhdGlvbk91dHB1dE5hbWUpOwotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICBiaW5kaW5nT3BlcmF0aW9uID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbl8uZ2V0TmFtZSgpLG51bGwsbnVsbCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbGlzdCBvZiBpbnB1dCBoZWFkZXJzLgotICAgKiAKLSAgICogQHJldHVybiBBIExpc3QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNPQVBIZWFkZXJzKCkgewotCSAgcmV0dXJuIGdldFNPQVBIZWFkZXJzKHRydWUpOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIFJldHVybiBhIGxpc3Qgb2YgaGVhZGVycy4KLSAgICogCi0gICAqIEBwYXJhbSBpc0lucHV0IElmIHRydWUsIHJldHVybnMgdGhlIGlucHV0IGhlYWRlcnMuICBJZiBmYWxzZSwgcmV0dXJucyB0aGUgb3V0cHV0IGhlYWRlcnMuCi0gICAqIEByZXR1cm4gQSBMaXN0Ci0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTT0FQSGVhZGVycyhib29sZWFuIGlzSW5wdXQpIHsKLQkgIExpc3QgaGVhZGVycyA9IG5ldyBWZWN0b3IoKTsKLQkKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oKTsKLQkgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gaXNJbnB1dCA/Ci0JCQliaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpIDogCi0JCQliaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsJICAJICAKLQkgIAotCSAgZm9yIChJdGVyYXRvciBpdCA9IGV4dGVuc2liaWxpdHlFbGVtZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7Ci0JICAgICAgCi0JCSAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpOwotCSAgICAgIAotCSAgICAgIGlmIChlIGluc3RhbmNlb2YgU09BUEhlYWRlciAmJiAhaGVhZGVycy5jb250YWlucyhlKSkJICAgIAkgCi0gICAgCQkgIGhlYWRlcnMuYWRkKGUpOwotCSAgfSAgIAotCSAgCi0JICByZXR1cm4gaGVhZGVyczsKLSAgfSAgCi0gIAotICBwdWJsaWMgTGlzdCBnZXRPcmRlcmVkQm9keVBhcnRzKCkKLSAgewotICAgIExpc3QgcGFydHMgPSBuZXcgVmVjdG9yKG9wZXJhdGlvbl8uZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0T3JkZXJlZFBhcnRzKG9wZXJhdGlvbl8uZ2V0UGFyYW1ldGVyT3JkZXJpbmcoKSkpOwotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdC5uZXh0KCk7Ci0gICAgICBpZiAoZSBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgewotICAgICAgICBTT0FQQm9keSBzb2FwQm9keSA9IChTT0FQQm9keSllOwotICAgICAgICBMaXN0IGJvZHlQYXJ0cyA9IHNvYXBCb2R5LmdldFBhcnRzKCk7Ci0gICAgICAgIGlmIChib2R5UGFydHMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpcGFydHMuZ2V0KGkpOwotICAgICAgICAgICAgaWYgKCFib2R5UGFydHMuY29udGFpbnMocGFydCkgJiYgIWJvZHlQYXJ0cy5jb250YWlucyhwYXJ0LmdldE5hbWUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHBhcnRzLnJlbW92ZShpKTsKLSAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHBhcnRzOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpIHsKLSAgICBpZiAoZnJhZ0NvbnRyb2xsZXJfID09IG51bGwpIHsKLSAgICAgIGZyYWdDb250cm9sbGVyXyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpOwotICAgICAgZnJhZ0NvbnRyb2xsZXJfLnNldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcih3c2RsUGFydHNUb1hzZFR5cGVNYXBwZXJfKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdDb250cm9sbGVyXzsKLSAgfQotCi0gIHByaXZhdGUgWFNETmFtZWRDb21wb25lbnQgZ2V0U2NoZW1hKFBhcnQgcGFydCwgU3RyaW5nIGlkKSB7Ci0gICAgaWYgKHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl8gPT0gbnVsbCkgewotICAgICAgd3NkbFBhcnRzVG9Yc2RUeXBlTWFwcGVyXyA9IG5ldyBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKTsKLSAgICAgIFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCA9IChXU0RMQmluZGluZ0VsZW1lbnQpZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgV1NETFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFdTRExTZXJ2aWNlRWxlbWVudCliaW5kaW5nRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClzZXJ2aWNlRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICB3c2RsUGFydHNUb1hzZFR5cGVNYXBwZXJfLmFkZFNjaGVtYXMod3NkbEVsZW1lbnQuZ2V0U2NoZW1hTGlzdCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl8uZ2V0WFNEVHlwZShwYXJ0LCBpZCk7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEhlYWRlckZyYWdtZW50KFNPQVBIZWFkZXIgc29hcEhlYWRlcikgewotCXJldHVybiBnZXRIZWFkZXJGcmFnbWVudChzb2FwSGVhZGVyLCB0cnVlKTsKLSAgfQotICAKLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRIZWFkZXJGcmFnbWVudChTT0FQSGVhZGVyIHNvYXBIZWFkZXIsIGJvb2xlYW4gaXNJbnB1dCkgewotCVN0cmluZ0J1ZmZlciBpZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQlQYXJ0IHBhcnQgPSBzb2FwSGVhZGVyLmdldEVQYXJ0KCk7Ci0JaWYgKGlzSW5wdXQpCi0JICBpZC5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuSU5QVVRfSUQpLmFwcGVuZChzb2FwSGVhZGVyLmdldE1lc3NhZ2UoKSkuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlBBUlRfVE9LRU4pOwotCWVsc2UKLQkgIGlkLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5PVVRQVVRfSUQpLmFwcGVuZChzb2FwSGVhZGVyLmdldE1lc3NhZ2UoKSkuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlBBUlRfVE9LRU4pOwotCQotCXJldHVybiBnZXRGcmFnbWVudChwYXJ0LCBpZCwgdHJ1ZSwgaXNJbnB1dCk7IC8vIG9ubHkgd3JhcCBpbnB1dCBoZWFkZXIgZnJhZ21lbnRzCi0gIH0KLSAgCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoUGFydCBwYXJ0KSB7Ci0gICAgcmV0dXJuIGdldEZyYWdtZW50KHBhcnQsIHRydWUpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChQYXJ0IHBhcnQsIGJvb2xlYW4gaXNJbnB1dCkgewotICAgIFN0cmluZ0J1ZmZlciBpZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBpZiAoaXNJbnB1dCkKLSAgICAgIGlkLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5JTlBVVF9JRCk7Ci0gICAgZWxzZQotICAgICAgaWQuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLk9VVFBVVF9JRCk7Ci0KLQlyZXR1cm4gZ2V0RnJhZ21lbnQocGFydCwgaWQsIGZhbHNlLCBmYWxzZSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFBhcnQgcGFydCwgU3RyaW5nQnVmZmVyIGlkLCBib29sZWFuIGlzSGVhZGVyLCBib29sZWFuIHVzZVNPQVBIZWFkZXJXcmFwcGVyKSB7Ci0gICAgU3RyaW5nIHBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0gICAgaWQuYXBwZW5kKHBhcnROYW1lKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBjb25maWcuc2V0SXNXU0RMUGFydCh0cnVlKTsKLSAgICBjb25maWcuc2V0V1NETFBhcnROYW1lKHBhcnROYW1lKTsKLSAgICBjb25maWcuc2V0WFNEQ29tcG9uZW50KGdldFNjaGVtYShwYXJ0LCBpZC50b1N0cmluZygpKSk7Ci0gICAgaWYgKGlzRG9jdW1lbnRTdHlsZSgpIHx8IGlzSGVhZGVyKQotICAgICAgY29uZmlnLnNldFN0eWxlKEZyYWdtZW50Q29uc3RhbnRzLlNUWUxFX0RPQ1VNRU5UKTsKLSAgICBlbHNlCi0gICAgICBjb25maWcuc2V0U3R5bGUoRnJhZ21lbnRDb25zdGFudHMuU1RZTEVfUlBDKTsKLSAgICBpZiAob3BlcmF0aW9uVHlwZV8gPT0gQmluZGluZ1R5cGVzLlNPQVApCi0gICAgewotICAgICAgaWYgKCFpc1VzZUxpdGVyYWxfKQotICAgICAgICBjb25maWcuc2V0UGFydEVuY29kaW5nKEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX1NPQVApOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBjb25maWcuc2V0UGFydEVuY29kaW5nKEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX1VSTCk7Ci0gICAgSVhTREZyYWdtZW50IGZyYWdtZW50ID0gZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLnRvU3RyaW5nKCksIHBhcnQuZ2V0TmFtZSgpKTsKLSAgICAgCi0gICAgLy8gbGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYSBjb3JyZXNwb25kaW5nIHdyYXBwZXIgZm9yIHRoaXMgZnJhZ21lbnQKLSAgICBpZiAodXNlU09BUEhlYWRlcldyYXBwZXIgJiYgIShmcmFnbWVudCBpbnN0YW5jZW9mIFNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQpKSB7Ci0gICAgCVNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQgd3JhcHBlciA9IChTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50KSBoZWFkZXJDYWNoZS5nZXQoZnJhZ21lbnQuZ2V0SUQoKSk7Ci0gICAgCQotICAgIAkvLyBubyB3cmFwcGVyLCBsZXQncyB3cmFwIGl0Ci0gICAgCWlmICh3cmFwcGVyID09IG51bGwpIHsKLSAgICAJCXdyYXBwZXIgPSBuZXcgU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudChmcmFnbWVudCk7ICAgIAkJCi0gICAgCQloZWFkZXJDYWNoZS5wdXQoZnJhZ21lbnQuZ2V0SUQoKSwgd3JhcHBlcik7Ci0gICAgCQkKLSAgICAJCS8vIGFsc28gcHV0IHRoaXMgd3JhcHBlciBmcmFnbWVudCBpbiB0aGUgbWFzdGVyIGNhY2hlCi0gICAgCQlnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmFkZFRvQ2FjaGUod3JhcHBlci5nZXRJRCgpLCB3cmFwcGVyKTsKLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIHdyYXBwZXI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmcmFnbWVudDsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnRCeUlEKFN0cmluZyBpZCkgewotICAgIHJldHVybiBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldENhY2hlZEZyYWdtZW50KGlkKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUFsbEZyYWdtZW50KCkgewotICAgIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZW1wdHlDYWNoZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNEb2N1bWVudFN0eWxlKCkKLSAgewotICAgIHJldHVybiBpc0RvY3VtZW50U3R5bGVfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTb2FwQWN0aW9uKCkKLSAgewotICAgIHJldHVybiBzb2FwQWN0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzVXNlTGl0ZXJhbCgpCi0gIHsKLSAgICByZXR1cm4gaXNVc2VMaXRlcmFsXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmdTdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gZW5jb2RpbmdTdHlsZV87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nTmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiBlbmNvZGluZ05hbWVzcGFjZV87Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE9wZXJhdGlvblR5cGUoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvblR5cGVfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5YWQ4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBXU0RMQ29tbW9uRWxlbWVudAotewotCi0gIHByaXZhdGUgU2VydmljZSBzZXJ2aWNlXzsKLQotICBwdWJsaWMgV1NETFNlcnZpY2VFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHNldFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgc2VydmljZV8gPSBzZXJ2aWNlOwotICAgIHNldERvY3VtZW50YXRpb24oc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGdldFNlcnZpY2UoKSB7Ci0gICAgcmV0dXJuIHNlcnZpY2VfOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3NMb2NhdGlvbihCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBNYXAgcG9ydHMgPSBzZXJ2aWNlXy5nZXRQb3J0cygpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7aS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KWkubmV4dCgpOwotICAgICAgaWYgKHBvcnQuZ2V0QmluZGluZygpLmdldFFOYW1lKCkuZXF1YWxzKGJpbmRpbmcuZ2V0UU5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBqID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7ai5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClqLm5leHQoKTsKLSAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKWVsZW1lbnQ7Ci0gICAgICAgICAgICByZXR1cm4gc29hcEFkZHJlc3MuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEhUVFBBZGRyZXNzIGh0dHBBZGRyZXNzID0gKEhUVFBBZGRyZXNzKWVsZW1lbnQ7Ci0gICAgICAgICAgICByZXR1cm4gaHR0cEFkZHJlc3MuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBidWlsZE1vZGVsKCkgewotICAgIGlmIChzZXJ2aWNlXyAhPSBudWxsKSB7Ci0gICAgICBNYXAgcG9ydHMgPSBzZXJ2aWNlXy5nZXRQb3J0cygpOwotICAgICAgTWFwIGJpbmRpbmdzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpO2l0Lmhhc05leHQoKTspIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaXQubmV4dCgpOwotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEJpbmRpbmcoKTsKLSAgICAgICAgaWYgKGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSA9PSBudWxsKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYmluZGluZ3MucHV0KGJpbmRpbmcuZ2V0UU5hbWUoKSwgYmluZGluZyk7Ci0gICAgICB9Ci0gICAgICBXU0RMQmluZGluZ0VsZW1lbnRbXSB3c2RsQmluZGluZ0VsZW1lbnRzID0gbmV3IFdTRExCaW5kaW5nRWxlbWVudFtnZXROdW1iZXJPZkVsZW1lbnRzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9CSU5ESU5HKV07Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsQmluZGluZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHdzZGxCaW5kaW5nRWxlbWVudHNbaV0gPSAoV1NETEJpbmRpbmdFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd3NkbEJpbmRpbmdFbGVtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICBRTmFtZSBxbmFtZSA9IHdzZGxCaW5kaW5nRWxlbWVudHNbal0uZ2V0QmluZGluZygpLmdldFFOYW1lKCk7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWJpbmRpbmdzLmdldChxbmFtZSk7Ci0gICAgICAgIGlmIChiaW5kaW5nICE9IG51bGwpIHsKLSAgICAgICAgICBiaW5kaW5ncy5yZW1vdmUocW5hbWUpOwotICAgICAgICAgIHdzZGxCaW5kaW5nRWxlbWVudHNbal0uc2V0QmluZGluZyhiaW5kaW5nKTsKLSAgICAgICAgICB3c2RsQmluZGluZ0VsZW1lbnRzW2pdLmJ1aWxkTW9kZWwoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgZGlzY29ubmVjdCh3c2RsQmluZGluZ0VsZW1lbnRzW2pdLCBXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfQklORElORyk7Ci0gICAgICB9Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYmluZGluZ3MudmFsdWVzKCkuaXRlcmF0b3IoKTtpdC5oYXNOZXh0KCk7KSB7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWl0Lm5leHQoKTsKLSAgICAgICAgV1NETEJpbmRpbmdFbGVtZW50IHdzZGxCaW5kaW5nRWxlbWVudCA9IG5ldyBXU0RMQmluZGluZ0VsZW1lbnQoYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCBnZXRNb2RlbCgpLCBiaW5kaW5nKTsKLSAgICAgICAgY29ubmVjdCh3c2RsQmluZGluZ0VsZW1lbnQsV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgd3NkbEJpbmRpbmdFbGVtZW50LmJ1aWxkTW9kZWwoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRlMjgwYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGcmFnbWVudCB7Ci0gIHB1YmxpYyB2b2lkIHNldElEKFN0cmluZyBpZCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0SUQoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBTdHJpbmdbXSBwYXJhbXMpOwotICAgIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFZlY3RvciBwYXJhbXMpOwotICBwdWJsaWMgU3RyaW5nW10gZ2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCk7Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KTsKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KTsKLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKTsKLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVNPQVBFbmNBcnJheUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVNPQVBFbmNBcnJheUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZmE2ZGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lTT0FQRW5jQXJyYXlGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElTT0FQRW5jQXJyYXlGcmFnbWVudCBleHRlbmRzIElYU0RHcm91cFNlcUZyYWdtZW50IHsKLSAgcHVibGljIFN0cmluZyBjcmVhdGVTT0FQRW5jQXJyYXlJbnN0YW5jZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NjUwY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudCBleHRlbmRzIElYU0REZWxlZ2F0aW9uRnJhZ21lbnQKLXsKLSAgcHVibGljIHZvaWQgc2V0VVJJUmVmZXJlbmNlcyhIYXNodGFibGUgdXJpUmVmZXJlbmNlcyk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREF0dHJpYnV0ZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREF0dHJpYnV0ZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZjIzY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RBdHRyaWJ1dGVGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci9zcmMvY29tL2libS9ldG9vbHMvd2Vic2VydmljZS9leHBsb3Jlci93c2RsL2ZyYWdtZW50L0lYU0RFbGVtZW50RnJhZ21lbnQuamF2YSwgd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIsIDIwMDMxMjMxYSAxCi0qIFZlcnNpb24gMS4xIDAzLzAyLzI4IDE1OjI2OjA1Ci0qLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNEQXR0cmlidXRlRnJhZ21lbnQgZXh0ZW5kcyBJWFNERGVsZWdhdGlvbkZyYWdtZW50IHsKLSAgCi0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEQ29tcGxleEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRENvbXBsZXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjFmZmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEQ29tcGxleEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTRENvbXBsZXhGcmFnbWVudCBleHRlbmRzIElYU0RNYXBGcmFnbWVudCB7Ci0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlQ29tcGxleEluc3RhbmNlKCk7Ci0gIHB1YmxpYyBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERGVsZWdhdGlvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRERlbGVnYXRpb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzU1MzU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERGVsZWdhdGlvbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTRERlbGVnYXRpb25GcmFnbWVudCBleHRlbmRzIElYU0RGcmFnbWVudCB7Ci0gIHB1YmxpYyB2b2lkIHNldFhTRERlbGVnYXRpb25GcmFnbWVudChJWFNERnJhZ21lbnQgeHNkRnJhZ21lbnQpOwotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RFbGVtZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERWxlbWVudEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4Y2FlN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RFbGVtZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNERWxlbWVudEZyYWdtZW50IGV4dGVuZHMgSVhTRERlbGVnYXRpb25GcmFnbWVudCB7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE5JTCA9ICJuaWxWYWx1ZSI7ICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTklMX1ZBTFVFID0gIm5pbCI7IAotICAKLSAgcHVibGljIGludCBnZXRNaW5PY2N1cnMoKTsKLSAgcHVibGljIGludCBnZXRNYXhPY2N1cnMoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNOaWxsYWJsZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldE5pbElEKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzTmlsKCk7Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhNTU1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotcHVibGljIGludGVyZmFjZSBJWFNERnJhZ21lbnQgZXh0ZW5kcyBJRnJhZ21lbnQgewotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpOwotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmKTsKLSAgcHVibGljIFhTRFR5cGVEZWZpbml0aW9uIGdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gIHB1YmxpYyBFbGVtZW50IHNldEF0dHJpYnV0ZXNPbkluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCxTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyBib29sZWFuIHNldEF0dHJpYnV0ZVBhcmFtc0Zyb21JbnN0YW5jZURvY3VtZW50cyAoTm9kZSBhdHRyaWJ1dGUpOwotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYyk7Ci0KLSAgcHVibGljIFN0cmluZyBnZW5JRCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cEFsbEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwQWxsRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJhZWU1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwQWxsRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNER3JvdXBBbGxGcmFnbWVudCBleHRlbmRzIElYU0RHcm91cEZyYWdtZW50IHsKLSAgcHVibGljIFN0cmluZyBnZXRHcm91cEFsbEluc3RhbmNlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBDaG9pY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDEwOTI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBDaG9pY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RHcm91cENob2ljZUZyYWdtZW50IGV4dGVuZHMgSVhTREdyb3VwRnJhZ21lbnQgewotICBwdWJsaWMgWFNEUGFydGljbGVbXSBnZXRDaG9pY2VzKCk7Ci0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlR3JvdXBDaG9pY2VJbnN0YW5jZShpbnQgY2hvaWNlSW5kZXgpOwotICBwdWJsaWMgaW50IGdldENob2ljZUluZGV4KFN0cmluZyBncm91cElEKTsKLSAgcHVibGljIHZvaWQgc2V0Q2hvaWNlSW5kZXgoU3RyaW5nIGdyb3VwSUQsIGludCBjaG9pY2VJbmRleCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDQ0ODM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTREdyb3VwRnJhZ21lbnQgZXh0ZW5kcyBJWFNETWFwRnJhZ21lbnQgewotICBwdWJsaWMgdm9pZCBzZXRYU0RNb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCk7Ci0gIHB1YmxpYyBYU0RNb2RlbEdyb3VwIGdldFhTRE1vZGVsR3JvdXAoKTsKLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0R3JvdXBJRHMoKTsKLSAgcHVibGljIFN0cmluZ1tdIGdldEdyb3VwTWVtYmVySURzKFN0cmluZyBncm91cElEKTsKLSAgcHVibGljIElYU0RGcmFnbWVudFtdIGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKFN0cmluZyBncm91cElEKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBTZXFGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cFNlcUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNThmYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cFNlcUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTREdyb3VwU2VxRnJhZ21lbnQgZXh0ZW5kcyBJWFNER3JvdXBGcmFnbWVudCB7Ci0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RNYXBGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RNYXBGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTFlNDAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNETWFwRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNETWFwRnJhZ21lbnQgZXh0ZW5kcyBJWFNERnJhZ21lbnQgewotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKTsKLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCk7Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpOwotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRGcmFnbWVudHNPcmRlcigpOwotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFN0cmluZyBpZCk7Ci0gIHB1YmxpYyBJWFNERnJhZ21lbnRbXSBnZXRGcmFnbWVudHMoU3RyaW5nW10gaWRzKTsKLSAgcHVibGljIElYU0RGcmFnbWVudFtdIGdldEFsbEZyYWdtZW50cygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVBdG9taWNGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVBdG9taWNGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjU4ZDVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgZXh0ZW5kcyBJWFNERnJhZ21lbnQgewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVMaXN0RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlTGlzdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYjM4MDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVMaXN0RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNEU2ltcGxlTGlzdEZyYWdtZW50IGV4dGVuZHMgSVhTRE1hcEZyYWdtZW50IHsKLSAgcHVibGljIFN0cmluZyBjcmVhdGVMaXN0SW5zdGFuY2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEU2ltcGxlVW5pb25GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVVbmlvbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZGNhZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVVbmlvbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgZXh0ZW5kcyBJWFNETWFwRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlVHlwZURlZmluaXRpb25bXSBnZXRNZW1iZXJUeXBlRGVmaW5pdGlvbnMoKTsKLSAgcHVibGljIFN0cmluZyBjcmVhdGVVbmlvbkluc3RhbmNlKGludCBtZW1iZXJUeXBlSW5kZXgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREF0dHJpYnV0ZVVzZVRvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZTEwZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREF0dHJpYnV0ZVVzZVRvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKgotKiA8Y29weXJpZ2h0PgotKgotKiBMaWNlbnNlZCBNYXRlcmlhbCAtIFByb3BlcnR5IG9mIElCTQotKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAyIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZQotKiByZXN0cmljdGVkIGJ5IEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4KLSoKLSogPC9jb3B5cmlnaHQ+Ci0qCi0qIEZpbGUgcGx1Z2lucy9jb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyL3dzZXhwbG9yZXIvc3JjL2NvbS9pYm0vZXRvb2xzL3dlYnNlcnZpY2UvZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyLmphdmEsIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yLCAyMDAzMTIzMWEgMgotKiBWZXJzaW9uIDEuMiAwMy8wNi8wNSAxNDoxNzo0NAotKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREF0dHJpYnV0ZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBYU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyIGV4dGVuZHMgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHB1YmxpYyBYU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCB3c2RsVG9YU0RNYXBwZXIpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgIAlYU0RBdHRyaWJ1dGVVc2UgYXR0cmlidXRlID0gKFhTREF0dHJpYnV0ZVVzZSljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaWYgKGF0dHJpYnV0ZSAhPSBudWxsICYmIGF0dHJpYnV0ZS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpICE9IG51bGwpIHsKLSAgIAkgIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIHJlc29sdmVkQXR0cmlidXRlID0gcmVzb2x2ZVhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKGF0dHJpYnV0ZS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpKTsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWYgPSBnZXRYU0RUeXBlRGVmaW5pdGlvbihyZXNvbHZlZEF0dHJpYnV0ZSk7Ci0gICAgICBJWFNEQXR0cmlidXRlRnJhZ21lbnQgYXR0cmlidXRlRnJhZyA9IG5ldyBYU0RBdHRyaWJ1dGVGcmFnbWVudChpZCwgcmVzb2x2ZWRBdHRyaWJ1dGUuZ2V0TmFtZSgpLCBjb25maWcpOwotICAgICAgYXR0cmlidXRlRnJhZy5zZXRYU0RUeXBlRGVmaW5pdGlvbih0eXBlRGVmKTsKLSAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGF0dHJpYnV0ZVR5cGVDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgIGF0dHJpYnV0ZVR5cGVDb25maWcuc2V0WFNEQ29tcG9uZW50KHR5cGVEZWYpOwotICAgICAgYXR0cmlidXRlVHlwZUNvbmZpZy5zZXRTdHlsZShjb25maWcuZ2V0U3R5bGUoKSk7Ci0gICAgICBhdHRyaWJ1dGVUeXBlQ29uZmlnLnNldFBhcnRFbmNvZGluZyhjb25maWcuZ2V0UGFydEVuY29kaW5nKCkpOwotICAgICAgYXR0cmlidXRlVHlwZUNvbmZpZy5zZXRXU0RMUGFydE5hbWUoY29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICAgIElYU0RGcmFnbWVudCB4c2RGcmFnbWVudCA9IGdldENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudChhdHRyaWJ1dGVUeXBlQ29uZmlnLCBhdHRyaWJ1dGVGcmFnLmdlbklEKCksIHJlc29sdmVkQXR0cmlidXRlLmdldE5hbWUoKSk7Ci0gICAgICBhdHRyaWJ1dGVGcmFnLnNldFhTRERlbGVnYXRpb25GcmFnbWVudCh4c2RGcmFnbWVudCk7Ci0gICAgICByZXR1cm4gYXR0cmlidXRlRnJhZzsKLSAgICB9Ci0gICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gcmVzb2x2ZVhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJpYnV0ZSkgewotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgaWYgKGF0dHJpYnV0ZS5nZXRSZXNvbHZlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiByZXNvbHZlZEF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5nZXRSZXNvbHZlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCk7Ci0gICAgICBpZiAoIWlzQ29tcG9uZW50UmVzb2x2YWJsZShyZXNvbHZlZEF0dHJpYnV0ZSkpCi0gICAgICB7Ci0gICAgICAgIFhTRENvbXBvbmVudCByZXNvbHZlZENvbXBvbmVudCA9IGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpLnJlc29sdmVYU0ROYW1lZENvbXBvbmVudChyZXNvbHZlZEF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmIChyZXNvbHZlZENvbXBvbmVudCAhPSBudWxsICYmIChyZXNvbHZlZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKSkKLSAgICAgICAgICByZXNvbHZlZEF0dHJpYnV0ZSA9IChYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbilyZXNvbHZlZENvbXBvbmVudDsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXNvbHZlZEF0dHJpYnV0ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGF0dHJpYnV0ZTsKLSAgfQotCi0gIHByaXZhdGUgWFNEVHlwZURlZmluaXRpb24gZ2V0WFNEVHlwZURlZmluaXRpb24oWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cmlidXRlKSB7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoYXR0cmlidXRlLmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHJldHVybiBhdHRyaWJ1dGUuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICByZXR1cm4gYXR0cmlidXRlLmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkODlhMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RDb21wbGV4Rml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RDb21wbGV4UmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5YU0RUeXBlRGVmaW5pdGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbnRlbnRUeXBlQ2F0ZWdvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIgZXh0ZW5kcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHVibGljIFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaW50IGNhdGVnb3J5ID0gY29tcGxleFR5cGUuZ2V0Q29udGVudFR5cGVDYXRlZ29yeSgpLmdldFZhbHVlKCk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlICE9IG51bGwgJiYgY29tcGxleFR5cGUuaXNNaXhlZCgpKQotICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCAhPSBudWxsKQotICAgICAgcmV0dXJuIGdldFhTRENvbXBsZXhGcmFnbWVudChjYXRlZ29yeSxjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2V0WFNERW1wdHlGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRENvbXBsZXhGcmFnbWVudChpbnQgY2F0ZWdvcnksWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgaW50IG1pbk9jY3VycyA9IGNvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLSAgICBpbnQgbWF4T2NjdXJzID0gY29uZmlnLmdldE1heE9jY3VycygpOwotICAgIGlmIChtaW5PY2N1cnMgPT0gbWF4T2NjdXJzKQotICAgICAgaWYoY2F0ZWdvcnkgPT0gWFNEQ29udGVudFR5cGVDYXRlZ29yeS5TSU1QTEUpewotICAgICAgCXJldHVybiBuZXcgWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UJCi0gICAgICAJcmV0dXJuIG5ldyBYU0RDb21wbGV4Rml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgICBlbHNlIAotICAgIAlpZihjYXRlZ29yeSA9PSBYU0RDb250ZW50VHlwZUNhdGVnb3J5LlNJTVBMRSkKLSAgICAJICByZXR1cm4gbmV3IFhTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICAgIAllbHNlCi0gICAgICAgICAgcmV0dXJuIG5ldyBYU0RDb21wbGV4UmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0ZDZhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MDQgICAxODEwNjUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRSBkb2VzIG5vdCBoYW5kbGUgdHlwZXMgcmVmZXJlbmNlZCBhY3Jvc3MgaW5saW5lIHNjaGVtYXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREVsZW1lbnRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlciBleHRlbmRzIFhTRFRvRnJhZ21lbnRNYXBwZXIgewotICBwdWJsaWMgWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7Ci0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzb2x2ZWRFbGVtZW50ID0gcmVzb2x2ZVhTREVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWYgPSByZXNvbHZlWFNEVHlwZURlZmluaXRpb24oZ2V0WFNEVHlwZURlZmluaXRpb24ocmVzb2x2ZWRFbGVtZW50KSk7Ci0gICAgICBpZiAodHlwZURlZiAhPSBudWxsKSB7Ci0gICAgICAgIGludCBtaW5PY2N1cnMgPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01JTl9PQ0NVUlM7Ci0gICAgICAgIGludCBtYXhPY2N1cnMgPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01BWF9PQ0NVUlM7Ci0gICAgICAgIFhTRENvbmNyZXRlQ29tcG9uZW50IGNvbmNyZXRlQ29tcG9uZW50ID0gZWxlbWVudC5nZXRDb250YWluZXIoKTsKLSAgICAgICAgaWYgKGNvbmNyZXRlQ29tcG9uZW50ICE9IG51bGwgJiYgY29uY3JldGVDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotICAgICAgICAgIFhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKWNvbmNyZXRlQ29tcG9uZW50OwotICAgICAgICAgIGlmIChwYXJ0aWNsZS5pc1NldE1pbk9jY3VycygpKQotICAgICAgICAgICAgbWluT2NjdXJzID0gcGFydGljbGUuZ2V0TWluT2NjdXJzKCk7Ci0gICAgICAgICAgaWYgKHBhcnRpY2xlLmlzU2V0TWF4T2NjdXJzKCkpCi0gICAgICAgICAgICBtYXhPY2N1cnMgPSBwYXJ0aWNsZS5nZXRNYXhPY2N1cnMoKTsKLSAgICAgICAgfQotICAgICAgICBjb25maWcuc2V0TWluT2NjdXJzKG1pbk9jY3Vycyk7Ci0gICAgICAgIGNvbmZpZy5zZXRNYXhPY2N1cnMobWF4T2NjdXJzKTsKLSAgICAgICAgSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZyA9IG5ldyBYU0RFbGVtZW50RnJhZ21lbnQoaWQsIHJlc29sdmVkRWxlbWVudC5nZXROYW1lKCksIGNvbmZpZyk7Ci0gICAgICAgIGVsZW1lbnRGcmFnLnNldFhTRFR5cGVEZWZpbml0aW9uKHR5cGVEZWYpOwotICAgICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBlbGVtZW50VHlwZUNvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgICBlbGVtZW50VHlwZUNvbmZpZy5zZXRYU0RDb21wb25lbnQodHlwZURlZik7Ci0gICAgICAgIGVsZW1lbnRUeXBlQ29uZmlnLnNldE1pbk9jY3VycyhtaW5PY2N1cnMpOwotICAgICAgICBlbGVtZW50VHlwZUNvbmZpZy5zZXRNYXhPY2N1cnMobWF4T2NjdXJzKTsKLSAgICAgICAgZWxlbWVudFR5cGVDb25maWcuc2V0U3R5bGUoY29uZmlnLmdldFN0eWxlKCkpOwotICAgICAgICBlbGVtZW50VHlwZUNvbmZpZy5zZXRQYXJ0RW5jb2RpbmcoY29uZmlnLmdldFBhcnRFbmNvZGluZygpKTsKLSAgICAgICAgZWxlbWVudFR5cGVDb25maWcuc2V0V1NETFBhcnROYW1lKGNvbmZpZy5nZXRXU0RMUGFydE5hbWUoKSk7Ci0gICAgICAgIElYU0RGcmFnbWVudCB4c2RGcmFnbWVudCA9IGdldENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudChlbGVtZW50VHlwZUNvbmZpZywgZWxlbWVudEZyYWcuZ2VuSUQoKSwgcmVzb2x2ZWRFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgIGVsZW1lbnRGcmFnLnNldFhTRERlbGVnYXRpb25GcmFnbWVudCh4c2RGcmFnbWVudCk7Ci0gICAgICAgIHJldHVybiBlbGVtZW50RnJhZzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc29sdmVYU0RFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpIHsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmIChlbGVtZW50LmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzb2x2ZWRFbGVtZW50ID0gZWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgICAgaWYgKCFpc0NvbXBvbmVudFJlc29sdmFibGUocmVzb2x2ZWRFbGVtZW50KSkKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcG9uZW50IHJlc29sdmVkQ29tcG9uZW50ID0gZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkucmVzb2x2ZVhTRE5hbWVkQ29tcG9uZW50KHJlc29sdmVkRWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXNvbHZlZENvbXBvbmVudCAhPSBudWxsICYmIChyZXNvbHZlZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikpCi0gICAgICAgICAgcmVzb2x2ZWRFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbilyZXNvbHZlZENvbXBvbmVudDsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXNvbHZlZEVsZW1lbnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBlbGVtZW50OwotICB9Ci0gIAotICBwcml2YXRlIFhTRFR5cGVEZWZpbml0aW9uIHJlc29sdmVYU0RUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmKSB7Ci0JICAKLQkgIGlmICghaXNDb21wb25lbnRSZXNvbHZhYmxlKHR5cGVEZWYpKSB7Ci0JCSAgWFNEQ29tcG9uZW50IHJlc29sdmVkQ29tcG9uZW50ID0gZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkucmVzb2x2ZVhTRE5hbWVkQ29tcG9uZW50KHR5cGVEZWYpOwotCQkgIGlmIChyZXNvbHZlZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotCQkJICByZXR1cm4gKFhTRFR5cGVEZWZpbml0aW9uKSByZXNvbHZlZENvbXBvbmVudDsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHR5cGVEZWY7Ci0gIH0KLQotICBwcml2YXRlIFhTRFR5cGVEZWZpbml0aW9uIGdldFhTRFR5cGVEZWZpbml0aW9uKFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50KSB7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoZWxlbWVudC5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICByZXR1cm4gZWxlbWVudC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgZWxzZSBpZiAoZWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICByZXR1cm4gZWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MDJkOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIGV4dGVuZHMgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHByaXZhdGUgWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIgeHNkU2ltcGxlTWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIgeHNkQ29tcGxleE1hcHBlcl87Ci0gIHByaXZhdGUgWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlciB4c2RFbGVtZW50TWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyIHhzZEF0dHJpYnV0ZU1hcHBlcl87Ci0gIHByaXZhdGUgWFNEUGFydGljbGVUb0ZyYWdtZW50TWFwcGVyIHhzZFBhcnRpY2xlTWFwcGVyXzsKLQotICBwdWJsaWMgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgICB4c2RTaW1wbGVNYXBwZXJfID0gbnVsbDsKLSAgICB4c2RDb21wbGV4TWFwcGVyXyA9IG51bGw7Ci0gICAgeHNkRWxlbWVudE1hcHBlcl8gPSBudWxsOwotICAgIHhzZEF0dHJpYnV0ZU1hcHBlcl8gPSBudWxsOwotICAgIHhzZFBhcnRpY2xlTWFwcGVyXz0gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIgZ2V0WFNEU2ltcGxlTWFwcGVyKCkgewotICAgIGlmICh4c2RTaW1wbGVNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RTaW1wbGVNYXBwZXJfID0gbmV3IFhTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgIHJldHVybiB4c2RTaW1wbGVNYXBwZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIgZ2V0WFNEQ29tcGxleE1hcHBlcigpIHsKLSAgICBpZiAoeHNkQ29tcGxleE1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZENvbXBsZXhNYXBwZXJfID0gbmV3IFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlcihnZXRDb250cm9sbGVyKCksIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpKTsKLSAgICByZXR1cm4geHNkQ29tcGxleE1hcHBlcl87Ci0gIH0KLQotICBwcml2YXRlIFhTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIgZ2V0WFNERWxlbWVudE1hcHBlcigpIHsKLSAgICBpZiAoeHNkRWxlbWVudE1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZEVsZW1lbnRNYXBwZXJfID0gbmV3IFhTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIoZ2V0Q29udHJvbGxlcigpLCBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSk7Ci0gICAgcmV0dXJuIHhzZEVsZW1lbnRNYXBwZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyIGdldFhTREF0dHJpYnV0ZU1hcHBlcigpIHsKLSAgICBpZiAoeHNkQXR0cmlidXRlTWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkQXR0cmlidXRlTWFwcGVyXyA9IG5ldyBYU0RBdHRyaWJ1dGVVc2VUb0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgIHJldHVybiB4c2RBdHRyaWJ1dGVNYXBwZXJfOwotICB9Ci0gIAotICBwcml2YXRlIFhTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlciBnZXRYU0RQYXJ0aWNsZU1hcHBlcigpIHsKLSAgICBpZiAoeHNkUGFydGljbGVNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RQYXJ0aWNsZU1hcHBlcl8gPSBuZXcgWFNEUGFydGljbGVUb0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgIHJldHVybiB4c2RQYXJ0aWNsZU1hcHBlcl87Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIGNvbmZpZyA9IHJlc29sdmVYU0RDb21wb25lbnQoY29uZmlnKTsKLSAgICBYU0RDb21wb25lbnQgY29tcG9uZW50ID0gY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIGlmICghaXNDb21wb25lbnRSZXNvbHZhYmxlKGNvbXBvbmVudCkpCi0gICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgIHJldHVybiBnZXRYU0RFbGVtZW50TWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pCi0gICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlTWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgICAgcmV0dXJuIGdldFhTRENvbXBsZXhNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkKLSAgICAgIHJldHVybiBnZXRYU0RQYXJ0aWNsZU1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlQ29udGVudCkKLSAgICAgIHJldHVybiBnZXRYU0RQYXJ0aWNsZU1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZVVzZSkKLSAgICAgIHJldHVybiBnZXRYU0RBdHRyaWJ1dGVNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsJCi0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM2Nzk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RQYXJ0aWNsZVRvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RHcm91cEFsbEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNER3JvdXBDaG9pY2VGaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREdyb3VwU2VxRml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb3NpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cERlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFdpbGRjYXJkOwotCi0KLXB1YmxpYyBjbGFzcyBYU0RQYXJ0aWNsZVRvRnJhZ21lbnRNYXBwZXIgZXh0ZW5kcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHVibGljIFhTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgWFNEQ29tcG9uZW50IGNvbXBvbmVudCA9IGNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgeHNkUGFydGljbGVDb250ZW50OwotICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkKLSAgICAgIHhzZFBhcnRpY2xlQ29udGVudCA9ICgoWFNEUGFydGljbGUpY29tcG9uZW50KS5nZXRDb250ZW50KCk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGVDb250ZW50KQotICAgICAgeHNkUGFydGljbGVDb250ZW50ID0gKFhTRFBhcnRpY2xlQ29udGVudCljb21wb25lbnQ7Ci0gICAgZWxzZQotICAgICAgeHNkUGFydGljbGVDb250ZW50ID0gbnVsbDsKLSAgICBpZiAoeHNkUGFydGljbGVDb250ZW50ICE9IG51bGwpIHsKLSAgICAgIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbikKLSAgICAgICAgcmV0dXJuIGdldFhTRE1vZGVsR3JvdXBEZWZGcmFnbWVudChjb25maWcsIGlkLCBuYW1lLCAoWFNETW9kZWxHcm91cERlZmluaXRpb24peHNkUGFydGljbGVDb250ZW50KTsKLSAgICAgIGVsc2UgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApCi0gICAgICAgIHJldHVybiBnZXRYU0RNb2RlbEdyb3VwRnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSwgKFhTRE1vZGVsR3JvdXApeHNkUGFydGljbGVDb250ZW50KTsKLSAgICAgIGVsc2UgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRFdpbGRjYXJkKQotICAgICAgICByZXR1cm4gZ2V0WFNEV2lsZGNhcmRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lLCAoWFNEV2lsZGNhcmQpeHNkUGFydGljbGVDb250ZW50KTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRE1vZGVsR3JvdXBEZWZGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uIHhzZE1vZGVsR3JvdXBEZWYpIHsKLSAgICBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiByZXNvbHZlZFhTRE1vZGVsR3JvdXBEZWYgPSB4c2RNb2RlbEdyb3VwRGVmOwotICAgIGlmICh4c2RNb2RlbEdyb3VwRGVmLmlzTW9kZWxHcm91cERlZmluaXRpb25SZWZlcmVuY2UoKSkKLSAgICAgIHJlc29sdmVkWFNETW9kZWxHcm91cERlZiA9IHhzZE1vZGVsR3JvdXBEZWYuZ2V0UmVzb2x2ZWRNb2RlbEdyb3VwRGVmaW5pdGlvbigpOwotICAgIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCA9IHJlc29sdmVkWFNETW9kZWxHcm91cERlZi5nZXRNb2RlbEdyb3VwKCk7Ci0gICAgaWYgKHhzZE1vZGVsR3JvdXAgPT0gbnVsbCkKLSAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldFhTRE1vZGVsR3JvdXBGcmFnbWVudChjb25maWcsIGlkLCBuYW1lLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRE1vZGVsR3JvdXBGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIGludCBtaW5PY2N1cnMgPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01JTl9PQ0NVUlM7Ci0gICAgaW50IG1heE9jY3VycyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUFYX09DQ1VSUzsKLSAgICBYU0RDb25jcmV0ZUNvbXBvbmVudCBjb25jcmV0ZUNvbXBvbmVudCA9IHhzZE1vZGVsR3JvdXAuZ2V0Q29udGFpbmVyKCk7Ci0gICAgaWYgKGNvbmNyZXRlQ29tcG9uZW50ICE9IG51bGwgJiYgY29uY3JldGVDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotICAgICAgWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpY29uY3JldGVDb21wb25lbnQ7Ci0gICAgICBpZiAocGFydGljbGUuaXNTZXRNaW5PY2N1cnMoKSkKLSAgICAgICAgbWluT2NjdXJzID0gcGFydGljbGUuZ2V0TWluT2NjdXJzKCk7Ci0gICAgICBpZiAocGFydGljbGUuaXNTZXRNYXhPY2N1cnMoKSkKLSAgICAgICAgbWF4T2NjdXJzID0gcGFydGljbGUuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgfQotICAgIGNvbmZpZy5zZXRNaW5PY2N1cnMobWluT2NjdXJzKTsKLSAgICBjb25maWcuc2V0TWF4T2NjdXJzKG1heE9jY3Vycyk7Ci0gICAgCi0gICAgc3dpdGNoICh4c2RNb2RlbEdyb3VwLmdldENvbXBvc2l0b3IoKS5nZXRWYWx1ZSgpKSB7Ci0gICAgICBjYXNlIFhTRENvbXBvc2l0b3IuU0VRVUVOQ0U6IAotICAgICAgICBpZiAobWluT2NjdXJzID09IG1heE9jY3VycykKLSAgICAgICAgICByZXR1cm4gbmV3IFhTREdyb3VwU2VxRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCB4c2RNb2RlbEdyb3VwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBuZXcgWFNER3JvdXBTZXFSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSwgeHNkTW9kZWxHcm91cCk7Ci0gICAgICBjYXNlIFhTRENvbXBvc2l0b3IuQ0hPSUNFOgotICAgICAgICBpZiAobWluT2NjdXJzID09IG1heE9jY3VycykKLSAgICAgICAgICByZXR1cm4gbmV3IFhTREdyb3VwQ2hvaWNlRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCB4c2RNb2RlbEdyb3VwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBuZXcgWFNER3JvdXBDaG9pY2VSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSwgeHNkTW9kZWxHcm91cCk7Ci0gICAgICBjYXNlIFhTRENvbXBvc2l0b3IuQUxMOgotICAgICAgICByZXR1cm4gbmV3IFhTREdyb3VwQWxsRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCB4c2RNb2RlbEdyb3VwKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0WFNEV2lsZGNhcmRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFdpbGRjYXJkIHhzZFBhcnRpY2xlQ29udGVudCkgewotICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTFkMTk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlNPQVBFbmNBcnJheUZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuU09BUEVuY0FycmF5UmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLlhTRFR5cGVEZWZpbml0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIGV4dGVuZHMgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHByaXZhdGUgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciB4c2RMaXRlcmFsTWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIgeHNkQ29tcGxleE1hcHBlcl87Ci0KLSAgcHVibGljIFhTRFNPQVBFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIHdzZGxUb1hTRE1hcHBlcik7Ci0gICAgeHNkTGl0ZXJhbE1hcHBlcl8gPSBudWxsOwotICAgIHhzZENvbXBsZXhNYXBwZXJfID0gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciBnZXRYU0RMaXRlcmFsTWFwcGVyKCkgewotICAgIGlmICh4c2RMaXRlcmFsTWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkTGl0ZXJhbE1hcHBlcl8gPSBuZXcgWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlcihnZXRDb250cm9sbGVyKCksIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpKTsKLSAgICByZXR1cm4geHNkTGl0ZXJhbE1hcHBlcl87Ci0gIH0KLQotICBwcml2YXRlIFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlciBnZXRYU0RDb21wbGV4TWFwcGVyKCkgewotICAgIGlmICh4c2RDb21wbGV4TWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkQ29tcGxleE1hcHBlcl8gPSBuZXcgWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgICByZXR1cm4geHNkQ29tcGxleE1hcHBlcl87Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIGlmIChjb25maWcuZ2V0SXNXU0RMUGFydCgpKSB7Ci0gICAgICBJU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50IHdyYXBwZXJGcmFnbWVudCA9IG5ldyBTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQoaWQsIG5hbWUsIG51bGwpOwotICAgICAgU3RyaW5nIGRlbGVnYXRpb25GcmFnSWQgPSB3cmFwcGVyRnJhZ21lbnQuZ2VuSUQoKTsKLSAgICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBnZXRGcmFnbWVudERlbGVnYXRlKGNvbmZpZywgZGVsZWdhdGlvbkZyYWdJZCwgbmFtZSk7Ci0gICAgICB3cmFwcGVyRnJhZ21lbnQuc2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KGRlbGVnYXRpb25GcmFnbWVudCk7Ci0gICAgICBnZXRDb250cm9sbGVyKCkuYWRkVG9DYWNoZShkZWxlZ2F0aW9uRnJhZ0lkLCBkZWxlZ2F0aW9uRnJhZ21lbnQpOwotICAgICAgcmV0dXJuIHdyYXBwZXJGcmFnbWVudDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldEZyYWdtZW50RGVsZWdhdGUoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50RGVsZWdhdGUoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgY29uZmlnID0gcmVzb2x2ZVhTRENvbXBvbmVudChjb25maWcpOwotICAgIFhTRENvbXBvbmVudCBjb21wb25lbnQgPSBjb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaWYgKCFpc0NvbXBvbmVudFJlc29sdmFibGUoY29tcG9uZW50KSkKLSAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0gICAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWNvbXBvbmVudDsKLSAgICAgIGlmIChYU0RUeXBlRGVmaW5pdGlvblV0aWwuaXNTb2FwRW5jQXJyYXkoY29tcGxleFR5cGUpKQotICAgICAgICByZXR1cm4gZ2V0U09BUEVuY0FycmF5RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSwgY29tcGxleFR5cGUpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZ2V0WFNEQ29tcGxleE1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2V0WFNETGl0ZXJhbE1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0U09BUEVuY0FycmF5RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUpIHsKLSAgICBFTGlzdCB4c2RBdHRyQ29udGVudHMgPSBjb21wbGV4VHlwZS5nZXRBdHRyaWJ1dGVDb250ZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQXR0ckNvbnRlbnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBTdHJpbmcgc29hcEVuY0FycmF5VHlwZU5hbWVzcGFjZVVSSSA9IG51bGw7Ci0gICAgICBTdHJpbmcgc29hcEVuY0FycmF5VHlwZUxvY2FsTmFtZSA9IG51bGw7Ci0gICAgICBpbnQgc29hcEVuY0FycmF5RGltZW5zaW9uID0gMDsKLSAgICAgIFhTREF0dHJpYnV0ZUdyb3VwQ29udGVudCB4c2RBdHRyQ29udGVudCA9IChYU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQpeHNkQXR0ckNvbnRlbnRzLmdldChpKTsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IHhzZEF0dHJDb250ZW50LmdldEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZyBhcnJheVR5cGVBdHRyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhGcmFnbWVudENvbnN0YW50cy5VUklfV1NETCwgRnJhZ21lbnRDb25zdGFudHMuUU5BTUVfTE9DQUxfTkFNRV9BUlJBWV9UWVBFKTsKLSAgICAgIGlmIChhcnJheVR5cGVBdHRyICE9IG51bGwgJiYgYXJyYXlUeXBlQXR0ci5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgaW50IGNvbG9uID0gYXJyYXlUeXBlQXR0ci5pbmRleE9mKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgICAgU3RyaW5nIG5zUHJlZml4ID0gKGNvbG9uID4gMCkgPyBhcnJheVR5cGVBdHRyLnN1YnN0cmluZygwLCBjb2xvbikgOiBudWxsOwotICAgICAgICBzb2FwRW5jQXJyYXlUeXBlTmFtZXNwYWNlVVJJID0gKFN0cmluZyl4c2RBdHRyQ29udGVudC5nZXRTY2hlbWEoKS5nZXRRTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwKCkuZ2V0KG5zUHJlZml4KTsKLSAgICAgICAgaW50IGRpbWVuc2lvbkluZGV4ID0gYXJyYXlUeXBlQXR0ci5pbmRleE9mKEZyYWdtZW50Q29uc3RhbnRzLkxFRlRfU1FVQVJFX0JSQUNLRVQpOwotICAgICAgICBzb2FwRW5jQXJyYXlUeXBlTG9jYWxOYW1lID0gYXJyYXlUeXBlQXR0ci5zdWJzdHJpbmcoY29sb24gKyAxLCBkaW1lbnNpb25JbmRleCk7Ci0gICAgICAgIFN0cmluZyBkaW1lbnNpb25TdHJpbmcgPSBhcnJheVR5cGVBdHRyLnN1YnN0cmluZyhkaW1lbnNpb25JbmRleCwgYXJyYXlUeXBlQXR0ci5sZW5ndGgoKSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGltZW5zaW9uU3RyaW5nLmxlbmd0aCgpIC0gMTsgaisrKSB7Ci0gICAgICAgICAgaWYgKGRpbWVuc2lvblN0cmluZy5jaGFyQXQoaikgPT0gRnJhZ21lbnRDb25zdGFudHMuTEVGVF9TUVVBUkVfQlJBQ0tFVC5jaGFyQXQoMCkgJiYgZGltZW5zaW9uU3RyaW5nLmNoYXJBdChqICsgMSkgPT0gRnJhZ21lbnRDb25zdGFudHMuUklHSFRfU1FVQVJFX0JSQUNLRVQuY2hhckF0KDApKSB7Ci0gICAgICAgICAgICBzb2FwRW5jQXJyYXlEaW1lbnNpb24rKzsKLSAgICAgICAgICAgIGorKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzb2FwRW5jQXJyYXlEaW1lbnNpb24gPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoc29hcEVuY0FycmF5VHlwZU5hbWVzcGFjZVVSSSAhPSBudWxsICYmIHNvYXBFbmNBcnJheVR5cGVMb2NhbE5hbWUgIT0gbnVsbCAmJiBzb2FwRW5jQXJyYXlEaW1lbnNpb24gPT0gMSkgewotICAgICAgICBYU0RDb21wb25lbnQgc29hcEVuY0FycmF5VHlwZSA9IGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpLmdldFhTRFR5cGVGcm9tU2NoZW1hKHNvYXBFbmNBcnJheVR5cGVOYW1lc3BhY2VVUkksIHNvYXBFbmNBcnJheVR5cGVMb2NhbE5hbWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKHNvYXBFbmNBcnJheVR5cGUgIT0gbnVsbCAmJiBzb2FwRW5jQXJyYXlUeXBlIGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pIHsKLSAgICAgICAgICBYU0RNb2RlbEdyb3VwIHNlcXVlbmNlID0gbnVsbDsKLSAgICAgICAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgICAgICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCAhPSBudWxsICYmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkpIHsKLSAgICAgICAgICAgIFhTRFBhcnRpY2xlQ29udGVudCB4c2RQYXJ0aWNsZUNvbnRlbnQgPSAoKFhTRFBhcnRpY2xlKWNvbXBsZXhUeXBlQ29udGVudCkuZ2V0Q29udGVudCgpOwotICAgICAgICAgICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApCi0gICAgICAgICAgICAgIHNlcXVlbmNlID0gKFhTRE1vZGVsR3JvdXApeHNkUGFydGljbGVDb250ZW50OwotICAgICAgICAgIH0KLSAgICAgICAgICBJU09BUEVuY0FycmF5RnJhZ21lbnQgZnJhZzsKLSAgICAgICAgICBpZiAoY29uZmlnLmdldE1pbk9jY3VycygpID09IGNvbmZpZy5nZXRNYXhPY2N1cnMoKSkKLSAgICAgICAgICAgIGZyYWcgPSBuZXcgU09BUEVuY0FycmF5Rml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCBzZXF1ZW5jZSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJhZyA9IG5ldyBTT0FQRW5jQXJyYXlSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSwgc2VxdWVuY2UpOwotICAgICAgICAgIGZyYWcuc2V0WFNEVHlwZURlZmluaXRpb24oKFhTRFR5cGVEZWZpbml0aW9uKXNvYXBFbmNBcnJheVR5cGUpOwotICAgICAgICAgIHJldHVybiBmcmFnOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBnZXRYU0RDb21wbGV4TWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVUeXBlVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOTdmMjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlTGlzdEZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlTGlzdFJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVVbmlvbkZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlVW5pb25SYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuT3B0aW9uVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuWFNEVHlwZURlZmluaXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RWYXJpZXR5OwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIgZXh0ZW5kcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHVibGljIFhTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCB3c2RsVG9YU0RNYXBwZXIpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpZiAoc2ltcGxlVHlwZSAhPSBudWxsICYmIHNpbXBsZVR5cGUuZ2V0VmFyaWV0eSgpICE9IG51bGwpIHsKLSAgICAgIHN3aXRjaCAoc2ltcGxlVHlwZS5nZXRWYXJpZXR5KCkuZ2V0VmFsdWUoKSkgewotICAgICAgICBjYXNlIFhTRFZhcmlldHkuQVRPTUlDOgotICAgICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVBdG9taWNGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICAgICAgY2FzZSBYU0RWYXJpZXR5LkxJU1Q6Ci0gICAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZUxpc3RGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICAgICAgY2FzZSBYU0RWYXJpZXR5LlVOSU9OOgotICAgICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVVbmlvbkZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRYU0RTaW1wbGVBdG9taWNGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBib29sZWFuIGlzRml4ZWQgPSAoKGNvbmZpZy5nZXRNaW5PY2N1cnMoKSA9PSBjb25maWcuZ2V0TWF4T2NjdXJzKCkpICYmIGNvbmZpZy5nZXRNYXhPY2N1cnMoKSAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQpOwotICAgIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHhzZFNpbXBsZVR5cGVEZWYgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHhzZEJhc2VTaW1wbGVUeXBlRGVmID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKVhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oeHNkU2ltcGxlVHlwZURlZik7Ci0gICAgU3RyaW5nIGJhc2VTaW1wbGVUeXBlRGVmTlMgPSBudWxsOwotICAgIFN0cmluZyBiYXNlU2ltcGxlVHlwZURlZk5hbWUgPSBudWxsOwotICAgIGlmICh4c2RCYXNlU2ltcGxlVHlwZURlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIGJhc2VTaW1wbGVUeXBlRGVmTlMgPSB4c2RCYXNlU2ltcGxlVHlwZURlZi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIGJhc2VTaW1wbGVUeXBlRGVmTmFtZSA9IHhzZEJhc2VTaW1wbGVUeXBlRGVmLmdldE5hbWUoKTsKLSAgICB9Ci0gICAgYm9vbGVhbiBpc0VudW0gPSBpc1NpbXBsZVR5cGVFbnVtZXJhdGlvbih4c2RTaW1wbGVUeXBlRGVmKTsKLSAgICBpZiAoRnJhZ21lbnRDb25zdGFudHMuVVJJX1hTRC5lcXVhbHMoYmFzZVNpbXBsZVR5cGVEZWZOUykpCi0gICAgewotICAgICAgaWYgKGJhc2VTaW1wbGVUeXBlRGVmTmFtZS5lcXVhbHMoImRhdGUiKSkKLSAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZURhdGVUaW1lRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURSx4c2RTaW1wbGVUeXBlRGVmLGlzRW51bSxpc0ZpeGVkKTsKLSAgICAgIGVsc2UgaWYgKGJhc2VTaW1wbGVUeXBlRGVmTmFtZS5lcXVhbHMoImRhdGVUaW1lIikpCi0gICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVEYXRlVGltZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FLHhzZFNpbXBsZVR5cGVEZWYsaXNFbnVtLGlzRml4ZWQpOwotICAgICAgZWxzZSBpZiAoYmFzZVNpbXBsZVR5cGVEZWZOYW1lLmVxdWFscygiZ1llYXJNb250aCIpKQotICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlRGF0ZVRpbWVGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HWUVBUk1PTlRILHhzZFNpbXBsZVR5cGVEZWYsaXNFbnVtLGlzRml4ZWQpOwotICAgICAgZWxzZSBpZiAoYmFzZVNpbXBsZVR5cGVEZWZOYW1lLmVxdWFscygiZ01vbnRoRGF5IikpCi0gICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVEYXRlVGltZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dNT05USERBWSx4c2RTaW1wbGVUeXBlRGVmLGlzRW51bSxpc0ZpeGVkKTsKLSAgICAgIGVsc2UgaWYgKGJhc2VTaW1wbGVUeXBlRGVmTmFtZS5lcXVhbHMoImdEYXkiKSkKLSAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZUdEYXlGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCB4c2RTaW1wbGVUeXBlRGVmLGlzRW51bSxpc0ZpeGVkKTsgICAgICAgIAotICAgICAgZWxzZSBpZiAoYmFzZVNpbXBsZVR5cGVEZWZOYW1lLmVxdWFscygiYm9vbGVhbiIpKQotICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlQm9vbGVhbkZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIHhzZFNpbXBsZVR5cGVEZWYsaXNFbnVtLGlzRml4ZWQpOwotICAgIH0KLQotICAgIGlmIChpc0VudW0pCi0gICAgewotICAgICAgaWYgKGlzRml4ZWQpCi0gICAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIHhzZFNpbXBsZVR5cGVEZWYuZ2V0RW51bWVyYXRpb25GYWNldHMoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgeHNkU2ltcGxlVHlwZURlZi5nZXRFbnVtZXJhdGlvbkZhY2V0cygpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChpc0ZpeGVkKQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY1JhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBYU0RTaW1wbGVBdG9taWNGcmFnbWVudCBnZXRYU0RTaW1wbGVEYXRlVGltZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgaW50IGNhbGVuZGFyVHlwZSxYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiB4c2REYXRlVGltZVR5cGUsYm9vbGVhbiBpc0VudW0sYm9vbGVhbiBpc0ZpeGVkKQotICB7Ci0gICAgaWYgKGlzRW51bSkKLSAgICB7Ci0gICAgICBpZiAoaXNGaXhlZCkKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgeHNkRGF0ZVRpbWVUeXBlLmdldEVudW1lcmF0aW9uRmFjZXRzKCkpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIHhzZERhdGVUaW1lVHlwZS5nZXRFbnVtZXJhdGlvbkZhY2V0cygpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChpc0ZpeGVkKQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgY2FsZW5kYXJUeXBlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgY2FsZW5kYXJUeXBlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgZ2V0WFNEU2ltcGxlR0RheUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEU2ltcGxlVHlwZURlZmluaXRpb24geHNkRGF0ZVRpbWVUeXBlLGJvb2xlYW4gaXNFbnVtLGJvb2xlYW4gaXNGaXhlZCkKLSAgewotICAgIGlmIChpc0VudW0pCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBPcHRpb25WZWN0b3Igb3B0aW9uVmVjdG9yID0gbmV3IE9wdGlvblZlY3RvcigpOwotICAgIFN0cmluZ0J1ZmZlciB2YWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3IgKGludCBpPTE7aTw9MzE7aSsrKQotICAgIHsKLSAgICAgIHZhbHVlLnNldExlbmd0aCgwKTsKLSAgICAgIHZhbHVlLmFwcGVuZCgiLS0tIik7Ci0gICAgICBpZiAoaTwxMCkKLSAgICAgICAgdmFsdWUuYXBwZW5kKDApOwotICAgICAgdmFsdWUuYXBwZW5kKGkpOwotICAgICAgb3B0aW9uVmVjdG9yLmFkZE9wdGlvbihTdHJpbmcudmFsdWVPZihpKSx2YWx1ZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgaWYgKGlzRml4ZWQpCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBvcHRpb25WZWN0b3IpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgb3B0aW9uVmVjdG9yKTsKLSAgfQotCi0gIHByaXZhdGUgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgZ2V0WFNEU2ltcGxlQm9vbGVhbkZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEU2ltcGxlVHlwZURlZmluaXRpb24geHNkQm9vbGVhblR5cGUsYm9vbGVhbiBpc0VudW0sYm9vbGVhbiBpc0ZpeGVkKQotICB7Ci0gICAgaWYgKGlzRW51bSkKLSAgICAgIHJldHVybiBudWxsOwotICAgIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3IgPSBuZXcgT3B0aW9uVmVjdG9yKCk7Ci0gICAgb3B0aW9uVmVjdG9yLmFkZE9wdGlvbigidHJ1ZSIsInRydWUiKTsKLSAgICBvcHRpb25WZWN0b3IuYWRkT3B0aW9uKCJmYWxzZSIsImZhbHNlIik7Ci0gICAgaWYgKGlzRml4ZWQpCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBvcHRpb25WZWN0b3IpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgb3B0aW9uVmVjdG9yKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRFNpbXBsZUxpc3RGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICAKLSAgICBib29sZWFuIGlzRml4ZWQgPSAoKGNvbmZpZy5nZXRNaW5PY2N1cnMoKSA9PSBjb25maWcuZ2V0TWF4T2NjdXJzKCkpICYmIGNvbmZpZy5nZXRNYXhPY2N1cnMoKSAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQpOwotICAgIGlmIChpc0ZpeGVkKQotICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUxpc3RSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSk7Ci0gIH0KLQotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRYU0RTaW1wbGVVbmlvbkZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIAotICAgIGJvb2xlYW4gaXNGaXhlZCA9ICgoY29uZmlnLmdldE1pbk9jY3VycygpID09IGNvbmZpZy5nZXRNYXhPY2N1cnMoKSkgJiYgY29uZmlnLmdldE1heE9jY3VycygpICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCk7Ci0gICAgaWYgKGlzRml4ZWQpCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZVVuaW9uRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZVVuaW9uUmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzU2ltcGxlVHlwZUVudW1lcmF0aW9uKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUpIHsKLSAgICBFTGlzdCBlID0gc2ltcGxlVHlwZS5nZXRFbnVtZXJhdGlvbkZhY2V0cygpOwotICAgIHJldHVybiAoZSAhPSBudWxsICYmIGUuc2l6ZSgpID4gMCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMzI1MGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHsKLSAgcHJpdmF0ZSBYU0RDb21wb25lbnQgY29tcG9uZW50XzsKLSAgcHJpdmF0ZSBpbnQgbWluT2NjdXJzXzsKLSAgcHJpdmF0ZSBpbnQgbWF4T2NjdXJzXzsKLSAgcHJpdmF0ZSBpbnQgc3R5bGVfOwotICBwcml2YXRlIGludCBwYXJ0RW5jb2RpbmdfOwotICBwcml2YXRlIGJvb2xlYW4gaXNXU0RMUGFydF87Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxQYXJ0TmFtZV87Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkgewotICAgIGNvbXBvbmVudF8gPSBudWxsOwotICAgIG1pbk9jY3Vyc18gPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01JTl9PQ0NVUlM7Ci0gICAgbWF4T2NjdXJzXyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUFYX09DQ1VSUzsKLSAgICBzdHlsZV8gPSBGcmFnbWVudENvbnN0YW50cy5TVFlMRV9ET0NVTUVOVDsKLSAgICBwYXJ0RW5jb2RpbmdfID0gRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfTElURVJBTDsKLSAgICBpc1dTRExQYXJ0XyA9IGZhbHNlOwotICAgIHdzZGxQYXJ0TmFtZV8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEQ29tcG9uZW50KFhTRENvbXBvbmVudCBjb21wb25lbnQpIHsKLSAgICBjb21wb25lbnRfID0gY29tcG9uZW50OwotICB9Ci0KLSAgcHVibGljIFhTRENvbXBvbmVudCBnZXRYU0RDb21wb25lbnQoKSB7Ci0gICAgcmV0dXJuIGNvbXBvbmVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNaW5PY2N1cnMoaW50IG1pbk9jY3VycykgewotICAgIG1pbk9jY3Vyc18gPSBtaW5PY2N1cnM7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE1pbk9jY3VycygpIHsKLSAgICByZXR1cm4gbWluT2NjdXJzXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE1heE9jY3VycyhpbnQgbWF4T2NjdXJzKSB7Ci0gICAgbWF4T2NjdXJzXyA9IG1heE9jY3VyczsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TWF4T2NjdXJzKCkgewotICAgIHJldHVybiBtYXhPY2N1cnNfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTdHlsZShpbnQgc3R5bGUpIHsKLSAgICBzdHlsZV8gPSBzdHlsZTsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRTdHlsZSgpIHsKLSAgICByZXR1cm4gc3R5bGVfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFydEVuY29kaW5nKGludCBwYXJ0RW5jb2RpbmcpIHsKLSAgICBwYXJ0RW5jb2RpbmdfID0gcGFydEVuY29kaW5nOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRQYXJ0RW5jb2RpbmcoKSB7Ci0gICAgcmV0dXJuIHBhcnRFbmNvZGluZ187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJc1dTRExQYXJ0KGJvb2xlYW4gaXNXU0RMUGFydCkgewotICAgIGlzV1NETFBhcnRfID0gaXNXU0RMUGFydDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldElzV1NETFBhcnQoKSB7Ci0gICAgcmV0dXJuIGlzV1NETFBhcnRfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXU0RMUGFydE5hbWUoU3RyaW5nIHdzZGxQYXJ0TmFtZSkgewotICAgIHdzZGxQYXJ0TmFtZV8gPSB3c2RsUGFydE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFBhcnROYW1lKCkgewotICAgIHJldHVybiB3c2RsUGFydE5hbWVfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEVG9GcmFnbWVudENvbnRyb2xsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50Q29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGM1N2Q2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50Q29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLQotcHVibGljIGNsYXNzIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIHsKLSAgcHJpdmF0ZSBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIHhzZExpdGVyYWxNYXBwZXJfOwotICBwcml2YXRlIFhTRFNPQVBFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIgeHNkU29hcE1hcHBlcl87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHhzZFRvRnJhZ21lbnRDYWNoZV87Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkgewotICAgIHdzZGxUb1hTRE1hcHBlcl8gPSBudWxsOwotICAgIHhzZExpdGVyYWxNYXBwZXJfID0gbnVsbDsKLSAgICB4c2RTb2FwTWFwcGVyXyA9IG51bGw7Ci0gICAgeHNkVG9GcmFnbWVudENhY2hlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcihXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgd3NkbFRvWFNETWFwcGVyXyA9IHdzZGxUb1hTRE1hcHBlcjsKLSAgfQotCi0gIHB1YmxpYyBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkgewotICAgIHJldHVybiB3c2RsVG9YU0RNYXBwZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIGdldFhTRExpdGVyYWxNYXBwZXIoKSB7Ci0gICAgaWYgKHhzZExpdGVyYWxNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RMaXRlcmFsTWFwcGVyXyA9IG5ldyBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyKHRoaXMsIHdzZGxUb1hTRE1hcHBlcl8pOwotICAgIHJldHVybiB4c2RMaXRlcmFsTWFwcGVyXzsKLSAgfQotCi0gIHByaXZhdGUgWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciBnZXRYU0RTT0FQTWFwcGVyKCkgewotICAgIGlmICh4c2RTb2FwTWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkU29hcE1hcHBlcl8gPSBuZXcgWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlcih0aGlzLCB3c2RsVG9YU0RNYXBwZXJfKTsKLSAgICByZXR1cm4geHNkU29hcE1hcHBlcl87Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0Q2FjaGVkRnJhZ21lbnQoaWQpOwotICAgIGlmIChmcmFnICE9IG51bGwpCi0gICAgICByZXR1cm4gZnJhZzsKLSAgICBmcmFnID0gZ2V0TmV3RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgaWYgKGZyYWcgIT0gbnVsbCkKLSAgICAgIGFkZFRvQ2FjaGUoaWQsIGZyYWcpOwotICAgIHJldHVybiBmcmFnOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRDYWNoZWRGcmFnbWVudChTdHJpbmcgaWQpIHsKLSAgICByZXR1cm4gKElYU0RGcmFnbWVudCl4c2RUb0ZyYWdtZW50Q2FjaGVfLmdldChpZCk7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldE5ld0ZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIHN3aXRjaCAoY29uZmlnLmdldFBhcnRFbmNvZGluZygpKQotICAgIHsKLSAgICAgIGNhc2UgRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfU09BUDoKLSAgICAgICAgcmV0dXJuIGdldFhTRFNPQVBNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsaWQsbmFtZSk7ICAgICAgCi0gICAgICBjYXNlIEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX0xJVEVSQUw6Ci0gICAgICBjYXNlIEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX1VSTDoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnZXRYU0RMaXRlcmFsTWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLGlkLG5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFRvQ2FjaGUoU3RyaW5nIGlkLCBJWFNERnJhZ21lbnQgZnJhZykgewotICAgIHhzZFRvRnJhZ21lbnRDYWNoZV8ucHV0KGlkLCBmcmFnKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZyb21DYWNoZShTdHJpbmcgaWQpIHsKLSAgICB4c2RUb0ZyYWdtZW50Q2FjaGVfLnJlbW92ZShpZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlbXB0eUNhY2hlKCkgewotICAgIHhzZFRvRnJhZ21lbnRDYWNoZV8uY2xlYXIoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNjRmNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVmYXVsdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERW1wdHlGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHJpdmF0ZSBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJpdmF0ZSBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyXzsKLQotICBwdWJsaWMgWFNEVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIHdzZGxUb1hTRE1hcHBlcl8gPSB3c2RsVG9YU0RNYXBwZXI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDb250cm9sbGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gIH0KLQotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgZ2V0Q29udHJvbGxlcigpIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHdzZGxUb1hTRE1hcHBlcl8gPSB3c2RsVG9YU0RNYXBwZXI7Ci0gIH0KLQotICBwdWJsaWMgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpIHsKLSAgICByZXR1cm4gd3NkbFRvWFNETWFwcGVyXzsKLSAgfQotCi0gIHByb3RlY3RlZCBJWFNERnJhZ21lbnQgZ2V0WFNERGVmYXVsdEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIHJldHVybiBuZXcgWFNERGVmYXVsdEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcpOwotICB9Ci0KLSAgcHJvdGVjdGVkIElYU0RGcmFnbWVudCBnZXRYU0RFbXB0eUZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIHJldHVybiBuZXcgWFNERW1wdHlGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnKTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKTsKLQotICBwcm90ZWN0ZWQgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gcmVzb2x2ZVhTRENvbXBvbmVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBYU0RDb21wb25lbnQgY29tcG9uZW50ID0gY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIGlmICghaXNDb21wb25lbnRSZXNvbHZhYmxlKGNvbXBvbmVudCkgJiYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRE5hbWVkQ29tcG9uZW50KSkKLSAgICB7Ci0gICAgICBYU0RDb21wb25lbnQgcmVzb2x2ZWRDb21wb25lbnQgPSBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKS5yZXNvbHZlWFNETmFtZWRDb21wb25lbnQoKFhTRE5hbWVkQ29tcG9uZW50KWNvbXBvbmVudCk7Ci0gICAgICBpZiAocmVzb2x2ZWRDb21wb25lbnQgIT0gbnVsbCkKLSAgICAgICAgY29uZmlnLnNldFhTRENvbXBvbmVudChyZXNvbHZlZENvbXBvbmVudCk7Ci0gICAgfQotICAgIHJldHVybiBjb25maWc7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0NvbXBvbmVudFJlc29sdmFibGUoWFNEQ29tcG9uZW50IGNvbXBvbmVudCkKLSAgewotICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gY29tcG9uZW50LmdldFNjaGVtYSgpOwotICAgIGlmIChzY2hlbWEgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL0ZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDVlMzI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL0ZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklGcmFnbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZyYWdtZW50IGltcGxlbWVudHMgSUZyYWdtZW50IHsKLSAgcHJpdmF0ZSBTdHJpbmcgaWRfOwotICBwcml2YXRlIFN0cmluZyBuYW1lXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcGFyYW1zXzsKLQotICBwdWJsaWMgRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIGlkXyA9IGlkOwotICAgIG5hbWVfID0gbmFtZTsKLSAgICBwYXJhbXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SUQoU3RyaW5nIGlkKSB7Ci0gICAgaWRfID0gaWQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElEKCkgewotICAgIHJldHVybiBpZF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgbmFtZV8gPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgIHJldHVybiBuYW1lXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIFN0cmluZ1tdIHBhcmFtcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSk7Ci0gICAgc2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCksIHBhcmFtcyk7Ci0gICAgcmV0dXJuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBTdHJpbmdbXSBwYXJhbXMpIHsKLSAgICBpZiAocGFyYW1zID09IG51bGwpCi0gICAgICBwYXJhbXNfLnJlbW92ZShwYXJhbUtleSk7Ci0gICAgZWxzZQotICAgICAgcGFyYW1zXy5wdXQocGFyYW1LZXksIHBhcmFtcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBWZWN0b3IgcGFyYW1zKSB7Ci0gICAgaWYgKHBhcmFtcyA9PSBudWxsKQotICAgICAgcGFyYW1zXy5yZW1vdmUocGFyYW1LZXkpOwotICAgIGVsc2UgewotICAgICAgU3RyaW5nW10gcGFyYW1zQXJyYXkgPSBuZXcgU3RyaW5nW3BhcmFtcy5zaXplKCldOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbXNBcnJheS5sZW5ndGg7IGkrKykgewotICAgICAgICBwYXJhbXNBcnJheVtpXSA9IHBhcmFtcy5nZXQoaSkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICAgIHNldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSwgcGFyYW1zQXJyYXkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgcmV0dXJuIChTdHJpbmdbXSlwYXJhbXNfLmdldChwYXJhbUtleSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCAmJiBwYXJhbUluZGV4IDwgcGFyYW1zLmxlbmd0aCkKLSAgICAgIHJldHVybiBwYXJhbXNbcGFyYW1JbmRleF07Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpIHsKLSAgICBFbnVtZXJhdGlvbiBwYXJhbUtleXMgPSBwYXJhbXNfLmtleXMoKTsKLSAgICB3aGlsZSAocGFyYW1LZXlzICE9IG51bGwgJiYgcGFyYW1LZXlzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBpZiAoIXZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKChTdHJpbmcpcGFyYW1LZXlzLm5leHRFbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsKLSAgICBmb3IgKGludCBpID0gMDsgcGFyYW1zICE9IG51bGwgJiYgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCF2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlGaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5Rml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYxZmU4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFNPQVBFbmNBcnJheUZpeEZyYWdtZW50IGV4dGVuZHMgU09BUEVuY0FycmF5RnJhZ21lbnQgewotICBwdWJsaWMgU09BUEVuY0FycmF5Rml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlGaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMDNkZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklTT0FQRW5jQXJyYXlGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTT0FQRW5jQXJyYXlGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwU2VxRnJhZ21lbnQgaW1wbGVtZW50cyBJU09BUEVuY0FycmF5RnJhZ21lbnQKLXsKLSAgcHVibGljIFNPQVBFbmNBcnJheUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIHJlbW92ZUdyb3VwSURzKCk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIElYU0RGcmFnbWVudCBzb2FwRW5jQXJyYXlUeXBlRnJhZyA9IChnZXRHcm91cE1lbWJlckZyYWdtZW50cyhjcmVhdGVTT0FQRW5jQXJyYXlJbnN0YW5jZSgpKSlbMF07Ci0gICAgICBWZWN0b3IgaW5zdGFuY2VzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgTm9kZUxpc3QgbmwgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBubC5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGopOwotICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgaW5zdGFuY2VzVmVjdG9yLmFkZChub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlc1ZlY3Rvci5zaXplKCldOwotICAgICAgaW5zdGFuY2VzVmVjdG9yLmNvcHlJbnRvKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpOwotICAgICAgaWYgKCFzb2FwRW5jQXJyYXlUeXBlRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoc2V0RWxlbWVudHNUYWdOYW1lKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMsIHNvYXBFbmNBcnJheVR5cGVGcmFnLmdldE5hbWUoKSkpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgU3RyaW5nW10gZ3JvdXBJRHMgPSBnZXRHcm91cElEcygpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50ID0gbmV3IEVsZW1lbnRbZ3JvdXBJRHMubGVuZ3RoXTsKLSAgICBTdHJpbmdCdWZmZXIgYXR0ck5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgU3RyaW5nQnVmZmVyIGF0dHJWYWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLS8vICAgIFN0cmluZ0J1ZmZlciBhdHRyQXJyYXlUeXBlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLS8vICAgIFN0cmluZ0J1ZmZlciBhdHRyQXJyYXlUeXBlVmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGludCBudW1JbnN0YW5jZXMgPSAwOwotICAgICAgaW5zdGFuY2VEb2N1bWVudFtpXSA9IGRvYy5jcmVhdGVFbGVtZW50KGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKSk7Ci0gICAgICBJWFNERnJhZ21lbnQgZnJhZ21lbnQgPSAoZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pKVswXTsKLSAgICAgIEVsZW1lbnRbXSBmcmFnbWVudEluc3RhbmNlRG9jdW1lbnRzID0gZnJhZ21lbnQuZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmcmFnbWVudEluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoZnJhZ21lbnRJbnN0YW5jZURvY3VtZW50c1tqXSAhPSBudWxsKQotICAgICAgICAgIGluc3RhbmNlRG9jdW1lbnRbaV0uYXBwZW5kQ2hpbGQoZnJhZ21lbnRJbnN0YW5jZURvY3VtZW50c1tqXSk7Ci0gICAgICAgIG51bUluc3RhbmNlcysrOwotICAgICAgfQotICAgICAgU3RyaW5nIHNvYXBVUkkgPSBGcmFnbWVudENvbnN0YW50cy5VUklfU09BUDsKLSAgICAgIFN0cmluZyBzb2FwUHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSShzb2FwVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICBTdHJpbmcgc29hcEVuY0FycmF5VHlwZVVSSSA9IGdldFhTRFR5cGVEZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBTdHJpbmcgc29hcEVuY0FycmF5VHlwZVByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoc29hcEVuY0FycmF5VHlwZVVSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgLy8gU2V0IHRoZSBhcnJheVR5cGUgYXR0cmlidXRlCi0gICAgICBhdHRyTmFtZS5zZXRMZW5ndGgoMCk7Ci0gICAgICBhdHRyTmFtZS5zZXRMZW5ndGgoMCk7Ci0gICAgICBhdHRyTmFtZS5hcHBlbmQoc29hcFByZWZpeCk7Ci0gICAgICBhdHRyTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgYXR0ck5hbWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlNPQVBfRU5DX0FSUkFZX1RZUEUpOwotICAgICAgYXR0clZhbHVlLnNldExlbmd0aCgwKTsKLSAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoc29hcEVuY0FycmF5VHlwZVByZWZpeCk7Ci0gICAgICBhdHRyVmFsdWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoZ2V0WFNEVHlwZURlZmluaXRpb24oKS5nZXROYW1lKCkpOwotICAgICAgYXR0clZhbHVlLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5MRUZUX1NRVUFSRV9CUkFDS0VUKTsKLSAgICAgIGF0dHJWYWx1ZS5hcHBlbmQobnVtSW5zdGFuY2VzKTsKLSAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuUklHSFRfU1FVQVJFX0JSQUNLRVQpOwotICAgICAgaW5zdGFuY2VEb2N1bWVudFtpXS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUudG9TdHJpbmcoKSwgYXR0clZhbHVlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBpZiAoZ2VuWFNJVHlwZSkKLSAgICB7Ci0vLwkgIFRPRE86IFVzZWQgdG8gY2FsbCB0aGUgcGx1Z2luJ3MgaWdub3JlU2NoZW1hRm9yU09BUEFycmF5cygpbWV0aG9kLgotCSAgYm9vbGVhbiBpZ25vcmVTY2hlbWFGb3JTT0FQQXJyYXlzID0gdHJ1ZTsKLSAgICAgIGlmIChpZ25vcmVTY2hlbWFGb3JTT0FQQXJyYXlzKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnQubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgeHNpVVJJID0gRnJhZ21lbnRDb25zdGFudHMuVVJJX1hTSTsKLSAgICAgICAgICBTdHJpbmcgeHNpUHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSSh4c2lVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgICBTdHJpbmcgeHNpVHlwZVVSSSA9IEZyYWdtZW50Q29uc3RhbnRzLlVSSV9TT0FQOwotICAgICAgICAgIFN0cmluZyB4c2lUeXBlUHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSSh4c2lUeXBlVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgICAgYXR0ck5hbWUuc2V0TGVuZ3RoKDApOwotICAgICAgICAgIGF0dHJOYW1lLmFwcGVuZCh4c2lQcmVmaXgpLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5DT0xPTikuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlhTSV9UWVBFKTsKLSAgICAgICAgICBhdHRyVmFsdWUuc2V0TGVuZ3RoKDApOwotICAgICAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoeHNpVHlwZVByZWZpeCkuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgICAgICBhdHRyVmFsdWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlFOQU1FX0xPQ0FMX05BTUVfQVJSQVkpOwotICAgICAgICAgIGluc3RhbmNlRG9jdW1lbnRbaV0uc2V0QXR0cmlidXRlKGF0dHJOYW1lLnRvU3RyaW5nKCksIGF0dHJWYWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50LCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVTT0FQRW5jQXJyYXlJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoZ2V0WFNEVHlwZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBncm91cElEID0gZ2VuSUQoKTsKLSAgICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySUQgPSB7Z2VuSUQoKX07Ci0gICAgICBpbnQgbWluT2NjdXJzID0gMDsKLSAgICAgIGludCBtYXhPY2N1cnMgPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQ7Ci0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBudWxsOwotICAgICAgaWYgKGdldFhTRE1vZGVsR3JvdXAoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBYU0RQYXJ0aWNsZSBncm91cE93bmVyID0gKFhTRFBhcnRpY2xlKWdldFhTRE1vZGVsR3JvdXAoKS5nZXRDb250YWluZXIoKTsKLSAgICAgICAgaW50IGdyb3VwTWluID0gZ3JvdXBPd25lci5nZXRNaW5PY2N1cnMoKTsKLSAgICAgICAgaW50IGdyb3VwTWF4ID0gZ3JvdXBPd25lci5nZXRNYXhPY2N1cnMoKTsKLSAgICAgICAgaW50IGVsZW1lbnRNaW4gPSAwOwotICAgICAgICBpbnQgZWxlbWVudE1heCA9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRDsKLSAgICAgICAgRUxpc3QgeHNkUGFydGljbGVzID0gZ2V0WFNETW9kZWxHcm91cCgpLmdldFBhcnRpY2xlcygpOwotICAgICAgICBpZiAoeHNkUGFydGljbGVzLnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgeHNkUGFydGljbGVDb250ZW50ID0gKChYU0RQYXJ0aWNsZSl4c2RQYXJ0aWNsZXMuZ2V0KDApKS5nZXRDb250ZW50KCk7Ci0gICAgICAgICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbGVtZW50RGVjbCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24peHNkUGFydGljbGVDb250ZW50OwotICAgICAgICAgICAgWFNEUGFydGljbGUgZWxlbWVudE93bmVyID0gKFhTRFBhcnRpY2xlKWVsZW1lbnREZWNsLmdldENvbnRhaW5lcigpOwotICAgICAgICAgICAgZWxlbWVudE1pbiA9IGVsZW1lbnRPd25lci5nZXRNaW5PY2N1cnMoKTsKLSAgICAgICAgICAgIGVsZW1lbnRNYXggPSBlbGVtZW50T3duZXIuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChncm91cE1pbiA+PSAwICYmIGVsZW1lbnRNaW4gPj0gMCkKLSAgICAgICAgICBtaW5PY2N1cnMgPSBncm91cE1pbiAqIGVsZW1lbnRNaW47Ci0gICAgICAgIGlmIChncm91cE1heCA+PSAwICYmIGdyb3VwTWF4ICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCAmJiBlbGVtZW50TWF4ID49IDAgJiYgZWxlbWVudE1heCAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQpCi0gICAgICAgICAgbWF4T2NjdXJzID0gZ3JvdXBNYXggKiBlbGVtZW50TWF4OwotICAgICAgfQotICAgICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gdGhpc0NvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgIHhzZENvbmZpZy5zZXRYU0RDb21wb25lbnQoZ2V0WFNEVHlwZURlZmluaXRpb24oKSk7Ci0gICAgICB4c2RDb25maWcuc2V0TWluT2NjdXJzKG1pbk9jY3Vycyk7Ci0gICAgICB4c2RDb25maWcuc2V0TWF4T2NjdXJzKG1heE9jY3Vycyk7Ci0gICAgICB4c2RDb25maWcuc2V0U3R5bGUodGhpc0NvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgICB4c2RDb25maWcuc2V0V1NETFBhcnROYW1lKHRoaXNDb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgICAgU3RyaW5nIG5hbWUgPSAoZWxlbWVudERlY2wgIT0gbnVsbCkgPyBlbGVtZW50RGVjbC5nZXROYW1lKCkgOiBnZXRYU0RUeXBlRGVmaW5pdGlvbigpLmdldE5hbWUoKTsKLSAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudCh4c2RDb25maWcsIGdyb3VwTWVtYmVySURbMF0sIG5hbWUpOwotICAgICAgYWRkRnJhZ21lbnQoZ3JvdXBNZW1iZXJJRFswXSwgZnJhZyk7Ci0gICAgICBzZXRHcm91cE1lbWJlcklEcyhncm91cElELCBncm91cE1lbWJlcklEKTsKLSAgICAgIHJldHVybiBncm91cElEOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlU09BUEVuY0FycmF5SW5zdGFuY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZVNPQVBFbmNBcnJheUluc3RhbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheVJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheVJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY1NjdlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgU09BUEVuY0FycmF5UmFuZ2VGcmFnbWVudCBleHRlbmRzIFNPQVBFbmNBcnJheUZyYWdtZW50IHsKLSAgcHVibGljIFNPQVBFbmNBcnJheVJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDkzZTI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudCBleHRlbmRzIFhTRERlbGVnYXRpb25GcmFnbWVudCBpbXBsZW1lbnRzIElTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gImlkIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhSRUYgPSAiaHJlZiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1VORCA9ICIjIjsKLQotICBwcml2YXRlIEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VUYWJsZV87Ci0KLSAgcHVibGljIFNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgbnVsbCk7Ci0gICAgdXJpUmVmZXJlbmNlVGFibGVfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKGNvbmZpZyk7Ci0gIH0KLQotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmKQotICB7Ci0gICAgZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuc2V0WFNEVHlwZURlZmluaXRpb24odHlwZURlZik7Ci0gIH0KLQotICBwdWJsaWMgWFNEVHlwZURlZmluaXRpb24gZ2V0WFNEVHlwZURlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gcmVzb2x2ZVVSSVJlZmVyZW5jZXModXJpUmVmZXJlbmNlVGFibGVfLCBpbnN0YW5jZURvY3VtZW50c1tpXSk7Ci0gICAgcmV0dXJuIGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZURvY3VtZW50cyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVUklSZWZlcmVuY2VzKEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VzKQotICB7Ci0gICAgdXJpUmVmZXJlbmNlVGFibGVfID0gdXJpUmVmZXJlbmNlczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgSGFzaHRhYmxlIHBhcnNlVVJJUmVmZXJlbmNlcyhFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gb3ZlcndyaXRlcykKLSAgewotICAgIEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHBhcnNlVVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzLCBlbGVtZW50LCBvdmVyd3JpdGVzKTsKLSAgICByZXR1cm4gdXJpUmVmZXJlbmNlczsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGFyc2VVUklSZWZlcmVuY2VzKEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VzLCBFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gb3ZlcndyaXRlcykKLSAgewotICAgIGJvb2xlYW4gcmVzb2x2ZWQgPSB0cnVlOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgVVJJUmVmZXJlbmNlIHJlZiA9IG51bGw7Ci0gICAgICBTdHJpbmcgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShJRCk7Ci0gICAgICByZXNvbHZlZCA9ICFlbGVtZW50Lmhhc0F0dHJpYnV0ZShIUkVGKTsKLSAgICAgIGlmIChpZCAhPSBudWxsICYmIGlkLmxlbmd0aCgpID4gMCAmJiAob3ZlcndyaXRlcyB8fCAhdXJpUmVmZXJlbmNlcy5jb250YWlucyhpZCkpKQotICAgICAgewotICAgICAgICByZWYgPSBuZXcgVVJJUmVmZXJlbmNlKGVsZW1lbnQsIHRydWUpOwotICAgICAgICB1cmlSZWZlcmVuY2VzLnB1dChpZCwgcmVmKTsKLSAgICAgIH0KLSAgICAgIE5vZGVMaXN0IG5sID0gZWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaSk7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICByZXNvbHZlZCA9IHBhcnNlVVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzLCAoRWxlbWVudClub2RlLCBvdmVyd3JpdGVzKSAmJiByZXNvbHZlZDsKLSAgICAgIH0KLSAgICAgIGlmIChyZWYgIT0gbnVsbCkKLSAgICAgICAgcmVmLnNldFJlc29sdmVkKHJlc29sdmVkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc29sdmVkOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBFbGVtZW50IHJlc29sdmVVUklSZWZlcmVuY2VzKEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VzLCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAodXJpUmVmZXJlbmNlcyAhPSBudWxsICYmICF1cmlSZWZlcmVuY2VzLmlzRW1wdHkoKSkKLSAgICAgIHJldHVybiByZXNvbHZlVVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzLCBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSwgZWxlbWVudCwgbmV3IFZlY3RvcigpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIEVsZW1lbnQgcmVzb2x2ZVVSSVJlZmVyZW5jZXMoSGFzaHRhYmxlIHVyaVJlZmVyZW5jZXMsIERvY3VtZW50IGRvYywgRWxlbWVudCBlbGVtZW50LCBWZWN0b3IgdXNlZElkcykKLSAgewotICAgIFN0cmluZyBocmVmID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoSFJFRik7Ci0gICAgRWxlbWVudCByZXNvbHZlZEVsZW1lbnQgPSBlbGVtZW50OwotICAgIGJvb2xlYW4gcmVzb2x2ZWQgPSBmYWxzZTsKLSAgICBpZiAoaHJlZiAhPSBudWxsICYmIGhyZWYubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIFVSSVJlZmVyZW5jZSByZWYgPSBudWxsOwotICAgICAgaWYgKGhyZWYuaW5kZXhPZihQT1VORCkgIT0gLTEpCi0gICAgICAgIGhyZWYgPSBocmVmLnN1YnN0cmluZygxLCBocmVmLmxlbmd0aCgpKTsKLSAgICAgIGlmICghdXNlZElkcy5jb250YWlucyhocmVmKSkKLSAgICAgIHsKLSAgICAgICAgcmVmID0gKFVSSVJlZmVyZW5jZSl1cmlSZWZlcmVuY2VzLmdldChocmVmKTsKLSAgICAgICAgaWYgKHJlZiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdXNlZElkcy5hZGQoaHJlZik7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtZW50UmVmID0gcmVmLmdldFJlZkVsZW1lbnQoKTsKLSAgICAgICAgICByZXNvbHZlZCA9IHJlZi5nZXRSZXNvbHZlZCgpOwotICAgICAgICAgIHJlc29sdmVkRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KGVsZW1lbnQuZ2V0VGFnTmFtZSgpKTsKLSAgICAgICAgICBOb2RlTGlzdCBubCA9IGVsZW1lbnRSZWYuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgcmVzb2x2ZWRFbGVtZW50LmFwcGVuZENoaWxkKGRvYy5pbXBvcnROb2RlKG5vZGUsIHRydWUpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFyZXNvbHZlZCkKLSAgICB7Ci0gICAgICBOb2RlTGlzdCBubCA9IHJlc29sdmVkRWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaSk7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgIEVsZW1lbnQgY2hpbGQgPSByZXNvbHZlVVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzLCByZXNvbHZlZEVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpLCAoRWxlbWVudClub2RlLCB1c2VkSWRzKTsKLQkJICBpZiAoY2hpbGQgIT0gbm9kZSkKLSAgICAgICAgICAgIHJlc29sdmVkRWxlbWVudC5yZXBsYWNlQ2hpbGQoY2hpbGQsIG5vZGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChocmVmICE9IG51bGwpCi0gICAgICB1c2VkSWRzLnJlbW92ZShocmVmKTsKLSAgICByZXR1cm4gcmVzb2x2ZWRFbGVtZW50OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVVJJUmVmZXJlbmNlCi0gIHsKLSAgICBwcml2YXRlIEVsZW1lbnQgcmVmXzsKLSAgICBwcml2YXRlIGJvb2xlYW4gcmVzb2x2ZWRfOwotCi0gICAgcHVibGljIFVSSVJlZmVyZW5jZShFbGVtZW50IHJlZiwgYm9vbGVhbiByZXNvbHZlZCkKLSAgICB7Ci0gICAgICByZWZfID0gcmVmOwotICAgICAgcmVzb2x2ZWRfID0gcmVzb2x2ZWQ7Ci0gICAgfQotCi0gICAgcHVibGljIEVsZW1lbnQgZ2V0UmVmRWxlbWVudCgpCi0gICAgewotICAgICAgcmV0dXJuIHJlZl87Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVmRWxlbWVudChFbGVtZW50IHJlZikKLSAgICB7Ci0gICAgICByZWZfID0gcmVmOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGdldFJlc29sdmVkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gcmVzb2x2ZWRfOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJlc29sdmVkKGJvb2xlYW4gcmVzb2x2ZWQpCi0gICAgewotICAgICAgcmVzb2x2ZWRfID0gcmVzb2x2ZWQ7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhOTJjOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEEgU09BUCBoZWFkZXIgZnJhZ21lbnQsIHdoaWNoIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIGZyYWdtZW50IHRoYXQgcmVwcmVzZW50cyB0aGUgU09BUCBoZWFkZXIgY29udGVudC4gIAotICovCi1wdWJsaWMgY2xhc3MgU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCBleHRlbmRzIFhTRERlbGVnYXRpb25GcmFnbWVudCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1VU1RfVU5ERVJTVEFORCA9ICJtdXN0VW5kZXJzdGFuZCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVE9SICAgICAgICAgICA9ICJhY3RvciI7Ci0JCi0JcHJpdmF0ZSBib29sZWFuIG11c3RVbmRlcnN0YW5kID0gZmFsc2U7CSAKLQlwcml2YXRlIFN0cmluZyAgYWN0b3IgICAgICAgICAgPSAiIjsKLQlwcml2YXRlIGJvb2xlYW4gdmFsaWRBY3RvciAgICAgPSB0cnVlOwotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBmcmFnbWVudCBUaGUgZnJhZ21lbnQgdGhhdCB0aGlzIFNPQVAgaGVhZGVyIGZyYWdtZW50IHdyYXBzIGFyb3VuZC4KLQkgKi8KLQlwdWJsaWMgU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudChJWFNERnJhZ21lbnQgZnJhZ21lbnQpIHsKLQkJc3VwZXIoZnJhZ21lbnQuZ2VuSUQoKSwgZnJhZ21lbnQuZ2V0TmFtZSgpLCBudWxsKTsJICAgIAotCQlzZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoZnJhZ21lbnQpOwotCX0KLQkKLQkvKgotCSAqIFJldHJpZXZlcyB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGEgc3RyaW5nIGFycmF5LgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldEZpcnN0RWxlbWVudChTdHJpbmdbXSBzdHJpbmdBcnJheSkgewotCQlpZiAoc3RyaW5nQXJyYXkgPT0gbnVsbCB8fCBzdHJpbmdBcnJheS5sZW5ndGggPT0gMCkKLQkJCXJldHVybiBudWxsOwotCQlyZXR1cm4gc3RyaW5nQXJyYXlbMF07CQkgCi0JfQotCQotCS8qCi0JICogUmV0cmlldmVzIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gYSB2ZWN0b3IuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0Rmlyc3RFbGVtZW50KFZlY3RvciB2ZWN0b3IpIHsKLQkJaWYgKHZlY3RvciA9PSBudWxsIHx8IHZlY3Rvci5pc0VtcHR5KCkpCi0JCQlyZXR1cm4gbnVsbDsKLQkJIAotCQlPYmplY3Qgb2JqID0gdmVjdG9yLmZpcnN0RWxlbWVudCgpOwotCQlpZiAoIShvYmogaW5zdGFuY2VvZiBTdHJpbmcpKQotCQkJcmV0dXJuIG51bGw7Ci0JCSAKLQkJcmV0dXJuIChTdHJpbmcpIG9iajsKLQl9Ci0JCi0JLyoKLQkgKiBTZXRzIHRoZSBtdXN0VW5kZXJzdGFuZCB2YWx1ZS4gQW55IG5vbi1lbXB0eSBzdHJpbmcgKGV4Y2VwdCAiMCIpCi0JICogdHJhbnNsYXRlcyB0byBhIG11c3RVbmRlcnN0YW5kIHZhbHVlIG9mIHRydWUuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldE11c3RVbmRlcnN0YW5kKFN0cmluZyBwYXJhbSkgewotCQltdXN0VW5kZXJzdGFuZCA9IChwYXJhbSAhPSBudWxsICYmICFwYXJhbS5lcXVhbHMoIjAiKSk7Ci0JfQotCQotCS8qCi0JICogU2V0cyB0aGUgYWN0b3IgdmFsdWUuICBBbHNvIHNldHMgdGhlIGZsYWcgZm9yIHZhbGlkQWN0b3IuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldEFjdG9yKFN0cmluZyBwYXJhbSkgewotCQlpZiAocGFyYW0gPT0gbnVsbCB8fCBwYXJhbS5sZW5ndGgoKSA9PSAwKQotCQkJYWN0b3IgPSAiIjsKLQkJZWxzZSB7Ci0JCQlhY3RvciA9IHBhcmFtOwotCQkJdHJ5IHsKLQkJCQluZXcgVVJJKGFjdG9yKTsKLQkJCX0KLQkJCWNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZSkgewotCQkJCXZhbGlkQWN0b3IgPSBmYWxzZTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0JCSAKLQkJIAotCQl2YWxpZEFjdG9yID0gdHJ1ZTsKLQl9CSAKLQkKLSAgICAvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCNwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyKQotCSAqLwotCXB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotCQotCQlzZXRNdXN0VW5kZXJzdGFuZChwYXJzZXIuZ2V0UGFyYW1ldGVyKGdldE11c3RVbmRlcnN0YW5kSUQoKSkpOwotCSAgICBzZXRBY3RvcihwYXJzZXIuZ2V0UGFyYW1ldGVyKGdldEFjdG9ySUQoKSkpOwotCi0JCS8vIG11c3RVbmRlcnN0YW5kIGlzIGVpdGhlciBzZXQgb3IgdW5zZXQsIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBuZWNlc3NhcnkKLQkJLy8gb25seSBuZWVkIHRvIHZhbGlkYXRlIGFjdG9yIFVSSQotCQlyZXR1cm4gc3VwZXIucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpICYmIHZhbGlkYXRlQWN0b3IoKTsJCQkgCQkgCi0JfQotCQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCNzZXRQYXJhbWV0ZXJWYWx1ZXMoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFN0cmluZ1tdIHBhcmFtcykgewotCQlpZiAoZ2V0TXVzdFVuZGVyc3RhbmRJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlzZXRNdXN0VW5kZXJzdGFuZChnZXRGaXJzdEVsZW1lbnQocGFyYW1zKSk7Ci0JCWVsc2UgaWYgKGdldEFjdG9ySUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJc2V0QWN0b3IoZ2V0Rmlyc3RFbGVtZW50KHBhcmFtcykpOwotCQllbHNlCi0JCQlzdXBlci5zZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXksIHBhcmFtcyk7CQkgCi0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I3NldFBhcmFtZXRlclZhbHVlcyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLnV0aWwuVmVjdG9yKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFZlY3RvciBwYXJhbXMpIHsKLQkJaWYgKGdldE11c3RVbmRlcnN0YW5kSUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJc2V0TXVzdFVuZGVyc3RhbmQoZ2V0Rmlyc3RFbGVtZW50KHBhcmFtcykpOwotCQllbHNlIGlmIChnZXRBY3RvcklEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXNldEFjdG9yKGdldEZpcnN0RWxlbWVudChwYXJhbXMpKTsKLQkJZWxzZQotCQkJc3VwZXIuc2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5LCBwYXJhbXMpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCNnZXRQYXJhbWV0ZXJWYWx1ZXMoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkgewotCQlpZiAoZ2V0TXVzdFVuZGVyc3RhbmRJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsgbXVzdFVuZGVyc3RhbmQgPyAiMSIgOiAiMCIgfTsKLQkJZWxzZSBpZiAoZ2V0QWN0b3JJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsgYWN0b3IgfTsKLQkJZWxzZQotCQkJcmV0dXJuIHN1cGVyLmdldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSk7CQkgCi0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I2dldFBhcmFtZXRlclZhbHVlKGphdmEubGFuZy5TdHJpbmcsIGludCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLQkJcmV0dXJuIGdldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSlbcGFyYW1JbmRleF07Ci0JfQkgCi0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkgewotCQlyZXR1cm4gc3VwZXIudmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSAmJiB2YWxpZGF0ZUFjdG9yKCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I3ZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0JCWlmIChnZXRNdXN0VW5kZXJzdGFuZElEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXJldHVybiB0cnVlOwotCQllbHNlIGlmIChnZXRBY3RvcklEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXJldHVybiB2YWxpZGF0ZUFjdG9yKCk7Ci0JCWVsc2UKLQkJCXJldHVybiBzdXBlci52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I3ZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoamF2YS5sYW5nLlN0cmluZywgaW50KQotCSAqLwotCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkgewotCQlpZiAoZ2V0TXVzdFVuZGVyc3RhbmRJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZWxzZSBpZiAoZ2V0QWN0b3JJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlyZXR1cm4gdmFsaWRhdGVBY3RvcigpOwotCQllbHNlCi0JCQlyZXR1cm4gc3VwZXIudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCk7Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlcyBmb3IgdGhpcyBTT0FQIGhlYWRlciBnaXZlbiBhbiBpbnN0YW5jZSBkb2N1bWVudCBhbmQgYSBuYW1lc3BhY2UgdGFibGUuCi0JICogCi0JICogQHBhcmFtIGluc3RhbmNlRG9jdW1lbnQgVGhlIGluc3RhbmNlIGRvY3VtZW50LgotCSAqIEBwYXJhbSBuYW1lc3BhY2VUYWJsZSBUaGUgbmFtZXNwYWNlIHRhYmxlLgotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbGwgdmFsdWVzIGV4dHJhY3RlZCBmcm9tIHRoZSBpbnN0YW5jZSBkb2N1bWVudCBhcmUgdmFsaWQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnQoRWxlbWVudCBpbnN0YW5jZURvY3VtZW50LCBNYXAgbmFtZXNwYWNlVGFibGUpIHsKLQotCQlib29sZWFuIHZhbGlkID0gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKG5ldyBFbGVtZW50W10geyBpbnN0YW5jZURvY3VtZW50IH0pOwkJCi0JCSAKLQkJU3RyaW5nIHByZWZpeCA9IG5hbWVzcGFjZVRhYmxlLmdldChGcmFnbWVudENvbnN0YW50cy5OU19VUklfU09BUF9FTlYpICsgRnJhZ21lbnRDb25zdGFudHMuQ09MT047Ci0JCSAKLQkJU3RyaW5nIG11c3RVbmRlcnN0YW5kVmFsdWUgPSBpbnN0YW5jZURvY3VtZW50LmdldEF0dHJpYnV0ZShwcmVmaXggKyBNVVNUX1VOREVSU1RBTkQpOwotCQlpZiAoIiIuZXF1YWxzKG11c3RVbmRlcnN0YW5kVmFsdWUpKQotCQkJbXVzdFVuZGVyc3RhbmQgPSBmYWxzZTsKLQkJZWxzZSBpZiAoIjAiLmVxdWFscyhtdXN0VW5kZXJzdGFuZFZhbHVlKSB8fCAiMSIuZXF1YWxzKG11c3RVbmRlcnN0YW5kVmFsdWUpKQotCQkJc2V0TXVzdFVuZGVyc3RhbmQobXVzdFVuZGVyc3RhbmRWYWx1ZSk7Ci0JCWVsc2UKLQkJCXZhbGlkID0gZmFsc2U7Ci0JCSAKLQkJc2V0QWN0b3IoaW5zdGFuY2VEb2N1bWVudC5nZXRBdHRyaWJ1dGUocHJlZml4ICsgQUNUT1IpKTsKLQkJIAotCQlyZXR1cm4gdmFsaWQgJiYgdmFsaWRhdGVBY3RvcigpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCNnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiwgamF2YS51dGlsLkhhc2h0YWJsZSwgb3JnLnczYy5kb20uRG9jdW1lbnQpCi0JICovCi0JcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykgewotCQlFbGVtZW50W10gZWxlbWVudHMgPSBzdXBlci5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0JCSAKLQkJaWYgKGVsZW1lbnRzLmxlbmd0aCA9PSAwKQotCQkJcmV0dXJuIGVsZW1lbnRzOwotCQkgCi0JCVN0cmluZyBwcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV9TT0FQX0VOViwgbmFtZXNwYWNlVGFibGUpICsgRnJhZ21lbnRDb25zdGFudHMuQ09MT047Ci0JCSAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewkJCSAJCQkgCQkJCSAKLQkJCQotCQkJaWYgKG11c3RVbmRlcnN0YW5kKQotCQkJCWVsZW1lbnRzW2ldLnNldEF0dHJpYnV0ZShwcmVmaXggKyBNVVNUX1VOREVSU1RBTkQsICIxIik7Ci0KLQkJCWlmIChhY3Rvci5sZW5ndGgoKSA+IDApCi0JCQkJZWxlbWVudHNbaV0uc2V0QXR0cmlidXRlKHByZWZpeCArIEFDVE9SLCBhY3Rvcik7Ci0JCX0KLQkJIAotCQlyZXR1cm4gZWxlbWVudHM7Ci0JfQotCSAKLQkvKioKLQkgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGdldHRpbmcgZm9yIHRoZSBtdXN0VW5kZXJzdGFuZCB2YWx1ZQotCSAqIEByZXR1cm4gVGhlIG11c3RVbmRlcnN0YW5kIHZhbHVlLCB0cnVlIGlmIG11c3RVbmRlcnN0YW5kPSIxIiwgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzTXVzdFVuZGVyc3RhbmQoKSB7Ci0JCXJldHVybiBtdXN0VW5kZXJzdGFuZDsKLQl9Ci0JIAotCS8qKgotCSAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZ2V0dGluZyB0aGUgYWN0b3IgdmFsdWUKLQkgKiBAcmV0dXJuIFRoZSBhY3RvciB2YWx1ZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0QWN0b3IoKSB7Ci0JCXJldHVybiBhY3RvcjsKLQl9Ci0JCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiB0aGUgYWN0b3IgdmFsdWUgaXMgYSB2YWxpZCBVUkkuCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBhY3RvciB2YWx1ZSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWN0b3IoKSB7CQkgCi0JCXJldHVybiB2YWxpZEFjdG9yOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgbXVzdFVuZGVyc3RhbmQgaW5wdXQgZWxlbWVudAotCSAqIEByZXR1cm4gVGhlIElEIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBpbnB1dCBlbGVtZW50Ci0JICovCi0JcHVibGljIFN0cmluZyBnZXRNdXN0VW5kZXJzdGFuZElEKCkgewotCQlyZXR1cm4gZ2V0SUQoKSArIEZyYWdtZW50Q29uc3RhbnRzLklEX1NFUEVSQVRPUiArIE1VU1RfVU5ERVJTVEFORDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSUQgb2YgdGhlIGFjdG9yIGlucHV0IGVsZW1lbnQKLQkgKiBAcmV0dXJuIFRoZSBJRCBvZiB0aGUgYWN0b3IgaW5wdXQgZWxlbWVudAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0QWN0b3JJRCgpIHsKLQkJcmV0dXJuIGdldElEKCkgKyBGcmFnbWVudENvbnN0YW50cy5JRF9TRVBFUkFUT1IgKyBBQ1RPUjsKLQl9Ci0JIAotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I2dldFdyaXRlRnJhZ21lbnQoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLQkJcmV0dXJuICIvd3NkbC9mcmFnbWVudC9TT0FQSGVhZGVyV3JhcHBlcldGcmFnbWVudEpTUC5qc3AiOwotCX0JCSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREF0dHJpYnV0ZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RBdHRyaWJ1dGVGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTUzOWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREF0dHJpYnV0ZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogCi0gKiBMaWNlbnNlZCBNYXRlcmlhbCAtIFByb3BlcnR5IG9mIElCTSAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAyIC0gQWxsIFJpZ2h0cwotICogUmVzZXJ2ZWQuIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yCi0gKiBkaXNjbG9zdXJlIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotICogCi0gKiA8L2NvcHlyaWdodD4KLSAqIAotICogRmlsZQotICogcGx1Z2lucy9jb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyL3dzZXhwbG9yZXIvc3JjL2NvbS9pYm0vZXRvb2xzL3dlYnNlcnZpY2UvZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9JbXBsL1hTREVsZW1lbnRGcmFnbWVudC5qYXZhLAotICogd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIsIDIwMDMxMjMxYSA1IFZlcnNpb24gMS41IDAzLzA5LzI0Ci0gKiAxNDozMDozOAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREF0dHJpYnV0ZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERm9ybTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYU0RBdHRyaWJ1dGVGcmFnbWVudCBleHRlbmRzIFhTRERlbGVnYXRpb25GcmFnbWVudCBpbXBsZW1lbnRzIElYU0RBdHRyaWJ1dGVGcmFnbWVudAotewotICAgCi0gIAotICBwdWJsaWMgWFNEQXR0cmlidXRlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgCi0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBJWFNERnJhZ21lbnQgYXR0cmlidXRlVHlwZUZyYWdtZW50ID0gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgCQotICAgIGlmICghYXR0cmlidXRlVHlwZUZyYWdtZW50LnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKQotICB7Ci0gICAgSVhTREZyYWdtZW50IGF0dHJpYnV0ZVR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIGlmICghYXR0cmlidXRlVHlwZUZyYWdtZW50LnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpCi0gIHsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkKLSAgewotICAgIGlmICghZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlci5zZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihjb25maWcpOwotICAgIAotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBpbnN0YW5jZURvY3VtZW50czsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFN0cmluZyB3c2RsUGFydE5hbWUgPSBjb25maWcuZ2V0V1NETFBhcnROYW1lKCk7Ci0gICAgTm9kZUxpc3QgbmwgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbMF0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAKLSAgICAKLSAgICAKLSAgICBpZiAoY29uZmlnLmdldElzV1NETFBhcnQoKSAmJiBjb25maWcuZ2V0U3R5bGUoKSA9PSBGcmFnbWVudENvbnN0YW50cy5TVFlMRV9SUEMgJiYgd3NkbFBhcnROYW1lICE9IG51bGwgJiYgd3NkbFBhcnROYW1lLmxlbmd0aCgpID4gMCAmJiBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoID09IDEgJiYgd3NkbFBhcnROYW1lLmVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHlbMF0uZ2V0VGFnTmFtZSgpKSkKLSAgICB7Ci0gICAgICBWZWN0b3IgY2hpbGRFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShpKTsKLSAgICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSl7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50cy5hZGQobm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IChFbGVtZW50W10pY2hpbGRFbGVtZW50cy50b0FycmF5KG5ldyBFbGVtZW50WzBdKTsKLSAgICB9Ci0gICAgSVhTREZyYWdtZW50IGF0dHJpYnV0ZVR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgZ2V0TmFtZSgpKTsKLSAgICByZXR1cm4gYXR0cmlidXRlVHlwZUZyYWdtZW50LnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhzZXRFbGVtZW50c1RhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBhdHRyaWJ1dGVUeXBlRnJhZ21lbnQuZ2V0TmFtZSgpKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0luc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkKLSAgewotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgaWYgKGNvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSA9PSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19MSVRFUkFMKQotICAgIHsKLSAgICAgIFhTREF0dHJpYnV0ZVVzZSB4c2RBdHRyaWJ1dGVVc2UgPSAoWFNEQXR0cmlidXRlVXNlKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIHhzZEF0dHJpYnV0ZSA9IChYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbil4c2RBdHRyaWJ1dGVVc2UuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKTsKLSAgICAgIGlmICh4c2RBdHRyaWJ1dGUuaXNHbG9iYWwoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICh4c2RBdHRyaWJ1dGUuaXNTZXRGb3JtKCkpCi0gICAgICAgICAgcmV0dXJuICh4c2RBdHRyaWJ1dGUuZ2V0Rm9ybSgpLmdldFZhbHVlKCkgPT0gWFNERm9ybS5RVUFMSUZJRUQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuICh4c2RBdHRyaWJ1dGUuZ2V0U2NoZW1hKCkuZ2V0QXR0cmlidXRlRm9ybURlZmF1bHQoKS5nZXRWYWx1ZSgpID09IFhTREZvcm0uUVVBTElGSUVEKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShIYXNodGFibGUgbmFtZXNwYWNlVGFibGUpCi0gIHsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFhTREF0dHJpYnV0ZVVzZSB4c2RBdHRyaWJ1dGVVc2UgPSAoWFNEQXR0cmlidXRlVXNlKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiB4c2RBdHRyaWJ1dGUgPSB4c2RBdHRyaWJ1dGVVc2UuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKTsKLSAgICAKLSAgICBTdHJpbmdCdWZmZXIgdGFnTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBpZiAoaXNJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBuc1VSSSA9IG51bGw7Ci0gICAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgICAgaWYgKHhzZEF0dHJpYnV0ZS5nZXRSZXNvbHZlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgbnNVUkkgPSB4c2RBdHRyaWJ1dGUuZ2V0UmVzb2x2ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgZWxzZQotICAgICAgICBuc1VSSSA9IHhzZEF0dHJpYnV0ZS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIGlmIChuc1VSSSAhPSBudWxsICYmIG5zVVJJLmxlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkobnNVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgdGFnTmFtZS5hcHBlbmQocHJlZml4KTsKLSAgICAgICAgdGFnTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgfQotICAgIH0KLSAgICBTdHJpbmcgeHNkQXR0cmlidXRlTmFtZSA9IHhzZEF0dHJpYnV0ZS5nZXROYW1lKCk7Ci0gICAgaWYgKHhzZEF0dHJpYnV0ZU5hbWUgPT0gbnVsbCB8fCB4c2RBdHRyaWJ1dGVOYW1lLmxlbmd0aCgpIDw9IDApCi0gICAgewotICAgICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICAgIGlmICh4c2RBdHRyaWJ1dGUuZ2V0UmVzb2x2ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICAJeHNkQXR0cmlidXRlTmFtZSA9IHhzZEF0dHJpYnV0ZS5nZXRSZXNvbHZlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAgICAgZWxzZQotICAgICAgCXhzZEF0dHJpYnV0ZU5hbWUgPSBnZXROYW1lKCk7Ci0gICAgfQotICAgIHRhZ05hbWUuYXBwZW5kKHhzZEF0dHJpYnV0ZU5hbWUpOwotICAgIHJldHVybiB0YWdOYW1lLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAKLQotICAKLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0ZUZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0ZUZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleEZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4Rml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJjZjVkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4Rml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RDb21wbGV4Rml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RDb21wbGV4RnJhZ21lbnQgewotICBwdWJsaWMgWFNEQ29tcGxleEZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4Rml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZmFjYjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA1MTYgICAxODU1OTYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBtaXNpbnRlcnByZXRzIHJlc3BvbnNlIG1lc3NhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEQXR0cmlidXRlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRENvbXBsZXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5YU0RUeXBlRGVmaW5pdGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4RmluYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RDb21wbGV4RnJhZ21lbnQgZXh0ZW5kcyBYU0RNYXBGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RDb21wbGV4RnJhZ21lbnQKLXsKLSAgcHVibGljIFhTRENvbXBsZXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldE5hbWUoKSk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgc2V0UGFyYW1zRm9yWFNEVHlwZURlZihpbnN0YW5jZURvY3VtZW50c0NvcHkpOwotICAgIGVsc2UKLSAgICAgIHNldFBhcmFtc0ZvclhTRFBhcnRpY2xlKGluc3RhbmNlRG9jdW1lbnRzQ29weSk7IAotICAgIHJldHVybiBzZXRQYXJhbXNGb3JBdHRyaWJ1dGVzKGluc3RhbmNlRG9jdW1lbnRzQ29weSkgJiYgcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpewotICAJYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gIAkKLSAgCVN0cmluZ1tdIGZyYWdtZW50c09yZGVyID0gZ2V0RnJhZ21lbnRzT3JkZXIoKTsKLSAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKyl7Ci0gIAkgIAotICAJICBpZiAoaSA+PSBmcmFnbWVudHNPcmRlci5sZW5ndGgpIGJyZWFrOwotICAJICBTdHJpbmcgZnJhZ21lbnRJRCA9IGZyYWdtZW50c09yZGVyW2ldOwotCi0gIAkgIGZvciAoaW50IGsgPSAwOyBrIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaysrKXsKLSAgCQlpZihhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0SUQoKS5zdGFydHNXaXRoKGZyYWdtZW50SUQpKXsKLSAgCQkgIE5hbWVkTm9kZU1hcCBub2RlTWFwID0gaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0QXR0cmlidXRlcygpOwotICAJICAJICBTdHJpbmcgbmFtZSA9ICgoWFNEQXR0cmlidXRlVXNlKWF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpKS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgCSAgICAgIHBhcmFtc1ZhbGlkID0gYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldEF0dHJpYnV0ZVBhcmFtc0Zyb21JbnN0YW5jZURvY3VtZW50cyhub2RlTWFwLmdldE5hbWVkSXRlbShuYW1lKSk7Ci0gIAkJfQotICAgICAgfQotICAJfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvclhTRFR5cGVEZWYoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUluc3RhbmNlKCkpOwotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFsxXTsKLSAgICAgIGNoaWxkSW5zdGFuY2VEb2N1bWVudHNbMF0gPSBpbnN0YW5jZURvY3VtZW50c1tpXTsKLSAgICAgIGlmICghY2hpbGRGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhzZXRFbGVtZW50c1RhZ05hbWUoY2hpbGRJbnN0YW5jZURvY3VtZW50cywgY2hpbGRGcmFnLmdldE5hbWUoKSkpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yWFNEUGFydGljbGUoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUluc3RhbmNlKCkpOwotICAgICAgVmVjdG9yIGluc3RhbmNlc1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIE5vZGVMaXN0IG5sID0gaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBubC5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGopOwotICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgaW5zdGFuY2VzVmVjdG9yLmFkZChub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlc1ZlY3Rvci5zaXplKCldOwotICAgICAgaW5zdGFuY2VzVmVjdG9yLmNvcHlJbnRvKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpOwotICAgICAgaWYgKCFjaGlsZEZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHM7Ci0gICAgU3RyaW5nIHRhZ05hbWUgPSBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgaW5zdGFuY2VEb2N1bWVudHMgPSBnZW5JbnN0YW5jZXNGb3JYU0RUeXBlRGVmKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCB0YWdOYW1lLCBkb2MpOwotICAgIGVsc2UKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gZ2VuSW5zdGFuY2VzRm9yWFNEUGFydGljbGUoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIHRhZ05hbWUsIGRvYyk7Ci0gICAgICBpZihnZW5YU0lUeXBlKSBhZGRYU0lUeXBlKGluc3RhbmNlRG9jdW1lbnRzLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGFkZEF0dHJpYnV0ZXMoaW5zdGFuY2VEb2N1bWVudHMpOwotCXJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudFtdIGFkZEF0dHJpYnV0ZXMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKXsKLSAgCQotCVN0cmluZ1tdIGZyYWdtZW50c09yZGVyID0gZ2V0RnJhZ21lbnRzT3JkZXIoKTsKLSAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAJZm9yIChpbnQgaSA9IDA7aTwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoO2krKyl7Ci0KLSAgCSAgaWYgKGkgPj0gZnJhZ21lbnRzT3JkZXIubGVuZ3RoKSBicmVhazsKLSAgIAkgIFN0cmluZyBmcmFnbWVudElEID0gZnJhZ21lbnRzT3JkZXJbaV07Ci0gIAkJCi0gICAgICBmb3IgKGludCBrID0gMDsgayA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGsrKyl7Ci0gICAgCWlmKGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRJRCgpLnN0YXJ0c1dpdGgoZnJhZ21lbnRJRCkpewotICAgIAkgIFN0cmluZyBuYW1lID0gKChYU0RBdHRyaWJ1dGVVc2UpYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCkpLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAgIAkgIGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRBdHRyaWJ1dGVzT25JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZURvY3VtZW50c1tpXSxuYW1lKTsKLSAgICAJfQotICAgICAgfQotICAgCX0KLSAgIAlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgRWxlbWVudFtdIGdlbkluc3RhbmNlc0ZvclhTRFR5cGVEZWYoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIFN0cmluZyB0YWdOYW1lLCBEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBWZWN0b3IgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnRbXSBmcmFnbWVudEluc3RhbmNlcyA9IGZyYWdtZW50c1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gICAgICBpZiAoZnJhZ21lbnRJbnN0YW5jZXMubGVuZ3RoID4gMCkKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5LmFkZChmcmFnbWVudEluc3RhbmNlc1swXSk7Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRzQ29weS5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSAoRWxlbWVudClpbnN0YW5jZURvY3VtZW50c0NvcHkuZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCB0YWdOYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudFtdIGdlbkluc3RhbmNlc0ZvclhTRFBhcnRpY2xlKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBTdHJpbmcgdGFnTmFtZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2NoaWxkRnJhZ3MubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlcyA9IGNoaWxkRnJhZ3NbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgRWxlbWVudCBpbnN0YW5jZURvY3VtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNoaWxkSW5zdGFuY2VzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoY2hpbGRJbnN0YW5jZXNbal0gIT0gbnVsbCkKLSAgICAgICAgICBpbnN0YW5jZURvY3VtZW50LmFwcGVuZENoaWxkKGNoaWxkSW5zdGFuY2VzW2pdKTsKLSAgICAgIH0KLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gaW5zdGFuY2VEb2N1bWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RNb2RlbEdyb3VwIGdldFhTRE1vZGVsR3JvdXAoWFNEUGFydGljbGUgeHNkUGFydGljbGUpCi0gIHsKLSAgICBpZiAoeHNkUGFydGljbGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgeHNkUGFydGljbGVDb250ZW50ID0geHNkUGFydGljbGUuZ2V0Q29udGVudCgpOwotICAgICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoeHNkUGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cERlZmluaXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiB4c2RNb2RlbEdyb3VwRGVmID0gKFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKXhzZFBhcnRpY2xlQ29udGVudDsKLSAgICAgICAgICBpZiAoeHNkTW9kZWxHcm91cERlZi5pc01vZGVsR3JvdXBEZWZpbml0aW9uUmVmZXJlbmNlKCkpCi0gICAgICAgICAgICB4c2RNb2RlbEdyb3VwRGVmID0geHNkTW9kZWxHcm91cERlZi5nZXRSZXNvbHZlZE1vZGVsR3JvdXBEZWZpbml0aW9uKCk7Ci0gICAgICAgICAgcmV0dXJuIHhzZE1vZGVsR3JvdXBEZWYuZ2V0TW9kZWxHcm91cCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApCi0gICAgICAgICAgcmV0dXJuIChYU0RNb2RlbEdyb3VwKXhzZFBhcnRpY2xlQ29udGVudDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0SW5oZXJpdGVkUGFydGljbGVzKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSkKLSAgewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChjb21wbGV4VHlwZS5nZXREZXJpdmF0aW9uTWV0aG9kKCkuZ2V0VmFsdWUoKSA9PSBYU0RDb21wbGV4RmluYWwuRVhURU5TSU9OKQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIGV4dFR5cGUgPSBjb21wbGV4VHlwZS5nZXRCYXNlVHlwZSgpOwotICAgICAgaWYgKGV4dFR5cGUgIT0gbnVsbCAmJiAhKGV4dFR5cGUgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZXh0VHlwZS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgU3RyaW5nIGxvY2FsbmFtZSA9IGV4dFR5cGUuZ2V0TmFtZSgpOwotICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwgJiYgbG9jYWxuYW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBYU0ROYW1lZENvbXBvbmVudCB4c2ROYW1lZENvbXAgPSBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpLmdldFhTRFR5cGVGcm9tU2NoZW1hKG5hbWVzcGFjZSwgbG9jYWxuYW1lLCBmYWxzZSk7Ci0gICAgICAgICAgaWYgKHhzZE5hbWVkQ29tcCBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBleHRUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbil4c2ROYW1lZENvbXA7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoZXh0VHlwZSAhPSBudWxsICYmIGV4dFR5cGUgIT0gY29tcGxleFR5cGUgJiYgZXh0VHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGV4dFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudCgoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWV4dFR5cGUpOwotICAgICAgICBpZiAoZXh0VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkKLSAgICAgICAgewotICAgICAgICAgIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCA9IGdldFhTRE1vZGVsR3JvdXAoKFhTRFBhcnRpY2xlKWV4dFR5cGVDb250ZW50KTsKLSAgICAgICAgICBpZiAoeHNkTW9kZWxHcm91cCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHYuYWRkQWxsKGdldEluaGVyaXRlZFBhcnRpY2xlcygoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWV4dFR5cGUpKTsKLSAgICAgICAgICAgIHYuYWRkQWxsKHhzZE1vZGVsR3JvdXAuZ2V0UGFydGljbGVzKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdjsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBnYXRoZXJJbmhlcml0ZWRQYXJ0aWNsZXMoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlKQotICB7Ci0gICAgaWYgKGNvbXBsZXhUeXBlLmdldERlcml2YXRpb25NZXRob2QoKS5nZXRWYWx1ZSgpID09IFhTRENvbXBsZXhGaW5hbC5FWFRFTlNJT04pCi0gICAgewotICAgICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKQotICAgICAgewotICAgICAgICBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXAgPSBnZXRYU0RNb2RlbEdyb3VwKChYU0RQYXJ0aWNsZSljb21wbGV4VHlwZUNvbnRlbnQpOwotICAgICAgICBpZiAoeHNkTW9kZWxHcm91cCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdCBpbmhlcml0ZWRQYXJ0aWNsZXMgPSBnZXRJbmhlcml0ZWRQYXJ0aWNsZXMoY29tcGxleFR5cGUpOwotICAgICAgICAgIExpc3QgcGFydGljbGVzID0geHNkTW9kZWxHcm91cC5nZXRQYXJ0aWNsZXMoKTsKLSAgICAgICAgICBwYXJ0aWNsZXMuYWRkQWxsKDAsIGluaGVyaXRlZFBhcnRpY2xlcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAKLSAgCi0gIHB1YmxpYyBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKQotICB7Ci0gIAlyZXR1cm4gc3VwZXIuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7CQkKLSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUF0dHJpYnV0ZUZyYWdtZW50cyhTdHJpbmcgY29tcGxleENoaWxkSUQpCi0gIHsKLSAgCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgCUVMaXN0IGF0Q29udGVudExpc3QgPSBjb21wbGV4VHlwZS5nZXRBdHRyaWJ1dGVDb250ZW50cygpOwotICAJSXRlcmF0b3IgaXRlcmF0b3IgPSBhdENvbnRlbnRMaXN0Lml0ZXJhdG9yKCk7Ci0gIAl3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpewotICAJICBPYmplY3Qgb2JqZWN0ID0gKE9iamVjdClpdGVyYXRvci5uZXh0KCk7Ci0gIAkgIGlmKG9iamVjdCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbil7Ci0gIAkJWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uIHhzZEFHRCA9IChYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pb2JqZWN0OwotICAJCVhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiByZXNvbHZlZCA9IHhzZEFHRC5nZXRSZXNvbHZlZEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbigpOwotICAJCUVMaXN0IGFMaXN0ID0gcmVzb2x2ZWQuZ2V0Q29udGVudHMoKTsKLSAgCQlJdGVyYXRvciBpdGVyYXRvcjIgPSBhTGlzdC5pdGVyYXRvcigpOwotICAJCXdoaWxlKGl0ZXJhdG9yMi5oYXNOZXh0KCkpewotICAJCQljcmVhdGVBdHRyaWJ1dGVIZWxwZXIoKFhTREF0dHJpYnV0ZVVzZSlpdGVyYXRvcjIubmV4dCgpLGNvbXBsZXhDaGlsZElEKTsKLSAgCQl9Ci0gIAkgIH0KLSAgCSAgZWxzZXsKLSAgCSAgICBYU0RBdHRyaWJ1dGVVc2UgYXR0VXNlID0gIChYU0RBdHRyaWJ1dGVVc2Upb2JqZWN0OwotICAJICAgIGNyZWF0ZUF0dHJpYnV0ZUhlbHBlcihhdHRVc2UsY29tcGxleENoaWxkSUQpOwotICAJICB9Ci0gIAkgIAotICAJfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgY3JlYXRlQXR0cmlidXRlSGVscGVyKFhTREF0dHJpYnV0ZVVzZSBhdHRVc2UsU3RyaW5nIGNvbXBsZXhDaGlsZElEKXsKLQkgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHRoaXNDb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICB4c2RDb25maWcuc2V0WFNEQ29tcG9uZW50KGF0dFVzZSk7Ci0gICAgICB4c2RDb25maWcuc2V0U3R5bGUodGhpc0NvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgICB4c2RDb25maWcuc2V0V1NETFBhcnROYW1lKHRoaXNDb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgICAgU3RyaW5nIG5ld0lEID0gZ2VuSUQoKTsKLSAgICAgIGFkZEF0dHJpYnV0ZUZyYWdtZW50KGNvbXBsZXhDaGlsZElEICsgbmV3SUQsIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoeHNkQ29uZmlnLGNvbXBsZXhDaGlsZElEICsgbmV3SUQsIGNvbXBsZXhDaGlsZElEICsgbmV3SUQpKTsKLSAgCSAgCi0gIH0KLSAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpCi0gIHsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgZ2F0aGVySW5oZXJpdGVkUGFydGljbGVzKGNvbXBsZXhUeXBlKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gdGhpc0NvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgeHNkQ29uZmlnLnNldFhTRENvbXBvbmVudChjb21wbGV4VHlwZUNvbnRlbnQpOwotICAgIHhzZENvbmZpZy5zZXRTdHlsZSh0aGlzQ29uZmlnLmdldFN0eWxlKCkpOwotICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgeHNkQ29uZmlnLnNldFdTRExQYXJ0TmFtZSh0aGlzQ29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICBTdHJpbmcgbmV3SUQgPSBnZW5JRCgpOwotICAgIGFkZEZyYWdtZW50KG5ld0lELCBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldEZyYWdtZW50KHhzZENvbmZpZywgbmV3SUQsIGdldE5hbWUoKSkpOwotICAgIGNyZWF0ZUF0dHJpYnV0ZUZyYWdtZW50cyhuZXdJRCk7Ci0gICAgcmV0dXJuIG5ld0lEOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlQ29tcGxleEluc3RhbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4UmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjliZDhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RDb21wbGV4RnJhZ21lbnQgewotICBwdWJsaWMgWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNWEzMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qKgotKiA8Y29weXJpZ2h0PgotKgotKiBMaWNlbnNlZCBNYXRlcmlhbCAtIFByb3BlcnR5IG9mIElCTQotKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAyIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZQotKiByZXN0cmljdGVkIGJ5IEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4KLSoKLSogPC9jb3B5cmlnaHQ+Ci0qCi0qIEZpbGUgcGx1Z2lucy9jb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyL3dzZXhwbG9yZXIvc3JjL2NvbS9pYm0vZXRvb2xzL3dlYnNlcnZpY2UvZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9JbXBsL1hTRENvbXBsZXhGaXhGcmFnbWVudC5qYXZhLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiAxCi0qIFZlcnNpb24gMS4xIDAzLzAyLzI4IDE1OjI1OjE1Ci0qLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREF0dHJpYnV0ZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLlhTRFR5cGVEZWZpbml0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RDb21wbGV4RnJhZ21lbnQgewotICBwdWJsaWMgWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIAotICAKLSAgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSBpbnRlcm5hbEVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHksIGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgIHJldHVybiBzZXRQYXJhbXNGb3JYU0RUeXBlRGVmKGluc3RhbmNlRG9jdW1lbnRzQ29weSkgJiYgcGFyYW1zVmFsaWQ7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHNldFBhcmFtc0ZvclhTRFBhcnRpY2xlKGluc3RhbmNlRG9jdW1lbnRzQ29weSkgJiYgcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQsSVhTREZyYWdtZW50IGZyYWcpewotICAJYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gIAkKLSAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBpKyspewotICAJICBpZihhdHRyaWJ1dGVGcmFnbWVudHNbaV0uZ2V0SUQoKS5zdGFydHNXaXRoKGZyYWcuZ2V0SUQoKSkpeyAgCi0gIAkgIAkgIE5hbWVkTm9kZU1hcCBub2RlTWFwID0gaW5zdGFuY2VEb2N1bWVudC5nZXRBdHRyaWJ1dGVzKCk7CQotICAJICAgICAgU3RyaW5nIG5hbWUgPSAoKFhTREF0dHJpYnV0ZVVzZSlhdHRyaWJ1dGVGcmFnbWVudHNbaV0uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKSkuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gIAkgICAgICBwYXJhbXNWYWxpZCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tpXS5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRBdHRyaWJ1dGVQYXJhbXNGcm9tSW5zdGFuY2VEb2N1bWVudHMobm9kZU1hcC5nZXROYW1lZEl0ZW0obmFtZSkpOwkKLSAgICAgIH0KLSAgCX0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JYU0RUeXBlRGVmKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIHJlbW92ZUFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWcgPSBnZXRGcmFnbWVudChjcmVhdGVJbnN0YW5jZSgpKTsKLSAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbMV07Ci0gICAgICBjaGlsZEluc3RhbmNlRG9jdW1lbnRzWzBdID0gaW5zdGFuY2VEb2N1bWVudHNbaV07Ci0gICAgICBpZiAoIWNoaWxkRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoc2V0RWxlbWVudHNUYWdOYW1lKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMsIGNoaWxkRnJhZy5nZXROYW1lKCkpKSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIHNldFBhcmFtc0ZvckF0dHJpYnV0ZXMoY2hpbGRJbnN0YW5jZURvY3VtZW50c1swXSxjaGlsZEZyYWcpOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yWFNEUGFydGljbGUoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUluc3RhbmNlKCkpOwotICAgICAgVmVjdG9yIGluc3RhbmNlc1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIAotICAgICAgTm9kZUxpc3QgbmwgPSBpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5sLmdldExlbmd0aCgpOyBqKyspIHsKLSAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShqKTsKLSAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIGluc3RhbmNlc1ZlY3Rvci5hZGQobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZXNWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgIGluc3RhbmNlc1ZlY3Rvci5jb3B5SW50byhjaGlsZEluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICAgIGlmICghY2hpbGRGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhjaGlsZEluc3RhbmNlRG9jdW1lbnRzKSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIHNldFBhcmFtc0ZvckF0dHJpYnV0ZXMoY2hpbGRJbnN0YW5jZURvY3VtZW50c1tpXSxjaGlsZEZyYWcpOwotICAgIAotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSxEb2N1bWVudCBkb2MpIHsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50czsKLSAgICBTdHJpbmcgdGFnTmFtZSA9IGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKTsKLSAgICBpZiAoY29tcGxleFR5cGVDb250ZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGdlbkluc3RhbmNlc0ZvclhTRFR5cGVEZWYoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIHRhZ05hbWUsZG9jKTsKLSAgICBlbHNlCi0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGdlbkluc3RhbmNlc0ZvclhTRFBhcnRpY2xlKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCB0YWdOYW1lLGRvYyk7Ci0gICAgICBpZihnZW5YU0lUeXBlKSBhZGRYU0lUeXBlKGluc3RhbmNlRG9jdW1lbnRzLCBuYW1lc3BhY2VUYWJsZSk7Ci0gIAlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgYWRkQXR0cmlidXRlcyhFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQsIElYU0RGcmFnbWVudCBmcmFnbWVudCwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlICl7Ci0gIAkKLSAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaysrKXsKLSAgICAgIGlmKGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRJRCgpLnN0YXJ0c1dpdGgoZnJhZ21lbnQuZ2V0SUQoKSkpewotICAgICAgICBTdHJpbmcgbmFtZSA9ICgoWFNEQXR0cmlidXRlVXNlKWF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpKS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICAgICAgYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldEF0dHJpYnV0ZXNPbkluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnQsbmFtZSk7CQotICAgICAgfQotICAgIH0KLSAgIAkKLSAgIAlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudDsKLSAgfQotICAKLSAgcHJpdmF0ZSBFbGVtZW50W10gZ2VuSW5zdGFuY2VzRm9yWFNEVHlwZURlZihib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgU3RyaW5nIHRhZ05hbWUsRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgVmVjdG9yIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgRWxlbWVudFtdIGZyYWdtZW50SW5zdGFuY2VzID0gZnJhZ21lbnRzW2ldLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSxkb2MpOwotICAgICAgaWYgKGZyYWdtZW50SW5zdGFuY2VzLmxlbmd0aCA+IDApewotICAgICAgCWZyYWdtZW50SW5zdGFuY2VzWzBdID0gYWRkQXR0cmlidXRlcyhmcmFnbWVudEluc3RhbmNlc1swXSxmcmFnbWVudHNbaV0sbmFtZXNwYWNlVGFibGUpOwotICAgICAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkuYWRkKGZyYWdtZW50SW5zdGFuY2VzWzBdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VEb2N1bWVudHNDb3B5LnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSAoRWxlbWVudClpbnN0YW5jZURvY3VtZW50c0NvcHkuZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCB0YWdOYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudFtdIGdlbkluc3RhbmNlc0ZvclhTRFBhcnRpY2xlKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBTdHJpbmcgdGFnTmFtZSxEb2N1bWVudCBkb2MpIHsKLSAgICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbY2hpbGRGcmFncy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VzID0gY2hpbGRGcmFnc1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsZG9jKTsKLSAgICAgICAgCi0gICAgICAgIEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNoaWxkSW5zdGFuY2VzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgaWYgKGNoaWxkSW5zdGFuY2VzW2pdICE9IG51bGwpewotICAgICAgICAgIAlhZGRBdHRyaWJ1dGVzKGNoaWxkSW5zdGFuY2VzW2pdLGNoaWxkRnJhZ3NbaV0sbmFtZXNwYWNlVGFibGUpOyAKLSAgICAgICAgICAJaW5zdGFuY2VEb2N1bWVudC5hcHBlbmRDaGlsZChkb2MuaW1wb3J0Tm9kZShjaGlsZEluc3RhbmNlc1tqXSwgdHJ1ZSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IGluc3RhbmNlRG9jdW1lbnQ7Ci0gICAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOWJiODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci9zcmMvY29tL2libS9ldG9vbHMvd2Vic2VydmljZS9leHBsb3Jlci93c2RsL2ZyYWdtZW50L0ltcGwvWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQuamF2YSwgd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIgMQotKiBWZXJzaW9uIDEuMSAwMy8wMi8yOCAxNToyNToxOAotKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RBdHRyaWJ1dGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5YU0RUeXBlRGVmaW5pdGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50IHsKLSAgcHVibGljIFhTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldE5hbWUoKSk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgcmV0dXJuIHNldFBhcmFtc0ZvclhTRFR5cGVEZWYoaW5zdGFuY2VEb2N1bWVudHNDb3B5KSAmJiBwYXJhbXNWYWxpZDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gc2V0UGFyYW1zRm9yWFNEUGFydGljbGUoaW5zdGFuY2VEb2N1bWVudHNDb3B5KSAmJiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JBdHRyaWJ1dGVzKEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCxJWFNERnJhZ21lbnQgZnJhZyl7Ci0gIAlib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgCQotICAJSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIAlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGkrKyl7Ci0gIAkgIGlmKGF0dHJpYnV0ZUZyYWdtZW50c1tpXS5nZXRJRCgpLnN0YXJ0c1dpdGgoZnJhZy5nZXRJRCgpKSl7ICAKLSAgCSAgCSAgTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBpbnN0YW5jZURvY3VtZW50LmdldEF0dHJpYnV0ZXMoKTsJCi0gIAkgICAgICBTdHJpbmcgbmFtZSA9ICgoWFNEQXR0cmlidXRlVXNlKWF0dHJpYnV0ZUZyYWdtZW50c1tpXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpKS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgCSAgICAgIHBhcmFtc1ZhbGlkID0gYXR0cmlidXRlRnJhZ21lbnRzW2ldLmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldEF0dHJpYnV0ZVBhcmFtc0Zyb21JbnN0YW5jZURvY3VtZW50cyhub2RlTWFwLmdldE5hbWVkSXRlbShuYW1lKSk7CQotICAgICAgfQotICAJfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvclhTRFR5cGVEZWYoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUluc3RhbmNlKCkpOwotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFsxXTsKLSAgICAgIGNoaWxkSW5zdGFuY2VEb2N1bWVudHNbMF0gPSBpbnN0YW5jZURvY3VtZW50c1tpXTsKLSAgICAgIGlmICghY2hpbGRGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhzZXRFbGVtZW50c1RhZ05hbWUoY2hpbGRJbnN0YW5jZURvY3VtZW50cywgY2hpbGRGcmFnLmdldE5hbWUoKSkpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhjaGlsZEluc3RhbmNlRG9jdW1lbnRzWzBdLGNoaWxkRnJhZyk7Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JYU0RQYXJ0aWNsZShFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICByZW1vdmVBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnID0gZ2V0RnJhZ21lbnQoY3JlYXRlSW5zdGFuY2UoKSk7Ci0gICAgICBWZWN0b3IgaW5zdGFuY2VzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgCi0gICAgICBOb2RlTGlzdCBubCA9IGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmwuZ2V0TGVuZ3RoKCk7IGorKykgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGopOwotICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgaW5zdGFuY2VzVmVjdG9yLmFkZChub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlc1ZlY3Rvci5zaXplKCldOwotICAgICAgaW5zdGFuY2VzVmVjdG9yLmNvcHlJbnRvKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpOwotICAgICAgaWYgKCFjaGlsZEZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhjaGlsZEluc3RhbmNlRG9jdW1lbnRzW2ldLGNoaWxkRnJhZyk7Ci0gICAgCi0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLERvY3VtZW50IGRvYykgewotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzOwotICAgIFN0cmluZyB0YWdOYW1lID0gZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpOwotICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gZ2VuSW5zdGFuY2VzRm9yWFNEVHlwZURlZihnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgdGFnTmFtZSwgZG9jKTsKLSAgICBlbHNlCi0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGdlbkluc3RhbmNlc0ZvclhTRFBhcnRpY2xlKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCB0YWdOYW1lLCBkb2MpOwotICAgICAgaWYoZ2VuWFNJVHlwZSkgYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50cywgbmFtZXNwYWNlVGFibGUpOwotICAJcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGFkZEF0dHJpYnV0ZXMoRWxlbWVudCBpbnN0YW5jZURvY3VtZW50LCBJWFNERnJhZ21lbnQgZnJhZ21lbnQsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSApewotICAJCi0gIAlJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBrID0gMDsgayA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGsrKyl7Ci0gICAgICBpZihhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0SUQoKS5zdGFydHNXaXRoKGZyYWdtZW50LmdldElEKCkpKXsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAoKFhTREF0dHJpYnV0ZVVzZSlhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKSkuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gICAgICAgIGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRBdHRyaWJ1dGVzT25JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZURvY3VtZW50LG5hbWUpOwkKLSAgICAgIH0KLSAgICB9Ci0gICAJCi0gICAJcmV0dXJuIGluc3RhbmNlRG9jdW1lbnQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgRWxlbWVudFtdIGdlbkluc3RhbmNlc0ZvclhTRFR5cGVEZWYoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIFN0cmluZyB0YWdOYW1lLERvY3VtZW50IGRvYykKLSAgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIEVsZW1lbnRbXSBmcmFnbWVudEluc3RhbmNlcyA9IGZyYWdtZW50c1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsZG9jKTsKLSAgICAgIGlmIChmcmFnbWVudEluc3RhbmNlcy5sZW5ndGggPiAwKXsKLSAgICAgIAlmcmFnbWVudEluc3RhbmNlc1swXSA9IGFkZEF0dHJpYnV0ZXMoZnJhZ21lbnRJbnN0YW5jZXNbMF0sZnJhZ21lbnRzW2ldLG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5LmFkZChmcmFnbWVudEluc3RhbmNlc1swXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRzQ29weS5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gKEVsZW1lbnQpaW5zdGFuY2VEb2N1bWVudHNDb3B5LmdldChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNldEVsZW1lbnRzVGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgdGFnTmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnRbXSBnZW5JbnN0YW5jZXNGb3JYU0RQYXJ0aWNsZShib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgU3RyaW5nIHRhZ05hbWUsRG9jdW1lbnQgZG9jKSB7Ci0gICAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2NoaWxkRnJhZ3MubGVuZ3RoXTsKLSAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VzID0gY2hpbGRGcmFnc1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gICAgICAgIAotICAgICAgICBFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGlsZEluc3RhbmNlcy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGlmIChjaGlsZEluc3RhbmNlc1tqXSAhPSBudWxsKXsKLSAgICAgICAgICAJYWRkQXR0cmlidXRlcyhjaGlsZEluc3RhbmNlc1tqXSxjaGlsZEZyYWdzW2ldLG5hbWVzcGFjZVRhYmxlKTsgCi0gICAgICAgICAgCWluc3RhbmNlRG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jLmltcG9ydE5vZGUoY2hpbGRJbnN0YW5jZXNbal0sIHRydWUpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSBpbnN0YW5jZURvY3VtZW50OwotICAgICAgfQotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIAotICAKLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0REZWZhdWx0RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRERlZmF1bHRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTliZDBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRERlZmF1bHRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYU0REZWZhdWx0RnJhZ21lbnQgZXh0ZW5kcyBYU0RGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0REZWZhdWx0RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBTdHJpbmdbXSBwYXJhbSA9IG5ldyBTdHJpbmdbMV07Ci0gICAgcGFyYW1bMF0gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKGdldElEKCkpOwotICAgIHNldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpLCBwYXJhbSk7Ci0gICAgcmV0dXJuIGlzRWxlbWVudChhZGRSb290RWxlbWVudChwYXJhbVswXSkpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgYWRkUm9vdEVsZW1lbnQoU3RyaW5nIGVsZW1lbnQpIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgc2IuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlJPT1RfRUxFTUVOVF9TVEFSVF9UQUcpOwotICAgIHNiLmFwcGVuZChlbGVtZW50KTsKLSAgICBzYi5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuUk9PVF9FTEVNRU5UX0VORF9UQUcpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudChTdHJpbmcgZWxlbWVudFN0cmluZykgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gKFhNTFV0aWxzLnN0cmluZ1RvRWxlbWVudChlbGVtZW50U3RyaW5nKSAhPSBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSB7Ci0gICAgU3RyaW5nIHBhcmFtID0gZ2V0UGFyYW1ldGVyVmFsdWUoZ2V0SUQoKSwgMCk7Ci0gICAgcmV0dXJuIChwYXJhbSA9PSBudWxsIHx8IGlzRWxlbWVudChhZGRSb290RWxlbWVudChwYXJhbSkpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkgewotICAgIFN0cmluZyBwYXJhbSA9IGdldFBhcmFtZXRlclZhbHVlKGdldElEKCksIDApOwotICAgIHJldHVybiAocGFyYW0gPT0gbnVsbCB8fCBpc0VsZW1lbnQoYWRkUm9vdEVsZW1lbnQocGFyYW0pKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLSAgICBTdHJpbmcgcGFyYW0gPSBnZXRQYXJhbWV0ZXJWYWx1ZShnZXRJRCgpLCAwKTsKLSAgICByZXR1cm4gKHBhcmFtID09IG51bGwgfHwgaXNFbGVtZW50KGFkZFJvb3RFbGVtZW50KHBhcmFtKSkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBib29sZWFuIHBhcmFtVmFsaWQgPSB0cnVlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFN0cmluZyBpbnN0YW5jZVN0cmluZyA9IFhNTFV0aWxzLnNlcmlhbGl6ZShpbnN0YW5jZURvY3VtZW50c1tpXSwgdHJ1ZSk7Ci0gICAgICBpZiAoaW5zdGFuY2VTdHJpbmcgIT0gbnVsbCAmJiBpbnN0YW5jZVN0cmluZy5sZW5ndGgoKSA+IDApCi0gICAgICAgIHNiLmFwcGVuZChpbnN0YW5jZVN0cmluZyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHBhcmFtVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgU3RyaW5nW10gcGFyYW0gPSB7c2IudG9TdHJpbmcoKX07Ci0gICAgc2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCksIHBhcmFtKTsKLSAgICByZXR1cm4gcGFyYW1WYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpIHsKLSAgICBTdHJpbmcgcGFyYW0gPSBnZXRQYXJhbWV0ZXJWYWx1ZShnZXRJRCgpLCAwKTsKLSAgICBpZiAocGFyYW0gPT0gbnVsbCkKLSAgICAgIHJldHVybiBuZXcgRWxlbWVudFswXTsKLSAgICBFbGVtZW50IHJvb3Q7Ci0gICAgdHJ5IHsKLSAgICAgIHJvb3QgPSAoRWxlbWVudClkb2MuaW1wb3J0Tm9kZShYTUxVdGlscy5zdHJpbmdUb0VsZW1lbnQoYWRkUm9vdEVsZW1lbnQocGFyYW0pKSwgdHJ1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgcmV0dXJuIG5ldyBFbGVtZW50WzBdOwotICAgIH0KLSAgICBOb2RlTGlzdCBubCA9IHJvb3QuZ2V0Q2hpbGROb2RlcygpOwotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgewotICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShpKTsKLSAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudFZlY3Rvci5hZGQobm9kZSk7Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRWZWN0b3Iuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IChFbGVtZW50KWluc3RhbmNlRG9jdW1lbnRWZWN0b3IuZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERGVsZWdhdGlvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0REZWxlZ2F0aW9uRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI2MzJhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0REZWxlZ2F0aW9uRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERGVsZWdhdGlvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgWFNERGVsZWdhdGlvbkZyYWdtZW50IGV4dGVuZHMgWFNERnJhZ21lbnQgaW1wbGVtZW50cyBJWFNERGVsZWdhdGlvbkZyYWdtZW50Ci17Ci0gIHByaXZhdGUgSVhTREZyYWdtZW50IHhzZEZyYWdtZW50XzsKLQotICBwdWJsaWMgWFNERGVsZWdhdGlvbkZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIHhzZEZyYWdtZW50XyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgc3VwZXIuc2V0TmFtZShuYW1lKTsKLSAgICBpZiAoeHNkRnJhZ21lbnRfICE9IG51bGwpCi0gICAgICB4c2RGcmFnbWVudF8uc2V0TmFtZShuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8ucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgU3RyaW5nW10gcGFyYW1zKQotICB7Ci0gICAgeHNkRnJhZ21lbnRfLnNldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSwgcGFyYW1zKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFZlY3RvciBwYXJhbXMpCi0gIHsKLSAgICB4c2RGcmFnbWVudF8uc2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5LCBwYXJhbXMpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLmdldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLmdldFBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8udmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8udmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KQotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50Xy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZURvY3VtZW50cyk7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50Xy5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25SRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25XRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRERlbGVnYXRpb25GcmFnbWVudChJWFNERnJhZ21lbnQgeHNkRnJhZ21lbnQpCi0gIHsKLSAgICB4c2RGcmFnbWVudF8gPSB4c2RGcmFnbWVudDsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREVsZW1lbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERWxlbWVudEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkN2E1NmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERWxlbWVudEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTE5ICAgMTIzNTM5IGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIE34bGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RFbGVtZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREZvcm07Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgWFNERWxlbWVudEZyYWdtZW50IGV4dGVuZHMgWFNERGVsZWdhdGlvbkZyYWdtZW50IGltcGxlbWVudHMgSVhTREVsZW1lbnRGcmFnbWVudAotewotICBwcml2YXRlIGludCBtaW5PY2N1cnNfOwotICBwcml2YXRlIGludCBtYXhPY2N1cnNfOwotICBwcml2YXRlIGJvb2xlYW4gaXNOaWxfOwotIAotICAKLSAgcHVibGljIFhTREVsZW1lbnRGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBpZiAoY29uZmlnICE9IG51bGwpCi0gICAgewotICAgICAgbWluT2NjdXJzXyA9IGNvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLSAgICAgIG1heE9jY3Vyc18gPSBjb25maWcuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBtaW5PY2N1cnNfID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NSU5fT0NDVVJTOwotICAgICAgbWF4T2NjdXJzXyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUFYX09DQ1VSUzsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBJWFNERnJhZ21lbnQgZWxlbWVudFR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIHNldElzTmlsKHBhcnNlcik7Ci0gICAgaWYoaXNOaWxfKXJldHVybiB0cnVlOwotICAgIAkKLSAgICBpZiAoIWVsZW1lbnRUeXBlRnJhZ21lbnQucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhlbGVtZW50VHlwZUZyYWdtZW50LmdldElEKCkpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCAmJiAhd2l0aGluUmFuZ2UocGFyYW1zLmxlbmd0aCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRJc05pbChNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG5pbCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoZ2V0TmlsSUQoKSk7Ci0gICAgaWYobmlsICE9IG51bGwpIGlzTmlsXyA9IHRydWU7Ci0gICAgZWxzZSBpc05pbF8gPSBmYWxzZTsKLSAgICByZXR1cm4gaXNOaWxfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpCi0gIHsKLSAgICBJWFNERnJhZ21lbnQgZWxlbWVudFR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhlbGVtZW50VHlwZUZyYWdtZW50LmdldElEKCkpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCAmJiAhd2l0aGluUmFuZ2UocGFyYW1zLmxlbmd0aCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFlbGVtZW50VHlwZUZyYWdtZW50LnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpCi0gIHsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCAmJiAhd2l0aGluUmFuZ2UocGFyYW1zLmxlbmd0aCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpCi0gIHsKLSAgICBpZiAoIXdpdGhpblJhbmdlKHBhcmFtSW5kZXggKyAxKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBTdHJpbmcgcGFyYW0gPSBnZXRQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCk7Ci0gICAgaWYgKHBhcmFtICE9IG51bGwgJiYgcGFyYW0ubGVuZ3RoKCkgPD0gMCAmJiAheHNkRWxlbWVudC5pc05pbGxhYmxlKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS52YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIHN1cGVyLnNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKGNvbmZpZyk7Ci0gICAgbWluT2NjdXJzXyA9IGNvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLSAgICBtYXhPY2N1cnNfID0gY29uZmlnLmdldE1heE9jY3VycygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBpbnN0YW5jZURvY3VtZW50czsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFN0cmluZyB3c2RsUGFydE5hbWUgPSBjb25maWcuZ2V0V1NETFBhcnROYW1lKCk7Ci0gICAgTm9kZUxpc3QgbmwgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbMF0uZ2V0Q2hpbGROb2RlcygpOwotICAgIAotICAgIGlmKGluc3RhbmNlRG9jdW1lbnRzQ29weVswXS5oYXNBdHRyaWJ1dGUoWFNJX05JTF9BVFRSSUJVVEUpKXsKLSAgICAgIFN0cmluZyBuaWwgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbMF0uZ2V0QXR0cmlidXRlKFhTSV9OSUxfQVRUUklCVVRFKTsKLSAgICAgIGlmKG5pbC5lcXVhbHMoVFJVRSkpIGlzTmlsXyA9IHRydWU7IAotICAgIH0gIAotICAgIAotICAgIAotICAgIGlmIChjb25maWcuZ2V0SXNXU0RMUGFydCgpICYmIGNvbmZpZy5nZXRTdHlsZSgpID09IEZyYWdtZW50Q29uc3RhbnRzLlNUWUxFX1JQQyAmJiB3c2RsUGFydE5hbWUgIT0gbnVsbCAmJiB3c2RsUGFydE5hbWUubGVuZ3RoKCkgPiAwICYmIGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGggPT0gMSAmJiB3c2RsUGFydE5hbWUuZXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weVswXS5nZXRUYWdOYW1lKCkpKQotICAgIHsKLSAgICAgIFZlY3RvciBjaGlsZEVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGkpOwotICAgICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgIGNoaWxkRWxlbWVudHMuYWRkKG5vZGUpOwotICAgICAgfQotICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gKEVsZW1lbnRbXSljaGlsZEVsZW1lbnRzLnRvQXJyYXkobmV3IEVsZW1lbnRbMF0pOwotICAgIH0KLSAgICBJWFNERnJhZ21lbnQgZWxlbWVudFR5cGVGcmFnbWVudCA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgZ2V0TmFtZSgpKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGVGcmFnbWVudC5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgZWxlbWVudFR5cGVGcmFnbWVudC5nZXROYW1lKCkpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTSV9OSUxfQVRUUklCVVRFID0gInhzaTpuaWwiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBUUlVFID0gInRydWUiOwotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gIAkKLSAgCUVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IGdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLSAgICBpZihpc05pbF8peyAKLSAgICAgIGZvcihpbnQgaj0wO2ogPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7aisrKXsgIAotICAgICAgCWluc3RhbmNlRG9jdW1lbnRzW2pdLnNldEF0dHJpYnV0ZShYU0lfTklMX0FUVFJJQlVURSxUUlVFKTsKLSAgICAgIAlOb2RlTGlzdCBub2RlTGlzdCA9IGluc3RhbmNlRG9jdW1lbnRzW2pdLmdldENoaWxkTm9kZXMoKTsgCi0gICAgICAgIGludCBsZW5ndGggPSBub2RlTGlzdC5nZXRMZW5ndGgoKTsKLSAgICAgICAgZm9yKGludCBpID0wO2kgPCBsZW5ndGg7aSsrKXsKLSAgICAgICAgICBpbnN0YW5jZURvY3VtZW50c1tqXS5yZW1vdmVDaGlsZChub2RlTGlzdC5pdGVtKDApKTsKLSAgICAgICAgfQotICAgICAgfSAgCi0gICAgfQotICAgIGluc3RhbmNlRG9jdW1lbnRzID0gc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSkpOwotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgU3RyaW5nIHdzZGxQYXJ0TmFtZSA9IGNvbmZpZy5nZXRXU0RMUGFydE5hbWUoKTsKLSAgICBpZiAoY29uZmlnLmdldElzV1NETFBhcnQoKSAmJiBjb25maWcuZ2V0U3R5bGUoKSA9PSBGcmFnbWVudENvbnN0YW50cy5TVFlMRV9SUEMgJiYgd3NkbFBhcnROYW1lICE9IG51bGwgJiYgd3NkbFBhcnROYW1lLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gaW5zdGFuY2VEb2N1bWVudHM7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50WzFdOwotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbMF0gPSBkb2MuY3JlYXRlRWxlbWVudCh3c2RsUGFydE5hbWUpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0gIT0gbnVsbCkKLSAgICAgICAgICBpbnN0YW5jZURvY3VtZW50c1swXS5hcHBlbmRDaGlsZChpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0pOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0luc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkKLSAgewotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgaWYgKGNvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSA9PSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19MSVRFUkFMKQotICAgIHsKLSAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbiljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICAvLyBUcnkgdG8gcmVzb2x2ZSB0aGUgZWxlbWVudCwgc2luY2UgYW4gZWxlbWVudCB3aXRoIGEgcmVmIGNhbiBuZXZlciBiZSBnbG9iYWwKLSAgICAgIGlmICh4c2RFbGVtZW50LmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgeHNkRWxlbWVudCA9IHhzZEVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICAgIAotICAgICAgaWYgKHhzZEVsZW1lbnQuaXNHbG9iYWwoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICh4c2RFbGVtZW50LmlzU2V0Rm9ybSgpKQotICAgICAgICAgIHJldHVybiAoeHNkRWxlbWVudC5nZXRGb3JtKCkuZ2V0VmFsdWUoKSA9PSBYU0RGb3JtLlFVQUxJRklFRCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gKHhzZEVsZW1lbnQuZ2V0U2NoZW1hKCkuZ2V0RWxlbWVudEZvcm1EZWZhdWx0KCkuZ2V0VmFsdWUoKSA9PSBYU0RGb3JtLlFVQUxJRklFRCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUoSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlKQotICB7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIFN0cmluZ0J1ZmZlciB0YWdOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChpc0luc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkpCi0gICAgewotICAgICAgU3RyaW5nIG5zVVJJID0gbnVsbDsKLSAgICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgICBpZiAoeHNkRWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICAgIG5zVVJJID0geHNkRWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgZWxzZQotICAgICAgICBuc1VSSSA9IHhzZEVsZW1lbnQuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobnNVUkkgIT0gbnVsbCAmJiBuc1VSSS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKG5zVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgIHRhZ05hbWUuYXBwZW5kKHByZWZpeCk7Ci0gICAgICAgIHRhZ05hbWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgU3RyaW5nIHhzZEVsZW1lbnROYW1lID0geHNkRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgaWYgKHhzZEVsZW1lbnROYW1lID09IG51bGwgfHwgeHNkRWxlbWVudE5hbWUubGVuZ3RoKCkgPD0gMCkKLSAgICB7Ci0gICAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgICAgaWYgKHhzZEVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgICAgICB4c2RFbGVtZW50TmFtZSA9IHhzZEVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHhzZEVsZW1lbnROYW1lID0gZ2V0TmFtZSgpOwotICAgIH0KLSAgICB0YWdOYW1lLmFwcGVuZCh4c2RFbGVtZW50TmFtZSk7Ci0gICAgcmV0dXJuIHRhZ05hbWUudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB3aXRoaW5SYW5nZShpbnQgc2l6ZSkKLSAgewotICAgIGlmIChzaXplIDwgbWluT2NjdXJzXykKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWF4T2NjdXJzXyAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQgJiYgc2l6ZSA+IG1heE9jY3Vyc18pCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNaW5PY2N1cnMoaW50IG1pbk9jY3VycykKLSAgewotICAgIG1pbk9jY3Vyc18gPSBtaW5PY2N1cnM7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE1pbk9jY3VycygpCi0gIHsKLSAgICByZXR1cm4gbWluT2NjdXJzXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE1heE9jY3VycyhpbnQgbWF4T2NjdXJzKQotICB7Ci0gICAgbWF4T2NjdXJzXyA9IG1heE9jY3VyczsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TWF4T2NjdXJzKCkKLSAgewotICAgIHJldHVybiBtYXhPY2N1cnNfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc05pbGxhYmxlKCkKLSAgewotICAJaWYoZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKS5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCJuaWxsYWJsZSIpLmVxdWFscygidHJ1ZSIpKQotICAJICByZXR1cm4gdHJ1ZTsKLSAgCXJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNOaWwoKQotICB7Ci0gIAlyZXR1cm4gaXNOaWxfOwotICB9Ci0gIAotICAKLSAgcHVibGljIFN0cmluZyBnZXROaWxJRCgpCi0gIHsKLSAgCXJldHVybiBnZXRJRCgpICsgSVhTREVsZW1lbnRGcmFnbWVudC5OSUw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnRSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnRXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RFbXB0eUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RFbXB0eUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMjI1OGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERW1wdHlGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgWFNERW1wdHlGcmFnbWVudCBleHRlbmRzIFhTREZyYWdtZW50IHsKLSAgcHJpdmF0ZSBpbnQgb2NjdXJhbmNlXzsKLQotICBwdWJsaWMgWFNERW1wdHlGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBvY2N1cmFuY2VfID0gMDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIFN0cmluZyBvY2N1cmFuY2UgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKGdldElEKCkpOwotICAgIHRyeSB7Ci0gICAgICBvY2N1cmFuY2VfID0gSW50ZWdlci5wYXJzZUludChvY2N1cmFuY2UpOwotICAgICAgcmV0dXJuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgb2NjdXJhbmNlXyA9IC0xOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFN0cmluZ1tdIHBhcmFtcykgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgVmVjdG9yIHBhcmFtcykgewotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLSAgICBpZiAob2NjdXJhbmNlXyA8IDApCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBlbHNlIHsKLSAgICAgIFN0cmluZ1tdIHBhcmFtcyA9IG5ldyBTdHJpbmdbb2NjdXJhbmNlX107Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgICBwYXJhbXNbaV0gPSAiIjsKLSAgICAgIH0KLSAgICAgIHJldHVybiBwYXJhbXM7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0gICAgaWYgKHBhcmFtSW5kZXggPj0gMCAmJiBwYXJhbUluZGV4IDwgb2NjdXJhbmNlXykKLSAgICAgIHJldHVybiAiIjsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkgewotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgaW50IG1pbiA9IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLSAgICBpbnQgbWF4ID0geHNkQ29uZmlnLmdldE1heE9jY3VycygpOwotICAgIHJldHVybiAob2NjdXJhbmNlXyA+PSAwICYmIG9jY3VyYW5jZV8gPj0gbWluICYmIChtYXggPT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEIHx8IG9jY3VyYW5jZV8gPD0gbWF4KSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLSAgICByZXR1cm4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkgewotICAgIHJldHVybiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0TmFtZSgpKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGg7IGkrKykgewotICAgICAgTm9kZUxpc3Qgbm9kZUxpc3QgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMSkKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIGVsc2UgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpICE9IDApIHsKLSAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbSgwKTsKLSAgICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLlRFWFRfTk9ERSB8fCAhaXNXaGl0ZXNwYWNlKG5vZGUuZ2V0Tm9kZVZhbHVlKCkpKQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIG9jY3VyYW5jZV8gPSBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoOwotICAgIHJldHVybiBwYXJhbXNWYWxpZCAmJiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzV2hpdGVzcGFjZShTdHJpbmcgcykgewotICAgIGNoYXJbXSBjaGFycyA9IHMudG9DaGFyQXJyYXkoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoY2hhcnNbaV0pIHx8ICFDaGFyYWN0ZXIuaXNTcGFjZUNoYXIoY2hhcnNbaV0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERW1wdHlXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERW1wdHlSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMThhOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNERnJhZ21lbnQgZXh0ZW5kcyBGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RGcmFnbWVudAotewotICBwcml2YXRlIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZ187Ci0gIHByaXZhdGUgWFNEVHlwZURlZmluaXRpb24gdHlwZURlZl87Ci0gIHByaXZhdGUgaW50IHNlZWRfOwotCi0gIHB1YmxpYyBYU0RGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSk7Ci0gICAgY29uZmlnXyA9IGNvbmZpZzsKLSAgICBpZiAoY29uZmlnXyAhPSBudWxsKQotICAgIHsKLSAgICAgIFhTRENvbXBvbmVudCBjb21wb25lbnQgPSBjb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICAgIHR5cGVEZWZfID0gKFhTRFR5cGVEZWZpbml0aW9uKWNvbXBvbmVudDsKLSAgICAgIGVsc2UKLSAgICAgICAgdHlwZURlZl8gPSBudWxsOwotICAgIH0KLSAgICBzZWVkXyA9IDA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbihYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBjb25maWdfID0gY29uZmlnOwotICAgIGlmIChjb25maWdfICE9IG51bGwpCi0gICAgewotICAgICAgWFNEQ29tcG9uZW50IGNvbXBvbmVudCA9IGNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgICAgc2V0WFNEVHlwZURlZmluaXRpb24oKFhTRFR5cGVEZWZpbml0aW9uKWNvbXBvbmVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkKLSAgewotICAgIHJldHVybiBjb25maWdfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEVHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gdHlwZURlZikKLSAgewotICAgIHR5cGVEZWZfID0gdHlwZURlZjsKLSAgfQotCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiBnZXRYU0RUeXBlRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdHlwZURlZl87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IG5ldyBTdHJpbmdbaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aF07Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHBhcmFtc1tpXSA9ICIiOwotICAgICAgTm9kZUxpc3Qgbm9kZUxpc3QgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbSgwKTsKLSAgICAgICAgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMSkKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuVEVYVF9OT0RFKQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJhbXNbaV0gPSBub2RlLmdldE5vZGVWYWx1ZSgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBzZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSwgcGFyYW1zKTsKLSAgICByZXR1cm4gcGFyYW1zVmFsaWQgJiYgdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50W10gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzLCBTdHJpbmcgdGFnTmFtZSkKLSAgewotICAgIGlmIChpbnN0YW5jZURvY3VtZW50cyA9PSBudWxsKQotICAgICAgcmV0dXJuIG5ldyBFbGVtZW50WzBdOwotICAgIFZlY3RvciBpbnN0YW5jZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgU3RyaW5nIGluc3RhbmNlVGFnTmFtZSA9IHRyaW1QcmVmaXgoaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0VGFnTmFtZSgpKTsKLSAgICAgIGlmIChpbnN0YW5jZVRhZ05hbWUuZXF1YWxzKHRhZ05hbWUpKQotICAgICAgICBpbnN0YW5jZXNDb3B5LmFkZChpbnN0YW5jZURvY3VtZW50c1tpXSk7Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZXMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZXNDb3B5LnNpemUoKV07Ci0gICAgaW5zdGFuY2VzQ29weS5jb3B5SW50byhpbnN0YW5jZXMpOwotICAgIHJldHVybiBpbnN0YW5jZXM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIHRyaW1QcmVmaXgoU3RyaW5nIHMpCi0gIHsKLSAgICBTdHJpbmcgc0NvcHkgPSBuZXcgU3RyaW5nKHMpOwotICAgIGludCBjb2xvbkluZGV4ID0gc0NvcHkuaW5kZXhPZihGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgaWYgKGNvbG9uSW5kZXggIT0gLTEgJiYgY29sb25JbmRleCArIDEgPCBzQ29weS5sZW5ndGgoKSAmJiAhKChTdHJpbmcudmFsdWVPZihzQ29weS5jaGFyQXQoY29sb25JbmRleCArIDEpKSkuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKSkpCi0gICAgICBzQ29weSA9IHNDb3B5LnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgc0NvcHkubGVuZ3RoKCkpOwotICAgIHJldHVybiBzQ29weTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGb3JOaWwoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsRG9jdW1lbnQgZG9jKXsKLSAgCUVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50WzFdOwotICAgIFN0cmluZyB0YWdOYW1lID0gZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICBFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSBpbnN0YW5jZURvY3VtZW50OwotICAgICAgfQotICAgIHJldHVybiAoZ2VuWFNJVHlwZSA/IGFkZFhTSVR5cGUoaW5zdGFuY2VEb2N1bWVudHMsIG5hbWVzcGFjZVRhYmxlKSA6IGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgCQotICB9Ci0gIAotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSxEb2N1bWVudCBkb2MpIHsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSk7Ci0gICAgaWYgKHBhcmFtcyA9PSBudWxsKQotICAgICAgcmV0dXJuIG5ldyBFbGVtZW50WzBdOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W3BhcmFtcy5sZW5ndGhdOwotICAgIFN0cmluZyB0YWdOYW1lID0gZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCBpbnN0YW5jZURvY3VtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgICBOb2RlIHRleHROb2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKHBhcmFtc1tpXSk7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50LmFwcGVuZENoaWxkKHRleHROb2RlKTsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gaW5zdGFuY2VEb2N1bWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIChnZW5YU0lUeXBlID8gYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50cywgbmFtZXNwYWNlVGFibGUpIDogaW5zdGFuY2VEb2N1bWVudHMpOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgc2V0QXR0cmlidXRlc09uSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudCBpbnN0YW5jZURvY3VtZW50LFN0cmluZyBhdHROYW1lKXsKLSAgCVN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpKTsKLSAgICBpZiAocGFyYW1zID09IG51bGwpCi0gICAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudDsKLSAgICBpZiAoaXNBdHRyaWJ1dGVJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpKXsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnQuc2V0QXR0cmlidXRlTlMoY29uZmlnXy5nZXRYU0RDb21wb25lbnQoKS5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKSxhdHROYW1lLHBhcmFtc1swXSk7Ci0gICAgICAKLSAgICB9Ci0gICAgZWxzZSBpbnN0YW5jZURvY3VtZW50LnNldEF0dHJpYnV0ZShhdHROYW1lLHBhcmFtc1swXSk7Ci0gICAgCi0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHNldEF0dHJpYnV0ZVBhcmFtc0Zyb21JbnN0YW5jZURvY3VtZW50cyhOb2RlIGF0dHJpYnV0ZSl7Ci0gIAlTdHJpbmdbXSBwYXJhbXMgPSBuZXcgU3RyaW5nWzFdOwotICAJcGFyYW1zWzBdID0gYXR0cmlidXRlLmdldE5vZGVWYWx1ZSgpOyAKLSAgCXNldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpLCBwYXJhbXMpOwotICAgIHJldHVybiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdlbklEKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBuZXdJRCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBuZXdJRC5hcHBlbmQoZ2V0SUQoKSk7Ci0gICAgbmV3SUQuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLklEX1NFUEVSQVRPUik7Ci0gICAgbmV3SUQuYXBwZW5kKHNlZWRfKyspOwotICAgIHJldHVybiBuZXdJRC50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gY29uZmlnXy5nZXRYU0RDb21wb25lbnQoKS5nZXRTY2hlbWEoKTsKLSAgICByZXR1cm4gKCFjb25maWdfLmdldElzV1NETFBhcnQoKSAmJiBjb25maWdfLmdldFBhcnRFbmNvZGluZygpID09IEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX0xJVEVSQUwgJiYgeHNkU2NoZW1hLmdldEVsZW1lbnRGb3JtRGVmYXVsdCgpLmdldFZhbHVlKCkgPT0gWFNERm9ybS5RVUFMSUZJRUQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNBdHRyaWJ1dGVJbnN0YW5jZU5hbWVzcGFjZVF1YWxpZmllZCgpIHsKLSAgCVhTRFNjaGVtYSB4c2RTY2hlbWEgPSBjb25maWdfLmdldFhTRENvbXBvbmVudCgpLmdldFNjaGVtYSgpOwotICAgIAotICAgIHJldHVybiAoIWNvbmZpZ18uZ2V0SXNXU0RMUGFydCgpICYmCi0gICAgICAgICAgICAgICAgY29uZmlnXy5nZXRQYXJ0RW5jb2RpbmcoKSA9PSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19MSVRFUkFMICYmCi0gICAgICAgICAgICAgICAgeHNkU2NoZW1hLmdldEF0dHJpYnV0ZUZvcm1EZWZhdWx0KCkuZ2V0VmFsdWUoKSA9PSBYU0RGb3JtLlFVQUxJRklFRCk7Ci0KLSAgfQotCi0gCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSkgewotICAgIFN0cmluZ0J1ZmZlciB0YWdOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChpc0luc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkpCi0gICAgewotICAgICAgU3RyaW5nIG5zVVJJID0gY29uZmlnXy5nZXRYU0RDb21wb25lbnQoKS5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKG5zVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICB0YWdOYW1lLmFwcGVuZChwcmVmaXgpOwotICAgICAgdGFnTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgIH0KLSAgICB0YWdOYW1lLmFwcGVuZChnZXROYW1lKCkpOwotICAgIHJldHVybiB0YWdOYW1lLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRWxlbWVudFtdIGFkZFhTSVR5cGUoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUpCi0gIHsKLSAgICBYU0RDb21wb25lbnQgeHNkQ29tcG9uZW50ID0gY29uZmlnXy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHMgIT0gbnVsbCAmJiAoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNETmFtZWRDb21wb25lbnQpKQotICAgIHsKLSAgICAgIFN0cmluZyB4c2RDb21wb25lbnROYW1lID0gKChYU0ROYW1lZENvbXBvbmVudCl4c2RDb21wb25lbnQpLmdldE5hbWUoKTsKLSAgICAgIGlmICh4c2RDb21wb25lbnROYW1lICE9IG51bGwgJiYgeHNkQ29tcG9uZW50TmFtZS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0gPT0gbnVsbCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIFN0cmluZyB4c2lVUkkgPSBGcmFnbWVudENvbnN0YW50cy5VUklfWFNJOwotICAgICAgICAgIFN0cmluZyB4c2lQcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKHhzaVVSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgICAgIFN0cmluZyB4c2lUeXBlVVJJID0geHNkQ29tcG9uZW50LmdldFNjaGVtYSgpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgIFN0cmluZyB4c2lUeXBlUHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSSh4c2lUeXBlVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgICAgOwotICAgICAgICAgIFN0cmluZ0J1ZmZlciBhdHRyTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBhdHRyTmFtZS5hcHBlbmQoeHNpUHJlZml4KTsKLSAgICAgICAgICBhdHRyTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgICAgIGF0dHJOYW1lLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5YU0lfVFlQRSk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIGF0dHJWYWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBhdHRyVmFsdWUuYXBwZW5kKHhzaVR5cGVQcmVmaXgpOwotICAgICAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoeHNkQ29tcG9uZW50TmFtZSk7Ci0gICAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0uc2V0QXR0cmlidXRlKGF0dHJOYW1lLnRvU3RyaW5nKCksIGF0dHJWYWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpCi0gIHsKLSAgICBpZiAoIXN1cGVyLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCkpOwotICAgIGludCBsZW5ndGggPSAocGFyYW1zICE9IG51bGwpID8gcGFyYW1zLmxlbmd0aCA6IDA7Ci0gICAgaW50IG1pbiA9IGNvbmZpZ18uZ2V0TWluT2NjdXJzKCk7Ci0gICAgaW50IG1heCA9IGNvbmZpZ18uZ2V0TWF4T2NjdXJzKCk7Ci0gICAgcmV0dXJuIChsZW5ndGggPj0gbWluICYmIChtYXggPT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEIHx8IGxlbmd0aCA8PSBtYXgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSShTdHJpbmcgbnNVUkksIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSkKLSAgewotICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKW5hbWVzcGFjZVRhYmxlLmdldChuc1VSSSk7Ci0gICAgaW50IGkgPSAwOwotICAgIHdoaWxlIChwcmVmaXggPT0gbnVsbCB8fCBwcmVmaXgubGVuZ3RoKCkgPD0gMCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgcHJlZml4Q29weSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIHByZWZpeENvcHkuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlFOQU1FX1BSRUZJWCk7Ci0gICAgICBwcmVmaXhDb3B5LmFwcGVuZChTdHJpbmcudmFsdWVPZihpKSk7Ci0gICAgICBpKys7Ci0gICAgICBpZiAoIW5hbWVzcGFjZVRhYmxlLmNvbnRhaW5zKHByZWZpeENvcHkudG9TdHJpbmcoKSkpCi0gICAgICB7Ci0gICAgICAgIG5hbWVzcGFjZVRhYmxlLnB1dChuc1VSSSwgcHJlZml4Q29weS50b1N0cmluZygpKTsKLSAgICAgICAgcHJlZml4ID0gcHJlZml4Q29weS50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJlZml4OwotICB9Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnQgc2V0RWxlbWVudFRhZ05hbWUoRWxlbWVudCBlLCBTdHJpbmcgdGFnTmFtZSkKLSAgewotICAgIGlmICghZS5nZXRUYWdOYW1lKCkuZXF1YWxzKHRhZ05hbWUpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBEb2N1bWVudCBkb2MgPSBlLmdldE93bmVyRG9jdW1lbnQoKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgRWxlbWVudCBlQ29weSA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIGNoaWxkID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgIAkgIGVDb3B5LmFwcGVuZENoaWxkKGNoaWxkLmNsb25lTm9kZSh0cnVlKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGopOwotICAgICAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgKGF0dHIgaW5zdGFuY2VvZiBBdHRyKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKWF0dHI7Ci0gICAgICAgICAgICBlQ29weS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLmdldE5hbWUoKSwgYXR0cmlidXRlLmdldFZhbHVlKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZUNvcHk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRWxlbWVudFtdIHNldEVsZW1lbnRzVGFnTmFtZShFbGVtZW50W10gZSwgU3RyaW5nIHRhZ05hbWUpCi0gIHsKLSAgICBFbGVtZW50W10gZUNvcHkgPSBuZXcgRWxlbWVudFtlLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlQ29weS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBlQ29weVtpXSA9IHNldEVsZW1lbnRUYWdOYW1lKGVbaV0sIHRhZ05hbWUpOwotICAgIH0KLSAgICByZXR1cm4gZUNvcHk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpbnRlcm5hbEVxdWFscyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBpZiAoIWNvbmZpZ18uZ2V0SXNXU0RMUGFydCgpKQotICAgIHsKLSAgICAgIGludCBsZW5ndGggPSAoaW5zdGFuY2VEb2N1bWVudHMgIT0gbnVsbCkgPyBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGggOiAwOwotICAgICAgaW50IGxlbmd0aENvcHkgPSAoaW5zdGFuY2VEb2N1bWVudHNDb3B5ICE9IG51bGwpID8gaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aCA6IDA7Ci0gICAgICByZXR1cm4gKGxlbmd0aCA9PSBsZW5ndGhDb3B5KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQWxsRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQWxsRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZkZDg5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cEFsbEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNER3JvdXBBbGxGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgWFNER3JvdXBBbGxGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNER3JvdXBBbGxGcmFnbWVudCB7Ci0gIHByaXZhdGUgU3RyaW5nIGdyb3VwSURfOwotCi0gIHB1YmxpYyBYU0RHcm91cEFsbEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gICAgZ3JvdXBJRF8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIGdyb3VwSUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKGdldElEKCkpOwotICAgIGlmIChncm91cElEXyAhPSBudWxsICYmIGdyb3VwSUQgIT0gbnVsbCAmJiBncm91cElEXy5lcXVhbHMoZ3JvdXBJRCkpIHsKLSAgICAgIHNldEdyb3VwTWVtYmVySURzT3JkZXJpbmcocGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhncm91cElEXykpOwotICAgICAgYm9vbGVhbiB2YWx1ZXNWYWxpZCA9IHRydWU7Ci0gICAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURfKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldICE9IG51bGwgJiYgIWdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgICAgICB2YWx1ZXNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgcmV0dXJuIHZhbHVlc1ZhbGlkOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGdyb3VwSURfID0gbnVsbDsKLSAgICAgIHJlbW92ZUdyb3VwSURzKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgcmVtb3ZlR3JvdXBJRHMoKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHMgIT0gbnVsbCAmJiBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGggPiAwKSB7Ci0gICAgICBncm91cElEXyA9IGNyZWF0ZUluc3RhbmNlKCk7Ci0gICAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRF8pOwotICAgICAgU3RyaW5nW10gZ3JvdXBNZW1iZXJJRHNPcmRlciA9IG5ldyBTdHJpbmdbZ3JvdXBNZW1iZXJGcmFncy5sZW5ndGhdOwotICAgICAgaW50IG9yZGVySW5kZXggPSAwOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICBib29sZWFuIHBhcmFtc0Fzc2lnbmVkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ3JvdXBNZW1iZXJGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGlmIChncm91cE1lbWJlckZyYWdzW2pdICE9IG51bGwgJiYgZ3JvdXBNZW1iZXJGcmFnc1tqXS5nZXROYW1lKCkuZXF1YWxzKHRyaW1QcmVmaXgoaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0VGFnTmFtZSgpKSkpIHsKLSAgICAgICAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlID0ge2luc3RhbmNlRG9jdW1lbnRzW2ldfTsKLSAgICAgICAgICAgIGlmICghZ3JvdXBNZW1iZXJGcmFnc1tqXS5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoY2hpbGRJbnN0YW5jZSkpCi0gICAgICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBncm91cE1lbWJlcklEc09yZGVyW29yZGVySW5kZXhdID0gZ3JvdXBNZW1iZXJGcmFnc1tqXS5nZXRJRCgpOwotICAgICAgICAgICAgb3JkZXJJbmRleCsrOwotICAgICAgICAgICAgcGFyYW1zQXNzaWduZWQgPSB0cnVlOwotICAgICAgICAgICAgZ3JvdXBNZW1iZXJGcmFnc1tqXSA9IG51bGw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFwYXJhbXNBc3NpZ25lZCkKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBncm91cE1lbWJlckZyYWdzLmxlbmd0aDsgaysrKSB7Ci0gICAgICAgIGlmIChncm91cE1lbWJlckZyYWdzW2tdICE9IG51bGwpIHsKLSAgICAgICAgICBncm91cE1lbWJlcklEc09yZGVyW29yZGVySW5kZXhdID0gZ3JvdXBNZW1iZXJGcmFnc1trXS5nZXRJRCgpOwotICAgICAgICAgIG9yZGVySW5kZXgrKzsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc2V0R3JvdXBNZW1iZXJJRHNPcmRlcmluZyhncm91cE1lbWJlcklEc09yZGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRHcm91cEFsbEluc3RhbmNlKCkgewotICAgIGlmIChncm91cElEXyA9PSBudWxsKQotICAgICAgZ3JvdXBJRF8gPSBjcmVhdGVHcm91cEluc3RhbmNlKCk7Ci0gICAgcmV0dXJuIGdyb3VwSURfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gZ2V0R3JvdXBBbGxJbnN0YW5jZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0R3JvdXBNZW1iZXJJRHNPcmRlcmluZyhTdHJpbmdbXSBncm91cE1lbWJlcklEcykgewotICAgIGlmIChncm91cE1lbWJlcklEcyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZ1tdIGV4aXN0aW5nR3JvdXBNZW1iZXJJRHMgPSBnZXRHcm91cE1lbWJlcklEcyhncm91cElEXyk7Ci0gICAgaWYgKGV4aXN0aW5nR3JvdXBNZW1iZXJJRHMubGVuZ3RoICE9IGdyb3VwTWVtYmVySURzLmxlbmd0aCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBWZWN0b3IgZXhpc3RpbmdHcm91cE1lbWJlcklEc1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4aXN0aW5nR3JvdXBNZW1iZXJJRHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGV4aXN0aW5nR3JvdXBNZW1iZXJJRHNWZWN0b3IuYWRkKGV4aXN0aW5nR3JvdXBNZW1iZXJJRHNbaV0pOwotICAgIH0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyb3VwTWVtYmVySURzLmxlbmd0aDsgaisrKSB7Ci0gICAgICBpZiAoIWV4aXN0aW5nR3JvdXBNZW1iZXJJRHNWZWN0b3IucmVtb3ZlKGdyb3VwTWVtYmVySURzW2pdKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoc2V0RnJhZ21lbnRzT3JkZXIoZ3JvdXBNZW1iZXJJRHMpKSB7Ci0gICAgICBzZXRHcm91cE1lbWJlcklEcyhncm91cElEXywgZ3JvdXBNZW1iZXJJRHMpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1vdmVVcEdyb3VwTWVtYmVySUQoU3RyaW5nIGdyb3VwTWVtYmVySUQpIHsKLSAgICBTdHJpbmdbXSBncm91cE1lbWJlcklEcyA9IGdldEdyb3VwTWVtYmVySURzKGdyb3VwSURfKTsKLSAgICBpZiAoZ3JvdXBNZW1iZXJJRC5lcXVhbHMoZ3JvdXBNZW1iZXJJRHNbMF0pKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgZ3JvdXBNZW1iZXJJRHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChncm91cE1lbWJlcklELmVxdWFscyhncm91cE1lbWJlcklEc1tpXSkpIHsKLSAgICAgICAgZ3JvdXBNZW1iZXJJRHNbaV0gPSBncm91cE1lbWJlcklEc1tpIC0gMV07Ci0gICAgICAgIGdyb3VwTWVtYmVySURzW2kgLSAxXSA9IGdyb3VwTWVtYmVySUQ7Ci0gICAgICAgIGlmIChzZXRGcmFnbWVudHNPcmRlcihncm91cE1lbWJlcklEcykpIHsKLSAgICAgICAgICBzZXRHcm91cE1lbWJlcklEcyhncm91cElEXywgZ3JvdXBNZW1iZXJJRHMpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1vdmVEb3duR3JvdXBNZW1iZXJJRChTdHJpbmcgZ3JvdXBNZW1iZXJJRCkgewotICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzID0gZ2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRF8pOwotICAgIGlmIChncm91cE1lbWJlcklELmVxdWFscyhncm91cE1lbWJlcklEc1tncm91cE1lbWJlcklEcy5sZW5ndGggLSAxXSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cE1lbWJlcklEcy5sZW5ndGggLSAxOyBpKyspIHsKLSAgICAgIGlmIChncm91cE1lbWJlcklELmVxdWFscyhncm91cE1lbWJlcklEc1tpXSkpIHsKLSAgICAgICAgZ3JvdXBNZW1iZXJJRHNbaV0gPSBncm91cE1lbWJlcklEc1tpICsgMV07Ci0gICAgICAgIGdyb3VwTWVtYmVySURzW2kgKyAxXSA9IGdyb3VwTWVtYmVySUQ7Ci0gICAgICAgIGlmIChzZXRGcmFnbWVudHNPcmRlcihncm91cE1lbWJlcklEcykpIHsKLSAgICAgICAgICBzZXRHcm91cE1lbWJlcklEcyhncm91cElEXywgZ3JvdXBNZW1iZXJJRHMpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwQWxsV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlRml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlRml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MyNGUzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZUZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgWFNER3JvdXBDaG9pY2VGaXhGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgewotICBwdWJsaWMgWFNER3JvdXBDaG9pY2VGaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VGaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2FkZjA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNER3JvdXBDaG9pY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cEZyYWdtZW50IGltcGxlbWVudHMgSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgewotICBwcml2YXRlIFhTRFBhcnRpY2xlW10gY2hvaWNlc187Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGNob2ljZUluZGV4ZXNfOwotCi0gIHB1YmxpYyBYU0RHcm91cENob2ljZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gICAgY2hvaWNlc18gPSBudWxsOwotICAgIGNob2ljZUluZGV4ZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgc3VwZXIucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpOwotICAgIFN0cmluZ1tdIGdyb3VwSURzID0gZ2V0R3JvdXBJRHMoKTsKLSAgICBjaG9pY2VJbmRleGVzXy5jbGVhcigpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFN0cmluZyBzZWxlY3RlZENob2ljZUZyYWdJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoZ3JvdXBJRHNbaV0pOwotICAgICAgaW50IGNob2ljZUluZGV4ID0gMDsKLSAgICAgIElYU0RGcmFnbWVudFtdIGNob2ljZUZyYWdzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICBpZiAoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKS5lcXVhbHMoc2VsZWN0ZWRDaG9pY2VGcmFnSUQpKSB7Ci0gICAgICAgICAgY2hvaWNlSW5kZXggPSBqOwotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gKHBhcmFtc1ZhbGlkICYmIGNob2ljZUZyYWdzW2pdLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzZXRDaG9pY2VJbmRleChncm91cElEc1tpXSwgY2hvaWNlSW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgcmVtb3ZlR3JvdXBJRHMoKTsKLSAgICBjaG9pY2VJbmRleGVzXy5jbGVhcigpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIGlmIChpbnN0YW5jZURvY3VtZW50cyAhPSBudWxsKSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyBncm91cElEID0gY3JlYXRlR3JvdXBDaG9pY2VJbnN0YW5jZSgwKTsKLSAgICAgICAgSVhTREZyYWdtZW50W10gY2hvaWNlRnJhZ3MgPSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGlmIChjaG9pY2VGcmFnc1tqXS5nZXROYW1lKCkuZXF1YWxzKHRyaW1QcmVmaXgoaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0VGFnTmFtZSgpKSkpIHsKLSAgICAgICAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGNob2ljZUZyYWdzW2pdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZXMgPSBnZXRJbnN0YW5jZURvY3VtZW50UGFydGl0aW9uKGluc3RhbmNlRG9jdW1lbnRzLCBpLCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCksIHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSk7Ci0gICAgICAgICAgICBpZiAoIWNob2ljZUZyYWdzW2pdLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhjaGlsZEluc3RhbmNlcykpCi0gICAgICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRDaG9pY2VJbmRleChncm91cElELCBqKTsKLSAgICAgICAgICAgIGlmIChjaGlsZEluc3RhbmNlcy5sZW5ndGggPiAwKQotICAgICAgICAgICAgICBpID0gaSArIGNoaWxkSW5zdGFuY2VzLmxlbmd0aCAtIDE7IC8vIG1pbnVzIDEgYmVjYXVzZSB0aGVyZSdzIGFuIGkrKyBpbiB0aGUgb3V0ZXIgZm9yIGxvb3AKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnRbXSBnZXRJbnN0YW5jZURvY3VtZW50UGFydGl0aW9uKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cywgaW50IHN0YXJ0LCBpbnQgbWluU2l6ZSwgaW50IG1heFNpemUpIHsKLSAgICBTdHJpbmcgdGFnTmFtZSA9IGluc3RhbmNlRG9jdW1lbnRzW3N0YXJ0XS5nZXRUYWdOYW1lKCk7Ci0gICAgaW50IHNpemUgPSAxOwotICAgIGZvciAoaW50IGkgPSBzdGFydCArIDE7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldFRhZ05hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgICAgIHNpemUrKzsKLSAgICAgIGVsc2UKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChtYXhTaXplICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCAmJiBzaXplID4gbWF4U2l6ZSkgewotICAgICAgc2l6ZSA9IHNpemUgLSBtaW5TaXplOwotICAgICAgaWYgKHNpemUgPiBtYXhTaXplKQotICAgICAgICBzaXplID0gbWF4U2l6ZTsKLSAgICB9Ci0gICAgRWxlbWVudFtdIHN1YnNldCA9IG5ldyBFbGVtZW50W3NpemVdOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3Vic2V0Lmxlbmd0aDsgaisrKSB7Ci0gICAgICBzdWJzZXRbal0gPSBpbnN0YW5jZURvY3VtZW50c1tzdGFydCArIGpdOwotICAgIH0KLSAgICByZXR1cm4gc3Vic2V0OwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykgewotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgU3RyaW5nW10gZ3JvdXBJRHMgPSBnZXRHcm91cElEcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIElYU0RGcmFnbWVudFtdIGNob2ljZUZyYWdzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pOwotICAgICAgaW50IGNob2ljZUluZGV4ID0gZ2V0Q2hvaWNlSW5kZXgoZ3JvdXBJRHNbaV0pOwotICAgICAgRWxlbWVudFtdIGNob2ljZUZyYWdJbnN0YW5jZXMgPSBjaG9pY2VGcmFnc1tjaG9pY2VJbmRleF0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFnSW5zdGFuY2VzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weS5hZGQoY2hvaWNlRnJhZ0luc3RhbmNlc1tqXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRzQ29weS5zaXplKCldOwotICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weS5jb3B5SW50byhpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHVibGljIFhTRFBhcnRpY2xlW10gZ2V0Q2hvaWNlcygpIHsKLSAgICBpZiAoY2hvaWNlc18gPT0gbnVsbCkgewotICAgICAgRUxpc3QgcGFydGljbGVzID0gZ2V0WFNETW9kZWxHcm91cCgpLmdldFBhcnRpY2xlcygpOwotICAgICAgY2hvaWNlc18gPSBuZXcgWFNEUGFydGljbGVbcGFydGljbGVzLnNpemUoKV07Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNob2ljZXNfLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGNob2ljZXNfW2ldID0gKFhTRFBhcnRpY2xlKXBhcnRpY2xlcy5nZXQoaSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjaG9pY2VzXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlR3JvdXBDaG9pY2VJbnN0YW5jZShpbnQgY2hvaWNlSW5kZXgpIHsKLSAgICBnZXRDaG9pY2VzKCk7Ci0gICAgaWYgKGNob2ljZUluZGV4IDwgMCB8fCBjaG9pY2VJbmRleCA+IGNob2ljZXNfLmxlbmd0aCAtIDEpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBTdHJpbmcgZ3JvdXBJRCA9IGNyZWF0ZUdyb3VwSW5zdGFuY2UoKTsKLSAgICBzZXRDaG9pY2VJbmRleChncm91cElELCBjaG9pY2VJbmRleCk7Ci0gICAgcmV0dXJuIGdyb3VwSUQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUluc3RhbmNlKCkgewotICAgIHJldHVybiBjcmVhdGVHcm91cENob2ljZUluc3RhbmNlKDApOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRDaG9pY2VJbmRleChTdHJpbmcgZ3JvdXBJRCkgewotICAgIEludGVnZXIgaW5kZXggPSAoSW50ZWdlciljaG9pY2VJbmRleGVzXy5nZXQoZ3JvdXBJRCk7Ci0gICAgaWYgKGluZGV4ICE9IG51bGwpCi0gICAgICByZXR1cm4gaW5kZXguaW50VmFsdWUoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gMDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENob2ljZUluZGV4KFN0cmluZyBncm91cElELCBpbnQgY2hvaWNlSW5kZXgpIHsKLSAgICBjaG9pY2VJbmRleGVzXy5wdXQoZ3JvdXBJRCwgbmV3IEludGVnZXIoY2hvaWNlSW5kZXgpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkKLSAgewotICAgIFN0cmluZ1tdIGdyb3VwSURzID0gZ2V0R3JvdXBJRHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGludCBzZWxlY3Rpb25JbmRleCA9IGdldENob2ljZUluZGV4KGdyb3VwSURzW2ldKTsKLSAgICAgIGlmICghZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pW3NlbGVjdGlvbkluZGV4XS52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZVJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDBlMTRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFhTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgewotICBwdWJsaWMgWFNER3JvdXBDaG9pY2VSYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNDEzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNER3JvdXBGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RXaWxkY2FyZDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNER3JvdXBGcmFnbWVudCBleHRlbmRzIFhTRE1hcEZyYWdtZW50IGltcGxlbWVudHMgSVhTREdyb3VwRnJhZ21lbnQgewotICBwcml2YXRlIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cF87Ci0gIHByaXZhdGUgVmVjdG9yIGdyb3VwSURzT3JkZXJfOwotICBwcml2YXRlIEhhc2h0YWJsZSBncm91cElEc187Ci0gIAotICBwdWJsaWMgWFNER3JvdXBGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICAgIHhzZE1vZGVsR3JvdXBfID0geHNkTW9kZWxHcm91cDsKLSAgICBncm91cElEc09yZGVyXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBncm91cElEc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBib29sZWFuIHZhbHVlc1ZhbGlkID0gdHJ1ZTsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCkpOwotICAgIFZlY3RvciBmcmFncyA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgZ3JvdXBJRHNPcmRlckNvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgSGFzaHRhYmxlIGdyb3VwSURzQ29weSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgcGFyYW1zICE9IG51bGwgJiYgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKHBhcmFtc1tpXSAhPSBudWxsKSB7Ci0gICAgICAgIGdyb3VwSURzT3JkZXJDb3B5LmFkZChwYXJhbXNbaV0pOwotICAgICAgICBncm91cElEc0NvcHkucHV0KHBhcmFtc1tpXSwgZ2V0R3JvdXBNZW1iZXJJRHMocGFyYW1zW2ldKSk7Ci0gICAgICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMocGFyYW1zW2ldKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGlmIChncm91cE1lbWJlckZyYWdtZW50c1tqXSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmcmFncy5hZGQoZ3JvdXBNZW1iZXJGcmFnbWVudHNbal0pOwotICAgICAgICAgICAgaWYgKCFncm91cE1lbWJlckZyYWdtZW50c1tqXS5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgICAgICAgIHZhbHVlc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdyb3VwSURzT3JkZXJfID0gZ3JvdXBJRHNPcmRlckNvcHk7Ci0gICAgZ3JvdXBJRHNfID0gZ3JvdXBJRHNDb3B5OwotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIGFkZEZyYWdtZW50cyhmcmFncyk7Ci0gICAgcmV0dXJuIHZhbHVlc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIHJlbW92ZUdyb3VwSURzKCk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgU3RyaW5nIHByZXZHcm91cElEID0gbnVsbDsKLSAgICBTdHJpbmcgY3Vyckdyb3VwSUQgPSBudWxsOwotICAgIGludCBncm91cE1lbWJlckluZGV4ID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgKSB7Ci0gICAgICBpZiAoY3Vyckdyb3VwSUQgPT0gbnVsbCkgewotICAgICAgICBTdHJpbmcgbmV3R3JvdXBJRCA9IGNyZWF0ZUluc3RhbmNlKCk7Ci0gICAgICAgIHByZXZHcm91cElEID0gY3Vyckdyb3VwSUQ7Ci0gICAgICAgIGN1cnJHcm91cElEID0gbmV3R3JvdXBJRDsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnRbXSBpbnN0YW5jZVBhcnRpdGlvbiA9IG51bGw7Ci0gICAgICBpbnQgaiA9IGdyb3VwTWVtYmVySW5kZXg7Ci0gICAgICBib29sZWFuIHBhcmFtc0Fzc2lnbmVkID0gZmFsc2U7Ci0gICAgICBpbnQgd2lsZGNhcmRGcmFnSW5kZXggPSAtMTsKLSAgICAgIGRvIHsKLSAgICAgICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFncyA9IGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGN1cnJHcm91cElEKTsKLSAgICAgICAgWFNEQ29tcG9uZW50IHhzZENvbXBvbmVudCA9IGdyb3VwTWVtYmVyRnJhZ3Nbal0uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgICAgaWYgKHhzZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFdpbGRjYXJkKSB7Ci0gICAgICAgICAgaWYgKHdpbGRjYXJkRnJhZ0luZGV4IDwgMCkKLSAgICAgICAgICAgIHdpbGRjYXJkRnJhZ0luZGV4ID0gajsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChncm91cE1lbWJlckZyYWdzW2pdLmdldE5hbWUoKS5lcXVhbHModHJpbVByZWZpeChpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRUYWdOYW1lKCkpKSkgewotICAgICAgICAgIGluc3RhbmNlUGFydGl0aW9uID0gZ2V0SW5zdGFuY2VEb2N1bWVudFBhcnRpdGlvbihpbnN0YW5jZURvY3VtZW50cywgaSwgZ3JvdXBNZW1iZXJGcmFnc1tqXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldE1heE9jY3VycygpKTsKLSAgICAgICAgICBpZiAoIWdyb3VwTWVtYmVyRnJhZ3Nbal0uc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlUGFydGl0aW9uKSkKLSAgICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgcGFyYW1zQXNzaWduZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoZ3JvdXBNZW1iZXJGcmFnc1tqXSBpbnN0YW5jZW9mIFhTREdyb3VwRnJhZ21lbnQpIHsKLSAgICAgICAgCWdyb3VwTWVtYmVyRnJhZ3Nbal0uc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGogPT0gZ3JvdXBNZW1iZXJGcmFncy5sZW5ndGggLSAxKSB7Ci0gICAgICAgICAgaiA9IDA7Ci0gICAgICAgICAgU3RyaW5nIG5ld0dyb3VwSUQ7Ci0gICAgICAgICAgaWYgKCFwYXJhbXNBc3NpZ25lZCkKLSAgICAgICAgICAgIG5ld0dyb3VwSUQgPSBjcmVhdGVJbnN0YW5jZSgpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld0dyb3VwSUQgPSBudWxsOwotICAgICAgICAgIHByZXZHcm91cElEID0gY3Vyckdyb3VwSUQ7Ci0gICAgICAgICAgY3Vyckdyb3VwSUQgPSBuZXdHcm91cElEOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBqKys7Ci0gICAgICB9IHdoaWxlICghcGFyYW1zQXNzaWduZWQgJiYgaiAhPSBncm91cE1lbWJlckluZGV4KTsKLSAgICAgIGdyb3VwTWVtYmVySW5kZXggPSBqOwotICAgICAgaWYgKCFwYXJhbXNBc3NpZ25lZCkgewotICAgICAgICBpbnN0YW5jZVBhcnRpdGlvbiA9IGdldEluc3RhbmNlRG9jdW1lbnRQYXJ0aXRpb24oaW5zdGFuY2VEb2N1bWVudHMsIGksIEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCk7Ci0gICAgICAgIGlmICh3aWxkY2FyZEZyYWdJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgaWYgKHdpbGRjYXJkRnJhZ0luZGV4ID49IGdyb3VwTWVtYmVySW5kZXgpIHsKLSAgICAgICAgICAgIHJlbW92ZUdyb3VwSUQoY3Vyckdyb3VwSUQpOwotICAgICAgICAgICAgY3Vyckdyb3VwSUQgPSBwcmV2R3JvdXBJRDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3JvdXBNZW1iZXJJbmRleCA9IHdpbGRjYXJkRnJhZ0luZGV4OwotICAgICAgICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ3MgPSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhjdXJyR3JvdXBJRCk7Ci0gICAgICAgICAgaWYgKCFncm91cE1lbWJlckZyYWdzW3dpbGRjYXJkRnJhZ0luZGV4XS5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoaW5zdGFuY2VQYXJ0aXRpb24pKQotICAgICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBwYXJhbXNBc3NpZ25lZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY3Vyckdyb3VwSUQgIT0gbnVsbCAmJiAocHJldkdyb3VwSUQgPT0gbnVsbCB8fCAhY3Vyckdyb3VwSUQuZXF1YWxzKHByZXZHcm91cElEKSkpIHsKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIHJlbW92ZUdyb3VwSUQoY3Vyckdyb3VwSUQpOwotICAgICAgICAgIGN1cnJHcm91cElEID0gcHJldkdyb3VwSUQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGkgPSBpICsgaW5zdGFuY2VQYXJ0aXRpb24ubGVuZ3RoOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnRbXSBnZXRJbnN0YW5jZURvY3VtZW50UGFydGl0aW9uKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cywgaW50IHN0YXJ0LCBpbnQgbWF4U2l6ZSkgewotICAgIFN0cmluZyB0YWdOYW1lID0gaW5zdGFuY2VEb2N1bWVudHNbc3RhcnRdLmdldFRhZ05hbWUoKTsKLSAgICBpbnQgc2l6ZSA9IDE7Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0ICsgMTsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAobWF4U2l6ZSAhPSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQgJiYgc2l6ZSA+PSBtYXhTaXplKQotICAgICAgICBicmVhazsKLSAgICAgIGVsc2UgaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldFRhZ05hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgICAgIHNpemUrKzsKLSAgICAgIGVsc2UKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEVsZW1lbnRbXSBzdWJzZXQgPSBuZXcgRWxlbWVudFtzaXplXTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHN1YnNldC5sZW5ndGg7IGorKykgewotICAgICAgc3Vic2V0W2pdID0gaW5zdGFuY2VEb2N1bWVudHNbc3RhcnQgKyBqXTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1YnNldDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpIHsKLSAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgRWxlbWVudFtdIGZyYWdtZW50SW5zdGFuY2VzID0gZ3JvdXBNZW1iZXJGcmFnbWVudHNbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmcmFnbWVudEluc3RhbmNlcy5sZW5ndGg7IGorKykgewotICAgICAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkuYWRkKGZyYWdtZW50SW5zdGFuY2VzW2pdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VEb2N1bWVudHNDb3B5LnNpemUoKV07Ci0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGsrKykgewotICAgICAgaW5zdGFuY2VEb2N1bWVudHNba10gPSAoRWxlbWVudClpbnN0YW5jZURvY3VtZW50c0NvcHkuZ2V0KGspOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RNb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHhzZE1vZGVsR3JvdXBfID0geHNkTW9kZWxHcm91cDsKLSAgfQotCi0gIHB1YmxpYyBYU0RNb2RlbEdyb3VwIGdldFhTRE1vZGVsR3JvdXAoKSB7Ci0gICAgcmV0dXJuIHhzZE1vZGVsR3JvdXBfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEdyb3VwSURzKCkgewotICAgIFN0cmluZ1tdIGdyb3VwSURzID0gbmV3IFN0cmluZ1tncm91cElEc09yZGVyXy5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGdyb3VwSURzW2ldID0gKFN0cmluZylncm91cElEc09yZGVyXy5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBncm91cElEczsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUdyb3VwSURzKCkgewotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIGdyb3VwSURzT3JkZXJfLmNsZWFyKCk7Ci0gICAgZ3JvdXBJRHNfLmNsZWFyKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVHcm91cElEKFN0cmluZyBncm91cElEKSB7Ci0gICAgU3RyaW5nW10gbWVtYmVyRnJhZ0lEcyA9IGdldEdyb3VwTWVtYmVySURzKGdyb3VwSUQpOwotICAgIHJlbW92ZUZyYWdtZW50cyhtZW1iZXJGcmFnSURzKTsKLSAgICBncm91cElEc09yZGVyXy5yZW1vdmUoZ3JvdXBJRCk7Ci0gICAgZ3JvdXBJRHNfLnJlbW92ZShncm91cElEKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHNldEdyb3VwTWVtYmVySURzKFN0cmluZyBncm91cElELCBTdHJpbmdbXSBncm91cE1lbWJlcklEcykgewotICAgIGlmIChncm91cElEICE9IG51bGwpIHsKLSAgICAgIGlmICghZ3JvdXBJRHNPcmRlcl8uY29udGFpbnMoZ3JvdXBJRCkpCi0gICAgICAgIGdyb3VwSURzT3JkZXJfLmFkZChncm91cElEKTsKLSAgICAgIGlmIChncm91cE1lbWJlcklEcyAhPSBudWxsKQotICAgICAgICBncm91cElEc18ucHV0KGdyb3VwSUQsIGdyb3VwTWVtYmVySURzKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZ3JvdXBJRHNfLnB1dChncm91cElELCBuZXcgU3RyaW5nWzBdKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBzZXRHcm91cE1lbWJlckZyYWdtZW50cyhTdHJpbmcgZ3JvdXBJRCwgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMpIHsKLSAgICBhZGRGcmFnbWVudHMoZ3JvdXBNZW1iZXJGcmFnbWVudHMpOwotICAgIFN0cmluZ1tdIGlkcyA9IG5ldyBTdHJpbmdbZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykgewotICAgICAgaWRzW2ldID0gZ3JvdXBNZW1iZXJGcmFnbWVudHNbaV0uZ2V0SUQoKTsKLSAgICB9Ci0gICAgc2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRCwgaWRzKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRHcm91cE1lbWJlcklEcyhTdHJpbmcgZ3JvdXBJRCkgewotICAgIGlmIChncm91cElEICE9IG51bGwpIHsKLSAgICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzID0gKFN0cmluZ1tdKWdyb3VwSURzXy5nZXQoZ3JvdXBJRCk7Ci0gICAgICBpZiAoZ3JvdXBNZW1iZXJJRHMgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIGdyb3VwTWVtYmVySURzOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnRbXSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhTdHJpbmcgZ3JvdXBJRCkgewotICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzID0gZ2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRCk7Ci0gICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBuZXcgSVhTREZyYWdtZW50W2dyb3VwTWVtYmVySURzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgZ3JvdXBNZW1iZXJGcmFnbWVudHNbaV0gPSBnZXRGcmFnbWVudChncm91cE1lbWJlcklEc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiBncm91cE1lbWJlckZyYWdtZW50czsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgY3JlYXRlR3JvdXBJbnN0YW5jZSgpIHsKLSAgICBTdHJpbmcgZ3JvdXBJRCA9IGdlbklEKCk7Ci0gICAgRUxpc3QgcGFydGljbGVzID0gZ2V0WFNETW9kZWxHcm91cCgpLmdldFBhcnRpY2xlcygpOwotICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzID0gbmV3IFN0cmluZ1twYXJ0aWNsZXMuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpY2xlcy5zaXplKCk7IGkrKykgewotICAgICAgWFNEUGFydGljbGUgeHNkUGFydGljbGUgPSAoWFNEUGFydGljbGUpcGFydGljbGVzLmdldChpKTsKLSAgICAgIFhTRFBhcnRpY2xlQ29udGVudCB4c2RQYXJ0aWNsZUNvbnRlbnQgPSB4c2RQYXJ0aWNsZS5nZXRDb250ZW50KCk7Ci0gICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB0aGlzQ29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRENvbXBvbmVudCkKLSAgICAgICAgeHNkQ29uZmlnLnNldFhTRENvbXBvbmVudCgoWFNEQ29tcG9uZW50KXhzZFBhcnRpY2xlQ29udGVudCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHhzZENvbmZpZy5zZXRYU0RDb21wb25lbnQobnVsbCk7Ci0gICAgICB4c2RDb25maWcuc2V0U3R5bGUodGhpc0NvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgICB4c2RDb25maWcuc2V0V1NETFBhcnROYW1lKHRoaXNDb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgICAgZ3JvdXBNZW1iZXJJRHNbaV0gPSBnZW5JRCgpOwotICAgICAgYWRkRnJhZ21lbnQoZ3JvdXBNZW1iZXJJRHNbaV0sIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoeHNkQ29uZmlnLCBncm91cE1lbWJlcklEc1tpXSwgZ3JvdXBNZW1iZXJJRHNbaV0pKTsKLSAgICB9Ci0gICAgc2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRCwgZ3JvdXBNZW1iZXJJRHMpOwotICAgIHJldHVybiBncm91cElEOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcUZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcUZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMDc5ODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFhTREdyb3VwU2VxRml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cFNlcUZyYWdtZW50IHsKLSAgcHVibGljIFhTREdyb3VwU2VxRml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxRml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5YjY2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RHcm91cFNlcUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNER3JvdXBTZXFGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNER3JvdXBTZXFGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RHcm91cFNlcUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZUdyb3VwSW5zdGFuY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMyZDk3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBjbGFzcyBYU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RHcm91cFNlcUZyYWdtZW50IHsKLSAgcHVibGljIFhTREdyb3VwU2VxUmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RNYXBGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNETWFwRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMzYTA4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RNYXBGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREF0dHJpYnV0ZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNETWFwRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RNYXBGcmFnbWVudCBleHRlbmRzIFhTREZyYWdtZW50IGltcGxlbWVudHMgSVhTRE1hcEZyYWdtZW50IHsKLSAgcHJpdmF0ZSBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJpdmF0ZSBWZWN0b3IgZnJhZ21lbnRzT3JkZXJfOwotICBwcml2YXRlIEhhc2h0YWJsZSBmcmFnbWVudHNfOwotICBwcml2YXRlIEhhc2h0YWJsZSBhdHRyaWJ1dGVGcmFnbWVudHNfOwotCi0gIHB1YmxpYyBYU0RNYXBGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gICAgZnJhZ21lbnRzT3JkZXJfID0gbmV3IFZlY3RvcigpOwotICAgIGZyYWdtZW50c18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnRzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIGJvb2xlYW4gdmFsdWVzVmFsaWQgPSB0cnVlOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSk7Ci0gICAgVmVjdG9yIGZyYWdzID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciBhdHRmcmFncyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChwYXJhbXNbaV0gIT0gbnVsbCkgewotICAgICAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0RnJhZ21lbnQocGFyYW1zW2ldKTsKLSAgICAgICAgICBpZiAoZnJhZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmcmFncy5hZGQoZnJhZyk7Ci0gICAgICAgICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICAgICAgICB2YWx1ZXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAJSVhTREF0dHJpYnV0ZUZyYWdtZW50IGFmcmFnID0gZ2V0QXR0cmlidXRlRnJhZ21lbnQocGFyYW1zW2ldKTsKLSAgICAgICAgICAJaWYgKGFmcmFnICE9IG51bGwpIHsKLSAgICAgICAgICAJICBhdHRmcmFncy5hZGQoYWZyYWcpOwotICAgICAgICAgICAgICBpZiAoIWFmcmFnLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgICAgICAgICAgICAgdmFsdWVzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0gIAotICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICAJCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgYWRkQXR0cmlidXRlRnJhZ21lbnRzKGF0dGZyYWdzKTsKLSAgICBhZGRGcmFnbWVudHMoZnJhZ3MpOwotICAgIHJldHVybiB2YWx1ZXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFN0cmluZ1tdIHBhcmFtcykgewotICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0RnJhZ21lbnQocGFyYW1LZXkpOwotICAgIGlmIChmcmFnICE9IG51bGwpCi0gICAgICBmcmFnLnNldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSwgcGFyYW1zKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRGcmFnbWVudChwYXJhbUtleSk7Ci0gICAgcmV0dXJuIChmcmFnICE9IG51bGwpID8gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpIDogbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoIWZyYWdtZW50c1tpXS52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRGcmFnbWVudChwYXJhbUtleSk7Ci0gICAgcmV0dXJuIChmcmFnICE9IG51bGwpID8gZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSkgOiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRGcmFnbWVudChwYXJhbUtleSk7Ci0gICAgcmV0dXJuIChmcmFnICE9IG51bGwpID8gZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KSA6IHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICB9Ci0KLSAgcHVibGljIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXzsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50KFN0cmluZyBpZCwgSVhTREZyYWdtZW50IGZyYWcpIHsKLSAgICBhZGRGcmFnbWVudChpZCwgZnJhZywgdHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudHMoU3RyaW5nW10gaWQsIElYU0RGcmFnbWVudFtdIGZyYWdzKSB7Ci0gICAgYWRkRnJhZ21lbnRzKGlkLCBmcmFncywgdHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudChJWFNERnJhZ21lbnQgZnJhZykgewotICAgIGFkZEZyYWdtZW50KGZyYWcsIHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnRzKElYU0RGcmFnbWVudFtdIGZyYWdzKSB7Ci0gICAgYWRkRnJhZ21lbnRzKGZyYWdzLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50cyhWZWN0b3IgZnJhZ3MpIHsKLSAgICBhZGRGcmFnbWVudHMoZnJhZ3MsIHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnQoU3RyaW5nIGlkLCBJWFNERnJhZ21lbnQgZnJhZywgYm9vbGVhbiBhZGRUb0NvbnRyb2xsZXIpIHsKLSAgICBmcmFnbWVudHNPcmRlcl8uYWRkKGlkKTsKLSAgICBmcmFnbWVudHNfLnB1dChpZCwgZnJhZyk7Ci0gICAgY29udHJvbGxlcl8uYWRkVG9DYWNoZShpZCwgZnJhZyk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZUZyYWdtZW50KFN0cmluZyBpZCwgSVhTREZyYWdtZW50IGZyYWcpIHsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudHNfLnB1dChpZCwgZnJhZyk7Ci0gICAgY29udHJvbGxlcl8uYWRkVG9DYWNoZShpZCwgZnJhZyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKSB7Ci0gICAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gZnJhZ21lbnRzID0gbmV3IFhTREF0dHJpYnV0ZUZyYWdtZW50W2F0dHJpYnV0ZUZyYWdtZW50c18uc2l6ZSgpXTsKLSAgICBJdGVyYXRvciBpdCA9IGF0dHJpYnV0ZUZyYWdtZW50c18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgd2hpbGUoaXQuaGFzTmV4dCgpKXsKLSAgICAgIGZyYWdtZW50c1tpXSA9IChJWFNEQXR0cmlidXRlRnJhZ21lbnQpaXQubmV4dCgpOwotICAgICAgaSsrOyAKLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdtZW50czsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnRzKFN0cmluZ1tdIGlkLCBJWFNERnJhZ21lbnRbXSBmcmFncywgYm9vbGVhbiBhZGRUb0NvbnRyb2xsZXIpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkLmxlbmd0aCAmJiBpIDwgZnJhZ3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIGFkZEZyYWdtZW50KGlkW2ldLCBmcmFnc1tpXSwgYWRkVG9Db250cm9sbGVyKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudChJWFNERnJhZ21lbnQgZnJhZywgYm9vbGVhbiBhZGRUb0NvbnRyb2xsZXIpIHsKLSAgICBhZGRGcmFnbWVudChmcmFnLmdldElEKCksIGZyYWcsIGFkZFRvQ29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudHMoSVhTREZyYWdtZW50W10gZnJhZ3MsIGJvb2xlYW4gYWRkVG9Db250cm9sbGVyKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFncy5sZW5ndGg7IGkrKykgewotICAgICAgYWRkRnJhZ21lbnQoZnJhZ3NbaV0uZ2V0SUQoKSwgZnJhZ3NbaV0sIGFkZFRvQ29udHJvbGxlcik7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnRzKFZlY3RvciBmcmFncywgYm9vbGVhbiBhZGRUb0NvbnRyb2xsZXIpIHsKLSAgICBJdGVyYXRvciBpdCA9IGZyYWdzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgT2JqZWN0IG9iaiA9IGl0Lm5leHQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJWFNERnJhZ21lbnQpIHsKLSAgICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSAoSVhTREZyYWdtZW50KW9iajsKLSAgICAgICAgYWRkRnJhZ21lbnQoZnJhZy5nZXRJRCgpLCBmcmFnLCBhZGRUb0NvbnRyb2xsZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZUZyYWdtZW50cyhWZWN0b3IgZnJhZ3MpIHsKLSAgICBJdGVyYXRvciBpdCA9IGZyYWdzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgT2JqZWN0IG9iaiA9IGl0Lm5leHQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJWFNEQXR0cmlidXRlRnJhZ21lbnQpIHsKLSAgICAgICAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGZyYWcgPSAoSVhTREF0dHJpYnV0ZUZyYWdtZW50KW9iajsKLSAgICAgICAgYWRkQXR0cmlidXRlRnJhZ21lbnQoZnJhZy5nZXRJRCgpLCBmcmFnKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRGcmFnbWVudHNPcmRlcigpIHsKLSAgICBTdHJpbmdbXSBmcmFnbWVudHNPcmRlciA9IG5ldyBTdHJpbmdbZnJhZ21lbnRzT3JkZXJfLnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHNPcmRlci5sZW5ndGg7IGkrKykgewotICAgICAgZnJhZ21lbnRzT3JkZXJbaV0gPSAoU3RyaW5nKWZyYWdtZW50c09yZGVyXy5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBmcmFnbWVudHNPcmRlcjsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHNldEZyYWdtZW50c09yZGVyKFN0cmluZ1tdIGZyYWdtZW50c09yZGVyKSB7Ci0gICAgaWYgKGZyYWdtZW50c09yZGVyLmxlbmd0aCAhPSBmcmFnbWVudHNPcmRlcl8uc2l6ZSgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZlY3RvciBmcmFnbWVudHNPcmRlckNvcHkgPSBuZXcgVmVjdG9yKGZyYWdtZW50c09yZGVyXyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHNPcmRlci5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCFmcmFnbWVudHNPcmRlckNvcHkucmVtb3ZlKGZyYWdtZW50c09yZGVyW2ldKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmcmFnbWVudHNPcmRlcl8uY2xlYXIoKTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGZyYWdtZW50c09yZGVyLmxlbmd0aDsgaisrKSB7Ci0gICAgICBmcmFnbWVudHNPcmRlcl8uYWRkKGZyYWdtZW50c09yZGVyW2pdKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGdldEF0dHJpYnV0ZUZyYWdtZW50KFN0cmluZyBpZCkgewotICAgIHJldHVybiAoSVhTREF0dHJpYnV0ZUZyYWdtZW50KWF0dHJpYnV0ZUZyYWdtZW50c18uZ2V0KGlkKTsKLSAgfQotICAKLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChTdHJpbmcgaWQpIHsKLSAgICByZXR1cm4gKElYU0RGcmFnbWVudClmcmFnbWVudHNfLmdldChpZCk7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50W10gZ2V0RnJhZ21lbnRzKFN0cmluZ1tdIGlkcykgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdzID0gbmV3IElYU0RGcmFnbWVudFtpZHMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBmcmFnc1tpXSA9IGdldEZyYWdtZW50KGlkc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiBmcmFnczsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnRbXSBnZXRBbGxGcmFnbWVudHMoKSB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gbmV3IElYU0RGcmFnbWVudFtmcmFnbWVudHNPcmRlcl8uc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50c09yZGVyXy5zaXplKCk7IGkrKykgewotICAgICAgZnJhZ21lbnRzW2ldID0gZ2V0RnJhZ21lbnQoKFN0cmluZylmcmFnbWVudHNPcmRlcl8uZ2V0KGkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdtZW50czsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUZyYWdtZW50KFN0cmluZyBpZCkgewotICAgIHJlbW92ZUZyYWdtZW50KGlkLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUZyYWdtZW50cyhTdHJpbmdbXSBpZHMpIHsKLSAgICByZW1vdmVGcmFnbWVudHMoaWRzLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUFsbEZyYWdtZW50cygpIHsKLSAgICByZW1vdmVBbGxGcmFnbWVudHModHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVGcmFnbWVudChTdHJpbmcgaWQsIGJvb2xlYW4gcmVtb3ZlRnJvbUNvbnRyb2xsZXIpIHsKLSAgICBmcmFnbWVudHNPcmRlcl8ucmVtb3ZlKGlkKTsKLSAgICBmcmFnbWVudHNfLnJlbW92ZShpZCk7Ci0gICAgaWYgKHJlbW92ZUZyb21Db250cm9sbGVyKQotICAgICAgY29udHJvbGxlcl8ucmVtb3ZlRnJvbUNhY2hlKGlkKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUZyYWdtZW50cyhTdHJpbmdbXSBpZHMsIGJvb2xlYW4gcmVtb3ZlRnJvbUNvbnRyb2xsZXIpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykgewotICAgICAgcmVtb3ZlRnJhZ21lbnQoaWRzW2ldLCByZW1vdmVGcm9tQ29udHJvbGxlcik7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlQWxsRnJhZ21lbnRzKGJvb2xlYW4gcmVtb3ZlRnJvbUNvbnRyb2xsZXIpIHsKLSAgICBpZiAocmVtb3ZlRnJvbUNvbnRyb2xsZXIpCi0gICAgewotICAgICAgRW51bWVyYXRpb24gaWRzID0gZnJhZ21lbnRzXy5rZXlzKCk7Ci0gICAgICB3aGlsZSAoaWRzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKWlkcy5uZXh0RWxlbWVudCgpOwotICAgICAgICBjb250cm9sbGVyXy5yZW1vdmVGcm9tQ2FjaGUoaWQpOwotICAgICAgfQotICAgIH0KLSAgICBmcmFnbWVudHNPcmRlcl8uY2xlYXIoKTsKLSAgICBmcmFnbWVudHNfLmNsZWFyKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUFsbEF0dHJpYnV0ZUZyYWdtZW50cygpIHsKLSAgICAgIEVudW1lcmF0aW9uIGlkcyA9IGF0dHJpYnV0ZUZyYWdtZW50c18ua2V5cygpOwotICAgICAgd2hpbGUgKGlkcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlkID0gKFN0cmluZylpZHMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgY29udHJvbGxlcl8ucmVtb3ZlRnJvbUNhY2hlKGlkKTsKLSAgICAgIH0KLSAgICAKLSAgICAgIGF0dHJpYnV0ZUZyYWdtZW50c18uY2xlYXIoKTsKLSAgfQotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NzljNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudCB7Ci0gIHByaXZhdGUgaW50IGNhbGVuZGFyVHlwZV87Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgaW50IGNhbGVuZGFyVHlwZSkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIGNhbGVuZGFyVHlwZV8gPSBjYWxlbmRhclR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICBTdHJpbmdCdWZmZXIgZnJhZ21lbnRMaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhXRnJhZ21lbnRKU1AuanNwPyIpOwotICAgIGZyYWdtZW50TGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpLmFwcGVuZCgnPScpLmFwcGVuZChjYWxlbmRhclR5cGVfKTsKLSAgICByZXR1cm4gZnJhZ21lbnRMaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3Y2UyMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZUZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljUmFuZ2VGcmFnbWVudCB7Ci0gIHByaXZhdGUgaW50IGNhbGVuZGFyVHlwZV87Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBpbnQgY2FsZW5kYXJUeXBlKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgY2FsZW5kYXJUeXBlXyA9IGNhbGVuZGFyVHlwZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICBTdHJpbmdCdWZmZXIgZnJhZ21lbnRMaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZVdGcmFnbWVudEpTUC5qc3A/Iik7Ci0gICAgZnJhZ21lbnRMaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkuYXBwZW5kKCc9JykuYXBwZW5kKGNhbGVuZGFyVHlwZV8pOwotICAgIHJldHVybiBmcmFnbWVudExpbmsudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhM2U5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuT3B0aW9uVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIEVMaXN0IGVsaXN0KSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgZWxpc3QpOwotICB9Ci0gIAotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgT3B0aW9uVmVjdG9yIHYpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCB2KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1GaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRlOWU4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuT3B0aW9uVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbnVtZXJhdGlvbkZhY2V0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgewotICBwcml2YXRlIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3JfOwotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgRUxpc3QgZWxpc3QpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBvcHRpb25WZWN0b3JfID0gbmV3IE9wdGlvblZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPGVsaXN0LnNpemUoKTtpKyspCi0gICAgewotICAgICAgU3RyaW5nIGVudW1WYWx1ZSA9ICgoWFNERW51bWVyYXRpb25GYWNldCllbGlzdC5nZXQoaSkpLmdldExleGljYWxWYWx1ZSgpOwotICAgICAgb3B0aW9uVmVjdG9yXy5hZGRPcHRpb24oZW51bVZhbHVlLGVudW1WYWx1ZSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgT3B0aW9uVmVjdG9yIHYpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBvcHRpb25WZWN0b3JfID0gbmV3IE9wdGlvblZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPHYuc2l6ZSgpO2krKykKLSAgICAgIG9wdGlvblZlY3Rvcl8uYWRkT3B0aW9uKHYuZ2V0RGlzcGxheVZhbHVlKGkpLHYuZ2V0VmFsdWUoaSkpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgT3B0aW9uVmVjdG9yIGdldE9wdGlvblZlY3RvcigpCi0gIHsKLSAgICByZXR1cm4gb3B0aW9uVmVjdG9yXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZTU4ZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuT3B0aW9uVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBFTGlzdCBlbGlzdCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGVsaXN0KTsKLSAgfQotICAKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgT3B0aW9uVmVjdG9yIHYpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCB2KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI4NTY4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNGaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0ZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYTQxMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IGV4dGVuZHMgWFNERnJhZ21lbnQgaW1wbGVtZW50cyBJWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLSAgICBTdHJpbmcgcGFyYW0gPSBnZXRQYXJhbWV0ZXJWYWx1ZShwYXJhbUtleSwgcGFyYW1JbmRleCk7Ci0gICAgaWYgKHBhcmFtICE9IG51bGwgJiYgISgoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKSkuaXNWYWxpZExpdGVyYWwocGFyYW0pKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVsc2UKLSAgICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NzU4MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljUmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUF0b21pY1JhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVBdG9taWNGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljSW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY1JGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdEZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEzMzY2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVMaXN0RnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlTGlzdEZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0Rml4V0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZjNjY2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTcgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRFNpbXBsZUxpc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETGVuZ3RoRmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1heExlbmd0aEZhY2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNaW5MZW5ndGhGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNEU2ltcGxlTGlzdEZyYWdtZW50IGV4dGVuZHMgWFNETWFwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNEU2ltcGxlTGlzdEZyYWdtZW50Ci17Ci0gIHB1YmxpYyBYU0RTaW1wbGVMaXN0RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIuc2V0TmFtZShuYW1lKTsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBmcmFnbWVudHNbaV0uc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IG5ldyBTdHJpbmdbaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aF07Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHBhcmFtc1tpXSA9ICIiOwotICAgICAgTm9kZUxpc3Qgbm9kZUxpc3QgPSBpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbSgwKTsKLSAgICAgICAgaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMSkKLSAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuVEVYVF9OT0RFKQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwYXJhbXNbaV0gPSBub2RlLmdldE5vZGVWYWx1ZSgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnID0gZ2V0RnJhZ21lbnQoY3JlYXRlTGlzdEluc3RhbmNlKCkpOwotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihwYXJhbXNbaV0udHJpbSgpKTsKLSAgICAgIFN0cmluZ1tdIGNoaWxkUGFyYW1zID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hpbGRQYXJhbXMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIGNoaWxkUGFyYW1zW2pdID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgICBjaGlsZEZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzKGNoaWxkRnJhZy5nZXRJRCgpLCBjaGlsZFBhcmFtcyk7Ci0gICAgICBwYXJhbXNWYWxpZCA9IHBhcmFtc1ZhbGlkICYmIGNoaWxkRnJhZy52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbZnJhZ21lbnRzLmxlbmd0aF07Ci0gICAgU3RyaW5nIHRhZ05hbWUgPSBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCBpbnN0YW5jZURvY3VtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgICBTdHJpbmdCdWZmZXIgbGlzdFZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1zID0gZnJhZ21lbnRzW2ldLmdldFBhcmFtZXRlclZhbHVlcyhmcmFnbWVudHNbaV0uZ2V0SUQoKSk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgcGFyYW1zICE9IG51bGwgJiYgaiA8IHBhcmFtcy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGogIT0gMCkKLSAgICAgICAgICBsaXN0VmFsdWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkxJU1RfU0VQRVJBVE9SKTsKLSAgICAgICAgbGlzdFZhbHVlLmFwcGVuZChwYXJhbXNbal0pOwotICAgICAgfQotICAgICAgTm9kZSB0ZXh0Tm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZShsaXN0VmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50LmFwcGVuZENoaWxkKHRleHROb2RlKTsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gaW5zdGFuY2VEb2N1bWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIChnZW5YU0lUeXBlID8gYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50cywgbmFtZXNwYWNlVGFibGUpIDogaW5zdGFuY2VEb2N1bWVudHMpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVMaXN0SW5zdGFuY2UoKQotICB7Ci0gICAgU3RyaW5nIG5ld0lEID0gZ2VuSUQoKTsKLSAgICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgaW50IG1pbiA9IDA7Ci0gICAgaW50IG1heCA9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRDsKLSAgICBYU0RMZW5ndGhGYWNldCB4c2RMZW5ndGhGYWNldCA9IHNpbXBsZVR5cGUuZ2V0TGVuZ3RoRmFjZXQoKTsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmICh4c2RMZW5ndGhGYWNldCAhPSBudWxsKQotICAgIHsKLSAgICAgIG1pbiA9IHhzZExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gICAgICBtYXggPSB4c2RMZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgWFNETWluTGVuZ3RoRmFjZXQgeHNkTWluTGVuZ3RoRmFjZXQgPSBzaW1wbGVUeXBlLmdldE1pbkxlbmd0aEZhY2V0KCk7Ci0gICAgICBYU0RNYXhMZW5ndGhGYWNldCB4c2RNYXhMZW5ndGhGYWNldCA9IHNpbXBsZVR5cGUuZ2V0TWF4TGVuZ3RoRmFjZXQoKTsKLSAgICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgICBpZiAoeHNkTWluTGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgICAgbWluID0geHNkTWluTGVuZ3RoRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIGlmICh4c2RNYXhMZW5ndGhGYWNldCAhPSBudWxsKQotICAgICAgICBtYXggPSB4c2RNYXhMZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICAgIH0KLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB0aGlzQ29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICB4c2RDb25maWcuc2V0WFNEQ29tcG9uZW50KHNpbXBsZVR5cGUuZ2V0SXRlbVR5cGVEZWZpbml0aW9uKCkpOwotICAgIHhzZENvbmZpZy5zZXRTdHlsZSh0aGlzQ29uZmlnLmdldFN0eWxlKCkpOwotICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgeHNkQ29uZmlnLnNldFdTRExQYXJ0TmFtZSh0aGlzQ29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICB4c2RDb25maWcuc2V0TWluT2NjdXJzKG1pbik7Ci0gICAgeHNkQ29uZmlnLnNldE1heE9jY3VycyhtYXgpOwotICAgIElYU0RGcmFnbWVudCBmcmFnID0gZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudCh4c2RDb25maWcsIG5ld0lELCBnZXROYW1lKCkpOwotICAgIGZyYWcuc2V0SUQobmV3SUQpOwotICAgIGZyYWcuc2V0TmFtZShnZXROYW1lKCkpOwotICAgIGFkZEZyYWdtZW50KG5ld0lELCBmcmFnKTsKLSAgICByZXR1cm4gbmV3SUQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUluc3RhbmNlKCkKLSAgewotICAgIHJldHVybiBjcmVhdGVMaXN0SW5zdGFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdFJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUxpc3RSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxODU4NGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdFJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVMaXN0UmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZUxpc3RGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVMaXN0UmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdFJhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25GaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25GaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzJjOTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uRml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVVbmlvbkZpeEZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlVW5pb25GcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVVbmlvbkZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25GaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmZjODE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RTaW1wbGVVbmlvbkZyYWdtZW50IGV4dGVuZHMgWFNETWFwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNEU2ltcGxlVW5pb25GcmFnbWVudCB7Ci0gIHByaXZhdGUgWFNEU2ltcGxlVHlwZURlZmluaXRpb25bXSBtZW1iZXJUeXBlc187Ci0KLSAgcHVibGljIFhTRFNpbXBsZVVuaW9uRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gICAgbWVtYmVyVHlwZXNfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICBzdXBlci5zZXROYW1lKG5hbWUpOwotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBmcmFnbWVudHNbaV0uc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIGludCBudW1UeXBlcyA9IGdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpLmxlbmd0aDsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gaW50ZXJuYWxFcXVhbHMoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgVmVjdG9yIG1lbWJlckZyYWdtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNvbXBhdGlibGVGcmFnID0gbnVsbDsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtVHlwZXM7IGorKykgewotICAgICAgICBJWFNERnJhZ21lbnQgbWVtYmVyRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZVVuaW9uSW5zdGFuY2UoaikpOwotICAgICAgICBFbGVtZW50W10gbWVtYmVySW5zdGFuY2VEb2N1bWVudCA9IG5ldyBFbGVtZW50WzFdOwotICAgICAgICBtZW1iZXJJbnN0YW5jZURvY3VtZW50WzBdID0gc2V0RWxlbWVudFRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHNDb3B5W2ldLCBtZW1iZXJGcmFnLmdldE5hbWUoKSk7Ci0gICAgICAgIGlmIChtZW1iZXJGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhtZW1iZXJJbnN0YW5jZURvY3VtZW50KSkgewotICAgICAgICAgIGlmIChtZW1iZXJGcmFnLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGNvbXBhdGlibGVGcmFnID0gbWVtYmVyRnJhZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChjb21wYXRpYmxlRnJhZyA9PSBudWxsKQotICAgICAgICAgICAgY29tcGF0aWJsZUZyYWcgPSBtZW1iZXJGcmFnOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoY29tcGF0aWJsZUZyYWcgIT0gbnVsbCkKLSAgICAgICAgbWVtYmVyRnJhZ21lbnRzLmFkZChjb21wYXRpYmxlRnJhZyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIGFkZEZyYWdtZW50cyhtZW1iZXJGcmFnbWVudHMpOwotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpIHsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBWZWN0b3IgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBFbGVtZW50W10gZnJhZ21lbnRJbnN0YW5jZXMgPSBmcmFnbWVudHNbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgICAgaWYgKGZyYWdtZW50SW5zdGFuY2VzLmxlbmd0aCA+IDApCi0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weS5hZGQoZnJhZ21lbnRJbnN0YW5jZXNbMF0pOwotICAgIH0KLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZURvY3VtZW50c0NvcHkuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IChFbGVtZW50KWluc3RhbmNlRG9jdW1lbnRzQ29weS5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBzZXRFbGVtZW50c1RhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKSk7Ci0gIH0KLQotICBwdWJsaWMgWFNEU2ltcGxlVHlwZURlZmluaXRpb25bXSBnZXRNZW1iZXJUeXBlRGVmaW5pdGlvbnMoKSB7Ci0gICAgaWYgKG1lbWJlclR5cGVzXyA9PSBudWxsKSB7Ci0gICAgICBFTGlzdCBtZW1iZXJUeXBlcyA9ICgoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKSkuZ2V0TWVtYmVyVHlwZURlZmluaXRpb25zKCk7Ci0gICAgICBtZW1iZXJUeXBlc18gPSBuZXcgWFNEU2ltcGxlVHlwZURlZmluaXRpb25bbWVtYmVyVHlwZXMuc2l6ZSgpXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVtYmVyVHlwZXNfLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIG1lbWJlclR5cGVzX1tpXSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiltZW1iZXJUeXBlcy5nZXQoaSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtZW1iZXJUeXBlc187Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZVVuaW9uSW5zdGFuY2UoaW50IG1lbWJlclR5cGVJbmRleCkgewotICAgIGdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpOwotICAgIGlmIChtZW1iZXJUeXBlSW5kZXggPCAwIHx8IG1lbWJlclR5cGVJbmRleCA+IG1lbWJlclR5cGVzXy5sZW5ndGggLSAxKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgU3RyaW5nIG5ld0lEID0gZ2VuSUQoKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB0aGlzQ29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICB4c2RDb25maWcuc2V0WFNEQ29tcG9uZW50KG1lbWJlclR5cGVzX1ttZW1iZXJUeXBlSW5kZXhdKTsKLSAgICB4c2RDb25maWcuc2V0U3R5bGUodGhpc0NvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICB4c2RDb25maWcuc2V0UGFydEVuY29kaW5nKHRoaXNDb25maWcuZ2V0UGFydEVuY29kaW5nKCkpOwotICAgIHhzZENvbmZpZy5zZXRXU0RMUGFydE5hbWUodGhpc0NvbmZpZy5nZXRXU0RMUGFydE5hbWUoKSk7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldEZyYWdtZW50KHhzZENvbmZpZywgbmV3SUQsIGdldE5hbWUoKSk7Ci0gICAgZnJhZy5zZXRJRChuZXdJRCk7Ci0gICAgZnJhZy5zZXROYW1lKGdldE5hbWUoKSk7Ci0gICAgYWRkRnJhZ21lbnQobmV3SUQsIGZyYWcpOwotICAgIHJldHVybiBuZXdJRDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZVVuaW9uSW5zdGFuY2UoMCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25SYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvblJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4NGI2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvblJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVVbmlvblJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVVbmlvbkZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZVVuaW9uUmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uUmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvSFRUUFV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL0hUVFBVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NjVjOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvSFRUUFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RTaW1wbGVMaXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEhUVFBVdGlsCi17Ci0gIHByaXZhdGUgSFRUUFV0aWwoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZW5VUkxFbmNvZGVkUGFyYW1ldGVycyhJWFNERnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgICBpZiAoZnJhZ21lbnQgaW5zdGFuY2VvZiBJWFNEU2ltcGxlTGlzdEZyYWdtZW50KQotICAgICAgcmV0dXJuIGdlblVSTEVuY29kZWRQYXJhbXNGcm9tTGlzdEZyYWdtZW50KChJWFNEU2ltcGxlTGlzdEZyYWdtZW50KWZyYWdtZW50KTsKLSAgICBlbHNlIGlmIChmcmFnbWVudCBpbnN0YW5jZW9mIElYU0RTaW1wbGVBdG9taWNGcmFnbWVudCkKLSAgICAgIHJldHVybiBnZW5VUkxFbmNvZGVkUGFyYW1zRnJvbUF0b21pY0ZyYWdtZW50KChJWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQpZnJhZ21lbnQpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZW5VUkxFbmNvZGVkWE1MUGFyYW1ldGVycyhmcmFnbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2VuVVJMRW5jb2RlZFBhcmFtc0Zyb21BdG9taWNGcmFnbWVudChJWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgdXJsRW5jb2RlZFBhcmFtID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGZyYWdtZW50LmdldFBhcmFtZXRlclZhbHVlcyhmcmFnbWVudC5nZXRJRCgpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKFVSTFV0aWxzLmVuY29kZShmcmFnbWVudC5nZXROYW1lKCkpKTsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoIj0iKTsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoVVJMVXRpbHMuZW5jb2RlKHBhcmFtc1tpXSkpOwotICAgICAgaWYgKGkgPCBwYXJhbXMubGVuZ3RoIC0gMSkKLSAgICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZCgiJiIpOwotICAgIH0KLSAgICByZXR1cm4gdXJsRW5jb2RlZFBhcmFtLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2VuVVJMRW5jb2RlZFBhcmFtc0Zyb21MaXN0RnJhZ21lbnQoSVhTRFNpbXBsZUxpc3RGcmFnbWVudCBmcmFnbWVudCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciB1cmxFbmNvZGVkUGFyYW0gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWdtZW50LmdldEFsbEZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKFVSTFV0aWxzLmVuY29kZShmcmFnbWVudC5nZXROYW1lKCkpKTsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoIj0iKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtcyA9IGNoaWxkRnJhZ3NbaV0uZ2V0UGFyYW1ldGVyVmFsdWVzKGNoaWxkRnJhZ3NbaV0uZ2V0SUQoKSk7Ci0gICAgICBTdHJpbmdCdWZmZXIgcGFyYW1CdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhcmFtcy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1CdWZmZXIuYXBwZW5kKHBhcmFtc1tqXSk7Ci0gICAgICAgIGlmIChqIDwgcGFyYW1zLmxlbmd0aCAtIDEpCi0gICAgICAgICAgcGFyYW1CdWZmZXIuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkxJU1RfU0VQRVJBVE9SKTsKLSAgICAgIH0KLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoVVJMVXRpbHMuZW5jb2RlKHBhcmFtQnVmZmVyLnRvU3RyaW5nKCkpKTsKLSAgICAgIGlmIChpIDwgY2hpbGRGcmFncy5sZW5ndGggLSAxKQotICAgICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKCImIik7Ci0gICAgfQotICAgIHJldHVybiB1cmxFbmNvZGVkUGFyYW0udG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZW5VUkxFbmNvZGVkWE1MUGFyYW1ldGVycyhJWFNERnJhZ21lbnQgZnJhZ21lbnQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgdXJsRW5jb2RlZFBhcmFtID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQoQ29uc3RhbnRzLlVSSV9TT0FQMTFfRU5WLCBDb25zdGFudHMuTlNfUFJFRklYX1NPQVBfRU5WKTsKLSAgICBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQoQ29uc3RhbnRzLlVSSV8yMDAxX1NDSEVNQV9YU0ksIENvbnN0YW50cy5OU19QUkVGSVhfU0NIRU1BX1hTSSk7Ci0gICAgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KENvbnN0YW50cy5VUklfMjAwMV9TQ0hFTUFfWFNELCBDb25zdGFudHMuTlNfUFJFRklYX1NDSEVNQV9YU0QpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50WzBdOwotICAgIHRyeQotICAgIHsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gZnJhZ21lbnQuZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKHRydWUsIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKSk7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkKLSAgICB7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZChVUkxVdGlscy5lbmNvZGUoZnJhZ21lbnQuZ2V0TmFtZSgpKSk7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKCI9Iik7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKFVSTFV0aWxzLmVuY29kZShYTUxVdGlscy5zZXJpYWxpemUoaW5zdGFuY2VEb2N1bWVudHNbaV0sIHRydWUpKSk7Ci0gICAgICBpZiAoaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aCAtIDEpCi0gICAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoIiYiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVybEVuY29kZWRQYXJhbS50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvdXRpbC9PcHRpb25WZWN0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL09wdGlvblZlY3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2FlNWIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL09wdGlvblZlY3Rvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgT3B0aW9uVmVjdG9yCi17Ci0gIHByaXZhdGUgVmVjdG9yIG9wdGlvbnNfOwotICAKLSAgcHVibGljIE9wdGlvblZlY3RvcigpCi0gIHsKLSAgICBvcHRpb25zXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkT3B0aW9uKFN0cmluZyBkaXNwbGF5VmFsdWUsU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgb3B0aW9uc18uYWRkRWxlbWVudChuZXcgT3B0aW9uKGRpc3BsYXlWYWx1ZSx2YWx1ZSkpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlWYWx1ZShpbnQgcG9zaXRpb24pCi0gIHsKLSAgICBPcHRpb24gb3B0aW9uID0gKE9wdGlvbilvcHRpb25zXy5lbGVtZW50QXQocG9zaXRpb24pOwotICAgIHJldHVybiBvcHRpb24uZ2V0RGlzcGxheVZhbHVlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoaW50IHBvc2l0aW9uKQotICB7Ci0gICAgT3B0aW9uIG9wdGlvbiA9IChPcHRpb24pb3B0aW9uc18uZWxlbWVudEF0KHBvc2l0aW9uKTsKLSAgICByZXR1cm4gb3B0aW9uLmdldFZhbHVlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgc2l6ZSgpCi0gIHsKLSAgICByZXR1cm4gb3B0aW9uc18uc2l6ZSgpOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIGNsYXNzIE9wdGlvbgotICB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZGlzcGxheVZhbHVlXzsKLSAgICBwcml2YXRlIFN0cmluZyB2YWx1ZV87Ci0gICAgcHVibGljIE9wdGlvbihTdHJpbmcgZGlzcGxheVZhbHVlLFN0cmluZyB2YWx1ZSkKLSAgICB7Ci0gICAgICBkaXNwbGF5VmFsdWVfID0gZGlzcGxheVZhbHVlOwotICAgICAgdmFsdWVfID0gdmFsdWU7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGlzcGxheVZhbHVlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gZGlzcGxheVZhbHVlXzsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRWYWx1ZSgpCi0gICAgewotICAgICAgcmV0dXJuIHZhbHVlXzsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL1hTRFR5cGVEZWZpbml0aW9uVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvWFNEVHlwZURlZmluaXRpb25VdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNTllMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvWFNEVHlwZURlZmluaXRpb25VdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGNsYXNzIFhTRFR5cGVEZWZpbml0aW9uVXRpbCB7Ci0gIHByaXZhdGUgWFNEVHlwZURlZmluaXRpb25VdGlsKCkgewotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBucyA9IHR5cGUuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgcmV0dXJuIChucyAhPSBudWxsICYmIG5zLmVxdWFscyhGcmFnbWVudENvbnN0YW50cy5VUklfWFNEKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1Jvb3RUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gbnVsbCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIFhTRFR5cGVEZWZpbml0aW9uIGJhc2VUeXBlID0gdHlwZS5nZXRCYXNlVHlwZSgpOwotICAgIGlmIChiYXNlVHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5nIHR5cGVOUyA9IHR5cGUuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgU3RyaW5nIGJhc2VUeXBlTlMgPSBiYXNlVHlwZS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICBTdHJpbmcgYmFzZVR5cGVOYW1lID0gYmFzZVR5cGUuZ2V0TmFtZSgpOwotICAgIGJvb2xlYW4gc2FtZU5TOwotICAgIGJvb2xlYW4gc2FtZU5hbWU7Ci0gICAgaWYgKHR5cGVOUyA9PSBudWxsICYmIGJhc2VUeXBlTlMgPT0gbnVsbCkKLSAgICAgIHNhbWVOUyA9IHRydWU7Ci0gICAgZWxzZSBpZiAodHlwZU5TICE9IG51bGwgJiYgYmFzZVR5cGVOUyAhPSBudWxsICYmIHR5cGVOUy5lcXVhbHMoYmFzZVR5cGVOUykpCi0gICAgICBzYW1lTlMgPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHNhbWVOUyA9IGZhbHNlOwotICAgIGlmICh0eXBlTmFtZSA9PSBudWxsICYmIGJhc2VUeXBlTmFtZSA9PSBudWxsKQotICAgICAgc2FtZU5hbWUgPSB0cnVlOwotICAgIGVsc2UgaWYgKHR5cGVOYW1lICE9IG51bGwgJiYgYmFzZVR5cGVOYW1lICE9IG51bGwgJiYgdHlwZU5hbWUuZXF1YWxzKGJhc2VUeXBlTmFtZSkpCi0gICAgICBzYW1lTmFtZSA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgc2FtZU5hbWUgPSBmYWxzZTsKLSAgICByZXR1cm4gKHNhbWVOUyAmJiBzYW1lTmFtZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgWFNEVHlwZURlZmluaXRpb24gcmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gY3VyclR5cGUgPSB0eXBlOwotICAgIHdoaWxlICghaXNYU0RCdWlsdEluVHlwZURlZmluaXRpb24oY3VyclR5cGUpKSB7Ci0gICAgICBpZiAoaXNSb290VHlwZURlZmluaXRpb24oY3VyclR5cGUpKQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIGN1cnJUeXBlID0gY3VyclR5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGN1cnJUeXBlOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU29hcEVuY0FycmF5KFhTRFR5cGVEZWZpbml0aW9uIHR5cGUpIHsKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiBjdXJyVHlwZSA9IHR5cGU7Ci0gICAgaWYgKGN1cnJUeXBlICE9IG51bGwpCi0gICAgd2hpbGUoY3VyclR5cGUgIT0gbnVsbCkgewotICAgICAgU3RyaW5nIG5zID0gY3VyclR5cGUuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGN1cnJUeXBlLmdldE5hbWUoKTsKLSAgICAgIGlmIChGcmFnbWVudENvbnN0YW50cy5VUklfU09BUC5lcXVhbHMobnMpICYmIEZyYWdtZW50Q29uc3RhbnRzLlFOQU1FX0xPQ0FMX05BTUVfQVJSQVkuZXF1YWxzKG5hbWUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGVsc2UgaWYgKGlzUm9vdFR5cGVEZWZpbml0aW9uKGN1cnJUeXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZWxzZQotICAgICAgICBjdXJyVHlwZSA9IGN1cnJUeXBlLmdldEJhc2VUeXBlKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjb21wbGV4IHR5cGUgY29udGVudCBnaXZlbiBhIGNvbXBsZXggdHlwZS4KLSAgICogSWYgY29tcGxleFR5cGUgaXMgYSB1c2VyIGRlZmluZWQgdHlwZToKLSAgICogICBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgdXNlciBkZWZpbmVkIGNvbXBsZXggY29udGVudCBvZiB0aGlzIHR5cGUgb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGV4dGVuZGVkCi0gICAqICAgb3IgZGVyaXZlZCB0eXBlIGlmZiB0aGUgZXh0ZW5kZWQgb3IgZGVyaXZlZCB0eXBlIGlzIG5vdCBhIGJ1aWx0LWluIFhTRCB0eXBlIChmb3IgZXhhbXBsZSwgeHNkOmFueVR5cGUpLgotICAgKiBJZiBjb21wbGV4VHlwZSBpcyBhIGJ1aWx0LWluIFhTRCB0eXBlOgotICAgKiAgIEl0IHdpbGwgcmV0dXJuIHRoZSBjb21wbGV4IGNvbnRlbnQgb2YgdGhpcyBidWlsdC1pbiBYU0QgY29tcGxleCB0eXBlLiAgSXQgd2lsbCBub3QgcmV0dXJuIHRoZQotICAgKiAgIGNvbXBsZXggY29udGVudCBvZiBpdHMgZXh0ZW5kZWQgb3IgZGVyaXZlZCB0eXBlLgotICAgKiBAcGFyYW0gY29tcGxleFR5cGUgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXggdHlwZS4KLSAgICogQHJldHVybiBYU0RDb21wbGV4VHlwZUNvbnRlbnQgWFNEQ29tcGxleFR5cGVDb250ZW50IHRoZSByZXNvbHZlZCBjb21wbGV4IHR5cGUgY29udGVudC4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgWFNEQ29tcGxleFR5cGVDb250ZW50IGdldFhTRENvbXBsZXhUeXBlQ29udGVudChYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUpCi0gIHsKLSAgICBpZiAoIWlzWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKGNvbXBsZXhUeXBlKSkKLSAgICB7Ci0gICAgICBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlID0gY29tcGxleFR5cGU7Ci0gICAgICB3aGlsZSAoIWlzWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHR5cGUpICYmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9ICgoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKXR5cGUpLmdldENvbnRlbnQoKTsKLSAgICAgICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCAhPSBudWxsKQotICAgICAgICAgIHJldHVybiBjb21wbGV4VHlwZUNvbnRlbnQ7Ci0gICAgICAgIGlmIChpc1Jvb3RUeXBlRGVmaW5pdGlvbih0eXBlKSkKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdHlwZSA9IHR5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gY29tcGxleFR5cGUuZ2V0Q29udGVudCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9EZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGYzOGVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9EZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgcHVibGljIFN0cmluZyBmb3JtTGlua187Ci0KLSAgcHVibGljIERldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0LCBTdHJpbmcgZm9ybUxpbmspIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgZm9ybUxpbmtfID0gZm9ybUxpbms7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKSB7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICByZXR1cm4gZm9ybUxpbmtfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvSW52b2tlV1NETE9wZXJhdGlvblRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9JbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjk0Njk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9JbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLQotICBwcml2YXRlIFN0cmluZyBmcmFnbWVudFZpZXdJRF87Ci0gIHByaXZhdGUgU3RyaW5nIGZyYWdtZW50TmFtZUFuY2hvcklEXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5kUG9pbnRfOwotCi0gIHB1YmxpYyBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2VuYWJsZWQuZ2lmIiwgIndzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIGZyYWdtZW50Vmlld0lEXyA9IEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNOwotICAgIGZyYWdtZW50TmFtZUFuY2hvcklEXyA9IG51bGw7Ci0gICAgZW5kUG9pbnRfID0gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpIHsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgIFN0cmluZ0J1ZmZlciBmb3JtTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3JtTGluay5hcHBlbmQoIndzZGwvZm9ybXMvSW52b2tlV1NETE9wZXJhdGlvbkZvcm0uanNwIik7Ci0gICAgU3RyaW5nIG5hbWVBbmNob3JJRCA9IGdldEZyYWdtZW50TmFtZUFuY2hvcklEKCk7Ci0gICAgaWYgKG5hbWVBbmNob3JJRCAhPSBudWxsICYmIG5hbWVBbmNob3JJRC5sZW5ndGgoKSA+IDApIHsKLSAgICAgIGZvcm1MaW5rLmFwcGVuZCgiIyIpOwotICAgICAgZm9ybUxpbmsuYXBwZW5kKG5hbWVBbmNob3JJRCk7Ci0gICAgICBzZXRGcmFnbWVudE5hbWVBbmNob3JJRChudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZvcm1MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1BY3Rpb25MaW5rKGludCBvcGVyYXRpb25UeXBlLFN0cmluZyBmcmFnbWVudFZpZXdJRCkKLSAgewotICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExPcGVyYXRpb25FbGVtZW50Lk9QRVJBVElPTl9UWVBFX1NPQVA6Ci0gICAgICAgIGlmIChmcmFnbWVudFZpZXdJRC5lcXVhbHMoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UpKQotICAgICAgICAgIHJldHVybiAid3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uSlNQLmpzcCI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gIndzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwIjsKLSAgICAgIGNhc2UgV1NETE9wZXJhdGlvbkVsZW1lbnQuT1BFUkFUSU9OX1RZUEVfSFRUUF9HRVQ6Ci0gICAgICAgIHJldHVybiAid3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AiOwotICAgICAgY2FzZSBXU0RMT3BlcmF0aW9uRWxlbWVudC5PUEVSQVRJT05fVFlQRV9IVFRQX1BPU1Q6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIndzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcCI7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGcmFnbWVudFZpZXdJRCgpIHsKLSAgICByZXR1cm4gZnJhZ21lbnRWaWV3SURfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RnJhZ21lbnRWaWV3SUQoU3RyaW5nIGZyYWdtZW50Vmlld0lEKSB7Ci0gICAgZnJhZ21lbnRWaWV3SURfID0gZnJhZ21lbnRWaWV3SUQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZyYWdtZW50TmFtZUFuY2hvcklEKCkgewotICAgIHJldHVybiBmcmFnbWVudE5hbWVBbmNob3JJRF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRGcmFnbWVudE5hbWVBbmNob3JJRChTdHJpbmcgZnJhZ21lbnROYW1lQW5jaG9ySUQpIHsKLSAgICBmcmFnbWVudE5hbWVBbmNob3JJRF8gPSBmcmFnbWVudE5hbWVBbmNob3JJRDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kUG9pbnQoKQotICB7Ci0gICAgcmV0dXJuIGVuZFBvaW50XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVuZFBvaW50KFN0cmluZyBlbmRQb2ludCkKLSAgewotICAgIGVuZFBvaW50XyA9IGVuZFBvaW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvT3BlbldTRExUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvT3BlbldTRExUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2OGMxZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL09wZW5XU0RMVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTRExUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIE9wZW5XU0RMVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzZGwvaW1hZ2VzL29wZW5fd3NkbF9lbmFibGVkLmdpZiIsICJ3c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbC9mb3Jtcy9PcGVuV1NETEZvcm0uanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9TT0FQTWVzc2FnZVF1ZXVlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvU09BUE1lc3NhZ2VRdWV1ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGYwYWZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9TT0FQTWVzc2FnZVF1ZXVlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLQotcHVibGljIGNsYXNzIFNPQVBNZXNzYWdlUXVldWUgZXh0ZW5kcyBNZXNzYWdlUXVldWUKLXsKLSAgcHJpdmF0ZSBWZWN0b3IgY2FjaGVkTWVzc2FnZUxpc3RfOwotCi0gIHB1YmxpYyBTT0FQTWVzc2FnZVF1ZXVlKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgY2FjaGVkTWVzc2FnZUxpc3RfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xlYXIoKQotICB7Ci0gICAgY2FjaGVkTWVzc2FnZUxpc3RfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgbWVzc2FnZUxpc3RfLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2VzRnJvbUxpc3QoKQotICB7Ci0gICAgaWYgKG1lc3NhZ2VMaXN0Xy5zaXplKCkgPT0gMCkKLSAgICAgIGNvcHlNZXNzYWdlcyhjYWNoZWRNZXNzYWdlTGlzdF8sbWVzc2FnZUxpc3RfKTsKLSAgICBlbHNlCi0gICAgICBjb3B5TWVzc2FnZXMobWVzc2FnZUxpc3RfLGNhY2hlZE1lc3NhZ2VMaXN0Xyk7Ci0gICAgcmV0dXJuIHN1cGVyLmdldE1lc3NhZ2VzRnJvbUxpc3QoKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBjb3B5TWVzc2FnZXMoVmVjdG9yIHNvdXJjZUxpc3QsVmVjdG9yIGRlc3RMaXN0KQotICB7Ci0gICAgZm9yIChpbnQgaT0wO2k8c291cmNlTGlzdC5zaXplKCk7aSsrKQotICAgICAgZGVzdExpc3QuYWRkRWxlbWVudChzb3VyY2VMaXN0LmVsZW1lbnRBdChpKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQWRkVG9GYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEFkZFRvRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTliMDAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQWRkVG9GYXZvcml0ZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLldTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExBZGRUb0Zhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgcHVibGljIFdTRExBZGRUb0Zhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFdTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQmluZGluZ0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEJpbmRpbmdEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTA0Nzk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQmluZGluZ0RldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFdTRExCaW5kaW5nRGV0YWlsc1Rvb2wgZXh0ZW5kcyBEZXRhaWxzVG9vbCB7Ci0KLSAgcHVibGljIFdTRExCaW5kaW5nRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0LCAid3NkbC9mb3Jtcy9XU0RMQmluZGluZ0RldGFpbHNGb3JtLmpzcCIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEJpbmRpbmdOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEJpbmRpbmdOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZmMwOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExCaW5kaW5nTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotCi0vLyBXU0RMIGJpbmRpbmcgbm9kZSBmb3IgdGhlIFdTREwgTmF2aWdhdG9yIFRyZWUgVmlldwotcHVibGljIGNsYXNzIFdTRExCaW5kaW5nTm9kZSBleHRlbmRzIFdTRExOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBXU0RMQmluZGluZ05vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsIndzZGwvaW1hZ2VzL3dzZGxfYmluZGluZ19ub2RlLmdpZiIpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfT1BFUkFUSU9OKSkgewotICAgICAgICAgIFdTRExPcGVyYXRpb25Ob2RlIHdzZGxPcGVyYXRpb25Ob2RlID0gbmV3IFdTRExPcGVyYXRpb25Ob2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgIGFkZENoaWxkKHdzZGxPcGVyYXRpb25Ob2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTikpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9PUEVSQVRJT04pKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICAgIHNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBXU0RMQmluZGluZ0RldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0JJTkRJTkdfREVUQUlMUyIpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETERldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETERldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYTgxMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMRGV0YWlsc1Rvb2wgZXh0ZW5kcyBEZXRhaWxzVG9vbCB7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9STV9WSUVXX0lEID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX1ZJRVdfSUQgPSAxOwotCi0gIHByaXZhdGUgaW50IHZpZXdJZF87Ci0KLSAgcHVibGljIFdTRExEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQsICJ3c2RsL2Zvcm1zL1dTRExEZXRhaWxzRm9ybS5qc3AiKTsKLSAgICB2aWV3SWRfID0gRk9STV9WSUVXX0lEOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRWaWV3SWQoKSB7Ci0gICAgcmV0dXJuIHZpZXdJZF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRWaWV3SWQoaW50IHZpZXdJZCkgewotICAgIGlmICh2aWV3SWQgPT0gRk9STV9WSUVXX0lEIHx8IHZpZXdJZCA9PSBTT1VSQ0VfVklFV19JRCkKLSAgICAgIHZpZXdJZF8gPSB2aWV3SWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0b2dnbGVWaWV3SWQoKSB7Ci0gICAgaWYgKHZpZXdJZF8gPT0gRk9STV9WSUVXX0lEKQotICAgICAgdmlld0lkXyA9IFNPVVJDRV9WSUVXX0lEOwotICAgIGVsc2UKLSAgICAgIHZpZXdJZF8gPSBGT1JNX1ZJRVdfSUQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzN2Q5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLldTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCB7Ci0gIHB1YmxpYyBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzg1MjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9Xb3JrYmVuY2hUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hUb29sIHsKLSAgcHVibGljIFdTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgcmV0dXJuICJ3c2RsL2Zvcm1zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzZTNiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCB7Ci0gIHB1YmxpYyBXU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICByZXR1cm4gIndzZGwvZm9ybXMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTWFpbk5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTWFpbk5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3NzNmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE1haW5Ob2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLS8vIFJvb3Qgbm9kZSBmb3IgdGhlIFdTREwgTmF2aWdhdG9yIFRyZWUgVmlldwotcHVibGljIGNsYXNzIFdTRExNYWluTm9kZSBleHRlbmRzIFdTRExOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBXU0RMTWFpbk5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsMSwiaW1hZ2VzL3Jvb3RfbWFpbi5naWYiKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMKSkgewotICAgICAgICAgIFdTRExOb2RlIHdzZGxOb2RlID0gbmV3IFdTRExOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgIGFkZENoaWxkKHdzZGxOb2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMKSkgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMKSkgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBPcGVuV1NETFRvb2wodG9vbE1hbmFnZXJfLCB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX09QRU5fV1NETCIpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE5hdmlnYXRvck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTmF2aWdhdG9yTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yjc1ODBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTmF2aWdhdG9yTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMTmF2aWdhdG9yTm9kZSBleHRlbmRzIE5vZGUKLXsKLSAgcHVibGljIFdTRExOYXZpZ2F0b3JOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsaW1hZ2VQYXRoKTsKLSAgfQotCi0gIC8vIHdzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkKLSAgewotICAgIHJldHVybiBUb2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8saXNPcGVuXyk7Ci0gIH0KLQotICAvLyB3c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGZhbHNlKTsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMTI3NGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLS8vIFdTREwgbm9kZSBmb3IgdGhlIFdTREwgTmF2aWdhdG9yIFRyZWUgVmlldwotcHVibGljIGNsYXNzIFdTRExOb2RlIGV4dGVuZHMgV1NETE5hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIFdTRExOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJpbWFnZXMvd3NkbC5naWYiKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0UpKSB7Ci0gICAgICAgICAgV1NETFNlcnZpY2VOb2RlIHdzZGxTZXJ2aWNlTm9kZSA9IG5ldyBXU0RMU2VydmljZU5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgYWRkQ2hpbGQod3NkbFNlcnZpY2VOb2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0UpKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRSkpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IFdTRExEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NETF9ERVRBSUxTIikpOwotICAgIG5ldyBXU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbCh0b29sTWFuYWdlcl8sIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSCIpKTsKLSAgICBuZXcgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sKHRvb2xNYW5hZ2VyXywgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgbmV3IFdTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh0b29sTWFuYWdlcl8sIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQiKSk7Ci0gICAgbmV3IFdTRExBZGRUb0Zhdm9yaXRlc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9XU0RMX1RPX0ZBVk9SSVRFUyIpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExPcGVyYXRpb25Ob2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE9wZXJhdGlvbk5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M4ZTNjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE9wZXJhdGlvbk5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLS8vIFdTREwgb3BlcmF0aW9uIG5vZGUgZm9yIHRoZSBXU0RMIE5hdmlnYXRvciBUcmVlIFZpZXcKLXB1YmxpYyBjbGFzcyBXU0RMT3BlcmF0aW9uTm9kZSBleHRlbmRzIFdTRExOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBXU0RMT3BlcmF0aW9uTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwid3NkbC9pbWFnZXMvd3NkbF9vcGVyYXRpb25fbm9kZS5naWYiKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgSW52b2tlV1NETE9wZXJhdGlvblRvb2wodG9vbE1hbmFnZXJfLCB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0lOVk9LRV9XU0RMX09QRVJBVElPTiIpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFBlcnNwZWN0aXZlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFBlcnNwZWN0aXZlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWJkODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExQZXJzcGVjdGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRWNvcmVQYWNrYWdlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZUZhY3RvcnlSZWdpc3RyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5QZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLk9wZW5XU0RMQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5CaW5kaW5nVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExCaW5kaW5nRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETFNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRFBhY2thZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFJlc291cmNlRmFjdG9yeUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMUGVyc3BlY3RpdmUgZXh0ZW5kcyBQZXJzcGVjdGl2ZQotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfQ09OVEVOVF9ERUZBVUxUID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0NPTlRFTlRfUkVTVUxUX0ZPUk0gPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfQ09OVEVOVF9SRVNVTFRfU09VUkNFID0gMjsKLQotICBwcml2YXRlIEJhc2ljTW9kZWwgbW9kZWxfOwotICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICBwcml2YXRlIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgcHJpdmF0ZSBpbnQgc3RhdHVzQ29udGVudFR5cGVfOwotCi0gIHByaXZhdGUgU09BUE1lc3NhZ2VRdWV1ZSBzb2FwUmVxdWVzdFF1ZXVlXzsKLSAgcHJpdmF0ZSBTT0FQTWVzc2FnZVF1ZXVlIHNvYXBSZXNwb25zZVF1ZXVlXzsKLSAgcHJpdmF0ZSBOb2RlIG9wZXJhdGlvbk5vZGVfOwotCi0gIHN0YXRpYwotICB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgWFNEIHN1YnN5c3RlbS4KLSAgICAobmV3IFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5SW1wbCgpKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoInhzZCIsbmV3IFhTRFJlc291cmNlRmFjdG9yeUltcGwoKSk7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICAvLyBJbml0LmluaXQoKTsKLSAgICBFY29yZVBhY2thZ2VJbXBsLmluaXQoKTsKLSAgICBYU0RQYWNrYWdlSW1wbC5pbml0KCk7Ci0gIH0KLQotICBwdWJsaWMgV1NETFBlcnNwZWN0aXZlKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKCJ3c2RsIixjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXRQZXJzcGVjdGl2ZShTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgewotICAgIG1vZGVsXyA9IG5ldyBCYXNpY01vZGVsKCJ3c2RsTW9kZWwiKTsKLSAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudChnZXRNZXNzYWdlKCJOT0RFX05BTUVfV1NETF9NQUlOIiksIG1vZGVsXyk7Ci0gICAgbW9kZWxfLnNldFJvb3RFbGVtZW50KHRyZWVFbGVtZW50KTsKLSAgICBub2RlTWFuYWdlcl8gPSBuZXcgTm9kZU1hbmFnZXIoY29udHJvbGxlcl8pOwotICAgIFdTRExNYWluTm9kZSB3c2RsTWFpbk5vZGUgPSBuZXcgV1NETE1haW5Ob2RlKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlcl8pOwotICAgIG5vZGVNYW5hZ2VyXy5zZXRSb290Tm9kZSh3c2RsTWFpbk5vZGUpOwotCi0gICAgLy8gU3RhcnRpbmcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgaWYgKCFEaXJVdGlscy5pc1JUTCgpKQotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIzMCUsKiI7Ci0gICAgZWxzZQotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIqLDMwJSI7Ci0gICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9ICI3NSUsKiI7Ci0gICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotCi0gICAgLy8gTWVzc2FnZSBzdGF0dXMgcGFuZQotICAgIHN0YXR1c0NvbnRlbnRUeXBlXyA9IFNUQVRVU19DT05URU5UX0RFRkFVTFQ7Ci0gICAgc29hcFJlcXVlc3RRdWV1ZV8gPSBuZXcgU09BUE1lc3NhZ2VRdWV1ZSgpOwotICAgIHNvYXBSZXNwb25zZVF1ZXVlXyA9IG5ldyBTT0FQTWVzc2FnZVF1ZXVlKCk7Ci0gICAgb3BlcmF0aW9uTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcHJlbG9hZFdTREwoU3RyaW5nW10gd3NkbFVSTHMpIHsKLSAgICBpZiAod3NkbFVSTHMgIT0gbnVsbCkgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsVVJMcy5sZW5ndGg7IGkrKykgewotICAgICAgICBPcGVuV1NETEFjdGlvbiBvcGVuV1NETEFjdGlvbiA9IG5ldyBPcGVuV1NETEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gb3BlbldTRExBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBTdHJpbmcgZGVjb2RlZFdTRExVUkwgPSBVUkxVdGlscy5kZWNvZGUod3NkbFVSTHNbaV0pOwotICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwsIGRlY29kZWRXU0RMVVJMKTsKLSAgICAgICAgb3BlbldTRExBY3Rpb24ucnVuKCk7Ci0gICAgICB9Ci0gICAgICBpZiAod3NkbFVSTHMubGVuZ3RoID4gMCkKLSAgICAgICAgY29udHJvbGxlcl8uc2V0Q3VycmVudFBlcnNwZWN0aXZlKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZWxvYWRFbmRwb2ludHMoU3RyaW5nW10gd3NkbFVSTHMsIFN0cmluZ1tdIGVuZHBvaW50cykKLSAgewotICAgIGlmICh3c2RsVVJMcyAhPSBudWxsICYmIHdzZGxVUkxzLmxlbmd0aCA+IDAgJiYgZW5kcG9pbnRzICE9IG51bGwgJiYgZW5kcG9pbnRzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgU3RyaW5nIHdzZGxVUkwgPSB3c2RsVVJMc1swXTsKLSAgICAgIFZlY3RvciB3c2RsTm9kZXMgPSBub2RlTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIHdzZGxOb2Rlc0l0ZXJhdG9yID0gd3NkbE5vZGVzLml0ZXJhdG9yKCk7IHdzZGxOb2Rlc0l0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgd3NkbE5vZGUgPSAoTm9kZSl3c2RsTm9kZXNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIGlmICh3c2RsTm9kZS5nZXROb2RlTmFtZSgpLmVxdWFscyh3c2RsVVJMKSkKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciBzZXJ2aWNlTm9kZXMgPSB3c2RsTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBzZXJ2aWNlTm9kZXNJdGVyYXRvciA9IHNlcnZpY2VOb2Rlcy5pdGVyYXRvcigpOyBzZXJ2aWNlTm9kZXNJdGVyYXRvci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgc2VydmljZU5vZGUgPSAoTm9kZSlzZXJ2aWNlTm9kZXNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgICBWZWN0b3IgYmluZGluZ05vZGVzID0gc2VydmljZU5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgU3RyaW5nW10gbm9kZUlkcyA9IG5ldyBTdHJpbmdbYmluZGluZ05vZGVzLnNpemUoKV07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgIG5vZGVJZHNbaV0gPSBTdHJpbmcudmFsdWVPZigoKE5vZGUpYmluZGluZ05vZGVzLmdldChpKSkuZ2V0Tm9kZUlkKCkpOwotICAgICAgICAgICAgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24gYWN0aW9uID0gbmV3IFVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgbm9kZUlkcyk7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCwgZW5kcG9pbnRzKTsKLSAgICAgICAgICAgIGFjdGlvbi5zZXRQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGUpOwotICAgICAgICAgICAgYWN0aW9uLmV4ZWN1dGUoZmFsc2UpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZXNlbGVjdFNlcnZpY2VPckJpbmRpbmcoU3RyaW5nW10gd3NkbFVSTHMsU3RyaW5nW10gc2VydmljZVFOYW1lU3RyaW5ncyxTdHJpbmdbXSBiaW5kaW5nTmFtZVN0cmluZ3MpCi0gIHsKLSAgICBpZiAod3NkbFVSTHMgIT0gbnVsbCAmJiB3c2RsVVJMcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIFN0cmluZyB3c2RsVVJMID0gd3NkbFVSTHNbMF07Ci0gICAgICBpZiAoc2VydmljZVFOYW1lU3RyaW5ncyAhPSBudWxsICYmIHNlcnZpY2VRTmFtZVN0cmluZ3MubGVuZ3RoID4gMCkKLSAgICAgICAgcHJlc2VsZWN0U2VydmljZSh3c2RsVVJMLHNlcnZpY2VRTmFtZVN0cmluZ3NbMF0pOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoYmluZGluZ05hbWVTdHJpbmdzICE9IG51bGwgJiYgYmluZGluZ05hbWVTdHJpbmdzLmxlbmd0aCA+IDApCi0gICAgICAgICAgcHJlc2VsZWN0QmluZGluZyh3c2RsVVJMLGJpbmRpbmdOYW1lU3RyaW5nc1swXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgcHJlc2VsZWN0U2VydmljZShTdHJpbmcgd3NkbFVSTCxTdHJpbmcgc2VydmljZVFOYW1lU3RyaW5nKQotICB7Ci0gICAgVmVjdG9yIHdzZGxOb2RlcyA9IG5vZGVNYW5hZ2VyXy5nZXRSb290Tm9kZSgpLmdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTx3c2RsTm9kZXMuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBOb2RlIHdzZGxOb2RlID0gKE5vZGUpd3NkbE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmICh3c2RsTm9kZS5nZXROb2RlTmFtZSgpLmVxdWFscyh3c2RsVVJMKSkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaj0wO2o8c2VydmljZU5vZGVzLnNpemUoKTtqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdChqKTsKLSAgICAgICAgICBXU0RMU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gc2VydmljZUVsZW1lbnQuZ2V0U2VydmljZSgpOwotICAgICAgICAgIGlmIChzZXJ2aWNlLmdldFFOYW1lKCkudG9TdHJpbmcoKS5lcXVhbHMoc2VydmljZVFOYW1lU3RyaW5nKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBub2RlTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQoc2VydmljZU5vZGUuZ2V0Tm9kZUlkKCkpOwotICAgICAgICAgICAgbm9kZU1hbmFnZXJfLm1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCk7Ci0gICAgICAgICAgICBjb250cm9sbGVyXy5zZXRDdXJyZW50UGVyc3BlY3RpdmUoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHByZXNlbGVjdEJpbmRpbmcoU3RyaW5nIHdzZGxVUkwsU3RyaW5nIGJpbmRpbmdOYW1lU3RyaW5nKQotICB7Ci0gICAgVmVjdG9yIHdzZGxOb2RlcyA9IG5vZGVNYW5hZ2VyXy5nZXRSb290Tm9kZSgpLmdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTx3c2RsTm9kZXMuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBOb2RlIHdzZGxOb2RlID0gKE5vZGUpd3NkbE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmICh3c2RsTm9kZS5nZXROb2RlTmFtZSgpLmVxdWFscyh3c2RsVVJMKSkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaj0wO2o8c2VydmljZU5vZGVzLnNpemUoKTtqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdChqKTsKLSAgICAgICAgICBWZWN0b3IgYmluZGluZ05vZGVzID0gc2VydmljZU5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgIGZvciAoaW50IGs9MDtrPGJpbmRpbmdOb2Rlcy5zaXplKCk7aysrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgYmluZGluZ05vZGUgPSAoTm9kZSliaW5kaW5nTm9kZXMuZWxlbWVudEF0KGspOwotICAgICAgICAgICAgV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudCliaW5kaW5nTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKGJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpLnRvU3RyaW5nKCkuZXF1YWxzKGJpbmRpbmdOYW1lU3RyaW5nKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbm9kZU1hbmFnZXJfLnNldFNlbGVjdGVkTm9kZUlkKGJpbmRpbmdOb2RlLmdldE5vZGVJZCgpKTsKLSAgICAgICAgICAgICAgbm9kZU1hbmFnZXJfLm1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCk7Ci0gICAgICAgICAgICAgIGNvbnRyb2xsZXJfLnNldEN1cnJlbnRQZXJzcGVjdGl2ZShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCk7Ci0gICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgICAgCi0gICAgICB9Ci0gICAgfSAgICAKLSAgfQotCi0gIHB1YmxpYyBOb2RlTWFuYWdlciBnZXROb2RlTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gbm9kZU1hbmFnZXJfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAid3NkbC93c2RsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBhbmVzRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RnJhbWVzZXRzRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvc2NyaXB0cy93c2RsZnJhbWVzZXRzLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb2Nlc3NGcmFtZXNldHNGb3JtKCkKLSAgewotICAgIHJldHVybiAid3NkbC9mb3Jtcy9Qcm9jZXNzV1NETEZyYW1lc2V0c0Zvcm0uanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsTmF2aWdhdG9yQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAid3NkbFByb3BlcnRpZXNDb250YWluZXIiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAid3NkbFN0YXR1c0NvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKQotICB7Ci0gICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gIHsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKFN0cmluZyBjb2xzKQotICB7Ci0gICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKQotICB7Ci0gICAgcmV0dXJuIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKFN0cmluZyByb3dzKQotICB7Ci0gICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKFN0cmluZyByb3dzKQotICB7Ci0gICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IHJvd3M7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gIHsKLSAgICByZXR1cm4gc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3dpdGNoUGVyc3BlY3RpdmVGb3JtQWN0aW9uTGluayhpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZCxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICByZXR1cm4gU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbi5nZXRGb3JtQWN0aW9uTGluayh0YXJnZXRQZXJzcGVjdGl2ZUlkLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRTdGF0dXNDb250ZW50VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzQ29udGVudFR5cGVfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U3RhdHVzQ29udGVudFR5cGUoaW50IHN0YXR1c0NvbnRlbnRUeXBlKQotICB7Ci0gICAgc3RhdHVzQ29udGVudFR5cGVfID0gc3RhdHVzQ29udGVudFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU09BUE1lc3NhZ2VRdWV1ZSBnZXRTT0FQUmVxdWVzdFF1ZXVlKCkKLSAgewotICAgIHJldHVybiBzb2FwUmVxdWVzdFF1ZXVlXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTT0FQTWVzc2FnZVF1ZXVlIGdldFNPQVBSZXNwb25zZVF1ZXVlKCkKLSAgewotICAgIHJldHVybiBzb2FwUmVzcG9uc2VRdWV1ZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRPcGVyYXRpb25Ob2RlKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb25Ob2RlXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldE9wZXJhdGlvbk5vZGUoTm9kZSBvcGVyYXRpb25Ob2RlKQotICB7Ci0gICAgb3BlcmF0aW9uTm9kZV8gPSBvcGVyYXRpb25Ob2RlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTT0FQRW52ZWxvcGVYTUxMaW5rKGludCBzb2FwRW52ZWxvcGVUeXBlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL3NvYXBfZW52ZWxvcGVfeG1sLmpzcD8iKTsKLSAgICBsaW5rLmFwcGVuZChXU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRSkuYXBwZW5kKCc9JykuYXBwZW5kKHNvYXBFbnZlbG9wZVR5cGUpOwotICAgIHJldHVybiBsaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEJpbmRpbmdUeXBlU3RyaW5nKGludCBiaW5kaW5nVHlwZSkKLSAgewotICAgIHN3aXRjaCAoYmluZGluZ1R5cGUpCi0gICAgewotICAgICAgY2FzZSBCaW5kaW5nVHlwZXMuU09BUDoKLSAgICAgICAgcmV0dXJuIGdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQklORElOR19UWVBFX1NPQVAiKTsKLSAgICAgIGNhc2UgQmluZGluZ1R5cGVzLkhUVFBfR0VUOgotICAgICAgICByZXR1cm4gZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CSU5ESU5HX1RZUEVfSFRUUF9HRVQiKTsKLSAgICAgIGNhc2UgQmluZGluZ1R5cGVzLkhUVFBfUE9TVDoKLSAgICAgICAgcmV0dXJuIGdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQklORElOR19UWVBFX0hUVFBfUE9TVCIpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQklORElOR19UWVBFX1VOU1VQUE9SVEVEIik7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxZmVmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VydmljZURldGFpbHNUb29sIGV4dGVuZHMgRGV0YWlsc1Rvb2wgewotCi0gIHB1YmxpYyBXU0RMU2VydmljZURldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCwgIndzZGwvZm9ybXMvV1NETFNlcnZpY2VEZXRhaWxzRm9ybS5qc3AiKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExTZXJ2aWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExTZXJ2aWNlTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTYyMzAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMU2VydmljZU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLQotLy8gV1NETCBzZXJ2aWNlIG5vZGUgZm9yIHRoZSBXU0RMIE5hdmlnYXRvciBUcmVlIFZpZXcKLXB1YmxpYyBjbGFzcyBXU0RMU2VydmljZU5vZGUgZXh0ZW5kcyBXU0RMTmF2aWdhdG9yTm9kZQotewotICBwdWJsaWMgV1NETFNlcnZpY2VOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJ3c2RsL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYiKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcpKSB7Ci0gICAgICAgICAgV1NETEJpbmRpbmdOb2RlIHdzZGxCaW5kaW5nTm9kZSA9IG5ldyBXU0RMQmluZGluZ05vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgYWRkQ2hpbGQod3NkbEJpbmRpbmdOb2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcpKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfQklORElORykpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IFdTRExTZXJ2aWNlRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTRExfU0VSVklDRV9ERVRBSUxTIikpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc2Zvcm1lci9GcmFnbWVudFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNmb3JtZXIvRnJhZ21lbnRUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2RlNjk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc2Zvcm1lci9GcmFnbWVudFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIEZyYWdtZW50VHJhbnNmb3JtZXIgaW1wbGVtZW50cyBJVHJhbnNmb3JtZXIKLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLQotICBwdWJsaWMgRnJhZ21lbnRUcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBub3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgc2IuYXBwZW5kKCI8cm9vdD4iKTsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudCljb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSAoSVhTREZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgRWxlbWVudFtdIGVsZW1lbnRzID0gbmV3IEVsZW1lbnRbMF07Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZWxlbWVudHMgPSBmcmFnLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyghb3BlckVsZW1lbnQuaXNVc2VMaXRlcmFsKCksIG5ldyBIYXNodGFibGUoKSwgWE1MVXRpbHMuY3JlYXRlTmV3RG9jdW1lbnQobnVsbCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKQotICAgICAgewotICAgICAgfQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgICAgc2IuYXBwZW5kKFhNTFV0aWxzLnNlcmlhbGl6ZShlbGVtZW50c1tpXSwgdHJ1ZSkpOwotICAgIH0KLSAgICBzYi5hcHBlbmQoIjwvcm9vdD4iKTsKLSAgICBwcm9wZXJ0aWVzLnB1dChGcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVCwgc2IudG9TdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgU3RyaW5nIHNvdXJjZSA9IChTdHJpbmcpIHByb3BlcnRpZXMuZ2V0KEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICBpZiAoc291cmNlICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgcm9vdCA9IFhNTFV0aWxzLnN0cmluZ1RvRWxlbWVudChzb3VyY2UpOwotICAgICAgICBpZiAocm9vdCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZUxpc3QgY2hpbGROb2RlcyA9IHJvb3QuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgIFZlY3RvciBjaGlsZHJlblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkTm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIGNoaWxkID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICAgICAgY2hpbGRyZW5WZWN0b3IuYWRkKGNoaWxkKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgRWxlbWVudFtdIGNoaWxkcmVuID0gKEVsZW1lbnRbXSljaGlsZHJlblZlY3Rvci50b0FycmF5KG5ldyBFbGVtZW50WzBdKTsKLSAgICAgICAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudCkgY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLSAgICAgICAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gKElYU0RGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgICAgICAgIGZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGNoaWxkcmVuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvQ2h1bmtlZElucHV0U3RyZWFtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0NodW5rZWRJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWEyOGExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvQ2h1bmtlZElucHV0U3RyZWFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS5pby5GaWx0ZXJJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLXB1YmxpYyBjbGFzcyBDaHVua2VkSW5wdXRTdHJlYW0gZXh0ZW5kcyBGaWx0ZXJJbnB1dFN0cmVhbQotewotICBwcm90ZWN0ZWQgbG9uZyBjaHVua1NpemUgPSAwbDsKLSAgcHJvdGVjdGVkIHZvbGF0aWxlIGJvb2xlYW4gY2xvc2VkID0gZmFsc2U7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBtYXhDaGFyTG9uZyA9IChMb25nLnRvSGV4U3RyaW5nKExvbmcuTUFYX1ZBTFVFKSkudG9TdHJpbmcoKS5sZW5ndGgoKTsKLQotICBwcml2YXRlIENodW5rZWRJbnB1dFN0cmVhbSgpCi0gIHsKLSAgICBzdXBlcihudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBDaHVua2VkSW5wdXRTdHJlYW0oSW5wdXRTdHJlYW0gaXMpCi0gIHsKLSAgICBzdXBlcihpcyk7Ci0gIH0KLQotICBwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGJ5dGVbXSBkID0gbmV3IGJ5dGVbMV07Ci0gICAgaW50IHJjID0gcmVhZChkLCAwLCAxKTsKLSAgICByZXR1cm4gcmMgPiAwID8gKGRbMF0gJiAweEZGKSA6IHJjOwotICB9Ci0KLSAgcHVibGljIGludCByZWFkKGJ5dGVbXSBiKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkKGIsIDAsIGIubGVuZ3RoKTsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IHJlYWQoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGNsb3NlZCkKLSAgICAgIHJldHVybiAtMTsKLQotICAgIGludCB0b3RhbHJlYWQgPSAwOwotICAgIGludCBieXRlc3JlYWQgPSAwOwotICAgIHRyeQotICAgIHsKLSAgICAgIGRvCi0gICAgICB7Ci0gICAgICAgIGlmIChjaHVua1NpemUgPCAxTCkKLSAgICAgICAgewotICAgICAgICAgIGlmICgwbCA9PSBnZXRDaHVua2VkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRvdGFscmVhZCA9PSAwKQotICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVybiB0b3RhbHJlYWQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJ5dGVzcmVhZCA9IGluLnJlYWQoYiwgb2ZmICsgdG90YWxyZWFkLCBNYXRoLm1pbihsZW4gLSB0b3RhbHJlYWQsIChpbnQpIE1hdGgubWluKGNodW5rU2l6ZSwgSW50ZWdlci5NQVhfVkFMVUUpKSk7Ci0gICAgICAgIGlmIChieXRlc3JlYWQgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgdG90YWxyZWFkICs9IGJ5dGVzcmVhZDsKLSAgICAgICAgICBjaHVua1NpemUgLT0gYnl0ZXNyZWFkOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB3aGlsZSAobGVuIC0gdG90YWxyZWFkID4gMCAmJiBieXRlc3JlYWQgPiAtMSk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGNsb3NlZCA9IHRydWU7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLSAgICByZXR1cm4gdG90YWxyZWFkOwotICB9Ci0KLSAgcHVibGljIGxvbmcgc2tpcChmaW5hbCBsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGNsb3NlZCkKLSAgICAgIHJldHVybiAwOwotICAgIGxvbmcgc2tpcHBlZCA9IDBsOwotICAgIGJ5dGVbXSBiID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgaW50IGJyZWFkID0gLTE7Ci0gICAgZG8KLSAgICB7Ci0gICAgICBicmVhZCA9IHJlYWQoYiwgMCwgYi5sZW5ndGgpOwotICAgICAgaWYgKGJyZWFkID4gMCkKLSAgICAgICAgc2tpcHBlZCArPSBicmVhZDsKLSAgICB9Ci0gICAgd2hpbGUgKGJyZWFkICE9IC0xICYmIHNraXBwZWQgPCBuKTsKLSAgICByZXR1cm4gc2tpcHBlZDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgYXZhaWxhYmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoY2xvc2VkKQotICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IHJjID0gKGludCkgTWF0aC5taW4oY2h1bmtTaXplLCBJbnRlZ2VyLk1BWF9WQUxVRSk7Ci0gICAgcmV0dXJuIE1hdGgubWluKHJjLCBpbi5hdmFpbGFibGUoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgbG9uZyBnZXRDaHVua2VkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICAvL1N0cmluZ0J1ZmZlciBidWY9IG5ldyBTdHJpbmdCdWZmZXIoMTAyNCk7Ci0gICAgYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlW21heENoYXJMb25nICsgMl07Ci0gICAgaW50IGJ1ZnN6ID0gMDsKLSAgICBjaHVua1NpemUgPSAtMUw7Ci0gICAgaW50IGMgPSAtMTsKLSAgICBkbwotICAgIHsKLSAgICAgIGMgPSBpbi5yZWFkKCk7Ci0gICAgICBpZiAoYyA+IC0xKQotICAgICAgewotICAgICAgICBpZiAoYyAhPSAnXHInICYmIGMgIT0gJ1xuJyAmJiBjICE9ICcgJyAmJiBjICE9ICdcdCcpCi0gICAgICAgIHsKLSAgICAgICAgICBidWZbYnVmc3orK10gPSAoKGJ5dGUpIGMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChjID4gLTEgJiYgKGMgIT0gJ1xuJyB8fCBidWZzeiA9PSAwKSAmJiBidWZzeiA8IGJ1Zi5sZW5ndGgpOwotICAgIGlmIChjIDwgMCkKLSAgICB7Ci0gICAgICBjbG9zZWQgPSB0cnVlOwotICAgIH0KLSAgICBTdHJpbmcgc2J1ZiA9IG5ldyBTdHJpbmcoYnVmLCAwLCBidWZzeik7Ci0gICAgaWYgKGJ1ZnN6ID4gbWF4Q2hhckxvbmcpCi0gICAgewotICAgICAgY2xvc2VkID0gdHJ1ZTsKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiQ2h1bmtlZCBpbnB1dCBzdHJlYW0gZmFpbGVkIHRvIHJlY2VpdmUgdmFsaWQgY2h1bmsgc2l6ZToiICsgc2J1Zik7Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIGNodW5rU2l6ZSA9IExvbmcucGFyc2VMb25nKHNidWYsIDE2KTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZSkKLSAgICB7Ci0gICAgICBjbG9zZWQgPSB0cnVlOwotICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCInIiArIHNidWYgKyAiJyAiICsgbmUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgaWYgKGNodW5rU2l6ZSA8IDFMKQotICAgICAgY2xvc2VkID0gdHJ1ZTsKLSAgICBpZiAoY2h1bmtTaXplICE9IDBMICYmIGMgPCAwKQotICAgIHsKLSAgICAgIC8vSWYgY2h1bmsgc2l6ZSBpcyB6ZXJvIHRyeSBhbmQgYmUgdG9sZXJhbnQgdGhhdCB0aGVyZSBtYXliZSBubyBjciBvciBsZgotICAgICAgLy8gYXQgdGhlIGVuZC4KLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiSFRUUCBDaHVua2VkIHN0cmVhbSBjbG9zZWQgaW4gbWlkZGxlIG9mIGNodW5rLiIpOwotICAgIH0KLSAgICBpZiAoY2h1bmtTaXplIDwgMEwpCi0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkhUVFAgQ2h1bmsgc2l6ZSByZWNlaXZlZCAiICsgY2h1bmtTaXplICsgIiBpcyBsZXNzIHRoYW4gemVyby4iKTsKLSAgICByZXR1cm4gY2h1bmtTaXplOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHN5bmNocm9uaXplZCAodGhpcykKLSAgICB7Ci0gICAgICBpZiAoY2xvc2VkKQotICAgICAgICByZXR1cm47Ci0gICAgICBjbG9zZWQgPSB0cnVlOwotICAgIH0KLSAgICBieXRlW10gYiA9IG5ldyBieXRlWzEwMjRdOwotICAgIGludCBicmVhZCA9IC0xOwotICAgIGRvCi0gICAgewotICAgICAgYnJlYWQgPSByZWFkKGIsIDAsIGIubGVuZ3RoKTsKLSAgICB9Ci0gICAgd2hpbGUgKGJyZWFkICE9IC0xKTsKLSAgfQotCi0gIC8qCi0gICAqIHB1YmxpYyB2b2lkIG1hcmsoaW50IHJlYWRsaW1pdCkKLSAgICogewotICAgKiB9Ci0gICAqLwotCi0gIHB1YmxpYyB2b2lkIHJlc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkRvbid0IHN1cHBvcnQgbWFya2VkIHN0cmVhbXMiKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0hUVFBSZXNwb25zZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9IVFRQUmVzcG9uc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNmZTBjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0hUVFBSZXNwb25zZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotcHVibGljIGNsYXNzIEhUVFBSZXNwb25zZQotewotICBwcml2YXRlIGJvb2xlYW4gc3RhdHVzU2V0OwotICBwcml2YXRlIGludCBzdGF0dXNDb2RlOwotICBwcml2YXRlIFN0cmluZyBzdGF0dXNNZXNzYWdlOwotICBwcml2YXRlIEhhc2h0YWJsZSBoZWFkZXJzOwotICBwcml2YXRlIGJ5dGVbXSBwYXlsb2FkOwotCi0gIHB1YmxpYyBIVFRQUmVzcG9uc2UoKQotICB7Ci0gICAgcmVzZXQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc2V0KCkKLSAgewotICAgIHN0YXR1c1NldCA9IGZhbHNlOwotICAgIHN0YXR1c0NvZGUgPSAtMTsKLSAgICBzdGF0dXNNZXNzYWdlID0gbnVsbDsKLSAgICBpZiAoaGVhZGVycyAhPSBudWxsKQotICAgICAgaGVhZGVycy5jbGVhcigpOwotICAgIGVsc2UKLSAgICAgIGhlYWRlcnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgcGF5bG9hZCA9IG5ldyBieXRlWzBdOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNTdGF0dXNTZXQoKQotICB7Ci0gICAgcmV0dXJuIHN0YXR1c1NldDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0U3RhdHVzQ29kZSgpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzQ29kZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFN0YXR1c0NvZGUoaW50IHN0YXR1c0NvZGUpCi0gIHsKLSAgICBzdGF0dXNTZXQgPSB0cnVlOwotICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c01lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHN0YXR1c01lc3NhZ2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTdGF0dXNNZXNzYWdlKFN0cmluZyBzdGF0dXNNZXNzYWdlKQotICB7Ci0gICAgdGhpcy5zdGF0dXNNZXNzYWdlID0gc3RhdHVzTWVzc2FnZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEhlYWRlcihTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBoZWFkZXJzLnB1dChrZXksIHZhbHVlKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SGVhZGVyKFN0cmluZyBrZXkpCi0gIHsKLSAgICByZXR1cm4gKFN0cmluZykgaGVhZGVycy5nZXQoa2V5KTsKLSAgfQotCi0gIHB1YmxpYyBNYXAgZ2V0SGVhZGVycygpCi0gIHsKLSAgICByZXR1cm4gaGVhZGVyczsKLSAgfQotCi0gIHB1YmxpYyBieXRlW10gZ2V0UGF5bG9hZCgpCi0gIHsKLSAgICByZXR1cm4gcGF5bG9hZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBheWxvYWQoYnl0ZVtdIHBheWxvYWQpCi0gIHsKLSAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0hUVFBUcmFuc3BvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvSFRUUFRyYW5zcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTI3ZDExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvSFRUUFRyYW5zcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgICAxMjU3NzcgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqIDIwMDYwMjIyICAgMTE4MDE5IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqIDIwMDYwMjIyICAgMTI4NTY0IGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKiAyMDA2MDgyMyAgICA5OTAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIHN1cHBvcnQgZm9yIGJhc2ljLWF1dGhlbnRpY2F0aW5nIGZpcmV3YWxscwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc3BvcnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuU29ja2V0OwotaW1wb3J0IGphdmEubmV0LlNvY2tldFRpbWVvdXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXgubmV0LnNzbC5TU0xTb2NrZXRGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5IVFRQVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgc3VuLm1pc2MuQkFTRTY0RW5jb2RlcjsKLQotcHVibGljIGNsYXNzIEhUVFBUcmFuc3BvcnQKLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1lTX1BST1BfSFRUUFNfUFJPWFlfSE9TVCA9ICJodHRwcy5wcm94eUhvc3QiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQU19QUk9YWV9QT1JUID0gImh0dHBzLnByb3h5UG9ydCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNZU19QUk9QX0hUVFBTX05PTl9QUk9YWV9IT1NUUyA9ICJodHRwcy5ub25Qcm94eUhvc3RzIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1lTX1BST1BfSFRUUF9QUk9YWV9IT1NUID0gImh0dHAucHJveHlIb3N0IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1lTX1BST1BfSFRUUF9QUk9YWV9QT1JUID0gImh0dHAucHJveHlQb3J0IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1lTX1BST1BfSFRUUF9QUk9YWV9VU0VSX05BTUUgPSAiaHR0cC5wcm94eVVzZXJOYW1lIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1lTX1BST1BfSFRUUF9QUk9YWV9QQVNTV09SRCA9ICJodHRwLnByb3h5UGFzc3dvcmQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQX05PTl9QUk9YWV9IT1NUUyA9ICJodHRwLm5vblByb3h5SG9zdHMiOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9NRVRIT0QgPSAiUE9TVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfQ09OTkVDVCA9ICJDT05ORUNUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9WRVJTSU9OXzFfMCA9ICJIVFRQLzEuMCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfVkVSU0lPTiA9ICJIVFRQLzEuMSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX1NPQVBfQUNUSU9OID0gIlNPQVBBY3Rpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9BVVRIID0gIkF1dGhvcml6YXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9XV1dfQVVUSCA9ICJXV1ctQXV0aGVudGljYXRlIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfUFJPWFlfQVVUSCA9ICJQcm94eS1hdXRob3JpemF0aW9uIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQ09PS0lFID0gIkNvb2tpZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0NPT0tJRTIgPSAiQ29va2llMiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0hPU1QgPSAiSG9zdCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0NPTlRFTlRfVFlQRSA9ICJDb250ZW50LVR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9DT05URU5UX0xFTkdUSCA9ICJDb250ZW50LUxlbmd0aCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0FDQ0VQVCA9ICJBY2NlcHQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9VU0VSX0FHRU5UID0gIlVzZXItQWdlbnQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9DQUNIRV9DT05UUk9MID0gIkNhY2hlLUNvbnRyb2wiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9QUkFHTUEgPSAiUHJhZ21hIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfVFJBTlNGRVJfRU5DT0RFSU5HID0gIlRyYW5zZmVyLUVuY29kaW5nIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQ09OTkVDVElPTiA9ICJDb25uZWN0aW9uIjsKLSAgCi0gIHByaXZhdGUgZmluYWwgaW50IEhUVFBfQ09ERV9DT05USU5VRSA9IDEwMDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgSFRUUF9DT0RFX09LID0gMjAwOwotICBwcml2YXRlIGZpbmFsIGludCBIVFRQX0NPREVfRVhDRVBUSU9OID0gMzAwOwotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElCTV9XRUJfU0VSVklDRVNfRVhQTE9SRVIgPSAiSUJNIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFRFWFRfWE1MID0gInRleHQveG1sIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ09OVEVOVF9UWVBFX1ZBTFVFID0gInRleHQveG1sOyBjaGFyc2V0PXV0Zi04IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQUNDRVBUX1ZBTFVFID0gImFwcGxpY2F0aW9uL3NvYXAreG1sLCBhcHBsaWNhdGlvbi9kaW1lLCBtdWx0aXBhcnQvcmVsYXRlZCwgdGV4dC8qIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUMgPSAiQmFzaWMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBOT19DQUNIRSA9ICJuby1jYWNoZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENIVU5LRUQgPSAiY2h1bmtlZCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENMT1NFID0gImNsb3NlIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUFMgPSAiaHR0cHMiOwotICBwcml2YXRlIGZpbmFsIGNoYXIgUVVPVEUgPSAnXCInOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgQ09MT04gPSAnOic7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBTUEFDRSA9ICcgJzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIFRBQiA9ICdcdCc7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBSID0gJ1xyJzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIE4gPSAnXG4nOwotICBwcml2YXRlIGZpbmFsIGNoYXIgUk9PVCA9ICcvJzsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTkVXX0xJTkUgPSAiXHJcbiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEVNUFRZX1NUUklORyA9ICIiOwotCi0gIHByaXZhdGUgZmluYWwgaW50IERFRkFVTFRfSFRUUF9QT1JUID0gODA7Ci0gIHByaXZhdGUgZmluYWwgaW50IERFRkFVTFRfSFRUUFNfUE9SVCA9IDQ0MzsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9TT0FQX0VOQ09ESU5HID0gIlVURi04IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9IVFRQX0hFQURFUl9FTkNPRElORyA9ICJpc28tODg1OS0xIjsKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIERFRkFVTFRfQ0FTRV9TRU5TSVRJVkVfRk9SX0hPU1RfTkFNRSA9IGZhbHNlOwotCi0gIHByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFBhc3N3b3JkOwotICBwcml2YXRlIGJvb2xlYW4gbWFpbnRhaW5TZXNzaW9uID0gZmFsc2U7Ci0gIHByaXZhdGUgU3RyaW5nIGNvb2tpZTsKLSAgcHJpdmF0ZSBTdHJpbmcgY29va2llMjsKLSAgcHJpdmF0ZSBIVFRQUmVzcG9uc2UgaHR0cFJlc3BvbnNlOwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lKQotICB7Ci0gICAgdGhpcy5odHRwQmFzaWNBdXRoVXNlcm5hbWUgPSBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChTdHJpbmcgaHR0cEJhc2ljQXV0aFBhc3N3b3JkKQotICB7Ci0gICAgdGhpcy5odHRwQmFzaWNBdXRoUGFzc3dvcmQgPSBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRNZXRob2QoVVJMIHVybCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoSFRUUF9NRVRIT0QpOwotICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgU3RyaW5nIHByb3RvY29sID0gdXJsLmdldFByb3RvY29sKCk7Ci0gICAgU3RyaW5nIGh0dHBQcm94eUhvc3QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9QUk9YWV9IT1NUKTsKLSAgICBTdHJpbmcgaHR0cHNQcm94eUhvc3QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUFNfUFJPWFlfSE9TVCk7Ci0gICAgaWYgKHByb3RvY29sLmVxdWFsc0lnbm9yZUNhc2UoImh0dHAiKSAmJiBodHRwUHJveHlIb3N0ICE9IG51bGwgJiYgaHR0cFByb3h5SG9zdC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgc2IuYXBwZW5kKHVybC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocHJvdG9jb2wuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHMiKSAmJiBodHRwc1Byb3h5SG9zdCAhPSBudWxsICYmIGh0dHBzUHJveHlIb3N0Lmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQodXJsLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIGZpbGUgPSB1cmwuZ2V0RmlsZSgpOwotICAgICAgaWYgKGZpbGUgIT0gbnVsbCAmJiBmaWxlLmxlbmd0aCgpID4gMCkKLSAgICAgICAgc2IuYXBwZW5kKGZpbGUpOwotICAgICAgZWxzZQotICAgICAgICBzYi5hcHBlbmQoUk9PVCk7Ci0gICAgfQotICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgc2IuYXBwZW5kKEhUVFBfVkVSU0lPTik7Ci0gICAgc2IuYXBwZW5kKE5FV19MSU5FKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldEhvc3QoVVJMIHVybCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoSFRUUF9IRUFERVJfSE9TVCk7Ci0gICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgIHNiLmFwcGVuZCh1cmwuZ2V0SG9zdCgpKTsKLSAgICBzYi5hcHBlbmQoQ09MT04pOwotICAgIGludCBwb3J0ID0gdXJsLmdldFBvcnQoKTsKLSAgICBpZiAocG9ydCA+IDApCi0gICAgICBzYi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YocG9ydCkpOwotICAgIGVsc2UgaWYgKHVybC5nZXRQcm90b2NvbCgpLmVxdWFsc0lnbm9yZUNhc2UoSFRUUFMpKQotICAgICAgc2IuYXBwZW5kKERFRkFVTFRfSFRUUFNfUE9SVCk7Ci0gICAgZWxzZQotICAgICAgc2IuYXBwZW5kKERFRkFVTFRfSFRUUF9QT1JUKTsKLSAgICBzYi5hcHBlbmQoTkVXX0xJTkUpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRDb250ZW50VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9DT05URU5UX1RZUEUsIENPTlRFTlRfVFlQRV9WQUxVRSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbnRlbnRMZW5ndGgoYnl0ZVtdIHBheWxvYWRBc0J5dGVzKQotICB7Ci0gICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfQ09OVEVOVF9MRU5HVEgsIFN0cmluZy52YWx1ZU9mKHBheWxvYWRBc0J5dGVzLmxlbmd0aCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0U09BUEFjdGlvbihTdHJpbmcgc29hcEFjdGlvbikKLSAgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoSFRUUF9IRUFERVJfU09BUF9BQ1RJT04pOwotICAgIHNiLmFwcGVuZChDT0xPTik7Ci0gICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICBzYi5hcHBlbmQoUVVPVEUpOwotICAgIGlmIChzb2FwQWN0aW9uICE9IG51bGwpCi0gICAgICBzYi5hcHBlbmQoc29hcEFjdGlvbik7Ci0gICAgc2IuYXBwZW5kKFFVT1RFKTsKLSAgICBzYi5hcHBlbmQoTkVXX0xJTkUpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRDb29raWUoKQotICB7Ci0gICAgaWYgKG1haW50YWluU2Vzc2lvbikKLSAgICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX0NPT0tJRSwgY29va2llKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gRU1QVFlfU1RSSU5HOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRDb29raWUyKCkKLSAgewotICAgIGlmIChtYWludGFpblNlc3Npb24pCi0gICAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9DT09LSUUyLCBjb29raWUyKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gRU1QVFlfU1RSSU5HOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRXV1dBdXRoZW50aWNhdGlvbigpCi0gIHsKLSAgICBpZiAoaHR0cEJhc2ljQXV0aFVzZXJuYW1lICE9IG51bGwgJiYgaHR0cEJhc2ljQXV0aFBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihodHRwQmFzaWNBdXRoVXNlcm5hbWUpOwotICAgICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICAgIHNiLmFwcGVuZChodHRwQmFzaWNBdXRoUGFzc3dvcmQpOwotICAgICAgQkFTRTY0RW5jb2RlciBlbmNvZGVyID0gbmV3IEJBU0U2NEVuY29kZXIoKTsKLSAgICAgIFN0cmluZyBlbmNvZGVkVXNlck5hbWVQYXNzd29yZCA9IGVuY29kZXIuZW5jb2RlKHNiLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKSk7Ci0gICAgICBzYi5zZXRMZW5ndGgoMCk7Ci0gICAgICBzYi5hcHBlbmQoSFRUUF9IRUFERVJfQVVUSCk7Ci0gICAgICBzYi5hcHBlbmQoQ09MT04pOwotICAgICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICAgIHNiLmFwcGVuZChCQVNJQyk7Ci0gICAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgICAgc2IuYXBwZW5kKGVuY29kZWRVc2VyTmFtZVBhc3N3b3JkKTsKLSAgICAgIHNiLmFwcGVuZChORVdfTElORSk7Ci0gICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIEVNUFRZX1NUUklORzsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UHJveHlBdXRoZW50aWNhdGlvbigpCi0gIHsKLSAgICBTdHJpbmcgcHJveHlVc2VyTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQX1BST1hZX1VTRVJfTkFNRSk7Ci0gICAgU3RyaW5nIHByb3h5UGFzc3dvcmQgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9QUk9YWV9QQVNTV09SRCk7Ci0gICAgaWYgKHByb3h5VXNlck5hbWUgIT0gbnVsbCAmJiBwcm94eVBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihwcm94eVVzZXJOYW1lKTsKLSAgICAgIHNiLmFwcGVuZChDT0xPTik7Ci0gICAgICBzYi5hcHBlbmQocHJveHlQYXNzd29yZCk7Ci0gICAgICBCQVNFNjRFbmNvZGVyIGVuY29kZXIgPSBuZXcgQkFTRTY0RW5jb2RlcigpOwotICAgICAgU3RyaW5nIGVuY29kZWRVc2VyTmFtZVBhc3N3b3JkID0gZW5jb2Rlci5lbmNvZGUoc2IudG9TdHJpbmcoKS5nZXRCeXRlcygpKTsKLSAgICAgIHNiLnNldExlbmd0aCgwKTsKLSAgICAgIHNiLmFwcGVuZChIVFRQX0hFQURFUl9QUk9YWV9BVVRIKTsKLSAgICAgIHNiLmFwcGVuZChDT0xPTik7Ci0gICAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgICAgc2IuYXBwZW5kKEJBU0lDKTsKLSAgICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgICBzYi5hcHBlbmQoZW5jb2RlZFVzZXJOYW1lUGFzc3dvcmQpOwotICAgICAgc2IuYXBwZW5kKE5FV19MSU5FKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gRU1QVFlfU1RSSU5HOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRBY2NlcHQoKQotICB7Ci0gICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfQUNDRVBULCBBQ0NFUFRfVkFMVUUpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRVc2VyQWdlbnQoKQotICB7Ci0gICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfVVNFUl9BR0VOVCwgSUJNX1dFQl9TRVJWSUNFU19FWFBMT1JFUik7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENhY2hlQ29udHJvbCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9DQUNIRV9DT05UUk9MLCBOT19DQUNIRSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFByYWdtYSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9QUkFHTUEsIE5PX0NBQ0hFKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29ubmVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9DT05ORUNUSU9OLCBDTE9TRSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEhUVFBIZWFkZXIoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihrZXkpOwotICAgICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgICBzYi5hcHBlbmQodmFsdWUpOwotICAgICAgc2IuYXBwZW5kKE5FV19MSU5FKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gRU1QVFlfU1RSSU5HOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2VuZChVUkwgdXJsLCBTdHJpbmcgc29hcEFjdGlvbiwgU3RyaW5nIHBheWxvYWQpIHRocm93cyBVbmtub3duSG9zdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIGJ5dGVbXSBwYXlsb2FkQXNVVEY4ID0gcGF5bG9hZC5nZXRCeXRlcyhERUZBVUxUX1NPQVBfRU5DT0RJTkcpOwotICAgICAgIAotICAgIFN0cmluZ0J1ZmZlciBodHRwSGVhZGVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldE1ldGhvZCh1cmwpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRIb3N0KHVybCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvbnRlbnRUeXBlKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvbnRlbnRMZW5ndGgocGF5bG9hZEFzVVRGOCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldEFjY2VwdCgpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRVc2VyQWdlbnQoKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0Q2FjaGVDb250cm9sKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldFByYWdtYSgpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRTT0FQQWN0aW9uKHNvYXBBY3Rpb24pKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRXV1dBdXRoZW50aWNhdGlvbigpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRQcm94eUF1dGhlbnRpY2F0aW9uKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvb2tpZSgpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRDb29raWUyKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvbm5lY3Rpb24oKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoTkVXX0xJTkUpOyAvLyBuZXcgbGluZSBiZXR3ZWVuIHRoZSBIVFRQIGhlYWRlciBhbmQgdGhlIHBheWxvYWQKLSAgICBTb2NrZXQgc29ja2V0ID0gYnVpbGRTb2NrZXQodXJsKTsKLSAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2tldC5nZXRJbnB1dFN0cmVhbSgpOwotICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2tldC5nZXRPdXRwdXRTdHJlYW0oKTsKLSAgICBvcy53cml0ZShodHRwSGVhZGVyLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoREVGQVVMVF9IVFRQX0hFQURFUl9FTkNPRElORykpOwotICAgIG9zLndyaXRlKHBheWxvYWRBc1VURjgpOwotICAgIG9zLmZsdXNoKCk7Ci0gICAgaHR0cFJlc3BvbnNlID0gbmV3IEhUVFBSZXNwb25zZSgpOwotICAgIHJlYWRIVFRQUmVzcG9uc2VIZWFkZXIoaXMsIGh0dHBSZXNwb25zZSk7Ci0gICAgaW50IGNvZGUgPSBodHRwUmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpOwotICAgIGlmIChjb2RlID09IEhUVFBfQ09ERV9DT05USU5VRSkKLSAgICB7Ci0gICAgICBodHRwUmVzcG9uc2UucmVzZXQoKTsKLSAgICAgIHJlYWRIVFRQUmVzcG9uc2VIZWFkZXIoaXMsIGh0dHBSZXNwb25zZSk7Ci0gICAgfQotICAgIHJlYWRIVFRQUmVzcG9uc2VQYXlsb2FkKGlzLCBodHRwUmVzcG9uc2UpOwotICAgIG9zLmNsb3NlKCk7Ci0gICAgaXMuY2xvc2UoKTsKLSAgICBzb2NrZXQuY2xvc2UoKTsKLSAgICBjb2RlID0gaHR0cFJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKTsKLSAgICBTdHJpbmcgY29udGVudFR5cGUgPSBodHRwUmVzcG9uc2UuZ2V0SGVhZGVyKEhUVFBfSEVBREVSX0NPTlRFTlRfVFlQRS50b0xvd2VyQ2FzZSgpKTsKLSAgICBpZiAoY29kZSA+PSBIVFRQX0NPREVfRVhDRVBUSU9OICYmIChjb250ZW50VHlwZSA9PSBudWxsIHx8IGNvbnRlbnRUeXBlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihURVhUX1hNTC50b0xvd2VyQ2FzZSgpKSA9PSAtMSkpCi0gICAgICB0aHJvdyBuZXcgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbihjb2RlLCBodHRwUmVzcG9uc2UuZ2V0U3RhdHVzTWVzc2FnZSgpLCBodHRwUmVzcG9uc2UuZ2V0SGVhZGVycygpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZWFkSFRUUFJlc3BvbnNlSGVhZGVyKElucHV0U3RyZWFtIGlzLCBIVFRQUmVzcG9uc2UgcmVzcCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBieXRlIGIgPSAwOwotICAgIGludCBsZW4gPSAwOwotICAgIGludCBjb2xvbkluZGV4ID0gLTE7Ci0gICAgU3RyaW5nIGtleTsKLSAgICBTdHJpbmcgdmFsdWU7Ci0gICAgYm9vbGVhbiByZWFkVG9vTXVjaCA9IGZhbHNlOwotICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zOwotICAgIGZvciAoYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oNDA5Nik7OykKLSAgICB7Ci0gICAgICBpZiAoIXJlYWRUb29NdWNoKQotICAgICAgICBiID0gKGJ5dGUpaXMucmVhZCgpOwotICAgICAgaWYgKGIgPT0gLTEpCi0gICAgICAgIGJyZWFrOwotICAgICAgcmVhZFRvb011Y2ggPSBmYWxzZTsKLSAgICAgIGlmICgoYiAhPSBSKSAmJiAoYiAhPSBOKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKChiID09IENPTE9OKSAmJiAoY29sb25JbmRleCA9PSAtMSkpCi0gICAgICAgICAgY29sb25JbmRleCA9IGxlbjsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGJhb3Mud3JpdGUoYik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChiID09IFIpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSAvLyBiID09IE4KLSAgICAgIHsKLSAgICAgICAgaWYgKGxlbiA9PSAwKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBiID0gKGJ5dGUpaXMucmVhZCgpOwotICAgICAgICByZWFkVG9vTXVjaCA9IHRydWU7Ci0gICAgICAgIC8vIEEgc3BhY2Ugb3IgdGFiIGF0IHRoZSBiZWdpbmluZyBvZiBhIGxpbmUgbWVhbnMgdGhlIGhlYWRlciBjb250aW51ZXMuCi0gICAgICAgIGlmICgoYiA9PSBTUEFDRSkgfHwgKGIgPT0gVEFCKSkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYmFvcy5jbG9zZSgpOwotICAgICAgICBieXRlW10gYkFycmF5ID0gYmFvcy50b0J5dGVBcnJheSgpOwotICAgICAgICBiYW9zLnJlc2V0KCk7Ci0gICAgICAgIGlmIChjb2xvbkluZGV4ICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAga2V5ID0gbmV3IFN0cmluZyhiQXJyYXksIDAsIGNvbG9uSW5kZXgsIERFRkFVTFRfSFRUUF9IRUFERVJfRU5DT0RJTkcpOwotICAgICAgICAgIHZhbHVlID0gbmV3IFN0cmluZyhiQXJyYXksIGNvbG9uSW5kZXggKyAxLCBsZW4gLSAxIC0gY29sb25JbmRleCwgREVGQVVMVF9IVFRQX0hFQURFUl9FTkNPRElORyk7Ci0gICAgICAgICAgY29sb25JbmRleCA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGtleSA9IG5ldyBTdHJpbmcoYkFycmF5LCAwLCBsZW4sIERFRkFVTFRfSFRUUF9IRUFERVJfRU5DT0RJTkcpOwotICAgICAgICAgIHZhbHVlID0gRU1QVFlfU1RSSU5HOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcmVzcC5pc1N0YXR1c1NldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVhZGVyIHN0YXR1cyBjb2RlCi0gICAgICAgICAgaW50IHN0YXJ0ID0ga2V5LmluZGV4T2YoU1BBQ0UpICsgMTsKLSAgICAgICAgICBTdHJpbmcgcyA9IGtleS5zdWJzdHJpbmcoc3RhcnQpLnRyaW0oKTsKLSAgICAgICAgICBpbnQgZW5kID0gcy5pbmRleE9mKFNQQUNFKTsKLSAgICAgICAgICBpZiAoZW5kICE9IC0xKQotICAgICAgICAgICAgcyA9IHMuc3Vic3RyaW5nKDAsIGVuZCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVzcC5zZXRTdGF0dXNDb2RlKEludGVnZXIucGFyc2VJbnQocykpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXNwLnNldFN0YXR1c0NvZGUoLTEpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXNwLnNldFN0YXR1c01lc3NhZ2Uoa2V5LnN1YnN0cmluZyhzdGFydCArIGVuZCArIDEpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgcmVzcC5hZGRIZWFkZXIoa2V5LnRvTG93ZXJDYXNlKCkudHJpbSgpLCB2YWx1ZS50cmltKCkpOwotICAgICAgICBsZW4gPSAwOwotICAgICAgfQotICAgIH0KLSAgICBiYW9zLmNsb3NlKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVhZEhUVFBSZXNwb25zZVBheWxvYWQoSW5wdXRTdHJlYW0gaXMsIEhUVFBSZXNwb25zZSByZXNwKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJ5dGUgYiA9IChieXRlKWlzLnJlYWQoKTsKLSAgICAgIHdoaWxlIChiICE9IC0xKQotICAgICAgewotICAgICAgICBiYW9zLndyaXRlKGIpOwotICAgICAgICBiID0gKGJ5dGUpaXMucmVhZCgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoU29ja2V0VGltZW91dEV4Y2VwdGlvbiBzdGUpCi0gICAgewotICAgIH0KLSAgICBiYW9zLmNsb3NlKCk7Ci0gICAgcmVzcC5zZXRQYXlsb2FkKGJhb3MudG9CeXRlQXJyYXkoKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmVjZWl2ZXMgdGhlIGJ5dGVzIGZyb20gdGhlIGxhc3Qgd2ViIHNlcnZpY2UgaW52b2NhdGlvbi4gIFRoaXMgaXMgdXNlZCBieSBXU0UncyBkZWZhdWx0Ci0gICAqIFNPQVAgdHJhbnNwb3J0LgotICAgKiAKLSAgICogQHJldHVybiBBIGJ5dGUgYXJyYXkuCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICovCi0gIGJ5dGVbXSByZWNlaXZlQnl0ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGlmIChodHRwUmVzcG9uc2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIGJ5dGVbXSBwYXlsb2FkID0gaHR0cFJlc3BvbnNlLmdldFBheWxvYWQoKTsKLSAgICAgICAgaWYgKENIVU5LRUQuZXF1YWxzSWdub3JlQ2FzZShodHRwUmVzcG9uc2UuZ2V0SGVhZGVyKEhUVFBfSEVBREVSX1RSQU5TRkVSX0VOQ09ERUlORy50b0xvd2VyQ2FzZSgpKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHBheWxvYWQpOwotICAgICAgICAgIENodW5rZWRJbnB1dFN0cmVhbSBjaXMgPSBuZXcgQ2h1bmtlZElucHV0U3RyZWFtKGJhaXMpOwotICAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgICAgICAgIGJ5dGUgYjsKLSAgICAgICAgICB3aGlsZSAoKGIgPSAoYnl0ZSljaXMucmVhZCgpKSAhPSAtMSkKLSAgICAgICAgICAgIGJhb3Mud3JpdGUoYik7Ci0gICAgICAgICAgYmFvcy5jbG9zZSgpOwotICAgICAgICAgIGNpcy5jbG9zZSgpOwotICAgICAgICAgIGJhaXMuY2xvc2UoKTsKLSAgICAgICAgICByZXR1cm4gYmFvcy50b0J5dGVBcnJheSgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBwYXlsb2FkOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBhZnRlciBXU0Ugc3d0aWNoZXMgdG8gdXNpbmcgYSBwbHVnZ2FibGUgdHJhbnNwb3J0IHZpYSBlbmhhbmNlbWVudCAxNzY0OTMuCi0gICAqIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBtZXRob2QgaXMgcmVmYWN0b3JlZCB0byB0aGUgcmVjZWl2ZUJ5dGVzKCkgbWV0aG9kLiAKLSAgICogCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwdWJsaWMgQnVmZmVyZWRSZWFkZXIgcmVjZWl2ZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBieXRlW10gcGF5bG9hZCA9IHJlY2VpdmVCeXRlcygpOwotICAgICAgaWYgKHBheWxvYWQgIT0gbnVsbCkgewotICAgIAlFbGVtZW50IHNvYXBFbnZlbG9wZSA9IFhNTFV0aWxzLmJ5dGVBcnJheVRvRWxlbWVudChwYXlsb2FkLCBmYWxzZSk7Ci0gICAgICAgIC8vIHJlbW92ZSBYTUwgbmFtZXNwYWNlIGRlY2xhcmF0aW9uCi0gICAgICAgIGlmIChzb2FwRW52ZWxvcGUgIT0gbnVsbCkKLSAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oWE1MVXRpbHMuc2VyaWFsaXplKHNvYXBFbnZlbG9wZSwgdHJ1ZSkuZ2V0Qnl0ZXMoREVGQVVMVF9TT0FQX0VOQ09ESU5HKSksIERFRkFVTFRfU09BUF9FTkNPRElORykpOyAKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGdldEhlYWRlcnMoKQotICB7Ci0gICAgSGFzaHRhYmxlIGhlYWRlcnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKGh0dHBSZXNwb25zZSAhPSBudWxsKQotICAgICAgaGVhZGVycy5wdXRBbGwoaHR0cFJlc3BvbnNlLmdldEhlYWRlcnMoKSk7Ci0gICAgcmV0dXJuIGhlYWRlcnM7Ci0gIH0KLQotICAvKioKLSAgICogQnVpbGRzIHRoZSBmaXJzdCBsaW5lIG9mIGEgY29ubmVjdGlvbiByZXF1ZXN0IHRvIHRoZSBwcm94eSBzZXJ2ZXIKLSAgICogCi0gICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0aGF0IHdlIHdhbnQgdG8gdWx0aW1hdGVseSBjb25uZWN0IHRvLgotICAgKiBAcmV0dXJuIEEgc3RyaW5nIG9mIHRoZSBmb3JtICJDT05ORUNUICZsdDtob3N0bmFtZSZndDs6Jmx0O3BvcnQmZ3Q7IEhUVFAvMS4wIi4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIGdldENvbm5lY3RNZXRob2QoVVJMIHVybCkgewotCQotCSAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihIVFRQX0NPTk5FQ1QpOwotCSAgc2IuYXBwZW5kKFNQQUNFKTsJICAKLQkgIHNiLmFwcGVuZCh1cmwuZ2V0SG9zdCgpKTsKLQkgIHNiLmFwcGVuZChDT0xPTik7Ci0JICBzYi5hcHBlbmQodXJsLmdldFBvcnQoKSk7Ci0JICBzYi5hcHBlbmQoU1BBQ0UpOwotCSAgc2IuYXBwZW5kKEhUVFBfVkVSU0lPTl8xXzApOwotCSAgc2IuYXBwZW5kKE5FV19MSU5FKTsKLQkgIHJldHVybiBzYjsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdCBhIHNvY2tldCB0byB0aGUgcHJveHkgc2VydmVyIHdoaWNoIGJlIHVzZWQgdG8gdHVubmVsIHRocm91Z2guCi0gICAqIAotICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdGhhdCB3ZSB3YW50IHRvIHVsdGltYXRlbHkgY29ubmVjdCB0by4KLSAgICogQHBhcmFtIHByb3h5SG9zdCBUaGUgcHJveHkgaG9zdC4KLSAgICogQHBhcmFtIHByb3h5UG9ydCBUaGUgcHJveHkgcG9ydC4KLSAgICogQHJldHVybiBBIGNvbm5lY3RlZCBzb2NrZXQgdG8gdGhlIHByb3h5IHNlcnZlci4gCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0gICAqLwotICBwcml2YXRlIFNvY2tldCBidWlsZFR1bm5lbFNvY2tldChVUkwgdXJsLCBTdHJpbmcgcHJveHlIb3N0LCBpbnQgcHJveHlQb3J0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JICBTdHJpbmdCdWZmZXIgaHR0cEhlYWRlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvbm5lY3RNZXRob2QodXJsKSk7Ci0JICBodHRwSGVhZGVyLmFwcGVuZChnZXRQcm94eUF1dGhlbnRpY2F0aW9uKCkpOyAgICAgICAKLQkgIGh0dHBIZWFkZXIuYXBwZW5kKE5FV19MSU5FKTsKLSAgICAKLQkgIFNvY2tldCB0dW5uZWwgPSBuZXcgU29ja2V0KHByb3h5SG9zdCwgcHJveHlQb3J0KTsKLSAgICAKLQkgIElucHV0U3RyZWFtICBpcyA9IHR1bm5lbC5nZXRJbnB1dFN0cmVhbSgpOwotCSAgT3V0cHV0U3RyZWFtIG9zID0gdHVubmVsLmdldE91dHB1dFN0cmVhbSgpOwotICAgIAotCSAgb3Mud3JpdGUoaHR0cEhlYWRlci50b1N0cmluZygpLmdldEJ5dGVzKERFRkFVTFRfSFRUUF9IRUFERVJfRU5DT0RJTkcpKTsgICAgICAgIAotCSAgb3MuZmx1c2goKTsKLSAgICAKLQkgIEhUVFBSZXNwb25zZSBodHRwUmVzcG9uc2UgPSBuZXcgSFRUUFJlc3BvbnNlKCk7Ci0JICByZWFkSFRUUFJlc3BvbnNlSGVhZGVyKGlzLCBodHRwUmVzcG9uc2UpOwotICAgIAotCSAgaW50IGNvZGUgPSBodHRwUmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpOwotCi0JICAvLyBlbnN1cmUgd2UgYXJlIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gdGhlIHByb3h5Ci0JICBpZiAoY29kZSAhPSBIVFRQX0NPREVfT0spCi0JCSAgdGhyb3cgbmV3IEhUVFBUcmFuc3BvcnRFeGNlcHRpb24oY29kZSwgaHR0cFJlc3BvbnNlLmdldFN0YXR1c01lc3NhZ2UoKSwgaHR0cFJlc3BvbnNlLmdldEhlYWRlcnMoKSk7Ci0JICAKLQkgIHJldHVybiB0dW5uZWw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU29ja2V0IGJ1aWxkU29ja2V0KFVSTCB1cmwpIHRocm93cyBVbmtub3duSG9zdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFNvY2tldCBzID0gbnVsbDsKLSAgICBTdHJpbmcgaG9zdCA9IHVybC5nZXRIb3N0KCk7Ci0gICAgaW50IHBvcnQgPSB1cmwuZ2V0UG9ydCgpOwotICAgIFN0cmluZyBwcm94eUhvc3QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9QUk9YWV9IT1NUKTsKLSAgICBpbnQgcHJveHlQb3J0ID0gSW50ZWdlci5nZXRJbnRlZ2VyKFNZU19QUk9QX0hUVFBfUFJPWFlfUE9SVCwgREVGQVVMVF9IVFRQX1BPUlQpLmludFZhbHVlKCk7Ci0gICAgCi0gICAgU3RyaW5nIG5vblByb3h5SG9zdHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9OT05fUFJPWFlfSE9TVFMpOwotCi0gICAgLy8gIFN0cmluZyBwcm94eVVzZXJOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBfUFJPWFlfVVNFUl9OQU1FKTsKLSAgICAvLyAgU3RyaW5nIHByb3h5UGFzc3dvcmQgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9QUk9YWV9QQVNTV09SRCk7Ci0gICAgaWYgKHVybC5nZXRQcm90b2NvbCgpLmVxdWFsc0lnbm9yZUNhc2UoSFRUUFMpKQotICAgIHsKLSAgICAgIHByb3h5SG9zdCA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQU19QUk9YWV9IT1NUKTsKLSAgICAgIHByb3h5UG9ydCA9IEludGVnZXIuZ2V0SW50ZWdlcihTWVNfUFJPUF9IVFRQU19QUk9YWV9QT1JULCBERUZBVUxUX0hUVFBTX1BPUlQpLmludFZhbHVlKCk7Ci0gICAgICBub25Qcm94eUhvc3RzID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBTX05PTl9QUk9YWV9IT1NUUyk7Ci0KLSAgICAgIGlmIChwcm94eUhvc3QgIT0gbnVsbCAmJiBwcm94eUhvc3QubGVuZ3RoKCkgPiAwICYmICFpc0hvc3RJbk5vblByb3h5SG9zdHMoaG9zdCwgbm9uUHJveHlIb3N0cywgREVGQVVMVF9DQVNFX1NFTlNJVElWRV9GT1JfSE9TVF9OQU1FKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU1NMIHdpdGggcHJveHkgc2VydmVyCi0gICAgICAgIFNvY2tldCB0dW5uZWwgPSBidWlsZFR1bm5lbFNvY2tldCh1cmwsIHByb3h5SG9zdCwgcHJveHlQb3J0KTsgICAgICAgCi0gICAgICAgIHMgPSAoKFNTTFNvY2tldEZhY3RvcnkpIFNTTFNvY2tldEZhY3RvcnkuZ2V0RGVmYXVsdCgpKS5jcmVhdGVTb2NrZXQodHVubmVsLCBob3N0LCBwb3J0LCB0cnVlKTsgICAgCSAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHMgPSBTU0xTb2NrZXRGYWN0b3J5LmdldERlZmF1bHQoKS5jcmVhdGVTb2NrZXQoaG9zdCwgKHBvcnQgPiAwID8gcG9ydCA6IERFRkFVTFRfSFRUUFNfUE9SVCkpOwotICAgICAgLy8gUmVtb3ZpbmcgZGVwZW5kZW5jeSBvbiBzb2FwLmphcgotICAgICAgLy8gIHMgPSBTU0xVdGlscy5idWlsZFNTTFNvY2tldChob3N0LCAocG9ydCA+IDAgPyBwb3J0IDogREVGQVVMVF9IVFRQU19QT1JUKSwgcHJveHlIb3N0LCBwcm94eVBvcnQpOwotICAgICAgLy8gVE9ETzoKLSAgICAgIC8vIEJ1aWxkIGFuIFNTTCBzb2NrZXQgdGhhdCBzdXBwb3J0cyBwcm94eVVzZXIgYW5kIHByb3h5UGFzc3dvcmQsCi0gICAgICAvLyBhcyBkZW1vbnN0cmF0ZWQgaW4gdGhlIGZvbGxvd2luZyAob3JpZ2luYWwpIGxpbmUgb2YgY29kZToKLSAgICAgIC8vICBzID0gU1NMVXRpbHMuYnVpbGRTU0xTb2NrZXQoaG9zdCwgKHBvcnQgPiAwID8gcG9ydCA6IERFRkFVTFRfSFRUUFNfUE9SVCksIHByb3h5SG9zdCwgcHJveHlQb3J0LCBwcm94eVVzZXJOYW1lLCBwcm94eVBhc3N3b3JkKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocHJveHlIb3N0ICE9IG51bGwgJiYgcHJveHlIb3N0Lmxlbmd0aCgpID4gMCAmJiAhaXNIb3N0SW5Ob25Qcm94eUhvc3RzKGhvc3QsIG5vblByb3h5SG9zdHMsIERFRkFVTFRfQ0FTRV9TRU5TSVRJVkVfRk9SX0hPU1RfTkFNRSkpCi0gICAgICBzID0gbmV3IFNvY2tldChwcm94eUhvc3QsIHByb3h5UG9ydCk7Ci0gICAgZWxzZQotICAgICAgcyA9IG5ldyBTb2NrZXQoaG9zdCwgKHBvcnQgPiAwID8gcG9ydCA6IERFRkFVTFRfSFRUUF9QT1JUKSk7Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBpc0hvc3RJbk5vblByb3h5SG9zdHMoU3RyaW5nIGhvc3QsIFN0cmluZyBub25Qcm94eUhvc3RzLCBib29sZWFuIGNhc2VTZW5zaXRpdmUpCi0gIHsKLSAgCWlmIChjYXNlU2Vuc2l0aXZlKSByZXR1cm4gaG9zdC5tYXRjaGVzKGNyZWF0ZVBhdHRlcm5Gcm9tU3RyaW5nKG5vblByb3h5SG9zdHMpKTsKLSAgCWVsc2UgcmV0dXJuIGhvc3QudG9Mb3dlckNhc2UoKS5tYXRjaGVzKGNyZWF0ZVBhdHRlcm5Gcm9tU3RyaW5nKG5vblByb3h5SG9zdHMudG9Mb3dlckNhc2UoKSkpOyAgCi0gIH0KLSAgCi0gIC8qCi0gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGEgCi0gICAqIG5vcm1hbCBqYXZhIFN0cmluZyB1c2VkIGluIHRoZSBwcm94eSBtZWNoYW5pc20uIAotICAgKiBGb3IgZXhhbXBsZSwgdGhlIGh0dHAubm9uUHJveHlIb3N0cyBjb250YWlucyBmb2xsb3dpbmcgU3RyaW5nOiAKLSAgICogIjE5Mi4xNjguMi4qfGxvY2FsaG9zdHwqLmlibS5jb20iIC4gSXQgd291bGQgYmUgCi0gICAqIHRyYW5zZm9ybWVkIGludG86ICIxOTJcLjE2OFwuMlwuXHcqfGxvY2FsaG9zdHxcdypcLmlibVwuY29tIgotICAgKiBUaHVzLCBmb2xsb3dpbmcgaG9zdCBzdHJpbmcgd291bGQgbWF0Y2ggYWJvdmUgcGF0dGVybjoKLSAgICogMTkyLjE2OC4yLjUgMTkyLjE2OC4yLiAxOTIuMTY4LjIuNjY2IDE5Mi4xNjguMi53Ci0gICAqIGxvY2FsaG9zdAotICAgKiB0b3JvbGFiLmlibS5jb20gLmlibS5jb20gMTIzLmlibS5jb20KLSAgICogCi0gICAqIFR3byB0cmFuc2Zvcm1hdGlvbnMgYXJlIGRvbmU6Ci0gICAqIDEuIHJlcGxhY2UgYWxsICIuIiBpbnRvICJcLiIgQXMgaW4gcmVndWxhciBleHByZXNzaW9uLCAnLicgcmVwcmVzZW50cyAKLSAgICogICAgYW55IGNoYXJhdGVyLiAgIlwuJyByZXByZXNlbnRzIHRoZSByZWFsIGNoYXJhY3RlciAnLicKLSAgICogMi4gSW4gb3JkZXIgdG8gZ2V0IHRoZSByZWFsIG1lYW5pbmcgb2YgIioiIHVzZWQgaW4gcHJvcGVydHkgCi0gICAqICAgIGh0dHAubm9uUHJveHlIb3N0cywgIlx3KiIgaXMgdXNlZCB0byByZXBsYWNlICIqIgotICAgKiAgICAiXHciIHJlcHJlc2VudCBhIHdvcmQgY2hhcmFjdGVyOiBbYS16QS1aXzAtOV0KLSAgICogICAgCi0gICAqIFJlc3RyaWN0aW9uOgotICAgKiBUaGUgdmFsaWRpdHkgb2YgYWRkcmVzcyBpcyBub3QgY2hlY2tlZC4gCi0gICAqICgxOTIuMTY4LjIuNTU1IGFuZCAxOTIuMTY4LjIuY29tIGFyZSBPSykKLSAgICogCi0gICAqIFRPRE8gY2hlY2sgd2hldGhlciAqIG9jY3VycyBpbiBhZGRyZXNzIG9yIGhvc3RuYW1lLgotICAgKiBpZiBpdCBvY2N1dXMgaW4gYWRkcmVzcyByZXByZXNlbnRhdGlvbiwgcmVwbGFjZSAiKiIgd2l0aCAiXGQqIgotICAgKiBhbmQgY2hlY2s6IHZhbHVlIDwgMjU2ID8KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZVBhdHRlcm5Gcm9tU3RyaW5nKFN0cmluZyBzdHIpIAotICB7Ci0gICAgLyogVGhpcyBpcyB0aGUgc2FtZSBhcyBmb2xsb3dpbmcgbW9yZSB1bmRlcnN0YW5kYWJsZSB3YXk6Ci0JICogcmV0dXJuIHN0ci5yZXBsYWNlKCIuIiwgIlxcLiIpLnJlcGxhY2UoIioiLCAiXFx3KiIpOwotCSAqIEJ1dCwgcmVwbGFjZShDaGFyU2VxdWVuY2UgdGFyZ2V0LCBDaGFyU2VxdWVuY2UgcmVwbGFjZW1lbnQpIGNhbiBvbmx5IGJlIAotCSAqIHN1cHBvcnRlZCBhZnRlciBqMnNlIDEuNSwgb24gdGhlIG90aGVyIGhhbmQsIAotCSAqIHJlcGxhY2VBbGwoU3RyaW5nIHJlZ2V4LCBTdHJpbmcgcmVwbGFjZW1lbnQpIGNhbiBiZSBzdXBwb3J0ZWQgYmVmb3JlIAotCSAqIGoyc2UgMS41LgotCSAqLwotICAgIHJldHVybiBzdHIgPT0gbnVsbCA/IG51bGwgOiBzdHIucmVwbGFjZUFsbCgiXFwuIiwgIlxcLiIpLnJlcGxhY2VBbGwoIlxcKiIsICJcXHcqIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUE1lc3NhZ2VQcm9jZXNzb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUE1lc3NhZ2VQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRlZjMxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBNZXNzYWdlUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuU29hcEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklEZXNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0Lk1lc3NhZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbiBmb3IgV1NFIGRlZmF1bHQgU09BUCB0cmFuc3BvcnQncyBJU2VyaWFsaXplciBhbmQgSURlc2VyaWFsaXplci4KLSAqLwotcHVibGljIGNsYXNzIFNPQVBNZXNzYWdlUHJvY2Vzc29yIGltcGxlbWVudHMgSVNlcmlhbGl6ZXIsIElEZXNlcmlhbGl6ZXIgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSVRFUkFMID0gImxpdGVyYWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NPQVBfRU5DT0RJTkcgPSAiVVRGLTgiOwkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElORV9TRVBBUkFUT1IgPSBTeXN0ZW0uZ2V0UHJvcGVydGllcygpLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCQotCS8qCi0JICogQ29uc3RydWN0b3IuCi0JICovCi0JU09BUE1lc3NhZ2VQcm9jZXNzb3IoKSB7fQotCQotCS8qCi0JICogSm9pbiB0aGUgZW5jb2RpbmdTdHlsZXMgaW50byBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBqb2luRW5jb2RpbmdTdHlsZXMoTGlzdCBsaXN0KSB7Ci0JCQotCQlpZiAobGlzdC5pc0VtcHR5KCkpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCi0JCUl0ZXJhdG9yIGl0ZXIgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkKLQkJCXNiLmFwcGVuZCgiICIpLmFwcGVuZChpdGVyLm5leHQoKSk7Ci0JCQotCQlyZXR1cm4gc2Iuc3Vic3RyaW5nKDEpLnRvU3RyaW5nKCk7Ci0JfQotCQotCS8qCi0JICogUmV0cmlldmVzIHRoZSBlbmNvZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBiaW5kaW5nIGZvciB0aGUgc2VsZWN0ZWQgb3BlcmF0aW9uLgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IGZvciBSUEMgc3R5bGUgYmluZGluZ3MuICBUd28gcGllY2VzIG9mIGluZm9ybWF0aW9uIGFyZSByZXR1cm5lZDogIAotCSAqIElmIHRoZSB1c2UgaXMgZW5jb2RlZCwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZW5jb2RpbmcgbmFtZXNwYWNlIGluIGVsZW1lbnQgWzBdIGFuZCB0aGUgCi0JICogZW5jb2Rpbmcgc3R5bGUocykgaW4gZWxlbWVudCBbMV0uICBJZiB0aGUgdXNlIGlzIGxpdGVyYWwsIHRoZW4gYm90aCB2YWx1ZXMgd2lsbCBiZSBudWxsLgotCSAqLwotCXByaXZhdGUgU3RyaW5nW10gZ2V0RW5jb2RpbmdJbmZvKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKLQkJCi0JCVN0cmluZ1tdIGluZm8gPSBuZXcgU3RyaW5nW10geyBudWxsLCBudWxsIH07Ci0JCQotCQlJdGVyYXRvciBpdGVyID0gY29udGV4dC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0QmluZGluZ0lucHV0KCkKLQkJCS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCQkJCQotCQkvLyBsb29rIGZvciB0aGUgc29hcGJpbmQ6Ym9keSBleHRlbnNpbGliaXR5IGVsZW1lbnQKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdGVyLm5leHQoKTsJCQkKLQkJCWlmICghKGUgaW5zdGFuY2VvZiBTT0FQQm9keSkpCi0JCQkJY29udGludWU7Ci0JCQkKLQkJCVNPQVBCb2R5IHNvYXBCb2R5ID0gKFNPQVBCb2R5KSBlOwotCQkJCi0JCQkvLyB1c2U9ImVuY29kZWQiCi0JCQlpZiAoIUxJVEVSQUwuZXF1YWxzKHNvYXBCb2R5LmdldFVzZSgpKSkgewotCQkJCWluZm9bMF0gPSBzb2FwQm9keS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJCQlpbmZvWzFdID0gam9pbkVuY29kaW5nU3R5bGVzKHNvYXBCb2R5LmdldEVuY29kaW5nU3R5bGVzKCkpOwotCQkJfQotCQkJCQkKLQkJCWJyZWFrOwotCQl9Ci0JCQotCQkvLyBuYW1lc3BhY2Ugbm90IHNwZWNpZmllZCBvbiB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50LCB1c2UgdGhlIGRlZmluaXRpb24ncwotCQlpZiAoaW5mb1swXSA9PSBudWxsKQotCQkJaW5mb1swXSA9IGNvbnRleHQuZ2V0RGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkKLQkJcmV0dXJuIGluZm87Ci0JfQotCQotCS8qCi0gICAgICogV1MtSTogSW4gYSBycGMtbGl0ZXJhbCBTT0FQIGJpbmRpbmcsIHRoZSBzZXJpYWxpemVkIGNoaWxkIGVsZW1lbnQgb2YgdGhlIAotICAgICAqIHNvYXA6Qm9keSBlbGVtZW50IGNvbnNpc3RzIG9mIGEgd3JhcHBlciBlbGVtZW50LCB3aG9zZSBuYW1lc3BhY2UgaXMgdGhlIHZhbHVlIAotICAgICAqIG9mIHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlIG9mIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQgYW5kIHdob3NlIGxvY2FsIG5hbWUgaXMgCi0gICAgICogZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24gb3IgdGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiBzdWZmaXhlZCAKLSAgICAgKiB3aXRoICJSZXNwb25zZSIuIFRoZSBuYW1lc3BhY2UgYXR0cmlidXRlIGlzIHJlcXVpcmVkLCBhcyBvcHBvc2VkIHRvIGJlaW5nIAotICAgICAqIG9wdGlvbmFsLCB0byBlbnN1cmUgdGhhdCB0aGUgY2hpbGRyZW4gb2YgdGhlIHNvYXA6Qm9keSBlbGVtZW50IGFyZSBuYW1lc3BhY2UtCi0gICAgICogcXVhbGlmaWVkLgotICAgICAqLwotCXByaXZhdGUgRWxlbWVudCBjcmVhdGVSUENXcmFwcGVyKERvY3VtZW50IGRvY3VtZW50LCBNZXNzYWdlQ29udGV4dCBjb250ZXh0LCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUpIHsKLQkJCi0JCVN0cmluZyBlbmNvZGluZ05hbWVzcGFjZVVSSSA9IGdldEVuY29kaW5nSW5mbyhjb250ZXh0KVswXTsKLQkJCi0JCXJldHVybiBTb2FwSGVscGVyLmNyZWF0ZVJQQ1dyYXBwZXJFbGVtZW50KAotCQkJCWRvY3VtZW50LCAKLQkJCQluYW1lc3BhY2VUYWJsZSwgCi0JCQkJZW5jb2RpbmdOYW1lc3BhY2VVUkksIAotCQkJCWNvbnRleHQuZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpLmdldE5hbWUoKSwKLQkJCQludWxsKTsKLQl9Ci0JCi0JLyoKLQkgKiBJbml0aWFsaXplcyB0aGUgY29udGVudHMgb2YgbmV3IElTT0FQTWVzc2FnZS4KLQkgKi8KLQl2b2lkIGluaXRNZXNzYWdlKElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gWE1MVXRpbHMuY3JlYXRlTmV3RG9jdW1lbnQobnVsbCk7Ci0JCQkKLQkJCUhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQkJCVNvYXBIZWxwZXIuYWRkRGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXMobmFtZXNwYWNlVGFibGUpOwotCQkJCi0JCQltZXNzYWdlLnNldEVudmVsb3BlKFNvYXBIZWxwZXIuY3JlYXRlU29hcEVudmVsb3BlRWxlbWVudChkb2N1bWVudCwgbmFtZXNwYWNlVGFibGUpKTsKLQkJCW1lc3NhZ2Uuc2V0SGVhZGVyKFNvYXBIZWxwZXIuY3JlYXRlU29hcEhlYWRlckVsZW1lbnQoZG9jdW1lbnQpKTsKLQkJCQotCQkJRWxlbWVudCBib2R5ID0gU29hcEhlbHBlci5jcmVhdGVTb2FwQm9keUVsZW1lbnQoZG9jdW1lbnQpOwotCQkJaWYgKCFtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkuaXNEb2N1bWVudFN0eWxlKCkpIHsKLQkJCQlFbGVtZW50IHJwY1dyYXBwZXIgPSBjcmVhdGVSUENXcmFwcGVyKGRvY3VtZW50LCBtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCksIG5hbWVzcGFjZVRhYmxlKTsKLQkJCQlib2R5LmFwcGVuZENoaWxkKHJwY1dyYXBwZXIpOwotCQkJfQkJCQotCQkJbWVzc2FnZS5zZXRCb2R5KGJvZHkpOwkJCQotCQkJCi0JCQltZXNzYWdlLnNldE5hbWVzcGFjZVRhYmxlKG5hbWVzcGFjZVRhYmxlKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKGUpOwotCQl9CQkKLQl9Ci0JCi0JLyoKLQkgKiBSZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IHdpdGggdGhlIGdpdmVuIGxvY2FsIG5hbWUgZnJvbSB0aGUgc29hcCBlbnZlbG9wZSBuYW1lc3BhY2UKLQkgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBvbiBlbGVtZW50cyB0aGF0IGFyZSBub3QgbmFtZXNwYWNlIGF3YXJlLCBidXQgd2UgaGF2ZSB0byBnaXZlCi0JICogaXQgYSBuYW1lc3BhY2UgdGFibGUgdG8gbG9vayB1cCBwcmVmaXhlcy4KLQkgKi8KLQlwcml2YXRlIEVsZW1lbnQgZ2V0U09BUEVsZW1lbnQoRWxlbWVudCByb290LCBTdHJpbmcgbG9jYWxOYW1lLCBNYXAgbmFtZXNwYWNlVGFibGUpIHsKLQkJU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIG5hbWVzcGFjZVRhYmxlLmdldChDb25zdGFudHMuVVJJX1NPQVAxMV9FTlYpOwotCQlpZiAocHJlZml4ID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCU5vZGVMaXN0IGxpc3QgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKHByZWZpeCArICI6IiArIGxvY2FsTmFtZSk7Ci0JCWlmIChsaXN0LmdldExlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCXJldHVybiAoRWxlbWVudCkgbGlzdC5pdGVtKDApOwotCX0KLQkKLQkvKgotCSAqIFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbG9jYWwgbmFtZSBmcm9tIHRoZSBzb2FwIGVudmVsb3BlIG5hbWVzcGFjZS4KLQkgKiBUaGlzIHZlcnNpb24gYXNzdW1lIHRoZSBlbGVtZW50cyBhcmUgbmFtZXNwYWNlIGF3YXJlLgotCSAqLwotCXByaXZhdGUgRWxlbWVudCBnZXRTT0FQRWxlbWVudE5TKEVsZW1lbnQgcm9vdCwgU3RyaW5nIGxvY2FsTmFtZSkgewotCQlOb2RlTGlzdCBsaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKENvbnN0YW50cy5VUklfU09BUDExX0VOViwgbG9jYWxOYW1lKTsKLQkJaWYgKGxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBudWxsOwkJCi0JCi0JCXJldHVybiAoRWxlbWVudCkgbGlzdC5pdGVtKDApOwotCX0KLQkKLQkvKgotCSAqIENvbnZlcnQgYSBOb2RlTGlzdCB0byBhIHZlY3RvciBvZiBlbGVtZW50cywgbm9kZXMgd2hpY2ggYXJlIG5vdCBlbGVtZW50cyBhcmUgc2tpcHBlZC4KLQkgKi8KLQlwcml2YXRlIFZlY3RvciB0b0VsZW1lbnRWZWN0b3IoTm9kZUxpc3Qgbm9kZXMpIHsKLQkJCi0JCVZlY3RvciB2ZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0JCQotCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCU5vZGUgbm9kZSA9IG5vZGVzLml0ZW0oaSk7Ci0JCQlpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0JCSAgICAJdmVjdG9yLmFkZChub2RlKTsJCSAgICAKLQkJfQotCQkKLQkJcmV0dXJuIHZlY3RvcjsJCi0JfQotCQotCS8qCi0JICogQ29udmVydCBhIE5vZGVMaXN0IHRvIGFuIGFycmF5IG9mIGVsZW1lbnRzLCBub2RlcyB3aGljaCBhcmUgbm90IGVsZW1lbnRzIGFyZSBza2lwcGVkLgotCSAqLwotCXByaXZhdGUgRWxlbWVudFtdIHRvRWxlbWVudEFycmF5KE5vZGVMaXN0IG5vZGVzKSB7Ci0JCVZlY3RvciB2ZWN0b3IgPSB0b0VsZW1lbnRWZWN0b3Iobm9kZXMpOwotCQlFbGVtZW50W10gZWxlbWVudHMgPSBuZXcgRWxlbWVudFt2ZWN0b3Iuc2l6ZSgpXTsKLQkJdmVjdG9yLmNvcHlJbnRvKGVsZW1lbnRzKTsKLQkJcmV0dXJuIGVsZW1lbnRzOwotCX0KLQkKLQkvLyBTZXJpYWxpemUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCQotCQotCS8qCi0JICogYWRkcyB0aGUgZW5jb2Rpbmcgc3R5bGUgYXR0cmlidXRlIHRvIHRoZSBlYWNoIGVsZW1lbnQgaW4gdGhlIGdpdmVuIGFycmF5LgotCSAqIG5vb3AgaWYgZW5jb2RpbmdTdHlsZSBpcyBudWxsCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZEVuY29kaW5nU3R5bGUoRWxlbWVudFtdIGVsZW1lbnRzLCBTdHJpbmcgZW5jb2RpbmdTdHlsZSkgewotCQkJCQotCQkvLyBlbmNvZGluZ1N0eWxlIGlzIG5vbi1udWxsIG9ubHkgaWYgdXNlPSJlbmNvZGVkIgotCQlpZiAoZWxlbWVudHMgPT0gbnVsbCB8fCBlbmNvZGluZ1N0eWxlID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCQotCQlmb3IgKGludCBpPTA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewotCSAgICAgICAgaWYgKGVsZW1lbnRzW2ldID09IG51bGwpCi0JICAgICAgICAJY29udGludWU7Ci0JICAgIAllbGVtZW50c1tpXS5zZXRBdHRyaWJ1dGUoCi0JICAgIAkJCUNvbnN0YW50cy5OU19QUkVGSVhfU09BUF9FTlYgKyAiOiIgKyBDb25zdGFudHMuQVRUUl9FTkNPRElOR19TVFlMRSwgZW5jb2RpbmdTdHlsZSk7CQkJCi0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZWxlbWVudHMKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBzZXJpYWxpemVFbGVtZW50cyhFbGVtZW50W10gZWxlbWVudHMpIHsKLQkKLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCi0JCQlTdHJpbmcgc2VyaWFsaXplZEZyYWdtZW50ID0gWE1MVXRpbHMuc2VyaWFsaXplKGVsZW1lbnRzW2ldLCB0cnVlKTsKLQkJCWlmIChzZXJpYWxpemVkRnJhZ21lbnQgPT0gbnVsbCkgewotCQkJCS8vIE9uIFNvbWUgSlJFJ3MgKFN1biBqYXZhIDUpIGVsZW1lbnRzIHdpdGggYW4gYXR0cmlidXRlIHdpdGggdGhlIHhzaQotCQkJCS8vIHByZWZpeCBkbyBub3Qgc2VyaWFsaXplIHByb3Blcmx5IGJlY2F1c2UgdGhlIG5hbWVzcGFjZSBjYW4gbm90Ci0JCQkJLy8gYmUgZm91bmQgc28gdGhlIHN0cmluZyByZXR1cm5lZCBjb21lcyBiYWNrIGFzIG51bGwuIFRvIHdvcmthcm91bmQKLQkJCQkvLyB0aGlzIHByb2JsZW0gdHJ5IGFkZGluZyBpbiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGF0dHJpYnV0ZQotCQkJCS8vIGFuZCByZXRyeSB0aGUgc2VyaWFsaXphdGlvbiAoYnVnIDE0NDgyNCkJCQkgCi0JCQkJZWxlbWVudHNbaV0uc2V0QXR0cmlidXRlKCJ4bWxuczp4c2kiLCBDb25zdGFudHMuVVJJXzIwMDFfU0NIRU1BX1hTSSk7Ci0JCQkJc2VyaWFsaXplZEZyYWdtZW50ID0gWE1MVXRpbHMuc2VyaWFsaXplKGVsZW1lbnRzW2ldLCB0cnVlKTsKLQkJCX0KLQkJCQotCQkJYnVmZmVyLmFwcGVuZChzZXJpYWxpemVkRnJhZ21lbnQpOwotCQkJYnVmZmVyLmFwcGVuZChMSU5FX1NFUEFSQVRPUik7Ci0JCX0KLQkJCi0JCXJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLQl9Ci0KLQkvKgotCSAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIG1lc3NhZ2UgaXMgYSByZXF1ZXN0IG1lc3NhZ2UgdXNpbmcgUlBDIHN0eWxlCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzUlBDUmVxdWVzdChJU09BUE1lc3NhZ2UgbWVzc2FnZSkgewotCQlyZXR1cm4gCi0JCQkhbWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpLmlzRG9jdW1lbnRTdHlsZSgpICYmCQkJCQkJCS8vIHJwYyBzdHlsZQotCQkJIUJvb2xlYW4uVFJVRS5lcXVhbHMobWVzc2FnZS5nZXRQcm9wZXJ0eShTT0FQVHJhbnNwb3J0LlBST1BfUkVBRF9PTkxZKSk7CS8vIG5vdCByZWFkLW9ubHkKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU2VyaWFsaXplciNzZXJpYWxpemUoaW50LCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHNlcmlhbGl6ZShpbnQgcGFydCwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCi0JCXN3aXRjaCAocGFydCkgewotCQkJY2FzZSBJU09BUE1lc3NhZ2UuRU5WRUxPUEU6Ci0JCQkJRWxlbWVudCBlbnZlbG9wZSA9IG1lc3NhZ2UuZ2V0RW52ZWxvcGUodHJ1ZSk7Ci0JCQkJCi0JCQkJaWYgKGlzUlBDUmVxdWVzdChtZXNzYWdlKSkgewkJCQkJCi0JCQkJCUVsZW1lbnQgYm9keSA9IGdldFNPQVBFbGVtZW50TlMoZW52ZWxvcGUsIENvbnN0YW50cy5FTEVNX0JPRFkpOwotCQkJCQlpZiAoYm9keSA9PSBudWxsKQotCQkJCQkJYm9keSA9IGdldFNPQVBFbGVtZW50KGVudmVsb3BlLCBDb25zdGFudHMuRUxFTV9CT0RZLCBtZXNzYWdlLmdldE5hbWVzcGFjZVRhYmxlKCkpOwotCQkJCQkKLQkJCQkJaWYgKGJvZHkgIT0gbnVsbCkgewotCQkJCQkJRWxlbWVudFtdIGJvZHlDb250ZW50ID0gdG9FbGVtZW50QXJyYXkoYm9keS5nZXRGaXJzdENoaWxkKCkuZ2V0Q2hpbGROb2RlcygpKTsKLQkJCQkJCWFkZEVuY29kaW5nU3R5bGUoYm9keUNvbnRlbnQsIGdldEVuY29kaW5nSW5mbyhtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkpWzFdKTsKLQkJCQkJfQotCQkJCX0KLQkJCQkKLQkJCQlTdHJpbmcgeG1sID0gWE1MVXRpbHMuc2VyaWFsaXplKGVudmVsb3BlLCB0cnVlKTsKLQkJCQlpZiAoeG1sID09IG51bGwpCi0JCQkJCXhtbCA9IG5ldyBTdHJpbmcoKGJ5dGVbXSkgbWVzc2FnZS5nZXRQcm9wZXJ0eShTT0FQVHJhbnNwb3J0LlBST1BfUkFXX0JZVEVTKSk7Ci0JCQkJCi0JCQkJcmV0dXJuIHhtbDsKLQkJCQkKLQkJCWNhc2UgSVNPQVBNZXNzYWdlLkhFQURFUl9DT05URU5UOgotCQkJCXJldHVybiBzZXJpYWxpemVFbGVtZW50cyhtZXNzYWdlLmdldEhlYWRlckNvbnRlbnQoKSk7Ci0JCQkJCi0JCQljYXNlIElTT0FQTWVzc2FnZS5CT0RZX0NPTlRFTlQ6CQkJCQotCQkJCUVsZW1lbnRbXSBib2R5Q29udGVudCA9IG1lc3NhZ2UuZ2V0Qm9keUNvbnRlbnQoKTsKLQkJCQkKLQkJCQlpZiAoaXNSUENSZXF1ZXN0KG1lc3NhZ2UpKQotCQkJCQlhZGRFbmNvZGluZ1N0eWxlKGJvZHlDb250ZW50LCBnZXRFbmNvZGluZ0luZm8obWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpKVsxXSk7Ci0JCQkJCi0JCQkJcmV0dXJuIHNlcmlhbGl6ZUVsZW1lbnRzKGJvZHlDb250ZW50KTsKLQkJfQotCQkKLQkJcmV0dXJuICIiOwotCX0KLQkKLQkvLyBEZXNlcmlhbGl6ZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCQkKLQkJCi0JLyoKLQkgKiBSZXRyaWV2ZSB0aGUgc29hcCBoZWFkZXIgZnJvbSB0aGUgZW52ZWxvcGUgYW5kIHBvcHVsYXRlIHRoZSBnaXZlbiBtZXNzYWdlCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByb2Nlc3NIZWFkZXIoRWxlbWVudCBlbnZlbG9wZSwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJCi0JCUVsZW1lbnQgaGVhZGVyID0gZ2V0U09BUEVsZW1lbnROUyhlbnZlbG9wZSwgQ29uc3RhbnRzLkVMRU1fSEVBREVSKTsKLQkJaWYgKGhlYWRlciA9PSBudWxsKQotCQkJcmV0dXJuOwotCQkKLQkJbWVzc2FnZS5zZXRIZWFkZXIoaGVhZGVyKTsKLQkJbWVzc2FnZS5zZXRIZWFkZXJDb250ZW50KHRvRWxlbWVudEFycmF5KGhlYWRlci5nZXRDaGlsZE5vZGVzKCkpKTsKLQl9Ci0JCi0JLyoKLQkgKiBIQUNLIC0gVGhlIHJvb3QgZWxlbWVudCB0YWcgbmFtZSBvZiB0aGUgaW5zdGFuY2UgZG9jdW1lbnQKLQkgKiBpcyBhbWJpZ3VvdXMuICBJdCBsYW5kcyBvbiBhIHZlcnkgZ3JleSBhcmVhIGJldHdlZW4gdGhlIFNPQVAKLQkgKiBzcGVjIGFuZCB0aGUgV1NETCBzcGVjLiAgVGhlIHR3byBzcGVjcyBkbyBub3QgZXhwbGljaXRseSBkZWZpbmUKLQkgKiB0aGF0IHRoZSByb290IGVsZW1lbnQgdGFnIG5hbWUgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiB0aGUKLQkgKiBXU0RMIHBhcnQuICBUaGUgaGFjayBpcyB0byB0cmVhdCBlbGVtZW50cyB3aXRoIGRpZmZlcmVudCB0YWcgbmFtZXMKLQkgKiBhcyBpbnN0YW5jZXMgb2YgdGhlIFdTREwgcGFydC4KLQkgKi8KLQlwcml2YXRlIEVsZW1lbnRbXSBmaXhTT0FQUmVzcG9uc2UoTm9kZUxpc3QgaW5zdGFuY2VMaXN0LCBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7Ci0JCQotCQlWZWN0b3IgaW5zdGFuY2VWZWN0b3IgPSB0b0VsZW1lbnRWZWN0b3IoaW5zdGFuY2VMaXN0KTsJCQotCQlFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZVZlY3Rvci5zaXplKCldOwotCQkKLQkJT3BlcmF0aW9uIG9wZXIgPSBjb250ZXh0LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsJCQotCQlNYXAgcGFydHNNYXAgPSBvcGVyLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpOwotCQkKLQkJaWYgKHBhcnRzTWFwLnNpemUoKSA9PSAxKSB7Ci0JCQlJdGVyYXRvciBpdCA9IHBhcnRzTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0JCQlQYXJ0IHBhcnQgPSAoUGFydCkgaXQubmV4dCgpOwotCQkJCi0JCQlTdHJpbmcgZnJhZ05hbWU7Ci0JCQlpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwpCi0JCQkJZnJhZ05hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQllbHNlCi0JCQkJZnJhZ05hbWUgPSBwYXJ0LmdldE5hbWUoKTsKLQkJICAgIAotCQkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZVZlY3Rvci5zaXplKCk7IGkrKykgewotCQkgICAgCUVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSBpbnN0YW5jZVZlY3Rvci5nZXQoaSk7Ci0JCSAgICAJCi0JCSAgICAJaWYgKCFlbGVtZW50LmdldFRhZ05hbWUoKS5lcXVhbHMoZnJhZ05hbWUpKSB7Ci0JCSAgICAJCURvY3VtZW50IGRvYyA9IGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpOwotCQkgICAgCQlOb2RlTGlzdCBjaGlsZHJlbiA9IGVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotCQkgICAgCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotCQkgICAgCQllbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoZnJhZ05hbWUpOwotCQkgICAgCQkKLQkJICAgIAkJZm9yIChpbnQgaiA9IDA7IGogPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgaisrKSB7Ci0JCSAgICAJCQlpZiAoY2hpbGRyZW4uaXRlbShqKSAhPSBudWxsKSB7Ci0JCSAgICAJCQkJZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZHJlbi5pdGVtKGopKTsKLQkJCQkgICAgICAgICAgICAvLyBXaGVuIHlvdSBhcHBlbmQgYSBub2RlIGZyb20gb25lIGVsZW1lbnQgdG8gYW5vdGhlciwKLQkJCQkgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZWxlbWVudCB3aWxsIGxvc2UgaXRzIHJlZmVyZW5jZSB0byB0aGlzIG5vZGUsCi0JCQkJICAgICAgICAgICAgLy8gdGhlcmVmb3JlLCB0aGUgc2l6ZSBvZiB0aGUgbm9kZSBsaXN0IHdpbGwgZGVjcmVhc2UgYnkgMS4KLQkJCQkgICAgICAgICAgICBqLS07Ci0JCSAgICAJCQl9Ci0JCSAgICAJCX0KLQkJICAgIAkJCi0JCSAgICAJCWZvciAoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaisrKSB7Ci0JCSAgICAJCQlPYmplY3QgYXR0ciA9IGF0dHJpYnV0ZXMuaXRlbShqKTsKLQkJICAgIAkJCWlmIChhdHRyICE9IG51bGwgJiYgKGF0dHIgaW5zdGFuY2VvZiBBdHRyKSkgewotCQkgICAgCQkJCUF0dHIgYXR0cmlidXRlID0gKEF0dHIpYXR0cjsKLQkJICAgIAkJCQllbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUuZ2V0TmFtZSgpLCBhdHRyaWJ1dGUuZ2V0VmFsdWUoKSk7Ci0JCSAgICAJCQl9Ci0JCSAgICAJCX0KLQkJICAgIAl9Ci0JCSAgICAJaW5zdGFuY2VEb2N1bWVudHNbaV0gPSBlbGVtZW50OwotCQkgICAgfQotCQl9Ci0JCWVsc2UKLQkJCWluc3RhbmNlVmVjdG9yLmNvcHlJbnRvKGluc3RhbmNlRG9jdW1lbnRzKTsKLQkJCi0JCXJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLQl9Ci0JCi0JLyoKLQkgKiBSZXRyaWV2ZSB0aGUgc29hcCBoZWFkZXIgZnJvbSB0aGUgZW52ZWxvcGUgYW5kIHBvcHVsYXRlIHRoZSBnaXZlbiBtZXNzYWdlCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByb2Nlc3NCb2R5KEVsZW1lbnQgZW52ZWxvcGUsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB7Ci0JCQotCQlFbGVtZW50IGJvZHkgPSBnZXRTT0FQRWxlbWVudE5TKGVudmVsb3BlLCBDb25zdGFudHMuRUxFTV9CT0RZKTsKLQkJaWYgKGJvZHkgPT0gbnVsbCkKLQkJCXJldHVybjsJCQkJCi0JCQotCQltZXNzYWdlLnNldEJvZHkoYm9keSk7Ci0JCQotCQkvLyBjaGVjayBmb3Igc29hcCBmYXVsdAotCQlFbGVtZW50IGZhdWx0ID0gZ2V0U09BUEVsZW1lbnROUyhib2R5LCBDb25zdGFudHMuRUxFTV9GQVVMVCk7Ci0JICAgIGlmIChmYXVsdCAhPSBudWxsKSB7Ci0JICAgIAltZXNzYWdlLnNldEZhdWx0KGZhdWx0KTsKLQkgICAgCXJldHVybjsKLQkgICAgfQotCSAgICAgICAgCSAgICAgICAgCi0JICAgIE5vZGVMaXN0IGluc3RhbmNlTGlzdDsKLQkgICAgCi0JICAgIGlmIChtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkuaXNEb2N1bWVudFN0eWxlKCkpCi0JICAgIAlpbnN0YW5jZUxpc3QgPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLQkgICAgZWxzZSB7Ci0JICAgICAgICBOb2RlTGlzdCBycGNXcmFwcGVyID0gYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgCi0JICAgICAgICAJCW1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKS5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0JICAgICAgICAvKgotCSAgICAgICAgKiBIQUNLIC0gU29tZSBvZiB0aGUgd2ViIHNlcnZpY2VzIG91dCBvbiB0aGUgaW50ZXJuZXQgZG8gbm90Ci0JICAgICAgICAqIHNldCB0aGVpciBSUEMgd3JhcHBlciBwcm9wZXJseS4gIEl0IHNob3VsZCBiZSBzZXQgdG8gdGhlIG91dHB1dAotCSAgICAgICAgKiBtZXNzYWdlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIG9wZXJhdGlvbi4gIFRoZSBoYWNrIGlzIHRvCi0JICAgICAgICAqIGFzc3VtZSB0aGUgZmlyc3QgZWxlbWVudCBpbnNpZGUgdGhlIGJvZHkgZWxlbWVudCBpcyB0aGUKLQkgICAgICAgICogUlBDIHdyYXBwZXIuCi0JICAgICAgICAqLwotCSAgICAgICAgaWYgKHJwY1dyYXBwZXIuZ2V0TGVuZ3RoKCkgPD0gMCkKLQkgICAgICAgIAlycGNXcmFwcGVyID0gYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgIioiKTsKLQotCSAgICAgICAgaWYgKHJwY1dyYXBwZXIuZ2V0TGVuZ3RoKCkgPiAwKQotCSAgICAgICAgCWluc3RhbmNlTGlzdCA9IHJwY1dyYXBwZXIuaXRlbSgwKS5nZXRDaGlsZE5vZGVzKCk7Ci0JICAgICAgICBlbHNlCi0JICAgICAgICAJcmV0dXJuOwotCSAgICB9Ci0JICAgIAotCSAgICBtZXNzYWdlLnNldEJvZHlDb250ZW50KGZpeFNPQVBSZXNwb25zZShpbnN0YW5jZUxpc3QsIG1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKSkpOwotCX0KLQkKLQkvKgotCSAqIERlc2VyaWFsaXplIHRoZSBieXRlIGFycmF5IGludG8gdGhlIGdpdmVuIHNvYXAgbWVzc2FnZS4gIFRoZSBwYXJ0IHBhcmFtZXRlcnMgdGVsbHMKLQkgKiB0aGUgbWV0aG9kIHdoZXRoZXIgdGhlIGlucHV0IGlzIHRoZSB3aG9sZSBlbnZlbG9wIG9yIGp1c3QgdGhlIGNvbnRlbnRzIG9mIHRoZQotCSAqIGhlYWRlciBvciBib2R5LiAKLQkgKi8KLQl2b2lkIGRlc2VyaWFsaXplKGludCBwYXJ0LCBieXRlW10geG1sLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzCQkKLQkJUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwKLQkJU0FYRXhjZXB0aW9uLAotCQlJT0V4Y2VwdGlvbiB7Ci0JCQotCQlFbGVtZW50IHJvb3QgPSBYTUxVdGlscy5ieXRlQXJyYXlUb0VsZW1lbnQoeG1sLCB0cnVlKTsJCQotCQkKLQkJc3dpdGNoIChwYXJ0KSB7Ci0JCQljYXNlIElTT0FQTWVzc2FnZS5FTlZFTE9QRToJCQkJIAotCQkJCW1lc3NhZ2Uuc2V0RW52ZWxvcGUocm9vdCk7Ci0JCQkJcHJvY2Vzc0hlYWRlcihyb290LCBtZXNzYWdlKTsKLQkJCQlwcm9jZXNzQm9keShyb290LCBtZXNzYWdlKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgSVNPQVBNZXNzYWdlLkhFQURFUl9DT05URU5UOgotCQkJCW1lc3NhZ2Uuc2V0SGVhZGVyQ29udGVudCh0b0VsZW1lbnRBcnJheShyb290LmdldENoaWxkTm9kZXMoKSkpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJU09BUE1lc3NhZ2UuQk9EWV9DT05URU5UOgotCQkJCW1lc3NhZ2Uuc2V0Qm9keUNvbnRlbnQodG9FbGVtZW50QXJyYXkocm9vdC5nZXRDaGlsZE5vZGVzKCkpKTsKLQkJCQlicmVhazsKLQkJfQotCX0KLQkKLQkvKgotCSAqIFRhY2sgb24gYSByb290IGVsZW1lbnQgdGhlIHN0cmluZyB3aGljaCByZXByZXNlbnRzIGEgc2VyaWVzIG9mIGVsZW1lbnRzLgotCSAqIFRoaXMgaXMgbmVlZGVkIHRvIGRlc2VyaWFsaXplIHRoZSBzdHJpbmcuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgYWRkUm9vdEVsZW1lbnQoU3RyaW5nIHhtbCwgTWFwIG5hbWVzcGFjZVRhYmxlKSB7Ci0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkgICAgc2IuYXBwZW5kKCI8cm9vdCIpOwotCSAgICAKLQkgICAgSXRlcmF0b3IgaXRlciA9IG5hbWVzcGFjZVRhYmxlLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCSAgICAJT2JqZWN0IHVyaSA9IGl0ZXIubmV4dCgpOwotCSAgICAJT2JqZWN0IHByZWZpeCA9IG5hbWVzcGFjZVRhYmxlLmdldCh1cmkpOwotCSAgICAJc2IuYXBwZW5kKCIgIikuYXBwZW5kKCJ4bWxuczoiKS5hcHBlbmQocHJlZml4KS5hcHBlbmQoIj1cIiIpLmFwcGVuZCh1cmkpLmFwcGVuZCgiXCIiKTsKLQkgICAgfQkgICAgCi0JICAgIAotCSAgICBzYi5hcHBlbmQoIj4iKS5hcHBlbmQoeG1sKS5hcHBlbmQoIjwvcm9vdD4iKTsKLQkgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSURlc2VyaWFsaXplciNkZXNlcmlhbGl6ZShpbnQsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlKQotCSAqLwotCXB1YmxpYyB2b2lkIGRlc2VyaWFsaXplKGludCBwYXJ0LCBTdHJpbmcgeG1sLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0JCQotCQlpZiAocGFydCAhPSBJU09BUE1lc3NhZ2UuRU5WRUxPUEUpCi0JCQl4bWwgPSBhZGRSb290RWxlbWVudCh4bWwsIG1lc3NhZ2UuZ2V0TmFtZXNwYWNlVGFibGUoKSk7Ci0JCQotCQl0cnkgewotCQkJZGVzZXJpYWxpemUocGFydCwgeG1sLmdldEJ5dGVzKERFRkFVTFRfU09BUF9FTkNPRElORyksIG1lc3NhZ2UpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbihlKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUFRyYW5zcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQVHJhbnNwb3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNDkyYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQVHJhbnNwb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSURlc2VyaWFsaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5NZXNzYWdlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LlNPQVBNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5Lk5ldFV0aWxzOwotCi0vKioKLSAqIFdTRSdzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSVNPQVBUcmFuc3BvcnQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBUcmFuc3BvcnQgaW1wbGVtZW50cyBJU09BUFRyYW5zcG9ydCB7Ci0KLQlzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfUkVBRF9PTkxZID0gInByb3BfcmVhZF9vbmx5IjsKLQlzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfUkFXX0JZVEVTID0gInByb3BfcmF3X2J5dGVzIjsKLQkKLQkvKgotCSAqIENvbnN0cnVjdG9yLgotCSAqLwotCVNPQVBUcmFuc3BvcnQoKSB7fQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydCNuZXdTZXJpYWxpemVyKCkKLQkgKi8KLQlwdWJsaWMgSVNlcmlhbGl6ZXIgbmV3U2VyaWFsaXplcigpIHsJCQotCQlyZXR1cm4gbmV3IFNPQVBNZXNzYWdlUHJvY2Vzc29yKCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnQjbmV3RGVzZXJpYWxpemVyKCkKLQkgKi8KLQlwdWJsaWMgSURlc2VyaWFsaXplciBuZXdEZXNlcmlhbGl6ZXIoKSB7Ci0JCXJldHVybiBuZXcgU09BUE1lc3NhZ2VQcm9jZXNzb3IoKTsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGlmIHRoZSBiaW5kaW5nIGlzIHN1cHBvcnRlZAotCSAqLwotCXByaXZhdGUgdm9pZCBjaGVja0JpbmRpbmcoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgYmluZGluZykgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0JCQotCQlTdHJpbmcgYmluZGluZ1VSSSA9IGJpbmRpbmcuZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJCi0JCS8vIGxvb2tpbmcgZm9yIFNPQVAgMS4xIGJpbmRpbmcKLQkJaWYgKCEoYmluZGluZyBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKSB8fAotCQkJIUNvbnN0YW50cy5VUklfV1NETDExX1NPQVAuZXF1YWxzKGJpbmRpbmdVUkkpKQotCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbihFeHBsb3JlclBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX1VOU1VQUE9SVEVEX0JJTkRJTkciLCBuZXcgU3RyaW5nW10geyBiaW5kaW5nVVJJIH0pKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydCNuZXdNZXNzYWdlKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuTWVzc2FnZUNvbnRleHQpCi0JICovCi0JcHVibGljIElTT0FQTWVzc2FnZSBuZXdNZXNzYWdlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCQkKLQkJY2hlY2tCaW5kaW5nKGNvbnRleHQuZ2V0QmluZGluZ1Byb3RvY29sKCkpOwotCQkKLQkJU09BUE1lc3NhZ2VQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IFNPQVBNZXNzYWdlUHJvY2Vzc29yKCk7Ci0JCUlTT0FQTWVzc2FnZSBtZXNzYWdlID0gbmV3IFNPQVBNZXNzYWdlKGNvbnRleHQsIHByb2Nlc3Nvcik7Ci0JCXByb2Nlc3Nvci5pbml0TWVzc2FnZShtZXNzYWdlKTsJCQkKLQkJcmV0dXJuIG1lc3NhZ2U7CQkJCQotCX0KLQkKLQkvKgotCSAqIENoZWNrIGlmIHRoZSBtZXNzYWdlIHVzZXMgYSBiaW5kaW5nIGFuZCB0cmFuc3BvcnQgdGhhdCB3ZSBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgdm9pZCBjaGVja01lc3NhZ2UoSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCQkKLQkJRXh0ZW5zaWJpbGl0eUVsZW1lbnQgYmluZGluZyA9IG1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKS5nZXRCaW5kaW5nUHJvdG9jb2woKTsgCi0JCWNoZWNrQmluZGluZyhiaW5kaW5nKTsKLQkJCi0JCVNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gKFNPQVBCaW5kaW5nKSBiaW5kaW5nOyAKLQkJCQotCQlpZiAoIUNvbnN0YW50cy5VUklfU09BUDExX0hUVFAuZXF1YWxzKHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpKSkKLQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oRXhwbG9yZXJQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9VTlNVUFBPUlRFRF9UUkFOU1BPUlQiLCBuZXcgU3RyaW5nW10geyBzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKSB9KSk7Ci0JfQotCQkKLQkvKgotCSAqIENyZWF0ZSBhbiBIVFRQVHJhbnNwb3J0IGZvciBpbnRlcm5hbCB1c2UuCi0JICovCi0JcHJpdmF0ZSBIVFRQVHJhbnNwb3J0IGNyZWF0ZUludGVybmFsVHJhbnNwb3J0KFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSB7Ci0KLQkJSFRUUFRyYW5zcG9ydCBpbnRlcm5hbFRyYW5zcG9ydCA9IG5ldyBIVFRQVHJhbnNwb3J0KCk7Ci0JCSAgICAKLQkJaWYgKHVzZXJuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVsbCkgewotCQkJaW50ZXJuYWxUcmFuc3BvcnQuc2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKHVzZXJuYW1lKTsKLQkJCWludGVybmFsVHJhbnNwb3J0LnNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChwYXNzd29yZCk7Ci0JCX0KLQkJCi0JCXJldHVybiBpbnRlcm5hbFRyYW5zcG9ydDsKLQl9CQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnQjc2VuZChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSkKLQkgKi8KLQlwdWJsaWMgSVNPQVBNZXNzYWdlIHNlbmQoU3RyaW5nIHVybCwgU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkJCi0JCWNoZWNrTWVzc2FnZShtZXNzYWdlKTsJCQkKLQkJCQkJCQkJCi0JCXRyeSB7Ci0JCQlIVFRQVHJhbnNwb3J0IGludGVybmFsVHJhbnNwb3J0ID0gY3JlYXRlSW50ZXJuYWxUcmFuc3BvcnQodXNlcm5hbWUsIHBhc3N3b3JkKTsKLQkJCWludGVybmFsVHJhbnNwb3J0LnNlbmQoTmV0VXRpbHMuY3JlYXRlVVJMKHVybCksIChTdHJpbmcpIG1lc3NhZ2UuZ2V0UHJvcGVydHkoSVNPQVBNZXNzYWdlLlBST1BfU09BUF9BQ1RJT04pLCBtZXNzYWdlLnRvWE1MKCkpOwotCQkJCi0JCQlTT0FQTWVzc2FnZVByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgU09BUE1lc3NhZ2VQcm9jZXNzb3IoKTsKLQkJCUlTT0FQTWVzc2FnZSByZXBseSA9IG5ldyBTT0FQTWVzc2FnZShtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCksIHByb2Nlc3Nvcik7Ci0JCQlyZXBseS5zZXRQcm9wZXJ0eShQUk9QX1JFQURfT05MWSwgQm9vbGVhbi5UUlVFKTsKLQkJCQotCQkJYnl0ZVtdIHJhd0J5dGVzID0gaW50ZXJuYWxUcmFuc3BvcnQucmVjZWl2ZUJ5dGVzKCk7Ci0JCQkKLQkJCXRyeSB7IAotCQkJCXByb2Nlc3Nvci5kZXNlcmlhbGl6ZShJU09BUE1lc3NhZ2UuRU5WRUxPUEUsIHJhd0J5dGVzLCByZXBseSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBpZiBlcnJvciBvY2N1cnMgZHVyaW5nIGRlc2VyaWFsaXphdGlvbiwgd2Ugd2FudCB0byBzYXZlIGEgY29weSBvZiB0aGUgYWN0dWFsIHJhdyBieXRlcwotCQkJCXJlcGx5LnNldFByb3BlcnR5KFBST1BfUkFXX0JZVEVTLCByYXdCeXRlcyk7Ci0JCQl9Ci0JCQkJCQotCQkJcmV0dXJuIHJlcGx5OwotCQl9Ci0JCWNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgZTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oZSk7Ci0JICAgIH0JCQkKLQl9CQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUFRyYW5zcG9ydFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBUcmFuc3BvcnRQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzNjNTIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUFRyYW5zcG9ydFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc3BvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnRQcm92aWRlcjsKLQotLyoqCi0gKiBXU0UncyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBJU09BUFRyYW5zcG9ydFByb3ZpZGVyLgotICovCi1wdWJsaWMgY2xhc3MgU09BUFRyYW5zcG9ydFByb3ZpZGVyIGltcGxlbWVudHMgSVNPQVBUcmFuc3BvcnRQcm92aWRlciB7CQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnRQcm92aWRlciNuZXdUcmFuc3BvcnQoKQotCSAqLwotCXB1YmxpYyBJU09BUFRyYW5zcG9ydCBuZXdUcmFuc3BvcnQoKSB7Ci0JCXJldHVybiBuZXcgU09BUFRyYW5zcG9ydCgpOwkJCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3V0aWwvU09BUE1lc3NhZ2VVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3V0aWwvU09BUE1lc3NhZ2VVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjRlZDdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC91dGlsL1NPQVBNZXNzYWdlVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqIDIwMDcwNTEwICAgMTg2Mzc1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDb21waWxlIGVycm9ycyBpbiB3c3Qud3MuZXhwbG9yZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGhhcyBzb21lIGNvbW1vbiByb3V0aW5lcyB1c2VkIGJ5IHRoZSBXZWIgU2VydmljZXMgZXhwbG9yZXIgdG8gd29yayB3aXRoIElTT0FQTWVzc2FnZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQTWVzc2FnZVV0aWxzIHsKLQkKLQkvKioKLQkgKiBEZWNvZGVzIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgdGhhdCBoYXZlIGJlZW4gZW5jb2RlZCBieSBXU0UgaW50byB0aGUgb3BlcmF0aW9uIGVsZW1lbnQgb2YgdGhlIFdTREwgbW9kZWwuCi0JICogVGhlIGRlY29kZWQgZGVjbGFyYXRpb25zIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGdpdmVuIG5hbWVzcGFjZSB0YWJsZS4KLQkgKiAgCi0JICogQHBhcmFtIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlIFRoZSBuYW1lc3BhY2UgdGFibGUgdG8gcG9wdWxhdGUuCi0JICogQHBhcmFtIG9wZXJFbGVtZW50IFRoZSBvcGVyYXRpb24gZWxlbWVudCB3aXRoIHRoZSBlbmNvZGVkIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMuCi0JICogQHJldHVybiBUcnVlIGlmIG5ldyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGFyZSBmb3VuZCBhbmQgYWRkZWQgdG8gdGhlIG5hbWVzcGFjZSB0YWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWNvZGVOYW1lc3BhY2VUYWJsZShIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50KSB7Ci0JCQkKLQkJYm9vbGVhbiB1cGRhdGVkID0gZmFsc2U7Ci0KLQkJU3RyaW5nW10gbnNEZWNsYXJhdGlvbnMgPSAoU3RyaW5nW10pIG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFKTsKLQkJaWYgKG5zRGVjbGFyYXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJLy8gZWFjaCBuYW1lc3BhY2UgZGVjbGFyYXRpb24gaXMgZGVjb2RlZCBpbnRvIDIgcGFydHM6IHRoZSBwcmVmaXggCi0JCS8vIGluIGVsZW1lbnQgWzBdIGFuZCB0aGUgbmFtZXNwYWNlIHVyaSBpbiBlbGVtZW50IFsxXS4KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuc0RlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nW10gcHJlZml4X25zID0gU29hcEhlbHBlci5kZWNvZGVOYW1lc3BhY2VEZWNsYXJhdGlvbihuc0RlY2xhcmF0aW9uc1tpXSk7Ci0JCQkKLQkJCS8vIGNoZWNrIGlmIHRoZSBuYW1lc3BhY2UgdXJpIGlzIGFscmVhZHkgYSBrZXkgaW4gdGhlIG5hbWVzcGFjZSB0YWJsZQotCQkJLy8gaWYgaXQgaXMsIGRvbid0IGFkZCBpdAotCQkJaWYgKCFzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5jb250YWluc0tleShwcmVmaXhfbnNbMV0pKSB7Ci0JCQkgICAgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KHByZWZpeF9uc1sxXSwgcHJlZml4X25zWzBdKTsKLQkJCSAgICB1cGRhdGVkID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHVwZGF0ZWQ7Ci0JfQotCi0JLyoqCi0JICogUG9wdWxhdGUgdGhlIGhlYWRlciBjb250ZW50IG9mIHRoZSBnaXZlbiBJU09BUE1lc3NhZ2UgdXNpbmcgdGhlIHZhbHVlcyBmcm9tIFdTRSdzIGZyYWdtZW50IG1vZGVsCi0JICogCi0JICogQHBhcmFtIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlIEEgbmFtZXNwYWNlIHRhYmxlIHRvIHVzZSBkdXJpbmcgdGhpcyBvcGVyYXRpb24uCi0JICogQHBhcmFtIG9wZXJFbGVtZW50IEFjY2VzcyBXU0UncyBmcmFnbWVudHMgdmlhIHRoaXMgb3BlcmF0aW9uIGVsZW1lbnQuIAotCSAqIEBwYXJhbSBzb2FwTWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIHBvcHVsYXRlLgotCSAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRIZWFkZXJDb250ZW50RnJvbU1vZGVsKEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQsIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSkKLQkJdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gewotCSAgICAKLQkJVmVjdG9yIGhlYWRlckVudHJpZXMgPSBuZXcgVmVjdG9yKCk7Ci0JICAgIAotCSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldFNPQVBIZWFkZXJzKCkuaXRlcmF0b3IoKTsKLQkgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCSAgICAJU09BUEhlYWRlciBzb2FwSGVhZGVyID0gKFNPQVBIZWFkZXIpIGl0Lm5leHQoKTsKLQkgICAgCWJvb2xlYW4gaXNVc2VMaXRlcmFsID0gImxpdGVyYWwiLmVxdWFscyhzb2FwSGVhZGVyLmdldFVzZSgpKTsgICAgICAgICAgIAotCSAgICAJSVhTREZyYWdtZW50IGZyYWcgPSAoSVhTREZyYWdtZW50KSBvcGVyRWxlbWVudC5nZXRIZWFkZXJGcmFnbWVudChzb2FwSGVhZGVyKTsKLQkgICAgCUVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IGZyYWcuZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKAotCSAgICAJCQkhaXNVc2VMaXRlcmFsLCBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgc29hcE1lc3NhZ2UuZ2V0RW52ZWxvcGUoZmFsc2UpLmdldE93bmVyRG9jdW1lbnQoKSk7Ci0JICAgIAlmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0JICAgIAkJaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldID09IG51bGwpCi0JICAgIAkJCWNvbnRpbnVlOwotCSAgICAJCWhlYWRlckVudHJpZXMuYWRkRWxlbWVudChpbnN0YW5jZURvY3VtZW50c1tpXSk7Ci0JICAgIAl9Ci0JICAgIH0KLQotCSAgICBFbGVtZW50W10gaGVhZGVyQ29udGVudCA9IG5ldyBFbGVtZW50W2hlYWRlckVudHJpZXMuc2l6ZSgpXTsKLQkgICAgaGVhZGVyRW50cmllcy5jb3B5SW50byhoZWFkZXJDb250ZW50KTsKLQkgICAgCi0JICAgIHNvYXBNZXNzYWdlLnNldEhlYWRlckNvbnRlbnQoaGVhZGVyQ29udGVudCk7Ci0JfQotCi0JLyoqCi0JICogUG9wdWxhdGUgdGhlIGJvZHkgY29udGVudCBvZiB0aGUgZ2l2ZW4gSVNPQVBNZXNzYWdlIHVzaW5nIHRoZSB2YWx1ZXMgZnJvbSBXU0UncyBmcmFnbWVudCBtb2RlbAotCSAqIAotCSAqIEBwYXJhbSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSBBIG5hbWVzcGFjZSB0YWJsZSB0byB1c2UgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLgotCSAqIEBwYXJhbSBvcGVyRWxlbWVudCBBY2Nlc3MgV1NFJ3MgZnJhZ21lbnRzIHZpYSB0aGlzIG9wZXJhdGlvbiBlbGVtZW50LiAKLQkgKiBAcGFyYW0gc29hcE1lc3NhZ2UgVGhlIElTT0FQTWVzc2FnZSB0byBwb3B1bGF0ZS4KLQkgKiBAdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0Qm9keUNvbnRlbnRGcm9tTW9kZWwoSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCwgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlKQotCQl0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7Ci0JCQotCSAgICBWZWN0b3IgYm9keUVudHJpZXMgPSBuZXcgVmVjdG9yKCk7Ci0JICAgIGJvb2xlYW4gaXNVc2VMaXRlcmFsID0gb3BlckVsZW1lbnQuaXNVc2VMaXRlcmFsKCk7Ci0KLQkgICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCSAgICAJUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotCSAgICAJSVhTREZyYWdtZW50IGZyYWcgPSAoSVhTREZyYWdtZW50KSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLQkgICAgCUVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IGZyYWcuZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKAotCSAgICAJCQkgIWlzVXNlTGl0ZXJhbCwgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIHNvYXBNZXNzYWdlLmdldEVudmVsb3BlKGZhbHNlKS5nZXRPd25lckRvY3VtZW50KCkpOwotCSAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotCSAgICAJCWlmIChpbnN0YW5jZURvY3VtZW50c1tpXSA9PSBudWxsKQotCSAgICAJCQljb250aW51ZTsKLQkgICAgCQlib2R5RW50cmllcy5hZGRFbGVtZW50KGluc3RhbmNlRG9jdW1lbnRzW2ldKTsKLQkgICAgCX0KLQkgICAgfQotCi0JICAgIEVsZW1lbnRbXSBib2R5Q29udGVudCA9IG5ldyBFbGVtZW50W2JvZHlFbnRyaWVzLnNpemUoKV07Ci0JICAgIGJvZHlFbnRyaWVzLmNvcHlJbnRvKGJvZHlDb250ZW50KTsKLQkgICAgCi0JICAgIHNvYXBNZXNzYWdlLnNldEJvZHlDb250ZW50KGJvZHlDb250ZW50KTsKLQl9Ci0JCi0JLyoKLQkgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGEgbmFtZXNwYWNlIGRlY2xhcmF0aW9uLCB0aGUgbmFtZXNwYWNlIHByZWZpeCBpcyByZXR1cm5lZC4KLQkgKiBPdGhlcndpc2UgbnVsbCBpcyByZXR1cm5lZC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0TlNQcmVmaXgoQXR0ciBhdHRyaWJ1dGUpIHsKLQkJU3RyaW5nIG5hbWUgPSBhdHRyaWJ1dGUuZ2V0TmFtZSgpOwotCQlpZiAobmFtZS5zdGFydHNXaXRoKCJ4bWxuczoiKSkKLQkJCXJldHVybiBuYW1lLnN1YnN0cmluZyg2KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qCi0JICogbG9va3VwIHRoZSBwcmVmaXggb2YgdGhlIG5hbWVzcGFjZVVSSSwgYXNzdW1pbmcgdGhhdCBpdCBpcyBkZWNsYXJlZCBvbiB0aGUgZWxlbWVudCBpdHNlbGYKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbG9va3VwUHJlZml4KEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG5hbWVzcGFjZVVSSSkgewotCQkKLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCUF0dHIgYXR0cmlidXRlID0gKEF0dHIpIGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCVN0cmluZyBwcmVmaXggPSBnZXROU1ByZWZpeChhdHRyaWJ1dGUpOwotCQkJaWYgKHByZWZpeCAhPSBudWxsICYmIGF0dHJpYnV0ZS5nZXRWYWx1ZSgpLmVxdWFscyhuYW1lc3BhY2VVUkkpKQotCQkJCXJldHVybiBwcmVmaXg7Ci0JCX0JCQotCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIEdpdmVuIGFuIGFycmF5IG9mIGVsZW1lbnRzLCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBtYXRjaGVzCi0JICogdGhlIGdpdmVuIFBhcnQuICBBIG1hdGNoIGlzIGRldGVybWluZWQgYnkgY29tcGFyaW5nIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIFBhcnQgYW5kIEVsZW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBwYXJ0IFRoZSBQYXJ0IAotCSAqIEBwYXJhbSBlbGVtZW50cyBUaGUgYXJyYXkgb2YgRWxlbWVudHMKLQkgKiBAcGFyYW0gbmFtZXNwYWNlVGFibGUgQSBuYW1lc3BhY2UgdGFibGUgZm9yIGxvb2tpbmcgdXAgbmFtZXNwYWNlIHByZWZpeGVzLgotCSAqIEBwYXJhbSBmcmFnTmFtZSBOYW1lIG9mIHRoZSBQYXJ0J3MgZnJhZ21lbnQgKGVzc2VudGlhbGx5IHRoZSBQYXJ0J3MgbG9jYWwgbmFtZSkuCi0JICogQHBhcmFtIHN0YXJ0IFRoZSBpbmRleCB0byBiZWdpbiB0aGUgc2VhcmNoLgotCSAqIEByZXR1cm4gVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciAtMSBpZiBubyBtYXRjaCBpcyBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBmaW5kRmlyc3RNYXRjaGluZ0VsZW1lbnQoUGFydCBwYXJ0LCBFbGVtZW50W10gZWxlbWVudHMsIE1hcCBuYW1lc3BhY2VUYWJsZSwgU3RyaW5nIGZyYWdOYW1lLCBpbnQgc3RhcnQpIHsKLQkJCi0JCVN0cmluZyBuYW1lc3BhY2VVUkkgPSBudWxsOwotCQlTdHJpbmcgcHJlZml4ID0gbnVsbDsKLQkJCi0JCS8vIHRyeSB0byBnZXQgdGhlIHByZWZpeAotCQlpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwpIHsKLQkJCW5hbWVzcGFjZVVSSSA9IHBhcnQuZ2V0RWxlbWVudE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJCXByZWZpeCA9IChTdHJpbmcpIG5hbWVzcGFjZVRhYmxlLmdldChuYW1lc3BhY2VVUkkpOwkJCQkJCi0JCX0KLQkJCi0JCWZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CQkJCi0JCQlFbGVtZW50IGVsZW1lbnQgPSBlbGVtZW50c1tpXTsKLQkJCVN0cmluZyBuYW1lID0gZWxlbWVudC5nZXRUYWdOYW1lKCk7Ci0JCQkKLQkJCS8vIHRyeSB0byBnZXQgcHJlZml4IGFnYWluLCB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGNhbiBiZSBkaXJlY3RseSBvbiB0aGUgZWxlbWVudAotCQkJaWYgKHByZWZpeCA9PSBudWxsICYmIG5hbWVzcGFjZVVSSSAhPSBudWxsICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlcygpKQotCQkJCXByZWZpeCA9IGxvb2t1cFByZWZpeChlbGVtZW50LCBuYW1lc3BhY2VVUkkpOwotCQkJCi0JCQlpZiAocHJlZml4ID09IG51bGwgJiYgbmFtZS5lcXVhbHMoZnJhZ05hbWUpKQotCQkJCXJldHVybiBpOwotCQkJZWxzZSBpZiAocHJlZml4ICE9IG51bGwgJiYgbmFtZS5lcXVhbHMocHJlZml4ICsgIjoiICsgZnJhZ05hbWUpKQotCQkJCXJldHVybiBpOwotCQl9Ci0JCQkJCi0JCXJldHVybiAtMTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdXRpbC9Tb2FwSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdXRpbC9Tb2FwSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYzgzNDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3V0aWwvU29hcEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU29hcEhlbHBlcgotewotICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfID0gbnVsbDsKLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzKCkKLSAgewotICAgIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18ucHV0KENvbnN0YW50cy5VUklfU09BUDExX0VOVixDb25zdGFudHMuTlNfUFJFRklYX1NPQVBfRU5WKTsKLSAgICBkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18ucHV0KENvbnN0YW50cy5VUklfMjAwMV9TQ0hFTUFfWFNJLENvbnN0YW50cy5OU19QUkVGSVhfU0NIRU1BX1hTSSk7Ci0gICAgZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfLnB1dChDb25zdGFudHMuVVJJXzIwMDFfU0NIRU1BX1hTRCxDb25zdGFudHMuTlNfUFJFRklYX1NDSEVNQV9YU0QpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgYWRkRGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXMoSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZXMpCi0gIHsKLSAgICBpZiAoZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfID09IG51bGwpCi0gICAgICBpbml0RGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXMoKTsKLSAgICBFbnVtZXJhdGlvbiBkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlVVJJcyA9IGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXy5rZXlzKCk7Ci0gICAgd2hpbGUgKGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VVUklzLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlVVJJID0gKFN0cmluZylkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlVVJJcy5uZXh0RWxlbWVudCgpOwotICAgICAgc29hcEVudmVsb3BlTmFtZXNwYWNlcy5wdXQoZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZVVSSSwoU3RyaW5nKWRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXy5nZXQoZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZVVSSSkpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzRGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlVVJJLFN0cmluZyBuYW1lc3BhY2VQcmVmaXgpCi0gIHsKLSAgICBpZiAoZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfID09IG51bGwpCi0gICAgICBpbml0RGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXMoKTsKLSAgICBpZiAoZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfLmdldChuYW1lc3BhY2VVUkkpICE9IG51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0gIAotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbGVtZW50IGNyZWF0ZVNvYXBFbnZlbG9wZUVsZW1lbnQoRG9jdW1lbnQgZG9jLEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSkKLSAgewotICAgIEVsZW1lbnQgc29hcEVudmVsb3BlRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCJzb2FwZW52OkVudmVsb3BlIik7Ci0gICAgRW51bWVyYXRpb24gZSA9IHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLmtleXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc29hcEVudmVsb3BlTmFtZXNwYWNlVVJJID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmdCdWZmZXIgc29hcEVudmVsb3BlTmFtZXNwYWNlQXR0ciA9IG5ldyBTdHJpbmdCdWZmZXIoInhtbG5zOiIpOwotICAgICAgc29hcEVudmVsb3BlTmFtZXNwYWNlQXR0ci5hcHBlbmQoKFN0cmluZylzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5nZXQoc29hcEVudmVsb3BlTmFtZXNwYWNlVVJJKSk7Ci0gICAgICBzb2FwRW52ZWxvcGVFbGVtZW50LnNldEF0dHJpYnV0ZShzb2FwRW52ZWxvcGVOYW1lc3BhY2VBdHRyLnRvU3RyaW5nKCksc29hcEVudmVsb3BlTmFtZXNwYWNlVVJJKTsgICAgICAKLSAgICB9ICAgIAotICAgIHJldHVybiBzb2FwRW52ZWxvcGVFbGVtZW50OwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVsZW1lbnQgY3JlYXRlU29hcEhlYWRlckVsZW1lbnQoRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgcmV0dXJuIGRvYy5jcmVhdGVFbGVtZW50KCJzb2FwZW52OkhlYWRlciIpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVsZW1lbnQgY3JlYXRlU29hcEJvZHlFbGVtZW50KERvY3VtZW50IGRvYykKLSAgewotICAgIHJldHVybiBkb2MuY3JlYXRlRWxlbWVudCgic29hcGVudjpCb2R5Iik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRWxlbWVudCBjcmVhdGVSUENXcmFwcGVyRWxlbWVudChEb2N1bWVudCBkb2MsSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLFN0cmluZyBlbmNvZGluZ05hbWVzcGFjZVVSSSxTdHJpbmcgb3BlcmF0aW9uTmFtZSwgU3RyaW5nIGVuY29kaW5nU3R5bGUpCi0gIHsKLSAgICBpbnQgbnNJZCA9IDA7Ci0gICAgU3RyaW5nQnVmZmVyIHdyYXBwZXJFbGVtZW50TmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmcgZW5jb2RpbmdOYW1lc3BhY2VQcmVmaXggPSAoU3RyaW5nKXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLmdldChlbmNvZGluZ05hbWVzcGFjZVVSSSk7Ci0gICAgaWYgKGVuY29kaW5nTmFtZXNwYWNlUHJlZml4ICE9IG51bGwpCi0gICAgICB3cmFwcGVyRWxlbWVudE5hbWUuYXBwZW5kKGVuY29kaW5nTmFtZXNwYWNlUHJlZml4KTsKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gTG9vcCB1bnRpbCB3ZSBnZW5lcmF0ZSBhIHVuaXF1ZSBwcmVmaXguCi0gICAgICBkbwotICAgICAgewotICAgICAgICB3cmFwcGVyRWxlbWVudE5hbWUuc2V0TGVuZ3RoKDApOwotICAgICAgICB3cmFwcGVyRWxlbWVudE5hbWUuYXBwZW5kKCJucyIpLmFwcGVuZChuc0lkKTsKLSAgICAgICAgaWYgKCFzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5jb250YWluc1ZhbHVlKHdyYXBwZXJFbGVtZW50TmFtZS50b1N0cmluZygpKSkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgbnNJZCsrOwotICAgICAgfSB3aGlsZSAodHJ1ZSk7Ci0gICAgICAKLSAgICAgIC8vIG5lZWQgdG8gZW5zdXJlIHdoYXRldmVyIHByZWZpeCB3ZSBjaG9vc2UgaXMgYWRkZWQgdG8gdGhlIG5hbWVzcGFjZSB0YWJsZQotICAgICAgLy8gc28gdGhhdCBpdCB3aWxsIG5vdCBiZSByZXVzZWQgbGF0ZWQgb24KLSAgICAgIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChlbmNvZGluZ05hbWVzcGFjZVVSSSwgd3JhcHBlckVsZW1lbnROYW1lLnRvU3RyaW5nKCkpOwotICAgIH0gICAgCi0gICAgU3RyaW5nIHdyYXBwZXJFbGVtZW50TmFtZVByZWZpeCA9IHdyYXBwZXJFbGVtZW50TmFtZS50b1N0cmluZygpOwotICAgIHdyYXBwZXJFbGVtZW50TmFtZS5hcHBlbmQoJzonKS5hcHBlbmQob3BlcmF0aW9uTmFtZSk7Ci0gICAgRWxlbWVudCB3cmFwcGVyRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHdyYXBwZXJFbGVtZW50TmFtZS50b1N0cmluZygpKTsKLSAgICBTdHJpbmdCdWZmZXIgbmFtZXNwYWNlQXR0ck5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4bWxuczoiKTsKLSAgICBuYW1lc3BhY2VBdHRyTmFtZS5hcHBlbmQod3JhcHBlckVsZW1lbnROYW1lUHJlZml4KTsKLSAgICB3cmFwcGVyRWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZXNwYWNlQXR0ck5hbWUudG9TdHJpbmcoKSxlbmNvZGluZ05hbWVzcGFjZVVSSSk7Ci0gICAgaWYgKGVuY29kaW5nU3R5bGUgIT0gbnVsbCkKLSAgICAgIHdyYXBwZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgic29hcGVudjplbmNvZGluZ1N0eWxlIixlbmNvZGluZ1N0eWxlKTsKLSAgICByZXR1cm4gd3JhcHBlckVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBlbmNvZGVOYW1lc3BhY2VEZWNsYXJhdGlvbihTdHJpbmcgcHJlZml4LCBTdHJpbmcgdXJpKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNiLmFwcGVuZChwcmVmaXgpOwotICAgIHNiLmFwcGVuZCgiICIpOwotICAgIHNiLmFwcGVuZCh1cmkpOwotICAgIFN0cmluZyByZXN1bHQgPSBVUkxVdGlscy5lbmNvZGUoc2IudG9TdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gZGVjb2RlTmFtZXNwYWNlRGVjbGFyYXRpb24oU3RyaW5nIHMpCi0gIHsKLSAgICBTdHJpbmcgc0NvcHkgPSBVUkxVdGlscy5kZWNvZGUocyk7Ci0gICAgaW50IGluZGV4ID0gc0NvcHkuaW5kZXhPZigiICIpOwotICAgIFN0cmluZ1tdIG5zRGVjbCA9IG5ldyBTdHJpbmdbMl07Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIG5zRGVjbFswXSA9IHNDb3B5LnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICBuc0RlY2xbMV0gPSBzQ29weS5zdWJzdHJpbmcoaW5kZXgrMSwgc0NvcHkubGVuZ3RoKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgbnNEZWNsWzBdID0gbnVsbDsKLSAgICAgIG5zRGVjbFsxXSA9IHNDb3B5OwotICAgIH0KLSAgICByZXR1cm4gbnNEZWNsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwveHNkL1dTRExQYXJ0c1RvWFNEVHlwZU1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3hzZC9XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM5ZGM0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwveHNkL1dTRExQYXJ0c1RvWFNEVHlwZU1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cERlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyCi17Ci0gIHByaXZhdGUgZmluYWwgY2hhciBQT1VORCA9ICcjJzsKLSAgcHJpdmF0ZSBWZWN0b3IgeHNkU2NoZW1hTGlzdF87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHBhcnRUb1hTRENhY2hlXzsKLQotICBwdWJsaWMgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkgewotICAgIHhzZFNjaGVtYUxpc3RfID0gbmV3IFZlY3RvcigpOwotICAgIHBhcnRUb1hTRENhY2hlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFNjaGVtYXMoVmVjdG9yIHNjaGVtYUxpc3QpIHsKLSAgICBmb3IgKGludCBpPTA7aTxzY2hlbWFMaXN0LnNpemUoKTtpKyspIHsKLSAgICAgIE9iamVjdCBzY2hlbWEgPSBzY2hlbWFMaXN0LmVsZW1lbnRBdChpKTsKLSAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgeHNkU2NoZW1hTGlzdF8uYWRkRWxlbWVudChzY2hlbWEpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBYU0ROYW1lZENvbXBvbmVudCBnZXRYU0RUeXBlKFBhcnQgcGFydCwgU3RyaW5nIGlkKSB7Ci0gICAgWFNETmFtZWRDb21wb25lbnQgY29tcG9uZW50ID0gZ2V0WFNEVHlwZUZyb21DYWNoZShpZCk7Ci0gICAgaWYgKGNvbXBvbmVudCAhPSBudWxsKQotICAgICAgcmV0dXJuIGNvbXBvbmVudDsKLSAgICBjb21wb25lbnQgPSBnZXRYU0RUeXBlRnJvbVNjaGVtYShwYXJ0KTsKLSAgICBpZiAoY29tcG9uZW50ICE9IG51bGwpCi0gICAgICBhZGRUb0NhY2hlKGlkLCBjb21wb25lbnQpOwotICAgIHJldHVybiBjb21wb25lbnQ7Ci0gIH0KLQotICBwdWJsaWMgWFNETmFtZWRDb21wb25lbnQgZ2V0WFNEVHlwZUZyb21DYWNoZShTdHJpbmcgaWQpIHsKLSAgICByZXR1cm4gKFhTRE5hbWVkQ29tcG9uZW50KXBhcnRUb1hTRENhY2hlXy5nZXQoaWQpOwotICB9Ci0KLSAgcHVibGljIFhTRE5hbWVkQ29tcG9uZW50IGdldFhTRFR5cGVGcm9tU2NoZW1hKFBhcnQgcGFydCkgewotICAgIGJvb2xlYW4gaXNFbGVtZW50RGVjbGFyYXRpb24gPSAocGFydC5nZXRUeXBlTmFtZSgpID09IG51bGwpOwotICAgIFFOYW1lIHFOYW1lID0gaXNFbGVtZW50RGVjbGFyYXRpb24gPyBwYXJ0LmdldEVsZW1lbnROYW1lKCkgOiBwYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgcmV0dXJuIGdldFhTRFR5cGVGcm9tU2NoZW1hKHFOYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBxTmFtZS5nZXRMb2NhbFBhcnQoKSwgaXNFbGVtZW50RGVjbGFyYXRpb24pOwotICB9Ci0KLSAgcHVibGljIFhTRE5hbWVkQ29tcG9uZW50IGdldFhTRFR5cGVGcm9tU2NoZW1hKFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIGJvb2xlYW4gaXNFbGVtZW50RGVjbGFyYXRpb24pIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHhzZFNjaGVtYUxpc3RfLnNpemUoKTsgaSsrKSB7Ci0gICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gKFhTRFNjaGVtYSl4c2RTY2hlbWFMaXN0Xy5lbGVtZW50QXQoaSk7Ci0gICAgICBWZWN0b3IgY29tcG9uZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGlmIChpc0VsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgICAgY29tcG9uZW50cy5hZGRBbGwoeHNkU2NoZW1hLmdldEVsZW1lbnREZWNsYXJhdGlvbnMoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGNvbXBvbmVudHMuYWRkQWxsKHhzZFNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKSk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gY29tcG9uZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkgewotICAgICAgICBYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQgID0gKFhTRE5hbWVkQ29tcG9uZW50KWl0Lm5leHQoKTsKLSAgICAgICAgU3RyaW5nIGNvbXBOU1VSSSA9IGNvbXBvbmVudC5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgU3RyaW5nIGNvbXBMb2NhbG5hbWUgPSBjb21wb25lbnQuZ2V0TmFtZSgpOwotICAgICAgICBpZiAoY29tcE5TVVJJICE9IG51bGwgJiYgY29tcExvY2FsbmFtZSAhPSBudWxsICYmIGNvbXBOU1VSSS5lcXVhbHMobmFtZXNwYWNlVVJJKSAmJiBjb21wTG9jYWxuYW1lLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgICAgIHJldHVybiBjb21wb25lbnQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFhTRE5hbWVkQ29tcG9uZW50IHJlc29sdmVYU0ROYW1lZENvbXBvbmVudChYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQpCi0gIHsKLSAgICBpZiAoY29tcG9uZW50ICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHVyaSA9IGNvbXBvbmVudC5nZXRVUkkoKTsKLSAgICAgIFN0cmluZyBxbmFtZSA9IGNvbXBvbmVudC5nZXRRTmFtZSgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RTY2hlbWFMaXN0Xy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IChYU0RTY2hlbWEpeHNkU2NoZW1hTGlzdF8uZWxlbWVudEF0KGkpOwotICAgICAgICBpZiAoeHNkU2NoZW1hICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdGFyZ2V0TlMgPSB4c2RTY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgICAgaWYgKHRhcmdldE5TICE9IG51bGwgJiYgdGFyZ2V0TlMuZXF1YWxzKHRyaW1RTmFtZSh1cmksIHFuYW1lKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNETmFtZWRDb21wb25lbnQgcmVzb2x2ZWRDb21wb25lbnQgPSBudWxsOwotICAgICAgICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgICAgICAgICByZXNvbHZlZENvbXBvbmVudCA9IHhzZFNjaGVtYS5yZXNvbHZlVHlwZURlZmluaXRpb24ocW5hbWUpOwotICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgICAgICAgICByZXNvbHZlZENvbXBvbmVudCA9IHhzZFNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKHFuYW1lKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKQotICAgICAgICAgICAgICByZXNvbHZlZENvbXBvbmVudCA9IHhzZFNjaGVtYS5yZXNvbHZlTW9kZWxHcm91cERlZmluaXRpb24ocW5hbWUpOwotICAgICAgICAgICAgaWYgKGlzQ29tcG9uZW50UmVzb2x2YWJsZShyZXNvbHZlZENvbXBvbmVudCkpCi0gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZENvbXBvbmVudDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyB0cmltUU5hbWUoU3RyaW5nIHVyaSwgU3RyaW5nIHFuYW1lKQotICB7Ci0gICAgaW50IGluZGV4ID0gdXJpLmluZGV4T2YocW5hbWUpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnMgPSB1cmkuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICAgIGlmIChucy5jaGFyQXQoaW5kZXgtMSkgPT0gUE9VTkQpCi0gICAgICAgIHJldHVybiBucy5zdWJzdHJpbmcoMCwgaW5kZXgtMSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuczsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHVyaTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRUb0NhY2hlKFN0cmluZyBpZCwgWFNETmFtZWRDb21wb25lbnQgY29tcG9uZW50KSB7Ci0gICAgcGFydFRvWFNEQ2FjaGVfLnB1dChpZCxjb21wb25lbnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNDb21wb25lbnRSZXNvbHZhYmxlKFhTRENvbXBvbmVudCBjb21wb25lbnQpCi0gIHsKLSAgICBpZiAoY29tcG9uZW50ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGNvbXBvbmVudC5nZXRTY2hlbWEoKTsKLSAgICBpZiAoc2NoZW1hID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRCdXNpbmVzc1RvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRCdXNpbmVzc1RvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNmQ2ZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsVWRkaUJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBBZGRUb0Zhdm9yaXRlc0FjdGlvbgotewotICBwdWJsaWMgQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBPYmplY3Qgb2JqID0gc2VsZWN0ZWRFbGVtZW50LmdldEFsbFVERElMaW5rcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCkuZ2V0T2JqZWN0KCk7Ci0gICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIG9iajsKLSAgICBTdHJpbmcgYnVzaW5lc3NOYW1lID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtJbnF1aXJ5QVBJKCk7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpOwotICAgIGlmIChidXNpbmVzc05hbWUgPT0gbnVsbCkKLSAgICAgIGJ1c2luZXNzTmFtZSA9IGJ1c2luZXNzS2V5OwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX05BTUUsIGJ1c2luZXNzTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSwgaW5xdWlyeUFQSSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19LRVksIGJ1c2luZXNzS2V5KTsKLSAgICByZXR1cm4gZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5VRERJX0JVU0lORVNTKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBPYmplY3Qgb2JqID0gc2VsZWN0ZWRFbGVtZW50LmdldEFsbFVERElMaW5rcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCkuZ2V0T2JqZWN0KCk7Ci0gICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIG9iajsKLSAgICBTdHJpbmcgYnVzaW5lc3NOYW1lID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtJbnF1aXJ5QVBJKCk7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpOwotICAgIGlmIChidXNpbmVzc05hbWUgPT0gbnVsbCkKLSAgICAgIGJ1c2luZXNzTmFtZSA9IGJ1c2luZXNzS2V5OwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX05BTUUsIGJ1c2luZXNzTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSwgaW5xdWlyeUFQSSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19LRVksIGJ1c2luZXNzS2V5KTsKLSAgICBpZiAoaXNNdWx0aXBsZUxpbmtBY3Rpb24oKSAmJiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfRkFWT1JJVEVTX0FMUkVBRFlfRVhJU1RTIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhZGRUb0Zhdm9yaXRlcyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUwiLCBidXNpbmVzc05hbWUpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fRkFWT1JJVEVTIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NTUxMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLlVERElfQlVTSU5FU1MpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gbnVsbDsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBudWxsOwotICAgIFN0cmluZyBidXNpbmVzc05hbWUgPSBudWxsOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsZSA9ICgoV3NpbEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsVURESUxpbmtzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50ID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSBsZS5nZXRPYmplY3QoKTsKLSAgICAgIGlucXVpcnlVUkwgPSB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudC5nZXRVRERJTGlua0lucXVpcnlBUEkoKTsKLSAgICAgIGJ1c2luZXNzS2V5ID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpOwotICAgICAgYnVzaW5lc3NOYW1lID0gd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgaWYgKGJ1c2luZXNzTmFtZSA9PSBudWxsKQotICAgICAgICBidXNpbmVzc05hbWUgPSBidXNpbmVzc0tleTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIHJldHVybiBmYWxzZSBpZiB1bmFibGUgdG8gZmluZCBvciBjcmVhdGUgYSByZWdpc3RyeSBub2RlL2VsZW1lbnQgaW4gdGhlCi0gICAgLy8gVURESSBwZXJzcGVjdGl2ZQotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5VVJMLCBudWxsLCBpbnF1aXJ5VVJMKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIHByZXBhcmUgdGhlIGFjdGlvbgotICAgIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIC8vIHBvcHVsYXRlIHByb3BlcnR5IHRhYmxlCi0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksIGJ1c2luZXNzS2V5KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsIGJ1c2luZXNzTmFtZSk7Ci0gICAgLy8gcnVuIHRoZSBhY3Rpb24KLSAgICBpZiAoIWFjdGlvbi5ydW4oKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0JVU0lORVNTX05PVF9GT1VORCIsIGJ1c2luZXNzTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCBidXNpbmVzc05hbWUpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZlNWYyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbiBleHRlbmRzIEFkZFRvRmF2b3JpdGVzQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cygpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFdzaWxFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgT2JqZWN0IG9iaiA9IHNlbGVjdGVkRWxlbWVudC5nZXRBbGxVRERJU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgd3NpbFVkZGlTZXJ2aWNlRWxlbWVudCA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBvYmo7Ci0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldFVERElTZXJ2aWNlSW5xdWlyeUFQSSgpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUtleSgpOwotICAgIGlmIChzZXJ2aWNlTmFtZSA9PSBudWxsKQotICAgICAgc2VydmljZU5hbWUgPSBzZXJ2aWNlS2V5OwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfTkFNRSwgc2VydmljZU5hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSwgaW5xdWlyeUFQSSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0tFWSwgc2VydmljZUtleSk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlRXhpc3RzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5VRERJX1NFUlZJQ0UpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIE9iamVjdCBvYmogPSBzZWxlY3RlZEVsZW1lbnQuZ2V0QWxsVURESVNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKS5nZXRPYmplY3QoKTsKLSAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHdzaWxVZGRpU2VydmljZUVsZW1lbnQgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgb2JqOwotICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUlucXVpcnlBUEkoKTsKLSAgICBTdHJpbmcgc2VydmljZUtleSA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VLZXkoKTsKLSAgICBpZiAoc2VydmljZU5hbWUgPT0gbnVsbCkKLSAgICAgIHNlcnZpY2VOYW1lID0gc2VydmljZUtleTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX05BTUUsIHNlcnZpY2VOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEksIGlucXVpcnlBUEkpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9LRVksIHNlcnZpY2VLZXkpOwotICAgIGlmIChpc011bHRpcGxlTGlua0FjdGlvbigpICYmIGZhdm9yaXRlRXhpc3RzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0ZBVk9SSVRFU19BTFJFQURZX0VYSVNUUyIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhZGRUb0Zhdm9yaXRlcyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19GQVZPUklURVNfU1VDQ0VTU0ZVTCIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX0ZBVk9SSVRFUyIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjg2ZGM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuVURESV9TRVJWSUNFKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IG51bGw7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSBudWxsOwotICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9IG51bGw7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IGxlID0gKChXc2lsRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB3c2lsVWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIGxlLmdldE9iamVjdCgpOwotICAgICAgaW5xdWlyeVVSTCA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VJbnF1aXJ5QVBJKCk7Ci0gICAgICBzZXJ2aWNlS2V5ID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUtleSgpOwotICAgICAgc2VydmljZU5hbWUgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldE5hbWUoKTsKLSAgICAgIGlmIChzZXJ2aWNlTmFtZSA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlTmFtZSA9IHNlcnZpY2VLZXk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyByZXR1cm4gZmFsc2UgaWYgdW5hYmxlIHRvIGZpbmQgb3IgY3JlYXRlIGEgcmVnaXN0cnkgbm9kZS9lbGVtZW50IGluIHRoZQotICAgIC8vIFVEREkgcGVyc3BlY3RpdmUKLSAgICBpZiAoIWNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoaW5xdWlyeVVSTCwgbnVsbCwgaW5xdWlyeVVSTCkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fVURESV9QRVJTUEVDVElWRSIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIHByZXBhcmUgdGhlIGFjdGlvbgotICAgIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAvLyBwb3B1bGF0ZSBwcm9wZXJ0eSB0YWJsZQotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksIHNlcnZpY2VLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSwgc2VydmljZU5hbWUpOwotICAgIC8vIHJ1biB0aGUgYWN0aW9uCi0gICAgaWYgKCFhY3Rpb24ucnVuKCkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9TRVJWSUNFX05PVF9GT1VORCIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX1VERElfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTCIsIHNlcnZpY2VOYW1lKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDhiMjk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJQnVzaW5lc3NUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJU2VydmljZXNUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RXU0RMU2VydmljZXNUb29sOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkVG9GYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24gewotICAgIHByb3RlY3RlZCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0KLSAgICBwdWJsaWMgQWRkVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgICAgIG5vZGVNYW5hZ2VyXyA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvV3NpbENoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzaWwvYWN0aW9ucy9Xc2lsQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQWRkVG9GYXZvcml0ZXNBY3Rpb24gbmV3QWN0aW9uKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgIFN0cmluZyBub2RlSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBub2RlTWFuYWdlci5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlEKSkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0V1NETFNlcnZpY2VzVG9vbCkKLSAgICAgICAgcmV0dXJuIG5ldyBBZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpCi0gICAgICAgIHJldHVybiBuZXcgQWRkU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElCdXNpbmVzc1Rvb2wpCi0gICAgICAgIHJldHVybiBuZXcgQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldyBBZGRXU0lMVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gYWRkVG9GYXZvcml0ZXMoSGFzaHRhYmxlIHRhYmxlLCBTdHJpbmcgcmVsKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgZmF2Tm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBmYXZSb290RWxlbWVudCA9IGZhdk5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgRW51bWVyYXRpb24gZSA9IGZhdlJvb3RFbGVtZW50LmdldEVsZW1lbnRzKHJlbCk7Ci0gICAgICAgIGlmICghZS5oYXNNb3JlRWxlbWVudHMoKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZhdkZvbGRlckVsZW1lbnQgPSAoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIHJldHVybiBmYXZGb2xkZXJFbGVtZW50LmFkZEZhdm9yaXRlKHRhYmxlKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cyhIYXNodGFibGUgdGFibGUsIFN0cmluZyByZWwpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBmYXZOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IGZhdlJvb3RFbGVtZW50ID0gZmF2Tm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBFbnVtZXJhdGlvbiBlID0gZmF2Um9vdEVsZW1lbnQuZ2V0RWxlbWVudHMocmVsKTsKLSAgICAgICAgaWYgKCFlLmhhc01vcmVFbGVtZW50cygpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZmF2Rm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgcmV0dXJuIGZhdkZvbGRlckVsZW1lbnQuZmF2b3JpdGVFeGlzdHModGFibGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAwMTcxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLk9wZW5SZWdpc3RyeUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJTWFpbk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJQnVzaW5lc3NUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJU2VydmljZXNUb29sOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHVibGljIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1dzaWxBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAid3NpbC9hY3Rpb25zL1dzaWxBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBBY3Rpb24gbmV3QWN0aW9uKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBub2RlTWFuYWdlci5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlEKSkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpCi0gICAgICByZXR1cm4gbmV3IEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESUJ1c2luZXNzVG9vbCkKLSAgICAgIHJldHVybiBuZXcgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IE51bGxBY3Rpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBwdWJsaXNoQVBJLCBTdHJpbmcgcmVnaXN0cnlOYW1lKQotICB7Ci0gICAgVmVjdG9yIHJlZ2lzdHJ5Tm9kZXMgPSBnZXRSZWdpc3RyeU5vZGVzQnlJbnF1aXJ5VVJMKGlucXVpcnlBUEkpOwotICAgIGlmIChyZWdpc3RyeU5vZGVzICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQWx3YXlzIGF0dGVtcHQgdG8gdXNlIGFuIGV4aXN0aW5nIHJlZ2lzdHJ5LgotICAgICAgTm9kZSByZWdpc3RyeU5vZGUgPSAoTm9kZSkgcmVnaXN0cnlOb2Rlcy5lbGVtZW50QXQoMCk7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ2lzdHJ5Tm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQocmVnaXN0cnlOb2RlLmdldE5vZGVJZCgpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAvLyBvcGVuIHRoZSByZWdpc3RyeSBpZiBpdCBpcyBub3QgYWxyZWFkeSBvcGVuZWQgaW4gdGhlIFVEREkgcGVyc3BlY3RpdmUKLSAgICBPcGVuUmVnaXN0cnlBY3Rpb24gb3BlblJlZ0FjdGlvbiA9IG5ldyBPcGVuUmVnaXN0cnlBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIC8vIHBvcHVsYXRlIHRoZSBwcm9wZXJ0eSB0YWJsZQotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gb3BlblJlZ0FjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhyZWdpc3RyeU5hbWUpKQotICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FLCByZWdpc3RyeU5hbWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGlucXVpcnlBUEkpKQotICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCwgaW5xdWlyeUFQSSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIHJ1biB0aGUgYWN0aW9uCi0gICAgaWYgKCFvcGVuUmVnQWN0aW9uLnJ1bigpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIFZlY3RvciBnZXRSZWdpc3RyeU5vZGVzQnlJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgVmVjdG9yIHJlZ2lzdHJ5Tm9kZXMgPSBudWxsOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpIChuYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCkpOwotICAgIFZlY3RvciBjaGlsZE5vZGVzID0gdWRkaU1haW5Ob2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkTm9kZXMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgTm9kZSBjaGlsZE5vZGUgPSAoTm9kZSkgY2hpbGROb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgICBpZiAoY2hpbGROb2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgICAgewotICAgICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpIGNoaWxkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBpZiAocmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCkuZXF1YWxzKGlucXVpcnlVUkwpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHJlZ2lzdHJ5Tm9kZXMgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlZ2lzdHJ5Tm9kZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgcmVnaXN0cnlOb2Rlcy5hZGRFbGVtZW50KGNoaWxkTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlZ2lzdHJ5Tm9kZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZkMWM4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxXc2RsU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgQWRkVG9GYXZvcml0ZXNBY3Rpb24KLXsKLSAgcHVibGljIEFkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cygpCi0gIHsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IGdldFdzZGxVcmwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NETF9VUkwsIHdzZGxVUkwpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuV1NETF9TRVJWSUNFKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIFN0cmluZyB3c2RsVVJMID0gZ2V0V3NkbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCwgd3NkbFVSTCk7Ci0gICAgaWYgKGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkgJiYgZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfRkFWT1JJVEVTX0FMUkVBRFlfRVhJU1RTIiwgd3NkbFVSTCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYWRkVG9GYXZvcml0ZXModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUwiLCB3c2RsVVJMKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX0ZBVk9SSVRFUyIsIHdzZGxVUkwpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRXc2RsVXJsKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXc2lsV3NkbFNlcnZpY2VFbGVtZW50IHdzaWxXc2RsU2VydmljZUVsZW1lbnQ7Ci0gICAgT2JqZWN0IG9iaiA9IHNlbGVjdGVkRWxlbWVudC5nZXRBbGxXU0RMU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgIHdzaWxXc2RsU2VydmljZUVsZW1lbnQgPSAoV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCkgb2JqOwotICAgIHJldHVybiB3c2lsV3NkbFNlcnZpY2VFbGVtZW50LmdldFdTRExTZXJ2aWNlVVJMKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFdTSUxUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkV1NJTFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOTE0MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkV1NJTFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIEFkZFdTSUxUb0Zhdm9yaXRlc0FjdGlvbiBleHRlbmRzIEFkZFRvRmF2b3JpdGVzQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRXU0lMVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cygpCi0gIHsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IGdldFdzaWxVcmwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NJTF9VUkwsIHdzaWxVUkwpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIFN0cmluZyB3c2lsVVJMID0gZ2V0V3NpbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0lMX1VSTCwgd3NpbFVSTCk7Ci0gICAgaWYgKGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkgJiYgZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX0ZPTERFUl9OT0RFKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0ZBVk9SSVRFU19BTFJFQURZX0VYSVNUUyIsIHdzaWxVUkwpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGFkZFRvRmF2b3JpdGVzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9GT0xERVJfTk9ERSkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19GQVZPUklURVNfU1VDQ0VTU0ZVTCIsIHdzaWxVUkwpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fRkFWT1JJVEVTIiwgd3NpbFVSTCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFdzaWxVcmwoKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50LmdldFdzaWxVcmwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVhZmEzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQ2xlYXJOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgQ2xlYXJXU0lMQWN0aW9uIGV4dGVuZHMgQ2xlYXJOb2RlQWN0aW9uIHsKLQotICAgIHB1YmxpYyBDbGVhcldTSUxBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGVJZCgpKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlEKQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsTmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsU3RhdHVzQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNjMGRjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLldTRExGaWxlTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFdzZGxTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESVNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0V1NETFNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotCi1wdWJsaWMgY2xhc3MgSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbgotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmXzsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbEZpbGVOYW1lXzsKLSAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0KLSAgcHVibGljIEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbm9kZU1hbmFnZXJfID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLCBpbnQgdG9vbElkLCBpbnQgdmlld0lkLCBpbnQgdmlld1Rvb2xJZCkKLSAgewotICAgIHJldHVybiBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsIHRvb2xJZCwgdmlld0lkLCB2aWV3VG9vbElkLCAid3NpbC9hY3Rpb25zL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB3cml0ZShPdXRwdXRTdHJlYW0gb3MpCi0gIHsKLSAgICBpZiAoZGVmXyAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiB3cml0ZVdTRExEZWZpbml0aW9uKG9zLCBkZWZfKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRGaWxlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gd3NkbEZpbGVOYW1lXzsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBnZXRXU0RMRnJvbVVSTCgpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBMaXN0TWFuYWdlciB3c2lsU2VydmljZXMgPSB3c2lsRWxlbWVudC5nZXRBbGxXU0RMU2VydmljZXMoKTsKLSAgICBMaXN0RWxlbWVudCBsZSA9IHdzaWxTZXJ2aWNlcy5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgIFdzaWxXc2RsU2VydmljZUVsZW1lbnQgc2VydmljZSA9IChXc2lsV3NkbFNlcnZpY2VFbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgIFN0cmluZyB3c2RsVVJMID0gc2VydmljZS5nZXRXU0RMU2VydmljZVVSTCgpOwotICAgIHdzZGxGaWxlTmFtZV8gPSBXU0RMRmlsZU5hbWVIZWxwZXIuZ2V0V1NETEZpbGVOYW1lKHdzZGxVUkwpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZl8gPSAobmV3IFVkZGk0akhlbHBlcigpKS5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gZ2V0V1NETEZyb21VRERJUmVnaXN0cnkoKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgTGlzdE1hbmFnZXIgd3NpbFNlcnZpY2VzID0gd3NpbEVsZW1lbnQuZ2V0QWxsVURESVNlcnZpY2VzKCk7Ci0gICAgTGlzdEVsZW1lbnQgbGUgPSB3c2lsU2VydmljZXMuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHNlcnZpY2UgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgd3NkbEZpbGVOYW1lXyA9IHNlcnZpY2UuZ2V0TmFtZSgpICsgIi53c2RsIjsKLSAgICBVZGRpNGpIZWxwZXIgdWRkaTRqSGVscGVyID0gbmV3IFVkZGk0akhlbHBlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IG51bGw7Ci0gICAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHNlcnZpY2UuZ2V0VURESVNlcnZpY2VJbnF1aXJ5QVBJKCk7Ci0gICAgICBpZiAoaW5xdWlyeVVSTCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm94eSA9IG5ldyBVRERJUHJveHkoKTsKLSAgICAgICAgcHJveHkuc2V0SW5xdWlyeVVSTChpbnF1aXJ5VVJMKTsKLSAgICAgIH0KLSAgICAgIGRlZl8gPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24odWRkaTRqSGVscGVyLmdldFdTREwoc2VydmljZS5nZXRTZXJ2aWNlRGVmaW5pdGlvbigpLCBwcm94eSkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gdGhlIHdzZGwgcmVwcmVzZW50aW5nIHRoaXMgc2VydmljZSBpcyB1bnJlYWNoYWJsZSB0aHJvdWdoIHRoZSBVRERJCi0gICAgICAvLyByZWdpc3RyeS4gV2Ugd2lsbCB0cnkgdXNpbmcgdGhlIGRpc2NvdmVyeSBVUkwgaW5zdGVhZC4KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkZWZfID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHNlcnZpY2UuZ2V0VURESVNlcnZpY2VEaXNjb3ZlcnlVUkwoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlMikKLSAgICAgIHsKLSAgICAgIH0KLSAgICAgIC8vIGlmIHRoZSBkaXNjb3ZlcnlVUkwgYWxzbyBmYWlscywgcmV0dXJuIGFuIGVycm9yCi0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFdTRExTZXJ2aWNlc1Rvb2wpCi0gICAgICByZXR1cm4gZ2V0V1NETEZyb21VUkwoKTsKLSAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkKLSAgICAgIHJldHVybiBnZXRXU0RMRnJvbVVERElSZWdpc3RyeSgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTc1YmNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIHsKLSAgICBwcml2YXRlIFdTSUxEb2N1bWVudCB3c2lsRG9jXzsKLSAgICBwcml2YXRlIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50XzsKLSAgICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLQotICAgIHB1YmxpYyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICAgICAgbm9kZU1hbmFnZXJfID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxpbnQgdG9vbElkLGludCB2aWV3SWQsaW50IHZpZXdUb29sSWQpCi0gICAgewotICAgICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsIndzaWwvYWN0aW9ucy9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCIpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHdyaXRlKE91dHB1dFN0cmVhbSBvcykgewotICAgICAgICBpZiAod3NpbERvY18gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHdyaXRlV1NJTERvY3VtZW50KG9zLCB3c2lsRG9jXyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRGaWxlTmFtZSgpIHsKLSAgICAgICAgU3RyaW5nIHdzaWxGaWxlTmFtZSA9IHdzaWxFbGVtZW50Xy5nZXRXc2lsVXJsKCk7Ci0gICAgICAgIHJldHVybiB3c2lsRmlsZU5hbWUuc3Vic3RyaW5nKHdzaWxGaWxlTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSwgd3NpbEZpbGVOYW1lLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLQotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgICAgIHdzaWxFbGVtZW50XyA9IChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICAgICAgICB3c2lsRG9jXyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRXU0lMRG9jdW1lbnQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL011bHRpcGxlTGlua0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NGM0OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxpbmtBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxBY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNdWx0aXBsZUxpbmtBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBNdWx0aXBsZUxpbmtBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgaXNNdWx0aXBsZUxpbmtBY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKTsKLSAgICBpZiAoaXNNdWx0aXBsZUxpbmtBY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiwgaXNNdWx0aXBsZUxpbmtBY3Rpb24pOwotICAgICAgcmV0dXJuIHByb2Nlc3NNdWx0aXBsZUxpbmtBY3Rpb25QYXJhbWV0ZXJzKHJlcXVlc3QpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKFdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICAgICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgU3RyaW5nIHRvb2xJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgICAgU3RyaW5nIHZpZXdJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgICAgU3RyaW5nIHZpZXdUb29sSURTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICBpZiAobm9kZUlEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSURTdHJpbmcpOwotICAgICAgaWYgKHRvb2xJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCwgdG9vbElEU3RyaW5nKTsKLSAgICAgIGlmICh2aWV3SURTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIHZpZXdJRFN0cmluZyk7Ci0gICAgICBpZiAodmlld1Rvb2xJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQsIHZpZXdUb29sSURTdHJpbmcpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc011bHRpcGxlTGlua0FjdGlvblBhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgU3RyaW5nW10gdmlld0lEcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSUQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCB2aWV3SURzKTsKLSAgICBpZiAodmlld0lEcy5sZW5ndGggPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNNdWx0aXBsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHByb3BlcnR5VGFibGVfLmNvbnRhaW5zS2V5KFdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0Vmlld0lkcygpCi0gIHsKLSAgICBPYmplY3Qgb2JqZWN0ID0gcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIGVsc2UgaWYgKG9iamVjdC5nZXRDbGFzcygpLmlzQXJyYXkoKSkKLSAgICAgIHJldHVybiAoU3RyaW5nW10pb2JqZWN0OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geyhTdHJpbmcpb2JqZWN0fTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gKGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkpID8gZXhlY3V0ZU11bHRpcGxlTGlua0FjdGlvbigpIDogZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVNdWx0aXBsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBTdHJpbmdbXSB2aWV3SWRzID0gZ2V0Vmlld0lkcygpOwotICAgIGlmICh2aWV3SWRzICE9IG51bGwgJiYgdmlld0lkcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld0lkcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIHZpZXdJZHNbaV0pOwotICAgICAgICBpZiAoZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKSkKLSAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCwgdmlld0lkcyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9OdWxsQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9OdWxsQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Y2Y1NjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvTnVsbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTnVsbEFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwdWJsaWMgTnVsbEFjdGlvbigpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvT3BlbldTSUxBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUzZmU0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VFbnRpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTSUxBY3Rpb24gZXh0ZW5kcyBGb3JtQWN0aW9uCi17Ci0KLSAgcHVibGljIE9wZW5XU0lMQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyB3c2lsVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMKTsKLSAgICBTdHJpbmcgaW5zcGVjdGlvblR5cGUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9JTlNQRUNUSU9OX1RZUEUpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMLCB3c2lsVVJMKTsKLSAgICBpZiAoaW5zcGVjdGlvblR5cGUgIT0gbnVsbCAmJiBpbnNwZWN0aW9uVHlwZS5sZW5ndGgoKSA+IDApCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSwgaW5zcGVjdGlvblR5cGUpOwotICAgIGZvcm1Ub29sLnVwZGF0ZVByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZV8pOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIHJldHVybiAoRm9ybVRvb2wpd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9VUkwpOwotICAgIGludCBpbnNwZWN0aW9uVHlwZSA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSkpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbXNnUXVldWUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHJvb3ROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCByb290ID0gcm9vdE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IGdldE9wZW5lZFdTSUwocm9vdCwgd3NpbFVSTCk7Ci0gICAgaWYgKHdzaWxFbGVtZW50ID09IG51bGwpCi0gICAgewotICAgICAgV2ViU2VydmljZXNQYXJzZXJFeHQgcGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KHdzaWxVUkwpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHBhcnNlci5wYXJzZShXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9OT05FKTsKLSAgICAgICAgV2ViU2VydmljZUVudGl0eSB3c0VudGl0eSA9IHBhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NpbFVSTCk7Ci0gICAgICAgIGludCB0eXBlID0gd3NFbnRpdHkuZ2V0VHlwZSgpOwotICAgICAgICBpZiAodHlwZSA9PSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfSFRNTCkKLSAgICAgICAgICByZXR1cm4gb3BlbkhUTUwod3NFbnRpdHkuZ2V0Q2hpbGRyZW4oKSwgaW5zcGVjdGlvblR5cGUpOwotICAgICAgICBlbHNlIGlmICh0eXBlID09IFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0lMKQotICAgICAgICAgIHJldHVybiBvcGVuV1NJTCh3c2lsVVJMLCBwYXJzZXIuZ2V0V1NJTERvY3VtZW50KHdzaWxVUkwpLCBpbnNwZWN0aW9uVHlwZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XU0lMX1VSTCIsIHdzaWxVUkwpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZSh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwcmVzZWxlY3RXU0lMTm9kZShub2RlTWFuYWdlciwgcm9vdE5vZGUuZ2V0Q2hpbGROb2RlKHdzaWxFbGVtZW50KS5nZXROb2RlSWQoKSwgaW5zcGVjdGlvblR5cGUpOwotICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1dTSUxfQUxSRUFEWV9PUEVORUQiLCB3c2lsVVJMKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gb3BlbkhUTUwoTGlzdCB3c2lscywgaW50IGluc3BlY3Rpb25UeXBlKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IC0xOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbXNnUXVldWUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHJvb3ROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCByb290ID0gcm9vdE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gd3NpbHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBXZWJTZXJ2aWNlRW50aXR5IHdzaWxFbnRpdHkgPSAoV2ViU2VydmljZUVudGl0eSlpdC5uZXh0KCk7Ci0gICAgICBTdHJpbmcgd3NpbFVSTCA9IHdzaWxFbnRpdHkuZ2V0VVJJKCk7Ci0gICAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IGdldE9wZW5lZFdTSUwocm9vdCwgd3NpbFVSTCk7Ci0gICAgICBpZiAod3NpbEVsZW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgICAgIHdzaWxEb2MucmVhZCh3c2lsVVJMKTsKLSAgICAgICAgICB3c2lsRWxlbWVudCA9IG5ldyBXc2lsRWxlbWVudCh3c2lsVVJMLCByb290LmdldE1vZGVsKCksIHdzaWxEb2MsIHdzaWxVUkwpOwotICAgICAgICAgIHJvb3QuY29ubmVjdCh3c2lsRWxlbWVudCwgV3NpbE1vZGVsQ29uc3RhbnRzLlJFTF9XU0lMLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICAgIG5vZGVJZCA9IHJvb3ROb2RlLmdldENoaWxkTm9kZSh3c2lsRWxlbWVudCkuZ2V0Tm9kZUlkKCk7Ci0gICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fT1BFTl9XU0lMX1NVQ0NFU1NGVUwiLCB3c2lsVVJMKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICB7Ci0gICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZSh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1dTSUxfQUxSRUFEWV9PUEVORUQiLCB3c2lsVVJMKSk7Ci0gICAgICAgIG5vZGVJZCA9IHJvb3ROb2RlLmdldENoaWxkTm9kZSh3c2lsRWxlbWVudCkuZ2V0Tm9kZUlkKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChub2RlSWQgIT0gLTEpCi0gICAgewotICAgICAgcHJlc2VsZWN0V1NJTE5vZGUobm9kZU1hbmFnZXIsIG5vZGVJZCwgaW5zcGVjdGlvblR5cGUpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBvcGVuV1NJTChTdHJpbmcgd3NpbFVSTCwgV1NJTERvY3VtZW50IHdzaWxEb2MsIGludCBpbnNwZWN0aW9uVHlwZSkKLSAgewotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbXNnUXVldWUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHJvb3ROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCByb290ID0gcm9vdE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IG5ldyBXc2lsRWxlbWVudCh3c2lsVVJMLCByb290LmdldE1vZGVsKCksIHdzaWxEb2MsIHdzaWxVUkwpOwotICAgIHJvb3QuY29ubmVjdCh3c2lsRWxlbWVudCwgV3NpbE1vZGVsQ29uc3RhbnRzLlJFTF9XU0lMLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGludCBub2RlSWQgPSByb290Tm9kZS5nZXRDaGlsZE5vZGUod3NpbEVsZW1lbnQpLmdldE5vZGVJZCgpOwotICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX09QRU5fV1NJTF9TVUNDRVNTRlVMIiwgd3NpbFVSTCkpOwotICAgIHByZXNlbGVjdFdTSUxOb2RlKG5vZGVNYW5hZ2VyLCBub2RlSWQsIGluc3BlY3Rpb25UeXBlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcmVzZWxlY3RXU0lMTm9kZShOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVJZCwgaW50IGluc3BlY3Rpb25UeXBlKQotICB7Ci0gICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlkKTsKLSAgICBzZWxlY3RlZE5vZGUuc2V0Vmlld0lkKEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQpOwotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgdG9vbE1hbmFnZXIuc2V0U2VsZWN0ZWRUb29sSWQoaW5zcGVjdGlvblR5cGUpOwotICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTCwgU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsIGluc3BlY3Rpb25UeXBlLCBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQsIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQsIHRydWUpKTsgICAgICAgIAotICB9Ci0KLSAgcHJpdmF0ZSBXc2lsRWxlbWVudCBnZXRPcGVuZWRXU0lMKFRyZWVFbGVtZW50IHJvb3QsIFN0cmluZyB3c2lsVVJMKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IHJvb3QuZ2V0RWxlbWVudHMoV3NpbE1vZGVsQ29uc3RhbnRzLlJFTF9XU0lMKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAod3NpbEVsZW1lbnQuZ2V0V3NpbFVybCgpLmVxdWFscyh3c2lsVVJMKSkKLSAgICAgICAgcmV0dXJuIHdzaWxFbGVtZW50OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9PcGVuV1NJTExpbmtBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBkYjZlYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9PcGVuV1NJTExpbmtBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsV3NpbExpbmtFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTSUxMaW5rQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBPcGVuV1NJTExpbmtBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1MsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuV1NJTF9MSU5LKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIGlmICghKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBMaXN0RWxlbWVudCBsZSA9ICgoV3NpbEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsV1NJTExpbmtzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICBXc2lsV3NpbExpbmtFbGVtZW50IGxpbmsgPSAoV3NpbFdzaWxMaW5rRWxlbWVudCkgbGUuZ2V0T2JqZWN0KCk7Ci0gICAgU3RyaW5nIHdzaWxVUkwgPSBsaW5rLmdldFdTSUxMaW5rTG9jYXRpb24oKTsKLSAgICAvLyBwb3B1bGF0ZSBhbmQgcnVuIHRoZSBPcGVuV1NJTEFjdGlvbgotICAgIE9wZW5XU0lMQWN0aW9uIGFjdGlvbiA9IG5ldyBPcGVuV1NJTEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICB0YWJsZS5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCwgd3NpbFVSTCk7Ci0gICAgdGFibGUucHV0KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9JTlNQRUNUSU9OX1RZUEUsIFN0cmluZy52YWx1ZU9mKFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9ERVRBSUxTKSk7Ci0gICAgcmV0dXJuIGFjdGlvbi5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjYwZWE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJQnVzaW5lc3NUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJU2VydmljZXNUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldzaWxOb2RlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVmcmVzaEFjdGlvbiBleHRlbmRzIE11bHRpcGxlTGlua0FjdGlvbgotewotICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotCi0gIHB1YmxpYyBSZWZyZXNoQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIG5vZGVNYW5hZ2VyXyA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgQWN0aW9uIG5ld0FjdGlvbihIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIFN0cmluZyB2aWV3SURTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBpbnQgbm9kZUlEOwotICAgIHRyeQotICAgIHsKLSAgICAgIG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQobm9kZUlEU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgewotICAgICAgbm9kZUlEID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlSWQoKTsKLSAgICB9Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShub2RlSUQpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgPT0gbnVsbCB8fCAhKHNlbGVjdGVkTm9kZSBpbnN0YW5jZW9mIFdzaWxOb2RlKSkKLSAgICAgIHJldHVybiBuZXcgTnVsbEFjdGlvbigpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgUmVmcmVzaEFjdGlvbiBhY3Rpb247Ci0gICAgICBpZiAodmlld0lEU3RyaW5nID09IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IG5ldyBSZWZyZXNoV1NJTEFjdGlvbihjb250cm9sbGVyKTsKLSAgICAgIGVsc2UgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJU2VydmljZXNUb29sKQotICAgICAgICBhY3Rpb24gPSBuZXcgUmVmcmVzaFVERElTZXJ2aWNlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElCdXNpbmVzc1Rvb2wpCi0gICAgICAgIGFjdGlvbiA9IG5ldyBSZWZyZXNoVURESUJ1c2luZXNzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IE51bGxBY3Rpb24oKTsKLSAgICAgIGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKG5vZGVJRCkpOwotICAgICAgcmV0dXJuIGFjdGlvbjsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvUmVmcmVzaEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAid3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFVERElCdXNpbmVzc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFVERElCdXNpbmVzc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDhlM2UxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hVRERJQnVzaW5lc3NBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFVERElCdXNpbmVzc0FjdGlvbiBleHRlbmRzIFJlZnJlc2hBY3Rpb24KLXsKLSAgcHVibGljIFJlZnJlc2hVRERJQnVzaW5lc3NBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1MsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuVURESV9CVVNJTkVTUyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVNdWx0aXBsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KQotICAgIHsKLSAgICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICBMaXN0TWFuYWdlciBsbSA9IHdzaWxFbGVtZW50LmdldEFsbFVERElMaW5rcygpOwotICAgICAgVmVjdG9yIHVkZGlCdXNpbmVzc0VsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gdmlld0lEcyA9IGdldFZpZXdJZHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld0lEcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQodmlld0lEc1tpXSk7Ci0gICAgICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IHVkZGlCdXNpbmVzc0VsZW1lbnQgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIGxtLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCkuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIHVkZGlCdXNpbmVzc0VsZW1lbnRzLmFkZCh1ZGRpQnVzaW5lc3NFbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIHdzaWxFbGVtZW50LnJlZnJlc2hTZXJ2aWNlUHJvdmlkZXJzRnJvbVJlZ2lzdHJ5KHVkZGlCdXNpbmVzc0VsZW1lbnRzKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB1ZGRpQnVzaW5lc3NFbGVtZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB1ZGRpQnVzaW5lc3NFbGVtZW50ID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSBpdC5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gdWRkaUJ1c2luZXNzRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA8PSAwKQotICAgICAgICAgIG5hbWUgPSB1ZGRpQnVzaW5lc3NFbGVtZW50LmdldFVERElMaW5rQnVzaW5lc3NLZXkoKTsKLSAgICAgICAgaWYgKHVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0U2VydmljZVByb3ZpZGVyKCkgIT0gbnVsbCkKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUkVGUkVTSF9TVUNDRVNTRlVMIiwgbmFtZSkpOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0JVU0lORVNTX05PVF9GT1VORCIsIG5hbWUpKTsKLSAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoVURESVNlcnZpY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hVRERJU2VydmljZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjM3N2FhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hVRERJU2VydmljZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIFJlZnJlc2hVRERJU2VydmljZUFjdGlvbiBleHRlbmRzIFJlZnJlc2hBY3Rpb24KLXsKLSAgcHVibGljIFJlZnJlc2hVRERJU2VydmljZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5VRERJX1NFUlZJQ0UpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlTXVsdGlwbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIHJldHVybiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkKLSAgICB7Ci0gICAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgICAgTGlzdE1hbmFnZXIgbG0gPSB3c2lsRWxlbWVudC5nZXRBbGxVRERJU2VydmljZXMoKTsKLSAgICAgIFZlY3RvciB1ZGRpU2VydmljZUVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gdmlld0lEcyA9IGdldFZpZXdJZHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld0lEcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQodmlld0lEc1tpXSk7Ci0gICAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgdWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIGxtLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCkuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIHVkZGlTZXJ2aWNlRWxlbWVudHMuYWRkKHVkZGlTZXJ2aWNlRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICB3c2lsRWxlbWVudC5yZWZyZXNoU2VydmljZURlZmluaXRpb25zRnJvbVJlZ2lzdHJ5KHVkZGlTZXJ2aWNlRWxlbWVudHMpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHVkZGlTZXJ2aWNlRWxlbWVudHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB1ZGRpU2VydmljZUVsZW1lbnQgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgaXQubmV4dCgpOwotICAgICAgICBTdHJpbmcgbmFtZSA9IHVkZGlTZXJ2aWNlRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA8PSAwKQotICAgICAgICAgIG5hbWUgPSB1ZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VLZXkoKTsKLSAgICAgICAgaWYgKHVkZGlTZXJ2aWNlRWxlbWVudC5nZXRTZXJ2aWNlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1JFRlJFU0hfU1VDQ0VTU0ZVTCIsIG5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9TRVJWSUNFX05PVF9GT1VORCIsIG5hbWUpKTsKLSAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoV1NJTEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFdTSUxBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkxMWJkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoV1NJTEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoV1NJTEFjdGlvbiBleHRlbmRzIFJlZnJlc2hBY3Rpb24KLXsKLSAgcHVibGljIFJlZnJlc2hXU0lMQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3NpbFVSTCA9ICgoV3NpbEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudCkuZ2V0V3NpbFVybCgpOwotICAgICAgaWYgKCgoV3NpbEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudCkucmVmcmVzaCgpKQotICAgICAgewotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUkVGUkVTSF9TVUNDRVNTRlVMIiwgd3NpbFVSTCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XU0lMX05PVF9GT1VORCIsIHdzaWxVUkwpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZXNpemVXU0lMRnJhbWVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZXNpemVXU0lMRnJhbWVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMGRiZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5SZXNpemVGcmFtZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxGcmFtZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFJlc2l6ZVdTSUxGcmFtZXNBY3Rpb24gZXh0ZW5kcyBSZXNpemVGcmFtZXNBY3Rpb24KLXsKLSAgcHVibGljIFJlc2l6ZVdTSUxGcmFtZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCxwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUixhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGZyYW1lc2V0IHNpemVzLgotICAgIFN0cmluZyBmcmFtZU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuRlJBTUVfTkFNRSk7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIAotICAgIC8vIFNldCB0aGUgbmV3IGZyYW1lc2V0IHNpemVzLgotICAgIGlmIChmcmFtZU5hbWUuZXF1YWxzKFdzaWxGcmFtZU5hbWVzLldTSUxfTkFWSUdBVE9SX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMod3NpbFBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjEwMCUsMCUiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhXc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICBpZiAoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh3c2lsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Mod3NpbFBlcnNwZWN0aXZlLmdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjEwMCUsMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZU5hbWUuZXF1YWxzKFdzaWxGcmFtZU5hbWVzLldTSUxfU1RBVFVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHdzaWxQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyh3c2lsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heGltaXplLgotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygiMCUsMTAwJSIpOwotICAgICAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTE5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg4NTg4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0V1NJTE5vZGVBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlQWN0aW9uCi17Ci0gICAgcHVibGljIFNlbGVjdFdTSUxOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBib29sZWFuIGtlZXBIaXN0b3J5KQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvU2VsZWN0V1NJTE5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICAgICAgaWYgKGtlZXBIaXN0b3J5KSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgiPTEiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICAgIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBnZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCB0cnVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxOYXZpZ2F0b3JDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbFByb3BlcnRpZXNDb250YWluZXIiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gICAgewotICAgICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxUb29sQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMVG9vbEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDc4MjZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxUb29sQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdFdTSUxUb29sQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZVRvb2xBY3Rpb24KLXsKLSAgcHVibGljIFNlbGVjdFdTSUxUb29sQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCArIDFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoIC0gMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQsIGJvb2xlYW4ga2VlcEhpc3RvcnkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9TZWxlY3RXU0lMVG9vbEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGlmICh2aWV3SUQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgIHsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICB9Ci0gICAgaWYgKGtlZXBIaXN0b3J5KQotICAgIHsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCI9MSIpOwotICAgIH0KLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICBib29sZWFuIGtlZXBIaXN0b3J5ID0gZmFsc2U7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBnZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IGdldFNlbGVjdGVkVG9vbCgpOwotICAgIGludCB0b29sVHlwZSA9IGdldFNlbGVjdGVkVG9vbCgpLmdldFRvb2xUeXBlKCk7Ci0gICAgaWYgKHRvb2xUeXBlID09IFRvb2xUeXBlcy5GT1JNKQotICAgICAga2VlcEhpc3RvcnkgPSB0cnVlOwotICAgIGVsc2UgaWYgKHRvb2xUeXBlID09IFRvb2xUeXBlcy5WSUVXKQotICAgIHsKLSAgICAgIGludCB2aWV3SUQgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCk7Ci0gICAgICBpZiAodmlld0lEID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgICAga2VlcEhpc3RvcnkgPSB0cnVlOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoKChWaWV3VG9vbCkgc2VsZWN0ZWRUb29sKS5nZXRUb29sTWFuYWdlcih2aWV3SUQpLmdldFRvb2woc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSkuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKQotICAgICAgICAgIGtlZXBIaXN0b3J5ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGtlZXBIaXN0b3J5KQotICAgIHsKLSAgICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWRUb29sLmdldFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIHRydWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsTmF2aWdhdG9yQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gIndzaWwvd3NpbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAid3NpbFByb3BlcnRpZXNDb250YWluZXIiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIndzaWxQcm9wZXJ0aWVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJiMzA5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2hvd1BlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLQotcHVibGljIGZpbmFsIGNsYXNzIFN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb24gZXh0ZW5kcyBTaG93UGVyc3BlY3RpdmVBY3Rpb24KLXsKLSAgcHVibGljIFN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyAhPSBudWxsICYmIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQscGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgCi0gICAgLy8gU2F2ZSB0aGUgZnJhbWVzZXQgc2l6ZXMgaWZmIG5vIGZyYW1lIGlzIG1heGltaXplZC4KLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpICYmICFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIAotICAgIGlmICghYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5zdGFydHNXaXRoKCIxMDAlIikgJiYgIWFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgCi0gICAgcmV0dXJuIHN1cGVyLnJ1bigpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRGb3JtQWN0aW9uTGluayhpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZCxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgZm9ybUxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgZm9ybUxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRSkuYXBwZW5kKCc9JykuYXBwZW5kKHRhcmdldFBlcnNwZWN0aXZlSWQpOwotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgZm9ybUxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpLmFwcGVuZCgiPTEiKTsKLSAgICByZXR1cm4gZm9ybUxpbmsudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjlkZTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb24gZXh0ZW5kcyBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbgotewotICBwdWJsaWMgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkKLSAgewotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gKEZvcm1Ub29sKXdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gIH0KLQotICBwdWJsaWMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIG5ld0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbigpCi0gIHsKLSAgICBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgdGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkpOwotICAgIHJldHVybiBhY3Rpb247Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgfQotICAgIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9ICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVhZDQ4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLk9wZW5XU0RMQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsV3NkbFNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL2FjdGlvbnMvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuV1NETF9TRVJWSUNFKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCB3c2lsV3NkbFNlcnZpY2VFbGVtZW50ID0gKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpIHdzaWxFbGVtZW50LmdldEFsbFdTRExTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCkuZ2V0T2JqZWN0KCk7Ci0gICAgU3RyaW5nIHdzZGxVcmwgPSB3c2lsV3NkbFNlcnZpY2VFbGVtZW50LmdldFdTRExTZXJ2aWNlVVJMKCk7Ci0gICAgT3BlbldTRExBY3Rpb24gb3BlbldTRExBY3Rpb24gPSBuZXcgT3BlbldTRExBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gb3BlbldTRExBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCwgd3NkbFVybCk7Ci0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBvcGVuV1NETEFjdGlvbi5ydW4oKTsKLSAgICBpZiAoYWN0aW9uUmVzdWx0KQotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTCIsIHdzZGxVcmwpKTsKLSAgICBlbHNlCi0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkUiLCB3c2RsVXJsKSk7Ci0gICAgcmV0dXJuIGFjdGlvblJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWVhZjk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFdzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24gZXh0ZW5kcyBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiB7Ci0gICAgcHVibGljIFdzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkgewotICAgICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIHJldHVybiAoRm9ybVRvb2wpd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIG5ld0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbigpIHsKLSAgICAgICAgSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSB0YWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0KLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotCi0gICAgICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICAgICAgdGFibGUucHV0KEFjdGlvbklucHV0cy5UT09MSUQsIFN0cmluZy52YWx1ZU9mKHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCkpKTsKLSAgICAgICAgdGFibGUucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIFN0cmluZy52YWx1ZU9mKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSkpOwotCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgICB9ICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYTFhNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFdzZGxTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESVNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0V1NETFNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gewotICAgIHB1YmxpYyBXc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIG5ld0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICByZXR1cm4gKEZvcm1Ub29sKXdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgICBpbnQgdmlld0lEID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotCi0gICAgICAgIExpc3RFbGVtZW50IGxlID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIHVybCA9IG51bGw7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0V1NETFNlcnZpY2VzVG9vbCkgewotICAgICAgICAgICAgbGUgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsV1NETFNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgICAgIHVybCA9ICgoV3NpbFdzZGxTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKSkuZ2V0V1NETFNlcnZpY2VVUkwoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkgewotICAgICAgICAgICAgbGUgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsVURESVNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgICAgIHVybCA9ICgoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKSkuZ2V0V3NkbFVybCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGxhdW5jaFdpemFyZCh1cmwpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gICAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxUb2dnbGVOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsVG9nZ2xlTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzRkOTIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxUb2dnbGVOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuVG9nZ2xlTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsVG9nZ2xlTm9kZUFjdGlvbiBleHRlbmRzIFRvZ2dsZU5vZGVBY3Rpb24gewotICAgIHB1YmxpYyBXc2lsVG9nZ2xlTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCwgYm9vbGVhbiBvcGVuKSB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1dzaWxUb2dnbGVOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJZCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5PUEVOKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgaWYgKG9wZW4pCi0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuT1BFTl9OT0RFKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLkNMT1NFX05PREUpOwotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKSB7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gdG9nZ2xlZE5vZGVfLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgIGludCBub2RlSWQgPSB0b2dnbGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2wuZ2V0VG9vbElkKCk7Ci0gICAgICAgIGludCB2aWV3SWQgPSB0b2dnbGVkTm9kZV8uZ2V0Vmlld0lkKCk7Ci0gICAgICAgIGludCB2aWV3VG9vbElkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsIHRvb2xJZCwgdmlld0lkLCB2aWV3VG9vbElkLCB0cnVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLCB0cnVlKTsKLSAgICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsQWN0aW9uSW5wdXRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxBY3Rpb25JbnB1dHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY1OTkxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxBY3Rpb25JbnB1dHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdzaWxBY3Rpb25JbnB1dHMKLXsKLSAgICAvLyBvcGVuIFdTSUwgZm9ybQotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfVVJMID0gIndzaWxVUkwiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfSU5TUEVDVElPTl9UWVBFID0gIndzaWxJbnNwZWN0aW9uVHlwZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NJTF9ERVRBSUxTID0gMDsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU0RMX1NFUlZJQ0VTID0gMTsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBVRERJX1NFUlZJQ0VTID0gMjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBVRERJX0JVU0lORVNTRVMgPSAzOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdTSUxfTElOS1MgPSA0OwotCi0gICAgLy8gbWFzcyBhY3Rpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBNVUxUSVBMRV9MSU5LX0FDVElPTiA9ICJtdWx0aXBsZUxpbmtBY3Rpb24iOwotCi0gICAgLy8gcmVzaXplIFdTSUwgZnJhbWVzIGFjdGlvbgotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCA9ICJmcmFtZXNldENvbHNQZXJzcGVjdGl2ZUNvbnRlbnQiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIgPSAiZnJhbWVzZXRSb3dzQWN0aW9uc0NvbnRhaW5lciI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxGcmFtZU5hbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxGcmFtZU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3MzVhMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsRnJhbWVOYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV3NpbEZyYW1lTmFtZXMKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9OQVZJR0FUT1JfQ09OVEFJTkVSID0gIndzaWxfbmF2aWdhdG9yX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfTkFWSUdBVE9SX1RPT0xCQVIgPSAid3NpbF9uYXZpZ2F0b3JfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfTkFWSUdBVE9SX0NPTlRFTlQgPSAid3NpbF9uYXZpZ2F0b3JfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfQUNUSU9OU19DT05UQUlORVIgPSAid3NpbF9hY3Rpb25zX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfUFJPUEVSVElFU19DT05UQUlORVIgPSAid3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfUFJPUEVSVElFU19UT09MQkFSID0gIndzaWxfcHJvcGVydGllc190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9QUk9QRVJUSUVTX0NPTlRFTlQgPSAid3NpbF9wcm9wZXJ0aWVzX2NvbnRlbnQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX1NUQVRVU19DT05UQUlORVIgPSAid3NpbF9zdGF0dXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9TVEFUVVNfVE9PTEJBUiA9ICJ3c2lsX3N0YXR1c190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9TVEFUVVNfQ09OVEVOVCA9ICJ3c2lsX3N0YXR1c19jb250ZW50IjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbE1vZGVsQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxNb2RlbENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWE4ZmE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbE1vZGVsQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsTW9kZWxDb25zdGFudHMKLXsKLSAgICAvLyBSZWxhdGlvbgotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0lMID0gInJlbFdTSUwiOwotCi0gICAgLy8gTGlzdCBNYW5hZ2VycyBmb3IgV3NpbEVsZW1lbnQKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUyA9ICJ3c2RsU2VydmljZXMiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTID0gInVkZGlTZXJ2aWNlcyI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1VERElfTElOS1MgPSAidWRkaUxpbmtzIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfV1NJTF9MSU5LUyA9ICJ3c2lsTGlua3MiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsQ29tbW9uRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsQ29tbW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGUwMWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbENvbW1vbkVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi1wdWJsaWMgY2xhc3MgV3NpbENvbW1vbkVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgYmFzZVdzaWxVUkw7Ci0gIHByaXZhdGUgU3RyaW5nIHJlbGF0aXZlVVJJQmFzZTsKLQotICBwdWJsaWMgV3NpbENvbW1vbkVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEJhc2VXc2lsVVJMKCkKLSAgewotICAgIHJldHVybiBiYXNlV3NpbFVSTDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QmFzZVdzaWxVUkwoU3RyaW5nIGJhc2VXc2lsVVJMKQotICB7Ci0gICAgdGhpcy5iYXNlV3NpbFVSTCA9IGJhc2VXc2lsVVJMOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIGNoYXIgRldEX1NMQVNIID0gJy8nOwotICBwcml2YXRlIGZpbmFsIGNoYXIgQldEX1NMQVNIID0gJ1xcJzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIFBST1RPQ09MX0lORElDQVRPUiA9ICc6JzsKLSAgCi0gIHB1YmxpYyBTdHJpbmcgbWFrZUFic29sdXRlKFN0cmluZyB1cmkpCi0gIHsKLSAgICBpZiAoYmFzZVdzaWxVUkwgIT0gbnVsbCAmJiB1cmkgIT0gbnVsbCAmJiB1cmkuaW5kZXhPZihQUk9UT0NPTF9JTkRJQ0FUT1IpID09IC0xKQotICAgIHsKLSAgICAgIGlmIChyZWxhdGl2ZVVSSUJhc2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVsYXRpdmVVUklCYXNlID0gYmFzZVdzaWxVUkwucmVwbGFjZShCV0RfU0xBU0gsIEZXRF9TTEFTSCk7Ci0gICAgICAgIGludCBpbmRleCA9IHJlbGF0aXZlVVJJQmFzZS5sYXN0SW5kZXhPZihGV0RfU0xBU0gpOwotICAgICAgICByZWxhdGl2ZVVSSUJhc2UgPSBiYXNlV3NpbFVSTC5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKTsKLSAgICAgIH0KLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIocmVsYXRpdmVVUklCYXNlKTsKLSAgICAgIHNiLmFwcGVuZCh1cmkpOwotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiB1cmk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc0NzYxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuQWJzdHJhY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5JbnNwZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotCi0vKioKLSAqIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIGEgV1NJTCBkb2N1bWVudAotICovCi1wdWJsaWMgY2xhc3MgV3NpbEVsZW1lbnQgZXh0ZW5kcyBUcmVlRWxlbWVudAotewotICBwcml2YXRlIFdTSUxEb2N1bWVudCB3c2lsRG9jXzsKLSAgcHJpdmF0ZSBTdHJpbmcgdGhpc1dzaWxVcmxfOwotICAvKiogKioqKioqKioqKioqKioqKioqIE5hbWVzcGFjZSAqKioqKioqKioqICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfV1NETCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVURESV9WMSA9ICJ1cm46dWRkaS1vcmc6YXBpIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VRERJX1YyID0gInVybjp1ZGRpLW9yZzphcGlfdjIiOwotICAvL3ByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVURESV9CSU5ESU5HID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi91ZGRpLyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfV1NJTF9JTlNQRUNUSU9OID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi8iOwotICAvKiogKioqKioqKioqKioqKioqKioqIFJlbHMgKioqKioqKioqKioqKioqKiAqLwotICAvLyBSZWxhdGlvbiBmb3IgYSBXU0lMIGRvdWNtZW50IGFuZCBpdHMgbGluayBub2RlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfV1NJTF9MSU5LID0gIndzaWwgbGluayBub2RlcyI7Ci0KLSAgcHVibGljIFdzaWxFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgV1NJTERvY3VtZW50IHdzaWxEb2N1bWVudCwgU3RyaW5nIHdzaWxVUkwpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgd3NpbERvY18gPSB3c2lsRG9jdW1lbnQ7Ci0gICAgdGhpc1dzaWxVcmxfID0gd3NpbFVSTDsKLSAgICBMaXN0TWFuYWdlciB3c2RsU2VydmljZXNfID0gbnVsbDsKLSAgICBMaXN0TWFuYWdlciB1ZGRpU2VydmljZXNfID0gbnVsbDsKLSAgICBMaXN0TWFuYWdlciB3c2lsTGlua3NfID0gbnVsbDsKLSAgICBMaXN0TWFuYWdlciB1ZGRpTGlua3NfID0gbnVsbDsKLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUywgd3NkbFNlcnZpY2VzXyk7Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMsIHVkZGlTZXJ2aWNlc18pOwotICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTLCB3c2lsTGlua3NfKTsKLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NJTF9MSU5LUywgdWRkaUxpbmtzXyk7Ci0gIH0KLQotICAvKgotICAgKiBSZWZyZXNoIHRoZSBXU0lMIGRvY3VtZW50Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiByZWZyZXNoKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdTSUxEb2N1bWVudCBuZXdXU0lMRG9jID0gV1NJTERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBuZXdXU0lMRG9jLnJlYWQoZ2V0V3NpbFVybCgpKTsKLSAgICAgIHdzaWxEb2NfID0gbmV3V1NJTERvYzsKLSAgICAgIExpc3RNYW5hZ2VyIHdzZGxTZXJ2aWNlc18gPSBudWxsOwotICAgICAgTGlzdE1hbmFnZXIgdWRkaVNlcnZpY2VzXyA9IG51bGw7Ci0gICAgICBMaXN0TWFuYWdlciB3c2lsTGlua3NfID0gbnVsbDsKLSAgICAgIExpc3RNYW5hZ2VyIHVkZGlMaW5rc18gPSBudWxsOwotICAgICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMsIHdzZGxTZXJ2aWNlc18pOwotICAgICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMsIHVkZGlTZXJ2aWNlc18pOwotICAgICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1MsIHdzaWxMaW5rc18pOwotICAgICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1MsIHVkZGlMaW5rc18pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogUmV0dXJucyB0aGUgV1NJTCdzIFVSTAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXc2lsVXJsKCkKLSAgewotICAgIHJldHVybiB0aGlzV3NpbFVybF87Ci0gIH0KLQotICAvKgotICAgKiBSZXR1cm5zIHRoZSBXU0lMIGRvY3VtZW50Ci0gICAqLwotICBwdWJsaWMgV1NJTERvY3VtZW50IGdldFdTSUxEb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gd3NpbERvY187Ci0gIH0KLQotICAvKgotICAgKiBSZXR1cm5zIGFsbCBhYnN0cmFjdCBsYW5ndWFnZXMKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0V1NJTEFic3RyYWN0TGFuZ3MoKQotICB7Ci0gICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSB3c2lsRG9jXy5nZXRJbnNwZWN0aW9uKCkuZ2V0QWJzdHJhY3RzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnN0cmFjdHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdi5hZGQoYWJzdHJhY3RzW2ldLmdldExhbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiB2OwotICB9Ci0KLSAgLyoKLSAgICogUmV0dXJucyBhbGwgYWJzdHJhY3RzCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFdTSUxBYnN0cmFjdHMoKQotICB7Ci0gICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSB3c2lsRG9jXy5nZXRJbnNwZWN0aW9uKCkuZ2V0QWJzdHJhY3RzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnN0cmFjdHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdi5hZGQoYWJzdHJhY3RzW2ldLmdldFRleHQoKSk7Ci0gICAgfQotICAgIHJldHVybiB2OwotICB9Ci0KLSAgcHVibGljIExpc3RNYW5hZ2VyIGdldEFsbFdTRExTZXJ2aWNlcygpCi0gIHsKLSAgICBMaXN0TWFuYWdlciB3c2RsU2VydmljZXNfID0gKExpc3RNYW5hZ2VyKSBnZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUyk7Ci0gICAgaWYgKHdzZGxTZXJ2aWNlc18gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbml0QWxsV1NETFNlcnZpY2VzKCk7Ci0gICAgICB3c2RsU2VydmljZXNfID0gKExpc3RNYW5hZ2VyKSBnZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUyk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsU2VydmljZXNfOwotICB9Ci0KLSAgcHVibGljIExpc3RNYW5hZ2VyIGdldEFsbFVERElTZXJ2aWNlcygpCi0gIHsKLSAgICBMaXN0TWFuYWdlciB1ZGRpU2VydmljZXNfID0gKExpc3RNYW5hZ2VyKSBnZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUyk7Ci0gICAgaWYgKHVkZGlTZXJ2aWNlc18gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbml0QWxsVURESVNlcnZpY2VzKCk7Ci0gICAgICB1ZGRpU2VydmljZXNfID0gKExpc3RNYW5hZ2VyKSBnZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUyk7Ci0gICAgfQotICAgIHJldHVybiB1ZGRpU2VydmljZXNfOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluaXRBbGxXU0RMU2VydmljZXMoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgd3NkbFNlcnZpY2VzXyA9IG5ldyBMaXN0TWFuYWdlcigpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2NfLmdldEluc3BlY3Rpb24oKTsKLSAgICBTZXJ2aWNlW10gc2VydmljZUxpc3QgPSBpbnNwZWN0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlTGlzdC5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAvLyBza2lwIGFueSBzZXJ2aWNlIHdpdGhvdXQgYSB3c2RsIG5hbWVzcGFjZQotICAgICAgLy8gYW5kIGludmFsaWQgZGVzY3JpcHRpb25zCi0gICAgICBEZXNjcmlwdGlvbltdIGRlc2NMaXN0ID0gc2VydmljZUxpc3RbaV0uZ2V0RGVzY3JpcHRpb25zKCk7Ci0gICAgICBpZiAoZGVzY0xpc3QubGVuZ3RoIDwgMSkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZGVzY0xpc3RbMF0uZ2V0UmVmZXJlbmNlZE5hbWVzcGFjZSgpOwotICAgICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGVsc2UgaWYgKG5hbWVzcGFjZS5lcXVhbHMoTkFNRVNQQUNFX1dTREwpKQotICAgICAgewotICAgICAgICBXc2lsV3NkbFNlcnZpY2VFbGVtZW50IHdzZGxTZXJ2aWNlRWxlbWVudCA9IG5ldyBXc2lsV3NkbFNlcnZpY2VFbGVtZW50KG5hbWVzcGFjZSwgZ2V0TW9kZWwoKSwgc2VydmljZUxpc3RbaV0pOwotICAgICAgICB3c2RsU2VydmljZUVsZW1lbnQuc2V0QmFzZVdzaWxVUkwoZ2V0V3NpbFVybCgpKTsKLSAgICAgICAgaWYgKHdzZGxTZXJ2aWNlRWxlbWVudC52YWxpZGF0ZVdTRExTZXJ2aWNlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsU2VydmljZUVsZW1lbnQuc2V0TmFtZSh3c2RsU2VydmljZUVsZW1lbnQuZ2V0V1NETFNlcnZpY2VVUkwoKSk7Ci0gICAgICAgICAgd3NkbFNlcnZpY2VzXy5hZGQobmV3IExpc3RFbGVtZW50KHdzZGxTZXJ2aWNlRWxlbWVudCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTLCB3c2RsU2VydmljZXNfKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbml0QWxsVURESVNlcnZpY2VzKCkKLSAgewotICAgIExpc3RNYW5hZ2VyIHVkZGlTZXJ2aWNlc18gPSBuZXcgTGlzdE1hbmFnZXIoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jXy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VMaXN0ID0gaW5zcGVjdGlvbi5nZXRTZXJ2aWNlcygpOwotICAgIFZlY3RvciB1ZGRpU2VydmljZUVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZUxpc3QubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gc2tpcCBhbnkgc2VydmljZSB3aXRob3V0IGEgd3NkbCBuYW1lc3BhY2UKLSAgICAgIC8vIGFuZCBpbnZhbGlkIGRlc2NyaXB0aW9ucwotICAgICAgRGVzY3JpcHRpb25bXSBkZXNjTGlzdCA9IHNlcnZpY2VMaXN0W2ldLmdldERlc2NyaXB0aW9ucygpOwotICAgICAgaWYgKGRlc2NMaXN0Lmxlbmd0aCA8IDEpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGRlc2NMaXN0WzBdLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKTsKLSAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBlbHNlIGlmICgobmFtZXNwYWNlLmVxdWFscyhOQU1FU1BBQ0VfVURESV9WMSkgfHwgbmFtZXNwYWNlLmVxdWFscyhOQU1FU1BBQ0VfVURESV9WMikpKQotICAgICAgewotICAgICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHVkZGlTZXJ2aWNlRWxlbWVudCA9IG5ldyBXc2lsVWRkaVNlcnZpY2VFbGVtZW50KG5hbWVzcGFjZSwgZ2V0TW9kZWwoKSwgc2VydmljZUxpc3RbaV0pOwotICAgICAgICB1ZGRpU2VydmljZUVsZW1lbnQuc2V0QmFzZVdzaWxVUkwoZ2V0V3NpbFVybCgpKTsKLSAgICAgICAgaWYgKHVkZGlTZXJ2aWNlRWxlbWVudC52YWxpZGF0ZVVERElTZXJ2aWNlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpU2VydmljZUVsZW1lbnQuc2V0TmFtZSh1ZGRpU2VydmljZUVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICB1ZGRpU2VydmljZUVsZW1lbnRzLmFkZCh1ZGRpU2VydmljZUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJlZnJlc2hTZXJ2aWNlRGVmaW5pdGlvbnNGcm9tUmVnaXN0cnkodWRkaVNlcnZpY2VFbGVtZW50cyk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHVkZGlTZXJ2aWNlRWxlbWVudHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICB1ZGRpU2VydmljZXNfLmFkZChuZXcgTGlzdEVsZW1lbnQoaXQubmV4dCgpKSk7Ci0gICAgfQotICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTLCB1ZGRpU2VydmljZXNfKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2hTZXJ2aWNlRGVmaW5pdGlvbnNGcm9tUmVnaXN0cnkoVmVjdG9yIHVkZGlTZXJ2aWNlRWxlbWVudHMpCi0gIHsKLSAgICBIYXNoTWFwIGlucXVpcnlBUElUb1NlcnZpY2VzID0gbmV3IEhhc2hNYXAoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHVkZGlTZXJ2aWNlRWxlbWVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB1ZGRpU2VydmljZUVsZW1lbnQgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgdWRkaVNlcnZpY2VFbGVtZW50cy5nZXQoaSk7Ci0gICAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUlucXVpcnlBUEkoKTsKLSAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeUFQSSkpCi0gICAgICB7Ci0gICAgICAgIFZlY3RvciBzZXJ2aWNlcyA9IChWZWN0b3IpIGlucXVpcnlBUElUb1NlcnZpY2VzLmdldChpbnF1aXJ5QVBJKTsKLSAgICAgICAgaWYgKHNlcnZpY2VzID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBpbnF1aXJ5QVBJVG9TZXJ2aWNlcy5wdXQoaW5xdWlyeUFQSSwgc2VydmljZXMpOwotICAgICAgICB9Ci0gICAgICAgIHNlcnZpY2VzLmFkZCh1ZGRpU2VydmljZUVsZW1lbnQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB1ZGRpU2VydmljZUVsZW1lbnQuc2V0U2VydmljZURlZmluaXRpb24obnVsbCk7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBpbnF1aXJ5QVBJVG9TZXJ2aWNlcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZykgaXQubmV4dCgpOwotICAgICAgVmVjdG9yIHNlcnZpY2VzID0gKFZlY3RvcikgaW5xdWlyeUFQSVRvU2VydmljZXMuZ2V0KGlucXVpcnlBUEkpOwotICAgICAgVURESVByb3h5IHByb3h5OwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotICAgICAgICBwcm9wcy5wdXQoQWN0aW9uSW5wdXRzLlRSQU5TUE9SVF9DTEFTU19OQU1FLCBBY3Rpb25JbnB1dHMuVFJBU1BPUlRfQ0xBU1MpOwotICAgICAgICBwcm94eSA9IG5ldyBVRERJUHJveHkocHJvcHMpOwotICAgICAgICBwcm94eS5zZXRJbnF1aXJ5VVJMKG5ldyBVUkwoaW5xdWlyeUFQSSkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNlcnZpY2VzLnNpemUoKTsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB1ZGRpU2VydmljZUVsZW1lbnQgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgc2VydmljZXMuZ2V0KGopOwotICAgICAgICAgIHVkZGlTZXJ2aWNlRWxlbWVudC5zZXRTZXJ2aWNlRGVmaW5pdGlvbihudWxsKTsKLSAgICAgICAgfQotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIFZlY3RvciBzZXJ2aWNlS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2VydmljZXMuc2l6ZSgpOyBqKyspCi0gICAgICB7Ci0gICAgICAgIHNlcnZpY2VLZXlzLmFkZCgoKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIHNlcnZpY2VzLmdldChqKSkuZ2V0VURESVNlcnZpY2VLZXkoKSk7Ci0gICAgICB9Ci0gICAgICBWZWN0b3IgYnVzaW5lc3NTZXJ2aWNlczsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBidXNpbmVzc1NlcnZpY2VzID0gcHJveHkuZ2V0X3NlcnZpY2VEZXRhaWwoc2VydmljZUtleXMpLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKLSAgICAgIHsKLSAgICAgICAgYnVzaW5lc3NTZXJ2aWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgaWYgKHNlcnZpY2VLZXlzLnNpemUoKSA+IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHNlcnZpY2VLZXlzLnNpemUoKTsgaysrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBidXNpbmVzc1NlcnZpY2VzLmFkZCgoQnVzaW5lc3NTZXJ2aWNlKSBwcm94eS5nZXRfc2VydmljZURldGFpbCgoU3RyaW5nKSBzZXJ2aWNlS2V5cy5nZXQoaykpLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpLmdldCgwKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYnVzaW5lc3NTZXJ2aWNlcy5hZGQobnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBidXNpbmVzc1NlcnZpY2VzLmFkZChudWxsKTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgc2VydmljZXMuc2l6ZSgpOyBrKyspCi0gICAgICB7Ci0gICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpIGJ1c2luZXNzU2VydmljZXMuZ2V0KGspOwotICAgICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHVkZGlTZXJ2aWNlRWxlbWVudCA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBzZXJ2aWNlcy5nZXQoayk7Ci0gICAgICAgIHVkZGlTZXJ2aWNlRWxlbWVudC5zZXRTZXJ2aWNlRGVmaW5pdGlvbihicyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIExpc3RNYW5hZ2VyIGdldEFsbFdTSUxMaW5rcygpCi0gIHsKLSAgICBMaXN0TWFuYWdlciB3c2lsTGlua3NfID0gKExpc3RNYW5hZ2VyKSBnZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NJTF9MSU5LUyk7Ci0gICAgaWYgKHdzaWxMaW5rc18gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbml0QWxsV1NJTExpbmtzKCk7Ci0gICAgICB3c2lsTGlua3NfID0gKExpc3RNYW5hZ2VyKSBnZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NJTF9MSU5LUyk7Ci0gICAgfQotICAgIHJldHVybiB3c2lsTGlua3NfOwotICB9Ci0KLSAgcHVibGljIExpc3RNYW5hZ2VyIGdldEFsbFVERElMaW5rcygpCi0gIHsKLSAgICBMaXN0TWFuYWdlciB1ZGRpTGlua3NfID0gKExpc3RNYW5hZ2VyKSBnZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUyk7Ci0gICAgaWYgKHVkZGlMaW5rc18gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbml0QWxsVURESUxpbmtzKCk7Ci0gICAgICB1ZGRpTGlua3NfID0gKExpc3RNYW5hZ2VyKSBnZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUyk7Ci0gICAgfQotICAgIHJldHVybiB1ZGRpTGlua3NfOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluaXRBbGxVRERJTGlua3MoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgdWRkaUxpbmtzXyA9IG5ldyBMaXN0TWFuYWdlcigpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2NfLmdldEluc3BlY3Rpb24oKTsKLSAgICBMaW5rW10gbGlua0xpc3QgPSBpbnNwZWN0aW9uLmdldExpbmtzKCk7Ci0gICAgVmVjdG9yIHVkZGlCdXNpbmVzc0VsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua0xpc3QubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gcHJvY2VzcyBhbnkgbGlua3Mgd2l0aCBVRERJIG5hbWVzcGFjZQotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGxpbmtMaXN0W2ldLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKTsKLSAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBlbHNlIGlmICgobmFtZXNwYWNlLmVxdWFscyhOQU1FU1BBQ0VfVURESV9WMSkgfHwgbmFtZXNwYWNlLmVxdWFscyhOQU1FU1BBQ0VfVURESV9WMikpKQotICAgICAgewotICAgICAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB1ZGRpQnVzaW5lc3NFbGVtZW50ID0gbmV3IFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KG5hbWVzcGFjZSwgZ2V0TW9kZWwoKSwgbGlua0xpc3RbaV0pOwotICAgICAgICB1ZGRpQnVzaW5lc3NFbGVtZW50LnNldEJhc2VXc2lsVVJMKGdldFdzaWxVcmwoKSk7Ci0gICAgICAgIGlmICh1ZGRpQnVzaW5lc3NFbGVtZW50LnZhbGlkYXRlVURESUxpbmsoKSkKLSAgICAgICAgewotICAgICAgICAgIHVkZGlCdXNpbmVzc0VsZW1lbnQuc2V0TmFtZSh1ZGRpQnVzaW5lc3NFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgdWRkaUJ1c2luZXNzRWxlbWVudHMuYWRkKHVkZGlCdXNpbmVzc0VsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJlZnJlc2hTZXJ2aWNlUHJvdmlkZXJzRnJvbVJlZ2lzdHJ5KHVkZGlCdXNpbmVzc0VsZW1lbnRzKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gdWRkaUJ1c2luZXNzRWxlbWVudHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICB1ZGRpTGlua3NfLmFkZChuZXcgTGlzdEVsZW1lbnQoaXQubmV4dCgpKSk7Ci0gICAgfQotICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTLCB1ZGRpTGlua3NfKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2hTZXJ2aWNlUHJvdmlkZXJzRnJvbVJlZ2lzdHJ5KFZlY3RvciB1ZGRpQnVzaW5lc3NFbGVtZW50cykKLSAgewotICAgIEhhc2hNYXAgaW5xdWlyeUFQSVRvQnVzaW5lc3NlcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1ZGRpQnVzaW5lc3NFbGVtZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB1ZGRpQnVzaW5lc3NFbGVtZW50ID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSB1ZGRpQnVzaW5lc3NFbGVtZW50cy5nZXQoaSk7Ci0gICAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtJbnF1aXJ5QVBJKCk7Ci0gICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKGlucXVpcnlBUEkpKQotICAgICAgewotICAgICAgICBWZWN0b3IgYnVzaW5lc3NlcyA9IChWZWN0b3IpIGlucXVpcnlBUElUb0J1c2luZXNzZXMuZ2V0KGlucXVpcnlBUEkpOwotICAgICAgICBpZiAoYnVzaW5lc3NlcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgYnVzaW5lc3NlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBpbnF1aXJ5QVBJVG9CdXNpbmVzc2VzLnB1dChpbnF1aXJ5QVBJLCBidXNpbmVzc2VzKTsKLSAgICAgICAgfQotICAgICAgICBidXNpbmVzc2VzLmFkZCh1ZGRpQnVzaW5lc3NFbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdWRkaUJ1c2luZXNzRWxlbWVudC5zZXRTZXJ2aWNlUHJvdmlkZXIobnVsbCk7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBpbnF1aXJ5QVBJVG9CdXNpbmVzc2VzLmtleVNldCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0gICAgICBWZWN0b3IgYnVzaW5lc3NlcyA9IChWZWN0b3IpIGlucXVpcnlBUElUb0J1c2luZXNzZXMuZ2V0KGlucXVpcnlBUEkpOwotICAgICAgVURESVByb3h5IHByb3h5OwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotICAgICAgICBwcm9wcy5wdXQoQWN0aW9uSW5wdXRzLlRSQU5TUE9SVF9DTEFTU19OQU1FLCBBY3Rpb25JbnB1dHMuVFJBU1BPUlRfQ0xBU1MpOwotICAgICAgICBwcm94eSA9IG5ldyBVRERJUHJveHkocHJvcHMpOwotICAgICAgICBwcm94eS5zZXRJbnF1aXJ5VVJMKG5ldyBVUkwoaW5xdWlyeUFQSSkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGJ1c2luZXNzZXMuc2l6ZSgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB1ZGRpQnVzaW5lc3NFbGVtZW50ID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSBidXNpbmVzc2VzLmdldChqKTsKLSAgICAgICAgICB1ZGRpQnVzaW5lc3NFbGVtZW50LnNldFNlcnZpY2VQcm92aWRlcihudWxsKTsKLSAgICAgICAgfQotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIFZlY3RvciBidXNpbmVzc0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGJ1c2luZXNzZXMuc2l6ZSgpOyBqKyspCi0gICAgICB7Ci0gICAgICAgIGJ1c2luZXNzS2V5cy5hZGQoKChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgYnVzaW5lc3Nlcy5nZXQoaikpLmdldFVERElMaW5rQnVzaW5lc3NLZXkoKSk7Ci0gICAgICB9Ci0gICAgICBWZWN0b3IgYnVzaW5lc3NFbnRpdGllczsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBidXNpbmVzc0VudGl0aWVzID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKGJ1c2luZXNzS2V5cykuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCi0gICAgICB7Ci0gICAgICAgIGJ1c2luZXNzRW50aXRpZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGlmIChidXNpbmVzc0tleXMuc2l6ZSgpID4gMSkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgYnVzaW5lc3NLZXlzLnNpemUoKTsgaysrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBidXNpbmVzc0VudGl0aWVzLmFkZCgoQnVzaW5lc3NFbnRpdHkpIHByb3h5LmdldF9idXNpbmVzc0RldGFpbCgoU3RyaW5nKSBidXNpbmVzc0tleXMuZ2V0KGspKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYnVzaW5lc3NFbnRpdGllcy5hZGQobnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBidXNpbmVzc0VudGl0aWVzLmFkZChudWxsKTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgYnVzaW5lc3Nlcy5zaXplKCk7IGsrKykKLSAgICAgIHsKLSAgICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpIGJ1c2luZXNzRW50aXRpZXMuZ2V0KGspOwotICAgICAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB1ZGRpQnVzaW5lc3NFbGVtZW50ID0gKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSBidXNpbmVzc2VzLmdldChrKTsKLSAgICAgICAgdWRkaUJ1c2luZXNzRWxlbWVudC5zZXRTZXJ2aWNlUHJvdmlkZXIoYmUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbml0QWxsV1NJTExpbmtzKCkKLSAgewotICAgIExpc3RNYW5hZ2VyIHdzaWxMaW5rc18gPSBuZXcgTGlzdE1hbmFnZXIoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jXy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgTGlua1tdIGxpbmtMaXN0ID0gaW5zcGVjdGlvbi5nZXRMaW5rcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua0xpc3QubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gcHJvY2VzcyBhbnkgbGlua3Mgd2l0aCBVRERJIG5hbWVzcGFjZQotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGxpbmtMaXN0W2ldLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKTsKLSAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBlbHNlIGlmIChuYW1lc3BhY2UuZXF1YWxzKE5BTUVTUEFDRV9XU0lMX0lOU1BFQ1RJT04pKQotICAgICAgewotICAgICAgICBXc2lsV3NpbExpbmtFbGVtZW50IHdzaWxMaW5rRWxlbWVudCA9IG5ldyBXc2lsV3NpbExpbmtFbGVtZW50KG5hbWVzcGFjZSwgZ2V0TW9kZWwoKSwgbGlua0xpc3RbaV0pOwotICAgICAgICB3c2lsTGlua0VsZW1lbnQuc2V0QmFzZVdzaWxVUkwoZ2V0V3NpbFVybCgpKTsKLSAgICAgICAgaWYgKHdzaWxMaW5rRWxlbWVudC52YWxpZGF0ZVdTSUxMaW5rKCkpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2lsTGlua0VsZW1lbnQuc2V0TmFtZSh3c2lsTGlua0VsZW1lbnQuZ2V0V1NJTExpbmtMb2NhdGlvbigpKTsKLSAgICAgICAgICB3c2lsTGlua3NfLmFkZChuZXcgTGlzdEVsZW1lbnQod3NpbExpbmtFbGVtZW50KSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1MsIHdzaWxMaW5rc18pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxMaW5rRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsTGlua0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZiNTk0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxMaW5rRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkFic3RyYWN0OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIExpbmsKLSovCi1wdWJsaWMgY2xhc3MgV3NpbExpbmtFbGVtZW50IGV4dGVuZHMgV3NpbENvbW1vbkVsZW1lbnQKLXsKLSAgcHJvdGVjdGVkIExpbmsgbGlua187Ci0KLSAgcHVibGljIFdzaWxMaW5rRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIExpbmsgbGluaykKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICBsaW5rXyA9IGxpbms7Ci0gIH0KLQotICBwdWJsaWMgVmVjdG9yIGdldExpbmtBYnN0cmFjdExhbmdzKCkKLSAgewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gbGlua18uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnN0cmFjdHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdi5hZGQoYWJzdHJhY3RzW2ldLmdldExhbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiB2OwotICB9Ci0KLSAgcHVibGljIFZlY3RvciBnZXRMaW5rQWJzdHJhY3RzKCkKLSAgewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gbGlua18uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnN0cmFjdHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdi5hZGQoYWJzdHJhY3RzW2ldLmdldFRleHQoKSk7Ci0gICAgfQotICAgIHJldHVybiB2OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxTZXJ2aWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg5MzVkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxTZXJ2aWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkFic3RyYWN0OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NJTCBTZXJ2aWNlCi0qLwotcHVibGljIGNsYXNzIFdzaWxTZXJ2aWNlRWxlbWVudCBleHRlbmRzIFdzaWxDb21tb25FbGVtZW50Ci17Ci0gICAgcHJvdGVjdGVkIFNlcnZpY2Ugc2VydmljZV87Ci0KLSAgICBwdWJsaWMgV3NpbFNlcnZpY2VFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICAgICAgc2VydmljZV8gPSBzZXJ2aWNlOwotICAgIH0KLQotICAgIHB1YmxpYyBWZWN0b3IgZ2V0U2VydmljZU5hbWVMYW5ncygpIHsKLSAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIFNlcnZpY2VOYW1lW10gc2VydmljZU5hbWVzID0gc2VydmljZV8uZ2V0U2VydmljZU5hbWVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZU5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2LmFkZChzZXJ2aWNlTmFtZXNbaV0uZ2V0TGFuZygpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmVjdG9yIGdldFNlcnZpY2VOYW1lcygpIHsKLSAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIFNlcnZpY2VOYW1lW10gc2VydmljZU5hbWVzID0gc2VydmljZV8uZ2V0U2VydmljZU5hbWVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZU5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2LmFkZChzZXJ2aWNlTmFtZXNbaV0uZ2V0VGV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmVjdG9yIGdldFNlcnZpY2VBYnN0cmFjdExhbmdzKCkgewotICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBzZXJ2aWNlXy5nZXRBYnN0cmFjdHMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnN0cmFjdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHYuYWRkKGFic3RyYWN0c1tpXS5nZXRMYW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIHB1YmxpYyBWZWN0b3IgZ2V0U2VydmljZUFic3RyYWN0cygpIHsKLSAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gc2VydmljZV8uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2LmFkZChhYnN0cmFjdHNbaV0uZ2V0VGV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZTUwMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsVWRkaUJ1c2luZXNzRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi5FeHRlbnNpb25FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5CdXNpbmVzc0Rlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTDsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFVEREkgc2VydmljZSBpbiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgZXh0ZW5kcyBXc2lsTGlua0VsZW1lbnQKLXsKLSAgICBwcml2YXRlIEJ1c2luZXNzRW50aXR5IGJ1c0VudGl0eV87Ci0KLSAgICBwdWJsaWMgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBMaW5rIGxpbmspIHsKLSAgICAgICAgc3VwZXIobmFtZSwgbW9kZWwsIGxpbmspOwotICAgICAgICBidXNFbnRpdHlfID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvdmlkZXIoQnVzaW5lc3NFbnRpdHkgYmUpIHsKLSAgICAgIGJ1c0VudGl0eV8gPSBiZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQnVzaW5lc3NFbnRpdHkgZ2V0U2VydmljZVByb3ZpZGVyKCkgewotICAgICAgICByZXR1cm4gYnVzRW50aXR5XzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiAoYnVzRW50aXR5XyAgPT0gbnVsbCkgPyBudWxsIDogYnVzRW50aXR5Xy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIHJldHVybiAoYnVzRW50aXR5XyA9PSBudWxsKSA/IG51bGwgOiBidXNFbnRpdHlfLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VURESUxpbmtJbnF1aXJ5QVBJKCkgewotICAgICAgICBCdXNpbmVzc0Rlc2NyaXB0aW9uIGJkID0gZ2V0VmFsaWRVRERJQnVzaW5lc3NEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKGJkID09IG51bGwpID8gbnVsbCA6IGJkLmdldExvY2F0aW9uKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVRERJTGlua0J1c2luZXNzS2V5KCkgewotICAgICAgICBCdXNpbmVzc0Rlc2NyaXB0aW9uIGJkID0gZ2V0VmFsaWRVRERJQnVzaW5lc3NEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKGJkID09IG51bGwpID8gbnVsbCA6IGJkLmdldEJ1c2luZXNzS2V5KCkuZ2V0VGV4dCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VURESUxpbmtEaXNjb3ZlcnlVUkwoKSB7Ci0gICAgICAgIEJ1c2luZXNzRGVzY3JpcHRpb24gYmQgPSBnZXRWYWxpZFVERElCdXNpbmVzc0Rlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGlmIChiZCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRGlzY292ZXJ5VVJMIGRpc2NvdmVyeVVSTCA9IGJkLmdldERpc2NvdmVyeVVSTCgpOwotICAgICAgICAgICAgcmV0dXJuIChkaXNjb3ZlcnlVUkwgPT0gbnVsbCkgPyBudWxsIDogZGlzY292ZXJ5VVJMLmdldFRleHQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlVURESUxpbmsoKSB7Ci0gICAgICAgIEJ1c2luZXNzRGVzY3JpcHRpb24gYmQgPSBnZXRWYWxpZFVERElCdXNpbmVzc0Rlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoYmQgIT0gbnVsbCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBCdXNpbmVzc0Rlc2NyaXB0aW9uIGdldFZhbGlkVURESUJ1c2luZXNzRGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIEV4dGVuc2lvbkVsZW1lbnQgZXh0RWxlbWVudCA9IGxpbmtfLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICAgICAgLy8gVGhlIGV4dGVuc2lvbiBlbGVtZW50IG9mIGEgVURESSBsaW5rCi0gICAgICAgIC8vIG11c3QgYmUgYSBCdXNpbmVzc0Rlc2NyaXB0aW9uIGVsZW1lbnQKLSAgICAgICAgaWYgKCEoZXh0RWxlbWVudCBpbnN0YW5jZW9mIEJ1c2luZXNzRGVzY3JpcHRpb24pKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIC8vIEEgdmFsaWQgQnVzaW5lc3NEZXNjcmlwdGlvbiBtdXN0IGhhdmUgYW4gaW5xdWlyeSBBUEkKLSAgICAgICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoKEJ1c2luZXNzRGVzY3JpcHRpb24pZXh0RWxlbWVudCkuZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeUFQSSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgLy8gQSB2YWxpZCBCdXNpbmVzc0Rlc2NyaXB0aW9uIG11c3QgaGF2ZSBhIGJ1c2luZXNzIGtleQotICAgICAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSAoKEJ1c2luZXNzRGVzY3JpcHRpb24pZXh0RWxlbWVudCkuZ2V0QnVzaW5lc3NLZXkoKS5nZXRUZXh0KCk7Ci0gICAgICAgIGlmIChidXNpbmVzc0tleSA9PSBudWxsIHx8IGJ1c2luZXNzS2V5Lmxlbmd0aCgpIDw9IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIChCdXNpbmVzc0Rlc2NyaXB0aW9uKWV4dEVsZW1lbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxVZGRpU2VydmljZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDE4ZGM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLkV4dGVuc2lvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkw7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBVRERJIHNlcnZpY2UgaW4gYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBXc2lsU2VydmljZUVsZW1lbnQKLXsKLSAgICBwcml2YXRlIEJ1c2luZXNzU2VydmljZSBidXNTZXJ2aWNlXzsKLQotICAgIHB1YmxpYyBXc2lsVWRkaVNlcnZpY2VFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBzZXJ2aWNlKTsKLSAgICAgICAgYnVzU2VydmljZV8gPSBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VEZWZpbml0aW9uKEJ1c2luZXNzU2VydmljZSBidXNTZXJ2aWNlKSB7Ci0gICAgICAgIGJ1c1NlcnZpY2VfID0gYnVzU2VydmljZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQnVzaW5lc3NTZXJ2aWNlIGdldFNlcnZpY2VEZWZpbml0aW9uKCkgewotICAgICAgICByZXR1cm4gYnVzU2VydmljZV87Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gKGJ1c1NlcnZpY2VfID09IG51bGwpID8gbnVsbCA6IGJ1c1NlcnZpY2VfLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIChidXNTZXJ2aWNlXyA9PSBudWxsKSA/IG51bGwgOiBidXNTZXJ2aWNlXy5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVERElTZXJ2aWNlSW5xdWlyeUFQSSgpIHsKLSAgICAgICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gZ2V0VmFsaWRVRERJU2VydmljZURlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoc2QgPT0gbnVsbCkgPyBudWxsIDogc2QuZ2V0TG9jYXRpb24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVERElTZXJ2aWNlS2V5KCkgewotICAgICAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSBnZXRWYWxpZFVERElTZXJ2aWNlRGVzY3JpcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIChzZCA9PSBudWxsKSA/IG51bGwgOiBzZC5nZXRTZXJ2aWNlS2V5KCkuZ2V0VGV4dCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VURESVNlcnZpY2VEaXNjb3ZlcnlVUkwoKSB7Ci0gICAgICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IGdldFZhbGlkVURESVNlcnZpY2VEZXNjcmlwdGlvbigpOwotICAgICAgICBpZiAoc2QgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSBzZC5nZXREaXNjb3ZlcnlVUkwoKTsKLSAgICAgICAgICAgIHJldHVybiAoZGlzY292ZXJ5VVJMID09IG51bGwpID8gbnVsbCA6IGRpc2NvdmVyeVVSTC5nZXRUZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIFNlcnZpY2VEZXNjcmlwdGlvbiBnZXRWYWxpZFVERElTZXJ2aWNlRGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIERlc2NyaXB0aW9uW10gZGVzY0xpc3QgPSBzZXJ2aWNlXy5nZXREZXNjcmlwdGlvbnMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjTGlzdC5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgRXh0ZW5zaW9uRWxlbWVudCBleHRFbGVtZW50ID0gZGVzY0xpc3RbaV0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgICAgICAgICAgLy8gVGhlIGV4dGVuc2lvbiBlbGVtZW50IG9mIGEgVURESSBzZXJ2aWNlIGRlc2NyaXB0aW9uCi0gICAgICAgICAgICAvLyBtdXN0IGJlIGEgU2VydmljZURlc2NyaXB0aW9uIGVsZW1lbnQKLSAgICAgICAgICAgIGlmICghKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlRGVzY3JpcHRpb24pKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gQSB2YWxpZCBTZXJ2aWNlRGVzY3JpcHRpb24gbXVzdCBoYXZlIGFuIGlucXVpcnkgQVBJCi0gICAgICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTCgoKFNlcnZpY2VEZXNjcmlwdGlvbilleHRFbGVtZW50KS5nZXRMb2NhdGlvbigpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIEEgdmFsaWQgU2VydmljZURlc2NyaXB0aW9uIG11c3QgaGF2ZSBhIHNlcnZpY2Uga2V5Ci0gICAgICAgICAgICBTdHJpbmcgc2VydmljZUtleSA9ICgoU2VydmljZURlc2NyaXB0aW9uKWV4dEVsZW1lbnQpLmdldFNlcnZpY2VLZXkoKS5nZXRUZXh0KCk7Ci0gICAgICAgICAgICBpZiAoc2VydmljZUtleSA9PSBudWxsIHx8IHNlcnZpY2VLZXkubGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJldHVybiAoU2VydmljZURlc2NyaXB0aW9uKWV4dEVsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVVRERJU2VydmljZSgpIHsKLSAgICAgICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gZ2V0VmFsaWRVRERJU2VydmljZURlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoc2QgIT0gbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRXc2RsVXJsKCkgewotICAgICAgICByZXR1cm4gKG5ldyBVZGRpNGpIZWxwZXIoKSkuZ2V0V1NETChnZXRTZXJ2aWNlRGVmaW5pdGlvbigpLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFdzZGxTZXJ2aWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsV3NkbFNlcnZpY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYmFkMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsV3NkbFNlcnZpY2VFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi5FeHRlbnNpb25FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24ud3NkbC5JbXBsZW1lbnRlZEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLlJlZmVyZW5jZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuUmVmZXJlbmNlZFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTREwgc2VydmljZSBpbiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCBleHRlbmRzIFdzaWxTZXJ2aWNlRWxlbWVudAotewotICAgIHB1YmxpYyBXc2lsV3NkbFNlcnZpY2VFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBzZXJ2aWNlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFdTRExTZXJ2aWNlVVJMKCkgewotICAgICAgICBEZXNjcmlwdGlvbiBkZXNjID0gZ2V0VmFsaWRXU0RMRGVzY3JpcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIChkZXNjID09IG51bGwpID8gbnVsbCA6IG1ha2VBYnNvbHV0ZShkZXNjLmdldExvY2F0aW9uKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBWZWN0b3IgZ2V0V1NETEJpbmRpbmcoKSB7Ci0gICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBEZXNjcmlwdGlvbltdIGRlc2NMaXN0ID0gc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY0xpc3QubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIEV4dGVuc2lvbkVsZW1lbnQgZXh0RWxlbWVudCA9IGRlc2NMaXN0W2ldLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChleHRFbGVtZW50ICE9IG51bGwgJiYgZXh0RWxlbWVudCBpbnN0YW5jZW9mIFJlZmVyZW5jZSkgewotICAgICAgICAgICAgICAgIFJlZmVyZW5jZWRTZXJ2aWNlIHJlZlNlcnZpY2UgPSAoKFJlZmVyZW5jZSlleHRFbGVtZW50KS5nZXRSZWZlcmVuY2VkU2VydmljZSgpOwotICAgICAgICAgICAgICAgIGlmIChyZWZTZXJ2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdi5hZGQocmVmU2VydmljZS5nZXRSZWZlcmVuY2VkU2VydmljZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEltcGxlbWVudGVkQmluZGluZ1tdIGltcGxCaW5kaW5nTGlzdCA9ICgoUmVmZXJlbmNlKWV4dEVsZW1lbnQpLmdldEltcGxlbWVudGVkQmluZGluZ3MoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGltcGxCaW5kaW5nTGlzdC5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgICAgICAgICB2LmFkZChpbXBsQmluZGluZ0xpc3Rbal0uZ2V0QmluZGluZ05hbWUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIERlc2NyaXB0aW9uIGdldFZhbGlkV1NETERlc2NyaXB0aW9uKCkgewotICAgICAgICBEZXNjcmlwdGlvbltdIGRlc2NMaXN0ID0gc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY0xpc3QubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIC8vIHNraXAgdGhpcyBkZXNjcmlwdGlvbiBpZiB0aGUgbG9jYXRpb2luIGF0dHJpYnV0ZSBpcyBhIG1hbGZvcm1lZCBVUkwKLSAgICAgICAgICAgIFN0cmluZyBsb2NhdGlvbiA9IGRlc2NMaXN0W2ldLmdldExvY2F0aW9uKCk7Ci0gICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCB8fCBsb2NhdGlvbi5sZW5ndGgoKSA8PSAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gc2tpcCB0aGlzIGRlc2NyaXB0aW9uIGlmIHRoZSBleHRlbnNpb24gZWxlbWVudCBpbmRpY2F0ZXMKLSAgICAgICAgICAgIC8vIHRoYXQgdGhlIGRlc2NyaXB0aW9uJ3MgbG9jYXRpb24gY29udGFpbnMgb25seSB0aGUgd3NkbCBiaW5kaW5nCi0gICAgICAgICAgICBFeHRlbnNpb25FbGVtZW50IGV4dEVsZW1lbnQgPSBkZXNjTGlzdFtpXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoZXh0RWxlbWVudCAhPSBudWxsICYmIGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBSZWZlcmVuY2UpIHsKLSAgICAgICAgICAgICAgICBCb29sZWFuIGVuZHBvaW50UHJlc2VudCA9ICgoUmVmZXJlbmNlKWV4dEVsZW1lbnQpLmdldEVuZHBvaW50UHJlc2VudCgpOwotICAgICAgICAgICAgICAgIGlmIChlbmRwb2ludFByZXNlbnQgIT0gbnVsbCAmJiBlbmRwb2ludFByZXNlbnQuYm9vbGVhblZhbHVlKCkgPT0gZmFsc2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gYSB2YWxpZCBkZXNjcmlwdGlvbiBpcyBmb3VuZAotICAgICAgICAgICAgcmV0dXJuIGRlc2NMaXN0W2ldOwotICAgICAgICB9Ci0gICAgICAgIC8vIG5vIHZhbGlkIGRlc2NyaXB0aW9uIGlzIGZvdW5kIGZvciB0aGlzIHNlcnZpY2UKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVXU0RMU2VydmljZSgpIHsKLSAgICAgICAgRGVzY3JpcHRpb24gZGVzYyA9IGdldFZhbGlkV1NETERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoZGVzYyAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gZ2V0V1NETFNlcnZpY2VVUkwoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxXc2lsTGlua0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFdzaWxMaW5rRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTRhNTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFdzaWxMaW5rRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIGxpbmsgaW4gYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIFdzaWxXc2lsTGlua0VsZW1lbnQgZXh0ZW5kcyBXc2lsTGlua0VsZW1lbnQKLXsKLSAgcHVibGljIFdzaWxXc2lsTGlua0VsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBMaW5rIGxpbmspCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCwgbGluayk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdTSUxMaW5rTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIG1ha2VBYnNvbHV0ZShsaW5rXy5nZXRMb2NhdGlvbigpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlV1NJTExpbmsoKQotICB7Ci0gICAgcmV0dXJuIChsaW5rXy5nZXRMb2NhdGlvbigpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0V1NJTExpbmtMb2NhdGlvbigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRCdXNpbmVzc1RvRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2I1MzI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRCdXNpbmVzc1RvRmF2b3JpdGVzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZjJkNTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkU2VydmljZVRvRmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk5ZTNlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkU2VydmljZVRvRmF2b3JpdGVzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkU2VydmljZVRvRmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBBZGRTZXJ2aWNlVG9GYXZvcml0ZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2Zhdm9yaXRlc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOThiZWIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDBhNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBBZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkV1NJTFRvRmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFdTSUxUb0Zhdm9yaXRlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE4MGFkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkV1NJTFRvRmF2b3JpdGVzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkV1NJTFRvRmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBBZGRXU0lMVG9GYXZvcml0ZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2Zhdm9yaXRlc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxUKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9DbGVhcldTSUxUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQ2xlYXJXU0lMVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzU4MGZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9DbGVhcldTSUxUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkNsZWFyV1NJTEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgQ2xlYXJXU0lMVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBDbGVhcldTSUxUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgcmV0dXJuIENsZWFyV1NJTEFjdGlvbi5nZXRBY3Rpb25MaW5rKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZUlkKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZjM4NjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCB7Ci0gICAgcHVibGljIEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhY2EyZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1Ub29sIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCB7Ci0gICAgcHVibGljIEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgcmV0dXJuIEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVJZCgpLCB0b29sSWRfLCBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQsIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RVRERJQnVzaW5lc3NUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFVERElCdXNpbmVzc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlZTU2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFVERElCdXNpbmVzc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlZpZXdUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBMaXN0VURESUJ1c2luZXNzVG9vbCBleHRlbmRzIFZpZXdUb29sIHsKLSAgICBwdWJsaWMgTGlzdFVERElCdXNpbmVzc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgbmV3IFdzaWxTZXREZWZhdWx0Vmlld1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJBTFRfQkFDS19UT19UT1AiKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkVG9vbHMoVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgbmV3IFVkZGlCdXNpbmVzc0RldGFpbHNUb29sKHZpZXdUb29sTWFuYWdlciwgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJBTFRfVURESV9MSU5LX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiQUxUX0FERF9CVVNJTkVTU19UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICAgICAgICBuZXcgQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIkFMVF9BRERfVURESV9CVVNJTkVTU19UT19GQVZPUklURVMiKSk7Ci0gICAgICAgIG5ldyBSZWZyZXNoVURESUJ1c2luZXNzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiQUxUX1JFRlJFU0hfVURESV9CVVNJTkVTUyIpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gUHJveHlMb2FkUGFnZUFjdGlvbi5nZXRBY3Rpb25MaW5rKCJ3c2lsL3ZpZXdzL1VkZGlCdXNpbmVzc1ZpZXcuanNwIik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RVRERJU2VydmljZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFVERElTZXJ2aWNlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJiMDY5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFVERElTZXJ2aWNlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlZpZXdUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBMaXN0VURESVNlcnZpY2VzVG9vbCBleHRlbmRzIFZpZXdUb29sIHsKLSAgICBwdWJsaWMgTGlzdFVERElTZXJ2aWNlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9lbmFibGVkLmdpZiIsICJ3c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFNldERlZmF1bHRWaWV3VG9vbChUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsIGludCBpbmRleCkgewotICAgICAgICBuZXcgV3NpbFNldERlZmF1bHRWaWV3VG9vbCh2aWV3VG9vbE1hbmFnZXIsICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIkFMVF9CQUNLX1RPX1RPUCIpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRUb29scyhUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsIGludCBpbmRleCkgewotICAgICAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpOwotICAgICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IFVkZGlTZXJ2aWNlRGV0YWlsc1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfU0VSVklDRV9ERVRBSUxTIikpOwotICAgICAgICBuZXcgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wodmlld1Rvb2xNYW5hZ2VyLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKSk7Ci0gICAgICAgIG5ldyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCh2aWV3VG9vbE1hbmFnZXIsIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTRExfSU1QT1JUX1RPX0ZTIikpOwotICAgICAgICBuZXcgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKHZpZXdUb29sTWFuYWdlciwgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTEFVTkNIX1dFQl9TRVJWSUNFX1dJWkFSRCIpKTsKLSAgICAgICAgbmV3IEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZVRvb2wodmlld1Rvb2xNYW5hZ2VyLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9TRVJWSUNFX1RPX1VERElfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgICAgIG5ldyBBZGRTZXJ2aWNlVG9GYXZvcml0ZXNUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfU0VSVklDRV9UT19GQVZPUklURVMiKSk7Ci0gICAgICAgIG5ldyBSZWZyZXNoVURESVNlcnZpY2VUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9SRUZSRVNIX1VERElfU0VSVklDRSIpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gUHJveHlMb2FkUGFnZUFjdGlvbi5nZXRBY3Rpb25MaW5rKCJ3c2lsL3ZpZXdzL1VkZGlTZXJ2aWNlc1ZpZXcuanNwIik7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFdTRExTZXJ2aWNlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0V1NETFNlcnZpY2VzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmI5ZWQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0V1NETFNlcnZpY2VzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlZpZXdUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBMaXN0V1NETFNlcnZpY2VzVG9vbCBleHRlbmRzIFZpZXdUb29sIHsKLSAgICBwdWJsaWMgTGlzdFdTRExTZXJ2aWNlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9lbmFibGVkLmdpZiIsICJ3c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFNldERlZmF1bHRWaWV3VG9vbChUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsIGludCBpbmRleCkgewotICAgICAgICBuZXcgV3NpbFNldERlZmF1bHRWaWV3VG9vbCh2aWV3VG9vbE1hbmFnZXIsICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIkFMVF9CQUNLX1RPX1RPUCIpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRUb29scyhUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsIGludCBpbmRleCkgewotICAgICAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpOwotICAgICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IFdzZGxTZXJ2aWNlRGV0YWlsc1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfU0VSVklDRV9ERVRBSUxTIikpOwotICAgICAgICBuZXcgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wodmlld1Rvb2xNYW5hZ2VyLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKSk7Ci0gICAgICAgIG5ldyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCh2aWV3VG9vbE1hbmFnZXIsIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTRExfSU1QT1JUX1RPX0ZTIikpOwotICAgICAgICBuZXcgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKHZpZXdUb29sTWFuYWdlciwgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTEFVTkNIX1dFQl9TRVJWSUNFX1dJWkFSRCIpKTsKLSAgICAgICAgbmV3IFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wodmlld1Rvb2xNYW5hZ2VyLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgICAgIG5ldyBBZGRXU0RMU2VydmljZVRvRmF2b3JpdGVzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1dTRExfU0VSVklDRV9UT19GQVZPUklURVMiKSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3ZpZXdzL1dzZGxTZXJ2aWNlc1ZpZXcuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFdTSUxMaW5rc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0V1NJTExpbmtzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDViODJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0V1NJTExpbmtzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlZpZXdUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBMaXN0V1NJTExpbmtzVG9vbCBleHRlbmRzIFZpZXdUb29sIHsKLSAgICBwdWJsaWMgTGlzdFdTSUxMaW5rc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2lsL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIG5ldyBXc2lsU2V0RGVmYXVsdFZpZXdUb29sKHZpZXdUb29sTWFuYWdlciwgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiQUxUX0JBQ0tfVE9fVE9QIikpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFRvb2xzKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIG5ldyBXc2lsTGlua0RldGFpbHNUb29sKHZpZXdUb29sTWFuYWdlciwgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJBTFRfV1NJTF9MSU5LX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBPcGVuV1NJTExpbmtUb29sKHZpZXdUb29sTWFuYWdlciwgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJBTFRfT1BFTl9XU0lMX0xJTksiKSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3ZpZXdzL1dzaWxMaW5rc1ZpZXcuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvT3BlbldTSUxMaW5rVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL09wZW5XU0lMTGlua1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU1MWNlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvT3BlbldTSUxMaW5rVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5PcGVuV1NJTExpbmtBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIE9wZW5XU0lMTGlua1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgT3BlbldTSUxMaW5rVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL29wZW5fd3NpbF9lbmFibGVkLmdpZiIsICJ3c2lsL2ltYWdlcy9vcGVuX3dzaWxfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIE9wZW5XU0lMTGlua0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9PcGVuV1NJTFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9PcGVuV1NJTFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5MWE0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvT3BlbldTSUxUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIE9wZW5XU0lMVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgT3BlbldTSUxUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvb3Blbl93c2lsX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL29wZW5fd3NpbF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzaWwvZm9ybXMvT3BlbldTSUxGb3JtLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFVERElCdXNpbmVzc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoVURESUJ1c2luZXNzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmY3M2IwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoVURESUJ1c2luZXNzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5SZWZyZXNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoVURESUJ1c2luZXNzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBSZWZyZXNoVURESUJ1c2luZXNzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBSZWZyZXNoQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hVRERJU2VydmljZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoVURESVNlcnZpY2VUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YzgyYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hVRERJU2VydmljZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFVERElTZXJ2aWNlVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBSZWZyZXNoVURESVNlcnZpY2VUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFJlZnJlc2hBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFdTSUxUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFdTSUxUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZThhNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hXU0lMVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5SZWZyZXNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoV1NJTFRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgUmVmcmVzaFdTSUxUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIHJldHVybiBSZWZyZXNoQWN0aW9uLmdldEFjdGlvbkxpbmsodG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlSWQoKSwgdG9vbElkXywgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxUKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9VZGRpQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1VkZGlCdXNpbmVzc0RldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NDYxMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1VkZGlCdXNpbmVzc0RldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVkZGlCdXNpbmVzc0RldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBVZGRpQnVzaW5lc3NEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1VkZGlCdXNpbmVzc0RldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvVWRkaVNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1VkZGlTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ0MDAzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvVWRkaVNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBVZGRpU2VydmljZURldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBVZGRpU2VydmljZURldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzaWwvZm9ybXMvVWRkaVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk3N2QwYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvV29ya2JlbmNoVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hUb29sCi17Ci0gIHB1YmxpYyBXU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gIndzaWwvZm9ybXMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dTSUxQZXJzcGVjdGl2ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dTSUxQZXJzcGVjdGl2ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU4MWY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9XU0lMUGVyc3BlY3RpdmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5QZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0lMUGVyc3BlY3RpdmUgZXh0ZW5kcyBQZXJzcGVjdGl2ZQotewotICAgIHByaXZhdGUgQmFzaWNNb2RlbCBtb2RlbF87Ci0gICAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICBwcml2YXRlIFN0cmluZyBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLQotICAgIHB1YmxpYyBXU0lMUGVyc3BlY3RpdmUoQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoIndzaWwiLGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIGluaXRQZXJzcGVjdGl2ZShTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgICB7Ci0gICAgICAgIG1vZGVsXyA9IG5ldyBCYXNpY01vZGVsKCJXc2lsTW9kZWwiKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoZ2V0TWVzc2FnZSgiV1NJTF9NQUlOX05PREUiKSwgbW9kZWxfKTsKLSAgICAgICAgbW9kZWxfLnNldFJvb3RFbGVtZW50KHRyZWVFbGVtZW50KTsKLSAgICAgICAgbm9kZU1hbmFnZXJfID0gbmV3IE5vZGVNYW5hZ2VyKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgV3NpbE1haW5Ob2RlIHdzaWxNYWluTm9kZSA9IG5ldyBXc2lsTWFpbk5vZGUodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyXyk7Ci0gICAgICAgIG5vZGVNYW5hZ2VyXy5zZXRSb290Tm9kZSh3c2lsTWFpbk5vZGUpOwotCi0gICAgICAgIC8vIFN0YXJ0aW5nIGZyYW1lc2V0IHNpemVzLgotICAgICAgICBpZiAoIURpclV0aWxzLmlzUlRMKCkpCi0gICAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIzMCUsKiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gIiosMzAlIjsKLSAgICAgICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICAgICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSAiNzUlLCoiOwotICAgICAgICBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gICAgfQotCi0gICAgcHVibGljIE5vZGVNYW5hZ2VyIGdldE5vZGVNYW5hZ2VyKCkgewotICAgICAgICByZXR1cm4gbm9kZU1hbmFnZXJfOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpCi0gICAgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFBhbmVzRmlsZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RnJhbWVzZXRzRmlsZSgpCi0gICAgewotICAgICAgcmV0dXJuICJ3c2lsL3NjcmlwdHMvd3NpbGZyYW1lc2V0cy5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb2Nlc3NGcmFtZXNldHNGb3JtKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzaWwvZm9ybXMvUHJvY2Vzc1dTSUxGcmFtZXNldHNGb3JtLmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsTmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsU3RhdHVzQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKQotICAgIHsKLSAgICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gICAgewotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IGNvbHM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKQotICAgIHsKLSAgICAgIHJldHVybiBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKFN0cmluZyBjb2xzKQotICAgIHsKLSAgICAgIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IGNvbHM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gICAgewotICAgICAgcmV0dXJuIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKFN0cmluZyByb3dzKQotICAgIHsKLSAgICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gcm93czsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKQotICAgIHsKLSAgICAgIHJldHVybiBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gICAgewotICAgICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IHJvd3M7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3dpdGNoUGVyc3BlY3RpdmVGb3JtQWN0aW9uTGluayhpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZCxib29sZWFuIGZvckhpc3RvcnkpCi0gICAgewotICAgICAgcmV0dXJuIFN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb24uZ2V0Rm9ybUFjdGlvbkxpbmsodGFyZ2V0UGVyc3BlY3RpdmVJZCxmb3JIaXN0b3J5KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NkbFNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzZGxTZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM1OTIyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NkbFNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXc2RsU2VydmljZURldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBXc2RsU2VydmljZURldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzaWwvZm9ybXMvV3NkbFNlcnZpY2VEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYTBmZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLldzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wgZXh0ZW5kcyBBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wgewotCi0gIHB1YmxpYyBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzRkNDA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV3NpbERldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBXc2lsRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9Xc2lsRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMWVkYTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb1dvcmtiZW5jaFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbCBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoVG9vbCB7Ci0gICAgcHVibGljIFdzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM1ZDc1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sIHsKLSAgICBwdWJsaWMgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbExpbmtEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxMaW5rRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q3ODE5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbExpbmtEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXc2lsTGlua0RldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBXc2lsTGlua0RldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzaWwvZm9ybXMvV3NpbExpbmtEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxNYWluTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxNYWluTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTdkNWM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTWFpbk5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdzaWxNYWluTm9kZSBleHRlbmRzIFdzaWxOYXZpZ2F0b3JOb2RlIHsKLQotICAgIHB1YmxpYyBXc2lsTWFpbk5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgMSwgImltYWdlcy9yb290X21haW4uZ2lmIik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKFdzaWxNb2RlbENvbnN0YW50cy5SRUxfV1NJTCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3NpbE5vZGUgd3NpbE5vZGUgPSBuZXcgV3NpbE5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKHdzaWxOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhXc2lsTW9kZWxDb25zdGFudHMuUkVMX1dTSUwpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKFdzaWxNb2RlbENvbnN0YW50cy5SRUxfV1NJTCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IE9wZW5XU0lMVG9vbCh0b29sTWFuYWdlcl8sIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfT1BFTl9XU0lMIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTmF2aWdhdG9yTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxOYXZpZ2F0b3JOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YzM0ZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxOYXZpZ2F0b3JOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTE5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5Xc2lsVG9nZ2xlTm9kZUFjdGlvbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdzaWxOYXZpZ2F0b3JOb2RlIGV4dGVuZHMgTm9kZSB7Ci0KLSAgICBwdWJsaWMgV3NpbE5hdmlnYXRvck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoLCBTdHJpbmcgaW1hZ2VQYXRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCBpbWFnZVBhdGgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKSB7Ci0gICAgICAgIHJldHVybiBXc2lsVG9nZ2xlTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8saXNPcGVuXyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpIHsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXywgZmFsc2UpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY2NDU5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsTm9kZSBleHRlbmRzIFdzaWxOYXZpZ2F0b3JOb2RlIHsKLQotICAgIHB1YmxpYyBXc2lsTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgsICJ3c2lsL2ltYWdlcy93c2lsX25vZGUuZ2lmIik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IFdzaWxEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NJTF9ERVRBSUxTIikpOwotICAgICAgICBuZXcgTGlzdFdTRExTZXJ2aWNlc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfV1NETF9TRVJWSUNFUyIpKTsKLSAgICAgICAgbmV3IExpc3RVRERJU2VydmljZXNUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX1VERElfU0VSVklDRVMiKSk7Ci0gICAgICAgIG5ldyBMaXN0VURESUJ1c2luZXNzVG9vbCh0b29sTWFuYWdlcl8sIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9VRERJX0xJTktTIikpOwotICAgICAgICBuZXcgTGlzdFdTSUxMaW5rc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfV1NJTF9MSU5LUyIpKTsKLSAgICAgICAgbmV3IFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFUTF9JTVBPUlRfV1NJTF9UT19XT1JLQkVOQ0giKSk7Ci0gICAgICAgIG5ldyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtVG9vbCh0b29sTWFuYWdlcl8sIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfSU1QT1JUX1RPX0ZTIikpOwotICAgICAgICBuZXcgQWRkV1NJTFRvRmF2b3JpdGVzVG9vbCh0b29sTWFuYWdlcl8sIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1dTSUxfVE9fRkFWT1JJVEVTIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsU2V0RGVmYXVsdFZpZXdUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbFNldERlZmF1bHRWaWV3VG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2MxMTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsU2V0RGVmYXVsdFZpZXdUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZXREZWZhdWx0Vmlld1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXc2lsU2V0RGVmYXVsdFZpZXdUb29sIGV4dGVuZHMgU2V0RGVmYXVsdFZpZXdUb29sIHsKLSAgICBwdWJsaWMgV3NpbFNldERlZmF1bHRWaWV3VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxULCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQsIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQsIGZhbHNlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvdHJhbnNmb3JtZXIvV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3RyYW5zZm9ybWVyL1dTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI1ZmEyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvdHJhbnNmb3JtZXIvV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLlZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElCdXNpbmVzc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElTZXJ2aWNlc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFdTRExTZXJ2aWNlc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFdTSUxMaW5rc1Rvb2w7Ci0KLXB1YmxpYyBjbGFzcyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyIGV4dGVuZHMgVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBOT05FID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFdTRExfU0VSVklDRSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBVRERJX1NFUlZJQ0UgPSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgVURESV9CVVNJTkVTUyA9IDM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBXU0lMX0xJTksgPSA0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRlJPTV9UT09MSUQgPSA1OwotICBwcml2YXRlIGJ5dGUgdHlwZTsKLQotICBwdWJsaWMgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICB0aGlzKGNvbnRyb2xsZXIsICIiLCBBY3Rpb25JbnB1dHMuVklFV0lELCBGUk9NX1RPT0xJRCk7Ci0gIH0KLQotICBwdWJsaWMgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIsIFN0cmluZyBsaXN0TWFuYWdlcktleSwgU3RyaW5nIHZpZXdLZXksIGJ5dGUgdHlwZSkKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIGxpc3RNYW5hZ2VyS2V5LCB2aWV3S2V5KTsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBub3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBpZiAodHlwZSA9PSBGUk9NX1RPT0xJRCkKLSAgICB7Ci0gICAgICBOb2RlIGN1cnJOb2RlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgaWYgKGN1cnJOb2RlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHRvb2xJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydGllcy5nZXQoQWN0aW9uSW5wdXRzLlRPT0xJRCkpOwotICAgICAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gY3Vyck5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgICBUb29sIHRvb2wgPSB0b29sTWFuYWdlci5nZXRUb29sKHRvb2xJZCk7Ci0gICAgICAgICAgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0V1NETFNlcnZpY2VzVG9vbCkKLSAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTOwotICAgICAgICAgIGVsc2UgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkKLSAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTOwotICAgICAgICAgIGVsc2UgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0VURESUJ1c2luZXNzVG9vbCkKLSAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTOwotICAgICAgICAgIGVsc2UgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0V1NJTExpbmtzVG9vbCkKLSAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLm5vcm1hbGl6ZShwcm9wZXJ0aWVzKTsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBOb2RlIGN1cnJOb2RlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChjdXJyTm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFRyZWVFbGVtZW50IGN1cnJFbGVtZW50ID0gY3Vyck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmIChjdXJyRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KQotICAgICAgewotICAgICAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudCkgY3VyckVsZW1lbnQ7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgV1NETF9TRVJWSUNFIDoKLSAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFdTRExTZXJ2aWNlcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBVRERJX1NFUlZJQ0UgOgotICAgICAgICAgICAgd3NpbEVsZW1lbnQuZ2V0QWxsVURESVNlcnZpY2VzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFVERElfQlVTSU5FU1MgOgotICAgICAgICAgICAgd3NpbEVsZW1lbnQuZ2V0QWxsVURESUxpbmtzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFdTSUxfTElOSyA6Ci0gICAgICAgICAgICB3c2lsRWxlbWVudC5nZXRBbGxXU0lMTGlua3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRlJPTV9UT09MSUQgOgotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGludCB0b29sSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnRpZXMuZ2V0KEFjdGlvbklucHV0cy5UT09MSUQpKTsKLSAgICAgICAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBjdXJyTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICAgICAgICBUb29sIHRvb2wgPSB0b29sTWFuYWdlci5nZXRUb29sKHRvb2xJZCk7Ci0gICAgICAgICAgICAgIGlmICh0b29sIGluc3RhbmNlb2YgTGlzdFdTRExTZXJ2aWNlc1Rvb2wpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsaXN0TWFuYWdlcktleSA9IFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUzsKLSAgICAgICAgICAgICAgICB3c2lsRWxlbWVudC5nZXRBbGxXU0RMU2VydmljZXMoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmICh0b29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsaXN0TWFuYWdlcktleSA9IFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUzsKLSAgICAgICAgICAgICAgICB3c2lsRWxlbWVudC5nZXRBbGxVRERJU2VydmljZXMoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmICh0b29sIGluc3RhbmNlb2YgTGlzdFVERElCdXNpbmVzc1Rvb2wpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsaXN0TWFuYWdlcktleSA9IFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUzsKLSAgICAgICAgICAgICAgICB3c2lsRWxlbWVudC5nZXRBbGxVRERJTGlua3MoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmICh0b29sIGluc3RhbmNlb2YgTGlzdFdTSUxMaW5rc1Rvb2wpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsaXN0TWFuYWdlcktleSA9IFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NJTF9MSU5LUzsKLSAgICAgICAgICAgICAgICB3c2lsRWxlbWVudC5nZXRBbGxXU0lMTGlua3MoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0IDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5kZU5vcm1hbGl6ZShwcm9wZXJ0aWVzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbHVnaW4vRXhwbG9yZXJQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGx1Z2luL0V4cGxvcmVyUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YzNlNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbHVnaW4vRXhwbG9yZXJQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbjsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaFdpemFyZFRhc2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLmZhdm9yaXRlcy5GYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0OwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0KLS8qKgotICogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLgotICovCi1wdWJsaWMgY2xhc3MgRXhwbG9yZXJQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luCi17Ci0gIC8qKgotICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hBUlNFVCA9ICJVVEYtOCI7Ci0gIAotICAvKioKLSAgICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgRXhwbG9yZXJQbHVnaW4gaW5zdGFuY2VfOwotICBwcml2YXRlIEJ1bmRsZUNvbnRleHQgY29udGV4dDsKLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLiBUaGUgInBsdWdpbiIgZWxlbWVudAotICAgKiBpbiBwbHVnaW4ueG1sIHNob3VsZCBpbmNsdWRlIHRoZSBhdHRyaWJ1dGUgY2xhc3MgPQotICAgKiAib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbiIuCi0gICAqIAotICAgKiBAcGFyYW0gZGVzY3JpcHRvcgotICAgKiAgICAgICAgICAgIFRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luLgotICAgKi8KLSAgcHVibGljIEV4cGxvcmVyUGx1Z2luKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2VfID0gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAgKiAoRXhwbG9yZXJQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiKTsKLSAgICogCi0gICAqIEByZXR1cm4gVGhlIEV4cGxvcmVyUGx1Z2luIHNpbmdsZXRvbi4KLSAgICovCi0gIHN0YXRpYyBwdWJsaWMgRXhwbG9yZXJQbHVnaW4gZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIC8qKgotICAgKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyBmaXJzdCBsb2FkZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGJ1bmRsZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc3RhcnQoYnVuZGxlKTsKLSAgICAvLyBpbml0IHRoZSBzaGVsbCBvZiBMYXVuY2hXaXphcmRUYXNrCi0gICAgdGhpcy5jb250ZXh0ID0gYnVuZGxlOwotICAgIExhdW5jaFdpemFyZFRhc2suZ2V0SW5zdGFuY2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyB1bmxvYWRlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBidW5kbGUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0b3AoYnVuZGxlKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHN0cmluZyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbSB0aGUKLSAgICogcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBmb3IgdGhlIGFwcHJvcHJpYXRlIGxvY2FsZS4KLSAgICogCi0gICAqIEBwYXJhbSBrZXkKLSAgICogICAgICAgICAgICBUaGUgbWVzc2FnZSBrZXkgc3RyaW5nIHByZWZpeGVkIGJ5IGEgIiUiIHN5bWJvbC4gVGhhdCBpcywgdGhlCi0gICAqICAgICAgICAgICAgc3RyaW5nIHBhc3NlZCBpbiBtdXN0IGJlIG9mIHRoZSBmb3JtICIlS0VZIiB3aGVyZSB0aGUKLSAgICogICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGNvbnRhaW5zIGEgbGluZSBvZiB0aGUgZm9ybTogIktFWSA9Ci0gICAqICAgICAgICAgICAgdmFsdWUiLgotICAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIGtleSkKLSAgewotICAgIHJldHVybiBQbGF0Zm9ybS5nZXRSZXNvdXJjZVN0cmluZyhpbnN0YW5jZV8uZ2V0QnVuZGxlKCksIGtleSk7IAotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1lc3NhZ2Ugc3RyaW5nIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGtleSBmcm9tIHRoZQotICAgKiBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGZvciB0aGUgYXBwcm9wcmlhdGUgbG9jYWxlLiBTdWJzdGl0dXRpb24gc2VxdWVuY2VzCi0gICAqIGluIHRoZSBtZXNzYWdlIHN0cmluZyBhcmUgcmVwbGFjZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIHN1YnN0aXR1dGlvbgotICAgKiBvYmplY3RzICh3aGljaCBhcmUgbW9zdCBmcmVxdWVudGx5IHN0cmluZ3MpLiBTZWUgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQKLSAgICogZm9yIGZ1cnRoZXIgZGV0YWlscyBvbiBzdWJzdGl0dXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0ga2V5Ci0gICAqICAgICAgICAgICAgVGhlIG1lc3NhZ2Uga2V5IHN0cmluZyBwcmVmaXhlZCBieSBhICIlIiBzeW1ib2wuIFRoYXQgaXMsIHRoZQotICAgKiAgICAgICAgICAgIHN0cmluZyBwYXNzZWQgaW4gbXVzdCBiZSBvZiB0aGUgZm9ybSAiJUtFWSIgd2hlcmUgdGhlCi0gICAqICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBjb250YWlucyBhIGxpbmUgb2YgdGhlIGZvcm06ICJLRVkgPQotICAgKiAgICAgICAgICAgIHZhbHVlIi4KLSAgICogQHBhcmFtIGFyZ3MKLSAgICogICAgICAgICAgICBUaGUgc3Vic3RpdHV0aW9uIHZhbHVlcyBmb3IgdGhlIG1lc3NhZ2UgYXMgcmVxdWlyZWQgYnkgdGhlCi0gICAqICAgICAgICAgICAgbWVzc2FnZSBpbiBwbHVnaW4ucHJvcGVydGllcyBhbmQgYnkgdGhlIHJ1bGVzIG9mIGNsYXNzCi0gICAqICAgICAgICAgICAgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQuCi0gICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcga2V5LCBPYmplY3RbXSBhcmdzKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldE1lc3NhZ2Uoa2V5KSwgYXJncyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgbmFtZWQgcmVzb3VyY2UgYXMgcmVsYXRpdmUgdG8gdGhlCi0gICAqIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICAgKiAKLSAgICogQHJldHVybiBBbiBpbWFnZSBkZXNjcmlwdG9yLCBwb3NzaWJseSBudWxsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVVJMIGluc3RhbGxVUkwgPSBpbnN0YW5jZV8uZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKTsKLSAgICAgIFVSTCBpbWFnZVVSTCA9IG5ldyBVUkwoaW5zdGFsbFVSTCwgbmFtZSk7Ci0gICAgICByZXR1cm4gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwoaW1hZ2VVUkwpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBJUGx1Z2luSGVscGVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TXNnTG9nZ2VyQ29uZmlnKEhhc2h0YWJsZSBtc2dMb2dnZXJDb25maWcpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgSVBsdWdpbkhlbHBlci4KLSAgICovCi0gIHB1YmxpYyBIYXNodGFibGUgZ2V0TXNnTG9nZ2VyQ29uZmlnKFBsdWdpbiBwbHVnaW4pCi0gIHsKLSAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBJUGx1Z2luSGVscGVyLgotICAgKi8KLSAgcHVibGljIEhhc2h0YWJsZSBnZXRNc2dMb2dnZXJDb25maWcoKQotICB7Ci0gICAgcmV0dXJuIGdldE1zZ0xvZ2dlckNvbmZpZyh0aGlzKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gUGxhdGZvcm0uZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbih0aGlzKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpLnRvT1NTdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKCkKLSAgewotCS8vIFRPRE86IGdldFBsdWdpbkluc3RhbGxMb2NhdGlvbiBjYW4gcmV0dXJuIG51bGwgYW5kIGNhdXNlIHRyb3VibGUgZm9yIHRoZSBXU0UncyBmYXZvdXJpdGVzIG1lY2hhbmlzbS4gODkxMDEgc2hvdWxkIGNvcnJlY3QgdGhpcy4KLQlyZXR1cm4gZ2V0UGx1Z2luSW5zdGFsbExvY2F0aW9uKCkrRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdC5GQVZPUklURVNfREVGQVVMVDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRQbHVnaW5JbnN0YWxsTG9jYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIFBsYXRmb3JtLnJlc29sdmUoaW5zdGFuY2VfLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBCdW5kbGVDb250ZXh0IGdldEJ1bmRsZUNvbnRleHQoKSB7Ci0JCXJldHVybiBnZXRJbnN0YW5jZSgpLmNvbnRleHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wb3B1cC9Qb3B1cFRlc3RXU0RMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BvcHVwL1BvcHVwVGVzdFdTREwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2ZTc2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BvcHVwL1BvcHVwVGVzdFdTREwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA2MDYgICAxMDUwNjkgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDgwMyAgIDE1Mjc5MCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDEyMyAgIDIxNjM3MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb25pdG9yLkdldE1vbml0b3JDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMuQWRhcHRlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBQb3B1cFRlc3RXU0RMIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbkRlbGVnYXRlCi17Ci0gIHByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBudWxsOwotCQotICBwdWJsaWMgUG9wdXBUZXN0V1NETCgpCi0gIHsKLSAgICBzdXBlcihFeHBsb3JlclBsdWdpbi5nZXRNZXNzYWdlKCIlUE9QVVBfVEVTVF9XU0RMIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotCVN0cmluZyBzdGF0ZUxvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCk7Ci0JU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKCk7Ci0gIAlXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpOwotICAgIGNvbW1hbmQuc2V0Rm9yY2VMYXVuY2hPdXRzaWRlSURFKGZhbHNlKTsKLSAgICBWZWN0b3IgbGF1bmNoT3B0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBTdHJpbmcgd3NkbFVSTCA9IG51bGw7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJUmVzb3VyY2UpCi0gICAgICAgIHsKLSAgICAgICAgCUZpbGUgd3NkbEZpbGUgPSAoKElSZXNvdXJjZSlvYmplY3QpLmdldExvY2F0aW9uKCkudG9GaWxlKCk7Ci0gICAgICAgIAl0cnkKLSAgICAgICAgCXsKLSAgICAgICAgCQl3c2RsVVJMID0gd3NkbEZpbGUudG9VUkwoKS50b1N0cmluZygpOwotICAgICAgICAJfQotICAgICAgICAJY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAgICAgCXsKLSAgICAgICAgCQl3c2RsVVJMID0gd3NkbEZpbGUudG9TdHJpbmcoKTsKLSAgICAgICAgCX0KLSAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbCkKLSAgICAgICAgewotICAgICAgICAJU2VydmljZUltcGwgc2VydmljZUltcGwgPSAoU2VydmljZUltcGwpb2JqZWN0OyAgICAgICAgICAKLSAgICAgICAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHNlcnZpY2VJbXBsLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsgICAgICAgIAotICAgICAgICAJd3NkbFVSTCA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKQotICAgICAgICB7Ci0gICAgICAgIAlXU0RMUmVzb3VyY2VJbXBsIFdTRExSSW1wbCA9IChXU0RMUmVzb3VyY2VJbXBsKW9iamVjdDsKLSAgICAgICAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IFdTRExSSW1wbC5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgIAl3c2RsVVJMID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOwotICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykgewotICAgICAgICAJd3NkbFVSTCA9IChTdHJpbmcpIG9iamVjdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgCS8vIE9iamVjdCBpcyBub3QgYW55IHR5cGVzIHdlIHJlY29nbml6ZWQsIHdzZGxVUkwgaXMgc3RpbGwgbnVsbC4KLSAgICAgICAgICAJLy8gVHJ5IGxvb2tpbmcgdXAgYW4gYWRhcHRlciBmb3IgdGhlIG9iamVjdC4KLSAgICAgICAgCS8vIElmIGZvdW5kLCB1cGRhdGUgd3NkbFVSTCBjb250YWlucyB0aGUgYWRhcHRlZCBXU0RMIHN0cmluZy4gIAotICAgICAgICAJLy8gSWYgbm90IGZvdW5kLCB3c2RsVVJMIHdvdWxkIHN0aWxsIGJlIG51bGwuCi0gICAgICAgIAl3c2RsVVJMID0gQWRhcHRlclV0aWxzLmdldEFkYXB0ZWRXU0RMKG9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgYWRkTGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zLCB3c2RsVVJMLCBzdGF0ZUxvY2F0aW9uLCBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pOyAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIGNvbW1hbmQuc2V0TGF1bmNoT3B0aW9ucygoTGF1bmNoT3B0aW9uW10pbGF1bmNoT3B0aW9ucy50b0FycmF5KG5ldyBMYXVuY2hPcHRpb25bMF0pKTsKLSAgICBjb21tYW5kLmV4ZWN1dGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgYW5kIGFkZCB0aGUgV0VCX1NFUlZJQ0VfRU5EUE9JTlQsIFdTRExfVVJMLCBTVEFURV9MT0NBVElJT04gYW5kIAotICAgKiBERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTiBMYXVuY2hPcHRpb25zIHRvIHRoZSBsYXVuY2hPcHRpb25zIHZlY3RvcgotICAgKiAKLSAgICogQHBhcmFtIGxhdW5jaE9wdGlvbnMgLSB2ZWN0b3Igb2YgbGF1bmNoT3B0aW9ucyB0byBhZGQgdG8KLSAgICogQHBhcmFtIHdzZGxVUkwKLSAgICogQHBhcmFtIHN0YXRlTG9jYXRpb24KLSAgICogQHBhcmFtIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkTGF1bmNoT3B0aW9ucyhWZWN0b3IgbGF1bmNoT3B0aW9ucywgU3RyaW5nIHdzZGxVUkwsIFN0cmluZyBzdGF0ZUxvY2F0aW9uLCBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKQotICB7Ci0JICBHZXRNb25pdG9yQ29tbWFuZCBnZXRNb25pdG9yQ21kID0gbmV3IEdldE1vbml0b3JDb21tYW5kKCk7Ci0gICAgICBnZXRNb25pdG9yQ21kLnNldE1vbml0b3JTZXJ2aWNlKHRydWUpOwotICAgICAgZ2V0TW9uaXRvckNtZC5zZXRDcmVhdGUoZmFsc2UpOwotICAgICAgZ2V0TW9uaXRvckNtZC5zZXRXZWJTZXJ2aWNlc1BhcnNlcihuZXcgV2ViU2VydmljZXNQYXJzZXIoKSk7Ci0gICAgICBnZXRNb25pdG9yQ21kLnNldFdzZGxVUkkod3NkbFVSTCk7Ci0gICAgICBnZXRNb25pdG9yQ21kLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0gICAgICBMaXN0IGVuZHBvaW50cyA9IGdldE1vbml0b3JDbWQuZ2V0RW5kcG9pbnRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGVuZHBvaW50c0l0ID0gZW5kcG9pbnRzLml0ZXJhdG9yKCk7IGVuZHBvaW50c0l0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgCSAgbGF1bmNoT3B0aW9ucy5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLldFQl9TRVJWSUNFX0VORFBPSU5ULCAoU3RyaW5nKWVuZHBvaW50c0l0Lm5leHQoKSkpOwotICAgICAgfQotICAgICAgbGF1bmNoT3B0aW9ucy5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLldTRExfVVJMLCB3c2RsVVJMKSk7Ci0JICBsYXVuY2hPcHRpb25zLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuU1RBVEVfTE9DQVRJT04sc3RhdGVMb2NhdGlvbikpOwotCSAgbGF1bmNoT3B0aW9ucy5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLkRFRkFVTFRfRkFWT1JJVEVTX0xPQ0FUSU9OLGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbikpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICBydW4oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0JICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0JCSAgdGhpcy5zZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbjsKLQkgIGVsc2UKLQkJICB0aGlzLnNlbGVjdGlvbiA9IG51bGw7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9IVFRQVHJhbnNwb3J0RXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9IVFRQVHJhbnNwb3J0RXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MjRjMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogQSB0eXBlIG9mIFRyYW5zcG9ydEV4Y2VwdGlvbiB0aGF0IGNhbiBiZSB0aHJvd24gd2hlbiB0aGUgdHJhbnNwb3J0IHByb3RvY29sCi0gKiBpcyBIVFRQLiAgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBIVFRQIHJlc3BvbnNlIGlzIGNhcHR1cmVkIGluIHRoaXMKLSAqIGV4Y2VwdGlvbiBhbmQgcGFzc2VkIHVwIHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQVHJhbnNwb3J0RXhjZXB0aW9uIGV4dGVuZHMgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDgyNzcxODA3MzE3OTg4NTg4NzdMOwotCQotCXByaXZhdGUgaW50IHN0YXR1c0NvZGU7Ci0JcHJpdmF0ZSBNYXAgaGVhZGVyczsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKiAKLQkgKiBAcGFyYW0gc3RhdHVzQ29kZSBUaGUgSFRUUCBzdGF0dXMgY29kZS4KLQkgKiBAcGFyYW0gbWVzc2FnZSBBIG1lc3NhZ2UgYWJvdXQgdGhlIHByb2JsZW0gdGhhdCBvY2N1cnJlZC4KLQkgKiBAcGFyYW0gaGVhZGVycyBBIG1hcCBvZiB0aGUgSFRUUCBoZWFkZXJzLgotCSAqLwotCXB1YmxpYyBIVFRQVHJhbnNwb3J0RXhjZXB0aW9uKGludCBzdGF0dXNDb2RlLCBTdHJpbmcgbWVzc2FnZSwgTWFwIGhlYWRlcnMpIHsKLQkJc3VwZXIobWVzc2FnZSk7Ci0JCXRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7Ci0JCXRoaXMuaGVhZGVycyA9IGhlYWRlcnM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEhUVFAgc3RhdHVzIGNvZGUgdXNlZCB0byBjcmVhdGUgdGhpcyBleGNlcHRpb24uCi0JICogCi0JICogQHJldHVybiBUaGUgSFRUUCBzdGF0dXMgY29kZS4KLQkgKi8KLQlwdWJsaWMgaW50IGdldFN0YXR1c0NvZGUoKSB7Ci0JCXJldHVybiBzdGF0dXNDb2RlOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgSFRUUCBoZWFkZXIgZm9yIHRoZSBnaXZlbiBrZXkKLQkgKiAKLQkgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdmFsdWUuCi0JICogQHJldHVybiBUaGUgSFRUUCBoZWFkZXIgdmFsdWUgZm9yIGtleSwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBzdWNoIGhlYWRlci4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEhlYWRlcihTdHJpbmcga2V5KSB7Ci0JICAgIE9iamVjdCB2YWx1ZSA9IGhlYWRlcnMuZ2V0KGtleSk7Ci0JICAgIGlmICh2YWx1ZSAhPSBudWxsKQotCSAgICAJcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7Ci0JICAgIGVsc2UKLQkgICAgCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lEZXNlcmlhbGl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lEZXNlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ4YTIwYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JRGVzZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi0vKioKLSAqIFRoZSBJRGVzZXJpYWxpemVyIGlzIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgYW4gWE1MIHN0cmluZyBhbmQgZGVzZXJpYWxpemluZyBpdAotICogaW50byB2YWx1ZXMgdG8gcG9wdWxhdGUgYW4gSVNPQVBNZXNzYWdlLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElEZXNlcmlhbGl6ZXIgewotCQotCS8qKgotCSAqIERlc2VyaWFsaXplIHRoZSBYTUwgc3RyaW5nIGludG8gdGhlIElTT0FQTWVzc2FnZS4gIFRoZSBwYXJ0IHBhcmFtZXRlciB0ZWxscyB0aGUgbWV0aG9kCi0JICogd2hpY2ggcGFydCBvZiB0aGUgbWVzc2FnZSAodGhlIGVudmVsb3BlIG9yIHRoZSBjb250ZW50cyBvZiB0aGUgaGVhZGVyIG9yIGJvZHkpIHRoZSBYTUwKLQkgKiBzdHJpbmcgcmVwcmVzZW50cy4gIE5vdGUgdGhhdCAiY29udGVudHMiIHJlZmVycyB0byB0aGUgbGlzdCBvZiBlbGVtZW50cyBpbnNpZGUgdGhlIGhlYWRlcgotCSAqIG9yIGJvZHksIGFuZCBub3QgdGhlIGhlYWRlciBvciBib2R5IGVsZW1lbnQgaXRzZWxmLgotCSAqIAotCSAqIEBwYXJhbSBwYXJ0IE9uZSBvZiB7QGxpbmsgSVNPQVBNZXNzYWdlI0VOVkVMT1BFfSwge0BsaW5rIElTT0FQTWVzc2FnZSNIRUFERVJfQ09OVEVOVH0sIG9yCi0JICoge0BsaW5rIElTT0FQTWVzc2FnZSNCT0RZX0NPTlRFTlR9LgotCSAqIEBwYXJhbSB4bWwgVGhlIFhNTCBzdHJpbmcgdG8gZGVzZXJpYWxpemUuCi0JICogQHBhcmFtIG1lc3NhZ2UgVGhlIElTT0FQTWVzc2FnZSB0byBkZXNlcmlhbGl6ZSBpbnRvLgotCSAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgZGVzZXJpYWxpemUoaW50IHBhcnQsIFN0cmluZyB4bWwsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uOwkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUE1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQTWVzc2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2QwYWQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQTWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBUaGUgSVNPQVBNZXNzYWdlIHJlcHJlc2VudHMgYSBTT0FQIG1lc3NhZ2UgaW4gYSB3ZWIgc2VydmljZSBpbnZvY2F0aW9uIG1hZGUgYnkgdGhlCi0gKiBXZWIgU2VydmljZXMgRXhwbG9yZXIncyB0cmFuc3BvcnQgc3RhY2suCi0gKiA8YnIvPgotICogPGJyLz4KLSAqIFRoZSBzZXR0ZXJzIG9mIElTT0FQTWVzc2FnZSBhcmUgY2FsbGVkIGJ5IFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBwb3B1bGF0ZSB0aGUKLSAqIG1lc3NhZ2UgYmVmb3JlIHNlbmRpbmcuICBXU0UgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgYWxsIG1lc3NhZ2UgZWxlbWVudHMgaXQgc2V0cwotICogd2lsbCBoYXZlIHRoZSBzYW1lIG93bmVyIGRvY3VtZW50LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTT0FQTWVzc2FnZSB7Ci0KLQkvKioKLQkgKiBJU09BUE1lc3NhZ2UgZGVmaW5lcyB0aGlzIHByb3BlcnR5IGZvciBzdG9yaW5nIHRoZSBTT0FQIGFjdGlvbiB2YWx1ZSBpbgotCSAqIGEgd2ViIHNlcnZpY2UgaW52b2NhdGlvbi4gIFRoaXMgcHJvcGVydHkgd2lsbCBiZSBzZXQgYnkgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0JICogcHJpb3IgdG8gcGFzc2luZyB0aGUgbWVzc2FnZSB0byB7QGxpbmsgSVNPQVBUcmFuc3BvcnQjc2VuZChTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBJU09BUE1lc3NhZ2UpfQotCSAqLwotCVN0cmluZyBQUk9QX1NPQVBfQUNUSU9OID0gInByb3Bfc29hcF9hY3Rpb24iOwotCQotCS8qKgotCSAqIFRoaXMgdmFsdWUgaXMgdXNlZCB3aGVuIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGEgbWVzc2FnZS4gIEl0IGluZGljYXRlcyB0aGUgb3BlcmF0aW9uCi0JICogaXMgd29ya2luZyB3aXRoIHRoZSBlbnRpcmUgU09BUCBlbnZlbG9wZSBlbGVtZW50LiAKLQkgKi8KLQlpbnQgRU5WRUxPUEUgPSAwOwotCQotCS8qKgotCSAqIFRoaXMgdmFsdWUgaXMgdXNlZCB3aGVuIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGEgbWVzc2FnZS4gIEl0IGluZGljYXRlcyB0aGUgb3BlcmF0aW9uCi0JICogaXMgd29ya2luZyB3aXRoIHRoZSBlbGVtZW50cyBpbnNpZGUgdGhlIFNPQVAgaGVhZGVyIGVsZW1lbnQuCi0JICovCi0JaW50IEhFQURFUl9DT05URU5UID0gMTsKLQkKLQkvKioKLQkgKiBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyBhIG1lc3NhZ2UuICBJdCBpbmRpY2F0ZXMgdGhlIG9wZXJhdGlvbgotCSAqIGlzIHdvcmtpbmcgd2l0aCB0aGUgZWxlbWVudHMgaW5zaWRlIHRoZSBTT0FQIGJvZHkgZWxlbWVudC4KLQkgKi8KLQlpbnQgQk9EWV9DT05URU5UID0gMjsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIE1lc3NhZ2VDb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1lc3NhZ2UuICBUaGUgTWVzc2FnZUNvbnRleHQgaXMgY3JlYXRlZAotCSAqIGJ5IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYW5kIHBhc3NlZCB0byB0aGUgdHJhbnNwb3J0IHN0YWNrIGR1cmluZyBtZXNzYWdlIGNyZWF0aW9uLiAgCi0JICogSW1wbGVtZW50ZXJzIG9mIElTT0FQTWVzc2FnZSBzaG91bGQgc3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIE1lc3NhZ2VDb250ZXh0LgotCSAqIAotCSAqIEByZXR1cm4gVGhlIE1lc3NhZ2VDb250ZXh0IGVuY2FzdWxhdGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd2ViIHNlcnZpY2Ugb3BlcmF0aW9uLiAKLQkgKiBAc2VlIElTT0FQVHJhbnNwb3J0I25ld01lc3NhZ2UoTWVzc2FnZUNvbnRleHQpCi0JICovCi0JcHVibGljIE1lc3NhZ2VDb250ZXh0IGdldE1lc3NhZ2VDb250ZXh0KCk7Ci0KLQkvKioKLQkgKiBTZXRzIGEgcHJvcGVydHkgaW4gdGhpcyBJU09BUE1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIGtleSBUaGUga2V5IChuYW1lKSBvZiB0aGUgcHJvcGVydHkKLQkgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eShTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgcHJvcGVydHkgZnJvbSB0aGlzIElTT0FQTWVzc2FnZS4KLQkgKiAKLQkgKiBAcGFyYW0ga2V5IFRoZSBrZXkgKG5hbWUpIG9mIHRoZSBwcm9wZXJ0eSB0byByZXRyaWV2ZS4KLQkgKiBAcmV0dXJuIFRoZSB2YWx1ZSBhc3NvaWNhdGVkIHdpdGggdGhlIGdpdmVuIGtleSwgb3IgbnVsbCBpZiB0aGVyZSdzIG5vIHN1Y2ggcHJvcGVydHkuCi0JICovCi0JcHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eShTdHJpbmcga2V5KTsKLQotCS8qKgotCSAqIFRoZSBuYW1lc3BhY2UgdGFibGUgaG9sZHMgdGhlIG5hbWVzcGFjZSBkZWNsYXJhaW9ucyB0aGF0IGFyZSBvbiB0aGUgZW52ZWxvcGUgZWxlbWVudAotCSAqIG9mIHRoZSBTT0FQIG1lc3NhZ2UuICBUaGUgdGFibGUncyBrZXlzIGFyZSB0aGUgbmFtZXNwYWNlIFVSSXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZQotCSAqIGFzc29jaWF0ZWQgbmFtZXNwYWNlIHByZWZpeGVzLgotCSAqIDxici8+Ci0JICogPGJyLz4KLQkgKiBUaGUgZWZmZWN0IG9mIGNhbGxpbmcgdGhpcyBtZXRob2QgaXMgdGhhdCB0aGUgZGVjbGFyYXRpb25zIGluIHRoZSBuYW1lc3BhY2UgdGFibGUKLQkgKiBhcmd1bWVudCBzaG91bGQgYWRkIHRvIG9yIHJlcGxhY2UgdGhlIGRlY2xhcmF0aW9ucyBvbiB0aGUgZW52ZWxvcGUuICBUaGlzIEFQSSBkb2VzCi0JICogbm90IHNwZWNpZnkgd2hhdCBoYXBwZW5zIHRvIGV4aXN0aW5nIGRlY2xhcmF0aW9ucyBvbiB0aGUgZW52ZWxvcGUgd2hpY2ggYXJlIG5vdAotCSAqIGluIHRoZSBuYW1lc3BhY2UgdGFibGUgcGFzc2VkIGluLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lc3BhY2VUYWJsZSBUaGUgbmFtZXNwYWNlIHRhYmxlCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlVGFibGUoTWFwIG5hbWVzcGFjZVRhYmxlKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSB0YWJsZSBvZiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyB0aGF0IGFyZSBvbiB0aGUgZW52ZWxvcGUgZWxlbWVudCBvZiB0aGUKLQkgKiBTT0FQIG1lc3NhZ2UuICBUaGUgdGFibGUncyBrZXlzIGFyZSB0aGUgbmFtZXNwYWNlIFVSSXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZQotCSAqIGFzc29jaWF0ZWQgbmFtZXNwYWNlIHByZWZpeGVzLgotCSAqIDxici8+Ci0JICogPGJyLz4KLQkgKiBUaGUgbmFtZXNwYWNlIHRhYmxlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kIG1heSBiZSBtb2RpZmllZCBieSB0aGUgV2ViIFNlcnZpY2VzCi0JICogRXhwbG9yZXIgYW5kIGxhdGVyIHVwZGF0ZWQgYmFjayB0byB0aGUgbWVzc2FnZSB2aWEgdGhlIHNldE5hbWVzYXBjZVRhYmxlKCkgbWV0aG9kLgotCSAqIAotCSAqIEByZXR1cm4gQSB0YWJsZSBvZiBuYW1lc3BhY2UgVVJJcyB0byBwcmVmaXhlcyBvbiB0aGUgU09BUCBlbnZlbG9wZS4KLQkgKi8KLQlwdWJsaWMgTWFwIGdldE5hbWVzcGFjZVRhYmxlKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBlbnZlbG9wZSBlbGVtZW50IG9mIHRoaXMgbWVzc2FnZS4KLQkgKiAKLQkgKiBAcGFyYW0gZW52ZWxvcGUgVGhlIGVudmVsb3BlIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0RW52ZWxvcGUoRWxlbWVudCBlbnZlbG9wZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBlbnZlbG9wZSBlbGVtZW50IG9mIHRoaXMgbWVzc2FnZS4gIFRoZSBkZWVwIHBhcmFtZXRlciBkaWN0YXRlcyB3aGV0aGVyCi0JICogdGhlIG1ldGhvZCByZXR1cm5zIHRoZSB3aG9sZSBlbnZlbG9wZSB3aXRoIGFsbCBpdHMgZGVzY2VuZGFudHMgb3IganVzdCB0aGUgZW52ZWxvcGUgCi0JICogZWxlbWVudCBpdHNlbGYuCi0JICogCi0JICogQHBhcmFtIGRlZXAgSWYgdHJ1ZSwgdGhlIGVudmVsb3BlIGFuZCBpdHMgZGVzY2VuZGFudHMgYXJlIHJldHVybmVkLCBvdGhlcndpc2Ugb25seQotCSAqIHRoZSBlbnZlbG9wZSBlbGVtZW50IGl0c2VsZiBpcyByZXR1cm5lZC4KLQkgKiBAcmV0dXJuIEFuIGVsZW1lbnQuCi0JICovCi0JcHVibGljIEVsZW1lbnQgZ2V0RW52ZWxvcGUoYm9vbGVhbiBkZWVwKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIGhlYWRlciBlbGVtZW50IG9mIHRoaXMgbWVzc2FnZS4KLQkgKiAKLQkgKiBAcGFyYW0gaGVhZGVyIFRoZSBoZWFkZXIgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIZWFkZXIoRWxlbWVudCBoZWFkZXIpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaGVhZGVyIGVsZW1lbnQgb2YgdGhpcyBtZXNzYWdlLiAgVGhlIGRlZXAgcGFyYW1ldGVyIGRpY3RhdGVzIHdoZXRoZXIKLQkgKiB0aGUgbWV0aG9kIHJldHVybnMgdGhlIHdob2xlIGhlYWRlciB3aXRoIGFsbCBpdHMgZGVzY2VuZGFudHMgb3IganVzdCB0aGUgaGVhZGVyIAotCSAqIGVsZW1lbnQgaXRzZWxmLgotCSAqIAotCSAqIEBwYXJhbSBkZWVwIElmIHRydWUsIHRoZSBoZWFkZXIgYW5kIGl0cyBkZXNjZW5kYW50cyBhcmUgcmV0dXJuZWQsIG90aGVyd2lzZSBvbmx5Ci0JICogdGhlIGhlYWRlciBlbGVtZW50IGl0c2VsZiBpcyByZXR1cm5lZC4KLQkgKiBAcmV0dXJuIEFuIGVsZW1lbnQuCi0JICovCi0JcHVibGljIEVsZW1lbnQgZ2V0SGVhZGVyKGJvb2xlYW4gZGVlcCk7Ci0KLQkvKioKLQkgKiBTZXRzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHRoYXQgZ29lcyBpbnRvIHRoZSBtZXNzYWdlJ3MgaGVhZGVyLgotCSAqIAotCSAqIEBwYXJhbSBoZWFkZXJDb250ZW50IEFuIGFycmF5IG9mIGVsZW1lbnRzLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEhlYWRlckNvbnRlbnQoRWxlbWVudFtdIGhlYWRlckNvbnRlbnQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYXJyYXkgb2YgZWxlbWVudHMgdGhhdCBhcmUgaW5zaWRlIHRoZSBtZXNzYWdlJ3MgaGVhZGVyLgotCSAqIAotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgZWxlbWVudHMuCi0JICovCi0JcHVibGljIEVsZW1lbnRbXSBnZXRIZWFkZXJDb250ZW50KCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBib2R5IGVsZW1lbnQgb2YgdGhpcyBtZXNzYWdlLiAgRm9yIGFuIFJQQyBzdHlsZSBtZXNzYWdlLCB0aGUgZmlyc3QgY2hpbGQKLQkgKiBlbGVtZW50IG9mIHRoZSBib2R5IHNob3VsZCBiZSB0aGUgUlBDIHdyYXBwZXIgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gYm9keSBUaGUgYm9keSBlbGVtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJvZHkoRWxlbWVudCBib2R5KTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGJvZHkgb2YgdGhpcyBtZXNzYWdlLiAgVGhlIGRlZXAgcGFyYW1ldGVyIGRpY3RhdGVzIHdoZXRoZXIKLQkgKiB0aGUgbWV0aG9kIHJldHVybnMgdGhlIHdob2xlIGJvZHkgd2l0aCBhbGwgaXRzIGRlc2NlbmRhbnRzIGVsZW1lbnRzIG9yIGp1c3QgdGhlCi0JICogYm9keS4gIEZvciBhbiBSUEMgc3R5bGUgbWVzc2FnZSwgdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgb2YgdGhlIAotCSAqIGJvZHkgc2hvdWxkIGJlIHRoZSBSUEMgd3JhcHBlciBlbGVtZW50LCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGUgZGVlcAotCSAqIHBhcmFtZXRlci4KLQkgKiAKLQkgKiBAcGFyYW0gZGVlcCBJZiB0cnVlLCB0aGUgYm9keSBhbmQgaXRzIGRlc2NlbmRhbnRzIGFyZSByZXR1cm5lZCwgb3RoZXJ3aXNlIG9ubHkKLQkgKiB0aGUgYm9keSAoYW5kIHRoZSBSUEMgd3JhcHBlciBlbGVtZW50IGlmIHRoZSBtZXNzYWdlIGlzIFJQQyBzdHlsZSkgaXMgcmV0dXJuZWQuCi0JICogQHJldHVybiBBbiBlbGVtZW50LgotCSAqLwkKLQlwdWJsaWMgRWxlbWVudCBnZXRCb2R5KGJvb2xlYW4gZGVlcCk7Ci0KLQkvKioKLQkgKiBTZXRzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHRoYXQgZ29lcyBpbnRvIHRoZSBtZXNzYWdlJ3MgYm9keS4gIEZvciBhbiBSUEMgc3R5bGUKLQkgKiBtZXNzYWdlLCB0aGUgYm9keSBjb250ZW50cyBhcmUgdGhlIGVsZW1lbnRzIGluc2lkZSB0aGUgUlBDIHdyYXBwZXIgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gYm9keUNvbnRlbnQgQW4gYXJyYXkgb2YgZWxlbWVudHMuCi0JICovCi0JcHVibGljIHZvaWQgc2V0Qm9keUNvbnRlbnQoRWxlbWVudFtdIGJvZHlDb250ZW50KTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGFycmF5IG9mIGVsZW1lbnRzIHRoYXQgYXJlIGluc2lkZSB0aGUgbWVzc2FnZSdzIGJvZHkuICBGb3IgYW4gUlBDIHN0eWxlCi0JICogbWVzc2FnZSwgdGhlIGJvZHkgY29udGVudHMgYXJlIHRoZSBlbGVtZW50cyBpbnNpZGUgdGhlIFJQQyB3cmFwcGVyIGVsZW1lbnQuCi0JICogCi0JICogQHJldHVybiBBbiBhcnJheSBvZiBlbGVtZW50cy4KLQkgKi8KLQlwdWJsaWMgRWxlbWVudFtdIGdldEJvZHlDb250ZW50KCk7Ci0KLQkvKioKLQkgKiBTZXQgdGhlIGZhdWx0IGVsZW1lbnQgZm9yIHRoaXMgbWVzc2FnZSwgaWYgYW55LgotCSAqIAotCSAqIEBwYXJhbSBmYXVsdCBBIGZhdWx0IGVsZW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0RmF1bHQoRWxlbWVudCBmYXVsdCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmYXVsdCBlbGVtZW50LCBpZiBhbnkuCi0JICogCi0JICogQHJldHVybiBUaGUgZmF1bHQgZWxlbWVudCBvciBudWxsIGlmIG5vIGZhdWx0IGhhcyBvY2N1cnJlZC4KLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBnZXRGYXVsdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgWE1MIHNlcmlhbGl6ZWQgZm9ybSBvZiB0aGlzIElTT0FQTWVzc2FnZS4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIFhNTCBzdHJpbmcuCi0JICogQHNlZSBJU2VyaWFsaXplcgotCSAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9YTUwoKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUFRyYW5zcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBUcmFuc3BvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QyYTNmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUFRyYW5zcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotLyoqCi0gKiBUaGUgSVNPQVBUcmFuc3BvcnQgaXMgdGhlIGNvcmUgcGllY2Ugb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0cmFuc3BvcnQgc3RhY2suCi0gKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgaW52b2tpbmcgdGhlIHdlYiBzZXJ2aWNlIGFuZCBpdCBhbHNvIGFjdHMgYXMgdGhlIGZhY3RvcnkgZm9yCi0gKiBjcmVhdGluZyBJU2VyaWFsaWVyLCBJRGVzZXJpYWxpemVyLCBhbmQgSVNPQVBNZXNzYWdlIGluc3RhbmNlcyB3aGljaCBtYWtlIHVwIHRoZQotICogcmVzdCBvZiB0aGUgV1NFIHRyYW5zcG9ydC4KLSAqLwotcHVibGljIGludGVyZmFjZSBJU09BUFRyYW5zcG9ydCB7CQkKLQotCS8qKgotCSAqIEZhY3RvcnkgbWV0aG9kIGZvciBJU2VyaWFsaXplci4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIGluc3RhbmNlIG9mIElTZXJpYWxpemVyLgotCSAqLwotCXB1YmxpYyBJU2VyaWFsaXplciBuZXdTZXJpYWxpemVyKCk7Ci0JCi0JLyoqCi0JICogRmFjdG9yeSBtZXRob2QgZm9yIElEZXNlcmlhbGl6ZXIuCi0JICogCi0JICogQHJldHVybiBBbiBpbnN0YW5jZSBvZiBJRGVzZXJpYWxpemVyLgotCSAqLwotCXB1YmxpYyBJRGVzZXJpYWxpemVyIG5ld0Rlc2VyaWFsaXplcigpOwotCQotCS8qKgotCSAqIEZhY3RvcnkgbWV0aG9kIGZvciBJU09BUE1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIGNvbnRleHQgTWVzc2FnZUNvbnRleHQgZW5jYXBzdWxhdGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd2ViIHNlcnZpY2Ugb3BlcmF0aW9uLgotCSAqIEByZXR1cm4gQW4gaW5zdGFuY2Ugb2YgSVNPQVBNZXNzYWdlLgotCSAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uCi0JICovCi0JcHVibGljIElTT0FQTWVzc2FnZSBuZXdNZXNzYWdlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogSW52b2tlcyB0aGUgd2ViIHNlcnZpY2Ugb3BlcmF0aW9uIGJ5IHNlbmRpbmcgdGhlIFNPQVAgbWVzc2FnZSwgdGhlbiBwYXJzaW5nIHRoZSByZXN1bHRzCi0JICogaW50byBhIHJlc3BvbnNlIElTT0FQTWVzc2FnZS4KLQkgKiAKLQkgKiBAcGFyYW0gdXJsIFRoZSBlbmRwb2ludCBVUkwuCi0JICogQHBhcmFtIHVzZXJuYW1lIFVzZXJuYW1lIHRvIHVzZSBmb3IgYmFzaWMgYXV0aCBwcm90ZWN0ZWQgZW5kcG9pbnRzLiAgU2V0IHRvIG51bGwgaWYgbm90IHJlcXVpcmVkLiAgCi0JICogQHBhcmFtIHBhc3N3b3JkIFBhc3N3b3JkIHRvIHVzZSBmb3IgYmFzaWMgYXV0aCBwcm90ZWN0ZWQgZW5kcG9pbnRzLiAgU2V0IHRvIG51bGwgaWYgbm90IHJlcXVpcmVkLgotCSAqIEBwYXJhbSBtZXNzYWdlIFRoZSBTT0FQIHJlcXVlc3QgbWVzc2FnZS4KLQkgKiBAcmV0dXJuIEFuIElTT0FQTWVzYWdlIHJlcHJlc2VudGluZyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgd2ViIHNlcnZpY2UgaW52b2NhdGlvbi4KLQkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBJU09BUE1lc3NhZ2Ugc2VuZChTdHJpbmcgdXJsLCBTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUFRyYW5zcG9ydFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUFRyYW5zcG9ydFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZTNkYzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBUcmFuc3BvcnRQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotLyoqCi0gKiBJU09BUFRyYW5zcG9ydFByb3ZpZGVyIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcgSVNPQVBUcmFuc3BvcnQgb2JqZWN0cy4KLSAqIEFueW9uZSB3aG8gd2lzaGVzIHRvIGV4dGVuZCB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLndzZVRyYW5zcG9ydFByb3ZpZGVyCi0gKiBleHRlbnNpb24tcG9pbnQgbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIGludGVyZmFjZS4gCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVNPQVBUcmFuc3BvcnRQcm92aWRlciB7Ci0KLQkvKioKLQkgKiBNZXRob2QgZm9yIG9idGFpbmluZyBhIG5ldyBJU09BUFRyYW5zcG9ydCBmcm9tIHRoaXMgcHJvdmlkZXIuCi0JICogVGhpcyBtZXRob2Qgc2hvdWxkIG5ldmVyIHJldHVybiBudWxsLgotCSAqIAotCSAqIEByZXR1cm4gQSBuZXcgSVNPQVBUcmFuc3BvcnQgb2JqZWN0LgotCSAqLwotCXB1YmxpYyBJU09BUFRyYW5zcG9ydCBuZXdUcmFuc3BvcnQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTZXJpYWxpemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGI2OWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi0vKioKLSAqIFRoZSBJU2VyaWFsaXplciBpcyByZXNwb25zaWJsZSBmb3IgdGFraW5nIGFuIElTT0FQTWVzc2FnZSBhbmQgc2VyaWFsaXppbmcgaXQKLSAqIGludG8gYW4gWE1MIHN0cmluZy4KLSAqLwotcHVibGljIGludGVyZmFjZSBJU2VyaWFsaXplciB7Ci0KLQkvKioKLQkgKiBTZXJpYWxpemUgdGhlIElTT0FQTWVzc2FnZSBpbnRvIGFuIFhNTCBzdHJpbmcuICBUaGUgcGFydCBwYXJhbWV0ZXIgdGVsbHMgdGhlIG1ldGhvZAotCSAqIHdoaWNoIHBhcnQgb2YgdGhlIG1lc3NhZ2UgKHRoZSBlbnZlbG9wZSBvciB0aGUgY29udGVudHMgb2YgdGhlIGhlYWRlciBvciBib2R5KSB0bwotCSAqIHNlcmlhbGl6ZS4gIE5vdGUgdGhhdCAiY29udGVudHMiIHJlZmVycyB0byB0aGUgbGlzdCBvZiBlbGVtZW50cyBpbnNpZGUgdGhlIGhlYWRlcgotCSAqIG9yIGJvZHksIGFuZCBub3QgdGhlIGhlYWRlciBvciBib2R5IGVsZW1lbnQgaXRzZWxmLgotCSAqIAotCSAqIEBwYXJhbSBwYXJ0IE9uZSBvZiB7QGxpbmsgSVNPQVBNZXNzYWdlI0VOVkVMT1BFfSwge0BsaW5rIElTT0FQTWVzc2FnZSNIRUFERVJfQ09OVEVOVH0sIG9yCi0JICoge0BsaW5rIElTT0FQTWVzc2FnZSNCT0RZX0NPTlRFTlR9LgotCSAqIEBwYXJhbSBtZXNzYWdlIFRoZSBJU09BUE1lc3NhZ2UgdG8gc2VyaWFsaXplLgotCSAqIEByZXR1cm4gQW4gWE1MIHN0cmluZy4gCi0JICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHNlcmlhbGl6ZShpbnQgcGFydCwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9NZXNzYWdlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvTWVzc2FnZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UzMjdjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9NZXNzYWdlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotLyoqCi0gKiBBIE1lc3NhZ2VDb250ZXh0IG9iamVjdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVzc2FnZSB0aGF0IGlzIHRvIGJlCi0gKiBzZW50IG9uIGEgd2ViIHNlcnZpY2UgaW52b2NhdGlvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgcGFzc2VkIHRvIHRoZQotICogSVNPQVBUcmFuc3BvcnQgc28gdGhhdCBpdCBjYW4gY29uc3RydWN0IGFuIGFwcHJvcHJpYXRlIElTT0FQTWVzc2FnZSB0bwotICogaGFuZGxlIHRoZSBpbnZvY2F0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUNvbnRleHQgewotCQotCXByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCXByaXZhdGUgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgYmluZGluZ1Byb3RvY29sOwotCXByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uOwkKLQlwcml2YXRlIGJvb2xlYW4gZG9jdW1lbnRTdHlsZTsJCQkKLQkKLQkvKioKLQkgKiBTZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBXU0RMIGRlZmluaXRpb24uCi0JICogCi0JICogQHBhcmFtIGRlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBXU0RMIGRlZmluaXRpb24uCi0JICogCi0JICogQHJldHVybiBUaGUgV1NETCBkZWZpbml0aW9uLgotCSAqLwotCXB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB7Ci0JCXJldHVybiBkZWZpbml0aW9uOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBiaW5kaW5nIGV4dGVuc2liaWxpdHkgZWxlbWVudCBpbiB0aGUgV1NETCBkb2N1bWVudC4KLQkgKiBGb3IgYSB3ZWIgc2VydmljZSB0aGF0IHVzZXMgdGhlIFNPQVAgcHJvdG9jb2wsIHRoaXMgd2lsbCBiZSBhbiBpbnN0YW5jZSBvZgotCSAqIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nCi0JICogCi0JICogQHBhcmFtIGJpbmRpbmdQcm90b2NvbCBUaGUgYmluZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0QmluZGluZ1Byb3RvY29sKEV4dGVuc2liaWxpdHlFbGVtZW50IGJpbmRpbmdQcm90b2NvbCkgewotCQl0aGlzLmJpbmRpbmdQcm90b2NvbCA9IGJpbmRpbmdQcm90b2NvbDsJCQotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBiaW5kaW5nIGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBiaW5kaW5nIGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZ2V0QmluZGluZ1Byb3RvY29sKCkgewotCQlyZXR1cm4gYmluZGluZ1Byb3RvY29sOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50IGluIHRoZSBXU0RMIGRvY3VtZW50LgotCSAqIAotCSAqIEBwYXJhbSBiaW5kaW5nT3BlcmF0aW9uIFRoZSBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKSB7Ci0JCXRoaXMuYmluZGluZ09wZXJhdGlvbiA9IGJpbmRpbmdPcGVyYXRpb247Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGJpbmRpbmcgb3BlcmF0aW9uIGVsZW1lbnQuCi0JICogCi0JICogQHJldHVybiBUaGUgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKCkgewotCQlyZXR1cm4gYmluZGluZ09wZXJhdGlvbjsKLQl9CQkKLQkJCi0JLyoqCi0JICogU2V0cyB0aGUgZmxhZyBvbiB3aGV0aGVyIHRoZSBtZXNzYWdlIGNyZWF0ZWQgZnJvbSB0aGlzIE1lc3NhZ2VDb250ZXh0Ci0JICogaXMgZG9jdW1lbnQgc3R5bGUgb3Igbm90LgotCSAqIAotCSAqIEBwYXJhbSBkb2N1bWVudFN0eWxlIFRydWUgZm9yIGRvY3VtZW50IHN0eWxlLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIHZvaWQgc2V0RG9jdW1lbnRTdHlsZShib29sZWFuIGRvY3VtZW50U3R5bGUpIHsKLQkJdGhpcy5kb2N1bWVudFN0eWxlID0gZG9jdW1lbnRTdHlsZTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZG9jdW1lbnQgc3R5bGUgcHJvcGVydHkuCi0JICogCi0JICogQHJldHVybiBUaGUgZG9jdW1lbnQgc3R5bGUgcHJvcGVydHkuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNEb2N1bWVudFN0eWxlKCkgewotCQlyZXR1cm4gZG9jdW1lbnRTdHlsZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9TT0FQTWVzc2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvU09BUE1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlhNDFmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9TT0FQTWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0vKioKLSAqIFRoaXMgaXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBJU09BUE1lc3NhZ2UgaW50ZXJmYWNlIHRoYXQgZXh0ZW5kZXJzIG9mIHRoZSBXZWIKLSAqIFNlcnZpY2VzIEV4cGxvcmVyIHRyYW5zcG9ydCBjYW4gdXNlIGlmIHRoZXkgZG8gbm90IHdpc2ggdG8gaW1wbGVtZW50IHRoZWlyIG93biBtZXNzYWdlLiAgCi0gKiBUaGlzIGNsYXNzIGlzICBpbXBsZW1lbnRlZCBhcyBhIGNvbGxlY3Rpb24gb2YgbG9vc2UgcGllY2VzIG9mIHRoZSBTT0FQIG1lc3NhZ2UsIGFuZCBlYWNoIAotICogcGllY2UgbXVzdCBiZSBzZXQgaW5kaXZpZHVhbGx5IChmb3IgZXhhbXBsZSwgc2V0dGluZyB0aGUgZW52ZWxvcGUgZWxlbWVudCB3aWxsIG5vdCAKLSAqIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGUgdGhlIGhlYWRlciBvciBib2R5IGVsZW1lbnRzKS4KLSAqIDxici8+Ci0gKiA8YnIvPgotICogVGhpcyBjbGFzcyBkb2VzIG5vdCBrbm93IGhvdyB0byBzZXJpYWxpemUgaXRzZWxmLiAgSXQgZGVwZW5kcyBvbiBhbiBJU2VyaWFsaXplciBwcm92aWRlZCBieQotICogdGhlIHRyYW5zcG9ydCBleHRlbmRlci4gCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBTT0FQTWVzc2FnZSBpbXBsZW1lbnRzIElTT0FQTWVzc2FnZSB7Ci0JCi0JcHJpdmF0ZSBNZXNzYWdlQ29udGV4dCBjb250ZXh0OwotCXByaXZhdGUgSVNlcmlhbGl6ZXIgc2VyaWFsaXplcjsKLQkJCi0JcHJpdmF0ZSBNYXAgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsJCi0JCi0JcHJpdmF0ZSBFbGVtZW50IGVudmVsb3BlID0gbnVsbDsKLQkKLQlwcml2YXRlIEVsZW1lbnQgaGVhZGVyID0gbnVsbDsKLQlwcml2YXRlIEVsZW1lbnRbXSBoZWFkZXJDb250ZW50ID0gbnVsbDsKLQkKLQlwcml2YXRlIEVsZW1lbnQgYm9keSA9IG51bGw7Ci0JcHJpdmF0ZSBFbGVtZW50W10gYm9keUNvbnRlbnQgPSBudWxsOwkKLQkJCi0JcHJpdmF0ZSBFbGVtZW50IGZhdWx0ID0gbnVsbDsKLQkJCi0JcHJpdmF0ZSBTdHJpbmcgeG1sID0gbnVsbDsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKiAKLQkgKiBAcGFyYW0gY29udGV4dCBUaGUgTWVzc2FnZUNvbnRleHQuCi0JICogQHBhcmFtIHNlcmlhbGl6ZXIgQW4gSVNlcmlhbGl6ZXIgdG8gdXNlIHRvIHNlcmlhbGl6ZSB0aGlzIG1lc3NhZ2UuCi0JICovCi0JcHVibGljIFNPQVBNZXNzYWdlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQsIElTZXJpYWxpemVyIHNlcmlhbGl6ZXIpIHsKLQkJdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLQkJdGhpcy5zZXJpYWxpemVyID0gc2VyaWFsaXplcjsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjZ2V0TWVzc2FnZUNvbnRleHQoKQotCSAqLwotCXB1YmxpYyBNZXNzYWdlQ29udGV4dCBnZXRNZXNzYWdlQ29udGV4dCgpIHsKLQkJcmV0dXJuIGNvbnRleHQ7Ci0JfQotCQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNzZXRQcm9wZXJ0eShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBrZXksIE9iamVjdCB2YWx1ZSkgewotCQlwcm9wZXJ0aWVzLnB1dChrZXksIHZhbHVlKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjZ2V0UHJvcGVydHkoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5KFN0cmluZyBrZXkpIHsKLQkJcmV0dXJuIHByb3BlcnRpZXMuZ2V0KGtleSk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldE5hbWVzcGFjZVRhYmxlKGphdmEudXRpbC5NYXApCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldE5hbWVzcGFjZVRhYmxlKE1hcCBuYW1lc3BhY2VUYWJsZSkgewotCQlpZiAobmFtZXNwYWNlVGFibGUgPT0gbnVsbCB8fCBlbnZlbG9wZSA9PSBudWxsKQotCQkJcmV0dXJuOwotCQotCQlJdGVyYXRvciBpdGVyID0gbmFtZXNwYWNlVGFibGUuZW50cnlTZXQoKS5pdGVyYXRvcigpOwotCQkKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlNYXAuRW50cnkgZW50cnkgPSAoTWFwLkVudHJ5KSBpdGVyLm5leHQoKTsKLQkJCVN0cmluZyBuYW1lID0gInhtbG5zOiIgKyBlbnRyeS5nZXRWYWx1ZSgpOwkJCQotCQkJZW52ZWxvcGUuc2V0QXR0cmlidXRlKG5hbWUsIGVudHJ5LmdldEtleSgpLnRvU3RyaW5nKCkpOwkJCQotCQl9Ci0JCQotCQl4bWwgPSBudWxsOwotCX0KLQkKLQkvKgotCSAqIElmIHRoZSBhdHRyaWJ1dGUgaXMgYSBuYW1lc3BhY2UgZGVjbGFyYXRpb24sIHRoZSBuYW1lc3BhY2UgcHJlZml4IGlzIHJldHVybmVkLgotCSAqIE90aGVyd2lzZSBudWxsIGlzIHJldHVybmVkLgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldE5TUHJlZml4KEF0dHIgYXR0cmlidXRlKSB7Ci0JCVN0cmluZyBuYW1lID0gYXR0cmlidXRlLmdldE5hbWUoKTsKLQkJaWYgKG5hbWUuc3RhcnRzV2l0aCgieG1sbnM6IikpCi0JCQlyZXR1cm4gbmFtZS5zdWJzdHJpbmcoNik7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNnZXROYW1lc3BhY2VUYWJsZSgpCi0JICovCi0JcHVibGljIE1hcCBnZXROYW1lc3BhY2VUYWJsZSgpIHsKLQkJCi0JCUhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQkJCi0JCWlmIChlbnZlbG9wZSAhPSBudWxsKSB7Ci0JCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGVudmVsb3BlLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJQXR0ciBhdHRyaWJ1dGUgPSAoQXR0cikgYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJCVN0cmluZyBwcmVmaXggPSBnZXROU1ByZWZpeChhdHRyaWJ1dGUpOwotCQkJCWlmIChwcmVmaXggIT0gbnVsbCkKLQkJCQkJbmFtZXNwYWNlVGFibGUucHV0KGF0dHJpYnV0ZS5nZXRWYWx1ZSgpLCBwcmVmaXgpOwotCQkJfQkJCQotCQl9CQkKLQkJCi0JCXJldHVybiBuYW1lc3BhY2VUYWJsZTsKLQl9Ci0JCi0JLyoKLQkgKiBBcHBlbmRzIGEgY2hpbGQgbm9kZSB0byBhIHBhcmVudCBub2RlLCB0YWtlcyBjYXJlIG9mIGltcG9ydGluZwotCSAqIHRoZSBjaGlsZCBub2RlIGlmIG5lY2Nlc3NhcnkuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFwcGVuZE5vZGUoTm9kZSBwYXJlbnQsIE5vZGUgY2hpbGQpIHsKLQkJaWYgKHBhcmVudCA9PSBudWxsIHx8IGNoaWxkID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCQotCQlEb2N1bWVudCBvd25lciA9IHBhcmVudC5nZXRPd25lckRvY3VtZW50KCk7Ci0JCQotCQlpZiAoIW93bmVyLmVxdWFscyhjaGlsZC5nZXRPd25lckRvY3VtZW50KCkpKQotCQkJY2hpbGQgPSBvd25lci5pbXBvcnROb2RlKGNoaWxkLCB0cnVlKTsKLQkJCi0JCXBhcmVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0JfQotCQotCS8qCi0JICogQWRkcyBhbiBhcnJheSBvZiBlbGVtZW50cyB0byB0aGUgcGFyZW50IGVsZW1lbnQgYXMgY2hpbGQgZWxlbWVudHMuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFwcGVuZENoaWxkcmVuKEVsZW1lbnQgcGFyZW50LCBFbGVtZW50W10gY2hpbGRyZW4pIHsKLQkJaWYgKHBhcmVudCA9PSBudWxsIHx8IGNoaWxkcmVuID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCQotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAoY2hpbGRyZW5baV0gPT0gbnVsbCkKLQkJCQljb250aW51ZTsKLQkJCWFwcGVuZE5vZGUocGFyZW50LCBjaGlsZHJlbltpXSk7Ci0JCX0KLQl9CQkKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNzZXRFbnZlbG9wZShvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRFbnZlbG9wZShFbGVtZW50IGVudmVsb3BlKSB7Ci0JCWlmIChlbnZlbG9wZSA9PSBudWxsKQotCQkJdGhpcy5lbnZlbG9wZSA9IGVudmVsb3BlOwotCQllbHNlCi0JCQl0aGlzLmVudmVsb3BlID0gKEVsZW1lbnQpIGVudmVsb3BlLmNsb25lTm9kZShmYWxzZSk7Ci0JCQkJCQotCQl4bWwgPSBudWxsOwotCX0KLQkJCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjZ2V0RW52ZWxvcGUoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBnZXRFbnZlbG9wZShib29sZWFuIGRlZXApIHsKLQkJaWYgKCFkZWVwKQotCQkJcmV0dXJuIGVudmVsb3BlOwotCQkKLQkJc3luY2hyb25pemVkICh0aGlzKSB7Ci0JCQlpZiAoZW52ZWxvcGUgPT0gbnVsbCkKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCQotCQkJRWxlbWVudCBjbG9uZWRFbnZlbG9wZSA9IChFbGVtZW50KSBlbnZlbG9wZS5jbG9uZU5vZGUoZmFsc2UpOwotCQkJCi0JCQlpZiAoaGVhZGVyQ29udGVudCAhPSBudWxsICYmIGhlYWRlckNvbnRlbnQubGVuZ3RoID4gMCkKLQkJCQlhcHBlbmROb2RlKGNsb25lZEVudmVsb3BlLCBnZXRIZWFkZXIodHJ1ZSkpOwotCQkJCQotCQkJYXBwZW5kTm9kZShjbG9uZWRFbnZlbG9wZSwgZ2V0Qm9keSh0cnVlKSk7Ci0JCQkKLQkJCXJldHVybiBjbG9uZWRFbnZlbG9wZTsJCi0JCX0KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2Ujc2V0SGVhZGVyKG9yZy53M2MuZG9tLkVsZW1lbnQpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldEhlYWRlcihFbGVtZW50IGhlYWRlcikgewotCQlpZiAoaGVhZGVyID09IG51bGwpCi0JCQl0aGlzLmhlYWRlciA9IG51bGw7CQkJCi0JCWVsc2UKLQkJCXRoaXMuaGVhZGVyID0gKEVsZW1lbnQpIGhlYWRlci5jbG9uZU5vZGUoZmFsc2UpOwotCi0JCXhtbCA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEhlYWRlcihib29sZWFuKQotCSAqLwotCXB1YmxpYyBFbGVtZW50IGdldEhlYWRlcihib29sZWFuIGRlZXApIHsKLQkJaWYgKCFkZWVwKQotCQkJcmV0dXJuIGhlYWRlcjsKLQkJCi0JCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJaWYgKGhlYWRlciA9PSBudWxsKQotCQkJCXJldHVybiBudWxsOwotCQkJCi0JCQlFbGVtZW50IGNsb25lZEhlYWRlciA9IChFbGVtZW50KSBoZWFkZXIuY2xvbmVOb2RlKGZhbHNlKTsKLQkJCWFwcGVuZENoaWxkcmVuKGNsb25lZEhlYWRlciwgaGVhZGVyQ29udGVudCk7CQkJCQotCQkJcmV0dXJuIGNsb25lZEhlYWRlcjsKLQkJfQkJCQkKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2Ujc2V0SGVhZGVyQ29udGVudChvcmcudzNjLmRvbS5FbGVtZW50W10pCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldEhlYWRlckNvbnRlbnQoRWxlbWVudFtdIGhlYWRlckNvbnRlbnQpIHsKLQkJdGhpcy5oZWFkZXJDb250ZW50ID0gaGVhZGVyQ29udGVudDsKLQkJeG1sID0gbnVsbDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjZ2V0SGVhZGVyQ29udGVudCgpCi0JICovCi0JcHVibGljIEVsZW1lbnRbXSBnZXRIZWFkZXJDb250ZW50KCkgewotCQlyZXR1cm4gaGVhZGVyQ29udGVudDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2Ujc2V0Qm9keShvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRCb2R5KEVsZW1lbnQgYm9keSkgewkJCi0JCWlmIChib2R5ID09IG51bGwpCi0JCQl0aGlzLmJvZHkgPSBudWxsOwotCQllbHNlIHsKLQkJCXRoaXMuYm9keSA9IChFbGVtZW50KSBib2R5LmNsb25lTm9kZShmYWxzZSk7Ci0JCQkKLQkJCWlmICghY29udGV4dC5pc0RvY3VtZW50U3R5bGUoKSAmJiBmYXVsdCA9PSBudWxsKSB7Ci0JCQkJTm9kZUxpc3QgY2hpbGRFbGVtZW50cyA9IGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLQkJCQlpZiAoY2hpbGRFbGVtZW50cy5nZXRMZW5ndGgoKSA+IDApCi0JCQkJCXRoaXMuYm9keS5hcHBlbmRDaGlsZChjaGlsZEVsZW1lbnRzLml0ZW0oMCkuY2xvbmVOb2RlKGZhbHNlKSk7Ci0JCQl9Ci0JCX0JCQotCQl4bWwgPSBudWxsOwotCX0KLQkJCQkJCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjZ2V0Qm9keShib29sZWFuKQotCSAqLwotCXB1YmxpYyBFbGVtZW50IGdldEJvZHkoYm9vbGVhbiBkZWVwKSB7Ci0JCWlmICghZGVlcCkKLQkJCXJldHVybiBib2R5OwotCQkKLQkJc3luY2hyb25pemVkICh0aGlzKSB7Ci0JCQlpZiAoYm9keSA9PSBudWxsKQotCQkJCXJldHVybiBudWxsOwotCQkKLQkJCS8vIGNvcHkgdGhlIHJwYyB3cmFwcGVyIGVsZW1lbnQgYXMgd2VsbCwgaWYgYW55Ci0JCQlFbGVtZW50IGNsb25lZEJvZHkgPSAoRWxlbWVudCkgYm9keS5jbG9uZU5vZGUodHJ1ZSk7CQkKLQkJCQotCQkJaWYgKGZhdWx0ICE9IG51bGwpCi0JCQkJYXBwZW5kTm9kZShjbG9uZWRCb2R5LCBmYXVsdCk7Ci0JCQllbHNlIHsKLQkJCQlFbGVtZW50IHRhcmdldCA9IGNsb25lZEJvZHk7Ci0JCQkJCi0JCQkJLy8gY2hlY2sgZm9yIHJwYyB3cmFwcGVyCi0JCQkJaWYgKGNsb25lZEJvZHkuZ2V0Rmlyc3RDaGlsZCgpICE9IG51bGwpCi0JCQkJCXRhcmdldCA9IChFbGVtZW50KSBjbG9uZWRCb2R5LmdldEZpcnN0Q2hpbGQoKTsKLQkJCQkKLQkJCQlhcHBlbmRDaGlsZHJlbih0YXJnZXQsIGJvZHlDb250ZW50KTsKLQkJCX0KLQkJCQkKLQkJCXJldHVybiBjbG9uZWRCb2R5OwkJCi0JCX0KLQl9Ci0JCQkJCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2Ujc2V0Qm9keUNvbnRlbnQob3JnLnczYy5kb20uRWxlbWVudFtdKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRCb2R5Q29udGVudChFbGVtZW50W10gYm9keUNvbnRlbnQpIHsKLQkJdGhpcy5ib2R5Q29udGVudCA9IGJvZHlDb250ZW50OwotCQlpZiAoYm9keUNvbnRlbnQgIT0gbnVsbCkKLQkJCWZhdWx0ID0gbnVsbDsKLQkJeG1sID0gbnVsbDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjZ2V0Qm9keUNvbnRlbnQoKQotCSAqLwotCXB1YmxpYyBFbGVtZW50W10gZ2V0Qm9keUNvbnRlbnQoKSB7Ci0JCXJldHVybiBib2R5Q29udGVudDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2Ujc2V0RmF1bHQob3JnLnczYy5kb20uRWxlbWVudCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0RmF1bHQoRWxlbWVudCBmYXVsdCkgewotCQl0aGlzLmZhdWx0ID0gZmF1bHQ7Ci0JCWlmIChmYXVsdCAhPSBudWxsKSB7Ci0JCQlpZiAoYm9keSAhPSBudWxsICYmIGJvZHkuZ2V0Rmlyc3RDaGlsZCgpICE9IG51bGwpCi0JCQkJYm9keS5yZW1vdmVDaGlsZChib2R5LmdldEZpcnN0Q2hpbGQoKSk7Ci0JCQlib2R5Q29udGVudCA9IG51bGw7Ci0JCX0KLQkJeG1sID0gbnVsbDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjZ2V0RmF1bHQoKQotCSAqLwotCXB1YmxpYyBFbGVtZW50IGdldEZhdWx0KCkgewotCQlyZXR1cm4gZmF1bHQ7Ci0JfQotCQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSN0b1hNTCgpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBTdHJpbmcgdG9YTUwoKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkJaWYgKHhtbCA9PSBudWxsKQotCQkJeG1sID0gc2VyaWFsaXplci5zZXJpYWxpemUoRU5WRUxPUEUsIHRoaXMpOwotCQlyZXR1cm4geG1sOwkJCi0JfQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9UcmFuc3BvcnRFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L1RyYW5zcG9ydEV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2FjMmZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L1RyYW5zcG9ydEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotLyoqCi0gKiBBbiBnZW5lcmFsIHB1cnBvc2UgZXhjZXB0aW9uIHRvIGluZGljYXRlIGEgcHJvYmxlbSBoYXMgb2NjdXJyZWQgd2hlbgotICogaW52b2tpbmcgYSB3ZWIgc2VydmljZS4KLSAqLwotcHVibGljIGNsYXNzIFRyYW5zcG9ydEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24gewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTE1MDIyNDcyMzA3MjYwMjE0MDNMOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UgQSBtZXNzYWdlIGFib3V0IHRoZSBwcm9ibGVtIHRoYXQgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIFRyYW5zcG9ydEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgewotCQlzdXBlcihtZXNzYWdlKTsKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgdGhhdCBhY2NlcHRzIGEgbWVzc2FnZSBhbmQgYSBjYXVzZS4KLQkgKiAKLQkgKiBAcGFyYW0gbWVzc2FnZSBBIG1lc3NhZ2UgYWJvdXQgdGhlIHByb2JsZW0gdGhhdCBvY2N1cnJlZC4KLQkgKiBAcGFyYW0gY2F1c2UgVGhlIGNhdXNlIGZvciB0aGlzIGV4Y2VwdGlvbi4KLQkgKi8KLQlwdWJsaWMgVHJhbnNwb3J0RXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgY2F1c2UpIHsKLQkJc3VwZXIobWVzc2FnZSwgY2F1c2UpOwotCX0KLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciB0aGF0IGFjY2VwdHMgYSBjYXVzZS4KLQkgKiAKLQkgKiBAcGFyYW0gY2F1c2UgVGhlIGNhdXNlIGZvciB0aGlzIGV4Y2VwdGlvbi4KLQkgKi8KLQlwdWJsaWMgVHJhbnNwb3J0RXhjZXB0aW9uKFRocm93YWJsZSBjYXVzZSkgewotCQlzdXBlcihjYXVzZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL2V4cGxvcmVyLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvZXhwbG9yZXIucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ5MmM2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvZXhwbG9yZXIucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLVRJVExFX1dTRVhQTE9SRVI9V2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0KLSMgVHJlZSBOb2RlcwotQUxUX09QRU49T3BlbgotQUxUX0NMT1NFPUNsb3NlCi0KLSMgUGVyc3BlY3RpdmUgVG9vbGJhcgotQUxUX0JBQ0s9QmFjawotQUxUX0ZPUldBUkQ9Rm9yd2FyZAotQUxUX0FDVElPTl9FTkdJTkU9QWN0aW9uIFJlY29yZGVyCi1BTFRfVURESV9QRVJTUEVDVElWRT1VRERJIFBhZ2UKLUFMVF9XU0lMX1BFUlNQRUNUSVZFPVdTSUwgUGFnZQotQUxUX1dTRExfUEVSU1BFQ1RJVkU9V1NETCBQYWdlCi1BTFRfRkFWT1JJVEVTX1BFUlNQRUNUSVZFPUZhdm9yaXRlcwotCi0jIFRvb2xiYXJzCi1BTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFPURvdWJsZSBDbGljayB0byBNYXhpbWl6ZQotQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFPURvdWJsZSBDbGljayB0byBSZXN0b3JlCi0KLSMgU2V0RGVmYXVsdFZpZXdUb29sCi1BTFRfQkFDS19UT19UT1A9QmFjayB0byB0b3AKLQotIyBDb21tb24gQWN0aW9ucwotQUxUX1JFRlJFU0g9UmVmcmVzaAotQUxUX0NMRUFSPUNsZWFyCi1BTFRfUkVTVUxUUz1SZXN1bHRzCi0KLSMgQ29tbW9uIExhYmVscwotQUxUX05BVklHQVRPUj1OYXZpZ2F0b3IKLUFMVF9BQ1RJT05TPUFjdGlvbnMKLUFMVF9TVEFUVVM9U3RhdHVzCi1BTFRfT1RIRVJfQUNUSU9OUz1PdGhlciBBY3Rpb25zCi1GT1JNX0JVVFRPTl9HTz0mbmJzcDsmbmJzcDtHbyZuYnNwOyZuYnNwOwotRk9STV9CVVRUT05fUkVTRVQ9UmVzZXQKLUZPUk1fQlVUVE9OX0NBTkNFTD1DYW5jZWwKLUZPUk1fTEFCRUxfQUNUSU9OUz1BY3Rpb25zCi1GT1JNX0xBQkVMX0FDVElPTlNfTk9ORT1Ob25lCi0KLSMgUGxhY2Vob2xkZXIgZm9yIGJsYW5rIHRhYmxlIGVudHJpZXMKLVRBQkxFX0JMQU5LX1BMQUNFSE9MREVSPS0tCi0KLSMgQ29tbW9uIEZvcm0gQ29udHJvbCBUaXRsZXMKLUZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWD1TZWxlY3QgYWxsCi1GT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1g9U2VsZWN0IHJvdwotCi0jIENvbW1vbiBNZXNzYWdlcwotTVNHX0VSUk9SX1VORVhQRUNURUQ9SVdBQjAxMzVFIEFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkLgotTVNHX0VSUk9SX05PX0FDVElPTl9TRUxFQ1RFRD1JV0FCMDEyNEUgU2VsZWN0IGFuIGFjdGlvbi4KLU1TR19FUlJPUl9OT19OT0RFX1NFTEVDVEVEPUlXQUIwMTI1RSBTZWxlY3QgYSBub2RlLgotTVNHX1NVQk1JVF9JTl9QUk9HUkVTUz1QbGVhc2Ugd2FpdC4gVGhlIG9wZXJhdGlvbiBpcyBzdGlsbCBpbiBwcm9ncmVzcy4KLU1TR19MT0FEX0lOX1BST0dSRVNTPVBsZWFzZSB3YWl0IHdoaWxlIHRoZSBmb3JtIGxvYWRzLi4uCi0KLSNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uCi1BTFRfTEFVTkNIX1dFQl9TRVJWSUNFX1dJWkFSRD1MYXVuY2ggV2ViIFNlcnZpY2UgV2l6YXJkCi1GT1JNX0xBQkVMX0NIT09TRV9XSVpBUkQ9U2VsZWN0IGEgd2l6YXJkIHRvIGxhdW5jaDoKLUZPUk1fUkFESU9fV0VCX1NFUlZJQ0VfQ0xJRU5UX1dJWkFSRD1XZWIgU2VydmljZSBDbGllbnQKLUZPUk1fUkFESU9fV0VCX1NFUlZJQ0VfU0tFTEVUT05fV0laQVJEPVdlYiBTZXJ2aWNlIFNrZWxldG9uCi1NU0dfRVJST1JfV0laQVJEX0FMUkVBRFlfUlVOTklORz1JV0FCMDEyNkUgQSBXZWIgc2VydmljZSB3aXphcmQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4gIEZpbmlzaCB3aXRoIHRoZSBleGlzdGluZyB3aXphcmQgYmVmb3JlIGxhdW5jaGluZyBhIG5ldyBvbmUuCi1NU0dfRVJST1JfV1NETF9VUkxfSVNfVU5SRUFDSEFCTEU9SVdBQjAxMjdFIFRoZSBXU0RMIGRvY3VtZW50IGlzIHVucmVhY2hhYmxlLgotCi0jIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbgotQUxUX1dTSUxfSU1QT1JUX1RPX0ZTPUltcG9ydCBXU0lMIFRvIEZpbGUgU3lzdGVtCi1BTFRfV1NETF9JTVBPUlRfVE9fRlM9SW1wb3J0IFdTREwgVG8gRmlsZSBTeXN0ZW0KLU1TR19FUlJPUl9SRVRSSUVWSU5HX1dTRExfRE9DPUlXQUIwMTI4RSBVbmFibGUgdG8gcmV0cmlldmUgV1NETCBkb2N1bWVudC4KLU1TR19FUlJPUl9SRVRSSUVWSU5HX1dTSUxfRE9DPUlXQUIwMTI5RSBVbmFibGUgdG8gcmV0cmlldmUgV1NJTCBkb2N1bWVudC4KLU1TR19JTVBPUlRfV1NETF9TVUNDRVNTRlVMPVdTREwgZG9jdW1lbnQgc3VjY2Vzc2Z1bGx5IGltcG9ydGVkLgotTVNHX0lNUE9SVF9XU0lMX1NVQ0NFU1NGVUw9V1NJTCBkb2N1bWVudCBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQuCi0KLSMgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24KLUFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0g9SW1wb3J0IFdTREwgVG8gd29ya2JlbmNoCi1GT1JNX0xBQkVMX0lNUE9SVF9UT19XT1JLQkVOQ0hfREVTQz1TZWxlY3QgYSB3b3JrYmVuY2ggcHJvamVjdCB0byBzYXZlIHRoZSBXU0RMIGZpbGUgaW50by4gWW91IG1heSBhbHNvIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlLgotV0VCX1BST0pFQ1RfTkFNRT1XZWIgcHJvamVjdDoKLVdPUktCRU5DSF9QUk9KRUNUX05BTUU9V29ya2JlbmNoIHByb2plY3Q6Ci1MQUJFTF9JTVBPUlRfV1NETD1JbXBvcnQgV1NETCBkb2N1bWVudAotTEFCRUxfSU1QT1JUX1RPX1dTSUw9SW1wb3J0IGFzIGEgc2VydmljZSByZWZlcmVuY2UgdG8gYSBXU0lMIGRvY3VtZW50Ci1JTVBPUlRFRF9XU0RMX0ZJTEVfTkFNRT1XU0RMIGZpbGUgbmFtZToKLVdTSUxfRklMRV9OQU1FPVdTSUwgZmlsZSBuYW1lOgotTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEPUNhbm5vdCBjcmVhdGUgdGhlIGZpbGUgIiUyIiByZWxhdGl2ZSB0byB0aGUgcGF0aCAiJTEiIGJlY2F1c2UgYXV0b21hdGljIGZpbGUgb3ZlcndyaXRpbmcgaGFzIG5vdCBiZWVuIGVuYWJsZWQuIERvIHlvdSB3YW50IHRvIGVuYWJsZSBpdCBmb3IgdGhpcyBmaWxlPwotTVNHX0VSUk9SX0lOVkFMSURfV09SS0JFTkNIX1BST0pFQ1Q9SVdBQjAxMzBFIFNlbGVjdCBhIHdvcmtiZW5jaCBwcm9qZWN0LgotTVNHX0VSUk9SX0lOVkFMSURfV1NETF9GSUxFX05BTUU9SVdBQjAxMzFFIEludmFsaWQgZmlsZSBuYW1lLgotTVNHX0VSUk9SX0lOVkFMSURfV1NJTF9GSUxFX05BTUU9SVdBQjA0NzBFIEludmFsaWQgV1NJTCBmaWxlIG5hbWUuCi1NU0dfRVJST1JfTk9fSU1QT1JUX09QVElPTl9TRUxFQ1RFRD1JV0FCMDQ3MUUgTm8gaW1wb3J0IG9wdGlvbiBpcyBzZWxlY3RlZC4gIFBsZWFzZSBjaG9vc2UgYXQgbGVhc3Qgb25lIGltcG9ydCBvcHRpb24uCi1NU0dfRVJST1JfV1JJVElOR19URU1QX0ZJTEVfVE9fRlM9SVdBQjAxMzJFIFVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgZmlsZS4KLU1TR19JTkZPX0lNUE9SVF9UT19XT1JLQkVOQ0hfU1VDQ0VTU0ZVTD1JV0FCMDMxNEkgJTEgd2FzIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCB0byB0aGUgd29ya2JlbmNoLgotTVNHX0lORk9fSU1QT1JUX1NFUlZJQ0VfUkVGX1RPX1dTSUxfU1VDQ0VTU0ZVTD1JV0FCMDQ3MkkgU2VydmljZSByZWZlcmVuY2Ugd2FzIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCB0byAlMS4KLQotIyBDaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbgotTVNHX0VSUk9SX0ZJTEVfQ0hFQ0tPVVRfRElTQUJMRUQ9Q2Fubm90IGNyZWF0ZSB0aGUgZmlsZSAiJTIiIHJlbGF0aXZlIHRvIHRoZSBwYXRoICIlMSIgYmVjYXVzZSBhdXRvbWF0aWMgZmlsZSBjaGVjayBvdXQgaGFzIG5vdCBiZWVuIGVuYWJsZWQuIERvIHlvdSB3YW50IHRvIGVuYWJsZSBpdCBmb3IgdGhpcyBmaWxlPwotCi0jIENsZWFyTm9kZUFjdGlvbgotTVNHX0lORk9fTk9ERV9DTEVBUkVEPUlXQUIwMTMzSSAlMSBjbGVhcmVkLgotCi0jIFRhYmxlIHR3aXN0ZWVzCi1BTFRfVFdJU1RfT1BFTkVEPUhpZGUKLUFMVF9UV0lTVF9DTE9TRUQ9RXhwYW5kCi0KLSMgV1NETCBCcm93c2VyCi1GT1JNX0xJTktfQlJPV1NFPUJyb3dzZS4uLgotVElUTEVfV1NETF9CUk9XU0VSPVdTREwgQnJvd3NlciAtICUxCi1GT1JNX0xBQkVMX1dTRExfU09VUkNFPVNlbGVjdCBhIFdTREwgc291cmNlOgotRk9STV9MQUJFTF9XU0RMX0NBVEVHT1JZPUNhdGVnb3J5Ci1GT1JNX0xBQkVMX1dTRExfQWxsPUFsbAotRk9STV9MQUJFTF9XU0RMX1NPVVJDRV9XRUJQUk9KRUNUUz1Xb3Jrc3BhY2UgUHJvamVjdHMKLUZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfRkFWT1JJVEVTPUZhdm9yaXRlcwotRk9STV9MQUJFTF9XRUJfUFJPSkVDVD1Xb3Jrc3BhY2UgUHJvamVjdAotRk9STV9MQUJFTF9XU0RMX1VSTD1XU0RMIFVSTAotRk9STV9CVVRUT05fUkVGUkVTSD1SZWZyZXNoCi1BTFRfV1NETF9CUk9XU0VSPVdTREwgQnJvd3NlcgotV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFUz1TZXJ2aWNlIEludGVyZmFjZXMKLVdTRExfVFlQRV9TRVJWSUNFUz1TZXJ2aWNlcwotCi0jIENhbGVuZGFyIEJyb3dzZXIKLVRJVExFX0NBTEVOREFSX0JST1dTRVI9Q2FsZW5kYXIgQnJvd3NlcgotIyAyIGNoYXJhY3RlciBhYmJyZXZpYXRpb25zIGZvciBkYXlzIG9mIHRoZSB3ZWVrLgotRk9STV9MQUJFTF9TSF9TVU5EQVk9U3UKLUZPUk1fTEFCRUxfU0hfTU9OREFZPU1vCi1GT1JNX0xBQkVMX1NIX1RVRVNEQVk9VHUKLUZPUk1fTEFCRUxfU0hfV0VETkVTREFZPVdlCi1GT1JNX0xBQkVMX1NIX1RIVVJTREFZPVRoCi1GT1JNX0xBQkVMX1NIX0ZSSURBWT1GcgotRk9STV9MQUJFTF9TSF9TQVRVUkRBWT1TYQotIyBNb250aHMgb2YgdGhlIHllYXIKLUZPUk1fTEFCRUxfTU9OVEg9TW9udGg6Ci1GT1JNX0xBQkVMX0pBTlVBUlk9SmFudWFyeQotRk9STV9MQUJFTF9GRUJSVUFSWT1GZWJydWFyeQotRk9STV9MQUJFTF9NQVJDSD1NYXJjaAotRk9STV9MQUJFTF9BUFJJTD1BcHJpbAotRk9STV9MQUJFTF9NQVk9TWF5Ci1GT1JNX0xBQkVMX0pVTkU9SnVuZQotRk9STV9MQUJFTF9KVUxZPUp1bHkKLUZPUk1fTEFCRUxfQVVHVVNUPUF1Z3VzdAotRk9STV9MQUJFTF9TRVBURU1CRVI9U2VwdGVtYmVyCi1GT1JNX0xBQkVMX09DVE9CRVI9T2N0b2JlcgotRk9STV9MQUJFTF9OT1ZFTUJFUj1Ob3ZlbWJlcgotRk9STV9MQUJFTF9ERUNFTUJFUj1EZWNlbWJlcgotRk9STV9MQUJFTF9ZRUFSPVllYXI6Ci1GT1JNX0xBQkVMX1RJTUU9VGltZToKLUZPUk1fTElOS19UT0RBWT1Ub2RheQotRk9STV9MSU5LX1BSRVZJT1VTX1lFQVI9PDwKLUZPUk1fTElOS19QUkVWSU9VU19NT05USD08Ci1GT1JNX0xJTktfTkVYVF9NT05USD0+Ci1GT1JNX0xJTktfTkVYVF9ZRUFSPT4+Ci1BTFRfUFJFVklPVVNfWUVBUj1QcmV2aW91cyBZZWFyCi1BTFRfUFJFVklPVVNfTU9OVEg9UHJldmlvdXMgTW9udGgKLUFMVF9ORVhUX01PTlRIPU5leHQgTW9udGgKLUFMVF9ORVhUX1lFQVI9TmV4dCBZZWFyCi1BTFRfVE9EQVk9VG9kYXkKLUFMVF9DQUxFTkRBUl9CUk9XU0VSPUNhbGVuZGFyIEJyb3dzZXIKLU1TR19FUlJPUl9JTlZBTElEX1RJTUVfRk9STUFUPUlXQUIwMzY4RSBUaW1lIHdhcyBub3QgZm9ybWF0dGVkIGFzIEhIOk1NOlNTWy5TU1NdLiBEbyB5b3Ugd2lzaCB0byB1c2UgdGhlIGN1cnJlbnQgdGltZSBpbnN0ZWFkPwotCi0jIEFjdGlvbiBlbmdpbmUKLVRJVExFX0FDVElPTl9SRUNPUkRFUj1BY3Rpb24gUmVjb3JkZXIKLUZPUk1fTEFCRUxfTU9ERT1Nb2RlOgotRk9STV9MQUJFTF9NT0RFX1BMQVk9UGxheQotRk9STV9MQUJFTF9NT0RFX1NUT1A9U3RvcAotRk9STV9MQUJFTF9NT0RFX1JFQ09SRD1SZWNvcmQKLUZPUk1fTEFCRUxfU0FWRT1TYXZlCi1GT1JNX0xBQkVMX1BMQVlfRklMRT1QbGF5IGZpbGU6Ci1NU0dfRVJST1JfSU5WQUxJRF9QTEFZX0ZJTEU9SVdBQjAzNjJFIEVudGVyIGEgcGxheSBmaWxlLgotCi0jIEZyYW1lIHRpdGxlcwotRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfV09SS0FSRUE9V2ViIFNlcnZpY2VzIEV4cGxvcmVyIEludGVybmFsIFdvcmsgQXJlYQotRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfVE9PTEJBUj1XZWIgU2VydmljZXMgRXhwbG9yZXIgVG9vbGJhcgotRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfQ09OVEVOVD1XZWIgU2VydmljZXMgRXhwbG9yZXIgUGFnZSBDb250ZW50Ci1GUkFNRV9USVRMRV9XU0RMX1RPT0xCQVI9V1NETCBCcm93c2VyIFRvb2xiYXIKLUZSQU1FX1RJVExFX1dTRExfQ09OVEVOVD1XU0RMIEJyb3dzZXIgQ29udGVudAotCi0jIEZvcm0gdGl0bGVzCi1GT1JNX1RJVExFX1BBR0VfTE9BREVSPVBhZ2UgTG9hZGVyCi1GT1JNX1RJVExFX1BBR0VfQ09OVEVOVD1Mb2FkZWQgUGFnZSBDb250ZW50Ci1GT1JNX1RJVExFX0xBVU5DSF9XRUJTRVJWSUNFX1dJWkFSRD1MYXVuY2ggV2ViIFNlcnZpY2UgV2l6YXJkIEZvcm0KLUZPUk1fVElUTEVfSU1QT1JUX1RPX1dPUktCRU5DSD1JbXBvcnQgdG8gV29ya2JlbmNoIEZvcm0KLQotIyBTZXNzaW9uVGltZWRPdXQgbWVzc2FnZQotTVNHX0VSUk9SX1NFU1NJT05fVElNRURfT1VUPVRoaXMgc2Vzc2lvbiBvZiBXZWIgU2VydmljZSBFeHBsb3JlciBoYXMgdGltZWQgb3V0IGFmdGVyIDMwIG1pbnV0ZXMgb2YgaW5hY3Rpdml0eSB0byBmcmVlIHVwIG1lbW9yeSByZXNvdXJjZXMuCi1NU0dfRVJST1JfUkVTVEFSVF9TRVNTSU9OPVJlbGF1bmNoIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciB0byB0ZXN0IHlvdXIgV2ViIHNlcnZpY2UuCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy9mYXZvcml0ZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy9mYXZvcml0ZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM5ODhmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvZmF2b3JpdGVzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi10aXRsZT1GYXZvcml0ZXMKLQotIyBOYXZpZ2F0b3IKLUZBVk9SSVRFU19NQUlOX05PREU9RmF2b3JpdGVzIE1haW4KLUZBVk9SSVRFU19XU0lMX0ZPTERFUl9OT0RFPUZhdm9yaXRlIFdTSUxzCi1GQVZPUklURVNfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFPUZhdm9yaXRlIFdTREwgU2VydmljZXMKLUZBVk9SSVRFU19VRERJX1NFUlZJQ0VfRk9MREVSX05PREU9RmF2b3JpdGUgVURESSBTZXJ2aWNlcwotRkFWT1JJVEVTX1VERElfQlVTSU5FU1NFU19GT0xERVJfTk9ERT1GYXZvcml0ZSBVRERJIEJ1c2luZXNzZXMKLUZBVk9SSVRFU19VRERJX1NFUlZJQ0VfSU5URVJGQUNFU19GT0xERVJfTk9ERT1GYXZvcml0ZSBVRERJIFNlcnZpY2UgSW50ZXJmYWNlcwotRkFWT1JJVEVTX1VERElfUkVHSVNUUklFU19GT0xERVJfTk9ERT1GYXZvcml0ZSBVRERJIFJlZ2lzdHJpZXMKLUZBVk9SSVRFU19VU0VSX0RFRl9VRERJX1JFR0lTVFJJRVNfRk9MREVSX05PREU9RmF2b3JpdGUgVXNlciBEZWZpbmVkIFVEREkgUmVnaXN0cmllcwotCi0jIEZvcm0KLUZPUk1fTEFCRUxfRkFWT1JJVEVfV1NJTD1GYXZvcml0ZSBXU0lMcwotRk9STV9MQUJFTF9GQVZPUklURV9XU0RMPUZhdm9yaXRlIFdTRExzCi1GT1JNX0xBQkVMX0ZBVk9SSVRFX1VERElfUkVHSVNUUlk9RmF2b3JpdGUgVURESSBSZWdpc3RyaWVzCi1GT1JNX0xBQkVMX0ZBVk9SSVRFX1VTRVJfREVGX1VERElfUkVHSVNUUlk9RmF2b3JpdGUgVXNlciBEZWZpbmVkIFVEREkgUmVnaXN0cmllcwotRk9STV9MQUJFTF9GQVZPUklURV9VRERJX1NFUlZJQ0U9RmF2b3JpdGUgVURESSBTZXJ2aWNlcwotRk9STV9MQUJFTF9GQVZPUklURV9VRERJX0JVU0lORVNTPUZhdm9yaXRlIFVEREkgQnVzaW5lc3MgRW50aXRpZXMKLUZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRT1GYXZvcml0ZSBVRERJIFNlcnZpY2UgSW50ZXJmYWNlcwotRk9STV9MQUJFTF9SRU1PVkU9UmVtb3ZlCi1GT1JNX0xBQkVMX0lNUE9SVF9UT19XU0lMX1BFUlNQRUNUSVZFPUFkZCBUbyBXU0lMIFBhZ2UKLUZPUk1fTEFCRUxfSU1QT1JUX1RPX1VERElfUEVSU1BFQ1RJVkU9QWRkIFRvIFVEREkgUGFnZQotRk9STV9MQUJFTF9JTVBPUlRfVE9fV1NETF9QRVJTUEVDVElWRT1BZGQgVG8gV1NETCBQYWdlCi1GT1JNX0xBQkVMX1VSTD1VUkwKLUZPUk1fTEFCRUxfSVRFTV9OVU1CRVI9SXRlbSAjCi1GT1JNX0xBQkVMX1VERElfVkVSU0lPTj1VRERJIFZlcnNpb24KLUZPUk1fTEFCRUxfTkFNRT1OYW1lCi1GT1JNX0xBQkVMX0RFU0M9RGVzY3JpcHRpb24KLUZPUk1fTEFCRUxfREVGQVVMVF9MT0dJTj1EZWZhdWx0IExvZ2luCi1GT1JNX0xBQkVMX0RFRkFVTFRfUEFTU1dPUkQ9RGVmYXVsdCBQYXNzd29yZAotRk9STV9MQUJFTF9JTlFVSVJZX1VSTD1JbnF1aXJ5IFVSTAotRk9STV9MQUJFTF9QVUJMSVNIX1VSTD1QdWJsaXNoIFVSTAotRk9STV9MQUJFTF9TRUNVUkVfSU5RVUlSWV9VUkw9U2VjdXJlIElucXVpcnkgVVJMCi1GT1JNX0xBQkVMX1NFQ1VSRV9QVUJMSVNIX1VSTD1TZWN1cmUgUHVibGlzaCBVUkwKLUZPUk1fTEFCRUxfVEFYT05PTVk9VGF4b25vbXkKLUZPUk1fTEFCRUxfTEFOR1VBR0U9TGFuZ3VhZ2UKLUZPUk1fTEFCRUxfUkVHSVNUUllfTkFNRT1SZWdpc3RyeSBOYW1lCi1GT1JNX0xBQkVMX0JVU0lORVNTX05BTUU9QnVzaW5lc3MgTmFtZQotRk9STV9MQUJFTF9CVVNJTkVTU19LRVk9QnVzaW5lc3MgS2V5Ci1GT1JNX0xBQkVMX1NFUlZJQ0VfTkFNRT1TZXJ2aWNlIE5hbWUKLUZPUk1fTEFCRUxfU0VSVklDRV9LRVk9U2VydmljZSBLZXkKLUZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRT1TZXJ2aWNlIEludGVyZmFjZSBOYW1lCi1GT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFX0tFWT1TZXJ2aWNlIEludGVyZmFjZSBLZXkKLUZPUk1fTEFCRUxfUkVHSVNUUllfVVJMPTxhIGhyZWY9IiUxIiB0YXJnZXQ9Il9ibGFuayI+Q2xpY2sgaGVyZTwvYT4gdG8gb2J0YWluIGEgdXNlciBJRCBhbmQgcGFzc3dvcmQgZm9yIHRoaXMgcmVnaXN0cnkuCi1GT1JNX0xBQkVMX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0ZJTEVTPURhdGEgZmlsZXMgZm9yIFVzZXIgRGVmaW5lZCBDYXRlZ29yaWVzCi1NU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRD1JV0FCMDMxNUUgU2VsZWN0IGF0IGxlYXN0IG9uZSBpdGVtLgotCi0jIExpc3RGYXZvcml0ZVdTSUxBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1dTSUw9TGlzdCBGYXZvcml0ZSBXU0lMcwotRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1dTSUxfREVTQz1TZWxlY3QgYSBzZXQgb2YgZmF2b3JpdGUgV1NJTCBsaW5rcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gV1NJTCBQYWdlPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgV1NJTCBuYXZpZ2F0b3IuIFByZXNzIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+IHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9ucy4KLQotIyBMaXN0RmF2b3JpdGVXU0RMU2VydmljZUFjdGlvbgotQUxUX0xJU1RfRkFWT1JJVEVfV1NETF9TRVJWSUNFPUxpc3QgRmF2b3JpdGUgV1NETCBTZXJ2aWNlcwotRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1dTRExfU0VSVklDRV9ERVNDPVNlbGVjdCBhIHNldCBvZiBmYXZvcml0ZSBXU0RMIHNlcnZpY2VzIGFuZCBwcmVzcyA8c3Ryb25nPlJlbW92ZTwvc3Ryb25nPiB0byByZW1vdmUgdGhlbS4KLQotIyBMaXN0RmF2b3JpdGVVRERJU2VydmljZUFjdGlvbgotQUxUX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFPUxpc3QgRmF2b3JpdGUgVURESSBTZXJ2aWNlcwotRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRV9ERVNDPVNlbGVjdCBhIHNldCBvZiBmYXZvcml0ZSBVRERJIHNlcnZpY2VzIGFuZCBwcmVzcyA8c3Ryb25nPkFkZCB0byBVRERJIFBhZ2U8L3N0cm9uZz4gdG8gb3BlbiB0aGVtIGluIHRoZSBVRERJIG5hdmlnYXRvci4gUHJlc3MgPHN0cm9uZz5SZW1vdmU8L3N0cm9uZz4gdG8gcmVtb3ZlIHRoZSBzZWxlY3Rpb25zLgotCi0jIExpc3RGYXZvcml0ZVVERElCdXNpbmVzc0FjdGlvbgotQUxUX0xJU1RfRkFWT1JJVEVfVURESV9CVVNJTkVTUz1MaXN0IEZhdm9yaXRlIFVEREkgQnVzaW5lc3NlcwotRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VERElfQlVTSU5FU1NfREVTQz1TZWxlY3QgYSBzZXQgb2YgZmF2b3JpdGUgVURESSBidXNpbmVzc2VzIGFuZCBwcmVzcyA8c3Ryb25nPkFkZCB0byBVRERJIFBhZ2U8L3N0cm9uZz4gdG8gb3BlbiB0aGVtIGluIHRoZSBVRERJIG5hdmlnYXRvci4gUHJlc3MgPHN0cm9uZz5SZW1vdmU8L3N0cm9uZz4gdG8gcmVtb3ZlIHRoZSBzZWxlY3Rpb25zLgotCi0jIExpc3RGYXZvcml0ZVVERElSZWdpc3RyeUFjdGlvbgotQUxUX0xJU1RfRkFWT1JJVEVfVURESV9SRUdJU1RSWT1MaXN0IEZhdm9yaXRlIFVEREkgUmVnaXN0cmllcwotRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VERElfUkVHSVNUUllfREVTQz1TZWxlY3QgYSBzZXQgb2YgZmF2b3JpdGUgVURESSByZWdpc3RyaWVzIGFuZCBwcmVzcyA8c3Ryb25nPkFkZCB0byBVRERJIFBhZ2U8L3N0cm9uZz4gdG8gb3BlbiB0aGVtIGluIHRoZSBVRERJIG5hdmlnYXRvci4gUHJlc3MgPHN0cm9uZz5SZW1vdmU8L3N0cm9uZz4gdG8gcmVtb3ZlIHRoZSBzZWxlY3Rpb25zLgotCi0jIExpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1VTRVJfREVGX1VERElfUkVHSVNUUlk9TGlzdCBGYXZvcml0ZSBVc2VyIERlZmluZWQgVURESSBSZWdpc3RyaWVzCi1GT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9ERVNDPVNlbGVjdCBhIHNldCBvZiBmYXZvcml0ZSBVRERJIHJlZ2lzdHJpZXMgYW5kIHByZXNzIDxzdHJvbmc+QWRkIHRvIFVEREkgUGFnZTwvc3Ryb25nPiB0byBvcGVuIHRoZW0gaW4gdGhlIFVEREkgbmF2aWdhdG9yLgotCi0jIExpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uCi1BTFRfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFPUxpc3QgRmF2b3JpdGUgVURESSBTZXJ2aWNlIEludGVyZmFjZXMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0M9U2VsZWN0IGEgc2V0IG9mIGZhdm9yaXRlIFVEREkgc2VydmljZSBpbnRlcmZhY2VzIGFuZCBwcmVzcyA8c3Ryb25nPkFkZCB0byBVRERJIFBhZ2U8L3N0cm9uZz4gdG8gb3BlbiB0aGVtIGluIHRoZSBVRERJIG5hdmlnYXRvci4gUHJlc3MgPHN0cm9uZz5SZW1vdmU8L3N0cm9uZz4gdG8gcmVtb3ZlIHRoZSBzZWxlY3Rpb25zLgotCi0jIEZhdm9yaXRlc1dTSUxEZXRhaWxzQWN0aW9uCi1BTFRfRkFWT1JJVEVTX1dTSUxfREVUQUlMUz1GYXZvcml0ZSBXU0lMIERldGFpbHMKLQotIyBGYXZvcml0ZXNXU0RMRGV0YWlsc0FjdGlvbgotQUxUX0ZBVk9SSVRFU19XU0RMX0RFVEFJTFM9RmF2b3JpdGUgV1NETCBEZXRhaWxzCi0KLSMgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc0FjdGlvbgotQUxUX0ZBVk9SSVRFU19VRERJX1JFR0lTVFJZX0RFVEFJTFM9RmF2b3JpdGUgVURESSBSZWdpc3RyeSBEZXRhaWxzCi0KLSMgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNBY3Rpb24KLUFMVF9GQVZPUklURVNfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9ERVRBSUxTPUZhdm9yaXRlIFVzZXIgRGVmaW5lZCBVRERJIFJlZ2lzdHJ5IERldGFpbHMKLQotIyBGYXZvcml0ZXNVRERJQnVzaW5lc3NEZXRhaWxzQWN0aW9uCi1BTFRfRkFWT1JJVEVTX1VERElfQlVTSU5FU1NfREVUQUlMUz1GYXZvcml0ZSBVRERJIEJ1c2luZXNzIERldGFpbHMKLQotIyBGYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNBY3Rpb24KLUFMVF9GQVZPUklURVNfVURESV9TRVJWSUNFX0RFVEFJTFM9RmF2b3JpdGUgVURESSBTZXJ2aWNlIERldGFpbHMKLQotIyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNBY3Rpb24KLUFMVF9GQVZPUklURVNfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTPUZhdm9yaXRlIFVEREkgU2VydmljZSBJbnRlcmZhY2UgRGV0YWlscwotCi0jIEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbgotQUxUX0FERF9XU0lMX1RPX1dTSUxfUEVSU1BFQ1RJVkU9QWRkIHRvIFdTSUwgUGFnZQotTVNHX0VSUk9SX1dTSUxfQUxSRUFEWV9PUEVORUQ9SVdBQjAzMTZFICUxIGlzIGFscmVhZHkgb3BlbmVkIGluIFdTSUwgUGFnZS4KLU1TR19JTkZPX0FERF9XU0lMX1RPX1dTSUxfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTD1JV0FCMDMxN0kgJTEgaXMgYWRkZWQgdG8gV1NJTCBQYWdlLgotTVNHX0VSUk9SX0FERF9XU0lMX1RPX1dTSUxfUEVSU1BFQ1RJVkU9SVdBQjAzMThFIFdTSUwgJTEgY291bGQgbm90IGJlIGxvYWRlZC4KLQotIyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotQUxUX0FERF9UT19VRERJX1BFUlNQRUNUSVZFPUFkZCB0byBVRERJIFBhZ2UKLU1TR19FUlJPUl9BRERfVE9fVURESV9QRVJTUEVDVElWRT1JV0FCMDMyMEUgJTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4KLU1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUw9SVdBQjAzMjFJICUxIGlzIGFkZGVkIHRvIFVEREkgUGFnZS4KLQotIyBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbgotQUxUX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkU9QWRkIHRvIFdTREwgUGFnZQotTVNHX0lORk9fQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRV9TVUNDRVNTRlVMPUlXQUIwMzY5SSAlMSBpcyBhZGRlZCB0byBXU0RMIFBhZ2UuCi1NU0dfRVJST1JfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRT1JV0FCMDM3MEUgV1NETCAlMSBjb3VsZCBub3QgYmUgbG9hZGVkLgotCi0jIFJlbW92ZUZhdm9yaXRlQWN0aW9uCi1BTFRfUkVNT1ZFX0ZBVk9SSVRFPVJlbW92ZSBGYXZvcml0ZQotTVNHX0NPTkZJUk1fUkVNT1ZFX05PREU9JTEgaXMgbm8gbG9uZ2VyIHJlc29sdmFibGUuICBEbyB5b3Ugd2lzaCB0byBjbGVhciBpdD8KLQotIyBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbgotQUxUX1JFU1RPUkVfREVGQVVMVF9GQVZPUklURVM9UmVzdG9yZSBEZWZhdWx0IEZhdm9yaXRlcwotTVNHX0NPTkZJUk1fUkVTVE9SRV9ERUZBVUxUX0ZBVk9SSVRFUz1UaGlzIG9wZXJhdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgY3VycmVudCBmYXZvcml0ZXMuICBEbyB5b3Ugd2lzaCB0byBjb250aW51ZT8KLU1TR19FUlJPUl9PUEVOX0ZBVk9SSVRFU19CQUNLVVA9SVdBQjAxMzRFIFVuYWJsZSB0byBsb2FkIHRoZSBkZWZhdWx0IGZhdm9yaXRlcy4KLU1TR19JTkZPX0ZBVk9SSVRFU19SRVNUT1JFRF9UT19ERUZBVUxUPUlXQUIwMzIySSBEZWZhdWx0IEZhdm9yaXRlcyBhcmUgcmVzdG9yZWQuCi1NU0dfRVJST1JfU0FWRV9GQVZPUklURVNfV1NJTD1JV0FCMDE4NkUgVW5hYmxlIHRvIHNhdmUgZmF2b3JpdGVzIHRvICUxLgotCi0jIEZyYW1lIHRpdGxlcwotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUj1OYXZpZ2F0b3IgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUj1OYXZpZ2F0b3IgVG9vbGJhcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQ9TmF2aWdhdG9yIENvbnRlbnQKLUZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSPUFjdGlvbnMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUj1Qcm9wZXJ0aWVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UPVByb3BlcnRpZXMgQ29udGVudAotRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSPVByb3BlcnRpZXMgVG9vbGJhcgotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUj1TdGF0dXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVD1TdGF0dXMgQ29udGVudAotRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVI9U3RhdHVzIFRvb2xiYXIKLQotIyBGb3JtIHRpdGxlcwotRk9STV9USVRMRV9VRERJX0JVU0lORVNTX0RFVEFJTFM9VURESSBCdXNpbmVzcyBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfVURESV9SRUdJU1RSWV9ERVRBSUxTPVVEREkgUmVnaXN0cnkgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVUQUlMUz1Vc2VyIERlZmluZWQgVURESSBSZWdpc3RyeSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfVURESV9TRVJWSUNFX0RFVEFJTFM9VURESSBTZXJ2aWNlIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFM9VURESSBTZXJ2aWNlIEludGVyZmFjZSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfV1NETF9ERVRBSUxTPVdTREwgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1dTSUxfREVUQUlMUz1XU0lMIERldGFpbHMgRm9ybQotCi0jIFZpZXcgdGl0bGVzCi1WSUVXX1RJVExFX1VERElfQlVTSU5FU1NfTElTVD1VRERJIEJ1c2luZXNzZXMgTGlzdCBWaWV3Ci1WSUVXX1RJVExFX1VERElfUkVHSVNUUllfTElTVD1VRERJIFJlZ2lzdHJpZXMgTGlzdCBWaWV3Ci1WSUVXX1RJVExFX1VTRVJfREVGX1VERElfUkVHSVNUUllfTElTVD1Vc2VyIERlZmluZWQgVURESSBSZWdpc3RyaWVzIExpc3QgVmlldwotVklFV19USVRMRV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0xJU1Q9VURESSBTZXJ2aWNlIEludGVyZmFjZXMgTGlzdCBWaWV3Ci1WSUVXX1RJVExFX1VERElfU0VSVklDRV9MSVNUPVVEREkgU2VydmljZXMgTGlzdCBWaWV3Ci1WSUVXX1RJVExFX1dTRExfU0VSVklDRV9MSVNUPVdTREwgU2VydmljZXMgTGlzdCBWaWV3Ci1WSUVXX1RJVExFX1dTSUxfTElTVD1XU0lMIExpbmtzIExpc3QgVmlldwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3VkZGkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy91ZGRpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5M2E2MTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3VkZGkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ5NiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXRpdGxlPVVEREkKLQotIyBOb2RlcwotTk9ERV9OQU1FX1VERElfTUFJTj1VRERJIE1haW4KLU5PREVfTkFNRV9RVUVSSUVTX0ZPTERFUj1FeGVjdXRlZCBRdWVyaWVzCi1OT0RFX05BTUVfUFVCTElTSEVEX0JVU0lORVNTRVNfRk9MREVSPVB1Ymxpc2hlZCBCdXNpbmVzc2VzCi1OT0RFX05BTUVfUFVCTElTSEVEX1NFUlZJQ0VTX0ZPTERFUj1QdWJsaXNoZWQgU2VydmljZXMKLU5PREVfTkFNRV9QVUJMSVNIRURfU0VSVklDRV9JTlRFUkZBQ0VTX0ZPTERFUj1QdWJsaXNoZWQgU2VydmljZSBJbnRlcmZhY2VzCi0KLSMgT3BlblJlZ2lzdHJ5QWN0aW9uCi1BTFRfT1BFTl9SRUdJU1RSWT1PcGVuIFJlZ2lzdHJ5Ci1GT1JNX0xBQkVMX09QRU5fUkVHSVNUUllfREVTQz1TcGVjaWZ5IHRoZSBuYW1lIGFuZCBpbnF1aXJ5IFVSTCBvZiB0aGUgcmVnaXN0cnkgdG8gYmUgb3BlbmVkLiBTZWxlY3RpbmcgYSBmYXZvcml0ZSByZWdpc3RyeSB3aWxsIGF1dG9tYXRpY2FsbHkgZmlsbCBpbiB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gb3BlbiB0aGUgcmVnaXN0cnkuCi1GT1JNX0xBQkVMX0ZBVk9SSVRFX1JFR0lTVFJZPUZhdm9yaXRlIFJlZ2lzdHJ5Ci1GT1JNX0xBQkVMX1JFR0lTVFJZX05BTUU9UmVnaXN0cnkgTmFtZQotRk9STV9MQUJFTF9JTlFVSVJZX1VSTD1JbnF1aXJ5IFVSTAotTVNHX0VSUk9SX0lOVkFMSURfUkVHSVNUUllfTkFNRT1JV0FCMDEzNkUgRW50ZXIgYSB2YWxpZCByZWdpc3RyeSBuYW1lLgotTVNHX0VSUk9SX0lOVkFMSURfSU5RVUlSWV9VUkw9SVdBQjAxMzhFIEVudGVyIGEgdmFsaWQgaW5xdWlyeSBVUkwuCi1NU0dfSU5GT19SRUdJU1RSWV9PUEVORUQ9SVdBQjAxMzlJIFRoZSByZWdpc3RyeSBuYW1lZCAlMSBsb2NhdGVkIGF0ICUyIHdhcyBvcGVuZWQgc3VjY2Vzc2Z1bGx5LgotCi0jIFVzZXItZGVmaW5lZCBDYXRlZ29yaWVzCi1GT1JNX0xBQkVMX0FERF9DQVRFR09SWV9EQVRBPTxhIGhyZWY9IiUxIj5DbGljayBoZXJlPC9hPiB0byBsb2FkIHRoaXMgY2F0ZWdvcnkncyBkYXRhLgotRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0ZJTEU9Q2F0ZWdvcnkgZGF0YSBmaWxlIG5hbWUKLU1TR19JTkZPX05PX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTX0ZPVU5EPUlXQUIwMzcxSSBObyB1c2VyIGRlZmluZWQgY2F0ZWdvcmllcyBkZXRlY3RlZC4KLU1TR19JTkZPX05PX0NBVEVHT1JZX0RBVEE9SVdBQjAzNzJJIENhdGVnb3J5IGRhdGEgZm9yICUxIGlzIG5vdCBhdmFpbGFibGUgb3IgaXMgaW52YWxpZC4KLU1TR19JTkZPX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0xPQURFRD1JV0FCMDM3M0kgRGF0YSBmb3IgdXNlciBkZWZpbmVkIGNhdGVnb3J5ICUxIHdhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLgotTVNHX0VSUk9SX0lOVkFMSURfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRV9LRVk9SVdBQjAzNzRFIEludmFsaWQgZGF0YSBmaWxlIGZvciB1c2VyIGRlZmluZWQgY2F0ZWdvcnkgJTEuIEEgY2F0ZWdvcnkga2V5ICclMicgd2FzIGZvdW5kIGJ1dCAnJTMnIHdhcyBleHBlY3RlZC4KLU1TR19FUlJPUl9JTlZBTElEX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0ZJTEVfRk9STUFUPUlXQUIwNDczRSBVbmtub3duIGZvcm1hdCBpbiBsaW5lOiAlMSBvZiB0aGUgZGF0YSBmaWxlIGZvciB1c2VyIGRlZmluZWQgY2F0ZWdvcnkgJTIuIFRoZSBsaW5lIGlzOiAiJTMiCi1NU0dfRVJST1JfSU5WQUxJRF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFPUlXQUIwMzc1RSBJbnZhbGlkIGRhdGEgZmlsZSBmb3IgdXNlciBkZWZpbmVkIGNhdGVnb3J5ICUxLgotTVNHX0VSUk9SX1NBVklOR19DQVRFR09SWV9EQVRBPUlXQUIwNDc0RSBBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHNhdmluZyBkYXRhIGZvciBjYXRlZ29yeSAlMS4gRXhjZXB0aW9uIHRleHQ6ICUyCi0KLSMgVURESSBDYXRlZ29yeSBCcm93c2VyCi1USVRMRV9DQVRFR09SWV9CUk9XU0VSPUNhdGVnb3J5IEJyb3dzZXIKLUFMVF9DQVRFR09SSUVTPUNhdGVnb3JpZXMKLQotIyBEZXRhaWxzCi1BTFRfUkVHSVNUUllfREVUQUlMUz1SZWdpc3RyeSBEZXRhaWxzCi1BTFRfQlVTSU5FU1NfREVUQUlMUz1CdXNpbmVzcyBEZXRhaWxzCi1BTFRfU0VSVklDRV9ERVRBSUxTPVNlcnZpY2UgRGV0YWlscwotQUxUX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFM9U2VydmljZSBJbnRlcmZhY2UgRGV0YWlscwotRk9STV9MQUJFTF9ERVRBSUxTX0VESVRBQkxFPURldGFpbHMgZm9yIDxzdHJvbmc+JTE8L3N0cm9uZz4gYXJlIHNob3duIGJlbG93LiBTb21lIGl0ZW1zIG1heSBiZSBhZGRlZCwgcmVtb3ZlZCwgb3IgY2hhbmdlZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkIGZvciBjaGFuZ2VzLiBPdGhlciBhY3Rpb25zIGFyZSBsaXN0ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIHBhZ2UuCi0KLSMgR2V0Ci1BTFRfR0VUPUdldAotCi0jIENvbW1vbiBGb3JtIENvbnRyb2wgVGl0bGUKLUZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUU9TmFtZSB2YWx1ZQotRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUU9RGVzY3JpcHRpb24gdmFsdWUKLUZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9LRVlfTkFNRT1DYXRlZ29yeSBrZXkgbmFtZQotRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9WQUxVRT1DYXRlZ29yeSBrZXkgdmFsdWUKLUZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9OQU1FPUlkZW50aWZpZXIga2V5IG5hbWUKLUZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9WQUxVRT1JZGVudGlmaWVyIGtleSB2YWx1ZQotRk9STV9DT05UUk9MX1RJVExFX0RJU0NPVkVSWV9VUkw9RGlzY292ZXJ5IFVSTAotRk9STV9DT05UUk9MX1RJVExFX0lOUFVUX1RFWFRfVkFMVUU9VURESSByZWdpc3RyeSBuYW1lCi0KLSMgRmluZCBhY3Rpb25zCi1BTFRfRklORD1GaW5kCi1BTFRfU1VCUVVFUlk9RmluZCAlMSBTdWJxdWVyeQotRk9STV9MQUJFTF9RVUVSWV9OQU1FPU5hbWUgb2YgdGhpcyBxdWVyeQotREVGQVVMVF9RVUVSWV9OQU1FPXF1ZXJ5IHJlc3VsdHMKLURFRkFVTFRfU1VCUVVFUllfTkFNRT0lMSAtICUyIHN1YnF1ZXJ5Ci1GT1JNX0xBQkVMX1NFQVJDSF9GT1I9U2VhcmNoIGZvcgotRk9STV9PUFRJT05fQlVTSU5FU1NFUz1CdXNpbmVzc2VzCi1GT1JNX09QVElPTl9TRVJWSUNFUz1TZXJ2aWNlcwotRk9STV9PUFRJT05fU0VSVklDRV9JTlRFUkZBQ0VTPVNlcnZpY2UgSW50ZXJmYWNlcwotRk9STV9MQUJFTF9TRUFSQ0hfVFlQRT1UeXBlIG9mIHNlYXJjaAotRk9STV9SQURJT19TSU1QTEU9U2ltcGxlCi1GT1JNX1JBRElPX0FEVkFOQ0VEPUFkdmFuY2VkCi1GT1JNX1JBRElPX1VVSUQ9VVVJRAotRk9STV9MQUJFTF9GSU5EX0JVU0lORVNTRVNfU0lNUExFX0RFU0M9RW50ZXIgdGhlIHBhcnRpYWwgb3IgY29tcGxldGUgbmFtZSBvZiBhIGJ1c2luZXNzIHRvIHNlYXJjaCBmb3IuIFRoZSAnJScgc3ltYm9sIGNhbiBiZSB1c2VkIGFzIGEgd2lsZGNhcmQgdGhhdCBtYXRjaGVzIGFueSBjaGFyYWN0ZXIuIFByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhlY3V0ZSB0aGUgc2VhcmNoLgotRk9STV9MQUJFTF9GSU5EX0FEVkFOQ0VEX0RFU0M9RW50ZXIgdmFsdWVzIGZvciBvbmUgb3IgbW9yZSBvZiB0aGUgcGFyYW1ldGVycyBsaXN0ZWQgYmVsb3cuIFRoZSAnJScgc3ltYm9sIGNhbiBiZSB1c2VkIGFzIGEgd2lsZGNhcmQgdGhhdCBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgaW4gdGhlIE5hbWUgZmllbGQgb2YgdGhlIE5hbWVzIHRhYmxlLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuIFByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhlY3V0ZSB0aGUgc2VhcmNoLgotRk9STV9MQUJFTF9GSU5EX0JVU0lORVNTX1VVSURfREVTQz1FbnRlciB0aGUgVVVJRCBvZiB0aGUgYnVzaW5lc3MgdG8gc2VhcmNoIGZvci4gUHJlc3MgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBleGVjdXRlIHRoZSBzZWFyY2guCi1GT1JNX0xBQkVMX05BTUVTPU5hbWVzCi1GT1JNX0xJTktfQUREPUFkZAotRk9STV9MSU5LX0dFVD1HZXQKLUZPUk1fTElOS19GSU5EPUZpbmQKLUZPUk1fTElOS19SRU1PVkU9UmVtb3ZlCi1GT1JNX0xBQkVMX09XTkVEPU93bmVkCi1GT1JNX0xBQkVMX1BVQkxJU0hfVVJMPVB1Ymxpc2ggVVJMCi1GT1JNX0xBQkVMX1VTRVJJRD1Vc2VyIElECi1GT1JNX0xBQkVMX1BBU1NXT1JEPVBhc3N3b3JkCi1GT1JNX0xBQkVMX0xBTkdVQUdFPUxhbmd1YWdlCi1GT1JNX0xBQkVMX05BTUU9TmFtZQotRk9STV9MQUJFTF9ERVNDUklQVElPTj1EZXNjcmlwdGlvbgotRk9STV9PUFRJT05fTEFOR1VBR0VfRU49RW5nbGlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfQUE9QWZhcgotRk9STV9PUFRJT05fTEFOR1VBR0VfQUI9QWJraGF6aWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BRj1BZnJpa2FhbnMKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FNPUFtaGFyaWMKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FSPUFyYWJpYwotRk9STV9PUFRJT05fTEFOR1VBR0VfQVM9QXNzYW1lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FZPUF5bWFyYQotRk9STV9PUFRJT05fTEFOR1VBR0VfQVo9QXplcmJhaWphbmkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JBPUJhc2hraXIKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JFPUJ5ZWxvcnVzc2lhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQkc9QnVsZ2FyaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CSD1CaWhhcmkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JJPUJpc2xhbWEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JOPUJlbmdhbGk7IEJhbmdsYQotRk9STV9PUFRJT05fTEFOR1VBR0VfQk89VGliZXRhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQlI9QnJldG9uCi1GT1JNX09QVElPTl9MQU5HVUFHRV9DQT1DYXRhbGFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9DTz1Db3JzaWNhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQ1o9Q3plY2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0NZPVdlbHNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9EQT1EYW5pc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0RFPUdlcm1hbgotRk9STV9PUFRJT05fTEFOR1VBR0VfRFo9Qmh1dGFuaQotRk9STV9PUFRJT05fTEFOR1VBR0VfRUw9R3JlZWsKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0VPPUVzcGVyYW50bwotRk9STV9PUFRJT05fTEFOR1VBR0VfRVM9U3BhbmlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfRVQ9RXN0b25pYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0VVPUJhc3F1ZQotRk9STV9PUFRJT05fTEFOR1VBR0VfRkE9UGVyc2lhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfRkk9RmlubmlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfRko9RmlqaQotRk9STV9PUFRJT05fTEFOR1VBR0VfRk89RmFlcm9lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZSPUZyZW5jaAotRk9STV9PUFRJT05fTEFOR1VBR0VfRlk9RnJpc2lhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfR0E9SXJpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0dEPVNjb3RzIEdhZWxpYwotRk9STV9PUFRJT05fTEFOR1VBR0VfR0w9R2FsaWNpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0dOPUd1YXJhbmkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0dVPUd1amFyYXRpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9IQT1IYXVzYQotRk9STV9PUFRJT05fTEFOR1VBR0VfSEk9SGluZGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0hSPUNyb2F0aWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9IVT1IdW5nYXJpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0hZPUFybWVuaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9JQT1JbnRlcmxpbmd1YQotRk9STV9PUFRJT05fTEFOR1VBR0VfSUU9SW50ZXJsaW5ndWUKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0lLPUludXBpYWsKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0lOPUluZG9uZXNpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0lTPUljZWxhbmRpYwotRk9STV9PUFRJT05fTEFOR1VBR0VfSVQ9SXRhbGlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfSVc9SGVicmV3Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9KQT1KYXBhbmVzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfSkk9WWlkZGlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfSlc9SmF2YW5lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0tBPUdlb3JnaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LSz1LYXpha2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0tMPUdyZWVubGFuZGljCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LTT1DYW1ib2RpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0tOPUthbm5hZGEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0tPPUtvcmVhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfS1M9S2FzaG1pcmkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0tVPUt1cmRpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0tZPUtpcmdoaXoKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0xBPUxhdGluCi1GT1JNX09QVElPTl9MQU5HVUFHRV9MTj1MaW5nYWxhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9MTz1MYW90aGlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfTFQ9TGl0aHVhbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfTFY9TGF0dmlhbiwgTGV0dGlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfTUc9TWFsYWdhc3kKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01JPU1hb3JpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9NSz1NYWNlZG9uaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9NTD1NYWxheWFsYW0KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01OPU1vbmdvbGlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfTU89TW9sZGF2aWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9NUj1NYXJhdGhpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9NUz1NYWxheQotRk9STV9PUFRJT05fTEFOR1VBR0VfTVQ9TWFsdGVzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfTVk9QnVybWVzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfTkE9TmF1cnUKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX05FPU5lcGFsaQotRk9STV9PUFRJT05fTEFOR1VBR0VfTkw9RHV0Y2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX05PPU5vcndlZ2lhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfT0M9T2NjaXRhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfT009KEFmYW4pIE9yb21vCi1GT1JNX09QVElPTl9MQU5HVUFHRV9PUj1Pcml5YQotRk9STV9PUFRJT05fTEFOR1VBR0VfUEE9UHVuamFiaQotRk9STV9PUFRJT05fTEFOR1VBR0VfUEw9UG9saXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9QUz1QYXNodG8sIFB1c2h0bwotRk9STV9PUFRJT05fTEFOR1VBR0VfUFQ9UG9ydHVndWVzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfUVU9UXVlY2h1YQotRk9STV9PUFRJT05fTEFOR1VBR0VfUk09UmhhZXRvLVJvbWFuY2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1JOPUtpcnVuZGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1JPPVJvbWFuaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9SVT1SdXNzaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9SVz1LaW55YXJ3YW5kYQotRk9STV9PUFRJT05fTEFOR1VBR0VfU0E9U2Fuc2tyaXQKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NEPVNpbmRoaQotRk9STV9PUFRJT05fTEFOR1VBR0VfU0c9U2FuZ3JvCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TSD1TZXJiby1Dcm9hdGlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfU0k9U2luZ2hhbGVzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfU0s9U2xvdmFrCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TTD1TbG92ZW5pYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NNPVNhbW9hbgotRk9STV9PUFRJT05fTEFOR1VBR0VfU049U2hvbmEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NPPVNvbWFsaQotRk9STV9PUFRJT05fTEFOR1VBR0VfU1E9QWxiYW5pYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NSPVNlcmJpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NTPVNpc3dhdGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NUPVNlc290aG8KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NVPVN1bmRhbmVzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfU1Y9U3dlZGlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfU1c9U3dhaGlsaQotRk9STV9PUFRJT05fTEFOR1VBR0VfVEE9VGFtaWwKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RFPVRlZ3VsdQotRk9STV9PUFRJT05fTEFOR1VBR0VfVEc9VGFqaWsKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RIPVRoYWkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RJPVRpZ3JpbnlhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9USz1UdXJrbWVuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UTD1UYWdhbG9nCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UTj1TZXRzd2FuYQotRk9STV9PUFRJT05fTEFOR1VBR0VfVE89VG9uZ2EKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RSPVR1cmtpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RTPVRzb25nYQotRk9STV9PUFRJT05fTEFOR1VBR0VfVFQ9VGF0YXIKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RXPVR3aQotRk9STV9PUFRJT05fTEFOR1VBR0VfVUs9VWtyYWluaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9VUj1VcmR1Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9VWj1VemJlawotRk9STV9PUFRJT05fTEFOR1VBR0VfVkk9VmlldG5hbWVzZQotRk9STV9PUFRJT05fTEFOR1VBR0VfVk89Vm9sYXB1awotRk9STV9PUFRJT05fTEFOR1VBR0VfV089V29sb2YKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1hIPVhob3NhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9ZTz1Zb3J1YmEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1pIPUNoaW5lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1pVPVp1bHUKLUZPUk1fTEFCRUxfRVhBQ1RfTkFNRV9NQVRDSD1FeGFjdCBtYXRjaAotRk9STV9MQUJFTF9DQVNFX1NFTlNJVElWRV9NQVRDSD1DYXNlIHNlbnNpdGl2ZQotRk9STV9MQUJFTF9TT1VOREVYPVNvdW5kIGFsaWtlCi1GT1JNX0xBQkVMX0lERU5USUZJRVJTPUlkZW50aWZpZXJzCi1GT1JNX0xBQkVMX0lERU5USUZJRVJfVFlQRT1UeXBlCi0KLSMgRG8gbm90IHRyYW5zbGF0ZSB0aGUgdHdvIGl0ZW1zIGJlbG93LgotRk9STV9PUFRJT05fSURFTlRJRklFUl9EVU5TPUQtVS1OLVMKLUZPUk1fT1BUSU9OX0lERU5USUZJRVJfVEhPTUFTX1JFR0lTVFJZPVRob21hcyBSZWdpc3RyeQotCi1GT1JNX0xBQkVMX0tFWV9OQU1FPUtleSBuYW1lCi1GT1JNX0xBQkVMX0tFWV9WQUxVRT1LZXkgdmFsdWUKLUZPUk1fTEFCRUxfQ0FURUdPUklFUz1DYXRlZ29yaWVzCi1GT1JNX0xBQkVMX0NBVEVHT1JZX1RZUEU9VHlwZQotRk9STV9PUFRJT05fQ0FURUdPUllfTkFJQ1M9TkFJQ1MKLUZPUk1fT1BUSU9OX0NBVEVHT1JZX1VOU1BTQ183Mz1VTlNQU0MgNy4zCi1GT1JNX09QVElPTl9DQVRFR09SWV9HRU89R0VPCi1GT1JNX0xBQkVMX0JVU0lORVNTX0NBVEVHT1JJRVM9Q29tcGFyZSB3aXRoOgotRk9STV9PUFRJT05fQlVTSU5FU1NFU19PTkxZPUJ1c2luZXNzZXMgb25seQotRk9STV9PUFRJT05fU0VSVklDRVNfT05MWT1TZXJ2aWNlcyBvbmx5Ci1GT1JNX09QVElPTl9CT1RIPUJ1c2luZXNzZXMgYW5kIFNlcnZpY2VzCi1GT1JNX0xBQkVMX0RJU0NPVkVSWVVSTFM9RGlzY292ZXJ5IFVSTHMKLUZPUk1fTEFCRUxfRElTQ09WRVJZVVJMPURpc2NvdmVyeSBVUkwKLUZPUk1fTEFCRUxfRklORFFVQUxJRklFUlM9RmluZCBRdWFsaWZpZXJzCi1GT1JNX0xBQkVMX0NPTUJJTkVfS0VZUz1Db21iaW5lIGtleXM6Ci1GT1JNX09QVElPTl9BTkRBTExLRVlTPUFuZAotRk9STV9PUFRJT05fT1JBTExLRVlTPU9yCi1GT1JNX09QVElPTl9PUkxJS0VLRVlTPU9yIExpa2UKLUZPUk1fTEFCRUxfU09SVF9CWV9OQU1FPVNvcnQgYnkgbmFtZToKLUZPUk1fUkFESU9fU09SVF9BU0M9QXNjZW5kaW5nCi1GT1JNX1JBRElPX1NPUlRfREVTQz1EZXNjZW5kaW5nCi1GT1JNX0xBQkVMX1NPUlRfQllfREFURT1Tb3J0IGJ5IGRhdGU6Ci1GT1JNX0xBQkVMX01BWF9TRUFSQ0hfU0VUPU1heGltdW0gc2l6ZSBvZiBzZWFyY2ggc2V0OgotRk9STV9MQUJFTF9NQVhfUkVTVUxUUz1NYXhpbXVtIG51bWJlciBvZiByZXN1bHRzOgotRk9STV9MQUJFTF9GSU5EX1NFUlZJQ0VTX1NJTVBMRV9ERVNDPUVudGVyIHRoZSBwYXJ0aWFsIG9yIGNvbXBsZXRlIG5hbWUgb2YgYSBzZXJ2aWNlIHRvIHNlYXJjaCBmb3IuIFRoZSAnJScgc3ltYm9sIGNhbiBiZSB1c2VkIGFzIGEgd2lsZGNhcmQgdGhhdCBtYXRjaGVzIGFueSBjaGFyYWN0ZXIuIFByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhlY3V0ZSB0aGUgc2VhcmNoLgotRk9STV9MQUJFTF9GSU5EX1NFUlZJQ0VfVVVJRF9ERVNDPUVudGVyIHRoZSBVVUlEIG9mIHRoZSBzZXJ2aWNlIHRvIHNlYXJjaCBmb3IuIFByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhlY3V0ZSB0aGUgc2VhcmNoLgotRk9STV9MQUJFTF9GSU5EX1NFUlZJQ0VfSU5URVJGQUNFU19TSU1QTEVfREVTQz1FbnRlciB0aGUgcGFydGlhbCBvciBjb21wbGV0ZSBuYW1lIG9mIGEgc2VydmljZSBpbnRlcmZhY2UgdG8gc2VhcmNoIGZvci4gVGhlICclJyBzeW1ib2wgY2FuIGJlIHVzZWQgYXMgYSB3aWxkY2FyZCB0aGF0IG1hdGNoZXMgYW55IGNoYXJhY3Rlci4gUHJlc3MgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBleGVjdXRlIHRoZSBzZWFyY2guCi1GT1JNX0xBQkVMX0ZJTkRfU0VSVklDRV9JTlRFUkZBQ0VfVVVJRF9ERVNDPUVudGVyIHRoZSBVVUlEIG9mIHRoZSBzZXJ2aWNlIGludGVyZmFjZSB0byBzZWFyY2ggZm9yLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VTPVNlcnZpY2UgSW50ZXJmYWNlcwotRk9STV9MQUJFTF9VVUlEX0tFWT1VVUlEIEtleToKLUZPUk1fTEFCRUxfVVNFX1NFUlZJQ0U9VXNlIHNlcnZpY2UKLUZPUk1fTEFCRUxfU0VSVklDRT1TZXJ2aWNlCi1GT1JNX0xBQkVMX0JVU0lORVNTPUJ1c2luZXNzCi1GT1JNX0xBQkVMX1BVQkxJU0hfQVNTRVJUSU9OUz1QdWJsaXNoZXIgQXNzZXJ0aW9ucwotRk9STV9MQUJFTF9ESVJFQ1RJT049RGlyZWN0aW9uCi1GT1JNX0xBQkVMX0ZST01fS0VZPUZyb20gS2V5Ci1GT1JNX0xBQkVMX1RPX0tFWT1UbyBLZXkKLUZPUk1fTEFCRUxfU1RBVFVTPVN0YXR1cwotRk9STV9MQUJFTF9BU1NFUlRJT05fVFlQRT1Bc3NlcnRpb24gVHlwZQotRk9STV9PUFRJT05fQVNTRVJUSU9OX1RZUEVfUEFSRU5UX0NISUxEPVBhcmVudC1DaGlsZAotRk9STV9PUFRJT05fQVNTRVJUSU9OX1RZUEVfUEVFUl9UT19QRUVSPVBlZXItUGVlcgotRk9STV9PUFRJT05fQVNTRVJUSU9OX1RZUEVfSURFTlRJVFk9SWRlbnRpdHkKLUZPUk1fTEFCRUxfQVNTRVJUSU9OX0RJUkVUSU9OX0RFU0M9RGlyZWN0aW9uIDxzdHJvbmc+RnJvbTwvc3Ryb25nPiB3aWxsIGNyZWF0ZSBhIHB1Ymxpc2hlciBhc3NlcnRpb24gZnJvbSB0aGlzIGJ1c2luZXNzIHRvIHRoZSBidXNpbmVzc2VzIGFib3ZlLiAgRGlyZWN0aW9uIDxzdHJvbmc+VG88L3N0cm9uZz4gd2lsbCBjcmVhdGUgYSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGZyb20gdGhlIGFib3ZlIGJ1c2luZXNzZXMgdG8gdGhpcyBidXNpbmVzcy4KLUZPUk1fT1BUSU9OX0FTU0VSVElPTl9ESVJFQ1RJT05fRlJPTT0tLS0+Ci1GT1JNX09QVElPTl9BU1NFUlRJT05fRElSRUNUSU9OX1RPPTwtLS0KLUZPUk1fTEFCRUxfVEhJU19CVVNJTkVTUz1UaGlzCi1NU0dfRVJST1JfSU5WQUxJRF9RVUVSWV9OQU1FPUlXQUIwMTQwRSBFbnRlciBhIHZhbGlkIG5hbWUgZm9yIHRoZSBxdWVyeS4KLU1TR19FUlJPUl9JTlZBTElEX05BTUVTPUlXQUIwMTQxRSBFbnRlciBhIHNlcmllcyBvZiB2YWxpZCBuYW1lcy4KLU1TR19FUlJPUl9JTlZBTElEX1BVQkxJU0hfVVJMPUlXQUIwMTQyRSBFbnRlciBhIHZhbGlkIHB1Ymxpc2ggVVJMLgotTVNHX0VSUk9SX0lOVkFMSURfVVNFUklEPUlXQUIwMTQzRSBFbnRlciBhIHZhbGlkIHVzZXIgSUQuCi1NU0dfRVJST1JfSU5WQUxJRF9NQVhfU0VBUkNIX1NFVD1JV0FCMDE0NUUgRW50ZXIgYSB2YWxpZCBzaXplIGZvciB0aGUgbWF4aW11bSBzZWFyY2ggc2V0LgotTVNHX0VSUk9SX0lOVkFMSURfTUFYX1JFU1VMVFM9SVdBQjAxNDZFIEVudGVyIGEgdmFsaWQgc2l6ZSBmb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMuCi1NU0dfSU5GT19CVVNJTkVTU0VTX0ZPVU5EPUlXQUIwMTQ3SSBOdW1iZXIgb2YgYnVzaW5lc3NlcyBmb3VuZDogJTEKLU1TR19FUlJPUl9OT19CVVNJTkVTU0VTX0ZPVU5EPUlXQUIwMTQ4RSBObyBidXNpbmVzc2VzIGZvdW5kLgotTVNHX0lORk9fU0VSVklDRVNfRk9VTkQ9SVdBQjAxNDlJIE51bWJlciBvZiBzZXJ2aWNlcyBmb3VuZDogJTEKLU1TR19FUlJPUl9OT19TRVJWSUNFU19GT1VORD1JV0FCMDE1MEUgTm8gc2VydmljZXMgZm91bmQuCi1NU0dfRVJST1JfU0lOR0xFX0lURU09SVdBQjAxNTFFIFNlbGVjdCBqdXN0IG9uZSBpdGVtLgotTVNHX1FVRVNUSU9OX0lURU1fUkVQTEFDRU1FTlQ9VGhlIHNlbGVjdGlvbiB3aWxsIHJlcGxhY2UgYW4gaXRlbSBhbHJlYWR5IGluIHRoZSB0YXJnZXQuIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/Ci1NU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQ9SVdBQjAxNTJJIE51bWJlciBvZiBzZXJ2aWNlIGludGVyZmFjZXMgZm91bmQ6ICUxCi1NU0dfRVJST1JfTk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EPUlXQUIwMTUzRSBObyBzZXJ2aWNlIGludGVyZmFjZXMgZm91bmQuCi1NU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRD1JV0FCMDE1NEUgU2VsZWN0IGF0IGxlYXN0IG9uZSBpdGVtLgotTVNHX0VSUk9SX0lOVkFMSURfVVVJRF9LRVk9SVdBQjAxNTVFIEVudGVyIGEgdmFsaWQgVVVJRCBrZXkuCi1NU0dfRVJST1JfUVVFUllfTkFNRV9DT05GTElDVD1JV0FCMDE1NkUgVGhlIHN1YnF1ZXJ5J3MgcXVlcnkgbmFtZSBjYW5ub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmF0b3IuCi1NU0dfRVJST1JfTk9fSVRFTVNfVE9fR0VUPUlXQUIwMTU3RSBObyBpdGVtcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgaGF2ZSBiZWVuIHB1Ymxpc2hlZCBvciBkaXNjb3ZlcmVkIHlldC4KLU1TR19JTkZPX05PX0JVU0lORVNTRVNfT1JfU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EPUlXQUIwMTYySSBObyBCdXNpbmVzc2VzLCBTZXJ2aWNlcyBvciBTZXJ2aWNlIEludGVyZmFjZXMgZm91bmQuCi0KLSMgUmVzdWx0cwotQUxUX1FVRVJZX1JFU1VMVFM9UXVlcnkgUmVzdWx0cwotRk9STV9MQUJFTF9TVUJRVUVSWT1UaGUgcmVzdWx0cyBtYXkgYmUgdXNlZCBhcyBpbnB1dHMgb2YgYW5vdGhlciBvcGVyYXRpb24uIENsaWNrIHRoZSA8c3Ryb25nPnRhcmdldDwvc3Ryb25nPiBsaW5rIGF0IHRoZSB0b3AgdG8gc2VlIHRoZSBvcGVyYXRpb24uIFNlbGVjdGVkIHJlc3VsdHMgY2FuIGJlIHVzZWQgaW4gdGhlIG9wZXJhdGlvbiBieSBjbGlja2luZyB0aGUgPHN0cm9uZz5UcmFuc2Zlcjwvc3Ryb25nPiBidXR0b24uCi1GT1JNX0xBQkVMX1FVRVJZPVNlbGVjdCBhIHJlc3VsdCB0byBzZWUgbW9yZSBkZXRhaWxzIG9yIHNlbGVjdCBhIHNldCBvZiByZXN1bHRzIGFuZCBjbGljayBhIGJ1dHRvbiB0byBwZXJmb3JtIGFuIG9wZXJhdGlvbi4KLUZPUk1fTElOS19UQVJHRVQ9dGFyZ2V0Ci1GT1JNX0JVVFRPTl9UUkFOU0ZFUj1UcmFuc2ZlcgotRk9STV9CVVRUT05fUkVGUkVTSD1SZWZyZXNoCi1GT1JNX0JVVFRPTl9BRERfVE9fRkFWT1JJVEVTPUFkZCB0byBmYXZvcml0ZXMKLUZPUk1fQlVUVE9OX1VOUFVCTElTSD1VbnB1Ymxpc2gKLUZPUk1fQlVUVE9OX0NMRUFSPUNsZWFyCi0KLSMgUHVibGlzaCBhY3Rpb25zCi1BTFRfUFVCTElTSD1QdWJsaXNoCi1GT1JNX0xBQkVMX1BVQkxJU0g9UHVibGlzaDoKLUZPUk1fT1BUSU9OX0JVU0lORVNTPUJ1c2luZXNzCi1GT1JNX09QVElPTl9TRVJWSUNFPVNlcnZpY2UKLUZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFPVNlcnZpY2UgSW50ZXJmYWNlCi1GT1JNX0xBQkVMX1BVQkxJU0hfQlVTSU5FU1NfU0lNUExFX0RFU0M9RW50ZXIgYSBuYW1lIGFuZCBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGJ1c2luZXNzIHRvIGJlIHB1Ymxpc2hlZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9QVUJMSVNIX0JVU0lORVNTX0FEVkFOQ0VEX0RFU0M9UHJvdmlkZSBhIG5hbWUgZm9yIHRoZSBidXNpbmVzcyB0byBiZSBwdWJsaXNoZWQuIE90aGVyIHBhcmFtZXRlcnMgbWF5IGFsc28gYmUgc3BlY2lmaWVkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1GT1JNX0xBQkVMX1BVQkxJU0hfU0VSVklDRV9TSU1QTEVfREVTQz1HZXQgb3IgZmluZCBhIGJ1c2luZXNzIGFuZCB0aGVuIHByb3ZpZGUgdGhlIFdTREwgVVJMLCBuYW1lIGFuZCBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIHNlcnZpY2UgdG8gYmUgcHVibGlzaGVkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1GT1JNX0xBQkVMX1BVQkxJU0hfU0VSVklDRV9BRFZBTkNFRF9ERVNDPUdldCBvciBmaW5kIGEgYnVzaW5lc3MgYW5kIHRoZW4gcHJvdmlkZSB0aGUgV1NETCBVUkwgYW5kIGEgbmFtZSBmb3IgdGhlIHNlcnZpY2UgdG8gYmUgcHVibGlzaGVkLiBPdGhlciBwYXJhbWV0ZXJzIG1heSBhbHNvIGJlIHNwZWNpZmllZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9CVVNJTkVTU19QVUJMSVNIX1NFUlZJQ0VfU0lNUExFX0RFU0M9UHJvdmlkZSB0aGUgV1NETCBVUkwsIG5hbWUgYW5kIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgc2VydmljZSB0byBiZSBwdWJsaXNoZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfQlVTSU5FU1NfUFVCTElTSF9TRVJWSUNFX0FEVkFOQ0VEX0RFU0M9UHJvdmlkZSB0aGUgV1NETCBVUkwgYW5kIGEgbmFtZSBmb3IgdGhlIHNlcnZpY2UgdG8gYmUgcHVibGlzaGVkLiBPdGhlciBwYXJhbWV0ZXJzIG1heSBhbHNvIGJlIHNwZWNpZmllZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfSU5URVJGQUNFX1NJTVBMRV9ERVNDPUVudGVyIGEgV1NETCBVUkwsIG5hbWUgYW5kIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgc2VydmljZSBpbnRlcmZhY2UgdG8gYmUgcHVibGlzaGVkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1GT1JNX0xBQkVMX1BVQkxJU0hfU0VSVklDRV9JTlRFUkZBQ0VfQURWQU5DRURfREVTQz1Qcm92aWRlIHRoZSBXU0RMIFVSTCBhbmQgbmFtZSBmb3IgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIHRvIGJlIHB1Ymxpc2hlZC4gT3RoZXIgcGFyYW1ldGVycyBtYXkgYWxzbyBiZSBzcGVjaWZpZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfUFVCTElTSF9GT1JNPVB1YmxpY2F0aW9uIGZvcm1hdAotRk9STV9MQUJFTF9ERVNDUklQVElPTj1EZXNjcmlwdGlvbgotRk9STV9MQUJFTF9ERVNDUklQVElPTlM9RGVzY3JpcHRpb25zCi1NU0dfSU5GT19CVVNJTkVTU19QVUJMSVNIRUQ9SVdBQjAxNThJIEJ1c2luZXNzICUxIHdhcyBzdWNjZXNzZnVsbHkgcHVibGlzaGVkLgotTVNHX0lORk9fU0VSVklDRV9QVUJMSVNIRUQ9SVdBQjAxNTlJIFNlcnZpY2UgJTEgd2FzIHN1Y2Nlc3NmdWxseSBwdWJsaXNoZWQuCi1NU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRV9QVUJMSVNIRUQ9SVdBQjAxNjBJIFNlcnZpY2UgaW50ZXJmYWNlICUxIHdhcyBzdWNjZXNzZnVsbHkgcHVibGlzaGVkLgotTVNHX0VSUk9SX0lOVkFMSURfTkFNRT1JV0FCMDE2MUUgRW50ZXIgYSB2YWxpZCBuYW1lLgotTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRT1JV0FCMDI1MEUgU2VsZWN0IGEgbm9uLWJsYW5rIGxhbmd1YWdlIGZvciB0aGUgJTEgaW4gcm93ICUyLiBPbmx5IHRoZSBmaXJzdCByb3cgY2FuIGhhdmUgYSBibGFuayBsYW5ndWFnZS4KLU1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFPUlXQUIwMjUxRSBDaGFuZ2UgdGhlIGxhbmd1YWdlIGZvciB0aGUgJTEgaW4gcm93ICUyLiBUaGUgY3VycmVudCBvbmUgaXMgYWxyZWFkeSBpbiB1c2UuCi1NU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVD1JV0FCMDI1MkUgRW50ZXIgYSB2YWxpZCAlMSBpbiByb3cgJTIKLU1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMPUlXQUIwMjUzRSBFbnRlciBhIHZhbGlkIFdTREwgVVJMLgotTVNHX0VSUk9SX05PX05BTUVTPUlXQUIwMjU0RSBBZGQgYXQgbGVhc3Qgb25lIG5hbWUuCi1NU0dfRVJST1JfSU5WQUxJRF9TRVJWSUNFPUlXQUIwMjU1RSBQcm92aWRlIGEgdmFsaWQgc2VydmljZS4KLU1TR19FUlJPUl9JTlZBTElEX0JVU0lORVNTPUlXQUIwMjU2RSBQcm92aWRlIGEgdmFsaWQgYnVzaW5lc3MuCi0KLSMgQnVzaW5lc3MgUHVibGlzaCBTZXJ2aWNlIGFjdGlvbgotQUxUX1BVQkxJU0hfU0VSVklDRT1QdWJsaXNoIFNlcnZpY2UKLQotIyBMb2dpbiBhY3Rpb25zCi1BTFRfTE9HSU49TG9naW4KLUFMVF9MT0dPVVQ9TG9nb3V0Ci1NU0dfSU5GT19OT19NVUxUSVBMRV9MT0dJTj1NdWx0aXBsZSBsb2dpbnMgd2l0aCBzYW1lIElEIG5vdCBhbGxvd2VkCi1NU0dfSU5GT19MT0dHRURfSU5fTk9ERT0lMSAtIGxvZ2dlZCBpbiBhcyAlMgotCi0jIFdTREwgQnJvd3NlcgotVElUTEVfV1NETF9CUk9XU0VSPVdTREwgQnJvd3NlciAtICUxCi1GT1JNX0xBQkVMX1dTRExfU09VUkNFPVNlbGVjdCBhIFdTREwgc291cmNlOgotRk9STV9MQUJFTF9XU0RMX1NPVVJDRV9XRUJQUk9KRUNUUz1XZWIgUHJvamVjdHMKLUZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfRkFWT1JJVEVTPUZhdm9yaXRlcwotRk9STV9MQUJFTF9XRUJfUFJPSkVDVD1XZWIgUHJvamVjdAotRk9STV9MQUJFTF9XU0RMX1VSTD1XU0RMIFVSTAotQUxUX1dTRExfQlJPV1NFUj1XU0RMIEJyb3dzZXIKLQotIyBEZXRhaWxzCi1GT1JNX0xJTktfRURJVD1FZGl0Ci1GT1JNX0xJTktfQ0FOQ0VMPUNhbmNlbAotRk9STV9MQUJFTF9CVVNJTkVTU19LRVk9QnVzaW5lc3MgS2V5Ci1GT1JNX0xBQkVMX1NFUlZJQ0VfS0VZPVNlcnZpY2UgS2V5Ci1GT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFX0tFWT1UTW9kZWwgS2V5Ci1GT1JNX0xBQkVMX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTPVVzZXIgRGVmaW5lZCBDYXRlZ29yaWVzCi1GT1JNX0xBQkVMX0NIRUNLRUQ9Q2hlY2tlZAotRk9STV9MQUJFTF9GSUxFPUZpbGUKLU1TR19RVUVTVElPTl9QVUJMSVNIX0lURU09VGhlIGl0ZW0gY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4gRG8geW91IHdpc2ggdG8gcHVibGlzaCBpdD8KLU1TR19RVUVTVElPTl9TRVJWSUNFX1BVQkxJU0hfQlVTSU5FU1M9VGhlIHNlcnZpY2UgYW5kIGl0cyBidXNpbmVzcyBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBQcm9jZWVkIHRvIHB1Ymxpc2g/Ci1NU0dfSU5GT19CVVNJTkVTU19VUERBVEVEPUlXQUIwMjU3SSBCdXNpbmVzcyAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuCi1NU0dfSU5GT19TRVJWSUNFX1VQREFURUQ9SVdBQjAyNThJIFNlcnZpY2UgJTEgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLgotTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfVVBEQVRFRD1JV0FCMDI1OUkgU2VydmljZSBJbnRlcmZhY2UgJTEgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLgotTVNHX0lORk9fUkVHSVNUUllfVVBEQVRFRD1JV0FCMDMyM0kgUmVnaXN0cnkgJTEgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLgotCi0jIFVucHVibGlzaEFjdGlvbgotQUxUX1VOUFVCTElTSF9CVVNJTkVTUz1VbnB1Ymxpc2ggQnVzaW5lc3MKLUFMVF9VTlBVQkxJU0hfU0VSVklDRT1VbnB1Ymxpc2ggU2VydmljZQotQUxUX1VOUFVCTElTSF9TRVJWSUNFX0lOVEVSRkFDRT1VbnB1Ymxpc2ggU2VydmljZSBJbnRlcmZhY2UKLUZPUk1fTEFCRUxfVU5QVUJMSVNIX0RFU0M9UHJlc3MgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byB1bnB1Ymxpc2ggdGhpcyBvYmplY3QuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLU1TR19JTkZPX0JVU0lORVNTX1VOUFVCTElTSEVEPUlXQUIwMjYwSSBCdXNpbmVzcyAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHVucHVibGlzaGVkLgotTVNHX0lORk9fU0VSVklDRV9VTlBVQkxJU0hFRD1JV0FCMDI2MUkgU2VydmljZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHVucHVibGlzaGVkLgotTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfVU5QVUJMSVNIRUQ9SVdBQjAyNjJJIFNlcnZpY2UgSW50ZXJmYWNlICUxIHdhcyBzdWNjZXNzZnVsbHkgdW5wdWJsaXNoZWQuCi0KLSMgQWRkIHRvIFdTREwgUGVyc3BlY3RpdmUKLUFMVF9BRERfVE9fV1NETF9QRVJTUEVDVElWRT1BZGQgVG8gV1NETCBQYWdlCi1NU0dfSU5GT19XU0RMX0FEREVEX1RPX1dTRExfUEVSU1BFQ1RJVkU9SVdBQjAzNzZJICUxIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gV1NETCBwYWdlLgotTVNHX0VSUk9SX1dTRExfTk9UX0FEREVEX1RPX1dTRExfUEVSU1BFQ1RJVkU9SVdBQjAzNzdFICUxIGNvdWxkIG5vdCBiZSBhZGRlZCB0byBXU0RMIHBhZ2UuCi0KLSMgQWRkIHRvIEZhdm9yaXRlcwotQUxUX0FERF9UT19GQVZPUklURVM9QWRkIFRvIEZhdm9yaXRlcwotTVNHX0lORk9fRkFWT1JJVEVfQURERUQ9SVdBQjAyNjNJICUxIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gZmF2b3JpdGVzLgotTVNHX0VSUk9SX0ZBVk9SSVRFX05PVF9BRERFRD1JV0FCMDI2NEUgJTEgY291bGQgbm90IGJlIGFkZGVkIHRvIGZhdm9yaXRlcy4KLU1TR19FUlJPUl9GQVZPUklURV9BTFJFQURZX0VYSVNUUz1JV0FCMDMyNEUgJTEgYWxyZWFkeSBleGlzdHMgaW4gZmF2b3J0aWVzLgotTVNHX1FVRVNUSU9OX09WRVJXUklURV9GQVZPUklURVM9RmF2b3JpdGUgYWxyZWFkeSBleGlzdHMuICBEbyB5b3Ugd2lzaCB0byBvdmVyd3JpdGU/Ci0KLSMgUmVmcmVzaAotTVNHX0lORk9fTk9ERV9SRUZSRVNIRUQ9SVdBQjAyNjVJICUxIHJlZnJlc2hlZC4KLU1TR19RVUVTVElPTl9SRU1PVkVfTk9ERT0lMSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBEbyB5b3Ugd2lzaCB0byBjbGVhciBpdD8KLQotIyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXMKLUFMVF9NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFUz1NYW5hZ2UgUmVmZXJlbmNlZCBTZXJ2aWNlcwotRk9STV9MQUJFTF9NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19ERVNDPUFkZCBkaXNjb3ZlcmVkIG9yIHB1Ymxpc2hlZCBzZXJ2aWNlcyB0byB0aGUgbGlzdCBvZiByZWZlcmVuY2VkIHNlcnZpY2VzIGJ5IGNsaWNraW5nIHRoZSA8c3Ryb25nPkFkZCBTZXJ2aWNlczwvc3Ryb25nPiBidXR0b24uIFJlbW92ZSBzZWxlY3RlZCByZWZlcmVuY2VzIGJ5IGNsaWNraW5nIHRoZSA8c3Ryb25nPlJlbW92ZSBSZWZlcmVuY2VzPC9zdHJvbmc+IGJ1dHRvbi4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkIGZvciBjaGFuZ2VzLgotRk9STV9MQUJFTF9SRUZFUkVOQ0VEX1NFUlZJQ0VTPVJlZmVyZW5jZWQgU2VydmljZXMKLUZPUk1fQlVUVE9OX0FERF9TRVJWSUNFUz1BZGQgU2VydmljZXMKLUZPUk1fQlVUVE9OX1JFTU9WRV9SRUZFUkVOQ0VTPVJlbW92ZSBSZWZlcmVuY2VzCi1NU0dfRVJST1JfTk9fUkVGRVJFTkNFX1NFTEVDVEVEPUlXQUIwMjY2RSBTZWxlY3QgYXQgbGVhc3Qgb25lIHJlZmVyZW5jZWQgc2VydmljZSBiZWZvcmUgcHJvY2VlZGluZy4KLU1TR19FUlJPUl9OT19TRVJWSUNFUz1JV0FCMDI2N0UgR2V0IG9yIGZpbmQgYXQgbGVhc3Qgb25lIHNlcnZpY2UgYmVmb3JlIHByb2NlZWRpbmcuCi1NU0dfRVJST1JfU0VSVklDRV9OT1RfUkVGRVJFTkNFRD1JV0FCMDI2OEUgU2VydmljZSAlMSBjb3VsZCBub3QgYmUgcmVmZXJlbmNlZC4KLU1TR19FUlJPUl9SRUZFUkVOQ0VfTk9UX1JFTU9WRUQ9SVdBQjAyNjlFIFNlcnZpY2UgcmVmZXJlbmNlICUxIGNvdWxkIG5vdCBiZSByZW1vdmVkLgotTVNHX0lORk9fU0VSVklDRV9SRUZFUkVOQ0VEPUlXQUIwMjcwSSBTZXJ2aWNlICUxIHdhcyBzdWNjZXNzZnVsbHkgcmVmZXJlbmNlZC4KLU1TR19JTkZPX1NFUlZJQ0VfUkVGRVJFTkNFX1JFTU9WRUQ9SVdBQjAyNzFJIFNlcnZpY2UgcmVmZXJlbmNlICUxIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZC4KLQotIyBNYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zCi1BTFRfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TPU1hbmFnZSBQdWJsaXNoZXIgQXNzZXJ0aW9ucwotRk9STV9MQUJFTF9NQU5BR0VfUFVCTElTSEVSX0FTU0VSVElPTlNfREVTQz1BZGQgZGlzY292ZXJlZCBvciBwdWJsaXNoZWQgYnVzaW5lc3NlcyB0byB0aGUgbGlzdCBvZiBwdWJsaXNoZXIgYXNzZXJ0aW9ucyBieSBjbGlja2luZyA8c3Ryb25nPkFkZCBBc3NlcnRpb25zPC9zdHJvbmc+LiBSZW1vdmUgc2VsZWN0ZWQgYXNzZXJ0aW9ucyBieSBjbGlja2luZyA8c3Ryb25nPlJlbW92ZSBBc3NlcnRpb25zPC9zdHJvbmc+LiBDb21wbGV0ZSBzZWxlY3RlZCBhc3NlcnRpb25zIGJ5IGNsaWNraW5nIDxzdHJvbmc+Q29tcGxldGUgQXNzZXJ0aW9uczwvc3Ryb25nPi4gQ2xpY2sgPHN0cm9uZz5SZWZyZXNoIEFzc2VydGlvbnM8L3N0cm9uZz4gdG8gcmVmcmVzaCB0aGUgbGlzdCBvZiBhc3NlcnRpb25zLgotRk9STV9MQUJFTF9JTkNPTVBMRVRFX0FTU0VSVElPTlNfVklTSUJJTElUWV9ERVNDPVBsZWFzZSBub3RlIHRoYXQgaW5jb21wbGV0ZSBwdWJsaXNoZXIgYXNzZXJ0aW9ucyBhcmUgdmlzaWJsZSBvbmx5IHRvIHRoZSBvd25lciBvZiB0aGUgYnVzaW5lc3MuCi1GT1JNX0xBQkVMX0JVU0lORVNTRVM9QnVzaW5lc3NlcwotRk9STV9CVVRUT05fU0hPV19BTExfUFVCTElTSEVSX0FTU0VSVElPTlM9UmVmcmVzaCBBc3NlcnRpb25zCi1GT1JNX0JVVFRPTl9DT01QTEVURV9QVUJMSVNIRVJfQVNTRVJUSU9OUz1Db21wbGV0ZSBBc3NlcnRpb25zCi1GT1JNX0JVVFRPTl9BRERfUFVCTElTSEVSX0FTU0VSVElPTlM9QWRkIEFzc2VydGlvbnMKLUZPUk1fQlVUVE9OX1JFTU9WRV9QVUJMSVNIRVJfQVNTRVJUSU9OUz1SZW1vdmUgQXNzZXJ0aW9ucwotTVNHX0lORk9fUFVCTElTSEVSX0FTU0VSVElPTlNfUkVGUkVTSEVEPUlXQUIwMzI1SSBQdWJsaXNoZXIgQXNzZXJ0aW9ucyBhcmUgcmVmcmVzaGVkLgotTVNHX0VSUk9SX05PX0lOQ09NUExFVEVfQVNTRVJUSU9OX1NFTEVDVEVEPUlXQUIwMzI2RSBTZWxlY3QgYXQgbGVhc3Qgb25lIGluY29tcGxldGUgcHVibGlzaGVyIGFzc2VydGlvbi4KLU1TR19FUlJPUl9OT1RfT1dORURfQlVTSU5FU1M9SVdBQjAzMjdFIFRoaXMgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gYSBidXNpbmVzcyBvd25lZCBieSBhbm90aGVyIHBhcnR5LgotCi0jIEdldEJ1c2luZXNzZXMKLUFMVF9HRVRfQlVTSU5FU1M9R2V0IEJ1c2luZXNzCi1BTFRfR0VUX0JVU0lORVNTRVM9R2V0IEJ1c2luZXNzZXMKLU5PREVfTkFNRV9TRVJWSUNFX0JVU0lORVNTPUJ1c2luZXNzIGZvciBzZXJ2aWNlICUxCi1OT0RFX05BTUVfU0lfQlVTSU5FU1NFUz1CdXNpbmVzc2VzIGZvciBzZXJ2aWNlIGludGVyZmFjZSAlMQotTVNHX1FVRVNUSU9OX1JFTU9WRV9TRVJWSUNFX05PREU9VGhlIHNlcnZpY2UgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4gRG8geW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbm9kZT8KLQotIyBHZXRTZXJ2aWNlSW50ZXJmYWNlcwotQUxUX0dFVF9TRVJWSUNFX0lOVEVSRkFDRVM9R2V0IFNlcnZpY2UgSW50ZXJmYWNlcwotTk9ERV9OQU1FX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTPVNlcnZpY2UgaW50ZXJmYWNlcyBmb3Igc2VydmljZSAlMQotTVNHX1FVRVNUSU9OX0dFVF9TSV9SRU1PVkVfU0VSVklDRV9OT0RFPVRoZSBzZXJ2aWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIERvIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIG5vZGU/Ci0KLSMgR2V0U2VydmljZXMKLUFMVF9HRVRfU0VSVklDRVM9R2V0IFNlcnZpY2VzCi1OT0RFX05BTUVfU0lfU0VSVklDRVM9U2VydmljZXMgZm9yIHNlcnZpY2UgaW50ZXJmYWNlICUxCi1OT0RFX05BTUVfQlVTSU5FU1NfU0VSVklDRVM9U2VydmljZXMgZm9yIGJ1c2luZXNzICUxCi1NU0dfUVVFU1RJT05fUkVNT1ZFX1NJX05PREU9VGhlIHNlcnZpY2UgaW50ZXJmYWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIERvIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIG5vZGU/Ci1NU0dfUVVFU1RJT05fUkVNT1ZFX0JVU0lORVNTX05PREU9VGhlIGJ1c2luZXNzIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIERvIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIG5vZGU/Ci0KLSMgUmVmcmVzaFVERElOb2Rlc0FjdGlvbgotTVNHX0VSUk9SX05PREVfREFUQV9WQUxJREFUSU9OX0ZBSUxFRD1JV0FCMDI3MkUgJTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4KLQotIyBTdW1tYXJpZXMKLUFMVF9TVU1NQVJZX1FVRVJJRVM9U3VtbWFyeSBvZiBRdWVyaWVzCi1BTFRfU1VNTUFSWV9CVVNJTkVTU0VTPVN1bW1hcnkgb2YgQnVzaW5lc3NlcwotQUxUX1NVTU1BUllfU0VSVklDRVM9U3VtbWFyeSBvZiBTZXJ2aWNlcwotQUxUX1NVTU1BUllfU0VSVklDRV9JTlRFUkZBQ0VTPVN1bW1hcnkgb2YgU2VydmljZSBJbnRlcmZhY2VzCi1GT1JNX0xBQkVMX1FVRVJJRVM9UXVlcmllcwotCi0jIFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbgotTVNHX1FVRVNUSU9OX0lURU1fVkFMSURBVElPTl9GQUlMRUQ9JTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4gRG8geW91IHdpc2ggdG8gcmVtb3ZlIGl0PwotCi0jIEZyYW1lIHRpdGxlcwotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUj1OYXZpZ2F0b3IgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUj1OYXZpZ2F0b3IgVG9vbGJhcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQ9TmF2aWdhdG9yIENvbnRlbnQKLUZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSPUFjdGlvbnMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUj1Qcm9wZXJ0aWVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSPVByb3BlcnRpZXMgVG9vbGJhcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UPVByb3BlcnRpZXMgQ29udGVudAotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUj1TdGF0dXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUj1TdGF0dXMgVG9vbGJhcgotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQ9U3RhdHVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1VERElfUEVSU1BFQ1RJVkVfQ09OVEVOVD1VRERJIFBhZ2UgQ29udGVudAotRlJBTUVfVElUTEVfQ0FURUdPUklFU19XT1JLQVJFQT1DYXRlZ29yaWVzIFdvcmsgQXJlYQotRlJBTUVfVElUTEVfQ0FURUdPUklFU19UT09MQkFSPUNhdGVnb3JpZXMgVG9vbGJhcgotRlJBTUVfVElUTEVfQ0FURUdPUklFU19DT05URU5UPUNhdGVnb3JpZXMgQ29udGVudAotRlJBTUVfVElUTEVfV1NETF9UT09MQkFSPVdTREwgQnJvd3NlciBUb29sYmFyCi1GUkFNRV9USVRMRV9XU0RMX0NPTlRFTlQ9V1NETCBCcm93c2VyIENvbnRlbnQKLQotIyBGb3JtIHRpdGxlcwotRk9STV9USVRMRV9CVVNJTkVTU19ERVRBSUxTPUJ1c2luZXNzIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9CVVNJTkVTU19QVUJMSVNIX1NFUlZJQ0U9QnVzaW5lc3MgUHVibGlzaCBTZXJ2aWNlIEZvcm0KLUZPUk1fVElUTEVfR0VUX0ZPUk09U2VsZWN0IGZyb20gRGlzY292ZXJlZCBhbmQgUHVibGlzaGVkIE9iamVjdHMgRm9ybQotRk9STV9USVRMRV9JVEVNU19TVU1NQVJZPVN1bW1hcnkgb2YgSXRlbXMgRm9ybQotRk9STV9USVRMRV9NQU5BR0VfUFVCTElTSEVSX0FTU0VSVElPTlM9TWFuYWdlIFB1Ymxpc2hlciBBc3NlcnRpb25zIEZvcm0KLUZPUk1fVElUTEVfTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVM9TWFuYWdlIFJlZmVyZW5jZWQgU2VydmljZXMgRm9ybQotRk9STV9USVRMRV9PUEVOX1JFR0lTVFJZPU9wZW4gUmVnaXN0cnkgRm9ybQotRk9STV9USVRMRV9SRUdJU1RSWV9ERVRBSUxTPVJlZ2lzdHJ5IERldGFpbHMgRm9ybQotRk9STV9USVRMRV9SRUdJU1RSWV9QVUJMSVNIPVJlZ2lzdHJ5IFB1Ymxpc2ggRm9ybQotRk9STV9USVRMRV9SRUdJU1RSWV9GSU5EPVJlZ2lzdHJ5IEZpbmQgRm9ybQotRk9STV9USVRMRV9SRVNVTFRTPVJlc3VsdHMgRm9ybQotRk9STV9USVRMRV9TRVJWSUNFX0RFVEFJTFM9U2VydmljZSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUz1TZXJ2aWNlIEludGVyZmFjZSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfVU5QVUJMSVNIPVVucHVibGlzaCBGb3JtCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvd3NkbC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3dzZGwucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M5ZjIyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvd3NkbC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotIyAyMDA3MDUwNyAgIDE4NTYwMCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIHN0YXR1cyBwYW5lJ3MgImhlYWRlciIgdHdpc3RpZSBzaG91bGQgbm90IGFwcGVhciBmb3IgcmVzcG9uc2VzIHdpdGhvdXQgaGVhZGVycwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi10aXRsZT1XU0RMCi0KLSMgTm9kZXMKLU5PREVfTkFNRV9XU0RMX01BSU49V1NETCBNYWluCi0KLSMgRnJhbWUgdGl0bGVzCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSPU5hdmlnYXRvciBDb250YWluZXIKLUZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSPU5hdmlnYXRvciBUb29sYmFyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVD1OYXZpZ2F0b3IgQ29udGVudAotRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVI9QWN0aW9ucyBDb250YWluZXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSPVByb3BlcnRpZXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVI9UHJvcGVydGllcyBUb29sYmFyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQ9UHJvcGVydGllcyBDb250ZW50Ci1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSPVN0YXR1cyBDb250YWluZXIKLUZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSPVN0YXR1cyBUb29sYmFyCi1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVD1TdGF0dXMgQ29udGVudAotRlJBTUVfVElUTEVfV1NETF9QRVJTUEVDVElWRV9DT05URU5UPVdTREwgUGFnZSBDb250ZW50Ci1GUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fVE9PTEJBUj1YU0QgSW5mb3JtYXRpb24gRGlhbG9nIFRvb2xiYXIKLUZSQU1FX1RJVExFX1hTRF9JTkZPUk1BVElPTl9DT05URU5UPVhTRCBJbmZvcm1hdGlvbiBEaWFsb2cgQ29udGVudAotCi0jIE9wZW5XU0RMQWN0aW9uCi1BTFRfT1BFTl9XU0RMPU9wZW4gV1NETAotTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkw9SVdBQjAzNzhFIEVudGVyIGEgdmFsaWQgV1NETCBVUkwuCi1NU0dfRVJST1JfT1BFTl9XU0RMPUlXQUIwMzc5RSBVbmFibGUgdG8gb3BlbiAlMS4KLU1TR19FUlJPUl9YU0RfVkFMSURBVElPTj1JV0FCMDM4MEUgRXJyb3JzIHdlcmUgZW5jb3VudGVyZWQgd2hpbGUgdmFsaWRhdGluZyBYTUwgc2NoZW1hcy4KLU1TR19JTkZPX09QRU5fV1NETF9TVUNDRVNTRlVMPUlXQUIwMzgxSSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZC4KLQotIyBXU0RMIEVsZW1lbnQgZGV0YWlscwotQUxUX1dTRExfREVUQUlMUz1XU0RMIERldGFpbHMKLUZPUk1fTEFCRUxfV1NETF9ERVRBSUxTX0RFU0M9U2hvd24gYmVsb3cgYXJlIHRoZSBkZXRhaWxzIGZvciB0aGlzIFdTREwgZG9jdW1lbnQuIENsaWNrIG9uIGEgc2VydmljZSBvciBiaW5kaW5nIHRvIHNlZSBpdHMgZGV0YWlscy4KLQotIyBXU0RMIFNlcnZpY2UgRWxlbWVudCBkZXRhaWxzCi1BTFRfV1NETF9TRVJWSUNFX0RFVEFJTFM9V1NETCBTZXJ2aWNlIERldGFpbHMKLUZPUk1fTEFCRUxfU0VSVklDRV9ERVRBSUxTX0RFU0M9U2hvd24gYmVsb3cgYXJlIHRoZSBkZXRhaWxzIGZvciB0aGlzICZsdDtzZXJ2aWNlJmd0OyBlbGVtZW50LiBDbGljayBvbiBhIGJpbmRpbmcgdG8gc2VlIGl0cyBvcGVyYXRpb25zLgotCi1BTFRfTklMPW5pbD8KLQotIyBXU0RMIEJpbmRpbmcgRWxlbWVudCBkZXRhaWxzCi1BTFRfV1NETF9CSU5ESU5HX0RFVEFJTFM9V1NETCBCaW5kaW5nIERldGFpbHMKLUZPUk1fTEFCRUxfQklORElOR19ERVRBSUxTX0RFU0M9U2hvd24gYmVsb3cgYXJlIHRoZSBkZXRhaWxzIGZvciB0aGlzIDxzdHJvbmc+JTE8L3N0cm9uZz4gICZsdDtiaW5kaW5nJmd0OyBlbGVtZW50LiBDbGljayBvbiBhbiBvcGVyYXRpb24gdG8gZmlsbCBpbiBpdHMgcGFyYW1ldGVycyBhbmQgaW52b2tlIGl0IG9yIHNwZWNpZnkgYWRkaXRpb25hbCBlbmRwb2ludHMuCi0KLSMgSW52b2tlV1NETE9wZXJhdGlvbkFjdGlvbgotQUxUX0lOVk9LRV9XU0RMX09QRVJBVElPTj1JbnZva2UgYSBXU0RMIE9wZXJhdGlvbgotTVNHX0VSUk9SX1VOQUJMRV9UT19DT05ORUNUPUlXQUIwMzgyRSBVbmFibGUgdG8gY29ubmVjdCB0byAlMQotTVNHX0VSUk9SX1ZBTElEQVRJTkdfUEFSQU1FVEVSPUlXQUIwMzgzRSBFcnJvciB2YWxpZGF0aW5nICUxCi0KLSMgV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uCi1BTFRfQUREX1dTRExfVE9fRkFWT1JJVEVTPUFkZCBXU0RMIFRvIEZhdm9yaXRlcwotTVNHX0VSUk9SX0ZBVk9SSVRFU19BTFJFQURZX0VYSVNUUz1JV0FCMDM4NEUgJTEgYWxyZWFkeSBleGlzdHMgaW4gZmF2b3JpdGVzLgotTVNHX0VSUk9SX0FERF9UT19GQVZPUklURVM9SVdBQjAzODVFIFVuYWJsZSB0byBhZGQgJTEgdG8gZmF2b3JpdGVzLgotTVNHX0lORk9fQUREX1RPX0ZBVk9SSVRFU19TVUNDRVNTRlVMPUlXQUIwMzg2SSAlMSBpcyBhZGRlZCB0byBmYXZvcml0ZXMuCi1NU0dfUVVFU1RJT05fT1ZFUldSSVRFX0ZBVk9SSVRFUz1GYXZvcml0ZSBhbHJlYWR5IGV4aXN0cy4gIERvIHlvdSB3aXNoIHRvIG92ZXJ3cml0ZT8KLQotIyBSZWZyZXNoV1NETEFjdGlvbgotTVNHX0lORk9fUkVGUkVTSF9XU0RMX1NVQ0NFU1NGVUw9SVdBQjAzODdJICUxIGlzIHJlZnJlc2hlZC4KLU1TR19RVUVTVElPTl9SRU1PVkVfV1NETF9OT0RFPSUxIGlzIG5vIGxvbmdlciByZXNvbHZhYmxlLiAgRG8geW91IHdpc2ggdG8gY2xlYXIgaXQ/Ci0KLSMgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24KLU1TR19JTkZPX1VQREFURV9XU0RMX0JJTkRJTkdfU1VDQ0VTU0ZVTD1JV0FCMDM4OEkgRW5kcG9pbnRzIHdlcmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuCi0KLSMgRm9ybSB0aXRsZXMKLUZPUk1fVElUTEVfT1BFTl9XU0RMPU9wZW4gV1NETCBGb3JtCi1GT1JNX1RJVExFX1dTRExfREVUQUlMUz1XU0RMIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0RMX1NFUlZJQ0VfREVUQUlMUz1XU0RMIFNlcnZpY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1dTRExfQklORElOR19ERVRBSUxTPVdTREwgQmluZGluZyBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfSU5WT0tFX1dTRExfT1BFUkFUSU9OPVdTREwgT3BlcmF0aW9uIEZvcm0KLQotIyBGb3JtIExhYmVscwotRk9STV9MQUJFTF9PUEVOX1dTRExfREVTQz1FbnRlciB0aGUgVVJMIG9mIGEgV1NETCBkb2N1bWVudCBhbmQgY2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBleHBsb3JlLgotRk9STV9MQUJFTF9TRVJWSUNFUz1TZXJ2aWNlcwotRk9STV9MQUJFTF9CSU5ESU5HUz1CaW5kaW5ncwotRk9STV9MQUJFTF9PUEVSQVRJT05TPU9wZXJhdGlvbnMKLUZPUk1fTEFCRUxfQklORElOR19UWVBFPVR5cGUKLUZPUk1fTEFCRUxfQklORElOR19UWVBFX1VOU1VQUE9SVEVEPVVuc3VwcG9ydGVkCi1GT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9TT0FQPVNPQVAKLUZPUk1fTEFCRUxfQklORElOR19UWVBFX0hUVFBfR0VUPUhUVFAgR0VUCi1GT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9IVFRQX1BPU1Q9SFRUUCBQT1NUCi1GT1JNX0xBQkVMX05BTUU9TmFtZQotRk9STV9MQUJFTF9ET0NVTUVOVEFUSU9OPURvY3VtZW50YXRpb24KLUZPUk1fTEFCRUxfRU5EUE9JTlQ9RW5kcG9pbnQKLUZPUk1fTEFCRUxfSU5WT0tFX1dTRExfT1BFUkFUSU9OX0RFU0M9RW50ZXIgdGhlIHBhcmFtZXRlcnMgb2YgdGhpcyBXU0RMIG9wZXJhdGlvbiBhbmQgY2xpY2sgPHN0cm9uZz5HbzwvU3Ryb25nPiB0byBpbnZva2UuCi1GT1JNX0xBQkVMX0lOVk9LRV9XU0RMX09QRVJBVElPTl9ERVNDX05PX0lOUFVUPVRoZXJlIGFyZSBubyBpbnB1dCBwYXJhbWV0ZXJzIGZvciB0aGUgV1NETCBvcGVyYXRpb24gIiUxIi4gQ2xpY2sgPHN0cm9uZz5HbzwvU3Ryb25nPiB0byBpbnZva2UuCi1GT1JNX0xJTktfQUREPUFkZAotRk9STV9MSU5LX1JFTU9WRT1SZW1vdmUKLUZPUk1fTEFCRUxfVkFMVUVTPVZhbHVlcwotRk9STV9MQUJFTF9FTkFCTEVfRElTQUJMRV9HUk9VUD1FbmFibGUvRGlzYWJsZSBncm91cAotRk9STV9MQUJFTF9VTklPTl9UWVBFPVVuaW9uIHR5cGVzCi1GT1JNX0xBQkVMX0xBTkdVQUdFPUxhbmd1YWdlCi1GT1JNX0xBQkVMX1hTRF9BUFBMSUNBVElPTl9JTkZPUk1BVElPTj1BcHBsaWNhdGlvbiBJbmZvcm1hdGlvbgotRk9STV9MQUJFTF9YU0RfRE9DVU1FTlRBVElPTj1Eb2N1bWVudGF0aW9uCi1GT1JNX0xBQkVMX1NPQVBfUkVRVUVTVF9FTlZFTE9QRT1TT0FQIFJlcXVlc3QgRW52ZWxvcGU6Ci1GT1JNX0xBQkVMX1NPQVBfUkVTUE9OU0VfRU5WRUxPUEU9U09BUCBSZXNwb25zZSBFbnZlbG9wZToKLUZPUk1fTEFCRUxfR1JPVVBfQUxMX09SREVSSU5HX01PVkVfVVA9TW92ZSBlbGVtZW50IHVwCi1GT1JNX0xBQkVMX0dST1VQX0FMTF9PUkRFUklOR19NT1ZFX0RPV049TW92ZSBlbGVtZW50IGRvd24KLUZPUk1fTEFCRUxfQkFTRV9UWVBFPUJhc2UgdHlwZQotRk9STV9MQUJFTF9VTkJPVU5ERUQ9VW5ib3VuZGVkCi1GT1JNX0xBQkVMX0xFTkdUSD1MZW5ndGgKLUZPUk1fTEFCRUxfTEVOR1RIX1ZBTFVFPVslMS4uJTJdCi1GT1JNX0xBQkVMX1BBVFRFUk49UGF0dGVybgotRk9STV9MQUJFTF9XSElURVNQQUNFPVdoaXRlc3BhY2UKLUZPUk1fTEFCRUxfUkFOR0VfT0ZfVkFMVUVTPVJhbmdlIG9mIHZhbHVlcwotRk9STV9MQUJFTF9NSU5fRVhDTFVTSVZFPSglMS4uCi1GT1JNX0xBQkVMX01JTl9JTkNMVVNJVkU9WyUxLi4KLUZPUk1fTEFCRUxfTUFYX0VYQ0xVU0lWRT0lMSkKLUZPUk1fTEFCRUxfTUFYX0lOQ0xVU0lWRT0lMV0KLUZPUk1fTEFCRUxfVE9UQUxfRElHSVRTPVRvdGFsIGRpZ2l0cwotRk9STV9MQUJFTF9GUkFDVElPTl9ESUdJVFM9RnJhY3Rpb24gZGlnaXRzCi1GT1JNX0xBQkVMX09DQ1VSQU5DRT1PY2N1cmFuY2Ugb2YKLUZPUk1fTEFCRUxfVU5JT05fTUVNQkVSUz1VbmlvbiBNZW1iZXJzCi1GT1JNX0xBQkVMX0xJU1RfSVRFTVM9TGlzdCBpdGVtcwotRk9STV9MQUJFTF9FTEVNRU5UUz1FbGVtZW50cwotRk9STV9MQUJFTF9TT0FQX0VOQ19BUlJBWVM9U09BUCBBcnJheXMKLUZPUk1fTEFCRUxfQ09OVEVOVD1Db250ZW50Ci1GT1JNX0xBQkVMX0FUT01JQ19OQU1FX1RZUEU9JTEgKCUyKToKLUZPUk1fTEFCRUxfTlVMTD1udWxsCi1GT1JNX0xBQkVMX0dST1VQX05VTUJFUj1Hcm91cCAlMQotRk9STV9MQUJFTF9DSE9JQ0VTPUNob2ljZXMKLUZPUk1fTEFCRUxfTk9USElOR19UT19ESVNQTEFZX0lOX0ZPUk1fVklFVz1UaGVyZSBpcyBub3RoaW5nIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZm9ybSB2aWV3LiAgUGxlYXNlIHN3aXRjaCB0byB0aGUgc291cmNlIHZpZXcgZm9yIHRoZSBTT0FQIHJlcXVlc3QgYW5kIHJlc3BvbnNlLgotRk9STV9MQUJFTF9TT0FQX1JFU1BPTlNFX0ZBSUxFRF9WQUxJREFUSU9OX0lOX0ZPUk1fVklFVz1UaGUgU09BUCByZXNwb25zZSBmYWlsZWQgc2NoZW1hIHZhbGlkYXRpb24uICBQbGVhc2Ugc3dpdGNoIHRvIHRoZSBzb3VyY2UgdmlldyBmb3IgdGhlIFNPQVAgcmVzcG9uc2UgaW4gWE1MIGZvcm1hdC4KLUZPUk1fTEFCRUxfQ0FOTk9UX0RJU1BMQVlfSEVBREVSX0lOX0ZPUk1fVklFVz1UaGUgY29udGVudCBvZiB0aGUgaGVhZGVyIGNhbm5vdCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGZvcm0gdmlldy4gIFBsZWFzZSBzd2l0Y2ggdG8gdGhlIHNvdXJjZSB2aWV3IHRvIGV4YW1pbmUgdGhlIHJhdyBjb250ZW50LgotRk9STV9MQUJFTF9DQU5OT1RfRElTUExBWV9CT0RZX0lOX0ZPUk1fVklFVz1UaGUgY29udGVudCBvZiB0aGUgYm9keSBjYW5ub3QgYmUgZGlzcGxheWVkIGluIHRoZSBmb3JtIHZpZXcuICBQbGVhc2Ugc3dpdGNoIHRvIHRoZSBzb3VyY2UgdmlldyB0byBleGFtaW5lIHRoZSByYXcgY29udGVudC4KLUZPUk1fTEFCRUxfQk9EWV9JU19FTVBUWT1UaGUgYm9keSBpcyBlbXB0eS4KLUZPUk1fTEFCRUxfRU5EX1BPSU5UUz1FbmRwb2ludHMKLUZPUk1fTEFCRUxfSEVBREVSPUhlYWRlcgotRk9STV9MQUJFTF9CT0RZPUJvZHkKLUZPUk1fTEFCRUxfTVVTVFVOREVSU1RBTkQ9bXVzdFVuZGVyc3RhbmQKLUZPUk1fTEFCRUxfQUNUT1I9YWN0b3IKLQotIyBTb3VyY2UvRm9ybSB2aWV3cwotRk9STV9MSU5LX0ZPUk09Rm9ybQotQUxUX1NXSVRDSF9UT19GT1JNX1ZJRVc9U3dpdGNoIHRvIGZvcm0gdmlldwotRk9STV9MSU5LX1NPVVJDRT1Tb3VyY2UKLUFMVF9TV0lUQ0hfVE9fU09VUkNFX1ZJRVc9U3dpdGNoIHRvIHNvdXJjZSB2aWV3Ci1GT1JNX0xBQkVMX0ZSQUdNRU5UX1NPQVBfVklFV19DT05URU5UPVNvYXAgQm9keToKLUJVVFRPTl9MQUJFTF9MT0FEPUxvYWQKLUJVVFRPTl9MQUJFTF9TQVZFX0FTPVNhdmUgQXMuLi4KLU1TR19RVUVTVElPTl9TWU5DX1ZJRVdTPUZvcm1hdCBvZiB0aGUgc291cmNlIGNvbnRlbnQgbWF5IGJlIGFsdGVyZWQgYXMgYSByZXN1bHQgb2Ygc3dpdGNoaW5nIHRvIHRoZSBmb3JtIHZpZXcuICBEbyB5b3Ugd2lzaCB0byBwcm9jZXNzPwotTVNHX1FVRVNUSU9OX1NZTkNfVklFV1NfREVTUElURV9JTlZBTElEX1NPVVJDRV9DT05URU5UPUNvbnRlbnQgb2YgdGhlIHNvdXJjZSB2aWV3IGZhaWxlZCBzY2hlbWEgdmFsaWRhdGlvbi4gIFN5bmNocm9uaXplIGFueXdheXM/ICAoQ29udGVudCBvZiB0aGUgc291cmNlIHZpZXcgbWF5IGJlIG1vZGlmaWVkKQotCi0jIEZvcm0gY29udHJvbCB0aXRsZXMKLUZPUk1fQ09OVFJPTF9USVRMRV9FTkFCTEVfRElTQUJMRV9HUk9VUD1FbmFibGUvRGlzYWJsZSBncm91cAotRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9FTEVNRU5UX0lOX0dST1VQPVNlbGVjdCBlbGVtZW50IGluIGdyb3VwCi1GT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1VOSU9OX1RZUEU9U2VsZWN0IHVuaW9uIHR5cGUKLUZPUk1fQ09OVFJPTF9USVRMRV9TT0FQX0ZJTEU9U09BUCBkYXRhIGZpbGUKLQotIyBYU0QgSW5mb3JtYXRpb24gRGlhbG9nCi1USVRMRV9YU0RfSU5GT1JNQVRJT05fRElBTE9HPVhTRCBJbmZvcm1hdGlvbiBEaWFsb2cKLQotIyBFcnJvciBtZXNzYWdlcwotTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQ9SVdBQjAzODlFIFNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbS4KLU1TR19FUlJPUl9NQVhfT0NDVVJTX1ZJT0xBVElPTj1JV0FCMDM5MEUgTWF4aW11bSBvY2N1cmFuY2UgaXMgcmVhY2hlZC4KLU1TR19FUlJPUl9NSU5fT0NDVVJTX1ZJT0xBVElPTj1JV0FCMDM5MUUgTWluaW11bSBvY2N1cmFuY2UgaXMgcmVhY2hlZC4KLU1TR19FUlJPUl9DQU5OT1RfTU9WRV9GSVJTVF9FTEVNRU5UX1VQPUlXQUIwMzkyRSBTZWxlY3RlZCBlbGVtZW50IGlzIGFscmVhZHkgdGhlIGZpcnN0IGluIHRoZSBncm91cC4KLU1TR19FUlJPUl9DQU5OT1RfTU9WRV9MQVNUX0VMRU1FTlRfRE9XTj1JV0FCMDM5M0UgU2VsZWN0ZWQgZWxlbWVudCBpcyBhbHJlYWR5IHRoZSBsYXN0IGluIHRoZSBncm91cC4KLQotIyBTT0FQIHRyYW5zcG9ydCBtZXNzYWdlcwotTVNHX0VSUk9SX05PX1NVSVRBQkxFX1RSQU5TUE9SVD1GYWlsZWQgdG8gaW52b2tlIG9wZXJhdGlvbiwgYSBzdWl0YWJsZSB0cmFuc3BvcnQgZXh0ZW5zaW9uIHdhcyBub3QgZm91bmQuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvd3NpbC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3dzaWwucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc5OGZkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvd3NpbC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotdGl0bGU9V1NJTAotCi0jIE5hdmlnYXRvcgotV1NJTF9NQUlOX05PREU9V1NJTCBNYWluCi0KLSMgRm9ybXMKLUZPUk1fTEFCRUxfVVJMPVVSTAotRk9STV9MQUJFTF9JVEVNX05VTUJFUj1JdGVtICMKLUZPUk1fTEFCRUxfVURESV9CVVNJTkVTU19OQU1FPVVEREkgQnVzaW5lc3MgTmFtZQotRk9STV9MQUJFTF9VRERJX1NFUlZJQ0VfTkFNRT1VRERJIFNlcnZpY2UgTmFtZQotRk9STV9MQUJFTF9MQU5HVUFHRT1MYW5ndWFnZQotRk9STV9MQUJFTF9BQlNUUkFDVD1BYnN0cmFjdAotRk9STV9MQUJFTF9OQU1FPU5hbWUKLUZPUk1fTEFCRUxfV1NETF9CSU5ESU5HUz1XU0RMIEJpbmRpbmdzCi1GT1JNX0xBQkVMX05BTUVTUEFDRV9VUkk9TmFtZXNwYWNlIFVSSQotRk9STV9MQUJFTF9MT0NBTF9OQU1FPUxvY2FsIE5hbWUKLUZPUk1fTEFCRUxfSU5RVUlSWV9BUEk9SW5xdWlyeSBBUEkKLUZPUk1fTEFCRUxfU0VSVklDRV9LRVk9U2VydmljZSBLZXkKLUZPUk1fTEFCRUxfQlVTSU5FU1NfS0VZPUJ1c2luZXNzIEtleQotRk9STV9MQUJFTF9ESVNDT1ZFUllfVVJMPURpc2NvdmVyeSBVUkwKLUZPUk1fTEFCRUxfV1NJTD1XU0lMIERldGFpbHMKLUZPUk1fTEFCRUxfV1NJTF9MSU5LUz1XU0lMIExpbmtzCi1GT1JNX0xBQkVMX1dTRExfU0VSVklDRT1XU0RMIFNlcnZpY2VzCi1GT1JNX0xBQkVMX1VERElfU0VSVklDRT1VRERJIFNlcnZpY2VzCi1GT1JNX0xBQkVMX1VERElfQlVTSU5FU1M9VURESSBCdXNpbmVzc2VzCi1GT1JNX0xBQkVMX0FERF9UT19OQVZJR0FUT1I9QWRkIFRvIE5hdmlnYXRvcgotRk9STV9MQUJFTF9BRERfVE9fRkFWT1JJVEVTPUFkZCBUbyBGYXZvcml0ZXMKLUZPUk1fTEFCRUxfQUREX1RPX1VERElfUEVSU1BFQ1RJVkU9QWRkIFRvIFVEREkgUGFnZQotRk9STV9MQUJFTF9BRERfVE9fV1NETF9QRVJTUEVDVElWRT1BZGQgVG8gV1NETCBQYWdlCi1GT1JNX0xBQkVMX1JFRlJFU0g9UmVmcmVzaAotRk9STV9MQUJFTF9OQT1OL0EKLUZPUk1fTEFCRUxfVU5BVkFJTEFCTEVfVURESV9TRVJWSUNFPVNlcnZpY2UgVW5hdmFpbGFibGU6Ci1GT1JNX0xBQkVMX1VOQVZBSUxBQkxFX1VERElfQlVTSU5FU1M9QnVzaW5lc3MgVW5hdmFpbGFibGU6Ci1GT1JNX0xBQkVMX0NIT09TRV9XU0lMX0lOU1BFQ1RJT05fVFlQRT1DaG9vc2UgdGhlIHR5cGUgb2Ygb2JqZWN0cyB0byBpbnNwZWN0OgotTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQ9SVdBQjAzMjhFIFNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbS4KLQotIyBPcGVuV1NJTEFjdGlvbgotQUxUX09QRU5fV1NJTD1PcGVuIFdTSUwKLUZPUk1fTEFCRUxfT1BFTl9XU0lMX0RFU0M9RW50ZXIgdGhlIFVSTCBvZiBhIFdTSUwgZG9jdW1lbnQgb3IgYSBIVE1MIGRvY3VtZW50IGFuZCBjbGljayA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIG9wZW4gaW5zcGVjdC4KLVdTSUxfVVJMPVVSTCB0byBkb2N1bWVudDoKLU1TR19FUlJPUl9JTlZBTElEX1dTSUxfVVJMPUlXQUIwMzk0RSAlMSBpcyBub3QgYSB2YWxpZCBXU0lMIFVSTCBvciBIVE1MIFVSTC4KLU1TR19FUlJPUl9XU0lMX0FMUkVBRFlfT1BFTkVEPUlXQUIwMzI5RSAlMSBpcyBhbHJlYWR5IG9wZW5lZCBpbiB0aGUgbmF2aWdhdG9yLgotTVNHX0lORk9fT1BFTl9XU0lMX1NVQ0NFU1NGVUw9SVdBQjAzMzBJICUxIHdhcyBzdWNjZXNzZnVsbHkgb3BlbmVkLgotCi0jIE9wZW5XU0lMTGlua0FjdGlvbgotQUxUX09QRU5fV1NJTF9MSU5LPU9wZW4gV1NJTCBMaW5rCi1NU0dfRVJST1JfV1NJTF9MSU5LX0FMUkVBRFlfT1BFTkVEPUlXQUIwMzMxRSAlMSBpcyBhbHJlYWR5IG9wZW5lZCBpbiB0aGUgbmF2aWdhdG9yCi1NU0dfSU5GT19PUEVOX1dTSUxfTElOS19TVUNDRVNTRlVMPUlXQUIwMzMySSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZC4KLQotIyBXc2lsRGV0YWlsc0FjdGlvbgotQUxUX1dTSUxfREVUQUlMUz1XU0lMIERldGFpbHMKLQotIyBXc2lsU2VydmljZURldGFpbHNBY3Rpb24KLUFMVF9XU0lMX1NFUlZJQ0VfREVUQUlMUz1XU0lMIFNlcnZpY2UgRGV0YWlscwotCi0jIFVkZGlMaW5rRGV0YWlsc0FjdGlvbgotQUxUX1VERElfTElOS19ERVRBSUxTPVVEREkgQnVzaW5lc3MgRGV0YWlscwotCi0jIFdzaWxMaW5rRGV0YWlsc0FjdGlvbgotQUxUX1dTSUxfTElOS19ERVRBSUxTPVdTSUwgTGluayBEZXRhaWxzCi0KLSMgTGlzdFdTRExTZXJ2aWNlc0FjdGlvbgotQUxUX0xJU1RfV1NETF9TRVJWSUNFUz1MaXN0IEFsbCBXU0RMIFNlcnZpY2VzCi1GT1JNX0xBQkVMX0xJU1RfV1NETF9TRVJWSUNFU19ERVNDPVNlbGVjdCBhIHNldCBvZiBXU0RMIHNlcnZpY2VzIGFuZCBjbGljayA8c3Ryb25nPkFkZCB0byBGYXZvcml0ZXM8L3N0cm9uZz4gdG8gYWRkIHRoZXNlIHRvIHRoZSBsaXN0IG9mIGZhdm9yaXRlcy4KLQotIyBMaXN0VURESVNlcnZpY2VzQWN0aW9uCi1BTFRfTElTVF9VRERJX1NFUlZJQ0VTPUxpc3QgQWxsIFVEREkgU2VydmljZXMKLUZPUk1fTEFCRUxfTElTVF9VRERJX1NFUlZJQ0VTX0RFU0M9U2VsZWN0IGEgc2V0IG9mIFVEREkgc2VydmljZXMgYW5kIGNsaWNrIDxzdHJvbmc+QWRkIHRvIEZhdm9yaXRlczwvc3Ryb25nPiB0byBhZGQgdGhlc2UgdG8gdGhlIGxpc3Qgb2YgZmF2b3JpdGVzLiBDbGljayA8c3Ryb25nPkFkZCB0byBVRERJIFBhZ2U8L3N0cm9uZz4gdG8gYWRkIHRoZSBzZWxlY3Rpb25zIHRvIHRoZSBVRERJIFBhZ2UuIENsaWNrIDxzdHJvbmc+UmVmcmVzaDwvc3Ryb25nPiB0byByZWZyZXNoIHRoZSBzZWxlY3Rpb25zLgotCi0jIExpc3RVRERJQnVzaW5lc3Nlc0FjdGlvbgotQUxUX0xJU1RfVURESV9MSU5LUz1MaXN0IEFsbCBVRERJIEJ1c2luZXNzZXMKLUZPUk1fTEFCRUxfTElTVF9VRERJX0JVU0lORVNTRVNfREVTQz1TZWxlY3QgYSBzZXQgb2YgVURESSBidXNpbmVzc2VzIGFuZCBjbGljayA8c3Ryb25nPkFkZCB0byBGYXZvcml0ZXM8L3N0cm9uZz4gdG8gYWRkIHRoZXNlIHRvIHRoZSBsaXN0IG9mIGZhdm9yaXRlcy4gQ2xpY2sgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIGFkZCB0aGVzZSB0byB0aGUgVURESSBQYWdlLiBDbGljayA8c3Ryb25nPlJlZnJlc2g8L3N0cm9uZz4gdG8gcmVmcmVzaCB0aGUgc2VsZWN0aW9ucy4KLQotIyBMaXN0V1NJTExpbmtzQWN0aW9uCi1BTFRfTElTVF9XU0lMX0xJTktTPUxpc3QgQWxsIFdTSUwgTGlua3MKLUZPUk1fTEFCRUxfTElTVF9XU0lMX0xJTktTPVNlbGVjdCBhIHNldCBvZiBXU0lMIGxpbmtzIGFuZCBwcmVzcyA8c3Ryb25nPkFkZCB0byBOYXZpZ2F0b3I8L3N0cm9uZz4gdG8gb3BlbiB0aGVtIGluIHRoZSBuYXZpZ2F0b3IuCi0KLSMgQ2xlYXJXU0lMQWN0aW9uCi1BTFRfQ0xFQVJfV1NJTD1DbGVhciBXU0lMCi0KLSMgUmVmcmVzaEFjdGlvbgotQUxUX1JFRlJFU0hfV1NJTD1SZWZyZXNoIFdTSUwKLUFMVF9SRUZSRVNIX1VERElfQlVTSU5FU1M9UmVmcmVzaCBVRERJIEJ1c2luZXNzCi1BTFRfUkVGUkVTSF9VRERJX1NFUlZJQ0U9UmVmcmVzaCBVRERJIFNlcnZpY2UKLU1TR19FUlJPUl9XU0lMX05PVF9GT1VORD1JV0FCMDMzM0UgV1NJTCAlMSBjb3VsZCBub3QgYmUgbG9hZGVkLgotTVNHX0VSUk9SX0JVU0lORVNTX05PVF9GT1VORD1JV0FCMDMzNEUgQnVzaW5lc3MgJTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4KLU1TR19FUlJPUl9TRVJWSUNFX05PVF9GT1VORD1JV0FCMDMzNUUgU2VydmljZSAlMSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LgotTVNHX0lORk9fUkVGUkVTSF9TVUNDRVNTRlVMPUlXQUIwMzM2SSAlMSBpcyByZWZyZXNoZWQuCi1NU0dfQ09ORklSTV9SRU1PVkVfTk9ERT0lMSBpcyBubyBsb25nZXIgcmVzb2x2YWJsZS4gIERvIHlvdSB3aXNoIHRvIGNsZWFyIGl0PwotCi0jIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uCi1BTFRfQUREX0JVU0lORVNTX1RPX1VERElfUEVSU1BFQ1RJVkU9QWRkIEJ1c2luZXNzIFRvIFVEREkgUGFnZQotQUxUX0FERF9TRVJWSUNFX1RPX1VERElfUEVSU1BFQ1RJVkU9QWRkIFNlcnZpY2UgVG8gVURESSBQYWdlCi1NU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMPUlXQUIwMzM3SSAlMSBpcyBhZGRlZCB0byBVRERJIFBhZ2UuCi1NU0dfRVJST1JfQUREX1RPX1VERElfUEVSU1BFQ1RJVkU9SVdBQjAzMzhFIFVuYWJsZSB0byBhZGQgJTEgdG8gVURESSBQYWdlLgotTVNHX0VSUk9SX0JVU0lORVNTX05PVF9GT1VORD1JV0FCMDMzOUUgQnVzaW5lc3MgJTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4KLU1TR19FUlJPUl9TRVJWSUNFX05PVF9GT1VORD1JV0FCMDM0MEUgU2VydmljZSAlMSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LgotCi0jIFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbgotQUxUX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkU9QWRkIFdTREwgVG8gV1NETCBQYWdlCi1NU0dfSU5GT19BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUw9SVdBQjAzOTVJICUxIGlzIGFkZGVkIHRvIFdTREwgUGFnZS4KLU1TR19FUlJPUl9BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFPUlXQUIwMzk2RSAlMSBjb3VsZCBub3QgYmUgbG9hZGVkLgotCi0jIEFkZFdTSUxUb0Zhdm9yaXRlc0FjdGlvbgotQUxUX0FERF9XU0lMX1RPX0ZBVk9SSVRFUz1BZGQgV1NJTCBUbyBGYXZvcml0ZXMKLU1TR19FUlJPUl9BRERfVE9fRkFWT1JJVEVTPUlXQUIwMzQxRSBVbmFibGUgdG8gYWRkICUxIHRvIGZhdm9yaXRlcy4KLU1TR19FUlJPUl9GQVZPUklURVNfQUxSRUFEWV9FWElTVFM9SVdBQjAzNDJFICUxIGFscmVhZHkgZXhpc3RzIGluIGZhdm9yaXRlcy4KLU1TR19JTkZPX0FERF9UT19GQVZPUklURVNfU1VDQ0VTU0ZVTD1JV0FCMDM0M0kgJTEgaXMgYWRkZWQgdG8gZmF2b3JpdGVzLgotTVNHX1FVRVNUSU9OX09WRVJXUklURV9GQVZPUklURVM9RmF2b3JpdGUgYWxyZWFkeSBleGlzdHMuICBEbyB5b3Ugd2lzaCB0byBvdmVyd3JpdGU/Ci0KLSMgQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbgotQUxUX0FERF9XU0RMX1NFUlZJQ0VfVE9fRkFWT1JJVEVTPUFkZCBXU0RMIFRvIEZhdm9yaXRlcwotCi0jIEFkZEJ1c2luZXNzVG9GYXZvcml0ZXNBY3Rpb24KLUFMVF9BRERfVURESV9CVVNJTkVTU19UT19GQVZPUklURVM9QWRkIFVEREkgQnVzaW5lc3MgVG8gRmF2b3JpdGVzCi0KLSMgQWRkU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uCi1BTFRfQUREX1NFUlZJQ0VfVE9fRkFWT1JJVEVTPUFkZCBVRERJIFNlcnZpY2UgVG8gRmF2b3JpdGVzCi0KLSMgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaAotQVRMX0lNUE9SVF9XU0lMX1RPX1dPUktCRU5DSD1JbXBvcnQgV1NJTCBUbyBXb3JrYmVuY2gKLUZPUk1fTEFCRUxfSU1QT1JUX1dTSUxfVE9fV09SS0JFTkNIX0RFU0M9U2VsZWN0IGEgd29ya2JlbmNoIHByb2plY3QgdG8gc2F2ZSB0aGUgV1NJTCBmaWxlIGludG8uIFlvdSBtYXkgYWxzbyBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIFdTSUwgZmlsZS4KLQotIyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24KLUFMVF9XU0lMX0lNUE9SVF9UT19GUz1JbXBvcnQgV1NJTCBUbyBGaWxlIFN5c3RlbQotQUxUX1dTRExfSU1QT1JUX1RPX0ZTPUltcG9ydCBXU0RMIFRvIEZpbGUgU3lzdGVtCi0KLSMgRnJhbWUgdGl0bGVzCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSPU5hdmlnYXRvciBDb250YWluZXIKLUZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSPU5hdmlnYXRvciBUb29sYmFyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVD1OYXZpZ2F0b3IgQ29udGVudAotRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVI9QWN0aW9ucyBDb250YWluZXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSPVByb3BlcnRpZXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQ9UHJvcGVydGllcyBDb250ZW50Ci1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVI9UHJvcGVydGllcyBUb29sYmFyCi1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSPVN0YXR1cyBDb250YWluZXIKLUZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UPVN0YXR1cyBDb250ZW50Ci1GUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUj1TdGF0dXMgVG9vbGJhcgotCi0jIEZvcm0gdGl0bGVzCi1GT1JNX1RJVExFX09QRU5fV1NJTD1PcGVuIFdTSUwgRm9ybQotRk9STV9USVRMRV9VRERJX0JVU0lORVNTX0RFVEFJTFM9VURESSBCdXNpbmVzcyBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfVURESV9TRVJWSUNFX0RFVEFJTFM9VURESSBTZXJ2aWNlIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0RMX1NFUlZJQ0VfREVUQUlMUz1XU0RMIFNlcnZpY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1dTSUxfREVUQUlMUz1XU0lMIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0lMX0xJTktfREVUQUlMUz1XU0lMIExpbmsgRGV0YWlscyBGb3JtCi0KLSMgVmlldyB0aXRsZXMKLVZJRVdfVElUTEVfVURESV9CVVNJTkVTU0VTPVVEREkgQnVzaW5lc3NlcyBWaWV3Ci1WSUVXX1RJVExFX1VERElfU0VSVklDRVM9VURESSBTZXJ2aWNlcyBWaWV3Ci1WSUVXX1RJVExFX1dTRExfU0VSVklDRVM9V1NETCBTZXJ2aWNlcyBWaWV3Ci1WSUVXX1RJVExFX1dTSUxfTElOS1M9V1NJTCBMaW5rcyBWaWV3CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL3ZpZXdzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvdmlld3MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvdmlld3MvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2ZyYWdtZW50Ly5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2ZyYWdtZW50Ly5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL3ZpZXdzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL3ZpZXdzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC92aWV3cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9saWIvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9saWIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBiNTgyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvbGliLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamFyCi13c2V4cGxvcmVyc3JjLnppcApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25lbmdpbmUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25lbmdpbmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTBiMDQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9uZW5naW5lLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5BY3Rpb25FbmdpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRGF0YVBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhLlNjZW5hcmlvRGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhLlRyYW5zYWN0aW9uRGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhLkFjdGlvbkRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLkl0ZXJhdG9yIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotU3RyaW5nIG1vZGUgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuQUNUSU9OX0VOR0lORV9NT0RFKTsKLVN0cmluZyBzY2VuYXJpbyA9IG51bGw7Ci10cnkKLXsKLSAgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyID0gbmV3IE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKCk7Ci0gIHBhcnNlci5wYXJzZVJlcXVlc3QocmVxdWVzdCwgSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpOwotICBzY2VuYXJpbyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkFDVElPTl9FTkdJTkVfU0NFTkFSSU8pOwotfQotY2F0Y2ggKFRocm93YWJsZSB0KQotewotfQotQWN0aW9uRW5naW5lIGFjdGlvbkVuZ2luZSA9IGNvbnRyb2xsZXIuZ2V0QWN0aW9uRW5naW5lKCk7Ci1pZiAobW9kZSAhPSBudWxsKQotewotICBhY3Rpb25FbmdpbmUuc2V0TW9kZShBY3Rpb25FbmdpbmUuTU9ERV9ESVNBQkxFRCk7Ci0gIHRyeQotICB7Ci0gICAgYWN0aW9uRW5naW5lLnNldE1vZGUoQnl0ZS5wYXJzZUJ5dGUobW9kZSkpOwotICB9Ci0gIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICB7Ci0gIH0KLX0KLWlmIChzY2VuYXJpbyAhPSBudWxsICYmIHNjZW5hcmlvLmxlbmd0aCgpID4gMCkKLXsKLSAgU2NlbmFyaW9EZXNjcmlwdG9yIHNjZW5hcmlvRGVzY3JpcHRvciA9IG51bGw7Ci0gIHRyeQotICB7Ci0gICAgQWN0aW9uRGF0YVBhcnNlciBwYXJzZXIgPSBuZXcgQWN0aW9uRGF0YVBhcnNlcigpOwotICAgIHNjZW5hcmlvRGVzY3JpcHRvciA9IHBhcnNlci5wYXJzZVNjZW5hcmlvKFhNTFV0aWxzLnN0cmluZ1RvRWxlbWVudChzY2VuYXJpbykpOwotICAgIGFjdGlvbkVuZ2luZS5leGVjdXRlU2NlbmFyaW8oc2NlbmFyaW9EZXNjcmlwdG9yKTsKLSAgfQotICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gIHsKLSAgfQotICBpZiAoc2NlbmFyaW9EZXNjcmlwdG9yICE9IG51bGwpCi0gIHsKLSAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzID0gc2NlbmFyaW9EZXNjcmlwdG9yLmdldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzID0gdHJhbnNhY3Rpb25EZXNjcmlwdG9yc1tpXS5nZXRBY3Rpb25EZXNjcmlwdG9ycygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgPCEtLQotICAgICAgICA8JT1hY3Rpb25EZXNjcmlwdG9yc1tqXS5nZXRJZCgpJT4KLSAgICAgICAgPCU9YWN0aW9uRGVzY3JpcHRvcnNbal0uZ2V0U3RhdHVzSWQoKSU+Ci0gICAgICAgIDwlCi0gICAgICAgIExpc3Qgc3RhdHVzID0gYWN0aW9uRGVzY3JpcHRvcnNbal0uZ2V0U3RhdHVzKCk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzdGF0dXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAlPgotICAgICAgICAgICAgPCU9aXQubmV4dCgpLnRvU3RyaW5nKCklPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgICAgLS0+Ci0gICAgICAgIDwlCi0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25lbmdpbmVfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9uZW5naW5lX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYmNhNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25lbmdpbmVfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5BY3Rpb25FbmdpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubmV0LioiICU+Ci08JQotU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci1Db250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLUFjdGlvbkVuZ2luZSBhY3Rpb25FbmdpbmUgPSBjb250cm9sbGVyLmdldEFjdGlvbkVuZ2luZSgpOwotU3RyaW5nIG1vZGVTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuQUNUSU9OX0VOR0lORV9NT0RFKTsKLWlmIChtb2RlU3RyaW5nICE9IG51bGwgJiYgbW9kZVN0cmluZy5sZW5ndGgoKSA+IDApCi17Ci0gIHRyeQotICB7Ci0gICAgYnl0ZSBtb2RlID0gQnl0ZS5wYXJzZUJ5dGUobW9kZVN0cmluZyk7Ci0gICAgYWN0aW9uRW5naW5lLnNldE1vZGUobW9kZSk7Ci0gIH0KLSAgY2F0Y2ggKFRocm93YWJsZSB0KQotICB7Ci0gIH0KLX0KLVN0cmluZyBwbGF5RmlsZUlkID0gInBsYXlGaWxlSWQiOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJUSVRMRV9BQ1RJT05fUkVDT1JERVIiKSU+PC90aXRsZT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gc2V0TW9kZShtb2RlKQotICAgIHsKLSAgICAgIDwlCi0gICAgICBTdHJpbmdCdWZmZXIgZm9ybUFjdGlvbiA9IG5ldyBTdHJpbmdCdWZmZXIocmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJhY3Rpb25lbmdpbmVfY29udGFpbmVyLmpzcD8iKSkpOwotICAgICAgZm9ybUFjdGlvbi5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICAgICBmb3JtQWN0aW9uLmFwcGVuZCgiPSIpOwotICAgICAgZm9ybUFjdGlvbi5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgICAgIGZvcm1BY3Rpb24uYXBwZW5kKCImIik7Ci0gICAgICBmb3JtQWN0aW9uLmFwcGVuZChBY3Rpb25JbnB1dHMuQUNUSU9OX0VOR0lORV9NT0RFKTsKLSAgICAgIGZvcm1BY3Rpb24uYXBwZW5kKCI9Iik7Ci0gICAgICAlPgotICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5mb3Jtc1swXTsKLSAgICAgIGZvcm0uYWN0aW9uID0gJzwlPWZvcm1BY3Rpb24udG9TdHJpbmcoKSU+JyArIG1vZGU7Ci0gICAgICBmb3JtLnRhcmdldCA9ICJfc2VsZiI7Ci0gICAgICBmb3JtLnN1Ym1pdCgpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBsYXkoKQotICAgIHsKLSAgICAgIHZhciBwbGF5RmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCI8JT1wbGF5RmlsZUlkJT4iKTsKLSAgICAgIGlmIChwbGF5RmlsZS52YWx1ZSAhPSBudWxsICYmIHBsYXlGaWxlLnZhbHVlLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZm9ybXNbMF07Ci0gICAgICAgIGZvcm0uYWN0aW9uID0gJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NleHBsb3Jlci5qc3AiKSklPic7Ci0gICAgICAgIGZvcm0udGFyZ2V0ID0gIjwlPUZyYW1lTmFtZXMuV0lORE9XX05BTUVfV1NFWFBMT1JFUl9KU1AlPiI7Ci0gICAgICAgIGZvcm0uZW5jdHlwZSA9ICJtdWx0aXBhcnQvZm9ybS1kYXRhIjsKLSAgICAgICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKLSAgICAgICAgZm9ybS5lbmNvZGluZyA9ICJtdWx0aXBhcnQvZm9ybS1kYXRhIjsKLSAgICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgICAgc2V0TW9kZSgnPCU9QWN0aW9uRW5naW5lLk1PREVfUExBWSU+Jyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIGFsZXJ0KCc8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1BMQVlfRklMRSIpJT4nKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzYXZlKCkKLSAgICB7Ci0gICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmZvcm1zWzBdOwotICAgICAgZm9ybS5hY3Rpb24gPSAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJhY3Rpb25zL1NhdmVBY3Rpb25FbmdpbmVTY2VuYXJpby5qc3AiKSklPic7Ci0gICAgICBmb3JtLnRhcmdldCA9ICJfc2VsZiI7Ci0gICAgICBmb3JtLnN1Ym1pdCgpOwotICAgIH0KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICA8Zm9ybSBtZXRob2Q9InBvc3QiPgotICAgIDwlCi0gICAgU3RyaW5nIGxhYmVsTW9kZVBsYXkgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTU9ERV9QTEFZIik7Ci0gICAgU3RyaW5nIGxhYmVsTW9kZVN0b3AgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTU9ERV9TVE9QIik7Ci0gICAgU3RyaW5nIGxhYmVsTW9kZVJlY29yZCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NT0RFX1JFQ09SRCIpOwotICAgIFN0cmluZyBsYWJlbFNhdmUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0FWRSIpOwotICAgIGJ5dGUgbW9kZSA9IGFjdGlvbkVuZ2luZS5nZXRNb2RlKCk7Ci0gICAgU3RyaW5nIGltZ1BsYXkgPSAobW9kZSA9PSBBY3Rpb25FbmdpbmUuTU9ERV9QTEFZKSA/ICJpbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9wbGF5LmdpZiIgOiAiaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYiOwotICAgIFN0cmluZyBpbWdTdG9wID0gKG1vZGUgPT0gQWN0aW9uRW5naW5lLk1PREVfU1RPUCkgPyAiaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYiIDogImltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3N0b3AuZ2lmIjsKLSAgICBTdHJpbmcgaW1nUmVjb3JkID0gKG1vZGUgPT0gQWN0aW9uRW5naW5lLk1PREVfUkVDT1JEKSA/ICJpbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9yZWNvcmQuZ2lmIiA6ICJpbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9yZWNvcmQuZ2lmIjsKLSAgICBTdHJpbmcgaW1nU2F2ZSA9ICJpbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZiI7Ci0gICAgJT4KLSAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0zPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpwbGF5KCkiPgotICAgICAgICAgICAgPGltZyBjbGFzcz0ibm9ybWFsIiBib3JkZXI9MCBhbHQ9IjwlPWxhYmVsTW9kZVBsYXklPiIgdGl0bGU9IjwlPWxhYmVsTW9kZVBsYXklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoaW1nUGxheSkpJT4iPgotICAgICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01PREVfUExBWSIpJT4KLSAgICAgICAgICA8L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnNldE1vZGUoJzwlPVN0cmluZy52YWx1ZU9mKEFjdGlvbkVuZ2luZS5NT0RFX1NUT1ApJT4nKSI+Ci0gICAgICAgICAgICA8aW1nIGNsYXNzPSJub3JtYWwiIGJvcmRlcj0wIGFsdD0iPCU9bGFiZWxNb2RlU3RvcCU+IiB0aXRsZT0iPCU9bGFiZWxNb2RlU3RvcCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChpbWdTdG9wKSklPiI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTU9ERV9TVE9QIiklPgotICAgICAgICAgIDwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0TW9kZSgnPCU9U3RyaW5nLnZhbHVlT2YoQWN0aW9uRW5naW5lLk1PREVfUkVDT1JEKSU+JykiPgotICAgICAgICAgICAgPGltZyBjbGFzcz0ibm9ybWFsIiBib3JkZXI9MCBhbHQ9IjwlPWxhYmVsTW9kZVJlY29yZCU+IiB0aXRsZT0iPCU9bGFiZWxNb2RlUmVjb3JkJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGltZ1JlY29yZCkpJT4iPgotICAgICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01PREVfUkVDT1JEIiklPgotICAgICAgICAgIDwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c2F2ZSgpIj4KLSAgICAgICAgICAgIDxpbWcgY2xhc3M9Im5vcm1hbCIgYm9yZGVyPTAgYWx0PSI8JT1sYWJlbFNhdmUlPiIgdGl0bGU9IjwlPWxhYmVsU2F2ZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChpbWdTYXZlKSklPiI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0FWRSIpJT4KLSAgICAgICAgICA8L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9Mz4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QTEFZX0ZJTEUiKSU+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIGlkPSI8JT1wbGF5RmlsZUlkJT4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5BQ1RJT05fRU5HSU5FX1NDRU5BUklPJT4iPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Zvcm0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzg0ZmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSAoSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24pc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoQWN0aW9uSW5wdXRzLklNUE9SVF9BQ1RJT04pOwotICAgaWYgKGFjdGlvbi5pc1RhcmdldEZpbGVSZXNvdXJjZVJlYWRPbmx5KCkpCi0gICB7Ci0lPgotICB2YXIgcHJvY2VlZCA9IHRydWU7Ci08JSAgIAotICAgICBpZiAoIWFjdGlvbi5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkpCi0gICAgIHsKLSU+Ci0gIHByb2NlZWQgPSBjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYWN0aW9uLmdldFdlYlNlcnZpY2VQbHVnaW5GaWxlTWVzc2FnZSgiTVNHX0VSUk9SX0ZJTEVfQ0hFQ0tPVVRfRElTQUJMRUQiKSklPiIpOwotPCUgICAgIAotICAgICB9Ci0lPgotICBpZiAocHJvY2VlZCkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChWYWxpZGF0ZUVkaXRBY3Rpb24uZ2V0QWN0aW9uTGluaygpKSklPiI7Ci08JSAgICAgCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChXcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbi5nZXRBY3Rpb25MaW5rKCkpKSU+IjsKLTwlCi0gICB9Ci0lPiAgICAgCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4gICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NjQ4OWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICBQZXJzcGVjdGl2ZSBjdXJyZW50UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgeyAgICAKLTwlCi0gICBTdHJpbmcgdHJlZUNvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgewotJT4KLSAgICA8JT10cmVlQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0VHJlZUNvbnRlbnRQYWdlKCkpKSU+IjsKLTwlCi0gICB9Ci0gICBTdHJpbmcgcHJvcGVydGllc0NvbnRhaW5lclZhciA9IGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICBpZiAocHJvcGVydGllc0NvbnRhaW5lclZhciAhPSBudWxsKQotICAgewotJT4KLSAgICA8JT1wcm9wZXJ0aWVzQ29udGFpbmVyVmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpKSklPiI7Ci08JSAgIAotICAgfQotICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci0gICAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPCUKLSAgIH0KLSU+Ci0gIH0KLSAgZWxzZQotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoY3VycmVudFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvQ2xlYXJWaWV3RWxlbWVudEFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvQ2xlYXJWaWV3RWxlbWVudEFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlM2NiNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NsZWFyVmlld0VsZW1lbnRBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPGhlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICAgU3RyaW5nIHByb3BlcnRpZXNDb250YWluZXJWYXIgPSBhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci0gIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLTwlCi0gICB9Ci0gICBTdHJpbmcgc3RhdHVzQ29udGVudFZhciA9IGFjdGlvbi5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICBpZiAoc3RhdHVzQ29udGVudFZhciAhPSBudWxsKQotICAgewotJT4KLSAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPCUKLSAgIH0KLSU+Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZmI3ZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIHJ1biB0aGUgYWN0aW9uCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5ydW4oKTsKLSAgIGJvb2xlYW4gd3JpdHRlbiA9IGZhbHNlOwotCi0gICBpZiAoYWN0aW9uUmVzdWx0KQotICAgewotICAgICAvLyB3cml0ZSB0byBmaWxlIHN5c3RlbQotICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7Ci0gICAgIHJlc3BvbnNlLnNldEhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbiIsImF0dGFjaG1lbnQ7ZmlsZW5hbWU9IithY3Rpb24uZ2V0RGVmYXVsdEZpbGVOYW1lKCkpOwotICAgICBhY3Rpb24ud3JpdGUocmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkpOwotICAgICB3cml0dGVuID0gdHJ1ZTsKLSAgIH0KLQotICAgaWYgKCF3cml0dGVuKQotICAgewotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICAgICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgICAgcGFuZXNGaWxlLmFwcGVuZChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgICAgaWYgKGFjdGlvbi5nZXRTdGF0dXNDb250ZW50VmFyKCkgIT0gbnVsbCkKLSAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgPCU9YWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKSU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICAgfQotJT4gICAgICAKLTwvYm9keT4KLTwvaHRtbD4KLTwlCi0gICB9Ci0lPiAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUzNWNkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIHBhbmVzRmlsZS5hcHBlbmQoY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICAgLy9Mb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgaWYgKCFpbnB1dHNWYWxpZCkKLSAgIHsKLSAgICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgICBpZiAoc3RhdHVzQ29udGVudFZhciAhPSBudWxsKQotICAgICB7Ci0lPgotICA8JT1zdGF0dXNDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRTdGF0dXNDb250ZW50UGFnZSgpKSklPiI7Ci08JQotICAgICB9Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKEFjdGlvbklucHV0cy5JTVBPUlRfQUNUSU9OLGFjdGlvbik7ICAgCi0gICAgIGlmIChhY3Rpb24uZmlsZUV4aXN0cygpKQotICAgICB7Ci0lPgotICB2YXIgcHJvY2VlZCA9IHRydWU7Ci08JSAgICAgICAgCi0gICAgICAgaWYgKCFhY3Rpb24uaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSkKLSAgICAgICB7Ci0lPgotICBwcm9jZWVkID0gY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGFjdGlvbi5nZXRXZWJTZXJ2aWNlUGx1Z2luRmlsZU1lc3NhZ2UoIk1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRCIpKSU+Iik7Ci08JQotICAgICAgIH0KLSU+Ci0gIGlmIChwcm9jZWVkKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uLmdldEFjdGlvbkxpbmsoKSkpJT4iOwotPCUKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSU+Ci0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFdyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uLmdldEFjdGlvbkxpbmsoKSkpJT4iOwotPCUKLSAgICAgfQotICAgfQotJT4KLTwvc2NyaXB0PiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWZiMGRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIC8vTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5ydW4oKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08JQotICAgU3RyaW5nQnVmZmVyIHBhbmVzRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoIi8iKTsKLSAgIHBhbmVzRmlsZS5hcHBlbmQoY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmICghYWN0aW9uUmVzdWx0KQotICAgewotICAgICBTdHJpbmcgc3RhdHVzQ29udGVudFZhciA9IGFjdGlvbi5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICAgIGlmIChzdGF0dXNDb250ZW50VmFyICE9IG51bGwpCi0gICAgIHsKLSU+ICAgIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIDwlPXN0YXR1c0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgfQotJT4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1JldHJpZXZlSGlzdG9yeUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYmQyYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1JldHJpZXZlSGlzdG9yeUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmV0cmlldmVIaXN0b3J5QWN0aW9uIGFjdGlvbiA9IG5ldyBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5ydW4oKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBVVEYtOCI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICAgQnJlYWRDcnVtYiBiID0gYWN0aW9uLmdldEJyZWFkQ3J1bWIoKTsKLSAgIGlmIChiICE9IG51bGwpCi0gICB7Ci0gICAgIGludCBicmVhZENydW1iUGVyc3BlY3RpdmVJZCA9IGIuZ2V0UGVyc3BlY3RpdmVJZCgpOwotICAgICBpZiAoYnJlYWRDcnVtYlBlcnNwZWN0aXZlSWQgIT0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQZXJzcGVjdGl2ZUlkKCkpCi0gICAgIHsKLSAgICAgICAvLyBTd2l0Y2ggdGhlIHBlcnNwZWN0aXZlLgotJT4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoYnJlYWRDcnVtYlBlcnNwZWN0aXZlSWQsdHJ1ZSkpKSU+IjsKLTwlCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgLy8gSnVtcCB0byB0aGUgcGFnZSByZXRyaWV2ZWQgZnJvbSBoaXN0b3J5LgotJT4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGIuZ2V0VVJMKCkpKSU+IjsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TYXZlQWN0aW9uRW5naW5lU2NlbmFyaW8uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NhdmVBY3Rpb25FbmdpbmVTY2VuYXJpby5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMGI5ZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NhdmVBY3Rpb25FbmdpbmVTY2VuYXJpby5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5TY2VuYXJpb0Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRGF0YVBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuWE1MVXRpbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQiJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKLXJlc3BvbnNlLnNldEhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbiIsImF0dGFjaG1lbnQ7ZmlsZW5hbWU9c2NlbmFyaW8ueG1sIik7Ci1TY2VuYXJpb0Rlc2NyaXB0b3Igc2NlbmFyaW9EZXNjcmlwdG9yID0gY29udHJvbGxlci5nZXRBY3Rpb25FbmdpbmUoKS5nZXRTY2VuYXJpbygpOwotQWN0aW9uRGF0YVBhcnNlciBwYXJzZXIgPSBuZXcgQWN0aW9uRGF0YVBhcnNlcigpOwotRWxlbWVudCBzY2VuYXJpbyA9IHBhcnNlci50b0VsZW1lbnQoc2NlbmFyaW9EZXNjcmlwdG9yKTsKLWlmIChzY2VuYXJpbyAhPSBudWxsKQotewotICB0cnkKLSAgewotICAgIFN0cmluZyBzY2VuYXJpb1N0cmluZyA9IFhNTFV0aWxzLnNlcmlhbGl6ZShzY2VuYXJpbywgZmFsc2UpOwotICAgIGlmIChzY2VuYXJpb1N0cmluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsKLSAgICAgIHB3LnByaW50bG4oc2NlbmFyaW9TdHJpbmcpOwotICAgICAgcHcuY2xvc2UoKTsKLSAgICB9Ci0gIH0KLSAgY2F0Y2ggKFRocm93YWJsZSB0KQotICB7Ci0gIH0KLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZDExN2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIFBlcnNwZWN0aXZlIGN1cnJlbnRQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgVVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmICghYWN0aW9uUmVzdWx0KQotICAgewotICAgICBpZiAoYWN0aW9uLmlzU3RhbGVCcmVhZENydW1iKCkpCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gUmVydW4gdGhlIGhpc3RvcnkgYWN0aW9uIHRvIGdldCB0aGUgbmV4dCBhdmFpbGFibGUgaXRlbS4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldE5leHRIaXN0b3J5QWN0aW9uTGluaygpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgU3RyaW5nIHRyZWVDb250ZW50VmFyID0gYWN0aW9uLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gICAgIFN0cmluZyBwcm9wZXJ0aWVzQ29udGFpbmVyVmFyID0gYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgICAgaWYgKGFjdGlvbi5yZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCgpKQotICAgICB7Ci0gICAgICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICAvLyBVcGRhdGUgdGhlIHRyZWV2aWV3LgotICAgIDwlPXRyZWVDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRUcmVlQ29udGVudFBhZ2UoKSkpJT4iOwotICB9Ci0gIGVsc2UKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkpKSU+IjsgIAotPC9zY3JpcHQ+Ci08JQotICAgICAgIH0KLSAgICAgICBpZiAocHJvcGVydGllc0NvbnRhaW5lclZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICAgIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBhY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICBOb2RlIHByZXZpb3VzU2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0UHJldmlvdXNTZWxlY3RlZE5vZGUoKTsKLSAgICAgICBpbnQgc2VsZWN0ZWROb2RlSWQgPSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBVcGRhdGUgdGhlIHBlcnNwZWN0aXZlLgotPCUKLSAgICAgICAgIGlmIChwcmV2aW91c1NlbGVjdGVkTm9kZSAhPSBudWxsICYmIHByZXZpb3VzU2VsZWN0ZWROb2RlLmlzVmlzaWJsZSgpKQotICAgICAgICAgewotJT4KLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5hbHRlckltYWdlKCc8JT1wcmV2aW91c1NlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCklPicsJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChwcmV2aW91c1NlbGVjdGVkTm9kZS5nZXRDbG9zZWRJbWFnZVBhdGgoKSkpJT4nKTsKLTwlCi0gICAgICAgICB9Ci0gICAgICAgICBTdHJpbmcgc2VsZWN0ZWROb2RlQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0lPgotICA8JT10cmVlQ29udGVudFZhciU+LnNlbGVjdE5vZGUoJzwlPXNlbGVjdGVkTm9kZUFuY2hvck5hbWUlPicsJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChzZWxlY3RlZE5vZGUuZ2V0T3BlbkltYWdlUGF0aCgpKSklPicpOwotICA8JT10cmVlQ29udGVudFZhciU+LmxvY2F0aW9uLmhhc2ggPSAnIzwlPXNlbGVjdGVkTm9kZUFuY2hvck5hbWUlPic7Ci08JQotICAgICAgIH0KLSAgICAgICBpZiAocHJvcGVydGllc0NvbnRhaW5lclZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci0gIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLTwlCi0gICAgICAgfQotJT4KLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgfQotJT4KLTwvYm9keT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVmMTllMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIFBlcnNwZWN0aXZlIGN1cnJlbnRQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgVVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmICghYWN0aW9uUmVzdWx0KQotICAgewotICAgICBpZiAoYWN0aW9uLmlzU3RhbGVCcmVhZENydW1iKCkpCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gUmVydW4gdGhlIGhpc3RvcnkgYWN0aW9uIHRvIGdldCB0aGUgbmV4dCBhdmFpbGFibGUgaXRlbS4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldE5leHRIaXN0b3J5QWN0aW9uTGluaygpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgaWYgKGFjdGlvbi5yZXF1aXJlc1N0YXR1c1VwZGF0ZSgpKQotICAgICB7Ci0gICAgICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgICAgIGlmIChzdGF0dXNDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBVcGRhdGUgdGhlIHN0YXR1cyBjb250ZW50IHdpdGggYW55IG1lc3NhZ2VzIGFyaXNpbmcgZnJvbSB0aGlzIGFjdGlvbi4KLSAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+ICAKLTwlICAgIAotICAgICAgIH0KLSAgICAgfSAKLSAgICAgICAgCi0gICAgIFN0cmluZyB0cmVlQ29udGVudFZhciA9IGFjdGlvbi5nZXRUcmVlQ29udGVudFZhcigpOwotICAgICBTdHJpbmcgcHJvcGVydGllc0NvbnRhaW5lclZhciA9IGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICAgIGlmIChhY3Rpb24ucmVxdWlyZXNUcmVlVmlld1JlZnJlc2goKSkKLSAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgICAgICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICAvLyBSZWxvYWQgdGhlIG5hdmlnYXRvciB0cmVlIHZpZXcgdG8gc2hvdyB0aGUgc3RydWN0dXJhbCBjaGFuZ2UuCi0gICAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFRyZWVDb250ZW50UGFnZSgpKSklPiI7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpKSklPiI7Ci0gIH0KLTwlCi0gICAgICAgfQotICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICAgIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLTwlCi0gICAgICAgfQotJT4KLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgICBlbHNlIGlmIChhY3Rpb24ucmVxdWlyZXNOb2RlU2VsZWN0aW9uKCkpCi0gICAgIHsKLSAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGFjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgIE5vZGUgcHJldmlvdXNTZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRQcmV2aW91c1NlbGVjdGVkTm9kZSgpOwotICAgICAgIGludCBzZWxlY3RlZE5vZGVJZCA9IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICAgICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLSAgLy8gVXBkYXRlIHRoZSBuYXZpZ2F0b3IgdHJlZSB0byBzaG93IHRoZSBzZWxlY3Rpb24uCi08JQotICAgICAgICAgaWYgKHByZXZpb3VzU2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgICAgICB7Ci0lPgotICA8JT10cmVlQ29udGVudFZhciU+LmFsdGVySW1hZ2UoJzwlPXByZXZpb3VzU2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKSU+JywnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHByZXZpb3VzU2VsZWN0ZWROb2RlLmdldENsb3NlZEltYWdlUGF0aCgpKSklPicpOwotPCUKLSAgICAgICAgIH0KLSAgICAgICAgIFN0cmluZyBzZWxlY3RlZE5vZGVBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSU+Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4uc2VsZWN0Tm9kZSgnPCU9c2VsZWN0ZWROb2RlQW5jaG9yTmFtZSU+JywnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkTm9kZS5nZXRPcGVuSW1hZ2VQYXRoKCkpKSU+Jyk7Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4ubG9jYXRpb24uaGFzaCA9ICcjPCU9c2VsZWN0ZWROb2RlQW5jaG9yTmFtZSU+JzsKLTwlCi0gICAgICAgfQotICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLSAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotPCUKLSAgICAgICB9Ci0lPgotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGVsc2UgaWYgKGFjdGlvbi5yZXF1aXJlc1ZpZXdTZWxlY3Rpb24oKSkKLSAgICAgewotICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBVcGRhdGUgdGhlIHByb3BlcnRpZXMgY29udGFpbmVyIHRvIHNob3cgdGhlIHZpZXcuCi0gIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgU3RyaW5nIHByb3BlcnRpZXNDb250ZW50VmFyID0gYWN0aW9uLmdldFByb3BlcnRpZXNDb250ZW50VmFyKCk7Ci0gICAgICAgVG9vbCB0b29sID0gYWN0aW9uLmdldFNlbGVjdGVkVmlld1Rvb2woKTsKLSAgICAgICBpZiAodG9vbCA9PSBudWxsKQotICAgICAgICAgdG9vbCA9IGFjdGlvbi5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICBpZiAodG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgICAgewotICAgICAgICAgaWYgKHByb3BlcnRpZXNDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFVwZGF0ZSB0aGUgcHJvcGVydGllcyBjb250ZW50IHdpdGggdGhlIHRvb2wncyBmb3JtLgotICA8JT1wcm9wZXJ0aWVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0b29sLmdldEZvcm1MaW5rKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgZWxzZQotICAgICAgIHsKLSAgICAgICAgIGlmICghYWN0aW9uLmlzSGlzdG9yeUFjdGlvbigpKQotICAgICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBSdW4gdGhlIHRvb2wncyBhY3Rpb24gb25seSBpZiBpdCBpcyBub3QgZnJvbSB0aGUgaGlzdG9yeS4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodG9vbC5nZXRBY3Rpb25MaW5rKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UKLSAgICAgICAgIHsKLSAgICAgICAgICAgaWYgKHByb3BlcnRpZXNDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgPCU9cHJvcGVydGllc0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250ZW50UGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLSU+Ci08L2JvZHk+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1Nlc3Npb25UaW1lZE91dC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2Vzc2lvblRpbWVkT3V0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVmOGVlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2Vzc2lvblRpbWVkT3V0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0LDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiAlPgotICA8anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgiL3dzZXhwbG9yZXIvY3NzL3RyZWV2aWV3LmNzcyIpJT4iPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIi93c2V4cGxvcmVyL2Nzcy93aW5kb3dzLmNzcyIpJT4iPgotPC9oZWFkPgotPGJvZHk+Ci08Y2VudGVyPgotPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfU0VTU0lPTl9USU1FRF9PVVQiKSU+Ci08YnI+Ci08JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9SRVNUQVJUX1NFU1NJT04iKSU+Ci08L2NlbnRlcj4KLTxicj4KLTwvYm9keT4KLTwvaHRtbD4gICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNzFkNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZ0J1ZmZlciBmcmFtZXNldHNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgZnJhbWVzZXRzRmlsZS5hcHBlbmQoY3VycmVudFBlcnNwZWN0aXZlLmdldEZyYW1lc2V0c0ZpbGUoKSk7Ci0gICAKLSAgIFN0cmluZ0J1ZmZlciBmcmFtZXNldHNGb3JtID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgZnJhbWVzZXRzRm9ybS5hcHBlbmQoY3VycmVudFBlcnNwZWN0aXZlLmdldFByb2Nlc3NGcmFtZXNldHNGb3JtKCkpOwotICAgCi0gICBpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZDsKLSAgIGJvb2xlYW4gaXNIaXN0b3J5OwotICAgdHJ5Ci0gICB7Ci0gICAgIHRhcmdldFBlcnNwZWN0aXZlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRSkpOwotICAgICBpc0hpc3RvcnkgPSAoIjEiLmVxdWFscyhyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuSVNISVNUT1JZKSkpOwotICAgfQotICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgewotICAgICB0YXJnZXRQZXJzcGVjdGl2ZUlkID0gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk7Ci0gICAgIGlzSGlzdG9yeSA9IGZhbHNlOwotICAgfQotICAgCi0gICBpZiAoY29udHJvbGxlci5pc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rKCkpCi0gICB7Ci0gICAgIGNvbnRyb2xsZXIuZW5hYmxlUGVyc3BlY3RpdmVDb250ZW50QmxhbmsoZmFsc2UpOwotICAgICBjb250cm9sbGVyLmFkZFRvSGlzdG9yeShjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVJZCgpLFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldFBlcnNwZWN0aXZlSWQsdHJ1ZSkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9zd2l0Y2hwZXJzcGVjdGl2ZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhbWVzZXRzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1BY3Rpb24uYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKHRhcmdldFBlcnNwZWN0aXZlSWQsaXNIaXN0b3J5KSk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhbWVzZXRzRm9ybS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+Ci08JQotICAgfQotJT4gICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczMTliYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICBQZXJzcGVjdGl2ZSBjdXJyZW50UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IFVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGFuZXNGaWxlKCkpOwotJT4gICAgIAotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+ICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgaWYgKCFhY3Rpb25SZXN1bHQpCi0gICB7Ci0gICAgIGlmIChhY3Rpb24uaXNTdGFsZUJyZWFkQ3J1bWIoKSkKLSAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBSZXJ1biB0aGUgaGlzdG9yeSBhY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBpdGVtLgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0TmV4dEhpc3RvcnlBY3Rpb25MaW5rKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgfQotICAgZWxzZQotICAgewotICAgICBTdHJpbmcgdHJlZUNvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgLy8gVXBkYXRlIHRoZSBwZXJzcGVjdGl2ZS4KLSAgICA8JT10cmVlQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0VHJlZUNvbnRlbnRQYWdlKCkpKSU+IjsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgICAgaWYgKGFjdGlvbi5yZXF1aXJlc05vZGVTZWxlY3Rpb24oKSkKLSAgICAgewotICAgICAgIFN0cmluZyBwcm9wZXJ0aWVzQ29udGFpbmVyVmFyID0gYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgICAgICBpZiAocHJvcGVydGllc0NvbnRhaW5lclZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgLy8gVXBkYXRlIHRoZSBwcm9wZXJ0aWVzIGNvbnRhaW5lci4KLSAgICA8JT1wcm9wZXJ0aWVzQ29udGFpbmVyVmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpKSklPiI7Ci0gIH0KLTwvc2NyaXB0PgotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLSU+Ci08L2JvZHk+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1ZhbGlkYXRlRWRpdEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBiMDRmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSAoSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24pc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoQWN0aW9uSW5wdXRzLklNUE9SVF9BQ1RJT04pOwotICAgYm9vbGVhbiByZXN1bHQgPSBhY3Rpb24udmFsaWRhdGVFZGl0KCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmICg8JT1yZXN1bHQlPikKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChXcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbi5nZXRBY3Rpb25MaW5rKCkpKSU+IjsKLSAgZWxzZQotICB7Ci08JSAgCi0gICBTdHJpbmcgc3RhdHVzQ29udGVudFZhciA9IGFjdGlvbi5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICBpZiAoc3RhdHVzQ29udGVudFZhciAhPSBudWxsKQotICAgewotJT4gICAgCi0gICAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPCUKLSAgIH0KLSU+Ci0gIH0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9Xcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzI5YTJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9Xcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gYWN0aW9uID0gKEltcG9ydFRvV29ya2JlbmNoQWN0aW9uKXNlc3Npb24uZ2V0QXR0cmlidXRlKEFjdGlvbklucHV0cy5JTVBPUlRfQUNUSU9OKTsKLSAgIGFjdGlvbi5ydW4oKTsKLSAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgIGlmIChzdGF0dXNDb250ZW50VmFyICE9IG51bGwpCi0gICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIDwlPXN0YXR1c0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PiAgCi08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4gCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX2Jyb3dzZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl9icm93c2VyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIwYzNhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX2Jyb3dzZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubmV0LioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+Ci0gICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJUSVRMRV9DQUxFTkRBUl9CUk9XU0VSIiklPgotICA8L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBsaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiY2FsZW5kYXJfdG9vbGJhci5qc3A/Iik7Ci0gICBsaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSU+ICAgCi0gIDxmcmFtZSBuYW1lPSI8JT1GcmFtZU5hbWVzLkNBTEVOREFSX1RPT0xCQVIlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FMRU5EQVJfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGxpbmsudG9TdHJpbmcoKSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwlCi0gICBsaW5rLnNldExlbmd0aCgwKTsKLSAgIGxpbmsuYXBwZW5kKCJjYWxlbmRhcl9jb250ZW50LmpzcD8iKTsKLSAgIGxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgbGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpLmFwcGVuZCgnPScpLmFwcGVuZChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkpOwotJT4gICAgIAotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5DQUxFTkRBUl9DT05URU5UJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBTEVOREFSX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChsaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZTQ2ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBpbnQgY2FsZW5kYXJUeXBlID0gSW50ZWdlci5wYXJzZUludChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQUxFTkRBUl9DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL2NhbGVuZGFyLmNzcyIpKSU+Ij4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIGRheXMgPSBuZXcgQXJyYXkoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0hfU1VOREFZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NIX01PTkRBWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TSF9UVUVTREFZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NIX1dFRE5FU0RBWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TSF9USFVSU0RBWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TSF9GUklEQVkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0hfU0FUVVJEQVkiKSklPiIpOwotICB2YXIgbW9udGhzID0gbmV3IEFycmF5KCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0pBTlVBUlkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkVCUlVBUlkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFSQ0giKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQVBSSUwiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0pVTkUiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSlVMWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BVUdVU1QiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VQVEVNQkVSIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09DVE9CRVIiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTk9WRU1CRVIiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVDRU1CRVIiKSklPiIpOwotICB2YXIgZW5nTW9udGhzID0gbmV3IEFycmF5KCJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciIpOwotICB2YXIgY3VycmVudERhdGU7Ci0gIHZhciBjYWxlbmRhckJvZHlTZXQgPSBmYWxzZTsKLSAgdmFyIGNhbGVuZGFyQm9keTsKLSAgdmFyIHNhdmVkWWVhclRleHRWYWx1ZSA9ICIiOwotCi08JQotICAgLy8gUmVndWxhciBleHByZXNzaW9ucwotICAgLy8gdGltZSAgICAgICAtIEhIOk1NOlNTWy5TU1NdCi0gICAvLyB5ZWFyICAgICAgIC0gWSoKLSAgIC8vIGRhdGUgICAgICAgLSBZWVlZKy1NTS1ERAotICAgLy8gZGF0ZVRpbWUgICAtIFlZWVkrLU1NLUREVEhIOk1NOlNTWy5TU1NdWgotICAgLy8gZ1llYXJNb250aCAtIFlZWVkrLU1NIAotICAgLy8gZ0RheSAgICAgICAtIC0tLURECi0gICAvLyBnTW9udGhEYXkgIC0gLS1NTS1ERAotJT4KLSAgdmFyIHRpbWVSZWdFeHAgPSAvXihcZHsyfSk6KFxkezJ9KTooXGR7Mn0pKFwuXGR7M30pPyQvOwotICB2YXIgeWVhclJlZ0V4cCA9IC9eKFxkKikkLzsKLSAgdmFyIGRhdGVSZWdFeHAgPSAvXihcZHs0LH0pLShcZHsyfSktKFxkezJ9KSQvOwotICB2YXIgZGF0ZVRpbWVSZWdFeHAgPSAvXihcZHs0LH0pLShcZHsyfSktKFxkezJ9KVQoXGR7Mn0pOihcZHsyfSk6KFxkezJ9KShcLlxkezN9KT9aJC87Ci0gIHZhciBnWWVhck1vbnRoUmVnRXhwID0gL14oXGR7NCx9KS0oXGR7Mn0pJC87Ci0gIHZhciBnRGF5UmVnRXhwID0gL14tezN9KFxkezJ9KSQvOwotICB2YXIgZ01vbnRoRGF5UmVnRXhwID0gL14tezJ9KFxkezJ9KS0oXGR7Mn0pJC87Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVZZWFyU3RyaW5nKHllYXJTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4geWVhclJlZ0V4cC50ZXN0KHllYXJTdHJpbmcpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0VGltZVBhcmFtZXRlcnModGltZVN0cmluZykKLSAgewotICAgIHJldHVybiB0aW1lUmVnRXhwLmV4ZWModGltZVN0cmluZyk7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXREYXRlUGFyYW1ldGVycyhkYXRlU3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIGRhdGVSZWdFeHAuZXhlYyhkYXRlU3RyaW5nKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldERhdGVUaW1lUGFyYW1ldGVycyhkYXRlVGltZVN0cmluZykKLSAgewotICAgIHJldHVybiBkYXRlVGltZVJlZ0V4cC5leGVjKGRhdGVUaW1lU3RyaW5nKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZ2V0R1llYXJNb250aFBhcmFtZXRlcnMoZ1llYXJNb250aFN0cmluZykKLSAgewotICAgIHJldHVybiBnWWVhck1vbnRoUmVnRXhwLmV4ZWMoZ1llYXJNb250aFN0cmluZyk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGdldEdEYXlQYXJhbWV0ZXJzKGdEYXlTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gZ0RheVJlZ0V4cC5leGVjKGdEYXlTdHJpbmcpOwotICB9Ci0gIAotICBmdW5jdGlvbiBnZXRHTW9udGhEYXlQYXJhbWV0ZXJzKGdNb250aERheVN0cmluZykKLSAgewotICAgIHJldHVybiBnTW9udGhEYXlSZWdFeHAuZXhlYyhnTW9udGhEYXlTdHJpbmcpOwotICB9Ci0gIAotPCUKLSAgIC8vIEhIOk1NOlNTWy5TU1NdCi0lPgotICBmdW5jdGlvbiBzZXJpYWxpemVUaW1lKGhvdXJzLG1pbnV0ZXMsc2Vjb25kcyxtaWxsaXNlY29uZHMpCi0gIHsKLSAgICB2YXIgdGltZVN0cmluZyA9ICIiOwotICAgIGlmIChob3VycyA8IDEwKQotICAgICAgdGltZVN0cmluZyArPSAiMCI7Ci0gICAgdGltZVN0cmluZyArPSBob3VycyArICI6IjsKLSAgICBpZiAobWludXRlcyA8IDEwKQotICAgICAgdGltZVN0cmluZyArPSAiMCI7Ci0gICAgdGltZVN0cmluZyArPSBtaW51dGVzICsgIjoiOwotICAgIGlmIChzZWNvbmRzIDwgMTApCi0gICAgICB0aW1lU3RyaW5nICs9ICIwIjsKLSAgICB0aW1lU3RyaW5nICs9IHNlY29uZHM7Ci0gICAgaWYgKG1pbGxpc2Vjb25kcyA+IDApCi0gICAgewotICAgICAgdGltZVN0cmluZyArPSAiLiI7Ci0gICAgICBpZiAobWlsbGlzZWNvbmRzIDwgMTAwKQotICAgICAgewotICAgICAgICBpZiAobWlsbGlzZWNvbmRzIDwgMTApCi0gICAgICAgICAgdGltZVN0cmluZyArPSAiMDAiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdGltZVN0cmluZyArPSAiMCI7Ci0gICAgICB9Ci0gICAgICB0aW1lU3RyaW5nICs9IG1pbGxpc2Vjb25kczsKLSAgICB9Ci0gICAgcmV0dXJuIHRpbWVTdHJpbmc7Ci0gIH0KLQotPCUKLSAgIC8vIFlZWVkrLU1NCi0lPiAgIAotICBmdW5jdGlvbiBzZXJpYWxpemVHWWVhck1vbnRoKGZ1bGxZZWFyLG1vbnRoKQotICB7Ci0gICAgdmFyIGdZZWFyTW9udGhTdHJpbmcgPSAiIjsKLSAgICBpZiAoZnVsbFllYXIgPCAxMDAwKQotICAgIHsKLSAgICAgIGlmIChmdWxsWWVhciA8IDEwMCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGZ1bGxZZWFyIDwgMTApCi0gICAgICAgICAgZ1llYXJNb250aFN0cmluZyArPSAiMDAwIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGdZZWFyTW9udGhTdHJpbmcgKz0gIjAwIjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgZ1llYXJNb250aFN0cmluZyArPSAiMCI7Ci0gICAgfQotICAgIGdZZWFyTW9udGhTdHJpbmcgKz0gZnVsbFllYXIrIi0iOwotICAgIGlmIChtb250aCA8IDEwKQotICAgICAgZ1llYXJNb250aFN0cmluZyArPSAiMCI7Ci0gICAgZ1llYXJNb250aFN0cmluZyArPSBtb250aDsKLSAgICByZXR1cm4gZ1llYXJNb250aFN0cmluZzsgICAgCi0gIH0KLSAgCi08JQotICAgLy8gWVlZWSstTU0tREQKLSU+Ci0gIGZ1bmN0aW9uIHNlcmlhbGl6ZURhdGUoZnVsbFllYXIsbW9udGgsZGF0ZSkKLSAgewotICAgIHZhciBkYXRlU3RyaW5nID0gc2VyaWFsaXplR1llYXJNb250aChmdWxsWWVhcixtb250aCkgKyAiLSI7Ci0gICAgaWYgKGRhdGUgPCAxMCkKLSAgICAgIGRhdGVTdHJpbmcgKz0gIjAiOwotICAgIGRhdGVTdHJpbmcgKz0gZGF0ZTsKLSAgICByZXR1cm4gZGF0ZVN0cmluZzsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2VyaWFsaXplR0RheShkYXRlKQotICB7Ci0gICAgdmFyIGdEYXlTdHJpbmcgPSAiLS0tIjsKLSAgICBpZiAoZGF0ZSA8IDEwKQotICAgICAgZ0RheVN0cmluZyArPSAiMCI7Ci0gICAgZ0RheVN0cmluZyArPSBkYXRlOwotICAgIHJldHVybiBnRGF5U3RyaW5nOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXJpYWxpemVHTW9udGhEYXkobW9udGgsZGF0ZSkKLSAgewotICAgIHZhciBnTW9udGhEYXlTdHJpbmcgPSAiLS0iOwotICAgIGlmIChtb250aCA8IDEwKQotICAgICAgZ01vbnRoRGF5U3RyaW5nICs9ICIwIjsKLSAgICBnTW9udGhEYXlTdHJpbmcgKz0gbW9udGgrIi0iOwotICAgIGlmIChkYXRlIDwgMTApCi0gICAgICBnTW9udGhEYXlTdHJpbmcgKz0gIjAiOwotICAgIGdNb250aERheVN0cmluZyArPSBkYXRlOwotICAgIHJldHVybiBnTW9udGhEYXlTdHJpbmc7Ci0gIH0gICAgCi0KLSAgZnVuY3Rpb24gc2V0RGF0ZVVzaW5nR0RheVBhcmFtZXRlcnMoZ0RheVBhcmFtZXRlcnMsZGF0ZU9iaikKLSAgewotICAgIGlmIChnRGF5UGFyYW1ldGVycyAhPSBudWxsKQotICAgICAgZGF0ZU9iai5zZXREYXRlKGdEYXlQYXJhbWV0ZXJzWzFdKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGF0ZVVzaW5nR01vbnRoRGF5UGFyYW1ldGVycyhnTW9udGhEYXlQYXJhbWV0ZXJzLGRhdGVPYmopCi0gIHsKLSAgICBpZiAoZ01vbnRoRGF5UGFyYW1ldGVycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGRhdGVPYmouc2V0TW9udGgoZ01vbnRoRGF5UGFyYW1ldGVyc1sxXS0xKTsKLSAgICAgIGRhdGVPYmouc2V0RGF0ZShnTW9udGhEYXlQYXJhbWV0ZXJzWzJdKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldERhdGVVc2luZ0dZZWFyTW9udGhQYXJhbWV0ZXJzKGdZZWFyTW9udGhQYXJhbWV0ZXJzLGRhdGVPYmopCi0gIHsKLSAgICBpZiAoZ1llYXJNb250aFBhcmFtZXRlcnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkYXRlT2JqLnNldEZ1bGxZZWFyKGdZZWFyTW9udGhQYXJhbWV0ZXJzWzFdKTsKLSAgICAgIGRhdGVPYmouc2V0TW9udGgoZ1llYXJNb250aFBhcmFtZXRlcnNbMl0tMSk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREYXRlVXNpbmdEYXRlUGFyYW1ldGVycyhkYXRlUGFyYW1ldGVycyxkYXRlT2JqKQotICB7Ci0gICAgaWYgKGRhdGVQYXJhbWV0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgc2V0RGF0ZVVzaW5nR1llYXJNb250aFBhcmFtZXRlcnMoZGF0ZVBhcmFtZXRlcnMsZGF0ZU9iaik7Ci0gICAgICBkYXRlT2JqLnNldERhdGUoZGF0ZVBhcmFtZXRlcnNbM10pOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNldERhdGVVc2luZ0RhdGVUaW1lUGFyYW1ldGVycyhkYXRlVGltZVBhcmFtZXRlcnMsZGF0ZU9iaikKLSAgewotICAgIGlmIChkYXRlVGltZVBhcmFtZXRlcnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXREYXRlVXNpbmdEYXRlUGFyYW1ldGVycyhkYXRlVGltZVBhcmFtZXRlcnMsZGF0ZU9iaik7Ci0gICAgICBkYXRlT2JqLnNldFVUQ0hvdXJzKGRhdGVUaW1lUGFyYW1ldGVyc1s0XSk7Ci0gICAgICBkYXRlT2JqLnNldFVUQ01pbnV0ZXMoZGF0ZVRpbWVQYXJhbWV0ZXJzWzVdKTsKLSAgICAgIGRhdGVPYmouc2V0VVRDU2Vjb25kcyhkYXRlVGltZVBhcmFtZXRlcnNbNl0pOwotICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGVUaW1lUGFyYW1ldGVyc1s3XTsKLSAgICAgIGlmIChtaWxsaXNlY29uZHMubGVuZ3RoID4gMCkKLTwlCi0gICAvLyBFbGltaW5hdGUgdGhlIGRlY2ltYWwgcG9pbnQKLSU+Ci0gICAgICAgIGRhdGVPYmouc2V0VVRDTWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kcy5zdWJzdHIoMSkpOwotICAgICAgZWxzZQotICAgICAgICBkYXRlT2JqLnNldFVUQ01pbGxpc2Vjb25kcygwKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREYXRlVXNpbmdUaW1lUGFyYW1ldGVycyh0aW1lUGFyYW1ldGVycyxkYXRlT2JqKQotICB7Ci0gICAgaWYgKHRpbWVQYXJhbWV0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgZGF0ZU9iai5zZXRIb3Vycyh0aW1lUGFyYW1ldGVyc1sxXSk7Ci0gICAgICBkYXRlT2JqLnNldE1pbnV0ZXModGltZVBhcmFtZXRlcnNbMl0pOwotICAgICAgZGF0ZU9iai5zZXRTZWNvbmRzKHRpbWVQYXJhbWV0ZXJzWzNdKTsKLSAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aW1lUGFyYW1ldGVyc1s0XTsKLSAgICAgIGlmIChtaWxsaXNlY29uZHMubGVuZ3RoID4gMCkKLTwlCi0gICAvLyBFbGltaW5hdGUgdGhlIGRlY2ltYWwgcG9pbnQKLSU+Ci0gICAgICAgIGRhdGVPYmouc2V0TWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kcy5zdWJzdHIoMSkpOwotICAgICAgZWxzZQotICAgICAgICBkYXRlT2JqLnNldE1pbGxpc2Vjb25kcygwKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBpbml0KCkKLSAgewotICAgIHZhciBkID0gbmV3IERhdGUoKTsKLTwlCi0gICBzd2l0Y2ggKGNhbGVuZGFyVHlwZSkKLSAgIHsKLSAgICAgY2FzZSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFOgotJT4KLSAgICBzZXREYXRlVXNpbmdEYXRlUGFyYW1ldGVycyhnZXREYXRlUGFyYW1ldGVycyh0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlKSxkKTsKLTwlCi0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUU6Ci0lPgotICAgIHNldERhdGVVc2luZ0RhdGVUaW1lUGFyYW1ldGVycyhnZXREYXRlVGltZVBhcmFtZXRlcnModG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSksZCk7Ci08JQotICAgICAgIGJyZWFrOwotICAgICBjYXNlIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dZRUFSTU9OVEg6Ci0lPgotICAgIHNldERhdGVVc2luZ0dZZWFyTW9udGhQYXJhbWV0ZXJzKGdldEdZZWFyTW9udGhQYXJhbWV0ZXJzKHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUpLGQpOwotPCUgICAgIAotICAgICBjYXNlIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dEQVk6Ci0lPgotICAgIHNldERhdGVVc2luZ0dEYXlQYXJhbWV0ZXJzKGdldEdEYXlQYXJhbWV0ZXJzKHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUpLGQpOwotPCUgICAKLSAgICAgY2FzZSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HTU9OVEhEQVk6Ci0lPgotICAgIHNldERhdGVVc2luZ0dNb250aERheVBhcmFtZXRlcnMoZ2V0R01vbnRoRGF5UGFyYW1ldGVycyh0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlKSxkKTsKLTwlICAgICAgIAotICAgICBkZWZhdWx0OgotICAgICAgIGJyZWFrOwotICAgfQotJT4KLSAgICBnZW5lcmF0ZUNhbGVuZGFyKGQpOwotICAgIHZhciBtb250aFNlbGVjdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vbnRoU2VsZWN0b3IiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxtb250aHMubGVuZ3RoO2krKykKLSAgICAgIG1vbnRoU2VsZWN0b3Iub3B0aW9uc1tpXSA9IG5ldyBPcHRpb24obW9udGhzW2ldLGkpOwotICAgIGdlbmVyYXRlQ2FsZW5kYXIoZCk7Ci0gIH0KLQotICBmdW5jdGlvbiBpbml0Q2FsZW5kYXJIZWFkZXIodGFibGUpCi0gIHsKLSAgICBjYWxlbmRhckJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQk9EWSIpOwotICAgIHZhciBoZWFkZXJSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIGZvciAodmFyIGk9MDtpPGRheXMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKLSAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXlzW2ldKSk7Ci0gICAgICBoZWFkZXIuY2xhc3NOYW1lPSJoZWFkZXJjb2xvciI7Ci0gICAgICBoZWFkZXJSb3cuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKLSAgICB9Ci0gICAgY2FsZW5kYXJCb2R5LmFwcGVuZENoaWxkKGhlYWRlclJvdyk7Ci0gICAgdGFibGUuYXBwZW5kQ2hpbGQoY2FsZW5kYXJCb2R5KTsKLSAgICBjYWxlbmRhckJvZHlTZXQgPSB0cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2VuZXJhdGVDYWxlbmRhcihkYXRlKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbGVuZGFyIik7Ci0gICAgdmFyIGRhdGVEYXRlID0gZGF0ZS5nZXREYXRlKCk7Ci0gICAgdmFyIGRhdGVNb250aCA9IGRhdGUuZ2V0TW9udGgoKTsKLSAgICB2YXIgZGF0ZUZ1bGxZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpOwotICAgIHZhciBkYXRlSXRlcmF0b3IgPSBuZXcgRGF0ZSgpOwotICAgIGRhdGVJdGVyYXRvci5zZXRUaW1lKERhdGUucGFyc2UoZW5nTW9udGhzW2RhdGVNb250aF0rIiAxLCAiK2RhdGVGdWxsWWVhcikpOwotICAgIHZhciBzdGFydGluZ0RhdGUgPSBkYXRlSXRlcmF0b3IuZ2V0RGF0ZSgpOyAvLyAxLDIsMy4uLgotICAgIHZhciBzdGFydGluZ0RheSA9IGRhdGVJdGVyYXRvci5nZXREYXkoKTsgLy8gU3VuLE1vbixUdWVzLi4uCi0gICAgY2xlYXJDYWxlbmRhcigpOwotICAgIGZvciAodmFyIHJvd3M9MDtyb3dzPDY7cm93cysrKQotICAgIHsKLSAgICAgIHZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgICAgZm9yICh2YXIgY29sdW1ucz0wO2NvbHVtbnM8ZGF5cy5sZW5ndGg7Y29sdW1ucysrKQotICAgICAgewotICAgICAgICB2YXIgY29sdW1uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgdmFyIGRhdGVJdGVyYXRvckRhdGUgPSBkYXRlSXRlcmF0b3IuZ2V0RGF0ZSgpOwotICAgICAgICB2YXIgZGF0ZUl0ZXJhdG9yTW9udGggPSBkYXRlSXRlcmF0b3IuZ2V0TW9udGgoKTsKLSAgICAgICAgdmFyIGRhdGVJdGVyYXRvckZ1bGxZZWFyID0gZGF0ZUl0ZXJhdG9yLmdldEZ1bGxZZWFyKCk7Ci0gICAgICAgIGNvbHVtbi53aWR0aCA9IDI0OwotICAgICAgICBjb2x1bW4uaGVpZ2h0ID0gMjQ7Ci0gICAgICAgIGNvbHVtbi5hbGlnbiA9ICJjZW50ZXIiOwotICAgICAgICBjb2x1bW4udmFsaWduID0gImNlbnRlciI7Ci0gICAgICAgIGNvbHVtbi5jbGFzc05hbWUgPSAiY2FsZW5kYXJ0YWJsZWNlbGxzIjsKLSAgICAgICAgaWYgKChkYXRlSXRlcmF0b3JEYXRlID09IHN0YXJ0aW5nRGF0ZSAmJiBjb2x1bW5zIDwgc3RhcnRpbmdEYXkpIHx8IChkYXRlSXRlcmF0b3JNb250aCAhPSBkYXRlTW9udGgpKQotICAgICAgICAgIGNvbHVtbi5pbm5lckhUTUwgPSAiJm5ic3A7IjsKLSAgICAgICAgZWxzZSBpZiAoZGF0ZUl0ZXJhdG9yTW9udGggPT0gZGF0ZU1vbnRoKQotICAgICAgICB7Ci0gICAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgICAgICAgc3dpdGNoICg8JT1jYWxlbmRhclR5cGUlPikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEUlPjoKLSAgICAgICAgICAgICAgbGluay5ocmVmID0gImphdmFzY3JpcHQ6dHJhbnNmZXJEYXRlKCIrZGF0ZUl0ZXJhdG9yRGF0ZSsiKSI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFVElNRSU+OgotICAgICAgICAgICAgICBsaW5rLmhyZWYgPSAiamF2YXNjcmlwdDp0cmFuc2ZlckRhdGVUaW1lKCIrZGF0ZUl0ZXJhdG9yRGF0ZSsiKSI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HWUVBUk1PTlRIJT46Ci0gICAgICAgICAgICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OnRyYW5zZmVyR1llYXJNb250aCgpIjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dEQVklPjoKLSAgICAgICAgICAgICAgbGluay5ocmVmID0gImphdmFzY3JpcHQ6dHJhbnNmZXJHRGF5KCIrZGF0ZUl0ZXJhdG9yRGF0ZSsiKSI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HTU9OVEhEQVklPjoKLSAgICAgICAgICAgICAgbGluay5ocmVmID0gImphdmFzY3JpcHQ6dHJhbnNmZXJHTW9udGhEYXkoIitkYXRlSXRlcmF0b3JEYXRlKyIpIjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0ZUl0ZXJhdG9yRGF0ZSkpOwotICAgICAgICAgIGNvbHVtbi5hcHBlbmRDaGlsZChsaW5rKTsKLSAgICAgICAgICBpZiAoZGF0ZUl0ZXJhdG9yRGF0ZSA9PSBkYXRlRGF0ZSAmJiBkYXRlSXRlcmF0b3JGdWxsWWVhciA9PSBkYXRlRnVsbFllYXIpCi0gICAgICAgICAgICBjb2x1bW4uY2xhc3NOYW1lID0gInRvZGF5dGFibGVjZWxsIjsKLSAgICAgICAgICBkYXRlSXRlcmF0b3JEYXRlKys7Ci0gICAgICAgICAgZGF0ZUl0ZXJhdG9yLnNldFRpbWUoRGF0ZS5wYXJzZShlbmdNb250aHNbZGF0ZUl0ZXJhdG9yTW9udGhdKyIgIitkYXRlSXRlcmF0b3JEYXRlKyIsICIrZGF0ZUl0ZXJhdG9yLmdldEZ1bGxZZWFyKCkpKTsKLSAgICAgICAgfQotICAgICAgICByb3cuYXBwZW5kQ2hpbGQoY29sdW1uKTsKLSAgICAgIH0KLSAgICAgIGNhbGVuZGFyQm9keS5hcHBlbmRDaGlsZChyb3cpOwotICAgIH0KLSAgICB2YXIgbW9udGhTZWxlY3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb250aFNlbGVjdG9yIik7Ci0gICAgZm9yICh2YXIgaT0wO2k8bW9udGhTZWxlY3Rvci5vcHRpb25zLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKG1vbnRoU2VsZWN0b3Iub3B0aW9uc1tpXS52YWx1ZSA9PSBkYXRlTW9udGgpCi0gICAgICB7Ci0gICAgICAgIG1vbnRoU2VsZWN0b3Iuc2VsZWN0ZWRJbmRleCA9IGk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICB2YXIgeWVhclRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieWVhclRleHQiKTsKLSAgICB5ZWFyVGV4dC52YWx1ZSA9IGRhdGVGdWxsWWVhcjsKLSAgICBzYXZlZFllYXJUZXh0VmFsdWUgPSB5ZWFyVGV4dC52YWx1ZTsKLTwlCi0gICBpZiAoY2FsZW5kYXJUeXBlID09IEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FKQotICAgewotJT4KLSAgICB2YXIgdGltZVRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGltZVRleHQiKTsKLSAgICB0aW1lVGV4dC52YWx1ZSA9IHNlcmlhbGl6ZVRpbWUoZGF0ZS5nZXRIb3VycygpLGRhdGUuZ2V0TWludXRlcygpLGRhdGUuZ2V0U2Vjb25kcygpLGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpOwotPCUKLSAgIH0KLSU+Ci0gICAgY3VycmVudERhdGUgPSBkYXRlOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xlYXJDYWxlbmRhcigpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FsZW5kYXIiKTsKLSAgICBpZiAoIWNhbGVuZGFyQm9keVNldCkKLSAgICAgIGluaXRDYWxlbmRhckhlYWRlcih0YWJsZSk7Ci0gICAgZm9yICh2YXIgaT0xO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHRhYmxlLmRlbGV0ZVJvdyhpKTsKLSAgICAgIGktLTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiB1cGRhdGVDYWxlbmRhcihuZXdNb250aCxuZXdGdWxsWWVhcikKLSAgewotICAgIHZhciBkID0gbmV3IERhdGUoKTsKLSAgICBpZiAobmV3TW9udGggPiBtb250aHMubGVuZ3RoKQotICAgIHsKLSAgICAgIG5ld0Z1bGxZZWFyKys7Ci0gICAgICBuZXdNb250aCA9IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5ld01vbnRoIDwgMCkKLSAgICB7Ci0gICAgICBuZXdGdWxsWWVhci0tOwotICAgICAgbmV3TW9udGggPSBtb250aHMubGVuZ3RoLTE7Ci0gICAgfQotICAgIGQuc2V0TW9udGgobmV3TW9udGgpOwotICAgIGQuc2V0RnVsbFllYXIobmV3RnVsbFllYXIpOwotPCUKLSAgIGlmIChjYWxlbmRhclR5cGUgPT0gQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUUpCi0gICB7Ci0lPgotICAgIHNldERhdGVVc2luZ1RpbWVQYXJhbWV0ZXJzKGdldFRpbWVQYXJhbWV0ZXJzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aW1lVGV4dCIpLnZhbHVlKSxkKTsKLTwlCi0gICB9Ci0lPgotICAgIGdlbmVyYXRlQ2FsZW5kYXIoZCk7Ci0gIH0KLQotICBmdW5jdGlvbiBqdW1wVG9QcmV2aW91c1llYXIoKQotICB7Ci0gICAgdXBkYXRlQ2FsZW5kYXIoY3VycmVudERhdGUuZ2V0TW9udGgoKSxjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpLTEpCi0gIH0KLQotICBmdW5jdGlvbiBqdW1wVG9QcmV2aW91c01vbnRoKCkKLSAgewotICAgIHVwZGF0ZUNhbGVuZGFyKGN1cnJlbnREYXRlLmdldE1vbnRoKCktMSxjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGp1bXBUb05leHRNb250aCgpCi0gIHsKLSAgICB1cGRhdGVDYWxlbmRhcihjdXJyZW50RGF0ZS5nZXRNb250aCgpKzEsY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBqdW1wVG9OZXh0WWVhcigpCi0gIHsKLSAgICB1cGRhdGVDYWxlbmRhcihjdXJyZW50RGF0ZS5nZXRNb250aCgpLGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkrMSk7Ci0gIH0KLQotICBmdW5jdGlvbiBqdW1wVG9Ub2RheSgpCi0gIHsKLSAgICBnZW5lcmF0ZUNhbGVuZGFyKG5ldyBEYXRlKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0TmV3RGF0ZSgpCi0gIHsKLSAgICB2YXIgbW9udGhTZWxlY3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb250aFNlbGVjdG9yIik7Ci0gICAgdmFyIG5ld01vbnRoID0gbW9udGhTZWxlY3Rvci5vcHRpb25zW21vbnRoU2VsZWN0b3Iuc2VsZWN0ZWRJbmRleF0udmFsdWU7Ci0gICAgdmFyIG5ld0Z1bGxZZWFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInllYXJUZXh0IikudmFsdWU7Ci08JQotICAgLy8gWVlZWSsKLSU+Ci0gICAgdmFyIGQgPSBuZXcgRGF0ZSgpOwotICAgIGlmICh2YWxpZGF0ZVllYXJTdHJpbmcobmV3RnVsbFllYXIpKQotICAgIHsKLSAgICAgIC8vIFRoZSB5ZWFyIHN0cmluZyBjb250YWlucyBvbmx5IGRpZ2l0cyBhbmQgaXMgaGVuY2UgYSB2YWxpZCB5ZWFyLgotICAgICAgZC5zZXRGdWxsWWVhcihuZXdGdWxsWWVhcik7Ci0gICAgICBkLnNldE1vbnRoKG5ld01vbnRoKTsKLSAgICB9Ci0gICAgZ2VuZXJhdGVDYWxlbmRhcihkKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGhhbmRsZVllYXJUZXh0S2V5VXBFdmVudCgpCi0gIHsKLSAgICB2YXIgY3VycmVudFllYXJUZXh0VmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieWVhclRleHQiKS52YWx1ZTsKLSAgICBpZiAoY3VycmVudFllYXJUZXh0VmFsdWUgPT0gc2F2ZWRZZWFyVGV4dFZhbHVlKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHNldE5ld0RhdGUoKTsKLSAgfQotCi08JQotICAgLy8gWVlZWSstTU0tREQKLSU+Ci0gIGZ1bmN0aW9uIHRyYW5zZmVyRGF0ZShkYXRlKQotICB7Ci0gICAgdmFyIGZ1bGxZZWFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInllYXJUZXh0IikudmFsdWU7Ci0gICAgdmFyIG1vbnRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vbnRoU2VsZWN0b3IiKS5zZWxlY3RlZEluZGV4KzE7Ci0gICAgdG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSA9IHNlcmlhbGl6ZURhdGUoZnVsbFllYXIsbW9udGgsZGF0ZSk7Ci0gICAgdG9wLm9wZW5lci5jbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICB9Ci0KLTwlCi0gICAvLyBZWVlZKy1NTS1ERFRISDpNTTpTU1suU1NTXVoKLSU+Ci0gIGZ1bmN0aW9uIHRyYW5zZmVyRGF0ZVRpbWUoZGF0ZSkKLSAgewotICAgIHZhciBmdWxsWWVhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ5ZWFyVGV4dCIpLnZhbHVlOwotICAgIHZhciBtb250aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb250aFNlbGVjdG9yIikuc2VsZWN0ZWRJbmRleCsxOwotICAgIHZhciBzZXJpYWxpemVkRGF0ZSA9IHNlcmlhbGl6ZURhdGUoZnVsbFllYXIsbW9udGgsZGF0ZSk7Ci0gICAgdmFyIGQgPSBuZXcgRGF0ZSgpOwotICAgIHNldERhdGVVc2luZ0RhdGVQYXJhbWV0ZXJzKGdldERhdGVQYXJhbWV0ZXJzKHNlcmlhbGl6ZWREYXRlKSxkKTsKLSAgICB2YXIgdGltZVZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRpbWVUZXh0IikudmFsdWU7Ci0gICAgdmFyIHRpbWVQYXJhbWV0ZXJzID0gZ2V0VGltZVBhcmFtZXRlcnModGltZVZhbHVlKTsKLSAgICBpZiAodGltZVBhcmFtZXRlcnMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoIWNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1RJTUVfRk9STUFUIikpJT4iKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBzZXREYXRlVXNpbmdUaW1lUGFyYW1ldGVycyh0aW1lUGFyYW1ldGVycyxkKTsKLSAgICB0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlID0gc2VyaWFsaXplZERhdGUgKyAiVCIgKyBzZXJpYWxpemVUaW1lKGQuZ2V0VVRDSG91cnMoKSxkLmdldFVUQ01pbnV0ZXMoKSxkLmdldFVUQ1NlY29uZHMoKSxkLmdldFVUQ01pbGxpc2Vjb25kcygpKSArICJaIjsKLSAgICB0b3Aub3BlbmVyLmNsb3NlQ2FsZW5kYXJCcm93c2VyKCk7Ci0gIH0KLSAgCi08JQotICAgLy8gWVlZWSstTU0KLSU+Ci0gIGZ1bmN0aW9uIHRyYW5zZmVyR1llYXJNb250aCgpCi0gIHsKLSAgICB2YXIgZnVsbFllYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieWVhclRleHQiKS52YWx1ZTsKLSAgICB2YXIgbW9udGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpLnNlbGVjdGVkSW5kZXgrMTsKLSAgICB2YXIgc2VyaWFsaXplZEdZZWFyTW9udGggPSBzZXJpYWxpemVHWWVhck1vbnRoKGZ1bGxZZWFyLG1vbnRoKTsKLSAgICB2YXIgZCA9IG5ldyBEYXRlKCk7Ci0gICAgc2V0RGF0ZVVzaW5nR1llYXJNb250aFBhcmFtZXRlcnMoZ2V0R1llYXJNb250aFBhcmFtZXRlcnMoc2VyaWFsaXplZEdZZWFyTW9udGgpLGQpOwotICAgIHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUgPSBzZXJpYWxpemVkR1llYXJNb250aDsKLSAgICB0b3Aub3BlbmVyLmNsb3NlQ2FsZW5kYXJCcm93c2VyKCk7Ci0gIH0gICAgIAotICAKLTwlCi0gICAvLyAtLS1ERAotJT4KLSAgZnVuY3Rpb24gdHJhbnNmZXJHRGF5KGRhdGUpICAgICAKLSAgewotICAgIHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUgPSBzZXJpYWxpemVHRGF5KGRhdGUpOwotICAgIHRvcC5vcGVuZXIuY2xvc2VDYWxlbmRhckJyb3dzZXIoKTsKLSAgfQotPCUKLSAgIC8vIC0tTU0tREQKLSU+ICAKLSAgZnVuY3Rpb24gdHJhbnNmZXJHTW9udGhEYXkoZGF0ZSkKLSAgewotICAgIHZhciBtb250aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb250aFNlbGVjdG9yIikuc2VsZWN0ZWRJbmRleCsxOwotICAgIHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUgPSBzZXJpYWxpemVHTW9udGhEYXkobW9udGgsZGF0ZSk7Ci0gICAgdG9wLm9wZW5lci5jbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Im1vbnRoU2VsZWN0b3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NT05USCIpJT48L2xhYmVsPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8dGQgd2lkdGg9IjIwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ieWVhclRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ZRUFSIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0iY2VudGVyIj4KLSAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJtb250aFNlbGVjdG9yIiBvbkNoYW5nZT0ic2V0TmV3RGF0ZSgpIiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICA8dGQgd2lkdGg9IjMwJSIgYWxpZ249ImxlZnQiIHZhbGlnbj0iY2VudGVyIj4KLSAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9InllYXJUZXh0IiBzaXplPTYgb25rZXl1cD0iaGFuZGxlWWVhclRleHRLZXlVcEV2ZW50KCkiIGNsYXNzPSJ0YWJsZXRleHRlbnRlciI+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgIDx0YWJsZSBpZD0iY2FsZW5kYXIiIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MyBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotPCUKLSAgIGlmIChjYWxlbmRhclR5cGUgPT0gQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUUpCi0gICB7Ci0lPgotICAgICAgPHRyPgotICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgIDx0YWJsZSBib3JkZXI9MD4KLSAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249ImNlbnRlciIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDxsYWJlbCBmb3I9InRpbWVUZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVElNRSIpJT48L2xhYmVsPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249ImNlbnRlciIgd2lkdGg9IjgwJSI+Ci0gICAgICAgICAgICAgIDxpbnB1dCBpZD0idGltZVRleHQiIHR5cGU9InRleHQiIGNsYXNzPSJ0YWJsZXRleHRlbnRlciIgc2l6ZT0xMiBtYXhsZW5ndGg9MTI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIHdpZHRoPSIxMCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci08JQotICAgfQotJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICA8dGFibGUgYm9yZGVyPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Omp1bXBUb1ByZXZpb3VzWWVhcigpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfUFJFVklPVVNfWUVBUiIpJT4iPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1BSRVZJT1VTX1lFQVIiKSU+PC9hPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpqdW1wVG9QcmV2aW91c01vbnRoKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9QUkVWSU9VU19NT05USCIpJT4iPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1BSRVZJT1VTX01PTlRIIiklPjwvYT4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6anVtcFRvVG9kYXkoKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RPREFZIiklPiI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfVE9EQVkiKSU+PC9hPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpqdW1wVG9OZXh0TW9udGgoKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX05FWFRfTU9OVEgiKSU+Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19ORVhUX01PTlRIIiklPjwvYT4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6anVtcFRvTmV4dFllYXIoKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX05FWFRfWUVBUiIpJT4iPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX05FWFRfWUVBUiIpJT48L2E+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGluaXQoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZjkxMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FMRU5EQVJfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25VbmxvYWQ9InRvcC5vcGVuZXIuY2FsZW5kYXJCcm93c2VyQ2xvc2VkPXRydWUiIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciI+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2FsZW5kYXIuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0NBTEVOREFSX0JST1dTRVIiKSU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0b3Aub3BlbmVyLmNhbGVuZGFyQnJvd3NlckNsb3NlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL2NhbGVuZGFyLmNzcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL2NhbGVuZGFyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgzODgwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy9jYWxlbmRhci5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLS5jYWxlbmRhcnRhYmxlY2VsbHMgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjQjhCNEEzOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IHRleHQtYWxpZ246Y2VudGVyfQotLnRvZGF5dGFibGVjZWxsIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNCOEI0QTM7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgdGV4dC1hbGlnbjpjZW50ZXJ9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy90b29sYmFyLmNzcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3Rvb2xiYXIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODVlYTEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3Rvb2xiYXIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI3Rvb2xiYXIgeyB3aWR0aDoxMDAlOyBoZWlnaHQ6MjVweDsgYmFja2dyb3VuZDojRUNFOUQ4OyBib3JkZXItY29sb3I6d2hpdGU7ICBib3JkZXItc3R5bGU6c29saWQ7ICBib3JkZXItd2lkdGg6MSAxIDEgMXB4OyBib3JkZXItYm90dG9tLWNvbG9yOiM4NDgyODQ7IGJvcmRlci1yaWdodC1jb2xvcjojODQ4Mjg0OyBtYXJnaW46MCAwIDAgMHB4O30KLSN0b29sYmFyYm9yZGVyIHsgaGVpZ2h0OjI2cHg7IHdpZHRoOjEwMCU7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoOjEgMCAwIDFweDsgYm9yZGVyLWNvbG9yOiM4NDgyODQ7IH0KLQotLyogaWZyYW1lIFNwYWNpbmcgQ29udG9sICovCi0udG9vbGJhcmJvZHltYXJnaW4geyBtYXJnaW46IDUgNSAwIDU7IGJhY2tncm91bmQ6ICNFQ0U5RDg7IH0KLQotLyogVG9vbGJhciBTdHlsZXMgKi8KLS50ZXh0IHtmb250LXNpemU6MTJweDsgZm9udDogaWNvbjt9Ci1hOmxpbmsge2NvbG9yOiBibGFjazt9Ci0KLS8qIEpTIFJvbGxvdmVyIFN0eWxlICovCi1JTUcgeyBib3JkZXItd2lkdGg6MnB4OyBib3JkZXItc3R5bGU6c29saWQ7fQotLm5vcm1hbCB7IGJvcmRlci1jb2xvciA6ICNFQ0U5RDg7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDoxcHg7IGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7IGJvcmRlci1ib3R0b20tY29sb3IgOiNFQ0U5RDg7IGJvcmRlci1yaWdodC1jb2xvciA6I0VDRTlEODt9Ci0uaG92ZXIgeyBib3JkZXItY29sb3IgOiB3aGl0ZTsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOjFweDsgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDsgYm9yZGVyLWJvdHRvbS1jb2xvciA6IzhDOEU4QzsgYm9yZGVyLXJpZ2h0LWNvbG9yIDojOEM4RThDOyB9Ci0uZG93biB7IGJvcmRlci1jb2xvciA6ICM4QzhFOEM7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDoxcHg7IGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7IGJvcmRlci1ib3R0b20tY29sb3I6d2hpdGU7IGJvcmRlci1yaWdodC1jb2xvcjp3aGl0ZTt9Ci0KLS8qIEdsb2JhbFRvb2xiYXIgKi8KLS5ndG9vbGJhcmJvZHltYXJnaW4ge21hcmdpbiA6IDAgMSAzIDA7IGJhY2tncm91bmQ6ICNFQ0U5RDh9Ci0jZ2xvYmFsdG9vbGJhcntoZWlnaHQ6MTAwJTsgYmFja2dyb3VuZDogI0VDRTlEODsgYm9yZGVyLWNvbG9yIDogd2hpdGU7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDoxcHg7IGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7IGJvcmRlci1ib3R0b20tY29sb3IgOmJsYWNrOyBib3JkZXItcmlnaHQtd2lkdGg6IDFweDsgYm9yZGVyLXJpZ2h0LWNvbG9yIDojODQ4Mjg0O30KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvdHJlZXZpZXcuY3NzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvdHJlZXZpZXcuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTFlNmE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3RyZWV2aWV3LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYSB7dGV4dC1kZWNvcmF0aW9uOiBub25lO30KLWE6aG92ZXIge3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KLXRkIHtmb250OiBpY29uOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiBCbGFjazt9Ci0udW5zZWxlY3RlZFRleHRBbmNob3Ige2NvbG9yOmJsdWU7IGJhY2tncm91bmQtY29sb3I6ZG9jdW1lbnQuYmFja2dyb3VuZENvbG9yfQotLnNlbGVjdGVkVGV4dEFuY2hvciB7Y29sb3I6d2hpdGU7IGJhY2tncm91bmQtY29sb3I6bmF2eX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3dpbmRvd3MuY3NzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3Mvd2luZG93cy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZGI0MDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3Mvd2luZG93cy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0jY29udGVudGJvcmRlciB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjODQ4Mjg0OyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICM4NDgyODQ7IGJvcmRlci10b3A6MHB4IHNvbGlkICM4NDgyODQ7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICM4NDgyODQ7IGhlaWdodDoxMDAlOyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOndoaXRlOyBvdmVyZmxvdzphdXRvOyBwYWRkaW5nLWxlZnQ6MTBweDsgcGFkZGluZy1yaWdodDowOyBwYWRkaW5nLXRvcDoxMDsgcGFkZGluZy1ib3R0b206MTB9Ci0jdHJlZWNvbnRlbnRib3JkZXIgeyBib3JkZXItbGVmdDoxcHggc29saWQgIzg0ODI4NDsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjODQ4Mjg0OyBib3JkZXItdG9wOjBweCBzb2xpZCAjODQ4Mjg0OyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjODQ4Mjg0OyBoZWlnaHQ6MTAwJTsgd2lkdGg6MTAwJTsgYmFja2dyb3VuZDp3aGl0ZTsgb3ZlcmZsb3c6YXV0bzsgcGFkZGluZy10b3A6NXB4fQotCi0vKiBpZnJhbWUgU3BhY2luZyBDb250b2wgKi8KLS5jb250ZW50Ym9keW1hcmdpbiB7IG1hcmdpbjogMCA1IDEyIDU7IGJhY2tncm91bmQ6I0VDRTlEODsgfQotCi0vKiBEb2N1bWVudCBTdHlsZXMgICovCi0ubGFiZWxzIHsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjpibGFjazsgZm9udC13ZWlnaHQ6IG5vcm1hbDt9Ci0KLS8qIGZpZWxkc2V0K2xlZ2VuZCBTdHlsZXMgKi8KLS5rZXlsaW5lZmllbGRzZXQgeyBib3JkZXItY29sb3I6IzgwODBGRjsgYm9yZGVyLXdpZHRoOjFweDsgYm9yZGVyLXN0eWxlOnNvbGlkOyB9Ci0uaGVhZGVyZmllbGRzZXQgeyAtbW96LWJvcmRlci1yYWRpdXM6IDdwdDsgcGFkZGluZzogM3B4OyBib3JkZXI6MXB4IHNvbGlkICNDMEMwQzA7IH0KLQotLyogdGFibGUgU3R5bGVzICovCi0udGFibGVib3JkZXIge2JvcmRlci1sZWZ0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MHB4IHNvbGlkICNCOEI0QTM7IH0KLS50YWJsZWNlbGxzIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0I4QjRBMzsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyB0ZXh0LWFsaWduOmxlZnR9Ci0uY2hlY2tib3hjZWxscyB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNCOEI0QTM7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgYmFja2dyb3VuZC1jb2xvcjogI0VDRTlEOH0KLXRoLmhlYWRlcmNvbG9yIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0I4QjRBMzsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJhY2tncm91bmQtY29sb3I6IzQ5NzdCNDsgY29sb3I6I0ZGRkZGRjsgdGV4dC1hbGlnbjpjZW50ZXJ9Ci10aC5zaW5nbGVoZWFkZXJjb2xvciB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNCOEI0QTM7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiM0OTc3QjQ7IGNvbG9yOiNGRkZGRkY7IHRleHQtYWxpZ246bGVmdH0KLS5maXJzdGNvbHVtbmVycmFudHJvd2NvbG9yIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJlZDsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjdCNEEzOyBib3JkZXItdG9wOjFweCBzb2xpZCByZWQ7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkIHJlZDsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNFNkVBRDg7IHRleHQtYWxpZ246bGVmdH0KLS5taWRkbGVlcnJhbnRyb3djb2xvciB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjdCNEEzOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCN0I0QTM7IGJvcmRlci10b3A6MXB4IHNvbGlkIHJlZDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgcmVkOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJhY2tncm91bmQtY29sb3I6I0U2RUFEODsgdGV4dC1hbGlnbjpsZWZ0fQotLmxhc3Rjb2x1bW5lcnJhbnRyb3djb2xvciB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjdCNEEzOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJlZDsgYm9yZGVyLXRvcDoxcHggc29saWQgcmVkOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCByZWQ7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgYmFja2dyb3VuZC1jb2xvcjojRTZFQUQ4OyB0ZXh0LWFsaWduOmxlZnR9Ci0ucm93Y29sb3IgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjQjhCNEEzOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJhY2tncm91bmQtY29sb3I6I0U2RUFEODsgdGV4dC1hbGlnbjpsZWZ0fQotCi0vKiBGb3JtIGVsZW1lbnRzIGFuZCBzdGF0dXMgY29udGVudHMgKi8KLXRkIHsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyB9Ci10aCB7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTJweDsgfQotaW5wdXQgeyBmb250OiBpY29uOyBmb250LXNpemU6IDEycHg7IH0KLS5zZWxlY3RsaXN0IHtmb250OiBpY29uOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiBCbGFjazsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGggOiAxcHg7ICBib3JkZXItY29sb3I6I0M3QzVCMjt9Ci1zZWxlY3QgeyBmb250OiBpY29uOyBmb250LXNpemU6IDEycHg7IH0KLXByZSB7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTJweDsgfQotLnNtdGV4dGVudGVyIHtmb250OiBpY29uOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiBCbGFjazsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGggOiAxcHg7IGJvcmRlci1jb2xvcjogI0M3QzVCMjsgd2lkdGg6MTAlOyB9Ci0udGV4dGVudGVyIHtmb250OiBpY29uOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiBCbGFjazsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGggOiAxcHg7IGJvcmRlci1jb2xvcjogI0M3QzVCMjsgd2lkdGg6OTAlOyB9Ci0udGFibGV0ZXh0ZW50ZXIge2ZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6IEJsYWNrOyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci13aWR0aCA6IDFweDsgYm9yZGVyLWNvbG9yOiAjQzdDNUIyOyB3aWR0aDoxMDAlOyB9Ci0udGFibGVmaWxlYnJvd3NlIHt3aWR0aDoxMDAlOyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci13aWR0aDoxcHg7IGZvbnQtc2l6ZTogMTRweDsgYm9yZGVyLWNvbG9yOiAjQzdDNUIyOyBmb250OiBpY29uOyB9Ci1pbnB1dC5idXR0b24ge2ZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgYm9yZGVyLXdpZHRoIDogMXB4OyBib3JkZXItc3R5bGU6b3V0c2V0OyBoZWlnaHQ6MjJweDt9Ci1pbnB1dC5yYWRpbyB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4O30KLWltZy50d2lzdCB7Ym9yZGVyLXdpZHRoOjAgMCAwIDBweDsgaGVpZ2h0OjEwcHg7IHdpZHRoOjExcHg7fQotCi0vKiBGcmFnbWVudCBTdHlsZXMgKi8KLS5maXhmcmFndGFibGUge3dpZHRoOjk1JTsgYm9yZGVyOjBweCBub25lOyB9Ci0uaW5uZXJmaXhmcmFndGFibGUge3dpZHRoOjEwMCU7IGJvcmRlcjowcHggbm9uZTsgfQotLnJhbmdlZnJhZ3RhYmxlIHt3aWR0aDo5NSU7IGJvcmRlci1sZWZ0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MHB4IHNvbGlkICNCOEI0QTM7fQotLmlubmVycmFuZ2VmcmFndGFibGUge3dpZHRoOjEwMCU7IGJvcmRlci1sZWZ0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MHB4IHNvbGlkICNCOEI0QTM7fQotLnRleHRhcmVhZW50ZXIge2ZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6IEJsYWNrOyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci13aWR0aCA6IDFweDsgYm9yZGVyLWNvbG9yOiAjQzdDNUIyOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTUwcHg7IH0KLS5iaWd0ZXh0YXJlYWVudGVyIHtmb250OiBpY29uOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiBCbGFjazsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGggOiAxcHg7IGJvcmRlci1jb2xvcjogI0M3QzVCMjsgd2lkdGg6MTAwJTsgaGVpZ2h0OjMwMHB4OyB9Ci0uZnJhZ2FyZWEgeyBwYWRkaW5nLWxlZnQ6IDNweDsgcGFkZGluZy1ib3R0b206IDVweDsgfQotCi1pZnJhbWUge2JvcmRlci13aWR0aDogMnB4OyBib3JkZXItc3R5bGU6IGluc2V0OyB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTEwZTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24iJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbiBhY3Rpb24gPSBuZXcgQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gIGlmIChhY3Rpb25SZXN1bHQpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTCxmYWxzZSkpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0gICAgaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTikgPT0gbnVsbCkgewotJT4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQ29uZmlybUpTUC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgIH0KLSAgICBlbHNlIHsKLSU+Ci0gICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgZmF2UHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICBmYXZTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICA8L3NjcmlwdD4KLTwlCi0gICAgfQotICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjZWVkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uID0gQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24ubmV3QWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gIGlmIChhY3Rpb25SZXN1bHQpIHsKLSAgICBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKS5tYWtlU2VsZWN0ZWROb2RlVmlzaWJsZSgpOwotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLGZhbHNlKSkpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSAgICBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKSA9PSBudWxsKSB7Ci0lPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNDb25maXJtSlNQLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAgfQotICAgIGVsc2UgewotJT4KLSAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgIGZhdlN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIDwvc2NyaXB0PgotPCUKLSAgICB9Ci0gIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjI5OGVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc0FjdGlvbklucHV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbiBhY3Rpb24gPSBuZXcgRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi1pZiAoYWN0aW9uUmVzdWx0KSB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMLGZhbHNlKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0gIGlmIChyZXF1ZXN0LmdldFBhcmFtZXRlcihGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pID09IG51bGwpIHsKLSU+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNDb25maXJtSlNQLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgZmF2UHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgZmF2U3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU5OTQyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE5MzViNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSBuZXcgRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMDMzYjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBhY3Rpb24gPSBuZXcgRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZThkMTU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIEZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotICAgYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZhMWIyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlJlbW92ZUZhdm9yaXRlc0FjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICAgUmVtb3ZlRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBSZW1vdmVGYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNDb25maXJtSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQ29uZmlybUpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1OTcwZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNDb25maXJtSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuUmVtb3ZlRmF2b3JpdGVzQWN0aW9uIiU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgaWYgKGNvbmZpcm0oIjwlPWNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfQ09ORklSTV9SRU1PVkVfTk9ERSIsIGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldE5vZGVOYW1lKCkpJT4iKSkgewotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgICAgICAlPgotICAgICAgICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQsIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQpKSklPiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgICAgICBmYXZTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgIH0KLSAgICA8L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAzZDM0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gQ3JlYXRlIHRoZSBhY3Rpb24uCi0gICBSZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb24gYWN0aW9uID0gbmV3IFJlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbihjb250cm9sbGVyKTsKLSAgIAotICAgLy8gUG9wdWxhdGUgdGhlIGFjdGlvbiB3aXRoIHRoZSByZXF1ZXN0IHByb3BlcnRpZXMuCi0gICBib29sZWFuIHJlc3VsdCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc2ZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmIChyZXN1bHQpCi0gICB7Ci0gICAgIGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLSAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgewotICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCA9IGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0KCk7Ci0gICAgdmFyIGFjdGlvbnNDb250YWluZXJGcmFtZXNldCA9IGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpOwotICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LnNldEF0dHJpYnV0ZSgiY29scyIsIjwlPWZhdlBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iKTsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQuc2V0QXR0cmlidXRlKCJyb3dzIiwiPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iKTsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGI5ZTcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICAgRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgICBpZiAoYWN0aW9uUmVzdWx0KSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgICB9Ci0gICAgZWxzZSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBmYXZTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQ29uZmlybUpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQ29uZmlybUpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZWIxMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0NvbmZpcm1KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgIGlmIChjb25maXJtKCI8JT1jb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX0NPTkZJUk1fUkVTVE9SRV9ERUZBVUxUX0ZBVk9SSVRFUyIpJT4iKSkKLSAgICAgICAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbkpTUC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1NmUwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFiN2QyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVmMTE5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVNlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy9tYWtlIHN1cmUgdG8gcmVmcmVzaCBub2RlIHZpZXcKLWFjdGlvbi5zZXRUcmVlUmVmcmVzaE5lZWRlZCgpOwotCi0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJhMGNkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24KLVN3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3N3aXRjaHBlcnNwZWN0aXZlLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9hY3Rpb25zX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfYWN0aW9uc19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzc5YWJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9hY3Rpb25zX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRhaW5lci5qc3AiKSklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcwZTJhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuTkFWSUdBVE9SX1RPT0xCQVIlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX3Rvb2xiYXIuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRFTlQlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I4ZmMwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdHJlZXZpZXcuY3NzIikpJT4iPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3RyZWV2aWV3LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTwlCi0gICAgU3RyaW5nIHNlbGVjdGVkQW5jaG9yTmFtZSA9ICIiOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBpbnQgZm9jdXNlZE5vZGVJZCA9IG5vZGVNYW5hZ2VyLmdldEZvY3VzZWROb2RlSWQoKTsKLSAgICBTdHJpbmcgZm9jdXNlZEFuY2hvck5hbWUgPSBTdHJpbmcudmFsdWVPZihmb2N1c2VkTm9kZUlkKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkgewotICAgICAgICBzZWxlY3RlZEFuY2hvck5hbWUgPSBzZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotICAgICAgICBpZiAoZm9jdXNlZE5vZGVJZCA9PSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpCi0gICAgICAgICAgICBmb2N1c2VkQW5jaG9yTmFtZSA9IHNlbGVjdGVkQW5jaG9yTmFtZTsKLSAgICB9Ci0lPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBvbkxvYWQ9InNlbGYubG9jYXRpb24uaGFzaD0nIzwlPWZvY3VzZWRBbmNob3JOYW1lJT4nO3NldFNlbGVjdGVkQW5jaG9yTmFtZSgnPCU9c2VsZWN0ZWRBbmNob3JOYW1lJT4nKSIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRyZWVjb250ZW50Ym9yZGVyIj4KLSAgICA8JT1ub2RlTWFuYWdlci5yZW5kZXJUcmVlVmlldyhyZXNwb25zZSklPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2YmFlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+ICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoImZhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoRmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvZm9ybXMvUHJvY2Vzc0Zhdm9yaXRlc0ZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL25hdmlnYXRvci5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmIChmYXZQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgZWxzZQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX05BVklHQVRPUiIpJT48L3RkPgotPCUKLSAgIFN0cmluZyBhbHRSZXN0b3JlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1JFU1RPUkVfREVGQVVMVF9GQVZPUklURVMiKTsKLSAgIFN0cmluZyBhbHRSZW1vdmUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfUkVNT1ZFX0ZBVk9SSVRFIik7Ci0lPiAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQ29uZmlybUpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdFJlc3RvcmUlPiIgdGl0bGU9IjwlPWFsdFJlc3RvcmUlPiI+PC9hPjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRSZW1vdmUlPiIgdGl0bGU9IjwlPWFsdFJlbW92ZSU+Ij48L2E+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5MWM4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcGVyc3BlY3RpdmVfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX0NPTlRFTlQiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCBjb2xzPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+IiBiZ2NvbG9yPSNFQ0U5RDg+Ci0gIDwlCi0gIGlmIChvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5pc1JUTCgpKQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X2FjdGlvbnNfY29udGFpbmVyLmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X2FjdGlvbnNfY29udGFpbmVyLmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvZnJhbWVzZXQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlhNjEyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5QUk9QRVJUSUVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfdG9vbGJhci5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmOTU2YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPCUKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkVG9vbCAhPSBudWxsICYmIHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pIHsKLSAgICAgICAgJT4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICBsb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkVG9vbC5nZXRGb3JtTGluaygpKSklPiI7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fQUNUSU9OX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OT0RFX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcHJvcGVydGllc190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIxNDA5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcHJvcGVydGllc190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc2ZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoImZhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoRmF2b3JpdGVzRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9hY3Rpb25zLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKGZhdlBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICB7Ci0gICAgIGlmIChmYXZQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9BQ1RJT05TIiklPjwvdGQ+Ci08JQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZm9yKGludCBpPTA7IGk8dG9vbE1hbmFnZXIuZ2V0TnVtYmVyT2ZUb29scygpOyBpKyspIHsKLSAgICAgICAgICAgIFRvb2wgdG9vbCA9IChUb29sKXRvb2xNYW5hZ2VyLmdldFRvb2woaSk7Ci0gICAgICAgICAgICAlPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48JT10b29sLnJlbmRlclRvb2wocmVzcG9uc2UsY29udHJvbGxlciklPjwvdGQ+Ci0gICAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotJT4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE1ZmM1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX3Rvb2xiYXIuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdiNTVjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPHByZT4KLTwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuZ2V0TWVzc2FnZXNGcm9tTGlzdCgpKSU+Ci0gICAgICAgIDwvcHJlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UzYmI0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJmYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKEZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zdGF0dXMuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAoZmF2UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgIHsKLSAgICAgaWYgKGZhdlBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOyAgICAgICAKLSAgIH0KLSAgIGlmIChkb3VibGVDbGlja0NvbHVtblRpdGxlID09IG51bGwpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfU1RBVFVTIiklPjwvdGQ+Ci08JQotICAgU3RyaW5nIGFsdENsZWFyID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQ0xFQVIiKTsKLSU+ICAgICAgICAgICAKLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRFTlQlPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRDbGVhciU+IiB0aXRsZT0iPCU9YWx0Q2xlYXIlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGI0MTg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1Qcm9wZXJ0aWVzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgLy8gVGhlIHNlbGVjdGVkIG5vZGUgbXVzdCBiZSBhIEZhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZS4KLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgZm9ybVByb3BlcnRpZXMucHV0KCJmb3JtQWN0aW9uTGluayIsImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCIpOwotICAgZm9ybVByb3BlcnRpZXMucHV0KCJ3c2RsVVJMIix3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCkpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0ltcG9ydFdTRExBbmRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkzMjNkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbkxpbmsiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUFjdGlvbkxpbmsuYXBwZW5kKCJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcCIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUwYjZkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJQnVzaW5lc3NEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VERElfQlVTSU5FU1NfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9CVVNJTkVTU19ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KSB7Ci0gICAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTU19OQU1FIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWJ1c0VsZW1lbnQuZ2V0TmFtZSgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1idXNFbGVtZW50LmdldElucXVpcnlVUkwoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1NfS0VZIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NLZXkoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAgICAgCi0KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZDkzNGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VERElfUkVHSVNUUllfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9SRUdJU1RSWV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KSB7Ci0gICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAgICAgU3RyaW5nIHJlZ2lzdHJ5TmFtZSA9IHJlZ0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgICU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFR0lTVFJZX05BTUUiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9cmVnaXN0cnlOYW1lJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1yZWdFbGVtZW50LmdldElucXVpcnlVUkwoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpKQotICAgICB7Ci0lPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1wdWJsaXNoVVJMJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICAgIH0KLSAgIAotICAgICBTdHJpbmcgcmVnaXN0cnlVUkwgPSByZWdFbGVtZW50LmdldFJlZ2lzdHJhdGlvblVSTCgpOwotICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHJlZ2lzdHJ5VVJMKSkKLSAgICAgewotJT4KLSAgICAgICAgICAgIDxicj4KLSAgICAgICAgICAgIDx0YWJsZT4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFR0lTVFJZX1VSTCIscmVnaXN0cnlVUkwpJT4KLSAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KLTwlCi0gICAgICB9Ci0gICAgICAKLSAgICAgIFN0cmluZ0J1ZmZlciBjYXRlZ29yeURpcmVjdG9yeSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuZm9ybUNhdGVnb3JpZXNEaXJlY3RvcnkoY2F0ZWdvcnlEaXJlY3RvcnksY29udHJvbGxlci5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpLHJlZ2lzdHJ5TmFtZSk7Ci0gICAgICBGaWxlIGNhdGVnb3J5RGlyZWN0b3J5RmlsZSA9IG5ldyBGaWxlKGNhdGVnb3J5RGlyZWN0b3J5LnRvU3RyaW5nKCkpOwotICAgICAgU3RyaW5nW10gY2F0ZWdvcnlGaWxlcyA9IGNhdGVnb3J5RGlyZWN0b3J5RmlsZS5saXN0KCk7Ci0gICAgICBpZiAoY2F0ZWdvcnlGaWxlcyAhPSBudWxsKQotICAgICAgewotJT4KLTxicj4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFUyIpJT4KLSAgICA8L3RoPgotICA8L3RyPgotPCUgICAgICAKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0ZWdvcnlGaWxlcy5sZW5ndGg7aSsrKQotICAgICAgICB7Ci0lPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDwlPWNhdGVnb3J5RmlsZXNbaV0lPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08JSAgICAgICAgCi0gICAgICAgIH0KLSU+Ci08L3RhYmxlPgotPCUgICAgICAgIAotICAgICAgfSAgICAgIAotJT4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JSAgICAgIAotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNDNjNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VERElfU0VSVklDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VRERJX1NFUlZJQ0VfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KSB7Ci0gICAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCBzZXJFbGVtZW50ID0gKEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgJT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRV9OQU1FIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlckVsZW1lbnQuZ2V0TmFtZSgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1zZXJFbGVtZW50LmdldElucXVpcnlVUkwoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRV9LRVkiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VyRWxlbWVudC5nZXRTZXJ2aWNlS2V5KCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4gICAgICAgIAotCi0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVNlcnZpY2VJbnREZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJU2VydmljZUludERldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY4NDIzZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJU2VydmljZUludERldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCkgewotICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2VySW50RWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VySW50RWxlbWVudC5nZXROYW1lKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlckludEVsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VySW50RWxlbWVudC5nZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4gICAgICAgIAotCi0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MDhhMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkxMiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KSB7Ci0gICAgICAgIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICByZWdFbGVtZW50LnJlZnJlc2hNZXRhKCk7ICAgICAgCi0gICAgCi0gICAgICAgIFN0cmluZyB2ZXJzaW9uID0gcmVnRWxlbWVudC5nZXRWZXJzaW9uKCk7Ci0gICAgICAgIGlmICh2ZXJzaW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VERElfVkVSU0lPTiIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT12ZXJzaW9uJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotCi0gICAgICAgIDwlCi0gICAgICAgIExpc3QgbmFtZXMgPSByZWdFbGVtZW50LmdldE5hbWVzKCk7Ci0gICAgICAgIGlmIChuYW1lcyAhPSBudWxsICYmICFuYW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgd2lkdGg9IjEiIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MQU5HVUFHRSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFR0lTVFJZX05BTUUiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG5hbWVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKWl0Lm5leHQoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGxhbmcgPSBuYW1lLmdldExhbmcoKTsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9bGFuZyAhPSBudWxsID8gbGFuZyA6ICItLSIlPjwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT1uYW1lLmdldFZhbHVlKCklPjwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0KLSAgICAgICAgPCUKLSAgICAgICAgTGlzdCBkZXNjcyA9IHJlZ0VsZW1lbnQuZ2V0RGVzY3MoKTsKLSAgICAgICAgaWYgKGRlc2NzICE9IG51bGwgJiYgIWRlc2NzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAlPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiB3aWR0aD0iMSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xBTkdVQUdFIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQyIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZGVzY3MuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRGVzY3JpcHRpb24gZGVzYyA9IChEZXNjcmlwdGlvbilpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBsYW5nID0gZGVzYy5nZXRMYW5nKCk7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWxhbmcgIT0gbnVsbCA/IGxhbmcgOiAiLS0iJT48L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9ZGVzYy5nZXRWYWx1ZSgpJT48L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotCi0gICAgICAgIDwlCi0gICAgICAgIFN0cmluZyBkZWZhdWx0TG9naW4gPSByZWdFbGVtZW50LmdldERlZmF1bHRMb2dpbigpOwotICAgICAgICBpZiAoZGVmYXVsdExvZ2luICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVGQVVMVF9MT0dJTiIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1kZWZhdWx0TG9naW4lPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0KLSAgICAgICAgPCUKLSAgICAgICAgU3RyaW5nIGRlZmF1bHRQYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0RGVmYXVsdFBhc3N3b3JkKCk7Ci0gICAgICAgIGlmIChkZWZhdWx0UGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAlPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERUZBVUxUX1BBU1NXT1JEIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWRlZmF1bHRQYXNzd29yZCU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLQotICAgICAgICA8JQotICAgICAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgICAgICBpZiAoaW5xdWlyeVVSTCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWlucXVpcnlVUkwlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0KLSAgICAgPCUKLSAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoVVJMKSkKLSAgICAgewotICAgICAlPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1wdWJsaXNoVVJMJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgPCUKLSAgICAgfQotCi0gICAgIFN0cmluZyBzZWN1cmVJbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRTZWN1cmVJbnF1aXJ5VVJMKCk7Ci0gICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwoc2VjdXJlSW5xdWlyeVVSTCkpCi0gICAgIHsKLSAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VDVVJFX0lOUVVJUllfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlY3VyZUlucXVpcnlVUkwlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICA8JQotICAgICB9Ci0KLSAgICAgU3RyaW5nIHNlY3VyZVB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFNlY3VyZVB1Ymxpc2hVUkwoKTsKLSAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChzZWN1cmVQdWJsaXNoVVJMKSkKLSAgICAgewotICAgICAlPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRUNVUkVfUFVCTElTSF9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VjdXJlUHVibGlzaFVSTCU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgIDwlCi0gICAgIH0KLSAgICAgJT4KLSAgICAgCi0gICAgIDwlCi0gICAgIFRheG9ub215W10gdGF4b25vbWllcyA9IHJlZ0VsZW1lbnQuZ2V0VGF4b25vbWllcygpOwotICAgICBpZiAodGF4b25vbWllcyAhPSBudWxsICYmIHRheG9ub21pZXMubGVuZ3RoID4gMCkKLSAgICAgewotICAgICAlPgotICAgICAgIDxicj4KLSAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICA8dHI+Ci0gICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVEFYT05PTVkiKSU+Ci0gICAgICAgICAgIDwvdGg+Ci0gICAgICAgICA8L3RyPgotICAgICAgICAgPCUKLSAgICAgICAgIGZvciAoaW50IGk9MDsgaTx0YXhvbm9taWVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgewotICAgICAgICAgICBUYXhvbm9teSB0YXhvbm9teSA9IHRheG9ub21pZXNbaV07Ci0gICAgICAgICAlPgotICAgICAgICAgPHRyPgotICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPXRheG9ub215LmdldE5hbWUoKSU+PC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgICAgICA8JQotICAgICAgICAgfQotICAgICAgICAgJT4KLSAgICAgICA8L3RhYmxlPgotICAgICAgIDwlCi0gICAgIH0KLSAgICAgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlICAgICAgCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzV1NETERldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTRExEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDk1MzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzV1NETERldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NETF9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19XU0RMX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCkgewotICAgICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NkbEVsZW1lbnQuZ2V0V3NkbFVybCgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgICAgICAKLQotICAgIDwlCi0gICAgfQotICAgICU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTSUxEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0lMRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWUxYWQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTSUxEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLndzaWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NJTF9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19XU0lMX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTSUxFbGVtZW50KSB7Ci0gICAgICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IHdzaWxFbGVtZW50ID0gKEZhdm9yaXRlc1dTSUxFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAgICAgJT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxFbGVtZW50LmdldFdzaWxVcmwoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAgICAgCi0KLSAgICAgICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvUHJvY2Vzc0Zhdm9yaXRlc0ZyYW1lc2V0c0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvUHJvY2Vzc0Zhdm9yaXRlc0ZyYW1lc2V0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjlhNzFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChmb3JtQWN0aW9uLnRvU3RyaW5nKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuRlJBTUVfTkFNRSU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT1mb3JtRnJhbWVOYW1lJT4iPgotICA8aW5wdXQgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+Ij4KLTwvZm9ybT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b191ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b191ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjVkMTlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWEzZGRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NDE4NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MmI4Y2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmEwOTg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGE0Y2ViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQxZTM3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUxYjk3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTFlY2I1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzUxZGFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2UxMzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2OTg2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE1MzEyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfd3NkbF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjMDI4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfd3NkbF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4YzhlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX2J1c2luZXNzX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfYnVzaW5lc3Nfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZDZhNzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfYnVzaW5lc3Nfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9jYXRfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9jYXRfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZWMyODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfY2F0X25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI0M2NhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3NlcnZpY2VfaW50ZXJmYWNlX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9pbnRlcmZhY2Vfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzI1Y2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9pbnRlcmZhY2Vfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMwMjUyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYjg0NGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy93c2lsX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3dzaWxfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNTkxNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3dzaWxfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTVmZTk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBpc1NvbWV0aGluZ1NlbGVjdGVkKHRhYmxlQ29udGFpbmVySWQpIHsKLSAgICAgICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzOyBpPHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveENlbGwgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLml0ZW0oMCk7Ci0gICAgICAgICAgICB2YXIgcm93Q2hlY2tib3ggPSByb3dDaGVja2JveENlbGwuY2hpbGROb2Rlc1swXTsKLSAgICAgICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGFsZXJ0KCI8JT1jb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSU+Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQodGFibGVDb250YWluZXJJZCwgZm9ybSwgbG9jYXRpb24pIHsKLSAgICAgICAgaWYgKGlzU29tZXRoaW5nU2VsZWN0ZWQodGFibGVDb250YWluZXJJZCkpCi0gICAgICAgICAgICBzZXRMb2NhdGlvbkFuZFN1Ym1pdChmb3JtLCBsb2NhdGlvbik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0TG9jYXRpb25BbmRTdWJtaXQoZm9ybSwgbG9jYXRpb24pIHsKLSAgICAgICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICAgICAgewotICAgICAgICAgIGZvcm0uYWN0aW9uID0gbG9jYXRpb247Ci0gICAgICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgICAgfQotICAgIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NhNTg4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIGZhdk5hdmlnYXRvckNvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBmYXZOYXZpZ2F0b3JUb29sYmFyID0gZmF2TmF2aWdhdG9yQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfVE9PTEJBUiU+Il07Ci0gIHZhciBmYXZOYXZpZ2F0b3JDb250ZW50ID0gZmF2TmF2aWdhdG9yQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEVOVCU+Il07Ci0gIHZhciBmYXZBY3Rpb25zQ29udGFpbmVyID0gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyID0gZmF2QWN0aW9uc0NvbnRhaW5lci5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIlPiJdOwotICB2YXIgZmF2UHJvcGVydGllc1Rvb2xiYXIgPSBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5QUk9QRVJUSUVTX1RPT0xCQVIlPiJdOwotICB2YXIgZmF2UHJvcGVydGllc0NvbnRlbnQgPSBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRFTlQlPiJdOwotICB2YXIgZmF2U3RhdHVzQ29udGFpbmVyID0gZmF2QWN0aW9uc0NvbnRhaW5lci5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBmYXZTdGF0dXNUb29sYmFyID0gZmF2U3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5TVEFUVVNfVE9PTEJBUiU+Il07Ci0gIHZhciBmYXZTdGF0dXNDb250ZW50ID0gZmF2U3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEVOVCU+Il07Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NmFkMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0KLSAgICBmdW5jdGlvbiBmYXZIYW5kbGVDaGVja0FsbENsaWNrKHRhYmxlQ29udGFpbmVySWQsIGNoZWNrQWxsQ2hlY2tib3gpIHsKLSAgICAgICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzOyBpPHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveENlbGwgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLml0ZW0oMCk7Ci0gICAgICAgICAgICB2YXIgcm93Q2hlY2tib3ggPSByb3dDaGVja2JveENlbGwuY2hpbGROb2Rlc1swXTsKLSAgICAgICAgICAgIHJvd0NoZWNrYm94LmNoZWNrZWQgPSBjaGVja0FsbENoZWNrYm94LmNoZWNrZWQ7Ci0gICAgICAgICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkgewotICAgICAgICAgICAgICAgIGhpZ2hsaWdodFJvdyh0YWJsZS5yb3dzW2ldLCJyb3djb2xvciIpOwotICAgICAgICAgICAgICAgIHJvd0NoZWNrYm94Lm5hbWUgPSAiPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBoaWdobGlnaHRSb3codGFibGUucm93c1tpXSwidGFibGVjZWxscyIpOwotICAgICAgICAgICAgICAgIHJvd0NoZWNrYm94Lm5hbWUgPSAiIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ2hlY2tCb3hJbnB1dChjaGVja2JveCwgaXNDaGVja2VkKSB7Ci0gICAgICAgIGlmIChpc0NoZWNrZWQpIHsKLSAgICAgICAgICAgIGNoZWNrYm94Lm5hbWUgPSAiPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGVja2JveC5uYW1lID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgaGFuZGxlUm93Q2hlY2tib3hDbGljaygpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHR3aXN0SW5pdCh0YWJsZUNvbnRhaW5lcklkLHR3aXN0SW1hZ2VOYW1lKSB7Ci0gICAgICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID4gbnVtYmVyT2ZIZWFkZXJSb3dzKSB7Ci0gICAgICAgICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzZnJhbWVzZXRzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzZnJhbWVzZXRzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZiZTA5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc2ZyYW1lc2V0cy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpCi0gIHsKLSAgICByZXR1cm4gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+Il0uZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZyYW1lc2V0IikuaXRlbSgwKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NGcmFtZXNldFNpemVzKGZyYW1lc2V0U2l6ZXNGb3JtKQotICB7Ci0gICAgdG9nZ2xlRG91YmxlQ2xpY2tDb2x1bW5UaXRsZSgpOwotICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCA9IGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0KCk7Ci0gICAgdmFyIGFjdGlvbnNDb250YWluZXJGcmFtZXNldCA9IGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPi52YWx1ZSA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LmNvbHM7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPi52YWx1ZSA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5yb3dzOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLnN1Ym1pdCgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdjYWRjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSA9ICJkaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUgPSAieGRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9VRERJX0JVU0lORVNTX0xJU1QiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfQlVTSU5FU1MiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX0JVU0lORVNTX0RFU0MiKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudCkgewotICAgICU+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZBVk9SSVRFX1VERElfQlVTSU5FU1MiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImZhdkhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gKChGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIAlzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgCSAgfQotICAgICAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgZSA9IHNvcnRlZFZlY3Rvci5lbGVtZW50cygpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZmF2VURESUJ1c2luZXNzRWxlbWVudCA9IChGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJQnVzaW5lc3NFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESUJ1c2luZXNzRWxlbWVudCkuZ2V0Tm9kZUlkKCksIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1mYXZVRERJQnVzaW5lc3NFbGVtZW50LmdldE5hbWUoKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fVURESV9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRU1PVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0lPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5Vmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3ZWM2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSA9ICJkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUgPSAieGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9VRERJX1JFR0lTVFJZX0xJU1QiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfVURESV9SRUdJU1RSWSIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VERElfUkVHSVNUUllfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9SRUdJU1RSWSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iZmF2SGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSAoKEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxGYXZvcml0ZXMoKTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBlID0gc29ydGVkVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZVRERJUmVnaXN0cnlFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElSZWdpc3RyeUVsZW1lbnQpLmdldE5vZGVJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElSZWdpc3RyeUVsZW1lbnQpLmdldE5vZGVJZCgpLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9ZmF2VURESVJlZ2lzdHJ5RWxlbWVudC5nZXROYW1lKCklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1VERElfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVNT1ZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzNlYzE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSA9ICJkaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUiOwotICAgIFN0cmluZyB4ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlID0gInhkaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0xJU1QiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRSIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GQVZPUklURV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImZhdkhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSAoKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZmF2VURESVNlckludEVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJU2VySW50RWxlbWVudCkuZ2V0Tm9kZUlkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESVNlckludEVsZW1lbnQpLmdldE5vZGVJZCgpLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9ZmF2VURESVNlckludEVsZW1lbnQuZ2V0TmFtZSgpJT48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fVURESV9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFTU9WRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlVmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJU2VydmljZVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDA1NzVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSA9ICJkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUiOwotICAgIFN0cmluZyB4ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlID0gInhkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9VRERJX1NFUlZJQ0VfTElTVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRSIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZBVk9SSVRFX1VERElfU0VSVklDRSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJmYXZIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gKChGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxGYXZvcml0ZXMoKTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBlID0gc29ydGVkVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGZhdlVERElTZXJ2aWNlRWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElTZXJ2aWNlRWxlbWVudCkuZ2V0Tm9kZUlkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESVNlcnZpY2VFbGVtZW50KS5nZXROb2RlSWQoKSwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPWZhdlVERElTZXJ2aWNlRWxlbWVudC5nZXROYW1lKCklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVNT1ZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0lPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmQ4ZDgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSA9ICJkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUgPSAieGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0xJU1QiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWSIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZBVk9SSVRFX1VTRVJfREVGX1VERElfUkVHSVNUUlkiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImZhdkhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gKChGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZVRERJUmVnaXN0cnlFbGVtZW50ID0gKEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJUmVnaXN0cnlFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJUmVnaXN0cnlFbGVtZW50KS5nZXROb2RlSWQoKSwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPWZhdlVERElSZWdpc3RyeUVsZW1lbnQuZ2V0TmFtZSgpJT48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0lPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NmNjMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVXU0RMVGFibGUgPSAiZGl2RmF2b3JpdGVXU0RMVGFibGUiOwotICAgIFN0cmluZyB4ZGl2RmF2b3JpdGVXU0RMVGFibGUgPSAieGRpdkZhdm9yaXRlV1NETFRhYmxlIjsKLQotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfV1NETF9TRVJWSUNFX0xJU1QiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvbGlzdF9XU0RMX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9XU0RMX1NFUlZJQ0UiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9XU0RMX1NFUlZJQ0VfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZGYXZvcml0ZVdTRExUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlV1NETFRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2RmF2b3JpdGVXU0RMVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GQVZPUklURV9XU0RMIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2RmF2b3JpdGVXU0RMVGFibGUlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iZmF2SGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2RmF2b3JpdGVXU0RMVGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSAoKEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZmF2V1NETFNlcnZpY2VFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2V1NETFNlcnZpY2VFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZXU0RMU2VydmljZUVsZW1lbnQpLmdldE5vZGVJZCgpLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9ZmF2V1NETFNlcnZpY2VFbGVtZW50LmdldFdzZGxVcmwoKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZGYXZvcml0ZVdTRExUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlV1NETFRhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19XU0RMX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVdTRExUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRU1PVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlV1NETFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTSUxWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTSUxWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTExN2JlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0lMVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdkZhdm9yaXRlV1NJTFRhYmxlID0gImRpdkZhdm9yaXRlV1NJTFRhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlV1NJTFRhYmxlID0gInhkaXZGYXZvcml0ZVdTSUxUYWJsZSI7Ci0KLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1dTSUxfTElTVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1dTSUwiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9XU0lMX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZGYXZvcml0ZVdTSUxUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlV1NJTFRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2RmF2b3JpdGVXU0lMVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GQVZPUklURV9XU0lMIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2RmF2b3JpdGVXU0lMVGFibGUlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iZmF2SGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2RmF2b3JpdGVXU0lMVGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQgZmF2V1NJTEZvbGRlckVsZW1lbnQgPSAoRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9IGZhdldTSUxGb2xkZXJFbGVtZW50LmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgZmF2V1NJTEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NJTEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdldTSUxFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdldTSUxFbGVtZW50KS5nZXROb2RlSWQoKSwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPWZhdldTSUxFbGVtZW50LmdldFdzaWxVcmwoKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZGYXZvcml0ZVdTSUxUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlV1NJTFRhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1dTSUxfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlV1NJTFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRU1PVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlV1NJTFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotICAgICU+Ci0gICAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJmNTRjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybVByb3BlcnRpZXMiIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0lNUE9SVF9UT19XT1JLQkVOQ0giKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoKFN0cmluZylmb3JtUHJvcGVydGllcy5nZXQoImZvcm1BY3Rpb25MaW5rIikpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUlPiIgdmFsdWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfRklMRSU+Ij4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1dPUktCRU5DSF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZT4KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD00MCB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2VsZWN0X3dvcmtiZW5jaF9wcm9qZWN0X25hbWUiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiV09SS0JFTkNIX1BST0pFQ1RfTkFNRSIpJT48L2xhYmVsPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9NDAgdmFsaWduPSJjZW50ZXIiIG5vd3JhcD4KLSAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIElXb3Jrc3BhY2VSb290IGlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgICAgICAgICAgICBJUHJvamVjdFtdIHByb2plY3RzID0gaVdvcmtzcGFjZVJvb3QuZ2V0UHJvamVjdHMoKTsKLSAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuV09SS0JFTkNIX1BST0pFQ1RfTkFNRSU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RzW2ldLmlzT3BlbigpKSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gcHJvamVjdHNbaV0uZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9cHJvamVjdE5hbWUlPiI+PCU9cHJvamVjdE5hbWUlPgotICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ltcG9ydGVkX2ZpbGVfbmFtZSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJJTVBPUlRFRF9XU0RMX0ZJTEVfTkFNRSIpJT48L2xhYmVsPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIiB3aWR0aD0iNjAlIj4KLTwlCi0gICBTdHJpbmcgd3NkbEZpbGVOYW1lPSJ0ZW1wLndzZGwiOwotICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKWZvcm1Qcm9wZXJ0aWVzLmdldCgid3NkbFVSTCIpOwotICAgaWYgKHdzZGxVUkwgIT0gbnVsbCAmJiB3c2RsVVJMLmVuZHNXaXRoKCIud3NkbCIpKQotICAgewotICAgICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IE1hdGgubWF4KHdzZGxVUkwubGFzdEluZGV4T2YoIi8iKSx3c2RsVVJMLmxhc3RJbmRleE9mKCJcXCIpKTsKLSAgICAgaWYgKGxhc3RTZXBhcmF0b3JQb3MgPiAwKQotICAgICAgIHdzZGxGaWxlTmFtZSA9IHdzZGxVUkwuc3Vic3RyaW5nKGxhc3RTZXBhcmF0b3JQb3MrMSx3c2RsVVJMLmxlbmd0aCgpKTsKLSAgIH0KLSU+ICAgCi0gICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2ltcG9ydGVkX2ZpbGVfbmFtZSIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVEVEX0ZJTEVfTkFNRSU+IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2RsRmlsZU5hbWUpJT4iIHNpemU9NTAgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAKLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvSW1wb3J0V1NETEFuZFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9JbXBvcnRXU0RMQW5kV1NJTFRvV29ya2JlbmNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWE2NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9JbXBvcnRXU0RMQW5kV1NJTFRvV29ya2JlbmNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybVByb3BlcnRpZXMiIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHRvZ2dsZURpdkNvbnRhaW5lcihkaXZJZCkKLSAgewotICAgIHZhciBkaXZDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJZCk7Ci0gICAgaWYgKGRpdkNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICAgIGRpdkNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgZGl2Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gIH0KLTwvc2NyaXB0PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfSU1QT1JUX1RPX1dPUktCRU5DSCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KChTdHJpbmcpZm9ybVByb3BlcnRpZXMuZ2V0KCJmb3JtQWN0aW9uTGluayIpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0KLSAgPCUKLSAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2hpZ2hsaWdodGVkLmdpZiI7Ci0gIFN0cmluZyB0aXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSCIpOwotICAlPgotICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19XT1JLQkVOQ0hfREVTQyIpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9NDAgdmFsaWduPSJjZW50ZXIiPgotICAgICAgICA8bGFiZWwgZm9yPSJzZWxlY3Rfd29ya2JlbmNoX3Byb2plY3RfbmFtZSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJXT1JLQkVOQ0hfUFJPSkVDVF9OQU1FIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD00MCB2YWxpZ249ImNlbnRlciIgbm93cmFwPgotICAgICAgICA8JQotICAgICAgICBJV29ya3NwYWNlUm9vdCBpV29ya3NwYWNlUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBpV29ya3NwYWNlUm9vdC5nZXRQcm9qZWN0cygpOwotICAgICAgICAlPgotICAgICAgICA8c2VsZWN0IGlkPSJzZWxlY3Rfd29ya2JlbmNoX3Byb2plY3RfbmFtZSIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLldPUktCRU5DSF9QUk9KRUNUX05BTUUlPiIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICA8JQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmICghcHJvamVjdHNbaV0uaXNPcGVuKCkpCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gcHJvamVjdHNbaV0uZ2V0TmFtZSgpOwotICAgICAgICAlPgotICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1wcm9qZWN0TmFtZSU+Ij48JT1wcm9qZWN0TmFtZSU+Ci0gICAgICAgIDwlCi0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgICAgICAgfQotICAgICAgICAlPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLQotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQgaWQ9ImlucHV0X2ltcG9ydF93c2RsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUlPiIgdmFsdWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfRklMRSU+IiBvbkNsaWNrPSJ0b2dnbGVEaXZDb250YWluZXIoJ2Rpdl9pbXBvcnRfd3NkbCcpIj4KLSAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfaW1wb3J0X3dzZGwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTEFCRUxfSU1QT1JUX1dTREwiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPGRpdiBpZD0iZGl2X2ltcG9ydF93c2RsIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfaW1wb3J0ZWRfd3NkbF9maWxlX25hbWUiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiSU1QT1JURURfV1NETF9GSUxFX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iIHdpZHRoPSI2MCUiPgotPCUKLSBTdHJpbmcgd3NkbEZpbGVOYW1lPSJ0ZW1wLndzZGwiOwotIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylmb3JtUHJvcGVydGllcy5nZXQoIndzZGxVUkwiKTsKLSBpZiAod3NkbFVSTCAhPSBudWxsICYmIHdzZGxVUkwuZW5kc1dpdGgoIi53c2RsIikpCi0gewotICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBNYXRoLm1heCh3c2RsVVJMLmxhc3RJbmRleE9mKCIvIiksd3NkbFVSTC5sYXN0SW5kZXhPZigiXFwiKSk7Ci0gICBpZiAobGFzdFNlcGFyYXRvclBvcyA+IDApCi0gICAgIHdzZGxGaWxlTmFtZSA9IHdzZGxVUkwuc3Vic3RyaW5nKGxhc3RTZXBhcmF0b3JQb3MrMSx3c2RsVVJMLmxlbmd0aCgpKTsKLSB9Ci0lPiAgIAotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfaW1wb3J0ZWRfd3NkbF9maWxlX25hbWUiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NkbEZpbGVOYW1lKSU+IiBzaXplPTUwIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLQotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLQotICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JURURfV1NETF9VUkwlPiIgdmFsdWU9IjwlPXdzZGxVUkwlPiI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImlucHV0X2ltcG9ydF93c2lsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JUX1RPX1dTSUwlPiIgdmFsdWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfVE9fV1NJTCU+IiBvbkNsaWNrPSJ0b2dnbGVEaXZDb250YWluZXIoJ2Rpdl9pbXBvcnRfd3NpbCcpIj4KLSAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfaW1wb3J0X3dzaWwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTEFCRUxfSU1QT1JUX1RPX1dTSUwiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPGRpdiBpZD0iZGl2X2ltcG9ydF93c2lsIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfaW1wb3J0ZWRfd3NpbF9maWxlX25hbWUiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiV1NJTF9GSUxFX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iIHdpZHRoPSI2MCUiPgotPCUKLSBTdHJpbmcgd3NpbEZpbGVOYW1lID0gKFN0cmluZylmb3JtUHJvcGVydGllcy5nZXQoIndzaWxGaWxlTmFtZSIpOwotIGlmICh3c2lsRmlsZU5hbWUgPT0gbnVsbCB8fCB3c2lsRmlsZU5hbWUubGVuZ3RoKCkgPD0gMCkKLSAgIHdzaWxGaWxlTmFtZSA9IHdzZGxGaWxlTmFtZS5zdWJzdHJpbmcoMCwgd3NkbEZpbGVOYW1lLmxlbmd0aCgpLTQpICsgIndzaWwiOwotJT4gICAKLSAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2ltcG9ydGVkX3dzaWxfZmlsZV9uYW1lIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuV1NJTF9GSUxFX05BTUUlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NpbEZpbGVOYW1lKSU+IiBzaXplPTUwIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAKLSAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWYwNGU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlscyIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb25MaW5rIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0xBVU5DSF9XRUJTRVJWSUNFX1dJWkFSRCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGZvcm1BY3Rpb25MaW5rLnRvU3RyaW5nKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLQotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0hPT1NFX1dJWkFSRCIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb193c19jbGllbnRfd2l6YXJkIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9XSVpBUkQlPiIgY2hlY2tlZD10cnVlIHZhbHVlPSI8JT1TdHJpbmcudmFsdWVPZihBY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfQ0xJRU5UX1dJWkFSRCklPiI+PGxhYmVsIGZvcj0icmFkaW9fd3NfY2xpZW50X3dpemFyZCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1dFQl9TRVJWSUNFX0NMSUVOVF9XSVpBUkQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb193c19za2VsZXRvbl93aXphcmQiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1dJWkFSRCU+IiB2YWx1ZT0iPCU9U3RyaW5nLnZhbHVlT2YoQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1NLRUxFVE9OX1dJWkFSRCklPiI+PGxhYmVsIGZvcj0icmFkaW9fd3Nfc2tlbGV0b25fd2l6YXJkIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fV0VCX1NFUlZJQ0VfU0tFTEVUT05fV0laQVJEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgIAotICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvUHJveHlMb2FkQ29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL1Byb3h5TG9hZENvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDY2OTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvUHJveHlMb2FkQ29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLSAgIFN0cmluZ0J1ZmZlciB0YXJnZXRDb250ZW50TGluayA9IG5ldyBTdHJpbmdCdWZmZXIocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlRBUkdFVF9QQUdFKSk7Ci0gICBpZiAoc2Vzc2lvbklkICE9IG51bGwpCi0gICB7Ci0gICAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgICBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICAgIGlmICh0YXJnZXRDb250ZW50TGluay50b1N0cmluZygpLmluZGV4T2YoIj8iKSAhPSAtMSkKLSAgICAgICB0YXJnZXRDb250ZW50TGluay5hcHBlbmQoJyYnKTsKLSAgICAgZWxzZQotICAgICAgIHRhcmdldENvbnRlbnRMaW5rLmFwcGVuZCgnPycpOwotICAgICB0YXJnZXRDb250ZW50TGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICB9Ci0gICBlbHNlCi0gICAgIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlcilzZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgCi0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfUEFHRV9MT0FERVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gbG9hZENvbnRlbnQoKQotICB7Ci0gICAgdmFyIGZyYW1lc2V0ID0gcGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm94eVBhZ2UiKTsKLSAgICB2YXIgY29udGVudEZyYW1lID0gZnJhbWVzZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZyYW1lIikuaXRlbSgxKTsKLSAgICBjb250ZW50RnJhbWUuc3JjID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0YXJnZXRDb250ZW50TGluay50b1N0cmluZygpKSklPiI7ICAKLSAgfQotICAKLSAgZnVuY3Rpb24gaGFuZGxlQ29tcGxldGlvbigpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUiKS5pdGVtKDApOwotICAgIHZhciB0Qm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIGRvbmVSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBkb25lQ29sdW1uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICBkb25lQ29sdW1uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJQYWdlIGxvYWRlZC4iKSk7Ci0gICAgZG9uZVJvdy5hcHBlbmRDaGlsZChkb25lQ29sdW1uKTsKLSAgICB0Qm9keS5hcHBlbmRDaGlsZChkb25lUm93KTsgICAKLSAgfQotPC9zY3JpcHQ+ICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgbG9hZENvbnRlbnQoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9Qcm94eUxvYWRQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvUHJveHlMb2FkUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2MjQ2MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9Qcm94eUxvYWRQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubmV0LioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0gICBTdHJpbmdCdWZmZXIgbG9hZENvbnRlbnRMaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZm9ybXMvUHJveHlMb2FkQ29udGVudC5qc3A/Iik7Ci0gICBpZiAoc2Vzc2lvbklkICE9IG51bGwpCi0gICB7Ci0gICAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgICBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICAgIGxvYWRDb250ZW50TGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCkuYXBwZW5kKCcmJyk7Ci0gICB9Ci0gICBlbHNlCi0gICAgIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlcilzZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgbG9hZENvbnRlbnRMaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVEFSR0VUX1BBR0UpLmFwcGVuZCgnPScpLmFwcGVuZChVUkxVdGlscy5lbmNvZGUocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlRBUkdFVF9QQUdFKSkpOwotJT4KLTxmcmFtZXNldCBpZD0icHJveHlQYWdlIiByb3dzPSIxMDAlLCoiIGJvcmRlcj0wPgotICA8ZnJhbWUgc3JjPSI8JT1jb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChsb2FkQ29udGVudExpbmsudG9TdHJpbmcoKSklPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9QQUdFX0xPQURFUiIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBub3Jlc2l6ZT4KLSAgPGZyYW1lIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfUEFHRV9DT05URU5UIiklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG5vcmVzaXplPgotPC9mcmFtZXNldD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvY29weXJpZ2h0LmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvY29weXJpZ2h0LmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdmZGNlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL2NvcHlyaWdodC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9mb3JtaGVhZGVyLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZlNWIyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0aXRsZUltYWdlUGF0aCkpJT4iIGFsdD0iIj4KLSAgICAgIDxzdHJvbmc+PCU9dGl0bGUlPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiA8aW1nIGhlaWdodD0yIHdpZHRoPSIxMDAlIiBhbGlnbj0idG9wIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIj4gPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZTYxNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9vdGhlckFjdGlvbnMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci0KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IChUb29sTWFuYWdlciljdXJyZW50VG9vbE1hbmFnZXJIYXNoLmdldChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIpOwotICAgaW50IG51bWJlck9mVG9vbHMgPSBjdXJyZW50VG9vbE1hbmFnZXIuZ2V0TnVtYmVyT2ZUb29scygpOwotICAgaWYgKG51bWJlck9mVG9vbHMgPiAxKQotICAgewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPHN0cm9uZz48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9PVEhFUl9BQ1RJT05TIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiA8aW1nIGhlaWdodD0yIHdpZHRoPSIxMDAlIiBhbGlnbj0idG9wIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIj4gPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGU+Ci08JQotICAgICBmb3IgKGludCBpPTE7aTxudW1iZXJPZlRvb2xzO2krKykKLSAgICAgewotICAgICAgIFRvb2wgdCA9IGN1cnJlbnRUb29sTWFuYWdlci5nZXRUb29sKGkpOwotJT4KLSAgPHRyPgotICAgIDx0ZD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZihmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPXQuZ2V0U2VsZWN0VG9vbEFjdGlvblRhcmdldCgpJT4iPjwlPXQuZ2V0QWx0VGV4dCgpJT48L2E+PC90ZD4KLSAgPC90cj4KLTwlCi0gICAgIH0KLSU+Ci08L3RhYmxlPgotPCUKLSAgIH0KLSU+ICAgICAgIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGZlOGE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0dPIiklPiIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fUkVTRVQiKSU+IiBvbkNsaWNrPSJyZXNldEZvcm1JbnB1dHMoKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9hY3Rpb25zLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FjdGlvbnMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWFlZDdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FjdGlvbnMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWRkX3RvX3dzZGxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVjZTU2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVhZDY2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9iYWNrX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYmFja19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE0NjY3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9iYWNrX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYmFja19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9iYWNrX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZiNDE1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9iYWNrX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NhbGVuZGFyLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NhbGVuZGFyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUyODE3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jYWxlbmRhci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Nzk4NDgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmMxMGY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzMzMjczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGEyYmEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2Ly5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9wbGF5LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxN2MxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9yZWNvcmQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9yZWNvcmQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzAwNGY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfcmVjb3JkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc2F2ZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3NhdmUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTAwNDhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc2F2ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3N0b3AuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9zdG9wLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FlZTlhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3N0b3AuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2Ly5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9wbGF5LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg4ZmI3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9yZWNvcmQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9yZWNvcmQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmNjZmUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfcmVjb3JkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfc2F2ZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3NhdmUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmU3YjlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfc2F2ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3N0b3AuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9zdG9wLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRjMzY2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3N0b3AuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZXZpZXcxNi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZXZpZXcxNi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2V2aWV3MTYvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNjRiYzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZXZpZXcxNi9hY3Rpb25lbmdpbmUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2IwMjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTYyMjE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MDA0YmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NjViODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvbGRlcl9jbG9zZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9sZGVyX2Nsb3NlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTAyN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9sZGVyX2Nsb3NlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb2xkZXJfb3Blbi5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb2xkZXJfb3Blbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzIyZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9sZGVyX29wZW4uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9yd2FyZF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvcndhcmRfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMzE0MzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9yd2FyZF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvcndhcmRfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9yd2FyZF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZjhjM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9yd2FyZF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfZnNfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfZnNfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MGM3YTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X2ZzX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X2ZzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF9mc19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NmQzZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X2ZzX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjRhMDdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzgwODVhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2tleWxpbmUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMva2V5bGluZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlODA2OWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMva2V5bGluZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9sYXVuY2hfd3N3aXphcmRfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9sYXVuY2hfd3N3aXphcmRfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNThkYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMDk3ZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MWU1YjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lX2xhc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZV9sYXN0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwZWY4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lX2xhc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZV9ub3RsYXN0LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmVfbm90bGFzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOTJjZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZV9ub3RsYXN0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL21pbnVzX2xhc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbWludXNfbGFzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZWJiNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbWludXNfbGFzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9taW51c19ub3RsYXN0LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL21pbnVzX25vdGxhc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDY0MzFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL21pbnVzX25vdGxhc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbmF2aWdhdG9yLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL25hdmlnYXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YzA1NjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbmF2aWdhdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3BsdXNfbGFzdC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9wbHVzX2xhc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDBjODlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3BsdXNfbGFzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9wbHVzX25vdGxhc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcGx1c19ub3RsYXN0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU3YmQxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9wbHVzX25vdGxhc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZDVkMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOTA0MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yb290X21haW4uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcm9vdF9tYWluLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdhZGUwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yb290X21haW4uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvc3BhY2UuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvc3BhY2UuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODExOTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3NwYWNlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3N0YXR1cy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9zdGF0dXMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGEwMDFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3N0YXR1cy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90b3BfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90b3BfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNWJjOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdG9wX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdG9wX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3RvcF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MTY0NzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdG9wX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY0MzMxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90d2lzdGNsb3NlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90d2lzdG9wZW5lZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90d2lzdG9wZW5lZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMmM1ZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdHdpc3RvcGVuZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhY2FiM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZmMwYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2RsLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmI4NDRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMmFjZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOGVmYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmODhmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNiMzVhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvbGF1bmNoX29wdGlvbnNfcmVnaXN0cnkuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9sYXVuY2hfb3B0aW9uc19yZWdpc3RyeS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYzA3ODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9sYXVuY2hfb3B0aW9uc19yZWdpc3RyeS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUxNSAgIDEyODYwMiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuV1NFeHBsb3JlckNvbnRleHQsCi0gIGphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgamF2YS51dGlsLkhhc2h0YWJsZSwKLSAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHMiICU+Ci0KLTwlCi0gIHJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7IAotICBTdHJpbmcga2V5ID0gbnVsbDsKLSAgSGFzaHRhYmxlIG9wdGlvbnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIEVudW1lcmF0aW9uIHBhcmFtTmFtZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlck5hbWVzKCk7Ci0gIHdoaWxlIChwYXJhbU5hbWVzLmhhc01vcmVFbGVtZW50cygpKQotICB7Ci0gICAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpcGFyYW1OYW1lcy5uZXh0RWxlbWVudCgpOwotICAgIFN0cmluZ1tdIHBhcmFtVmFsdWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1OYW1lKTsKLSAgICBpZiAocGFyYW1WYWx1ZXMgIT0gbnVsbCAmJiBwYXJhbVZhbHVlcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGlmIChrZXkgPT0gbnVsbCAmJiBVUkxVdGlscy5kZWNvZGUocGFyYW1OYW1lKS5lcXVhbHMoV1NFeHBsb3JlckNvbnRleHQuSUQpKQotICAgICAgICBrZXkgPSBwYXJhbVZhbHVlc1swXTsKLSAgICAgIGVsc2UKLSAgICAgICAgb3B0aW9ucy5wdXQocGFyYW1OYW1lLCBwYXJhbVZhbHVlcyk7Ci0gICAgfQotICB9Ci0gIGlmIChrZXkgIT0gbnVsbCkKLSAgewotICAgIExhdW5jaE9wdGlvbnNNYW5hZ2VyIG1hbmFnZXIgPSBMYXVuY2hPcHRpb25zTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotICAgIG1hbmFnZXIubWFuYWdlKGtleSwgb3B0aW9ucywgYXBwbGljYXRpb24pOwotICB9Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYwNzQyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfQ09OVEVOVCIpJT48L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGVyc3BlY3RpdmVJZCgpLGZhbHNlKSkpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3BlcnNwZWN0aXZlX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQzMzQ3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3BlcnNwZWN0aXZlX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRW5naW5lIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1TdHJpbmdCdWZmZXIgaHJlZkFjdGlvbkVuZ2luZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLWhyZWZBY3Rpb25FbmdpbmUuYXBwZW5kKHJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiYWN0aW9uZW5naW5lX2NvbnRhaW5lci5qc3AiKSkpOwotaHJlZkFjdGlvbkVuZ2luZS5hcHBlbmQoIj8iKTsKLWhyZWZBY3Rpb25FbmdpbmUuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotaHJlZkFjdGlvbkVuZ2luZS5hcHBlbmQoIj0iKTsKLWhyZWZBY3Rpb25FbmdpbmUuYXBwZW5kKHNlc3Npb24uZ2V0SWQoKSk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBvcGVuQWN0aW9uRW5naW5lQ29udGFpbmVyKCkKLSAgICB7Ci0gICAgICB2YXIgbGluayA9ICI8JT1ocmVmQWN0aW9uRW5naW5lLnRvU3RyaW5nKCklPiI7Ci0gICAgICB2YXIgYWN0aW9uRW5naW5lQ29udGFpbmVyID0gd2luZG93Lm9wZW4obGluaywiYWN0aW9uRW5naW5lQ29udGFpbmVyIiwiaGVpZ2h0PTEwMCx3aWR0aD0zNTAsc3RhdHVzPXllcyxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzIik7Ci0gICAgICBpZiAoYWN0aW9uRW5naW5lQ29udGFpbmVyLmZvY3VzKQotICAgICAgICBhY3Rpb25FbmdpbmVDb250YWluZXIuZm9jdXMoKTsKLSAgICB9Ci0gIDwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iZ3Rvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9Imdsb2JhbHRvb2xiYXIiPgotPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJUSVRMRV9XU0VYUExPUkVSIiklPjwvdGQ+Ci0gICAgPCUKLSAgICBTdHJpbmcgYWx0SGlzdG9yeUJhY2sgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9CQUNLIik7Ci0gICAgU3RyaW5nIGFsdEhpc3RvcnlGb3J3YXJkID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRk9SV0FSRCIpOwotICAgIFN0cmluZyBhbHRBY3Rpb25FbmdpbmUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9BQ1RJT05fRU5HSU5FIik7Ci0gICAgU3RyaW5nIGFsdFVEREkgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9VRERJX1BFUlNQRUNUSVZFIik7Ci0gICAgU3RyaW5nIGFsdFdTSUwgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0lMX1BFUlNQRUNUSVZFIik7Ci0gICAgU3RyaW5nIGFsdFdTREwgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0RMX1BFUlNQRUNUSVZFIik7Ci0gICAgU3RyaW5nIGFsdEZhdm9yaXRlcyA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19QRVJTUEVDVElWRSIpOwotICAgICU+ICAgCi0gICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTE2IGhlaWdodD0yNj48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmV0cmlldmVIaXN0b3J5QWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLkpVTVBfQkFDSykpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBhbHQ9IjwlPWFsdEhpc3RvcnlCYWNrJT4iIHRpdGxlPSI8JT1hbHRIaXN0b3J5QmFjayU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2JhY2tfZW5hYmxlZC5naWYiKSklPiIgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYmFja19oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpOyIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9iYWNrX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9iYWNrX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9iYWNrX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiPjwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0idGV4dCIgbm93cmFwIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZXRyaWV2ZUhpc3RvcnlBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuSlVNUF9GT1JXQVJEKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIGFsdD0iPCU9YWx0SGlzdG9yeUZvcndhcmQlPiIgdGl0bGU9IjwlPWFsdEhpc3RvcnlGb3J3YXJkJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZm9yd2FyZF9lbmFibGVkLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mb3J3YXJkX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcyk7IiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2ZvcndhcmRfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2ZvcndhcmRfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2ZvcndhcmRfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSI+PC9hPjwvdGQ+Ci0gICAgPCUKLSAgICBBY3Rpb25FbmdpbmUgYWN0aW9uRW5naW5lID0gY29udHJvbGxlci5nZXRBY3Rpb25FbmdpbmUoKTsKLSAgICBpZiAoYWN0aW9uRW5naW5lICE9IG51bGwgJiYgYWN0aW9uRW5naW5lLmdldE1vZGUoKSAhPSBBY3Rpb25FbmdpbmUuTU9ERV9ESVNBQkxFRCkKLSAgICB7Ci0gICAgJT4KLSAgICAgIDx0ZCBjbGFzcz0idGV4dCIgbm93cmFwIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgaGVpZ2h0PTI1PjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbkFjdGlvbkVuZ2luZUNvbnRhaW5lcigpIj48aW1nIGNsYXNzPSJub3JtYWwiIGFsdD0iPCU9YWx0QWN0aW9uRW5naW5lJT4iIHRpdGxlPSI8JT1hbHRBY3Rpb25FbmdpbmUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYiKSklPiIgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZXZpZXcxNi9hY3Rpb25lbmdpbmUuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKTsiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZXZpZXcxNi9hY3Rpb25lbmdpbmUuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZXZpZXcxNi9hY3Rpb25lbmdpbmUuZ2lmIikpJT4nO21vdXNldXAodGhpcykiPjwvYT48L3RkPgotICAgIDwlCi0gICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIGFsdD0iPCU9YWx0VURESSU+IiB0aXRsZT0iPCU9YWx0VURESSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPiIgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpOyIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiPjwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0idGV4dCIgbm93cmFwIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTCxmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBhbHQ9IjwlPWFsdFdTSUwlPiIgdGl0bGU9IjwlPWFsdFdTSUwlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4iIG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKTsiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIj48L2E+PC90ZD4KLSAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwsZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRXU0RMJT4iIHRpdGxlPSI8JT1hbHRXU0RMJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcyk7IiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSI+PC9hPjwvdGQ+ICAgIAotICAgIDx0ZCBjbGFzcz0idGV4dCIgbm93cmFwIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfRkFWT1JJVEVTLGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIGFsdD0iPCU9YWx0RmF2b3JpdGVzJT4iIHRpdGxlPSI8JT1hbHRGYXZvcml0ZXMlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPiIgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcyk7IiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSI+PC9hPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiODEzNTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotLy8gYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0vLyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLS8vIAotLy8gQ29udHJpYnV0b3JzOgotLy8gICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotLy8KLQotZnVuY3Rpb24gaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkKLXsKLSAgcmV0dXJuIG5hdmlnYXRvci5hcHBOYW1lID09ICJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2NhbGVuZGFyYnJvd3Nlci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvY2FsZW5kYXJicm93c2VyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzliOWNhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvY2FsZW5kYXJicm93c2VyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSBzZXNzaW9uLmdldElkKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBjYWxlbmRhckJyb3dzZXI7Ci0gIHZhciBjYWxlbmRhckJyb3dzZXJDbG9zZWQgPSB0cnVlOwotICB2YXIgY2FsZW5kYXJUYXJnZXRSb3cgPSAtMTsKLSAgdmFyIGNhbGVuZGFyVGFyZ2V0OwotCi0gIGZ1bmN0aW9uIG9wZW5DYWxlbmRhckJyb3dzZXIodHlwZSxmb3JtQ29udGFpbmVySWQsZWxlbWVudE5hbWUsaW5kZXgpCi0gIHsKLSAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1Db250YWluZXJJZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHZhciBlbGVtZW50cyA9IGZvcm0uZWxlbWVudHNbZWxlbWVudE5hbWVdOwotICAgIGlmIChpbmRleCA9PSAwICYmIGVsZW1lbnRzLmxlbmd0aCA9PSB1bmRlZmluZWQpCi08JQotICAgLy8gT25seSBvbmUgZWxlbWVudC4KLSU+Ci0gICAgICBjYWxlbmRhclRhcmdldCA9IGVsZW1lbnRzOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjYWxlbmRhclRhcmdldFJvdyA9IGluZGV4OwotICAgICAgY2FsZW5kYXJUYXJnZXQgPSBlbGVtZW50cy5pdGVtKGluZGV4KTsKLSAgICB9Ci0gICAgdmFyIGxpbms7Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURSU+OgotICAgICAgICBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JEYXRlKHNlc3Npb25JZCkpKSU+IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FJT46Ci0gICAgICAgIGxpbmsgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvckRhdGVUaW1lKHNlc3Npb25JZCkpKSU+IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dZRUFSTU9OVEglPjoKLSAgICAgICAgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhbGVuZGFyQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yR1llYXJNb250aChzZXNzaW9uSWQpKSklPiI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HREFZJT46Ci0gICAgICAgIGxpbmsgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvckdEYXkoc2Vzc2lvbklkKSkpJT4iOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR01PTlRIREFZJT46Ci0gICAgICAgIGxpbmsgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvckdNb250aERheShzZXNzaW9uSWQpKSklPiI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYWxlbmRhckJyb3dzZXIgPSB3aW5kb3cub3BlbihsaW5rLCJjYWxlbmRhckJyb3dzZXIiLCJoZWlnaHQ9MzUwLHdpZHRoPTI2NCxzdGF0dXM9eWVzLHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJsZT15ZXMiKTsKLSAgICBpZiAoY2FsZW5kYXJCcm93c2VyLmZvY3VzKQotICAgICAgY2FsZW5kYXJCcm93c2VyLmZvY3VzKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBjbG9zZUNhbGVuZGFyQnJvd3NlcigpCi0gIHsKLSAgICBpZiAoIWNhbGVuZGFyQnJvd3NlckNsb3NlZCkKLSAgICAgIGNhbGVuZGFyQnJvd3Nlci5jbG9zZSgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IzYjRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHJlcXVlc3RTdWJtaXR0ZWQgPSBmYWxzZTsKLQotICBmdW5jdGlvbiBoYW5kbGVTdWJtaXQoZm9ybSkKLSAgewotICAgIGlmIChyZXF1ZXN0U3VibWl0dGVkKQotICAgIHsKLSAgICAgIGFsZXJ0KCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfU1VCTUlUX0lOX1BST0dSRVNTIikpJT4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmVxdWVzdFN1Ym1pdHRlZCA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiByZXNldFN1Ym1pc3Npb24oKQotICB7Ci0gICAgcmVxdWVzdFN1Ym1pdHRlZCA9IGZhbHNlOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Zvcm11dGlscy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZWM4MDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Zvcm11dGlscy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICA8JS8vIFJlcXVpcmVzIGJyb3dzZXJkZXRlY3QuanMlPgotICBmdW5jdGlvbiBjcmVhdGVIaWRkZW5FbGVtZW50KGVsZW1lbnROYW1lLHZhbHVlKQotICB7Ci0gICAgdmFyIGhpZGRlbklucHV0OwotICAgIGlmIChlbGVtZW50TmFtZS5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgICAgICAgaGlkZGVuSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCI8aW5wdXQgbmFtZT0nIitlbGVtZW50TmFtZSsiJz4iKTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaGlkZGVuSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgICBoaWRkZW5JbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLGVsZW1lbnROYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgaGlkZGVuSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGhpZGRlbklucHV0LnR5cGUgPSAiaGlkZGVuIjsKLSAgICBoaWRkZW5JbnB1dC52YWx1ZSA9IHZhbHVlOwotICAgIHJldHVybiBoaWRkZW5JbnB1dDsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlc2V0Rm9ybUlucHV0cygpCi0gIHsKLSAgICBkb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvcGFuZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3BhbmVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE2OWMyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvcGFuZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBwZXJzcGVjdGl2ZVdvcmtBcmVhID0gdG9wLmZyYW1lc1siPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Il07Ci0gIHZhciBwZXJzcGVjdGl2ZVRvb2xiYXIgPSB0b3AuZnJhbWVzWyI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1RPT0xCQVIlPiJdOwotICB2YXIgcGVyc3BlY3RpdmVDb250ZW50ID0gdG9wLmZyYW1lc1siPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9DT05URU5UJT4iXTsKLQotICBmdW5jdGlvbiBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpCi0gIHsKLSAgICByZXR1cm4gcGVyc3BlY3RpdmVDb250ZW50LmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmcmFtZXNldCIpLml0ZW0oMCk7Ci0gIH0KLQotICBmdW5jdGlvbiB0b2dnbGVEb3VibGVDbGlja0NvbHVtblRpdGxlKCkKLSAgewotICAgIHZhciBkb3VibGVDbGlja0NvbHVtbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkb3VibGVjbGlja2NvbHVtbiIpOwotICAgIGlmIChkb3VibGVDbGlja0NvbHVtbiA9PSBudWxsKQotICAgICAgcmV0dXJuOwotPCUKLSAgIFN0cmluZyBqc0FsdFJlc3RvcmUgPSBIVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKSk7Ci0lPgotICAgIGlmIChkb3VibGVDbGlja0NvbHVtbi50aXRsZSA9PSAiPCU9anNBbHRSZXN0b3JlJT4iKQotICAgICAgZG91YmxlQ2xpY2tDb2x1bW4udGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpKSU+IjsKLSAgICBlbHNlCi0gICAgICBkb3VibGVDbGlja0NvbHVtbi50aXRsZSA9ICI8JT1qc0FsdFJlc3RvcmUlPiI7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlMTU0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0vLyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotLy8gCi0vLyBDb250cmlidXRvcnM6Ci0vLyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0vLwotCi1mdW5jdGlvbiByZXN1bWVQcm94eUxvYWRQYWdlKCkKLXsKLSAgdmFyIHByb3h5UGFnZSA9IHBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJveHlQYWdlIik7Ci0gIHByb3h5UGFnZS5zZXRBdHRyaWJ1dGUoInJvd3MiLCAiMCwxMDAlIik7Ci0gIHBhcmVudC5mcmFtZXNbMF0uaGFuZGxlQ29tcGxldGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3N3aXRjaHBlcnNwZWN0aXZlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9zd2l0Y2hwZXJzcGVjdGl2ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYWMxOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3N3aXRjaHBlcnNwZWN0aXZlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotCi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy90YWJsZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3RhYmxlcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YTI0ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3RhYmxlcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBudW1iZXJPZkhlYWRlclJvd3MgPSAxOwotICBmdW5jdGlvbiBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHJldHVybiBjb250YWluZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIikuaXRlbSgwKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldFNlbGVjdChzZWxlY3QsdmFsdWUpCi0gIHsKLSAgICBmb3IgKHZhciBpPTA7aTxzZWxlY3Qub3B0aW9ucy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChzZWxlY3Qub3B0aW9uc1tpXS52YWx1ZSA9PSB2YWx1ZSkKLSAgICAgIHsKLSAgICAgICAgc2VsZWN0LnNlbGVjdGVkSW5kZXggPSBpOwotICAgICAgICByZXR1cm4gc2VsZWN0Lm9wdGlvbnNbaV0udGV4dDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgewotICAgICAgICB0YWJsZS5kZWxldGVSb3coaSk7Ci0gICAgICAgIGktLTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdmFyIGNoZWNrQWxsQ2hlY2tib3hSb3cgPSB0YWJsZS5yb3dzWzBdOwotICAgIHZhciBjaGVja0FsbENoZWNrYm94ID0gY2hlY2tBbGxDaGVja2JveFJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgIGlmIChjaGVja0FsbENoZWNrYm94LmNoZWNrZWQpCi0gICAgICBjaGVja0FsbENoZWNrYm94LmNoZWNrZWQgPSBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGhhbmRsZVJvd0NoZWNrYm94Q2xpY2soZSkKLSAgewotICAgIHZhciBjaGVja2JveDsKLSAgICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gICAgICBjaGVja2JveCA9IGV2ZW50LnNyY0VsZW1lbnQ7Ci0gICAgZWxzZQotICAgICAgY2hlY2tib3ggPSBlLnRhcmdldDsKLSAgICB2YXIgY2VsbCA9IGNoZWNrYm94LnBhcmVudE5vZGU7Ci0gICAgdmFyIHJvdyA9IGNlbGwucGFyZW50Tm9kZTsKLSAgICBpZiAoY2hlY2tib3guY2hlY2tlZCkKLSAgICAgIGhpZ2hsaWdodFJvdyhyb3csInJvd2NvbG9yIik7Ci0gICAgZWxzZQotICAgICAgaGlnaGxpZ2h0Um93KHJvdywidGFibGVjZWxscyIpOwotCi0gICAgdmFyIHRib2R5ID0gcm93LnBhcmVudE5vZGU7Ci0gICAgdmFyIHRhYmxlID0gdGJvZHkucGFyZW50Tm9kZTsKLSAgICB2YXIgY2hlY2tBbGxDaGVja2JveCA9IHRhYmxlLnJvd3NbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICBpZiAoY2hlY2tBbGxDaGVja2JveC5jaGVja2VkKQotICAgICAgY2hlY2tBbGxDaGVja2JveC5jaGVja2VkID0gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBjcmVhdGVSb3dDaGVja2JveCgpCi0gIHsKLSAgICB2YXIgcm93Q2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIHJvd0NoZWNrYm94LnNldEF0dHJpYnV0ZSgibmFtZSIscm93Q2hlY2tib3hOYW1lKTsKLSAgICByb3dDaGVja2JveC50eXBlID0gImNoZWNrYm94IjsKLSAgICByb3dDaGVja2JveC50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSklPiI7Ci0gICAgcm93Q2hlY2tib3gub25jbGljayA9IGhhbmRsZVJvd0NoZWNrYm94Q2xpY2s7Ci0gICAgcmV0dXJuIHJvd0NoZWNrYm94OwotICB9Ci0KLSAgZnVuY3Rpb24gaGFuZGxlQ2hlY2tBbGxDbGljayh0YWJsZUNvbnRhaW5lcklkLGNoZWNrQWxsQ2hlY2tib3gpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3hDZWxsID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKS5pdGVtKDApOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gcm93Q2hlY2tib3hDZWxsLmNoaWxkTm9kZXNbMF07Ci0gICAgICByb3dDaGVja2JveC5jaGVja2VkID0gY2hlY2tBbGxDaGVja2JveC5jaGVja2VkOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGhpZ2hsaWdodFJvdyh0YWJsZS5yb3dzW2ldLCJyb3djb2xvciIpOwotICAgICAgZWxzZQotICAgICAgICBoaWdobGlnaHRSb3codGFibGUucm93c1tpXSwidGFibGVjZWxscyIpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGhpZ2hsaWdodFJvdyhyb3csY2xhc3NOYW1lKQotICB7Ci0gICAgdmFyIHJvd0NvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgZm9yICh2YXIgaT0xO2k8cm93Q29sdW1ucy5sZW5ndGg7aSsrKQotICAgICAgcm93Q29sdW1ucy5pdGVtKGkpLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGhpZ2hsaWdodEVycmFudFJvdyhyb3csY2xhc3NOYW1lKQotICB7Ci0gICAgdmFyIHJvd0NvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSByb3dDb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjBDb250cm9sID0gY29sdW1uMC5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBzdGFydDsKLSAgICBpZiAoY29sdW1uMENvbnRyb2wudHlwZSA9PSAiY2hlY2tib3giKQotICAgIHsKLSAgICAgIGNvbHVtbjBDb250cm9sLmNoZWNrZWQgPSB0cnVlOwotICAgICAgcm93Q29sdW1ucy5pdGVtKDEpLmNsYXNzTmFtZSA9ICJmaXJzdGNvbHVtbmVycmFudHJvd2NvbG9yIjsKLSAgICAgIHN0YXJ0ID0gMjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImZpcnN0Y29sdW1uZXJyYW50cm93Y29sb3IiOwotICAgICAgc3RhcnQgPSAxOwotICAgIH0KLSAgICByb3dDb2x1bW5zLml0ZW0ocm93Q29sdW1ucy5sZW5ndGgtMSkuY2xhc3NOYW1lID0gImxhc3Rjb2x1bW5lcnJhbnRyb3djb2xvciI7Ci0gICAgZm9yICh2YXIgaT1zdGFydDtpPHJvd0NvbHVtbnMubGVuZ3RoLTE7aSsrKQotICAgICAgcm93Q29sdW1ucy5pdGVtKGkpLmNsYXNzTmFtZSA9ICJtaWRkbGVlcnJhbnRyb3djb2xvciI7Ci0gIH0KLQotICBmdW5jdGlvbiB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLHR3aXN0SW1hZ2VOYW1lKQotICB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHR3aXN0SW1hZ2UgPSBkb2N1bWVudC5pbWFnZXNbdHdpc3RJbWFnZU5hbWVdOwotICAgIGlmICh0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICB7Ci0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICB0d2lzdEltYWdlLnNyYyA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiI7Ci0gICAgICB0d2lzdEltYWdlLmFsdCA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIikpJT4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAgIHR3aXN0SW1hZ2Uuc3JjID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IjsKLSAgICAgIHR3aXN0SW1hZ2UuYWx0ID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSklPiI7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJZCkuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpCi0gICAgICB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLCJ4Iit0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGlucHV0VmFsdWUpCi0gIHsKLSAgICBpZiAoaW5wdXRWYWx1ZSA9PSBudWxsIHx8IGlucHV0VmFsdWUubGVuZ3RoIDwgMSkKLSAgICAgIHJldHVybiAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKSklPiI7Ci0gICAgcmV0dXJuIGlucHV0VmFsdWU7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3Rvb2xiYXIuanMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdG9vbGJhci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFiMWIyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdG9vbGJhci5qcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0vLyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotLy8gCi0vLyBDb250cmlidXRvcnM6Ci0vLyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0vLwotCi1mdW5jdGlvbiBtb3VzZW92ZXIoaW1nKQotewotICBpbWcuY2xhc3NOYW1lID0gImhvdmVyIjsKLX0KLQotZnVuY3Rpb24gbW91c2VvdXQoaW1nKQotewotICBpbWcuY2xhc3NOYW1lID0gIm5vcm1hbCI7Ci19Ci0KLWZ1bmN0aW9uIG1vdXNlZG93bihpbWcpCi17Ci0gIGltZy5jbGFzc05hbWUgPSAiZG93biI7Ci19Ci0KLWZ1bmN0aW9uIG1vdXNldXAoaW1nKQotewotICByZXR1cm4gbW91c2VvdXQoaW1nKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdHJlZXZpZXcuanMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdHJlZXZpZXcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlODQzZmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3RyZWV2aWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLS8vIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAKLS8vIENvbnRyaWJ1dG9yczoKLS8vICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLS8vCi0KLS8vIFJlcXVpcmVzIGJyb3dzZXJkZXRlY3QuanMKLQotdmFyIHNlbGVjdGVkQW5jaG9yTmFtZSA9ICIiOwotCi1mdW5jdGlvbiBzZXRTZWxlY3RlZEFuY2hvck5hbWUoYW5jaG9yTmFtZSkKLXsKLSAgc2VsZWN0ZWRBbmNob3JOYW1lID0gYW5jaG9yTmFtZTsKLX0KLQotZnVuY3Rpb24gc2VsZWN0Tm9kZShhbmNob3JOYW1lLG9wZW5JbWFnZVBhdGgpCi17Ci0gIHZhciBpc0lFID0gaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCk7Ci0gIGlmIChzZWxlY3RlZEFuY2hvck5hbWUubGVuZ3RoID4gMCkKLSAgewotICAgIHZhciBzZWxlY3RlZEFuY2hvcjsKLSAgICBpZiAoaXNJRSkKLSAgICAgIHNlbGVjdGVkQW5jaG9yID0gZG9jdW1lbnQuYW5jaG9ycyhzZWxlY3RlZEFuY2hvck5hbWUpOwotICAgIGVsc2UKLSAgICAgIHNlbGVjdGVkQW5jaG9yID0gZG9jdW1lbnQuYW5jaG9yc1tzZWxlY3RlZEFuY2hvck5hbWVdOwotICAgIGlmIChzZWxlY3RlZEFuY2hvcikKLSAgICAgIHNlbGVjdGVkQW5jaG9yLmNsYXNzTmFtZSA9ICJ1bnNlbGVjdGVkVGV4dEFuY2hvciI7Ci0gIH0KLSAgaWYgKGFuY2hvck5hbWUuaW5kZXhPZigiLTEiKSA9PSAtMSkKLSAgewotICAgIGlmIChpc0lFKQotICAgICAgZG9jdW1lbnQuYW5jaG9ycyhhbmNob3JOYW1lKS5jbGFzc05hbWUgPSAic2VsZWN0ZWRUZXh0QW5jaG9yIjsKLSAgICBlbHNlCi0gICAgICBkb2N1bWVudC5hbmNob3JzW2FuY2hvck5hbWVdLmNsYXNzTmFtZSA9ICJzZWxlY3RlZFRleHRBbmNob3IiOwotICAgIHNldFNlbGVjdGVkQW5jaG9yTmFtZShhbmNob3JOYW1lKTsKLSAgICBhbHRlckltYWdlKGFuY2hvck5hbWUsb3BlbkltYWdlUGF0aCk7Ci0gIH0KLSAgZWxzZQotICAgIHNldFNlbGVjdGVkQW5jaG9yTmFtZSgiIik7Ci19Ci0KLWZ1bmN0aW9uIGFsdGVySW1hZ2UoaW1hZ2VOYW1lLGltYWdlUGF0aCkKLXsKLSAgZG9jdW1lbnQuaW1hZ2VzW2ltYWdlTmFtZV0uc3JjID0gaW1hZ2VQYXRoOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3dzZGxicm93c2VyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy93c2RsYnJvd3Nlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNDVhN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3dzZGxicm93c2VyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSBzZXNzaW9uLmdldElkKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciB3c2RsV2luZG93OwotICB2YXIgd3NkbFdpbmRvd0Nsb3NlZCA9IHRydWU7Ci0gIHZhciB0YXJnZXRXU0RMVVJMRWxlbWVudDsKLSAgZnVuY3Rpb24gb3BlbldTRExCcm93c2VyKGZvcm1Db250YWluZXJJZCx0eXBlKQotICB7Ci0gICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtQ29udGFpbmVySWQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICB0YXJnZXRXU0RMVVJMRWxlbWVudCA9IGZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT47Ci0gICAgdmFyIGxpbms7Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT46Ci0gICAgICAgIGxpbmsgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5XU0RMQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yU2VydmljZShzZXNzaW9uSWQpKSklPiI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFJT46Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuV1NETEJyb3dzZXJBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvclNlcnZpY2VJbnRlcmZhY2Uoc2Vzc2lvbklkKSkpJT4iOwotICAgIH0KLSAgICB3c2RsV2luZG93ID0gd2luZG93Lm9wZW4obGluaywid3NkbFdpbmRvdyIsImhlaWdodD0zMDAsd2lkdGg9NDUwLHN0YXR1cz15ZXMsc2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyIpOwotICAgIGlmICh3c2RsV2luZG93LmZvY3VzKQotICAgICAgd3NkbFdpbmRvdy5mb2N1cygpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xvc2VXU0RMQnJvd3NlcigpCi0gIHsKLSAgICBpZiAoIXdzZGxXaW5kb3dDbG9zZWQpCi0gICAgICB3c2RsV2luZG93LmNsb3NlKCk7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0FkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZTBmMzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBBZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0FkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTlhNGZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0FkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBhY3Rpb24gPSBuZXcgQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKGlucHV0c1ZhbGlkKQotICAgewotICAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgfQotJT4KLQotICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICA8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWY3YjRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uIiU+Ci0KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIEFkZFRvRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2ZjJmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uCi0gICBCdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBCdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg3ZWYwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIEJ1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uIGFjdGlvbiA9IG5ldyBCdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzaW5lc3NHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VlNWQyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBCdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBCdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBib29sZWFuIGJ1c2luZXNzRXhpc3RzID0gYWN0aW9uLnZhbGlkYXRlQnVzaW5lc3MoKTsKLQotICAgaWYgKCFidXNpbmVzc0V4aXN0cykKLSAgIHsKLSAgICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykoYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpKTsKLSAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfQlVTSU5FU1NfTk9ERSIpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZDFlNDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiU+Ci0KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij4KLTwlCi1FbnVtZXJhdGlvbiBwYXJhbU5hbWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOwotd2hpbGUgKHBhcmFtTmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpcGFyYW1OYW1lcy5uZXh0RWxlbWVudCgpOwotICBTdHJpbmdbXSBwYXJhbVZhbHVlcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtTmFtZSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1WYWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9cGFyYW1OYW1lJT4iIHZhbHVlPSI8JT1wYXJhbVZhbHVlc1tpXSU+Ij4KLTwlCi0gIH0KLX0KLSU+Ci08L2Zvcm0+Ci08L2JvZHk+Ci08L2h0bWw+Ci0KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1BZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgQWRkVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci1pZiAoYWN0aW9uLmZhdm9yaXRlRXhpc3RzKCkpIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fT1ZFUldSSVRFX0ZBVk9SSVRFUyIpKSU+IikpCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWRlYzQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uIGFjdGlvbjsKLSAgIGlmIChzZWxlY3RlZE5vZGUgaW5zdGFuY2VvZiBGb2xkZXJOb2RlKQotICAgICBhY3Rpb24gPSBuZXcgQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgZWxzZQotICAgICBhY3Rpb24gPSBuZXcgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBUaGUgYWN0aW9uIG1heSBiZSBleGVjdXRlZCBwcm9ncmFtbWVkIGxpbmsuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgIAotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNzdjYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbiBhY3Rpb24gPSBuZXcgQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzE1NzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIENvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBhY3Rpb24gPSBuZXcgQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoaW5wdXRzVmFsaWQpCi0gICB7Ci0gICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICB9Ci0lPgotCi0gICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgIDwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzYmZlZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gYWN0aW9uLmdldFN1YlF1ZXJ5S2V5KCk7Ci0gICBTdHJpbmdCdWZmZXIgbmV3U3ViUXVlcnlLZXkgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICBpZiAoc3ViUXVlcnlLZXkgIT0gbnVsbCAmJiBzdWJRdWVyeUtleS5sZW5ndGgoKSA+IDApCi0gICAgIG5ld1N1YlF1ZXJ5S2V5LmFwcGVuZChhY3Rpb24uZ2V0U3ViUXVlcnlLZXkoKSkuYXBwZW5kKCc6Jyk7Ci0gICBuZXdTdWJRdWVyeUtleS5hcHBlbmQoYWN0aW9uLmdldE5ld1N1YlF1ZXJ5KCkpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpYWN0aW9uLmdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBwYXJlbnRGb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5KTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBzdWJRdWVyeUZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMobmV3U3ViUXVlcnlLZXkudG9TdHJpbmcoKSk7Ci0gICBTdHJpbmcgbmV3U3ViUXVlcnlJdGVtU3RyaW5nID0gYWN0aW9uLmdldE5ld1N1YlF1ZXJ5SXRlbSgpOwotICAgc3ViUXVlcnlGb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxuZXdTdWJRdWVyeUl0ZW1TdHJpbmcpOwotICAgc3ViUXVlcnlGb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VULG5ldyBCb29sZWFuKGFjdGlvbi5pc1N1YlF1ZXJ5R2V0KCkpKTsKLSAgIAotICAgLy8gQWx3YXlzIGluaXRpYWxpemUgdGhlIHF1ZXJ5IG5hbWUgc28gdGhlIHN1YnF1ZXJ5IG1ha2VzIHNlbnNlLgotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgcGFyZW50UXVlcnlOYW1lID0gKFN0cmluZylwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICBpZiAocGFyZW50UXVlcnlOYW1lID09IG51bGwpCi0gICAgIHBhcmVudFF1ZXJ5TmFtZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJERUZBVUxUX1FVRVJZX05BTUUiKTsKLSAgIGludCBuZXdTdWJRdWVyeUl0ZW0gPSBJbnRlZ2VyLnBhcnNlSW50KG5ld1N1YlF1ZXJ5SXRlbVN0cmluZyk7Ci0gICBTdHJpbmcgbmV3U3ViUXVlcnlJdGVtVHlwZVN0cmluZyA9IG51bGw7Ci0gICBzd2l0Y2ggKG5ld1N1YlF1ZXJ5SXRlbSkKLSAgIHsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICBuZXdTdWJRdWVyeUl0ZW1UeXBlU3RyaW5nID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgbmV3U3ViUXVlcnlJdGVtVHlwZVN0cmluZyA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgbmV3U3ViUXVlcnlJdGVtVHlwZVN0cmluZyA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVMiKTsKLSAgIH0KLSAgIFN0cmluZ1tdIG1lc3NhZ2VQYXJhbWV0ZXJzID0ge3BhcmVudFF1ZXJ5TmFtZSxuZXdTdWJRdWVyeUl0ZW1UeXBlU3RyaW5nfTsKLSAgIHN1YlF1ZXJ5Rm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkRFRkFVTFRfU1VCUVVFUllfTkFNRSIsbWVzc2FnZVBhcmFtZXRlcnMpKTsKLSAgIAotICAgTm9kZSBub2RlID0gYWN0aW9uLmdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgaW50IG5vZGVJZCA9IG5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICBpbnQgdG9vbElkID0gbm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCk7Ci0gICBpbnQgdmlld0lkID0gbm9kZS5nZXRWaWV3SWQoKTsKLSAgIGludCB2aWV3VG9vbElkID0gbm9kZS5nZXRWaWV3VG9vbElkKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCxuZXdTdWJRdWVyeUtleS50b1N0cmluZygpLGZhbHNlKSkpJT4iOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Mb2dpbkFkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xvZ2luQWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjMzYjRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xvZ2luQWR2YW5jZWRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMzY0NDkgYnJ1bnNzZW5AdXMuaWJtLmNvbSAtIFZpbmNlIEJydW5zc2VuICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keT4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBMb2dpbkFkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBMb2dpbkFkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTljZTdhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Mb2dvdXRBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5PgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIExvZ291dEFkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBMb2dvdXRBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsgLy9hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDA0MDczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIE1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbiBhY3Rpb24gPSBuZXcgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWlucHV0c1ZhbGlkKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotICAgICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICAgIHsKLSAgICAgICBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgICAgfQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmOWU0ODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICBpZiAoIWlucHV0c1ZhbGlkKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotICAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgIHsKLSAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgc2VsZWN0ZWQgbm9kZSBpcyB2aXNpYmxlLgotICAgICAgIGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLm1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgewotICAgIG5hdmlnYXRvckNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCIpKSU+IjsKLSAgICBwcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICB9Ci0gIGVsc2UKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3VkZGlfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvT3BlblJlZ2lzdHJ5QWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZjNzQzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLQotICAgT3BlblJlZ2lzdHJ5QWN0aW9uIGFjdGlvbiA9IG5ldyBPcGVuUmVnaXN0cnlBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGNiY2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWZyZXNoVURESU5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZnJlc2hVRERJTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gVGhlIGFjdGlvbiBtYXkgYmUgZXhlY3V0ZWQgdmlhIHByb2dyYW0gbGluay4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gICBib29sZWFuIGlzTm9kZURhdGFWYWxpZCA9IGFjdGlvbi52ZXJpZnlOb2RlRGF0YSgpOwotCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgIFN0cmluZyBvbkxvYWRBY3Rpb247Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gcHJvY2Vzc0NsZWFyTm9kZXNGb3JtKCkKLSAgewotICAgIHZhciBjbGVhck5vZGVzRm9ybSA9IGRvY3VtZW50LmZvcm1zWzBdOwotICAgIHZhciBzdWJtaXRDbGVhck5vZGVzRm9ybSA9IGZhbHNlOwotPCUKLSAgICAgVmVjdG9yIHN0YWxlTm9kZXMgPSBhY3Rpb24uZ2V0U3RhbGVOb2RlcygpOwotICAgICBmb3IgKGludCBpPTA7aTxzdGFsZU5vZGVzLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBOb2RlIHN0YWxlTm9kZSA9IChOb2RlKXN0YWxlTm9kZXMuZWxlbWVudEF0KGkpOwotJT4KLSAgICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX05PREUiLHN0YWxlTm9kZS5nZXROb2RlTmFtZSgpKSklPiIpKQotICAgIHsKLSAgICAgIGNsZWFyTm9kZXNGb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIsPCU9c3RhbGVOb2RlLmdldE5vZGVJZCgpJT4pKTsKLSAgICAgIHN1Ym1pdENsZWFyTm9kZXNGb3JtID0gdHJ1ZTsKLSAgICB9Ci08JQotICAgICB9Ci0lPgotICAgIGlmIChzdWJtaXRDbGVhck5vZGVzRm9ybSkKLSAgICAgIGNsZWFyTm9kZXNGb3JtLnN1Ym1pdCgpOwotICB9Ci08L3NjcmlwdD4gICAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLTwvZm9ybT4KLTwlCi0gICBpZiAoIWlzTm9kZURhdGFWYWxpZCkKLSAgIHsKLSAgICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykoYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpKTsKLSAgICAgU3RyaW5nIG5vZGVOYW1lID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXROb2RlKG5vZGVJZCkuZ2V0Tm9kZU5hbWUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9OT0RFIixub2RlTmFtZSkpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQpKSklPiI7Ci08L3NjcmlwdD4gICAgCi08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9jZXNzQ2xlYXJOb2Rlc0Zvcm0oKTsKLTwvc2NyaXB0PgotPCVAIGluY2x1ZGUgZmlsZSA9ICIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2VmMzY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVmcmVzaFVERElOb2Rlc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVmcmVzaFVERElOb2Rlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgIAotICAgLy8gUnVuIHRoZSBhY3Rpb24KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gcHJvY2Vzc0NsZWFyTm9kZXNGb3JtKCkKLSAgewotICAgIHZhciBjbGVhck5vZGVzRm9ybSA9IGRvY3VtZW50LmZvcm1zWzBdOwotPCUKLSAgICAgVmVjdG9yIHN0YWxlTm9kZXMgPSBhY3Rpb24uZ2V0U3RhbGVOb2RlcygpOwotICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8c3RhbGVOb2Rlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTm9kZSBzdGFsZU5vZGUgPSAoTm9kZSlzdGFsZU5vZGVzLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9OT0RFIixzdGFsZU5vZGUuZ2V0Tm9kZU5hbWUoKSkpJT4iKSkKLSAgICAgIGNsZWFyTm9kZXNGb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIsPCU9c3RhbGVOb2RlLmdldE5vZGVJZCgpJT4pKTsKLTwlICAgIAotICAgICB9Ci0lPgotICAgIGNsZWFyTm9kZXNGb3JtLnN1Ym1pdCgpOwotICB9ICAgICAgICAgCi08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb25KU1AuanNwIikpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgotPC9mb3JtPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb2Nlc3NDbGVhck5vZGVzRm9ybSgpOwotPC9zY3JpcHQ+ICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYmM5ODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYjQzY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghYWN0aW9uLmlzU3ViUXVlcnlJbml0aWF0ZWQoKSkKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmJlMWY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ3Mjc0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGVkYzhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmZmMWJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZVVVSURBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM2MzhkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZVVVSURBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzA2MmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODFlNzVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlM2E0MGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAxMTllOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI0N2UwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjdhYTkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOTVmOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0MzYwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmNiY2MyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gYWN0aW9uID0gbmV3IFJlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmIChpbnB1dHNWYWxpZCkKLSAgIHsKLSAgICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgIH0KLSU+Ci0KLSAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODI0YTkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTk4Mzc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gQ3JlYXRlIHRoZSBhY3Rpb24uCi0gICBSZXNpemVVRERJRnJhbWVzQWN0aW9uIGFjdGlvbiA9IG5ldyBSZXNpemVVRERJRnJhbWVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgCi0gICAvLyBQb3B1bGF0ZSB0aGUgYWN0aW9uIHdpdGggdGhlIHJlcXVlc3QgcHJvcGVydGllcy4KLSAgIGJvb2xlYW4gcmVzdWx0ID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAocmVzdWx0KQotICAgewotICAgICBhY3Rpb24uZXhlY3V0ZShmYWxzZSk7Ci0gICAgIAotICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7Ci0gICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuc2V0QXR0cmlidXRlKCJjb2xzIiwiPCU9dWRkaVBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iKTsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQuc2V0QXR0cmlidXRlKCJyb3dzIiwiPCU9dWRkaVBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+Iik7Ci0gIH0KLSAgZWxzZQotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvdWRkaV9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNiYjE5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9jYnBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoZmFsc2UpOwotCi0gICBDYXRlZ29yeU5vZGUgc2VsZWN0ZWROb2RlID0gKENhdGVnb3J5Tm9kZSlhY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgTm9kZSBwcmV2aW91c1NlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFByZXZpb3VzU2VsZWN0ZWROb2RlKCk7Ci0gICBpbnQgc2VsZWN0ZWROb2RlSWQgPSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICAgU3RyaW5nIHRyZWVDb250ZW50VmFyID0gYWN0aW9uLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gICBpZiAocHJldmlvdXNTZWxlY3RlZE5vZGUgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICAgIHsKLSU+Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4uYWx0ZXJJbWFnZSgnPCU9cHJldmlvdXNTZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQocHJldmlvdXNTZWxlY3RlZE5vZGUuZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkpKSU+Jyk7Ci08JQotICAgICB9Ci0gICB9Ci0gICBTdHJpbmcgc2VsZWN0ZWROb2RlQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0gICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+ICAgICAKLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5zZWxlY3ROb2RlKCc8JT1zZWxlY3RlZE5vZGVBbmNob3JOYW1lJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoc2VsZWN0ZWROb2RlLmdldE9wZW5JbWFnZVBhdGgoKSkpJT4nKTsKLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbi5oYXNoID0gJyM8JT1zZWxlY3RlZE5vZGVBbmNob3JOYW1lJT4nOwotPCUgIAotICAgfQotICAgCi0gICBDYXRlZ29yeUVsZW1lbnQgY2F0ZWdvcnlFbGVtZW50ID0gKENhdGVnb3J5RWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIEtleWVkUmVmZXJlbmNlIGtyID0gY2F0ZWdvcnlFbGVtZW50LmdldENhdGVnb3J5KCk7Ci0lPgotICBjYXRlZ29yeUJyb3dzZXJXaW5kb3cub3BlbmVyLnRhcmdldENhdGVnb3J5S2V5TmFtZUVsZW1lbnQudmFsdWUgPSAiPCU9a3IuZ2V0S2V5TmFtZSgpJT4iOwotICBjYXRlZ29yeUJyb3dzZXJXaW5kb3cub3BlbmVyLnRhcmdldENhdGVnb3J5S2V5VmFsdWVFbGVtZW50LnZhbHVlID0gIjwlPWtyLmdldEtleVZhbHVlKCklPiI7Ci0gIGNhdGVnb3J5QnJvd3NlcldpbmRvdy5vcGVuZXIuY2xvc2VDYXRlZ29yeUJyb3dzZXIoKTsKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYzY2YxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2VsZWN0RmluZFRvb2xBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdEZpbmRUb29sQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNiN2QwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NGE0MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzE2MzdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZShmYWxzZSk7Ci0gICAKLSAgIGlmICghYWN0aW9uUmVzdWx0KQotICAgewotICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgICBTdHJpbmcgc3ViUXVlcnlMaXN0S2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKTsKLSAgICAgaW50IHN1YlF1ZXJ5TGlzdEl0ZW1JZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKSk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgVVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fSVRFTV9WQUxJREFUSU9OX0ZBSUxFRCIsYWN0aW9uLmdldEl0ZW1OYW1lKCkpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsoc3ViUXVlcnlLZXksc3ViUXVlcnlMaXN0S2V5LHN1YlF1ZXJ5TGlzdEl0ZW1JZCkpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi0gICAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM5ZTcxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFNlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbiBhY3Rpb24gPSBuZXcgU2VydmljZUdldEJ1c2luZXNzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBib29sZWFuIHNlcnZpY2VFeGlzdHMgPSBhY3Rpb24udmFsaWRhdGVTZXJ2aWNlKCk7Ci0KLSAgIGlmICghc2VydmljZUV4aXN0cykKLSAgIHsKLSAgICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykoYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpKTsKLSAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfU0VSVklDRV9OT0RFIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYjVmOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb24gYWN0aW9uID0gbmV3IFNlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgYm9vbGVhbiBzZXJ2aWNlRXhpc3RzID0gYWN0aW9uLnZhbGlkYXRlU2VydmljZSgpOwotCi0gICBpZiAoIXNlcnZpY2VFeGlzdHMpCi0gICB7Ci0gICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKSk7Ci0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX1NFUlZJQ0VfTk9ERSIpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViMjg3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24gYWN0aW9uID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBib29sZWFuIHNpRXhpc3RzID0gYWN0aW9uLnZhbGlkYXRlU2VydmljZUludGVyZmFjZSgpOwotCi0gICBpZiAoIXNpRXhpc3RzKQotICAgewotICAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKShhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9TSV9OT0RFIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyOTY3YjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb24gYWN0aW9uID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgYm9vbGVhbiBzaUV4aXN0cyA9IGFjdGlvbi52YWxpZGF0ZVNlcnZpY2VJbnRlcmZhY2UoKTsKLQotICAgaWYgKCFzaUV4aXN0cykKLSAgIHsKLSAgICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykoYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpKTsKLSAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfU0lfTk9ERSIpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1Nob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1Nob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA0MDVkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGFjdGlvbiA9IG5ldyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotICAgICBpZiAoaW5wdXRzVmFsaWQpCi0gICAgIHsKLSAgICAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICAgIH0KLSU+Ci0gICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgIDwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNlMzc0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24KLVN3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb24gYWN0aW9uID0gbmV3IFN3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb24oY29udHJvbGxlcik7Ci0gICAKLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgIAotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICAKLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZTA0ZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvY2JwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBUb2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLQotICAgU3RyaW5nIHRyZWVDb250ZW50VmFyID0gYWN0aW9uLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgICA8JT10cmVlQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0VHJlZUNvbnRlbnRQYWdlKCkpKSU+IjsKLSAgZWxzZQotICAgIGNhdGVnb3J5QnJvd3NlcldpbmRvdy5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFRyZWVDb250YWluZXJQYWdlKCkpKSU+IjsKLTwlCi0gICB9Ci0lPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRlZTc0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDk4YzczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIFRyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uIGFjdGlvbiA9IG5ldyBUcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU0hPV19SRVNVTFRTX1RBUkdFVCkgIT0gbnVsbCkKLSAgICAgYWN0aW9uLmVuYWJsZVNob3dSZXN1bHRzVGFyZ2V0KCk7Ci0gICBlbHNlCi0gICAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgIE5vZGUgdGFyZ2V0Tm9kZSA9IGFjdGlvbi5nZXRUYXJnZXROb2RlKCk7Ci0gICBTdHJpbmcgdGFyZ2V0Tm9kZUFuY2hvck5hbWUgPSB0YXJnZXROb2RlLmdldEFuY2hvck5hbWUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgbmF2aWdhdG9yQ29udGVudC5zZWxlY3ROb2RlKCc8JT10YXJnZXROb2RlQW5jaG9yTmFtZSU+JywnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRhcmdldE5vZGUuZ2V0T3BlbkltYWdlUGF0aCgpKSklPicpOwotICBuYXZpZ2F0b3JDb250ZW50LmxvY2F0aW9uLmhhc2g9JyM8JT10YXJnZXROb2RlQW5jaG9yTmFtZSU+JzsKLSAgcHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGRlZjBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCkpOwotICAgUmVnaXN0cnlEZXRhaWxzVG9vbCByZWdEZXRhaWxzVG9vbCA9IHJlZ05vZGUuZ2V0UmVnRGV0YWlsc1Rvb2woKTsKLSAgIHJlZ0RldGFpbHNUb29sLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlVTRVJfREVGSU5FRF9DQVRFR09SSUVTLGNhdGVnb3J5VE1vZGVsS2V5KTsKLSAgIHJlZ05vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuc2V0U2VsZWN0ZWRUb29sSWQocmVnRGV0YWlsc1Rvb2wuZ2V0VG9vbElkKCkpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHJlZ05vZGUuZ2V0Tm9kZUlkKCksZmFsc2UpKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjVjYmNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2hvd1BlcnNwZWN0aXZlQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlVERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbiIlPgotCi0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1VRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uID0gbmV3IFVERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1ib29sZWFuIHBhcmFtVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi1pZiAocGFyYW1WYWxpZCkgewotICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICBpZiAoYWN0aW9uUmVzdWx0KSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwsZmFsc2UpKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci0gIGVsc2UgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEwM2ZmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU4MjBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uIGFjdGlvbiA9IG5ldyBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzMWY2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBhY3Rpb24gPSBuZXcgVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVW5wdWJsaXNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM5ZWI0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFVucHVibGlzaEFjdGlvbiBhY3Rpb24gPSBuZXcgVW5wdWJsaXNoQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGY0MDJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICBpZiAoIWlucHV0c1ZhbGlkKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotICAgICBib29sZWFuIHJlZnJlc2hSZXN1bHQgPSBhY3Rpb24ucmVmcmVzaEZyb21SZWdpc3RyeSgpOwotICAgICAKLSAgICAgaWYgKCFyZWZyZXNoUmVzdWx0KQotICAgICB7Ci0gICAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX0FDVElPTixhY3Rpb24pOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9QVUJMSVNIX0lURU0iKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVXBkYXRlTmV3UHVibGlzaEFjdGlvbkpTUC5qc3AiKSklPiI7Ci0gIGVsc2UKLSAgICBwcm9wZXJ0aWVzQ29udGVudC5yZXF1ZXN0U3VibWl0dGVkID0gZmFsc2U7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICAgIH0KLSAgIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVCdXNpbmVzc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVCdXNpbmVzc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMGVhYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBVcGRhdGVCdXNpbmVzc0FjdGlvbiBhY3Rpb24gPSBuZXcgVXBkYXRlQnVzaW5lc3NBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlTmV3UHVibGlzaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVOZXdQdWJsaXNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdhZWE1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVOZXdQdWJsaXNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgVXBkYXRlQWN0aW9uIGFjdGlvbiA9IChVcGRhdGVBY3Rpb24pc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX0FDVElPTik7Ci0gICBzZXNzaW9uLnJlbW92ZUF0dHJpYnV0ZShVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfQUNUSU9OKTsKLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYTc1M2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlUmVnaXN0cnlBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBVcGRhdGVSZWdpc3RyeUFjdGlvbiBhY3Rpb24gPSBuZXcgVXBkYXRlUmVnaXN0cnlBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlkOTRmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgVXBkYXRlU2VydmljZUFjdGlvbiBhY3Rpb24gPSBuZXcgVXBkYXRlU2VydmljZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFpbnB1dHNWYWxpZCkKLSAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgYm9vbGVhbiByZWZyZXNoU2VydmljZVJlc3VsdCA9IGFjdGlvbi5yZWZyZXNoRnJvbVJlZ2lzdHJ5KCk7Ci0gICAgIGJvb2xlYW4gcmVmcmVzaEJ1c2luZXNzUmVzdWx0ID0gYWN0aW9uLnJlZnJlc2hCdXNpbmVzc0Zyb21SZWdpc3RyeSgpOwotICAgICBpZiAoIXJlZnJlc2hTZXJ2aWNlUmVzdWx0KQotICAgICB7Ci0gICAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX0FDVElPTixhY3Rpb24pOwotICAgICAgIGlmICghcmVmcmVzaEJ1c2luZXNzUmVzdWx0KQotICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1NFUlZJQ0VfUFVCTElTSF9CVVNJTkVTUyIpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlTmV3UHVibGlzaEJ1c2luZXNzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgZWxzZQotICAgIHByb3BlcnRpZXNDb250ZW50LnJlcXVlc3RTdWJtaXR0ZWQgPSBmYWxzZTsKLTwvc2NyaXB0PgotPCUKLSAgICAgICB9Ci0gICAgICAgZWxzZQotICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1BVQkxJU0hfSVRFTSIpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9VcGRhdGVOZXdQdWJsaXNoQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgZWxzZQotICAgIHByb3BlcnRpZXNDb250ZW50LnJlcXVlc3RTdWJtaXR0ZWQgPSBmYWxzZTsKLTwvc2NyaXB0PgotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWE4ZjA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBVcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uIGFjdGlvbiA9IG5ldyBVcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VOZXdQdWJsaXNoQnVzaW5lc3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZU5ld1B1Ymxpc2hCdXNpbmVzc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZjZlZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZU5ld1B1Ymxpc2hCdXNpbmVzc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIFVwZGF0ZVNlcnZpY2VBY3Rpb24gYWN0aW9uID0gKFVwZGF0ZVNlcnZpY2VBY3Rpb24pc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX0FDVElPTik7Ci0gICBzZXNzaW9uLnJlbW92ZUF0dHJpYnV0ZShVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfQUNUSU9OKTsKLQotICAgUmVnUHVibGlzaFRvb2wgcmVnUHVibGlzaFRvb2wgPSBhY3Rpb24uc2V0dXBSZWdQdWJsaXNoVG9vbCgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChyZWdQdWJsaXNoVG9vbC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZihmYWxzZSkpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MWJhMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250YWluZXIuanNwIikpJT4iIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTEgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfYnJvd3Nlci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfYnJvd3Nlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOWU1MzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X2Jyb3dzZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXkgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1RNT0RFTF9LRVkpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgdWRkaVBlcnNwZWN0aXZlLnNldENhdGVnb3J5VE1vZGVsS2V5KGNhdGVnb3J5VE1vZGVsS2V5KTsKLSAgIAotICAgU3RyaW5nQnVmZmVyIHRvb2xiYXJMaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9jYXRlZ29yeV90b29sYmFyLmpzcD8iKTsKLSAgIHRvb2xiYXJMaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJUSVRMRV9DQVRFR09SWV9CUk9XU0VSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMCwzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLkNBVEVHT1JJRVNfV09SS0FSRUElPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQVRFR09SSUVTX1dPUktBUkVBIiklPiIgZnJhbWVib3JkZXI9MCBub3Jlc2l6ZT4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLkNBVEVHT1JJRVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBVEVHT1JJRVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRvb2xiYXJMaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQVRFR09SSUVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmdldENhdGVnb3J5Q29udGVudFBhZ2Uoc2Vzc2lvbklkLGNhdGVnb3J5VE1vZGVsS2V5KSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MDAzZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiIgJT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi08anNwOnVzZUJlYW4gaWQ9ImNvbW1vbkNhdGVnb3J5TW9kZWxzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9ImFwcGxpY2F0aW9uIi8+Ci08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQVRFR09SSUVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdHJlZXZpZXcuY3NzIikpJT4iPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3RyZWV2aWV3LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiB0cmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhKCkKLSAgewotICAgIHRvcC5vcGVuZXIudG9wLmZyYW1lc1siPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Il0ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFRyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsY2F0ZWdvcnlUTW9kZWxLZXkpKSklPiI7Ci0gIH0gIAotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08JSAgIAotICAgLy8gQ2hlY2sgaWYgdGhlIGNhdGVnb3J5IGlzIGEgY29tbW9uIGNhdGVnb3J5LgotICAgQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsID0gKENhdGVnb3J5TW9kZWwpY29tbW9uQ2F0ZWdvcnlNb2RlbHMuZ2V0KGNhdGVnb3J5VE1vZGVsS2V5KTsKLSAgIGlmIChjYXRlZ29yeU1vZGVsID09IG51bGwpCi0gICB7Ci0gICAgIC8vIFRoZSBjYXRlZ29yeSBpcyB1c2VyLWRlZmluZWQuICAgICAKLSAgICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCkpOwotICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOyAgIAotICAgICBjYXRlZ29yeU1vZGVsID0gKENhdGVnb3J5TW9kZWwpcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3J5KGNhdGVnb3J5VE1vZGVsS2V5KTsKLSAgIH0KLSAgIGJ5dGUgcmMgPSBDYXRlZ29yeU1vZGVsLk9QRVJBVElPTl9TVUNDRVNTRlVMOwotICAgaWYgKCFjYXRlZ29yeU1vZGVsLmlzRGF0YUxvYWRlZCgpKQotICAgewotICAgICBzeW5jaHJvbml6ZWQoY2F0ZWdvcnlNb2RlbCkKLSAgICAgewotICAgICAgIGlmICghY2F0ZWdvcnlNb2RlbC5pc0RhdGFMb2FkZWQoKSkKLSAgICAgICAgIHJjID0gY2F0ZWdvcnlNb2RlbC5sb2FkRnJvbURlZmF1bHREYXRhRmlsZSgpOwotICAgICB9Ci0gICB9Ci0gICBpZiAocmMgIT0gQ2F0ZWdvcnlNb2RlbC5PUEVSQVRJT05fU1VDQ0VTU0ZVTCkKLSAgIHsKLSU+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX05PX0NBVEVHT1JZX0RBVEEiLGNhdGVnb3J5TW9kZWwuZ2V0RGlzcGxheU5hbWUoKSklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9DQVRFR09SWV9EQVRBIiwiamF2YXNjcmlwdDp0cmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhKCkiKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTwlICAgCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIE5vZGVNYW5hZ2VyIGNhdGVnb3J5TWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRDYXRlZ29yeU1hbmFnZXIoY2F0ZWdvcnlNb2RlbCk7Ci0gICAgIFN0cmluZyBzZWxlY3RlZEFuY2hvck5hbWUgPSAiIjsKLSAgICAgaW50IGZvY3VzZWROb2RlSWQgPSBjYXRlZ29yeU1hbmFnZXIuZ2V0Rm9jdXNlZE5vZGVJZCgpOwotICAgICBTdHJpbmcgZm9jdXNlZEFuY2hvck5hbWUgPSBTdHJpbmcudmFsdWVPZihmb2N1c2VkTm9kZUlkKTsKLSAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBjYXRlZ29yeU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkKLSAgICAgewotICAgICAgIHNlbGVjdGVkQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0gICAgICAgaWYgKGZvY3VzZWROb2RlSWQgPT0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKQotICAgICAgICAgZm9jdXNlZEFuY2hvck5hbWUgPSBzZWxlY3RlZEFuY2hvck5hbWU7Ci0gICAgIH0KLSU+Ci08ZGl2IGlkPSJ0cmVlY29udGVudGJvcmRlciI+Ci08JT1jYXRlZ29yeU1hbmFnZXIucmVuZGVyVHJlZVZpZXcocmVzcG9uc2UpJT4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNlbGYubG9jYXRpb24uaGFzaD0iIzwlPWZvY3VzZWRBbmNob3JOYW1lJT4iCi0gIHNldFNlbGVjdGVkQW5jaG9yTmFtZSgiPCU9c2VsZWN0ZWRBbmNob3JOYW1lJT4iKTsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSU+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZDhkNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FURUdPUklFU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iIG9uVW5sb2FkPSJ0b3Aub3BlbmVyLmNhdGVnb3J5V2luZG93Q2xvc2VkPXRydWUiPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9pbWFnZXMvY2F0ZWdvcnkuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQ0FURUdPUklFUyIpJT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHRvcC5vcGVuZXIuY2F0ZWdvcnlXaW5kb3dDbG9zZWQ9ZmFsc2U7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvZ2VvLWRhdGEudHh0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvZ2VvLWRhdGEudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTc4YWJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL2dlby1kYXRhLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzODMgKzAsMCBAQAotZ2VvIy0tI1dvcmxkIy0tCi1nZW8jQUUjVW5pdGVkIEFyYWIgRW1pcmF0ZXMjLS0KLWdlbyNBRiNBZmdoYW5pc3RhbiMtLQotZ2VvI0FHI0FudGlndWEgQW5kIEJhcmJ1ZGEjLS0KLWdlbyNBSSNBbmd1aWxsYSMtLQotZ2VvI0FMI0FsYmFuaWEjLS0KLWdlbyNBTSNBcm1lbmlhIy0tCi1nZW8jQU4jTmV0aGVybGFuZHMgQW50aWxsZXMjLS0KLWdlbyNBTyNBbmdvbGEjLS0KLWdlbyNBUSNBbnRhcmN0aWNhIy0tCi1nZW8jQVIjQXJnZW50aW5hIy0tCi1nZW8jQVItQSNTYWx0YSNBUgotZ2VvI0FSLUIjQnVlbm9zIEFpcmVzI0FSCi1nZW8jQVItQyNEaXN0cml0byBGZWRlcmFsI0FSCi1nZW8jQVItRCNTYW4gTHVpcyNBUgotZ2VvI0FSLUUjRW50cmUgUmlvcyNBUgotZ2VvI0FSLUYjTGEgUmlvamEjQVIKLWdlbyNBUi1HI1NhbnRpYWdvIERlbCBFc3Rlcm8jQVIKLWdlbyNBUi1II0NoYWNvI0FSCi1nZW8jQVItSiNTYW4gSnVhbiNBUgotZ2VvI0FSLUsjQ2F0YW1hcmNhI0FSCi1nZW8jQVItTCNMYSBQYW1wYSNBUgotZ2VvI0FSLU0jTWVuZG96YSNBUgotZ2VvI0FSLU4jTWlzaW9uZXMjQVIKLWdlbyNBUi1QI0Zvcm1vc2EjQVIKLWdlbyNBUi1RI05ldXF1ZW4jQVIKLWdlbyNBUi1SI1JpbyBOZWdybyNBUgotZ2VvI0FSLVMjU2FudGEgRmUjQVIKLWdlbyNBUi1UI1R1Y3VtYW4jQVIKLWdlbyNBUi1VI0NodWJ1dCNBUgotZ2VvI0FSLVYjVGllcnJhIERlbCBGdWVnbyNBUgotZ2VvI0FSLVcjQ29ycmllbnRlcyNBUgotZ2VvI0FSLVgjQ29yZG9iYSNBUgotZ2VvI0FSLVkjSnVqdXkjQVIKLWdlbyNBUi1aI1NhbnRhIENydXojQVIKLWdlbyNBUyNBbWVyaWNhbiBTYW1vYSMtLQotZ2VvI0FUI0F1c3RyaWEjLS0KLWdlbyNBVSNBdXN0cmFsaWEjLS0KLWdlbyNBVS1DVCNBdXN0cmFsaWFuIENhcGl0YWwgVGVycml0b3J5I0FVCi1nZW8jQVUtTlMjTmV3IFNvdXRoIFdhbGVzI0FVCi1nZW8jQVUtTlQjTm9ydGhlcm4gVGVycml0b3J5I0FVCi1nZW8jQVUtUUwjUXVlZW5zbGFuZCNBVQotZ2VvI0FVLVNBI1NvdXRoIEF1c3RyYWxpYSNBVQotZ2VvI0FVLVRTI1Rhc21hbmlhI0FVCi1nZW8jQVUtVkkjVmljdG9yaWEjQVUKLWdlbyNBVS1XQSNXZXN0ZXJuIEF1c3RyYWxpYSNBVQotZ2VvI0FXI0FydWJhIy0tCi1nZW8jQVojQXplcmJhaWphbiMtLQotZ2VvI0JBI0Jvc25pYS1IZXJjZWdvdmluYSMtLQotZ2VvI0JCI0JhcmJhZG9zIy0tCi1nZW8jQkQjQmFuZ2xhZGVzaCMtLQotZ2VvI0JFI0JlbGdpdW0jLS0KLWdlbyNCRiNCdXJraW5hIEZhc28jLS0KLWdlbyNCRyNCdWxnYXJpYSMtLQotZ2VvI0JII0JhaHJhaW4jLS0KLWdlbyNCSSNCdXJ1bmRpIy0tCi1nZW8jQkojQmVuaW4jLS0KLWdlbyNCTSNCZXJtdWRhIy0tCi1nZW8jQk4jQnJ1bmVpIERhcnVzc2FsYW0jLS0KLWdlbyNCTyNCb2xpdmlhIy0tCi1nZW8jQlIjQnJhemlsIy0tCi1nZW8jQlItQUMjQWNyZSNCUgotZ2VvI0JSLUFMI0FsYWdvYXMjQlIKLWdlbyNCUi1BTSNBbWF6b25hcyNCUgotZ2VvI0JSLUFQI0FtYXBhI0JSCi1nZW8jQlItQkEjQmFoaWEjQlIKLWdlbyNCUi1DRSNDZWFyYSNCUgotZ2VvI0JSLURGI0Rpc3RyaXRvIEZlZGVyYWwjQlIKLWdlbyNCUi1FUyNFc3Bpcml0byBTYW50byNCUgotZ2VvI0JSLUdPI0dvaWFzI0JSCi1nZW8jQlItTUEjTWFyYW5oYW8jQlIKLWdlbyNCUi1NRyNNaW5hcyBHZXJhaXMjQlIKLWdlbyNCUi1NUyNNYXRvIEdyb3NzbyBEbyBTdWwjQlIKLWdlbyNCUi1NVCNNYXRvIEdyb3NzbyNCUgotZ2VvI0JSLVBBI1BhcmEjQlIKLWdlbyNCUi1QQiNQYXJhaWJhI0JSCi1nZW8jQlItUEUjUGVybmFtYnVjbyNCUgotZ2VvI0JSLVBJI1BpYXVpI0JSCi1nZW8jQlItUFIjUGFyYW5hI0JSCi1nZW8jQlItUkojUmlvIERlIEphbmVpcm8jQlIKLWdlbyNCUi1STiNSaW8gR3JhbmRlIERvIE5vcnRlI0JSCi1nZW8jQlItUk8jUm9uZG9uaWEjQlIKLWdlbyNCUi1SUiNSb3JhaW1hI0JSCi1nZW8jQlItUlMjUmlvIEdyYW5kZSBEbyBTdWwjQlIKLWdlbyNCUi1TQyNTYW50YSBDYXRhcmluYSNCUgotZ2VvI0JSLVNFI1NlcmdpcGUjQlIKLWdlbyNCUi1TUCNTYW8gUGF1bG8jQlIKLWdlbyNCUi1UTyNUb2NhbnRpbmEjQlIKLWdlbyNCUyNCYWhhbWFzIy0tCi1nZW8jQlQjQmh1dGFuIy0tCi1nZW8jQlUjQnVybWEgKFNlZSBNTSBNeWFubWFyKSMtLQotZ2VvI0JXI0JvdHN3YW5hIy0tCi1nZW8jQlkjQmVsYXJ1cyMtLQotZ2VvI0JZLUJSI0JyZXN0c2theWEgdm9ibGFzdHMnI0JZCi1nZW8jQlktSE8jSG9teWVsJ3NrYXlhIHZvYmxhc3RzJyNCWQotZ2VvI0JZLUhSI0hyb2R6ZW5za2F5YSB2b2JsYXN0cycjQlkKLWdlbyNCWS1NQSNNYWhpbHlvd3NrYXlhIHZvYmxhc3RzJyNCWQotZ2VvI0JZLU1JI01pbnNrYXlhIHZvYmxhc3RzJyNCWQotZ2VvI0JZLVZJI1ZpdHN5ZWJza2F5YSB2b2JsYXN0cycjQlkKLWdlbyNCWiNCZWxpemUjLS0KLWdlbyNDQSNDYW5hZGEjLS0KLWdlbyNDQS1BQiNBbGJlcnRhI0NBCi1nZW8jQ0EtQkMjQnJpdGlzaCBDb2x1bWJpYSNDQQotZ2VvI0NBLU1CI01hbml0b2JhI0NBCi1nZW8jQ0EtTkIjTmV3IEJydW5zd2ljayNDQQotZ2VvI0NBLU5GI05ld2ZvdW5kbGFuZCNDQQotZ2VvI0NBLU5TI05vdmEgU2NvdGlhI0NBCi1nZW8jQ0EtTlQjTm9ydGh3ZXN0IFRlcnJpdG9yaWVzI0NBCi1nZW8jQ0EtTlUjTnVuYXZ1dCNDQQotZ2VvI0NBLU9OI09udGFyaW8jQ0EKLWdlbyNDQS1QRSNQcmluY2UgRWR3YXJkIElzbGFuZCNDQQotZ2VvI0NBLVFDI1F1ZWJlYyNDQQotZ2VvI0NBLVNLI1Nhc2thdGNoZXdhbiNDQQotZ2VvI0NBLVlUI1l1a29uIFRlcnJpdG9yeSNDQQotZ2VvI0NDI0NvY29zIChLZWVsaW5nKSBJc2xhbmRzIy0tCi1nZW8jQ0QjIkNvbmdvLCBEZW1vY3JhdGljIFJlcHVibGljIG9mIiMtLQotZ2VvI0NGI0NlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyMtLQotZ2VvI0NHI0NvbmdvIy0tCi1nZW8jQ0gjU3dpdHplcmxhbmQjLS0KLWdlbyNDSC1BRyNBYXJnYXUjQ0gKLWdlbyNDSC1BSSNBcHBlbnplbGwgSW5uZXItUmhvZGVuI0NICi1nZW8jQ0gtQVIjQXBwZW56ZWxsIEF1c3Nlci1SaG9kZW4jQ0gKLWdlbyNDSC1CRSNCZXJuI0NICi1nZW8jQ0gtQkwjQmFzZWwtTGFuZHNjaGFmdCNDSAotZ2VvI0NILUJTI0Jhc2VsLVN0YWR0I0NICi1nZW8jQ0gtRlIjRnJpYm91cmcjQ0gKLWdlbyNDSC1HRSNHZW7DqHZlI0NICi1nZW8jQ0gtR0wjR2xhcnVzI0NICi1nZW8jQ0gtR1IjR3JhdWLDvG5kZW4jQ0gKLWdlbyNDSC1KVSNKdXJhI0NICi1nZW8jQ0gtTFUjTHV6ZXJuI0NICi1nZW8jQ0gtTkUjTmV1Y2hhdGVsI0NICi1nZW8jQ0gtTlcjTmlkd2FsZGVuI0NICi1nZW8jQ0gtT1cjT2J3YWxkZW4jQ0gKLWdlbyNDSC1TRyNTdCBHYWxsZW4jQ0gKLWdlbyNDSC1TSCNTY2hhZmZoYXVzZW4jQ0gKLWdlbyNDSC1TTyNTb2xvdGh1cm4jQ0gKLWdlbyNDSC1TWiNTY2h3eXojQ0gKLWdlbyNDSC1URyNUaHVyZ2F1I0NICi1nZW8jQ0gtVEkjVGljaW5vI0NICi1nZW8jQ0gtVVIjVXJpI0NICi1nZW8jQ0gtVkQjVmF1ZCNDSAotZ2VvI0NILVZTI1ZhbGFpcyNDSAotZ2VvI0NILVpHI1p1ZyNDSAotZ2VvI0NILVpII1rDvHJpY2gjQ0gKLWdlbyNDSSNDb3RlIEQnSXZvaXJlIy0tCi1nZW8jQ0sjQ29vayBJc2xhbmRzIy0tCi1nZW8jQ0wjQ2hpbGUjLS0KLWdlbyNDTSNDYW1lcm9vbiMtLQotZ2VvI0NOI0NoaW5hIy0tCi1nZW8jQ04tMTEjQmVpamluZyNDTgotZ2VvI0NOLTEyI1RpYW5qaW4jQ04KLWdlbyNDTi0xMyNIZWJlaSNDTgotZ2VvI0NOLTE0I1NoYW54aSNDTgotZ2VvI0NOLTE1I05laSBNb25nb2wjQ04KLWdlbyNDTi0yMSNMaWFvbmluZyNDTgotZ2VvI0NOLTIyI0ppbGluI0NOCi1nZW8jQ04tMjMjSGVpbG9uZ2ppYW5nI0NOCi1nZW8jQ04tMzEjU2hhbmdoYWkjQ04KLWdlbyNDTi0zMiNKaWFuZ3N1I0NOCi1nZW8jQ04tMzMjWmhlamlhbmcjQ04KLWdlbyNDTi0zNCNBbmh1aSNDTgotZ2VvI0NOLTM1I0Z1amlhbiNDTgotZ2VvI0NOLTM2I0ppYW5neGkjQ04KLWdlbyNDTi0zNyNTaGFuZG9uZyNDTgotZ2VvI0NOLTQxI0hlbmFuI0NOCi1nZW8jQ04tNDIjSHViZWkjQ04KLWdlbyNDTi00MyNIdW5hbiNDTgotZ2VvI0NOLTQ0I0d1YW5nZG9uZyNDTgotZ2VvI0NOLTQ1I0d1YW5neGkjQ04KLWdlbyNDTi00NiNIYWluYW4jQ04KLWdlbyNDTi01MSNTaWNodWFuI0NOCi1nZW8jQ04tNTIjR3VpemhvdSNDTgotZ2VvI0NOLTUzI1l1bm5hbiNDTgotZ2VvI0NOLTU0I1hpemFuZyNDTgotZ2VvI0NOLTYxI1NoYWFueGkjQ04KLWdlbyNDTi02MiNHYW5zdSNDTgotZ2VvI0NOLTYzI1FpbmdoYWkjQ04KLWdlbyNDTi02NCNOaW5neGlhI0NOCi1nZW8jQ04tNjUjWGluamlhbmcjQ04KLWdlbyNDTi03MSNUYWl3YW4jQ04KLWdlbyNDTi05MSNYaWFuZ2dhbmcgKEhvbmcgS29uZykjQ04KLWdlbyNDTi05MiNBb21lbiAoTWFjYXUpI0NOCi1nZW8jQ08jQ29sb21iaWEjLS0KLWdlbyNDUiNDb3N0YSBSaWNhIy0tCi1nZW8jQ1MjRm9ybWVyIEN6ZWNob3Nsb3Zha2lhIy0tCi1nZW8jQ1UjQ3ViYSMtLQotZ2VvI0NWI0NhcGUgVmVyZGUjLS0KLWdlbyNDWCNDaHJpc3RtYXMgSXNsYW5kcyMtLQotZ2VvI0NZI0N5cHJ1cyMtLQotZ2VvI0NaI0N6ZWNoIFJlcHVibGljIy0tCi1nZW8jREUjIkdlcm1hbnksIEZlZGVyYWwgUmVwdWJsaWMgb2YiIy0tCi1nZW8jREUtQkUjQmVybGluI0RFCi1nZW8jREUtQlIjQnJhbmRlbmJ1cmcjREUKLWdlbyNERS1CVyNCYWRlbi1Xw7xydHRlbWJlcmcjREUKLWdlbyNERS1CWSNCYXllcm4jREUKLWdlbyNERS1IQiNCcmVtZW4gKEhhbnNlc3RhZHQpI0RFCi1nZW8jREUtSEUjSGVzc2VuI0RFCi1nZW8jREUtSEgjSGFtYnVyZyAoSGFuc2VzdGFkdCkjREUKLWdlbyNERS1NViNNZWNrbGVuYnVyZy1Wb3Jwb21tZXJuI0RFCi1nZW8jREUtTkkjTmllZGVyc2FjaHNlbiNERQotZ2VvI0RFLU5XI05vcmRyaGVpbi1XZXN0ZmFsZW4jREUKLWdlbyNERS1SUCNSaGVpbmxhbmQtUGZhbHojREUKLWdlbyNERS1TSCNTY2hsZXN3aWctSG9sc3RlaW4jREUKLWdlbyNERS1TTCNTYWFybGFuZCNERQotZ2VvI0RFLVNOI1NhY2hzZW4jREUKLWdlbyNERS1TVCNTYWNoc2VuLUFuaGFsdCNERQotZ2VvI0RFLVRII1Row7xyaW5nZW4jREUKLWdlbyNESiNEamlib3V0aSMtLQotZ2VvI0RLI0Rlbm1hcmsjLS0KLWdlbyNETSNEb21pbmljYSMtLQotZ2VvI0RPI0RvbWluaWNhbiBSZXB1YmxpYyMtLQotZ2VvI0RPLTAyI0F6dWEjRE8KLWdlbyNETy0wMyNCYWhvcnVjbyNETwotZ2VvI0RPLTA0I0JhcmFob25hI0RPCi1nZW8jRE8tMDUjRGFqYWLDs24jRE8KLWdlbyNETy0wNiNEdWFydGUjRE8KLWdlbyNETy0wOCNFbCBTZXlibyNETwotZ2VvI0RPLTA5I0VzcGFpbGxhdCNETwotZ2VvI0RPLTMwI0hhdG8gTWF5b3IjRE8KLWdlbyNETy0xMCNJbmRlcGVuZGVuY2lhI0RPCi1nZW8jRE8tMTEjTGEgQWx0YWdyYWNpYSNETwotZ2VvI0RPLTA3I0xhIEVzdHJlbGxldGEjRE8KLWdlbyNETy0xMiNMYSBSb21hbmEjRE8KLWdlbyNETy0xMyNMYSBWZWdhI0RPCi1nZW8jRE8tMTQjTWFyw61hIFRyaW5pZGFkIFPDoW5jaGV6I0RPCi1nZW8jRE8tMjgjTW9uc2Vub3IgTm91ZWwjRE8KLWdlbyNETy0xNSNNb250ZSBDcmlzdGkjRE8KLWdlbyNETy0yOSNNb250ZSBQbGF0YSNETwotZ2VvI0RPLTE2I1BlZGVybmFsZXMjRE8KLWdlbyNETy0xNyNQZXJhdmlhI0RPCi1nZW8jRE8tMTgjUHVlcnRvIFBsYXRhI0RPCi1nZW8jRE8tMTkjU29sY2VkbyNETwotZ2VvI0RPLTIwI1NhbWFuw6EjRE8KLWdlbyNETy0yMSNTYW4gQ3Jpc3TDs2JhbCNETwotZ2VvI0RPLTIyI1NhbiBKdWFuI0RPCi1nZW8jRE8tMjMjU2FuIFBlZHJvIGRlIE1hY29yw61zI0RPCi1nZW8jRE8tMjQjU8OhbmNoZXogUmFtw61yZXojRE8KLWdlbyNETy0yNSNTYW50aWFnbyNETwotZ2VvI0RPLTI2I1NhbnRpYWdvIFJvZHLDrWd1ZXojRE8KLWdlbyNETy0yNyNWYWx2ZXJkZSNETwotZ2VvI0RaI0FsZ2VyaWEjLS0KLWdlbyNFQyNFY3VhZG9yIy0tCi1nZW8jRUUjRXN0b25pYSMtLQotZ2VvI0VHI0VneXB0Iy0tCi1nZW8jRUgjV2VzdGVybiBTYWhhcmEjLS0KLWdlbyNFUiNFcml0cmVhIy0tCi1nZW8jRVItQU4jQW5zZWJhI0VSCi1nZW8jRVItRFUjRGVidWIjRVIKLWdlbyNFUi1ESyNEZWJ1YmF3aSBLZXlpaCBCYWhyaSBbRGVidWItS2VpaC1CYWhyaV0jRVIKLWdlbyNFUi1HQiNHYXNoLUJhcmthI0VSCi1nZW8jRVItTUEjTWFha2VsIFtNYWVrZWxdI0VSCi1nZW8jRVItU0sjU2VtZW5hd2kgS2V5aWggQmFocmkgW1NlbWllbi1LZWloLUJhaHJpXSNFUgotZ2VvI0VTI1NwYWluIy0tCi1nZW8jRVMtQU4jQW5kYWx1Y8OtYSNFUwotZ2VvI0VTLUFMI0FsbWVyw61hI0VTLUFOCi1nZW8jRVMtQ0EjQ8OhZGl6I0VTLUFOCi1nZW8jRVMtQ08jQ8OzcmRvYmEjRVMtQU4KLWdlbyNFUy1HUiNHcmFuYWRhI0VTLUFOCi1nZW8jRVMtSCNIdWVsdmEjRVMtQU4KLWdlbyNFUy1KI0phw6luI0VTLUFOCi1nZW8jRVMtTUEjTcOhbGFnYSNFUy1BTgotZ2VvI0VTLVNFI1NldmlsbGEjRVMtQU4KLWdlbyNFUy1BUiNBcmFnw7NuI0VTCi1nZW8jRVMtSFUjSHVlc2NhI0VTLUFSCi1nZW8jRVMtVEUjVGVydWVsI0VTLUFSCi1nZW8jRVMtWiNaYXJhZ296YSNFUy1BUgotZ2VvI0VTLU8jIkFzdHVyaWFzLCBQcmluY2lwYWRvIGRlIiNFUwotZ2VvI0VTLUNOI0NhbmFyaWFzI0VTCi1nZW8jRVMtR0MjTGFzIFBhbG1hcyNFUy1DTgotZ2VvI0VTLVRGI1NhbnRhIENydXogZGUgVGVuZXJpZmUjRVMtQ04KLWdlbyNFUy1TI0NhbnRhYnJpYSNFUwotZ2VvI0VTLUNNI0Nhc3RpbGxhLUxhIE1hbmNoYSNFUwotZ2VvI0VTLUFCI0FsYmFjZXRlI0VTLUNNCi1nZW8jRVMtQ1IjQ3VpZGFkIFJlYWwjRVMtQ00KLWdlbyNFUy1DVSNDdWVuY2EjRVMtQ00KLWdlbyNFUy1HVSNHdWFkYWxhamFyYSNFUy1DTQotZ2VvI0VTLVRPI1RvbGVkbyNFUy1DTQotZ2VvI0VTLUNMI0Nhc3RpbGxhIHkgTGXDs24jRVMKLWdlbyNFUy1BViPDgXZpbGEjRVMtQ0wKLWdlbyNFUy1CVSNCdXJnb3MjRVMtQ0wKLWdlbyNFUy1MRSNMZcOzbiNFUy1DTAotZ2VvI0VTLVAjUGFsZW5jaWEjRVMtQ0wKLWdlbyNFUy1TQSNTYWxhbWFuY2EjRVMtQ0wKLWdlbyNFUy1TRyNTZWdvdmlhI0VTLUNMCi1nZW8jRVMtU08jU29yaWEjRVMtQ0wKLWdlbyNFUy1WQSNWYWxsYWRvbGlkI0VTLUNMCi1nZW8jRVMtWkEjWmFtb3JhI0VTLUNMCi1nZW8jRVMtQ1QjQ2F0YWx1bmEjRVMKLWdlbyNFUy1CI0JhcmNlbG9uYSNFUy1DVAotZ2VvI0VTLUdFI0dpcm9uYSBbR2Vyb25hXSNFUy1DVAotZ2VvI0VTLUwjTGxlaWRhIFtMw6lydWRhXSNFUy1DVAotZ2VvI0VTLVQjVGFycmFnb25hI0VTLUNUCi1nZW8jRVMtRVgjRXh0cmVtYWR1cmEjRVMKLWdlbyNFUy1CQSNCYWRham96I0VTLUVYCi1nZW8jRVMtQ0MjQ8OhY2VyZXMjRVMtRVgKLWdlbyNFUy1HQSNHYWxpY2lhI0VTCi1nZW8jRVMtQyNMYSBDb3J1bmEjRVMtR0EKLWdlbyNFUy1MVSNMdWdvI0VTLUdBCi1nZW8jRVMtT1IjT3JlbnNlI0VTLUdBCi1nZW8jRVMtUE8jUG9udGV2ZWRyYSNFUy1HQQotZ2VvI0VTLVBNI0lzbGFzIEJhbGVhcmVzI0VTCi1nZW8jRVMtTE8jTGEgUmlvamEjRVMKLWdlbyNFUy1NIyJNYWRyaWQsIENvbXVuaWRhZCBkZSIjRVMKLWdlbyNFUy1NVSMiTXVyY2lhLCBSZWdpw7NuIGRlIiNFUwotZ2VvI0VTLU5BIyJOYXZhcnJhLCBDb211bmlkYWQgRm9yYWwgZGUiI0VTCi1nZW8jRVMtUFYjUGHDrXMgVmFzY2kjRVMKLWdlbyNFUy1WSSPDgWxhdmEjRVMtUFYKLWdlbyNFUy1TUyNHdWlww7p6Y29hI0VTLVBWCi1nZW8jRVMtQkkjVml6Y2F5YSNFUy1QVgotZ2VvI0VTLVZDIyJWYWxlbmNpYW5hLCBDb211bmlkYWQiI0VTCi1nZW8jRVMtQSNBbGljYW50ZSNFUy1WQwotZ2VvI0VTLUNTI0Nhc3RlbGzDs24jRVMtVkMKLWdlbyNFUy1WI1ZhbGVuY2lhI0VTLVZDCi1nZW8jRVMtQ0UjQ2V1dGEjRVMKLWdlbyNFUy1NTCNNZWxpbGxhI0VTCi1nZW8jRVQjRXRoaW9waWEjLS0KLWdlbyNGSSNGaW5sYW5kIy0tCi1nZW8jRkktQUwjQWh2ZW5hbm1hYW4gTWFha3VudGEgKEZpKSDDhWxhbmRzIEzDpG4gKFN2KSNGSQotZ2VvI0ZJLUVTI0V0ZWzDpC1TdW9tZW4gTMOkw6RuaSAoRmkpIFPDtmRyYSBGaW5sYW5kcyBMw6RuIChTdikjRkkKLWdlbyNGSS1JUyNJdMOkLVN1b21lbiBMw6TDpG5pIChGaSkgw5ZzdHJhIEZpbmxhbmRzIEzDpG4gKFN2KSNGSQotZ2VvI0ZJLUxMI0xhcGluIEzDpMOkbmkgKEZpKSBMYXBsYW5kcyBMw6RuIChTdikjRkkKLWdlbyNGSS1MUyNMw6Ruc2ktU3VvbWVuIEzDpMOkbmkgKEZpKSBWw6RzdHJhIEZpbmxhbmRzIEzDpG4gKFN2KSNGSQotZ2VvI0ZJLU9MI091bHVuIEzDpMOkbmkgKEZpKSBVbGXDpWJvcmdzIEzDpG4gKFN2KSNGSQotZ2VvI0ZKI0ZpamkjLS0KLWdlbyNGSyNGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcykjLS0KLWdlbyNGTSNGZWRlcmF0ZWQgU3RhdGVzIE9mIE1pY3JvbmVzaWEjLS0KLWdlbyNGTyNGYWVyb2UgSXNsYW5kcyMtLQotZ2VvI0ZSI0ZyYW5jZSMtLQotZ2VvI0ZSLTAxI0FpbiNGUi1WCi1nZW8jRlItMDIjQWlzbmUjRlItUwotZ2VvI0ZSLTAzI0FsbGllciNGUi1DCi1nZW8jRlItMDQjQWxwZXMtRGUtSGF1dGUtUHJvdmVuY2UjRlItVQotZ2VvI0ZSLTA1I0hhdXRlcy1BbHBlcyNGUi1VCi1nZW8jRlItMDYjQWxwZXMtTWFyaXRpbWVzI0ZSLVUKLWdlbyNGUi0wNyNBcmTDqGNoZSNGUi1WCi1nZW8jRlItMDgjQXJkZW5uZXMjRlItRwotZ2VvI0ZSLTA5I0FyacOoZ2UjRlItTgotZ2VvI0ZSLTEwI0F1YmUjRlItRwotZ2VvI0ZSLTExI0F1ZGUjRlItSwotZ2VvI0ZSLTEyI0F2ZXlyb24jRlItTgotZ2VvI0ZSLTEzI0JvdWNoZXMtRHUtUmjDtG5lI0ZSLVUKLWdlbyNGUi0xNCNDYWx2YWRvcyNGUi1QCi1nZW8jRlItMTUjQ2FudGFsI0ZSLUMKLWdlbyNGUi0xNiNDaGFyZW50ZSNGUi1UCi1nZW8jRlItMTcjQ2hhcmVudGUtTWFyaXRpbWUjRlItVAotZ2VvI0ZSLTE4I0NoZXIjRlItRgotZ2VvI0ZSLTE5I0NvcnLDqHplI0ZSLUwKLWdlbyNGUi0yMSNDw7R0ZS1EJ09yI0ZSLUQKLWdlbyNGUi0yMiNDw7R0ZXMtRCdBcm1vciNGUi1FCi1nZW8jRlItMjMjQ3JldXNlI0ZSLUwKLWdlbyNGUi0yNCNEb3Jkb2duZSNGUi1CCi1nZW8jRlItMjUjRG91YnMjRlItSQotZ2VvI0ZSLTI2I0Ryw7RtZSNGUi1WCi1nZW8jRlItMjcjRXVyZSNGUi1RCi1nZW8jRlItMjgjRXVyZS1FdC1Mb2lyI0ZSLUYKLWdlbyNGUi0yOSNGaW5pc3TDqHJlI0ZSLUUKLWdlbyNGUi0yQSNDb3JzZS1EdS1TdWQjRlItSAotZ2VvI0ZSLTJCI0hhdXRlLUNvcnNlI0ZSLUgKLWdlbyNGUi0zMCNHYXJkI0ZSLUsKLWdlbyNGUi0zMSNIYXV0ZS1HYXJvbm5lI0ZSLU4KLWdlbyNGUi0zMiNHZXJzI0ZSLU4KLWdlbyNGUi0zMyNHaXJvbmRlI0ZSLUIKLWdlbyNGUi0zNCNIw6lyYXVsdCNGUi1LCi1nZW8jRlItMzUjSWxsZS1FdC1WaWxhaW5lI0ZSLUUKLWdlbyNGUi0zNiNJbmRyZSNGUi1GCi1nZW8jRlItMzcjSW5kcmUtRXQtTG9pcmUjRlItRgotZ2VvI0ZSLTM4I0lzw6hyZSNGUi1WCi1nZW8jRlItMzkjSnVyYSNGUi1JCi1nZW8jRlItNDAjTGFuZGVzI0ZSLUIKLWdlbyNGUi00MSNMb2lyLUV0LUNoZXIjRlItRgotZ2VvI0ZSLTQyI0xvaXJlI0ZSLVYKLWdlbyNGUi00MyNIYXV0ZS1Mb2lyZSNGUi1DCi1nZW8jRlItNDQjTG9pcmUtQXRsYW50aXF1ZSNGUi1SCi1nZW8jRlItNDUjTG9pcmV0I0ZSLUYKLWdlbyNGUi00NiNMb3QjRlItTgotZ2VvI0ZSLTQ3I0xvdC1FdC1HYXJvbm5lI0ZSLUIKLWdlbyNGUi00OCNMb3rDqHJlI0ZSLUsKLWdlbyNGUi00OSNNYWluZS1FdC1Mb2lyZSNGUi1SCi1nZW8jRlItNTAjTWFuY2hlI0ZSLVAKLWdlbyNGUi01MSNNYXJuZSNGUi1HCi1nZW8jRlItNTIjSGF1dGUtTWFybmUjRlItRwotZ2VvI0ZSLTUzI01heWVubmUjRlItUgotZ2VvI0ZSLTU0I01ldXJ0aGUtRXQtTW9zZWxsZSNGUi1NCi1nZW8jRlItNTUjTWV1c2UjRlItTQotZ2VvI0ZSLTU2I01vcmJpaGFuI0ZSLUUKLWdlbyNGUi01NyNNb3NlbGxlI0ZSLU0KLWdlbyNGUi01OCNOacOodnJlI0ZSLUQKLWdlbyNGUi01OSNOb3JkI0ZSLU8KLWdlbyNGUi02MCNPaXNlI0ZSLVMKLWdlbyNGUi02MSNPcm5lI0ZSLVAKLWdlbyNGUi02MiNQYXMtRGUtQ2FsYWlzI0ZSLU8KLWdlbyNGUi02MyNQdXktRGUtRMO0bWUjRlItQwotZ2VvI0ZSLTY0I1B5csOpbsOpZXMtQXRsYW50aXF1ZXMjRlItQgotZ2VvI0ZSLTY1I0hhdXRlcy1QeXLDqW7DqWVzI0ZSLU4KLWdlbyNGUi02NiNQeXLDqW7DqWVzLU9yaWVudGFsZXMjRlItSwotZ2VvI0ZSLTY3I0Jhcy1SaGluI0ZSLUEKLWdlbyNGUi02OCNIYXV0LVJoaW4jRlItQQotZ2VvI0ZSLTY5I1Jow7RuZSNGUi1WCi1nZW8jRlItNzAjSGF1dGUtU2HDtG5lI0ZSLUkKLWdlbyNGUi03MSNTYcO0bmUtRXQtTG9pcmUjRlItRAotZ2VvI0ZSLTcyI1NhcnRoZSNGUi1SCi1nZW8jRlItNzMjU2F2b2llI0ZSLVYKLWdlbyNGUi03NCNIYXV0ZS1TYXZvaWUjRlItVgotZ2VvI0ZSLTc1I1BhcmlzI0ZSLUoKLWdlbyNGUi03NiNTZWluZS1NYXJpdGltZSNGUi1RCi1nZW8jRlItNzcjU2VpbmUtRXQtTWFybmUjRlItSgotZ2VvI0ZSLTc4I1l2ZWxpbmVzI0ZSLUoKLWdlbyNGUi03OSNEZXV4LVPDqHZyZXMjRlItQgotZ2VvI0ZSLTgwI1NvbW1lI0ZSLVMKLWdlbyNGUi04MSNUYXJuI0ZSLU4KLWdlbyNGUi04MiNUYXJuLUV0LUdhcm9ubmUjRlItTgotZ2VvI0ZSLTgzI1ZhciNGUi1VCi1nZW8jRlItODQjVmF1Y2x1c2UjRlItVQotZ2VvI0ZSLTg1I1ZlbmTDqWUjRlItUgotZ2VvI0ZSLTg2I1ZpZW5uZSNGUi1UCi1nZW8jRlItODcjSGF1dGUtVmllbm5lI0ZSLUwKLWdlbyNGUi04OCNWb3NnZXMjRlItTQotZ2VvI0ZSLTg5I1lvbm5lI0ZSLUQKLWdlbyNGUi05MCNUZXJyaXRvaXJlIERlIEJlbGZvcnQjRlItSQotZ2VvI0ZSLTkxI0Vzc29ubmUjRlItSgotZ2VvI0ZSLTkyI0hhdXRzLURlLVNlaW5lI0ZSLUoKLWdlbyNGUi05MyNTZWluZS1TYWludC1EZW5pcyNGUi1KCi1nZW8jRlItOTQjVmFsLURlLU1hcm5lI0ZSLUoKLWdlbyNGUi05NSNWYWwtRCdPaXNlI0ZSLUoKLWdlbyNGUi1BI0Fsc2FjZSNGUgotZ2VvI0ZSLUIjQXF1aXRhaW5lI0ZSCi1nZW8jRlItQyNBdXZlcmduZSNGUgotZ2VvI0ZSLUQjQm91cmdvZ25lI0ZSCi1nZW8jRlItRSNCcmV0YWduZSNGUgotZ2VvI0ZSLUYjQ2VudHJlI0ZSCi1nZW8jRlItRyNDaGFtcGFnbmUtQXJkZW5uZSNGUgotZ2VvI0ZSLUgjQ29yc2UjRlIKLWdlbyNGUi1JI0ZyYW5jaGUtQ29tdMOpI0ZSCi1nZW8jRlItSiNJbGUtRGUtRnJhbmNlI0ZSCi1nZW8jRlItSyNMYW5ndWVkb2MtUm91c3NpbGxvbiNGUgotZ2VvI0ZSLUwjTGltb3VzaW4jRlIKLWdlbyNGUi1NI0xvcnJhaW5lI0ZSCi1nZW8jRlItTiNNaWRpLVB5csOpbsOpZXMjRlIKLWdlbyNGUi1PI05vcmQtUGFzLURlLUNhbGFpcyNGUgotZ2VvI0ZSLVAjQmFzc2UtTm9ybWFuZGllI0ZSCi1nZW8jRlItUSNIYXV0ZS1Ob3JtYW5kaWUjRlIKLWdlbyNGUi1SI1BheXMgRGUgTGEgTG9pcmUjRlIKLWdlbyNGUi1TI1BpY2FyZGllI0ZSCi1nZW8jRlItVCNQb2l0b3UtQ2hhcmVudGVzI0ZSCi1nZW8jRlItVSNQcm92ZW5jZS1BbHBlcy1Dw7R0ZSBEJ0F6dXIjRlIKLWdlbyNGUi1WI1Jow7RuZS1BbHBlcyNGUgotZ2VvI0dBI0dhYm9uIy0tCi1nZW8jR0IjVW5pdGVkIEtpbmdkb20jLS0KLWdlbyNHQi1BTlQjQW50cmltI0dCLU5JUgotZ2VvI0dCLUFSRCNBcmRzI0dCLU5JUgotZ2VvI0dCLUFSTSNBcm1hZ2gjR0ItTklSCi1nZW8jR0ItQVZOI0F2b24jR0ItRU5HCi1nZW8jR0ItQkRGI0JlZGZvcmRzaGlyZSNHQi1FTkcKLWdlbyNHQi1CRlMjQmVsZmFzdCNHQi1OSVIKLWdlbyNHQi1CS00jQnVja2luZ2hhbXNoaXJlI0dCLUVORwotZ2VvI0dCLUJMQSNCYWxseW1lbmEjR0ItTklSCi1nZW8jR0ItQkxZI0JhbGx5bW9uZXkjR0ItTklSCi1nZW8jR0ItQk5CI0JhbmJyaWRnZSNHQi1OSVIKLWdlbyNHQi1CT1IjQm9yZGVycyBSZWdpb24jR0ItU0NUCi1nZW8jR0ItQlJLI0JlcmtzaGlyZSNHQi1FTkcKLWdlbyNHQi1DQU0jQ2FtYnJpZGdlc2hpcmUjR0ItRU5HCi1nZW8jR0ItQ0VOI0NlbnRyYWwgUmVnaW9uI0dCLVNDVAotZ2VvI0dCLUNHViNDcmFpZ2F2b24jR0ItTklSCi1nZW8jR0ItQ0hBI0NoYW5uZWwgSXNsYW5kcyNHQgotZ2VvI0dCLUNIUyNDaGVzaGlyZSNHQi1FTkcKLWdlbyNHQi1DS0YjQ2Fycmlja2Zlcmd1cyNHQi1OSVIKLWdlbyNHQi1DS1QjQ29va3N0b3duI0dCLU5JUgotZ2VvI0dCLUNMUiNDb2xlcmFpbmUjR0ItTklSCi1nZW8jR0ItQ0xWI0NsZXZlbGFuZCNHQi1FTkcKLWdlbyNHQi1DTUEjQ3VtYnJpYSNHQi1FTkcKLWdlbyNHQi1DT04jQ29ybndhbGwjR0ItRU5HCi1nZW8jR0ItQ1NSI0Nhc3RsZXJlYWdoI0dCLU5JUgotZ2VvI0dCLUNXRCNDbHd5ZCNHQi1XTFMKLWdlbyNHQi1EQlkjRGVyYnlzaGlyZSNHQi1FTkcKLWdlbyNHQi1ERkQjRHlmZWQjR0ItV0xTCi1nZW8jR0ItREdOI0R1bmdhbm5vbiNHQi1OSVIKLWdlbyNHQi1ER1kjRHVtZnJpZXMgJiBHYWxsb3dheSBSZWdpb24jR0ItU0NUCi1nZW8jR0ItRE9SI0RvcnNldCNHQi1FTkcKLWdlbyNHQi1ET1cjRG93biNHQi1OSVIKLWdlbyNHQi1EUlkjRGVycnkjR0ItTklSCi1nZW8jR0ItRFVSI0R1cmhhbSNHQi1FTkcKLWdlbyNHQi1EVlYjRGV2b24jR0ItRU5HCi1nZW8jR0ItRU5HI0VuZ2xhbmQjR0IKLWdlbyNHQi1FU1MjRXNzZXgjR0ItRU5HCi1nZW8jR0ItRVNYI0Vhc3QgU3Vzc2V4I0dCLUVORwotZ2VvI0dCLUZFUiNGZXJtYW5hZ2gjR0ItTklSCi1nZW8jR0ItRklGI0ZpZmUgUmVnaW9uI0dCLVNDVAotZ2VvI0dCLUdMUyNHbG91Y2VzdGVyc2hpcmUjR0ItRU5HCi1nZW8jR0ItR01QI0dyYW1waWFuIFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1HTlQjR3dlbnQjR0ItV0xTCi1nZW8jR0ItR1NZI0d1ZXJuc2V5I0dCLUNIQQotZ2VvI0dCLUdUTCNHcmVhdGVyIExvbmRvbiNHQi1FTkcKLWdlbyNHQi1HVE0jR3JlYXRlciBNYW5jaGVzdGVyI0dCLUVORwotZ2VvI0dCLUdXTiNHd3luZWRkI0dCLVdMUwotZ2VvI0dCLUhBTSNIYW1wc2hpcmUjR0ItRU5HCi1nZW8jR0ItSExEI0hpZ2hsYW5kIFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1IUlQjSGVydGZvcmRzaGlyZSNHQi1FTkcKLWdlbyNHQi1IVU0jSHVtYmVyc2lkZSNHQi1FTkcKLWdlbyNHQi1IV1IjSGVyZWZvcmQgQW5kIFdvcmNlc3RlciNHQi1FTkcKLWdlbyNHQi1JT00jSXNsZSBPZiBNYW4jR0IKLWdlbyNHQi1JT1MjSXNsZXMgT2YgU2NpbGx5I0dCLUVORwotZ2VvI0dCLUlPVyNJc2xlIE9mIFdpZ2h0I0dCLUVORwotZ2VvI0dCLUpTWSNKZXJzZXkjR0ItQ0hBCi1nZW8jR0ItS0VOI0tlbnQjR0ItRU5HCi1nZW8jR0ItTEFOI0xhbmNhc2hpcmUjR0ItRU5HCi1nZW8jR0ItTEVDI0xlaWNlc3RlcnNoaXJlI0dCLUVORwotZ2VvI0dCLUxJTiNMaW5jb2xuc2hpcmUjR0ItRU5HCi1nZW8jR0ItTE1WI0xpbWF2YWR5I0dCLU5JUgotZ2VvI0dCLUxSTiNMYXJuZSNHQi1OSVIKLWdlbyNHQi1MU0IjTGlzYnVybiNHQi1OSVIKLWdlbyNHQi1MVE4jTG90aGlhbiBSZWdpb24jR0ItU0NUCi1nZW8jR0ItTUZUI01hZ2hlcmFmZWx0I0dCLU5JUgotZ2VvI0dCLU1HTSNNaWQgR2xhbW9yZ2FuI0dCLVdMUwotZ2VvI0dCLU1TWSNNZXJzZXlzaWRlI0dCLUVORwotZ2VvI0dCLU1ZTCNNb3lsZSNHQi1OSVIKLWdlbyNHQi1OQkwjTm9ydGh1bWJlcmxhbmQjR0ItRU5HCi1nZW8jR0ItTkROI05vcnRoIERvd24jR0ItTklSCi1nZW8jR0ItTkZLI05vcmZvbGsjR0ItRU5HCi1nZW8jR0ItTklSI05vcnRoZXJuIElyZWxhbmQjR0IKLWdlbyNHQi1OVEEjTmV3dG9uYWJiZXkjR0ItTklSCi1nZW8jR0ItTlRII05vcnRoYW1wdG9uc2hpcmUjR0ItRU5HCi1nZW8jR0ItTlRUI05vdHRpbmdoYW1zaGlyZSNHQi1FTkcKLWdlbyNHQi1OWUsjTm9ydGggWW9ya3NoaXJlI0dCLUVORwotZ2VvI0dCLU5ZTSNOZXdyeSBBbmQgTW91cm5lI0dCLU5JUgotZ2VvI0dCLU9NSCNPbWFnaCNHQi1OSVIKLWdlbyNHQi1PUksjT3JrbmV5I0dCLVNDVAotZ2VvI0dCLU9YRiNPeGZvcmRzaGlyZSNHQi1FTkcKLWdlbyNHQi1QT1cjUG93eXMjR0ItV0xTCi1nZW8jR0ItU0NUI1Njb3RsYW5kI0dCCi1nZW8jR0ItU0ZLI1N1ZmZvbGsjR0ItRU5HCi1nZW8jR0ItU0dNI1NvdXRoIEdsYW1vcmdhbiNHQi1XTFMKLWdlbyNHQi1TSFIjU2hyb3BzaGlyZSNHQi1FTkcKLWdlbyNHQi1TT00jU29tZXJzZXQjR0ItRU5HCi1nZW8jR0ItU1JZI1N1cnJleSNHQi1FTkcKLWdlbyNHQi1TVEIjU3RyYWJhbmUjR0ItTklSCi1nZW8jR0ItU1REI1N0cmF0aGNseWRlIFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1TVFMjU3RhZmZvcmRzaGlyZSNHQi1FTkcKLWdlbyNHQi1TWUsjU291dGggWW9ya3NoaXJlI0dCLUVORwotZ2VvI0dCLVRBWSNUYXlzaWRlIFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1UV1IjVHluZSBBbmQgV2VhciNHQi1FTkcKLWdlbyNHQi1XQVIjV2Fyd2lja3NoaXJlI0dCLUVORwotZ2VvI0dCLVdHTSNXZXN0IEdsYW1vcmdhbiNHQi1XTFMKLWdlbyNHQi1XSUwjV2lsdHNoaXJlI0dCLUVORwotZ2VvI0dCLVdJUyNXZXN0ZXJuIElzbGVzI0dCLVNDVAotZ2VvI0dCLVdMUyNXYWxlcyNHQgotZ2VvI0dCLVdNRCNXZXN0IE1pZGxhbmRzI0dCLUVORwotZ2VvI0dCLVdTWCNXZXN0IFN1c3NleCNHQi1FTkcKLWdlbyNHQi1XWUsjV2VzdCBZb3Jrc2hpcmUjR0ItRU5HCi1nZW8jR0ItWkVUI1NoZXRsYW5kIChaZXRsYW5kKSNHQi1TQ1QKLWdlbyNHRCNHcmVuYWRhIy0tCi1nZW8jR0UjR2VvcmdpYSMtLQotZ2VvI0dGI0ZyZW5jaCBHdWlhbmEjLS0KLWdlbyNHSCNHaGFuYSMtLQotZ2VvI0dJI0dpYnJhbHRhciMtLQotZ2VvI0dMI0dyZWVubGFuZCMtLQotZ2VvI0dNI0dhbWJpYSMtLQotZ2VvI0dOI0d1aW5lYSMtLQotZ2VvI0dQI0d1YWRlbG91cGUjLS0KLWdlbyNHUSNFcXVhdG9yaWFsIEd1aW5lYSMtLQotZ2VvI0dSI0dyZWVjZSMtLQotZ2VvI0dTI0dlb3JnaWEgJiBTYW5kd2ljaCBJc2xhbmRzIy0tCi1nZW8jR1QjR3VhdGVtYWxhIy0tCi1nZW8jR1UjR3VhbSMtLQotZ2VvI0dXI0d1aW5lYS1CaXNzYXUjLS0KLWdlbyNHWSNHdXlhbmEjLS0KLWdlbyNISyNIb25nIEtvbmcjLS0KLWdlbyNITiNIb25kdXJhcyMtLQotZ2VvI0hSI0Nyb2F0aWEjLS0KLWdlbyNIVCNIYWl0aSMtLQotZ2VvI0hVI0h1bmdhcnkjLS0KLWdlbyNJRCNJbmRvbmVzaWEjLS0KLWdlbyNJRSNJcmVsYW5kIy0tCi1nZW8jSUwjSXNyYWVsIy0tCi1nZW8jSU4jSW5kaWEjLS0KLWdlbyNJTyNJbmRpYW4gT2NlYW4gVGVycml0b3J5Iy0tCi1nZW8jSVEjSXJhcSMtLQotZ2VvI0lSIyJJcmFuLCBJc2xhbWljIFJlcHVibGljIG9mIiMtLQotZ2VvI0lTI0ljZWxhbmQjLS0KLWdlbyNJVCNJdGFseSMtLQotZ2VvI0lULTIxI1BpZW1vbnRlI0lUCi1nZW8jSVQtQUwjQWxlc3NhbmRyaWEjSVQtMjEKLWdlbyNJVC1BVCNBc3RpI0lULTIyCi1nZW8jSVQtQkkjQmllbGxhI0lULTIzCi1nZW8jSVQtQU8jQW9zdGEgQW9zdGUgKGZyKSNJVC0yMwotZ2VvI0lULUNOI0N1bmVvI0lULTI0Ci1nZW8jSVQtTk8jTm92YXJhI0lULTI1Ci1nZW8jSVQtQkcjQmVyZ2FtbyNJVC0yNQotZ2VvI0lULUJTI0JyZXNjaWEjSVQtMjUKLWdlbyNJVC1DTyNDb21vI0lULTI1Ci1nZW8jSVQtQ1IjQ3JlbW9uYSNJVC0yNQotZ2VvI0lULUxDI0xlY2NvI0lULTI1Ci1nZW8jSVQtTE8jTG9kaSNJVC0yNQotZ2VvI0lULU1OI01hbnRvdmEjSVQtMjUKLWdlbyNJVC1NSSNNaWxhbm8jSVQtMjUKLWdlbyNJVC1QViNQYXZpYSNJVC0yNQotZ2VvI0lULVNPI1NvbmRyaW8jSVQtMjUKLWdlbyNJVC1WQSNWYXJlc2UjSVQtMjUKLWdlbyNJVC1UTyNUb3Jpbm8jSVQtMjYKLWdlbyNJVC1WQiNWZXJiYW5vLUN1c2lvLU9zc29sYSNJVC0yNwotZ2VvI0lULVZDI1ZlcmNlbGxpI0lULTI4Ci1nZW8jSVQtMjMjVmFsbGUgZCdBb3N0YSNJVAotZ2VvI0lULTI1I0xvbWJhcmRpYSNJVAotZ2VvI0lULTMyI1RyZW50aW5vLUFsdG8gQWRpZ2UjSVQKLWdlbyNJVC1CWiNCb2x6YW5vIEJvemVuIChkZSkjSVQtMzIKLWdlbyNJVC1UTiNUcmVudG8jSVQtMzIKLWdlbyNJVC0zNCNWZW5ldG8jSVQKLWdlbyNJVC1CTCNCZWxsdW5vI0lULTM0Ci1nZW8jSVQtUEQjUGFkb3ZhI0lULTM0Ci1nZW8jSVQtUk8jUm92aWdvI0lULTM0Ci1nZW8jSVQtVFYjVHJldmlzbyNJVC0zNAotZ2VvI0lULVZFI1ZlbmV6aWEjSVQtMzQKLWdlbyNJVC1WUiNWZXJvbmEjSVQtMzQKLWdlbyNJVC1WSSNWaWNlbnphI0lULTM0Ci1nZW8jSVQtMzYjRnJpdWxpLVZlbmV6aWEgR2l1bGlhI0lUCi1nZW8jSVQtR08jR29yaXppYSNJVC0zNgotZ2VvI0lULVBOI1BvcmRlbm9uZSNJVC0zNgotZ2VvI0lULVRTI1RyaWVzdGUjSVQtMzYKLWdlbyNJVC1VRCNVZGluZSNJVC0zNgotZ2VvI0lULTQyI0xpZ3VyaWEjSVQKLWdlbyNJVC1HRSNHZW5vdmEjSVQtNDIKLWdlbyNJVC1JTSNJbXBlcmlhI0lULTQyCi1nZW8jSVQtU1AjTGEgU3BlemlhI0lULTQyCi1nZW8jSVQtU1YjU2F2b25hI0lULTQyCi1nZW8jSVQtNDUjRW1pbGlhLVJvbWFnbmEjSVQKLWdlbyNJVC1CTyNCb2xvZ25hI0lULTQ1Ci1nZW8jSVQtRkUjRmVycmFyYSNJVC00NQotZ2VvI0lULUZPI0ZvcmzDrCNJVC00NQotZ2VvI0lULU1PI01vZGVuYSNJVC00NQotZ2VvI0lULVBSI1Bhcm1hI0lULTQ1Ci1nZW8jSVQtUEMjUGlhY2VuemEjSVQtNDUKLWdlbyNJVC1SQSNSYXZlbm5hI0lULTQ1Ci1nZW8jSVQtUkUjUmVnZ2lvIEVtaWxpYSNJVC00NQotZ2VvI0lULVJOI1JpbWluaSNJVC00NQotZ2VvI0lULTUyI1Rvc2NhbmEjSVQKLWdlbyNJVC1BUiNBcmV6em8jSVQtNTIKLWdlbyNJVC1GSSNGaXJlbnplI0lULTUyCi1nZW8jSVQtR1IjR3Jvc3NldG8jSVQtNTIKLWdlbyNJVC1MSSNMaXZvcm5vI0lULTUyCi1nZW8jSVQtTFUjTHVjY2EjSVQtNTIKLWdlbyNJVC1NUyNNYXNzYS1DYXJyYXJhI0lULTUyCi1nZW8jSVQtUEkjUGlzYSNJVC01MgotZ2VvI0lULVBUI1Bpc3RvaWEjSVQtNTIKLWdlbyNJVC1QTyNQcmF0byNJVC01MgotZ2VvI0lULVNJI1NpZW5hI0lULTUyCi1nZW8jSVQtNTUjVW1icmlhI0lUCi1nZW8jSVQtUEcjUGVydWdpYSNJVC01NQotZ2VvI0lULVRSI1Rlcm5pI0lULTU1Ci1nZW8jSVQtNTcjTWFyY2hlI0lUCi1nZW8jSVQtQU4jQW5jb25hI0lULTU3Ci1nZW8jSVQtQVAjQXNjb2xpIFBpY2VubyNJVC01NwotZ2VvI0lULU1DI01hY2VyYXRhI0lULTU3Ci1nZW8jSVQtUFMjUGVzYXJvIGUgVXJiaW5vI0lULTU3Ci1nZW8jSVQtNjIjTGF6aW8jSVQKLWdlbyNJVC1GUiNGcm9zaW5vbmUjSVQtNjIKLWdlbyNJVC1MVCNMYXRpbmEjSVQtNjIKLWdlbyNJVC1SSSNSaWV0aSNJVC02MgotZ2VvI0lULVJNI1JvbWEjSVQtNjIKLWdlbyNJVC1WVCNWaXRlcmJvI0lULTYyCi1nZW8jSVQtNjUjQWJydXp6byNJVAotZ2VvI0lULUNII0NoaWV0aSNJVC02NQotZ2VvI0lULUFRI0wnQXF1aWxhI0lULTY1Ci1nZW8jSVQtUEUjUGVzY2FyYSNJVC02NQotZ2VvI0lULVRFI1RlcmFtbyNJVC02NQotZ2VvI0lULTY3I01vbGlzZSNJVAotZ2VvI0lULUNCI0NhbXBvYmFzc28jSVQtNjcKLWdlbyNJVC1JUyNJc2VybmlhI0lULTY3Ci1nZW8jSVQtNzIjQ2FtcGFuaWEjSVQKLWdlbyNJVC1CTiNCZW5ldmVudG8jSVQtNzIKLWdlbyNJVC1DRSNDYXNlcnRhI0lULTcyCi1nZW8jSVQtTkEjTmFwb2xpI0lULTcyCi1nZW8jSVQtU0EjU2FsZXJubyNJVC03MgotZ2VvI0lULUFWI0F2ZWxsaW5vI0lULTcyCi1nZW8jSVQtNzUjUHVnbGlhI0lUCi1nZW8jSVQtQkEjQmFyaSNJVC03NQotZ2VvI0lULUJSI0JyaW5kaXNpI0lULTc1Ci1nZW8jSVQtRkcjRm9nZ2lhI0lULTc1Ci1nZW8jSVQtTEUjTGVjY2UjSVQtNzUKLWdlbyNJVC1UQSNUYXJhbnRvI0lULTc1Ci1nZW8jSVQtNzcjQmFzaWxpY2F0YSNJVAotZ2VvI0lULU1UI01hdGVyYSNJVC03NwotZ2VvI0lULVBaI1BvdGVuemEjSVQtNzcKLWdlbyNJVC03OCNDYWxhYnJpYSNJVAotZ2VvI0lULUNaI0NhdGFuemFybyNJVC03OAotZ2VvI0lULUNTI0Nvc2VuemEjSVQtNzgKLWdlbyNJVC1LUiNDcm90b25lI0lULTc4Ci1nZW8jSVQtUkMjUmVnZ2lvIENhbGFicmlhI0lULTc4Ci1nZW8jSVQtVlYjVmlibyBWYWxlbnRpYSNJVC03OAotZ2VvI0lULTgyI1NpY2lsaWEjSVQKLWdlbyNJVC1BRyNBZ3JpZ2VudG8jSVQtODIKLWdlbyNJVC1DTCNDYWx0YW5pc3NldHRhI0lULTgyCi1nZW8jSVQtQ1QjQ2F0YW5pYSNJVC04MgotZ2VvI0lULUVOI0VubmEjSVQtODIKLWdlbyNJVC1NRSNNZXNzaW5hI0lULTgyCi1nZW8jSVQtUEEjUGFsZXJtbyNJVC04MgotZ2VvI0lULVJHI1JhZ3VzYSNJVC04MgotZ2VvI0lULVNSI1NpcmFjdXNhI0lULTgyCi1nZW8jSVQtVFAjVHJhcGFuaSNJVC04MgotZ2VvI0lULTg4I1NhcmRlZ25hI0lUCi1nZW8jSVQtQ0EjQ2FnbGlhcmkjSVQtODgKLWdlbyNJVC1OVSNOdW9ybyNJVC04OAotZ2VvI0lULU9SI09yaXN0YW5vI0lULTg4Ci1nZW8jSVQtU1MjU2Fzc2FyaSNJVC04OAotZ2VvI0pNI0phbWFpY2EjLS0KLWdlbyNKTyNKb3JkYW4jLS0KLWdlbyNKUCNKYXBhbiMtLQotZ2VvI0pQLTAxI0hva2thaWRvI0pQCi1nZW8jSlAtMDIjQW9tb3JpI0pQCi1nZW8jSlAtMDMjSXdhdGUjSlAKLWdlbyNKUC0wNCNNaXlhZ2kjSlAKLWdlbyNKUC0wNSNBa2l0YSNKUAotZ2VvI0pQLTA2I1lhbWFnYXRhI0pQCi1nZW8jSlAtMDcjSHVrdXNpbWEgKEZ1a3VzaGltYSkjSlAKLWdlbyNKUC0wOCNJYmFyYWtpI0pQCi1nZW8jSlAtMDkjVG90aWdpIChUb2NoaWdpKSNKUAotZ2VvI0pQLTEwI0d1bm1hI0pQCi1nZW8jSlAtMTEjU2FpdGFtYSNKUAotZ2VvI0pQLTEyI1RpYmEgKENoaWJhKSNKUAotZ2VvI0pQLTEzI1Rva3lvI0pQCi1nZW8jSlAtMTQjS2FuYWdhd2EjSlAKLWdlbyNKUC0xNSNOaWlnYXRhI0pQCi1nZW8jSlAtMTYjVG95YW1hI0pQCi1nZW8jSlAtMTcjSXNpa2F3YSAoSXNoaWthd2EpI0pQCi1nZW8jSlAtMTgjSHVrdWkgKEZ1a3VpKSNKUAotZ2VvI0pQLTE5I1lhbWFuYXNpIChZYW1hbmFzaGkpI0pQCi1nZW8jSlAtMjAjTmFnYW5vI0pQCi1nZW8jSlAtMjEjR2lodSAoR2lmdSkjSlAKLWdlbyNKUC0yMiNTaXp1b2thIChTaGl6dW9rYSkjSlAKLWdlbyNKUC0yMyNBaXRpIChBaWNoaSkjSlAKLWdlbyNKUC0yNCNNaWUjSlAKLWdlbyNKUC0yNSNTaWdhIChTaGlnYSkjSlAKLWdlbyNKUC0yNiNLeW90byNKUAotZ2VvI0pQLTI3I09zYWthI0pQCi1nZW8jSlAtMjgjSHlvZ28jSlAKLWdlbyNKUC0yOSNOYXJhI0pQCi1nZW8jSlAtMzAjV2FrYXlhbWEjSlAKLWdlbyNKUC0zMSNUb3R0b3JpI0pQCi1nZW8jSlAtMzIjU2ltYW5lIChTaGltYW5lKSNKUAotZ2VvI0pQLTMzI09rYXlhbWEjSlAKLWdlbyNKUC0zNCNIaXJvc2ltYSAoSGlyb3NoaW1hKSNKUAotZ2VvI0pQLTM1I1lhbWFndXRpIChZYW1hZ3VjaGkpI0pQCi1nZW8jSlAtMzYjVG9rdXNpbWEgKFRva3VzaGltYSkjSlAKLWdlbyNKUC0zNyNLYWdhd2EjSlAKLWdlbyNKUC0zOCNFaGltZSNKUAotZ2VvI0pQLTM5I0tvdGkgKEtvY2hpKSNKUAotZ2VvI0pQLTQwI0h1a3Vva2EgKEZ1a3Vva2EpI0pQCi1nZW8jSlAtNDEjU2FnYSNKUAotZ2VvI0pQLTQyI05hZ2FzYWtpI0pQCi1nZW8jSlAtNDMjS3VtYW1vdG8jSlAKLWdlbyNKUC00NCNPaXRhI0pQCi1nZW8jSlAtNDUjTWl5YXpha2kjSlAKLWdlbyNKUC00NiNLYWdvc2ltYSAoS2Fnb3NoaW1hKSNKUAotZ2VvI0pQLTQ3I09raW5hd2EjSlAKLWdlbyNLRSNLZW55YSMtLQotZ2VvI0tHI0t5cmd5enN0YW4jLS0KLWdlbyNLSCNDYW1ib2RpYSMtLQotZ2VvI0tJI0tpcmliYXRpIy0tCi1nZW8jS00jQ29tb3JvcyMtLQotZ2VvI0tOI1N0IEtpdHRzLU5ldmlzIy0tCi1nZW8jS1AjIktvcmVhLCBEZW0gUGVvcGxlJ3MgUmVwdWJsaWMiIy0tCi1nZW8jS1IjIktvcmVhLCBSZXB1YmxpYyBvZiIjLS0KLWdlbyNLUi0xMSNTZW91bCBUZXVnYnllb2xzaSNLUgotZ2VvI0tSLTI2I0J1c2FuIEd3YW5nJ3llb2dzaSNLUgotZ2VvI0tSLTI3I0RhZWd1IEd3YW5nJ3llb2dzaSNLUgotZ2VvI0tSLTMwI0RhZWplb24gR3dhbmcneWVvZ3NpI0tSCi1nZW8jS1ItMjkjR3dhbmdqdSBHd2FuZyd5ZW9nc2kjS1IKLWdlbyNLUi0yOCNJbmNoZW9uIEd3YW5nJ3llb2dzaSNLUgotZ2VvI0tSLTMxI1Vsc2FuIEd3YW5nJ3llb2dzaSNLUgotZ2VvI0tSLTQzI0NodW5nY2hlb25nYnVnZG8jS1IKLWdlbyNLUi00NCNDaHVuZ2NoZW9uZ25hbWRvI0tSCi1nZW8jS1ItNDIjR2FuZyd3ZW9uZG8jS1IKLWdlbyNLUi00MSNHeWVvbmdnaWRvI0tSCi1nZW8jS1ItNDcjR3llb25nc2FuZ2J1Z2RvI0tSCi1nZW8jS1ItNDgjR3llb25nc2FuZ25hbWRvI0tSCi1nZW8jS1ItNDkjSmVqdWRvI0tSCi1nZW8jS1ItNDUjSmVvbnJhYnVnZG8jS1IKLWdlbyNLUi00NiNKZW9ucmFuYW1kbyNLUgotZ2VvI0tXI0t1d2FpdCMtLQotZ2VvI0tZI0NheW1hbiBJc2xhbmRzIy0tCi1nZW8jS1ojS2F6YWtoc3RhbiMtLQotZ2VvI0xBI0xhbyBQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljIy0tCi1nZW8jTEIjTGViYW5vbiMtLQotZ2VvI0xDI1NhaW50IEx1Y2lhIy0tCi1nZW8jTEkjTGllY2h0ZW5zdGVpbiMtLQotZ2VvI0xLI1NyaSBMYW5rYSMtLQotZ2VvI0xSI0xpYmVyaWEjLS0KLWdlbyNMUyNMZXNvdGhvIy0tCi1nZW8jTFQjTGl0aHVhbmlhIy0tCi1nZW8jTFUjTHV4ZW1ib3VyZyMtLQotZ2VvI0xWI0xhdHZpYSMtLQotZ2VvI0xZI0x5YmlhbiBBcmFiIEphbWFoaXJpeWEjLS0KLWdlbyNNQSNNb3JvY2NvIy0tCi1nZW8jTUMjTW9uYWNvIy0tCi1nZW8jTUQjTW9sZG92YSMtLQotZ2VvI01HI01hZGFnYXNjYXIjLS0KLWdlbyNNSCNNYXJzaGFsbCBJc2xhbmRzIy0tCi1nZW8jTUsjRm9ybWVyIFl1Z29zbGF2IFJlcHVibGljIE9mIE1hY2Vkb25pYSMtLQotZ2VvI01MI01hbGkjLS0KLWdlbyNNTSNNeWFubWFyIChGb3JtZXIgQnVybWEpIy0tCi1nZW8jTU4jTW9uZ29saWEjLS0KLWdlbyNNTyNNYWNhdSMtLQotZ2VvI01QI05vcnRoZXJuIE1hcmlhbmFzIy0tCi1nZW8jTVEjTWFydGluaXF1ZSMtLQotZ2VvI01SI01hdXJpdGFuaWEjLS0KLWdlbyNNUyNNb250c2VycmF0Iy0tCi1nZW8jTVQjTWFsdGEjLS0KLWdlbyNNVSNNYXVyaXRpdXMjLS0KLWdlbyNNViNNYWxkaXZlcyMtLQotZ2VvI01XI01hbGF3aSMtLQotZ2VvI01YI01leGljbyMtLQotZ2VvI01YLUFHVSNBZ3Vhc2NhbGllbnRlcyNNWAotZ2VvI01YLUJDTiNCYWphIENhbGlmb3JuaWEjTVgKLWdlbyNNWC1CQ1MjQmFqYSBDYWxpZm9ybmlhIFN1ciNNWAotZ2VvI01YLUNBTSNDYW1wZWNoZSNNWAotZ2VvI01YLUNISCNDaGlodWFodWEjTVgKLWdlbyNNWC1DSFAjQ2hpYXBhcyNNWAotZ2VvI01YLUNPQSNDb2FodWlsYSNNWAotZ2VvI01YLUNPTCNDb2xpbWEjTVgKLWdlbyNNWC1ERiNEaXN0cml0byBGZWRlcmFsI01YCi1nZW8jTVgtRFVSI0R1cmFuZ28jTVgKLWdlbyNNWC1HUk8jR3VlcnJlcm8jTVgKLWdlbyNNWC1HVUEjR3VhbmFqdWF0byNNWAotZ2VvI01YLUhJRCNIaWRhbGdvI01YCi1nZW8jTVgtSkFMI0phbGlzY28jTVgKLWdlbyNNWC1NRVgjTWV4aWNvI01YCi1nZW8jTVgtTUlDI01pY2hvYWNhbiNNWAotZ2VvI01YLU1PUiNNb3JlbG9zI01YCi1nZW8jTVgtTkFZI05heWFyaXQjTVgKLWdlbyNNWC1OTEUjTnVldm8gTGVvbiNNWAotZ2VvI01YLU9BWCNPYXhhY2EjTVgKLWdlbyNNWC1QVUUjUHVlYmxhI01YCi1nZW8jTVgtUVVFI1F1ZXJldGFybyNNWAotZ2VvI01YLVJPTyNRdWludGFuYSBSb28jTVgKLWdlbyNNWC1TSU4jU2luYWxvYSNNWAotZ2VvI01YLVNMUCNTYW4gTHVpcyBQb3Rvc2kjTVgKLWdlbyNNWC1TT04jU29ub3JhI01YCi1nZW8jTVgtVEFCI1RhYmFzY28jTVgKLWdlbyNNWC1UQU0jVGFtYXVsaXBhcyNNWAotZ2VvI01YLVRMQSNUbGF4Y2FsYSNNWAotZ2VvI01YLVZFUiNWZXJhY3J1eiNNWAotZ2VvI01YLVlVQyNZdWNhdGFuI01YCi1nZW8jTVgtWkFDI1phY2F0ZWNhcyNNWAotZ2VvI01ZI01hbGF5c2lhIy0tCi1nZW8jTVojTW96YW1iaXF1ZSMtLQotZ2VvI05BI05hbWliaWEjLS0KLWdlbyNOQyNOZXcgQ2FsZWRvbmlhIy0tCi1nZW8jTkUjTmlnZXIjLS0KLWdlbyNORiNOb3Jmb2xrIElzbGFuZCMtLQotZ2VvI05HI05pZ2VyaWEjLS0KLWdlbyNORy1GQyNBYnVqYSBDYXBpdGFsIFRlcnJpdG9yeSNORwotZ2VvI05HLUFCI0FiaWEjTkcKLWdlbyNORy1BRCNBZGFtYXdhI05HCi1nZW8jTkctQUsjQWt3YSBJYm9tI05HCi1nZW8jTkctQU4jQW5hbWJyYSNORwotZ2VvI05HLUJBI0JhdWNoaSNORwotZ2VvI05HLUJZI0JheWVsc2EjTkcKLWdlbyNORy1CRSNCZW51ZSNORwotZ2VvI05HLUJPI0Jvcm5vI05HCi1nZW8jTkctQ1IjQ3Jvc3MgUml2ZXIjTkcKLWdlbyNORy1ERSNEZWx0YSNORwotZ2VvI05HLUVCI0Vib255aSNORwotZ2VvI05HLUVEI0VkbyNORwotZ2VvI05HLUVLI0VraXRpI05HCi1nZW8jTkctRU4jRW51Z3UjTkcKLWdlbyNORy1HTyNHb21iZSNORwotZ2VvI05HLUlNI0ltbyNORwotZ2VvI05HLUpJI0ppZ2F3YSNORwotZ2VvI05HLUtEI0thZHVuYSNORwotZ2VvI05HLUtOI0thbm8jTkcKLWdlbyNORy1LVCNLYXRzaW5hI05HCi1nZW8jTkctS0UjS2ViYmkjTkcKLWdlbyNORy1LTyNLb2dpI05HCi1nZW8jTkctS1cjS3dhcmEjTkcKLWdlbyNORy1MQSNMYWdvcyNORwotZ2VvI05HLU5BI05hc3NhcmF3YSNORwotZ2VvI05HLU5JI05pZ2VyI05HCi1nZW8jTkctT0cjT2d1biNORwotZ2VvI05HLU9OI09uZG8jTkcKLWdlbyNORy1PUyNPc3VuI05HCi1nZW8jTkctT1kjT3lvI05HCi1nZW8jTkctUEwjUGxhdGVhdSNORwotZ2VvI05HLVJJI1JpdmVycyNORwotZ2VvI05HLVNPI1Nva290byNORwotZ2VvI05HLVRBI1RhcmFiYSNORwotZ2VvI05HLVlPI1lvYmUjTkcKLWdlbyNORy1aQSNaYW1mYXJhI05HCi1nZW8jTkkjTmljYXJhZ3VhIy0tCi1nZW8jTkwjTmV0aGVybGFuZHMjLS0KLWdlbyNOTyNOb3J3YXkjLS0KLWdlbyNOTy0wMSPDmHN0Zm9sZCNOTwotZ2VvI05PLTAyI0FrZXJzaHVzI05PCi1nZW8jTk8tMDMjT3NsbyNOTwotZ2VvI05PLTA0I0hlZG1hcmsjTk8KLWdlbyNOTy0wNSNPcHBsYW5kI05PCi1nZW8jTk8tMDYjQnVza2VydWQjTk8KLWdlbyNOTy0wNyNWZXN0Zm9sZCNOTwotZ2VvI05PLTA4I1RlbGVtYXJrI05PCi1nZW8jTk8tMDkjQXVzdC1BZ2RlciNOTwotZ2VvI05PLTEwI1Zlc3QtQWdkZXIjTk8KLWdlbyNOTy0xMSNSb2dhbGFuZCNOTwotZ2VvI05PLTEyI05vcmRhbGFuZCNOTwotZ2VvI05PLTE0I1NvZ24gT2cgRmpvcmRhbmUjTk8KLWdlbyNOTy0xNSNNw7hyZSBPZyBSb21zZGFsI05PCi1nZW8jTk8tMTYjU8O4ci1UcsO4bmRlbGFnI05PCi1nZW8jTk8tMTcjTm9yZC1UcsO4bmRlbGFnI05PCi1nZW8jTk8tMTgjTm9yZGxhbmQjTk8KLWdlbyNOTy0xOSNUcm9tcyNOTwotZ2VvI05PLTIwI0Zpbm5tYXJrI05PCi1nZW8jTlAjTmVwYWwjLS0KLWdlbyNOUiNOYXVydSMtLQotZ2VvI05VI05pdWUjLS0KLWdlbyNOWiNOZXcgWmVhbGFuZCMtLQotZ2VvI05aLUFVSyNBdWNrbGFuZCNOWi1OCi1nZW8jTlotQk9QI0JheSBPZiBQbGVudHkjTlotTgotZ2VvI05aLUNBTiNDYW50ZXJidXJ5I05aLVMKLWdlbyNOWi1HSVMjR2lzYm9ybmUjTlotTgotZ2VvI05aLUhLQiNIYXdrZXMnUyBCYXkjTlotTgotZ2VvI05aLU1CSCNNYXJsYm9yb3VnaCNOWi1TCi1nZW8jTlotTVdUI01hbmF3YXR1LVdhbmdhbnVpI05aLU4KLWdlbyNOWi1OI05vcnRoIElzbGFuZCNOWgotZ2VvI05aLU5TTiNOZWxzb24jTlotUwotZ2VvI05aLU5UTCNOb3J0aGxhbmQjTlotTgotZ2VvI05aLU9UQSNPdGFnbyNOWi1TCi1nZW8jTlotUyNTb3V0aCBJc2xhbmQjTloKLWdlbyNOWi1TVEwjU291dGhsYW5kI05aLVMKLWdlbyNOWi1UQVMjVGFzbWFuI05aLVMKLWdlbyNOWi1US0kjVGFyYW5ha2kjTlotTgotZ2VvI05aLVdHTiNXZWxsaW5ndG9uI05aLU4KLWdlbyNOWi1XS08jV2Fpa2F0byNOWi1OCi1nZW8jTlotV1RDI1dlc3QgQ29hc3QjTlotUwotZ2VvI09NI09tYW4jLS0KLWdlbyNQQSNQYW5hbWEjLS0KLWdlbyNQRSNQZXJ1Iy0tCi1nZW8jUEYjRnJlbmNoIFBvbHluZXNpYSMtLQotZ2VvI1BHI1BhcHVhIE5ldyBHdWluZWEjLS0KLWdlbyNQSCNQaGlsaXBwaW5lcyMtLQotZ2VvI1BLI1Bha2lzdGFuIy0tCi1nZW8jUEwjUG9sYW5kIy0tCi1nZW8jUEwtRFMjRG9sbm/Fm2zEhXNraWUjUEwKLWdlbyNQTC1LUCNLdWphd3Nrby1wb21vcnNraWUjUEwKLWdlbyNQTC1MVSNMdWJlbHNraWUjUEwKLWdlbyNQTC1MQiNMdWJ1c2tpZSNQTAotZ2VvI1BMLUxEI8WBw7NkemtpZSNQTAotZ2VvI1BMLU1BI01hxYJvcG9sc2tpZSNQTAotZ2VvI1BMLU1aI01hem93aWVja2llI1BMCi1nZW8jUEwtT1AjT3BvbHNraWUjUEwKLWdlbyNQTC1QSyNQb2RrYXJwYWNraWUjUEwKLWdlbyNQTC1QRCNQb2RsYXNraWUjUEwKLWdlbyNQTC1QTSNQb21vcnNraWUjUEwKLWdlbyNQTC1TTCPFmmzEhXNraWUjUEwKLWdlbyNQTC1TSyPFmndpxJl0b2tyenlza2llI1BMCi1nZW8jUEwtV04jV2FybWnFhHNrby1tYXp1cnNraWUjUEwKLWdlbyNQTC1XUCNXaWVsa29wb2xza2llI1BMCi1nZW8jUEwtWlAjWmFjaG9kbmlvcG9tb3Jza2llI1BMCi1nZW8jUE0jU3QgUGllcnJlIEFuZCBNaXF1ZWxvbiMtLQotZ2VvI1BOI1BpdGNhaXJuIy0tCi1nZW8jUFIjUHVlcnRvIFJpY28jLS0KLWdlbyNQUyMiUGFsZXN0aW5pYW4gVGVycml0b3J5LCBPY2N1cGllZCIjLS0KLWdlbyNQVCNQb3J0dWdhbCMtLQotZ2VvI1BXI1BhbGF1Iy0tCi1nZW8jUFkjUGFyYWd1YXkjLS0KLWdlbyNRQSNRYXRhciMtLQotZ2VvI1JFI1JldW5pb24jLS0KLWdlbyNSTyNSb21hbmlhIy0tCi1nZW8jUk8tQiNCdWN1cmXFn3RpI1JPCi1nZW8jUk8tQUIjQWxiYSNSTwotZ2VvI1JPLUFSI0FyYWQjUk8KLWdlbyNSTy1BRyNBcmdlxZ8jUk8KLWdlbyNSTy1CQyNCYWPEg3UjUk8KLWdlbyNSTy1CSCNCaWhvciNSTwotZ2VvI1JPLUJOI0Jpc3RyacWjYS1OxINzxIN1ZCNSTwotZ2VvI1JPLUJUI0JvdG/Fn2FuaSNSTwotZ2VvI1JPLUJWI0JyYcWfb3YjUk8KLWdlbyNSTy1CUiNCcsSDaWxhI1JPCi1nZW8jUk8tQlojQnV6xIN1I1JPCi1nZW8jUk8tQ1MjQ2FyYcWfLVNldmVyaW4jUk8KLWdlbyNSTy1DTCNDxINsxINyYcWfaSNSTwotZ2VvI1JPLUNKI0NsdWojUk8KLWdlbyNSTy1DVCNDb25zdGFuxaNhI1JPCi1nZW8jUk8tQ1YjQ292YXNuYSNSTwotZ2VvI1JPLURCI0TDom1ib3ZpxaNhI1JPCi1nZW8jUk8tREojRG9saiNSTwotZ2VvI1JPLUdMI0dhbGHFo2kjUk8KLWdlbyNSTy1HUiNHaXVyZ2l1I1JPCi1nZW8jUk8tR0ojR29yaiNSTwotZ2VvI1JPLUhSI0hhcmdoaXRhI1JPCi1nZW8jUk8tSEQjSHVuZWRvYXJhI1JPCi1nZW8jUk8tSUwjSWFsb21pxaNhI1JPCi1nZW8jUk8tSVMjSWHFn2kjUk8KLWdlbyNSTy1NTSNNYXJhbXVyZcWfI1JPCi1nZW8jUk8tTUgjTWVoZWRpbsWjaSNSTwotZ2VvI1JPLU1TI011cmXFnyNSTwotZ2VvI1JPLU5UI05lYW3FoyNSTwotZ2VvI1JPLU9UI09sdCNSTwotZ2VvI1JPLVBII1ByYWhvdmEjUk8KLWdlbyNSTy1TTSNTYXR1IE1hcmUjUk8KLWdlbyNSTy1TSiNTxINsYWojUk8KLWdlbyNSTy1TQiNTaWJpdSNSTwotZ2VvI1JPLVNWI1N1Y2VhdmEjUk8KLWdlbyNSTy1UUiNUZWxlb3JtYW4jUk8KLWdlbyNSTy1UTSNUaW1pxZ8jUk8KLWdlbyNSTy1UTCNUdWxjZWEjUk8KLWdlbyNSTy1WUyNWYXNsdWkjUk8KLWdlbyNSTy1WTCNWw6JsY2VhI1JPCi1nZW8jUk8tVk4jVnJhbmNlYSNSTwotZ2VvI1JVI1J1c3NpYW4gRmVkZXJhdGlvbiMtLQotZ2VvI1JVLUFEIyJBZHlnZWphLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUFMIyJBbHRhaiwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1CQSMiQmHFoWtvcnRvc3RhbiwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1CVSMiQnVyamF0aWphLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUNFI8SMZcSNZW5za2FqYSBSZXNwdWJsaWthI1JVCi1nZW8jUlUtQ1UjxIx1dmHFoXNrYWphIFJlc3B1Ymxpa2EjUlUKLWdlbyNSVS1EQSMiRGFnZXN0YW4sIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtSU4jSW5ndcWhc2thamEgUmVzcHVibGlrYSBbUmVzcHVibGlrYSBJbmd1xaFldGlqYV0jUlUKLWdlbyNSVS1LQiNLYWJhcmRpbm8tQmFsa2Fyc2thamEgUmVzcHVibGlrYSNSVQotZ2VvI1JVLUtMIyJLYWxteWtpamEsIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtS0MjS2FyYcSNYWpldm8txIxlcmtlc3NrYWphIFJlc3B1Ymxpa2EjUlUKLWdlbyNSVS1LUiMiS2FyZWxpamEsIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtS0sjIkhha2FzaWphLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUtPIyJLb21pLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLU1FIyJNYXJpaiDDiGwsIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtTU8jIk1vcmRvdmlqYSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1TQSMiU2FoYSwgUmVzcHVibGlrYSBbSmFrdXRpamFdIiNSVQotZ2VvI1JVLVNFIyJTZXZlcm5hamEgT3NldGlqYSwgUmVzcHVibGlrYSBbQWxhbmlqYV0gW1Jlc3B1Ymxpa2EgU2V2ZXJuYWphIE9zZXRpamEtQWxhbmlqYV0iI1JVCi1nZW8jUlUtVEEjIlRhdGFyc3RhbiwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1UWSMiVHl2YSwgUmVzcHVibGlrYSBbVHV2YV0iI1JVCi1nZW8jUlUtVUQjVWRtdXJ0c2thamEgUmVzcHVibGlrYSNSVQotZ2VvI1JVLUFMVCNBbHRhanNraWoga3JhaiNSVQotZ2VvI1JVLUtIQSNIYWJhcm92c2tpaiBrcmFqI1JVCi1nZW8jUlUtS0RBI0tyYXNub2RhcnNraWoga3JhaiNSVQotZ2VvI1JVLUtZQSNLcmFzbm9qYXJza2lqIGtyYWojUlUKLWdlbyNSVS1QUkkjUHJpbW9yc2tpaiBrcmFqI1JVCi1nZW8jUlUtU1RBI1N0YXZyb3BvbCdza2lqIGtyYWojUlUKLWdlbyNSVS1BTVUjQW11cnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1BUksjQXJoYW5nZWwnc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUFTVCNBc3RyYWhhbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1CRUwjQmVsZ29yb2Rza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtQlJZI0JyamFuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUNIRSPEjGVsamFiaW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtQ0hJI8SMaXRpbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1JUksjSXJrdXRza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtSVZBI0l2YW5vdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1LR0QjS2FsaW5pbmdyYWRza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS0xVI0thbHXFvnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1LQU0jS2FtxI1hdHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1LRU0jS2VtZXJvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1LSVIjS2lyb3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS09TI0tvc3Ryb21za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS0dOI0t1cmdhbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1LUlMjS3Vyc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUxFTiNMZW5pbmdyYWRza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTElQI0xpcGV0c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU1BRyNNYWdhZGFuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU1PUyNNb3Nrb3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTVVSI011cm1hbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1OSVojTmnFvmVnb3JvZHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1OR1IjTm92Z29yb2Rza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTlZTI05vdm9zaWJpcnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1PTVMjT21za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtT1JFI09yZW5idXJnc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU9STCNPcmxvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1QTlojUGVuemVuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVBFUiNQZXJtc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVBTSyNQc2tvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1ST1MjUm9zdG92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVJZQSNSamF6YW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtU0FLI1NhaGFsaW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtU0FNI1NhbWFyc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVNBUiNTYXJhdG92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVNNTyNTbW9sZW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtU1ZFI1N2ZXJkbG92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVRBTSNUYW1ib3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVE9NI1RvbXNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1UVUwjVHVsJ3NrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1UVkUjVHZlcnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1UWVUjVGp1bWVuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVVMWSNVbCdqYW5vdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1WTEEjVmxhZGltaXJza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVkdHI1ZvbGdvZ3JhZHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1WTEcjVm9sb2dvZHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1WT1IjVm9yb25lxb5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtWUFSI0phcm9zbGF2c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU1PVyNNb3NrdmEjUlUKLWdlbyNSVS1TUEUjU2Fua3QtUGV0ZXJidXJnI1JVCi1nZW8jUlUtWUVWI0V2cmVqc2thamEgYXZ0b25vbW5hamEgb2JsYXN0JyNSVQotZ2VvI1JVLUFHQiNBZ2luc2tpaiBCdXJqYXRza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1DSFUjxIx1a290c2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtRVZFI8OIdmVua2lqc2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtS0hNI0hhbnR5LU1hbnNpanNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLUtPUCNLb21pLVBlcm1qYXRza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1LT1IjS29yamFrc2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtTkVOI05lbmV0c2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtVEFZI1Rham15cnNraWogKERvbGdhbm8tTmVuZXRza2lqKSBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtVU9CI1VzdCctT3JkeW5za2lqIEJ1cmphdHNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLVlBTiNKYW1hbG8tTmVuZXRza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVyNSd2FuZGEjLS0KLWdlbyNTQSNTYXVkaSBBcmFiaWEjLS0KLWdlbyNTQiNTb2xvbW9uIElzbGFuZHMjLS0KLWdlbyNTQyNTZXljaGVsbGVzIy0tCi1nZW8jU0QjU3VkYW4jLS0KLWdlbyNTRSNTd2VkZW4jLS0KLWdlbyNTRS1BQiNTdG9ja2hvbG1zIEzDpG4jU0UKLWdlbyNTRS1BQyNWw6RzdGVyYm90dGVucyBMw6RuI1NFCi1nZW8jU0UtQkQjTm9ycmJvdHRlbnMgTMOkbiNTRQotZ2VvI1NFLUMjVXBwc2FsYSBMw6RuI1NFCi1nZW8jU0UtRCNTw7ZkZXJtYW5sYW5kcyBMw6RuI1NFCi1nZW8jU0UtRSPDlnN0ZXJnw7Z0bGFuZHMgTMOkbiNTRQotZ2VvI1NFLUYjSsO2bmvDtnBpbmdzIEzDpG4jU0UKLWdlbyNTRS1HI0tyb25vYm9yZ3MgTMOkbiNTRQotZ2VvI1NFLUgjS2FsbWFyIEzDpG4jU0UKLWdlbyNTRS1JI0dvdGxhbmRzIEzDpG4jU0UKLWdlbyNTRS1LI0JsZWtpbmdlIEzDpG4jU0UKLWdlbyNTRS1NI1Nrw6VuZSBMw6RuI1NFCi1nZW8jU0UtTiNIYWxsYW5kcyBMw6RuI1NFCi1nZW8jU0UtTyNWw6RzdHJhIEfDtnRhbGFuZHMgTMOkbiNTRQotZ2VvI1NFLVMjVsOkcm1sYW5kcyBMw6RuI1NFCi1nZW8jU0UtVCPDlnJlYnJvIEzDpG4jU0UKLWdlbyNTRS1VI1bDpHN0bWFubGFuZHMgTMOkbiNTRQotZ2VvI1NFLVcjRGFsYXJuZXMgTMOkbiNTRQotZ2VvI1NFLVgjR8OkdmxlYm9yZ3MgTMOkbiNTRQotZ2VvI1NFLVkjVsOkc3Rlcm5vcnJsYW5kcyBMw6RuI1NFCi1nZW8jU0UtWiNKw6RtdGxhbmRzIEzDpG4jU0UKLWdlbyNTRyNTaW5nYXBvcmUjLS0KLWdlbyNTSCNTdCBIZWxlbmEjLS0KLWdlbyNTSSNTbG92ZW5pYSMtLQotZ2VvI1NKI1N2YWxiYXJkIEFuZCBKYW4gTWF5ZW4jLS0KLWdlbyNTSyNTbG92YWtpYSMtLQotZ2VvI1NMI1NpZXJyYSBMZW9uZSMtLQotZ2VvI1NNI1NhbiBNYXJpbm8jLS0KLWdlbyNTTiNTZW5lZ2FsIy0tCi1nZW8jU08jU29tYWxpYSMtLQotZ2VvI1NSI1N1cmluYW1lIy0tCi1nZW8jU1QjU2FvIFRvbWUgQW5kIFByaW5jaXBlIy0tCi1nZW8jU1YjRWwgU2FsdmFkb3IjLS0KLWdlbyNTWSNTeXJpYW4gQXJhYiBSZXB1YmxpYyMtLQotZ2VvI1NaI1N3YXppbGFuZCMtLQotZ2VvI1RDI1R1cmtzIEFuZCBDYWljb3MgSXNsYW5kcyMtLQotZ2VvI1REI0NoYWQjLS0KLWdlbyNURiNGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXMjLS0KLWdlbyNURyNUb2dvIy0tCi1nZW8jVEgjVGhhaWxhbmQjLS0KLWdlbyNUSiNUYWppa2lzdGFuIy0tCi1nZW8jVE0jVHVya21lbmlzdGFuIy0tCi1nZW8jVE4jVHVuaXNpYSMtLQotZ2VvI1RPI1RvbmdhIy0tCi1nZW8jVFAjRWFzdCBUaW1vciMtLQotZ2VvI1RSI1R1cmtleSMtLQotZ2VvI1RSLTAxI0FkYW5hI1RSCi1nZW8jVFItMDIjQWTEsXlhbWFuI1RSCi1nZW8jVFItMDMjQWZ5b24jVFIKLWdlbyNUUi0wNCNBxJ9yxLEjVFIKLWdlbyNUUi0wNSNBbWFzeWEjVFIKLWdlbyNUUi0wNiNBbmthcmEjVFIKLWdlbyNUUi0wNyNBbnRhbHlhI1RSCi1nZW8jVFItMDgjQXJ0dmluI1RSCi1nZW8jVFItMDkjQXlkxLFuI1RSCi1nZW8jVFItMTAjQmFsxLFrZXNpciNUUgotZ2VvI1RSLTExI0JpbGVjaWsjVFIKLWdlbyNUUi0xMiNCaW5nw7ZsI1RSCi1nZW8jVFItMTMjQml0bGlzI1RSCi1nZW8jVFItMTQjQm9sdSNUUgotZ2VvI1RSLTE1I0J1cmR1ciNUUgotZ2VvI1RSLTE2I0J1cnNhI1RSCi1nZW8jVFItMTcjw4dhbmFra2FsZSNUUgotZ2VvI1RSLTE4I8OHYW5rxLFyxLEjVFIKLWdlbyNUUi0xOSPDh29ydW0jVFIKLWdlbyNUUi0yMCNEZW5pemxpI1RSCi1nZW8jVFItMjEjRGl5YXJiYWvEsXIjVFIKLWdlbyNUUi0yMiNFZGlybmUjVFIKLWdlbyNUUi0yMyNFbGF6xLFnI1RSCi1nZW8jVFItMjQjRXJ6aW5jYW4jVFIKLWdlbyNUUi0yNSNFcnp1cnVtI1RSCi1nZW8jVFItMjYjRXNracWfZWhpciNUUgotZ2VvI1RSLTI3I0dhemlhbnRlcCNUUgotZ2VvI1RSLTI4I0dpcmVzdW4jVFIKLWdlbyNUUi0yOSNHw7xtw7zFn2hhbmUjVFIKLWdlbyNUUi0zMCNIYWtrw6JyaSNUUgotZ2VvI1RSLTMxI0hhdGF5I1RSCi1nZW8jVFItMzIjSXNwYXJ0YSNUUgotZ2VvI1RSLTMzI8Sww6dlbCNUUgotZ2VvI1RSLTM0I8Swc3RhbmJ1bCNUUgotZ2VvI1RSLTM1I8Swem1pciNUUgotZ2VvI1RSLTM2I0thcnMjVFIKLWdlbyNUUi0zNyNLYXN0YW1vbnUjVFIKLWdlbyNUUi0zOCNLYXlzZXJpI1RSCi1nZW8jVFItMzkjS8SxcmtsYXJlbGkjVFIKLWdlbyNUUi00MCNLxLFyxZ9laGlyI1RSCi1nZW8jVFItNDEjS29jYWVsaSNUUgotZ2VvI1RSLTQyI0tvbnlhI1RSCi1nZW8jVFItNDMjS8O8dGFoeWEjVFIKLWdlbyNUUi00NCNNYWxhdHlhI1RSCi1nZW8jVFItNDUjTWFuaXNhI1RSCi1nZW8jVFItNDYjS2FocmFtYW5tYXJhxZ8jVFIKLWdlbyNUUi00NyNNYXJkaW4jVFIKLWdlbyNUUi00OCNNdcSfbGEjVFIKLWdlbyNUUi00OSNNdcWfI1RSCi1nZW8jVFItNTAjTmV2xZ9laGlyI1RSCi1nZW8jVFItNTEjTmnEn2RlI1RSCi1nZW8jVFItNTIjT3JkdSNUUgotZ2VvI1RSLTUzI1JpemUjVFIKLWdlbyNUUi01NCNTYWthcnlhI1RSCi1nZW8jVFItNTUjU2Ftc3VuI1RSCi1nZW8jVFItNTYjU2lpcnQjVFIKLWdlbyNUUi01NyNTaW5vcCNUUgotZ2VvI1RSLTU4I1NpdmFzI1RSCi1nZW8jVFItNTkjVGVraXJkYcSfI1RSCi1nZW8jVFItNjAjVG9rYXQjVFIKLWdlbyNUUi02MSNUcmFiem9uI1RSCi1nZW8jVFItNjIjVHVuY2VsaSNUUgotZ2VvI1RSLTYzI8WeYW5sxLF1cmZhI1RSCi1nZW8jVFItNjQjVcWfYWsjVFIKLWdlbyNUUi02NSNWYW4jVFIKLWdlbyNUUi02NiNZb3pnYXQjVFIKLWdlbyNUUi02NyNab25ndWxkYWsjVFIKLWdlbyNUUi02OCNBa3NhcmF5I1RSCi1nZW8jVFItNjkjQmF5YnVydCNUUgotZ2VvI1RSLTcwI0thcmFtYW4jVFIKLWdlbyNUUi03MSNLxLFyxLFra2FsZSNUUgotZ2VvI1RSLTcyI0JhdG1hbiNUUgotZ2VvI1RSLTczI8WexLFybmFrI1RSCi1nZW8jVFItNzQjQmFydMSxbiNUUgotZ2VvI1RSLTc1I0FyZGFoYW4jVFIKLWdlbyNUUi03NiNJxJ9kxLFyI1RSCi1nZW8jVFItNzcjWWFsb3ZhI1RSCi1nZW8jVFItNzgjS2FyYWLDvGsjVFIKLWdlbyNUUi03OSNLaWxpcyNUUgotZ2VvI1RSLTgwI09zbWFuaXllI1RSCi1nZW8jVFQjVHJpbmlkYWQgQW5kIFRvYmFnbyMtLQotZ2VvI1RWI1R1dmFsdSMtLQotZ2VvI1RXIyJUYWl3YW4sIFByb3ZpbmNlIE9mIENoaW5hIiMtLQotZ2VvI1RaIyJUYW56YW5pYSwgVW5pdGVkIFJlcHVibGljIG9mIiMtLQotZ2VvI1VBI1VrcmFpbmUjLS0KLWdlbyNVRyNVZ2FuZGEjLS0KLWdlbyNVTSNVUyBNaW5vciBPdXRseWluZyBJc2xhbmRzIy0tCi1nZW8jVU0tNjcjSm9obnN0b24gQXRvbGwjVU0KLWdlbyNVTS03MSNNaWR3YXkgSXNsYW5kcyNVTQotZ2VvI1VNLTc2I05hdmFzc2EgSXNsYW5kI1VNCi1nZW8jVU0tNzkjV2FrZSBJc2xhbmQjVU0KLWdlbyNVTS04MSNCYWtlciBJc2xhbmQjVU0KLWdlbyNVTS04NCNIb3dsYW5kIElzbGFuZCNVTQotZ2VvI1VNLTg2I0phcnZpcyBJc2xhbmQjVU0KLWdlbyNVTS04OSNLaW5nbWFuIFJlZWYjVU0KLWdlbyNVTS05NSNQYWxteXJhIEF0b2xsI1VNCi1nZW8jVVMjVW5pdGVkIFN0YXRlcyMtLQotZ2VvI1VTLUFLI0FsYXNrYSNVUwotZ2VvI1VTLUFMI0FsYWJhbWEjVVMKLWdlbyNVUy1BUiNBcmthbnNhcyNVUwotZ2VvI1VTLUFTI0FtZXJpY2FuIFNhbW9hI1VTCi1nZW8jVVMtQVojQXJpem9uYSNVUwotZ2VvI1VTLUNBI0NhbGlmb3JuaWEjVVMKLWdlbyNVUy1DTyNDb2xvcmFkbyNVUwotZ2VvI1VTLUNUI0Nvbm5lY3RpY3V0I1VTCi1nZW8jVVMtREMjRGlzdHJpY3QgT2YgQ29sdW1iaWEjVVMKLWdlbyNVUy1ERSNEZWxhd2FyZSNVUwotZ2VvI1VTLUZMI0Zsb3JpZGEjVVMKLWdlbyNVUy1HQSNHZW9yZ2lhI1VTCi1nZW8jVVMtR1UjR3VhbSNVUwotZ2VvI1VTLUhJI0hhd2FpaSNVUwotZ2VvI1VTLUlBI0lvd2EjVVMKLWdlbyNVUy1JRCNJZGFobyNVUwotZ2VvI1VTLUlMI0lsbGlub2lzI1VTCi1nZW8jVVMtSU4jSW5kaWFuYSNVUwotZ2VvI1VTLUtTI0thbnNhcyNVUwotZ2VvI1VTLUtZI0tlbnR1Y2t5I1VTCi1nZW8jVVMtTEEjTG91aXNpYW5hI1VTCi1nZW8jVVMtTUEjTWFzc2FjaHVzZXR0cyNVUwotZ2VvI1VTLU1EI01hcnlsYW5kI1VTCi1nZW8jVVMtTUUjTWFpbmUjVVMKLWdlbyNVUy1NSSNNaWNoaWdhbiNVUwotZ2VvI1VTLU1OI01pbm5lc290YSNVUwotZ2VvI1VTLU1PI01pc3NvdXJpI1VTCi1nZW8jVVMtTVAjTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzI1VTCi1nZW8jVVMtTVMjTWlzc2lzc2lwcGkjVVMKLWdlbyNVUy1NVCNNb250YW5hI1VTCi1nZW8jVVMtTkMjTm9ydGggQ2Fyb2xpbmEjVVMKLWdlbyNVUy1ORCNOb3J0aCBEYWtvdGEjVVMKLWdlbyNVUy1ORSNOZWJyYXNrYSNVUwotZ2VvI1VTLU5II05ldyBIYW1wc2hpcmUjVVMKLWdlbyNVUy1OSiNOZXcgSmVyc2V5I1VTCi1nZW8jVVMtTk0jTmV3IE1leGljbyNVUwotZ2VvI1VTLU5WI05ldmFkYSNVUwotZ2VvI1VTLU5ZI05ldyBZb3JrI1VTCi1nZW8jVVMtT0gjT2hpbyNVUwotZ2VvI1VTLU9LI09rbGFob21hI1VTCi1nZW8jVVMtT1IjT3JlZ29uI1VTCi1nZW8jVVMtUEEjUGVubnN5bHZhbmlhI1VTCi1nZW8jVVMtUFIjUHVlcnRvIFJpY28jVVMKLWdlbyNVUy1SSSNSaG9kZSBJc2xhbmQjVVMKLWdlbyNVUy1TQyNTb3V0aCBDYXJvbGluYSNVUwotZ2VvI1VTLVNEI1NvdXRoIERha290YSNVUwotZ2VvI1VTLVROI1Rlbm5lc3NlZSNVUwotZ2VvI1VTLVRYI1RleGFzI1VTCi1nZW8jVVMtVU0jVS5TLiBNaW5vciBPdXRseWluZyBJc2xhbmRzI1VTCi1nZW8jVVMtVVQjVXRhaCNVUwotZ2VvI1VTLVZBI1ZpcmdpbmlhI1VTCi1nZW8jVVMtVkkjVmlyZ2luIElzbGFuZHMgT2YgVGhlIFUuUy4jVVMKLWdlbyNVUy1WVCNWZXJtb250I1VTCi1nZW8jVVMtV0EjV2FzaGluZ3RvbiNVUwotZ2VvI1VTLVdJI1dpc2NvbnNpbiNVUwotZ2VvI1VTLVdWI1dlc3QgVmlyZ2luaWEjVVMKLWdlbyNVUy1XWSNXeW9taW5nI1VTCi1nZW8jVVkjVXJ1Z3VheSMtLQotZ2VvI1VaI1V6YmVraXN0YW4jLS0KLWdlbyNWQSNWYXRpY2FuIENpdHkgU3RhdGUjLS0KLWdlbyNWQyNTdCBWaW5jZW50IEFuZCBHcmVuYWRpbmVzIy0tCi1nZW8jVkUjVmVuZXp1ZWxhIy0tCi1nZW8jVkcjIlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoIiMtLQotZ2VvI1ZJI1VuaXRlZCBTdGF0ZXMgVmlyZ2luIElzbGFuZHMjLS0KLWdlbyNWTiNWaWV0IE5hbSMtLQotZ2VvI1ZOLTAxI0xhaSBDaGF1I1ZOCi1nZW8jVk4tMDIjTGFvIENhaSNWTgotZ2VvI1ZOLTAzI0hhIEdpYW5nI1ZOCi1nZW8jVk4tMDQjQ2FvIEJhbmcjVk4KLWdlbyNWTi0wNSNTb24gTGEjVk4KLWdlbyNWTi0wNiNZZW4gQmFpI1ZOCi1nZW8jVk4tMDcjVHV5ZW4gUXVhbmcjVk4KLWdlbyNWTi0wOSNMYW5nIFNvbiNWTgotZ2VvI1ZOLTEzI1F1YW5nIE5pbmgjVk4KLWdlbyNWTi0xNCNIb2EgQmluaCNWTgotZ2VvI1ZOLTE1I0hhIFRheSNWTgotZ2VvI1ZOLTE4I05pbmggQmluaCNWTgotZ2VvI1ZOLTIwI1RoYWkgQmluaCNWTgotZ2VvI1ZOLTIxI1RoYW5oIEhvYSNWTgotZ2VvI1ZOLTIyI05naGUgQW4jVk4KLWdlbyNWTi0yMyNIYSBUaW5oI1ZOCi1nZW8jVk4tMjQjUXVhbmcgQmluaCNWTgotZ2VvI1ZOLTI1I1F1YW5nIFRyaSNWTgotZ2VvI1ZOLTI2I1RodWEgVGhpZW4tSHVlI1ZOCi1nZW8jVk4tMjcjUXVhbmcgTmFtI1ZOCi1nZW8jVk4tMjgjS29uIFR1bSNWTgotZ2VvI1ZOLTI5I1F1YW5nIE5nYWkjVk4KLWdlbyNWTi0zMCNHaWEgTGFpI1ZOCi1nZW8jVk4tMzEjQmluaCBEaW5oI1ZOCi1nZW8jVk4tMzIjUGh1IFllbiNWTgotZ2VvI1ZOLTMzI0RhYyBMYWMjVk4KLWdlbyNWTi0zNCNLaGFuaCBIb2EjVk4KLWdlbyNWTi0zNSNMYW0gRG9uZyNWTgotZ2VvI1ZOLTM2I05pbmggVGh1YW4jVk4KLWdlbyNWTi0zNyNUYXkgTmluaCNWTgotZ2VvI1ZOLTM5I0RvbmcgTmFpI1ZOCi1nZW8jVk4tNDAjQmluaCBUaHVhbiNWTgotZ2VvI1ZOLTQxI0xvbmcgQW4jVk4KLWdlbyNWTi00MyNCYSBSaWEgLSBWdW5nIFRhdSNWTgotZ2VvI1ZOLTQ0I0FuIEdpYW5nI1ZOCi1nZW8jVk4tNDUjRG9uZyBUaGFwI1ZOCi1nZW8jVk4tNDYjVGllbiBHaWFuZyNWTgotZ2VvI1ZOLTQ3I0tpZW4gR2lhbmcjVk4KLWdlbyNWTi00OCNDYW4gVGhvI1ZOCi1nZW8jVk4tNDkjVmluaCBMb25nI1ZOCi1nZW8jVk4tNTAjQmVuIFRyZSNWTgotZ2VvI1ZOLTUxI1RyYSBWaW5oI1ZOCi1nZW8jVk4tNTIjU29jIFRyYW5nI1ZOCi1nZW8jVk4tNTMjQmFjIENhbiNWTgotZ2VvI1ZOLTU0I0JhYyBHaWFuZyNWTgotZ2VvI1ZOLTU1I0JhYyBMaWV1I1ZOCi1nZW8jVk4tNTYjQmFjIE5pbmgjVk4KLWdlbyNWTi01NyNCaW5oIER1b25nI1ZOCi1nZW8jVk4tNTgjQmluaCBQaHVvYyNWTgotZ2VvI1ZOLTU5I0NhIE1hdSNWTgotZ2VvI1ZOLTYwIyJEYSBOYW5nLCB0aGFuaCBwaG8iI1ZOCi1nZW8jVk4tNjEjSGFpIER1b25nI1ZOCi1nZW8jVk4tNjIjIkhhaSBQaG9uZywgdGhhbmggcGhvIiNWTgotZ2VvI1ZOLTYzI0hhIE5hbSNWTgotZ2VvI1ZOLTY0IyJIYSBOb2ksIHRodSBkbyIjVk4KLWdlbyNWTi02NSMiSG8gQ2hpIE1pbmgsIHRoYW5oIHBvIFtTYWkgR29uXSIjVk4KLWdlbyNWTi02NiNIdW5nIFllbiNWTgotZ2VvI1ZOLTY3I05hbSBEaW5oI1ZOCi1nZW8jVk4tNjgjUGh1IFRobyNWTgotZ2VvI1ZOLTY5I1RoYWkgTmd1eWVuI1ZOCi1nZW8jVk4tNzAjVmluaCBQaHVjI1ZOCi1nZW8jVlUjVmFudWF0dSMtLQotZ2VvI1dGI1dhbGxpcyBBbmQgRnV0dW5hIElzbGFuZHMjLS0KLWdlbyNXUyNTYW1vYSMtLQotZ2VvI1lFI1llbWVuIy0tCi1nZW8jWVQjTWF5b3R0ZSMtLQotZ2VvI1lVI1l1Z29zbGF2aWEgKEZlZCBSZXAgT2YpIy0tCi1nZW8jWVUtQ0cjQ3JuYSBHb3JhI1lVCi1nZW8jWVUtU1IjU3JiaWphI1lVCi1nZW8jWVUtS00jS29zb3ZvLU1ldG9oaWphI1lVLVNSCi1nZW8jWVUtVk8jVm9qdm9kaW5hI1lVLVNSCi1nZW8jWkEjU291dGggQWZyaWNhIy0tCi1nZW8jWk0jWmFtYmlhIy0tCi1nZW8jWlcjWmltYmFid2UjLS0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL25haWNzLWRhdGEudHh0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvbmFpY3MtZGF0YS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NmY5MDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvbmFpY3MtZGF0YS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxODE0ICswLDAgQEAKLW5haWNzIzExI0FncmljdWx0dXJlLCBGb3Jlc3RyeSwgRmlzaGluZyBhbmQgSHVudGluZyMxMQotbmFpY3MjMTExI0Nyb3AgUHJvZHVjdGlvbiMxMQotbmFpY3MjMTExMSNPaWxzZWVkIGFuZCBHcmFpbiBGYXJtaW5nIzExMQotbmFpY3MjMTExMTEjU295YmVhbiBGYXJtaW5nIzExMTEKLW5haWNzIzExMTEyI09pbHNlZWQgKGV4Y2VwdCBTb3liZWFuKSBGYXJtaW5nIzExMTEKLW5haWNzIzExMTEzI0RyeSBQZWEgYW5kIEJlYW4gRmFybWluZyMxMTExCi1uYWljcyMxMTExNCNXaGVhdCBGYXJtaW5nIzExMTEKLW5haWNzIzExMTE1I0Nvcm4gRmFybWluZyMxMTExCi1uYWljcyMxMTExNiNSaWNlIEZhcm1pbmcjMTExMQotbmFpY3MjMTExMTkjT3RoZXIgR3JhaW4gRmFybWluZyMxMTExCi1uYWljcyMxMTExOTEjT2lsc2VlZCBhbmQgR3JhaW4gQ29tYmluYXRpb24gRmFybWluZyMxMTExOQotbmFpY3MjMTExMTk5I0FsbCBPdGhlciBHcmFpbiBGYXJtaW5nIzExMTE5Ci1uYWljcyMxMTEyI1ZlZ2V0YWJsZSBhbmQgTWVsb24gRmFybWluZyMxMTEKLW5haWNzIzExMTIxI1ZlZ2V0YWJsZSBhbmQgTWVsb24gRmFybWluZyMxMTEyCi1uYWljcyMxMTEyMTEjUG90YXRvIEZhcm1pbmcjMTExMjEKLW5haWNzIzExMTIxOSNPdGhlciBWZWdldGFibGUgKGV4Y2VwdCBQb3RhdG8pIGFuZCBNZWxvbiBGYXJtaW5nIzExMTIxCi1uYWljcyMxMTEzI0ZydWl0IGFuZCBUcmVlIE51dCBGYXJtaW5nIzExMQotbmFpY3MjMTExMzEjT3JhbmdlIEdyb3ZlcyMxMTEzCi1uYWljcyMxMTEzMiNDaXRydXMgKGV4Y2VwdCBPcmFuZ2UpIEdyb3ZlcyMxMTEzCi1uYWljcyMxMTEzMyNOb25jaXRydXMgRnJ1aXQgYW5kIFRyZWUgTnV0IEZhcm1pbmcjMTExMwotbmFpY3MjMTExMzMxI0FwcGxlIE9yY2hhcmRzIzExMTMzCi1uYWljcyMxMTEzMzIjR3JhcGUgVmluZXlhcmRzIzExMTMzCi1uYWljcyMxMTEzMzMjU3RyYXdiZXJyeSBGYXJtaW5nIzExMTMzCi1uYWljcyMxMTEzMzQjQmVycnkgKGV4Y2VwdCBTdHJhd2JlcnJ5KSBGYXJtaW5nIzExMTMzCi1uYWljcyMxMTEzMzUjVHJlZSBOdXQgRmFybWluZyMxMTEzMwotbmFpY3MjMTExMzM2I0ZydWl0IGFuZCBUcmVlIE51dCBDb21iaW5hdGlvbiBGYXJtaW5nIzExMTMzCi1uYWljcyMxMTEzMzkjT3RoZXIgTm9uY2l0cnVzIEZydWl0IEZhcm1pbmcjMTExMzMKLW5haWNzIzExMTQjR3JlZW5ob3VzZSwgTnVyc2VyeSwgYW5kIEZsb3JpY3VsdHVyZSBQcm9kdWN0aW9uIzExMQotbmFpY3MjMTExNDEjRm9vZCBDcm9wcyBHcm93biBVbmRlciBDb3ZlciMxMTE0Ci1uYWljcyMxMTE0MTEjTXVzaHJvb20gUHJvZHVjdGlvbiMxMTE0MQotbmFpY3MjMTExNDE5I090aGVyIEZvb2QgQ3JvcHMgR3Jvd24gVW5kZXIgQ292ZXIjMTExNDEKLW5haWNzIzExMTQyI051cnNlcnkgYW5kIEZsb3JpY3VsdHVyZSBQcm9kdWN0aW9uIzExMTQKLW5haWNzIzExMTQyMSNOdXJzZXJ5IGFuZCBUcmVlIFByb2R1Y3Rpb24jMTExNDIKLW5haWNzIzExMTQyMiNGbG9yaWN1bHR1cmUgUHJvZHVjdGlvbiMxMTE0MgotbmFpY3MjMTExOSNPdGhlciBDcm9wIEZhcm1pbmcjMTExCi1uYWljcyMxMTE5MSNUb2JhY2NvIEZhcm1pbmcjMTExOQotbmFpY3MjMTExOTIjQ290dG9uIEZhcm1pbmcjMTExOQotbmFpY3MjMTExOTMjU3VnYXJjYW5lIEZhcm1pbmcjMTExOQotbmFpY3MjMTExOTQjSGF5IEZhcm1pbmcjMTExOQotbmFpY3MjMTExOTkjQWxsIE90aGVyIENyb3AgRmFybWluZyMxMTE5Ci1uYWljcyMxMTE5OTEjU3VnYXIgQmVldCBGYXJtaW5nIzExMTk5Ci1uYWljcyMxMTE5OTIjUGVhbnV0IEZhcm1pbmcjMTExOTkKLW5haWNzIzExMTk5OCNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBDcm9wIEZhcm1pbmcjMTExOTkKLW5haWNzIzExMiNBbmltYWwgUHJvZHVjdGlvbiMxMQotbmFpY3MjMTEyMSNDYXR0bGUgUmFuY2hpbmcgYW5kIEZhcm1pbmcjMTEyCi1uYWljcyMxMTIxMSNCZWVmIENhdHRsZSBSYW5jaGluZyBhbmQgRmFybWluZywgaW5jbHVkaW5nIEZlZWRsb3RzIzExMjEKLW5haWNzIzExMjExMSNCZWVmIENhdHRsZSBSYW5jaGluZyBhbmQgRmFybWluZyMxMTIxMQotbmFpY3MjMTEyMTEyI0NhdHRsZSBGZWVkbG90cyMxMTIxMQotbmFpY3MjMTEyMTIjRGFpcnkgQ2F0dGxlIGFuZCBNaWxrIFByb2R1Y3Rpb24jMTEyMQotbmFpY3MjMTEyMTMjRHVhbCBQdXJwb3NlIENhdHRsZSBSYW5jaGluZyBhbmQgRmFybWluZyMxMTIxCi1uYWljcyMxMTIyI0hvZyBhbmQgUGlnIEZhcm1pbmcjMTEyCi1uYWljcyMxMTIyMSNIb2cgYW5kIFBpZyBGYXJtaW5nIzExMjIKLW5haWNzIzExMjMjUG91bHRyeSBhbmQgRWdnIFByb2R1Y3Rpb24jMTEyCi1uYWljcyMxMTIzMSNDaGlja2VuIEVnZyBQcm9kdWN0aW9uIzExMjMKLW5haWNzIzExMjMyI0Jyb2lsZXJzIGFuZCBPdGhlciBNZWF0IFR5cGUgQ2hpY2tlbiBQcm9kdWN0aW9uIzExMjMKLW5haWNzIzExMjMzI1R1cmtleSBQcm9kdWN0aW9uIzExMjMKLW5haWNzIzExMjM0I1BvdWx0cnkgSGF0Y2hlcmllcyMxMTIzCi1uYWljcyMxMTIzOSNPdGhlciBQb3VsdHJ5IFByb2R1Y3Rpb24jMTEyMwotbmFpY3MjMTEyNCNTaGVlcCBhbmQgR29hdCBGYXJtaW5nIzExMgotbmFpY3MjMTEyNDEjU2hlZXAgRmFybWluZyMxMTI0Ci1uYWljcyMxMTI0MiNHb2F0IEZhcm1pbmcjMTEyNAotbmFpY3MjMTEyNSNBbmltYWwgQXF1YWN1bHR1cmUjMTEyCi1uYWljcyMxMTI1MSNBbmltYWwgQXF1YWN1bHR1cmUjMTEyNQotbmFpY3MjMTEyNTExI0ZpbmZpc2ggRmFybWluZyBhbmQgRmlzaCBIYXRjaGVyaWVzIzExMjUxCi1uYWljcyMxMTI1MTIjU2hlbGxmaXNoIEZhcm1pbmcjMTEyNTEKLW5haWNzIzExMjUxOSNPdGhlciBBbmltYWwgQXF1YWN1bHR1cmUjMTEyNTEKLW5haWNzIzExMjkjT3RoZXIgQW5pbWFsIFByb2R1Y3Rpb24jMTEyCi1uYWljcyMxMTI5MSNBcGljdWx0dXJlIzExMjkKLW5haWNzIzExMjkyI0hvcnNlIGFuZCBPdGhlciBFcXVpbmUgUHJvZHVjdGlvbiMxMTI5Ci1uYWljcyMxMTI5MyNGdXItQmVhcmluZyBBbmltYWwgYW5kIFJhYmJpdCBQcm9kdWN0aW9uIzExMjkKLW5haWNzIzExMjk5I0FsbCBPdGhlciBBbmltYWwgUHJvZHVjdGlvbiMxMTI5Ci1uYWljcyMxMTMjRm9yZXN0cnkgYW5kIExvZ2dpbmcjMTEKLW5haWNzIzExMzEjVGltYmVyIFRyYWN0IE9wZXJhdGlvbnMjMTEzCi1uYWljcyMxMTMxMSNUaW1iZXIgVHJhY3QgT3BlcmF0aW9ucyMxMTMxCi1uYWljcyMxMTMyI0ZvcmVzdCBOdXJzZXJpZXMgYW5kIEdhdGhlcmluZyBvZiBGb3Jlc3QgUHJvZHVjdHMjMTEzCi1uYWljcyMxMTMyMSNGb3Jlc3QgTnVyc2VyaWVzIGFuZCBHYXRoZXJpbmcgb2YgRm9yZXN0IFByb2R1Y3RzIzExMzIKLW5haWNzIzExMzMjTG9nZ2luZyMxMTMKLW5haWNzIzExMzMxI0xvZ2dpbmcjMTEzMwotbmFpY3MjMTE0I0Zpc2hpbmcsIEh1bnRpbmcgYW5kIFRyYXBwaW5nIzExCi1uYWljcyMxMTQxI0Zpc2hpbmcjMTE0Ci1uYWljcyMxMTQxMSNGaXNoaW5nIzExNDEKLW5haWNzIzExNDExMSNGaW5maXNoIEZpc2hpbmcjMTE0MTEKLW5haWNzIzExNDExMiNTaGVsbGZpc2ggRmlzaGluZyMxMTQxMQotbmFpY3MjMTE0MTE5I090aGVyIE1hcmluZSBGaXNoaW5nIzExNDExCi1uYWljcyMxMTQyI0h1bnRpbmcgYW5kIFRyYXBwaW5nIzExNAotbmFpY3MjMTE0MjEjSHVudGluZyBhbmQgVHJhcHBpbmcjMTE0MgotbmFpY3MjMTE1I1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgQWdyaWN1bHR1cmUgYW5kIEZvcmVzdHJ5IzExCi1uYWljcyMxMTUxI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgQ3JvcCBQcm9kdWN0aW9uIzExNQotbmFpY3MjMTE1MTEjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBDcm9wIFByb2R1Y3Rpb24jMTE1MQotbmFpY3MjMTE1MTExI0NvdHRvbiBHaW5uaW5nIzExNTExCi1uYWljcyMxMTUxMTIjU29pbCBQcmVwYXJhdGlvbiwgUGxhbnRpbmcsIGFuZCBDdWx0aXZhdGluZyMxMTUxMQotbmFpY3MjMTE1MTEzI0Nyb3AgSGFydmVzdGluZywgUHJpbWFyaWx5IGJ5IE1hY2hpbmUjMTE1MTEKLW5haWNzIzExNTExNCNQb3N0aGFydmVzdCBDcm9wIEFjdGl2aXRpZXMgKGV4Y2VwdCBDb3R0b24gR2lubmluZykjMTE1MTEKLW5haWNzIzExNTExNSNGYXJtIExhYm9yIENvbnRyYWN0b3JzIGFuZCBDcmV3IExlYWRlcnMjMTE1MTEKLW5haWNzIzExNTExNiNGYXJtIE1hbmFnZW1lbnQgU2VydmljZXMjMTE1MTEKLW5haWNzIzExNTIjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBBbmltYWwgUHJvZHVjdGlvbiMxMTUKLW5haWNzIzExNTIxI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgQW5pbWFsIFByb2R1Y3Rpb24jMTE1MgotbmFpY3MjMTE1MyNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIEZvcmVzdHJ5IzExNQotbmFpY3MjMTE1MzEjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBGb3Jlc3RyeSMxMTUzCi1uYWljcyMyMSNNaW5pbmcjMjEKLW5haWNzIzIxMSNPaWwgYW5kIEdhcyBFeHRyYWN0aW9uIzIxCi1uYWljcyMyMTExI09pbCBhbmQgR2FzIEV4dHJhY3Rpb24jMjExCi1uYWljcyMyMTExMSNPaWwgYW5kIEdhcyBFeHRyYWN0aW9uIzIxMTEKLW5haWNzIzIxMTExMSNDcnVkZSBQZXRyb2xldW0gYW5kIE5hdHVyYWwgR2FzIEV4dHJhY3Rpb24jMjExMTEKLW5haWNzIzIxMTExMiNOYXR1cmFsIEdhcyBMaXF1aWQgRXh0cmFjdGlvbiMyMTExMQotbmFpY3MjMjEyI01pbmluZyAoZXhjZXB0IE9pbCBhbmQgR2FzKSMyMQotbmFpY3MjMjEyMSNDb2FsIE1pbmluZyMyMTIKLW5haWNzIzIxMjExI0NvYWwgTWluaW5nIzIxMjEKLW5haWNzIzIxMjExMSNCaXR1bWlub3VzIENvYWwgYW5kIExpZ25pdGUgU3VyZmFjZSBNaW5pbmcjMjEyMTEKLW5haWNzIzIxMjExMiNCaXR1bWlub3VzIENvYWwgVW5kZXJncm91bmQgTWluaW5nIzIxMjExCi1uYWljcyMyMTIxMTMjQW50aHJhY2l0ZSBNaW5pbmcjMjEyMTEKLW5haWNzIzIxMjIjTWV0YWwgT3JlIE1pbmluZyMyMTIKLW5haWNzIzIxMjIxI0lyb24gT3JlIE1pbmluZyMyMTIyCi1uYWljcyMyMTIyMiNHb2xkIE9yZSBhbmQgU2lsdmVyIE9yZSBNaW5pbmcjMjEyMgotbmFpY3MjMjEyMjIxI0dvbGQgT3JlIE1pbmluZyMyMTIyMgotbmFpY3MjMjEyMjIyI1NpbHZlciBPcmUgTWluaW5nIzIxMjIyCi1uYWljcyMyMTIyMyNDb3BwZXIsIE5pY2tlbCwgTGVhZCwgYW5kIFppbmMgTWluaW5nIzIxMjIKLW5haWNzIzIxMjIzMSNMZWFkIE9yZSBhbmQgWmluYyBPcmUgTWluaW5nIzIxMjIzCi1uYWljcyMyMTIyMzQjQ29wcGVyIE9yZSBhbmQgTmlja2VsIE9yZSBNaW5pbmcjMjEyMjMKLW5haWNzIzIxMjI5I090aGVyIE1ldGFsIE9yZSBNaW5pbmcjMjEyMgotbmFpY3MjMjEyMjkxI1VyYW5pdW0tUmFkaXVtLVZhbmFkaXVtIE9yZSBNaW5pbmcjMjEyMjkKLW5haWNzIzIxMjI5OSNBbGwgT3RoZXIgTWV0YWwgT3JlIE1pbmluZyMyMTIyOQotbmFpY3MjMjEyMyNOb25tZXRhbGxpYyBNaW5lcmFsIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMgotbmFpY3MjMjEyMzEjU3RvbmUgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMwotbmFpY3MjMjEyMzExI0RpbWVuc2lvbiBTdG9uZSBNaW5pbmcgYW5kIFF1YXJyeWluZyMyMTIzMQotbmFpY3MjMjEyMzEyI0NydXNoZWQgYW5kIEJyb2tlbiBMaW1lc3RvbmUgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMzEKLW5haWNzIzIxMjMxMyNDcnVzaGVkIGFuZCBCcm9rZW4gR3Jhbml0ZSBNaW5pbmcgYW5kIFF1YXJyeWluZyMyMTIzMQotbmFpY3MjMjEyMzE5I090aGVyIENydXNoZWQgYW5kIEJyb2tlbiBTdG9uZSBNaW5pbmcgYW5kIFF1YXJyeWluZyMyMTIzMQotbmFpY3MjMjEyMzIjU2FuZCwgR3JhdmVsLCBDbGF5LCBhbmQgQ2VyYW1pYyBhbmQgUmVmcmFjdG9yeSBNaW5lcmFscyBNaW5pbmcgYW5kIFF1YXJyeWluZyMyMTIzCi1uYWljcyMyMTIzMjEjQ29uc3RydWN0aW9uIFNhbmQgYW5kIEdyYXZlbCBNaW5pbmcjMjEyMzIKLW5haWNzIzIxMjMyMiNJbmR1c3RyaWFsIFNhbmQgTWluaW5nIzIxMjMyCi1uYWljcyMyMTIzMjQjS2FvbGluIGFuZCBCYWxsIENsYXkgTWluaW5nIzIxMjMyCi1uYWljcyMyMTIzMjUjQ2xheSBhbmQgQ2VyYW1pYyBhbmQgUmVmcmFjdG9yeSBNaW5lcmFscyBNaW5pbmcjMjEyMzIKLW5haWNzIzIxMjM5I090aGVyIE5vbm1ldGFsbGljIE1pbmVyYWwgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMwotbmFpY3MjMjEyMzkxI1BvdGFzaCwgU29kYSwgYW5kIEJvcmF0ZSBNaW5lcmFsIE1pbmluZyMyMTIzOQotbmFpY3MjMjEyMzkyI1Bob3NwaGF0ZSBSb2NrIE1pbmluZyMyMTIzOQotbmFpY3MjMjEyMzkzI090aGVyIENoZW1pY2FsIGFuZCBGZXJ0aWxpemVyIE1pbmVyYWwgTWluaW5nIzIxMjM5Ci1uYWljcyMyMTIzOTkjQWxsIE90aGVyIE5vbm1ldGFsbGljIE1pbmVyYWwgTWluaW5nIzIxMjM5Ci1uYWljcyMyMTMjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBNaW5pbmcjMjEKLW5haWNzIzIxMzEjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBNaW5pbmcjMjEzCi1uYWljcyMyMTMxMSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIE1pbmluZyMyMTMxCi1uYWljcyMyMTMxMTEjRHJpbGxpbmcgT2lsIGFuZCBHYXMgV2VsbHMjMjEzMTEKLW5haWNzIzIxMzExMiNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIE9pbCBhbmQgR2FzIE9wZXJhdGlvbnMjMjEzMTEKLW5haWNzIzIxMzExMyNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIENvYWwgTWluaW5nIzIxMzExCi1uYWljcyMyMTMxMTQjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBNZXRhbCBNaW5pbmcjMjEzMTEKLW5haWNzIzIxMzExNSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIE5vbm1ldGFsbGljIE1pbmVyYWxzIChleGNlcHQgRnVlbHMpIzIxMzExCi1uYWljcyMyMiNVdGlsaXRpZXMjMjIKLW5haWNzIzIyMSNVdGlsaXRpZXMjMjIKLW5haWNzIzIyMTEjRWxlY3RyaWMgUG93ZXIgR2VuZXJhdGlvbiwgVHJhbnNtaXNzaW9uIGFuZCBEaXN0cmlidXRpb24jMjIxCi1uYWljcyMyMjExMSNFbGVjdHJpYyBQb3dlciBHZW5lcmF0aW9uIzIyMTEKLW5haWNzIzIyMTExMSNIeWRyb2VsZWN0cmljIFBvd2VyIEdlbmVyYXRpb24jMjIxMTEKLW5haWNzIzIyMTExMiNGb3NzaWwgRnVlbCBFbGVjdHJpYyBQb3dlciBHZW5lcmF0aW9uIzIyMTExCi1uYWljcyMyMjExMTMjTnVjbGVhciBFbGVjdHJpYyBQb3dlciBHZW5lcmF0aW9uIzIyMTExCi1uYWljcyMyMjExMTkjT3RoZXIgRWxlY3RyaWMgUG93ZXIgR2VuZXJhdGlvbiMyMjExMQotbmFpY3MjMjIxMTIjRWxlY3RyaWMgUG93ZXIgVHJhbnNtaXNzaW9uLCBDb250cm9sLCBhbmQgRGlzdHJpYnV0aW9uIzIyMTEKLW5haWNzIzIyMTEyMSNFbGVjdHJpYyBCdWxrIFBvd2VyIFRyYW5zbWlzc2lvbiBhbmQgQ29udHJvbCMyMjExMgotbmFpY3MjMjIxMTIyI0VsZWN0cmljIFBvd2VyIERpc3RyaWJ1dGlvbiMyMjExMgotbmFpY3MjMjIxMiNOYXR1cmFsIEdhcyBEaXN0cmlidXRpb24jMjIxCi1uYWljcyMyMjEyMSNOYXR1cmFsIEdhcyBEaXN0cmlidXRpb24jMjIxMgotbmFpY3MjMjIxMyNXYXRlciwgU2V3YWdlIGFuZCBPdGhlciBTeXN0ZW1zIzIyMQotbmFpY3MjMjIxMzEjV2F0ZXIgU3VwcGx5IGFuZCBJcnJpZ2F0aW9uIFN5c3RlbXMjMjIxMwotbmFpY3MjMjIxMzIjU2V3YWdlIFRyZWF0bWVudCBGYWNpbGl0aWVzIzIyMTMKLW5haWNzIzIyMTMzI1N0ZWFtIGFuZCBBaXItQ29uZGl0aW9uaW5nIFN1cHBseSMyMjEzCi1uYWljcyMyMyNDb25zdHJ1Y3Rpb24jMjMKLW5haWNzIzIzMyNCdWlsZGluZywgRGV2ZWxvcGluZywgYW5kIEdlbmVyYWwgQ29udHJhY3RpbmcjMjMKLW5haWNzIzIzMzEjTGFuZCBTdWJkaXZpc2lvbiBhbmQgTGFuZCBEZXZlbG9wbWVudCMyMzMKLW5haWNzIzIzMzExI0xhbmQgU3ViZGl2aXNpb24gYW5kIExhbmQgRGV2ZWxvcG1lbnQjMjMzMQotbmFpY3MjMjMzMiNSZXNpZGVudGlhbCBCdWlsZGluZyBDb25zdHJ1Y3Rpb24jMjMzCi1uYWljcyMyMzMyMSNTaW5nbGUgRmFtaWx5IEhvdXNpbmcgQ29uc3RydWN0aW9uIzIzMzIKLW5haWNzIzIzMzIyI011bHRpZmFtaWx5IEhvdXNpbmcgQ29uc3RydWN0aW9uIzIzMzIKLW5haWNzIzIzMzMjTm9ucmVzaWRlbnRpYWwgQnVpbGRpbmcgQ29uc3RydWN0aW9uIzIzMwotbmFpY3MjMjMzMzEjTWFudWZhY3R1cmluZyBhbmQgSW5kdXN0cmlhbCBCdWlsZGluZyBDb25zdHJ1Y3Rpb24jMjMzMwotbmFpY3MjMjMzMzIjQ29tbWVyY2lhbCBhbmQgSW5zdGl0dXRpb25hbCBCdWlsZGluZyBDb25zdHJ1Y3Rpb24jMjMzMwotbmFpY3MjMjM0I0hlYXZ5IENvbnN0cnVjdGlvbiMyMwotbmFpY3MjMjM0MSNIaWdod2F5LCBTdHJlZXQsIEJyaWRnZSwgYW5kIFR1bm5lbCBDb25zdHJ1Y3Rpb24jMjM0Ci1uYWljcyMyMzQxMSNIaWdod2F5IGFuZCBTdHJlZXQgQ29uc3RydWN0aW9uIzIzNDEKLW5haWNzIzIzNDEyI0JyaWRnZSBhbmQgVHVubmVsIENvbnN0cnVjdGlvbiMyMzQxCi1uYWljcyMyMzQ5I090aGVyIEhlYXZ5IENvbnN0cnVjdGlvbiMyMzQKLW5haWNzIzIzNDkxI1dhdGVyLCBTZXdlciwgYW5kIFBpcGVsaW5lIENvbnN0cnVjdGlvbiMyMzQ5Ci1uYWljcyMyMzQ5MiNQb3dlciBhbmQgQ29tbXVuaWNhdGlvbiBUcmFuc21pc3Npb24gTGluZSBDb25zdHJ1Y3Rpb24jMjM0OQotbmFpY3MjMjM0OTMjSW5kdXN0cmlhbCBOb25idWlsZGluZyBTdHJ1Y3R1cmUgQ29uc3RydWN0aW9uIzIzNDkKLW5haWNzIzIzNDk5I0FsbCBPdGhlciBIZWF2eSBDb25zdHJ1Y3Rpb24jMjM0OQotbmFpY3MjMjM1I1NwZWNpYWwgVHJhZGUgQ29udHJhY3RvcnMjMjMKLW5haWNzIzIzNTEjUGx1bWJpbmcsIEhlYXRpbmcsIGFuZCBBaXItQ29uZGl0aW9uaW5nIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1MTEjUGx1bWJpbmcsIEhlYXRpbmcsIGFuZCBBaXItQ29uZGl0aW9uaW5nIENvbnRyYWN0b3JzIzIzNTEKLW5haWNzIzIzNTIjUGFpbnRpbmcgYW5kIFdhbGwgQ292ZXJpbmcgQ29udHJhY3RvcnMjMjM1Ci1uYWljcyMyMzUyMSNQYWludGluZyBhbmQgV2FsbCBDb3ZlcmluZyBDb250cmFjdG9ycyMyMzUyCi1uYWljcyMyMzUzI0VsZWN0cmljYWwgQ29udHJhY3RvcnMjMjM1Ci1uYWljcyMyMzUzMSNFbGVjdHJpY2FsIENvbnRyYWN0b3JzIzIzNTMKLW5haWNzIzIzNTQjTWFzb25yeSwgRHJ5d2FsbCwgSW5zdWxhdGlvbiwgYW5kIFRpbGUgQ29udHJhY3RvcnMjMjM1Ci1uYWljcyMyMzU0MSNNYXNvbnJ5IGFuZCBTdG9uZSBDb250cmFjdG9ycyMyMzU0Ci1uYWljcyMyMzU0MiNEcnl3YWxsLCBQbGFzdGVyaW5nLCBBY291c3RpY2FsLCBhbmQgSW5zdWxhdGlvbiBDb250cmFjdG9ycyMyMzU0Ci1uYWljcyMyMzU0MyNUaWxlLCBNYXJibGUsIFRlcnJhenpvLCBhbmQgTW9zYWljIENvbnRyYWN0b3JzIzIzNTQKLW5haWNzIzIzNTUjQ2FycGVudHJ5IGFuZCBGbG9vciBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTUxI0NhcnBlbnRyeSBDb250cmFjdG9ycyMyMzU1Ci1uYWljcyMyMzU1MiNGbG9vciBMYXlpbmcgYW5kIE90aGVyIEZsb29yIENvbnRyYWN0b3JzIzIzNTUKLW5haWNzIzIzNTYjUm9vZmluZywgU2lkaW5nLCBhbmQgU2hlZXQgTWV0YWwgQ29udHJhY3RvcnMjMjM1Ci1uYWljcyMyMzU2MSNSb29maW5nLCBTaWRpbmcsIGFuZCBTaGVldCBNZXRhbCBDb250cmFjdG9ycyMyMzU2Ci1uYWljcyMyMzU3I0NvbmNyZXRlIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1NzEjQ29uY3JldGUgQ29udHJhY3RvcnMjMjM1NwotbmFpY3MjMjM1OCNXYXRlciBXZWxsIERyaWxsaW5nIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1ODEjV2F0ZXIgV2VsbCBEcmlsbGluZyBDb250cmFjdG9ycyMyMzU4Ci1uYWljcyMyMzU5I090aGVyIFNwZWNpYWwgVHJhZGUgQ29udHJhY3RvcnMjMjM1Ci1uYWljcyMyMzU5MSNTdHJ1Y3R1cmFsIFN0ZWVsIEVyZWN0aW9uIENvbnRyYWN0b3JzIzIzNTkKLW5haWNzIzIzNTkyI0dsYXNzIGFuZCBHbGF6aW5nIENvbnRyYWN0b3JzIzIzNTkKLW5haWNzIzIzNTkzI0V4Y2F2YXRpb24gQ29udHJhY3RvcnMjMjM1OQotbmFpY3MjMjM1OTQjV3JlY2tpbmcgYW5kIERlbW9saXRpb24gQ29udHJhY3RvcnMjMjM1OQotbmFpY3MjMjM1OTUjQnVpbGRpbmcgRXF1aXBtZW50IGFuZCBPdGhlciBNYWNoaW5lcnkgSW5zdGFsbGF0aW9uIENvbnRyYWN0b3JzIzIzNTkKLW5haWNzIzIzNTk5I0FsbCBPdGhlciBTcGVjaWFsIFRyYWRlIENvbnRyYWN0b3JzIzIzNTkKLW5haWNzIzMxI01hbnVmYWN0dXJpbmcjMzEKLW5haWNzIzMxMSNGb29kIE1hbnVmYWN0dXJpbmcjMzEKLW5haWNzIzMxMTEjQW5pbWFsIEZvb2QgTWFudWZhY3R1cmluZyMzMTEKLW5haWNzIzMxMTExI0FuaW1hbCBGb29kIE1hbnVmYWN0dXJpbmcjMzExMQotbmFpY3MjMzExMTExI0RvZyBhbmQgQ2F0IEZvb2QgTWFudWZhY3R1cmluZyMzMTExMQotbmFpY3MjMzExMTE5I090aGVyIEFuaW1hbCBGb29kIE1hbnVmYWN0dXJpbmcjMzExMTEKLW5haWNzIzMxMTIjR3JhaW4gYW5kIE9pbHNlZWQgTWlsbGluZyMzMTEKLW5haWNzIzMxMTIxI0Zsb3VyIE1pbGxpbmcgYW5kIE1hbHQgTWFudWZhY3R1cmluZyMzMTEyCi1uYWljcyMzMTEyMTEjRmxvdXIgTWlsbGluZyMzMTEyMQotbmFpY3MjMzExMjEyI1JpY2UgTWlsbGluZyMzMTEyMQotbmFpY3MjMzExMjEzI01hbHQgTWFudWZhY3R1cmluZyMzMTEyMQotbmFpY3MjMzExMjIjU3RhcmNoIGFuZCBWZWdldGFibGUgRmF0cyBhbmQgT2lscyBNYW51ZmFjdHVyaW5nIzMxMTIKLW5haWNzIzMxMTIyMSNXZXQgQ29ybiBNaWxsaW5nIzMxMTIyCi1uYWljcyMzMTEyMjIjU295YmVhbiBQcm9jZXNzaW5nIzMxMTIyCi1uYWljcyMzMTEyMjMjT3RoZXIgT2lsc2VlZCBQcm9jZXNzaW5nIzMxMTIyCi1uYWljcyMzMTEyMjUjRmF0cyBhbmQgT2lscyBSZWZpbmluZyBhbmQgQmxlbmRpbmcjMzExMjIKLW5haWNzIzMxMTIzI0JyZWFrZmFzdCBDZXJlYWwgTWFudWZhY3R1cmluZyMzMTEyCi1uYWljcyMzMTEzI1N1Z2FyIGFuZCBDb25mZWN0aW9uZXJ5IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTEKLW5haWNzIzMxMTMxI1N1Z2FyIE1hbnVmYWN0dXJpbmcjMzExMwotbmFpY3MjMzExMzExI1N1Z2FyY2FuZSBNaWxscyMzMTEzMQotbmFpY3MjMzExMzEyI0NhbmUgU3VnYXIgUmVmaW5pbmcjMzExMzEKLW5haWNzIzMxMTMxMyNCZWV0IFN1Z2FyIE1hbnVmYWN0dXJpbmcjMzExMzEKLW5haWNzIzMxMTMyI0Nob2NvbGF0ZSBhbmQgQ29uZmVjdGlvbmVyeSBNYW51ZmFjdHVyaW5nIGZyb20gQ2FjYW8gQmVhbnMjMzExMwotbmFpY3MjMzExMzMjQ29uZmVjdGlvbmVyeSBNYW51ZmFjdHVyaW5nIGZyb20gUHVyY2hhc2VkIENob2NvbGF0ZSMzMTEzCi1uYWljcyMzMTEzNCNOb25jaG9jb2xhdGUgQ29uZmVjdGlvbmVyeSBNYW51ZmFjdHVyaW5nIzMxMTMKLW5haWNzIzMxMTQjRnJ1aXQgYW5kIFZlZ2V0YWJsZSBQcmVzZXJ2aW5nIGFuZCBTcGVjaWFsdHkgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMQotbmFpY3MjMzExNDEjRnJvemVuIEZvb2QgTWFudWZhY3R1cmluZyMzMTE0Ci1uYWljcyMzMTE0MTEjRnJvemVuIEZydWl0LCBKdWljZSwgYW5kIFZlZ2V0YWJsZSBNYW51ZmFjdHVyaW5nIzMxMTQxCi1uYWljcyMzMTE0MTIjRnJvemVuIFNwZWNpYWx0eSBGb29kIE1hbnVmYWN0dXJpbmcjMzExNDEKLW5haWNzIzMxMTQyI0ZydWl0IGFuZCBWZWdldGFibGUgQ2FubmluZywgUGlja2xpbmcsIGFuZCBEcnlpbmcjMzExNAotbmFpY3MjMzExNDIxI0ZydWl0IGFuZCBWZWdldGFibGUgQ2FubmluZyMzMTE0MgotbmFpY3MjMzExNDIyI1NwZWNpYWx0eSBDYW5uaW5nIzMxMTQyCi1uYWljcyMzMTE0MjMjRHJpZWQgYW5kIERlaHlkcmF0ZWQgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTQyCi1uYWljcyMzMTE1I0RhaXJ5IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTEKLW5haWNzIzMxMTUxI0RhaXJ5IFByb2R1Y3QgKGV4Y2VwdCBGcm96ZW4pIE1hbnVmYWN0dXJpbmcjMzExNQotbmFpY3MjMzExNTExI0ZsdWlkIE1pbGsgTWFudWZhY3R1cmluZyMzMTE1MQotbmFpY3MjMzExNTEyI0NyZWFtZXJ5IEJ1dHRlciBNYW51ZmFjdHVyaW5nIzMxMTUxCi1uYWljcyMzMTE1MTMjQ2hlZXNlIE1hbnVmYWN0dXJpbmcjMzExNTEKLW5haWNzIzMxMTUxNCNEcnksIENvbmRlbnNlZCwgYW5kIEV2YXBvcmF0ZWQgRGFpcnkgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxMTUxCi1uYWljcyMzMTE1MiNJY2UgQ3JlYW0gYW5kIEZyb3plbiBEZXNzZXJ0IE1hbnVmYWN0dXJpbmcjMzExNQotbmFpY3MjMzExNiNBbmltYWwgU2xhdWdodGVyaW5nIGFuZCBQcm9jZXNzaW5nIzMxMQotbmFpY3MjMzExNjEjQW5pbWFsIFNsYXVnaHRlcmluZyBhbmQgUHJvY2Vzc2luZyMzMTE2Ci1uYWljcyMzMTE2MTEjQW5pbWFsIChleGNlcHQgUG91bHRyeSkgU2xhdWdodGVyaW5nIzMxMTYxCi1uYWljcyMzMTE2MTIjTWVhdCBQcm9jZXNzZWQgZnJvbSBDYXJjYXNzZXMjMzExNjEKLW5haWNzIzMxMTYxMyNSZW5kZXJpbmcgYW5kIE1lYXQgQnlwcm9kdWN0IFByb2Nlc3NpbmcjMzExNjEKLW5haWNzIzMxMTYxNSNQb3VsdHJ5IFByb2Nlc3NpbmcjMzExNjEKLW5haWNzIzMxMTcjU2VhZm9vZCBQcm9kdWN0IFByZXBhcmF0aW9uIGFuZCBQYWNrYWdpbmcjMzExCi1uYWljcyMzMTE3MSNTZWFmb29kIFByb2R1Y3QgUHJlcGFyYXRpb24gYW5kIFBhY2thZ2luZyMzMTE3Ci1uYWljcyMzMTE3MTEjU2VhZm9vZCBDYW5uaW5nIzMxMTcxCi1uYWljcyMzMTE3MTIjRnJlc2ggYW5kIEZyb3plbiBTZWFmb29kIFByb2Nlc3NpbmcjMzExNzEKLW5haWNzIzMxMTgjQmFrZXJpZXMgYW5kIFRvcnRpbGxhIE1hbnVmYWN0dXJpbmcjMzExCi1uYWljcyMzMTE4MSNCcmVhZCBhbmQgQmFrZXJ5IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTE4Ci1uYWljcyMzMTE4MTEjUmV0YWlsIEJha2VyaWVzIzMxMTgxCi1uYWljcyMzMTE4MTIjQ29tbWVyY2lhbCBCYWtlcmllcyMzMTE4MQotbmFpY3MjMzExODEzI0Zyb3plbiBDYWtlcywgUGllcywgYW5kIE90aGVyIFBhc3RyaWVzIE1hbnVmYWN0dXJpbmcjMzExODEKLW5haWNzIzMxMTgyI0Nvb2tpZSwgQ3JhY2tlciwgYW5kIFBhc3RhIE1hbnVmYWN0dXJpbmcjMzExOAotbmFpY3MjMzExODIxI0Nvb2tpZSBhbmQgQ3JhY2tlciBNYW51ZmFjdHVyaW5nIzMxMTgyCi1uYWljcyMzMTE4MjIjRmxvdXIgTWl4ZXMgYW5kIERvdWdoIE1hbnVmYWN0dXJpbmcgZnJvbSBQdXJjaGFzZWQgRmxvdXIjMzExODIKLW5haWNzIzMxMTgyMyNEcnkgUGFzdGEgTWFudWZhY3R1cmluZyMzMTE4MgotbmFpY3MjMzExODMjVG9ydGlsbGEgTWFudWZhY3R1cmluZyMzMTE4Ci1uYWljcyMzMTE5I090aGVyIEZvb2QgTWFudWZhY3R1cmluZyMzMTEKLW5haWNzIzMxMTkxI1NuYWNrIEZvb2QgTWFudWZhY3R1cmluZyMzMTE5Ci1uYWljcyMzMTE5MTEjUm9hc3RlZCBOdXRzIGFuZCBQZWFudXQgQnV0dGVyIE1hbnVmYWN0dXJpbmcjMzExOTEKLW5haWNzIzMxMTkxOSNPdGhlciBTbmFjayBGb29kIE1hbnVmYWN0dXJpbmcjMzExOTEKLW5haWNzIzMxMTkyI0NvZmZlZSBhbmQgVGVhIE1hbnVmYWN0dXJpbmcjMzExOQotbmFpY3MjMzExOTMjRmxhdm9yaW5nIFN5cnVwIGFuZCBDb25jZW50cmF0ZSBNYW51ZmFjdHVyaW5nIzMxMTkKLW5haWNzIzMxMTk0I1NlYXNvbmluZyBhbmQgRHJlc3NpbmcgTWFudWZhY3R1cmluZyMzMTE5Ci1uYWljcyMzMTE5NDEjTWF5b25uYWlzZSwgRHJlc3NpbmcsIGFuZCBPdGhlciBQcmVwYXJlZCBTYXVjZSBNYW51ZmFjdHVyaW5nIzMxMTk0Ci1uYWljcyMzMTE5NDIjU3BpY2UgYW5kIEV4dHJhY3QgTWFudWZhY3R1cmluZyMzMTE5NAotbmFpY3MjMzExOTkjQWxsIE90aGVyIEZvb2QgTWFudWZhY3R1cmluZyMzMTE5Ci1uYWljcyMzMTE5OTEjUGVyaXNoYWJsZSBQcmVwYXJlZCBGb29kIE1hbnVmYWN0dXJpbmcjMzExOTkKLW5haWNzIzMxMTk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBGb29kIE1hbnVmYWN0dXJpbmcjMzExOTkKLW5haWNzIzMxMiNCZXZlcmFnZSBhbmQgVG9iYWNjbyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzEKLW5haWNzIzMxMjEjQmV2ZXJhZ2UgTWFudWZhY3R1cmluZyMzMTIKLW5haWNzIzMxMjExI1NvZnQgRHJpbmsgYW5kIEljZSBNYW51ZmFjdHVyaW5nIzMxMjEKLW5haWNzIzMxMjExMSNTb2Z0IERyaW5rIE1hbnVmYWN0dXJpbmcjMzEyMTEKLW5haWNzIzMxMjExMiNCb3R0bGVkIFdhdGVyIE1hbnVmYWN0dXJpbmcjMzEyMTEKLW5haWNzIzMxMjExMyNJY2UgTWFudWZhY3R1cmluZyMzMTIxMQotbmFpY3MjMzEyMTIjQnJld2VyaWVzIzMxMjEKLW5haWNzIzMxMjEzI1dpbmVyaWVzIzMxMjEKLW5haWNzIzMxMjE0I0Rpc3RpbGxlcmllcyMzMTIxCi1uYWljcyMzMTIyI1RvYmFjY28gTWFudWZhY3R1cmluZyMzMTIKLW5haWNzIzMxMjIxI1RvYmFjY28gU3RlbW1pbmcgYW5kIFJlZHJ5aW5nIzMxMjIKLW5haWNzIzMxMjIyI1RvYmFjY28gUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxMjIKLW5haWNzIzMxMjIyMSNDaWdhcmV0dGUgTWFudWZhY3R1cmluZyMzMTIyMgotbmFpY3MjMzEyMjI5I090aGVyIFRvYmFjY28gUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxMjIyCi1uYWljcyMzMTMjVGV4dGlsZSBNaWxscyMzMQotbmFpY3MjMzEzMSNGaWJlciwgWWFybiwgYW5kIFRocmVhZCBNaWxscyMzMTMKLW5haWNzIzMxMzExI0ZpYmVyLCBZYXJuLCBhbmQgVGhyZWFkIE1pbGxzIzMxMzEKLW5haWNzIzMxMzExMSNZYXJuIFNwaW5uaW5nIE1pbGxzIzMxMzExCi1uYWljcyMzMTMxMTIjWWFybiBUZXh0dXJpemluZywgVGhyb3dpbmcsIGFuZCBUd2lzdGluZyBNaWxscyMzMTMxMQotbmFpY3MjMzEzMTEzI1RocmVhZCBNaWxscyMzMTMxMQotbmFpY3MjMzEzMiNGYWJyaWMgTWlsbHMjMzEzCi1uYWljcyMzMTMyMSNCcm9hZHdvdmVuIEZhYnJpYyBNaWxscyMzMTMyCi1uYWljcyMzMTMyMiNOYXJyb3cgRmFicmljIE1pbGxzIGFuZCBTY2hpZmZsaSBNYWNoaW5lIEVtYnJvaWRlcnkjMzEzMgotbmFpY3MjMzEzMjIxI05hcnJvdyBGYWJyaWMgTWlsbHMjMzEzMjIKLW5haWNzIzMxMzIyMiNTY2hpZmZsaSBNYWNoaW5lIEVtYnJvaWRlcnkjMzEzMjIKLW5haWNzIzMxMzIzI05vbndvdmVuIEZhYnJpYyBNaWxscyMzMTMyCi1uYWljcyMzMTMyNCNLbml0IEZhYnJpYyBNaWxscyMzMTMyCi1uYWljcyMzMTMyNDEjV2VmdCBLbml0IEZhYnJpYyBNaWxscyMzMTMyNAotbmFpY3MjMzEzMjQ5I090aGVyIEtuaXQgRmFicmljIGFuZCBMYWNlIE1pbGxzIzMxMzI0Ci1uYWljcyMzMTMzI1RleHRpbGUgYW5kIEZhYnJpYyBGaW5pc2hpbmcgYW5kIEZhYnJpYyBDb2F0aW5nIE1pbGxzIzMxMwotbmFpY3MjMzEzMzEjVGV4dGlsZSBhbmQgRmFicmljIEZpbmlzaGluZyBNaWxscyMzMTMzCi1uYWljcyMzMTMzMTEjQnJvYWR3b3ZlbiBGYWJyaWMgRmluaXNoaW5nIE1pbGxzIzMxMzMxCi1uYWljcyMzMTMzMTIjVGV4dGlsZSBhbmQgRmFicmljIEZpbmlzaGluZyAoZXhjZXB0IEJyb2Fkd292ZW4gRmFicmljKSBNaWxscyMzMTMzMQotbmFpY3MjMzEzMzIjRmFicmljIENvYXRpbmcgTWlsbHMjMzEzMwotbmFpY3MjMzE0I1RleHRpbGUgUHJvZHVjdCBNaWxscyMzMQotbmFpY3MjMzE0MSNUZXh0aWxlIEZ1cm5pc2hpbmdzIE1pbGxzIzMxNAotbmFpY3MjMzE0MTEjQ2FycGV0IGFuZCBSdWcgTWlsbHMjMzE0MQotbmFpY3MjMzE0MTIjQ3VydGFpbiBhbmQgTGluZW4gTWlsbHMjMzE0MQotbmFpY3MjMzE0MTIxI0N1cnRhaW4gYW5kIERyYXBlcnkgTWlsbHMjMzE0MTIKLW5haWNzIzMxNDEyOSNPdGhlciBIb3VzZWhvbGQgVGV4dGlsZSBQcm9kdWN0IE1pbGxzIzMxNDEyCi1uYWljcyMzMTQ5I090aGVyIFRleHRpbGUgUHJvZHVjdCBNaWxscyMzMTQKLW5haWNzIzMxNDkxI1RleHRpbGUgQmFnIGFuZCBDYW52YXMgTWlsbHMjMzE0OQotbmFpY3MjMzE0OTExI1RleHRpbGUgQmFnIE1pbGxzIzMxNDkxCi1uYWljcyMzMTQ5MTIjQ2FudmFzIGFuZCBSZWxhdGVkIFByb2R1Y3QgTWlsbHMjMzE0OTEKLW5haWNzIzMxNDk5I0FsbCBPdGhlciBUZXh0aWxlIFByb2R1Y3QgTWlsbHMjMzE0OQotbmFpY3MjMzE0OTkxI1JvcGUsIENvcmRhZ2UsIGFuZCBUd2luZSBNaWxscyMzMTQ5OQotbmFpY3MjMzE0OTkyI1RpcmUgQ29yZCBhbmQgVGlyZSBGYWJyaWMgTWlsbHMjMzE0OTkKLW5haWNzIzMxNDk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBUZXh0aWxlIFByb2R1Y3QgTWlsbHMjMzE0OTkKLW5haWNzIzMxNSNBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzEKLW5haWNzIzMxNTEjQXBwYXJlbCBLbml0dGluZyBNaWxscyMzMTUKLW5haWNzIzMxNTExI0hvc2llcnkgYW5kIFNvY2sgTWlsbHMjMzE1MQotbmFpY3MjMzE1MTExI1NoZWVyIEhvc2llcnkgTWlsbHMjMzE1MTEKLW5haWNzIzMxNTExOSNPdGhlciBIb3NpZXJ5IGFuZCBTb2NrIE1pbGxzIzMxNTExCi1uYWljcyMzMTUxOSNPdGhlciBBcHBhcmVsIEtuaXR0aW5nIE1pbGxzIzMxNTEKLW5haWNzIzMxNTE5MSNPdXRlcndlYXIgS25pdHRpbmcgTWlsbHMjMzE1MTkKLW5haWNzIzMxNTE5MiNVbmRlcndlYXIgYW5kIE5pZ2h0d2VhciBLbml0dGluZyBNaWxscyMzMTUxOQotbmFpY3MjMzE1MiNDdXQgYW5kIFNldyBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1Ci1uYWljcyMzMTUyMSNDdXQgYW5kIFNldyBBcHBhcmVsIENvbnRyYWN0b3JzIzMxNTIKLW5haWNzIzMxNTIxMSNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgQXBwYXJlbCBDb250cmFjdG9ycyMzMTUyMQotbmFpY3MjMzE1MjEyI1dvbWVuJ3MsIEdpcmxzJywgYW5kIEluZmFudHMnIEN1dCBhbmQgU2V3IEFwcGFyZWwgQ29udHJhY3RvcnMjMzE1MjEKLW5haWNzIzMxNTIyI01lbidzIGFuZCBCb3lzJyBDdXQgYW5kIFNldyBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1MgotbmFpY3MjMzE1MjIxI01lbidzIGFuZCBCb3lzJyBDdXQgYW5kIFNldyBVbmRlcndlYXIgYW5kIE5pZ2h0d2VhciBNYW51ZmFjdHVyaW5nIzMxNTIyCi1uYWljcyMzMTUyMjIjTWVuJ3MgYW5kIEJveXMnIEN1dCBhbmQgU2V3IFN1aXQsIENvYXQsIGFuZCBPdmVyY29hdCBNYW51ZmFjdHVyaW5nIzMxNTIyCi1uYWljcyMzMTUyMjMjTWVuJ3MgYW5kIEJveXMnIEN1dCBhbmQgU2V3IFNoaXJ0IChleGNlcHQgV29yayBTaGlydCkgTWFudWZhY3R1cmluZyMzMTUyMgotbmFpY3MjMzE1MjI0I01lbidzIGFuZCBCb3lzJyBDdXQgYW5kIFNldyBUcm91c2VyLCBTbGFjaywgYW5kIEplYW4gTWFudWZhY3R1cmluZyMzMTUyMgotbmFpY3MjMzE1MjI1I01lbidzIGFuZCBCb3lzJyBDdXQgYW5kIFNldyBXb3JrIENsb3RoaW5nIE1hbnVmYWN0dXJpbmcjMzE1MjIKLW5haWNzIzMxNTIyOCNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgT3RoZXIgT3V0ZXJ3ZWFyIE1hbnVmYWN0dXJpbmcjMzE1MjIKLW5haWNzIzMxNTIzI1dvbWVuJ3MgYW5kIEdpcmxzJyBDdXQgYW5kIFNldyBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1MgotbmFpY3MjMzE1MjMxI1dvbWVuJ3MgYW5kIEdpcmxzJyBDdXQgYW5kIFNldyBMaW5nZXJpZSwgTG91bmdld2VhciwgYW5kIE5pZ2h0d2VhciBNYW51ZmFjdHVyaW5nIzMxNTIzCi1uYWljcyMzMTUyMzIjV29tZW4ncyBhbmQgR2lybHMnIEN1dCBhbmQgU2V3IEJsb3VzZSBhbmQgU2hpcnQgTWFudWZhY3R1cmluZyMzMTUyMwotbmFpY3MjMzE1MjMzI1dvbWVuJ3MgYW5kIEdpcmxzJyBDdXQgYW5kIFNldyBEcmVzcyBNYW51ZmFjdHVyaW5nIzMxNTIzCi1uYWljcyMzMTUyMzQjV29tZW4ncyBhbmQgR2lybHMnIEN1dCBhbmQgU2V3IFN1aXQsIENvYXQsIFRhaWxvcmVkIEphY2tldCwgYW5kIFNraXJ0IE1hbnVmYWN0dXJpbmcjMzE1MjMKLW5haWNzIzMxNTIzOSNXb21lbidzIGFuZCBHaXJscycgQ3V0IGFuZCBTZXcgT3RoZXIgT3V0ZXJ3ZWFyIE1hbnVmYWN0dXJpbmcjMzE1MjMKLW5haWNzIzMxNTI5I090aGVyIEN1dCBhbmQgU2V3IEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTUyCi1uYWljcyMzMTUyOTEjSW5mYW50cycgQ3V0IGFuZCBTZXcgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTI5Ci1uYWljcyMzMTUyOTIjRnVyIGFuZCBMZWF0aGVyIEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTUyOQotbmFpY3MjMzE1Mjk5I0FsbCBPdGhlciBDdXQgYW5kIFNldyBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1MjkKLW5haWNzIzMxNTkjQXBwYXJlbCBBY2Nlc3NvcmllcyBhbmQgT3RoZXIgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNQotbmFpY3MjMzE1OTkjQXBwYXJlbCBBY2Nlc3NvcmllcyBhbmQgT3RoZXIgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTkKLW5haWNzIzMxNTk5MSNIYXQsIENhcCwgYW5kIE1pbGxpbmVyeSBNYW51ZmFjdHVyaW5nIzMxNTk5Ci1uYWljcyMzMTU5OTIjR2xvdmUgYW5kIE1pdHRlbiBNYW51ZmFjdHVyaW5nIzMxNTk5Ci1uYWljcyMzMTU5OTMjTWVuJ3MgYW5kIEJveXMnIE5lY2t3ZWFyIE1hbnVmYWN0dXJpbmcjMzE1OTkKLW5haWNzIzMxNTk5OSNPdGhlciBBcHBhcmVsIEFjY2Vzc29yaWVzIGFuZCBPdGhlciBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1OTkKLW5haWNzIzMxNiNMZWF0aGVyIGFuZCBBbGxpZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxCi1uYWljcyMzMTYxI0xlYXRoZXIgYW5kIEhpZGUgVGFubmluZyBhbmQgRmluaXNoaW5nIzMxNgotbmFpY3MjMzE2MTEjTGVhdGhlciBhbmQgSGlkZSBUYW5uaW5nIGFuZCBGaW5pc2hpbmcjMzE2MQotbmFpY3MjMzE2MiNGb290d2VhciBNYW51ZmFjdHVyaW5nIzMxNgotbmFpY3MjMzE2MjEjRm9vdHdlYXIgTWFudWZhY3R1cmluZyMzMTYyCi1uYWljcyMzMTYyMTEjUnViYmVyIGFuZCBQbGFzdGljcyBGb290d2VhciBNYW51ZmFjdHVyaW5nIzMxNjIxCi1uYWljcyMzMTYyMTIjSG91c2UgU2xpcHBlciBNYW51ZmFjdHVyaW5nIzMxNjIxCi1uYWljcyMzMTYyMTMjTWVuJ3MgRm9vdHdlYXIgKGV4Y2VwdCBBdGhsZXRpYykgTWFudWZhY3R1cmluZyMzMTYyMQotbmFpY3MjMzE2MjE0I1dvbWVuJ3MgRm9vdHdlYXIgKGV4Y2VwdCBBdGhsZXRpYykgTWFudWZhY3R1cmluZyMzMTYyMQotbmFpY3MjMzE2MjE5I090aGVyIEZvb3R3ZWFyIE1hbnVmYWN0dXJpbmcjMzE2MjEKLW5haWNzIzMxNjkjT3RoZXIgTGVhdGhlciBhbmQgQWxsaWVkIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTYKLW5haWNzIzMxNjk5I090aGVyIExlYXRoZXIgYW5kIEFsbGllZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzE2OQotbmFpY3MjMzE2OTkxI0x1Z2dhZ2UgTWFudWZhY3R1cmluZyMzMTY5OQotbmFpY3MjMzE2OTkyI1dvbWVuJ3MgSGFuZGJhZyBhbmQgUHVyc2UgTWFudWZhY3R1cmluZyMzMTY5OQotbmFpY3MjMzE2OTkzI1BlcnNvbmFsIExlYXRoZXIgR29vZCAoZXhjZXB0IFdvbWVuJ3MgSGFuZGJhZyBhbmQgUHVyc2UpIE1hbnVmYWN0dXJpbmcjMzE2OTkKLW5haWNzIzMxNjk5OSNBbGwgT3RoZXIgTGVhdGhlciBHb29kIE1hbnVmYWN0dXJpbmcjMzE2OTkKLW5haWNzIzMyI01hbnVmYWN0dXJpbmcjMzIKLW5haWNzIzMyMSNXb29kIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMgotbmFpY3MjMzIxMSNTYXdtaWxscyBhbmQgV29vZCBQcmVzZXJ2YXRpb24jMzIxCi1uYWljcyMzMjExMSNTYXdtaWxscyBhbmQgV29vZCBQcmVzZXJ2YXRpb24jMzIxMQotbmFpY3MjMzIxMTEzI1Nhd21pbGxzIzMyMTExCi1uYWljcyMzMjExMTQjV29vZCBQcmVzZXJ2YXRpb24jMzIxMTEKLW5haWNzIzMyMTIjVmVuZWVyLCBQbHl3b29kLCBhbmQgRW5naW5lZXJlZCBXb29kIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjEKLW5haWNzIzMyMTIxI1ZlbmVlciwgUGx5d29vZCwgYW5kIEVuZ2luZWVyZWQgV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIxMgotbmFpY3MjMzIxMjExI0hhcmR3b29kIFZlbmVlciBhbmQgUGx5d29vZCBNYW51ZmFjdHVyaW5nIzMyMTIxCi1uYWljcyMzMjEyMTIjU29mdHdvb2QgVmVuZWVyIGFuZCBQbHl3b29kIE1hbnVmYWN0dXJpbmcjMzIxMjEKLW5haWNzIzMyMTIxMyNFbmdpbmVlcmVkIFdvb2QgTWVtYmVyIChleGNlcHQgVHJ1c3MpIE1hbnVmYWN0dXJpbmcjMzIxMjEKLW5haWNzIzMyMTIxNCNUcnVzcyBNYW51ZmFjdHVyaW5nIzMyMTIxCi1uYWljcyMzMjEyMTkjUmVjb25zdGl0dXRlZCBXb29kIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjEyMQotbmFpY3MjMzIxOSNPdGhlciBXb29kIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjEKLW5haWNzIzMyMTkxI01pbGx3b3JrIzMyMTkKLW5haWNzIzMyMTkxMSNXb29kIFdpbmRvdyBhbmQgRG9vciBNYW51ZmFjdHVyaW5nIzMyMTkxCi1uYWljcyMzMjE5MTIjQ3V0IFN0b2NrLCBSZXNhd2luZyBMdW1iZXIsIGFuZCBQbGFuaW5nIzMyMTkxCi1uYWljcyMzMjE5MTgjT3RoZXIgTWlsbHdvcmsgKGluY2x1ZGluZyBGbG9vcmluZykjMzIxOTEKLW5haWNzIzMyMTkyI1dvb2QgQ29udGFpbmVyIGFuZCBQYWxsZXQgTWFudWZhY3R1cmluZyMzMjE5Ci1uYWljcyMzMjE5OSNBbGwgT3RoZXIgV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIxOQotbmFpY3MjMzIxOTkxI01hbnVmYWN0dXJlZCBIb21lIChNb2JpbGUgSG9tZSkgTWFudWZhY3R1cmluZyMzMjE5OQotbmFpY3MjMzIxOTkyI1ByZWZhYnJpY2F0ZWQgV29vZCBCdWlsZGluZyBNYW51ZmFjdHVyaW5nIzMyMTk5Ci1uYWljcyMzMjE5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIxOTkKLW5haWNzIzMyMiNQYXBlciBNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjIxI1B1bHAsIFBhcGVyLCBhbmQgUGFwZXJib2FyZCBNaWxscyMzMjIKLW5haWNzIzMyMjExI1B1bHAgTWlsbHMjMzIyMQotbmFpY3MjMzIyMTIjUGFwZXIgTWlsbHMjMzIyMQotbmFpY3MjMzIyMTIxI1BhcGVyIChleGNlcHQgTmV3c3ByaW50KSBNaWxscyMzMjIxMgotbmFpY3MjMzIyMTIyI05ld3NwcmludCBNaWxscyMzMjIxMgotbmFpY3MjMzIyMTMjUGFwZXJib2FyZCBNaWxscyMzMjIxCi1uYWljcyMzMjIyI0NvbnZlcnRlZCBQYXBlciBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIyCi1uYWljcyMzMjIyMSNQYXBlcmJvYXJkIENvbnRhaW5lciBNYW51ZmFjdHVyaW5nIzMyMjIKLW5haWNzIzMyMjIxMSNDb3JydWdhdGVkIGFuZCBTb2xpZCBGaWJlciBCb3ggTWFudWZhY3R1cmluZyMzMjIyMQotbmFpY3MjMzIyMjEyI0ZvbGRpbmcgUGFwZXJib2FyZCBCb3ggTWFudWZhY3R1cmluZyMzMjIyMQotbmFpY3MjMzIyMjEzI1NldHVwIFBhcGVyYm9hcmQgQm94IE1hbnVmYWN0dXJpbmcjMzIyMjEKLW5haWNzIzMyMjIxNCNGaWJlciBDYW4sIFR1YmUsIERydW0sIGFuZCBTaW1pbGFyIFByb2R1Y3RzIE1hbnVmYWN0dXJpbmcjMzIyMjEKLW5haWNzIzMyMjIxNSNOb25mb2xkaW5nIFNhbml0YXJ5IEZvb2QgQ29udGFpbmVyIE1hbnVmYWN0dXJpbmcjMzIyMjEKLW5haWNzIzMyMjIyI1BhcGVyIEJhZyBhbmQgQ29hdGVkIGFuZCBUcmVhdGVkIFBhcGVyIE1hbnVmYWN0dXJpbmcjMzIyMgotbmFpY3MjMzIyMjIxI0NvYXRlZCBhbmQgTGFtaW5hdGVkIFBhY2thZ2luZyBQYXBlciBhbmQgUGxhc3RpY3MgRmlsbSBNYW51ZmFjdHVyaW5nIzMyMjIyCi1uYWljcyMzMjIyMjIjQ29hdGVkIGFuZCBMYW1pbmF0ZWQgUGFwZXIgTWFudWZhY3R1cmluZyMzMjIyMgotbmFpY3MjMzIyMjIzI1BsYXN0aWNzLCBGb2lsLCBhbmQgQ29hdGVkIFBhcGVyIEJhZyBNYW51ZmFjdHVyaW5nIzMyMjIyCi1uYWljcyMzMjIyMjQjVW5jb2F0ZWQgUGFwZXIgYW5kIE11bHRpd2FsbCBCYWcgTWFudWZhY3R1cmluZyMzMjIyMgotbmFpY3MjMzIyMjI1I0xhbWluYXRlZCBBbHVtaW51bSBGb2lsIE1hbnVmYWN0dXJpbmcgZm9yIEZsZXhpYmxlIFBhY2thZ2luZyBVc2VzIzMyMjIyCi1uYWljcyMzMjIyMjYjU3VyZmFjZS1Db2F0ZWQgUGFwZXJib2FyZCBNYW51ZmFjdHVyaW5nIzMyMjIyCi1uYWljcyMzMjIyMyNTdGF0aW9uZXJ5IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjIyCi1uYWljcyMzMjIyMzEjRGllLUN1dCBQYXBlciBhbmQgUGFwZXJib2FyZCBPZmZpY2UgU3VwcGxpZXMgTWFudWZhY3R1cmluZyMzMjIyMwotbmFpY3MjMzIyMjMyI0VudmVsb3BlIE1hbnVmYWN0dXJpbmcjMzIyMjMKLW5haWNzIzMyMjIzMyNTdGF0aW9uZXJ5LCBUYWJsZXQsIGFuZCBSZWxhdGVkIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjIyMwotbmFpY3MjMzIyMjkjT3RoZXIgQ29udmVydGVkIFBhcGVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjIyCi1uYWljcyMzMjIyOTEjU2FuaXRhcnkgUGFwZXIgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMjI5Ci1uYWljcyMzMjIyOTkjQWxsIE90aGVyIENvbnZlcnRlZCBQYXBlciBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIyMjkKLW5haWNzIzMyMyNQcmludGluZyBhbmQgUmVsYXRlZCBTdXBwb3J0IEFjdGl2aXRpZXMjMzIKLW5haWNzIzMyMzEjUHJpbnRpbmcgYW5kIFJlbGF0ZWQgU3VwcG9ydCBBY3Rpdml0aWVzIzMyMwotbmFpY3MjMzIzMTEjUHJpbnRpbmcjMzIzMQotbmFpY3MjMzIzMTEwI0NvbW1lcmNpYWwgTGl0aG9ncmFwaGljIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMTEjQ29tbWVyY2lhbCBHcmF2dXJlIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMTIjQ29tbWVyY2lhbCBGbGV4b2dyYXBoaWMgUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzExMyNDb21tZXJjaWFsIFNjcmVlbiBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTE0I1F1aWNrIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMTUjRGlnaXRhbCBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTE2I01hbmlmb2xkIEJ1c2luZXNzIEZvcm1zIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMTcjQm9va3MgUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzExOCNCbGFua2Jvb2ssIExvb3NlbGVhZiBCaW5kZXJzLCBhbmQgRGV2aWNlcyBNYW51ZmFjdHVyaW5nIzMyMzExCi1uYWljcyMzMjMxMTkjT3RoZXIgQ29tbWVyY2lhbCBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTIjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBQcmludGluZyMzMjMxCi1uYWljcyMzMjMxMjEjVHJhZGViaW5kaW5nIGFuZCBSZWxhdGVkIFdvcmsjMzIzMTIKLW5haWNzIzMyMzEyMiNQcmVwcmVzcyBTZXJ2aWNlcyMzMjMxMgotbmFpY3MjMzI0I1BldHJvbGV1bSBhbmQgQ29hbCBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjQxI1BldHJvbGV1bSBhbmQgQ29hbCBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIzMyNAotbmFpY3MjMzI0MTEjUGV0cm9sZXVtIFJlZmluZXJpZXMjMzI0MQotbmFpY3MjMzI0MTIjQXNwaGFsdCBQYXZpbmcsIFJvb2ZpbmcsIGFuZCBTYXR1cmF0ZWQgTWF0ZXJpYWxzIE1hbnVmYWN0dXJpbmcjMzI0MQotbmFpY3MjMzI0MTIxI0FzcGhhbHQgUGF2aW5nIE1peHR1cmUgYW5kIEJsb2NrIE1hbnVmYWN0dXJpbmcjMzI0MTIKLW5haWNzIzMyNDEyMiNBc3BoYWx0IFNoaW5nbGUgYW5kIENvYXRpbmcgTWF0ZXJpYWxzIE1hbnVmYWN0dXJpbmcjMzI0MTIKLW5haWNzIzMyNDE5I090aGVyIFBldHJvbGV1bSBhbmQgQ29hbCBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIzMyNDEKLW5haWNzIzMyNDE5MSNQZXRyb2xldW0gTHVicmljYXRpbmcgT2lsIGFuZCBHcmVhc2UgTWFudWZhY3R1cmluZyMzMjQxOQotbmFpY3MjMzI0MTk5I0FsbCBPdGhlciBQZXRyb2xldW0gYW5kIENvYWwgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMjQxOQotbmFpY3MjMzI1I0NoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzIKLW5haWNzIzMyNTEjQmFzaWMgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUKLW5haWNzIzMyNTExI1BldHJvY2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUxCi1uYWljcyMzMjUxMiNJbmR1c3RyaWFsIEdhcyBNYW51ZmFjdHVyaW5nIzMyNTEKLW5haWNzIzMyNTEzI1N5bnRoZXRpYyBEeWUgYW5kIFBpZ21lbnQgTWFudWZhY3R1cmluZyMzMjUxCi1uYWljcyMzMjUxMzEjSW5vcmdhbmljIER5ZSBhbmQgUGlnbWVudCBNYW51ZmFjdHVyaW5nIzMyNTEzCi1uYWljcyMzMjUxMzIjU3ludGhldGljIE9yZ2FuaWMgRHllIGFuZCBQaWdtZW50IE1hbnVmYWN0dXJpbmcjMzI1MTMKLW5haWNzIzMyNTE4I090aGVyIEJhc2ljIElub3JnYW5pYyBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTEKLW5haWNzIzMyNTE4MSNBbGthbGllcyBhbmQgQ2hsb3JpbmUgTWFudWZhY3R1cmluZyMzMjUxOAotbmFpY3MjMzI1MTgyI0NhcmJvbiBCbGFjayBNYW51ZmFjdHVyaW5nIzMyNTE4Ci1uYWljcyMzMjUxODgjQWxsIE90aGVyIEJhc2ljIElub3JnYW5pYyBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTE4Ci1uYWljcyMzMjUxOSNPdGhlciBCYXNpYyBPcmdhbmljIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1MQotbmFpY3MjMzI1MTkxI0d1bSBhbmQgV29vZCBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTE5Ci1uYWljcyMzMjUxOTIjQ3ljbGljIENydWRlIGFuZCBJbnRlcm1lZGlhdGUgTWFudWZhY3R1cmluZyMzMjUxOQotbmFpY3MjMzI1MTkzI0V0aHlsIEFsY29ob2wgTWFudWZhY3R1cmluZyMzMjUxOQotbmFpY3MjMzI1MTk5I0FsbCBPdGhlciBCYXNpYyBPcmdhbmljIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1MTkKLW5haWNzIzMyNTIjUmVzaW4sIFN5bnRoZXRpYyBSdWJiZXIsIGFuZCBBcnRpZmljaWFsIGFuZCBTeW50aGV0aWMgRmliZXJzIGFuZCBGaWxhbWVudHMgTWFudWZhY3R1cmluZyMzMjUKLW5haWNzIzMyNTIxI1Jlc2luIGFuZCBTeW50aGV0aWMgUnViYmVyIE1hbnVmYWN0dXJpbmcjMzI1MgotbmFpY3MjMzI1MjExI1BsYXN0aWNzIE1hdGVyaWFsIGFuZCBSZXNpbiBNYW51ZmFjdHVyaW5nIzMyNTIxCi1uYWljcyMzMjUyMTIjU3ludGhldGljIFJ1YmJlciBNYW51ZmFjdHVyaW5nIzMyNTIxCi1uYWljcyMzMjUyMiNBcnRpZmljaWFsIGFuZCBTeW50aGV0aWMgRmliZXJzIGFuZCBGaWxhbWVudHMgTWFudWZhY3R1cmluZyMzMjUyCi1uYWljcyMzMjUyMjEjQ2VsbHVsb3NpYyBPcmdhbmljIEZpYmVyIE1hbnVmYWN0dXJpbmcjMzI1MjIKLW5haWNzIzMyNTIyMiNOb25jZWxsdWxvc2ljIE9yZ2FuaWMgRmliZXIgTWFudWZhY3R1cmluZyMzMjUyMgotbmFpY3MjMzI1MyNQZXN0aWNpZGUsIEZlcnRpbGl6ZXIsIGFuZCBPdGhlciBBZ3JpY3VsdHVyYWwgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUKLW5haWNzIzMyNTMxI0ZlcnRpbGl6ZXIgTWFudWZhY3R1cmluZyMzMjUzCi1uYWljcyMzMjUzMTEjTml0cm9nZW5vdXMgRmVydGlsaXplciBNYW51ZmFjdHVyaW5nIzMyNTMxCi1uYWljcyMzMjUzMTIjUGhvc3BoYXRpYyBGZXJ0aWxpemVyIE1hbnVmYWN0dXJpbmcjMzI1MzEKLW5haWNzIzMyNTMxNCNGZXJ0aWxpemVyIChNaXhpbmcgT25seSkgTWFudWZhY3R1cmluZyMzMjUzMQotbmFpY3MjMzI1MzIjUGVzdGljaWRlIGFuZCBPdGhlciBBZ3JpY3VsdHVyYWwgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUzCi1uYWljcyMzMjU0I1BoYXJtYWNldXRpY2FsIGFuZCBNZWRpY2luZSBNYW51ZmFjdHVyaW5nIzMyNQotbmFpY3MjMzI1NDEjUGhhcm1hY2V1dGljYWwgYW5kIE1lZGljaW5lIE1hbnVmYWN0dXJpbmcjMzI1NAotbmFpY3MjMzI1NDExI01lZGljaW5hbCBhbmQgQm90YW5pY2FsIE1hbnVmYWN0dXJpbmcjMzI1NDEKLW5haWNzIzMyNTQxMiNQaGFybWFjZXV0aWNhbCBQcmVwYXJhdGlvbiBNYW51ZmFjdHVyaW5nIzMyNTQxCi1uYWljcyMzMjU0MTMjSW4tVml0cm8gRGlhZ25vc3RpYyBTdWJzdGFuY2UgTWFudWZhY3R1cmluZyMzMjU0MQotbmFpY3MjMzI1NDE0I0Jpb2xvZ2ljYWwgUHJvZHVjdCAoZXhjZXB0IERpYWdub3N0aWMpIE1hbnVmYWN0dXJpbmcjMzI1NDEKLW5haWNzIzMyNTUjUGFpbnQsIENvYXRpbmcsIGFuZCBBZGhlc2l2ZSBNYW51ZmFjdHVyaW5nIzMyNQotbmFpY3MjMzI1NTEjUGFpbnQgYW5kIENvYXRpbmcgTWFudWZhY3R1cmluZyMzMjU1Ci1uYWljcyMzMjU1MiNBZGhlc2l2ZSBNYW51ZmFjdHVyaW5nIzMyNTUKLW5haWNzIzMyNTYjU29hcCwgQ2xlYW5pbmcgQ29tcG91bmQsIGFuZCBUb2lsZXQgUHJlcGFyYXRpb24gTWFudWZhY3R1cmluZyMzMjUKLW5haWNzIzMyNTYxI1NvYXAgYW5kIENsZWFuaW5nIENvbXBvdW5kIE1hbnVmYWN0dXJpbmcjMzI1NgotbmFpY3MjMzI1NjExI1NvYXAgYW5kIE90aGVyIERldGVyZ2VudCBNYW51ZmFjdHVyaW5nIzMyNTYxCi1uYWljcyMzMjU2MTIjUG9saXNoIGFuZCBPdGhlciBTYW5pdGF0aW9uIEdvb2QgTWFudWZhY3R1cmluZyMzMjU2MQotbmFpY3MjMzI1NjEzI1N1cmZhY2UgQWN0aXZlIEFnZW50IE1hbnVmYWN0dXJpbmcjMzI1NjEKLW5haWNzIzMyNTYyI1RvaWxldCBQcmVwYXJhdGlvbiBNYW51ZmFjdHVyaW5nIzMyNTYKLW5haWNzIzMyNTkjT3RoZXIgQ2hlbWljYWwgUHJvZHVjdCBhbmQgUHJlcGFyYXRpb24gTWFudWZhY3R1cmluZyMzMjUKLW5haWNzIzMyNTkxI1ByaW50aW5nIEluayBNYW51ZmFjdHVyaW5nIzMyNTkKLW5haWNzIzMyNTkyI0V4cGxvc2l2ZXMgTWFudWZhY3R1cmluZyMzMjU5Ci1uYWljcyMzMjU5OSNBbGwgT3RoZXIgQ2hlbWljYWwgUHJvZHVjdCBhbmQgUHJlcGFyYXRpb24gTWFudWZhY3R1cmluZyMzMjU5Ci1uYWljcyMzMjU5OTEjQ3VzdG9tIENvbXBvdW5kaW5nIG9mIFB1cmNoYXNlZCBSZXNpbnMjMzI1OTkKLW5haWNzIzMyNTk5MiNQaG90b2dyYXBoaWMgRmlsbSwgUGFwZXIsIFBsYXRlLCBhbmQgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjU5OQotbmFpY3MjMzI1OTk4I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIENoZW1pY2FsIFByb2R1Y3QgYW5kIFByZXBhcmF0aW9uIE1hbnVmYWN0dXJpbmcjMzI1OTkKLW5haWNzIzMyNiNQbGFzdGljcyBhbmQgUnViYmVyIFByb2R1Y3RzIE1hbnVmYWN0dXJpbmcjMzIKLW5haWNzIzMyNjEjUGxhc3RpY3MgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNgotbmFpY3MjMzI2MTEjVW5zdXBwb3J0ZWQgUGxhc3RpY3MgRmlsbSwgU2hlZXQsIGFuZCBCYWcgTWFudWZhY3R1cmluZyMzMjYxCi1uYWljcyMzMjYxMTEjVW5zdXBwb3J0ZWQgUGxhc3RpY3MgQmFnIE1hbnVmYWN0dXJpbmcjMzI2MTEKLW5haWNzIzMyNjExMiNVbnN1cHBvcnRlZCBQbGFzdGljcyBQYWNrYWdpbmcgRmlsbSBhbmQgU2hlZXQgTWFudWZhY3R1cmluZyMzMjYxMQotbmFpY3MjMzI2MTEzI1Vuc3VwcG9ydGVkIFBsYXN0aWNzIEZpbG0gYW5kIFNoZWV0IChleGNlcHQgUGFja2FnaW5nKSBNYW51ZmFjdHVyaW5nIzMyNjExCi1uYWljcyMzMjYxMiNQbGFzdGljcyBQaXBlLCBQaXBlIEZpdHRpbmcsIGFuZCBVbnN1cHBvcnRlZCBQcm9maWxlIFNoYXBlIE1hbnVmYWN0dXJpbmcjMzI2MQotbmFpY3MjMzI2MTIxI1Vuc3VwcG9ydGVkIFBsYXN0aWNzIFByb2ZpbGUgU2hhcGUgTWFudWZhY3R1cmluZyMzMjYxMgotbmFpY3MjMzI2MTIyI1BsYXN0aWNzIFBpcGUgYW5kIFBpcGUgRml0dGluZyBNYW51ZmFjdHVyaW5nIzMyNjEyCi1uYWljcyMzMjYxMyNMYW1pbmF0ZWQgUGxhc3RpY3MgUGxhdGUsIFNoZWV0LCBhbmQgU2hhcGUgTWFudWZhY3R1cmluZyMzMjYxCi1uYWljcyMzMjYxNCNQb2x5c3R5cmVuZSBGb2FtIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYxCi1uYWljcyMzMjYxNSNVcmV0aGFuZSBhbmQgT3RoZXIgRm9hbSBQcm9kdWN0IChleGNlcHQgUG9seXN0eXJlbmUpIE1hbnVmYWN0dXJpbmcjMzI2MQotbmFpY3MjMzI2MTYjUGxhc3RpY3MgQm90dGxlIE1hbnVmYWN0dXJpbmcjMzI2MQotbmFpY3MjMzI2MTkjT3RoZXIgUGxhc3RpY3MgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNjEKLW5haWNzIzMyNjE5MSNQbGFzdGljcyBQbHVtYmluZyBGaXh0dXJlIE1hbnVmYWN0dXJpbmcjMzI2MTkKLW5haWNzIzMyNjE5MiNSZXNpbGllbnQgRmxvb3IgQ292ZXJpbmcgTWFudWZhY3R1cmluZyMzMjYxOQotbmFpY3MjMzI2MTk5I0FsbCBPdGhlciBQbGFzdGljcyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI2MTkKLW5haWNzIzMyNjIjUnViYmVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYKLW5haWNzIzMyNjIxI1RpcmUgTWFudWZhY3R1cmluZyMzMjYyCi1uYWljcyMzMjYyMTEjVGlyZSBNYW51ZmFjdHVyaW5nIChleGNlcHQgUmV0cmVhZGluZykjMzI2MjEKLW5haWNzIzMyNjIxMiNUaXJlIFJldHJlYWRpbmcjMzI2MjEKLW5haWNzIzMyNjIyI1J1YmJlciBhbmQgUGxhc3RpY3MgSG9zZXMgYW5kIEJlbHRpbmcgTWFudWZhY3R1cmluZyMzMjYyCi1uYWljcyMzMjYyOSNPdGhlciBSdWJiZXIgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNjIKLW5haWNzIzMyNjI5MSNSdWJiZXIgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIGZvciBNZWNoYW5pY2FsIFVzZSMzMjYyOQotbmFpY3MjMzI2Mjk5I0FsbCBPdGhlciBSdWJiZXIgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNjI5Ci1uYWljcyMzMjcjTm9ubWV0YWxsaWMgTWluZXJhbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIKLW5haWNzIzMyNzEjQ2xheSBQcm9kdWN0IGFuZCBSZWZyYWN0b3J5IE1hbnVmYWN0dXJpbmcjMzI3Ci1uYWljcyMzMjcxMSNQb3R0ZXJ5LCBDZXJhbWljcywgYW5kIFBsdW1iaW5nIEZpeHR1cmUgTWFudWZhY3R1cmluZyMzMjcxCi1uYWljcyMzMjcxMTEjVml0cmVvdXMgQ2hpbmEgUGx1bWJpbmcgRml4dHVyZSBhbmQgQ2hpbmEgYW5kIEVhcnRoZW53YXJlIEJhdGhyb29tIEFjY2Vzc29yaWVzIE1hbnVmYWN0dXJpbmcjMzI3MTEKLW5haWNzIzMyNzExMiNWaXRyZW91cyBDaGluYSwgRmluZSBFYXJ0aGVud2FyZSwgYW5kIE90aGVyIFBvdHRlcnkgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzExCi1uYWljcyMzMjcxMTMjUG9yY2VsYWluIEVsZWN0cmljYWwgU3VwcGx5IE1hbnVmYWN0dXJpbmcjMzI3MTEKLW5haWNzIzMyNzEyI0NsYXkgQnVpbGRpbmcgTWF0ZXJpYWwgYW5kIFJlZnJhY3RvcmllcyBNYW51ZmFjdHVyaW5nIzMyNzEKLW5haWNzIzMyNzEyMSNCcmljayBhbmQgU3RydWN0dXJhbCBDbGF5IFRpbGUgTWFudWZhY3R1cmluZyMzMjcxMgotbmFpY3MjMzI3MTIyI0NlcmFtaWMgV2FsbCBhbmQgRmxvb3IgVGlsZSBNYW51ZmFjdHVyaW5nIzMyNzEyCi1uYWljcyMzMjcxMjMjT3RoZXIgU3RydWN0dXJhbCBDbGF5IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjcxMgotbmFpY3MjMzI3MTI0I0NsYXkgUmVmcmFjdG9yeSBNYW51ZmFjdHVyaW5nIzMyNzEyCi1uYWljcyMzMjcxMjUjTm9uY2xheSBSZWZyYWN0b3J5IE1hbnVmYWN0dXJpbmcjMzI3MTIKLW5haWNzIzMyNzIjR2xhc3MgYW5kIEdsYXNzIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjcKLW5haWNzIzMyNzIxI0dsYXNzIGFuZCBHbGFzcyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3MgotbmFpY3MjMzI3MjExI0ZsYXQgR2xhc3MgTWFudWZhY3R1cmluZyMzMjcyMQotbmFpY3MjMzI3MjEyI090aGVyIFByZXNzZWQgYW5kIEJsb3duIEdsYXNzIGFuZCBHbGFzc3dhcmUgTWFudWZhY3R1cmluZyMzMjcyMQotbmFpY3MjMzI3MjEzI0dsYXNzIENvbnRhaW5lciBNYW51ZmFjdHVyaW5nIzMyNzIxCi1uYWljcyMzMjcyMTUjR2xhc3MgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIE1hZGUgb2YgUHVyY2hhc2VkIEdsYXNzIzMyNzIxCi1uYWljcyMzMjczI0NlbWVudCBhbmQgQ29uY3JldGUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNwotbmFpY3MjMzI3MzEjQ2VtZW50IE1hbnVmYWN0dXJpbmcjMzI3MwotbmFpY3MjMzI3MzIjUmVhZHktTWl4IENvbmNyZXRlIE1hbnVmYWN0dXJpbmcjMzI3MwotbmFpY3MjMzI3MzMjQ29uY3JldGUgUGlwZSwgQnJpY2ssIGFuZCBCbG9jayBNYW51ZmFjdHVyaW5nIzMyNzMKLW5haWNzIzMyNzMzMSNDb25jcmV0ZSBCbG9jayBhbmQgQnJpY2sgTWFudWZhY3R1cmluZyMzMjczMwotbmFpY3MjMzI3MzMyI0NvbmNyZXRlIFBpcGUgTWFudWZhY3R1cmluZyMzMjczMwotbmFpY3MjMzI3MzkjT3RoZXIgQ29uY3JldGUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzMKLW5haWNzIzMyNzQjTGltZSBhbmQgR3lwc3VtIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjcKLW5haWNzIzMyNzQxI0xpbWUgTWFudWZhY3R1cmluZyMzMjc0Ci1uYWljcyMzMjc0MiNHeXBzdW0gUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzQKLW5haWNzIzMyNzkjT3RoZXIgTm9ubWV0YWxsaWMgTWluZXJhbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3Ci1uYWljcyMzMjc5MSNBYnJhc2l2ZSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3OQotbmFpY3MjMzI3OTkjQWxsIE90aGVyIE5vbm1ldGFsbGljIE1pbmVyYWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzkKLW5haWNzIzMyNzk5MSNDdXQgU3RvbmUgYW5kIFN0b25lIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjc5OQotbmFpY3MjMzI3OTkyI0dyb3VuZCBvciBUcmVhdGVkIE1pbmVyYWwgYW5kIEVhcnRoIE1hbnVmYWN0dXJpbmcjMzI3OTkKLW5haWNzIzMyNzk5MyNNaW5lcmFsIFdvb2wgTWFudWZhY3R1cmluZyMzMjc5OQotbmFpY3MjMzI3OTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIE5vbm1ldGFsbGljIE1pbmVyYWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzk5Ci1uYWljcyMzMyNNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzEjUHJpbWFyeSBNZXRhbCBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzExI0lyb24gYW5kIFN0ZWVsIE1pbGxzIGFuZCBGZXJyb2FsbG95IE1hbnVmYWN0dXJpbmcjMzMxCi1uYWljcyMzMzExMSNJcm9uIGFuZCBTdGVlbCBNaWxscyBhbmQgRmVycm9hbGxveSBNYW51ZmFjdHVyaW5nIzMzMTEKLW5haWNzIzMzMTExMSNJcm9uIGFuZCBTdGVlbCBNaWxscyMzMzExMQotbmFpY3MjMzMxMTEyI0VsZWN0cm9tZXRhbGx1cmdpY2FsIEZlcnJvYWxsb3kgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMTExCi1uYWljcyMzMzEyI1N0ZWVsIFByb2R1Y3QgTWFudWZhY3R1cmluZyBmcm9tIFB1cmNoYXNlZCBTdGVlbCMzMzEKLW5haWNzIzMzMTIxI0lyb24gYW5kIFN0ZWVsIFBpcGUgYW5kIFR1YmUgTWFudWZhY3R1cmluZyBmcm9tIFB1cmNoYXNlZCBTdGVlbCMzMzEyCi1uYWljcyMzMzEyMiNSb2xsaW5nIGFuZCBEcmF3aW5nIG9mIFB1cmNoYXNlZCBTdGVlbCMzMzEyCi1uYWljcyMzMzEyMjEjUm9sbGVkIFN0ZWVsIFNoYXBlIE1hbnVmYWN0dXJpbmcjMzMxMjIKLW5haWNzIzMzMTIyMiNTdGVlbCBXaXJlIERyYXdpbmcjMzMxMjIKLW5haWNzIzMzMTMjQWx1bWluYSBhbmQgQWx1bWludW0gUHJvZHVjdGlvbiBhbmQgUHJvY2Vzc2luZyMzMzEKLW5haWNzIzMzMTMxI0FsdW1pbmEgYW5kIEFsdW1pbnVtIFByb2R1Y3Rpb24gYW5kIFByb2Nlc3NpbmcjMzMxMwotbmFpY3MjMzMxMzExI0FsdW1pbmEgUmVmaW5pbmcjMzMxMzEKLW5haWNzIzMzMTMxMiNQcmltYXJ5IEFsdW1pbnVtIFByb2R1Y3Rpb24jMzMxMzEKLW5haWNzIzMzMTMxNCNTZWNvbmRhcnkgU21lbHRpbmcgYW5kIEFsbG95aW5nIG9mIEFsdW1pbnVtIzMzMTMxCi1uYWljcyMzMzEzMTUjQWx1bWludW0gU2hlZXQsIFBsYXRlLCBhbmQgRm9pbCBNYW51ZmFjdHVyaW5nIzMzMTMxCi1uYWljcyMzMzEzMTYjQWx1bWludW0gRXh0cnVkZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMTMxCi1uYWljcyMzMzEzMTkjT3RoZXIgQWx1bWludW0gUm9sbGluZyBhbmQgRHJhd2luZyMzMzEzMQotbmFpY3MjMzMxNCNOb25mZXJyb3VzIE1ldGFsIChleGNlcHQgQWx1bWludW0pIFByb2R1Y3Rpb24gYW5kIFByb2Nlc3NpbmcjMzMxCi1uYWljcyMzMzE0MSNOb25mZXJyb3VzIE1ldGFsIChleGNlcHQgQWx1bWludW0pIFNtZWx0aW5nIGFuZCBSZWZpbmluZyMzMzE0Ci1uYWljcyMzMzE0MTEjUHJpbWFyeSBTbWVsdGluZyBhbmQgUmVmaW5pbmcgb2YgQ29wcGVyIzMzMTQxCi1uYWljcyMzMzE0MTkjUHJpbWFyeSBTbWVsdGluZyBhbmQgUmVmaW5pbmcgb2YgTm9uZmVycm91cyBNZXRhbCAoZXhjZXB0IENvcHBlciBhbmQgQWx1bWludW0pIzMzMTQxCi1uYWljcyMzMzE0MiNDb3BwZXIgUm9sbGluZywgRHJhd2luZywgRXh0cnVkaW5nLCBhbmQgQWxsb3lpbmcjMzMxNAotbmFpY3MjMzMxNDIxI0NvcHBlciBSb2xsaW5nLCBEcmF3aW5nLCBhbmQgRXh0cnVkaW5nIzMzMTQyCi1uYWljcyMzMzE0MjIjQ29wcGVyIFdpcmUgKGV4Y2VwdCBNZWNoYW5pY2FsKSBEcmF3aW5nIzMzMTQyCi1uYWljcyMzMzE0MjMjU2Vjb25kYXJ5IFNtZWx0aW5nLCBSZWZpbmluZywgYW5kIEFsbG95aW5nIG9mIENvcHBlciMzMzE0MgotbmFpY3MjMzMxNDkjTm9uZmVycm91cyBNZXRhbCAoZXhjZXB0IENvcHBlciBhbmQgQWx1bWludW0pIFJvbGxpbmcsIERyYXdpbmcsIEV4dHJ1ZGluZywgYW5kIEFsbG95aW5nIzMzMTQKLW5haWNzIzMzMTQ5MSNOb25mZXJyb3VzIE1ldGFsIChleGNlcHQgQ29wcGVyIGFuZCBBbHVtaW51bSkgUm9sbGluZywgRHJhd2luZywgYW5kIEV4dHJ1ZGluZyMzMzE0OQotbmFpY3MjMzMxNDkyI1NlY29uZGFyeSBTbWVsdGluZywgUmVmaW5pbmcsIGFuZCBBbGxveWluZyBvZiBOb25mZXJyb3VzIE1ldGFsIChleGNlcHQgQ29wcGVyIGFuZCBBbHVtaW51bSkjMzMxNDkKLW5haWNzIzMzMTUjRm91bmRyaWVzIzMzMQotbmFpY3MjMzMxNTEjRmVycm91cyBNZXRhbCBGb3VuZHJpZXMjMzMxNQotbmFpY3MjMzMxNTExI0lyb24gRm91bmRyaWVzIzMzMTUxCi1uYWljcyMzMzE1MTIjU3RlZWwgSW52ZXN0bWVudCBGb3VuZHJpZXMjMzMxNTEKLW5haWNzIzMzMTUxMyNTdGVlbCBGb3VuZHJpZXMgKGV4Y2VwdCBJbnZlc3RtZW50KSMzMzE1MQotbmFpY3MjMzMxNTIjTm9uZmVycm91cyBNZXRhbCBGb3VuZHJpZXMjMzMxNQotbmFpY3MjMzMxNTIxI0FsdW1pbnVtIERpZS1DYXN0aW5nIEZvdW5kcmllcyMzMzE1MgotbmFpY3MjMzMxNTIyI05vbmZlcnJvdXMgKGV4Y2VwdCBBbHVtaW51bSkgRGllLUNhc3RpbmcgRm91bmRyaWVzIzMzMTUyCi1uYWljcyMzMzE1MjQjQWx1bWludW0gRm91bmRyaWVzIChleGNlcHQgRGllLUNhc3RpbmcpIzMzMTUyCi1uYWljcyMzMzE1MjUjQ29wcGVyIEZvdW5kcmllcyAoZXhjZXB0IERpZS1DYXN0aW5nKSMzMzE1MgotbmFpY3MjMzMxNTI4I090aGVyIE5vbmZlcnJvdXMgRm91bmRyaWVzIChleGNlcHQgRGllLUNhc3RpbmcpIzMzMTUyCi1uYWljcyMzMzIjRmFicmljYXRlZCBNZXRhbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzMjEjRm9yZ2luZyBhbmQgU3RhbXBpbmcjMzMyCi1uYWljcyMzMzIxMSNGb3JnaW5nIGFuZCBTdGFtcGluZyMzMzIxCi1uYWljcyMzMzIxMTEjSXJvbiBhbmQgU3RlZWwgRm9yZ2luZyMzMzIxMQotbmFpY3MjMzMyMTEyI05vbmZlcnJvdXMgRm9yZ2luZyMzMzIxMQotbmFpY3MjMzMyMTE0I0N1c3RvbSBSb2xsIEZvcm1pbmcjMzMyMTEKLW5haWNzIzMzMjExNSNDcm93biBhbmQgQ2xvc3VyZSBNYW51ZmFjdHVyaW5nIzMzMjExCi1uYWljcyMzMzIxMTYjTWV0YWwgU3RhbXBpbmcjMzMyMTEKLW5haWNzIzMzMjExNyNQb3dkZXIgTWV0YWxsdXJneSBQYXJ0IE1hbnVmYWN0dXJpbmcjMzMyMTEKLW5haWNzIzMzMjIjQ3V0bGVyeSBhbmQgSGFuZHRvb2wgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjIxI0N1dGxlcnkgYW5kIEhhbmR0b29sIE1hbnVmYWN0dXJpbmcjMzMyMgotbmFpY3MjMzMyMjExI0N1dGxlcnkgYW5kIEZsYXR3YXJlIChleGNlcHQgUHJlY2lvdXMpIE1hbnVmYWN0dXJpbmcjMzMyMjEKLW5haWNzIzMzMjIxMiNIYW5kIGFuZCBFZGdlIFRvb2wgTWFudWZhY3R1cmluZyMzMzIyMQotbmFpY3MjMzMyMjEzI1NhdyBCbGFkZSBhbmQgSGFuZHNhdyBNYW51ZmFjdHVyaW5nIzMzMjIxCi1uYWljcyMzMzIyMTQjS2l0Y2hlbiBVdGVuc2lsLCBQb3QsIGFuZCBQYW4gTWFudWZhY3R1cmluZyMzMzIyMQotbmFpY3MjMzMyMyNBcmNoaXRlY3R1cmFsIGFuZCBTdHJ1Y3R1cmFsIE1ldGFscyBNYW51ZmFjdHVyaW5nIzMzMgotbmFpY3MjMzMyMzEjUGxhdGUgV29yayBhbmQgRmFicmljYXRlZCBTdHJ1Y3R1cmFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzIzCi1uYWljcyMzMzIzMTEjUHJlZmFicmljYXRlZCBNZXRhbCBCdWlsZGluZyBhbmQgQ29tcG9uZW50IE1hbnVmYWN0dXJpbmcjMzMyMzEKLW5haWNzIzMzMjMxMiNGYWJyaWNhdGVkIFN0cnVjdHVyYWwgTWV0YWwgTWFudWZhY3R1cmluZyMzMzIzMQotbmFpY3MjMzMyMzEzI1BsYXRlIFdvcmsgTWFudWZhY3R1cmluZyMzMzIzMQotbmFpY3MjMzMyMzIjT3JuYW1lbnRhbCBhbmQgQXJjaGl0ZWN0dXJhbCBNZXRhbCBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIzMzMjMKLW5haWNzIzMzMjMyMSNNZXRhbCBXaW5kb3cgYW5kIERvb3IgTWFudWZhY3R1cmluZyMzMzIzMgotbmFpY3MjMzMyMzIyI1NoZWV0IE1ldGFsIFdvcmsgTWFudWZhY3R1cmluZyMzMzIzMgotbmFpY3MjMzMyMzIzI09ybmFtZW50YWwgYW5kIEFyY2hpdGVjdHVyYWwgTWV0YWwgV29yayBNYW51ZmFjdHVyaW5nIzMzMjMyCi1uYWljcyMzMzI0I0JvaWxlciwgVGFuaywgYW5kIFNoaXBwaW5nIENvbnRhaW5lciBNYW51ZmFjdHVyaW5nIzMzMgotbmFpY3MjMzMyNDEjUG93ZXIgQm9pbGVyIGFuZCBIZWF0IEV4Y2hhbmdlciBNYW51ZmFjdHVyaW5nIzMzMjQKLW5haWNzIzMzMjQyI01ldGFsIFRhbmsgKEhlYXZ5IEdhdWdlKSBNYW51ZmFjdHVyaW5nIzMzMjQKLW5haWNzIzMzMjQzI01ldGFsIENhbiwgQm94LCBhbmQgT3RoZXIgTWV0YWwgQ29udGFpbmVyIChMaWdodCBHYXVnZSkgTWFudWZhY3R1cmluZyMzMzI0Ci1uYWljcyMzMzI0MzEjTWV0YWwgQ2FuIE1hbnVmYWN0dXJpbmcjMzMyNDMKLW5haWNzIzMzMjQzOSNPdGhlciBNZXRhbCBDb250YWluZXIgTWFudWZhY3R1cmluZyMzMzI0MwotbmFpY3MjMzMyNSNIYXJkd2FyZSBNYW51ZmFjdHVyaW5nIzMzMgotbmFpY3MjMzMyNTEjSGFyZHdhcmUgTWFudWZhY3R1cmluZyMzMzI1Ci1uYWljcyMzMzI2I1NwcmluZyBhbmQgV2lyZSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMyCi1uYWljcyMzMzI2MSNTcHJpbmcgYW5kIFdpcmUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMjYKLW5haWNzIzMzMjYxMSNTcHJpbmcgKEhlYXZ5IEdhdWdlKSBNYW51ZmFjdHVyaW5nIzMzMjYxCi1uYWljcyMzMzI2MTIjU3ByaW5nIChMaWdodCBHYXVnZSkgTWFudWZhY3R1cmluZyMzMzI2MQotbmFpY3MjMzMyNjE4I090aGVyIEZhYnJpY2F0ZWQgV2lyZSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMyNjEKLW5haWNzIzMzMjcjTWFjaGluZSBTaG9wczsgVHVybmVkIFByb2R1Y3Q7IGFuZCBTY3JldywgTnV0LCBhbmQgQm9sdCBNYW51ZmFjdHVyaW5nIzMzMgotbmFpY3MjMzMyNzEjTWFjaGluZSBTaG9wcyMzMzI3Ci1uYWljcyMzMzI3MiNUdXJuZWQgUHJvZHVjdCBhbmQgU2NyZXcsIE51dCwgYW5kIEJvbHQgTWFudWZhY3R1cmluZyMzMzI3Ci1uYWljcyMzMzI3MjEjUHJlY2lzaW9uIFR1cm5lZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMyNzIKLW5haWNzIzMzMjcyMiNCb2x0LCBOdXQsIFNjcmV3LCBSaXZldCwgYW5kIFdhc2hlciBNYW51ZmFjdHVyaW5nIzMzMjcyCi1uYWljcyMzMzI4I0NvYXRpbmcsIEVuZ3JhdmluZywgSGVhdCBUcmVhdGluZywgYW5kIEFsbGllZCBBY3Rpdml0aWVzIzMzMgotbmFpY3MjMzMyODEjQ29hdGluZywgRW5ncmF2aW5nLCBIZWF0IFRyZWF0aW5nLCBhbmQgQWxsaWVkIEFjdGl2aXRpZXMjMzMyOAotbmFpY3MjMzMyODExI01ldGFsIEhlYXQgVHJlYXRpbmcjMzMyODEKLW5haWNzIzMzMjgxMiNNZXRhbCBDb2F0aW5nLCBFbmdyYXZpbmcgKGV4Y2VwdCBKZXdlbHJ5IGFuZCBTaWx2ZXJ3YXJlKSwgYW5kIEFsbGllZCBTZXJ2aWNlcyB0byBNYW51ZmFjdHVyZXJzIzMzMjgxCi1uYWljcyMzMzI4MTMjRWxlY3Ryb3BsYXRpbmcsIFBsYXRpbmcsIFBvbGlzaGluZywgQW5vZGl6aW5nLCBhbmQgQ29sb3JpbmcjMzMyODEKLW5haWNzIzMzMjkjT3RoZXIgRmFicmljYXRlZCBNZXRhbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMyCi1uYWljcyMzMzI5MSNNZXRhbCBWYWx2ZSBNYW51ZmFjdHVyaW5nIzMzMjkKLW5haWNzIzMzMjkxMSNJbmR1c3RyaWFsIFZhbHZlIE1hbnVmYWN0dXJpbmcjMzMyOTEKLW5haWNzIzMzMjkxMiNGbHVpZCBQb3dlciBWYWx2ZSBhbmQgSG9zZSBGaXR0aW5nIE1hbnVmYWN0dXJpbmcjMzMyOTEKLW5haWNzIzMzMjkxMyNQbHVtYmluZyBGaXh0dXJlIEZpdHRpbmcgYW5kIFRyaW0gTWFudWZhY3R1cmluZyMzMzI5MQotbmFpY3MjMzMyOTE5I090aGVyIE1ldGFsIFZhbHZlIGFuZCBQaXBlIEZpdHRpbmcgTWFudWZhY3R1cmluZyMzMzI5MQotbmFpY3MjMzMyOTkjQWxsIE90aGVyIEZhYnJpY2F0ZWQgTWV0YWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMjkKLW5haWNzIzMzMjk5MSNCYWxsIGFuZCBSb2xsZXIgQmVhcmluZyBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzI5OTIjU21hbGwgQXJtcyBBbW11bml0aW9uIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5MyNBbW11bml0aW9uIChleGNlcHQgU21hbGwgQXJtcykgTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTk0I1NtYWxsIEFybXMgTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTk1I090aGVyIE9yZG5hbmNlIGFuZCBBY2Nlc3NvcmllcyBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzI5OTYjRmFicmljYXRlZCBQaXBlIGFuZCBQaXBlIEZpdHRpbmcgTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTk3I0luZHVzdHJpYWwgUGF0dGVybiBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzI5OTgjRW5hbWVsZWQgSXJvbiBhbmQgTWV0YWwgU2FuaXRhcnkgV2FyZSBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzI5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgRmFicmljYXRlZCBNZXRhbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMyNNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzMzMSNBZ3JpY3VsdHVyZSwgQ29uc3RydWN0aW9uLCBhbmQgTWluaW5nIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMwotbmFpY3MjMzMzMTEjQWdyaWN1bHR1cmFsIEltcGxlbWVudCBNYW51ZmFjdHVyaW5nIzMzMzEKLW5haWNzIzMzMzExMSNGYXJtIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzMTEKLW5haWNzIzMzMzExMiNMYXduIGFuZCBHYXJkZW4gVHJhY3RvciBhbmQgSG9tZSBMYXduIGFuZCBHYXJkZW4gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzMTEKLW5haWNzIzMzMzEyI0NvbnN0cnVjdGlvbiBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMxCi1uYWljcyMzMzMxMyNNaW5pbmcgYW5kIE9pbCBhbmQgR2FzIEZpZWxkIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzEKLW5haWNzIzMzMzEzMSNNaW5pbmcgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzMxMwotbmFpY3MjMzMzMTMyI09pbCBhbmQgR2FzIEZpZWxkIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzMTMKLW5haWNzIzMzMzIjSW5kdXN0cmlhbCBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzIxI1Nhd21pbGwgYW5kIFdvb2R3b3JraW5nIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzIKLW5haWNzIzMzMzIyI1BsYXN0aWNzIGFuZCBSdWJiZXIgSW5kdXN0cnkgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMgotbmFpY3MjMzMzMjkjT3RoZXIgSW5kdXN0cmlhbCBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMyCi1uYWljcyMzMzMyOTEjUGFwZXIgSW5kdXN0cnkgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMjkKLW5haWNzIzMzMzI5MiNUZXh0aWxlIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzI5Ci1uYWljcyMzMzMyOTMjUHJpbnRpbmcgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzMyOQotbmFpY3MjMzMzMjk0I0Zvb2QgUHJvZHVjdCBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMyOQotbmFpY3MjMzMzMjk1I1NlbWljb25kdWN0b3IgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMjkKLW5haWNzIzMzMzI5OCNBbGwgT3RoZXIgSW5kdXN0cmlhbCBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMyOQotbmFpY3MjMzMzMyNDb21tZXJjaWFsIGFuZCBTZXJ2aWNlIEluZHVzdHJ5IE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMwotbmFpY3MjMzMzMzEjQ29tbWVyY2lhbCBhbmQgU2VydmljZSBJbmR1c3RyeSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMzCi1uYWljcyMzMzMzMTEjQXV0b21hdGljIFZlbmRpbmcgTWFjaGluZSBNYW51ZmFjdHVyaW5nIzMzMzMxCi1uYWljcyMzMzMzMTIjQ29tbWVyY2lhbCBMYXVuZHJ5LCBEcnljbGVhbmluZywgYW5kIFByZXNzaW5nIE1hY2hpbmUgTWFudWZhY3R1cmluZyMzMzMzMQotbmFpY3MjMzMzMzEzI09mZmljZSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMzMQotbmFpY3MjMzMzMzE0I09wdGljYWwgSW5zdHJ1bWVudCBhbmQgTGVucyBNYW51ZmFjdHVyaW5nIzMzMzMxCi1uYWljcyMzMzMzMTUjUGhvdG9ncmFwaGljIGFuZCBQaG90b2NvcHlpbmcgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzMzEKLW5haWNzIzMzMzMxOSNPdGhlciBDb21tZXJjaWFsIGFuZCBTZXJ2aWNlIEluZHVzdHJ5IE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzMxCi1uYWljcyMzMzM0I1ZlbnRpbGF0aW9uLCBIZWF0aW5nLCBBaXItQ29uZGl0aW9uaW5nLCBhbmQgQ29tbWVyY2lhbCBSZWZyaWdlcmF0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMwotbmFpY3MjMzMzNDEjVmVudGlsYXRpb24sIEhlYXRpbmcsIEFpci1Db25kaXRpb25pbmcsIGFuZCBDb21tZXJjaWFsIFJlZnJpZ2VyYXRpb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzNAotbmFpY3MjMzMzNDExI0FpciBQdXJpZmljYXRpb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzNDEKLW5haWNzIzMzMzQxMiNJbmR1c3RyaWFsIGFuZCBDb21tZXJjaWFsIEZhbiBhbmQgQmxvd2VyIE1hbnVmYWN0dXJpbmcjMzMzNDEKLW5haWNzIzMzMzQxNCNIZWF0aW5nIEVxdWlwbWVudCAoZXhjZXB0IFdhcm0gQWlyIEZ1cm5hY2VzKSBNYW51ZmFjdHVyaW5nIzMzMzQxCi1uYWljcyMzMzM0MTUjQWlyLUNvbmRpdGlvbmluZyBhbmQgV2FybSBBaXIgSGVhdGluZyBFcXVpcG1lbnQgYW5kIENvbW1lcmNpYWwgYW5kIEluZHVzdHJpYWwgUmVmcmlnZXJhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM0MQotbmFpY3MjMzMzNSNNZXRhbHdvcmtpbmcgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzCi1uYWljcyMzMzM1MSNNZXRhbHdvcmtpbmcgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzNQotbmFpY3MjMzMzNTExI0luZHVzdHJpYWwgTW9sZCBNYW51ZmFjdHVyaW5nIzMzMzUxCi1uYWljcyMzMzM1MTIjTWFjaGluZSBUb29sIChNZXRhbCBDdXR0aW5nIFR5cGVzKSBNYW51ZmFjdHVyaW5nIzMzMzUxCi1uYWljcyMzMzM1MTMjTWFjaGluZSBUb29sIChNZXRhbCBGb3JtaW5nIFR5cGVzKSBNYW51ZmFjdHVyaW5nIzMzMzUxCi1uYWljcyMzMzM1MTQjU3BlY2lhbCBEaWUgYW5kIFRvb2wsIERpZSBTZXQsIEppZywgYW5kIEZpeHR1cmUgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNTE1I0N1dHRpbmcgVG9vbCBhbmQgTWFjaGluZSBUb29sIEFjY2Vzc29yeSBNYW51ZmFjdHVyaW5nIzMzMzUxCi1uYWljcyMzMzM1MTYjUm9sbGluZyBNaWxsIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzNTEKLW5haWNzIzMzMzUxOCNPdGhlciBNZXRhbHdvcmtpbmcgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzNTEKLW5haWNzIzMzMzYjRW5naW5lLCBUdXJiaW5lLCBhbmQgUG93ZXIgVHJhbnNtaXNzaW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMwotbmFpY3MjMzMzNjEjRW5naW5lLCBUdXJiaW5lLCBhbmQgUG93ZXIgVHJhbnNtaXNzaW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzYKLW5haWNzIzMzMzYxMSNUdXJiaW5lIGFuZCBUdXJiaW5lIEdlbmVyYXRvciBTZXQgVW5pdHMgTWFudWZhY3R1cmluZyMzMzM2MQotbmFpY3MjMzMzNjEyI1NwZWVkIENoYW5nZXIsIEluZHVzdHJpYWwgSGlnaC1TcGVlZCBEcml2ZSwgYW5kIEdlYXIgTWFudWZhY3R1cmluZyMzMzM2MQotbmFpY3MjMzMzNjEzI01lY2hhbmljYWwgUG93ZXIgVHJhbnNtaXNzaW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzYxCi1uYWljcyMzMzM2MTgjT3RoZXIgRW5naW5lIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzYxCi1uYWljcyMzMzM5I090aGVyIEdlbmVyYWwgUHVycG9zZSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzkxI1B1bXAgYW5kIENvbXByZXNzb3IgTWFudWZhY3R1cmluZyMzMzM5Ci1uYWljcyMzMzM5MTEjUHVtcCBhbmQgUHVtcGluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM5MQotbmFpY3MjMzMzOTEyI0FpciBhbmQgR2FzIENvbXByZXNzb3IgTWFudWZhY3R1cmluZyMzMzM5MQotbmFpY3MjMzMzOTEzI01lYXN1cmluZyBhbmQgRGlzcGVuc2luZyBQdW1wIE1hbnVmYWN0dXJpbmcjMzMzOTEKLW5haWNzIzMzMzkyI01hdGVyaWFsIEhhbmRsaW5nIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzkKLW5haWNzIzMzMzkyMSNFbGV2YXRvciBhbmQgTW92aW5nIFN0YWlyd2F5IE1hbnVmYWN0dXJpbmcjMzMzOTIKLW5haWNzIzMzMzkyMiNDb252ZXlvciBhbmQgQ29udmV5aW5nIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzkyCi1uYWljcyMzMzM5MjMjT3ZlcmhlYWQgVHJhdmVsaW5nIENyYW5lLCBIb2lzdCwgYW5kIE1vbm9yYWlsIFN5c3RlbSBNYW51ZmFjdHVyaW5nIzMzMzkyCi1uYWljcyMzMzM5MjQjSW5kdXN0cmlhbCBUcnVjaywgVHJhY3RvciwgVHJhaWxlciwgYW5kIFN0YWNrZXIgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzOTIKLW5haWNzIzMzMzk5I0FsbCBPdGhlciBHZW5lcmFsIFB1cnBvc2UgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzOQotbmFpY3MjMzMzOTkxI1Bvd2VyLURyaXZlbiBIYW5kdG9vbCBNYW51ZmFjdHVyaW5nIzMzMzk5Ci1uYWljcyMzMzM5OTIjV2VsZGluZyBhbmQgU29sZGVyaW5nIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzk5Ci1uYWljcyMzMzM5OTMjUGFja2FnaW5nIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzk5Ci1uYWljcyMzMzM5OTQjSW5kdXN0cmlhbCBQcm9jZXNzIEZ1cm5hY2UgYW5kIE92ZW4gTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTk1I0ZsdWlkIFBvd2VyIEN5bGluZGVyIGFuZCBBY3R1YXRvciBNYW51ZmFjdHVyaW5nIzMzMzk5Ci1uYWljcyMzMzM5OTYjRmx1aWQgUG93ZXIgUHVtcCBhbmQgTW90b3IgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTk3I1NjYWxlIGFuZCBCYWxhbmNlIChleGNlcHQgTGFib3JhdG9yeSkgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIEdlbmVyYWwgUHVycG9zZSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzM0I0NvbXB1dGVyIGFuZCBFbGVjdHJvbmljIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzM0MSNDb21wdXRlciBhbmQgUGVyaXBoZXJhbCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzQKLW5haWNzIzMzNDExI0NvbXB1dGVyIGFuZCBQZXJpcGhlcmFsIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNDEKLW5haWNzIzMzNDExMSNFbGVjdHJvbmljIENvbXB1dGVyIE1hbnVmYWN0dXJpbmcjMzM0MTEKLW5haWNzIzMzNDExMiNDb21wdXRlciBTdG9yYWdlIERldmljZSBNYW51ZmFjdHVyaW5nIzMzNDExCi1uYWljcyMzMzQxMTMjQ29tcHV0ZXIgVGVybWluYWwgTWFudWZhY3R1cmluZyMzMzQxMQotbmFpY3MjMzM0MTE5I090aGVyIENvbXB1dGVyIFBlcmlwaGVyYWwgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0MTEKLW5haWNzIzMzNDIjQ29tbXVuaWNhdGlvbnMgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0Ci1uYWljcyMzMzQyMSNUZWxlcGhvbmUgQXBwYXJhdHVzIE1hbnVmYWN0dXJpbmcjMzM0MgotbmFpY3MjMzM0MjIjUmFkaW8gYW5kIFRlbGV2aXNpb24gQnJvYWRjYXN0aW5nIGFuZCBXaXJlbGVzcyBDb21tdW5pY2F0aW9ucyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzQyCi1uYWljcyMzMzQyOSNPdGhlciBDb21tdW5pY2F0aW9ucyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzQyCi1uYWljcyMzMzQzI0F1ZGlvIGFuZCBWaWRlbyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzQKLW5haWNzIzMzNDMxI0F1ZGlvIGFuZCBWaWRlbyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzQzCi1uYWljcyMzMzQ0I1NlbWljb25kdWN0b3IgYW5kIE90aGVyIEVsZWN0cm9uaWMgQ29tcG9uZW50IE1hbnVmYWN0dXJpbmcjMzM0Ci1uYWljcyMzMzQ0MSNTZW1pY29uZHVjdG9yIGFuZCBPdGhlciBFbGVjdHJvbmljIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzNDQKLW5haWNzIzMzNDQxMSNFbGVjdHJvbiBUdWJlIE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDQxMiNCYXJlIFByaW50ZWQgQ2lyY3VpdCBCb2FyZCBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTMjU2VtaWNvbmR1Y3RvciBhbmQgUmVsYXRlZCBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NDE0I0VsZWN0cm9uaWMgQ2FwYWNpdG9yIE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDQxNSNFbGVjdHJvbmljIFJlc2lzdG9yIE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDQxNiNFbGVjdHJvbmljIENvaWwsIFRyYW5zZm9ybWVyLCBhbmQgT3RoZXIgSW5kdWN0b3IgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NDE3I0VsZWN0cm9uaWMgQ29ubmVjdG9yIE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDQxOCNQcmludGVkIENpcmN1aXQgQXNzZW1ibHkgKEVsZWN0cm9uaWMgQXNzZW1ibHkpIE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDQxOSNPdGhlciBFbGVjdHJvbmljIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ1I05hdmlnYXRpb25hbCwgTWVhc3VyaW5nLCBFbGVjdHJvbWVkaWNhbCwgYW5kIENvbnRyb2wgSW5zdHJ1bWVudHMgTWFudWZhY3R1cmluZyMzMzQKLW5haWNzIzMzNDUxI05hdmlnYXRpb25hbCwgTWVhc3VyaW5nLCBFbGVjdHJvbWVkaWNhbCwgYW5kIENvbnRyb2wgSW5zdHJ1bWVudHMgTWFudWZhY3R1cmluZyMzMzQ1Ci1uYWljcyMzMzQ1MTAjRWxlY3Ryb21lZGljYWwgYW5kIEVsZWN0cm90aGVyYXBldXRpYyBBcHBhcmF0dXMgTWFudWZhY3R1cmluZyMzMzQ1MQotbmFpY3MjMzM0NTExI1NlYXJjaCwgRGV0ZWN0aW9uLCBOYXZpZ2F0aW9uLCBHdWlkYW5jZSwgQWVyb25hdXRpY2FsLCBhbmQgTmF1dGljYWwgU3lzdGVtIGFuZCBJbnN0cnVtZW50IE1hbnVmYWN0dXJpbmcjMzM0NTEKLW5haWNzIzMzNDUxMiNBdXRvbWF0aWMgRW52aXJvbm1lbnRhbCBDb250cm9sIE1hbnVmYWN0dXJpbmcgZm9yIFJlc2lkZW50aWFsLCBDb21tZXJjaWFsLCBhbmQgQXBwbGlhbmNlIFVzZSMzMzQ1MQotbmFpY3MjMzM0NTEzI0luc3RydW1lbnRzIGFuZCBSZWxhdGVkIFByb2R1Y3RzIE1hbnVmYWN0dXJpbmcgZm9yIE1lYXN1cmluZywgRGlzcGxheWluZywgYW5kIENvbnRyb2xsaW5nIEluZHVzdHJpYWwgUHJvY2VzcyBWYXJpYWJsZXMjMzM0NTEKLW5haWNzIzMzNDUxNCNUb3RhbGl6aW5nIEZsdWlkIE1ldGVyIGFuZCBDb3VudGluZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzQ1MQotbmFpY3MjMzM0NTE1I0luc3RydW1lbnQgTWFudWZhY3R1cmluZyBmb3IgTWVhc3VyaW5nIGFuZCBUZXN0aW5nIEVsZWN0cmljaXR5IGFuZCBFbGVjdHJpY2FsIFNpZ25hbHMjMzM0NTEKLW5haWNzIzMzNDUxNiNBbmFseXRpY2FsIExhYm9yYXRvcnkgSW5zdHJ1bWVudCBNYW51ZmFjdHVyaW5nIzMzNDUxCi1uYWljcyMzMzQ1MTcjSXJyYWRpYXRpb24gQXBwYXJhdHVzIE1hbnVmYWN0dXJpbmcjMzM0NTEKLW5haWNzIzMzNDUxOCNXYXRjaCwgQ2xvY2ssIGFuZCBQYXJ0IE1hbnVmYWN0dXJpbmcjMzM0NTEKLW5haWNzIzMzNDUxOSNPdGhlciBNZWFzdXJpbmcgYW5kIENvbnRyb2xsaW5nIERldmljZSBNYW51ZmFjdHVyaW5nIzMzNDUxCi1uYWljcyMzMzQ2I01hbnVmYWN0dXJpbmcgYW5kIFJlcHJvZHVjaW5nIE1hZ25ldGljIGFuZCBPcHRpY2FsIE1lZGlhIzMzNAotbmFpY3MjMzM0NjEjTWFudWZhY3R1cmluZyBhbmQgUmVwcm9kdWNpbmcgTWFnbmV0aWMgYW5kIE9wdGljYWwgTWVkaWEjMzM0NgotbmFpY3MjMzM0NjExI1NvZnR3YXJlIFJlcHJvZHVjaW5nIzMzNDYxCi1uYWljcyMzMzQ2MTIjUHJlcmVjb3JkZWQgQ29tcGFjdCBEaXNjIChleGNlcHQgU29mdHdhcmUpLCBUYXBlLCBhbmQgUmVjb3JkIFJlcHJvZHVjaW5nIzMzNDYxCi1uYWljcyMzMzQ2MTMjTWFnbmV0aWMgYW5kIE9wdGljYWwgUmVjb3JkaW5nIE1lZGlhIE1hbnVmYWN0dXJpbmcjMzM0NjEKLW5haWNzIzMzNSNFbGVjdHJpY2FsIEVxdWlwbWVudCwgQXBwbGlhbmNlLCBhbmQgQ29tcG9uZW50IE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzNTEjRWxlY3RyaWMgTGlnaHRpbmcgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM1Ci1uYWljcyMzMzUxMSNFbGVjdHJpYyBMYW1wIEJ1bGIgYW5kIFBhcnQgTWFudWZhY3R1cmluZyMzMzUxCi1uYWljcyMzMzUxMiNMaWdodGluZyBGaXh0dXJlIE1hbnVmYWN0dXJpbmcjMzM1MQotbmFpY3MjMzM1MTIxI1Jlc2lkZW50aWFsIEVsZWN0cmljIExpZ2h0aW5nIEZpeHR1cmUgTWFudWZhY3R1cmluZyMzMzUxMgotbmFpY3MjMzM1MTIyI0NvbW1lcmNpYWwsIEluZHVzdHJpYWwsIGFuZCBJbnN0aXR1dGlvbmFsIEVsZWN0cmljIExpZ2h0aW5nIEZpeHR1cmUgTWFudWZhY3R1cmluZyMzMzUxMgotbmFpY3MjMzM1MTI5I090aGVyIExpZ2h0aW5nIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNTEyCi1uYWljcyMzMzUyI0hvdXNlaG9sZCBBcHBsaWFuY2UgTWFudWZhY3R1cmluZyMzMzUKLW5haWNzIzMzNTIxI1NtYWxsIEVsZWN0cmljYWwgQXBwbGlhbmNlIE1hbnVmYWN0dXJpbmcjMzM1MgotbmFpY3MjMzM1MjExI0VsZWN0cmljIEhvdXNld2FyZXMgYW5kIEhvdXNlaG9sZCBGYW4gTWFudWZhY3R1cmluZyMzMzUyMQotbmFpY3MjMzM1MjEyI0hvdXNlaG9sZCBWYWN1dW0gQ2xlYW5lciBNYW51ZmFjdHVyaW5nIzMzNTIxCi1uYWljcyMzMzUyMiNNYWpvciBBcHBsaWFuY2UgTWFudWZhY3R1cmluZyMzMzUyCi1uYWljcyMzMzUyMjEjSG91c2Vob2xkIENvb2tpbmcgQXBwbGlhbmNlIE1hbnVmYWN0dXJpbmcjMzM1MjIKLW5haWNzIzMzNTIyMiNIb3VzZWhvbGQgUmVmcmlnZXJhdG9yIGFuZCBIb21lIEZyZWV6ZXIgTWFudWZhY3R1cmluZyMzMzUyMgotbmFpY3MjMzM1MjI0I0hvdXNlaG9sZCBMYXVuZHJ5IEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNTIyCi1uYWljcyMzMzUyMjgjT3RoZXIgTWFqb3IgSG91c2Vob2xkIEFwcGxpYW5jZSBNYW51ZmFjdHVyaW5nIzMzNTIyCi1uYWljcyMzMzUzI0VsZWN0cmljYWwgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM1Ci1uYWljcyMzMzUzMSNFbGVjdHJpY2FsIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNTMKLW5haWNzIzMzNTMxMSNQb3dlciwgRGlzdHJpYnV0aW9uLCBhbmQgU3BlY2lhbHR5IFRyYW5zZm9ybWVyIE1hbnVmYWN0dXJpbmcjMzM1MzEKLW5haWNzIzMzNTMxMiNNb3RvciBhbmQgR2VuZXJhdG9yIE1hbnVmYWN0dXJpbmcjMzM1MzEKLW5haWNzIzMzNTMxMyNTd2l0Y2hnZWFyIGFuZCBTd2l0Y2hib2FyZCBBcHBhcmF0dXMgTWFudWZhY3R1cmluZyMzMzUzMQotbmFpY3MjMzM1MzE0I1JlbGF5IGFuZCBJbmR1c3RyaWFsIENvbnRyb2wgTWFudWZhY3R1cmluZyMzMzUzMQotbmFpY3MjMzM1OSNPdGhlciBFbGVjdHJpY2FsIEVxdWlwbWVudCBhbmQgQ29tcG9uZW50IE1hbnVmYWN0dXJpbmcjMzM1Ci1uYWljcyMzMzU5MSNCYXR0ZXJ5IE1hbnVmYWN0dXJpbmcjMzM1OQotbmFpY3MjMzM1OTExI1N0b3JhZ2UgQmF0dGVyeSBNYW51ZmFjdHVyaW5nIzMzNTkxCi1uYWljcyMzMzU5MTIjUHJpbWFyeSBCYXR0ZXJ5IE1hbnVmYWN0dXJpbmcjMzM1OTEKLW5haWNzIzMzNTkyI0NvbW11bmljYXRpb24gYW5kIEVuZXJneSBXaXJlIGFuZCBDYWJsZSBNYW51ZmFjdHVyaW5nIzMzNTkKLW5haWNzIzMzNTkyMSNGaWJlciBPcHRpYyBDYWJsZSBNYW51ZmFjdHVyaW5nIzMzNTkyCi1uYWljcyMzMzU5MjkjT3RoZXIgQ29tbXVuaWNhdGlvbiBhbmQgRW5lcmd5IFdpcmUgTWFudWZhY3R1cmluZyMzMzU5MgotbmFpY3MjMzM1OTMjV2lyaW5nIERldmljZSBNYW51ZmFjdHVyaW5nIzMzNTkKLW5haWNzIzMzNTkzMSNDdXJyZW50LUNhcnJ5aW5nIFdpcmluZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzU5MwotbmFpY3MjMzM1OTMyI05vbmN1cnJlbnQtQ2FycnlpbmcgV2lyaW5nIERldmljZSBNYW51ZmFjdHVyaW5nIzMzNTkzCi1uYWljcyMzMzU5OSNBbGwgT3RoZXIgRWxlY3RyaWNhbCBFcXVpcG1lbnQgYW5kIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzNTkKLW5haWNzIzMzNTk5MSNDYXJib24gYW5kIEdyYXBoaXRlIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzU5OQotbmFpY3MjMzM1OTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIEVsZWN0cmljYWwgRXF1aXBtZW50IGFuZCBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzU5OQotbmFpY3MjMzM2I1RyYW5zcG9ydGF0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzYxI01vdG9yIFZlaGljbGUgTWFudWZhY3R1cmluZyMzMzYKLW5haWNzIzMzNjExI0F1dG9tb2JpbGUgYW5kIExpZ2h0IER1dHkgTW90b3IgVmVoaWNsZSBNYW51ZmFjdHVyaW5nIzMzNjEKLW5haWNzIzMzNjExMSNBdXRvbW9iaWxlIE1hbnVmYWN0dXJpbmcjMzM2MTEKLW5haWNzIzMzNjExMiNMaWdodCBUcnVjayBhbmQgVXRpbGl0eSBWZWhpY2xlIE1hbnVmYWN0dXJpbmcjMzM2MTEKLW5haWNzIzMzNjEyI0hlYXZ5IER1dHkgVHJ1Y2sgTWFudWZhY3R1cmluZyMzMzYxCi1uYWljcyMzMzYyI01vdG9yIFZlaGljbGUgQm9keSBhbmQgVHJhaWxlciBNYW51ZmFjdHVyaW5nIzMzNgotbmFpY3MjMzM2MjEjTW90b3IgVmVoaWNsZSBCb2R5IGFuZCBUcmFpbGVyIE1hbnVmYWN0dXJpbmcjMzM2MgotbmFpY3MjMzM2MjExI01vdG9yIFZlaGljbGUgQm9keSBNYW51ZmFjdHVyaW5nIzMzNjIxCi1uYWljcyMzMzYyMTIjVHJ1Y2sgVHJhaWxlciBNYW51ZmFjdHVyaW5nIzMzNjIxCi1uYWljcyMzMzYyMTMjTW90b3IgSG9tZSBNYW51ZmFjdHVyaW5nIzMzNjIxCi1uYWljcyMzMzYyMTQjVHJhdmVsIFRyYWlsZXIgYW5kIENhbXBlciBNYW51ZmFjdHVyaW5nIzMzNjIxCi1uYWljcyMzMzYzI01vdG9yIFZlaGljbGUgUGFydHMgTWFudWZhY3R1cmluZyMzMzYKLW5haWNzIzMzNjMxI01vdG9yIFZlaGljbGUgR2Fzb2xpbmUgRW5naW5lIGFuZCBFbmdpbmUgUGFydHMgTWFudWZhY3R1cmluZyMzMzYzCi1uYWljcyMzMzYzMTEjQ2FyYnVyZXRvciwgUGlzdG9uLCBQaXN0b24gUmluZywgYW5kIFZhbHZlIE1hbnVmYWN0dXJpbmcjMzM2MzEKLW5haWNzIzMzNjMxMiNHYXNvbGluZSBFbmdpbmUgYW5kIEVuZ2luZSBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjMxCi1uYWljcyMzMzYzMiNNb3RvciBWZWhpY2xlIEVsZWN0cmljYWwgYW5kIEVsZWN0cm9uaWMgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2MwotbmFpY3MjMzM2MzIxI1ZlaGljdWxhciBMaWdodGluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzYzMgotbmFpY3MjMzM2MzIyI090aGVyIE1vdG9yIFZlaGljbGUgRWxlY3RyaWNhbCBhbmQgRWxlY3Ryb25pYyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzYzMgotbmFpY3MjMzM2MzMjTW90b3IgVmVoaWNsZSBTdGVlcmluZyBhbmQgU3VzcGVuc2lvbiBDb21wb25lbnRzIChleGNlcHQgU3ByaW5nKSBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjM0I01vdG9yIFZlaGljbGUgQnJha2UgU3lzdGVtIE1hbnVmYWN0dXJpbmcjMzM2MwotbmFpY3MjMzM2MzUjTW90b3IgVmVoaWNsZSBUcmFuc21pc3Npb24gYW5kIFBvd2VyIFRyYWluIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2MwotbmFpY3MjMzM2MzYjTW90b3IgVmVoaWNsZSBTZWF0aW5nIGFuZCBJbnRlcmlvciBUcmltIE1hbnVmYWN0dXJpbmcjMzM2MwotbmFpY3MjMzM2MzcjTW90b3IgVmVoaWNsZSBNZXRhbCBTdGFtcGluZyMzMzYzCi1uYWljcyMzMzYzOSNPdGhlciBNb3RvciBWZWhpY2xlIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2MwotbmFpY3MjMzM2MzkxI01vdG9yIFZlaGljbGUgQWlyLUNvbmRpdGlvbmluZyBNYW51ZmFjdHVyaW5nIzMzNjM5Ci1uYWljcyMzMzYzOTkjQWxsIE90aGVyIE1vdG9yIFZlaGljbGUgUGFydHMgTWFudWZhY3R1cmluZyMzMzYzOQotbmFpY3MjMzM2NCNBZXJvc3BhY2UgUHJvZHVjdCBhbmQgUGFydHMgTWFudWZhY3R1cmluZyMzMzYKLW5haWNzIzMzNjQxI0Flcm9zcGFjZSBQcm9kdWN0IGFuZCBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjQKLW5haWNzIzMzNjQxMSNBaXJjcmFmdCBNYW51ZmFjdHVyaW5nIzMzNjQxCi1uYWljcyMzMzY0MTIjQWlyY3JhZnQgRW5naW5lIGFuZCBFbmdpbmUgUGFydHMgTWFudWZhY3R1cmluZyMzMzY0MQotbmFpY3MjMzM2NDEzI090aGVyIEFpcmNyYWZ0IFBhcnRzIGFuZCBBdXhpbGlhcnkgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2NDEKLW5haWNzIzMzNjQxNCNHdWlkZWQgTWlzc2lsZSBhbmQgU3BhY2UgVmVoaWNsZSBNYW51ZmFjdHVyaW5nIzMzNjQxCi1uYWljcyMzMzY0MTUjR3VpZGVkIE1pc3NpbGUgYW5kIFNwYWNlIFZlaGljbGUgUHJvcHVsc2lvbiBVbml0IGFuZCBQcm9wdWxzaW9uIFVuaXQgUGFydHMgTWFudWZhY3R1cmluZyMzMzY0MQotbmFpY3MjMzM2NDE5I090aGVyIEd1aWRlZCBNaXNzaWxlIGFuZCBTcGFjZSBWZWhpY2xlIFBhcnRzIGFuZCBBdXhpbGlhcnkgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2NDEKLW5haWNzIzMzNjUjUmFpbHJvYWQgUm9sbGluZyBTdG9jayBNYW51ZmFjdHVyaW5nIzMzNgotbmFpY3MjMzM2NTEjUmFpbHJvYWQgUm9sbGluZyBTdG9jayBNYW51ZmFjdHVyaW5nIzMzNjUKLW5haWNzIzMzNjYjU2hpcCBhbmQgQm9hdCBCdWlsZGluZyMzMzYKLW5haWNzIzMzNjYxI1NoaXAgYW5kIEJvYXQgQnVpbGRpbmcjMzM2NgotbmFpY3MjMzM2NjExI1NoaXAgQnVpbGRpbmcgYW5kIFJlcGFpcmluZyMzMzY2MQotbmFpY3MjMzM2NjEyI0JvYXQgQnVpbGRpbmcjMzM2NjEKLW5haWNzIzMzNjkjT3RoZXIgVHJhbnNwb3J0YXRpb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2Ci1uYWljcyMzMzY5OSNPdGhlciBUcmFuc3BvcnRhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzY5Ci1uYWljcyMzMzY5OTEjTW90b3JjeWNsZSwgQmljeWNsZSwgYW5kIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2OTkKLW5haWNzIzMzNjk5MiNNaWxpdGFyeSBBcm1vcmVkIFZlaGljbGUsIFRhbmssIGFuZCBUYW5rIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzNjk5Ci1uYWljcyMzMzY5OTkjQWxsIE90aGVyIFRyYW5zcG9ydGF0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNjk5Ci1uYWljcyMzMzcjRnVybml0dXJlIGFuZCBSZWxhdGVkIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzM3MSNIb3VzZWhvbGQgYW5kIEluc3RpdHV0aW9uYWwgRnVybml0dXJlIGFuZCBLaXRjaGVuIENhYmluZXQgTWFudWZhY3R1cmluZyMzMzcKLW5haWNzIzMzNzExI1dvb2QgS2l0Y2hlbiBDYWJpbmV0IGFuZCBDb3VudGVydG9wIE1hbnVmYWN0dXJpbmcjMzM3MQotbmFpY3MjMzM3MTIjSG91c2Vob2xkIGFuZCBJbnN0aXR1dGlvbmFsIEZ1cm5pdHVyZSBNYW51ZmFjdHVyaW5nIzMzNzEKLW5haWNzIzMzNzEyMSNVcGhvbHN0ZXJlZCBIb3VzZWhvbGQgRnVybml0dXJlIE1hbnVmYWN0dXJpbmcjMzM3MTIKLW5haWNzIzMzNzEyMiNOb251cGhvbHN0ZXJlZCBXb29kIEhvdXNlaG9sZCBGdXJuaXR1cmUgTWFudWZhY3R1cmluZyMzMzcxMgotbmFpY3MjMzM3MTI0I01ldGFsIEhvdXNlaG9sZCBGdXJuaXR1cmUgTWFudWZhY3R1cmluZyMzMzcxMgotbmFpY3MjMzM3MTI1I0hvdXNlaG9sZCBGdXJuaXR1cmUgKGV4Y2VwdCBXb29kIGFuZCBNZXRhbCkgTWFudWZhY3R1cmluZyMzMzcxMgotbmFpY3MjMzM3MTI3I0luc3RpdHV0aW9uYWwgRnVybml0dXJlIE1hbnVmYWN0dXJpbmcjMzM3MTIKLW5haWNzIzMzNzEyOSNXb29kIFRlbGV2aXNpb24sIFJhZGlvLCBhbmQgU2V3aW5nIE1hY2hpbmUgQ2FiaW5ldCBNYW51ZmFjdHVyaW5nIzMzNzEyCi1uYWljcyMzMzcyI09mZmljZSBGdXJuaXR1cmUgKGluY2x1ZGluZyBGaXh0dXJlcykgTWFudWZhY3R1cmluZyMzMzcKLW5haWNzIzMzNzIxI09mZmljZSBGdXJuaXR1cmUgKGluY2x1ZGluZyBGaXh0dXJlcykgTWFudWZhY3R1cmluZyMzMzcyCi1uYWljcyMzMzcyMTEjV29vZCBPZmZpY2UgRnVybml0dXJlIE1hbnVmYWN0dXJpbmcjMzM3MjEKLW5haWNzIzMzNzIxMiNDdXN0b20gQXJjaGl0ZWN0dXJhbCBXb29kd29yayBhbmQgTWlsbHdvcmsgTWFudWZhY3R1cmluZyMzMzcyMQotbmFpY3MjMzM3MjE0I09mZmljZSBGdXJuaXR1cmUgKGV4Y2VwdCBXb29kKSBNYW51ZmFjdHVyaW5nIzMzNzIxCi1uYWljcyMzMzcyMTUjU2hvd2Nhc2UsIFBhcnRpdGlvbiwgU2hlbHZpbmcsIGFuZCBMb2NrZXIgTWFudWZhY3R1cmluZyMzMzcyMQotbmFpY3MjMzM3OSNPdGhlciBGdXJuaXR1cmUgUmVsYXRlZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzM3Ci1uYWljcyMzMzc5MSNNYXR0cmVzcyBNYW51ZmFjdHVyaW5nIzMzNzkKLW5haWNzIzMzNzkyI0JsaW5kIGFuZCBTaGFkZSBNYW51ZmFjdHVyaW5nIzMzNzkKLW5haWNzIzMzOSNNaXNjZWxsYW5lb3VzIE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzOTEjTWVkaWNhbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIE1hbnVmYWN0dXJpbmcjMzM5Ci1uYWljcyMzMzkxMSNNZWRpY2FsIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgTWFudWZhY3R1cmluZyMzMzkxCi1uYWljcyMzMzkxMTEjTGFib3JhdG9yeSBBcHBhcmF0dXMgYW5kIEZ1cm5pdHVyZSBNYW51ZmFjdHVyaW5nIzMzOTExCi1uYWljcyMzMzkxMTIjU3VyZ2ljYWwgYW5kIE1lZGljYWwgSW5zdHJ1bWVudCBNYW51ZmFjdHVyaW5nIzMzOTExCi1uYWljcyMzMzkxMTMjU3VyZ2ljYWwgQXBwbGlhbmNlIGFuZCBTdXBwbGllcyBNYW51ZmFjdHVyaW5nIzMzOTExCi1uYWljcyMzMzkxMTQjRGVudGFsIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgTWFudWZhY3R1cmluZyMzMzkxMQotbmFpY3MjMzM5MTE1I09waHRoYWxtaWMgR29vZHMgTWFudWZhY3R1cmluZyMzMzkxMQotbmFpY3MjMzM5MTE2I0RlbnRhbCBMYWJvcmF0b3JpZXMjMzM5MTEKLW5haWNzIzMzOTkjT3RoZXIgTWlzY2VsbGFuZW91cyBNYW51ZmFjdHVyaW5nIzMzOQotbmFpY3MjMzM5OTEjSmV3ZWxyeSBhbmQgU2lsdmVyd2FyZSBNYW51ZmFjdHVyaW5nIzMzOTkKLW5haWNzIzMzOTkxMSNKZXdlbHJ5IChleGNlcHQgQ29zdHVtZSkgTWFudWZhY3R1cmluZyMzMzk5MQotbmFpY3MjMzM5OTEyI1NpbHZlcndhcmUgYW5kIEhvbGxvd3dhcmUgTWFudWZhY3R1cmluZyMzMzk5MQotbmFpY3MjMzM5OTEzI0pld2VsZXJzJyBNYXRlcmlhbCBhbmQgTGFwaWRhcnkgV29yayBNYW51ZmFjdHVyaW5nIzMzOTkxCi1uYWljcyMzMzk5MTQjQ29zdHVtZSBKZXdlbHJ5IGFuZCBOb3ZlbHR5IE1hbnVmYWN0dXJpbmcjMzM5OTEKLW5haWNzIzMzOTkyI1Nwb3J0aW5nIGFuZCBBdGhsZXRpYyBHb29kcyBNYW51ZmFjdHVyaW5nIzMzOTkKLW5haWNzIzMzOTkzI0RvbGwsIFRveSwgYW5kIEdhbWUgTWFudWZhY3R1cmluZyMzMzk5Ci1uYWljcyMzMzk5MzEjRG9sbCBhbmQgU3R1ZmZlZCBUb3kgTWFudWZhY3R1cmluZyMzMzk5MwotbmFpY3MjMzM5OTMyI0dhbWUsIFRveSwgYW5kIENoaWxkcmVuJ3MgVmVoaWNsZSBNYW51ZmFjdHVyaW5nIzMzOTkzCi1uYWljcyMzMzk5NCNPZmZpY2UgU3VwcGxpZXMgKGV4Y2VwdCBQYXBlcikgTWFudWZhY3R1cmluZyMzMzk5Ci1uYWljcyMzMzk5NDEjUGVuIGFuZCBNZWNoYW5pY2FsIFBlbmNpbCBNYW51ZmFjdHVyaW5nIzMzOTk0Ci1uYWljcyMzMzk5NDIjTGVhZCBQZW5jaWwgYW5kIEFydCBHb29kIE1hbnVmYWN0dXJpbmcjMzM5OTQKLW5haWNzIzMzOTk0MyNNYXJraW5nIERldmljZSBNYW51ZmFjdHVyaW5nIzMzOTk0Ci1uYWljcyMzMzk5NDQjQ2FyYm9uIFBhcGVyIGFuZCBJbmtlZCBSaWJib24gTWFudWZhY3R1cmluZyMzMzk5NAotbmFpY3MjMzM5OTUjU2lnbiBNYW51ZmFjdHVyaW5nIzMzOTkKLW5haWNzIzMzOTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIE1hbnVmYWN0dXJpbmcjMzM5OQotbmFpY3MjMzM5OTkxI0dhc2tldCwgUGFja2luZywgYW5kIFNlYWxpbmcgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM5OTkKLW5haWNzIzMzOTk5MiNNdXNpY2FsIEluc3RydW1lbnQgTWFudWZhY3R1cmluZyMzMzk5OQotbmFpY3MjMzM5OTkzI0Zhc3RlbmVyLCBCdXR0b24sIE5lZWRsZSwgYW5kIFBpbiBNYW51ZmFjdHVyaW5nIzMzOTk5Ci1uYWljcyMzMzk5OTQjQnJvb20sIEJydXNoLCBhbmQgTW9wIE1hbnVmYWN0dXJpbmcjMzM5OTkKLW5haWNzIzMzOTk5NSNCdXJpYWwgQ2Fza2V0IE1hbnVmYWN0dXJpbmcjMzM5OTkKLW5haWNzIzMzOTk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBNYW51ZmFjdHVyaW5nIzMzOTk5Ci1uYWljcyM0MiNXaG9sZXNhbGUgVHJhZGUjNDIKLW5haWNzIzQyMSNXaG9sZXNhbGUgVHJhZGUsIER1cmFibGUgR29vZHMjNDIKLW5haWNzIzQyMTEjTW90b3IgVmVoaWNsZSBhbmQgTW90b3IgVmVoaWNsZSBQYXJ0cyBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjExMSNBdXRvbW9iaWxlIGFuZCBPdGhlciBNb3RvciBWZWhpY2xlIFdob2xlc2FsZXJzIzQyMTEKLW5haWNzIzQyMTEyI01vdG9yIFZlaGljbGUgU3VwcGxpZXMgYW5kIE5ldyBQYXJ0cyBXaG9sZXNhbGVycyM0MjExCi1uYWljcyM0MjExMyNUaXJlIGFuZCBUdWJlIFdob2xlc2FsZXJzIzQyMTEKLW5haWNzIzQyMTE0I01vdG9yIFZlaGljbGUgUGFydHMgKFVzZWQpIFdob2xlc2FsZXJzIzQyMTEKLW5haWNzIzQyMTIjRnVybml0dXJlIGFuZCBIb21lIEZ1cm5pc2hpbmcgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjEyMSNGdXJuaXR1cmUgV2hvbGVzYWxlcnMjNDIxMgotbmFpY3MjNDIxMjIjSG9tZSBGdXJuaXNoaW5nIFdob2xlc2FsZXJzIzQyMTIKLW5haWNzIzQyMTMjTHVtYmVyIGFuZCBPdGhlciBDb25zdHJ1Y3Rpb24gTWF0ZXJpYWxzIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxMzEjTHVtYmVyLCBQbHl3b29kLCBNaWxsd29yaywgYW5kIFdvb2QgUGFuZWwgV2hvbGVzYWxlcnMjNDIxMwotbmFpY3MjNDIxMzIjQnJpY2ssIFN0b25lLCBhbmQgUmVsYXRlZCBDb25zdHJ1Y3Rpb24gTWF0ZXJpYWwgV2hvbGVzYWxlcnMjNDIxMwotbmFpY3MjNDIxMzMjUm9vZmluZywgU2lkaW5nLCBhbmQgSW5zdWxhdGlvbiBNYXRlcmlhbCBXaG9sZXNhbGVycyM0MjEzCi1uYWljcyM0MjEzOSNPdGhlciBDb25zdHJ1Y3Rpb24gTWF0ZXJpYWwgV2hvbGVzYWxlcnMjNDIxMwotbmFpY3MjNDIxNCNQcm9mZXNzaW9uYWwgYW5kIENvbW1lcmNpYWwgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTQxI1Bob3RvZ3JhcGhpYyBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTQKLW5haWNzIzQyMTQyI09mZmljZSBFcXVpcG1lbnQgV2hvbGVzYWxlcnMjNDIxNAotbmFpY3MjNDIxNDMjQ29tcHV0ZXIgYW5kIENvbXB1dGVyIFBlcmlwaGVyYWwgRXF1aXBtZW50IGFuZCBTb2Z0d2FyZSBXaG9sZXNhbGVycyM0MjE0Ci1uYWljcyM0MjE0NCNPdGhlciBDb21tZXJjaWFsIEVxdWlwbWVudCBXaG9sZXNhbGVycyM0MjE0Ci1uYWljcyM0MjE0NSNNZWRpY2FsLCBEZW50YWwsIGFuZCBIb3NwaXRhbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTQKLW5haWNzIzQyMTQ2I09waHRoYWxtaWMgR29vZHMgV2hvbGVzYWxlcnMjNDIxNAotbmFpY3MjNDIxNDkjT3RoZXIgUHJvZmVzc2lvbmFsIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxNAotbmFpY3MjNDIxNSNNZXRhbCBhbmQgTWluZXJhbCAoZXhjZXB0IFBldHJvbGV1bSkgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjE1MSNNZXRhbCBTZXJ2aWNlIENlbnRlcnMgYW5kIE9mZmljZXMjNDIxNQotbmFpY3MjNDIxNTIjQ29hbCBhbmQgT3RoZXIgTWluZXJhbCBhbmQgT3JlIFdob2xlc2FsZXJzIzQyMTUKLW5haWNzIzQyMTYjRWxlY3RyaWNhbCBHb29kcyBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTYxI0VsZWN0cmljYWwgQXBwYXJhdHVzIGFuZCBFcXVpcG1lbnQsIFdpcmluZyBTdXBwbGllcywgYW5kIENvbnN0cnVjdGlvbiBNYXRlcmlhbCBXaG9sZXNhbGVycyM0MjE2Ci1uYWljcyM0MjE2MiNFbGVjdHJpY2FsIEFwcGxpYW5jZSwgVGVsZXZpc2lvbiwgYW5kIFJhZGlvIFNldCBXaG9sZXNhbGVycyM0MjE2Ci1uYWljcyM0MjE2OSNPdGhlciBFbGVjdHJvbmljIFBhcnRzIGFuZCBFcXVpcG1lbnQgV2hvbGVzYWxlcnMjNDIxNgotbmFpY3MjNDIxNyNIYXJkd2FyZSwgYW5kIFBsdW1iaW5nIGFuZCBIZWF0aW5nIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjE3MSNIYXJkd2FyZSBXaG9sZXNhbGVycyM0MjE3Ci1uYWljcyM0MjE3MiNQbHVtYmluZyBhbmQgSGVhdGluZyBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIChIeWRyb25pY3MpIFdob2xlc2FsZXJzIzQyMTcKLW5haWNzIzQyMTczI1dhcm0gQWlyIEhlYXRpbmcgYW5kIEFpci1Db25kaXRpb25pbmcgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE3Ci1uYWljcyM0MjE3NCNSZWZyaWdlcmF0aW9uIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxNwotbmFpY3MjNDIxOCNNYWNoaW5lcnksIEVxdWlwbWVudCwgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxODEjQ29uc3RydWN0aW9uIGFuZCBNaW5pbmcgKGV4Y2VwdCBPaWwgV2VsbCkgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgV2hvbGVzYWxlcnMjNDIxOAotbmFpY3MjNDIxODIjRmFybSBhbmQgR2FyZGVuIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFdob2xlc2FsZXJzIzQyMTgKLW5haWNzIzQyMTgzI0luZHVzdHJpYWwgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgV2hvbGVzYWxlcnMjNDIxOAotbmFpY3MjNDIxODQjSW5kdXN0cmlhbCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE4Ci1uYWljcyM0MjE4NSNTZXJ2aWNlIEVzdGFibGlzaG1lbnQgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE4Ci1uYWljcyM0MjE4NiNUcmFuc3BvcnRhdGlvbiBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIChleGNlcHQgTW90b3IgVmVoaWNsZSkgV2hvbGVzYWxlcnMjNDIxOAotbmFpY3MjNDIxOSNNaXNjZWxsYW5lb3VzIER1cmFibGUgR29vZHMgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjE5MSNTcG9ydGluZyBhbmQgUmVjcmVhdGlvbmFsIEdvb2RzIGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE5Ci1uYWljcyM0MjE5MiNUb3kgYW5kIEhvYmJ5IEdvb2RzIGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE5Ci1uYWljcyM0MjE5MyNSZWN5Y2xhYmxlIE1hdGVyaWFsIFdob2xlc2FsZXJzIzQyMTkKLW5haWNzIzQyMTk0I0pld2VscnksIFdhdGNoLCBQcmVjaW91cyBTdG9uZSwgYW5kIFByZWNpb3VzIE1ldGFsIFdob2xlc2FsZXJzIzQyMTkKLW5haWNzIzQyMTk5I090aGVyIE1pc2NlbGxhbmVvdXMgRHVyYWJsZSBHb29kcyBXaG9sZXNhbGVycyM0MjE5Ci1uYWljcyM0MjIjV2hvbGVzYWxlIFRyYWRlLCBOb25kdXJhYmxlIEdvb2RzIzQyCi1uYWljcyM0MjIxI1BhcGVyIGFuZCBQYXBlciBQcm9kdWN0IFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyMTEjUHJpbnRpbmcgYW5kIFdyaXRpbmcgUGFwZXIgV2hvbGVzYWxlcnMjNDIyMQotbmFpY3MjNDIyMTIjU3RhdGlvbmVyeSBhbmQgT2ZmaWNlIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMjEKLW5haWNzIzQyMjEzI0luZHVzdHJpYWwgYW5kIFBlcnNvbmFsIFNlcnZpY2UgUGFwZXIgV2hvbGVzYWxlcnMjNDIyMQotbmFpY3MjNDIyMiNEcnVncyBhbmQgRHJ1Z2dpc3RzJyBTdW5kcmllcyBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjIxI0RydWdzIGFuZCBEcnVnZ2lzdHMnIFN1bmRyaWVzIFdob2xlc2FsZXJzIzQyMjIKLW5haWNzIzQyMjMjQXBwYXJlbCwgUGllY2UgR29vZHMsIGFuZCBOb3Rpb25zIFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyMzEjUGllY2UgR29vZHMsIE5vdGlvbnMsIGFuZCBPdGhlciBEcnkgR29vZHMgV2hvbGVzYWxlcnMjNDIyMwotbmFpY3MjNDIyMzIjTWVuJ3MgYW5kIEJveXMnIENsb3RoaW5nIGFuZCBGdXJuaXNoaW5ncyBXaG9sZXNhbGVycyM0MjIzCi1uYWljcyM0MjIzMyNXb21lbidzLCBDaGlsZHJlbidzLCBhbmQgSW5mYW50cycgQ2xvdGhpbmcgYW5kIEFjY2Vzc29yaWVzIFdob2xlc2FsZXJzIzQyMjMKLW5haWNzIzQyMjM0I0Zvb3R3ZWFyIFdob2xlc2FsZXJzIzQyMjMKLW5haWNzIzQyMjQjR3JvY2VyeSBhbmQgUmVsYXRlZCBQcm9kdWN0IFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyNDEjR2VuZXJhbCBMaW5lIEdyb2NlcnkgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNDIjUGFja2FnZWQgRnJvemVuIEZvb2QgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNDMjRGFpcnkgUHJvZHVjdCAoZXhjZXB0IERyaWVkIG9yIENhbm5lZCkgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNDQjUG91bHRyeSBhbmQgUG91bHRyeSBQcm9kdWN0IFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQ1I0NvbmZlY3Rpb25lcnkgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNDYjRmlzaCBhbmQgU2VhZm9vZCBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI0NyNNZWF0IGFuZCBNZWF0IFByb2R1Y3QgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNDgjRnJlc2ggRnJ1aXQgYW5kIFZlZ2V0YWJsZSBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI0OSNPdGhlciBHcm9jZXJ5IGFuZCBSZWxhdGVkIFByb2R1Y3RzIFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjUjRmFybSBQcm9kdWN0IFJhdyBNYXRlcmlhbCBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjUxI0dyYWluIGFuZCBGaWVsZCBCZWFuIFdob2xlc2FsZXJzIzQyMjUKLW5haWNzIzQyMjUyI0xpdmVzdG9jayBXaG9sZXNhbGVycyM0MjI1Ci1uYWljcyM0MjI1OSNPdGhlciBGYXJtIFByb2R1Y3QgUmF3IE1hdGVyaWFsIFdob2xlc2FsZXJzIzQyMjUKLW5haWNzIzQyMjYjQ2hlbWljYWwgYW5kIEFsbGllZCBQcm9kdWN0cyBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjYxI1BsYXN0aWNzIE1hdGVyaWFscyBhbmQgQmFzaWMgRm9ybXMgYW5kIFNoYXBlcyBXaG9sZXNhbGVycyM0MjI2Ci1uYWljcyM0MjI2OSNPdGhlciBDaGVtaWNhbCBhbmQgQWxsaWVkIFByb2R1Y3RzIFdob2xlc2FsZXJzIzQyMjYKLW5haWNzIzQyMjcjUGV0cm9sZXVtIGFuZCBQZXRyb2xldW0gUHJvZHVjdHMgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjI3MSNQZXRyb2xldW0gQnVsayBTdGF0aW9ucyBhbmQgVGVybWluYWxzIzQyMjcKLW5haWNzIzQyMjcyI1BldHJvbGV1bSBhbmQgUGV0cm9sZXVtIFByb2R1Y3RzIFdob2xlc2FsZXJzIChleGNlcHQgQnVsayBTdGF0aW9ucyBhbmQgVGVybWluYWxzKSM0MjI3Ci1uYWljcyM0MjI4I0JlZXIsIFdpbmUsIGFuZCBEaXN0aWxsZWQgQWxjb2hvbGljIEJldmVyYWdlIFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyODEjQmVlciBhbmQgQWxlIFdob2xlc2FsZXJzIzQyMjgKLW5haWNzIzQyMjgyI1dpbmUgYW5kIERpc3RpbGxlZCBBbGNvaG9saWMgQmV2ZXJhZ2UgV2hvbGVzYWxlcnMjNDIyOAotbmFpY3MjNDIyOSNNaXNjZWxsYW5lb3VzIE5vbmR1cmFibGUgR29vZHMgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjI5MSNGYXJtIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMjkKLW5haWNzIzQyMjkyI0Jvb2ssIFBlcmlvZGljYWwsIGFuZCBOZXdzcGFwZXIgV2hvbGVzYWxlcnMjNDIyOQotbmFpY3MjNDIyOTMjRmxvd2VyLCBOdXJzZXJ5IFN0b2NrLCBhbmQgRmxvcmlzdHMnIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMjkKLW5haWNzIzQyMjk0I1RvYmFjY28gYW5kIFRvYmFjY28gUHJvZHVjdCBXaG9sZXNhbGVycyM0MjI5Ci1uYWljcyM0MjI5NSNQYWludCwgVmFybmlzaCwgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMjkKLW5haWNzIzQyMjk5I090aGVyIE1pc2NlbGxhbmVvdXMgTm9uZHVyYWJsZSBHb29kcyBXaG9sZXNhbGVycyM0MjI5Ci1uYWljcyM0NCNSZXRhaWwgVHJhZGUjNDQKLW5haWNzIzQ0MSNNb3RvciBWZWhpY2xlIGFuZCBQYXJ0cyBEZWFsZXJzIzQ0Ci1uYWljcyM0NDExI0F1dG9tb2JpbGUgRGVhbGVycyM0NDEKLW5haWNzIzQ0MTExI05ldyBDYXIgRGVhbGVycyM0NDExCi1uYWljcyM0NDExMiNVc2VkIENhciBEZWFsZXJzIzQ0MTEKLW5haWNzIzQ0MTIjT3RoZXIgTW90b3IgVmVoaWNsZSBEZWFsZXJzIzQ0MQotbmFpY3MjNDQxMjEjUmVjcmVhdGlvbmFsIFZlaGljbGUgRGVhbGVycyM0NDEyCi1uYWljcyM0NDEyMiNNb3RvcmN5Y2xlLCBCb2F0LCBhbmQgT3RoZXIgTW90b3IgVmVoaWNsZSBEZWFsZXJzIzQ0MTIKLW5haWNzIzQ0MTIyMSNNb3RvcmN5Y2xlIERlYWxlcnMjNDQxMjIKLW5haWNzIzQ0MTIyMiNCb2F0IERlYWxlcnMjNDQxMjIKLW5haWNzIzQ0MTIyOSNBbGwgT3RoZXIgTW90b3IgVmVoaWNsZSBEZWFsZXJzIzQ0MTIyCi1uYWljcyM0NDEzI0F1dG9tb3RpdmUgUGFydHMsIEFjY2Vzc29yaWVzLCBhbmQgVGlyZSBTdG9yZXMjNDQxCi1uYWljcyM0NDEzMSNBdXRvbW90aXZlIFBhcnRzIGFuZCBBY2Nlc3NvcmllcyBTdG9yZXMjNDQxMwotbmFpY3MjNDQxMzIjVGlyZSBEZWFsZXJzIzQ0MTMKLW5haWNzIzQ0MiNGdXJuaXR1cmUgYW5kIEhvbWUgRnVybmlzaGluZ3MgU3RvcmVzIzQ0Ci1uYWljcyM0NDIxI0Z1cm5pdHVyZSBTdG9yZXMjNDQyCi1uYWljcyM0NDIxMSNGdXJuaXR1cmUgU3RvcmVzIzQ0MjEKLW5haWNzIzQ0MjIjSG9tZSBGdXJuaXNoaW5ncyBTdG9yZXMjNDQyCi1uYWljcyM0NDIyMSNGbG9vciBDb3ZlcmluZyBTdG9yZXMjNDQyMgotbmFpY3MjNDQyMjkjT3RoZXIgSG9tZSBGdXJuaXNoaW5ncyBTdG9yZXMjNDQyMgotbmFpY3MjNDQyMjkxI1dpbmRvdyBUcmVhdG1lbnQgU3RvcmVzIzQ0MjI5Ci1uYWljcyM0NDIyOTkjQWxsIE90aGVyIEhvbWUgRnVybmlzaGluZ3MgU3RvcmVzIzQ0MjI5Ci1uYWljcyM0NDMjRWxlY3Ryb25pY3MgYW5kIEFwcGxpYW5jZSBTdG9yZXMjNDQKLW5haWNzIzQ0MzEjRWxlY3Ryb25pY3MgYW5kIEFwcGxpYW5jZSBTdG9yZXMjNDQzCi1uYWljcyM0NDMxMSNBcHBsaWFuY2UsIFRlbGV2aXNpb24sIGFuZCBPdGhlciBFbGVjdHJvbmljcyBTdG9yZXMjNDQzMQotbmFpY3MjNDQzMTExI0hvdXNlaG9sZCBBcHBsaWFuY2UgU3RvcmVzIzQ0MzExCi1uYWljcyM0NDMxMTIjUmFkaW8sIFRlbGV2aXNpb24sIGFuZCBPdGhlciBFbGVjdHJvbmljcyBTdG9yZXMjNDQzMTEKLW5haWNzIzQ0MzEyI0NvbXB1dGVyIGFuZCBTb2Z0d2FyZSBTdG9yZXMjNDQzMQotbmFpY3MjNDQzMTMjQ2FtZXJhIGFuZCBQaG90b2dyYXBoaWMgU3VwcGxpZXMgU3RvcmVzIzQ0MzEKLW5haWNzIzQ0NCNCdWlsZGluZyBNYXRlcmlhbCBhbmQgR2FyZGVuIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgRGVhbGVycyM0NAotbmFpY3MjNDQ0MSNCdWlsZGluZyBNYXRlcmlhbCBhbmQgU3VwcGxpZXMgRGVhbGVycyM0NDQKLW5haWNzIzQ0NDExI0hvbWUgQ2VudGVycyM0NDQxCi1uYWljcyM0NDQxMiNQYWludCBhbmQgV2FsbHBhcGVyIFN0b3JlcyM0NDQxCi1uYWljcyM0NDQxMyNIYXJkd2FyZSBTdG9yZXMjNDQ0MQotbmFpY3MjNDQ0MTkjT3RoZXIgQnVpbGRpbmcgTWF0ZXJpYWwgRGVhbGVycyM0NDQxCi1uYWljcyM0NDQyI0xhd24gYW5kIEdhcmRlbiBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFN0b3JlcyM0NDQKLW5haWNzIzQ0NDIxI091dGRvb3IgUG93ZXIgRXF1aXBtZW50IFN0b3JlcyM0NDQyCi1uYWljcyM0NDQyMiNOdXJzZXJ5IGFuZCBHYXJkZW4gQ2VudGVycyM0NDQyCi1uYWljcyM0NDUjRm9vZCBhbmQgQmV2ZXJhZ2UgU3RvcmVzIzQ0Ci1uYWljcyM0NDUxI0dyb2NlcnkgU3RvcmVzIzQ0NQotbmFpY3MjNDQ1MTEjU3VwZXJtYXJrZXRzIGFuZCBPdGhlciBHcm9jZXJ5IChleGNlcHQgQ29udmVuaWVuY2UpIFN0b3JlcyM0NDUxCi1uYWljcyM0NDUxMiNDb252ZW5pZW5jZSBTdG9yZXMjNDQ1MQotbmFpY3MjNDQ1MiNTcGVjaWFsdHkgRm9vZCBTdG9yZXMjNDQ1Ci1uYWljcyM0NDUyMSNNZWF0IE1hcmtldHMjNDQ1MgotbmFpY3MjNDQ1MjIjRmlzaCBhbmQgU2VhZm9vZCBNYXJrZXRzIzQ0NTIKLW5haWNzIzQ0NTIzI0ZydWl0IGFuZCBWZWdldGFibGUgTWFya2V0cyM0NDUyCi1uYWljcyM0NDUyOSNPdGhlciBTcGVjaWFsdHkgRm9vZCBTdG9yZXMjNDQ1MgotbmFpY3MjNDQ1MjkxI0Jha2VkIEdvb2RzIFN0b3JlcyM0NDUyOQotbmFpY3MjNDQ1MjkyI0NvbmZlY3Rpb25lcnkgYW5kIE51dCBTdG9yZXMjNDQ1MjkKLW5haWNzIzQ0NTI5OSNBbGwgT3RoZXIgU3BlY2lhbHR5IEZvb2QgU3RvcmVzIzQ0NTI5Ci1uYWljcyM0NDUzI0JlZXIsIFdpbmUsIGFuZCBMaXF1b3IgU3RvcmVzIzQ0NQotbmFpY3MjNDQ1MzEjQmVlciwgV2luZSwgYW5kIExpcXVvciBTdG9yZXMjNDQ1MwotbmFpY3MjNDQ2I0hlYWx0aCBhbmQgUGVyc29uYWwgQ2FyZSBTdG9yZXMjNDQKLW5haWNzIzQ0NjEjSGVhbHRoIGFuZCBQZXJzb25hbCBDYXJlIFN0b3JlcyM0NDYKLW5haWNzIzQ0NjExI1BoYXJtYWNpZXMgYW5kIERydWcgU3RvcmVzIzQ0NjEKLW5haWNzIzQ0NjEyI0Nvc21ldGljcywgQmVhdXR5IFN1cHBsaWVzLCBhbmQgUGVyZnVtZSBTdG9yZXMjNDQ2MQotbmFpY3MjNDQ2MTMjT3B0aWNhbCBHb29kcyBTdG9yZXMjNDQ2MQotbmFpY3MjNDQ2MTkjT3RoZXIgSGVhbHRoIGFuZCBQZXJzb25hbCBDYXJlIFN0b3JlcyM0NDYxCi1uYWljcyM0NDYxOTEjRm9vZCAoSGVhbHRoKSBTdXBwbGVtZW50IFN0b3JlcyM0NDYxOQotbmFpY3MjNDQ2MTk5I0FsbCBPdGhlciBIZWFsdGggYW5kIFBlcnNvbmFsIENhcmUgU3RvcmVzIzQ0NjE5Ci1uYWljcyM0NDcjR2Fzb2xpbmUgU3RhdGlvbnMjNDQKLW5haWNzIzQ0NzEjR2Fzb2xpbmUgU3RhdGlvbnMjNDQ3Ci1uYWljcyM0NDcxMSNHYXNvbGluZSBTdGF0aW9ucyB3aXRoIENvbnZlbmllbmNlIFN0b3JlcyM0NDcxCi1uYWljcyM0NDcxOSNPdGhlciBHYXNvbGluZSBTdGF0aW9ucyM0NDcxCi1uYWljcyM0NDgjQ2xvdGhpbmcgYW5kIENsb3RoaW5nIEFjY2Vzc29yaWVzIFN0b3JlcyM0NAotbmFpY3MjNDQ4MSNDbG90aGluZyBTdG9yZXMjNDQ4Ci1uYWljcyM0NDgxMSNNZW4ncyBDbG90aGluZyBTdG9yZXMjNDQ4MQotbmFpY3MjNDQ4MTIjV29tZW4ncyBDbG90aGluZyBTdG9yZXMjNDQ4MQotbmFpY3MjNDQ4MTMjQ2hpbGRyZW4ncyBhbmQgSW5mYW50cycgQ2xvdGhpbmcgU3RvcmVzIzQ0ODEKLW5haWNzIzQ0ODE0I0ZhbWlseSBDbG90aGluZyBTdG9yZXMjNDQ4MQotbmFpY3MjNDQ4MTUjQ2xvdGhpbmcgQWNjZXNzb3JpZXMgU3RvcmVzIzQ0ODEKLW5haWNzIzQ0ODE5I090aGVyIENsb3RoaW5nIFN0b3JlcyM0NDgxCi1uYWljcyM0NDgyI1Nob2UgU3RvcmVzIzQ0OAotbmFpY3MjNDQ4MjEjU2hvZSBTdG9yZXMjNDQ4MgotbmFpY3MjNDQ4MyNKZXdlbHJ5LCBMdWdnYWdlLCBhbmQgTGVhdGhlciBHb29kcyBTdG9yZXMjNDQ4Ci1uYWljcyM0NDgzMSNKZXdlbHJ5IFN0b3JlcyM0NDgzCi1uYWljcyM0NDgzMiNMdWdnYWdlIGFuZCBMZWF0aGVyIEdvb2RzIFN0b3JlcyM0NDgzCi1uYWljcyM0NSNSZXRhaWwgVHJhZGUjNDUKLW5haWNzIzQ1MSNTcG9ydGluZyBHb29kcywgSG9iYnksIEJvb2ssIGFuZCBNdXNpYyBTdG9yZXMjNDUKLW5haWNzIzQ1MTEjU3BvcnRpbmcgR29vZHMsIEhvYmJ5LCBhbmQgTXVzaWNhbCBJbnN0cnVtZW50IFN0b3JlcyM0NTEKLW5haWNzIzQ1MTExI1Nwb3J0aW5nIEdvb2RzIFN0b3JlcyM0NTExCi1uYWljcyM0NTExMiNIb2JieSwgVG95LCBhbmQgR2FtZSBTdG9yZXMjNDUxMQotbmFpY3MjNDUxMTMjU2V3aW5nLCBOZWVkbGV3b3JrLCBhbmQgUGllY2UgR29vZHMgU3RvcmVzIzQ1MTEKLW5haWNzIzQ1MTE0I011c2ljYWwgSW5zdHJ1bWVudCBhbmQgU3VwcGxpZXMgU3RvcmVzIzQ1MTEKLW5haWNzIzQ1MTIjQm9vaywgUGVyaW9kaWNhbCwgYW5kIE11c2ljIFN0b3JlcyM0NTEKLW5haWNzIzQ1MTIxI0Jvb2sgU3RvcmVzIGFuZCBOZXdzIERlYWxlcnMjNDUxMgotbmFpY3MjNDUxMjExI0Jvb2sgU3RvcmVzIzQ1MTIxCi1uYWljcyM0NTEyMTIjTmV3cyBEZWFsZXJzIGFuZCBOZXdzc3RhbmRzIzQ1MTIxCi1uYWljcyM0NTEyMiNQcmVyZWNvcmRlZCBUYXBlLCBDb21wYWN0IERpc2MsIGFuZCBSZWNvcmQgU3RvcmVzIzQ1MTIKLW5haWNzIzQ1MiNHZW5lcmFsIE1lcmNoYW5kaXNlIFN0b3JlcyM0NQotbmFpY3MjNDUyMSNEZXBhcnRtZW50IFN0b3JlcyM0NTIKLW5haWNzIzQ1MjExI0RlcGFydG1lbnQgU3RvcmVzIzQ1MjEKLW5haWNzIzQ1MjkjT3RoZXIgR2VuZXJhbCBNZXJjaGFuZGlzZSBTdG9yZXMjNDUyCi1uYWljcyM0NTI5MSNXYXJlaG91c2UgQ2x1YnMgYW5kIFN1cGVyc3RvcmVzIzQ1MjkKLW5haWNzIzQ1Mjk5I0FsbCBPdGhlciBHZW5lcmFsIE1lcmNoYW5kaXNlIFN0b3JlcyM0NTI5Ci1uYWljcyM0NTMjTWlzY2VsbGFuZW91cyBTdG9yZSBSZXRhaWxlcnMjNDUKLW5haWNzIzQ1MzEjRmxvcmlzdHMjNDUzCi1uYWljcyM0NTMxMSNGbG9yaXN0cyM0NTMxCi1uYWljcyM0NTMyI09mZmljZSBTdXBwbGllcywgU3RhdGlvbmVyeSwgYW5kIEdpZnQgU3RvcmVzIzQ1MwotbmFpY3MjNDUzMjEjT2ZmaWNlIFN1cHBsaWVzIGFuZCBTdGF0aW9uZXJ5IFN0b3JlcyM0NTMyCi1uYWljcyM0NTMyMiNHaWZ0LCBOb3ZlbHR5LCBhbmQgU291dmVuaXIgU3RvcmVzIzQ1MzIKLW5haWNzIzQ1MzMjVXNlZCBNZXJjaGFuZGlzZSBTdG9yZXMjNDUzCi1uYWljcyM0NTMzMSNVc2VkIE1lcmNoYW5kaXNlIFN0b3JlcyM0NTMzCi1uYWljcyM0NTM5I090aGVyIE1pc2NlbGxhbmVvdXMgU3RvcmUgUmV0YWlsZXJzIzQ1MwotbmFpY3MjNDUzOTEjUGV0IGFuZCBQZXQgU3VwcGxpZXMgU3RvcmVzIzQ1MzkKLW5haWNzIzQ1MzkyI0FydCBEZWFsZXJzIzQ1MzkKLW5haWNzIzQ1MzkzI01hbnVmYWN0dXJlZCAoTW9iaWxlKSBIb21lIERlYWxlcnMjNDUzOQotbmFpY3MjNDUzOTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgU3RvcmUgUmV0YWlsZXJzIzQ1MzkKLW5haWNzIzQ1Mzk5MSNUb2JhY2NvIFN0b3JlcyM0NTM5OQotbmFpY3MjNDUzOTk4I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIFN0b3JlIFJldGFpbGVycyAoZXhjZXB0IFRvYmFjY28gU3RvcmVzKSM0NTM5OQotbmFpY3MjNDU0I05vbnN0b3JlIFJldGFpbGVycyM0NQotbmFpY3MjNDU0MSNFbGVjdHJvbmljIFNob3BwaW5nIGFuZCBNYWlsLU9yZGVyIEhvdXNlcyM0NTQKLW5haWNzIzQ1NDExI0VsZWN0cm9uaWMgU2hvcHBpbmcgYW5kIE1haWwtT3JkZXIgSG91c2VzIzQ1NDEKLW5haWNzIzQ1NDIjVmVuZGluZyBNYWNoaW5lIE9wZXJhdG9ycyM0NTQKLW5haWNzIzQ1NDIxI1ZlbmRpbmcgTWFjaGluZSBPcGVyYXRvcnMjNDU0MgotbmFpY3MjNDU0MyNEaXJlY3QgU2VsbGluZyBFc3RhYmxpc2htZW50cyM0NTQKLW5haWNzIzQ1NDMxI0Z1ZWwgRGVhbGVycyM0NTQzCi1uYWljcyM0NTQzMTEjSGVhdGluZyBPaWwgRGVhbGVycyM0NTQzMQotbmFpY3MjNDU0MzEyI0xpcXVlZmllZCBQZXRyb2xldW0gR2FzIChCb3R0bGVkIEdhcykgRGVhbGVycyM0NTQzMQotbmFpY3MjNDU0MzE5I090aGVyIEZ1ZWwgRGVhbGVycyM0NTQzMQotbmFpY3MjNDU0MzkjT3RoZXIgRGlyZWN0IFNlbGxpbmcgRXN0YWJsaXNobWVudHMjNDU0MwotbmFpY3MjNDgjVHJhbnNwb3J0YXRpb24gYW5kIFdhcmVob3VzaW5nIzQ4Ci1uYWljcyM0ODEjQWlyIFRyYW5zcG9ydGF0aW9uIzQ4Ci1uYWljcyM0ODExI1NjaGVkdWxlZCBBaXIgVHJhbnNwb3J0YXRpb24jNDgxCi1uYWljcyM0ODExMSNTY2hlZHVsZWQgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MTEKLW5haWNzIzQ4MTExMSNTY2hlZHVsZWQgUGFzc2VuZ2VyIEFpciBUcmFuc3BvcnRhdGlvbiM0ODExMQotbmFpY3MjNDgxMTEyI1NjaGVkdWxlZCBGcmVpZ2h0IEFpciBUcmFuc3BvcnRhdGlvbiM0ODExMQotbmFpY3MjNDgxMiNOb25zY2hlZHVsZWQgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MQotbmFpY3MjNDgxMjEjTm9uc2NoZWR1bGVkIEFpciBUcmFuc3BvcnRhdGlvbiM0ODEyCi1uYWljcyM0ODEyMTEjTm9uc2NoZWR1bGVkIENoYXJ0ZXJlZCBQYXNzZW5nZXIgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MTIxCi1uYWljcyM0ODEyMTIjTm9uc2NoZWR1bGVkIENoYXJ0ZXJlZCBGcmVpZ2h0IEFpciBUcmFuc3BvcnRhdGlvbiM0ODEyMQotbmFpY3MjNDgxMjE5I090aGVyIE5vbnNjaGVkdWxlZCBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMjEKLW5haWNzIzQ4MiNSYWlsIFRyYW5zcG9ydGF0aW9uIzQ4Ci1uYWljcyM0ODIxI1JhaWwgVHJhbnNwb3J0YXRpb24jNDgyCi1uYWljcyM0ODIxMSNSYWlsIFRyYW5zcG9ydGF0aW9uIzQ4MjEKLW5haWNzIzQ4MjExMSNMaW5lLUhhdWwgUmFpbHJvYWRzIzQ4MjExCi1uYWljcyM0ODIxMTIjU2hvcnQgTGluZSBSYWlscm9hZHMjNDgyMTEKLW5haWNzIzQ4MyNXYXRlciBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDgzMSNEZWVwIFNlYSwgQ29hc3RhbCwgYW5kIEdyZWF0IExha2VzIFdhdGVyIFRyYW5zcG9ydGF0aW9uIzQ4MwotbmFpY3MjNDgzMTEjRGVlcCBTZWEsIENvYXN0YWwsIGFuZCBHcmVhdCBMYWtlcyBXYXRlciBUcmFuc3BvcnRhdGlvbiM0ODMxCi1uYWljcyM0ODMxMTEjRGVlcCBTZWEgRnJlaWdodCBUcmFuc3BvcnRhdGlvbiM0ODMxMQotbmFpY3MjNDgzMTEyI0RlZXAgU2VhIFBhc3NlbmdlciBUcmFuc3BvcnRhdGlvbiM0ODMxMQotbmFpY3MjNDgzMTEzI0NvYXN0YWwgYW5kIEdyZWF0IExha2VzIEZyZWlnaHQgVHJhbnNwb3J0YXRpb24jNDgzMTEKLW5haWNzIzQ4MzExNCNDb2FzdGFsIGFuZCBHcmVhdCBMYWtlcyBQYXNzZW5nZXIgVHJhbnNwb3J0YXRpb24jNDgzMTEKLW5haWNzIzQ4MzIjSW5sYW5kIFdhdGVyIFRyYW5zcG9ydGF0aW9uIzQ4MwotbmFpY3MjNDgzMjEjSW5sYW5kIFdhdGVyIFRyYW5zcG9ydGF0aW9uIzQ4MzIKLW5haWNzIzQ4MzIxMSNJbmxhbmQgV2F0ZXIgRnJlaWdodCBUcmFuc3BvcnRhdGlvbiM0ODMyMQotbmFpY3MjNDgzMjEyI0lubGFuZCBXYXRlciBQYXNzZW5nZXIgVHJhbnNwb3J0YXRpb24jNDgzMjEKLW5haWNzIzQ4NCNUcnVjayBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDg0MSNHZW5lcmFsIEZyZWlnaHQgVHJ1Y2tpbmcjNDg0Ci1uYWljcyM0ODQxMSNHZW5lcmFsIEZyZWlnaHQgVHJ1Y2tpbmcsIExvY2FsIzQ4NDEKLW5haWNzIzQ4NDEyI0dlbmVyYWwgRnJlaWdodCBUcnVja2luZywgTG9uZy1EaXN0YW5jZSM0ODQxCi1uYWljcyM0ODQxMjEjR2VuZXJhbCBGcmVpZ2h0IFRydWNraW5nLCBMb25nLURpc3RhbmNlLCBUcnVja2xvYWQjNDg0MTIKLW5haWNzIzQ4NDEyMiNHZW5lcmFsIEZyZWlnaHQgVHJ1Y2tpbmcsIExvbmctRGlzdGFuY2UsIExlc3MgVGhhbiBUcnVja2xvYWQjNDg0MTIKLW5haWNzIzQ4NDIjU3BlY2lhbGl6ZWQgRnJlaWdodCBUcnVja2luZyM0ODQKLW5haWNzIzQ4NDIxI1VzZWQgSG91c2Vob2xkIGFuZCBPZmZpY2UgR29vZHMgTW92aW5nIzQ4NDIKLW5haWNzIzQ4NDIyI1NwZWNpYWxpemVkIEZyZWlnaHQgKGV4Y2VwdCBVc2VkIEdvb2RzKSBUcnVja2luZywgTG9jYWwjNDg0MgotbmFpY3MjNDg0MjMjU3BlY2lhbGl6ZWQgRnJlaWdodCAoZXhjZXB0IFVzZWQgR29vZHMpIFRydWNraW5nLCBMb25nLURpc3RhbmNlIzQ4NDIKLW5haWNzIzQ4NSNUcmFuc2l0IGFuZCBHcm91bmQgUGFzc2VuZ2VyIFRyYW5zcG9ydGF0aW9uIzQ4Ci1uYWljcyM0ODUxI1VyYmFuIFRyYW5zaXQgU3lzdGVtcyM0ODUKLW5haWNzIzQ4NTExI1VyYmFuIFRyYW5zaXQgU3lzdGVtcyM0ODUxCi1uYWljcyM0ODUxMTEjTWl4ZWQgTW9kZSBUcmFuc2l0IFN5c3RlbXMjNDg1MTEKLW5haWNzIzQ4NTExMiNDb21tdXRlciBSYWlsIFN5c3RlbXMjNDg1MTEKLW5haWNzIzQ4NTExMyNCdXMgYW5kIE90aGVyIE1vdG9yIFZlaGljbGUgVHJhbnNpdCBTeXN0ZW1zIzQ4NTExCi1uYWljcyM0ODUxMTkjT3RoZXIgVXJiYW4gVHJhbnNpdCBTeXN0ZW1zIzQ4NTExCi1uYWljcyM0ODUyI0ludGVydXJiYW4gYW5kIFJ1cmFsIEJ1cyBUcmFuc3BvcnRhdGlvbiM0ODUKLW5haWNzIzQ4NTIxI0ludGVydXJiYW4gYW5kIFJ1cmFsIEJ1cyBUcmFuc3BvcnRhdGlvbiM0ODUyCi1uYWljcyM0ODUzI1RheGkgYW5kIExpbW91c2luZSBTZXJ2aWNlIzQ4NQotbmFpY3MjNDg1MzEjVGF4aSBTZXJ2aWNlIzQ4NTMKLW5haWNzIzQ4NTMyI0xpbW91c2luZSBTZXJ2aWNlIzQ4NTMKLW5haWNzIzQ4NTQjU2Nob29sIGFuZCBFbXBsb3llZSBCdXMgVHJhbnNwb3J0YXRpb24jNDg1Ci1uYWljcyM0ODU0MSNTY2hvb2wgYW5kIEVtcGxveWVlIEJ1cyBUcmFuc3BvcnRhdGlvbiM0ODU0Ci1uYWljcyM0ODU1I0NoYXJ0ZXIgQnVzIEluZHVzdHJ5IzQ4NQotbmFpY3MjNDg1NTEjQ2hhcnRlciBCdXMgSW5kdXN0cnkjNDg1NQotbmFpY3MjNDg1OSNPdGhlciBUcmFuc2l0IGFuZCBHcm91bmQgUGFzc2VuZ2VyIFRyYW5zcG9ydGF0aW9uIzQ4NQotbmFpY3MjNDg1OTkjT3RoZXIgVHJhbnNpdCBhbmQgR3JvdW5kIFBhc3NlbmdlciBUcmFuc3BvcnRhdGlvbiM0ODU5Ci1uYWljcyM0ODU5OTEjU3BlY2lhbCBOZWVkcyBUcmFuc3BvcnRhdGlvbiM0ODU5OQotbmFpY3MjNDg1OTk5I0FsbCBPdGhlciBUcmFuc2l0IGFuZCBHcm91bmQgUGFzc2VuZ2VyIFRyYW5zcG9ydGF0aW9uIzQ4NTk5Ci1uYWljcyM0ODYjUGlwZWxpbmUgVHJhbnNwb3J0YXRpb24jNDgKLW5haWNzIzQ4NjEjUGlwZWxpbmUgVHJhbnNwb3J0YXRpb24gb2YgQ3J1ZGUgT2lsIzQ4NgotbmFpY3MjNDg2MTEjUGlwZWxpbmUgVHJhbnNwb3J0YXRpb24gb2YgQ3J1ZGUgT2lsIzQ4NjEKLW5haWNzIzQ4NjIjUGlwZWxpbmUgVHJhbnNwb3J0YXRpb24gb2YgTmF0dXJhbCBHYXMjNDg2Ci1uYWljcyM0ODYyMSNQaXBlbGluZSBUcmFuc3BvcnRhdGlvbiBvZiBOYXR1cmFsIEdhcyM0ODYyCi1uYWljcyM0ODY5I090aGVyIFBpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIzQ4NgotbmFpY3MjNDg2OTEjUGlwZWxpbmUgVHJhbnNwb3J0YXRpb24gb2YgUmVmaW5lZCBQZXRyb2xldW0gUHJvZHVjdHMjNDg2OQotbmFpY3MjNDg2OTkjQWxsIE90aGVyIFBpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIzQ4NjkKLW5haWNzIzQ4NyNTY2VuaWMgYW5kIFNpZ2h0c2VlaW5nIFRyYW5zcG9ydGF0aW9uIzQ4Ci1uYWljcyM0ODcxI1NjZW5pYyBhbmQgU2lnaHRzZWVpbmcgVHJhbnNwb3J0YXRpb24sIExhbmQjNDg3Ci1uYWljcyM0ODcxMSNTY2VuaWMgYW5kIFNpZ2h0c2VlaW5nIFRyYW5zcG9ydGF0aW9uLCBMYW5kIzQ4NzEKLW5haWNzIzQ4NzIjU2NlbmljIGFuZCBTaWdodHNlZWluZyBUcmFuc3BvcnRhdGlvbiwgV2F0ZXIjNDg3Ci1uYWljcyM0ODcyMSNTY2VuaWMgYW5kIFNpZ2h0c2VlaW5nIFRyYW5zcG9ydGF0aW9uLCBXYXRlciM0ODcyCi1uYWljcyM0ODc5I1NjZW5pYyBhbmQgU2lnaHRzZWVpbmcgVHJhbnNwb3J0YXRpb24sIE90aGVyIzQ4NwotbmFpY3MjNDg3OTkjU2NlbmljIGFuZCBTaWdodHNlZWluZyBUcmFuc3BvcnRhdGlvbiwgT3RoZXIjNDg3OQotbmFpY3MjNDg4I1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgVHJhbnNwb3J0YXRpb24jNDgKLW5haWNzIzQ4ODEjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBBaXIgVHJhbnNwb3J0YXRpb24jNDg4Ci1uYWljcyM0ODgxMSNBaXJwb3J0IE9wZXJhdGlvbnMjNDg4MQotbmFpY3MjNDg4MTExI0FpciBUcmFmZmljIENvbnRyb2wjNDg4MTEKLW5haWNzIzQ4ODExOSNPdGhlciBBaXJwb3J0IE9wZXJhdGlvbnMjNDg4MTEKLW5haWNzIzQ4ODE5I090aGVyIFN1cHBvcnQgQWN0aXZpdGllcyBmb3IgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4ODEKLW5haWNzIzQ4ODIjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBSYWlsIFRyYW5zcG9ydGF0aW9uIzQ4OAotbmFpY3MjNDg4MjEjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBSYWlsIFRyYW5zcG9ydGF0aW9uIzQ4ODIKLW5haWNzIzQ4ODMjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBXYXRlciBUcmFuc3BvcnRhdGlvbiM0ODgKLW5haWNzIzQ4ODMxI1BvcnQgYW5kIEhhcmJvciBPcGVyYXRpb25zIzQ4ODMKLW5haWNzIzQ4ODMyI01hcmluZSBDYXJnbyBIYW5kbGluZyM0ODgzCi1uYWljcyM0ODgzMyNOYXZpZ2F0aW9uYWwgU2VydmljZXMgdG8gU2hpcHBpbmcjNDg4MwotbmFpY3MjNDg4MzkjT3RoZXIgU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBXYXRlciBUcmFuc3BvcnRhdGlvbiM0ODgzCi1uYWljcyM0ODg0I1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgUm9hZCBUcmFuc3BvcnRhdGlvbiM0ODgKLW5haWNzIzQ4ODQxI01vdG9yIFZlaGljbGUgVG93aW5nIzQ4ODQKLW5haWNzIzQ4ODQ5I090aGVyIFN1cHBvcnQgQWN0aXZpdGllcyBmb3IgUm9hZCBUcmFuc3BvcnRhdGlvbiM0ODg0Ci1uYWljcyM0ODg1I0ZyZWlnaHQgVHJhbnNwb3J0YXRpb24gQXJyYW5nZW1lbnQjNDg4Ci1uYWljcyM0ODg1MSNGcmVpZ2h0IFRyYW5zcG9ydGF0aW9uIEFycmFuZ2VtZW50IzQ4ODUKLW5haWNzIzQ4ODkjT3RoZXIgU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBUcmFuc3BvcnRhdGlvbiM0ODgKLW5haWNzIzQ4ODk5I090aGVyIFN1cHBvcnQgQWN0aXZpdGllcyBmb3IgVHJhbnNwb3J0YXRpb24jNDg4OQotbmFpY3MjNDg4OTkxI1BhY2tpbmcgYW5kIENyYXRpbmcjNDg4OTkKLW5haWNzIzQ4ODk5OSNBbGwgT3RoZXIgU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBUcmFuc3BvcnRhdGlvbiM0ODg5OQotbmFpY3MjNDkjVHJhbnNwb3J0YXRpb24gYW5kIFdhcmVob3VzaW5nIzQ5Ci1uYWljcyM0OTEjUG9zdGFsIFNlcnZpY2UjNDkKLW5haWNzIzQ5MTEjUG9zdGFsIFNlcnZpY2UjNDkxCi1uYWljcyM0OTExMSNQb3N0YWwgU2VydmljZSM0OTExCi1uYWljcyM0OTIjQ291cmllcnMgYW5kIE1lc3NlbmdlcnMjNDkKLW5haWNzIzQ5MjEjQ291cmllcnMjNDkyCi1uYWljcyM0OTIxMSNDb3VyaWVycyM0OTIxCi1uYWljcyM0OTIyI0xvY2FsIE1lc3NlbmdlcnMgYW5kIExvY2FsIERlbGl2ZXJ5IzQ5MgotbmFpY3MjNDkyMjEjTG9jYWwgTWVzc2VuZ2VycyBhbmQgTG9jYWwgRGVsaXZlcnkjNDkyMgotbmFpY3MjNDkzI1dhcmVob3VzaW5nIGFuZCBTdG9yYWdlIzQ5Ci1uYWljcyM0OTMxI1dhcmVob3VzaW5nIGFuZCBTdG9yYWdlIzQ5MwotbmFpY3MjNDkzMTEjR2VuZXJhbCBXYXJlaG91c2luZyBhbmQgU3RvcmFnZSM0OTMxCi1uYWljcyM0OTMxMiNSZWZyaWdlcmF0ZWQgV2FyZWhvdXNpbmcgYW5kIFN0b3JhZ2UjNDkzMQotbmFpY3MjNDkzMTMjRmFybSBQcm9kdWN0IFdhcmVob3VzaW5nIGFuZCBTdG9yYWdlIzQ5MzEKLW5haWNzIzQ5MzE5I090aGVyIFdhcmVob3VzaW5nIGFuZCBTdG9yYWdlIzQ5MzEKLW5haWNzIzUxI0luZm9ybWF0aW9uIzUxCi1uYWljcyM1MTEjUHVibGlzaGluZyBJbmR1c3RyaWVzIzUxCi1uYWljcyM1MTExI05ld3NwYXBlciwgUGVyaW9kaWNhbCwgQm9vaywgYW5kIERhdGFiYXNlIFB1Ymxpc2hlcnMjNTExCi1uYWljcyM1MTExMSNOZXdzcGFwZXIgUHVibGlzaGVycyM1MTExCi1uYWljcyM1MTExMiNQZXJpb2RpY2FsIFB1Ymxpc2hlcnMjNTExMQotbmFpY3MjNTExMTMjQm9vayBQdWJsaXNoZXJzIzUxMTEKLW5haWNzIzUxMTE0I0RhdGFiYXNlIGFuZCBEaXJlY3RvcnkgUHVibGlzaGVycyM1MTExCi1uYWljcyM1MTExOSNPdGhlciBQdWJsaXNoZXJzIzUxMTEKLW5haWNzIzUxMTE5MSNHcmVldGluZyBDYXJkIFB1Ymxpc2hlcnMjNTExMTkKLW5haWNzIzUxMTE5OSNBbGwgT3RoZXIgUHVibGlzaGVycyM1MTExOQotbmFpY3MjNTExMiNTb2Z0d2FyZSBQdWJsaXNoZXJzIzUxMQotbmFpY3MjNTExMjEjU29mdHdhcmUgUHVibGlzaGVycyM1MTEyCi1uYWljcyM1MTIjTW90aW9uIFBpY3R1cmUgYW5kIFNvdW5kIFJlY29yZGluZyBJbmR1c3RyaWVzIzUxCi1uYWljcyM1MTIxI01vdGlvbiBQaWN0dXJlIGFuZCBWaWRlbyBJbmR1c3RyaWVzIzUxMgotbmFpY3MjNTEyMTEjTW90aW9uIFBpY3R1cmUgYW5kIFZpZGVvIFByb2R1Y3Rpb24jNTEyMQotbmFpY3MjNTEyMTIjTW90aW9uIFBpY3R1cmUgYW5kIFZpZGVvIERpc3RyaWJ1dGlvbiM1MTIxCi1uYWljcyM1MTIxMyNNb3Rpb24gUGljdHVyZSBhbmQgVmlkZW8gRXhoaWJpdGlvbiM1MTIxCi1uYWljcyM1MTIxMzEjTW90aW9uIFBpY3R1cmUgVGhlYXRlcnMgKGV4Y2VwdCBEcml2ZS1JbnMpIzUxMjEzCi1uYWljcyM1MTIxMzIjRHJpdmUtSW4gTW90aW9uIFBpY3R1cmUgVGhlYXRlcnMjNTEyMTMKLW5haWNzIzUxMjE5I1Bvc3Rwcm9kdWN0aW9uIFNlcnZpY2VzIGFuZCBPdGhlciBNb3Rpb24gUGljdHVyZSBhbmQgVmlkZW8gSW5kdXN0cmllcyM1MTIxCi1uYWljcyM1MTIxOTEjVGVsZXByb2R1Y3Rpb24gYW5kIE90aGVyIFBvc3Rwcm9kdWN0aW9uIFNlcnZpY2VzIzUxMjE5Ci1uYWljcyM1MTIxOTkjT3RoZXIgTW90aW9uIFBpY3R1cmUgYW5kIFZpZGVvIEluZHVzdHJpZXMjNTEyMTkKLW5haWNzIzUxMjIjU291bmQgUmVjb3JkaW5nIEluZHVzdHJpZXMjNTEyCi1uYWljcyM1MTIyMSNSZWNvcmQgUHJvZHVjdGlvbiM1MTIyCi1uYWljcyM1MTIyMiNJbnRlZ3JhdGVkIFJlY29yZCBQcm9kdWN0aW9uL0Rpc3RyaWJ1dGlvbiM1MTIyCi1uYWljcyM1MTIyMyNNdXNpYyBQdWJsaXNoZXJzIzUxMjIKLW5haWNzIzUxMjI0I1NvdW5kIFJlY29yZGluZyBTdHVkaW9zIzUxMjIKLW5haWNzIzUxMjI5I090aGVyIFNvdW5kIFJlY29yZGluZyBJbmR1c3RyaWVzIzUxMjIKLW5haWNzIzUxMyNCcm9hZGNhc3RpbmcgYW5kIFRlbGVjb21tdW5pY2F0aW9ucyM1MQotbmFpY3MjNTEzMSNSYWRpbyBhbmQgVGVsZXZpc2lvbiBCcm9hZGNhc3RpbmcjNTEzCi1uYWljcyM1MTMxMSNSYWRpbyBCcm9hZGNhc3RpbmcjNTEzMQotbmFpY3MjNTEzMTExI1JhZGlvIE5ldHdvcmtzIzUxMzExCi1uYWljcyM1MTMxMTIjUmFkaW8gU3RhdGlvbnMjNTEzMTEKLW5haWNzIzUxMzEyI1RlbGV2aXNpb24gQnJvYWRjYXN0aW5nIzUxMzEKLW5haWNzIzUxMzIjQ2FibGUgTmV0d29ya3MgYW5kIFByb2dyYW0gRGlzdHJpYnV0aW9uIzUxMwotbmFpY3MjNTEzMjEjQ2FibGUgTmV0d29ya3MjNTEzMgotbmFpY3MjNTEzMjIjQ2FibGUgYW5kIE90aGVyIFByb2dyYW0gRGlzdHJpYnV0aW9uIzUxMzIKLW5haWNzIzUxMzMjVGVsZWNvbW11bmljYXRpb25zIzUxMwotbmFpY3MjNTEzMzEjV2lyZWQgVGVsZWNvbW11bmljYXRpb25zIENhcnJpZXJzIzUxMzMKLW5haWNzIzUxMzMyI1dpcmVsZXNzIFRlbGVjb21tdW5pY2F0aW9ucyBDYXJyaWVycyAoZXhjZXB0IFNhdGVsbGl0ZSkjNTEzMwotbmFpY3MjNTEzMzIxI1BhZ2luZyM1MTMzMgotbmFpY3MjNTEzMzIyI0NlbGx1bGFyIGFuZCBPdGhlciBXaXJlbGVzcyBUZWxlY29tbXVuaWNhdGlvbnMjNTEzMzIKLW5haWNzIzUxMzMzI1RlbGVjb21tdW5pY2F0aW9ucyBSZXNlbGxlcnMjNTEzMwotbmFpY3MjNTEzMzQjU2F0ZWxsaXRlIFRlbGVjb21tdW5pY2F0aW9ucyM1MTMzCi1uYWljcyM1MTMzOSNPdGhlciBUZWxlY29tbXVuaWNhdGlvbnMjNTEzMwotbmFpY3MjNTE0I0luZm9ybWF0aW9uIFNlcnZpY2VzIGFuZCBEYXRhIFByb2Nlc3NpbmcgU2VydmljZXMjNTEKLW5haWNzIzUxNDEjSW5mb3JtYXRpb24gU2VydmljZXMjNTE0Ci1uYWljcyM1MTQxMSNOZXdzIFN5bmRpY2F0ZXMjNTE0MQotbmFpY3MjNTE0MTIjTGlicmFyaWVzIGFuZCBBcmNoaXZlcyM1MTQxCi1uYWljcyM1MTQxOSNPdGhlciBJbmZvcm1hdGlvbiBTZXJ2aWNlcyM1MTQxCi1uYWljcyM1MTQxOTEjT24tTGluZSBJbmZvcm1hdGlvbiBTZXJ2aWNlcyM1MTQxOQotbmFpY3MjNTE0MTk5I0FsbCBPdGhlciBJbmZvcm1hdGlvbiBTZXJ2aWNlcyM1MTQxOQotbmFpY3MjNTE0MiNEYXRhIFByb2Nlc3NpbmcgU2VydmljZXMjNTE0Ci1uYWljcyM1MTQyMSNEYXRhIFByb2Nlc3NpbmcgU2VydmljZXMjNTE0MgotbmFpY3MjNTIjRmluYW5jZSBhbmQgSW5zdXJhbmNlIzUyCi1uYWljcyM1MjEjTW9uZXRhcnkgQXV0aG9yaXRpZXMgLSBDZW50cmFsIEJhbmsjNTIKLW5haWNzIzUyMTEjTW9uZXRhcnkgQXV0aG9yaXRpZXMgLSBDZW50cmFsIEJhbmsjNTIxCi1uYWljcyM1MjExMSNNb25ldGFyeSBBdXRob3JpdGllcyAtIENlbnRyYWwgQmFuayM1MjExCi1uYWljcyM1MjIjQ3JlZGl0IEludGVybWVkaWF0aW9uIGFuZCBSZWxhdGVkIEFjdGl2aXRpZXMjNTIKLW5haWNzIzUyMjEjRGVwb3NpdG9yeSBDcmVkaXQgSW50ZXJtZWRpYXRpb24jNTIyCi1uYWljcyM1MjIxMSNDb21tZXJjaWFsIEJhbmtpbmcjNTIyMQotbmFpY3MjNTIyMTIjU2F2aW5ncyBJbnN0aXR1dGlvbnMjNTIyMQotbmFpY3MjNTIyMTMjQ3JlZGl0IFVuaW9ucyM1MjIxCi1uYWljcyM1MjIxOSNPdGhlciBEZXBvc2l0b3J5IENyZWRpdCBJbnRlcm1lZGlhdGlvbiM1MjIxCi1uYWljcyM1MjIyI05vbmRlcG9zaXRvcnkgQ3JlZGl0IEludGVybWVkaWF0aW9uIzUyMgotbmFpY3MjNTIyMjEjQ3JlZGl0IENhcmQgSXNzdWluZyM1MjIyCi1uYWljcyM1MjIyMiNTYWxlcyBGaW5hbmNpbmcjNTIyMgotbmFpY3MjNTIyMjkjT3RoZXIgTm9uZGVwb3NpdG9yeSBDcmVkaXQgSW50ZXJtZWRpYXRpb24jNTIyMgotbmFpY3MjNTIyMjkxI0NvbnN1bWVyIExlbmRpbmcjNTIyMjkKLW5haWNzIzUyMjI5MiNSZWFsIEVzdGF0ZSBDcmVkaXQjNTIyMjkKLW5haWNzIzUyMjI5MyNJbnRlcm5hdGlvbmFsIFRyYWRlIEZpbmFuY2luZyM1MjIyOQotbmFpY3MjNTIyMjk0I1NlY29uZGFyeSBNYXJrZXQgRmluYW5jaW5nIzUyMjI5Ci1uYWljcyM1MjIyOTgjQWxsIE90aGVyIE5vbmRlcG9zaXRvcnkgQ3JlZGl0IEludGVybWVkaWF0aW9uIzUyMjI5Ci1uYWljcyM1MjIzI0FjdGl2aXRpZXMgUmVsYXRlZCB0byBDcmVkaXQgSW50ZXJtZWRpYXRpb24jNTIyCi1uYWljcyM1MjIzMSNNb3J0Z2FnZSBhbmQgTm9ubW9ydGdhZ2UgTG9hbiBCcm9rZXJzIzUyMjMKLW5haWNzIzUyMjMyI0ZpbmFuY2lhbCBUcmFuc2FjdGlvbnMgUHJvY2Vzc2luZywgUmVzZXJ2ZSwgYW5kIENsZWFyaW5naG91c2UgQWN0aXZpdGllcyM1MjIzCi1uYWljcyM1MjIzOSNPdGhlciBBY3Rpdml0aWVzIFJlbGF0ZWQgdG8gQ3JlZGl0IEludGVybWVkaWF0aW9uIzUyMjMKLW5haWNzIzUyMyNTZWN1cml0aWVzLCBDb21tb2RpdHkgQ29udHJhY3RzLCBhbmQgT3RoZXIgRmluYW5jaWFsIEludmVzdG1lbnRzIGFuZCBSZWxhdGVkIEFjdGl2aXRpZXMjNTIKLW5haWNzIzUyMzEjU2VjdXJpdGllcyBhbmQgQ29tbW9kaXR5IENvbnRyYWN0cyBJbnRlcm1lZGlhdGlvbiBhbmQgQnJva2VyYWdlIzUyMwotbmFpY3MjNTIzMTEjSW52ZXN0bWVudCBCYW5raW5nIGFuZCBTZWN1cml0aWVzIERlYWxpbmcjNTIzMQotbmFpY3MjNTIzMTIjU2VjdXJpdGllcyBCcm9rZXJhZ2UjNTIzMQotbmFpY3MjNTIzMTMjQ29tbW9kaXR5IENvbnRyYWN0cyBEZWFsaW5nIzUyMzEKLW5haWNzIzUyMzE0I0NvbW1vZGl0eSBDb250cmFjdHMgQnJva2VyYWdlIzUyMzEKLW5haWNzIzUyMzIjU2VjdXJpdGllcyBhbmQgQ29tbW9kaXR5IEV4Y2hhbmdlcyM1MjMKLW5haWNzIzUyMzIxI1NlY3VyaXRpZXMgYW5kIENvbW1vZGl0eSBFeGNoYW5nZXMjNTIzMgotbmFpY3MjNTIzOSNPdGhlciBGaW5hbmNpYWwgSW52ZXN0bWVudCBBY3Rpdml0aWVzIzUyMwotbmFpY3MjNTIzOTEjTWlzY2VsbGFuZW91cyBJbnRlcm1lZGlhdGlvbiM1MjM5Ci1uYWljcyM1MjM5MiNQb3J0Zm9saW8gTWFuYWdlbWVudCM1MjM5Ci1uYWljcyM1MjM5MyNJbnZlc3RtZW50IEFkdmljZSM1MjM5Ci1uYWljcyM1MjM5OSNBbGwgT3RoZXIgRmluYW5jaWFsIEludmVzdG1lbnQgQWN0aXZpdGllcyM1MjM5Ci1uYWljcyM1MjM5OTEjVHJ1c3QsIEZpZHVjaWFyeSwgYW5kIEN1c3RvZHkgQWN0aXZpdGllcyM1MjM5OQotbmFpY3MjNTIzOTk5I01pc2NlbGxhbmVvdXMgRmluYW5jaWFsIEludmVzdG1lbnQgQWN0aXZpdGllcyM1MjM5OQotbmFpY3MjNTI0I0luc3VyYW5jZSBDYXJyaWVycyBhbmQgUmVsYXRlZCBBY3Rpdml0aWVzIzUyCi1uYWljcyM1MjQxI0luc3VyYW5jZSBDYXJyaWVycyM1MjQKLW5haWNzIzUyNDExI0RpcmVjdCBMaWZlLCBIZWFsdGgsIGFuZCBNZWRpY2FsIEluc3VyYW5jZSBDYXJyaWVycyM1MjQxCi1uYWljcyM1MjQxMTMjRGlyZWN0IExpZmUgSW5zdXJhbmNlIENhcnJpZXJzIzUyNDExCi1uYWljcyM1MjQxMTQjRGlyZWN0IEhlYWx0aCBhbmQgTWVkaWNhbCBJbnN1cmFuY2UgQ2FycmllcnMjNTI0MTEKLW5haWNzIzUyNDEyI0RpcmVjdCBJbnN1cmFuY2UgKGV4Y2VwdCBMaWZlLCBIZWFsdGgsIGFuZCBNZWRpY2FsKSBDYXJyaWVycyM1MjQxCi1uYWljcyM1MjQxMjYjRGlyZWN0IFByb3BlcnR5IGFuZCBDYXN1YWx0eSBJbnN1cmFuY2UgQ2FycmllcnMjNTI0MTIKLW5haWNzIzUyNDEyNyNEaXJlY3QgVGl0bGUgSW5zdXJhbmNlIENhcnJpZXJzIzUyNDEyCi1uYWljcyM1MjQxMjgjT3RoZXIgRGlyZWN0IEluc3VyYW5jZSAoZXhjZXB0IExpZmUsIEhlYWx0aCwgYW5kIE1lZGljYWwpIENhcnJpZXJzIzUyNDEyCi1uYWljcyM1MjQxMyNSZWluc3VyYW5jZSBDYXJyaWVycyM1MjQxCi1uYWljcyM1MjQyI0FnZW5jaWVzLCBCcm9rZXJhZ2VzLCBhbmQgT3RoZXIgSW5zdXJhbmNlIFJlbGF0ZWQgQWN0aXZpdGllcyM1MjQKLW5haWNzIzUyNDIxI0luc3VyYW5jZSBBZ2VuY2llcyBhbmQgQnJva2VyYWdlcyM1MjQyCi1uYWljcyM1MjQyOSNPdGhlciBJbnN1cmFuY2UgUmVsYXRlZCBBY3Rpdml0aWVzIzUyNDIKLW5haWNzIzUyNDI5MSNDbGFpbXMgQWRqdXN0aW5nIzUyNDI5Ci1uYWljcyM1MjQyOTIjVGhpcmQgUGFydHkgQWRtaW5pc3RyYXRpb24gb2YgSW5zdXJhbmNlIGFuZCBQZW5zaW9uIEZ1bmRzIzUyNDI5Ci1uYWljcyM1MjQyOTgjQWxsIE90aGVyIEluc3VyYW5jZSBSZWxhdGVkIEFjdGl2aXRpZXMjNTI0MjkKLW5haWNzIzUyNSNGdW5kcywgVHJ1c3RzLCBhbmQgT3RoZXIgRmluYW5jaWFsIFZlaGljbGVzIzUyCi1uYWljcyM1MjUxI0luc3VyYW5jZSBhbmQgRW1wbG95ZWUgQmVuZWZpdCBGdW5kcyM1MjUKLW5haWNzIzUyNTExI1BlbnNpb24gRnVuZHMjNTI1MQotbmFpY3MjNTI1MTIjSGVhbHRoIGFuZCBXZWxmYXJlIEZ1bmRzIzUyNTEKLW5haWNzIzUyNTE5I090aGVyIEluc3VyYW5jZSBGdW5kcyM1MjUxCi1uYWljcyM1MjU5I090aGVyIEludmVzdG1lbnQgUG9vbHMgYW5kIEZ1bmRzIzUyNQotbmFpY3MjNTI1OTEjT3Blbi1FbmQgSW52ZXN0bWVudCBGdW5kcyM1MjU5Ci1uYWljcyM1MjU5MiNUcnVzdHMsIEVzdGF0ZXMsIGFuZCBBZ2VuY3kgQWNjb3VudHMjNTI1OQotbmFpY3MjNTI1OTMjUmVhbCBFc3RhdGUgSW52ZXN0bWVudCBUcnVzdHMjNTI1OQotbmFpY3MjNTI1OTkjT3RoZXIgRmluYW5jaWFsIFZlaGljbGVzIzUyNTkKLW5haWNzIzUzI1JlYWwgRXN0YXRlIGFuZCBSZW50YWwgYW5kIExlYXNpbmcjNTMKLW5haWNzIzUzMSNSZWFsIEVzdGF0ZSM1MwotbmFpY3MjNTMxMSNMZXNzb3JzIG9mIFJlYWwgRXN0YXRlIzUzMQotbmFpY3MjNTMxMTEjTGVzc29ycyBvZiBSZXNpZGVudGlhbCBCdWlsZGluZ3MgYW5kIER3ZWxsaW5ncyM1MzExCi1uYWljcyM1MzExMiNMZXNzb3JzIG9mIE5vbnJlc2lkZW50aWFsIEJ1aWxkaW5ncyAoZXhjZXB0IE1pbml3YXJlaG91c2VzKSM1MzExCi1uYWljcyM1MzExMyNMZXNzb3JzIG9mIE1pbml3YXJlaG91c2VzIGFuZCBTZWxmLVN0b3JhZ2UgVW5pdHMjNTMxMQotbmFpY3MjNTMxMTkjTGVzc29ycyBvZiBPdGhlciBSZWFsIEVzdGF0ZSBQcm9wZXJ0eSM1MzExCi1uYWljcyM1MzEyI09mZmljZXMgb2YgUmVhbCBFc3RhdGUgQWdlbnRzIGFuZCBCcm9rZXJzIzUzMQotbmFpY3MjNTMxMjEjT2ZmaWNlcyBvZiBSZWFsIEVzdGF0ZSBBZ2VudHMgYW5kIEJyb2tlcnMjNTMxMgotbmFpY3MjNTMxMyNBY3Rpdml0aWVzIFJlbGF0ZWQgdG8gUmVhbCBFc3RhdGUjNTMxCi1uYWljcyM1MzEzMSNSZWFsIEVzdGF0ZSBQcm9wZXJ0eSBNYW5hZ2VycyM1MzEzCi1uYWljcyM1MzEzMTEjUmVzaWRlbnRpYWwgUHJvcGVydHkgTWFuYWdlcnMjNTMxMzEKLW5haWNzIzUzMTMxMiNOb25yZXNpZGVudGlhbCBQcm9wZXJ0eSBNYW5hZ2VycyM1MzEzMQotbmFpY3MjNTMxMzIjT2ZmaWNlcyBvZiBSZWFsIEVzdGF0ZSBBcHByYWlzZXJzIzUzMTMKLW5haWNzIzUzMTM5I090aGVyIEFjdGl2aXRpZXMgUmVsYXRlZCB0byBSZWFsIEVzdGF0ZSM1MzEzCi1uYWljcyM1MzIjUmVudGFsIGFuZCBMZWFzaW5nIFNlcnZpY2VzIzUzCi1uYWljcyM1MzIxI0F1dG9tb3RpdmUgRXF1aXBtZW50IFJlbnRhbCBhbmQgTGVhc2luZyM1MzIKLW5haWNzIzUzMjExI1Bhc3NlbmdlciBDYXIgUmVudGFsIGFuZCBMZWFzaW5nIzUzMjEKLW5haWNzIzUzMjExMSNQYXNzZW5nZXIgQ2FyIFJlbnRhbCM1MzIxMQotbmFpY3MjNTMyMTEyI1Bhc3NlbmdlciBDYXIgTGVhc2luZyM1MzIxMQotbmFpY3MjNTMyMTIjVHJ1Y2ssIFV0aWxpdHkgVHJhaWxlciwgYW5kIFJWIChSZWNyZWF0aW9uYWwgVmVoaWNsZSkgUmVudGFsIGFuZCBMZWFzaW5nIzUzMjEKLW5haWNzIzUzMjIjQ29uc3VtZXIgR29vZHMgUmVudGFsIzUzMgotbmFpY3MjNTMyMjEjQ29uc3VtZXIgRWxlY3Ryb25pY3MgYW5kIEFwcGxpYW5jZXMgUmVudGFsIzUzMjIKLW5haWNzIzUzMjIyI0Zvcm1hbCBXZWFyIGFuZCBDb3N0dW1lIFJlbnRhbCM1MzIyCi1uYWljcyM1MzIyMyNWaWRlbyBUYXBlIGFuZCBEaXNjIFJlbnRhbCM1MzIyCi1uYWljcyM1MzIyOSNPdGhlciBDb25zdW1lciBHb29kcyBSZW50YWwjNTMyMgotbmFpY3MjNTMyMjkxI0hvbWUgSGVhbHRoIEVxdWlwbWVudCBSZW50YWwjNTMyMjkKLW5haWNzIzUzMjI5MiNSZWNyZWF0aW9uYWwgR29vZHMgUmVudGFsIzUzMjI5Ci1uYWljcyM1MzIyOTkjQWxsIE90aGVyIENvbnN1bWVyIEdvb2RzIFJlbnRhbCM1MzIyOQotbmFpY3MjNTMyMyNHZW5lcmFsIFJlbnRhbCBDZW50ZXJzIzUzMgotbmFpY3MjNTMyMzEjR2VuZXJhbCBSZW50YWwgQ2VudGVycyM1MzIzCi1uYWljcyM1MzI0I0NvbW1lcmNpYWwgYW5kIEluZHVzdHJpYWwgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgUmVudGFsIGFuZCBMZWFzaW5nIzUzMgotbmFpY3MjNTMyNDEjQ29uc3RydWN0aW9uLCBUcmFuc3BvcnRhdGlvbiwgTWluaW5nLCBhbmQgRm9yZXN0cnkgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgUmVudGFsIGFuZCBMZWFzaW5nIzUzMjQKLW5haWNzIzUzMjQxMSNDb21tZXJjaWFsIEFpciwgUmFpbCwgYW5kIFdhdGVyIFRyYW5zcG9ydGF0aW9uIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyNDEKLW5haWNzIzUzMjQxMiNDb25zdHJ1Y3Rpb24sIE1pbmluZywgYW5kIEZvcmVzdHJ5IE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFJlbnRhbCBhbmQgTGVhc2luZyM1MzI0MQotbmFpY3MjNTMyNDIjT2ZmaWNlIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFJlbnRhbCBhbmQgTGVhc2luZyM1MzI0Ci1uYWljcyM1MzI0OSNPdGhlciBDb21tZXJjaWFsIGFuZCBJbmR1c3RyaWFsIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFJlbnRhbCBhbmQgTGVhc2luZyM1MzI0Ci1uYWljcyM1MzMjTGVzc29ycyBvZiBOb25maW5hbmNpYWwgSW50YW5naWJsZSBBc3NldHMgKGV4Y2VwdCBDb3B5cmlnaHRlZCBXb3JrcykjNTMKLW5haWNzIzUzMzEjTGVzc29ycyBvZiBOb25maW5hbmNpYWwgSW50YW5naWJsZSBBc3NldHMgKGV4Y2VwdCBDb3B5cmlnaHRlZCBXb3JrcykjNTMzCi1uYWljcyM1MzMxMSNMZXNzb3JzIG9mIE5vbmZpbmFuY2lhbCBJbnRhbmdpYmxlIEFzc2V0cyAoZXhjZXB0IENvcHlyaWdodGVkIFdvcmtzKSM1MzMxCi1uYWljcyM1NCNQcm9mZXNzaW9uYWwsIFNjaWVudGlmaWMsIGFuZCBUZWNobmljYWwgU2VydmljZXMjNTQKLW5haWNzIzU0MSNQcm9mZXNzaW9uYWwsIFNjaWVudGlmaWMsIGFuZCBUZWNobmljYWwgU2VydmljZXMjNTQKLW5haWNzIzU0MTEjTGVnYWwgU2VydmljZXMjNTQxCi1uYWljcyM1NDExMSNPZmZpY2VzIG9mIExhd3llcnMjNTQxMQotbmFpY3MjNTQxMTIjT2ZmaWNlcyBvZiBOb3RhcmllcyM1NDExCi1uYWljcyM1NDExOSNPdGhlciBMZWdhbCBTZXJ2aWNlcyM1NDExCi1uYWljcyM1NDExOTEjVGl0bGUgQWJzdHJhY3QgYW5kIFNldHRsZW1lbnQgT2ZmaWNlcyM1NDExOQotbmFpY3MjNTQxMTk5I0FsbCBPdGhlciBMZWdhbCBTZXJ2aWNlcyM1NDExOQotbmFpY3MjNTQxMiNBY2NvdW50aW5nLCBUYXggUHJlcGFyYXRpb24sIEJvb2trZWVwaW5nLCBhbmQgUGF5cm9sbCBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTIxI0FjY291bnRpbmcsIFRheCBQcmVwYXJhdGlvbiwgQm9va2tlZXBpbmcsIGFuZCBQYXlyb2xsIFNlcnZpY2VzIzU0MTIKLW5haWNzIzU0MTIxMSNPZmZpY2VzIG9mIENlcnRpZmllZCBQdWJsaWMgQWNjb3VudGFudHMjNTQxMjEKLW5haWNzIzU0MTIxMyNUYXggUHJlcGFyYXRpb24gU2VydmljZXMjNTQxMjEKLW5haWNzIzU0MTIxNCNQYXlyb2xsIFNlcnZpY2VzIzU0MTIxCi1uYWljcyM1NDEyMTkjT3RoZXIgQWNjb3VudGluZyBTZXJ2aWNlcyM1NDEyMQotbmFpY3MjNTQxMyNBcmNoaXRlY3R1cmFsLCBFbmdpbmVlcmluZywgYW5kIFJlbGF0ZWQgU2VydmljZXMjNTQxCi1uYWljcyM1NDEzMSNBcmNoaXRlY3R1cmFsIFNlcnZpY2VzIzU0MTMKLW5haWNzIzU0MTMyI0xhbmRzY2FwZSBBcmNoaXRlY3R1cmFsIFNlcnZpY2VzIzU0MTMKLW5haWNzIzU0MTMzI0VuZ2luZWVyaW5nIFNlcnZpY2VzIzU0MTMKLW5haWNzIzU0MTM0I0RyYWZ0aW5nIFNlcnZpY2VzIzU0MTMKLW5haWNzIzU0MTM1I0J1aWxkaW5nIEluc3BlY3Rpb24gU2VydmljZXMjNTQxMwotbmFpY3MjNTQxMzYjR2VvcGh5c2ljYWwgU3VydmV5aW5nIGFuZCBNYXBwaW5nIFNlcnZpY2VzIzU0MTMKLW5haWNzIzU0MTM3I1N1cnZleWluZyBhbmQgTWFwcGluZyAoZXhjZXB0IEdlb3BoeXNpY2FsKSBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzOCNUZXN0aW5nIExhYm9yYXRvcmllcyM1NDEzCi1uYWljcyM1NDE0I1NwZWNpYWxpemVkIERlc2lnbiBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTQxI0ludGVyaW9yIERlc2lnbiBTZXJ2aWNlcyM1NDE0Ci1uYWljcyM1NDE0MiNJbmR1c3RyaWFsIERlc2lnbiBTZXJ2aWNlcyM1NDE0Ci1uYWljcyM1NDE0MyNHcmFwaGljIERlc2lnbiBTZXJ2aWNlcyM1NDE0Ci1uYWljcyM1NDE0OSNPdGhlciBTcGVjaWFsaXplZCBEZXNpZ24gU2VydmljZXMjNTQxNAotbmFpY3MjNTQxNSNDb21wdXRlciBTeXN0ZW1zIERlc2lnbiBhbmQgUmVsYXRlZCBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTUxI0NvbXB1dGVyIFN5c3RlbXMgRGVzaWduIGFuZCBSZWxhdGVkIFNlcnZpY2VzIzU0MTUKLW5haWNzIzU0MTUxMSNDdXN0b20gQ29tcHV0ZXIgUHJvZ3JhbW1pbmcgU2VydmljZXMjNTQxNTEKLW5haWNzIzU0MTUxMiNDb21wdXRlciBTeXN0ZW1zIERlc2lnbiBTZXJ2aWNlcyM1NDE1MQotbmFpY3MjNTQxNTEzI0NvbXB1dGVyIEZhY2lsaXRpZXMgTWFuYWdlbWVudCBTZXJ2aWNlcyM1NDE1MQotbmFpY3MjNTQxNTE5I090aGVyIENvbXB1dGVyIFJlbGF0ZWQgU2VydmljZXMjNTQxNTEKLW5haWNzIzU0MTYjTWFuYWdlbWVudCwgU2NpZW50aWZpYywgYW5kIFRlY2huaWNhbCBDb25zdWx0aW5nIFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxNjEjTWFuYWdlbWVudCBDb25zdWx0aW5nIFNlcnZpY2VzIzU0MTYKLW5haWNzIzU0MTYxMSNBZG1pbmlzdHJhdGl2ZSBNYW5hZ2VtZW50IGFuZCBHZW5lcmFsIE1hbmFnZW1lbnQgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2MQotbmFpY3MjNTQxNjEyI0h1bWFuIFJlc291cmNlcyBhbmQgRXhlY3V0aXZlIFNlYXJjaCBDb25zdWx0aW5nIFNlcnZpY2VzIzU0MTYxCi1uYWljcyM1NDE2MTMjTWFya2V0aW5nIENvbnN1bHRpbmcgU2VydmljZXMjNTQxNjEKLW5haWNzIzU0MTYxNCNQcm9jZXNzLCBQaHlzaWNhbCBEaXN0cmlidXRpb24sIGFuZCBMb2dpc3RpY3MgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2MQotbmFpY3MjNTQxNjE4I090aGVyIE1hbmFnZW1lbnQgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2MQotbmFpY3MjNTQxNjIjRW52aXJvbm1lbnRhbCBDb25zdWx0aW5nIFNlcnZpY2VzIzU0MTYKLW5haWNzIzU0MTY5I090aGVyIFNjaWVudGlmaWMgYW5kIFRlY2huaWNhbCBDb25zdWx0aW5nIFNlcnZpY2VzIzU0MTYKLW5haWNzIzU0MTcjU2NpZW50aWZpYyBSZXNlYXJjaCBhbmQgRGV2ZWxvcG1lbnQgU2VydmljZXMjNTQxCi1uYWljcyM1NDE3MSNSZXNlYXJjaCBhbmQgRGV2ZWxvcG1lbnQgaW4gdGhlIFBoeXNpY2FsLCBFbmdpbmVlcmluZywgYW5kIExpZmUgU2NpZW5jZXMjNTQxNwotbmFpY3MjNTQxNzIjUmVzZWFyY2ggYW5kIERldmVsb3BtZW50IGluIHRoZSBTb2NpYWwgU2NpZW5jZXMgYW5kIEh1bWFuaXRpZXMjNTQxNwotbmFpY3MjNTQxOCNBZHZlcnRpc2luZyBhbmQgUmVsYXRlZCBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTgxI0FkdmVydGlzaW5nIEFnZW5jaWVzIzU0MTgKLW5haWNzIzU0MTgyI1B1YmxpYyBSZWxhdGlvbnMgQWdlbmNpZXMjNTQxOAotbmFpY3MjNTQxODMjTWVkaWEgQnV5aW5nIEFnZW5jaWVzIzU0MTgKLW5haWNzIzU0MTg0I01lZGlhIFJlcHJlc2VudGF0aXZlcyM1NDE4Ci1uYWljcyM1NDE4NSNEaXNwbGF5IEFkdmVydGlzaW5nIzU0MTgKLW5haWNzIzU0MTg2I0RpcmVjdCBNYWlsIEFkdmVydGlzaW5nIzU0MTgKLW5haWNzIzU0MTg3I0FkdmVydGlzaW5nIE1hdGVyaWFsIERpc3RyaWJ1dGlvbiBTZXJ2aWNlcyM1NDE4Ci1uYWljcyM1NDE4OSNPdGhlciBTZXJ2aWNlcyBSZWxhdGVkIHRvIEFkdmVydGlzaW5nIzU0MTgKLW5haWNzIzU0MTkjT3RoZXIgUHJvZmVzc2lvbmFsLCBTY2llbnRpZmljLCBhbmQgVGVjaG5pY2FsIFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxOTEjTWFya2V0aW5nIFJlc2VhcmNoIGFuZCBQdWJsaWMgT3BpbmlvbiBQb2xsaW5nIzU0MTkKLW5haWNzIzU0MTkyI1Bob3RvZ3JhcGhpYyBTZXJ2aWNlcyM1NDE5Ci1uYWljcyM1NDE5MjEjUGhvdG9ncmFwaHkgU3R1ZGlvcywgUG9ydHJhaXQjNTQxOTIKLW5haWNzIzU0MTkyMiNDb21tZXJjaWFsIFBob3RvZ3JhcGh5IzU0MTkyCi1uYWljcyM1NDE5MyNUcmFuc2xhdGlvbiBhbmQgSW50ZXJwcmV0YXRpb24gU2VydmljZXMjNTQxOQotbmFpY3MjNTQxOTQjVmV0ZXJpbmFyeSBTZXJ2aWNlcyM1NDE5Ci1uYWljcyM1NDE5OSNBbGwgT3RoZXIgUHJvZmVzc2lvbmFsLCBTY2llbnRpZmljLCBhbmQgVGVjaG5pY2FsIFNlcnZpY2VzIzU0MTkKLW5haWNzIzU1I01hbmFnZW1lbnQgb2YgQ29tcGFuaWVzIGFuZCBFbnRlcnByaXNlcyM1NQotbmFpY3MjNTUxI01hbmFnZW1lbnQgb2YgQ29tcGFuaWVzIGFuZCBFbnRlcnByaXNlcyM1NQotbmFpY3MjNTUxMSNNYW5hZ2VtZW50IG9mIENvbXBhbmllcyBhbmQgRW50ZXJwcmlzZXMjNTUxCi1uYWljcyM1NTExMSNNYW5hZ2VtZW50IG9mIENvbXBhbmllcyBhbmQgRW50ZXJwcmlzZXMjNTUxMQotbmFpY3MjNTUxMTExI09mZmljZXMgb2YgQmFuayBIb2xkaW5nIENvbXBhbmllcyM1NTExMQotbmFpY3MjNTUxMTEyI09mZmljZXMgb2YgT3RoZXIgSG9sZGluZyBDb21wYW5pZXMjNTUxMTEKLW5haWNzIzU1MTExNCNDb3Jwb3JhdGUsIFN1YnNpZGlhcnksIGFuZCBSZWdpb25hbCBNYW5hZ2luZyBPZmZpY2VzIzU1MTExCi1uYWljcyM1NiNBZG1pbmlzdHJhdGl2ZSBhbmQgU3VwcG9ydCBhbmQgV2FzdGUgTWFuYWdlbWVudCBhbmQgUmVtZWRpYXRpb24gU2VydmljZXMjNTYKLW5haWNzIzU2MSNBZG1pbmlzdHJhdGl2ZSBhbmQgU3VwcG9ydCBTZXJ2aWNlcyM1NgotbmFpY3MjNTYxMSNPZmZpY2UgQWRtaW5pc3RyYXRpdmUgU2VydmljZXMjNTYxCi1uYWljcyM1NjExMSNPZmZpY2UgQWRtaW5pc3RyYXRpdmUgU2VydmljZXMjNTYxMQotbmFpY3MjNTYxMiNGYWNpbGl0aWVzIFN1cHBvcnQgU2VydmljZXMjNTYxCi1uYWljcyM1NjEyMSNGYWNpbGl0aWVzIFN1cHBvcnQgU2VydmljZXMjNTYxMgotbmFpY3MjNTYxMyNFbXBsb3ltZW50IFNlcnZpY2VzIzU2MQotbmFpY3MjNTYxMzEjRW1wbG95bWVudCBQbGFjZW1lbnQgQWdlbmNpZXMjNTYxMwotbmFpY3MjNTYxMzIjVGVtcG9yYXJ5IEhlbHAgU2VydmljZXMjNTYxMwotbmFpY3MjNTYxMzMjRW1wbG95ZWUgTGVhc2luZyBTZXJ2aWNlcyM1NjEzCi1uYWljcyM1NjE0I0J1c2luZXNzIFN1cHBvcnQgU2VydmljZXMjNTYxCi1uYWljcyM1NjE0MSNEb2N1bWVudCBQcmVwYXJhdGlvbiBTZXJ2aWNlcyM1NjE0Ci1uYWljcyM1NjE0MiNUZWxlcGhvbmUgQ2FsbCBDZW50ZXJzIzU2MTQKLW5haWNzIzU2MTQyMSNUZWxlcGhvbmUgQW5zd2VyaW5nIFNlcnZpY2VzIzU2MTQyCi1uYWljcyM1NjE0MjIjVGVsZW1hcmtldGluZyBCdXJlYXVzIzU2MTQyCi1uYWljcyM1NjE0MyNCdXNpbmVzcyBTZXJ2aWNlIENlbnRlcnMjNTYxNAotbmFpY3MjNTYxNDMxI1ByaXZhdGUgTWFpbCBDZW50ZXJzIzU2MTQzCi1uYWljcyM1NjE0MzkjT3RoZXIgQnVzaW5lc3MgU2VydmljZSBDZW50ZXJzIChpbmNsdWRpbmcgQ29weSBTaG9wcykjNTYxNDMKLW5haWNzIzU2MTQ0I0NvbGxlY3Rpb24gQWdlbmNpZXMjNTYxNAotbmFpY3MjNTYxNDUjQ3JlZGl0IEJ1cmVhdXMjNTYxNAotbmFpY3MjNTYxNDkjT3RoZXIgQnVzaW5lc3MgU3VwcG9ydCBTZXJ2aWNlcyM1NjE0Ci1uYWljcyM1NjE0OTEjUmVwb3NzZXNzaW9uIFNlcnZpY2VzIzU2MTQ5Ci1uYWljcyM1NjE0OTIjQ291cnQgUmVwb3J0aW5nIGFuZCBTdGVub3R5cGUgU2VydmljZXMjNTYxNDkKLW5haWNzIzU2MTQ5OSNBbGwgT3RoZXIgQnVzaW5lc3MgU3VwcG9ydCBTZXJ2aWNlcyM1NjE0OQotbmFpY3MjNTYxNSNUcmF2ZWwgQXJyYW5nZW1lbnQgYW5kIFJlc2VydmF0aW9uIFNlcnZpY2VzIzU2MQotbmFpY3MjNTYxNTEjVHJhdmVsIEFnZW5jaWVzIzU2MTUKLW5haWNzIzU2MTUyI1RvdXIgT3BlcmF0b3JzIzU2MTUKLW5haWNzIzU2MTU5I090aGVyIFRyYXZlbCBBcnJhbmdlbWVudCBhbmQgUmVzZXJ2YXRpb24gU2VydmljZXMjNTYxNQotbmFpY3MjNTYxNTkxI0NvbnZlbnRpb24gYW5kIFZpc2l0b3JzIEJ1cmVhdXMjNTYxNTkKLW5haWNzIzU2MTU5OSNBbGwgT3RoZXIgVHJhdmVsIEFycmFuZ2VtZW50IGFuZCBSZXNlcnZhdGlvbiBTZXJ2aWNlcyM1NjE1OQotbmFpY3MjNTYxNiNJbnZlc3RpZ2F0aW9uIGFuZCBTZWN1cml0eSBTZXJ2aWNlcyM1NjEKLW5haWNzIzU2MTYxI0ludmVzdGlnYXRpb24sIEd1YXJkLCBhbmQgQXJtb3JlZCBDYXIgU2VydmljZXMjNTYxNgotbmFpY3MjNTYxNjExI0ludmVzdGlnYXRpb24gU2VydmljZXMjNTYxNjEKLW5haWNzIzU2MTYxMiNTZWN1cml0eSBHdWFyZHMgYW5kIFBhdHJvbCBTZXJ2aWNlcyM1NjE2MQotbmFpY3MjNTYxNjEzI0FybW9yZWQgQ2FyIFNlcnZpY2VzIzU2MTYxCi1uYWljcyM1NjE2MiNTZWN1cml0eSBTeXN0ZW1zIFNlcnZpY2VzIzU2MTYKLW5haWNzIzU2MTYyMSNTZWN1cml0eSBTeXN0ZW1zIFNlcnZpY2VzIChleGNlcHQgTG9ja3NtaXRocykjNTYxNjIKLW5haWNzIzU2MTYyMiNMb2Nrc21pdGhzIzU2MTYyCi1uYWljcyM1NjE3I1NlcnZpY2VzIHRvIEJ1aWxkaW5ncyBhbmQgRHdlbGxpbmdzIzU2MQotbmFpY3MjNTYxNzEjRXh0ZXJtaW5hdGluZyBhbmQgUGVzdCBDb250cm9sIFNlcnZpY2VzIzU2MTcKLW5haWNzIzU2MTcyI0phbml0b3JpYWwgU2VydmljZXMjNTYxNwotbmFpY3MjNTYxNzMjTGFuZHNjYXBpbmcgU2VydmljZXMjNTYxNwotbmFpY3MjNTYxNzQjQ2FycGV0IGFuZCBVcGhvbHN0ZXJ5IENsZWFuaW5nIFNlcnZpY2VzIzU2MTcKLW5haWNzIzU2MTc5I090aGVyIFNlcnZpY2VzIHRvIEJ1aWxkaW5ncyBhbmQgRHdlbGxpbmdzIzU2MTcKLW5haWNzIzU2MTkjT3RoZXIgU3VwcG9ydCBTZXJ2aWNlcyM1NjEKLW5haWNzIzU2MTkxI1BhY2thZ2luZyBhbmQgTGFiZWxpbmcgU2VydmljZXMjNTYxOQotbmFpY3MjNTYxOTIjQ29udmVudGlvbiBhbmQgVHJhZGUgU2hvdyBPcmdhbml6ZXJzIzU2MTkKLW5haWNzIzU2MTk5I0FsbCBPdGhlciBTdXBwb3J0IFNlcnZpY2VzIzU2MTkKLW5haWNzIzU2MiNXYXN0ZSBNYW5hZ2VtZW50IGFuZCBSZW1lZGlhdGlvbiBTZXJ2aWNlcyM1NgotbmFpY3MjNTYyMSNXYXN0ZSBDb2xsZWN0aW9uIzU2MgotbmFpY3MjNTYyMTEjV2FzdGUgQ29sbGVjdGlvbiM1NjIxCi1uYWljcyM1NjIxMTEjU29saWQgV2FzdGUgQ29sbGVjdGlvbiM1NjIxMQotbmFpY3MjNTYyMTEyI0hhemFyZG91cyBXYXN0ZSBDb2xsZWN0aW9uIzU2MjExCi1uYWljcyM1NjIxMTkjT3RoZXIgV2FzdGUgQ29sbGVjdGlvbiM1NjIxMQotbmFpY3MjNTYyMiNXYXN0ZSBUcmVhdG1lbnQgYW5kIERpc3Bvc2FsIzU2MgotbmFpY3MjNTYyMjEjV2FzdGUgVHJlYXRtZW50IGFuZCBEaXNwb3NhbCM1NjIyCi1uYWljcyM1NjIyMTEjSGF6YXJkb3VzIFdhc3RlIFRyZWF0bWVudCBhbmQgRGlzcG9zYWwjNTYyMjEKLW5haWNzIzU2MjIxMiNTb2xpZCBXYXN0ZSBMYW5kZmlsbCM1NjIyMQotbmFpY3MjNTYyMjEzI1NvbGlkIFdhc3RlIENvbWJ1c3RvcnMgYW5kIEluY2luZXJhdG9ycyM1NjIyMQotbmFpY3MjNTYyMjE5I090aGVyIE5vbmhhemFyZG91cyBXYXN0ZSBUcmVhdG1lbnQgYW5kIERpc3Bvc2FsIzU2MjIxCi1uYWljcyM1NjI5I1JlbWVkaWF0aW9uIGFuZCBPdGhlciBXYXN0ZSBNYW5hZ2VtZW50IFNlcnZpY2VzIzU2MgotbmFpY3MjNTYyOTEjUmVtZWRpYXRpb24gU2VydmljZXMjNTYyOQotbmFpY3MjNTYyOTIjTWF0ZXJpYWxzIFJlY292ZXJ5IEZhY2lsaXRpZXMjNTYyOQotbmFpY3MjNTYyOTkjQWxsIE90aGVyIFdhc3RlIE1hbmFnZW1lbnQgU2VydmljZXMjNTYyOQotbmFpY3MjNTYyOTkxI1NlcHRpYyBUYW5rIGFuZCBSZWxhdGVkIFNlcnZpY2VzIzU2Mjk5Ci1uYWljcyM1NjI5OTgjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgV2FzdGUgTWFuYWdlbWVudCBTZXJ2aWNlcyM1NjI5OQotbmFpY3MjNjEjRWR1Y2F0aW9uYWwgU2VydmljZXMjNjEKLW5haWNzIzYxMSNFZHVjYXRpb25hbCBTZXJ2aWNlcyM2MQotbmFpY3MjNjExMSNFbGVtZW50YXJ5IGFuZCBTZWNvbmRhcnkgU2Nob29scyM2MTEKLW5haWNzIzYxMTExI0VsZW1lbnRhcnkgYW5kIFNlY29uZGFyeSBTY2hvb2xzIzYxMTEKLW5haWNzIzYxMTIjSnVuaW9yIENvbGxlZ2VzIzYxMQotbmFpY3MjNjExMjEjSnVuaW9yIENvbGxlZ2VzIzYxMTIKLW5haWNzIzYxMTMjQ29sbGVnZXMsIFVuaXZlcnNpdGllcywgYW5kIFByb2Zlc3Npb25hbCBTY2hvb2xzIzYxMQotbmFpY3MjNjExMzEjQ29sbGVnZXMsIFVuaXZlcnNpdGllcywgYW5kIFByb2Zlc3Npb25hbCBTY2hvb2xzIzYxMTMKLW5haWNzIzYxMTQjQnVzaW5lc3MgU2Nob29scyBhbmQgQ29tcHV0ZXIgYW5kIE1hbmFnZW1lbnQgVHJhaW5pbmcjNjExCi1uYWljcyM2MTE0MSNCdXNpbmVzcyBhbmQgU2VjcmV0YXJpYWwgU2Nob29scyM2MTE0Ci1uYWljcyM2MTE0MiNDb21wdXRlciBUcmFpbmluZyM2MTE0Ci1uYWljcyM2MTE0MyNQcm9mZXNzaW9uYWwgYW5kIE1hbmFnZW1lbnQgRGV2ZWxvcG1lbnQgVHJhaW5pbmcjNjExNAotbmFpY3MjNjExNSNUZWNobmljYWwgYW5kIFRyYWRlIFNjaG9vbHMjNjExCi1uYWljcyM2MTE1MSNUZWNobmljYWwgYW5kIFRyYWRlIFNjaG9vbHMjNjExNQotbmFpY3MjNjExNTExI0Nvc21ldG9sb2d5IGFuZCBCYXJiZXIgU2Nob29scyM2MTE1MQotbmFpY3MjNjExNTEyI0ZsaWdodCBUcmFpbmluZyM2MTE1MQotbmFpY3MjNjExNTEzI0FwcHJlbnRpY2VzaGlwIFRyYWluaW5nIzYxMTUxCi1uYWljcyM2MTE1MTkjT3RoZXIgVGVjaG5pY2FsIGFuZCBUcmFkZSBTY2hvb2xzIzYxMTUxCi1uYWljcyM2MTE2I090aGVyIFNjaG9vbHMgYW5kIEluc3RydWN0aW9uIzYxMQotbmFpY3MjNjExNjEjRmluZSBBcnRzIFNjaG9vbHMjNjExNgotbmFpY3MjNjExNjIjU3BvcnRzIGFuZCBSZWNyZWF0aW9uIEluc3RydWN0aW9uIzYxMTYKLW5haWNzIzYxMTYzI0xhbmd1YWdlIFNjaG9vbHMjNjExNgotbmFpY3MjNjExNjkjQWxsIE90aGVyIFNjaG9vbHMgYW5kIEluc3RydWN0aW9uIzYxMTYKLW5haWNzIzYxMTY5MSNFeGFtIFByZXBhcmF0aW9uIGFuZCBUdXRvcmluZyM2MTE2OQotbmFpY3MjNjExNjkyI0F1dG9tb2JpbGUgRHJpdmluZyBTY2hvb2xzIzYxMTY5Ci1uYWljcyM2MTE2OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgU2Nob29scyBhbmQgSW5zdHJ1Y3Rpb24jNjExNjkKLW5haWNzIzYxMTcjRWR1Y2F0aW9uYWwgU3VwcG9ydCBTZXJ2aWNlcyM2MTEKLW5haWNzIzYxMTcxI0VkdWNhdGlvbmFsIFN1cHBvcnQgU2VydmljZXMjNjExNwotbmFpY3MjNjIjSGVhbHRoIENhcmUgYW5kIFNvY2lhbCBBc3Npc3RhbmNlIzYyCi1uYWljcyM2MjEjQW1idWxhdG9yeSBIZWFsdGggQ2FyZSBTZXJ2aWNlcyM2MgotbmFpY3MjNjIxMSNPZmZpY2VzIG9mIFBoeXNpY2lhbnMjNjIxCi1uYWljcyM2MjExMSNPZmZpY2VzIG9mIFBoeXNpY2lhbnMjNjIxMQotbmFpY3MjNjIxMTExI09mZmljZXMgb2YgUGh5c2ljaWFucyAoZXhjZXB0IE1lbnRhbCBIZWFsdGggU3BlY2lhbGlzdHMpIzYyMTExCi1uYWljcyM2MjExMTIjT2ZmaWNlcyBvZiBQaHlzaWNpYW5zLCBNZW50YWwgSGVhbHRoIFNwZWNpYWxpc3RzIzYyMTExCi1uYWljcyM2MjEyI09mZmljZXMgb2YgRGVudGlzdHMjNjIxCi1uYWljcyM2MjEyMSNPZmZpY2VzIG9mIERlbnRpc3RzIzYyMTIKLW5haWNzIzYyMTMjT2ZmaWNlcyBvZiBPdGhlciBIZWFsdGggUHJhY3RpdGlvbmVycyM2MjEKLW5haWNzIzYyMTMxI09mZmljZXMgb2YgQ2hpcm9wcmFjdG9ycyM2MjEzCi1uYWljcyM2MjEzMiNPZmZpY2VzIG9mIE9wdG9tZXRyaXN0cyM2MjEzCi1uYWljcyM2MjEzMyNPZmZpY2VzIG9mIE1lbnRhbCBIZWFsdGggUHJhY3RpdGlvbmVycyAoZXhjZXB0IFBoeXNpY2lhbnMpIzYyMTMKLW5haWNzIzYyMTM0I09mZmljZXMgb2YgUGh5c2ljYWwsIE9jY3VwYXRpb25hbCBhbmQgU3BlZWNoIFRoZXJhcGlzdHMsIGFuZCBBdWRpb2xvZ2lzdHMjNjIxMwotbmFpY3MjNjIxMzkjT2ZmaWNlcyBvZiBBbGwgT3RoZXIgSGVhbHRoIFByYWN0aXRpb25lcnMjNjIxMwotbmFpY3MjNjIxMzkxI09mZmljZXMgb2YgUG9kaWF0cmlzdHMjNjIxMzkKLW5haWNzIzYyMTM5OSNPZmZpY2VzIG9mIEFsbCBPdGhlciBNaXNjZWxsYW5lb3VzIEhlYWx0aCBQcmFjdGl0aW9uZXJzIzYyMTM5Ci1uYWljcyM2MjE0I091dHBhdGllbnQgQ2FyZSBDZW50ZXJzIzYyMQotbmFpY3MjNjIxNDEjRmFtaWx5IFBsYW5uaW5nIENlbnRlcnMjNjIxNAotbmFpY3MjNjIxNDIjT3V0cGF0aWVudCBNZW50YWwgSGVhbHRoIGFuZCBTdWJzdGFuY2UgQWJ1c2UgQ2VudGVycyM2MjE0Ci1uYWljcyM2MjE0OSNPdGhlciBPdXRwYXRpZW50IENhcmUgQ2VudGVycyM2MjE0Ci1uYWljcyM2MjE0OTEjSE1PIE1lZGljYWwgQ2VudGVycyM2MjE0OQotbmFpY3MjNjIxNDkyI0tpZG5leSBEaWFseXNpcyBDZW50ZXJzIzYyMTQ5Ci1uYWljcyM2MjE0OTMjRnJlZXN0YW5kaW5nIEFtYnVsYXRvcnkgU3VyZ2ljYWwgYW5kIEVtZXJnZW5jeSBDZW50ZXJzIzYyMTQ5Ci1uYWljcyM2MjE0OTgjQWxsIE90aGVyIE91dHBhdGllbnQgQ2FyZSBDZW50ZXJzIzYyMTQ5Ci1uYWljcyM2MjE1I01lZGljYWwgYW5kIERpYWdub3N0aWMgTGFib3JhdG9yaWVzIzYyMQotbmFpY3MjNjIxNTEjTWVkaWNhbCBhbmQgRGlhZ25vc3RpYyBMYWJvcmF0b3JpZXMjNjIxNQotbmFpY3MjNjIxNTExI01lZGljYWwgTGFib3JhdG9yaWVzIzYyMTUxCi1uYWljcyM2MjE1MTIjRGlhZ25vc3RpYyBJbWFnaW5nIENlbnRlcnMjNjIxNTEKLW5haWNzIzYyMTYjSG9tZSBIZWFsdGggQ2FyZSBTZXJ2aWNlcyM2MjEKLW5haWNzIzYyMTYxI0hvbWUgSGVhbHRoIENhcmUgU2VydmljZXMjNjIxNgotbmFpY3MjNjIxOSNPdGhlciBBbWJ1bGF0b3J5IEhlYWx0aCBDYXJlIFNlcnZpY2VzIzYyMQotbmFpY3MjNjIxOTEjQW1idWxhbmNlIFNlcnZpY2VzIzYyMTkKLW5haWNzIzYyMTk5I0FsbCBPdGhlciBBbWJ1bGF0b3J5IEhlYWx0aCBDYXJlIFNlcnZpY2VzIzYyMTkKLW5haWNzIzYyMTk5MSNCbG9vZCBhbmQgT3JnYW4gQmFua3MjNjIxOTkKLW5haWNzIzYyMTk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBBbWJ1bGF0b3J5IEhlYWx0aCBDYXJlIFNlcnZpY2VzIzYyMTk5Ci1uYWljcyM2MjIjSG9zcGl0YWxzIzYyCi1uYWljcyM2MjIxI0dlbmVyYWwgTWVkaWNhbCBhbmQgU3VyZ2ljYWwgSG9zcGl0YWxzIzYyMgotbmFpY3MjNjIyMTEjR2VuZXJhbCBNZWRpY2FsIGFuZCBTdXJnaWNhbCBIb3NwaXRhbHMjNjIyMQotbmFpY3MjNjIyMiNQc3ljaGlhdHJpYyBhbmQgU3Vic3RhbmNlIEFidXNlIEhvc3BpdGFscyM2MjIKLW5haWNzIzYyMjIxI1BzeWNoaWF0cmljIGFuZCBTdWJzdGFuY2UgQWJ1c2UgSG9zcGl0YWxzIzYyMjIKLW5haWNzIzYyMjMjU3BlY2lhbHR5IChleGNlcHQgUHN5Y2hpYXRyaWMgYW5kIFN1YnN0YW5jZSBBYnVzZSkgSG9zcGl0YWxzIzYyMgotbmFpY3MjNjIyMzEjU3BlY2lhbHR5IChleGNlcHQgUHN5Y2hpYXRyaWMgYW5kIFN1YnN0YW5jZSBBYnVzZSkgSG9zcGl0YWxzIzYyMjMKLW5haWNzIzYyMyNOdXJzaW5nIGFuZCBSZXNpZGVudGlhbCBDYXJlIEZhY2lsaXRpZXMjNjIKLW5haWNzIzYyMzEjTnVyc2luZyBDYXJlIEZhY2lsaXRpZXMjNjIzCi1uYWljcyM2MjMxMSNOdXJzaW5nIENhcmUgRmFjaWxpdGllcyM2MjMxCi1uYWljcyM2MjMyI1Jlc2lkZW50aWFsIE1lbnRhbCBSZXRhcmRhdGlvbiwgTWVudGFsIEhlYWx0aCBhbmQgU3Vic3RhbmNlIEFidXNlIEZhY2lsaXRpZXMjNjIzCi1uYWljcyM2MjMyMSNSZXNpZGVudGlhbCBNZW50YWwgUmV0YXJkYXRpb24gRmFjaWxpdGllcyM2MjMyCi1uYWljcyM2MjMyMiNSZXNpZGVudGlhbCBNZW50YWwgSGVhbHRoIGFuZCBTdWJzdGFuY2UgQWJ1c2UgRmFjaWxpdGllcyM2MjMyCi1uYWljcyM2MjMzI0NvbW11bml0eSBDYXJlIEZhY2lsaXRpZXMgZm9yIHRoZSBFbGRlcmx5IzYyMwotbmFpY3MjNjIzMzEjQ29tbXVuaXR5IENhcmUgRmFjaWxpdGllcyBmb3IgdGhlIEVsZGVybHkjNjIzMwotbmFpY3MjNjIzMzExI0NvbnRpbnVpbmcgQ2FyZSBSZXRpcmVtZW50IENvbW11bml0aWVzIzYyMzMxCi1uYWljcyM2MjMzMTIjSG9tZXMgZm9yIHRoZSBFbGRlcmx5IzYyMzMxCi1uYWljcyM2MjM5I090aGVyIFJlc2lkZW50aWFsIENhcmUgRmFjaWxpdGllcyM2MjMKLW5haWNzIzYyMzk5I090aGVyIFJlc2lkZW50aWFsIENhcmUgRmFjaWxpdGllcyM2MjM5Ci1uYWljcyM2MjQjU29jaWFsIEFzc2lzdGFuY2UjNjIKLW5haWNzIzYyNDEjSW5kaXZpZHVhbCBhbmQgRmFtaWx5IFNlcnZpY2VzIzYyNAotbmFpY3MjNjI0MTEjQ2hpbGQgYW5kIFlvdXRoIFNlcnZpY2VzIzYyNDEKLW5haWNzIzYyNDEyI1NlcnZpY2VzIGZvciB0aGUgRWxkZXJseSBhbmQgUGVyc29ucyB3aXRoIERpc2FiaWxpdGllcyM2MjQxCi1uYWljcyM2MjQxOSNPdGhlciBJbmRpdmlkdWFsIGFuZCBGYW1pbHkgU2VydmljZXMjNjI0MQotbmFpY3MjNjI0MiNDb21tdW5pdHkgRm9vZCBhbmQgSG91c2luZywgYW5kIEVtZXJnZW5jeSBhbmQgT3RoZXIgUmVsaWVmIFNlcnZpY2VzIzYyNAotbmFpY3MjNjI0MjEjQ29tbXVuaXR5IEZvb2QgU2VydmljZXMjNjI0MgotbmFpY3MjNjI0MjIjQ29tbXVuaXR5IEhvdXNpbmcgU2VydmljZXMjNjI0MgotbmFpY3MjNjI0MjIxI1RlbXBvcmFyeSBTaGVsdGVycyM2MjQyMgotbmFpY3MjNjI0MjI5I090aGVyIENvbW11bml0eSBIb3VzaW5nIFNlcnZpY2VzIzYyNDIyCi1uYWljcyM2MjQyMyNFbWVyZ2VuY3kgYW5kIE90aGVyIFJlbGllZiBTZXJ2aWNlcyM2MjQyCi1uYWljcyM2MjQzI1ZvY2F0aW9uYWwgUmVoYWJpbGl0YXRpb24gU2VydmljZXMjNjI0Ci1uYWljcyM2MjQzMSNWb2NhdGlvbmFsIFJlaGFiaWxpdGF0aW9uIFNlcnZpY2VzIzYyNDMKLW5haWNzIzYyNDQjQ2hpbGQgRGF5IENhcmUgU2VydmljZXMjNjI0Ci1uYWljcyM2MjQ0MSNDaGlsZCBEYXkgQ2FyZSBTZXJ2aWNlcyM2MjQ0Ci1uYWljcyM3MSNBcnRzLCBFbnRlcnRhaW5tZW50LCBhbmQgUmVjcmVhdGlvbiM3MQotbmFpY3MjNzExI1BlcmZvcm1pbmcgQXJ0cywgU3BlY3RhdG9yIFNwb3J0cywgYW5kIFJlbGF0ZWQgSW5kdXN0cmllcyM3MQotbmFpY3MjNzExMSNQZXJmb3JtaW5nIEFydHMgQ29tcGFuaWVzIzcxMQotbmFpY3MjNzExMTEjVGhlYXRlciBDb21wYW5pZXMgYW5kIERpbm5lciBUaGVhdGVycyM3MTExCi1uYWljcyM3MTExMiNEYW5jZSBDb21wYW5pZXMjNzExMQotbmFpY3MjNzExMTMjTXVzaWNhbCBHcm91cHMgYW5kIEFydGlzdHMjNzExMQotbmFpY3MjNzExMTkjT3RoZXIgUGVyZm9ybWluZyBBcnRzIENvbXBhbmllcyM3MTExCi1uYWljcyM3MTEyI1NwZWN0YXRvciBTcG9ydHMjNzExCi1uYWljcyM3MTEyMSNTcGVjdGF0b3IgU3BvcnRzIzcxMTIKLW5haWNzIzcxMTIxMSNTcG9ydHMgVGVhbXMgYW5kIENsdWJzIzcxMTIxCi1uYWljcyM3MTEyMTIjUmFjZXRyYWNrcyM3MTEyMQotbmFpY3MjNzExMjE5I090aGVyIFNwZWN0YXRvciBTcG9ydHMjNzExMjEKLW5haWNzIzcxMTMjUHJvbW90ZXJzIG9mIFBlcmZvcm1pbmcgQXJ0cywgU3BvcnRzLCBhbmQgU2ltaWxhciBFdmVudHMjNzExCi1uYWljcyM3MTEzMSNQcm9tb3RlcnMgb2YgUGVyZm9ybWluZyBBcnRzLCBTcG9ydHMsIGFuZCBTaW1pbGFyIEV2ZW50cyB3aXRoIEZhY2lsaXRpZXMjNzExMwotbmFpY3MjNzExMzIjUHJvbW90ZXJzIG9mIFBlcmZvcm1pbmcgQXJ0cywgU3BvcnRzLCBhbmQgU2ltaWxhciBFdmVudHMgd2l0aG91dCBGYWNpbGl0aWVzIzcxMTMKLW5haWNzIzcxMTQjQWdlbnRzIGFuZCBNYW5hZ2VycyBmb3IgQXJ0aXN0cywgQXRobGV0ZXMsIEVudGVydGFpbmVycywgYW5kIE90aGVyIFB1YmxpYyBGaWd1cmVzIzcxMQotbmFpY3MjNzExNDEjQWdlbnRzIGFuZCBNYW5hZ2VycyBmb3IgQXJ0aXN0cywgQXRobGV0ZXMsIEVudGVydGFpbmVycywgYW5kIE90aGVyIFB1YmxpYyBGaWd1cmVzIzcxMTQKLW5haWNzIzcxMTUjSW5kZXBlbmRlbnQgQXJ0aXN0cywgV3JpdGVycywgYW5kIFBlcmZvcm1lcnMjNzExCi1uYWljcyM3MTE1MSNJbmRlcGVuZGVudCBBcnRpc3RzLCBXcml0ZXJzLCBhbmQgUGVyZm9ybWVycyM3MTE1Ci1uYWljcyM3MTIjTXVzZXVtcywgSGlzdG9yaWNhbCBTaXRlcywgYW5kIFNpbWlsYXIgSW5zdGl0dXRpb25zIzcxCi1uYWljcyM3MTIxI011c2V1bXMsIEhpc3RvcmljYWwgU2l0ZXMsIGFuZCBTaW1pbGFyIEluc3RpdHV0aW9ucyM3MTIKLW5haWNzIzcxMjExI011c2V1bXMjNzEyMQotbmFpY3MjNzEyMTIjSGlzdG9yaWNhbCBTaXRlcyM3MTIxCi1uYWljcyM3MTIxMyNab29zIGFuZCBCb3RhbmljYWwgR2FyZGVucyM3MTIxCi1uYWljcyM3MTIxOSNOYXR1cmUgUGFya3MgYW5kIE90aGVyIFNpbWlsYXIgSW5zdGl0dXRpb25zIzcxMjEKLW5haWNzIzcxMyNBbXVzZW1lbnQsIEdhbWJsaW5nLCBhbmQgUmVjcmVhdGlvbiBJbmR1c3RyaWVzIzcxCi1uYWljcyM3MTMxI0FtdXNlbWVudCBQYXJrcyBhbmQgQXJjYWRlcyM3MTMKLW5haWNzIzcxMzExI0FtdXNlbWVudCBhbmQgVGhlbWUgUGFya3MjNzEzMQotbmFpY3MjNzEzMTIjQW11c2VtZW50IEFyY2FkZXMjNzEzMQotbmFpY3MjNzEzMiNHYW1ibGluZyBJbmR1c3RyaWVzIzcxMwotbmFpY3MjNzEzMjEjQ2FzaW5vcyAoZXhjZXB0IENhc2lubyBIb3RlbHMpIzcxMzIKLW5haWNzIzcxMzI5I090aGVyIEdhbWJsaW5nIEluZHVzdHJpZXMjNzEzMgotbmFpY3MjNzEzOSNPdGhlciBBbXVzZW1lbnQgYW5kIFJlY3JlYXRpb24gSW5kdXN0cmllcyM3MTMKLW5haWNzIzcxMzkxI0dvbGYgQ291cnNlcyBhbmQgQ291bnRyeSBDbHVicyM3MTM5Ci1uYWljcyM3MTM5MiNTa2lpbmcgRmFjaWxpdGllcyM3MTM5Ci1uYWljcyM3MTM5MyNNYXJpbmFzIzcxMzkKLW5haWNzIzcxMzk0I0ZpdG5lc3MgYW5kIFJlY3JlYXRpb25hbCBTcG9ydHMgQ2VudGVycyM3MTM5Ci1uYWljcyM3MTM5NSNCb3dsaW5nIENlbnRlcnMjNzEzOQotbmFpY3MjNzEzOTkjQWxsIE90aGVyIEFtdXNlbWVudCBhbmQgUmVjcmVhdGlvbiBJbmR1c3RyaWVzIzcxMzkKLW5haWNzIzcyI0FjY29tbW9kYXRpb24gYW5kIEZvb2QgU2VydmljZXMjNzIKLW5haWNzIzcyMSNBY2NvbW1vZGF0aW9uIzcyCi1uYWljcyM3MjExI1RyYXZlbGVyIEFjY29tbW9kYXRpb24jNzIxCi1uYWljcyM3MjExMSNIb3RlbHMgKGV4Y2VwdCBDYXNpbm8gSG90ZWxzKSBhbmQgTW90ZWxzIzcyMTEKLW5haWNzIzcyMTEyI0Nhc2lubyBIb3RlbHMjNzIxMQotbmFpY3MjNzIxMTkjT3RoZXIgVHJhdmVsZXIgQWNjb21tb2RhdGlvbiM3MjExCi1uYWljcyM3MjExOTEjQmVkLWFuZC1CcmVha2Zhc3QgSW5ucyM3MjExOQotbmFpY3MjNzIxMTk5I0FsbCBPdGhlciBUcmF2ZWxlciBBY2NvbW1vZGF0aW9uIzcyMTE5Ci1uYWljcyM3MjEyI1JWIChSZWNyZWF0aW9uYWwgVmVoaWNsZSkgUGFya3MgYW5kIFJlY3JlYXRpb25hbCBDYW1wcyM3MjEKLW5haWNzIzcyMTIxI1JWIChSZWNyZWF0aW9uYWwgVmVoaWNsZSkgUGFya3MgYW5kIFJlY3JlYXRpb25hbCBDYW1wcyM3MjEyCi1uYWljcyM3MjEyMTEjUlYgKFJlY3JlYXRpb25hbCBWZWhpY2xlKSBQYXJrcyBhbmQgQ2FtcGdyb3VuZHMjNzIxMjEKLW5haWNzIzcyMTIxNCNSZWNyZWF0aW9uYWwgYW5kIFZhY2F0aW9uIENhbXBzIChleGNlcHQgQ2FtcGdyb3VuZHMpIzcyMTIxCi1uYWljcyM3MjEzI1Jvb21pbmcgYW5kIEJvYXJkaW5nIEhvdXNlcyM3MjEKLW5haWNzIzcyMTMxI1Jvb21pbmcgYW5kIEJvYXJkaW5nIEhvdXNlcyM3MjEzCi1uYWljcyM3MjIjRm9vZCBTZXJ2aWNlcyBhbmQgRHJpbmtpbmcgUGxhY2VzIzcyCi1uYWljcyM3MjIxI0Z1bGwtU2VydmljZSBSZXN0YXVyYW50cyM3MjIKLW5haWNzIzcyMjExI0Z1bGwtU2VydmljZSBSZXN0YXVyYW50cyM3MjIxCi1uYWljcyM3MjIyI0xpbWl0ZWQtU2VydmljZSBFYXRpbmcgUGxhY2VzIzcyMgotbmFpY3MjNzIyMjEjTGltaXRlZC1TZXJ2aWNlIEVhdGluZyBQbGFjZXMjNzIyMgotbmFpY3MjNzIyMjExI0xpbWl0ZWQtU2VydmljZSBSZXN0YXVyYW50cyM3MjIyMQotbmFpY3MjNzIyMjEyI0NhZmV0ZXJpYXMjNzIyMjEKLW5haWNzIzcyMjIxMyNTbmFjayBhbmQgTm9uYWxjb2hvbGljIEJldmVyYWdlIEJhcnMjNzIyMjEKLW5haWNzIzcyMjMjU3BlY2lhbCBGb29kIFNlcnZpY2VzIzcyMgotbmFpY3MjNzIyMzEjRm9vZCBTZXJ2aWNlIENvbnRyYWN0b3JzIzcyMjMKLW5haWNzIzcyMjMyI0NhdGVyZXJzIzcyMjMKLW5haWNzIzcyMjMzI01vYmlsZSBGb29kIFNlcnZpY2VzIzcyMjMKLW5haWNzIzcyMjQjRHJpbmtpbmcgUGxhY2VzIChBbGNvaG9saWMgQmV2ZXJhZ2VzKSM3MjIKLW5haWNzIzcyMjQxI0RyaW5raW5nIFBsYWNlcyAoQWxjb2hvbGljIEJldmVyYWdlcykjNzIyNAotbmFpY3MjODEjT3RoZXIgU2VydmljZXMgKGV4Y2VwdCBQdWJsaWMgQWRtaW5pc3RyYXRpb24pIzgxCi1uYWljcyM4MTEjUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MQotbmFpY3MjODExMSNBdXRvbW90aXZlIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExCi1uYWljcyM4MTExMSNBdXRvbW90aXZlIE1lY2hhbmljYWwgYW5kIEVsZWN0cmljYWwgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTExCi1uYWljcyM4MTExMTEjR2VuZXJhbCBBdXRvbW90aXZlIFJlcGFpciM4MTExMQotbmFpY3MjODExMTEyI0F1dG9tb3RpdmUgRXhoYXVzdCBTeXN0ZW0gUmVwYWlyIzgxMTExCi1uYWljcyM4MTExMTMjQXV0b21vdGl2ZSBUcmFuc21pc3Npb24gUmVwYWlyIzgxMTExCi1uYWljcyM4MTExMTgjT3RoZXIgQXV0b21vdGl2ZSBNZWNoYW5pY2FsIGFuZCBFbGVjdHJpY2FsIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMTEKLW5haWNzIzgxMTEyI0F1dG9tb3RpdmUgQm9keSwgUGFpbnQsIEludGVyaW9yLCBhbmQgR2xhc3MgUmVwYWlyIzgxMTEKLW5haWNzIzgxMTEyMSNBdXRvbW90aXZlIEJvZHksIFBhaW50LCBhbmQgSW50ZXJpb3IgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTExMgotbmFpY3MjODExMTIyI0F1dG9tb3RpdmUgR2xhc3MgUmVwbGFjZW1lbnQgU2hvcHMjODExMTIKLW5haWNzIzgxMTE5I090aGVyIEF1dG9tb3RpdmUgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTExCi1uYWljcyM4MTExOTEjQXV0b21vdGl2ZSBPaWwgQ2hhbmdlIGFuZCBMdWJyaWNhdGlvbiBTaG9wcyM4MTExOQotbmFpY3MjODExMTkyI0NhciBXYXNoZXMjODExMTkKLW5haWNzIzgxMTE5OCNBbGwgT3RoZXIgQXV0b21vdGl2ZSBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTE5Ci1uYWljcyM4MTEyI0VsZWN0cm9uaWMgYW5kIFByZWNpc2lvbiBFcXVpcG1lbnQgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEKLW5haWNzIzgxMTIxI0VsZWN0cm9uaWMgYW5kIFByZWNpc2lvbiBFcXVpcG1lbnQgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEyCi1uYWljcyM4MTEyMTEjQ29uc3VtZXIgRWxlY3Ryb25pY3MgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEyMQotbmFpY3MjODExMjEyI0NvbXB1dGVyIGFuZCBPZmZpY2UgTWFjaGluZSBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTIxCi1uYWljcyM4MTEyMTMjQ29tbXVuaWNhdGlvbiBFcXVpcG1lbnQgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEyMQotbmFpY3MjODExMjE5I090aGVyIEVsZWN0cm9uaWMgYW5kIFByZWNpc2lvbiBFcXVpcG1lbnQgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEyMQotbmFpY3MjODExMyNDb21tZXJjaWFsIGFuZCBJbmR1c3RyaWFsIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IChleGNlcHQgQXV0b21vdGl2ZSBhbmQgRWxlY3Ryb25pYykgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEKLW5haWNzIzgxMTMxI0NvbW1lcmNpYWwgYW5kIEluZHVzdHJpYWwgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgKGV4Y2VwdCBBdXRvbW90aXZlIGFuZCBFbGVjdHJvbmljKSBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTMKLW5haWNzIzgxMTQjUGVyc29uYWwgYW5kIEhvdXNlaG9sZCBHb29kcyBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMQotbmFpY3MjODExNDEjSG9tZSBhbmQgR2FyZGVuIEVxdWlwbWVudCBhbmQgQXBwbGlhbmNlIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExNAotbmFpY3MjODExNDExI0hvbWUgYW5kIEdhcmRlbiBFcXVpcG1lbnQgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTE0MQotbmFpY3MjODExNDEyI0FwcGxpYW5jZSBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTQxCi1uYWljcyM4MTE0MiNSZXVwaG9sc3RlcnkgYW5kIEZ1cm5pdHVyZSBSZXBhaXIjODExNAotbmFpY3MjODExNDMjRm9vdHdlYXIgYW5kIExlYXRoZXIgR29vZHMgUmVwYWlyIzgxMTQKLW5haWNzIzgxMTQ5I090aGVyIFBlcnNvbmFsIGFuZCBIb3VzZWhvbGQgR29vZHMgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTE0Ci1uYWljcyM4MTIjUGVyc29uYWwgYW5kIExhdW5kcnkgU2VydmljZXMjODEKLW5haWNzIzgxMjEjUGVyc29uYWwgQ2FyZSBTZXJ2aWNlcyM4MTIKLW5haWNzIzgxMjExI0hhaXIsIE5haWwsIGFuZCBTa2luIENhcmUgU2VydmljZXMjODEyMQotbmFpY3MjODEyMTExI0JhcmJlciBTaG9wcyM4MTIxMQotbmFpY3MjODEyMTEyI0JlYXV0eSBTYWxvbnMjODEyMTEKLW5haWNzIzgxMjExMyNOYWlsIFNhbG9ucyM4MTIxMQotbmFpY3MjODEyMTkjT3RoZXIgUGVyc29uYWwgQ2FyZSBTZXJ2aWNlcyM4MTIxCi1uYWljcyM4MTIxOTEjRGlldCBhbmQgV2VpZ2h0IFJlZHVjaW5nIENlbnRlcnMjODEyMTkKLW5haWNzIzgxMjE5OSNPdGhlciBQZXJzb25hbCBDYXJlIFNlcnZpY2VzIzgxMjE5Ci1uYWljcyM4MTIyI0RlYXRoIENhcmUgU2VydmljZXMjODEyCi1uYWljcyM4MTIyMSNGdW5lcmFsIEhvbWVzIGFuZCBGdW5lcmFsIFNlcnZpY2VzIzgxMjIKLW5haWNzIzgxMjIyI0NlbWV0ZXJpZXMgYW5kIENyZW1hdG9yaWVzIzgxMjIKLW5haWNzIzgxMjMjRHJ5Y2xlYW5pbmcgYW5kIExhdW5kcnkgU2VydmljZXMjODEyCi1uYWljcyM4MTIzMSNDb2luLU9wZXJhdGVkIExhdW5kcmllcyBhbmQgRHJ5Y2xlYW5lcnMjODEyMwotbmFpY3MjODEyMzIjRHJ5Y2xlYW5pbmcgYW5kIExhdW5kcnkgU2VydmljZXMgKGV4Y2VwdCBDb2luLU9wZXJhdGVkKSM4MTIzCi1uYWljcyM4MTIzMyNMaW5lbiBhbmQgVW5pZm9ybSBTdXBwbHkjODEyMwotbmFpY3MjODEyMzMxI0xpbmVuIFN1cHBseSM4MTIzMwotbmFpY3MjODEyMzMyI0luZHVzdHJpYWwgTGF1bmRlcmVycyM4MTIzMwotbmFpY3MjODEyOSNPdGhlciBQZXJzb25hbCBTZXJ2aWNlcyM4MTIKLW5haWNzIzgxMjkxI1BldCBDYXJlIChleGNlcHQgVmV0ZXJpbmFyeSkgU2VydmljZXMjODEyOQotbmFpY3MjODEyOTIjUGhvdG9maW5pc2hpbmcjODEyOQotbmFpY3MjODEyOTIxI1Bob3RvZmluaXNoaW5nIExhYm9yYXRvcmllcyAoZXhjZXB0IE9uZS1Ib3VyKSM4MTI5MgotbmFpY3MjODEyOTIyI09uZS1Ib3VyIFBob3RvZmluaXNoaW5nIzgxMjkyCi1uYWljcyM4MTI5MyNQYXJraW5nIExvdHMgYW5kIEdhcmFnZXMjODEyOQotbmFpY3MjODEyOTkjQWxsIE90aGVyIFBlcnNvbmFsIFNlcnZpY2VzIzgxMjkKLW5haWNzIzgxMyNSZWxpZ2lvdXMsIEdyYW50bWFraW5nLCBDaXZpYywgUHJvZmVzc2lvbmFsLCBhbmQgU2ltaWxhciBPcmdhbml6YXRpb25zIzgxCi1uYWljcyM4MTMxI1JlbGlnaW91cyBPcmdhbml6YXRpb25zIzgxMwotbmFpY3MjODEzMTEjUmVsaWdpb3VzIE9yZ2FuaXphdGlvbnMjODEzMQotbmFpY3MjODEzMiNHcmFudG1ha2luZyBhbmQgR2l2aW5nIFNlcnZpY2VzIzgxMwotbmFpY3MjODEzMjEjR3JhbnRtYWtpbmcgYW5kIEdpdmluZyBTZXJ2aWNlcyM4MTMyCi1uYWljcyM4MTMyMTEjR3JhbnRtYWtpbmcgRm91bmRhdGlvbnMjODEzMjEKLW5haWNzIzgxMzIxMiNWb2x1bnRhcnkgSGVhbHRoIE9yZ2FuaXphdGlvbnMjODEzMjEKLW5haWNzIzgxMzIxOSNPdGhlciBHcmFudG1ha2luZyBhbmQgR2l2aW5nIFNlcnZpY2VzIzgxMzIxCi1uYWljcyM4MTMzI1NvY2lhbCBBZHZvY2FjeSBPcmdhbml6YXRpb25zIzgxMwotbmFpY3MjODEzMzEjU29jaWFsIEFkdm9jYWN5IE9yZ2FuaXphdGlvbnMjODEzMwotbmFpY3MjODEzMzExI0h1bWFuIFJpZ2h0cyBPcmdhbml6YXRpb25zIzgxMzMxCi1uYWljcyM4MTMzMTIjRW52aXJvbm1lbnQsIENvbnNlcnZhdGlvbiBhbmQgV2lsZGxpZmUgT3JnYW5pemF0aW9ucyM4MTMzMQotbmFpY3MjODEzMzE5I090aGVyIFNvY2lhbCBBZHZvY2FjeSBPcmdhbml6YXRpb25zIzgxMzMxCi1uYWljcyM4MTM0I0NpdmljIGFuZCBTb2NpYWwgT3JnYW5pemF0aW9ucyM4MTMKLW5haWNzIzgxMzQxI0NpdmljIGFuZCBTb2NpYWwgT3JnYW5pemF0aW9ucyM4MTM0Ci1uYWljcyM4MTM5I0J1c2luZXNzLCBQcm9mZXNzaW9uYWwsIExhYm9yLCBQb2xpdGljYWwsIGFuZCBTaW1pbGFyIE9yZ2FuaXphdGlvbnMjODEzCi1uYWljcyM4MTM5MSNCdXNpbmVzcyBBc3NvY2lhdGlvbnMjODEzOQotbmFpY3MjODEzOTIjUHJvZmVzc2lvbmFsIE9yZ2FuaXphdGlvbnMjODEzOQotbmFpY3MjODEzOTMjTGFib3IgVW5pb25zIGFuZCBTaW1pbGFyIExhYm9yIE9yZ2FuaXphdGlvbnMjODEzOQotbmFpY3MjODEzOTQjUG9saXRpY2FsIE9yZ2FuaXphdGlvbnMjODEzOQotbmFpY3MjODEzOTkjT3RoZXIgU2ltaWxhciBPcmdhbml6YXRpb25zIChleGNlcHQgQnVzaW5lc3MsIFByb2Zlc3Npb25hbCwgTGFib3IsIGFuZCBQb2xpdGljYWwgT3JnYW5pemF0aW9ucykjODEzOQotbmFpY3MjODE0I1ByaXZhdGUgSG91c2Vob2xkcyM4MQotbmFpY3MjODE0MSNQcml2YXRlIEhvdXNlaG9sZHMjODE0Ci1uYWljcyM4MTQxMSNQcml2YXRlIEhvdXNlaG9sZHMjODE0MQotbmFpY3MjOTIjUHVibGljIEFkbWluaXN0cmF0aW9uIzkyCi1uYWljcyM5MjEjRXhlY3V0aXZlLCBMZWdpc2xhdGl2ZSwgYW5kIE90aGVyIEdlbmVyYWwgR292ZXJubWVudCBTdXBwb3J0IzkyCi1uYWljcyM5MjExI0V4ZWN1dGl2ZSwgTGVnaXNsYXRpdmUsIGFuZCBPdGhlciBHZW5lcmFsIEdvdmVybm1lbnQgU3VwcG9ydCM5MjEKLW5haWNzIzkyMTExI0V4ZWN1dGl2ZSBPZmZpY2VzIzkyMTEKLW5haWNzIzkyMTEyI0xlZ2lzbGF0aXZlIEJvZGllcyM5MjExCi1uYWljcyM5MjExMyNQdWJsaWMgRmluYW5jZSBBY3Rpdml0aWVzIzkyMTEKLW5haWNzIzkyMTE0I0V4ZWN1dGl2ZSBhbmQgTGVnaXNsYXRpdmUgT2ZmaWNlcywgQ29tYmluZWQjOTIxMQotbmFpY3MjOTIxMTUjQW1lcmljYW4gSW5kaWFuIGFuZCBBbGFza2EgTmF0aXZlIFRyaWJhbCBHb3Zlcm5tZW50cyM5MjExCi1uYWljcyM5MjExOSNPdGhlciBHZW5lcmFsIEdvdmVybm1lbnQgU3VwcG9ydCM5MjExCi1uYWljcyM5MjIjSnVzdGljZSwgUHVibGljIE9yZGVyLCBhbmQgU2FmZXR5IEFjdGl2aXRpZXMjOTIKLW5haWNzIzkyMjEjSnVzdGljZSwgUHVibGljIE9yZGVyLCBhbmQgU2FmZXR5IEFjdGl2aXRpZXMjOTIyCi1uYWljcyM5MjIxMSNDb3VydHMjOTIyMQotbmFpY3MjOTIyMTIjUG9saWNlIFByb3RlY3Rpb24jOTIyMQotbmFpY3MjOTIyMTMjTGVnYWwgQ291bnNlbCBhbmQgUHJvc2VjdXRpb24jOTIyMQotbmFpY3MjOTIyMTQjQ29ycmVjdGlvbmFsIEluc3RpdHV0aW9ucyM5MjIxCi1uYWljcyM5MjIxNSNQYXJvbGUgT2ZmaWNlcyBhbmQgUHJvYmF0aW9uIE9mZmljZXMjOTIyMQotbmFpY3MjOTIyMTYjRmlyZSBQcm90ZWN0aW9uIzkyMjEKLW5haWNzIzkyMjE5I090aGVyIEp1c3RpY2UsIFB1YmxpYyBPcmRlciwgYW5kIFNhZmV0eSBBY3Rpdml0aWVzIzkyMjEKLW5haWNzIzkyMyNBZG1pbmlzdHJhdGlvbiBvZiBIdW1hbiBSZXNvdXJjZSBQcm9ncmFtcyM5MgotbmFpY3MjOTIzMSNBZG1pbmlzdHJhdGlvbiBvZiBIdW1hbiBSZXNvdXJjZSBQcm9ncmFtcyM5MjMKLW5haWNzIzkyMzExI0FkbWluaXN0cmF0aW9uIG9mIEVkdWNhdGlvbiBQcm9ncmFtcyM5MjMxCi1uYWljcyM5MjMxMiNBZG1pbmlzdHJhdGlvbiBvZiBQdWJsaWMgSGVhbHRoIFByb2dyYW1zIzkyMzEKLW5haWNzIzkyMzEzI0FkbWluaXN0cmF0aW9uIG9mIEh1bWFuIFJlc291cmNlIFByb2dyYW1zIChleGNlcHQgRWR1Y2F0aW9uLCBQdWJsaWMgSGVhbHRoLCBhbmQgVmV0ZXJhbnMnIEFmZmFpcnMgUHJvZ3JhbXMpIzkyMzEKLW5haWNzIzkyMzE0I0FkbWluaXN0cmF0aW9uIG9mIFZldGVyYW5zJyBBZmZhaXJzIzkyMzEKLW5haWNzIzkyNCNBZG1pbmlzdHJhdGlvbiBvZiBFbnZpcm9ubWVudGFsIFF1YWxpdHkgUHJvZ3JhbXMjOTIKLW5haWNzIzkyNDEjQWRtaW5pc3RyYXRpb24gb2YgRW52aXJvbm1lbnRhbCBRdWFsaXR5IFByb2dyYW1zIzkyNAotbmFpY3MjOTI0MTEjQWRtaW5pc3RyYXRpb24gb2YgQWlyIGFuZCBXYXRlciBSZXNvdXJjZSBhbmQgU29saWQgV2FzdGUgTWFuYWdlbWVudCBQcm9ncmFtcyM5MjQxCi1uYWljcyM5MjQxMiNBZG1pbmlzdHJhdGlvbiBvZiBDb25zZXJ2YXRpb24gUHJvZ3JhbXMjOTI0MQotbmFpY3MjOTI1I0FkbWluaXN0cmF0aW9uIG9mIEhvdXNpbmcgUHJvZ3JhbXMsIFVyYmFuIFBsYW5uaW5nLCBhbmQgQ29tbXVuaXR5IERldmVsb3BtZW50IzkyCi1uYWljcyM5MjUxI0FkbWluaXN0cmF0aW9uIG9mIEhvdXNpbmcgUHJvZ3JhbXMsIFVyYmFuIFBsYW5uaW5nLCBhbmQgQ29tbXVuaXR5IERldmVsb3BtZW50IzkyNQotbmFpY3MjOTI1MTEjQWRtaW5pc3RyYXRpb24gb2YgSG91c2luZyBQcm9ncmFtcyM5MjUxCi1uYWljcyM5MjUxMiNBZG1pbmlzdHJhdGlvbiBvZiBVcmJhbiBQbGFubmluZyBhbmQgQ29tbXVuaXR5IGFuZCBSdXJhbCBEZXZlbG9wbWVudCM5MjUxCi1uYWljcyM5MjYjQWRtaW5pc3RyYXRpb24gb2YgRWNvbm9taWMgUHJvZ3JhbXMjOTIKLW5haWNzIzkyNjEjQWRtaW5pc3RyYXRpb24gb2YgRWNvbm9taWMgUHJvZ3JhbXMjOTI2Ci1uYWljcyM5MjYxMSNBZG1pbmlzdHJhdGlvbiBvZiBHZW5lcmFsIEVjb25vbWljIFByb2dyYW1zIzkyNjEKLW5haWNzIzkyNjEyI1JlZ3VsYXRpb24gYW5kIEFkbWluaXN0cmF0aW9uIG9mIFRyYW5zcG9ydGF0aW9uIFByb2dyYW1zIzkyNjEKLW5haWNzIzkyNjEzI1JlZ3VsYXRpb24gYW5kIEFkbWluaXN0cmF0aW9uIG9mIENvbW11bmljYXRpb25zLCBFbGVjdHJpYywgR2FzLCBhbmQgT3RoZXIgVXRpbGl0aWVzIzkyNjEKLW5haWNzIzkyNjE0I1JlZ3VsYXRpb24gb2YgQWdyaWN1bHR1cmFsIE1hcmtldGluZyBhbmQgQ29tbW9kaXRpZXMjOTI2MQotbmFpY3MjOTI2MTUjUmVndWxhdGlvbiwgTGljZW5zaW5nLCBhbmQgSW5zcGVjdGlvbiBvZiBNaXNjZWxsYW5lb3VzIENvbW1lcmNpYWwgU2VjdG9ycyM5MjYxCi1uYWljcyM5MjcjU3BhY2UgUmVzZWFyY2ggYW5kIFRlY2hub2xvZ3kjOTIKLW5haWNzIzkyNzEjU3BhY2UgUmVzZWFyY2ggYW5kIFRlY2hub2xvZ3kjOTI3Ci1uYWljcyM5MjcxMSNTcGFjZSBSZXNlYXJjaCBhbmQgVGVjaG5vbG9neSM5MjcxCi1uYWljcyM5MjgjTmF0aW9uYWwgU2VjdXJpdHkgYW5kIEludGVybmF0aW9uYWwgQWZmYWlycyM5MgotbmFpY3MjOTI4MSNOYXRpb25hbCBTZWN1cml0eSBhbmQgSW50ZXJuYXRpb25hbCBBZmZhaXJzIzkyOAotbmFpY3MjOTI4MTEjTmF0aW9uYWwgU2VjdXJpdHkjOTI4MQotbmFpY3MjOTI4MTIjSW50ZXJuYXRpb25hbCBBZmZhaXJzIzkyODEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL3Vuc3BzYy1kYXRhLnR4dCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL3Vuc3BzYy1kYXRhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc4MzUxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS91bnNwc2MtZGF0YS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNzA1NCArMCwwIEBACi11bnNwc2M3IzEwLjAwLjAwLjAwLjAwI0xpdmUgUGxhbnQgYW5kIEFuaW1hbCBNYXRlcmlhbCBhbmQgQWNjZXNzb3JpZXMgYW5kIFN1cHBsaWVzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjAwLjAwLjAwI0xpdmUgYW5pbWFscyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4wMC4wMCNMaXZlc3RvY2sjMTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDEuMDAjQ2F0cyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4wMi4wMCNEb2dzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjA0LjAwI01pbmsjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDUuMDAjUmF0cyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4wNi4wMCNIb3JzZXMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDcuMDAjU2hlZXAjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDguMDAjR29hdHMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDkuMDAjQXNzZXMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMTAuMDAjTWljZSMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xMS4wMCNTd2luZSMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xMi4wMCNSYWJiaXRzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjEzLjAwI0d1aW5lYSBwaWdzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjE0LjAwI1ByaW1hdGVzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjE1LjAwI0FybWFkaWxsb3MjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMTYuMDAjQ2F0dGxlIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjE3LjAwI0NhbWVscyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNi4wMC4wMCNCaXJkcyBhbmQgZm93bCMxMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNi4wMS4wMCNMaXZlIGNoaWNrZW5zIzEwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE2LjAyLjAwI0xpdmUgZHVja3MjMTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTYuMDMuMDAjTGl2ZSB0dXJrZXlzIzEwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE2LjA0LjAwI0xpdmUgZ2Vlc2UjMTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTYuMDUuMDAjTGl2ZSBwaGVhc2FudHMjMTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTcuMDAuMDAjTGl2ZSBmaXNoIzEwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjE3LjAxLjAwI0xpdmUgc2FsbW9uIzEwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE3LjAyLjAwI0xpdmUgdHJvdXQjMTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTcuMDMuMDAjTGl2ZSB0YWxhcGlhIzEwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE3LjA0LjAwI0xpdmUgY2FycCMxMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNy4wNS4wMCNMaXZlIGVlbHMjMTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTguMDAuMDAjU2hlbGxmaXNoIGFuZCBhcXVhdGljIGludmVydGVicmF0ZXMjMTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTguMDEuMDAjTGl2ZSBzaHJpbXAjMTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTguMDIuMDAjTGl2ZSBjbGFtcyMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wMy4wMCNMaXZlIG11c3NlbHMjMTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTguMDQuMDAjTGl2ZSBveXN0ZXJzIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjA1LjAwI0xpdmUgY3JhYnMjMTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTguMDYuMDAjTGl2ZSBhYmFsb25lIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjA3LjAwI0xpdmUgb2N0b3BpIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjA4LjAwI0xpdmUgc3F1aWQjMTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTkuMDAuMDAjSW5zZWN0cyMxMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOS4wMS4wMCNCdXR0ZXJmbGllcyMxMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOS4wMi4wMCNCZWV0bGVzIzEwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE5LjAzLjAwI0JlZXMjMTAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTkuMDQuMDAjU2lsa3dvcm1zIzEwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEwLjEwLjIwLjAwLjAwI1dpbGQgYW5pbWFscyMxMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4yMC4wMS4wMCNFbGVwaGFudHMjMTAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMjAuMDIuMDAjTGl2ZSBmb3hlcyMxMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMC4xMS4wMC4wMC4wMCNEb21lc3RpYyBwZXQgcHJvZHVjdHMjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTEuMDAuMDAjUGV0IGZvb2QgYm93bHMgb3IgZXF1aXBtZW50IzEwLjExLjAwLjAwLjAwCi11bnNwc2M3IzEwLjExLjEyLjAwLjAwI01lZGljYXRlZCBwZXQgdHJlYXRtZW50cyMxMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMS4xMy4wMC4wMCNEb21lc3RpYyBwZXQgdHJlYXRtZW50cyBhbmQgYWNjZXNzb3JpZXMgYW5kIGVxdWlwbWVudCMxMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMS4xMy4wMS4wMCNQZXQgdG95cyMxMC4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMC4xMS4xMy4wMi4wMCNQZXQgZ3Jvb21pbmcgcHJvZHVjdHMjMTAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTMuMDMuMDAjUGV0IGxpdHRlciBvciBlcXVpcG1lbnQgZm9yIHBldCB3YXN0ZSBtYW5hZ2VtZW50IzEwLjExLjEzLjAwLjAwCi11bnNwc2M3IzEwLjExLjEzLjA0LjAwI1BldCBmb29kIGJvd2xzIG9yIGVxdWlwbWVudCMxMC4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMC4xMS4xMy4wNS4wMCNNZWRpY2F0ZWQgcGV0IHRyZWF0bWVudHMjMTAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMDAuMDAuMDAjQW5pbWFsIGZlZWQjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTUuMDAuMDAjTGl2ZXN0b2NrIGZlZWQjMTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTUuMDEuMDAjUHVyZSB3aGVhdCBicmFuIzEwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE1LjAyLjAwI0ZlZWQgb2F0cyMxMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNS4wMy4wMCNGZWVkIGNvcm4jMTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTUuMDQuMDAjRmVlZCBzb3JnaHVtIzEwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE1LjA1LjAwI0hheSMxMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNS4wNi4wMCNPaWwgY2FrZSMxMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNi4wMC4wMCNCaXJkIGFuZCBmb3dsIGZvb2QjMTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTYuMDEuMDAjTGl2ZSBmb29kIGZvciBiaXJkcyMxMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNi4wMi4wMCNCaXJkIHNlZWQjMTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTYuMDMuMDAjQmlyZCB0cmVhdHMgb3Igc25hY2tzIzEwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE2LjA0LjAwI1BvdWx0cnkgZm9vZCMxMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNy4wMC4wMCNGaXNoIGZvb2QjMTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTcuMDEuMDAjRnJlc2ggb3IgZnJvemVuIGJyaW5lIzEwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE3LjAyLjAwI0Zpc2ggZm9vZCBwZWxsZXRzIzEwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE3LjAzLjAwI0Zpc2ggZm9vZCBmbGFrZXMjMTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDAuMDAjRG9nIGFuZCBjYXQgZm9vZCMxMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOC4wMS4wMCNEcnkgZm9vZCBmb3IgZG9ncyMxMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOC4wMi4wMCNNb2lzdCBmb29kIGZvciBkb2dzIzEwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE4LjAzLjAwI01pbGsgZm9yIGRvZ3Mgb3IgY2F0cyMxMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOC4wNC4wMCNEcnkgZm9vZCBmb3IgY2F0cyMxMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOC4wNS4wMCNNb2lzdCBmb29kIGZvciBjYXRzIzEwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE4LjA2LjAwI1RyZWF0cyBvciBzbmFja3MgZm9yIGNhdHMgb3IgZG9ncyMxMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOS4wMC4wMCNSb2RlbnQgZm9vZCMxMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOS4wMS4wMCNQZWxsZXRpemVkIGZvb2QgZm9yIHJvZGVudHMjMTAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMjAuMDAuMDAjUmVwdGlsZSBmb29kIzEwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjIwLjAxLjAwI1BlbGxldGl6ZWQgZm9vZCBmb3IgcmVwdGlsZXMjMTAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMjAuMDIuMDAjTW9pc3QgZm9vZCBmb3IgcmVwdGlsZXMjMTAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMjAuMDMuMDAjTGl2ZSBmb29kIGZvciByZXB0aWxlcyMxMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMxMC4xMy4wMC4wMC4wMCNBbmltYWwgY29udGFpbm1lbnQgYW5kIGhhYml0YXRzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEzLjE1LjAwLjAwI0FuaW1hbCBzaGVsdGVycyMxMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNS4wNi4wMCNMaXZlc3RvY2sgc3RhYmxlcyMxMC4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNS4wNy4wMCNEb21lc3RpY2l6ZWQgcGV0IGhvdXNlcyMxMC4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNS4wOC4wMCNQZXQgYmVkcyMxMC4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNi4wMC4wMCNBbmltYWwgY29udGFpbm1lbnQjMTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTYuMDEuMDAjQ2FnZXMjMTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTYuMDIuMDAjS2VubmVscyMxMC4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNi4wMy4wMCNBbmltYWwgY2FycnlpbmcgY2FzZXMjMTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTYuMDQuMDAjRG9nIHJ1bnMjMTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTcuMDAuMDAjQW5pbWFsIGhhYml0YXRzIzEwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEzLjE3LjAxLjAwI1RlcnJhcml1bXMjMTAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTcuMDIuMDAjQXF1YXJpdW1zIzEwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEwLjE0LjAwLjAwLjAwI1NhZGRsZXJ5IGFuZCBoYXJuZXNzIGdvb2RzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjE0LjE1LjAwLjAwI1NhZGRsZXJ5IzEwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE0LjE1LjAxLjAwI1NhZGRsZXMjMTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTUuMDIuMDAjV2hpcHMjMTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDAuMDAjSGFybmVzcyBnb29kcyMxMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wMS4wMCNCcmlkbGVzIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjAyLjAwI1lva2VzIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjAzLjAwI0hvcnNlIGJpdHMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDQuMDAjUmVpbnMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDUuMDAjU3RpcnJ1cHMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDYuMDAjTGVhc2hlcyBvciBsZWFkcyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wNy4wMCNDb2xsYXJzIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjA4LjAwI0hhcm5lc3NlcyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wOS4wMCNSZXN0cmFpbnRzIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjAwLjAwLjAwI1NlZWRzIGFuZCBidWxicyBhbmQgc2VlZGxpbmdzIGFuZCBjdXR0aW5ncyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wMC4wMCNWZWdldGFibGUgc2VlZHMgYW5kIHNlZWRsaW5ncyMxMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wMS4wMCNCZWFuIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wMi4wMCNDYXJyb3Qgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjAzLjAwI0NlbGVyeSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDQuMDAjQ2hpbGkgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjA1LjAwI0NvdXJnZXR0ZSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDYuMDAjQ293IHBlYSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDcuMDAjQ3VjdW1iZXIgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjA4LjAwI0VnZ3BsYW50IHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wOS4wMCNFbmRpdmUgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjEwLjAwI0dhcmxpYyBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTEuMDAjTGVlayBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTIuMDAjTGV0dHVjZSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTMuMDAjQ29ybiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTQuMDAjTWVsb24gc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjE1LjAwI09uaW9uIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xNi4wMCNTb3lhIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xNy4wMCNTcGluYWNoIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xOC4wMCNUb21hdG8gc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjE5LjAwI1R1cm5pcCBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMjAuMDAjQ2hhcmQgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjIxLjAwI1N3ZWV0IHBlcHBlciBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMjIuMDAjQmVldCBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMjMuMDAjQ2F1bGlmbG93ZXIgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjI0LjAwI1BhcnNlbHkgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjAwLjAwI0NlcmVhbCBzZWVkcyMxMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wMS4wMCNXaGVhdCBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wMi4wMCNDb2x6YSBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wMy4wMCNCYXJsZXkgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDQuMDAjTWlsbGV0IHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjA1LjAwI09hdCBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wNi4wMCNTZXNhbWUgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDcuMDAjTGluc2VlZCBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wOC4wMCNDYXN0b3Igb2lsIHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjA5LjAwI01haXplIHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjEwLjAwI1J5ZSBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4xMS4wMCNTb3JnaHVtIHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE3LjAwLjAwI0dyYXNzIGFuZCBmb3JhZ2Ugc2VlZHMgYW5kIHNlZWRsaW5ncyMxMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNy4wMS4wMCNSaWNlIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNy4wMi4wMCNDbG92ZXIgc2VlZHMgb3Igc2VlZGxpbmcjMTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTcuMDMuMDAjQWxmYWxmYSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTcuMDQuMDAjR3Jhc3Mgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjAwLjAwI1NwaWNlIGNyb3Agc2VlZHMgYW5kIHNlZWRsaW5ncyMxMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wMS4wMCNQZXBwZXIgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjAyLjAwI1ZhbmlsbGEgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjAzLjAwI0Npbm5hbW9uIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wNC4wMCNDbG92ZSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDUuMDAjQ29yaWFuZGVyIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wNi4wMCNHaW5nZXIgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjA3LjAwI1NhZmZyb24gc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjA4LjAwI1RoeW1lIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wOS4wMCNDdXJyeSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMTAuMDAjTXVzdGFyZCBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMTEuMDAjR2luc2VuZyByb290cyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTkuMDAuMDAjRmxvd2VyIHNlZWRzIGFuZCBidWxicyBhbmQgc2VlZGxpbmdzIGFuZCBjdXR0aW5ncyMxMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOS4wMS4wMCNUdWxpcCBzZWVkcyBvciBidWxicyBvciBzZWVkbGluZ3Mgb3IgY3V0dGluZ3MjMTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTkuMDIuMDAjUm9zZSBzZWVkcyBvciBzZWVkbGluZ3Mgb3IgY3V0dGluZ3MjMTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTkuMDMuMDAjRGFmZm9kaWwgc2VlZHMgb3IgYnVsYnMgb3Igc2VlZGxpbmdzIG9yIGN1dHRpbmdzIzEwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjA0LjAwI1N1bmZsb3dlciBzZWVkcyMxMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOS4wNS4wMCNIeWFjaW50aCBidWxicyBvciBzaG9vdHMjMTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTkuMDYuMDAjTGlseSBCdWxicyMxMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMC4wMC4wMCNUcmVlIGFuZCBzaHJ1YiBzZWVkcyBhbmQgY3V0dGluZ3MjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjAuMDEuMDAjRnJ1aXQgdHJlZSBzZWVkcyBvciBjdXR0aW5ncyMxMC4xNS4yMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMC4wMi4wMCNDb25pZmVyIHRyZWUgc2VlZHMgb3IgY3V0dGluZ3MjMTAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjAuMDMuMDAjTnV0IHRyZWUgc2VlZHMgb3IgY3V0dGluZ3MjMTAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjEuMDAuMDAjUmVzaWR1ZXMgb3RoZXIgdGhhbiBhbmltYWwgZmVlZCMxMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMS4wMS4wMCNSZXNpZHVlcyBiYWJvb2wgc2VlZCBleHRyYWN0aW9uIzEwLjE1LjIxLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIxLjAyLjAwI1Jlc2lkdWVzIG9mIHJhcGUgc2VlZHMjMTAuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjEuMDMuMDAjUmVzaWR1ZSBvZiBsaW5zZWVkIzEwLjE1LjIxLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIxLjA0LjAwI09pbCBjYWtlIG9mIG5lZW0jMTAuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjIuMDAuMDAjRmlicm91cyBjcm9wIHNlZWRzIGFuZCBzZWVkbGluZ3MjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjIuMDEuMDAjQ290dG9uIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4yMi4wMC4wMAotdW5zcHNjNyMxMC4xNi4wMC4wMC4wMCNGbG9yaWN1bHR1cmUgYW5kIHNpbHZpY3VsdHVyZSBwcm9kdWN0cyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wMC4wMCNUcmVlcyBhbmQgc2hydWJzIzEwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjAxLjAwI09saXZlIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjAyLjAwI0NvZmZlZSBzaHJ1YnMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDMuMDAjQ29jb2EgdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDQuMDAjQXBwbGUgdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDUuMDAjUGVhY2ggdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDYuMDAjT3JhbmdlIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjA3LjAwI1Job2RlbmRyb24gc2hydWJzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjA4LjAwI1RlYSBzaHJ1YnMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDkuMDAjQ29uaWZlciB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4xMC4wMCNTcHJ1Y2UgdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMTEuMDAjUGluZSB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4xMi4wMCNGaXIgdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTYuMDAuMDAjRmxvcmFsIHBsYW50cyMxMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNi4wMS4wMCNSb3NlIHBsYW50cyMxMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNi4wMi4wMCNQb2luc2V0dGlhcyBwbGFudHMjMTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTYuMDMuMDAjT3JjaGlkcyBwbGFudHMjMTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTYuMDQuMDAjQXphbGVhcyBwbGFudHMjMTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTYuMDUuMDAjQ2FjdHVzIHBsYW50cyMxMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNy4wMC4wMCNDdXQgZmxvd2VycyMxMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNy4wMS4wMCNDdXQgZ2xhZGlvbHVzIzEwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE3LjAyLjAwI0N1dCBsaWxpZXMjMTAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTcuMDMuMDAjQ3V0IGNhcm5hdGlvbnMjMTAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTcuMDQuMDAjQ3V0IHR1bGlwcyMxMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNy4wNS4wMCNDdXQgcm9zZXMjMTAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTguMDAuMDAjTm9uIGZsb3dlcmluZyBwbGFudHMjMTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTguMDEuMDAjRmVybnMjMTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTguMDIuMDAjSXZpZXMjMTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTguMDMuMDAjUGhpbG9kZW5kcm9ucyMxMC4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wMC4wMCNEcmllZCBmbG9yYWwgcHJvZHVjdHMjMTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDEuMDAjRHJpZWQgcG9kcyMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wMi4wMCNEcmllZCBsZWFmeSBncmVlbmVyeSMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wMy4wMCNEcmllZCBmZXJuIGdyZWVuZXJ5IzEwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjA0LjAwI0RyaWVkIGZ1bGwgZmxvd2VycyMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wNS4wMCNEcmllZCB0d2lncyBvciBzdGlja3MjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDYuMDAjRHJpZWQgZ3Jhc3MgcGx1bWVzIzEwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjA3LjAwI0RyaWVkIHByZXNzZWQgZmxvd2VycyMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wOC4wMCNEcmllZCBmbG93ZXIgcGV0YWxzIzEwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE3LjAwLjAwLjAwI0ZlcnRpbGl6ZXJzIGFuZCBwbGFudCBudXRyaWVudHMgYW5kIGhlcmJpY2lkZXMjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTUuMDAuMDAjT3JnYW5pYyBmZXJ0aWxpemVycyBhbmQgcGxhbnQgbnV0cmllbnRzIzEwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE3LjE1LjAxLjAwI01hbnVyZSBvciBndWFubyMxMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNS4wMi4wMCNQbGFudCBob3Jtb25lcyMxMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNS4wMy4wMCNGaXNoIG1lYWwjMTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTYuMDAuMDAjQ2hlbWljYWwgZmVydGlsaXplcnMgYW5kIHBsYW50IG51dHJpZW50cyMxMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNi4wMS4wMCNOaXRyb2dlbm91cyBmZXJ0aWxpemVyIzEwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE2LjAyLjAwI1BvdGFzc2ljIGZlcnRpbGl6ZXIjMTAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTYuMDMuMDAjUGhvc3BoYXRpYyBmZXJ0aWxpemVyIzEwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE2LjA0LjAwI1N1bHBodXJpYyBmZXJ0aWxpemVyIzEwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE2LjA1LjAwI05pdHJvZ2VuIFBob3NwaG9yb3VzIFBvdGFzc2l1bSBNaXh0dXJlcyAoTlBLKSMxMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNy4wMC4wMCNIZXJiaWNpZGVzIzEwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE3LjE3LjAxLjAwI1dlZWQga2lsbGVyIzEwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE3LjAyLjAwI0Z1bmdpY2lkZXMjMTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMDAuMDAuMDAjUGVzdCBjb250cm9sIHByb2R1Y3RzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjE5LjE1LjAwLjAwI0luc2VjdGljaWRlcyBhbmQgaW5zZWN0IGNvbnRyb2wgdHJhcHMjMTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTUuMDEuMDAjU3ByYXkgaW5zZWN0aWNpZGVzIzEwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE1LjAyLjAwI0JhaXQgaW5zZWN0aWNpZGVzIzEwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE1LjAzLjAwI1NpbGljaWMgYWNpZCMxMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNS4wNC4wMCNGbHlpbmcgaW5zZWN0IGNvbnRyb2wgdHJhcHMjMTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTYuMDAuMDAjUm9kZW50aWNpZGVzIzEwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE5LjE2LjAxLjAwI0V4dHJ1ZGVkIGJhaXRzIzEwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE2LjAyLjAwI01lYWwgb3IgcGVsbGV0IG9yIHNlZWQgYmFpdHMjMTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTYuMDMuMDAjTGlxdWlkIGJhaXRzIzEwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE2LjA0LjAwI1RyYWNraW5nIHBvd2RlcnMjMTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTcuMDAuMDAjQW5pbWFsIGNvbnRyb2wgdHJhcHMjMTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTcuMDEuMDAjTW91c2Ugb3IgcmF0IHRyYXBzIzEwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE3LjAyLjAwI1dpcmUgY2FnZSB0cmFwcyMxMC4xOS4xNy4wMC4wMAotdW5zcHNjNyMxMS4wMC4wMC4wMC4wMCNNaW5lcmFsIGFuZCBUZXh0aWxlIGFuZCBJbmVkaWJsZSBQbGFudCBhbmQgQW5pbWFsIE1hdGVyaWFscyMxMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMC4wMC4wMC4wMCNNaW5lcmFscyBhbmQgb3JlcyBhbmQgbWV0YWxzIzExLjAwLjAwLjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjAwLjAwI01pbmVyYWxzIzExLjEwLjAwLjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjAxLjAwI01pY2EjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDIuMDAjRW1lcnkjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDMuMDAjUXVhcnR6IzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjA0LjAwI1B5cml0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wNS4wMCNTdWxwaHVyIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjA2LjAwI0NoYWxrIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjA3LjAwI0dyYXBoaXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjA4LjAwI0RvbG9taXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjA5LjAwI01hZ25lc2l0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xMC4wMCNBc2Jlc3RvcyMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xMS4wMCNDYWxjaXVtIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjEyLjAwI0JvcmF0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xMy4wMCNDcnlvbGl0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xNC4wMCNGZWxkc3BhciMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xNS4wMCNMZXVjaXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjE2LjAwI05lcGhlbGl0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xNy4wMCNTdGVhdGl0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xOC4wMCNUYWxjIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjE5LjAwI0RpYW1vbmRzIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjIwLjAwI0dhcm5ldHMjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMjEuMDAjU2lsaWNvbiBjYXJiaWRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjIyLjAwI0FjdGl2YXRlZCBjYXJib24jMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMjMuMDAjTXVsaXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjI0LjAwI0Zsb3Vyb3NwYXIjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMjUuMDAjS2Vpc2VyaXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjI2LjAwI0Nhcm5hbGxpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDAuMDAjT3JlcyMxMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wMS4wMCNJcm9uIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wMi4wMCNUaXRhbml1bSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDMuMDAjVXJhbml1bSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDQuMDAjQ29wcGVyIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wNS4wMCNBbHVtaW51bSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDYuMDAjTmlja2VsIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wNy4wMCNTaWx2ZXIgb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjA4LjAwI0xlYWQgb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjA5LjAwI1ppbmMgb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjEwLjAwI1RpbiBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTEuMDAjTWFuZ2FuZXNlIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xMi4wMCNDaHJvbWl1bSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTMuMDAjVHVuZ3N0ZW4gb3Igd29sZnJhbSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTQuMDAjTW9seWJkZW51bSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTUuMDAjQ29iYWx0IG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xNi4wMCNHb2xkIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xNy4wMCNUYW50YWx1bSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTguMDAjUGxhdGludW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjE5LjAwI1Zlcm1pY3VsaXRlIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4yMC4wMCNUaG9yaXVtIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4yMS4wMCNLeWFuaXRlIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4yMi4wMCNBbnRpbW9ueSBvcmVzIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjIzLjAwI1ppcmNvbml1bSBvcmVzIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjAwLjAwI0Jhc2UgbWV0YWxzIzExLjEwLjAwLjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjAxLjAwI1NsYWcgb3IgYXNoIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjAyLjAwI05hdHVyYWwgZ3JhcGhpdGUjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDMuMDAjVGl0YW5pdW0jMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDQuMDAjU3RlZWwjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDUuMDAjQWx1bWludW0jMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDYuMDAjTmlja2VsIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjA3LjAwI01hZ25lc2l1bSMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wOC4wMCNCaXNtdXRoIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjA5LjAwI0FudGltb255IzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjEwLjAwI0NhZG1pdW0jMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMTEuMDAjTm9uIGZlcnJvdXMgYWxsb3kjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMTIuMDAjRmVycm91cyBhbGxveSMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4xMy4wMCNJcm9uIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjE0LjAwI0xlYWQjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMTUuMDAjQ29wcGVyIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE4LjAwLjAwI1ByZWNpb3VzIG1ldGFscyMxMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xOC4wMS4wMCNHb2xkIzExLjEwLjE4LjAwLjAwCi11bnNwc2M3IzExLjEwLjE4LjAyLjAwI1NpbHZlciMxMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xOC4wMy4wMCNQbGF0aW51bSMxMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4wMC4wMC4wMCNFYXJ0aCBhbmQgc3RvbmUjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTUuMDAuMDAjRGlydCBhbmQgc29pbCMxMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNS4wMS4wMCNTb2lsIzExLjExLjE1LjAwLjAwCi11bnNwc2M3IzExLjExLjE1LjAyLjAwI0ZpbGwgZGlydCMxMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNS4wMy4wMCNUb3Bzb2lsIzExLjExLjE1LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjAwLjAwI1N0b25lIzExLjExLjAwLjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjAxLjAwI0d5cHN1bSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wMi4wMCNUcmF2ZXJ0aW5lIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjAzLjAwI0VjYXVzc2luZSBvciBhbGFiYXN0ZXIjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDQuMDAjR3Jhbml0ZSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wNS4wMCNNYXJibGUjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDYuMDAjU2xhdGUjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDcuMDAjU2FuZHN0b25lIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjA4LjAwI0xpbWVzdG9uZSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wOS4wMCNCYXNhbHQjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMTAuMDAjUHVtaWNlIHN0b25lIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE3LjAwLjAwI1NhbmQjMTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTcuMDEuMDAjU2lsaWNhIHNhbmQjMTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDAuMDAjQ2xheXMjMTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDEuMDAjVGVycmEgY290dGEjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDIuMDAjRmlyZWNsYXkjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDMuMDAjS2FvbGluIG9yIG90aGVyIGthb2xpbmljIGNsYXlzIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjA0LjAwI0JlbnRvbml0ZSMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wNS4wMCNBbmRhbHVzaXRlIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjA2LjAwI011bGxpdGUjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDcuMDAjQ2hhbW90dGUjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDguMDAjQ29tbW9uIGNsYXkjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDkuMDAjQmFsbCBjbGF5IzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjEwLjAwI0Z1bGxlcnMgZWFydGgjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMDAuMDAuMDAjTm9uIGVkaWJsZSBwbGFudCBhbmQgZm9yZXN0cnkgcHJvZHVjdHMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTUuMDAuMDAjU2FwIzExLjEyLjAwLjAwLjAwCi11bnNwc2M3IzExLjEyLjE1LjAyLjAwI1Jvc2luIzExLjEyLjE1LjAwLjAwCi11bnNwc2M3IzExLjEyLjE1LjAzLjAwI0xhYyMxMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wMC4wMCNXb29kIzExLjEyLjAwLjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjAzLjAwI0xvZ3MjMTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMDQuMDAjU29mdCB0aW1iZXIjMTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMDUuMDAjUmF0dGFuIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjA2LjAwI0NvcmsjMTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMDcuMDAjV29vZCBwdWxwIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjA4LjAwI0JhbWJvbyMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wOS4wMCNQbHl3b29kIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjEwLjAwI0hhcmR3b29kcyMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wMC4wMCNGb3Jlc3RyeSBieSBwcm9kdWN0cyMxMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wMS4wMCNTYXcgZHVzdCMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wMi4wMCNXb29kIGNoaXBzIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjAzLjAwI1BlYXQgbW9zcyMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wNC4wMCNXb29kIHNoYXZpbmdzIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjA1LjAwI0JhcmsjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDYuMDAjTXVsY2gjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDcuMDAjV29vZCB3b29sIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjA4LjAwI1dvb2QgZmxvdXIjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDkuMDAjQmFsc2FtcyMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wMC4wMCNQbGFudCBmaWJlcnMjMTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDEuMDAjSGVtcCMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wMi4wMCNDb3R0b24jMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDMuMDAjRmxheCMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wNC4wMCNKdXRlIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjA1LjAwI1Npc2FsIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjA2LjAwI0NvY29udXQgZmlicmVzIG9yIGNvaXIjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDcuMDAjQWJhY2EgZmliZXJzIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjA4LjAwI1JhbWllIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjA5LjAwI1N0cmF3IzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjEwLjAwI0Jyb29tIGNvcm4gb3IgaXN0bGUgb3IgcGlhc3NhdmEjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTkuMDAuMDAjUGVyZnVtZXJ5IHByb2R1Y3RzIzExLjEyLjAwLjAwLjAwCi11bnNwc2M3IzExLjEyLjE5LjAxLjAwI0xpY29yaWNlIHJvb3RzIzExLjEyLjE5LjAwLjAwCi11bnNwc2M3IzExLjEzLjAwLjAwLjAwI05vbiBlZGlibGUgYW5pbWFsIHByb2R1Y3RzIzExLjAwLjAwLjAwLjAwCi11bnNwc2M3IzExLjEzLjE1LjAwLjAwI0FuaW1hbCBoaWRlcyBhbmQgc2tpbnMgYW5kIGFuaW1hbCB0ZXh0aWxlIG1hdGVyaWFscyMxMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wMS4wMCNGZWF0aGVycyMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wMi4wMCNGdXJzIzExLjEzLjE1LjAwLjAwCi11bnNwc2M3IzExLjEzLjE1LjAzLjAwI0FuaW1hbCBoYWlyIzExLjEzLjE1LjAwLjAwCi11bnNwc2M3IzExLjEzLjE1LjA0LjAwI0hpZGVzIzExLjEzLjE1LjAwLjAwCi11bnNwc2M3IzExLjEzLjE1LjA1LjAwI1VucHJvY2Vzc2VkIG1vaGFpciMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wNi4wMCNVbnByb2Nlc3NlZCB3b29sIzExLjEzLjE1LjAwLjAwCi11bnNwc2M3IzExLjEzLjE1LjA3LjAwI1N1ZWRlIzExLjEzLjE1LjAwLjAwCi11bnNwc2M3IzExLjEzLjE1LjA4LjAwI0Z1bGwgZ3JhaW4gbGVhdGhlciMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNi4wMC4wMCNPdGhlciBhbmltYWwgcHJvZHVjdHMjMTEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDEuMDAjSXZvcnkjMTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDIuMDAjU2VtZW4jMTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDMuMDAjRXhjcmV0aW9ucyMxMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNi4wNC4wMCNGaXNoIGVnZ3MjMTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDUuMDAjQm9uZXMjMTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDYuMDAjQW5pbWFsIGhvcm5zIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjA3LjAwI0VtYnJ5b3MjMTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDguMDAjU2hlbGwgYXJ0aWNsZXMjMTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMDAuMDAuMDAjU2NyYXAgYW5kIHdhc3RlIG1hdGVyaWFscyMxMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNS4wMC4wMCNNZXRhbCB3YXN0ZSBhbmQgc2NyYXAjMTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTUuMDEuMDAjRmVycm91cyBtZXRhbCB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNS4wMi4wMCNOb24gZmVycm91cyBtZXRhbCB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNS4wMy4wMCNBdXRvbW90aXZlIHdyZWNraW5nIGZvciB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wMC4wMCNOb24gbWV0YWxsaWMgd2FzdGUgYW5kIHNjcmFwIzExLjE0LjAwLjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjAxLjAwI1RleHRpbGUgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDIuMDAjUGxhc3RpYyB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wMy4wMCNPaWwgd2FzdGVzIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjA0LjAwI1BhcGVyIHdhc3RlcyMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wNS4wMCNHbGFzcyB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wNi4wMCNXb29kIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjA3LjAwI1J1YmJlciB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wOC4wMCNIYXphcmRvdXMgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDkuMDAjQ29tcG9zaXRpb24gbGVhdGhlciMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4xMC4wMCNMZWF0aGVyIHdhc3RlIGFuZCBzY3JhcCMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNy4wMC4wMCNGb29kIGFuZCB0b2JhY2NvIHdhc3RlIGFuZCBzY3JhcCMxMS4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNy4wMS4wMCNGb29kIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE3LjAwLjAwCi11bnNwc2M3IzExLjE0LjE3LjAyLjAwI1RvYmFjY28gd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMDAuMDAuMDAjRmliZXJzIGFuZCB0aHJlYWRzIGFuZCB5YXJucyMxMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wMC4wMCNGaWJlcnMjMTEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDEuMDAjQWNldGF0ZSBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDIuMDAjTnlsb24gZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjAzLjAwI1BvbHllc3RlciBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDQuMDAjQWNyeWxpYyBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDUuMDAjVmlzY29zZSBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDYuMDAjUmF5b24gZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA3LjAwI0NvdHRvbiBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDguMDAjV29vbCBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDkuMDAjU2lsayBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMTAuMDAjVmVnZXRhYmxlIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4xMS4wMCNQb2x5cHJvcHlsZW5lIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4xMi4wMCNHbGFzcyBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMTMuMDAjQ2VyYW1pYyBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMTQuMDAjUG9seW1lciBhcmFtaWQgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjE1LjAwI0FzYmVzdG9zIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wMC4wMCNUaHJlYWRzIzExLjE1LjAwLjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjAxLjAwI0NvdHRvbiB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDIuMDAjU2lsayB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDMuMDAjUG9seWVzdGVyIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wNC4wMCNQb2x5YW1pZGUgdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjA1LjAwI0Jpc21hbGVtaWRlIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wNi4wMCNGaWJlcmdsYXNzIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wNy4wMCNHcmFwaGl0ZSB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDguMDAjTnlsb24gdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjA5LjAwI1Jlc2luIGltcHJlZ25hdGVkIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4xMC4wMCNSdWJiZXIgb3IgbGF0ZXggdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjExLjAwI1NwYW5kZXggdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjAwLjAwI1lhcm5zIzExLjE1LjAwLjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjAxLjAwI1dvb2wgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wMi4wMCNDb3R0b24geWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wMy4wMCNQb2x5ZXN0ZXIgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wNC4wMCNBY3J5bGljIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDUuMDAjU2lsayB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjA2LjAwI1JhbWllIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDcuMDAjRmxheCB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjA4LjAwI0FuaW1hbCBoYWlyIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDkuMDAjU3ludGhldGljIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMTAuMDAjSnV0ZSB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjExLjAwI0NvaXIgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4xMi4wMCNQYXBlciB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjEzLjAwI0hlbXAgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNi4wMC4wMC4wMCNGYWJyaWNzIGFuZCBsZWF0aGVyIG1hdGVyaWFscyMxMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNS4wMC4wMCNTaWxrIGZhYnJpY3MjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTUuMDEuMDAjUGxhaW4gd2VhdmUgc2lsayBmYWJyaWNzIzExLjE2LjE1LjAwLjAwCi11bnNwc2M3IzExLjE2LjE1LjAyLjAwI0phY3F1YXJkIHdlYXZlIHNpbGsgZmFicmljcyMxMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNS4wMy4wMCNLbml0IHNpbGsgZmFicmljcyMxMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNS4wNC4wMCNTaWxrIHZlbHZldHMgZmFicmljcyMxMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNi4wMC4wMCNXb29sIGZhYnJpY3MjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTYuMDEuMDAjUGxhaW4gd2VhdmUgd29vbCBmYWJyaWNzIzExLjE2LjE2LjAwLjAwCi11bnNwc2M3IzExLjE2LjE2LjAyLjAwI0phY3F1YXJkIHdlYXZlIHdvb2wgZmFicmljcyMxMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNi4wMy4wMCNLbml0IHdvb2wgZmFicmljcyMxMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNy4wMC4wMCNDb3R0b24gZmFicmljcyMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNy4wMS4wMCNQbGFpbiB3ZWF2ZSBjb3R0b24gZmFicmljcyMxMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNy4wMi4wMCNUd2lsbCB3ZWF2ZSBjb3R0b24gZmFicmljcyMxMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNy4wMy4wMCNDb3R0b24gb3hmb3JkIGNsb3RocyMxMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNy4wNC4wMCNLbml0IGNvdHRvbiBmYWJyaWNzIzExLjE2LjE3LjAwLjAwCi11bnNwc2M3IzExLjE2LjE3LjA1LjAwI0NvdHRvbiB2ZWx2ZXQgZmFicmljcyMxMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOC4wMC4wMCNTeW50aGV0aWMgZmFicmljcyMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOC4wMS4wMCNQbGFpbiB3ZWF2ZSBzeW50aGV0aWMgZmFicmljcyMxMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOC4wMi4wMCNKYWNxdWFyZCB3ZWF2ZSBzeW50aGV0aWMgZmFicmljcyMxMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOC4wMy4wMCNEb2JieSB3ZWF2ZSBzeW50aGV0aWMgZmFicmljcyMxMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOC4wNC4wMCNLbml0IHN5bnRoZXRpYyBmYWJyaWNzIzExLjE2LjE4LjAwLjAwCi11bnNwc2M3IzExLjE2LjE4LjA1LjAwI1N5bnRoZXRpYyB2ZWx2ZXQgZmFicmljcyMxMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOS4wMC4wMCNBcnRpZmljaWFsIGZhYnJpY3MjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTkuMDEuMDAjUGxhaW4gd2VhdmUgYXJ0aWZpY2lhbCBmYWJyaWNzIzExLjE2LjE5LjAwLjAwCi11bnNwc2M3IzExLjE2LjE5LjAyLjAwI0phY3F1YXJkIHdlYXZlIGFydGlmaWNpYWwgZmFicmljcyMxMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOS4wMy4wMCNEb2JieSB3ZWF2ZSBhcnRpZmljaWFsIGZhYnJpY3MjMTEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTkuMDQuMDAjS25pdCBhcnRpZmljaWFsIGZhYnJpY3MjMTEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTkuMDUuMDAjQXJ0aWZpY2FsIHZlbHZldCBmYWJyaWNzIzExLjE2LjE5LjAwLjAwCi11bnNwc2M3IzExLjE2LjIwLjAwLjAwI0ZhYnJpY3Mgb2YgdmVnZXRhYmxlIG1hdGVyaWFsIG90aGVyIHRoYW4gY290dG9uIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjIwLjAxLjAwI1BsYWluIHdlYXZlIG5vbiBjb3R0b24gdmVnZXRhYmxlIGZpYmVyIGZhYnJpY3MjMTEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjAuMDIuMDAjS25pdCBub24gY290dG9uIHZlZ2V0YWJsZSBmaWJlciBmYWJyaWNzIzExLjE2LjIwLjAwLjAwCi11bnNwc2M3IzExLjE2LjIwLjAzLjAwI0hlc3NpYW4gb3IgaGVtcCBvciBqdXRlIGNsb3RoIzExLjE2LjIwLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjAwLjAwI1NwZWNpYWx0eSBmYWJyaWNzIG9yIGNsb3RoIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjAxLjAwI0NoZWVzZSBjbG90aCBvciBmYWJyaWMjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMDIuMDAjQmlzbWFsZW1pZGUgZmFicmljIG9yIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjAzLjAwI0ZpYmVyZ2xhc3MgZmFicmljIG9yIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjA0LjAwI0dyYXBoaXRlIGZhYnJpYyBvciBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wNS4wMCNHbGFzcyBmYWJyaWMgb3IgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMDcuMDAjUmVzaW4gaW1wcmVnbmF0ZWQgZmFicmljIG9yIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjA4LjAwI1dpcmUgbWVzaCBmYWJyaWMgb3IgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMDkuMDAjTGFjZSMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xMC4wMCNOZXR0aW5nIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjExLjAwI01lc2gjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTIuMDAjQ29hdGVkIGZhYnJpY3MjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTMuMDAjVXBob2xzdGVyeSBmYWJyaWNzIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjE0LjAwI0hvb2sgYW5kIGxvb3AgZmFicmljcyBvciB0YXBlcyMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xNS4wMCNFbGFzdGljIGJyYWlkIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjE2LjAwI0J1cmxhcCBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xNy4wMCNSdWJiZXIgZmFicmljcyMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xOC4wMCNQYXBlciB5YXJuIGZhYnJpYyMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xOS4wMCNUcmFjaW5nIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjIwLjAwI0JvbHRpbmcgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMjEuMDAjT3JuYW1lbnRhbCB0cmltbWluZ3MjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjIuMDAuMDAjTm9ud292ZW4gZmFicmljcyMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMi4wMS4wMCNTcHVuYm9uZGVkIG5vbndvdmVucyMxMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMi4wMi4wMCNTcHVubGFjZWQgbm9ud292ZW5zIzExLjE2LjIyLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjAwLjAwI0xlYXRoZXJzIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjAxLjAwI0NoYW1vaXMgbGVhdGhlciMxMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wMi4wMCNHb2F0IGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDMuMDAjU2hlZXAgbGVhdGhlciMxMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wNC4wMCNQYXRlbnQgbGVhdGhlciMxMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wNS4wMCNDb3cgbGVhdGhlciMxMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wNi4wMCNQaWcgbGVhdGhlciMxMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wNy4wMCNTeW50aGV0aWMgb3IgaW1pdGF0aW9uIGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDguMDAjQnVmZmFsbyBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjA5LjAwI1JlcHRpbGUgbGVhdGhlciMxMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMi4wMC4wMC4wMC4wMCNDaGVtaWNhbHMgaW5jbHVkaW5nIEJpbyBDaGVtaWNhbHMgYW5kIEdhcyBNYXRlcmlhbHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMDAuMDAuMDAjT3JnYW5pYyBjaGVtaWNhbHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDAuMDAjQWxjb2hvbCMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNS4wMS4wMCNTYXR1cmF0ZWQgbW9ub2h5ZHJpYyBhbGNvaG9sIzEyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE1LjAyLjAwI0lzb3Byb3B5bCBhbGNvaG9sIzEyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE1LjAzLjAwI1Vuc2F0dXJhdGVkIG1vbm9oeWRyaWMgYWxjb2hvbCMxMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNS4wNC4wMCNDeWNsaWMgYWxjb2hvbCBvciB0aGVpciBoYWxvZ2VuYXRlZCBvciBzdWxwaG9uYXRlZCBvciBuaXRyYXRlZCBkZXJpdmF0aXZlcyMxMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNS4wNS4wMCNQaGVub2wgYWxjb2hvbCMxMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNS4wNi4wMCNIYWxvZ2VuYXRlZCBvciBzdWxwaG9uYXRlZCBvciBuaXRyYXRlZCBvciBuaXRyb3NhdGVkIGRlcml2YXRpdmVzIG9mIHBoZW5vbHMjMTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDcuMDAjTWV0aHlsYXRlZCBzcGlyaXQjMTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDAuMDAjRXRoZXJzIGFuZCBhbGNvaG9sIHBlcm94aWRlcyBhbmQgZXRoZXIgcGVyb3hpZGVzIGFuZCBvdGhlciBvcmdhbmljIGNvbXBvdW5kcyMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wMS4wMCNBY3ljbGljIGV0aGVycyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wMi4wMCNDeWNsb25pYyBvciBjeWNsZW5pYyBvciBjeWNsb3RlcnBlbmljIGV0aGVycyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wMy4wMCNFdGhlciBvciBhcm9tYXRpYyBldGhlciMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wNC4wMCNFdGhlciBhbGNvaG9sIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjA1LjAwI0V0aGVyIHBoZW5vbHMgb3IgZXRoZXIgYWxjb2hvbCBwaGVub2xzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjA2LjAwI0FsY29ob2wgcGVyb3hpZGVzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjA3LjAwI094aXJhbmUgb3IgZXRoeWxlbmUgb3hpZGUjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDguMDAjRXBpY2hsb3JvaHlkcmluIG9yIDEgY2hsb3JvIDIgb3IgMyBlcG94eXByb3BhbmUjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDkuMDAjRXBveGlkZXMgb3IgZXBveHlhbGNvaG9scyBvciBlcG94eXBoZW5vbHMgb3IgZXBveHlldGhlcnMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTAuMDAjQWNldGFscyBvciBrZW1pYWNldGFscyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xMS4wMCNBY3ljbGljIGFsZGVoeWRlcyB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xMi4wMCNDeWNsaWMgYWxkZWh5ZGVzIHdpdGhvdXQgb3RoZXIgb3h5Z2VuIGZ1bmN0aW9uIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjEzLjAwI0FsY29ob2wgYWxkZWh5ZGUjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTQuMDAjUGFyYWZvcm1hbGRlaHlkZSMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xNS4wMCNBbGRlaHlkZXMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTYuMDAjQWN5Y2xpYyBrZXRvbmVzIHdpdGhvdXQgb3RoZXIgb3h5Z2VuIGZ1bmN0aW9uIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjE3LjAwI0N5Y2xvbmljIG9yIGN5Y2xlbmljIG9yIGN5Y2xvdGVycGVuaWMga2V0b25lcyB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xOC4wMCNLZXRvbmVzIG9yIGFyb21hdGljIHdpdGhvdXQgb3RoZXIgb3h5Z2VuIGZ1bmN0aW9uIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjE5LjAwI0tldG9uZSBhbGNvaG9sIG9yIGtldG9uZSBhbGRlaHlkZXMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMjAuMDAjS2V0b25lIHBoZW5vbHMgb3Iga2V0b25lcyB3aXRoIG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4yMS4wMCNRdWlub25lcyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4yMi4wMCNSZW5uZXQgdGFibGV0cyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4yMy4wMCNFbnp5bWVzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE3LjAwLjAwI01vbm9jYXJib3h5bGljIGZhdHR5IGFjaWRzIG9yIGluZHVzdHJpYWwgYWNpZCBvaWxzIGZyb20gcmVmaW5pbmcjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTcuMDEuMDAjT2xlaWMgYWNpZCMxMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNy4wMi4wMCNJbmR1c3RyaWFsIGZhdHR5IGFsY29ob2xzIzEyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE3LjAzLjAwI1N0ZWFyaWMgYWNpZCMxMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNy4wNC4wMCNUYWxsIG9pbCBmYXR0eSBhY2lkcyMxMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNy4wNS4wMCNBY2lkIG9pbHMgZnJvbSByZWZpbmluZyMxMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wMC4wMCNDYXJib3h5bGljIGFjaWRzIGFuZCB0aGVpciBhbmh5ZHJpZGVzIGFuZCBoYWxpZGVzIGFuZCBwZXJveGlkZXMgYW5kIHBlcm94eWFjaWRzIzEyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjAxLjAwI0Zvcm1pYyBhY2lkIG9yIGl0cyBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDIuMDAjQWNldGljIGFjaWQgb3IgaXRzIHNhbHRzIG9yICBhY2V0aWMgYW5oeWRyaWRlIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjAzLjAwI0VzdGVycyBvZiBhY2V0aWMgYWNpZCMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wNC4wMCNNb25vIG9yIGRpIHRyaWNobG9yYWNldGljIGFjaWQgb3IgdGhlaXIgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjA1LjAwI1Byb3Bpb25pYyBhY2lkIG9yIGl0cyBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDYuMDAjQnV0eXJpYyBhY2lkcyBvciB2YWxlcmljIGFjaWRzIG9yIHRoZWlyIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wNy4wMCNQYWxtaXRpYyBhY2lkcyBvciBzdGVhcmljIGFjaWRzIG9yIHRoZWlyIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wOC4wMCNTYXR1cmF0ZWQgYWNyeWxpYyBtb25vY2FyYm94eWxpYyBhY2lkcyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wOS4wMCNVbnNhdHVyYXRlZCBhY3ljbGljIG1vbm9jYXJib3h5bGljIGFjaWRzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjEwLjAwI0N5Y2xvbmljIG9yIGN5Y2xlbmljIG9yIGN5Y2xvdGVycGVuaWMgbW9ub2NhcmJveHlsaWMgYWNpZHMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTEuMDAjQXJvbWF0aWMgbW9ub2NhcmJveHlsaWMgYWNpZHMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTIuMDAjQWN5Y2xpYyBwb2x5Y2FyYm94eWxpYyBhY2lkcyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xMy4wMCNDeWNsb25pYyBvciBjeWNsZW5pYyBvciBjeWNsb3RlcnBlbmljIHBvbHljYXJib3h5bGljIGFjaWRzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjE0LjAwI0Fyb21hdGljIHBvbHljYXJib3h5bGljIGFjaWRzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjE1LjAwI0xhY3RpYyBhY2lkIG9yIGl0cyBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTYuMDAjVGFydGFyaWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjE3LjAwI0F0cmljIGFjaWQgb3IgdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjE4LjAwI0dsdWNhcmljIGFjaWQgb3IgaXRzIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xOS4wMCNQaGVueWxnbHlvY29saWMgYWNpZCBvciBtYW5kZWxpYyBhY2lkIG9yIGl0cyBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMjAuMDAjQ2FyYm94eWxpYyBhY2lkcyB3aXRoIGFsY29ob2wgZnVuY3Rpb24gYnV0IHdpdGhvdXQgb3RoZXIgb3h5Z2VuIGZ1bmN0aW9uIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjIxLjAwI0NhcmJveHlsaWMgYWNpZHMgd2l0aCBwaGVub2wgZnVuY3Rpb24gYnV0IHdpdGhvdXQgb3RoZXIgb3h5Z2VuIGZ1bmN0aW9uIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjIyLjAwI0NhcmJveHlsaWMgYWNpZHMgd2l0aCBhbGRlaHlkZSBvciBrZXRvbmUgZnVuY3Rpb24jMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTkuMDAuMDAjQW1pbmUgYW5kIG94eWdlbiBmdW5jdGlvbiBhbWlubyBjb21wb3VuZHMgYW5kIHVyZWluZXMjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTkuMDEuMDAjR2x1dGFtaWMgYWNpZCBvciBpdHMgc2FsdHMjMTIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDAuMDAjT3JnYW5vIHN1bGZ1ciBjb21wb3VuZHMgYW5kIG90aGVyIG9yZ2FubyBpbm9yZ2FuaWMgY29tcG91bmRzIzEyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjAxLjAwI09yZ2FubyBzdWxmdXIgY29tcG91bmRzIzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjAyLjAwI090aGVyIG9yZ2FubyBpbm9yZ2FuaWMgY29tcG91bmRzIzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjAzLjAwI0NvbXBvdW5kcyBjb250YWluaW5nIGFuIHVuZnVzZWQgZnVyYW4gcmluZyBpbiB0aGUgc3RydWN0dXJlIzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjA0LjAwI0xhY3RpbmVzIzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjA1LjAwI0NvbXBvdW5kcyBjb250YWluaW5nIGFuIHVuZnVzZWQgaW1pZGF6b2xlIHJpbmcgaW4gdGhlIHN0cnVjdHVyZSMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wNi4wMCNDb21wb3VuZHMgY29udGFpbmluZyBhbiB1bmZ1c2VkIHB5cmlkaW5lIHJpbmcgaW4gdGhlIHN0cnVjdHVyZSMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wNy4wMCNDb21wb3VuZHMgY29udGFpbmluZyBhIHF1aW5vbGluZSBvciBpc29xdWlub2xpbmUgcmluZyBzeXN0ZW0jMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDguMDAjTGFjdGFtcyMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wOS4wMCNIZXRlcm9jeWNsaWMgY29tcG91bmRzIHdpdGggbml0cm9nZW4gaGV0ZXJvIGF0b20gb25seSMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4xMC4wMCNDb21wb3VuZHMgY29udGFpbmluZyBhbiB1bmZ1c2VkIHRoaWF6b2xlIHJpbmcgaW4gdGhlIHN0cnVjdHVyZSMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMS4wMC4wMCNIeWRyb2NhcmJvbnMgYW5kIHRoZWlyIGhhbG9nZW5hdGVkIGFuZCBzdWxwaG9uYXRlZCBhbmQgbml0cm9zYXRlZCBkZXJpdmF0aXZlcyMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMS4wMS4wMCNTYXR1cmF0ZWQgYWN5Y2xpYyBoeWRyb2NhcmJvbnMjMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDIuMDAjVW5zYXR1cmF0ZWQgYWN5Y2xpYyBoeWRyb2NhcmJvbnMjMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDMuMDAjQ3ljbGljIGh5ZHJvY2FyYm9ucyMxMi4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMS4wNC4wMCNIYWxvZ2VudGF0ZWQgZGVyaXZhdGl2ZXMgb2YgaHlkcm9jYXJib25zIzEyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIxLjA1LjAwI1JlZnJpZ2VyYW50cyMxMi4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMS4wNi4wMCNTdWxwaG9uYXRlZCBvciBuaXRyYXRlZCBvciBuaXRyb3NhdGVkIGRlcml2YXRpdmVzIG9mIGh5ZHJvY2FyYm9ucyMxMi4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMS4wNy4wMCNQYXJhZmZpbiMxMi4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMi4wMC4wMCNQaG9zcGhvcmljIGVzdGVycyBhbmQgdGhlaXIgc2FsdHMgYW5kIGVzdGVycyBvZiBvdGhlciBvcmdhbmljIGFjaWRzIzEyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIyLjAxLjAwI1Bob3NwaG9yaWMgZXN0ZXJzIG9yIHRoZWlyIHNhbHRzIzEyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzEyLjExLjAwLjAwLjAwI0lub3JnYW5pYyBjaGVtaWNhbHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDAuMDAjQ2hlbWljYWwgZWxlbWVudHMjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDEuMDAjQ2hsb3JpbmUjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDIuMDAjRmx1b3JpbmUgb3IgYnJvbWluZSMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wMy4wMCNDaGxvcmluZSBsaXF1aWQgZ2FzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjA0LjAwI1N1YmxpbWVzIG9yIHByZWNpcGl0YXRlZCBzdWxwaHVyIG9yIGNvbGxvaWRhbCBzdWxwaHVyIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjA1LjAwI0Jvcm9uIG9yIHRlbGx1cml1bSMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wNi4wMCNTaWxpY29uIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjA3LjAwI0Fsa2FsaSBtZXRhbHMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDguMDAjQWxrYWxpbmUgZWFydGggbWV0YWxzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjA5LjAwI01lcmN1cnkjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTAuMDAjSHlkcm9nZW4gY2hsb3JpZGUgb3IgaHlkcm9jaGxvcmljIGFjaWQjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTEuMDAjQ2hsb3Jvc3VsZnVyaWMgYWNpZCMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xMi4wMCNTdWxwaHVyaWMgYWNpZCMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xMy4wMCNQaG9zcGhvcnVzIHBlbnRhb3hpZGUgb3IgcGhvc3Bob3JpYyBhY2lkIG9yIHBvbHlwaG9zcGhvcmljIGFjaWRzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjE0LjAwI094aWRlcyBvZiBib3JvbiBvciBib3JpYyBhY2lkcyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xNS4wMCNIeWRyb2dlbiBmbHVvcmlkZSBvciBoeWRyb2ZsdW9yaWMgYWNpZCMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xNi4wMCNTaWxpY29uIGRpb3hpZGUjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTcuMDAjU3VscGh1ciBkaW94aWRlIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjE4LjAwI0h5ZHJvY3lhbmljIGFjaWQjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTkuMDAjSGFsaWRlcyBvciBoYWxpZGUgb3hpZGVzIG9mIG5vbiBtZXRhbHMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMjAuMDAjU3VscGhpZGVzIG9mIG5vbiBtZXRhbHMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMjEuMDAjU29kaXVtIG9yIHBvdGFzc2l1bSBoeWRyb3hpZGUjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMjIuMDAjSHlkcm94aWRlIG9yIHBlcm94aWRlIG9mIG1hZ25lc2l1bSBvciBveGlkZXMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMjMuMDAjQWx1bWludW0gaHlkcm94aWRlIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjI0LjAwI0h5ZHJveGlkZSBvciBoeWRyb3h5bGFtaW5lIG9yIHRoZWlyIGlub3JnYW5pYyBzYWx0cyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4wMC4wMCNNZXRhbCBveGlkZXMgYW5kIGh5ZHJveGlkZXMgYW5kIHBlcm94aWRlcyMxMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4wMS4wMCNaaW5jIG94aWRlIG9yIHppbmMgcGVyb3hpZGUjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDIuMDAjQ2hyb21pdW0gb3hpZGVzIG9yIGh5ZHJveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDMuMDAjTWFuZ2FuZXNlIG94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4wNC4wMCNJcm9uIG94aWRlcyBvciBoeWRyb3hpZGVzIG9yIGVhcnRoIGNvbG91cnMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDUuMDAjQ29iYWx0IG94aWRlcyBvciBoeWRyb3hpZGVzIG9yIGNvbW1lcmNpYWwgY29iYWx0IG94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4wNi4wMCNUaXRhbml1bSBveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDcuMDAjTGVhZCBveGlkZXMgb3IgcmVkIGxlYWQgb3Igb3JhbmdlIGxlYWQjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDguMDAjTGl0aGl1bSBveGlkZSBvciBoeWRyb3hpZGUjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDkuMDAjVmFuYWRpdW0gb3hpZGVzIG9yIGh5ZHJveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMTAuMDAjTmlja2VsIG94aWRlcyBvciBoeWRyb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjExLjAwI0NvcHBlciBveGlkZXMgb3IgaHlkcm94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4xMi4wMCNHZXJtYW5pdW0gb3hpZGVzIG9yIHppcmNvbml1bSBkaW94aWRlIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjEzLjAwI01vbHliZGVudW0gb3hpZGVzIG9yIGh5ZHJveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMTQuMDAjQW50aW1vbnkgb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjAwLjAwI1NhbHRzIG9mIG94b21ldGFsbGljIGFuZCBwZXJveG9tZXRhbGxpYyBhY2lkcyBhbmQgb3RoZXIgaW5vcmdhbmljIGFjaWRzIzEyLjExLjAwLjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjAxLjAwI0FsdW1pbmF0ZXMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDIuMDAjWmluYyBvciBsZWFkIGNocm9tYXRlIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjAzLjAwI1NvZGl1bSBkaWNocm9tYXRlIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjA0LjAwI1BvdGFzc2l1bSBkaWNocm9tYXRlIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjA1LjAwI090aGVyIGNocm9tYXRlIG9yIGRpY2hyb21hdGUgb3IgcGVyb3hvY2hyb21hdGVzIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjA2LjAwI01hbmdhbml0ZXMgb3IgbWFuZ2FuYXRlcyBvciBwZXJtYW5nYW5hdGVzIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjA3LjAwI01vbHliZGF0ZXMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDguMDAjVHVuZ3N0YXRlcyBvciB3b2xmcmFtYXRlcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wOS4wMCNTaWx2ZXIgY29tcG91bmRzIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjEwLjAwI0dvbGQgY29tcG91bmRzIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjExLjAwI090aGVyIGNvbXBvdW5kcyBvciBhbWFsZ2FtcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4xMi4wMCNBbWFsZ2FtcyBvdGhlciB0aGFuIGFtYWxnYW1zIG9mIHByZWNpb3VzIG1ldGFscyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wMC4wMCNTYWx0cyBhbmQgcGVyb3h5c2FsdHMgb2YgaW5vcmdhbmljIGFjaWRzIGFuZCBtZXRhbCMxMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wMS4wMCNGbHVvcmlkZXMgb3IgZmx1b3Jvc2lsaWNhdGVzIG9yIGZsdW9yb2FsdW1pbmF0ZXMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDIuMDAjQ2hsb3JpZGVzIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjAzLjAwI1NvZGl1bSBjaGxvcmlkZSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wNC4wMCNTYWwgYW1tb25pYWMgYmxvY2tzIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjA1LjAwI1BvdGFzc2l1bSBpb2RpbmF0ZSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wNi4wMCNTdWxwaGlkZXMgb3IgcG9seXN1bGZpZGVzIG9yIGRpdGhpb25pdGVzIG9yICBzdWxmb3h5bGF0ZXMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDcuMDAjU3VscGhpdGVzIG9yIHRoaW9zdWxmYXRlcyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wOC4wMCNBbHVtaW51bSBzdWxwaGF0ZSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wOS4wMCNDb2xsb2lkYWwgcHJlY2lvdXMgbWV0YWxzIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjEwLjAwI0ZlcnJvdXMgc3VscGhhdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTEuMDAjU2lsdmVyIG5pdHJhdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTIuMDAjU29kaXVtIGRpaHlkcm9nZXJub3J0aG9waG9zcGhhdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTMuMDAjU29kaXVtIHBob3NwaGF0ZSBkaWJhc2ljIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjE0LjAwI1NvZGl1bSBiaWNhcmJvbmF0ZSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xNS4wMCNUcmkgc29kaXVtIGNpdHJhdGUgZGkgaHlkcmF0ZSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xNi4wMCNTb2RpdW0gY2FyYm9uYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjE3LjAwI01ldGFsbGljIHNvZGl1bSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xOC4wMCNTb2RpdW0gc2lsaWNhdGUgbGlxdWlkcyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xOS4wMCNTb2RpdW0gc2lsaWNhdGUgYmluZGVycyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMC4wMC4wMCNIeWRyb2dlbiBwZXJveGlkZSBhbmQgaHlkcmlkZXMgYW5kIG5pdHJpZGVzIGFuZCBhc2lkZXMgYW5kIHNpbGljaWRlcyBhbmQgYm9yaWRlcyMxMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMC4wMS4wMCNIeWRyb2dlbiBwZXJveGlkZSMxMi4xMS4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMC4wMi4wMCNQaG9zcGhpZGVzIzEyLjExLjIwLjAwLjAwCi11bnNwc2M3IzEyLjExLjIwLjAzLjAwI0NhcmJpZGVzIzEyLjExLjIwLjAwLjAwCi11bnNwc2M3IzEyLjExLjIwLjA0LjAwI0NhbGNpdW0gY2FyYmlkZSMxMi4xMS4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMC4wNS4wMCNCcm9taWRlcyMxMi4xMS4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wMC4wMCNJc290b3BlcyBhbmQgdGhlaXIgY29tcG91bmRzIGlub3JnYW5pYyBhbmQgb3JnYW5pYyMxMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wMS4wMCNEZXV0ZXJpdW0jMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDIuMDAjRGV1dGVyYXRlZCBzb2x2ZW50cyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wMy4wMCNIZWF2eSB3YXRlciMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wNC4wMCNBbHBoYSBzb3VyY2VzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjA1LjAwI0JldGEgc291cmNlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wNi4wMCNDb2JhbHQgc291cmNlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wNy4wMCNHYW1tYSBzb3VyY2VzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjA4LjAwI05ldXRyb24gc291cmNlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wOS4wMCNSYWRpb2lzb3RvcGUgc291cmNlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xMC4wMCNDYWxpYnJhdGlvbiBzb3VyY2VzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjExLjAwI0luIHZpdm8gcHJvZHVjdHMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTIuMDAjUmFkaW9jaGVtaWNhbCBpc290b3BlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xMy4wMCNSYWRpb2dyYXBoaWMgc291cmNlIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjE0LjAwI1JhZGlvaW1tdW5vYXNzYXkgaXNvdG9wZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTUuMDAjVHJpdGl1bSB0YXJnZXRzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjE2LjAwI0V4Y2l0YXRpb24gc291cmNlIG9yIGFubnVsYXIjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTcuMDAjUmFkaW9waGFybWFjZXV0aWNhbCBjb21wb3VuZHMgZm9yIGxhYmVsbGluZyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xOC4wMCNDaGVtaWNhbHMgbGFiZWxsZWQgQzE0IzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjE5LjAwI0Zpc3Npb25hYmxlIGlzb3RvcGVzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjIwLjAwI0luIHZpdm8gcmFkaW9hY3RpdmUgaXNvdG9wZSBwcm9kdWN0cyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMi4wMC4wMCNDeWFuaWRlcyMxMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMi4wMS4wMCNDeWFuaWRlcyBvciBjeWFuaWRlIG94aWRlcyBvZiBzb2RpdW0jMTIuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjIuMDIuMDAjQ29tcGxleCBjeWFuaWRlcyBvciB0aGlvY3lhbmF0ZXMjMTIuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjIuMDMuMDAjQ3lhbmlkZXMgb3IgY3lhbmlkZSBveGlkZXMjMTIuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMDAuMDAuMDAjR2FzZXMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDAuMDAjSW5kdXN0cmlhbCBnYXNlcyMxMi4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4wMS4wMCNOaXRyb3VzIG94aWRlIGdhcyMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4wMi4wMCNIZWxpdW0gZ2FzIzEyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjA0LjAwI0NhcmJvbiBtb25veGlkZSMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4wNS4wMCNIeWRyb2dlbiBnYXMjMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDYuMDAjQ2FyYm9uIGRpb3hpZGUjMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDcuMDAjTml0cm9nZW4gZ2FzIzEyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjA4LjAwI05lb24gZ2FzIzEyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjEwLjAwI094eWdlbiMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4wMC4wMCNSYXJlIGdhc2VzIzEyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjAxLjAwI1hlbm9uIGdhcyMxMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4wMi4wMCNSYWRvbiBnYXMjMTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMDMuMDAjS3J5cHRvbiBnYXMjMTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMDQuMDAjQXJnb24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjA5LjAwI1hlbm9uIGdhcyMxMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4xMC4wMCNSYWRvbiBnYXMjMTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMTEuMDAjS3J5cHRvbiBnYXMjMTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMTIuMDAjQXJnb24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEzLjAwLjAwLjAwI0V4cGxvc2l2ZSBtYXRlcmlhbHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDAuMDAjRXhwbG9zaXZlcyMxMi4xMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNS4wMS4wMCNEeW5hbWl0ZSMxMi4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNS4wMi4wMCNFeHBsb3NpdmUgY2FydHJpZGdlcyMxMi4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNS4wMy4wMCNQcm9wZWxsYW50IGV4cGxvc2l2ZXMjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDQuMDAjRXhwbG9zaXZlIGNoYXJnZXMjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDUuMDAjUGxhc3RpYyBleHBsb3NpdmVzIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjA2LjAwI0FsdW1pbml6ZWQgZXhwbG9zaXZlcyMxMi4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNS4wNy4wMCNBbW1vbml1bSBuaXRyYXRlIGV4cGxvc2l2ZXMjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDguMDAjTml0cm9nbHljZXJpbiBwb3dkZXIgZXhwbG9zaXZlcyMxMi4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNi4wMC4wMCNQeXJvdGVjaG5pY3MjMTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTYuMDEuMDAjRmlyZXdvcmtzIzEyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE2LjAyLjAwI0ZvZyBzaWduYWxzIzEyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE2LjAzLjAwI1JhaW4gcm9ja2V0cyMxMi4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNi4wNC4wMCNGbGFyZXMjMTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTYuMDUuMDAjUHlyb3RlY2huaWMgbWF0ZXJpYWxzIGZvciB0aGVhdGVyIG9yIHRlbGV2aXNpb24jMTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTcuMDAuMDAjSWduaXRlcnMjMTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTcuMDEuMDAjQmxhc3RpbmcgY2FwcyMxMi4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNy4wMi4wMCNEZXRvbmF0b3JzIzEyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjAzLjAwI0V4cGxvc2l2ZXMgZnVzZXMjMTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTcuMDQuMDAjRXhwbG9zaXZlIGluaXRpYXRvcnMjMTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTcuMDUuMDAjRXhwbG9zaXZlIHByaW1lcnMjMTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTcuMDYuMDAjTWF0Y2hlcyMxMi4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNy4wNy4wMCNMaWdodGVycyMxMi4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMy4xOC4wMC4wMCNQcm9wZWxsYW50cyMxMi4xMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xOC4wMS4wMCNQb3dkZXIgcHJvcGVsbGFudHMjMTIuMTMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTguMDIuMDAjU29saWQgcHJvcGVsbGFudHMjMTIuMTMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTguMDMuMDAjR3VuIHByb3BlbGxhbnRzIzEyLjEzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE4LjA0LjAwI0hpZ2ggZW5lcmd5IHByb3BlbGxhbnRzIzEyLjEzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE4LjA1LjAwI0dlbGxlZCBwcm9wZWxsYW50cyMxMi4xMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xOC4wNi4wMCNIeWJyaWQgcHJvcGVsbGFudHMjMTIuMTMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTQuMDAuMDAuMDAjRWxlbWVudHMgYW5kIGdhc2VzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjE1LjAwLjAwI0VhcnRoIG1ldGFscyMxMi4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNS4wMS4wMCNCZXJ5bGxpdW0gKEJlKSMxMi4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNS4wMi4wMCNNYWduZXNpdW0gKE1nKSMxMi4xNC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNS4wMy4wMCNDYWxjaXVtIChDYSkjMTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTUuMDQuMDAjU3Ryb250aXVtIChTcikjMTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTUuMDUuMDAjQmFyaXVtIChCYSkjMTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTUuMDYuMDAjUmFkaXVtIChSYSkjMTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDAuMDAjUmFyZSBlYXJ0aCBtZXRhbHMjMTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDEuMDAjQ2VyaXVtIChDZSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDIuMDAjRHlzcHJvc2l1bSAoRHkpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjAzLjAwI0VyYml1bSAoRXIpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjA0LjAwI0V1cm9waXVtIChFdSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDUuMDAjR2Fkb2xpbml1bSAoR2QpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjA2LjAwI0hvbG1pdW0gKEhvKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wNy4wMCNMYW50aGFudW0gKExhKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wOC4wMCNMdXRldGl1bSAoTHUpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjA5LjAwI05lb2R5bWl1bSAoTmQpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjEwLjAwI1ByYXNlb2R5bWl1bSAoUHIpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjExLjAwI1Byb21ldGhpdW0gKFByKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xMi4wMCNTYW1hcml1bSAoU20pIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjEzLjAwI1NjYW5kaXVtIChTYykjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTQuMDAjVGVyYml1bSAoVGIpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjE1LjAwI1RodWxpdW0gKFRtKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xNi4wMCNZdHRlcmJpdW0gKFliKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xNy4wMCNZdHRyaXVtIChZKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wMC4wMCNUcmFuc2l0aW9uIG1ldGFscyMxMi4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wMS4wMCNBY3Rpbml1bSAoQWMpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjAyLjAwI0FsdW1pbnVtIChBbCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDMuMDAjQW1lcmljaXVtIChBbSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDQuMDAjQW50aW1vbnkgKFNiKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wNS4wMCNCZXJrZWxpdW0gKEJrKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wNi4wMCNCaXNtdXRoIChCaSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDcuMDAjQ2FkbWl1bSAoQ2EpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjA4LjAwI0NhbGlmb3JuaXVtIChDZikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDkuMDAjQ2hyb21pdW0gKENyKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xMC4wMCNDb2JhbHQgKENvKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xMS4wMCNDb3BwZXIgKEN1KSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xMi4wMCNDdXJpdW0gKENtKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xMy4wMCNFaW5zdGVpbml1bSAoRXMpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjE0LjAwI0Zlcm1pdW0gKEZtKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xNS4wMCNHYWxsaXVtIChHYSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTYuMDAjR2VybWFuaXVtIChHZSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTcuMDAjR29sZCAoQXUpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjE4LjAwI0hhZm5pdW0gKEhmKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xOS4wMCNJbmRpdW0gKEluKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yMC4wMCNJcmlkaXVtIChJcikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjEuMDAjSXJvbiAoRmUpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjIyLjAwI0xhd3JlbmNpdW0gKExyKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yMy4wMCNMZWFkIChQYikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjQuMDAjTWFuZ2FuZXNlIChNbikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjUuMDAjTWVuZGVsZXZpdW0gKE1kKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yNi4wMCNNZXJjdXJ5IChIZykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjcuMDAjTW9seWJkZW51bSAoTW8pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjI4LjAwI05lcHR1bml1bSAoTnApIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjI5LjAwI05pY2tlbCAoTmkpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjMwLjAwI05pb2JpdW0gKE5iKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zMS4wMCNOb2JlbGl1bSAoTm8pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjMyLjAwI09zbWl1bSAoT3MpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjMzLjAwI1BhbGxhZGl1bSAoUGQpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjM0LjAwI1BsYXRpbnVtIChQdCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzUuMDAjUGx1dG9uaXVtIChQdSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzYuMDAjUHJvdGFjdGluaXVtIChQYSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzcuMDAjUmhlbml1bSAoUmUpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjM4LjAwI1Job2RpdW0gKFJoKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zOS4wMCNSdXRoZW5pdW0gKFJ1KSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40MC4wMCNTaWx2ZXIgKEFnKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40MS4wMCNUYW50YWx1bSAoVGEpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjQyLjAwI1RlY2huZXRpdW0gKFRlKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40My4wMCNUaGFsbGl1bSAoVGwpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjQ0LjAwI1Rob3JpdW0gKFRoKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40NS4wMCNUaW4gKFNuKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40Ni4wMCNUaXRhbml1bSAoVGkpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjQ3LjAwI1R1bmdzdGVuIChXKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40OC4wMCNVcmFuaXVtIChVKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40OS4wMCNWYW5hZGl1bSAoVikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTAuMDAjWmluYyAoWm4pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjUxLjAwI1ppcmNvbml1bSAoWnIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjUyLjAwI0JvaHJpdW0gKEJoKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41My4wMCNEdWJuaXVtIChEYikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTQuMDAjSGFzc2l1bSAoSHMpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjU1LjAwI1J1dGhlcmZvcmRpdW0gKFJmKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41Ni4wMCNTZWFib3JnaXVtIChTZykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTcuMDAjVW51bm5pbGl1bSAoVXVtKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41OC4wMCNVbnVudW5pdW0gKFV1dSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTkuMDAjVW51bmJpdW0gKFV1YikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNjAuMDAjUG9sb25pdW0gKChQbykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTguMDAuMDAjQWxrYWxpIG1ldGFscyMxMi4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOC4wMS4wMCNDZXNpdW0gKENzKSMxMi4xNC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOC4wMi4wMCNGcmFuY2l1bSAoRm0pIzEyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE4LjAzLjAwI0xpdGhpdW0gKExpKSMxMi4xNC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOC4wNC4wMCNQb3Rhc3NpdW0gKEspIzEyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE4LjA1LjAwI1J1YmlkaXVtIChSYikjMTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTguMDYuMDAjU29kaXVtIChOYSkjMTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDAuMDAjTm9uIG1ldGFscyBhbmQgcHVyZSBhbmQgZWxlbWVudGFsIGdhc2VzIzEyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjAxLjAwI0NobG9yaW5lICAoQ2wpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjAyLjAwI0h5ZHJvZ2VuIChIKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wMy4wMCNOaXRyb2dlbiAgKE4pIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjA0LjAwI094eWdlbiAoTykjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDUuMDAjRmx1b3JpbmUgIChGKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wNi4wMCNBcnNlbmljIChBcykjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDcuMDAjQm9yb24gKEJoKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wOC4wMCNDYXJib24gKEMpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjA5LjAwI1Bob3NwaG9ydXMgKFApIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjEwLjAwI1NlbGVuaXVtIChTZSkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMTEuMDAjU2lsaWNvbiAoU2kpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjEyLjAwI1N1bGZ1ciAoUykjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMTMuMDAjVGVsbHVyaXVtIChUZSkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMTQuMDAjQXN0YXRpbmUgKEF0KSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4xNS4wMCNCcm9taW5lIEJyIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjE2LjAwI0lvZGluZSAoSSkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjAuMDAuMDAjTm9ibGUgZ2FzZXMjMTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjAuMDEuMDAjWGVub24gZ2FzICAoWGUpIzEyLjE0LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjAyLjAwI1JhZG9uIGdhcyAoUm4pIzEyLjE0LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjAzLjAwI0tyeXB0b24gZ2FzIChLcikjMTIuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjAuMDQuMDAjQXJnb24gZ2FzIChBcikjMTIuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjAuMDUuMDAjSGVsaXVtIGdhcyAoSGUpIzEyLjE0LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjA2LjAwI05lb24gZ2FzIChOZSkjMTIuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjEuMDAuMDAjSW5kdXN0cmlhbCB1c2UgZ2FzZXMjMTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjEuMDEuMDAjSHlkcm9nZW4gY29tcG91bmQgZ2FzZXMjMTIuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjEuMDIuMDAjQ2hsb3JpbmF0ZWQgbWl4ZWQgZ2FzZXMjMTIuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjEuMDMuMDAjQW1tb25pYSMxMi4xNC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMS4wNC4wMCNDYXJib24gZGlveGlkZSBnYXMgKENPMikjMTIuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjEuMDUuMDAjSW5kdXN0cmlhbCBhaXIjMTIuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjEuMDYuMDAjSW5lcnQgZ2FzIG1peHR1cmVzIzEyLjE0LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE1LjAwLjAwLjAwI0FjaWRzIGFuZCB0aGVpciBzYWx0cyBhbmQgZXN0ZXJzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjAwLjAwI0NhcmJveHlsaWMgYWNpZHMgYW5kIHRoZWlyIHNhbHRzIGFuZCBlc3RlcnMjMTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDEuMDAjQWNldGljIGFjaWQgb3IgaXRzIHNhbHRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjAyLjAwI0FjeWNsaWMgYWNpZHMjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDMuMDAjQWxkZWh5ZGljIGFjaWRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjA0LjAwI0J1dHlyaWMgYWNpZHMjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDUuMDAjQ2FyYm9jeWxpYyBhY2lkcyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wNi4wMCNIeWRyb3h5IGFjaWRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjA3LjAwI0tldG8gYWNpZHMjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDguMDAjUHJvcGlvbmljIGFjaWRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjA5LjAwI0FjcnlsaWMgYWNpZCBlc3RlcnMjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMTAuMDAjRXN0ZXJzIG9mIG1ldGhhY3J5bGljIGFjaWQjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDAuMDAjSGV0ZXJvY3ljbGljIGFjaWRzIGFuZCB0aGVpciBzYWx0cyBhbmQgZXN0ZXJzIzEyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjAxLjAwI0luZG9sZWFjZXRpYyBhY2lkcyMxMi4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wMi4wMCNJc29uaWNvdGluaWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDMuMDAjSXNvbmlwZWNvdGljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjA0LjAwI05pY290aW5pYyBhY2lkcyMxMi4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wNS4wMCNOaXBlY290aWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDYuMDAjT3JvdGljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjA3LjAwI1BpY29saW5pYyBhY2lkcyMxMi4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wOC4wMCNQaXBlY29saWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDAuMDAjRmF0dHkgYWNpZHMgYW5kIHRoZWlyIHNhbHRzIGFuZCBlc3RlcnMjMTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDEuMDAjRGVjYW5vaWMgYWNpZHMjMTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDIuMDAjVW5zYXR1cmF0ZWQgZmF0dHkgYWNpZHMjMTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDMuMDAjVm9sYXRpbGUgZmF0dHkgYWNpZHMjMTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDQuMDAjSGVwdGFub2ljIGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjA1LjAwI0xhdXJpYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wNi4wMCNNeWNvbGljIGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjA3LjAwI015cmlzdGljIGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjA4LjAwI1BhbG1pdGljIGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjA5LjAwI1N0ZWFyaWMgYWNpZHMjMTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDAuMDAjTm9uIGNhcmJveHlsaWMgYWNpZHMgYW5kIHRoZWlyIHNhbHRzIzEyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjAxLjAwI0NhcmJvbmljIGFjaWRzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjAyLjAwI05pdHJpYyBhY2lkcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wMy4wMCNQaG9zcGhvcm91cyBhY2lkcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wNC4wMCNTdWxmdXIgYWNpZHMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDUuMDAjQ2hsb3JpZGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjA2LjAwI0h5ZHJvY2hsb3JpZGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjA3LjAwI05pdHJhdGVzIG9yIG5pdHJpdGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjA4LjAwI1NpbGljYXRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wOS4wMCNQaG9zcGhhdGVzIG9yIHBob3NwaGlkZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMTAuMDAjQmljYXJib25hdGVzIG9yIGNhcmJpZGVzIG9yIGNhcmJvbmF0ZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMTEuMDAjRmx1b3JpZGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjEyLjAwI0Jyb21pZGVzIG9yIGJyb21hdGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjEzLjAwI0lvZGlkZXMgb3IgaW9kYXRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOS4wMC4wMCNJbm9yZ2FuaWMgc3VsZnVyIGNvbXBvdW5kcyMxMi4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOS4wMS4wMCNIeWRyb2dlbiBzdWxmaWRlIzEyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE5LjAyLjAwI1N1bGZ1cmljIEFjaWQjMTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTkuMDMuMDAjU29kaXVtIHN1bGZhdGUjMTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMDAuMDAuMDAjQWRkaXRpdmVzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjE1LjAwLjAwI0luZGljYXRvcnMgYW5kIFJlYWdlbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjE1LjAxLjAwI0FmZmluaXR5IGxhYmVscyMxMi4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNS4wMi4wMCNDcm9zcyBsaW5raW5nIGFnZW50cyMxMi4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNS4wMy4wMCNSZWFnZW50IGtpdHMjMTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDQuMDAjU3VsZmh5ZHJ5bCByZWFnZW50cyMxMi4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNS4wNS4wMCNJbnRlcmNhbGF0aW5nIGFnZW50cyMxMi4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNS4wNi4wMCNEaXZlcnRpbmcgYWdlbnRzIzEyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE2LjAwLjAwI0NhdGFseXN0cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNi4wMS4wMCNBY2lkIGNhdGFseXN0cyMxMi4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNi4wMi4wMCNDb21idXN0aW9uIGNhdGFseXN0cyMxMi4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNi4wMy4wMCNDdXN0b20gY2F0YWx5c3RzIzEyLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE2LjA0LjAwI0NyYWNraW5nIGNhdGFseXN0cyMxMi4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNy4wMC4wMCNCdWZmZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjE3LjAxLjAwI0FtcGhvbHl0ZSBtaXh0dXJlcyMxMi4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNy4wMi4wMCNCaWNhcmJvbmF0ZSBidWZmZXJzIzEyLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE3LjAzLjAwI090aGVyIGJ1ZmZlcnMjMTIuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTcuMDQuMDAjQWNpZCBidWZmZXJzIzEyLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE3LjA1LjAwI0Jhc2ljIGJ1ZmZlcnMjMTIuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTcuMDYuMDAjTmV1dHJhbCBidWZmZXJzIzEyLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjAwLjAwI0NvbGxvaWRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjAxLjAwI0dlbHMjMTIuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTguMDIuMDAjU3VzcGVuc2lvbnMjMTIuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTguMDMuMDAjQWVyb3NvbHMjMTIuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTguMDQuMDAjRW11bHNpb25zIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjA1LjAwI05hdHVyYWwgZ2VsbGluZyBhZ2VudHMjMTIuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTguMDYuMDAjU3ludGhldGljIGdlbGxpbmcgYWdlbnRzIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjA3LjAwI0dlbCBzdGFiaWxpemVycyMxMi4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wOC4wMCNTdXNwZW5kaW5nIGFnZW50cyMxMi4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wMC4wMCNTdXJmYWN0YW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wMS4wMCNBbnRpIGZvYW1pbmcgYWdlbnRzIzEyLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE5LjAyLjAwI0RldGVyZ2VudCBzdXJmYWN0YW50cyMxMi4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wMy4wMCNGb2FtaW5nIGFnZW50cyMxMi4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wNC4wMCNEaXNwZXJzaW5nIGFnZW50cyMxMi4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wNS4wMCNGbHVzaGVzIzEyLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE5LjA2LjAwI1dldHRpbmcgYWdlbnRzIzEyLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE5LjA3LjAwI1dhdGVyIGZsb29kIGFkZGl0aXZlcyMxMi4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMC4wMC4wMCNQbGFzdGljaXplcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjAuMDEuMDAjUGh0aGFsYXRlcyMxMi4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMC4wMi4wMCNQb2x5bWVyaWNzIzEyLjE2LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIwLjAzLjAwI0FncmljdWx0dXJhbCBvaWxzIzEyLjE2LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIwLjA0LjAwI1N1bGZvbmFtaWRlcyMxMi4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMC4wNS4wMCNHbHV0YXJhdGVzIzEyLjE2LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIxLjAwLjAwI0ZsYW1lIHJldGFyZGFudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjEuMDEuMDAjQnJvbWluYXRlZCMxMi4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wMC4wMCNBbnRpIG94aWRhbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjAxLjAwI0FzY29yYmljIGFjaWQjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDIuMDAjQmV0YSBjYXJvdGVuZSMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wMy4wMCNCdXR5bGF0ZWQgaHlkcm94eWFuaXNvbGUjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDQuMDAjQnV0eWxhdGVkIGh5ZHJveHl0b2x1ZW5lIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjA1LjAwI0NhbGNpdW0gY2l0cmF0ZSMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wNi4wMCNDYW50aGF4YW50aGluIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjA3LjAwI01lbGF0b25pbiMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wOC4wMCNOb3JkaWh5ZHJvZ3VhaWFyZXRpYyBhY2lkIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjA5LjAwI1Byb3B5bCBnYWxsYXRlIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjEwLjAwI1NpbHltYXJpbiMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4xMS4wMCNTdWxmdXIgZGlveGlkZSMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMy4wMC4wMCNDdXJpbmcgYWdlbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIzLjAxLjAwI1dhdGVyYm9ybmUgY3VyaW5nIGFnZW50cyMxMi4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMy4wMi4wMCNDZW1lbnQgYWNjZWxlcmF0b3JzIzEyLjE2LjIzLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIzLjAzLjAwI0NlbWVudCByZXRhcmRlcnMjMTIuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjQuMDAuMDAjUG9seW1lciBicmVha2VycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNC4wMS4wMCNBY2lkaWMgcG9seW1lciBicmVha2VycyMxMi4xNi4yNC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNC4wMi4wMCNPcmdhbmljIHBvbHltZXIgYnJlYWtlcnMjMTIuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjUuMDAuMDAjRW11bHNpb24gYnJlYWtlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjUuMDEuMDAjV2F0ZXIgaW4gb2lsIGVtdWxzaW9uIGJyZWFrZXJzIzEyLjE2LjI1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI1LjAyLjAwI09pbCBpbiB3YXRlciBlbXVsc2lvbiBicmVha2VycyMxMi4xNi4yNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNS4wMy4wMCNGbG90YXRpb24gYWlkcyMxMi4xNi4yNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNi4wMC4wMCNDbGF5IHN0YWJpbGl6ZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjI2LjAxLjAwI0lub3JnYW5pYyBjbGF5IHN0YWJpbGl6ZXJzIzEyLjE2LjI2LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI2LjAyLjAwI09yZ2FuaWMgY2xheSBzdGFiaWxpemVycyMxMi4xNi4yNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNy4wMC4wMCNGbHVpZCBsb3NzIGFkZGl0aXZlcyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNy4wMS4wMCNOYXR1cmFsIHBvbHltZXIgZmx1aWQgbG9zcyBhZGRpdGl2ZXMjMTIuMTYuMjcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjcuMDIuMDAjTW9kaWZpZWQgcG9seW1lciBmbHVpZCBsb3NzIGFkZGl0aXZlcyMxMi4xNi4yNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4yOC4wMC4wMCNGcmljdGlvbiByZWR1Y2VycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yOC4wMS4wMCNBbmlvbmljIGZyaWN0aW9uIHJlZHVjZXJzIzEyLjE2LjI4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI4LjAyLjAwI0NhdGlvbmljIGZyaWN0aW9uIHJlZHVjZXJzIzEyLjE2LjI4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI5LjAwLjAwI1BhcmFmZmluIGFzcGhhbHRlbmUgY29udHJvbCBhZ2VudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjkuMDEuMDAjU29sdmVudCB0eXBlIHBhcmFmZmluIGFzcGhhbHRlbmUgY29udHJvbCBhZ2VudHMjMTIuMTYuMjkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjkuMDIuMDAjQ3J5c3RhbCBtb2RpZmllZCBwYXJhZmZpbiBhc3BoYWx0ZW5lIGNvbnRyb2wgYWdlbnRzIzEyLjE2LjI5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI5LjAzLjAwI0Rpc3BlcnNhbnQgdHlwZSBwYXJhZmZpbiBhc3BoYWx0ZW5lIGNvbnRyb2wgYWdlbnRzIzEyLjE2LjI5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjMwLjAwLjAwI011ZCByZW1vdmFsIG1peHR1cmVzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjMwLjAxLjAwI011ZCBjbGVhbm91dCBhZ2VudHMjMTIuMTYuMzAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzEuMDAuMDAjQW50aSBzbHVkZ2VycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMS4wMS4wMCNBbnRpIHNsdWRnZSBhZGRpdGl2ZXMjMTIuMTYuMzEuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzIuMDAuMDAjQW50aSBnYXMgbWlncmF0aW9uIGFnZW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMi4wMS4wMCNBbnRpIGdhcyBtaWdyYXRpb24gYWRkaXRpdmVzIzEyLjE2LjMyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjMzLjAwLjAwI0V4cGFuZGluZyBhZ2VudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzMuMDEuMDAjQ2VtZW50IGV4cGFuZGluZyBhZ2VudHMjMTIuMTYuMzMuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzQuMDAuMDAjRXh0ZW5kZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjM0LjAxLjAwI0NlbWVudCBleHRlbmRlcnMjMTIuMTYuMzQuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzUuMDAuMDAjT2lsIHdlbGwgc2VhbGFudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzUuMDEuMDAjQ2VtZW50aW5nIHNlYWxhbnRzIzEyLjE2LjM1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjM2LjAwLjAwI0NvcnJvc2lvbiBpbmhpYml0b3JzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjM2LjAxLjAwI09pbCBwcm9kdWN0aW9uIGNvcnJvc2lvbiBpbmhpYml0b3JzIzEyLjE2LjM2LjAwLjAwCi11bnNwc2M3IzEyLjE2LjM2LjAyLjAwI0dhcyBwcm9kdWN0aW9uIGNvcnJvc2lvbiBpbmhpYml0b3JzIzEyLjE2LjM2LjAwLjAwCi11bnNwc2M3IzEyLjE2LjM3LjAwLjAwI0dhcyBoeWRyYXRlIGNvbnRyb2xsZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjM3LjAxLjAwI0tpbmV0aWMgaHlkcmF0ZSBjb250cm9sbGVycyMxMi4xNi4zNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4zOC4wMC4wMCNTY2F2ZW5nZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjM4LjAxLjAwI0h5ZHJvZ2VuIHN1bGZpZGUgc2NhdmVuZ2VycyMxMi4xNi4zOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zOC4wMi4wMCNPeHlnZW4gc2NhdmVuZ2VycyMxMi4xNi4zOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zOS4wMC4wMCNTY2FsZSBjb250cm9sbGVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zOS4wMS4wMCNTY2FsZSBpbmhpYml0b3IjMTIuMTYuMzkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzkuMDIuMDAjU2NhbGUgcmVtb3ZlcnMgYW5kIGNvbnZlcnRlcnMjMTIuMTYuMzkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDAuMDAuMDAjQmFjdGVyaWNpZGVzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQwLjAxLjAwI1JlZ2lzdGVyZWQgbWljcm9iaW9jaWRlcyMxMi4xNi40MC4wMC4wMAotdW5zcHNjNyMxMi4xNi40MS4wMC4wMCNJbiBzaXR1IzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQxLjAxLjAwI0luIHNpdHUgYWRkaXRpdmVzIzEyLjE2LjQxLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQxLjAyLjAwI0FjaWQgYWRkaXRpdmVzIzEyLjE2LjQxLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQyLjAwLjAwI1JldGFyZGVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi40Mi4wMS4wMCNBY2lkIGNvcnJvc2lvbiBpbmhpYml0b3JzIzEyLjE2LjQyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQzLjAwLjAwI0lyb24gY29udHJvbGxlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDMuMDEuMDAjSXJvbiBjb250cm9sIGFkZGl0aXZlcyMxMi4xNi40My4wMC4wMAotdW5zcHNjNyMxMi4xNi40NC4wMC4wMCNOb24gZW11bHNpZmllcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDQuMDEuMDAjTm9uIGVtdWxzaWZ5aW5nIGFkZGl0aXZlcyMxMi4xNi40NC4wMC4wMAotdW5zcHNjNyMxMi4xNy4wMC4wMC4wMCNDb2xvcmFudHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTUuMDAuMDAjRHllcyMxMi4xNy4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wMS4wMCNGbHVvcmVzY2VudCBkeWVzIzEyLjE3LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE1LjAyLjAwI1BodGhhbGVpbiBkeWVzIzEyLjE3LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE1LjAzLjAwI1Jvc2FuaWxpbmUgZHllcyMxMi4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wNC4wMCNGb29kIG9yIGRydWcgb3IgY29zbWV0aWMgc2FmZSAoRkRDKSBkeWVzIzEyLjE3LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE1LjA1LjAwI0xha2VkIzEyLjE3LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE1LjA2LjAwI05hdHVyYWwgZHllcyMxMi4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNi4wMC4wMCNQaWdtZW50cyMxMi4xNy4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNi4wMS4wMCNOYXR1cmFsIHBpZ21lbnRzIzEyLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE2LjAyLjAwI0lub3JnYW5pYyBtZXRhbCBveGlkZXMjMTIuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTYuMDMuMDAjQ2FyYm9uIGJsYWNrIzEyLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE2LjA0LjAwI1RpdGFuaXVtIGRpb3hpZGUjMTIuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTYuMDUuMDAjT3JnYW5pYyBwaWdtZW50cyMxMi4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNy4wMC4wMCNDb2xvciBjb21wb3VuZHMgYW5kIGRpc3BlcnNpb25zIzEyLjE3LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE3LjE3LjAxLjAwI1BvbHltZXIgbWFzdGVyYmF0Y2hlcyMxMi4xNy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNy4wMi4wMCNQaWdtZW50IGRpc3BlcnNpb25zIzEyLjE3LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE3LjAzLjAwI0lua3MjMTIuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTguMDAuMDAuMDAjV2F4ZXMgYW5kIG9pbHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTguMTUuMDAuMDAjV2F4ZXMjMTIuMTguMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTguMTUuMDEuMDAjU3ludGhldGljIHdheGVzIzEyLjE4LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE4LjE1LjAyLjAwI05hdHVyYWwgd2F4ZXMjMTIuMTguMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTguMTUuMDMuMDAjUGFyYWZmaW5zIzEyLjE4LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE4LjE1LjA0LjAwI1BldHJvbGF0dW1zIzEyLjE4LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE4LjE2LjAwLjAwI09pbHMjMTIuMTguMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTguMTYuMDEuMDAjU3ludGhldGljIG9pbHMjMTIuMTguMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTguMTYuMDIuMDAjTmF0dXJhbCBvaWxzIzEyLjE4LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE5LjAwLjAwLjAwI1NvbHZlbnRzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjE5LjE1LjAwLjAwI0h5ZHJvY2FyYm9uYXRlZCBzb2x2ZW50cyMxMi4xOS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xOS4xNS4wMS4wMCNBcm9tYXRpYyBzb2x2ZW50cyMxMi4xOS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xOS4xNS4wMi4wMCNBbGlwaGF0aWMgc29sdmVudHMjMTIuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTkuMTYuMDAuMDAjT3h5Z2VuYXRlZCBzb2x2ZW50cyMxMi4xOS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xOS4xNi4wMS4wMCNBbGNvaG9sIHNvbHZlbnRzIzEyLjE5LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE5LjE2LjAyLjAwI0FjdGl2ZSBzb2x2ZW50cyMxMi4xOS4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMC4wMC4wMC4wMCNDaGVtaWNhbCBpbnRlcm1lZGlhdGVzIGFuZCBmaXhhdGl2ZXMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTUuMDAuMDAjSW50ZXJtZWRpYXRlcyMxMi4yMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNS4wMS4wMCNFdGhlciBpbnRlcm1lZGlhdGVzIzEyLjIwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE1LjAyLjAwI0tldG9uZSBpbnRlcm1lZGlhdGVzIzEyLjIwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE1LjAzLjAwI0FsZGVoeWRlIGludGVybWVkaWF0ZXMjMTIuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTUuMDQuMDAjUGVyb3hpZGUgaW50ZXJtZWRpYXRlcyMxMi4yMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNS4wNS4wMCNBY3J5bGF0ZSBvciBtZXRoYWNyeWxhdGUgaW50ZXJtZWRpYXRlcyMxMi4yMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNi4wMC4wMCNGaXhhdGl2ZXMjMTIuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTYuMDEuMDAjRm9ybWFsZGVoeWRlcyMxMi4yMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNi4wMi4wMCNHbHV0cmFscyMxMi4yMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNi4wMy4wMCNUYW5uaW5zIzEyLjIwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE3LjAwLjAwI0FtaW5lcyBhbmQgYW1pZGVzIGFuZCBpbWluZXMgYW5kIGltaWRlcyMxMi4yMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNy4wMS4wMCNQcmltYXJ5IzEyLjIwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE3LjAyLjAwI1NlY29uZGFyeSMxMi4yMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNy4wMy4wMCNUZXJ0aWFyeSMxMi4yMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNy4wNC4wMCNTcGVjaWFsdHkjMTIuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTcuMDUuMDAjU3VscGhvbmF0ZWQjMTIuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMDAuMDAuMDAjQ2FyYm9uIGJhc2VkIGNoZW1pY2FscyBhbmQgY29tcG91bmRlZCBjaGVtaWNhbHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDAuMDAjQWxjb2hvbHMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDEuMDAjQW1pbm8gYWxjb2hvbHMjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDIuMDAjQmVuenlsIGFsY29ob2xzIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjAzLjAwI0NobG9yb2h5ZHJpbnMjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDQuMDAjRXRoYW5vbCMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wNS4wMCNGYXR0eSBhbGNvaG9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wNi4wMCNHbHljb2xzIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjA3LjAwI0hleGFub2xzIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjA4LjAwI01ldGhhbm9sIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjA5LjAwI1BvbHkgdmlueWwgb3IgUFYgIGFsY29ob2wjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMTAuMDAjUHJvcGFub2xzIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjExLjAwI1N1Z2FyIGFsY29ob2xzIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjEyLjAwI0J1dHlsIGFsY29ob2xzIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjEzLjAwI0lzb3Byb3B5bCBhbGNvaG9sIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE2LjAwLjAwI0h5ZHJvY2FyYm9ucyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNi4wMS4wMCNBY3ljbGljIG9yIGN5Y2xpYyBvciBwb2x5Y3ljbGljIGh5ZHJvY2FyYm9ucyMxMi4yMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNi4wMi4wMCNIYWxvZ2VuYXRlZCBoeWRyb2NhcmJvbnMjMTIuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTYuMDMuMDAjU3VscGhvbmF0ZWQgaHlkcm9jYXJib25zIzEyLjIxLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE2LjA0LjAwI05pdHJvc2F0ZWQgaHlkcm9jYXJib25zIzEyLjIxLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE3LjAwLjAwI0FsZGVoeWRlcyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNy4wMS4wMCNBY2V0YWxhbGRlaHllcyMxMi4yMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNy4wMi4wMCNHbHlveGFscyMxMi4yMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOC4wMC4wMCNFdGhlcnMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTguMDEuMDAjQWNldGFsIGV0aGVycyMxMi4yMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOC4wMi4wMCNFdGh5bCBldGhlcnMjMTIuMjEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTguMDMuMDAjTWV0aHlsIGV0aGVycyMxMi4yMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOC4wNC4wMCNQaGVueWwgZXRoZXJzIzEyLjIxLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE4LjA1LjAwI01ldGh5bCB0ZXRyYSBidXR5bCBldGhlciMxMi4yMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOS4wMC4wMCNLZXRvbmVzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjE5LjAxLjAwI0FjZXRvbmVzIzEyLjIxLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE5LjAyLjAwI0NhbXBob3JzIzEyLjIxLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE5LjAzLjAwI0tldG9uZSBib2RpZXMjMTIuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTkuMDQuMDAjTWFubmljaCBiYXNlcyMxMi4yMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMC4wMC4wMCNQaGVub2xzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIwLjAxLjAwI0Jyb21waGVub2wgYmx1ZSMxMi4yMS4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMC4wMi4wMCNDcmVzb2xzIzEyLjIxLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIxLjAwLjAwI0NhcmJvaHlkcmF0ZXMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjEuMDEuMDAjU2ltcGxlIHN1Z2FycyBvciBpdHMgZGVyaXZhdGl2ZXMjMTIuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjEuMDIuMDAjR3VtIHJlc2lucyMxMi4yMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMS4wMy4wMCNTdGFyY2hlcyMxMi4yMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wMC4wMCNDb21wb3VuZHMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDEuMDAjQ2hlbWljYWwgYWxsb3lzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjAyLjAwI0N5YW5pZGVzIG9yIGN5YW5hdGVzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjAzLjAwI0FsdW1pbnVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wNC4wMCNCYXJpdW0gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjA1LjAwI0Jvcm9uIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wNi4wMCNCcm9taW5lIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wNy4wMCNDYWxjaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wOC4wMCNDYXJib24gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjA5LjAwI0NobG9yaW5lIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xMC4wMCNGbHVvcmluZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTEuMDAjR29sZCBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTIuMDAjSW9kaW5lIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xMy4wMCNJcm9uIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xNC4wMCNNYWduZXNpdW0gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjE1LjAwI05pdHJvZ2VuIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xNi4wMCNOaXRyaWxlIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xNy4wMCNPeHlnZW4gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjE4LjAwI1Bob3NwaG9yb3VzIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xOS4wMCNQb3Rhc3NpdW0gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjIwLjAwI1NlbGVuaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yMS4wMCNTaWxpY29uIG9yIHNpbGljb25lIG9yIHNpbGljYW5lIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yMi4wMCNTb2RpdW0gY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjIzLjAwI1N1bGZ1ciBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjQuMDAjVGluIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yNS4wMCNaaW5jIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yNi4wMCNIZXRlcm9jeWNsaWMgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjI3LjAwI0NvYmFsdCBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjguMDAjQW50aW1vbnkgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjI5LjAwI1RpdGFuaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wMC4wMCNPeGlkZXMgaW5jbHVkZXMgYWxsIG94aWRlZCBzdWJzdGFuY2VzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjAxLjAwI0FsdW1pbnVtIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wMi4wMCNDYXJib24gb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjAzLjAwI0h5cG9jaGxvcm91cyBhY2lkIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjA0LjAwI01hZ25lc2l1bSBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDUuMDAjTml0cm9nZW4gb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjA2LjAwI09zbWl1bSBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDcuMDAjUGVyb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjA4LjAwI1NpbGljb24gb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjA5LjAwI1N1bGZ1ciBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMTAuMDAjVGhvcml1bSBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMTEuMDAjV2F0ZXIgb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjEyLjAwI1ppbmMgb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjEzLjAwI0h5ZHJveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMTQuMDAjTWV0YWwgb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjE1LjAwI05vbiBtZXRhbCBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMTYuMDAjRXRoeWxlbmUgb3hpZGUjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDAuMDAjSXNvdG9wZXMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDEuMDAjRGV1dGVyYXRlZCBzb2x2ZW50cyMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wMi4wMCNIZWF2eSB3YXRlciMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wMy4wMCNBbHBoYSBzb3VyY2VzIzEyLjIxLjI0LjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjA0LjAwI0JldGEgc291cmNlcyMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wNS4wMCNDb2JhbHQgc291cmNlcyMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wNi4wMCNHYW1tYSBzb3VyY2VzIzEyLjIxLjI0LjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjA3LjAwI1JhZGlvaXNvdG9wZSBzb3VyY2VzIzEyLjIxLjI0LjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjA4LjAwI0NhbGlicmF0aW9uIHNvdXJjZXMjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMDAuMDAuMDAjQmlvIGNoZW1pY2FscyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wMC4wMCNQcm90ZWlucyMxMi4yMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wMS4wMCNBbGJ1bWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wMi4wMCNCYWN0ZXJpYWwgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDMuMDAjQmxvb2QgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDQuMDAjQm9uZSBtb3JwaG9nZW5ldGljIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjA1LjAwI0NhcnJpZXIgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDYuMDAjQ29udHJhY3RpbGUgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDcuMDAjRGlldGFyeSBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wOC4wMCNEZW94eXJpYm9udWNsZWljIGFjaWQgKEROQSkgYmluZGluZyBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wOS4wMCNFZ2cgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTAuMDAjR2xvYnVsaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjExLjAwI0dseWNvcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTIuMDAjSGVtZXByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjEzLjAwI0ludGVyZmVyb25zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjE0LjAwI0xlY3RpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTUuMDAjTGlwb3Byb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjE2LjAwI01lbWJyYW5lIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjE3LjAwI01ldGFsbG9wcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xOC4wMCNOZXJ2ZSB0aXNzdWUgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTkuMDAjTmVjdWxlb3Byb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjIwLjAwI1BlcHRvbmVzIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjIxLjAwI1BsYW50IHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjIyLjAwI1ByaW9ucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yMy4wMCNDeXRvcGxhc21pYyBvciBudWNsZWFyIHJlY2VwdG9ycyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yNC4wMCNSZWNvbWJpbmFudCBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yNS4wMCNTZXJwaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjI2LjAwI1RyYW5zY3JpcHRpb24gZmFjdG9ycyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yNy4wMCNWaXJhbCBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yOC4wMCNTY2xlcm9wcm90ZWluIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE2LjAwLjAwI0FudGlib2RpZXMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTYuMDEuMDAjVmlyYWwgYW50aWJvZGllcyMxMi4yMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wMi4wMCNBbnRpdG94aW5zIzEyLjIyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE2LjAzLjAwI0JhY3RlcmlhbCBhbnRpYm9kaWVzIzEyLjIyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE2LjA0LjAwI0F1dG9hbnRpYm9kaWVzIzEyLjIyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE2LjA1LjAwI0ltbXVuZSBzZXJhIzEyLjIyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE2LjA2LjAwI0ltbXVub2dsb2J1bGlucyMxMi4yMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNy4wMC4wMCNOdXRyaWVudHMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTcuMDEuMDAjVml0YW1pbnMjMTIuMjIuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDAuMDAjRW56eW1lcyMxMi4yMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wMS4wMCNIeWRyb2xhc2VzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjAyLjAwI0lzb2VuenltZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDMuMDAjSXNvbWVyYXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wNC4wMCNMaWdhc2VzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjA1LjAwI0x5YXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wNi4wMCNNdWx0aWVuenltZSBjb21wbGV4ZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDcuMDAjT3hpZG9yZWR1Y3Rhc2VzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjA4LjAwI1Blcm1lYXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wOS4wMCNUcmFuc2ZlcmVhc2VzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjEwLjAwI0NhdGFsYXNlIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE5LjAwLjAwI1Rpc3N1ZXMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTkuMDEuMDAjQ29ubmVjdGl2ZSB0aXNzdWVzIzEyLjIyLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE5LjAyLjAwI0VwaXRoZWxpdW1zIzEyLjIyLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE5LjAzLjAwI0V4b2NyaW5lIGdsYW5kcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wNC4wMCNMeW1waG9pZCB0aXNzdWVzIzEyLjIyLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE5LjA1LjAwI01lbWJyYW5lcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wNi4wMCNNdXNjbGVzIzEyLjIyLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE5LjA3LjAwI05lcnZlIHRpc3N1ZXMjMTIuMjIuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDAuMDAjQ3VsdHVyZXMgYW5kIGZsdWlkcyMxMi4yMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wMS4wMCNBZ2FyIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjAyLjAwI0Jyb3RoIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjAzLjAwI1NlcnVtIGZyZWUgY3VsdHVyZSBtZWRpYSMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wNC4wMCNDb25kaXRpb25lZCBjdWx0dXJlIG1lZGlhIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjA1LjAwI0JhY3RlcmlhIGN1bHR1cmVzIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjA2LjAwI0Jsb29kIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjA3LjAwI1VyZWEjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDguMDAjQmlsZSMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wOS4wMCNQbGFzbWEjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMTAuMDAjU2VtZW4gY3VsdHVyZXMjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjEuMDAuMDAjTnVjbGVpYyBhY2lkcyMxMi4yMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMS4wMS4wMCNSaWJvbnVjbGVpYyBhY2lkIChSTkEpIzEyLjIyLjIxLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIxLjAyLjAwI0Rlb3h5cmlib251Y2xlaWMgYWNpZCAoRE5BKSMxMi4yMi4yMS4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wMC4wMCNBbWlubyBhY2lkcyMxMi4yMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wMS4wMCNCcmFuY2hlZCBjaGFpbiBhbWlubyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wMi4wMCNDeWNsaWMgYW1pbm8gYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDMuMDAjRGlhbWlubyBhbWlubyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wNC4wMCNEaWNhcmJveHlsaWMgYW1pbm8gYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDUuMDAjRXNzZW50aWFsIGFtaW5vIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjA2LjAwI1N1bGZ1ciBhbWlubyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wNy4wMCNBbWlub2J1dHlyaWMgYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDguMDAjQW1pbm9jYXByb2ljIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjA5LjAwI094YW1pYyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4xMC4wMCNQaG9zcGhvYW1pbm8gYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMTEuMDAjUXVpc3F1YWxpYyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMy4wMC4wMCNBbWluZXMgYW5kIGFtaWRlcyBhbmQgaW1pbmVzIGFuZCBpbWlkZXMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjMuMDEuMDAjUHJpbWFyeSMxMi4yMi4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMy4wMi4wMCNTZWNvbmRhcnkjMTIuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjMuMDMuMDAjVGVydGlhcnkjMTIuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjMuMDQuMDAjU3BlY2lhbHR5IzEyLjIyLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIzLjA1LjAwI1N1bHBob25hdGVkIzEyLjIyLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIzLjAwLjAwLjAwI0lub3JnYW5pYyBjb21wb3VuZHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTAuMDAuMDAjTWluZXJhbCBhY2lkcyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMC4wMS4wMCNIeWRyb2Zsb3JpYyBhY2lkIzEyLjIzLjEwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEwLjAyLjAwI0h5ZHJvZmx1b3Jvc2lsaWNpYyBhY2lkIzEyLjIzLjEwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEwLjAzLjAwI0h5ZHJvZmxvdXJpYyBhY2lkIzEyLjIzLjEwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjExLjAwLjAwI0Jhc2VzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjExLjAxLjAwI1NvZGl1bSBoeWRyb3hpZGUjMTIuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTEuMDIuMDAjUG90YXNzaXVtIGh5ZHJveGlkZSMxMi4yMy4xMS4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMi4wMC4wMCNTYWx0cyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMi4wMS4wMCNBbW1vbml1bSBuaXRyYXRlIzEyLjIzLjEyLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEzLjAwLjAwI1N1bHBoYXRlcyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMy4wMS4wMCNGZXJyaWMgc3VscGhhdGUjMTIuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTMuMDIuMDAjQ29wcGVyIHN1bHBoYXRlIzEyLjIzLjEzLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEzLjAzLjAwI0FsdW1pbml1bSBzdWxwaGF0ZSMxMi4yMy4xMy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMy4wNC4wMCNTb2RpdW0gc3VscGhhdGUjMTIuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTMuMDUuMDAjU29kaXVtIHRoaW9zdWxwaGF0ZSMxMi4yMy4xMy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNC4wMC4wMCNDaGxvcmlkZXMgY2hsb3JhdGVzIGFuZCBwZXJjaGxvcmF0ZXMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTQuMDEuMDAjU29kaXVtIGNobG9yaXRlIzEyLjIzLjE0LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjAyLjAwI0ZlcnJpYyBDaGxvcmlkZSMxMi4yMy4xNC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNC4wMy4wMCNBbHVtaW5pdW0gY2hsb3JpZGUjMTIuMjMuMTQuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTQuMDQuMDAjUG9seSBhbHVtaW5pdW0gY2hsb3JpZGUjMTIuMjMuMTQuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTQuMDUuMDAjQWx1bWluaXVtIGNobG9yb2h5ZHJhdGUjMTIuMjMuMTQuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTQuMDYuMDAjU29kaXVtIGh5cG9jaGxvcml0ZSMxMi4yMy4xNC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNS4wMC4wMCNCb3JpZGVzIGFuZCBib3JhdGVzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjE1LjAxLjAwI1NvZGl1bSBib3JhdGUjMTIuMjMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTYuMDAuMDAjSHlkcmlkZXMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTYuMDEuMDAjQWx1bWluaXVtIGh5ZHJpdGUjMTIuMjMuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTYuMDIuMDAjTWFnbmVzaXVtIGh5ZHJpdGUjMTIuMjMuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTcuMDAuMDAjU3VscGhpZGVzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjE3LjAxLjAwI0h5ZHJvZ2VuIHN1bHBoaWRlIzEyLjIzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE3LjAyLjAwI1BvbHkgc3VscGhpZGUjMTIuMjMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTcuMDMuMDAjU29kaXVtIHN1bHBoaWRlIzEyLjIzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE3LjA0LjAwI0lyb24gc3VscGhpZGUjMTIuMjMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTguMDAuMDAjSW5vcmdhbmljIG94aWRpc2luZyBhZ2VudHMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTguMDEuMDAjUG90YXNzaXVtIHBlcm1hbmdhbmF0ZSMxMi4yMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xOC4wMi4wMCNQb3Rhc3NpdW0gZGljaHJvbWF0ZSMxMi4yMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xOC4wMy4wMCNNYW5nYW5lc2UgZGlveGlkZSMxMi4yMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4yNC4wMC4wMC4wMCNBbGNvaG9scyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wMC4wMCNNb25vaHlkcmljIGFsY29ob2xzIzEyLjI0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjAxLjAwI0V0aGFub2wjMTIuMjQuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDIuMDAjSXNvcHJvcGFub2wjMTIuMjQuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDMuMDAjTWV0aGFub2wjMTIuMjQuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDQuMDAjUGVudGFub2xzIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjA1LjAwI09jdGFub2xzIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjA2LjAwI0lub3NpdG9scyMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wNy4wMCNGYXR0eSBhbGNvaG9scyMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wOC4wMCNBbGx5bCBhbGNvaG9sIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjExLjAwLjAwI1BvbHloeWRyaWMgYWxjb2hvbHMjMTIuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTEuMDEuMDAjR2x5Y29sIzEyLjI0LjExLjAwLjAwCi11bnNwc2M3IzEyLjI0LjExLjAyLjAwI0dseWNlcm9sIzEyLjI0LjExLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEyLjAwLjAwI1RoaW8gYWxjb2hvbHMjMTIuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTIuMDEuMDAjRXRoYW5lIHRoaW9sIzEyLjI0LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEyLjAyLjAwI01ldGhhbmUgdGhpb2wjMTIuMjQuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMDAuMDAuMDAjQWxrYW5lcyBBbGtlbmVzIEFsa3luZXMgYW5kIEFyb21hdGljcyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMC4wMC4wMCNBbGthbmVzIzEyLjI1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEwLjAxLjAwI1BlbnRhbmUjMTIuMjUuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTAuMDIuMDAjSGV4YW5lIzEyLjI1LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI1LjExLjAwLjAwI0N5Y2xpYyBoeWRyb2NhcmJvbnMjMTIuMjUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTEuMDEuMDAjVG9sdWVuZSMxMi4yNS4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMS4wMi4wMCNYeWxlbmVzIzEyLjI1LjExLjAwLjAwCi11bnNwc2M3IzEyLjI1LjExLjAzLjAwI0JlbnplbmUjMTIuMjUuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTIuMDAuMDAjQWxrZW5lcyMxMi4yNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMi4wMS4wMCNQcm9wZW5lIzEyLjI1LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEyLjAyLjAwI0J1dGVuZSMxMi4yNS4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMi4wMy4wMCNTdHlyZW5lIzEyLjI1LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEzLjAwLjAwI0Fsa3luZXMjMTIuMjUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTMuMDEuMDAjQWN5dGVsZW5lIzEyLjI1LjEzLjAwLjAwCi11bnNwc2M3IzEyLjI2LjAwLjAwLjAwI0Fyb21hdGljIGRlcml2YXRpdmVzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEwLjAwLjAwI0Fyb21hdGljIHN1bHBob25pYyBhY2lkcyMxMi4yNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMC4wMS4wMCNCZW56ZW5lIHN1bHBob25pYyBhY2lkcyMxMi4yNi4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMC4wMi4wMCNIYWxvZ2VuYXRlZCBzdWxwaG9uaWMgYWNpZHMjMTIuMjYuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTAuMDMuMDAjTml0cm9zdWxwaG9uaWMgYWNpZHMjMTIuMjYuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTAuMDQuMDAjQW1pbm8gc3VscGhvbmljIGFjaWRzIzEyLjI2LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEwLjA1LjAwI1N1bHBob255bCBjaGxvcmlkZXMjMTIuMjYuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTEuMDAuMDAjQXJvbWF0aWMgbml0cm8gY29tcG91bmRzIzEyLjI2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjExLjAxLjAwI05pdHJvIGJlbnplbmVzIzEyLjI2LjExLjAwLjAwCi11bnNwc2M3IzEyLjI2LjExLjAyLjAwI05pdHJvIHRvbHVlbmVzIzEyLjI2LjExLjAwLjAwCi11bnNwc2M3IzEyLjI2LjExLjAzLjAwI0NhcHJvbGFjdGFtIzEyLjI2LjExLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEyLjAwLjAwI0N5Y2xpYyBhbGNvaG9scyMxMi4yNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMi4wMS4wMCNIZXhhbm9scyMxMi4yNi4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMi4wMi4wMCNOYXB0aG9scyMxMi4yNi4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMi4wMy4wMCNYeWxlbm9scyMxMi4yNi4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMi4wNC4wMCNCZW56eWwgYWxjb2hvbHMjMTIuMjYuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTMuMDAuMDAjUGh0aGFsYXRlcyMxMi4yNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMy4wMS4wMCNEaSBvY3R5bCBQaHRoYWxhdGUjMTIuMjYuMTMuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTMuMDIuMDAjRGkgZXRoeWwgcGh0aGFsYXRlcyMxMi4yNi4xMy4wMC4wMAotdW5zcHNjNyMxMy4wMC4wMC4wMC4wMCNSZXNpbiBhbmQgUm9zaW4gYW5kIFJ1YmJlciBhbmQgRm9hbSBhbmQgRmlsbSBhbmQgRWxhc3RvbWVyaWMgTWF0ZXJpYWxzIzEzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjAwLjAwLjAwI1J1YmJlciBhbmQgZWxhc3RvbWVycyMxMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNS4wMC4wMCNOYXR1cmFsIHJ1YmJlciMxMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNS4wMS4wMCNMYXRleCBydWJiZXIjMTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTUuMDIuMDAjQ3JlcGUgcnViYmVyIzEzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE1LjAzLjAwI1Ntb2tlZCBzaGVldCBydWJiZXIjMTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTUuMDQuMDAjTmF0dXJhbCBmb2FtIHJ1YmJlciMxMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNS4wNS4wMCNCbG9jayBvciBjcnVtYiBydWJiZXIjMTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDAuMDAjUHJvY2Vzc2VkIGFuZCBzeW50aGV0aWMgcnViYmVyIzEzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjAxLjAwI1Z1bGNhbml6ZWQgcnViYmVyIzEzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjAyLjAwI0NobG9yaW5hdGVkIHJ1YmJlciMxMy4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNi4wMy4wMCNIeWRyb2NobG9yaWRlIHJ1YmJlciMxMy4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNi4wNC4wMCNDeWNsaXplZCBydWJiZXIjMTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDUuMDAjSXNvbWVyaXplZCBydWJiZXIjMTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDYuMDAjVGhlcm1wbGFzdGljIHJ1YmJlciMxMy4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNi4wNy4wMCNSdWJiZXIgY29tcG91bmQjMTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDAuMDAjRWxhc3RvbWVycyMxMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wMS4wMCNBY3J5bG9uaXRyaWxlIGJ1dGFkaWVuZSAoTkJSKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wMi4wMCNIaWdobHkgc2F0dXJhdGVkIG5pdHJpbGUgKEhOQlIpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjAzLjAwI0ZsdW9yb2NhcmJvbiAoRktNKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wNC4wMCNFdGh5bGVuZSBwcm9weWxlbmUgKEVQKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wNS4wMCNTdHlyZW5lIGJ1dGFkaWVuZSAoU0JSKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wNi4wMCNDaGxvcm9wcmVuZSAoQ1IpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjA3LjAwI0lzb2J1dHlsZW5lIGlzb3ByZW5lIChJSVIvWElJUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDguMDAjU2lsaWNvbmUgKFZNUSBhbmQgUE1RIGFuZCBQVk1RKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wOS4wMCNGbHVvcm9zaWxpY29uZSAoRlZNUSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMTAuMDAjUG9seWFjcnlsYXRlIChBQ00pIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjExLjAwI0V0aHlsZW5lIGFjcnlsaWMgKEFFTSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMTIuMDAjQ2hsb3Jvc3VsZm9uYXRlZCBwb2x5ZXRoeWxlbmUgKENTTSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMTMuMDAjQ2hsb3JvcG9seWV0aHlsZW5lIChDTSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMTQuMDAjRXBpY2hsb3JvaHlkcmluIChFQ08pIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjE1LjAwI05hdHVyYWwgcG9seWlzb3ByZW5lIChOUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMTYuMDAjU3ludGhldGljIHBvbHlpc29wcmVuZSAoSVIpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjE3LjAwI1BvbHllc3RlciB1cmV0aGFuZSAoQVUpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjE4LjAwI1BvbHlldGhlciB1cmV0aGFuZSAoRVUpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjE5LjAwI1BvbHlidXRhZGllbmUgKEJSKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4yMC4wMCNQb2x5ZXRoZXIgYmxvY2sgYW1pZGUgKFBFQkEpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjIxLjAwI1N0eXJlbmUgYmxvY2sgY29wbG95bWVyIChURVMpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjIyLjAwI0NvcG9seWVzdGVyIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjIzLjAwI1RoZXJtb3BsYXN0aWMjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMjQuMDAjUG9seW9sZW5maW5pYyMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOC4wMC4wMCNUaGVybW9wbGFzdGljIGVsYXN0b21lcnMjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTguMDEuMDAjUG9seWV0aGVyIGJsb2NrIGFtaWRlIChQRUJBKSMxMy4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOC4wMi4wMCNQb2x5b2xlbmZpbmljIChUUE8pIzEzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE4LjAzLjAwI0V0aGVyIGVzdGVyIGJsb2NrIGNvcGxveW1lciAoVEVFRSkjMTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTguMDQuMDAjVGhlcm1vcGxhc3RpYyBlbGFzdG9tZXIgcG9seXVyZXRoYW5lIChUUFVSKSMxMy4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOC4wNS4wMCNTdHlyZW5lIGJsb2NrIGNvcGxveW1lciAoVEVTKSMxMy4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOS4wMC4wMCNUaGVybW9zZXQgcGxhc3RpY3MjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTkuMDEuMDAjRXBveHkgKEVQKSMxMy4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOS4wMi4wMCNQaGVub2xpYyAoUEYpIzEzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE5LjAzLjAwI1Vuc2F0dXJhdGUgcG9seWVzdGVyIChVUCkjMTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTkuMDQuMDAjVXJlYSAoVUYpIzEzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE5LjA1LjAwI01lbGFtaW5lIChNRikjMTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTkuMDYuMDAjVGhlcm1vc2V0IHBvbHl1cmV0aGFuZSAoUFVSKSMxMy4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wMC4wMCNUaGVybW9wbGFzdGljIHBsYXN0aWNzIzEzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjAxLjAwI0Fjcnlsb25pdHJpbGUgYnV0YWRpZW5lIHN0eXJlbmUgKEFCUykjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDIuMDAjQWNyeWxvbml0cmlsZSBidXRhZGllbmUgc3R5cmVuZSAoQUJTKSBhbGxveXMjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDMuMDAjQWNldGFsIHBvbHltZXIjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDQuMDAjQWNyeWxpYyMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wNS4wMCNBY3J5bG9uaXRyaWxlIHN0eXJlbmUgYWNyeWxpYyAoQVNBKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wNi4wMCNBY3J5bG9uaXRyaWxlIHN0eXJlbmUgYWNyeWxpYyAoQVNBKSBhbGxveXMjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDcuMDAjQ2VsbHVsb3NpY3MjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDguMDAjRmx1b3JvcG9seW1lcnMgKFBURkUpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjA5LjAwI0V0aHlsZW5lIHZpbnlsIGFjZXRhdGUgKEVWQSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTAuMDAjTGlxdWlkIGNyeXN0YWwgcG9seW1lciAoTENQKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xMS4wMCNQb2x5YW1pZGUgbnlsb25zIChQQSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTIuMDAjUG9seWJ1dHlsZW5lIHRlcmVwdGhhbGF0ZSAoUEJUKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xMy4wMCNQb2x5Y2FyYm9uYXRlIChQQykjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTQuMDAjUG9seWV0aGVyZXRoZXJrZXRvbmUgKFBFRUspIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjE1LjAwI1BvbHlldGhlcmltaWQgKFBFSSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTYuMDAjUG9seWV0aGVyc3VsZm9uZSAoUEVTKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xNy4wMCNIaWdoIGRlbnNpdHkgcG9seWV0aHlsZW5lIChIRFBFKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xOC4wMCNMb3cgZGVuc2l0eSBwb2x5ZXRoeWxlbmUgKExEUEUpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjE5LjAwI01lZGl1bSBkZW5zaXR5IHBvbHlldGh5bGVuZSAoTURQRSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjAuMDAjUG9seWV0aHlsZW5lIHRlcmVwdGhhbGF0ZSAoUEVUKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yMS4wMCNQb2x5aW1pZGUgKFBJKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yMi4wMCNQb2x5cHJvcHlsZW5lIChQUCkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjMuMDAjUG9seXBodGhhbGFtaWRlIChQUEEpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjI0LjAwI1BvbHl0aGVueWxlbmUgb3hpZGUgKFBQTykjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjUuMDAjUG9seXBoZW55bGVuZSBzdWxmaWRlIChQUFMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjI2LjAwI1BvbHlzdHlyZW5lIChQUykjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjcuMDAjSGlnaCBpbXBhY3QgcG9seXN0eXJlbmUgKEhJUFMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjI4LjAwI1BvbHlzdWxmb25lIChQU1UpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjI5LjAwI1JpZ2lkIHRoZXJtb3BsYXN0aWMgcG9seXVyZXRoYW5lIChSUFRVKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4zMC4wMCNQb2x5dmlueWwgY2hsb3JpZGUgKFBWQykjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMzEuMDAjU3R5cmVuZSBhY3J5bG9uaXRyaWxlIChTQU4pIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjAwLjAwI1Jlc2lucyMxMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wMS4wMCNQbGFzdGljIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wMi4wMCNJbmRlbmUgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjAzLjAwI1VyZWEgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjA0LjAwI1BoZW5vbGljIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wNS4wMCNUaGVybW9wbGFzdGljIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wNi4wMCNBbGt5ZCByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDcuMDAjTWVsYW1pbmUgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjA4LjAwI1BvbHlhY2V0YWwgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjA5LjAwI1BvbHlhbWlkZSByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMTAuMDAjUG9seWNhcmJvbmF0ZSByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMTEuMDAjUG9seWV0aHlsZW5lIHRlcmVwaHRoYWxhdGUgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjEyLjAwI1BvbHlldGhlciByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMTMuMDAjQWxseWwgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjE0LjAwI1BvbHl1cmV0aGFuZSByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMTUuMDAjRXBveHkgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjE2LjAwI1BldHJvbGV1bSByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjIuMDAuMDAjUGxhc3RpYyBmaWxtcyMxMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMi4wMS4wMCNQb2x5dXJldGhhbmUgZmlsbXMjMTMuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjIuMDIuMDAjU2lsaWNvbmUgY29hdGVkIGZpbG1zIzEzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzEzLjExLjAwLjAwLjAwI1Jlc2lucyBhbmQgcm9zaW5zIGFuZCBvdGhlciByZXNpbiBkZXJpdmVkIG1hdGVyaWFscyMxMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wMC4wMCNSZXNpbnMjMTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDEuMDAjRXBveHkjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDIuMDAjUGhlbm9saWMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDMuMDAjVW5zYXR1cmF0ZWQgcG9seWVzdGVyIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjA0LjAwI0Fjcnlsb25pdHJpbGUgYnV0YWRpZW5lIHN0eXJlbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDUuMDAjQWNyeWxvbml0cmlsZSBzdHlyZW5lIGFjcnlsaWMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDYuMDAjQWNyeWxvbml0cmlsZSBzdHlyZW5lIGFjcnlsaWMgYWxsb3lzIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjA3LjAwI0ZsdW9yb3BvbHltZXJzIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjA4LjAwI0V0aHlsZW5lIHZpbnlsIGFjZXRhdGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDkuMDAjTGlxdWlkIGNyeXN0YWwgcG9seW1lciMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xMC4wMCNOeWxvbiMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xMS4wMCNQb2x5YnV0eWxlbmUgdGVyZXB0aGF0bGF0ZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xMi4wMCNQb2x5Y2FyYm9uYXRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjEzLjAwI1BvbHlldGhlcmV0aGVya2V0b25lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjE0LjAwI1BvbHlldGhlcmltaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjE1LjAwI1BvbHlldGhlcnN1bGZvbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTYuMDAjUG9seWV0aHlsZW5lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjE3LjAwI1BvbHlldGh5bGVuZSB0ZXJwdGhhbGF0ZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xOC4wMCNQb2x5aW1pZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTkuMDAjUG9seXByb3B5bGVuZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yMC4wMCNQb2x5cGh0aGFsYW1pZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjEuMDAjUG9seWV0aHlsZW5lIG94aWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjIyLjAwI1BvbHlwaGVueWxlbmUgc3VsZmlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yMy4wMCNQb2x5c3R5cmVuZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yNC4wMCNQb2x5c3VsZm9uZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yNS4wMCNQb2x5dmlueWwgY2hsb3JpZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjYuMDAjU3R5cmVuZSBhY3J5bG9uaXRyaWxlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjI3LjAwI1VyZWEgZm9ybWFsZGVoeWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjI4LjAwI0Fsa3lkIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjI5LjAwI01lbGFtaW5lIGZvcm1hbGRlaHlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zMC4wMCNQb2x5YWNldGFsIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjMxLjAwI1BvbHlhbWlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zMi4wMCNBbGx5bCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zMy4wMCNFdGh5bGVuZSBhY3J5bGljIGFjaWQjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzQuMDAjUG9seXZpbnlsIGNobG9yaWRlIGNvbXBvdW5kIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjM1LjAwI1NvbHV0aW9uIHZpbnlsIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjM2LjAwI1BoZW5veHkjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzcuMDAjQ29tcG91bmRlZCByZXNpbnMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzguMDAjUG9seXZpbmx5IHB5cm9saWRpbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzkuMDAjUG9seWV0aHlsZW5lIHRlcmVwaHRoYWxhdGUgb3IgZ2x5Y29sIG1vZGlmaWVkIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQwLjAwI0h5ZHJvY2FyYm9uIHRhY2tpZmllciMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40MS4wMCNQb2x5Y2FyYm9uYXRlIGJsZW5kcyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40Mi4wMCNQb2x5dmlueWwgYWxjb2hvbCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40My4wMCNQb2x5dmlueWwgYnV0eXJhbCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40NC4wMCNQb2x5ZXN0ZXIgbW9sZGluZyBjb21wb3VuZHMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDUuMDAjUG9seXZpbnlsIGFjZXRhdGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDYuMDAjUG9seXZpbnlsIGV0aGVyIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQ3LjAwI1BvbHl2aW55bCBmb3JtYWwjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDguMDAjU3R5cmVuZSBhY3J5bGljIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQ5LjAwI0V0aHlsZW5lIHByb3B5bGVuZSBwb2x5bWVycyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41MC4wMCNQb2x5cHJvcHlsZW5lIG94aWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjUxLjAwI1BvbHlwcm9weWxlbmUgZXRoZXIjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTIuMDAjUG9seXByb3B5bGVuZSBzdWxmb25lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjUzLjAwI1BvbHltZXRoeWxhY3J5bGF0ZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41NC4wMCNTdHlyZW5lIG1hbGVpYyBhbmh5ZHJpZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTUuMDAjU3luZGlvdGF0aWMgcG9seXN0eXJlbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTYuMDAjQ2hsb3JpbmF0ZWQgcG9seXZpbnlsIGNobG9yaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjU3LjAwI1RoZXJtb3BsYXN0aWMgcG9seWVzdGVyIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjU4LjAwI0luZGVuZSByZXNpbnMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTkuMDAjUGxhc3RpYyByZXNpbnMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNjAuMDAjUGV0cm9sZXVtIHJlc2lucyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC42MS4wMCNQb2x5dXJldGhhbmUgcmVzaW5zIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjYyLjAwI1BvbHlldGhlciByZXNpbnMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTEuMDAuMDAjUm9zaW5zIzEzLjExLjAwLjAwLjAwCi11bnNwc2M3IzEzLjExLjExLjAxLjAwI1dvb2Qgcm9zaW4jMTMuMTEuMTEuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTEuMDIuMDAjR3VtIHJvc2luIzEzLjExLjExLjAwLjAwCi11bnNwc2M3IzEzLjExLjExLjAzLjAwI1RhbGwgb2lsIHJvc2luIzEzLjExLjExLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjAwLjAwI0ZpbG1zIzEzLjExLjAwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjAxLjAwI1BvbHlldGh5bGVuZSBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wMi4wMCNQb2x5dXJldGhhbmUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDMuMDAjQWNldGF0ZSBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wNC4wMCNBY3J5bGljIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjA1LjAwI0NvZXh0cnVkZWQgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDYuMDAjRmxvdXJvcG9seW1lciBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wNy4wMCNNZXRhbGl6ZWQgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDguMDAjTnlsb24gZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDkuMDAjUG9seWNhcmJvbmF0ZSBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xMC4wMCNQb2x5ZXN0ZXIgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTEuMDAjUG9seXByb3B5bGVuZSBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xMi4wMCNCaWF4aWFsbHkgb3JpZW50YXRlZCBwb2x5cHJvcHlsZW5lIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjEzLjAwI1BvbHltaWRlIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjE0LjAwI1BvbHlzdHlyZW5lIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjE1LjAwI0ZsZXhpYmxlIHBvbHl2aW55bCBjaGxvcmlkZSBmaWxtIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjE2LjAwI1JpZ2lkIHBvbHl2aW55bCBjaGxvcmlkZSBmaWxtIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjE3LjAwI0V0aHlsZW5lIHZpbnlsIGFsY29ob2wgZmlsbSMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xOC4wMCNQb2x5dmlueWxpZGVuZSBjaGxvcmlkZSMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xOS4wMCNQb2x5dmlueWwgYWxjb2hvbCBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMy4wMC4wMCNGb2FtcyMxMy4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMy4wMS4wMCNQb2x5b2xlZmluIGZvYW0jMTMuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDIuMDAjUG9seWV0aGVyIGZvYW0jMTMuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDMuMDAjU2lsaWNvbmUgZm9hbSMxMy4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMy4wNC4wMCNFdGh5bGVuZSBwcm9weWxlbmUgdGVycG9seW1lciBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjA1LjAwI05lb3ByZW5lIGZvYW0jMTMuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDYuMDAjUG9seXZpbnlsIGNobG9yaWRlIGZvYW0jMTMuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDcuMDAjUnViYmVyIGZvYW0jMTMuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDguMDAjUG9seXN0eXJlbmUgZm9hbSMxMy4xMS4xMy4wMC4wMAotdW5zcHNjNyMxNC4wMC4wMC4wMC4wMCNQYXBlciBNYXRlcmlhbHMgYW5kIFByb2R1Y3RzIzE0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEwLjAwLjAwLjAwI1BhcGVyIG1hdGVyaWFscyMxNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMC4xNS4wMC4wMCNSYXcgbWF0ZXJpYWxzIzE0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEwLjE1LjAxLjAwI1BhcGVyIHB1bHAjMTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMDAuMDAuMDAjUGFwZXIgcHJvZHVjdHMjMTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDAuMDAjUHJpbnRpbmcgYW5kIHdyaXRpbmcgcGFwZXIjMTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDEuMDAjT25pb24gc2tpbiBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wMi4wMCNWZWxsdW0gcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDMuMDAjUGFyY2htZW50IHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjA0LjAwI1RyYWN0b3IgZmVlZCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wNS4wMCNNaW1lb2dyYXBoIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjA2LjAwI0NvbXB1dGVyIHByaW50b3V0IHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjA3LjAwI1ByaW50ZXIgb3IgY29waWVyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjA4LjAwI0ZhY3NpbWlsZSBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wOS4wMCNTdGF0aW9uZXJ5IzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjEwLjAwI1Bsb3R0ZXIgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTEuMDAjV3JpdGluZyBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xMi4wMCNHcmFwaCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xMy4wMCNMZWRnZXIgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTQuMDAjUGFwZXIgcGFkcyBvciBub3RlYm9va3MjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTUuMDAjQ2FsY3VsYXRvciBvciBjYXNoIHJlZ2lzdGVyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjE2LjAwI05vdGVib29rIGZpbGxlciBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xNy4wMCNCdXNpbmVzcyBmb3JtcyMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xOC4wMCNJbmRleCBjYXJkcyMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xOS4wMCNDYXJkc3RvY2sgcGFwZXJzIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjIwLjAwI0Jsb3R0ZXIgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjEuMDAjTGFzZXIgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjIuMDAjSW5ramV0IHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjIzLjAwI1RyYWNpbmcgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjQuMDAjRm9vbHNjYXAgc2hlZXRzIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjI1LjAwI011bHRpcHVycG9zZSBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yNi4wMCNUZWxlcGhvbmUgbWVzc2FnZSBwYWRzIG9yIGJvb2tzIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjI4LjAwI01hZ25ldCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yOS4wMCNUZWxleCByb2xscyMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4zMC4wMCNTZWxmIGFkaGVzaXZlIG5vdGUgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTYuMDAuMDAjTm92ZWx0eSBwYXBlciMxNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNi4wMS4wMCNHaWZ0IHdyYXBwaW5nIHBhcGVyIG9yIGJhZ3Mgb3IgYm94ZXMjMTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTYuMDQuMDAjQnVzaW5lc3MgY2FyZHMjMTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTYuMDUuMDAjR3JlZXRpbmcgb3Igbm90ZSBvciBwb3N0IGNhcmRzIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjA2LjAwI0FydCBvciBjcmFmdCBwYXBlciMxNC4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNi4wNy4wMCNQb3N0ZXIgYm9hcmRzIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjA4LjAwI0dpZnQgY2VydGlmaWNhdGUjMTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTYuMDkuMDAjQ292ZXIgcGFwZXIjMTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTcuMDAuMDAjUGVyc29uYWwgcGFwZXIgcHJvZHVjdHMjMTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTcuMDEuMDAjRmFjaWFsIHRpc3N1ZXMjMTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTcuMDIuMDAjVG9pbGV0IHNlYXQgY292ZXJzIzE0LjExLjE3LjAwLjAwCi11bnNwc2M3IzE0LjExLjE3LjAzLjAwI1BhcGVyIHRvd2VscyMxNC4xMS4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNy4wNC4wMCNUb2lsZXQgdGlzc3VlIzE0LjExLjE3LjAwLjAwCi11bnNwc2M3IzE0LjExLjE3LjA1LjAwI1BhcGVyIG5hcGtpbnMgb3Igc2VydmlldHRlcyMxNC4xMS4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNy4wNi4wMCNQYXBlciB0YWJsZSBjbG90aCMxNC4xMS4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMS4xOC4wMC4wMCNCdXNpbmVzcyB1c2UgcGFwZXJzIzE0LjExLjAwLjAwLjAwCi11bnNwc2M3IzE0LjExLjE4LjAxLjAwI1RpY2tldHMgb3IgdGlja2V0IHJvbGxzIzE0LjExLjE4LjAwLjAwCi11bnNwc2M3IzE0LjExLjE4LjAyLjAwI1JlY2VpcHRzIG9yIHJlY2VpcHQgYm9va3MjMTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTguMDMuMDAjVm91Y2hlcnMjMTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTguMDQuMDAjQmlsbHMgb3IgYmlsbCBib29rcyMxNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xOC4wNS4wMCNDaGVja3Mgb3IgY2hlY2sgYm9va3MjMTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMDAuMDAuMDAjSW5kdXN0cmlhbCB1c2UgcGFwZXJzIzE0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjE1LjAwLjAwI1BhcGVyYm9hcmQgYW5kIHBhY2thZ2luZyBwYXBlcnMjMTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTUuMDEuMDAjQmxlYWNoZWQgcGFwZXJib2FyZCMxNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNS4wMi4wMCNVbmJsZWFjaGVkIHBhcGVyYm9hcmQjMTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTUuMDMuMDAjQ2FyZGJvYXJkIzE0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE1LjA0LjAwI1BhY2thZ2luZyBwYXBlciMxNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wMC4wMCNUaXNzdWUgcGFwZXJzIzE0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjE2LjAxLjAwI1VuYmxlYWNoZWQgY3JlcGUgcGFwZXJzIzE0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE2LjAyLjAwI1NlbWkgYmxlYWNoZWQgY3JlcGUgcGFwZXJzIzE0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE2LjAzLjAwI1dldCBzdHJlbmd0aCB0aXNzdWUgcGFwZXJzIzE0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE2LjA0LjAwI0FjaWQgZnJlZSB0aXNzdWUgcGFwZXJzIzE0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE2LjA1LjAwI0tyYWZ0IHRpc3N1ZSBwYXBlciMxNC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNy4wMC4wMCNMYW1pbmF0ZWQgcGFwZXJzIzE0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjE3LjAxLjAwI1BhcGVycyBib25kZWQgd2l0aCBmaWxtIzE0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE3LjAyLjAwI0N5bGluZGVyIHBhcGVycyBvciBtdWx0aSBsYXllciBoZWF2eXdlaWdodCBwYXBlciMxNC4xMi4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wMC4wMCNDb2F0ZWQgcGFwZXJzIzE0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjAxLjAwI0NsYXkgY29hdGVkIHBhcGVycyMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wMi4wMCNQb2x5ZXRoeWxlbmUgY29hdGVkIHBhcGVycyMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wMy4wMCNQb2x5ZXN0ZXIgY29hdGVkIHBhcGVycyMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wNC4wMCNTaWxpY29uZSBjb2F0ZWQgcGFwZXJzIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjA1LjAwI0xhdGV4IHRyZWF0ZWQgY29hdGVkIHBhcGVyIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjA2LjAwI1dheGVkIHBhcGVyIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjA3LjAwI0J1dGNoZXIgcGFwZXJzIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjA4LjAwI0ZyZWV6ZXIgcGFwZXIjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDkuMDAjTWFza2luZyBwYXBlciMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4xMC4wMCNDYXJib24gcGFwZXJzIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE5LjAwLjAwI05ld3NwcmludCBhbmQgb2Zmc2V0IHBhcGVycyMxNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOS4wMS4wMCNTdGFuZGFyZCBuZXdzcHJpbnQjMTQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTkuMDIuMDAjQ29sb3JlZCBuZXdzcHJpbnQjMTQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTkuMDMuMDAjSGlnaCBicmlnaHRuZXNzIG5ld3NwcmludCMxNC4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOS4wNC4wMCNPZmZzZXQgcGFwZXIjMTQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjAuMDAuMDAjU3BlY2lhbHR5IGNvYXRlZCBwYXBlcnMjMTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjAuMDEuMDAjQnV0Y2hlciBwYXBlcnMjMTQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjAuMDIuMDAjRnJlZXplciBwYXBlciMxNC4xMi4yMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wMC4wMCNVbmNvYXRlZCBiYXNlIHBhcGVycyMxNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wMS4wMCNTdXBlciBjYWxlbmRhcmVkIGtyYWZ0IHBhcGVyIzE0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIxLjAyLjAwI01hY2hpbmUgZmluaXNoZWQgb3IgZ2xhemVkIGtyYWZ0IHBhcGVyIzE0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIxLjAzLjAwI05vbiB0cmVhdGVkIHVuY29hdGVkIHBhcGVyIzE0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIxLjA0LjAwI05vbiB0cmVhdGVkIGNyZXBlIHBhcGVyIzE0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIxLjA1LjAwI0xhdGV4IHRyZWF0ZWQgY3JlcGUgcGFwZXIjMTQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjEuMDYuMDAjTGF0ZXggdHJlYXRlZCB1bmNvYXRlZCBwYXBlciMxNC4xMi4yMS4wMC4wMAotdW5zcHNjNyMxNS4wMC4wMC4wMC4wMCNGdWVscyBhbmQgRnVlbCBBZGRpdGl2ZXMgYW5kIEx1YnJpY2FudHMgYW5kIEFudGkgY29ycm9zaXZlIE1hdGVyaWFscyMxNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMC4wMC4wMC4wMCNGdWVscyMxNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wMC4wMCNQZXRyb2xldW0gYW5kIGRpc3RpbGxhdGVzIzE1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjAxLjAwI0Z1ZWwgb2lsIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjAyLjAwI0tlcm9zZW5lIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjAzLjAwI05hcGh0aGEjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDQuMDAjQXZpYXRpb24gZnVlbCMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wNS4wMCNEaWVzZWwgZnVlbCMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wNi4wMCNHYXNvbGluZSMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wNy4wMCNQZXRyb2wjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDguMDAjQ3J1ZGUgb2lsIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjA5LjAwI01hcmluZSBmdWVsIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjEwLjAwI0NvbmRlbnNhdGUjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTYuMDAuMDAjQ29hbCBhbmQgbGlnbml0ZSBhbmQgcGVhdCMxNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNi4wMS4wMCNDb2FsIzE1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE2LjAyLjAwI0xpZ25pdGUjMTUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTYuMDMuMDAjUGVhdCMxNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNi4wNC4wMCNDb2tlIzE1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE2LjA1LjAwI0NoYXJjb2FsIzE1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzE1LjExLjAwLjAwLjAwI0dhc2VvdXMgZnVlbHMgYW5kIGFkZGl0aXZlcyMxNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wMC4wMCNHYXNlb3VzIGZ1ZWxzIzE1LjExLjAwLjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjAxLjAwI1Byb3BhbmUjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDIuMDAjTWV0aGFuZSMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wMy4wMCNQcm9weWxlbmUjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDQuMDAjRXRoeWxlbmUjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDUuMDAjQnV0YW5lIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjA2LjAwI0FjZXR5bGVuZSMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wNy4wMCNXYXRlciBnYXMgb3IgcHJvZHVjZXIgZ2FzIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjA4LjAwI0NvYWwgZ2FzIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjA5LjAwI0xpcXVpZmllZCBwZXRyb2xldW0gZ2FzIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjEwLjAwI0Z1ZWwgYWRkaXRpdmVzIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE2LjAwLjAwI0Z1ZWwgYWRkaXRpdmVzIzE1LjExLjAwLjAwLjAwCi11bnNwc2M3IzE1LjExLjE2LjAxLjAwI0V0aGFub2wjMTUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTYuMDIuMDAjTWV0aGFub2wjMTUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMDAuMDAuMDAjTHVicmljYW50cyBhbmQgb2lscyBhbmQgZ3JlYXNlcyBhbmQgYW50aSBjb3Jyb3NpdmVzIzE1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjAwLjAwI0x1YnJpY2F0aW5nIHByZXBhcmF0aW9ucyMxNS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wMS4wMCNFbmdpbmUgb2lsIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjAyLjAwI0N1dHRpbmcgb2lsIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjAzLjAwI0dlYXIgb2lsIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjA0LjAwI0h5ZHJhdWxpYyBvaWwjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMDUuMDAjVHJhbnNmb3JtZXIgb2lsIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjA3LjAwI0xpdGhpdW0gZ3JlYXNlIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjA4LjAwI1RyYW5zbWlzc2lvbiBvaWwjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMDkuMDAjQnJha2Ugb2lsIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjEwLjAwI0FudGlnYWxsaW5nIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjExLjAwI0Fzc2VtYmx5IHBhc3RlcyMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4xMi4wMCNBbnRpIGFkaGVzaXZlcyMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4xMy4wMCNHcmFwaGl0ZSBsdWJyaWNhbnRzIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjE0LjAwI1NwcmF5IGx1YnJpY2FudHMjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMTUuMDAjQW50aSBzZWl6ZSBvciBhbnRpIHN0YWluIGNvbXBvdW5kcyMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4xNi4wMCNMZWFrIHN0b3AjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTYuMDAuMDAjV2F4ZXMjMTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTYuMDEuMDAjUGFyYWZmaW4gd2F4IzE1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE2LjAyLjAwI1NlYWxpbmcgd2F4IzE1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE2LjAzLjAwI09sZWZpbiB3YXgjMTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTcuMDAuMDAjU3BlY2lhbHR5IGx1YnJpY2FudHMjMTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTcuMDEuMDAjUGV0cm9sYXR1bSMxNS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOC4wMC4wMCNBbnRpIGNvcnJvc2l2ZXMjMTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTguMDEuMDAjTW9pc3R1cmUgcmVwZWxsZW50IzE1LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE4LjAyLjAwI0FudGkgY29ycm9zaW9uIGx1YnJpY2FudCMxNS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOC4wMy4wMCNSdXN0IHJlbW92ZXIjMTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTguMDQuMDAjUnVzdCBwcm9vZmluZyBwcmVwYXJhdGlvbiMxNS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOC4wNS4wMCNBbnRpIHdlbGQgcGFzdGVzIzE1LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE5LjAwLjAwI0dyZWFzZXMjMTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTkuMDEuMDAjU2lsaWNvbmUgZ3JlYXNlIzE1LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE5LjAyLjAwI0dyZWFzZSMxNS4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOS4wMy4wMCNUZWZsb24gZ3JlYXNlIzE1LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE5LjA0LjAwI1dvb2wgZ3JlYXNlIzE1LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE1LjEzLjAwLjAwLjAwI0Z1ZWwgZm9yIG51Y2xlYXIgcmVhY3RvcnMjMTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMTUuMDAuMDAjTnVjbGVhciBmdWVsIzE1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEzLjE1LjAyLjAwI0RlcGxldGVkIHVyYW5pdW0jMTUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMTUuMDMuMDAjRW5yaWNoZWQgdXJhbml1bSMxNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMy4xNS4wNC4wMCNJcmlkaXVtIzE1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEzLjE1LjA1LjAwI0VucmljaGVkIHBsdXRvbml1bSMxNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMy4xNS4wNi4wMCNEZXBsZXRlZCBwbHV0b25pdW0jMTUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMTYuMDAuMDAjRmlzc2lvbiBmdWVsIGFzc2VtYmxpZXMjMTUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMTYuMDEuMDAjTnVjbGVhciBmdWVsIHJvZCMxNS4xMy4xNi4wMC4wMAotdW5zcHNjNyMyMC4wMC4wMC4wMC4wMCNNaW5pbmcgTWFjaGluZXJ5IGFuZCBBY2Nlc3NvcmllcyMyMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMC4wMC4wMC4wMCNNaW5pbmcgYW5kIHF1YXJyeWluZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNS4wMC4wMCNDdXR0aW5nIGVxdWlwbWVudCMyMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNS4wMS4wMCNDb250aW51b3VzIG1pbmluZyBlcXVpcG1lbnQjMjAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTUuMDIuMDAjTG9uZ3dhbGwgc2hlYXJzIzIwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE1LjAzLjAwI0NvYWwgY3V0dGVycyMyMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNS4wNC4wMCNSb2NrIGN1dHRlcnMjMjAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTYuMDAuMDAjU2NyZWVucyBhbmQgZmVlZGluZyBlcXVpcG1lbnQjMjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTYuMDEuMDAjU2NyZWVucyMyMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNi4wMi4wMCNGZWVkZXJzIzIwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjAwLjAwI0NydXNoZXJzIGFuZCBicmVha2VycyBhbmQgZ3JpbmRlcnMjMjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDEuMDAjUm9jayBjcnVzaGVycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wMi4wMCNSb2xsIGNydXNoZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjAzLjAwI0NvbmUgY3J1c2hlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDQuMDAjR3lyYXRvcnkgY3J1c2hlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDUuMDAjSW1wYWN0IGNydXNoZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjA2LjAwI0phdyBjcnVzaGVycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wNy4wMCNDcnVzaGluZyBwbGFudHMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDguMDAjUm9kIG1pbGxzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjA5LjAwI0JhbGwgbWlsbHMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMTAuMDAjUHVsdmVyaXppbmcgbWFjaGluZXJ5IzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjExLjAwI1JvY2sgYnJlYWtlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMTIuMDAjRWFydGggZ3JpbmRlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMTMuMDAjQ3ljbG9uZSBvciB2b3J0ZXggZ3JpbmRlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMDAuMDAuMDAjV2VsbCBkcmlsbGluZyBhbmQgb3BlcmF0aW9uIGVxdWlwbWVudCMyMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wMC4wMCNEcmlsbGluZyBhbmQgZXhwbG9yYXRpb24gZXF1aXBtZW50IzIwLjExLjAwLjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjAxLjAwI0dhcyB3ZWxsIGRyaWxsaW5nIGVxdWlwbWVudCMyMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wMi4wMCNPaWwgd2VsbCBkcmlsbGluZyBlcXVpcG1lbnQjMjAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDMuMDAjU3Vic2VhIHN5c3RlbSBlcXVpcG1lbnQjMjAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDQuMDAjV2F0ZXIgd2VsbCBkcmlsbGluZyBlcXVpcG1lbnQjMjAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDUuMDAjVXJhbml1bSBleHBsb3JhdGlvbiBlcXVpcG1lbnQjMjAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDYuMDAjV2VsbGhlYWQgZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjA3LjAwI011ZCBvciB3b3Jrb3ZlciBmbHVpZCBlcXVpcG1lbnQjMjAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDguMDAjU2Vpc21pYyBlcXVpcG1lbnQjMjAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDAuMDAjRHJpbGxpbmcgYW5kIG9wZXJhdGlvbiBtYWNoaW5lcnkjMjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDEuMDAjQm9yaW5nIG9yIHNpbmtpbmcgbWFjaGluZXJ5IzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjAyLjAwI0Rvd25ob2xlIGFzc2VtYmx5IG1hY2hpbmVyeSMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wMy4wMCNIYW1tZXIgZHJpbGxzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjA0LjAwI0NyYXdsZXIgZHJpbGxzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjA1LjAwI1JvY2sgZHJpbGxzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjA2LjAwI1BuZXVtYXRpYyB2aWJyYXRvcnMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDcuMDAjVHVubmVsaW5nIG1hY2hpbmVyeSMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wOC4wMCNTdHJpa2luZyBoYW1tZXJzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjA5LjAwI1NpbmtlciBkcmlsbHMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTAuMDAjU2V3ZXIgaW5zcGVjdGlvbiBtYWNoaW5lcnkjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTEuMDAjUm90YXJ5IGRyaWxscyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xMi4wMCNEcmlsbGluZyByaWdzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjEzLjAwI0xvbmcgaG9sZSBkcmlsbHMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTQuMDAjSW5kdXN0cmlhbCBkcmlsbCBiaXRzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjE1LjAwI0RyaWZ0ZXJzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjE2LjAwI0RlcnJpY2tzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjE3LjAwI0RyaWxsaW5nIGNhcnJpYWdlcyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xOC4wMCNEb3duaG9sZSBmaXNoaW5nIHBvbGVzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjE5LjAwI1dlbGwgZHJpbGxpbmcgYml0IGNvbmVzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE3LjAwLjAwI0RyaWxsaW5nIGFuZCBvcGVyYXRpb24gYWNjZXNzb3JpZXMjMjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTcuMDEuMDAjQXVkaW8gdmlzdWFsIGluc3RydW1lbnRzIGZvciB3ZWxsIGluc3BlY3Rpb24jMjAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTcuMDIuMDAjUGFja2VycyBvciB0dWJpbmcgYW5jaG9ycyMyMC4xMS4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNy4wMy4wMCNEcmlsbGluZyBjYXNpbmdzIzIwLjExLjE3LjAwLjAwCi11bnNwc2M3IzIwLjExLjE3LjA0LjAwI0RyaWxsaW5nIHNjcmVlbnMjMjAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMDAuMDAuMDAjT2lsIGFuZCBnYXMgZHJpbGxpbmcgYW5kIGV4cGxvcmF0aW9uIGVxdWlwbWVudCMyMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wMC4wMCNBY2lkaXppbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjAxLjAwI0FjaWRpemluZyBibGVuZGluZyB1bml0cyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wMi4wMCNBY2lkaXppbmcgZGVuc2l0eSBzZW5zb3JzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjAzLjAwI0FjaWRpemluZyBwdW1waW5nIHVuaXRzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjA0LjAwI0FjaWRpemluZyB1bml0cyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wNS4wMCNBY2lkaXppbmcgYWlyIHBpcGluZyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wNi4wMCNBY2lkaXppbmcgYmFsbCBpbmplY3RvcnMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDcuMDAjQnVsayBsaXF1aWQgYWNpZCBlcXVpcG1lbnQjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDguMDAjQWNpZGl6aW5nIGRyb3AgYm94ZXMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDkuMDAjQWNpZGl6aW5nIGZsb3cgbWV0ZXJzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjEwLjAwI0FjaWRpemluZyBqdW5jdGlvbiBib3hlcyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4xMS4wMCNBY2lkaXppbmcgcHJlc3N1cmUgc2Vuc29ycyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4xMi4wMCNBY2lkaXppbmcgcHJvY2VzcyBwaXBpbmcjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTMuMDAjQWNpZGl6aW5nIHN0cmFpZ2h0IGpvaW50cyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4xNC4wMCNBY2lkaXppbmcgc3dpdmVscyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4xNS4wMCNBY2lkaXppbmcgdHJlYXRpbmcgaXJvbnMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTYuMDAjQWNpZGl6aW5nIHRyZWUgc2F2ZXJzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjAwLjAwI0NlbWVudGluZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDEuMDAjQmxlbmRpbmcgdW5pdHMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDIuMDAjQnJpZGdlIHBsdWdzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjAzLjAwI0J1bGsgbGlxdWlkIGNlbWVudCBlcXVpcG1lbnQjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDQuMDAjQ2VtZW50IGJ1bGsgbWF0ZXJpYWwgZXF1aXBtZW50IzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjA1LjAwI0NlbWVudCBkZW5zaXR5IHNlbnNvcnMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDYuMDAjQ2VtZW50IGZsb2F0aW5nIGJ1bGsgdW5pdHMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDcuMDAjQ2VtZW50IGZsb2F0aW5nIGVxdWlwbWVudCBzdGFnZSB0b29scyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wOC4wMCNDZW1lbnQgZmxvYXRpbmcgZXF1aXBtZW50IHdpcGVyIHBsdWdzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjA5LjAwI0NlbWVudCBwdW1waW5nIHVuaXRzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjEwLjAwI0NlbWVudCByZXRhaW5lcnMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTEuMDAjQ2VudHJhbGl6ZXJzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjEyLjAwI0V4cHJlc3MgbGF0Y2ggY291cGxlcnMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTMuMDAjRmxvYXQgY29sbGFycyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xNC4wMCNGbG9hdCBzaG9lcyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xNS4wMCNPaWxmaWVsZCBjZW1lbnRpbmcgdG9vbHMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTYuMDAjUmV0cmlldmFibGUgY2VtZW50aW5nIHBhY2tlcnMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTcuMDAjU2FmZXR5IHNsaW5ncyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xOC4wMCNTdWJzZWEgY2VtZW50IGhlYWRzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjE5LjAwI1N1cmZhY2UgY2VtZW50IGhlYWRzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjAwLjAwI0ZyYWN0dXJpbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjAxLjAwI0J1bGsgbGlxdWlkIGZyYWN0dXJpbmcgZXF1aXBtZW50IzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjAyLjAwI0ZyYWN0dXJpbmcgYnVsayBwcm9wcGFudCBlcXVpcG1lbnQjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDMuMDAjRnJhY3R1cmluZyBjb250cm9sIHVuaXRzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjA0LjAwI0ZyYWN0dXJpbmcgZGVuc2l0eSBzZW5zb3JzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjA1LjAwI0ZyYWN0dXJpbmcgbWFuaWZvbGQgdW5pdHMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDYuMDAjRnJhY3R1cmluZyBwcm9wcGFudCBjb252ZXlpbmcgZXF1aXBtZW50IzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjA3LjAwI0ZyYWN0dXJpbmcgcHVtcGluZyB1bml0cyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wOC4wMCNGcmFjdHVyaW5nIHNsdXJyeSBibGVuZGluZyB1bml0cyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wOS4wMCNHZWwgYmxlbmRpbmcgdW5pdHMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMTAuMDAjRnJhY3R1cmluZyBtaXNzaWxlcyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4xMS4wMCNQdW1wIGludGVncml0eSBtb25pdG9ycyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4xMi4wMCNGcmFjdHVyaW5nIHNlcnZpY2UgcGFja2VycyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4xMy4wMCNTdGltdWxhdGlvbiBwdW1waW5nIHVuaXRzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjAwLjAwI1NhbmQgY29udHJvbCBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDEuMDAjQmxhbmtpbmcgcGx1Z3MjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDIuMDAjRmxvYXRlcnMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDMuMDAjRnJhYyBwYWNrIHN5c3RlbXMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDQuMDAjR3JhdmVsIHBhY2sgc3lzdGVtcyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wNS4wMCNHdWlkZSBzaG9lcyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wNi4wMCNIb29rIHVwIG5pcHBsZXMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDcuMDAjTWFrZSB1cCBzdWJzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjA4LjAwI1Byb2R1Y3Rpb24gdHViaW5nIG92ZXJzaG90cyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wOS4wMCNTYW5kIGNvbnRyb2wgYmxhbmtzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjEwLjAwI1NhbmQgY29udHJvbCBidWxrIGxpcXVpZCBlcXVpcG1lbnQjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMTEuMDAjU2FuZCBjb250cm9sIGJ1bGsgcHJvcHBhbnQgZXF1aXBtZW50IzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjEyLjAwI1NhbmQgY29udHJvbCBkZW5zaXR5IHNlbnNvcnMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMTMuMDAjU2FuZCBjb250cm9sIG1hbmlmb2xkIHVuaXRzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjE0LjAwI1NhbmQgY29udHJvbCBwcm9wcGFudCBjb252ZXlpbmcgZXF1aXBtZW50IzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjE1LjAwI1NhbmQgY29udHJvbCBwdW1waW5nIHVuaXRzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjE2LjAwI1NhbmQgY29udHJvbCBzY3JlZW5zIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjE3LjAwI1NhbmQgY29udHJvbCBzbHVycnkgYmxlbmRpbmcgdW5pdHMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMTguMDAjU2FuZCBkZXRlY3RvcnMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMTkuMDAjU2VhbCBhc3NlbWJseSBsb2NhdG9ycyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4yMC4wMCNTaGVhciBqb2ludHMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMjEuMDAjU2xlZXZlIHNoaWZ0aW5nIHRvb2xzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjIyLjAwI1NsaWRpbmcgc2xlZXZlcyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4yMy4wMCNWZWxvY2l0eSBzdHJpbmdzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjAwLjAwI0NvbXBsZXRpb24gdG9vbHMgYW5kIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wMS4wMCNCYWxsIGNhdGNoZXIgc3VicyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wMi4wMCNCbGFzdCBqb2ludHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDMuMDAjQmxhc3QgbmlwcGxlcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wNC4wMCNDb21wbGV0aW9uIGJ1bGwgcGx1Z3MjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDUuMDAjQ2lyY3VsYXRpb24gcHJvZHVjdGlvbiBkZXZpY2VzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjA2LjAwI0NvbXBsZXRpb24gdGVzdCBlcXVpcG1lbnQjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDcuMDAjQ29udHJvbCBsaW5lIHByb3RlY3RvcnMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDguMDAjRGVmbGVjdGlvbiB0b29scyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wOS4wMCNDb21wbGV0aW9uIGV4cGFuc2lvbiBqb2ludHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTAuMDAjRmxvdyBjb3VwbGluZ3MjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTEuMDAjR2FzIGxpZnQgZXF1aXBtZW50IzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjEyLjAwI0hhbmdlciBsYW5kaW5nIHRvb2xzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjEzLjAwI0NvbXBsZXRpb24gaHlkcmF1bGljIHB1bXBzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjE0LjAwI0h5ZHJhdWxpYyBzZXR0aW5nIHRvb2xzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjE1LjAwI0luamVjdGlvbiBzeXN0ZW1zIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjE2LjAwI0xhbmRpbmcgbmlwcGxlcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xNy4wMCNMaW5lciBoYW5nZXJzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjE4LjAwI1BhY2tlciBwdWxsaW5nIHRvb2xzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjE5LjAwI1BhY2tlciBydW5uaW5nIHRvb2xzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjIwLjAwI1Byb2R1Y3Rpb24gcGFja2VycyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yMS4wMCNQdW1wIGRvd24gdGhyb3VnaCBmbG93IGxpbmUgZXF1aXBtZW50IzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjIyLjAwI0NvbXBsZXRpb24gc2FmZXR5IGpvaW50cyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yMy4wMCNDb21wbGV0aW9uIHNlYWwgYXNzZW1ibGllcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yNC4wMCNTZWFsIGJvcmVzIG9yIHBvbGlzaGVkIGJvcmVzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjI1LjAwI1NpZGUgcG9ja2V0IG1hbmRyZWxzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjI2LjAwI1NsaWRpbmcgc2xlZXZlcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yNy4wMCNTdWJzdXJmYWNlIHNhZmV0eSB2YWx2ZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjguMDAjVHJhdmVsIGpvaW50cyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yOS4wMCNUdWJpbmcgYW5jaG9ycyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4zMC4wMCNUd2luIGZsb3cgYXNzZW1ibGllcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wMC4wMCNDb252ZW50aW9uYWwgZHJpbGxpbmcgdG9vbHMjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDEuMDAjQmxvd291dCBwcmV2ZW50ZXJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjAyLjAwI0Jsb3dvdXQgcHJldmVudGVyIGNvbnRyb2xzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjAzLjAwI0Nhc2luZyBzY3JhcGVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wNC4wMCNEcmlsbCBjb2xsYXJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjA1LjAwI0NvcmluZyBlcXVpcG1lbnQjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDYuMDAjRHJpbGwgcGlwZSB0aHJlYWQgcHJvdGVjdG9ycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wNy4wMCNEcmlsbCBwaXBlIHRvb2wgam9pbnRzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjA4LjAwI0RyaWxsIHBpcGUjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDkuMDAjR2F1Z2UgcmluZ3MjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMTAuMDAjSG9sZSBvcGVuZXJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjExLjAwI0hvbGUgcmVhbWVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4xMi4wMCNGaXNoaW5nIGphcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMTMuMDAjRG93bmhvbGUgc2hvY2sgYWJzb3JiZXJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjE0LjAwI0Rvd25ob2xlIHN0YWJpbGl6ZXJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjE1LjAwI0RyaWxsaW5nIHN1YnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMTYuMDAjVGhydXN0ZXJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjAwLjAwI0RyaWxsaW5nIGJpdHMjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTYuMDEuMDAjRml4ZWQgY3V0dGVyIGRyaWxsIGJpdHMjMjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTYuMDIuMDAjTmF0dXJhbCBkaWFtb25kIGRyaWxsIGJpdHMjMjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTYuMDMuMDAjTm96emxlIGRyaWxsIGJpdHMjMjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTYuMDQuMDAjUERDIGJpdHMjMjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTYuMDUuMDAjUm9sbGVyIGNvbmUgYnV0dG9uIGluc2VydCBkcmlsbCBiaXRzIzIwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjA2LjAwI1JvbGxlciBzdGVlbCB0b290aCBkcmlsbCBiaXRzIzIwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjAwLjAwI0Zpc2hpbmcgdG9vbHMjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDEuMDAjQnVtcGVyIHN1YnMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDIuMDAjQ2FzaW5nIHBhdGNoZXMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDMuMDAjSmFyIGJvb3N0ZXJzIzIwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjA0LjAwI0p1bmsgc3VicyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wNS4wMCNNaWxscyBvciBidXJuaW5nIHNob2VzIzIwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjA2LjAwI092ZXJzaG90cyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wNy4wMCNPaWxmaWVsZCBmaXNoaW5nIHNwZWFycyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wOC4wMCNVbnNwZWNpZmllZCBmaXNoaW5nIHRvb2xzIzIwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE4LjAwLjAwI0RpcmVjdGlvbmFsIGRyaWxsaW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOC4wMS4wMCNHZW9zdGVlcmluZyB0b29scyMyMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOC4wMi4wMCNNdWQgbW90b3JzIzIwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE4LjAzLjAwI1JvdGFyeSBzdGVlcmFibGUgdG9vbHMjMjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTguMDQuMDAjRGlyZWN0aW9uYWwgZHJpbGxpbmcgc3VyZmFjZSBjb250cm9sIHN5c3RlbXMjMjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTguMDUuMDAjU3RyYWlnaHQgaG9sZSBkaXJlY3Rpb25hbCBkcmlsbGluZyB0b29scyMyMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wMC4wMCNXZWxsIG1lYXN1cmVtZW50IGFuZCBsb2dnaW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wMS4wMCNBY291c3RpYyB0b29scyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wMi4wMCNEcmlsbGluZyBvciBtdWQgY29udHJvbCBpbnN0cnVtZW50cyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wMy4wMCNEcmlsbGluZyBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCB0b29scyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wNC4wMCNGbG93IG1lYXN1cmVtZW50IGVxdWlwbWVudCMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wNS4wMCNOdWNsZWFyIG1hZ25ldGljIHJlc29uYW5jZSB0b29scyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wNi4wMCNOdWNsZWFyIHRvb2xzIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjA3LjAwI1Byb2R1Y3Rpb24gbG9nZ2luZyBlcXVpcG1lbnQjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDguMDAjUmVzaXN0aXZpdHkgdG9vbHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDkuMDAjU3VydmV5aW5nIHN5c3RlbXMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMTAuMDAjVGVsZW1ldHJ5IHN5c3RlbXMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMTEuMDAjVWx0cmFzb25pYyB0b29scyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4xMi4wMCNXZWxsIGxvZ2dpbmcgYm90dG9tIGhvbGUgcHJlc3N1cmUgZXF1aXBtZW50IzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjEzLjAwI1dlbGwgbG9nZ2luZyBkb3duaG9sZSB0ZXN0IGVxdWlwbWVudCMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4xNC4wMCNXZWxsIGxvZ2dpbmcgdW5pdHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjAuMDAuMDAjRml4dHVyaW5nIGFuZCB0ZXN0IGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMC4wMS4wMCNEcmlmdCBiYXJzIzIwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIwLjAyLjAwI0RyaWZ0IHNsZWV2ZXMjMjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjAuMDMuMDAjRHJpZnQgcmFiYml0cyMyMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMC4wNC4wMCNUZXN0IGZpeHR1cmVzIzIwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIwLjA1LjAwI1Rlc3QgbmlwcGxlcyMyMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMC4wNi4wMCNUZXN0IHBsdWdzIzIwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjAwLjAwI1BlcmZvcmF0aW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wMS4wMCNDYXBzdWxlIGd1bnMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDIuMDAjQ2FzaW5nIGd1bnMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDMuMDAjRGVwbG95bWVudCBoZWFkcyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wNC4wMCNQZXJmb3JhdGluZyBleHBsb3NpdmVzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjA1LjAwI0ZpcmluZyBoZWFkcyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wNi4wMCNHdW4gYWRhcHRlcnMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDcuMDAjSGlnaCBzaG90IGRlbnNpdHkgZ3VucyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wOC4wMCNQZXJmb3JhdGluZyBidWxsIHBsdWdzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjA5LjAwI1BsdWcgc2V0dGluZyB0b29scyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4xMC4wMCNQZXJmb3JhdGluZyBwb3NpdGlvbmluZyBlcXVpcG1lbnQjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMTEuMDAjU2NhbGxvcGVkIGd1bnMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMTIuMDAjVGFuZGVtIHN1YnMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMTMuMDAjVGhyb3VnaCB0dWJpbmcgcGVyZm9yYXRpb24gZ3VuIGFjY2Vzc29yaWVzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjE0LjAwI1Rocm91Z2ggdHViaW5nIHBlcmZvcmF0aW9uIGd1bnMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMTUuMDAjVW5kZXIgYmFsYW5jZSB2ZW50IHN1YnMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDAuMDAjV2VsbCB0ZXN0aW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wMS4wMCNGbGFyZSBib29tcyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wMi4wMCNGbGFyZSBidXJuZXJzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjAzLjAwI0Nhc2VkIGhvbGUgdGVzdCB0b29scyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wNC4wMCNDaG9rZSBtYW5pZm9sZHMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDUuMDAjRGl2ZXJ0aW5nIG1hbmlmb2xkcyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wNi4wMCNGbG93aGVhZCBiYXNrZXRzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjA3LjAwI0Zsb3doZWFkIHN3aXZlbHMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDguMDAjRmxvd2hlYWRzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjA5LjAwI0Zvcm1hdGlvbiBzaHV0IGluIHRvb2xzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjEwLjAwI0dhcyBmbGFyZXMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMTEuMDAjTXVkIGdhcyBhbmFseXplcnMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMTIuMDAjT2lsIHNhbXBsZXJzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjEzLjAwI1dlbGwgdGVzdGluZyBzZXBhcmF0b3JzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjE0LjAwI1dlbGwgdGVzdGluZyBzdXJmYWNlIHBpcGluZyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4xNS4wMCNTdXJnZSB0YW5rcyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4xNi4wMCNXZWxsIHRlc3RpbmcgZG93bmhvbGUgdG9vbHMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDAuMDAjU2xpY2tsaW5lIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wMS4wMCNTbGlja2xpbmUgYWRhcHRlciBoZWFkcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wMi4wMCNTbGlja2xpbmUgYmFja29mZnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDMuMDAjU2xpY2tsaW5lIGJlbGwgZ3VpZGVzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjA0LjAwI1NsaWNrbGluZSBibGluZCBib3hlcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wNS4wMCNTbGlja2xpbmUgYm90dG9tIGhvbGUgcHJlc3N1cmUgZXF1aXBtZW50IzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjA2LjAwI1NsaWNrbGluZSBjYWxpcGVyIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjA3LjAwI1NsaWNrbGluZSBjZW1lbnQgZHVtcCBiYWlsaW5nIGVxdWlwbWVudCMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wOC4wMCNTbGlja2xpbmUgY2hlbWljYWwgY3V0dGVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wOS4wMCNTbGlja2xpbmUgY2xhbXAgb24gdG9vbCBzdHJpbmcgY2VudHJhbGl6ZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjEwLjAwI1NsaWNrbGluZSBjbGFtcCBvbiB3aXJlbGluZSBjZW50cmFsaXplcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTEuMDAjU2xpY2tsaW5lIGNvbGxhciBsb2NhdG9ycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xMi4wMCNTbGlja2xpbmUgY29sbGVjdG9ycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xMy4wMCNTbGlja2xpbmUgY29sbGlkaW5nIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjE0LjAwI1NsaWNrbGluZSBjcm9zc292ZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjE1LjAwI1NsaWNrbGluZSBkZXB0aCBtZWFzdXJlbWVudCBlcXVpcG1lbnQjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTYuMDAjU2xpY2tsaW5lIGRld2FyIGZsYXNrcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xNy4wMCNTbGlja2xpbmUgZGlwbWV0ZXIgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTguMDAjU2xpY2tsaW5lIGRpcmVjdGlvbmFsIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjE5LjAwI1NsaWNrbGluZSBnbyBkZXZpbCB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yMC4wMCNTbGlja2xpbmUgaG9sZSBwdW5jaGVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yMS4wMCNTbGlja2xpbmUgamV0IGN1dHRlcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjIuMDAjU2xpY2tsaW5lIGp1bmsgc2hvdHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjMuMDAjU2xpY2tsaW5lIGtpY2tvdmVyIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjI0LjAwI1NsaWNrbGluZSBrbnVja2xlIGpvaW50cyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yNS4wMCNTbGlja2xpbmUgbGVhZCBpbXByZXNzaW9uIGJsb2NrcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yNi4wMCNTbGlja2xpbmUgbG9jYXRvciBtYW5kcmVscyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yNy4wMCNTbGlja2xpbmUgbG9jayBtYW5kcmVscyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yOC4wMCNTbGlja2xpbmUgbHVicmljYXRvcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjkuMDAjU2xpY2tsaW5lIG1lY2hhbmljYWwgYmFpbGVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zMC4wMCNTbGlja2xpbmUgbWVjaGFuaWNhbCBwbHVnYmFja3MjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzEuMDAjT3RoZXIgU2xpY2tsaW5lIFRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjMyLjAwI1NsaWNrbGluZSBwYXJhZmZpbiBzY3JhcHBlcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzMuMDAjU2xpY2tsaW5lIHJvcGUgc29ja2V0cyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zNC4wMCNTbGlja2xpbmUgcnVubmluZyBvciBwdWxsaW5nIHByb25ncyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zNS4wMCNTbGlja2xpbmUgc2V2ZXJpbmcgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzYuMDAjU2xpY2tsaW5lIHNoZWF2ZXMgb3IgZmxvb3IgYmxvY2tzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjM3LjAwI1NsaWNrbGluZSBib3R0b20gaG9sZSBwcmVzc3VyZSBlcXVpcG1lbnQjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzguMDAjU2xpY2tsaW5lIHB1bGxpbmcgdG9vbCBhY2Nlc3NvcmllcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zOS4wMCNTbGlja2xpbmUgcHVsbGluZyB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40MC4wMCNTbGlja2xpbmUgcnVubmluZyB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40MS4wMCNTbGlja2xpbmUgdW5pdHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDIuMDAjU2xpY2tsaW5lIHdpcmUjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDMuMDAjU2xpY2tsaW5lIHNvbmljIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQ0LjAwI1NsaWNrbGluZSBzcGFjZXIgYmFycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40NS4wMCNTbGlja2xpbmUgc3dhZ2VzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQ2LjAwI1NsaWNrbGluZSB0ZW5zaW9uIGRldmljZXMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDcuMDAjU2xpY2tsaW5lIHR1YmluZyBwbHVncyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40OC4wMCNTbGlja2xpbmUgdWx0cmFzb25pYyB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40OS4wMCNXaXJlbGluZSBHcmFicyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy41MC4wMCNXaXJlbGluZSBKYXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjUxLjAwI1dpcmVsaW5lIFNjcmFwZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjUyLjAwI1dpcmVsaW5lIFNwZWFyIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjUzLjAwI1dpcmVsaW5lIFN0ZW1zIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjU0LjAwI1dpcmVsaW5lIFZhbHZlcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wMC4wMCNQcm9kdWN0aW9uIHN5c3RlbXMgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjAxLjAwI0NhYmxlIHRodW1wZXJzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjAyLjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gZXZhcG9yYXRvcnMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDMuMDAjSGlwb3QgdGVzdGVycyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wNC4wMCNPaWxmaWVsZCBsYXBwaW5nIG1hY2hpbmVzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjA1LjAwI01vdG9yIGVuZCBsaWZ0cyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wNi4wMCNPaWwgZGllbGVjdHJpYyB0ZXN0ZXJzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjA3LjAwI09pbCB2YWN1dW0gZmlsbGluZyB1bml0cyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wOC4wMCNPaWxmaWVsZCBwcm9kdWN0aW9uIHNoYWZ0IHN0cmFpZ2h0ZW5lcnMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDkuMDAjT2lsZmllbGQgcHJvZHVjdGlvbiBzcG9vbGVycyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4xMC4wMCNWaWJyYXRpb24gYW5hbHl6ZXJzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjAwLjAwI0NvaWxlZCB0dWJpbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjAxLjAwI0JsYXN0ZXIgdG9vbHMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDIuMDAjQ29pbGVkIHR1YmluZyB0cnVjayBjcmFuZSB1bml0cyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wMy4wMCNDb2lsZWQgdHViaW5nIHVuaXRzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjA0LjAwI0NvaWxlZCB0dWJpbmcgaG9zZSBwYWNrYWdlcyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wNS4wMCNDb2lsZWQgdHViaW5nIGluZmxhdGFibGUgc3lzdGVtcyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wNi4wMCNDb2lsZWQgdHViaW5nIGluamVjdG9yIGhlYWRzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjA3LjAwI0NvaWxlZCB0dWJpbmcgbGlmdGluZyBlcXVpcG1lbnQjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDguMDAjT3BlcmF0b3IgaG91c2VzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjA5LjAwI0NvaWxlZCB0dWJpbmcgcG93ZXIgcGFja3MjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMTAuMDAjQ29pbGVkIHR1YmluZyByZWVscyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4xMS4wMCNDb2lsZWQgdHViaW5nIHNwb29saW5nIHJlZWxzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjEyLjAwI1R1YmluZyBndWlkZXMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMTMuMDAjV2VsbGhlYWQgaG9va3VwcyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4xNC4wMCNXZWxsaGVhZCBzdXBwb3J0IHN0cnVjdHVyZXMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMTUuMDAjT2lsZmllbGQgY29pbGVkIHR1YmluZyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wMC4wMCNTZWlzbWljIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wMS4wMCNTZWlzbWljIGFuYWxvZyBzZW5zb3JzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjAyLjAwI1NlaXNtaWMgYXJyYXlzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjAzLjAwI1NlaXNtaWMgc3RyZWFtZXIgY2FibGUgYmlyZHMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDQuMDAjU2Vpc21pYyBkcmlsbCB0YW5rZXJzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjA1LjAwI1NlaXNtaWMgZ2VvcGhvbmVzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjA2LjAwI1NlaXNtaWMgZ3Jhdml0eSBzeXN0ZW1zIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjA3LjAwI1NlaXNtaWMgZ3VuIHdpbmNoIHN5c3RlbXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDguMDAjU2Vpc21pYyBoeWRyb3Bob25lcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wOS4wMCNTZWlzbWljIGltcHVsc2Ugc291cmNlcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xMC4wMCNTZWlzbWljIG1hcmluZSBzdHJlYW1lciBjYWJsZXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTEuMDAjU2Vpc21pYyBvY2VhbiBib3R0b20gY2FibGVzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjEyLjAwI1NlaXNtaWMgbWFnbmV0aWMgc3lzdGVtcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xMy4wMCNTZWlzbWljIHBvc2l0aW9uaW5nIGVxdWlwbWVudCMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xNC4wMCNTZWlzbWljIHJhbXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTUuMDAjU2Vpc21pYyByZWNlaXZlcnMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTYuMDAjU2Vpc21pYyByZWZyYWN0aW9uIHN5c3RlbXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTcuMDAjU2Vpc21pYyBzb3VyY2UgY29udHJvbGxlcnMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTguMDAjU2Vpc21pYyBzcG9vbGluZyBkZXZpY2VzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjE5LjAwI1NlaXNtaWMgdG93IGJsb2NrcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4yMC4wMCNTZWlzbWljIHRvdyBwb2ludHMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMjEuMDAjU2Vpc21pYyB2aWJyYXRvcnMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMjIuMDAjU2Vpc21pYyByZWNvcmRpbmcgc3lzdGVtcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4yMy4wMCNTZWlzbWljIGRhdGEgcHJvY2Vzc2luZyBzeXN0ZW1zIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjAwLjAwI09pbCBjb3VudHJ5IHR1YnVsYXIgZ29vZHMjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDEuMDAjT2lsIGNvdW50cnkgY2FzaW5nIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjAyLjAwI09pbCBjb3VudHJ5IGNvdXBsaW5ncyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wMy4wMCNPaWwgY291bnRyeSBwdXAgam9pbnRzIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjA0LjAwI09pbCBjb3VudHJ5IHR1YmluZyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wNS4wMCNPaWwgY291bnRyeSBwaXBlIGNvYXRpbmdzIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjA2LjAwI0NvbmR1Y3RvciBjYXNpbmcjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDcuMDAjQ29uZHVjdG9yIGNhc2luZyBydW5uaW5nIGVxdWlwbWVudCMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wOC4wMCNEcmlsbCBwaXBlIGNyb3Nzb3ZlcnMjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDkuMDAjT2lsIGNvdW50cnkgdGhyZWFkIHByb3RlY3RvcnMjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDAuMDAjRHJpbGxpbmcgYW5kIHdvcmtvdmVyIHJpZ3MgYW5kIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wMS4wMCNNdWQgYWdpdGF0b3JzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjAyLjAwI011ZCB0YW5rcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wMy4wMCNBaXIgZHJpbGxpbmcgZXF1aXBtZW50IzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjA0LjAwI0JhcmdlIHJpZ3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDUuMDAjQmxvdyBvdXQgcHJldmVudGVycyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wNi4wMCNGbHVpZCBkaXZlcnRlcnMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDcuMDAjRHJhd3dvcmtzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjA4LjAwI0RyaWxsIGZsb29yIGVxdWlwbWVudCMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wOS4wMCNEcmlsbCBzd2l2ZWxzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjEwLjAwI0RyaWxsaW5nIHJpZyBzaGlwcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xMS4wMCNEcmlsbCByaWcgZWxldmF0b3JzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjEyLjAwI0RyaWxsIHJpZyBiYWlscyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xMy4wMCNIeWRyYXVsaWMgd29ya292ZXIgdW5pdHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTQuMDAjRHJpbGwgcmlnIGphY2tpbmcgc3lzdGVtcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xNS4wMCNKYWNrdXAgbWFyaW5lIGRyaWxsaW5nIHJpZ3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTYuMDAjS2VsbHkgYnVzaGluZ3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTcuMDAjS2VsbHkgdmFsdmVzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjE4LjAwI0tlbGx5IHdpcGVycyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xOS4wMCNLZWxseXMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjAuMDAjTGFuZCBkcmlsbGluZyByaWdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjIxLjAwI011ZCBjbGVhbmluZyBlcXVpcG1lbnQjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjIuMDAjTXVkIG1hbmlmb2xkcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yMy4wMCNNdWQgbWl4ZXJzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjI0LjAwI1BpcGUgaGFuZGxpbmcgZXF1aXBtZW50IzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjI1LjAwI1BsYXRmb3JtIGRyaWxsaW5nIHJpZ3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjYuMDAjUG93ZXIgc3dpdmVsIG9yIHRvcCBkcml2ZXMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjcuMDAjUmlnIHNraWRzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjI4LjAwI0RyaWxsIHJpZyByaXNlcnMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjkuMDAjRHJpbGwgcmlnIHJvdGFyeSB0YWJsZXMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMzAuMDAjU2VsZiBlbGV2YXRpbmcgd29ya292ZXIgcGxhdGZvcm1zIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjMxLjAwI1NlbWkgc3VibWVyc2libGUgZHJpbGxpbmcgcmlncyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4zMi4wMCNEcmlsbCBmbG9vciBzbGlwcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4zMy4wMCNNYWtldXAgdG9uZ3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMzQuMDAjSXJvbiByb3VnaG5lY2tzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjM1LjAwI1RyYXZlbGluZyBlcXVpcG1lbnQjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMzYuMDAjV29ya292ZXIgYm9hdHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMzcuMDAjV29ya292ZXIgcmlncyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOS4wMC4wMCNTdXJmYWNlIGRhdGEgbG9nZ2luZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjkuMDEuMDAjU3VyZmFjZSBkYXRhIGxvZ2dpbmcgY29uZHVpdHMjMjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjkuMDIuMDAjU3VyZmFjZSBkYXRhIGxvZ2dpbmcgc2Vuc29ycyMyMC4xMi4yOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOS4wMy4wMCNTdXJmYWNlIGRhdGEgbG9nZ2luZyB1bml0cyMyMC4xMi4yOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4zMC4wMC4wMCNNdWx0aWxhdGVyYWwgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjMwLjAxLjAwI011bHRpbGF0ZXJhbCBjYXNpbmcjMjAuMTIuMzAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMzAuMDIuMDAjTXVsdGlsYXRlcmFsIGp1bmN0aW9ucyMyMC4xMi4zMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4zMC4wMy4wMCNNdWx0aWxhdGVyYWwgcGFja2VycyMyMC4xMi4zMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4wMC4wMC4wMCNPaWwgYW5kIGdhcyBkcmlsbGluZyBhbmQgb3BlcmF0aW9uIG1hdGVyaWFscyMyMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wMC4wMCNEcmlsbGluZyBtdWQgYW5kIG1hdGVyaWFscyMyMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wMS4wMCNGaWx0cmF0aW9uIGNvbnRyb2wgYWdlbnRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjAyLjAwI0ZsdWlkIHNwYWNlcnMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDMuMDAjTG9zdCBjaXJjdWxhdGlvbiBhZ2VudHMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDQuMDAjT2lsIGJhc2VkIG11ZHMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDUuMDAjUmF0ZSBvZiBwZW5ldHJhdGlvbiBlbmhhbmNlcnMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDYuMDAjU3BvdHRpbmcgZmx1aWRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjA3LjAwI1N5bnRoZXRpYyBiYXNlZCBtdWRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjA4LjAwI011ZCB0aGlubmluZyBhZ2VudHMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDkuMDAjV2F0ZXIgYmFzZWQgbXVkcyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4xMC4wMCNNdWQgd2VpZ2h0aW5nIGFnZW50cyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wMC4wMCNXZWxsIGZyYWN0dXJpbmcgcHJvcHBhbnRzIzIwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjExLjAxLjAwI0NlcmFtaWMgcHJvcHBhbnRzIzIwLjEzLjExLjAwLjAwCi11bnNwc2M3IzIwLjEzLjExLjAyLjAwI0ZyYWN0dXJpbmcgc2FuZHMjMjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTEuMDMuMDAjUmVzaW4gY29hdGVkIGNlcmFtaWMgcHJvcHBhbnRzIzIwLjEzLjExLjAwLjAwCi11bnNwc2M3IzIwLjEzLjExLjA0LjAwI1Jlc2luIGNvYXRlZCBmcmFjdHVyaW5nIHNhbmRzIzIwLjEzLjExLjAwLjAwCi11bnNwc2M3IzIwLjEzLjExLjA1LjAwI1Jlc2luIGNvYXRlZCBzaW50ZXJlZCBiYXV4aXRlcyMyMC4xMy4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wNi4wMCNTaW50ZXJlZCBiYXV4aXRlcyMyMC4xMy4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMi4wMC4wMCNDb21wbGV0aW9uIGZsdWlkcyMyMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMi4wMS4wMCNEaXZhbGVudCBicmluZXMjMjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTIuMDIuMDAjTW9ub3ZhbGVudCBicmluZXMjMjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDAuMDAjT2lsIHdlbGwgY2VtZW50IzIwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEzLjAxLjAwI09pbCB3ZWxsIGJ1bGsgY2VtZW50IzIwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEzLjAyLjAwI09pbCB3ZWxsIGNsYXNzIGEgdHlwZSBJIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wMy4wMCNPaWwgd2VsbCBjbGFzcyBiIHR5cGUgSUkgY2VtZW50IzIwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEzLjA0LjAwI09pbCB3ZWxsIGNsYXNzIGMgY2VtZW50IzIwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEzLjA1LjAwI09pbCB3ZWxsIGNsYXNzIGcgY2VtZW50IzIwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEzLjA2LjAwI09pbCB3ZWxsIGNsYXNzIGggY2VtZW50IzIwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEzLjA3LjAwI09pbCB3ZWxsIGxpZ2h0d2VpZ2h0IGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wOC4wMCNPaWwgd2VsbCBzdGFuZGFyZCBmaW5lIHR5cGUgSUlJIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xNC4wMC4wMC4wMCNPaWwgYW5kIGdhcyBvcGVyYXRpbmcgYW5kIHByb2R1Y3Rpb24gZXF1aXBtZW50IzIwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjAwLjAwI1dlbGxoZWFkIGVxdWlwbWVudCMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wMS4wMCNXZWxsaGVhZCBhY3R1YXRvcnMjMjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDIuMDAjV2VsbGhlYWQgYmVhbSBwdW1wcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wMy4wMCNXZWxsaGVhZCBmbG93IGxpbmVzIzIwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjA0LjAwI1dlbGxoZWFkIGdhdGUgdmFsdmVzIzIwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjA1LjAwI1dlbGxoZWFkIHByb2R1Y3Rpb24gY2hva2VzIzIwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjA2LjAwI1dlbGxoZWFkIHN1YiBzdXJmYWNlIGZsb3cgb3IgY2hyaXN0bWFzIHRyZWVzIzIwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjA3LjAwI1dlbGxoZWFkIHN1cmZhY2UgZmxvdyBvciBjaHJpc3RtYXMgdHJlZXMjMjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDguMDAjV2VsbGhlYWQgc3VyZmFjZSBzYWZldHkgdmFsdmVzIzIwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjExLjAwLjAwI0NoZW1pY2FsIGluamVjdGlvbiBzeXN0ZW1zIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjExLjAxLjAwI1BhcmFmZmluIGluamVjdGlvbiBzeXN0ZW1zIzIwLjE0LjExLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEyLjAwLjAwI0Rlc2FuZGluZyBlcXVpcG1lbnQjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTIuMDEuMDAjUHJvZHVjdGlvbiBkZXNhbmRpbmcgZXF1aXBtZW50IzIwLjE0LjEyLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEzLjAwLjAwI0Rvd25ob2xlIGpldCBwdW1wcyBhbmQgYW5jaG9ycyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMy4wMS4wMCNEb3duaG9sZSBqZXQgcHVtcHMjMjAuMTQuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTQuMDAuMDAjRG93bmhvbGUgcHJvZHVjdGlvbiBhY2Nlc3NvcmllcyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNC4wMS4wMCNUdWJpbmcgc3RvcHMjMjAuMTQuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTUuMDAuMDAjRG93bmhvbGUgcHVtcHMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTUuMDEuMDAjRWxlY3RyaWMgZG93bmhvbGUgcHVtcHMjMjAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTYuMDAuMDAjRXhwb3J0IHB1bXBzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE2LjAxLjAwI1BuZXVtYXRpYyBleHBvcnQgcHVtcHMjMjAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTcuMDAuMDAjT2Zmc2hvcmUgcHJvZHVjdGlvbiBhbmQgc3RvcmFnZSBwbGF0Zm9ybXMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTcuMDEuMDAjRml4ZWQgb2Zmc2hvcmUgcHJvZHVjdGlvbiBwbGF0Zm9ybXMjMjAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTcuMDIuMDAjRmxvYXRpbmcgb2Zmc2hvcmUgcHJvZHVjdGlvbiBwbGF0Zm9ybXMjMjAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTcuMDMuMDAjRmxvYXRpbmcgb2Zmc2hvcmUgc3RvcmFnZSBwbGF0Zm9ybXMjMjAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTcuMDQuMDAjRmxvYXRpbmcgb2Zmc2hvcmUgdGVuc2lvbiBsZWcgIHByb2R1Y3Rpb24gcGxhdGZvcm1zIzIwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjA1LjAwI0Zsb2F0aW5nIG9mZnNob3JlIHRlbnNpb24gbGVnIHN0b3JhZ2UgcGxhdGZvcm1zIzIwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE4LjAwLjAwI1dlbGwgcHJvZHVjdGlvbiBmbG93IG1lYXN1cmVtZW50IG1ldGVycyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xOC4wMS4wMCNXZWxsIHByb2R1Y3Rpb24gZ2FzIHR1cmJpbmUgbWV0ZXJzIzIwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE5LjAwLjAwI0dhcyB0cmVhdGluZyBlcXVpcG1lbnQjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTkuMDEuMDAjT2lsIHdlbGwgcHJvZHVjdGlvbiBnYXMgdHJlYXRpbmcgZXF1aXBtZW50IzIwLjE0LjE5LjAwLjAwCi11bnNwc2M3IzIwLjE0LjIwLjAwLjAwI0dseWNvbCByZWdlbmVyYXRvcnMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjAuMDEuMDAjT2lsIHdlbGwgZ2x5Y29sIHJlZ2VuZXJhdG9ycyMyMC4xNC4yMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yMS4wMC4wMCNIZWF0ZXIgdHJlYXRlcnMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjEuMDEuMDAjT2lsIHdlbGwgaGVhdGVyIHRyZWF0ZXJzIzIwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzIwLjE0LjIyLjAwLjAwI0xpbmUgaGVhdGVycyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yMi4wMS4wMCNFbGVjdHJpY2FsIGxpbmUgaGVhdGVycyMyMC4xNC4yMi4wMC4wMAotdW5zcHNjNyMyMC4xNC4yMy4wMC4wMCNQcm9kdWN0aW9uIGluamVjdGlvbiBza2lkcyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yMy4wMS4wMCNQbmV1bWF0aWMgbWV0aGFub2wgaW5qZWN0aW9ucyBza2lkcyMyMC4xNC4yMy4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNC4wMC4wMCNPY2VhbiBmbG9vciBlcXVpcG1lbnQjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjQuMDEuMDAjU3Vic2VhIHByb2R1Y3Rpb24gd2VsbGhlYWQgZXF1aXBtZW50IzIwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzIwLjE0LjI1LjAwLjAwI1Byb2R1Y2VkIHdhdGVyIHRyZWF0aW5nIGVxdWlwbWVudCMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNS4wMS4wMCNPaWwgZmllbGQgd2F0ZXIgb2lsIGNlbnRyaWZ1Z2VzIzIwLjE0LjI1LjAwLjAwCi11bnNwc2M3IzIwLjE0LjI2LjAwLjAwI1Byb2R1Y3Rpb24gY29udHJvbCBzeXN0ZW0gaW5zdHJ1bWVudGF0aW9uIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjI2LjAxLjAwI1dpcmVsZXNzIHByb2R1Y3Rpb24gY29udHJvbCBzeXN0ZW1zIzIwLjE0LjI2LjAwLjAwCi11bnNwc2M3IzIwLjE0LjI3LjAwLjAwI1B1bXBpbmcgdW5pdHMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjcuMDEuMDAjU3Vja2VyIHJvZCBwdW1wIGphY2tzIzIwLjE0LjI3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjI3LjAyLjAwI1JvZCBwdW1wcyMyMC4xNC4yNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNy4wMy4wMCNNZWNoYW5pY2FsIHJvZCBwdW1wcyMyMC4xNC4yNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4yOC4wMC4wMCNQcm9kdWN0aW9uIHNlcGFyYXRvcnMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjguMDEuMDAjT2lsIHdhdGVyIHNlcGFyYXRvcnMjMjAuMTQuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjkuMDAuMDAjU3RvcmFnZSB2ZXNzZWxzIGFuZCB0YW5rcyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yOS4wMS4wMCNPaWwgc3RvcmFnZSB0YW5rcyMyMC4xNC4yOS4wMC4wMAotdW5zcHNjNyMyMC4xNC4zMC4wMC4wMCNTdWNrZXIgcm9kcyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4zMC4wMS4wMCNBbGxveSBzdGVlbCBzdWNrZXIgcm9kcyMyMC4xNC4zMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4zMC4wMi4wMCNQb255IHJvZHMjMjAuMTQuMzAuMDAuMDAKLXVuc3BzYzcjMjEuMDAuMDAuMDAuMDAjRmFybWluZyBhbmQgRmlzaGluZyBhbmQgRm9yZXN0cnkgYW5kIFdpbGRsaWZlIE1hY2hpbmVyeSBhbmQgQWNjZXNzb3JpZXMjMjEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMDAuMDAuMDAjQWdyaWN1bHR1cmFsIGFuZCBmb3Jlc3RyeSBhbmQgbGFuZHNjYXBlIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjAwLjAwI0FncmljdWx0dXJhbCBtYWNoaW5lcnkgZm9yIHNvaWwgcHJlcGFyYXRpb24jMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDEuMDAjUGxvdWdocyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wMi4wMCNIYXJyb3dzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjAzLjAwI0N1bHRpdmF0b3JzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjA0LjAwI1dlZWRlcnMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDUuMDAjSG9laW5nIG1hY2hpbmVzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjA2LjAwI0dyYWRlcnMgb3IgbGFuZCBsZXZlbGVycyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wNy4wMCNBZ3JpY3VsdHVyYWwgcm9sbGVycyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wOC4wMCNSb2xsZXJzIGZvciBsYXduIG9yIHNwb3J0cyBncm91bmRzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjA5LjAwI1RyZW5jaGVyIGRyYWluYWdlIG1hY2hpbmUjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMTAuMDAjSXJyaWdhdGlvbiBwaXBlcyBvciB0dWJlcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4xMS4wMCNJcnJpZ2F0aW9uIHRyaWNrbGVzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjEyLjAwI0lycmlnYXRpb24gb3ZlcmhlYWRzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjEzLjAwI0Rpc2tzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjE0LjAwI1N1YnNvaWxlcnMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMTUuMDAjSGVkZ2UgY2xpcHBlcnMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMTYuMDAjRGliYmxlcnMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTYuMDAuMDAjQWdyaWN1bHR1cmFsIG1hY2hpbmVyeSBmb3IgcGxhbnRpbmcgYW5kIHNlZWRpbmcjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTYuMDEuMDAjUGxhbnRlcnMjMjEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTYuMDIuMDAjVHJhbnNwbGFudGVycyMyMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNi4wMy4wMCNHcmFpbiBkcmlsbHMjMjEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTYuMDQuMDAjU2VlZCBkcmlsbHMjMjEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTYuMDUuMDAjU2VlZCB0cmVhdGluZyBlcXVpcG1lbnQjMjEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTYuMDYuMDAjSG9sZSBkaWdnZXJzIzIxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE3LjAwLjAwI0FncmljdWx0dXJhbCBtYWNoaW5lcnkgZm9yIGhhcnZlc3RpbmcjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTcuMDEuMDAjTW93ZXJzIzIxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE3LjAyLjAwI0hheW1ha2luZyBtYWNoaW5lcnkjMjEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTcuMDMuMDAjSGFydmVzdGVycyMyMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNy4wNC4wMCNDb21iaW5lIGhhcnZlc3RlcnMjMjEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTcuMDUuMDAjVGhyZXNoaW5nIG1hY2hpbmVzIzIxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjAwLjAwI0Rpc3BlcnNpbmcgYW5kIHNwcmF5aW5nIGFwcGxpYW5jZXMgZm9yIGFncmljdWx0dXJlIzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjAxLjAwI1NwcmF5ZXJzIzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjAyLjAwI0R1c3RlcnMjMjEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDMuMDAjV2F0ZXIgc3ByaW5rbGVycyMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wNC4wMCNGZXJ0aWxpemVyIHNwcmVhZGVycyBvciBkaXN0cmlidXRvcnMjMjEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDUuMDAjRm9nIG9yIG1pc3QgZ2VuZXJhdG9ycyMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wNi4wMCNDb21wb3N0ZXIjMjEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDcuMDAjUG9sbGluYXRpb24gZXF1aXBtZW50IG9yIHN1cHBsaWVzIzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjA4LjAwI0Zyb3N0IHByb3RlY3Rpb24gZXF1aXBtZW50IzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjAwLjAwI1BvdWx0cnkgYW5kIGxpdmVzdG9jayBlcXVpcG1lbnQjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDEuMDAjTWlsa2luZyBtYWNoaW5lcyMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wMi4wMCNBbmltYWwgaHVzYmFuZHJ5IGVxdWlwbWVudCMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wMy4wMCNJbmN1YmF0b3JzIG9yIGJyb29kZXJzIGZvciBwb3VsdHJ5IzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjA0LjAwI0ZlZWQgbWl4ZXJzIzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjA1LjAwI0xpdmVzdG9jayBpZGVudGlmaWNhdGlvbiBlcXVpcG1lbnQjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDYuMDAjRWdnIGluc3BlY3Rpb24gb3IgY29sbGVjdGluZyBlcXVpcG1lbnQjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDcuMDAjQW5pbWFsIHdhdGVyaW5nIG1hY2hpbmVzIzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjA4LjAwI01pbGsgY29vbGluZyB0YW5rcyMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wOS4wMCNBbmltYWwgc2hlYXJpbmcgb3IgY2xpcHBpbmcgZXF1aXBtZW50IzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjIwLjAwLjAwI0FncmljdWx0dXJhbCBtYWNoaW5lcnkgZm9yIGNsZWFuaW5nIGFuZCBzb3J0aW5nIGFuZCBncmFkaW5nIzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIwLjAxLjAwI0NsZWFuaW5nIG1hY2hpbmVzIGZvciBzZWVkIG9yIGdyYWluIG9yIGRyaWVkIGxlZ3VtaW5vdXMgdmVnZXRhYmxlcyMyMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wMi4wMCNTb3J0aW5nIG1hY2hpbmVzIGZvciBzZWVkIG9yIGdyYWluIG9yIGRyaWVkIGxlZ3VtaW5vdXMgdmVnZXRhYmxlcyMyMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wMy4wMCNHcmFkaW5nIG1hY2hpbmVzIGZvciBzZWVkIG9yIGdyYWluIG9yIGRyaWVkIGxlZ3VtaW5vdXMgdmVnZXRhYmxlcyMyMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wNC4wMCNSaWNlIGNsZWFuaW5nIG9yIGh1bGxpbmcgZXF1aXBtZW50IzIxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIwLjA1LjAwI0dyaW5kaW5nIG1pbGxzIzIxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIwLjA2LjAwI0hhbW1lciBtaWxscyMyMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMS4wMC4wMCNBZ3JpY3VsdHVyYWwgcHJvY2Vzc2luZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMS4wMS4wMCNBZ3JpY3VsdHVyYWwgYnJpcXVldHRpbmcgb3IgcGVsdGluZyBtYWNoaW5lcyMyMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMi4wMC4wMCNGb3Jlc3RyeSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMi4wMS4wMCNEZWNvcnRpY2F0b3JzIzIxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIyLjAyLjAwI0x1bWJlcmluZyBlcXVpcG1lbnQjMjEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDMuMDAjUmVmb3Jlc3RhdGlvbiBlcXVpcG1lbnQjMjEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDQuMDAjRm9yZXN0cnkgc2F3cyMyMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMi4wNS4wMCNGb3Jlc3RyeSBza2lkZGVycyMyMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMi4wNi4wMCNGb3Jlc3RyeSBpbmNyZW1lbnQgYm9yZXJzIzIxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIyLjA3LjAwI0ZvcmVzdHJ5IGlwc29tZXRlciMyMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMy4wMC4wMCNHcmVlbmhvdXNlIGVxdWlwbWVudCMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMy4wMS4wMCNHcmVlbmhvdXNlIGlycmlnYXRpb24gZXF1aXBtZW50IzIxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIzLjAyLjAwI0dyZWVuaG91c2UgcG90cyMyMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMy4wMy4wMCNHcmVlbmhvdXNlIHZlbnRpbGF0aW9uIGVxdWlwbWVudCMyMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMy4wNC4wMCNHcmVlbmhvdXNlIGlzb2xhdGlvbiBlcXVpcG1lbnQjMjEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjQuMDAuMDAjSW5zZWN0IGVxdWlwbWVudCMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yNC4wMS4wMCNCZWVrZWVwaW5nIGVxdWlwbWVudCMyMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yNC4wMi4wMCNTaWxrd29ybSBlcXVpcG1lbnQjMjEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjQuMDMuMDAjQnV0dGVyZmx5IGJyZWVkaW5nIGVxdWlwbWVudCMyMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yNC4wNC4wMCNCZWV0bGUgYnJlZWRpbmcgZXF1aXBtZW50IzIxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzIxLjExLjAwLjAwLjAwI0Zpc2hpbmcgYW5kIGFxdWFjdWx0dXJlIGVxdWlwbWVudCMyMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wMC4wMCNDb21tZXJjaWFsIGZpc2hpbmcgZXF1aXBtZW50IzIxLjExLjAwLjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjAxLjAwI0NvbW1lcmNpYWwgZmlzaCBob29rcyMyMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wMi4wMCNDb21tZXJjaWFsIGZpc2hpbmcgcmVlbHMjMjEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTUuMDMuMDAjQ29tbWVyY2lhbCBmaXNoaW5nIGxpbmUgdGFja2xlIzIxLjExLjE1LjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjA0LjAwI0NvbW1lcmNpYWwgZmlzaGluZyBuZXRzIzIxLjExLjE1LjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjA2LjAwI0NvbW1lcmNpYWwgZmlzaGluZyBmbG9hdHMjMjEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTUuMDcuMDAjQ29tbWVyY2lhbCBzaW5rZXJzIG9yIHdlaWdodHMjMjEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTUuMDguMDAjRmlzaGluZyBuZXQgaGF1bGVycyMyMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNi4wMC4wMCNBcXVhY3VsdHVyZSBlcXVpcG1lbnQjMjEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTYuMDEuMDAjTWFyaW5lIGhhdGNoZXJ5IGVxdWlwbWVudCMyMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNi4wMi4wMCNQaXNjaWN1bHR1cmUgc3VwcGxpZXMjMjEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjIuMDAuMDAuMDAuMDAjQnVpbGRpbmcgYW5kIENvbnN0cnVjdGlvbiBNYWNoaW5lcnkgYW5kIEFjY2Vzc29yaWVzIzIyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIyLjEwLjAwLjAwLjAwI0hlYXZ5IGNvbnN0cnVjdGlvbiBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wMC4wMCNFYXJ0aCBtb3ZpbmcgbWFjaGluZXJ5IzIyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjAxLjAwI0Zyb250IGVuZCBsb2FkZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjAyLjAwI0dyYWRlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDMuMDAjTG9hZGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wNC4wMCNQaWxlIGRyaXZlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDUuMDAjUm9sbGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wNi4wMCNFYXJ0aG1vdmluZyBzY3JhcGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wNy4wMCNUYW1wZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjA4LjAwI1RyZW5jaGluZyBtYWNoaW5lcyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wOS4wMCNCYWNraG9lcyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xMC4wMCNCdWxsZG96ZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjExLjAwI0NvbXBhY3RvcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMTMuMDAjRHJhZ2xpbmVzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjE0LjAwI0RyZWRnZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjE1LjAwI0V4Y2F2YXRvcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMTYuMDAjRGl0Y2hlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMTcuMDAjQ2hlcnJ5IHBpY2tlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMTguMDAjRWxldmF0aW5nIHNjcmFwZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjE5LjAwI1R3aW4gZW5naW5lIG9wZW4gYm93bCBzY3JhcGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yMC4wMCNUd2luIGVuZ2luZSBlbGV2YXRpbmcgc2NyYXBlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjEuMDAjUHVsbGVkIHNjcmFwZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjIyLjAwI1RyYWNrIGJ1bGxkb3plcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjMuMDAjV2hlZWwgYnVsbGRvemVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yNC4wMCNNb2JpbGUgZXhjYXZhdG9ycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yNS4wMCNXaGVlbCBleGNhdmF0b3JzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjI2LjAwI1RyYWNrIGV4Y2F2YXRvcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjcuMDAjSW50ZWdyYXRlZCB0b29sIGNhcnJpZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjI4LjAwI1doZWVsIGxvYWRlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjkuMDAjU2tpZCBzdGVlciBsb2FkZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjMwLjAwI09wZW4gYm93bCBzY3JhcGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4zMS4wMCNTbm93IGJsb3dlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMzIuMDAjVHJhY2sgbG9hZGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNi4wMC4wMCNQYXZpbmcgZXF1aXBtZW50IzIyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIyLjEwLjE2LjAyLjAwI1JhbW1pbmcgZXF1aXBtZW50IzIyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE2LjAzLjAwI1JvYWQgd2lkZW5lcnMjMjIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTYuMDQuMDAjVmlicmF0b3J5IHBsYXRlcyMyMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNi4wNS4wMCNBc3BoYWx0IGZpbmlzaGVycyMyMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNi4wNi4wMCNDaGlwIFNwcmVhZGVycyMyMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNy4wMC4wMCNIZWF2eSBlcXVpcG1lbnQgY29tcG9uZW50cyMyMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNy4wMS4wMCNFYXJ0aG1vdmluZyBzaG92ZWxzIzIyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE3LjAyLjAwI0VhcnRobW92aW5nIGJ1Y2tldHMjMjIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTcuMDMuMDAjRWFydGhtb3ZpbmcgYmxhZGVzIzIyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE3LjA0LjAwI1NjYXJpZmllcnMjMjIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTguMDAuMDAjQWVyaWFsIGxpZnRzIzIyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIyLjEwLjE4LjAxLjAwI01hbmxpZnQgb3IgcGVyc29ubmVsIGxpZnQjMjIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTguMDIuMDAjUGxhdGZvcm0gbGlmdCMyMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xOC4wMy4wMCNBcnRpY3VsYXRpbmcgYm9vbSBsaWZ0IzIyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE4LjA0LjAwI1RlbGVzY29waW5nIGJvb20gbGlmdCMyMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMy4wMC4wMC4wMC4wMCNJbmR1c3RyaWFsIE1hbnVmYWN0dXJpbmcgYW5kIFByb2Nlc3NpbmcgTWFjaGluZXJ5IGFuZCBBY2Nlc3NvcmllcyMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMC4wMC4wMC4wMCNSYXcgbWF0ZXJpYWxzIHByb2Nlc3NpbmcgbWFjaGluZXJ5IzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjAwLjAwI01hY2hpbmVyeSBmb3Igd29ya2luZyB3b29kIGFuZCBzdG9uZSBhbmQgY2VyYW1pYyBhbmQgdGhlIGxpa2UjMjMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDEuMDAjQ29waW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjAyLjAwI0RyaWxsaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjAzLjAwI0Jyb2FjaGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wNC4wMCNCZW5kaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjA1LjAwI0JvcmluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wNi4wMCNHcmluZGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wNy4wMCNNb2xkaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjA4LjAwI0N1dHRpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDkuMDAjU2FuZGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xMC4wMCNQb2xpc2hpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTEuMDAjVHVybmluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xMi4wMCNTYXdpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTMuMDAjTWlsbGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xNC4wMCNQbGFuaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjE1LjAwI0VuZ3JhdmluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xNi4wMCNHbGFzcyBiZWFkIHBlZW5lciBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xNy4wMCNHcml0IGJsYXN0IG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjE4LjAwI1Nob3QgcGVlbiBtYWNoaW5lIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjE5LjAwI1JvYm90IG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjIwLjAwI1JhbSBlbGVjdHJvIGRpc2NoYXJnZSBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4yMS4wMCNXaXJlIGNhdGhvZGUgZWxlY3Ryb2RlIGRpc2NoYXJnZSBtYWNoaW5lIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjIyLjAwI0NoaXAgYnJlYWtlciMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4wMC4wMC4wMCNQZXRyb2xldW0gcHJvY2Vzc2luZyBtYWNoaW5lcnkjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTUuMDAuMDAjUGV0cm9sZXVtIGRpc3RpbGxpbmcgYW5kIHByb2Nlc3NpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTUuMDEuMDAjRGlzdGlsbGF0ZSBoeWRyb3Byb2Nlc3NpbmcgZXF1aXBtZW50IzIzLjExLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjAyLjAwI0NydWRlIGRpc3RpbGxpbmcgbWFjaGluZXJ5IzIzLjExLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjAzLjAwI0NhdGFseXRpYyBjcmFja2luZyBlcXVpcG1lbnQjMjMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTUuMDQuMDAjSHlkcm9jcmFja2luZyBlcXVpcG1lbnQjMjMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTUuMDUuMDAjSXNvbWVyaXphdGlvbiBtYWNoaW5lcnkjMjMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTUuMDYuMDAjQ29raW5nIG1hY2hpbmVyeSMyMy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNS4wNy4wMCNHYXMgcmVjb3ZlcnkgbWFjaGluZXJ5IzIzLjExLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjE2LjAwLjAwI0h5ZHJvdHJlYXRpbmcgbWFjaGluZXJ5IzIzLjExLjAwLjAwLjAwCi11bnNwc2M3IzIzLjExLjE2LjAxLjAwI05hcHRoYSBoeWRyb3RyZWF0ZXIjMjMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTYuMDIuMDAjRGlzdGlsbGF0ZSBoeWRyb3RyZWF0ZXIjMjMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTYuMDMuMDAjQ2F0YWx5dGljIGZlZWQgaHlkcm90cmVhdGVyIzIzLjExLjE2LjAwLjAwCi11bnNwc2M3IzIzLjExLjE2LjA0LjAwI0x1YmUgaHlkcm90cmVhdGVyIzIzLjExLjE2LjAwLjAwCi11bnNwc2M3IzIzLjExLjE2LjA1LjAwI0dhc29saW5lIGh5ZHJvdHJlYXRlciMyMy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wNi4wMCNSZXNpZCBoeWRyb3RyZWF0ZXIjMjMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMDAuMDAuMDAjVGV4dGlsZSBhbmQgZmFicmljIG1hY2hpbmVyeSBhbmQgYWNjZXNzb3JpZXMjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDAuMDAjVGV4dGlsZSBwcm9jZXNzaW5nIG1hY2hpbmVyeSBhbmQgYWNjZXNzb3JpZXMjMjMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDEuMDAjRW1icm9pZGVyeSBtYWtpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDIuMDAjRmVsdGluZyBtYWNoaW5lcyMyMy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4wMy4wMCNXaW5kaW5nIG9yIHJlZWxpbmcgb3Igc3Bvb2xpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDQuMDAjVHdpc3RpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDUuMDAjU3RpdGNoIGJvbmRpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDYuMDAjS25pdHRpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDcuMDAjV2VhdmluZyBtYWNoaW5lcyMyMy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNS4wOC4wMCNGaW5pc2hpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDkuMDAjU3Bpbm5pbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMTAuMDAjTGFjZSBtYWtpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDAuMDAjVGV4dGlsZSB3b3JraW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyMyMy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wMS4wMCNCdXR0b24gY292ZXJpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDIuMDAjQnV0dG9uIHNld2luZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wMy4wMCNCdXR0b25ob2xlIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjA0LjAwI0Nsb3RoIGN1dHRpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDUuMDAjQ3VzaGlvbiBmaWxsaW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjA2LjAwI0ZvbGRpbmcgb3IgcmV3aW5kaW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjA3LjAwI0JsZWFjaGluZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wOC4wMCNGYWJyaWMgb3IgY2xvdGggZm9sZGluZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wOS4wMCNSZWVsaW5nIG9yIHVucmVlbGluZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4xMC4wMCNEeWVpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMTEuMDAjQ3V0dGluZyBvciBwaW5raW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjEyLjAwI1Nld2luZyBtYWNoaW5lIG5lZWRsZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMTMuMDAjU2lsayBwcm9jZXNzaW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjE0LjAwI1Nld2luZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4xNS4wMCNGYWJyaWMgY3V0dGluZyB0YWJsZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMDAuMDAuMDAjTGFwaWRhcnkgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDAuMDAjR3JpbmRpbmcgYW5kIHNhbmRpbmcgYW5kIHBvbGlzaGluZyBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjAxLjAwI0FicmFzaXZlIGNvbXBvdW5kcyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wMi4wMCNGZWx0IHdoZWVscyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wMy4wMCNHcmluZGluZyB3aGVlbHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDQuMDAjUG9saXNoaW5nIGNvbXBvdW5kcyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wNS4wMCNQb2xpc2hpbmcgaGVhZHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDYuMDAjUG9saXNoaW5nIHdoZWVscyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wNy4wMCNTYW5kaW5nIGNsb3RocyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wOC4wMCNTYW5kaW5nIGRydW1zIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjA5LjAwI1R1bWJsZXJzIG9yIHBvbGlzaGVycyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4xMC4wMCNUdW1ibGluZyBzdXBwbGllcyBvciBtZWRpYSMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4xMS4wMCNXYXRlciBzd2l2ZWxzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjEyLjAwI1dhdGVyIHRyYXlzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjEzLjAwI1NhbmRpbmcgYmxvY2tzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjE0LjAwI01vdW50ZWQgc3RvbmVzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjE1LjAwI0dyaW5kaW5nIHdoZWVsIGRyZXNzZXJzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE2LjAwLjAwI0ZhY2V0aW5nIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjMjMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTYuMDEuMDAjRmFjZXRpbmcgYWNjZXNzb3JpZXMjMjMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTYuMDIuMDAjRmFjZXRpbmcgbWFjaGluZXMjMjMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTYuMDMuMDAjRmFjZXRpbmcgbGFwcyMyMy4xMy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNi4wNC4wMCNGYWNldGluZyBzYXdzIzIzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE3LjAwLjAwI0NhYmJpbmcgZXF1aXBtZW50IzIzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEzLjE3LjAxLjAwI0NhYmJpbmcgYWNjZXNzb3JpZXMjMjMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTcuMDIuMDAjQ2FiYmluZyBiZWx0cyMyMy4xMy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNy4wMy4wMCNDYWJiaW5nIGRpc2NzIzIzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE3LjA0LjAwI0NhYm9jaG9uIG1hY2hpbmVzIzIzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzIzLjE0LjAwLjAwLjAwI0xlYXRoZXJ3b3JraW5nIHJlcGFpcmluZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNi4wMC4wMCNMZWF0aGVyIHByZXBhcmluZyBtYWNoaW5lcnkgYW5kIGFjY2Vzc29yaWVzIzIzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE0LjE2LjAxLjAwI0xlYXRoZXIgZmxlc2hpbmcgbWFjaGluZXMjMjMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTYuMDIuMDAjTGVhdGhlciB0YW5uaW5nIG1hY2hpbmVzIzIzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE2LjAzLjAwI0xlYXRoZXIgZHllaW5nIG1hY2hpbmVzIzIzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE2LjA0LjAwI0xlYXRoZXIgZGVncmVhc2luZyBtYWNoaW5lcyMyMy4xNC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNi4wNS4wMCNMZWF0aGVyIHByZXNzZXMjMjMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTcuMDAuMDAjTGVhdGhlciB3b3JraW5nIGFuZCByZXBhaXJpbmcgbWFjaGluZXJ5IGFuZCBhY2Nlc3NvcmllcyMyMy4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNy4wMS4wMCNMZWF0aGVyIGN1dHRpbmcgbWFjaGluZXMjMjMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTcuMDIuMDAjTGVhdGhlciByaXZldGluZyBtYWNoaW5lcyMyMy4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNy4wMy4wMCNMZWF0aGVyIG5haWxpbmcgbWFjaGluZXMjMjMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTcuMDQuMDAjTGVhdGhlcndvcmtpbmcgd29ya3Nob3AgZXF1aXBtZW50IzIzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE1LjAwLjAwLjAwI0luZHVzdHJpYWwgcHJvY2VzcyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDAuMDAjUnViYmVyIGFuZCBwbGFzdGljIHByb2Nlc3NpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjAxLjAwI0Jsb3cgbW9sZGluZyBtYWNoaW5lcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wMi4wMCNDb2F0aW5nIG1hY2hpbmVzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjAzLjAwI0V4dHJ1ZGVycyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wNC4wMCNJbmplY3Rpb24gbW9sZGluZyBtYWNoaW5lcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wNS4wMCNSdWJiZXIgb3IgcGxhc3RpYyBtaXhlcnMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDYuMDAjUnViYmVyIG9yIHBsYXN0aWMgcHJlc3NlcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wNy4wMCNUaGVybW8gZm9ybWluZyBtYWNoaW5lcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wOC4wMCNWYWN1dW0gbW9sZGluZyBtYWNoaW5lcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wOS4wMCNWdWxjYW5pemluZyBtYWNoaW5lcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xMC4wMCNQbGFzdGljIGN1dHRpbmcgbWFjaGluZXJ5IzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjExLjAwI1BsYXN0aWMgZ3JpbmRpbmcgbWFjaGluZXJ5IzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjEyLjAwI1J1YmJlciBvciBwbGFzdGljIG1pbGxzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjEzLjAwI1J1YmJlciBvciBwbGFzdGljIGV4dHJ1c2lvbiBkaWVzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjE0LjAwI1BsYXN0aWMgaW5qZWN0aW9uIG1vbGRzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjE1LjAwI1RoZXJtb2Zvcm1pbmcgbW9sZHMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMTYuMDAjRWplY3RvciBwaW5zIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjAwLjAwI0NlbWVudCBhbmQgY2VyYW1pY3MgYW5kIGdsYXNzIGluZHVzdHJ5IG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wMS4wMCNCbG93ZXJzIG9yIGRyeWVycyMyMy4xNS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wMi4wMCNDcnVzaGVycyMyMy4xNS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wMy4wMCNGdXNpb24gd2VsZGluZyBvciBnbGFzcyBkcmF3aW5nIG1hY2hpbmVzIzIzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjA0LjAwI0dyaW5kaW5nIG9yIHBvbGlzaGluZyBtYWNoaW5lcyMyMy4xNS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wNS4wMCNNaXhpbmcgb3Iga25lYWRpbmcgbWFjaGluZXMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDYuMDAjQ2VtZW50IG9yIGNlcmFtaWMgb3IgZ2xhc3Mgb3Igc2ltaWxhciBtYXRlcmlhbCBtb2xkaW5nIG1hY2hpbmVzIzIzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjA3LjAwI1ByZXNzZXMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDguMDAjU2lmdGVycyMyMy4xNS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNy4wMC4wMCNPcHRpY2FsIGluZHVzdHJ5IG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNy4wMS4wMCNMZW5zIGdyaW5kaW5nIG1hY2hpbmVzIzIzLjE1LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE3LjAyLjAwI0xlbnMgbWVhc3VyaW5nIGVxdWlwbWVudCMyMy4xNS4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNy4wMy4wMCNMZW5zIHBvbGlzaGluZyBlcXVpcG1lbnQjMjMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTcuMDQuMDAjTGVucyB0ZXN0aW5nIGVxdWlwbWVudCMyMy4xNS4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNy4wNS4wMCNPcHRpY2FsIHZhY3V1bSBjb2F0aW5nIGVxdWlwbWVudCMyMy4xNS4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wMC4wMCNQaGFybWFjZXV0aWNhbCBpbmR1c3RyeSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDEuMDAjQW1wb3VsZSBmaWxsaW5nIGVxdWlwbWVudCMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wMi4wMCNCb3R0bGUgY2FwcGVycyBvciBjb3R0b24gaW5zZXJ0ZXJzIG9yIHNhZmV0eSBzZWFsIGFwcGxpY2F0b3JzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjAzLjAwI0NhcHN1bGF0aW5nIG1hY2hpbmVzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjA0LjAwI1JlYWN0b3JzIG9yIGZlcm1lbnRlcnMgb3IgZGlnZXN0ZXJzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjA1LjAwI0ZpbGxpbmcgb3Igc2VhbGluZyBhdWdlciBkb3NlIG1hY2hpbmVzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjA2LjAwI1BoYXJtYWNldXRpY2FsIGZpbHRlcnMgb3IgdWx0cmEgZmlsdGVycyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wNy4wMCNGcmVlemVkcnllcnMgb3IgbHlvcGhpbHplcnMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDguMDAjUGhhcm1hY2V1dGljYWwgZ3JhbnVsYXRvcnMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDkuMDAjUGhhbWFjZXV0aWNhbCBzaWV2ZSBvciBzY3JlZW5pbmcgbWFjaGluZXMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMTAuMDAjU3RlcmlsZSBvciBhc2VwdGljIHByb2Nlc3Npbmcgb3IgZmlsbGluZyBtYWNoaW5lcyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4xMS4wMCNUYWJsZXQgb3IgY2Fwc3VsZSB0ZXN0aW5nIG1hY2hpbmVzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjEyLjAwI1RhYmxldCBjb3VudGVycyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4xMy4wMCNUYWJsZXR0aW5nIG1hY2hpbmVzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjE0LjAwI1ZhY2NpbmUgcHJvZHVjdGlvbiBlcXVpcG1lbnQjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMTUuMDAjVmVzc2VsIG1peGVycyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOS4wMC4wMCNQYXBlciBtYWtpbmcgYW5kIHBhcGVyIHByb2Nlc3NpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjE5LjAxLjAwI0N1dHRlcnMjMjMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTkuMDIuMDAjU2xpdHRlcnMjMjMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTkuMDMuMDAjV2FzaGluZyBvciBkZXdhdGVyaW5nIG1hY2hpbmVzIzIzLjE1LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE5LjA0LjAwI1dpbmRlcnMjMjMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTkuMDUuMDAjV29vZCBwdWxwIG9yIGRpc3NvbHZlciBtYWNoaW5lcyMyMy4xNS4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOS4wNi4wMCNDYWxlbmRlcnMgZm9yIHBhcGVyIG9yIGNhcmRib2FyZCBtYWtpbmcjMjMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjAuMDAuMDAjV2ViIGhhbmRsaW5nIGFuZCBjb250cm9sIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMC4wMS4wMCNDb3JvbmEgdHJlYXRlcnMjMjMuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjAuMDIuMDAjRmxhbWUgdHJlYXRlcnMjMjMuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjEuMDAuMDAjU2VwYXJhdGlvbiBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMS4wMS4wMCNWaWJyYXRvcnkgc2VwYXJhdGlvbiBlcXVpcG1lbnQgYW5kIHBhcnRzIGFuZCBzY3JlZW5zIzIzLjE1LjIxLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIxLjAyLjAwI1N0YXRpb25hcnkgc2VwYXJhdGlvbiBlcXVpcG1lbnQgYW5kIHBhcnRzIGFuZCBzY3JlZW5zIzIzLjE1LjIxLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIxLjAzLjAwI0FpciBjbGFzc2lmaWNhdGlvbiBlcXVpcG1lbnQgYW5kIHBhcnRzIGFuZCBzY3JlZW5zIzIzLjE1LjIxLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIxLjA0LjAwI0NlbnRpZnVnYWwgc2VwYXJhdGlvbiBlcXVpcG1lbnQgb3IgcGFydHMgb3Igc2NyZWVucyMyMy4xNS4yMS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMi4wMC4wMCNNYW51ZmFjdHVyaW5nIHRhYmxlcyBhbmQgc3RhbmRzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIyLjAxLjAwI1JvdGFyeSB0YWJsZXMjMjMuMTUuMjIuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjIuMDIuMDAjU3RhY2sgc3RhbmRzIzIzLjE1LjIyLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIyLjAzLjAwI0VuZ2luZSBhbmQgY29tcG9uZW50IHRlc3Qgc3RhbmRzIzIzLjE1LjIyLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIyLjA0LjAwI01hY2hpbmUgZ3VhcmRpbmcjMjMuMTUuMjIuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjMuMDAuMDAjUm90YXJ5IHRhYmxlcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yNC4wMC4wMCNTdGFjayBzdGFuZHMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjUuMDAuMDAjRW5naW5lIGFuZCBjb21wb25lbnQgdGVzdCBzdGFuZHMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjYuMDAuMDAjTWFjaGluZSBndWFyZGluZyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yNy4wMC4wMCNBaXIgY2xhc3NpZmljYXRpb24gZXF1aXBtZW50IGFuZCBwYXJ0cyBhbmQgc2NyZWVucyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yOC4wMC4wMCNDZW50aWZ1Z2FsIHNlcGFyYXRpb24gZXF1aXBtZW50IG9yIHBhcnRzIG9yIHNjcmVlbnMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjkuMDAuMDAjUGFja2FnaW5nIG1hY2hpbmVyeSMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yOS4wMS4wMCNXcmFwcGluZyBtYWNoaW5lcnkjMjMuMTUuMjkuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjkuMDIuMDAjRm9ybSBvciBmaWxsIG9yIHNlYWwgbWFjaGluZXJ5IzIzLjE1LjI5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjI5LjAzLjAwI1BhY2thZ2luZyB2YWN1dW0jMjMuMTUuMjkuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDAuMDAjSG9sZGluZyBhbmQgcG9zaXRpb25pbmcgYW5kIGd1aWRpbmcgc3lzdGVtcyBhbmQgZGV2aWNlcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wMS4wMCNDYWxpYnJhdGlvbiBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDIuMDAjR3VpZGUgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjAzLjAwI01hc3RlciBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDQuMDAjTmVlZGxlIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wNS4wMCNTaGFmdCBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDYuMDAjQ2hlY2tpbmcgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjA3LjAwI1NldHRpbmcgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjA4LjAwI0NhbWVyYSBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDkuMDAjUGlja3VwIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xMC4wMCNSZW1vdmFsIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xMS4wMCNOb3p6bGUgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjEyLjAwI1NsaWRpbmcgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjEzLjAwI0NlbnRlcmluZyBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTQuMDAjSW5zcGVjdGluZyBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTUuMDAjRmVlZGVyIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xNi4wMCNDbHV0Y2ggamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjE3LjAwI0FsaWdubWVudCBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTguMDAjUG9zaXRpb25pbmcgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjE5LjAwI0xpZnRlciBwbGF0ZSMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yMC4wMCNUYXBlIGd1aWRlIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjIxLjAwI1RhcGUgZmVlZCBqYXcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjIuMDAjUG93ZXIgZmVlZGVyIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjIzLjAwI0ZlZWRlciBoYXJuZXNzIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjI0LjAwI0ZlZWQgamF3IzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjI1LjAwI01lY2hhbmljYWwgZ3JpcHBlciMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yNi4wMCNIb2xkZXIgamF3IzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjI3LjAwI0phdyBhc3NlbWJseSMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yOC4wMCNTdGF0aW9uYXJ5IGphdyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yOS4wMCNKaWcgYmxvY2sjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMzAuMDAjTGluZWFyIG1vdGlvbiBndWlkZXMjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMzEuMDAjTWVhc3VyaW5nIGppZ3MjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMzIuMDAjUmluZyBqaWdzIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMxLjAwLjAwI0luZHVzdHJpYWwgbWFjaGluZXJ5IGNvbXBvbmVudHMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzEuMDEuMDAjUGl0Y2ggc3RvcHBlciMyMy4xNS4zMS4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMS4wMi4wMCNQYXBlciBzdG9wcGVyIzIzLjE1LjMxLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMxLjAzLjAwI1N0b3BwZXIgcGFkIzIzLjE1LjMxLjAwLjAwCi11bnNwc2M3IzIzLjE2LjAwLjAwLjAwI0ZvdW5kcnkgIG1hY2hpbmVzIGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjAwLjAwI0ZvdW5kcnkgbWFjaGluZXMgYW5kIGVxdWlwbWVudCMyMy4xNi4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wMS4wMCNGb3VuZHJ5IGJsb3dlcnMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDIuMDAjRm91bmRyeSBidXJuZXJzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjAzLjAwI0NvcmUgZHJ5aW5nIG92ZW5zIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjA0LjAwI0ZvcmdpbmcgcHJlc3NlcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wNS4wMCNIb3QgbWV0YWwgbWl4ZXJzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjA2LjAwI0ZvdW5kcnkgY3J1Y2libGVzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjA3LjAwI0ZvdW5kcnkgY29udmVydGVycyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wOC4wMCNPcGVuIGRpZSBmb3JnaW5nIHByZXNzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjA5LjAwI0Zvcmdpbmcgc3RhbXBpbmcgbWFjaGluZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMTAuMDAjQ2FzdGluZyBtYWNoaW5lcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4xMS4wMCNGb3JnaW5nIHJvbGxzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjEyLjAwI1JhZGlhbCBmb3JnaW5nIG1hY2hpbmVzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjEzLjAwI0NvbGQgZm9ybWluZyBwcmVzc2VzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjE0LjAwI1NpemluZyBvciBlbWJvc3NpbmcgcHJlc3NlcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4xNS4wMCNFbmQgZm9yZ2luZyBtYWNoaW5lcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wMC4wMCNGb3VuZHJ5IHN1cHBsaWVzIzIzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE2LjE2LjAxLjAwI0ZvdW5kcnkgYmVsbG93cyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wMi4wMCNGb3VuZHJ5IGNsYXlzIzIzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE2LjAzLjAwI0ZvdW5kcnkgZmxhc2tzIzIzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE2LjA0LjAwI0ZvdW5kcnkgZmx1eGVzIzIzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE2LjA1LjAwI0ZvdW5kcnkgbGFkbGVzIzIzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE2LjA2LjAwI0ZvdW5kcnkgbW9sZHMjMjMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDcuMDAjRm91bmRyeSBzYW5kIzIzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE2LjA4LjAwI0ZvdW5kcnkgc2hvdmVscyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4wMC4wMC4wMCNXb3Jrc2hvcCBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDAuMDAjU29sZGVyaW5nIGFuZCBicmF6aW5nIGFuZCB3ZWxkaW5nIG1hY2hpbmVyeSBhbmQgc3VwcGxpZXMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDEuMDAjQW50aSBzcGF0dGVyIHNwcmF5cyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wMi4wMCNHYXMgd2VsZGluZyBvciBicmF6aW5nIHJvZHMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDMuMDAjRmlsbGVyIG1ldGFsIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjA0LjAwI0Jsb3cgcGlwZXMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDUuMDAjSXJvbiBwb3dkZXIjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDYuMDAjU29sZGVyaW5nIGZsdWlkIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjA3LjAwI1NvbGRlcmluZyBpcm9ucyBvciBndW5zIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjA4LjAwI1dlbGRlcnMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDkuMDAjU29sZGVyIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjEwLjAwI1dlbGRpbmcgd2lyZSMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xMS4wMCNXZWxkaW5nIHRvb2xzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjEyLjAwI1dlbGRpbmcgcm9kcyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xMy4wMCNXZWxkaW5nIHJlY3RpZmllcnMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTQuMDAjV2VsZGluZyBnZW5lcmF0b3JzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjE1LjAwI1dlbGRpbmcgZWxlY3Ryb2RlcyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xNy4wMCNCbG93IHRvcmNoZXMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTguMDAjUGxhc21hIHdlbGRpbmcgbWFjaGluZXJ5IzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjE5LjAwI1R1bmdzdGVuIGluZXJ0IGdhcyAoVElHKSB3ZWxkaW5nIG1hY2hpbmVyeSMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yMC4wMCNVbHRyYXNvdW5kIHdlbGRpbmcgbWFjaGluZXJ5IzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjIxLjAwI0xhc2VyIHdlbGRpbmcgbWFjaGluZXJ5IzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjIyLjAwI1NvbGRlcmluZyBmbHV4ZXMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjMuMDAjVGVtcGVyYXR1cmUgaW5kaWNhdGluZyBzdGlja3MjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjQuMDAjQnJhemUgcmluZ3MjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjUuMDAjU29sZGVyaW5nIHRpcHMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjYuMDAjRGVzb2xkZXJpbmcgdGlwcyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yNy4wMCNEZXNvbGRlcmluZyBicmFpZCMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yOC4wMCNXZWxkaW5nIHNjcmVlbnMgb3IgY3VydGFpbnMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjkuMDAjV2VsZGluZyBvciBzb2xkZXJpbmcga2l0IzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjMwLjAwI1NvbGRlcmluZyBvciBkZXNvbGRlcmluZyBvciBjb21iaW5lZCBzdGF0aW9ucyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4zMS4wMCNEZXNvbGRlcmluZyBHdW4jMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDAuMDAjTWFjaGluZSB0b29scyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wMS4wMCNCb3JpbmcgdG9vbHMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDIuMDAjQmFyIG9yIHJvZCBjdXR0ZXJzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjAzLjAwI1BpcGUgb3IgdHViZSBjdXR0ZXJzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjA0LjAwI1dpcmUgb3IgY2FibGUgY3V0dGVycyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wNS4wMCNEZWJ1cnJpbmcgZXF1aXBtZW50IzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjA2LjAwI0xhdGhlcyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wNy4wMCNMYXRoZSB0b29scyBvciBkaWVzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjA4LjAwI0xhc2VyIGN1dHRpbmcgdG9vbHMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDkuMDAjVHdpc3QgZHJpbGxzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjEwLjAwI1JlYW1lcnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTEuMDAjQ291bnRlcmJvcmVzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjEyLjAwI01pbGxpbmcgY3V0dGVycyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xMy4wMCNIb2JzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjE0LjAwI0dlYXIgc2hhcGVycyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xNS4wMCNTaGF2aW5nIGN1dHRlcnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTYuMDAjV2F0ZXIgamV0IGN1dHRpbmcgbWFjaGluZXMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTcuMDAjQnJvYWNoaW5nIHRvb2xzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjE4LjAwI0luZGV4YWJsZSBpbnNlcnRzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjE5LjAwI0JvcmluZyB0b29scyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4yMC4wMCNCcm9hY2hlcyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4yMS4wMCNJbnNlcnRpb24gdG9vbHMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMjIuMDAjV29ya3Nob3AgcHJlc3NlcyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wMC4wMCNNZXRhbCBiZW5kaW5nIGFuZCBmb3JtaW5nIG1hY2hpbmVyeSMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wMS4wMCNUYW5nZW50IGJlbmRlcnMjMjMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDIuMDAjV2luZyBiZW5kZXJzIzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjAzLjAwI1R1YmUgYmVuZGluZyBtYWNoaW5lcnkjMjMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDQuMDAjUGlwZSBiZW5kaW5nIG1hbmRyZWxzIzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjA1LjAwI0RpZSBiZW5kcyMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wNi4wMCNTZXF1ZW50aWFsIGZvcm1pbmcgbWFjaGluZXMjMjMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDcuMDAjVHViZSBlbmQgZmluaXNoZXJzIzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjA4LjAwI01hY2hpbmUgbW91bnRpbmcjMjMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDAuMDAjTWV0YWwgZmFicmljYXRpbmcgZGllcyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOC4wMS4wMCNTdGFtcGluZyBvciBmb3JtaW5nIGRpZXMjMjMuMTcuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDIuMDAjRGllIGNhc3RpbmcgZGllcyMyMy4xNy4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOC4wMy4wMCNNZXRhbCBleHRydXNpb24gZGllcyMyMy4xNy4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOC4wNC4wMCNDdXR0aW5nIGRpZXMgb3IgdG9vbGluZyMyMy4xNy4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOC4wNS4wMCNSb3RhcnkgZGllcyMyMy4xNy4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOC4wNi4wMCNTdGVlbCBydWxlIGRpZXMjMjMuMTcuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTkuMDAuMDAjU3BlY2lhbCB0b29saW5nIGZpeHR1cmVzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjE5LjAxLjAwI0hvbGRpbmcgZml4dHVyZXMjMjMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTkuMDIuMDAjR2F1Z2VzIGFuZCBpbnNwZWN0aW9uIGZpeHR1cmVzIzIzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE5LjAzLjAwI0ZhYnJpY2F0ZWQgdG9vbGluZyBmaXh0dXJlcyMyMy4xNy4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOS4wNC4wMCNDYXN0aW5nIHRvb2xpbmcjMjMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTkuMDUuMDAjRm9yZ2luZyB0b29saW5nIzIzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE5LjA2LjAwI0Fzc2VtYmx5IG9yIGRpc2Fzc2VtYmx5IHRvb2xpbmcjMjMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDAuMDAjTWV0YWwgd29ya2luZyBtYWNoaW5lcnkgYXR0YWNobWVudHMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDEuMDAjQnVycnMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDIuMDAjRm9ybSBSZWxpZWYjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDMuMDAjTWFjaGluZSB0aHJlYWRpbmcgdGFwcyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wNC4wMCNNYWNoaW5lIHRocmVhZGluZyBkaWVzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjA1LjAwI01hY2hpbmUgZW5kIG1pbGxzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjA2LjAwI01ldGFsIHN0YW1wcyBvciBwdW5jaGVzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjA3LjAwI01ldGFsIGN1dHRpbmcgYmFuZCBzYXcgYmxhZGVzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjA4LjAwI01ldGFsIGN1dHRpbmcgY2lyY3VsYXIgc2F3IGJsYWRlcyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wOS4wMCNDYXJiaWRlIGluc2VydHMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMTAuMDAjQ2VyYW1pYyBpbnNlcnRzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjExLjAwI1N0ZWVsIGluc2VydHMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMTIuMDAjRGlhbW9uZCBpbnNlcnRzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjEzLjAwI1RocmVhZGluZyBtaWxscyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMS4wMC4wMCNIb2xkaW5nIGZpeHR1cmVzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIyLjAwLjAwI0dhdWdlcyBhbmQgaW5zcGVjdGlvbiBmaXh0dXJlcyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMy4wMC4wMCNGYWJyaWNhdGVkIHRvb2xpbmcgZml4dHVyZXMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjQuMDAuMDAjQ2FzdGluZyB0b29saW5nIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjI1LjAwLjAwI0ZvcmdpbmcgdG9vbGluZyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yNi4wMC4wMCNBc3NlbWJseSBvciBkaXNhc3NlbWJseSB0b29saW5nIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE4LjAwLjAwLjAwI0luZHVzdHJpYWwgZm9vZCBhbmQgYmV2ZXJhZ2UgZXF1aXBtZW50IzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjAwLjAwI0Zvb2QgcHJlcGFyYXRpb24gbWFjaGluZXJ5IzIzLjE4LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjAxLjAwI0ZpbGxpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjAyLjAwI01pbGxpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjAzLjAwI01peGluZyBtYWNoaW5lcnkjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDQuMDAjU2lmdGluZyBtYWNoaW5lcnkjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDUuMDAjRGVoeWRyYXRpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjA2LjAwI1dhc2hpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjA3LjAwI0NydXNoaW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wOC4wMCNCbGFuY2hpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjA5LjAwI1NvcnRpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjEwLjAwI01lYXQgdHllcnMjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDAuMDAjRm9vZCBjdXR0aW5nIG1hY2hpbmVyeSMyMy4xOC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNi4wMS4wMCNEaWNpbmcgbWFjaGluZXJ5IzIzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE2LjAyLjAwI1NsaWNpbmcgbWFjaGluZXJ5IzIzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE2LjAzLjAwI0Nob3BwaW5nIG1hY2hpbmVyeSMyMy4xOC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNi4wNC4wMCNDdXR0aW5nIG1hY2hpbmVyeSMyMy4xOC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNi4wNS4wMCNHcmF0aW5nIG1hY2hpbmVyeSMyMy4xOC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNi4wNi4wMCNQZWVsaW5nIG1hY2hpbmVyeSMyMy4xOC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNy4wMC4wMCNGb29kIGNvb2tpbmcgYW5kIHNtb2tpbmcgbWFjaGluZXJ5IzIzLjE4LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE4LjE3LjAxLjAwI1Ntb2tpbmcgbWFjaGluZXJ5IzIzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE3LjAyLjAwI1JvYXN0aW5nIG1hY2hpbmVyeSMyMy4xOC4xNy4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNy4wMy4wMCNDb29raW5nIG1hY2hpbmVyeSMyMy4xOC4xNy4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNy4wNC4wMCNTdGVhbWluZyBtYWNoaW5lcnkjMjMuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTguMDAuMDAjSW5kdXN0cmlhbCBiZXZlcmFnZSBwcm9jZXNzaW5nIG1hY2hpbmVyeSMyMy4xOC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xOC4wMS4wMCNDb2ZmZWUgYnJld2luZyBlcXVpcG1lbnQgb3Igc3VwcGxpZXMjMjMuMTguMTguMDAuMDAKLXVuc3BzYzcjMjMuMTguMTguMDIuMDAjSnVpY2luZyBtYWNoaW5lcnkjMjMuMTguMTguMDAuMDAKLXVuc3BzYzcjMjMuMTguMTguMDMuMDAjSWNlIG1ha2luZyBtYWNoaW5lcyMyMy4xOC4xOC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xOC4wNC4wMCNJY2UgY3JlYW0gbWFjaGluZXMjMjMuMTguMTguMDAuMDAKLXVuc3BzYzcjMjMuMTkuMDAuMDAuMDAjTWl4ZXJzIGFuZCB0aGVpciBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTAuMDAuMDAjQmF0Y2ggbWl4ZXJzIzIzLjE5LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjEwLjAxLjAwI0NoYW5nZSBjYW4gbWl4ZXJzIzIzLjE5LjEwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjEwLjAyLjAwI0hlbGljYWwgYmxhZGUgbWl4ZXIjMjMuMTkuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTAuMDMuMDAjRG91YmxlIGFybSBrbmVhZGluZyBtaXhlcnMjMjMuMTkuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTAuMDQuMDAjSW50ZW5zaXZlIG1peGVycyMyMy4xOS4xMC4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMC4wNS4wMCNSb2xsIG1peGVycyMyMy4xOS4xMC4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMS4wMC4wMCNDb250aW51b3VzIG1peGVycyMyMy4xOS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMS4wMS4wMCNTaW5nbGUgc2NyZXcgbWl4ZXJzIzIzLjE5LjExLjAwLjAwCi11bnNwc2M3IzIzLjE5LjExLjAyLjAwI1R3aW4gc2NyZXcgZXh0cnVkZXIjMjMuMTkuMTEuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMDAuMDAuMDAjTWFzcyB0cmFuc2ZlciBlcXVpcG1lbnQjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTAuMDAuMDAjR2FzIGxpcXVpZCBjb250YWN0aW5nIHN5c3RlbXMjMjMuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTAuMDEuMDAjUGxhdGUgY29sdW1ucyMyMy4yMC4xMC4wMC4wMAotdW5zcHNjNyMyMy4yMC4xMC4wMi4wMCNQYWNrZWQgY29sdW1ucyMyMy4yMC4xMC4wMC4wMAotdW5zcHNjNyMyMy4yMC4xMC4wMy4wMCNMaXF1aWQgZGlzcGVyc2VkIGNvbnRhY3RvciMyMy4yMC4xMC4wMC4wMAotdW5zcHNjNyMyMy4yMC4xMC4wNC4wMCNXZXR0ZWQgd2FsbCBjb2x1bW4jMjMuMjAuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTAuMDUuMDAjQnViYmxlIGNvbHVtbnMjMjMuMjAuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTEuMDAuMDAjQWRzb3JwdGlvbiBhbmQgaW9uIGV4Y2hhbmdlIzIzLjIwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjExLjAxLjAwI0Fkc29yYmVyIHZlc3NlbCMyMy4yMC4xMS4wMC4wMAotdW5zcHNjNyMyMy4yMC4xMS4wMi4wMCNBbWJpZW50IHByZXNzdXJlIGFkc29yYmVyIHZlc3NlbCMyMy4yMC4xMS4wMC4wMAotdW5zcHNjNyMyMy4yMS4wMC4wMC4wMCNFbGVjdHJvbmljIG1hbnVmYWN0dXJpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjIxLjEwLjAwLjAwI0VsZWN0cm9uaWMgYXNzZW1ibHkgbWFjaGluZXJ5IGFuZCBzdXBwb3J0IGVxdWlwbWVudCMyMy4yMS4wMC4wMC4wMAotdW5zcHNjNyMyMy4yMS4xMC4wMS4wMCNDaGlwIHBsYWNlcnMjMjMuMjEuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMjEuMTAuMDIuMDAjR2x1ZSBkaXNwZW5zaW5nIG1hY2hpbmVyeSMyMy4yMS4xMC4wMC4wMAotdW5zcHNjNyMyNC4wMC4wMC4wMC4wMCNNYXRlcmlhbCBIYW5kbGluZyBhbmQgQ29uZGl0aW9uaW5nIGFuZCBTdG9yYWdlIE1hY2hpbmVyeSBhbmQgdGhlaXIgQWNjZXNzb3JpZXMgYW5kIFN1cHBsaWVzIzI0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjAwLjAwLjAwI01hdGVyaWFsIGhhbmRsaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzI0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjAwLjAwI0luZHVzdHJpYWwgdHJ1Y2tzIzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjAxLjAwI0NhcnRzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjAyLjAwI0J1bGsgdHJhbnNwb3J0ZXJzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjAzLjAwI0RvbGxpZXMjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDQuMDAjSGFuZCB0cnVja3Mgb3IgYWNjZXNzb3JpZXMjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDUuMDAjUGFsbGV0IHRydWNrcyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wNi4wMCNQdXNoY2FydHMjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDcuMDAjV2hlZWxiYXJyb3dzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjA4LjAwI0NyZWVwZXJzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjA5LjAwI1dhZ29ucyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4xMC4wMCNUaWx0IHRydWNrcyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4xMS4wMCNTaGVsZiB0cm9sbGV5cyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wMC4wMCNMaWZ0aW5nIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDEuMDAjRWxldmF0b3JzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjAyLjAwI0hvaXN0cyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wMy4wMCNGb3JrbGlmdHMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDQuMDAjTGlmdHMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDUuMDAjTG9hZGluZyBlcXVpcG1lbnQjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDYuMDAjU3RhY2tlcnMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDcuMDAjQ3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA4LjAwI1dpbmNoZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDkuMDAjVGlsdHMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTAuMDAjTWFuaXB1bGF0b3JzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjExLjAwI1NsaW5ncyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xMi4wMCNKYWNrcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xMy4wMCNCbG9ja3Mgb3IgcHVsbGV5cyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xNC4wMCNBaXIgYmFncyBmb3IgbG9hZGluZyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xNS4wMCNMb2FkaW5nIHJhbXBzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjE2LjAwI0JlbG93IHRoZSBob29rIGRldmljZSMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xNy4wMCNTY2lzc29yIGxpZnQjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTguMDAjUGlwZSBsYXllciMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xOS4wMCNCcmlkZ2UgY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjIwLjAwI1RyYWNrIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yMS4wMCNBbGwgdGVycmFpbiBjcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjIuMDAjUm91Z2ggdGVycmFpbiBjcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjMuMDAjVG93ZXIgY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjI0LjAwI0h5ZHJhdWxpYyB0cnVjayBjcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjUuMDAjQ29udmVudGlvbmFsIHRydWNrIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yNi4wMCNFc2NhbGF0b3Igb3Igd2Fsa3dheXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjcuMDAjR2lyZGVyIHRyb2xsZXlzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjI4LjAwI0FkanVzdGFibGUgZm9ya3MjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjkuMDAjRm9ya2xpZnQgYWNjZXNzb3JpZXMgb3Igc3VwcGxpZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMzAuMDAjV29ya3Nob3AgY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjMxLjAwI1N1Y3Rpb24gY3VwcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4zMi4wMCNTaWRlIHNoaWZ0cyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wMC4wMCNDb252ZXlvcnMgYW5kIGFjY2Vzc29yaWVzIzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjAxLjAwI0NvbnZleW9yIHJvbGxlciMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wMi4wMCNCYWxsIHRyYW5zZmVyIHRhYmxlcyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wMy4wMCNSb2NrIGJpbnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDQuMDAjQ29udmV5b3IgZmVlZGVycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wNS4wMCNDb252ZXlvciBzY3JldyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wNi4wMCNUcm9sbGV5cyBvciBhY2Nlc3NvcmllcyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wNy4wMCNDb252ZXlvciByYWlscyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wOC4wMCNFeHRlbmRhYmxlIGNvbnZleW9ycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wOS4wMCNSb2xsZXIgY29udmV5b3JzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjEwLjAwI1BhY2thZ2Ugc3RvcHMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTEuMDAjVHVybnRhYmxlcyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xMi4wMCNCZWx0IGNvbnZleW9ycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xMy4wMCNCdWNrZXQgY29udmV5b3JzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjE0LjAwI0FpciBjb252ZXlvcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTUuMDAjQ29udmV5b3IgYmVsdGluZyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xNi4wMCNDb252ZXlvciBwdWxsZXlzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjE3LjAwI0NvbnZleW9yIGlkbGVycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xOC4wMCNDb252ZXlvciBiZWx0IGxhY2luZyBvciBmYXN0ZW5lcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTkuMDAjQ29udmV5b3IgYmVsdCBicnVzaGVzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjIwLjAwI1dlYXIgc3RyaXBzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjIxLjAwI1Ryb2xsZXkgbGlkIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjIyLjAwI0NoYWluIGNvbnZleW9ycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wMC4wMCNEb2NrIGVxdWlwbWVudCMyNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wMS4wMCNEb2NrIGxldmVsZXJzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjAyLjAwI0RvY2sgc2VhbHMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDMuMDAjRG9jayByYW1wcyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wNC4wMCNTdHJpcCBkb29ycyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wNS4wMCNEb2NrIGJ1bXBlcnMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDYuMDAjRG9jayBsYWRkZXJzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjA3LjAwI0RvY2sgcGxhdGVzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjA4LjAwI1doZWVsIGNob2NrcyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wOS4wMCNEb2NrIHJhaWxzIGFuZCBhY2Nlc3NvcmllcyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOS4wMC4wMCNEcnVtIGhhbmRsaW5nIGVxdWlwbWVudCMyNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOS4wMS4wMCNEcnVtIG9wZW5lcnMjMjQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDIuMDAjRHJ1bSBncmFicyMyNC4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOS4wMy4wMCNEcnVtIGxpZnRlcnMjMjQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDQuMDAjRHJ1bSBjcmFkbGVzIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjA1LjAwI1NwaWxsIGRlY2sjMjQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDYuMDAjRHJ1bSByZWN1cGVyYXRvcnMjMjQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDcuMDAjU3BpbGwgY29udGFpbm1lbnQgc3VwcG9ydHMjMjQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDAuMDAjU2hlbHZpbmcgYW5kIHN0b3JhZ2UjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDEuMDAjUmFjayBzeXN0ZW1zIGZvciByYWNrIG1vdW50IGVsZWN0cm9uaWMgZXF1aXBtZW50IzI0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjAyLjAwI0JpbiBoYW5kbGVycyMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wMy4wMCNQYWxsZXRzIzI0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjA0LjAwI1N0b3JhZ2UgcmFja3Mgb3Igc2hlbHZlcyMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wNS4wMCNBdXRvbWF0ZWQgc3RvcmFnZSBvciByZXRyaWV2YWwgc3lzdGVtcyMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wNi4wMCNXb3JrIGJlbmNoZXMjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDcuMDAjUmVlbCBzdG9yYWdlIHNoZWx2ZXMjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDguMDAjUG9ydGFibGUgcmVlbCBob2xkZXJzIzI0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjAwLjAwI1dhcmVob3VzaW5nIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjEuMDEuMDAjQ2FyZ28gaGFuZGxpbmcgZXF1aXBtZW50IzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjAyLjAwI1dhcmVob3VzZSBjYXJvdXNlbHMjMjQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjEuMDMuMDAjV2FyZWhvdXNlIGNhc2VycyMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wNC4wMCNEZXBhbGxldGl6ZXJzIzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjA1LjAwI1BhbGxldGl6ZXJzIzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjA2LjAwI0luZHVzdHJpYWwgc2hyaW5rIHdyYXAgZXF1aXBtZW50IzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjA3LjAwI0NhcnRvbmluZyBtYWNoaW5lcnkjMjQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjEuMDguMDAjUGFja2FnaW5nIGNvbXBhY3RvcnMjMjQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDAuMDAjUGFja2luZyB0b29scyMyNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMi4wMS4wMCNTdHJldGNoIGZpbG0gZGlzcGVuc2VycyMyNC4xMC4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMi4wMi4wMCNCb3ggc2VhbGluZyB0YXBlIGRpc3BlbnNlcnMjMjQuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDMuMDAjQmFnIHNlYWxpbmcgdG9vbHMgYW5kIGVxdWlwbWVudCMyNC4xMC4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMi4wNC4wMCNTdHJhcHBpbmcgZGlzcGVuc2VyIzI0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjA1LjAwI1N0cmFwcGluZyB0ZW5zaW9uZXJzIG9yIHNlYWxlcnMjMjQuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDYuMDAjQ2FydG9uIGZvcm1pbmcgbWFjaGluZXMjMjQuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDcuMDAjVGFwaW5nIG1hY2hpbmVzIzI0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjAwLjAwLjAwI0NvbnRhaW5lcnMgYW5kIHN0b3JhZ2UjMjQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDAuMDAjQmFncyMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wMS4wMCNDYW52YXMgYmFncyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wMi4wMCNQYXBlciBiYWdzIzI0LjExLjE1LjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjAzLjAwI1BsYXN0aWMgYmFncyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wNC4wMCNQb3VjaGVzIzI0LjExLjE1LjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjA1LjAwI0ZsZXhpYmxlIGludGVybWVkaWF0ZSBidWxrIGNvbnRhaW5lcnMjMjQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDYuMDAjTGF1bmRyeSBuZXRzIG9yIGJhZ3MjMjQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDcuMDAjVG9vbCBiYWdzIzI0LjExLjE1LjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjA4LjAwI1RlbnQgYmFnIzI0LjExLjE1LjAwLjAwCi11bnNwc2M3IzI0LjExLjE2LjAwLjAwI0NvdmVycyBhbmQgY2FwcyMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wMC4wMCNUYW5rcyBhbmQgY3lsaW5kZXJzIGFuZCB0aGVpciBhY2Nlc3NvcmllcyMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wMS4wMCNSZXNlcnZvaXJzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjAyLjAwI0FpciBvciBnYXMgdGFua3Mgb3IgY3lsaW5kZXJzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjAzLjAwI1N0b3JhZ2UgdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDQuMDAjQ2FsaWJyYXRpbmcgdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDUuMDAjQ2hlbWljYWwgdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDYuMDAjRGlwIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjA3LjAwI0V4cGFuc2lvbiB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wOC4wMCNGdWVsIHN0b3JhZ2UgdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDkuMDAjUHJvY2Vzc2luZyB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4xMC4wMCNXYXRlciBzdG9yYWdlIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjExLjAwI0NhcmJveXMjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMTIuMDAjQ29udGFpbm1lbnQgYmFzaW4jMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMTMuMDAjUmluc2UgdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjAuMDAuMDAjQmlucyBhbmQgYmFza2V0cyMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMC4wMS4wMCNCaW5zIzI0LjExLjIwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIwLjAyLjAwI0Jhc2tldHMjMjQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjAuMDMuMDAjTm9uIG1ldGFsbGljIGJpbnMjMjQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjAuMDQuMDAjTWV0YWxsaWMgYmlucyMyNC4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMC4wNS4wMCNNZXRhbGxpYyBiYXNrZXRzIzI0LjExLjIwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIwLjA2LjAwI05vbiBtZXRhbGxpYyBiYXNrZXRzIzI0LjExLjIwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjAwLjAwI0Nhc2tzIGFuZCBiYXJyZWxzIGFuZCBkcnVtcyMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wMS4wMCNDYXNrcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wMi4wMCNCYXJyZWxzIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjAzLjAwI1N0YWlubGVzcyBzdGVlbCBkcnVtcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wNC4wMCNTdGVlbCBkcnVtcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wNS4wMCNQb2x5ZXRoeWxlbmUgZHJ1bXMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDYuMDAjQ29tcG9zaXRlIGRydW1zIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjA3LjAwI0ZpYmVyIGRydW1zIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjA4LjAwI01ldGFsbGljIGRydW1zIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjA5LjAwI05vbiBtZXRhbGxpYyBkcnVtcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4xMC4wMCNJbnRlcm1lZGlhdGUgYnVsayBjb250YWluZXJzIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjExLjAwI1N0YWJpbGl6ZXIjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMTIuMDAjRHJ1bSBsaWQjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDAuMDAjQ2FucyBhbmQgcGFpbHMjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDEuMDAjU3RlZWwgcGFpbHMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDIuMDAjR2Fzb2xpbmUgY2FucyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wMy4wMCNQbGFzdGljIHBhaWxzIzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjA0LjAwI01ldGFsbGljIHBhaWxzIzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjA1LjAwI05vbiBtZXRhbGxpYyBwYWlscyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wNi4wMCNNZXRhbGxpYyBmbGFtbWFibGUgbGlxdWlkIGNhbnMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDcuMDAjTm9uIG1ldGFsbGljIGZsYW1tYWJsZSBsaXF1aWQgY2FucyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wOC4wMCNTcHJheSBraXQjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDkuMDAjSmVycnljYW5zIzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjAwLjAwI1N0b3JhZ2UgY2hlc3RzIGFuZCBjYWJpbmV0cyBhbmQgdHJ1bmtzIzI0LjExLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjAxLjAwI1Rvb2wgY2hlc3RzIG9yIGJveGVzIG9yIGNhYmluZXRzIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjAyLjAwI0hhemFyZG91cyBtYXRlcmlhbHMgY2FiaW5ldHMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDMuMDAjVG9vbCBiZWx0cyMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wNC4wMCNCb3gjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDUuMDAjRHJhd2VycyMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wNi4wMCNCb3ggb3Igc2hlbGYgcGFydGl0aW9ucyMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wNy4wMCNNYWlsIGJveGVzIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjA4LjAwI0FudGlzdGF0aWMgYm94ZXMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDkuMDAjQm94IGxpZHMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDAuMDAjQ29ycnVnYXRlZCBhbmQgb3RoZXIgYm94ZXMgZm9yIGRpc3RyaWJ1dGlvbiMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNS4wMS4wMCNTbG90dGVkIGNvcnJ1Z2F0ZWQgY2FydG9ucyMyNC4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNS4wMi4wMCNPbmUgcGllY2UgZGllIGN1dCBzaGlwcGluZyBjYXJ0b25zIzI0LjExLjI1LjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjAzLjAwI0RpZSBjdXQgY29ycnVnYXRlZCBzaGlwcGluZyBjYXJ0b25zIHdpdGggc2VwYXJhdGUgbGlkcyMyNC4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNS4wNC4wMCNNb2xkZWQgYm94ZXMjMjQuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDUuMDAjUmlnaWQgYm94ZXMjMjQuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDYuMDAjRmxleGlibGUgaW50ZXJtZWRpYXRlIGJ1bGsgY29udGFpbmVycyMyNC4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNS4wNy4wMCNJbnRlcm1lZGlhdGUgYnVsayBjb250YWluZXJzIzI0LjExLjI1LjAwLjAwCi11bnNwc2M3IzI0LjExLjI2LjAwLjAwI0xpcXVpZCBjb250YWluZXJzIzI0LjExLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjI2LjAxLjAwI0p1Z3MjMjQuMTEuMjYuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjYuMDIuMDAjSmFycyMyNC4xMS4yNi4wMC4wMAotdW5zcHNjNyMyNC4xMi4wMC4wMC4wMCNQYWNrYWdpbmcgbWF0ZXJpYWxzIzI0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjAwLjAwI1BhY2thZ2luZyBib3hlcyBhbmQgYmFncyBhbmQgcG91Y2hlcyMyNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wMS4wMCNQb2x5IGJhZ3MjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDIuMDAjUGFja2FnaW5nIHBvdWNoZXMgb3IgYmFncyMyNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wMy4wMCNQYWNrYWdpbmcgYm94ZXMjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDQuMDAjQ2FyZGVkIHBhY2thZ2luZyMyNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wNS4wMCNUYXJwYXVsaW5zIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjA2LjAwI0NvbmR1Y3RpdmUgYm94ZXMjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDcuMDAjUmlnaWQgc2V0IHVwIGJveGVzIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjA4LjAwI0VnZyB0cmF5cyMyNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMi4xOC4wMC4wMCNQYWNrYWdpbmcgY2FucyMyNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xOC4wMS4wMCNBZXJvc29sIGNhbnMjMjQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTguMDIuMDAjUGFpbnQgb3IgdmFybmlzaCBjYW5zIzI0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE4LjAzLjAwI0JldmVyYWdlIGNhbnMjMjQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTguMDQuMDAjRm9vZCBjYW5zIzI0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE4LjA1LjAwI1N0ZWVsIGNhbnMjMjQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTguMDYuMDAjQWx1bWludW0gY2FucyMyNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMi4yMC4wMC4wMCNCb3R0bGVzIzI0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjIwLjAxLjAwI1NxdWVlemUgYm90dGxlcyMyNC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4yMC4wMi4wMCNQbGFzdGljIGJvdHRsZXMjMjQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMjAuMDMuMDAjR2xhc3MgYm90dGxlcyMyNC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4yMC4wNC4wMCNDYXBzIG9yIHRvcHMjMjQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMjAuMDUuMDAjQXBwbGljYXRvciBib3R0bGVzIzI0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjIwLjA2LjAwI0FwcGxpY2F0b3JzIzI0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEzLjAwLjAwLjAwI0luZHVzdHJpYWwgcmVmcmlnZXJhdGlvbiMyNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNS4wMC4wMCNJbmR1c3RyaWFsIHJlZnJpZ2VyYXRvcnMjMjQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDEuMDAjQ29tYmluZWQgcmVmcmlnZXJhdG9yIGZyZWV6ZXJzIzI0LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE1LjAyLjAwI0xpcXVpZCBuaXRyb2dlbiByZWZyaWdlcmF0b3JzIzI0LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE1LjAzLjAwI1dhbGsgaW4gcmVmcmlnZXJhdG9ycyMyNC4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNS4wNC4wMCNSZWZyaWdlcmF0ZWQgY29udGFpbmVycyMyNC4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNS4wNS4wMCNSZWZyaWdlcmF0ZWQgdmVzc2VscyMyNC4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNS4wNi4wMCNSZWZyaWdlcmF0ZWQgdGFua3MjMjQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDAuMDAjSW5kdXN0cmlhbCBmcmVlemVycyMyNC4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wMS4wMCNDaGVzdCBmcmVlemVycyMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wMi4wMCNVcHJpZ2h0IGZyZWV6ZXJzIzI0LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE2LjAzLjAwI0xvdyB0ZW1wZXJhdHVyZSBmcmVlemVycyMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wNC4wMCNGcmVlemUgZHJ5aW5nIGVxdWlwbWVudCMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wNS4wMCNXYWxrIGluIGZyZWV6ZXJzIzI0LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE2LjA2LjAwI1BsYXRlIGZyZWV6ZXJzIzI0LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE2LjA3LjAwI0JsYXN0IGZyZWV6ZXJzIzI0LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE5LjAwLjAwI0ljZSBtYWtlcnMjMjQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTkuMDEuMDAjSWNlIGN1YmUgbWFrZXJzIzI0LjEzLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE5LjAyLjAwI0ljZSBibG9jayBtYWtlcnMjMjQuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMDAuMDAuMDAjUGFja2luZyBzdXBwbGllcyMyNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wMC4wMCNTZWN1cmluZyBhbmQgcHJvdGVjdGluZyBzdXBwbGllcyMyNC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wMS4wMCNTdHJldGNoIHdyYXAgZmlsbXMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDIuMDAjU2hyaW5rIHdyYXAgZmlsbXMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDMuMDAjUG9seWV0aHlsZW5lIGZpbG1zIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjA0LjAwI1RhbXBlciBwcm9vZiBvciBzZWN1cml0eSBzZWFscyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wNS4wMCNQb2x5ZXRoeWxlbmUgZmlsbXMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDYuMDAjVGFycGF1bGlucyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wNy4wMCNBbnRpIHN0YXRpYyBwYWNrYWdpbmcgZmlsbXMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDguMDAjQ2FydG9uIGNvcm5lciBzdXBwb3J0IzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjA5LjAwI1J1YmJlciBjb3JkIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjEwLjAwI0NhYmxlIHByb3RlY3RvcnMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMTEuMDAjTG9hZCBiaW5kZXJzIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjAwLjAwI0N1c2hpb25pbmcgc3VwcGxpZXMjMjQuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDEuMDAjQnViYmxlIHdyYXAjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDIuMDAjVGhlcm1vZm9ybWluZyBtYXRlcmlhbHMjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDMuMDAjQ3VzaGlvbmluZyMyNC4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wNC4wMCNXYWRkaW5nIG1hdGVyaWFscyMyNC4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wNS4wMCNBaXIgZmlsbGVkIHBhY2tpbmcgbWF0ZXJpYWxzIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjA2LjAwI1BhY2tpbmcgcGVhbnV0cyMyNC4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wNy4wMCNDYXJkYm9hcmQgaW5zZXJ0cyMyNC4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wOC4wMCNQcm90ZWN0aXZlIGVuZHMjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDAuMDAjUGFja2FnaW5nIHR1YmVzIGFuZCBjb3JlcyBhbmQgbGFiZWxzIGFuZCBhY2Nlc3NvcmllcyMyNC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wMS4wMCNQYXBlciB0dWJlcyBvciBjb3JlcyMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wMi4wMCNUdWJlIG9yIGNvcmUgZW5kIHBsdWdzIzI0LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE3LjAzLjAwI1BhcGVyIHBpZWNlcyMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wNC4wMCNQcmludGVkIGluc2VydHMgb3IgaW5zdHJ1Y3Rpb25zIzI0LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE3LjA1LjAwI0NvbGxhcHNpYmxlIHR1YmVzIzI0LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE3LjA2LjAwI1Nwb29sIzI0LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE3LjA3LjAwI1JlZWwjMjQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMDAuMDAuMDAuMDAjQ29tbWVyY2lhbCBhbmQgTWlsaXRhcnkgYW5kIFByaXZhdGUgVmVoaWNsZXMgYW5kIHRoZWlyIEFjY2Vzc29yaWVzIGFuZCBDb21wb25lbnRzIzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjAwLjAwLjAwI01vdG9yIHZlaGljbGVzIzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjAwLjAwI1Bhc3NlbmdlciBtb3RvciB2ZWhpY2xlcyMyNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wMS4wMCNNaW5pYnVzZXMjMjUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTUuMDIuMDAjQnVzc2VzIzI1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjAzLjAwI0F1dG9tb2JpbGVzIG9yIGNhcnMjMjUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTUuMDQuMDAjU3RhdGlvbiB3YWdvbnMjMjUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTUuMDUuMDAjTWluaXZhbnMgb3IgdmFucyMyNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wNi4wMCNMaW1vdXNpbmVzIzI1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjA3LjAwI0xpZ2h0IHRydWNrcyBvciBzcG9ydCB1dGlsaXR5IHZlaGljbGVzIzI1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE2LjAwLjAwI1Byb2R1Y3QgYW5kIG1hdGVyaWFsIHRyYW5zcG9ydCB2ZWhpY2xlcyMyNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNi4wMS4wMCNEdW1wIHRydWNrcyMyNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNi4wMi4wMCNUb3cgdHJ1Y2tzIzI1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE2LjA0LjAwI0RlbGl2ZXJ5IHRydWNrcyMyNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNi4wOS4wMCNTbHVkZ2Ugb3Igc2V3YWdlIGhhbmRsaW5nIHRydWNrcyMyNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNy4wMC4wMCNTYWZldHkgYW5kIHJlc2N1ZSB2ZWhpY2xlcyMyNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNy4wMS4wMCNGaXJlIG9yIHJlc2N1ZSB0cnVja3MjMjUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTcuMDIuMDAjUG9saWNlIHZlaGljbGVzIzI1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE3LjAzLjAwI0FtYnVsYW5jZXMjMjUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTguMDAuMDAjTW90b3JpemVkIGN5Y2xlcyMyNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOC4wMS4wMCNNb3RvcmN5Y2xlcyMyNS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOC4wMi4wMCNTY29vdGVycyMyNS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOC4wMy4wMCNNb3BlZHMjMjUuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTkuMDAuMDAjU3BlY2lhbGl6ZWQgYW5kIHJlY3JlYXRpb25hbCB2ZWhpY2xlcyMyNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOS4wMS4wMCNBZ3JpY3VsdHVyYWwgdHJhY3RvcnMjMjUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTkuMDIuMDAjTW90b3IgaG9tZXMjMjUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTkuMDMuMDAjU25vd21vYmlsZXMgb3Igc25vdyBzY29vdGVyIzI1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjA0LjAwI0dvbGYgY2FydHMjMjUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTkuMDUuMDAjQWxsIHRlcnJhaW4gdmVoaWNsZXMgdHJhY2tlZCBvciB3aGVlbGVkIzI1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjA2LjAwI0dvIGNhcnQjMjUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjAuMDAuMDAjV2FyIHZlaGljbGVzIzI1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIwLjAxLjAwI1RhbmtzIzI1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIwLjAyLjAwI0FybW9yZWQgZmlnaHRpbmcgdmVoaWNsZXMjMjUuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjAuMDMuMDAjU2VsZiBwcm9wZWxsZWQgYXJ0aWxsZXJ5IzI1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIxLjAwLjAwI1RydWNrIHRyYWN0b3JzIzI1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIxLjAxLjAwI0xvdyBjYWIgZm9yd2FyZCB0cmFjdG9ycyMyNS4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMS4wMi4wMCNMb25nIG5vc2UgdHJhY3RvcnMgd2l0aCBzbGVlcGVyIzI1LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIxLjAzLjAwI0xvbmcgbm9zZSB0cmFjdG9ycyB3aXRob3V0IHNsZWVwZXIjMjUuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjEuMDQuMDAjQ2FiIG92ZXIgZW5naW5lIHRyYWN0b3JzIHdpdGggc2xlZXBlciMyNS4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMS4wNS4wMCNDYWIgb3ZlciBlbmdpbmUgdHJhY3RvcnMgd2l0aG91dCBzbGVlcGVyIzI1LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjExLjAwLjAwLjAwI01hcmluZSB0cmFuc3BvcnQjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDAuMDAjQ29tbWVyY2lhbCBtYXJpbmUgY3JhZnQjMjUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDEuMDAjVHJhd2xlcnMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDIuMDAjRmlzaGluZyBib2F0cyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wMy4wMCNDYXJnbyBvciBjb250YWluZXIgc2hpcHMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDQuMDAjRHJlZGdpbmcgY3JhZnQjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDUuMDAjVGFua2VycyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wNi4wMCNUdWcgYm9hdHMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDcuMDAjQmFyZ2VzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjA4LjAwI1Bhc3NlbmdlciBvciBhdXRvbW9iaWxlIGZlcnJpZXMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDkuMDAjQ3J1aXNlIHNoaXBzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjEwLjAwI1NhbHZhZ2Ugc2hpcHMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMTEuMDAjT2lsIG9yIGdhcyBjcmV3IGJvYXQjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMTIuMDAjT2lsIG9yIGdhcyB3b3JrYm9hdCMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4xMy4wMCNTZWlzbWljIHZlc3NlbCMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNi4wMC4wMCNTYWZldHkgYW5kIHJlc2N1ZSB3YXRlciBjcmFmdCMyNS4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNi4wMS4wMCNMaWZlYm9hdHMgb3IgbGlmZXJhZnRzIzI1LjExLjE2LjAwLjAwCi11bnNwc2M3IzI1LjExLjE2LjAyLjAwI0ZpcmUgZmlnaHRpbmcgd2F0ZXJjcmFmdCMyNS4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNi4wMy4wMCNSZXNjdWUgc2hpcHMgb3IgYm9hdHMjMjUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDAuMDAjTWlsaXRhcnkgd2F0ZXJjcmFmdCMyNS4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wMS4wMCNTdWJtYXJpbmVzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjAyLjAwI0FpcmNyYWZ0IGNhcnJpZXJzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjAzLjAwI0FtbXVuaXRpb24gc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDQuMDAjQW1waGliaW91cyBhc3NhdWx0IHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjA1LjAwI0FtcGhpYmlvdXMgdHJhbnNwb3J0IGRvY2tzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjA2LjAwI0FtcGhpYmlvdXMgY29tbWFuZCBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wNy4wMCNDb21tYW5kIHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjA4LjAwI0NydWlzZXJzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjA5LjAwI0Rlc3Ryb3llcnMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTAuMDAjRG9jayBsYW5kaW5nIHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjExLjAwI0Zhc3QgY29tYmF0IHN1cHBvcnQgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTIuMDAjRnJpZ2F0ZXMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTMuMDAjRmxlZXQgb2lsZXJzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjE0LjAwI1V0aWxpdHkgbGFuZGluZyB3YXRlcmNyYWZ0IzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjE1LjAwI01lY2hhbml6ZWQgb3IgdXRpbGl0eSB3YXRlcmNyYWZ0IzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjE2LjAwI01pbmUgaHVudGluZyBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xNy4wMCNNaW5lIGNvdW50ZXJtZWFzdXJlcyBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xOC4wMCNDb2FzdGFsIHBhdHJvbCB3YXRlcmNyYWZ0IzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjE5LjAwI1N1Ym1hcmluZSB0ZW5kZXJzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjIwLjAwI1RhbmsgbGFuZGluZyBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4yMS4wMCNBaXIgY3VzaGlvbmVkIGxhbmRpbmcgd2F0ZXJjcmFmdCMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wMC4wMCNSZWNyZWF0aW9uYWwgd2F0ZXJjcmFmdCMyNS4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wMS4wMCNSZWNyZWF0aW9uYWwgc2FpbGJvYXRzIzI1LjExLjE4LjAwLjAwCi11bnNwc2M3IzI1LjExLjE4LjAyLjAwI1JlY3JlYXRpb25hbCBtb3RvcmJvYXRzIzI1LjExLjE4LjAwLjAwCi11bnNwc2M3IzI1LjExLjE4LjAzLjAwI1JlY3JlYXRpb25hbCByb3dib2F0cyMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wNC4wMCNDYW5vZXMgb3Iga2F5YWtzIzI1LjExLjE4LjAwLjAwCi11bnNwc2M3IzI1LjExLjE4LjA1LjAwI1BlcnNvbmFsIG1vdG9yaXplZCB3YXRlcmNyYWZ0IzI1LjExLjE4LjAwLjAwCi11bnNwc2M3IzI1LjExLjE4LjA2LjAwI1JhZnRzIzI1LjExLjE4LjAwLjAwCi11bnNwc2M3IzI1LjExLjE5LjAwLjAwI01hcmluZSBjcmFmdCBzeXN0ZW1zIGFuZCBzdWJhc3NlbWJsaWVzIzI1LjExLjAwLjAwLjAwCi11bnNwc2M3IzI1LjExLjE5LjAxLjAwI01hcmluZSBjcmFmdCBjb21tdW5pY2F0aW9ucyBzeXN0ZW1zIzI1LjExLjE5LjAwLjAwCi11bnNwc2M3IzI1LjExLjE5LjAyLjAwI01hcmluZSBwcm9wZWxsZXJzIzI1LjExLjE5LjAwLjAwCi11bnNwc2M3IzI1LjExLjE5LjAzLjAwI1NhaWxzIzI1LjExLjE5LjAwLjAwCi11bnNwc2M3IzI1LjExLjE5LjA0LjAwI1BhZGRsZXMjMjUuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTkuMDUuMDAjTWFyaW5lIGJhbGxhc3Qgc3lzdGVtcyMyNS4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMi4wMC4wMC4wMCNSYWlsd2F5IGFuZCB0cmFtd2F5IG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEyLjE1LjAwLjAwI0xvY29tb3RpdmVzIGFuZCBlbGVjdHJpYyB0cm9sbGV5cyMyNS4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNS4wMS4wMCNEaWVzZWwgZnJlaWdodCBsb2NvbW90aXZlcyMyNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNS4wMi4wMCNFbGVjdHJpYyBmcmVpZ2h0IGxvY29tb3RpdmVzIzI1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE1LjAzLjAwI0RpZXNlbCBwYXNzZW5nZXIgbG9jb21vdGl2ZXMjMjUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTUuMDQuMDAjRWxlY3RyaWMgcGFzc2VuZ2VyIGxvY29tb3RpdmVzIzI1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE2LjAwLjAwI1JhaWx3YXkgYW5kIHRyYW13YXkgY2FycyMyNS4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNi4wMS4wMCNGcmVpZ2h0IHJhaWwgY2FycyMyNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNi4wMi4wMCNUYW5rZXIgcmFpbCBjYXJzIzI1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE2LjAzLjAwI1Bhc3NlbmdlciByYWlsIGNhcnMjMjUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTYuMDQuMDAjSG9wcGVyIHJhaWwgY2FycyMyNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNi4wNS4wMCNTdHJlZXRjYXJzIG9yIHRyYW13YXkgY2FycyMyNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNy4wMC4wMCNSYWlscm9hZCBzdXBwb3J0IGVxdWlwbWVudCBhbmQgc3lzdGVtcyMyNS4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNy4wMS4wMCNSYWlsIHN3aXRjaGluZyBzeXN0ZW1zIzI1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE3LjAyLjAwI1JhaWx3YXkgc2xlZXBlcnMjMjUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTcuMDMuMDAjUmFpbHdheSB0cmFja3MjMjUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTcuMDQuMDAjUmFpbHdheSBmcm9ncyBvciBmaXNoIHBsYXRlcyMyNS4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4wMC4wMC4wMCNBaXJjcmFmdCMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wMC4wMCNQb3dlcmVkIGZpeGVkIHdpbmcgYWlyY3JhZnQjMjUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDEuMDAjRml4ZWQgd2luZyBhZ3JpY3VsdHVyYWwgYWlyY3JhZnQjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDIuMDAjQ2FyZ28gcHJvcGVsbGVyIGFpcmNyYWZ0IzI1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjAzLjAwI1NlYXBsYW5lcyMyNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wNC4wMCNDb21tZXJjaWFsIHBhc3NlbmdlciBwcm9wZWxsZXIgYWlyY3JhZnQjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDUuMDAjQ2FyZ28gamV0IGFpcmNyYWZ0IzI1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjA2LjAwI0NvbW1lcmNpYWwgcGFzc2VuZ2VyIGpldCBhaXJjcmFmdCMyNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wNy4wMCNQcml2YXRlIG9yIGJ1c2luZXNzIHByb3BlbGxlciBhaXJjcmFmdCMyNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wOC4wMCNQcml2YXRlIG9yIGJ1c2luZXNzIGpldCBhaXJjcmFmdCMyNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNi4wMC4wMCNDaXZpbGlhbiBhbmQgY29tbWVyY2lhbCByb3Rhcnkgd2luZyBhaXJjcmFmdCMyNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNi4wMS4wMCNQYXNzZW5nZXIgdHJhbnNwb3J0IGhlbGljb3B0ZXJzIzI1LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE2LjAyLjAwI0NhcmdvIHRyYW5zcG9ydCBoZWxpY29wdGVycyMyNS4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNi4wMy4wMCNBZ3JpY3VsdHVyYWwgaGVsaWNvcHRlcnMjMjUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTYuMDQuMDAjTWVkaWNhbCBvciByZXNjdWUgaGVsaWNvcHRlcnMjMjUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDAuMDAjTWlsaXRhcnkgZml4ZWQgd2luZyBhaXJjcmFmdCMyNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wMS4wMCNCb21iZXIgYWlyY3JhZnQjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDIuMDAjRmlnaHRlciBib21iZXIgYWlyY3JhZnQjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDMuMDAjRmlnaHRlciBhaXJjcmFmdCMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wNC4wMCNBdHRhY2sgYWlyY3JhZnQjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDUuMDAjVGFyZ2V0IG9yIHJlY29ubmFpc3NhbmNlIGRyb25lcyMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wNi4wMCNNaWxpdGFyeSBzZWFwbGFuZXMjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDcuMDAjUmVjb25uYWlzc2FuY2Ugb3Igc3VydmVpbGxhbmNlIGFpcmNyYWZ0IzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjA4LjAwI0FudGkgc3VibWFyaW5lIGFpcmNyYWZ0IzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjA5LjAwI01pbGl0YXJ5IHRyYW5zcG9ydCBhaXJjcmFmdCMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xOC4wMC4wMCNTcGVjaWFsdHkgYWlyY3JhZnQjMjUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTguMDEuMDAjQWlyc2hpcHMjMjUuMTMuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTkuMDAuMDAjTWlsaXRhcnkgcm90YXJ5IHdpbmcgYWlyY3JhZnQjMjUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTkuMDIuMDAjTWlsaXRhcnkgdHJhbnNwb3J0IGhlbGljb3B0ZXJzIzI1LjEzLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE5LjAzLjAwI0F0dGFjayBoZWxpY29wdGVycyMyNS4xMy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xOS4wNC4wMCNSZWNvbm5haXNzYW5jZSBoZWxpY29wdGVycyMyNS4xMy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xOS4wNS4wMCNBbnRpIHN1Ym1hcmluZSBoZWxpY29wdGVycyMyNS4xMy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xOS4wNi4wMCNUaWx0IHJvdG9yIHdpbmcgYWlyY3JhZnQjMjUuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjAuMDAuMDAjUmVjcmVhdGlvbmFsIGFpcmNyYWZ0IzI1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIwLjAxLjAwI0hhbmcgZ2xpZGVycyMyNS4xMy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMC4wMi4wMCNIb3QgYWlyIGJhbGxvb25zIzI1LjEzLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIwLjAzLjAwI0dsaWRlcnMjMjUuMTMuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjAuMDQuMDAjUGFyYWdsaWRlcnMjMjUuMTMuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjAuMDUuMDAjVWx0cmEgbGlnaHQgYWlyY3JhZnQjMjUuMTMuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjEuMDAuMDAjQWlyY3JhZnQgbWFuYWdlbWVudCBzZXJ2aWNlcyMyNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMS4wMS4wMCNBaXJjcmFmdCBwaWxvdHMjMjUuMTMuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjEuMDIuMDAjQWlyY3JhZnQgbWFpbnRlbmFuY2Ugb3Igc2VydmljZXMjMjUuMTMuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMDAuMDAuMDAjU3BhY2VjcmFmdCMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNS4wMC4wMCNTcGFjZXNoaXBzIzI1LjE1LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE1LjE1LjAxLjAwI01hbm5lZCBzcGFjZWNyYWZ0IzI1LjE1LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE1LjAyLjAwI1NwYWNlY3JhZnQgc3RydWN0dXJlcyMyNS4xNS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wMC4wMCNTYXRlbGxpdGVzIzI1LjE1LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjAxLjAwI0NvbW11bmljYXRpb24gc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wMi4wMCNXZWF0aGVyIHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDMuMDAjTWlsaXRhcnkgc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wNC4wMCNTY2llbnRpZmljIG9yIHJlc2VhcmNoIHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDUuMDAjTmF2aWdhdGlvbiBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjA2LjAwI0dlb3N0YXRpb25hcnkgc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wNy4wMCNMb3cgZWFydGggb3JiaXQgc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wOC4wMCNTdW4gc3luY2hyb25vdXMgb3JiaXQgc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wOS4wMCNHZW9zeW5jaHJvbm91cyBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE2LjAwLjAwLjAwI05vbiBtb3Rvcml6ZWQgY3ljbGVzIzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjAwLjAwI1BlZGFsIHBvd2VyZWQgdmVoaWNsZXMjMjUuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDEuMDAjVG91cmluZyBiaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wMi4wMCNVbmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDMuMDAjVHJpY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjA0LjAwI1RhbmRlbSBiaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wNS4wMCNNb3VudGFpbiBiaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wNi4wMCNSYWNpbmcgYmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDcuMDAjQmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDguMDAjUmVjdW1iZW50IGJpY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjA5LjAwI0NoaWxkcmVucyBiaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4wMC4wMC4wMCNUcmFuc3BvcnRhdGlvbiBjb21wb25lbnRzIGFuZCBzeXN0ZW1zIzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjE1LjAwLjAwI1dpbmRzaGllbGQgd2lwZXJzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjE1LjAxLjAwI0FpcmNyYWZ0IHdpbmRzaGllbGQgd2lwZXJzIzI1LjE3LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE1LjAyLjAwI0F1dG9tb3RpdmUgd2luZHNoaWVsZCB3aXBlcnMjMjUuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTUuMDMuMDAjTG9jb21vdGl2ZSB3aW5kc2hpZWxkIHdpcGVycyMyNS4xNy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNS4wNC4wMCNNYXJpbmUgd2luZHNoaWVsZCB3aXBlcnMjMjUuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTUuMDUuMDAjVHJ1Y2sgd2luZHNoaWVsZCB3aXBlcnMjMjUuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTUuMDYuMDAjV2luZHNoaWVsZCB3aXBlciBwdW1wIzI1LjE3LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE2LjAwLjAwI0RlZnJvc3RpbmcgYW5kIGRlZm9nZ2luZyBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjE2LjAxLjAwI0FpcmNyYWZ0IG9uYm9hcmQgZGVmcm9zdGluZyBvciBkZWZvZ2dpbmcgc3lzdGVtcyMyNS4xNy4xNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNi4wMi4wMCNBdXRvbW90aXZlIGRlZnJvc3Rpbmcgb3IgZGVmb2dnaW5nIHN5c3RlbXMjMjUuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTYuMDMuMDAjVHJhaW4gZGVmcm9zdGluZyBvciBkZWZvZ2dpbmcgc3lzdGVtcyMyNS4xNy4xNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wMC4wMCNCcmFraW5nIHN5c3RlbXMgYW5kIGNvbXBvbmVudHMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDEuMDAjQWlyY3JhZnQgYnJha2luZyBzeXN0ZW1zIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjAyLjAwI0F1dG9tb3RpdmUgYnJha2luZyBzeXN0ZW1zIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjAzLjAwI1RyYWluIGJyYWtpbmcgc3lzdGVtcyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wNC4wMCNEcmFnIGNodXRlcyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wNS4wMCNSb3RvcnMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDYuMDAjQnJha2UgY2FsaXBlcnMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDcuMDAjRHJ1bSBicmFrZSMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wOC4wMCNEaXNjIGJyYWtlIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjA5LjAwI0xpcXVpZCBjb29sZWQgYnJha2UjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTAuMDAjTWFzdGVyIGN5bGluZGFycyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4xMS4wMCNTbGF2ZSBjeWxpbmRlcnMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTIuMDAjRHJ1bSBicmFrZSBzaG9lcyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4xMy4wMCNEaXNjIGJyYWtlIHBhZHMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTQuMDAjQnJha2UgZHJ1bSMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4xNS4wMCNEaXNjIGJyYWtlIHJvdG9ycyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4xNi4wMCNCcmFrZSBsaW5lcyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xOS4wMC4wMCNXaGVlbHMgYW5kIHdoZWVsIHRyaW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjE5LjAxLjAwI0F1dG9tb2JpbGUgcmltcyBvciB3aGVlbHMjMjUuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTkuMDIuMDAjVHJhaW4gd2hlZWxzIzI1LjE3LjE5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE5LjAzLjAwI1RydWNrIHJpbXMgb3Igd2hlZWxzIzI1LjE3LjE5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE5LjA0LjAwI0FpcmNyYWZ0IHdoZWVscyMyNS4xNy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xOS4wNS4wMCNUaXJlIHZhbHZlcyMyNS4xNy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wMC4wMCNTdXNwZW5zaW9uIHN5c3RlbSBjb21wb25lbnRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjAxLjAwI0F1dG9tb2JpbGUgc3VzcGVuc2lvbiBzeXN0ZW1zIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjAyLjAwI1RydWNrIHN1c3BlbnNpb24gc3lzdGVtcyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wMy4wMCNUcnVjayBzaG9jayBhYnNvcmJlcnMjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDQuMDAjQXV0b21vYmlsZSBzaG9jayBhYnNvcmJlcnMjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDUuMDAjVHJhaW4gc3VzcGVuc2lvbiBzeXN0ZW1zIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjA2LjAwI1N0ZWVyaW5nIHN5c3RlbXMjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDcuMDAjU3RydXRzIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjA4LjAwI0JhbGwgam9pbnRzIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjA5LjAwI0F1dG9tb3RpdmUgYnVzaGluZ3MjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMTAuMDAjU3dheSBiYXJzIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjExLjAwI1Nob2NrIGFic29yYmVyIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjAwLjAwI1ZlaGljbGUgc2FmZXR5IHN5c3RlbXMgYW5kIGNvbXBvbmVudHMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDEuMDAjQWlyYmFncyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wMi4wMCNBaXJjcmFmdCBsYXBiZWx0cyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wMy4wMCNBaXJjcmFmdCBoYXJuZXNzIHJlc3RyYWludHMjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDQuMDAjU2VhdGJlbHRzIzI1LjE3LjIxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjA1LjAwI0NvbGxpc2lvbiBhdm9pZGFuY2Ugc3lzdGVtcyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wNi4wMCNJbXBhY3Qgc2Vuc2luZyBzeXN0ZW1zIzI1LjE3LjIxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjA3LjAwI0F1dG9tb3RpdmUgc2VhdGJlbHRzIzI1LjE3LjIxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjA4LjAwI0hlYWQgcmVzdHJhaW50cyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMi4wMC4wMCNWZWhpY2xlIGRvb3JzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIyLjAxLjAwI1JlbW92YWJsZSBhdXRvbW90aXZlIGRvb3JzIzI1LjE3LjIyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIyLjAyLjAwI0FpcmNyYWZ0IGRvb3JzIzI1LjE3LjIyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIyLjAzLjAwI0F1dG9tb3RpdmUgZG9vcnMjMjUuMTcuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjIuMDQuMDAjUm9sbCB1cCB0cnVjayBkb29ycyMyNS4xNy4yMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMi4wNS4wMCNUYWlsZ2F0ZXMgb3IgbGlmdGdhdGVzIzI1LjE3LjIyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIzLjAwLjAwI1ZlaGljbGUgd2luZG93cyBhbmQgd2luZHNoaWVsZHMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjMuMDEuMDAjQXV0b21vdGl2ZSB3aW5kc2hpZWxkcyMyNS4xNy4yMy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMy4wMi4wMCNBaXJjcmFmdCB3aW5kb3dzIzI1LjE3LjIzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIzLjAzLjAwI0F1dG9tb3RpdmUgd2luZG93cyMyNS4xNy4yMy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMy4wNC4wMCNBaXJjcmFmdCB3aW5kc2hpZWxkcyMyNS4xNy4yMy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wMC4wMCNGdWVsIHRhbmtzIGFuZCBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjAxLjAwI0FpcmNyYWZ0IGludGVybmFsIGZ1ZWwgdGFua3MjMjUuMTcuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDIuMDAjQWlyY3JhZnQgZnVlbCBkcm9wIHRhbmtzIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjAzLjAwI0FpcmNyYWZ0IHByb3BlbGxlbnQgdGFua3MjMjUuMTcuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDQuMDAjSHlicmlkIGZ1ZWwgc3RvcmFnZSBzeXN0ZW1zIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjA1LjAwI0Z1ZWwgaW5qZWN0aW9uIHN5c3RlbXMjMjUuMTcuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDYuMDAjRnVlbCB0YW5rcyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wNy4wMCNCcmVhdGhlciBlbGVtZW50cyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wOC4wMCNGdWVsIG9yIG9pbCBjYXBzIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjAwLjAwI1RpcmVzIGFuZCB0aXJlIHR1YmVzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjAxLjAwI0FpcmNyYWZ0IHRpcmVzIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjAyLjAwI0F1dG9tb2JpbGUgdGlyZSB0dWJlcyMyNS4xNy4yNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wMy4wMCNIZWF2eSB0cnVjayB0aXJlcyMyNS4xNy4yNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wNC4wMCNBdXRvbW9iaWxlIG9yIGxpZ2h0IHRydWNrIHRpcmVzIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjA1LjAwI0JpY3ljbGUgdHViZXMjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDYuMDAjQmljeWNsZSB0aXJlcyMyNS4xNy4yNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wNy4wMCNUaXJlIGNvcmQjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDguMDAjVGlyZSB0cmVhZHMjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDAuMDAjVmVoaWNsZSB0cmltIGFuZCBleHRlcmlvciBjb3ZlcmluZyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wMS4wMCNBdXRvbW90aXZlIHRyaW0jMjUuMTcuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDIuMDAjQXV0b21vdGl2ZSBmZW5kZXJzIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjAzLjAwI1ZlaGljbGUgYnVtcGVycyMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wNC4wMCNWZWhpY2xlIG1pcnJvcnMjMjUuMTcuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDUuMDAjVmVoaWNsZSBncmlsbGVzIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjA2LjAwI1ZlaGljbGUgaG9vZHMjMjUuMTcuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDcuMDAjVmVoaWNsZSBzaWRlIHBhbmVscyMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wOC4wMCNGYXNjaWFzIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI3LjAwLjAwI0Vudmlyb25tZW50YWwgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjI3LjAxLjAwI0FpcmNyYWZ0IGVudmlyb25tZW50YWwgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjI3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI3LjAyLjAwI1NwYWNlIGVudmlyb25tZW50YWwgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjI3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI3LjAzLjAwI01hcmluZSBlbnZpcm9ubWVudGFsIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4yNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNy4wNC4wMCNWZWhpY2xlIGNsaW1hdGUgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjI3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI4LjAwLjAwI0h5ZHJhdWxpYyBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjI4LjAxLjAwI0FpcmNyYWZ0IGh5ZHJhdWxpYyBzeXN0ZW1zIzI1LjE3LjI4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI4LjAyLjAwI0F1dG9tb3RpdmUgaHlkcmF1bGljIHN5c3RlbXMjMjUuMTcuMjguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjguMDMuMDAjTWFyaW5lIGh5ZHJhdWxpYyBzeXN0ZW1zIzI1LjE3LjI4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI5LjAwLjAwI0V4dGVyaW9yIHZlaGljbGUgbGlnaHRpbmcjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDEuMDAjRXh0ZXJpb3IgYXV0b21vYmlsZSBsaWdodGluZyMyNS4xNy4yOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOS4wMi4wMCNFeHRlcmlvciBhaXJjcmFmdCBsaWdodGluZyMyNS4xNy4yOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOS4wMy4wMCNFeHRlcmlvciByYWlsY2FyIGxpZ2h0aW5nIzI1LjE3LjI5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI5LjA0LjAwI0V4dGVyaW9yIHNoaXAgb3IgYm9hdCBsaWdodGluZyMyNS4xNy4yOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOS4wNS4wMCNIZWFkbGFtcCB3aXBlciBvciB3YXNoZXIgc3lzdGVtcyMyNS4xNy4yOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOS4wNi4wMCNSZWZsZWN0b3JzIzI1LjE3LjI5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjMwLjAwLjAwI0ludGVyaW9yIHZlaGljbGUgbGlnaHRpbmcjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzAuMDEuMDAjSW50ZXJpb3IgYXV0b21vYmlsZSBsaWdodGluZyMyNS4xNy4zMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMC4wMi4wMCNJbnRlcmlvciBhaXJjcmFmdCBsaWdodGluZyMyNS4xNy4zMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMC4wMy4wMCNJbnRlcmlvciByYWlsY2FyIGxpZ2h0aW5nIzI1LjE3LjMwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMwLjA0LjAwI0ludGVyaW9yIHNoaXAgb3IgYm9hdCBsaWdodGluZyMyNS4xNy4zMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMC4wNS4wMCNMaWdodCBwbGF0ZSBhc3NlbWJsaWVzIzI1LjE3LjMwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjAwLjAwI0xvY2F0aW9uIGFuZCBuYXZpZ2F0aW9uIHN5c3RlbXMgYW5kIGNvbXBvbmVudHMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDEuMDAjQWlyY3JhZnQgZGlnaXRhbCBhbHRpdHVkZSBjb250cm9sIHN5c3RlbXMjMjUuMTcuMzEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDIuMDAjQWlyY3JhZnQgbmF2aWdhdGlvbiBiZWFjb25zIzI1LjE3LjMxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjAzLjAwI1RlcnJhaW4gZm9sbG93aW5nIHN5c3RlbXMjMjUuMTcuMzEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDQuMDAjQWlyY3JhZnQgZ3VpZGFuY2Ugc3lzdGVtcyMyNS4xNy4zMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMS4wNS4wMCNBaXJjcmFmdCBzdGVlcmluZyBjb250cm9scyMyNS4xNy4zMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMS4wNi4wMCNTcGFjZWNyYWZ0IGF0dGl0dWRlIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4zMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMS4wNy4wMCNWZWhpY3VsYXIgZ2xvYmFsIHBvc2l0aW9uaW5nIHN5c3RlbXMjMjUuMTcuMzEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDAuMDAjQ29tbXVuaWNhdGlvbnMgcmVsYXRlZCBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMyLjAxLjAwI0FpcmNyYWZ0IGNvbW11bmljYXRpb24gc3lzdGVtcyMyNS4xNy4zMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMi4wMi4wMCNGbGlnaHQgcmVjb3JkZXJzIzI1LjE3LjMyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMyLjAzLjAwI0FpcmNyYWZ0IGNvdW50ZXJtZWFzdXJlcyMyNS4xNy4zMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMi4wNC4wMCNBaXJjcmFmdCBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gc3lzdGVtcyMyNS4xNy4zMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMi4wNS4wMCNBaXJjcmFmdCB0ZWxlbWV0cnkgc3lzdGVtcyMyNS4xNy4zMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMi4wNi4wMCNBaXJjcmFmdCBpbnRlcmZhY2UgZWxlY3Ryb25pY3MjMjUuMTcuMzIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzMuMDAuMDAjTWFzdGVyIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMy4wMS4wMCNGbGlnaHQgY29tcHV0ZXIgc3lzdGVtcyMyNS4xNy4zMy4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMy4wMi4wMCNTcGFjZWNyYWZ0IGNvbW1hbmQgbW9kdWxlcyMyNS4xNy4zMy4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMy4wMy4wMCNBdXRvbW90aXZlIGNvbXB1dGVyIHN5c3RlbXMjMjUuMTcuMzMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzMuMDQuMDAjRWxlY3Ryb25pYyBpZ25pdGlvbiBzeXN0ZW1zIzI1LjE3LjMzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM0LjAwLjAwI1ZlaGljbGUgZW1lcmdlbmN5IHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzQuMDEuMDAjQWlyY3JhZnQgZmlyZSBjb250cm9sIG9yIGV4dGluZ3Vpc2hpbmcgc3lzdGVtcyMyNS4xNy4zNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNC4wMi4wMCNBaXJjcmFmdCBlc2NhcGUgb3IgZWplY3Rpb24gc3lzdGVtcyMyNS4xNy4zNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNC4wMy4wMCNBaXJjcmFmdCB3YXJuaW5nIHN5c3RlbXMjMjUuMTcuMzQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzUuMDAuMDAjVmVoaWNsZSBwb3dlciBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM1LjAxLjAwI1NwYWNlY3JhZnQgc29sYXIgY2VsbHMjMjUuMTcuMzUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzUuMDIuMDAjU3BhY2VjcmFmdCBzb2xhciBhcnJheXMjMjUuMTcuMzUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzYuMDAuMDAjVmVoaWNsZSBpbnN0cnVtZW50YXRpb24jMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzYuMDEuMDAjQWlyY3JhZnQgY29ja3BpdCBkaXNwbGF5cyMyNS4xNy4zNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNy4wMC4wMCNFeGhhdXN0IGFuZCBlbWlzc2lvbiBjb250cm9scyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNy4wMS4wMCNDYXRhbHl0aWMgY29udmVydGVycyMyNS4xNy4zNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNy4wMi4wMCNNdWZmbGVycyMyNS4xNy4zNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNy4wMy4wMCNFeGhhdXN0IG1hbmlmb2xkcyMyNS4xNy4zNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wMC4wMCNEcml2ZXRyYWluIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDEuMDAjRHJpdmluZyBheGxlcyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wMi4wMCNOb24gZHJpdmluZyBheGxlcyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wMy4wMCNBeGxlIGhvdXNpbmdzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjA0LjAwI0F4bGUgc3BpbmRsZXMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDUuMDAjRGlmZmVyZW50aWFscyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wNi4wMCNDb25zdGFudCB2ZWxvY2l0eSBqb2ludHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDcuMDAjQXhsZSBzaGFmdHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDguMDAjQXhsZSByZXBhaXIga2l0cyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wOS4wMCNBeGxlIGh1YnMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMTAuMDAjVW5pdmVyc2FsIGpvaW50cyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4xMS4wMCNEcml2ZSBzaGFmdHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMTIuMDAjTWFudWFsIHRyYW5zbWlzc2lvbnMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMTMuMDAjQXV0b21hdGljIHRyYW5zbWlzc2lvbnMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMTQuMDAjUG93ZXIgdGFrZSBvZmZzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjE1LjAwI0NsdXRjaCBjYWJsZXMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMTYuMDAjSHlkcmF1bGljIGNsdXRjaCBwYXJ0cyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4xNy4wMCNEcml2ZXRyYWluIGNoYWlucyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOS4wMC4wMCNFbGVjdHJpY2FsIGNvbXBvbmVudHMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzkuMDEuMDAjSWduaXRpb24jMjUuMTcuMzkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDAuMDAuMDAjRW5naW5lIGNvb2xhbnQgc3lzdGVtIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQwLjAxLjAwI0ZhbiMyNS4xNy40MC4wMC4wMAotdW5zcHNjNyMyNS4xNy40MC4wMi4wMCNWZWhpY2xlIHJhZGlhdG9ycyMyNS4xNy40MC4wMC4wMAotdW5zcHNjNyMyNS4xNy40MC4wMy4wMCNSYWRpYXRvciBjYXBzIzI1LjE3LjQwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQwLjA0LjAwI0VuZ2luZSBjb29sYW50IzI1LjE3LjQwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQxLjAwLjAwI1Jvb2Ygc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wMS4wMCNFbWVyZ2VuY3kgdmVoaWNsZSBleGl0cyMyNS4xNy40MS4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wMi4wMCNQZXJtYW5lbnQgY29udmVydGlibGUgcm9vZiB0b3BzIzI1LjE3LjQxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQxLjAzLjAwI1JlbW92YWJsZSBoYXJkIHJvb2YgdG9wcyMyNS4xNy40MS4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wNC4wMCNSZW1vdmFibGUgc29mdCByb29mIHRvcHMjMjUuMTcuNDEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDUuMDAjUm9vZiByYWNrIHN5c3RlbXMjMjUuMTcuNDEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDYuMDAjU3Vucm9vZnMgb3IgbW9vbnJvb2ZzIzI1LjE3LjQxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQxLjA3LjAwI1dpbmQgZGVmbGVjdG9ycyMyNS4xNy40MS4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wMC4wMCNTdGVlcmluZyBzeXN0ZW0jMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDEuMDAjU3RlZXJpbmcgc2Fja3MjMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDIuMDAjU3RlZXJpbmcgc3VzcGVuc2lvbiMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wMy4wMCNCYWxsIGpvaW50IzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjA0LjAwI1Bvd2VyIHN0ZWVyaW5nIHN5c3RlbSMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wNS4wMCNUaWUgUm9kcyMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wNi4wMCNEcmFnIGxpbmsjMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDcuMDAjU3RlZXJpbmcgbGlua2FnZSMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wOC4wMCNIdWJsb2NrIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjA5LjAwI1BpbmlvbnMjMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMTAuMDAjUG93ZXIgc3RlZXJpbmcgdHVuaW5nIGNhYmxlIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQzLjAwLjAwI1ZlaGljbGUgZXhoYXVzdCBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQzLjAxLjAwI0NhdGFseXRpYyBjb252ZXJ0ZXJzIzI1LjE3LjQzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQzLjAyLjAwI011ZmZsZXJzIG9yIHJlc29uYXRvcnMjMjUuMTcuNDMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDAuMDAjVmVoaWNsZSBpbnRlcmlvciBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjAxLjAwI0JlemVscyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wMi4wMCNDb25zb2xlcyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wMy4wMCNEb29yIHBhbmVscyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wNC4wMCNIZWFkbGluZXJzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjA1LjAwI0luc3RydW1lbnQgY2x1c3RlcnMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDYuMDAjSW5zdHJ1bWVudCBwYW5lbHMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDcuMDAjUGVkYWxzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjA4LjAwI1Bvd2VyIHBvcnRzIG9yIGxpZ2h0ZXJzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjA5LjAwI1N1biB2aXNvcnMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDAuMDAjVmVoaWNsZSBzYWZldHkgYW5kIHNlY3VyaXR5IHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDEuMDAjQWlyIGJhZyBwcm9wZWxsYW50IGNhbmlzdGVycyMyNS4xNy40NS4wMC4wMAotdW5zcHNjNyMyNS4xNy40NS4wMi4wMCNBaXIgYmFncyMyNS4xNy40NS4wMC4wMAotdW5zcHNjNyMyNS4xNy40NS4wMy4wMCNWZWhpY2xlIGhvcm5zIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjA0LjAwI1JlbW90ZSBsb2NraW5nIHN5c3RlbSMyNS4xNy40NS4wMC4wMAotdW5zcHNjNyMyNS4xNy40NS4wNS4wMCNWZWhpY2xlIHN0YWJpbGl0eSBjb250cm9sIHN5c3RlbXMjMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDYuMDAjVmVoaWNsZSB0cmFjdGlvbiBjb250cm9sIHN5c3RlbXMjMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDcuMDAjVmVoaWNsZSBuYXZpZ2F0aW9uIHN5c3RlbXMjMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDguMDAjV2hlZWwgY2xhbXBzIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ2LjAwLjAwI1ZlaGljbGUgc2VhdGluZyBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ2LjAxLjAwI1NlYXQgY292ZXJzIzI1LjE3LjQ2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ2LjAyLjAwI1NlYXQgY3VzaGlvbnMgb3IgYm9sc3RlcnMjMjUuMTcuNDYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDYuMDMuMDAjU2VhdCBmcmFtZXMjMjUuMTcuNDYuMDAuMDAKLXVuc3BzYzcjMjUuMTguMDAuMDAuMDAjVmVoaWNsZSBib2RpZXMgYW5kIHRyYWlsZXJzIzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjAwLjAwI0FpcmNyYWZ0IGZ1c2VsYWdlIGFuZCBjb21wb25lbnRzIzI1LjE4LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjAxLjAwI0FpcmNyYWZ0IHNwb2lsZXJzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjAyLjAwI0FpcmNyYWZ0IGZpbnMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDMuMDAjQWlyY3JhZnQgaG9yaXpvbnRhbCBzdGFiaWxpemVycyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wNC4wMCNBaXJjcmFmdCBjYW5hcmRzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjA1LjAwI0FpcmNyYWZ0IHNsYXRzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjA2LjAwI0FpcmNyYWZ0IGZsYXBzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjA3LjAwI0FpcmNyYWZ0IHJ1ZGRlcnMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDguMDAjQWlyY3JhZnQgZWxldmF0b3JzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjA5LjAwI0FpcmNyYWZ0IGFpbGVyb25zIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjEwLjAwI0FpcmNyYWZ0IHByb3BlbGxlciMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4xMS4wMCNBaXJjcmFmdCB3aW5ncyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4xMi4wMCNBaXJjcmFmdCBmdXNlbGFnZSMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4xMy4wMCNBaXJjcmFmdCByYWRvbWVzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjE0LjAwI0FpcmNyYWZ0IHJvdG9ycyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4xNS4wMCNBaXJjcmFmdCBsaWZ0IGZhbnMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTYuMDAjQWlyY3JhZnQgY2Fub3BpZXMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTcuMDAjQWlyY3JhZnQgZnVybmlzaGluZ3MjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTYuMDAuMDAjQXV0b21vdGl2ZSBjaGFzc2lzIzI1LjE4LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE4LjE2LjAxLjAwI0F1dG9tb2JpbGUgY2hhc3NpcyMyNS4xOC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNi4wMi4wMCNUcnVjayBjaGFzc2lzIzI1LjE4LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE2LjAzLjAwI01vdG9yY3ljbGUgZnJhbWVzIzI1LjE4LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE2LjA0LjAwI1RydWNrIGNoYXNzaXMjMjUuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDAuMDAjUHJvZHVjdCBhbmQgbWF0ZXJpYWwgdHJhaWxlcnMjMjUuMTguMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDEuMDAjQ29udGFpbmVyIHRyYWlsZXJzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjAyLjAwI0ZsYXRiZWQgdHJhaWxlcnMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDMuMDAjTGl2ZXN0b2NrIHRyYWlsZXJzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjA0LjAwI05vbiB0ZW1wZXJhdHVyZSBjb250cm9sbGVkIHRhbmtlciB0cmFpbGVycyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wNS4wMCNUZW1wZXJhdHVyZSBjb250cm9sbGVkIHRhbmtlciB0cmFpbGVycyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wNi4wMCNUZW1wZXJhdHVyZSBjb250cm9sbGVkIGNvbnRhaW5lciB0cmFpbGVycyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wNy4wMCNBdXRvbW9iaWxlIGNhcnJpZXIgdHJhaWxlcnMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDguMDAjVHJhaWxlciBoaXRjaGVzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjA5LjAwI1NraXAgbG9hZGVyIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjEwLjAwI1RyYWlsZXIgZW5kIHBsYXRlcyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4xMS4wMCNTbm93bW9iaWxlIHRyYWlsZXIjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMTIuMDAjTW90b3JjeWNsZSB0cmFpbGVyIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjEzLjAwI0JvYXQgVHJhaWxlciMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOS4wMC4wMC4wMCNUcmFuc3BvcnRhdGlvbiBzZXJ2aWNlcyBlcXVpcG1lbnQjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDAuMDAjQWlyIHRyYW5zcG9ydGF0aW9uIHN1cHBvcnQgc3lzdGVtcyBhbmQgZXF1aXBtZW50IzI1LjE5LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjAxLjAwI0dyb3VuZCBzdXBwb3J0IHRyYWluaW5nIHN5c3RlbXMjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDIuMDAjR3JvdW5kIHN1cHBvcnQgdGVzdCBvciBtYWludGVuYW5jZSBzeXN0ZW1zIzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjAzLjAwI0ludGVncmF0ZWQgbWFpbnRlbmFuY2UgaW5mb3JtYXRpb24gc3lzdGVtcyMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wNC4wMCNBaXJjcmFmdCBmbGlnaHQgc2ltdWxhdG9ycyBvciB0cmFpbmVycyMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wNS4wMCNBaXJjcmFmdCBjYXJnbyBoYW5kbGluZyBlcXVpcG1lbnQjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDYuMDAjQWlyY3JhZnQgcmVmdWVsaW5nIGVxdWlwbWVudCMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wNy4wMCNBaXJjcmFmdCBkZWljaW5nIGVxdWlwbWVudCMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wOC4wMCNKZXR3YXlzIzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjA5LjAwI0FpcmNyYWZ0IHB1c2hiYWNrIG9yIHRvdyB0cmFjdG9ycyMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4xMC4wMCNHcm91bmQgcG93ZXIgdW5pdHMgZm9yIGFpcmNyYWZ0IzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjExLjAwI0xhdmF0b3J5IHNlcnZpY2UgZXF1aXBtZW50IGZvciBhaXJjcmFmdCMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4xMi4wMCNBaXJzdGFpcnMgb3Igc3RhaXIgdHJ1Y2tzIzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE2LjAwLjAwI1NwYWNlIHRyYW5zcG9ydGF0aW9uIHN1cHBvcnQgc3lzdGVtcyBhbmQgZXF1aXBtZW50IzI1LjE5LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE5LjE2LjAxLjAwI1NwYWNlY3JhZnQgZmxpZ2h0IHNpbXVsYXRvcnMjMjUuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTYuMDIuMDAjUGF5bG9hZCBkZWxpdmVyeSBzeXN0ZW1zIGZvciBzcGFjZWNyYWZ0IzI1LjE5LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE2LjAzLjAwI0xpcXVpZCBsYXVuY2ggdmVoaWNsZXMjMjUuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTYuMDQuMDAjU29saWQgbGF1bmNoIHZlaGljbGVzIzI1LjE5LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE2LjA1LjAwI1NwYWNlY3JhZnQgc2VydmljZSBtb2R1bGVzIzI1LjE5LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE3LjAwLjAwI1ZlaGljbGUgc2VydmljaW5nIGVxdWlwbWVudCMyNS4xOS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNy4wMS4wMCNXaGVlbCBiYWxhbmNpbmcgZXF1aXBtZW50IzI1LjE5LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE3LjAyLjAwI1doZWVsIGFsaWdubWVudCBlcXVpcG1lbnQjMjUuMTkuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTcuMDMuMDAjVGlyZSBjaGFuZ2luZyBtYWNoaW5lcyMyNS4xOS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNy4wNC4wMCNFbmdpbmUgb3IgdmVoaWNsZSBzdGFuZHMjMjUuMTkuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMDAuMDAuMDAjQWVyb3NwYWNlIHN5c3RlbXMgYW5kIGNvbXBvbmVudHMgYW5kIGVxdWlwbWVudCMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wMC4wMCNBaXJjcmFmdCBmdXNlbGFnZSBhbmQgY29tcG9uZW50cyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wMS4wMCNBaXJjcmFmdCBzcG9pbGVycyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wMi4wMCNBaXJjcmFmdCBmaW5zIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjAzLjAwI0FpcmNyYWZ0IGhvcml6b250YWwgc3RhYmlsaXplcnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDQuMDAjQWlyY3JhZnQgY2FuYXJkcyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wNS4wMCNBaXJjcmFmdCBzbGF0cyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wNi4wMCNBaXJjcmFmdCBmbGFwcyBvciBmbGFwIGRyaXZlcyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wNy4wMCNBaXJjcmFmdCBydWRkZXJzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjA4LjAwI0FpcmNyYWZ0IGVsZXZhdG9ycyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wOS4wMCNBaXJjcmFmdCBhaWxlcm9ucyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xMC4wMCNBaXJjcmFmdCBwcm9wZWxsZXJzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjExLjAwI0FpcmNyYWZ0IHdpbmdzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjEyLjAwI0FpcmNyYWZ0IGZ1c2VsYWdlcyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xMy4wMCNBaXJjcmFmdCByYWRvbWVzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjE0LjAwI0FpcmNyYWZ0IHJvdG9ycyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xNS4wMCNBaXJjcmFmdCBsaWZ0IGZhbnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTYuMDAjQWlyY3JhZnQgY2Fub3BpZXMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTcuMDAjQWlyY3JhZnQgZnVybmlzaGluZ3MjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTYuMDAuMDAjQWVyb3NwYWNlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0aW9uIHN5c3RlbXMgYW5kIGNvbXBvbmVudHMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTYuMDEuMDAjQWlyY3JhZnQgZGlnaXRhbCBhbHRpdHVkZSBjb250cm9sIHN5c3RlbXMjMjUuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTYuMDIuMDAjQWlyY3JhZnQgbmF2aWdhdGlvbiBiZWFjb25zIzI1LjIwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE2LjAzLjAwI0FpciB0byBncm91bmQgdGVycmFpbiBmb2xsb3dpbmcgc3lzdGVtcyMyNS4yMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNi4wNC4wMCNBaXJjcmFmdCBndWlkYW5jZSBzeXN0ZW1zIzI1LjIwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE2LjA1LjAwI0FpcmNyYWZ0IHN0ZWVyaW5nIGNvbnRyb2xzIzI1LjIwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE2LjA2LjAwI1NwYWNlY3JhZnQgYWx0aXR1ZGUgY29udHJvbCBzeXN0ZW1zIzI1LjIwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjAwLjAwI0ZsaWdodCBjb21tdW5pY2F0aW9ucyByZWxhdGVkIHN5c3RlbXMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDEuMDAjQWlyY3JhZnQgY29tbXVuaWNhdGlvbiBzeXN0ZW1zIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjAyLjAwI0ZsaWdodCBkYXRhIHJlY29yZGVycyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wMy4wMCNBaXJjcmFmdCBjb3VudGVybWVhc3VyZXMjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDQuMDAjRW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHN5c3RlbXMjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDUuMDAjQWlyY3JhZnQgdGVsZW1ldHJ5IHN5c3RlbXMjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDYuMDAjQWlyY3JhZnQgaW50ZXJmYWNlIGVsZWN0cm9uaWNzIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjA3LjAwI0FpcmNyYWZ0IGd5cm9zIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjA4LjAwI0FpcmNyYWZ0IGNhbWVyYXMjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDkuMDAjQWlyY3JhZnQgcHJvYmVzIG9yIHNlbnNvcnMjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMTAuMDAjQWlyY3JhZnQgd2F2ZWd1aWRlcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOC4wMC4wMCNBaXJjcmFmdCBtYXN0ZXIgY29udHJvbCBzeXN0ZW1zIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjE4LjAxLjAwI0ZsaWdodCBjb21wdXRlciBzeXN0ZW1zIzI1LjIwLjE4LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE4LjAyLjAwI1NwYWNlY3JhZnQgY29tbWFuZCBtb2R1bGVzIzI1LjIwLjE4LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE5LjAwLjAwI0FpcmNyYWZ0IGVtZXJnZW5jeSBzeXN0ZW1zIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjE5LjAxLjAwI0FpcmNyYWZ0IGZpcmUgY29udHJvbCBvciBleHRpbmd1aXNoaW5nIHN5c3RlbXMjMjUuMjAuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTkuMDIuMDAjQWlyY3JhZnQgZXNjYXBlIG9yIGVqZWN0aW9uIHN5c3RlbXMjMjUuMjAuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTkuMDMuMDAjQWlyY3JhZnQgd2FybmluZyBzeXN0ZW1zIzI1LjIwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE5LjA0LjAwI1BhcmFjaHV0ZXMjMjUuMjAuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjAuMDAuMDAjQWlyY3JhZnQgcG93ZXIgc3lzdGVtcyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMC4wMS4wMCNTcGFjZWNyYWZ0IHNvbGFyIGNlbGxzIzI1LjIwLjIwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIwLjAyLjAwI1NwYWNlY3JhZnQgc29sYXIgYXJyYXlzIzI1LjIwLjIwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIwLjAzLjAwI0FpcmNyYWZ0IHBvd2VyIHN1cHBseSB1bml0cyMyNS4yMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMC4wNC4wMCNBdXhpbGxpYXJ5IHBvd2VyIHVuaXQgc3lzdGVtcyAoQVBVcykjMjUuMjAuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjEuMDAuMDAjRmxpZ2h0IGluc3RydW1lbnRhdGlvbiMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMS4wMS4wMCNBZXJvc3BhY2UgY29ja3BpdCBpbmRpY2F0b3JzIzI1LjIwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIxLjAyLjAwI0Flcm9zcGFjZSBjb2NrcGl0IGdhdWdlcyMyNS4yMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMS4wMy4wMCNBZXJvc3BhY2UgY29ja3BpdCBkaXNwbGF5IHBhbmVscyMyNS4yMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMS4wNC4wMCNBZXJvc3BhY2UgY29ja3BpdCBzd2l0Y2ggcGFuZWxzIzI1LjIwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIxLjA1LjAwI0Flcm9zcGFjZSBoZWFkIHVwIGRpc3BsYXkgKEhVRHMpIzI1LjIwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIyLjAwLjAwI0FpcmNyYWZ0IGxhbmRpbmcgYW5kIGJyYWtpbmcgc3lzdGVtcyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wMS4wMCNBaXJjcmFmdCBicmFraW5nIHN5c3RlbXMjMjUuMjAuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjIuMDIuMDAjQWlyY3JhZnQgZHJhZyBjaHV0ZXMjMjUuMjAuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjIuMDMuMDAjQWlyY3JhZnQgd2hlZWxzIzI1LjIwLjIyLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIyLjA0LjAwI0xhbmRpbmcgZ2VhciBhc3NlbWJsaWVzIzI1LjIwLjIyLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIyLjA1LjAwI0FpcmNyYWZ0IHRpcmVzIzI1LjIwLjIyLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIyLjA2LjAwI0FpY3JhZnQgYW50aSBza2lkIGNvbnRyb2xzIzI1LjIwLjIyLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIzLjAwLjAwI0FpcmNyYWZ0IHBhc3NlbmdlciByZXN0cmFpbnRzIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIzLjAxLjAwI0FpcmNyYWZ0IGxhcGJlbHRzIzI1LjIwLjIzLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIzLjAyLjAwI0FpcmNyYWZ0IGhhcm5lc3MgcmVzdHJhaW50cyMyNS4yMC4yMy4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wMC4wMCNBaXJjcmFmdCBmdWVsIHRhbmtzIGFuZCBzeXN0ZW1zIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjI0LjAxLjAwI0FpcmNyYWZ0IGludGVybmFsIGZ1ZWwgdGFua3MjMjUuMjAuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjQuMDIuMDAjQWlyY3JhZnQgZnVlbCBkcm9wIHRhbmtzIzI1LjIwLjI0LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI0LjAzLjAwI0FpcmNyYWZ0IHByb3BlbGxhbnQgdGFua3MjMjUuMjAuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjQuMDQuMDAjQWlyY3JhZnQgaHlicmlkIGZ1ZWwgc3RvcmFnZSBzeXN0ZW1zIzI1LjIwLjI0LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI0LjA1LjAwI0FpcmNyYWZ0IGZ1ZWwgbWFuYWdlbWVudCBzeXN0ZW1zIzI1LjIwLjI0LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI0LjA2LjAwI1Bvc3Rib29zdGVycyMyNS4yMC4yNC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wMC4wMCNBaXJjcmFmdCBlcXVpcG1lbnQjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDEuMDAjQWlyY3JhZnQgaHlkcmF1bGljIHN5c3RlbXMjMjUuMjAuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDIuMDAjRXh0ZXJpb3IgYWlyY3JhZnQgbGlnaHRpbmcjMjUuMjAuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDMuMDAjSW50ZXJpb3IgYWlyY3JhZnQgbGlnaHRpbmcjMjUuMjAuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDQuMDAjQWlyY3JhZnQgd2luZHNoaWVsZCB3aXBlcnMjMjUuMjAuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDUuMDAjQWlyY3JhZnQgb25ib2FyZCBkZWZyb3N0aW5nIG9yIGRlZm9nZ2luZyBzeXN0ZW1zIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjA2LjAwI0FpcmNyYWZ0IGRvb3JzIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjA3LjAwI0FpcmNyYWZ0IHdpbmRvd3MjMjUuMjAuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDguMDAjQWlyY3JhZnQgd2luZHNoaWVsZHMjMjUuMjAuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDkuMDAjQWlyY3JhZnQgc2hvY2sgbW91bnRzIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjEwLjAwI0FpcmNyYWZ0IHNsaXAgcmluZyBhc3NlbWJsaWVzIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjAwLjAwI0FpcmNyYWZ0IGVudmlyb25tZW50YWwgY29udHJvbCBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjAxLjAwI0FpcmNyYWZ0IGVudmlyb25tZW50IGNvbnRyb2xsZXJzIzI1LjIwLjI2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjAyLjAwI0FpcmNyYWZ0IGVudmlyb25tZW50IHJlZ3VsYXRvcnMjMjUuMjAuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjYuMDMuMDAjQWlyY3JhZnQgY29vbGluZyB0dXJiaW5lcyMyNS4yMC4yNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wNC4wMCNBaXJjcmFmdCBjb29saW5nIGZhbnMjMjUuMjAuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjYuMDUuMDAjQWlyY3JhZnQgaGVhdCBleGNoYW5nZXJzIzI1LjIwLjI2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjA2LjAwI0FpcmNyYWZ0IHdhdGVyIHNlcGFyYXRvcnMjMjUuMjAuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjYuMDcuMDAjQWlyY3JhZnQgb3h5Z2VuIGVxdWlwbWVudCMyNS4yMC4yNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNy4wMC4wMCNBaXJjcmFmdCBhY2N1bXVsYXRvcnMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjcuMDEuMDAjSHlkcmF1bGljIGFpcmNyYWZ0IGFjY3VtdWxhdG9ycyMyNS4yMC4yNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNy4wMi4wMCNQbmV1bWF0aWMgYWlyY3JhZnQgYWNjdW11bGF0b3JzIzI1LjIwLjI3LjAwLjAwCi11bnNwc2M3IzI2LjAwLjAwLjAwLjAwI1Bvd2VyIEdlbmVyYXRpb24gYW5kIERpc3RyaWJ1dGlvbiBNYWNoaW5lcnkgYW5kIEFjY2Vzc29yaWVzIzI2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEwLjAwLjAwLjAwI1Bvd2VyIHNvdXJjZXMjMjYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDAuMDAjRW5naW5lcyMyNi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wMS4wMCNIeWRyYXVsaWMgZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wMi4wMCNQbmV1bWF0aWMgZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wMy4wMCNHYXMgZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wNC4wMCNEaWVzZWwgZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wNS4wMCNTdGVhbSBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjA2LjAwI1R1cmJpbmUgZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wNy4wMCNUdXJib2ZhbiBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjA4LjAwI1RoZXJtYWwgZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wOS4wMCNIeWRyb2VsZWN0cmljIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMTAuMDAjUm90YXJ5IGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMTEuMDAjSHlkcmF1bGljIHR1cmJpbmUgZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4xMi4wMCNUdXJib3Byb3AgZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4xMy4wMCNFbmdpbmUgUmVwYWlyIEtpdCMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wMC4wMCNNb3RvcnMjMjYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDEuMDAjSW5kdWN0aW9uIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wMi4wMCNBbHRlcm5hdGluZyBjdXJyZW50IChBQykgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjAzLjAwI0RpcmVjdCBjdXJyZW50IChEQykgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjA0LjAwI0FsdGVybmF0aW5nIGN1cnJlbnQgb3IgZGlyZWN0IGN1cnJlbnQgKEFDL0RDKSBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDUuMDAjRHluYW1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wNi4wMCNTZXJ2b21vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wNy4wMCNUb3JxdWUgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjA4LjAwI0xpcXVpZCByb2NrZXQgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjA5LjAwI1N5bmNocm9ub3VzIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4xMC4wMCNTb2xpZCByb2NrZXQgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjExLjAwI1NpbmdsZSBwaGFzZSBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMTIuMDAjTXVsdGkgcGhhc2UgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjEzLjAwI0h5ZHJhdWxpYyBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMTQuMDAjU3RlcCBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMTUuMDAjQWx0ZXJuYXRvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMTYuMDAjQ2FyYm9uIEJydXNoZXMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDAuMDAjRW5naW5lIGNvbXBvbmVudHMjMjYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDEuMDAjQWlyY3JhZnQgYnVybmVycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wMi4wMCNBaXJjcmFmdCBlbmdpbmUgY29tcHJlc3NvcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDMuMDAjQWlyY3JhZnQgZW5naW5lIGRpZmZ1c2VycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wNC4wMCNFbmdpbmUgbW91bnRzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjA1LjAwI0FpcmNyYWZ0IGRyaXZlIHNoYWZ0cyBwb3dlciB0YWtlIG9mZnMgb3Igc2NyZXcgamFja3MjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDYuMDAjQWlyY3JhZnQgdHJhbnNtaXNzaW9uIHVuaXRzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjA3LjAwI0JhbGFuY2Ugc2hhZnRzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjA4LjAwI0NhbSBmb2xsb3dlcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDkuMDAjQ2Ftc2hhZnQgbGlmdGVycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xMC4wMCNDYXJidXJldG9ycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xMS4wMCNDb25uZWN0aW5nIHJvZHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTIuMDAjQ3JhbmtjYXNlIHZlbnRpbGxhdGlvbiB2YWx2ZXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTMuMDAjQ3lsaW5kZXIgaGVhZHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTQuMDAjRW5naW5lIGNvb2xhbnQgcmFkaWF0b3JzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjE1LjAwI0VuZ2luZSBjb3ZlcnMgb3IgcGFucyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xNi4wMCNFbmdpbmUgZm9yZ2luZ3MjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTcuMDAjRW5naW5lIGhlYXRlcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTguMDAjRW5naW5lIGlnbml0aW9uIHN5c3RlbXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTkuMDAjU3VwZXJjaGFyZ2VyIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjIwLjAwI1R1cmJvY2hhcmdlciMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yMS4wMCNFbmdpbmUgcHVsbGV5cyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yMi4wMCNGdWVsIGluamVjdGlvbiBzeXN0ZW1zIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjIzLjAwI0Z1ZWwgdmFwb3IgY2FuaXN0ZXIjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjQuMDAjR2xvdyBwbHVncyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yNS4wMCNPaWwgZGlwIHN0aWNrcyBhbmQgdHViZXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjYuMDAjT2lsIHN0cmFpbmVycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yNy4wMCNQaXN0b24gcmluZ3MjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjguMDAjUHVzaCByb2QgdHViZXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjkuMDAjUm9ja2VyIGFybSBiYWxscyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zMC4wMCNSb2NrZXIgYXJtIHNoYWZ0cyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zMS4wMCNSb2NrZXIgYXJtcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zMi4wMCNTcGFyayBwbHVncyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zMy4wMCNDYXJidXJldG9yIGpldCMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zNC4wMCNDYXJidXJldG9yIGRpYXBocmFnbXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzUuMDAjT2lsIHBhbiMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zNi4wMCNQaXN0b25zIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjM3LjAwI1RpbWluZyBjaGFpbiMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zOC4wMCNJbnRha2UgbWFuaWZvbGRzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjM5LjAwI0V4aGF1c3QgbWFuaWZvbGRzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQwLjAwI0Z1ZWwgaW5qZWN0b3JzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQxLjAwI0VuZ2luZSBzbGVldmVzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQyLjAwI0Z1ZWwgaW5qZWN0aW9uIG1hbmlmb2xkcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40My4wMCNFbmdpbmUgdmFsdmVzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQ0LjAwI1R1cmJvY2hhcmdlciMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40NS4wMCNjYW1zaGFmdCMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40Ni4wMCNDeWxpbmRlciBoZWFkIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQ3LjAwI1B1c2ggcm9kcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40OC4wMCNFbmdpbmUgZmx5d2hlZWwjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDkuMDAjQ3JhbmtzaGFmdCMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy41MC4wMCNUaHJvdHRsZSMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy41MS4wMCNFbGVjdHJvbmljIGVuZ2luZSBjb250cm9scyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy41Mi4wMCNWaWJyYXRpb24gZGFtcGVycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOC4wMC4wMCNNb3RvciBvciBnZW5lcmF0b3IgY29tcG9uZW50cyMyNi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOC4wMS4wMCNNb3RvciBicnVzaGVzIzI2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE4LjAyLjAwI0FybWF0dXJlcyMyNi4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOC4wMy4wMCNSb3RvcnMgb3Igc3RhdG9ycyMyNi4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOC4wNC4wMCNNb3RvciBtb3VudHMgb3IgYmFzZXMjMjYuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTkuMDAuMDAjSW50ZXJuYWwgY29tYnVzdGlvbiBlbmdpbmUgY29tcG9uZW50cyMyNi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOS4wMS4wMCNDcmFuayBzaGFmdHMjMjYuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTkuMDIuMDAjU3BhcmsgcGx1Z3MjMjYuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTkuMDMuMDAjQ2Ftc2hhZnQjMjYuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTkuMDQuMDAjRnVlbCBpbmplY3Rpb24gbm96emxlIzI2LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE5LjA1LjAwI0N5bGluZGVyIGJsb2NrIzI2LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjAwLjAwLjAwI0JhdHRlcmllcyBhbmQgZ2VuZXJhdG9ycyBhbmQga2luZXRpYyBwb3dlciB0cmFuc21pc3Npb24jMjYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDAuMDAjS2luZXRpYyBwb3dlciB0cmFuc21pc3Npb24jMjYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDEuMDAjQ29tbXV0YXRvcnMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDMuMDAjQWRqdXN0YWJsZSBzcGVlZCBkcml2ZXMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDQuMDAjQmVsdCBkcml2ZXMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDUuMDAjQ2hhaW4gZHJpdmVzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjA2LjAwI0xpbmVhciBtb3Rpb24gZGV2aWNlcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4wNy4wMCNDbHV0Y2hlcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4wOC4wMCNQb3dlciB0YWtlIG9mZnMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDkuMDAjVHJhbnNtaXNzaW9uIHlva2VzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjEwLjAwI1RyYW5zbWlzc2lvbiBzaGFmdHMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTEuMDAjVW5pdmVyc2FsIGpvaW50cyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xMi4wMCNBeGxlcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xMy4wMCNQb3dlciB0cmFuc21pc3Npb24gY2hhaW5zIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjE0LjAwI0tudWNrbGUgam9pbnRzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjE1LjAwI1NlcnZvIGNvbnRyb2xsZXIjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTYuMDAjU3RlcCBkcml2ZSBvciBzdGVwcGVyIGRyaXZlIG9yIHN0ZXAgaW5kZXhlciMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xNy4wMCNQbGFuZXQgY2FycmllciMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xOC4wMCNUZW5zaW9uIHN0cnV0IzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjE5LjAwI1RvcnF1ZSBjb252ZXJ0ZXJzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjIwLjAwI1RydW5uaW9ucyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4yMS4wMCNQdXNoZXIgaGVhZCMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4yMi4wMCNQdXNoZXIgYXNzZW1ibHkjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMjMuMDAjQmFja3N0b3BzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjAwLjAwI1Bvd2VyIGdlbmVyYXRvcnMjMjYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTYuMDEuMDAjRGllc2VsIGdlbmVyYXRvcnMjMjYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTYuMDIuMDAjSHlkcm8gZWxlY3RyaWMgZ2VuZXJhdG9ycyMyNi4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wMy4wMCNXaW5kIGdlbmVyYXRvcnMjMjYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTYuMDQuMDAjR2FzIGdlbmVyYXRvcnMjMjYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTYuMDUuMDAjVGhlcm1hbCBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjA2LjAwI0h5ZHJhdWxpYyBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjA3LjAwI1NvbGFyIGdlbmVyYXRvcnMjMjYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDAuMDAjQmF0dGVyaWVzIGFuZCBhY2Nlc3NvcmllcyMyNi4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wMS4wMCNSZWNoYXJnZWFibGUgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjAyLjAwI0Fsa2FsaW5lIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wMy4wMCNWZWhpY2xlIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wNC4wMCNCYXR0ZXJ5IGNoYXJnZXJzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjA1LjAwI0RyeSBjZWxsIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wNi4wMCNFbGVjdHJvbmljIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wNy4wMCNMZWFkIGFjaWQgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjA4LjAwI05pY2tlbCBpcm9uIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wOS4wMCNOaWNrZWwgY2FkbWl1bSBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTAuMDAjUHJvZHVjdCBzcGVjaWZpYyBiYXR0ZXJ5IHBhY2tzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjExLjAwI0xpdGhpdW0gYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjEyLjAwI05pY2tlbCBoeWRyb2dlbiBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTMuMDAjVGhlcm1hbCBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTQuMDAjWnluYyBhaXIjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTUuMDAjWmluYyBjb2FsIGJhdHRlcnkjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTYuMDAjTWVyY3VyeSBveGlkZSBiYXR0ZXJ5IzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjE3LjAwI01hbmdhbmVzZSBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTguMDAjU2lsdmVyIG94aWRlIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xOS4wMCNCYXR0ZXJ5IHRlc3RlcnMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDAuMDAjRHJpdmUgY29tcG9uZW50cyMyNi4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wMS4wMCNWIGJlbHRzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjAyLjAwI0dlYXJlZCB0aW1pbmcgYmVsdHMjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDMuMDAjUm91bmQgYmVsdHMjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDQuMDAjRmxhdCBiZWx0cyMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wNS4wMCNCZWx0IHRlbnNpb25lcnMjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDYuMDAjVHJhbnNtaXNzaW9uIHB1bGxleXMjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDcuMDAjVGltaW5nIHB1bGxleSMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wOC4wMCNUcmFudG9ycXVlIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjA5LjAwI0JlbHQgZ3VhcmRzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjAwLjAwI0NsdXRjaGVzIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjAxLjAwI1BsYXRlIGNsdXRjaGVzIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjAyLjAwI0RpYXBocmFnbSBjbHV0Y2gjMjYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTkuMDMuMDAjQ2VudHJpZnVnYWwgY2x1dGNoIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjA0LjAwI1NlbWkgY2VudHJpZnVnYWwgY2x1dGNoIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjA1LjAwI0ZyZWUgd2hlZWwgY2x1dGNoIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjA2LjAwI1RvcnF1ZSBjb252ZXJ0ZXIjMjYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTkuMDcuMDAjRmx1aWQgY291cGxpbmcjMjYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTkuMDguMDAjQ2FtIGNsdXRjaGVzIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjIwLjAwLjAwI0NsdXRjaCBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjMjYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjAuMDEuMDAjUHJlc3N1cmUgcGxhdGUjMjYuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjAuMDIuMDAjRHJpdmVuIHBsYXRlIzI2LjExLjIwLjAwLjAwCi11bnNwc2M3IzI2LjExLjIwLjAzLjAwI0NsdXRjaCBwbGF0ZXMjMjYuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjEuMDAuMDAjSW5kdXN0cmlhbCBicmFraW5nIHN5c3RlbXMjMjYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjEuMDEuMDAjQWlyIG9yIHBuZXVtYXRpYyBicmFraW5nIHN5c3RlbXMjMjYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjEuMDIuMDAjSHlkcmF1bGljIGJyYWtpbmcgc3lzdGVtcyMyNi4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMS4wMy4wMCNNZWNoYW5pY2FsIGJyYWtpbmcgc3lzdGVtcyMyNi4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMS4wNC4wMCNCcmFraW5nIGNsdXRjaCBhc3NlbWJsaWVzIzI2LjExLjIxLjAwLjAwCi11bnNwc2M3IzI2LjEyLjAwLjAwLjAwI0VsZWN0cmljYWwgd2lyZSBhbmQgY2FibGUgYW5kIGhhcm5lc3MjMjYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMDAuMDAjRWxlY3RyaWNhbCB3aXJlIzI2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjAxLjAwI0hlYXRpbmcgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4wNS4wMCNGaXh0dXJlIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMDcuMDAjUmFkaW8gb3IgdGVsZXZpc2lvbiB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjA4LjAwI0F1dG9tb3RpdmUgb3IgYWlyY3JhZnQgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4wOS4wMCNNYWduZXQgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4xMC4wMCNUcm9sbGV5IHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMTQuMDAjVW5kZXJncm91bmQgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4xNS4wMCNTaWxpY29uIGFzYmVzdG9zIChTQSkgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4xNy4wMCNDb3BwZXIgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4xOS4wMCNDb3BwZXIgY2xhZCBhbHVtaW51bSB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjIwLjAwI0NvcHBlciBzdGVlbCB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjIxLjAwI0Jyb256ZSB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjIyLjAwI0JhcmUgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4yMy4wMCNDb3ZlcmVkIGJ1dCBub3QgaW5zdWxhdGVkIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMjQuMDAjSW5zdWxhdGVkIG9yIGNvdmVyZWQgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4zMi4wMCNJbnRlciBjb25uZWN0IHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzMuMDAjS2FwdGFuIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzQuMDAjUG9seW1pZGUgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4zNS4wMCNFeHRlbnNpb24gY29yZCMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4zNi4wMCNFeHRlbnNpb24gY29yZCMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4zNy4wMCNXaXJlIGFzc2VtYmx5IzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjM4LjAwI1dpcmUgYXNzZW1ibHkjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDAuMDAjRWxlY3RyaWNhbCBjYWJsZSMyNi4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wMS4wMCNIZWF0aW5nIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjAyLjAwI1N1Ym1hcmluZSBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wMy4wMCNDb250cm9sIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjA0LjAwI1NpZ25hbCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wNS4wMCNBdXRvbW90aXZlIG9yIGFpcmNyYWZ0IGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjA2LjAwI0NvYXhpYWwgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDcuMDAjRmliZXIgb3B0aWMgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDguMDAjQWVyaWFsIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjA5LjAwI05ldHdvcmsgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTAuMDAjQnJvbnplIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjExLjAwI0JhcmUgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTIuMDAjQ292ZXJlZCBidXQgbm90IGluc3VsYXRlZCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xMy4wMCNJbnN1bGF0ZWQgb3IgY292ZXJlZCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xNC4wMCNCdWlsZGluZyBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xNS4wMCNQb3dlciBjYWJsZSBmb3IgZGlyZWN0IGJ1cmlhbCMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xNi4wMCNUZWxlY29tbXVuaWNhdGlvbnMgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTcuMDAjVHJpYXhpYWwgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTguMDAjQ3Jvc3NsaW5rZWQgcG9seWthZW5lIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjE5LjAwI0Zsb3JvcG9seW1lciBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4yMC4wMCNJbnRlciBjb25uZWN0IGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjIxLjAwI0thcHRhbiBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4yMi4wMCNQb2x5bWlkZSBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4yMy4wMCNSYWRpbyBmcmVxdWVuY3kgKFJGKSBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4yNC4wMCNSaWJib24gb3IgZmxhdCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4yNS4wMCNDb3BwZXIgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTcuMDAuMDAjV2lyaW5nIGhhcm5lc3MjMjYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTcuMDEuMDAjUGFuZWwgd2lyaW5nIGhhcm5lc3MjMjYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTcuMDIuMDAjVHJ1bmsgd2lyaW5nIGhhcm5lc3MjMjYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTcuMDMuMDAjQ29tbXVuaWNhdGlvbiB3aXJpbmcgaGFybmVzcyMyNi4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNy4wNC4wMCNTcGVjaWFsdHkgd2lyaW5nIGhhcm5lc3MjMjYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMDAuMDAuMDAjUG93ZXIgZ2VuZXJhdGlvbiMyNi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wMC4wMCNQb3dlciBwbGFudHMjMjYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDEuMDAjRGllc2VsIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wMi4wMCNHZW90aGVybWFsIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wMy4wMCNIeWRybyBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDQuMDAjR2FzIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wNS4wMCNNYXJpbmUgcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjA2LjAwI1BldHJvbCBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDcuMDAjU29sYXIgcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjA4LjAwI1N0ZWFtIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wOS4wMCNXaW5kIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4xMC4wMCNUaGVybWFsIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xNC4wMC4wMC4wMCNBdG9taWMgYW5kIG51Y2xlYXIgZW5lcmd5IG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzI2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjE2LjAwLjAwI1N1YmNyaXRpY2FsIGFzc2VtYmx5IGVxdWlwbWVudCMyNi4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNi4wMS4wMCNTdWJjcml0aWNhbCBhc3NlbWJseSBmdWVsIzI2LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE2LjAyLjAwI1N1YmNyaXRpY2FsIGFzc2VtYmx5IGNvbXBvbmVudHMjMjYuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTYuMDMuMDAjU3ViY3JpdGljYWwgYXNzZW1ibHkgbW9kZXJhdG9yIzI2LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE3LjAwLjAwI0Rvc2ltZXRyeSBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTcuMDEuMDAjSW9uaXphdGlvbiBjaGFtYmVyIGRvc2ltZXRlcnMjMjYuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTcuMDIuMDAjRG9zaW1ldGVycyMyNi4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNy4wMy4wMCNTZWNvbmRhcnkgc3RhbmRhcmQgZG9zaW1ldHJ5IHN5c3RlbXMjMjYuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTcuMDQuMDAjUGhhbnRvbSBkb3NpbWV0ZXJzIzI2LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjAwLjAwI0hvdCBjZWxsIGRldmljZXMjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDEuMDAjSG90IGNlbGwgcmVtb3RlIGhhbmRsaW5nIGVxdWlwbWVudCMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wMi4wMCNIb3QgY2VsbCByZW1vdGUgdmlld2luZyBkZXZpY2UjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDMuMDAjSG90IGNlbGwgc2hpZWxkaW5nIGRvb3JzIzI2LjE0LjE4LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjA0LjAwI0hvdCBjZWxsIHNhbXBsZXJzIzI2LjE0LjE4LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjA1LjAwI0hvdCBjZWxsIHNhbXBsZSBwcm9jZXNzaW5nIGVxdWlwbWVudCMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wNi4wMCNIb3QgY2VsbCBzcGVjaWFsIHRvb2xzIzI2LjE0LjE4LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjA3LjAwI0hvdCBjZWxsIGxlYWQgZ2xhc3Mgd2luZG93cyMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wOC4wMCNIb3QgY2VsbCBkZWNvbnRhbWluYXRpb24gc3lzdGVtcyMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wOS4wMCNIb3QgY2VsbCBwZW5ldHJhdGlvbiBkZXZpY2VzIzI2LjE0LjE4LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjAwLjAwI0luZHVzdHJpYWwgbnVjbGVvbmljIGluc3RydW1lbnRzIzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjAxLjAwI0luZHVzdHJpYWwgbnVjbGVvbmljIGFpcmJvcm5lIGR1c3QgbWVhc3VyaW5nIHN5c3RlbXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDIuMDAjQmV0YSBnYXVnZSBtZWFzdXJpbmcgc3lzdGVtcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wNC4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyBsaXF1aWQgbGV2ZWwgZ2F1Z2VzIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjA1LjAwI0luZHVzdHJpYWwgbnVjbGVvbmljIG1hc3MgcGVyIHVuaXQgb3JlIG1lYXN1cmluZyBzeXN0ZW1zIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjA2LjAwI0luZHVzdHJpYWwgbnVjbGVvbmljIG1vaXN0dXJlIG1lYXN1cmluZyBzeXN0ZW1zIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjA3LjAwI0luZHVzdHJpYWwgbnVjbGVvbmljIHRoaWNrbmVzcyBtZWFzdXJpbmcgc3lzdGVtcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wOC4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyBmbG93IG1lYXN1cmluZyBzeXN0ZW1zIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjA5LjAwI0lzb3RvcGUgc2VwYXJhdG9ycyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4xMC4wMCNJc290b3BlIHByb2R1Y3Rpb24gZmFjaWxpdGllcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4xMS4wMCNJc290b3BlIGNhbGlicmF0b3IgYWN0aXZpdHkgbWV0ZXJzIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjIwLjAwLjAwI0lycmFkaWF0aW9uIGVxdWlwbWVudCMyNi4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wMS4wMCNJcnJhZGlhdGlvbiBnYW1tYSBzb3VyY2VzIzI2LjE0LjIwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIwLjAyLjAwI01hZ25ldCBzeXN0ZW1zIzI2LjE0LjIwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIwLjAzLjAwI05JTSBudWNsZWFyIGVsZWN0cm9uaWMgdW5pdHMjMjYuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjAuMDQuMDAjTmV1dHJvbiBpcnJhZGlhdG9ycyMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wNS4wMCNJcnJhZGlhdGlvbiB0ZXN0aW5nIGNhcHN1bGVzIzI2LjE0LjIwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIwLjA2LjAwI0lycmFkaWF0aW9uIHNhbXBsZSB0cmFuc2ZlciBzeXN0ZW0jMjYuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjAuMDcuMDAjTmV1dHJvbiBnZW5lcmF0b3JzIzI2LjE0LjIwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIxLjAwLjAwI051Y2xlYXIgcmVhY3RvciBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjEuMDEuMDAjTnVjbGVhciByZWFjdG9yIHNwZWNpbWVuIGlycmFkaWF0aW9uIGNvbnRhaW5lcnMjMjYuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjEuMDYuMDAjTnVjbGVhciByZWFjdG9yIGNvbnRyb2wgcm9kIHN5c3RlbXMjMjYuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjEuMDguMDAjTnVjbGVhciByZWFjdG9yIGluIGNvcmUgbmV1dHJvbiBmbHV4IGluc3RydW1lbnRhdGlvbiMyNi4xNC4yMS4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMS4xNy4wMCNOdWNsZWFyIHJlYWN0b3IgZWFydGhxdWFrZSBpbnN0cnVtZW50YXRpb24jMjYuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjIuMDAuMDAjTnVjbGVhciBmdWVsIGVxdWlwbWVudCMyNi4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMi4wMS4wMCNOdWNsZWFyIGZ1ZWwgY2xhZGRpbmcgdHViZXMjMjYuMTQuMjIuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjIuMDIuMDAjTnVjbGVhciBmdWVsIGVsZW1lbnQgZmFpbHVyZSBkZXRlY3Rpb24gc3lzdGVtcyMyNi4xNC4yMi4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4wMC4wMCNSYWRpYXRpb24gc2hpZWxkaW5nIGVxdWlwbWVudCMyNi4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4wMi4wMCNMZWFkIHNjcmVlbnMjMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDMuMDAjRmlsbSBiYWRnZXMjMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDQuMDAjUmFkaW9ncmFwaGljIGVxdWlwbWVudCMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4wNi4wMCNTaGllbGRlZCBjb250YWluZXJzIGZvciByYWRpYXRpb24gcHJvdGVjdGlvbiMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4wNy4wMCNMZWFkIGNoYW1iZXJzIG9yIHNhZmVzIGZvciByYWRpYXRpb24gcHJvdGVjdGlvbiMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4wOC4wMCNMZWFkIGJyaWNrcyBmb3IgcmFkaWF0aW9uIHByb3RlY3Rpb24jMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMTAuMDAjR2xvdmUgYm94ZXMgZm9yIHJhZGlhdGlvbiBwcm90ZWN0aW9uIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjExLjAwI1JhZGlhdGlvbiBzaGllbGRpbmcgd2luZG93cyMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4xMi4wMCNMZWFkIGZvciByYWRpYXRpb24gc2hpZWxkaW5nIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjAwLjAwI1JhZGlvYWN0aXZlIHdhc3RlIGVxdWlwbWVudCMyNi4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wMS4wMCNSYWRpb2FjdGl2ZSB3YXN0ZSB0cmVhdG1lbnQgY29tcGFjdG9ycyBvciBpbmNpbmVyYXRvcnMjMjYuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDIuMDAjTnVjbGVhciByYWRpYXRpb24gYWJzb3JiZXJzIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjAzLjAwI0F0b21pYyBlbmVyZ3kgZXZhcG9yYXRvcnMgb3IgY29uY2VudHJhdG9ycyBvciBkcnllcnMjMjYuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDQuMDAjRG9vciBpbnRlcmxvY2tpbmcgc3lzdGVtcyMyNi4xNC4yNC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wNS4wMCNSYWRpb2FjdGl2ZSB3YXN0ZSBkb3NhZ2Ugc3lzdGVtcyMyNi4xNC4yNC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wNi4wMCNSYWRpb2FjdGl2ZSB3YXN0ZSBzb2xpZGlmaWNhdGlvbiBzeXN0ZW1zIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjA3LjAwI1JhZGlvYWN0aXZlIHdhc3RlIGRpc3Bvc2FsIHN5c3RlbXMjMjYuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDguMDAjUmFkaW9hY3RpdmUgd2FzdGUgdHJlYXRtZW50IGZhY2lsaXRpZXMjMjYuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjcuMDAuMDAuMDAuMDAjVG9vbHMgYW5kIEdlbmVyYWwgTWFjaGluZXJ5IzI3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjAwLjAwLjAwI0hhbmQgdG9vbHMjMjcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDAuMDAjQ3V0dGluZyBhbmQgY3JpbXBpbmcgYW5kIHB1bmNoaW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjAxLjAwI0tuaWZlIGJsYWRlcyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wMi4wMCNSYXpvciBrbml2ZXMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDMuMDAjVXRpbGl0eSBrbml2ZXMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDQuMDAjUG9ja2V0IGtuaXZlcyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wNS4wMCNQdW5jaGVzIG9yIG5haWwgc2V0cyBvciBkcmlmdHMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDYuMDAjU2hlYXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjA3LjAwI01ldGFsIGN1dHRlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDguMDAjU2F3cyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wOS4wMCNBdWdlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMTAuMDAjU3RyaXBwaW5nIHRvb2xzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjExLjAwI1dpcmUgY3V0dGVycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4xMi4wMCNCb2x0IGN1dHRlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMTMuMDAjSG9zZSBjdXR0ZXIjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMTQuMDAjR2xhc3MgY3V0dGVycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4xNS4wMCNIYW5kIG9yIHB1c2ggZHJpbGwjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMTYuMDAjUHVuY2hpbmcgcGxpZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjE3LjAwI0tuaWZlIGJsYWRlIHNldHMgb3IgZGlzcGVuc2VycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4yMC4wMCNOdXQgc3BsaXR0ZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjIxLjAwI05pYmJsZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE2LjAwLjAwI0Zvcm1pbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDEuMDAjTWFsbGV0cyMyNy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNi4wMi4wMCNIYW1tZXJzIzI3LjExLjE2LjAwLjAwCi11bnNwc2M3IzI3LjExLjE2LjAzLjAwI0FudmlscyMyNy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNi4wNC4wMCNIYXRjaGV0cyMyNy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNi4wNS4wMCNQaWNrcyMyNy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNi4wNi4wMCNCb2x0IGN1dHRlcnMjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDcuMDAjU3dhZ2luZyB0b29scyMyNy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wMC4wMCNXcmVuY2hlcyBhbmQgZHJpdmVycyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wMS4wMCNTY3Jld2RyaXZlcnMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDIuMDAjTnV0IGRyaXZlcnMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDMuMDAjU29ja2V0IHNldHMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDQuMDAjU29ja2V0cyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wNS4wMCNCb3ggZW5kIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjA2LjAwI09wZW4gZW5kIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjA3LjAwI0FkanVzdGFibGUgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDguMDAjUGlwZSB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wOS4wMCNTY3JldyBleHRyYWN0b3JzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjEwLjAwI0hleCBrZXlzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjExLjAwI1JhdGNoZXRzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjEyLjAwI1B1bGxlcnMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTMuMDAjQ29tYmluYXRpb24gd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTQuMDAjU3BlY2lhbHR5IHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjE1LjAwI1RvcnF1ZSB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xNi4wMCNUb3J4IGtleXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTcuMDAjUGlwZSBleHRyYWN0b3JzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjE4LjAwI1RhcCBleHRyYWN0b3JzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjE5LjAwI1RvcnF1ZSB3cmVuY2gjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMjAuMDAjVCBoYW5kbGUgdGFwIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjIxLjAwI0NyYW5rcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4yMi4wMCNEaWUgc3RvY2tzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjIzLjAwI1R1YmUgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMjQuMDAjSG9vayB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4yNS4wMCNPZmZzZXQgc29ja2V0IHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjI2LjAwI1NwYW5uZXIgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDAuMDAjTWVhc3VyaW5nIGFuZCBsYXlvdXQgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDEuMDAjVGFwZSBtZWFzdXJlcyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wMi4wMCNMZXZlbHMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDMuMDAjU3F1YXJlcyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wNC4wMCNQbHVtYiBib2JzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjA1LjAwI1Byb3RyYWN0b3JzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjA2LjAwI05haWwgb3Igcm91dGVyIGdhdWdlcyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wNy4wMCNTdHJhaWdodCBlZGdlcyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wOC4wMCNSdWxlcyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wOS4wMCNCZXZlbHMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMTAuMDAjU3R1ZCBmaW5kZXJzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjExLjAwI0NhbGlwZXJzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjAwLjAwI1JvdWdoIGFuZCBmaW5pc2hpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDEuMDAjQ29sZCBjaGlzZWxzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjAyLjAwI0ZpbGVzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjAzLjAwI1BsYW5lcyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wNC4wMCNSYXNwcyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wNS4wMCNHcmluZGVycyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wNi4wMCNXb29kIGNoaXNlbHMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDcuMDAjV2lyZSBicnVzaGVzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjA4LjAwI1NoYXJwZW5pbmcgdG9vbHMgb3Iga2l0cyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wOS4wMCNTcGF0dWxhcyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4xMS4wMCNDcm9zcyBjdXQgY2hpc2VscyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wMC4wMCNHYXJkZW4gdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDEuMDAjTWFjaGV0ZXMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDIuMDAjU3BhZGVzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjAzLjAwI1Jha2VzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjA0LjAwI1Nob3ZlbHMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDUuMDAjQXhlcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wNi4wMCNTY3l0aGVzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjA3LjAwI1NlY2F0ZXVycyBvciBwcnVuaW5nIHNoZWFycyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wOC4wMCNIb2VzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjA5LjAwI1NjcmFwZXJzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjEwLjAwI0dhcmRlbiBmb3JrcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4xMS4wMCNUb29sIGhhbmRsZXMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTIuMDAjR2FyZGVuIHJpZGRsZXMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTMuMDAjUG9zdCBob2xlIGRpZ2dlciMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4xNC4wMCNMYXdubW93ZXJzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjE1LjAwI0xhd24gc2NhcmlmaWVycyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4xNi4wMCNIZWRnZSBjbGlwcGVycyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4xNy4wMCNEaWdnaW5nIGJhcnMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDAuMDAjSG9sZGluZyBhbmQgY2xhbXBpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDEuMDAjUGlwZSB2aXNlcyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wMi4wMCNCZW5jaCB2aXNlcyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wMy4wMCNIYW5kIGNsYW1wcyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wNC4wMCNUb25ncyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wNS4wMCNUd2VlemVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wNi4wMCNMaW5lbWFucyBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDcuMDAjQWRqdXN0YWJsZSB3aWRlbW91dGggcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjA4LjAwI05lZWRsZW5vc2UgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjA5LjAwI01hZ25ldGljIHRvb2xzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjEwLjAwI1JldGFpbmluZyByaW5nIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xMS4wMCNBbGxpZ2F0b3IgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjEyLjAwI1Rvbmd1ZSBhbmQgZ3Jvb3ZlIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xMy4wMCNTbGlwIG9yIGdyb292ZSBqb2ludCBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTQuMDAjRGlhZ29uYWwgY3V0IHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xNS4wMCNMb2NraW5nIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xNi4wMCNGZW5jZSBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTcuMDAjRW5kIGN1dCBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTguMDAjV2lyZSBsdWcgY3JpbXBpbmcgdG9vbCMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xOS4wMCNMaWdodCBidWxiIGNoYW5nZXIjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMjAuMDAjQyBjbGFtcHMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMjEuMDAjQ29ybmVyIGNsYW1wcyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4yMi4wMCNTaGVldCBtZXRhbCBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMjMuMDAjQmVuY2ggZG9nIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjI0LjAwI1RlbnNpb25lcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMjUuMDAjUm91bmQgbm9zZSBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMjYuMDAjRmxhdCBub3NlIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4yNy4wMCNTdHJhcCB3cmVuY2hlcyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMi4wMC4wMCNNYXNvbnJ5IGFuZCBjb25jcmV0ZSB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMi4wMS4wMCNUcm93ZWxzIzI3LjExLjIyLjAwLjAwCi11bnNwc2M3IzI3LjExLjIyLjAyLjAwI0Zsb2F0cyMyNy4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMi4wMy4wMCNFZGdlcnMjMjcuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjIuMDQuMDAjQ2VtZW50IG1peGVycyMyNy4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMy4wMC4wMCNNYXJraW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIzLjAxLjAwI0JyYW5kZXJzIzI3LjExLjIzLjAwLjAwCi11bnNwc2M3IzI3LjExLjIzLjAyLjAwI0F3bHMjMjcuMTEuMjMuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjMuMDMuMDAjU2NyaWJlcnMjMjcuMTEuMjMuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjMuMDQuMDAjQ2hhbGsgbGluZXMjMjcuMTEuMjMuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjMuMDUuMDAjTWV0YWwgbWFya2VycyBvciBob2xkZXJzIzI3LjExLjIzLjAwLjAwCi11bnNwc2M3IzI3LjExLjIzLjA2LjAwI01ldGFsIHN0YW1wcyMyNy4xMS4yMy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNC4wMC4wMCNGYXN0ZW5lciBzZXR0aW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjI0LjAxLjAwI1N0YXBsZSBndW5zIzI3LjExLjI0LjAwLjAwCi11bnNwc2M3IzI3LjExLjI0LjAyLjAwI1JpdmV0IHRvb2xzIzI3LjExLjI0LjAwLjAwCi11bnNwc2M3IzI3LjExLjI0LjAzLjAwI0JhbmRlcnMjMjcuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjQuMDQuMDAjQW5jaG9yIHNldHRpbmcgdG9vbHMjMjcuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjQuMDUuMDAjQm9sdCBoZWF0ZXJzIzI3LjExLjI0LjAwLjAwCi11bnNwc2M3IzI3LjExLjI1LjAwLjAwI1ByeWluZyBhbmQgYmVuZGluZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNS4wMS4wMCNQaXBlIGJlbmRpbmcgdG9vbHMjMjcuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjUuMDIuMDAjUHJ5IGJhcnMjMjcuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjUuMDMuMDAjQ29uZHVpdCBiZW5kZXJzIzI3LjExLjI1LjAwLjAwCi11bnNwc2M3IzI3LjExLjI1LjA0LjAwI1dlZGdlcyMyNy4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNS4wNS4wMCNQYWNraW5nIGhvb2tzIzI3LjExLjI1LjAwLjAwCi11bnNwc2M3IzI3LjExLjI1LjA2LjAwI0hpY2tleXMjMjcuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjYuMDAuMDAjU2VhbGluZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNi4wMS4wMCNQdXR0eSBrbml2ZXMjMjcuMTEuMjYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjYuMDIuMDAjQ2F1bGtpbmcgdG9vbHMjMjcuMTEuMjYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDAuMDAjUG93ZXIgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDEuMDAjUG93ZXIgYmxvd2VycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wMi4wMCNQb3dlciBidWZmZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjAzLjAwI1Bvd2VyIGRyaWxscyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wNC4wMCNQb3dlciBncmluZGVycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wNS4wMCNEZW1vbGl0aW9uIGhhbW1lcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDYuMDAjUG93ZXIgcGxhbmVzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjA3LjAwI1Bvd2VyIHJvdXRlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDguMDAjUG93ZXIgc2FuZGVycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wOS4wMCNQb3dlciBzYXdzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjEwLjAwI1Bvd2VyIHNjcmV3Z3VucyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xMS4wMCNQb3dlciBzdGFwbGUgZ3VucyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xMi4wMCNQb3dlciB0cmltbWVycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xMy4wMCNJbXBhY3Qgd3JlbmNoZXMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTQuMDAjUG93ZXIgY2F1bGtpbmcgZ3VucyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xNS4wMCNQb3dlciBjaGlwcGVycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xNi4wMCNQb3dlciBuYWlsIGd1bnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTcuMDAjSGVhdCBndW5zIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjE4LjAwI0VuZ3JhdmVycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xOS4wMCNHbHVlIGd1bnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMjAuMDAjVG9ycXVlIHRvb2xzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjIxLjAwI0Jpc2N1aXQgam9pbnRlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDAuMDAjVG9vbCBhdHRhY2htZW50cyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wMS4wMCNEcmlsbCBiaXRzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjAyLjAwI1NhdyBibGFkZXMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDMuMDAjRW5kIG1pbGxzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjA0LjAwI1N0YW1waW5nIGRpZXMgb3IgcHVuY2hlcyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wNS4wMCNUaHJlYWRpbmcgZGllcyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wNi4wMCNUaHJlYWRpbmcgdGFwcyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wNy4wMCNDaHVja3MjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDguMDAjQ29sbGV0cyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wOS4wMCNUb29sIGhvbGRlcnMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTAuMDAjVGhyZWFkIHJlcGFpciBraXRzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjExLjAwI0FyYm9ycyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xMi4wMCNDb3VudGVyc2lua3MjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTMuMDAjRXh0ZW5zaW9uIHBvbGUjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTQuMDAjU2NyZXdkcml2ZXIgYml0cyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xNS4wMCNOdXQgZHJpdmVyIGJpdHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTYuMDAjQWJyYXNpdmUgZGlzayMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xNy4wMCNIb2xlIHNhd3MjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTguMDAjVmlzZSBqYXcgbGluZXJzIG9yIGNhcHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTkuMDAjU2tpdmluZyB0b29sIGN1dHRlciBibGFkZXMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMjEuMDAjUm91dGVyIGJpdHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDAuMDAjRGlzcGVuc2luZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOS4wMS4wMCNHcmVhc2UgZ3VucyMyNy4xMS4yOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOS4wMi4wMCNJbmR1c3RyaWFsIGZ1bm5lbHMjMjcuMTEuMjkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDMuMDAjSGFuZCBzcHJheWVycyMyNy4xMS4yOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOS4wNC4wMCNSZXNpbiBndW5zIzI3LjExLjI5LjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjA1LjAwI09pbCBjYW4jMjcuMTEuMjkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDYuMDAjQ2F1bGtpbmcgZ3VucyMyNy4xMS4yOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOS4wNy4wMCNCcm9hZGNhc3Qgc3ByZWFkZXJzIzI3LjExLjI5LjAwLjAwCi11bnNwc2M3IzI3LjExLjMwLjAwLjAwI0JydXNoZXMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzAuMDEuMDAjU2NyYXRjaCBicnVzaGVzIzI3LjExLjMwLjAwLjAwCi11bnNwc2M3IzI3LjExLjMwLjAyLjAwI1R1YmUgYnJ1c2hlcyMyNy4xMS4zMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMC4wMy4wMCNBcHBsaWNhdG9yIGJydXNoZXMjMjcuMTEuMzAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzEuMDAuMDAjUHVsbGluZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMS4wMS4wMCNGaXNoIHRhcGUjMjcuMTEuMzEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzEuMDIuMDAjRnVzZSBwdWxsZXJzIzI3LjExLjMxLjAwLjAwCi11bnNwc2M3IzI3LjExLjMyLjAwLjAwI1Rvb2wga2l0cyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMi4wMS4wMCNHZW5lcmFsIHRvb2wga2l0cyMyNy4xMS4zMi4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMi4wMi4wMCNCZWFyaW5nIGZpdHRpbmcgdG9vbCBraXRzIzI3LjExLjMyLjAwLjAwCi11bnNwc2M3IzI3LjExLjMyLjAzLjAwI0NvbXB1dGVyIHRvb2wga2l0cyMyNy4xMS4zMi4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMi4wNC4wMCNFbGVjdHJpY2lhbiBraXRzIzI3LjExLjMyLjAwLjAwCi11bnNwc2M3IzI3LjEyLjAwLjAwLjAwI0h5ZHJhdWxpYyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyNy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNS4wMC4wMCNIeWRyYXVsaWMgcHJlc3NlcyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNS4wMS4wMCNQcmVzcyByZXR1cm4gc3ByaW5ncyMyNy4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNi4wMC4wMCNIeWRyYXVsaWMgY3lsaW5kZXJzIGFuZCBwaXN0b25zIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjE2LjAxLjAwI0N5bGluZGVyIHBpc3RvbnMjMjcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTYuMDIuMDAjSHlkcmF1bGljIGN5bGluZGVycyMyNy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNy4wMC4wMCNIeWRyYXVsaWMgaG9zZSBhbmQgdHViZSBmaXR0aW5ncyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNy4wMS4wMCNIeWRyYXVsaWMgcXVpY2sgY29ubmVjdG9ycyMyNy4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNy4wMi4wMCNIeWRyYXVsaWMgdGVlcyBvciBjcm9zc2VzIzI3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE3LjAzLjAwI0ZlcnJ1bGVzIzI3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE3LjA0LjAwI0h5ZHJhdWxpYyB1bmlvbnMjMjcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDUuMDAjSHlkcmF1bGljIG9yIGNvbXByZXNzaW9uIGVsYm93cyMyNy4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNy4wNi4wMCNGZXJydWxlIG51dHMjMjcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDcuMDAjQ3JpbXAgY29ubmVjdG9ycyMyNy4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMi4xOC4wMC4wMCNIeWRyYXVsaWMgcXVpY2sgY29ubmVjdG9ycyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi4xOS4wMC4wMCNIeWRyYXVsaWMgdGVlcyBvciBjcm9zc2VzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjIwLjAwLjAwI0ZlcnJ1bGVzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjMwLjAwLjAwI0h5ZHJhdWxpYyB1bmlvbnMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuNDAuMDAuMDAjSHlkcmF1bGljIG9yIGNvbXByZXNzaW9uIGVsYm93cyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi41MC4wMC4wMCNGZXJydWxlIG51dHMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuNjAuMDAuMDAjQ3JpbXAgY29ubmVjdG9ycyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi42MS4wMC4wMCNIeWRyYXVsaWMgdG9vbHMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuNjEuMDEuMDAjTWFuaG9sZSBjb3ZlciBsaWZ0ZXJzIzI3LjEyLjYxLjAwLjAwCi11bnNwc2M3IzI3LjEzLjAwLjAwLjAwI1BuZXVtYXRpYyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyNy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNS4wMC4wMCNQbmV1bWF0aWMgdG9vbHMjMjcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTUuMDEuMDAjUG5ldW1hdGljIGltcGFjdCB3cmVuY2hlcyMyNy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNS4wMi4wMCNDb21wcmVzc2VkIGFpciBndW4jMjcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTUuMDMuMDAjUG5ldW1hdGljIHNjcmV3ZHJpdmVyIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjA0LjAwI1BuZXVtYXRpYyBoYW1tZXIjMjcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTUuMDUuMDAjUG5ldW1hdGljIGRyaWxsIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjA2LjAwI1BuZXVtYXRpYyBuYWlsIGRyaXZlcnMjMjcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTUuMDcuMDAjUG5ldW1hdGljIHNhbmRpbmcgbWFjaGluZXMjMjcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTYuMDAuMDAjQWlyIGZpdHRpbmdzIGFuZCBjb25uZWN0b3JzIzI3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEzLjE2LjAxLjAwI0FpciBtYW5pZm9sZHMjMjcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTYuMDIuMDAjRmlsdGVycyMyNy4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNi4wMy4wMCNSZWd1bGF0b3IjMjcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTYuMDQuMDAjTHVicmljYXRvciMyNy4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNi4wNS4wMCNBaXIgY3VydGFpbiMyNy4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNi4wNi4wMCNBaXIgY291cGxpbmcjMjcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMDAuMDAuMDAuMDAjU3RydWN0dXJlcyBhbmQgQnVpbGRpbmcgYW5kIENvbnN0cnVjdGlvbiBhbmQgTWFudWZhY3R1cmluZyBDb21wb25lbnRzIGFuZCBTdXBwbGllcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4wMC4wMC4wMCNTdHJ1Y3R1cmFsIG1hdGVyaWFscyBhbmQgYmFzaWMgc2hhcGVzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjAwLjAwI0FuZ2xlcyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wMS4wMCNGZXJyb3VzIGFsbG95IGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wMi4wMCNOb24gZmVycm91cyBhbGxveSBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDMuMDAjSXJvbiBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDQuMDAjU3RlZWwgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDYuMDAjQWx1bWludW0gYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjA3LjAwI01hZ25lc2l1bSBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDguMDAjVGl0YW5pdW0gYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjA5LjAwI0NvcHBlciBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTAuMDAjQnJhc3MgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjExLjAwI0Jyb256ZSBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTIuMDAjWmluYyBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTMuMDAjVGluIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4xNC4wMCNMZWFkIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4xNS4wMCNQbGFzdGljIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4xNi4wMCNSdWJiZXIgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjE3LjAwI1ByZWNpb3VzIG1ldGFsIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wMC4wMCNCYXIjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDEuMDAjRmVycm91cyBhbGxveSBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDMuMDAjSXJvbiBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjA0LjAwI1N0ZWVsIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDYuMDAjQWx1bWludW0gYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wNy4wMCNNYWduZXNpdW0gYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wOC4wMCNUaXRhbml1bSBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjA5LjAwI0NvcHBlciBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjEwLjAwI0JyYXNzIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMTEuMDAjQnJvbnplIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMTIuMDAjWmluYyBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjEzLjAwI1RpbiBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjE0LjAwI0xlYWQgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xNS4wMCNQbGFzdGljIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMTYuMDAjUHJlY2lvdXMgbWV0YWwgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xNy4wMCNXb29kZW4gYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wMC4wMCNCZWFtcyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wMS4wMCNGZXJyb3VzIGFsbG95IGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjAzLjAwI0lyb24gYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDQuMDAjU3RlZWwgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjA2LjAwI0FsdW1pbnVtIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjA3LjAwI01hZ25lc2l1bSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wOC4wMCNUaXRhbml1bSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wOS4wMCNDb3BwZXIgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMTAuMDAjQnJhc3MgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMTEuMDAjQnJvbnplIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjEyLjAwI1ppbmMgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMTMuMDAjVGluIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjE0LjAwI0xlYWQgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMTUuMDAjUGxhc3RpYyBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xNi4wMCNSdWJiZXIgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMTcuMDAjQ29uY3JldGUgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMTguMDAjUHJlY2lvdXMgbWV0YWwgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDAuMDAjQ2hhbm5lbHMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDEuMDAjRmVycm91cyBhbGxveSBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wMi4wMCNOb24gZmVycm91cyBhbGxveSBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wMy4wMCNJcm9uIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjA0LjAwI1N0ZWVsIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wNi4wMCNBbHVtaW51bSBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wNy4wMCNNYWduZXNpdW0gY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDguMDAjVGl0YW5pdW0gY2hhbm5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjA5LjAwI0NvcHBlciBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4xMC4wMCNCcmFzcyBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4xMS4wMCNCcm9uemUgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTIuMDAjWmluYyBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4xMy4wMCNUaW4gY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTQuMDAjTGVhZCBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4xNS4wMCNQbGFzdGljIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjE2LjAwI1J1YmJlciBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4xNy4wMCNQcmVjaW91cyBtZXRhbCBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wMC4wMCNDb2lsIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjAxLjAwI0ZlcnJvdXMgYWxsb3kgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wMi4wMCNOb24gZmVycm91cyBhbGxveSBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjAzLjAwI0lyb24gY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wNC4wMCNTdGVlbCBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjA2LjAwI0FsdW1pbnVtIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDcuMDAjTWFnbmVzaXVtIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDguMDAjVGl0YW5pdW0gY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wOS4wMCNDb3BwZXIgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xMC4wMCNCcmFzcyBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjExLjAwI0Jyb256ZSBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjEyLjAwI1ppbmMgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xMy4wMCNUaW4gY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xNC4wMCNMZWFkIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTUuMDAjUGxhc3RpYyBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjE2LjAwI1ByZWNpb3VzIG1ldGFsIGNvaWxzIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjE3LjAwI05vbiBtZXRhbGxpYyBjb2lscyMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xOC4wMCNQZXJmb3JhdGVkIHN0ZWVsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjE5LjAwI0VtYm9zc2VkIHN0ZWVsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjIwLjAwI0NvbXByZXNzZWQgZmliZXIgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4yMS4wMCNGaWJlciBhbmQgcnViYmVyIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMjIuMDAjR3JhcGhpdGUgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wMC4wMCNGb2lsIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjAxLjAwI0ZlcnJvdXMgYWxsb3kgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wMi4wMCNOb24gZmVycm91cyBhbGxveSBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjAzLjAwI0lyb24gZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wNC4wMCNTdGVlbCBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjA1LjAwI1N0YWlubGVzcyBzdGVlbCBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjA2LjAwI0FsdW1pbnVtIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDcuMDAjTWFnbmVzaXVtIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDguMDAjVGl0YW5pdW0gZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wOS4wMCNDb3BwZXIgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4xMC4wMCNCcmFzcyBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjExLjAwI0Jyb256ZSBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjEyLjAwI1ppbmMgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4xMy4wMCNUaW4gZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4xNC4wMCNMZWFkIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMTUuMDAjUGxhc3RpYyBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjAwLjAwI1BpcGUjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDEuMDAjRmVycm91cyBhbGxveSBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDMuMDAjSXJvbiBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjA0LjAwI1N0ZWVsIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDYuMDAjQWx1bWludW0gcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wNy4wMCNNYWduZXNpdW0gcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wOC4wMCNUaXRhbml1bSBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjA5LjAwI0NvcHBlciBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjEwLjAwI0JyYXNzIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMTEuMDAjQnJvbnplIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMTIuMDAjWmluYyBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjEzLjAwI1RpbiBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjE0LjAwI0xlYWQgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xNS4wMCNQbGFzdGljIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMTYuMDAjUnViYmVyIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMTcuMDAjQ29uY3JldGUgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wMC4wMCNQbGF0ZSMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wMS4wMCNGZXJyb3VzIGFsbG95IHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjAyLjAwI05vbiBmZXJyb3VzIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjAzLjAwI0lyb24gcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDQuMDAjU3RlZWwgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjA2LjAwI0FsdW1pbnVtIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjA3LjAwI01hZ25lc2l1bSBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wOC4wMCNUaXRhbml1bSBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wOS4wMCNDb3BwZXIgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTAuMDAjQnJhc3MgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTEuMDAjQnJvbnplIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjEyLjAwI1ppbmMgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTMuMDAjVGluIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjE0LjAwI0xlYWQgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTUuMDAjUGxhc3RpYyBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xNi4wMCNSdWJiZXIgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTcuMDAjQ29uY3JldGUgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTguMDAjUHJlY2lvdXMgbWV0YWwgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTkuMDAjTm9uIG1ldGFsbGljIHBsYXRlcyMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wMC4wMCNQcm9maWxlcyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wMS4wMCNGZXJyb3VzIGFsbG95IHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjAzLjAwI0lyb24gcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDQuMDAjU3RlZWwgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjA2LjAwI0FsdW1pbnVtIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjA3LjAwI01hZ25lc2l1bSBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wOC4wMCNUaXRhbml1bSBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wOS4wMCNDb3BwZXIgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMTAuMDAjQnJhc3MgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMTEuMDAjQnJvbnplIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjEyLjAwI1ppbmMgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMTMuMDAjVGluIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjE0LjAwI0xlYWQgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMTUuMDAjUGxhc3RpYyBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4xNi4wMCNSdWJiZXIgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDAuMDAjUm9kIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjAxLjAwI0ZlcnJvdXMgYWxsb3kgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wMi4wMCNOb24gZmVycm91cyBhbGxveSByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjAzLjAwI0lyb24gcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wNC4wMCNTdGVlbCByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjA1LjAwI1N0YWlubGVzcyBzdGVlbCByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjA2LjAwI0FsdW1pbnVtIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDcuMDAjTWFnbmVzaXVtIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDguMDAjVGl0YW5pdW0gcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wOS4wMCNDb3BwZXIgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4xMC4wMCNCcmFzcyByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjExLjAwI0Jyb256ZSByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjEyLjAwI1ppbmMgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4xMy4wMCNUaW4gcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4xNC4wMCNMZWFkIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMTUuMDAjUGxhc3RpYyByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjE2LjAwI1J1YmJlciByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjAwLjAwI1NoZWV0IzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjAxLjAwI0ZlcnJvdXMgYWxsb3kgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDMuMDAjSXJvbiBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wNC4wMCNTdGVlbCBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDYuMDAjQWx1bWludW0gc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDcuMDAjTWFnbmVzaXVtIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjA4LjAwI1RpdGFuaXVtIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjA5LjAwI0NvcHBlciBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xMC4wMCNCcmFzcyBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xMS4wMCNCcm9uemUgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTIuMDAjWmluYyBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xMy4wMCNUaW4gc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTQuMDAjTGVhZCBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xNS4wMCNQbGFzdGljIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjE2LjAwI1J1YmJlciBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xNy4wMCNBcm1vciBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xOC4wMCNCZXJ5bGxpdW0gYWxsb3kgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTkuMDAjQ29tcG9zaXRlIG1ldGFsIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjIwLjAwI05pY2tlbCBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4yMS4wMCNGb2FtIFJ1YmJlciBTaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4yMi4wMCNDb3JrIGFuZCBydWJiZXIgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMjMuMDAjQ29tcHJlc3NlZCBmaWJlciBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4yNC4wMCNNZXRhbCBpbnNlcnRlZCBjb21wcmVzc2VkIGZpYmVyIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjI1LjAwI0ZpYmVyIGFuZCBydWJiZXIgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMjYuMDAjQXNiZXN0b3Mgc2hlZXRzIzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjAwLjAwI1N0cmlwIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjAxLjAwI0ZlcnJvdXMgYWxsb3kgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDMuMDAjSXJvbiBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wNC4wMCNTdGVlbCBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDYuMDAjQWx1bWludW0gc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDcuMDAjTWFnbmVzaXVtIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjA4LjAwI1RpdGFuaXVtIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjA5LjAwI0NvcHBlciBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4xMC4wMCNCcmFzcyBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4xMS4wMCNCcm9uemUgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTIuMDAjWmluYyBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4xMy4wMCNUaW4gc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTQuMDAjTGVhZCBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4xNS4wMCNQbGFzdGljIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjE2LjAwI1J1YmJlciBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wMC4wMCNUdWJlIGFuZCB0dWJpbmcjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDEuMDAjRmVycm91cyBhbGxveSB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDIuMDAjQ29wcGVyIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wMy4wMCNUaXRhbml1bSB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDQuMDAjTWFnbmVzaXVtIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wNS4wMCNUaW4gdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjA2LjAwI0JyYXNzIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wNy4wMCNMZWFkIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wOC4wMCNCcm9uemUgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjA5LjAwI1ppbmMgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjEwLjAwI1N0ZWVsIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xMS4wMCNJcm9uIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xMi4wMCNDZW1lbnQgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjEzLjAwI1BsYXN0aWMgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjE0LjAwI1J1YmJlciB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTUuMDAjR2xhc3MgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjE2LjAwI1N0b25lIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xNy4wMCNOb24gZmVycm91cyBhbGxveSB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTguMDAjQWx1bWludW0gdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjE5LjAwI1N0YWlubGVzcyBzdGVlbCB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMjAuMDAjUHJlY2lvdXMgbWV0YWwgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI4LjAwLjAwI1BpbGluZyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOC4wMS4wMCNBbHVtaW51bSBwaWxpbmdzIzMwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI4LjAyLjAwI0NvbmNyZXRlIHBpbGluZ3MjMzAuMTAuMjguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjguMDMuMDAjU3RlZWwgcGlsaW5ncyMzMC4xMC4yOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOS4wMC4wMCNQb3N0IzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjI5LjAxLjAwI0NlbWVudCBvciBjb25jcmV0ZSBwb3N0cyMzMC4xMC4yOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOS4wMi4wMCNTdGVlbCBwb3N0cyMzMC4xMC4yOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOS4wMy4wMCNNZXRhbCBwb3N0cyMzMC4xMC4yOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOS4wNC4wMCNXb29kZW4gcG9zdHMjMzAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDUuMDAjUGxhc3RpYyBwb3N0cyMzMC4xMC4yOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOS4wNi4wMCNGaWJlcmdsYXNzIHBvc3RzIzMwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjMwLjAwLjAwI1NoYWZ0aW5nIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMwLjAxLjAwI1N0ZWVsIHNoYWZ0aW5nIzMwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMwLjAyLjAwI1N0YWlubGVzcyBzdGVlbCBzaGFmdGluZyMzMC4xMC4zMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMS4wMC4wMCNSYWlscyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMS4wMS4wMCNTdGVlbCByYWlsIzMwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMxLjAyLjAwI0FsdW1pbnVtIHJhaWwjMzAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzEuMDMuMDAjTWV0YWwgcmFpbCMzMC4xMC4zMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMi4wMC4wMCNHcmF0aW5nIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMyLjAxLjAwI1N0ZWVsIGdyYXRpbmcjMzAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzIuMDIuMDAjU3RhaW5sZXNzIHN0ZWVsIGdyYXRpbmcjMzAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzIuMDMuMDAjQWx1bWludW0gZ3JhdGluZyMzMC4xMC4zMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMi4wNC4wMCNGaWJlcmdsYXNzIGdyYXRpbmcjMzAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzIuMDUuMDAjSXJvbiBncmF0aW5nIzMwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjAwLjAwI0JpbGxldHMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDEuMDAjQWx1bWludW0gYmlsbGV0IzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjAyLjAwI0JyYXNzIGJpbGxldCMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wMy4wMCNCcm9uemUgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wNC4wMCNDb3BwZXIgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wNS4wMCNMZWFkIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDYuMDAjWmluYyBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjA3LjAwI1N0ZWVsIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDguMDAjVGl0YW5pdW0gYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wOS4wMCNNYWduZXNpdW0gYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4xMC4wMCNQcmVjaW91cyBtZXRhbCBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjExLjAwI05vbiBmZXJyb3VzIG1ldGFsIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMTIuMDAjRmVycm91cyBtZXRhbCBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjEzLjAwI05vbiBtZXRhbGxpYyBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjAwLjAwI0luZ290cyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wMS4wMCNBbHVtaW51bSBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDIuMDAjQnJhc3MgaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjAzLjAwI0xlYWQgaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjA0LjAwI1ppbmMgaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjA1LjAwI1N0ZWVsIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wNi4wMCNNYWduZXNpdW0gaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjA3LjAwI0Jyb256ZSBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDguMDAjQ29wcGVyIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wOS4wMCNUaXRhbml1bSBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMTAuMDAjUHJlY2lvdXMgbWV0YWwgaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjExLjAwI0ZlcnJvdXMgYWxsb3kgZXh0cnVzaW9uIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4xMi4wMCNOb24gZmVycm91cyBhbGxveSBleHRydXNpb24gaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjEzLjAwI05vbiBtZXRhbGxpYyBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDAuMDAjSG9uZXljb21iIGNvcmUjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDEuMDAjQWx1bWludW0gaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDIuMDAjTWFnbmVzaXVtIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjAzLjAwI0ZvYW0gaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDQuMDAjUGxhc3RpYyBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wNS4wMCNXb29kZW4gaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDYuMDAjRmVycm91cyBtZXRhbCBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wNy4wMCNCcm9uemUgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDguMDAjQ29wcGVyIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjA5LjAwI1N0ZWVsIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjEwLjAwI0xlYWQgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMTEuMDAjWmluYyBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4xMi4wMCNUaXRhbml1bSBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4xMy4wMCNCcmFzcyBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4xNC4wMCNOb24gZmVycm91cyBtZXRhbCBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4xNS4wMCNQcmVjaW91cyBtZXRhbCBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wMC4wMCNTdHJ1Y3R1cmFsIHByb2R1Y3RzIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjAxLjAwI1dvb2QgYmVhbXMjMzAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzYuMDIuMDAjV29vZCBjb21wb3NpdGUgYmVhbXMjMzAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzYuMDMuMDAjRnJhbWluZyBsdW1iZXIjMzAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzYuMDQuMDAjV29vZCBzaGVhdGhpbmcgb3Igc2hlZXRzIzMwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjA1LjAwI1dvb2QgcGxhbmtzIzMwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjA2LjAwI1dvb2QgdHJ1c3NlcyMzMC4xMC4zNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wNy4wMCNXb29kIGpvaXN0cyMzMC4xMC4zNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNy4wMC4wMCNCcmFpZCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNy4wMS4wMCNTdGFpbmxlc3Mgc3RlZWwgYnJhaWQjMzAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMDAuMDAuMDAjQ29uY3JldGUgYW5kIGNlbWVudCBhbmQgcGxhc3RlciMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNS4wMC4wMCNDb25jcmV0ZSBhbmQgbW9ydGFycyMzMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNS4wMS4wMCNGb2FtZWQgY29uY3JldGUjMzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTUuMDIuMDAjQ29uZHVjdGl2ZSBjb25jcmV0ZSMzMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNS4wMy4wMCNJbnN1bGF0aW5nIGNvbmNyZXRlIzMwLjExLjE1LjAwLjAwCi11bnNwc2M3IzMwLjExLjE1LjA0LjAwI01vcnRhcnMjMzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTYuMDAuMDAjQ2VtZW50IGFuZCBsaW1lIzMwLjExLjAwLjAwLjAwCi11bnNwc2M3IzMwLjExLjE2LjAxLjAwI0NlbWVudCMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wMi4wMCNDaGxvcmluYXRlZCBsaW1lIzMwLjExLjE2LjAwLjAwCi11bnNwc2M3IzMwLjExLjE2LjAzLjAwI0h5ZHJhdWxpYyBsaW1lIzMwLjExLjE2LjAwLjAwCi11bnNwc2M3IzMwLjExLjE2LjA0LjAwI0h5ZHJhdGVkIGxpbWUjMzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTYuMDUuMDAjTGVhbiBsaW1lIzMwLjExLjE2LjAwLjAwCi11bnNwc2M3IzMwLjExLjE2LjA2LjAwI0dyb3V0IzMwLjExLjE2LjAwLjAwCi11bnNwc2M3IzMwLjExLjE2LjA3LjAwI1Vuc2xha2VkIGxpbWUjMzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTcuMDAuMDAjUGxhc3RlcnMjMzAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTcuMDEuMDAjR3lwc3VtIHBsYXN0ZXIjMzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMDAuMDAuMDAjUm9hZHMgYW5kIGxhbmRzY2FwZSMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNS4wMC4wMCNCaXR1bWlub3VzIGRlcml2YXRpdmVzIzMwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEyLjE1LjAxLjAwI0NvYWwgdGFyIzMwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEyLjE1LjAyLjAwI1RhcnMjMzAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTUuMDMuMDAjQ3Jlc290ZSMzMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNi4wMC4wMCNBc3BoYWx0cyMzMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNi4wMS4wMCNBc3BoYWx0IzMwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEyLjE2LjAyLjAwI1BpdGNoIzMwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEyLjE2LjAzLjAwI0dpbHNvbml0ZSMzMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNi4wNC4wMCNDdXRiYWNrIHByb2R1Y3RzIzMwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEyLjE2LjA1LjAwI01hbmhvbGUgZnJhbWVzIHdpdGggY292ZXJzIzMwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEzLjAwLjAwLjAwI1N0cnVjdHVyYWwgYnVpbGRpbmcgcHJvZHVjdHMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTUuMDAuMDAjQmxvY2tzIzMwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEzLjE1LjAxLjAwI0NlbWVudCBibG9ja3MjMzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTUuMDIuMDAjQ29uY3JldGUgYmxvY2tzIzMwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE1LjAzLjAwI1N0b25lIGJsb2NrcyMzMC4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNS4wNC4wMCNDZXJhbWljIGJsb2NrcyMzMC4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNi4wMC4wMCNCcmlja3MjMzAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTYuMDEuMDAjQ2VtZW50IGJyaWNrcyMzMC4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNi4wMi4wMCNDZXJhbWljIGJyaWNrcyMzMC4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNi4wMy4wMCNDb25jcmV0ZSBicmlja3MjMzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTYuMDQuMDAjU3RvbmUgYnJpY2tzIzMwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE3LjAwLjAwI1RpbGVzIGFuZCBmbGFnc3RvbmVzIzMwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEzLjE3LjAxLjAwI0NlbWVudCB0aWxlcyBvciBmbGFnc3RvbmVzIzMwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE3LjAyLjAwI1N0b25lIHRpbGVzIG9yIGZsYWdzdG9uZXMjMzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTcuMDMuMDAjQ29uY3JldGUgdGlsZXMgb3IgZmxhZ3N0b25lcyMzMC4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNy4wNC4wMCNDZXJhbWljIHRpbGVzIG9yIGZsYWdzdG9uZXMjMzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTcuMDUuMDAjSGVhZCBzdG9uZXMjMzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMDAuMDAuMDAjSW5zdWxhdGlvbiMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wMC4wMCNUaGVybWFsIGluc3VsYXRpb24jMzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDEuMDAjV2VhdGhlciBzdHJpcHBpbmcjMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDIuMDAjSW5zdWxhdGlvbiBibGFua2V0cyMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wMy4wMCNGb2FtIGluc3VsYXRpb24jMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDQuMDAjSW5zdWxhdGlvbiBiYXR0cyMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wNS4wMCNUaGVybWFsIGluc3VsYXRpb24gc2xlZXZpbmcjMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDYuMDAjTG9vc2UgZmlsbCBpbnN1bGF0aW9uIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjA3LjAwI1JpZ2lkIGJvYXJkIGluc3VsYXRpb24jMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDguMDAjRmliZXIgaW5zdWxhdGlvbiMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wOS4wMCNSZWZyYWN0b3JpZXMjMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMTAuMDAjRG9vciBzd2VlcCMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4xMS4wMCNXaW5kb3cgZmlsbSMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNi4wMC4wMCNTcGVjaWFsdHkgaW5zdWxhdGlvbiMzMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNi4wMS4wMCNBY291c3RpY2FsIGluc3VsYXRpb24jMzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTYuMDIuMDAjTm9uIHRoZXJtYWwgaW5zdWxhdGlvbiBzbGVldmluZyMzMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNi4wMy4wMCNIZWF0IFNoaWVsZHMjMzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMDAuMDAuMDAjRXh0ZXJpb3IgZmluaXNoaW5nIG1hdGVyaWFscyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wMC4wMCNSb29maW5nIG1hdGVyaWFscyMzMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wMS4wMCNSb2xsIHJvb2ZpbmcjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDIuMDAjUm9vZiB2YWxsZXlzIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjAzLjAwI1Jvb2ZpbmcgZmFicmljcyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wNC4wMCNSb29maW5nIGZlbHRzIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjA1LjAwI1Jvb2ZpbmcgbWVtYnJhbmVzIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjA2LjAwI1Jvb2ZpbmcgdGlsZXMjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDcuMDAjU2hha2VzIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjA4LjAwI1NoaW5nbGVzIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjA5LjAwI1RydXNzZXMjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMTAuMDAjU2xhdGUgcm9vZmluZyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wMC4wMCNSb29maW5nIGFjY2Vzc29yaWVzIzMwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjAxLjAwI1Jvb2YgZmFzY2lhcyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wMi4wMCNGbGFzaGluZ3MjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDMuMDAjR3JhdmVsIHN0b3BzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjA0LjAwI1Jvb2ZpbmcgYnJ1c2hlcyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wNS4wMCNSb29maW5nIGRyYWlucyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wNi4wMCNSb29maW5nIG1vcHMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDcuMDAjUm9vZmluZyB2ZW50cyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wOC4wMCNTb2ZmaXRzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjA5LjAwI1Jvb2YgY3VyYnMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMTAuMDAjUm9vZiByaXBwZXJzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE3LjAwLjAwI1JhaW4gZ3V0dGVycyBhbmQgYWNjZXNzb3JpZXMjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTcuMDEuMDAjRG93bnNwb3V0cyMzMC4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNy4wMi4wMCNEcmlwIGNhcHMjMzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTcuMDMuMDAjR3V0dGVycyMzMC4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNy4wNC4wMCNTcGxhc2hibG9ja3MjMzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTguMDAuMDAjU2lkaW5nIGFuZCBleHRlcmlvciB3YWxsIG1hdGVyaWFscyMzMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOC4wMS4wMCNTaHV0dGVycyMzMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOC4wMi4wMCNTaWRpbmcjMzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTguMDMuMDAjU2lkaW5nIGJ1dHQgam9pbnRzIzMwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE4LjA0LjAwI1NpZGluZyBjb3JuZXJzIzMwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE4LjA1LjAwI1N0dWNjbyMzMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOC4wNi4wMCNHbGFzcyBjdXJ0YWlud2FsbGluZyMzMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOS4wMC4wMCNGaW5pc2hpbmcgbWF0ZXJpYWxzIGFuZCBwcm9kdWN0cyMzMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOS4wMS4wMCNBd25pbmdzIzMwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE5LjAyLjAwI0V4dGVyaW9yIHRyaW0gbWF0ZXJpYWxzIzMwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE1LjIwLjAwLjAwI0ZlbmNpbmcjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMjAuMDEuMDAjTWV0YWwgZmVuY2luZyMzMC4xNS4yMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4yMC4wMi4wMCNXb29kIGZlbmNpbmcjMzAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMjEuMDAuMDAjU3VyZmFjZSMzMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4yMS4wMS4wMCNTaG90IHN0ZWVsIzMwLjE1LjIxLjAwLjAwCi11bnNwc2M3IzMwLjE2LjAwLjAwLjAwI0ludGVyaW9yIGZpbmlzaGluZyBtYXRlcmlhbHMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDAuMDAjV2FsbCBmaW5pc2hpbmcgbWF0ZXJpYWxzIzMwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjAxLjAwI1dhbGxib2FyZCMzMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wMi4wMCNXYWxscGFwZXJzIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjAzLjAwI0RyeXdhbGwjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDQuMDAjQ29ybmVyIGd1YXJkcyMzMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wNS4wMCNQYW5lbHMgb3IgcGFuZWxsaW5nIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjA2LjAwI1BsYXN0ZXIjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDcuMDAjRHJ5d2FsbCBqb2ludCBjb21wb3VuZHMjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDguMDAjV2FsbHBhcGVyIHJvbGxlciMzMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNi4wMC4wMCNDZWlsaW5nIG1hdGVyaWFscyMzMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNi4wMS4wMCNBY291c3RpYyBjZWlsaW5nIHRpbGVzIzMwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE2LjAyLjAwI0NlaWxpbmcgcGFuZWxzIzMwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE2LjAzLjAwI0NvZmZlcnMjMzAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTYuMDQuMDAjU3VzcGVuZGVkIGNlaWxpbmcgc3lzdGVtcyMzMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4wMC4wMCNGbG9vcmluZyMzMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4wMS4wMCNDYXJwZXRpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDIuMDAjV29vZCBmbG9vcmluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4wMy4wMCNMaW5vbGV1bSMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4wNS4wMCNSdWJiZXIgZmxvb3JpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDYuMDAjU3RvbmUgb3IgdGlsZSBmbG9vcmluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4wNy4wMCNWaW55bCBmbG9vcmluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4wOC4wMCNLbm90dGVkIGNhcnBldGluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4wOS4wMCNUdWZ0ZWQgY2FycGV0aW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjEwLjAwI0xhbWluYXRlIGZsb29yaW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjExLjAwI091dGRvb3IgY2FycGV0aW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjEyLjAwI0Zsb29yaW5nIGpvaXN0cyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xMy4wMCNDYXJwZXQgcGFkcyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xNC4wMCNDb3JrIGZsb29yaW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjE1LjAwI0R1Y2tib2FyZHMjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMTYuMDAjVGlsZSBzcGFjZXJzIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE4LjAwLjAwI0NhYmluZXRyeSMzMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOC4wMS4wMCNDYWJpbmV0cyMzMC4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOC4wMi4wMCNDb3VudGVydG9wcyMzMC4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOS4wMC4wMCNNb2xkaW5nIGFuZCBtaWxsd29yayMzMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOS4wMS4wMCNMb3V2ZXJzIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjAyLjAwI0NvbHVtbnMjMzAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDMuMDAjV2FpbnNjb3RpbmcjMzAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDQuMDAjQ29ybmljZXMjMzAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDUuMDAjRG9vciBzdXJyb3VuZHMjMzAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDYuMDAjTW9sZGluZyMzMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOS4wNy4wMCNTdGFpcnMjMzAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDguMDAjU3RhaXIgcGFydHMjMzAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMDAuMDAuMDAjRG9vcnMgYW5kIHdpbmRvd3MgYW5kIGdsYXNzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjAwLjAwI0Rvb3JzIzMwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjAxLjAwI0dsYXNzIGRvb3JzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjAyLjAwI1NjcmVlbiBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wMy4wMCNSb2xsaW5nIGRvb3JzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjA0LjAwI1dvb2RlbiBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wNS4wMCNNZXRhbCBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wNi4wMCNTdG9ybSBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wNy4wMCNEb29yIGZyYW1lcyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wOC4wMCNQb2NrZXQgZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDkuMDAjUmV2b2x2aW5nIGRvb3JzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjEwLjAwI0F1dG9tYXRpYyBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4xMS4wMCNTd2luZyBkb29yIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjEyLjAwI0Rvb3Igb3BlbmVycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4wMC4wMCNXaW5kb3dzIzMwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjA0LjAwI0RvdWJsZSBodW5nIHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMDUuMDAjU2luZ2xlIGh1bmcgd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4wNi4wMCNDYXNlbWVudCB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjA3LjAwI0hvcml6b250YWwgc2xpZGVyIHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMDguMDAjVGlsdCBvciB0cmFuc29tIHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMDkuMDAjRml4ZWQgd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4xMC4wMCNCYXkgd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4xMS4wMCNCb3cgd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4xMi4wMCNQcm9qZWN0ZWQgd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4xMy4wMCNXaW5kb3cgd2FsbHMjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMTQuMDAjV2luZG93IHNjcmVlbnMjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMTUuMDAjRnJlbmNoIHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDAuMDAjR2xhc3MgcHJvZHVjdHMjMzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDEuMDAjUGF2aW5nIGJsb2NrcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wMy4wMCNCZXZlbGVkIGdsYXNzIzMwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjA0LjAwI0xlYWRlZCBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wNS4wMCNMYW1pbmF0ZWQgZ2xhc3MjMzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDYuMDAjVGVtcGVyZWQgZ2xhc3MjMzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDcuMDAjU2FmZXR5IGdsYXNzIzMwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjA4LjAwI0Zsb2F0IGdsYXNzIzMwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjA5LjAwI1dpcmVkIGdsYXNzIzMwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE4LjAwLjAwI1NreWxpZ2h0cyMzMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOC4wMS4wMCNGaXhlZCBza3lsaWdodHMjMzAuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTguMDIuMDAjVmVudGVkIHNreWxpZ2h0cyMzMC4xNy4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOC4wMy4wMCNUdWJlIHNreWxpZ2h0cyMzMC4xNy4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOS4wMC4wMCNXaW5kb3cgZnJhbWVzIzMwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE3LjE5LjAxLjAwI0RvdWJsZSBodW5nIHdpbmRvdyBmcmFtZXMjMzAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTkuMDIuMDAjU2luZ2xlIGh1bmcgd2luZG93IGZyYW1lcyMzMC4xNy4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOS4wMy4wMCNDYXNlbWVudCB3aW5kb3cgZnJhbWVzIzMwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE5LjA0LjAwI0hvcml6b250YWwgc2xpZGVyIHdpbmRvdyBmcmFtZXMjMzAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTkuMDUuMDAjVGlsdCBvciB0cmFuc29tIHdpbmRvdyBmcmFtZXMjMzAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTkuMDYuMDAjRml4ZWQgd2luZG93IGZyYW1lcyMzMC4xNy4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNy4yMC4wMC4wMCNHYXRlcyMzMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4yMC4wMS4wMCNTaW5nbGUgYmFyIGdhdGUjMzAuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMjAuMDIuMDAjRG91YmxlIGJhciBnYXRlIzMwLjE3LjIwLjAwLjAwCi11bnNwc2M3IzMwLjE4LjAwLjAwLjAwI1BsdW1iaW5nIGZpeHR1cmVzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjAwLjAwI1Nhbml0YXJ5IHdhcmUjMzAuMTguMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDEuMDAjQmF0aHR1YnMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDIuMDAjQmlkZXRzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjAzLjAwI1Nob3dlcnMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDQuMDAjU2lua3MjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDUuMDAjVG9pbGV0cyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wNi4wMCNVcmluYWxzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjA3LjAwI0JhdGh0dWIgb3Igc2hvd2VyIGVuY2xvc3VyZXMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDguMDAjUmVzdHJvb20gcGFydGl0aW9ucyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wOS4wMCNTb2FwIGRpc2hlcyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4xMC4wMCNOYXBraW4gcmluZ3MjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMDAuMDAuMDAjQ29uc3RydWN0aW9uIGFuZCBtYWludGVuYW5jZSBzdXBwb3J0IGVxdWlwbWVudCMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNS4wMC4wMCNMYWRkZXJzIGFuZCBzY2FmZm9sZGluZyMzMC4xOS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNS4wMS4wMCNMYWRkZXJzIzMwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE5LjE1LjAyLjAwI1NjYWZmb2xkaW5nIzMwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE5LjE1LjAzLjAwI1N0ZXAgc3Rvb2wjMzAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTUuMDQuMDAjU3RlcCBzdG9vbCMzMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNS4wNS4wMCNTdGVwIHN0b29sIzMwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE5LjE2LjAwLjAwI0xhZGRlcnMgYW5kIHNjYWZmb2xkaW5nIGFjY2Vzc29yaWVzIzMwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE5LjE2LjAxLjAwI0hhbmRyYWlscyMzMC4xOS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNi4wMi4wMCNTY2FmZm9sZGluZyBzdGFiaWxpemVycyMzMC4xOS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNi4wMy4wMCNTY2FmZm9sZGluZyBmbG9vcmluZyMzMC4xOS4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMC4wMC4wMC4wMCNQcmVmYWJyaWNhdGVkIHN0cnVjdHVyZXMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTUuMDAuMDAjUHJlZmFicmljYXRlZCBmYXJtIHN0cnVjdHVyZXMjMzAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTUuMDEuMDAjU2lsb3MjMzAuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTUuMDIuMDAjR3JlZW5ob3VzZXMjMzAuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTYuMDAuMDAjUHJlZmFicmljYXRlZCByZXNpZGVudGlhbCBzdHJ1Y3R1cmVzIzMwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIwLjE2LjAxLjAwI0hvdXNlcyMzMC4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNi4wMi4wMCNNb2JpbGUgaG9tZXMjMzAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTYuMDMuMDAjQ2FiaW5zIzMwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE2LjA0LjAwI0dhcmFnZXMjMzAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTYuMDUuMDAjR2F6ZWJvIzMwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjAwLjAwI1ByZWZhYnJpY2F0ZWQgY29tbWVyY2lhbCBhbmQgaW5kdXN0cmlhbCBzdHJ1Y3R1cmVzIzMwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjAxLjAwI0luIHBsYW50IG9mZmljZXMjMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDIuMDAjU3ByYXkgYm9vdGhzIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjAzLjAwI1N0b3JhZ2Ugc2hlZHMjMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDQuMDAjQ2xlYW4gcm9vbXMjMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDUuMDAjR3VhcmRob3VzZXMjMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDYuMDAjUG9ydGFibGUgdG9pbGV0dGVzIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjA3LjAwI1dhcmVob3VzZXMjMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDguMDAjQXVkaXRvcml1bSMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wOS4wMCNDb25zZXJ2YXRvcnkjMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMTAuMDAjT2ZmaWNlIGtpdGNoZW5zIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE4LjAwLjAwI1ByZWZhYnJpY2F0ZWQgZW1lcmdlbmN5IHJlbGllZiBzdHJ1Y3R1cmVzIzMwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIwLjE4LjAxLjAwI1NoZWx0ZXJzIzMwLjIwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE4LjAyLjAwI0VtZXJnZW5jeSB0ZW50IGhhbGxzIzMwLjIwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE4LjAzLjAwI0NvbnRhaW5lciB1bml0cyMzMC4yMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOS4wMC4wMCNQcmVmYWJyaWNhdGVkIG1lZGljYWwgc3RydWN0dXJlcyMzMC4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOS4wMS4wMCNNZWRpY2FsIHVuaXRzIzMwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE5LjAyLjAwI0xhYm9yYXRvcnkgdW5pdHMjMzAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTkuMDMuMDAjRGVudGFsIHVuaXRzIzMwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE5LjA0LjAwI1N1cmdpY2FsIHVuaXRzIzMwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjAwLjAwLjAwI0VsZWN0cmljYWwgZXF1aXBtZW50IGFuZCBjb21wb25lbnRzIGFuZCBzdXBwbGllcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wMC4wMCNQb3dlciBjb252ZXJzaW9uIzMwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjAxLjAwI1RyYW5zZm9ybWVycyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wMi4wMCNQb3dlciBzdXBwbHkgdW5pdHMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDMuMDAjUG93ZXIgZGlzdHJpYnV0aW9uIHVuaXRzIChQRFVzKSMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wNC4wMCNQb3dlciBhZGFwdGVycyBvciBpbnZlcnRlcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDUuMDAjRnJlcXVlbmN5IGNvbnZlcnRlcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDYuMDAjU2lnbmFsIGNvbnZlcnRlcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDcuMDAjVHJhbnNkdWNlcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDguMDAjUmVndWxhdG9ycyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wOS4wMCNNYWduZXRpYyBjb2lscyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4xMC4wMCNVbmludGVycnVwdGlibGUgcG93ZXIgc3VwcGxpZXMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMTEuMDAjU29sZW5vaWRzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjEyLjAwI0Nob2tlcyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4xMy4wMCNFbGVjdHJpYyByb3RhcnkgY29udmVydGVycyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4xNC4wMCNDYXBhY2l0b3IgYmFua3MjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMTUuMDAjUmVhY3RvcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTYuMDAuMDAjQ29uZHVpdHMgYW5kIHJhY2V3YXlzIzMwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjE2LjAxLjAwI0NhYmxlIHRyYXlzIzMwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE2LjAyLjAwI0VsZWN0cmljYWwgY29uZHVpdCMzMC4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNi4wMy4wMCNFbGVjdHJpY2FsIHJhY2V3YXlzIzMwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE2LjA0LjAwI1dpcmluZyBkdWN0cyMzMC4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNi4wNS4wMCNXaXJld2F5cyMzMC4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNi4wNi4wMCNXaXJpbmcgdHJvdWdocyMzMC4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wMC4wMCNFbGVjdHJpY2FsIGJveGVzIGFuZCBlbmNsb3N1cmVzIGFuZCBmaXR0aW5ncyMzMC4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wMS4wMCNFbGVjdHJpY2FsIGJveGVzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjAyLjAwI0VsZWN0cmljYWwgYm94IGNvdmVycyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wMy4wMCNXZWF0aGVycHJvb2YgYm94ZXMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDQuMDAjU3dpdGNoIGJveGVzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjA1LjAwI0Zsb29yIGJveGVzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjA2LjAwI091dGxldCBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wNy4wMCNTcGVjaWFsdHkgZWxlY3RyaWNhbCBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wOC4wMCNVdGlsaXR5IGJveGVzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjA5LjAwI0VsZWN0cmljYWwgZml0dGluZ3MjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMTAuMDAjRWxlY3RyaWNhbCBidXNoaW5ncyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4xMS4wMCNDZWlsaW5nIGZsYW5nZXMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDAuMDAjTHVncyBjb25uZWN0b3JzIGFuZCB0ZXJtaW5hbHMjMzAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDEuMDAjRWxlY3RyaWNhbCB0ZXJtaW5hbHMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDIuMDAjRWxlY3RyaWNhbCBwbHVncyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wMy4wMCNUd2lzdCBsb2NrIHBsdWdzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjA0LjAwI0VsZWN0cmljYWwgc2xlZXZlcyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wNS4wMCNDYWJsZSBvciB3aXJlIGx1Z3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDYuMDAjRWxlY3RyaWNhbCByZWNlcHRhY2xlcyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wNy4wMCNUZXJtaW5hbCBzdHJpcHMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDguMDAjTWVjaGFuaWNhbCBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjA5LjAwI1Jpbmcgb3IgZmxhZyB0ZXJtaW5hbHMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTAuMDAjV2lyZSBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjExLjAwI1Rlcm1pbmFsIGJsb2NrcyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xMi4wMCNGdXNlIGJsb2NrcyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xMy4wMCNCYWNrc2hlbGwgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xNC4wMCNDaXJjdWxhciBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjE1LjAwI0NvYXhpYWwgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xNi4wMCNGbGF0IGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTcuMDAjRWxlY3Ryb25pYyBjb25uZWN0b3IgY2FwcyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xOC4wMCNSYWRpbyBmcmVxdWVuY3kgKFJGKSBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjE5LjAwI0VsZWN0cmljYWwgbWV0YWxsaWMgdHViaW5nIChFTVQpIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjAuMDAjQ29tcHJlc3Npb24gY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yMS4wMCNTZXQgc2NyZXcgY291cGxpbmdzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjIyLjAwI0ZsZXggY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yMy4wMCNMaXF1aWQgdGlnaHQgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yNC4wMCNDb25uZWN0b3IgYXNzZW1ibGllcyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yNS4wMCNNZWNoYW5pY2FsIGNvdXBsaW5ncyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yNi4wMCNTcHJpbmcgamF3IGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjcuMDAjVGVybWluYWwgYmxvY2sgY292ZXJzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjI4LjAwI1Rlcm1pbmFsIGJsb2NrIHNlcGFyYXRvciMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yOS4wMCNKdW1wZXIgYmFyIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjMwLjAwI1dpcmluZyB0YXBzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjMxLjAwI0VsZWN0cmljYWwgdGFwcyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4zMi4wMCNGaWJlciBvcHRpYyBjb25uZWN0b3IjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDAuMDAjU3dpdGNoZXMgYW5kIGNvbnRyb2xzIGFuZCByZWxheXMjMzAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDEuMDAjU2FmZXR5IHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjAyLjAwI0RpbW1lciBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wMy4wMCNEcnVtIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjA0LjAwI1RpbWUgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDUuMDAjU25hcCBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wNi4wMCNNZWNoYW5pY2FsIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjA3LjAwI1ByZXNzdXJlIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjA4LjAwI1RvZ2dsZSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wOS4wMCNTbGlkZSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xMC4wMCNMaW1pdCBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xMS4wMCNDb250cm9sbGVyIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjEyLjAwI1ZhcmlhYmxlIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjEzLjAwI1B1c2ggYnV0dG9uIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjE0LjAwI1JvdGFyeSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xNS4wMCNQb3dlciByZWxheXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTYuMDAjR2VuZXJhbCBwdXJwb3NlIHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xNy4wMCNTb2NrZXQgcmVsYXlzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjE4LjAwI0FsdGVybmF0aW5nIHZvbHRhZ2UgcmVsYXlzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjE5LjAwI01lcmN1cnkgcmVsYXlzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjIwLjAwI1RpbWUgcmVsYXlzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjIxLjAwI092ZXJsb2FkIHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yMi4wMCNNb3RvciBzdGFydGVyIGNvbnRyb2xzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjIzLjAwI0VsZWN0cmljYWwgY29udGFjdHMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjQuMDAjVGltZXIgY29udHJvbHMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjUuMDAjUGhvdG9jb250cm9scyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yNi4wMCNOb24gZnVzaWJsZSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yNy4wMCNSYWRpbyBmcmVxdWVuY3kgKFJGKSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yOC4wMCNQcm94aW1pdHkgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjkuMDAjRW5jb2RlcnMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMzAuMDAjUGhvdG9lbGVjdHJpYyBzZW5zb3JzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjMxLjAwI0NvbnRhY3RvcnMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDAuMDAjQ2lyY3VpdCBwcm90ZWN0aW9uIGRldmljZXMgYW5kIGFjY2Vzc29yaWVzIzMwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjAxLjAwI0NpcmN1aXQgYnJlYWtlcnMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDIuMDAjTWFnbmV0aWMgY2lyY3VpdCBicmVha2VycyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wMy4wMCNNaW5pYXR1cmUgY2lyY3VpdCBicmVha2VycyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wNC4wMCNUaW1lIGRlbGF5IGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjA1LjAwI1BsdWcgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDYuMDAjQ2FydHJpZGdlIGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjA3LjAwI0dsYXNzIGJvZHkgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDguMDAjQ2xhc3MgdHlwZSBmdXNlcyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wOS4wMCNNaWRnZXQgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMTAuMDAjU3VyZ2Ugc3VwcHJlc3NlcnMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMTEuMDAjQ2VyYW1pYyBmdXNlcyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4xMi4wMCNCbGFkZSBmdXNlcyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wMC4wMCNFbGVjdHJpY2FsIGhhcmR3YXJlIGFuZCBzdXBwbGllcyMzMC4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wMS4wMCNFbGVjdHJpY2FsIGhhbmdlcnMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDIuMDAjQ2FibGUgY2xpcHMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDMuMDAjQ2FibGUgdGllcyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wNC4wMCNXYWxscGxhdGVzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjA1LjAwI1N3aXRjaHBsYXRlcyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wNi4wMCNDYWJsZSBjbGFtcHMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDcuMDAjVHJhbnNmb3JtZXIgYnVzaGluZ3MjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDguMDAjSGFybmVzcyBib2FyZCBuYWlscyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wOS4wMCNEaW4gUmFpbCMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xMC4wMCNIYW5kbGUgdGllIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjExLjAwI0VsZWN0cmljYWwgcmVjZXB0YWNsZSBtdWx0aXBsaWVycyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xMi4wMCNUdWJpbmdzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjEzLjAwI0VuZCBjYXBzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjE0LjAwI1NwaXJhbCB3cmFwcGluZyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xNS4wMCNHcm9tbWV0IGVkZ2luZyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xNi4wMCNDb3JydWdhdGVkIGxvb20gdHViZXMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTcuMDAjRXhwYW5kYWJsZSBicmFpZGVkIHNsZWV2ZSMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xOC4wMCNDYWJsZSB0aWUgbW91bnRzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjAwLjAwLjAwI1Blcm1hbmVudCBzdHJ1Y3R1cmVzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjAwLjAwI0NvbW1lcmNpYWwgYW5kIGVudGVydGFpbm1lbnQgc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wMS4wMCNTaG9wcGluZyBtYWxscyMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wMi4wMCNQYXJraW5nIHN0cnVjdHVyZXMjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDMuMDAjQ2FmZXRlcmlhIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjA0LjAwI1Nob3AgYnVpbGRpbmdzIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjA1LjAwI1Nob3BwaW5nIGNlbnRlciMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wNi4wMCNDYW50ZWVuIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjA3LjAwI1RoZWF0ZXIjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDguMDAjQXVkaXRvcml1bSMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wOS4wMCNNYXJrZXQjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMTAuMDAjQ2hpbGRyZW5zIHBsYXkgYXJlYSMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4xMS4wMCNab28jMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMTIuMDAjR2FyZGVucyMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4xMy4wMCNQYXJrcyMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4xNC4wMCNXYXRlcnNpZGUgbGVpc3VyZSBmYWNpbGl0aWVzIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjAwLjAwI1RyYW5zcG9ydCBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjAxLjAwI1N0ZWVsIGJyaWRnZXMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDIuMDAjRHJ5IGRvY2sjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDMuMDAjQnVzIHN0YXRpb24jMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDQuMDAjQnVzIGdhcmFnZSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wNS4wMCNTZXJ2aWNlIGFyZWEgYnVpbGRpbmcjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDYuMDAjUmFpbHdheSBzdGF0aW9uIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjA3LjAwI1JhaWx3YXkgZGVwb3QjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDguMDAjVW5kZXJncm91bmQgcmFpbHdheSBzdGF0aW9uIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjA5LjAwI1JhaWwgdGVybWluYWwgYnVpbGRpbmcjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTAuMDAjVHJhbXdheSBkZXBvdCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xMS4wMCNUcmFtd2F5IHBsYXRmb3JtcyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xMi4wMCNBaXJwb3J0IGJ1aWxkaW5ncyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xMy4wMCNBaXJwb3J0IGNvbnRyb2wgdG93ZXIjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTQuMDAjQWlyZmllbGQjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTUuMDAjUnVud2F5IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjE2LjAwI1F1YXkjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTcuMDAjUGllciMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xOC4wMCNEb2NrIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjE5LjAwI1doYXJmIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjIwLjAwI01hcmluYSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yMS4wMCNZYWNodCBoYXJib3IjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjIuMDAjQnJlYWt3YXRlciMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yMy4wMCNTZWF3YWxsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjI0LjAwI0ZlcnJ5IHRlcm1pbmFsIGJ1aWxkaW5nIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjI1LjAwI1JvIHJvIHRlcm1pbmFsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjI2LjAwI0xpZ2h0aG91c2UjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjcuMDAjUm9hZCBicmlkZ2UjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjguMDAjUmFpbHdheSBicmlkZ2UjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjkuMDAjRm9vdGJyaWRnZSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zMC4wMCNSb2FkIHZpYWR1Y3QjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzEuMDAjUmFpbHdheSB2aWFkdWN0IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjMyLjAwI1VuZGVycGFzcyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zMy4wMCNPdmVycGFzcyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zNC4wMCNTdWJ3YXkjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzUuMDAjQ3VsdmVydHMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzYuMDAjUm9hZCB0dW5uZWwjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzcuMDAjUmFpbHdheSB0dW5uZWwjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzguMDAjUGVkZXN0cmlhbiB0dW5uZWwjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzkuMDAjQ2FuYWwgdHVubmVsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQwLjAwI1VuZGVyIHJpdmVyIHR1bm5lbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40MS4wMCNVbmRlcnNlYSB0dW5uZWwjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDIuMDAjSGlnaHdheXMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDMuMDAjQ3Jvc3Nyb2FkIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQ0LjAwI1Jpbmcgcm9hZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40NS4wMCNUcnVuayByb2FkIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQ2LjAwI1NlY29uZGFyeSByb2FkIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQ3LjAwI0FjY2VzcyByb2FkIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQ4LjAwI1NsaXAgcm9hZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40OS4wMCNEdWFsIGNhcnJpYWdld2F5IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjUwLjAwI1NpbmdsZSBjYXJyaWFnZXdheSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41MS4wMCNSb2FkIGp1bmN0aW9uIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjUyLjAwI1BlZGVzdHJpYW4gd2F5cyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41My4wMCNQZWRlc3RyaWFuIG92ZXJwYXNzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjU0LjAwI0Zvb3RwYXRoIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjU1LjAwI0N5Y2xlIHBhdGgjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTYuMDAjUGlwZWxpbmUgY2FycnlpbmcgYnJpZGdlIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjU3LjAwI1BpcGVsaW5lcyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41OC4wMCNQdW1waW5nIHN0YXRpb24jMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTkuMDAjU2V3YWdlIHB1bXBpbmcgc3RhdGlvbnMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNjAuMDAjU2V3YWdlIG91dGZhbGwjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNjEuMDAjUGFya2luZyBsb3QjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNjIuMDAjUGFya2luZyBzdHJ1Y3R1cmVzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjYzLjAwI01vdG9yd2F5IHNlcnZpY2UgYXJlYSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wMC4wMCNQdWJsaWMgc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wMS4wMCNQb3N0IG9mZmljZSMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wMi4wMCNCYW5rIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjAzLjAwI1BvbGljZSBzdGF0aW9uIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjA0LjAwI0NvdXJ0IGJ1aWxkaW5nIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjA1LjAwI1ByaXNvbiBidWlsZGluZyMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wNi4wMCNGaXJlIHN0YXRpb24jMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDcuMDAjQW1idWxhbmNlIHN0YXRpb24jMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDguMDAjTW91bnRhaW4gcmVzY3VlIGJ1aWxkaW5nIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjA5LjAwI0xpZmVib2F0IHN0YXRpb24jMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTAuMDAjQ29hc3RndWFyZCBidWlsZGluZyMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4xMS4wMCNSZXNjdWUgc2VydmljZSBzdGF0aW9uIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjEyLjAwI0NpdmljIGNlbnRlciMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4xMy4wMCNDcmVtYXRvcml1bSMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4xNC4wMCNBcnQgZ2FsbGVyeSMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4xNS4wMCNQcmVoaXN0b3JpYyBtb251bWVudCMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4xNi4wMCNUaWNrZXQgb2ZmaWNlcyMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wMC4wMCNVdGlsaXRpZXMgc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wMS4wMCNSYWRhciBzdGF0aW9uIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjAyLjAwI1N1YnN0YXRpb24jMzAuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDMuMDAjTnVjbGVhciBwb3dlciBzdGF0aW9uIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjA0LjAwI1dhdGVyIHRvd2VyIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjA1LjAwI1dlbGxzIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjA2LjAwI01vYmlsZSB0ZWxlcGhvbmUgYmFzZSBzdGF0aW9ucyMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wNy4wMCNEYW0jMzAuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDguMDAjT2lsIG9yIGdhcyBwbGF0Zm9ybXMjMzAuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDAuMDAjRWR1Y2F0aW9uYWwgYW5kIHJlc2VhcmNoIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDEuMDAjU2Nob29scyMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wMi4wMCNQb2x5dGVjaG5pYyMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wMy4wMCNWb2NhdGlvbmFsIGNvbGxlZ2UjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDQuMDAjTGVjdHVyZSB0aGVhdGVyIzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjA1LjAwI0xpYnJhcnkjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDYuMDAjTGFuZ3VhZ2UgbGFib3JhdG9yeSMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wNy4wMCNMYWJvcmF0b3J5IGJ1aWxkaW5nIzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjA4LjAwI01ldGVvcm9sb2dpY2FsIHN0YXRpb25zIzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjA5LjAwI1Jlc2VhcmNoIG9yIHRlc3RpbmcgZmFjaWxpdGllcyMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wMC4wMCNIb3NwaXRhbCBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjAxLjAwI0NsaW5pYyMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wMi4wMCNOdXJzaW5nIGhvbWUjMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDMuMDAjT3BlcmF0aW5nIHRoZWF0ZXIjMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDQuMDAjSW50ZW5zaXZlIGNhcmUgdW5pdCMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wNS4wMCNEaWFnbm9zdGljIHNjcmVlbmluZyByb29tIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjA2LjAwI1NjcmVlbmluZyByb29tcyMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wNy4wMCNGbHVvcm9zY29weSByb29tIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjA4LjAwI1BhdGhvbG9neSByb29tIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjA5LjAwI0NhdGhldGVyIHJvb20jMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjUuMDAuMDAjQWNjb21tb2RhdGlvbiBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjI1LjAxLjAwI1Jlc2lkZW50aWFsIGhvbWVzIzMwLjIyLjI1LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI1LjAyLjAwI0ZsYXRzIzMwLjIyLjI1LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI1LjAzLjAwI0NoaWxkcmVucyBob21lIzMwLjIyLjI1LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI1LjA0LjAwI0RheWNhcmUgY2VudGVyIzMwLjIyLjI1LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI1LjA1LjAwI1JldGlyZW1lbnQgaG9tZSMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wNi4wMCNPbGQgcGVvcGxlcyBob21lIzMwLjIyLjI1LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI1LjA3LjAwI0hvc3RlbCMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wMC4wMCNTcG9ydHMgYW5kIGhlYWx0aCBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjAxLjAwI1N0YWRpdW0jMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDIuMDAjU3BvcnRzIGdyb3VuZCMzMC4yMi4yNi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wMy4wMCNSdW5uaW5nIHRyYWNrIzMwLjIyLjI2LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjA0LjAwI1Nwb3J0cyBoYWxsIzMwLjIyLjI2LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjA1LjAwI1NwYSMzMC4yMi4yNi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wNi4wMCNHeW1uYXNpdW0jMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDcuMDAjU3dpbW1pbmcgcG9vbCMzMC4yMi4yNi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wOC4wMCNXYXRlciBzcG9ydHMgZmFjaWxpdGllcyMzMC4yMi4yNi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNy4wMC4wMCNJbmR1c3RyaWFsIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjcuMDEuMDAjV29ya3Nob3BzIzMwLjIyLjI3LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI3LjAyLjAwI0NvbGQgc3RvcmFnZSBpbnN0YWxsYXRpb25zIzMwLjIyLjI3LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI3LjAzLjAwI1dhcmVob3VzZSBzdG9yZXMjMzAuMjIuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjguMDAuMDAjQWdyaWN1bHR1cmFsIGFuZCBmYXJtaW5nIGFuZCBmaXNoaW5nIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjguMDEuMDAjQmFybiMzMC4yMi4yOC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOC4wMi4wMCNDb3dzaGVkcyMzMC4yMi4yOC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOC4wMy4wMCNJcnJpZ2F0aW9uIGNoYW5uZWwjMzAuMjIuMjguMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjkuMDAuMDAjRGVmZW5zZSBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjI5LjAxLjAwI01pbGl0YXJ5IGJ1bmtlciMzMC4yMi4yOS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOS4wMi4wMCNNaWxpdGFyeSBzaGVsdGVyIzMwLjIyLjI5LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI5LjAzLjAwI0JhcnJhY2tzIzMwLjIyLjI5LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI5LjA0LjAwI01pbGl0YXJ5IG1lc3MjMzAuMjIuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMzAuMDAuMDAjUmVsaWdpb3VzIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMzAuMDEuMDAjQ2h1cmNoZXMjMzAuMjIuMzAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMzAuMDIuMDAjVGVtcGxlcyMzMC4yMi4zMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4zMC4wMy4wMCNNb3NxdWVzIzMwLjIyLjMwLjAwLjAwCi11bnNwc2M3IzMxLjAwLjAwLjAwLjAwI01hbnVmYWN0dXJpbmcgQ29tcG9uZW50cyBhbmQgU3VwcGxpZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMDAuMDAuMDAjQ2FzdGluZ3MjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDAuMDAjRGllIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjAxLjAwI0FsdW1pbnVtIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wMi4wMCNGZXJyb3VzIGFsbG95IGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wMy4wMCNJcm9uIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wNC4wMCNOb24gZmVycm91cyBhbGxveSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wNi4wMCNTdGVlbCBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDcuMDAjTWFnbmVzaXVtIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wOC4wMCNaaW5jIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wOS4wMCNUaW4gZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjEwLjAwI1RpdGFuaXVtIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xMS4wMCNCZXJ5bGxpdW0gZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjEyLjAwI1ByZWNpb3VzIG1ldGFsIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xMy4wMCNDb3BwZXIgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjE0LjAwI0xlYWQgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjE1LjAwI0JyYXNzIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xNi4wMCNCcm9uemUgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjAwLjAwI1NhbmQgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wMi4wMCNGZXJyb3VzIGFsbG95IHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDMuMDAjU3RlZWwgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wNS4wMCNJcm9uIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDYuMDAjQWx1bWludW0gc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wNy4wMCNNYWduZXNpdW0gc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wOC4wMCNUaXRhbml1bSBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjA5LjAwI0JlcnlsbGl1bSBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjEwLjAwI0NvcHBlciBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjExLjAwI0JyYXNzIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMTIuMDAjQnJvbnplIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMTMuMDAjWmluYyBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjE0LjAwI1RpbiBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjE1LjAwI0xlYWQgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xNi4wMCNQcmVjaW91cyBtZXRhbCBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjAwLjAwI1Blcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjAyLjAwI0ZlcnJvdXMgYWxsb3kgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMDMuMDAjU3RlZWwgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjA1LjAwI0lyb24gcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMDYuMDAjQWx1bWludW0gcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMDcuMDAjTWFnbmVzaXVtIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjA4LjAwI1RpdGFuaXVtIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjA5LjAwI0JlcnlsbGl1bSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4xMC4wMCNDb3BwZXIgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMTEuMDAjQnJhc3MgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMTIuMDAjQnJvbnplIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjEzLjAwI1ppbmMgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMTQuMDAjVGluIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjE1LjAwI0xlYWQgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMTYuMDAjUHJlY2lvdXMgbWV0YWwgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDAuMDAjU2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wMS4wMCNOb24gZmVycm91cyBhbGxveSBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjAyLjAwI0ZlcnJvdXMgYWxsb3kgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wMy4wMCNTdGVlbCBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjA1LjAwI0lyb24gc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wNi4wMCNBbHVtaW51bSBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjA3LjAwI01hZ25lc2l1bSBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjA4LjAwI1RpdGFuaXVtIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDkuMDAjQmVyeWxsaXVtIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMTAuMDAjQ29wcGVyIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMTEuMDAjQnJhc3Mgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4xMi4wMCNCcm9uemUgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4xMy4wMCNaaW5jIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMTQuMDAjVGluIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMTUuMDAjTGVhZCBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjE2LjAwI1ByZWNpb3VzIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDAuMDAjSW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wMS4wMCNOb24gZmVycm91cyBhbGxveSBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjAyLjAwI0ZlcnJvdXMgYWxsb3kgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wMy4wMCNTdGVlbCBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjA1LjAwI0lyb24gaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wNi4wMCNBbHVtaW51bSBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjA3LjAwI01hZ25lc2l1bSBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjA4LjAwI1ppbmMgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wOS4wMCNUaW4gaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4xMC4wMCNMZWFkIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMTEuMDAjUHJlY2lvdXMgbWV0YWwgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4xMi4wMCNUaXRhbml1bSBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjAwLjAwI0NlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjAyLjAwI0ZlcnJvdXMgYWxsb3kgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMDMuMDAjU3RlZWwgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjA1LjAwI0lyb24gY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMDYuMDAjQWx1bWludW0gY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMDcuMDAjTWFnbmVzaXVtIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjA4LjAwI1RpdGFuaXVtIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjA5LjAwI0JlcnlsbGl1bSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4xMC4wMCNDb3BwZXIgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMTEuMDAjQnJhc3MgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMTIuMDAjQnJvbnplIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjEzLjAwI1ppbmMgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMTQuMDAjVGluIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjE1LjAwI0xlYWQgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMTYuMDAjUHJlY2lvdXMgbWV0YWwgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDAuMDAjQ2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wMi4wMCNGZXJyb3VzIGFsbG95IGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wMy4wMCNTdGVlbCBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wNS4wMCNJcm9uIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wNi4wMCNBbHVtaW51bSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDcuMDAjTWFnbmVzaXVtIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wOC4wMCNUaXRhbml1bSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDkuMDAjQmVyeWxsaXVtIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4xMC4wMCNDb3BwZXIgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjExLjAwI0JyYXNzIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4xMi4wMCNCcm9uemUgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjEzLjAwI1ppbmMgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjE0LjAwI1RpbiBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMTUuMDAjTGVhZCBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMTYuMDAjUHJlY2lvdXMgbWV0YWwgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjAwLjAwI0dyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wMi4wMCNGZXJycm91cyBhbGxveSBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjAzLjAwI1N0ZWVsIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDUuMDAjSXJvbiBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjA2LjAwI0FsdW1pbnVtIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDcuMDAjTWFnbmVzaXVtIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDguMDAjVGl0YW5pdW0gZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wOS4wMCNCZXJ5bGxpdW0gZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4xMC4wMCNDb3BwZXIgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4xMS4wMCNCcmFzcyBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjEyLjAwI0Jyb256ZSBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjEzLjAwI1ppbmMgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4xNC4wMCNUaW4gZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4xNS4wMCNMZWFkIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTYuMDAjUHJlY2lvdXMgbWV0YWwgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wMC4wMCNQbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjAyLjAwI0ZlcnJvdXMgYWxsb3kgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjAzLjAwI1N0ZWVsIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjA1LjAwI0lyb24gcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjA2LjAwI0FsdW1pbnVtIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wNy4wMCNNYWduZXNpdW0gcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjA4LjAwI1RpdGFuaXVtIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wOS4wMCNCZXJ5bGxpdW0gcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjEwLjAwI0NvcHBlciBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMTEuMDAjQnJhc3MgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjEyLjAwI0Jyb256ZSBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMTMuMDAjWmluYyBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMTQuMDAjVGluIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4xNS4wMCNMZWFkIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4xNi4wMCNQcmVjaW91cyBtZXRhbCBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDAuMDAjViBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wMi4wMCNGZXJyb3VzIGFsbG95IHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wMy4wMCNTdGVlbCB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wNS4wMCNJcm9uIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wNi4wMCNBbHVtaW51bSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDcuMDAjTWFnbmVzaXVtIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wOC4wMCNUaXRhbml1bSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDkuMDAjQmVyeWxsaXVtIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4xMC4wMCNDb3BwZXIgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjExLjAwI0JyYXNzIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4xMi4wMCNCcm9uemUgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjEzLjAwI1ppbmMgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjE0LjAwI1RpbiB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMTUuMDAjTGVhZCB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMTYuMDAjUHJlY2lvdXMgbWV0YWwgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjExLjAwLjAwLjAwI0V4dHJ1c2lvbnMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDAuMDAjUHJvZmlsZSBleHRydXNpb25zIzMxLjExLjAwLjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjAxLjAwI0FsdW1pbnVtIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wMi4wMCNCZXJ5bGxpdW0gcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjAzLjAwI0JyYXNzIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wNC4wMCNCcm9uemUgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjA1LjAwI0NvcHBlciBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDYuMDAjRmVycm91cyBhbGxveSBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDcuMDAjTGVhZCBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDguMDAjTWFnbmVzaXVtIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wOS4wMCNOb24gZmVycm91cyBhbGxveSBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMTAuMDAjUGxhc3RpYyBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMTEuMDAjUHJlY2lvdXMgbWV0YWwgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjEyLjAwI1J1YmJlciBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMTMuMDAjU3RhaW5sZXNzIHN0ZWVsIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4xNC4wMCNTdGVlbCBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMTUuMDAjVGluIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4xNi4wMCNUaXRhbml1bSBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMTcuMDAjWmluYyBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDAuMDAjSW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDEuMDAjQWx1bWludW0gaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDIuMDAjQmVyeWxsaXVtIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjAzLjAwI0JyYXNzIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjA0LjAwI0Jyb256ZSBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wNS4wMCNDb3BwZXIgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDYuMDAjRmVycm91cyBhbGxveSBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wNy4wMCNMZWFkIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjA4LjAwI01hZ25lc2l1bSBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wOS4wMCNOb24gZmVycm91cyBhbGxveSBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xMC4wMCNQbGFzdGljIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjExLjAwI1ByZWNpb3VzIG1ldGFsIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjEyLjAwI1J1YmJlciBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xMy4wMCNTdGFpbmxlc3Mgc3RlZWwgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMTQuMDAjU3RlZWwgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMTUuMDAjVGluIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjE2LjAwI1RpdGFuaXVtIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjE3LjAwI1ppbmMgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDAuMDAjQ29sZCBleHRydXNpb25zIzMxLjExLjAwLjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjAxLjAwI0FsdW1pbnVtIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wMi4wMCNCZXJ5bGxpdW0gY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjAzLjAwI0JyYXNzIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wNC4wMCNCcm9uemUgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjA1LjAwI0NvcHBlciBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDYuMDAjRmVycm91cyBhbGxveSBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDcuMDAjTGVhZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDguMDAjTWFnbmVzaXVtIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wOS4wMCNOb24gZmVycm91cyBhbGxveSBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMTAuMDAjUGxhc3RpYyBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMTEuMDAjUHJlY2lvdXMgbWV0YWwgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjEyLjAwI1J1YmJlciBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMTMuMDAjU3RhaW5sZXNzIHN0ZWVsIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4xNC4wMCNTdGVlbCBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMTUuMDAjVGluIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4xNi4wMCNUaXRhbml1bSBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMTcuMDAjWmluYyBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMDAuMDAuMDAjTWFjaGluZWQgY2FzdGluZ3MjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDAuMDAjTWFjaGluZWQgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wMi4wMCNGZXJyb3VzIGFsbG95IHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wMy4wMCNTdGVlbCB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wNS4wMCNJcm9uIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wNi4wMCNBbHVtaW51bSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDcuMDAjTWFnbmVzaXVtIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wOC4wMCNUaXRhbml1bSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDkuMDAjQmVyeWxsaXVtIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xMC4wMCNDb3BwZXIgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjExLjAwI0JyYXNzIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xMi4wMCNCcm9uemUgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjEzLjAwI1ppbmMgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjE0LjAwI1RpbiB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTUuMDAjTGVhZCB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTYuMDAjUHJlY2lvdXMgbWV0YWwgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjE3LjAwI0NvbXBvc2l0ZSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTguMDAjTmlja2VsIGFsbG95IHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xOS4wMCNOb24gbWV0YWxsaWMgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjAwLjAwI01hY2hpbmVkIGRpZSBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wMS4wMCNBbHVtaW51bSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDIuMDAjRmVycm91cyBhbGxveSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDMuMDAjSXJvbiBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjA1LjAwI1N0YWlubGVzcyBzdGVlbCBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDYuMDAjU3RlZWwgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjA3LjAwI01hZ25lc2l1bSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDguMDAjWmluYyBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDkuMDAjVGluIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xMC4wMCNUaXRhbml1bSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTEuMDAjQmVyeWxsaXVtIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xMi4wMCNQcmVjaW91cyBtZXRhbCBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTMuMDAjQ29wcGVyIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xNC4wMCNMZWFkIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xNS4wMCNCcmFzcyBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTYuMDAjQnJvbnplIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xNy4wMCNDb21wb3NpdGUgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjE4LjAwI05pY2tlbCBBbGxveSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTkuMDAjTm9uIG1ldGFsbGljIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wMC4wMCNNYWNoaW5lZCBzYW5kIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDIuMDAjRmVycm91cyBhbGxveSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjAzLjAwI1N0ZWVsIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDUuMDAjSXJvbiBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjA2LjAwI0FsdW1pbnVtIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDcuMDAjTWFnbmVzaXVtIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDguMDAjVGl0YW5pdW0gc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wOS4wMCNCZXJ5bGxpdW0gc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xMC4wMCNDb3BwZXIgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xMS4wMCNCcmFzcyBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjEyLjAwI0Jyb256ZSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjEzLjAwI1ppbmMgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xNC4wMCNUaW4gc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xNS4wMCNMZWFkIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTYuMDAjUHJlY2lvdXMgbWV0YWwgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xNy4wMCNDb21wb3NpdGUgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xOC4wMCNOaWNrZWwgQWxsb3kgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xOS4wMCNOb24gbWV0YWxsaWMgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wMC4wMCNNYWNoaW5lZCBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wMS4wMCNOb24gZmVycm91cyBhbGxveSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wMi4wMCNGZXJyb3VzIGFsbG95IHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjAzLjAwI1N0ZWVsIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wNS4wMCNJcm9uIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjA2LjAwI0FsdW1pbnVtIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjA3LjAwI01hZ25lc2l1bSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wOC4wMCNUaXRhbml1bSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wOS4wMCNCZXJ5bGxpdW0gcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTAuMDAjQ29wcGVyIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjExLjAwI0JyYXNzIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjEyLjAwI0Jyb256ZSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xMy4wMCNaaW5jIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjE0LjAwI1RpbiBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xNS4wMCNMZWFkIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjE2LjAwI1ByZWNpb3VzIG1ldGFsIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjE3LjAwI0NvbXBvc2l0ZSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xOC4wMCNOaWNrZWwgYWxsb3kgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTkuMDAjTm9uIG1ldGFsbGljIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjAwLjAwI01hY2hpbmVkIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wMS4wMCNOb24gZmVycm91cyBhbGxveSBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDIuMDAjRmVycm91cyBhbGxveSBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDMuMDAjU3RlZWwgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDUuMDAjSXJvbiBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDYuMDAjQWx1bWludW0gcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjA3LjAwI01hZ25lc2l1bSBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDguMDAjVGl0YW5pdW0gcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjA5LjAwI0JlcnlsbGl1bSBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTAuMDAjQ29wcGVyIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xMS4wMCNCcmFzcyBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTIuMDAjQnJvbnplIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xMy4wMCNaaW5jIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xNC4wMCNUaW4gcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjE1LjAwI0xlYWQgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjE2LjAwI1ByZWNpb3VzIG1ldGFsIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xNy4wMCNDb21wb3NpdGUgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjE4LjAwI05pY2tlbCBhbGxveSBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTkuMDAjTm9uIG1ldGFsbGljIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wMC4wMCNNYWNoaW5lZCBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDIuMDAjRmVycm91cyBhbGxveSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjAzLjAwI1N0ZWVsIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDUuMDAjSXJvbiBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjA2LjAwI0FsdW1pbnVtIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDcuMDAjTWFnbmVzaXVtIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDguMDAjVGl0YW5pdW0gc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wOS4wMCNCZXJ5bGxpdW0gc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xMC4wMCNDb3BwZXIgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xMS4wMCNCcmFzcyBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjEyLjAwI0Jyb256ZSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjEzLjAwI1ppbmMgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xNC4wMCNUaW4gc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xNS4wMCNMZWFkIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTYuMDAjUHJlY2lvdXMgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xNy4wMCNDb21wb3NpdGUgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xOC4wMCNOaWNrZWwgYWxsb3kgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xOS4wMCNOb24gbWV0YWxsaWMgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wMC4wMCNNYWNoaW5lZCBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDIuMDAjRmVycm91cyBhbGxveSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjAzLjAwI1N0ZWVsIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDUuMDAjSXJvbiBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjA2LjAwI0FsdW1pbnVtIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDcuMDAjTWFnbmVzaXVtIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDguMDAjWmluYyBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjA5LjAwI1RpbiBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjEwLjAwI0xlYWQgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4xMS4wMCNQcmVjaW91cyBtZXRhbCBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjEyLjAwI1RpdGFuaXVtIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMTMuMDAjQ29tcG9zaXRlIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMTQuMDAjTmlja2VsIGFsbG95IGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMTUuMDAjTm9uIG1ldGFsbGljIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDAuMDAjTWFjaGluZWQgY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDIuMDAjRmVycm91cyBhbGxveSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4wMy4wMCNTdGVlbCBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDUuMDAjSXJvbiBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4wNi4wMCNBbHVtaW51bSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4wNy4wMCNNYWduZXNpdW0gY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDguMDAjVGl0YW5pdW0gY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDkuMDAjQmVyeWxsaXVtIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjEwLjAwI0NvcHBlciBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xMS4wMCNCcmFzcyBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xMi4wMCNCcm9uemUgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTMuMDAjWmluYyBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xNC4wMCNUaW4gY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTUuMDAjTGVhZCBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xNi4wMCNQcmVjaW91cyBtZXRhbCBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xNy4wMCNDb21wb3NpdGUgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTguMDAjTmlja2VsIGFsbG95IGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjE5LjAwI05vbiBtZXRhbGxpYyBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wMC4wMCNNYWNoaW5lZCBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjAyLjAwI0ZlcnJvdXMgYWxsb3kgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjAzLjAwI1N0ZWVsIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjA1LjAwI0lyb24gY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjA2LjAwI0FsdW1pbnVtIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wNy4wMCNNYWduZXNpdW0gY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjA4LjAwI1RpdGFuaXVtIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wOS4wMCNCZXJ5bGxpdW0gY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjEwLjAwI0NvcHBlciBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTEuMDAjQnJhc3MgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjEyLjAwI0Jyb256ZSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTMuMDAjWmluYyBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTQuMDAjVGluIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xNS4wMCNMZWFkIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xNi4wMCNQcmVjaW91cyBtZXRhbCBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTcuMDAjQ29tcG9zaXRlIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xOC4wMCNOaWNrZWwgYWxsb3kgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjE5LjAwI05vbiBtZXRhbGxpYyBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDAuMDAjTWFjaGluZWQgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wMS4wMCNOb24gZmVycm91cyBhbGxveSBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjAyLjAwI0ZlcnJyb3VzIGFsbG95IGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDMuMDAjU3RlZWwgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wNS4wMCNJcm9uIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDYuMDAjQWx1bWludW0gZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wNy4wMCNNYWduZXNpdW0gZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wOC4wMCNUaXRhbml1bSBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjA5LjAwI0JlcnlsbGl1bSBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjEwLjAwI0NvcHBlciBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjExLjAwI0JyYXNzIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTIuMDAjQnJvbnplIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTMuMDAjWmluYyBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjE0LjAwI1RpbiBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjE1LjAwI0xlYWQgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xNi4wMCNQcmVjaW91cyBtZXRhbCBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjE3LjAwI0NvbXBvc2l0ZSBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjE4LjAwI05pY2tlbCBhbGxveSBtZXRhbCBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjE5LjAwI05vbiBtZXRhbGxpYyBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjAwLjAwLjAwI0ZvcmdpbmdzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjAwLjAwI09wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjAyLjAwI0ZlcnJvdXMgYWxsb3kgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMDMuMDAjU3RlZWwgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjA1LjAwI0lyb24gb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMDYuMDAjQWx1bWludW0gb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMDcuMDAjTWFnbmVzaXVtIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjA4LjAwI1RpdGFuaXVtIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjA5LjAwI0JlcnlsbGl1bSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4xMC4wMCNDb3BwZXIgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMTEuMDAjQnJhc3Mgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMTIuMDAjQnJvbnplIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjEzLjAwI1ppbmMgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMTQuMDAjVGluIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjE1LjAwI0xlYWQgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMTYuMDAjUHJlY2lvdXMgbWV0YWwgb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDAuMDAjQ2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wMS4wMCNOb24gZmVycm91cyBhbGxveSBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjAyLjAwI0ZlcnJvdXMgYWxsb3kgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wMy4wMCNTdGVlbCBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjA1LjAwI0lyb24gY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wNi4wMCNBbHVtaW51bSBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjA3LjAwI01hZ25lc2l1bSBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjA4LjAwI1RpdGFuaXVtIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDkuMDAjQmVyeWxsaXVtIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMTAuMDAjQ29wcGVyIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMTEuMDAjQnJhc3MgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4xMi4wMCNCcm9uemUgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4xMy4wMCNaaW5jIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMTQuMDAjVGluIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMTUuMDAjTGVhZCBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjE2LjAwI1ByZWNpb3VzIG1ldGFsIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDAuMDAjSW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDIuMDAjRmVycm91cyBhbGxveSBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4wMy4wMCNTdGVlbCBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDUuMDAjSXJvbiBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4wNi4wMCNBbHVtaW51bSBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4wNy4wMCNNYWduZXNpdW0gaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDguMDAjVGl0YW5pdW0gaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDkuMDAjQmVyeWxsaXVtIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjEwLjAwI0NvcHBlciBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4xMS4wMCNCcmFzcyBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4xMi4wMCNCcm9uemUgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTMuMDAjWmluYyBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4xNC4wMCNUaW4gaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTUuMDAjTGVhZCBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4xNi4wMCNQcmVjaW91cyBtZXRhbCBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wMC4wMCNEcm9wIGZvcmdpbmdzIzMxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDIuMDAjWmluYyBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjAzLjAwI0ZlcnJvdXMgYWxsb3kgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wNC4wMCNUaW4gZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wNS4wMCNMZWFkIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDYuMDAjU3RlZWwgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wNy4wMCNQcmVjaW91cyBtZXRhbCBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjA4LjAwI1N0YWlubGVzcyBzdGVlbCBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjA5LjAwI0lyb24gZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xMC4wMCNBbHVtaW51bSBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjExLjAwI01hZ25lc2l1bSBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjEyLjAwI1RpdGFuaXVtIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTMuMDAjQmVyeWxsaXVtIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTQuMDAjQ29wcGVyIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTUuMDAjQnJhc3MgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xNi4wMCNCcm9uemUgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xNy4wMCNDb2xkIHN0ZWVsIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTguMDAjU2VtaSBmaW5pc2hlZCBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjAwLjAwI1JvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjAxLjAwI0FsdW1pbnVtIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjAyLjAwI0JlcnlsbGl1bSByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wMy4wMCNCcmFzcyByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wNC4wMCNCcm9uemUgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDUuMDAjQ29wcGVyIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjA2LjAwI0lyb24gcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDcuMDAjTGVhZCByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wOC4wMCNNYWduZXNpdW0gcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDkuMDAjUHJlY2lvdXMgbWV0YWwgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMTAuMDAjU3RhaW5sZXNzIHN0ZWVsIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjExLjAwI1RpbiByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4xMi4wMCNUaXRhbml1bSByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4xMy4wMCNaaW5jIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjE0LjAwI05vbiBmZXJyb3VzIGFsbG95IHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjE1LjAwI0ZlcnJvdXMgYWxsb3kgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMTYuMDAjU3RlZWwgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMjAuMDAuMDAjUG93ZGVyZWQgbWV0YWwgY29tcG9uZW50cyMzMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4yMC4wMS4wMCNGZXJyb3VzIHBvd2RlcmVkIG1ldGFsIGNvbXBvbmVudHMjMzEuMTMuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMjAuMDIuMDAjTm9uIGZlcnJvdXMgcG93ZGVyZWQgbWV0YWwgcGFydHMjMzEuMTMuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMDAuMDAuMDAjTW9sZGluZ3MjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTUuMDAuMDAjSW5qZWN0aW9uIG1vbGRpbmdzIzMxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE0LjE1LjAxLjAwI1BsYXN0aWMgaW5qZWN0aW9uIG1vbGRpbmdzIzMxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE1LjAyLjAwI1J1YmJlciBpbmplY3Rpb24gbW9sZGluZ3MjMzEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTUuMDMuMDAjR2xhc3MgaW5qZWN0aW9uIG1vbGRpbmdzIzMxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE2LjAwLjAwI1ZhY3V1bSBtb2xkaW5ncyMzMS4xNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNi4wMS4wMCNQbGFzdGljIHZhY3V1bSBtb2xkaW5ncyMzMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNi4wMi4wMCNSdWJiZXIgdmFjdXVtIG1vbGRpbmdzIzMxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE2LjAzLjAwI0dsYXNzIHZhY3V1bSBtb2xkaW5ncyMzMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNy4wMC4wMCNCbG93IG1vbGRpbmdzIzMxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE0LjE3LjAxLjAwI1BsYXN0aWMgYmxvdyBtb2xkaW5ncyMzMS4xNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNy4wMi4wMCNSdWJiZXIgYmxvdyBtb2xkaW5ncyMzMS4xNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNC4xOC4wMC4wMCNSZWFjdGlvbiBpbmplY3Rpb24gbW9sZGluZ3MgKFJJTSkjMzEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTguMDEuMDAjUGxhc3RpYyByZWFjdGlvbiBpbmplY3Rpb24gbW9sZGluZ3MjMzEuMTQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTguMDIuMDAjUnViYmVyIHJlYWN0aW9uIGluamVjdGlvbiBtb2xkaW5ncyMzMS4xNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNS4wMC4wMC4wMCNSb3BlIGFuZCBjaGFpbiBhbmQgY2FibGUgYW5kIHdpcmUgYW5kIHN0cmFwIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjE1LjAwLjAwI1JvcGVzIzMxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjE1LjAxLjAwI0NvdHRvbiByb3BlIzMxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE1LjAyLjAwI1BvbHllc3RlciByb3BlIzMxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE1LjAzLjAwI1BvbHlwcm9weWxlbmUgcm9wZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wNC4wMCNOeWxvbiByb3BlIzMxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE1LjA1LjAwI1dpcmUgcm9wZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wNi4wMCNIZW1wIHJvcGUjMzEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDcuMDAjU3RyaW5nIG9yIHR3aW5lIzMxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE1LjA4LjAwI1Npc2FsIHJvcGUjMzEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDAuMDAjQ2hhaW5zIzMxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjAxLjAwI1NhZmV0eSBjaGFpbnMjMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDIuMDAjU2tpZCBjaGFpbnMjMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDMuMDAjUm9sbGVyIGNoYWlucyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wNC4wMCNQcm9vZiBjb2lsIGNoYWlucyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wNS4wMCNTYXNoIGNoYWluIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjA2LjAwI0phY2sgY2hhaW5zIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjA3LjAwI0NvaWwgY2hhaW5zIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjA4LjAwI0JhbGwgY2hhaW5zIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjA5LjAwI0NoYWluIGxpbmtzIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjAwLjAwI01lY2hhbmljYWwgY2FibGUjMzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTcuMDEuMDAjTWVjaGFuaWNhbCBjYWJsZXMjMzEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTcuMDIuMDAjTm9uIGVsZWN0cmljIGNvbnRyb2wgY2FibGVzIzMxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjAzLjAwI0xpZnRpbmcgY2FibGVzIzMxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjA0LjAwI1RyYWNrIGNhYmxlcyMzMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wNS4wMCNOb24gZWxlY3RyaWNhbCBzdGVlbCBjYWJsZXMjMzEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTcuMDYuMDAjTm9uIGVsZWN0cmljYWwgY29wcGVyIGNhYmxlcyMzMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wNy4wMCNOb24gZWxlY3RyaWNhbCBhbHVtaW51bSBjYWJsZXMjMzEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTguMDAuMDAjTWVjaGFuaWNhbCB3aXJlIzMxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjE4LjAxLjAwI01lY2hhbmljYWwgd2lyZSMzMS4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOC4wMi4wMCNCYXJiZWQgd2lyZSMzMS4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOC4wMy4wMCNQaWFubyBzdGVlbCB3aXJlIzMxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE5LjAwLjAwI1N0cmFwcyMzMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOS4wMS4wMCNNZXRhbCBzdHJhcHMjMzEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTkuMDIuMDAjTGVhdGhlciBzdHJhcHMjMzEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTkuMDMuMDAjRmliZXIgc3RyYXBzIzMxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE5LjA0LjAwI1BsYXN0aWMgc3RyYXBzIzMxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE1LjIwLjAwLjAwI1NlY3VyaXR5IHdpcmUjMzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMjAuMDEuMDAjUmF6b3Igd2lyZSMzMS4xNS4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4yMC4wMi4wMCNCYXJiZWQgd2lyZSMzMS4xNS4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4yMS4wMC4wMCNFbGVjdHJpY2FsIHdpcmUjMzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMjEuMDEuMDAjV2lyZSBhc3NlbWJseSMzMS4xNS4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4wMC4wMC4wMCNIYXJkd2FyZSMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wMC4wMCNTY3Jld3MjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDEuMDAjQ2FwIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wMi4wMCNBbmNob3Igc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjAzLjAwI0RyaXZlIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wNC4wMCNNYWNoaW5lIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wNS4wMCNTZXQgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjA2LjAwI1NoZWV0IG1ldGFsIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wNy4wMCNUYXBwaW5nIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wOC4wMCNXb29kIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wOS4wMCNEcnl3YWxsIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4xMC4wMCNDYXB0aXZlIHNjcmV3IzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjExLjAwI0xvY2tpbmcgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjEyLjAwI1RocmVhZCByb2xsaW5nIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4xMy4wMCNGbGF0aGVhZCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTQuMDAjV2VsZCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTUuMDAjRmxhdCBoZWFkIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4xNi4wMCNUaHVtYiBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTcuMDAjU2hvdWxkZXIgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjAwLjAwI0JvbHRzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjAxLjAwI0FuY2hvciBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wMi4wMCNCbGluZCBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wMy4wMCNDYXJyaWFnZSBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wNC4wMCNDbGV2aXMgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDUuMDAjQ3lsaW5kZXIgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDYuMDAjRG9vciBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wNy4wMCNFeHBhbnNpb24gYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDguMDAjTGFnIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjA5LjAwI1RvZ2dsZSBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xMC4wMCNFeWUgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTEuMDAjTG9ja2luZyBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xMi4wMCNQaW4gb3IgY29sbGFyIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjEzLjAwI1RlbnNpb24gYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTQuMDAjU3RydWN0dXJhbCBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xNS4wMCNUb3JxdWUgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTYuMDAjVSBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xNy4wMCNXaW5nIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjE4LjAwI1RocmVhZGVkIHJvZCMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xOS4wMCNTdHVkIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjIwLjAwI0hleGFnb25hbCBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wMC4wMCNOdXRzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjAxLjAwI0FuY2hvciBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjAyLjAwI0JlYXJpbmcgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wMy4wMCNCbGluZCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjA0LjAwI0JhcnJlbCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjA1LjAwI0NhcCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjA2LjAwI0NhcHRpdmUgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wNy4wMCNDYXN0bGUgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wOC4wMCNDaGFubmVsIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDkuMDAjQ2xhbXBpbmcgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xMC4wMCNFeHBhbnNpb24gbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xMS4wMCNFeWUgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xMi4wMCNGbGFuZ2UgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xMy4wMCNIb3NlIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTQuMDAjSW5zZXJ0IG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTUuMDAjU2VsZiBsb2NraW5nIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTYuMDAjTG9ja251dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTcuMDAjV2luZyBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjE4LjAwI1RvZ2dsZSBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjE5LjAwI1N3aXZlbCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjIwLjAwI1N0b3AgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yMS4wMCNTcHJpbmcgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yMi4wMCNVbmlvbiBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjIzLjAwI051dHBsYXRlIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjQuMDAjUHJlc3MgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yNS4wMCNDbGlwIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjYuMDAjRG9tZSBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjI3LjAwI0hleGFnb25hbCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjI4LjAwI0NvdXBsaW5nIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjkuMDAjS251cmxlZCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjAwLjAwI1dhc2hlcnMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDEuMDAjTG9ja2luZyB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjAyLjAwI0JldmVsIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDMuMDAjQmluZGluZyB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjA0LjAwI0N1cnZlZCB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjA1LjAwI0VsZWN0cmljYWwgaW5zdWxhdGluZyB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjA2LjAwI0ZpbmlzaGluZyB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjA3LjAwI0ZsYXQgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wOC4wMCNPcGVuIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDkuMDAjUmVkdWNpbmcgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4xMC4wMCNTaGltIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTEuMDAjU3ByaW5nIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTIuMDAjU3F1YXJlIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTMuMDAjU3dpdmVsIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTQuMDAjVGhydXN0IHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTUuMDAjU2hvdWxkZXIgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4xNi4wMCNTcGFjZXJzIG9yIHN0YW5kb2ZmcyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4xNy4wMCNDb25pY2FsIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTkuMDAuMDAjU3ByaW5ncyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wMS4wMCNIZWxpY2FsIHNwcmluZ3MjMzEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTkuMDIuMDAjTGVhZiBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjAzLjAwI1NwaXJhbCBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjA0LjAwI0NvbXByZXNzaW9uIHNwcmluZ3MjMzEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTkuMDUuMDAjRGllIHNwcmluZ3MjMzEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTkuMDYuMDAjRGlzayBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjA3LjAwI0V4dGVuc2lvbiBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjA4LjAwI1RvcnNpb24gc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wMC4wMCNOYWlscyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wMS4wMCNCcmFkcyMzMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wMi4wMCNDYXAgbmFpbHMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDMuMDAjRmluaXNoaW5nIG5haWxzIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjA0LjAwI01hc29ucnkgbmFpbHMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDUuMDAjUm9vZmluZyBuYWlscyMzMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wNi4wMCNXaXJlIG5haWxzIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjA3LjAwI1VwaG9sc3RlcnkgbmFpbHMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDguMDAjRHJpdmUgcGlucyMzMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wMC4wMCNBbmNob3JzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjAxLjAwI0NvbmNyZXRlIGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDIuMDAjV2VkZ2UgYW5jaG9ycyMzMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wMy4wMCNXYWxsIGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDQuMDAjU2NyZXcgYW5jaG9ycyMzMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wNS4wMCNSZXNpbiBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjA2LjAwI1BpcGUgYW5jaG9ycyMzMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wNy4wMCNOYWlsIGV4cGFuc2lvbiBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjA4LjAwI1RpZSBkb3duIGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDAuMDAjUml2ZXRzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjAxLjAwI0JsaW5kIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wMi4wMCNDcm93bmhlYWQgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjAzLjAwI0ZsYXQgaGVhZCByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDQuMDAjRnVsbCByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDUuMDAjUmF0Y2hldCByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDYuMDAjVGlubmVycyByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDcuMDAjQ29tcHJlc3Npb24gcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjA4LjAwI0Nvb3BlcnMgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjA5LjAwI0J1dHRvbiBoZWFkIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wMC4wMCNNb3VudGluZyBoYXJkd2FyZSMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wMS4wMCNNb3VudGluZyBwcm9maWxlcyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wMy4wMCNNb3VudGluZyBiYXJzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjA0LjAwI01vdW50aW5nIHN0cmlwcyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wNS4wMCNNb3VudGluZyBjbGlwcyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wNi4wMCNNb3VudGluZyBoYW5nZXJzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjA3LjAwI01vdW50aW5nIHBsYXRlcyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wOC4wMCNNb3VudGluZyBwYW5lbHMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDkuMDAjTW91bnRpbmcgcmFja3MjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMTAuMDAjTW91bnRpbmcgc3RyYXBzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjExLjAwI1dhbGwgYnVzaGluZ3MjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDAuMDAjTWlzY2VsbGFuZW91cyBmYXN0ZW5lcnMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDEuMDAjR3JvbW1ldHMjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDIuMDAjSGFzcHMjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDMuMDAjSGluZ2VzIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjA0LjAwI0hhcmR3YXJlIHN0YXBsZXMjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDUuMDAjVHVybmJ1Y2tsZXMjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDYuMDAjU3RyYXBwaW5nIG9yIGJhbmRpbmcgYnVja2xlcyMzMS4xNi4yNC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNC4wNy4wMCNMYXRjaCMzMS4xNi4yNC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNC4wOC4wMCNDb3R0ZXIgcGlucyMzMS4xNi4yNC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNS4wMC4wMCNCcmFja2V0cyBhbmQgYnJhY2VzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI1LjAxLjAwI1NoZWxmIGJyYWNrZXRzIzMxLjE2LjI1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI1LjAyLjAwI0FuZ2xlIGJyYWNrZXRzIzMxLjE2LjI1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI1LjAzLjAwI0JyYWNlcyMzMS4xNi4yNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNS4wNC4wMCNFbGVjdHJpY2FsIGZpeHR1cmUgYnJhY2tldHMjMzEuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjUuMDUuMDAjTWFnbmV0aWMgbW91bnRpbmcgYnJhY2tldHMjMzEuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDAuMDAjSG9va3MjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDEuMDAjU3dpdmVsIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjAyLjAwI1NwcmluZyBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wMy4wMCNTIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjA0LjAwI1NhZmV0eSBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wNS4wMCNMaWZ0aW5nIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjA2LjAwI0ogaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDcuMDAjR3V5IHdpcmUgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDguMDAjR3JhYiBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wOS4wMCNTY3JldyBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4xMC4wMCNQZWcgYm9hcmQgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMTEuMDAjU2xpcCBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNy4wMC4wMCNSb2xsaW5nIGhhcmR3YXJlIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI3LjAxLjAwI0Nhc3RlcnMjMzEuMTYuMjcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjcuMDIuMDAjV2hlZWxzIzMxLjE2LjI3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI3LjAzLjAwI1NsaWRlcnMjMzEuMTYuMjcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDAuMDAjTWlzY2VsbGFuZW91cyBoYXJkd2FyZSMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wMS4wMCNIYW5kbGVzIG9yIGtub2JzIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjAyLjAwI0luc2VydHMjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDMuMDAjU2hhY2tsZXMjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDQuMDAjRG9vciBzdG9wcyMzMS4xNi4yOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wNS4wMCNDYWJsZSB0aGltYmxlIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjA2LjAwI1NjcmV3IGNvdmVycyMzMS4xNi4yOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wNy4wMCNMZXZlcnMjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDguMDAjUGFuaWMgYmFycyMzMS4xNi4yOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOS4wMC4wMCNDbGFtcHMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjkuMDEuMDAjRWFyIGNsYW1wcyMzMS4xNi4yOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOS4wMi4wMCNTcHJpbmcgY2xhbXBzIzMxLjE2LjI5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI5LjAzLjAwI1NjcmV3IGNsYW1wcyMzMS4xNi4yOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOS4wNC4wMCNXaXJlIHJvcGUgY2xhbXBzIzMxLjE2LjI5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI5LjA1LjAwI0JlYW0gY2xhbXBzIzMxLjE2LjI5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjMwLjAwLjAwI0NvdXBsaW5ncyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMC4wMS4wMCNFbGFzdG9tZXJpYyBjb3VwbGluZ3MjMzEuMTYuMzAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzAuMDIuMDAjR2VhciBjb3VwbGluZ3MjMzEuMTYuMzAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzAuMDMuMDAjTWV0YWxsaWMgY291cGxpbmdzIzMxLjE2LjMwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMwLjA0LjAwI01pbmlhdHVyZSBjb3VwbGluZ3MjMzEuMTYuMzAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzEuMDAuMDAjQ29ubmVjdG9ycyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMS4wMS4wMCNRdWljayBkaXNjb25uZWN0cyMzMS4xNi4zMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMS4wMi4wMCNGZXJydWxlIzMxLjE2LjMxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMxLjAzLjAwI1RyYWlsZXIgQ29ubmVjdG9yIzMxLjE2LjMxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjAwLjAwI1JldGFpbmluZyBoYXJkd2FyZSMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wMS4wMCNTcHJpbmcgcGlucyMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wMi4wMCNSZXRhaW5pbmcgcmluZ3MjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDMuMDAjRG93ZWwgcGluIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjA0LjAwI0NvdHRlciBwaW4jMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDUuMDAjVGFwZXIgcGlucyMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wNi4wMCNHcm9vdmVkIHBpbnMjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDcuMDAjU2hhZnQgb3Igd29vZHJ1ZmYga2V5cyMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wOC4wMCNLZXlzdG9jayMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wOS4wMCNCZWFyaW5nIGhvbGRlcnMgb3IgcmV0YWluZXJzIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjEwLjAwI1JldGFpbmluZyBjb2xsYXJzIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMzLjAwLjAwI1NwYWNlciMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMy4wMS4wMCNTaGltIzMxLjE2LjMzLjAwLjAwCi11bnNwc2M3IzMxLjE3LjAwLjAwLjAwI0JlYXJpbmdzIGFuZCBidXNoaW5ncyBhbmQgd2hlZWxzIGFuZCBnZWFycyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wMC4wMCNCZWFyaW5ncyMzMS4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wMS4wMCNGbGFuZ2VkIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjAyLjAwI1JhZGlhbCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wMy4wMCNXaGVlbCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wNC4wMCNCYWxsIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjA1LjAwI1JvbGxlciBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wNi4wMCNMaW5lYXIgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDcuMDAjVGhydXN0IGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjA4LjAwI1JvZCBlbmQgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDkuMDAjU2xlZXZlIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjEwLjAwI1NwaGVyaWNhbCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xMS4wMCNQaWxsb3cgYmxvY2sgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTIuMDAjTmVlZGxlIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjEzLjAwI0hhbmdlciBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xNC4wMCNEb29yIGNsb3NlcnMjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTUuMDAjUGxhaW4gYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTYuMDAjVGFwZXJlZCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xNy4wMCNOZWVkbGUgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTguMDAjQmVhcmluZyBDYWdlIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjE5LjAwI0JlYXJpbmcgYmxvY2tzIG9yIGhvdXNpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjIwLjAwI0JlYXJpbmcgam91cm5hbHMjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMjEuMDAjQmVhcmluZyByb2xsZXJzIG9yIGJhbGxzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE2LjAwLjAwI0J1c2hpbmdzIzMxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE3LjE2LjAxLjAwI1RyYW5zZm9ybWVyIGJ1c2hpbmdzIzMxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE2LjAyLjAwI1dhbGwgYnVzaGluZ3MjMzEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTYuMDMuMDAjRHJpbGwgYnVzaGluZ3MjMzEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTYuMDQuMDAjUGlsb3QgYnVzaGluZ3MjMzEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTYuMDUuMDAjU2hhZnQgYnVzaGluZ3MjMzEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDAuMDAjR2VhcnMjMzEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDEuMDAjR2VhciBib3hlcyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wMi4wMCNSYWNrIG9yIHBpbmlvbiBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wMy4wMCNEaWZmZXJlbnRpYWwgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDQuMDAjRnJpY3Rpb24gZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDUuMDAjSGVsaWNhbCBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wNi4wMCNDb25pY2FsIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjA3LjAwI1NwdXIgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDguMDAjQmV2ZWwgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDkuMDAjUmFjayBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4xMC4wMCNQaW5pb24gZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMTEuMDAjUmluZyBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4xMi4wMCNXb3JtIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjEzLjAwI1NpZGUgR2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMTQuMDAjSGVsaWNhbCBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOC4wMC4wMCNJbmR1c3RyaWFsIHdoZWVscyMzMS4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOC4wMS4wMCNDb2cgd2hlZWxzIzMxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE4LjAyLjAwI0ltcGVsbGVyIHdoZWVscyMzMS4xNy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOC4wMy4wMCNGbHl3aGVlbHMjMzEuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTguMDQuMDAjU2hlYXZlcyMzMS4xNy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOC4wNS4wMCNXaGVlbCBicnVzaGVzIzMxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE5LjAwLjAwI1Nwcm9ja2V0cyMzMS4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOS4wMS4wMCNSb2xsZXIgY2hhaW4gc3Byb2NrZXRzIzMxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE5LjAyLjAwI1NwbGl0IHNwcm9ja2V0cyMzMS4xNy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xOC4wMC4wMC4wMCNHYXNrZXRzIGFuZCBzZWFscyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wMC4wMCNHYXNrZXRzIzMxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjAxLjAwI1BsYXN0aWMgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wMi4wMCNSdWJiZXIgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wMy4wMCNNZXRhbCBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjA0LjAwI1RleHRpbGUgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wNS4wMCNDb3JrIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDYuMDAjTyByaW5nIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDcuMDAjRWxlY3Ryb21hZ25ldGljIGludGVyZmVyZW5jZSAoRU1JKSBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjA4LjAwI0JvbHRlZCBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjA5LjAwI0dhc2tldCBraXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjEwLjAwI1NpbGljb25lIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMTEuMDAjTGlxdWlkIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTYuMDAuMDAjU2VhbHMjMzEuMTguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTYuMDEuMDAjUGxhc3RpYyBzZWFscyMzMS4xOC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNi4wMi4wMCNSdWJiZXIgc2VhbHMjMzEuMTguMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTYuMDMuMDAjTWV0YWxsaWMgc2VhbHMjMzEuMTguMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTYuMDQuMDAjU2VhbCBtZWNoYW5pY2FsIzMxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE3LjAwLjAwI1BhY2tpbmdzIGFuZCBnbGFuZHMjMzEuMTguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTcuMDEuMDAjUGFja2luZ3MjMzEuMTguMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTcuMDIuMDAjR2xhbmRzIzMxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE5LjAwLjAwLjAwI0dyaW5kaW5nIGFuZCBwb2xpc2hpbmcgYW5kIHNtb290aGluZyBtYXRlcmlhbHMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDAuMDAjQWJyYXNpdmVzIGFuZCBhYnJhc2l2ZSBtZWRpYSMzMS4xOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wMS4wMCNBYnJhc2l2ZSBwYXBlcnMjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDIuMDAjQnVmZnMjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDMuMDAjQWJyYXNpdmUgd2hlZWxzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjA0LjAwI0FicmFzaXZlIGNsb3RoIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjA1LjAwI0FicmFzaXZlIHBhZHMjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDYuMDAjQWJyYXNpdmUgZGlzY3MjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDcuMDAjQWJyYXNpdmUgYmVsdHMjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDguMDAjQm9ydCMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wOS4wMCNBYnJhc2l2ZSBwb2xpc2hlcnMjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTAuMDAjQWJyYXNpdmUgc3RvbmVzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjExLjAwI1N0ZWVsIHdvb2wjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTIuMDAjU2hvdCBibGFzdCMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xMy4wMCNHbGFzcyBiZWFkIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjE0LjAwI1R1bWJsZSBtZWRpYSMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xNS4wMCNBYnJhc2l2ZSBtZXNoIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjE2LjAwI0FicmFzaXZlIGNhcnRyaWRnZSByb2xscyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xNy4wMCNFbWVyeSBib2FyZHMjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTYuMDAuMDAjQWJyYXNpdmUgd2hlZWxzIzMxLjE5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE5LjE2LjAxLjAwI0FicmFzaXZlIGN1YmljIGJvcm96b24gbml0cmF0ZSB3aGVlbHMjMzEuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTYuMDIuMDAjQWJyYXNpdmUgZGlhbW9uZCB3aGVlbHMjMzEuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTYuMDMuMDAjVHVuZ3N0ZW4gY2FyYmlkZSBhYnJhc2l2ZSB3aGVlbHMjMzEuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMDAuMDAuMDAjQWRoZXNpdmVzIGFuZCBzZWFsYW50cyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wMC4wMCNUYXBlIzMxLjIwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjAxLjAwI0R1Y3QgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wMi4wMCNFbGVjdHJpY2FsIGluc3VsYXRpbmcgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wMy4wMCNNYXNraW5nIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDQuMDAjQ2FycGV0IHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDUuMDAjRG91YmxlIHNpZGVkIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDYuMDAjQmlzbWFsZW1pZGUgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wNy4wMCNGaWJlcmdsYXNzIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDguMDAjR3JhcGhpdGUgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wOS4wMCNOeWxvbiB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjEwLjAwI1Jlc2luIGltcHJlZ25hdGVkIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTEuMDAjV2lyZSBtZXNoIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTIuMDAjVHJhbnNwYXJlbnQgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xMy4wMCNOb24gc2tpZCBzYWZldHkgdGFwZXMjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTQuMDAjUG9seXRldHJhZmx1b3JvZXRoeWxlbmUgKFBURkUpIHRocmVhZCBzZWFsaW5nIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTUuMDAjUGFwZXIgdGFwZXMjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTYuMDAjUmVmbGVjdGl2ZSB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjE3LjAwI1BhY2thZ2luZyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjE4LjAwI0VsZWN0cmljYWxseSBjb25kdWN0aXZlIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTkuMDAjUGlwZSBvciBob3NlIHJlcGFpciB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjIwLjAwI0Fpc2xlIG1hcmtpbmcgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4yMS4wMCNGb2lsIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMjIuMDAjQWRoZXNpdmUgdHJhbnNmZXIgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4yMy4wMCNDbG90aCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjI0LjAwI0NvbG9yIGNvZGluZyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjI1LjAwI1ZpbnlsIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMjYuMDAjTWFnbmV0aWMgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wMC4wMCNPdGhlciBhZGhlc2l2ZXMgYW5kIHNlYWxhbnRzIzMxLjIwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjAxLjAwI0NoZW1pY2FsIGFkaGVzaXZlcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wMi4wMCNQYXN0ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDMuMDAjR3VtcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wNC4wMCNSdWJiZXIgY2VtZW50cyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wNS4wMCNQdXR0aWVzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjA2LjAwI0NhdWxrcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wNy4wMCNFcG94eSBib25kIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjA4LjAwI0ZvYW0gYWRoZXNpdmVzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjA5LjAwI0hvdCBtZWx0IGFkaGVzaXZlcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4xMC4wMCNHbHVlcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4xMS4wMCNGaWxtIGFkaGVzaXZlcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4xMi4wMCNUaHJlYWQgc2VhbGFudHMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMTMuMDAjUmUgdXNhYmxlIGFkaGVzaXZlIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjE0LjAwI1NlYWxpbmcgd2F4ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMDAuMDAuMDAjUGFpbnRzIGFuZCBwcmltZXJzIGFuZCBmaW5pc2hlcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wMC4wMCNQYWludHMgYW5kIHByaW1lcnMjMzEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDEuMDAjRW5hbWVsIHBhaW50cyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wMi4wMCNXYXRlciBiYXNlZCBwYWludHMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDMuMDAjUGlnbWVudCBwYWludHMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDQuMDAjQ29hdGluZyBwYWludHMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDUuMDAjT2lsIGJhc2VkIHBhaW50cyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wNi4wMCNMYXRleCBwYWludHMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDcuMDAjU3ByYXkgcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjA4LjAwI0FjcnlsaWMgcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjA5LjAwI0VuYW1lbCBwcmltZXJzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjEwLjAwI1BvbHl1cmV0aGFuZSBwcmltZXJzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjExLjAwI1VyZXRoYW5lIHByaW1lcnMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMTIuMDAjTGF0ZXggcHJpbWVycyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNi4wMC4wMCNQYWludCBhZGRpdGl2ZXMjMzEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDEuMDAjQ2FsY2ltaW5lcyMzMS4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNi4wMi4wMCNUZXh0dXJpbmcgbWF0ZXJpYWxzIzMxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjAzLjAwI1BhaW50IGRyaWVycyMzMS4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNi4wNC4wMCNQYWludCBleHRlbmRlcnMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDUuMDAjQW50aSBzbGlwIGFnZW50cyMzMS4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNi4wNi4wMCNMZXZlbGluZyBhZ2VudHMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDcuMDAjQW50aSBmb2FtaW5nIGFnZW50cyMzMS4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wMC4wMCNNaXNjZWxsYW5lb3VzIGZpbmlzaGVzIzMxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjAxLjAwI0dsYXplcyMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wMi4wMCNMdXN0ZXJzIzMxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjAzLjAwI0xhY3F1ZXJzIzMxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjA0LjAwI1NlYWxlcnMjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDUuMDAjU2hlbGxhY3MjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDYuMDAjU3RhaW5zIzMxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjA3LjAwI1Zhcm5pc2hlcyMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wOC4wMCNQb3dkZXIgY29hdCMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOC4wMC4wMCNQYWludCBzb2x2ZW50cyBhbmQgdGhpbm5lcnMjMzEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTguMDEuMDAjUGFpbnQgb3IgdmFybmlzaCByZW1vdmVycyMzMS4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOC4wMi4wMCNQYWludCBvciB2YXJuaXNoIHN0cmlwcGVycyMzMS4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOC4wMy4wMCNQYWludCBvciB2YXJuaXNoIHRoaW5uZXJzIzMxLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjAwLjAwI1BhaW50IGFwcGxpY2F0b3JzIGFuZCBwYWludGluZyBhY2Nlc3NvcmllcyMzMS4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4wMS4wMCNEcm9wIGNsb3RocyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4wMi4wMCNFZGdpbmcgdG9vbHMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDMuMDAjTWFza2luZyBlcXVpcG1lbnQjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDQuMDAjUGFpbnQgYnJ1c2hlcyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4wNS4wMCNQYWludCBtaXhlcnMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDYuMDAjUGFpbnQgcm9sbGVycyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4wOC4wMCNQYWludCBzcHJheWVycyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4wOS4wMCNQYWludCB0cmF5cyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4xMC4wMCNQYWludCBtaXR0cyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4xMi4wMCNUZWxlc2NvcGluZyBwb2xlcyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4xMy4wMCNQYWludCBub3p6bGVzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjE0LjAwI0FpciBicnVzaGVzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjE1LjAwI1BhaW50IHN0cmFpbmVycyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMi4wMC4wMC4wMCNEeWVpbmcgYW5kIHRhbm5pbmcgZXh0cmFjdHMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjIuMTUuMDAuMDAjRHllaW5nIHByb2R1Y3RzIzMxLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIyLjE1LjAxLjAwI0lub3JnYW5pYyBkeWVzIzMxLjIyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIyLjE1LjAyLjAwI09yZ2FuaWMgZHllcyBvZiBhbmltYWwgb3JpZ2luIzMxLjIyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIyLjE1LjAzLjAwI09yZ2FuaWMgZHllcyBvZiB2ZWdldGFibGUgb3JpZ2luIzMxLjIyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIyLjE2LjAwLjAwI1Rhbm5pbmcgcHJvZHVjdHMjMzEuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjIuMTYuMDEuMDAjSW5vcmdhbmljIHRhbm5pbmcgZXh0cmFjdHMjMzEuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjIuMTYuMDIuMDAjT3JnYW5pYyB0YW5uaW5nIGV4dHJhY3RzIG9mIGFuaW1hbCBvcmlnaW4jMzEuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjIuMTYuMDMuMDAjT3JnYW5pYyB0YW5uaW5nIGV4dHJhY3RzIG9mIHZlZ2V0YWJsZSBvcmlnaW4jMzEuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMDAuMDAuMDAjTWFjaGluZWQgcmF3IHN0b2NrIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjAwLjAwI01hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wMS4wMCNBbHVtaW51bSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDIuMDAjQmVyeWxsaXVtIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wMy4wMCNCcmFzcyBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDQuMDAjQnJvbnplIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wNS4wMCNDb3BwZXIgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjA2LjAwI0lyb24gbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjA3LjAwI0xlYWQgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjA4LjAwI01hZ25lc2l1bSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDkuMDAjUHJlY2lvdXMgbWV0YWwgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjEwLjAwI1N0YWlubGVzcyBzdGVlbCBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTEuMDAjVGluIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xMi4wMCNUaXRhbml1bSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTMuMDAjWmluYyBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjE1LjAwI0ZlcnJvdXMgYWxsb3kgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjE2LjAwI1N0ZWVsIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xNy4wMCNDb21wb3NpdGUgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjE4LjAwI05pY2tlbCBhbGxveSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTkuMDAjTm9uIG1ldGFsbGljIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wMC4wMCNNYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wMS4wMCNBbHVtaW51bSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wMi4wMCNCZXJ5bGxpdW0gbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDMuMDAjQnJhc3MgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDQuMDAjQnJvbnplIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjA1LjAwI0NvcHBlciBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wNi4wMCNJcm9uIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjA3LjAwI0xlYWQgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDguMDAjTWFnbmVzaXVtIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjA5LjAwI1ByZWNpb3VzIG1ldGFsIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjEwLjAwI1N0YWlubGVzcyBzdGVlbCBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xMS4wMCNUaW4gbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTIuMDAjVGl0YW5pdW0gbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTMuMDAjWmluYyBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xNC4wMCNOb24gZmVycm91cyBhbGxveSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xNS4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjE2LjAwI1N0ZWVsIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjE3LjAwI0NvbXBvc2l0ZSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xOC4wMCNOaWNrZWwgYWxsb3kgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTkuMDAjTm9uIG1ldGFsbGljIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEzLjAwLjAwI1NoaW0gc3RvY2sjMzEuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTMuMDEuMDAjQnJhc3Mgc2hpbSBzdG9jayMzMS4yMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMy4wMi4wMCNTdGVlbCBzaGltIHN0b2NrIzMxLjIzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEzLjAzLjAwI1N0YWlubGVzcyBzdGVlbCBzaGltIHN0b2NrIzMxLjIzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEzLjA0LjAwI0FsdW1pbnVtIHNoaW0gc3RvY2sjMzEuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTMuMDUuMDAjQ29wcGVyIHNoaW0gc3RvY2sjMzEuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMDAuMDAuMDAjSW5kdXN0cmlhbCBvcHRpY3MjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTUuMDAuMDAjTGVuc2VzIGFuZCBwcmlzbXMjMzEuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTUuMDEuMDAjTGVuc2VzIzMxLjI0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE1LjAyLjAwI1ByaXNtcyMzMS4yNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wMC4wMCNPcHRpY2FsIGJsYW5rcyMzMS4yNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wMS4wMCNGaWx0ZXIgYmxhbmtzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjAyLjAwI0dsYXNzIGRpc2tzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjAzLjAwI01vbGRlZCBnbGFzcyMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wNC4wMCNQcmlzbSBibGFua3MjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDUuMDAjU2lsaWNvbiBibGFua3MjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDYuMDAjR2VybWFuaXVtIGJsYW5rcyMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wNy4wMCNSb3VuZCBiYXIgc3RvY2sjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDguMDAjU3F1YXJlIGJhciBzdG9jayMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wOS4wMCNXaXRuZXNzIHNhbXBsZSBibGFua3MjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMTAuMDAjSW5mcmFyZWQgb3B0aWNhbCBtYXRlcmlhbCBibGFua3MjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTcuMDAuMDAjTWlycm9ycyMzMS4yNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNy4wMS4wMCNEaWFtb25kIHR1cm5lZCBtaXJyb3JzIzMxLjI0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE3LjAyLjAwI01ldGFsbGljIG1pcnJvcnMjMzEuMjQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTcuMDMuMDAjUGFyYWJvbGljIG1pcnJvcnMjMzEuMjQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTcuMDQuMDAjVW5jb2F0ZWQgbWlycm9ycyMzMS4yNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wMC4wMCNPcHRpY2FsIGZpbHRlcnMjMzEuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTguMDEuMDAjQnJvYWQgYmFuZCBmaWx0ZXJzIzMxLjI0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjAyLjAwI0dyYWRpZW50IGZpbHRlcnMjMzEuMjQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTguMDMuMDAjSW5mcmFyZWQgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wNC4wMCNMYXNlciBmaWx0ZXJzIzMxLjI0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjA1LjAwI05hcnJvdyBiYW5kIGZpbHRlcnMjMzEuMjQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTguMDYuMDAjUGVsaWNsZSBmaWx0ZXJzIzMxLjI0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjA3LjAwI1Zpc3VhbCBmaWx0ZXJzIzMxLjI0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE5LjAwLjAwI09wdGljYWwgZG9tZXMjMzEuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDEuMDAjU3BlY2lhbHR5IGRvbWVzIzMxLjI0LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE5LjAyLjAwI0RpYW1vbmQgdHVybmVkIGRvbWVzIzMxLjI0LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE5LjAzLjAwI01ldGFsbGljIGRvbWVzIzMxLjI0LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE5LjA0LjAwI01vbGRlZCBnbGFzcyBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wNS4wMCNNb2xkZWQgcG9seWNhcmJvbmF0ZSBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wNi4wMCNSZXBsaWNhdGVkIGRvbWVzIzMxLjI0LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE5LjA3LjAwI1NoYXBlZCBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wOC4wMCNGcmFuZ2libGUgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMjAuMDAuMDAjTGVucyBhbmQgbGFzZXIgd2luZG93cyMzMS4yNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4yMC4wMS4wMCNFeHRlcm5hbCBsZW5zIG9yIGxhc2VyIHdpbmRvd3MjMzEuMjQuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMjAuMDIuMDAjSW5mcmFyZWQgbGVucyBvciBsYXNlciB3aW5kb3dzIzMxLjI0LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIwLjAzLjAwI1Zpc3VhbCBsZW5zIG9yIGxhc2VyIHdpbmRvd3MjMzEuMjQuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMjEuMDAuMDAjT3B0aWNhbCBkZXZpY2UgYWNjZXNzb3JpZXMjMzEuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMjEuMDEuMDAjUHJpc20gaG9sZGVycyMzMS4yNC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yNC4yMS4wMi4wMCNMZW5zIGhvbGRlcnMjMzEuMjQuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMjEuMDMuMDAjT3B0aWNhbCBzbGl0cyMzMS4yNC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yNS4wMC4wMC4wMCNQbmV1bWF0aWMgYW5kIGh5ZHJhdWxpYyBhbmQgZWxlY3RyaWMgY29udHJvbCBzeXN0ZW1zIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjAwLjAwI0FjdHVhdG9ycyMzMS4yNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wMS4wMCNFbGVjdHJpYyBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDIuMDAjRWxlY3Ryb25pYyBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDMuMDAjSHlkcmF1bGljIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wNC4wMCNQbmV1bWF0aWMgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjA1LjAwI1ZhbHZlIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wNi4wMCNHZWFyIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wNy4wMCNSb3RhcnkgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjA4LjAwI1Bob3RvZWxlY3RyaWMgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjA5LjAwI0VsZWN0cm9tYWduZXRpYyBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMTAuMDAjU29sZW5vaWRzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjExLjAwI0xpbmVhciBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMDAuMDAuMDAjSG91c2luZ3MgYW5kIGNhYmluZXRzIGFuZCBjYXNpbmdzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjI2LjE1LjAwLjAwI0hvdXNpbmdzIGFuZCBjYWJpbmV0cyMzMS4yNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNS4wMS4wMCNQbGFzdGljIGhvdXNpbmdzIG9yIGNhYmluZXRzIzMxLjI2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI2LjE1LjAyLjAwI01ldGFsIGhvdXNpbmdzIG9yIGNhYmluZXRzIzMxLjI2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI2LjE1LjAzLjAwI1N0ZWVsIGhvdXNpbmdzIG9yIGNhYmluZXRzIzMxLjI2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI2LjE1LjA0LjAwI0dlYXIgYm94ZXMgb3IgaG91c2luZ3MjMzEuMjYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMTYuMDAuMDAjU2hlbGxzIGFuZCBjYXNpbmdzIzMxLjI2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI2LjE2LjAxLjAwI1BsYXN0aWMgc2hlbGxzIG9yIGNhc2luZ3MjMzEuMjYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMTYuMDIuMDAjTWV0YWwgc2hlbGxzIG9yIGNhc2luZ3MjMzEuMjYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMTYuMDMuMDAjU3RlZWwgc2hlbGxzIG9yIGNhc2luZ3MjMzEuMjYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjcuMDAuMDAuMDAjTWFjaGluZSBtYWRlIHBhcnRzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjI3LjE1LjAwLjAwI0dlbmVyYWwgbWFjaGluZSBtYWRlIHBhcnRzIzMxLjI3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI3LjE1LjAxLjAwI01ldGFsIGdlbmVyYWwgbWFjaGluZSBtYWRlIHBhcnRzIzMxLjI3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI3LjE1LjAyLjAwI05vbiBtZXRhbCBnZW5lcmFsIG1hY2hpbmUgbWFkZSBwYXJ0cyMzMS4yNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNy4xNi4wMC4wMCNTY3JldyBtYWNoaW5lIG1hZGUgcGFydHMjMzEuMjcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjcuMTYuMDEuMDAjTWV0YWwgc2NyZXcgbWFjaGluZSBtYWRlIHBhcnRzIzMxLjI3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI3LjE2LjAyLjAwI05vbiBtZXRhbCBzY3JldyBtYWNoaW5lIG1hZGUgcGFydHMjMzEuMjcuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjguMDAuMDAuMDAjU3RhbXBpbmdzIGFuZCBzaGVldCBjb21wb25lbnRzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjAwLjAwI1N0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wMS4wMCNTdGFtcGVkIG1ldGFsIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDIuMDAjQWx1bWludW0gc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjAzLjAwI0ZlcnJvdXMgYWxsb3kgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjA0LjAwI0lyb24gc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjA1LjAwI05vbiBmZXJyb3VzIGFsbG95IHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wNi4wMCNTdGFpbmxlc3Mgc3RlZWwgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjA3LjAwI0NhcmJvbiBTdGVlbCBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDguMDAjTWFnbmVzaXVtIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wOS4wMCNaaW5jIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xMC4wMCNUaW4gc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjExLjAwI1RpdGFuaXVtIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xMi4wMCNCZXJ5bGxpdW0gc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjEzLjAwI1ByZWNpb3VzIG1ldGFsIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xNC4wMCNDb3BwZXIgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjE1LjAwI0xlYWQgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjE2LjAwI0JyYXNzIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xNy4wMCNCcm9uemUgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjE4LjAwI0NvbXBvc2l0ZSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTkuMDAjTmlja2VsIGFsbG95IHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4yMC4wMCNOb24gbWV0YWxsaWMgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjIxLjAwI0NvYXRlZCBTdGFtcGluZ3MjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTYuMDAuMDAjRm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTYuMDEuMDAjRm9ybWVkIG1ldGFsIGNvbXBvbmVudHMjMzEuMjguMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTcuMDAuMDAjV2VsZGVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTcuMDEuMDAjV2VsZGVkIG1ldGFsIGNvbXBvbmVudHMjMzEuMjguMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDAuMDAjUHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjAxLjAwI0FsdW1pbnVtIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wMi4wMCNGZXJyb3VzIGFsbG95IHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wMy4wMCNJcm9uIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wNC4wMCNOb24gZmVycm91cyBhbGxveSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wNi4wMCNDYXJib24gU3RlZWwgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjA3LjAwI0NvbXBvc2l0ZSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDguMDAjTmlja2VsIGFsbG95IHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wOS4wMCNOb24gbWV0YWxsaWMgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjEwLjAwI1RpdGFuaXVtIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xMS4wMCNCZXJ5bGxpdW0gcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjEyLjAwI1ByZWNpb3VzIG1ldGFsIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xMy4wMCNDb3BwZXIgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjE0LjAwI0xlYWQgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjE1LjAwI0JyYXNzIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xNi4wMCNCcm9uemUgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjE3LjAwI01hZ25lc2l1bSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTguMDAjWmluYyBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTkuMDAjVGluIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wMC4wMCNEcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjAxLjAwI0FsdW1pbnVtIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDIuMDAjQmVyeWxsaXVtIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDMuMDAjQnJhc3MgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wNC4wMCNCcm9uemUgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wNS4wMCNDb21wb3NpdGUgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wNi4wMCNDb3BwZXIgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wNy4wMCNGZXJyb3VzIGFsbG95IGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDguMDAjSXJvbiBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjA5LjAwI0xlYWQgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xMC4wMCNNYWduZXNpdW0gZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xMS4wMCNOaWNrZWwgYWxsb3kgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xMi4wMCNOb24gZmVycm91cyBhbGxveSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjEzLjAwI05vbiBtZXRhbGxpYyBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjE0LjAwI1ByZWNpb3VzIG1ldGFsIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTUuMDAjU3RhaW5sZXNzIHN0ZWVsIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTYuMDAjU3RlZWwgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xNy4wMCNUaW4gZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xOC4wMCNUaXRhbml1bSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjE5LjAwI1ppbmMgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wMC4wMCNIeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wMS4wMCNBbHVtaW51bSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wMi4wMCNCZXJ5bGxpdW0gaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDMuMDAjQnJhc3MgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDQuMDAjQnJvbnplIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjA1LjAwI0NvbXBvc2l0ZSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wNi4wMCNDb3BwZXIgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDcuMDAjRmVycm91cyBhbGxveSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wOC4wMCNJcm9uIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjA5LjAwI0xlYWQgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTAuMDAjTWFnbmVzaXVtIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjExLjAwI05pY2tlbCBhbGxveSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xMi4wMCNOb24gZmVycm91cyBhbGxveSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xMy4wMCNOb24gbWV0YWxsaWMgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTQuMDAjUHJlY2lvdXMgbWV0YWwgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTUuMDAjU3RhaW5sZXNzIHN0ZWVsIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjE2LjAwI1N0ZWVsIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjE3LjAwI1RpbiBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xOC4wMCNUaXRhbml1bSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xOS4wMCNaaW5jIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjAwLjAwI1NwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDEuMDAjQWx1bWludW0gc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wMi4wMCNCZXJ5bGxpdW0gc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wMy4wMCNCcmFzcyBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjA0LjAwI0Jyb256ZSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjA1LjAwI0NvbXBvc2l0ZSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjA2LjAwI0NvcHBlciBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjA3LjAwI0ZlcnJvdXMgYWxsb3kgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wOC4wMCNJcm9uIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDkuMDAjTGVhZCBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjEwLjAwI01hZ25lc2l1bSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjExLjAwI05pY2tlbCBhbGxveSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjEyLjAwI05vbiBmZXJyb3VzIGFsbG95IHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTMuMDAjTm9uIG1ldGFsbGljIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTQuMDAjUHJlY2lvdXMgbWV0YWwgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xNS4wMCNTdGFpbmxlc3Mgc3RlZWwgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xNi4wMCNTdGVlbCBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjE3LjAwI1RpbiBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjE4LjAwI1RpdGFuaXVtIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTkuMDAjWmluYyBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjAwLjAwI1JvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDEuMDAjQWx1bWludW0gcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wMi4wMCNCZXJ5bGxpdW0gcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wMy4wMCNCcmFzcyByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjA0LjAwI0Jyb256ZSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjA1LjAwI0NvbXBvc2l0ZSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjA2LjAwI0NvcHBlciByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjA3LjAwI0ZlcnJvdXMgYWxsb3kgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wOC4wMCNJcm9uIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDkuMDAjTGVhZCByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjEwLjAwI01hZ25lc2l1bSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjExLjAwI05pY2tlbCBhbGxveSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjEyLjAwI05vbiBmZXJyb3VzIGFsbG95IHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTMuMDAjTm9uIG1ldGFsbGljIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTQuMDAjUHJlY2lvdXMgbWV0YWwgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xNS4wMCNTdGFpbmxlc3Mgc3RlZWwgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xNi4wMCNTdGVlbCByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjE3LjAwI1RpbiByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjE4LjAwI1RpdGFuaXVtIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTkuMDAjWmluYyByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjAwLjAwI1N0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDEuMDAjQWx1bWludW0gc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wMi4wMCNCZXJ5bGxpdW0gc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wMy4wMCNCcmFzcyBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjA0LjAwI0Jyb256ZSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjA1LjAwI0NvbXBvc2l0ZSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjA2LjAwI0NvcHBlciBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjA3LjAwI0ZlcnJvdXMgYWxsb3kgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wOC4wMCNJcm9uIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDkuMDAjTGVhZCBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjEwLjAwI01hZ25lc2l1bSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjExLjAwI05pY2tlbCBhbGxveSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjEyLjAwI05vbiBmZXJyb3VzIGFsbG95IHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTMuMDAjTm9uIG1ldGFsbGljIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTQuMDAjUHJlY2lvdXMgbWV0YWwgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xNS4wMCNTdGFpbmxlc3Mgc3RlZWwgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xNi4wMCNTdGVlbCBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjE3LjAwI1RpbiBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjE4LjAwI1RpdGFuaXVtIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTkuMDAjWmluYyBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjAwLjAwI0V4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wMS4wMCNBbHVtaW51bSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDIuMDAjQmVyeWxsaXVtIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wMy4wMCNCcmFzcyBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDQuMDAjQnJvbnplIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wNS4wMCNDb21wb3NpdGUgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjA2LjAwI0NvcHBlciBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDcuMDAjRmVycm91cyBhbGxveSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDguMDAjSXJvbiBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDkuMDAjTGVhZCBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTAuMDAjTWFnbmVzaXVtIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xMS4wMCNOaWNrZWwgYWxsb3kgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjEyLjAwI05vbiBmZXJyb3VzIGFsbG95IGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xMy4wMCNOb24gbWV0YWxsaWMgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjE0LjAwI1ByZWNpb3VzIG1ldGFsIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xNS4wMCNTdGFpbmxlc3Mgc3RlZWwgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjE2LjAwI1N0ZWVsIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xNy4wMCNUaW4gZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjE4LjAwI1RpdGFuaXVtIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xOS4wMCNaaW5jIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4wMC4wMC4wMCNNYWNoaW5lZCBleHRydXNpb25zIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjAwLjAwI01hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjAxLjAwI0FsdW1pbnVtIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjAyLjAwI0JlcnlsbGl1bSBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wMy4wMCNCcmFzcyBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wNC4wMCNCcm9uemUgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDUuMDAjQ29wcGVyIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjA2LjAwI0ZlcnJvdXMgYWxsb3kgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDcuMDAjTGVhZCBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wOC4wMCNNYWduZXNpdW0gbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDkuMDAjTm9uIGZlcnJvdXMgYWxsb3kgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTAuMDAjUGxhc3RpYyBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xMS4wMCNQcmVjaW91cyBtZXRhbCBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xMi4wMCNSdWJiZXIgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTMuMDAjU3RhaW5sZXNzIHN0ZWVsIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjE0LjAwI1N0ZWVsIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjE1LjAwI1RpbiBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xNi4wMCNUaXRhbml1bSBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xNy4wMCNaaW5jIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjE4LjAwI0NvbXBvc2l0ZSBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xOS4wMCNOaWNrZWwgYWxsb3kgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMjAuMDAjTm9uIG1ldGFsbGljIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjAwLjAwI01hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjAxLjAwI0FsdW1pbnVtIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjAyLjAwI0JlcnlsbGl1bSBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wMy4wMCNCcmFzcyBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wNC4wMCNCcm9uemUgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDUuMDAjQ29wcGVyIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjA2LjAwI0ZlcnJvdXMgYWxsb3kgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDcuMDAjTGVhZCBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wOC4wMCNNYWduZXNpdW0gbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDkuMDAjTm9uIGZlcnJvdXMgYWxsb3kgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTAuMDAjUGxhc3RpYyBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xMS4wMCNQcmVjaW91cyBtZXRhbCBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xMi4wMCNSdWJiZXIgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTMuMDAjU3RhaW5sZXNzIHN0ZWVsIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjE0LjAwI1N0ZWVsIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjE1LjAwI1RpbiBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xNi4wMCNUaXRhbml1bSBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xNy4wMCNaaW5jIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjE4LjAwI0NvbXBvc2l0ZSBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xOS4wMCNOaWNrZWwgYWxsb3kgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMjAuMDAjTm9uIG1ldGFsbGljIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjAwLjAwI01hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wMS4wMCNBbHVtaW51bSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDIuMDAjQmVyeWxsaXVtIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wMy4wMCNCcmFzcyBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDQuMDAjQnJvbnplIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wNS4wMCNDb3BwZXIgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjA2LjAwI0ZlcnJvdXMgYWxsb3kgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjA3LjAwI0xlYWQgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjA4LjAwI01hZ25lc2l1bSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDkuMDAjTm9uIGZlcnJvdXMgYWxsb3kgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjEwLjAwI1BsYXN0aWMgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjExLjAwI1ByZWNpb3VzIG1ldGFsIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xMi4wMCNSdWJiZXIgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjEzLjAwI1N0YWlubGVzcyBzdGVlbCBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTQuMDAjU3RlZWwgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjE1LjAwI1RpbiBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTYuMDAjVGl0YW5pdW0gbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjE3LjAwI1ppbmMgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjE4LjAwI0NvbXBvc2l0ZSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTkuMDAjTmlja2VsIGFsbG95IG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4yMC4wMCNOb24gbWV0YWxsaWMgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjAwLjAwI01hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjAxLjAwI0FsdW1pbnVtIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjAyLjAwI0JlcnlsbGl1bSBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wMy4wMCNCcmFzcyBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wNC4wMCNCcm9uemUgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDUuMDAjQ29wcGVyIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjA2LjAwI0ZlcnJvdXMgYWxsb3kgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDcuMDAjTGVhZCBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wOC4wMCNNYWduZXNpdW0gbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDkuMDAjTm9uIGZlcnJvdXMgYWxsb3kgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTAuMDAjUGxhc3RpYyBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xMS4wMCNQcmVjaW91cyBtZXRhbCBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xMi4wMCNSdWJiZXIgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTMuMDAjU3RhaW5sZXNzIHN0ZWVsIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjE0LjAwI1N0ZWVsIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjE1LjAwI1RpbiBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xNi4wMCNUaXRhbml1bSBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xNy4wMCNaaW5jIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjE4LjAwI0NvbXBvc2l0ZSBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xOS4wMCNOaWNrZWwgYWxsb3kgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMjAuMDAjTm9uICAgbWV0YWxsaWMgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTUuMDAuMDAjTWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTYuMDAuMDAjTWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI5LjE3LjAwLjAwI01hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI5LjE4LjAwLjAwI01hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjAwLjAwLjAwI01hY2hpbmVkIGZvcmdpbmdzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEwLjAwLjAwI01hY2hpbmVkIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjAwLjAwI01hY2hpbmVkIG9wZW4gZGllIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjAyLjAwI0ZlcnJvdXMgYWxsb3kgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMDMuMDAjU3RlZWwgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjA1LjAwI0lyb24gb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMDYuMDAjQWx1bWludW0gb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMDcuMDAjTWFnbmVzaXVtIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjA4LjAwI1RpdGFuaXVtIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjA5LjAwI0JlcnlsbGl1bSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xMC4wMCNDb3BwZXIgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTEuMDAjQnJhc3Mgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTIuMDAjQnJvbnplIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjEzLjAwI1ppbmMgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTQuMDAjVGluIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjE1LjAwI0xlYWQgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTYuMDAjUHJlY2lvdXMgbWV0YWwgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTcuMDAjQ29tcG9zaXRlIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjE4LjAwI05pY2tlbCBhbGxveSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xOS4wMCNOb24gbWV0YWxsaWMgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDAuMDAjTWFjaGluZWQgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wMS4wMCNOb24gZmVycm91cyBhbGxveSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjAyLjAwI0ZlcnJvdXMgYWxsb3kgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wMy4wMCNTdGVlbCBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjA1LjAwI0lyb24gY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wNi4wMCNBbHVtaW51bSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjA3LjAwI01hZ25lc2l1bSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjA4LjAwI1RpdGFuaXVtIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDkuMDAjQmVyeWxsaXVtIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTAuMDAjQ29wcGVyIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTEuMDAjQnJhc3MgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xMi4wMCNCcm9uemUgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xMy4wMCNaaW5jIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTQuMDAjVGluIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTUuMDAjTGVhZCBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE2LjAwI1ByZWNpb3VzIG1ldGFsIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTcuMDAjQ29tcG9zaXRlIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTguMDAjTmlja2VsIGFsbG95IGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTkuMDAjTm9uIG1ldGFsbGljIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDAuMDAjTWFjaGluZWQgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDIuMDAjRmVycm91cyBhbGxveSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4wMy4wMCNTdGVlbCBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDUuMDAjSXJvbiBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4wNi4wMCNBbHVtaW51bSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4wNy4wMCNNYWduZXNpdW0gaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDguMDAjVGl0YW5pdW0gaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDkuMDAjQmVyeWxsaXVtIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjEwLjAwI0NvcHBlciBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xMS4wMCNCcmFzcyBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xMi4wMCNCcm9uemUgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTMuMDAjWmluYyBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xNC4wMCNUaW4gaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTUuMDAjTGVhZCBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xNi4wMCNQcmVjaW91cyBtZXRhbCBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xNy4wMCNDb21wb3NpdGUgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTguMDAjTmlja2VsIGFsbG95IGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjE5LjAwI05vbiBtZXRhbGxpYyBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wMC4wMCNNYWNoaW5lZCBkcm9wIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDIuMDAjWmluYyBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjAzLjAwI0ZlcnJvdXMgYWxsb3kgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wNC4wMCNUaW4gZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wNS4wMCNMZWFkIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDYuMDAjU3RlZWwgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wNy4wMCNQcmVjaW91cyBtZXRhbCBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjA4LjAwI1N0YWlubGVzcyBzdGVlbCBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjA5LjAwI0lyb24gZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xMC4wMCNBbHVtaW51bSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjExLjAwI01hZ25lc2l1bSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjEyLjAwI1RpdGFuaXVtIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTMuMDAjQmVyeWxsaXVtIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTQuMDAjQ29wcGVyIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTUuMDAjQnJhc3MgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xNi4wMCNCcm9uemUgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xNy4wMCNDb21wb3NpdGUgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xOC4wMCNOaWNrZWwgYWxsb3kgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xOS4wMCNOb24gbWV0YWxsaWMgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wMC4wMCNNYWNoaW5lZCByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wMS4wMCNBbHVtaW51bSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wMi4wMCNCZXJ5bGxpdW0gcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDMuMDAjQnJhc3Mgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDQuMDAjQnJvbnplIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjA1LjAwI0NvcHBlciByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wNi4wMCNJcm9uIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjA3LjAwI0xlYWQgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDguMDAjTWFnbmVzaXVtIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjA5LjAwI1ByZWNpb3VzIG1ldGFsIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjEwLjAwI1N0YWlubGVzcyBzdGVlbCByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xMS4wMCNUaW4gcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTIuMDAjVGl0YW5pdW0gcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTMuMDAjWmluYyByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xNC4wMCNOb24gZmVycm91cyBhbGxveSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xNS4wMCNGZXJyb3VzIGFsbG95IHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjE2LjAwI1N0ZWVsIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjE3LjAwI0NvbXBvc2l0ZSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xOC4wMCNOaWNrZWwgYWxsb3kgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTkuMDAjTm9uIG1ldGFsbGljIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE2LjAwLjAwI01hY2hpbmVkIG9wZW4gZGllIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjE3LjAwLjAwI01hY2hpbmVkIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTguMDAuMDAjTWFjaGluZWQgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTkuMDAuMDAjTWFjaGluZWQgZHJvcCBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4wMC4wMC4wMCNGYWJyaWNhdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wMC4wMCNTb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDEuMDAjQWx1bWludW0gc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjAyLjAwI0NhcmJvbiBzdGVlbCBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDMuMDAjSGFzdGFsbG95IFggc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjA0LjAwI0luY29uZWwgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDYuMDAjTm9uIG1ldGFsbGljIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4xMC4wMCNUaXRhbml1bSBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMTEuMDAjV2FzcGFsbG95IHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4xMi4wMCNDb3BwZXIgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjEzLjAwI0JyYXNzIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wMC4wMCNSaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wMS4wMCNBbHVtaW51bSByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wMi4wMCNDYXJib24gc3RlZWwgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDMuMDAjSGFzdGFsbG95IFggcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDQuMDAjSW5jb25lbCByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDYuMDAjTm9uIG1ldGFsbGljIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjA3LjAwI090aGVyIGZlcnJvdXMgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjEwLjAwI1RpdGFuaXVtIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjExLjAwI1dhc3BhbGxveSByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4xMi4wMCNDb3BwZXIgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMTMuMDAjQnJhc3Mgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDAuMDAjQm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wMS4wMCNBbHVtaW51bSBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjAyLjAwI0NhcmJvbiBzdGVlbCBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjAzLjAwI0hhc3RhbGxveSBYIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDQuMDAjSW5jb25lbCBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjA2LjAwI05vbiBtZXRhbGxpYyBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjA3LjAwI090aGVyIGZlcnJvdXMgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wOC4wMCNPdGhlciBub24gZmVycm91cyBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjEwLjAwI1RpdGFuaXVtIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMTEuMDAjV2FzcGFsbG95IGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMTIuMDAjQ29wcGVyIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMTMuMDAjQnJhc3MgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wMC4wMCNVbHRyYSB2aW9sZXQgd2VsZGVkIChVVikgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjAxLjAwI0FsdW1pbnVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjAyLjAwI0NhcmJvbiBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wMy4wMCNIYXN0YWxsb3kgWCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wNC4wMCNJbmNvbmVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjA1LjAwI0xvdyBhbGxveSBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wNi4wMCNOb24gbWV0YWxsaWMgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDcuMDAjT3RoZXIgZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wOC4wMCNPdGhlciBub24gZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMTAuMDAjVGl0YW5pdW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMTEuMDAjV2FzcGFsbG95IHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjEyLjAwI0NvcHBlciB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4xMy4wMCNCcmFzcyB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wMC4wMCNXZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wMS4wMCNBbHVtaW51bSB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wMi4wMCNDYXJib24gc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDMuMDAjSGFzdGFsbG95IFggd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDQuMDAjSW5jb25lbCB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDYuMDAjTm9uIG1ldGFsbGljIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjA3LjAwI090aGVyIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjEwLjAwI1RpdGFuaXVtIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjExLjAwI1dhc3BhbGxveSB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4xMi4wMCNDb3BwZXIgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMTMuMDAjQnJhc3Mgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDAuMDAjU29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wMS4wMCNBbHVtaW51bSBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjAyLjAwI0NhcmJvbiBzdGVlbCBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjAzLjAwI0hhc3RhbGxveSBYIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDQuMDAjSW5jb25lbCBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjA2LjAwI05vbiBtZXRhbGxpYyBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjA3LjAwI090aGVyIGZlcnJvdXMgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjEwLjAwI1RpdGFuaXVtIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMTEuMDAjV2FzcGFsbG95IHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMTIuMDAjQ29wcGVyIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMTMuMDAjQnJhc3Mgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wMC4wMCNCb25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjAxLjAwI0FsdW1pbnVtIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDMuMDAjSGFzdGFsbG95IFggYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wNC4wMCNJbmNvbmVsIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDYuMDAjTm9uIG1ldGFsbGljIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDcuMDAjT3RoZXIgZmVycm91cyBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMTAuMDAjVGl0YW5pdW0gYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4xMS4wMCNXYXNwYWxsb3kgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4xMi4wMCNDb3BwZXIgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4xMy4wMCNCcmFzcyBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjAwLjAwLjAwI0ZhYnJpY2F0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDAuMDAjQm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjAxLjAwI0FsdW1pbnVtIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wMi4wMCNDYXJib24gc3RlZWwgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjAzLjAwI0hhc3RhbGxveSBYIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wNC4wMCNJbmNvbmVsIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjA2LjAwI05vbiBtZXRhbGxpYyBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDcuMDAjT3RoZXIgZmVycm91cyBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMTAuMDAjVGl0YW5pdW0gYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjExLjAwI1dhc3BhbGxveSBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMTIuMDAjQ29wcGVyIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4xMy4wMCNCcmFzcyBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDAuMDAjU29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDEuMDAjQWx1bWludW0gc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjAzLjAwI0hhc3RhbGxveSBYIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjA0LjAwI0luY29uZWwgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjA2LjAwI05vbiBtZXRhbGxpYyBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4xMC4wMCNUaXRhbml1bSBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4xMS4wMCNXYXNwYWxsb3kgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMTIuMDAjQ29wcGVyIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjEzLjAwI0JyYXNzIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjAwLjAwI1JpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDEuMDAjQWx1bWludW0gcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wMi4wMCNDYXJib24gc3RlZWwgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wMy4wMCNIYXN0YWxsb3kgWCByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjA0LjAwI0luY29uZWwgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wNi4wMCNOb24gbWV0YWxsaWMgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wNy4wMCNPdGhlciBmZXJyb3VzIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4xMC4wMCNUaXRhbml1bSByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjExLjAwI1dhc3BhbGxveSByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjEyLjAwI0NvcHBlciByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjEzLjAwI0JyYXNzIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDAuMDAjV2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wMS4wMCNBbHVtaW51bSB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjAyLjAwI0NhcmJvbiBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjAzLjAwI0hhc3RhbGxveSBYIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDQuMDAjSW5jb25lbCB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjA1LjAwI0xvdyBhbGxveSBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjA2LjAwI05vbiBtZXRhbGxpYyB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjA3LjAwI090aGVyIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wOC4wMCNPdGhlciBub24gZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjEwLjAwI1RpdGFuaXVtIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMTEuMDAjV2FzcGFsbG95IHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMTIuMDAjQ29wcGVyIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMTMuMDAjQnJhc3Mgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wMC4wMCNVbHRyYSB2aW9sZXQgd2VsZGVkIChVVikgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDEuMDAjQWx1bWludW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wMi4wMCNDYXJib24gc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wMy4wMCNIYXN0YWxsb3kgWCB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjA0LjAwI0luY29uZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wNi4wMCNOb24gbWV0YWxsaWMgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wNy4wMCNPdGhlciBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4xMC4wMCNUaXRhbml1bSB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjExLjAwI1dhc3BhbGxveSB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjEyLjAwI0NvcHBlciB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjEzLjAwI0JyYXNzIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDAuMDAjU29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjAxLjAwI0FsdW1pbnVtIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wMi4wMCNDYXJib24gc3RlZWwgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjAzLjAwI0hhc3RhbGxveSBYIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wNC4wMCNJbmNvbmVsIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjA2LjAwI05vbiBtZXRhbGxpYyBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDcuMDAjT3RoZXIgZmVycm91cyBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMTAuMDAjVGl0YW5pdW0gc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjExLjAwI1dhc3BhbGxveSBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMTIuMDAjQ29wcGVyIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4xMy4wMCNCcmFzcyBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDAuMDAjQm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjAxLjAwI0FsdW1pbnVtIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wMi4wMCNDYXJib24gc3RlZWwgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjAzLjAwI0hhc3RhbGxveSBYIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wNC4wMCNJbmNvbmVsIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjA2LjAwI05vbiBtZXRhbGxpYyBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDcuMDAjT3RoZXIgZmVycm91cyBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMTAuMDAjVGl0YW5pdW0gYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjExLjAwI1dhc3BhbGxveSBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMTIuMDAjQ29wcGVyIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4xMy4wMCNCcmFzcyBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMDAuMDAuMDAjRmFicmljYXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDAuMDAjQm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wMS4wMCNBbHVtaW51bSBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjAyLjAwI0NhcmJvbiBzdGVlbCBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjAzLjAwI0hhc3RhbGxveSBYIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDQuMDAjSW5jb25lbCBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjA2LjAwI05vbiBtZXRhbGxpYyBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjA3LjAwI090aGVyIGZlcnJvdXMgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wOC4wMCNPdGhlciBub24gZmVycm91cyBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjEwLjAwI1RpdGFuaXVtIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMTEuMDAjV2FzcGFsbG95IGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMTIuMDAjQ29wcGVyIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMTMuMDAjQnJhc3MgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wMC4wMCNCb2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjAxLjAwI0FsdW1pbnVtIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDMuMDAjSGFzdGFsbG95IFggYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wNC4wMCNJbmNvbmVsIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDYuMDAjTm9uIG1ldGFsbGljIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDcuMDAjT3RoZXIgZmVycm91cyBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMTAuMDAjVGl0YW5pdW0gYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4xMS4wMCNXYXNwYWxsb3kgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4xMi4wMCNDb3BwZXIgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4xMy4wMCNCcmFzcyBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjAwLjAwI1NvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDEuMDAjQWx1bWludW0gc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wMi4wMCNDYXJib24gc3RlZWwgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wMy4wMCNIYXN0YWxsb3kgWCBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjA0LjAwI0luY29uZWwgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wNi4wMCNOb24gbWV0YWxsaWMgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4xMC4wMCNUaXRhbml1bSBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjExLjAwI1dhc3BhbGxveSBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjEyLjAwI0NvcHBlciBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjEzLjAwI0JyYXNzIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDAuMDAjVWx0cmEgdmlvbGV0IHdlbGRlZCAoVVYpIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wMS4wMCNBbHVtaW51bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wMi4wMCNDYXJib24gc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDMuMDAjSGFzdGFsbG95IFggdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDQuMDAjSW5jb25lbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDYuMDAjTm9uIG1ldGFsbGljIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjA3LjAwI090aGVyIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjEwLjAwI1RpdGFuaXVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjExLjAwI1dhc3BhbGxveSB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4xMi4wMCNDb3BwZXIgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMTMuMDAjQnJhc3MgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDAuMDAjU29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjAxLjAwI0FsdW1pbnVtIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wMi4wMCNDYXJib24gc3RlZWwgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjAzLjAwI0hhc3RhbGxveSBYIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wNC4wMCNJbmNvbmVsIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjA2LjAwI05vbiBtZXRhbGxpYyBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDcuMDAjT3RoZXIgZmVycm91cyBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMTAuMDAjVGl0YW5pdW0gc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjExLjAwI1dhc3BhbGxveSBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMTIuMDAjQ29wcGVyIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4xMy4wMCNCcmFzcyBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDAuMDAjV2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDEuMDAjQWx1bWludW0gd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDIuMDAjQ2FyYm9uIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjAzLjAwI0hhc3RhbGxveSBYIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjA0LjAwI0luY29uZWwgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjA2LjAwI05vbiBtZXRhbGxpYyB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wNy4wMCNPdGhlciBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4xMC4wMCNUaXRhbml1bSB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4xMS4wMCNXYXNwYWxsb3kgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMTIuMDAjQ29wcGVyIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjEzLjAwI0JyYXNzIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjAwLjAwI1JpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjAxLjAwI0FsdW1pbnVtIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjAyLjAwI0NhcmJvbiBzdGVlbCByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wMy4wMCNIYXN0YWxsb3kgWCByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wNC4wMCNJbmNvbmVsIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjA1LjAwI0xvdyBhbGxveSBzdGVlbCByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wNi4wMCNOb24gbWV0YWxsaWMgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDcuMDAjT3RoZXIgZmVycm91cyByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wOC4wMCNPdGhlciBub24gZmVycm91cyByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMTAuMDAjVGl0YW5pdW0gcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMTEuMDAjV2FzcGFsbG95IHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjEyLjAwI0NvcHBlciByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4xMy4wMCNCcmFzcyByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4wMC4wMC4wMCNGYWJyaWNhdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDAuMDAjV2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjAxLjAwI0FsdW1pbnVtIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wMi4wMCNDYXJib24gc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjAzLjAwI0hhc3RhbGxveSBYIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wNC4wMCNJbmNvbmVsIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjA2LjAwI05vbiBtZXRhbGxpYyB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDcuMDAjT3RoZXIgZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjA5LjAwI1N0YWlubGVzcyBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMTAuMDAjVGl0YW5pdW0gd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjExLjAwI1dhc3BhbGxveSB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMTIuMDAjQ29wcGVyIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4xMy4wMCNCcmFzcyB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDAuMDAjUml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjAxLjAwI0FsdW1pbnVtIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wMi4wMCNDYXJib24gc3RlZWwgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjAzLjAwI0hhc3RhbGxveSBYIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wNC4wMCNJbmNvbmVsIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjA2LjAwI05vbiBtZXRhbGxpYyByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDcuMDAjT3RoZXIgZmVycm91cyByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjA5LjAwI1N0YWlubGVzcyBzdGVlbCByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMTAuMDAjVGl0YW5pdW0gcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjExLjAwI1dhc3BhbGxveSByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMTIuMDAjQ29wcGVyIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4xMy4wMCNCcmFzcyByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDAuMDAjVWx0cmEgdmlvbGV0IHdlbGRlZCAoVVYpIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDEuMDAjQWx1bWludW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjAyLjAwI0NhcmJvbiBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDMuMDAjSGFzdGFsbG95IFggdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjA0LjAwI0luY29uZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjA1LjAwI0xvdyBhbGxveSBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDYuMDAjTm9uIG1ldGFsbGljIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wNy4wMCNPdGhlciBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wOC4wMCNPdGhlciBub24gZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4xMC4wMCNUaXRhbml1bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMTEuMDAjV2FzcGFsbG95IHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4xMi4wMCNDb3BwZXIgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjEzLjAwI0JyYXNzIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wMC4wMCNTb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wMS4wMCNBbHVtaW51bSBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wMi4wMCNDYXJib24gc3RlZWwgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDMuMDAjSGFzdGFsbG95IFggc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDQuMDAjSW5jb25lbCBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDYuMDAjTm9uIG1ldGFsbGljIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjA3LjAwI090aGVyIGZlcnJvdXMgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjEwLjAwI1RpdGFuaXVtIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjExLjAwI1dhc3BhbGxveSBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4xMi4wMCNDb3BwZXIgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMTMuMDAjQnJhc3Mgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDAuMDAjU29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wMS4wMCNBbHVtaW51bSBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjAyLjAwI0NhcmJvbiBzdGVlbCBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjAzLjAwI0hhc3RhbGxveSBYIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDQuMDAjSW5jb25lbCBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjA2LjAwI05vbiBtZXRhbGxpYyBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjA3LjAwI090aGVyIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjEwLjAwI1RpdGFuaXVtIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMTEuMDAjV2FzcGFsbG95IHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMTIuMDAjQ29wcGVyIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMTMuMDAjQnJhc3Mgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wMC4wMCNCb25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wMS4wMCNBbHVtaW51bSBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wMi4wMCNDYXJib24gc3RlZWwgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDMuMDAjSGFzdGFsbG95IFggYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDQuMDAjSW5jb25lbCBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDYuMDAjTm9uIG1ldGFsbGljIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjA3LjAwI090aGVyIGZlcnJvdXMgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjEwLjAwI1RpdGFuaXVtIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjExLjAwI1dhc3BhbGxveSBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4xMi4wMCNDb3BwZXIgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMTMuMDAjQnJhc3MgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDAuMDAjQm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDEuMDAjQWx1bWludW0gYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjAzLjAwI0hhc3RhbGxveSBYIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjA0LjAwI0luY29uZWwgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjA2LjAwI05vbiBtZXRhbGxpYyBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4xMC4wMCNUaXRhbml1bSBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4xMS4wMCNXYXNwYWxsb3kgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMTIuMDAjQ29wcGVyIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjEzLjAwI0JyYXNzIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjAwLjAwLjAwI0ZhYnJpY2F0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjAwLjAwI1VsdHJhIHZpb2xldCB3ZWxkZWQgKFVWKSB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDEuMDAjQWx1bWludW0gdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDIuMDAjQ2FyYm9uIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjAzLjAwI0hhc3RhbGxveSBYIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjA0LjAwI0luY29uZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjA2LjAwI05vbiBtZXRhbGxpYyB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wNy4wMCNPdGhlciBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjA5LjAwI1N0YWlubGVzcyBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4xMC4wMCNUaXRhbml1bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4xMS4wMCNXYXNwYWxsb3kgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMTIuMDAjQ29wcGVyIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjEzLjAwI0JyYXNzIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjAwLjAwI1dlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjAxLjAwI0FsdW1pbnVtIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjAyLjAwI0NhcmJvbiBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wMy4wMCNIYXN0YWxsb3kgWCB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wNC4wMCNJbmNvbmVsIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjA1LjAwI0xvdyBhbGxveSBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wNi4wMCNOb24gbWV0YWxsaWMgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDcuMDAjT3RoZXIgZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wOC4wMCNPdGhlciBub24gZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMTAuMDAjVGl0YW5pdW0gd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMTEuMDAjV2FzcGFsbG95IHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjEyLjAwI0NvcHBlciB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4xMy4wMCNCcmFzcyB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wMC4wMCNSaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wMS4wMCNBbHVtaW51bSByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wMi4wMCNDYXJib24gc3RlZWwgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDMuMDAjSGFzdGFsbG95IFggcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDQuMDAjSW5jb25lbCByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDYuMDAjTm9uIG1ldGFsbGljIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjA3LjAwI090aGVyIGZlcnJvdXMgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjEwLjAwI1RpdGFuaXVtIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjExLjAwI1dhc3BhbGxveSByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4xMi4wMCNDb3BwZXIgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMTMuMDAjQnJhc3Mgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDAuMDAjQm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wMS4wMCNBbHVtaW51bSBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjAyLjAwI0NhcmJvbiBzdGVlbCBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjAzLjAwI0hhc3RhbGxveSBYIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDQuMDAjSW5jb25lbCBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjA2LjAwI05vbiBtZXRhbGxpYyBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjA3LjAwI090aGVyIGZlcnJvdXMgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wOC4wMCNPdGhlciBub24gZmVycm91cyBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjEwLjAwI1RpdGFuaXVtIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMTEuMDAjV2FzcGFsbG95IGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMTIuMDAjQ29wcGVyIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMTMuMDAjQnJhc3MgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wMC4wMCNCb2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjAxLjAwI0FsdW1pbnVtIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDMuMDAjSGFzdGFsbG95IFggYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wNC4wMCNJbmNvbmVsIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDYuMDAjTm9uIG1ldGFsbGljIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDcuMDAjT3RoZXIgZmVycm91cyBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMTAuMDAjVGl0YW5pdW0gYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4xMS4wMCNXYXNwYWxsb3kgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4xMi4wMCNDb3BwZXIgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4xMy4wMCNCcmFzcyBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjAwLjAwI1NvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wMS4wMCNBbHVtaW51bSBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wMy4wMCNIYXN0YWxsb3kgWCBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDQuMDAjSW5jb25lbCBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wNi4wMCNOb24gbWV0YWxsaWMgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjA3LjAwI090aGVyIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjEwLjAwI1RpdGFuaXVtIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4xMS4wMCNXYXNwYWxsb3kgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjEyLjAwI0NvcHBlciBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMTMuMDAjQnJhc3Mgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjAwLjAwI1NvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDEuMDAjQWx1bWludW0gc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wMi4wMCNDYXJib24gc3RlZWwgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wMy4wMCNIYXN0YWxsb3kgWCBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjA0LjAwI0luY29uZWwgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wNi4wMCNOb24gbWV0YWxsaWMgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4xMC4wMCNUaXRhbml1bSBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjExLjAwI1dhc3BhbGxveSBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjEyLjAwI0NvcHBlciBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjEzLjAwI0JyYXNzIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMDAuMDAuMDAjRmFicmljYXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjAwLjAwI0JvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjAxLjAwI0FsdW1pbnVtIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjAyLjAwI0NhcmJvbiBzdGVlbCBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wMy4wMCNIYXN0YWxsb3kgWCBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wNC4wMCNJbmNvbmVsIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wNi4wMCNOb24gbWV0YWxsaWMgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDcuMDAjT3RoZXIgZmVycm91cyBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wOC4wMCNPdGhlciBub24gZmVycm91cyBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMTAuMDAjVGl0YW5pdW0gYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMTEuMDAjV2FzcGFsbG95IGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjEyLjAwI0NvcHBlciBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4xMy4wMCNCcmFzcyBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wMC4wMCNCb2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wMS4wMCNBbHVtaW51bSBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wMi4wMCNDYXJib24gc3RlZWwgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDMuMDAjSGFzdGFsbG95IFggYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDQuMDAjSW5jb25lbCBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDYuMDAjTm9uIG1ldGFsbGljIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjA3LjAwI090aGVyIGZlcnJvdXMgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjEwLjAwI1RpdGFuaXVtIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjExLjAwI1dhc3BhbGxveSBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4xMi4wMCNDb3BwZXIgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMTMuMDAjQnJhc3MgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDAuMDAjU29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wMS4wMCNBbHVtaW51bSBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjAyLjAwI0NhcmJvbiBzdGVlbCBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjAzLjAwI0hhc3RhbGxveSBYIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDQuMDAjSW5jb25lbCBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjA2LjAwI05vbiBtZXRhbGxpYyBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjA3LjAwI090aGVyIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjEwLjAwI1RpdGFuaXVtIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMTEuMDAjV2FzcGFsbG95IHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMTIuMDAjQ29wcGVyIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMTMuMDAjQnJhc3Mgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wMC4wMCNXZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDEuMDAjQWx1bWludW0gd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjAyLjAwI0NhcmJvbiBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDMuMDAjSGFzdGFsbG95IFggd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjA0LjAwI0luY29uZWwgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjA1LjAwI0xvdyBhbGxveSBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDYuMDAjTm9uIG1ldGFsbGljIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wNy4wMCNPdGhlciBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wOC4wMCNPdGhlciBub24gZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4xMC4wMCNUaXRhbml1bSB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMTEuMDAjV2FzcGFsbG95IHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4xMi4wMCNDb3BwZXIgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjEzLjAwI0JyYXNzIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wMC4wMCNVbHRyYSB2aW9sZXQgd2VsZGVkIChVVikgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wMS4wMCNBbHVtaW51bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDIuMDAjQ2FyYm9uIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wMy4wMCNIYXN0YWxsb3kgWCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDQuMDAjSW5jb25lbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wNi4wMCNOb24gbWV0YWxsaWMgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjA3LjAwI090aGVyIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjEwLjAwI1RpdGFuaXVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4xMS4wMCNXYXNwYWxsb3kgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjEyLjAwI0NvcHBlciB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMTMuMDAjQnJhc3MgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjAwLjAwI1NvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjAxLjAwI0FsdW1pbnVtIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjAyLjAwI0NhcmJvbiBzdGVlbCBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wMy4wMCNIYXN0YWxsb3kgWCBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wNC4wMCNJbmNvbmVsIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wNi4wMCNOb24gbWV0YWxsaWMgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDcuMDAjT3RoZXIgZmVycm91cyBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMTAuMDAjVGl0YW5pdW0gc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMTEuMDAjV2FzcGFsbG95IHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjEyLjAwI0NvcHBlciBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4xMy4wMCNCcmFzcyBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wMC4wMCNSaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDEuMDAjQWx1bWludW0gcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjAyLjAwI0NhcmJvbiBzdGVlbCByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDMuMDAjSGFzdGFsbG95IFggcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjA0LjAwI0luY29uZWwgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjA1LjAwI0xvdyBhbGxveSBzdGVlbCByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDYuMDAjTm9uIG1ldGFsbGljIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wNy4wMCNPdGhlciBmZXJyb3VzIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wOC4wMCNPdGhlciBub24gZmVycm91cyByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4xMC4wMCNUaXRhbml1bSByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMTEuMDAjV2FzcGFsbG95IHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4xMi4wMCNDb3BwZXIgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjEzLjAwI0JyYXNzIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNy4wMC4wMC4wMCNSZWZyYWN0b3JpZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTAuMDAuMDAjQ2VyYW1pYyBmaWJyZSBwcm9kdWN0cyMzMS4zNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMC4wMS4wMCNJbnN1bGF0aW9uIGJvYXJkcyMzMS4zNy4xMC4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMC4wMi4wMCNJbnN1bGF0aW5nIHdvb2wjMzEuMzcuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTEuMDAuMDAjUmVmcmFjdG9yeSBicmlja3MjMzEuMzcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTEuMDEuMDAjTXVsbGl0ZSBicmlja3MjMzEuMzcuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTEuMDIuMDAjU2lsbGltYW5pdGUgYnJpY2tzIzMxLjM3LjExLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjAzLjAwI0FjaWQgcmVzaXN0YW50IGJyaWNrcyMzMS4zNy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMS4wNC4wMCNTaWxpY2EgYnJpY2tzIzMxLjM3LjExLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjA1LjAwI0hpZ2ggYWx1bWluYSBicmlja3MjMzEuMzcuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTEuMDYuMDAjQ2FsY2l1bSBzaWxpY2F0ZSBibG9ja3MjMzEuMzcuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTEuMDcuMDAjU2hhcGVkIGJyaWNrcyMzMS4zNy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wMC4wMCNDYXN0YWJsZXMjMzEuMzcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDEuMDAjRGVuc2UgY2FzdGFibGVzIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjAyLjAwI0luc3VsYXRpbmcgY2FzdGFibGVzIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjAzLjAwI0xvdyBjZW1lbnQgY2FzdGFibGVzIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjA0LjAwI0FjaWQgb3IgYWxrYWxpIHJlc2lzdGFudCBjYXN0YWJsZSMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wNS4wMCNBYnJhc2lvbiByZXNpc3RhbnQgY2FzdGFibGUjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDYuMDAjU2ljIGNhc3RhYmxlIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjA3LjAwI1NlbGYgZmxvdyBjYXN0YWJsZSMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wOC4wMCNUYWJ1bGFyIGFsdW1pbmEgY2FzdGFibGUjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDkuMDAjRXJvc2lvbiByZXNpc3RhbnQgY2FzdGFibGUjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTMuMDAuMDAjU2hhcGVkIHJlZnJhY3RvcmllcyMzMS4zNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMy4wMS4wMCNQb3JvdXMgYmxvY2tzIzMxLjM3LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEzLjAyLjAwI1ppcmNvbiBub3p6bGVzIzMxLjM3LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM4LjAwLjAwLjAwI01hZ25ldHMgYW5kIG1hZ25ldGljIG1hdGVyaWFscyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zOC4xMC4wMC4wMCNQZXJtYW5lbnQgbWFnbmV0cyMzMS4zOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zOC4xMC4wMS4wMCNMb2RlIHN0b25lIzMxLjM4LjEwLjAwLjAwCi11bnNwc2M3IzMxLjM4LjEwLjAyLjAwI0FsbmljbyBtYWduZXRzIzMxLjM4LjEwLjAwLjAwCi11bnNwc2M3IzMyLjAwLjAwLjAwLjAwI0VsZWN0cm9uaWMgQ29tcG9uZW50cyBhbmQgU3VwcGxpZXMjMzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMDAuMDAuMDAjUHJpbnRlZCBjaXJjdWl0cyBhbmQgaW50ZWdyYXRlZCBjaXJjdWl0cyBhbmQgbWljcm9hc3NlbWJsaWVzIzMyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjAwLjAwI1ByaW50ZWQgY2lyY3VpdHMgYW5kIGNpcmN1aXQgY2FyZCBhc3NlbWJsaWVzIzMyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjAxLjAwI0JhcmUgcHJpbnRlZCBjaXJjdWl0IGJvYXJkcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wMi4wMCNQcmludGVkIGNpcmN1aXQgYXNzZW1ibGllcyAoUENBcykjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDMuMDAjTWl4ZWQgY2lyY3VpdCBhc3NlbWJsaWVzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjA0LjAwI1N1cmZhY2UgbW91bnQgY2lyY3VpdCBhc3NlbWJsaWVzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjA1LjAwI1BsYXRlZCB0aHJvdWdoIGNpcmN1aXQgYXNzZW1ibGllcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wNi4wMCNEb3VibGUgc2lkZWQgY2lyY3VpdCBjYXJkcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wNy4wMCNCYWNrcGxhbmUgY2lyY3VpdCBjYXJkcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wOC4wMCNNdWx0aWxheWVyIGNpcmN1aXQgY2FyZHMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDkuMDAjU2luZ2xlIHNpZGVkIGNpcmN1aXQgY2FyZHMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMTAuMDAjUHJpbnRlZCB3aXJlIGJvYXJkcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wMC4wMCNFbGVjdHJvbmljIGNvbXBvbmVudHMgZm9yIG1lbW9yeSBvciBzbWFydCBjYXJkcyMzMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wMS4wMCNSYW5kb20gYWNjZXNzIG1lbW9yeSAoUkFNKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wMi4wMCNEeW5hbWljIHJhbmRvbSBhY2Nlc3MgbWVtb3J5IChEUkFNKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wMy4wMCNTdGF0aWMgcmFuZG9tIGFjY2VzcyBtZW1vcnkgKFNSQU0pIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjA0LjAwI1Byb2dyYW1tYWJsZSByZWFkIG9ubHkgbWVtb3J5IChQUk9NKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wNS4wMCNFcmFzZWFibGUgcHJvZ3JhbW1hYmxlIHJlYWQgb25seSBtZW1vcnkgKEVQUk9NKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wNi4wMCNFbGVjdHJvbmljYWxseSBlcmFzZWFibGUgcHJvZ3JhbW1hYmxlIHJlYWQgb25seSBtZW1vcnkgKEVFUFJPTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDcuMDAjTW9ub2xpdGloYyBtZW1vcnkgaW50ZWdyYXRlZCBjaXJjdWl0cyAoTU1JQykjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDguMDAjUmVhZCBvbmx5IG1lbW9yeSAoUk9NKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wOS4wMCNBcHBsaWNhdGlvbiBzcGVjaWZpYyBpbnRlZ3JhdGVkIGNpcmN1aXRzIChBU0lDKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xMC4wMCNUaGluIHF1YWQgZmxhdCBwYWNrIChUUUZQKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xMS4wMCNQcm9ncmFtbWFibGUgYXJyYXkgbG9naWMgKFBBTCkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTIuMDAjR2F0ZSBhcnJheSBsb2dpYyAoR0FMKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xMy4wMCNUcmFuc2lzdG9yIHRyYW5zaXN0b3IgbG9naWMgKFRUTCkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTQuMDAjRW1pdHRlciBjb3VwbGVkIGxvZ2ljIChFQ0wpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjE1LjAwI0JpcG9sYXIgb3IgbWV0YWwgb3hpZGUgc2VtaWNvbmR1Y3RvciB0ZWNobm9sb2d5IChCSU1PUykjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTYuMDAjQmlwb2xhciBjb21wbGVtZW50YXJ5IG1ldGFsIG94aWRlIHNlbWljb25kdWN0b3IgdGVjaG5vbG9neSAoQklDTU9TKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xNy4wMCNTbWFydCBjYXJkcyMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xOC4wMCNVcHNjcmVlbmVkIGludGVncmF0ZWQgY2lyY3VpdHMjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTkuMDAjTGluZWFyIGludGVncmF0ZWQgY2lyY3VpdHMjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMjAuMDAjRGlnaXRhbCBpbnRlZ3JhdGVkIGNpcmN1aXRzIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjIxLjAwI1N5bmNocm9ub3VzIGR5bmFtaWMgcmFuZG9tIGFjY2VzcyBtZW1vcnkgKFNEUkFNKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4yMi4wMCNGbGFzaCBtZW1vcnkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMjMuMDAjUmFtYnVzIGR5bmFtaWMgcmFuZG9tIGFjY2VzcyBtZW1vcnlSRFJBTSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4yNC4wMCNTeW5jaHJvbm91cyBncmFwaGljIHJhbmRvbSBhY2Nlc3MgbWVtb3J5IFNHUkFNIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE3LjAwLjAwI0h5YnJpZCBpbnRlZ3JhdGVkIGNpcmN1aXRzIzMyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEwLjE3LjAxLjAwI01pY3JvcHJvY2Vzc29ycyMzMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNy4wMi4wMCNDbG9jayBvc2NpbGxhdG9ycyMzMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNy4wMy4wMCNNaWNyb2NvbnRyb2xsZXJzIzMyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE4LjAwLjAwI1VubW91bnRlZCBpbnRlZ3JhdGVkIGNpcmN1aXRzIzMyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEwLjE4LjAxLjAwI1VubW91bnRlZCBkaWVzIzMyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE4LjAyLjAwI1VubW91bnRlZCB3YWZlcnMjMzIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTguMDMuMDAjVW5tb3VudGVkIGNoaXBzIzMyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMyLjExLjAwLjAwLjAwI0Rpb2RlcyBhbmQgdHJhbnNpc3RvcnMgYW5kIHNlbWljb25kdWN0b3IgZGV2aWNlcyMzMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wMC4wMCNEaW9kZXMjMzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDEuMDAjTWljcm93YXZlIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wMi4wMCNaZW5lciBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDMuMDAjTGlnaHQgZW1pdHRpbmcgZGlvZGVzIChMRURzKSMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wNC4wMCNTY2hvdHRreSBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDUuMDAjVHVubmVsIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wNi4wMCNQaG90b3NlbnNpdGl2ZSBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDcuMDAjVmFyaWFibGUgY2FwYWNpdGFuY2UgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjA4LjAwI1NvbGFyIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wOS4wMCNQb3dlciBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMTAuMDAjUmFkaW8gZnJlcXVlbmN5IChSRikgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjExLjAwI1NtYWxsIHNpZ25hbCBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDAuMDAjVHJhbnNpc3RvcnMjMzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDEuMDAjUGhvdG8gc2Vuc2l0aXZlIHRyYW5zaXN0b3JzIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjAyLjAwI0ZpZWxkIGVmZmVjdCB0cmFuc2lzdG9ycyAoRkVUKSMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wMy4wMCNNZXRhbCBveGlkZSBzaWxpY29uZSBmaWVsZCBlZmZlY3QgdHJhbnNpc3RvcnMgKE1PU0ZFVCkjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDQuMDAjVHJhbnNpc3RvciBjaGlwcyMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wNS4wMCNUcmFuc2lzdG9yIGRpZXMjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDYuMDAjVHJhbnNpc3RvciB3YWZlcnMjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDcuMDAjQmlwb2xhciBkYXJsaW5ndG9uIG9yIHJhZGlvIGZyZXF1ZW5jeSAoUkYpIHRyYW5zaXN0b3JzIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjA4LjAwI1VuaWp1bmN0aW9uIHRyYW5zaXN0b3JzIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjA5LjAwI0luc3VsYXRlZCBnYXRlIGJpcG9sYXIgdHJhbnNpc3RvcnMgKElHQlQpIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjEwLjAwI0p1bmN0aW9uIGZpZWxkIGVmZmVjdCB0cmFuc2lzdG9ycyAoSkZFVCkjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTcuMDAuMDAjU2VtaWNvbmR1Y3RvciBkZXZpY2VzIzMyLjExLjAwLjAwLjAwCi11bnNwc2M3IzMyLjExLjE3LjAxLjAwI1Bob3Rvdm9sdGFpYyBjZWxscyMzMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wMi4wMCNUaHlyaXN0b3JzIzMyLjExLjE3LjAwLjAwCi11bnNwc2M3IzMyLjExLjE3LjAzLjAwI0RpYWNzIzMyLjExLjE3LjAwLjAwCi11bnNwc2M3IzMyLjExLjE3LjA0LjAwI1RyaWFjcyMzMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wNS4wMCNPcHRpY2FsIGNvdXBsZWQgaXNvbGF0b3JzIzMyLjExLjE3LjAwLjAwCi11bnNwc2M3IzMyLjExLjE3LjA2LjAwI0NyeXN0YWwgb3NjaWxsYXRvcnMjMzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTguMDAuMDAjSW50ZWdyYXRlZCBjaXJjdWl0IGNvbXBvbmVudHMjMzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTguMDEuMDAjSW50ZXJncmF0ZWQgY2lyY3VpdCBsaWRzIzMyLjExLjE4LjAwLjAwCi11bnNwc2M3IzMyLjExLjE4LjAyLjAwI0ludGVncmF0ZWQgY2lyY3VpdCBwYWNrYWdlcyMzMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOC4wMy4wMCNTdWJzdHJhdGVzIzMyLjExLjE4LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjAwLjAwI1JhZGlvIGZyZXF1ZW5jeSAoUkYpIGNvbXBvbmVudHMjMzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDEuMDAjQW1wbGlmaWVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wMi4wMCNBdHRlbnVhdG9ycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wMy4wMCNDaXJjdWxhdG9ycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wNC4wMCNDb3VwbGVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wNS4wMCNEZWxheSBsaW5lcyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wNi4wMCNEZXRlY3RvcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDcuMDAjRHVtbXkgbG9hZHMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDguMDAjUmFkaW8gZnJlcXVlbmN5IChSRikgZmlsdGVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wOS4wMCNJc29sYXRvcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMTAuMDAjTWl4ZXJzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjExLjAwI1BoYXNlIHNoaWZ0ZXJzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjEyLjAwI1Bvd2VyIGRpdmlkZXJzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjEzLjAwI1dhdmUgdHViZSBhbXBsaWZpZXJzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjE0LjAwI1Rlcm1pbmF0aW9ucyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4xNS4wMCNNb2R1bGF0b3JzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjEyLjAwLjAwLjAwI1ByaW50ZWQgY29tcG9uZW50cyMzMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNS4wMC4wMCNDYXBhY2l0b3JzIzMyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEyLjE1LjAxLjAwI0ZpeGVkIGNhcGFjaXRvcnMjMzIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTUuMDIuMDAjVmFyaWFibGUgY2FwYWNpdG9ycyBvciB2YXJhY3RvcnMjMzIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTUuMDMuMDAjQWRqdXN0YWJsZSBwcmUgc2V0IGNhcGFjaXRvcnMjMzIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTUuMDQuMDAjQ2FwYWNpdG9yIG5ldHdvcmtzIzMyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjAwLjAwI1Jlc2lzdG9ycyMzMi4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wMS4wMCNUaGVybWlzdG9ycyMzMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wMi4wMCNGdXNpc3RvcnMjMzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDMuMDAjVmFyaWFibGUgcmVzaXN0b3JzIG9yIHZhcmlzdG9ycyMzMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wNC4wMCNGaXhlZCBjYXJib24gcmVzaXN0b3JzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjA1LjAwI0ZpeGVkIHRoaWNrIGZpbG0gcmVzaXN0b3JzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjA2LjAwI0ZpeGVkIHRoaW4gZmlsbSByZXNpc3RvcnMjMzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDcuMDAjUmVzaXN0b3IgbmV0d29ya3MjMzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDguMDAjV2lyZSB3b3VuZCByZXNpc3RvcnMjMzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDAuMDAjRGlzY3JldGUgY29tcG9uZW50cyMzMi4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNy4wMS4wMCNSZWN0aWZpZXJzIzMyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE3LjAyLjAwI0luZHVjdG9ycyMzMi4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNy4wMy4wMCNGZXJyaXRlcyMzMi4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNy4wNC4wMCNTdGF0aWMgY29udmVydGVycyMzMi4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNy4wNS4wMCNJbnZlcnRlcnMjMzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDYuMDAjUmVzaXN0b3Igb3IgY2FwYWNpdG9yIChSL0MpIG5ldHdvcmtzIzMyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMyLjEzLjAwLjAwLjAwI1Bhc3NpdmUgY29tcG9uZW50cyMzMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMy4xMC4wMC4wMCNUZW1wZXJhdHVyZSBjb250cm9scyMzMi4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMy4xMC4wMS4wMCNIZWF0IHNpbmtzIzMyLjEzLjEwLjAwLjAwCi11bnNwc2M3IzM5LjAwLjAwLjAwLjAwI0xpZ2h0aW5nIGFuZCBFbGVjdHJpY2FsIEFjY2Vzc29yaWVzIGFuZCBTdXBwbGllcyMzOS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMC4wMC4wMC4wMCNMYW1wcyBhbmQgbGlnaHRidWxicyBhbmQgbGFtcCBjb21wb25lbnRzIzM5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjAwLjAwI0xhbXBzIzM5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjAxLjAwI0hhbG9nZW4gbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDIuMDAjTWVkaWNhbCBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wMy4wMCNTb2xhciBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wNC4wMCNBbGNvaG9sIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjA1LjAwI0ZsdW9yZXNjZW50IGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjA2LjAwI0FyYyBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wOC4wMCNTaGFkb3dsZXNzIG9yIHNjaWFseXRpYyBvcGVyYXRpb24gbGlnaHQjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDkuMDAjU3RhZ2Ugb3Igc3R1ZGlvIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjEwLjAwI0ZpbGFtZW50IGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjExLjAwI0hpZ2ggaW50ZW5zaXR5IGRpc2NoYXJnZSAoSElEKSBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xMi4wMCNJbmNhbmRlc2NlbnQgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMTMuMDAjSW5mcmFyZWQgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMTQuMDAjTWV0YWwgaGFsaWRlIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjE1LjAwI1ZhcG9yIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjE2LjAwI1VsdHJhdmlvbGV0IChVVikgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMTcuMDAjSGlnaCBwcmVzc3VyZSBzb2RpdW0gbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTcuMDAuMDAjQnVsYiBnbGFzcyMzOS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNy4wMS4wMCNGbHVvcmVzY2VudCB0dWJlcyMzOS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzOS4xMC4xOC4wMC4wMCNMYW1wIGNvbXBvbmVudHMjMzkuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTguMDEuMDAjTGFtcCBmaWxhbWVudCMzOS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMC4xOS4wMC4wMCNNb2JpbGUgYW5kIGZpeGVkIGZsb29kbGlnaHRpbmcjMzkuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTkuMDEuMDAjTGlnaHQgdG93ZXIjMzkuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTkuMDIuMDAjTGlnaHQgY2FydCMzOS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzOS4xMC4xOS4wMy4wMCNMaWdodCBzdGFuZCMzOS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzOS4xMS4wMC4wMC4wMCNMaWdodGluZyBhbmQgZml4dHVyZXMgYW5kIGFjY2Vzc29yaWVzIzM5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjAwLjAwI0ludGVyaW9yIGxpZ2h0aW5nIGFuZCBmaXh0dXJlcyMzOS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wMS4wMCNGbHVvcmVzY2VudCBmaXh0dXJlcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wMi4wMCNWYW5pdHkgbGlnaHRpbmcjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDMuMDAjV2FsbCBmaXh0dXJlcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wNC4wMCNTdGFnZSBvciBzdHVkaW8gbGlnaHRpbmcgc3lzdGVtcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wNS4wMCNSZWNlc3NlZCBsaWdodGluZyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wNi4wMCNDaGFuZGVsaWVycyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wNy4wMCNEZXNrIGZpeHR1cmVzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjA4LjAwI1RyYWNrIGxpZ2h0aW5nIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjA5LjAwI0Zsb29yIHRvcmNoaWVyZSMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xMC4wMCNUYWJsZSBsYW1wcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xMS4wMCNEZWNvcmF0aXZlIGxpZ2h0aW5nIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjEyLjAwI0xhYm9yYXRvcnkgYmVuY2ggbGlnaHRzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjEzLjAwI0ludGVyaW9yIHNvbGFyIGxpZ2h0aW5nIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjE0LjAwI1RyZWUgbGlnaHRzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjE1LjAwI0Rvd25saWdodGluZyBmaXh0dXJlcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xNi4wMCNUYXNrIGxpZ2h0aW5nIGZpeHR1cmVzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjE3LjAwI1dheCBjYW5kbGVzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjE4LjAwI0hhbmQgb3IgZXh0ZW5zaW9uIGxpZ2h0IzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjE5LjAwI0NhbmRsZSBob2xkZXJzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjIwLjAwI0hhbG9nZW4gbGlnaHRpbmcgZml4dHVyZXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTYuMDAuMDAjRXh0ZXJpb3IgbGlnaHRpbmcgYW5kIGZpeHR1cmVzIzM5LjExLjAwLjAwLjAwCi11bnNwc2M3IzM5LjExLjE2LjAzLjAwI1JvYWR3YXkgb3IgaGlnaHdheSBsaWdodGluZyMzOS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNi4wNS4wMCNMYW5kc2NhcGUgb3IgYXJlYSBsaWdodGluZyMzOS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNi4wNi4wMCNVbmRlcndhdGVyIGxpZ2h0aW5nIzM5LjExLjE2LjAwLjAwCi11bnNwc2M3IzM5LjExLjE2LjA4LjAwI1Jlc2lkZW50aWFsIHN0cmVldCBsaWdodHMjMzkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTYuMDkuMDAjS2Vyb3NlbmUgb3IgcHJvcGFuZSBvciBidXRhbmUgbGFudGVybnMjMzkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTcuMDAuMDAjRW1lcmdlbmN5IGxpZ2h0aW5nIzM5LjExLjAwLjAwLjAwCi11bnNwc2M3IzM5LjExLjE3LjAyLjAwI0ZsYXNobGlnaHRzIzM5LjExLjE3LjAwLjAwCi11bnNwc2M3IzM5LjExLjE3LjAzLjAwI1N0b3JtIGxpZ2h0cyMzOS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNy4wNC4wMCNGbG9vZCBsaWdodHMjMzkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTcuMDUuMDAjTGlnaHQgc3RpY2tzIzM5LjExLjE3LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjAwLjAwI0xpZ2h0aW5nIGFjY2Vzc29yaWVzIzM5LjExLjAwLjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjAxLjAwI0xhbXAgYmFsbGFzdHMjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDIuMDAjTGFtcCBob3VzaW5ncyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wMy4wMCNMYW1wIHNvY2tldHMjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDQuMDAjTGFtcCBiYXNlcyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wNS4wMCNMYW1wIGJyYWNrZXRzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjA2LjAwI0xpZ2h0IGJveGVzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjA4LjAwI0dyaWxsZXMjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDkuMDAjTGlnaHQgY29uZGl0aW9uZXIgZmlsdGVycyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4xMC4wMCNMYW1wIHN0YXJ0ZXIjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMTEuMDAjRWxlY3RyaWZpZWQgdHJhY2tzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjEyLjAwI0xhbXAgY292ZXJzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE5LjAwLjAwI0hhemFyZG91cyBsb2NhdGlvbiBsaWdodGluZyBhbmQgZml4dHVyZXMjMzkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTkuMDEuMDAjSGF6YXJkb3VzIGxvY2F0aW9uIGZsb3VyZXNjZW50IGZpeHR1cmVzIzM5LjExLjE5LjAwLjAwCi11bnNwc2M3IzM5LjExLjE5LjAyLjAwI0hhemFyZG91cyBsb2NhdGlvbiBpbmNhbmRlc2NlbnQgZml4dHVyZXMjMzkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDAuMDAuMDAuMDAuMDAjRGlzdHJpYnV0aW9uIGFuZCBDb25kaXRpb25pbmcgU3lzdGVtcyBhbmQgRXF1aXBtZW50IGFuZCBDb21wb25lbnRzIzQwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjAwLjAwLjAwI0hlYXRpbmcgYW5kIHZlbnRpbGF0aW9uIGFuZCBhaXIgY2lyY3VsYXRpb24jNDAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTUuMDAuMDAjVmVudGlsYXRpb24jNDAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTUuMDEuMDAjQWlyIGNvbGxlY3RvcnMjNDAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTUuMDIuMDAjQWlyIGV4aGF1c3RlcnMjNDAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTUuMDMuMDAjVmVudHMjNDAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTUuMDQuMDAjVmVudGlsYXRpb24gZGFtcGVycyM0MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNS4wNS4wMCNBaXIgZGlmZnVzZXJzIzQwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjA2LjAwI1ZlbnRpbGF0aW9uIHBpcGVzIzQwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE2LjAwLjAwI0FpciBjaXJjdWxhdGlvbiM0MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNi4wMS4wMCNCbG93ZXJzIzQwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE2LjAyLjAwI0FpciBjaXJjdWxhdG9ycyM0MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNi4wMy4wMCNJbXBlbGxlcnMjNDAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTYuMDQuMDAjRmFucyM0MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNy4wMC4wMCNDb29saW5nIzQwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjE3LjAxLjAwI0FpciBjb25kaXRpb25lcnMjNDAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTcuMDIuMDAjQ29vbGluZyBleGNoYW5nZXJzIzQwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE3LjAzLjAwI0V2YXBvcmF0aXZlIGNvb2xlcnMjNDAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTcuMDQuMDAjQ29uZGVuc2luZyB1bml0cyM0MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wMC4wMCNIZWF0aW5nIGVxdWlwbWVudCM0MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wMS4wMCNSYWRpYXRvcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDIuMDAjSGVhdCBleGNoYW5nZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjAzLjAwI0ZpcmVwbGFjZXMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDQuMDAjSGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wNS4wMCNGdXJuYWNlcyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wNi4wMCNIZWF0IHB1bXBzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjA3LjAwI1NvbGFyIGhlYXRpbmcgdW5pdHMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDguMDAjSGVhdGluZyBzdG92ZXMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDkuMDAjQ2lyY3VsYXRpb24gaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xMC4wMCNDb2lsIGR1Y3QgaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xMS4wMCNDb252ZWN0aW9uIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTIuMDAjRGl2aWRlZCBleGNoYW5nZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjEzLjAwI0RvdWJsZSBzcGxpdCBleGNoYW5nZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjE0LjAwI0Zpbm5lZCB0dWJ1bGFyIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTUuMDAjSW1tZXJzaW9uIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTYuMDAjS2V0dGxlIGV4Y2hhbmdlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTcuMDAjT25lIHBhc3MgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xOC4wMCNQcm9jZXNzIGFpciBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjE5LjAwI1NwYWNlIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMjAuMDAjU3BsaXQgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4yMS4wMCNTdHJpcCBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjIyLjAwI1R1YnVsYXIgaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4yMy4wMCNUd28gcGFzcyBleGNoYW5nZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjI0LjAwI1F1YXJ0eiBoZWF0ZXIjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMjUuMDAjRG9tZXN0aWMgd2F0ZXIgaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4yNi4wMCNDb21tZXJjaWFsIHdhdGVyIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTkuMDAuMDAjSHVtaWRpdHkgY29udHJvbCM0MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOS4wMS4wMCNWYXBvcml6ZXJzIzQwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE5LjAyLjAwI0RlaHVtaWRpZmllcnMjNDAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTkuMDMuMDAjSHVtaWRpZmllcnMjNDAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMjAuMDAuMDAjQm9pbGVycyM0MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4yMC4wMS4wMCNGaXJlIHR1YmUgYm9pbGVycyM0MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4yMC4wMi4wMCNXYXRlciB0dWJlIGJvaWxlciM0MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4yMC4wMy4wMCNFbGVjdHJpYyBib2lsZXJzIzQwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjAwLjAwLjAwI0ZsdWlkIGFuZCBnYXMgZGlzdHJpYnV0aW9uIzQwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjE1LjAwLjAwI0ZsdWlkIGFuZCBnYXMgY29uZHVpdHMjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTUuMDIuMDAjRHVjdHMjNDAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTUuMDQuMDAjSG9zZXMjNDAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDAuMDAjVmFsdmVzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjAxLjAwI0NoZWNrIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wMi4wMCNOZWVkbGUgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjAzLjAwI1BuZXVtYXRpYyB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDQuMDAjU2FmZXR5IHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wNS4wMCNTb2xlbm9pZCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDYuMDAjUmVsaWVmIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wNy4wMCNCYWxsIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wOC4wMCNIeWRyYXVsaWMgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjA5LjAwI0NvbnRyb2wgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjEwLjAwI0Zsb2F0IHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xMS4wMCNHbG9iZSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTIuMDAjRXhwYW5zaW9uIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xMy4wMCNHYXRlIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xNC4wMCNCdXR0ZXJmbHkgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjE1LjAwI0ZsYXAgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjE2LjAwI1ZhbHZlIHBhcnRzIGFuZCBhY2Nlc3NvcmllcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xNy4wMCNBbmdsZSBnbG9iZSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTguMDAjQmFsbCBjaGVjayB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTkuMDAjQnV0dGVyZmx5IGx1ZyBwYXR0ZXJuIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yMC4wMCNCdXR0ZXJmbHkgd2FmZXIgcGF0dGVybiB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjEuMDAjRGlhcGhyYWdtIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yMi4wMCNJbmxpbmUgY2hlY2sgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjIzLjAwI0tuaWZlIGdhdGUgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjI0LjAwI0x1YnJpY2F0ZWQgcGx1ZyB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjUuMDAjTXVkIG9yIHNsdXNoIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yNi4wMCNOb25sdWJyaWNhdGVkIHBsdWcgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjI3LjAwI09yaWZpY2UgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjI4LjAwI1BpbG90IHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yOS4wMCNQaW5jaCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzAuMDAjUGlzdG9uIGNoZWNrIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4zMS4wMCNQdW1wIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4zMi4wMCNTZW50aW5lbCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzMuMDAjU2xpZGVyIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4zNC4wMCNTd2luZyBjaGVjayB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzUuMDAjVHVyYmluZSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzYuMDAjVmFsdmUga2l0cyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4zNy4wMCNXYWZlciBjaGVjayB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDAuMDAjSGFyZHdhcmUgYW5kIGZpdHRpbmdzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjAxLjAwI0RyYWlucyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wMi4wMCNGYXVjZXRzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjAzLjAwI1Nob3dlciBoZWFkcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wNC4wMCNTcGlnb3RzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjA1LjAwI1Nwb3V0cyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wNi4wMCNQaXBlIHBsdWdzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjA3LjAwI1BpcGUgY2xhbXBzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjA4LjAwI0xpcXVpZCB0cmFwcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wOS4wMCNTdGVhbSB0cmFwcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xMC4wMCNQbHVtYmluZyBmbGFuZ2VzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjExLjAwI01ldGFsIG9yIHJ1YmJlciBleHBhbnNpb24gam9pbnRzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjEyLjAwI1BpcGUgY2FwcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xMy4wMCNQbHVtYmluZyB1bmlvbnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTQuMDAjUGx1bWJpbmcgY3Jvc3NlcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xNS4wMCNQbHVtYmluZyBuaXBwbGVzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjE2LjAwI1AgdHJhcHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTcuMDAjUGlwZSBiZW5kcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xOC4wMCNQbHVtYmluZyBlbGJvd3MjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTkuMDAjUGx1bWJpbmcgYWRhcHRlcnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjAuMDAjUGx1bWJpbmcgY29ubmVjdG9ycyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yMS4wMCNQbHVtYmluZyBjb3VwbGluZ3MjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjIuMDAjSGFsZiBjb3VwbGluZ3MjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjMuMDAjUmVkdWNpbmcgY291cGxpbmdzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjI0LjAwI1BsdW1iaW5nIGJ1c2hpbmdzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjI1LjAwI1BsdW1iaW5nIGhhbmdlcnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjYuMDAjSHlkcmFudHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjcuMDAjUGx1bWJpbmcgdmVudHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjguMDAjRmx1aWQgcmVndWxhdG9ycyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yOS4wMCNQbHVtYmluZyB0ZWVzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjMwLjAwI1N0cmFpbmVycyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zMS4wMCNOb3p6bGVzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjMyLjAwI1BsdW1iaW5nIHNwaWRlcnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMzMuMDAjUGlwZSBmaXR0aW5nIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjM0LjAwI0hvc2UgZml0dGluZyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zNS4wMCNGdW5uZWxzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjM2LjAwI0dyZWFzZSBmaXR0aW5nIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjM3LjAwI0RpYXBocmFnbXMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDAuMDAjVHViZSBhbmQgdHViaW5nIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjAxLjAwI0ZlcnJvdXMgYWxsb3kgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjAyLjAwI0NvcHBlciB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDMuMDAjVGl0YW5pdW0gdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjA0LjAwI01hZ25lc2l1bSB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDUuMDAjVGluIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wNi4wMCNCcmFzcyB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDcuMDAjTGVhZCB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDguMDAjQnJvbnplIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wOS4wMCNaaW5jIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xMC4wMCNTdGVlbCB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTEuMDAjSXJvbiB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTIuMDAjQ2VtZW50IHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xMy4wMCNQbGFzdGljIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xNC4wMCNSdWJiZXIgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjE1LjAwI0dsYXNzIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xNi4wMCNTdG9uZSB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTcuMDAjTm9uIGZlcnJvdXMgYWxsb3kgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjE4LjAwI0FsdW1pbnVtIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xOS4wMCNTdGFpbmxlc3Mgc3RlZWwgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjIwLjAwI1ByZWNpb3VzIG1ldGFsIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4yMS4wMCNOeWxvbiB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTkuMDAuMDAjRHVjdHMjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTkuMDEuMDAjRmxleGlibGUgZHVjdHMjNDAuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTkuMDIuMDAjUmlnaWQgZHVjdHMjNDAuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDAuMDAjSG9zZXMjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDEuMDAjQWNpZCBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wMi4wMCNBaXIgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDMuMDAjRHJpbGwgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDQuMDAjTWFyaW5lIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjA1LjAwI01hdGVyaWFsIGhhbmRsaW5nIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjA2LjAwI09pbCBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wNy4wMCNTcGVjaWFsIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjA4LjAwI1dhdGVyIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjA5LjAwI0FpciB3YXRlciBnYXMgbXVsdGlwdXJwb3NlIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjEwLjAwI1RlZmxvbiBsaW5lZCBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wMC4wMCNQaXBlIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjAxLjAwI0NhcmJvbiBzdGVlbCBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjAyLjAwI0R1Y3RpbGUgaXJvbiBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjAzLjAwI0hpZ2ggbmlja2VsIGFsbG95IHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDQuMDAjSGlnaCB5aWVsZCBzdGVlbCBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjA1LjAwI0ZlcnJpdGljIGFsbG95IHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDYuMDAjQWx1bWludW0gcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wNy4wMCNCcmFzcyBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjA4LjAwI0Jyb256ZSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjA5LjAwI0NvbmNyZXRlIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMTAuMDAjQ29wcGVyIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMTEuMDAjQ2FzdCBpcm9uIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMTIuMDAjTGVhZCBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjEzLjAwI01hZ25lc2l1bSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjE0LjAwI05vbiBmZXJyb3VzIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMTUuMDAjUGxhc3RpYyBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjE2LjAwI1J1YmJlciBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjE3LjAwI1N0YWlubGVzcyBzdGVlbCBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjE4LjAwI1RpbiBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjE5LjAwI1RpdGFuaXVtIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMjAuMDAjWmluYyBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjIxLjAwI0hvc2UgcmVlbHMjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjIuMDAuMDAjRmx1aWQgYW5kIGdhcyByZWd1bGF0b3JzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIyLjAxLjAwI0dhcyByZWd1bGF0b3JzIzQwLjE0LjIyLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIyLjAyLjAwI0ZsdWlkIHJlZ3VsYXRvcnMjNDAuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDAuMDAjUGlwZSBmaXR0aW5ncyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wMS4wMCNQaXBlIGFuZ2xlIGZhY2UgcmluZ3MjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDIuMDAjUGlwZSBicmFuY2ggb3V0bGV0cyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wMy4wMCNQaXBlIGxhdGVyYWxzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjA0LjAwI1BpcGUgaW5zZXJ0cyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wNS4wMCNQaXBlIHJlZHVjZXJzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjA2LjAwI1BpcGUgc2FkZGxlcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wNy4wMCNQaXBlIHN0dWJlbmRzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjA4LjAwI1BpcGUgd3llcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wOS4wMCNQaXBlIGJlbmRzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjEwLjAwI1BpcGUgY2FwcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xMS4wMCNQaXBlIGhhbGYgY291cGxpbmdzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjEyLjAwI1BpcGUgZXhwYW5zaW9uIGpvaW50cyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xMy4wMCNQaXBlIHBsdWdzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjE0LjAwI1BpcGUgYnVzaGluZ3MjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTUuMDAjUGlwZSBjb3VwbGluZ3MjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTYuMDAjUGlwZSBjcm9zc2VzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjE3LjAwI1BpcGUgZWxib3dzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjE4LjAwI1BpcGUgbmlwcGxlcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xOS4wMCNQaXBlIHRlZXMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMjAuMDAjUGlwZSB1bmlvbnMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMjEuMDAjUGlwZSByZWR1Y2luZyBjb3VwbGluZ3MjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMjIuMDAjUGlwZSByZXBhaXIgY2xhbXBzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjIzLjAwI1J1cHR1cmUgZGlzayM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wMC4wMCNQaXBlIGZsYW5nZXMjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDEuMDAjQW1tb25pYSBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjAyLjAwI0JhY2t1cCBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjAzLjAwI0JsaW5kIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDQuMDAjTGFwam9pbnQgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wNS4wMCNMb25nIHdlbGRuZWNrIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDYuMDAjT3JpZmljZSBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjA3LjAwI1BsYXRlIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDguMDAjU2xpcG9uIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDkuMDAjU29ja2V0d2VsZCBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjEwLjAwI1NwZWN0YWNsZSBibGluZCBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjExLjAwI1RocmVhZGVkIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMTIuMDAjV2VsZG5lY2sgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNS4wMC4wMCNUcmFwcyBhbmQgc3RyYWluZXJzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjI1LjAxLjAwI0xpcXVpZCBzdHJhaW5lcnMjNDAuMTQuMjUuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjUuMDIuMDAjTGlxdWlkIHRyYXBzIzQwLjE0LjI1LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI1LjAzLjAwI1N0ZWFtIHRyYXBzIzQwLjE0LjI1LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI1LjA0LjAwI1N0ZWFtIHN0cmFpbmVycyM0MC4xNC4yNS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNi4wMC4wMCNUdWJlIGZpdHRpbmdzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjI2LjAxLjAwI0JyYXNzIHR1YmUgZml0dGluZ3MjNDAuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjYuMDIuMDAjQ2FyYm9uIHN0ZWVsIHR1YmUgZml0dGluZ3MjNDAuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjYuMDMuMDAjU3RhaW5sZXNzIHN0ZWVsIHR1YmUgZml0dGluZ3MjNDAuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMDAuMDAuMDAjSW5kdXN0cmlhbCBwdW1wcyBhbmQgY29tcHJlc3NvcnMjNDAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDAuMDAjUHVtcHMjNDAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDEuMDAjQWlyIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjAyLjAwI1ZhY3V1bSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wMy4wMCNDZW50cmlmdWdhbCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wNC4wMCNDaXJjdWxhdGluZyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wNS4wMCNEb3NpbmcgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDYuMDAjSGFuZCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wNy4wMCNJcnJpZ2F0aW9uIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjA4LjAwI011ZCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wOS4wMCNSZWNpcHJvY2F0aW5nIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjEwLjAwI1dhdGVyIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjExLjAwI1dlbGwgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTIuMDAjU3VtcCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xMy4wMCNTdWJtZXJzaWJsZSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xNC4wMCNTdGVhbSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xNS4wMCNTb2xlbm9pZCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xNi4wMCNTaGVhciBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xNy4wMCNTZXdhZ2UgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTguMDAjU2VhbGxlc3MgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTkuMDAjU2FuaXRhcnkgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjAuMDAjU2FtcGxpbmcgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjEuMDAjUm90YXJ5IHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjIyLjAwI1JldmVyc2Ugb3Ntb3NpcyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yMy4wMCNQb3NpdGl2ZSBkaXNwbGFjZW1lbnQgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjQuMDAjT2lsIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjI1LjAwI1NsdWRnZSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yNi4wMCNUdXJiaW5lIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjI3LjAwI1BsdW5nZXIgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjguMDAjT3NjaWxsYXRpbmcgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjkuMDAjRHJ1bSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zMC4wMCNEcmVkZ2UgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzEuMDAjRGV3YXRlcmluZyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zMi4wMCNGdWVsIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjMzLjAwI0h5ZHJhdWxpYyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zNC4wMCNDcnlvZ2VuaWMgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzUuMDAjU2x1ZGdlIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzYuMDAjU2V3YWdlIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzcuMDAjU3VibWVyc2libGUgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zOC4wMCNXYXRlciBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjM5LjAwI1dlbGwgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40MC4wMCNTdW1wIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDEuMDAjRG9zaW5nIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDIuMDAjQ2VudHJpZnVnYWwgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40My4wMCNDaXJjdWxhdGlvbiBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQ0LjAwI1JvdGFyeSBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQ1LjAwI1B1bXAgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQ2LjAwI0F4aWFsIHNwbGl0IHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQ3LjAwI0RlZXB3ZWxsIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQ4LjAwI0RpYXBocmFnbSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40OS4wMCNEb3VibGUgZGlhcGhyYWdtIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjUwLjAwI0R1cGxleCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41MS4wMCNHZWFyIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjUyLjAwI01ldGVyaW5nIG9yIGluamVjdGlvbiBvciBwcm9wb3J0aW9uaW5nIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjUzLjAwI1Byb2dyZXNzaXZlIGNhdml0eSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41NC4wMCNSYW0gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTUuMDAjUm90YXJ5IGNhbSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41Ni4wMCNSb3RhcnkgbG9iZSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41Ny4wMCNSb3RhdGluZyBwaXN0b24gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTguMDAjU2NyZXcgUHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTkuMDAjU2ltcGxleCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS42MC4wMCNTbGlkaW5nIHZhbmUgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNjEuMDAjVHJpcGxleCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS42Mi4wMCNXb3JtIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjAwLjAwI0NvbXByZXNzb3JzIzQwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjAxLjAwI0FpciBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wMi4wMCNBeGlhbCBmbG93IGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjAzLjAwI0RpYXBocmFnbSBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wNC4wMCNHYXMgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDUuMDAjTW90b3IgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDYuMDAjUmVjaXByb2NhdGluZyBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wNy4wMCNSZWZyaWdlcmFudCBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wOC4wMCNSb3RhcnkgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDkuMDAjU2NyZXcgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMTAuMDAjQ29tcHJlc3NvciBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMTEuMDAjQmFycmVsIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjEyLjAwI0NlbnRyaWZ1Z2FsIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjEzLjAwI0NvbWJpbmF0aW9uIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjE0LjAwI1NlbWkgcmFkaWFsIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjE1LjAwI1R1cmJvIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjE2LjAwI0NvbXByZXNzb3Iga2l0cyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNy4wMC4wMCNQdW1wIHBhcnRzIGFuZCBhY2Nlc3NvcmllcyM0MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNy4wMS4wMCNQdW1wIGNhc2luZ3MjNDAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTcuMDIuMDAjUHVtcCBwYWNraW5ncyM0MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNi4wMC4wMC4wMCNJbmR1c3RyaWFsIGZpbHRlcmluZyBhbmQgcHVyaWZpY2F0aW9uIzQwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjAwLjAwI0ZpbHRlcnMjNDAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDEuMDAjVmFjdXVtIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDIuMDAjV2F0ZXIgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wMy4wMCNEdXN0IGNvbGxlY3RvcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDQuMDAjT2lsIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDUuMDAjQWlyIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDYuMDAjRmlsdGVyaW5nIG1hY2hpbmVyeSM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wNy4wMCNGaWx0ZXIgbWVtYnJhbmVzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjA4LjAwI0JhZyBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjA5LjAwI0Fic29ycHRpb24gZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xMC4wMCNCYWcgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xMS4wMCNDb2FsZXNjaW5nIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTIuMDAjRWxlY3Ryb25pYyBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjEzLjAwI0Z1ZWwgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xNC4wMCNHYXMgcGlwZWxpbmUgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xNS4wMCNIeWRyYXVsaWMgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xNi4wMCNJbiBsaW5lIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTcuMDAjTGlnaHQgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xOC4wMCNNaWNyb2ZpYmVyIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTkuMDAjUGFuZWwgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4yMC4wMCNSYWRpYWwgZmluIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMjEuMDAjRmlsdGVyIEJhc2UjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMjIuMDAjRmlsdGVyIEZpbnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMjMuMDAjRnVlbCM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4yNC4wMCNQYWludCM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNi4wMC4wMCNQdXJpZmljYXRpb24jNDAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTYuMDEuMDAjQWlyIHNjcnViYmVycyM0MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNi4wMi4wMCNBaXIgY2xlYW5lcnMjNDAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTcuMDAuMDAjU2VwYXJhdG9ycyM0MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNy4wMS4wMCNDZW50cmlmdWdlcyM0MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNy4wMi4wMCNXZXQgc2NydWJiZXJzIzQwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE3LjAzLjAwI01pc3QgZWxpbWluYXRvcnMjNDAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTguMDAuMDAjRmlsdGVyIG1lZGlhIzQwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE2LjE4LjAxLjAwI01ldGFsIGZhYnJpYyBtZWRpYSM0MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xOC4wMi4wMCNQcmVzc2VkIGZlbHRzIzQwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE4LjAzLjAwI0ZpbHRlciBwYXBlcnMjNDAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTguMDUuMDAjRmlsdGVyIGNsb3RoIzQwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQxLjAwLjAwLjAwLjAwI0xhYm9yYXRvcnkgYW5kIE1lYXN1cmluZyBhbmQgT2JzZXJ2aW5nIGFuZCBUZXN0aW5nIEVxdWlwbWVudCM0MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4wMC4wMC4wMCNMYWJvcmF0b3J5IGFuZCBzY2llbnRpZmljIGVxdWlwbWVudCM0MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wMC4wMCNMYWJvcmF0b3J5IGJsZW5kaW5nIGFuZCBkaXNwZXJzaW5nIGFuZCBob21vZ2VuaXppbmcgYW5kIG1peGluZyBhbmQgc3RpcnJpbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjAxLjAwI01peGVycyBvciBibGVuZGVycyBvciBlbXVsc2lmaWVycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wMi4wMCNTdG9tYWNoZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjAzLjAwI0xhYm9yYXRvcnkgc3ByYXllcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDQuMDAjSG9tb2dlbmlzZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjA1LjAwI0ZyZW5jaCBwcmVzc3VyZSBjZWxscyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wNi4wMCNSb2xsZXIgbWl4ZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjA3LjAwI1JvdGF0b3JzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjA4LjAwI1ZpYnJhdG9ycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4xMC4wMCNNYWduZXRpYyBzcGluIGJhcnMgb3IgcmV0cmlldmVycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4xMS4wMCNTdGlycmluZyB0YWJsZXMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMTIuMDAjTXVsdGkgYmFuayBvciBmbG9jY3VsYXRpb24gZXF1aXBtZW50IzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjEzLjAwI1NoYWtlcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMTQuMDAjTGFib3JhdG9yeSBjZW50cmlmdWdlcyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4xNS4wMCNMaXF1aWQgbWVhc3VyaW5nIGNhbnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMTYuMDAjTGlxdWlkIGRpc3BlbnNlcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTYuMDAuMDAjTGFib3JhdG9yeSBmaXh0dXJlcyBhbmQgYWNjZXNzb3JpZXMjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTYuMDMuMDAjTGFib3JhdG9yeSBzdGFuZHMgb3IgY2xhbXBzIG9yIHRvbmdzIzQxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjA0LjAwI1NsaWRlIGNvbnRhaW5lcnMjNDEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTYuMDUuMDAjU2xpZGUgZHJ5aW5nIHBsYXRlcyM0MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNi4wNy4wMCNNaWNyb3NsaWRlIG1ha2luZyBlcXVpcG1lbnQjNDEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTYuMDguMDAjTWljcm9zbGlkZSBzdG9yYWdlIGVxdWlwbWVudCM0MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNi4wOS4wMCNTdGF0aWMgZWxpbWluYXRvcnMjNDEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTYuMTEuMDAjU2xpZGUgd2FybWVycyM0MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNy4wMC4wMCNMYWJvcmF0b3J5IGJvcmluZyBhbmQgZ3JpbmRpbmcgYW5kIGN1dHRpbmcgYW5kIGNydXNoaW5nIGFuZCBwcmVzc2luZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTcuMDEuMDAjTWlsbHMjNDEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTcuMDIuMDAjUGVzdGxlIG9yIG1vcnRhcnMjNDEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTcuMDMuMDAjVGlzc3VlIGdyaW5kZXJzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjA0LjAwI01pY3JvdG9tZXMjNDEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTcuMDUuMDAjQ3J1c2hlcnMgb3IgcHVsdmVyaXNlcnMjNDEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTcuMDYuMDAjRGlzaW50ZWdyYXRvcnMjNDEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTcuMDcuMDAjTGFib3JhdG9yeSBwcmVzc2VzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjAwLjAwI0xhYm9yYXRvcnkgZWxlY3Ryb24gYW5kIHNvbGlkIHN0YXRlIHBoeXNpY3MgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjAxLjAwI0VsZWN0cm9uIGd1bnMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDIuMDAjWCByYXkgZ2VuZXJhdG9ycyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wMy4wMCNDb3Vsb21ldGVycyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wNC4wMCNFbGVjdHJvc2NvcGVzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjA1LjAwI0ZsdXhtZXRlcnMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDYuMDAjTWFnbmV0b21ldGVycyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wNy4wMCNFbGVjdHJvbiBkaWZmcmFjdGlvbiBhcHBhcmF0dXMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDguMDAjTmV1dHJvbiBkaWZmcmFjdGlvbiBhcHBhcmF0dXMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDkuMDAjT3B0aWNhbCBkaWZmcmFjdGlvbiBhcHBhcmF0dXMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMTAuMDAjRGlmZnJhY3RvbWV0ZXJzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE5LjAwLjAwI0xhYm9yYXRvcnkgaW9uaWMgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjE5LjAxLjAwI0lvbiBzb3VyY2VzIzQxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE5LjAyLjAwI0lvbiBleGNoYW5nZSBhcHBhcmF0dXMjNDEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTkuMDMuMDAjSW9uIGltcGxhbnRhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDAuMDAjU2FtcGxpbmcgYW5kIHB1cmlmaWNhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDEuMDAjU2FtcGxlIGNoYW5nZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjAyLjAwI1NhbXBsZSBveGlkaXNlciM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wMy4wMCNTYW1wbGUgcHJlcGFyYXRpb24gbGluZSM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wNC4wMCNTYW1wbGUgcHJlcGFyYXRpb24gYm9tYnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDUuMDAjV2F0ZXIgc2FtcGxlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDYuMDAjQWlyIHNhbXBsZXJzIG9yIGNvbGxlY3RvcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDcuMDAjUmVhZ2VudCBraXRzIGZvciB1c2Ugd2l0aCBhaXIgc2FtcGxlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDguMDAjRmlsdGVycyBvciBvdGhlciBzcGFyZSBwYXJ0cyBmb3Igc2FtcGxlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDkuMDAjRHVzdCBmYWxsIGhvbGRlcnMgb3IgamFycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xMS4wMCNTdWxwaHVyIGRpb3hpZGUgb3Igc21va2Ugc2FtcGxlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTIuMDAjU2FtcGxlIGFwcGxpY2F0b3JzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjEzLjAwI1BsYW50IHNhbXBsZXMgYW5hbHlzaXMgZXF1aXBtZW50IzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjE0LjAwI0FpciBwb2xsdXRhbnQgc2FtcGxlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTUuMDAjV2F0ZXIgcHVyaWZpY2F0aW9uIHJlYWdlbnRzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjE2LjAwI0RlaW9uaXNhdGlvbiBvciBkZW1pbmVyYWxpc2F0aW9uIGVxdWlwbWVudCM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xNy4wMCNCYXNlIGV4Y2hhbmdlIGVxdWlwbWVudCM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xOC4wMCNSZXZlcnNlIG9zbW9zaXMgZXF1aXBtZW50IzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjE5LjAwI1VsdHJhIHZpb2xldCB3YXRlciBwdXJpZmljYXRpb24gdW5pdHMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMjAuMDAjVWx0cmEgcHVyZSB3YXRlciBzeXN0ZW1zIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjIxLjAwI1dhdGVyIGFuYWx5c2lzIHN5c3RlbXMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMjIuMDAjRGVoeWRyYXRvcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMjMuMDAjRGVveGlkZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjI0LjAwI0Rpc3NvbHZlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMjUuMDAjU3BlY2ltZW4gaG9sZGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yNi4wMCNTcGVjaW1lbiBjb2xsZWN0b3JzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjI3LjAwI1NhbXBsZSBob2xkZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjI4LjAwI0x1YnJpY2FudCBzYW1wbGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wMC4wMCNMYWJvcmF0b3J5IGZlcm1lbnRhdGlvbiBhbmQgaW5jdWJhdGluZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDEuMDAjU3RhbmRhcmQgZmVybWVudGF0aW9uIHVuaXRzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjAyLjAwI0NvbnRpbnVvdXMgY3VsdHVyZSBhcHBhcmF0dXMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDMuMDAjQW5hZXJvYmljIGphcnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDQuMDAjRGlnZXN0aW9uIHN5c3RlbXMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDUuMDAjV2F0ZXIgamFja2V0ZWQgaW5jdWJhdG9ycyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wNi4wMCNDTzIgaW5jdWJhdG9ycyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wNy4wMCNUaXNzdWUgY3VsdHVyZSBpbmN1YmF0b3JzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjA4LjAwI0luY3ViYXRvciBvdmVucyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wOS4wMCNDb29sZWQgaW5jdWJhdG9ycyAoQk9EKSM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4xMC4wMCNTaGFraW5nIGluY3ViYXRvcnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMTEuMDAjSW5zcGlzc2F0b3JzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjEyLjAwI1BsYXRlIGluY3ViYXRvcnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMTMuMDAjSW4gdml0cm8gY3VsdHVyZSBlcXVpcG1lbnQjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMTQuMDAjQmFjdGVyaWEgZXF1aXBtZW50IzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjAwLjAwI0xhYm9yYXRvcnkgaGVhdGluZyBhbmQgZHJ5aW5nIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wMS4wMCNHYXMgYnVybmVycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wMi4wMCNTcGlyaXQgYnVybmVycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wMy4wMCNMYWJvcmF0b3J5IGluY2luZXJhdG9ycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wNC4wMCNMYWJvcmF0b3J5IGhlYXRlcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDUuMDAjTWFudGxlcyBvciB0YXBlcyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wNi4wMCNIb3QgcGxhdGVzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjA3LjAwI1dhcm1pbmcgY2FiaW5ldHMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDguMDAjRHJ5aW5nIG92ZW5zIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjA5LjAwI0luZHVjdGlvbiBkcnllcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTAuMDAjSW5mcmFyZWQgZHJ5ZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjExLjAwI1NwcmF5IGRyeWVycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xMi4wMCNIb3QgYWlyIGJsb3dlcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTMuMDAjRHJ5aW5nIGNhYmluZXRzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjE0LjAwI0ZyZWV6ZSBkcnllcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTUuMDAjTGFib3JhdG9yeSBmdXJuYWNlcyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xNi4wMCNBZ2Vpbmcgb3ZlbnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTguMDAjUXVhcnR6IG92ZW4gcG90cyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xOS4wMCNNaWNyb3dhdmUgb3IgcmFkaWFudCBoZWF0IG92ZW5zIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjIwLjAwI0Rlc2ljY2F0b3JzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjIxLjAwI1RlbXBlcmF0dXJlIGN5Y2xpbmcgY2hhbWJlcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDAuMDAjTGFib3JhdG9yeSBlbnRvbW9sb2dpY2FsIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDEuMDAjSW5zZWN0IGNvbnRhaW5lcnMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDIuMDAjUmVhcmluZyBmYWNpbGl0aWVzIGZvciBlbnRvbW9sb2d5IzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjAzLjAwI0ZhYnJpYyBvciBuZXR0aW5nIGZvciBlbnRvbW9sb2d5IzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjA0LjAwI0VudG9tb2xvZ2ljYWwgcGlubmluZyBlcXVpcG1lbnQjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDUuMDAjRW50b21vbG9naWNhbCBtb3VudGluZyBtYXRlcmlhbHMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDYuMDAjRW50b21vbG9naWNhbCB0cmF5cyM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wNy4wMCNFbnRvbW9sb2dpY2FsIGNhdGNoaW5nIGVxdWlwbWVudCM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wOC4wMCNFbnRvbW9sb2dpY2FsIGFzcGlyYXRvcnMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDkuMDAjRW50b21vbG9naWNhbCBkaXBwZXJzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjEwLjAwI0VudG9tb2xvZ2ljYWwgbW9ub2N1cHMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMTEuMDAjRW50b21vbG9naWNhbCBzdGlja3kgdHJhcHMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMTIuMDAjSW5zZWN0IHRlc3Qga2l0cyM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4xMy4wMCNFbnRvbW9sb2dpY2FsIGRpc3BsYXkgdW5pdHMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjYuMDAuMDAjQW5pbWFsIGxhYm9yYXRvcnkgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNi4wMS4wMCNDYWdlcyBmb3Igc21hbGwgYW5pbWFscyM0MS4xMC4yNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNi4wMi4wMCNBcXVhcmlhIGVxdWlwbWVudCM0MS4xMC4yNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNi4wMy4wMCNBbmltYWwgaWRlbnRpZmljYXRpb24gc3VwcGxpZXMjNDEuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjYuMDQuMDAjQW5pbWFsIGNhdGNoaW5nIGRldmljZXMjNDEuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjYuMDUuMDAjRmlzaCBhZXJhdGlvbiBzeXN0ZW1zIzQxLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI2LjA2LjAwI0FuaW1hbCBmZWVkaW5nIG5lZWRsZXMjNDEuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjcuMDAuMDAjQ3J5c3RhbGxvZ3JhcGh5IGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wMS4wMCNDcnlzdGFsIGxhdHRpY2UgbW9kZWxzIzQxLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI3LjAyLjAwI1NjaW50aWxsYXRpb24gY3J5c3RhbCBhc3NlbWJsaWVzIzQxLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI3LjAzLjAwI0xpZ2h0IHNjYXR0ZXJpbmcgZXF1aXBtZW50IzQxLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI3LjA0LjAwI1ggcmF5IGRpZmZyYWN0aW9uIGVxdWlwbWVudCM0MS4xMC4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wNS4wMCNDcnlzdGFsbGlzZXJzIzQxLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI3LjA2LjAwI0NyeXN0YWwgZ3Jvd2luZyBlcXVpcG1lbnQjNDEuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMDAuMDAjSGlzdG9sb2d5IGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4wMS4wMCNUaXNzdWUgZW1iZWRkaW5nIHN0YXRpb25zIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjAyLjAwI0VtYmVkZGluZyBtb2xkcyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4wMy4wMCNFbWJlZGRpbmcgY2Fwc3VsZXMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMDQuMDAjRW1iZWRkaW5nIGNvbXBvdW5kcyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4wNS4wMCNIaXN0b2xvZ2ljYWwgc3RhaW5pbmcgYXBwYXJhdHVzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjA5LjAwI1Rpc3N1ZSBwcm9jZXNzb3JzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjEwLjAwI1Rpc3N1ZSBjdWx0dXJlIGFwcGFyYXR1cyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4xMS4wMCNIaXN0b2xvZ2ljYWwga25pdmVzIG9yIGtuaWZlIGhvbGRlcnMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMTIuMDAjSGlzdG9sb2dpY2FsIGdsYXNzIGtuaWZlIG1ha2VycyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4xMy4wMCNIaXN0b2xvZ2ljYWwgaG9uZXMgb3Igc3RyYXBzIG9yIGNvbXBvdW5kcyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4xNC4wMCNVbHRyYXNvbmljIGRpc2ludGVncmF0b3JzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjAwLjAwI0xhYm9yYXRvcnkgY29vbGluZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDEuMDAjUmVmcmlnZXJhdGVkIGNvb2xpbmcgcGxhdGUgcHJvYmVzIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjAyLjAwI0ZyZWV6aW5nIHNwcmF5IGFlcm9zb2xzIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjAzLjAwI0NyeW9zdGF0cyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wNC4wMCNGYW4gY2lyY3VsYXRlZCBvdmVucyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wNS4wMCNVbHRyYSBjb2xkIGNhYmluZXRzIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjA2LjAwI0NyeW9nZW5pYyBmcmVlemVycyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wNy4wMCNDaGlsbGluZyB1bml0cyBvciBjb2xkIHdhdGVyIGNpcmN1bGF0aW9uIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjA4LjAwI1JlZnJpZ2VyYXRlZCBjb29saW5nIG1vZHVsZXMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDkuMDAjQ2FkYXZlciBzdG9yYWdlIHJlZnJpZ2VyYXRvcnMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDAuMDAjTGFib3JhdG9yeSBzdXBwbGllcyM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wMS4wMCNUZXN0IHR1YmVzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjAzLjAwI1BpcGV0dGVzIG9yIGFjY2Vzc29yaWVzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjA0LjAwI0ZsYXNrcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wNS4wMCNCZWFrZXJzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjA2LjAwI1N0aXJyaW5nIHJvZHMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDcuMDAjTGFib3JhdG9yeSBvciBzYW1wbGluZyBzeXJpbmdlcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wOC4wMCNEZXNpY2NhbnRzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjA5LjAwI1dhdGNoIGdsYXNzZXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTAuMDAjQnVyZXRzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjExLjAwI01lYXN1cmluZyBjeWxpbmRlciM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4xMi4wMCNMYWJvcmF0b3J5IGRpc2hlcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4xMy4wMCNTbGlkZXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTQuMDAjU3RvcHBlcnMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTUuMDAjVHViaW5nIGNvbm5lY3RvcnMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTYuMDAjTGFib3JhdG9yeSBjYXNlcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4xNy4wMCNMYWJvcmF0b3J5IHNjb29wcyBvciBzcGF0dWxhcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMi4wMC4wMCNMYWJvcmF0b3J5IGNsZWFuaW5nIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMi4wMS4wMCNDaGVtaWNhbCBlbmdpbmVlcmluZyB3YXNoZXJzIzQxLjEwLjMyLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMyLjAyLjAwI0xhYm9yYXRvcnkgd2FzaGluZyBtYWNoaW5lcyM0MS4xMC4zMi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMi4wMy4wMCNQaXBldHRlIHdhc2hlcnMjNDEuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzIuMDQuMDAjVWx0cmFzb25pYyBjbGVhbmVycyM0MS4xMC4zMi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wMC4wMCNGbHVpZCBtZWNoYW5pY3MgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjAxLjAwI0xpcXVpZCBzY2ludGlsbGF0aW9uIGNvdW50ZXJzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjAyLjAwI0JhdHRlcnkgYWNpZCBoeWRyb21ldGVycyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wMy4wMCNEZW5zaXRvbWV0ZXJzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjA0LjAwI1ZhY3V1bSBvdmVucyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wNS4wMCNIaWdoIHZhY3V1bSBlcXVpcG1lbnQjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDYuMDAjUG5ldW1hdGljIHZhY3V1bSBlcXVpcG1lbnQjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDcuMDAjVmFjdXVtIG9yIG1lcmN1cnkgdmFwb3VyIGVxdWlwbWVudCM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wOC4wMCNIaWdoIHZhY3V1bSBjb21idXN0aW9uIGFwcGFyYXR1cyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wOS4wMCNGbG93IGluamVjdGlvbiBhbmFseXNpcyBlcXVpcG1lbnQjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMTAuMDAjR2FzIG9yIHZhcG91ciBjb25jZW50cmF0aW9uIG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4xMS4wMCNNYW5vbWV0ZXJzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjEyLjAwI1Zpc2Nvc2ltZXRlcnMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMTMuMDAjRGVwdGggaW5kaWNhdG9ycyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4xNC4wMCNNaWNyb3Njb3BpYyBzdHJ1Y3R1cmUgZXN0aW1hdGlvbiBhcHBhcmF0dXMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMTUuMDAjU29sdXRpb24gc3RyZW5ndGggZXN0aW1hdGlvbiBhcHBhcmF0dXMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzQuMDAuMDAjTGFib3JhdG9yeSBlbnZpcm9ubWVudGFsIGNvbmRpdGlvbmluZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzQuMDEuMDAjQ29udGFtaW5hdGlvbiBjb250cm9sIHNjcmVlbnMjNDEuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzQuMDIuMDAjRW52aXJvbm1lbnRhbCBjaGFtYmVycyM0MS4xMC4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNC4wMy4wMCNNaWNyb2Jpb2xvZ2ljYWwgYWlyY29udHJvbCM0MS4xMC4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNC4wNC4wMCNHcm93dGggY2hhbWJlcnMjNDEuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzQuMDUuMDAjV2FsayBpbiBjaGFtYmVycyM0MS4xMC4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNC4wNi4wMCNHbG92ZSBib3hlcyM0MS4xMC4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNS4wMC4wMCNMYWJvcmF0b3J5IHZlbnRpbGF0aW5nIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNS4wMS4wMCNFYnVsaW9tZXRlciM0MS4xMC4zNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNS4wMi4wMCNGdW1lIGhvb2RzIzQxLjEwLjM1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM1LjAzLjAwI0Z1bWUgY3VwYm9hcmRzIzQxLjEwLjM1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM1LjA0LjAwI0xhbWluYXIgZmxvdyBjYWJpbmV0cyBvciBzdGF0aW9ucyM0MS4xMC4zNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wMC4wMCNMYWJvcmF0b3J5IGRlY2FudGluZyBhbmQgZGlzdGlsbGluZyBhbmQgZXZhcG9yYXRpbmcgYW5kIGZpbHRlcmluZyBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjAxLjAwI0ZsYXNrIG9yIHJldG9ydCB1bml0cyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wMi4wMCNCaSBkaXN0aWxsYXRpb24gdW5pdHMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDMuMDAjRXZhcG9yYXRvcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDQuMDAjVmFjdXVtIGV2YXBvcmF0b3JzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjA1LjAwI0V4dHJhY3RpbmcgZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjA2LjAwI0xpbmUgZmlsdGVycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wNy4wMCNHZWwgZmlsdHJhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDguMDAjVWx0cmEgZmlsdHJhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDkuMDAjU2ludGVyZWQgY2VsbCBmaWx0ZXJzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjEwLjAwI1RoaW4gY2hhbm5lbCBmaWx0cmF0aW9uIGVxdWlwbWVudCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xMS4wMCNSZXZlcnNlIG9zbW9zaXMgZmlsdHJhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTIuMDAjTW9sZWN1bGFyIGZpbHRyYXRpb24gZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjEzLjAwI0NhcnRyaWRnZSBlbGVtZW50IGZpbHRlcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTQuMDAjRmlsdGVyIGhvbGRlcnMgb3IgY3ljbG9uZXMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTUuMDAjTXVsdGkgc2hlZXQgb3IgcHJlc3Mgb3IgZmlsdGVyIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjE2LjAwI0FpciBmaWx0cmF0aW9uIHN5c3RlbXMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTcuMDAjSGVwYSBmaWx0ZXJzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjE4LjAwI0ZsdWlkIHByZXNzZXMgZmlsdGVyIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjE5LjAwI1NlZGltZW50b2xvZ2ljYWwgYW5hbHl6aW5nIHVuaXQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjAuMDAjTGFib3JhdG9yeSBzZXBhcmF0b3JzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjIxLjAwI0xhYm9yYXRvcnkgc2lmdGluZyBlcXVpcG1lbnQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjIuMDAjVGVzdCBzaWV2ZXMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjMuMDAjTGFib3JhdG9yeSBzY3J1YmJlcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjQuMDAjVGl0cmF0aW9uIGVxdWlwbWVudCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yNS4wMCNMYWJvcmF0b3J5IGRpbHV0ZXJzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjI2LjAwI0ZyYWN0aW9uYXRpb24gYXBwYXJhdHVzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjI3LjAwI0Rpc3RpbGxhdGlvbiBwaXBpbmdzIG9yIGNvbHVtbnMgb3IgZml0dGluZ3MjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjguMDAjUmVmbHV4IGNvbXBvbmVudHMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjkuMDAjSGVhdCBleGNoYW5nZSBjb25kZW5zZXJzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjAwLjAwI0xhYm9yYXRvcnkgYmF0aHMjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzcuMDEuMDAjQ2lyY3VsYXRpbmcgYmF0aHMjNDEuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzcuMDIuMDAjVGhlcm1vc3RhdGljIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjAzLjAwI011bHRpcGxlIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjA0LjAwI0Jpb2xvZ2ljYWwgYmF0aHMjNDEuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzcuMDUuMDAjT3JnYW4gYmF0aHMjNDEuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzcuMDYuMDAjV2F0ZXIgYmF0aHMjNDEuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzcuMDcuMDAjT2lsIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjA4LjAwI1NhbmQgYmF0aHMjNDEuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzcuMDkuMDAjUmVmcmlnZXJhdGVkIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjAwLjAwLjAwI01lYXN1cmluZyBhbmQgb2JzZXJ2aW5nIGFuZCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjAwLjAwI1dlaWdodCBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDEuMDAjRWxlY3Ryb25pYyB0b3Bsb2FkaW5nIGJhbGFuY2VzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjAyLjAwI0xhYm9yYXRvcnkgYmFsYW5jZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDMuMDAjTWVjaGFuaWNhbCBiYWxhbmNlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wNC4wMCNQdWxsIHNwcmluZyBiYWxhbmNlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wNS4wMCNDYWxpYnJhdGlvbiB3ZWlnaHRzIG9yIHdlaWdodCBzZXRzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjA2LjAwI0FuaW1hbCB3ZWlnaGluZyBzY2FsZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDcuMDAjQmVuY2ggc2NhbGVzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjA4LjAwI0JvZHl3ZWlnaHQgbWVhc3VyaW5nIHNjYWxlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wOS4wMCNGbG9vciBvciBwbGF0Zm9ybSBzY2FsZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMTAuMDAjUG9zdGFsIHNjYWxlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4xMS4wMCNUcnVjayBvciByYWlsIHNjYWxlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wMC4wMCNMZW5ndGggYW5kIHRoaWNrbmVzcyBhbmQgZGlzdGFuY2UgbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjAxLjAwI01pY3JvbWV0ZXJzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjAyLjAwI1BlZG9tZXRlcnMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDMuMDAjUmFuZ2VmaW5kZXJzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjA0LjAwI1J1bGVycyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wNS4wMCNTdHJhaW4gZ2F1Z2VzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjA2LjAwI1RlbGx1cm9tZXRlcnMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDcuMDAjVGhyZWFkIGNvdW50ZXJzIG9yIGdhdWdlcyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wOC4wMCNDYWxpcGVycyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4xMy4wMCNEaXN0YW5jZSBtZXRlcnMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTQuMDAjSGVpZ2h0IGdhdWdlcyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4xNS4wMCNMYXNlciBtZWFzdXJpbmcgc3lzdGVtcyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4xNi4wMCNNZWFzdXJpbmcgd2hlZWxzIGZvciBkaXN0YW5jZSM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4xNy4wMCNGZWVsZXIgZ2F1Z2VzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjE4LjAwI0dhZ2UgYmxvY2sgc2V0IzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjE5LjAwI0dvIG9yIG5vIGdvIGdhdWdlIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjIwLjAwI0V0YWxvbiB3ZWRnZSM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wMC4wMCNWaWV3aW5nIGFuZCBvYnNlcnZpbmcgaW5zdHJ1bWVudHMgYW5kIGFjY2Vzc29yaWVzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjAxLjAwI0lvbiBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wMi4wMCNNb25vY3VsYXIgbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDMuMDAjU3RlcmVvIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjA0LjAwI0lsbHVtaW5hdG9ycyBmb3IgbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDUuMDAjT2JqZWN0aXZlcyBmb3IgbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDYuMDAjUGhvdG8gYXR0YWNobWVudHMgZm9yIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjA3LjAwI1Byb2ZpbGUgcHJvamVjdG9ycyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wOC4wMCNWaWRlbyBhdHRhY2htZW50cyBmb3IgbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDkuMDAjQmlub2N1bGFyIG1pY3Jvc2NvcGUjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMTAuMDAjQ29tYmluYXRpb24gZWxlY3Ryb24gYW5kIGxpZ2h0IG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjExLjAwI0VsZWN0cm9uIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjEyLjAwI0ludmVydGVkIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjEzLjAwI01hZ25pZmllcnMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMTQuMDAjTG91cGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjE1LjAwI1RlbGVzY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMTYuMDAjQm9yZXNjb3BlIGluc3BlY3Rpb24gZXF1aXBtZW50IzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjE3LjAwI0Jpbm9jdWxhcnMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDAuMDAjTm9uIGRlc3RydWN0aXZlIGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wMS4wMCNFZGR5IGN1cnJlbnQgZXhhbWluYXRpb24gZXF1aXBtZW50IzQxLjExLjE4LjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjAyLjAwI0xpcXVpZCBwZW5ldHJhbnQgZXhhbWluYXRpb24gZXF1aXBtZW50IzQxLjExLjE4LjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjAzLjAwI01hZ25ldGljIHBhcnRpY2xlIGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wNC4wMCNVbHRyYXNvbmljIGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wNS4wMCNDTyA2MCByYWRpb2dyYXBoeSBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDYuMDAjQ1MgMTM3IHJhZGlvZ3JhcGh5IGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wNy4wMCNJUiAxOTIgcmFkaW9ncmFwaHkgZXhhbWluYXRpb24gZXF1aXBtZW50IzQxLjExLjE4LjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjA4LjAwI1ggcmF5IHJhZGlvZ3JhcGh5IGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wMC4wMCNJbmRpY2F0aW5nIGFuZCByZWNvcmRpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDEuMDAjQ291bnRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDIuMDAjRWxlY3Ryb25pYyBjb3VudGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wMy4wMCNNZXRhbCBkZXRlY3RvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDQuMDAjRWxlY3Ryb25pYyBjb2x1bW5zIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjA1LjAwI0VsZWN0cm9uaWMgbWVhc3VyaW5nIHByb2JlcyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wNi4wMCNDaGFydCByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDcuMDAjRGlnaXRhbCByZWFkb3V0IHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wOC4wMCNHcmFwaGljIHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wOS4wMCNNYWduZXRpYyB0YXBlIHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xMC4wMCNNdWx0aXBlbiByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTEuMDAjT3NjaWxsb2dyYXBoaWMgcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjEyLjAwI1BoeXNpb2xvZ2ljYWwgcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjEzLjAwI1BvaW50IHBsb3R0aW5nIHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xNC4wMCNTZXJ2byByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTUuMDAjQmkgbWV0YWxsaWMgc2Vuc29ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xNi4wMCNOb24gY29udGFjdCBzZW5zb3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjE3LjAwI0RpZ2l0YWwgdGVzdGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xOC4wMCNHeXJvc2NvcGljIGluc3RydW1lbnRzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjE5LjAwI0RldGVjdGlvbiBhcHBhcmF0dXMgZm9yIG5vbiBtZXRhbGljIG9iamVjdHMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjAuMDAjQ29vcmRpbmF0ZSBtZWFzdXJpbmcgbWFjaGluZXMgKENNTSkjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjEuMDAjU3BlZWQgc2Vuc29ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yMi4wMCNMYW1wIGZhaWx1cmUgc2Vuc29yIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjIzLjAwI1ByZSBpZ25pdGlvbiBrbm9jayBzZW5zb3IjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjQuMDAjT3h5Z2VuIHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjUuMDAjU3BlZWQgc2Vuc29ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yNi4wMCNQcm94aW1pdHkgc2Vuc29ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yNy4wMCNQcmVzc3VyZSBzZW5zb3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjI4LjAwI0N1cnJlbnQgc2Vuc29ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wMC4wMCNMaWdodCBhbmQgd2F2ZSBhbmQgc291bmQgZ2VuZXJhdGluZyBhbmQgIG1lYXN1cmluZyBlcXVpcG1lbnQjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDEuMDAjTGlnaHQgYWJzb3JwdGlvbm1ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wMi4wMCNBY291c3RpYyB0ZXN0aW5nIHJvb21zIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjAzLjAwI0FuZWNob2ljIGNoYW1iZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjA0LjAwI0ZyZXF1ZW5jeSBhbmFseXplcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDUuMDAjRnJlcXVlbmN5IGNvdW50ZXJzIG9yIHRpbWVyIG9yIGRpdmlkZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjA2LjAwI0VsZWN0cmljYWwgZnJlcXVlbmN5IG1ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wNy4wMCNJbnRlcmZlcm9tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDguMDAjTGFzZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjA5LjAwI0xpZ2h0bWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjEwLjAwI0x1eG1ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xMS4wMCNPcHRpY2FsIGNhbGxpYnJhdGlvbiBzZXRzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjEyLjAwI1Bob3RvbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjEzLjAwI1BvbGFyaW1ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xNC4wMCNQb2xhcmlzY29wZXMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTUuMDAjUmVmbGVjdG9tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTYuMDAjU29uYXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjE3LjAwI1Nvbm9tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTguMDAjU291bmQgbWVhc3VyaW5nIGFwcGFyYXR1cyBvciBkZWNpYmVsIG1ldGVyIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjE5LjAwI1NwZWN0cm9mbHVvcmltZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjAuMDAjU3BlY3Ryb2dyYXBocyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4yMS4wMCNTcGVjdHJvbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjIyLjAwI01hc3Mgc3BlY3Ryb21ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4yMy4wMCNQcm90b24gc3BlY3Ryb21ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4yNC4wMCNTcGVjdHJvcGhvdG9tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjUuMDAjU3Ryb2Jvc2NvcGVzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjI2LjAwI1NvdW5kIHZlbG9jaXR5IGFuYWx5emVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4yNy4wMCNUaGlja25lc3MgbWVhc3VyaW5nIGRldmljZXMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjEuMDAuMDAjVHJhbnNkdWNlcnMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjEuMDEuMDAjUGllem8gZWxlY3RyaWMgY3J5c3RhbHMjNDEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjEuMDIuMDAjU3RyYWluIGdhdWdlcyM0MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMS4wMy4wMCNGaWJlciBzZW5zb3JzIzQxLjExLjIxLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjAwLjAwI1RlbXBlcmF0dXJlIGFuZCBoZWF0IG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wMS4wMCNDYWxvcmltZXRlcnMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDIuMDAjSGVhdCB0cmFjaW5nIGVxdWlwbWVudCM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wMy4wMCNNZWx0aW5nIHBvaW50IHJlY29yZGVycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wNC4wMCNQeXJvbWV0ZXJzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjA1LjAwI1RlbXBlcmF0dXJlIHJlZ3VsYXRvcnMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDYuMDAjVGhlcm1vY291cGxlcyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wNy4wMCNUaGVybW9ncmFwaHMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDkuMDAjVGhlcm1vc3RhdHMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMTAuMDAjUmVtb3RlIHJlYWRpbmcgdGhlcm1vbWV0ZXJzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjExLjAwI1Jlc2lzdGFuY2UgdGhlcm1vbWV0ZXJzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjEyLjAwI1N1cmZhY2UgdGhlcm1vbWV0ZXJzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjEzLjAwI0hhbmRoZWxkIHRoZXJtb21ldGVyIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIzLjAwLjAwI0h1bWlkaXR5IG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMy4wMS4wMCNIeWdyb21ldGVycyM0MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMy4wMi4wMCNQc3ljaHJvbWV0ZXJzIzQxLjExLjIzLjAwLjAwCi11bnNwc2M3IzQxLjExLjIzLjAzLjAwI1RlbXBlcmF0dXJlIGh1bWlkaXR5IHRlc3RlcnMjNDEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjQuMDAuMDAjUHJlc3N1cmUgbWVhc3VyaW5nIGFuZCBjb250cm9sIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjAxLjAwI0RlcHRoIGdhdWdlcyM0MS4xMS4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wMi4wMCNNYW5vc3RhdHMjNDEuMTEuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjQuMDMuMDAjUHJlc3N1cmUgcmVhZGluZyBpbmRpY2F0b3JzIzQxLjExLjI0LjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjA0LjAwI1ByZXNzdXJlIHJlZ3VsYXRvciM0MS4xMS4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wNS4wMCNQcmVzc3VyZSBvciB2YWN1dW0gcmVjb3JkZXJzIzQxLjExLjI0LjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjA2LjAwI1ZhY3V1bSBnYXVnZXMjNDEuMTEuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjQuMDcuMDAjTGlxdWlkIGxldmVsIGNvbnRyb2xzIG9yIGluc3RydW1lbnRzIzQxLjExLjI0LjAwLjAwCi11bnNwc2M3IzQxLjExLjI1LjAwLjAwI0Zsb3cgbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjI1LjAxLjAwI0Zsb3dtZXRlcnMjNDEuMTEuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjUuMDIuMDAjUmhlb21ldGVycyM0MS4xMS4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNS4wMy4wMCNSb3RhbWV0ZXJzIzQxLjExLjI1LjAwLjAwCi11bnNwc2M3IzQxLjExLjI1LjA0LjAwI1dhdGVyIG1ldGVycyM0MS4xMS4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNS4wNS4wMCNXYXRlciBtZXRlciBzcGFyZXMjNDEuMTEuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjUuMDYuMDAjVmVudHVyaXMjNDEuMTEuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjcuMDAuMDAjU2VlZCBhbmQgZmVlZCBlcXVpcG1lbnQjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjcuMDEuMDAjR3JhaW4gYW5hbHl6ZXJzIzQxLjExLjI3LjAwLjAwCi11bnNwc2M3IzQxLjExLjI3LjAyLjAwI1NlZWQgY291bnRlcnMjNDEuMTEuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjcuMDMuMDAjRmliZXIgYXBwYXJhdHVzIGZvciBmZWVkIHNhbXBsZSBhbmFseXNpcyM0MS4xMS4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOC4wMC4wMCNUcmFuc3BvcnRhdGlvbiByZWxhdGVkIGVxdWlwbWVudCBhbmQgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjguMDEuMDAjU3BlZWRvbWV0ZXJzIzQxLjExLjI4LjAwLjAwCi11bnNwc2M3IzQxLjExLjI4LjAyLjAwI1RhY2hvbWV0ZXJzIzQxLjExLjI4LjAwLjAwCi11bnNwc2M3IzQxLjExLjI5LjAwLjAwI05hdmlnYXRpb25hbCBlcXVpcG1lbnQgYW5kIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjI5LjAxLjAwI0RpcmVjdGlvbiBmaW5kaW5nIGNvbXBhc3NlcyM0MS4xMS4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOS4wMi4wMCNSYWRpbyBuYXZpZ2F0aW9uIGluc3RydW1lbnRzIzQxLjExLjI5LjAwLjAwCi11bnNwc2M3IzQxLjExLjI5LjAzLjAwI1NleHRhbnRzIzQxLjExLjI5LjAwLjAwCi11bnNwc2M3IzQxLjExLjI5LjA0LjAwI0NvbXBsZXggY29udHJvbGxpbmcgZGV2aWNlcyM0MS4xMS4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wMC4wMCNDaGVtaWNhbCBldmFsdWF0aW9uIGluc3RydW1lbnRzIGFuZCBzdXBwbGllcyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wMS4wMCNEaWdpdGFsIGFuYWx5emVyIGNvbnRyb2xsZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjAyLjAwI0NoZW1pbHVtaW5lc2NlbmNlIG9yIGJpb2x1bWluZXNjZW5jZSBhbmFseXplcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDMuMDAjRWxlY3Ryb2dyYXZpbWV0cnkgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjA0LjAwI0ZsYW1lIGlvbml6YXRpb24gYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjA1LjAwI0lvbiBhbmFseXplcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDYuMDAjUmFkaW9tZXRyeSBhbmFseXplcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDcuMDAjUmFuZG9tIGFjY2VzcyBhbmFseXplcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDguMDAjQ2ludGlncmFwaGljIGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wOS4wMCNUaGVybWFsIGRpZmZlcmVudGlhbCBhbmFseXplcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTAuMDAjVGhlcm1vIGdyYXZpbWV0cnkgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjExLjAwI0Nocm9tYXRvZ3JhcGhpYyBkZXRlY3RvcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTIuMDAjQ2hyb21hdG9ncmFwaGljIHNjYW5uZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjEzLjAwI0dhcyBjaHJvbWF0b2dyYXBocyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xNC4wMCNJb24gY2hyb21hdG9ncmFwaHMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTUuMDAjTGlxdWlkIGNocm9tYXRvZ3JhcGhzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjE2LjAwI1RoaW5sYXllciBjaHJvbWF0b2dyYXBocyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xOC4wMCNIaWdoIHByZXNzdXJlIGxpcXVpZCBjaHJvbWF0b2dyYXBoIGNocm9tYXRvZ3JhcGh5IzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjE5LjAwI0hpZ2ggcHJlc3N1cmUgdGhpbiBsYXllciBjaHJvbWF0b2dyYXBoIChUTEMpIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjIwLjAwI0NvbG9yaW1ldGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yMS4wMCNDb25kdWN0aW1ldHJpYyBpbnN0cnVtZW50cyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yMi4wMCNGbHVvcmltZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjMuMDAjR2VsIHBhcnRpdGlvbiBlcXVpcG1lbnQjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjQuMDAjSHlkcm9tZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjUuMDAjTW9ub2Nocm9tYXRvcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjYuMDAjTmVwaGVsb21ldGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yNy4wMCNPc21vbWV0ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjI4LjAwI3BIIG1ldGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yOS4wMCNQb2xhcm9ncmFwaHMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMzAuMDAjUmFkaW9jaHJvbWF0b2dyYXBoaWMgc2Nhbm5lciM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4zMS4wMCNTYWNjaGFyb21ldGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4zMi4wMCNTYWxpbml0eSBtZXRlciM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4zMy4wMCNWb2x1bWV0ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjAwLjAwI0dhcyBhbmFseXplcnMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDEuMDAjQXV0b21vdGl2ZSBleGhhdXN0IGVtaXNzaW9uIGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wMi4wMCNDYXRhbHl0aWMgY29tYnVzdGlvbiBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDMuMDAjQ2hlbWljYWwgYWJzb3JwdGlvbiBnYXMgYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjA0LjAwI0V4cGxvc2ltZXRlcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDUuMDAjSHlkcm9jYXJib25zIGFuYWx5emVycyBvciBkZXRlY3RvcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDYuMDAjSW5mcmEgcmVkIG9yIHVsdHJhIHZpb2xldCBhYnNvcnB0aW9uIGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wNy4wMCNOaXRyb2dlbiBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDguMDAjTml0cm9nZW4gb3hpZGUgYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjA5LjAwI09SU0FUIGVxdWlwbWVudCM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4xMC4wMCNPeHlnZW4gZ2FzIGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4xMS4wMCNPem9uZSBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTIuMDAjUGFyYW1hZ25ldGljIHN1c2NlcHRpYmlsaXR5IGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4xMy4wMCNTdWxmdXIgZGlveGlkZSBhbmFseXplcnMgb3IgZGV0ZWN0b3JzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjE0LjAwI1RoZXJtYWwgY29uZHVjdGl2aXR5IGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4xNS4wMCNSYWRvbiBkZXRlY3RvcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTYuMDAjR2FzIGRldGVjdG9yIHR1YmVzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjAwLjAwI0xpcXVpZCBhbmQgc29saWQgYW5hbHl6ZXJzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjAxLjAwI0FjaWQgb3IgYmFzZSBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMDIuMDAjQWxidW1pbm9tZXRlcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMDMuMDAjQW1pbm8gYWNpZCBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMDQuMDAjQmF1eGl0ZSBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMDUuMDAjQ2FsY2l1bSBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMDYuMDAjQ2hsb3JpZGUgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjA3LjAwI0Rpc3NvbHZlZCBveHlnZW4gbWVhc3VyZW1lbnQgbWV0ZXIjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMDguMDAjRWxlY3Ryb2x5dGUgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjA5LjAwI0VuenltZSBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTAuMDAjRmF0dHkgYWNpZCBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTEuMDAjSGFsaWRlIGRldGVjdG9yIGxhbXAjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTIuMDAjTGFjdGF0ZSBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTMuMDAjTWluZXJhbCBvaWwgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xNC4wMCNPaWwgY29udGVudCBtb25pdG9ycyBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTUuMDAjT3JnYW5pYyBjYXJib24gYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjE2LjAwI1BldHJvbGV1bSB0ZXN0aW5nIGVxdWlwbWVudCM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xNy4wMCNQcm90ZWluIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xOC4wMCNVcmFuaXVtIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xOS4wMCNXYXRlciBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMjAuMDAjTHVicmljYXRpbmcgb2lsIHRlc3Rpbmcga2l0IzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjIxLjAwI1BhaW50IHRlc3RlciM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNC4wMC4wMCNOdWNsZWFyIGV2YWx1YXRpb24gaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDEuMDAjQWxwaGEgY291bnRlcnMjNDEuMTEuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDIuMDAjQWxwaGEgYmV0YSBjb3VudGVycyM0MS4xMS4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNC4wMy4wMCNCZXRhIGNvdW50ZXJzIzQxLjExLjM0LjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjA0LjAwI0JldGEgZ2FtbWEgY291bnRlcnMjNDEuMTEuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDUuMDAjR2FtbWEgY291bnRlcnMjNDEuMTEuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDYuMDAjS1ZQIG1ldGVycyM0MS4xMS4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNC4wNy4wMCNYIHJheSBtaWNyb2FuYWx5c2VycyM0MS4xMS4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wMC4wMCNFbGVjdHJpY2FsIG1lYXN1cmluZyBhbmQgdGVzdGluZyBlcXVpcG1lbnQjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDEuMDAjQW1tZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDIuMDAjUGhhc2VtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDMuMDAjQnJpZGdlcyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wNC4wMCNDYXBhY2l0YW5jZSBtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDUuMDAjVGhlcm1vYW5hbHlzaXMgZGVyaXZhdG9ncmFwaHMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDYuMDAjRnJlZXplIHdhdGNoIGluZGljYXRvcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDcuMDAjSGVhdCBzdHJlc3MgbW9uaXRvcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDguMDAjQ29pbmNpZGVuY2Ugb3IgYW50aWNvaW5jaWRlbmNlIGNvdW50ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjA5LjAwI0NvbmR1Y3Rpdml0eSBjZWxscyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xMC4wMCNDb25kdWN0aXZpdHkgbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjExLjAwI0Nyb3NzIHRhbGsgbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjEyLjAwI0VhcnRoIHJlc2lzdGFuY2UgdGVzdGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xMy4wMCNFbGVjdHJpY2FsIHZhbHVlIHJlY29yZGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xNC4wMCNFbGVjdHJvbWFnbmV0aWMgZmllbGQgbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjE1LjAwI0VsZWN0cm9tZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTYuMDAjRWxlY3Ryb25pYyBsb2FkcyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xNy4wMCNGaWVsZCBzdHJlbmd0aCBtZWFzdXJpbmcgZXF1aXBtZW50IzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjE4LjAwI0dhaW4gbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjE5LjAwI0dhbHZhbm9tZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjAuMDAjSGlnaCB2b2x0YWdlIGNhYmxlIGRldGVjdGlvbiM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yMS4wMCNJbXBlZGFuY2UgbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjIyLjAwI0NhbGlicmF0ZWQgaW5kdWN0YW5jZSBjb2lscyBvciBib3hlcyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yMy4wMCNJbnN1bGF0aW9uIHJlc2lzdGFuY2UgbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjI0LjAwI0luc3VsYXRpb24gdGVzdGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yNS4wMCNJb25pemF0aW9uIGNoYW1iZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjI2LjAwI0lvbm1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yNy4wMCNMaW5lIGVhcnRoIGxvb3AgdGVzdGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yOC4wMCNNZWdvaG1tZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjkuMDAjTWljcm93YXZlIGxlYWthZ2UgbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjMwLjAwI011bHRpbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjMxLjAwI09obW1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zMi4wMCNPc2NpbGxvZ3JhcGhzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjMzLjAwI1BvdGVudGlvbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjM0LjAwI1EgbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjM1LjAwI0NhbGlicmF0ZWQgcmVzaXN0YW5jZSBtZWFzdXJpbmcgZXF1aXBtZW50IzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjM2LjAwI0xldmVsIGdlbmVyYXRvcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzcuMDAjVm9sdGFnZSBvciBjdXJyZW50IG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zOC4wMCNPc2NpbGxvc2NvcGVzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjM5LjAwI0FjY2VsZXJvbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjQwLjAwI1dhdHRtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuNDEuMDAjR0ZJIGNpcmN1aXQgdGVzdG9ycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi40Mi4wMCNDaXJjdWl0IHRlc3RlciM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi40My4wMCNEZW1hbmQgbWV0ZXJzIG9yIHJlZ2lzdGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi40NC4wMCNDaXJjdWl0IHRyYWNlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDAuMDAjRWxlY3Ryb25pYyBhbmQgY29tbXVuaWNhdGlvbiBtZWFzdXJpbmcgYW5kIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDEuMDAjQ2F0aG9kZSByYXkgdHViZSB0ZXN0ZXIjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDIuMDAjQ29tcGFyYXRvcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDMuMDAjRGlyZWN0aW9uYWwgY291cGxlciM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wNC4wMCNJbnRlZ3JhdGVkIGNpcmN1aXQgdGVzdGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wNS4wMCNMb2dpYyBzdGF0ZSB0ZXN0ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjA2LjAwI1NlbWljb25kdWN0b3IgdGVzdGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wNy4wMCNUcmFuc2lzdG9yIGNpcmN1aXQgdGVzdGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wOC4wMCNQb3dlciBtZXRlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDkuMDAjTW9kdWxhdGlvbiBtZXRlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMTAuMDAjTGV2ZWwgbWV0ZXIjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMTEuMDAjTmV0d29yayBhbmFseXplcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMTIuMDAjVGFwZSB0ZXN0ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjEzLjAwI1RhcGVzcGVlZCB0ZXN0ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjE0LjAwI0RpZmZlcmVudGlhdG9yIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjAwLjAwI0dlb3BoeXNpY2FsIGFuZCBnZW90ZWNobmljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzguMDEuMDAjR2VvbG9naWNhbCBjb21wYXNzZXMjNDEuMTEuMzguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzguMDIuMDAjR2VvbG9naWNhbCBwcm9zcGVjdGluZyBhcHBhcmF0dXMjNDEuMTEuMzguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzguMDMuMDAjRWxlY3Ryb21hZ25ldGljIGdlb3BoeXNpY2FsIGluc3RydW1lbnRzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjA0LjAwI0dyYXZpdHkgZ2VvcGh5c2ljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMzguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzguMDUuMDAjSW5kdWNlZCBwb2xhcml6YXRpb24gKElQKSBnZW9waHlzaWNhbCBpbnN0cnVtZW50cyM0MS4xMS4zOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wNi4wMCNNYWduZXRvbWV0ZXIgZ2VvcGh5c2ljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMzguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzguMDcuMDAjUmVzaXN0aXZpdHkgZ2VvcGh5c2ljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMzguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzguMDguMDAjR3JhdmltZXRlcnMjNDEuMTEuMzguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDAuMDAjU29pbCBtZWFzdXJpbmcgZXF1aXBtZW50IzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjAxLjAwI0JvcmUgbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjAyLjAwI0Rpc3NvbHV0aW9uIG9yIGRpc2ludGVncmF0aW9uIHRlc3RlcnMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDMuMDAjUGFydGljbGUgc2l6ZSBtZWFzdXJpbmcgYXBwYXJhdHVzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjA0LjAwI1BlbmV0cm9tZXRlcnMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDUuMDAjUGVybWVhYmlsaXR5IHRlc3RpbmcgYXBwYXJhdHVzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjA2LjAwI1Blcm1lYWJpbGl0eSBvciBwb3Jvc2l0eSBlc3RpbWF0aW9uIGFwcGFyYXR1cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wNy4wMCNQb3Jvc2ltZXRlcnMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDguMDAjU2FuZCB0ZXN0aW5nIGFwcGFyYXR1cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wOS4wMCNTb2lsIGNvcmUgc2FtcGxpbmcgYXBwYXJhdHVzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjEwLjAwI1NvaWwgdGVzdGluZyBraXRzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjQwLjAwLjAwI1JvY2sgYW5kIHN0cmF0YSBtZWFzdXJpbmcgZXF1aXBtZW50IzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQwLjAxLjAwI0NsaW5vbWV0ZXJzIzQxLjExLjQwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjAwLjAwI1NlaXNtb2xvZ2ljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDEuMDIuMDAjRWFydGhxdWFrZSBzaW11bGF0b3JzIzQxLjExLjQxLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjAzLjAwI1NlaXNtaWMgYWxhcm0gbW9kdWxlcyM0MS4xMS40MS4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wNC4wMCNTZWlzbWljIGFtcGxpZmllcnMjNDEuMTEuNDEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDEuMDUuMDAjUG9ydGFibGUgc2Vpc21pYyBhcHBhcmF0dXMjNDEuMTEuNDEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDEuMDYuMDAjU2Vpc21pYyByZWNvcmRlcnMgb3Igc2Vpc21vZ3JhcGhzIzQxLjExLjQxLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjA3LjAwI1NlaXNtb21ldGVycyM0MS4xMS40MS4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wOC4wMCNWaWJyb21ldGVycyM0MS4xMS40MS4wMC4wMAotdW5zcHNjNyM0MS4xMS40Mi4wMC4wMCNMYW5kIHN1cnZleWluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40Mi4wMS4wMCNNZWFzdXJpbmcgdGFwZXMjNDEuMTEuNDIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDIuMDAjTWVhc3VyaW5nIHJvZHMjNDEuMTEuNDIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDMuMDAjTWVhc3VyaW5nIHRhYmxlcyM0MS4xMS40Mi4wMC4wMAotdW5zcHNjNyM0MS4xMS40Mi4wNC4wMCNUaGVvZG9saXRlcyM0MS4xMS40Mi4wMC4wMAotdW5zcHNjNyM0MS4xMS40Mi4wNS4wMCNMb2NhdGlvbiBzdGFrZSM0MS4xMS40Mi4wMC4wMAotdW5zcHNjNyM0MS4xMS40Mi4wNi4wMCNMb2NhdGlvbiBodWIjNDEuMTEuNDIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDMuMDAuMDAjSHlkcm9sb2dpY2FsIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQzLjAxLjAwI09wZW4gc3RyZWFtIGN1cnJlbnQgbWV0ZXJzIzQxLjExLjQzLjAwLjAwCi11bnNwc2M3IzQxLjExLjQzLjAyLjAwI0xvZ2dpbmcgaW5zdHJ1bWVudHMgZm9yIHdhdGVyIHdlbGxzIzQxLjExLjQzLjAwLjAwCi11bnNwc2M3IzQxLjExLjQzLjAzLjAwI09wZW4gc3RyZWFtIHdhdGVyIGxldmVsIHJlY29yZGVycyM0MS4xMS40My4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wMC4wMCNNZXRlb3JvbG9naWNhbCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wMS4wMCNBbmVtb21ldGVycyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wMi4wMCNCYXJvbWV0ZXJzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjAzLjAwI1ByZWNpcGl0YXRpb24gb3IgZXZhcG9yYXRpb24gcmVjb3JkZXJzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjA0LjAwI1JhZGlvc29uZGUgYXBwYXJhdHVzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjA1LjAwI1JhaW5mYWxsIHJlY29yZGVycyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wNi4wMCNQcmVjaXBpdGF0aW9uIG9yIGV2YXBvcmF0aW9uIHN1cmZhY2Ugb2JzZXJ2aW5nIGFwcGFyYXR1cyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wNy4wMCNTb2xhciByYWRpYXRpb24gc3VyZmFjZSBvYnNlcnZpbmcgYXBwYXJhdHVzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjA4LjAwI1RlbXBlcmF0dXJlIG9yIGh1bWlkaXR5IHN1cmZhY2Ugb2JzZXJ2aW5nIGFwcGFyYXR1cyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wOS4wMCNXaW5kIHN1cmZhY2Ugb2JzZXJ2aW5nIGFwcGFyYXR1cyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4xMC4wMCNXZWF0aGVyIHN0YXRpb25zIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ0LjExLjAwI01ldGVvcm9sb2d5IGluc3RydW1lbnQgYWNjZXNzb3JpZXMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDAuMDAjTWVjaGFuaWNhbCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wMS4wMCNEeW5hbW9tZXRlcnMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDIuMDAjRWxhc3RvbWV0ZXJzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjAzLjAwI0V4dGVuc29tZXRlcnMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDQuMDAjUGl0Y2ggbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjA1LjAwI1JvdW5kbmVzcyB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjA2LjAwI1NwaGVyb21ldGVycyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wNy4wMCNTcHJpbmcgdGVzdGluZyBtYWNoaW5lcyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wOC4wMCNTdXJmYWNlIHRlc3RlcnMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDkuMDAjVGVuc2lvbWV0ZXJzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjEwLjAwI1RvcnF1ZSBsaW1pdGVyIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjAwLjAwI01ldGFscyBhbmQgbWV0YWxsdXJneSBhbmQgc3RydWN0dXJhbCBtYXRlcmlhbHMgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wMS4wMCNBYnJhc2lvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjAyLjAwI0NvbXByZXNzaW9uIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDMuMDAjQ29uY3JldGUgb3IgY2VtZW50IHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDQuMDAjQ29ycm9zaW9uIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDUuMDAjQ3JhY2sgb3IgY29ycm9zaW9uIGRldGVjdG9ycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wNi4wMCNDcmVlcCB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjA3LjAwI0R1Y3RpbGl0eSB0ZXN0aW5nIG1hY2hpbmVzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjA4LjAwI0ZhdGlndWUgdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wOS4wMCNGb3JnaW5nIHRlc3RpbmcgYXBwYXJhdHVzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjEwLjAwI0ZvdW5kcnkgdGVzdGluZyBhcHBhcmF0dXMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTEuMDAjSGFyZG5lc3MgdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xMi4wMCNJbXBhY3QgdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xMy4wMCNMb2FkIGZyYW1lIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjE0LjAwI01ldGFsIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTUuMDAjUGhvdG9lbGFzdGljIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTYuMDAjUHJvb2ZzdHJlc3MgaW5kaWNhdG9ycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xNy4wMCNSZWxheGF0aW9uIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTguMDAjUm91Z2huZXNzIG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xOS4wMCNTaGVhciBzdHJlbmd0aCB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjIwLjAwI1Nob2NrIHRlc3RpbmcgYXBwYXJhdHVzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjIxLjAwI1RlbnNpb24gdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4yMi4wMCNUb3JzaW9uIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMjMuMDAjRmxleHVyZSBvciB0cmFuc3ZlcnNlIHRlc3RpbmcgbWFjaGluZXMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMjQuMDAjVmlicmF0aW9uIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMjUuMDAjV2VhciB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjI2LjAwI1dlbGRpbmcgdGVzdGluZyBhcHBhcmF0dXMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDAuMDAjUGFwZXIgYW5kIHdvb2QgYW5kIHRleHRpbGUgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ny4wMS4wMCNDYXJkYm9hcmQgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40Ny4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ny4wMi4wMCNUZXh0aWxlcyBmYXN0bmVzcyB0ZXN0ZXJzIzQxLjExLjQ3LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ3LjAzLjAwI0xlYXRoZXIgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40Ny4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ny4wNC4wMCNQYXBlciB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ3LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ3LjA1LjAwI1RleHRpbGUgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40Ny4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ny4wNi4wMCNXb29kIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDguMDAuMDAjQ2VyYW1pY3MgYW5kIGdsYXNzIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDguMDEuMDAjQ2VyYW1pY3MgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40OC4wMC4wMAotdW5zcHNjNyM0MS4xMS40OC4wMi4wMCNHbGFzcyB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ4LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ4LjAzLjAwI1BvdHRlcnkgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40OC4wMC4wMAotdW5zcHNjNyM0MS4xMS41MS4wMC4wMCNDb2FsIGFuZCBvcmUgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS41MS4wMS4wMCNDb2FsIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNTEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNTIuMDAuMDAjUmFkYXIgYW5kIHNvbmFyIHN5c3RlbXMgYW5kIGNvbXBvbmVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNTIuMDEuMDAjUmFkYXJiYXNlZCBzdXJ2ZWlsbGFuY2Ugc3lzdGVtcyM0MS4xMS41Mi4wMC4wMAotdW5zcHNjNyM0MS4xMS41Mi4wMi4wMCNGZWVkIGhvcm5zIzQxLjExLjUyLjAwLjAwCi11bnNwc2M3IzQyLjAwLjAwLjAwLjAwI01lZGljYWwgRXF1aXBtZW50IGFuZCBBY2Nlc3NvcmllcyBhbmQgU3VwcGxpZXMjNDIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMDAuMDAuMDAjSG9zcGl0YWwgYW5kIG1lZGljYWwgYW5kIGRlbnRhbCBlcXVpcG1lbnQjNDIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTUuMDAuMDAjQW5lc3RoZXNpYSBlcXVpcG1lbnQgYW5kIGluc3RydW1lbnRzIGFuZCBhY2Nlc3NvcmllcyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNS4wMi4wMCNIZWFsdGhjYXJlIGdhcyBtYWNoaW5lcyM0Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNS4wMy4wMCNBbmVzdGhlc2lhIG1hY2hpbmVzIzQyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE1LjA0LjAwI1JlZ2lvbmFsIGFuYWVzdGhlc2lhIGtpdHMgb3IgbmVlZGxlcyM0Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wMC4wMCNNZWRpY2FsIGVxdWlwbWVudCBhbmQgaW5zdHJ1bWVudHMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDEuMDAjTWVkaWNhbCB0aGVybW9tZXRlcnMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDIuMDAjU3BlY3VsdW1zIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjAzLjAwI090b3Njb3BlcyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wNC4wMCNBdWRpb21ldGVycyBvciB0eW1wYW5vbWV0ZXJzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjA1LjAwI1N0ZXRob3Njb3BlcyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wNi4wMCNFcmdvbm9tZXRlcnMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDcuMDAjRWxlY3RybyB0aGVyYXB5IGFwcGFyYXR1cyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wOC4wMCNQaG90byB0aGVyYXB5IGFwcGFyYXR1cyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wOS4wMCNIeWRyb3RoZXJhcHkgc3VwcGxpZXMgb3IgYWNjZXNzb3JpZXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMTAuMDAjQWN1cHVuY3R1cmUgdW5pdHMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMTEuMDAjU3RldGhvZ3JhcGhzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjEyLjAwI01lZGljYWwgcHVtcHMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMTMuMDAjTWVkaWNhbCB2YWx2ZXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMTQuMDAjRW5kb3Njb3BlcyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wMC4wMCNNZWRpY2FsIHRlc3RpbmcgYW5kIGFuYWx5emluZyBhbmQgZGlhZ25vc3RpYyBlcXVpcG1lbnQjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDEuMDAjU2tpbiB0ZXN0IHN0cmlwcyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wMi4wMCNCbG9vZCBhbmFseXplcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDMuMDAjQmxvb2QgY2VsbCBjb3VudGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wNC4wMCNIYWVtb2dsb2Jpbm9tZXRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDUuMDAjQmlsaXJ1YmluIG1ldGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wNi4wMCNIYWVtYWN5dG9tZXRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDcuMDAjQ29sb255IGNvdW50ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjA4LjAwI0ZlcnJpdGluIHRlc3Qga2l0cyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wOS4wMCNFbnp5bWUgbGlua2VkIGltbXVub3NvcmJlbnQgYXNzYXkgKEVMSVNBKSB0ZXN0IGtpdCM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xMC4wMCNIdW1hbiBpbW11bmUgZGVmaWNpZW5jeSAoSElWKSB0ZXN0IGtpdHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTEuMDAjU3lmYWNhcmQgc3lwaGlsaXMgdGVzdHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTIuMDAjUHJlZ25hbmN5IHRlc3Qga2l0cyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xMy4wMCNSYWRpbyBpbW11bm9hc3NheSAoUklBKSB0ZXN0IGtpdHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTQuMDAjUG9saW8gY2FzZSBpbnZlc3RpZ2F0aW9uIGtpdCM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xNS4wMCNVcmluZSBibG9vZCB0ZXN0IHN0cmlwcyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xNi4wMCNDZWxsIHNpemUgYW5hbHl6ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjE3LjAwI1dob2xlIGJvZHkgY291bnRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTguMDAjQmlvbWVkaWNhbCBjb3VudGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xOS4wMCNNZWRpY2FsIG11bHRpcHJvYmUgc3lzdGVtIGNvdW50ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjIwLjAwI0FsbGVyZ3kgb3IgZGlhZ25vc3RpYyBraXRzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjIxLjAwI1VyaW5hcnkgdGVzdCBzZXQjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjIuMDAjRGlmZmVyZW50aWFsIGNlbGwgY291bnRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjMuMDAjUGxhc21hIHZpc2Nvc2l0eSBtZWFzdXJlbWVudCM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yNC4wMCNQbGF0ZWxldCBhbmFseXNpcyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yNS4wMCNCbG9vZCBnbHVjb3NlIG1ldGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yNi4wMCNIZW1vY3VsdHVyZSB0ZXN0cyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yNy4wMCNCb2R5ZmF0IGFuYWx5c2VycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yOC4wMCNTYW1wbGUgY29sbGVjdGlvbiBzeXN0ZW1zIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjAwLjAwI1ggcmF5IGFuZCBhbHBoYSBhbmQgYmV0YSBhbmQgZ2FtbWEgcmFkaWF0aW9uIGFwcGFyYXR1cyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wMS4wMCNEaWFnbm9zdGljIHggcmF5IGVxdWlwbWVudCM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wMi4wMCNSYWRpb3RoZXJhcHkgc2ltdWxhdG9yIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjAzLjAwI0NhbGlicmF0aW9uIGVxdWlwbWVudCM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wNC4wMCNCaW9tZWRpY2FsIHJlc2VhcmNoIHN1cHBvcnQgdW5pdHMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDUuMDAjQ29tcHV0ZWQgdG9tb2dyYXBoeSAoQ1QpIHNjYW5uZXJzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjA2LjAwI1dhdGVyIHBoYW50b21zIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjA3LjAwI1JhZGlvYmlvbG9naWNhbCBpbnN0cnVtZW50cyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wOC4wMCNHYW1tYSBzY2ludGlsbGF0b3JzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjA5LjAwI0dhbW1hIGNhbWVyYXMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTAuMDAjTGluZWFyIGFjY2VsZXJhdG9ycyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xMS4wMCNSYWRpb3RoZXJhcHkgYnJhY2h5dGhlcmFweSBlcXVpcG1lbnQjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTIuMDAjUmFkaW90aGVyYXB5IHRlbGV0aGVyYXB5IGNvYmFsdCA2MCBtYWNoaW5lIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjEzLjAwI1JhZGlvdGhlcmFweSB0ZWxldGhlcmFweSBzdXBlcmZpY2lhbCB4IHJheSBtYWNoaW5lIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjE0LjAwI1JhZGlvdGhlcmFweSB0ZWxldGhlcmFweSBvcnRob3ZvbHRhZ2UgeCByYXkgbWFjaGluZSM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xNS4wMCNSYWRpb3RoZXJhcHkgdGVsZXRoZXJhcHkgbGluZWFyIGFjY2VsZXJhdG9ycyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xNi4wMCNSYWRpb2lzb3RvcGUgc2Nhbm5lcnMgZm9yIG1lZGljYWwgcHVycG9zZXMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTcuMDAjRGVudGFsIHggcmF5IHVuaXRzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjE4LjAwI0FuZ2lvZ3JhcGh5IHN1cHBsaWVzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjE5LjAwI0FuZ2lvZ3JhcGh5IGRldmljZXMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMjAuMDAjQW5naW9wbGFzdHkgc3VwcGxpZXMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMjEuMDAjQW5naW9wbGFzdHkgZGV2aWNlcyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wMC4wMCNPeHlnZW4gdGhlcmFweSBlcXVpcG1lbnQjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDEuMDAjSW5oYWxhdGlvbiBlcXVpcG1lbnQjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDIuMDAjTWVkaWNhbCBodW1pZGlmaWVycyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wMy4wMCNSZXN1c2NpdGF0b3JzIG9yIHJlc3BpcmF0b3JzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjA0LjAwI0FzcGlyYXRvcnMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDUuMDAjSW5zdWZmbGF0b3JzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjA2LjAwI1Jlc3VzY2l0YXRpb24gZW1lcmdlbmN5IG91dGZpdHMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDcuMDAjTmVidWxpemVycyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wOC4wMCNBZXJvc29sIHRoZXJhcHkgYXBwYXJhdHVzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjA5LjAwI01lZGljYWwgdmVudGlsYXRpb24gc3lzdGVtcyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4xMC4wMCNNYXNrcyBvciBicmVhdGhpbmcgYmFncyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4xMS4wMCNIZWFydCBsdW5nIGFwcGFyYXR1cyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4xMi4wMCNCcmVhdGhpbmcgZGV2aWNlIHdpdGggaHlnaWVuaWMgYmFycmllciM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4xMy4wMCNPeHlnZW4gbWFza3MjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTQuMDAjTW9iaWxlIHN1Y3Rpb24gdW5pdCM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4xNS4wMCNIeXBlcmJhcmljIHRyZWF0bWVudCBjaGFtYmVyIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjE2LjAwI094eWdlbmF0b3JzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjE3LjAwI0FpciBveHlnZW4gdW5pdHMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDAuMDAjTWVkaWNhbCBhbmQgc3VyZ2ljYWwgYW5kIGxhYm9yYXRvcnkgc3RlcmlsaXplcnMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDEuMDAjQXV0b2NsYXZlcyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wMi4wMCNTdGVhbSBzdGVyaWxpemVycyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wMy4wMCNCb2lsaW5nIGRpc2luZmVjdG9ycyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wNC4wMCNIb3QgYWlyIHN0ZXJpbGl6ZXJzIzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjA1LjAwI0NoZW1pY2FsIHN0ZXJpbGl6ZXJzIzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjA2LjAwI0xhYm9yYXRvcnkgc3RlcmlsaXplcnMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDcuMDAjU3RlcmlsaXphdGlvbiBvdmVucyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wOC4wMCNHZXJtaWNpZGFsIGxhbXBzIzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjA5LjAwI1N0ZXJpbGl6aW5nIGxhbXBzIzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjEwLjAwI0RlY29udGFtaW5hdGlvbiB3YXNoaW5nIGVxdWlwbWVudCM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wMC4wMCNTdXJnaWNhbCBzZXRzIGFuZCBpbnN0cnVtZW50cyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wMS4wMCNDcnlvIHN1cmdlcnkgZXF1aXBtZW50IzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjAyLjAwI0F1dG9wc3kgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDMuMDAjU3VjdGlvbiB1bml0cyBvciBwYXJ0cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wNC4wMCNTdXJnaWNhbCBsYXNlcnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDUuMDAjRWxlY3RybyBjYXV0ZXJ5IHN1cmdpY2FsIGVxdWlwbWVudCM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wNi4wMCNFYXIgb3Igbm9zZSBvciB0aHJvYXQgKEVOVCkgc3VyZ2VyeSBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wNy4wMCNHeW5lY29sb2dpY2FsIHN1cmdlcnkgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDguMDAjQ2FyZGlvbG9neSBzdXJnZXJ5IGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjA5LjAwI01pY3JvIHN1cmdlcnkgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTAuMDAjT3J0aG9wZWRpYyBzdXJnZXJ5IGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjExLjAwI1N1dHVyZSBjbGlwcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xMi4wMCNEaXNzZWN0aW5nIGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjEzLjAwI0Rpc3NlY3RpbmcgcGlucyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xNC4wMCNJbXBsYW50IHN5c3RlbXMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTUuMDAjQmxvb2QgbGFuY2V0cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xNi4wMCNTY2FscGVscyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xNy4wMCNTdXJnaWNhbCBibGFkZXMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTguMDAjQ3JhbmlvY2xhc3RzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjE5LjAwI1N1cmdpY2FsIHNjaXNzb3JzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjIwLjAwI1N1cmdpY2FsIHNoZWFycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yMS4wMCNTdXJnaWNhbCBkcmlsbHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjIuMDAjU3VyZ2ljYWwgd2lyZSBzYXdzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjIzLjAwI1N1cmdpY2FsIHBlcmZvcmF0b3JzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjI0LjAwI0N1cmV0dGVzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjI1LjAwI1N1cmdpY2FsIGNsYW1wcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yNi4wMCNTdXJnaWNhbCBpbnN0cnVtZW50IGhvbGRlcnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjcuMDAjU3VyZ2ljYWwgZWxldmF0b3JzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjI4LjAwI1Jhc3BhdG9yeSBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yOS4wMCNGb3JjZXBzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjMwLjAwI1N1cmdpY2FsIHJldHJhY3RvcnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMzEuMDAjU3VyZ2ljYWwgc3ByZWFkZXJzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjMyLjAwI1V0ZXJpbmUgc291bmQgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMzMuMDAjRGlsYXRvcnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMzQuMDAjU3VyZ2ljYWwgZGlzaGVzIG9yIHBvdHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMzUuMDAjU3VyZ2ljYWwgcHJvYmVzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjM2LjAwI1N1cmdpY2FsIG1hbGxldHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMzcuMDAjRGVjYXBpdGF0aW9uIGhvb2tzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjM4LjAwI1N1dHVyZXMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMzkuMDAjQ2F0Z3V0IGNocm9taWMgc3V0dXJlcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS40MC4wMCNMYXJ5bmdvc2NvcGVzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjQxLjAwI1N1cmdpY2FsIHNoYXZpbmcga2l0cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wMC4wMCNSZWhhYmlsaXRhdGlvbiBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjAxLjAwI1NwbGludHMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDIuMDAjUHN5Y2hvbG9naWNhbCBhcHRpdHVkZSB0ZXN0aW5nIGFwcGFyYXR1cyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wMy4wMCNNYXNzYWdlIGFwcGFyYXR1cyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wNC4wMCNUcmFjdGlvbiBwdWxsZXlzIG9yIGJlbHRzIG9yIHdlaWdodHMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDUuMDAjUGh5c2ljYWwgdGhlcmFweSByZWhhYmlsaXRhdGlvbiBlcXVpcG1lbnQgb3IgYWNjZXNzb3JpZXMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDYuMDAjT3ZlcmJlZCBmcmFtZXMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDcuMDAjUmVoYWJpbGl0YXRpb24gc3RpbXVsYXRvcnMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDguMDAjUGF0aWVudCBsaWZ0ZXJzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjA5LjAwI1Nob3J0IHdhdmUgZGlhdGhlcm15IGVxdWlwbWVudCM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xMC4wMCNNb2lzdCBoZWF0IHRoZXJhcHkgZXF1aXBtZW50IzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjExLjAwI0hlYXQgb3IgY29sZCBwYWNrcyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xMi4wMCNQaHlzaW9sb2dpY2FsIGVxdWlwbWVudCM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xMy4wMCNTdGltdWxhdG9ycyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xNC4wMCNSZWhhYmlsaXRhdGlvbiBzdXBwbGllcyBmb3IgdGhlIGJsaW5kIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjE1LjAwI0VsZWN0cm9teW9ncmFwaCM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xNi4wMCNSZWhhYmlsaXRhdGlvbiBzdXBwbGllcyBmb3Igc3BlZWNoIGhhbmRpY2FwcGVkIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjE3LjAwI0VsZWN0cm8gc2xlZXAgYXBwYXJhdHVzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjE4LjAwI1Zpc3VhbCBleGVyY2lzZSB0cmFpbmluZyBhaWRzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjE5LjAwI09ydGhvcGVkaWMgY3VzaGlvbnMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDAuMDAjT3BodGhhbG1vbG9neSBpbnN0cnVtZW50cyBhbmQgYXBwbGlhbmNlcyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wMS4wMCNPcHRoYWxtb2xvZ2ljYWwgcHVuY2hlcyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wMi4wMCNQaG90b2NvYWd1bGF0b3JzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjAzLjAwI1NsaXQgbGFtcHMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDQuMDAjUGVyaW1ldGVycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wNS4wMCNUb25vbWV0ZXJzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjA2LjAwI1JldGlub21ldGVycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wNy4wMCNFeWV3YXNoZXJzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjA4LjAwI09waHRoYWxtb21ldGVycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wOS4wMCNPcGh0aGFsbW9zY29wZXMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMTAuMDAjRW1lcmdlbmN5IGV5ZSBjYXJlIGVxdWlwbWVudCM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4xMS4wMCNLZXJhdG9tZXRlcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMTIuMDAjVmlzaW9uIHRlc3RlcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMTMuMDAjU3lub3Rvc2NvcGVzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjE0LjAwI09waHRoYWxtaWMgb3BlcmF0aW9uIGluc3RydW1lbnRzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjAwLjAwI0d5bmVjb2xvZ2ljYWwgYW5kIG9ic3RldHJpY2FsIGluc3RydW1lbnRzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjAxLjAwI0ludHJhIHV0ZXJpbmUgZGV2aWNlIChJVUQpIGluc2VydGlvbiBraXRzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjAyLjAwI1R1YmFsIGxpZ2F0aW9uIGtpdHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDMuMDAjVmFzZWN0b215IGtpdHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDQuMDAjTGFwYXJvc2NvcGljIGVxdWlwbWVudCM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wNS4wMCNTaWxhc3RpYyBiYW5kcyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wNi4wMCNNZW5zdHJ1YXRpb24gcmVndWxhdGlvbiBraXRzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjA3LjAwI1NwZXJtb2tpbmVzZW1ldGVyIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjA4LjAwI1V0ZXJpbmUgb3IgZ3luZWNvbG9naWNhbCB0ZXN0cyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wOS4wMCNPYnN0ZXRyaWNhbCByZXRyYWN0b3JzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjEwLjAwI1VtYmlsaWNhbCB0YXBlcyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xMS4wMCNCcmVhc3QgcHVtcHMgb3IgYWNjZXNzb3JpZXMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTIuMDAjTWlkd2lmZSBlcXVpcG1lbnQgb3Iga2l0cyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xMy4wMCNIeXN0ZXJvc2NvcGljIGVxdWlwbWVudCM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xNC4wMCNWYWdpbm9zY29wZSM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xNS4wMCNVcmV0aHJvc2NvcGUgY3lzdGVyc2NvcGUjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTYuMDAjVW1iaWxpY2FsIGNvcmQgY2xhbXBzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjE3LjAwI1ZhY3V1bSBleHRyYWN0b3JzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjE4LjAwI0luIHZpdHJvIGZlcnRpbGl6YXRpb24gZXF1aXBtZW50IG9yIHN1cHBsaWVzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjE5LjAwI0VuZG9tZXRyaWFsIGJpb3BzeSBlcXVpcG1lbnQjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMjAuMDAjSW50cmF1dGVyaW5lIGluc2VtaW5hdGlvbiBjYXRoZXRlcnMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMjEuMDAjUGVsdmltZXRlcnMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDAuMDAjRmliZXIgb3B0aWMgZXhhbWluYXRpb24gaW5zdHJ1bWVudHMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDEuMDAjTGlnaHQgc291cmNlcyM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wMi4wMCNFbmRvc2NvcHkgZXF1aXBtZW50IzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjAzLjAwI1Byb3Rvc2NvcGVzIzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjA0LjAwI0N1bGRvc2NvcGVzIzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjA1LjAwI0dhc3Ryb3Njb3BlcyM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wNi4wMCNFc29waGFnb3Njb3BlIzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjA3LjAwI1NpZ21vaWRvc2NvcGUjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDguMDAjQnJvbmNob3Njb3BlIzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjA5LjAwI0NvbG9ub3Njb3BlIzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjEwLjAwI0FydGhyb3Njb3BlIzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjAwLjAwI0VsZWN0cm8gZGlhZ25vc3RpYyBhcHBhcmF0dXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMDEuMDAjRWxlY3Ryb2NhcmRpb2dyYXBocyAoRUNHcykjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMDIuMDAjQ2FyZGlvc2NvcGVzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjAzLjAwI1N0ZXJlb3RhY3RpYyBzeXN0ZW1zIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA0LjAwI0FjaGlsbGVhbiByZWZsZXhvbWV0ZXIjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMDUuMDAjVGhlc2lvbWV0ZXIjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMDYuMDAjUG5ldW1vdGFjaG9ncmFwaHMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMDcuMDAjQmlvdmlkZW9ncmFwaHMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMDguMDAjUGh5c2lvbG9naWNhbCBsZXZlcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMDkuMDAjTmVydmUgY2hhbWJlciBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTAuMDAjVWx0cmFzb25pYyBkaWFnbm9zdGljIGVxdWlwbWVudCM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xMS4wMCNVbHRyYXNvdW5kIHNjYW5uZXJzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjEyLjAwI0RvcHBsZXIgdWx0cmFzb3VuZCBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTMuMDAjVWx0cmFzb25pYyBzdXJnZXJ5IGVxdWlwbWVudCBvciB1bHRyYXNvbmljIGFzcGlyYXRpb24jNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTQuMDAjVWx0cmFzb3VuZCBwaHlzaW90aGVyYXB5IGVxdWlwbWVudCM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xNS4wMCNDYXJkaW8gc29uYXJzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjE2LjAwI1Nob3J0IHdhdmUgbWVkaWNhbCBhcHBhcmF0dXMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTcuMDAjQmxvb2QgcHJlc3N1cmUgbWVhc3VyaW5nIGVxdWlwbWVudCM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xOC4wMCNFbGVjdHJvZW5jZXBoYWxvZ3JhcGhzIChFRUdzKSM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xOS4wMCNTcGlyb21ldGVycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yMC4wMCNHeW5lY29sb2dpY2FsIGRpYWdub3N0aWMgZXF1aXBtZW50IzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjIxLjAwI0NvbHBvc2NvcGVzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjIyLjAwI0Ftbmlvc2NvcGVzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjIzLjAwI0ZldGFsIG1vbml0b3JzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjI0LjAwI0RlbGl2ZXJ5IG1vbml0b3JzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjI1LjAwI05lb25hdGFsIG1vbml0b3JzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjI2LjAwI0hlYXJ0IG1vbml0b3Igc3lzdGVtcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yNy4wMCNJbnRlbnNpdmUgY2FyZSBtb25pdG9ycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yOC4wMCNFbGVjdHJvbWVkaWNhbCB0ZXN0aW5nIGVxdWlwbWVudCM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yOS4wMCNEZWZpYnJpbGxhdG9yIHRlc3RlciM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zMC4wMCNBdWRpb21ldGVyIGNhbGlicmF0aW9uIHRlc3RlciM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zMS4wMCNFbGVjdHJvZGUgb3IgZWxlY3Ryb21lZGljYWwgdGVzdGVyIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjMyLjAwI1ZlbnRpbGF0b3IgdGVzdCBtZXRlcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzMuMDAjRUNHIHBhdGllbnQgc2ltdWxhdG9ycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zNC4wMCNFbGVjdHJvc3VyZ2ljYWwgYW5hbHl6ZXJzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjM1LjAwI0VsZWN0cm9tZWRpY2FsIHNhZmV0eSBhbmFseXplcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzYuMDAjRWxlY3Ryb21lZGljYWwgdGVzdCBzeXN0ZW1zIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjM3LjAwI0VsZWN0cm9uaWMgcHVsc2UgbW9uaXRvcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzguMDAjVmFnaW5hbCB1bHRyYXNvdW5kIHByb2JlIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjM5LjAwI01lZGljYWwgY29uZHVjdGl2ZSBnZWxzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjAwLjAwI0RpYWx5c2lzIGVxdWlwbWVudCBhbmQgaW5zdHJ1bWVudHMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDEuMDAjQmxvb2QgYmFnIHNhbXBsZXIjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDIuMDAjQmxvb2Qgd2FybWVyIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjAzLjAwI0RpYWx5c2lzIGluc3RydW1lbnQgc2V0cyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wNC4wMCNQZXJpdG9uZWFsIGRpYWx5c2lzIHVuaXRzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjA1LjAwI0hhZW1vZGlhbHlzaXMgdW5pdHMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDYuMDAjQmxvb2QgZmlsdGVycyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wNy4wMCNCbG9vZCBzZXBhcmF0b3Igc3RhbmQjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDguMDAjUGxhc21hcGhvcmVzaXMgZXF1aXBtZW50IzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjA5LjAwI0FuZ2lvZ3JhcGhpYyBpbmplY3RvcnMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMTAuMDAjSGVtYWZpbHRlcnMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMTEuMDAjRGlhbHlzaXMgdHViaW5nIG9yIG1lbWJyYW5lcyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4xMi4wMCNCbG9vZCBveHlnZW4gZGVtYW5kIGFwcGFyYXR1cyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4xMy4wMCNDbG90IGNvYWd1bGF0aW9uIGRldGVjdGlvbiBzeXN0ZW1zIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjE0LjAwI01lZGljYWwgZHJhaW5zIG9yIGRyYWluYWdlIGtpdHMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMTUuMDAjS3ltb2dyYXBocyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4xNi4wMCNCbG9vZCBzYW1wbGluZyBlcXVpcG1lbnQjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDAuMDAjRGVudGFsIGluc3RydW1lbnRzIGFuZCBhcHBsaWFuY2VzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjAxLjAwI0RlbnRhbCBtaXhpbmcgc2xhYnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDIuMDAjQmFuZHMgZm9yIGRlbnRhbCBtYXRyaXgjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDMuMDAjRGVudGFsIHJldGFpbmVycyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wNC4wMCNEZW50YWwgaGFuZHBpZWNlcyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wNS4wMCNEZW50YWwgY3J5b3N1cmdpY2FsIGluc3RydW1lbnRhdGlvbiM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wNi4wMCNEZW50YWwgZm9ybWVycyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wNy4wMCNQZXJpb2RvbnRpdW0gY29udHJvbCBpbnN0cnVtZW50cyBvciBwZXJpb3Rlc3QjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDguMDAjRGVudGFsIHRyYXlzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjA5LjAwI0RlbnRhbCBwcm9iZXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTAuMDAjRGVudGFsIHNjYWxlcyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xMS4wMCNEZW50YWwgc3BhdHVsYXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTIuMDAjRGVudGFsIGVsZXZhdG9ycyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xMy4wMCNEZW50YWwgZXhjYXZhdG9ycyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xNC4wMCNEZW50YWwgZmluZ2VyIHByb3RlY3RvcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTUuMDAjRGVudGFsIHR3ZWV6ZXJzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjE2LjAwI0RlbnRhbCBzY2lzc29ycyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xNy4wMCNEZW50YWwgZm9yY2VwcyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xOC4wMCNEZW50YWwgbWlycm9ycyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xOS4wMCNPcnRob2RvbnRpYyBhcHBsaWFuY2VzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjIwLjAwI0RlbnRhbCBpbXByZXNzaW9uIHRyYXlzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjIxLjAwI0RlbnRhbCBzeXJpbmdlcyBvciBuZWVkbGVzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjIyLjAwI0RlbnRhbCBkcmlsbHMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMjMuMDAjRW5kb2RvbnRpY3MgYWNjZXNzb3JpZXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjkuMDAuMDAjQ2FyZGlvbG9neSBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjI5LjAxLjAwI0hlYXJ0IHZhbHZlcyM0Mi4xMC4yOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOS4wMi4wMCNIZWFydCBjYXRoZXRlcnMjNDIuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjkuMDMuMDAjRGVmcmliaWxhdG9ycyM0Mi4xMC4yOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOS4wNC4wMCNBb3J0aWMgYmFsbG9vbiBlcXVpcG1lbnQjNDIuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjkuMDUuMDAjUGFjZW1ha2VycyM0Mi4xMC4yOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wMC4wMCNNZWRpY2FsIGNvbnN1bWFibGVzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjAxLjAwI0Jsb29kIG9yIGludHJhdmVub3VzIChJVikgYm90dGxlcyBvciBiYWdzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjAyLjAwI1Rvbmd1ZSBkZXByZXNzb3JzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjAzLjAwI1N1dHVyZSBuZWVkbGVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjA0LjAwI0Jpb3BzeSBuZWVkbGVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjA1LjAwI0Jpb3BzeSBjYXBzdWxlcyBvciBwdW5jaGVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjA2LjAwI0Rpc3NlY3RpbmcgbmVlZGxlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wNy4wMCNBY3VwdW5jdHVyZSBuZWVkbGVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjA4LjAwI01lZGljYWwgZGlzcG9zYWwgY29udGFpbmVycyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wOS4wMCNIYWVtYXRvY3JpdCB0dWJlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xMC4wMCNTd2FicyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xMS4wMCNCbG9vZCB0cmFuc2Z1c2lvbiBuZWVkbGVzIG9yIGNhbm51bGFlIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjEyLjAwI1RyYW5zZmVyIHN3YWJzIG9yIGFwcGxpY2F0b3JzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjEzLjAwI1VyaW5lIGJhZ3MjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTQuMDAjU3BlY2ltZW4gY29udGFpbmVycyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xNS4wMCNQbGFzdGVyIG9mIHBhcmlzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjE2LjAwI1N0ZXJpbGUgc3RyaXBzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjE3LjAwI0dhdXplIGNsb3RoIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjE4LjAwI0NvdHRvbiB3b29sIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjE5LjAwI1N0ZXJpbGUgc3VyZ2ljYWwgY29tcHJlc3NlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yMC4wMCNCYW5kYWdlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yMS4wMCNGaXJzdCBhaWQga2l0cyBvciBraXQgcmVmaWxscyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yMi4wMCNIeXBvZGVybWljIHN5cmluZ2VzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjIzLjAwI0NvdHRvbiBzd2FicyBvbiBzdGlja3MjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjQuMDAjSW5mdXNpb24gc2V0cyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yNS4wMCNOYXNvZ2FzdHJpYyB0dWJlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yNi4wMCNEZXN0cnVjdGlvbiBjbGlwcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yNy4wMCNEcmVzc2luZ3MjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjguMDAjSW1wbGFudGFibGUgZHJ1ZyBkZWxpdmVyeSBzeXN0ZW1zIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjI5LjAwI0F1dG9tYXRpYyBtYXNzIHZhY2NpbmF0b3JzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjMwLjAwI1BpcGV0dGluZyBzeXJpbmdlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zMS4wMCNTY2FscCB2ZWluIG5lZWRsZXMgb3Igc3RvcGNvY2tzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjMyLjAwI0h5cG9kZXJtaWMgbmVlZGxlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zMy4wMCNNZWRpY2FsIGpldCBpbmplY3RvcnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzQuMDAjTGFuY2V0cyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zNS4wMCNDYXRoZXRlciBmb3IgaW5mdXNpb24jNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzYuMDAjSW50YXZlbm91cyAoSVYpIGVxdWlwbWVudCB0dWJlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zNy4wMCNFeWV3YXNoIHNvbHV0aW9ucyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zOC4wMCNFeGFtaW5hdGlvbiBnbG92ZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzkuMDAjUGF0aG9nZW4gY2xlYW51cCBraXRzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjQwLjAwI0RpYWJldGljIHN5cmluZ2VzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjQxLjAwI0RpYWJldGljIHBlbiBuZWVkbGVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjQyLjAwI0xhbmNldCBkZXZpY2UjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMDAuMDAuMDAjQXNzaXN0aXZlIGFuZCBjb3JyZWN0aXZlIGRldmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wMC4wMCNQcm9zdGhlc2VzIGFuZCBwYXJ0cyB0aGVyZW9mIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjAxLjAwI0Fua2xlIG9yIGZvb3Qgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDIuMDAjQ2VydmljYWwgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDMuMDAjQ2VydmljbyB0aG9yYXRpYyBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wNC4wMCNDZXJ2aWNvIHRob3JhdGljIGx1bWJvIHNhY3JhbCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wNS4wMCNFbGJvdyBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wNi4wMCNFbGJvdyB3cmlzdCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wNy4wMCNGaW5nZXIgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDguMDAjRm9vdCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wOS4wMCNIYW5kIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjEwLjAwI0hpcCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xMS4wMCNIaXAga25lZSBhbmtsZSBmb290IG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjEyLjAwI0hpcCBvciBrbmVlIG9yIGFua2xlIG9ydGhvc2VzIGpvaW50cyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xMy4wMCNTaG91bGRlciBvciBlbGJvdyBvciB3cmlzdCBvcnRob3NlcyBqb2ludHMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTQuMDAjS25lZSBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xNS4wMCNLbmVlIGFua2xlIGZvb3Qgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTYuMDAjTHVtYm8gb3Igc2FjcmFsIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjE3LjAwI1NhY3JvIGlsaWFjIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjE4LjAwI1Nob3VsZGVyIG9yIGVsYm93IG9yIHdyaXN0IG9yIGhhbmQgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTkuMDAjVGhvcmFjbyBvciBsdW1ibyBvciBzYWNyYWwgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjAuMDAjV3Jpc3Qgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjEuMDAjV3Jpc3Qgb3IgaGFuZCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yMi4wMCNXcmlzdCBvciBoYW5kIG9yIGZpbmdlciBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yMy4wMCNBbmtsZSBkaXNhcnRpY3VsYXRpb24gcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yNC4wMCNBdXJhbCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjI1LjAwI0Nvc21ldGljIG9yIHNraW4gY292ZXJpbmcgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yNi4wMCNFbGJvdyBkaXNhcnRpY3VsYXRpb24gcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yNy4wMCNIaXAgZGlzYXJ0aWN1bGF0aW9uIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjguMDAjSG9vayBvciBmdW5jdGlvbmFsIHRvb2wgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yOS4wMCNLbmVlIG9yIGhpcCBqb2ludCBwcm9zdGhlc2VzIG9yIHRvcnF1ZSByZWR1Y2VycyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zMC4wMCNXcmlzdCBvciBlbGJvdyBqb2ludCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjMxLjAwI0tuZWUgZGlzYXJ0aWN1bGF0aW9uIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzIuMDAjTWFtbWFyeSBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjMzLjAwI05hc2FsIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzQuMDAjT2N1bGFyIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzUuMDAjQmFjayBmaWxsZXIgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zNi4wMCNQYWxhdGUgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zNy4wMCNQYXJ0aWFsIGZvb3QgaW5jbHVkaW5nIHRvZSBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjM4LjAwI1BhcnRpYWwgaGFuZCBpbmNsdWRpbmcgZmluZ2VyIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzkuMDAjU2hvdWxkZXIgZGlzYXJ0aWN1bGF0aW9uIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuNDAuMDAjU29ja2V0IG9yIGFsaWdubWVudCB1bml0IHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuNDEuMDAjVGVtcG9yYXJ5IHByb3N0aGVzZXMgZm9yIGVhcmx5IG1vYmlsaXphdGlvbiBvZiBsb3dlciBsaW1iIGFtcHV0ZWVzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQyLjAwI1RyYW5zZmVtb3JhbCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQzLjAwI1RyYW5zaHVtZXJhbCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQ0LjAwI1RyYW5zcmFkaWFsIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuNDUuMDAjVHJhbnN0aWJpYWwgaW5jbHVkaW5nIGFua2xlIG9yIGZvb3QgZGV2aWNlIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuNDYuMDAjV3Jpc3QgZGlzYXJ0aWN1bGF0aW9uIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuNDcuMDAjUHJvc3RoZXRpYyBoYW5kcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40OC4wMCNWYXNjdWxhciBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjAwLjAwI0NvbW11bmljYXRpb24gYW5kIGVkdWNhdGlvbmFsIG1hdGVyaWFsIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDEuMDAjQnJhaWxsZSB3cml0aW5nIHBhcGVyIG9yIHBsYXN0aWMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDIuMDAjU3dpdGNoYm9hcmRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDMuMDAjQ2hhcmFjdGVyIHJlYWRpbmcgbWFjaGluZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wNC4wMCNTeW50aGV0aWMgc3BlZWNoIGRldmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wNS4wMCNUYWN0aWxlIGRpc3BsYXlzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDYuMDAjTGV0dGVyIG9yIHN5bWJvbCBib2FyZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wNy4wMCNEaWFsb2d1ZSB1bml0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjA4LjAwI1ZvaWNlIGdlbmVyYXRvcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wOS4wMCNWb2ljZSBhbXBsaWZpZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTAuMDAjSGVhcmluZyBhaWRzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjExLjAwI1dyaXRpbmcgZnJhbWVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTIuMDAjUmFpbiBpbmRpY2F0b3JzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTMuMDAjTGlnaHQgaW5kaWNhdG9ycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjE0LjAwI1NvdW5kIGluZGljYXRvcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xNS4wMCNTcGVlY2ggdHJhaW5pbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjE2LjAwI0xhbmd1YWdlIHRyYWluaW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xNy4wMCNCcmFpbGxlIGVxdWlwbWVudCM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xOC4wMCNCb29rIG9yIG1hbnVzY3JpcHQgaG9sZGVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjE5LjAwI1BhZ2UgdHVybmVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjIwLjAwI1NpZ25hdHVyZSBndWlkZXMgb3Igc3RhbXBzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMjEuMDAjRXJnb25vbWljYWxseSBkZXNpZ25lZCBzdGF0aW9uZXJ5IGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wMC4wMCNGdXJuaXR1cmUgYW5kIGFjY2Vzc29yaWVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDEuMDAjUHJlc3N1cmUgc29yZSBwcmV2ZW50aW9uIGZ1cm5pdHVyZSM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wMi4wMCNQcmVzc3VyZSBzb3JlIHByZXZlbnRpb24gbWF0dHJlc3NlcyBvciBjb3ZlcmluZ3MjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDMuMDAjQmFja3BhZHMgb3IgYmFja3Jlc3RzIG9yIHNpbWlsYXIgYWRhcHRhdGlvbnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wNC4wMCNBcm0gcmVzdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wNS4wMCNCZWQgZXh0ZW5zaW9ucyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjA2LjAwI0JlZCBsaWZ0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjA3LjAwI0JlZCBzaG9ydGVuaW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wOC4wMCNFcmdvbm9taWNhbGwgZGVzaWduZWQgYmVkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjA5LjAwI0JsYW5rZXQgc3VwcG9ydHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4xMC4wMCNNZWNoYW5pemVkIGNoYWlycyB0byBhc3Npc3Qgd2l0aCBzaXR0aW5nIG9yIHN0YW5kaW5nIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMTEuMDAjQ294aXQgb3IgYXJ0aHJvZGVzaXMgY2hhaXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMTIuMDAjTGVnIGV4dGVuZGVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjEzLjAwI0xlZyBzdXBwb3J0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjE0LjAwI01vZHVsYXIgb3Igc3BlY2lhbCBzaXR0aW5nIGZ1cm5pdHVyZSBzeXN0ZW1zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMTUuMDAjSGVpZ2h0IGFkanVzdGFibGUgcGxpbnRocyBvciBicmFja2V0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjE2LjAwI0VyZ29ub21pY2FsbHkgZGVzaWduZWQgdGFibGVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDAuMDAjUGVyc29uYWwgY2FyZSBkZXZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDEuMDAjQWlkcyB0byBhc3Npc3QgaW4gZHJlc3Npbmcgb25lcyBzZWxmIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDIuMDAjQWlkcyBmb3Igd2FzaGluZyBvbmVzIHNlbGYgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wMy4wMCNBaWRzIGZvciBkcnlpbmcgb25lcyBzZWxmIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDQuMDAjQmF0aGluZyBzdHJldGNoZXJzIG9yIHNob3dlciB0YWJsZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wNS4wMCNEaWFwZXIgY2hhbmdpbmcgdGFibGVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDYuMDAjQmVkcGFucyBvciBjb21tb2RlIGNoYWlycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjA3LjAwI0J1dHRvbmluZyBvciBmYXN0ZW5pbmcgZGV2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjA4LjAwI0V4dGVuZGVkIGhhbmRsZSBjb21icyBvciBicnVzaGVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDkuMDAjVG9pbGV0IGF0dGFjaGVkIGRvdWNoZXMgb3IgYWlyIGRyeWVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjEwLjAwI1RvaWxldCBzZWF0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjExLjAwI0hhbmQgZ3JpcCB0b290aGJydXNoZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4xMi4wMCNCb2R5IHdvcm4gdXJpbmUgYWJzb3JiaW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4xMy4wMCNVcmluZSBjb2xsZWN0aW9uIHN5c3RlbXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4xNC4wMCNJbmNvbnRpbmVuY2UgYWxhcm1zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMTUuMDAjT3N0b215IGJhZ3Mgb3IgYWNjZXNzb3JpZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wMC4wMCNQcm90ZWN0aW9uIGFuZCBtb2JpbGl0eSBkZXZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDEuMDAjQ3J1dGNoZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDIuMDAjVHJpcG9kcyBvciBxdWFkcm9wb2RzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjAzLjAwI1dhbGtpbmcgc3RpY2tzIGFjY2Vzc29yaWVzIG9yIHBhcnRzIHRoZXJlb2YjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDQuMDAjUm9sbGF0b3JzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjA1LjAwI1dhbGtlcnMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDYuMDAjV2hlZWxjaGFpcnMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDcuMDAjV2hlZWxjaGFpciBhY2Nlc3NvcmllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wOC4wMCNTdXBwb3J0IHJhaWxzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDkuMDAjUm9wZSBsYWRkZXJzIG9yIGxpZnRpbmcgYmVsdHMgb3IgaGFybmVzc2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTAuMDAjTGlmdGluZyBvciB0dXJuaW5nIGN1c2hpb25zIGNhcnBldHMgb3Igc2hlZXRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTEuMDAjSG9pc3RzIG9yIHRyb2xsZXlzIGZvciBwZW9wbGUgd2l0aCBkaXNhYml0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjEyLjAwI1doZWVsY2hhaXIgcmFtcHMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTMuMDAjV2hlZWxjaGFpciBsaWZ0aW5nIHBsYXRmb3JtcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xNC4wMCNOYXZpZ2F0aW9uIG9yIG9yaWVudGF0aW9uIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xNS4wMCNDaGFpciBsaWZ0cyBvciBjaGFpciB0cmFuc3BvcnRlcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xNi4wMCNXYXJuaW5nIG9yIGFsYXJtIGRldmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xNy4wMCNBaXJ3YXkgcHJvdGVjdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTguMDAjRWFyIG9yIGhlYXJpbmcgcHJvdGVjdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTkuMDAjRmFjZSBvciBleWUgcHJvdGVjdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjAuMDAjSGFuZCBvciBhcm0gb3IgZWxib3cgcHJvdGVjdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjEuMDAjSGVhZCBwcm90ZWN0aW9uIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yMi4wMCNMb3dlciBleHRyZW1pdHkgcHJvdGVjdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjMuMDAjQmF0aHR1YiBsZW5ndGggb3Igd2lkdGggcmVkdWN0aW9uIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yNC4wMCNUcnVuayBvciB3aG9sZSBib2R5IHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjI1LjAwI0JvZHkgc3VwcG9ydCB1bml0cyBmb3IgaG9pc3RzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjYuMDAjRG9vciB3YXJuZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjcuMDAjRmxvYXRhdGlvbiBvciBzd21taW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yOC4wMCNSZWxpZWYgbWFwcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjI5LjAwI05vbiBjb3NtZXRpYyBza2luIGNsZWFuaW5nIG9yIHByb3RlY3RpdmUgcHJvZHVjdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4zMC4wMCNTdGF0aW9uYXJ5IGhvaXN0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjMxLjAwI1N0b21hIHNoaWVsZHMgb3IgcHJvdGVjdG9ycyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4zMi4wMCNUYWN0aWxlIHN0aWNrcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjMzLjAwI1RvaWxldCBhcm0gb3IgYmFja3Jlc3RzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDAuMDAjUmVjcmVhdGlvbmFsIGFuZCB0cmFpbmluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDEuMDAjQ2FtcGluZyBlcXVpcG1lbnQgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wMi4wMCNUaWx0aW5nIHRhYmxlcyBmb3IgYmFsYW5jZSB0cmFpbmluZyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjAzLjAwI0Jpb2ZlZWRiYWNrIGRldmljZXMgZm9yIG1vdmVtZW50IHN0cmVuZ3RoIG9yIGJhbGFuY2UgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wNC4wMCNTcG9ydHMgZXhlcmNpc2UgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjA1LjAwI0Zpc2hpbmcgb3IgaHVudGluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDYuMDAjUGxheWluZyBvciB0cmFpbmluZyBiYWxscyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjA3LjAwI0NoZXNzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDguMDAjUGxheWluZyBjYXJkcyBvciBob2xkZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDkuMDAjR2FyZGVuaW5nIHRvb2xzIG9yIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4xMC4wMCNIYW5kaWNyYWZ0IHRvb2xzIG1hdGVyaWFscyBvciBlcXVpcG1lbnQgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4xMS4wMCNQaG90b2dyYXBoaWMgZXF1aXBtZW50IG9yIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4xMi4wMCNDYXJhdmFubmluZyBlcXVpcG1lbnQgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4xMy4wMCNWaWJyYXRpbmcgY2hhaXJzIGZvciB0cmFpbmluZyBkZWFmIHBlb3BsZSM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wMC4wMCNTcGVjaWFsaXplZCBhaWRzIGZvciBob3VzZWtlZXBpbmcgYW5kIGhhbmRsaW5nIGdvb2RzIGFuZCBtZWFzdXJpbmcgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wMS4wMCNXZWlnaGluZyBvciBtZWFzdXJpbmcgYWlkcyBvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDIuMDAjQ3V0dGluZyBvciBjaG9wcGluZyBvciBkaXZpZGluZyBhaWRzIG9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wMy4wMCNDbGVhbmluZyBvciBwZWVsaW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wNC4wMCNCYWtpbmcgb3IgY29va2luZyBvciBmcnlpbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjA1LjAwI0Zvb2Qgb3IgZHJpbmsgc2VydmljZSBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDYuMDAjRm9vZCBzdG9wcGVycyBvciBmdW5uZWxzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDcuMDAjVGFibGV3YXJlIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDguMDAjUHVzaGVyIGVkZ2VzIG9yIHBsYXRlIGJ1ZmZlcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wOS4wMCNGZWVkaW5nIGFwcGFyYXR1cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjEwLjAwI0ZlZWRpbmcgcHJvYmVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTEuMDAjU2hvZSBjbGVhbmluZyBhcHBhcmF0dXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xMi4wMCNTZXdpbmcgb3Iga25pdHRpbmcgb3IgY3JvY2hldGluZyBvciBkYXJuaW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xMy4wMCNCb3R0bGUgb3IgY2FuIG9yIGNvbnRhaW5lciBvcGVuZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTQuMDAjVHViZSBzcXVlZXppbmcga2V5cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjE1LjAwI0dyYXNwaW5nIGFpZHMgdG8gYXNzaXN0IG9yIHJlcGxhY2UgaGFuZCBvciBmaW5nZXIgZnVuY3Rpb24gZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xNi4wMCNHcmlwIGFkYXB0ZXJzIG9yIGF0dGFjaG1lbnRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTcuMDAjQm9keSB3b3JuIGhvbGRlcnMgdG8gYXNzaXN0IGhhbmQgb3IgZmluZ2VyIGZ1bmN0aW9uIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTguMDAjU3RhbmRzIHRvIGFzc2lzdCBoYW5kIG9yIGZpbmdlciBmdW5jdGlvbiBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjE5LjAwI09wZXJhdGluZyBzdGlja3Mgc3VjaCBhcyBoZWFkIG9yIGNoaW4gb3IgbW91dGggc3RpY2tzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjAuMDAjRXh0ZW5kZXJzIHdpdGhvdXQgZ3JpcCBmdW5jdGlvbiBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjIxLjAwI0ZpeGVkIHBvc2l0aW9uaW5nIHN5c3RlbXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yMi4wMCNCYWxhbmNlcyBvciBlcXVpcG1lbnQgZm9yIGhvaXN0aW5nIG9yIGJhbGFuY2luZyBvYmplY3RzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjMuMDAjTWFuaXB1bGF0b3JzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjQuMDAjUm9ib3RzIHRvIGFzc2lzdCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjUuMDAjSW5kaWNhdG9ycyBzdWNoIGFzIHNpZ25hbCBsaWdodHMgb3IgYnV6emVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjI2LjAwI1BvaW50aW5nIGxhbXBzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjcuMDAjTWVhc3VyaW5nIGFpZHMgb3IgdG9vbHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yOC4wMCNPYmplY3QgcG9zaXRpb25pbmcgbGlmdGluZyBvciB0aWx0aW5nIHN5c3RlbXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yOS4wMCNNYW51YWwgZXh0ZW5kZWQgcmVhY2ggZ3JpcHBpbmcgdG9uZ3MgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMi4wMC4wMC4wMCNWZXRlcmluYXJ5IGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjNDIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTUuMDAuMDAjVmV0ZXJpbmFyeSBlcXVpcG1lbnQjNDIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTUuMDEuMDAjVmV0ZXJpbmFyeSBibG9vZCBwcmVzc3VyZSB0ZXN0ZXJzIzQyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE1LjAyLjAwI1ZldGVyaW5hcnkga3ltb2dyYXBoIHRlc3RlciM0Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNS4wMy4wMCNWZXRlcmluYXJ5IHB5cm9nZW5pYyB0ZXN0ZXIjNDIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTUuMDQuMDAjVmV0ZXJpbmFyeSBzdGVyZW90b3hpYyBlcXVpcG1lbnQjNDIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTUuMDUuMDAjVmV0ZXJpbmFyeSBlbGVjdHJvY2FyZGlvZ3JhcGggKEVDRykjNDIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDAuMDAjVmV0ZXJpbmFyeSBwcm9kdWN0cyM0Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNi4wMS4wMCNHYXN0cm9pbnRlc3RpbmFsIHZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDIuMDAjQmxvb2Qgb3IgYmxvb2QgZm9ybWluZyB2ZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjAzLjAwI1Jlc3BpcmF0b3J5IHN5c3RlbSB2ZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjA0LjAwI011c2N1bG8gc2tlbGV0YWwgb3IgbmVydm91cyBzeXN0ZW0gdmV0ZXJpbmFyeSBwcm9kdWN0cyM0Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNi4wNS4wMCNDYXJkaW92YXNjdWxhciBzeXN0ZW0gdmV0ZXJpbmFyeSBwcm9kdWN0cyM0Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNi4wNi4wMCNEZXJtYXRvbG9naWNhbHMgb3IgYW50aXByb3Rvem9hIHZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDcuMDAjR2VuaXRvIHVyaW5hcnkgc3lzdGVtIHNleCBvciBob3Jtb25lIHZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMDAuMDAuMDAuMDAjQ29tbXVuaWNhdGlvbnMgYW5kIENvbXB1dGVyIEVxdWlwbWVudCBhbmQgUGVyaXBoZXJhbHMgYW5kIENvbXBvbmVudHMgYW5kIFN1cHBsaWVzIzQzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjAwLjAwLjAwI1NvZnR3YXJlIzQzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjE1LjAwLjAwI0RhdGFiYXNlIHN5c3RlbXMjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTUuMDEuMDAjRGF0YWJhc2Ugc29mdHdhcmUjNDMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTYuMDAuMDAjT3BlcmF0aW5nIHN5c3RlbXMjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTYuMDEuMDAjTWFpbmZyYW1lIG9wZXJhdGluZyBzeXN0ZW0gc29mdHdhcmUjNDMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTYuMDIuMDAjUGVyc29uYWwgY29tcHV0ZXIgKFBDKSBvcGVyYXRpbmcgc3lzdGVtIHNvZnR3YXJlIzQzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE2LjAzLjAwI09wZW4gc3lzdGVtcyBvcGVyYXRpbmcgc3lzdGVtcyM0My4xNi4xNi4wMC4wMAotdW5zcHNjNyM0My4xNi4xNi4wNC4wMCNDbHVzdGVyaW5nIHNvZnR3YXJlIzQzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjAwLjAwI0J1c2luZXNzIHRyYW5zYWN0aW9uIGFuZCBwZXJzb25hbCBidXNpbmVzcyBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wMS4wMCNJbnZlc3RtZW50IG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDIuMDAjVGF4IHByZXBhcmF0aW9uIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjAzLjAwI0ZhY2lsaXRpZXMgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wNC4wMCNTb2Z0d2FyZSBzdWl0ZXMjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDUuMDAjSW52ZW50b3J5IG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDYuMDAjRmluYW5jaWFsIGFuYWx5c2lzIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjA3LjAwI0FjY291bnRpbmcgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDguMDAjVGltZSBhY2NvdW50aW5nIG9yIGh1bWFuIHJlc291cmNlcyBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wOS4wMCNBbmFseXRpY2FsIG9yIHNjaWVudGlmaWMgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMTAuMDAjTWF0aGVtYXRpY2FsIG9yIGZvcmVjYXN0aW5nIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjExLjAwI0F1Y3Rpb24gc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMTIuMDAjU2FsZXMgb3IgbWFya2V0aW5nIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjAwLjAwI0RvY3VtZW50IGNyZWF0aW9uIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjAxLjAwI0RvY3VtZW50IG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDIuMDAjRWxlY3Ryb25pYyBwdWJsaXNoaW5nIHNvZnR3YXJlIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjAzLjAwI09wdGljYWwgY2hhcmFjdGVyIHJlYWRlciAoT0NSKSBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wNC4wMCNWb2ljZSByZWNvZ25pdGlvbiBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wNS4wMCNEZXNrdG9wIHB1Ymxpc2hpbmcgc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDYuMDAjUHJlc2VudGF0aW9uIHNvZnR3YXJlIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjA3LjAwI1dvcmQgcHJvY2Vzc2luZyBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wOC4wMCNTY2FubmVyIHNvZnR3YXJlIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjA5LjAwI1NwZWxsIGNoZWNrZXJzIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjAwLjAwI0RyYXdpbmcgYW5kIGltYWdpbmcgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTkuMDEuMDAjQ29tcHV0ZXIgYWlkZWQgZGVzaWduIChDQUQpIHNvZnR3YXJlIzQzLjE2LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjAyLjAwI0dyYXBoaWNzIHNvZnR3YXJlIzQzLjE2LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjAzLjAwI0VkdWNhdGlvbmFsIHNvZnR3YXJlIzQzLjE2LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjA0LjAwI0NvbXB1dGVyIGFpZGVkIG1hbnVmYWN0dXJpbmcgKENBTSkgc29mdHdhcmUjNDMuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTkuMDUuMDAjQ2hhcnRpbmcgc29mdHdhcmUjNDMuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTkuMDYuMDAjRm9ybSBtYWtpbmcgc29mdHdhcmUjNDMuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTkuMDcuMDAjTWFwcGluZyBzb2Z0d2FyZSM0My4xNi4xOS4wMC4wMAotdW5zcHNjNyM0My4xNi4yMC4wMC4wMCNTY2hlZHVsaW5nIGFuZCBwcm9kdWN0aXZpdHkgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjAuMDEuMDAjUHJvamVjdCBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIwLjAyLjAwI1NjaGVkdWxpbmcgc29mdHdhcmUjNDMuMTYuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjAuMDMuMDAjQ29udGFjdCBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIxLjAwLjAwI1NwcmVhZHNoZWV0cyBhbmQgZW5oYW5jZW1lbnQgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjEuMDEuMDAjU3ByZWFkc2hlZXQgc29mdHdhcmUjNDMuMTYuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjIuMDAuMDAjTXVsdGltZWRpYSBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yMi4wMS4wMCNNdXNpYyBvciBzb3VuZCBlZGl0aW5nIHNvZnR3YXJlIzQzLjE2LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIzLjAwLjAwI1ByaW50IHNob3Agc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjMuMDEuMDAjQWRkcmVzcyBib29rIG1ha2luZyBzb2Z0d2FyZSM0My4xNi4yMy4wMC4wMAotdW5zcHNjNyM0My4xNi4yMy4wMi4wMCNMYWJlbCBtYWtpbmcgc29mdHdhcmUjNDMuMTYuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjQuMDAuMDAjUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIGFuZCB0b29scyM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNC4wMS4wMCNDb21waWxpbmcgc29mdHdhcmVzIzQzLjE2LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI0LjAyLjAwI0NvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4yNC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNC4wMy4wMCNEZXZlbG9wbWVudCBzb2Z0d2FyZSM0My4xNi4yNC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNC4wNC4wMCNHcmFwaGljYWwgdXNlciBpbnRlcmZhY2UgKEdVSSkgdG9vbHMjNDMuMTYuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjQuMDUuMDAjUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIzQzLjE2LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI0LjA2LjAwI1Byb2dyYW0gdGVzdGluZyBzb2Z0d2FyZSM0My4xNi4yNC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wMC4wMCNTb2Z0d2FyZSB1dGlsaXRpZXMjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDEuMDAjQmFja3VwIG9yIHJlY292ZXJ5IHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjAyLjAwI0JhciBjb2Rpbmcgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDMuMDAjRmlsZSBzZWN1cml0eSBvciBkYXRhIHNlY3VyaXR5IHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjA0LjAwI0ZvcmVpZ24gbGFuZ3VhZ2UgdHJhbnNsYXRpb24gc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDUuMDAjUHJpbnQgdXRpbGl0eSBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wNi4wMCNTdG9yYWdlIG1lZGlhIGxvYWRpbmcgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDcuMDAjVmlydXMgcHJvdGVjdGlvbiBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wOC4wMCNHZW5lcmFsIHV0aWxpdHkgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDkuMDAjQ29tcHJlc3Npb24gdXRpbGl0aWVzIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjEwLjAwI1N5c3RlbSBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjExLjAwI1N0b3JhZ2UgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4xMi4wMCNWZXJzaW9uIGNoZWNrZXIgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDAuMDAjTmV0d29ya2luZyBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wMS4wMCNQbGF0Zm9ybSBpbnRlcmNvbm5lY3Rpdml0eSBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wMi4wMCNPcHRpY2FsIGp1a2Vib3ggc2VydmVyIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjAzLjAwI09wZXJhdGluZyBzeXN0ZW0gZW5oYW5jZW1lbnQgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDQuMDAjTmV0d29yayBvcGVyYXRpbmcgc3lzdGVtIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjA1LjAwI05ldHdvcmtpbmcgZGV2ZWxvcGVycyBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wNi4wMCNOZXR3b3JrIGNvbm5lY3Rpdml0eSB0ZXJtaW5hbCBlbXVsYXRpb24gc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDcuMDAjTWFpbmZyYW1lIHRyYW5zYWN0aW9uIHByb2Nlc3Npbmcgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDguMDAjTGljZW5zZSBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjA5LjAwI0dhdGV3YXkgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMTAuMDAjQ29tcGFjdCBkaXNjIChDRCkgc2VydmVyIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjExLjAwI0FkbWluaXN0cmF0aW9uIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjEyLjAwI1RyYW5zYWN0aW9uIHNlcnZlciBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xMy4wMCNTd2l0Y2ggb3Igcm91dGVyIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjE0LjAwI011bHRpcGxleGVyIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjE1LjAwI0NvbW11bmljYXRpb25zIHNlcnZlciBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xNi4wMCNCcmlkZ2Ugc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDAuMDAjQ29tbXVuaWNhdGlvbiBTb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNy4wMS4wMCNEZXNrdG9wIGNvbW11bmljYXRpb25zIHNvZnR3YXJlIzQzLjE2LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI3LjAyLjAwI1NlcnZlciBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSM0My4xNi4yNy4wMC4wMAotdW5zcHNjNyM0My4xNi4yNy4wMy4wMCNJbnRlcmFjdGl2ZSB2b2ljZSByZXNwb25zZSBzb2Z0d2FyZSM0My4xNi4yNy4wMC4wMAotdW5zcHNjNyM0My4xNi4yNy4wNC4wMCNNb2RlbSBzb2Z0d2FyZSM0My4xNi4yNy4wMC4wMAotdW5zcHNjNyM0My4xNi4yNy4wNS4wMCNSZW1vdGUgYWNjZXNzIHNvZnR3YXJlIzQzLjE2LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI3LjA2LjAwI1ZpZGVvIGNvbmZlcmVuY2luZyBzb2Z0d2FyZSM0My4xNi4yNy4wMC4wMAotdW5zcHNjNyM0My4xNi4yNy4wNy4wMCNFeGNoYW5nZSBzb2Z0d2FyZSM0My4xNi4yNy4wMC4wMAotdW5zcHNjNyM0My4xNi4yOC4wMC4wMCNJbnRlcm5ldCBhbmQgaW50cmFuZXQgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjguMDEuMDAjSW50ZXJuZXQgYnJvd3Npbmcgc29mdHdhcmUjNDMuMTYuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjguMDIuMDAjV2ViIHNlcnZlciBzb2Z0d2FyZSM0My4xNi4yOC4wMC4wMAotdW5zcHNjNyM0My4xNi4yOS4wMC4wMCNNaXNjZWxsYW5lb3VzIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjI5LjAxLjAwI0NvbXB1dGVyIGdhbWUgc29mdHdhcmUjNDMuMTYuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjkuMDIuMDAjU2NyZWVuIHNhdmVycyM0My4xNi4yOS4wMC4wMAotdW5zcHNjNyM0My4xNi4yOS4wMy4wMCNUcmFpbmluZyBzb2Z0d2FyZSM0My4xNi4yOS4wMC4wMAotdW5zcHNjNyM0My4xNi4yOS4wNC4wMCNFbnRlcnRhaW5tZW50IHNvZnR3YXJlIzQzLjE2LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI5LjA1LjAwI0ZhbWlseSB0aXRsZXMjNDMuMTYuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjkuMDYuMDAjRWR1Y2F0aW9uYWwgc29mdHdhcmUjNDMuMTYuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDAuMDAjSW5kdXN0cnkgc3BlY2lmaWMgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDEuMDAjUG9pbnQgb2Ygc2FsZSAoUE9TKSBzb2Z0d2FyZSM0My4xNi4zMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMC4wMi4wMCNGbGlnaHQgY29udHJvbCBzb2Z0d2FyZSM0My4xNi4zMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMC4wMy4wMCNBdmlhdGlvbiBncm91bmQgc3VwcG9ydCBzb2Z0d2FyZSM0My4xNi4zMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMC4wNC4wMCNBdmlhdGlvbiB0ZXN0IHNvZnR3YXJlIzQzLjE2LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMwLjA1LjAwI0luZHVzdHJpYWwgY29udHJvbCBzb2Z0d2FyZSM0My4xNi4zMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMC4wNi4wMCNMaWJyYXJ5IHNvZnR3YXJlIzQzLjE2LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMwLjA3LjAwI0NvbXBsaWFuY2Ugc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzEuMDAuMDAjRHJpdmVycyBhbmQgc3lzdGVtIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMxLjAxLjAwI0V0aGVybmV0IGRyaXZlcnMjNDMuMTYuMzEuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzEuMDIuMDAjR3JhcGhpY3MgY2FyZCBkcml2ZXJzIzQzLjE2LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjAwLjAwLjAwI0hhcmR3YXJlIGFuZCBhY2Nlc3NvcmllcyM0My4wMC4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wMC4wMCNUZWxlcGhvbnkgZXF1aXBtZW50IzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjAxLjAwI0V4Y2hhbmdlIGNvbXBvbmVudHMgKENPREVDKSM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wMi4wMCNFeGNoYW5nZSBkYXRhIGludGVyZmFjZSBjYXJkcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wMy4wMCNFeGNoYW5nZSBkYXRhY29tIG1vZHVsZXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDQuMDAjUGhvbmUgZXhjaGFuZ2UgaW50ZXJmYWNlcyBvciBjb21wb25lbnRzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjA1LjAwI0V4Y2hhbmdlIHRydW5rIGludGVyZmFjZSBvciBjYXJkIGNvbXBvbmVudHMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDYuMDAjUHJlbWlzZSBicmFuY2ggZXhjaGFuZ2UgKFBCWCkgc3lzdGVtcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wNy4wMCNUZWxlcGhvbmUgc3dpdGNoaW5nIGVxdWlwbWVudCM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wOC4wMCNTd2l0Y2hib2FyZCBlcXVpcG1lbnQjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDkuMDAjUHVuY2ggZG93biBibG9ja3MjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTAuMDAjQW5hbG9nIG9yIGRpZ2l0YWwgdGVsZXBob25lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xMS4wMCNBbmFsb2cgb3IgZGlnaXRhbCBjZWxsdWxhciB0ZWxlcGhvbmVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjEyLjAwI01vYmlsZSB0ZWxlcGhvbmVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjEzLjAwI0NvcmRsZXNzIHRlbGVwaG9uZXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTQuMDAjUGF5IHRlbGVwaG9uZXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTUuMDAjQW5zd2VyaW5nIG1hY2hpbmVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjE2LjAwI1RlbGVwaG9uZSBoZWFkc2V0cyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xNy4wMCNWb2ljZSBtYWlsIHN5c3RlbXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTguMDAjQ2FsbCBtYW5hZ2VtZW50IHN5c3RlbSM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xOS4wMCNDZWxsdWxhciB0ZWxlcGhvbmUgYWNjZXNzb3JpZXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjAuMDAjVGVsZXBob25lIHJlc3RzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjIxLjAwI1RlbGVwaG9uZSBhZGFwdGVycyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yMi4wMCNUZWxlcGhvbmUgbGluZSBtdWx0aXBsaWVycyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yMy4wMCNUZWxlcGhvbmUgbGluZSBtb2R1bGFyIGNvdXBsZXJzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjI0LjAwI1ZpZGVvcGhvbmVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjI1LjAwI0RpYWxlcnMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjYuMDAjVGVsZXBob25lIGFtcGxpZmllcnMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjcuMDAjVGVsZXBob25lIHN0YW5kcyBvciBob2xkZXJzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjI4LjAwI0ludGVncmF0ZWQgc2VydmljZXMgZGlnaXRhbCBuZXR3b3JrIGV4Y2hhbmdlcyBJU0ROIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjI5LjAwI1RlbGVwaG9uZSBqYWNrcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wMC4wMCNBbnRlbm5hcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wMS4wMCNUcmFuc21pdHRlcnMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDIuMDAjUmVjZWl2ZXJzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjAzLjAwI1R1bmVycyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wNC4wMCNTaG9ydCB3YXZlIGVxdWlwbWVudCM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wNS4wMCNBaXJjcmFmdCBhbnRlbm5hcyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wNi4wMCNBdXRvbW90aXZlIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjA3LjAwI0Jyb2FkY2FzdCBhbnRlbm5hcyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wOC4wMCNNaWNyb3dhdmUgYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDkuMDAjVGVsZXZpc2lvbiBhbnRlbm5hcyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4xMC4wMCNTYXRlbGxpdGUgYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMTEuMDAjUmFkaW8gYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMTIuMDAjUmFkYXIgYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMTMuMDAjQ29tbXVuaWNhdGlvbnMgYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMTQuMDAjQ29tbXVuaWNhdGlvbiB0b3dlcnMgb3Igc3VwcG9ydCM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wMC4wMCNUZWxlY29tbXVuaWNhdGlvbnMgZXF1aXBtZW50IzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjAxLjAwI1dpcmVsZXNzIGJhc2Ugc3RhdGlvbnMjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDIuMDAjVGVsZWdyYXBoIGVxdWlwbWVudCM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wMy4wMCNUZWxldHlwZSBlcXVpcG1lbnQjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDQuMDAjVGVsZWNvbmZlcmVuY2luZyBlcXVpcG1lbnQjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDUuMDAjU2F0ZWxsaXRlIGNvbW11bmljYXRpb24gZXF1aXBtZW50IzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjA2LjAwI1BhZ2VycyBvciBiZWVwZXJzIzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjA3LjAwI0ludGVyY29tbXVuaWNhdGlvbnMgb3IgcGFnaW5nIHN5c3RlbXMjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDguMDAjUHVibGljIGFkZHJlc3MgZXF1aXBtZW50IzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjA5LjAwI0VsZWN0cm9uaWMgc291bmQgZXF1aXBtZW50IzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjEwLjAwI0RpY3RhdGluZyBtYWNoaW5lcyM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4xMS4wMCNMaW5lIGNvbmRpdGlvbmVycyM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4xMi4wMCNDaGFubmVsIHNlcnZpY2UgdW5pdCBvciBkYXRhIHNlcnZpY2UgdW5pdCAoQ1NVIG9yIERTVSkjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDAuMDAjQ29tcHV0ZXJzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjAxLjAwI05vdGVib29rIGNvbXB1dGVycyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wMi4wMCNEb2NraW5nIHN0YXRpb25zIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjAzLjAwI1dvcmtzdGF0aW9ucyBvciBkZXNrdG9wIGNvbXB1dGVycyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wNC4wMCNQZXJzb25hbCBkaWdpdGFsIGFzc2lzdGFudHMgKFBEQXMpIG9yIHBlbiBiYXNlZCBjb21wdXRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDUuMDAjTWFpbmZyYW1lIGNvbXB1dGVycyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wNi4wMCNTZXJ2ZXJzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjA3LjAwI1BvcnQgcmVwbGljYXRvcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDguMDAjTWluaWNvbXB1dGVycyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wOS4wMCNQb2ludCBvZiBzYWxlIChQT1MpIHRlcm1pbmFscyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xMC4wMCNQcm9ncmFtbWFibGUgbG9naWMgY29udHJvbGxlciAoUExDKSM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xMS4wMCNDb25zb2xlICBtYWluZnJhbWUjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTIuMDAjQ29uc29sZSBjb250cm9sbGVyICBtYWluZnJhbWUjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTMuMDAjQ2hhbm5lbCBjb252ZXJ0ZXIjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTQuMDAjQ2hhbm5lbCB0byBjaGFubmVsIGludGVyZmFjZSBtYWluZnJhbWUjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTUuMDAjQ29udHJvbCB1bml0IzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjE2LjAwI0NvdXBsZXIgZmFjaWxpdHkgIG1haW5mcmFtZSM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xNy4wMCNQb3dlciBjb29sZXIgdW5pdCAgbWFpbmZyYW1lIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjE4LjAwI1RoaW4gY2xpZW50IG9yIGRpc2tsZXNzIHdvcmtzdGF0aW9ucyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xOS4wMCNDb25zb2xlIGV4dGVuZGVycyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOS4wMC4wMCNNZW1vcnkgYW5kIGNlbnRyYWwgcHJvY2Vzc2luZyB1bml0cyBDUFVzIGFuZCBhY2Nlc3NvcmllcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOS4wMS4wMCNDYWNoZSBtZW1vcnkgbW9kdWxlcyM0My4xNy4xOS4wMC4wMAotdW5zcHNjNyM0My4xNy4xOS4wMi4wMCNDZW50cmFsIHByb2Nlc3NpbmcgdW5pdCAoQ1BVKSBwcm9jZXNzb3JzIzQzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE5LjAzLjAwI0NlbnRhbCBwcm9jZXNzaW5nIHVuaXQgKENQVSkgbW90aGVyYm9hcmRzIG9yIGRhdWdodGVyYm9hcmRzIzQzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE5LjA0LjAwI01lbW9yeSBtb2R1bGVzIzQzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE5LjA1LjAwI0NlbnRyYWwgcHJvY2Vzc2luZyB1bml0IGNvb2xlcnMjNDMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDAuMDAjQ29tcHV0ZXIgY29udHJvbCBhbmQgaW50ZXJmYWNlIGJvYXJkcyBhbmQgY2FyZHMgYW5kIGNhYmxlcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wMS4wMCNQYXJhbGxlbCB0byBzbWFsbCBjb21wdXRlciBzeXN0ZW0gaW50ZXJmYWNlIGNvbnZlcnRlcnMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDIuMDAjUGFyYWxsZWwgdG8gc2VyaWFsIGNvbnZlcnRlcnMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDMuMDAjU2VyaWFsIGluZnJhcmVkIHBvcnRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjA0LjAwI1ZpZGVvIGFjY2VsZXJhdG9yIGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjA1LjAwI0dyYXBoaWMgYWNjZWxlcmF0b3IgY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDYuMDAjTmV0d29yayBpbnRlcmZhY2UgY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDcuMDAjQXVkaW8gY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDguMDAjRW11bGF0aW9uIGFkYXB0ZXJzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjA5LjAwI1NlcmlhbCBwb3J0IGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjEwLjAwI1BhcmFsbGVsIHBvcnQgY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTEuMDAjU21hbGwgY29tcHV0ZXIgc3lzdGVtIGludGVyZmFjZSAoU0NTSSkgY29udHJvbGxlciBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xMi4wMCNEZWNvZGVyIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjEzLjAwI1Byb2dyYW1tYWJsZSBsb2dpYyBjb250cm9sbGVyIGlucHV0IG1vZHVsZSM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xNC4wMCNQcm9ncmFtbWFibGUgbG9naWMgY29udHJvbGxlciBjb3VudGVyIG1vZHVsZSM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xNS4wMCNQcm9ncmFtbWFibGUgbG9naWMgY29udHJvbGxlciBjb21tdW5pY2F0aW9uIG1vZHVsZSM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xNi4wMCNXaXJlbGVzcyBuZXR3b3JrIGludGVyZmFjZSBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xNy4wMCNUaW1la2VlcGluZyBjYXJkIG1hY2hpbmUgYW5kIGNvbXB1dGVyIGludGVyZmFjZSBkZXZpY2UjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTguMDAjUHJvY2Vzc29yIGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjAwLjAwI0F1ZGlvIGFuZCB2aXN1YWwgYWNjZXNzb3JpZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDEuMDAjTXVzaWNhbCBpbnN0cnVtZW50IGRpZ2l0YWwgaW50ZXJmYWNlIChNSURJKSBpbnRlcmZhY2VzIG9yIGFkYXB0ZXJzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjAyLjAwI1NpZ25hbCBwcm9jZXNzb3IgdXBncmFkZXMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDMuMDAjVmlkZW8gY2FwdHVyZSBib2FyZHMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDQuMDAjVGVsZXZpc2lvbiBjYXJkcyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wNS4wMCNSYWRpbyBjYXJkcyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wNi4wMCNNdWx0aW1lZGlhIGtpdHMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDcuMDAjQ29tcHV0ZXIgc3BlYWtlcnMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDguMDAjQ29tcHV0ZXIgaGVhZHNldCM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wOS4wMCNTZXQgdG9wIGJveGVzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjEwLjAwI1ZpZGVvIGNhc3NldHRlIGNvbnRhaW5lcnMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDAuMDAjSW5wdXQgZGV2aWNlcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wMS4wMCNCYXIgY29kZSByZWFkZXJzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjAyLjAwI0dyYXBoaWNzIHRhYmxldHMgb3IgZGlnaXRpemVycyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wMy4wMCNKb3lzdGlja3Mgb3IgZ2FtZSBwYWRzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjA0LjAwI0tleWJvYXJkcyBvciBrZXlwYWRzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjA1LjAwI0NvbXB1dGVyIG1vdXNlIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjA2LjAwI1JlbW90ZSB1c2VyIGludGVyZmFjZXMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDcuMDAjU2Nhbm5lcnMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDguMDAjVG91Y2ggcGFkcyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wOS4wMCNUb3VjaCBzY3JlZW5zIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjEwLjAwI1RyYWNrYmFsbHMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTEuMDAjVm9pY2UgbWljcm9waG9uZXMgZm9yIGNvbXB1dGVycyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xMi4wMCNQdW5jaCBjYXJkIHJlYWRlcnMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTMuMDAjTGlnaHQgcGVuIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjE0LjAwI1N0eWx1cyBwZW4gZm9yIG1vYmlsZSBjb21wdXRlcnMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTUuMDAjTW91c2UgcGFkIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjE2LjAwI1Byb2dyYW1tYWJsZSBsb2dpYyBjb250cm9sbGVyIGhhbmRoZWxkIHByb2dyYW1tZXIjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTcuMDAjRUdSICBFbGVjdHJvbmljIGdhdGUgcmVhZGVyIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjE4LjAwI0R1bWIgdGVybWluYWwjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTkuMDAjUHVuY2hlZCBjYXJkcyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wMC4wMCNFbGVjdHJvbmljIGRhdGEgc3RvcmFnZSBlcXVpcG1lbnQjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDEuMDAjUmVhZCBvbmx5IGNvbXBhY3QgZGlzYyAoQ0QpIGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wMi4wMCNDb21wYWN0IGRpc2MgKENEKSBqdWtlYm94ZXMgb3IgY2hhbmdlcnMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDMuMDAjQ29tYmluYXRpb24gZmxvcHB5IGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wNC4wMCNEaXNrIGFycmF5cyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wNS4wMCNGbG9wcHkgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjA2LjAwI0hpZ2ggY2FwYWNpdHkgcmVtb3ZhYmxlIG1lZGlhIGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wNy4wMCNNdWx0aSBkcml2ZSBoYXJkIGRyaXZlIHRvd2VycyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wOC4wMCNSZWNvcmRhYmxlIGNvbXBhY3QgZGlzYyAoQ0QpIGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wOS4wMCNSZWVsIHRvIHJlZWwgdGFwZSBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTAuMDAjU2luZ2xlIG9wdGljYWwgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjExLjAwI1RhcGUgYXJyYXlzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjEyLjAwI1RhcGUgZHJpdmUgYXV0byBsb2FkZXJzIG9yIGxpYnJhcmllcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xMy4wMCNIYXJkIGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xNC4wMCNDb21wdXRlciBEVkQgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjE1LjAwI0FycmF5IGNvbnRyb2xsZXIjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTYuMDAjTVAzIHBsYXllciM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xNy4wMCNNZW1vcnkgY2FyZCByZWFkZXJzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjE4LjAwI1BlcmlwaGVyYWwgY29tcG9uZW50IG1pY3JvY2hhbm5lbCBpbnRlcmNvbm5lY3QgYXJjaGl0ZWN0dXJlICByZWFkZXIgYW5kIHdyaXRlciBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjQuMDAuMDAjTW9uaXRvcnMgYW5kIGRpc3BsYXlzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI0LjAxLjAwI01vbml0b3JzIzQzLjE3LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI0LjAyLjAwI0ZsYXQgcGFuZWwgZGlzcGxheXMjNDMuMTcuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjQuMDMuMDAjVG91Y2ggc2NyZWVuIG1vbml0b3JzIzQzLjE3LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI0LjA0LjAwI01vbml0b3IgYWNjZXNzb3JpZXMjNDMuMTcuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDAuMDAjUHJpbnRlcnMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDEuMDAjUGxvdHRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDIuMDAjQmFuZCBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wMy4wMCNEb3QgbWF0cml4IHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjA0LjAwI0xhYmVsIHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjA1LjAwI0xhcmdlIGZvcm1hdCBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wNi4wMCNMaW5lIG1hdHJpeCBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wNy4wMCNQYWdlIHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjA4LjAwI1RoZXJtYWwgdGFwZSBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wOS4wMCNJbmtqZXQgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMTAuMDAjTGFzZXIgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMTEuMDAjQnViYmxlIGpldCBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4xMi4wMCNCYWcgdGFnIHByaW50ZXIjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMTMuMDAjUHJpbnRlciBzZXBlcmF0b3IjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMTQuMDAjTXVsdGkgZnVuY3Rpb24gcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMTUuMDAjQVRCIGFpcmxpbmUgdGlja2V0IG9yIGJvYXJkaW5nIHBhc3MgcHJpbnRlciM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNi4wMC4wMCNFbmNsb3N1cmVzIGFuZCBmcmFtZXMgYW5kIGJhY2twbGFuZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjYuMDEuMDAjQ2hhc3NpcyM0My4xNy4yNi4wMC4wMAotdW5zcHNjNyM0My4xNy4yNi4wMi4wMCNOZXR3b3JrIGNoYXNzaXMjNDMuMTcuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjYuMDMuMDAjRHJpdmUgY2FiaW5ldHMjNDMuMTcuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjYuMDQuMDAjRXhwYW5zaW9uIHNsb3QgZXhwYW5kZXIjNDMuMTcuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjYuMDUuMDAjUmFja3MjNDMuMTcuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjYuMDYuMDAjUHJvZ3JhbW1hYmxlIGxvZ2ljIGNvbnRyb2xsZXIgcmFjayBvciBiYXNlIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjA3LjAwI1JlbW92YWJsZSBkcml2ZSBmcmFtZXMjNDMuMTcuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDAuMDAjTmV0d29yayBoYXJkd2FyZSBhbmQgY29tcG9uZW50cyBhbmQgYWNjZXNzb3JpZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDEuMDAjSHVicyBvciBjb25jZW50cmF0b3JzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjAyLjAwI1JvdXRlcnMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDMuMDAjUmVwZWF0ZXJzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjA0LjAwI05ldHdvcmsgYnJpZGdlcyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wNS4wMCNTd2l0Y2hlcyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wNi4wMCNNZWRpYSBmaWx0ZXJzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjA3LjAwI1dpZGUgYXJlYSBuZXR3b3JrIChXQU4pIGNhcmRzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjA4LjAwI011bHRpc3RhdGlvbiBhY2Nlc3MgdW5pdHMgKE1BVXMpIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjA5LjAwI0RhdGEgc2VydmljZSB1bml0cyAoRFNVcykjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTAuMDAjTmV0d29yayBhZGFwdGVycyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xMS4wMCNMb2FkIGJhbGFuY2VyIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjEyLjAwI1ByaW50ZXIgIGFjY3VtdWxhdG9yIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjEzLjAwI0VudGVycHJpc2UgU3lzdGVtIENvbm5lY3Rpdml0eSBFU0NPTiBEaXJlY3RvciM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xNC4wMCNOZXR3b3JrIG1hbmFnZW1lbnQgc3lzdGVtIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjE1LjAwI0ZpcmV3YWxsIGZpcmV3YWxsIGFwcGxpYW5jZSM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xNi4wMCNDYWJsZSBuZXR3b3JrIHRlc3RlcnMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTcuMDAjRGF0YSBzeW5jaHJvbml6YXRpb24gZGV2aWNlIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjE4LjAwI0RpZ2l0YWwgY3Jvc3MgY29ubmVjdHMgZXF1aXBtZW50IzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjE5LjAwI09wdGljYWwgY3Jvc3MgY29ubmVjdHMgZXF1aXBtZW50IzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjIwLjAwI1NjcmVlbiBhbXBsaWZpZXIjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMjEuMDAjVGltZSBkaXZpc2lvbmFsIG11bHRpcGxleCM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4yMi4wMCNDb25uZWN0aW9uIHBhbmVscyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4yMy4wMCNWb2ljZSBlY2hvIGNhbmNlbGxlcnMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMjQuMDAjUGF0Y2ggcGFuZWwjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjguMDAuMDAjTW9kZW1zIGFuZCByZWxhdGVkIGhhcmR3YXJlIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjAxLjAwI01vZGVtcyBvciBuZXR3b3JrIGNvbWJvIGNhcmRzIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjAyLjAwI01vZGVtcyM0My4xNy4yOC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wMy4wMCNJbnRlZ3JhdGVkIHNlcnZpY2VzIGRpZ2l0YWwgbmV0d29yayAoSVNETikgYWRhcHRlcnMjNDMuMTcuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjguMDQuMDAjTW9kZW0gYmFua3MjNDMuMTcuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjguMDUuMDAjTW9kZW0gdGVsZWFkYXB0b3JzIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjA2LjAwI011bHRpcGxleG9yIE1VWHMjNDMuMTcuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjguMDcuMDAjQWRkIGRyb3AgbXVsdGlwbGV4ZXIjNDMuMTcuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjkuMDAuMDAjTmV0d29yayBzd2l0Y2hlcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOS4wMS4wMCNMb2NhbCBhcmVhIG5ldHdvcmsgKExBTikgc3dpdGNoZXMjNDMuMTcuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjkuMDIuMDAjQXN5bmNocm9ub3VzIHRyYW5zZmVyIG1vZGUgKEFUTSkgc3dpdGNoZXMjNDMuMTcuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjkuMDMuMDAjRmliZXIgZGlzdHJpYnV0ZWQgZGF0YSBpbnRlcmZhY2UgKEZEREkpICBzd2l0Y2hlcyM0My4xNy4yOS4wMC4wMAotdW5zcHNjNyM0My4xNy4yOS4wNC4wMCNXaWRlIGFyZWEgbmV0d29yayAoV0FOKSBzd2l0Y2hlcyM0My4xNy4yOS4wMC4wMAotdW5zcHNjNyM0My4xNy4yOS4wNS4wMCNJbnRlbGxpZ2VudCBuZXR3b3JrIHN3aXRjaGluZyBzeXN0ZW0jNDMuMTcuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzAuMDAuMDAjTmV0d29yayByZXBlYXRlcnMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzAuMDEuMDAjQXR0YWNoZWQgcmVzb3VyY2UgY29tcHV0ZXIgbmV0d29yayAoQVJDbmV0KSByZXBlYXRlcnMjNDMuMTcuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzAuMDIuMDAjRXRoZXJuZXQgcmVwZWF0ZXJzIzQzLjE3LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMwLjAzLjAwI0ZpYmVyIGRpc3RyaWJ1dGVkIGRhdGEgaW50ZXJmYWNlIChGRERJKSByZXBlYXRlcnMjNDMuMTcuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzAuMDQuMDAjVG9rZW4gcmluZyByZXBlYXRlcnMjNDMuMTcuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzEuMDAuMDAjUmFkaW8gc3lzdGVtcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zMS4wMS4wMCNUcmFuc21pdHRlcnMjNDMuMTcuMzEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzEuMDIuMDAjUmVjZWl2ZXJzIzQzLjE3LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMxLjAzLjAwI1RyYW5zY2VpdmVycyM0My4xNy4zMS4wMC4wMAotdW5zcHNjNyM0My4xNy4zMS4wNC4wMCNUdW5lcnMjNDMuMTcuMzEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzEuMDUuMDAjU2hvcnQgd2F2ZSBlcXVpcG1lbnQjNDMuMTcuMzEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzIuMDAuMDAjQXV0b21hdGVkIGRhdGEgY29sbGVjdGlvbiBlcXVpcG1lbnQjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzIuMDEuMDAjQmFyIGNvZGUgZXF1aXBtZW50IzQzLjE3LjMyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMyLjAyLjAwI1JhZGlvIGZyZXF1ZW5jeSBpZGVudGlmaWNhdGlvbiAoSUQpIGVxdWlwbWVudCM0My4xNy4zMi4wMC4wMAotdW5zcHNjNyM0My4xNy4zMi4wMy4wMCNSYWRpbyBmcmVxdWVuY3kgZGF0YSBjb21tdW5pY2F0aW9uIGVxdWlwbWVudCM0My4xNy4zMi4wMC4wMAotdW5zcHNjNyM0My4xNy4zMi4wNC4wMCNDYW1lcmEgYmFzZWQgdmlzaW9uIHN5c3RlbXMgZm9yIGF1dG9tYXRlZCBkYXRhIGNvbGxlY3Rpb24jNDMuMTcuMzIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzIuMDUuMDAjQ3VycmVuY3kgcmVjb2duaXRpb24gZXF1aXBtZW50IzQzLjE3LjMyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMyLjA2LjAwI01hZ25ldGljIGNhcmQgcmVhZGVycyM0My4xNy4zMi4wMC4wMAotdW5zcHNjNyM0My4xNy4zMy4wMC4wMCNDb21wdXRlciBkYXRhIHN3aXRjaGVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMzLjAxLjAwI1NlcmlhbCBkYXRhIHN3aXRjaGVzIzQzLjE3LjMzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMzLjAyLjAwI0tleWJvYXJkIHZpZGVvIG1vdXNlIChLVk0pIHN3aXRjaCBib3hlcyM0My4xNy4zMy4wMC4wMAotdW5zcHNjNyM0My4xNy4zMy4wMy4wMCNNYW51YWwgcHJpbnRlciBzd2l0Y2hlcyM0My4xNy4zMy4wMC4wMAotdW5zcHNjNyM0My4xNy4zMy4wNC4wMCNBdXRvbWF0aWMgcHJpbnRlciBzd2l0Y2hlcyM0My4xNy4zMy4wMC4wMAotdW5zcHNjNyM0My4xNy4zMy4wNS4wMCNDb25zb2xlIHN3aXRjaCM0My4xNy4zMy4wMC4wMAotdW5zcHNjNyM0My4xNy4zMy4wNi4wMCNQYXJhbGxlbCBkYXRhIHN3aXRjaGVzIzQzLjE3LjMzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjM0LjAwLjAwI0NvbXB1dGVyIGFjY2Vzc29yeSBjb3ZlcnMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzQuMDEuMDAjS2V5IGJvYXJkIHNraW5zIzQzLjE3LjM0LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM0LjAyLjAwI05vdGVib29rIG9yIHBhbG10b3Agc2tpbnMjNDMuMTcuMzQuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzUuMDAuMDAjS2V5IGJvYXJkIHNraW5zIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjAwLjAwI0NvbXB1dGVyIGNhYmxlcyBhbmQgYWNjZXNzb3JpZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDEuMDAjTW91c2UgYWRhcHRlciM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wMi4wMCNLZXlib2FyZCBleHRlbnNpb24gY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjAzLjAwI01vZGVtIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wNC4wMCNDb3JkIGNvdmVycyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wNS4wMCNQYXJhbGxlbCBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDYuMDAjU2VyaWFsIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wNy4wMCNVbml2ZXJzYWwgc2VyaWFsIGJ1cyBVU0IgY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjA4LjAwI05ldHdvcmsgcGF0Y2ggY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjA5LjAwI0NvbXB1dGVyIGF1ZGlvIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4xMC4wMCNDb21wdXRlciB2aWRlbyBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMTEuMDAjSW50ZXIgZGV2aWNlIGxpbmsgY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjEyLjAwI0NvbXB1dGVyIGNhYmxlIGtpdHMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMTMuMDAjQ2FibGUgamFja3Mgb3IgY29ubmVjdG9ycyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wMC4wMCNTdG9yYWdlIGRyaXZlIGNvbXBvbmVudHMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDEuMDAjSGVhZCBhc3NlbWJsaWVzIG9yIHBhcnRzIzQzLjE3LjM3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjAyLjAwI0xlYWQgYXNzZW1ibGllcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wMy4wMCNIZWFkIHN0YWNrIGFzc2VtYmxpZXMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDQuMDAjQ29tYiBhc3NlbWJsaWVzIzQzLjE3LjM3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjA1LjAwI0NyYXNoIHN0b3BzIzQzLjE3LjM3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjA2LjAwI1BsYXR0ZXJzIG9yIGRpc2tzIzQzLjE3LjM3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjA3LjAwI0hlYWQgbW91bnRpbmcgYXJtcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wOC4wMCNSZWFkIHdyaXRlIGhlYWRzIzQzLjE3LjM3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjA5LjAwI01vdG9yIGRyaXZlcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xOC4wMC4wMC4wMCNDb21tdW5pY2F0aW9ucyBhbmQgY29tcHV0ZXIgc3VwcGxpZXMjNDMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTUuMDAuMDAjQXVkaW8gcmVjb3JkaW5nIG1lZGlhIzQzLjE4LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE4LjE1LjAxLjAwI0JsYW5rIGF1ZGlvIHRhcGVzIzQzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE2LjAwLjAwI0RhdGEgc3RvcmFnZSBtZWRpYSM0My4xOC4wMC4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wMS4wMCNGbG9wcHkgZGlza2V0dGVzIzQzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE2LjAyLjAwI1JlY29yZGFibGUgY29tcGFjdCBkaXNjcyAoQ0RzKSM0My4xOC4xNi4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wMy4wMCNCbGFuayBkYXRhIHRhcGVzIzQzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE2LjA0LjAwI0hpZ2ggZGVuc2l0eSByZW1vdmFibGUgbWVkaWEgYmxhbmsgZGlza3MjNDMuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTYuMDUuMDAjQmxhbmsgZGlnaXRhbCB2aWRlbyBkaXNjcyBEVkQjNDMuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTYuMDYuMDAjRGF0YSBzdG9yYWdlIGNhcmRzIzQzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE2LjA3LjAwI01hZ25ldG8gb3B0aWNhbCBkaXNrcyM0My4xOC4xNi4wMC4wMAotdW5zcHNjNyM0My4xOC4xNy4wMC4wMCNNdWx0aW1lZGlhIHN0b3JhZ2UjNDMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTcuMDEuMDAjTXVsdGltZWRpYSB0b3dlcnMjNDMuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTcuMDIuMDAjTXVsdGltZWRpYSBkcmF3ZXJzIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjAzLjAwI0NvbXBhY3QgZGlzYyAoQ0QpIGNhc2VzIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjA0LjAwI0Rpc2tldHRlIGhvbGRlcnMjNDMuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTcuMDUuMDAjRGlza2V0dGUgc3RvcmFnZSM0My4xOC4xNy4wMC4wMAotdW5zcHNjNyM0My4xOC4xNy4wNi4wMCNNdWx0aW1lZGlhIHRyYXlzIG9yIG9yZ2FuaXplcnMjNDMuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTcuMDcuMDAjWmlwIG1haWxlcnMjNDMuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTguMDAuMDAjTW9uaXRvciBzdGFuZHMgb3IgcmlzZXJzIzQzLjE4LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE4LjE5LjAwLjAwI01vbml0b3IgYXJtcyM0My4xOC4wMC4wMC4wMAotdW5zcHNjNyM0NC4wMC4wMC4wMC4wMCNPZmZpY2UgRXF1aXBtZW50IGFuZCBBY2Nlc3NvcmllcyBhbmQgU3VwcGxpZXMjNDQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMDAuMDAuMDAjT2ZmaWNlIG1hY2hpbmVzIGFuZCB0aGVpciBzdXBwbGllcyBhbmQgYWNjZXNzb3JpZXMjNDQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTUuMDAuMDAjRHVwbGljYXRpbmcgbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTUuMDEuMDAjUGhvdG9jb3BpZXJzIzQ0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE1LjAyLjAwI0ZhY3NpbWlsZSBtYWNoaW5lcyM0NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNS4wMy4wMCNNdWx0aWZ1bmN0aW9uIG1hY2hpbmVzIzQ0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE2LjAwLjAwI1BhcGVyIHByb2Nlc3NpbmcgbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTYuMDEuMDAjUGFwZXIgY3V0dGluZyBtYWNoaW5lcyM0NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNi4wMi4wMCNQYXBlciBwdW5jaGluZyBvciBiaW5kaW5nIG1hY2hpbmVzIzQ0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE2LjAzLjAwI1BhcGVyIHNocmVkZGluZyBtYWNoaW5lcyBvciBhY2Nlc3NvcmllcyM0NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wMC4wMCNQcmludGVyIGFuZCBwaG90b2NvcGllciBhbmQgZmFjc2ltaWxlIGFjY2Vzc29yaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjAxLjAwI0NvbG9yIG9wdGlvbnMgb3IgdXBncmFkZXMjNDQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTcuMDIuMDAjRHVwbGV4ZXIgdHJheXMjNDQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTcuMDMuMDAjRHVwbGV4ZXIgdW5pdHMjNDQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTcuMDQuMDAjRmFjc2ltaWxlIGhhbmRzZXRzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjA1LjAwI1ByaW50ZXIgdHJheXMgb3IgZmVlZGVycyM0NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wNi4wMCNQaG90b2NvbmR1Y3RvciBvciBpbWFnaW5nIHVuaXRzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjA3LjAwI1N0YXBsZXIgdW5pdHMjNDQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTguMDAuMDAjQ2FsY3VsYXRpbmcgbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTguMDEuMDAjQ2FsY3VsYXRvcnMjNDQuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTguMDIuMDAjQWRkaW5nIG1hY2hpbmVzIzQ0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE4LjAzLjAwI0FjY291bnRpbmcgbWFjaGluZXMjNDQuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTguMDQuMDAjQ2FzaCByZWdpc3RlcnMjNDQuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTkuMDAuMDAjQ2hlY2sgZW5kb3JzaW5nIGFuZCB3cml0aW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE5LjAxLjAwI0NoZWNrIGVuZG9yc2luZyBtYWNoaW5lcyM0NC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4xOS4wMi4wMCNDaGVjayB3cml0aW5nIG1hY2hpbmVzIzQ0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIwLjAwLjAwI0xhbWluYXRpbmcgc3VwcGxpZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjAuMDEuMDAjTGFtaW5hdGlvbiBmaWxtIzQ0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIwLjAyLjAwI0xhbWluYXRvciBwb3VjaGVzIzQ0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIxLjAwLjAwI01haWwgbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjEuMDEuMDAjRnJhbmtpbmcgb3IgcG9zdGFnZSBtYWNoaW5lcyM0NC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMS4wMi4wMCNNYWlsIG9wZW5pbmcgbWFjaGluZXMjNDQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjEuMDMuMDAjTWFpbCBzZWFsaW5nIG1hY2hpbmVzIzQ0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIxLjA0LjAwI1N0YW1wIGNhbmNlbGluZyBtYWNoaW5lcyM0NC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMS4wNS4wMCNBZGRyZXNzaW5nIG1hY2hpbmVzIzQ0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIxLjA2LjAwI0xldHRlciBmb2xkZXJzIzQ0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIyLjAwLjAwI1NjYW5uZXIgYWNjZXNzb3JpZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjIuMDEuMDAjRW5kb3JzZXJzIzQ0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIzLjAwLjAwI1BhY2tpbmcgbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjMuMDEuMDAjQnVuZGxpbmcgbWFjaGluZXMjNDQuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjMuMDIuMDAjUGFyY2VsIHdyYXBwaW5nIG1hY2hpbmVzIzQ0LjEwLjIzLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIzLjAzLjAwI1NlYWwgcHJlc3NlcyM0NC4xMC4yMy4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMy4wNC4wMCNTZWFsaW5nIG1hY2hpbmVzIzQ0LjEwLjIzLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIzLjA1LjAwI1N0cmFwcGluZyB0ZW5zaW9uZXJzIG9yIHNlYWxlcnMjNDQuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjMuMDYuMDAjVHlpbmcgbWFjaGluZXMjNDQuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDAuMDAjTGFiZWxpbmcgbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDEuMDAjVGFwZSBsYWJlbCBtYWtlcnMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDIuMDAjRGF0aW5nIG9yIG51bWJlcmluZyBtYWNoaW5lcyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wMy4wMCNJZGVudGlmaWNhdGlvbiAoSUQpIHByZXNzIG1hY2hpbmVzIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjA0LjAwI0xhYmVsIGFwcGx5aW5nIG1hY2hpbmVzIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjA1LjAwI0xhYmVsIG1ha2luZyBtYWNoaW5lcyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wNi4wMCNMZXR0ZXJpbmcgZXF1aXBtZW50IzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjA3LjAwI1RhcGUgZW1ib3NzZXIjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDguMDAjQXV0b21hdGljIGxhYmVsaW5nIHN5c3RlbXMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDkuMDAjU2VtaSBhdXRvbWF0aWMgbGFiZWxpbmcgc3lzdGVtcyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4xMS4wMCNMYWJlbCBkaXNwZW5zZXJzIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI1LjAwLjAwI1NvcnRpbmcgbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjUuMDEuMDAjTW9uZXkgY291bnRpbmcgbWFjaGluZXMjNDQuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjUuMDIuMDAjU29ydGVycyM0NC4xMC4yNS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wMC4wMCNUeXBpbmcgbWFjaGluZXMgYW5kIGFjY2Vzc29yaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI2LjAyLjAwI1R5cGV3cml0ZXJzIzQ0LjEwLjI2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI2LjAzLjAwI1ByaW50d2hlZWxzIzQ0LjEwLjI2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI2LjA0LjAwI1N0ZW5vdHlwZSBtYWNoaW5lcyM0NC4xMC4yNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wNS4wMCNEaWN0YXRpb24gbWFjaGluZXMjNDQuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDYuMDAjVHlwZXJ3cml0ZXIgcmliYm9ucyM0NC4xMC4yNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wNy4wMCNXb3JkIHByb2Nlc3NvcnMjNDQuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDguMDAjVHlwZXdyaXRlciBwcmludGluZyBlbGVtZW50cyM0NC4xMC4yNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOC4wMC4wMCNCaW5kaW5nIGFuZCBsYW1pbmF0aW9uIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI4LjAxLjAwI0xhbWluYXRvcnMjNDQuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDAuMDAjT2ZmaWNlIG1hY2hpbmUgYWNjZXNzb3JpZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDEuMDAjVHJhdmVsIGtpdHMgZm9yIG9mZmljZSBtYWNoaW5lcyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wMi4wMCNTdG9yYWdlIGFjY2Vzc29yaWVzIGZvciBvZmZpY2UgbWFjaGluZXMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDMuMDAjVGFwZSBjbGVhbmVycyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wNC4wMCNBaXIgY29tcHJlc3NlZCBzcHJheSM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wNS4wMCNTbWFsbCBwYXBlciBiYWdzIG9mIHdldCBhYnNvcmJpbmcgc2FsdHMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDYuMDAjQ29tcHV0ZXIgb3Igb2ZmaWNlIGVxdWlwbWVudCBjbGVhbmluZyBraXQjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDcuMDAjRXF1aXBtZW50IGR1c3QgY292ZXJzIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjA4LjAwI0NvbXBhY3QgZGlzYyBjbGVhbmVycyBvciBzY3JhdGNoIHJlbW92ZXJzIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjA5LjAwI0NvbXBhY3QgZGlzYyBkcml2ZSBjbGVhbmVyIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjEwLjAwI0xhbWluYXRvciB0cmF5cyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4xMS4wMCNDbGVhbmluZyB3aXBlcyBmb3Igb2ZmaWNlIG1hY2hpbmVzIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjEyLjAwI0NsZWFuaW5nIHNvbHV0aW9ucyBmb3Igb2ZmaWNlIGVxdWlwbWVudCM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4xMy4wMCNDb21wYWN0IGRpc2MgZGVzdHJveWVyIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMwLjAwLjAwI0Z1c2VycyBhbmQgYWNjZXNzb3JpZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzAuMDEuMDAjRnVzZXIgY2xlYW5pbmcgcGFkcyM0NC4xMC4zMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMC4wMi4wMCNGdXNlciBvaWwjNDQuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzAuMDMuMDAjRnVzZXIgd2lwZXIjNDQuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzAuMDQuMDAjRnVzZXJzIzQ0LjEwLjMwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjAwLjAwI1ByaW50ZXIgYW5kIGZhY3NpbWlsZSBhbmQgcGhvdG9jb3BpZXIgc3VwcGxpZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDEuMDAjUHJpbnRlciBvciBmYWNzaW1pbGUgb3IgcGhvdG9jb3BpZXIgYmVsdHMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDIuMDAjUHJpbnRlciBvciBmYWNzaW1pbGUgb3IgcGhvdG9jb3BpZXIgcmliYm9ucyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wMy4wMCNUb25lciM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wNC4wMCNUcmFuc2ZlciByb2xscyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wNS4wMCNJbmsgY2FydHJpZGdlcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wNi4wMCNJbmsgc3RpY2tzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjA3LjAwI1ByaW50ZXIgb3IgZmFjc2ltaWxlIG9yIHBob3RvY29waWVyIGNsZWFuaW5nIHN1cHBsaWVzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjA4LjAwI0RldmVsb3BlciBmb3IgcHJpbnRlcnMgb3IgcGhvdG9jb3BpZXJzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjA5LjAwI1ByaW50ZXIgb3IgZmFjc2ltaWxlIG9yIHBob3RvY29waWVyIGRydW1zIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjEwLjAwI1ByaW50IGhlYWRzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjExLjAwI0luayByb2xscyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xMi4wMCNQcmludGVyIHJpYmJvbiM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xMy4wMCNQaGFzZXJzIG9yIGlua2pldCBraXRzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjE0LjAwI0xhc2VyamV0IGNvYXRpbmcga2l0cyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xNS4wMCNJbWFnaW5nIGZpbG1zIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjE2LjAwI0tpdCBmb3IgcHJpbnRlciM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xNy4wMCNGYWNzaW1pbGUgcmliYm9ucyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMi4wMC4wMCNPZmZpY2UgdGltZSByZWNvcmRpbmcgbWFjaGluZXMgYW5kIGFjY2Vzc29yaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMyLjAxLjAwI1RpbWUgY2FyZCBtYWNoaW5lcyM0NC4xMC4zMi4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMi4wMi4wMCNUaW1lIHN0YW1waW5nIG1hY2hpbmVzIzQ0LjEwLjMyLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMyLjAzLjAwI1RpbWUgY2FyZCBtYWNoaW5lIHJlcGxhY2VtZW50IHJpYmJvbiM0NC4xMC4zMi4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMi4wNC4wMCNUaW1lIGNhcmQgcmFja3MjNDQuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzIuMDUuMDAjVGltZSBjYXJkcyBvciBzaGVldHMjNDQuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzMuMDAuMDAjVGltZSBjYXJkIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjM0LjAwLjAwI1RpbWUgc3RhbXBpbmcgbWFjaGluZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzUuMDAuMDAjQmluZGluZyBtYWNoaW5lIHN1cGxpZXMjNDQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzUuMDEuMDAjV2lyZSBiaW5kaW5nIGVsZW1lbnRzIG9yIGNvbWJzIzQ0LjEwLjM1LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjM1LjAyLjAwI0JpbmRpbmcgY292ZXJzIzQ0LjEwLjM1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjAwLjAwLjAwI09mZmljZSBhbmQgZGVzayBhY2Nlc3NvcmllcyM0NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wMC4wMCNPcmdhbml6ZXJzIGFuZCBhY2Nlc3NvcmllcyM0NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wMS4wMCNNZXNzYWdlIGhvbGRlcnMgb3IgZGlzcGVuc2VycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wMi4wMCNEZXNrIGRyYXdlciBvcmdhbml6ZXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjAzLjAwI0Rlc2t0b3AgdHJheXMgb3Igb3JnYW5pemVycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wNC4wMCNEaXNrZXR0ZSBob2xkZXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjA1LjAwI0NvcHkgaG9sZGVycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wNi4wMCNQYXBlciBvciBwYWQgaG9sZGVyIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjA3LjAwI0Jvb2sgZW5kcyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wOC4wMCNTdGF5IHB1dCBwZW4gb3IgaG9sZGVyIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjA5LjAwI1BlbiBvciBwZW5jaWwgaG9sZGVycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4xMC4wMCNIYW5naW5nIG9yZ2FuaXplcnMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMTEuMDAjRGlzcGxheSByYWNrcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4xMi4wMCNMaXRlcmF0dXJlIHJhY2sjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMTMuMDAjU3VwcG9ydHMgZm9yIGRpYXJpZXMgb3IgY2FsZW5kYXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjE0LjAwI1N0YW1wIHJhY2tzIG9yIG9yZ2FuaXplcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMTUuMDAjRmlsZSBzdG9yYWdlIGJveGVzIG9yIG9yZ2FuaXplcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDAuMDAjQ2FzaCBoYW5kbGluZyBzdXBwbGllcyM0NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wMS4wMCNDdXJyZW5jeSBiYWdzIG9yIHdhbGxldHMjNDQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDIuMDAjQ291bnRlcmZlaXQgYmlsbCBkZXRlY3RvciBwZW5zIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjAzLjAwI0NvaW4gc29ydGVycyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wNC4wMCNDb2luIHdyYXBwZXJzIG9yIGJpbGwgc3RyYXBzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjA1LjAwI0Nhc2ggb3IgdGlja2V0IGJveGVzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjA2LjAwI0Nhc2ggYm94IHRyYXlzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjA3LjAwI0NoZWNrIGZpbGVzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjA4LjAwI0NvaW4gYmFua3MjNDQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDkuMDAjQ291bnRlcmZlaXQgYmlsbCBkZXRlY3RvcnMgb3Igc3VwcGxpZXMjNDQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDAuMDAjRHJhZnRpbmcgc3VwcGxpZXMjNDQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDEuMDAjU3RlbmNpbHMgb3IgbGV0dGVyaW5nIGFpZHMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDIuMDAjRHJhZnRpbmcgZmlsbXMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDMuMDAjQ29tcGFzc2VzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjA0LjAwI0RyYWZ0aW5nIHBhcGVycyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wNS4wMCNDdXJ2ZXMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDYuMDAjUHJvdHJhY3RvcnMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDcuMDAjU2NhbGVzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjA4LjAwI1Qgc3F1YXJlcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wOS4wMCNUZW1wbGF0ZXMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMTAuMDAjVHJpYW5nbGVzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjExLjAwI0NvbG9yIGNoYXJ0cyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4xMi4wMCNEcmFmdGluZyBraXRzIG9yIHNldHMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMTMuMDAjRHJhZnRpbmcgZG90cyBvciB0YXBlcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wMC4wMCNCb2FyZHMjNDQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDEuMDAjUGxhbm5pbmcgYm9hcmRzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjAyLjAwI0VsZWN0cm9uaWMgY29weWJvYXJkcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wMy4wMCNFYXNlbHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDQuMDAjTGV0dGVyIGJvYXJkcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wNS4wMCNEcnkgZXJhc2UgYm9hcmRzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjA2LjAwI0NoYWxrIGJvYXJkcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wNy4wMCNCdWxsZXRpbiBib2FyZHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDguMDAjTWFnbmV0aWMgYm9hcmRzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjA5LjAwI0JvYXJkIGNsZWFuaW5nIGtpdHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMjAuMDAuMDAjUGxhbm5pbmcgc3lzdGVtcyM0NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4yMC4wMS4wMCNBZGRyZXNzIGJvb2tzIG9yIHJlZmlsbHMjNDQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMjAuMDIuMDAjQ2FsZW5kYXJzIzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjA0LjAwI01lZXRpbmcgcGxhbm5lcnMjNDQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMjAuMDUuMDAjQXBwb2ludG1lbnQgYm9va3Mgb3IgcmVmaWxscyM0NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4yMC4wNi4wMCNEaWFyaWVzIG9yIHJlZmlsbHMjNDQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMjAuMDcuMDAjU3VnZ2VzdGlvbiBib3gjNDQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMjAuMDguMDAjV2FsbCBwbGFubmVycyBvciByZWZpbGxzIzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjAwLjAwLjAwI09mZmljZSBzdXBwbGllcyM0NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wMC4wMCNNYWlsaW5nIHN1cHBsaWVzIzQ0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjAxLjAwI01haWxlciB0dWJlcyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wMy4wMCNNYWlsZXJzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjA0LjAwI1dpbmRvdyBlbnZlbG9wZXMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDUuMDAjU3BlY2lhbHR5IGVudmVsb3BlcyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wNi4wMCNTdGFuZGFyZCBlbnZlbG9wZXMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDcuMDAjQ2F0YWxvZyBvciBjbGFzcCBlbnZlbG9wZXMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDguMDAjTWVzc2FnZSBkcm9wcGVycyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wOS4wMCNNYWlsaW5nIGJhZ3MjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMTAuMDAjTWFpbGluZyBzZWFscyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4xMS4wMCNNYWlsaW5nIGJveGVzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjAwLjAwI0Rlc2sgc3VwcGxpZXMjNDQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMDQuMDAjU3RhbXBzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjA1LjAwI1RhcGUgZGlzcGVuc2VycyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4wNi4wMCNGaW5nZXIgc3RhbGxzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjExLjAwI1BhcGVyIG9yIGV5ZWxldCBwdW5jaGVzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjEyLjAwI1BhcGVyIGN1dHRlcnMgb3IgcmVmaWxscyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4xMy4wMCNTdGFwbGUgcmVtb3ZlcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTQuMDAjQ2FsbCBiZWxscyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4xNS4wMCNTdGFwbGVycyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4xNy4wMCNNYW51YWwgbGV0dGVyIG9wZW5lcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTguMDAjU2Npc3NvcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTkuMDAjUGVuY2lsIHNoYXJwZW5lcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjAuMDAjRmluZ2VyIHN0YWxscyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yMS4wMCNEZXNrIHBhZHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjIuMDAjTW9pc3RlbmVycyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yMy4wMCNNZWNoYW5pY2FsIGxldHRlciBvcGVuZXIjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjQuMDAjRW1ib3NzaW5nIHRvb2xzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjI1LjAwI1BhcGVyIHdlaWdodHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjYuMDAjQWRoZXNpdmUgcmVtb3ZlciM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yNy4wMCNCb29rbWFya3MjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjguMDAjQ2xpcCBob2xkZXJzIG9yIGRpc3BlbnNlcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjkuMDAjUGFwZXIgY2xpcCBkaXNwZW5zZXIgb3IgaG9sZGVyIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjMwLjAwI1N0YXBsZXIga2l0IzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjMxLjAwI0dsdWUgZGlzcGVuc2VycyBvciByZWZpbGxzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjAwLjAwI1dyaXRpbmcgaW5zdHJ1bWVudHMjNDQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDEuMDAjUm9sbGVyYmFsbCBwZW5zIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjAyLjAwI1BlbiBvciBwZW5jaWwgc2V0cyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wMy4wMCNGb3VudGFpbiBwZW5zIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjA0LjAwI0JhbGwgcG9pbnQgcGVucyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wNS4wMCNNZWNoYW5pY2FsIHBlbmNpbHMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDYuMDAjV29vZGVuIHBlbmNpbHMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDcuMDAjQ29sb3JlZCBwZW5jaWxzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjA4LjAwI01hcmtlcnMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDkuMDAjQ3JheW9ucyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4xMC4wMCNXcml0aW5nIGNoYWxrIG9yIGFjY2Vzc29yaWVzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjExLjAwI0ZlbHQgcGVuIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjEyLjAwI01hcmtlciByZWZpbGxzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjEzLjAwI1BlbiBuaWJzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjE0LjAwI1BlbmNpbCBvciBwZW4gZ3JpcHMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMTUuMDAjQ29tYmluYXRpb24gcGVuIG9yIHBlbmNpbCM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOC4wMC4wMCNDb3JyZWN0aW9uIG1lZGlhIzQ0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE4LjAxLjAwI0NvcnJlY3Rpb24gZmlsbSBvciB0YXBlIzQ0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE4LjAyLjAwI0NvcnJlY3Rpb24gZmx1aWQjNDQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTguMDQuMDAjRXJhc2VycyM0NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOC4wNS4wMCNDb3JyZWN0aW9uIHBlbnMjNDQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTguMDYuMDAjQ29ycmVjdGlvbiBwZW4gcmVmaWxscyM0NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOC4wNy4wMCNFcmFzZXIgcmVmaWxscyM0NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOS4wMC4wMCNJbmsgYW5kIGxlYWQgcmVmaWxscyM0NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOS4wMS4wMCNJbmRpYSBpbmsjNDQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTkuMDIuMDAjTGVhZCByZWZpbGxzIzQ0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE5LjAzLjAwI1BlbiByZWZpbGxzIzQ0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE5LjA0LjAwI0luayByZWZpbGxzIzQ0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE5LjA1LjAwI0luayBvciBzdGFtcCBwYWRzIzQ0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjAwLjAwI0ZvbGRlcnMgYW5kIGJpbmRlcnMgYW5kIGluZGV4ZXMjNDQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDEuMDAjSW5kZXggY2FyZCBmaWxlcyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wMi4wMCNTaGVldCBwcm90ZWN0b3JzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjAzLjAwI0JpbmRlcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDQuMDAjRGF0YSBiaW5kZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjA1LjAwI01hZ2F6aW5lIG9yIGJvb2sgY292ZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjA2LjAwI0hhbmdpbmcgZmlsZSBmb2xkZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjA3LjAwI1ByZXNlbnRhdGlvbiBiaW5kZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjA4LjAwI1RhYiBpbmRleGVzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjA5LjAwI1JvdGFyeSBvciBidXNpbmVzcyBjYXJkIGZpbGVzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjEwLjAwI0RpdmlkZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjExLjAwI0ZvbGRlcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTIuMDAjQ2xpcGJvYXJkcyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xMy4wMCNSZXBvcnQgY292ZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjE0LjAwI1NoZWV0IGxpZnRlcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTUuMDAjRmlsZSBiYWNrZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjE2LjAwI0RvY3VtZW50IGhvbGRlciM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xNy4wMCNIYW5naW5nIGZvbGRlcnMgb3IgYWNjZXNzb3JpZXMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTguMDAjRmlsZSBpbnNlcnRzIG9yIHRhYnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTkuMDAjRmlsZSBwb2NrZXRzIG9yIGFjY2Vzc29yaWVzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjIwLjAwI0NhcmQgcG9ja2V0cyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4yMS4wMCNQb3N0YWdlIHN0YW1wIGFsYnVtcyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4yMi4wMCNCaW5kaW5nIGJhcnMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDAuMDAjRmFzdGVuaW5nIHN1cHBsaWVzIzQ0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjAxLjAwI1J1YmJlciBiYW5kcyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wMi4wMCNQcm9uZ3MjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDMuMDAjQ2xhc3AgZmFzdGVuZXJzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjA0LjAwI1BhcGVyIGNsaXBzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjA1LjAwI0JpbmRlciBvciBidWxsZG9nIGNsaXBzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjA2LjAwI1BpbnMgb3IgdGFja3MjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDcuMDAjU3RhcGxlcyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wOC4wMCNGaWxpbmcgcG9ja2V0cyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wOS4wMCNWZWxjcm8gZmFzdGVuZXJzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjEwLjAwI0FkaGVzaXZlIG1vdW50cyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xMS4wMCNIb2xlIHJlaW5mb3JjZW1lbnRzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjEyLjAwI1JvdW5kIGhlYWQgZmFzdGVuZXJzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjEzLjAwI1RhZyBmYXN0ZW5lcnMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMTQuMDAjU2NyZXcgcG9zdHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMTUuMDAjQWRoZXNpdmUgY29ybmVycyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xNi4wMCNCYWcgY2xpcHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMTcuMDAjQm9vayByaW5ncyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NS4wMC4wMC4wMC4wMCNQcmludGluZyBhbmQgUGhvdG9ncmFwaGljIGFuZCBBdWRpbyBhbmQgVmlzdWFsIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMjNDUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMDAuMDAuMDAjUHJpbnRpbmcgYW5kIHB1Ymxpc2hpbmcgZXF1aXBtZW50IzQ1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjAwLjAwI1ByaW50aW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzQ1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjAxLjAwI0hlbGlvZ3JhcGhpYyBwcmludGVycyM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wMi4wMCNPZmZzZXQgcHJpbnRpbmcgcHJlc3NlcyM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wMy4wMCNMZXR0ZXJwcmVzcyBlcXVpcG1lbnQjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDQuMDAjTGl0aG9ncmFwaGljIGVxdWlwbWVudCM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wNS4wMCNQaG90b2dyYXZ1cmUgcHJpbnRpbmcgbWFjaGluZXMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDYuMDAjU2lsayBzY3JlZW4gcHJpbnRpbmcgbWFjaGluZXMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDcuMDAjUHJpbnRpbmcgcHJlc3NlcyM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wOC4wMCNQZXJmb3JhdGluZyBtYWNoaW5lcyM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wOS4wMCNVbHRyYXZpb2xldCAoVVYpIHJvdGFyeSBwcmludGVyIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjEwLjAwI0ZsZXhvZ3JhcGhpYyBwcmludGVyIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjExLjAwI0lua2pldCBwcmludGVyIGZvciBjb21tZXJjaWFsIHByaW50aW5nIGFwcGxpY2F0aW9ucyM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xMi4wMCNUaGVybWFsIHRyYW5zZmVyIHByaW50ZXIgZm9yIGNvbW1lcmNpYWwgcHJpbnRpbmcgYXBwbGljYXRpb25zIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjEzLjAwI0hvdCBzdGFtcCBwcmludGVyIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjE0LjAwI1BhZCBwcmludGVyIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjE1LjAwI0NvcmUgcHJpbnRlciM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wMC4wMCNQcmludGluZyBtYWNoaW5lcnkgYWNjZXNzb3JpZXMjNDUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDIuMDAjT2Zmc2V0IGRhcmtyb29tIGVxdWlwbWVudCM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wMy4wMCNPZmZzZXQgcHJpbnRpbmcgY29uc3VtYWJsZXMjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDQuMDAjT2Zmc2V0IHByaW50aW5nIHBsYXRlIHByb2Nlc3NvcnMjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDUuMDAjT2Zmc2V0IHBsYXRlcyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wNi4wMCNPZmZzZXQgZmlsbSBwcm9jZXNzb3JzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjA3LjAwI1NpbGsgc2NyZWVuIGFyYyBsYW1wcyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wOC4wMCNTaWxrIHNjcmVlbiBzY3JlZW5zIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjA5LjAwI1NpbGsgc2NyZWVuIHByaW50aW5nIHJhY2tzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjEwLjAwI1NpbGsgc2NyZWVuIHZhY3V1bSBwcmludGluZyBmcmFtZXMjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMTEuMDAjU2lsayBzY3JlZW4gc3F1ZWVnZWVzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjAwLjAwI1ByaW50aW5nIGFjY2Vzc29yaWVzIzQ1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjAxLjAwI1ByaW50aW5nIGFzc2VtYmxlcnMjNDUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTcuMDIuMDAjUHJpbnRpbmcgZ3VpbGxvdGluZXMjNDUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTcuMDMuMDAjUHJpbnRpbmcgY29sbGF0b3JzIG9yIGRlY29sbGF0b3JzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjA0LjAwI1ByaW50aW5nIGN1dHRlcnMjNDUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTcuMDUuMDAjUHJpbnRpbmcgdHJpbW1lcnMjNDUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTcuMDYuMDAjUHJpbnRpbmcgcHVuY2hlcyM0NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wNy4wMCNQcmludGluZyBwbGF0ZXMjNDUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTcuMDguMDAjUHJpbnRpbmcgYXdscyM0NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOC4wMC4wMCNCb29rIGJpbmRpbmcgYW5kIHNld2luZyBtYWNoaW5lcnkjNDUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDEuMDAjQm9vayBjcmVhc2luZyBtYWNoaW5lcyM0NS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOC4wMi4wMCNCb29rIGN1dHRpbmcgbWFjaGluZXMjNDUuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDMuMDAjQm9vayBwdW5jaGluZyBtYWNoaW5lcyM0NS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOC4wNC4wMCNCb29rIHN0aXRjaGluZyBtYWNoaW5lcyM0NS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOC4wNS4wMCNCb29rIGpvZ2dpbmcgbWFjaGluZXMjNDUuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDYuMDAjQm9vayBnYXRoZXJpbmcgbWFjaGluZXMjNDUuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDcuMDAjQm9vayBmb2xkaW5nIG1hY2hpbmVzIzQ1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE5LjAwLjAwI1ByaW50aW5nIGxhYm9yYXRvcnkgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM0NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOS4wMS4wMCNCYW5kaW5nIG1hY2hpbmVzIzQ1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE5LjAyLjAwI1BsYXRlbWFrZXJzIzQ1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE5LjAzLjAwI1BhcGVyIGRyaWxsaW5nIG1hY2hpbmVzIzQ1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE5LjA0LjAwI0VubGFyZ2VycyM0NS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOS4wNS4wMCNEcmF3aW5nIG9yIHJldG91Y2hpbmcgYm9hcmRzIzQ1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjIwLjAwLjAwI0NvbXBvc2luZyBtYWNoaW5lcyBhbmQgYWNjZXNzb3JpZXMjNDUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMjAuMDEuMDAjSW50ZXJ0eXBlIGNvbXBvc2luZyBtYWNoaW5lcyM0NS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4yMC4wMi4wMCNMaW5vdHlwZSBjb21wb3NpbmcgbWFjaGluZXMjNDUuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMjAuMDMuMDAjUGhvdG9jb21wb3NpdGlvbiBtYXRlcmlhbHMjNDUuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMjAuMDQuMDAjTW9ub3R5cGUgY29tcG9zaW5nIG1hY2hpbmVzIzQ1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjIwLjA1LjAwI1Bob3RvdHlwZXNldHRpbmcgbWFjaGluZXMjNDUuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMDAuMDAuMDAjQXVkaW8gYW5kIHZpc3VhbCBwcmVzZW50YXRpb24gZXF1aXBtZW50IzQ1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjExLjE1LjAwLjAwI0xlY3Rlcm5zIGFuZCBzb3VuZCBzeXN0ZW1zIGFuZCBhY2Nlc3NvcmllcyM0NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNS4wMS4wMCNGcmVlIHN0YW5kaW5nIGxlY3Rlcm5zIzQ1LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE1LjAyLjAwI1RhYmxlIHRvcCBsZWN0ZXJucyM0NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wMC4wMCNQcm9qZWN0b3JzIGFuZCBzdXBwbGllcyM0NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wMS4wMCNQb2ludGVycyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wMi4wMCNQcm9qZWN0aW9uIGJ1bGJzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjAzLjAwI1Byb2plY3Rpb24gc2NyZWVucyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wNC4wMCNTbGlkZSBwcm9qZWN0b3JzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjA1LjAwI1RyYW5zcGFyZW5jeSBlcXVpcG1lbnQgb3Igc3VwcGxpZXMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDYuMDAjTGlxdWlkIGNyeXN0YWwgZGlzcGxheSBwcm9qZWN0aW9uIHBhbmVscyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wNy4wMCNPdmVyaGVhZCBwcm9qZWN0b3JzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjA4LjAwI0ZpbG0gcHJvamVjdG9ycyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wOS4wMCNDb21wdXRlciBzY3JlZW4gcHJvamVjdG9yIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjEwLjAwI0VwaWRpYXNjb3BlcyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xMS4wMCNNaWNyb2ZpY2hlIG9yIG1pY3JvZmlsbSB2aWV3ZXJzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjEyLjAwI0Rpc3NvbHZlIGNvbnRyb2xzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjEzLjAwI0NhdGhvZGUgcmF5IHR1YmUgZGF0YSM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xNC4wMCNMaXF1aWQgY3J5c3RhbCBkaXNwbGF5IGRhdGEgb3IgdmlkZW8gcHJvamVjdG9yIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjE1LjAwI1Byb2plY3Rpb24gbGVuc2VzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjE2LjAwI1ZpZGVvIHByb2plY3RvcnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMTguMDAjUHJlc2VudGF0aW9uIGxpZ2h0IGJveGVzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE3LjAwLjAwI0F1ZGlvIHByZXNlbnRhdGlvbiBlcXVpcG1lbnQgYW5kIGhhcmR3YXJlIGFuZCBjb250cm9sbGVycyM0NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNy4wMS4wMCNBc3Npc3RpdmUgbGlzdGVuaW5nIGRldmljZXMjNDUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTcuMDIuMDAjQXVkaW8gamFjayBib3hlcyM0NS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNy4wMy4wMCNMaXN0ZW5pbmcgY2VudGVycyM0NS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wMC4wMCNWaWRlbyBhbmQgY29tYmluYXRpb24gdmlkZW8gYW5kIGF1ZGlvIHByZXNlbnRhdGlvbiBlcXVpcG1lbnQgYW5kIGhhcmR3YXJlIGFuZCBjb250cm9sbGVycyM0NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wMS4wMCNNZWRpYSBjb250cm9sIHN5c3RlbXMjNDUuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDIuMDAjVGVsZXZpc2lvbiBtb3VudHMjNDUuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDMuMDAjU2NhbiBjb252ZXJ0ZXJzIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjA0LjAwI0xpbmUgZG91YmxlcnMjNDUuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDUuMDAjVmlkZW8gZWRpdG9ycyM0NS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wNi4wMCNEaXN0YW5jZSBsZWFybmluZyBzeXN0ZW1zIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjA3LjAwI0ludGVyZmFjZXMjNDUuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDguMDAjTGlnaHRpbmcgY29udHJvbHMjNDUuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTkuMDAuMDAjUGhvbmUgYW5kIHZpZGVvIGNvbmZlcmVuY2UgZXF1aXBtZW50IGFuZCBoYXJkd2FyZSBhbmQgY29udHJvbGxlcnMjNDUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTkuMDEuMDAjQXVkaW9jb25mZXJlbmNpbmcgc3lzdGVtcyM0NS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOS4wMi4wMCNWaWRlb2NvbmZlcmVuY2luZyBzeXN0ZW1zIzQ1LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjAwLjAwLjAwI1Bob3RvZ3JhcGhpYyBlcXVpcG1lbnQjNDUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDAuMDAjQ2FtZXJhcyM0NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wMS4wMCNTdGlsbCBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjAyLjAwI0luc3RhbnQgcHJpbnQgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wMy4wMCNEaXNwb3NhYmxlIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDQuMDAjRGlnaXRhbCBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjA1LjAwI0NpbmVtYXRvZ3JhcGhpYyBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjA2LjAwI1ZpZGVvIGNvbmZlcmVuY2UgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wOC4wMCNNaWNyb2ZpbG0gY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xMC4wMCNBZXJpYWwgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xMS4wMCNIaWdoIHNwZWVkIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTIuMDAjVW5kZXJ3YXRlciBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjEzLjAwI09mZnNldCBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjE0LjAwI1Bob3RvY29waWVyIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTUuMDAjSGFuZCBoZWxkIGNhbWNvcmRlcnMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTYuMDAjRGlnaXRhbCBjYW1jb3JkZXIjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTcuMDAjRG9jdW1lbnQgY2FtZXJhIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjE4LjAwI0NhbWVyYSBraXRzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjAwLjAwI0NhbWVyYSBhY2Nlc3NvcmllcyM0NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wMS4wMCNDYW1lcmEgZmxhc2hlcyBvciBsaWdodGluZyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wMi4wMCNDYW1lcmEgdHJpcG9kcyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wMy4wMCNDYW1lcmEgbGVuc2VzIG9yIGZpbHRlcnMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDQuMDAjQ2FtZXJhIHNodXR0ZXJzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjA1LjAwI1NjcmVlbiBmcmFtZXMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDYuMDAjQ2FtZXJhIGhhcm5lc3NlcyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wNy4wMCNDYW1lcmEgYmxvY2tzIG9yIGhvbGRlcnMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDguMDAjQ2FtZXJhIGFzc2VtYmxpZXMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDkuMDAjQ2FtZXJhIGJyYWNrZXRzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjEwLjAwI0NhbWVyYSBjYWJsZXMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMTEuMDAjTGVucyBjb3ZlciM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4xMi4wMCNDYW1lcmEgdGFibGVzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjEzLjAwI0NhbWVyYSBlbmNsb3N1cmVzIG9yIGNvdmVycyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4xNC4wMCNSZXRyb2ZpdCBraXRzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjE1LjAwI0NhbWVyYSByaW5ncyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4xNi4wMCNQYW4gaGVhZHMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTcuMDAuMDAjUGhvdG9ncmFwaGljIHByb2Nlc3NpbmcgZXF1aXBtZW50IzQ1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE3LjAxLjAwI0ZpbG0gZHJpZXJzIzQ1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE3LjAyLjAwI0ZpbG0gd2FzaGVycyM0NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNy4wMy4wMCNGaWxtIHNwbGljZXJzIzQ1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE3LjA0LjAwI0ZpbG0gZWRpdG9ycyM0NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNy4wNS4wMCNQaG90b2dyYXBoaWMgZW5sYXJnZXJzIzQ1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEzLjAwLjAwLjAwI1Bob3RvZ3JhcGhpYyBhbmQgcmVjb3JkaW5nIG1lZGlhIzQ1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE1LjAwLjAwI1N0aWxsIHBpY3R1cmUgZmlsbSM0NS4xMy4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wMS4wMCNDb2xvciBmaWxtIzQ1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE1LjAyLjAwI0JsYWNrIGFuZCB3aGl0ZSBmaWxtIzQ1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE1LjAzLjAwI0luc3RhbnQgcGljdHVyZSBmaWxtIzQ1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE1LjA0LjAwI01pY3JvZmlsbSM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wNS4wMCNYIHJheSBmaWxtIzQ1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE1LjA2LjAwI1Bob3RvZ3JhcGh5IHBhcGVyIzQ1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE2LjAwLjAwI01vdmluZyBwaWN0dXJlIG1lZGlhIzQ1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE2LjAxLjAwI01vdGlvbiBwaWN0dXJlIGNhbWVyYSBmaWxtIzQ1LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE2LjA0LjAwI0JsYW5rIHZpZGVvIHRhcGVzIzQ1LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE3LjAwLjAwI01lZGlhIHN0b3JhZ2UjNDUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTcuMDEuMDAjU2xpZGUgdHJheXMjNDUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMDAuMDAuMDAjUGhvdG9ncmFwaGljIGZpbG1tYWtpbmcgc3VwcGxpZXMjNDUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMTUuMDAuMDAjUGhvdG9ncmFwaGljIHByb2Nlc3NpbmcgY2hlbWljYWxzIzQ1LjE0LjAwLjAwLjAwCi11bnNwc2M3IzQ1LjE0LjE1LjAxLjAwI0RldmVsb3BlciBzb2x1dGlvbiM0NS4xNC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xNC4xNS4wMi4wMCNGaXhhdGl2ZSM0NS4xNC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xNC4xNi4wMC4wMCNEYXJrcm9vbSBzdXBwbGllcyM0NS4xNC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xNC4xNi4wMS4wMCNEZXZlbG9waW5nIHRyYXlzIzQ1LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ1LjE0LjE2LjAyLjAwI0RldmVsb3BpbmcgdGFua3MjNDUuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMTYuMDMuMDAjRGV2ZWxvcGluZyB0b25ncyM0NS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0Ni4wMC4wMC4wMC4wMCNEZWZlbnNlIGFuZCBMYXcgRW5mb3JjZW1lbnQgYW5kIFNlY3VyaXR5IGFuZCBTYWZldHkgRXF1aXBtZW50IGFuZCBTdXBwbGllcyM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4wMC4wMC4wMCNMaWdodCB3ZWFwb25zIGFuZCBhbW11bml0aW9uIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE1LjAwLjAwI0ZpcmVhcm1zIzQ2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE1LjAxLjAwI01hY2hpbmUgZ3VucyM0Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wMi4wMCNQb2xpY2Ugb3Igc2VjdXJpdHkgc2hvdGd1bnMjNDYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTUuMDMuMDAjTWlsaXRhcnkgcmlmbGVzIzQ2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE1LjA0LjAwI0hhbmRndW5zIzQ2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE1LjA1LjAwI0FpciByaWZsZXMgb3IgYWlyIGhhbmRndW5zIzQ2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE1LjA2LjAwI1BhcnRzIG9mIGd1bnMgb3IgcGlzdG9scyM0Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNi4wMC4wMCNBbW11bml0aW9uIzQ2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE2LjAxLjAwI0RlZmVuc2Ugb3IgbGF3IGVuZm9yY2VtZW50IGFtbXVuaXRpb24jNDYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTcuMDAuMDAjQW1tdW5pdGlvbiBoYW5kbGluZyBzeXN0ZW1zIzQ2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE3LjAxLjAwI1RhbmsgYW1tdW5pdGlvbiBoYW5kbGluZyBzeXN0ZW1zIzQ2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE3LjAyLjAwI0FpcmNyYWZ0IGFtbXVuaXRpb24gaGFuZGxpbmcgc3lzdGVtcyM0Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xOC4wMC4wMCNBcm1zIGFuZCBhbW11bml0aW9uIGFjY2Vzc29yaWVzIzQ2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE4LjAxLjAwI0d1biBjYXNlcyM0Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Ni4xMS4wMC4wMC4wMCNDb252ZW50aW9uYWwgd2FyIHdlYXBvbnMjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTUuMDAuMDAjQm9tYnMgYW5kIGdyZW5hZGVzIzQ2LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjExLjE1LjAxLjAwI0dyZW5hZGVzIzQ2LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjExLjE1LjAyLjAwI01pbmVzIzQ2LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjExLjE1LjAzLjAwI01vcnRhciBib21icyM0Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNi4wMC4wMCNHdW4gc3lzdGVtcyM0Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNi4wMS4wMCNDaGFpbiBndW4gc3lzdGVtcyM0Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNi4wMi4wMCNHYXRsaW5nIGd1biBzeXN0ZW1zIzQ2LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjExLjE3LjAwLjAwI0luZnJhcmVkIChJUikgc2Vuc29ycyM0Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNy4wMS4wMCNJbmZyYXJlZCAoSVIpIGNvb2xlcnMjNDYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTcuMDIuMDAjSW5mcmFyZWQgKElSKSBkZXRlY3RvcnMjNDYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTguMDAuMDAjTmF2YWwgd2VhcG9ucyM0Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xOC4wMS4wMCNUb3JwZWRvZXMjNDYuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDYuMTIuMDAuMDAuMDAjTWlzc2lsZXMjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDAuMDAjR3VpZGVkIG1pc3NpbGVzIzQ2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjAxLjAwI0FpciB0byBhaXIgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDIuMDAjQW50aWFpcmNyYWZ0IG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjAzLjAwI0FudGltaXNzaWxlIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjA0LjAwI0FudGlzaGlwIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjA1LjAwI0FudGl0YW5rIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjA2LjAwI0JhbGxpc3RpYyBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wNy4wMCNDcnVpc2UgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDguMDAjU3VyZmFjZSB0byBhaXIgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDkuMDAjQW50aWJhbGxpc3RpYyBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4xMC4wMCNTdXJmYWNlIHRvIHN1cmZhY2UgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMTEuMDAjQWlyIHRvIHN1cmZhY2UgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMTIuMDAjVHJhaW5pbmcgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTYuMDAuMDAjTWlzc2lsZSBzdWJzeXN0ZW1zIzQ2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE2LjAxLjAwI0VsZWN0cm9uaWMgc2FmZSBvciBhcm0gZGV2aWNlcyM0Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNi4wMi4wMCNTb2xpZCBtaXNzaWxlIGJvb3N0ZXJzIzQ2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE2LjAzLjAwI01pc3NpbGUgd2FyaGVhZHMjNDYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTYuMDQuMDAjU2FmZXR5IHBpbiBwdWxsZXJzIzQ2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE2LjA1LjAwI0pldCByZWFjdGlvbiBjb250cm9sIGFzc2VtYmxpZXMjNDYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMDAuMDAuMDAjUm9ja2V0cyBhbmQgc3Vic3lzdGVtcyM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNS4wMC4wMCNMYXVuY2ggdmVoaWNsZXMgYW5kIHJvY2tldHMjNDYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTUuMDEuMDAjTXVsdGkgc3RhZ2Ugcm9ja2V0cyM0Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNS4wMi4wMCNSZXVzYWJsZSByb2NrZXRzIzQ2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE1LjAzLjAwI1NpbmdsZSBzdGFnZSByb2NrZXRzIzQ2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE1LjA0LjAwI0xpcXVpZCByb2NrZXRzIzQ2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE1LjA1LjAwI1NvbGlkIHJvY2tldHMjNDYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTYuMDAuMDAjQm9vc3RlcnMjNDYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTYuMDEuMDAjUmV1c2FibGUgYm9vc3RlcnMjNDYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTYuMDIuMDAjU29saWQgYm9vc3RlcnMjNDYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTYuMDMuMDAjTXVsdGkgc3RhZ2UgYm9vc3RlcnMjNDYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTYuMDQuMDAjTGlxdWlkIGJvb3N0ZXJzIzQ2LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE0LjAwLjAwLjAwI0xhdW5jaGVycyM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNC4xNS4wMC4wMCNNaXNzaWxlIGFuZCByb2NrZXQgbGF1bmNoZXJzIzQ2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE0LjE1LjAxLjAwI01pc3NpbGUgbGF1bmNoZXJzIzQ2LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE0LjE1LjAyLjAwI1JvY2tldCBsYXVuY2hlcnMjNDYuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMDAuMDAuMDAjTGF3IGVuZm9yY2VtZW50IzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE1LjAwLjAwI0Nyb3dkIGNvbnRyb2wgZXF1aXBtZW50IzQ2LjE1LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE1LjAxLjAwI0JhcnJpY2FkZXMjNDYuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTUuMDIuMDAjUmlvdCBoZWxtZXRzIzQ2LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE1LjAzLjAwI1Jpb3Qgc2hpZWxkcyM0Ni4xNS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNS4wNC4wMCNCb2R5IGFybW91ciM0Ni4xNS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNS4wNS4wMCNCYXJyaWVycyM0Ni4xNS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNi4wMC4wMCNTZWN1cml0eSBhbmQgY29udHJvbCBlcXVpcG1lbnQjNDYuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTYuMDEuMDAjSGFuZGN1ZmZzIzQ2LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE2LjAyLjAwI05pZ2h0IHN0aWNrcyM0Ni4xNS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNi4wMy4wMCNGaW5nZXJwcmludCBlcXVpcG1lbnQjNDYuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTYuMDQuMDAjQWxjb2hvbCBhbmFseXNlcnMjNDYuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTYuMDUuMDAjV2VhcG9ucyBvciBleHBsb3NpdmVzIGRldGVjdG9ycyM0Ni4xNS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNi4wNi4wMCNOYXJjb3RpYyB0ZXN0IGtpdHMjNDYuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMDAuMDAuMDAjUHVibGljIHNhZmV0eSBhbmQgY29udHJvbCM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wMC4wMCNUcmFmZmljIGNvbnRyb2wjNDYuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDEuMDAjQWlycG9ydCBzaWduYWxpbmcgc3lzdGVtcyM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wMi4wMCNSYWlsd2F5IHNpZ25hbGluZyBzeXN0ZW1zIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjAzLjAwI01hcmluZSBzaWduYWxpbmcgc3lzdGVtcyM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wNC4wMCNUcmFmZmljIHNpZ25hbHMjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDUuMDAjUGFya2luZyBtZXRlcnMjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDYuMDAjU25vdyBvciBpY2UgbWVsdGVyIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjA3LjAwI0JhcnJpZXIgdGFwZSM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wOC4wMCNUcmFmZmljIG9yIGZsb29yIGNvbmVzIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjA5LjAwI1NwZWVkIHN0b3BwZXJzIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE2LjAwLjAwI1dhdGVyIHNhZmV0eSM0Ni4xNi4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNi4wMS4wMCNSb3BlIGZsb2F0IGxpbmVzIzQ2LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE2LjAyLjAwI0xpZmUgcmluZ3MjNDYuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTYuMDMuMDAjUG9vbCBhbGFybXMjNDYuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTYuMDQuMDAjTGlmZSB2ZXN0cyBvciBwcmVzZXJ2ZXJzIzQ2LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjAwLjAwLjAwI1NlY3VyaXR5IHN1cnZlaWxsYW5jZSBhbmQgZGV0ZWN0aW9uIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjAwLjAwI0xvY2tzIGFuZCBzZWN1cml0eSBoYXJkd2FyZSM0Ni4xNy4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wMS4wMCNQYWRsb2NrcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wMi4wMCNDYWJsZSBsb2NrcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wMy4wMCNMb2NrIHNldHMjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDQuMDAjUHVzaGJ1dHRvbiBsb2NrcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wNS4wMCNLZXlzIG9yIGFjY2Vzc29yaWVzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjA2LjAwI1NhZmVzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjA3LjAwI1NlY3VyaXR5IGJhcnMjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDguMDAjTnVtYmVyIGxvY2tzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjA5LjAwI0tleSBjYWJpbmV0cyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4xMC4wMCNUaW1lIGxvY2tzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjExLjAwI0xvY2tvdXQgZGV2aWNlcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4xMi4wMCNJbnN0cnVtZW50IGxvY2tzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjEzLjAwI0xvY2tpbmcgY2FtIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjE0LjAwI1NlY3VyaXR5IGNoYWlucyBvciBhY2Nlc3NvcmllcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wMC4wMCNTdXJ2ZWlsbGFuY2UgYW5kIGRldGVjdGlvbiBlcXVpcG1lbnQjNDYuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDIuMDAjU2FmZXR5IGhvcm5zIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjAzLjAwI0Nsb2NrIHRpbWVycyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wNC4wMCNBbGFybSBzeXN0ZW1zIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjA1LjAwI0Rvb3IgY2hpbWVzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjA2LjAwI1NpcmVucyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wNy4wMCNCdXp6ZXJzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjA4LjAwI01vdGlvbiBkZXRlY3RvcnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDkuMDAjQ29udmV4IHNlY3VyaXR5IG1pcnJvcnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTAuMDAjU2VjdXJpdHkgY2FtZXJhcyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xMS4wMCNWaWRlbyBpZGVudGlmaWNhdGlvbiBzeXN0ZW1zIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjEyLjAwI1ZpZGVvIG1vbml0b3JzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjEzLjAwI0dhcyBkZXRlY3RvcnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTQuMDAjU3VydmVpbGxhbmNlIGNhbWVyYXMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTUuMDAjTGlnaHQgZW5oYW5jaW5nIGNhbWVyYXMgb3IgdmlzaW9uIGRldmljZXMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTYuMDAjUmFkYXIgZGV0ZWN0b3JzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjE3LjAwI0Rvb3IgZXllcyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xOC4wMCNEb29yIGJlbGxzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjAwLjAwLjAwI1BlcnNvbmFsIHNhZmV0eSBhbmQgcHJvdGVjdGlvbiM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wMC4wMCNTYWZldHkgYXBwYXJlbCM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wMS4wMCNQcm90ZWN0aXZlIGFwcm9ucyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wMi4wMCNCdWxsZXQgcHJvb2YgdmVzdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDMuMDAjUHJvdGVjdGl2ZSBjb3ZlcmFsbHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDQuMDAjUHJvdGVjdGl2ZSBnbG92ZXMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDUuMDAjUHJvdGVjdGl2ZSBrbmVlIHBhZHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDYuMDAjUHJvdGVjdGl2ZSBwb25jaG9zIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjA3LjAwI1NhZmV0eSB2ZXN0cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wOC4wMCNGaXJlIHJldGFyZGFudCBhcHBhcmVsIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjA5LjAwI0hhemFyZG91cyBtYXRlcmlhbCBwcm90ZWN0aXZlIGFwcGFyZWwjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTAuMDAjRmlyZSByZXRhcmRhbnQgZ2xvdmVzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjExLjAwI0hhemFyZG91cyBtYXRlcmlhbCBwcm90ZWN0aXZlIGdvb2RzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjEyLjAwI0NsZWFucm9vbSBhcHBhcmVsIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjEzLjAwI0NsZWFucm9vbSBnbG92ZXMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTQuMDAjRWxib3cgcHJvdGVjdG9ycyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xNS4wMCNJbnNlY3RpY2lkZSBwcm90ZWN0aXZlIGNsb3RoaW5nIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjE2LjAwI1NhZmV0eSBzbGVldmVzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjE3LjAwI0luc3VsYXRlZCBvciBmbG90YXRpb24gc3VpdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTguMDAjSGVhdCByZXNpc3RhbnQgY2xvdGhpbmcjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTkuMDAjU2FmZXR5IGhhcm5lc3NlcyBvciBiZWx0cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yMC4wMCNMZWcgcHJvdGVjdG9ycyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yMS4wMCNSYWRpYXRpb24gcHJvdGVjdGlvbiBjbG90aGluZyBvciBjb2F0cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yMi4wMCNTYWZldHkgaG9vZHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjMuMDAjSW5zdWxhdGVkIGNsb3RoaW5nIGZvciBjb2xkIGVudmlyb25tZW50cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yNC4wMCNQZXJzb25hbCBmbG90YXRpb24gZGV2aWNlcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yNS4wMCNQcm90ZWN0aXZlIHJhaW53ZWFyIG9yIHdldCBlbnZpcm9ubWVudCBhcHBhcmVsIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjI2LjAwI1Byb3RlY3RpdmUgc2hpcnRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjI3LjAwI1Byb3RlY3RpdmUgcGFudHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjguMDAjUHJvdGVjdGl2ZSBmcm9jayM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yOS4wMCNJbnN1bGF0ZWQgY2xvdGhpbmcgZm9yIGNvbGQgZW52aXJvbm1lbnRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjMwLjAwI1Byb3RlY3RpdmUgZmluZ2VyIGNvdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMzEuMDAjUmVmbGVjdGl2ZSBzdXNwZW5kZXJzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjMyLjAwI0xhYiBjb2F0cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNi4wMC4wMCNTYWZldHkgZm9vdHdlYXIjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTYuMDEuMDAjRmlyZSByZXRhcmRhbnQgZm9vdHdlYXIjNDYuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTYuMDIuMDAjSGF6YXJkb3VzIG1hdGVyaWFsIHByb3RlY3RpdmUgZm9vdHdlYXIjNDYuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTYuMDMuMDAjQ2xlYW5yb29tIGZvb3R3ZWFyIzQ2LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjA0LjAwI1NhZmV0eSBib290cyM0Ni4xOC4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNi4wNS4wMCNTYWZldHkgc2hvZXMjNDYuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTYuMDYuMDAjRm9vdHdlYXIgY292ZXJzIzQ2LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE3LjAwLjAwI0ZhY2UgYW5kIGhlYWQgcHJvdGVjdGlvbiM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNy4wMS4wMCNIYXJkIGhhdHMjNDYuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTcuMDIuMDAjRmFjaWFsIHNoaWVsZHMjNDYuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTcuMDMuMDAjV2VsZGluZyBtYXNrcyM0Ni4xOC4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNy4wNC4wMCNTYWZldHkgaGVsbWV0cyM0Ni4xOC4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNy4wNS4wMCNNb3RvcmN5Y2xlIGhlbG1ldHMjNDYuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTcuMDYuMDAjSGVsbWV0IHBhcnRzIG9yIGFjY2Vzc29yaWVzIzQ2LjE4LjE3LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjAwLjAwI1Zpc2lvbiBwcm90ZWN0aW9uIGFuZCBhY2Nlc3NvcmllcyM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOC4wMS4wMCNFeWV3ZWFyIGhvbGRlcnMjNDYuMTguMTguMDAuMDAKLXVuc3BzYzcjNDYuMTguMTguMDIuMDAjU2FmZXR5IGdsYXNzZXMjNDYuMTguMTguMDAuMDAKLXVuc3BzYzcjNDYuMTguMTguMDMuMDAjRXllIHNoaWVsZHMjNDYuMTguMTguMDAuMDAKLXVuc3BzYzcjNDYuMTguMTguMDQuMDAjR29nZ2xlcyM0Ni4xOC4xOC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOC4wNS4wMCNWaWRlbyBkaXNwbGF5IGZpbHRlcnMjNDYuMTguMTguMDAuMDAKLXVuc3BzYzcjNDYuMTguMTguMDYuMDAjTGVucyBjbGVhbmVyIzQ2LjE4LjE4LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE5LjAwLjAwI0hlYXJpbmcgcHJvdGVjdG9ycyM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOS4wMS4wMCNFYXIgcGx1Z3MjNDYuMTguMTkuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTkuMDIuMDAjRWFyIG11ZmZzIzQ2LjE4LjE5LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIwLjAwLjAwI1Jlc3BpcmF0b3J5IHByb3RlY3Rpb24jNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjAuMDEuMDAjTWFza3MjNDYuMTguMjAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjAuMDIuMDAjUmVzcGlyYXRvcnMjNDYuMTguMjAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjAuMDMuMDAjR2FzIG1hc2tzIzQ2LjE4LjIwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIwLjA0LjAwI1Jlc3BpcmF0aW9uIGFpciBzdXBwbHlpbmcgc2VsZiBjb250YWluZWQgYnJlYXRoaW5nIGFwcGFyYXR1cyAoU0NCQSkjNDYuMTguMjAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjAuMDUuMDAjTWFzayBmaWx0ZXJzIzQ2LjE4LjIwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjAwLjAwI0FudGkgc3RhdGljIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjEuMDEuMDAjQW50aXN0YXRpYyB3cmlzdCBzdHJhcHMjNDYuMTguMjEuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjEuMDIuMDAjSGVlbCBncm91bmRpbmcgc3RyYXBzIzQ2LjE4LjIxLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjAzLjAwI0dyb3VuZGluZyBoYXJkd2FyZSM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wNC4wMCNBbnRpIHN0YXRpYyBmbG9vciBtYXRzIzQ2LjE4LjIxLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjA1LjAwI0FudGkgc3RhdGljIHdvcmt0YWJsZSBtYXRzIzQ2LjE4LjIxLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjA2LjAwI0FudGlzdGF0aWMgYmVsdHMjNDYuMTguMjEuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjEuMDcuMDAjQW50aXN0YXRpYyBtYWludGVuYW5jZSBraXRzIzQ2LjE4LjIxLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjA4LjAwI0FudGlzdGF0aWMgdG9lIHN0cmFwcyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wMC4wMCNFcmdvbm9taWMgc3VwcG9ydCBhaWRzIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjAxLjAwI0JhY2sgc3VwcG9ydCBiZWx0cyM0Ni4xOC4yMi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wMi4wMCNFbGJvdyBzdXBwb3J0cyM0Ni4xOC4yMi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wMy4wMCNCYWNrIHN1cHBvcnQgcmVzdHMjNDYuMTguMjIuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDQuMDAjV3Jpc3QgYnJhY2VzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjA1LjAwI0Zvb3QgcmVzdHMjNDYuMTguMjIuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDYuMDAjV3Jpc3QgcmVzdHMjNDYuMTguMjIuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDcuMDAjQW5rbGUgc3VwcG9ydHMjNDYuMTguMjIuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDguMDAjU2hvZSBpbnNvbGVzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIzLjAwLjAwI0ZhbGwgcHJvdGVjdGlvbiM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMy4wMS4wMCNMaWZlbGluZXMgb3IgbGlmZWxpbmUgZXF1aXBtZW50IzQ2LjE4LjIzLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIzLjAyLjAwI0ZhbGwgcHJvdGVjdGlvbiBsYW55YXJkIzQ2LjE4LjIzLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIzLjAzLjAwI1NhZmV0eSBoYXJuZXNzIHdpbmRlcnMjNDYuMTguMjMuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjMuMDQuMDAjQW5jaG9yYWdlIGNvbm5lY3RvciM0Ni4xOC4yMy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMy4wNS4wMCNTZWxmIHJldHJhY3RpbmcgbGFueWFyZCM0Ni4xOC4yMy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yNC4wMC4wMCNEZWNvbnRhbWluYXRpb24gYWlkcyM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yNC4wMS4wMCNEZWNvbnRhbWluYXRpb24gc2hvd2VyIzQ2LjE4LjI0LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjI1LjAwLjAwI1BlcnNvbmFsIHNhZmV0eSBkZXZpY2VzIG9yIHdlYXBvbnMjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjUuMDEuMDAjUmVwZWxsZW50cyBmb3IgY2FuaW5lIGF0dGFja3MjNDYuMTguMjUuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMDAuMDAuMDAjRmlyZSBwcm90ZWN0aW9uIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE1LjAwLjAwI0ZpcmUgcHJldmVudGlvbiM0Ni4xOS4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNS4wMS4wMCNTbW9rZSBkZXRlY3RvcnMjNDYuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTUuMDIuMDAjSGVhdCBkZXRlY3RvcnMjNDYuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTUuMDMuMDAjRmlyZSByZXNpc3RhbnQgY29hdGluZ3Mgb3IgcHV0dGllcyBvciBzZWFsYW50cyM0Ni4xOS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNi4wMC4wMCNGaXJlIGZpZ2h0aW5nIGVxdWlwbWVudCM0Ni4xOS4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNi4wMS4wMCNGaXJlIGV4dGluZ3Vpc2hlcnMjNDYuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDIuMDAjRmlyZSBzcHJpbmtsZXIgc3lzdGVtcyM0Ni4xOS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNi4wMy4wMCNGaXJlIGhvc2VzIG9yIG5venpsZXMjNDYuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDQuMDAjRmlyZSBibGFua2V0cyM0Ni4xOS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNi4wNS4wMCNGaXJlIHN1cHByZXNzaW9uIGhhbmQgdG9vbHMjNDYuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDYuMDAjRmlyZSBzdXBwcmVzc2lvbiBmb2FtIG9yIHNpbWlsYXIgY29tcG91bmRzIzQ2LjE5LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjA3LjAwI0ZpcmUgYnJlYXRoaW5nIGFwcGFyYXR1cyM0Ni4xOS4xNi4wMC4wMAotdW5zcHNjNyM0Ny4wMC4wMC4wMC4wMCNDbGVhbmluZyBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIzQ3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEwLjAwLjAwLjAwI1dhdGVyIGFuZCB3YXN0ZXdhdGVyIHRyZWF0bWVudCBzdXBwbHkgYW5kIGRpc3Bvc2FsIzQ3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjAwLjAwI1dhdGVyIHRyZWF0bWVudCBhbmQgc3VwcGx5IGVxdWlwbWVudCM0Ny4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wMS4wMCNBY3RpdmF0ZWQgY2FyYm9uIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wMi4wMCNBbW1vbmlhIHJlbW92YWwgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjAzLjAwI0NhcmJvbiBmaWx0cmF0aW9uIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wNC4wMCNCYWN0ZXJpYWwgcmVtb3ZhbCBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDUuMDAjQ2hsb3JpbmUgaGFuZGxpbmcgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjA2LjAwI0NvcnJvc2lvbiBjb250cm9sIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wNy4wMCNHcml0IGNoYW1iZXJzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjA4LjAwI0Rlc2FsaW5hdGlvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDkuMDAjRmx1b3JpZGF0aW9uIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xMC4wMCNJcm9uIHJlbW92YWwgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjExLjAwI0lvbiBleGNoYW5nZSBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTIuMDAjTWl4ZXJzIG9yIGFnaXRhdG9ycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xMy4wMCNPeHlnZW4gZ2VuZXJhdG9ycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xNC4wMCNXYXRlciBwdXJpZmljYXRpb24gZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjE2LjAwI1R1cmJpZGltZXRlcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTcuMDAjVWx0cmF2aW9sZXQgZGlzaW5mZWN0aW9uIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xOC4wMCNXYXRlciBjb25kaXRpb25lcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTkuMDAjV2F0ZXIgc29mdGVuaW5nIGFjY2Vzc29yaWVzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjIxLjAwI1VsdHJhZmlsdHJhdGlvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjIuMDAjUGFja2FnZWQgd2F0ZXIgdHJlYXRtZW50IHN5c3RlbXMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjMuMDAjQ29sbGVjdGlvbiB0YW5rcyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yNC4wMCNTbHVkZ2Ugb3Igc2V3YWdlIGNvbXBvc3RpbmcgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjI1LjAwI0Rld2F0ZXJpbmcgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjI2LjAwI1NsdWRnZSBwZWxsZXRpemVycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yNy4wMCNTbHVkZ2Ugc2hyZWRkZXJzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjI4LjAwI1dhdGVyIHRyZWF0bWVudCBkcnllcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjkuMDAjSW5jaW5lcmF0b3JzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjMwLjAwI09kb3IgY29udHJvbCBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzEuMDAjU2VwdGljIHRhbmtzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjMyLjAwI1NldHRsaW5nIHRhbmtzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjMzLjAwI0xpZnQgc3RhdGlvbnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzQuMDAjU2V3YWdlIGRpc3RyaWJ1dG9ycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zNS4wMCNTbHVkZ2UgZGlzcG9zYWwgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjM2LjAwI1NsdWRnZSBjb2xsZWN0b3JzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjM3LjAwI1NsdWRnZSBjb25kaXRpb25pbmcgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjM4LjAwI1NsdWRnZSBvciBzZXdhZ2UgZGlnZXN0ZXJzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjM5LjAwI1NsdWRnZSBvciBzZXdhZ2UgcmVtb3ZhbCBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDAuMDAjV2F0ZXIgdHJlYXRtZW50IGNvbnN1bWFibGVzIzQ3LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjAxLjAwI0FsZ2FlY2lkZXMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDIuMDAjQW50aXNjYWxhbnRzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjAzLjAwI0Rlc2NhbGVycyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wNC4wMCNCb2lsZXIgZmVlZCBjaGVtaWNhbHMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDUuMDAjQmFjdGVyaWFsIHJlbW92YWwgY2hlbWljYWxzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjA2LjAwI0NvcnJvc2lvbiBjb250cm9sIGNoZW1pY2FscyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wNy4wMCNPZG9yIGNvbnRyb2wgY2hlbWljYWxzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjA4LjAwI0Zsb2NjdWxlbnRzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjA5LjAwI01pY3JvYmlvY2lkZXMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMTAuMDAjV2F0ZXIgc29mdGVuaW5nIGNvbXBvdW5kcyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4xMS4wMCNEZW11bHNpZmllcnMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMTIuMDAjUG9seWVsZWN0cm9seXRlcyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMS4wMC4wMC4wMCNJbmR1c3RyaWFsIGxhdW5kcnkgYW5kIGRyeSBjbGVhbmluZyBlcXVpcG1lbnQjNDcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTUuMDAuMDAjV2FzaGluZyBhbmQgZHJ5aW5nIGVxdWlwbWVudCM0Ny4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNS4wMS4wMCNMYXVuZHJ5IHR5cGUgY29tYmluZWQgd2FzaGluZyBvciBkcnlpbmcgbWFjaGluZXMjNDcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTUuMDIuMDAjTGF1bmRyeSB0eXBlIHdhc2hpbmcgbWFjaGluZXMjNDcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTUuMDMuMDAjQ2xvdGhlcyBkcnllcnMjNDcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTUuMDQuMDAjTGF1bmRyeSB0eXBlIGRyeWluZyBtYWNoaW5lcyM0Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNS4wNS4wMCNMYXVuZHJ5IGVxdWlwbWVudCBzdGFuZHMjNDcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTYuMDAuMDAjSXJvbmluZyBlcXVpcG1lbnQjNDcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTYuMDEuMDAjSXJvbmluZyBtYWNoaW5lcyBvciBwcmVzc2VzIzQ3LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE2LjAyLjAwI0ZvbGRpbmcgbWFjaGluZXMjNDcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTYuMDMuMDAjU3RlYW0gcHJlc3NpbmcgbWFjaGluZXMjNDcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTcuMDAuMDAjRHJ5IGNsZWFuaW5nIGVxdWlwbWVudCM0Ny4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNy4wMS4wMCNEcnkgY2xlYW5pbmcgbWFjaGluZXMjNDcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMDAuMDAuMDAjSmFuaXRvcmlhbCBlcXVpcG1lbnQjNDcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTUuMDAuMDAjSmFuaXRvciBjYXJ0cyBhbmQgYWNjZXNzb3JpZXMjNDcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTUuMDEuMDAjSmFuaXRvciBjYXJ0cyM0Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNS4wMi4wMCNKYW5pdG9yIGNhcnQgYWNjZXNzb3JpZXMjNDcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDAuMDAjRmxvb3IgbWFjaGluZXMgYW5kIGFjY2Vzc29yaWVzIzQ3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjAyLjAwI1ZhY3V1bSBjbGVhbmVycyM0Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wMy4wMCNGbG9vciBwb2xpc2hlcnMjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDQuMDAjV2V0IG9yIGRyeSBjb21iaW5hdGlvbiB2YWN1dW0gY2xlYW5lcnMjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDUuMDAjRmxvb3Igc2NydWJiZXJzIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjA2LjAwI0NhcnBldCBzd2VlcGVycyM0Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wNy4wMCNWYWN1dW0gY2xlYW5lciBzdXBwbGllcyBvciBhY2Nlc3NvcmllcyM0Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wOC4wMCNGbG9vciBtYWNoaW5lIHBhZHMjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDkuMDAjQ2FycGV0IGNsZWFuaW5nIGVxdWlwbWVudCM0Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4xMC4wMCNGbG9vciB3YXNoaW5nIG1hY2hpbmUjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDAuMDAjV2FzdGUgY29udGFpbmVycyBhbmQgYWNjZXNzb3JpZXMjNDcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDEuMDAjVHJhc2ggYmFncyM0Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNy4wMi4wMCNXYXN0ZSBjb250YWluZXJzIG9yIHJpZ2lkIGxpbmVycyM0Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNy4wMy4wMCNTbW9raW5nIHVybnMgb3IgYWNjZXNzb3JpZXMjNDcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDQuMDAjV2FzdGUgY29udGFpbmVyIGxpZHMjNDcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDUuMDAjVXJuIHNhbmQgYmFncyM0Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNy4wNi4wMCNBc2ggdHJheXMjNDcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDcuMDAjTW90aW9uIHNpY2tuZXNzIGJhZ3MjNDcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDAuMDAjQ2xlYW5pbmcgZXF1aXBtZW50IzQ3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjAxLjAwI0NsZWFuaW5nIGR1c3RlcnMjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDIuMDAjTGludCByZW1vdmVycyM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wMy4wMCNTcXVlZWdlcyBvciB3YXNoZXJzIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA0LjAwI0NsZWFuaW5nIHBhaWxzIG9yIGJ1Y2tldHMjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDUuMDAjUHJlc3N1cmUgb3Igc3RlYW0gY2xlYW5lcnMjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDYuMDAjTW9wIHdyaW5nZXIjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDcuMDAjRHJhaW4gb3IgdG9pbGV0IHBsdW5nZXIjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDguMDAjRHJhaW4gb3IgcGlwZSBjbGVhbmluZyBlcXVpcG1lbnQjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDkuMDAjRGVncmVhc2luZyBwYW5zIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjEwLjAwI0NsZWFuaW5nIHJhZyBkaXNwZW5zZXIjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMTEuMDAjRHVjdCBjbGVhbmluZyBtYWNoaW5lcyM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4wMC4wMC4wMCNDbGVhbmluZyBhbmQgamFuaXRvcmlhbCBzdXBwbGllcyM0Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNS4wMC4wMCNDbGVhbmluZyByYWdzIGFuZCBjbG90aHMgYW5kIHdpcGVzIzQ3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE1LjAxLjAwI1JhZ3MjNDcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTUuMDIuMDAjV2lwZXMjNDcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDAuMDAjQnJvb21zIGFuZCBtb3BzIGFuZCBicnVzaGVzIGFuZCBhY2Nlc3NvcmllcyM0Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wMS4wMCNEdXN0IGJydXNoZXMgb3IgcGFucyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wMi4wMCNTY291cmluZyBwYWRzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjAzLjAwI1Nwb25nZXMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDQuMDAjQnJvb21zIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjA1LjAwI0NsZWFuaW5nIGJydXNoZXMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDYuMDAjRHVzdCBtb3BzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjA3LjAwI1dldCBtb3BzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjA4LjAwI1RvaWxldCBicnVzaGVzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjA5LjAwI0Jyb29tIG9yIG1vcCBoYW5kbGVzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjEwLjAwI0Zsb29yIGZpbmlzaCBhcHBsaWNhdG9yIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjExLjAwI1RyYXNoIHBpY2tlciM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4xMi4wMCNSZXBsYWNlbWVudCBydWJiZXJzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjEzLjAwI01vcCBvciBicm9vbSBob2xkZXIjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMTQuMDAjQ2xlYW5pbmcgZXF1aXBtZW50IGNsYW1wcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wMC4wMCNSZXN0cm9vbSBzdXBwbGllcyM0Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wMS4wMCNQYXBlciB0b3dlbCBkaXNwZW5zZXJzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjAyLjAwI1Nhbml0YXJ5IGdvb2RzIGRpc3BlbnNlcnMjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDMuMDAjU2FuaXRhcnkgd2FzdGUgcmVjZXB0YWNsZXMjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDQuMDAjSW5zdGl0dXRpb25hbCBzb2FwIG9yIGxvdGlvbiBkaXNwZW5zZXJzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjA1LjAwI1VyaW5hbCBvciB0b2lsZXQgYWNjZXNzb3JpZXMjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDYuMDAjQWlyIGZyZXNoZW5lciBkaXNwZW5zZXJzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjA3LjAwI0luc3RpdHV0aW9uYWwgaGFuZCBkcnllcnMjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDguMDAjQmF0aHJvb20gdGlzc3VlIGRpc3BlbnNlciM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wOS4wMCNGYWNpYWwgdGlzc3VlIGRpc3BlbnNlcnMjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMTAuMDAjVG9pbGV0IHRpc3N1ZSBkaXNwZW5zZXJzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjExLjAwI0NsZWFuZXIgZGlzcGVuc2VyIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjAwLjAwI0NsZWFuaW5nIGFuZCBkaXNpbmZlY3Rpbmcgc29sdXRpb25zIzQ3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjAxLjAwI0Zsb29yIGNsZWFuZXJzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjAyLjAwI0Zsb29yIHdheGVzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjAzLjAwI0hvdXNlaG9sZCBkaXNpbmZlY3RhbnRzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjA0LjAwI0FtbW9uaWFzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjA1LjAwI0dlbmVyYWwgcHVycG9zZSBjbGVhbmVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wNi4wMCNGdXJuaXR1cmUgcG9saXNoIG9yIHdheGVzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjA3LjAwI0JsZWFjaGVzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjA4LjAwI0RyeSBnZXJtaWNpZGFsIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjA5LjAwI1Nob2UgY2xlYW5pbmcgb3IgcG9saXNoaW5nIHByb2R1Y3RzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjEwLjAwI0Rpc2h3YXNoaW5nIHByb2R1Y3RzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjExLjAwI0xhdW5kcnkgcHJvZHVjdHMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTIuMDAjQWlyIGZyZXNoZW5lciM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xMy4wMCNTY3JlZW4gY2xlYW5lciM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xNC4wMCNNZXRhbCBjbGVhbmVycyBvciBwb2xpc2hlcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xNS4wMCNEcmFpbiBjbGVhbmVyIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjE2LjAwI0Rlb2Rvcml6ZXJzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjE3LjAwI0hvdXNlaG9sZCBvciBhdXRvbW90aXZlIHByb3RlY3RhbnRzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjE4LjAwI0FpciBzYW5pdGl6ZXIjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTkuMDAjQ2F1c3RpYyBjbGVhbmVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4yMC4wMCNQZXRyb2xldW0gZGVyaXZhdGl2ZSBjbGVhbmVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4yMS4wMCNEZWdyZWFzaW5nIGNvbXBvdW5kcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4yMi4wMCNDYXJib24gcmVtb3ZpbmcgY29tcG91bmRzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjIzLjAwI0RlaWNlcnMgYW5kIGRlZnJvc3RlcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMjQuMDAjR2xhc3Mgb3Igd2luZG93IGNsZWFuZXJzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjI1LjAwI0NvbnRhY3Qgc3VyZmFjZSBjbGVhbmVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wMC4wMCNBYnNvcmJlbnRzIzQ3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjAxLjAwI01hdHMjNDcuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDIuMDAjR3JhbnVsYXIgYWJzb3JiZW50IzQ3LjEzLjE5LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjAzLjAwI1BsdWdnaW5nIGNvbXBvdW5kIzQ3LjEzLjE5LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjA0LjAwI0Fic29yYmVudCBzb2NrcyM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wNS4wMCNTcGlsbCBraXRzIzQ3LjEzLjE5LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjA2LjAwI1BhbnMjNDcuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDcuMDAjQWJzb3JiZW50IGJvb21zIzQ3LjEzLjE5LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjA4LjAwI0Fic29yYmVudCBwaWxsb3dzIzQ3LjEzLjE5LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjIwLjAwLjAwI01hdHMjNDcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMjEuMDAuMDAjQ2xlYW5pbmcga2l0cyM0Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4yMS4wMS4wMCNJbmR1c3RyaWFsIGNsZWFuaW5nIGtpdHMjNDcuMTMuMjEuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMjEuMDIuMDAjR2VuZXJhbCBwdXJwb3NlIGNsZWFuaW5nIGtpdHMjNDcuMTMuMjEuMDAuMDAKLXVuc3BzYzcjNDguMDAuMDAuMDAuMDAjU2VydmljZSBJbmR1c3RyeSBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMjNDguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMDAuMDAuMDAjSW5zdGl0dXRpb25hbCBmb29kIHNlcnZpY2VzIGVxdWlwbWVudCM0OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wMC4wMCNDb29raW5nIGFuZCB3YXJtaW5nIGVxdWlwbWVudCM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wMS4wMCNDb21tZXJjaWFsIHVzZSBiYWluIG1hcmllcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wMi4wMCNDb21tZXJjaWFsIHVzZSBiYXJiZXF1ZSBvdmVucyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wMy4wMCNDb21tZXJjaWFsIHVzZSBicm9pbGVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wNC4wMCNDb21tZXJjaWFsIHVzZSBjaGFyY29hbCBncmlsbHMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDUuMDAjQ29tbWVyY2lhbCB1c2UgY29mZmVlIG9yIGljZWQgdGVhIG1ha2VycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wNi4wMCNDb21tZXJjaWFsIHVzZSBjb2ZmZWUgd2FybWVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wNy4wMCNDb21tZXJjaWFsIHVzZSBjb252ZWN0aW9uIG92ZW5zIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjA4LjAwI0NvbW1lcmNpYWwgdXNlIGNvbnZleWVyIHRvYXN0ZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjA5LjAwI0NvbW1lcmNpYWwgdXNlIGRlZXAgZnJ5ZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjEwLjAwI0NvbW1lcmNpYWwgdXNlIGZvb2Qgd2FybWVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xMS4wMCNDb21tZXJjaWFsIHVzZSBncmlkZGxlcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xMi4wMCNDb21tZXJjaWFsIHVzZSBncmlsbHMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTMuMDAjQ29tbWVyY2lhbCB1c2UgaGVhdCBsYW1wcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xNC4wMCNDb21tZXJjaWFsIHVzZSBoaWdoIHByZXNzdXJlIHN0ZWFtZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjE1LjAwI0NvbW1lcmNpYWwgdXNlIGhvdCBkb2cgZ3JpbGxzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjE2LjAwI0NvbW1lcmNpYWwgdXNlIG1pY3Jvd2F2ZSBvdmVucyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xNy4wMCNDb21tZXJjaWFsIHVzZSBvdmVucyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xOC4wMCNDb21tZXJjaWFsIHVzZSBwYXN0YSBjb29rZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjE5LjAwI0NvbW1lcmNpYWwgdXNlIHBpenphIG92ZW5zIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjIwLjAwI0NvbW1lcmNpYWwgdXNlIHBvcGNvcm4gbWFjaGluZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjEuMDAjQ29tbWVyY2lhbCB1c2UgcmFuZ2VzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjIyLjAwI0NvbW1lcmNpYWwgdXNlIHJvdGlzc2VyaWVzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjIzLjAwI0NvbW1lcmNpYWwgdXNlIHNtb2tlcnMgb3Igc21va2Ugb3ZlbnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjQuMDAjQ29tbWVyY2lhbCB1c2Ugc3RlYW1lcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjUuMDAjQ29tbWVyY2lhbCB1c2UgdG9hc3RlcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjYuMDAjQ29tbWVyY2lhbCB1c2Ugd2FmZmxlIGlyb25zIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjI3LjAwI0JhcmJlY3VlcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yOC4wMCNDb21tZXJjaWFsIHVzZSBjcmVwZSBtYWNoaW5lcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yOS4wMCNQcmVzc3VyZSBjb29rZXJzIG9yIHByZXNzdXJlIGZyeWVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4zMC4wMCNDb21tZXJjaWFsIHVzZSByaWNlIGNvb2tlcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMzEuMDAjQ29tbWVyY2lhbCBzYWxtb24gcG9hY2hlcnMgb3Iga2V0dGxlcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wMC4wMCNGb29kIHByZXBhcmF0aW9uIGVxdWlwbWVudCM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wMS4wMCNDb21tZXJjaWFsIHVzZSBibGVuZGVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wMi4wMCNDb21tZXJjaWFsIHVzZSBlbGVjdHJpYyBjYW4gb3BlbmVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wMy4wMCNDb21tZXJjaWFsIHVzZSBmb29kIGNob3BwZXJzIG9yIGN1YmVycyBvciBkaWNlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDQuMDAjQ29tbWVyY2lhbCB1c2UgY29mZmVlIGdyaW5kZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjA1LjAwI0NvbW1lcmNpYWwgdXNlIGZvb2QgZ3JpbmRlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDYuMDAjQ29tbWVyY2lhbCB1c2UgZ3JhdGVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wNy4wMCNDb21tZXJjaWFsIHVzZSBqdWljZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjA4LjAwI0NvbW1lcmNpYWwgdXNlIG1peGVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wOS4wMCNDb21tZXJjaWFsIHVzZSBwYXN0YSBtYWNoaW5lcyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xMC4wMCNDb21tZXJjaWFsIHVzZSBwZWVsZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjExLjAwI0NvbW1lcmNpYWwgdXNlIHNjYWxlcyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xMi4wMCNDb21tZXJjaWFsIHVzZSBmb29kIHByb2Nlc3NvcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMTMuMDAjQ29tbWVyY2lhbCB1c2UgZG91Z2ggbWFjaGluZXMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMTQuMDAjQ29tbWVyY2lhbCB1c2UgaWNpbmcgc2V0cyBvciBiYWdzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjE1LjAwI0NvbW1lcmNpYWwgdXNlIGRpc2h3YXNoZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjE2LjAwI0NvbW1lcmNpYWwgdXNlIGJyZWFkIHNsaWNlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMTcuMDAjQ29tbWVyY2lhbCB1c2UgcGxhc3RpYyBzaG92ZWxzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjAwLjAwI0Zvb2QgYW5kIGJldmVyYWdlIGRpc3BlbnNpbmcgZXF1aXBtZW50IzQ4LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjAxLjAwI0NhcmJvbmF0ZWQgYmV2ZXJhZ2UgZGlzcGVuc2VyIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjAyLjAwI05vbiBjYXJib25hdGVkIGJldmVyYWdlIGRpc3BlbnNlciM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wMy4wMCNNaWxrIGRpc3BlbnNlcnMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDQuMDAjU3lydXAgcHVtcHMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDUuMDAjQ2FwcHVjY2lubyBvciBlc3ByZXNzbyBtYWNoaW5lcyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wNi4wMCNNaWxrc2hha2UgbWFjaGluZXMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDcuMDAjU29mdCBzZXJ2ZSBtYWNoaW5lcyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wOC4wMCNTbHVzaCBtYWNoaW5lcyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wOS4wMCNJY2UgZGlzcGVuc2VycyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4xMC4wMCNEcmlua2luZyBmb3VudGFpbnMgb3IgYnViYmxlcnMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMTEuMDAjQm90dGxlZCB3YXRlciBkaXNwZW5zZXJzIG9yIGFjY2Vzc29yaWVzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjEyLjAwI0N1cCBkaXNwZW5zZXIjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMTMuMDAjQ29ja3RhaWwgc2hha2VycyBvciBhY2Nlc3NvcmllcyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4xNC4wMCNIb3Qgd2F0ZXIgZGlzcGVuc2VyIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjAwLjAwI0Nvb2t3YXJlIGFuZCBraXRjaGVuIHRvb2xzIzQ4LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjAxLjAwI0NvbW1lcmNpYWwgdXNlIGN1dGxlcnkjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDIuMDAjQ29tbWVyY2lhbCB1c2UgbW9sZHMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDMuMDAjQ29tbWVyY2lhbCB1c2Ugc2Nvb3BzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjA0LjAwI0NvbW1lcmNpYWwgdXNlIG1lYXN1cmluZyBjdXBzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjA1LjAwI0NvbW1lcmNpYWwgdXNlIG1peGluZyBib3dscyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wNi4wMCNDb21tZXJjaWFsIHVzZSBjYWtlIG9yIHBpZSBwYW5zIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjA3LjAwI0NvbW1lcmNpYWwgdXNlIHBpenphIHBhbnMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDguMDAjQ29tbWVyY2lhbCB1c2Ugc2F1Y2Ugb3Igc2F1dGUgcGFucyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wOS4wMCNDb21tZXJjaWFsIHVzZSBzdG9jayBvciBzYXVjZSBwb3RzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjEwLjAwI0NvbW1lcmNpYWwgdXNlIHBvdCBvciBwYW4gY292ZXJzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjExLjAwI0NvbW1lcmNpYWwgdXNlIHJvbGxpbmcgcGlucyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xMi4wMCNDb21tZXJjaWFsIHVzZSBzdHJhaW5lcnMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMTMuMDAjQ29tbWVyY2lhbCB1c2Ugd2hpc2tzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjE0LjAwI0NvbW1lcmNpYWwgdXNlIHdva3MjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMTUuMDAjQ29tbWVyY2lhbCB1c2UgbGFkbGVzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjE2LjAwI0NvbW1lcmNpYWwgdXNlIGN1dGxlcnkgcG91Y2gjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMTcuMDAjQ2FrZSBkZWNvcmF0aW5nIGVxdWlwbWVudCBvciBtb3VsZHMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDAuMDAjVGFibGV0b3AgYW5kIHNlcnZpbmcgZXF1aXBtZW50IzQ4LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjAxLjAwI0Zvb2Qgc2VydmljZSBkaW5uZXJ3YXJlIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjAyLjAwI0Zvb2Qgc2VydmljZSBmbGF0d2FyZSM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wMy4wMCNGb29kIHNlcnZpY2UgZ2xhc3NlcyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wNC4wMCNGb29kIHNlcnZpY2Ugc3RlbXdhcmUjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDUuMDAjRm9vZCBzZXJ2aWNlIGN1cHMgb3IgbXVncyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wNi4wMCNGb29kIHNlcnZpY2Ugc2VydmluZyBiYXNrZXRzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjA3LjAwI0Zvb2Qgc2VydmljZSBwaXRjaGVycyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wOC4wMCNGb29kIHNlcnZpY2UgY2hhZmVycyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wOS4wMCNGb29kIHNlcnZpY2UgY29mZmVlIG9yIHRlYSBwb3RzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjEwLjAwI0Zvb2Qgc2VydmljZSBzb3VwIGNyb2NrcyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xMS4wMCNGb29kIHNlcnZpY2UgaWNlIGJ1Y2tldHMgb3Igd2luZSBjb29sZXJzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjEyLjAwI0Zvb2Qgc2VydmljZSBjb25kaW1lbnQgZGlzcGVuc2VycyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xMy4wMCNGb29kIHNlcnZpY2UgcHVuY2ggYm93bHMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTQuMDAjRm9vZCBzZXJ2aWNlIHdpbmUgY2FyYWZlcyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xNS4wMCNGb29kIHNlcnZpY2UgdHJheXMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTYuMDAjRm9vZCBzZXJ2aWNlIG5hcGtpbiBkaXNwZW5zZXJzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjE3LjAwI0Zvb2Qgc2VydmljZSBmb25kdWUgcG90cyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMC4wMC4wMCNSZXN0YXVyYW50IGZ1cm5pdHVyZSM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMC4wMS4wMCNSZXN0YXVyYW50IGNoYWlycyM0OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMC4wMi4wMCNCb290aHMjNDguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDMuMDAjU2FsYWQgYmFycyM0OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMC4wNC4wMCNUYWJsZXRvcHMjNDguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDUuMDAjUmVzdGF1cmFudCBvciBiYXIgc3Rvb2xzIzQ4LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIwLjA2LjAwI1Blcm1hbmVudCBiYXJzIzQ4LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIwLjA3LjAwI1BvcnRhYmxlIGJhcnMjNDguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjEuMDAuMDAjU3RvcmFnZSBhbmQgaGFuZGxpbmcgZXF1aXBtZW50IzQ4LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjAxLjAwI0Rpc3BsYXkgY2FzZXMjNDguMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjEuMDIuMDAjSGVhdGVkIGRpc3BsYXkgY2FzZXMjNDguMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjEuMDMuMDAjUmVmcmlnZXJhdGVkIGRpc3BsYXkgY2FzZXMjNDguMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjEuMDQuMDAjSWNlIGNyZWFtIGRpc3BsYXkgY2FzZXMjNDguMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjEuMDUuMDAjR2xhc3MgY2hpbGxpbmcgZXF1aXBtZW50IzQ4LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjA2LjAwI0Nvb2wgY29udGFpbmVycyM0OC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0OC4xMS4wMC4wMC4wMCNWZW5kaW5nIG1hY2hpbmVzIzQ4LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEwLjAwLjAwI0xpcXVpZCB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEwLjAxLjAwI01hY2hpbmVzIGRpc3BlbnNpbmcgc2luZ2xlIHNlcnZpbmdzIHdpdGggY3VwcyM0OC4xMS4xMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMC4wMi4wMCNNYWNoaW5lcyBkaXNwZW5zaW5nIGJ1bGsgcXVhbnRpdGllcyM0OC4xMS4xMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMS4wMC4wMCNQaWVjZSBhbmQgcGFydCB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjAxLjAwI0JvdHRsZSBvciBjYW4gdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4xMS4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMS4wMi4wMCNHdW1iYWxsIGNhbmR5IG9yIGNoaWxkcmVucyBub3ZlbHRpZXMgbWFjaGluZXMjNDguMTEuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDMuMDAjU25hY2sgb3Igc21hbGwgcGFja2FnZSBnb29kcyBkaXNwbGF5IG1hY2hpbmVzIzQ4LjExLjExLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjA0LjAwI0EgbGEgY2FydGUgZm9vZHMgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4xMS4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMS4wNS4wMCNGcm96ZW4gY29uZmVjdGlvbnMgbWFjaGluZXMjNDguMTEuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDYuMDAjUGVyc29uYWwgYWNjb21tb2RhdGlvbiBpdGVtIGRpc3BlbnNlcnMjNDguMTEuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDcuMDAjQ2lnYXJldHRlIG1hY2hpbmVzIzQ4LjExLjExLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEyLjAwLjAwI1ByZXBhcmVkIHRvIG9yZGVyIGZvb2QgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMi4wMS4wMCNGcmVuY2ggZnJ5IHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMTIuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTIuMDIuMDAjUG9wY29ybiB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjEyLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEzLjAwLjAwI1NlcnZpY2UgYW5kIHRpY2tldCB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEzLjAxLjAwI1RpY2tldCBkaXNwZW5zaW5nIG1hY2hpbmVzIzQ4LjExLjEzLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEzLjAyLjAwI0luc3VyYW5jZSBwb2xpY3kgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4xMy4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMy4wMy4wMCNTdGFtcCBtYWNoaW5lcyM0OC4xMS4xMy4wMC4wMAotdW5zcHNjNyM0OC4xMS4xNC4wMC4wMCNDdXJyZW5jeSB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjExLjE0LjAxLjAwI0F1dG9tYXRpYyB0ZWxsZXIgbWFjaGluZXMgKEFUTXMpIzQ4LjExLjE0LjAwLjAwCi11bnNwc2M3IzQ4LjExLjE0LjAyLjAwI0JpbGwgdG8gY29pbiBjaGFuZ2VycyM0OC4xMS4xNC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xNC4wMy4wMCNGb3JlaWduIGN1cnJlbmN5IGV4Y2hhbmdlIG1hY2hpbmVzIzQ4LjExLjE0LjAwLjAwCi11bnNwc2M3IzQ4LjExLjE0LjA0LjAwI0VsZWN0cm9uaWMgZnVuZHMgdHJhbnNmZXIgcG9pbnQgb2Ygc2FsZSBlcXVpcG1lbnQjNDguMTEuMTQuMDAuMDAKLXVuc3BzYzcjNDguMTIuMDAuMDAuMDAjR2FtYmxpbmcgb3Igd2FnZXJpbmcgZXF1aXBtZW50IzQ4LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEyLjExLjAwLjAwI0NvaW4gb3BlcmF0ZWQgZ2FtYmxpbmcgbWFjaGluZXMjNDguMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTEuMDEuMDAjUG9rZXIgb3Igc2xvdCBtYWNoaW5lcyM0OC4xMi4xMS4wMC4wMAotdW5zcHNjNyM0OC4xMi4xMi4wMC4wMCNHYW1ibGluZyB0YWJsZXMgYW5kIGdhbWVzIzQ4LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEyLjEyLjAxLjAwI1JvdWxldHRlIHdoZWVscyM0OC4xMi4xMi4wMC4wMAotdW5zcHNjNyM0OC4xMi4xMi4wMi4wMCNDYXJkIHRhYmxlcyM0OC4xMi4xMi4wMC4wMAotdW5zcHNjNyM0OC4xMi4xMy4wMC4wMCNHYW1ibGluZyBtYW5hZ2VtZW50IGFuZCBuZXR3b3JrZWQgd2FnZXJpbmcgc3lzdGVtcyM0OC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMi4xMy4wMS4wMCNUYWJsZSBnYW1ibGluZyBtYW5hZ2VtZW50IHN5c3RlbXMjNDguMTIuMTMuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTMuMDIuMDAjTmV0d29ya2VkIHdhZ2VyaW5nIGdhbWVzIzQ4LjEyLjEzLjAwLjAwCi11bnNwc2M3IzQ5LjAwLjAwLjAwLjAwI1Nwb3J0cyBhbmQgUmVjcmVhdGlvbmFsIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgYW5kIEFjY2Vzc29yaWVzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEwLjAwLjAwLjAwI0NvbGxlY3RpYmxlcyBhbmQgYXdhcmRzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjAwLjAwI0FydCM0OS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wMS4wMCNQYWludGluZ3MjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDIuMDAjU2N1bHB0dXJlcyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wMy4wMCNTdGF0dWFyeSM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wNC4wMCNQb3J0cmFpdHMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDUuMDAjRHJhd2luZ3MjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDYuMDAjUGljdHVyZXMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDcuMDAjTGl0aG9ncmFwaHMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDguMDAjUG9zdGVycyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wOS4wMCNEZWNvcmF0aXZlIHBvdCM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4xMC4wMCNTY3JvbGxzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjExLjAwI1Bob3RvZ3JhcGhzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjEyLjAwI0Zsb3dlciB2YXNlcyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wMC4wMCNDb2xsZWN0aWJsZXMjNDkuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDEuMDAjQW50aXF1ZXMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDIuMDAjU291dmVuaXJzIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjAzLjAwI01pbnQgY29pbiBjb2xsZWN0aW9ucyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wNC4wMCNTdGFtcCBjb2xsZWN0aW9ucyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wNS4wMCNBbnRpcXVlIHJ1Z3MjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDYuMDAjRGlnZ2luZ3MjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDcuMDAjQ29taWMgYm9vayBjb2xsZWN0aW9ucyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wOC4wMCNBbnRpcXVlIG11c2ljYWwgaW5zdHJ1bWVudHMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDkuMDAjT3JuYW1lbnRzIG9yIGRlY29yYXRpb25zIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjEwLjAwI0tleSBjaGFpbnMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMTEuMDAjQ2hhcm1zIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjEyLjAwI0hvbG9ncmFtcyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4xMy4wMCNHbGFzcyBjcnlzdGFscyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wMC4wMCNBd2FyZHMjNDkuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDEuMDAjTWVkYWxzIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjAyLjAwI1Ryb3BoaWVzIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjAzLjAwI01lZGFsbGlvbnMjNDkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDQuMDAjUGxhcXVlcyM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wNS4wMCNDZXJ0aWZpY2F0ZXMjNDkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDYuMDAjUGhvdG8gYXdhcmQjNDkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDcuMDAjQWNoaWV2ZW1lbnQgY2VydGlmaWNhdGUjNDkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDguMDAjQ3Jvd25zIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjAwLjAwLjAwI011c2ljYWwgaW5zdHJ1bWVudHMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTUuMDAuMDAjS2V5Ym9hcmQgaW5zdHJ1bWVudHMjNDkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTUuMDEuMDAjTXVzaWNhbCBvcmdhbnMjNDkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTUuMDIuMDAjQWNjb3JkaW9ucyM0OS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNS4wMy4wMCNQaWFub3MjNDkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTYuMDAuMDAjQnJhc3MgaW5zdHJ1bWVudHMjNDkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTYuMDEuMDAjVHJ1bXBldHMjNDkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTYuMDIuMDAjVHJvbWJvbmVzIzQ5LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE2LjAzLjAwI1NvdXNhcGhvbmVzIzQ5LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE2LjA0LjAwI1NheG9waG9uZXMjNDkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTYuMDUuMDAjV2hpc3RsZSM0OS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wMC4wMCNXb29kd2luZCBpbnN0cnVtZW50cyM0OS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wMS4wMCNDbGFyaW5ldHMjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDIuMDAjT2JvZXMjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDMuMDAjTXVzaWNhbCBmbHV0ZXMjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDQuMDAjUGljY29sb2VzIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjA1LjAwI011c2ljYWwgY29ybmV0cyM0OS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wNi4wMCNCYWdwaXBlcyM0OS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wNy4wMCNIYXJtb25pY2FzIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjA4LjAwI0them9vcyM0OS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOC4wMC4wMCNTdHJpbmcgaW5zdHJ1bWVudHMjNDkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTguMDEuMDAjSGFycHNpY2hvcmRzIzQ5LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE4LjAyLjAwI0NsYXZpY2hvcmRzIzQ5LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE4LjAzLjAwI0d1aXRhcnMjNDkuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTguMDQuMDAjVmlvbGlucyM0OS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOC4wNS4wMCNIYXJwcyM0OS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOC4wNi4wMCNCYW5qb2VzIzQ5LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjAwLjAwI1BlcmN1c3Npb24gaW5zdHJ1bWVudHMjNDkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDEuMDAjQ3ltYmFscyM0OS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOS4wMi4wMCNCZWxscyM0OS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOS4wMy4wMCNUYW1ib3VyaW5lcyM0OS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOS4wNC4wMCNDYXN0YW5ldHMjNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDUuMDAjRHJ1bXMjNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDYuMDAjWHlsb3Bob25lcyM0OS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOS4wNy4wMCNCb2RocmFuIzQ5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjAwLjAwI011c2ljYWwgaW5zdHJ1bWVudCBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjNDkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDEuMDAjTWV0cm9ub21lcyM0OS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wMi4wMCNSZWVkcyM0OS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wMy4wMCNJbnN0cnVtZW50IHN0cmluZ3Mgb3IgcGlja3MjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDQuMDAjVHVuaW5nIHBpbnMjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDUuMDAjTXVzaWNhbCBpbnN0cnVtZW50IHN0YW5kcyBvciBzaGVldCBob2xkZXJzIzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjA2LjAwI0FjY2Vzc29yaWVzIGZvciBzdHJpbmdlZCBpbnN0cnVtZW50cyM0OS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wNy4wMCNQZXJjdXNzaW9uIGluc3RydW1lbnQgYWNjZXNzb3J5IzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjA4LjAwI011c2ljIGJveGVzIG9yIG1lY2hhbmlzbXMjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMDAuMDAuMDAjQ2FtcGluZyBhbmQgb3V0ZG9vciBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjAwLjAwI0NhbXBpbmcgYW5kIG91dGRvb3IgZXF1aXBtZW50IzQ5LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjAxLjAwI1RhcnBhdWxpbnMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDIuMDAjU2xlZXBpbmcgcGFkcyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wMy4wMCNUZW50cyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wNC4wMCNTbGVlcGluZyBiYWdzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjA1LjAwI0ljZSBjaGVzdHMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDYuMDAjVGVudCByZXBhaXIga2l0cyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wNy4wMCNQbmV1bWF0aWMgbWF0dHJlc3NlcyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wOC4wMCNNb3NxdWl0byBuZXRzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjA5LjAwI0NhbXBpbmcgb3Igb3V0ZG9vciBzdG92ZXMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMTAuMDAjRHJpbmsgY29vbGVycyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNi4wMC4wMCNDYW1waW5nIGZ1cm5pdHVyZSM0OS4xMi4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNi4wMS4wMCNDYW1waW5nIGNoYWlycyBvciBzdG9vbHMjNDkuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTYuMDIuMDAjQ2FtcGluZyB0YWJsZXMjNDkuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTYuMDMuMDAjQ2FtcGluZyBjb3RzIzQ5LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjAwLjAwLjAwI0Zpc2hpbmcgYW5kIGh1bnRpbmcgZXF1aXBtZW50IzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE1LjAwLjAwI0Zpc2hpbmcgdGFja2xlIzQ5LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE1LjAxLjAwI0Zpc2hpbmcgcm9kcyM0OS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNS4wMi4wMCNGaXNoaW5nIGxpbmUjNDkuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTUuMDMuMDAjRmlzaGluZyByZWVscyM0OS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNS4wNC4wMCNGaXNoaW5nIGx1cmVzIzQ5LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE1LjA1LjAwI0Zpc2hpbmcgYmFpdCM0OS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNS4wNi4wMCNGaXNoaW5nIHdlaWdodHMgb3Igc2lua2VycyM0OS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNi4wMC4wMCNIdW50aW5nIHByb2R1Y3RzIzQ5LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjAxLjAwI0FuaW1hbCBjYWxscyM0OS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNi4wMi4wMCNTcG9ydGluZyBkZWNveXMjNDkuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTYuMDMuMDAjU3BvcnRpbmcgdHJhcHMjNDkuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTYuMDQuMDAjU3BvcnRpbmcgc2hvdGd1bnMjNDkuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTYuMDUuMDAjU3BvcnRpbmcgcmlmbGVzIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjA2LjAwI1Nwb3J0aW5nIGFtbXVuaXRpb24jNDkuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTYuMDcuMDAjR3VuIGJhcnJlbCM0OS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNC4wMC4wMC4wMCNXYXRlcnNwb3J0cyBlcXVpcG1lbnQjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDAuMDAjU2N1YmEgYW5kIHNub3JrZWxpbmcgZ2VhciM0OS4xNC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNS4wMS4wMCNCb3V5YW5jeSBjb21wZW5zYXRvcnMjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDIuMDAjU2N1YmEgdGFua3MjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDMuMDAjU2N1YmEgcmVndWxhdG9ycyM0OS4xNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNS4wNC4wMCNEaXZpbmcgaW5zdHJ1bWVudHMgb3IgYWNjZXNzb3JpZXMjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDUuMDAjTWFza3Mgb3IgZmlucyBvciBzbm9ya2VscyM0OS4xNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNS4wNi4wMCNXZXRzdWl0cyM0OS4xNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNS4wNy4wMCNEcnlzdWl0cyM0OS4xNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNi4wMC4wMCNTdXJmIGFuZCBzd2ltIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNDkuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTYuMDIuMDAjV2FrZWJvYXJkcyBvciBrbmVlYm9hcmRzIG9yIGJvb2dpZWJvYXJkcyM0OS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNi4wMy4wMCNXYXRlciBza2lzIG9yIGFjY2Vzc29yaWVzIzQ5LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE2LjA0LjAwI1dpbmRzdXJmaW5nIGVxdWlwbWVudCM0OS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNi4wNS4wMCNTdXJmYm9hcmRzIzQ5LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE2LjA2LjAwI1N3aW0gZ29nZ2xlcyBvciBzd2ltIGZpbnMjNDkuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTYuMDcuMDAjUGFyYXNhaWxpbmcgZXF1aXBtZW50IzQ5LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjAwLjAwLjAwI1dpbnRlciBzcG9ydHMgZXF1aXBtZW50IzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE1LjAwLjAwI1NraWluZyBhbmQgc25vd2JvYXJkaW5nIGVxdWlwbWVudCM0OS4xNS4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNS4wMS4wMCNTa2kgYm9vdHMjNDkuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTUuMDIuMDAjU2tpcyM0OS4xNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNS4wMy4wMCNTa2kgcG9sZXMjNDkuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTUuMDQuMDAjQmluZGluZ3MjNDkuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTUuMDUuMDAjU25vd2JvYXJkcyM0OS4xNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNi4wMC4wMCNTa2F0aW5nIGFuZCBpY2UgaG9ja2V5IGVxdWlwbWVudCM0OS4xNS4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNi4wMS4wMCNIb2NrZXkgcHVja3MjNDkuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTYuMDIuMDAjSWNlIHNrYXRlcyM0OS4xNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNi4wMy4wMCNIb2NrZXkgc3RpY2tzIzQ5LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjAwLjAwLjAwI0ZpZWxkIGFuZCBjb3VydCBzcG9ydHMgZXF1aXBtZW50IzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjAwLjAwI0ZpZWxkIHNwb3J0cyBlcXVpcG1lbnQjNDkuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDEuMDAjRm9vdGJhbGwgYmxvY2tpbmcgc2xlZHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDIuMDAjQmFzZWJhbGwgZ2xvdmVzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjAzLjAwI0Jhc2ViYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wNC4wMCNGb290YmFsbHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDUuMDAjU29jY2VyIGJhbGxzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjA2LjAwI0Jhc2ViYWxsIGJhdHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDcuMDAjQmFzZWJhbGwgYmFzZXMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDguMDAjUGl0Y2hpbmcgbWFjaGluZXMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDkuMDAjU29mdGJhbGxzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjEwLjAwI0Zvb3RiYWxsIHRhY2tsaW5nIGR1bW1pZXMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTEuMDAjTGFjcm9zc2Ugc3RpY2tzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjEyLjAwI0xhY3Jvc3NlIGJhbGxzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjEzLjAwI0ZpZWxkIGhvY2tleSBzdGlja3MjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTQuMDAjRmllbGQgaG9ja2V5IGJhbGxzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjE1LjAwI1RlYW0gaGFuZGJhbGwgYmFsbHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTYuMDAjVGVhbSBoYW5kYmFsbCBzY2hvb2wgc2V0cyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xNy4wMCNCYXNlYmFsbCBvciBzb2Z0YmFsbCBwcm90ZWN0aXZlIGdlYXIjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTguMDAjQmFzZWJhbGwgYmF0dGluZyBhaWRzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjE5LjAwI0Jhc2ViYWxsIGJhY2tzdG9wcyBvciBmZW5jZXMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMjAuMDAjU29mdGJhbGwgYmF0cyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4yMS4wMCNTb2Z0YmFsbCBnbG92ZXMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMjIuMDAjRm9vdGJhbGwga2lja2luZyB0ZWVzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjIzLjAwI0ZsYWcgZm9vdGJhbGwgZ2VhciM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4yNC4wMCNTb2NjZXIgZmllbGQgbWFya2luZyBlcXVpcG1lbnQjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMjUuMDAjU29jY2VyIHByb3RlY3RpdmUgZXF1aXBtZW50IzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjI2LjAwI1NvY2NlciB0cmFpbmluZyBhaWRzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjAwLjAwI1JhY3F1ZXQgYW5kIGNvdXJ0IHNwb3J0cyBlcXVpcG1lbnQjNDkuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDEuMDAjUmFjcXVldGJhbGwgcmFja2V0cyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wMi4wMCNCYWRtaW50b24gcmFja2V0cyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wMy4wMCNCYXNrZXRiYWxscyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wNC4wMCNUZW5uaXMgYmFsbHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDUuMDAjUmFjcXVldCBiYWxscyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wNi4wMCNTcXVhc2ggYmFsbHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDcuMDAjVGVubmlzIHJhY3F1ZXRzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjA4LjAwI1ZvbGxleWJhbGxzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjA5LjAwI0JhZG1pbnRvbiBiaXJkaWVzIG9yIHNodXR0bGVjb2NrcyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xMC4wMCNTcXVhc2ggcmFjcXVldHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTEuMDAjVGVubmlzIHRyYWluaW5nIGFpZHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTIuMDAjVGVubmlzIGNvdXJ0IGVxdWlwbWVudCM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xMy4wMCNWb2xsZXliYWxsIHN0b3JhZ2UgZm9yIGJhbGxzIG9yIG5ldHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTQuMDAjVm9sbGV5YmFsbCBneW1uYXNpdW0gc3RhbmRhcmRzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjE1LjAwI0Jhc2tldGJhbGwgY29tcGxldGUgZ2FtZSBzeXN0ZW1zIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjE2LjAwI0Zsb29yIGhvY2tleSBwcm90ZWN0aXZlIGVxdWlwbWVudCM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xNy4wMCNUZXRoZXIgcG9sZXMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTguMDAjVGV0aGVyIGJhbGxzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE3LjAwLjAwI1RyYWNrIHNwb3J0cyBlcXVpcG1lbnQjNDkuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDEuMDAjSmF2ZWxpbnMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDIuMDAjSnVtcGluZyBiYXJzIzQ5LjE2LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE3LjAzLjAwI0Rpc2N1cyM0OS4xNi4xNy4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wNC4wMCNTaG90cHV0cyM0OS4xNi4xNy4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wNS4wMCNWYXVsdGluZyBwb2xlcyM0OS4xNi4xNy4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wNi4wMCNIdXJkbGVzIzQ5LjE2LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE3LjA3LjAwI0JhdG9ucyM0OS4xNi4xNy4wMC4wMAotdW5zcHNjNyM0OS4xNy4wMC4wMC4wMCNHeW1uYXN0aWNzIGFuZCBib3hpbmcgZXF1aXBtZW50IzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE3LjE1LjAwLjAwI0d5bW5hc3RpY3MgZXF1aXBtZW50IzQ5LjE3LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE3LjE1LjAxLjAwI0d5bW5hc3RpYyBiYXJzIG9yIGJlYW1zIzQ5LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE3LjE1LjAyLjAwI0d5bW5hc3RpYyByb3BlcyBvciByaW5ncyBvciBjbGltYmluZyBhY2Nlc3NvcmllcyM0OS4xNy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNS4wMy4wMCNHeW1uYXN0aWMgdmF1bHRpbmcgZXF1aXBtZW50IzQ5LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE3LjE1LjA0LjAwI0d5bW5hc3RpYyB0cmFtcG9saW5lcyM0OS4xNy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNS4wNS4wMCNCYWxhbmNlIGVxdWlwbWVudCM0OS4xNy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNi4wMC4wMCNCb3hpbmcgZXF1aXBtZW50IzQ5LjE3LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE3LjE2LjAxLjAwI0JveGluZyByaW5ncyM0OS4xNy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNi4wMi4wMCNQdW5jaGluZyBiYWdzIzQ5LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE3LjE2LjAzLjAwI0JveGluZyBnbG92ZXMjNDkuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMDAuMDAuMDAjVGFyZ2V0IGFuZCB0YWJsZSBnYW1lcyBhbmQgZXF1aXBtZW50IzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjAwLjAwI1RhYmxlIGdhbWVzIGFuZCBlcXVpcG1lbnQjNDkuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDEuMDAjQmlsbGlhcmQgdGFibGVzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjAyLjAwI1Bvb2wgY3VlcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wMy4wMCNTaHVmZmxlYm9hcmQjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDQuMDAjUGluYmFsbCBnYW1lcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wNS4wMCNCaWxsaWFyZCBiYWxscyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wNi4wMCNBaXIgaG9ja2V5IHRhYmxlcyBvciBhY2Nlc3NvcmllcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wNy4wMCNUZW5uaXMgdGFibGVzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjA4LjAwI1RhYmxlIHRlbm5pcyBwYWRkbGVzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjA5LjAwI1RhYmxlIHRlbm5pcyBiYWxscyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4xMC4wMCNGb29zYmFsbCB0YWJsZXMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMTEuMDAjRm9vc2JhbGxzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjEyLjAwI0Zvb3NiYWxsIHJlcGxhY2VtZW50IHBsYXllcnMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMTMuMDAjQmlsbGlhcmQgY3VlIHRpcHMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMTQuMDAjQmlsbGlhcmQgY2hhbGsjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMTUuMDAjQmlsbGlhcmQgcmFja3MjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDAuMDAjVGFyZ2V0IGdhbWVzIGFuZCBlcXVpcG1lbnQjNDkuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDEuMDAjQXJjaGVyeSB0YXJnZXRzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjAyLjAwI0FyY2hlcnkgYm93cyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wMy4wMCNBcmNoZXJ5IGFycm93cyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wNC4wMCNEYXJ0cyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wNS4wMCNEYXJ0IGJvYXJkcyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wNi4wMCNUcmFwc2hvb3RpbmcgZXF1aXBtZW50IzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjA3LjAwI1Rocm93aW5nIHRhcmdldHMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDguMDAjQXJjaGVyeSBib3cgc3RyaW5ncyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wOS4wMCNBcmNoZXJ5IGdsb3ZlcyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4xMC4wMCNBcmNoZXJ5IGFybSBndWFyZHMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMTEuMDAjQXJjaGVyeSB0YXJnZXQgc3RhbmRzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjEyLjAwI0FyY2hlcnkgYmFja3N0b3BzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjAwLjAwLjAwI0ZpdG5lc3MgZXF1aXBtZW50IzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjAwLjAwI0Flcm9iaWMgdHJhaW5pbmcgZXF1aXBtZW50IzQ5LjIwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjAxLjAwI1RyZWFkbWlsbHMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMDIuMDAjU3RhaXIgY2xpbWJlcnMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMDMuMDAjU3RhdGlvbmFyeSBiaWN5Y2xlcyM0OS4yMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4wNC4wMCNSb3dpbmcgbWFjaGluZXMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMTIuMDAjSnVtcCByb3BlcyM0OS4yMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4xMy4wMCNFeGVyY2lzZSB0cmFtcG9saW5lcyM0OS4yMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4xNC4wMCNFeGVyY2lzZSBiYWxscyM0OS4yMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4xNS4wMCNTdGVwIGFlcm9iaWMgZXF1aXBtZW50IzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjAwLjAwI1dlaWdodCBhbmQgcmVzaXN0YW5jZSB0cmFpbmluZyBlcXVpcG1lbnQjNDkuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDEuMDAjRHVtYmJlbGxzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjAyLjAwI0JhcmJlbGxzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjAzLjAwI0xvd2VyIGJvZHkgcmVzaXN0YW5jZSBtYWNoaW5lcyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wNC4wMCNXZWlnaHQgYmVuY2hlcyBvciByYWNrcyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wNS4wMCNVcHBlciBib2R5IHJlc2lzdGFuY2UgbWFjaGluZXMjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDYuMDAjRml0bmVzcyB3ZWlnaHRzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjA3LjAwI1BpbGF0ZXMgbWFjaGluZXMjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDguMDAjR3JpcCBzdHJlbmd0aGVuZXIjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDkuMDAjUmVzaXN0YW5jZSBiYW5kcyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4xMC4wMCNSZXNpc3RhbmNlIHR1YmVzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjAwLjAwLjAwI090aGVyIHNwb3J0cyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNi4wMC4wMCNHb2xmIGVxdWlwbWVudCM0OS4yMS4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNi4wMS4wMCNHb2xmIGJhZ3MjNDkuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDIuMDAjR29sZiBiYWxscyM0OS4yMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNi4wMy4wMCNHb2xmIGNsdWJzIzQ5LjIxLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjA0LjAwI0dvbGYgdGVlcyM0OS4yMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNi4wNS4wMCNHb2xmIGNsdWIgaGVhZCBjb3ZlcnMjNDkuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDYuMDAjR29sZiBnbG92ZXMjNDkuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDcuMDAjRGl2b3QgZml4ZXJzIzQ5LjIxLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE3LjAwLjAwI0Jvd2xpbmcgZXF1aXBtZW50IGFuZCBzdXBwbGllcyBhbmQgYWNjZXNzb3JpZXMjNDkuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTcuMDEuMDAjQm93bGluZyBlcXVpcG1lbnQjNDkuMjEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTcuMDIuMDAjQm93bGluZyBzdXBwbGllcyM0OS4yMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNy4wMy4wMCNCb3dsaW5nIGFjY2Vzc29yaWVzIzQ5LjIxLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjAwLjAwI1BoeXNpY2FsIGVkdWNhdGlvbiBjbGFzc3Jvb20gZXF1aXBtZW50IzQ5LjIxLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjAxLjAwI1BhcmFjaHV0ZSBlcXVpcG1lbnQjNDkuMjEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTguMDIuMDAjSHVsYSBob29wcyBvciBob29wIGVxdWlwbWVudCM0OS4yMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wMy4wMCNPcmllbnRlZXJpbmcgZXF1aXBtZW50IzQ5LjIxLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjA0LjAwI1RlYW0gaWRlbnRpZmljYXRpb24gbWF0ZXJpYWxzIG9yIG1hcmtlcnMjNDkuMjEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTguMDUuMDAjTGFueWFyZHMjNDkuMjEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTguMDYuMDAjUGh5c2ljYWwgZWR1Y2F0aW9uIGVxdWlwbWVudCBzdG9yYWdlIzQ5LjIxLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjA3LjAwI1BoeXNpY2FsIGVkdWNhdGlvbiBhc3Nlc3NtZW50IHRvb2xzIzQ5LjIxLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjAwLjAwLjAwI1Nwb3J0cyBhY2Nlc3NvcmllcyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wMC4wMCNTcG9ydCBhY2Nlc3NvcmllcyM0OS4yMi4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wMS4wMCNTcG9ydCBzY29yZWJvYXJkcyM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wMi4wMCNTcG9ydCBnb2FscyM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wMy4wMCNTcG9ydCBzYWZldHkgZXF1aXBtZW50IG90aGVyIHRoYW4gaGVhZGdlYXIjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDQuMDAjU3BvcnQgc2FmZXR5IGhlYWRnZWFyIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjA1LjAwI1Nwb3J0IG5ldHMgb3IgbmV0dGluZyM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wNi4wMCNTcG9ydCBtYXRzIG9yIHBhZGRpbmcjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDcuMDAjQmFza2V0YmFsbCBiYWNrYm9hcmRzIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjA4LjAwI0Jhc2tldGJhbGwgaG9vcCM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wOS4wMCNSb2xsZXIgc2thdGVzIG9yIHJvbGxlciBibGFkZXMjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMDAuMDAuMDAjVG95cyBhbmQgZ2FtZXMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDAuMDAjVG95cyM0OS4yMy4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4wMS4wMCNNdXNpY2FsIHRveXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDIuMDAjRWR1Y2F0aW9uYWwgdG95cyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4wMy4wMCNUb3kgYmFsbG9vbnMgb3IgYmFsbHMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDQuMDAjRG9sbHMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDUuMDAjRG9sbCBob3VzZXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDYuMDAjU3R1ZmZlZCBhbmltYWxzIG9yIHB1cHBldHMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDcuMDAjUGxheWhvdXNlcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4wOC4wMCNCdWlsZGluZyBibG9ja3MjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDkuMDAjUmlkaW5nIHRveXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMTAuMDAjUHVsbCB0b3lzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjExLjAwI0NoaWxkcmVucyBzY2llbmNlIGtpdHMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMTIuMDAjVG95IHZlaGljbGVzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjEzLjAwI1RveSB0cmFpbnMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMTQuMDAjSW5mbGF0YWJsZSB0b3lzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjE1LjAwI0RvbGwgcGFydHMgb3IgYWNjZXNzb3JpZXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMTYuMDAjWW8geW9zIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjE3LjAwI0tpdGVzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjE4LjAwI1BvZ3MjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMTkuMDAjS2FsZWlkb3Njb3BlcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4yMC4wMCNQb20gcG9tcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4yMS4wMCNQaW5hdGFzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjIyLjAwI0Jvb21lcmFuZ3MjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMjMuMDAjRmx5aW5nIGRpc2NzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjI0LjAwI1RveSBwYWlscyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNi4wMC4wMCNHYW1lcyM0OS4yMy4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNi4wMS4wMCNFZHVjYXRpb25hbCBnYW1lcyM0OS4yMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNi4wMi4wMCNCb2FyZCBnYW1lcyM0OS4yMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNi4wMy4wMCNQbGF5aW5nIGNhcmRzIzQ5LjIzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE2LjA0LjAwI1ZpZGVvIGdhbWVzIzQ5LjIzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE2LjA1LjAwI1B1enpsZXMjNDkuMjMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDYuMDAjRGljZSM0OS4yMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNC4wMC4wMC4wMCNSZWNyZWF0aW9uIGFuZCBwbGF5Z3JvdW5kIGFuZCBzd2ltbWluZyBhbmQgc3BhIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDAuMDAjUGxheWdyb3VuZCBlcXVpcG1lbnQjNDkuMjQuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDEuMDAjUGxheWdyb3VuZCBzd2luZ3MjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDIuMDAjUGxheWdyb3VuZCBjbGltYmluZyBhcHBhcmF0dXMjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDMuMDAjUGxheWdyb3VuZCBtZXJyeSBnbyByb3VuZHMjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDQuMDAjUGxheWdyb3VuZCBzbGlkZXMjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDUuMDAjUGxheWdyb3VuZCBzZWUgc2F3cyM0OS4yNC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNS4wNi4wMCNQbGF5Z3JvdW5kIHR1bm5lbHMjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDcuMDAjUGxheWdyb3VuZCBzYW5kYm94ZXMjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDguMDAjUGxheWdyb3VuZCBibGVhY2hlcnMjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDkuMDAjV2FsbCBjbGltYmluZyBlcXVpcG1lbnQjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMTAuMDAjUm9wZSBjbGltYmluZyBlcXVpcG1lbnQjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTYuMDAuMDAjUmVjcmVhdGlvbmFsIGVxdWlwbWVudCM0OS4yNC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNi4wMS4wMCNDcm9xdWV0IHNldHMjNDkuMjQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTYuMDIuMDAjTGF3biBib3dsaW5nIGVxdWlwbWVudCM0OS4yNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNi4wMy4wMCNIb3JzZXNob2UgZXF1aXBtZW50IzQ5LjI0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE2LjA0LjAwI0xhd24gZGFydHMjNDkuMjQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDAuMDAjU3dpbW1pbmcgcG9vbCBhbmQgc3BhIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjNDkuMjQuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDEuMDAjRGl2aW5nIGJvYXJkcyM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wMi4wMCNQb29sIHNsaWRlcyM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wMy4wMCNTcGEgYmxvd2VyIzQ5LjI0LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjA0LjAwI1dhdGVyIHRlc3Qga2l0IG9yIHNvbHV0aW9ucyM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wNS4wMCNBdXRvbWF0aWMgcG9vbCBjbGVhbmVyIzQ5LjI0LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjA2LjAwI1NvbGFyIGJsYW5rZXQjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDcuMDAjUG9vbCBvciBzcGEgaGVhdGVyIzQ5LjI0LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjA4LjAwI096b25lIGdlbmVyYXRvciM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wOS4wMCNTb2xhciBibGFua2V0IHJlZWxzIzQ5LjI0LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjAwLjAwLjAwI0FydHMgYW5kIGNyYWZ0cyBzdXBwbGllcyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wMC4wMCNBcnQgc3VwcGxpZXMjNDkuMjUuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDEuMDAjQXJ0IHBhaW50cyM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wMi4wMCNNb2RlbGluZyBjbGF5IzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjAzLjAwI0FydCBwYWludGJydXNoZXMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDQuMDAjUGljdHVyZSBvciBwb3N0ZXIgZnJhbWVzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjA1LjAwI1BpY3R1cmUgYWxidW1zIG9yIG9yZ2FuaXplcnMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDYuMDAjQ3V0dGluZyBtYXRzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjA3LjAwI0NhcnZpbmcgYm9hcmQjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDguMDAjUGFsZXR0ZXMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDkuMDAjR2xpdHRlciM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4xMC4wMCNCZWFkcyM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4xMS4wMCNEZWNvcmF0aXZlIHRhcGVzIG9yIHR3aXN0cyM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNi4wMC4wMCNDcmFmdCBzdXBwbGllcyM0OS4yNS4wMC4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNi4wMS4wMCNNb2RlbCBraXRzIzQ5LjI1LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE2LjAyLjAwI1BvdHRlcnMgd2hlZWxzIzQ5LjI1LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE2LjAzLjAwI0RlY29yYXRpdmUgYnV0dG9ucyM0OS4yNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNi4wNC4wMCNEZWNvcmF0aXZlIHNoYXBlcyBvciBzdHJpbmdzIzQ5LjI1LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE2LjA1LjAwI0NyYWZ0IGtpdHMjNDkuMjUuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMDAuMDAuMDAuMDAjRm9vZCBCZXZlcmFnZSBhbmQgVG9iYWNjbyBQcm9kdWN0cyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMC4wMC4wMC4wMCNGcnVpdHMgYW5kIHZlZ2V0YWJsZXMgYW5kIG51dHMgYW5kIHNlZWRzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjAwLjAwI1ZlZ2V0YWJsZXMjNTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDEuMDAjQmVhbnMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDIuMDAjU3BpbmFjaCM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wMy4wMCNQb3RhdG9lcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wNC4wMCNQZWFzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjA1LjAwI09uaW9ucyBvciBvdGhlciBhbGxpYWNlb3VzIHZlZ2V0YWJsZXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDYuMDAjTGV0dHVjZSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wNy4wMCNDYWJiYWdlIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjA4LjAwI1NxdWFzaGVzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjA5LjAwI1lhbXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTAuMDAjQ2Fycm90cyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xMS4wMCNSdXRhYmFnYXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTIuMDAjRWdncGxhbnRzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjEzLjAwI1BlcHBlcnMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTQuMDAjUmh1YmFyYiM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xNS4wMCNFbmRpdmUjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTYuMDAjQXNwYXJhZ3VzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjE3LjAwI0FydGljaG9rZXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTguMDAjUGFyc25pcHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTkuMDAjQ2VsZXJ5IzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjIwLjAwI1JhZGlzaGVzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjIxLjAwI011c2hyb29tcyBvciBvdGhlciBlZGlibGUgZnVuZ2kjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjIuMDAjSG9yc2VyYWRpc2gjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjMuMDAjVHVybmlwcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yNC4wMCNNdXN0YXJkIGdyZWVucyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yNS4wMCNLYWxlIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjI2LjAwI0NvbGxhcmRzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjI3LjAwI0JydXNzZWwgc3Byb3V0cyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yOC4wMCNCcm9jY29saSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yOS4wMCNDYXVsaWZsb3dlcnMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzAuMDAjT2tyYSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zMS4wMCNDdWN1bWJlcnMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzIuMDAjVG9tYXRvZXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzMuMDAjQmVldHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzQuMDAjTWFuaW9jIHJvb3RzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjM1LjAwI0xlbnRpbHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzYuMDAjQ29ybiM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zNy4wMCNQdW1wa2lucyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zOC4wMCNGcmVzaCB2ZWdldGFibGVzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjM5LjAwI0Zyb3plbiB2ZWdldGFibGVzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjQwLjAwI1NoZWxmIHN0YWJsZSB2ZWdldGFibGVzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjAwLjAwI0ZydWl0cyM1MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wMS4wMCNMaW1lcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wMi4wMCNNYW5nb2VzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjAzLjAwI0d1YXZhcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wNC4wMCNHcmFwZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDUuMDAjRGF0ZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDYuMDAjQXByaWNvdHMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDcuMDAjQmVycmllcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wOC4wMCNQZWFjaGVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjA5LjAwI0NoZXJyaWVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjEwLjAwI0JhbmFuYXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTEuMDAjTWVsb25zIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjEyLjAwI1BvbWVncmFuYXRlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xMy4wMCNQYXBheWFzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjE0LjAwI0tpd2lzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjE1LjAwI0xpY2hlZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTYuMDAjUGVhcnMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTcuMDAjUGx1bXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTguMDAjQXBwbGVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjE5LjAwI1Bhc3Npb24gZnJ1aXQjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjAuMDAjTmVjdGFyaW5lcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yMS4wMCNQaW5lYXBwbGVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjIyLjAwI0ZpZ3MjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjMuMDAjVGFuZ2Vsb3MjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjQuMDAjTWFuZGFyaW5zIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjI1LjAwI09yYW5nZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjYuMDAjVGFuZ2VyaW5lcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yNy4wMCNHcmFwZWZydWl0IzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjI4LjAwI0xlbW9ucyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yOS4wMCNEdXJpYW5zIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjMwLjAwI0NvY29udXRzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjMxLjAwI0F2b2NhZG9zIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjMyLjAwI1F1aW5jZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMzMuMDAjT2xpdmVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjM0LjAwI0ZyZXNoIGZydWl0IzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjM1LjAwI0Zyb3plbiBmcnVpdCM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zNi4wMCNTaGVsZiBzdGFibGUgZnJ1aXQjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDAuMDAjTnV0cyBhbmQgc2VlZHMjNTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDEuMDAjQ2hlc3RudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjAzLjAwI1BlY2FucyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wNC4wMCNCcmF6aWwgbnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wNS4wMCNDYXNoZXdzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjA2LjAwI0FsbW9uZHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDcuMDAjTWFjYWRhbWlhIG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDguMDAjSGF6ZWxudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjA5LjAwI1BpbmUgbnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4xMC4wMCNQaXN0YWNoaW9zIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjExLjAwI1dhbG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTIuMDAjQmV0ZWwgbnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4xMy4wMCNQZWFudXRzIG9yIGdyb3VuZG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTQuMDAjTWl4ZWQgbnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4xNS4wMCNOdXQgbWVhdCM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4xNi4wMCNXaG9sZSBudXRzIG9yIHNlZWRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjE3LjAwI1NoZWxsZWQjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMDAuMDAuMDAjTWVhdCBhbmQgcG91bHRyeSBwcm9kdWN0cyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wMC4wMCNNZWF0IGFuZCBwb3VsdHJ5IzUwLjExLjAwLjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjAxLjAwI0NoaWNrZW4jNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDIuMDAjVHVya2V5IzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjAzLjAwI0R1Y2sjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDQuMDAjT3N0cmljaCM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wNS4wMCNQYXJ0cmlkZ2UjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDYuMDAjRG92ZSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wNy4wMCNQaGVhc2FudCM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wOC4wMCNRdWFpbCM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wOS4wMCNHb29zZSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4xMC4wMCNGcmVzaCBtZWF0IGFuZCBwb3VsdHJ5IzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjExLjAwI0Zyb3plbiBtZWF0IGFuZCBwb3VsdHJ5IzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjEyLjAwI1NoZWxmIHN0YWJsZSBtZWF0IGFuZCBwb3VsdHJ5IzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE2LjAwLjAwI0ZyZXNoIGFuZCBmcm96ZW4gcmVkIG1lYXQgYW5kIGJ5cHJvZHVjdHMjNTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTYuMDEuMDAjQmVlZiM1MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wMi4wMCNWZWFsIzUwLjExLjE2LjAwLjAwCi11bnNwc2M3IzUwLjExLjE2LjAzLjAwI011dHRvbiM1MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wNC4wMCNMYW1iIzUwLjExLjE2LjAwLjAwCi11bnNwc2M3IzUwLjExLjE2LjA1LjAwI0J1ZmZhbG8jNTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTYuMDYuMDAjSG9yc2VtZWF0IzUwLjExLjE2LjAwLjAwCi11bnNwc2M3IzUwLjExLjE2LjA3LjAwI0FzcyBvciBtdWxlIG9yIGhpbm55IG1lYXQjNTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTcuMDAuMDAjRnJlc2ggYW5kIGZyb3plbiBwb3JrIGFuZCBieXByb2R1Y3RzIzUwLjExLjAwLjAwLjAwCi11bnNwc2M3IzUwLjExLjE3LjAxLjAwI1BvcmsjNTAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDAuMDAjRnJlc2ggYW5kIGZyb3plbiBvcmdhbiBtZWF0IGFuZCBieXByb2R1Y3RzIzUwLjExLjAwLjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjAxLjAwI09yZ2FuIG1lYXQjNTAuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDIuMDAjTGl2ZXIjNTAuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDMuMDAjR2l6emFyZCM1MC4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOC4wNC4wMCNUcmlwZSM1MC4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOC4wNS4wMCNTdG9tYWNoIzUwLjExLjE4LjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjA2LjAwI0tpZG5leSM1MC4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOC4wNy4wMCNCcmFpbnMjNTAuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTkuMDAuMDAjRGVsaWNhdGVzc2VuIG1lYXQgcHJvZHVjdHMjNTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTkuMDEuMDAjU2FsYW1pIzUwLjExLjE5LjAwLjAwCi11bnNwc2M3IzUwLjExLjE5LjAyLjAwI0thYmFuYSM1MC4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOS4wMy4wMCNQYXN0cmFtaSM1MC4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOS4wNC4wMCNSb2FzdCBiZWVmIzUwLjExLjE5LjAwLjAwCi11bnNwc2M3IzUwLjExLjE5LjA1LjAwI0Nvcm5lZCBiZWVmIG9yIHNpbHZlcnNpZGUjNTAuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTkuMDYuMDAjRnJhbmtmdXJ0IG9yIGhvdCBkb2cjNTAuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMjAuMDAuMDAjUHJvY2Vzc2VkIGFuZCBwcmVwYXJlZCBtZWF0cyM1MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4yMC4wMS4wMCNGcmVzaCBwcm9jZXNzZWQgb3IgcHJlcGFyZWQgbWVhdHMjNTAuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMjAuMDIuMDAjRnJvemVuIHByb2Nlc3NlZCBvciBwcmVwYXJlZCBtZWF0cyM1MC4xMS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4yMC4wMy4wMCNTaGVsZiBzdGFibGUgcHJvY2Vzc2VkIG9yIHByZXBhcmVkIG1lYXRzIzUwLjExLjIwLjAwLjAwCi11bnNwc2M3IzUwLjEyLjAwLjAwLjAwI1NlYWZvb2QjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDAuMDAjRmlzaCM1MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wMS4wMCNMZW1vbmZpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDIuMDAjRG9nZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wMy4wMCNHcm91cGVyIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjA0LjAwI01haGkgbWFoaSM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wNS4wMCNNb25rZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wNi4wMCNQb21wYW5vIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjA3LjAwI0Jhc3MjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDguMDAjU2hhcmsjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDkuMDAjVGlsYXBpYSM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xMC4wMCNTd29yZGZpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTEuMDAjQW5jaG92aWVzIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjEyLjAwI0NhcnAjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTMuMDAjQ2F0ZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xNC4wMCNFZWwjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTUuMDAjU3R1cmdlb24jNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTYuMDAjVHVuYSM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xNy4wMCNDb2QjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTguMDAjSGFsaWJ1dCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xOS4wMCNIYWRkb2NrIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjIwLjAwI09jZWFuIHBlcmNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjIxLjAwI09yYW5nZSByb3VnaHkjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjIuMDAjUGFycm90IGZpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjMuMDAjUGlrZSM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yNC4wMCNSZWQgc25hcHBlciM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yNS4wMCNSb2NrZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yNi4wMCNTbWVsdCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yNy4wMCNTb2xlIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjI4LjAwI1doaXRpbmcjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjkuMDAjU2FsbW9uIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjMwLjAwI01hY2tlcmVsIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjMxLjAwI1NhcmRpbmVzIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjMyLjAwI1Ryb3V0IzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjMzLjAwI1N1cmltaSM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zNC4wMCNCbGFja2Zpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzUuMDAjSGVycmluZyM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zNi4wMCNGcmVzaCBmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjM3LjAwI0Zyb3plbiBmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjM4LjAwI1NoZWxmIHN0YWJsZSBmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjM5LjAwI0ZyZXNoIGZpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDAuMDAjU2hlbGxmaXNoIzUwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjAxLjAwI0FiYWxvbmUjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDIuMDAjU2NhbGxvcHMjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDMuMDAjQ2xhbXMjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDQuMDAjQ3JhYnMjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDUuMDAjQ29uY2gjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDYuMDAjQ3JheWZpc2gjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDcuMDAjTG9ic3RlciM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wOC4wMCNNdXNzZWxzIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjA5LjAwI095c3RlcnMjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMTAuMDAjU2hyaW1wIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjExLjAwI0ZyZXNoIHNoZWxsZmlzaCM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4xMi4wMCNGcm96ZW4gc2hlbGxmaXNoIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjEzLjAwI1NoZWxmIHN0YWJsZSBzaGVsbGZpc2gjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTcuMDAuMDAjQXF1YXRpYyBpbnZlcnRlYnJhdGVzIzUwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjAxLjAwI1NxdWlkIzUwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjAyLjAwI09jdG9wdXMjNTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTcuMDMuMDAjQW5lbW9uZXMjNTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTcuMDQuMDAjU2VhIGN1Y3VtYmVycyM1MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNy4wNS4wMCNGcmVzaCBhcXVhdGljIGludmVydGVicmF0ZXMjNTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTcuMDYuMDAjRnJvemVuIGFxdWF0aWMgaW52ZXJ0ZWJyYXRlcyM1MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNy4wNy4wMCNTaGVsZiBzdGFibGUgYXF1YXRpYyBpbnZlcnRlYnJhdGVzIzUwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE4LjAwLjAwI0FxdWF0aWMgcGxhbnRzIzUwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEyLjE4LjAxLjAwI1NlYXdlZWRzIzUwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE4LjAyLjAwI0ZyZXNoIGFxdWF0aWMgcGxhbnRzIzUwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE4LjAzLjAwI0Zyb3plbiBhcXVhdGljIHBsYW50cyM1MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xOC4wNC4wMCNTaGVsZiBzdGFibGUgYXF1YXRpYyBwbGFudHMjNTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTMuMDAuMDAuMDAjRGFpcnkgcHJvZHVjdHMgYW5kIGVnZ3MjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDAuMDAjRGFpcnkgcHJvZHVjdHMgYW5kIGRhaXJ5IHN1YnN0aXR1dGVzIzUwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjAxLjAwI0NvZmZlZSBjcmVhbWVyIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjAyLjAwI0J1dHRlciM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wMy4wMCNNaWxrIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjA0LjAwI1NvZnQgY2hlZXNlcyM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wNS4wMCNZb2d1cnRzIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjA2LjAwI0ljZSBjcmVhbXMjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDcuMDAjU291ciBjcmVhbXMjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDguMDAjSGFyZCBjaGVlc2VzIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjA5LjAwI0J1dHRlcm1pbGsjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMTAuMDAjSW5mYW50IGZvcm11bGEjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMTEuMDAjQ3VzdGFyZCM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4xMi4wMCNFdmFwb3JhdGVkIG1pbGsjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMTMuMDAjU3dlZXRlbmVkIGNvbmRlbnNlZCBtaWxrIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjE0LjAwI1Bvd2RlcmVkIG1pbGsjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMTUuMDAjQ3JlYW0jNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMTYuMDAjTG9uZyBsaWZlIG1pbGsjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDAuMDAjRWdncyBhbmQgZWdnIHN1YnN0aXR1dGVzIzUwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjAxLjAwI0VnZ3MjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDIuMDAjRWdnIHN1YnN0aXR1dGVzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjAzLjAwI01lcmluZ3VlIHBvd2RlcnMjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDQuMDAjRWdnIHdoaXRlcyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wNS4wMCNFZ2cgeW9sa3MjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDYuMDAjRnJlc2ggZWdncyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wNy4wMCNFZ2cgc3Vic3RpdHV0ZXMjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDguMDAjRWdnIHdoaXRlcyBvciB5b2xrcyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wOS4wMCNQcmVwYXJlZCBlZ2dzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE3LjAwLjAwI01pbGsgYW5kIGJ1dHRlciBwcm9kdWN0cyM1MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNy4wMS4wMCNGcmVzaCBtaWxrIGFuZCBidXR0ZXIgcHJvZHVjdHMjNTAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTcuMDIuMDAjU2hlbGYgc3RhYmxlIG1pbGsgYW5kIGJ1dHRlciBwcm9kdWN0cyM1MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMy4xOC4wMC4wMCNDaGVlc2UjNTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTguMDEuMDAjTmF0dXJhbCBjaGVlc2UjNTAuMTMuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTguMDIuMDAjUHJvY2Vzc2VkIGNoZWVzZSM1MC4xMy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMy4xOC4wMy4wMCNJbWl0YXRpb24gY2hlZXNlIzUwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzUwLjE0LjAwLjAwLjAwI0dyYWlucyBhbmQgY2VyZWFscyBhbmQgdGhlaXIgZmxvdXJzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjAwLjAwI0dyYWlucyBhbmQgY2VyZWFscyM1MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wMS4wMCNNaWxsZXQjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDIuMDAjSG9wcyM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wMy4wMCNCdWNrd2hlYXQjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDQuMDAjUnllIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjA1LjAwI0Nvcm4gY2VyZWFscyM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wNi4wMCNTb3JnaHVtIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjA3LjAwI09hdHMjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDguMDAjUmljZSM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wOS4wMCNCYXJsZXkjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMTAuMDAjV2hlYXQjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMTEuMDAjUGFzdGEgb3Igbm9vZGxlIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjEyLjAwI0JyYW4jNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMTMuMDAjc2hvcnQgZ3JhaW4gcmljZSM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wMC4wMCNGbG91cnMjNTAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDEuMDAjTWlsbGV0IGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjAyLjAwI09hdCBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wMy4wMCNCYXJsZXkgZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDQuMDAjUmljZSBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wNS4wMCNCdWNrd2hlYXQgZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDYuMDAjUnllIGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjA3LjAwI0Nvcm4gZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDguMDAjV2hlYXQgZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDkuMDAjU2VsZiByaXNpbmcgZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMTAuMDAjTG9uZyBHcmFpbiBSaWNlIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE1LjAwLjAwLjAwI0VkaWJsZSBvaWxzIGFuZCBmYXRzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjAwLjAwI0VkaWJsZSB2ZWdldGFibGUgYW5kIHBsYW50IG9pbHMgYW5kIGZhdHMjNTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDEuMDAjU295YmVhbiBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDIuMDAjQ29ybiBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDMuMDAjQ2Fub2xhIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wNC4wMCNTZXNhbWUgb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjA1LjAwI1BlYW51dCBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDYuMDAjT2xpdmUgb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjA3LjAwI1BhbG0gb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjA4LjAwI1NhZmZsb3dlciBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDkuMDAjQ2FzdG9yIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4xMC4wMCNTdW5mbG93ZXIgb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjExLjAwI0NvdHRvbnNlZWQgb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjEyLjAwI0NvbHphIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4xMy4wMCNFZGlibGUgdmVnZXRhYmxlIG9yIHBsYW50IG9pbHMjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMTQuMDAjRWRpYmxlIHZlZ2V0YWJsZSBvciBwbGFudCBmYXRzIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE2LjAwLjAwI0VkaWJsZSBhbmltYWwgb2lscyBhbmQgZmF0cyM1MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNi4wMS4wMCNMYXJkIzUwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE2LjAyLjAwI1RhbGxvdyM1MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNi4wMy4wMCNDb2QgbGl2ZXIgb2lsIzUwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE2LjA0LjAwI0VkaWJsZSBhbmltYWwgb2lscyM1MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNi4wNS4wMCNFZGlibGUgYW5pbWFsIGZhdHMjNTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTcuMDAuMDAjT2lscyBhbmQgZmF0cyBhbmQgb3RoZXIjNTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTcuMDEuMDAjU2hvcnRlbmluZ3MjNTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTcuMDIuMDAjTWFyZ2FyaW5lIzUwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE3LjAzLjAwI0xpbnNlZWQgb2lsIzUwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE3LjA0LjAwI0NvY29hIGJ1dHRlciM1MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNy4wNS4wMCNIb3AgT2lsIzUwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE3LjA2LjAwI01hY2FkYW1pYSBvaWwjNTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMDAuMDAuMDAjQ2hvY29sYXRlIGFuZCBzdWdhcnMgYW5kIHN3ZWV0ZW5lcnMgYW5kIGNvbmZlY3Rpb25hcnkgcHJvZHVjdHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDAuMDAjQ2hvY29sYXRlIGFuZCBzdWdhcnMgYW5kIHN3ZWV0ZW5pbmcgcHJvZHVjdHMjNTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDEuMDAjQnJvd24gc3VnYXIjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDIuMDAjV2hpdGUgc3VnYXJzIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjAzLjAwI1N1Z2FyIGNhbmUjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDQuMDAjRnJ1Y3Rvc2UjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDUuMDAjUGFsbSBzdWdhciM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wNi4wMCNHbHVjb3NlIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjA3LjAwI0JlZXQgc3VnYXIjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDguMDAjUmF3IHN1Z2FyIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjA5LjAwI05hdHVyYWwgc3VnYXJzIGFuZCBzd2VldGVuaW5nIHByb2R1Y3RzIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjEwLjAwI0FydGlmaWNpYWwgc3dlZXRlbmluZyBhZ2VudHMjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMTEuMDAjQ2hvY29sYXRlIGFuZCBjaG9jb2xhdGUgc3Vic3RpdHV0ZSM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4xMi4wMCNTeXJ1cHMjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTYuMDAuMDAjU3lydXBzIGFuZCBvdGhlciBzd2VldGVuZXJzIzUwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjAxLjAwI01vbGFzc2VzIzUwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjAyLjAwI0hvbmV5IzUwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjAzLjAwI0JsYWNrIHRyZWFjbGUjNTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTYuMDQuMDAjQ29ybiBzeXJ1cCM1MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wNS4wMCNBc3BlcnRhbWUjNTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTYuMDYuMDAjU2FjY2hhcnJpbiM1MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wNy4wMCNNYXBsZSBzeXJ1cCM1MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNy4wMC4wMCNDaG9jb2xhdGUgYW5kIGNhcm9iIGFuZCBjaG9jb2xhdGUgc3Vic3RpdHV0ZXMjNTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTcuMDEuMDAjQ2hvY29sYXRlIzUwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE3LjAyLjAwI0Nhcm9iIzUwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE3LjAzLjAwI0NvY29hIzUwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjAwLjAwI0NvbmZlY3Rpb25hcnkgcHJvZHVjdHMjNTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMDQuMDAjQ2hld2luZyBndW1zIzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjA1LjAwI0NhbmR5IzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjA2LjAwI0xpY29yaWNlIzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjA3LjAwI2plbGxpZWQgY29uZmVjdGlvbmFyeSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wOC4wMCNGdWRnZSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wOS4wMCNNZWRpY2F0ZWQgY29uZmVjdGlvbmVyeSBvciBsb3plbmdlcyM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4xMC4wMCNTdWdhciBmcmVlIGNvbmZlY3Rpb25hcnkjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMTEuMDAjTWFyc2htYWxsb3cjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMTIuMDAjTm91Z2F0IzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjEzLjAwI0Nob2NvbGF0ZSBvciBjaG9jb2xhdGUgc3Vic3RpdHV0ZSBjYW5keSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4xNC4wMCNTdWdhciBvciBzdWdhciBzdWJzdGl0dXRlIGNhbmR5IzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjE1LjAwI0NoZXdpbmcgZ3VtIzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjAwLjAwLjAwI1NlYXNvbmluZ3MgYW5kIHByZXNlcnZhdGl2ZXMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMDAuMDAjSGVyYnMgYW5kIHNwaWNlcyBhbmQgZXh0cmFjdHMjNTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMDEuMDAjU2FsdCM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wMy4wMCNOdXRtZWcjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMDQuMDAjQmF5IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjA1LjAwI0FuaXNlIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjA2LjAwI1NhZmZyb24jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMDcuMDAjQmFzaWwjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMDguMDAjR2luZ2VyIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjA5LjAwI0xhdmVuZGVyIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjEwLjAwI01hY2UjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTEuMDAjUGFwcmlrYSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xMi4wMCNDaGljb3J5IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjEzLjAwI0dhcmxpYyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xNC4wMCNDdW1pbiM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xNS4wMCNDbG92ZXMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTYuMDAjQ2lubmFtb24jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTcuMDAjQ2lsYW50cm8jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTguMDAjQWxsc3BpY2UjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTkuMDAjTWFyam9yYW0jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjAuMDAjWWFycm93IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjIxLjAwI1RoeW1lIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjIyLjAwI1RhcnJhZ29uIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjIzLjAwI1Nlc2FtZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yNC4wMCNTYWdlIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjI1LjAwI1Jvc2VtYXJ5IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjI2LjAwI1BhcnNsZXkjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjcuMDAjQ2hhbW9taWxlIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjI4LjAwI01pbnRzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjI5LjAwI0NhcmF3YXkjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzAuMDAjTGVtb25ncmFzcyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zMS4wMCNMZW1vbiBiYWxtIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjMyLjAwI0RpbGwjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzMuMDAjRmVubmVsIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjM0LjAwI0N1cnJ5IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjM1LjAwI0NvbWZyZXkjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzYuMDAjQ2hpdmVzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjM3LjAwI0NoZXJ2aWwjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzguMDAjT3JlZ2FubyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zOS4wMCNQZXBwZXJjb3JucyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40MC4wMCNDYXJkYW1vbSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40MS4wMCNDb3JpYW5kZXIjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDIuMDAjRmxhdm9yaW5nIGV4dHJhY3RzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQzLjAwI0NoaWxpIHBvd2RlciM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40NC4wMCNQb3BweSBzZWVkcyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40NS4wMCNNaXhlZCBoZXJicyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40Ni4wMCNWYW5pbGxhIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQ3LjAwI1NlYXNvbmluZyBtaXgjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDguMDAjRnJlc2ggaGVyYnMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDkuMDAjRHJpZWQgaGVyYnMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNTAuMDAjU3BpY2VzIG9yIGV4dHJhY3RzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE2LjAwLjAwI1ByZXNlcnZhdGl2ZXMgYW5kIGFkZGl0aXZlcyM1MC4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNi4wMS4wMCNQZWN0aW4jNTAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTYuMDIuMDAjRm9vZCBjb2xvcmluZ3MjNTAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTYuMDMuMDAjTW9ub3NvZGl1bSBnbHV0YW1hdGUgKE1TRykjNTAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDAuMDAjVmluZWdhcnMgYW5kIGNvb2tpbmcgd2luZXMjNTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDEuMDAjQ2lkZXIgdmluZWFnYXIjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDIuMDAjQmFsc2FtaWMgdmluZWdhciM1MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNy4wMy4wMCNEaXN0aWxsZWQgdmluZWdhciM1MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNy4wNC4wMCNSaWNlIHZpbmVnYXIjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDUuMDAjV2luZSB2aW5lZ2FyIzUwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjA2LjAwI0luZnVzZWQgdmluZWdhciM1MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNy4wNy4wMCNWaW5lZ2FycyM1MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNy4wOC4wMCNDb29raW5nIHdpbmVzIzUwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjAwLjAwI1NhdWNlcyBhbmQgc3ByZWFkcyBhbmQgY29uZGltZW50cyM1MC4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wMS4wMCNNdXN0YXJkcyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wMi4wMCNDYXRzdXAgb3Iga2V0Y2h1cCBvciB0b21hdG8gc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDMuMDAjQmFyYmVjdWUgc2F1Y2VzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjA0LjAwI01hcmluYWRlcyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wNS4wMCNIb3Qgc2F1Y2VzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjA2LjAwI01heW9ubmFpc2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDcuMDAjU295IHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjA4LjAwI1NhbGFkIGRyZXNzaW5ncyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wOS4wMCNXb3JjaGVzdGVyc2hpcmUgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTAuMDAjU2Fsc2EjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTEuMDAjUmVsaXNoZXMgb3IgY2h1dG5leXMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTIuMDAjQ29uc2VydmUgb3IgamFtIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjEzLjAwI0RpcCBvciBjaGlsbGVkIGRpcHBpbmcgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTQuMDAjU3dlZXQgYW5kIHNvdXIgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTUuMDAjVGFydGFyZSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xNi4wMCNNaW50IHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjE3LjAwI0dyYXZ5IHNhdWNlIG9yIHBvd2RlciM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xOC4wMCNOb29kbGUgb3IgcGFzdGEgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTkuMDAjRm9vZCBzcHJlYWRzIG9yIHBhc3RlcyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yMC4wMCNUb21hdG8gcGFzdGUjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjEuMDAjQmxhY2sgYmVhbiBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yMi4wMCNTYXRheSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yMy4wMCNUZXJpeWFraSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yNC4wMCNTZWFmb29kIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjI1LjAwI1Blc3RvIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjI2LjAwI1N0ZWFrIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjI3LjAwI095c3RlciBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yOC4wMCNQbHVtIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjI5LjAwI1doaXRlIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjMwLjAwI0RpcHBpbmcgc2F1Y2VzIG9yIGNvbmRpbWVudHMgb3Igc3ByZWFkcyBvciBtYXJpbmFkZXMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMzEuMDAjQ29va2luZyBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4zMi4wMCNTYWxhZCBkcmVzc2luZyBvciBkaXBzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjMzLjAwI1Nhdm9yeSBzcHJlYWQgb3IgcGF0ZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOS4wMC4wMCNQaWNrbGVzIGFuZCByZWxpc2ggYW5kIG9saXZlcyM1MC4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOS4wMS4wMCNQaWNrbGVzIzUwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE5LjAyLjAwI1JlbGlzaCM1MC4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOS4wMy4wMCNPbGl2ZXMjNTAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTkuMDQuMDAjQ2h1dG5leXMjNTAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTguMDAuMDAuMDAjQnJlYWQgYW5kIGJha2VyeSBwcm9kdWN0cyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNS4wMC4wMCNMZWF2ZW5pbmcgYWdlbnRzIzUwLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjE1LjAxLjAwI1llYXN0IzUwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE1LjAyLjAwI0Jha2luZyBwb3dkZXIjNTAuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTUuMDMuMDAjQmFraW5nIHNvZGEjNTAuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTUuMDQuMDAjQmFrZXJzIGFtbW9uaWEjNTAuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTYuMDAuMDAjVGhpY2tlbmVycyM1MC4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNi4wMS4wMCNHZWxhdGlucyM1MC4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNi4wMi4wMCNGb29kIGdyYWRlIHN0YXJjaGVzIzUwLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE2LjAzLjAwI1RhcGlvY2EjNTAuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTYuMDQuMDAjQXJyb3dyb290IzUwLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE2LjA1LjAwI0Zvb2QgZ3JhZGUgYWdhciM1MC4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wMC4wMCNCYWtpbmcgbWl4ZXMgYW5kIHN1cHBsaWVzIzUwLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjAxLjAwI0Zvb2QgZ2xhemVzIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjAyLjAwI0ljaW5ncyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wMy4wMCNDYWtlIGRlY29yYXRpb25zIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjA0LjAwI0Nha2Ugb3IgcHVkZGluZyBtaXh0dXJlcyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wNS4wMCNQaWUgZmlsbGluZ3MjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDYuMDAjQmFraW5nIG1peGVzIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjA3LjAwI0NvYXRpbmcgbWl4IG9yIGJyZWFkY3J1bWJzIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjA4LjAwI0Jha2luZyBtaXhlcyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wOS4wMCNCYWtpbmcgc3VwcGxpZXMjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDAuMDAjQmFrZWQgZ29vZHMjNTAuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDEuMDAjUGFzdHJ5IHNoZWxscyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wMi4wMCNDcmFja2VycyBvciBkcnkgb3Igc2F2b3VyeSBiaXNjdWl0cyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wMy4wMCNCcmVhZCM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wNC4wMCNQYXN0cmllcyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wNS4wMCNDYWtlcyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wNi4wMCNDb29raWUgb3Igc3dlZXQgYmlzY3VpdCM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wNy4wMCNCaXNjdWl0cyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wOC4wMCNVbmxlYXZlbmVkIGJyZWFkIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjA5LjAwI011ZmZpbnMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMTAuMDAjRG9udXRzIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjExLjAwI1BpenphIG9yIHBpenphIGJhc2VzIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjEyLjAwI0Nvcm5ldHMgb3IgY29uZXMgb3Igd2FmZmxlcyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOS4wMC4wMCNCcmVhZCBhbmQgYmlzY3VpdHMgYW5kIGNvb2tpZXMjNTAuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTkuMDEuMDAjRnJlc2ggYnJlYWQjNTAuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTkuMDIuMDAjRnJvemVuIGJyZWFkIzUwLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE5LjAzLjAwI1BsYWluIHNhdm9yeSBiaXNjdWl0cyM1MC4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOS4wNC4wMCNEcmllZCBicmVhZHMgb3IgYnJlYWQgc2hlbGxzIG9yIGNyb3V0b25zIzUwLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE5LjA1LjAwI1N3ZWV0IGJpc2N1aXRzIG9yIGNvb2tpZXMjNTAuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTguMjAuMDAuMDAjQ2FrZXMgYW5kIHBpZXMgYW5kIHBhc3RyaWVzIzUwLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjIwLjAxLjAwI0ZyZXNoIGNha2VzIG9yIHBpZXMgb3IgcGFzdHJpZXMjNTAuMTguMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTguMjAuMDIuMDAjRnJvemVuIGNha2VzIG9yIHBpZXMgb3IgcGFzdHJpZXMjNTAuMTguMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMDAuMDAuMDAjUHJlcGFyZWQgYW5kIHByZXNlcnZlZCBmb29kcyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNS4wMC4wMCNQcmVwYXJlZCBzb3VwcyBhbmQgc3Rld3MjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDEuMDAjU3Rld3MjNTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDIuMDAjU291cHMjNTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDMuMDAjU3RvY2sgb3Igc3RvY2sgY3ViZXMjNTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDQuMDAjU3RldyBvciBjYXNzZXJvbGUgYmFzZSM1MC4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNS4wNS4wMCNGcmVzaCBwcmVwYXJlZCBzb3VwcyBvciBzdGV3cyM1MC4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNS4wNi4wMCNGcm96ZW4gcHJlcGFyZWQgc291cHMgb3Igc3Rld3MjNTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDcuMDAjU2hlbGYgc3RhYmxlIHByZXBhcmVkIHNvdXBzIG9yIHN0ZXdzIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjAwLjAwI0Zyb3plbiBmb29kcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wMS4wMCNGcm96ZW4gZGVzc2VydHMjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDIuMDAjRnJvemVuIG1lYXRzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjAzLjAwI0Zyb3plbiBmcnVpdHMjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDQuMDAjRnJvemVuIHZlZ2V0YWJsZXMjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDUuMDAjRnJvemVuIHByZXBhcmVkIG1lYWxzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjA2LjAwI0Zyb3plbiBmaXNoIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjA3LjAwI0Zyb3plbiBjcnVzdGFjZWFucyM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wOC4wMCNGcm96ZW4gbW9sbHVza3MjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDkuMDAjRnJvemVuIHByZXBhcmVkIHBhc3RyeSB1bmJha2VkIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjEwLjAwI0Zyb3plbiBzYXZvdXJpZXMjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDAuMDAjQ2FubmVkIGZvb2RzIGFuZCBib3R0bGVkIGV0YyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wMS4wMCNDYW5uZWQgZnJ1aXRzIzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjAyLjAwI0Nhbm5lZCB2ZWdldGFibGVzIzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjAzLjAwI0Nhbm5lZCBmaXNoIzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjA0LjAwI0Nhbm5lZCBtZWF0IzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjA1LjAwI0Nhbm5lZCBJbmZhbnQgZm9vZHMjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDYuMDAjRnJ1aXQgamFtcyM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wNy4wMCNNYXJtYWxhZGUjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDguMDAjQ2FubmVkIHByZXBhcmVkIG1lYWxzIzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjA5LjAwI0Nhbm5lZCBkZXNzZXJ0cyM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOC4wMC4wMCNEcmllZCBmb29kcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOC4wMS4wMCNEcmllZCBmaXNoIzUwLjE5LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE4LjAyLjAwI0RyaWVkIG1lYXQjNTAuMTkuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTguMDMuMDAjRHJpZWQgdmVnZXRhYmxlcyM1MC4xOS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOC4wNC4wMCNEcmllZCBmcnVpdHMjNTAuMTkuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTkuMDAuMDAjU2FsdGVkIGFuZCBzbW9rZWQgZm9vZHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTkuMDEuMDAjU2FsdGVkIG9yIHNtb2tlZCBmaXNoIzUwLjE5LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE5LjAyLjAwI1NhbHRlZCBvciBzbW9rZWQgbWVhdHMjNTAuMTkuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTkuMDMuMDAjU2FsdGVkIG9yIHNtb2tlZCBzaGVsbGZpc2ggb3IgY3J1c3RhY2VhbnMgb3Igcm9lIzUwLjE5LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE5LjA0LjAwI1NhbHRlZCBvciBzbW9rZWQgZnJ1aXRzIzUwLjE5LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE5LjA1LjAwI1NhbHRlZCBvciBzbW9rZWQgbnV0cyM1MC4xOS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMC4wMC4wMCNQaWNrbGVkIGZvb2RzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIwLjAxLjAwI1BpY2tsZWQgZmlzaCM1MC4xOS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMC4wMi4wMCNQaWNrbGVkIGNydXN0YWNlYW5zIzUwLjE5LjIwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIwLjAzLjAwI1BpY2tsZWQgbWVhdHMjNTAuMTkuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjAuMDQuMDAjUGlja2xlZCB2ZWdldGFibGVzIzUwLjE5LjIwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIwLjA1LjAwI1BpY2tsZWQgZWdncyM1MC4xOS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wMC4wMCNTbmFjayBmb29kcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wMS4wMCNQcmV0emVscyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wMi4wMCNDb3JuIGNoaXBzIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjAzLjAwI1BvdGF0byBjaGlwcyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wNC4wMCNQb3Bjb3JuIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjA1LjAwI0Zpc2ggZmluZ2VycyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wNi4wMCNGcnVpdCBzbmFja3MjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDcuMDAjT3RoZXIgZmxhdm91cmVkIHNuYWNrIGZvb2RzIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjA4LjAwI0ZydWl0IG9yIG51dCBtaXgjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDkuMDAjQ3Jpc3BzIG9yIGNoaXBzIG9yIHByZXR6ZWxzIG9yIG1peGVzIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjEwLjAwI051dHMgb3IgZHJpZWQgZnJ1aXRzIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjExLjAwI0RyaWVkIG9yIHByb2Nlc3NlZCBtZWF0cyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4xMi4wMCNQb3BwZWQgY29ybiM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMi4wMC4wMCNTcHJlYWRzIGFuZCBjb25zZXJ2ZXMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjIuMDEuMDAjUGVhbnV0IGJ1dHRlciM1MC4xOS4yMi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMi4wMi4wMCNZZWFzdCBvciB2ZWdldGFibGUgZXh0cmFjdCBzcHJlYWRzIzUwLjE5LjIyLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIyLjAzLjAwI0phbXMgb3IgamVsbGllcyBvciBxdWluY2VzIzUwLjE5LjIyLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIzLjAwLjAwI0Rlc2VydHMgYW5kIGRlc2VydCB0b3BwaW5ncyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMy4wMS4wMCNQcmVwYXJlZCBkZXNlcnRzIzUwLjE5LjIzLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIzLjAyLjAwI0Rlc2VydCB0b3BwaW5ncyM1MC4xOS4yMy4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMy4wMy4wMCNGbGF2b3JlZCBpY2VzIG9yIGljZSBjcmVhbSBvciBpY2UgY3JlYW0gZGVzZXJ0cyBvciBmcm96ZW4geW9ndXJ0cyM1MC4xOS4yMy4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNC4wMC4wMCNKYW1zIGFuZCBqZWxsaWVzIGFuZCBudXQgYW5kIHN3ZWV0IHNwcmVhZHMgYW5kIGZydWl0IGNvbnNlcnZlcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNC4wMS4wMCNKYW1zIG9yIGplbGxpZXMgb3IgZnJ1aXQgcHJlc2VydmVzIzUwLjE5LjI0LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI0LjAyLjAwI051dCBvciBtaXhlZCBzcHJlYWRzIzUwLjE5LjI0LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI0LjAzLjAwI0hvbmV5IzUwLjE5LjI0LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI1LjAwLjAwI1NhbmR3aWNoZXMgYW5kIGZpbGxlZCByb2xscyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNS4wMS4wMCNGcmVzaCBzYW5kd2ljaGVzIG9yIGZpbGxlZCByb2xscyM1MC4xOS4yNS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNS4wMi4wMCNGcm96ZW4gc2FuZHdpY2hlcyBvciBmaWxsZWQgcm9sbHMjNTAuMTkuMjUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjYuMDAuMDAjUHJlcGFyZWQgcG90YXRvZXMgYW5kIHJpY2UgYW5kIHBhc3RhIGFuZCBzdHVmZmluZyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNi4wMS4wMCNGcmVzaCBwcmVwYXJlZCBwb3RhdG9lcyBvciByaWNlIG9yIHBhc3RhIG9yIHN0dWZmaW5nIzUwLjE5LjI2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI2LjAyLjAwI0Zyb3plbiBwcmVwYXJlZCBwb3RhdG9lcyBvciByaWNlIG9yIHBhc3RhIG9yIHN0dWZmaW5nIzUwLjE5LjI2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI2LjAzLjAwI1NoZWxmIHN0YWJsZSBwcmVwYXJlZCBwb3RhdG9lcyBvciByaWNlIG9yIHBhc3RhIG9yIHN0dWZmaW5nIzUwLjE5LjI2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI3LjAwLjAwI1BhY2thZ2VkIGNvbWJpbmF0aW9uIG1lYWxzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjI3LjAxLjAwI0ZyZXNoIGNvbWJpbmF0aW9uIG1lYWxzIzUwLjE5LjI3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI3LjAyLjAwI0Zyb3plbiBjb21iaW5hdGlvbiBtZWFscyM1MC4xOS4yNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNy4wMy4wMCNTaGVsZiBzdGFibGUgY29tYmluYXRpb24gbWVhbHMjNTAuMTkuMjcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjguMDAuMDAjU2F2b3J5IHBpZXMgYW5kIHF1aWNoZXMgYW5kIHBhc3RpZXMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjguMDEuMDAjRnJlc2ggc2F2b3J5IHBpZXMgb3IgcXVpY2hlcyBvciBwYXN0aWVzIzUwLjE5LjI4LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI4LjAyLjAwI0Zyb3plbiBzYXZvcnkgcGllcyBvciBxdWljaGVzIG9yIHBhc3RpZXMjNTAuMTkuMjguMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjguMDMuMDAjU2hlbGYgc3RhYmxlIHNhdm9yeSBwaWVzIG9yIHF1aWNoZXMgb3IgcGFzdGllcyM1MC4xOS4yOC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yOS4wMC4wMCNQbGFpbiBwYXN0YSBhbmQgbm9vZGxlcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yOS4wMS4wMCNGcmVzaCBwbGFpbiBwYXN0YSBvciBub29kbGVzIzUwLjE5LjI5LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI5LjAyLjAwI1NoZWxmIHN0YWJsZSBwbGFpbiBwYXN0YSBvciBub29kbGVzIzUwLjE5LjI5LjAwLjAwCi11bnNwc2M3IzUwLjE5LjMwLjAwLjAwI0luZmFudCBmb29kcyBhbmQgYmV2ZXJhZ2VzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjMwLjAxLjAwI0luZmFudCBmb29kcyM1MC4xOS4zMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4zMC4wMi4wMCNJbmZhbnQgYmV2ZXJhZ2VzIzUwLjE5LjMwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjAwLjAwLjAwI0JldmVyYWdlcyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNS4wMC4wMCNXYXRlciM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNS4wMS4wMCNTcGFya2xpbmcgd2F0ZXIjNTAuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTUuMDIuMDAjU3ByaW5nIHdhdGVyIzUwLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE1LjAzLjAwI01pbmVyYWwgd2F0ZXIjNTAuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTUuMDQuMDAjRGlzdGlsbGVkIG9yIHB1cmlmaWVkIHdhdGVyIzUwLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjAwLjAwI0p1aWNlcyM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wMS4wMCNCbGVuZGVkIGp1aWNlcyM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wMi4wMCNHdWF2YSBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wMy4wMCNQcnVuZSBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wNC4wMCNUb21hdG8ganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDUuMDAjQ3JhbmJlcnJ5IGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjA2LjAwI0dyYXBlZnJ1aXQganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDcuMDAjR3JhcGUganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDguMDAjUGluZWFwcGxlIGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjA5LjAwI09yYW5nZSBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4xMC4wMCNBcHBsZSBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4xMS4wMCNMZW1vbiBqdWljZXMgb3IgbGVtb25hZGUjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMTIuMDAjSW5mYW50IGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjAwLjAwI0NvZmZlZSBhbmQgdGVhIzUwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjAxLjAwI0luc3RhbnQgY29mZmVlIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjAyLjAwI0dyb3VuZCBjb2ZmZWUjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDMuMDAjV2hvbGUgYmVhbiBjb2ZmZWUjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDQuMDAjR3JlZW4gY29mZmVlIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjA1LjAwI0NvZmZlZSBzdWJzdGl0dXRlcyM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wNi4wMCNDb2ZmZWUjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDcuMDAjQ29mZmVlIHN1YnN0aXR1dGVzIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjA4LjAwI0NvZmZlZSBkcmlua3MjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDkuMDAjSW5zdGFudCBjb2ZmZWUjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMTAuMDAjTGVhZiB0ZWEjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMTEuMDAjSW5zdGFudCB0ZWEjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMTIuMDAjVGVhIGRyaW5rcyM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4xMy4wMCNUZWEgYmFncyM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOC4wMC4wMCNUZWEjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTguMDEuMDAjR3JlZW4gdGVhIzUwLjIwLjE4LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE4LjAyLjAwI0JsYWNrIHRlYSM1MC4yMC4xOC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOC4wMy4wMCNIZXJiYWwgdGVhIzUwLjIwLjE4LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE4LjA0LjAwI1Bvd2RlcmVkIHRlYSM1MC4yMC4xOC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOC4wNS4wMCNUZWEgYmFncyM1MC4yMC4xOC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOS4wMC4wMCNTb2Z0IGRyaW5rcyM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOS4wMS4wMCNOb24gY2FyYm9uYXRlZCBzb2Z0IGRyaW5rcyM1MC4yMC4xOS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOS4wMi4wMCNDYXJib25hdGVkIHNvZnQgZHJpbmtzIzUwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE5LjAzLjAwI0NvcmRpYWxzIG9yIGNvbG91cmluZ3MjNTAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTkuMDQuMDAjU3BvcnRzIG9yIGhpZ2ggZW5lcmd5IGRyaW5rcyM1MC4yMC4xOS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOS4wNS4wMCNTb3kgYmV2ZXJhZ2UjNTAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDAuMDAjQmVlciBhbmQgd2luZSM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wMS4wMCNDaGFtcGFnbmUjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDIuMDAjQmVlciM1MC4yMC4yMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wMy4wMCNXaW5lIzUwLjIwLjIwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjA0LjAwI1NwYXJrbGluZyB3aW5lcyM1MC4yMC4yMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wNS4wMCNGb3J0aWZpZWQgd2luZSM1MC4yMC4yMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wNi4wMCNQb3J0IzUwLjIwLjIwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjA3LjAwI1NoZXJyeSM1MC4yMC4yMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wOC4wMCNXaW5lIGNvb2xlciBiZXZlcmFnZSM1MC4yMC4yMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wMC4wMCNTcGlyaXRzIGFuZCBsaXF1b3JzIzUwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjAxLjAwI0JyYW5keSM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wMi4wMCNDb2duYWMgb3IgYXJtYWduYWMjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDMuMDAjV2hpc2tleSM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wNC4wMCNWb2RrYSM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wNS4wMCNUZXF1aWxhIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjA2LjAwI0dpbiM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wNy4wMCNMaXF1ZXVycyM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wOC4wMCNSdW0jNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDkuMDAjQm91cmJvbiM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4xMC4wMCNTY290Y2gjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTEuMDAjQ2lkZXIjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTIuMDAjU2NobmFwcHMjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTMuMDAjT3V6byM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4xNC4wMCNBcGVyaXRpZnMgb3IgYml0dGVycyM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4xNS4wMCNWZXJtb3V0aCM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4xNi4wMCNTYW1idWNhIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjE3LjAwI1Nha2UjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTguMDAjTXVzY2F0IG9yIG1hZGVpcmEjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjIuMDAuMDAjQWxjb2hvbGljIGJldmVyYWdlcyM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wMS4wMCNCZWVyIzUwLjIwLjIyLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjAyLjAwI0NpZGVyIG9yIHBlcnJ5IzUwLjIwLjIyLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjAzLjAwI1dpbmUjNTAuMjAuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjIuMDQuMDAjRm9ydGlmaWVkIHdpbmUjNTAuMjAuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjIuMDUuMDAjU3BhcmtsaW5nIHdpbmUjNTAuMjAuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjIuMDYuMDAjU3Bpcml0cyBvciBsaXF1b3JzIzUwLjIwLjIyLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjA3LjAwI0FsY29ob2wgY29ja3RhaWxzIG9yIGRyaW5rIG1peGVzIzUwLjIwLjIyLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjAwLjAwI05vbiBhbGNvaG9saWMgYmV2ZXJhZ2VzIzUwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjAxLjAwI1dhdGVyIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjAyLjAwI0ljZSM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wMy4wMCNGcm96ZW4ganVpY2VzIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjA0LjAwI1NoZWxmIHN0YWJsZSBqdWljZSM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wNS4wMCNGcmVzaCBqdWljZSM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wNi4wMCNTb2Z0IGRyaW5rcyM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wNy4wMCNDaG9jb2xhdGUgb3IgbWFsdCBvciBvdGhlciBob3QgYmV2ZXJhZ2VzIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjA4LjAwI0FsY29ob2wgZnJlZSBjb2NrdGFpbHMgb3IgZHJpbmsgbWl4ZXMjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDkuMDAjU3BvcnQgZHJpbmsgbWl4ZXMjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMTAuMDAjU3ByaW5nIHdhdGVyIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIxLjAwLjAwLjAwI1RvYmFjY28gYW5kIHNtb2tpbmcgcHJvZHVjdHMgYW5kIHN1YnN0aXR1dGVzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIxLjE1LjAwLjAwI1RvYmFjY28gYW5kIHN1YnN0aXR1dGVzIzUwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIxLjE1LjAxLjAwI1RvYmFjY28gbGVhZiM1MC4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNS4wMi4wMCNDaWdhcmV0dGVzIG9yIGNpZ2FycyM1MC4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNS4wMy4wMCNQaXBlIHRvYmFjY28gb3IgbGVhZiB0b2JhY2NvIzUwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE1LjA0LjAwI0NoZXdpbmcgdG9iYWNjbyM1MC4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNS4wNS4wMCNIZXJiYWwgY2lnYXJldHRlcyM1MC4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wMC4wMCNUb2JhY2NvIHByb2R1Y3QgYWNjZXNzb3JpZXMgYW5kIHN1cHBsaWVzIzUwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjAxLjAwI1BpcGUgdG9iYWNjbyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wMi4wMCNDaWdhcnMjNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDMuMDAjQ2lnYXJldHRlcyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wNC4wMCNTbW9rZWxlc3MgdG9iYWNjbyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wNS4wMCNSZWFkeSBydWJiZWQgdG9iYWNjbyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wNi4wMCNDaWdhcmV0dGUgcGFwZXJzIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjA3LjAwI0NpZ2FyZXR0ZSBwYXBlcnMgb3IgZmlsdGVycyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wOC4wMCNDaWdhcmV0dGUgbGlnaHRlcnMgb3IgZmxpbnRzIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjA5LjAwI1Ntb2tpbmcgcGlwZXMjNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMDAuMDAuMDAjQ2VyZWFsIGFuZCBwdWxzZSBwcm9kdWN0cyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMC4wMC4wMCNQdWxzZXMjNTAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTAuMDEuMDAjUHVsc2UgZ3JhaW5zIzUwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzUwLjIyLjEwLjAyLjAwI1B1bHNlIGZsb3VyIzUwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzUwLjIyLjExLjAwLjAwI0NlcmVhbHMjNTAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTEuMDEuMDAjQ2VyZWFsIGdyYWlucyM1MC4yMi4xMS4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMS4wMi4wMCNDZXJlYWwgZmxvdXIjNTAuMjIuMTEuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTIuMDAuMDAjUHJvY2Vzc2VkIGNlcmVhbHMjNTAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTIuMDEuMDAjUmVhZHkgdG8gZWF0IG9yIGhvdCBjZXJlYWxzIzUwLjIyLjEyLjAwLjAwCi11bnNwc2M3IzUwLjIyLjEyLjAyLjAwI0hlYWx0aCBvciBicmVha2Zhc3QgYmFycyM1MC4yMi4xMi4wMC4wMAotdW5zcHNjNyM1MS4wMC4wMC4wMC4wMCNEcnVncyBhbmQgUGhhcm1hY2V1dGljYWwgUHJvZHVjdHMjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMDAuMDAuMDAjQW50aSBpbmZlY3RpdmUgZHJ1Z3MjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDAuMDAjQW50aWJpb3RpY3MjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDEuMDAjQW1pbm9nbHljb3NpZGVzIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjAyLjAwI0NlcGhhbG9zcG9yaW5zIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjAzLjAwI0NobG9yYW1waGVuaWNvbCM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wNC4wMCNDbGluZGFteWNpbiBvciBsaW5jb215Y2luIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjA1LjAwI0ZsdW9yb3F1aW5vbG9uZXMjNTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDYuMDAjTWFjcm9saWRlIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjA3LjAwI1BlbmljaWxsaW5zIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjA4LjAwI0FudGliaW90aWMgc3VsZm9uYW1pZGVzIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjA5LjAwI1RldHJhY3ljbGluZXMjNTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTYuMDAuMDAjQW1lYmljaWRlcyBhbmQgVHJpY2hvbW9uYWNpZGVzIGFuZCBBbnRpcHJvdG96b2FscyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNi4wMS4wMCNBdG92YXF1b25lIzUxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE2LjAyLjAwI0VmbG9ybml0aGluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE2LjAzLjAwI01ldHJvbmlkYXpvbGUjNTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDAuMDAjQW50aGVsbWludGljcyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNy4wMS4wMCNBbGJlbmRhZG9sZSM1MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNy4wMi4wMCNNZWJlbmRhem9sZSM1MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNy4wMy4wMCNPeGFtbmlxdWluZSM1MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNy4wNC4wMCNQaXBlcmF6aW5lIGNpdHJhdGUjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDUuMDAjUHJhemlxdWFudGVsIzUxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjA2LjAwI1B5cmFudGVsIHBhbW9hdGUjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDcuMDAjVGhpYWJlbmRhem9sZSM1MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wMC4wMCNBbnRpZnVuZ2FsIGRydWdzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjAxLjAwI0FtcGhvdGVyaWNpbiBiIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjAyLjAwI0J1dGVuYWZpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wMy4wMCNCdXRvY29uYXpvbGUgbml0cmF0ZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wNC4wMCNDaWNsb3Bpcm94IG9sYW1pbmUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDUuMDAjQ2xvdHJpbWF6b2xlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjA2LjAwI0Vjb25hem9sZSBuaXRyYXRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjA3LjAwI0ZsdWNvbmF6b2xlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjA4LjAwI0ZsdWN5dG9zaW5lIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjA5LjAwI0dyaXNlb2Z1bHZpbiM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xMC4wMCNJdHJhY29uYXpvbGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTEuMDAjS2V0b2NvbmF6b2xlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjEyLjAwI01pY29uYXpvbGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTMuMDAjTmFmdGlmaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTQuMDAjTmF0YW15Y2luIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjE1LjAwI055c3RhdGluIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjE2LjAwI094aWNvbmF6b2xlIG5pdHJhdGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTcuMDAjU3VsY29uYXpvbGUgbml0cmF0ZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xOC4wMCNUZXJiaW5hZmluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjE5LjAwI1RlcmNvbmF6b2xlIG5pdHJhdGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMjAuMDAjVGlvY29uYXpvbGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMjEuMDAjVG9sbmFmdGF0ZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOS4wMC4wMCNBbnRpbWFsYXJpYWwgZHJ1Z3MjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDEuMDAjQW1pbm9xdWlub2xpbmVzIzUxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjAyLjAwI01lZmxvcXVpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOS4wMy4wMCNQcmltYXF1aW5lIHBob3NwaGF0ZSM1MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOS4wNC4wMCNRdWluaW5lIHN1bGZhdGUjNTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDUuMDAjQ2hsb3JvcXVpbmUjNTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDYuMDAjUHJvZ3VhbmlsIzUxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjA3LjAwI1B5cmltZXRoYW1pbmUjNTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjAuMDAuMDAjQW50aXR1YmVyY3VsYXIgZHJ1Z3MjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjAuMDEuMDAjQ3ljbG9zZXJpbmUjNTEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjAuMDIuMDAjRXRoYW1idXRvbCBoeWRyb2NobG9yaWRlIzUxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIwLjAzLjAwI0lzb25pYXppZCM1MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMC4wNC4wMCNSaWZ1YnV0aW4jNTEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjAuMDUuMDAjUmlmYW1waW4jNTEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjEuMDAuMDAjTGVwcm9zdGF0aWNzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIxLjAxLjAwI0Nsb2ZhemltaW5lIzUxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIxLjAyLjAwI0RhcHNvbmUjNTEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDAuMDAjVXJpbmFyeSBhbnRpIGluZmVjdGl2ZXMgYW5kIGFuYWxnZXNpY3MjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDEuMDAjQ2lub3hhY2luIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjAyLjAwI0ZsYXZveGF0ZSBoeWRyb2NobG9yaWRlIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjAzLjAwI01ldGhlbmFtaW5lIGhpcHB1cmF0ZSM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wNC4wMCNNZXRoZW5hbWluZSBtYW5kZWxhdGUjNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDUuMDAjTmFsaWRpeGljIGFjaWQjNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDYuMDAjTml0cm9mdXJhbnRvaW4jNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDcuMDAjT3h5YnV0eW5pbiBjaGxvcmlkZSM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wOC4wMCNQZW50b3NhbiBwb2x5c3VsZmF0ZSBzb2RpdW0jNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDkuMDAjUGhlbmF6b3B5cmlkaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMTAuMDAjQW50aXNlcHRpYyBzb2x1dGlvbnMjNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDAuMDAjQW50aXZpcmFsIGRydWdzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjAxLjAwI0FjeWNsb3ZpciM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wMi4wMCNBbWFudGFkaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDMuMDAjQ3lkb2ZvdmlyIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjA0LjAwI0RpZGFub3NpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDUuMDAjRmFtY2ljbG92aXIjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDYuMDAjRm9zY2FybmV0IHNvZGl1bSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wNy4wMCNHYW5jaWNsb3ZpciBzb2RpdW0jNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDguMDAjSWRveHVyaWRpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDkuMDAjSW5kaW5hdmlyIHN1bGZhdGUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTAuMDAjTGFtaXZ1ZGluZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xMS4wMCNOZXZpcmFwaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjEyLjAwI1JpYmF2aXJpbiM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xMy4wMCNSaW1hbnRhZGluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjE0LjAwI1JpdG9uYXZpciM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xNS4wMCNTYXF1aW5hdmlyIG1lc3lsYXRlIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjE2LjAwI1N0YXZpZGluZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xNy4wMCNUcmlmbHVyYWRpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTguMDAjVmFsYWN5Y2xvdmlyIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTkuMDAjVmlkYXJhYmluZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4yMC4wMCNaYWxjaXRhYmluZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4yMS4wMCNaaWRvdnVkaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjExLjAwLjAwLjAwI0FudGluZW9wbGFzdGljIGFnZW50cyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wMC4wMCNBbGt5bGF0aW5nIGFnZW50cyM1MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wMS4wMCNBbWlmb3N0aW5lIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjAyLjAwI0J1c3VsZmFuIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjAzLjAwI0NhcmJvcGxhdGluIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjA0LjAwI0Nhcm11c3RpbmUjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDUuMDAjQ2hsb3JhbWJ1Y2lsIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjA2LjAwI0Npc3BsYXRpbiM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wNy4wMCNDeWNsb3Bob3NwaGFtaWRlIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjA4LjAwI0RhY2FyYmF6aW5lIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjA5LjAwI0lmb3NmYW1pZGUjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTAuMDAjTG9tdXN0aW5lIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjExLjAwI01lY2hsb3JldGhhbWluZSBoeWRyb2NobG9yaWRlIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjEyLjAwI01lbHBoYWxhbiM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xMy4wMCNNZXNuYSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xNC4wMCNQaXBvYnJvbWFuIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjE1LjAwI1N0cmVwdG96b2NpbiM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xNi4wMCNUaGlvdGVwYSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xNy4wMCNVcmFjaWwgbXVzdGFyZCM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wMC4wMCNBbnRpbWV0YWJvbGl0ZXMjNTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDEuMDAjQ2xhZHJpYmluZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wMi4wMCNDeXRhcmFiaW5lIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjAzLjAwI0Zsb3h1cmlkaW5lIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjA0LjAwI0ZsdWRhcmFiaW5lIHBob3NwaGF0ZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wNS4wMCNGbHVvcm91cmFjaWwjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDYuMDAjSHlkcm94eXVyZWEjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDcuMDAjSWRhcnViaWNpbiBoeWRyb2NobG9yaWRlIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjA4LjAwI0xldmFtaXNvbGUgaHlkcm9jaGxvcmlkZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wOS4wMCNNZXJjYXB0b3B1cmluZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4xMC4wMCNNZXRob3RyZXhhdGUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMTEuMDAjVGVuaXBvc2lkZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4xMi4wMCNUaGlvZ3VhbmluZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNy4wMC4wMCNBbnRpbmVvcGxhc3RpYyBhbnRpYmlvdGljcyM1MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNy4wMS4wMCNCbGVvbXljaW4gc3VsZmF0ZSM1MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNy4wMi4wMCNEYWN0aW5vbXljaW4jNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDMuMDAjRGF1bm9ydWJpY2lucyM1MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNy4wNC4wMCNNaXRvbXljaW4jNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDUuMDAjTWl0b3RhbmUjNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDYuMDAjTWl0b3hhbnRyb25lIGh5ZHJvY2hsb3JpZGUjNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDcuMDAjUGVudG9zdGF0aW4jNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDguMDAjUGxpY2FteWNpbiM1MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wMC4wMCNIb3Jtb25lcyBhbmQgYW50aWhvcm1vbmVzIzUxLjExLjAwLjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjAxLjAwI0FuYXN0cm96b2xlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjAyLjAwI0JpY2FsdXRhbWlkZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wMy4wMCNFc3RyYW11c3RpbmUgcGhvc3BoYXRlIHNvZGl1bSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wNC4wMCNGbHV0YW1pZGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDUuMDAjR29zZXJlbGluIGFjZXRhdGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDYuMDAjSXJpbm90ZWNhbiBoeWRyb2NobG9yaWRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjA3LjAwI0xldXByb2xpZGUgYWNldGF0ZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wOC4wMCNOaWx1dGFtaWRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjA5LjAwI1RhbW94aWZlbiM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4xMC4wMCNUZXN0b2xhY3RvbmUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMTEuMDAjVG9wb3RlY2FuIGh5ZHJvY2hsb3JpZGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMTIuMDAjVmluYmxhc3RpbmUgc3VsZmF0ZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4xMy4wMCNWaW5jcmlzdGluZSBzdWxmYXRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjE0LjAwI1Zpbm9yZWxiaW5lIHRhcnRyYXRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE5LjAwLjAwI05hdHVyYWwgYW50aW5lb3BsYXN0aWMgcHJvZHVjdHMjNTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTkuMDEuMDAjQXNwYXJhZ2luYXNlIzUxLjExLjE5LjAwLjAwCi11bnNwc2M3IzUxLjExLjE5LjAyLjAwI0RvY2V0YXhlbCM1MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOS4wMy4wMCNJbnRlcmZlcm9uIzUxLjExLjE5LjAwLjAwCi11bnNwc2M3IzUxLjExLjE5LjA0LjAwI1BhY2xpdGF4ZWwjNTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTkuMDUuMDAjUG9yZmltZXIgc29kaXVtIzUxLjExLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEyLjAwLjAwLjAwI0NhcmRpb3Zhc2N1bGFyIGRydWdzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEyLjE1LjAwLjAwI0FudGlhcnJ5dGhtaWMgYWdlbnRzIzUxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEyLjE1LjAxLjAwI0FkZW5vc2luZSM1MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNS4wMi4wMCNEaWdveGluIzUxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE1LjAzLjAwI1F1aW5pZGluZSBnbHVjb25hdGUjNTEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTYuMDAuMDAjQW50aWFuZ2luYWwgZHJ1Z3MjNTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTYuMDEuMDAjQW15bCBuaXRyYXRlIzUxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE2LjAyLjAwI0lzb3NvcmJpZGUgZGluaXRyYXRlIzUxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE2LjAzLjAwI05pdHJvZ2x5Y2VyaW4jNTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTYuMDQuMDAjUGVudGFlcnl0aHJpdG9sIHRldHJhbml0cmF0ZSM1MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wMC4wMCNBbnRpaHlwZXJ0ZW5zaXZlIGRydWdzIzUxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjAxLjAwI0RpYXpveGlkZSM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wMi4wMCNUZXJhem9zaW4jNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDMuMDAjQ2FwdG9wcmlsIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjA0LjAwI0xpc2lub3ByaWwjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDUuMDAjRmVsb2RpcGluZSM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wNi4wMCNJc3JhZGlwaW5lIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjA3LjAwI1ZlcmFwYW1pbCM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wOC4wMCNNZXRoeWxkb3BhIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjA5LjAwI0NhcnZlZGlsb2wjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMTAuMDAjTG9zYXJ0YW4gcG90YXNzaXVtIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjExLjAwI01pbm94aWRpbCM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOC4wMC4wMCNBbnRpaHlwZXJsaXBpZGVtaWMgYW5kIGh5cG9jaG9sZXN0ZXJvbGVtaWMgYWdlbnRzIzUxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEyLjE4LjAxLjAwI0ZsdXZhc3RhdGluIHNvZGl1bSM1MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOC4wMi4wMCNMb3Zhc3RhdGluIzUxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE4LjAzLjAwI1NpbXZhc3RhdGluIzUxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE4LjA0LjAwI0Nsb2ZpYnJhdGUjNTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTguMDUuMDAjR2VtZmlicm96aWwjNTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTkuMDAuMDAjRHJ1Z3MgdXNlZCBmb3IgY29uZ2VzdGl2ZSBoZWFydCBmYWlsdXJlIzUxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEyLjE5LjAxLjAwI0Ftcmlub25lIGxhY3RhdGUjNTEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTkuMDIuMDAjTWlscmlub25lIGxhY3RhdGUjNTEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTkuMDMuMDAjRGlnaXRveGluIzUxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEzLjAwLjAwLjAwI0hlbWF0b2xpYyBkcnVncyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNS4wMC4wMCNBbnRpYW5lbWljIGRydWdzIzUxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEzLjE1LjAxLjAwI0ZlcnJvdXMgZnVtYXJhdGUjNTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTUuMDIuMDAjRmVycm91cyBnbHVjb25hdGUjNTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTUuMDMuMDAjRmVycm91cyBzdWxmYXRlIzUxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE2LjAwLjAwI0FudGljb2FndWxhbnRzIzUxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEzLjE2LjAxLjAwI0Fwcm90aW5pbiM1MS4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNi4wMi4wMCNIZXBhcmluIGNhbGNpdW0jNTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTYuMDMuMDAjSGVwYXJpbiBzb2RpdW0jNTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTYuMDQuMDAjV2FyZmFyaW4gc29kaXVtIzUxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE3LjAwLjAwI1Rocm9tYm9seXRpYyBkcnVncyBhbmQgcGxhdGVsZXQgYWdncmVnYXRpb24gaW5oaWJpdG9ycyM1MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNy4wMS4wMCNBYmNpeGltYWIjNTEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTcuMDIuMDAjQWx0ZXBsYXNlIzUxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE3LjAzLjAwI1N0cmVwdG9raW5hc2UjNTEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTcuMDQuMDAjVXJva2luYXNlIzUxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUxLjE0LjAwLjAwLjAwI0NlbnRyYWwgbmVydm91cyBzeXN0ZW0gZHJ1Z3MjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDAuMDAjQW50aWNvbnZ1bHNhbnRzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjAxLjAwI0FjZXRhem9sYW1pZGUjNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDIuMDAjQ2xvbmF6ZXBhbSM1MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNS4wMy4wMCNGZWxiYW1hdGUjNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDQuMDAjTGFtb3RyaWdpbmUjNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDUuMDAjUGhlbm9iYXJiaXRhbCM1MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNS4wNi4wMCNQaGVub2JhcmJpdGFsIHNvZGl1bSM1MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNS4wNy4wMCNQaGVueXRvaW4jNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDguMDAjRXRob3N1eGltaWRlIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE2LjAwLjAwI0FudGlkZXByZXNzYW50cyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNi4wMS4wMCNBbWl0cmlwdHlsaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTYuMDIuMDAjRG94ZXBpbiBoeWRyb2NobG9yaWRlIzUxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE2LjAzLjAwI0ltaXByYW1pbmUgcGFtb2F0ZSM1MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNi4wNC4wMCNNaXJ0YXphcGluZSM1MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNi4wNS4wMCNQYXJveGV0aW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTYuMDYuMDAjVHJhem9kb25lIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTcuMDAuMDAjQW50aXBzeWNob3RpYyBhZ2VudHMjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTcuMDEuMDAjUGhlbm90aGlhemluZXMjNTEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTcuMDIuMDAjSGFsb3Blcmlkb2wjNTEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTcuMDMuMDAjT2xhbnphcGluZSM1MS4xNC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNy4wNC4wMCNSaXNwZXJpZG9uZSM1MS4xNC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOC4wMC4wMCNIeXBub3RpY3MjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTguMDEuMDAjUGVudG9iYXJiaXRhbCM1MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOC4wMi4wMCNTZWNvYmFyYml0YWwgc29kaXVtIzUxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE4LjAzLjAwI0NobG9yYWwgaHlkcmF0ZSM1MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOC4wNC4wMCNFc3Rhem9sYW0jNTEuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTguMDUuMDAjVHJpYXpvbGFtIzUxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE5LjAwLjAwI1RyYW5xdWlsaXplcnMgYW5kIGFudGltYW5pYyBkcnVncyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wMS4wMCNBbHByYXpvbGFtIzUxLjE0LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE5LjAyLjAwI0RpYXplcGFtIzUxLjE0LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE5LjAzLjAwI0xpdGhpdW0gY2FyYm9uYXRlIzUxLjE0LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE5LjA0LjAwI0xpdGhpdW0gY2l0cmF0ZSM1MS4xNC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wNS4wMCNNaWRhem9sYW0gaHlkcm9jaGxvcmlkZSM1MS4xNC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wNi4wMCNUZW1hemVwYW0jNTEuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjAuMDAuMDAjTm9uIG5hcmNvdGljIGFuYWxnZXNpY3MgYW5kIGFudGlweXJldGljcyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMC4wMS4wMCNBY2V0YW1pbm9waGVuIzUxLjE0LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIwLjAyLjAwI0FjZXR5bHNhbGljeWxpYyBhY2lkIzUxLjE0LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIwLjAzLjAwI01lc2FsYW1pbmUjNTEuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjAuMDQuMDAjTWVwcm9icm9tYXRlIzUxLjE0LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjAwLjAwI05vbnN0ZXJvaWRhbCBhbnRpIGluZmxhbW1hdG9yeSBkcnVncyAoTlNBSURzKSM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wMS4wMCNBdXJhbm9maW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDIuMDAjQ2FycG9mZW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDMuMDAjRGljbG9mZW5hYyBwb3Rhc3NpdW0jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDQuMDAjRGljbG9mZW5hYyBzb2RpdW0jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDUuMDAjRmx1cmJpcHJvZmVuIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjA2LjAwI0lidXByb2ZlbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wNy4wMCNJbmRvbWV0aGFjaW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDguMDAjS2V0b3Byb2ZlbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wOS4wMCNOYXByb3hlbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4xMC4wMCNOYXByb3hlbiBzb2RpdW0jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMTEuMDAjT3hhcHJvemluIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjEyLjAwI1N1bGluZGFjIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjEzLjAwI1N1cHJvZmVuIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjAwLjAwI05hcmNvdGljIGFuYWxnZXNpY3MjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjIuMDEuMDAjQnV0b3JwaGFub2wgdGFydHJhdGUjNTEuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjIuMDIuMDAjQ29kZWluZSBwaG9zcGhhdGUjNTEuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjIuMDMuMDAjQ29kZWluZSBzdWxmYXRlIzUxLjE0LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjA1LjAwI01lcGVyaWRpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wNi4wMCNNb3JwaGluZSBzdWxmYXRlIzUxLjE0LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjA3LjAwI094eWNvZG9uZSM1MS4xNC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wOC4wMCNTdWZlbnRhbmlsIzUxLjE0LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIzLjAwLjAwI05hcmNvdGljIGFudGFnb25pc3RzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIzLjAxLjAwI05hbG1lZmVuZSBoeWRyb2NobG9yaWRlIzUxLjE0LjIzLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIzLjAyLjAwI05hbG94b25lIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjMuMDMuMDAjTmFsdHJleG9uZSM1MS4xNC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNC4wMC4wMCNEcnVncyB1c2VkIGZvciB2YXNjdWxhciBhbmQgbWlncmFpbmUgaGVhZGFjaGVzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjI0LjAxLjAwI01ldGh5c2VyZ2lkZSBtYWxlYXRlIzUxLjE0LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI0LjAyLjAwI1N1bWF0cmlwdGFuIHN1Y2NpbmF0ZSM1MS4xNC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNS4wMC4wMCNBbnRpcGFya2luc29uIGRydWdzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjI1LjAxLjAwI0Jyb21vY3JpcHRpbmUgbWVzeWxhdGUjNTEuMTQuMjUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjUuMDIuMDAjQ2FyYmlkb3BhIzUxLjE0LjI1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI1LjAzLjAwI0xldm9kb3BhIzUxLjE0LjI1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI1LjA0LjAwI1NlbGVnaWxpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNC4yNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNi4wMC4wMCNTdGltdWxhbnRzIGFuZCBhbm9yZXhpYW50cyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNi4wMS4wMCNBbXBoZXRhbWluZSBzdWxmYXRlIzUxLjE0LjI2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI2LjAyLjAwI0ZlbmZsdXJhbWluZSM1MS4xNC4yNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNi4wMy4wMCNNYXppbmRvbCM1MS4xNC4yNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNi4wNC4wMCNQZW1vbGluZSM1MS4xNC4yNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNi4wNS4wMCNQaGVuZGltZXRyYXppbmUgdGFydHJhdGUjNTEuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMDAuMDAuMDAjQXV0b25vbWljIG5lcnZvdXMgc3lzdGVtIGRydWdzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjE1LjAwLjAwI0Nob2xpbmVyZ2ljIGRydWdzIGFuZCBjaG9saW5lc3RlcmFzZSBpbmhpYml0b3JzIzUxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjE1LjAxLjAwI0JldGhhbmVjaG9sIGNobG9yaWRlIzUxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE1LjAyLjAwI0Vkcm9waG9uaXVtIGNobG9yaWRlIzUxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE1LjAzLjAwI1BoeXNvc3RpZ21pbmUgc2FsaWN5bGF0ZSM1MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNS4wNC4wMCNQaWxvY2FycGluZSBuaXRyYXRlIzUxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE2LjAwLjAwI0Nob2xpbmVyZ2ljIGJsb2NraW5nIGFnZW50cyM1MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNi4wMS4wMCNBdHJvcGluZSBzdWxmYXRlIzUxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE2LjAyLjAwI0Jlbnp0cm9waW5lIG1lc3lsYXRlIzUxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE2LjAzLjAwI1Byb2N5Y2xpZGluZSBoeWRyb2NobG9yaWRlIzUxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE2LjA0LjAwI1RyaWhleHlwaGVuaWR5bCBoeWRyb2NobG9yaWRlIzUxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjAwLjAwI1N5bXBhdGhvbWltZXRpYyBvciBhZHJlbmVyZ2ljIGRydWdzIzUxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjAxLjAwI0FsYnV0ZXJvbCM1MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wMi4wMCNCcmltb25pZGluZSB0YXJ0cmF0ZSM1MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wMy4wMCNFcGluZXBocmluZSM1MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wNC4wMCNFcGluZXBocmluZSBib3JhdGUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDUuMDAjRXBpbmVwaHJpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wNi4wMCNJc29wcm90ZXJlbm9sIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjA3LjAwI0lzb3Byb3RlcmVub2wgc3VsZmF0ZSM1MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wOC4wMCNMZXZhcnRlcmVub2wgYml0YXJ0cmF0ZSM1MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wOS4wMCNQaGVueWxwcm9wYW5vbGFtaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTguMDAuMDAjQWRyZW5lcmdpYyBibG9ja2luZyBhZ2VudHMjNTEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTguMDEuMDAjQXRlbm9sb2wjNTEuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTguMDIuMDAjRXNtb2xvbCBoeWRyb2NobG9yaWRlIzUxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjAzLjAwI05hZG9sb2wjNTEuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTguMDQuMDAjUGluZG9sb2wjNTEuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTguMDUuMDAjVGltb2xvbCBtYWxlYXRlIzUxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjEwLjAwI1BoZW50b2xhbWluZSBtZXN5bGF0ZSM1MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOS4wMC4wMCNTa2VsZXRhbCBtdXNjbGUgcmVsYXhhbnRzIGFuZCBjZW50cmFsbHkgYWN0aW5nIzUxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjE5LjAxLjAwI0JhY2xvZmVuIzUxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE5LjAyLjAwI0NobG9yem94YXpvbmUjNTEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTkuMDMuMDAjRGFudHJvbGVuZSBzb2RpdW0jNTEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTkuMDQuMDAjTWV0aG9jYXJiYW1vbCM1MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOS4wNS4wMCNDYXJpc29wcm9kb2wjNTEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMjAuMDAuMDAjTmV1cm9tdXNjdWxhciBibG9ja2luZyBhZ2VudHMjNTEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMjAuMDEuMDAjQXRyYWN1cml1bSBiZXN5bGF0ZSM1MS4xNS4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4yMC4wMi4wMCNNaXZhY3VyaXVtIGNoeWxvcmlkZSM1MS4xNS4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4yMC4wMy4wMCNSb2N1cm9uaXVtIGJyb21pZGUjNTEuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMjAuMDQuMDAjVmVjdXJvbml1bSBicm9taWRlIzUxLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE2LjAwLjAwLjAwI0RydWdzIGFmZmVjdGluZyB0aGUgcmVzcGlyYXRvcnkgdHJhY3QjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTUuMDAuMDAjQW50aWFzdGhtYXRpYyBkcnVncyM1MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNS4wMS4wMCNCaXRvbHRlcm9sIG1lc3lsYXRlIzUxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE1LjAyLjAwI05lZG9jcm9taWwgc29kaXVtIzUxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE1LjAzLjAwI1BpcmJ1dGVyb2wgYWNldGF0ZSM1MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNS4wNC4wMCNBbWlub3BoeWxsaW5lIzUxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE1LjA1LjAwI1RoZW9waHlsbGluZSM1MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wMC4wMCNBbnRpaGlzdGFtaW5lcyBvciBIMSBibG9ja2VycyM1MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wMS4wMCNBc3RlbWl6b2xlIzUxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE2LjAyLjAwI0NsZW1hc3RpbmUgZnVtYXJhdGUjNTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDMuMDAjRGV4Y2hsb3JwaGVuaXJhbWluZSBtYWxlYXRlIzUxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE2LjA0LjAwI0RpbWVuaHlkcmluYXRlIzUxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE2LjA1LjAwI0xldm9jYWJhc3RpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wNi4wMCNMb3JhdGlkaW5lIzUxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE2LjA3LjAwI1RlcmZlbmFkaW5lIzUxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE3LjAwLjAwI0RydWdzIHVzZWQgZm9yIHJlc3BpcmF0b3J5IHRyYWN0IGRpc29yZGVycyM1MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNy4wMS4wMCNBY2V0eWxjeXN0ZWluZSM1MS4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNy4wMi4wMCNCZXJhY3RhbnQjNTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTcuMDMuMDAjQnVkZXNvbmlkZSM1MS4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNy4wNC4wMCNDb2xmb3NjZXJpbCBwYWxtaXRhdGUjNTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTcuMDUuMDAjSXByYXRyb3BpdW0gYnJvbWlkZSM1MS4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNi4xOC4wMC4wMCNDb3VnaCBhbmQgY29sZCBhbmQgYW50aWFsbGVyZ3kgcHJvZHVjdHMjNTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTguMDEuMDAjQmVuem9uYXRhdGUjNTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTguMDIuMDAjR3VhaWZlbmVzaW4jNTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTkuMDAuMDAjTmFzYWwgZGVjb25nZXN0YW50cyM1MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNi4xOS4wMS4wMCNPeHltZXRhem9saW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTkuMDIuMDAjUHNldWRvZXBoZWRyaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTkuMDMuMDAjWHlsb21ldGF6b2xpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNi4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4wMC4wMC4wMCNEcnVncyBhZmZlY3RpbmcgdGhlIGdhc3Ryb2ludGVzdGluYWwgc3lzdGVtIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjE3LjE1LjAwLjAwI0FudGFjaWRzIzUxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE3LjE1LjAxLjAwI0NhbGNpdW0gY2FyYm9uYXRlIzUxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE1LjAyLjAwI01hZ2FsZHJhdGUjNTEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTUuMDMuMDAjTWFnbmVzaXVtIGh5ZHJveGlkZSM1MS4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNS4wNC4wMCNTb2RpdW0gYmljYXJib25hdGUgYW50YWNpZHMjNTEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTYuMDAuMDAjTGF4YXRpdmVzIzUxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE3LjE2LjAxLjAwI0Nhc2NhcmEgc2FncmFkYSM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wMi4wMCNEb2N1c2F0ZSBjYWxjaXVtIzUxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE2LjAzLjAwI0RvY3VzYXRlIHBvdGFzc2l1bSM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wNC4wMCNEb2N1c2F0ZSBzb2RpdW0jNTEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTYuMDUuMDAjTGFjdHVsb3NlIzUxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE2LjA2LjAwI01hZ25lc2l1bSBzdWxmYXRlIzUxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE2LjA3LjAwI1BzeWxsaXVtIGh5ZHJvcGhpbGljIG11Y2lsb2lkIzUxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE3LjAwLjAwI0FudGlkaWFycmhlYWxzIzUxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE3LjE3LjAxLjAwI0RpZmVub3hpbiBoeWRyb2NobG9yaWRlIzUxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE3LjAyLjAwI0xvcGVyYW1pZGUgaHlkcm9jaGxvcmlkZSM1MS4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNy4wMy4wMCNQYXJlZ29yaWMjNTEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTguMDAuMDAjQW50aWVtZXRpY3MgYW5kIGFudGluYXVzZWFudHMjNTEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTguMDEuMDAjRHJvbmFiaW5vbCM1MS4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOC4wMi4wMCNHcmFuaXNldHJvbiBoeWRyb2NobG9yaWRlIzUxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE4LjAzLjAwI01lY2xpemluZSBoeWRyb2NobG9yaWRlIzUxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE4LjA0LjAwI09uZGFuc2V0cm9uIGh5ZHJvY2hsb3JpZGUjNTEuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTguMDUuMDAjVHJpbWV0aG9iZW56YW1pZGUgaHlkcm9jaGxvcmlkZSM1MS4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wMC4wMCNBbnRpdWxjZXIgYW5kIHJlbGF0ZWQgZ2FzdHJvaW50ZXN0aW5hbCAoR0kpIGRydWdzIzUxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjAxLjAwI0NpbWV0aWRpbmUjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDIuMDAjRmFtb3RpZGluZSM1MS4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wMy4wMCNOaXphdGlkaW5lIzUxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjA0LjAwI1Jhbml0aWRpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wNS4wMCNDaXNhcHJpZGUjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDYuMDAjTGFuc29wcmF6b2xlIzUxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjA3LjAwI0xpYnJheCM1MS4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wOC4wMCNNaXNvcHJvc3RvbCM1MS4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4yMC4wMC4wMCNEcnVncyB1c2VkIGZvciBnYWxsYmxhZGRlciBkaXNlYXNlIzUxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE3LjIwLjAxLjAwI0NoZW5vZGlvbCM1MS4xNy4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4yMC4wMi4wMCNNb25vY3Rhbm9pbiM1MS4xNy4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4yMC4wMy4wMCNVcnNvZGlvbCM1MS4xNy4yMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4wMC4wMC4wMCNIb3Jtb25lcyBhbmQgaG9ybW9uZSBhbnRhZ29uaXN0cyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wMC4wMCNBbnRpZGlhYmV0aWMgYWdlbnRzIGFuZCBoeXBlcmdseWNlbWljIGFnZW50cyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wMS4wMCNBY2FyYm9zZSM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wMi4wMCNBY2V0b2hleGFtaWRlIzUxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE1LjAzLjAwI0NobG9ycHJvcGFtaWRlIzUxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE1LjA0LjAwI0dsaW1lcGlyaWRlIzUxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE1LjA1LjAwI0dsaXBpemlkZSM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wNi4wMCNJbnN1bGluIzUxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE1LjA4LjAwI0dsdWNhZ29uIzUxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE2LjAwLjAwI1RoeXJvaWQgYW5kIGFudGl0aHlyb2lkIGRydWdzIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjE2LjAxLjAwI0xldm90aHlyb3hpbmUgc29kaXVtIzUxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE2LjAyLjAwI0xpb3RoeXJvbmluZSBzb2RpdW0jNTEuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTYuMDMuMDAjTGlvdHJpeCM1MS4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNi4wNC4wMCNUaHlyb3Ryb3BpbiM1MS4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNi4wNS4wMCNNZXRoaW1hem9sZSM1MS4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNi4wNi4wMCNQcm9weWx0aGlvdXJhY2lsIzUxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjAwLjAwI0NvcnRpY29zdGVyb2lkcyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wMS4wMCNCZXRhbWV0aGFzb25lIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjAyLjAwI0NvcnRpY290cm9waW4jNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDMuMDAjQ29zeW50cm9waW4jNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDQuMDAjRGV4YW1ldGhhc29uZSM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wNS4wMCNGbHVuaXNvbGlkZSM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wNi4wMCNIeWRyb2NvcnRpc29uZSM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wNy4wMCNNZXRoeWxwcmVkbmlzb2xvbmUjNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDguMDAjUHJlZG5pc29sb25lIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjA5LjAwI1RyaWFtY2lub2xvbmUjNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTguMDAuMDAjRXN0cm9nZW5zIGFuZCBwcm9nZXN0aW5zIGFuZCBpbnRlcm5hbCBjb250cmFjZXB0aXZlcyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOC4wMS4wMCNDaGxvcm90cmlhbmlzZW5lIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjAyLjAwI0VzdHJvbmUjNTEuMTguMTguMDAuMDAKLXVuc3BzYzcjNTEuMTguMTguMDMuMDAjRXN0cm9nZW5zIGNvbmp1Z2F0ZWQjNTEuMTguMTguMDAuMDAKLXVuc3BzYzcjNTEuMTguMTguMDQuMDAjRXN0cm9waXBhdGUjNTEuMTguMTguMDAuMDAKLXVuc3BzYzcjNTEuMTguMTguMDUuMDAjTGV2b25vcmdlc3RyZWwjNTEuMTguMTguMDAuMDAKLXVuc3BzYzcjNTEuMTguMTguMDYuMDAjTWVnZXN0cm9sIGFjZXRhdGUjNTEuMTguMTguMDAuMDAKLXVuc3BzYzcjNTEuMTguMTguMDcuMDAjRXRoaW55bCBlc3RyYWRpb2wjNTEuMTguMTguMDAuMDAKLXVuc3BzYzcjNTEuMTguMTguMDguMDAjTWVzdHJhbm9sIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE5LjAwLjAwI0dvbmFkb3Ryb3BpYyBob3Jtb25lcyBhbmQgb3ZhcmlhbiBzdGltdWxhbnRzIGFuZCBpbmhpYml0b3JzIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjE5LjAxLjAwI0Nob3Jpb25pYyBnb25hZG90cm9waW4jNTEuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTkuMDIuMDAjRGFuYXpvbCM1MS4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wMy4wMCNHb25hZG9yZWxpbiBhY2V0YXRlIzUxLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE5LjA0LjAwI0hpc3RyZWxpbiBhY2V0YXRlIzUxLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE5LjA1LjAwI01lbm90cm9waW5zIzUxLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE5LjA2LjAwI1Vyb2ZvbGxpdHJvcGluIzUxLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE4LjIwLjAwLjAwI0FuZHJvZ2VucyBhbmQgYW5kcm9nZW4gaW5oaWJpdG9ycyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMC4wMS4wMCNGaW5hc3RlcmlkZSM1MS4xOC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMC4wMi4wMCNUZXN0b3N0ZXJvbmUjNTEuMTguMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjAuMDMuMDAjVGVzdG9zdGVyb25lIGN5cGlvbmF0ZSM1MS4xOC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMC4wNC4wMCNUZXN0b3N0ZXJvbmUgZW5hbnRoYXRlIzUxLjE4LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIwLjA1LjAwI1Rlc3Rvc3Rlcm9uZSBwcm9waW9uYXRlIzUxLjE4LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIxLjAwLjAwI1Bvc3RlcmlvciBwaXR1aXRhcnkgaG9ybW9uZXMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjEuMDEuMDAjRGVzbW9wcmVzc2luIGFjZXRhdGUjNTEuMTguMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjEuMDIuMDAjVmFzb3ByZXNzaW4jNTEuMTguMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjIuMDAuMDAjRHJ1Z3MgZm9yIGluZHVjaW5nIGxhYm9yIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIyLjAxLjAwI0Rpbm9wcm9zdG9uZSM1MS4xOC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMi4wMi4wMCNNZXRoeWxlcmdvbm92aW5lIG1hbGVhdGUjNTEuMTguMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjIuMDMuMDAjT3h5dG9jaW4jNTEuMTguMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjMuMDAuMDAjR3Jvd3RoIGhvcm1vbmVzIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIzLjAxLjAwI1NvbWF0cmVtIzUxLjE4LjIzLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIzLjAyLjAwI1NvbWF0cm9waW4jNTEuMTguMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDAuMDAjQ2FsY2l1bSBzYWx0cyBhbmQgY2FsY2l1bSByZWd1bGF0b3JzIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjAxLjAwI0NhbGNpdW0gY2hsb3JpZGUjNTEuMTguMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDIuMDAjQ2FsY2l1bSBjaXRyYXRlIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjAzLjAwI0NhbGNpdW0gZ2x1Y29uYXRlIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjA0LjAwI0NhbGNpdW0gbGFjdGF0ZSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wNS4wMCNEaWJhc2UgY2FsY2l1bSBwaG9zcGhhdGUjNTEuMTguMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDYuMDAjQWxlbmRyb25hdGUgc29kaXVtIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjA3LjAwI0NhbGNpdG9uaW4jNTEuMTguMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDguMDAjQ2VsbHVsb3NlIHNvZGl1bSBwaG9zcGhhdGUjNTEuMTguMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDkuMDAjR2FsbGl1bSBuaXRyYXRlIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE5LjAwLjAwLjAwI0FnZW50cyBhZmZlY3Rpbmcgd2F0ZXIgYW5kIGVsZWN0cm9seXRlcyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNS4wMC4wMCNEaXVyZXRpY3MjNTEuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDEuMDAjQ2hsb3JvdGhpYXppZGUjNTEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDIuMDAjQ2hsb3J0aGFsaWRvbmUjNTEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDMuMDAjTWVudG9sYXpvbmUjNTEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDQuMDAjQnVtZXRhbmlkZSM1MS4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNS4wNS4wMCNFdGhhY3J5bmF0ZSBzb2RpdW0jNTEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDYuMDAjQW1pbG9yaWRlIGh5ZHJvY2hsb3JpZGUjNTEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDcuMDAjU3Bpcm9ub2xhY3RvbmUjNTEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDguMDAjVHJpYW10ZXJlbmUjNTEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDkuMDAjTWFubml0b2wjNTEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTYuMDAuMDAjRWxlY3Ryb2x5dGVzIzUxLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE5LjE2LjAxLjAwI0RleHRyb3NlIzUxLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE2LjAyLjAwI1NvZGl1bSBjaGxvcmlkZSBlbGVjdHJvbHl0ZXMjNTEuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTcuMDAuMDAjQWxrYWxpbml6aW5nIGFnZW50cyM1MS4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNy4wMS4wMCNUcm9tZXRoYW1pbmUjNTEuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTguMDAuMDAjUG90YXNzaXVtIHNhbHRzIzUxLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE5LjE4LjAxLjAwI1BvdGFzc2l1bSBiaWNhcmJvbmF0ZSM1MS4xOS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOS4xOC4wMi4wMCNQb3Rhc3NpdW0gY2hsb3JpZGUjNTEuMTkuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTguMDMuMDAjUG90YXNzaXVtIGdsdWNvbmF0ZSM1MS4xOS4xOC4wMC4wMAotdW5zcHNjNyM1MS4yMC4wMC4wMC4wMCNJbW11bm9tb2R1bGF0aW5nIGRydWdzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjIwLjE1LjAwLjAwI0ltbXVub3N1cHByZXNzYW50cyM1MS4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNS4wMS4wMCNBemF0aGlvcHJpbmUjNTEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTUuMDIuMDAjQ3ljbG9zcG9yaW5lIzUxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE1LjAzLjAwI015Y29waGVub2xhdGUgbW9mZXRpbCM1MS4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNS4wNC4wMCNUYWNyb2xpbXVzIzUxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjAwLjAwI1ZhY2NpbmVzIzUxLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjAxLjAwI0FudGhyYXggYW50aWdlbiM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wMi4wMCNCcnVjZWxsYSBhbnRpZ2VuIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjAzLjAwI0Nob2xlcmEjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDQuMDAjRGlwaHRlcmlhIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjA1LjAwI0VuY2VwaGFsaXRpcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wNi4wMCNIZW1vcGhpbHVzIGluZmx1ZW56YWUjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDcuMDAjSGVwYXRpdGlzIGIjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDguMDAjSW5mbHVlbnphIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjA5LjAwI01lYXNsZXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTAuMDAjTWVuaW5nb2NvY2N1cyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xMS4wMCNNb3JiaWxsaSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xMi4wMCNNdW1wcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xMy4wMCNQYXJvdGl0aXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTQuMDAjUGVydHVzc2lzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjE1LjAwI1BuZXVtb2NvY2N1cyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xNi4wMCNQb2xpb215ZWxpdGlzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjE3LjAwI1JhYmllcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xOC4wMCNSb3RhIHZpcnVzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjE5LjAwI1J1YmVsbGEjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMjAuMDAjU21hbGxwb3gjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMjEuMDAjVGV0YW51cyB0b3hvaWQjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMjIuMDAjVHViZXJjdWxvc2lzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjIzLjAwI1R5cGhvaWQjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMjQuMDAjVmFyaWNlbGxhIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjI1LjAwI1llbGxvdyBmZXZlciM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4yNi4wMCNIZXBhdGl0aXMgYSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4wMC4wMC4wMCNNaXNjZWxsYW5lb3VzIGRydWcgY2F0ZWdvcmllcyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNS4wMC4wMCNBbnRpZ291dCBkcnVncyM1MS4yMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNS4wMS4wMCNBbGxvcHVyaW5vbCM1MS4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNS4wMi4wMCNDb2xjaGljaW5lIzUxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE1LjAzLjAwI1Byb2JlbmVjaWQjNTEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTUuMDQuMDAjU3VsZmlucHlyYXpvbmUjNTEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDAuMDAjQW50aWRvdGVzIzUxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjAxLjAwI0RlZmVyb3hhbWluZSBtZXN5bGF0ZSM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wMi4wMCNEZXhyYXpveGFuZSM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wMy4wMCNEaWdveGluIGltbXVuZSBmYWIjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDQuMDAjRGltZXJjYXByb2wjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDUuMDAjRWRldGF0ZSBkaXNvZGl1bSM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wNi4wMCNGbHVtYXplbmlsIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjA3LjAwI0lwZWNhYyM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wOC4wMCNQZW5pY2lsbGFtaW5lIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjA5LjAwI1Byb3RhbWluZSBzdWxmYXRlIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjEwLjAwI1NvZGl1bSBwb2x5c3R5cmVuZSBzdWxmb25hdGUjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMTEuMDAjVHJpZW50aW5lIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE3LjAwLjAwI051dHJpdGlvdXMgZm9vZCM1MS4yMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNy4wMS4wMCNSZXNpZHVlIG9mIG1haXplIGdlcm0jNTEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTguMDAuMDAjQW5hZXN0aGV0aWMgZHJ1Z3MjNTEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTguMDEuMDAjQ2hsb3JvZm9ybSM1MS4yMS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4wMC4wMC4wMC4wMCNEb21lc3RpYyBBcHBsaWFuY2VzIGFuZCBTdXBwbGllcyBhbmQgQ29uc3VtZXIgRWxlY3Ryb25pYyBQcm9kdWN0cyM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMC4wMC4wMC4wMCNGbG9vciBjb3ZlcmluZ3MjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDAuMDAjUnVncyBhbmQgbWF0cyM1Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wMS4wMCNPcmllbnRhbCBydWdzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjAyLjAwI0FyZWEgcnVncyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wMy4wMCNXb29sIHJ1Z3MjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDQuMDAjQ290dG9uIHJ1Z3MjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDUuMDAjU3ludGhldGljIHJ1Z3MjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDYuMDAjQnJhaWRlZCBydWdzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjA3LjAwI0JhdGggbWF0cyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wOC4wMCNEb29yIG1hdHMjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDkuMDAjRGVjb3JhdGl2ZSBtYXRzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjEwLjAwI0FudGkgZmF0aWd1ZSBtYXRzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjExLjAwI1J1YmJlciBvciB2aW55bCBtYXRzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjEyLjAwI0NoYWlyIG1hdCM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4xMy4wMCNDYXJwZXQgcHJvdGVjdG9yIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjAwLjAwLjAwI0FjY29tbW9kYXRpb24gZnVybml0dXJlIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjAwLjAwI0Z1cm5pdHVyZSM1Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wMS4wMCNTb2ZhcyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wMi4wMCNTdGFuZHMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDMuMDAjQm9va2Nhc2VzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjA0LjAwI0VudGVydGFpbm1lbnQgY2VudGVycyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wNS4wMCNGdXRvbnMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDYuMDAjQ2hhaXJzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjA3LjAwI0NvYXQgcmFja3MjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDguMDAjV2FsbCByYWNrcyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wOS4wMCNNYXR0cmVzc2VzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjEwLjAwI0NvdHMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTEuMDAjQmVkcyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4xMi4wMCNGb290IHN0b29scyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4xMy4wMCNUYWJsZXMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTQuMDAjQ2hlc3RzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjE1LjAwI1N0b29scyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4xNi4wMCNEcmVzc2VycyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4xNy4wMCNQYXJ0aXRpb25zIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE2LjAwLjAwI091dGRvb3IgZnVybml0dXJlIzUyLjExLjAwLjAwLjAwCi11bnNwc2M3IzUyLjExLjE2LjAxLjAwI091dGRvb3IgY2hhaXJzIzUyLjExLjE2LjAwLjAwCi11bnNwc2M3IzUyLjExLjE2LjAyLjAwI091dGRvb3IgdGFibGVzIG9yIHBpY25pYyB0YWJsZXMjNTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTYuMDMuMDAjT3V0ZG9vciBzd2luZ3MjNTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTYuMDQuMDAjT3V0ZG9vciBiZW5jaGVzIzUyLjExLjE2LjAwLjAwCi11bnNwc2M3IzUyLjExLjE2LjA1LjAwI091dGRvb3IgdW1icmVsbGFzIzUyLjExLjE2LjAwLjAwCi11bnNwc2M3IzUyLjExLjE3LjAwLjAwI09mZmljZSBmdXJuaXR1cmUjNTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTcuMDEuMDAjQ3JlZGVuemFzIzUyLjExLjE3LjAwLjAwCi11bnNwc2M3IzUyLjExLjE3LjAzLjAwI0Rlc2tzIzUyLjExLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEyLjAwLjAwLjAwI0JlZGNsb3RoZXMgYW5kIHRhYmxlIGFuZCBraXRjaGVuIGxpbmVuIGFuZCB0b3dlbHMjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDAuMDAjQmVkY2xvdGhlcyM1Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wMS4wMCNRdWlsdHMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDIuMDAjQ29tZm9ydGVycyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wMy4wMCNDb21mb3J0ZXIgY292ZXJzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjA0LjAwI01hdHRyZXNzIGNvdmVycyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wNS4wMCNQaWxsb3dzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjA2LjAwI01hdHRyZXNzIHBhZHMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDcuMDAjRmVhdGhlcmJlZHMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDguMDAjQmxhbmtldHMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDkuMDAjU2hlZXRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjEwLjAwI0R1c3QgcnVmZmxlcyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4xMS4wMCNEdXZldHMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMTIuMDAjUGlsbG93IGNhc2VzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjEzLjAwI0JlZCBzcHJlYWRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjAwLjAwI1RhYmxlIGFuZCBraXRjaGVuIGxpbmVuIzUyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjAxLjAwI0Rpc2ggdG93ZWxzIzUyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjAyLjAwI05hcGtpbnMjNTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTYuMDMuMDAjVGFibGUgcnVubmVycyM1Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wNC4wMCNUYWJsZSBjbG90aHMjNTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTYuMDUuMDAjRG9tZXN0aWMgb3ZlbiBtaXRzIG9yIHBvdCBob2xkZXJzIzUyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjA2LjAwI1BsYWNlIG1hdHMjNTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTYuMDcuMDAjVGFibGUgc2tpcnRzIzUyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE3LjAwLjAwI1Rvd2VscyM1Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNy4wMS4wMCNCYXRoIHRvd2VscyM1Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNy4wMi4wMCNCZWFjaCB0b3dlbHMjNTIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTcuMDMuMDAjV2FzaCBjbG90aHMjNTIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTcuMDQuMDAjSGFuZCB0b3dlbHMjNTIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMDAuMDAuMDAjV2luZG93IHRyZWF0bWVudHMjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTUuMDAuMDAjQ3VydGFpbnMgYW5kIGRyYXBlcmllcyM1Mi4xMy4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNS4wMS4wMCNDdXJ0YWlucyM1Mi4xMy4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNS4wMy4wMCNEcmFwZXJpZXMjNTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTYuMDAuMDAjQmxpbmRzIGFuZCBzaGFkZXMjNTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTYuMDEuMDAjVmVuZXRpYW4gYmxpbmRzIzUyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE2LjAyLjAwI1JvbGwgdXAgc2hhZGVzIzUyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE2LjAzLjAwI0ludGVyaW9yIHNodXR0ZXJzIzUyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE2LjA0LjAwI1ZlcnRpY2FsIGJsaW5kcyM1Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNy4wMC4wMCNXaW5kb3cgdHJlYXRtZW50IGFjY2Vzc29yaWVzIGFuZCBoYXJkd2FyZSM1Mi4xMy4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNy4wMS4wMCNWYWxhbmNlcyM1Mi4xMy4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNy4wMi4wMCNDdXJ0YWluIHJvZHMjNTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTcuMDMuMDAjUm9kIGZpbmlhbHMjNTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTcuMDQuMDAjQ3VydGFpbiByaW5ncyBvciBjbGlwcyM1Mi4xMy4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNC4wMC4wMC4wMCNEb21lc3RpYyBhcHBsaWFuY2VzIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjAwLjAwI0RvbWVzdGljIGtpdGNoZW4gYXBwbGlhbmNlcyM1Mi4xNC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wMS4wMCNEb21lc3RpYyByZWZyaWdlcmF0b3JzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjAyLjAwI0RvbWVzdGljIG1pY3Jvd2F2ZSBvdmVucyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wMy4wMCNEb21lc3RpYyBnYXJiYWdlIGRpc3Bvc2FscyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wNC4wMCNEb21lc3RpYyByYW5nZXMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDUuMDAjRG9tZXN0aWMgZGlzaCB3YXNoZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjA2LjAwI0RvbWVzdGljIGZyZWV6ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjA3LjAwI0RvbWVzdGljIHVwcmlnaHQgZnJlZXplcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDguMDAjRG9tZXN0aWMgY2hlc3QgZnJlZXplcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDkuMDAjRG9tZXN0aWMgY29tYmluYXRpb24gcmVmcmlnZXJhdG9yIGZyZWV6ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjEwLjAwI0RvbWVzdGljIHBvcnRhYmxlIGFpciBjb25kaXRpb25lcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTEuMDAjRG9tZXN0aWMganVpY2VycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xMi4wMCNEb21lc3RpYyB3YWZmbGUgaXJvbnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTMuMDAjRG9tZXN0aWMgZWxlY3RyaWMgY2FuIG9wZW5lcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTQuMDAjRG9tZXN0aWMgZm9vZCBwcm9jZXNzb3JzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjE1LjAwI0RvbWVzdGljIHRyYXNoIGNvbXBhY3RvcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTYuMDAjRG9tZXN0aWMgZGVlcCBmcnllcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTcuMDAjRG9tZXN0aWMgcG9wY29ybiBwb3BwZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjE4LjAwI0RvbWVzdGljIGJyZWFkIG1ha2luZyBtYWNoaW5lcyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xOS4wMCNEb21lc3RpYyBjb252ZWN0aW9uYWwgb3ZlbnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjAuMDAjRG9tZXN0aWMgbWl4ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjIxLjAwI0RvbWVzdGljIHRvYXN0ZXIgb3ZlbnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjIuMDAjRG9tZXN0aWMgdG9hc3RlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjMuMDAjRG9tZXN0aWMgZWxlY3RyaWNhbCBrZXR0bGVzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjI0LjAwI0RvbWVzdGljIGJsZW5kZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjI1LjAwI0RvbWVzdGljIGhvdCBwbGF0ZXMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjYuMDAjRG9tZXN0aWMgY29mZmVlIG1ha2VycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yNy4wMCNEb21lc3RpYyBlbGVjdHJpYyBrbml2ZXMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjguMDAjRG9tZXN0aWMgZWxlY3RyaWMgd29rcyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yOS4wMCNEb21lc3RpYyBjb2ZmZWUgZ3JpbmRlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzAuMDAjUGFydHMgb2YgZGlzaHdhc2hpbmcgbWFjaGluZXMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzEuMDAjRG9tZXN0aWMgZm9vZCBjaG9wcGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4zMi4wMCNEb21lc3RpYyBlbGVjdHJpYyBza2lsbGV0cyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4zMy4wMCNEb21lc3RpYyBlbGVjdHJpYyBncmlkZGxlcyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4zNC4wMCNEb21lc3RpYyBlbGVjdHJpYyBzYW5kd2ljaCBtYWtlciM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4zNS4wMCNEb21lc3RpYyBpbmRvb3IgZWxlY3RyaWMgZ3JpbGxzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjM2LjAwI0RvbWVzdGljIHBpemVsbGUgb3IgY29va2llIG1ha2VyIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjM3LjAwI0RvbWVzdGljIGNyb2NrIHBvdCM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNi4wMC4wMCNEb21lc3RpYyBsYXVuZHJ5IGFwcGxpYW5jZXMgYW5kIHN1cHBsaWVzIzUyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE0LjE2LjAxLjAwI0RvbWVzdGljIGNsb3RoZXMgd2FzaGVycyM1Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNi4wMi4wMCNEb21lc3RpYyB0dW1ibGUgZHJ5ZXJzIzUyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE2LjAzLjAwI0RvbWVzdGljIGNsb3RoaW5nIGlyb25zIzUyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE2LjA0LjAwI0Zvb3R3ZWFyIGRyeWVycyM1Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNi4wNS4wMCNMYXVuZHJ5IGhhbXBlcnMjNTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTYuMDYuMDAjTGF1bmRyeSBiYXNrZXRzIzUyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE3LjAwLjAwI0RvbWVzdGljIGJhdGggYXBwbGlhbmNlcyM1Mi4xNC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNy4wMS4wMCNEb21lc3RpYyBlbGVjdHJpYyB0b290aGJydXNoZXMjNTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTcuMDMuMDAjRG9tZXN0aWMgaGFpciBkcnllcnMjNTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTcuMDQuMDAjRG9tZXN0aWMgZWxlY3RyaWMgcmF6b3JzIzUyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE3LjA1LjAwI1BhcnRzIG9mIHNoYXZlcnMgb3IgaGFpciByZW1vdmVycyM1Mi4xNC4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNy4wNi4wMCNOYWlsIGRyeWVycyM1Mi4xNC4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xOC4wMC4wMCNPdGhlciBkb21lc3RpYyBob3VzZWhvbGQgYXBwbGlhbmNlcyM1Mi4xNC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xOC4wMS4wMCNEb21lc3RpYyBzZXdpbmcgbWFjaGluZXMjNTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTguMDIuMDAjRG9tZXN0aWMgc3BhY2UgaGVhdGVycyM1Mi4xNC4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xOC4wMy4wMCNEb21lc3RpYyBlbGVjdHJpYyBibGFua2V0cyM1Mi4xNC4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4wMC4wMC4wMCNEb21lc3RpYyBraXRjaGVud2FyZSM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNS4wMC4wMCNEb21lc3RpYyBkaXNwb3NhYmxlIGtpdGNoZW53YXJlIzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjAxLjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgY29va3dhcmUjNTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTUuMDIuMDAjRG9tZXN0aWMgZGlzcG9zYWJsZSBkaXNoZXMjNTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTUuMDMuMDAjRG9tZXN0aWMgZGlzcG9zYWJsZSBmbGF0d2FyZSM1Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNS4wNC4wMCNEb21lc3RpYyBkaXNwb3NhYmxlIGN1cHMgb3IgZ2xhc3NlcyBvciBsaWRzIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjA1LjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgc3RpcnJlcnMjNTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTUuMDYuMDAjRG9tZXN0aWMgZGlzcG9zYWJsZSBmb29kIGNvbnRhaW5lcnMjNTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTUuMDcuMDAjRG9tZXN0aWMgZGlzcG9zYWJsZSBkcmlua2luZyBzdHJhd3MjNTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDAuMDAjRG9tZXN0aWMga2l0Y2hlbiB0b29scyBhbmQgdXRlbnNpbHMjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDEuMDAjRG9tZXN0aWMgcm9sbGluZyBwaW5zIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjAyLjAwI0RvbWVzdGljIG1peGluZyBib3dscyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wMy4wMCNEb21lc3RpYyBncmF0ZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjA0LjAwI0RvbWVzdGljIHN0cmFpbmVycyBvciBjb2xhbmRlcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDUuMDAjRG9tZXN0aWMgY2FuIG9yIGJvdHRsZSBvcGVuZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjA2LjAwI0RvbWVzdGljIGN1dHRpbmcgYm9hcmRzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjA3LjAwI0RvbWVzdGljIG1lYXN1cmluZyBjdXBzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjA4LjAwI0Jhc3RlcnMgb3IgYmFzdGluZyBicnVzaGVzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjA5LjAwI1ZlZ2V0YWJsZSBwZWVsZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTAuMDAjQ29va2llIGN1dHRlcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTEuMDAjRG9tZXN0aWMga2l0Y2hlbiB0b25ncyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xMi4wMCNEb21lc3RpYyBraXRjaGVuIHdpcmUgd2hpcHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTMuMDAjRG9tZXN0aWMgZm9vZCBzY3JhcGVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xNC4wMCNEb21lc3RpYyBjb29saW5nIHJhY2tzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjE1LjAwI0RvbWVzdGljIHBpenphIGN1dHRlcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTYuMDAjRG9tZXN0aWMga2l0Y2hlbiBzcGF0dWxhcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xNy4wMCNEb21lc3RpYyB3b29kZW4gc3Bvb25zIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjE4LjAwI0RvbWVzdGljIHdvb2RlbiBvdmVuIHBhZGRsZSM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xOS4wMCNEb21lc3RpYyBwYXN0cnkgYmxlbmRlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yMC4wMCNEb21lc3RpYyBzaWZ0ZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjEuMDAjRG9tZXN0aWMgY29va2llIHN0YW1wZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjIyLjAwI0RvbWVzdGljIHBhc3RyeSBkZWNvcmF0aW5nIGd1biM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yMy4wMCNEb21lc3RpYyBjb29raWUgcHJlc3MjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjQuMDAjRG9tZXN0aWMga25pZmUgc2hhcnBlbmVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yNS4wMCNEb21lc3RpYyBiaXNjdWl0IGN1dHRlcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjYuMDAjRG9tZXN0aWMgbWFuZG9saW4jNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjcuMDAjRG9tZXN0aWMgZ2FybGljIHByZXNzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjI4LjAwI0RvbWVzdGljIGVnZyBzbGljZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjkuMDAjRG9tZXN0aWMgZWdnIHNlcGFyYXRvciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zMC4wMCNEb21lc3RpYyBjaGVlc2Ugc2xpY2VyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjMxLjAwI0RvbWVzdGljIGZvb2QgbWlsbCM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zMi4wMCNEb21lc3RpYyBraXRjaGVuIGZ1bm5lbHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzMuMDAjRG9tZXN0aWMgZ2FybmlzaGluZyB0b29scyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zNC4wMCNEb21lc3RpYyBhcHBsZSBjb3JlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zNS4wMCNEb21lc3RpYyBtZWxvbiBvciBidXR0ZXIgYmFsbGVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjM2LjAwI0RvbWVzdGljIGZvb2Qgc2Nvb3BzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjM3LjAwI0RvbWVzdGljIHB1bXBraW4gY2FydmVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjM4LjAwI0RvbWVzdGljIHZlZ2V0YWJsZSBicnVzaCM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zOS4wMCNEb21lc3RpYyBlZ2cgYmVhdGVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQwLjAwI0RvbWVzdGljIHBhc3RhIGRyeWluZyByYWNrIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQxLjAwI0RvbWVzdGljIHdoaXBwZWQgY3JlYW0gbWFrZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDIuMDAjRG9tZXN0aWMgZG91Z2ggcHJlc3MjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDMuMDAjRG9tZXN0aWMgcmF2aW9saSBtYWtlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40NC4wMCNEb21lc3RpYyBtaXN0IHNwcmF5ZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDUuMDAjRG9tZXN0aWMgcGFzdHJ5IGJydXNoIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQ2LjAwI0RvbWVzdGljIGtpdGNoZW4gb3IgZGlldCBzY2FsZXMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDcuMDAjRG9tZXN0aWMga2l0Y2hlbiB0aW1lcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDguMDAjRG9tZXN0aWMga2l0Y2hlbiBvciBmb29kIHRoZXJtb21ldGVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40OS4wMCNEb21lc3RpYyBicmVhZCBzbGljaW5nIGd1aWRlIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjUwLjAwI0RvbWVzdGljIGRyYWluIGJvYXJkcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNy4wMC4wMCNEb21lc3RpYyBmbGF0d2FyZSBhbmQgY3V0bGVyeSM1Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNy4wMS4wMCNEb21lc3RpYyBzZXJ2aW5nIHV0ZW5zaWxzIzUyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE3LjAyLjAwI0RvbWVzdGljIGtuaXZlcyM1Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNy4wMy4wMCNEb21lc3RpYyBmb3JrcyM1Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNy4wNC4wMCNEb21lc3RpYyBzcG9vbnMjNTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDUuMDAjU3Bvb24gcmVzdHMjNTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDYuMDAjQ2hvcHN0aWNrcyM1Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wMC4wMCNEb21lc3RpYyBjb29rd2FyZSM1Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wMS4wMCNEb21lc3RpYyBkdXRjaCBvdmVucyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wMi4wMCNEb21lc3RpYyBmcnlpbmcgcGFucyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wMy4wMCNEb21lc3RpYyBzYXVjZXBhbnMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDQuMDAjRG9tZXN0aWMga2V0dGxlcyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wNS4wMCNEb21lc3RpYyB3b2tzIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjA2LjAwI0RvbWVzdGljIHN0ZWFtZXJzIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjA3LjAwI0RvbWVzdGljIHN0b2NrIHBvdHMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDguMDAjRG9tZXN0aWMgcHJlc3N1cmUgY29va2VycyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wOS4wMCNEb21lc3RpYyBzYXV0ZSBwYW5zIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjEwLjAwI0RvbWVzdGljIGNoYWZpbmcgZGlzaGVzIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjExLjAwI0RvbWVzdGljIGdyaWRkbGVzIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjEyLjAwI0RvbWVzdGljIGRvdWJsZSBib2lsZXJzIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjEzLjAwI0RvbWVzdGljIHNwbGF0dGVyIHNoaWVsZCM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wMC4wMCNEb21lc3RpYyBiYWtld2FyZSM1Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wMS4wMCNEb21lc3RpYyBtdWZmaW4gcGFucyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wMi4wMCNEb21lc3RpYyBiYWtpbmcgcGFucyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wMy4wMCNEb21lc3RpYyBjYWtlIG9yIHBpZSBwYW5zIzUyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjA0LjAwI0RvbWVzdGljIHJvYXN0aW5nIHBhbnMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDUuMDAjRG9tZXN0aWMgYmFraW5nIHNoZWV0cyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wNi4wMCNEb21lc3RpYyBicm9pbGluZyBwYW5zIzUyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjA3LjAwI0RvbWVzdGljIGJha2luZyBtb2xkcyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wOC4wMCNEb21lc3RpYyBwaXp6YSBwYW5zIzUyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjA5LjAwI0RvbWVzdGljIHRvcnRpbGxhIGJha2VycyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wMC4wMCNEb21lc3RpYyBkaXNoZXMgYW5kIHNlcnZpbmd3YXJlIGFuZCBzdG9yYWdlIGNvbnRhaW5lcnMjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDEuMDAjRG9tZXN0aWMgcGl0Y2hlcnMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDIuMDAjRG9tZXN0aWMgZm9vZCBzdG9yYWdlIGNvbnRhaW5lcnMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDMuMDAjRG9tZXN0aWMgcHVuY2ggYm93bHMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDQuMDAjRG9tZXN0aWMgcGxhdGVzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjA1LjAwI0RvbWVzdGljIHNhdWNlcnMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDYuMDAjRG9tZXN0aWMgdHJheXMgb3IgcGxhdHRlcnMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDcuMDAjRG9tZXN0aWMgc2VydmluZyBib3dscyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wOC4wMCNEb21lc3RpYyB0ZWEgb3IgY29mZmVlIHBvdHMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDkuMDAjRG9tZXN0aWMgc291cCBvciBzYWxhZCBib3dscyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4xMC4wMCNEb21lc3RpYyB2YWN1dW0gZmxhc2tzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjExLjAwI0lubmVycyBmb3IgdmFjY3VtIGZsYXNrcyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4xMi4wMCNJY2UgdHJheXMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMTMuMDAjU3BpY2Ugb3Igc2FsdCBvciBwZXBwZXIgc2hha2VycyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4xNC4wMCNDYXJhZmUgc2V0cyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4xNS4wMCNEb21lc3RpYyBjYWtlIHBsYXRlIHdpdGggZG9tZSM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMS4wMC4wMCNEb21lc3RpYyBkcmlua2luZyB1dGVuc2lscyM1Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMS4wMS4wMCNEb21lc3RpYyBjb2ZmZWUgb3IgdGVhIGN1cHMjNTIuMTUuMjEuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjEuMDIuMDAjRG9tZXN0aWMgZHJpbmtpbmcgZ2xhc3NlcyM1Mi4xNS4yMS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMS4wMy4wMCNEb21lc3RpYyBtdWdzIzUyLjE1LjIxLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIxLjA0LjAwI0RvbWVzdGljIHN0ZW13YXJlIzUyLjE1LjIxLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIyLjAwLjAwI0Rpc2h3YXNoaW5nIGFuZCBkaXNoIHN0b3JhZ2UgYWNjZXNzb3JpZXMjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjIuMDEuMDAjU2hlbGYgbGluZXIjNTIuMTUuMjIuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjIuMDIuMDAjRGlzaCBkcmFpbmVyIzUyLjE1LjIyLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIyLjAzLjAwI1NvYXAgZGlzcGVuc2luZyBicnVzaCM1Mi4xNS4yMi4wMC4wMAotdW5zcHNjNyM1Mi4xNi4wMC4wMC4wMCNDb25zdW1lciBlbGVjdHJvbmljcyM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wMC4wMCNBdWRpbyBhbmQgdmlzdWFsIGVxdWlwbWVudCM1Mi4xNi4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wMS4wMCNDb21wYWN0IGRpc2MgcGxheWVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wMi4wMCNDYXNzZXR0ZSBwbGF5ZXJzIG9yIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wMy4wMCNEaWdpdGFsIHZpZGVvIGRpc2MgcGxheWVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wNC4wMCNWaWRlbyBjYXNzZXR0ZSByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDUuMDAjVGVsZXZpc2lvbnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDYuMDAjSGVhZHBob25lcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wNy4wMCNDbG9jayByYWRpb3MjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDguMDAjTGFzZXIgZGlzYyBwbGF5ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjA5LjAwI1BvcnRhYmxlIHN0ZXJlbyBzeXN0ZW1zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjEwLjAwI0hvbWUgc3RlcmVvIHN5c3RlbXMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTEuMDAjUmFkaW9zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjEyLjAwI1NwZWFrZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjEzLjAwI0NvbWJpbmF0aW9uIHRlbGV2aXNpb24gdmlkZW8gY2Fzc2V0dGUgcmVjb3JkZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjE0LjAwI0hlYWRwaG9uZXMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTUuMDAjQ29tcGFjdCBkaXNrIHBsYXllcnMgb3IgcmVjb3JkZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjE2LjAwI0RpZ2l0YWwgdmlkZW8gZGlzayBwbGF5ZXJzIG9yIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xNy4wMCNFcXVhbGl6ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjE4LjAwI0dsb2JhbCBwb3NpdGlvbmluZyBzeXN0ZW0gcmVjZWl2ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjE5LjAwI0hlYWRwaG9uZXMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjAuMDAjTWljcm9waG9uZXMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjEuMDAjTXVsdGltZWRpYSByZWNlaXZlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjIuMDAjUmFkaW8gZnJlcXVlbmN5IHNjYW5uZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjIzLjAwI1JhZGlvIGZyZXF1ZW5jeSB0cmFuc21pdHRlcnNyZWNlaXZlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjQuMDAjUmFkaW8gcmVjZWl2ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjI1LjAwI1JlbW90ZSBjb250cm9sIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjI2LjAwI1NhdGVsbGl0ZSByZWNlaXZlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjcuMDAjU3Vid29vZmVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yOC4wMCNUZWxldmlzaW9ucyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yOS4wMCNWaWRlbyBjYXNzZXR0ZSBwbGF5ZXJzIG9yIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4zMC4wMCNWaWRlbyBtb25pdG9ycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4zMS4wMCNSYWRpbyBwaG9ub2dyYXBocyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4zMi4wMCNLYXJhb2tlIHN5c3RlbXMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzMuMDAjTWVnYXBob25lcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4zNC4wMCNJbnRlZ3JhdGVkIGNpcmN1dCBJQyBjaGlwIHJlY29yZGVyIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjM1LjAwI0RpZ2l0YWwgdm9pY2UgcmVjb3JkZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjM2LjAwI01pbmlkaXNjIHBsYXllcnMgb3IgcmVjb3JkZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE2LjAwLjAwI0F1ZGlvIHZpc3VhbCBlcXVpcG1lbnQgYWNjZXNzb3JpZXMjNTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTYuMDEuMDAjQ2Fzc2V0dGUgc3RvcmFnZSM1Mi4xNi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNi4wMi4wMCNBdWRpbyBvciB2aWRlbyBoZWFkIGNsZWFuZXJzIzUyLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE3LjAwLjAwLjAwI0RvbWVzdGljIHdhbGwgdHJlYXRtZW50cyM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNy4xMC4wMC4wMCNCYXRocm9vbSB3YWxsIHRyZWF0bWVudHMjNTIuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTcuMTAuMDEuMDAjSGFuZ2luZyB0b2lsZXRyeSBvcmdhbml6ZXIgb3Igc2hlbGYjNTIuMTcuMTAuMDAuMDAKLXVuc3BzYzcjNTMuMDAuMDAuMDAuMDAjQXBwYXJlbCBhbmQgTHVnZ2FnZSBhbmQgUGVyc29uYWwgQ2FyZSBQcm9kdWN0cyM1My4wMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4wMC4wMC4wMCNDbG90aGluZyM1My4wMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4xNS4wMC4wMCNTbGFja3MgYW5kIHRyb3VzZXJzIGFuZCBzaG9ydHMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTUuMDEuMDAjQm95cyBzbGFja3Mgb3IgdHJvdXNlcnMgb3Igc2hvcnRzIzUzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE1LjAyLjAwI01lbnMgc2xhY2tzIG9yIHRyb3VzZXJzIG9yIHNob3J0cyM1My4xMC4xNS4wMC4wMAotdW5zcHNjNyM1My4xMC4xNS4wMy4wMCNHaXJscyBzbGFja3Mgb3IgdHJvdXNlcnMgb3Igc2hvcnRzIzUzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE1LjA0LjAwI1dvbWVucyBzbGFja3Mgb3IgdHJvdXNlcnMgb3Igc2hvcnRzIzUzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE1LjA1LjAwI0luZmFudHMgc2xhY2tzIG9yIHRyb3VzZXJzIG9yIHNob3J0cyM1My4xMC4xNS4wMC4wMAotdW5zcHNjNyM1My4xMC4xNi4wMC4wMCNTaGlydHMgYW5kIGJsb3VzZXMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTYuMDEuMDAjQm95cyBzaGlydHMjNTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTYuMDIuMDAjTWVucyBzaGlydHMjNTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTYuMDMuMDAjR2lybHMgc2hpcnRzIG9yIGJsb3VzZXMjNTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTYuMDQuMDAjV29tZW5zIHNoaXJ0cyBvciBibG91c2VzIzUzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE2LjA1LjAwI0luZmFudHMgc2hpcnRzIG9yIGJsb3VzZXMjNTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTcuMDAuMDAjU3dlYXRlcnMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTcuMDEuMDAjQm95cyBzd2VhdGVycyM1My4xMC4xNy4wMC4wMAotdW5zcHNjNyM1My4xMC4xNy4wMi4wMCNNZW5zIHN3ZWF0ZXJzIzUzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE3LjAzLjAwI0dpcmxzIHN3ZWF0ZXJzIzUzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE3LjA0LjAwI1dvbWVucyBzd2VhdGVycyM1My4xMC4xNy4wMC4wMAotdW5zcHNjNyM1My4xMC4xNy4wNS4wMCNJbmZhbnRzIHN3ZWF0ZXJzIzUzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE4LjAwLjAwI0NvYXRzIGFuZCBqYWNrZXRzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjE4LjAxLjAwI0JveXMgY29hdHMgb3IgamFja2V0cyM1My4xMC4xOC4wMC4wMAotdW5zcHNjNyM1My4xMC4xOC4wMi4wMCNNZW5zIGNvYXRzIG9yIGphY2tldHMjNTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTguMDMuMDAjR2lybHMgY29hdHMgb3IgamFja2V0cyM1My4xMC4xOC4wMC4wMAotdW5zcHNjNyM1My4xMC4xOC4wNC4wMCNXb21lbnMgY29hdHMgb3IgamFja2V0cyM1My4xMC4xOC4wMC4wMAotdW5zcHNjNyM1My4xMC4xOC4wNS4wMCNJbmZhbnRzIGNvYXRzIG9yIGphY2tldHMjNTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTkuMDAuMDAjU3VpdHMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTkuMDEuMDAjQm95cyBzdWl0cyM1My4xMC4xOS4wMC4wMAotdW5zcHNjNyM1My4xMC4xOS4wMi4wMCNNZW5zIHN1aXRzIzUzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE5LjAzLjAwI0dpcmxzIHN1aXRzIzUzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE5LjA0LjAwI1dvbWVucyBzdWl0cyM1My4xMC4xOS4wMC4wMAotdW5zcHNjNyM1My4xMC4xOS4wNS4wMCNJbmZhbnRzIHN1aXRzIzUzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUzLjEwLjIwLjAwLjAwI0RyZXNzZXMgYW5kIHNraXJ0cyBhbmQgc2FyaXMgYW5kIGtpbW9ub3MjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjAuMDEuMDAjR2lybHMgZHJlc3NlcyBvciBza2lydHMgb3Igc2FyaXMgb3Iga2ltb25vcyM1My4xMC4yMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yMC4wMi4wMCNXb21lbnMgZHJlc3NlcyBvciBza2lydHMgb3Igc2FyaXMgb3Iga2ltb25vcyM1My4xMC4yMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yMC4wMy4wMCNJbmZhbnRzIGRyZXNzZXMgb3Igc2tpcnRzIG9yIHNhcmlzIG9yIGtpbW9ub3MjNTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjEuMDAuMDAjT3ZlcmFsbHMgYW5kIGNvdmVyYWxscyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yMS4wMS4wMCNCb3lzIG92ZXJhbGxzIG9yIGNvdmVyYWxscyM1My4xMC4yMS4wMC4wMAotdW5zcHNjNyM1My4xMC4yMS4wMi4wMCNNZW5zIG92ZXJhbGxzIG9yIGNvdmVyYWxscyM1My4xMC4yMS4wMC4wMAotdW5zcHNjNyM1My4xMC4yMS4wMy4wMCNHaXJscyBvdmVyYWxscyBvciBjb3ZlcmFsbHMjNTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjEuMDQuMDAjV29tZW5zIG92ZXJhbGxzIG9yIGNvdmVyYWxscyM1My4xMC4yMS4wMC4wMAotdW5zcHNjNyM1My4xMC4yMS4wNS4wMCNJbmZhbnRzIG92ZXJhbGxzIG9yIGNvdmVyYWxscyM1My4xMC4yMS4wMC4wMAotdW5zcHNjNyM1My4xMC4yMi4wMC4wMCNGb2xrbG9yaWMgY2xvdGhpbmcjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjIuMDEuMDAjQm95cyBmb2xrbG9yaWMgY2xvdGhpbmcjNTMuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjIuMDIuMDAjTWVucyBmb2xrbG9yaWMgY2xvdGhpbmcjNTMuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjIuMDMuMDAjR2lybHMgZm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIyLjA0LjAwI1dvbWVucyBmb2xrbG9yaWMgY2xvdGhpbmcjNTMuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjIuMDUuMDAjSW5mYW50cyBmb2xrbG9yaWMgY2xvdGhpbmcjNTMuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDAuMDAjVW5kZXJnYXJtZW50cyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yMy4wMS4wMCNVbmRlcnNoaXJ0cyM1My4xMC4yMy4wMC4wMAotdW5zcHNjNyM1My4xMC4yMy4wMi4wMCNTbGlwcyM1My4xMC4yMy4wMC4wMAotdW5zcHNjNyM1My4xMC4yMy4wMy4wMCNVbmRlcnBhbnRzIzUzLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjA0LjAwI0JyYXNzaWVyZXMjNTMuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDUuMDAjSW5mYW50IGRpYXBlcnMjNTMuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDYuMDAjQWR1bHQgZGlhcGVycyM1My4xMC4yMy4wMC4wMAotdW5zcHNjNyM1My4xMC4yMy4wNy4wMCNCb2R5IHNoYXBpbmcgZ2FybWVudHMjNTMuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjQuMDAuMDAjSG9zaWVyeSM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yNC4wMS4wMCNTdG9ja2luZ3MjNTMuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjQuMDIuMDAjU29ja3MjNTMuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjQuMDMuMDAjUGFudHkgaG9zZSM1My4xMC4yNC4wMC4wMAotdW5zcHNjNyM1My4xMC4yNC4wNC4wMCNUaWdodHMjNTMuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDAuMDAjQ2xvdGhpbmcgYWNjZXNzb3JpZXMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDEuMDAjQmVsdHMgb3Igc3VzcGVuZGVycyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4wMi4wMCNUaWVzIG9yIHNjYXJ2ZXMgb3IgbXVmZmxlcnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDMuMDAjSGF0cyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4wNC4wMCNHbG92ZXMgb3IgbWl0dGVucyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4wNS4wMCNVbWJyZWxsYXMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDYuMDAjU3dlYXQgYmFuZHMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDcuMDAjQ2xvdGhpbmcgaGFuZ2VycyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4wOC4wMCNBcm1iYW5kcyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4wOS4wMCNHYXJ0ZXJzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjEwLjAwI1Rhc3NsZXMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMTEuMDAjQmFuZGFubmFzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjEyLjAwI0hhbmRrZXJjaGllZnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMTMuMDAjSGVhZGJhbmRzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjE0LjAwI1BvY2tldCBwcm90ZWN0b3JzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjE1LjAwI0J1dHRvbiBjb3ZlcnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjYuMDAuMDAjTmlnaHR3ZWFyIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjI2LjAxLjAwI0JveXMgcGFqYW1hcyBvciBuaWdodHNoaXJ0cyM1My4xMC4yNi4wMC4wMAotdW5zcHNjNyM1My4xMC4yNi4wMi4wMCNNZW5zIHBhamFtYXMgb3IgbmlnaHRzaGlydHMjNTMuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjYuMDMuMDAjR2lybHMgcGFqYW1hcyBvciBuaWdodHNoaXJ0cyM1My4xMC4yNi4wMC4wMAotdW5zcHNjNyM1My4xMC4yNi4wNC4wMCNXb21lbnMgcGFqYW1hcyBvciBuaWdodHNoaXJ0cyM1My4xMC4yNi4wMC4wMAotdW5zcHNjNyM1My4xMC4yNi4wNS4wMCNJbmZhbnRzIHBhamFtYXMgb3IgbmlnaHRzaGlydHMjNTMuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjYuMDYuMDAjQmF0aCByb2JlcyM1My4xMC4yNi4wMC4wMAotdW5zcHNjNyM1My4xMC4yNy4wMC4wMCNVbmlmb3JtcyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yNy4wMS4wMCNNaWxpdGFyeSB1bmlmb3JtcyM1My4xMC4yNy4wMC4wMAotdW5zcHNjNyM1My4xMC4yNy4wMi4wMCNDdXN0b21zIHVuaWZvcm1zIzUzLjEwLjI3LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI3LjAzLjAwI1BvbGljZSB1bmlmb3JtcyM1My4xMC4yNy4wMC4wMAotdW5zcHNjNyM1My4xMC4yOC4wMC4wMCNTd2ltd2VhciM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yOC4wMS4wMCNNZW5zIHN3aW13ZWFyIzUzLjEwLjI4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI4LjAyLjAwI1dvbWVucyBzd2ltd2VhciM1My4xMC4yOC4wMC4wMAotdW5zcHNjNyM1My4xMC4yOC4wMy4wMCNCb3lzIHN3aW13ZWFyIzUzLjEwLjI4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI4LjA0LjAwI0dpcmxzIHN3aW13ZWFyIzUzLjEwLjI4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI4LjA1LjAwI0luZmFudHMgc3dpbXdlYXIjNTMuMTAuMjguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjkuMDAuMDAjQXRobGV0aWMgd2VhciM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yOS4wMS4wMCNXb21lbnMgYXRobGV0aWMgd2VhciM1My4xMC4yOS4wMC4wMAotdW5zcHNjNyM1My4xMC4yOS4wMi4wMCNNZW5zIGF0aGxldGljIHdlYXIjNTMuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjkuMDMuMDAjQm95cyBhdGhsZXRpYyB3ZWFyIzUzLjEwLjI5LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI5LjA0LjAwI0dpcmxzIGF0aGxldGljIHdlYXIjNTMuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMDAuMDAuMDAjRm9vdHdlYXIjNTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTUuMDAuMDAjQm9vdHMjNTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTUuMDEuMDAjTWVucyBib290cyM1My4xMS4xNS4wMC4wMAotdW5zcHNjNyM1My4xMS4xNS4wMi4wMCNXb21lbnMgYm9vdHMjNTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTUuMDMuMDAjQm95cyBib290cyM1My4xMS4xNS4wMC4wMAotdW5zcHNjNyM1My4xMS4xNS4wNC4wMCNHaXJscyBib290cyM1My4xMS4xNS4wMC4wMAotdW5zcHNjNyM1My4xMS4xNS4wNS4wMCNJbmZhbnRzIGJvb3RzIzUzLjExLjE1LjAwLjAwCi11bnNwc2M3IzUzLjExLjE2LjAwLjAwI1Nob2VzIzUzLjExLjAwLjAwLjAwCi11bnNwc2M3IzUzLjExLjE2LjAxLjAwI01lbnMgc2hvZXMjNTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTYuMDIuMDAjV29tZW5zIHNob2VzIzUzLjExLjE2LjAwLjAwCi11bnNwc2M3IzUzLjExLjE2LjAzLjAwI0JveXMgc2hvZXMjNTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTYuMDQuMDAjR2lybHMgc2hvZXMjNTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTYuMDUuMDAjSW5mYW50cyBzaG9lcyM1My4xMS4xNi4wMC4wMAotdW5zcHNjNyM1My4xMS4xNy4wMC4wMCNTbGlwcGVycyM1My4xMS4wMC4wMC4wMAotdW5zcHNjNyM1My4xMS4xNy4wMS4wMCNNZW5zIHNsaXBwZXJzIzUzLjExLjE3LjAwLjAwCi11bnNwc2M3IzUzLjExLjE3LjAyLjAwI1dvbWVucyBzbGlwcGVycyM1My4xMS4xNy4wMC4wMAotdW5zcHNjNyM1My4xMS4xNy4wMy4wMCNCb3lzIHNsaXBwZXJzIzUzLjExLjE3LjAwLjAwCi11bnNwc2M3IzUzLjExLjE3LjA0LjAwI0dpcmxzIHNsaXBwZXJzIzUzLjExLjE3LjAwLjAwCi11bnNwc2M3IzUzLjExLjE3LjA1LjAwI0luZmFudHMgc2xpcHBlcnMjNTMuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTguMDAuMDAjU2FuZGFscyM1My4xMS4wMC4wMC4wMAotdW5zcHNjNyM1My4xMS4xOC4wMS4wMCNNZW5zIHNhbmRhbHMjNTMuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTguMDIuMDAjV29tZW5zIHNhbmRhbHMjNTMuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTguMDMuMDAjQm95cyBzYW5kYWxzIzUzLjExLjE4LjAwLjAwCi11bnNwc2M3IzUzLjExLjE4LjA0LjAwI0dpcmxzIHNhbmRhbHMjNTMuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTguMDUuMDAjSW5mYW50cyBzYW5kYWxzIzUzLjExLjE4LjAwLjAwCi11bnNwc2M3IzUzLjExLjE5LjAwLjAwI0F0aGxldGljIGZvb3R3ZWFyIzUzLjExLjAwLjAwLjAwCi11bnNwc2M3IzUzLjExLjE5LjAxLjAwI01lbnMgYXRobGV0aWMgZm9vdHdlYXIjNTMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTkuMDIuMDAjV29tZW5zIGF0aGxldGljIGZvb3R3ZWFyIzUzLjExLjE5LjAwLjAwCi11bnNwc2M3IzUzLjExLjE5LjAzLjAwI0JveXMgYXRobGV0aWMgZm9vdHdlYXIjNTMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTkuMDQuMDAjR2lybHMgYXRobGV0aWMgZm9vdHdlYXIjNTMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTkuMDUuMDAjSW5mYW50cyBhdGhsZXRpYyBmb290d2VhciM1My4xMS4xOS4wMC4wMAotdW5zcHNjNyM1My4xMS4yMC4wMC4wMCNTaG9lIGFjY2Vzc29yaWVzIzUzLjExLjAwLjAwLjAwCi11bnNwc2M3IzUzLjExLjIwLjAxLjAwI1Nob2Vob3JucyM1My4xMS4yMC4wMC4wMAotdW5zcHNjNyM1My4xMS4yMC4wMi4wMCNTaG9lbGFjZXMjNTMuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMDAuMDAuMDAjTHVnZ2FnZSBhbmQgaGFuZGJhZ3MgYW5kIHBhY2tzIGFuZCBjYXNlcyM1My4wMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMi4xNS4wMC4wMCNMdWdnYWdlIzUzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEyLjE1LjAxLjAwI0dhcm1lbnQgYmFncyM1My4xMi4xNS4wMC4wMAotdW5zcHNjNyM1My4xMi4xNS4wMi4wMCNMdWdnYWdlIHNldHMjNTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTUuMDMuMDAjSW5kaXZpZHVhbCBsdWdnYWdlIHBpZWNlcyM1My4xMi4xNS4wMC4wMAotdW5zcHNjNyM1My4xMi4xNi4wMC4wMCNQdXJzZXMgYW5kIGhhbmRiYWdzIGFuZCBiYWdzIzUzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjAxLjAwI0hhbmRiYWdzIG9yIHB1cnNlcyM1My4xMi4xNi4wMC4wMAotdW5zcHNjNyM1My4xMi4xNi4wMi4wMCNEdWZmbGUgYmFncyM1My4xMi4xNi4wMC4wMAotdW5zcHNjNyM1My4xMi4xNi4wMy4wMCNCYWNrcGFja3MjNTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDQuMDAjRXllZ2xhc3MgY2FzZXMjNTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDUuMDAjQ29pbiBwdXJzZXMjNTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDYuMDAjTGlwc3RpY2sgY2FzZXMjNTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDcuMDAjQ2lnYXIgY2FzZSM1My4xMi4xNi4wMC4wMAotdW5zcHNjNyM1My4xMi4xNy4wMC4wMCNCdXNpbmVzcyBjYXNlcyM1My4xMi4wMC4wMC4wMAotdW5zcHNjNyM1My4xMi4xNy4wMS4wMCNCcmllZmNhc2VzIzUzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE3LjAyLjAwI0F0dGFjaGVzIzUzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE3LjA0LjAwI1BvcnRmb2xpb3MjNTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTcuMDUuMDAjRXF1aXBtZW50IGNhc2VzIzUzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE3LjA2LjAwI0NvbXB1dGVyIGJhZ3MjNTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTguMDAuMDAjVHJhdmVsIGtpdHMgYW5kIGFjY2Vzc29yaWVzIzUzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEyLjE4LjAxLjAwI1RyYXZlbCBraXRzIzUzLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE4LjAyLjAwI1RyYXZlbCBjYXJ0cyM1My4xMi4xOC4wMC4wMAotdW5zcHNjNyM1My4xMi4xOC4wMy4wMCNHYXJtZW50IGJydXNoZXMjNTMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTguMDQuMDAjTWFrZXVwIG9yIG1hbmljdXJlIGNhc2VzIzUzLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEzLjAwLjAwLjAwI1BlcnNvbmFsIGNhcmUgcHJvZHVjdHMjNTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDAuMDAjRGVudGFsIzUzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjAxLjAwI01vdXRod2FzaCM1My4xMy4xNS4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wMi4wMCNUb290aHBhc3RlIzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjAzLjAwI1Rvb3RoYnJ1c2hlcyM1My4xMy4xNS4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wNC4wMCNEZW50YWwgZmxvc3MjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDUuMDAjSW5mYW50IHNvb3RoZXIgb3IgcGFjaWZpZXIgb3IgZHVtbXkjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDYuMDAjRGVudGFsIGtpdHMjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDcuMDAjVG9vdGhwaWNrcyM1My4xMy4xNS4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wOC4wMCNEZW50dXJlIGNsZWFuaW5nIHRhYmxldHMjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDAuMDAjQmF0aCBhbmQgYm9keSM1My4xMy4wMC4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wMS4wMCNTaG93ZXIgY2FwcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wMi4wMCNIYWlyIGNhcmUgc3VwcGxpZXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDMuMDAjUmF6b3JzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjA0LjAwI0hhaXIgY29tYnMgb3IgYnJ1c2hlcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wNS4wMCNWYW5pdHkga2l0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wNi4wMCNEZW9kb3JhbnRzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjA3LjAwI0hhbmQgb3IgYm9keSBsb3Rpb25zIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjA4LjAwI1NvYXBzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjA5LjAwI1N1biBwcm90ZWN0aW9uIHByb2R1Y3RzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjEwLjAwI0V5ZSBjYXJlIHN1cHBsaWVzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjExLjAwI1NoYXZpbmcgY3JlYW1zIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjEyLjAwI0JhdGggZ2VscyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xMy4wMCNTa2luIGNhcmUgcHJvZHVjdHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTQuMDAjRm9vdCBjYXJlIHByb2R1Y3RzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjE1LjAwI0ZlbWluaW5lIGh5Z2llbmUgcHJvZHVjdHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTYuMDAjUGFyYSBwaGFybWFjZXV0aWNhbCBjcmVhbXMgb3IgbG90aW9ucyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xNy4wMCNNYW5pY3VyZSBpbXBsZW1lbnRzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjE4LjAwI1BlZGljdXJlIGltcGxlbWVudHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTkuMDAjQ29zbWV0aWNzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjIwLjAwI1BlcmZ1bWVzIG9yIGNvbG9nbmVzIG9yIGZyYWdyYW5jZXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjEuMDAjTmFpbCBjbGlwcGVycyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yMi4wMCNDb25kb21zIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjIzLjAwI0hhaXIgcmVtb3ZhbCBvciBkZXBpbGF0b3J5IHByb2R1Y3RzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjI0LjAwI0Rpc3Bvc2FibGUgcGVyc29uYWwgd2lwZXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjUuMDAjSGFpciBvciBiZWFyZCBuZXRzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjI2LjAwI0hhbmQgc2FuaXRpemVyIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjI3LjAwI0hhbmQgY2xlYW5lciM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yOC4wMCNTaGFtcG9vcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yOS4wMCNNYWtldXAga2l0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4zMC4wMCNMaXAgYmFsbSM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4zMS4wMCNUYXR0b29zIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjMyLjAwI0hvdCByb2xsZXJzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjMzLjAwI0JhcnJldHRlcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4zNC4wMCNDaGVtaWNhbCBwcm90ZWN0aW9uIHByb2R1Y3RzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjM1LjAwI1NoYXZpbmcgYnJ1c2hlcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNy4wMC4wMCNFeWV3ZWFyIzUzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEzLjE3LjAxLjAwI09wdGljYWwgZ2xhc3NlcyBvciBzcGVjdGFjbGVzIzUzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE3LjAyLjAwI0NvbnRhY3QgbGVuc2VzIzUzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE3LjAzLjAwI1N1bmdsYXNzZXMjNTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMDAuMDAuMDAjU2V3aW5nIHN1cHBsaWVzIGFuZCBhY2Nlc3NvcmllcyM1My4wMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wMC4wMCNTZXdpbmcgZmFzdGVuZXJzIzUzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjAxLjAwI1N0cmFpZ2h0IHBpbnMjNTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDIuMDAjU2FmZXR5IHBpbnMjNTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDMuMDAjWmlwcGVycyM1My4xNC4xNS4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wNC4wMCNCdWNrbGVzIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjA1LjAwI0J1dHRvbnMjNTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDYuMDAjU25hcHMjNTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDcuMDAjQ2xhc3BzIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjA4LjAwI0dhcm1lbnQgcml2ZXQjNTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDAuMDAjTWlzY2VsbGFuZW91cyBzZXdpbmcgc3VwcGxpZXMjNTMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDEuMDAjUGluIGN1c2hpb25zIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjAyLjAwI1Nld2luZyBraXRzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjAzLjAwI1RoaW1ibGVzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjA0LjAwI1Nld2luZyBwYXR0ZXJucyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wNS4wMCNTZXdpbmcgbmVlZGxlcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wNi4wMCNCb2JiaW5zIG9yIGJvYmJpbiBob2xkZXJzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjA3LjAwI1NlYW0gZ2F1Z2UjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDguMDAjQm9ka2luIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjA5LjAwI0xvb3AgdHVybmVyIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjEwLjAwI0ZhYnJpYyBvciB0YWlsb3JzIGNoYWxrIGhvbGRlcnMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTEuMDAjRmFicmljIG1hcmtlcnMgb3IgZmFicmljIHBlbmNpbHMgb3IgZmFicmljIGNoYWxrIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjEyLjAwI1NlcnJhdGVkIHBhdHRlcm4gdHJhY2luZyB3aGVlbCM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xMy4wMCNUcmFuc2ZlciBwYXBlciM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xNC4wMCNUYXBlc3RyeSBuZWVkbGVzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjE1LjAwI1dlYXZpbmcgbmVlZGxlcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xNi4wMCNMb29wZXIgbG9vbXMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTcuMDAjQ290dG9uIGplcnNleSBsb29wcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xOC4wMCNOZWVkbGVwb2ludCBjYW52YXMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTkuMDAjTWFnbmV0IHdhbmRzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjIwLjAwI1NlYW0gcmlwcGVyIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjIxLjAwI05lZWRsZSB0aHJlYWRlciM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yMi4wMCNEcmVzc21ha2VycyBydWxlciM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yMy4wMCNMaXF1aWQgdGhyZWFkIGxvY2sgb3IgcmVpbmZvcmNlciM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yNC4wMCNDcm9zcyBzdGl0Y2ggZmFicmljIG9yIG5lZWRsZXMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjUuMDAjQ3Jvc3Mgc3RpdGNoIGRlc2lnbnMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjYuMDAjRW1icm9pZGVyeSBob29wcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yNy4wMCNDcm9jaGV0IGhvb2tzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjI4LjAwI1F1aWx0ZXJzIGJhc3RpbmcgdG9vbHMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjkuMDAjUXVpbHRlcnMgcGlucyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4zMC4wMCNQYXR0ZXJuIGN1dHRpbmcgbWF0cyBvciBib2FyZHMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMDAuMDAuMDAuMDAjVGltZXBpZWNlcyBhbmQgSmV3ZWxyeSBhbmQgR2Vtc3RvbmUgUHJvZHVjdHMjNTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMDAuMDAuMDAjSmV3ZWxyeSM1NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wMC4wMCNGaW5lIGpld2VscnkjNTQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDEuMDAjR29sZCBvciBzaWx2ZXIgb3IgcGxhdGludW0gY2hhaW5zIzU0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE1LjAyLjAwI0ZpbmUgamV3ZWxyeSBuZWNrbGFjZXMjNTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDMuMDAjRmluZSBqZXdlbHJ5IHJpbmdzIzU0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE1LjA0LjAwI0ZpbmUgamV3ZWxyeSBlYXJyaW5ncyM1NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wNS4wMCNGaW5lIGJvZHkgamV3ZWxyeSM1NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wNi4wMCNGaW5lIGpld2VscnkgYnJhY2VsZXRzIzU0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE1LjA3LjAwI1RpYXJhcyM1NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNi4wMC4wMCNJbWl0YXRpb24gamV3ZWxyeSM1NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNi4wMS4wMCNCcmFjZWxldHMjNTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTYuMDIuMDAjTmVja2xhY2VzIzU0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE2LjAzLjAwI1JpbmdzIzU0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE2LjA0LjAwI0VhcnJpbmdzIzU0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE2LjA1LjAwI0JvZHkgamV3ZWxyeSM1NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMS4wMC4wMC4wMCNUaW1lcGllY2VzIzU0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU0LjExLjE1LjAwLjAwI1dhdGNoZXMjNTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTUuMDEuMDAjV3Jpc3Qgd2F0Y2hlcyM1NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNS4wMi4wMCNQb2NrZXQgd2F0Y2hlcyM1NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNi4wMC4wMCNDbG9ja3MjNTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTYuMDEuMDAjV2FsbCBjbG9ja3MjNTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTYuMDIuMDAjTWFudGVsIG9yIHRhYmxlIGNsb2NrcyM1NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNi4wMy4wMCNGcmVlIHN0YW5kaW5nIGNsb2NrcyM1NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNi4wNC4wMCNIb3VyZ2xhc3NlcyM1NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNy4wMC4wMCNXYXRjaCBvciBjbG9jayBwYXJ0cyM1NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNy4wMS4wMCNXYXRjaCBvciBjbG9jayBkaWFscyM1NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNy4wMi4wMCNXYXRjaCBvciBjbG9jayBjcnlzdGFscyM1NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNy4wMy4wMCNXYXRjaCBvciBjbG9jayBwbGF0ZXMgb3IgYnJpZGdlcyM1NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNy4wNC4wMCNXYXRjaCBzdHJhcHMgb3IgYmFuZHMgb3IgYnJhY2VsZXRzIG9yIGZvYnMjNTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMDAuMDAuMDAjR2Vtc3RvbmVzIzU0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEyLjE1LjAwLjAwI1ByZWNpb3VzIHN0b25lcyM1NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNS4wMS4wMCNEaWFtb25kIGdlbXN0b25lcyM1NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNS4wMi4wMCNFbWVyYWxkIGdlbXN0b25lcyM1NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNS4wMy4wMCNSdWJ5IGdlbXN0b25lcyM1NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNS4wNC4wMCNTYXBwaGlyZSBnZW1zdG9uZXMjNTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTYuMDAuMDAjU2VtaSBwcmVjaW91cyBzdG9uZXMjNTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTYuMDEuMDAjR2FybmV0IGdlbXN0b25lcyM1NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNi4wMi4wMCNKYWRlIGdlbXN0b25lcyM1NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNi4wMy4wMCNPcGFsIGdlbXN0b25lcyM1NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNy4wMC4wMCNQZWFybHMjNTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTcuMDEuMDAjQ3VsdHVyZWQgcGVhcmxzIzU0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE3LjAyLjAwI05hdHVyYWwgcGVhcmxzIzU0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE4LjAwLjAwI0luZHVzdHJpYWwgcHJlY2lvdXMgYW5kIHNlbWkgcHJlY2lvdXMgc3RvbmVzIzU0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEyLjE4LjAxLjAwI0luZHVzdHJpYWwgZGlhbW9uZHMjNTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTguMDIuMDAjSW5kdXN0cmlhbCBnYXJuZXRzIzU0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU1LjAwLjAwLjAwLjAwI1B1Ymxpc2hlZCBQcm9kdWN0cyM1NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMC4wMC4wMC4wMCNQcmludGVkIG1lZGlhIzU1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjAwLjAwI1ByaW50ZWQgcHVibGljYXRpb25zIzU1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjAxLjAwI0NoYXJ0cyBvciBtYXBzIG9yIGF0bGFzZXMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDIuMDAjRGlyZWN0b3JpZXMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDMuMDAjQ2F0YWxvZ3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDQuMDAjTmV3c3BhcGVycyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wNS4wMCNDb21pYyBib29rcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wNi4wMCNNYWdhemluZXMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDcuMDAjUGljdHVyZSBvciBkcmF3aW5nIG9yIGNvbG9yaW5nIGJvb2tzIGZvciBjaGlsZHJlbiM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wOC4wMCNFbmN5Y2xvcGVkaWFzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjA5LjAwI0VkdWNhdGlvbmFsIG9yIHZvY2F0aW9uYWwgdGV4dGJvb2tzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjEwLjAwI0xlaXN1cmUgcmVhZGluZyBib29rcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xMS4wMCNSZWZlcmVuY2UgYm9va3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTIuMDAjRGljdGlvbmFyaWVzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjEzLjAwI1RyYWRpbmcgY2FyZHMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTQuMDAjU2hlZXQgbXVzaWMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTUuMDAjUHJvbW90aW9uYWwgbWF0ZXJpYWwgb3IgYW5udWFsIHJlcG9ydHMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTYuMDAjT3BlcmF0aW9uIGFuZCBpbnN0cnVjdGlvbiBtYW51YWxzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjE3LjAwI0NsZWFyYW5jZSBhbmQgZGltZW5zaW9uYWwgZHJhd2luZ3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTguMDAjVGVjaG5pY2FsIGRpYWdyYW1zIG9yIGRyYXdpbmdzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjE5LjAwI1BlcmlvZGljYWxzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjIwLjAwI0luc3RydWN0aW9uIHNoZWV0cyBvciBib29rbGV0cyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4yMS4wMCNPd25lciBvciB1c2VyIG1hbnVhbHMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjIuMDAjVGVycmVzdHJpYWwgb3IgY2VsZXN0aWFsIGdsb2JlcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4yMy4wMCNFeGVyY2lzZSBib29rcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4yNC4wMCNSZWZlcmVuY2UgYm9va3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjUuMDAjRW5jeWNsb3BlZGlhcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4yNi4wMCNEaWN0aW9uYXJpZXMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMDAuMDAuMDAjRWxlY3Ryb25pYyByZWZlcmVuY2UgbWF0ZXJpYWwjNTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDAuMDAjRWxlY3Ryb25pYyBwdWJsaWNhdGlvbnMgYW5kIG11c2ljIzU1LjExLjAwLjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjAxLjAwI0VsZWN0cm9uaWMgZGlyZWN0b3JpZXMjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDIuMDAjRWxlY3Ryb25pYyBkaWN0aW9uYXJpZXMjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDMuMDAjRWxlY3Ryb25pYyBlbmN5Y2xvcGVkaWFzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjA0LjAwI0VsZWN0cm9uaWMgY2F0YWxvZ3MjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDUuMDAjQm9va3Mgb24gdGFwZSBvciBjb21wYWN0IGRpc2MjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDYuMDAjRWxlY3Ryb25pYyBtYWdhemluZXMjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDcuMDAjRWxlY3Ryb25pYyBuZXdzcGFwZXJzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjA4LjAwI0VsZWN0cm9uaWMgY2hhcnRzIG9yIG1hcHMgb3IgYXRsYXNlcyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wOS4wMCNCYWNrZ3JvdW5kIG11c2ljIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjEwLjAwI01vdGlvbiBwaWN0dXJlcyBvbiBjZWxsdWxvaWQjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMTEuMDAjTW90aW9uIHBpY3R1cmVzIG9uIHZpZGVvIHRhcGUjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMTIuMDAjTXVzaWMgb24gdGFwZSBvciBjb21wYWN0IGRpc2MjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTYuMDAuMDAjRWxlY3Ryb25pYyBTb2Z0d2FyZSByZWZlcmVuY2UgbWF0ZXJpYWwjNTUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTYuMDEuMDAjRWxlY3Ryb25pYyBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uIGFuZCBVc2VyIE1hbnVhbHMjNTUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMDAuMDAuMDAjU2lnbmFnZSBhbmQgYWNjZXNzb3JpZXMjNTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTUuMDAuMDAjVGFncyM1NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNS4wMS4wMCNMdWdnYWdlIHRhZ3MjNTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTUuMDIuMDAjU2VjdXJpdHkgdGFncyM1NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNS4wMy4wMCNJZGVudGlmaWNhdGlvbiB0YWdzIzU1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjAwLjAwI0xhYmVscyM1NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wMS4wMCNMYWJlbCByZW1vdmluZyBraXRzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjAyLjAwI0Nsb3RoaW5nIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wMy4wMCNQcmVzc3VyZSBzZW5zaXRpdmUgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjA0LjAwI0Nhbm5pbmcgb3IgYm90dGxpbmcgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjA1LjAwI0FkZHJlc3Npbmcgb3IgbWFpbGluZyBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDYuMDAjU2VsZiBhZGhlc2l2ZSBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDcuMDAjRGVjYWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjA4LjAwI0JhciBjb2RlIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wOS4wMCNQYWNrYWdpbmcgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjEwLjAwI0NvbnNlY3V0aXZlbHkgbnVtYmVyZWQgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjExLjAwI0xhYmVsIG1ha2luZyB0YXBlcyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4xMi4wMCNQcmludGVyIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4xMy4wMCNDb2xvciBjb2RpbmcgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjE0LjAwI1JlbW92YWJsZSBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMTUuMDAjQWRoZXNpdmUgZG90cyBvciBhcnJvd3MjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMTYuMDAjU2VsZiBhZGhlc2l2ZSBmbGFncyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wMC4wMCNTaWduYWdlIzU1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjAxLjAwI01ldGFsbGljIG5hbWVwbGF0ZXMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDIuMDAjTm9uIG1ldGFsbGljIG5hbWVwbGF0ZXMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDMuMDAjSWxsdW1pbmF0ZWQgc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDQuMDAjU2FmZXR5IHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjA1LjAwI1NlbGYgYWRoZXNpdmUgc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDYuMDAjQmFubmVycyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wNy4wMCNNYWduZXRpYyBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wOC4wMCNOZW9uIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjA5LjAwI01vdmluZyBtZXNzYWdlIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjEwLjAwI1RyYWZmaWMgc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTEuMDAjQmlsbGJvYXJkcyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xMi4wMCNEaXJlY3Rpb25hbCBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xMy4wMCNQb2ludCBvZiBwdXJjaGFzZSBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xNC4wMCNQZW5uYW50cyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xNS4wMCNGbGFncyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xNi4wMCNXb29kZW4gc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTcuMDAjTWFya2VyIHBsYXRlcyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xOC4wMCNJbmZvcm1hdGlvbmFsIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjE5LjAwI1NpZ25hbGxpbmcgY29tcG9uZW50cyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4yMC4wMCNFbWJsZW1zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjIxLjAwI1ZpbnlsIGxldHRlcnMgb3IgbnVtYmVycyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4yMi4wMCNGbGFncG9sZXMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMjMuMDAjU2lnbiBob2xkZXJzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE4LjAwLjAwI0lkZW50aWZpY2F0aW9uIGRvY3VtZW50cyM1NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xOC4wMS4wMCNDYXIgdGF4IGRpc2NzIzU1LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE4LjAyLjAwI0lkZW50aWZpY2F0aW9uIGNhcmRzIzU1LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE4LjAzLjAwI1Bhc3Nwb3J0cyM1NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xOC4wNC4wMCNCYWRnZXMgb3IgYmFkZ2UgaG9sZGVycyM1NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1Ni4wMC4wMC4wMC4wMCNGdXJuaXR1cmUgYW5kIEZ1cm5pc2hpbmdzIzU2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEwLjAwLjAwLjAwI0FjY29tbW9kYXRpb24gZnVybml0dXJlIzU2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjAwLjAwI0Z1cm5pdHVyZSM1Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wMS4wMCNTdGFuZHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDIuMDAjU29mYXMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDMuMDAjQ29hdCByYWNrcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wNC4wMCNDaGFpcnMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDUuMDAjRW50ZXJ0YWlubWVudCBjZW50ZXJzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjA2LjAwI0Z1dG9ucyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wNy4wMCNCb29rY2FzZXMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDguMDAjTWF0dHJlc3NlcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wOS4wMCNEcmVzc2VycyBvciBhcm1vaXJlcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xMC4wMCNQYXJ0aXRpb25zIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjEyLjAwI1N0b29scyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xMy4wMCNDb3RzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjE0LjAwI0Zvb3Qgc3Rvb2xzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjE1LjAwI0JlZHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMTYuMDAjQ2hlc3RzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjE4LjAwI1dhbGwgcmFja3MjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMTkuMDAjVGFibGVzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjIwLjAwI0xvY2tlcnMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjEuMDAjQmVkIGhlYWRib2FyZCBvciBmb290Ym9hcmQjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjIuMDAjQXJtIGNoYWlyIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjIzLjAwI1VtYnJlbGxhIHN0YW5kcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yNC4wMCNJcm9uaW5nIGJvYXJkcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yNS4wMCNJcm9uaW5nIGJvYXJkIGNvdmVycyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yNi4wMCNGcmlkZ2UgYmFyIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjI3LjAwI0hvdXNlaG9sZCB0eXBlIGxpbmVuIGRyaWVycyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yOC4wMCNBcnRpZmljaWFsIHBsYW50cyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yOS4wMCNNYWdhemluZSByYWNrcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wMC4wMCNPdXRkb29yIGZ1cm5pdHVyZSM1Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wMS4wMCNPdXRkb29yIHVtYnJlbGxhcyM1Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wMi4wMCNPdXRkb29yIGNoYWlycyM1Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wMy4wMCNPdXRkb29yIHRhYmxlcyBvciBwaWNuaWMgdGFibGVzIzU2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE2LjA0LjAwI091dGRvb3Igc3dpbmdzIzU2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE2LjA1LjAwI091dGRvb3IgYmVuY2hlcyM1Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wNi4wMCNGbG93ZXIgc3RhbmRzIzU2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE2LjA3LjAwI091dHNpZGUgY2xvdGhlcyBkcnllciM1Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wMC4wMCNPZmZpY2UgZnVybml0dXJlIzU2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEwLjE3LjAxLjAwI0NyZWRlbnphcyM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wMi4wMCNGaWxpbmcgY2FiaW5ldHMgb3IgYWNjZXNvcmllcyM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wMy4wMCNEZXNrcyM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wNC4wMCNUYWJsZSBiYXNlIzU2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE3LjA1LjAwI1Nob3djYXNlcyM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wNi4wMCNDb25mZXJlbmNpbmcgdGFibGVzIzU2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE3LjA3LjAwI0RyYWZ0aW5nIHRhYmxlcyM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wOC4wMCNNb2JpbGUgZmlsZXMgb3IgZXF1aXBtZW50IGNhcnRzIzU2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE3LjA5LjAwI1RhYmxlIHRvcHMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMDAuMDAjQmFieSBhbmQgdG9kZGxlciBmdXJuaXR1cmUgYW5kIGFjY2Vzc29yaWVzIzU2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjAzLjAwI0NhcnJpYWdlcyBvciBwZXJhbWJ1bGF0b3JzIG9yIHN0cm9sbGVycyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wNC4wMCNDcmlicyBvciBwbGF5cGVucyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wNS4wMCNDYXIgc2VhdHMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMDYuMDAjSGlnaCBjaGFpcnMgb3IgYWNjZXNzb3JpZXMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMDcuMDAjQm91bmNlciBzZWF0cyBvciBqdW1wZXJzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjA4LjAwI1N3aW5ncyBvciBqdW1wZXJzIG9yIGFjY2Vzc29yaWVzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjA5LjAwI1BvdHR5IHNlYXRzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjEwLjAwI0JhYnkgYmF0aHMgb3IgdHVicyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4xMS4wMCNCYXNzaW5ldHMgb3IgY3JhZGxlcyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4xMi4wMCNDaGFuZ2luZyB0YWJsZXMgb3IgYWNjZXNzb3JpZXMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTEuMDAuMDAuMDAjQ29tbWVyY2lhbCBhbmQgaW5kdXN0cmlhbCBmdXJuaXR1cmUjNTYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMDAuMDAjV29ya3N0YXRpb25zIGFuZCBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMDEuMDAjTW9kdWxhciByZWNlcHRpb24gb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjAyLjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIGV4ZWN1dGl2ZSBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMDMuMDAjTW9kdWxhciBleGVjdXRpdmUgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjA0LjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIG1hbmFnZXJpYWwgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjA1LjAwI01vZHVsYXIgbWFuYWdlcmlhbCBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMDYuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgc3RhZmYgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjA3LjAwI01vZHVsYXIgc3RhZmYgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjA4LjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIHRlY2huaWNhbCBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMDkuMDAjTW9kdWxhciB0ZWNobmljYWwgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjEwLjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIGNsZXJpY2FsIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4xMS4wMCNNb2R1bGFyIGNsZXJpY2FsIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4xMi4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciByZWNlcHRpb24gb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjEzLjAwI0NvbmZlcmVuY2Ugb3Igbm9uIG1vZHVsYXIgcm9vbSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNi4wMC4wMCNQYW5lbCBzeXN0ZW1zIzU2LjExLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjE2LjAxLjAwI1NjcmVlbnMgZm9yIHBhbmVsIHN5c3RlbXMjNTYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDIuMDAjU3RvcmFnZSBmb3IgcGFuZWwgc3lzdGVtcyM1Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNi4wMy4wMCNPcmdhbml6YXRpb24gZm9yIHBhbmVsIHN5c3RlbXMjNTYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDQuMDAjV29yayBzdXJmYWNlcyBmb3IgcGFuZWwgc3lzdGVtcyM1Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNi4wNS4wMCNMaWdodGluZyBvciBwb3dlciBvciBkYXRhIGNvbXBvbmV0cyBmb3IgcGFuZWwgc3lzdGVtcyM1Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNi4wNi4wMCNQYXJ0cyBvciBhY2Nlc3NvcmllcyBwYW5lbCBzeXN0ZW1zIzU2LjExLjE2LjAwLjAwCi11bnNwc2M3IzU2LjExLjE3LjAwLjAwI0Nhc2Vnb29kIGFuZCBub24gbW9kdWxhciBzeXN0ZW1zIzU2LjExLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjE3LjAxLjAwI0Nhc2Vnb29kICBvciBub24gbW9kdWxhciBkZXNrIzU2LjExLjE3LjAwLjAwCi11bnNwc2M3IzU2LjExLjE3LjAyLjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIGNyZWRlbnphIzU2LjExLjE3LjAwLjAwCi11bnNwc2M3IzU2LjExLjE3LjAzLjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIHN0b3JhZ2UjNTYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTcuMDQuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgb3JnYW5pemF0aW9uIzU2LjExLjE3LjAwLjAwCi11bnNwc2M3IzU2LjExLjE3LjA1LjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIGxpZ2h0aW5nIG9yIHBvd2VyIG9yIGRhdGEgY29tcG9uZW50cyM1Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wNi4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBwYXJ0cyBvciBhY2Nlc3NvcmllcyM1Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOC4wMC4wMCNGcmVlc3RhbmRpbmcgZnVybml0dXJlIzU2LjExLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjE4LjAxLjAwI0ZyZWVzdGFuZGluZyBsaWdodGluZyBvciBwb3dlciBvciBkYXRhIGNvbXBvbmVudHMjNTYuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTguMDIuMDAjRnJlZXN0YW5kaW5nIHRhYmxlcyM1Ni4xMS4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOC4wMy4wMCNGcmVlc3RhbmRpbmcgc3RvcmFnZSM1Ni4xMS4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOC4wNC4wMCNGcmVlc3RhbmRpbmcgb3JnYW5pemF0aW9uIzU2LjExLjE4LjAwLjAwCi11bnNwc2M3IzU2LjExLjE4LjA1LjAwI0ZyZWVzdGFuZGluZyBwYXJ0cyBvciBhY2Nlc3NvcmllcyM1Ni4xMS4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOS4wMC4wMCNJbmR1c3RyaWFsIGZ1cm5pdHVyZSM1Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOS4wMS4wMCNJbmR1c3RyaWFsIGxpZ2h0aW5nIG9yIHBvd2VyIG9yIGRhdGEgY29tcG9uZW50cyM1Ni4xMS4xOS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOS4wMi4wMCNJbmR1c3RyaWFsIHdvcmsgc3VyZmFjZXMjNTYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTkuMDMuMDAjSW5kdXN0cmlhbCBzdG9yYWdlIHVuaXRzIzU2LjExLjE5LjAwLjAwCi11bnNwc2M3IzU2LjExLjE5LjA0LjAwI0luZHVzdHJpYWwgb3JnYW5pemF0aW9uIzU2LjExLjE5LjAwLjAwCi11bnNwc2M3IzU2LjExLjE5LjA1LjAwI0luZHVzdHJpYWwgcGFydHMgb3IgYWNjZXNzb3JpZXMjNTYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjAuMDAuMDAjQ29tcHV0ZXIgc3VwcG9ydCBmdXJuaXR1cmUjNTYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjAuMDEuMDAjQ29tcHV0ZXIgc3VwcG9ydCBsaWdodGluZyBvciBwb3dlciBvciBkYXRhIGNvbXBvbmVudHMjNTYuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjAuMDIuMDAjQ29tcHV0ZXIgc3VwcG9ydCB3b3JrIHN1cmZhY2VzIzU2LjExLjIwLjAwLjAwCi11bnNwc2M3IzU2LjExLjIwLjAzLjAwI0NvbXB1dGVyIHN1cHBvcnQgc3RvcmFnZSBhY2Nlc3NvcmllcyM1Ni4xMS4yMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMC4wNC4wMCNDb21wdXRlciBzdXBwb3J0IG9yZ2FuaXphdGlvbiM1Ni4xMS4yMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMC4wNS4wMCNDb21wdXRlciBzdXBwb3J0IHBhcnRzIG9yIGFjY2Vzc29yaWVzIzU2LjExLjIwLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjAwLjAwI1NlYXRpbmcjNTYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDEuMDAjQXVkaXRvcml1bSBvciBzdGFkaXVtIG9yIHNwZWNpYWwgdXNlIHNlYXRpbmcjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDIuMDAjVGFzayBzZWF0aW5nIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjAzLjAwI0d1ZXN0IHNlYXRpbmcjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDQuMDAjRXhlY3V0aXZlIHNlYXRpbmcjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDUuMDAjTG91bmdlIHNlYXRpbmcjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDYuMDAjU3Rvb2wgc2VhdGluZyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wNy4wMCNTZWF0aW5nIHBhcnRzIG9yIGFjY2Vzc29yaWVzIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjA4LjAwI0NvbWJpbmF0aW9uIGNoYWlyIHdpdGggZGVzayM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wOS4wMCNCZW5jaGVzIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjEyLjAwLjAwLjAwI0NsYXNzcm9vbSBhbmQgaW5zdHJ1Y3Rpb25hbCBhbmQgaW5zdGl0dXRpb25hbCBmdXJuaXR1cmUgYW5kIGZpeHR1cmVzIzU2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjAwLjAwI0xpYnJhcnkgZnVybmlzaGluZ3MjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDEuMDAjQm9vayBjYXJ0cyBvciBib29rIHRydWNrcyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wMi4wMCNDaXJjdWxhdGlvbiBvciBsaWJyYXJpYW4gZGVza3Mgb3IgY29tcG9uZW50cyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wMy4wMCNCb29rIHJldHVybnMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDQuMDAjQ2FyZCBjYXRhbG9nIHVuaXRzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjA1LjAwI0RpY3Rpb25hcnkgc3RhbmRzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjA2LjAwI1VwaG9sc3RlcmVkIGJlbmNoZXMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDcuMDAjUHVibGljIGFjY2VzcyB0YWJsZXMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDguMDAjQm9vayBicm93c2VyIHVuaXRzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjA5LjAwI1Nsb3BlZCByZWFkaW5nIHRhYmxlcyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4xMC4wMCNCb29rIGtpb3NrcyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4xMS4wMCNMaWJyYXJ5IGNvbXBhY3QgZGlzYyBvciBhdWRpbyBjYXNzZXR0ZSBkaXNwbGF5ZXJzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjEyLjAwI1JvdGFyeSBpc2xhbmQgc3RhbmRzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjE0LjAwI0hhbmcgdXAgYmFnIHJhY2tzIG9yIGJhZ3MjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTEuMDAuMDAjQXJ0IGNsYXNzcm9vbSBmdXJuaXNoaW5ncyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMS4wMS4wMCNBcnQgaG9yc2UjNTYuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTEuMDIuMDAjQXJ0IHN0dWRlbnQgYmVuY2gjNTYuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTIuMDAuMDAjRmlyc3QgYWlkIHJvb20gZnVybmlzaGluZ3MjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTIuMDEuMDAjRmlyc3QgYWlkIGNvdWNoZXMjNTYuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTMuMDAuMDAjR2VuZXJhbCBlZHVjYXRpb25hbCBmYWNpbGl0eSBmaXh0dXJlcyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMy4wMS4wMCNTdGFuZGluZyByaXNlcnMjNTYuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTMuMDIuMDAjVGFibGUgb3IgY2hhaXIgbW92ZXJzIG9yIGNhZGR5cyM1Ni4xMi4xMy4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMy4wMy4wMCNSdWJiZXIgYnJ1c2ggZmxvb3IgbWF0dGluZyM1Ni4xMi4xMy4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMy4wNC4wMCNQbGFubmluZyB0YWJsZXMjNTYuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTQuMDAuMDAjQ2FmZXRlcmlhIGFuZCBsdW5jaHJvb20gZnVybmlzaGluZ3MjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTQuMDEuMDAjTW9iaWxlIGJlbmNoIHRhYmxlcyM1Ni4xMi4xNC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNC4wMi4wMCNNb2JpbGUgc3Rvb2wgdGFibGVzIzU2LjEyLjE0LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE0LjAzLjAwI01vYmlsZSB0YWJsZXMjNTYuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDAuMDAjR2VuZXJhbCBjbGFzc3Jvb20gZnVybmlzaGluZ3MjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDEuMDAjQWN0aXZpdHkgdGFibGVzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjAyLjAwI0NsYXNzcm9vbSBjaGFpcnMjNTYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDMuMDAjQ2xhc3Nyb29tIGJlbmNoZXMjNTYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDQuMDAjQ2xhc3Jvb20gc3Rvb2xzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjA1LjAwI0NsYXNzcm9vbSB0YWJsZXMjNTYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDYuMDAjU3R1ZGVudCBkZXNrcyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wNy4wMCNTdHVkeSBjYXJyZWxzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjA4LjAwI1N0dWRlbnQgY29tcHV0ZXIgZGVza3MjNTYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDkuMDAjU3R1ZGVudCBjb21wdXRlciB0YWJsZXMjNTYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDAuMDAjQ3JlYXRpdmUgcGxheSBhbmQgcmVzdCB0aW1lIGZ1cm5pc2hpbmdzIGZvciBkYXljYXJlIGFuZCBlYXJseSBjaGlsZGhvb2QgZmFjaWxpdGllcyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wMS4wMCNUb2RkbGVyIG9yIGNoaWxkIHNpemUgbGl2aW5nIHJvb20gc2V0cyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wMi4wMCNUb2RkbGVyIG9yIGNoaWxkIHNpemUgc29mYXMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDMuMDAjVG9kZGxlciBvciBjaGlsZCBzaXplIGVhc3kgY2hhaXJzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjA0LjAwI1RvZGRsZXIgb3IgY2hpbGQgc2l6ZSBiZWFuIGJhZyBjaGFpcnMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDUuMDAjTG93IHJpc2Ugcm9vbSBkaXZpZGVycyBvciBwbGF5IHBhbmVscyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wNi4wMCNDaGlsZHMgcmVzdCBtYXRzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjA3LjAwI0NoaWxkcyByZXN0IG1hdCByYWNrcyBvciBob2xkZXJzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjA4LjAwI0NoaWxkcmVucyBjb3RzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjA5LjAwI0NoaWxkcmVucyBjb3QgY2FycmllcnMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMTAuMDAjQ2hpbGRyZW5zIGNvdCBhY3Rpdml0eSBzeXN0ZW1zIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE3LjAwLjAwI0Jvb2sgYW5kIGdlbmVyYWwgc3RvcmFnZSB1bml0cyBmb3IgY2xhc3Nyb29tcyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNy4wMS4wMCNHZW5lcmFsIHN0b3JhZ2UgdW5pdHMjNTYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTcuMDIuMDAjQm9vayBzdG9yYWdlIHVuaXRzIzU2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE3LjAzLjAwI0N1YmJpZSB1bml0cyM1Ni4xMi4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNy4wNC4wMCNJbnN0aXR1dGlvbmFsIFN0b3JhZ2UgQ2FiaW5ldHMjNTYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTguMDAuMDAjVm9jYXRpb25hbCBjbGFzc3Jvb20gZnVybmlzaGluZ3MgYW5kIGZpeHR1cmVzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjE4LjAxLjAwI1RlY2huaWNhbCBlZHVjYXRpb24gdG9vbCBzdG9yYWdlIGNhYmluZXRzIG9yIGNhYmluZXRzIHdpdGggdG9vbHMjNTYuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTguMDIuMDAjR2VuZXJhbCBzaG9wIHRvb2wgc3RvcmFnZSBjYWJpbmV0cyBvciBjYWJpbmV0cyB3aXRoIHRvb2xzIzU2LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE4LjAzLjAwI1dvcmR3b3JraW5nIHRvb2wgc3RvcmFnZSBjYWJpbmV0cyBvciBjYWJpbmV0cyB3aXRoIHRvb2xzIzU2LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE4LjA0LjAwI0luc3RydWN0b3JzIHRlY2huaWNhbCBkZXNrIzU2LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE4LjA1LjAwI0ZsYXQgZmlsZXMjNTYuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTkuMDAuMDAjRGVtb25zdHJhdGlvbiBmdXJuaXNoaW5ncyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOS4wMS4wMCNTZXdpbmcgbWFjaGluZSBkZW1vbnN0cmF0b3IgdGFibGVzIzU2LjEyLjE5LjAwLjAwCi11bnNwc2M3IzU2LjEyLjIwLjAwLjAwI0xhYm9yYXRvcnkgZnVybml0dXJlIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjIwLjAxLjAwI0xhYm9yYXRvcnkgYmVuY2hlcyM1Ni4xMi4yMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4yMC4wMi4wMCNMYWJvcmF0b3J5IHN0b3JhZ2UgdW5pdHMgb3IgYWNjZXNzb3JpZXMjNTYuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMjAuMDMuMDAjTGFib3JhdG9yeSB3b3Jrc3RhdGlvbnMjNTYuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMDAuMDAuMDAuMDAjTXVzaWNhbCBJbnN0cnVtZW50cyBhbmQgR2FtZXMgYW5kIFRveXMgYW5kIEFydHMgYW5kIENyYWZ0cyBhbmQgRWR1Y2F0aW9uYWwgRXF1aXBtZW50IGFuZCBNYXRlcmlhbHMgYW5kIEFjY2Vzc29yaWVzIGFuZCBTdXBwbGllcyM2MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4wMC4wMC4wMCNEZXZlbG9wbWVudGFsIGFuZCBwcm9mZXNzaW9uYWwgdGVhY2hpbmcgYWlkcyBhbmQgbWF0ZXJpYWxzIGFuZCBhY2Nlc3NvcmllcyBhbmQgc3VwcGxpZXMjNjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDAuMDAjTWF0aCBraXRzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjAxLjAwI0FkZGl0aW9uIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wMi4wMCNEaXZpc2lvbiBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDMuMDAjRnJhY3Rpb24gbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjA0LjAwI01pZGRsZSBTY2hvb2wgbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjA1LjAwI0Vhcmx5IGNoaWxkaG9vZCBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDYuMDAjTWVhc3VyZW1lbnQgbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjA3LjAwI011bHRpcGxpY2F0aW9uIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wOC4wMCNFbGVtZW50YXJ5IG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wOS4wMCNTdWJ0cmFjdGlvbiBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMTAuMDAjSGlnaCBzY2hvb2wgbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjExLjAwLjAwI0VsZWN0cm9uaWMgbGVhcm5pbmcgYWlkcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMS4wMS4wMCNFbGVjdHJvbmljIGNhcmQgcmVhZGVycyM2MC4xMC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMS4wMi4wMCNDdXJyaWN1bHVtIGJhc2VkIGVsZWN0cm9uaWMgbGVhcm5pbmcgYWlkcyM2MC4xMC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMS4wMy4wMCNFbGVjdHJvbmljIGdsb2JlcyM2MC4xMC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMS4wNC4wMCNFbGVjdHJvbmljIHF1aXogbWFjaGluZXMjNjAuMTAuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTIuMDAuMDAjRWR1Y2F0aW9uYWwgaW5jZW50aXZlcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMi4wMS4wMCNCaWJsZSBiYXNlZCBjaGFydCBzdGlja2VycyM2MC4xMC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMi4wMi4wMCNCaWJsZSBiYXNlZCBpbmNlbnRpdmUgY2hhcnRzIzYwLjEwLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEyLjAzLjAwI0luY2VudGl2ZSBjaGFydCBzdGlja2VycyM2MC4xMC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMi4wNC4wMCNJbmNlbnRpdmUgY2hhcnRzIzYwLjEwLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEyLjA1LjAwI0luY2VudGl2ZSBwdW5jaGNhcmRzIzYwLjEwLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjAwLjAwI0VkdWNhdGlvbmFsIHN0aWNrZXJzIGFuZCBzdXBwbGllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wMS4wMCNCaWJsZSBiYXNlZCBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wMi4wMCNHaWFudCBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wMy4wMCNOb3Rhcnkgc2VhbCBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wNC4wMCNQaG90byBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wNS4wMCNSZXdhcmQgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDYuMDAjU2NlbnRlZCBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wNy4wMCNTaGFwZSBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wOC4wMCNTcGFya2xlIHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjA5LjAwI1Jld2FyZCBzdGFyIHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjEwLjAwI1N0aWNrZXIgYXNzb3J0bWVudHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTEuMDAjU3RpY2tlciBib29rcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xMi4wMCNTdGlja2VyIGJveGVzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjEzLjAwI1RhdHRvbyBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xNC4wMCNBZGRpdGlvbiBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xNS4wMCNBbGwgZmFjdHMgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTYuMDAjQmxhbmsgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTcuMDAjRGl2aXNpb24gZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTguMDAjRWxlY3Ryb25pYyBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xOS4wMCNFcXVpdmFsZW50IGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjIwLjAwI0ZyYWN0aW9uIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjIxLjAwI0dyZWF0ZXIgdGhhbiBvciBsZXNzIHRoYW4gZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjIuMDAjTXVsdGlwbGljYXRpb24gZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjMuMDAjU3VidHJhY3Rpb24gZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjQuMDAjQWxwaGFiZXQgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjUuMDAjV29yZCBidWlsZGluZyBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yNi4wMCNQaG9uaWNzIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjI3LjAwI0hhbmR3cml0aW5nIG9yIHdyaXRpbmcgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjguMDAjTnVtYmVyIGNsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjI5LjAwI01vbmV5IGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjMwLjAwI1RpbWUgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMzEuMDAjU3RhdGUgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTQuMDAuMDAjQ2xhc3Nyb29tIGF3YXJkcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNC4wMS4wMCNCYWRnZXMjNjAuMTAuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTQuMDIuMDAjQXdhcmQgYnV0dG9ucyM2MC4xMC4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNC4wMy4wMCNDZWxlYnJhdGlvbiBjcm93bnMjNjAuMTAuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTQuMDQuMDAjUmV3YXJkIGpld2xlcnkjNjAuMTAuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTQuMDUuMDAjQ2xhc3Nyb29tIHJpYmJvbnMgb3Igcm9zZXR0ZXMjNjAuMTAuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDAuMDAjRWR1Y2F0aW9uYWwgY2VydGlmaWNhdGVzIG9yIGRpcGxvbWFzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjAxLjAwI0JpYmxlIGJhc2VkIGNlcnRpZmljYXRlcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wMi4wMCNCbGFuayBjZXJ0aWZpY2F0ZXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDMuMDAjQ2VydGlmaWNhdGUgZnJhbWVzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjA0LjAwI0NlcnRpZmljYXRlIGhvbGRlcnMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDUuMDAjQ2VydGlmaWNhdGUgcmliYm9ucyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wNi4wMCNEaXBsb21hcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wNy4wMCNGb3JlaWduIGxhbmd1YWdlIGNlcnRpZmljYXRlcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wOC4wMCNHZW5lcmFsIHByYWlzZSBjZXJ0aWZpY2F0ZXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDkuMDAjR3JhZGUgc3BlY2lmaWMgY2VydGlmaWNhdGVzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjEwLjAwI1N1YmplY3Qgc3BlY2lmaWMgY2VydGlmaWNhdGVzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjAwLjAwI1RlYWNoZXIgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjAxLjAwI0Fzc2Vzc21lbnQgcmVzb3VyY2UgYm9va3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDIuMDAjQ2FsZW5kYXJzIG9yIGN1dCBvdXRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjAzLjAwI0NoYXJhY3RlciBlZHVjYXRpb24gcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjA0LjAwI0NsYXNzcm9vbSBhY3Rpdml0eSBib29rcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wNS4wMCNDcml0aWNhbCB0aGlua2luZyByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDYuMDAjQ3Jvc3MgY3VycmljdWx1bSBndWlkZXMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDcuMDAjQ3VycmljdWx1bSBndWlkZXMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDguMDAjRmFicmljIGNoYXJ0cyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wOS4wMCNGbGFubmVsIGJvYXJkIGFpZHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTAuMDAjRWR1Y2F0b3IgZ2lmdHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTEuMDAjR3JhZGluZyBzdGFtcHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTIuMDAjSGFsbCBwYXNzZXMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTMuMDAjSG9tZSBlZHVjYXRpb24gcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjE0LjAwI0hvbWV3b3JrIGFzc2lnbm1lbnQgcmVzb3VyY2VzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjE1LjAwI0lkZWEgYm9va3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTYuMDAjTWFnbmV0aWMgYm9hcmQgYWlkcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xNy4wMCNOYW1lIHBsYXRlcyBvciB0YWdzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjE4LjAwI1RlYWNoZXIgcGxhbiBib29rcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xOS4wMCNQb2NrZXQgY2hhcnRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjIwLjAwI1RlYWNoZXIgY29tbXVuaWNhdGlvbiBwb3N0Y2FyZHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjEuMDAjUHJvZmVzc2lvbmFsIHRlYWNoZXIgcmVzb3VyY2UgYm9va3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjIuMDAjVGVhY2hlciBjbGFzc3Jvb20gZ3JhZGluZyBib29rcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yMy4wMCNDbGFzc3Jvb20gc3R1ZGVudCBzZWF0aW5nIGNoYXJ0cyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yNC4wMCNTdWJzdGl0dXRlIHRlYWNoZXIgZm9sZGVycyBvciBmb3JtcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yNS4wMCNUZWNobm9sb2d5IGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjI2LjAwI1RlY2hub2xvZ3kgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yNy4wMCNUZXN0IHRha2luZyByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjguMDAjVGhlbWUgdW5pdCByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjkuMDAjTWlkZGxlIG9yIGp1bmlvciBzY2hvb2wgdGVhY2hpbmcga2l0cyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4zMC4wMCNMYWJvcmF0b3J5IG1hbnVhbHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTguMDAuMDAjQ2h1cmNoIHNjaG9vbCBlZHVjYXRpb25hbCByZXNvdXJjZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTguMDEuMDAjQmlibGUgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOC4wMi4wMCNCaWJsZSBiYXNlZCBkcmFtYXMjNjAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTguMDMuMDAjQmlibGUgYmFzZWQgcmVzb3VyY2Ugb3IgYWN0aXZpdHkgYm9va3MjNjAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTguMDQuMDAjU3VuZGF5IHNjaG9vbCBhY3Rpdml0eSByZXNvdXJjZSBib29rcyM2MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOC4wNS4wMCNWYWNhdGlvbiBiaWJsZSBzY2hvb2wgcmVzb3VyY2VzIzYwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjAwLjAwI0FscGhhYmV0IHNraWxscyBtYXRlcmlhbHMgYW5kIHJlc291cmNlcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wMS4wMCNBbHBoYWJldCBhY3Rpdml0eSBib29rcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wMi4wMCNBbHBoYWJldCBjdWJlcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wMy4wMCNBbHBoYWJldCBkZXNrIHRhcGVzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjA0LjAwI0FscGhhYmV0IGtpdHMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDUuMDAjQWxwaGFiZXQgbGV0dGVyIHRpbGVzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjA2LjAwI0FscGhhYmV0IHBvc3RlciBjYXJkcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wNy4wMCNBbHBoYWJldCByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjA4LjAwI0FscGhhYmV0IHJlc291cmNlIGJvb2tzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjA5LjAwI0FscGhhYmV0IHN0YW1wcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4xMC4wMCNBbHBoYWJldCB3YWxsIGNhcmRzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjExLjAwI1RhY3RpbGUgYWxwaGFiZXRzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjIwLjAwLjAwI1dvcmQgYnVpbGRpbmcgcmVzb3VyY2UgbWF0ZXJpYWxzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wMS4wMCNTcGVlY2ggbWlycm9yIzYwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIwLjAyLjAwI1NwZWxsaW5nIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wMy4wMCNXb3JkIGJ1aWxkaW5nIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIwLjA0LjAwI1dvcmQgYnVpbGRpbmcga2l0cyM2MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wNS4wMCNXb3JkIGJ1aWxkaW5nIHJlc291cmNlIGJvb2tzIzYwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIwLjA2LjAwI1dvcmQgYnVpbGRpbmcgdGlsZXMjNjAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDcuMDAjV29yZCB3YWxscyM2MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMS4wMC4wMCNMYW5ndWFnZSBhcnRzIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMS4wMS4wMCNBZGplY3RpdmUgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjEuMDIuMDAjQWR2ZXJiIHJlc291cmNlIGJvb2tzIzYwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIxLjAzLjAwI0dyYW1tYXIgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjEuMDQuMDAjTm91biByZXNvdXJjZSBib29rcyM2MC4xMC4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMS4wNS4wMCNQdW5jdHV0YXRpb24gcmVzb3VyY2UgYm9va3MjNjAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjEuMDYuMDAjVmVyYiByZXNvdXJjZSBib29rcyM2MC4xMC4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMi4wMC4wMCNQaG9uaWNzIHJlc291cmNlIG1hdGVyaWFscyBhbmQgYWNjZXNzb3JpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjIuMDEuMDAjUGhvbmljcyBhY3Rpdml0eSBib29rcyM2MC4xMC4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMi4wMi4wMCNQaG9uaWNzIGRyaWxsIGNhcmRzIzYwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIyLjAzLjAwI1Bob25pY3Mga2l0IzYwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIyLjA0LjAwI1Bob25pY3MgcGljdHVyZSBjYXJkcyM2MC4xMC4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMi4wNS4wMCNQaG9uaWNzIHJlc291cmNlIGJvb2tzIzYwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIyLjA2LjAwI1Bob25pY3MgdGlsZXMjNjAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMDAuMDAjUmVhZGluZyBib29rcyBhbmQgcmVzb3VyY2VzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjAxLjAwI1JlYWRpbmcgYWN0aXZpdHkgYm9va3MjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMDIuMDAjQmVnaW5uaW5nIHJlYWRpbmcgYm9va3MjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMDMuMDAjQmlibGUgYmFzZWQgY2hpbGRyZW5zIGxpdGVyYXR1cmUgYm9va3MjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMDQuMDAjQ2hpbGRyZW5zIGxpdGVyYXR1cmUgYm9va3MjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMDUuMDAjQ3JpdGljYWwgcmVhZGluZyBza2lsbHMjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMDYuMDAjRmxhbm5lbCBib2FyZHMjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMDcuMDAjUG9ldHJ5IHJlc291cmNlIGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA4LjAwI1JlYWRpbmcgY29tcHJlaGVuc2lvbiBtYXRlcmlhbHMjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMDkuMDAjUmVhZGluZyBkZXZlbG9wbWVudCBtYXRlcmlhbHMgb3Iga2l0cyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4xMC4wMCNSZWFkaW5nIHJlc291cmNlIGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjExLjAwI1JlYWRpbmcgdGhlbWF0aWMgdW5pdHMjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMTIuMDAjVm9jYWJ1bGFyeSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wMC4wMCNFYXJseSBsZWFybmluZyBtYXRoIGFuZCBjb3VudGluZyByZXNvdXJjZXMgYW5kIGFjY2Vzc29yaWVzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjAxLjAwI0FiYWN1cyBvciBjb3VudGluZyBmcmFtZXMjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDIuMDAjQWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MgZm9yIHdvcmtpbmcgd2l0aCBlYXJseSBtYXRoIG1hbmlwdWxhdGl2ZXMjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDMuMDAjQWN0aXZpdHkgY2FyZHMgZm9yIHdvcmtpbmcgd2l0aCBlYXJseSBtYXRoIG1hbmlwdWxhdGl2ZXMjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDQuMDAjQmVhZHMgb3IgYmVhZCBhY3Rpdml0eSBzZXRzIGZvciBlYXJseSBtYXRoIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjA1LjAwI0NvdW50ZXJzIG9yIGNvdW50ZXIgYWN0aXZpdHkgc2V0cyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wNi4wMCNDb3VudGluZyBvciBzb3J0aW5nIHRyYXlzIG9yIGJvd2xzIGZvciBlYXJseSBtYXRoIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjA3LjAwI0xhY2VzIG9yIGxhY2luZyBzZXRzIGZvciBlYXJseSBtYXRoIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjA4LjAwI0xpbmtpbmcgbWFuaXB1bGF0aXZlcyBvciBsaW5raW5nIGFjdGl2aXR5IHNldHMgZm9yIGVhcmx5IG1hdGgjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDkuMDAjTWF0aCBnYW1lIGNoaXBzIG9yIHRva2VucyM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4xMC4wMCNOdW1iZXIgY2FyZHMjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMTEuMDAjTnVtYmVyIGZvcm1zIG1vZGVscyBvciBhY2Nlc3NvcmllcyM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4xMi4wMCNQZWdib2FyZHMgZm9yIGVhcmx5IG1hdGgjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMTMuMDAjUGVncyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4xNC4wMCNTb3J0aW5nIG1hbmlwdWxhdGl2ZXMgb3Igc29ydGluZyBhY3Rpdml0eSBzZXRzIGZvciBlYXJseSBtYXRoIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjAwLjAwI0Jhc2ljIG1hdGggb3BlcmF0aW9ucyBhbmQgbnVtZXJhdGlvbiByZXNvdXJjZXMgYW5kIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wMS4wMCNBZGRpdGlvbiBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wMi4wMCNCYXNpYyBvcGVyYXRpb25zIG1vZGVscyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wMy4wMCNCYXNpYyBvcGVyYXRpb25zIHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDQuMDAjRGl2aXNpb24gYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDUuMDAjTXVsdGlwbGljYXRpb24gYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDYuMDAjU3VidHJhY3Rpb24gYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDcuMDAjTnVtYmVyIGRlc2sgdGFwZXMjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDguMDAjSHVuZHJlZHMgY2hhcnRzIG9yIGJvYXJkcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wOS4wMCNIdW5kcmVkcyBudW1iZXIgdGlsZXMjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMTAuMDAjTnVtYmVyIGtpdHMjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMTEuMDAjTnVtYmVyIGxpbmVzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjEyLjAwI051bWJlcmF0aW9uIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjEzLjAwI0RvbWlub2VzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjAwLjAwI1Byb2JhYmlsaXR5IG9yIGNoYW5jZSBvciBkYXRhIG9yIHByb2JsZW0gc29sdmluZyB0ZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wMS4wMCNUd28gc2lkZWQgY291bnRlcnMgb3IgdG9rZW5zIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjAyLjAwI1NwaW5uZXJzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjAzLjAwI0RpY2Ugc2V0cyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wNC4wMCNQcm9iYWJpbGl0eSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wNS4wMCNMb2dpYyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wNi4wMCNBdHRyaWJ1dGUgYmxvY2tzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjA3LjAwI0F0dHJpYnV0ZSBibG9ja3MgYWN0aXZpdHkgY2FyZHMjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDguMDAjQXR0cmlidXRlIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjA5LjAwI0dyYXBoaW5nIG1hdCM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4xMC4wMCNHcmFwaGluZyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4xMS4wMCNMb2dpYyBnYW1lcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4xMi4wMCNBdHRyaWJ1dGUgc2V0cyBvciBraXRzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjEzLjAwI1Byb2JsZW0gc29sdmluZyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4xNC4wMCNQcm9ibGVtIHNvbHZpbmcgYWN0aXZpdHkgY2FyZHMjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDAuMDAjUGF0dGVybmluZyBvciBtYXRjaGluZyBvciBzcGF0aWFsIHBlcmNlcHRpb24gb3IgbG9naWNhbCB0aGlua2luZyB0ZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wMS4wMCNQYXR0ZXJuIGJsb2NrcyBvciBwYXJxdWV0cnkgYmxvY2tzIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjAyLjAwI1BhdHRlcm4gYmxvY2tzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjAzLjAwI1BhdHRlcm4gYmxvY2sgYWN0aXZpdHkgb3IgcGF0dGVybiBjYXJkcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wNC4wMCNQYXR0ZXJuIGJsb2NrIGdhbWVzIG9yIGFjdGl2aXR5IHNldHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDUuMDAjUGF0dGVybiBibG9jayBzdGlja2VycyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wNi4wMCNQYXR0ZXJuIGJsb2NrcyBtaXJyb3IjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDcuMDAjUGF0dGVybiBibG9ja3MgY2hhcnRzIG9yIHBvc3RlcnMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDguMDAjUGFycXVldHJ5IGJsb2NrcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wOS4wMCNQYXJxdWV0cnkgYmxvY2tzIGFjdGl2aXR5IG9yIHBhdHRlcm4gY2FyZHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMTAuMDAjUGFycXVldHJ5IGJsb2NrcyBhY3Rpdml0eSBzZXRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjExLjAwI1RhbmdyYW1zIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjEyLjAwI1RhbmdyYW0gYWN0aXZpdHkgb3IgcGF0dGVybiBjYXJkcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xMy4wMCNUYW5ncmFtIHB1enpsZSBhY3Rpdml0eSBzZXRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjE0LjAwI1RhbmdyYW1zIHB1enpsZXMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMTUuMDAjUGVudG9taW5vZXMgYWN0aXZpdHkgYW5kIHJlc291cmNlIGJvb2tzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjE2LjAwI1BlbnRvbWlub2VzIGFjdGl2aXR5IG9yIHBhdHRlcm4gY2FyZHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMTcuMDAjUGVudG9taW5vZXMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMTguMDAjUGVudG9taW5vZXMgYWN0aXZpdHkgc2V0cyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wMC4wMCNCYXNlIHRlbiBhbmQgcGxhY2UgdmFsdWUgdGVhY2hlciByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjguMDEuMDAjQmFzZSB0ZW4gYmxvY2tzIzYwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjAyLjAwI0Jhc2UgdGVuIG9yIHBsYWNlIHZhbHVlIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjAzLjAwI0Jhc2UgdGVuIG9yIHBsYWNlIHZhbHVlIGFjdGl2aXR5IGNhcmRzIzYwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjA0LjAwI0Jhc2UgdGVuIHJ1YmJlciBzdGFtcHMjNjAuMTAuMjguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjguMDUuMDAjUGxhY2UgdmFsdWUgZ3JpZHMjNjAuMTAuMjguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjguMDYuMDAjUGxhY2UgdmFsdWUgZ2FtZXMgb3IgYWN0aXZpdHkgc2V0cyM2MC4xMC4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wNy4wMCNQbGFjZSB2YWx1ZSBtb2RlbHMgb3IgYWNjZXNzb3JpZXMjNjAuMTAuMjguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDAuMDAjTW9uZXkgYW5kIHRpbWUgdGVhY2hlciByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDEuMDAjTW9uZXkgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDIuMDAjQnVsayBiaWxscyBmb3IgdGhlIGNsYXNzcm9vbSM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wMy4wMCNCdWxrIGNvaW5zIGZvciB0aGUgY2xhc3Nyb29tIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjA0LjAwI0NvaW4gY3ViZXMgb3IgZGljZSM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wNS4wMCNNYWduZXRpYyBtb25leSM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wNi4wMCNPdmVyaGVhZCBiaWxscyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wNy4wMCNPdmVyaGVhZCBjb2lucyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wOC4wMCNNb25leSBwdXp6bGVzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjA5LjAwI01vbmV5IHJ1YmJlciBzdGFtcHMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMTAuMDAjQ29pbiBiYW5rIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjExLjAwI01vbmV5IGdhbWVzIG9yIGtpdHMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMTIuMDAjUGxheSBjYXNoIHJlZ2lzdGVycyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xMy4wMCNNb25leSByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjE0LjAwI1RpbWUgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMTUuMDAjVGltZSBydWJiZXIgc3RhbXBzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjE2LjAwI1RpbWUga2l0cyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xNy4wMCNUaW1lIHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDAuMDAjRnJhY3Rpb25zIGFuZCBwZW50b21pbm9lcyBhbmQgZGVjaW1hbHMgdGVhY2hpbmcgYWlkcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wMS4wMCNGcmFjdGlvbiBjaXJjbGVzIG9yIHNxdWFyZXMjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDIuMDAjRGVjaW1hbCBzcXVhcmVzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjAzLjAwI0ZyYWN0aW9uIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjA0LjAwI0ZyYWN0aW9uIGJhcnMjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDUuMDAjRnJhY3Rpb24gY2hhcnRzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjA2LjAwI0ZyYWN0aW9uIGRpY2UjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDcuMDAjRnJhY3Rpb24gZ2FtZXMjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDguMDAjRnJhY3Rpb24ga2l0cyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wOS4wMCNGcmFjdGlvbiB0aWxlcyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4xMC4wMCNGcmFjdGlvbnMgZGlzY3MjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMTIuMDAjUGVudG9taW5vZXMgYWN0aXZpdHkgYm9vayM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4xMy4wMCNQZW50b21pbm9lcyBwYXR0ZXJuIGNhcmRzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjAwLjAwI0dlb21ldHJ5IHRlYWNoZXIgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjAxLjAwI0dlb21ldHJ5IGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjAyLjAwI0dlb21ldHJ5IGNoYXJ0cyBvciBwb3N0ZXJzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjAzLjAwI0dlb2JvYXJkcyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wNC4wMCNHZW9tZXRyaWMgY29uc3RydWN0aW9uIHNldHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDUuMDAjRG91YmxlIHNpZGVkIGdlb2JvYXJkcyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wNi4wMCNHZW9ib2FyZCBnYW1lcyBvciBhY3Rpdml0eSBraXRzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjA3LjAwI0dlb2JvYXJkIHJ1YmJlciBiYW5kcyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wOC4wMCNHZW9ib2FyZHMgYWN0aXZpdHkgY2FyZHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDkuMDAjR2VvbWV0cmljIGNoYWxrYm9hcmQgZHJhd2luZyBpbnN0cnVtZW50cyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4xMC4wMCNHZW9tZXRyeSByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjExLjAwI0dlb01pcnJvciM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4xMi4wMCNHZW9tZXRyaWMgc29saWRzIG1vZGVscyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMi4wMC4wMCNBbGdlYnJhIHRlYWNoZXIgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMyLjAxLjAwI0FsZ2VicmEgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzIuMDIuMDAjQ2VudGltZXRlciBjdWJlcyM2MC4xMC4zMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMi4wMy4wMCNBbGdlYnJhIG9yIHByZSBhbGdlYnJhIHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzIuMDQuMDAjQWxnZWJyYSBtb2RlbHMgb3IgYWNjZXNzb3JpZXMjNjAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzMuMDAuMDAjUHJlY2FsY3VsdXMgYW5kIGNhbGN1bHVzIHRlYWNoZXIgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMzLjAxLjAwI0NhbGN1bHVzIGFjdGl2aXR5IG9yIHJlc291cmNlcyBib29rcyM2MC4xMC4zMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMy4wMi4wMCNQcmVjYWxjdWx1cyBvciBjYWxjdWx1cyByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMzLjAzLjAwI1ByZWNhbGN1bHVzIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjAwLjAwI0dlb2dyYXBoeSBhbmQgbWFwIHNraWxscyByZXNvdXJjZXMgYW5kIGFjY2Vzc29yaWVzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjAxLjAwI0dvZWdyYXBoeSBjaGFydHMgb3IgcG9zdGVycyM2MC4xMC4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wMi4wMCNDb250aW5lbnRzIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjAzLjAwI0VsZWN0cm9uaWMgc29jaWFsIHN0dWRpZXMgbGVhcm5pbmcgYWlkcyM2MC4xMC4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wNC4wMCNHZW9ncmFwaHkgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wNS4wMCNNYXAgcmFja3MjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDYuMDAjTWFwIHN0ZW5jaWwga2l0cyM2MC4xMC4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wNy4wMCNQb3J0YWJsZSB3YWxsIG1hcHMjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDguMDAjR2VvZ3JhcGh5IHJlc291cmNlIG9yIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM1LjAwLjAwI1BvbGl0aWNhbCBzY2llbmNlIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjM1LjAxLjAwI0Vjb25vbWljcyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4zNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNS4wMi4wMCNHb3Zlcm5tZW50IGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM1LjAzLjAwI0dvdmVybm1lbnQgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4zNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNS4wNC4wMCNTdGF0ZSB0aGVtZSB1bml0cyM2MC4xMC4zNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNi4wMC4wMCNNdWx0aWN1bHR1cmFsIGFjdGl2aXRpZXMgYW5kIHJlc291cmNlcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNi4wMS4wMCNBbmNpZW50IGNpdmlsaXphdGlvbnMgcmVzb3VyY2VzIzYwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM2LjAyLjAwI0N1c3RvbXMgb3Igcml0dWFscyBvciB0cmFkaXRpb25zIHJlc291cmNlcyM2MC4xMC4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNi4wMy4wMCNFdGhuaWMgZGl2ZXJzaXR5IHJlc291cmNlcyM2MC4xMC4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNi4wNC4wMCNHZW5lYWxvZ3kgcmVzb3VyY2VzIzYwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM2LjA1LjAwI011bHRpY3VsdHVyYWwgaG9saWRheXMgcmVzb3VyY2VzIzYwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM2LjA2LjAwI011bHRpY3VsdHVyYWwgdGhlbWUgdW5pdHMjNjAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDAuMDAjRm9yZWlnbiBsYW5ndWFnZXMgcmVzb3VyY2VzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjM3LjAxLjAwI1Jlc291cmNlcyBmb3IgTGVhcm5pbmcgdG8gc3BlYWsgc3BhbmlzaCM2MC4xMC4zNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNy4wMi4wMCNSZXNvdXJjZXMgZm9yIExlYXJuaW5nIHRvIHNwZWFrIGZyZW5jaCM2MC4xMC4zNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNy4wMy4wMCNSZXNvdXJjZXMgZm9yIExlYXJuaW5nIHRvIHNwZWFrIGdlcm1hbiM2MC4xMC4zNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNy4wNC4wMCNSZXNvdXJjZXMgZm9yIExlYXJuaW5nIHRvIHNwZWFrIGVuZ2xpc2gjNjAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDUuMDAjUmVzb3VyY2VzIGZvciBMZWFybmluZyB0byBzcGVhayBsYXRpbiM2MC4xMC4zNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNy4wNi4wMCNSZXNvdXJjZXMgZm9yIExlYXJuaW5nIHRvIHNwZWFrIGl0YWxpYW4jNjAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDAuMDAjSGlzdG9yeSB0ZWFjaGluZyByZXNvdXJjZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDEuMDAjQWZyaWNhbiBoaXN0b3J5IHJlc291cmNlIGJvb2tzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjAyLjAwI0hpc3RvcnkgY2hhcnRzIG9yIHBvc3RlcnMjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDMuMDAjRXVyb3BlYW4gaGlzdG9yeSByZXNvdXJjZSBib29rcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wNC4wMCNIaXN0b3JpY2FsIG1hcHMjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDUuMDAjSGlzdG9yeSB0aGVtZSB1bml0cyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wNi4wMCNIaXN0b3J5IHBob3RvIGNhcmRzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjA3LjAwI0hpc3RvcnkgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDguMDAjV29tYW5zIGhpc3RvcnkgcmVzb3VyY2VzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjA5LjAwI1dvcmxkIGhpc3RvcnkgcmVzb3VyY2VzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjAwLjAwI0xpdmluZyBvcmdhbmlzbXMgYW5kIHByZXNlcnZlZCBzcGVjaW1lbnMgYW5kIHJlbGF0ZWQgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjAxLjAwI0xpdmUgYW1waGliaWEjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDIuMDAjUHJlc2VydmVkIGFtcGhpYmlhIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjAzLjAwI0FtcGhpYmlhIG1vZGVscyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wNC4wMCNGdW5naSBjdWx0dXJlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wNS4wMCNDdWx0dXJlIGtpdHMgb3Igc3VwcGxpZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDYuMDAjUHJvdG96b2FuIGN1bHR1cmVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjA3LjAwI0FxdWFyaWEgcGxhbnRzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjA4LjAwI1RlcnJhcml1bSBwbGFudHMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDkuMDAjTGl2ZSBpbnZlcnRlYnJhdGVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjEwLjAwI1ByZXNlcnZlZCBpbnZlcnRlYnJhdGVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjExLjAwI0xpdmUgdmVydGVicmF0ZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMTIuMDAjUHJlc2VydmVkIHZlcnRlYnJhdGVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjEzLjAwI0xpdmUgcmVwdGlsaWEjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMTQuMDAjUHJlc2VydmVkIHJlcHRpbGxhIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjE1LjAwI0Rpc3NlY3Rpb24ga2l0cyBvciBzdXBwbGllcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xOC4wMCNCaW9zcGhlcmVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjE5LjAwI0Jpb2xvZ3kgZXhwZXJpbWVudCBraXRzIG9yIHN1cHBsaWVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjIwLjAwI1N0YWluaW5nIGtpdHMgb3Igc3VwcGxpZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjEuMDAjUHJlc2VydmVkIGxpZmUgY3ljbGUgc3BlY2ltZW5zIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjIyLjAwI0Jpb2xvZ3kgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yMy4wMCNTa2VsZXRvbiBvciBib25lIG9yIHNoZWxsIHNwZWNpbWVuIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjI0LjAwI0Jpb2xvZ3kgcmVzb3VyY2Ugb3IgYWN0aXZpdHkgYm9va3MjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjUuMDAjQmlvbG9neSBzdHVkeSBvciBhY3Rpdml0eSBraXRzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjI2LjAwI0Jpb2xvZ3kgY2hhcnRzIG9yIHBvc3RlcnMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjcuMDAjUHJlc2VydmVkIHBsYW50IGJvZHkgb3Igb3JnYW4gc3BlY2ltZW5zIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjI4LjAwI0Jpb2xvZ3kgYWN0aXZpdHkgb3IgcGhvdG8gY2FyZHMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjkuMDAjUGxhbnQgbGlmZSBjeWNsZSBzcGVjaW1lbnMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMzAuMDAjQ29tYmluYXRpb24gb3JnYW5pc20gc3BlY2ltZW5zIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjMxLjAwI0FuaW1hbCBib2R5IG9yIGJvZHkgcGFydCBvciBvcmdhbiBzcGVjaW1lbnMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMzIuMDAjRWNvc3lzdGVtIGRpc3BsYXlzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjMzLjAwI0h1bWFuIGJvZHkgb3IgYm9keSBwYXJ0IG9yIG9yZ2FuIHNwZWNpbWVucyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4zNC4wMCNUaXNzdWUgY3VsdHVyZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDAuMDAjQmlvdGVjaG5vbG9neSBhbmQgYmlvIGNoZW1pc3RyeSBhbmQgZ2VuZXRpY3MgYW5kIG1pY3JvYmlvbG9neSBhbmQgcmVsYXRlZCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDEuMDAjRGVveHlyaWJvbnVjbGVpYyBhY2lkIEROQSBtb2RlbHMjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDIuMDAjRGVveHlyaWJvbnVjbGVpYyBhY2lkIEROQSBleHBlcmltZW50IGtpdHMjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDMuMDAjR2VuZXRpYyBib29rcyM2MC4xMC40MC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MC4wNC4wMCNHZW5ldGljIGtpdHMjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDUuMDAjQmFjdGVyaWEgdGVhY2hpbmcga2l0cyM2MC4xMC40MC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MC4wNi4wMCNCYWN0ZXJpYSB0ZXN0aW5nIHN1cHBsaWVzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjA3LjAwI0Vuenltb2xvZ3kga2l0cyBvciBzdXBwbGllcyM2MC4xMC40MC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MC4wOC4wMCNQcm90ZWluIHRlc3Rpbmcga2l0cyBvciBzdXBwbGllcyM2MC4xMC40MC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MS4wMC4wMCNCb2R5IHN5c3RlbXMgYW5kIHJlbGF0ZWQgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQxLjAxLjAwI0JvZHkgbW9kZWxzIzYwLjEwLjQxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQxLjAyLjAwI0NlbGwgbW9kZWxzIzYwLjEwLjQxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQxLjAzLjAwI0NlbGwgdGVhY2hpbmcga2l0cyM2MC4xMC40MS4wMC4wMAotdW5zcHNjNyM2MC4xMC40MS4wNC4wMCNCb2R5IHN5c3RlbXMgdGVhY2hpbmcga2l0cyM2MC4xMC40MS4wMC4wMAotdW5zcHNjNyM2MC4xMC40MS4wNS4wMCNCb2R5IHN5c3RlbXMgdGVhY2hpbmcgYWlkcyM2MC4xMC40MS4wMC4wMAotdW5zcHNjNyM2MC4xMC40Mi4wMC4wMCNXYXRlciB0ZXN0aW5nIGFuZCBjb25zZXJ2YXRpb24gYW5kIGVjb2xvZ3kjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDIuMDEuMDAjV2F0ZXIgdGVzdGluZyBjaGVtaWNhbHMjNjAuMTAuNDIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDIuMDIuMDAjV2F0ZXIgdGVzdGluZyBhbmQgc2FtcGxpbmcga2l0cyM2MC4xMC40Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC40Mi4wMy4wMCNXYXRlciBtb2RlbHMjNjAuMTAuNDIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDIuMDQuMDAjV2F0ZXIgZWNvbG9neSBzdXBwbGllcyM2MC4xMC40Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC40My4wMC4wMCNBc3Ryb25vbXkjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDMuMDEuMDAjQXN0cm9ub215IG1vZGVscyM2MC4xMC40My4wMC4wMAotdW5zcHNjNyM2MC4xMC40My4wMi4wMCNBc3Ryb25vbXkgY2hhcnRzIzYwLjEwLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQzLjAzLjAwI0FzdHJvbm9teSBzdHVkeSBraXRzIzYwLjEwLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjAwLjAwI0dlb2xvZ3kgYW5kIGVhcnRoIHNjaWVuY2UjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDQuMDEuMDAjUm9jayBzcGVjaW1lbiBzZXRzIzYwLjEwLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjAyLjAwI1JvY2sgc3BlY2ltZW5zIzYwLjEwLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjAzLjAwI0Zvc3NpbHMjNjAuMTAuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDQuMDQuMDAjTGFuZGZvcm0gbW9kZWxzIzYwLjEwLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjA1LjAwI0Zvc3NpbCBtb2RlbHMjNjAuMTAuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDQuMDYuMDAjR2VvbG9neSB0b29scyBvciBmaWVsZCM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wNy4wMCNTdHJlYW0gdGFibGVzIzYwLjEwLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjA4LjAwI0dlb2xvZ3kgc3R1ZHkga2l0cyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wMC4wMCNDaGVtaXN0cnkgYW5kIGVsZWN0cm9jaGVtaXN0cnkgYW5kIG1pY3JvY2hlbWlzdHJ5IzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjAxLjAwI1BlcmlvZGljIHRhYmxlIHBvc3RlcnMgb3IgYm9hcmRzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjAyLjAwI0NvbnN1bWVyIGFuYWx5c2lzIGtpdHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDMuMDAjQ2hlbWlzdHJ5IGNsYXNzIGtpdHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDQuMDAjQ2hlbWlzdHJ5IGRlbW9uc3RyYXRpb24ga2l0cyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wNS4wMCNBdG9taWMgbW9kZWxzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjA2LjAwI01vbGVjdWxhciBtb2RlbHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDcuMDAjRWxlY3Ryb2NoZW1pY2FsIGRlbW9uc3RyYXRpb24gdG9vbHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDguMDAjRWxlY3Ryb2NoZW1pY2FsIGtpdHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDkuMDAjRnVlbCBjZWxscyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4xMC4wMCNNaWNyb2NoZW1pc3RyeSBraXRzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjExLjAwI01pY3JvY2hlbWlzdHJ5IHRvb2xzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjAwLjAwI01lY2hhbmljYWwgcGh5c2ljcyBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDEuMDAjRm9yY2UgdGFibGVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjAyLjAwI0dyYXZpdHkgbW9kZWxzIG9yIG1vZGVsIHNldHMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDQuMDAjSW5jbGluZWQgcGxhbmVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjA1LjAwI0ZyaWN0aW9uIGFwcGFyYXR1cyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wNi4wMCNQaHlzaWMgY2FycyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wNy4wMCNQZW5kdWx1bSBhcHBhcmF0dXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDguMDAjVG9ycXVlIGFwcGFyYXR1cyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wOS4wMCNQcm9qZWN0aWxlIGFwcGFyYXR1cyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4xMC4wMCNBaXIgdGFibGVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjExLjAwI0FpciBhcHBhcmF0dXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMTIuMDAjTGlnaHQgb3IgcGhvdG8gYXBwYXJhdHVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjAwLjAwI0VuZXJneSBhbmQgcG93ZXIgcGh5c2ljcyBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDEuMDAjU29sYXIgY29sbGVjdGluZyBkZXZpY2VzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjAyLjAwI1NvbGFyIGtpdHMjNjAuMTAuNDcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDMuMDAjRW5lcmd5IGRlbW9uc3RyYXRpb24ga2l0cyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wNC4wMCNFbmVyZ3kgY2xhc3Mga2l0cyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wNS4wMCNNYXR0ZXIgZGVtb25zdHJhdGlvbiBraXRzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjA2LjAwI01hdHRlciBjbGFzcyBraXRzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjA3LjAwI01vbm9tZXRlcnMjNjAuMTAuNDcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDguMDAjR2FzIGRpZmZ1c2lvbiBhcHBhcmF0dXMjNjAuMTAuNDcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDAuMDAjV2F2ZSBhbmQgc291bmQgcGh5c2ljcyBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDEuMDAjV2F2ZSBnZW5lcmF0b3JzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjAyLjAwI1dhdmUgdGFua3MjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDMuMDAjV2F2ZSBzcHJpbmdzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjA0LjAwI1dhdmUgZGVtb25zdHJhdGlvbiBzZXRzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjA1LjAwI1R1bmluZyBmb3JrcyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wNi4wMCNEb3BwbGVyIGRlbW9uc3RyYXRvcnMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDcuMDAjUmVzb25hbmNlIGFwcGFyYXR1cyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wOC4wMCNTb3VuZCBtZXRlcnMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDkuMDAjV2F2ZSBhcHBhcmF0dXMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMTAuMDAjU3BlY3Ryb3Njb3BlcyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4xMS4wMCNTcGVjdHJ1bSBjaGFydHMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMTIuMDAjTGlnaHQgZGVtb25zdHJhdGlvbiBraXRzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjEzLjAwI0NvbG9yIGNoYXJ0cyBvciBzYW1wbGVzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjE0LjAwI1JhZGlvbWV0ZXIjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMTUuMDAjUmVmbGVjdGlvbiBvciByZWZyYWN0aW9uIGFwcGFyYXR1cyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4xNi4wMCNPcHRpY3Mgc2V0cyBvciBraXRzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjAwLjAwI0VsZWN0cmljYWwgcGh5c2ljcyBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDEuMDAjVmFuIGRlZ3JhZmYgZ2VuZXJhdG9ycyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wMi4wMCNFbGVjdHJvc3RhdGljIGFwcGFyYXR1cyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wMy4wMCNFbGVjdHJvc3RhdGljIGtpdHMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDQuMDAjRWxlY3RyaWNpdHkga2l0cyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wNS4wMCNFbGVjdHJpY2l0eSBkZW1vbnN0cmF0aW9uIGJvYXJkcyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wNi4wMCNCYXR0ZXJ5IGtpdHMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDcuMDAjSGFuZCBoZWxkIGdlbmVyYXRvcnMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDguMDAjRWxlY3Ryb21hZ25ldGljIGFwcGFyYXR1cyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wOS4wMCNNYWduZXRpc20gYXBwYXJhdHVzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjEwLjAwI0VsZWN0cm9tYWduZXRzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjExLjAwI0VsZWN0cmljIGJlbGxzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjEyLjAwI0VsZWN0cmljIGxlYWQgd2lyZXMgb3IgY2FibGVzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjUwLjAwLjAwI051Y2xlYXIgcGh5c2ljcyBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTAuMDEuMDAjUmFkaW9hY3Rpdml0eSBzZXRzIzYwLjEwLjUwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUwLjAyLjAwI0dlaWdlciBjb3VudGVycyM2MC4xMC41MC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MC4wMy4wMCNFbGVjdHJvbiBhcHBhcmF0dXMjNjAuMTAuNTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTAuMDQuMDAjUmFkaWF0aW9uIHdhcm5pbmcgc2lnbnMjNjAuMTAuNTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTAuMDUuMDAjTnVjbGVhciBwaHlzaWNzIHRyYW5zcGFyZW5jaWVzIzYwLjEwLjUwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUwLjA2LjAwI051Y2xlYXIgcGh5c2ljcyBjaGFydHMjNjAuMTAuNTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTEuMDAuMDAjUm9ja2V0cnkgYW5kIGZsaWdodCBtYXRlcmlhbHMgYW5kIHN1cHBsaWVzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUxLjAxLjAwI1JvY2tldCBzZXRzIzYwLjEwLjUxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUxLjAyLjAwI0xhdW5jaGluZyBhcHBhcmF0dXMjNjAuMTAuNTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTEuMDMuMDAjQWx0aXR1ZGUgbWVhc3VyaW5nIGRldmljZXMjNjAuMTAuNTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTEuMDQuMDAjQWlycGxhbmUga2l0cyM2MC4xMC41MS4wMC4wMAotdW5zcHNjNyM2MC4xMC41Mi4wMC4wMCNMaWZlIHNraWxscyByZXNvdXJjZXMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTIuMDEuMDAjQnVpbGRpbmcgbGlzdGVuaW5nIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC41Mi4wMi4wMCNTdHVkeSBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTIuMDMuMDAjVGVzdCBwcmVwYXJhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wMC4wMCNDYXJlZXIgZWR1Y2F0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjAxLjAwI0NhcmVlciBlZHVjYXRpb24gb3IgcGxhbm5pbmcgb3IgZGVjaXNpb24gbWFraW5nIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wMi4wMCNCYXNpYyBqb2Igc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjAzLjAwI0pvYiBzZWFyY2ggc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjA0LjAwI1RpbWUgbWFuYWdlbWVudCBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDUuMDAjSW50ZXJ2aWV3IHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wNi4wMCNSZXN1bWUgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjA3LjAwI1dvcmsgZXRoaWNzIG9yIGF0dGl0dWRlIHRyYWluaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjA4LjAwI1RlYW0gYnVpbGRpbmcgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjA5LjAwI0J1c2luZXNzIGV0aXF1ZXR0ZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wMC4wMCNDb25zdW1lciBlY29ub21pY3MgYW5kIG1vbmV5IG1hbmFnZW1lbnQgYW5kIGluZGVwZW5kZW50IGxpdmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wMS4wMCNQZXJzb25hbCBmaW5hbmNlIG9yIG1vbmV5IG1hbmFnZW1lbnQgZWR1Y2F0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjAyLjAwI1Nob3BwaW5nIG9yIGNvbnN1bWVyIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wMy4wMCNJbmRlcGVuZGVudCBsaXZpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDQuMDAjVW5kZXJzdGFuZGluZyBjb25zdW1lciBjcmVkaXQgb3IgbG9hbnMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDUuMDAjSW5zdXJhbmNlIGNvdmVyYWdlIG9yIGluc3VyYW5jZSBjb21wYXJpc29uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjA2LjAwI0hvbWUgYnV5aW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjA3LjAwI0FwYXJ0bWVudCByZW50YWwgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDguMDAjQ2FyIGJ1eWluZyBlZHVjYXRpb25hbCBhaWRzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjA5LjAwI0JyYW5kIG1hcmtldGluZyBvciBhZHZlcnRpc2luZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xMC4wMCNSZWxhdGlvbnNoaXAgYnVpbGRpbmcgb3IgZmFtaWx5IGxpZmUgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjExLjAwI0RldmVsb3Bpbmcgc2VsZiBjb25jZXB0IGFuZCBzZWxmIGVzdGVlbSBpbnN0dWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjEyLjAwI1Zpb2xlbmNlIGF2b2lkYW5jZSBlZHVjYXRpb24gb3IgdmlvbGVuY2UgcHJldmVudGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xMy4wMCNBbmdlciByZXNvbHV0aW9uIHRyYWluaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjE0LjAwI1RlYWNoaW5nIHBhdGllbmNlIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xNS4wMCNUb2xlcmFuY2UgdHJhaW5pbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTYuMDAjUGVyc29uYWwgc2FmZXR5IGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjE3LjAwI1BlcnNvbmFsIGNvbmZsaWN0IHJlc29sdXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTguMDAjUHJhY3RpY2FsIHRlZW4gYWR2aWNlIGd1aWRlcyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xOS4wMCNEZXZlbG9waW5nIHNvY2lhbCBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjAuMDAjTWFubmVycyBvciBldGlxdWV0dGUgb3IgY291cnRlc3kgaW5zdHJ1Y3Rpb25hbCBhaWRzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjIxLjAwI1VuZGVyc3RhbmRpbmcgb3IgZGVhbGluZyB3aXRoIGN1bHR1cmFsIGRpdmVyc2l0eSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yMi4wMCNIb3cgdG8gcmVhZCBib2R5IGxhbmd1YWdlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjIzLjAwI0RldmVsb3BpbmcgcmVzaWxpZW5jeSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yNC4wMCNVbmRlcnN0YW5kaW5nIGNvbW11bml0eSBzZXJ2aWNlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjI1LjAwI0RldmVsb3BpbmcgcmVmdXNhbCBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjYuMDAjUmVzcG9uc2liaWxpdHkgb3IgRGRlY2lzaW9uIG1ha2luZyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjcuMDAjVW5kZXJzdGFuZGluZyB0ZWVucyBsZWdhbCByaWdodHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjguMDAjUmVwZXJjdXNzaW9ucyBvZiBkcm9wcGluZyBvdXQgb2Ygc2Nob29sIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjI5LjAwI1JhY2UgcmVsYXRpb25zIHZpZGVvcyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NS4wMC4wMCNIb21lIGFuZCBpbnRlcmlvciBkZXNpZ24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTUuMDEuMDAjRmVuZyBzaHVpIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU1LjAyLjAwI0luc3RydWN0aW9uYWwgbWF0ZXJpYWxzIGZvciB1c2luZyBjb2xvciBvciBwYWludCBmb3IgaG9tZSBkZWNvcmF0aW9uIzYwLjEwLjU1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU1LjAzLjAwI0luc3RydWN0aW9uYWwgbWF0ZXJpYWxzIGZvciBob21lIHBsYW5uaW5nIG9yIGRlc2lnbiM2MC4xMC41NS4wMC4wMAotdW5zcHNjNyM2MC4xMC41NS4wNC4wMCNMYW5kc2NhcGluZyBkZXNpZ24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTUuMDUuMDAjSW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMgZm9yIGhvbWUgZGVjb3JhdGluZyBvciBmdXJuaXNoaW5nIzYwLjEwLjU1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjAwLjAwI0hlYWx0aCBlZHVjYXRpb24gYW5kIG51dHJpdGlvbiBhbmQgZm9vZCBwcmVwYXJhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wMS4wMCNEaWV0YXJ5IGd1aWRlbGluZXMgb3IgYmFsYW5jZWQgZGlldHMgZWR1Y2F0aW9uYWwgcmVzb3VyY2VzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjAyLjAwI051dHJpdGlvbmFsIGN1cnJpY3VsdW0gbWVudSBwbGFubmluZyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDMuMDAjVW5kZXJzdGFuZGluZyBudXRyaXRpb24gbGFiZWxpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDQuMDAjRm9vZCBzaG9wcGluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wNS4wMCNIZWFsdGh5IGZvb2QgY2hvaWNlcyBkZW1vbnN0cmF0aW9uIHVuaXRzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjA2LjAwI1VuZGVyc3RhbmRpbmcgdGhlIGVmZmVjdHMgb2YgZGlldGFyeSBmYXQgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDcuMDAjVW5kZXJzdGFuZGluZyB2ZWdldGFyaWFuaXNtIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjA4LjAwI1JlY2lwZSBib29rcyBvciBjb29rIGJvb2tzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjA5LjAwI0VhdGluZyBkaXNvcmRlcnMgZWR1Y2F0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjEwLjAwI1dlaWdodCBjb250cm9sIG9yIGV4ZXJjaXNlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjExLjAwI0tpdGNoZW4gbWVhc3VyZW1lbnRzIG9mIHNvbGlkcyBvciBsaXF1aWRzIGluc3RydWN0aW9uYWwgYWlkcyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xMi4wMCNLaXRjaGVuIGVxdWl2YWxhbnRzIG9yIGtpdGNoZW4gbWF0aCBpbnN0cnVjdGlvbmFsIGFpZHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTMuMDAjS2l0Y2hlbiB1dGVuc2lscyBpbnN0cnVjdGlvbmFsIGFpZHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTQuMDAjS2l0Y2hlbiBzYWZldHkgb3Igc2FuaXRhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xNS4wMCNGb29kIHNhZmV0eSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xNi4wMCNGb29kIHNjaWVuY2UgYWN0aXZpdGllcyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xNy4wMCNDb29raW5nIHNraWxscyBpbnN0cnVjdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xOC4wMCNUYWJsZSBtYW5uZXJzIG9yIGVhdGluZyBldGlxdWV0dGUgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTkuMDAjVGFibGUgc2V0dGluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4yMC4wMCNGb29kIHNlcnZpY2UgdHJhaW5pbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMjEuMDAjRHJ1ZyBvciB0b2JhY2NvIG9yIGFsY29ob2wgYWJ1c2UgZWR1Y2F0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjIyLjAwI1Ntb2tpbmcgU2ltdWxhdG9ycyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4yMy4wMCNVbmRlcnN0YW5kaW5nIGFkZGljdGlvbiBvciBhZGRpY3Rpb24gYXZvaWRhbmNlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjI0LjAwI1RlZW4gZGVwcmVzc2lvbiBzeW1wdG9tcyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4yNS4wMCNUZWVuIHN1aWNpZGUgYXZvaWRhbmNlIHRyYWluaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjI2LjAwI0NvcGluZyB3aXRoIHN0cmVzcyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ny4wMC4wMCNNZW1vcnkgYm9va3MgYW5kIHN1cHBsaWVzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjU3LjAxLjAwI01lbW9yeSBib29rcyM2MC4xMC41Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ny4wMi4wMCNNZW1vcnkgYm9vayBwb3N0cyBvciBleHRlbmRlcnMjNjAuMTAuNTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTcuMDMuMDAjTWVtb3J5IGJvb2sgcGFwZXIjNjAuMTAuNTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTcuMDQuMDAjQWNpZCBmcmVlIG1lbW9yeSBib29rIGdsdWUgc3RpY2tzIzYwLjEwLjU3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU3LjA1LjAwI0FjaWQgZnJlZSBtZW1vcnkgYm9vayB0YXBlIzYwLjEwLjU3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjAwLjAwI0Nsb3RoaW5nIGFuZCB0ZXh0aWxlIGRlc2lnbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wMS4wMCNTZXdpbmcgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjAyLjAwI1Nld2luZyBwcm9qZWN0IG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wMy4wMCNVbmRlcnN0YW5kaW5nIGNsb3RoaW5nIGNvbnN0cnVjdGlvbiBvciB3b3JrbWFuc2hpcCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wNC4wMCNDbG90aGluZyBkZXNpZ24gb3IgZmFzaGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wNS4wMCNQZXJzb25hbCBjb2xvciBhbmFseXNpcyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wNi4wMCNGYXNoaW9uIG1lcmNoYW5kaXNpbmcgb3IgcmV0YWlsIGZ1bmRhbWVudGFscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wNy4wMCNTY2llbmNlIG9mIGZhYnJpY3Mgb3IgZmliZXJzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjA4LjAwI0Nsb3RoaW5nIGNhcmUgb3IgbWFpbnRlbmFuY2Ugb3IgbGF1bmRlcmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wOS4wMCNNYXRlcmlhbHMgZm9yIHRlYWNoaW5nIHRoZSBhcnQgb2YgZGVzaWduIGNvbG9yIG9uIGZhYnJpYyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4xMC4wMCNGYWJyaWMgZHllcyBvciBwYWludHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMTEuMDAjUXVpbHRpbmcgcHJvamVjdHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDAuMDAjRGF0aW5nIGFuZCBzZXggYW5kIHRlZW4gcHJlZ25hbmN5IGFuZCBwYXJlbnRpbmcgc2tpbGxzIGFuZCBjaGlsZCBkZXZlbG9wbWVudCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wMS4wMCNTZXggZWR1Y2F0aW9uIG9yIHNleHVhbGx5IHRyYW5zbWl0dGVkIGRpc2Vhc2UgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDIuMDAjUHJlbmF0YWwgbnV0cml0aW9uIHJlc291cmNlcyBvciBmZXRhbCBhYnVzZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wMy4wMCNQYXJlbnRpbmcgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjA0LjAwI0NoaWxkIGRldmVsb3BtZW50IGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjA1LjAwI1VuZGVyc3RhbmRpbmcgZGF0ZSByYXBlIG9yIGRhdGluZyBza2lsbHMgb3IgaGFyYXNzbWVudCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wNi4wMCNDaGlsZGJpcnRoIGVkdWNhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wNy4wMCNQcmVnbmFuY3kgZnJvbSBjb25jZXB0aW9uIHRocm91Z2ggYmlydGggaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDguMDAjVW5kZXJzdGFuZGluZyB0aGUgcmlza3Mgb2YgYmlydGggZGVmZWN0cyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wOS4wMCNQcmVnbmFuY3kgc2ltdWxhdG9ycyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xMC4wMCNJbmZhbnQgc2ltdWxhdG9ycyBhbmQgYWNjZXNzb3JpZXMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTEuMDAjSW5mYW50IGNhcmUgdHJhaW5pbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTIuMDAjVW5kZXJzdGFuZGluZyBwaHlzaWNhbCBvciBlbW90aW9uYWwgY2hpbGQgYWJ1c2UgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTMuMDAjRGlzY2lwbGluZSBza2lsbCBlZHVjYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMgZm9yIHBhcmVudHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTQuMDAjSG9tZSBzYWZldHkgb3IgY2hpbGRwcm9vZmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xNS4wMCNDYXJkaW8gcHVsbW9uYXJ5IHJlc3VzaXRhdGlvbiBvciAgYmFzaWMgbGlmZSBzdXBwb3J0IGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjE2LjAwI1VuZGVyc3RhbmRpbmcgY2hpbGRob29kIGlsbG5lc3NlcyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xNy4wMCNVbmRlcnN0YW5kaW5nIGF0dGVudGlvbiBkZWZpY2l0IGh5cGVyYWN0aXZpdHkgZGlzb3JkZXIgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTguMDAjQ2hpbGQgY2FyZWdpdmVyIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjE5LjAwI0JhYnlzaXR0aW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjYwLjAwLjAwI0N1cnJpY3VsdW0gZ3VpZGVzIGFuZCBwcm9qZWN0cyBhbmQgYWN0aXZpdGllcyBhbmQgbGVzc29ucyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC42MC4wMS4wMCNNaWRkbGUgc2Nob29sIGN1cnJpY3VsdW0gcmVzb3VyY2Ugb3IgaWRlYSBib29rcyM2MC4xMC42MC4wMC4wMAotdW5zcHNjNyM2MC4xMC42MC4wMi4wMCNIaWdoIFNjaG9vbCBjdXJyaWN1bHVtIHJlc291cmNlIG9yIGlkZWEgYm9va3MjNjAuMTAuNjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjAuMDMuMDAjSG9tZSBlY29ub21pY3MgaW5kZXBlbmRlbnQgc3R1ZHkgcHJvamVjdHMjNjAuMTAuNjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjAuMDQuMDAjSG9tZSBlY29ub21pY3MgcHJvamVjdHMgb3IgYWN0aXZpdGllcyByZXNvdXJjZXMgb3IgZ3VpZGVzIzYwLjEwLjYwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYxLjAwLjAwI1ZvY2F0aW9uYWwgdGVhY2hpbmcgYWlkcyBhbmQgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYxLjAxLjAwI0F1dG9tb3RpdmUgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjEuMDIuMDAjQ29uc3RydWN0aW9uIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYxLjAzLjAwI0RyYWZ0aW5nIG9yIGRlc2lnbiB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42MS4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wNC4wMCNFbGVjdHJvbmljcyBvciBlbGVjdHJpY2l0eSB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42MS4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wNS4wMCNHcmFwaGljIGFydHMgb3IgcGhvdG9ncmFwaHkgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjEuMDYuMDAjSG9ydGljdWx0dXJlIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYxLjA3LjAwI01hbnVmYWN0dXJpbmcgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDAuMDAjVGVjaG5vbG9neSB0ZWFjaGluZyBhaWRzIGFuZCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDEuMDAjQWdyaWN1bHR1cmUgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDIuMDAjQmlvdGVjaG5vbG9neSB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wMy4wMCNDb21tdW5pY2F0aW9ucyB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wNC4wMCNDb21wdXRlciBzY2llbmNlIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjA1LjAwI0VuZXJneSBvciBwb3dlciB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wNi4wMCNFbnZpcm9ubWVudGFsIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjA3LjAwI01hdGVyaWFscyB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wOC4wMCNNZWRpY2FsIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjA5LjAwI1RyYW5zcG9ydGF0aW9uIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYzLjAwLjAwI0ZvcmVuc2ljIHNjaWVuY2UgdGVhY2hpbmcgZXF1aXBtZW50IGFuZCBzdXBwbGllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC42My4wMS4wMCNGb3JlbnNpYyBzY2llbmNlIGtpdHMjNjAuMTAuNjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjQuMDAuMDAjRWxlY3Ryb25pY3MgdGVhY2hpbmcgc3VwcGxpZXMgYW5kIGVxdWlwbWVudCM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC42NC4wMS4wMCNFbGVjdHJvbmljcyBraXRzIzYwLjEwLjY0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjY0LjAyLjAwI0VsZWN0cm9uaWNzIHRlYWNoaW5nIHN1cHBsaWVzIzYwLjEwLjY0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjY0LjAzLjAwI0ZvcmVuc2ljIHNjaWVuY2UgdGVhY2hpbmcgc3VwcGxpZXMjNjAuMTAuNjQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMDAuMDAuMDAjQ2xhc3Nyb29tIGRlY29yYXRpdmVzIGFuZCBzdXBwbGllcyM2MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMC4wMC4wMCNDbGFzc3Jvb20gQ2hhcnRzIG9yIGNsYXNzcm9vbSBwb3N0ZXJzIzYwLjExLjAwLjAwLjAwCi11bnNwc2M3IzYwLjExLjEwLjAxLjAwI0NoYXJ0IHBhY2tzIzYwLjExLjEwLjAwLjAwCi11bnNwc2M3IzYwLjExLjEwLjAyLjAwI0NsYXNzcm9vbSBjaGFydHMjNjAuMTEuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTAuMDMuMDAjQ2xhc3Nyb29tIHBvc3RlcnMgb3Igc2V0cyM2MC4xMS4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMC4wNC4wMCNEbyBpdCB5b3Vyc2VsZiBwb3N0ZXJzIzYwLjExLjEwLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjAwLjAwI0J1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDEuMDAjQmlnIGJ1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDIuMDAjQ2FsZW5kYXIgYnVsbGV0aW5nIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDMuMDAjRWFybHkgY2hpbGRob29kIGJ1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDQuMDAjTGFuZ3VhZ2UgYnVsbGV0aW4gYm9hcmQgc2V0cyM2MC4xMS4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wNS4wMCNNYXRoIGJ1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDYuMDAjTXVsdGlwdXJwb3NlIGJ1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDcuMDAjU2NpZW5jZSBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjA4LjAwI1NlYXNvbmFsIGJ1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDkuMDAjU29jaWFsIHN0dWRpZXMgYnVsbGV0aW4gYm9hcmQgc2V0cyM2MC4xMS4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMi4wMC4wMCNCdWxsZXRpbiBib2FyZCBib3JkZXJzIGFuZCB0cmltbWVycyM2MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMi4wMS4wMCNDbGFzc3Jvb20gYmFubmVycyM2MC4xMS4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMi4wMi4wMCNCb3JkZXIgcGFja3MjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDMuMDAjQ2xhc3Nyb29tIGhlYWRlcnMjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDQuMDAjQ29ycmlndWF0ZWQgYm9yZGVycyBvciB0cmltbWVycyM2MC4xMS4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMi4wNS4wMCNEaWUgY3V0IHNoYXBlZCBzY2FsbG9wZWQgYm9yZGVycyBvciB0cmltbWVycyM2MC4xMS4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMi4wNi4wMCNTcGFya2xlIGJvcmRlcnMgb3IgdHJpbW1lcnMjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDcuMDAjU3RyYWlnaHQgYm9yZGVycyBvciB0cmltbWVycyM2MC4xMS4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMi4wOC4wMCNCb3JkZXIgb3IgVHJpbW1lciBzdG9yYWdlIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEzLjAwLjAwI0RlY29yYXRpdmUgbGV0dGVycyBhbmQgbnVtYmVycyM2MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wMS4wMCNMZXR0ZXJlZCBvciBudW1iZXJlZCBibG9ja3MjNjAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTMuMDIuMDAjQ2FzdWFsIGxldHRlcnMgb3IgbnVtYmVycyM2MC4xMS4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wMy4wMCNJdGFsaWMgbGV0dGVycyBvciBudW1iZXJzIzYwLjExLjEzLjAwLjAwCi11bnNwc2M3IzYwLjExLjEzLjA0LjAwI1NlbGYgYWRoZXNpdmUgbGV0dGVycyBvciBudW1iZXJzIzYwLjExLjEzLjAwLjAwCi11bnNwc2M3IzYwLjExLjEzLjA1LjAwI1NwYXJrbGUgbGV0dGVycyBvciBudW1iZXJzIzYwLjExLjEzLjAwLjAwCi11bnNwc2M3IzYwLjExLjEzLjA2LjAwI1RyYWNpbmcgbGV0dGVycyBvciBudW1iZXJzIzYwLjExLjEzLjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjAwLjAwI1NwZWNpYWx0eSBkZWNvcmF0aXZlcyBmb3IgdGhlIGNsYXNzcm9vbSBhbmQgZGVjb3JhdGl2ZSBhY2Nlc3NvcmllcyM2MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wMS4wMCNDbGFzc3Jvb20gZGVjb3JhdGl2ZSBraXRzIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjAyLjAwI0Rvb3IgZGVjb3JhdGlvbnMjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDMuMDAjTW9iaWxlcyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wNC4wMCNUd28gc2lkZWQgZGVjb3JhdGlvbnMjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDUuMDAjV2luZG93IGNsaW5nIGRlY29yYXRpb25zIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjA3LjAwI0RlY29yYXRpdmUgU3RvcmFnZSBTeXN0ZW1zIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjA4LjAwI0RlY29yYXRpdmUgdGFwZXMgb3IgdHdpc3RzIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjA5LjAwI0RlY29yYXRpdmUgYnV0dG9ucyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4xMC4wMCNEZWNvcmF0aXZlIHNoYXBlcyBvciBzdHJpbmdzIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjAwLjAwLjAwI0FydHMgYW5kIGNyYWZ0cyBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIGFuZCBzdXBwbGllcyM2MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wMC4wMCNBcnQjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDEuMDAjUGFpbnRpbmdzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjAyLjAwI1NjdWxwdHVyZXMjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDMuMDAjU3RhdHVhcnkjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDQuMDAjUG9ydHJhaXRzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjA1LjAwI0RyYXdpbmdzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjA2LjAwI1BpY3R1cmVzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjA3LjAwI0xpdGhvZ3JhcGhzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjA4LjAwI1Bvc3RlcnMjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDkuMDAjRGVjb3JhdGl2ZSBwb3QjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMTAuMDAjU2Nyb2xscyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4xMS4wMCNQaG90b2dyYXBocyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wMC4wMCNDYW52YXNlcyBhbmQgZmlsbXMgYW5kIGJvYXJkcyBhbmQgYXJ0aXN0cyBwYXBlcnMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDEuMDAjU3VscGhpdGUgZHJhd2luZyBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wMi4wMCNHcm91bmR3b29kIGRyYXdpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDMuMDAjVHJhY2luZyBvciB2ZWxsdW0gZHJhd2luZyBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wNC4wMCNCb25kIGRyYXdpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDUuMDAjQ2hhcmNvYWwgb3IgcGFzdGVsIGRyYXdpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDYuMDAjQnJpc3RvbCBkcmF3aW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjA3LjAwI1dhdGVyY29sb3IgcGFwZXIgc2hlZXRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjA4LjAwI1dhdGVyY29sb3IgcGFwZXIgcGFkcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wOS4wMCNXYXRlcmNvbG9yIHBhcGVyIGJsb2NrcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xMC4wMCNGaW5nZXIgcGFpbnQgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTEuMDAjU3VscGhpdGUgY29uc3RydWN0aW9uIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjEyLjAwI0dyb3VuZHdvb2QgY29uc3RydWN0aW9uIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjEzLjAwI0ZvaWwgY29uc3RydWN0aW9uIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjE0LjAwI09yaWdhbWkgY3JhZnQgcGFwZXJzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjE1LjAwI1BhcGVyIG9yIHBsYXN0aWMgQ29uZmV0dGkjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTYuMDAjQ3JlcGUgcGFwZXIgZm9yIGNyYWZ0cyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xNy4wMCNDcmFmdCB0aXNzdWUgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTguMDAjQ29ycnVnYXRlZCBjcmFmdCBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xOS4wMCNQYXR0ZXJuIHByaW50ZWQgY3JhZnQgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjAuMDAjU2VsZiBhZGhlc2l2ZSBjcmFmdCBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yMS4wMCNHbG93IGluIHRoZSBkYXJrIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjIzLjAwI0hhbmQgbWFkZSBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yNC4wMCNLcmFmdCBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yNS4wMCNDYW52YXMgcGFuZWxzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjI2LjAwI1ByZXN0cmV0Y2hlZCBjYW52YXMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjcuMDAjUHJpbWVkIGNhbnZhcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yOC4wMCNVbnByaW1lZCBjYW52YXMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjkuMDAjTWFzb25pdGUgcGFuZWxzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjMwLjAwI0NhbnZhcyBsaWtlIHBhcGVyIHBhZHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzEuMDAjSmFwYW5lc2UgcHJpbnRtYWtpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzIuMDAjTGl0aG9ncmFwaHkgb3IgaW50YWdsaW8gcHJpbnRtYWtpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzMuMDAjQmxvY2twcmludGluZyBwcmludG1ha2luZyBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zNC4wMCNGb2lsIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjM1LjAwI0FjZXRhdGUgb3IgdmlueWwgb3IgcG9seWVzdGVyIGZpbG1zIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjM2LjAwI0NlbGxvcGhhbmUgZmlsbXMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzcuMDAjQWNyeWxpYyBzaGVldHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzguMDAjSWxsdXN0cmF0aW9uIGJvYXJkcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zOS4wMCNNYXQgYm9hcmRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjQwLjAwI01vdW50aW5nIGJvYXJkIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjQxLjAwI0ZvYW0gY29yZSBtb3VudGluZyBib2FyZCM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS40Mi4wMCNUYWdib2FyZCBvciByYWlscm9hZCBib2FyZCM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS40My4wMCNEaXNwbGF5IGJvYXJkIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjQ0LjAwI1NjcmF0Y2ggYXJ0IHBhcGVycyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS40NS4wMCNTY3JhdGNoIGFydCBib2FyZHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuNDYuMDAjU2NyYXRjaCBhcnQgYWNjZXNzb3JpZXMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDAuMDAjQ2xhc3Nyb29tIGFuZCBmaW5lIGFydCBwYWludCBhbmQgbWVkaXVtcyBhbmQgYXBwbGljYXRvcnMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjAxLjAwI1RyYWRpdGlvbmFsIGxpcXVpZCB0ZW1wZXJhIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjAyLjAwI0NvbnRlbXBvcmFyeSBsaXF1aWQgdGVtcGVyYSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wMy4wMCNQb3dkZXJlZCB0ZW1wZXJhIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjA0LjAwI1dhc2hhYmxlIHRlbXBlcmEgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDUuMDAjVGVtcGVyYSBjYWtlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wNi4wMCNMaXF1aWQgZmFjZSBvciBib2R5IHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjA3LjAwI0Nha2UgZmFjZSBvciBib2R5IHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjA4LjAwI01hcmtlciBmYWNlIG9yIGJvZHkgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDkuMDAjVGVtcG9yYXJ5IHRhdHRvbyBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xMC4wMCNXYXNoYWJsZSBmaW5nZXIgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTEuMDAjU2Nob29sIHN0eWxlIGFjcnlsaWMgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTIuMDAjQWNyeWxpYyBhaXJicnVzaCBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xMy4wMCNTeW50aGV0aWMgaGVhdCB0cmVhdGVkIG9pbCBwYWludCBvciBtZWRpdW1zIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjE0LjAwI1dhdGVyIHNvbHVibGUgb2lsIHBhaW50IG9yIG1lZGl1bXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTUuMDAjTG93IHZpc2Nvc2l0eSByZW1vdmFibGUgZ2xhc3Mgb3IgY2VyYW1pYyBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xNi4wMCNMb3cgdmlzY29zaXR5IHBlcm1hbmVudCBnbGFzcyBvciBjZXJhbWljIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjE3LjAwI0hpZ2ggdmlzY29zaXR5IEdlbCByZW1vdmFibGUgZ2xhc3Mgb3IgY2VyYW1pYyBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xOC4wMCNIaWdoIHZpc2Nvc2l0eSBHZWwgcGVybWFuZW50IGdsYXNzIG9yIGNlcmFtaWMgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTkuMDAjT3ZlbiBiYWtlZCBnbGFzcyBvciBjZXJhbWljIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjIwLjAwI01hcmtlciBkZWxpdmVyeSBzeXN0ZW0gZ2xhc3Mgb3IgY2VyYW1pYyBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yMS4wMCNQYW4gd2F0ZXJjb2xvciBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yMi4wMCNUdWJlIHdhdGVyY29sb3IgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjMuMDAjTGlxdWlkIHdhdGVyY29sb3IgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjQuMDAjTGlxdWlkIHdhdGVyY29sb3IgZnJpc2tldCBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yNS4wMCNXYXRlcmNvbG9yIHBhaW50aW5nIG1lZGl1bXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjYuMDAjV2F0ZXJjb2xvciBicnVzaGVzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjI3LjAwI09yaWVudGFsIGJydXNoZXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjguMDAjVXRpbGl0eSBicnVzaGVzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjI5LjAwI1NwZWNpYWx0eSBicnVzaGVzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjMwLjAwI0Vhc2VsIGJydXNoZXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzEuMDAjUGFsZXR0ZSBrbml2ZXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzIuMDAjQnJheWVycyBmb3IgaGFuZCBwcmludGluZyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zMy4wMCNTcG9uZ2Ugc3RhbXBzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjM0LjAwI1NjcmFwZXJzIGZvciBwYWludCBhcHBsaWNhdGlvbiM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zNS4wMCNQaXBldHRlcyBmb3IgcGFpbnQgb3IgZHllIG1peGluZyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zNi4wMCNDb21icyBvciB0b29scyBmb3IgcGFpbnQgb3IgaW5rIGFwcGxpY2F0aW9uIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjM3LjAwI1BhbGV0dGVzIGZvciBwYWludCBvciBpbmsgbWl4aW5nIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjM4LjAwI1BhaW50IHBvdHMgZm9yIHBhaW50IHN0b3JhZ2Ugb3IgbWl4aW5nIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjM5LjAwI1BhaW50IGN1cHMgb3IgYm90dGxlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40MS4wMCNCcnVzaCBvciB0b29sIGNsZWFuZXJzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjQyLjAwI1BhaW50IGFwcm9ucyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40My4wMCNBcnRpc3RzIFNtb2NrcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40NC4wMCNTdHJldGNoZXIgc3RyaXBzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjQ1LjAwI0NhbnZhcyBzdHJldGNoZXJzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjQ2LjAwI01ldGFsIGVhc2VscyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40Ny4wMCNXb29kIGVhc2VscyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40OC4wMCNUYWJsZSB0b3AgZWFzZWxzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjQ5LjAwI1ByZXNlbnRhdGlvbiBlYXNlbHMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTMuMDAuMDAjQXJ0IGFuZCBjcmFmdCBjdXR0aW5nIHByb2R1Y3RzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjAxLjAwI0d1aWxsb3RpbmUgcGFwZXIgdHJpbW1lcnMjNjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTMuMDIuMDAjTWF0IGN1dHRlciM2MC4xMi4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMy4wMy4wMCNNYXQga25pdmVzIzYwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjA0LjAwI0FydGlzdCBrbml2ZXMjNjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTMuMDUuMDAjUm90YXJ5IHBhcGVyIG9yIGZhYnJpYyBjdXR0ZXIjNjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTMuMDYuMDAjQ2lyY2xlIG9yIG92YWwgcGFwZXIgY3V0dGVycyM2MC4xMi4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wMC4wMCNQaWN0dXJlIEZyYW1pbmcjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDEuMDAjUHJlIGFzc2VtYmxlZCB3b29kIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjAyLjAwI1dvb2Qgc2VjdGlvbiBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wMy4wMCNQcmUgYXNzZW1ibGVkIG1ldGFsIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjA0LjAwI01ldGFsIHNlY3Rpb24gcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDUuMDAjQWRqdXN0YWJsZSBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wNi4wMCNQbGFzdGljIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjA3LjAwI0NsZWFyIGJveCBwaWN0dXJlIGZyYW1lIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjA4LjAwI1BvaW50IGRyaXZlcnMgb3IgYWNjZXNzb3JpZXMgZm9yIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjA5LjAwI01pdHJlIGJveCM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4xMC4wMCNQaWN0dXJlIEhhbmdpbmcgZGV2aWNlcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4xMS4wMCNBY3J5bGljIHBhbmVscyBmb3IgcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMTIuMDAjR2xhc3MgcGFuZWxzIGZvciBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wMC4wMCNEcmF3aW5nIHRvb2xzIGFuZCBzdXBwbGllcyBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDEuMDAjV2F0ZXIgYmFzZWQgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wMi4wMCNTb2x2ZW50IGJhc2VkIG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDMuMDAjV2FzaGFibGUgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wNC4wMCNDYWxsaWdyYXBoeSBtYXJrZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjA1LjAwI0ZhYnJpYyBtYXJrZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjA2LjAwI01ldGFsbGljIG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDcuMDAjVGVtcGVyYSBvciBjaGFsayB3aW5kb3cgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wOC4wMCNQYWludCBtYXJrZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjA5LjAwI1dheCBiYXNlZCBjcmF5b25zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjEwLjAwI1NveSBiYXNlZCBjcmF5b25zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjExLjAwI1NwZWNpYWx0eSBjcmF5b25zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjEyLjAwI1dhdGVyY29sb3IgY3JheW9ucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xMy4wMCNEcnkgcGFzdGVsIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjE0LjAwI0NoYWxrIHBhc3RlbCM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xNS4wMCNPaWwgYmFzZWQgcGFzdGVsIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjE2LjAwI0NvbXByZXNzZWQgY2hhcmNvYWwjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTcuMDAjVmluZSBjaGFyY29hbCM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xOC4wMCNHcmFwaGl0ZSBwZW5jaWxzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjE5LjAwI1dheCBiYXNlZCBjb2xvcmVkIGRyYXdpbmcgcGVuY2lscyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4yMC4wMCNDaGFyY29hbCBwZW5jaWxzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjIxLjAwI1dhdGVyY29sb3IgcGVuY2lscyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4yMi4wMCNXYXRlcmJhc2VkIHBlbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjMuMDAjUGVybWFuZW50IHBlbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjQuMDAjR2VsIHBlbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjUuMDAjVGVjaG5pY2FsIHBlbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjYuMDAjQ2FsbGlncmFwaHkgcGVucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4yOC4wMCNXYXRlciBiYXNlZCBkcmF3aW5nIGluayM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4yOS4wMCNTb2x2ZW50IGJhc2VkIGRyYXdpbmcgaW5rIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjMwLjAwI0NhbGxpZ3JhcGh5IGRyYXdpbmcgaW5rIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjMxLjAwI1BpbmsgcGVuY2lsIGVyYXNlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMzIuMDAjS25lYWRlZCBlcmFzZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjMzLjAwI1ZpbnlsIGVyYXNlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMzQuMDAjUGxhc3RpYyBlcmFzZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjM1LjAwI0d1bSBlcmFzZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE2LjAwLjAwI1N0dWRpbyBhaWRzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE2LjAxLjAwI1dvb2QgTWFubmVxdWlucyM2MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNi4wMi4wMCNDbGVhciBhY3J5bGljIG1pcnJvcnMgb3IgcGFuZWxzIzYwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE2LjAzLjAwI1BsYXN0aWMgUnViYmluZyBwbGF0ZXMjNjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTYuMDQuMDAjU3R1ZGlvIGFpZCBhY2Nlc3NvcmllcyM2MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNi4wNS4wMCNBbmF0b21pY2FsIG1vZGVscyM2MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wMC4wMCNQcmludG1ha2luZyBzdXBwbGllcyBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDEuMDAjUnViYmVyIHN0YW1waW5nIHN0YW1wcyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wMi4wMCNSdWJiZXIgc3RhbXBpbmcgc3RhbXAgcGFkcyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wMy4wMCNSdWJiZXIgc3RhbXBpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDQuMDAjTGlub2xldW0gZm9yIGJsb2NrIHByaW50aW5nIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjA1LjAwI1dvb2QgYmxvY2tzIGZvciBwcmludGluZyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wNi4wMCNTeW50aGV0aWMgYmxvY2tzIGZvciBwcmludGluZyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wNy4wMCNCbG9jayBwcmludGluZyBhY2Nlc3NvcmllcyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wOC4wMCNJbnRhZ2xpbyBvciBsaXRob2dyYXBoeSBwbGF0ZXMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDkuMDAjSW50YWdsaW8gb3IgbGl0aG9ncmFwaHkgYmxhbmtldHMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMTAuMDAjSW50YWdsaW8gb3IgbGl0aG9ncmFwaHkgd2lwZXMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMTEuMDAjSW50YWdsaW8gb3IgbGl0aG9ncmFwaHkgaG90IHBsYXRlcyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4xMi4wMCNJbnRhZ2xpbyBvciBsaXRob2dyYXBoeSBwcmludGluZyBwcmVzc2VzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjEzLjAwI1ByaW50aW5nIEJhcmVucyBhbmQgQnJheWVycyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4xNC4wMCNJbnRhZ2xpbyBFdGNoaW5nIG9yIGVuZ3JhdmluZyB0b29scyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4xNS4wMCNTaWxrc2NyZWVuIHNjcmVlbnMgb3IgcHJpbnRpbmcgc3RhdGlvbnMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMTYuMDAjU2lsa3NjcmVlbiBhY2Nlc3NvcmllcyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wMC4wMCNQcmludGluZyBhbmQgZHJhd2luZyBpbmtzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjAxLjAwI1dhdGVyIGJhc2VkIHBvc3RlciBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjAyLjAwI1dhdGVyIGJhc2VkIGFjcnlsaWMgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wMy4wMCNPaWwgYmFzZWQgc2lsa3NjcmVlbiBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjA0LjAwI1dhdGVyIGJhc2VkIFRleHRpbGUgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wNS4wMCNPaWwgYmFzZWQgdGV4dGlsZSBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjA2LjAwI1ByaW50bWFraW5nIHN1YmxpbWF0aW9uIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDcuMDAjT2lsIGJhc2VkIGludGFnbGlvIG9yIGxpdGhvZ3JhcGh5IGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDguMDAjT2lsIGJhc2VkIG1vbm9wcmludCBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjA5LjAwI1dhdGVyIGJhc2VkIG1vbm9wcmludCBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjEwLjAwI1dhdGVyIGJhc2VkIGRyYXdpbmcgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4xMS4wMCNTb2x2ZW50IGJhc2VkIGRyYXdpbmcgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4xMi4wMCNDYWxsaWdyYXBoeSBkcmF3aW5nIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMTMuMDAjU2lsa3NjcmVlbiBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjAwLjAwI0FydCBmYWJyaWMgYW5kIGZhYnJpYyBkZWNvcmF0aW9uIG1hdGVyaWFscyBhbmQgc3VwcGxpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDEuMDAjTXVzbGluIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjAyLjAwI0ZlbHQjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDMuMDAjQ3JhZnQgZnVyIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjA0LjAwI0NvdHRvbiBibGVuZHMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDUuMDAjQ2FudmFzIGltcHJpbnRhYmxlcyM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wNi4wMCNQcmUgc2Vuc2l0aXplZCBpbXByaW50YWJsZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDcuMDAjQ290dG9uIGltcHJpbnRhYmxlcyM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wOC4wMCNCbGVuZGVkIGltcHJpbnRhYmxlcyM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wOS4wMCNCYXRpayB3YXhlcyM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4xMC4wMCNCYXRpayBhY2Nlc3NvcmllcyM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4xMS4wMCNCYXRpayBmYWJyaWMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDAuMDAjU2V3aW5nIGFuZCBzdGl0Y2hlcnkgYW5kIHdlYXZpbmcgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wMS4wMCNXZWF2aW5nIG9yIHRhcGVzdHJ5IG5lZWRsZXMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDIuMDAjV2VhdmluZyBhY2Nlc3NvcmllcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wMy4wMCNIYW5kIHNld2luZyBuZWVkbGVzIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjA0LjAwI1N0cmluZyBhcnQga2l0cyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wNS4wMCNIYW5kIGxvb21zIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjA2LjAwI1RhYmxlIGxvb21zIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjA3LjAwI0Zsb29yIGxvb21zIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjA4LjAwI1JleGxhY2UjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDkuMDAjTGFjaW5nIG9yIHN0cmluZ2luZyBhY2Nlc3NvcmllcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMS4wMC4wMCNDYW5kbGVtYWtpbmcjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjEuMDEuMDAjQ2FuZGxlbWFraW5nIHdpY2tzIzYwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIxLjAyLjAwI0NhbmRsZW1ha2luZyBmb3JtcyM2MC4xMi4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMS4wMy4wMCNDYW5kbGVtYWtpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjIuMDAuMDAjV29vZCBjcmFmdHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjIuMDEuMDAjV29vZCBjcmFmdCBtYXRlcmlhbHMjNjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjIuMDIuMDAjRmluaXNoaW5nIG1hdGVyaWFscyM2MC4xMi4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMi4wMy4wMCNXb29kIGJ1cm5pbmcgdG9vbHMjNjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjIuMDQuMDAjQ2FydmluZyB0b29scyM2MC4xMi4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMy4wMC4wMCNCYXNrZXRyeSBtYWtpbmcgc3VwcGxpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjMuMDEuMDAjQmFza2V0cnkgcmVlZCM2MC4xMi4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMy4wMi4wMCNCYXNrZXRyeSBwcm9qZWN0IGtpdHMjNjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjQuMDAuMDAjU3RhaW5lZCBnbGFzcyBtYWtpbmcgc3VwcGxpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjQuMDEuMDAjU3RhaW5lZCBHbGFzcyBmcmFnbWVudHMjNjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjQuMDIuMDAjU3RhaW5lZCBnbGFzcyB0b29scyBvciBhY2Nlc3NvcmllcyM2MC4xMi4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wMC4wMCNQYXBlciBjcmFmdHMgYW5kIGhhbmQgbWFkZSBwYXBlcm1ha2luZyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wMS4wMCNQYXBlciBzaGFwaW5nIHRvb2xzIzYwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI1LjAyLjAwI1BhcGVyIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI1LjAzLjAwI1BhcGVyIHBsYXRlcyBvciB0cmF5cyM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wNC4wMCNQYXBlciBmaWx0ZXJzIzYwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI1LjA1LjAwI0NvcnJ1Z2F0ZWQgY2FyZGJvYXJkIHNoYXBlcyM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wNi4wMCNQYXBlciBEb2lsaWVzIzYwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI1LjA3LjAwI0RlY2tsZXMgb3IgbW9sZHMgZm9yIGhhbmQgbWFkZSBwYXBlciM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wOC4wMCNDb3VjaCBzaGVldHMgb3IgZmVsdHMgZm9yIGhhbmQgbWFkZSBwYXBlciM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wOS4wMCNQdWxwIG9yIHJhdyBtYXRlcmlhbHMgZm9yIGhhbmQgbWFkZSBwYXBlciM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNi4wMC4wMCNNb3NhaWNzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjI2LjAxLjAwI01vc2FpYyB0aWxlcyM2MC4xMi4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNi4wMi4wMCNNb3NhaWMgbW9sZHMjNjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjYuMDMuMDAjTW9zYWljIHRvb2xzIzYwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI2LjA0LjAwI01vc2FpYyBhY2Nlc3NvcmllcyM2MC4xMi4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNy4wMC4wMCNFbmFtZWxpbmcgcGFpbnRzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNy4wMS4wMCNFbmFtZWxpbmcgcGFpbnRzIG9yIG1lZGl1bXMjNjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjcuMDIuMDAjQ29wcGVyIHNoYXBlcyM2MC4xMi4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNy4wMy4wMCNFbmFtZWxpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjcuMDQuMDAjRW5hbWVsaW5nIEtpbG5zIzYwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI4LjAwLjAwI01hc2ttYWtpbmcjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjguMDEuMDAjTWFza21ha2luZyBmb3JtcyM2MC4xMi4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wMC4wMCNCZWFkcyBvciBiZWFkaW5nIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjAxLjAwI1NlZWQgYmVhZHMjNjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDIuMDAjUG9ueSBiZWFkcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wMy4wMCNXb29kIGJlYWRzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjA0LjAwI1N0cmF3IGJlYWRzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjA1LjAwI0NlcmFtaWMgYmVhZHMjNjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDYuMDAjR2xhc3MgYmVhZHMjNjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDcuMDAjQXNzb3J0ZWQgb3IgZGVjb3JhdGl2ZSBiZWFkcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wOC4wMCNCZWFkIGFjY2Vzc29yaWVzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjMwLjAwLjAwI0ZvYW0gY3JhZnRzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMwLjAxLjAwI1N0eXJvZm9hbSBzaGFwZXMjNjAuMTIuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzAuMDIuMDAjVG9vbHMgZm9yIGZvYW0gY3JhZnRzIzYwLjEyLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMxLjAwLjAwI0NoZW5pbGxlIHN0ZW0gY3JhZnRzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMxLjAxLjAwI0p1bWJvIGNoZW5pbGxlIHN0ZW1zIzYwLjEyLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMxLjAyLjAwI0NvdHRvbiBjaGVuaWxsZSBzdGVtcyM2MC4xMi4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMS4wMy4wMCNCdW1wcyBjaGVuaWxsZSBzdGVtcyM2MC4xMi4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMi4wMC4wMCNSaWJib24gbWFraW5nIG1hdGVyaWFscyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMi4wMS4wMCNQYXBlciByaWJib25zIzYwLjEyLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMyLjAyLjAwI1NpbGsgcmliYm9ucyM2MC4xMi4zMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMi4wMy4wMCNTeW50aGV0aWMgcmliYm9ucyM2MC4xMi4zMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMi4wNC4wMCNEZWNvcmF0aXZlIHJpYmJvbnMjNjAuMTIuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzMuMDAuMDAjQ3JhZnQgUG9tcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMy4wMS4wMCNBY3J5bGljIGNyYWZ0IHBvbXMjNjAuMTIuMzMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzMuMDIuMDAjR2xpdHRlciBjcmFmdCBwb21zIzYwLjEyLjMzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMzLjAzLjAwI0NyYWZ0IHBvbSBiZWFkeiM2MC4xMi4zMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNC4wMC4wMCNXaWdnbGUgZXllcyBtYXRlcmlhbHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzQuMDEuMDAjTm9uIHNlbGYgYWRoZXNpdmUgd2lnZ2xlIGV5ZXMjNjAuMTIuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzQuMDIuMDAjU2VsZiBhZGhlc2l2ZSB3aWdnbGUgZXllcyM2MC4xMi4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNC4wMy4wMCNEZWNvcmF0aXZlIHdpZ2dsZSBleWVzIzYwLjEyLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM1LjAwLjAwI0xlYXRoZXIgY3JhZnQgbWF0ZXJpYWxzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjM1LjAxLjAwI0xlYXRoZXIgb3IgbGVhdGhlciBsYWNpbmcgbWF0ZXJpYWxzIzYwLjEyLjM1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM1LjAyLjAwI0xlYXRoZXIgYWNjZXNzb3JpZXMjNjAuMTIuMzUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzYuMDAuMDAjR2xpdHRlciM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNi4wMS4wMCNHbGl0dGVyIGdsdWUjNjAuMTIuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzYuMDIuMDAjR2xpdHRlciBkb3RzIzYwLjEyLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM2LjAzLjAwI0dsaXR0ZXIgamV3ZWxzIzYwLjEyLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM2LjA0LjAwI1BsYXN0aWMgZ2xpdHRlciM2MC4xMi4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNi4wNS4wMCNJcnJpZGVzY2VudCBnbGl0dGVyIzYwLjEyLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM2LjA2LjAwI01ldGFsbGljIGdsaXR0ZXIjNjAuMTIuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzcuMDAuMDAjTWFjcmFtZSBjcmFmdCBtYXRlcmlhbHMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjM3LjAxLjAwI01hY3JhbWUgY29yZCM2MC4xMi4zNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNy4wMi4wMCNNYWNyYW1lIGJlYWRzIzYwLjEyLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM3LjAzLjAwI01hY3JhbWUgYWNjZXNzb3JpZXMjNjAuMTIuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzguMDAuMDAjTWFyYmxpbmcgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjM4LjAxLjAwI01hcmJsaW5nIGlua3MjNjAuMTIuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzguMDIuMDAjTWFyYmxpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzkuMDAuMDAjU2VxdWlucyBhbmQgdHJpbXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzkuMDEuMDAjRGVjb3JhdGl2ZSBzZXF1aW5zIG9yIHRyaW1zIzYwLjEyLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQwLjAwLjAwI0NvcmsgY3JhZnQgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQwLjAxLjAwI0Nvcmsgc2hlZXRzIzYwLjEyLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQwLjAyLjAwI0Nvcmsgc3RvcHBlcnMjNjAuMTIuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDEuMDAuMDAjTXVsdGljdWx0dXJhbCBwcm9qZWN0IG1hdGVyaWFscyBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDEuMDEuMDAjTXVsdGljdWx0dXJhbCBwYWludGluZyBwcm9kdWN0cyM2MC4xMi40MS4wMC4wMAotdW5zcHNjNyM2MC4xMi40MS4wMi4wMCNNdWx0aWN1bHR1cmFsIGNyYWZ0cyBwcm9kdWN0cyM2MC4xMi40MS4wMC4wMAotdW5zcHNjNyM2MC4xMi40Mi4wMC4wMCNDcm9zcyBjdXJyaWN1bGFyIHByb2plY3RzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQyLjAxLjAwI015bGFyIHNjdWxwdHVyZXMjNjAuMTIuNDIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDAuMDAjQ2xheSBhbmQgbW9kZWxpbmcgY29tcG91bmRzIGFuZCBjZXJhbWljcyBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjAxLjAwI01vaXN0IGtpbG4gZmlyZWQgY2xheSM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wMi4wMCNEcnkga2lsbiBmaXJlZCBjbGF5IzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjAzLjAwI0tpbG4gZnVybml0dXJlIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjA0LjAwI0tpbG5zIGZvciBmaXJpbmcgY2VyYW1pY3MjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDUuMDAjS2lsbiBhY2Nlc3NvcmllcyBmb3IgZmlyaW5nIGNlcmFtaWNzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjA2LjAwI1BvdHRlcnMgd2hlZWxzIGZvciBoYW5kIG1hZGUgY2VyYW1pY3MjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDcuMDAjRXh0cnVkZXJzIGZvciBtb2RlbGluZyBtYXRlcmlhbHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDguMDAjQ29uZXMgZm9yIGZpcmluZyBraWxucyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wOS4wMCNQb3R0ZXJ5IEJhdHRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjEwLjAwI0RlY29yYXRpbmcgd2hlZWxzIGZvciBwb3R0ZXJ5IzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjExLjAwI0NsYXkgb3IgbW9kZWxpbmcgdG9vbHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTIuMDAjRmlyZWQgY2VyYW1pYyB0aWxlcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xMy4wMCNDbGF5IHN0b3JhZ2UgY29udGFpbmVycyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xNC4wMCNQbGFzaWNpemVkIG5vbiBoYXJkZW5pbmcgbW9kZWxpbmcgY29tcG91bmRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjE1LjAwI09pbGJhc2VkIG5vbmhhcmRlbmluZyBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTYuMDAjQWlyIGRyeSBjbGF5IG9yIG1vZGVsaW5nIGNvbXBvdW5kcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xNy4wMCNNb2RlbGluZyBkb3VnaCM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xOC4wMCNQYXBpZXIgTWFjaGUjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTkuMDAjU3BlY2lhbHR5IG1vZGVsaW5nIGNvbXBvdW5kcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4yMC4wMCNQbGFzdGVyIGNvbXBvdW5kcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4yMS4wMCNPdmVuIGhhcmRlbmluZyBjbGF5IG9yIG1vZGVsaW5nIGNvbXBvdW5kcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4yMi4wMCNQbGFzdGljIG1vZGVsaW5nIGNvbXBvdW5kcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4yMy4wMCNDYXN0cyBvciBtb2xkcyBmb3Igc2hhcGluZyBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDAuMDAjQXJ0IG1ldGFscyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wMS4wMCNDb3BwZXIgdG9vbGluZyBmb2lsIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjAyLjAwI0FsdW1pbnVtIHRvb2xpbmcgZm9pbCM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wMy4wMCNBbHVtaW51bSB3aXJlIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjA0LjAwI0JyYXNzIHRvb2xpbmcgZm9pbCM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wNS4wMCNCcmFzcyB3aXJlIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjA2LjAwI1NpbHZlciBzaGVldHMgb3IgcGxhdGVzIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjA3LjAwI1NpbHZlciB3aXJlIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjA4LjAwI1Bld3RlciBwZWxsZXRzIG9yIHNob3RzIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjA5LjAwI1Bld3RlciBpbmdvdHMjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMTAuMDAjTnUgZ29sZCBzaGVldHMgcGxhdGVzIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjExLjAwI051IGdvbGQgd2lyZSM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4xMi4wMCNHYWx2YW5pemVkIHN0b3ZlcGlwZSB3aXJlIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjAwLjAwI1NjdWxwdHVyZSBzdXBwbGllcyBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDEuMDAjUGxhc3RlciB3cmFwIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjAyLjAwI0Nhc3RpbmcgcmVzaW5zIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjAzLjAwI1NjdWxwdHVyZSBhY2Nlc3NvcmllcyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wNC4wMCNQdXp6bGUgcmFja3MjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDUuMDAjQnViYmxlcyBvciBhY2Nlc3NvcmllcyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wNi4wMCNQbGFzdGljIHNhbmQgb3Igd2F0ZXIgdG9vbHMgb3IgbW9sZHMgb3IgdG95cyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wNy4wMCNQbGF5IHNhbmQjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDguMDAjU2FuZCBvciB3YXRlciB0YWJsZXMgb3IgYWN0aXZpdHkgY2VudGVycyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wOS4wMCNWZWhpY2xlIHNldHMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMTAuMDAjV2F0ZXJ3YXkgc2V0cyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4xMS4wMCNQbGF5IHRvb2xzIG9yIHBsYXkgdG9vbCBraXRzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjEyLjAwI1Njb290ZXIgYm9hcmRzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjEzLjAwI0JlYW5iYWdzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjE0LjAwI1RhY3RpbGUgdG95cyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4xNS4wMCNDb2duaXRpdmUgdG95cyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMy4wMC4wMC4wMCNNdXNpY2FsIEluc3RydW1lbnRzIGFuZCBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjNjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTAuMDAuMDAjS2V5Ym9hcmQgaW5zdHJ1bWVudHMjNjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTAuMDEuMDAjUGlhbm9zIzYwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEwLjAyLjAwI0FjY29yZGlvbnMjNjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTAuMDMuMDAjTXVzaWNhbCBvcmdhbnMjNjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTEuMDAuMDAjQnJhc3MgaW5zdHJ1bWVudHMjNjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTEuMDEuMDAjVHJ1bXBldHMjNjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTEuMDIuMDAjVHJvbWJvbmVzIzYwLjEzLjExLjAwLjAwCi11bnNwc2M3IzYwLjEzLjExLjAzLjAwI1NvdXNhcGhvbmVzIzYwLjEzLjExLjAwLjAwCi11bnNwc2M3IzYwLjEzLjExLjA0LjAwI1NheG9waG9uZXMjNjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTEuMDUuMDAjV2hpc3RsZSM2MC4xMy4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wMC4wMCNXb29kd2luZCBpbnN0cnVtZW50cyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wMS4wMCNDbGFyaW5ldHMjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDIuMDAjT2JvZXMjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDMuMDAjTXVzaWNhbCBmbHV0ZXMjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDQuMDAjUGljY29sb2VzIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjA1LjAwI011c2ljYWwgY29ybmV0cyM2MC4xMy4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wNi4wMCNCYWdwaXBlcyM2MC4xMy4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wNy4wMCNIYXJtb25pY2FzIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjA4LjAwI0them9vcyM2MC4xMy4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMy4wMC4wMCNTdHJpbmcgaW5zdHJ1bWVudHMjNjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTMuMDEuMDAjSGFycHNpY2hvcmRzIzYwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEzLjAyLjAwI0NsYXZpY2hvcmRzIzYwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEzLjAzLjAwI0d1aXRhcnMjNjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTMuMDQuMDAjVmlvbGlucyM2MC4xMy4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMy4wNS4wMCNIYXJwcyM2MC4xMy4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMy4wNi4wMCNCYW5qb2VzIzYwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEzLjE0LjAwLjAwI1BlcmN1c3Npb24gaW5zdHJ1bWVudHMjNjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTQuMDEuMDAjQ3ltYmFscyM2MC4xMy4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNC4wMi4wMCNCZWxscyM2MC4xMy4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNC4wMy4wMCNUYW1ib3VyaW5lcyM2MC4xMy4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNC4wNC4wMCNDYXN0YW5ldHMjNjAuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTQuMDUuMDAjRHJ1bXMjNjAuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTQuMDYuMDAjWHlsb3Bob25lcyM2MC4xMy4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wMC4wMCNNdXNpY2FsIGluc3RydW1lbnQgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjAxLjAwI01ldHJvbm9tZXMjNjAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDIuMDAjUmVlZHMjNjAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDMuMDAjSW5zdHJ1bWVudCBzdHJpbmdzIG9yIHBpY2tzIzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjA0LjAwI1R1bmluZyBwaW5zIzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjA1LjAwI011c2ljYWwgaW5zdHJ1bWVudCBzdGFuZHMgb3Igc2hlZXQgaG9sZGVycyM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wNi4wMCNBY2Nlc3NvcmllcyBmb3Igc3RyaW5nZWQgaW5zdHJ1bWVudHMjNjAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDcuMDAjUGVyY3Vzc2lvbiBpbnN0cnVtZW50IGFjY2Vzc29yeSM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wOC4wMCNNdXNpYyBib3hlcyBvciBtZWNoYW5pc21zIzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE2LjAwLjAwI011c2ljYWwgaW5zdHJ1bWVudCBzZXRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjE2LjAxLjAwI1JoeXRobSBiYW5kIHNldHMjNjAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTcuMDAuMDAjQWx0ZXJuYXRpdmUgc291bmRzIG11c2ljYWwgaW5zdHJ1bWVudHMjNjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTcuMDEuMDAjQm9vbXdoYWNrZXJzIzYwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE3LjAyLjAwI0Rpc2NvIHRhcHMjNjAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTguMDAuMDAjTXVzaWMgYW5kIGRhbmNlIGFjY2Vzc29yaWVzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjE4LjAxLjAwI0RhbmNpbmcgc2NhcnZlcyM2MC4xMy4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xOC4wMi4wMCNSaHl0aG0gc3RpY2tzIG9yIGx1bW1pIHN0aWNrcyM2MC4xMy4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xOC4wMy4wMCNSaHl0aG0gd2FuZHMgb3IgaG9vcHMjNjAuMTMuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTQuMDAuMDAuMDAjVG95cyBhbmQgZ2FtZXMjNjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDAuMDAjVG95cyM2MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wMS4wMCNUb3kgYmFsbG9vbnMgb3IgYmFsbHMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDIuMDAjRG9sbHMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDMuMDAjRG9sbCBob3VzZXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDQuMDAjU3R1ZmZlZCBhbmltYWxzIG9yIHB1cHBldHMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDUuMDAjUGxheWhvdXNlcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wNi4wMCNCdWlsZGluZyBibG9ja3MjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDcuMDAjUmlkaW5nIHRveXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDguMDAjUHVsbCB0b3lzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjA5LjAwI0NoaWxkcmVucyBzY2llbmNlIGtpdHMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTAuMDAjVG95IHZlaGljbGVzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjExLjAwI1RveSB0cmFpbnMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTIuMDAjSW5mbGF0YWJsZSB0b3lzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjEzLjAwI0RvbGwgcGFydHMgb3IgYWNjZXNzb3JpZXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTQuMDAjWW8geW9zIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjE1LjAwI0tpdGVzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjE2LjAwI1BvZ3MjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTcuMDAjS2FsZWlkb3Njb3BlcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xOC4wMCNQb20gcG9tcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xOS4wMCNQaW5hdGFzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjIwLjAwI0Jvb21lcmFuZ3MjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMjEuMDAjRmx5aW5nIGRpc2NzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjIyLjAwI1RveSBwYWlscyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wMC4wMCNHYW1lcyM2MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wMS4wMCNFZHVjYXRpb25hbCBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wMi4wMCNCb2FyZCBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wMy4wMCNQbGF5aW5nIGNhcmRzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjA0LjAwI1ZpZGVvIGdhbWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjA1LjAwI1B1enpsZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDYuMDAjRGljZSM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wNy4wMCNCaW5nbyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wOC4wMCNDbGFzc2ljIGdhbWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjA5LjAwI0NvbGxhYm9yYXRpdmUgZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMTAuMDAjU3RyYXRlZ3kgZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMTEuMDAjR2FtZSBhY2Nlc3NvcmllcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4xMi4wMCNHYW1lIGJvb2tzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjEzLjAwI0xvdHRvIGdhbWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjE0LjAwI01lbW9yeSBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMi4wMC4wMCNBY3RpdmUgUGxheSBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzYwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEyLjAxLjAwI0JhbGFuY2Ugb3IgZ3Jvc3MgbW90b3IgZXF1aXBtZW50IzYwLjE0LjEyLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEyLjAyLjAwI0JhbGwgcG9vbHMgb3IgYWNjZXNzb3JpZXMjNjAuMTQuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTIuMDMuMDAjUGxheSBob3VzZXMgb3IgaHV0cyM2MC4xNC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMi4wNC4wMCNUcmlrZXMgb3Igd2Fnb25zIzYwLjE0LjEyLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEyLjA1LjAwI1NvZnQgcGxheSBjZW50ZXJzIzYwLjE0LjEyLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEzLjAwLjAwI0NoaWxkcmVucyBibG9ja3MgYW5kIGJ1aWxkaW5nIHN5c3RlbXMjNjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTMuMDIuMDAjQ29uc3RydWN0aW9uIHNldHMjNjAuMTQuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTMuMDMuMDAjUGxheW1hdHMjNjAuMTQuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTMuMDQuMDAjUmFpbHBsYXkgc3lzdGVtcyBvciBhY2Nlc3NvcmllcyM2MC4xNC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMy4wNS4wMCNVbml0IGJsb2NrcyM2MC4xNC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMy4wNi4wMCNQbGF5IHZlaGljbGVzIzYwLjE0LjEzLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEzLjA3LjAwI1BsYXkgYW5pbWFscyM2MC4xNC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xNC4xNC4wMC4wMCNEcmFtYXRpYyBwbGF5IGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTQuMDEuMDAjQ29zdHVtZXMgb3IgYWNjZXNzb3JpZXMjNjAuMTQuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTQuMDIuMDAjRHJlc3MgdXAgQ2VudGVycyM2MC4xNC4xNC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xNC4wMy4wMCNIb3VzZWtlZXBpbmcgdW5pdHMgb3IgYWNjZXNzb3JpZXMjNjAuMTQuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTQuMDQuMDAjUGxheSBmb29kIGRpc2hlcyBvciBhY2Nlc3NvcmllcyM2MC4xNC4xNC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xNC4wNS4wMCNQcmV0ZW5kIHBsYXkga2l0cyBvciBzdXBwbGllcyM2MC4xNC4xNC4wMC4wMAotdW5zcHNjNyM3MC4wMC4wMC4wMC4wMCNGYXJtaW5nIGFuZCBGaXNoaW5nIGFuZCBGb3Jlc3RyeSBhbmQgV2lsZGxpZmUgQ29udHJhY3RpbmcgU2VydmljZXMjNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMDAuMDAuMDAjRmlzaGVyaWVzIGFuZCBhcXVhY3VsdHVyZSM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wMC4wMCNGaXNoZXJpZXMgb3BlcmF0aW9ucyM3MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wMS4wMCNDb21tZXJjaWFsIGZpc2hpbmcgb3BlcmF0aW9ucyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wMi4wMCNGaXNoaW5nIHBvcnQgc2VydmljZXMjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDMuMDAjRmlzaGluZyBvbnNob3JlIGZhY2lsaXRpZXMjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDQuMDAjRGVlcCBzZWEgZmlzaGluZyBvcGVyYXRpb25zIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjA1LjAwI1NvbmFyIGZpc2hpbmcjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDYuMDAjV2hhbGluZyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wNy4wMCNUcmF3bGluZyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wOC4wMCNMaW5lIGZpc2hpbmcjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDkuMDAjU2VpbmUgb3BlcmF0aW9ucyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4xMC4wMCNGaXNoaW5nIG5ldHMjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDAuMDAjRmlzaGVyaWVzIG92ZXJzaWdodCM3MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNi4wMS4wMCNGaXNoZXJ5IGluZm9ybWF0aW9uIG9yIGRvY3VtZW50YXRpb24gc2VydmljZXMjNzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDIuMDAjRmlzaGVyeSByZXNlYXJjaCBvciBleHBlcmltZW50YXRpb24gc2VydmljZXMjNzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDMuMDAjRmlzaGVyeSBkYXRhIGNvbGxlY3Rpb24gb3IgZGlzdHJpYnV0aW9uIzcwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjA0LjAwI0Zpc2hlcnkgY29tbWVyY2lhbCBtYW5hZ2VtZW50IzcwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjA1LjAwI0Zpc2hpbmcgZmxlZXQgbWFuYWdlbWVudCM3MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNi4wNi4wMCNGaXNoaW5nIGNvb3BlcmF0aXZlcyM3MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNi4wNy4wMCNGaXNoZXJ5IHJlc291cmNlcyBwcm90ZWN0aW9uIG9yIGNvbnNlcnZhdGlvbiM3MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNy4wMC4wMCNGaXNoZXJ5IGluZHVzdHJ5IGFuZCB0ZWNobm9sb2d5IzcwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEwLjE3LjAxLjAwI0Zpc2hpbmcgdGVjaG5vbG9neSBzZXJ2aWNlcyM3MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNy4wMi4wMCNGaXNoZXJ5IGJ5IHByb2R1Y3RzIHByb2R1Y3Rpb24gc2VydmljZXMjNzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTcuMDMuMDAjRmlzaCBwcm9kdWN0aW9uIzcwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE3LjA0LjAwI0Zpc2ggc3RvcmFnZSM3MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOC4wMC4wMCNGaXNoZXJpZXMgcmVzb3VyY2VzIzcwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEwLjE4LjAxLjAwI0lubGFuZCB3YXRlciBmaXNoZXJ5IHJlc291cmNlcyM3MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOC4wMi4wMCNGaXNoIHBvbmQgcmVzb3VyY2VzIzcwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE4LjAzLjAwI0Zpc2ggaGF0Y2hlcmllcyM3MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOC4wNC4wMCNGaXNoIHJhbmNoZXMjNzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDUuMDAjRmlzaGVyeSBieSBwcm9kdWN0IHJlc291cmNlcyM3MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOC4wNi4wMCNGaXNoZXJpZXMgcmVzb3VyY2UgZXZhbHVhdGlvbiM3MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOS4wMC4wMCNBcXVhY3VsdHVyZSM3MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOS4wMS4wMCNNYXJpY3VsdHVyZSM3MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOS4wMi4wMCNPc3RyZWljdWx0dXJlIzcwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE5LjAzLjAwI1NoZWxsZmlzaCBjdWx0dXJlIzcwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE5LjA0LjAwI1NocmltcCBmYXJtaW5nIzcwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE5LjA1LjAwI0Zpc2ggZmFybWluZyM3MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMS4wMC4wMC4wMCNIb3J0aWN1bHR1cmUjNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDAuMDAjUGxhbnRzIGFuZCBvcm5hbWVudGFsIHRyZWVzIzcwLjExLjAwLjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjAxLjAwI1BsYW50aW5nIHNlcnZpY2VzIG9yIG9ybmFtZW50YWwgcGxhbnQgb3IgYnVzaCBvciB0cmVlIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjAyLjAwI1BydW5pbmcgc2VydmljZXMgb3Igb3JuYW1lbnRhbCBwbGFudCBvciBidXNoIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjAzLjAwI1RyZWUgdHJpbW1pbmcgc2VydmljZXMjNzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDQuMDAjQnJhY2luZyBzZXJ2aWNlcyM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wNS4wMCNUcmVlIHN1cmdlcnkgc2VydmljZXMjNzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDYuMDAjQXJib3Jpc3Qgc2VydmljZXMjNzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDcuMDAjUmVtb3ZhbCBzZXJ2aWNlcyBvciBvcm5hbWVudGFsIHBsYW50IG9yIGJ1c2ggb3IgdHJlZSM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wOC4wMCNQbGFudHMgb3Igb3JuYW1lbnRhbCB0cmVlIHNwcmF5aW5nIHNlcnZpY2VzIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE2LjAwLjAwI0Zsb3dlcmluZyBwbGFudHMjNzAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTYuMDEuMDAjUGxhbnRpbmcgc2VydmljZXMjNzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTYuMDIuMDAjTnVyc2VyeSBzZXJ2aWNlcyM3MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNi4wMy4wMCNGbG9yaWN1bHR1cmUgc2VydmljZXMjNzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDAuMDAjUGFya3MgYW5kIGdhcmRlbnMgYW5kIG9yY2hhcmRzIzcwLjExLjAwLjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjAxLjAwI09yY2hhcmQgbWFuYWdlbWVudCBvciBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wMi4wMCNWaW5leWFyZCBtYW5hZ2VtZW50IG9yIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjAzLjAwI0dhcmRlbiBwbGFudGluZyBvciBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wNC4wMCNIb3J0aWN1bHR1cmFsIGNvdW5zZWxpbmcgc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDUuMDAjQ2VtZXRlcnkgdXBrZWVwIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjA2LjAwI0xhd24gY2FyZSBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wNy4wMCNIaWdod2F5IGxhd24gbWFpbnRlbmFuY2Ugc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDguMDAjTXVsY2hpbmcgc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDkuMDAjU2VlZGluZyBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4xMC4wMCNNb3dpbmcgc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMTEuMDAjU3ByaWdnaW5nIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjEyLjAwI1BhcmtzIG9yIGdhcmRlbnMgc3ByYXlpbmcgc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMTMuMDAjUGFya3MgbWFuYWdlbWVudCBvciBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMi4wMC4wMC4wMCNMaXZlc3RvY2sgc2VydmljZXMjNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTUuMDAuMDAjRGFpcnlpbmcjNzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTUuMDEuMDAjRGFpcnkgaGVyZCBtYW5hZ2VtZW50IzcwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE1LjAyLjAwI0RhaXJ5IGluZHVzdHJ5IGRldmVsb3BtZW50IzcwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE1LjAzLjAwI0RhaXJ5IHRlY2hub2xvZ3kjNzAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTUuMDQuMDAjRGFpcnkgbGFib3JhdG9yaWVzIHNlcnZpY2VzIzcwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE1LjA1LjAwI0RhaXJ5IGZhcm0gaW4gaG91c2UgcHJvY2Vzc2luZyM3MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wMC4wMCNMaXZlc3RvY2sgaW5kdXN0cnkjNzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDEuMDAjTGl2ZXN0b2NrIGJyZWVkaW5nIzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjAyLjAwI0xpdmVzdG9jayBnZW5ldGljcyBzZXJ2aWNlcyM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wMy4wMCNTZXJpY3VsdHVyZSM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wNC4wMCNBbmltYWwgaHVzYmFuZHJ5IzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjA1LjAwI0Zhcm0gcmVhcmluZyBzeXN0ZW1zIzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjA2LjAwI1BvdWx0cnkgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wNy4wMCNTbWFsbCBhbmltYWwgYnJlZWRpbmcgc2VydmljZXMjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDguMDAjQm92aW5lIHByb2R1Y3Rpb24gc2VydmljZXMjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMTAuMDAjQXBpY3VsdHVyZSM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNy4wMC4wMCNMaXZlc3RvY2sgbWFuYWdlbWVudCM3MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNy4wMS4wMCNMaXZlc3RvY2sgc2VsZWN0aW9uIzcwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE3LjAyLjAwI0xpdmVzdG9jayBzaG93aW5nIHNlcnZpY2VzIzcwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE3LjAzLjAwI0xpdmVzdG9jayBzbGF1Z2h0ZXJpbmcgc2VydmljZXMjNzAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTcuMDQuMDAjSGVyZCBtYW5hZ2VtZW50IzcwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE3LjA1LjAwI0xpdmVzdG9jayBicmVlZGluZyBvciBncm9vbWluZyBzZXJ2aWNlcyM3MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMi4xOC4wMC4wMCNQZXRzIGluZHVzdHJ5IzcwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjE4LjAxLjAwI1BldCBicmVlZGluZyBzZXJ2aWNlcyM3MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM3MC4xMi4xOC4wMi4wMCNQZXQgZ3Jvb21pbmcgc2VydmljZXMjNzAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTguMDMuMDAjS2VubmVscyBzZXJ2aWNlcyM3MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM3MC4xMi4xOS4wMC4wMCNQYXN0dXJlIGFuZCByYW5nZSBzZXJ2aWNlcyM3MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4xOS4wMS4wMCNQYXN0dXJlIGltcHJvdmVtZW50IzcwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE5LjAyLjAwI1JhbmdlIG1hbmFnZW1lbnQjNzAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTkuMDMuMDAjUmFuZ2UgcmVzZWFyY2gjNzAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDAuMDAjQW5pbWFsIGhlYWx0aCM3MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wMS4wMCNBbmltYWwgbnV0cml0aW9uIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjAyLjAwI0FuaW1hbCBkaXNlYXNlIGNvbnRyb2wjNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDMuMDAjQW5pbWFsIHRyeXBhbm9zb21pYXNpcyM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wNC4wMCNGb290IG9yIG1vdXRoIGNvbnRyb2wgc2VydmljZXMjNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDUuMDAjQW5pbWFsIGhlYWx0aCBwcmV2ZW50aXZlIG1lZGljYXRpb24gc2VydmljZXMjNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDYuMDAjQW5pbWFsIHZhY2NpbmF0aW9uIHNlcnZpY2VzIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjA3LjAwI1ZldGVyaW5hcnkgYWRtaW5pc3RyYXRpb24jNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDguMDAjVmV0ZXJpbmFyeSBsYWJvcmF0b3J5IHRlY2hub2xvZ3kjNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDkuMDAjQW5pbWFsIGhvc3BpdGFsIHNlcnZpY2VzIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjEwLjAwI0FuaW1hbCBoZWFsdGggaW5mb3JtYXRpb24gc2VydmljZXMjNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMDAuMDAuMDAjTGFuZCBhbmQgc29pbCBwcmVwYXJhdGlvbiBhbmQgbWFuYWdlbWVudCBhbmQgcHJvdGVjdGlvbiM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNS4wMC4wMCNMYW5kIGFuZCBzb2lsIHByb3RlY3Rpb24jNzAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTUuMDEuMDAjRGVzZXJ0aWZpY2F0aW9uIGFzc2Vzc21lbnQgb3IgY29udHJvbCBzZXJ2aWNlcyM3MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNS4wMi4wMCNTb2lsIGNvbnNlcnZhdGlvbiBvciBwcm90ZWN0aW9uIHNlcnZpY2VzIzcwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE1LjAzLjAwI0Vyb3Npb24gY29udHJvbCBzZXJ2aWNlcyM3MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNS4wNC4wMCNTYW5kIGR1bmUgZml4YXRpb24jNzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTUuMDUuMDAjU29pbCBjb25kaXRpb25pbmcjNzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTUuMDYuMDAjU29pbCBpbXByb3ZlbWVudCM3MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNi4wMC4wMCNMYW5kIGFuZCBzb2lsIHByZXBhcmF0aW9uIzcwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEzLjE2LjAxLjAwI0ZlcnRpbGl6ZXIgYXBwbGljYXRpb24gc2VydmljZXMjNzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTYuMDIuMDAjTGltZSBzcHJlYWRpbmcgc2VydmljZXMjNzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTYuMDMuMDAjUGxvd2luZyBzZXJ2aWNlcyM3MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNi4wNC4wMCNTZWVkIGJlZCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM3MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNi4wNS4wMCNTb2lsIGNoZW1pY2FsIHRyZWF0bWVudCBzZXJ2aWNlcyM3MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNy4wMC4wMCNMYW5kIGFuZCBzb2lsIG1hbmFnZW1lbnQjNzAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDEuMDAjTGFuZCB1c2UgcGxhbm5pbmcjNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDIuMDAjTGFuZCBldmFsdWF0aW9uIzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjAzLjAwI0xhbmQgcmVjbGFtYXRpb24jNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDQuMDAjQWdybyBlY29sb2dpY2FsIHpvbmVzIGFzc2Vzc21lbnQgb3IgcGxhbm5pbmcjNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDUuMDAjU29pbCBjbGFzc2lmaWNhdGlvbiM3MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNy4wNi4wMCNXYXRlcnNoZWQgbWFuYWdlbWVudCM3MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNy4wNy4wMCNTb2lsIGZlcnRpbGl0eSBhbmFseXNpcyM3MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNy4wOC4wMCNQZWRvbG9neSM3MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4wMC4wMC4wMCNDcm9wIHByb2R1Y3Rpb24gYW5kIG1hbmFnZW1lbnQgYW5kIHByb3RlY3Rpb24jNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDAuMDAjQ3JvcCBwcm9kdWN0aW9uIzcwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjAxLjAwI1NlZWQgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wMi4wMCNIeWRyb3BvbmljcyM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wMy4wMCNHcmFzcyBvciBmb2RkZXIgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wNC4wMCNBcm9tYXRpYyBwbGFudHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wNS4wMCNCZXZlcmFnZSBjcm9wcyBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjA2LjAwI0NvY29hIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDcuMDAjU3VnYXJiZWV0IG9yIHN1Z2FyY2FuZSBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjA4LjAwI051dCBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjA5LjAwI0Vzc2VudGlhbCBvaWwgY3JvcHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xMC4wMCNGaWJlciBjcm9wcyBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjExLjAwI0ZydWl0IHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTIuMDAjR3JhaW4gb3IgbGVndW1lIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTMuMDAjSW5zZWN0aWNpZGFsIHBsYW50cyBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjE0LjAwI01lZGljaW5hbCBwbGFudHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xNS4wMCNSb290cyBvciB0dWJlcnMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xNi4wMCNDZXJlYWxzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTcuMDAjUnViYmVyIHBsYW50IHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTguMDAjU3BpY2UgY3JvcHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xOS4wMCNUb2JhY2NvIGNyb3AgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4yMC4wMCNWZWdldGFibGUgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNi4wMC4wMCNDcm9wIHByb3RlY3Rpb24jNzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDEuMDAjQ3JvcCBzcHJheWluZyBzZXJ2aWNlcyM3MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNi4wMi4wMCNCaW9sb2dpY2FsIGNvbnRyb2wgc2VydmljZXMjNzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDMuMDAjV2VlZCBjb250cm9sIHNlcnZpY2VzIzcwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjA0LjAwI0hlcmJpY2lkZSBzZXJ2aWNlcyM3MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNi4wNS4wMCNJbnRlZ3JhdGVkIHBlc3QgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNi4wNi4wMCNQbGFudCBwYXRob2xvZ3kjNzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDcuMDAjTG9jdXN0IGNvbnRyb2wjNzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDAuMDAjQ3JvcCBtYW5hZ2VtZW50IzcwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjAxLjAwI0dyZWVuaG91c2Ugc2VydmljZXMjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDIuMDAjRmVydGlsaXplciBzZXJ2aWNlcyM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wMy4wMCNDcm9wIGFkbWluaXN0cmF0aW9uIzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjA0LjAwI0Nyb3Agc3Vic3RpdHV0aW9uIzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjA1LjAwI0V4dGVuc2lvbiBzZXJ2aWNlcyM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wNi4wMCNDcm9wIHNwZWNpYWxpemF0aW9uIzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjA3LjAwI0N1bHRpdmF0aW9uIGZhcm1pbmcgc3lzdGVtIG1hbmFnZW1lbnQjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDguMDAjQ3JvcCByb3RhdGlvbiBvciBkaXZlcnNpZmljYXRpb24gY291bnNlbGluZyBzZXJ2aWNlcyM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wOS4wMCNQbGFudCB0YXhvbm9teSBzZXJ2aWNlcyM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4xMC4wMCNGaWVsZCBjcm9wIGVudG9tb2xvZ3kjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTguMDAuMDAjQ3JvcCBwbGFudGluZyBhbmQgY3VsdGl2YXRpb24jNzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTguMDEuMDAjT3JjaGFyZCB0cmVlIG9yIHZpbmUgcGxhbnRpbmcgc2VydmljZXMjNzAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTguMDIuMDAjU3Byb3V0IG9yIHR3aWcgc2VydmljZXMjNzAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTguMDMuMDAjQ3JvcCBjdWx0aXZhdGluZyBzZXJ2aWNlcyM3MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOC4wNC4wMCNDcm9wIHBsYW50aW5nIHNlcnZpY2VzIzcwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE5LjAwLjAwI0Nyb3AgaGFydmVzdGluZyM3MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOS4wMS4wMCNDYXNoIGdyYWlucyBoYXJ2ZXN0aW5nIHNlcnZpY2VzIzcwLjE0LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE5LjAyLjAwI0ZydWl0IG9yIHRyZWUgbnV0cyBoYXJ2ZXN0aW5nIHNlcnZpY2VzIzcwLjE0LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE5LjAzLjAwI0ZpZWxkIGNyb3AgaGFydmVzdGluZyBzZXJ2aWNlcyM3MC4xNC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOS4wNC4wMCNTZWVkIGhhcnZlc3Rpbmcgc2VydmljZXMjNzAuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDAuMDAjUG9zdCBoYXJ2ZXN0aW5nIGNyb3AgcHJvY2Vzc2luZyM3MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wMS4wMCNTaWxvcyByZWxhdGVkIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjAyLjAwI0dyYWluIGRyeWVycyBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wMy4wMCNDcm9wIHByb2Nlc3Npbmcgc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDQuMDAjRmllbGQgY3JvcHMgbWFya2V0IHByZXBhcmF0aW9uIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjA1LjAwI0Nhc2ggZ3JhaW4gY3JvcHMgbWFya2V0IHByZXBhcmF0aW9uIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjA2LjAwI1ZlZ2V0YWJsZSBjcm9wcyBtYXJrZXQgcHJlcGFyYXRpb24gc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDcuMDAjRnJ1aXQgY3JvcHMgbWFya2V0IHByZXBhcmF0aW9uIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjA4LjAwI1RyZWUgbnV0IGNyb3BzIG1hcmtldCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wOS4wMCNHaW5uaW5nIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjEwLjAwI0Nyb3AgY2xlYW5pbmcgc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMTEuMDAjQ29vbGluZyBvciByZWZyaWdlcmF0aW9uIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjEyLjAwI1NwcmF5aW5nIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE1LjAwLjAwLjAwI0ZvcmVzdHJ5IzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjAwLjAwI0ZvcmVzdHJ5IG1hbmFnZW1lbnQjNzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDEuMDAjRm9yZXN0IHJlc291cmNlcyBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjAyLjAwI0ZvcmVzdCBwZXN0IGNvbnRyb2wjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDMuMDAjRm9yZXN0IG9yZ2FuaXphdGlvbnMgb3IgYXNzb2NpYXRpb25zIG9yIGNvb3BlcmF0aXZlcyM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wNC4wMCNGb3Jlc3QgYWRtaW5pc3RyYXRpb24gc2VydmljZXMjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDUuMDAjRm9yZXN0IGludmVudG9yeSM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wNi4wMCNGb3Jlc3QgbW9uaXRvcmluZyBvciBldmFsdWF0aW9uIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjA3LjAwI0FmZm9yZXN0YXRpb24gc2VydmljZXMjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDguMDAjRm9yZXN0cnkgZXh0ZW5zaW9uIHNlcnZpY2VzIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjA5LjAwI0ZvcmVzdCBudXJzZXJ5IG1hbmFnZW1lbnQjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMTAuMDAjRm9yZXN0IHNlY3RvcmFsIHBsYW5uaW5nIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE2LjAwLjAwI0ZvcmVzdHJ5IGluZHVzdHJ5IzcwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE1LjE2LjAxLjAwI05vbndvb2QgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wMi4wMCNFc3NlbnRpYWwgb2lscyBwcm9kdWN0aW9uIzcwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE2LjAzLjAwI1RpbWJlciBwcm9kdWN0aW9uIHNlcnZpY2VzIzcwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE2LjA0LjAwI0R5ZXMgcHJvZHVjdGlvbiM3MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wNS4wMCNFZGlibGUgZm9yZXN0cnkgcHJvZHVjdGlvbiM3MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wNi4wMCNXb29kIHRlc3Rpbmcgc2VydmljZXMjNzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDcuMDAjVGltYmVyIHByb2R1Y3Rpb24jNzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTcuMDAuMDAjRm9yZXN0cnkgaGFydmVzdGluZyM3MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNy4wMS4wMCNMb2dnaW5nIG9yIGZlbGxpbmcjNzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTcuMDIuMDAjRm9yZXN0IGhhcnZlc3RpbmcgbW91bnRhaW5vdXMgYXJlYXMjNzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTcuMDMuMDAjRm9yZXN0IGhhcnZlc3Rpbmcgc3BlY2lhbGl6ZWQgb3BlcmF0aW9ucyM3MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNy4wNC4wMCNQbGFudGF0aW9uIGhhcnZlc3RpbmcjNzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTcuMDUuMDAjU3dhbXAgb3IgbWFuZ3JvdmUgZm9yZXN0IGhhcnZlc3RpbmcjNzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTcuMDYuMDAjVGVtcGVyYXRlIGZvcmVzdCBoYXJ2ZXN0aW5nIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjA3LjAwI1Ryb3BpY2FsIGhpZ2ggZm9yZXN0cyBoYXJ2ZXN0aW5nIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE4LjAwLjAwI0ZvcmVzdHJ5IGNvbnNlcnZhdGlvbiBzZXJ2aWNlcyM3MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wMS4wMCNDb25zZXJ2YXRpb24gb2YgZm9yZXN0IGdlbmV0aWMgcmVzb3VyY2VzIzcwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE4LjAyLjAwI0ZvcmVzdCBwcm90ZWN0aW9uIHNlcnZpY2VzIzcwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE4LjAzLjAwI0ZvcmVzdCBhcmlkIGxhbmQgcmVoYWJpbGl0YXRpb24jNzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDQuMDAjRm9yZXN0IHdpbmQgYnJlYWtzIG9yIHNoZWx0ZXIgYmVsdHMjNzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDUuMDAjRm9yZXN0IHJlc2VydmVzIG9yIHBhcmtzIGNvbnNlcnZhdGlvbiBzZXJ2aWNlcyM3MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wNi4wMCNGb3Jlc3RyeSB3YXRlcnNoZWQgbWFuYWdlbWVudCM3MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wNy4wMCNGb3Jlc3RyeSB0b3JyZW50IGNvbnRyb2wjNzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDAuMDAjRm9yZXN0cnkgcmVzb3VyY2VzIzcwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjAxLjAwI0ZvcmVzdCByZXNvdXJjZXMgZGV2ZWxvcG1lbnQjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDIuMDAjQWdyb2ZvcmVzdHJ5IHJlc291cmNlcyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wMy4wMCNGdWVsIHdvb2QgcmVzb3VyY2VzIzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjA0LjAwI1NpbHZpY3VsdHVyZSM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wNS4wMCNBcmlkIHJhaW5mZWQgcGxhbnRhdGlvbiByZXNvdXJjZXMjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDYuMDAjQnJvYWQgbGVhZmVkIHBsYW50YXRpb24gcmVzb3VyY2VzIzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjA3LjAwI0NvbmlmZXJzIHBsYW50YXRpb25zIzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjA5LjAwI1Ryb3BpY2FsIHJhaW4gZm9yZXN0IHBsYW50YXRpb25zIzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjEwLjAwI01hbmdyb3ZlIHN3YW1wcyByZXNvdXJjZXMjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMDAuMDAuMDAjV2lsZGxpZmUgYW5kIGZsb3JhIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjE2LjE1LjAwLjAwI0ZhdW5hIzcwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE2LjE1LjAxLjAwI0ZhdW5hIHByb3RlY3Rpb24jNzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTYuMDAuMDAjRmxvcmEjNzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTYuMDEuMDAjRmxvcmEgcHJvdGVjdGlvbiM3MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNy4wMC4wMCNFY29zeXN0ZW1zIzcwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE2LjE3LjAxLjAwI0Vjb2RldmVsb3BtZW50IHNlcnZpY2VzIzcwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE2LjE3LjAyLjAwI01hcmluZSBlY29zeXN0ZW0gbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNy4wMy4wMCNUZXJyZXN0cmlhbCBlY29zeXN0ZW0gbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNy4wNC4wMCNFY29zeXN0ZW1zIHByb3RlY3Rpb24gc2VydmljZXMjNzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMDAuMDAuMDAjV2F0ZXIgcmVzb3VyY2VzIGRldmVsb3BtZW50IGFuZCBvdmVyc2lnaHQjNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTUuMDAuMDAjRGV2ZWxvcG1lbnQjNzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTUuMDEuMDAjV2F0ZXIgcXVhbGl0eSBhc3Nlc3NtZW50IHNlcnZpY2VzIzcwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjAyLjAwI1dhdGVyIHJlc291cmNlcyBwbGFubmluZyBzZXJ2aWNlcyM3MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNS4wMy4wMCNHcm91bmQgb3Igc3VyZmFjZSB3YXRlciBzdXJ2ZXlpbmcjNzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTUuMDQuMDAjV2F0ZXIgcmVzb3VyY2VzIG1hcHBpbmcgc2VydmljZXMjNzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTUuMDUuMDAjUml2ZXIgYmFzaW4gZGV2ZWxvcG1lbnQjNzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTUuMDYuMDAjR3JvdW5kIG9yIHN1cmZhY2Ugd2F0ZXIgbW9kZWxpbmcgc2VydmljZXMjNzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTYuMDAuMDAjT3ZlcnNpZ2h0IzcwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE3LjE2LjAxLjAwI1dhdGVyIHF1YWxpdHkgbWFuYWdlbWVudCM3MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wMi4wMCNXYXRlciB0ZXN0aW5nIHNlcnZpY2VzIzcwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE2LjAzLjAwI0Zsb29kcGxhaW4gbWFuYWdlbWVudCM3MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wNC4wMCNXYXRlciBjb25zZXJ2YXRpb24gYWR2aXNvcnkgc2VydmljZXMjNzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTYuMDUuMDAjV2F0ZXIgcmlnaHRzIGFkdmlzb3J5IHNlcnZpY2VzIzcwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE2LjA2LjAwI1dhdGVyIHJlc291cmNlIHJlY292ZXJ5IHNlcnZpY2VzIzcwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE2LjA3LjAwI1dhdGVyIHByaWNpbmcgc2VydmljZXMjNzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDAuMDAjSXJyaWdhdGlvbiM3MC4xNy4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wMS4wMCNDYW5hbCBtYWludGVuYW5jZSBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjAyLjAwI0RhbSBtYWludGVuYW5jZSBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjAzLjAwI1Jlc2Vydm9pcnMgbWFpbnRlbmFuY2Ugb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wNC4wMCNQdW1waW5nIHN0YXRpb24gbWFpbnRlbmFuY2Ugb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wNS4wMCNQaXBlbGluZXMgbWFpbnRlbmFuY2Ugb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wNi4wMCNEaWtlIG9yIGVtYmFua21lbnQgbWFpbnRlbmFuY2Ugb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wNy4wMCNXYXRlciB3ZWxsIG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDguMDAjSXJyaWdhdGlvbiBhZHZpc29yeSBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wOS4wMCNJcnJpZ2F0aW9uIHN5c3RlbXMgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xOC4wMC4wMCNEcmFpbmFnZSBzZXJ2aWNlcyM3MC4xNy4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNy4xOC4wMS4wMCNMYW5kIGRyYWluYWdlIHNlcnZpY2VzIzcwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE4LjAyLjAwI1N0b3JtIHdhdGVyIGRyYWluYWdlIzcwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE4LjAzLjAwI0Zsb29kIHByb3RlY3Rpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM3MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM3MS4wMC4wMC4wMC4wMCNNaW5pbmcgYW5kIE9pbCBhbmQgR2FzIFNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEwLjAwLjAwLjAwI01pbmluZyBzZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNS4wMC4wMCNNaW5lIGV4cGxvcmF0aW9uIzcxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEwLjE1LjAxLjAwI01pbmUgZGV2ZWxvcG1lbnQjNzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTUuMDIuMDAjVGVzdCBib3Jpbmcgb3IgY29yZSBkcmlsbGluZyM3MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNi4wMC4wMCNNaW5lIGRyaWxsaW5nIGFuZCBibGFzdGluZyBzZXJ2aWNlcyM3MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNi4wMS4wMCNTaGFmdCBzaW5raW5nIzcxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE2LjAyLjAwI01pbmUgYmxhc3Rpbmcgc2VydmljZXMjNzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDAuMDAjRXh0cmFjdGlvbiM3MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wMS4wMCNTaGFmdCBtaW5pbmcgc2VydmljZXMjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDIuMDAjT3BlbiBwaXQgbWluaW5nIHNlcnZpY2VzIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjAzLjAwI1N0cmlwIG1pbmluZyBzZXJ2aWNlcyM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wNC4wMCNJbiBzaXR1IGxlYWNoaW5nIChJU0wpIHNlcnZpY2VzIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjA1LjAwI1B1bXBpbmcgb3IgZHJhaW5pbmcjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDYuMDAjT3ZlcmJ1cmRlbiByZW1vdmFsIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjA3LjAwI0ltcG91bmRtZW50IG9yIHN0b3JhZ2Ugb2Ygd2F0ZXIgc2VydmljZXMjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDguMDAjU29pbCBmbHVzaGluZyBzZXJ2aWNlcyM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wOS4wMCNNaW5lIGZpbGxpbmcgc2VydmljZXMjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMDAuMDAuMDAjT2lsIGFuZCBnYXMgZXhwbG9yYXRpb24gc2VydmljZXMjNzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTUuMDAuMDAjT2lsIGFuZCBnYXMgZXhwbG9yYXRpb24jNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTUuMDEuMDAjU2Vpc21vZ3JhcGhpYyBzdXJ2ZXlzIzcxLjExLjE1LjAwLjAwCi11bnNwc2M3IzcxLjExLjE1LjAyLjAwI09mZnNob3JlIGV4cGxvcmF0aW9uIzcxLjExLjE1LjAwLjAwCi11bnNwc2M3IzcxLjExLjE1LjAzLjAwI1dlbGwgc3VydmV5aW5nIzcxLjExLjE1LjAwLjAwCi11bnNwc2M3IzcxLjExLjE2LjAwLjAwI1dlbGwgZHJpbGxpbmcgYW5kIG1haW50ZW5hbmNlIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjE2LjAxLjAwI0RpcmVjdGlvbmFsIGRyaWxsaW5nIzcxLjExLjE2LjAwLjAwCi11bnNwc2M3IzcxLjExLjE2LjAyLjAwI09pbCB3ZWxsIGRyaWxsaW5nIzcxLjExLjE2LjAwLjAwCi11bnNwc2M3IzcxLjExLjE2LjAzLjAwI0RyaWxsaW5nIG9mIHdhdGVyIGludGFrZSB3ZWxscyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wNC4wMCNSZWRyaWxsaW5nIG9yIHJld29ya2luZyBvZiB3ZWxscyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wNS4wMCNBY2lkaXppbmcgb3IgY2hlbWljYWwgdHJlYXRpbmcgb2Ygd2VsbHMjNzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTYuMDYuMDAjVG9vbCBmaXNoaW5nIHNlcnZpY2VzIzcxLjExLjE2LjAwLjAwCi11bnNwc2M3IzcxLjExLjE2LjA3LjAwI09pbCB3ZWxsIHBsYXRmb3JtIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcxLjExLjE2LjAwLjAwCi11bnNwc2M3IzcxLjExLjE3LjAwLjAwI0V4dHJhY3Rpb24gc2VydmljZXMjNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTcuMDEuMDAjRmxvdyByYXRlIG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjE3LjAwLjAwCi11bnNwc2M3IzcxLjExLjE3LjAyLjAwI09pbCBzYW1wbGluZyBzZXJ2aWNlcyM3MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNy4wMy4wMCNPaWwgZmllbGQgZHJpbGxpbmcgb3IgbXVkIHNlcnZpY2VzIzcxLjExLjE3LjAwLjAwCi11bnNwc2M3IzcxLjExLjE3LjA0LjAwI0ltcG91bmQgb3Igc3RvcmFnZSBvZiB3YXRlciM3MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOC4wMC4wMCNXZWxsIHJlc3RvcmF0aW9uIGFuZCByZWNsYW1hdGlvbiM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOC4wMS4wMCNDbGVhbmluZyBvciBzd2FiYmluZyBvZiB3ZWxscyM3MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOC4wMi4wMCNTb2lsIGZsdXNoaW5nIHNlcnZpY2VzIzcxLjExLjE4LjAwLjAwCi11bnNwc2M3IzcxLjExLjE4LjAzLjAwI01pbmUgZmlsbGluZyBzZXJ2aWNlcyM3MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOC4wNC4wMCNXZWxsIHBsdWdnaW5nIG9yIGFiYW5kb25tZW50IHNlcnZpY2VzIzcxLjExLjE4LjAwLjAwCi11bnNwc2M3IzcxLjExLjE4LjA1LjAwI0NlbWVudGluZyBzZXJ2aWNlcyBmb3Igd2VsbCBjYXNpbmdzIzcxLjExLjE4LjAwLjAwCi11bnNwc2M3IzcxLjExLjE5LjAwLjAwI1dlbGwgZW1lcmdlbmN5IHNlcnZpY2VzIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjE5LjAxLjAwI1dlbGwgZmlyZSBmaWdodGluZyBzZXJ2aWNlcyM3MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOS4wMi4wMCNXZWxsIGNhcHBpbmcgc2VydmljZXMjNzEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDAuMDAjQ2FzZWQgaG9sZSB3ZWxsIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDEuMDAjQ2FzZWQgaG9sZSBmb3JtYXRpb24gc2FtcGxpbmcgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wMi4wMCNDYXNpbmcgdGhpY2tuZXNzIG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjAzLjAwI0NoZW1pY2FsIGN1dHRlcnMgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDQuMDAjRWxlY3Ryb21hZ25ldGljIHBpcGUgcmVjb3Zlcnkgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDUuMDAjV2VsbCBmbG93IG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjA2LjAwI1dlbGwgZmx1aWQgZGVuc2l0eSBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wNy4wMCNXZWxsIGZsdWlkIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjA4LjAwI0ZyZWUgcG9pbnQgdG9vbCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wOS4wMCNHYW1tYSByYXkgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTAuMDAjSmV0IGN1dHRlciBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xMS4wMCNNZWFzdXJlbWVudCB3aGlsZSBwZXJmb3JhdGluZyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xMi4wMCNOZXV0cm9uIHBvcm9zaXR5IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjEzLjAwI051Y2xlYXIgc3BlY3Ryb3Njb3B5IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjE0LjAwI1dlbGwgcGFja2VyIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjE1LjAwI1Blcm1hbmVudCBtYWduZXRzIHBpcGUgcmVjb3Zlcnkgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTYuMDAjV2VsbCBwbHVnZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xNy4wMCNXZWxsIHByZXNzdXJlIG1lYXN1cmVtZW50IGNvbnRyb2wgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTguMDAjUHJvZHVjdGlvbiBsb2dnaW5nIGJvcmVob2xlIGZsdWlkIG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjE5LjAwI1Byb2R1Y3Rpb24gbG9nZ2luZyBkZW5zaXR5IG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjIwLjAwI1Byb2R1Y3Rpb24gbG9nZ2luZyBkb3duaG9sZSB2aWRlbyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yMS4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgZmxvdyBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yMi4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgcHJlc3N1cmUgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjMuMDAjT3RoZXIgcHJvZHVjdGlvbiBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjI0LjAwI1Byb2R1Y3Rpb24gbG9nZ2luZyB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yNS4wMCNTZXZlcmluZyBjb2xsaWRpbmcgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjYuMDAjV2VsbCBsb2dnaW5nIHNvbmljIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjI3LjAwI1N0dWNrIHBvaW50IHRvb2wgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjguMDAjVGhlcm1hbCBkZWNheSB3ZWxsIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjkuMDAjV2VsbCB0dWJ1bGFyIGNvcnJvc2lvbiBldmFsdWF0aW9uIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjMwLjAwI1dlbGwgcGVyZm9ybWFuY2Ugc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMzEuMDAjV2VsbCB0dWJ1bGFyIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjAwLjAwI09wZW4gaG9sZSB3ZWxsIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDEuMDAjRGlnaXRhbCBzb25pYyBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjAyLjAwI0JvcmVob2xlIGdlb21ldHJ5IGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDMuMDAjRGVuc2l0eSBsaXRob2xvZ3kgbnVjbGVhciBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjA0LjAwI0RpcG1ldGVyIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDUuMDAjRGlwb2xlIHNvbmljIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDYuMDAjRGlyZWN0aW9uYWwgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wNy4wMCNEaXJlY3Rpb25hbCBzdXJ2ZXkgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDguMDAjRWxlY3Ryb21hZ25ldGljIHByb3BhZ2F0aW9uIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDkuMDAjRm9ybWF0aW9uIHRlc3Rpbmcgc2FtcGxpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTAuMDAjRnJhY3R1cmUgaWRlbnRpZmljYXRpb24gbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xMS4wMCNHYW1tYSByYXkgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xMi4wMCNHYW1tYSByYXkgc3BlY3Ryb3Njb3B5IGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTMuMDAjR2VvY2hlbWljYWwgbnVjbGVhciBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjE0LjAwI1dlbGwgaW1hZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xNS4wMCNNYWduZXRpYyByZXNvbmFuY2UgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xNi4wMCNNaWNyb3Jlc2lzdGl2aXR5IGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTcuMDAjTmV1dHJvbiBwb3Jvc2l0eSBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjE4LjAwI1BldHJvcGh5c2ljcyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xOS4wMCNSZXNpc3Rpdml0eSBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjIwLjAwI1NsaW0gYWNjZXNzIHNvbmljIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMjEuMDAjU29uaWMgY2VtZW50IGJvbmQgcmF0aW8gbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4yMi4wMCNXZWxsIHNvbmljIGltYWdpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjIuMDAuMDAjT3RoZXIgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMi4wMS4wMCNMb2dnaW5nIHdpdGggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMi4wMi4wMCNMb2dnaW5nIHdoaWxlIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjExLjIyLjAwLjAwCi11bnNwc2M3IzcxLjExLjIyLjAzLjAwI0xvZ2dpbmcgZHVyaW5nIGZpc2hpbmcgc2VydmljZXMjNzEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjIuMDQuMDAjTG9nZ2luZyB3aGlsZSBwZXJmb3JhdGluZyBzZXJ2aWNlcyM3MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMi4wNS4wMCNEcmlsbCBwaXBlIGNvbnZleWVkIHdlbGwgc2VydmljZXMjNzEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjIuMDYuMDAjR2VuZXJhbCB3ZWxsIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDAuMDAjU2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wMS4wMCNUd28gZGltZW5zaW9uYWwgbGFuZCBzZWlzbWljIGFjcXVpc2l0aW9uIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjAyLjAwI1R3byBkaW1lbnNpb25hbCBtYXJpbmUgc2Vpc21pYyBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wMy4wMCNUd28gZGltZW5zaW9uYWwgc2Vpc21pYyBkYXRhIHByb2Nlc3Npbmcgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDQuMDAjVGhyZWUgZGltZW5zaW9uYWwgbGFuZCBzZWlzbWljIGFjcXVpc2l0aW9uIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjA1LjAwI1RocmVlIGRpbWVuc2lvbmFsIG1hcmluZSBzZWlzbWljIGFjcXVpc2l0aW9uIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjA2LjAwI1RocmVlIGRpbWVuc2lvbmFsIHNlaXNtaWMgZGF0YSBwcm9jZXNzaW5nIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjA3LjAwI0ZvdXIgZGltZW5zaW9uYWwgbGFuZCBzZWlzbWljIGFjcXVpc2l0aW9uIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjA4LjAwI0ZvdXIgZGltZW5zaW9uYWwgbWFyaW5lIHNlaXNtaWMgYWNxdWlzaXRpb24gc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDkuMDAjRm91ciBkaW1lbnNpb25hbCBzZWlzbWljIGRhdGEgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xMC4wMCNDaGVja3Nob3Qgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xMS4wMCNDcm9zcyB3ZWxsIHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTIuMDAjRGV2aWF0ZWQgd2VsbCBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjEzLjAwI0dlb3BoeXNpY3Mgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xNC4wMCNPZmZzZXQgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xNS4wMCNRdWlja3Nob3Qgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xNi4wMCNTZWlzbWljIGRhdGEgYWNxdWlzaXRpb24gd2hpbGUgZHJpbGxpbmcgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTcuMDAjU2xpbSBob2xlIHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTguMDAjU2Vpc21pYyBzdXJ2ZXkgZXZhbHVhdGlvbiBvciBkZXNpZ24gc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTkuMDAjVmVydGljYWwgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4yMC4wMCNXYWxrYXdheSBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjIxLjAwI0dlb2xvZ2ljYWwgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMDAuMDAuMDAjV2VsbCBkcmlsbGluZyBjb25zdHJ1Y3Rpb24gYW5kIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjAwLjAwI0NlbWVudCBwdW1waW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjAxLjAwI09pbGZpZWxkIGNhc2luZyBoYXJkd2FyZSBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wMi4wMCNPaWxmaWVsZCBjZW1lbnQgbGFiIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDMuMDAjRG93bmhvbGUgb2lsZmllbGQgdG9vbHMgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDQuMDAjT2lsZmllbGQgZmlsdGVyaW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjA1LjAwI0ZvYW0gY2VtZW50aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjA2LjAwI0dlb3RoZXJtYWwgd2VsbCBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDcuMDAjTGluZXIgY2VtZW50aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjA4LjAwI09pbHdlbGwgbG9zdCBjaXJjdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wOS4wMCNPaWxmaWVsZCBtdWQgcmVtb3ZhbCBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xMC4wMCNQbHVnIGNlbWVudGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xMS4wMCNXZWxsIHNpdGUgcHJlc3N1cmUgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xMi4wMCNPaWxmaWVsZCBwcmVzc3VyZSB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjEzLjAwI1N1cmZhY2UgY2FzaW5nIGNlbWVudGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xNC4wMCNJbnRlcm1lZGlhdGUgY2FzaW5nIGNlbWVudGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xNS4wMCNQcm9kdWN0aW9uIHN0cmluZyBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTYuMDAjU3F1ZWV6ZSB3ZWxsIGNlbWVudGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xNy4wMCNXZWxsIHdhdGVyIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTguMDAjV2VsbCBjZW1lbnQgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xOS4wMCNXZWxsIGNlbWVudCBncm91dGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4yMC4wMCNXZWxsIGNlbWVudGluZyBhZGRpdGl2ZXMgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMjEuMDAjV2VsbCBjZW1lbnRpbmcgZGVzaWduIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjIyLjAwI1dlbGwgY2xlYW5pbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMjMuMDAjV2VsbCByZXBhaXIgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDAuMDAjQ29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wMS4wMCNBY2lkaXppbmcgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjAyLjAwI0NhYmxlIGluc3RhbGxhdGlvbiB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDMuMDAjQ2VtZW50aW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wNC4wMCNDaGVtaWNhbCBjdXR0aW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wNS4wMCNDbGVhbiBvdXQgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjA2LjAwI0NvbXBsZXRpb24gdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjA3LjAwI0NvbnZleWluZyBpbmZsYXRhYmxlcyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDguMDAjQ29yaW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wOS4wMCNFeHRlbmRlZCByZWFjaCB3ZWxsIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjEwLjAwI0Zpc2hpbmcgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjExLjAwI0ZyYWN0dXJpbmcgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjEyLjAwI0hpZ2ggcHJlc3N1cmUgY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xMy4wMCNIb3Jpem9udGFsIGlzb2xhdGlvbiBvaWxmaWVsZCBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xNC4wMCNMb2dnaW5nIHdpdGggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xNS4wMCNNaWxsaW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xNi4wMCNOaXRyb2dlbiByZWxhdGVkIGFwcGxpY2F0aW9ucyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTcuMDAjUGVyZm9yYXRpbmcgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjE4LjAwI1BpcGVsaW5lIG9yIGZsb3dsaW5lIGxheWluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xOS4wMCNQaXBlbGluZSBpbnRlcnZlbnRpb24gc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMjAuMDAjU2FuZCBjb250cm9sIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4yMS4wMCNBYnJhc2l2ZSB0dWJ1bGFyIGNsZWFuaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjIyLjAwI1dlbGwga2lsbCB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMjMuMDAjQ2FzaW5nIGV4aXQgd2l0aCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEyLjAwLjAwI0NvcmluZyBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wMS4wMCNDb252ZW50aW9uYWwgY29yaW5nIHNlcnZpY2VzIzcxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEyLjAyLjAwI0NvcmUgaXNvbGF0aW9uIHNlcnZpY2VzIzcxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEyLjAzLjAwI0NvcmUgcHJlc2VydmF0aW9uIHNlcnZpY2VzIzcxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEyLjA0LjAwI0hvcml6b250YWwgY29yaW5nIHNlcnZpY2VzIzcxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEyLjA1LjAwI09yaWVudGVkIGNvcmluZyBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wNi4wMCNSaWcgc2l0ZSBjb3JlIGFuYWx5c2lzIHNlcnZpY2VzIzcxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEyLjA3LjAwI1Nwb25nZSBjb3Jpbmcgc2VydmljZXMjNzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDguMDAjV2lyZWxpbmUgcmV0cmlldmFibGUgY29yaW5nIHNlcnZpY2VzIzcxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEzLjAwLjAwI0Rvd25ob2xlIHRvb2wgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTMuMDEuMDAjRG93bmhvbGUgdmlicmF0aW9uIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTMuMDIuMDAjRG93bmhvbGUgaG9sZSBvcGVuaW5nIHNlcnZpY2VzIzcxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEzLjAzLjAwI1JlYW1pbmcgd2hpbGUgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTMuMDQuMDAjRG93bmhvbGUgdG9ycXVlIG9yIGRyYWcgcmVkdWN0aW9uIHNlcnZpY2VzIzcxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEzLjA1LjAwI0Rvd25ob2xlIHVuZGVycmVhbWluZyBzZXJ2aWNlcyM3MS4xMi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNC4wMC4wMCNPaWxmaWVsZCBkcmlsbGluZyBiaXQgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDEuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IGRlc2lnbiBzZXJ2aWNlcyM3MS4xMi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNC4wMi4wMCNPaWxmaWVsZCBkcmlsbGluZyBiaXQgaHlkcmF1bGljIG9wdGltaXphdGlvbiBzZXJ2aWNlcyM3MS4xMi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNC4wMy4wMCNPaWxmaWVsZCBkcmlsbGluZyBiaXQgcGxhbm5pbmcgc2VydmljZXMjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDQuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IHJlY29yZGluZyBzZXJ2aWNlcyM3MS4xMi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNC4wNS4wMCNPaWxmaWVsZCBkcmlsbGluZyBiaXQgcmVwYWlyIHNlcnZpY2VzIzcxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE0LjA2LjAwI09pbGZpZWxkIGRyaWxsaW5nIGJpdCBmb290YWdlIGNvbnRyYWN0cyM3MS4xMi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNC4wNy4wMCNXZWxsIHNpdGUgZHJpbGxpbmcgb3B0aW1pemF0aW9uIGFzc2lzdGFuY2Ugc2VydmljZSM3MS4xMi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wMC4wMCNEcmlsbGluZyBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wMS4wMCNBY291c3RpYyBtZWFzdXJlbWVudCB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjAyLjAwI0Fjb3VzdGljIHRlbGVtZXRyeSB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjAzLjAwI0NhbGlwZXIgbWVhc3VyZW1lbnQgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wNC4wMCNEZW5zaXR5IG1lYXN1cmVtZW50IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDUuMDAjT2lsZmllbGQgZHJpbGxpbmcgcGVyZm9ybWFuY2Ugc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDYuMDAjRWxlY3Ryb21hZ25ldGljIHRlbGVtZXRyeSB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjA3LjAwI0Zvcm1hdGlvbiBkaXAgbWVhc3VyZW1lbnQgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wOC4wMCNGb3JtYXRpb24gcHJlc3N1cmUgbWVhc3VyZW1lbnQgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wOS4wMCNHZW9sb2dpY2FsbHkgc3RlZXJlZCB3ZWxscyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4xMC4wMCNHZW9zdG9wcGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4xMS4wMCNNdWQgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4xMi4wMCNOdWNsZWFyIG1hZ25ldGljIHJlc29uYW5jZSBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4xMy4wMCNQb3Jvc2l0eSBtZWFzdXJlbWVudCB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjE0LjAwI1Jlc2lzdGl2aXR5IG1lYXN1cmVtZW50IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTUuMDAjV2VsbCBzdXJ2ZXlpbmcgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4xNi4wMCNTdXJ2ZXlpbmcgd2lyZWxpbmUgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDAuMDAjT2lsIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDEuMDAjV2VsbCBjYXNpbmcgY3JldyBzZXJ2aWNlIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjAyLjAwI1dlbGwgY2FzaW5nIHBsYW5uaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjAzLjAwI1dlbGwgY2FzaW5nIG1pbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDQuMDAjQ29pbGVkIHR1YmluZyBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wNS4wMCNXZWxsIGNvbXBsZXRpb24gcGxhbm5pbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDYuMDAjQ29udmVudGlvbmFsIHdlbGwgZGlyZWN0aW9uYWwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDcuMDAjV2VsbCBkaXJlY3Rpb25hbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wOC4wMCNXZWxsIGRyaWxsaW5nIGNvbnRyYWN0IGRldmVsb3BtZW50IHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjA5LjAwI1dlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTAuMDAjV2VsbCBkcmlsbGluZyBlbmdpbmVlcmluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xMS4wMCNXZWxsIGRyaWxsaW5nIG11ZCBvciBmbHVpZCBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xMi4wMCNXZWxsIGRyaWxsaW5nIG9mIHdhdGVyIGludGFrZSB3ZWxsIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjEzLjAwI1dlbGwgZHJpbGxpbmcgcmlnIG1vbml0b3Igc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTQuMDAjV2VsbCBkcmlsbGluZyBzb2xpZHMgY29udHJvbCM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xNS4wMCNXZWxsIGRyaWxsaW5nIHN0YWJpbGl6aW5nIG9yIGhvbGUgb3BlbmluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xNi4wMCNXZWxsIGRyaWxsaW5nIHN1cGVydmlzaW9uIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjE3LjAwI1dlbGwgZHJpbGxpbmcgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xOC4wMCNXZWxsIGRyaWxsaW5nIG90aGVyIGdlbmVyYWwgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTkuMDAjRXh0ZW5kZWQgcmVhY2ggZGlyZWN0aW9uYWwgd2VsbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yMC4wMCNNdWx0aWxhdGVyYWwgZGlyZWN0aW9uYWwgd2VsbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yMS4wMCNPaWwgY291bnRyeSB0dWJ1bGFyIG1vZGlmaWNhdGlvbiBvciB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjIyLjAwI1dlbGwgZHJpbGxpbmcgcGlja3VwIG9yIGxheWRvd24gc2VydmljZSM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yMy4wMCNXZWxsIGRyaWxsaW5nIHBpcGUgc3RvcmFnZSM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yNC4wMCNXZWxsIGRyaWxsaW5nIHBpcGUgdGhyZWFkaW5nIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjI1LjAwI1JhdGhvbGUgd2VsbCBkcmlsbGluZyBzZXJ2aWNlIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjI2LjAwI1Nob3J0IHJhZGl1cyBkaXJlY3Rpb25hbCB3ZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjI3LjAwI1N0ZWVyYWJsZSB1bmRlcnJlYW1pbmcgd2hpbGUgd2VsbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yOC4wMCNVbHRyYSBzaG9ydCByYWRpdXMgZGlyZWN0aW9uYWwgd2VsbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yOS4wMCNVbmRlcmJhbGFuY2VkIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMzAuMDAjV2VsbCBwbGFubmluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4zMS4wMCNXZWxsIHJlZHJpbGxpbmcgb3IgcmV3b3JraW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjMyLjAwI1dlbGwgZHJpbGxpbmcgZGV2aWF0aW9uIGNvbnRyb2wjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMzMuMDAjT2lsZmllbGQgZ3JhdmVsIHBhY2tpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMzQuMDAjT2lsZmllbGQgaHVsbCBzeXN0ZW1zIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjM1LjAwI1JpZyB3ZWxsIHB1bGxpbmcgY3JldyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4zNi4wMCNXZWxsaGVhZCBlcXVpcG1lbnQgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMzcuMDAjU2lkZXRyYWNraW5nIHdpdGggd2hpcHN0b2NrIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE3LjAwLjAwI09pbGZpZWxkIGZpc2hpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTcuMDEuMDAjT2lsZmllbGQgZmlzaGluZyBzZXJ2aWNlIGRlc2lnbiBzZXJ2aWNlcyM3MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNy4wMi4wMCNPaWxmaWVsZCBmaXNoaW5nIHNlcnZpY2UgZWNvbm9taWMgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNy4wMy4wMCNPaWxmaWVsZCBmaXNoaW5nIHNlcnZpY2Ugb3BlcmF0aW9uIHNlcnZpY2VzIzcxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE3LjA0LjAwI09pbGZpZWxkIGp1bmsgcmVjb3Zlcnkgc2VydmljZXMjNzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTcuMDUuMDAjT2lsZmllbGQgcGlwZSByZWNvdmVyeSBzZXJ2aWNlIzcxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE3LjA2LjAwI09pbGZpZWxkIGZpc2hpbmcgb3IgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTguMDAuMDAjR2FzIGxpZnQgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTguMDEuMDAjQ29pbGVkIHR1YmluZyBnYXMgbGlmdCBzZXJ2aWNlcyM3MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xOC4wMi4wMCNHYXMgbGlmdCBmaXhpbmcgb3IgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xOC4wMy4wMCNHYXMgbGlmdCBraWNrb3ZlciBzZXJ2aWNlcyM3MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xOC4wNC4wMCNHYXMgbGlmdCBzYW5kIGNvbnRhaW5tZW50IHNlcnZpY2VzIzcxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE5LjAwLjAwI0Rvd24gaG9sZSBmbHVpZCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xOS4wMS4wMCNEb3duIGhvbGUgZmx1aWQgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMi4xOS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xOS4wMi4wMCNEb3duIGhvbGUgZmx1aWQgbGFib3JhdG9yeSBzZXJ2aWNlcyM3MS4xMi4xOS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xOS4wMy4wMCNEb3duIGhvbGUgZmx1aWQgc2FtcGxpbmcgc2VydmljZXMjNzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjAuMDAuMDAjV2VsbCBwZXJmb3JhdGluZyBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMC4wMS4wMCNDb2lsZWQgdHViaW5nIHdlbGwgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjAuMDIuMDAjU2xpY2tsaW5lIHdlbGwgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjAuMDMuMDAjVGhyb3VnaCB0dWJpbmcgd2VsbCBwZXJmb3JhdGlvbiBzZXJ2aWNlcyM3MS4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMC4wNC4wMCNUdWJpbmcgY29udmV5ZWQgd2VsbCBwZXJmb3JhdGluZyBzZXJ2aWNlcyM3MS4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMC4wNS4wMCNXaXJlbGluZSB3ZWxsIHBlcmZvcmF0aW5nIHNlcnZpY2VzIzcxLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIwLjA2LjAwI1dlbGwgdHViaW5nIHB1bmNoZXIgc2VydmljZXMjNzEuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDAuMDAjT2lsZmllbGQgc2FuZCBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjAxLjAwI0FjaWQgc2FuZCBjb250cm9sIHB1bXBpbmcgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDIuMDAjU2FuZCBjb250cm9sIGJsZW5kaW5nIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjAzLjAwI0NsZWFuaW5nIGZsdWlkIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wNC4wMCNDb21wbGV0aW9uIGZsdWlkIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wNS4wMCNXZWxsIGNvbnNvbGlkYXRpb24gc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDYuMDAjT2lsZmllbGQgZmlsdGVyaW5nIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjA3LjAwI0ZyYWN0dXJpbmcgZmx1aWQgc2FuZCBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjA4LjAwI0ZyYWN0dXJpbmcgcHJlIGZyYWMgZGVzaWduIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDkuMDAjR2VuZXJhbCBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMTAuMDAjR3JhdmVsIGNhcnJpZXIgZmx1aWQgc2FuZCBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjExLjAwI1NhbmQgY29udHJvbCBsYWIgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xMi4wMCNNdWx0aXpvbmUgc2FuZCBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjEzLjAwI1NhbmQgY29udHJvbCBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjE0LjAwI1NhbmQgY29udHJvbCB0ZW1wb3JhcnkgaXNvbGF0aW9uIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjE1LjAwI1dlbGwgdG9vbCByZWRyZXNzaW5nIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjE2LjAwI05vbiBmcmFjdHVyaW5nIHNhbmQgY29udHJvbCBwdW1waW5nIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIyLjAwLjAwI1NsaWNrbGluZSBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMi4wMS4wMCNTbGlja2xpbmUgZmlzaGluZyBzZXJ2aWNlcyM3MS4xMi4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMi4wMi4wMCNTbGlja2xpbmUgbGlmdGluZyBzZXJ2aWNlcyM3MS4xMi4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMi4wMy4wMCNTbGlja2xpbmUgbWFuaXB1bGF0aW9uIHNlcnZpY2VzIzcxLjEyLjIyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIzLjAwLjAwI1N1YnNlYSB3ZWxsIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIzLjAxLjAwI1N1YnNlYSB3ZWxsIGRpdmluZyBzZXJ2aWNlcyM3MS4xMi4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wMi4wMCNTdWJzZWEgd2VsbCByZW1vdGUgb3BlcmF0aW9uIHZlaGljbGUgcm92IHNlcnZpY2VzIzcxLjEyLjIzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIzLjAzLjAwI1N1YnNlYSB3ZWxsIGZpeHR1cmluZyBvciB0ZXN0IGVxdWlwbWVudCBzZXJ2aWNlcyM3MS4xMi4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wNC4wMCNTdWJzZWEgd2VsbCBpbnRlcnZlbnRpb24gb3IgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wNS4wMCNTdWJzZWEgd2VsbCBzYWZldHkgdGVzdCB0cmVlIHNlcnZpY2VzIzcxLjEyLjIzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIzLjA2LjAwI1N1YnNlYSB3ZWxsIGVxdWlwbWVudCBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MS4xMi4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wMC4wMCNXZWxsIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDEuMDAjRHJpbGwgc3RlbSBmbG93IG1ldGVyaW5nIHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjAyLjAwI0RyaWxsIHN0ZW0gc3VyZmFjZSB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjAzLjAwI0RyaWxsIHN0ZW0gdGVzdGluZyBwYWNrZXIgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDQuMDAjRHJpbGwgc3RlbSB0ZXN0aW5nIHByZXNzdXJlIGNvbnRyb2wgdGVzdCBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wNS4wMCNEcmlsbCBzdGVtIHRlc3RpbmcgcHVsc2Ugb3BlcmF0ZWQgdGVzdCBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wNi4wMCNEcmlsbCBzdGVtIHRlc3RpbmcgZm9yIHVsdHJhIGhpZ2ggcHJlc3MgaGlnaCB0ZW1wIGVudmlyb25tZW50IHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjA3LjAwI0RyaWxsIHN0ZW0gdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wOC4wMCNQZXJpb2RpYyB3ZWxsIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDkuMDAjU3VyZmFjZSB3ZWxsIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMTAuMDAjVW5kZXJiYWxhbmNlZCB0ZXN0aW5nIHdoaWxlIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI1LjAwLjAwI1dhdGVyIG9yIGdhcyBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjI1LjAxLjAwI1dhdGVyIG9yIGdhcyBjb250cm9sIGRlc2lnbiBzZXJ2aWNlcyM3MS4xMi4yNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNS4wMi4wMCNXYXRlciBvciBnYXMgY29udHJvbCBldmFsdWF0aW9uIHNlcnZpY2VzIzcxLjEyLjI1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI1LjAzLjAwI1dhdGVyIG9yIGdhcyBjb250cm9sIGlzb2xhdGlvbiBzZXJ2aWNlcyM3MS4xMi4yNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNS4wNC4wMCNXYXRlciBvciBnYXMgY29udHJvbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjI1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI1LjA1LjAwI1dhdGVyIG9yIGdhcyB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjI1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjAwLjAwI1dlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wMS4wMCNXZWxsIGNhc2luZyBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjAyLjAwI1dlbGwgY29tcGxldGlvbiBmbHVpZHMgc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDMuMDAjR2FzIGxpZnQgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjA0LjAwI0hvcml6b250YWwgY2FzZWQgaG9sZSBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wNS4wMCNIb3Jpem9udGFsIG9wZW4gaG9sZSBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wNi4wMCNJbnRlbGxpZ2VudCB3ZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDcuMDAjTGluZXIgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjA4LjAwI011bHRpbGF0ZXJhbCB3ZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDkuMDAjUGVybWFuZW50IHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4xMC4wMCNTYW5kIGNvbnRyb2wgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjExLjAwI1RlbXBvcmFyeSBkcmlsbCBzdGVtIHRlc3Rpbmcgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjEyLjAwI1R1YmluZyB3ZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMTMuMDAjVW5kZXJiYWxhbmNlZCB3ZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDAuMDAjV2VsbCBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wMS4wMCNPaWwgd2VsbCBwbGF0Zm9ybSBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MS4xMi4yNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wMi4wMCNPaWxmaWVsZCBwdW1waW5nIHVuaXQgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDMuMDAjT2lsZmllbGQgcm9kIHB1bXAgcmVwYWlyIHNlcnZpY2VzIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjA0LjAwI09pbGZpZWxkIHNudWJiaW5nIHNlcnZpY2UjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDUuMDAjT2lsZmllbGQgc3Vja2VyIHJvZCBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MS4xMi4yNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wNi4wMCNXZWxsIHN3YWJiaW5nIHNlcnZpY2VzIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjA3LjAwI09pbGZpZWxkIHR1YmluZyBhbmNob3Igc2VydmljZXMjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDguMDAjT2lsZmllbGQgcHVtcCBtZWNoYW5pYyBzZXJ2aWNlcyM3MS4xMi4yNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wMC4wMCNXZWxsIG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDEuMDAjRG93bmhvbGUgcmVjb3JkaW5nIHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjAyLjAwI1dlbGwgZmxvdyBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjAzLjAwI09pbCBvciBnYXMgd2VsbCBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjA0LjAwI1dlbGwgc2l0ZSBwaGFzZSBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjA1LjAwI1dlbGwgc2l0ZSBwdW1wIG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDYuMDAjV2VsbCBzaXRlIHN1cmZhY2UgZGF0YSBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wNy4wMCNXZWxsIHNpdGUgc3VyZmFjZSByZWFkb3V0IHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjA4LjAwI1dlbGwgc2l0ZSBzdXJmYWNlIHJlY29yZGluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wOS4wMCNTdXJmYWNlIHdlbGwgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4xMC4wMCNTdWJzdXJmYWNlIHdlbGwgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOS4wMC4wMCNPaWxmaWVsZCByaWdzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjI5LjAxLjAwI0RlZXB3YXRlciBvaWxmaWVsZCByaWcgc2VydmljZXMjNzEuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjkuMDIuMDAjSmFja3VwIG9pbGZpZWxkIHJpZyBzZXJ2aWNlcyM3MS4xMi4yOS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOS4wMy4wMCNCYXJnZSBvaWxmaWVsZCByaWcgc2VydmljZXMjNzEuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjkuMDQuMDAjTGFuZCBvaWxmaWVsZCByaWcgc2VydmljZXMjNzEuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjkuMDUuMDAjUGxhdGZvcm0gb2lsZmllbGQgcmlnIHNlcnZpY2VzIzcxLjEyLjI5LjAwLjAwCi11bnNwc2M3IzcxLjEzLjAwLjAwLjAwI09pbCBhbmQgZ2FzIGV4dHJhY3Rpb24gYW5kIHByb2R1Y3Rpb24gZW5oYW5jZW1lbnQgc2VydmljZXMjNzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDAuMDAjV2VsbCBmcmFjdHVyaW5nIHNlcnZpY2VzIzcxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjAxLjAwI0FjaWQgYmFzZWQgZmx1aWQgd2VsbCBmcmFjdHVyaW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjAyLjAwI0VtdWxzaW9uIGJhc2VkIGZsdWlkIHdlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wMy4wMCNGb2FtIGJhc2VkIGZsdWlkIHdlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wNC4wMCNPaWwgd2VsbCBmcmFjdHVyaW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjA1LjAwI09pbCB3ZWxsIHNjYWxlIGNvbnRyb2wgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDYuMDAjV2VsbCBmcmFjdHVyZSB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjA3LjAwI1dlbGwgZnJhY3R1cmluZyBkb3duaG9sZSBldmFsdWF0aW9uIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjA4LjAwI1dlbGwgZnJhY3R1cmluZyBoZWlnaHQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wOS4wMCNXZWxsIGZyYWN0dXJpbmcgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xMC4wMCNXZWxsIGZyYWN0dXJpbmcgc2VydmljZSBkZXNpZ24gc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTEuMDAjV2VsbCBmcmFjdHVyaW5nIHNlcnZpY2UgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xMi4wMCNXZWxsIGZyYWN0dXJpbmcgc3VyZmFjZSBldmFsdWF0aW9uIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjEzLjAwI1dlbGwgZnJhY3R1cmluZyB0cmVhdG1lbnQgcXVhbGl0eSBjb250cm9sIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjE0LjAwI09pbCBiYXNlZCBmbHVpZCB3ZWxsIGZyYWN0dXJpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTUuMDAjT3RoZXIgd2VsbCBmcmFjdHVyaW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjE2LjAwI1dlbGwgZnJhY3R1cmluZyBzdHJlc3MgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xNy4wMCNXYXRlciBiYXNlZCBmbHVpZCB3ZWxsIGZyYWN0dXJpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDAuMDAjTWF0cml4IHN0aW11bGF0aW9uIHNlcnZpY2VzIzcxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjAxLjAwI0FjaWQgYmFzZWQgbWF0cml4IHN0aW11bGF0aW9uIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjAyLjAwI0Zvcm1hdGlvbiBzZWFsZXIgbWF0cml4IHN0aW11bGF0aW9uIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjAzLjAwI01hdHJpeCBvcmdhbmljIGNsZWFudXAgc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDQuMDAjTWF0cml4IG9yZ2FuaWMgaW5oaWJpdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wNS4wMCNNYXRyaXggc2NhbGUgY2xlYW51cCBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wNi4wMCNNYXRyaXggc2NhbGUgaW5oaWJpdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wNy4wMCNNYXRyaXggdHJlYXRtZW50IGRlc2lnbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wOC4wMCNNYXRyaXggdHJlYXRtZW50IGRpdmVyc2lvbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wOS4wMCNNYXRyaXggdHJlYXRtZW50IGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMTAuMDAjTWF0cml4IHRyZWF0bWVudCBxdWFsaXR5IGNvbnRyb2wgc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMTEuMDAjTm9uIGFjaWQgYmFzZWQgbWF0cml4IHN0aW11bGF0aW9uIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEyLjAwLjAwI09pbGZpZWxkIG5pdHJvZ2VuIHNlcnZpY2VzIzcxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEyLjAxLjAwI05pdHJvZ2VuIHdlbGwgc2VydmljZXMjNzEuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDAuMDAjT3RoZXIgb2lsZmllbGQgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4wMS4wMCNCb3R0b20gaW50YWtlIG9pbGZpZWxkIHB1bXBpbmcgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDIuMDAjQ2FibGUgZGVwbG95ZWQgb2lsZmllbGQgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4wMy4wMCNDbzIgb2lsZmllbGQgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4wNC4wMCNDb2lsZWQgdHViaW5nIGRlcGxveWVkIG9pbGZpZWxkIHB1bXBpbmcgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDUuMDAjRG93bmhvbGUgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4wNi4wMCNEdWFsIGNvbXBsZXRpb24gd2VsbCBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4wNy4wMCNIb3Jpem9udGFsIHB1bXBpbmcgd2VsbCBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4wOC4wMCNPaWxmaWVsZCBwdW1waW5nIGluc3RhbGxhdGlvbiBwdWxsIG9yIG9wZXJhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4wOS4wMCNXZWxsIHByb2ZpbGUgbW9kaWZpY2F0aW9uIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjEwLjAwI09pbGZpZWxkIHNwb29saW5nIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjE0LjAwLjAwI1dlbGwgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xNC4wMS4wMCNPaWxmaWVsZCBmbGFyZSBzeXN0ZW0gc2VydmljZXMjNzEuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTQuMDIuMDAjT2lsZmllbGQgaG90IG9pbCBvciB3YXRlciBzZXJ2aWNlIzcxLjEzLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEzLjE0LjAzLjAwI09pbGZpZWxkIHN0ZWFtaW5nIHNlcnZpY2VzIzcxLjEzLjE0LjAwLjAwCi11bnNwc2M3IzcxLjE0LjAwLjAwLjAwI09pbCBhbmQgZ2FzIHJlc3RvcmF0aW9uIGFuZCByZWNsYW1hdGlvbiBzZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMC4wMC4wMCNFbWVyZ2VuY3kgd2VsbCBjb250cm9sIHNlcnZpY2VzIzcxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE0LjEwLjAxLjAwI1dlbGwgcHJlc3N1cmUgY29udHJvbCBzZXJ2aWNlcyM3MS4xNC4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMC4wMi4wMCNXZWxsIGNhcHBpbmcgc2VydmljZXMjNzEuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTAuMDMuMDAjV2VsbCBmaXJlIGZpZ2h0aW5nIHNlcnZpY2VzIzcxLjE0LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE0LjEwLjA0LjAwI1dpbGQgd2VsbCBjb250cm9sIHNlcnZpY2VzIzcxLjE0LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE0LjExLjAwLjAwI1dlbGwgcGx1Z2dpbmcgYW5kIGFiYW5kb25tZW50IHNlcnZpY2VzIzcxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE0LjExLjAxLjAwI1dlbGwgYWJhbmRvbm1lbnQgc2VydmljZXMjNzEuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTEuMDIuMDAjV2VsbCBwbHVnZ2luZyBzZXJ2aWNlcyM3MS4xNC4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMi4wMC4wMCNXZWxsIHNpdGUgcmVzdG9yYXRpb24jNzEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTIuMDEuMDAjV2VsbCBjbGVhbmluZyBvciBzd2FiYmluZyBzZXJ2aWNlcyM3MS4xNC4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMi4wMi4wMCNXZWxsIHNpdGUgcmVzdG9yYXRpb24gc2VydmljZXMjNzEuMTQuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMDAuMDAuMDAjT2lsIGFuZCBnYXMgZGF0YSBtYW5hZ2VtZW50IGFuZCBwcm9jZXNzaW5nIHNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEwLjAwLjAwI09pbGZpZWxkIGRhdGEgY29tbXVuaWNhdGlvbiBzZXJ2aWNlcyM3MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMC4wMS4wMCNMb2cgZGF0YSB0cmFuc21pc3Npb24gc2VydmljZXMjNzEuMTUuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTAuMDIuMDAjTG9nIGdyYXBoaWNzIHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM3MS4xNS4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMC4wMy4wMCNSZWFsIHRpbWUgd2VsbCBkYXRhIG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTUuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTAuMDQuMDAjU2F0ZWxsaXRlIHdlbGwgZGF0YSB0cmFuc21pc3Npb24gc2VydmljZXMjNzEuMTUuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTAuMDUuMDAjV2VsbCBkYXRhIHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM3MS4xNS4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMS4wMC4wMCNPaWxmaWVsZCBkYXRhIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTEuMDEuMDAjT2lsZmllbGQgYXNzZXQgZGF0YSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE1LjExLjAwLjAwCi11bnNwc2M3IzcxLjE1LjExLjAyLjAwI09pbGZpZWxkIGRhdGEgbWluaW5nIHNlcnZpY2VzIzcxLjE1LjExLjAwLjAwCi11bnNwc2M3IzcxLjE1LjExLjAzLjAwI0xvZyBkYXRhIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTUuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTEuMDQuMDAjT2lsZmllbGQgbWFwcGluZyBkYXRhIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTUuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTEuMDUuMDAjU2Vpc21pYyBkYXRhIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTUuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTIuMDAuMDAjT2lsZmllbGQgZWNvbm9taWMgYW5kIHJpc2sgbW9kZWwgc2VydmljZXMjNzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTIuMDEuMDAjT2lsZmllbGQgYnVkZ2V0aW5nIHNlcnZpY2VzIzcxLjE1LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEyLjAyLjAwI09pbGZpZWxkIGNhcGl0YWwgcGxhbm5pbmcgc2VydmljZXMjNzEuMTUuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTIuMDMuMDAjT2lsZmllbGQgZGVjaXNpb24gdHJlZSBzZXJ2aWNlcyM3MS4xNS4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wMC4wMCNPaWxmaWVsZCBpbnRlcnByZXRhdGlvbiBzZXJ2aWNlcyM3MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wMS4wMCNPaWxmaWVsZCBidWJibGUgbWFwIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjAyLjAwI09pbGZpZWxkIGNhc2Ugc3R1ZGllcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wMy4wMCNPaWxmaWVsZCBkZWNsaW5lIGFuYWx5c2lzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjA0LjAwI09pbGZpZWxkIGZpZWxkIHN0dWRpZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDUuMDAjT2lsZmllbGQgZnJhY3R1cmluZyBpbnRlcnByZXRhdGlvbiBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wNi4wMCNHZW9sb2d5IHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjA3LjAwI0dlb3BoeXNpY3Mgc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDguMDAjR3JhdmVsIHBhY2sgaW50ZXJwcmV0YXRpb24gc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDkuMDAjT2lsZmllbGQgZ3JpZCBtYXBwaW5nIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjEwLjAwI09pbGZpZWxkIG1hcHBpbmcgb3IgdmlzdWFsaXphdGlvbiBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4xMS4wMCNQZXRyb3BoeXNpY3Mgc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMTIuMDAjUmVzZXJ2b2lyIGVuZ2luZWVyaW5nIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjEzLjAwI1Jlc2Vydm9pciBtb2RlbGluZyBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4xNC4wMCNSZXNlcnZvaXIgc2ltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4xNS4wMCNSb2NrIG1lY2hhbmljcyBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xNC4wMC4wMCNXZWxsIHNlcnZpY2UgZW5naW5lZXJpbmcjNzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTQuMDEuMDAjV2VsbCBjZW1lbnRpbmcgam9iIGRlc2lnbiBzZXJ2aWNlcyM3MS4xNS4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xNC4wMi4wMCNDb2lsZWQgdHViaW5nIGpvYiBkZXNpZ24gc2VydmljZXMjNzEuMTUuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTQuMDMuMDAjV2VsbCBkcmlsbGluZyBqb2IgZGVzaWduIHNlcnZpY2VzIzcxLjE1LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE1LjE0LjA0LjAwI1dlbGwgZnJhY3R1cmluZyBqb2IgZGVzaWduIHNlcnZpY2VzIzcxLjE1LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE1LjE0LjA1LjAwI01hdHJpeCBzdGltdWxhdGlvbiBqb2IgZGVzaWduIHNlcnZpY2VzIzcxLjE1LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE1LjE0LjA2LjAwI1dlbGwgc2FuZCBjb250cm9sIGpvYiBkZXNpZ24gc2VydmljZXMjNzEuMTUuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMDAuMDAuMDAjT2lsIGFuZCBnYXMgd2VsbCBwcm9qZWN0IG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTAuMDAuMDAjT2lsZmllbGQgTW9kZWxpbmcgU2VydmljZXMjNzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTAuMDEuMDAjT2lsZmllbGQgY29tcGxldGlvbiBtb2RlbHMjNzEuMTYuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTAuMDIuMDAjT2lsZmllbGQgZHJpbGxpbmcgbW9kZWxzIzcxLjE2LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjAzLjAwI09pbGZpZWxkIGVjb25vbWljIG1vZGVscyM3MS4xNi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMC4wNC4wMCNPaWxmaWVsZCBmaWVsZCBkZXZlbG9wbWVudCBtb2RlbHMjNzEuMTYuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTAuMDUuMDAjT2lsZmllbGQgcHJvZHVjdGlvbiBtb2RlbHMjNzEuMTYuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTAuMDYuMDAjT2lsZmllbGQgcmlzayBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE2LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjAwLjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gZW5naW5lZXJpbmcgbWFuYWdlbWVudCM3MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wMS4wMCNPaWxmaWVsZCBhcnRpZmljaWFsIGxpZnQgc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDIuMDAjRW5oYW5jZWQgb2lsIHJlY292ZXJ5IHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjAzLjAwI1dlbGwgaW5qZWN0aW9uIHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjA0LjAwI09pbGZpZWxkIG5vZGFsIGFuYWx5c2lzIHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjA1LjAwI1dlbGwgcGVyZm9yYXRpb24gc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDYuMDAjT2lsZmllbGQgcHJvZHVjdGlvbiBjaGVtaXN0cnkgc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDcuMDAjT2lsZmllbGQgcHJvZHVjdGlvbiBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjA4LjAwI09pbGZpZWxkIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wOS4wMCNXZWxsIHN0aW11bGF0aW9uIHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjEwLjAwI1VuZGVyZ3JvdW5kIGdhcyBzdG9yYWdlIHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjExLjAwI09pbGZpZWxkIHdhdGVyIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTIuMDAuMDAjT2lsZmllbGQgcHJvZHVjdGlvbiBvcGVyYXRpb25zIG1hbmFnZW1lbnQjNzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTIuMDEuMDAjT2lsZmllbGQgaG90IG9pbGluZyBzZXJ2aWNlIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjAyLjAwI09pbGZpZWxkIGxlYXNlIG9wZXJhdGlvbnMjNzEuMTYuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTIuMDMuMDAjT2lsZmllbGQgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xNi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMi4wNC4wMCNPaWxmaWVsZCBwYXJhZmZpbiBjdXR0aW5nIHNlcnZpY2UjNzEuMTYuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTIuMDUuMDAjT2lsZmllbGQgcGxhbm5pbmcgc2VydmljZXMjNzEuMTYuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTIuMDYuMDAjT2lsZmllbGQgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3MS4xNi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMi4wNy4wMCNXZWxsIHRlc3Rpbmcgc2VydmljZXMjNzEuMTYuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDAuMDAjT2lsZmllbGQgcHJvamVjdCBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjAxLjAwI09pbGZpZWxkIGF1ZGl0cyBvciBpbnNwZWN0aW9uIHNlcnZpY2VzIzcxLjE2LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjAyLjAwI09pbGZpZWxkIGVtZXJnZW5jeSByZXNwb25zZSBwbGFubmluZyBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wMy4wMCNPaWxmaWVsZCBmaWVsZCBkZXZlbG9wbWVudCBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wNC4wMCNPaWxmaWVsZCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjE2LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjA1LjAwI09pbGZpZWxkIHJlcG9ydGluZyBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wNi4wMCNPaWxmaWVsZCBzdWNjZXNzaW9uIHBsYW4gb3IgaGFuZG92ZXIgc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDcuMDAjT2lsZmllbGQgdHJhaW5pbmcgbWF0cml4IHNlcnZpY2VzIzcxLjE2LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjA4LjAwI1dlbGwgc2l0ZSBsb2dpc3RpY3Mgb3IgcHJvY3VyZW1lbnQgc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDAuMDAjV2VsbCBjb25zdHJ1Y3Rpb24gbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wMS4wMCNDb2lsZWQgdHViaW5nIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjAyLjAwI1dlbGwgY29tcGxldGlvbiBlbmdpbmVlcmluZyBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wMy4wMCNEZWFkbWFuIGFuY2hvciBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wNC4wMCNXZWxsIGRyaWxsaW5nIGVuZ2luZWVyaW5nIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjA1LjAwI1dlbGwgc2l0ZSBwaXQgbGluaW5nIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjA2LjAwI1dlbGwgcGx1ZyBvciBhYmFuZG9ubWVudCBzZXJ2aWNlIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjA3LjAwI1dlbGwgcHVsbGluZyB1bml0IHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjA4LjAwI1Nob3JlYmFzZSBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wOS4wMCNUZXN0IHBpdCBsaW5pbmcgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMTAuMDAjV2VsbCBzaXRlIHZhY3V1bSB0cnVjayBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4xMS4wMCNVbmRlcmJhbGFuY2VkIGFwcGxpY2F0aW9ucyBlbmdpbmVlcmluZyBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4xMi4wMCNXZWxsIHdvcmtvdmVyIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjEzLjAwI1dlbGwgZmFicmljYXRpb24gb3IgY29uc3RydWN0aW9uIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE1LjAwLjAwI1dlbGwgc2l0ZSBvcGVyYXRpb25zIHNlcnZpY2VzIzcxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjE1LjAxLjAwI1dlbGwgc2l0ZSBlbGVjdHJpY2FsIG9yIGluc3RydW1lbnRhdGlvbiBzZXJ2aWNlcyM3MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNS4wMi4wMCNXZWxsIHNpdGUgaGVhdnkgZXF1aXBtZW50IG9yIGNyYW5lIHNlcnZpY2VzIzcxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE1LjAzLjAwI1dlbGwgc2l0ZSBpbnNwZWN0aW9uIG9yIGVxdWlwbWVudCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE1LjA0LjAwI1dlbGwgc2l0ZSBpbnN0cnVtZW50IGFuZCBtZXRlciBzZXJ2aWNlcyM3MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNS4wNS4wMCNXZWxsIHNpdGUgdmFsdmUgb3IgdmFsdmUgcGFydCBzZXJ2aWNlcyM3MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM3Mi4wMC4wMC4wMC4wMCNCdWlsZGluZyBhbmQgQ29uc3RydWN0aW9uIGFuZCBNYWludGVuYW5jZSBTZXJ2aWNlcyM3Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4wMC4wMC4wMCNCdWlsZGluZyBjb25zdHJ1Y3Rpb24gYW5kIHN1cHBvcnQgYW5kIG1haW50ZW5hbmNlIGFuZCByZXBhaXIgc2VydmljZXMjNzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTUuMDAuMDAjQnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNS4wMS4wMCNIYW5keW1hbiBzZXJ2aWNlcyM3Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNS4wMi4wMCNTY2FmZm9sZGluZyBzZXJ2aWNlcyM3Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNS4wMy4wMCNSaWdnaW5nIHNlcnZpY2VzIzcyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE1LjA0LjAwI0Rpc2FzdGVyIHByb29maW5nIG9yIGNvbnRpbmdlbmN5IHNlcnZpY2VzIzcyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE1LjA1LjAwI0xvY2tzbWl0aCBzZXJ2aWNlcyM3Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNi4wMC4wMCNSb29maW5nIGFuZCBzaWRpbmcgYW5kIHNoZWV0IG1ldGFsIHdvcmsjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDEuMDAjUm9vZmluZyBpbnN0YWxsYXRpb24gb3IgcmVwYWlyIzcyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE2LjAyLjAwI1NreWxpZ2h0IGluc3RhbGxhdGlvbiM3Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNi4wMy4wMCNHdXR0ZXIgb3IgZG93bnNwb3V0IHNlcnZpY2VzIzcyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE2LjA0LjAwI0FyY2hpdGVjdHVyYWwgc2hlZXQgbWV0YWwgd29yayM3Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNi4wNS4wMCNDZWlsaW5nIGVyZWN0aW9uIG9yIHJlcGFpciM3Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNi4wNi4wMCNDaHV0ZSBpbnN0YWxsYXRpb24jNzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDcuMDAjU2lkaW5nIGluc3RhbGxhdGlvbiBvciByZXBhaXIjNzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTcuMDAuMDAjQ29uY3JldGUgd29yayM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNy4wMS4wMCNFeHRlcmlvciBjb25jcmV0ZSBvciBzdHVjY28gc2VydmljZXMjNzIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTcuMDIuMDAjR3JvdXRpbmcgc2VydmljZXMjNzIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTcuMDMuMDAjU2lkZXdhbGsgb3IgY3VyYiBjb25zdHJ1Y3Rpb24jNzIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTcuMDQuMDAjRm91bmRhdGlvbiBvciBzbGFiIHdvcmsjNzIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTguMDAuMDAjRXh0ZXJpb3IgY2xlYW5pbmcjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTguMDEuMDAjU2FuZGJsYXN0aW5nIzcyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE4LjAyLjAwI0hpZ2ggcHJlc3N1cmUgd2F0ZXIgYmxhc3RpbmcjNzIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTguMDMuMDAjU3RlYW0gY2xlYW5pbmcjNzIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTkuMDAuMDAjSW50ZXJpb3IgZmluaXNoaW5nIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjE5LjAxLjAwI0ludGVyaW9yIGRlc2lnbiBvciBkZWNvcmF0aW5nIzcyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE5LjAyLjAwI1BsYXN0ZXJpbmcgb3IgZHJ5d2FsbCM3Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOS4wMy4wMCNGaW5pc2ggY2FycGVudHJ5IG9yIGNhYmluZXRyeSM3Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMC4wMC4wMCNDb2F0aW5nIGFuZCBjYXVsa2luZyBhbmQgd2VhdGhlciBhbmQgd2F0ZXIgYW5kIGZpcmVwcm9vZmluZyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMC4wMS4wMCNDYXVsa2luZyM3Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMC4wMi4wMCNQbGFzdGljIGVuY2FzZW1lbnQgb3IgY29hdGluZyBvZiBzdHJ1Y3R1cmFsIG1hdGVyaWFscyM3Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMC4wMy4wMCNDb2F0aW5nIG9yIGdsYXppbmcgb2YgbWV0YWwgb3Igd29vZCBvciBjb25jcmV0ZSBzdHJ1Y3R1cmFsIG1hdGVyaWFscyM3Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMC4wNC4wMCNEYW1wcHJvb2ZpbmcjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDUuMDAjRmlyZXByb29maW5nIG9mIGJ1aWxkaW5ncyM3Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMC4wNi4wMCNXcmFwcGluZyBvZiBwaXBlcyM3Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMS4wMC4wMCNQZXN0IGNvbnRyb2wjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjEuMDEuMDAjQmlyZCBwcm9vZmluZyBzZXJ2aWNlcyM3Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMS4wMi4wMCNUZXJtaXRlIGNvbnRyb2wgc2VydmljZXMjNzIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjEuMDMuMDAjRXh0ZXJtaW5hdGlvbiBvciBmdW1pZ2F0aW9uIHNlcnZpY2VzIzcyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIxLjA0LjAwI1N0cnVjdHVyYWwgcGVzdCBjb250cm9sIzcyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIxLjA1LjAwI0FuaW1hbCB0cmFwcGluZyM3Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMS4wNi4wMCNSb2RlbnQgY29udHJvbCM3Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMi4wMC4wMCNFbGVjdHJpY2FsIHNlcnZpY2VzIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIyLjAxLjAwI0VsZWN0cmljIHBvd2VyIHN5c3RlbXMgaW5zdGFsbGF0aW9uIG9yIHNlcnZpY2UjNzIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjIuMDIuMDAjRWxlY3Ryb25pYyBjb250cm9scyBpbnN0YWxsYXRpb24jNzIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjIuMDMuMDAjQ29tbXVuaWNhdGlvbiBlcXVpcG1lbnQgaW5zdGFsbGF0aW9uIzcyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIyLjA0LjAwI1NhZmV0eSBvciBzZWN1cml0eSBzeXN0ZW1zIGluc3RhbGxhdGlvbiM3Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMi4wNS4wMCNDYWJsaW5nIHNlcnZpY2UjNzIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjMuMDAuMDAjUGx1bWJpbmcgYW5kIGhlYXRpbmcgYW5kIGFpciBjb25kaXRpb25pbmcjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjMuMDEuMDAjQm9pbGVyIGluc3RhbGxhdGlvbiBvciBhZGp1c3RtZW50IG9yIG1haW50ZW5hbmNlIG9yIHJlcGFpciBzZXJ2aWNlcyM3Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMy4wMi4wMCNIZWF0aW5nIHN5c3RlbXMgaW5zdGFsbGF0aW9uIHJlcGFpciBvciBtYWludGVuYW5jZSM3Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMy4wMy4wMCNQbHVtYmluZyBzeXN0ZW0gY29uc3RydWN0aW9uIzcyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIzLjA0LjAwI1BsdW1iaW5nIHN5c3RlbSBtYWludGVuYW5jZSBvciByZXBhaXIjNzIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjMuMDUuMDAjQWlyIGNvbmRpdGlvbmluZyBpbnN0YWxsYXRpb24gb3IgbWFpbnRlbmFuY2Ugb3IgcmVwYWlyIHNlcnZpY2VzIzcyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzcyLjEwLjI0LjAwLjAwI1BhaW50aW5nIGFuZCBwYXBlciBoYW5naW5nIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjI0LjAxLjAwI0V4dGVyaW9yIHBhaW50aW5nIHNlcnZpY2VzIzcyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI0LjAyLjAwI0ludGVyaW9yIHBhaW50aW5nIHNlcnZpY2VzIzcyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI0LjAzLjAwI1dhbGxjb3ZlcmluZyBzZXJ2aWNlcyM3Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNC4wNC4wMCNJbmR1c3RyaWFsIG9yIHNwZWNpYWxpemVkIHBhaW50IGFwcGxpY2F0aW9uIGZvciBhaXJjcmFmdCBvciBzaGlwIG9yIGJyaWRnZSM3Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNC4wNS4wMCNQYXZlbWVudCBtYXJraW5nIHNlcnZpY2VzIzcyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjAwLjAwI01hc29ucnkgYW5kIHN0b25ld29yayBhbmQgdGlsZSBzZXR0aW5nIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjAxLjAwI0JyaWNrbGF5aW5nIzcyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjAyLjAwI0NoaW1uZXkgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjAzLjAwI01hcmJsZSBvciBzdG9uZSBvciB0aWxlIGluc3RhbGxhdGlvbiM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wNC4wMCNSZXRhaW5pbmcgd2FsbCBjb25zdHJ1Y3Rpb24jNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDUuMDAjRnJlc2NvIHdvcmsjNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDYuMDAjQWNvdXN0aWNhbCM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wNy4wMCNJbnN1bGF0aW5nIG1hdGVyaWFsIGluc3RhbGxhdGlvbiM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wOC4wMCNSZXN0b3JhdGlvbiBvZiBtYXNvbnJ5IG9yIHN0b25ld29yayBvciB0aWxlIzcyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI2LjAwLjAwI0NhcnBlbnRyeSM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNi4wMS4wMCNSb3VnaCBjYXJwZW50cnkjNzIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjYuMDIuMDAjV2luZG93cyBvciBkb29yIG9yIGZpeHR1cmUgaW5zdGFsbGF0aW9uIzcyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI2LjAzLjAwI0Z1cm5pdHVyZSBpbnN0YWxsYXRpb24jNzIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjcuMDAuMDAjRmxvb3Jpbmcgc2VydmljZSM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNy4wMS4wMCNGbG9vciBzaGVhdGhpbmcgb3IgbGF5aW5nIG9yIGluc3RhbGxhdGlvbiBvciBmaW5pc2hpbmcjNzIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjcuMDIuMDAjRmxvb3IgY292ZXJpbmcgaW5zdGFsbGF0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI3LjAzLjAwI0Zsb29yIGNsZWFuaW5nIHNlcnZpY2VzIzcyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI4LjAwLjAwI1JlZnVyYmlzaGluZyBzZXJ2aWNlcyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yOC4wMS4wMCNSZW5vdmF0aW9uIG9mIGJ1aWxkaW5ncyBvciBsYW5kbWFya3Mgb3IgbW9udW1lbnRzIzcyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI4LjAyLjAwI1Jlc3RvcmF0aW9uIG9mIGJ1aWxkaW5ncyBvciBsYW5kbWFya3Mgb3IgbW9udW1lbnRzIzcyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI5LjAwLjAwI0dyb3VuZHMgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjkuMDEuMDAjU25vdyBSZW1vdmFsIFNlcnZpY2VzIzcyLjEwLjI5LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI5LjAyLjAwI0xhbmRzY2FwaW5nIHNlcnZpY2VzIzcyLjEwLjI5LjAwLjAwCi11bnNwc2M3IzcyLjEwLjMwLjAwLjAwI1NpdGUgcHJlcGFyYXRpb24gc2VydmljZXMjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMzAuMDEuMDAjTGFuZCBjbGVhcmluZyBzZXJ2aWNlcyM3Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4zMC4wMi4wMCNMYW5kIGxldmVsbGluZyBzZXJ2aWNlcyM3Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4zMC4wMy4wMCNEZW1vbGl0aW9uIHNlcnZpY2VzIzcyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjMwLjA0LjAwI0RpZ2dpbmcgc2VydmljZXMjNzIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMDAuMDAuMDAjR2VuZXJhbCBidWlsZGluZyBjb25zdHJ1Y3Rpb24jNzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTUuMDAuMDAjUHJpdmF0ZSBob3VzaW5nIzcyLjExLjAwLjAwLjAwCi11bnNwc2M3IzcyLjExLjE1LjAxLjAwI1NpbmdsZSBmYW1pbHkgaG91c2luZyBjb25zdHJ1Y3Rpb24gb3IgcmVtb2RlbGluZyBvciByZXBhaXIjNzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTUuMDIuMDAjUmVzaWRlbnRpYWwgbXVsdGkgdGVuYW50IGNvbnN0cnVjdGlvbiBvciByZW1vZGVsaW5nIG9yIHJlcGFpciM3Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNi4wMC4wMCNJbmR1c3RyaWFsIHBsYW50cyM3Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNi4wMS4wMCNDb21tZXJjaWFsIG9mZmljZSBidWlsZGluZyBjb25zdHJ1Y3Rpb24gb3IgcmVtb2RlbGluZyBvciByZW5vdmF0aW9uIG9yIHJlcGFpciM3Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNi4wMi4wMCNJbmR1c3RyaWFsIGJ1aWxkaW5ncyBvciB3YXJlaG91c2UgY29uc3RydWN0aW9uIG9yIHJlbW9kZWxpbmcgb3IgcmVub3ZhdGlvbiBvciByZXBhaXIjNzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTcuMDAuMDAjUHVibGljIHVzZSBidWlsZGluZ3MjNzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTcuMDEuMDAjU3BlY2lhbGl6ZWQgcHVibGljIHVzZSBidWlsZGluZyBjb25zdHJ1Y3Rpb24jNzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTcuMDIuMDAjTm9uIHJlc2lkZW50aWFsIGFncmljdWx0dXJhbCBidWlsZGluZyBjb25zdHJ1Y3Rpb24jNzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTcuMDMuMDAjU2VydmljZSBzdGF0aW9uIG9yIHNlcnZpY2UgZ2FyYWdlIGNvbnN0cnVjdGlvbiM3Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNy4wNC4wMCNDb21tZXJjaWFsIGJ1aWxkaW5nIGNvbnN0cnVjdGlvbiBvciBlcmVjdGlvbiBvciByZW5vdmF0aW9uIG9yIHJlcGFpciM3Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOC4wMC4wMCNDb21tZXJjaWFsIGJ1aWxkaW5ncyM3Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOC4wMS4wMCNSZXN0YXVyYW50IGNvbnN0cnVjdGlvbiBvciByZW5vdmF0aW9uIG9yIHJlcGFpciBvciBtYWludGVuYW5jZSM3Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOC4wMi4wMCNTaG9wcGluZyBjZW50ZXIgb3Igc3RvcmUgY29uc3RydWN0aW9uIG9yIHJlbm92YXRpb24gb3IgcmVwYWlyIG9yIG1haW50ZW5hbmNlIzcyLjExLjE4LjAwLjAwCi11bnNwc2M3IzcyLjExLjE4LjAzLjAwI09mZmljZSBidWlsZGluZyBjb25zdHJ1Y3Rpb24gb3IgcmVub3ZhdGlvbiBvciByZXBhaXIgb3IgbWFpbnRlbmFuY2UjNzIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTguMDQuMDAjQmF0aHJvb20gcmVub3ZhdGlvbiM3Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOS4wMC4wMCNMYW5kIGFuZCBidWlsZGluZyBzaXRlIHByZXBhcmF0aW9uIzcyLjExLjAwLjAwLjAwCi11bnNwc2M3IzcyLjExLjE5LjAxLjAwI0xhbmQgY2xlYXJpbmcjNzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTkuMDIuMDAjTGFuZCBsZXZlbGluZyM3Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOS4wMy4wMCNCdWlsZGluZyBkZW1vbGl0aW9uIzcyLjExLjE5LjAwLjAwCi11bnNwc2M3IzcyLjEyLjAwLjAwLjAwI0luZnJhc3RydWN0dXJlIGNvbnN0cnVjdGlvbiBhbmQgbWFpbnRlbmFuY2UjNzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTUuMDAuMDAjSGlnaHdheXMgYW5kIHN0cmVldHMjNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTUuMDEuMDAjSGlnaHdheSBvciBzdHJlZXQgb3Igcm9hZCBjb25zdHJ1Y3Rpb24jNzIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTUuMDIuMDAjSGlnaHdheSBvciBzdHJlZXQgb3Igcm9hZCBzdXJmYWNpbmcgb3IgcGF2aW5nIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE1LjAzLjAwI0hpZ2h3YXkgb3Igc3RyZWV0IGd1YXJkcmFpbCBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTUuMDQuMDAjSGlnaHdheSBvciBzdHJlZXQgc2lnbiBvciB0cmFmZmljIHNpZ25hbCBpbnN0YWxsYXRpb24jNzIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTYuMDAuMDAjV2F0ZXIgYW5kIHNld2VyIGFuZCB1dGlsaXR5IGxpbmVzIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjAxLjAwI0VsZWN0cmljIHBvd2VyIGxpbmUgY29uc3RydWN0aW9uIG9yIGluc3RhbGxhdGlvbiM3Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wMi4wMCNDYWJsZSBsYXlpbmcjNzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTYuMDMuMDAjQXF1ZWR1Y3QgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjA0LjAwI1Nld2VyIGxpbmUgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjA1LjAwI1dhdGVyIG1haW4gY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjA2LjAwI1ZvaWNlIG9yIGRhdGEgbGluZSBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTYuMDcuMDAjV2F0ZXIgaW5kdXN0cmlhbCBwbGFudCBjb25zdHJ1Y3Rpb24jNzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTcuMDAuMDAjRGFtcyBhbmQgbWFyaW5lIGNvbnN0cnVjdGlvbiM3Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wMS4wMCNEYW0gY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjAyLjAwI1BpZXIgb3IgZG9jayBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTcuMDMuMDAjSGFyYm9yIG9yIGJyZWFrd2F0ZXIgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjA0LjAwI0R5a2Ugb3IgbGV2ZWUgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjA1LjAwI0RyZWRnaW5nIG9yIGNhaXNzb24gZHJpbGxpbmcjNzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTcuMDYuMDAjQ2FuYWwgb3IgZHJhaW5hZ2Ugb3IgaXJyaWdhdGlvbiBzeXN0ZW0gY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjA3LjAwI1BvbmQgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE4LjAwLjAwI1JhaWxyb2FkcyBhbmQgc3Vid2F5cyBhbmQgdHJhbXdheXMjNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTguMDEuMDAjQ3V0dGluZyBvZiByaWdodCBvZiB3YXkjNzIuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTguMDIuMDAjUmFpbHJvYWQgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE4LjAzLjAwI1N1YndheSBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTguMDQuMDAjVHJhbSBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTkuMDAuMDAjQWlycG9ydHMgYW5kIGF2aWF0aW9uIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjE5LjAxLjAwI0FpcnBvcnQgcnVud2F5IGNvbnN0cnVjdGlvbiM3Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOS4wMi4wMCNBaXJwb3J0IHRlcm1pbmFsIGNvbnN0cnVjdGlvbiM3Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOS4wMy4wMCNIZWxpcGFkIGNvbnN0cnVjdGlvbiM3Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4yMC4wMC4wMCNCcmlkZ2VzIGFuZCB0dW5uZWxzIGFuZCB2aWFkdWN0cyM3Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4yMC4wMS4wMCNCcmlkZ2UgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIwLjAyLjAwI1R1bm5lbCBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjAuMDMuMDAjVmlhZHVjdCBjb25zdHJ1Y3Rpb24gb3IgbWFpbnRlbmFuY2UjNzIuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjEuMDAuMDAjQ29uc3RydWN0aW9uIHF1YW50aXR5IHN1cnZleW9ycyM3Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4yMS4wMS4wMCNXYXRlciBvciB3YXN0ZXdhdGVyIHF1YW50aXR5IHN1cnZleW9ycyM3Mi4xMi4yMS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4yMi4wMC4wMCNDb25zdHJ1Y3Rpb24gY29uc3VsdGFuY3kgc2VydmljZXMjNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjIuMDEuMDAjU2l0ZSBzdXBlcnZpc2lvbiM3Mi4xMi4yMi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4yMi4wMi4wMCNJbmR1c3RyaWFsIHBsYW50IGRlc2lnbiM3Mi4xMi4yMi4wMC4wMAotdW5zcHNjNyM3My4wMC4wMC4wMC4wMCNJbmR1c3RyaWFsIFByb2R1Y3Rpb24gYW5kIE1hbnVmYWN0dXJpbmcgU2VydmljZXMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMDAuMDAuMDAjUGxhc3RpYyBhbmQgY2hlbWljYWwgaW5kdXN0cmllcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMC4xNS4wMC4wMCNQZXRyb2NoZW1pY2FsIGFuZCBwbGFzdGljIHByb2R1Y3Rpb24jNzMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTUuMDEuMDAjUGV0cm9sZXVtIHJlZmluaW5nIHNlcnZpY2VzIzczLjEwLjE1LjAwLjAwCi11bnNwc2M3IzczLjEwLjE1LjAyLjAwI05hdHVyYWwgZ2FzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTUuMDMuMDAjT2lscyBvciBncmVhc2VzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTUuMDQuMDAjQ29hbCBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE1LjAwLjAwCi11bnNwc2M3IzczLjEwLjE1LjA1LjAwI1BsYXN0aWNzIG9yIHJlc2lucyBvciBmaWJlcnMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMC4xNS4wMC4wMAotdW5zcHNjNyM3My4xMC4xNS4wNi4wMCNDcmVkaXQgY2FyZCBwcm9kdWN0aW9uIG9yIGVtYm9zc2luZyBzZXJ2aWNlcyM3My4xMC4xNS4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wMC4wMCNDaGVtaWNhbHMgYW5kIGZlcnRpbGl6ZXJzIHByb2R1Y3Rpb24jNzMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDEuMDAjSW5vcmdhbmljIGNoZW1pY2FscyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjAyLjAwI1NvZGEgYXNoIG9yIGNobG9yaW5lIG9yIGNhdXN0aWMgc29kYSBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjAzLjAwI0lub3JnYW5pYyBhY2lkcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjA0LjAwI09yZ2FuaWMgY2hlbWljYWwgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wNS4wMCNBY2V0eWxlbmUgb3IgZGVyaXZhdGl2ZXMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wNi4wMCNFdGh5bGVuZSBvciBkZXJpdmF0aXZlcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjA3LjAwI0V0aGFub2wgb3IgbWV0aGFub2wgb3IgZGVyaXZhdGl2ZXMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wOC4wMCNGZXJ0aWxpemVycyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjA5LjAwI1BvdGFzaCBtaW5pbmcgb3IgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4xMC4wMCNQZXN0aWNpZGUgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4xMS4wMCNQYWludHMgb3IgdmFybmlzaGVzIG9yIGxhY3F1ZXJzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMTIuMDAjU29hcCBvciBjbGVhbmluZyBwcmVwYXJhdGlvbnMgb3IgcGVyZnVtZXMgb3IgY29zbWV0aWNzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMTMuMDAjU29sdmVudHMgb3IgZ2x5Y29scyBvciBkZXRlcmdlbnRzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMTQuMDAjRmVybWVudHMgb3IgZW56eW1lcyBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNy4wMC4wMCNQaGFybWFjZXV0aWNhbCBwcm9kdWN0aW9uIzczLjEwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjE3LjAxLjAwI0RydWdzIG9yIG1lZGljaW5lIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTcuMDIuMDAjVmFjY2luZXMgb3Igc2VyYSBvciBhbnRpYmlvdGljcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE3LjAwLjAwCi11bnNwc2M3IzczLjEwLjE3LjAzLjAwI1BhcmFwaGFybWFjZXV0aWNhbCBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE3LjAwLjAwCi11bnNwc2M3IzczLjEwLjE4LjAwLjAwI0Jpb2NoZW1pY2FsIGFuZCBiaW90ZWNobm9sb2d5IHByb2R1Y3Rpb24jNzMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTguMDEuMDAjQmlvbWFzcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE4LjAwLjAwCi11bnNwc2M3IzczLjEwLjE4LjAyLjAwI0Jpb3Byb3RlaW4gcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xOC4wMC4wMAotdW5zcHNjNyM3My4xMC4xOS4wMC4wMCNSdWJiZXIgcHJvZHVjdGlvbiM3My4xMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMC4xOS4wMS4wMCNSdWJiZXIgbWlsbGluZyBzZXJ2aWNlcyM3My4xMC4xOS4wMC4wMAotdW5zcHNjNyM3My4xMC4xOS4wMi4wMCNSdWJiZXIgdGlyZXMgb3IgdHViZXMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xOS4wMC4wMAotdW5zcHNjNyM3My4xMC4xOS4wMy4wMCNSdWJiZXIgb3IgcGxhc3RpYyBmb290d2VhciBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE5LjAwLjAwCi11bnNwc2M3IzczLjExLjAwLjAwLjAwI1dvb2QgYW5kIHBhcGVyIGluZHVzdHJpZXMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTUuMDAuMDAjV29vZCBwcm9jZXNzaW5nIzczLjExLjAwLjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjAxLjAwI1Nhd21pbGxpbmcgc2VydmljZXMjNzMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTUuMDIuMDAjVmVuZWVyIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTUuMDMuMDAjV29vZCBiYXNlIHBhbmVscyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjA0LjAwI1dvb2RlbiBjb250YWluZXJzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTUuMDUuMDAjRnVybml0dXJlIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTUuMDYuMDAjQ29yayBwcm9kdWN0cyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjA3LjAwI0NhbmUgb3Igd2lja2Vyd2FyZSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE2LjAwLjAwI1B1bHAgYW5kIHBhcGVyIHByb2Nlc3NpbmcjNzMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTYuMDEuMDAjUHVscCBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjExLjE2LjAwLjAwCi11bnNwc2M3IzczLjExLjE2LjAyLjAwI1BhcGVyIG9yIHBhcGVyIGJvYXJkIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTYuMDMuMDAjSGFyZGJvYXJkIG9yIGZpYmVyYm9hcmQgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMS4xNi4wMC4wMAotdW5zcHNjNyM3My4xMS4xNi4wNC4wMCNQYXBlciBwcm9kdWN0aW9uIG9yIHJlY3ljbGluZyBzZXJ2aWNlcyM3My4xMS4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4wMC4wMC4wMCNNZXRhbCBhbmQgbWluZXJhbCBpbmR1c3RyaWVzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjAwLjAwI01ldGFsIHNtZWx0aW5nIGFuZCByZWZpbmluZyBhbmQgZm9ybWluZyBwcm9jZXNzZXMjNzMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDEuMDAjRmVycm91cyBhbGxveSBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjAyLjAwI0Jhc2ljIG1ldGFsIGNvbWJpbmF0aW9uIHByb2Nlc3NlcyBzZXJ2aWNlcyM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wMy4wMCNSZWZyYWN0b3JzIHNlcnZpY2VzIGZvciBpcm9uIG9yIHN0ZWVsIHByb2R1Y3Rpb24jNzMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDQuMDAjSXJvbiBvciBzdGVlbCBtYWtpbmcgc2VydmljZXMjNzMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDUuMDAjSXJvbiBvciBzdGVlbCBmb3JnaW5nIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA2LjAwI1ByZSBmaW5pc2hpbmcgaXJvbiBvciBzdGVlbCBwcm9jZXNzZXMgc2VydmljZXMjNzMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDcuMDAjRmluaXNoaW5nIG1ldGFsIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDguMDAjU21lbHRpbmcgbWV0YWwgc2VydmljZXMjNzMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDkuMDAjUmVmaW5pbmcgbWV0YWwgc2VydmljZXMjNzMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDAuMDAjTWV0YWwgZmluaXNoaW5nIzczLjEyLjAwLjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjAxLjAwI01ldGFsIGN1dHRpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDIuMDAjQmxhY2tzbWl0aCBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wMy4wMCNNZXRhbCBoZWF0aW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjA0LjAwI01ldGFsIHBsYXRpbmcgb3IgcmVwbGF0aW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjA1LjAwI01ldGFsIHJvbGxpbmcgb3BlcmF0aW9ucyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wNi4wMCNNZXRhbCBmb3JnaW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjA3LjAwI01ldGFsIGRyYXdpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDguMDAjTWV0YWwgZXh0cnVkaW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjA5LjAwI1N1cmZhY2UgbWV0YWwgZmluaXNoaW5nIG9yIHRyZWF0bWVudCBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4xMC4wMCNIb3JzZXNob2Vpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMTEuMDAjVGluc21pdGhpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMTIuMDAjUmViYWJiaXRpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMTMuMDAjTWV0YWwgY2FzdGluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNy4wMC4wMCNXZWxkaW5nIGFuZCBicmF6aW5nIGFuZCBzb2xkZXJpbmcjNzMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTcuMDEuMDAjV2VsZGluZyBzZXJ2aWNlcyM3My4xMi4xNy4wMC4wMAotdW5zcHNjNyM3My4xMi4xNy4wMi4wMCNCcmF6aW5nIHNlcnZpY2VzIzczLjEyLjE3LjAwLjAwCi11bnNwc2M3IzczLjEyLjE3LjAzLjAwI1NvbGRlcmluZyBzZXJ2aWNlcyM3My4xMi4xNy4wMC4wMAotdW5zcHNjNyM3My4xMi4xNy4wNC4wMCNDYXN0aW5nIHNlcnZpY2VzIzczLjEyLjE3LjAwLjAwCi11bnNwc2M3IzczLjEyLjE4LjAwLjAwI05vbiBtZXRhbGxpYyBtaW5lcmFsIHByb2R1Y3RzIGluZHVzdHJ5IHNlcnZpY2VzIzczLjEyLjAwLjAwLjAwCi11bnNwc2M3IzczLjEyLjE4LjAxLjAwI1BvdHRlcnkgb3IgY2hpbmEgb3IgZWFydGhlbndhcmUgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMi4xOC4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wMi4wMCNHbGFzcyBvciBnbGFzcyBwcm9kdWN0cyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjEyLjE4LjAwLjAwCi11bnNwc2M3IzczLjEyLjE4LjAzLjAwI1N0cnVjdHVyYWwgY2xheSBwcm9kdWN0cyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjEyLjE4LjAwLjAwCi11bnNwc2M3IzczLjEyLjE4LjA0LjAwI0NlbWVudCBvciBsaW1lIG9yIHBsYXN0ZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMi4xOC4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wNS4wMCNDb25jcmV0ZSBvciBhZ2dyZWdhdGVzIG9yIHN0b25lIHByb2R1Y3RzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTguMDYuMDAjQWJyYXNpdmVzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTguMDcuMDAjQXNiZXN0b3MgcHJvZHVjdHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMi4xOC4wMC4wMAotdW5zcHNjNyM3My4xMy4wMC4wMC4wMCNGb29kIGFuZCBiZXZlcmFnZSBpbmR1c3RyaWVzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjAwLjAwI0JldmVyYWdlIHByb2Nlc3NpbmcjNzMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTUuMDEuMDAjU3Bpcml0cyBkaXN0aWxsaW5nIG9yIGJsZW5kaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjAyLjAwI1dpbmUgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wMy4wMCNCcmV3ZXJ5IHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTUuMDQuMDAjTm9uIGFsY29ob2xpYyBmcnVpdCBiYXNlZCBiZXZlcmFnZSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjA1LjAwI1dhdGVyIGJldmVyYWdlcyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjA2LjAwI0luZnVzZWQgYmV2ZXJhZ2VzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTUuMDcuMDAjQ29mZmVlIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTUuMDguMDAjVGVhIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDAuMDAjTWVhdCBhbmQgcG91bHRyeSBhbmQgc2VhZm9vZCBwcm9jZXNzaW5nIzczLjEzLjAwLjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjAxLjAwI01lYXQgcHJvZHVjdHMgb3IgYnkgcHJvZHVjdHMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNi4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wMi4wMCNGaXNoIG9yIGZpc2ggcHJvZHVjdHMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNi4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wMy4wMCNQb3VsdHJ5IHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDQuMDAjTWVhdCBoeWdpZW5lIG9yIGluc3BlY3Rpb24gc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDUuMDAjTWVhdCBwbGFudCBvcGVyYXRpb24gb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM3My4xMy4xNi4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wNi4wMCNTbGF1Z2h0ZXIgaG91c2VzIHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjA3LjAwI0J1dGNoZXIgc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDguMDAjQ29sZCBzdG9yYWdlIHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE3LjAwLjAwI0ZydWl0cyBhbmQgdmVnZXRhYmxlcyBwcm9jZXNzaW5nIzczLjEzLjAwLjAwLjAwCi11bnNwc2M3IzczLjEzLjE3LjAxLjAwI0ZydWl0IG9yIHZlZ2V0YWJsZSBjbGVhbmluZyBzZXJ2aWNlcyM3My4xMy4xNy4wMC4wMAotdW5zcHNjNyM3My4xMy4xNy4wMi4wMCNGcnVpdCBvciB2ZWdldGFibGUgc3ByYXlpbmcgc2VydmljZXMjNzMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTcuMDMuMDAjRnJ1aXQgb3IgdmVnZXRhYmxlIHBhY2tpbmcgc2VydmljZXMjNzMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTguMDAuMDAjRGFpcnkgYW5kIGVnZ3MgcHJvY2Vzc2luZyM3My4xMy4wMC4wMC4wMAotdW5zcHNjNyM3My4xMy4xOC4wMS4wMCNNaWxrIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTguMDIuMDAjRWdnIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTguMDMuMDAjQ2hlZXNlIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTguMDQuMDAjQnV0dGVyIG9yIGNyZWFtIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTkuMDAuMDAjR3JhaW5zIGFuZCBzdWdhciBhbmQgb2lscyBhbmQgZmF0IHByb2Nlc3NpbmcjNzMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTkuMDEuMDAjTWlsbGluZyBzZXJ2aWNlcyM3My4xMy4xOS4wMC4wMAotdW5zcHNjNyM3My4xMy4xOS4wMi4wMCNDZXJlYWwgcHJvZHVjdHMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOS4wMC4wMAotdW5zcHNjNyM3My4xMy4xOS4wMy4wMCNTdWdhciBvciBzdWdhciBwcm9kdWN0cyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE5LjAwLjAwCi11bnNwc2M3IzczLjEzLjE5LjA0LjAwI1ZlZ2V0YWJsZSBvaWxzIG9yIGZhdHMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOS4wMC4wMAotdW5zcHNjNyM3My4xMy4xOS4wNS4wMCNTcGljZSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE5LjAwLjAwCi11bnNwc2M3IzczLjEzLjE5LjA2LjAwI0Jha2VyeSBwcm9kdWN0cyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE5LjAwLjAwCi11bnNwc2M3IzczLjE0LjAwLjAwLjAwI0ZpYmVycyBhbmQgdGV4dGlsZXMgYW5kIGZhYnJpYyBpbmR1c3RyaWVzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjAwLjAwI0ZpYmVyIHByb2R1Y3Rpb24jNzMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDEuMDAjUmF5b24gb3IgYWNldGF0ZSBmaWJlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE1LjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjAyLjAwI0dsYXNzIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDMuMDAjU2lsayBmaWJlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE1LjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjA0LjAwI0NvdHRvbiBmaWJlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE1LjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjA1LjAwI1dvb2wgZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wNi4wMCNQb2x5ZXN0ZXIgZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wNy4wMCNQb2x5YW1pZGUgZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wOC4wMCNBY3J5bGljIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTYuMDAuMDAjVGhyZWFkIGFuZCB5YXJuIHByb2Nlc3NpbmcjNzMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTYuMDEuMDAjVGhyZWFkIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTYuMDIuMDAjWWFybiBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjE0LjE2LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjAwLjAwI0ZhYnJpY3MgYW5kIGxlYXRoZXIgcHJvZHVjdGlvbiM3My4xNC4wMC4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wMS4wMCNCcm9hZCB3b3ZlbiBmYWJyaWNzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDIuMDAjTmFycm93IHdvdmVuIGZhYnJpY3MgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wMy4wMCNLbml0d2VhciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjA0LjAwI0NhcnBldCBvciBydWcgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wNS4wMCNDb3JkYWdlIG9yIHJvcGUgb3IgdHdpbmUgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wNi4wMCNEeWVpbmcgb3IgcHJpbnRpbmcgb3IgZmluaXNoaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjA3LjAwI1dvdmVuIHN1aXRzIG9yIGNvYXRzIG9yIG92ZXJjb2F0cyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjA4LjAwI1dvdmVuIG91dGVyd2VhciBjbG90aGluZyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjA5LjAwI0Z1ciBkcmVzc2luZyBvciBkeWVpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMTAuMDAjTGVhdGhlciBmb290d2VhciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjExLjAwI0xlYXRoZXIgbHVnZ2FnZSBvciBoYW5kYmFncyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjEyLjAwI0xlYXRoZXIgdGFubmluZyBvciBmaW5pc2hpbmcgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4xMy4wMCNOb253b3ZlbiBmYWJyaWMgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMTQuMDAjQnJhaWRlZCB5YXJuIG9yIGZhYnJpYyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4xNS4wMCNJbmR1c3RyaWFsIHNld2luZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNS4wMC4wMC4wMCNNYW51ZmFjdHVyaW5nIHN1cHBvcnQgc2VydmljZXMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTUuMDAuMDAjQXNzZW1ibHkgc2VydmljZXMjNzMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTUuMDEuMDAjQXNzZW1ibHkgbGluZSB3b3JrIzczLjE1LjE1LjAwLjAwCi11bnNwc2M3IzczLjE1LjE1LjAyLjAwI0pvaW50IHNlYWxpbmcgc2VydmljZXMjNzMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTYuMDAuMDAjUGFja2FnaW5nIHNlcnZpY2VzIzczLjE1LjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjAxLjAwI0Nhbm5pbmcgcGxhbnRzIHNlcnZpY2VzIzczLjE1LjE2LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjAyLjAwI1BhY2thZ2luZyBvZiBhZ3JpY3VsdHVyYWwgYnkgcHJvZHVjdHMgc2VydmljZXMjNzMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTYuMDMuMDAjUGFja2FnaW5nIG9mIG5vbiBmb29kIHByb2R1Y3RzIHNlcnZpY2VzIzczLjE1LjE2LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjA0LjAwI1BhY2thZ2luZyBvZiBwaGFybWFjZXV0aWNhbHMgc2VydmljZXMjNzMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTYuMDUuMDAjUG9pbnQgb2YgcHVyY2hhc2UgZGlzcGxheSBwYWNrYWdpbmcgc2VydmljZXMjNzMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTYuMDYuMDAjTWFudWFsIGhhbmQgcGFja2FnaW5nIHNlcnZpY2VzIzczLjE1LjE2LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjA3LjAwI01hY2hpbmUgYXNzaXN0ZWQgcGFja2FnaW5nIHNlcnZpY2VzIzczLjE1LjE2LjAwLjAwCi11bnNwc2M3IzczLjE1LjE3LjAwLjAwI01hdGVyaWFsIHRyZWF0bWVudCM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4xNy4wMS4wMCNXYXRlciBwcm9vZmluZyBtYXRlcmlhbCB0cmVhdG1lbnQgc2VydmljZXMjNzMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTcuMDIuMDAjRmlyZSBwcm90ZWN0aW9uIG1hdGVyaWFsIHRyZWF0bWVudCBzZXJ2aWNlcyM3My4xNS4xNy4wMC4wMAotdW5zcHNjNyM3My4xNS4xNy4wMy4wMCNBbnRpY29ycm9zaW9uIG1hdGVyaWFsIHRyZWF0bWVudCBzZXJ2aWNlcyM3My4xNS4xNy4wMC4wMAotdW5zcHNjNyM3My4xNS4xOC4wMC4wMCNDb252ZXJ0aW5nIHNlcnZpY2VzIzczLjE1LjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjE4LjAxLjAwI1NoZWV0aW5nIHNlcnZpY2VzIzczLjE1LjE4LjAwLjAwCi11bnNwc2M3IzczLjE1LjE4LjAyLjAwI1NsaXR0aW5nIHNlcnZpY2VzIzczLjE1LjE4LjAwLjAwCi11bnNwc2M3IzczLjE1LjE4LjAzLjAwI0RpZSBjdXR0aW5nIHNlcnZpY2VzIzczLjE1LjE4LjAwLjAwCi11bnNwc2M3IzczLjE1LjE4LjA0LjAwI0ZvbGRpbmcgc2VydmljZXMjNzMuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTguMDUuMDAjTGFtaW5hdGluZyBzZXJ2aWNlcyM3My4xNS4xOC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOS4wMC4wMCNJbmR1c3RyaWFsIHByaW50aW5nIHNlcnZpY2VzIzczLjE1LjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjE5LjAxLjAwI0ZsZXhvZ3JhcGhpYyBpbmR1c3RyaWFsIHByaW50aW5nIHNlcnZpY2VzIzczLjE1LjE5LjAwLjAwCi11bnNwc2M3IzczLjE1LjE5LjAyLjAwI1JvdG9ncmF2dXJlIGluZHVzdHJpYWwgcHJpbnRpbmcgc2VydmljZXMjNzMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTkuMDMuMDAjU2NyZWVuIGluZHVzdHJpYWwgcHJpbnRpbmcgc2VydmljZXMjNzMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTkuMDQuMDAjT2Zmc2V0IGluZHVzdHJpYWwgcHJpbnRpbmcgc2VydmljZXMjNzMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTkuMDUuMDAjRGlnaXRhbCBpbmR1c3RyaWFsIHByaW50aW5nIHNlcnZpY2VzIzczLjE1LjE5LjAwLjAwCi11bnNwc2M3IzczLjE1LjE5LjA2LjAwI1RoZXJtYWwgdHJhbnNmZXIgaW5kdXN0cmlhbCBwcmludGluZyBzZXJ2aWNlcyM3My4xNS4xOS4wMC4wMAotdW5zcHNjNyM3My4xNS4yMC4wMC4wMCNGaWxsaW5nIFNlcnZpY2VzIzczLjE1LjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjIwLjAxLjAwI0xpcXVpZCBmaWxsaW5nIHNlcnZpY2VzIzczLjE1LjIwLjAwLjAwCi11bnNwc2M3IzczLjE1LjIwLjAyLjAwI0Flcm9zb2wgZmlsbGluZyBzZXJ2aWNlcyM3My4xNS4yMC4wMC4wMAotdW5zcHNjNyM3My4xNS4yMC4wMy4wMCNQYXN0ZSBmaWxsaW5nIHNlcnZpY2VzIzczLjE1LjIwLjAwLjAwCi11bnNwc2M3IzczLjE1LjIwLjA0LjAwI1Bvd2RlciBmaWxsaW5nIHNlcnZpY2VzIzczLjE1LjIwLjAwLjAwCi11bnNwc2M3IzczLjE1LjIxLjAwLjAwI01hbnVmYWN0dXJpbmcgZXF1aXBtZW50IG1haW50ZW5hbmNlIGFuZCByZXBhaXIgc2VydmljZXMjNzMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMjEuMDEuMDAjTWFudWZhY3R1cmluZyBlcXVpcG1lbnQgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzMuMTUuMjEuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMjEuMDIuMDAjTWFudWZhY3R1cmluZyBlcXVpcG1lbnQgcmVwYWlyIHNlcnZpY2VzIzczLjE1LjIxLjAwLjAwCi11bnNwc2M3IzczLjE2LjAwLjAwLjAwI01hY2hpbmVyeSBhbmQgdHJhbnNwb3J0IGVxdWlwbWVudCBtYW51ZmFjdHVyZSM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wMC4wMCNNYW51ZmFjdHVyZSBvZiBtYWNoaW5lcnkjNzMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDEuMDAjRW5naW5lIG9yIHR1cmJpbmUgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wMi4wMCNBZ3JpY3VsdHVyYWwgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjAzLjAwI01hY2hpbmUgdG9vbHMgb3IgbWV0YWwgb3Igd29vZCB3b3JraW5nIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDQuMDAjU3BlY2lhbCBpbmR1c3RyaWFsIHBsYW50cyBvciBtYWNoaW5lcnkgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wNS4wMCNDb25zdHJ1Y3Rpb24gbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjA2LjAwI01pbmluZyBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDcuMDAjRm9vZCBwcm9kdWN0cyBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDguMDAjUGFwZXIgcHJpbnRpbmcgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wOS4wMCNNZXRhbGx1cmdpY2FsIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTAuMDAjQ2hlbWljYWwgb3IgcGhhcm1hY2V1dGljYWwgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xMS4wMCNDZW1lbnQgcGxhbnQgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xMi4wMCNUZXh0aWxlIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTMuMDAjUG93ZXIgcGxhbnQgYm9pbGVycyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xNC4wMCNGdXJuYWNlcyBvciBvdmVucyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xNS4wMCNPZmZpY2UgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xNi4wMCNMaWZ0aW5nIG9yIGhvaXN0aW5nIG9yIGNvbnZleWluZyBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTcuMDAjQWlyIGNvbmRpdGlvbmluZyBvciB2ZW50aWxhdGluZyBvciByZWZyaWdlcmF0aW9uIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xOC4wMCNEb21lc3RpYyBhcHBsaWFuY2VzIG9yIG1hY2hpbmVzIGV4Y2VwdCBlbGVjdHJpY2FsIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjE5LjAwI1B1bXBzIG9yIGNvbXByZXNzb3JzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE2LjAwLjAwI01hbnVmYWN0dXJlIG9mIHRyYW5zcG9ydCBlcXVpcG1lbnQjNzMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTYuMDEuMDAjRmlzaGluZyBzaGlwIG9yIGJvYXQgYnVpbGRpbmcgc2VydmljZXMjNzMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTYuMDIuMDAjUmFpbHJvYWQgcm9sbGluZyBzdG9jayBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNi4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wMy4wMCNMb2NvbW90aXZlIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE2LjAwLjAwCi11bnNwc2M3IzczLjE2LjE2LjA0LjAwI01vdG9yIHZlaGljbGVzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE2LjAwLjAwCi11bnNwc2M3IzczLjE2LjE2LjA1LjAwI01vdG9yIHZlaGljbGVzIHBhcnRzIG9yIGFjY2Vzc29yaWVzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE2LjAwLjAwCi11bnNwc2M3IzczLjE2LjE2LjA2LjAwI01vdG9yY3ljbGUgb3IgYmljeWNsZSBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNi4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wNy4wMCNBaXIgb3Igc3BhY2VjcmFmdCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNi4wMC4wMAotdW5zcHNjNyM3My4xNy4wMC4wMC4wMCNNYW51ZmFjdHVyZSBvZiBlbGVjdHJpY2FsIGdvb2RzIGFuZCBwcmVjaXNpb24gaW5zdHJ1bWVudHMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDAuMDAjTWFudWZhY3R1cmUgb2YgZWxlY3RyaWNhbCBnb29kcyM3My4xNy4wMC4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wMS4wMCNQb3dlciBnZW5lcmF0aW9uIG9yIHRyYW5zbWlzc2lvbiBvciBkaXN0cmlidXRpb24gZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjAyLjAwI0RyeSBvciBzdG9yYWdlIGJhdHRlcnkgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDMuMDAjRWxlY3RyaWNhbCB0b29scyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wNC4wMCNNZWFzdXJpbmcgb3IgdGVzdGluZyBpbnN0cnVtZW50cyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wNS4wMCNSYWRpbyBvciB0ZWxldmlzaW9uIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjA2LjAwI0NvbW11bmljYXRpb24gZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjA3LjAwI0VsZWN0cmljYWwgaG91c2Vob2xkIGFwcGxpYW5jZXMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDguMDAjSW5zdWxhdGVkIHdpcmUgb3IgY2FibGUgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDkuMDAjRWxlY3RyaWNhbCBhY2Nlc3NvcmllcyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4xMC4wMCNFbGVjdHJpY2FsIGFjY2Vzc29yaWVzIG9yIHN1cHBsaWVzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjExLjAwI0VsZWN0cm9uaWMgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjEyLjAwI0VsZWN0cm9uaWMgY29tcHV0ZXJzIG9yIGRhdGEgcHJvY2Vzc2luZyBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTYuMDAuMDAjTWFudWZhY3R1cmUgb2YgcHJlY2lzaW9uIGluc3RydW1lbnRzIzczLjE3LjAwLjAwLjAwCi11bnNwc2M3IzczLjE3LjE2LjAxLjAwI1NjaWVudGlmaWMgaW5zdHJ1bWVudHMgb3IgbWVhc3VyaW5nIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNi4wMC4wMAotdW5zcHNjNyM3My4xNy4xNi4wMi4wMCNNZWRpY2FsIG9yIGRlbnRhbCBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTYuMDMuMDAjUGhvdG9ncmFwaGljIG9yIG9wdGljYWwgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE2LjAwLjAwCi11bnNwc2M3IzczLjE3LjE2LjA0LjAwI1dhdGNoZXMgb3IgY2xvY2tzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE2LjAwLjAwCi11bnNwc2M3IzczLjE3LjE2LjA1LjAwI0xhYm9yYXRvcnkgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE2LjAwLjAwCi11bnNwc2M3IzczLjE4LjAwLjAwLjAwI01hY2hpbmluZyBhbmQgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wMC4wMCNNYWNoaW5pbmcgc2VydmljZXMjNzMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDEuMDAjVHVybmluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wMi4wMCNFbGVjdHJvIGRpc2NoYXJnZSBtYWNoaW5pbmcgKEVETSkgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDMuMDAjRWxlY3RybyBjaGVtaWNhbCBtYWNoaW5pbmcgKEVDTSkgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDQuMDAjQ2hlbSBtaWxsaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjA1LjAwI1B1bmNoaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjA2LjAwI1N0YW1waW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjA3LjAwI0JvcmluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wOC4wMCNEcmlsbGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wOS4wMCNUYXBwaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjEwLjAwI0xhc2VyIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjExLjAwI0JlbmRpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTIuMDAjR3JpbmRpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTMuMDAjU2hvdCBibGFzdGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xNC4wMCNQb2xpc2hpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTUuMDAjRmxhbWUgY3V0dGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xNi4wMCNMYXNlciBjdXR0aW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjE3LjAwI1BsYXNtYSBjdXR0aW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjE4LjAwI1dhdGVyIGpldCBjdXR0aW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjE5LjAwI1JvbGxpbmcgU2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMjAuMDAjU3VyZmFjZSB0cmVhdG1lbnQgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMjEuMDAjTWlsbGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4yMi4wMCNTcHJheWluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4yMy4wMCNTaGFycGVuaW5nIHNlcnZpY2UjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDAuMDAjQ29hdGluZyBzZXJ2aWNlcyM3My4xOC4wMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMS4wMS4wMCNFbGVjdHJvIGNvYXRpbmcgc2VydmljZXMjNzMuMTguMTEuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDIuMDAjRGlwcGluZyBzZXJ2aWNlcyM3My4xOC4xMS4wMC4wMAotdW5zcHNjNyM3My4xOC4xMS4wMy4wMCNXcmFwcGluZyBzZXJ2aWNlcyM3My4xOC4xMS4wMC4wMAotdW5zcHNjNyM3My4xOC4xMS4wNC4wMCNQYWludGluZyBzZXJ2aWNlcyM3My4xOC4xMS4wMC4wMAotdW5zcHNjNyM3My4xOC4xMS4wNS4wMCNXZWIgY29hdGluZyBzZXJ2aWNlcyM3My4xOC4xMS4wMC4wMAotdW5zcHNjNyM3My4xOC4xMS4wNi4wMCNQbGF0aW5nIHNlcnZpY2VzIzczLjE4LjExLjAwLjAwCi11bnNwc2M3IzczLjE4LjEyLjAwLjAwI0Zvcm1pbmcgc2VydmljZXMjNzMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTIuMDEuMDAjRHJhdyBmb3JtaW5nIHNlcnZpY2VzIzczLjE4LjEyLjAwLjAwCi11bnNwc2M3IzczLjE4LjEyLjAyLjAwI0h5ZHJvIGZvcm1pbmcgc2VydmljZXMjNzMuMTguMTIuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTIuMDMuMDAjUm9sbCBmb3JtaW5nIHNlcnZpY2VzIzczLjE4LjEyLjAwLjAwCi11bnNwc2M3IzczLjE4LjEyLjA0LjAwI1N0cmV0Y2ggZm9ybWluZyBzZXJ2aWNlcyM3My4xOC4xMi4wMC4wMAotdW5zcHNjNyM3My4xOC4xMi4wNS4wMCNTcGluIGZvcm1pbmcgc2VydmljZXMjNzMuMTguMTIuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTIuMDYuMDAjRXhwbG9zaXZlIGZvcm1pbmcgc2VydmljZXMjNzMuMTguMTIuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTMuMDAuMDAjSGVhdCB0cmVhdG1lbnQgc2VydmljZXMjNzMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTMuMDEuMDAjUXVlbmNoIGFuZCB0ZW1wZXIgc2VydmljZXMjNzMuMTguMTMuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTMuMDIuMDAjQW5uZWFsaW5nIHNlcnZpY2VzIzczLjE4LjEzLjAwLjAwCi11bnNwc2M3IzczLjE4LjEzLjAzLjAwI05vcm1hbGl6aW5nIHNlcnZpY2VzIzczLjE4LjEzLjAwLjAwCi11bnNwc2M3IzczLjE4LjEzLjA0LjAwI0FnaW5nIG9yIHN0YWJpbGl6aW5nIHNlcnZpY2VzIzczLjE4LjEzLjAwLjAwCi11bnNwc2M3IzczLjE4LjE5LjAwLjAwI1dlbGRpbmcgYW5kIGJyYXppbmcgYW5kIHNvbGRlcmluZyBzZXJ2aWNlcyM3My4xOC4wMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wMS4wMCNBcmMgd2VsZGluZyBzZXJ2aWNlcyM3My4xOC4xOS4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wMi4wMCNNZXRhbCBpbmVydCBnYXMgKE1JRykgd2VsZGluZyBzZXJ2aWNlcyM3My4xOC4xOS4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wMy4wMCNUdW5nc3RlbiBpbmVydCBnYXMgKFRJRykgd2VsZGluZyBzZXJ2aWNlcyM3My4xOC4xOS4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wNC4wMCNMYXNlciB3ZWxkaW5nIHNlcnZpY2VzIzczLjE4LjE5LjAwLjAwCi11bnNwc2M3IzczLjE4LjE5LjA1LjAwI1Nwb3Qgd2VsZGluZyBzZXJ2aWNlcyM3My4xOC4xOS4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wNi4wMCNQcm9qZWN0aW9uIHdlbGRpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDcuMDAjQnJhemluZyBzZXJ2aWNlcyM3My4xOC4xOS4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wOC4wMCNTb2xkZXJpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzYuMDAuMDAuMDAuMDAjSW5kdXN0cmlhbCBDbGVhbmluZyBTZXJ2aWNlcyM3Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMC4wMC4wMC4wMCNEZWNvbnRhbWluYXRpb24gc2VydmljZXMjNzYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMTUuMDAuMDAjRGlzaW5mZWN0aW9uIzc2LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEwLjE1LjAxLjAwI1dhc2hyb29tIHNhbml0YXRpb24gc2VydmljZXMjNzYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMTUuMDIuMDAjUmVzdCByb29tIGNsZWFuaW5nIHNlcnZpY2VzIzc2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEwLjE1LjAzLjAwI0Rpc2luZmVjdGlvbiBvciBkZW9kb3JpemluZyBzZXJ2aWNlcyM3Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMC4xNi4wMC4wMCNIYXphcmRvdXMgbWF0ZXJpYWwgZGVjb250YW1pbmF0aW9uIzc2LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEwLjE2LjAxLjAwI1JhZGlvYWN0aXZlIGRlY29udGFtaW5hdGlvbiBzZXJ2aWNlcyM3Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMC4xNi4wMi4wMCNBc2Jlc3RvcyBkZWNvbnRhbWluYXRpb24gb3IgcmVtb3ZhbCM3Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMS4wMC4wMC4wMCNDbGVhbmluZyBhbmQgamFuaXRvcmlhbCBzZXJ2aWNlcyM3Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNS4wMC4wMCNHZW5lcmFsIGJ1aWxkaW5nIGFuZCBvZmZpY2UgY2xlYW5pbmcgc2VydmljZXMjNzYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTUuMDEuMDAjQnVpbGRpbmcgY2xlYW5pbmcgc2VydmljZXMjNzYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTUuMDIuMDAjQnVpbGRpbmcgbWFpbnRlbmFuY2Ugb3IgcmVwYWlyIHNlcnZpY2VzIzc2LjExLjE1LjAwLjAwCi11bnNwc2M3Izc2LjExLjE1LjAzLjAwI0xpZ2h0aW5nIG1haW50ZW5hbmNlIHNlcnZpY2VzIzc2LjExLjE1LjAwLjAwCi11bnNwc2M3Izc2LjExLjE1LjA0LjAwI1dpbmRvdyBvciB3aW5kb3cgYmxpbmQgY2xlYW5pbmcgc2VydmljZXMjNzYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTYuMDAuMDAjQnVpbGRpbmcgY29tcG9uZW50IGNsZWFuaW5nIHNlcnZpY2VzIzc2LjExLjAwLjAwLjAwCi11bnNwc2M3Izc2LjExLjE2LjAxLjAwI0Fjb3VzdGljYWwgdGlsZSBvciBjZWlsaW5nIGNsZWFuaW5nIHNlcnZpY2VzIzc2LjExLjE2LjAwLjAwCi11bnNwc2M3Izc2LjExLjE2LjAyLjAwI0FpciBkdWN0IGNsZWFuaW5nIzc2LjExLjE2LjAwLjAwCi11bnNwc2M3Izc2LjExLjE2LjAzLjAwI0NoaW1uZXkgY2xlYW5pbmcjNzYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTYuMDQuMDAjRmxvb3Igd2F4aW5nIG9yIGNhcnBldCBjbGVhbmluZyM3Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNi4wNS4wMCNFeGhhdXN0IGhvb2Qgb3IgZmFuIGNsZWFyaW5nIzc2LjExLjE2LjAwLjAwCi11bnNwc2M3Izc2LjExLjE3LjAwLjAwI0J1aWxkaW5nIHNpdGUgY2xlYW4gdXAjNzYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTcuMDEuMDAjQ29uc3RydWN0aW9uIHNpdGUgY2xlYW4gdXAgc2VydmljZXMjNzYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTcuMDIuMDAjQ29uc3RydWN0aW9uIHNpdGUgaGF1bCBhd2F5IHNlcnZpY2VzIzc2LjExLjE3LjAwLjAwCi11bnNwc2M3Izc2LjEyLjAwLjAwLjAwI1JlZnVzZSBkaXNwb3NhbCBhbmQgdHJlYXRtZW50Izc2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEyLjE1LjAwLjAwI1JlZnVzZSBjb2xsZWN0aW9uIGFuZCBkaXNwb3NhbCM3Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNS4wMS4wMCNHYXJiYWdlIGNvbGxlY3Rpb24gb3IgZGVzdHJ1Y3Rpb24gb3IgcHJvY2Vzc2luZyBvciBkaXNwb3NhbCM3Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNS4wMi4wMCNMaXF1aWQgd2FzdGUgY29sbGVjdGlvbiBvciBwcm9jZXNzaW5nIG9yIGRpc3Bvc2FsIzc2LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE1LjAzLjAwI1N0cmVldCBjbGVhbmluZyBzZXJ2aWNlcyM3Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNi4wMC4wMCNOb25oYXphcmRvdXMgd2FzdGUgZGlzcG9zYWwjNzYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTYuMDEuMDAjR2FyYmFnZSBkdW1wIzc2LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE2LjAyLjAwI1Nhbml0YXJ5IGxhbmRmaWxsIG9wZXJhdGlvbnMjNzYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTYuMDMuMDAjU2x1ZGdlIGRpc3Bvc2FsIzc2LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE2LjA0LjAwI0RlYWQgYW5pbWFsIGRpc3Bvc2FsIHNlcnZpY2VzIzc2LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE3LjAwLjAwI0xpcXVpZCB3YXN0ZSB0cmVhdG1lbnQjNzYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTcuMDEuMDAjU2V3YWdlIHRyZWF0bWVudCBzZXJ2aWNlcyM3Ni4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNy4wMi4wMCNDaGVtaWNhbCB0cmVhdG1lbnQgc2VydmljZXMjNzYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTguMDAuMDAjUmVmdXNlIHRyZWF0bWVudCM3Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xOC4wMS4wMCNSZWN5Y2xpbmcgc2VydmljZXMjNzYuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTkuMDAuMDAjSGF6YXJkb3VzIHdhc3RlIGRpc3Bvc2FsIzc2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEyLjE5LjAxLjAwI01lZGljYWwgd2FzdGUgZGlzcG9zYWwjNzYuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTkuMDIuMDAjQWNpZCB3YXN0ZSBjb2xsZWN0aW9uIG9yIGRpc3Bvc2FsIzc2LjEyLjE5LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE5LjAzLjAwI0NoZW1pY2FsIGRldG94aWZpY2F0aW9uIzc2LjEyLjE5LjAwLjAwCi11bnNwc2M3Izc2LjEzLjAwLjAwLjAwI1RveGljIGFuZCBoYXphcmRvdXMgd2FzdGUgY2xlYW51cCM3Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMy4xNS4wMC4wMCNOdWNsZWFyIHdhc3RlIHRyZWF0bWVudCM3Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMy4xNS4wMS4wMCNSYWRpb2FjdGl2ZSB3YXN0ZSBtYXRlcmlhbCB0cmVhdG1lbnQjNzYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTUuMDIuMDAjUmFkaW9hY3RpdmUgY29udGFpbm1lbnQgc2VydmljZXMjNzYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTYuMDAuMDAjVG94aWMgc3BpbGwgY2xlYW51cCM3Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMy4xNi4wMS4wMCNUb3hpYyBzcGlsbCBjb250YWlubWVudCM3Ni4xMy4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMy4xNi4wMi4wMCNUb3hpYyBzdWJzdGFuY2VzIHNwaWxsIGNsZWFudXAjNzYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTcuMDAuMDAjT2lsIHNwaWxsIGNsZWFudXAjNzYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTcuMDEuMDAjT2lsIHJlc2lkdWUgZGlzcG9zYWwgb3IgY29udHJvbCBzZXJ2aWNlcyM3Ni4xMy4xNy4wMC4wMAotdW5zcHNjNyM3Ni4xMy4xNy4wMi4wMCNPaWwgc3BpbGwgdHJlYXRtZW50IHNlcnZpY2VzIzc2LjEzLjE3LjAwLjAwCi11bnNwc2M3Izc3LjAwLjAwLjAwLjAwI0Vudmlyb25tZW50YWwgU2VydmljZXMjNzcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMDAuMDAuMDAjRW52aXJvbm1lbnRhbCBtYW5hZ2VtZW50Izc3LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEwLjE1LjAwLjAwI0Vudmlyb25tZW50YWwgaW1wYWN0IGFzc2Vzc21lbnQjNzcuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTUuMDEuMDAjUmlzayBvciBoYXphcmQgYXNzZXNzbWVudCM3Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNS4wMi4wMCNFbnZpcm9ubWVudGFsIHN0YW5kYXJkcyM3Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNS4wMy4wMCNFbnZpcm9ubWVudGFsIGluZGljYXRvcnMgYW5hbHlzaXMjNzcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTUuMDQuMDAjRW52aXJvbm1lbnRhbCBpbXBhY3QgYXNzZXNzbWVudCAgKEVJQSkgc2VydmljZXMjNzcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTUuMDUuMDAjRW52aXJvbm1lbnRhbCBtb25pdG9yaW5nIzc3LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE2LjAwLjAwI0Vudmlyb25tZW50YWwgcGxhbm5pbmcjNzcuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTYuMDEuMDAjVXJiYW4gZW52aXJvbm1lbnRhbCBkZXZlbG9wbWVudCBwbGFubmluZyM3Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNi4wMi4wMCNGb3Jlc3QgY29uc2VydmF0aW9uIHN0cmF0ZWd5IHBsYW5uaW5nIzc3LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE2LjAzLjAwI01hcmluZSBjb25zZXJ2YXRpb24gc3RyYXRlZ3kgcGxhbm5pbmcjNzcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTYuMDQuMDAjTmF0dXJhbCByZXNvdXJjZXMgbWFuYWdlbWVudCBvciBjb25zZXJ2YXRpb24gc3RyYXRlZ3kgcGxhbm5pbmcgc2VydmljZXMjNzcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTYuMDUuMDAjRW52aXJvbm1lbnRhbCBpbnN0aXR1dGlvbiBidWlsZGluZyBvciBwbGFubmluZyM3Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wMC4wMCNFbnZpcm9ubWVudGFsIGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjAxLjAwI0Vudmlyb25tZW50YWwgc2NpZW5jZXMgYWR2aXNvcnkgc2VydmljZXMjNzcuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTcuMDIuMDAjRW52aXJvbm1lbnRhbCBjaGVtaXN0cnkgYWR2aXNvcnkgc2VydmljZXMjNzcuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTcuMDMuMDAjRW52aXJvbm1lbnRhbCBldGhpY3MgYWR2aXNvcnkgc2VydmljZXMjNzcuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTcuMDQuMDAjRW52aXJvbm1lbnRhbCB0ZWNobm9sb2d5IGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjA1LjAwI0Vudmlyb25tZW50YWwgZWNvbm9taWNzIGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjA2LjAwI0Vudmlyb25tZW50YWwgbGF3IGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjA3LjAwI0Vjb2xvZ3kgYWR2aXNvcnkgc2VydmljZXMjNzcuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTguMDAuMDAjRW52aXJvbm1lbnRhbCBhdWRpdGluZyM3Ny4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOC4wMS4wMCNFbnZpcm9ubWVudGFsIGluZm9ybWF0aW9uIHN5c3RlbXMjNzcuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTguMDIuMDAjQ29ycG9yYXRlIGVudmlyb25tZW50YWwgYXVkaXRpbmcgc2VydmljZXMjNzcuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTguMDMuMDAjU2VjdG9yYWwgZW52aXJvbm1lbnRhbCBhdWRpdGluZyBzZXJ2aWNlcyM3Ny4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOC4wNC4wMCNBY3Rpdml0eSBzcGVjaWZpYyBlbnZpcm9ubWVudGFsIGF1ZGl0aW5nIHNlcnZpY2VzIzc3LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE4LjA1LjAwI0Vudmlyb25tZW50YWwgcXVhbGl0eSBjb250cm9sIHNlcnZpY2VzIzc3LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE4LjA2LjAwI0Vudmlyb25tZW50YWwgc2VjdXJpdHkgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4wMC4wMCNQb2xsdXRpb24gaW52ZXN0aWdhdGlvbiBzZXJ2aWNlcyM3Ny4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4wMS4wMCNJbmR1c3RyaWFsIHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4wMi4wMCNJbmR1c3RyaWFsIHdhc3RlIHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4wMy4wMCNHYXN3b3JrcyBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDQuMDAjQ2hlbWljYWwgd29ya3Mgb3Igb2lsIHJlZmluZXJ5IHdhc3RlIHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4wNS4wMCNXb29kIHRyZWF0bWVudCBwbGFudCBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDYuMDAjT2lsIGRlcG90IG9yIHRlcm1pbmFsIHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4wNy4wMCNEcnkgY2xlYW5pbmcgcGxhbnRzIHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4wOC4wMCNGb3VuZHJ5IHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4wOS4wMCNSZWN5Y2xpbmcgcGxhbnQgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjEwLjAwI0Zvb2QgcHJvY2Vzc2luZyBwbGFudCBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMDAuMDAuMDAjRW52aXJvbm1lbnRhbCBwcm90ZWN0aW9uIzc3LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjExLjE1LjAwLjAwI0Vudmlyb25tZW50YWwgc2FmZXR5IHNlcnZpY2VzIzc3LjExLjAwLjAwLjAwCi11bnNwc2M3Izc3LjExLjE1LjAxLjAwI0xhbmRzY2FwZSBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjExLjE1LjAwLjAwCi11bnNwc2M3Izc3LjExLjE1LjAyLjAwI096b25lIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDMuMDAjRm9vZCBvciBmZWVkIGNvbnRhbWluYXRpb24gcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wNC4wMCNHZW5ldGljIHJlc291cmNlcyBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjExLjE1LjAwLjAwCi11bnNwc2M3Izc3LjExLjE1LjA1LjAwI1RveGljIHN1YnN0YW5jZXMgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wNi4wMCNSYWRpYXRpb24gcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wNy4wMCNFbmRhbmdlcmVkIHNwZWNpZXMgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wOC4wMCNOYXR1cmFsIHJpc2tzIG9yIGhhemFyZHMgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNi4wMC4wMCNFbnZpcm9ubWVudGFsIHJlaGFiaWxpdGF0aW9uIzc3LjExLjAwLjAwLjAwCi11bnNwc2M3Izc3LjExLjE2LjAxLjAwI0luZHVzdHJpYWwgc2l0ZSByZWhhYmlsaXRhdGlvbiM3Ny4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNi4wMi4wMCNFbnZpcm9ubWVudGFsIGRlY29udGFtaW5hdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNi4wMy4wMCNMYW5kIHJlY2xhbWF0aW9uIHNlcnZpY2VzIzc3LjExLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjAwLjAwLjAwI1BvbGx1dGlvbiB0cmFja2luZyBhbmQgbW9uaXRvcmluZyBhbmQgcmVoYWJpbGl0YXRpb24jNzcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDAuMDAjQWlyIHBvbGx1dGlvbiM3Ny4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wMS4wMCNBaXIgcXVhbGl0eSBtYW5hZ2VtZW50Izc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjAyLjAwI1RyYW5zYm91bmRhcnkgYWlyIHBvbGx1dGlvbiBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDMuMDAjQWlyIHBvbGx1dGlvbiBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjA0LjAwI0FpciBwb2xsdXRpb24gbW9uaXRvcmluZyBvciBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wNS4wMCNUb3hpYyBnYXMgZGV0ZWN0aW9uIHNlcnZpY2VzIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjA2LjAwI01ldGhhbmUgbW9uaXRvcmluZyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wNy4wMCNDYXJib24gZGlveGlkZSBtb25pdG9yaW5nIHNlcnZpY2VzIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjA4LjAwI0FpcmJvcm5lIHBhcnRpY2xlIG1vbml0b3JpbmcjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDkuMDAjT3pvbmUgZGVwbGV0aW9uIG1vbml0b3Jpbmcgc2VydmljZXMjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDAuMDAjU29pbCBwb2xsdXRpb24jNzcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDEuMDAjU29pbCBwb2xsdXRpb24gcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wMi4wMCNQb2xsdXRlZCBzb2lsIHJlbW92YWwgc2VydmljZXMjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDMuMDAjUG9sbHV0ZWQgc29pbCB0cmVhdG1lbnQgb3IgcmVoYWJpbGl0YXRpb24jNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDQuMDAjU29pbCBwb2xsdXRpb24gYWR2aXNvcnkgc2VydmljZXMjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDUuMDAjU29pbCBwb2xsdXRpb24gbWFwcGluZyM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wNi4wMCNTb2lsIHBvbGx1dGlvbiBtZWFzdXJlbWVudCBvciBtb25pdG9yaW5nIzc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjA3LjAwI09yZ2FuaWMgZmVydGlsaXplciBwb2xsdXRpb24gYXNzZXNzbWVudCM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wOC4wMCNQZXN0aWNpZGVzIHBvbGx1dGlvbiBhc3Nlc3NtZW50Izc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjA5LjAwI05pdHJhdGVzIHBvbGx1dGlvbiBhc3Nlc3NtZW50Izc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjEwLjAwI1Bob3NwaGF0ZXMgcG9sbHV0aW9uIGFzc2Vzc21lbnQjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDAuMDAjV2F0ZXIgcG9sbHV0aW9uIzc3LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjAxLjAwI1N1cmZhY2Ugd2F0ZXIgcG9sbHV0aW9uIG1vbml0b3Jpbmcgb3IgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wMi4wMCNTdXJmYWNlIHdhdGVyIHBvbGx1dGlvbiByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wMy4wMCNTdXJmYWNlIHdhdGVyIHBvbGx1dGlvbiBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjA0LjAwI1N1cmZhY2Ugd2F0ZXIgdHJlYXRtZW50IHNlcnZpY2VzIzc3LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjA1LjAwI1N1cmZhY2Ugd2F0ZXIgcG9sbHV0aW9uIGRyYWluYWdlIHNlcnZpY2VzIzc3LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjA2LjAwI1RyYW5zYm91bmRhcnkgd2F0ZXIgcG9sbHV0aW9uIG1hbmFnZW1lbnQgb3IgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wNy4wMCNHcm91bmR3YXRlciBwb2xsdXRpb24gbW9uaXRvcmluZyBvciBjb250cm9sIHNlcnZpY2VzIzc3LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjA4LjAwI0dyb3VuZHdhdGVyIHBvbGx1dGlvbiBkcmFpbmFnZSBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wOS4wMCNHcm91bmR3YXRlciBwb2xsdXRpb24gdHJlYXRtZW50IG9yIHJlaGFiaWxpdGF0aW9uIzc3LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEzLjAwLjAwLjAwI1BvbGx1dGFudHMgdHJhY2tpbmcgYW5kIG1vbml0b3JpbmcgYW5kIHJlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzc3LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEzLjE1LjAwLjAwI09pbCBwb2xsdXRpb24jNzcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTUuMDEuMDAjT2lsIHNwaWxsYWdlIG1vbml0b3Jpbmcgc2VydmljZXMjNzcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTUuMDIuMDAjT2lsIHNwaWxsYWdlIGNvbnRyb2wgc2VydmljZXMjNzcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTUuMDMuMDAjT2lsIHNwaWxsYWdlIHJlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzc3LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE2LjAwLjAwI05vaXNlIHBvbGx1dGlvbiM3Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNi4wMS4wMCNOb2lzZSBjb250cm9sIHNlcnZpY2VzIzc3LjEzLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE2LjAyLjAwI05vaXNlIHBvbGx1dGlvbiBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjEzLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE2LjAzLjAwI05vaXNlIHBvbGx1dGlvbiBtb25pdG9yaW5nIHNlcnZpY2VzIzc3LjEzLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE2LjA0LjAwI05vaXNlIHBvbGx1dGlvbiBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNy4wMC4wMCNUb3hpYyBzdWJzdGFuY2VzIHBvbGx1dGlvbiM3Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNy4wMS4wMCNUb3hpYyBzdWJzdGFuY2VzIG1vbml0b3Jpbmcgc2VydmljZXMjNzcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTcuMDIuMDAjVG94aWMgc3Vic3RhbmNlcyByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM3Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM3OC4wMC4wMC4wMC4wMCNUcmFuc3BvcnRhdGlvbiBhbmQgU3RvcmFnZSBhbmQgTWFpbCBTZXJ2aWNlcyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4wMC4wMC4wMCNNYWlsIGFuZCBjYXJnbyB0cmFuc3BvcnQjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTUuMDAuMDAjQWlyIGNhcmdvIHRyYW5zcG9ydCM3OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNS4wMS4wMCNEb21lc3RpYyBhaXIgY2FyZ28gdHJhbnBvc3J0Izc4LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE1LjAyLjAwI0ludGVybmF0aW9uYWwgYWlyIGNhcmdvIHRyYW5zcG9ydCM3OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNS4wMy4wMCNBcm1vcmVkIGFpciB0cmFuc3BvcnQjNzguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTYuMDAuMDAjUmFpbCBjYXJnbyB0cmFuc3BvcnQjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTYuMDEuMDAjQm94Y2FyIHRyYW5zcG9ydCBzZXJ2aWNlcyM3OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNi4wMi4wMCNCdWxrIGNhcmdvIHJhaWwgdHJhc25wb3J0IHNlcnZpY2VzIzc4LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE2LjAzLjAwI0xpdmVzdG9jayByYWlsIHRyYW5zcG9ydCM3OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNi4wNC4wMCNWZWhpY2xlIHRyYW5zcG9ydCBzZXJ2aWNlcyM3OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNy4wMC4wMCNNYXJpbmUgY2FyZ28gdHJhbnNwb3J0Izc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjE3LjAxLjAwI0RvbWVzdGljIHZlc3NlbCB0cmFuc3BvcnQgc2VydmljZXMjNzguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTcuMDIuMDAjSW50ZXJuYXRpb25hbCB2ZXNzZWwgdHJhbnNwb3J0IHNlcnZpY2VzIzc4LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE3LjAzLjAwI0RvbWVzdGljIGJhcmdlIHRyYW5zcG9ydCBzZXJ2aWNlcyM3OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNy4wNC4wMCNJbnRlcm5hdGlvbmFsIGJhcmdlIHRyYW5zcG9ydCBzZXJ2aWNlcyM3OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNy4wNS4wMCNBcm1vcmVkIG1hcmluZSB0cmFuc3BvcnQjNzguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTguMDAuMDAjUm9hZCBjYXJnbyB0cmFuc3BvcnQjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTguMDEuMDAjTG9jYWwgYXJlYSB0cnVja2luZyBzZXJ2aWNlcyM3OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOC4wMi4wMCNSZWdpb25hbCBvciBuYXRpb25hbCB0cnVja2luZyBzZXJ2aWNlcyM3OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOC4wMy4wMCNWZWhpY2xlIGNhcnJpZXIgc2VydmljZXMjNzguMTAuMTguMDAuMDAKLXVuc3BzYzcjNzguMTAuMTguMDQuMDAjUmVsb2NhdGlvbiBzZXJ2aWNlcyM3OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOS4wMC4wMCNJbnRlcm1vZGFsIGNhcmdvIHRyYW5zcG9ydCM3OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOS4wMS4wMCNBaXIgdG8gb2NlYW4gdHJhbnNwb3J0YXRpb24jNzguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTkuMDIuMDAjT2NlYW4gdG8gcmFpbCB0cmFuc3BvcnRhdGlvbiM3OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOS4wMy4wMCNPY2VhbiB0byB0cnVjayB0cmFuc3BvcnRhdGlvbiM3OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOS4wNC4wMCNBaXIgdG8gdHJ1Y2sgdHJhbnNwb3J0Izc4LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE5LjA1LjAwI1JhaWwgdHJ1Y2sgdHJhbnNwb3J0YXRpb24jNzguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjAuMDAuMDAjU3BhY2VjcmFmdCBjYXJnbyB0cmFuc3BvcnQjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjAuMDEuMDAjU2F0ZWxsaXRlIGxhdW5jaCBzZXJ2aWNlcyM3OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMC4wMi4wMCNFeHBlcmltZW50YWwgcGF5bG9hZCBzZXJ2aWNlcyM3OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMS4wMC4wMCNQaXBlbGluZSBzZXJ2aWNlcyM3OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMS4wMS4wMCNQZXRyb2xldW0gcHJvZHVjdHMgdHJhbnNwb3J0Izc4LjEwLjIxLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIxLjAyLjAwI1dhdGVyIHRyYW5zcG9ydCM3OC4xMC4yMS4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMi4wMC4wMCNQb3N0YWwgYW5kIHNtYWxsIHBhcmNlbCBhbmQgY291cmllciBzZXJ2aWNlcyM3OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMi4wMS4wMCNOYXRpb25hbCBwb3N0YWwgZGVsaXZlcnkgc2VydmljZXMjNzguMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjIuMDIuMDAjUG9zdCBvZmZpY2UgYm94IHNlcnZpY2VzIzc4LjEwLjIyLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIyLjAzLjAwI01haWxpbmcgb3IgbWFpbCBwaWNrIHVwIG9yIGRlbGl2ZXJ5IHNlcnZpY2VzIzc4LjEwLjIyLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIyLjA0LjAwI0xldHRlciBvciBzbWFsbCBwYXJjZWwgd29ybGR3aWRlIGRlbGl2ZXJ5IHNlcnZpY2VzIzc4LjEwLjIyLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIyLjA1LjAwI0xldHRlciBvciBzbWFsbCBwYXJjZWwgbG9jYWwgZGVsaXZlcnkgc2VydmljZXMjNzguMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjIuMDYuMDAjQmljeWNsZSBvciBzY29vdGVyIG1lc3NlbmdlciBzZXJ2Y2llcyM3OC4xMC4yMi4wMC4wMAotdW5zcHNjNyM3OC4xMS4wMC4wMC4wMCNQYXNzZW5nZXIgdHJhbnNwb3J0Izc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjExLjE1LjAwLjAwI0FpciB0cmFuc3BvcnRhdGlvbiM3OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNS4wMS4wMCNIZWxpY29wdGVyIHNlcnZpY2VzIzc4LjExLjE1LjAwLjAwCi11bnNwc2M3Izc4LjExLjE1LjAyLjAwI0NvbW1lcmNpYWwgYWlycGxhbmUgdHJhdmVsIzc4LjExLjE1LjAwLjAwCi11bnNwc2M3Izc4LjExLjE1LjAzLjAwI0NoYXJ0ZXJlZCBhaXJwbGFuZSB0cmF2ZWwjNzguMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTYuMDAuMDAjUmFpbHdheSB0cmFuc3BvcnRhdGlvbiM3OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNi4wMS4wMCNMaWdodCByYWlsIHZlaGljbGUgdHJhbnNwb3J0IChMUlYpIHNlcnZpY2VzIzc4LjExLjE2LjAwLjAwCi11bnNwc2M3Izc4LjExLjE2LjAyLjAwI1N1YndheSB0cmFuc3BvcnQjNzguMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTYuMDMuMDAjQ29udGluZW50YWwgb3IgaW50ZXIgY29udGluZW50YWwgcmFpbCBzZXJ2aWNlcyM3OC4xMS4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNy4wMC4wMCNNYXJpbmUgdHJhbnNwb3J0YXRpb24jNzguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTcuMDEuMDAjV2F0ZXIgdGF4aXMjNzguMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTcuMDIuMDAjT3Zlcm5pZ2h0IHNoaXAgY3J1aXNlcyM3OC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNy4wMy4wMCNTaWdodHNlZWluZyBib2F0IGV4Y3Vyc2lvbnMjNzguMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTguMDAuMDAjUm9hZCB0cmFuc3BvcnRhdGlvbiM3OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOC4wMS4wMCNDYXIgcmVudGFsIHNlcnZpY2VzIzc4LjExLjE4LjAwLjAwCi11bnNwc2M3Izc4LjExLjE4LjAyLjAwI1NjaGVkdWxlZCBidXMgc2VydmljZXMjNzguMTEuMTguMDAuMDAKLXVuc3BzYzcjNzguMTEuMTguMDMuMDAjQ2hhcnRlcmVkIGJ1cyBzZXJ2aWNlcyM3OC4xMS4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOC4wNC4wMCNUYXhpY2FiIHNlcnZpY2VzIzc4LjExLjE4LjAwLjAwCi11bnNwc2M3Izc4LjExLjE4LjA1LjAwI1RyYW5zcG9ydGF0aW9uIG1haW50ZW5hbmNlIzc4LjExLjE4LjAwLjAwCi11bnNwc2M3Izc4LjExLjE4LjA2LjAwI1ZlaGljbGUgcmVudGFsIG9yIGxlYXNpbmcjNzguMTEuMTguMDAuMDAKLXVuc3BzYzcjNzguMTEuMTkuMDAuMDAjU3BhY2UgdHJhbnNwb3J0YXRpb24jNzguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTkuMDEuMDAjRXhwZXJpbWVudGFsIG9yIGVkdWNhdGlvbmFsIG1pc3Npb25zIzc4LjExLjE5LjAwLjAwCi11bnNwc2M3Izc4LjEyLjAwLjAwLjAwI01hdGVyaWFsIHBhY2tpbmcgYW5kIGhhbmRsaW5nIzc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEyLjE1LjAwLjAwI1BhY2tpbmcjNzguMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTIuMTUuMDEuMDAjQ29udGFpbmVyaXphdGlvbiBvZiBnb29kcyM3OC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMi4xNS4wMi4wMCNDcmF0aW5nIHNlcnZpY2VzIzc4LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc4LjEyLjE2LjAwLjAwI01hdGVyaWFsIGhhbmRsaW5nIHNlcnZpY2VzIzc4LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEyLjE2LjAxLjAwI0ZyZWlnaHQgbG9hZGluZyBvciB1bmxvYWRpbmcjNzguMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTIuMTYuMDIuMDAjV2VpZ2hpbmcgc2VydmljZXMjNzguMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTMuMDAuMDAuMDAjU3RvcmFnZSM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMy4xNS4wMC4wMCNGYXJtIHByb2R1Y3RzIHdhcmVob3VzaW5nIzc4LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEzLjE1LjAxLjAwI1NpbG8gc2VydmljZXMjNzguMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTUuMDIuMDAjR3JhaW4gZWxldmF0b3Igc2VydmljZXMjNzguMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTYuMDAuMDAjR2VuZXJhbCBnb29kcyBzdG9yYWdlIzc4LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEzLjE2LjAxLjAwI1BhbGxldGl6ZWQgY2FyZ28gc3RvcmFnZSM3OC4xMy4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMy4xNi4wMi4wMCNGaWxlIGFyY2hpdmUgc3RvcmFnZSM3OC4xMy4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMy4xNy4wMC4wMCNCdWxrIHN0b3JhZ2UjNzguMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTcuMDEuMDAjSW4gZ3JvdW5kIHN0b3JhZ2Ugc2VydmljZXMjNzguMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTguMDAuMDAjU3BlY2lhbGl6ZWQgd2FyZWhvdXNpbmcgYW5kIHN0b3JhZ2UjNzguMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTguMDEuMDAjUmVmcmlnZXJhdGVkIHN0b3JhZ2UjNzguMTMuMTguMDAuMDAKLXVuc3BzYzcjNzguMTMuMTguMDIuMDAjQ3VzdG9tcyBib25kZWQgc3RvcmFnZSBzZXJ2aWNlcyM3OC4xMy4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMy4xOC4wMy4wMCNIYXphcmRvdXMgbWF0ZXJpYWxzIHN0b3JhZ2UjNzguMTMuMTguMDAuMDAKLXVuc3BzYzcjNzguMTMuMTguMDQuMDAjRG9jdW1lbnQgc3RvcmFnZSBzZXJ2aWNlcyM3OC4xMy4xOC4wMC4wMAotdW5zcHNjNyM3OC4xNC4wMC4wMC4wMCNUcmFuc3BvcnQgb3BlcmF0aW9ucyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNS4wMC4wMCNUcmFuc3BvcnQgYXJyYW5nZW1lbnRzIzc4LjE0LjAwLjAwLjAwCi11bnNwc2M3Izc4LjE0LjE1LjAxLjAwI0ZyZWlnaHQgZm9yd2FyZGVycyBzZXJ2aWNlcyM3OC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNS4wMi4wMCNDdXN0b21zIGJyb2tlcmFnZSBzZXJ2aWNlcyM3OC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNS4wMy4wMCNUcmFuc3BvcnRhdGlvbiBpbmR1c3RyeSB0YXJpZmYgY29tcGFyaXNvbiBvciBmcmVpZ2h0IGF1ZGl0IHNlcnZpY2VzIzc4LjE0LjE1LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE2LjAwLjAwI0luc3BlY3Rpb24jNzguMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTYuMDEuMDAjUGFja2luZyBpbnNwZWN0aW9uIHNlcnZpY2VzIzc4LjE0LjE2LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE2LjAyLjAwI0NhcmdvIHN1cnZleSBzZXJ2aWNlcyM3OC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNi4wMy4wMCNQZXN0IGNvbnRyb2wgaW5zcGVjdGlvbnMjNzguMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTcuMDAuMDAjTmF2aWdhdGlvbmFsIHNlcnZpY2VzIzc4LjE0LjAwLjAwLjAwCi11bnNwc2M3Izc4LjE0LjE3LjAxLjAwI1R1Z2JvYXQgc2VydmljZXMjNzguMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTcuMDIuMDAjRHJhd2JyaWRnZSBvcGVyYXRpb25zIzc4LjE0LjE3LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE4LjAwLjAwI1Rlcm1pbmFsIHNlcnZpY2VzIzc4LjE0LjAwLjAwLjAwCi11bnNwc2M3Izc4LjE0LjE4LjAxLjAwI1N0ZXZlZG9yaW5nIHNlcnZpY2VzIzc4LjE0LjE4LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE4LjAyLjAwI1Zlc3NlbCBkb2NraW5nIHNlcnZpY2VzIzc4LjE0LjE4LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE4LjAzLjAwI1Zlc3NlbCBzdG9yZXMgc2VydmljZXMjNzguMTQuMTguMDAuMDAKLXVuc3BzYzcjNzguMTQuMTguMDQuMDAjUGFya2luZyBzdHJ1Y3R1cmVzIzc4LjE0LjE4LjAwLjAwCi11bnNwc2M3Izc4LjE1LjAwLjAwLjAwI1RyYW5zcG9ydCBpbmR1c3RyeSBzdXBwb3J0IGFuZCBtYWludGVuYW5jZSBhbmQgcmVwYWlyIHNlcnZpY2VzIzc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjE1LjAxLjAwLjAwI1BhbmVsIGFuZCBwYWludCBzZXJ2aWNlcyM3OC4xNS4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNS4wMS4wMS4wMCNQYW5lbGJlYXRpbmcgc2VydmljZXMjNzguMTUuMDEuMDAuMDAKLXVuc3BzYzcjNzguMTUuMDIuMDAuMDAjVHJhbnNwb3J0IGZ1ZWxsaW5nIGFuZCB2ZWhpY2xlIHN0b3JhZ2UgYW5kIHN1cHBvcnQgc2VydmljZXMjNzguMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTUuMDIuMDEuMDAjRnVlbGxpbmcgb2YgdmVoaWNsZXMjNzguMTUuMDIuMDAuMDAKLXVuc3BzYzcjNzguMTUuMDIuMDIuMDAjVHJhbnNwb3J0YXRpb24gc3RvcmFnZSM3OC4xNS4wMi4wMC4wMAotdW5zcHNjNyM3OC4xNi4wMC4wMC4wMCNQYW5lbCBhbmQgcGFpbnQgc2VydmljZXMjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTcuMDAuMDAuMDAjUGFuZWxiZWF0aW5nIHNlcnZpY2VzIzc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjE4LjAwLjAwLjAwI1RyYW5zcG9ydGF0aW9uIG9yIHZlaGljbGUgcmVwYWlyIHNlcnZpY2VzIzc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjE4LjAxLjAwLjAwI1ZlaGljbGUgcmVwYWlyIHNlcnZpY2VzIzc4LjE4LjAwLjAwLjAwCi11bnNwc2M3Izc4LjE4LjAxLjAxLjAwI1ZlaGljbGUgYm9keSByZXBhaXIgb3IgcGFpbnRpbmcgc2VydmljZXMjNzguMTguMDEuMDAuMDAKLXVuc3BzYzcjNzguMTguMDEuMDIuMDAjVHJhbnNtaXNzaW9uIHJlcGFpciM3OC4xOC4wMS4wMC4wMAotdW5zcHNjNyM3OC4xOS4wMC4wMC4wMCNWZWhpY2xlIHJlcGFpciBzZXJ2aWNlcyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xOS4xMS4wMC4wMCNWZWhpY2xlIGJvZHkgcmVwYWlyIG9yIHBhaW50aW5nIHNlcnZpY2VzIzc4LjE5LjAwLjAwLjAwCi11bnNwc2M3Izc4LjE5LjEyLjAwLjAwI1RyYW5zbWlzc2lvbiByZXBhaXIjNzguMTkuMDAuMDAuMDAKLXVuc3BzYzcjODAuMDAuMDAuMDAuMDAjTWFuYWdlbWVudCBhbmQgQnVzaW5lc3MgUHJvZmVzc2lvbmFscyBhbmQgQWRtaW5pc3RyYXRpdmUgU2VydmljZXMjODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTAuMDAuMDAuMDAjTWFuYWdlbWVudCBhZHZpc29yeSBzZXJ2aWNlcyM4MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNS4wMC4wMCNCdXNpbmVzcyBhbmQgY29ycG9yYXRlIG1hbmFnZW1lbnQjODAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDEuMDAjTmV3IGJ1c2luZXNzIHN0YXJ0IHVwIGNvbnN1bHRhdGlvbiBzZXJ2aWNlcyM4MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNS4wMi4wMCNDb3Jwb3JhdGUgbWVyZ2VycyBjb25zdWx0YXRpb24gc2VydmljZXMjODAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDMuMDAjQ29ycG9yYXRlIGRpdmVzdGl0dXJlIGNvbnN1bHRhdGlvbiBzZXJ2aWNlcyM4MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNS4wNC4wMCNTdHJhdGVnaWMgcGxhbm5pbmcgY29uc3VsdGF0aW9uIHNlcnZpY2VzIzgwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE1LjA1LjAwI0NvcnBvcmF0ZSBvYmplY3RpdmVzIG9yIHBvbGljeSBkZXZlbG9wbWVudCM4MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNS4wNi4wMCNPcmdhbml6YXRpb25hbCBzdHJ1Y3R1cmUgY29uc3VsdGF0aW9uIzgwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE1LjA3LjAwI0luZm9ybWF0aW9uIHRlY2hub2xvZ3kgY29uc3VsdGF0aW9uIHNlcnZpY2VzIzgwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE2LjAwLjAwI1Byb2plY3QgbWFuYWdlbWVudCM4MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNi4wMS4wMCNGZWFzaWJpbGl0eSBzdHVkaWVzIG9yIHNjcmVlbmluZyBvZiBwcm9qZWN0IGlkZWFzIzgwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE2LjAyLjAwI1JlZ2lvbmFsIG9yIGxvY2F0aW9uIHN0dWRpZXMgZm9yIHByb2plY3RzIzgwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE2LjAzLjAwI0Vjb25vbWljIG9yIGZpbmFuY2lhbCBldmFsdWF0aW9uIG9mIHByb2plY3RzIzgwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE2LjA0LjAwI1Byb2plY3QgYWRtaW5pc3RyYXRpb24gb3IgcGxhbm5pbmcjODAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTcuMDAuMDAjSW5kdXN0cmlhbCBtYW5hZ2VtZW50IzgwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEwLjE3LjAxLjAwI0ZhY3RvcnkgbWFuYWdlbWVudCBzZXJ2aWNlcyM4MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNy4wMi4wMCNQcm9kdWN0aXZpdHkgb3IgZWZmaWNpZW5jeSBzdHVkaWVzIG9yIGltcGxlbWVudGF0aW9uIzgwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE3LjAzLjAwI1NwZWNpZmljYXRpb24gc3RhbmRhcmRpemF0aW9uIHNlcnZpY2VzIzgwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE3LjA0LjAwI1N1cHBseSBjaGFpbiBhbmFseXNpcyBvciByZSBlbmdpbmVlcmluZyBzZXJ2aWNlcyM4MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNy4wNS4wMCNDbyBvcGVyYXRpdmUgb3IgY29uc29ydGl1bSBzZXJ2aWNlcyM4MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNy4wNi4wMCNQcm9mZXNzaW9uYWwgcHJvY3VyZW1lbnQgc2VydmljZXMjODAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTEuMDAuMDAuMDAjSHVtYW4gcmVzb3VyY2VzIHNlcnZpY2VzIzgwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjExLjE1LjAwLjAwI0h1bWFuIHJlc291cmNlIGRldmVsb3BtZW50IzgwLjExLjAwLjAwLjAwCi11bnNwc2M3IzgwLjExLjE1LjAxLjAwI01hbmFnZW1lbnQgZGV2ZWxvcG1lbnQjODAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTUuMDIuMDAjQ29tcGVuc2F0aW9uIG9yIGJlbmVmaXRzIHBsYW5uaW5nIzgwLjExLjE1LjAwLjAwCi11bnNwc2M3IzgwLjExLjE1LjAzLjAwI0xhYm9yIG9yIHVuaW9uIHJlbGF0aW9ucyM4MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNS4wNC4wMCNMYWJvciB0cmFpbmluZyBvciBkZXZlbG9wbWVudCM4MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNS4wNS4wMCNIdW1hbiByZXNvdXJjZXMgcHJvZHVjdGl2aXR5IGF1ZGl0cyM4MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNS4wNi4wMCNQZXJzb25uZWwgcmVsb2NhdGlvbiM4MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wMC4wMCNUZW1wb3JhcnkgcGVyc29ubmVsIHNlcnZpY2VzIzgwLjExLjAwLjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjAxLjAwI1RlbXBvcmFyeSBjbGVyaWNhbCBvciBhZG1pbnN0cmF0aXZlIGFzc2lzdGFuY2UjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDIuMDAjVGVtcG9yYXJ5IG1hcmtldGluZyBzdGFmZiBuZWVkcyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wMy4wMCNUZW1wb3JhcnkgcHJvZHVjdGlvbiBzdGFmZmluZyBuZWVkcyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wNC4wMCNUZW1wb3JhcnkgdGVjaG5pY2lhbiBzdGFmZmluZyBuZWVkcyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wNS4wMCNUZW1wb3JhcnkgZmluYW5jaWFsIHN0YWZmaW5nIG5lZWRzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjA2LjAwI1RlbXBvcmFyeSBtZWRpY2FsIHN0YWZmaW5nIG5lZWRzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjA3LjAwI1RlbXBvcmFyeSBsZWdhbCBzdGFmZmluZyBuZWVkcyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wOC4wMCNUZW1wb3JhcnkgaW5mb3JtYXRpb24gdGVjaG5vbG9neSBzb2Z0d2FyZSBkZXZlbG9wZXJzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjA5LjAwI1RlbXBvcmFyeSBpbmZvcm1hdGlvbiB0ZWNobm9sb2d5IHN5c3RlbXMgb3IgZGF0YWJhc2UgYWRtaW5pc3RyYXRvcnMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMTAuMDAjVGVtcG9yYXJ5IGluZm9ybWF0aW9uIHRlY2hub2xvZ3kgbmV0d29ya2luZyBzcGVjaWFsaXN0cyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4xMS4wMCNUZW1wb3Jhcnkgd2FyZWhvdXNlIHN0YWZmIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjEyLjAwI1RlbXBvcmFyeSBkcml2ZXJzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjEzLjAwI1RlbXBvcmFyeSBtYW51YWwgbGFib3IjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMTQuMDAjVGVtcG9yYXJ5IHByb2Zlc3Npb25hbCBzdGFmZiM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4xNS4wMCNUZW1wb3JhcnkgbWFjaGluaXN0IHBlcnNvbm5lbCM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNy4wMC4wMCNQZXJzb25uZWwgcmVjcnVpdG1lbnQjODAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTcuMDEuMDAjU3RhZmYgcmVjcnVpdGluZyBzZXJ2aWNlcyM4MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNy4wMi4wMCNSZWZlcmVuY2Ugb3IgYmFja2dyb3VuZCBjaGVjayBzZXJ2aWNlcyM4MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNy4wMy4wMCNSZXN1bWUgb3IgY3VycmljdWx1bSB2aXRhZSBzY3JlZW5pbmcgc2VydmljZXMjODAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTguMDAuMDAjSW5mb3JtYXRpb24gdGVjaG5vbG9neSBjb250cmFjdG9ycyM4MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMS4xOC4wMS4wMCNUZW1wb3JhcnkgaW5mb3JtYXRpb24gdGVjaG5vbG9neSBjb250cmFjdG9ycyM4MC4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MC4xMi4wMC4wMC4wMCNMZWdhbCBzZXJ2aWNlcyM4MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNS4wMC4wMCNDcmltaW5hbCBsYXcgc2VydmljZXMjODAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTUuMDEuMDAjSnV2ZW5pbGUganVzdGljZSBsYXcgc2VydmljZXMjODAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTUuMDIuMDAjQXBwZWxsYXRlIHByb2NlZHVyZSBzZXJ2aWNlcyM4MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNS4wMy4wMCNEZWZlbnNlIG9yIGNyaW1pbmFsIGxhdyBzZXJ2aWNlcyM4MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wMC4wMCNCdXNpbmVzcyBsYXcgc2VydmljZXMjODAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDEuMDAjR292ZXJubWVudCBhbnRpdHJ1c3Qgb3IgcmVndWxhdGlvbnMgbGF3IHNlcnZpY2VzIzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjAyLjAwI0JhbmtydXB0Y3kgbGF3IHNlcnZpY2VzIzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjAzLjAwI1BhcnRuZXJzaGlwIGxhdyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wNC4wMCNQYXRlbnQgb3IgdHJhZGVtYXJrIG9yIGNvcHlyaWdodCBsYXcjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDUuMDAjTGlxdWlkYXRpb24gbGF3IHNlcnZpY2VzIzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjA2LjAwI1JlYWwgZXN0YXRlIGxhdyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wNy4wMCNUYXhhdGlvbiBsYXcjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDguMDAjTWVyZ2VycyBvciBhY3F1aXNpdGlvbnMgbGF3IzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjA5LjAwI0xlZ2FsIHJlc2VhcmNoIHNlcnZpY2VzIzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjEwLjAwI0RlYnQgY29sbGVjdGlvbiBsYXcgc2VydmljZXMjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTcuMDAuMDAjQ2l2aWwgbGlhYmlsaXR5IHNlcnZpY2VzIzgwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEyLjE3LjAxLjAwI01hbHByYWN0aWNlIG9yIG5lZ2xpZ2VuY2UgbGF3IHNlcnZpY2VzIzgwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE3LjAyLjAwI1BlcnNvbmFsIGluanVyeSBsYXcgc2VydmljZXMjODAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTcuMDMuMDAjUHJvcGVydHkgbGF3IHNlcnZpY2VzIzgwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE3LjA0LjAwI0NvbnRyYWN0IGxhdyBzZXJ2aWNlcyM4MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMi4xOC4wMC4wMCNGYW1pbHkgbGF3IHNlcnZpY2VzIzgwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEyLjE4LjAxLjAwI0Rpdm9yY2UgbGF3IHNlcnZpY2VzIzgwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE4LjAyLjAwI0Fkb3B0aW9uIGxhdyBzZXJ2aWNlcyM4MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xOC4wMy4wMCNJbW1pZ3JhdGlvbiBvciBuYXR1cmFsaXphdGlvbiBsYXcjODAuMTIuMTguMDAuMDAKLXVuc3BzYzcjODAuMTIuMTguMDQuMDAjR3VhcmRpYW5zaGlwIG9yIGN1c3RvZHkgbGF3IHNlcnZpY2VzIzgwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzgwLjEzLjAwLjAwLjAwI1JlYWwgZXN0YXRlIHNlcnZpY2VzIzgwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEzLjE1LjAwLjAwI0xlYXNlIGFuZCByZW50YWwgb2YgcHJvcGVydHkgb3IgYnVpbGRpbmcjODAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTUuMDEuMDAjUmVzaWRlbnRpYWwgcmVudGFsIzgwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE1LjAyLjAwI0NvbW1lcmNpYWwgb3IgaW5kdXN0cmlhbCBmYWNpbGl0eSByZW50YWwjODAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTUuMDMuMDAjTGFuZCBsZWFzZXMjODAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTYuMDAuMDAjU2FsZSBvZiBwcm9wZXJ0eSBhbmQgYnVpbGRpbmcjODAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTYuMDEuMDAjUmVhbCBlc3RhdGUgYnJva2VycyBvciBhZ2VudHMjODAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTYuMDIuMDAjUmVhbCBlc3RhdGUgYXVjdGlvbiM4MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNi4wMy4wMCNTYWxlIG9mIHJlc2lkZW50aWFsIGxhbmQjODAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTYuMDQuMDAjU2FsZSBvZiBjb21tZXJjaWFsIG9yIGluZHVzdHJpYWwgbGFuZCM4MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNi4wNS4wMCNTYWxlIG9mIGNvbW1lcmNpYWwgYnVpbGRpbmcjODAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTcuMDAuMDAjRXNjcm93IGFuZCB0aXRsZSBzZXJ2aWNlcyM4MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNy4wMS4wMCNUaXRsZSByZWNvbnZleWFuY2Ugc2VydmljZXMjODAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTcuMDIuMDAjVGl0bGUgc2VhcmNoIHNlcnZpY2VzIzgwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE3LjAzLjAwI0VzY3JvdyBhY2NvdW50IHNlcnZpY2VzIzgwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE4LjAwLjAwI1JlYWwgZXN0YXRlIG1hbmFnZW1lbnQgc2VydmljZXMjODAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTguMDEuMDAjUHJvcGVydHkgbWFuYWdlbWVudCM4MC4xMy4xOC4wMC4wMAotdW5zcHNjNyM4MC4xMy4xOC4wMi4wMCNSZWFsIGVzdGF0ZSBhcHByYWlzYWwgc2VydmljZXMjODAuMTMuMTguMDAuMDAKLXVuc3BzYzcjODAuMTMuMTguMDMuMDAjUmVhbCBlc3RhdGUgbGlzdGluZyBzZXJ2aWNlcyM4MC4xMy4xOC4wMC4wMAotdW5zcHNjNyM4MC4xNC4wMC4wMC4wMCNNYXJrZXRpbmcgYW5kIGRpc3RyaWJ1dGlvbiM4MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNS4wMC4wMCNNYXJrZXQgcmVzZWFyY2gjODAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTUuMDEuMDAjTWFya2V0aW5nIGFuYWx5c2lzIzgwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE1LjAyLjAwI0Rpc3RyaWJ1dGl2ZSBvciBzZXJ2aWNlIHRyYWRlIHN0YXRpc3RpY3MjODAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTUuMDMuMDAjQ29tbW9kaXR5IHByaWNlIGZvcmVjYXN0aW5nIzgwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE1LjA0LjAwI1ByZXBhcmF0aW9uIG9mIGNvbW1vZGl0eSBtYXJrZXQgc3VydmV5cyM4MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNS4wNS4wMCNNYXJrZXRpbmcgcGxhbnMjODAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTUuMDYuMDAjSW50ZXJuZXQgYmFzZWQgbWFya2V0IHJlc2VhcmNoIzgwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjAwLjAwI1NhbGVzIGFuZCBidXNpbmVzcyBwcm9tb3Rpb24gYWN0aXZpdGllcyM4MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wMS4wMCNTYWxlcyBwcm9tb3Rpb24gc2VydmljZXMjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDIuMDAjUHVibGljIHJlbGF0aW9uIHNlcnZpY2VzIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjAzLjAwI1RlbGVtYXJrZXRpbmcjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDQuMDAjQnJhbmRpbmcgb2YgcHJvZHVjdCBuYW1pbmcgc2VydmljZXMjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDUuMDAjUHJvbW90aW9uYWwgbWVyY2hhbmRpc2UjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDYuMDAjRGlyZWN0IG1hcmtldGluZyBmdWxmaWxsbWVudCM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wNy4wMCNFdmVudHMgbWFuYWdlbWVudCM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wOC4wMCNMZXR0ZXIgc2hvcCBzZXJ2aWNlcyM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wOS4wMCNTcG9uc29yc2hpcCBvZiBldmVudCBvciBjZWxlYnJpdHkjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMTAuMDAjQ2xvc2Ugb3V0cyM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNy4wMC4wMCNEaXN0cmlidXRpb24jODAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTcuMDEuMDAjRGlyZWN0IHNhbGVzIHNlcnZpY2VzIzgwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE3LjAyLjAwI1dob2xlc2FsZSBkaXN0cmlidXRpb24gc2VydmljZXMjODAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTcuMDMuMDAjUmV0YWlsIGRpc3RyaWJ1dGlvbiBzZXJ2aWNlcyM4MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNy4wNC4wMCNGcmFuY2hpc2Ugb3BlcmF0aW9ucyM4MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNy4wNS4wMCNBdWN0aW9uIHNlcnZpY2VzIzgwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE4LjAwLjAwI01haWxpbmcgc2VydmljZXMjODAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTguMDEuMDAjTWFpbGluZyBsaXN0IGNvbXBpbGF0aW9uIHNlcnZpY2VzIzgwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE4LjAyLjAwI01haWxpbmcgbGlzdCBtYW5hZ2VtZW50IHNlcnZpY2UjODAuMTQuMTguMDAuMDAKLXVuc3BzYzcjODAuMTQuMTguMDMuMDAjQWRkcmVzc2luZyBzZXJ2aWNlIzgwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgwLjE1LjAwLjAwLjAwI1RyYWRlIHBvbGljeSBhbmQgc2VydmljZXMjODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTUuMDAuMDAjVHJhZGUgZmFjaWxpdGF0aW9uIzgwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE1LjE1LjAxLjAwI0NvbW1vZGl0eSBwb2xpY3kgb3IgcHJvamVjdGlvbnMgc2VydmljZXMjODAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTUuMDIuMDAjVHJhZGUgZXhwYW5zaW9uIzgwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE1LjE1LjAzLjAwI1RyYWRlIGluZm9ybWF0aW9uIHNlcnZpY2VzIzgwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE1LjE1LjA0LjAwI1RyYWRlIHByb21vdGlvbiBzZXJ2aWNlcyM4MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNS4wNS4wMCNNdWx0aW5hdGlvbmFsIG1hcmtldGluZyBlbnRlcnByaXNlcyM4MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNi4wMC4wMCNJbnRlcm5hdGlvbmFsIHRyYWRlIHNlcnZpY2VzIzgwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE1LjE2LjAxLjAwI0V4cG9ydCBkZXZlbG9wbWVudCM4MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNi4wMi4wMCNJbXBvcnQgcGxhbm5pbmcjODAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTYuMDMuMDAjRXhwb3J0IHByb2plY3Rpb25zIzgwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE1LjE2LjA0LjAwI0ltcG9ydCBwcm9jdXJlbWVudCBzZXJ2aWNlcyM4MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNi4wMC4wMC4wMCNCdXNpbmVzcyBhZG1pbmlzdHJhdGlvbiBzZXJ2aWNlcyM4MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNS4wMC4wMCNNYW5hZ2VtZW50IHN1cHBvcnQgc2VydmljZXMjODAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDEuMDAjT2ZmaWNlIGFkbWluaXN0cmF0aW9uIG9yIHNlY3JldGFyaWFsIHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjAyLjAwI01lZXRpbmcgcGxhbm5pbmcgc2VydmljZXMjODAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDMuMDAjS2V5Ym9hcmQgZW50cnkgc2VydmljZXMjODAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDQuMDAjQ2xlcmljYWwgc2VydmljZXMjODAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDUuMDAjRmxlZXQgbWFuYWdlbWVudCBzZXJ2aWNlcyM4MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNS4wNi4wMCNEYXRhIGFyY2hpdmluZyBzZXJ2aWNlcyM4MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNS4wNy4wMCNBdWRpbyB2aXN1YWwgc2VydmljZXMjODAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTYuMDAuMDAjQnVzaW5lc3MgZmFjaWxpdGllcyBvdmVyc2lnaHQjODAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTYuMDEuMDAjUHJvcGVydHkgbWFuYWdtZW50IHNlcnZpY2VzIzgwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzgxLjAwLjAwLjAwLjAwI0VuZ2luZWVyaW5nIGFuZCBSZXNlYXJjaCBhbmQgVGVjaG5vbG9neSBCYXNlZCBTZXJ2aWNlcyM4MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4wMC4wMC4wMCNQcm9mZXNzaW9uYWwgZW5naW5lZXJpbmcgc2VydmljZXMjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDAuMDAjQ2l2aWwgZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDEuMDAjV2VsbCBlbmdpbmVlcmluZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4wMi4wMCNUZWNobmljYWwgZHJhd2luZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4wMy4wMCNIYXJib3Igb3Igd2F0ZXIgcG9ydHMgZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDUuMDAjU3RydWN0dXJhbCBlbmdpbmVlcmluZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4wNi4wMCNOYXZhbCBhcmNoaXRlY3R1cmUjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDcuMDAjRGFtIGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjA4LjAwI0FyY2hpdGVjdHVyYWwgZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDkuMDAjQWlycG9ydCBlbmdpbmVlcmluZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4xMC4wMCNIaWdod2F5IGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjExLjAwI1JhaWx3YXkgZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTYuMDAuMDAjTWVjaGFuaWNhbCBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNi4wMS4wMCNNZWNoYW5pY2FsIGRyYXdpbmcjODEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTYuMDIuMDAjTWVjaGFuaWNhbCBwcm9kdWN0IGVuY2xvc3VyZXMgZGVzaWduIzgxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE2LjAzLjAwI01hY2hpbmUgdG9vbCBkZXNpZ24jODEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTYuMDQuMDAjUG93ZXIgdHJhbnNtaXNzaW9uIGRlc2lnbiM4MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNy4wMC4wMCNFbGVjdHJpY2FsIGFuZCBlbGVjdHJvbmljIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjE3LjAxLjAwI0VsZWN0cmljYWwgZW5naW5lZXJpbmcgc2VydmljZXMjODEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTcuMDIuMDAjRWxlY3Ryb25pYyBjaXJjdWl0IGRlc2lnbiM4MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4MS4xMC4xOC4wMC4wMCNDaGVtaWNhbCBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4xOC4wMS4wMCNQbGFzdGljcyBlbmdpbmVlcmluZyM4MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMC4xOS4wMC4wMCNPaWwgYW5kIGdhcyBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4xOS4wMS4wMCNEcmlsbGluZyBlbmdpbmVlcmluZyBmb3Igb2lsIG9yIGdhcyM4MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xOS4wMi4wMCNQcm9kdWN0aW9uIGVuZ2luZWVyaW5nIGZvciBvaWwgb3IgZ2FzIzgxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE5LjAzLjAwI1Jlc2Vydm9pciBlbmdpbmVlcmluZyBmb3Igb2lsIG9yIGdhcyM4MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMC4wMC4wMCNNaW5pbmcgZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjAuMDEuMDAjSHlkcmF1bGljIG1pbmluZyM4MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMS4wMC4wMCNPY2VhbiBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMS4wMS4wMCNDb2FzdGFsIGVuZ2luZWVyaW5nIzgxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIyLjAwLjAwI1RyYW5zcG9ydGF0aW9uIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIyLjAxLjAwI1RyYWZmaWMgZW5naW5lZXJpbmcjODEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjIuMDIuMDAjVXJiYW4gdHJhbnNwb3J0IG5ldHdvcmsjODEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjIuMDMuMDAjSW5sYW5kIHdhdGVyd2F5cyM4MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMy4wMC4wMCNBZXJvbmF1dGljYWwgZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjMuMDEuMDAjQXZpb25pY3MgZGVzaWduIzgxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzgxLjEwLjI0LjAwLjAwI0F2aW9uaWNzIGRlc2lnbiM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4wMC4wMC4wMCNDb21wdXRlciBzZXJ2aWNlcyM4MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wMC4wMCNTb2Z0d2FyZSBvciBoYXJkd2FyZSBlbmdpbmVlcmluZyM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wMS4wMCNNYWluZnJhbWUgc29mdHdhcmUgYXBwbGljYXRpb25zIGRlc2lnbiM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wMi4wMCNQZXJzb25hbCBjb21wdXRlciAoUEMpIGFwcGxpY2F0aW9uIGRlc2lnbiM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wMy4wMCNTeXN0ZW1zIGludGVncmF0aW9uIGRlc2lnbiM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wNC4wMCNBcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBzZXJ2aWNlcyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wNS4wMCNPcGVyYXRpbmcgc3lzdGVtIHByb2dyYW1taW5nIHNlcnZpY2VzIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjA2LjAwI0NsaWVudCBvciBzZXJ2ZXIgcHJvZ3JhbW1pbmcgc2VydmljZXMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDcuMDAjRVJQIG9yIGRhdGFiYXNlIGFwcGxpY2F0aW9ucyBwcm9ncmFtbWluZyBzZXJ2aWNlcyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wOC4wMCNBcHBsaWNhdGlvbiBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlcyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wOS4wMCNJbnRlcm5ldCBvciBpbnRyYW5ldCBjbGllbnQgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgc2VydmljZXMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMTAuMDAjSW50ZXJuZXQgb3IgaW50cmFuZXQgc2VydmVyIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHNlcnZpY2VzIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjExLjAwI0h1bWFuIHJlc291cmNlcyBwcm9kdWN0aXZpdHkgYXVkaXRzIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjAwLjAwI0NvbXB1dGVyIHByb2dyYW1tZXJzIzgxLjExLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjAxLjAwI1Byb2dyYW1taW5nIGZvciBWaXN1YWwgQmFzaWMjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDIuMDAjUHJvZ3JhbW1pbmcgZm9yIEphdmEjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDMuMDAjUHJvZ3JhbW1pbmcgZm9yIEhUTUwjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDQuMDAjUHJvZ3JhbW1pbmcgZm9yIEFMR09MIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjA1LjAwI1Byb2dyYW1taW5nIGZvciBBc3NlbWJsZXIjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDYuMDAjUHJvZ3JhbW1pbmcgZm9yIEJhc2ljIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjA3LjAwI1Byb2dyYW1taW5nIGZvciBDIG9yIEMrKyM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wOC4wMCNQcm9ncmFtbWluZyBmb3IgQ09CT0wjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDkuMDAjUHJvZ3JhbW1pbmcgZm9yIEZPUlRSQU4jODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMTAuMDAjUHJvZ3JhbW1pbmcgZm9yIFBhc2NhbCM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4xMS4wMCNQcm9ncmFtbWluZyBmb3IgUEwvMSM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4xMi4wMCNQcm9ncmFtbWluZyBvciBQcm9wcmlldGFyeSBMYW5ndWFnZXMjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTcuMDAuMDAjTWFuYWdlbWVudCBpbmZvcm1hdGlvbiBzeXN0ZW1zIChNSVMpIzgxLjExLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjE3LjAxLjAwI1dpZGUgYXJlYSBuZXR3b3JrIGNvbW11bmljYXRpb25zIGRlc2lnbiM4MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNy4wMi4wMCNMb2NhbCBhcmVhIG5ldHdvcmsgY29tbXVuaWNhdGlvbnMgZGVzaWduIzgxLjExLjE3LjAwLjAwCi11bnNwc2M3IzgxLjExLjE3LjAzLjAwI0VsZWN0cm9uaWMgZGF0YSBpbnRlcmNoYW5nZSAoRURJKSBkZXNpZ24jODEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTcuMDQuMDAjRGF0YWJhc2UgZGVzaWduIzgxLjExLjE3LjAwLjAwCi11bnNwc2M3IzgxLjExLjE3LjA1LjAwI1N5c3RlbXMgYXJjaGl0ZWN0dXJlIzgxLjExLjE3LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjAwLjAwI1N5c3RlbSBhZG1pbmlzdHJhdG9ycyM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wMS4wMCNDb21wdXRlciBvciBuZXR3b3JrIG9yIGludGVybmV0IHNlY3VyaXR5IzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjAyLjAwI01haW5mcmFtZSBhZG1pbmlzdHJhdGlvbiBzZXJ2aWNlcyM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wMy4wMCNMb2NhbCBhcmVhIG5ldHdvcmsgKExBTikgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wNC4wMCNXaWRlIGFyZWEgbmV0d29yayAoV0FOKSBtYWludGVuYW5jZSBvciBzdXBwb3J0IzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjA1LjAwI1Byb3ByaWV0YXJ5IG9yIGxpY2Vuc2VkIHN5c3RlbXMgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wNi4wMCNEYXRhYmFzZSBhbmFseXNpcyM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wNy4wMCNEYXRhIHN0b3JhZ2UjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDguMDAjU3lzdGVtcyBhbmFseXNpcyM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wOS4wMCNTeXN0ZW0gaW5zdGFsbGF0aW9uIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjEwLjAwI1NvZnR3YXJlIGNvZGluZyM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4xMS4wMCNUZWNobmljYWwgc3VwcG9ydCBvciBoZWxwIGRlc2sgc2VydmljZXMjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTIuMDAjQ29tcHV0ZXIgaGFyZHdhcmUgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4xMy4wMCNDb21wdXRlciBzb2Z0d2FyZSBtYWludGVuYW5jZSBvciBzdXBwb3J0IzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjE0LjAwI0NvIGxvY2F0aW9uIHNlcnZpY2UjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTUuMDAjUHJpbnRlciBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBzZXJ2aWNlcyM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4xNi4wMCNNYWluZnJhbWUgY29tcHV0ZXIgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4xNy4wMCNUZWxlY29tIGVxdWlwbWVudCBtYWludGVuYW5jZSBvciBzdXBwb3J0IzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE5LjAwLjAwI0luZm9ybWF0aW9uIHJldHJpZXZhbCBzeXN0ZW1zIzgxLjExLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjE5LjAxLjAwI0RhdGFiYXNlIGluZm9ybWF0aW9uIHJldHJpZXZhbCM4MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOS4wMi4wMCNPbiBsaW5lIGRhdGFiYXNlIGluZm9ybWF0aW9uIHJldHJpZXZhbCM4MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOS4wMy4wMCNSZW1vdGUgZGF0YWJhc2UgaW5mb3JtYXRpb24gcmV0cmlldmFsIzgxLjExLjE5LjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjAwLjAwI0RhdGEgc2VydmljZXMjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjAuMDEuMDAjT24gbGluZSBkYXRhIHByb2Nlc3NpbmcjODEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjAuMDIuMDAjRGF0YSBwcm9jZXNzaW5nIG9yIHByZXBhcmF0aW9uIHNlcnZpY2VzIzgxLjExLjIwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjAzLjAwI0RhdGEgY2VudGVyIHNlcnZpY2VzIzgxLjExLjIwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjA0LjAwI0Rpc2FzdGVyIHJlY292ZXJ5IHNlcnZpY2VzIzgxLjExLjIwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjA1LjAwI0RvY3VtZW50IHNjYW5uaW5nIHNlcnZpY2UjODEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjAuMDYuMDAjRGF0YSBzdG9yYWdlIHNlcnZpY2UjODEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjAuMDcuMDAjQ29udGVudCBvciBkYXRhIHN0YW5kYXJkaXphdGlvbiBzZXJ2aWNlcyM4MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMS4wMC4wMCNJbnRlcm5ldCBzZXJ2aWNlcyM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMS4wMS4wMCNJbnRlcm5ldCBzZXJ2aWNlIHByb3ZpZGVycyAoSVNQKSM4MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMS4wMi4wMCNFbGVjdHJvbmljIG1haWwgc2VydmljZSBwcm92aWRlciM4MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMS4wMy4wMCNXb3JsZCB3aWRlIHdlYiAoV1dXKSBzaXRlIGRlc2lnbiBzZXJ2aWNlcyM4MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMS4wNC4wMCNXZWIgc2VhcmNoIGVuZ2luZSBwcm92aWRlcnMjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDUuMDAjV29ybGQgd2lkZSB3ZWIgKFdXVykgc2l0ZSBvcGVyYXRpb24gKGhvc3QpIHNlcnZpY2VzIzgxLjExLjIxLjAwLjAwCi11bnNwc2M3IzgxLjExLjIxLjA2LjAwI0FwcGxpY2F0aW9uIHNlcnZpY2UgcHJvdmlkZXJzIzgxLjExLjIxLjAwLjAwCi11bnNwc2M3IzgxLjExLjIxLjA3LjAwI0ludGVybmV0IGRvbWFpbiBuYW1lcyM4MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMi4wMC4wMCNTb2Z0d2FyZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMi4wMS4wMCNNYWludGVuYW5jZSBhbmQgc3VwcG9ydCBmZWVzIzgxLjExLjIyLjAwLjAwCi11bnNwc2M3IzgxLjExLjIyLjAyLjAwI1NvZnR3YXJlIHBhdGNoZXMgb3IgdXBncmFkZXMjODEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjODEuMTIuMDAuMDAuMDAjRWNvbm9taWNzIzgxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEyLjE1LjAwLjAwI0Vjb25vbWljIGFuYWx5c2lzIzgxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEyLjE1LjAxLjAwI01hY3JvIGVjb25vbWljIGFuYWx5c2lzIzgxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE1LjAyLjAwI01pY3JvIGVjb25vbWljIGFuYWx5c2lzIzgxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE1LjAzLjAwI0Vjb25vbWV0cmljcyM4MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNS4wNC4wMCNFY29ub21pYyBmb3JlY2FzdHMjODEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTYuMDAuMDAjTW9uZXRhcnkgc3lzdGVtcyBhbmQgaXNzdWVzIzgxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEyLjE2LjAxLjAwI01vbmV0YXJ5IHBvbGljeSM4MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wMi4wMCNNb25ldGFyeSBzeXN0ZW1zIzgxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE2LjAzLjAwI01vbmV0YXJ5IGFuYWx5c2lzIzgxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE2LjA0LjAwI01vbmV0YXJ5IGxpcXVpZGl0eSM4MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wNS4wMCNQcmVjaW91cyBtZXRhbHMgcmVzZXJ2ZXMjODEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTYuMDYuMDAjRm9yZWlnbiBleGNoYW5nZSBjb250cm9sIzgxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE2LjA3LjAwI0N1cnJlbmN5IGV4Y2hhbmdlIG1hcmtldHMjODEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTMuMDAuMDAuMDAjU3RhdGlzdGljcyM4MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMy4xNS4wMC4wMCNNZXRob2RvbG9neSBhbmQgYW5hbHlzaXMjODEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTMuMTUuMDEuMDAjRmFjdG9yIGFuYWx5c2lzIzgxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEzLjE1LjAyLjAwI011bHRpdmFyaWF0ZSBhbmFseXNpcyM4MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMy4xNS4wMy4wMCNSZWdyZXNzaW9uIGFuYWx5c2lzIzgxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEzLjE1LjA0LjAwI1NhbXBsaW5nIHN1cnZleXMjODEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTMuMTUuMDUuMDAjVGltZSBzZXJpZXMgYW5hbHlzaXMjODEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTQuMDAuMDAuMDAjTWFudWZhY3R1cmluZyB0ZWNobm9sb2dpZXMjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTUuMDAuMDAjUXVhbGl0eSBjb250cm9sIzgxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjAxLjAwI01hdGVyaWFscyB0ZXN0aW5nIzgxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjAyLjAwI01hdGVyaWFscyBzeW50aGVzaXMjODEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTUuMDMuMDAjTWF0ZXJpYWxzIGluc3BlY3Rpb24jODEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTUuMDQuMDAjRXF1aXBtZW50IHRlc3Qgb3IgY2FsaWJyYXRpb24jODEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTUuMDUuMDAjUHJvZHVjdGlvbiBzdGFuZGFyZHMgZGV2ZWxvcG1lbnQjODEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTUuMDYuMDAjUHJvZHVjdCB0ZXN0aW5nIzgxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE2LjAwLjAwI1N1cHBseSBjaGFpbiBtYW5hZ2VtZW50IzgxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgxLjE0LjE2LjAxLjAwI0xvZ2lzdGljcyM4MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wMi4wMCNUcmFuc2l0IGFuYWx5c2lzIzgxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE2LjAzLjAwI1RyYW5zcG9ydCBmaW5hbmNlIG9yIGVjb25vbWljcyM4MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wNC4wMCNUcmFuc3BvcnQgZmFjaWxpdGF0aW9uIzgxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE2LjA1LjAwI1RyYW5zcG9ydCBpbmZyYXN0cnVjdHVyZSM4MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wNi4wMCNUcmFuc3BvcnQgcGxhbm5pbmcjODEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTcuMDAuMDAjUHJvZHVjdGlvbiBwbGFubmluZyBhbmQgY29udHJvbCM4MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNy4wMS4wMCNQcm9kdWN0aW9uIHBsYW5uaW5nIzgxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE3LjAyLjAwI1Byb2R1Y3Rpb24gY29udHJvbCM4MS4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNy4wMy4wMCNQcm9kdWN0aW9uIHNjaGVkdWxpbmcjODEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTcuMDQuMDAjUHJvZHVjdGlvbiBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gb3IgYW5hbHlzaXMgc2VydmljZXMjODEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDAuMDAjRmFjaWxpdGllcyBtYW5hZ2VtZW50IzgxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgxLjE0LjE4LjAxLjAwI1NhZmV0eSBvciByaXNrIGFuYWx5c2lzIzgxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE4LjAyLjAwI0luZHVzdHJpYWwgaHlnaWVuZSBvciB2ZW50aWxhdGlvbiM4MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wMy4wMCNBY291c3RpY3Mgb3Igbm9pc2UgY29udHJvbCM4MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wNC4wMCNFcXVpcG1lbnQgaW5zcGVjdGlvbiBzZXJ2aWNlIzgxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE4LjA1LjAwI0J1aWxkaW5nIGluc3BlY3Rpb24gc2VydmljZSM4MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wNi4wMCNQb3dlciBsaW5lIGluc3BlY3Rpb24gc2VydmljZSM4MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wNy4wMCNQbHVtYmluZyBvciBzZXdlciBpbnNwZWN0aW9uIHNlcnZpY2UjODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTUuMDAuMDAuMDAjRWFydGggc2NpZW5jZSBzZXJ2aWNlcyM4MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNS4wMC4wMCNNZXRlb3JvbG9neSM4MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNS4wMS4wMCNDbGltYXRvbG9neSM4MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNS4wMi4wMCNNZXRlb3JvbG9naWNhbCBzZXJ2aWNlcyM4MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNS4wMy4wMCNIeWRyb21ldGVvcm9sb2d5IzgxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE2LjAwLjAwI0NhcnRvZ3JhcGh5IzgxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzgxLjE1LjE2LjAxLjAwI01hcHBpbmcjODEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTYuMDIuMDAjTWFwIHByb2R1Y3Rpb24jODEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTYuMDMuMDAjUGhvdG9ncmFtbWV0cnkjODEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTYuMDQuMDAjTGFuZCBzdXJ2ZXlpbmcjODEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTcuMDAuMDAjR2VvbG9neSM4MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNy4wMS4wMCNQaG90b2dlb2xvZ3kjODEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTcuMDIuMDAjU3RyYXRpZ3JhcGhpYyBnZW9sb2d5IzgxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE3LjAzLjAwI0dlb2xvZ2ljYWwgc3VydmV5cyM4MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNy4wNC4wMCNHZW9sb2dpY2FsIGV4cGxvcmF0aW9uIzgxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE3LjA1LjAwI0FyY2hhZW9sb2dpY2FsIHNlcnZpY2VzIzgxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE4LjAwLjAwI09jZWFub2dyYXBoeSBhbmQgaHlkcm9sb2d5IzgxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzgxLjE1LjE4LjAxLjAwI09jZWFub2dyYXBoaWMgc3VydmV5IzgxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE4LjAyLjAwI0VzdHVhcmluZSBvY2Vhbm9ncmFwaHkjODEuMTUuMTguMDAuMDAKLXVuc3BzYzcjODEuMTUuMTguMDMuMDAjUGh5c2ljYWwgb2NlYW5vZ3JhcGh5IzgxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE4LjA0LjAwI0h5ZHJvbG9naWNhbCBzdXJ2ZXlzIzgxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE4LjA1LjAwI0JhdGh5bWV0cmljIHN1cnZleXMjODEuMTUuMTguMDAuMDAKLXVuc3BzYzcjODEuMTUuMTguMDYuMDAjVW5kZXJ3YXRlciBleHBsb3JhdGlvbiM4MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOS4wMC4wMCNHZW9waHlzaWNzIzgxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzgxLjE1LjE5LjAxLjAwI0dlb3BoeXNpY2FsIHN1cnZleXMjODEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTkuMDIuMDAjR2VvcGh5c2ljYWwgZXhwbG9yYXRpb24jODEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTkuMDMuMDAjR2VvcGh5c2ljYWwgcGhvdG8gaW50ZXJwcmV0YXRpb24jODEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTkuMDQuMDAjQWVybyBtYWduZXRpYyBnZW9waHlzaWNzIzgxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzgyLjAwLjAwLjAwLjAwI0VkaXRvcmlhbCBhbmQgRGVzaWduIGFuZCBHcmFwaGljIGFuZCBGaW5lIEFydCBTZXJ2aWNlcyM4Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMC4wMC4wMC4wMCNBZHZlcnRpc2luZyM4Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wMC4wMCNQcmludCBhZHZlcnRpc2luZyM4Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wMS4wMCNCaWxsYm9hcmQgYWR2ZXJ0aXNpbmcjODIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDIuMDAjUG9zdGVyIGFkdmVydGlzaW5nIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjAzLjAwI01hZ2F6aW5lIGFkdmVydGlzaW5nIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjA0LjAwI05ld3NwYXBlciBhZHZlcnRpc2luZyM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wNS4wMCNIYW5kYmlsbCBvciBjb3Vwb24gYWR2ZXJ0aXNpbmcjODIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDYuMDAjVHJhbnNpdCBhZHZlcnRpc2luZyBzZXJ2aWNlcyM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wNy4wMCNTaG9wcGluZyBuZXdzIG9yIGFkdmVydGlzaW5nIG9yIGRpc3RyaWJ1dGlvbiBzZXJ2aWNlIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjA4LjAwI1llbGxvdyAgcGFnZXMgYWR2ZXJ0aXNpbmcjODIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTYuMDAuMDAjQnJvYWRjYXN0IGFkdmVydGlzaW5nIzgyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEwLjE2LjAxLjAwI1JhZGlvIGFkdmVydGlzaW5nIzgyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE2LjAyLjAwI1RlbGV2aXNpb24gYWR2ZXJ0aXNpbmcjODIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTYuMDMuMDAjSW50ZXJuZXQgYWR2ZXJ0aXNpbmcjODIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTcuMDAuMDAjQWVyaWFsIGFkdmVydGlzaW5nIzgyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEwLjE3LjAxLjAwI0Jhbm5lciBhZHZlcnRpc2luZyBzZXJ2aWNlcyM4Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNy4wMi4wMCNTa3l3cml0aW5nIGFkdmVydGlzaW5nIHNlcnZpY2VzIzgyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE4LjAwLjAwI0FkdmVydGlzaW5nIGFnZW5jeSBzZXJ2aWNlcyM4Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xOC4wMS4wMCNBZHZlcnRpc2luZyBjYW1wYWlnbiBzZXJ2aWNlcyM4Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4wMC4wMC4wMCNXcml0aW5nIGFuZCB0cmFuc2xhdGlvbnMjODIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTUuMDAuMDAjVGVjaG5pY2FsIHdyaXRpbmcjODIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTUuMDEuMDAjSW5zdHJ1Y3Rpb24gd3JpdGluZyBzZXJ2aWNlcyM4Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNS4wMi4wMCNNYW51YWwgd3JpdGluZyBzZXJ2aWNlcyM4Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNS4wMy4wMCNBY2FkZW1pYyBvciBzY2llbnRpZmljIGFydGljbGUgd3JpdGluZyM4Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNi4wMC4wMCNOb24gdGVjaG5pY2FsIHdyaXRpbmcjODIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTYuMDEuMDAjTGV0dGVyIHdyaXRpbmcgc2VydmljZXMjODIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTYuMDIuMDAjUmVzdW1lIHdyaXRpbmcgc2VydmljZXMjODIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTYuMDMuMDAjQ291cnQgcmVwb3J0aW5nIHNlcnZpY2VzIzgyLjExLjE2LjAwLjAwCi11bnNwc2M3IzgyLjExLjE2LjA0LjAwI1RyYW5zY3JpYmluZyBzZXJ2aWNlcyM4Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNy4wMC4wMCNDcmVhdGl2ZSB3cml0aW5nIzgyLjExLjAwLjAwLjAwCi11bnNwc2M3IzgyLjExLjE3LjAxLjAwI0FydGljbGUgd3JpdGVycyBzZXJ2aWNlcyM4Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNy4wMi4wMCNCb29rIGF1dGhvcnMgc2VydmljZXMjODIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTcuMDMuMDAjUG9ldHJ5IGF1dGhvcnMgc2VydmljZXMjODIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTcuMDQuMDAjQ29weXdyaXRpbmcjODIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTcuMDUuMDAjU3BlZWNoIHdyaXRpbmcjODIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTguMDAuMDAjRWRpdG9yaWFsIGFuZCBzdXBwb3J0IHNlcnZpY2VzIzgyLjExLjAwLjAwLjAwCi11bnNwc2M3IzgyLjExLjE4LjAxLjAwI0VkaXRpbmcgc2VydmljZXMjODIuMTEuMTguMDAuMDAKLXVuc3BzYzcjODIuMTEuMTguMDIuMDAjRmFjdCBjaGVja2luZyBzZXJ2aWNlcyM4Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOC4wMy4wMCNQcm9vZnJlYWRpbmcgc2VydmljZXMjODIuMTEuMTguMDAuMDAKLXVuc3BzYzcjODIuMTEuMTguMDQuMDAjV3JpdHRlbiB0cmFuc2xhdGlvbiBzZXJ2aWNlcyM4Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOS4wMC4wMCNOZXdzIGFuZCBwdWJsaWNpdHkgc2VydmljZXMjODIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTkuMDEuMDAjUHJlc3MgcmVsZWFzZSBzZXJ2aWNlcyM4Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOS4wMi4wMCNTcGVjaWFsIGludGVyZXN0IG5ld3NsZXR0ZXIgc2VydmljZXMjODIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTkuMDMuMDAjTmV3cyBhZ2VuY3kgd2lyZSBzZXJ2aWNlcyM4Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOS4wNC4wMCNOZXdzcGFwZXIgb3IgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWwgZGVsaXZlcnkgc2VydmljZXMjODIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTIuMDAuMDAuMDAjUmVwcm9kdWN0aW9uIHNlcnZpY2VzIzgyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjAwLjAwI1ByaW50aW5nIzgyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjAxLjAwI1BsYW5uaW5nIG9yIGxheW91dCBvZiBncmFwaGljIHByb2R1Y3Rpb24jODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDIuMDAjVHlwZXNldHRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDMuMDAjRGlnaXRhbCBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wNC4wMCNMZXR0ZXJwcmVzcyBvciBzY3JlZW4gcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDUuMDAjUHJvbW90aW9uYWwgb3IgYWR2ZXJ0aXNpbmcgcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDYuMDAjUHVibGljYXRpb24gcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDcuMDAjU3RhdGlvbmVyeSBvciBidXNpbmVzcyBmb3JtIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjA4LjAwI1dyYXAgb3IgdGFnIG9yIGxhYmVsIG9yIHNlYWwgb3IgYmFnIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjA5LjAwI1NlY3VyaXR5IG9yIGZpbmFuY2lhbCBpbnN0cnVtZW50cyBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4xMC4wMCNUZXh0aWxlIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjExLjAwI1RlY2huaWNhbCBtYW51YWwgYW5kIGluc3RydWN0aW9uIHNoZWV0IHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjEyLjAwI0VtYm9zc2luZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNi4wMC4wMCNFbmdyYXZpbmcjODIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTYuMDEuMDAjQ3VycmVuY3kgZW5ncmF2aW5nIzgyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE2LjAyLjAwI0VuZ3JhdmVkIHJvbGwgcHJpbnRpbmcjODIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTYuMDMuMDAjTWV0YWwgcGxhdGUgZW5ncmF2aW5nIzgyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE3LjAwLjAwI1Bob3RvY29weWluZyM4Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNy4wMS4wMCNCbGFjayBhbmQgd2hpdGUgY29weSBvciBjb2xsYXRpbmcgc2VydmljZXMjODIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTcuMDIuMDAjQ29sb3IgY29weSBvciBjb2xsYXRpbmcgc2VydmljZXMjODIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTguMDAuMDAjUHVibGlzaGluZyM4Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOC4wMS4wMCNUZXh0Ym9vayBvciByZXNlYXJjaCBwdWJsaXNoaW5nIzgyLjEyLjE4LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE4LjAyLjAwI0F1dGhvciBmdW5kZWQgcHVibGlzaGluZyBzZXJ2aWNlcyM4Mi4xMi4xOC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOS4wMC4wMCNCb29rYmluZGluZyM4Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOS4wMS4wMCNUaHJlYWQgc3RpdGNoIGJvb2tiaW5kaW5nIzgyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE5LjAyLjAwI1NwaXJhbCBiaW5kaW5nIzgyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE5LjAzLjAwI0dsdWVkIGJpbmRpbmcjODIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTkuMDQuMDAjQ29tYiBvciBjbGFtcCB0eXBlIGJpbmRpbmcjODIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTkuMDUuMDAjQmluZGluZyByZXN0b3JhdGlvbiBvciByZXBhaXIjODIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTkuMDYuMDAjQnJvbnppbmcgb3IgZ2lsZGluZyBvciBlZGdpbmcgb3IgZGVja2xpbmcjODIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTMuMDAuMDAuMDAjUGhvdG9ncmFwaGljIHNlcnZpY2VzIzgyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEzLjE1LjAwLjAwI0ZpbG0gcHJvY2Vzc2luZyBzZXJ2aWNlcyM4Mi4xMy4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNS4wMS4wMCNTdGlsbCBmaWxtIHByb2Nlc3Npbmcgb3IgcmVwcm9kdWN0aW9uIzgyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEzLjE1LjAyLjAwI01vdGlvbiBwaWN0dXJlIGZpbG0gcHJvY2Vzc2luZyBvciByZXByb2R1Y3Rpb24jODIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTUuMDMuMDAjTWljcm9maWNoZSBzZXJ2aWNlcyM4Mi4xMy4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNS4wNC4wMCNDb2xvciBzZXBhcmF0aW9uIzgyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEzLjE2LjAwLjAwI1Bob3RvZ3JhcGhlcnMgYW5kIGNpbmVtYXRvZ3JhcGhlcnMjODIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTYuMDEuMDAjQWVyaWFsIHBob3RvZ3JhcGh5IHNlcnZpY2VzIzgyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEzLjE2LjAyLjAwI01vdGlvbiBwaWN0dXJlIGNpbmVtYXRvZ3JhcGh5IzgyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEzLjE2LjAzLjAwI1ZpZGVvIHByb2R1Y3Rpb24gc2VydmljZXMjODIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTYuMDQuMDAjU3R1ZGlvIHBob3RvZ3JhcGh5IHNlcnZpY2VzIG9yIHN0aWxsIHBob3RvZ3JhcGhzIzgyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgyLjE0LjAwLjAwLjAwI0dyYXBoaWMgZGVzaWduIzgyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjE0LjE1LjAwLjAwI0FydCBkZXNpZ24gc2VydmljZXMjODIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTUuMDEuMDAjTGF5b3V0IG9yIGdyYXBoaWNzIGVkaXRpbmcgc2VydmljZXMjODIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTUuMDIuMDAjQXJ0IGRlc2lnbiBvciBncmFwaGljcyM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wMy4wMCNQaG90b2NvbXBvc2l0aW9uIzgyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE0LjE1LjA0LjAwI0NoYXJ0IG9yIGdyYXBoIGRlc2lnbiBzZXJ2aWNlcyM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wNS4wMCNDb21wdXRlciBnZW5lcmF0ZWQgZGVzaWduIHNlcnZpY2VzIzgyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE0LjE1LjA2LjAwI1BhY2thZ2UgZGVzaWduIHNlcnZpY2VzIzgyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE0LjE1LjA3LjAwI1NpbGtzY3JlZW4gZGVzaWduIHNlcnZpY2VzIzgyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE0LjE2LjAwLjAwI0dyYXBoaWMgZGlzcGxheSBzZXJ2aWNlcyM4Mi4xNC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNi4wMS4wMCNQaG90b2dyYXBoaWMgb3IgcGljdHVyZSBtb3VudGluZyBvciBmcmFtaW5nIHNlcnZpY2VzIzgyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgyLjE0LjE2LjAyLjAwI0FydGljbGUgZGlzcGxheSBhcnJhbmdlbWVudCM4Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xNS4wMC4wMC4wMCNQcm9mZXNzaW9uYWwgYXJ0aXN0cyBhbmQgcGVyZm9ybWVycyM4Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wMC4wMCNWaXN1YWwgYXJ0IHNlcnZpY2VzIzgyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjAxLjAwI1BhaW50ZXJzIHNlcnZpY2VzIzgyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjAyLjAwI0xpdGhvZ3JhcGhlcnMgc2VydmljZXMjODIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDMuMDAjQ2FydG9vbmlzdHMgc2VydmljZXMjODIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDQuMDAjU2N1bHB0b3JzIHNlcnZpY2VzIzgyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjA1LjAwI0NlcmFtaWNzIG1ha2VycyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wNi4wMCNHbGFzcyBibG93ZXJzIHNlcnZpY2VzIzgyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjA3LjAwI1RleHRpbGUgc3Bpbm5lcnMgb3IgbG9vbWVycyBvciB3ZWF2ZXJzIHNlcnZpY2VzIzgyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjA4LjAwI1RheGlkZXJteSBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNi4wMC4wMCNDaXJjdXMgcGVyZm9ybWVycyM4Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNi4wMS4wMCNBbmltYWwgdHJhaW5lcnMgc2VydmljZXMjODIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTYuMDIuMDAjQWNyb2JhdHMgc2VydmljZXMjODIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTYuMDMuMDAjTWFnaWNpYW5zIHNlcnZpY2VzIzgyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE2LjA0LjAwI0Nsb3ducyBzZXJ2aWNlcyM4Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNy4wMC4wMCNQZXJmb3JtaW5nIGFydHMgcHJvZmVzc2lvbmFscyM4Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNy4wMS4wMCNBY3Rpbmcgc2VydmljZXMjODIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTcuMDIuMDAjQ29tZWRpYW5zIHNlcnZpY2VzIzgyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE3LjAzLjAwI0RhbmNlcnMgc2VydmljZXMjODIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTcuMDQuMDAjTXVzaWNpYW5zIHNlcnZpY2VzIzgyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE3LjA1LjAwI1ZvY2FsaXN0cyBzZXJ2aWNlcyM4Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNy4wNi4wMCNDaG9yZW9ncmFwaGljIHNlcnZpY2VzIzgyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgzLjAwLjAwLjAwLjAwI1B1YmxpYyBVdGlsaXRpZXMgYW5kIFB1YmxpYyBTZWN0b3IgUmVsYXRlZCBTZXJ2aWNlcyM4My4wMC4wMC4wMC4wMAotdW5zcHNjNyM4My4xMC4wMC4wMC4wMCNVdGlsaXRpZXMjODMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDAuMDAjV2F0ZXIgYW5kIHNld2VyIHV0aWxpdGllcyM4My4xMC4wMC4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wMS4wMCNTdXBwbHkgb2Ygd2F0ZXIjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDIuMDAjV2F0ZXIgcmVzb3VyY2UgbWFuYWdlbWVudCM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wMy4wMCNXYXRlciBxdWFsaXR5IGNvbnRyb2wgbWFuYWdlbWVudCM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wNC4wMCNXYXRlciBkaXN0cmlidXRpb24gbWFuYWdlbWVudCM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wNS4wMCNXYXRlciBwb2xpY3kgYWR2aXNvcnkgc2VydmljZXMjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDYuMDAjV2F0ZXIgdHJlYXRtZW50IHNlcnZpY2VzIzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjA3LjAwI0Rlc2FsaW5hdGlvbiBzZXJ2aWNlcyM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wOC4wMCNUb3duIHdhdGVyIzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjA5LjAwI1NlcnZpY2Ugd2F0ZXIjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMTAuMDAjQ2hpbGxlZCB3YXRlciM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNi4wMC4wMCNPaWwgYW5kIGdhcyB1dGlsaXRpZXMjODMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTYuMDEuMDAjU3VwcGx5IG9mIG5hdHVyYWwgZ2FzIzgzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE2LjAyLjAwI1N1cHBseSBvZiBmdWVsIG9pbCM4My4xMC4xNi4wMC4wMAotdW5zcHNjNyM4My4xMC4xNi4wMy4wMCNPaWwgcGlwZWxpbmUgc2VydmljZXMjODMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTYuMDQuMDAjR2FzIHBpcGVsaW5lIHNlcnZpY2VzIzgzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE2LjA1LjAwI0dhcyBmYWNpbGl0eSBjaGFyZ2UjODMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTguMDAuMDAjRWxlY3RyaWMgdXRpbGl0aWVzIzgzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjAxLjAwI1N1cHBseSBvZiBzaW5nbGUgcGhhc2UgZWxlY3RyaWNpdHkjODMuMTAuMTguMDAuMDAKLXVuc3BzYzcjODMuMTAuMTguMDIuMDAjU3VwcGx5IG9mIHR3byBwaGFzZSBlbGVjdHJpY2l0eSM4My4xMC4xOC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wMy4wMCNTdXBwbHkgb2YgdGhyZWUgcGhhc2UgZWxlY3RyaWNpdHkjODMuMTAuMTguMDAuMDAKLXVuc3BzYzcjODMuMTAuMTguMDQuMDAjRWxlY3RyaWMgcG93ZXIgdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzgzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjA1LjAwI0luZHVzdHJpYWwgZWxlY3RyaWMgcG93ZXIgZGlzdHJpYnV0aW9uIzgzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjA2LjAwI1J1cmFsIGVsZWN0cmljYWwgcG93ZXIgZGlzdHJpYnV0aW9uIzgzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjA3LjAwI011bmljaXBhbCBlbGVjdHJpYyBwb3dlciBkaXN0cmlidXRpb24jODMuMTAuMTguMDAuMDAKLXVuc3BzYzcjODMuMTAuMTkuMDAuMDAjRW5lcmd5IGNvbnNlcnZhdGlvbiM4My4xMC4wMC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOS4wMS4wMCNFbmVyZ3kgY29uc2VydmF0aW9uIHByb2dyYW1zIzgzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE5LjAyLjAwI0VuZXJneSB1c2UgcmVkdWN0aW9uIG1lYXN1cmVzIzgzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzgzLjEwLjIwLjAwLjAwI0Z1bmVyYWwgc2VydmljZXMjODMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTAuMjAuMDEuMDAjR3JhdmUgZGlnZ2luZyM4My4xMC4yMC4wMC4wMAotdW5zcHNjNyM4My4xMS4wMC4wMC4wMCNUZWxlY29tbXVuaWNhdGlvbnMgbWVkaWEgc2VydmljZXMjODMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDAuMDAjTG9jYWwgYW5kIGxvbmcgZGlzdGFuY2UgdGVsZXBob25lIGNvbW11bmljYXRpb25zIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjAxLjAwI0xvY2FsIHRlbGVwaG9uZSBzZXJ2aWNlIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjAyLjAwI0xvbmcgZGlzdGFuY2UgdGVsZXBob25lIHNlcnZpY2VzIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjAzLjAwI1BheSBwaG9uZSBwcm92aWRlciBzZXJ2aWNlcyM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wNC4wMCNQcmUgcGFpZCBwaG9uZSBjYXJkIHNlcnZpY2VzIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjA1LjAwI0RpcmVjdG9yeSBhc3Npc3RhbmNlIHNlcnZpY2VzIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjA2LjAwI0NvbmZlcmVuY2UgY2FsbGluZyBzZXJ2aWNlcyM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wNy4wMCNDYWxsIGNlbnRyZSBidXJlYXUgc2VydmljZXMjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDguMDAjVG9sbCBmcmVlIGluYm91bmQgdGVsZXBob25lIHNlcnZpY2UjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDkuMDAjVGVsZXBob25lIGVxdWlwbWVudCByZXBhaXIgc2VydmljZXMjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTYuMDAuMDAjTW9iaWxlIGNvbW11bmljYXRpb25zIHNlcnZpY2VzIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjE2LjAxLjAwI1RlbGVjb21tdW5pY2F0aW9uIHNpZ25hbCBlbmhhbmNlbWVudCBuZXR3b3JrIHNlcnZpY2VzIzgzLjExLjE2LjAwLjAwCi11bnNwc2M3IzgzLjExLjE2LjAyLjAwI1NhdGVsbGl0ZSBvciBlYXJ0aCBjb21tdW5pY2F0aW9uIHN5c3RlbXMgc2VydmljZXMjODMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTYuMDMuMDAjQ2VsbHVsYXIgdGVsZXBob25lIHNlcnZpY2VzIzgzLjExLjE2LjAwLjAwCi11bnNwc2M3IzgzLjExLjE2LjA0LjAwI1BhZ2luZyBzZXJ2aWNlcyM4My4xMS4xNi4wMC4wMAotdW5zcHNjNyM4My4xMS4xNy4wMC4wMCNGYWNzaW1pbGUgYW5kIHRlbGVncmFwaCBzZXJ2aWNlcyM4My4xMS4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4xNy4wMS4wMCNGYWNzaW1pbGUgdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzgzLjExLjE3LjAwLjAwCi11bnNwc2M3IzgzLjExLjE3LjAyLjAwI1RlbGVncmFwaCB0cmFuc21pc3Npb24gc2VydmljZXMjODMuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTcuMDMuMDAjVGVsZXggdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzgzLjExLjE3LjAwLjAwCi11bnNwc2M3IzgzLjExLjE4LjAwLjAwI1RlbGV2aXNpb24gc2VydmljZXMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTguMDEuMDAjQ2FibGUgdGVsZXZpc2lvbiBzZXJ2aWNlcyM4My4xMS4xOC4wMC4wMAotdW5zcHNjNyM4My4xMS4xOC4wMi4wMCNDbG9zZWQgY2lyY3VpdCB0ZWxldmlzaW9uIHNlcnZpY2VzIzgzLjExLjE4LjAwLjAwCi11bnNwc2M3IzgzLjExLjE4LjAzLjAwI1RlbGV2aXNpb24gYW50ZW5uYSBjb25zdHJ1Y3Rpb24gb3IgcmVudGFsIHNlcnZpY2VzIzgzLjExLjE4LjAwLjAwCi11bnNwc2M3IzgzLjExLjE4LjA0LjAwI1RlbGV2aXNpb24gYnJvYWRjYXN0aW5nIHN0YXRpb24gbWFuYWdlbWVudCM4My4xMS4xOC4wMC4wMAotdW5zcHNjNyM4My4xMS4xOS4wMC4wMCNSYWRpbyBzZXJ2aWNlcyM4My4xMS4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4xOS4wMS4wMCNSYWRpbyBicm9hZGNhc3Rpbmcgc3RhdGlvbiBtYW5hZ2VtZW50IzgzLjExLjE5LjAwLjAwCi11bnNwc2M3IzgzLjExLjE5LjAyLjAwI0FtYXRldXIgcmFkaW8gbmV0d29ya3Mgb3Igc2VydmljZXMjODMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTkuMDMuMDAjU21hbGwgc2NhbGUgcmFkaW8gc3lzdGVtcyM4My4xMS4xOS4wMC4wMAotdW5zcHNjNyM4My4xMS4xOS4wNC4wMCNSYWRpbyBzdHVkaW8gb3IgZXF1aXBtZW50IHNlcnZpY2VzIzgzLjExLjE5LjAwLjAwCi11bnNwc2M3IzgzLjExLjIwLjAwLjAwI0ZpYmVyIHRlbGVjb21tdW5pY2F0aW9ucyBzZXJ2aWNlcyM4My4xMS4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4yMC4wMS4wMCNEYXJrIGZpYmVyIzgzLjExLjIwLjAwLjAwCi11bnNwc2M3IzgzLjExLjIwLjAyLjAwI0RlbnNlIHdhdmVsZW5ndGggZGl2aXNpb24gbXVsdGlwbGV4aW5nIERXRE0jODMuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjAuMDMuMDAjV2F2ZSBkaXZpc2lvbiBtdWx0aXBsZXhpbmcgV0RNIzgzLjExLjIwLjAwLjAwCi11bnNwc2M3IzgzLjExLjIwLjA0LjAwI09jeCBvcHRpY2FsIGNhcnJpZXIgc2VydmljZSM4My4xMS4yMC4wMC4wMAotdW5zcHNjNyM4My4xMS4yMS4wMC4wMCNTd2l0Y2hlZCBkaWFsIHVwIGFuZCBsZWFzZWQgZGVkaWNhdGVkIGxpbmUgY2lyY3VpdCB0ZWxlY29tbXVuaWNhdGlvbnMgc2VydmljZXMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjEuMDEuMDAjSGlnaCBzcGVlZCBjaXJjdWl0IHN3aXRjaGVkIGRpYWwgdXAgc2VydmljZXMjODMuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjEuMDIuMDAjSVNETiBpbnRlZ3JhdGVkIHNlcnZpY2VzIGRpZ2l0YWwgbmV0d29yayBzZXJ2aWNlcyM4My4xMS4yMS4wMC4wMAotdW5zcHNjNyM4My4xMS4yMS4wMy4wMCNQb2ludCB0byBwb2ludCBkaWdpdGFsIHRlbGVjb21tdW5pY2F0aW9ucyBjaXJjdWl0IzgzLjExLjIxLjAwLjAwCi11bnNwc2M3IzgzLjExLjIxLjA0LjAwI011bHRpIHBvaW50IGFuYWxvZyB0ZWxlY29tbXVuaWNhdGlvbnMgY2lyY3VpdCM4My4xMS4yMS4wMC4wMAotdW5zcHNjNyM4My4xMS4yMS4wNS4wMCNQb2ludCB0byBwb2ludCBhbmFsb2cgdGVsZWNvbW11bmljYXRpb25zIGNpcmN1aXQjODMuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjEuMDYuMDAjeERTTCBkaWdpdGFsIHN1YnNjcmliZXIgbGluZSM4My4xMS4yMS4wMC4wMAotdW5zcHNjNyM4My4xMS4yMi4wMC4wMCNFbmhhbmNlZCB0ZWxlY29tbXVuaWNhdGlvbnMgc2VydmljZXMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjIuMDEuMDAjQVRNIGFzeW5jcm9ub3VzIHRyYW5zZmVyIG1vZGUgbWFuYWdlZCBuZXR3b3JrIHNlcnZpY2VzIzgzLjExLjIyLjAwLjAwCi11bnNwc2M3IzgzLjExLjIyLjAyLjAwI0ZyYW1lIHJlbGF5IHB1YmxpYyBtYW5hZ2VkIG5ldHdvcmsgc2VydmljZXMjODMuMTEuMjIuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjIuMDMuMDAjVlBOIHZpcnR1YWwgcHJpdmF0ZSBuZXR3b3JrIG1hbmFnZWQgbmV0d29yayBzZXJ2aWNlcyM4My4xMS4yMi4wMC4wMAotdW5zcHNjNyM4My4xMS4yMi4wNC4wMCNYNzUgbWFuYWdlZCBuZXR3b3JrIHNlcnZpY2VzIzgzLjExLjIyLjAwLjAwCi11bnNwc2M3IzgzLjExLjIyLjA1LjAwI1gyNSBtYW5hZ2VkIG5ldHdvcmsgc2VydmljZXMjODMuMTEuMjIuMDAuMDAKLXVuc3BzYzcjODMuMTIuMDAuMDAuMDAjSW5mb3JtYXRpb24gc2VydmljZXMjODMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTUuMDAuMDAjTGlicmFyaWVzIzgzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEyLjE1LjAxLjAwI0dlbmVyYWwgbXVuaWNpcGFsIHB1YmxpYyB1c2UgbGlicmFyaWVzIzgzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE1LjAyLjAwI0NvbGxlZ2Ugb3IgdW5pdmVyc2l0eSBsaWJyYXJpZXMjODMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTUuMDMuMDAjUHJpdmF0ZWx5IG93bmVkIGxpYnJhcmllcyM4My4xMi4xNS4wMC4wMAotdW5zcHNjNyM4My4xMi4xNS4wNC4wMCNOYXRpb25hbCBnb3Zlcm5tZW50IG9yIG1pbGl0YXJ5IHBvc3QgbGlicmFyaWVzIzgzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjAwLjAwI0luZm9ybWF0aW9uIGNlbnRlcnMjODMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTYuMDEuMDAjQ2hhbWJlcnMgb2YgY29tbWVyY2UjODMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTYuMDIuMDAjVG91cmlzbSBib2FyZCBzZXJ2aWNlcyM4My4xMi4xNi4wMC4wMAotdW5zcHNjNyM4My4xMi4xNi4wMy4wMCNDb21wdXRlcml6ZWQgaW5mb3JtYXRpb24gcmV0cmlldmFsIHN5c3RlbXMjODMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTYuMDQuMDAjT25saW5lIGRhdGFiYXNlIGluZm9ybWF0aW9uIHJldHJpZXZhbCBzeXN0ZW1zIzgzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjA1LjAwI1JlbW90ZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwgc2VydmljZXMjODMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTYuMDYuMDAjU2tpcCB0cmFjaW5nIzgzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE3LjAwLjAwI01hc3MgY29tbXVuaWNhdGlvbiBzZXJ2aWNlcyM4My4xMi4wMC4wMC4wMAotdW5zcHNjNyM4My4xMi4xNy4wMS4wMCNUZWxldmlzaW9uIHJlbGF0ZWQgc2VydmljZXMjODMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTcuMDIuMDAjUmFkaW8gcmVsYXRlZCBzZXJ2aWNlcyM4My4xMi4xNy4wMC4wMAotdW5zcHNjNyM4My4xMi4xNy4wMy4wMCNJbnRlcm5ldCByZWxhdGVkIHNlcnZpY2VzIzgzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE3LjA0LjAwI0NpdGl6ZW4gd2FybmluZyBzeXN0ZW1zIzgzLjEyLjE3LjAwLjAwCi11bnNwc2M3Izg0LjAwLjAwLjAwLjAwI0ZpbmFuY2lhbCBhbmQgSW5zdXJhbmNlIFNlcnZpY2VzIzg0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEwLjAwLjAwLjAwI0RldmVsb3BtZW50IGZpbmFuY2UjODQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTUuMDAuMDAjRGV2ZWxvcG1lbnQgYXNzaXN0YW5jZSM4NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNS4wMS4wMCNGaW5hbmNpYWwgYXNzaXN0YW5jZSM4NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNS4wMi4wMCNTYXZpbmdzIG1vYmlsaXphdGlvbiBwcm9ncmFtcyM4NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNS4wMy4wMCNHdWFyYW50ZWUgYWdyZWVtZW50cyM4NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNi4wMC4wMCNBaWQgZmluYW5jaW5nIzg0LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEwLjE2LjAxLjAwI0NvIGZpbmFuY2luZyM4NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNi4wMi4wMCNCaSBsYXRlcmFsIG9yIG11bHRpIGxhdGVyYWwgYWlkIzg0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE2LjAzLjAwI05vbiBnb3Zlcm5tZW50YWwgYWlkIzg0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE2LjA0LjAwI0dvdmVybm1lbnQgYWlkIzg0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE3LjAwLjAwI0RlYnQgbWFuYWdlbWVudCM4NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNy4wMS4wMCNEZWJ0IG5lZ290aWF0aW9uIzg0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE3LjAyLjAwI0RlYnQgcmVvcmdhbml6YXRpb24jODQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTcuMDMuMDAjRGVidCBzZXJ2aWNpbmcjODQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTcuMDQuMDAjRGVidCBjb2xsZWN0aW9uIHNlcnZpY2VzIzg0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE3LjA1LjAwI1JlcG9zc2Vzc2lvbiBzZXJ2aWNlcyM4NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMS4wMC4wMC4wMCNBY2NvdW50aW5nIGFuZCBhdWRpdGluZyM4NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNS4wMC4wMCNBY2NvdW50aW5nIHNlcnZpY2VzIzg0LjExLjAwLjAwLjAwCi11bnNwc2M3Izg0LjExLjE1LjAxLjAwI0Nvc3QgYWNjb3VudGluZyM4NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNS4wMi4wMCNGaW5hbmNpYWwgYWNjb3VudGluZyM4NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNS4wMy4wMCNUYXggYWNjb3VudGluZyM4NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNS4wNC4wMCNCb29ra2VlcGluZyBzZXJ2aWNlcyM4NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNS4wNS4wMCNQYXlyb2xsIGFjY291bnRpbmcgc2VydmljZXMjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDYuMDAjQmlsbGluZyBzZXJ2aWNlcyM4NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNS4wNy4wMCNJbnZlbnRvcnkgYWNjb3VudGluZyM4NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNi4wMC4wMCNBdWRpdCBzZXJ2aWNlcyM4NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNi4wMS4wMCNZZWFyIGVuZCBhdWRpdHMjODQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTYuMDIuMDAjUXVhcnRlcmx5IHJldmlld3MjODQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTYuMDMuMDAjSW50ZXJuYWwgYXVkaXRzIzg0LjExLjE2LjAwLjAwCi11bnNwc2M3Izg0LjExLjE3LjAwLjAwI0NvcnBvcmF0ZSBmaW5hbmNlIzg0LjExLjAwLjAwLjAwCi11bnNwc2M3Izg0LjExLjE3LjAxLjAwI1RyZWFzdXJ5IHNlcnZpY2VzIzg0LjExLjE3LjAwLjAwCi11bnNwc2M3Izg0LjExLjE3LjAyLjAwI0ludmVzdG9yIHJlbGF0aW9ucyBzZXJ2aWNlcyBvciBwcm9ncmFtcyM4NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNy4wMy4wMCNCdWRnZXQgcHJlcGFyYXRpb24gb3IgcmV2aWV3IHNlcnZpY2VzIzg0LjExLjE3LjAwLjAwCi11bnNwc2M3Izg0LjExLjE4LjAwLjAwI1RheGF0aW9uIGlzc3VlcyBhbmQgcHJlcGFyYXRpb24jODQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTguMDEuMDAjVGF4IHByZXBhcmVycyM4NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMS4xOC4wMi4wMCNUYXggYWR2aXNvcnkgc2VydmljZXMjODQuMTEuMTguMDAuMDAKLXVuc3BzYzcjODQuMTIuMDAuMDAuMDAjQmFua2luZyBhbmQgaW52ZXN0bWVudCM4NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNS4wMC4wMCNCYW5raW5nIGluc3RpdHV0aW9ucyM4NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNS4wMS4wMCNQcml2YXRlbHkgb3duZWQgYmFua3MjODQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTUuMDIuMDAjUHVibGljbHkgb3duZWQgYmFua3MjODQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTUuMDMuMDAjQ3JlZGl0IHVuaW9ucyM4NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNS4wNC4wMCNEZXZlbG9wbWVudCBmaW5hbmNlIGluc3RpdHV0aW9ucyM4NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNi4wMC4wMCNGdW5kcyB0cmFuc2ZlciBhbmQgY2xlYXJhbmNlIGFuZCBleGNoYW5nZSBzZXJ2aWNlcyM4NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNi4wMS4wMCNGdW5kcyBjbGVhcmFuY2Ugc2VydmljZXMjODQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDIuMDAjTGV0dGVyIG9mIGNyZWRpdCBzZXJ2aWNlcyM4NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNi4wMy4wMCNDdXJyZW5jeSBleGNoYW5nZSBzZXJ2aWNlcyM4NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNi4wNC4wMCNTcG90IGV4Y2hhbmdlIHRyYW5zYWN0aW9uIHNlcnZpY2VzIzg0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE2LjA1LjAwI0N1cnJlbmN5IGNvbnZlcnNpb24gc2VydmljZSM4NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNi4wNi4wMCNSZW1pdHRhbmNlIHByb2Nlc3Npbmcgc2VydmljZXMjODQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTcuMDAuMDAjSW52ZXN0bWVudCBhZHZpY2UjODQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTcuMDEuMDAjSW52ZXN0bWVudCBhZHZpc2VycyM4NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNy4wMi4wMCNJbnZlc3RtZW50IHBvbGljeSM4NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNy4wMy4wMCNJbnZlc3RtZW50IGFuYWx5c2lzIzg0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE3LjA0LjAwI0ludmVzdG1lbnQgYWdyZWVtZW50cyM4NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNy4wNS4wMCNNYXJrZXQgZGF0YSM4NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOC4wMC4wMCNTZWN1cml0aWVzIGFuZCBjb21tb2RpdGllcyBtYXJrZXRzIHNlcnZpY2VzIzg0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEyLjE4LjAxLjAwI1N0b2NrIG1hcmtldCB0cmFkaW5nIHNlcnZpY2VzIzg0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE4LjAyLjAwI0NvbW1vZGl0aWVzIG9yIGZ1dHVyZXMgbWFya2V0IHNlcnZpY2VzIzg0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE4LjAzLjAwI0dvdmVybm1lbnQgYm9uZHMjODQuMTIuMTguMDAuMDAKLXVuc3BzYzcjODQuMTIuMTguMDQuMDAjUHJpdmF0ZWx5IGlzc3VlZCBib25kcyM4NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOC4wNS4wMCNQcmVjaW91cyBtZXRhbHMgbWFya2V0IHNlcnZpY2VzIzg0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE5LjAwLjAwI01vcnRnYWdlIGJhbmtpbmcjODQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTkuMDEuMDAjSG91c2luZyBmaW5hbmNlIzg0LjEyLjE5LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE5LjAyLjAwI1JlIGZpbmFuY2luZyBzZXJ2aWNlcyM4NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOS4wMy4wMCNDb21tZXJjaWFsIG1vcnRnYWdlIGZpbmFuY2UjODQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODQuMTIuMjAuMDAuMDAjQ2FzaCB2YXVsdCBzZXJ2aWNlcyM4NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMi4yMC4wMS4wMCNEZXBvc2l0IHZlcmlmaWNhdGlvbiBzZXJ2aWNlcyM4NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM4NC4xMy4wMC4wMC4wMCNJbnN1cmFuY2UgYW5kIHJldGlyZW1lbnQgc2VydmljZXMjODQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTUuMDAuMDAjSW5zdXJhbmNlIHNlcnZpY2VzIGZvciBzdHJ1Y3R1cmVzIGFuZCBwcm9wZXJ0eSBhbmQgcG9zc2Vzc2lvbnMjODQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTUuMDEuMDAjQnVpbGRpbmcgb3IgYnVpbGRpbmcgY29udGVudHMgaW5zdXJhbmNlIzg0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjAyLjAwI0hvbWVvd25lcnMgb3IgcmVudGVycyBpbnN1cmFuY2UjODQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTUuMDMuMDAjQ2FyIG9yIHRydWNrIGluc3VyYW5jZSM4NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNS4wNC4wMCNDYXJnbyBpbnN1cmFuY2UjODQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTUuMDUuMDAjTWFyaW5lIGluc3VyYW5jZSM4NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNS4wNi4wMCNSZWluc3VyYW5jZSBzZXJ2aWNlcyM4NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNi4wMC4wMCNMaWZlIGFuZCBoZWFsdGggYW5kIGFjY2lkZW50IGluc3VyYW5jZSM4NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNi4wMS4wMCNMaWZlIGluc3VyYW5jZSM4NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNi4wMi4wMCNIZWFsdGggb3IgaG9zcGl0YWxpemF0aW9uIGluc3VyYW5jZSM4NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNi4wMy4wMCNBY2NpZGVudGFsIGluanVyeSBpbnN1cmFuY2UjODQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDQuMDAjRGlzYWJpbGl0eSBpbnN1cmFuY2UjODQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDUuMDAjV29ya21lbnMgaW5zdXJhbmNlIzg0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjA2LjAwI1VuZW1wbG95bWVudCBpbnN1cmFuY2UjODQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDcuMDAjTGlhYmlsaXR5IGluc3VyYW5jZSM4NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNy4wMC4wMCNQZW5zaW9uIGZ1bmRzIzg0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEzLjE3LjAxLjAwI0VtcGxveWVyIGFkbWluaXN0ZXJlZCBwZW5zaW9uIGZ1bmRzIzg0LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE3LjAyLjAwI1VuaW9uIG9yIGd1aWxkIGFkbWluaXN0ZXJlZCBwZW5zaW9uIGZ1bmRzIzg0LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE4LjAwLjAwI1JldGlyZW1lbnQgZnVuZHMjODQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTguMDEuMDAjU2VsZiBkaXJlY3RlZCBvciBlbXBsb3llciBzcG9uc29yZWQgcmV0aXJlbWVudCBmdW5kcyM4NC4xMy4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMy4xOC4wMi4wMCNTZWxmIGRpcmVjdGVkIG9yIHNlbGYgaW5pdGlhdGVkIHJldGlyZW1lbnQgcGxhbnMjODQuMTMuMTguMDAuMDAKLXVuc3BzYzcjODQuMTQuMDAuMDAuMDAjQ3JlZGl0IGFnZW5jaWVzIzg0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjE0LjE1LjAwLjAwI0dvdmVybm1lbnRhbCBjcmVkaXQgYWdlbmNpZXMjODQuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTUuMDEuMDAjRmFybSBjcmVkaXQgc2VydmljZXMjODQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTUuMDIuMDAjU21hbGwgYnVzaW5lc3MgbG9hbiBhZ2VuY2llcyM4NC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNS4wMy4wMCNNaW5vcml0eSBvd25lZCBidXNpbmVzcyBwcm9ncmFtcyM4NC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNi4wMC4wMCNQZXJzb25hbCBjcmVkaXQgYWdlbmNpZXMjODQuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTYuMDEuMDAjQ29uc3VtZXIgY3JlZGl0IGdhdGhlcmluZyBvciByZXBvcnRpbmcgc2VydmljZXMjODQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTYuMDIuMDAjQ3JlZGl0IGNhcmQgc2VydmljZSBwcm92aWRlcnMjODQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTcuMDAuMDAjQnVzaW5lc3MgY3JlZGl0IGFnZW5jaWVzIzg0LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg0LjE0LjE3LjAxLjAwI0J1c2luZXNzIGNyZWRpdCBnYXRoZXJpbmcgb3IgcmVwb3J0aW5nIHNlcnZpY2VzIzg0LjE0LjE3LjAwLjAwCi11bnNwc2M3Izg0LjE0LjE3LjAyLjAwI1ZhbHVlIGFkZGVkIG5ldHdvcmsgKFZBTikgc2VydmljZXMjODQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODUuMDAuMDAuMDAuMDAjSGVhbHRoY2FyZSBTZXJ2aWNlcyM4NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMC4wMC4wMC4wMCNDb21wcmVoZW5zaXZlIGhlYWx0aCBzZXJ2aWNlcyM4NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wMC4wMCNIZWFsdGhjYXJlIGNlbnRlcnMjODUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDEuMDAjRW1lcmdlbmN5IG9yIHN1cmdpY2FsIGhvc3BpdGFsIHNlcnZpY2VzIzg1LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjAyLjAwI1ByaXZhdGUgc3BlY2lhbGl6ZWQgY2xpbmljIHNlcnZpY2VzIzg1LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjAzLjAwI01lZGljYWwgb2ZmaWNlIHNlcnZpY2VzIzg1LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjA0LjAwI1BzeWNoaWF0cmljIGhvc3BpdGFsIHNlcnZpY2VzIzg1LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjA1LjAwI1Jlc3BpcmF0b3J5IGhvc3BpdGFsIHNlcnZpY2VzIzg1LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjA2LjAwI1N1YnN0YW5jZSBhYnVzZSBob3NwaXRhbCBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wNy4wMCNVcmdlbnQgY2FyZSBjZW50ZXJzIzg1LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjA4LjAwI01vYmlsZSBoZWFsdGhjYXJlIGNlbnRlcnMgb3Igc2VydmljZXMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDkuMDAjR3luZWNvbG9naWNhbCBvciBvYnN0ZXRyaWNhbCBob3NwaXRhbCBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNi4wMC4wMCNIZWFsdGhjYXJlIHByb3ZpZGVyIHN1cHBvcnQgcGVyc29ucyM4NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNi4wMS4wMCNOdXJzaW5nIHNlcnZpY2VzIzg1LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE2LjAyLjAwI01pZHdpZmVyeSBvciBjaGlsZCBiaXJ0aCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM4NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNi4wMy4wMCNQZXJzb25hbCBjYXJlIHNlcnZpY2VzIGluIHNwZWNpYWxpemVkIGluc3RpdHV0aW9ucyM4NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNi4wNC4wMCNQaHlzaWNpYW5zIHBlcnNvbm5lbCBhc3Npc3RhbmNlIHNlcnZpY2VzIzg1LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE2LjA1LjAwI0hvbWUgaGVhbHRoIGFzc2lzdGFudHMjODUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTcuMDAuMDAjSGVhbHRoIGFkbWluaXN0cmF0aW9uIHNlcnZpY2VzIzg1LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjAxLjAwI0hlYWx0aCBwb2xpY3kjODUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTcuMDIuMDAjSGVhbHRoIGxlZ2lzbGF0aW9uIG9yIHJlZ3VsYXRpb25zIzg1LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjAzLjAwI0hlYWx0aCBzZXJ2aWNlIHBsYW5uaW5nIzg1LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjA0LjAwI0hlYWx0aCBlY29ub21pY3MjODUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTcuMDUuMDAjUHVibGljIGhlYWx0aCBhZG1pbmlzdHJhdGlvbiM4NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wNi4wMCNUcmFkaXRpb25hbCBoZWFsdGhjYXJlIHNlcnZpY2VzIzg1LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjA3LjAwI0hlYWx0aCBzeXN0ZW1zIGV2YWx1YXRpb24gc2VydmljZXMjODUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTEuMDAuMDAuMDAjRGlzZWFzZSBwcmV2ZW50aW9uIGFuZCBjb250cm9sIzg1LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjAwLjAwI0NvbnRhZ2lvdXMgZGlzZWFzZSBwcmV2ZW50aW9uIGFuZCBjb250cm9sIzg1LjExLjAwLjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjAxLjAwI0FpZHMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjAyLjAwI1BhcmFzaXRpYyBkaXNlYXNlIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wMy4wMCNGdW5nYWwgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjA0LjAwI1R1YmVyY3Vsb3NpcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDUuMDAjTGVwcm9zeSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDYuMDAjQmFjdGVyaWFsIGRpc2Vhc2UgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjA3LjAwI1NleHVhbGx5IHRyYW5zbWl0dGVkIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wOC4wMCNWaXJhbCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDkuMDAjWm9vbm90aWMgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjEwLjAwI1ZhY2NpbmF0aW9uIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjExLjAwI1F1YXJhbnRpbmUgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMTIuMDAjSW1tdW5pemF0aW9uIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjEzLjAwI0Rpc2luc2VjdGl6YXRpb24gc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMTQuMDAjRXBpZGVtaWNzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wMC4wMCNOb24gY29udGFnaW91cyBkaXNlYXNlIHByZXZlbnRpb24gYW5kIGNvbnRyb2wjODUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDEuMDAjQm9uZSBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDIuMDAjQ2FuY2VyIG9yIGxldWtlbWlhIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wMy4wMCNFbmRvY3JpbmUgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjA0LjAwI0hlYXJ0IGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wNS4wMCNJbW11bm9sb2dpYyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDYuMDAjQWxsZXJnaWVzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wNy4wMCNOZXVyb2xvZ2ljYWwgZGlzb3JkZXJzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wOC4wMCNOdXRyaXRpb25hbCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDkuMDAjUmFkaWF0aW9uIHNpY2tuZXNzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4xMC4wMCNEaWdlc3RpdmUgc3lzdGVtIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4xMS4wMCNFeWUgZGlzZWFzZSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTIuMDAjUmVzcGlyYXRvcnkgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjEzLjAwI1Ryb3BpY2FsIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4xNC4wMCNDaGlsZGhvb2QgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjE1LjAwI0RpYXJyaGVhbCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTYuMDAjQWxjb2hvbGlzbSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTcuMDAjRHJ1ZyBhZGRpY3Rpb24gcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE3LjAwLjAwI0Rpc2Vhc2UgdmVjdG9ycyBtYW5hZ2VtZW50IGFuZCBjb250cm9sIzg1LjExLjAwLjAwLjAwCi11bnNwc2M3Izg1LjExLjE3LjAxLjAwI1RpY2tzIG1hbmFnZW1lbnQgb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNy4wMi4wMCNUc2V0c2UgZmxpZXMgbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE3LjAwLjAwCi11bnNwc2M3Izg1LjExLjE3LjAzLjAwI0JhY3RlcmlhIG1hbmFnZW1lbnQgb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNy4wNC4wMCNNb3NxdWl0byBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTIuMDAuMDAuMDAjTWVkaWNhbCBwcmFjdGljZSM4NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNS4wMC4wMCNQcmltYXJ5IGNhcmUgcHJhY3RpdGlvbmVycyBzZXJ2aWNlcyM4NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNS4wMS4wMCNQcmltYXJ5IGNhcmUgcGh5c2ljaWFucyBob21lIHZpc2l0cyBzZXJ2aWNlcyM4NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNS4wMi4wMCNQcmltYXJ5IGNhcmUgcGh5c2ljaWFucyBjb25zdWx0YXRpb24gc2VydmljZXMjODUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTUuMDMuMDAjUHJpbWFyeSBjYXJlIHBoeXNpY2lhbnMgY29udHJvbCBzZXJ2aWNlcyM4NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNS4wNC4wMCNQcmltYXJ5IGNhcmUgcGh5c2ljaWFucyBlbWVyZ2VuY3kgbWVkaWNhbCBzZXJ2aWNlcyM4NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wMC4wMCNNZWRpY2FsIGRvY3RvcnMgc3BlY2lhbGlzdCBzZXJ2aWNlcyM4NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wMS4wMCNHeW5lY29sb2dpYyBvciBvYnN0ZXRyaWMgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDIuMDAjTmVwaHJvbG9neSBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wMy4wMCNDYXJkaW9sb2d5IHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjA0LjAwI1B1bG9tb25hcnkgc3BlY2lhbGlzdHMgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDUuMDAjR2FzdHJvZW50ZXJvbG9naXN0cyBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wNi4wMCNHZXJpYXRyaWMgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDcuMDAjUHN5Y2hpYXRyaXN0IHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjA4LjAwI1BzeWNob2xvZ2lzdHMgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDkuMDAjU3VyZ2VyeSBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4xMC4wMCNPcGh0aGFsbW9sb2dpc3RzIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjExLjAwI0Rlcm1hdG9sb2d5IHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjEyLjAwI09ydGhvcGVkaWNzIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjEzLjAwI1BlZGlhdHJpYyBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4xNC4wMCNOZXJ2b3VzIHN5c3RlbSBzcGVjaWFsaXN0IHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE3LjAwLjAwI0hlYWx0aGNhcmUgcHJvdmlkZXJzIHNwZWNpYWxpc3RzIHNlcnZpY2VzIzg1LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjE3LjAxLjAwI1BzeWNob3RoZXJhcGlzdHMgc2VydmljZXMjODUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTcuMDIuMDAjT3B0b21ldHJpc3RzIHNlcnZpY2VzIzg1LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE3LjAzLjAwI1BvZGlhdHJpc3RzIHNlcnZpY2VzIzg1LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE3LjA0LjAwI1NwZWVjaCBzcGVjaWFsaXN0cyBzZXJ2aWNlcyM4NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wNS4wMCNBY3VwdW5jdHVyaXN0cyBzZXJ2aWNlcyM4NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wNi4wMCNDaGlyb3ByYWN0b3JzIHNlcnZpY2VzIzg1LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjAwLjAwI01lZGljYWwgbGFib3JhdG9yaWVzIzg1LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjAxLjAwI0Jsb29kIGFuYWx5c2lzIGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDIuMDAjQmFjdGVyaW9sb2dpY2FsIGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDMuMDAjQmlvbG9naWNhbCBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjA0LjAwI1BhdGhvbG9naWNhbCBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjA1LjAwI1VyaW5hbHlzaXMgbGFib3JhdG9yeSBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wNi4wMCNOZXVyb2xvZ2ljYWwgbGFib3JhdG9yeSBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wNy4wMCNVbHRyYXNvdW5kIGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDguMDAjWCByYXkgbGFib3JhdG9yeSBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wOS4wMCNCbG9vZCBvciBzcGVybSBvciB0cmFuc3BsYW50IG9yZ2FuIGJhbmtzIHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjEwLjAwI0RydWcgb3IgYWxjb2hvbCBzY3JlZW5pbmcjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTkuMDAuMDAjUGhhcm1hY2lzdHMjODUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTkuMDEuMDAjUGhhcm1hY2V1dGljYWwgcHJlcGFyYXRpb24gc2VydmljZXMjODUuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTkuMDIuMDAjQ29tbWVyY2lhbCBwaGFybWFjZXV0aWNhbCBzZXJ2aWNlcyM4NS4xMi4xOS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMC4wMC4wMCNEZW50YWwgc2VydmljZXMjODUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjAuMDEuMDAjRGVudGlzdHMgc2VydmljZXMjODUuMTIuMjAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjAuMDIuMDAjRGVudGFsIGh5Z2llbmlzdHMgc2VydmljZXMjODUuMTIuMjAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjAuMDMuMDAjRGVudGlzdCBzdXBwb3J0IHN0YWZmIHNlcnZpY2VzIzg1LjEyLjIwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIwLjA0LjAwI09yYWwgc3VyZ2VvbnMgc2VydmljZXMjODUuMTIuMjAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjAuMDUuMDAjT3J0aG9kb250aWMgc2VydmljZXMjODUuMTIuMjAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDAuMDAjUmVoYWJpbGl0YXRpb24gc2VydmljZXMjODUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDEuMDAjUGh5c2ljYWwgdGhlcmFweSBzZXJ2aWNlcyM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wMi4wMCNPY2N1cGF0aW9uYWwgdGhlcmFweSBzZXJ2aWNlcyM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wMy4wMCNSZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyBmb3Igc3Vic3RhbmNlIGFidXNlIzg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjA0LjAwI0F0aGxldGljIHJlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjA1LjAwI0VhdGluZyBkaXNvcmRlcnMgc2VydmljZXMjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDYuMDAjQnJhaW4gb3Igc3BpbmFsIGNvcmQgaW5qdXJ5IHNlcnZpY2VzIzg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjA3LjAwI0JsaW5kIG9yIHZpc2lvbiBpbXBhaXJlZCByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wOC4wMCNTcGVlY2ggb3IgbGFuZ3VhZ2UgdGhlcmFweSM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wOS4wMCNSZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyBmb3IgcGVvcGxlIHdpdGggY2hyb25pYyBkaXNhYmlsaXRpZXMjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTMuMDAuMDAuMDAjTWVkaWNhbCBzY2llbmNlIHJlc2VhcmNoIGFuZCBleHBlcmltZW50YXRpb24jODUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTUuMDAuMDAjRXhwZXJpbWVudGFsIG1lZGljaW5lIHNlcnZpY2VzIzg1LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEzLjE1LjAxLjAwI09yZ2FuIHRyYW5zcGxhbnQgc2VydmljZXMjODUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTUuMDIuMDAjQ2xpbmljYWwgaHVtYW4gZHJ1ZyB0cmlhbHMjODUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTUuMDMuMDAjQW5pbWFsIGV4cGVyaW1lbnRhdGlvbiM4NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNS4wNC4wMCNIdW1hbiBleHBlcmltZW50YXRpb24jODUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTUuMDUuMDAjU3BhY2UgZXhwZXJpbWVudGF0aW9uIzg1LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE2LjAwLjAwI01lZGljYWwgZXRoaWNzIzg1LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEzLjE2LjAxLjAwI0V1dGhhbmFzaWEgaXNzdWVzIzg1LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE2LjAyLjAwI01lZGljYWwgY29kZSBvZiBjb25kdWN0Izg1LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE2LjAzLjAwI01lZGljYWwgc29jaWV0aWVzIzg1LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE2LjA0LjAwI0ludGVybmF0aW9uYWwgZHJ1ZyBtb25pdG9yaW5nIHNlcnZpY2VzIzg1LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjAwLjAwI01lZGljYWwgc2NpZW5jZSBhbmQgcmVzZWFyY2gjODUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDEuMDAjUGhhcm1hY2V1dGljYWwgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDIuMDAjQmFjdGVyaW9sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjAzLjAwI0Jpb21lZGljYWwgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDQuMDAjQ2FyZGlvbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wNS4wMCNBbmF0b215IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjA2LjAwI1BhdGhvbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wNy4wMCNFbWJyeW9sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjA4LjAwI0VwaWRlbWlvbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wOS4wMCNHZW5ldGljcyByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4xMC4wMCNJbW11bm9sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjExLjAwI1BoeXNpb2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMTIuMDAjVG94aWNvbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4xMy4wMCNOZXVyb2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTQuMDAuMDAuMDAjQWx0ZXJuYXRpdmUgYW5kIGhvbGlzdGljIG1lZGljaW5lIzg1LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjE0LjE1LjAwLjAwI0ZhaXRoIGhlYWxlcnMjODUuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTUuMDEuMDAjV2l0Y2ggZG9jdG9ycyBvciB2b29kb28gc2VydmljZXMjODUuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTUuMDIuMDAjRmFpdGggaGVhbGVycyBzZXJ2aWNlcyM4NS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNS4wMy4wMCNTaGFtYW5zIzg1LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE0LjE1LjA0LjAwI0VuZXJneSB3b3JrIzg1LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE0LjE2LjAwLjAwI0hlcmJhbCB0cmVhdG1lbnRzIzg1LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg1LjE0LjE2LjAxLjAwI0hlcmJhbCBtZWRpY2luZSBvciBoZXJiYWxpc3RzIHNlcnZpY2VzIzg1LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE0LjE2LjAyLjAwI0FsZ2FlIG9yIHNlYSB3ZWVkIG1lZGljYWwgY3VyZXMjODUuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTYuMDMuMDAjSG90IHNwcmluZ3MgY3VyZSBzZXJ2aWNlcyM4NS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNy4wMC4wMCNIb21lb3BhdGhpYyBwcmFjdGljZSM4NS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNy4wMS4wMCNJbml0aWFsIGRpYWdub3N0aWMgYXNzZXNzbWVudCM4NS4xNC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNy4wMi4wMCNSZW1lZHkgY29uc3VsdGF0aW9ucyM4NS4xNC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xNS4wMC4wMC4wMCNGb29kIGFuZCBudXRyaXRpb24gc2VydmljZXMjODUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDAuMDAjRm9vZCB0ZWNobm9sb2d5Izg1LjE1LjAwLjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjAxLjAwI0Zvb2QgaHlnaWVuZSBjb250cm9sIHNlcnZpY2VzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjAyLjAwI0Zvb2QgY29udGFtaW5hdGlvbiBjb250cm9sIHNlcnZpY2VzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjAzLjAwI0Zvb2QgcHJlc2VydmF0aW9uIG1hbmFnZW1lbnQgb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wNC4wMCNGb29kIHByZXBhcmF0aW9uIGNvdW5zZWxpbmcgb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wNS4wMCNGb29kIHJlc2VhcmNoIHNlcnZpY2VzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjA2LjAwI1N0dWRpZXMgb24gZm9vZHMgb3IgZm9vZCBoYWJpdHMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDcuMDAjRm9vZCBhZGRpdGl2ZSBvciBxdWFsaXR5IHN0YW5kYXJkcyBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wOC4wMCNGb29kIGFuYWx5c2lzIHNlcnZpY2VzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjA5LjAwI0Zvb2QgbGVnaXNsYXRpb24gc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDAuMDAjTnV0cml0aW9uIGlzc3VlcyM4NS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNi4wMS4wMCNOdXRyaXRpb24gcHJvZ3JhbW1pbmcgc2VydmljZXMjODUuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDIuMDAjQnJlYXN0IG9yIGJvdHRsZSBmZWVkaW5nIHBvbGljeSM4NS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNi4wMy4wMCNOdXRyaXRpb25hbCByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM4NS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNi4wNC4wMCNOdXRyaXRpb24gcHJvamVjdCBldmFsdWF0aW9uIzg1LjE1LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjA1LjAwI0Zvb2Qgb3IgbnV0cml0aW9uIGRldmVsb3BtZW50IHN0cmF0ZWdpZXMjODUuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDYuMDAjTnV0cmllbnQgZGVmaWNpZW5jeSBjb250cm9sIHByb2dyYW1zIzg1LjE1LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjA3LjAwI0RpZXQgY29udHJvbCBvciBwcm9ncmFtcyM4NS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNy4wMC4wMCNGb29kIHBvbGljeSBwbGFubmluZyBhbmQgYWlkIzg1LjE1LjAwLjAwLjAwCi11bnNwc2M3Izg1LjE1LjE3LjAxLjAwI0Zvb2Qgc3RhbmRhcmRzIzg1LjE1LjE3LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE3LjAyLjAwI0Zvb2QgYWlkIGdsb2JhbCBpbmZvcm1hdGlvbiBvciBlYXJseSB3YXJuaW5nIHN5c3RlbXMgc2VydmljZXMjODUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTcuMDMuMDAjQXNzZXNzbWVudCBvZiBlbWVyZ2VuY3kgZm9vZCByZXF1aXJlbWVudHMjODUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTcuMDQuMDAjTmF0aW9uYWwgZm9vZCBpbnRlcnZlbnRpb24gcG9saWN5IG9yIHByb2dyYW1zIzg1LjE1LjE3LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE3LjA1LjAwI0V2YWx1YXRpb24gb2YgZm9vZCBhaWQgbnV0cml0aW9uYWwgaW1wYWN0Izg1LjE1LjE3LjAwLjAwCi11bnNwc2M3Izg2LjAwLjAwLjAwLjAwI0VkdWNhdGlvbiBhbmQgVHJhaW5pbmcgU2VydmljZXMjODYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTAuMDAuMDAuMDAjVm9jYXRpb25hbCB0cmFpbmluZyM4Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wMC4wMCNBZ3JpY3VsdHVyZSBhbmQgZm9yZXN0cnkgYW5kIG90aGVyIG5hdHVyYWwgcmVzb3VyY2VzIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjAxLjAwI0Fncm8gaW5kdXN0cnkgdm9jYXRpb25hbCB0cmFpbmluZyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wMi4wMCNEYWlyeSBpbmR1c3RyeSB2b2NhdGlvbmFsIHRyYWluaW5nIzg2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjAzLjAwI01lYXQgaW5kdXN0cnkgdm9jYXRpb25hbCB0cmFpbmluZyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wNC4wMCNBZ3JpY3VsdHVyZSB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjA1LjAwI1J1cmFsIHlvdXRoIG9yIGZhcm1lcnMgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wNi4wMCNGb3Jlc3RyeSB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjA3LjAwI0Zpc2hlcnkgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wOC4wMCNFbnZpcm9ubWVudGFsIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDkuMDAjTmF0dXJhbCByZXNvdXJjZXMgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wMC4wMCNTY2llbnRpZmljIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDEuMDAjQ29tcHV0ZXIgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wMi4wMCNFbmVyZ3kgcmVsYXRlZCB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjAzLjAwI0NoZW1pc3RyeSB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjA0LjAwI0Jpb2xvZ3kgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wNS4wMCNNZWRpY2FsIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDYuMDAjRWxlY3Ryb25pY3Mgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wNy4wMCNUZWxlY29tbXVuaWNhdGlvbnMgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wOC4wMCNIeWRyYXVsaWNzIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDkuMDAjSW5kdXN0cmlhbCB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjEwLjAwI0VuZ2luZWVyaW5nIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDAuMDAjTm9uIHNjaWVudGlmaWMgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wMS4wMCNDb21tdW5pY2F0aW9ucyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjAyLjAwI1RvdXJpc20gcmVsYXRlZCB0cmFpbmluZyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wMy4wMCNMaWJyYXJ5IG9yIGRvY3VtZW50YXRpb24gdHJhaW5pbmcjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDQuMDAjUHJvY3VyZW1lbnQgb3Igc3VwcGx5IGNoYWluIHRyYWluaW5nIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjA1LjAwI0NsZXJpY2FsIHRyYWluaW5nIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjA2LjAwI0hlYWx0aCBhc3Npc3RhbmNlIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDcuMDAjUGVyc29uYWwgY2FyZSB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjA4LjAwI0xpdGVyYWN5IHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjA5LjAwI1NhZmV0eSB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xMC4wMCNUZWFjaGVyIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjExLjAwI0ZpcmUgZmlnaHRpbmcgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMTIuMDAjSGFuZGNyYWZ0cyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjEzLjAwI0xhdyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjE0LjAwI0xhdyBlbmZvcmNlbWVudCB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjE1LjAwI1JvYWQgb3IgcmFpbCB0cmFuc3BvcnRhdGlvbiB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjE2LjAwI1NoaXBwaW5nIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDAuMDAjSW4gc2VydmljZSB0cmFpbmluZyBhbmQgbWFucG93ZXIgZGV2ZWxvcG1lbnQjODYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDEuMDAjQmFuayBvciBmaW5hbmNlIHNlY3RvciBtYW5wb3dlciBkZXZlbG9wbWVudCM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wMi4wMCNSZSB0cmFpbmluZyBvciByZWZyZXNoaW5nIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjAzLjAwI1ZvY2F0aW9uYWwgcmVoYWJpbGl0YXRpb24gc2VydmljZXMjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDQuMDAjQ29tbWVyY2lhbCBzZWN0b3IgbWFucG93ZXIgZGV2ZWxvcG1lbnQjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDUuMDAjSW5kdXN0cmlhbCBzZWN0b3IgbWFucG93ZXIgZGV2ZWxvcG1lbnQjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDYuMDAjSGVhbHRoIHNlY3RvciBtYW5wb3dlciBkZXZlbG9wbWVudCM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wNy4wMCNNYW5hZ2VtZW50IHNlY3RvciBtYW5wb3dlciBkZXZlbG9wbWVudCM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wOC4wMCNQdWJsaWMgc2VjdG9yIG1hbnBvd2VyIGRldmVsb3BtZW50IHNlcnZpY2VzIzg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjA5LjAwI01lcmNoYW50IG1hcmluZSB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjExLjAwLjAwLjAwI0FsdGVybmF0aXZlIGVkdWNhdGlvbmFsIHN5c3RlbXMjODYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTUuMDAuMDAjRGlzdGFuY2UgbGVhcm5pbmcgc2VydmljZXMjODYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTUuMDEuMDAjRGlzdGFuY2UgbGVhcm5pbmcgZ3VpZGFuY2Ugc2VydmljZXMjODYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTUuMDIuMDAjRGlzdGFuY2UgdGVhY2hpbmcgc2VydmljZXMjODYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTUuMDMuMDAjQ2VydGlmaWNhdGVkIGRpc3RhbmNlIGxlYXJuaW5nIHNlcnZpY2VzIzg2LjExLjE1LjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjA0LjAwI05vbiBjZXJ0aWZpY2F0ZWQgZGlzdGFuY2UgbGVhcm5pbmcgc2VydmljZXMjODYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTUuMDUuMDAjRGlzdGFuY2UgbGVhcm5pbmcgYXNzZXNzbWVudCBzZXJ2aWNlcyM4Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNi4wMC4wMCNBZHVsdCBlZHVjYXRpb24jODYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTYuMDEuMDAjRXZlbmluZyBjb3Vyc2VzIzg2LjExLjE2LjAwLjAwCi11bnNwc2M3Izg2LjExLjE2LjAyLjAwI1BhcnQgdGltZSBhZHVsdCBlZHVjYXRpb24gc2VydmljZXMjODYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTYuMDMuMDAjUGFyZW50IGVkdWNhdGlvbiM4Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNi4wNC4wMCNFbXBsb3llZSBFZHVjYXRpb24jODYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTcuMDAuMDAjTGFuZ3VhZ2Ugc2Nob29saW5nIzg2LjExLjAwLjAwLjAwCi11bnNwc2M3Izg2LjExLjE3LjAxLjAwI0NvbnZlcnNhdGlvbmFsIGZvcmVpZ24gbGFuZ3VhZ2UgaW5zdHJ1Y3Rpb24jODYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTcuMDIuMDAjRm9yZWlnbiBsYW5ndWFnZSBpbW1lcnNpb24gaW5zdHJ1Y3Rpb24jODYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTguMDAuMDAjRWR1Y2F0aW9uYWwgZXhjaGFuZ2VzIzg2LjExLjAwLjAwLjAwCi11bnNwc2M3Izg2LjExLjE4LjAxLjAwI0VkdWNhdGlvbmFsIGV4Y2hhbmdlcyBiZXR3ZWVuIHVuaXZlcnNpdGllcyM4Ni4xMS4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xOC4wMi4wMCNFZHVjYXRpb25hbCBleGNoYW5nZXMgYmV0d2VlbiBzY2hvb2xzIzg2LjExLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEyLjAwLjAwLjAwI0VkdWNhdGlvbmFsIGluc3RpdHV0aW9ucyM4Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNS4wMC4wMCNFbGVtZW50YXJ5IGFuZCBzZWNvbmRhcnkgc2Nob29scyM4Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNS4wMS4wMCNQcmUgc2Nob29sIGVkdWNhdGlvbmFsIHNlcnZpY2VzIzg2LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE1LjAyLjAwI1JlbGlnaW91cyBlbGVtZW50YXJ5IG9yIHNlY29uZGFyeSBzY2hvb2xzIzg2LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE1LjAzLjAwI1ByaXZhdGUgZWxlbWVudGFyeSBvciBzZWNvbmRhcnkgc2Nob29scyM4Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNS4wNC4wMCNQdWJsaWMgZWxlbWVudGFyeSBvciBzZWNvbmRhcnkgc2Nob29scyM4Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNi4wMC4wMCNKdW5pb3IgY29sbGVnZXMjODYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTYuMDEuMDAjQ29tbXVuaXR5IGNvbGxlZ2VzIzg2LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE2LjAyLjAwI1RlY2huaWNhbCBpbnN0aXR1dGVzIzg2LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE3LjAwLjAwI1VuaXZlcnNpdHkgYW5kIGNvbGxlZ2VzIzg2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEyLjE3LjAxLjAwI1VuZGVyZ3JhZHVhdGUgcHJvZ3JhbXMjODYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTcuMDIuMDAjUG9zdGdyYWR1YXRlIHByb2dyYW1zIzg2LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE4LjAwLjAwI1Byb2Zlc3Npb25hbCBzY2hvb2xzIzg2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEyLjE4LjAyLjAwI1RoZW9sb2dpY2FsIHNlbWluYXJpZXMjODYuMTIuMTguMDAuMDAKLXVuc3BzYzcjODYuMTIuMTguMDMuMDAjVGVjaG5pY2FsIHByb2Zlc3Npb25hbCBzY2hvb2xzIzg2LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE4LjA0LjAwI05vbiB0ZWNobmljYWwgcHJvZmVzc2lvbmFsIHNjaG9vbHMjODYuMTIuMTguMDAuMDAKLXVuc3BzYzcjODYuMTMuMDAuMDAuMDAjU3BlY2lhbGl6ZWQgZWR1Y2F0aW9uYWwgc2VydmljZXMjODYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTUuMDAuMDAjRmluZSBhcnRzIzg2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEzLjE1LjAxLjAwI1RoZWF0ZXIgc3R1ZGllcyM4Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNS4wMi4wMCNQYWludGluZyM4Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNS4wMy4wMCNTY3VscHR1cmUjODYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTUuMDQuMDAjTWVkaWEgc3R1ZGllcyM4Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNi4wMC4wMCNNdXNpYyBhbmQgZHJhbWEjODYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTYuMDEuMDAjTXVzaWMgc2Nob29scyM4Ni4xMy4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNi4wMi4wMCNEYW5jZSBlZHVjYXRpb24jODYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTYuMDMuMDAjRHJhbWEgc3R1ZGllcyM4Ni4xMy4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNy4wMC4wMCNEcml2aW5nIGFuZCBmbHlpbmcgYW5kIHNhaWxpbmcjODYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTcuMDEuMDAjVmVoaWNsZSBkcml2aW5nIHNjaG9vbHMgc2VydmljZXMjODYuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTcuMDIuMDAjRmxpZ2h0IHNjaG9vbCBzZXJ2aWNlcyM4Ni4xMy4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNy4wMy4wMCNZYWNodGluZyBvciBib2F0aW5nIHNjaG9vbCBzZXJ2aWNlcyM4Ni4xMy4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOC4wMC4wMCNNaWxpdGFyeSBlZHVjYXRpb24jODYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTguMDEuMDAjU2VydmljZSBhY2FkZW1pZXMjODYuMTMuMTguMDAuMDAKLXVuc3BzYzcjODYuMTMuMTguMDIuMDAjUGlsb3Qgc2Nob29scyM4Ni4xMy4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOC4wMy4wMCNNaWxpdGFyeSBwb2xpY2UgdHJhaW5pbmcjODYuMTMuMTguMDAuMDAKLXVuc3BzYzcjODYuMTMuMTguMDQuMDAjV2FyIGNvbGxlZ2UjODYuMTMuMTguMDAuMDAKLXVuc3BzYzcjODYuMTMuMTkuMDAuMDAjU2Nob29scyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzg2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEzLjE5LjAxLjAwI1ByaW1hcnkgc2Nob29saW5nIHNlcnZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjODYuMTMuMTkuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTkuMDIuMDAjU2Vjb25kYXJ5IHNjaG9vbGluZyBzZXJ2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzg2LjEzLjE5LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE5LjAzLjAwI1NwZWNpYWxpemVkIHNjaG9vbHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM4Ni4xMy4xOS4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOS4wNC4wMCNTcGVjaWFsaXplZCByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzg2LjEzLjE5LjAwLjAwCi11bnNwc2M3Izg2LjE0LjAwLjAwLjAwI0VkdWNhdGlvbmFsIGZhY2lsaXRpZXMjODYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTUuMDAuMDAjRWR1Y2F0aW9uYWwgZ3VpZGFuY2Ugc2VydmljZXMjODYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTUuMDEuMDAjRWR1Y2F0aW9uYWwgYWR2aXNvcnkgc2VydmljZXMjODYuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTUuMDIuMDAjVW5pdmVyc2l0aWVzIGNvb3BlcmF0aW9uIGd1aWRhbmNlIHNlcnZpY2VzIzg2LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE1LjAzLjAwI1N0dWR5IGFicm9hZCBhZHZpc29yeSBzZXJ2aWNlcyM4Ni4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNi4wMC4wMCNTdHVkZW50cyBvcmdhbml6YXRpb25zIzg2LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg2LjE0LjE2LjAxLjAwI1N0dWRlbnRzIGhvYmJ5IGNsdWJzIzg2LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE2LjAyLjAwI1N0dWRlbnRzIHVuaW9ucyM4Ni4xNC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNi4wMy4wMCNTdHVkZW50cyB0cmF2ZWxsaW5nIG9yZ2FuaXphdGlvbnMjODYuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTcuMDAuMDAjRWR1Y2F0aW9uYWwgdGVjaG5vbG9neSM4Ni4xNC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNy4wMS4wMCNMYW5ndWFnZSBsYWJvcmF0b3JpZXMjODYuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTcuMDIuMDAjQXVkaW8gdmlzdWFsIHRlY2hub2xvZ3kjODYuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTcuMDMuMDAjQ29tcHV0ZXIgcHJvZ3JhbW1lZCBpbnN0cnVjdGlvbiM4Ni4xNC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNy4wNC4wMCNMaWJyYXJ5IG9yIGRvY3VtZW50YXRpb24gc2VydmljZXMjODYuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMDAuMDAuMDAuMDAjVHJhdmVsIGFuZCBGb29kIGFuZCBMb2RnaW5nIGFuZCBFbnRlcnRhaW5tZW50IFNlcnZpY2VzIzkwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEwLjAwLjAwLjAwI1Jlc3RhdXJhbnRzIGFuZCBjYXRlcmluZyM5MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNS4wMC4wMCNFYXRpbmcgYW5kIGRyaW5raW5nIGVzdGFibGlzaG1lbnRzIzkwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEwLjE1LjAxLjAwI1Jlc3RhdXJhbnRzIzkwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE1LjAyLjAwI0JhcnMjOTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTUuMDMuMDAjRmFzdCBmb29kIGVzdGFibGlzaG1lbnRzIzkwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE1LjA0LjAwI09uIHN0cmVldCBmb29kIHZlbmRvcnMjOTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTYuMDAuMDAjQmFucXVldCBhbmQgY2F0ZXJpbmcgc2VydmljZXMjOTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTYuMDEuMDAjQmFucXVldCBmYWNpbGl0aWVzIzkwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE2LjAyLjAwI1BhcnR5IHRlbnQgc2VydmljZXMjOTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTYuMDMuMDAjQ2F0ZXJpbmcgc2VydmljZXMjOTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTYuMDQuMDAjQ29uc3RydWN0aW9uIG9yIHdvcmsgc2l0ZSBjYXRlcmluZyBzZXJ2aWNlcyM5MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNy4wMC4wMCNDYWZldGVyaWEgc2VydmljZXMjOTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTcuMDEuMDAjT24gc2l0ZSBjYWZldGVyaWEgbWFuYWdlbWVudCM5MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM5MC4xMC4xOC4wMC4wMCNDYXJyeW91dCBhbmQgdGFrZWF3YXkgc2VydmljZXMjOTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTguMDEuMDAjUHJvZmVzc2lvbmFsbHkgcHJlcGFyZWQgY2FycnlvdXQgbWVhbHMjOTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTguMDIuMDAjRGVsaXZlcmVkIG1lYWxzIHNlcnZpY2VzIzkwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkwLjExLjAwLjAwLjAwI0hvdGVscyBhbmQgbG9kZ2luZyBhbmQgbWVldGluZyBmYWNpbGl0aWVzIzkwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjExLjE1LjAwLjAwI0hvdGVscyBhbmQgbW90ZWxzIGFuZCBpbm5zIzkwLjExLjAwLjAwLjAwCi11bnNwc2M3IzkwLjExLjE1LjAxLjAwI0hvdGVscyM5MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNS4wMi4wMCNMb2RnZXMgb3IgcmVzb3J0cyM5MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNS4wMy4wMCNCZWQgYW5kIGJyZWFrZmFzdCBpbm5zIzkwLjExLjE1LjAwLjAwCi11bnNwc2M3IzkwLjExLjE1LjA0LjAwI0NvdHRhZ2UgcmVudGFsIHNlcnZpY2VzIzkwLjExLjE1LjAwLjAwCi11bnNwc2M3IzkwLjExLjE2LjAwLjAwI01lZXRpbmcgZmFjaWxpdGllcyM5MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNi4wMS4wMCNDb25mZXJlbmNlIGNlbnRlcnMjOTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTYuMDIuMDAjVmlkZW9jb25mZXJlbmNpbmcgZmFjaWxpdGllcyM5MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNi4wMy4wMCNNZWV0aW5nIG9yIGJhbnF1ZXQgcm9vbXMjOTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTcuMDAuMDAjQ2FtcGluZyBhbmQgd2lsZGVybmVzcyBmYWNpbGl0aWVzIzkwLjExLjAwLjAwLjAwCi11bnNwc2M3IzkwLjExLjE3LjAxLjAwI0NhbXBzaXRlcyM5MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNy4wMi4wMCNHb3Zlcm5tZW50IG93bmVkIHBhcmtzIzkwLjExLjE3LjAwLjAwCi11bnNwc2M3IzkwLjExLjE3LjAzLjAwI1JlY3JlYXRpb25hbCB2ZWhpY2xlIGNhbXBzaXRlIGZhY2lsaXRpZXMjOTAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMDAuMDAuMDAjVHJhdmVsIGZhY2lsaXRhdGlvbiM5MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNS4wMC4wMCNUcmF2ZWwgYWdlbnRzIzkwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEyLjE1LjAxLjAwI1RvdXIgYXJyYW5nZW1lbnQgc2VydmljZXMjOTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTUuMDIuMDAjVHJhdmVsIGFnZW5jaWVzIzkwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEyLjE1LjAzLjAwI0NoYXJ0ZXJpbmcgc2VydmljZXMjOTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTYuMDAuMDAjVHJhdmVsIGRvY3VtZW50IGFzc2lzdGFuY2UjOTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTYuMDEuMDAjUGFzc3BvcnQgc2VydmljZXMjOTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTYuMDIuMDAjVmlzYSBvciBhdXhpbGxpYXJ5IGRvY3VtZW50IHNlcnZpY2VzIzkwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkwLjEyLjE3LjAwLjAwI0d1aWRlcyBhbmQgaW50ZXJwcmV0ZXJzIzkwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEyLjE3LjAxLjAwI0FyZWEgb3IgdG91ciBndWlkZXMjOTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTcuMDIuMDAjSW50ZXJwcmV0ZXJzIzkwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkwLjEzLjAwLjAwLjAwI1BlcmZvcm1pbmcgYXJ0cyM5MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMy4xNS4wMC4wMCNMaXZlIHBlcmZvcm1hbmNlcyM5MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMy4xNS4wMS4wMCNUaGVhdHJpY2FsIHBlcmZvcm1hbmNlcyBvciBwbGF5cyM5MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMy4xNS4wMi4wMCNEYW5jZSBwZXJmb3JtYW5jZXMjOTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTUuMDMuMDAjT3BlcmEjOTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTUuMDQuMDAjQ29uY2VydHMjOTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTYuMDAuMDAjVGFwZWQgb3IgbW90aW9uIHBpY3R1cmUgcGVyZm9ybWFuY2VzIzkwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEzLjE2LjAxLjAwI01vdGlvbiBwaWN0dXJlcyM5MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMy4xNi4wMi4wMCNWaWRlb3RhcGVkIGVudGVydGFpbm1lbnQjOTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMDAuMDAuMDAjQ29tbWVyY2lhbCBzcG9ydHMjOTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTUuMDAuMDAjUHJvZmVzc2lvbmFsIHNwb3J0aW5nIGV2ZW50cyM5MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNS4wMS4wMCNMZWFndWUgcGxheSM5MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNS4wMi4wMCNDb21wZXRpdGl2ZSBldmVudHMjOTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTUuMDMuMDAjRXhoaWJpdGlvbnMjOTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTYuMDAuMDAjU3BvcnRzIGV2ZW50IHByb21vdGlvbiBhbmQgc3BvbnNvcnNoaXAjOTAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTYuMDEuMDAjQ29tcGFueSBzcG9uc29yZWQgcHJvZmVzc2lvbmFsIHNwb3J0cyBldmVudHMjOTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTYuMDIuMDAjQ29tcGFueSBzcG9uc29yZWQgYW1hdGV1ciBzcG9ydHMgZXZlbnRzIzkwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE2LjAzLjAwI1Nwb3J0aW5nIGV2ZW50IHByb21vdGlvbiBzZXJ2aWNlcyM5MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNy4wMC4wMCNBbWF0ZXVyIGFuZCByZWNyZWF0aW9uYWwgc3BvcnRzIzkwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE0LjE3LjAxLjAwI1lvdXRoIGNvbXBldGl0aXZlIHNwb3J0cyBsZWFndWVzIzkwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE3LjAyLjAwI0FkdWx0IHNwb3J0cyBsZWFndWVzIzkwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE3LjAzLjAwI1lvdXRoIHNwb3J0cyM5MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM5MC4xNS4wMC4wMC4wMCNFbnRlcnRhaW5tZW50IHNlcnZpY2VzIzkwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjE1LjAwLjAwI1RvdXJpc3QgYXR0cmFjdGlvbnMjOTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTUuMDEuMDAjTXVzZXVtcyM5MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNS4wMi4wMCNIaXN0b3JpY2FsIG9yIGN1bHR1cmFsIHNpdGVzIzkwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE1LjAzLjAwI1pvb2xvZ2ljYWwgZ2FyZGVucyM5MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNi4wMC4wMCNUcmF2ZWxsaW5nIHNob3dzIzkwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjE2LjAxLjAwI0NpcmN1c2VzIzkwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE2LjAyLjAwI1RvdXJpbmcgY29tcGFuaWVzIzkwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE2LjAzLjAwI0FydCBleGhpYml0aW9ucyM5MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNy4wMC4wMCNBbXVzZW1lbnQgcGFya3MjOTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTcuMDEuMDAjVGhlbWUgcGFya3MjOTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTcuMDIuMDAjV2F0ZXIgcGFya3MjOTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTcuMDMuMDAjTWluaWF0dXJlIGdvbGYgY291cnNlcyM5MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM5MC4xNS4xOC4wMC4wMCNDYXJuaXZhbHMgYW5kIGZhaXJzIzkwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjE4LjAxLjAwI1RyYXZlbGxpbmcgY2Fybml2YWxzIzkwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE4LjAyLjAwI0ZhaXIgb3JnYW5pemF0aW9uIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjOTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTkuMDAuMDAjR2FtYmxpbmcgYW5kIGJldHRpbmcgZXN0YWJsaXNobWVudHMjOTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTkuMDEuMDAjQ2FzaW5vcyM5MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM5MC4xNS4xOS4wMi4wMCNDYXJkIGNsdWJzIzkwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE5LjAzLjAwI1JhY2V0cmFja3MjOTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMjAuMDAuMDAjTmlnaHRjbHVicyBhbmQgZGFuY2UgaGFsbHMjOTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMjAuMDEuMDAjTmlnaHRjbHVicyM5MC4xNS4yMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4yMC4wMi4wMCNEYW5jZSBoYWxscyM5MC4xNS4yMC4wMC4wMAotdW5zcHNjNyM5MS4wMC4wMC4wMC4wMCNQZXJzb25hbCBhbmQgRG9tZXN0aWMgU2VydmljZXMjOTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMDAuMDAuMDAjUGVyc29uYWwgYXBwZWFyYW5jZSM5MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNS4wMC4wMCNTcGEgYW5kIHdvcmtvdXQgYW5kIHJlanV2ZW5hdGlvbiBmYWNpbGl0aWVzIzkxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkxLjEwLjE1LjAxLjAwI0hlYWx0aCBvciBmaXRuZXNzIGNsdWJzIzkxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE1LjAyLjAwI1NwYXMjOTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTUuMDMuMDAjTWFzc2FnZSBzZXJ2aWNlcyM5MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNS4wNC4wMCNBZXJvYmljcyBvciBleGVyY2lzZSBjbGFzc2VzIzkxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE1LjA1LjAwI1R1cmtpc2ggb3Igc3RlYW0gb3Igcml0dWFsIGJhdGhzIzkxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE2LjAwLjAwI0ZhY2UgYW5kIGJvZHkgY2FyZSBhbmQgYWRvcm5tZW50IzkxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkxLjEwLjE2LjAxLjAwI0ZhY2lhbCBvciBib2R5IHRyZWF0bWVudHMjOTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTYuMDIuMDAjTWFrZSB1cCBjb25zdWx0YXRpb24jOTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTYuMDMuMDAjVGF0dG9vIHNlcnZpY2VzIzkxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE2LjA0LjAwI0JvZHkgcGllcmNpbmcgc2VydmljZXMjOTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTYuMDUuMDAjRWxlY3Ryb2x5c2lzIzkxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE3LjAwLjAwI0hhaXIgY2FyZSM5MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNy4wMS4wMCNIYWlyIGN1dHRpbmcgb3IgY29sb3Igc2VydmljZXMjOTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTcuMDIuMDAjSGFpciB3ZWF2aW5nIG9yIHJlcGxhY2VtZW50IHNlcnZpY2VzIzkxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE4LjAwLjAwI0Nsb3RoaW5nIHJlbnRhbCM5MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xOC4wMS4wMCNUdXhlZG8gb3IgZm9ybWFsd2VhciByZW50YWwjOTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTguMDIuMDAjRXZlbmluZyBvciBicmlkYWwgZ293biBvciBkcmVzcyByZW50YWwjOTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTguMDMuMDAjQ29zdHVtZSByZW50YWwjOTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTkuMDAuMDAjRmFzaGlvbiBjb25zdWx0YW50cyM5MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xOS4wMS4wMCNDb2xvciBjb25zdWx0YW50IzkxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE5LjAyLjAwI0Zhc2hpb24gc3R5bGlzdCM5MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xOS4wMy4wMCNXYXJkcm9iZSBjb25zdWx0YW50IzkxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzkxLjExLjAwLjAwLjAwI0RvbWVzdGljIGFuZCBwZXJzb25hbCBhc3Npc3RhbmNlIzkxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkxLjExLjE1LjAwLjAwI0xhdW5kZXJpbmcgc2VydmljZXMjOTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTUuMDEuMDAjVW5pZm9ybSByZW50YWwjOTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTUuMDIuMDAjTGF1bmRyeSBzZXJ2aWNlcyM5MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNS4wMy4wMCNEcnkgY2xlYW5pbmcjOTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTUuMDQuMDAjQ29pbiBvcGVyYXRlZCBzZWxmIHNlcnZpY2UgbGF1bmRyaWVzIzkxLjExLjE1LjAwLjAwCi11bnNwc2M3IzkxLjExLjE2LjAwLjAwI0hvdXNlaG9sZCBhc3Npc3RhbmNlIGFuZCBjYXJlIzkxLjExLjAwLjAwLjAwCi11bnNwc2M3IzkxLjExLjE2LjAxLjAwI0hvdXNla2VlcGluZyBzZXJ2aWNlcyM5MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNi4wMi4wMCNZYXJkIG9yIHBvb2wgY2FyZSBzZXJ2aWNlcyM5MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNi4wMy4wMCNDb29raW5nIG9yIGZvb2QgcHJlcGFyYXRpb24gc2VydmljZXMjOTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTcuMDAuMDAjQ29uc3VtZXIgYnV5aW5nIGFuZCBiYXJ0ZXJpbmcgc2VydmljZXMjOTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTcuMDEuMDAjVXNlZCBjbG90aGluZyBjb25zaWdubWVudCBzZXJ2aWNlcyM5MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNy4wMi4wMCNCYXJ0ZXIgY2x1YnMgb3IgY29uc29ydGl1bXMjOTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTcuMDMuMDAjV2FyZHJvYmUgYnV5aW5nIHNlcnZpY2VzIzkxLjExLjE3LjAwLjAwCi11bnNwc2M3IzkxLjExLjE4LjAwLjAwI1BlcnNvbmFsIGl0ZW0gY2FyZSBhbmQgc3RvcmFnZSM5MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOC4wMS4wMCNWYWxldCBzZXJ2aWNlcyM5MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOC4wMi4wMCNDaGVjayByb29tIGNvbmNlc3Npb25zIzkxLjExLjE4LjAwLjAwCi11bnNwc2M3IzkxLjExLjE4LjAzLjAwI0xvY2tlciByZW50YWwjOTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTguMDQuMDAjRnVyIHN0b3JhZ2UjOTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTkuMDAuMDAjUGVyc29uYWwgY2FyZSBzZXJ2aWNlcyM5MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOS4wMS4wMCNJbmZhbnQgb3IgY2hpbGQgZGF5Y2FyZSBzZXJ2aWNlcyM5MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOS4wMi4wMCNOYW5ueSBvciBiYWJ5c2l0dGluZyBzZXJ2aWNlcyM5MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOS4wMy4wMCNFbGRlcmx5IGRheWNhcmUgc2VydmljZXMjOTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTkuMDQuMDAjQXNzaXN0ZWQgbGl2aW5nIHNlcnZpY2VzIzkxLjExLjE5LjAwLjAwCi11bnNwc2M3IzkyLjAwLjAwLjAwLjAwI05hdGlvbmFsIERlZmVuc2UgYW5kIFB1YmxpYyBPcmRlciBhbmQgU2VjdXJpdHkgYW5kIFNhZmV0eSBTZXJ2aWNlcyM5Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4wMC4wMC4wMCNQdWJsaWMgb3JkZXIgYW5kIHNhZmV0eSM5Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNS4wMC4wMCNQb2xpY2Ugc2VydmljZXMjOTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTUuMDEuMDAjUG9saWNpbmcgc2VydmljZXMjOTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTUuMDIuMDAjU3BlY2lhbCB3ZWFwb25zIGFuZCB0YWN0aWNzIChTV0FUKSBvciByaW90IHRlYW1zIzkyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE1LjAzLjAwI0NvbW11bml0eSBvdXRyZWFjaCBwcm9ncmFtcyM5Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNS4wNC4wMCNDcmltZSBkZXRlcnJlbmNlIHByb2dyYW1zIzkyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE2LjAwLjAwI0ZpcmUgc2VydmljZXMjOTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTYuMDEuMDAjTXVuaWNpcGFsIG9yIG5hdGlvbmFsIGZpcmVmaWdodGluZyBzZXJ2aWNlcyM5Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNi4wMi4wMCNWb2x1bnRlZXIgZmlyZSBkZXBhcnRtZW50IHNlcnZpY2VzIzkyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE2LjAzLjAwI0ZpcmUgcHJldmVudGlvbiBzZXJ2aWNlcyM5Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNi4wNC4wMCNGb3Jlc3Qgb3Igd2lsZGVybmVzcyBmaXJlZmlnaHRpbmcgc2VydmljZXMjOTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTcuMDAuMDAjSmFpbCBhbmQgcHJpc29uIHN5c3RlbSM5Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNy4wMS4wMCNKYWlsIG9yIHByaXNvbiBvciBwZW5pdGVudGlhcnkgc2VydmljZXMjOTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTcuMDIuMDAjWW91dGggY2FtcHMgb3IgZmFjaWxpdGllcyBzZXJ2aWNlcyM5Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNy4wMy4wMCNIYWxmIHdheSBob3VzZSBzZXJ2aWNlcyM5Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNy4wNC4wMCNNZW50YWxseSBpbXBhaXJlZCBjcmltaW5hbCBmYWNpbGl0aWVzIzkyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE4LjAwLjAwI0NvdXJ0IHN5c3RlbSM5Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOC4wMS4wMCNTaGVyaWZmcyBzZXJ2aWNlcyM5Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOC4wMi4wMCNQbGVhIGJhcmdhaW4gYWdyZWVtZW50cyM5Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOC4wMy4wMCNDaXZpbCBjYXNlIGNvdXJ0IGV4cGVuc2VzIzkyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE4LjA0LjAwI0NyaW1pbmFsIGNhc2UgZmVlcyBvciBmaW5lcyM5Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOC4wNS4wMCNBcHBlYWxzIHByb2Nlc3Mgb3IganVkaWNpYWwgcmV2aWV3IzkyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE5LjAwLjAwI1Jlc2N1ZSBzZXJ2aWNlcyM5Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOS4wMS4wMCNTZWFyY2ggYW5kIHJlc2N1ZSB0ZWFtcyM5Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOS4wMi4wMCNBbWJ1bGFuY2Ugc2VydmljZXMjOTIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTkuMDMuMDAjTGlmZSBzYXZpbmcgaGVsaWNvcHRlciBzZXJ2aWNlcyM5Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOS4wNC4wMCNMaWZlZ3VhcmQgc2VydmljZXMgZm9yIHBvb2wgb3IgYmVhY2gjOTIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMDAuMDAuMDAjTWlsaXRhcnkgc2VydmljZXMgYW5kIG5hdGlvbmFsIGRlZmVuc2UjOTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTUuMDAuMDAjTWFpbnRlbmFuY2Ugb2YgaW50ZXJuYXRpb25hbCBwZWFjZSBhbmQgc2VjdXJpdHkjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTUuMDEuMDAjRGlzcHV0ZSBtZWRpYXRpb24gb3IgY29uY2lsaWF0aW9uIG9yIG5lZ290aWF0aW9uIG9yIHNldHRsZW1lbnQjOTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTUuMDIuMDAjUGVhY2Uga2VlcGluZyBvcGVyYXRpb25zIzkyLjExLjE1LjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjAzLjAwI0NlYXNlIGZpcmUgYWdyZWVtZW50cyBvciB0cnVjZSBzdXBlcnZpc2lvbiM5Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNS4wNC4wMCNGYWN0IGZpbmRpbmcgbWlzc2lvbnMjOTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTUuMDUuMDAjV2FyIHByZXZlbnRpb24gc3RyYXRlZ2llcyM5Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNS4wNi4wMCNDb3VudGVydGVycm9yaXNtIzkyLjExLjE1LjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjA3LjAwI0VtYmFyZ29lcyM5Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wMC4wMCNEaXNhcm1hbWVudCM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wMS4wMCNBcm1zIGxpbWl0YXRpb25zIzkyLjExLjE2LjAwLjAwCi11bnNwc2M3IzkyLjExLjE2LjAyLjAwI0NvbnZlbnRpb25hbCBhcm1zIGRpc2FybWFtZW50IzkyLjExLjE2LjAwLjAwCi11bnNwc2M3IzkyLjExLjE2LjAzLjAwI051Y2xlYXIgZnJlZXplcyBvciBkaXNhcm1hbWVudCM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wNC4wMCNXZWFwb25zIGRlc3RydWN0aW9uIzkyLjExLjE2LjAwLjAwCi11bnNwc2M3IzkyLjExLjE2LjA1LjAwI0Rpc2FybWFtZW50IG5lZ290aWF0aW9ucyBvciBhZ3JlZW1lbnRzIzkyLjExLjE2LjAwLjAwCi11bnNwc2M3IzkyLjExLjE2LjA2LjAwI011dHVhbCBvciBiYWxhbmNlZCBmb3JjZSByZWR1Y3Rpb25zIzkyLjExLjE2LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjAwLjAwI01pbGl0YXJ5IHNjaWVuY2UgYW5kIHJlc2VhcmNoIzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjAxLjAwI01pbGl0YXJ5IGhpc3RvcnkjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDIuMDAjQ29udmVudGlvbmFsIHdlYXBvbnMgdXNhZ2UjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDMuMDAjQ2hlbWljYWwgd2VhcG9ucyB1c2FnZSM5Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wNC4wMCNHdWVyaWxsYSB3YXJmYXJlIzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjA1LjAwI01pbGl0YXJ5IHN0cmF0ZWd5IzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjA2LjAwI0FlcmlhbCBtYW5ldXZlcnMjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDcuMDAjTmF2YWwgb3Igc3VibWFyaW5lIG1hbmV1dmVycyM5Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wOC4wMCNMYW5kIG1hbmV1dmVycyM5Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wMC4wMCNNaWxpdGFyeSBwZXJzb25uZWwgYW5kIGRpc2NpcGxpbmUjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDEuMDAjQ2l2aWwgZGVmZW5zZSM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wMi4wMCNDb21wdWxzb3J5IG1pbGl0YXJ5IHNlcnZpY2VzIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjAzLjAwI1ZvbHVudGFyeSBtaWxpdGFyeSBzZXJ2aWNlcyM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wNC4wMCNNaWxpdGFyeSByZXNlcnZpc3RzIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjA1LjAwI0d1ZXJpbGxhcyM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wNi4wMCNNZXJjZW5hcmllcyM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wNy4wMCNWZXRlcmFucyM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wOC4wMCNNaWxpdGFyeSBjb3VydHMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDkuMDAjTWlsaXRhcnkgb2ZmZW5zZXMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMTAuMDAjTWlsaXRhcnkgcGVyc29ubmVsIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE5LjAwLjAwI01pbGl0YXJ5IHBvbGljeSM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOS4wMS4wMCNOYXRpb25hbCBzZWN1cml0eSM5Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOS4wMi4wMCNEZWZlbnNlIGNvbnRyYWN0cyM5Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOS4wMy4wMCNOb24gZmlyc3QgdXNlIHBvbGljeSM5Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOS4wNC4wMCNBcm1zIHJhY2UjOTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTkuMDUuMDAjTWlsaXRhcnkgcmVsYXRpb25zIzkyLjExLjE5LjAwLjAwCi11bnNwc2M3IzkyLjExLjIwLjAwLjAwI01pbGl0YXJ5IHpvbmVzIzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIwLjAxLjAwI0RlbWlsaXRhcml6ZWQgem9uZXMjOTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjAuMDIuMDAjTnVjbGVhciBvciBjaGVtaWNhbCB3ZWFwb24gZnJlZSB6b25lcyM5Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMC4wMy4wMCNQZWFjZSB6b25lcyM5Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMC4wNC4wMCNObyBmbHkgem9uZXMjOTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjEuMDAuMDAjTnVjbGVhciB3YXJmYXJlIzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIxLjAxLjAwI051Y2xlYXIgc2FmZWd1YXJkcyM5Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMS4wMi4wMCNOdWNsZWFyIHdlYXBvbiB0ZXN0cyM5Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMS4wMy4wMCNOdWNsZWFyIG5vbiBwcm9saWZlcmF0aW9uIzkyLjExLjIxLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjAwLjAwI01pbGl0YXJ5IHRhY3RpY3MjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjIuMDEuMDAjV2VhcG9ucyBkZXBsb3ltZW50IzkyLjExLjIyLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjAyLjAwI01pbGl0YXJ5IHJlY29ubmFpc3NhbmNlIzkyLjExLjIyLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjAzLjAwI0FybXMgdHJhbnNmZXJzIzkyLjExLjIyLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjA0LjAwI01pbGl0YXJ5IGFzc2lzdGFuY2UjOTIuMTEuMjIuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjIuMDUuMDAjVHJvb3Agd2l0aGRyYXdhbHMjOTIuMTEuMjIuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjIuMDYuMDAjUmFwaWQgZGVwbG95bWVudCBmb3JjZXMjOTIuMTEuMjIuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjIuMDcuMDAjRW52aXJvbm1lbnRhbCB3YXJmYXJlIzkyLjExLjIyLjAwLjAwCi11bnNwc2M3IzkyLjExLjIzLjAwLjAwI01pbGl0YXJ5IGJhc2VzIzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIzLjAxLjAwI0RvbWVzdGljIG1pbGl0YXJ5IGJhc2VzIzkyLjExLjIzLjAwLjAwCi11bnNwc2M3IzkyLjExLjIzLjAyLjAwI0ZvcmVpZ24gbWlsaXRhcnkgYmFzZXMjOTIuMTEuMjMuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjMuMDMuMDAjTmF2YWwgYmFzZXMjOTIuMTEuMjMuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjQuMDAuMDAjQXJtZWQgY29uZmxpY3RzIGFuZCBpbmNpZGVudHMjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjQuMDEuMDAjQm9yZGVyIGluY2lkZW50cyM5Mi4xMS4yNC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yNC4wMi4wMCNMaW1pdGVkIHdhciM5Mi4xMS4yNC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yNC4wMy4wMCNOdWNsZWFyIHdhciM5Mi4xMS4yNC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yNC4wNC4wMCNTcGFjZSBiYXNlZCB3YXIjOTIuMTEuMjQuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjQuMDUuMDAjUmVzcG9uc2UgdG8gdGVycm9yaXN0IGF0dGFja3MjOTIuMTEuMjQuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMDAuMDAuMDAjU2VjdXJpdHkgYW5kIHBlcnNvbmFsIHNhZmV0eSM5Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNS4wMC4wMCNHdWFyZCBzZXJ2aWNlcyM5Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNS4wMS4wMCNBcm1vcmVkIGNhciBzZXJ2aWNlcyM5Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNS4wMi4wMCNCdXJnbGFyeSBwcm90ZWN0aW9uIHNlcnZpY2VzIzkyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE1LjAzLjAwI0d1YXJkIGRvZyByZW50YWwjOTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTUuMDQuMDAjU2VjdXJpdHkgZ3VhcmQgc2VydmljZXMjOTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTYuMDAuMDAjRGV0ZWN0aXZlIHNlcnZpY2VzIzkyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEyLjE2LjAxLjAwI0RldGVjdGl2ZSBhZ2VuY2llcyM5Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNi4wMi4wMCNGaW5nZXJwcmludCBzZXJ2aWNlcyM5Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNi4wMy4wMCNMaWUgZGV0ZWN0aW9uIHNlcnZpY2VzIzkyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE2LjA0LjAwI1ByaXZhdGUgaW52ZXN0aWdhdGlvbiBzZXJ2aWNlcyM5Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNy4wMC4wMCNTZWN1cml0eSBzeXN0ZW1zIHNlcnZpY2VzIzkyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEyLjE3LjAxLjAwI1N1cnZlaWxsYW5jZSBvciBhbGFybSBtYWludGVuYW5jZSBvciBtb25pdG9yaW5nIzkyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE3LjAyLjAwI0ZpcmUgYWxhcm0gbWFpbnRlbmFuY2Ugb3IgbW9uaXRvcmluZyM5Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNy4wMy4wMCNTdG9yZSBvciBidXNpbmVzcyBhbnRpIHRoZWZ0IHNlcnZpY2VzIzkyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE3LjA0LjAwI0NvbmZpbmVtZW50IHN1cnZlaWxsYW5jZSBzeXN0ZW1zIG1haW50ZW5hbmNlIG9yIG1vbml0b3JpbmcjOTIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMDAuMDAuMDAuMDAjUG9saXRpY3MgYW5kIENpdmljIEFmZmFpcnMgU2VydmljZXMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMDAuMDAuMDAjUG9saXRpY2FsIHN5c3RlbXMgYW5kIGluc3RpdHV0aW9ucyM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xMC4xNS4wMC4wMCNQb2xpdGljYWwgYm9kaWVzIzkzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEwLjE1LjAxLjAwI1BvbGl0aWNhbCBwYXJ0aWVzIHJlcHJlc2VudGF0aW9uIHNlcnZpY2VzIzkzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE1LjAyLjAwI1BvbGl0aWNhbCBwYXJ0aWVzIGZ1bmQgcmFpc2luZyBzZXJ2aWNlcyM5My4xMC4xNS4wMC4wMAotdW5zcHNjNyM5My4xMC4xNS4wMy4wMCNQb2xpdGljYWwgcGFydGllcyBwdWJsaWMgYXBwZWFyYW5jZSBzZXJ2aWNlcyM5My4xMC4xNS4wMC4wMAotdW5zcHNjNyM5My4xMC4xNS4wNC4wMCNQb2xpdGljYWwgbGVnaXNsYXR1cmUgc2VydmljZXMjOTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTUuMDUuMDAjUG9saXRpY2FsIGp1ZGljaWFsIHBvd2VyIG9yIHNlcnZpY2VzIzkzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE1LjA2LjAwI1BvbGl0aWNhbCBleGVjdXRpdmUgcG93ZXIgb3Igc2VydmljZXMjOTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDAuMDAjUG9saXRpY2FsIG9mZmljaWFscyM5My4xMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wMS4wMCNDYWJpbmV0IG9mZmljZXJzIHNlcnZpY2VzIzkzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjAyLjAwI0dvdmVybm9ycyBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wMy4wMCNIZWFkcyBvZiBzdGF0ZXMgc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDQuMDAjUHJlc2lkZW50aWFsIHNlcnZpY2VzIzkzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjA1LjAwI1ByaW1lIG1pbmlzdGVycyBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wNi4wMCNNb25hcmNoIHNlcnZpY2VzIzkzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjA3LjAwI1N0YXRlc21lbiBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wOC4wMCNQYXJsaWFtZW50IG1lbWJlcnMgc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDAuMDAjTGVnaXNsYXRpdmUgYm9kaWVzIGFuZCBwcmFjdGljZSM5My4xMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xMC4xNy4wMS4wMCNOYXRpb25hbCBjb3VuY2lsIHNlcnZpY2VzIzkzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjAyLjAwI0NvcnBvcmF0ZSBzdGF0ZXMjOTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDMuMDAjQmlsbCBkcmFmdGluZyBzZXJ2aWNlcyM5My4xMC4xNy4wMC4wMAotdW5zcHNjNyM5My4xMC4xNy4wNC4wMCNMZWdpc2xhdGl2ZSBoZWFyaW5ncyBzZXJ2aWNlcyM5My4xMC4xNy4wMC4wMAotdW5zcHNjNyM5My4xMC4xNy4wNS4wMCNJbnRlbGxpZ2VuY2Ugc2VydmljZXMjOTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDYuMDAjTGVnaXNsYXRvcnMgc2VydmljZXMjOTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDcuMDAjUGFybGlhbWVudGFyeSBwcmFjdGljZSBzZXJ2aWNlcyM5My4xMC4xNy4wMC4wMAotdW5zcHNjNyM5My4xMS4wMC4wMC4wMCNTb2NpbyBwb2xpdGljYWwgY29uZGl0aW9ucyM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wMC4wMCNQb2xpdGljYWwgbW92ZW1lbnRzIzkzLjExLjAwLjAwLjAwCi11bnNwc2M3IzkzLjExLjE1LjAxLjAwI0V4dHJlbWlzdCBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDIuMDAjUGVhY2UgbW92ZW1lbnRzIzkzLjExLjE1LjAwLjAwCi11bnNwc2M3IzkzLjExLjE1LjAzLjAwI1Byb3Rlc3QgbW92ZW1lbnRzIzkzLjExLjE1LjAwLjAwCi11bnNwc2M3IzkzLjExLjE1LjA0LjAwI1VuZGVyZ3JvdW5kIG1vdmVtZW50cyM5My4xMS4xNS4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wNS4wMCNTdHVkZW50IG1vdmVtZW50cyM5My4xMS4xNS4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wNi4wMCNQZWFzYW50IG1vdmVtZW50cyM5My4xMS4xNS4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wNy4wMCNPcHBvc2l0aW9uIG1vdmVtZW50cyM5My4xMS4xNS4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wMC4wMCNQb2xpdGljYWwgcmVwcmVzZW50YXRpb24gYW5kIHBhcnRpY2lwYXRpb24jOTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDEuMDAjUG9saXRpY2FsIHJlcHJlc2VudGF0aW9uIzkzLjExLjE2LjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjAyLjAwI1BvbGl0aWNhbCBwYXJ0aWNpcGF0aW9uIzkzLjExLjE2LjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjAzLjAwI1Byb3BvcnRpb25hbCByZXByZXNlbnRhdGlvbiM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wNC4wMCNWb3RlIGNhdGNoZXIgc2VydmljZXMjOTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDUuMDAjVm90ZXIgcmVnaXN0cmF0aW9uIG9yIGNvdW50aW5nIG9yIGFuYWx5c2lzIG9yIHNjcnV0aW55IHNlcnZpY2VzIzkzLjExLjE2LjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjA2LjAwI1ByZXNzdXJlIGdyb3VwcyByZXByZXNlbnRhdGlvbiBvciBwYXJ0aWNpcGF0aW9uIHNlcnZpY2VzIzkzLjExLjE2LjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjA3LjAwI0VsZWN0aW9uIGFuYWx5c2lzIHNlcnZpY2VzIzkzLjExLjE2LjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjA4LjAwI0VsZWN0aW9uIG9yZ2FuaXphdGlvbiBzZXJ2aWNlcyM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4wMC4wMC4wMCNJbnRlcm5hdGlvbmFsIHJlbGF0aW9ucyM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xMi4xNS4wMC4wMCNEaXBsb21hY3kjOTMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDEuMDAjRGlwbG9tYXRpYyBzZXJ2aWNlcyM5My4xMi4xNS4wMC4wMAotdW5zcHNjNyM5My4xMi4xNS4wMi4wMCNDb25zdWxhciBzZXJ2aWNlcyM5My4xMi4xNS4wMC4wMAotdW5zcHNjNyM5My4xMi4xNS4wMy4wMCNEaXBsb21hdHMgc2VjdXJpdHkgc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDQuMDAjRGlwbG9tYXRpYyBwcml2aWxlZ2VzIG9yIGltbXVuaXRpZXMgc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDUuMDAjU3RhdGUgaW1tdW5pdGllcyBzZXJ2aWNlcyM5My4xMi4xNS4wMC4wMAotdW5zcHNjNyM5My4xMi4xNS4wNi4wMCNFbWJhc3NpZXMgb3IgYW1iYXNzYWRvcnMgc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDcuMDAjU3RhdGUgdmlzaXRzIG9yZ2FuaXphdGlvbiBzZXJ2aWNlcyM5My4xMi4xNS4wMC4wMAotdW5zcHNjNyM5My4xMi4xNS4wOC4wMCNJbnRlcm5hdGlvbmFsIGxhdyBwcmVzY3JpcHRpb24gc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDkuMDAjSW50ZXJuYXRpb25hbCBsYXcgcHJvbW90aW9uIG9yIHJlY29nbml0aW9uIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjAwLjAwI0ludGVybmF0aW9uYWwgcmVsYXRpb25zIGFuZCBjb29wZXJhdGlvbiM5My4xMi4wMC4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wMS4wMCNNdWx0aWxhdGVyYWwgY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDIuMDAjTWlsaXRhcnkgY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDMuMDAjUG9saXRpY2FsIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjA0LjAwI0ludGVybmF0aW9uYWwgZWNvbm9taWMgY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDUuMDAjTm9ydGggc291dGggY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDYuMDAjRWFzdCB3ZXN0IGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjA3LjAwI0ludGVybmF0aW9uYWwgY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDguMDAjTm9uIGdvdmVybm1lbnRhbCBsaWFpc29uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjA5LjAwI05vbiBhbGlnbmVkIGNvdW50cmllcyBjb29wZXJhdGlvbiM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4xMC4wMCNBbGlnbmVkIGNvdW50cmllcyBjb29wZXJhdGlvbiM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4xMS4wMCNQb2xpdGljYWwgY3JpbWVzIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjEyLjAwI1BlYWNlIHRyZWF0aWVzIGNvb3BlcmF0aW9uIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjEzLjAwI1RyZWF0eSBzaWduYXR1cmUgb3IgYWNjZXNzaW9ucyBvciByZWN0aWZpY2F0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjE0LjAwI0ludGVybmF0aW9uYWwgd2F0ZXJjb3Vyc2UgY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMTUuMDAjVGVycml0b3JpYWwgY2xhaW1zIG9yIG5lZ290aWF0aW9ucyB0aGlyZCBwYXJ0eSBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wMC4wMCNJbnRlcm5hdGlvbmFsIG9yZ2FuaXphdGlvbnMjOTMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDEuMDAjU3lzdGVtIG9mIG9yZ2FuaXphdGlvbnMgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDIuMDAjU2VjdXJpdHkgY291bmNpbCBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wMy4wMCNFY29ub21pYyBvciBzb2NpYWwgY291bmNpbCBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wNC4wMCNTZWNyZXRhcmlhdCBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wNS4wMCNUcnVzdHNoaXAgY291bmNpbCBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wNi4wMCNHZW5lcmFsIGFzc2VtYmx5IHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjA3LjAwI0ludGVybmF0aW9uYWwgY291cnQgb2YganVzdGljZSBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wOC4wMCNJbnRlcm5hdGlvbmFsIHBvbGl0aWNhbCBvcmdhbml6YXRpb25zIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjA5LjAwI0ludGVybmF0aW9uYWwgY2hhcml0eSBvcmdhbml6YXRpb25zIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjEwLjAwI0ludGVybmF0aW9uYWwgaHVtYW4gcmVsaWVmIG9yZ2FuaXphdGlvbnMgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMTEuMDAjSW50ZXJuYXRpb25hbCBoZWFsdGggb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMy4wMC4wMC4wMCNIdW1hbml0YXJpYW4gYWlkIGFuZCByZWxpZWYjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDAuMDAjUmVmdWdlZSBwcm9ncmFtcyM5My4xMy4wMC4wMC4wMAotdW5zcHNjNyM5My4xMy4xNS4wMS4wMCNQcm90ZWN0aW9uIG9mIGh1bWFuIHJpZ2h0cyBzZXJ2aWNlcyM5My4xMy4xNS4wMC4wMAotdW5zcHNjNyM5My4xMy4xNS4wMi4wMCNQcm9tb3Rpb24gb2YgaHVtYW4gcmlnaHRzIHNlcnZpY2VzIzkzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE1LjAzLjAwI0h1bWFuIHJpZ2h0cyBlZHVjYXRpb24gb3IgaW5mb3JtYXRpb24gZGlzc2VtaW5hdGlvbiBzZXJ2aWNlcyM5My4xMy4xNS4wMC4wMAotdW5zcHNjNyM5My4xMy4xNS4wNC4wMCNSZWZ1Z2VlIGVtZXJnZW5jeSBhc3Npc3RhbmNlIHNlcnZpY2VzIzkzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE1LjA1LjAwI1JlZnVnZWUgY2FtcHMgc2VydmljZXMjOTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDYuMDAjUmVmdWdlZSByZXNldHRsZW1lbnRzIG9yIHJlcGF0cmlhdGlvbiBzZXJ2aWNlcyM5My4xMy4xNS4wMC4wMAotdW5zcHNjNyM5My4xMy4xNS4wNy4wMCNEaXNwbGFjZWQgcGVyc29ucyBhc3Npc3RhbmNlIHNlcnZpY2VzIzkzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjAwLjAwI0Zvb2QgYW5kIG51dHJpdGlvbiBwb2xpY3kgcGxhbm5pbmcgYW5kIHByb2dyYW1zIzkzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjAxLjAwI0h1bmdlciBlcmFkaWNhdGlvbiBwcm9ncmFtcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wMi4wMCNFbWVyZ2VuY3kgZm9vZCBzdXBwbHkgc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDMuMDAjV29ybGQgZm9vZCBwcm9ncmFtIHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjA0LjAwI0Zvb2Qgb3IgYWdyaWN1bHR1cmUgb3JnYW5pemF0aW9uIHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjA1LjAwI0NvbW1vbiBmdW5kIGZvciBjb21tb2RpdGllcyBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wNi4wMCNJbnRlcm5hdGlvbmFsIGZ1bmQgZm9yIGFncmljdWx0dXJhbCBkZXZlbG9wbWVudCBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wNy4wMCNGb29kIGRpc3RyaWJ1dGlvbiBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wOC4wMCNGb29kIHN1cHBseSBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wOS4wMCNGb29kIGFpZCBwb2xpY2llcyBvciBwcm9ncmFtcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4xMC4wMCNGb29kIHBsYW5uaW5nIHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjExLjAwI0Zvb2Qgc2VjdXJpdHkgc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMTIuMDAjRm9vZCByZXNlcnZlcyBtYW5hZ2VtZW50IzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjEzLjAwI0Zvb2Qgc2hvcnRhZ2Ugb3Igc3VycGx1cyBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTcuMDAuMDAjSGVhbHRoIHByb2dyYW1zIzkzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEzLjE3LjAxLjAwI0FudGkgdG9iYWNjbyBjYW1wYWlnbnMjOTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTcuMDIuMDAjU2FuaXRhdGlvbiBwcm9ncmFtcyM5My4xMy4xNy4wMC4wMAotdW5zcHNjNyM5My4xMy4xNy4wMy4wMCNSZXNlYXJjaCBwcm9ncmFtcyM5My4xMy4xNy4wMC4wMAotdW5zcHNjNyM5My4xMy4xNy4wNC4wMCNEaXNlYXNlIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM5My4xMy4xNy4wMC4wMAotdW5zcHNjNyM5My4xMy4xNy4wNS4wMCNEcnVnIGFidXNlIHByZXZlbnRpb24gb3IgY29udHJvbCBwcm9ncmFtcyM5My4xMy4xNy4wMC4wMAotdW5zcHNjNyM5My4xMy4xOC4wMC4wMCNEaXNhc3RlciBwcmVwYXJlZG5lc3MgYW5kIHJlbGllZiM5My4xMy4wMC4wMC4wMAotdW5zcHNjNyM5My4xMy4xOC4wMS4wMCNEaXNhc3RlciB3YXJuaW5nIHNlcnZpY2VzIzkzLjEzLjE4LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE4LjAyLjAwI0Rpc2FzdGVyIHByZXBhcmVkbmVzcyByZXNwb25zZSBzZXJ2aWNlcyM5My4xMy4xOC4wMC4wMAotdW5zcHNjNyM5My4xMy4xOC4wMy4wMCNFbWVyZ2VuY3kgaG91c2luZyBzZXJ2aWNlcyM5My4xMy4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4wMC4wMC4wMCNDb21tdW5pdHkgYW5kIHNvY2lhbCBzZXJ2aWNlcyM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wMC4wMCNTb2NpYWwgZGV2ZWxvcG1lbnQgYW5kIHNlcnZpY2VzIzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjAxLjAwI1NvY2lhbCBwb2xpY3kgc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDIuMDAjU29jaWFsIHNlY3VyaXR5IGxlZ2lzbGF0aW9uIHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjAzLjAwI1NvY2lhbCBwbGFubmluZyBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wNC4wMCNGb3N0ZXIgaG9tZSBjYXJlIHNlcnZpY2VzIG9yIG9ycGhhbmFnZSM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wNS4wMCNBZG9wdGlvbiBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wNi4wMCNTb2NpYWwgd2VsZmFyZSBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wNy4wMCNTb2NpYWwgd29yayBhZG1pbmlzdHJhdGlvbiBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wOC4wMCNWb2x1bnRhcnkgc2VydmljZSBtYW5hZ2VtZW50IzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjA5LjAwI1NvY2lhbCBwcm9ibGVtcyBhbmFseXNpcyBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjEwLjAwI1NvY2lhbCBzdHJ1Y3R1cmUgc3R1ZGllcyBvciByZWxhdGVkIHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjExLjAwI1NvY2lhbCBncm91cHMgc3R1ZGllcyBvciByZWxhdGVkIHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjEyLjAwI1lvdXRoIG1vdmVtZW50cyBvciBvcmdhbml6YXRpb25zIHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjEzLjAwI1NvY2lhbCBqdXN0aWNlIG9yIGxlZ2lzbGF0aW9uIHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjE0LjAwI1NvY2lvIGN1bHR1cmFsIHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjAwLjAwI1BvcHVsYXRpb24jOTMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDEuMDAjUG9wdWxhdGlvbiBjZW5zdXMgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDIuMDAjUG9wdWxhdGlvbiBzYW1wbGUgc3VydmV5cyBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wMy4wMCNCaXJ0aCByZXBvcnRpbmcgb3IgY29udHJvbCBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wNC4wMCNQb3B1bGF0aW9uIGNvbnRyb2wgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDUuMDAjUG9wdWxhdGlvbiB0cmVuZHMgb3IgcHJvamVjdGlvbnMgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDYuMDAjQmlydGggc3RhdGlzdGljcyBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wNy4wMCNNYXJyaWFnZSByZXNlYXJjaCBvciBzdGF0aXN0aWNzIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjA4LjAwI1BvcHVsYXRpb24gZGlzdHJpYnV0aW9uIG9yIGFuYWx5c2lzIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjA5LjAwI1BvcHVsYXRpb24gY29tcG9zaXRpb24gYW5hbHlzaXMgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMTAuMDAjRGVtb2dyYXBoaWMgc3R1ZGllcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4xMS4wMCNJbW1pZ3JhdGlvbiBhbmFseXNpcyBvciBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4xMi4wMCNGYW1pbHkgcGxhbm5pbmcgcHJvZ3JhbXMgb3Igc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMTMuMDAjSHVtYW4gcmVwcm9kdWN0aW9uIGFuYWx5c2lzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjAwLjAwI0N1bHR1cmUjOTMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDEuMDAjQ3VsdHVyYWwgZXZlbnRzIG9yZ2FuaXphdGlvbnMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDIuMDAjQ3VsdHVyZSBwcm9tb3Rpb25hbCBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wMy4wMCNBcnQgcmVsYXRlZCBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wNC4wMCNTb25nIHdyaXRpbmcgc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDUuMDAjTGl0ZXJhcnkgd3JpdGluZyBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wNi4wMCNNaW5vcml0aWVzIHByb3RlY3Rpb24gc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDcuMDAjQ3VsdHVyYWwgaGVyaXRhZ2UgcHJlc2VydmF0aW9uIG9yIHByb21vdGlvbiBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wOC4wMCNNdXNldW0gc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDkuMDAjQ3VsdHVyYWwgcG9saWN5IHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjEwLjAwI0FyY2hhaWMgb3IgaW5kaWdlbm91cyBsYW5ndWFnZSBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4xMS4wMCNUcmFkaXRpb25hbCBoYW5kY3JhZnRzIHByb21vdGlvbiBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4xMi4wMCNQcm90ZWN0aW9uIG9mIGludGVsbGVjdHVhbCBvciBjdWx0dXJhbCBwcm9wZXJ0eSBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4xMy4wMCNIaXN0b3JpYyBzaXRlcyBvciBtb251bWVudHMgcHJvdGVjdGlvbiBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4xNC4wMCNNeXRob2xvZ3kjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDAuMDAjRW1wbG95bWVudCM5My4xNC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4wMS4wMCNFbXBsb3ltZW50IHByb21vdGlvbiBvciBwbGFubmluZyBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4wMi4wMCNSZWNydWl0bWVudCBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4wMy4wMCNJbnRlcm5hdGlvbmFsIGxhYm9yIHN0YW5kYXJkcyBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4wNC4wMCNJbnRlcm5hdGlvbmFsIGxhYm9yIHJlZ2lzdHJhdGlvbiBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4wNS4wMCNVbmVtcGxveW1lbnQgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDYuMDAjRW1wbG95bWVudCBzdGF0aXN0aWNzIG9yIGZvcmVjYXN0aW5nIHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjA3LjAwI1dvcmsgdGltZSBhcnJhbmdlbWVudHMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDguMDAjT2NjdXBhdGlvbmFsIGhlYWx0aCBvciBzYWZldHkgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMTAuMDAjQ2FyZWVyIGRldmVsb3BtZW50IHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjExLjAwI1Byb21vdGlvbmFsIHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjEyLjAwI0xhYm9yIGluc3BlY3Rpb24gc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMTMuMDAjV29yayBjb3VuY2lsIHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjE0LjAwI0ludGVybmF0aW9uYWwgbGFib3Igc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDAuMDAjUnVyYWwgZGV2ZWxvcG1lbnQjOTMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDEuMDAjQWdyaWN1bHR1cmFsIGNvbW1lcmNpYWwgYmFua2luZyBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wMi4wMCNSdXJhbCBpbnZlc3RtZW50IHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjAzLjAwI0FncmljdWx0dXJhbCBpbnN0aXR1dGlvbnMgb3JnYW5pemF0aW9uIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDQuMDAjQWdyaWN1bHR1cmFsIG9yIHJ1cmFsIGNvb3BlcmF0aXZlcyBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wNS4wMCNBZ3JpY3VsdHVyYWwgcmVzZWFyY2ggc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDYuMDAjRmFybWVycyBvciBwZWFzYW50cyBvcmdhbml6YXRpb25zIHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjA3LjAwI1dvbWVucyBzZXJ2aWNlcyBpbiBhZ3JpY3VsdHVyYWwgcHJvZHVjdGlvbiBvciBydXJhbCBkZXZlbG9wbWVudCM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wOC4wMCNBZ3JhcmlhbiByZWZvcm0gb3IgbGFuZCBzZXR0bGVtZW50IHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjA5LjAwI0xhbmQgYWRtaW5pc3RyYXRpb24gc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMTAuMDAjSXNsYW5kIGRldmVsb3BtZW50IHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjAwLjAwI1VyYmFuIGRldmVsb3BtZW50IzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjAxLjAwI1VyYmFuIGRldmVsb3BtZW50IHBsYW5uaW5nIHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjAyLjAwI1VyYmFuIGxhbmQgYWRtaW5pc3RyYXRpb24gc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDMuMDAjVXJiYW4gaW52ZXN0bWVudCBwcm9ncmFtbWluZyBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wNC4wMCNTbHVtIHJlZGV2bG9wbWVudCBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wNS4wMCNVcmJhbiBsaWdodGluZyBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wNi4wMCNVcmJhbiBkZXZlbG9wbWVudCBjb250cm9sIG9yIHJlZ3VsYXRpb25zIHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjA3LjAwI1VyYmFuIGJ1aWxkaW5nIHN0YW5kYXJkcyBvciByZWd1bGF0aW9ucyBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wOC4wMCNVcmJhbiBjb21tdW5pdHkgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDkuMDAjVXJiYW4gcHJvamVjdCBvciBwcm9ncmFtIGFkbWluaXN0cmF0aW9uIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjEuMDAuMDAjUmVnaW9uYWwgZGV2ZWxvcG1lbnQjOTMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjEuMDEuMDAjUmVnaW9uYWwgZGV2ZWxvcG1lbnQgcGxhbm5pbmcgc2VydmljZXMjOTMuMTQuMjEuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjEuMDIuMDAjRWNvbm9taWMgY29vcGVyYXRpb24gc2VydmljZXMjOTMuMTQuMjEuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjEuMDMuMDAjVGVjaG5pY2FsIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjE0LjIxLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIxLjA0LjAwI1NlY3RvcmFsIHBsYW5uaW5nIHNlcnZpY2VzIzkzLjE0LjIxLjAwLjAwCi11bnNwc2M3IzkzLjE1LjAwLjAwLjAwI1B1YmxpYyBhZG1pbmlzdHJhdGlvbiBhbmQgZmluYW5jZSBzZXJ2aWNlcyM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wMC4wMCNQdWJsaWMgYWRtaW5pc3RyYXRpb24jOTMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDEuMDAjUHVibGljIGVudGVycHJpc2VzIG1hbmFnZW1lbnQgb3IgZmluYW5jaWFsIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjAyLjAwI1B1YmxpYyBlbnRlcnByaXNlcyBpbmZvcm1hdGlvbiBvciBjb250cm9sIHN5c3RlbXMgc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDMuMDAjUHJpdmF0aXphdGlvbiBwcm9ncmFtcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wNC4wMCNBZG1pbmlzdHJhdGl2ZSByZWZvcm0gc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDUuMDAjQWRtaW5pc3RyYXRpdmUgYWdlbmNpZXMgc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDYuMDAjQWRtaW5pc3RyYXRpdmUgZWNvbm9taWMgY291bmNpbCBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wNy4wMCNBZG1pbmlzdHJhdGl2ZSBwcm9jZWR1cmVzIG9yIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjA4LjAwI0dvdmVybm1lbnQgZGVwYXJ0bWVudHMgc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDkuMDAjR292ZXJubWVudCBpbmZvcm1hdGlvbiBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4xMC4wMCNBZG1pbmlzdHJhdGl2ZSBmZWVzIG9yIHRheCBjb2xsZWN0aW9uIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjExLjAwI0FkbWluaXN0cmF0aXZlIGFjdHMgcmF0aWZpY2F0aW9uIG9yIGltcGxlbWVudGF0aW9uIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjEyLjAwI1B1YmxpYyBpbnN0aXR1dGlvbnMgc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMTMuMDAjTXVsdGluYXRpb25hbCBwdWJsaWMgY29ycG9yYXRpb25zIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjE0LjAwI09tYnVkc21hbiBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4xNS4wMCNOYXRpb25hbCBwbGFubmluZyBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wMC4wMCNQdWJsaWMgZmluYW5jZSM5My4xNS4wMC4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wMS4wMCNQcm9ncmFtIGJ1ZGdldGluZyBzZXJ2aWNlcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wMi4wMCNHb3Zlcm5tZW50IGJ1ZGdldGluZyBzZXJ2aWNlcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wMy4wMCNCdWRnZXQgb3IgcHVibGljIGludmVzdG1lbnQgbWFuYWdlbWVudCM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wNC4wMCNNaWxpdGFyeSBleHBlbmRpdHVyZXMgYnVkZ2V0aW5nIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjA1LjAwI0dvdmVybm1lbnQgZmluYW5jZSBzZXJ2aWNlcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wNi4wMCNHb3Zlcm5tZW50IGFjY291bnRpbmcgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDcuMDAjR292ZXJubWVudCBhdWRpdGluZyBzZXJ2aWNlcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wOC4wMCNHb3Zlcm5tZW50IG9yIGNlbnRyYWwgYmFuayBzZXJ2aWNlcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wOS4wMCNMb3R0ZXJpZXMgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMTAuMDAjVGF4IGNvbGxlY3Rpb24gc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMTEuMDAjU3Vic2lkaWVzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE3LjAwLjAwI0N1cnJlbmN5IzkzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE1LjE3LjAxLjAwI0N1cnJlbmNpZXMgb3IgY29pbmFnZSM5My4xNS4xNy4wMC4wMAotdW5zcHNjNyM5My4xNS4xNy4wMi4wMCNOYXRpb25hbCBiYW5rIG5vdGVzIzkzLjE1LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE2LjAwLjAwLjAwI1RheGF0aW9uIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjE2LjE1LjAwLjAwI0luY29tZSB0YXgjOTMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTUuMDEuMDAjTmF0aW9uYWwgaW5jb21lIHRheCM5My4xNi4xNS4wMC4wMAotdW5zcHNjNyM5My4xNi4xNS4wMi4wMCNNdW5pY2lwYWwgaW5jb21lIHRheCM5My4xNi4xNS4wMC4wMAotdW5zcHNjNyM5My4xNi4xNS4wMy4wMCNDYXBpdGFsIGdhaW5zIHRheCM5My4xNi4xNS4wMC4wMAotdW5zcHNjNyM5My4xNi4xNS4wNC4wMCNFeGNlc3MgcHJvZml0cyB0YXgjOTMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTYuMDAuMDAjVGF4ZXMgb3RoZXIgdGhhbiBpbmNvbWUgdGF4IzkzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjAxLjAwI1Byb3BlcnR5IHRheCM5My4xNi4xNi4wMC4wMAotdW5zcHNjNyM5My4xNi4xNi4wMi4wMCNMYW5kIHRheCM5My4xNi4xNi4wMC4wMAotdW5zcHNjNyM5My4xNi4xNi4wMy4wMCNWYWx1ZSBhZGRlZCB0YXggKFZBVCkjOTMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTYuMDQuMDAjUGF5cm9sbCB0YXgjOTMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTYuMDUuMDAjU2FsZXMgdGF4IzkzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjA2LjAwI1NvY2lhbCBzZWN1cml0eSB0YXgjOTMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTYuMDcuMDAjSW5oZXJpdGFuY2Ugb3IgdHJhbnNmZXIgdGF4IzkzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE3LjAwLjAwI1RheCBhZG1pbmlzdHJhdGlvbiM5My4xNi4wMC4wMC4wMAotdW5zcHNjNyM5My4xNi4xNy4wMS4wMCNUYXggY29sbGF0aW9uIzkzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE3LjAyLjAwI1RheCBpbmNlbnRpdmVzIzkzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE3LjAzLjAwI1RheCBzeXN0ZW1zIzkzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE3LjA0LjAwI1RheCByZXZlbnVlIGFkbWluaXN0cmF0aW9uIzkzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjAwLjAwI1RheGF0aW9uIGlzc3VlcyM5My4xNi4wMC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wMS4wMCNUYXggcmVmb3JtIzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjAyLjAwI1RheGF0aW9uIHBvbGljeSM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wMy4wMCNUYXggcmVzZWFyY2gjOTMuMTYuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDQuMDAjSW52ZXN0bWVudCB0YXggY3JlZGl0IzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjA1LjAwI1RheCBkZWR1Y3Rpb25zIzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjA2LjAwI1RheCBldmFzaW9uIzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjA3LjAwI1RheCBzaGVsdGVycyBvciBoYXZlbnMjOTMuMTYuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDguMDAjVGF4IHJldHVybnMjOTMuMTYuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTcuMDAuMDAuMDAjVHJhZGUgcG9saWN5IGFuZCByZWd1bGF0aW9uIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjE3LjE1LjAwLjAwI1RyYWRlIHBvbGljeSM5My4xNy4wMC4wMC4wMAotdW5zcHNjNyM5My4xNy4xNS4wMS4wMCNUcmFkZSBhZ3JlZW1lbnRzIzkzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE1LjAyLjAwI1RyYWRlIG5lZ290aWF0aW9ucyM5My4xNy4xNS4wMC4wMAotdW5zcHNjNyM5My4xNy4xNS4wMy4wMCNGb3JtdWxhdGlvbiBvZiBuYXRpb25hbCBjb21tb2RpdHkgcG9saWNpZXMjOTMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTUuMDQuMDAjRGV2ZWxvcG1lbnQgb2Ygc21hbGwgc2NhbGUgaW5kdXN0cmllcyM5My4xNy4xNS4wMC4wMAotdW5zcHNjNyM5My4xNy4xNi4wMC4wMCNJbnRlcm5hdGlvbmFsIHRyYWRlIzkzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE3LjE2LjAxLjAwI0ludGVybmF0aW9uYWwgY29tbW9kaXR5IGFncmVlbWVudHMjOTMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTYuMDIuMDAjRXhwb3J0IHBvbGljeSM5My4xNy4xNi4wMC4wMAotdW5zcHNjNyM5My4xNy4xNi4wMy4wMCNHbG9iYWwgdHJhZGUgcG9saWNpZXMgb3IgcHJvY2VkdXJlcyM5My4xNy4xNi4wMC4wMAotdW5zcHNjNyM5My4xNy4xNi4wNC4wMCNCaWxhdGVyYWwgdHJhZGUgYWdyZWVtZW50cyM5My4xNy4xNi4wMC4wMAotdW5zcHNjNyM5My4xNy4xNy4wMC4wMCNDdXN0b21zIGFkbWluaXN0cmF0aW9uIGFuZCBjb21wbGlhbmNlIzkzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE3LjE3LjAxLjAwI0N1c3RvbXMgY29udmVudGlvbnMjOTMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTcuMDIuMDAjQ3VzdG9tcyBmb3JtYWxpdGllcyM5My4xNy4xNy4wMC4wMAotdW5zcHNjNyM5My4xNy4xNy4wMy4wMCNDdXN0b21zIG9mZmVuY2VzIzkzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE4LjAwLjAwI1RyYWRlIGFuYWx5c2lzIzkzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE3LjE4LjAxLjAwI1RyYWRlIHByb2plY3Rpb25zIzkzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE4LjAyLjAwI0JhbGFuY2Ugb2YgdHJhZGUgcHJvamVjdGlvbnMjOTMuMTcuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTguMDMuMDAjVHJhZGUgc3RhdGlzdGljcyM5My4xNy4xOC4wMC4wMAotdW5zcHNjNyM5NC4wMC4wMC4wMC4wMCNPcmdhbml6YXRpb25zIGFuZCBDbHVicyM5NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMC4wMC4wMC4wMCNXb3JrIHJlbGF0ZWQgb3JnYW5pemF0aW9ucyM5NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNS4wMC4wMCNCdXNpbmVzcyBhc3NvY2lhdGlvbnMjOTQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTUuMDEuMDAjQWdyaWN1bHR1cmFsIGluZHVzdHJ5IGFzc29jaWF0aW9ucyM5NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNS4wMi4wMCNSZWd1bGF0b3J5IGFzc29jaWF0aW9ucyM5NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNS4wMy4wMCNTZWN0b3JhbCBidXNpbmVzcyBhc3NvY2lhdGlvbnMjOTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTUuMDQuMDAjSW50ZXJuYXRpb25hbCBidXNpbmVzcyBhc3NvY2lhdGlvbnMjOTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTUuMDUuMDAjRW1wbG95ZXJzIGFzc29jaWF0aW9ucyM5NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wMC4wMCNQcm9mZXNzaW9uYWwgYXNzb2NpYXRpb25zIzk0LjEwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjAxLjAwI0RlbnRhbCBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDIuMDAjTWVkaWNhbCBoZWFsdGggYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjAzLjAwI051cnNpbmcgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjA0LjAwI0FjY291bnRpbmcgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjA1LjAwI0FyY2hpdGVjdCBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDYuMDAjQmFyIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wNy4wMCNFZHVjYXRpb25hbCBvciB0ZWFjaGVyIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wOC4wMCNFbmdpbmVlcmluZyBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDkuMDAjU2NpZW50aWZpYyBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMTAuMDAjUHJvZmVzc2lvbmFsIHN0YW5kYXJkcyByZXZpZXcgYm9hcmRzIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE3LjAwLjAwI1N0YWZmIGFzc29jaWF0aW9ucyM5NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNy4wMS4wMCNTdGFmZiBob2JieSBjbHVicyM5NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNy4wMi4wMCNTdGFmZiBzcG9ydHMgYXNzb2NpYXRpb25zIzk0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE3LjAzLjAwI1dvbWVuIHN0YWZmIGFzc29jaWF0aW9ucyM5NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNy4wNC4wMCNQZW5zaW9ubmlzdCBzdGFmZiBhc3NvY2lhdGlvbnMjOTQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTcuMDUuMDAjTWFuYWdlbWVudCBzdGFmZiBhc3NvY2lhdGlvbnMjOTQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDAuMDAjVHJhZGUgdW5pb25zIzk0LjEwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjAxLjAwI0xhYm9yIG9yIGdlbmVyYWwgd29ya2VycyB0cmFkZSB1bmlvbnMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDIuMDAjVHJhZGUgdW5pb24gYWN0aXZpc3RzIHNlcnZpY2VzIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjAzLjAwI1RyYWRlIHVuaW9uIGluZm9ybWF0aW9uIHNlcnZpY2VzIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjA0LjAwI1RyYW5zcG9ydCB1bmlvbnMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDUuMDAjVGVhY2hlcnMgdW5pb25zIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjA2LjAwI01lZGljYWwgcGVyc29ubmVsIHVuaW9ucyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wNy4wMCNFbXBsb3llcnMgdW5pb25zIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjA4LjAwI0NpdmlsIHNlcnZhbnRzIHVuaW9ucyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wOS4wMCNQZXJzb25hbCBhc3Npc3RhbmNlIHNlcnZpY2VzIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjEwLjAwI0F2aWF0aW9uIHVuaW9ucyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMS4wMC4wMC4wMCNSZWxpZ2lvdXMgb3JnYW5pemF0aW9ucyM5NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMS4xNy4wMC4wMCNSZWxpZ2lvdXMgcmVzaWRlbmNlcyM5NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMS4xNy4wMS4wMCNQcml2YXRlIHJlbGlnaW91cyBob21lIHJlc2lkZW5jZXMjOTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTcuMDIuMDAjQ29tbXVuaXR5IHJlbGlnaW91cyBob21lIHJlc2lkZW5jZXMjOTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTcuMDMuMDAjUmVsaWdpb3VzIHJldHJlYXQgcmVzaWRlbmNlcyM5NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMS4xNy4wNC4wMCNUZW1wb3JhcnkgcmVsaWdpb3VzIGhvbWUgcmVzaWRlbmNlcyM5NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOC4wMC4wMCNQaWxncmltYWdlIG9yZ2FuaXphdGlvbnMgYW5kIHNlcnZpY2VzIzk0LjExLjAwLjAwLjAwCi11bnNwc2M3Izk0LjExLjE4LjAxLjAwI01lY2NhIHBpbGdyaW1hZ2Ugb3JnYW5pemF0aW9ucyBvciBzZXJ2aWNlcyM5NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOC4wMi4wMCNWYXRpY2FuIHBpbGdyaW1hZ2Ugb3JnYW5pemF0aW9ucyBvciBzZXJ2aWNlcyM5NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOC4wMy4wMCNQaWxncmltYWdlIHRyYXZlbCBhc3Npc3RhbmNlIHNlcnZpY2VzIzk0LjExLjE4LjAwLjAwCi11bnNwc2M3Izk0LjExLjE4LjA0LjAwI1BpbGdyaW1hZ2UgdG91ciBvcGVyYXRvcnMgc2VydmljZXMjOTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTkuMDAuMDAjTWlzc2lvbmFyeSBzZXJ2aWNlcyM5NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOS4wMS4wMCNSZWxpZ2lvdXMgb3JkZXJzIHNlcnZpY2VzIzk0LjExLjE5LjAwLjAwCi11bnNwc2M3Izk0LjExLjE5LjAyLjAwI0V2YW5nZWxpY2FsIG1pc3Npb25hcnkgc2VydmljZXMjOTQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTkuMDMuMDAjRWR1Y2F0aW9uYWwgbWlzc2lvbmFyeSBzZXJ2aWNlcyM5NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM5NC4xMS4yMC4wMC4wMCNEZW5vbWluYXRpb25hbCBzZXJ2aWNlcyM5NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMS4yMC4wMS4wMCNIaW5kdWlzbSBzZXJ2aWNlcyM5NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMS4yMC4wMi4wMCNCdWRkaGlzbSBzZXJ2aWNlcyM5NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMS4yMC4wMy4wMCNDaHJpc3RpYW4gc2VydmljZXMjOTQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMjAuMDQuMDAjSXNsYW0gc2VydmljZXMjOTQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMjAuMDUuMDAjSnVkYWlzbSBzZXJ2aWNlcyM5NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMi4wMC4wMC4wMCNDbHVicyM5NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wMC4wMCNTcG9ydCBjbHVicyM5NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wMS4wMCNJY2Ugc3BvcnRzIGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjAyLjAwI0JvYXRpbmcgb3Igc3dpbW1pbmcgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDMuMDAjR3VuIG9yIGh1bnRpbmcgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDQuMDAjT3V0ZG9vciBmaWVsZCBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wNS4wMCNJbmRvb3Igb3Igb3V0ZG9vciBjb3VydCBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wNi4wMCNXaW50ZXIgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDcuMDAjQmVhY2ggb3Igd2F0ZXIgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDguMDAjQ3ljbGluZyBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wOS4wMCNNb3VudGFpbmVlcmluZyBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4xMC4wMCNSYWNpbmcgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMTEuMDAjRmx5aW5nIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjEyLjAwI1Byb2Zlc3Npb25hbCBvciBzZW1pcHJvZmVzc2lvbmFsIHNwb3J0cyBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4xMy4wMCNTdGFkaXVtIGV2ZW50IG9wZXJhdG9yIHNlcnZpY2VzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjE0LjAwI1Nwb3J0IGNsdWIgbWFuYWdlcnMgb3IgcHJvbW90ZXJzIHNlcnZpY2VzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE2LjAwLjAwI0hvYmJ5IGNsdWJzIzk0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEyLjE2LjAxLjAwI1BsYXlpbmcgY2FyZCBob2JieSBjbHVicyM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wMi4wMCNIYW5kY3JhZnRzIGNsdWJzIzk0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE2LjAzLjAwI1BvZXRyeSBvciBsaXRlcmF0dXJlIGhvYmJ5IGNsdWJzIzk0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE2LjA0LjAwI0Nvb2tpbmcgaG9iYnkgY2x1YnMjOTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTYuMDUuMDAjR2FyZGVuaW5nIGhvYmJ5IGNsdWJzIzk0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE2LjA2LjAwI0NvbGxlY3RvciBob2JieSBjbHViIzk0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE2LjA3LjAwI1Njb3V0aW5nIGNsdWIjOTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTcuMDAuMDAjQW1hdGV1cnMgY2x1YnMjOTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTcuMDEuMDAjQW1hdGV1ciBkcmFtYSBjbHVicyBvciBzZXJ2aWNlcyM5NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNy4wMi4wMCNBbWF0ZXVyIG11c2ljIGNsdWJzIG9yIHNlcnZpY2VzIzk0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE3LjAzLjAwI0FtYXRldXIgZGFuY2UgY2x1YnMgb3Igc2VydmljZXMjOTQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTcuMDQuMDAjQW1hdGV1ciBmaW5lIGFydHMgY2x1YnMgb3Igc2VydmljZXMjOTQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTguMDAuMDAjU29jaWFsIGNsdWJzIzk0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEyLjE4LjAxLjAwI1lvdXRoIGNsdWJzIzk0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE4LjAyLjAwI1NlbmlvciBjaXRpemVucyBjbHVicyM5NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xOC4wMy4wMCNTb2NpYWwgZ2F0aGVyaW5nIGNsdWJzIzk0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE4LjA0LjAwI1NvY2lhbCBjbHVicyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzk0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE4LjA1LjAwI1dhciB2ZXRlcmFucyBzb2NpYWwgY2x1YnMjOTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTMuMDAuMDAuMDAjQ2l2aWMgb3JnYW5pemF0aW9ucyBhbmQgYXNzb2NpYXRpb25zIGFuZCBtb3ZlbWVudHMjOTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTUuMDAuMDAjTm9uIGdvdmVybm1lbnRhbCBvcmdhbml6YXRpb25zIzk0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjE1LjAxLjAwI0Vudmlyb25tZW50YWwgbm9uIGdvdmVybm1lbnRhbCBzZXJ2aWNlcyM5NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNS4wMi4wMCNFbWVyZ2VuY3kgcmVsaWVmIG5vbiBnb3Zlcm5tZW50YWwgc2VydmljZXMjOTQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTUuMDMuMDAjVGVjaG5pY2FsIGFzc2lzdGFuY2Ugbm9uIGdvdmVybm1lbnRhbCBzZXJ2aWNlcyM5NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNS4wNC4wMCNEZXZlbG9wbWVudCBhaWQgbm9uIGdvdmVybmVtbnRhbCBzZXJ2aWNlcyM5NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNi4wMC4wMCNDaGFyaXR5IG9yZ2FuaXphdGlvbnMjOTQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDEuMDAjQ2hhcml0eSBvcmdhbml6YXRpb25zIHNoZWx0ZXIgc2VydmljZXMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDIuMDAjRm9vZCByZWxpZWYgc2VydmljZXMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDMuMDAjTGVnYWwgYXNzaXN0YW5jZSBzZXJ2aWNlcyM5NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNi4wNC4wMCNSZXNvdXJjZSBtb2JpbGl6YXRpb24gc2VydmljZXMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDUuMDAjSW50ZXJuYXRpb25hbCBhaWQgYXNzaXN0YW5jZSBzZXJ2aWNlcyM5NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNi4wNi4wMCNPcnBoYW5hZ2Ugb3IgYWRvcHRpb24gc2VydmljZXMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDcuMDAjRWRlcmx5IGFzc2lzdGFuY2Ugb3JnYW5pemF0aW9ucyM5NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNi4wOC4wMCNQcmlzb25lciBhc3Npc3RhbmNlIG9yZ2FuaXphdGlvbnMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTcuMDAuMDAjR3JlZW4gYXNzb2NpYXRpb25zIzk0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjE3LjAxLjAwI1JhZGljYWwgZ3JlZW4gYXNzb2NpYXRpb25zIzk0LjEzLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE3LjAyLjAwI0Vjb2ZlbWluaXN0cyBhc3NvY2lhdGlvbnMjOTQuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTcuMDMuMDAjRWNvbG9naWNhbCBwb2xpdGljYWwgb3JnYW5pemF0aW9ucyM5NC4xMy4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNy4wNC4wMCNHcmVlbiBhY3RpdmlzdHMgbW92ZW1lbnRzIG9yIHNlcnZpY2VzIzk0LjEzLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE4LjAwLjAwI01vdmVtZW50cyM5NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOC4wMS4wMCNHYXkgb3IgbGVzYmlhbiBvciBiaXNleHVhbCBvciB0cmFuc2dlbmRlciBtb3ZlbWVudHMjOTQuMTMuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTguMDIuMDAjQW50aSByYWNpc20gbW92ZW1lbnRzIzk0LjEzLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE4LjAzLjAwI1dvbWVuIGxpYmVyYXRpb24gbW92ZW1lbnRzIzk0LjEzLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE4LjA0LjAwI0ZyYXRlcm5hbCBhc3NvY2lhdGlvbnMjOTQuMTMuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTguMDUuMDAjRXRobmljIG1pbm9yaXRpZXMgY3VsdHVyYWwgcHJlc2VydmF0aW9uIHNlcnZpY2VzIzk0LjEzLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE5LjAwLjAwI0FuaW1hbCBwcm90ZWN0aW9uIGFzc29jaWF0aW9ucyM5NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOS4wMS4wMCNBbmltYWwgbGliZXJhdGlvbiBtb3ZlbWVudHMjOTQuMTMuMTkuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTkuMDIuMDAjRW5kYW5nZXJlZCBzcGVjaWVzIHByb3RlY3Rpb24gYXNzb2NpYXRpb25zIzk0LjEzLjE5LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE5LjAzLjAwI1RocmVhdGVuZWQgYW5pbWFscyBwcm90ZWN0aW9uIGFzc29jaWF0aW9ucyM5NC4xMy4xOS4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wMC4wMCNIdW1hbiByaWdodHMgYWR2b2NhY3kgYW5kIGRlZmVuc2UgYXNzb2NpYXRpb25zIzk0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjIwLjAxLjAwI0NoaWxkcmVuIHJpZ2h0cyBkZWZlbnNlIHNlcnZpY2VzIzk0LjEzLjIwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjIwLjAyLjAwI1ByaXNvbmVycyBkZWZlbnNlIHNlcnZpY2VzIzk0LjEzLjIwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjIwLjAzLjAwI1BoeXNpY2FsIG9yIG1lbnRhbCB0b3J0dXJlIGRlZmVuc2UgYXNzb2NpYXRpb25zIzk0LjEzLjIwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjIwLjA0LjAwI0ZyZWVkb20gb2Ygc3BlZWNoIGRlZmVuc2UgYXNzb2NpYXRpb25zIzk0LjEzLjIwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjIwLjA1LjAwI1ZvdGluZyByaWdodHMgZGVmZW5zZSBhc3NvY2lhdGlvbnMjOTQuMTMuMjAuMDAuMDAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZTlmOWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2UiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04lPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzQ2F0ZWdvcnlUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotPC9zY3JpcHQ+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZUFkdmFuY2VkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzQWR2YW5jZWRGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzdWJRdWVyeUdldCI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4gIAotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JVU0lORVNTX1BVQkxJU0hfU0VSVklDRV9BRFZBTkNFRF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgbm93cmFwIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2Vfd3NkbF91cmwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBub3dyYXAgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcigncHVibGlzaFNlcnZpY2VBZHZhbmNlZCcsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT4pIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSU+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9idXNpbmVzc19wdWJsaXNoX3NlcnZpY2VfYWR2YW5jZV93c2RsX3VybCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIGJvb2xlYW4gdGFibGVIYXNFcnJvcnMgPSAhZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICBTdHJpbmdbXSBzZXJ2aWNlSW50ZXJmYWNlU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFUyIsKG5ldyBCb29sZWFuKHRhYmxlSGFzRXJyb3JzKSkudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKSwicHVibGlzaFNlcnZpY2VBZHZhbmNlZCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoc2VydmljZUludGVyZmFjZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIpOwotICAgU3RyaW5nW10gbmFtZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9OQU1FUyIsIkZPUk1fTEFCRUxfTkFNRSIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuYW1lU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIik7Ci0gICBTdHJpbmdbXSBkZXNjU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OUyIsIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGRlc2NTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYThhMTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gc2VsZWN0ZWROb2RlIG11c3QgYmUgYSBidXNpbmVzcyBub2RlLgotICAgTm9kZSBidXNOb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShidXNOb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSU+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICBzdWJRdWVyeUtleVByb3BlcnR5LnNldFN1YlF1ZXJ5S2V5KHN1YlF1ZXJ5S2V5KTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPCUKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0gICAvLyBidXNpbmVzcyBwYXJlbnQgbm9kZSBtYXkgYmUgZWl0aGVyIHRoZSBwdWJsaXNoZWQgaXRlbXMgZm9sZGVyIG9yIGEgcXVlcnkgbm9kZS4KLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIE5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoYnVzTm9kZSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfQlVTSU5FU1NfUFVCTElTSF9TRVJWSUNFIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgc2VjdGlvbklkcyA9IFsicHVibGlzaFNlcnZpY2VTaW1wbGUiLCJwdWJsaXNoU2VydmljZUFkdmFuY2VkIl07Ci0gIHZhciBzdHlsZUZvcm0gPSAicHVibGlzaFNlcnZpY2VTdHlsZSI7Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2UiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04lPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzQ2F0ZWdvcnlUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMoZm9ybSkKLSAgewotPCUKLSAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPgotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwdWJsaXNoVVJMKSU+IjsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJJZCklPiI7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci08JQotICAgU3RyaW5nIHB1Ymxpc2hTZXJ2aWNlU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbc3R5bGVGb3JtXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT5bPCU9cHVibGlzaFNlcnZpY2VTdHlsZUluZGV4JT5dLmNoZWNrZWQgPSB0cnVlOwotICAgIAotICAgIHZhciBwdWJsaXNoU2VydmljZVNpbXBsZVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT5dKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtID0gcHVibGlzaFNlcnZpY2VTaW1wbGVTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0pOwotICAgIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwpKSU+IjsKLSAgICBwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpKSU+IjsKLSAgICBwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTiU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTikpJT4iOwotICAgIAotICAgIC8vIEFkdmFuY2VkIGZvcm0gZGV0YWlscy4KLSAgICB2YXIgcHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPl0pOwotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybSA9IHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhwdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lc1RhYmxlID0gZ2V0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIpOwotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUgPSBnZXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKSklPiI7Ci08JQotICAgVmVjdG9yIHNlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgVmVjdG9yIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VJbnRlcmZhY2VzICE9IG51bGwpCi0gICB7Ci0gICAgIGlmIChzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPT0gbnVsbCkKLSAgICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUludGVyZmFjZXMuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLGZhbHNlKTsKLSAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkuYWRkRWxlbWVudChzZXJ2aWNlSW50ZXJmYWNlcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlIiw8JT10YXJnZXROb2RlSWQlPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldE5hbWVTdHJpbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh0TW9kZWwuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFksc2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTLHNlcnZpY2VJbnRlcmZhY2VzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFksc2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLSU+Ci08JQotICAgVmVjdG9yIHNlcnZpY2VOYW1lVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICBpZiAoc2VydmljZU5hbWVWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZU5hbWVWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKXNlcnZpY2VOYW1lVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRMYW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKCFmb3JtVG9vbFBJLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3Igc2VydmljZURlc2NyaXB0aW9uVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotICAgaWYgKHNlcnZpY2VEZXNjcmlwdGlvblZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlRGVzY3JpcHRpb25WZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKXNlcnZpY2VEZXNjcmlwdGlvblZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZExhbmd1YWdlSW5wdXRSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKCFmb3JtVG9vbFBJLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRyb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIENhdGVnb3J5QmFnIHNlcnZpY2VDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoc2VydmljZUNhdEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBzZXJ2aWNlQ2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZENhdGVnb3J5Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIpOwotICAgIHNldENhdGVnb3J5Um93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotICAgCi0gICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgewotJT4KLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHVibGlzaFNlcnZpY2VTaW1wbGVBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotPCUKLSAgIH0KLSU+Ci0gICAgc2hvd1B1Ymxpc2hGb3JtKDwlPXB1Ymxpc2hTZXJ2aWNlU3R5bGVJbmRleCU+KTsgICAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNob3dQdWJsaXNoRm9ybShzdHlsZSkKLSAgewotICAgIGNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpOwotICAgIGZvciAodmFyIGk9MDtpPHNlY3Rpb25JZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaSA9PSBzdHlsZSkKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VjdGlvbklkc1tpXSkuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZWxzZQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7ICAgIAotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIiBvblVubG9hZD0iY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCkiPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gInVkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9QVUJMSVNIX1NFUlZJQ0UiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICA8Zm9ybSBuYW1lPSJwdWJsaXNoU2VydmljZVN0eWxlIiBzdHlsZT0ibWFyZ2luLXRvcDowOyI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX0ZPUk0iKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+ICAgICAgICAKLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9zaW1wbGUiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+IiBvbkNsaWNrPSJzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPikiPjxsYWJlbCBmb3I9InJhZGlvX2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9zaW1wbGUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NJTVBMRSIpJT48L2xhYmVsPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19idXNpbmVzc19wdWJsaXNoX3NlcnZpY2VfYWR2YW5jZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19idXNpbmVzc19wdWJsaXNoX3NlcnZpY2VfYWR2YW5jZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fQURWQU5DRUQiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgIDwvZm9ybT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8L2Rpdj4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLTwvc2NyaXB0PiAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWE0ZDkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0icHVibGlzaFNlcnZpY2VTaW1wbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBoYW5kbGVTdWJtaXQodGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX0JVU0lORVNTJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1NfUFVCTElTSF9TRVJWSUNFX1NJTVBMRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VTaW1wbGVBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIG5vd3JhcCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfd3NkbF91cmwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgbm93cmFwIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV1NETEJyb3dzZXIoJ3B1Ymxpc2hTZXJ2aWNlU2ltcGxlJyw8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0UlPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfd3NkbF91cmwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTMgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV9uYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9idXNpbmVzc19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTMgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV9kZXNjIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9idXNpbmVzc19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX2Rlc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04lPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c2luZXNzRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c2luZXNzRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTBhMDlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNpbmVzc0RldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShjdXJyZW50VG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfQlVTSU5FU1NfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotICAgIHZhciBidXNpbmVzc0RldGFpbHNEaXNjb3ZlcnlVUkxzVGFibGUgPSBnZXRUYWJsZSgiYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMcyIpOwotICAgIHZhciBidXNpbmVzc0RldGFpbHNOYW1lc1RhYmxlID0gZ2V0VGFibGUoImJ1c2luZXNzRGV0YWlsc05hbWVzIik7Ci0gICAgdmFyIGJ1c2luZXNzRGV0YWlsc0Rlc2NyaXB0aW9uc1RhYmxlID0gZ2V0VGFibGUoImJ1c2luZXNzRGV0YWlsc0Rlc2NyaXB0aW9ucyIpOwotICAgIHZhciBidXNpbmVzc0RldGFpbHNJZGVudGlmaWVyc1RhYmxlID0gZ2V0VGFibGUoImJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzIik7Ci08JQotICAgVmVjdG9yIGRpc2NvdmVyeVVSTFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLSAgIGlmIChkaXNjb3ZlcnlVUkxWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY292ZXJ5VVJMVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkaXNjb3ZlcnlVUkxWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSAoRGlzY292ZXJ5VVJMKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGJvb2xlYW4gaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLGkpOwotICAgICAgIGJvb2xlYW4gaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3coImJ1c2luZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTHMiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzRGlzY292ZXJ5VVJMUm93KCJidXNpbmVzc0RldGFpbHNEaXNjb3ZlcnlVUkxzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRpc2NvdmVyeVVSTC5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIG5hbWVJbmRleFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICBpZiAobmFtZUluZGV4VmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPG5hbWVJbmRleFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpbmFtZUluZGV4VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSk7Ci0gICAgICAgYm9vbGVhbiBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coImJ1c2luZXNzRGV0YWlsc05hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygiYnVzaW5lc3NEZXRhaWxzTmFtZXMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1uYW1lLmdldExhbmcoKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KGJ1c2luZXNzRGV0YWlsc05hbWVzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3IgZGVzY3JpcHRpb25JbmRleFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpOwotICAgaWYgKGRlc2NyaXB0aW9uSW5kZXhWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25JbmRleFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGVzY3JpcHRpb25JbmRleFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgYm9vbGVhbiBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICBib29sZWFuIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygiYnVzaW5lc3NEZXRhaWxzRGVzY3JpcHRpb25zIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSIpKSU+Iiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coImJ1c2luZXNzRGV0YWlsc0Rlc2NyaXB0aW9ucyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPWRlc2NyaXB0aW9uLmdldExhbmcoKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhidXNpbmVzc0RldGFpbHNEZXNjcmlwdGlvbnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBpZFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICBpZiAoaWRWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8aWRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWlkVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMsaSk7Ci0gICAgICAgYm9vbGVhbiBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3coImJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzIiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0lkZW50aWZpZXJSb3coImJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KGJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JSAgICAgICAKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIGNhdFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLSAgIGlmIChjYXRWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGJvb2xlYW4gaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTLGkpOwotICAgICAgIGJvb2xlYW4gaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNDYXRlZ29yeVJvdygiYnVzaW5lc3NEZXRhaWxzQ2F0ZWdvcmllcyIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNDYXRlZ29yeVJvdygiYnVzaW5lc3NEZXRhaWxzQ2F0ZWdvcmllcyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhidXNpbmVzc0RldGFpbHNDYXRlZ29yaWVzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgICAgIH0gICAgICAgCi0gICAgIH0KLSAgIH0KLQotICAgLy8gQXV0aGVudGljYXRpb24uCi0gICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJJZCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gICAgaWYgKDwlPSFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSU+KQotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1c2luZXNzRGV0YWlsc0F1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotCi0gICAgc2hvd01haW5Gb3JtKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc0RldGFpbHNEaXNjb3ZlcnlVUkxUYWJsZSgiYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuRElTQ09WRVJZVVJMX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRJU0NPVkVSWVVSTF9WSUVXSUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRElTQ09WRVJZVVJMJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNMYW5ndWFnZUlucHV0VGFibGUoImJ1c2luZXNzRGV0YWlsc05hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5OQU1FX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5BTUVfVklFV0lEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJidXNpbmVzc0RldGFpbHNEZXNjcmlwdGlvbnMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX1ZJRVdJRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzSWRlbnRpZmllclRhYmxlKCJidXNpbmVzc0RldGFpbHNJZGVudGlmaWVycyIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0NhdGVnb3J5VGFibGUoImJ1c2luZXNzRGV0YWlsc0NhdGVnb3JpZXMiLGZvcm0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0JVU0lORVNTX0RFVEFJTFMiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVklPiIgdmFsdWU9IjwlPWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpJT4iPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVRBSUxTX0VESVRBQkxFIixzZWxlY3RlZE5vZGUuZ2V0Tm9kZU5hbWUoKSklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JVU0lORVNTX0tFWSIpJT4KLSAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICA8JT1mb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJidXNpbmVzc0RldGFpbHNOYW1lcyIpOwotICAgU3RyaW5nW10gbmFtZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9OQU1FUyIsIkZPUk1fTEFCRUxfTkFNRSIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5hbWVTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJidXNpbmVzc0RldGFpbHNEZXNjcmlwdGlvbnMiKTsKLSAgIFN0cmluZ1tdIGRlc2NTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfREVTQ1JJUFRJT05TIiwiRk9STV9MQUJFTF9ERVNDUklQVElPTiIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkZXNjU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiYnVzaW5lc3NEZXRhaWxzSWRlbnRpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0lkZW50aWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImJ1c2luZXNzRGV0YWlsc0NhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMcyIpOwotICAgQm9vbGVhbiBkaXNjb3ZlcnlVUkxTcGVjaWZpY0luZm8gPSBuZXcgQm9vbGVhbighZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUykpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGRpc2NvdmVyeVVSTFNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNEaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImJ1c2luZXNzRGV0YWlsc0F1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Zvcm0+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci0gIHJlc3VtZVByb3h5TG9hZFBhZ2UoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0dldEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0dldEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRiN2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9HZXRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlciIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXkpOwotICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFN0cmluZyBwYXJlbnRRdWVyeUtleTsKLSAgIGludCBsYXN0U2VwYXJhdG9yUG9zID0gc3ViUXVlcnlLZXkubGFzdEluZGV4T2YoJzonKTsKLSAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID09IC0xKQotICAgICBwYXJlbnRRdWVyeUtleSA9ICIiOwotICAgZWxzZQotICAgICBwYXJlbnRRdWVyeUtleSA9IHN1YlF1ZXJ5S2V5LnN1YnN0cmluZygwLGxhc3RTZXBhcmF0b3JQb3MpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHBhcmVudEZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMocGFyZW50UXVlcnlLZXkpOwotICAgT2JqZWN0IHF1ZXJ5SXRlbVByb3BlcnR5ID0gcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pOwotICAgT2JqZWN0IHF1ZXJ5U3R5bGVCdXMgPSBwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyk7Ci0gICBPYmplY3QgcXVlcnlTdHlsZVNlciA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyk7Ci0gICBPYmplY3QgcXVlcnlTdHlsZVNlckludCA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgSGFzaHRhYmxlIHBhcmVudFF1ZXJ5RGF0YSA9IG5ldyBIYXNodGFibGUoKTsKLSAgIGlmIChxdWVyeUl0ZW1Qcm9wZXJ0eSAhPSBudWxsKQotICAgICBwYXJlbnRRdWVyeURhdGEucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSwgcXVlcnlJdGVtUHJvcGVydHkpOwotICAgaWYgKHF1ZXJ5U3R5bGVCdXMgIT0gbnVsbCkKLSAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsIHF1ZXJ5U3R5bGVCdXMpOwotICAgaWYgKHF1ZXJ5U3R5bGVTZXIgIT0gbnVsbCkKLSAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLCBxdWVyeVN0eWxlU2VyKTsKLSAgIGlmIChxdWVyeVN0eWxlU2VySW50ICE9IG51bGwpCi0gICAgIHBhcmVudFF1ZXJ5RGF0YS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsIHF1ZXJ5U3R5bGVTZXJJbnQpOwotICAgU3ViUXVlcnlUcmFuc2ZlclRhcmdldCBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0ID0gbmV3IFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQoc2VsZWN0ZWROb2RlLHN1YlF1ZXJ5S2V5LHBhcmVudFF1ZXJ5RGF0YSk7Ci0gICB0cmVlRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFVERElNb2RlbENvbnN0YW50cy5TVUJRVUVSWV9UUkFOU0ZFUl9UQVJHRVQsc3ViUXVlcnlUcmFuc2ZlclRhcmdldCk7Ci0gICBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLmFkZEVsZW1lbnQoc3ViUXVlcnlUcmFuc2ZlclRhcmdldCk7Ci0gICBib29sZWFuIGhhc1RhcmdldCA9IHRydWU7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9HRVRfRk9STSIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlCi0gICBpbnQgcXVlcnlJdGVtID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKSk7Ci0gICBIYXNodGFibGUgYWxsVW5pcXVlTm9kZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICBWZWN0b3IgYWxsTm9kZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSlub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBzd2l0Y2ggKHF1ZXJ5SXRlbSkKLSAgIHsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICByZWdOb2RlLmdldEFsbEJ1c2luZXNzTm9kZXMoYWxsTm9kZXMpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICByZWdOb2RlLmdldEFsbFNlcnZpY2VOb2RlcyhhbGxOb2Rlcyk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgZGVmYXVsdDoKLSAgICAgICByZWdOb2RlLmdldEFsbFNlcnZpY2VJbnRlcmZhY2VOb2RlcyhhbGxOb2Rlcyk7Ci0gICB9Ci0gICAKLSAgIGZvciAoaW50IGk9MDtpPGFsbE5vZGVzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIE5vZGUgbm9kZSA9IChOb2RlKWFsbE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgYWxsVW5pcXVlTm9kZXMucHV0KG5vZGUuZ2V0VHJlZUVsZW1lbnQoKS5nZXRLZXkoKSxub2RlKTsKLSAgIH0KLQotICAgaWYgKCFhbGxVbmlxdWVOb2Rlcy5pc0VtcHR5KCkpCi0gICB7Ci0gICAgIE9iamVjdFtdIGl0ZW1Ob2RlcyA9IGFsbFVuaXF1ZU5vZGVzLnZhbHVlcygpLnRvQXJyYXkoKTsKLSAgICAgUXVpY2tTb3J0LnNvcnQoaXRlbU5vZGVzLDAsaXRlbU5vZGVzLmxlbmd0aC0xKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8aXRlbU5vZGVzLmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBOb2RlIGl0ZW1Ob2RlID0gKE5vZGUpaXRlbU5vZGVzW2ldOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoaXRlbU5vZGUuZ2V0Tm9kZUlkKCksZmFsc2UpOwotICAgICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBudWxsOwotICAgICAgIGlmIChpdGVtTm9kZSBpbnN0YW5jZW9mIEJ1c2luZXNzTm9kZSkKLSAgICAgICB7Ci0gICAgICAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpaXRlbU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgICAgICAgbmFtZSA9IGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgICBkZXNjcmlwdGlvbiA9IGJlLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICAgIH0KLSAgICAgICBlbHNlIGlmIChpdGVtTm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VOb2RlKQotICAgICAgIHsKLSAgICAgICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KWl0ZW1Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKTsKLSAgICAgICAgIG5hbWUgPSBicy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICAgZGVzY3JpcHRpb24gPSBicy5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgICB9Ci0gICAgICAgZWxzZSBpZiAoaXRlbU5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlTm9kZSkKLSAgICAgICB7Ci0gICAgICAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpaXRlbU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgIFRNb2RlbCB0TW9kZWwgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCk7Ci0gICAgICAgICBuYW1lID0gdE1vZGVsLmdldE5hbWVTdHJpbmcoKTsKLSAgICAgICAgIGRlc2NyaXB0aW9uID0gdE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICAgIH0KLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJHZXQiLDwlPWl0ZW1Ob2RlLmdldE5vZGVJZCgpJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24pJT4iKTsKLTwlCi0gICAgIH0KLSU+Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvclJldHVybigpKSklPiI7Ci08JQotICAgfQotJT4KLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTxkaXYgaWQ9ImNvbnRlbnQiPgotICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUIik7Ci0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvZmluZF9oaWdobGlnaHRlZC5naWYiOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2Zvcm1zL3Jlc3VsdHNmb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8Zm9ybSB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIFN0cmluZyB0YWJsZVRpdGxlOwotICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICB7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9CVVNJTkVTU0VTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICBkZWZhdWx0OgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRV9JTlRFUkZBQ0VTIik7Ci0gICB9Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSB7dGFibGVUaXRsZSwiIn07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiR2V0Iik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMob3RoZXJQcm9wZXJ0aWVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvcmVzdWx0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1RSQU5TRkVSIiklPiIgb25DbGljaz0idHJhbnNmZXJTZWxlY3Rpb25zKCdHZXQnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRUZSRVNIIiklPiIgb25DbGljaz0icmVmcmVzaFNlbGVjdGlvbnMoJ0dldCcsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQUREX1RPX0ZBVk9SSVRFUyIpJT4iIG9uQ2xpY2s9ImFkZFNlbGVjdGlvbnNUb0Zhdm9yaXRlcygnR2V0Jyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9DTEVBUiIpJT4iIG9uQ2xpY2s9ImNsZWFyU2VsZWN0aW9ucygnR2V0Jyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC9mb3JtPgotICA8L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0l0ZW1zU3VtbWFyeUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0l0ZW1zU3VtbWFyeUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2ZkYWNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9JdGVtc1N1bW1hcnlGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgaW50IHF1ZXJ5SXRlbSA9IEludGVnZXIucGFyc2VJbnQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKSk7Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgVG9vbCBzZWxlY3RlZFRvb2wgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBWZWN0b3Igc3VtbWFyeU5vZGVzID0gbmV3IFZlY3RvcigpOwotICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgUXVlcnlQYXJlbnRFbGVtZW50KQotICAgICByZWdOb2RlLmdldERpc2NvdmVyZWROb2RlcyhzdW1tYXJ5Tm9kZXMscXVlcnlJdGVtKTsKLSAgIGVsc2UgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgUHVibGlzaGVkSXRlbXNFbGVtZW50KQotICAgewotICAgICBzd2l0Y2ggKHF1ZXJ5SXRlbSkKLSAgICAgewotICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgICByZWdOb2RlLmdldFB1Ymxpc2hlZEJ1c2luZXNzTm9kZXMoc3VtbWFyeU5vZGVzKTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgICAgcmVnTm9kZS5nZXRQdWJsaXNoZWRTZXJ2aWNlTm9kZXMoc3VtbWFyeU5vZGVzKTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgICBkZWZhdWx0OgotICAgICAgICAgcmVnTm9kZS5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlTm9kZXMoc3VtbWFyeU5vZGVzKTsKLSAgICAgfQotICAgfQotICAgYm9vbGVhbiBoYXNUYXJnZXQgPSBmYWxzZTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0lURU1TX1NVTU1BUlkiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvcmVzdWx0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci08JSAgIAotICAgSGFzaHRhYmxlIGFsbFVuaXF1ZU5vZGVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgZm9yIChpbnQgaT0wO2k8c3VtbWFyeU5vZGVzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIE5vZGUgc3VtbWFyeU5vZGUgPSAoTm9kZSlzdW1tYXJ5Tm9kZXMuZWxlbWVudEF0KGkpOwotICAgICBhbGxVbmlxdWVOb2Rlcy5wdXQoc3VtbWFyeU5vZGUuZ2V0VHJlZUVsZW1lbnQoKS5nZXRLZXkoKSxzdW1tYXJ5Tm9kZSk7Ci0gICB9Ci0gICAKLSAgIGlmICghYWxsVW5pcXVlTm9kZXMuaXNFbXB0eSgpKQotICAgewotICAgICBPYmplY3RbXSBpdGVtTm9kZXMgPSBhbGxVbmlxdWVOb2Rlcy52YWx1ZXMoKS50b0FycmF5KCk7Ci0gICAgIFF1aWNrU29ydC5zb3J0KGl0ZW1Ob2RlcywwLGl0ZW1Ob2Rlcy5sZW5ndGgtMSk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGl0ZW1Ob2Rlcy5sZW5ndGg7aSsrKQotICAgICB7Ci0gICAgICAgTm9kZSBpdGVtTm9kZSA9IChOb2RlKWl0ZW1Ob2Rlc1tpXTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGl0ZW1Ob2RlLmdldE5vZGVJZCgpLGZhbHNlKTsKLSAgICAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gbnVsbDsKLSAgICAgICBpZiAoaXRlbU5vZGUgaW5zdGFuY2VvZiBRdWVyeU5vZGUpCi0gICAgICAgewotICAgICAgICAgUXVlcnlFbGVtZW50IHF1ZXJ5RWxlbWVudCA9IChRdWVyeUVsZW1lbnQpaXRlbU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgIG5hbWUgPSBxdWVyeUVsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgICAgU3RyaW5nIG51bWJlck9mQ2hpbGROb2Rlc1N0cmluZyA9IFN0cmluZy52YWx1ZU9mKGl0ZW1Ob2RlLmdldENoaWxkTm9kZXMoKS5zaXplKCkpOwotICAgICAgICAgc3dpdGNoIChxdWVyeUVsZW1lbnQuZ2V0UXVlcnlUeXBlKCkpCi0gICAgICAgICB7Ci0gICAgICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NFU19GT1VORCIsbnVtYmVyT2ZDaGlsZE5vZGVzU3RyaW5nKTsKLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRVNfRk9VTkQiLG51bWJlck9mQ2hpbGROb2Rlc1N0cmluZyk7Ci0gICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiLG51bWJlck9mQ2hpbGROb2Rlc1N0cmluZyk7Ci0gICAgICAgICB9ICAgICAgICAgICAgIAotICAgICAgIH0KLSAgICAgICBlbHNlIGlmIChpdGVtTm9kZSBpbnN0YW5jZW9mIEJ1c2luZXNzTm9kZSkKLSAgICAgICB7Ci0gICAgICAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpaXRlbU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgICAgICAgbmFtZSA9IGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgICBkZXNjcmlwdGlvbiA9IGJlLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICAgIH0KLSAgICAgICBlbHNlIGlmIChpdGVtTm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VOb2RlKQotICAgICAgIHsKLSAgICAgICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KWl0ZW1Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKTsKLSAgICAgICAgIG5hbWUgPSBicy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICAgZGVzY3JpcHRpb24gPSBicy5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgICB9Ci0gICAgICAgZWxzZSBpZiAoaXRlbU5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlTm9kZSkKLSAgICAgICB7Ci0gICAgICAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpaXRlbU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgIFRNb2RlbCB0TW9kZWwgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCk7Ci0gICAgICAgICBuYW1lID0gdE1vZGVsLmdldE5hbWVTdHJpbmcoKTsKLSAgICAgICAgIGRlc2NyaXB0aW9uID0gdE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICAgIH0KLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJTdW1tYXJ5Iiw8JT1pdGVtTm9kZS5nZXROb2RlSWQoKSU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTxkaXYgaWQ9ImNvbnRlbnQiPgotICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZSA9IHNlbGVjdGVkVG9vbC5nZXRBbHRUZXh0KCk7Ci0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSBzZWxlY3RlZFRvb2wuZ2V0SGlnaGxpZ2h0ZWRJbWFnZUxpbmsoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9mb3Jtcy9yZXN1bHRzZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPGZvcm0gdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBTdHJpbmcgdGFibGVUaXRsZTsKLSAgIHN3aXRjaCAocXVlcnlJdGVtKQotICAgewotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9RVUVSSUVTOgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9RVUVSSUVTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9CVVNJTkVTU0VTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICBkZWZhdWx0OgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRV9JTlRFUkZBQ0VTIik7Ci0gICB9Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSB7dGFibGVUaXRsZSwiIn07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiU3VtbWFyeSIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG90aGVyUHJvcGVydGllcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3Jlc3VsdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fUkVGUkVTSCIpJT4iIG9uQ2xpY2s9InJlZnJlc2hTZWxlY3Rpb25zKCdTdW1tYXJ5Jyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotPCUKLSAgIGlmIChxdWVyeUl0ZW0gIT0gVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1FVRVJJRVMpCi0gICB7Ci0lPiAgICAgICAgICAgICAKLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQUREX1RPX0ZBVk9SSVRFUyIpJT4iIG9uQ2xpY2s9ImFkZFNlbGVjdGlvbnNUb0Zhdm9yaXRlcygnU3VtbWFyeScsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLTwlCi0gICB9Ci0lPiAgICAgICAgICAgICAKLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQ0xFQVIiKSU+IiBvbkNsaWNrPSJjbGVhclNlbGVjdGlvbnMoJ1N1bW1hcnknLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICA8L2Zvcm0+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9Mb2dpblVkZGlGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9Mb2dpblVkZGlGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVkMjRiOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTG9naW5VZGRpRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAvLyBzZWxlY3RlZE5vZGUgbXVzdCBiZSBhIHJlZ2lzdHJ5IG5vZGUuCi0gICBOb2RlIHJlZ05vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgcmVnTm9kZS5nZXRUb29sTWFuYWdlcigpLnNldFNlbGVjdGVkVG9vbElkKDEpOwotICAgTGlzdCB0b29scyA9IHJlZ05vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0VG9vbHMoKTsKLSAgIEl0ZXJhdG9yIGl0ZXIgPSB0b29scy5pdGVyYXRvcigpOwotICAgVG9vbCB0ID0gbnVsbDsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShyZWdOb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT5OZXcgTG9naW4gRm9ybTwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNob3dNYWluRm9ybShwdWJsaXNoVmFsdWUpCi0gIHsKLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiA+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gInVkZGkvaW1hZ2VzL3B1Ymxpc2hfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9ICJMb2dpbiI7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwvZGl2PgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xvZ2luX2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2hvd01haW5Gb3JtKDApOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL01hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI4Zjk0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDA5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnJlc3BvbnNlLkNvbXBsZXRpb25TdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBTdHJpbmcgcHViQXNzZXJ0aW9uRm9ybSA9ICJzaG93UHVibGlzaGVyQXNzZXJ0aW9uc0Zvcm0iOwotICAgU3RyaW5nIHB1Ymxpc2hlckFzc2VydGlvbnNCdXNpbmVzcyA9ICJwdWJsaXNoZXJBc3NlcnRpb25zQnVzaW5lc3MiOwotCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7ICAgCi0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgU3RyaW5nIGRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlID0gImRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlIjsKLSAgIFN0cmluZyB4ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUgPSAieGRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlIjsKLSU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgIHN1YlF1ZXJ5S2V5UHJvcGVydHkuc2V0U3ViUXVlcnlLZXkoc3ViUXVlcnlLZXkpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08JQotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXRhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvcmVzdWx0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci08JQotICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgIHsKLSAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocHVibGlzaFVSTCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodXNlcklkKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiPCU9cHViQXNzZXJ0aW9uRm9ybSU+Iikuc3R5bGUuZGlzcGxheSA9ICIiOwotPCUKLSAgIH0KLSAgIAotICAgVmVjdG9yIGJ1c2luZXNzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TKTsKLSAgIExpc3RNYW5hZ2VyIGJ1c2luZXNzQ29weSA9IChMaXN0TWFuYWdlcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TX0NPUFkpOwotICAgaWYgKGJ1c2luZXNzICE9IG51bGwpCi0gICB7Ci0gICAgIGlmIChidXNpbmVzc0NvcHkgPT0gbnVsbCkKLSAgICAgICBidXNpbmVzc0NvcHkgPSBuZXcgTGlzdE1hbmFnZXIoKTsKLSAgICAgZWxzZQotICAgICAgIGJ1c2luZXNzQ29weS5jbGVhcigpOwotICAgICBmb3IgKGludCBpPTA7aTxidXNpbmVzcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpYnVzaW5lc3MuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyxmYWxzZSk7Ci0gICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgYnVzaW5lc3NDb3B5LmFkZChsaXN0RWxlbWVudCk7Ci0lPgotICAgIGFkZFB1Ymxpc2hlckFzc2VydGlvblJlc3VsdFJvdygiPCU9cHVibGlzaGVyQXNzZXJ0aW9uc0J1c2luZXNzJT4iLDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OU19DT1BZLGJ1c2luZXNzQ29weSk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIGJ1c2luZXNzID0gbmV3IFZlY3RvcigpOwotICAgICBidXNpbmVzc0NvcHkgPSBuZXcgTGlzdE1hbmFnZXIoKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OUyxidXNpbmVzcyk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlNfQ09QWSxidXNpbmVzc0NvcHkpOwotICAgfQotJT4KLSAgfQotCi0gIGZ1bmN0aW9uIHBvcHVsYXRlQXNzZXJ0aW9uVGFibGUoKSB7Ci08JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0VsZW1lbnQpCi0gICAgewotICAgICAgTGlzdE1hbmFnZXIgcHViQXNzZXJ0aW9ucyA9ICgoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0UHVibGlzaGVyQXNzZXJ0aW9ucygpOwotICAgICAgaWYgKHB1YkFzc2VydGlvbnMgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gYWN0aW9uID0gbmV3IFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgICBhY3Rpb24ucnVuKCk7Ci0lPgotICAgICAgICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08JQotICAgICAgICBwdWJBc3NlcnRpb25zID0gKChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRQdWJsaXNoZXJBc3NlcnRpb25zKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YkFzc2VydGlvbnMgPSAoKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldFB1Ymxpc2hlckFzc2VydGlvbnMoKTsKLSAgICAgIEVudW1lcmF0aW9uIGUgPSAoKHB1YkFzc2VydGlvbnMgIT0gbnVsbCkgPyBwdWJBc3NlcnRpb25zLmdldExpc3RFbGVtZW50cygpIDogbnVsbCk7Ci0gICAgICB3aGlsZSAoZSAhPSBudWxsICYmIGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxlID0gKExpc3RFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCBwdWJBc3NlcnRpb25FbGVtZW50ID0gKFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGludCB2aWV3SWQgPSBsZS5nZXRWaWV3SWQoKTsKLSAgICAgICAgU3RyaW5nIGRpcmVjdGlvbjsKLSAgICAgICAgaWYgKCgoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpLmVxdWFscyhwdWJBc3NlcnRpb25FbGVtZW50LmdldEZyb21LZXkoKSkpCi0gICAgICAgICAgZGlyZWN0aW9uID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0FTU0VSVElPTl9ESVJFQ1RJT05fRlJPTSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZGlyZWN0aW9uID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0FTU0VSVElPTl9ESVJFQ1RJT05fVE8iKTsKLSAgICAgICAgTGlzdEVsZW1lbnQgc3AgPSAoTGlzdEVsZW1lbnQpcHViQXNzZXJ0aW9uRWxlbWVudC5nZXRTZXJ2aWNlUHJvdmlkZXIoKTsKLSAgICAgICAgaW50IHRhcmdldE5vZGVJZCA9IHNwLmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gc3AuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBzcC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICAgaW50IHN1YlF1ZXJ5SXRlbUlkID0gcHViQXNzZXJ0aW9uRWxlbWVudC5nZXRTdWJRdWVyeUl0ZW1JZCgpOwotICAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfRVhJU1RJTkdfUFVCTElTSEVSX0FTU0VSVElPTlMsc3ViUXVlcnlJdGVtSWQsVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMsZmFsc2UpOwotICAgICAgICBTdHJpbmcgbmFtZSA9ICgoQnVzaW5lc3NFbnRpdHkpc3AuZ2V0T2JqZWN0KCkpLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgIFN0cmluZyBkZXNjID0gKChCdXNpbmVzc0VudGl0eSlzcC5nZXRPYmplY3QoKSkuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgICAgIFN0cmluZyBzdGF0dXMgPSBwdWJBc3NlcnRpb25FbGVtZW50LmdldFN0YXR1cygpOwotICAgICAgICBTdHJpbmcgdHlwZSA9IHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0S2V5ZWRSZWYoKS5nZXRLZXlWYWx1ZSgpOwotJT4KLSAgICAgIGFkZEFzc2VydGlvbigiPCU9ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUlPiIsPCU9dmlld0lkJT4sIjwlPWRpcmVjdGlvbiU+IiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjKSU+IiwiPCU9c3RhdHVzJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodHlwZSklPiIpOwotPCUKLSAgICAgIH0KLSAgICB9Ci0lPgotICB9Ci0KLSAgZnVuY3Rpb24gYWRkQXNzZXJ0aW9uKHRhYmxlQ29udGFpbmVySWQsdmlld0lkLGRpcmVjdGlvbix1cmwsbmFtZSxkZXNjLHN0YXR1cyx0eXBlKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW42ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgcm93Q2hlY2tib3gubmFtZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1ZJRVdJRCU+IjsKLSAgICByb3dDaGVja2JveC52YWx1ZSA9IHZpZXdJZDsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1RISVNfQlVTSU5FU1MiKSU+IikpOwotCi0gICAgY29sdW1uMi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkaXJlY3Rpb24pKTsKLQotICAgIHZhciBuYW1lRGV0YWlsc0xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgbmFtZURldGFpbHNMaW5rLmhyZWYgPSB1cmw7Ci0gICAgbmFtZURldGFpbHNMaW5rLnRhcmdldCA9ICI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iOwotICAgIG5hbWVEZXRhaWxzTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuYW1lKSk7Ci0gICAgY29sdW1uMy5hcHBlbmRDaGlsZChuYW1lRGV0YWlsc0xpbmspOwotCi0gICAgY29sdW1uNC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhkZXNjKSkpOwotCi0gICAgY29sdW1uNS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdGF0dXMpKTsKLQotICAgIGNvbHVtbjYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHlwZSkpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMy5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uNS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uNi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjMpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW40KTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjYpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotCi0gIH0KLQotICBmdW5jdGlvbiBhZGRQdWJsaXNoZXJBc3NlcnRpb25SZXN1bHRSb3codGFibGVDb250YWluZXJJZCxub2RlSWQsdXJsLG5hbWUsZGVzY3JpcHRpb24pCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW40ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixub2RlSWQpKTsKLQotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1RISVNfQlVTSU5FU1MiKSU+IikpOwotCi0gICAgdmFyIGRpcmVjdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIGRpcmVjdGlvbi5pZCA9ICJsYWJlbF9wdWJsaXNoZXJfYXNzZXJ0aW9uX2RpcmVjdGlvbiI7Ci0gICAgZGlyZWN0aW9uLm5hbWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19ESVJFQ1RJT04lPiI7Ci0gICAgZGlyZWN0aW9uLmNsYXNzTmFtZSA9ICJzZWxlY3RsaXN0IjsKLSAgICBkaXJlY3Rpb24ub3B0aW9uc1swXSA9IG5ldyBPcHRpb24oIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BU1NFUlRJT05fRElSRUNUSU9OX0ZST00iKSU+IiwgIjwlPVN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuRElSRUNUSU9OX0ZST00pJT4iKTsKLSAgICBkaXJlY3Rpb24ub3B0aW9uc1sxXSA9IG5ldyBPcHRpb24oIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BU1NFUlRJT05fRElSRUNUSU9OX1RPIiklPiIsICI8JT1TdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLkRJUkVDVElPTl9UTyklPiIpOwotICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQoZGlyZWN0aW9uKTsKLQotICAgIHZhciBuYW1lRGV0YWlsc0xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgbmFtZURldGFpbHNMaW5rLmhyZWYgPSB1cmw7Ci0gICAgbmFtZURldGFpbHNMaW5rLnRhcmdldCA9ICI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iOwotICAgIG5hbWVEZXRhaWxzTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuYW1lKSk7Ci0gICAgY29sdW1uMy5hcHBlbmRDaGlsZChuYW1lRGV0YWlsc0xpbmspOwotCi0gICAgY29sdW1uNC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhkZXNjcmlwdGlvbikpKTsKLQotICAgIHZhciBhc3NlcnRpb25UeXBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgYXNzZXJ0aW9uVHlwZS5pZCA9ICJsYWJlbF9wdWJsaXNoZXJfYXNzZXJ0aW9uX3R5cGUiOwotICAgIGFzc2VydGlvblR5cGUubmFtZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEUlPiI7Ci0gICAgYXNzZXJ0aW9uVHlwZS5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgYXNzZXJ0aW9uVHlwZS5vcHRpb25zWzBdID0gbmV3IE9wdGlvbigiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0FTU0VSVElPTl9UWVBFX1BBUkVOVF9DSElMRCIpJT4iLCAiPCU9U3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFX1BBUkVOVF9DSElMRCklPiIpOwotICAgIGFzc2VydGlvblR5cGUub3B0aW9uc1sxXSA9IG5ldyBPcHRpb24oIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BU1NFUlRJT05fVFlQRV9QRUVSX1RPX1BFRVIiKSU+IiwgIjwlPVN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRV9QRUVSX1RPX1BFRVIpJT4iKTsKLSAgICBhc3NlcnRpb25UeXBlLm9wdGlvbnNbMl0gPSBuZXcgT3B0aW9uKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQVNTRVJUSU9OX1RZUEVfSURFTlRJVFkiKSU+IiwgIjwlPVN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRV9JREVOVElUWSklPiIpOwotICAgIGNvbHVtbjUuYXBwZW5kQ2hpbGQoYXNzZXJ0aW9uVHlwZSk7Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW40LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW41LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjQpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW41KTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdChmb3JtLGxvY2F0aW9uKQotICB7Ci0gICAgZm9ybS5hY3Rpb24gPSBsb2NhdGlvbjsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgiPCU9cHVibGlzaGVyQXNzZXJ0aW9uc0J1c2luZXNzJT4iLCAiPCU9VURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQlPiIsIGZvcm0sIGZhbHNlKTsKLSAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gY2hlY2tUYWJsZUVudHJpZXNBbmRTdWJtaXQodGFibGVDb250YWluZXJJZCxmb3JtLGxvY2F0aW9uKQotICB7Ci0gICAgaWYgKGdldE51bWJlck9mU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkKSA+IDApIHsKLSAgICAgIHNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdChmb3JtLGxvY2F0aW9uKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYWxlcnQoIjwlPWNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSU+Iik7Ci0gIH0KLQotICBmdW5jdGlvbiBjaGVja1RhYmxlU2l6ZUFuZFN1Ym1pdCh0YWJsZUNvbnRhaW5lcklkLGZvcm0sbG9jYXRpb24pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAodGFibGUucm93cy5sZW5ndGggPiBudW1iZXJPZkhlYWRlclJvd3MpIHsKLSAgICAgIHNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdChmb3JtLGxvY2F0aW9uKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYWxlcnQoIjwlPWNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSU+Iik7Ci0gIH0KLQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiIgb25VbmxvYWQ9ImNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGRpdiBpZD0icHVibGlzaGVyQXNzZXJ0aW9ucyI+Ci0gICAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1Nob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQlPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLQotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ1ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9NQU5BR0VfUFVCTElTSEVSX0FTU0VSVElPTlMiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTAlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQU5BR0VfUFVCTElTSEVSX0FTU0VSVElPTlNfREVTQyIpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4nLCc8JT14ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9BU1NFUlRJT05TIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9KChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRCdXNpbmVzc0VudGl0eSgpLmdldERlZmF1bHROYW1lU3RyaW5nKCklPjwvdGg+Ci0gICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjxsYWJlbCBmb3I9ImxhYmVsX3B1Ymxpc2hlcl9hc3NlcnRpb25fZGlyZWN0aW9uIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVJFQ1RJT04iKSU+PC9sYWJlbD48L3RoPgotICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTUyIpJT48L3RoPgotICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpJT48L3RoPgotICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TVEFUVVMiKSU+PC90aD4KLSAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PGxhYmVsIGZvcj0ibGFiZWxfcHVibGlzaGVyX2Fzc2VydGlvbl90eXBlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BU1NFUlRJT05fVFlQRSIpJT48L2xhYmVsPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHRhYmxlIHdpZHRoPSI5MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTkNPTVBMRVRFX0FTU0VSVElPTlNfVklTSUJJTElUWV9ERVNDIiklPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLQotPCUKLSAgIGJvb2xlYW4gdGFibGVIYXNFcnJvcnMgPSAhZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMpOwotICAgU3RyaW5nW10gYnVzU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0JVU0lORVNTRVMiLChuZXcgQm9vbGVhbih0YWJsZUhhc0Vycm9ycykpLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpLCJwdWJsaXNoZXJBc3NlcnRpb25zIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQocHVibGlzaGVyQXNzZXJ0aW9uc0J1c2luZXNzKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhidXNTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c1B1Ymxpc2hlckFzc2VydGlvbnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKHB1YkFzc2VydGlvbkZvcm0pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSJhdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9TSE9XX0FMTF9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCh0aGlzLmZvcm0sJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1Nob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcCIpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9DT01QTEVURV9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpJT4iIG9uQ2xpY2s9ImNoZWNrVGFibGVFbnRyaWVzQW5kU3VibWl0KCc8JT1kaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+Jyx0aGlzLmZvcm0sJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AiKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TIiklPiIgb25DbGljaz0iY2hlY2tUYWJsZVNpemVBbmRTdWJtaXQoJzwlPXB1Ymxpc2hlckFzc2VydGlvbnNCdXNpbmVzcyU+Jyx0aGlzLmZvcm0sJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0FkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIikpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1JFTU9WRV9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpJT4iIG9uQ2xpY2s9ImNoZWNrVGFibGVFbnRyaWVzQW5kU3VibWl0KCc8JT1kaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+Jyx0aGlzLmZvcm0sJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIikpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICA8L2Zvcm0+Ci0KLSAgICA8L2Rpdj4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcG9wdWxhdGVBc3NlcnRpb25UYWJsZSgpOwotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM2MDllZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBTdHJpbmcgc2sgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgIHN1YlF1ZXJ5S2V5UHJvcGVydHkuc2V0U3ViUXVlcnlLZXkoc2spOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3Jlc3VsdHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotPCUKLSAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0gICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJJZCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0F1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotPCUKLSAgIH0KLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5KTsKLSAgIFZlY3RvciByZWZlcmVuY2VkU2VydmljZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9SRUZFUkVOQ0VEX1NFUlZJQ0VTKTsKLSAgIGlmIChyZWZlcmVuY2VkU2VydmljZXMgPT0gbnVsbCkKLSAgIHsKLSAgICAgcmVmZXJlbmNlZFNlcnZpY2VzID0gbmV3IFZlY3RvcigpOwotICAgICBCdXNpbmVzc0VudGl0eSBidXNpbmVzc0VudGl0eSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLSAgICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gYnVzaW5lc3NFbnRpdHkuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgQnVzaW5lc3NTZXJ2aWNlcyBidXNpbmVzc1N2Y3MgPSBidXNpbmVzc0VudGl0eS5nZXRCdXNpbmVzc1NlcnZpY2VzKCk7Ci0gICAgIGlmIChidXNpbmVzc1N2Y3MgIT0gbnVsbCkKLSAgICAgewotICAgICAgIFZlY3RvciBidXNpbmVzc1N2Y1ZlY3RvciA9IGJ1c2luZXNzU3Zjcy5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICAgICBmb3IgKGludCBpPTA7aTxidXNpbmVzc1N2Y1ZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgIHsKLSAgICAgICAgIEJ1c2luZXNzU2VydmljZSBidXNTZXJ2aWNlID0gKEJ1c2luZXNzU2VydmljZSlidXNpbmVzc1N2Y1ZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICBpZiAoIWJ1c1NlcnZpY2UuZ2V0QnVzaW5lc3NLZXkoKS5lcXVhbHMoYnVzaW5lc3NLZXkpKQotICAgICAgICAgewotICAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChidXNTZXJ2aWNlKTsKLSAgICAgICAgICAgcmVmZXJlbmNlZFNlcnZpY2VzLmFkZEVsZW1lbnQobGlzdEVsZW1lbnQpOwotICAgICAgICAgfQotICAgICAgIH0KLSAgICAgfQotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfUkVGRVJFTkNFRF9TRVJWSUNFUyxyZWZlcmVuY2VkU2VydmljZXMpOwotICAgfQotCi0gICBmb3IgKGludCBpPTA7aTxyZWZlcmVuY2VkU2VydmljZXMuc2l6ZSgpO2krKykKLSAgIHsKLSAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpcmVmZXJlbmNlZFNlcnZpY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5LFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfUkVGRVJFTkNFRF9TRVJWSUNFUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyxmYWxzZSk7Ci0gICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgIFN0cmluZyBuYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gYnMuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzUmVmZXJlbmNlcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24pJT4iKTsKLTwlCi0gICB9Ci0KLSAgIFZlY3RvciBzZXJ2aWNlcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NFUlZJQ0VTKTsKLSAgIGlmIChzZXJ2aWNlcyAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZXMuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NFUlZJQ0VTLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTLGZhbHNlKTsKLSAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIFN0cmluZyBuYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBicy5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNTZXJ2aWNlcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24pJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzUmVmZXJlbmNlVGFibGUodGFibGVDb250YWluZXJJZCxpbnB1dE5hbWUsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBpbnB1dHMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KGlucHV0TmFtZSxpbnB1dHMuaXRlbSgwKS5jaGVja2VkKSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1JlZmVyZW5jZVRhYmxlKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNSZWZlcmVuY2VzIiwiPCU9VURESUFjdGlvbklucHV0cy5SRUZFUkVOQ0VEX1NFUlZJQ0VfU0VMRUNUX1NUQVRFJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNTZXJ2aWNlcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0UlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBmb3JtLnN1Ym1pdCgpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NBZGRTZXJ2aWNlcyhmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1NlcnZpY2VzIik7Ci0gICAgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID09IG51bWJlck9mSGVhZGVyUm93cykKLSAgICAgIGFsZXJ0KCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TRVJWSUNFUyIpKSU+Iik7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT04lPi52YWx1ZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTl9BREQlPiI7Ci0gICAgICBwcm9jZXNzRm9ybShmb3JtKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzUmVtb3ZlUmVmZXJlbmNlcyhmb3JtKQotICB7Ci0gICAgdmFyIG51bWJlck9mU2VsZWN0aW9ucyA9IGdldE51bWJlck9mU2VsZWN0aW9ucygibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzUmVmZXJlbmNlcyIpOwotICAgIGlmIChnZXROdW1iZXJPZlNlbGVjdGlvbnMoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1JlZmVyZW5jZXMiKSA9PSAwKQotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1JFRkVSRU5DRV9TRUxFQ1RFRCIpKSU+Iik7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT04lPi52YWx1ZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTl9SRU1PVkUlPiI7Ci0gICAgICBwcm9jZXNzRm9ybShmb3JtKTsKLSAgICB9Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8ZGl2IGlkPSJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXMiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ1ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX01BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHN0eWxlPSJtYXJnaW4tdG9wOjA7Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9IjkwJSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfREVTQyIpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICBTdHJpbmdbXSBwcm9qZWN0aW9uc1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9SRUZFUkVOQ0VEX1NFUlZJQ0VTIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSwibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1JFRkVSRU5DRURfU0VSVklDRVN9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNSZWZlcmVuY2VzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMocHJvamVjdGlvbnNTcGVjaWZpY0luZm8pOwotICAgc2VjdGlvbkhlYWRlckluZm8uZW5hYmxlRHluYW1pYyhmYWxzZSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBTdHJpbmdbXSBzZXJ2aWNlc1NwZWNpZmljSW5mbyA9IHsiRk9STV9PUFRJT05fU0VSVklDRVMiLEJvb2xlYW4uRkFMU0UudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpLCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXMiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0VSVklDRVN9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNTZXJ2aWNlcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNlcnZpY2VzU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQUREX1NFUlZJQ0VTIiklPiIgb25DbGljaz0icHJvY2Vzc0FkZFNlcnZpY2VzKHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fUkVNT1ZFX1JFRkVSRU5DRVMiKSU+IiBvbkNsaWNrPSJwcm9jZXNzUmVtb3ZlUmVmZXJlbmNlcyh0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgIDwvZm9ybT4KLSAgICA8L2Rpdj4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL09wZW5SZWdpc3RyeUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL09wZW5SZWdpc3RyeUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjlkZGZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9PcGVuUmVnaXN0cnlGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUxNSAgIDEzNTMwNyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1VRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLU5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotT3BlblJlZ2lzdHJ5VG9vbCBvcGVuUmVnaXN0cnlUb29sID0gKE9wZW5SZWdpc3RyeVRvb2wpKHVkZGlNYWluTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci1FbnVtZXJhdGlvbiBmYXZvcml0ZVJlZ2lzdHJ5RWxlbWVudHMgPSBvcGVuUmVnaXN0cnlUb29sLmdldEZhdm9yaXRlUmVnaXN0cnlFbGVtZW50cygpOwotVmVjdG9yIGZhdm9yaXRlUmVnaXN0cnlMaXN0ID0gbmV3IFZlY3RvcigpOwotd2hpbGUgKGZhdm9yaXRlUmVnaXN0cnlFbGVtZW50cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgZmF2b3JpdGVSZWdpc3RyeUxpc3QuYWRkRWxlbWVudChmYXZvcml0ZVJlZ2lzdHJ5RWxlbWVudHMubmV4dEVsZW1lbnQoKSk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9PUEVOX1JFR0lTVFJZIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBmaWxsRmF2b3JpdGVJbmZvKGZhdm9yaXRlUmVnaXN0cnlTZWxlY3QpCi0gICAgewotICAgICAgdmFyIHNlbGVjdGVkRmF2b3JpdGVSZWdpc3RyeUluZGV4ID0gZmF2b3JpdGVSZWdpc3RyeVNlbGVjdC5zZWxlY3RlZEluZGV4LTE7Ci0gICAgICBpZiAoc2VsZWN0ZWRGYXZvcml0ZVJlZ2lzdHJ5SW5kZXggPj0gMCkKLSAgICAgIHsKLSAgICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3BlblJlZ2lzdHJ5Rm9ybSIpOwotICAgICAgICBzd2l0Y2ggKHNlbGVjdGVkRmF2b3JpdGVSZWdpc3RyeUluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgPCUKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxmYXZvcml0ZVJlZ2lzdHJ5TGlzdC5zaXplKCk7aSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZmF2UmVnRWxlbWVudCA9IChGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KWZhdm9yaXRlUmVnaXN0cnlMaXN0LmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAlPgotICAgICAgICAgICAgY2FzZSA8JT1pJT46Ci0gICAgICAgICAgICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGZhdlJlZ0VsZW1lbnQuZ2V0TmFtZSgpKSU+IjsKLSAgICAgICAgICAgICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGZhdlJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpKSU+IjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgPCUKLSAgICAgICAgICB9Ci0gICAgICAgICAgJT4KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgICB7Ci0gICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvcGVuUmVnaXN0cnlGb3JtIik7Ci0gICAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKW9wZW5SZWdpc3RyeVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FKSklPiI7Ci0gICAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylvcGVuUmVnaXN0cnlUb29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwpKSU+IjsKLSAgICAgIHNob3dNYWluRm9ybSgpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNob3dNYWluRm9ybSgpCi0gICAgewotICAgICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIH0KLQotICAgCi0gIDwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gICAgICA8JQotICAgICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gInVkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfT1BFTl9SRUdJU1RSWSIpOwotICAgICAgJT4KLSAgICAgIDwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgIDx0YWJsZT4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09QRU5fUkVHSVNUUllfREVTQyIpJT4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIAotICAgICAgPGZvcm0gaWQ9Im9wZW5SZWdpc3RyeUZvcm0iIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvT3BlblJlZ2lzdHJ5QWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIGhhbmRsZVN1Ym1pdCh0aGlzKSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAKLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcmVnaXN0cnlfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVHSVNUUllfTkFNRSIpJT48L2xhYmVsPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICBpZiAoIW9wZW5SZWdpc3RyeVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcmVnaXN0cnlfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbnF1aXJ5X3VybCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9VUkwiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgaWYgKCFvcGVuUmVnaXN0cnlUb29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9pbnF1aXJ5X3VybCIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC9mb3JtPgotICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgIHNldERlZmF1bHRzKCk7Ci0gICAgICA8L3NjcmlwdD4KLSAgICAgIAotICAgIDwvZGl2PgotICA8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9Qcm9jZXNzVURESUZyYW1lc2V0c0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1Byb2Nlc3NVRERJRnJhbWVzZXRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiM2VkZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1Byb2Nlc3NVRERJRnJhbWVzZXRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChmb3JtQWN0aW9uLnRvU3RyaW5nKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuRlJBTUVfTkFNRSU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT1mb3JtRnJhbWVOYW1lJT4iPgotICA8aW5wdXQgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iPgotICA8aW5wdXQgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiI+Ci08L2Zvcm0+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0RldGFpbHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhZjQ1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRGV0YWlsc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjY4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTEyICAgMTQxNzk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gVGhlIHNlbGVjdGVkIG5vZGUgbXVzdCBiZSBhIHJlZ2lzdHJ5IG5vZGUuCi0gICBOb2RlIHJlZ2lzdHJ5Tm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSByZWdpc3RyeU5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoY3VycmVudFRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpKTsgICAKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIHJlZ0VsZW1lbnQucmVmcmVzaE1ldGEoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1JFR0lTVFJZX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9kZXRhaWxzdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICB2YXIgcmVnaXN0cnlEZXRhaWxzTmFtZVRhYmxlID0gZ2V0VGFibGUoInJlZ2lzdHJ5RGV0YWlsc05hbWUiKTsKLTwlCi0gICBTdHJpbmcgbmFtZSA9IHJlZ0VsZW1lbnQuZ2V0TmFtZSgpOwotICAgYm9vbGVhbiBpc0Vycm9yID0gIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUpOyAgIAotJT4KLSAgICBhZGREZXRhaWxzU2luZ2xlSXRlbVJvdygicmVnaXN0cnlEZXRhaWxzTmFtZSIsZmFsc2UpOwotICAgIHNldERldGFpbHNOYW1lU2luZ2xlSXRlbVJvdygicmVnaXN0cnlEZXRhaWxzTmFtZSIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+Iik7Ci08JQotICAgaWYgKGlzRXJyb3IpCi0gICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhyZWdpc3RyeURldGFpbHNOYW1lVGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICB9Ci0gICAKLSAgIEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCk7Ci0gICBib29sZWFuIGNvbnRhaW5zVXNlckRlZmluZWRDYXRlZ29yaWVzOwotICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsICYmIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgIHsKLSU+Ci0gICAgdmFyIHJlZ2lzdHJ5Q2F0ZWdvcmllc1RhYmxlID0gZ2V0VGFibGUoInJlZ2lzdHJ5VXNlckRlZmluZWRDYXRlZ29yaWVzIik7Ci08JSAgIAotICAgICBjb250YWluc1VzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IHRydWU7Ci0gICAgIEFycmF5TGlzdCB1c2VyRGVmaW5lZENhdGVnb3JpZXNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICBkbwotICAgICB7Ci0gICAgICAgdXNlckRlZmluZWRDYXRlZ29yaWVzTGlzdC5hZGQodXNlckRlZmluZWRDYXRlZ29yaWVzLm5leHRFbGVtZW50KCkpOwotICAgICB9IHdoaWxlICh1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpOwotICAgICBDYXRlZ29yeU1vZGVsW10gdXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXkgPSBuZXcgQ2F0ZWdvcnlNb2RlbFt1c2VyRGVmaW5lZENhdGVnb3JpZXNMaXN0LnNpemUoKV07Ci0gICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0xpc3QudG9BcnJheSh1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheSk7Ci0gICAgIFF1aWNrU29ydC5zb3J0KHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5LDAsdXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXkubGVuZ3RoLTEpOwotICAgICBTdHJpbmdCdWZmZXIgZmlsZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5Lmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBuYW1lID0gdXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXlbaV0uZ2V0RGlzcGxheU5hbWUoKTsKLSAgICAgICBTdHJpbmcgdE1vZGVsS2V5ID0gdXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXlbaV0uZ2V0VE1vZGVsS2V5KCk7Ci0gICAgICAgYm9vbGVhbiBjaGVja2VkID0gdXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXlbaV0uaXNDaGVja2VkKCk7Ci0gICAgICAgZmlsZU5hbWUuc2V0TGVuZ3RoKDApOwotICAgICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheVtpXS5pc0RhdGFMb2FkZWQoKSkKLSAgICAgICAgIGZpbGVOYW1lLmFwcGVuZCh1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheVtpXS5nZXRDYXRlZ29yeUtleSgpKS5hcHBlbmQoIi50eHQiKTsKLSAgICAgICBlbHNlCi0gICAgICAgICBmaWxlTmFtZS5hcHBlbmQoY29udHJvbGxlci5nZXRNZXNzYWdlKCJUQUJMRV9CTEFOS19QTEFDRUhPTERFUiIpKTsKLSAgICAgICBib29sZWFuIGhhc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlVTRVJfREVGSU5FRF9DQVRFR09SSUVTLHRNb2RlbEtleSk7Ci0lPgotICAgIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93KCJyZWdpc3RyeVVzZXJEZWZpbmVkQ2F0ZWdvcmllcyIsIjwlPXRNb2RlbEtleSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iLDwlPWNoZWNrZWQlPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGZpbGVOYW1lLnRvU3RyaW5nKCkpJT4iLDwlPWhhc0Vycm9yJT4pOwotPCUKLSAgICAgICBpZiAoaGFzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocmVnaXN0cnlDYXRlZ29yaWVzVGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MrPCU9aSU+XSwiZXJyYW50Um93Iik7Ci08JSAgICAgICAKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgICAgY29udGFpbnNVc2VyRGVmaW5lZENhdGVnb3JpZXMgPSBmYWxzZTsgICAKLSU+ICAgICAgIAotICAgIHNob3dNYWluRm9ybSgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oKQotICB7Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzRGV0YWlsc1NpbmdsZUl0ZW1UYWJsZSgicmVnaXN0cnlEZXRhaWxzTmFtZSIsIjwlPVVERElBY3Rpb25JbnB1dHMuTkFNRV9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FJT4iLGZvcm0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVXBkYXRlUmVnaXN0cnlBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1JFR0lTVFJZX0RFVEFJTFMiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFVEFJTFNfRURJVEFCTEUiLHJlZ2lzdHJ5Tm9kZS5nZXROb2RlTmFtZSgpKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJyZWdpc3RyeURldGFpbHNOYW1lIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXModWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVHSVNUUllfTkFNRSIpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc1NpbmdsZUl0ZW1fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICA8JT1yZWdFbGVtZW50LmdldElucXVpcnlVUkwoKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkpCi0gICB7Ci0lPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1VSTCIpJT4KLSAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICA8JT1yZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgfQotICAgCi0gICBpZiAoY29udGFpbnNVc2VyRGVmaW5lZENhdGVnb3JpZXMpCi0gICB7Ci0gICAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJyZWdpc3RyeVVzZXJEZWZpbmVkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZF9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICB9Ci0gICBpZiAocmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0lPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VU0VSSUQiKSU+Ci0gICAgICAgICAgICA8L3RoPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgPCU9cmVnRWxlbWVudC5nZXRVc2VySWQoKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgfQotICAgCi0gICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0gcmVnRWxlbWVudC5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocmVnaXN0cmF0aW9uVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVHSVNUUllfVVJMIixyZWdpc3RyYXRpb25VUkwpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICB9Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvZGl2PiAgICAgIAotICAgIDwvZm9ybT4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOyAgCi08L3NjcmlwdD4gICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkwN2QwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9ImZpbmRCdXNpbmVzc2VzQWR2YW5jZWQiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklORF9BRFZBTkNFRF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9MzUgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImlucHV0X2ZpbmRfYnVzaW5lc3Nlc19hZHZhbmNlX293bmVkIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEJT4iIG9uQ2xpY2s9InRvZ2dsZUFkdmFuY2VkQXV0aGVudGljYXRpb25TZWN0aW9uKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sdGhpcy5jaGVja2VkKSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfZmluZF9idXNpbmVzc2VzX2FkdmFuY2Vfb3duZWQiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09XTkVEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZE5hbWVzIik7Ci0gICBTdHJpbmdbXSBuYW1lU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX05BTUVTIiwiRk9STV9MQUJFTF9OQU1FIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5hbWVTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRJZGVudGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9pZGVudGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBTdHJpbmdbXSBzaVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRVMiLEJvb2xlYW4uRkFMU0UudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKSwiZmluZEJ1c2luZXNzZXNBZHZhbmNlZCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVN9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkU2VydmljZUludGVyZmFjZXMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhzaVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWREaXNjb3ZlcnlVUkxzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmV3IEJvb2xlYW4oZmFsc2UpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGlzY292ZXJ5VVJMc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRmluZFF1YWxpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZmluZFF1YWxpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZENvbW1vbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hZHZhbmNlZENvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkxNDgzNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08ZGl2IGlkPSJmaW5kQnVzaW5lc3NlcyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBuYW1lPSJmaW5kQnVzaW5lc3Nlc1N0eWxlIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VBUkNIX1RZUEUiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9idXNpbmVzc19zaW1wbGUiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX2J1c2luZXNzX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9idXNpbmVzc19hZHZhbmNlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX2J1c2luZXNzX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9idXNpbmVzc191dWlkIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX2ZpbmRfYnVzaW5lc3NfdXVpZCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fVVVJRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Zvcm0+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc1VVSUQiKTsKLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IHsidWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb25KU1AuanNwIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLCJGT1JNX0xBQkVMX0ZJTkRfQlVTSU5FU1NfVVVJRF9ERVNDIn07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMob3RoZXJQcm9wZXJ0aWVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFVVSURGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM3ZTM0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICAvLyBzZWxlY3RlZE5vZGUgY291bGQgYmUgdGhlIHJlZ2lzdHJ5IG9yIHF1ZXJ5IG5vZGVzLgotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9ImZpbmRCdXNpbmVzc2VzU2ltcGxlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EX0JVU0lORVNTRVNfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX2J1c2luZXNzZXNfc2ltcGxlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9maW5kX2J1c2luZXNzZXNfc2ltcGxlX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYzM1YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDcwOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBjb3VsZCBiZSB0aGUgcmVnaXN0cnkgb3IgcXVlcnkgbm9kZXMuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSU+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICBzdWJRdWVyeUtleVByb3BlcnR5LnNldFN1YlF1ZXJ5S2V5KHN1YlF1ZXJ5S2V5KTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPCUKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9SRUdJU1RSWV9GSU5EIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgc2VjdGlvbklkcyA9IFsiZmluZEJ1c2luZXNzZXMiLCJmaW5kU2VydmljZXMiLCJmaW5kU2VydmljZUludGVyZmFjZXMiXTsKLSAgdmFyIGZpbmRCdXNpbmVzc2VzU2VjdGlvbklkcyA9IFsiZmluZEJ1c2luZXNzZXNTaW1wbGUiLCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkIiwiZmluZEJ1c2luZXNzVVVJRCJdOwotICB2YXIgZmluZFNlcnZpY2VzU2VjdGlvbklkcyA9IFsiZmluZFNlcnZpY2VzU2ltcGxlIiwiZmluZFNlcnZpY2VzQWR2YW5jZWQiLCJmaW5kU2VydmljZVVVSUQiXTsKLSAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHMgPSBbImZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZSIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkIiwiZmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEIl07Ci0gIHZhciBzdHlsZUZvcm1zID0gWyJmaW5kQnVzaW5lc3Nlc1N0eWxlIiwiZmluZFNlcnZpY2VzU3R5bGUiLCJmaW5kU2VydmljZUludGVyZmFjZXNTdHlsZSJdOwotICB2YXIgYXV0aGVudGljYXRpb25TZWN0aW9uSWRzID0gWyJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQXV0aGVudGljYXRpb24iLCJmaW5kU2VydmljZXNBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIiwiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBdXRoZW50aWNhdGlvbiJdOwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlUXVlcnlOYW1lKCkKLSAgewotPCUKLSAgIFN0cmluZyBzdWJRdWVyeUtleVZhbHVlID0gc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpOwotICAgYm9vbGVhbiBpc1N1YlF1ZXJ5ID0gKHN1YlF1ZXJ5S2V5VmFsdWUgIT0gbnVsbCAmJiBzdWJRdWVyeUtleVZhbHVlLmxlbmd0aCgpID4gMCk7Ci0lPiAgIAotICAgIGlmICg8JT1pc1N1YlF1ZXJ5JT4pCi0gICAgewotICAgICAgLy8gU3VicXVlcmllcyBtdXN0IGhhdmUgYSBuYW1lIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIHRoYXQgb2YgdGhlIGN1cnJlbnQgcXVlcnkgb3IgdGhlIGNsb3Nlc3QgcXVlcnkgZW5jbG9zaW5nIHRoaXMgb2JqZWN0LgotPCUKLSAgIFN0cmluZyBjdXJyZW50UXVlcnlOYW1lID0gIiI7Ci0gICBpZiAoc2VsZWN0ZWROb2RlIGluc3RhbmNlb2YgUXVlcnlOb2RlKQotICAgICBjdXJyZW50UXVlcnlOYW1lID0gc2VsZWN0ZWROb2RlLmdldE5vZGVOYW1lKCk7Ci0gICBlbHNlIGlmIChzZWxlY3RlZE5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUpCi0gICB7Ci0gICAgIE5vZGUgcGFyZW50Tm9kZSA9IHNlbGVjdGVkTm9kZS5nZXRQYXJlbnQoKTsKLSAgICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBRdWVyeU5vZGUpCi0gICAgICAgY3VycmVudFF1ZXJ5TmFtZSA9IHBhcmVudE5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgIH0KLSU+ICAgIAotICAgICAgdmFyIHF1ZXJ5TmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWVyeU5hbWUiKS52YWx1ZTsKLSAgICAgIGlmIChxdWVyeU5hbWUgPT0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjdXJyZW50UXVlcnlOYW1lKSU+IikKLSAgICAgIHsKLSAgICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUVVFUllfTkFNRV9DT05GTElDVCIpJT4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oZm9ybSkKLSAgewotICAgIGlmICghaGFuZGxlU3VibWl0KGZvcm0pKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVRdWVyeU5hbWUoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4udmFsdWUgPSAiPCU9c3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4udmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlOYW1lIikudmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0oZm9ybSkKLSAgewotICAgIGlmIChwcm9jZXNzRm9ybShmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NOYW1lRmluZFF1YWxpZmllcnMoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIsZm9ybSk7Ci0gICAgICBwcm9jZXNzSWRlbnRpZmllclRhYmxlKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRDYXRlZ29yaWVzIixmb3JtLHRydWUpOwotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkU2VydmljZUludGVyZmFjZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NEaXNjb3ZlcnlVUkxUYWJsZSgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZERpc2NvdmVyeVVSTHMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0ZpbmRRdWFsaWZpZXJUYWJsZSgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAocHJvY2Vzc0Zvcm0oZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZEJ1c2luZXNzIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzTmFtZUZpbmRRdWFsaWZpZXJzKCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VzIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzRmluZFF1YWxpZmllclRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAocHJvY2Vzc0Zvcm0oZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlcnZpY2UiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc05hbWVGaW5kUXVhbGlmaWVycygiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWROYW1lIixmb3JtKTsKLSAgICAgIHByb2Nlc3NJZGVudGlmaWVyVGFibGUoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzRmluZFF1YWxpZmllclRhYmxlKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICAvLyBTZXQgdGhlIHF1ZXJ5IG5hbWUKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlOYW1lIikudmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpKSU+IjsKLSAgICB2YXIgc2VhcmNoRm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaEZvciIpOwotICAgIHNlYXJjaEZvci5zZWxlY3RlZEluZGV4ID0gPCU9Zm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pJT47Ci0gICAgc2V0RGVmYXVsdHNGb3JGaW5kQnVzaW5lc3Nlc0Zvcm1zKCk7Ci0gICAgc2V0RGVmYXVsdHNGb3JGaW5kU2VydmljZXNGb3JtcygpOwotICAgIHNldERlZmF1bHRzRm9yRmluZFNlcnZpY2VJbnRlcmZhY2VzRm9ybXMoKTsKLSAgICBzaG93TWFpbkZvcm0oc2VhcmNoRm9yLnZhbHVlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGFkdmFuY2VkRm9ybSxxdWVyeUl0ZW1JbmRleCxpc093bmVkQ2hlY2tlZCkKLSAgewotPCUKLSAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPgotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEJT4uY2hlY2tlZCA9IGlzT3duZWRDaGVja2VkOwotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgICB0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbihxdWVyeUl0ZW1JbmRleCxpc093bmVkQ2hlY2tlZCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRBZHZhbmNlZENvbW1vblNlY3Rpb25EZWZhdWx0cyhmb3JtLG1heFNlYXJjaFNldCxtYXhSZXN1bHRzKQotICB7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUJT4udmFsdWUgPSBtYXhTZWFyY2hTZXQ7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTJT4udmFsdWUgPSBtYXhSZXN1bHRzOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHNGb3JGaW5kQnVzaW5lc3Nlc0Zvcm1zKCkKLSAgewotICAgIC8vIEluaXRpYWxpemUgdGhlIGZpbmRCdXNpbmVzc2VzIGZvcm0uCi08JQotICAgU3RyaW5nIGZpbmRCdXNpbmVzc2VzU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1zWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT5dXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMlPls8JT1maW5kQnVzaW5lc3Nlc1N0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgdmFyIGZpbmRCdXNpbmVzc2VzU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRCdXNpbmVzc2VzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIGZpbmRCdXNpbmVzc2VzU2ltcGxlRm9ybSA9IGZpbmRCdXNpbmVzc2VzU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZEJ1c2luZXNzZXNTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpKSU+IjsKLQotICAgIC8vIEFkdmFuY2VkIGZvcm0gZGV0YWlscy4KLSAgICB2YXIgZmluZEJ1c2luZXNzZXNBZHZhbmNlZFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kQnVzaW5lc3Nlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIGZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtID0gZmluZEJ1c2luZXNzZXNBZHZhbmNlZFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHZhciBpc093bmVkQ2hlY2tlZCA9IDwlPShmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQpICE9IG51bGwpJT47Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMoZmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPixpc093bmVkQ2hlY2tlZCk7Ci08JQotICAgVmVjdG9yIGJ1c05hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICBpZiAoYnVzTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxidXNOYW1lVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlidXNOYW1lVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZE5hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRMYW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgSWRlbnRpZmllckJhZyBidXNJZEJhZyA9IChJZGVudGlmaWVyQmFnKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICBpZiAoYnVzSWRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gYnVzSWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkSWRlbnRpZmllclJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0gICAgc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkSWRlbnRpZmllcnMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIENhdGVnb3J5QmFnIGJ1c0NhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICBpZiAoYnVzQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IGJ1c0NhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRDYXRlZ29yeVJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIGJ1c1NlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgIFZlY3RvciBidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSk7Ci0gICBpZiAoYnVzU2VydmljZUludGVyZmFjZXMgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSA9PSBudWxsKQotICAgICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZWxzZQotICAgICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxidXNTZXJ2aWNlSW50ZXJmYWNlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpYnVzU2VydmljZUludGVyZmFjZXMuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLGZhbHNlKTsKLSAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkuYWRkRWxlbWVudChidXNTZXJ2aWNlSW50ZXJmYWNlcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgYnVzU2VydmljZUludGVyZmFjZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTLGJ1c1NlcnZpY2VJbnRlcmZhY2VzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZLGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSk7Ci0gICB9Ci0KLSAgIERpc2NvdmVyeVVSTHMgYnVzRGlzY292ZXJ5VVJMcyA9IChEaXNjb3ZlcnlVUkxzKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLSAgIGlmIChidXNEaXNjb3ZlcnlVUkxzICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBkaXNjb3ZlcnlVUkxWZWN0b3IgPSBidXNEaXNjb3ZlcnlVUkxzLmdldERpc2NvdmVyeVVSTFZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSAoRGlzY292ZXJ5VVJMKWRpc2NvdmVyeVVSTFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZERpc2NvdmVyeVVSTFJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZERpc2NvdmVyeVVSTHMiKTsKLSAgICBzZXREaXNjb3ZlcnlVUkxSb3dTZXR0aW5ncygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZERpc2NvdmVyeVVSTHMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRpc2NvdmVyeVVSTC5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgRmluZFF1YWxpZmllcnMgYnVzRmluZFF1YWxpZmllcnMgPSAoRmluZFF1YWxpZmllcnMpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0ZJTkRRVUFMSUZJRVJTKTsKLSAgIGlmIChidXNGaW5kUXVhbGlmaWVycyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3IgZmluZFF1YWxpZmllclZlY3RvciA9IGJ1c0ZpbmRRdWFsaWZpZXJzLmdldEZpbmRRdWFsaWZpZXJWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZmluZFF1YWxpZmllclZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gKEZpbmRRdWFsaWZpZXIpZmluZFF1YWxpZmllclZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIHNldEZpbmRRdWFsaWZpZXIoIjwlPUhUTUxVdGlscy5KU01hbmdsZShmaW5kUXVhbGlmaWVyLmdldFRleHQoKSklPiIsImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIsImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRDYXRlZ29yaWVzIiwiZmluZEJ1c2luZXNzZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgIHNldEFkdmFuY2VkQ29tbW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTKSklPiIpOwotCi0gICAgLy8gVVVJRCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRCdXNpbmVzc2VzVVVJRFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kQnVzaW5lc3Nlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT5dKTsKLSAgICB2YXIgZmluZEJ1c2luZXNzZXNVVUlERm9ybSA9IGZpbmRCdXNpbmVzc2VzVVVJRFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIGZpbmRCdXNpbmVzc2VzVVVJREZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSkpJT4iOwotCi0gICAgc2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9ZmluZEJ1c2luZXNzZXNTdHlsZUluZGV4JT4pOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHNGb3JGaW5kU2VydmljZXNGb3JtcygpCi0gIHsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBmaW5kU2VydmljZXMgZm9ybS4KLTwlCi0gICBTdHJpbmcgZmluZFNlcnZpY2VzU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbc3R5bGVGb3Jtc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPl1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPls8JT1maW5kU2VydmljZXNTdHlsZUluZGV4JT5dLmNoZWNrZWQgPSB0cnVlOwotICAgIHZhciBmaW5kU2VydmljZXNTaW1wbGVTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlcnZpY2VzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlc1NpbXBsZUZvcm0gPSBmaW5kU2VydmljZXNTaW1wbGVTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBmaW5kU2VydmljZXNTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRTZXJ2aWNlc0FkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybSA9IGZpbmRTZXJ2aWNlc0FkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgdmFyIGlzT3duZWRDaGVja2VkID0gPCU9KGZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX09XTkVEKSAhPSBudWxsKSU+OwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybSw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPixpc093bmVkQ2hlY2tlZCk7Ci08JQotICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VCdXNpbmVzcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZUJ1c2luZXNzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VCdXNpbmVzcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTLGZhbHNlKTsKLSAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LmFkZEVsZW1lbnQoc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygiZmluZFNlcnZpY2VzQWR2YW5jZWRCdXNpbmVzcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2VydmljZUJ1c2luZXNzID0gbmV3IFZlY3RvcigpOwotICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxzZXJ2aWNlQnVzaW5lc3MpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOwotICAgfQotCi0gICBWZWN0b3Igc2VydmljZU5hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgIGlmIChzZXJ2aWNlTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlTmFtZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpc2VydmljZU5hbWVWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoImZpbmRTZXJ2aWNlc0FkdmFuY2VkTmFtZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIENhdGVnb3J5QmFnIHNlcnZpY2VDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoc2VydmljZUNhdEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBzZXJ2aWNlQ2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZENhdGVnb3J5Um93KCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICBWZWN0b3Igc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLGZhbHNlKTsKLSAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5LmFkZEVsZW1lbnQoc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygiZmluZFNlcnZpY2VzQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZLHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxzZXJ2aWNlU2VydmljZUludGVyZmFjZXMpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLQotICAgRmluZFF1YWxpZmllcnMgc2VydmljZUZpbmRRdWFsaWZpZXJzID0gKEZpbmRRdWFsaWZpZXJzKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0ZJTkRRVUFMSUZJRVJTKTsKLSAgIGlmIChzZXJ2aWNlRmluZFF1YWxpZmllcnMgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBzZXJ2aWNlRmluZFF1YWxpZmllcnMuZ2V0RmluZFF1YWxpZmllclZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxmaW5kUXVhbGlmaWVyVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBGaW5kUXVhbGlmaWVyIGZpbmRRdWFsaWZpZXIgPSAoRmluZFF1YWxpZmllcilmaW5kUXVhbGlmaWVyVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgc2V0RmluZFF1YWxpZmllcigiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGZpbmRRdWFsaWZpZXIuZ2V0VGV4dCgpKSU+IiwiZmluZFNlcnZpY2VzQWR2YW5jZWROYW1lcyIsImZpbmRTZXJ2aWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsImZpbmRTZXJ2aWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnMiKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgc2V0QWR2YW5jZWRDb21tb25TZWN0aW9uRGVmYXVsdHMoZmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfUkVTVUxUUykpJT4iKTsKLQotICAgIC8vIFVVSUQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBmaW5kU2VydmljZXNVVUlEU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT5dKTsKLSAgICB2YXIgZmluZFNlcnZpY2VzVVVJREZvcm0gPSBmaW5kU2VydmljZXNVVUlEU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZFNlcnZpY2VzVVVJREZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKSklPiI7Ci0KLSAgICBzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9ZmluZFNlcnZpY2VzU3R5bGVJbmRleCU+KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzRm9yRmluZFNlcnZpY2VJbnRlcmZhY2VzRm9ybXMoKQotICB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmluZFNlcnZpY2VJbnRlcmZhY2VzIGZvcm0uCi08JQotICAgU3RyaW5nIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1N0eWxlSW5kZXggPSAoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1zWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPl1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTJT5bPCU9ZmluZFNlcnZpY2VJbnRlcmZhY2VzU3R5bGVJbmRleCU+XS5jaGVja2VkID0gdHJ1ZTsKLSAgICB2YXIgZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPl0pOwotICAgIHZhciBmaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVGb3JtID0gZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybSA9IGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0KLSAgICB2YXIgaXNPd25lZENoZWNrZWQgPSA8JT0oZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX09XTkVEKSAhPSBudWxsKSU+OwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybSw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4saXNPd25lZENoZWNrZWQpOwotICAgIHZhciBpc1VzZVNlcnZpY2VDaGVja2VkID0gPCU9KGZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSkgIT0gbnVsbCklPjsKLSAgICBmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSU+LmNoZWNrZWQgPSBpc1VzZVNlcnZpY2VDaGVja2VkOwotICAgIHRvZ2dsZUZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVBhcmFtZXRlcnMoZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtKTsKLSAgICBmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpKSU+IjsKLQotPCUKLSAgIFZlY3RvciBzaVNlcnZpY2UgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFKTsKLSAgIFZlY3RvciBzaVNlcnZpY2VDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRV9DT1BZKTsKLSAgIGlmIChzaVNlcnZpY2UgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHNpU2VydmljZUNvcHkgPT0gbnVsbCkKLSAgICAgICBzaVNlcnZpY2VDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBlbHNlCi0gICAgICAgc2lTZXJ2aWNlQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxzaVNlcnZpY2Uuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNpU2VydmljZS5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMsZmFsc2UpOwotICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgc2lTZXJ2aWNlQ29weS5hZGRFbGVtZW50KHNpU2VydmljZS5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZSIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYnMuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0VfQ09QWSxzaVNlcnZpY2VDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2lTZXJ2aWNlID0gbmV3IFZlY3RvcigpOwotICAgICBzaVNlcnZpY2VDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSxzaVNlcnZpY2UpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRV9DT1BZLHNpU2VydmljZUNvcHkpOwotICAgfQotCi0gICBJZGVudGlmaWVyQmFnIHNpSWRCYWcgPSAoSWRlbnRpZmllckJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgaWYgKHNpSWRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2lJZEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRJZGVudGlmaWVyUm93KCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0gICAgc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZElkZW50aWZpZXJzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotCi0gICBDYXRlZ29yeUJhZyBzaUNhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoc2lDYXRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2lDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIpOwotICAgIHNldENhdGVnb3J5Um93U2V0dGluZ3MoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgRmluZFF1YWxpZmllcnMgc2lGaW5kUXVhbGlmaWVycyA9IChGaW5kUXVhbGlmaWVycylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfRklORFFVQUxJRklFUlMpOwotICAgaWYgKHNpRmluZFF1YWxpZmllcnMgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBzaUZpbmRRdWFsaWZpZXJzLmdldEZpbmRRdWFsaWZpZXJWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZmluZFF1YWxpZmllclZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gKEZpbmRRdWFsaWZpZXIpZmluZFF1YWxpZmllclZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIHNldEZpbmRRdWFsaWZpZXIoIjwlPUhUTUxVdGlscy5KU01hbmdsZShmaW5kUXVhbGlmaWVyLmdldFRleHQoKSklPiIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZSIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnMiKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgc2V0QWR2YW5jZWRDb21tb25TZWN0aW9uRGVmYXVsdHMoZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTKSklPiIpOwotCi0gICAgLy8gVVVJRCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1VVSURTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlcnZpY2VJbnRlcmZhY2VzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQlPl0pOwotICAgIHZhciBmaW5kU2VydmljZUludGVyZmFjZXNVVUlERm9ybSA9IGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1VVSURTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBmaW5kU2VydmljZUludGVyZmFjZXNVVUlERm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfS0VZJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKSklPiI7Ci0KLSAgICBzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPWZpbmRTZXJ2aWNlSW50ZXJmYWNlc1N0eWxlSW5kZXglPik7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oc2VhcmNoRm9yVmFsdWVTdHJpbmcpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgcXVlcnlJbmZvSXRlbUxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlJbmZvSXRlbUxpc3QiKTsKLSAgICB2YXIgc2VhcmNoRm9ySW5kZXggPSBwYXJzZUludChzZWFyY2hGb3JWYWx1ZVN0cmluZyk7Ci0gICAgZm9yICh2YXIgaT0wO2k8c2VjdGlvbklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChpID09IHNlYXJjaEZvckluZGV4KQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgfQotPCUKLSAgIGlmIChzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkubGVuZ3RoKCkgPCAxKQotICAgewotJT4KLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlJbmZvSXRlbUxpc3QiKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotJT4KLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93RmluZEZvcm0ocXVlcnlJdGVtSW5kZXgsc3R5bGUpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgZmluZFNlY3Rpb25JZHM7Ci0gICAgc3dpdGNoIChxdWVyeUl0ZW1JbmRleCkKLSAgICB7Ci0gICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT46Ci0gICAgICAgIGZpbmRTZWN0aW9uSWRzID0gZmluZEJ1c2luZXNzZXNTZWN0aW9uSWRzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT46Ci0gICAgICAgIGZpbmRTZWN0aW9uSWRzID0gZmluZFNlcnZpY2VzU2VjdGlvbklkczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPjoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZpbmRTZWN0aW9uSWRzID0gZmluZFNlcnZpY2VJbnRlcmZhY2VzU2VjdGlvbklkczsKLSAgICB9Ci0gICAgZm9yICh2YXIgaT0wO2k8ZmluZFNlY3Rpb25JZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaSA9PSBzdHlsZSkKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdG9nZ2xlQWR2YW5jZWRBdXRoZW50aWNhdGlvblNlY3Rpb24ocXVlcnlJdGVtSW5kZXgsaXNDaGVja2VkKQotICB7Ci0gICAgaWYgKGlzQ2hlY2tlZCAmJiA8JT0hcmVnRWxlbWVudC5pc0xvZ2dlZEluKCklPikKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF1dGhlbnRpY2F0aW9uU2VjdGlvbklkc1txdWVyeUl0ZW1JbmRleF0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdXRoZW50aWNhdGlvblNlY3Rpb25JZHNbcXVlcnlJdGVtSW5kZXhdKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci0KLSAgZnVuY3Rpb24gdG9nZ2xlRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRTZXJ2aWNlUGFyYW1ldGVycyhmb3JtKQotICB7Ci0gICAgdmFyIGlzVXNlU2VydmljZUNoZWNrZWQgPSBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UlPi5jaGVja2VkOwotICAgIHZhciBpc093bmVkQ2hlY2tlZCA9IGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCU+LmNoZWNrZWQ7Ci0gICAgaWYgKGlzVXNlU2VydmljZUNoZWNrZWQpCi0gICAgewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVNlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRPd25lZCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICB0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbig8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sZmFsc2UpOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZUZpbmRRdWFsaWZpZXJzU2VjdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVyc1NlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVNlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkT3duZWQiKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICB0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbig8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4saXNPd25lZENoZWNrZWQpOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZUZpbmRRdWFsaWZpZXJzU2VjdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzU2VjdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICB9Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvZmluZF9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlOwotICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpOwotICAgaWYgKHN1YlF1ZXJ5S2V5ICE9IG51bGwgJiYgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPiAwKQotICAgewotICAgICBpbnQgcXVlcnlJdGVtID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKSk7Ci0gICAgIHN3aXRjaCAocXVlcnlJdGVtKQotICAgICB7Ci0gICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICAgIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TVUJRVUVSWSIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVMiKSk7Ci0gICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TVUJRVUVSWSIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VTIikpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VCUVVFUlkiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVMiKSk7Ci0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgICAgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZJTkQiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9mb3Jtcy9maW5kZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICA8bGFiZWwgZm9yPSJxdWVyeU5hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1FVRVJZX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZD4gPGlucHV0IGlkPSJxdWVyeU5hbWUiIHR5cGU9InRleHQiIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJERUZBVUxUX1FVRVJZX05BTUUiKSklPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPGRpdiBpZD0icXVlcnlJbmZvSXRlbUxpc3QiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgdmFsaWduPSJtaWRkbGUiIG5vd3JhcCBoZWlnaHQ9NDA+Ci0gICAgICAgICAgICAgIDxsYWJlbCBmb3I9InNlYXJjaEZvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VBUkNIX0ZPUiIpJT48L2xhYmVsPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgbm93cmFwIGhlaWdodD00MD4KLSAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ic2VhcmNoRm9yIiBvbkNoYW5nZT0ic2hvd01haW5Gb3JtKHRoaXMudmFsdWUpIiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVMiKSU+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFUyIpJT4KLSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVMiKSU+Ci0gICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCB3aWR0aD0iOTAlIiBoZWlnaHQ9NDA+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFiYWQyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBjb3VsZCBiZSB0aGUgcmVnaXN0cnkgb3IgcXVlcnkgbm9kZXMuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+Ij4gICAgCi0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPiA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EX0FEVkFOQ0VEX0RFU0MiKSU+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2VfdXNlX3NlcnZpY2UiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UlPiIgb25DbGljaz0idG9nZ2xlRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRTZXJ2aWNlUGFyYW1ldGVycyh0aGlzLmZvcm0pIj48bGFiZWwgZm9yPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2VfdXNlX3NlcnZpY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VTRV9TRVJWSUNFIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgU3RyaW5nW10gc2VydmljZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9TRVJWSUNFIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSwiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZSIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNlcnZpY2VTcGVjaWZpY0luZm8pOwotJT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVNlY3Rpb24iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgotICAgIDxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkT3duZWQiPgotICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9MzUgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaW5wdXRfZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlX293bmVkIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEJT4iIG9uQ2xpY2s9InRvZ2dsZUFkdmFuY2VkQXV0aGVudGljYXRpb25TZWN0aW9uKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPix0aGlzLmNoZWNrZWQpIj4KLSAgICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV9vd25lZCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT1dORUQiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICA8L2Rpdj4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZSI+Ci0gICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2VkX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZWRfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWROYW1lRmluZFF1YWxpZmllcnNTZWN0aW9uIj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9uYW1lc19maW5kUXVhbGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLSAgICA8L2Rpdj4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkSWRlbnRpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvaWRlbnRpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVycyIpOwotJT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnNTZWN0aW9uIj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9maW5kUXVhbGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hZHZhbmNlZENvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWVkOWM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZUludGVyZmFjZXMiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gbmFtZT0iZmluZFNlcnZpY2VJbnRlcmZhY2VzU3R5bGUiPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPiA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRUFSQ0hfVFlQRSIpJT4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19maW5kX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NJTVBMRSIpJT48L2xhYmVsPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9zZXJ2aWNlX2ludGVyZmFjZV91dWlkIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfVVVJRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9zZXJ2aWNlX2ludGVyZmFjZV91dWlkIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19VVUlEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZm9ybT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZUludGVyZmFjZVVVSUQiKTsKLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IHsidWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbkpTUC5qc3AiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksIkZPUk1fTEFCRUxfRklORF9TRVJWSUNFX0lOVEVSRkFDRV9VVUlEX0RFU0MifTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhvdGhlclByb3BlcnRpZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kVVVJREZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNTkzNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBjb3VsZCBiZSB0aGUgcmVnaXN0cnkgb3IgcXVlcnkgbm9kZXMuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklORF9TRVJWSUNFX0lOVEVSRkFDRVNfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlc19zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VzX3NpbXBsZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OTc2YTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VzQWR2YW5jZWQiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGaW5kU2VydmljZXNBZHZhbmNlZEZvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4iPiAgICAKLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklORF9BRFZBTkNFRF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9MzUgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImlucHV0X2ZpbmRfc2VydmljZXNfYWR2YW5jZV9vd25lZCIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCU+IiBvbkNsaWNrPSJ0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbig8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPix0aGlzLmNoZWNrZWQpIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX3NlcnZpY2VzX2FkdmFuY2Vfb3duZWQiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09XTkVEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZXNBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBTdHJpbmdbXSBidXNTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfQlVTSU5FU1MiLEJvb2xlYW4uRkFMU0UudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyksImZpbmRTZXJ2aWNlc0FkdmFuY2VkIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1N9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZXNBZHZhbmNlZEJ1c2luZXNzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoYnVzU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VzQWR2YW5jZWROYW1lcyIpOwotICAgU3RyaW5nW10gbmFtZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9OQU1FUyIsIkZPUk1fTEFCRUxfTkFNRSIsQm9vbGVhbi5GQUxTRS50b1N0cmluZygpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuYW1lU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgU3RyaW5nW10gc2lTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VTIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyksImZpbmRTZXJ2aWNlc0FkdmFuY2VkIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VzQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNpU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9maW5kUXVhbGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYWR2YW5jZWRDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0ZjM5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VzIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIG5hbWU9ImZpbmRTZXJ2aWNlc1N0eWxlIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VBUkNIX1RZUEUiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9zZXJ2aWNlX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9zZXJ2aWNlX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9zZXJ2aWNlX2FkdmFuY2UiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9zZXJ2aWNlX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9zZXJ2aWNlX3V1aWQiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX3NlcnZpY2VfdXVpZCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fVVVJRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Zvcm0+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzU2ltcGxlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VVVUlEIik7Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSB7InVkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZVVVSURBY3Rpb25KU1AuanNwIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksIkZPUk1fTEFCRUxfRklORF9TRVJWSUNFX1VVSURfREVTQyJ9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG90aGVyUHJvcGVydGllcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRVVUlERm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNTaW1wbGVGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNTaW1wbGVGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBiNzI4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gc2VsZWN0ZWROb2RlIGNvdWxkIGJlIHRoZSByZWdpc3RyeSBvciBxdWVyeSBub2Rlcy4KLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZXNTaW1wbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EX1NFUlZJQ0VTX1NJTVBMRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfZmluZF9zZXJ2aWNlc19zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfZmluZF9zZXJ2aWNlc19zaW1wbGVfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kVVVJREZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRVVUlERm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMzlkYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRVVUlERm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBjb3VsZCBiZSB0aGUgcmVnaXN0cnkgb3IgcXVlcnkgbm9kZXMuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0gICAKLSAgIFN0cmluZyBmb3JtQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0gKFN0cmluZ1tdKShzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKSk7Ci0gICBTdHJpbmcgYWN0aW9uTGluayA9IChTdHJpbmcpb3RoZXJQcm9wZXJ0aWVzWzBdOwotICAgU3RyaW5nIHV1aWRFbnRyeUtleSA9IChTdHJpbmcpb3RoZXJQcm9wZXJ0aWVzWzFdOwotICAgU3RyaW5nIGRlc2NyaXB0aW9uS2V5ID0gKFN0cmluZylvdGhlclByb3BlcnRpZXNbMl07Ci0lPgotPGRpdiBpZD0iPCU9Zm9ybUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uTGluaykpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZShkZXNjcmlwdGlvbktleSklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iPCU9KGZvcm1Db250YWluZXJJZCsiX2lucHV0X3V1aWRfa2V5IiklPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVVJRF9LRVkiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKHV1aWRFbnRyeUtleSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IjwlPShmb3JtQ29udGFpbmVySWQrIl9pbnB1dF91dWlkX2tleSIpJT4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9LRVklPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRlMWE5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybSh0aGlzKSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9CVVNJTkVTU19BRFZBTkNFRF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZE5hbWVzIik7Ci0gICBTdHJpbmdbXSBuYW1lU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX05BTUVTIiwiRk9STV9MQUJFTF9OQU1FIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuYW1lU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGVzY1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRJZGVudGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9pZGVudGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuZXcgQm9vbGVhbighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKSkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4gICAKLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YjMwYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hCdXNpbmVzcyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBuYW1lPSJwdWJsaXNoQnVzaW5lc3NTdHlsZSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfRk9STSIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19wdWJsaXNoX2J1c2luZXNzX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMlPiIgb25DbGljaz0ic2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPikiPjxsYWJlbCBmb3I9InJhZGlvX3B1Ymxpc2hfYnVzaW5lc3Nfc2ltcGxlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TSU1QTEUiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19wdWJsaXNoX2J1c2luZXNzX2FkdmFuY2UiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX3B1Ymxpc2hfYnVzaW5lc3NfYWR2YW5jZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fQURWQU5DRUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9mb3JtPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxOTNkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoQnVzaW5lc3NTaW1wbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX0JVU0lORVNTX1NJTVBMRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaEJ1c2luZXNzU2ltcGxlQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfYnVzaW5lc3Nfc2ltcGxlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX2J1c2luZXNzX3NpbXBsZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfYnVzaW5lc3Nfc2ltcGxlX2Rlc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9idXNpbmVzc19zaW1wbGVfZGVzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04lPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNDNkNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBtdXN0IGJlIGEgcmVnaXN0cnkgbm9kZS4KLSAgIE5vZGUgcmVnTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkocmVnTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgc3ViUXVlcnlLZXlQcm9wZXJ0eS5zZXRTdWJRdWVyeUtleShzdWJRdWVyeUtleSk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTwlCi0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1JFR0lTVFJZX1BVQkxJU0giKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgc2VjdGlvbklkcyA9IFsicHVibGlzaEJ1c2luZXNzIiwicHVibGlzaFNlcnZpY2UiLCJwdWJsaXNoU2VydmljZUludGVyZmFjZSJdOwotICB2YXIgcHVibGlzaEJ1c2luZXNzU2VjdGlvbklkcyA9IFsicHVibGlzaEJ1c2luZXNzU2ltcGxlIiwicHVibGlzaEJ1c2luZXNzQWR2YW5jZWQiXTsKLSAgdmFyIHB1Ymxpc2hTZXJ2aWNlU2VjdGlvbklkcyA9IFsicHVibGlzaFNlcnZpY2VTaW1wbGUiLCJwdWJsaXNoU2VydmljZUFkdmFuY2VkIl07Ci0gIHZhciBwdWJsaXNoU2VydmljZUludGVyZmFjZVNlY3Rpb25JZHMgPSBbInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlIiwicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZCJdOwotICB2YXIgc3R5bGVGb3JtcyA9IFsicHVibGlzaEJ1c2luZXNzU3R5bGUiLCJwdWJsaXNoU2VydmljZVN0eWxlIiwicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTdHlsZSJdOwotCi0gIGZ1bmN0aW9uIHByb2Nlc3NQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEZvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWROYW1lcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0lkZW50aWZpZXJUYWJsZSgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRJZGVudGlmaWVycyIsZm9ybSk7Ci0gICAgICBwcm9jZXNzQ2F0ZWdvcnlUYWJsZSgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRDYXRlZ29yaWVzIixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NEaXNjb3ZlcnlVUkxUYWJsZSgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWREaXNjb3ZlcnlVUkxzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgicHVibGlzaFNlcnZpY2VTaW1wbGVCdXNpbmVzcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX0JVU0lORVNTJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRCdXNpbmVzcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX0JVU0lORVNTJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VydmljZUludGVyZmFjZSIsIjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSxmYWxzZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0lkZW50aWZpZXJUYWJsZSgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZElkZW50aWZpZXJzIixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSxmYWxzZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci0gICAgdmFyIHB1Ymxpc2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHVibGlzaCIpOwotICAgIHB1Ymxpc2guc2VsZWN0ZWRJbmRleCA9IDwlPWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKSU+OwotICAgIHNldERlZmF1bHRzRm9yUHVibGlzaEJ1c2luZXNzRm9ybXMoKTsKLSAgICBzZXREZWZhdWx0c0ZvclB1Ymxpc2hTZXJ2aWNlRm9ybXMoKTsKLSAgICBzZXREZWZhdWx0c0ZvclB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlRm9ybXMoKTsKLTwlCi0gICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgewotJT4KLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHVibGlzaEJ1c2luZXNzU2ltcGxlQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hTZXJ2aWNlU2ltcGxlQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotPCUKLSAgIH0KLSU+Ci0gICAgc2hvd01haW5Gb3JtKHB1Ymxpc2gudmFsdWUpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMoZm9ybSkKLSAgewotPCUKLSAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPgotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwdWJsaXNoVVJMKSU+IjsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJJZCklPiI7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzRm9yUHVibGlzaEJ1c2luZXNzRm9ybXMoKQotICB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHVibGlzaEJ1c2luZXNzIGZvcm0uCi08JQotICAgU3RyaW5nIHB1Ymxpc2hCdXNpbmVzc1N0eWxlSW5kZXggPSAoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbc3R5bGVGb3Jtc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+XV0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTJT5bPCU9cHVibGlzaEJ1c2luZXNzU3R5bGVJbmRleCU+XS5jaGVja2VkID0gdHJ1ZTsKLSAgICB2YXIgcHVibGlzaEJ1c2luZXNzU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hCdXNpbmVzc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPl0pOwotICAgIHZhciBwdWJsaXNoQnVzaW5lc3NTaW1wbGVGb3JtID0gcHVibGlzaEJ1c2luZXNzU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaEJ1c2luZXNzU2ltcGxlRm9ybSk7Ci0gICAgcHVibGlzaEJ1c2luZXNzU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKSklPiI7Ci0gICAgcHVibGlzaEJ1c2luZXNzU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTiU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04pKSU+IjsKLQotICAgIC8vIEFkdmFuY2VkIGZvcm0gZGV0YWlscy4KLSAgICB2YXIgcHVibGlzaEJ1c2luZXNzQWR2YW5jZWRTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHVibGlzaEJ1c2luZXNzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT5dKTsKLSAgICB2YXIgcHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtID0gcHVibGlzaEJ1c2luZXNzQWR2YW5jZWRTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEZvcm0pOwotICAgIHZhciBwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZE5hbWVzVGFibGUgPSBnZXRUYWJsZSgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWROYW1lcyIpOwotICAgIHZhciBwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERlc2NyaXB0aW9uc1RhYmxlID0gZ2V0VGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGVzY3JpcHRpb25zIik7Ci0gICAgdmFyIHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGlzY292ZXJ5VVJMc1RhYmxlID0gZ2V0VGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGlzY292ZXJ5VVJMcyIpOwotPCUKLSAgIFZlY3RvciBidXNOYW1lVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgaWYgKGJ1c05hbWVWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8YnVzTmFtZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpYnVzTmFtZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZExhbmd1YWdlSW5wdXRSb3coInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkTmFtZXMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaEJ1c2luZXNzQWR2YW5jZWROYW1lcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRMYW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKCFmb3JtVG9vbFBJLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLGkpKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkTmFtZXNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRyb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBidXNEZXNjcmlwdGlvblZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyk7Ci0gICBpZiAoYnVzRGVzY3JpcHRpb25WZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8YnVzRGVzY3JpcHRpb25WZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWJ1c0Rlc2NyaXB0aW9uVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygicHVibGlzaEJ1c2luZXNzQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGVzY3JpcHRpb25zIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRMYW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmICghZm9ybVRvb2xQSS5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaEJ1c2luZXNzQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRyb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIElkZW50aWZpZXJCYWcgYnVzSWRCYWcgPSAoSWRlbnRpZmllckJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotICAgaWYgKGJ1c0lkQmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IGJ1c0lkQmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZElkZW50aWZpZXJSb3coInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkSWRlbnRpZmllcnMiKTsKLSAgICBzZXRJZGVudGlmaWVyUm93U2V0dGluZ3MoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkSWRlbnRpZmllcnMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIENhdGVnb3J5QmFnIGJ1c0NhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICBpZiAoYnVzQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IGJ1c0NhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRDYXRlZ29yeVJvdygicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0gICAgc2V0Q2F0ZWdvcnlSb3dTZXR0aW5ncygicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRDYXRlZ29yaWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotICAKLSAgIERpc2NvdmVyeVVSTHMgZGlzY292ZXJ5VVJMcyA9IChEaXNjb3ZlcnlVUkxzKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLSAgIGlmIChkaXNjb3ZlcnlVUkxzICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBkaXNjb3ZlcnlVUkxWZWN0b3IgPSBkaXNjb3ZlcnlVUkxzLmdldERpc2NvdmVyeVVSTFZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSAoRGlzY292ZXJ5VVJMKWRpc2NvdmVyeVVSTFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZERpc2NvdmVyeVVSTFJvdygicHVibGlzaEJ1c2luZXNzQWR2YW5jZWREaXNjb3ZlcnlVUkxzIik7Ci0gICAgc2V0RGlzY292ZXJ5VVJMUm93U2V0dGluZ3MoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGlzY292ZXJ5VVJMcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGlzY292ZXJ5VVJMLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRyb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0lPiAgICAgICAKLSAgICBzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiw8JT1wdWJsaXNoQnVzaW5lc3NTdHlsZUluZGV4JT4pOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHNGb3JQdWJsaXNoU2VydmljZUZvcm1zKCkKLSAgewotPCUKLSAgIFN0cmluZyBwdWJsaXNoU2VydmljZVN0eWxlSW5kZXggPSAoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zW3N0eWxlRm9ybXNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT5dXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT5bPCU9cHVibGlzaFNlcnZpY2VTdHlsZUluZGV4JT5dLmNoZWNrZWQgPSB0cnVlOwotICAgIHZhciBwdWJsaXNoU2VydmljZVNpbXBsZVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwdWJsaXNoU2VydmljZVNlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPl0pOwotICAgIHZhciBwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0gPSBwdWJsaXNoU2VydmljZVNpbXBsZVNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybSk7Ci08JQotICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTKTsKLSAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSk7Ci0gICBpZiAoc2VydmljZUJ1c2luZXNzICE9IG51bGwpCi0gICB7Ci0gICAgIGlmIChzZXJ2aWNlQnVzaW5lc3NDb3B5ID09IG51bGwpCi0gICAgICAgc2VydmljZUJ1c2luZXNzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZWxzZQotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUJ1c2luZXNzLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlQnVzaW5lc3MuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTLGZhbHNlKTsKLSAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LmFkZEVsZW1lbnQoc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygicHVibGlzaFNlcnZpY2VTaW1wbGVCdXNpbmVzcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTX0NPUFksc2VydmljZUJ1c2luZXNzQ29weSk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIHNlcnZpY2VCdXNpbmVzcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgc2VydmljZUJ1c2luZXNzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTLHNlcnZpY2VCdXNpbmVzcyk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOwotICAgfQotJT4KLTwlCi0gICBWZWN0b3Igc2VydmljZUludGVyZmFjZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICBWZWN0b3Igc2VydmljZUludGVyZmFjZXNDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSk7Ci0gICBpZiAoc2VydmljZUludGVyZmFjZXMgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZWxzZQotICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlSW50ZXJmYWNlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUludGVyZmFjZXMuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMsZmFsc2UpOwotICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weS5hZGRFbGVtZW50KHNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2UiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh0TW9kZWwuZ2V0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKSklPiIpOwotPCUKLSAgICAgfQotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxzZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXJ2aWNlSW50ZXJmYWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgc2VydmljZUludGVyZmFjZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsc2VydmljZUludGVyZmFjZXMpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxzZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotJT4KLSAgICBwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMKSklPiI7Ci0gICAgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKSklPiI7Ci0gICAgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04lPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04pKSU+IjsKLQotICAgIC8vIEFkdmFuY2VkIGZvcm0gZGV0YWlscy4KLSAgICB2YXIgcHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwdWJsaXNoU2VydmljZVNlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtID0gcHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzVGFibGUgPSBnZXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIik7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIik7Ci08JQotICAgc2VydmljZUJ1c2luZXNzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZKTsKLSAgIGlmIChzZXJ2aWNlQnVzaW5lc3MgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHNlcnZpY2VCdXNpbmVzc0NvcHkgPT0gbnVsbCkKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBlbHNlCi0gICAgICAgc2VydmljZUJ1c2luZXNzQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlQnVzaW5lc3Muc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VCdXNpbmVzcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyxmYWxzZSk7Ci0gICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgc2VydmljZUJ1c2luZXNzQ29weS5hZGRFbGVtZW50KHNlcnZpY2VCdXNpbmVzcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRCdXNpbmVzcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2VydmljZUJ1c2luZXNzID0gbmV3IFZlY3RvcigpOwotICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxzZXJ2aWNlQnVzaW5lc3MpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOwotICAgfQotJT4KLSAgICBwdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCkpJT4iOwotPCUKLSAgIFZlY3RvciBzZXJ2aWNlTmFtZVZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgaWYgKHNlcnZpY2VOYW1lVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VOYW1lVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlzZXJ2aWNlTmFtZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZExhbmd1YWdlSW5wdXRSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX05BTUVfVEVYVF9WQUxVRSIpKSU+Iik7Ci0gICAgc2V0TGFuZ3VhZ2VJbnB1dFJvd1NldHRpbmdzKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmICghZm9ybVRvb2xQSS5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudHJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIHNlcnZpY2VEZXNjcmlwdGlvblZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLSAgIGlmIChzZXJ2aWNlRGVzY3JpcHRpb25WZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZURlc2NyaXB0aW9uVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilzZXJ2aWNlRGVzY3JpcHRpb25WZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSIpKSU+Iik7Ci0gICAgc2V0TGFuZ3VhZ2VJbnB1dFJvd1NldHRpbmdzKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRMYW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmICghZm9ybVRvb2xQSS5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBDYXRlZ29yeUJhZyBzZXJ2aWNlQ2F0QmFnID0gKENhdGVnb3J5QmFnKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgaWYgKHNlcnZpY2VDYXRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2VydmljZUNhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRDYXRlZ29yeVJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgc2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+LDwlPXB1Ymxpc2hTZXJ2aWNlU3R5bGVJbmRleCU+KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzRm9yUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VGb3JtcygpCi0gIHsKLTwlCi0gICBTdHJpbmcgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTdHlsZUluZGV4ID0gKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbc3R5bGVGb3Jtc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT5dXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyU+WzwlPXB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU3R5bGVJbmRleCU+XS5jaGVja2VkID0gdHJ1ZTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT5dKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtID0gcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0pOwotICAgIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKSklPiI7Ci0gICAgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpKSU+IjsKLSAgICBwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT04lPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPl0pOwotICAgIHZhciBwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybSA9IHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybSk7Ci0gICAgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKSklPiI7Ci0gICAgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpKSU+IjsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZERlc2NyaXB0aW9uc1RhYmxlID0gZ2V0VGFibGUoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiKTsKLTwlCi0gICBWZWN0b3Igc2lEZXNjcmlwdGlvblZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyk7Ci0gICBpZiAoc2lEZXNjcmlwdGlvblZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzaURlc2NyaXB0aW9uVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilzaURlc2NyaXB0aW9uVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRyb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIElkZW50aWZpZXJCYWcgc2lJZEJhZyA9IChJZGVudGlmaWVyQmFnKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0gICBpZiAoc2lJZEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBzaUlkQmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZElkZW50aWZpZXJSb3coInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRJZGVudGlmaWVycyIpOwotICAgIHNldElkZW50aWZpZXJSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZElkZW50aWZpZXJzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotCi0gICBDYXRlZ29yeUJhZyBzaUNhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoc2lDYXRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2lDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0gICAgc2V0Q2F0ZWdvcnlSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgIHNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sPCU9cHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTdHlsZUluZGV4JT4pOwotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd01haW5Gb3JtKHB1Ymxpc2hWYWx1ZSkKLSAgewotICAgIGNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpOwotICAgIHZhciBwdWJsaXNoID0gcGFyc2VJbnQocHVibGlzaFZhbHVlKTsKLSAgICBmb3IgKHZhciBpPTA7aTxzZWN0aW9uSWRzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKGkgPT0gcHVibGlzaCkKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VjdGlvbklkc1tpXSkuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZWxzZQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93UHVibGlzaEZvcm0ocXVlcnlJdGVtSW5kZXgsc3R5bGUpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgcHVibGlzaFNlY3Rpb25JZHM7Ci0gICAgc3dpdGNoIChxdWVyeUl0ZW1JbmRleCkKLSAgICB7Ci0gICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT46Ci0gICAgICAgIHB1Ymxpc2hTZWN0aW9uSWRzID0gcHVibGlzaEJ1c2luZXNzU2VjdGlvbklkczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+OgotICAgICAgICBwdWJsaXNoU2VjdGlvbklkcyA9IHB1Ymxpc2hTZXJ2aWNlU2VjdGlvbklkczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPjoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHB1Ymxpc2hTZWN0aW9uSWRzID0gcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTZWN0aW9uSWRzOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZm9yICh2YXIgaT0wO2k8cHVibGlzaFNlY3Rpb25JZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaSA9PSBzdHlsZSkKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHVibGlzaFNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHVibGlzaFNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgfQotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIiBvblVubG9hZD0iY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCkiPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gInVkZGkvaW1hZ2VzL3B1Ymxpc2hfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfUFVCTElTSCIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgdmFsaWduPSJtaWRkbGUiIG5vd3JhcD4KLSAgICAgICAgICAgIDxsYWJlbCBmb3I9InB1Ymxpc2giPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0giKSU+PC9sYWJlbD4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgbm93cmFwPgotICAgICAgICAgICAgPHNlbGVjdCBpZD0icHVibGlzaCIgb25DaGFuZ2U9InNob3dNYWluRm9ybSh0aGlzLnZhbHVlKSIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1MiKSU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRSIpJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRV9JTlRFUkZBQ0UiKSU+Ci0gICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICA8L2Rpdj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWY2YzBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0icHVibGlzaFNlcnZpY2VBZHZhbmNlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+Ij4gIAotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+Ij4gICAgCi0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfQURWQU5DRURfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgYm9vbGVhbiB0YWJsZUhhc0Vycm9ycyA9ICFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgU3RyaW5nW10gYnVzU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0JVU0lORVNTIiwobmV3IEJvb2xlYW4odGFibGVIYXNFcnJvcnMpKS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSwicHVibGlzaFNlcnZpY2VBZHZhbmNlZCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZEJ1c2luZXNzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoYnVzU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBub3dyYXAgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfYWR2YW5jZV93c2RsX3VybCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIG5vd3JhcCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdwdWJsaXNoU2VydmljZUFkdmFuY2VkJyw8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0UlPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlX3dzZGxfdXJsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgdGFibGVIYXNFcnJvcnMgPSAhZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICBTdHJpbmdbXSBzZXJ2aWNlSW50ZXJmYWNlU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFUyIsKG5ldyBCb29sZWFuKHRhYmxlSGFzRXJyb3JzKSkudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKSwicHVibGlzaFNlcnZpY2VBZHZhbmNlZCIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoc2VydmljZUludGVyZmFjZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIpOwotICAgU3RyaW5nW10gbmFtZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9OQU1FUyIsIkZPUk1fTEFCRUxfTkFNRSIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuYW1lU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIik7Ci0gICBTdHJpbmdbXSBkZXNjU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OUyIsIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGRlc2NTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYTNmZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0icHVibGlzaFNlcnZpY2UiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gbmFtZT0icHVibGlzaFNlcnZpY2VTdHlsZSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfRk9STSIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPiIgb25DbGljaz0ic2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT4pIj48bGFiZWwgZm9yPSJyYWRpb19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TSU1QTEUiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19wdWJsaXNoX3NlcnZpY2VfYWR2YW5jZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19wdWJsaXNoX3NlcnZpY2VfYWR2YW5jZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fQURWQU5DRUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9mb3JtPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRlY2E3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybSh0aGlzKSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX0lOVEVSRkFDRV9BRFZBTkNFRF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgbm93cmFwIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlX3dzZGxfdXJsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIG5vd3JhcCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkJyw8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFJT4pIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSU+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2Vfd3NkbF91cmwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTMgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRGVzY3JpcHRpb25zIik7Ci0gICBTdHJpbmdbXSBkZXNjU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OUyIsIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkZXNjU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkSWRlbnRpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvaWRlbnRpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZhODJjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZUludGVyZmFjZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBuYW1lPSJwdWJsaXNoU2VydmljZUludGVyZmFjZVN0eWxlIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9GT1JNIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPikiPjxsYWJlbCBmb3I9InJhZGlvX3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TSU1QTEUiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2UiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMlPiIgb25DbGljaz0ic2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZm9ybT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODViMDZlYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfSU5URVJGQUNFX1NJTVBMRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBdXRoZW50aWNhdGlvbiIpOwotJT4gICAgICAKLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgbm93cmFwIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGVfd3NkbF91cmwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4gICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgbm93cmFwIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV1NETEJyb3dzZXIoJ3B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlJyw8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFJT4pIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSU+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZV93c2RsX3VybCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49MyBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZV9uYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGVfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTMgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGVfZGVzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGVfZGVzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT04lPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPiAgICAgICAgICAKLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhY2FmMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0icHVibGlzaFNlcnZpY2VTaW1wbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+Ij4gIAotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfU0VSVklDRV9TSU1QTEVfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlU2ltcGxlQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIGJvb2xlYW4gdGFibGVIYXNFcnJvcnMgPSAhZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICBTdHJpbmdbXSBidXNTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfQlVTSU5FU1MiLChuZXcgQm9vbGVhbih0YWJsZUhhc0Vycm9ycykpLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpLCJwdWJsaXNoU2VydmljZVNpbXBsZSIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlU2ltcGxlQnVzaW5lc3MiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhidXNTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIG5vd3JhcCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfd3NkbF91cmwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgbm93cmFwIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV1NETEJyb3dzZXIoJ3B1Ymxpc2hTZXJ2aWNlU2ltcGxlJyw8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0UlPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfd3NkbF91cmwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTMgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV9uYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTMgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV9kZXNjIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX2Rlc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04lPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1Jlc3VsdHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZXN1bHRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NDZmZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1Jlc3VsdHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlciIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0lPgotPC9qc3A6dXNlQmVhbj4gICAKLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgU3ViUXVlcnlUcmFuc2ZlclRhcmdldCBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0ID0gbnVsbDsKLSAgIGJvb2xlYW4gaGFzVGFyZ2V0ID0gZmFsc2U7Ci0gICBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBRdWVyeUVsZW1lbnQpCi0gICB7Ci0gICAgIHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgPSAoU3ViUXVlcnlUcmFuc2ZlclRhcmdldCl0cmVlRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFVERElNb2RlbENvbnN0YW50cy5TVUJRVUVSWV9UUkFOU0ZFUl9UQVJHRVQpOwotICAgICBpZiAoc3ViUXVlcnlUcmFuc2ZlclRhcmdldCAhPSBudWxsICYmIHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQuZ2V0VGFyZ2V0Rm9ybVRvb2woKSAhPSBudWxsKQotICAgICB7Ci0gICAgICAgc3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlci5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgIHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIuYWRkRWxlbWVudChzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KTsKLSAgICAgICBoYXNUYXJnZXQgPSB0cnVlOwotICAgICB9Ci0gICB9Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9SRVNVTFRTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvcmVzdWx0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci08JQotICAgVmVjdG9yIGNoaWxkTm9kZXMgPSBzZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgZm9yIChpbnQgaT0wO2k8Y2hpbGROb2Rlcy5zaXplKCk7aSsrKQotICAgewotICAgICBOb2RlIGNoaWxkTm9kZSA9IChOb2RlKWNoaWxkTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICBTdHJpbmcgdXJsID0gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGNoaWxkTm9kZS5nZXROb2RlSWQoKSxmYWxzZSk7Ci0gICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gbnVsbDsKLSAgICAgaWYgKGNoaWxkTm9kZSBpbnN0YW5jZW9mIEJ1c2luZXNzTm9kZSkKLSAgICAgewotICAgICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudCljaGlsZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLSAgICAgICBuYW1lID0gYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICBkZXNjcmlwdGlvbiA9IGJlLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICB9Ci0gICAgIGVsc2UgaWYgKGNoaWxkTm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VOb2RlKQotICAgICB7Ci0gICAgICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpY2hpbGROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICAgbmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgZGVzY3JpcHRpb24gPSBicy5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgfQotICAgICBlbHNlIGlmIChjaGlsZE5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlTm9kZSkKLSAgICAgewotICAgICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCljaGlsZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICBUTW9kZWwgdE1vZGVsID0gc2lFbGVtZW50LmdldFRNb2RlbCgpOwotICAgICAgIG5hbWUgPSB0TW9kZWwuZ2V0TmFtZVN0cmluZygpOwotICAgICAgIGRlc2NyaXB0aW9uID0gdE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICB9Ci0lPgotICAgIGFkZFJlc3VsdFJvdygiUmVzdWx0cyIsPCU9Y2hpbGROb2RlLmdldE5vZGVJZCgpJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24pJT4iKTsKLTwlCi0gICB9Ci0lPgotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTxkaXYgaWQ9ImNvbnRlbnQiPgotICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfUVVFUllfUkVTVUxUUyIpOwotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvZm9ybXMvcmVzdWx0c2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDxmb3JtIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgU3RyaW5nIHRhYmxlVGl0bGU7Ci0gICBpbnQgaXRlbVR5cGUgPSBJbnRlZ2VyLnBhcnNlSW50KHRyZWVFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoVURESU1vZGVsQ29uc3RhbnRzLlFVRVJZX1RZUEUpKTsgICAKLSAgIHN3aXRjaCAoaXRlbVR5cGUpCi0gICB7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9CVVNJTkVTU0VTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICBkZWZhdWx0OgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRV9JTlRFUkZBQ0VTIik7Ci0gICB9Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSB7dGFibGVUaXRsZSwiIn07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiUmVzdWx0cyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG90aGVyUHJvcGVydGllcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3Jlc3VsdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgPHRyPgotPCUKLSAgIGlmIChoYXNUYXJnZXQpCi0gICB7Ci0lPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9UUkFOU0ZFUiIpJT4iIG9uQ2xpY2s9InRyYW5zZmVyU2VsZWN0aW9ucygnUmVzdWx0cycsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLTwlCi0gICB9Ci0lPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fUkVGUkVTSCIpJT4iIG9uQ2xpY2s9InJlZnJlc2hTZWxlY3Rpb25zKCdSZXN1bHRzJyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9BRERfVE9fRkFWT1JJVEVTIiklPiIgb25DbGljaz0iYWRkU2VsZWN0aW9uc1RvRmF2b3JpdGVzKCdSZXN1bHRzJyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9DTEVBUiIpJT4iIG9uQ2xpY2s9ImNsZWFyU2VsZWN0aW9ucygnUmVzdWx0cycsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvZm9ybT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci0gIHJlc3VtZVByb3h5TG9hZFBhZ2UoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1NlcnZpY2VEZXRhaWxzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvU2VydmljZURldGFpbHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkxNjAyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvU2VydmljZURldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoY3VycmVudFRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfU0VSVklDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvZGV0YWlsc3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci0gICAgdmFyIHNlcnZpY2VEZXRhaWxzV1NETFVSTFRhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VEZXRhaWxzV1NETFVSTCIpOwotICAgIHZhciBzZXJ2aWNlRGV0YWlsc05hbWVzVGFibGUgPSBnZXRUYWJsZSgic2VydmljZURldGFpbHNOYW1lcyIpOwotICAgIHZhciBzZXJ2aWNlRGV0YWlsc0Rlc2NyaXB0aW9uc1RhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VEZXRhaWxzRGVzY3JpcHRpb25zIik7Ci08JQotICAgTGlzdEVsZW1lbnQgd3NkbFVSTExpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICBTdHJpbmcgd3NkbFVSTCA9IG51bGw7Ci0gICBpZiAod3NkbFVSTExpc3RFbGVtZW50ID09IG51bGwpCi0gICB7Ci0gICAgIHRyeQotICAgICB7Ci0gICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgICB3c2RsVVJMID0gdWRkaTRqSGVscGVyLmdldFdTREwoc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCksIHNlcnZpY2VFbGVtZW50LmdldFJlZ2lzdHJ5RWxlbWVudCgpLmdldFByb3h5KCkpOwotICAgICAgIHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICAgICBpZiAod3NkbFVSTCA9PSBudWxsKQotICAgICAgICAgd3NkbFVSTCA9ICJ0ZW1wLndzZGwiOwotICAgICB9Ci0gICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgewotICAgICAgIHdzZGxVUkwgPSAiIjsKLSAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICAgfQotICAgICB3c2RsVVJMTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQod3NkbFVSTCk7Ci0gICAgIHdzZGxVUkxMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oLTEsLTEsMCk7Ci0gICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCx3c2RsVVJMTGlzdEVsZW1lbnQpOwotICAgfQotICAgZWxzZQotICAgICB3c2RsVVJMID0gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICBib29sZWFuIGlzTmV3SXRlbSA9ICh3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc1NpbmdsZUl0ZW1Sb3coInNlcnZpY2VEZXRhaWxzV1NETFVSTCIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvdygic2VydmljZURldGFpbHNXU0RMVVJMIiw8JT1VRERJQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsVVJMKSU+Iik7Ci08JQotICAgaWYgKGlzRXJyb3IpCi0gICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhzZXJ2aWNlRGV0YWlsc1dTRExVUkxUYWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgIH0KLQotICAgVmVjdG9yIG5hbWVJbmRleFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgIGlmIChuYW1lSW5kZXhWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8bmFtZUluZGV4VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCluYW1lSW5kZXhWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKTsKLSAgICAgICBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coInNlcnZpY2VEZXRhaWxzTmFtZXMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUUiKSklPiIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJzZXJ2aWNlRGV0YWlsc05hbWVzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9bmFtZS5nZXRMYW5nKCklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhzZXJ2aWNlRGV0YWlsc05hbWVzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3IgZGVzY3JpcHRpb25JbmRleFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICBpZiAoZGVzY3JpcHRpb25JbmRleFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbkluZGV4VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXNjcmlwdGlvbkluZGV4VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygic2VydmljZURldGFpbHNEZXNjcmlwdGlvbnMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIikpJT4iLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygic2VydmljZURldGFpbHNEZXNjcmlwdGlvbnMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1kZXNjcmlwdGlvbi5nZXRMYW5nKCklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coc2VydmljZURldGFpbHNEZXNjcmlwdGlvbnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBjYXRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgIGlmIChjYXRWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLGkpOwotICAgICAgIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3coInNlcnZpY2VEZXRhaWxzQ2F0ZWdvcmllcyIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNDYXRlZ29yeVJvdygic2VydmljZURldGFpbHNDYXRlZ29yaWVzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIC8vIEF1dGhlbnRpY2F0aW9uLgotICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgIHsKLSAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocHVibGlzaFVSTCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodXNlcklkKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VydmljZURldGFpbHNBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0lPgotCi0gICAgc2hvd01haW5Gb3JtKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc0RldGFpbHNTaW5nbGVJdGVtVGFibGUoInNlcnZpY2VEZXRhaWxzV1NETFVSTCIsIjwlPVVERElBY3Rpb25JbnB1dHMuV1NETF9VUkxfTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJzZXJ2aWNlRGV0YWlsc05hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5OQU1FX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5BTUVfVklFV0lEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJzZXJ2aWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fVklFV0lEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNDYXRlZ29yeVRhYmxlKCJzZXJ2aWNlRGV0YWlsc0NhdGVnb3JpZXMiLGZvcm0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiIgb25VbmxvYWQ9ImNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGb3JtKHRoaXMpIj4KLSAgICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TRVJWSUNFX0RFVEFJTFMiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVklPiIgdmFsdWU9IjwlPWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVklPiIgdmFsdWU9IjwlPWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSklPiI+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFVEFJTFNfRURJVEFCTEUiLHNlbGVjdGVkTm9kZS5nZXROb2RlTmFtZSgpKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRV9LRVkiKSU+Ci0gICAgICAgICAgICA8L3RoPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgPCU9Zm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlRGV0YWlsc1dTRExVUkwiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNTaW5nbGVJdGVtX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VEZXRhaWxzTmFtZXMiKTsKLSAgIFN0cmluZ1tdIG5hbWVTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfTkFNRVMiLCJGT1JNX0xBQkVMX05BTUUiLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5hbWVTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGVzY1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VEZXRhaWxzQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzQ2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlRGV0YWlsc0F1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Zvcm0+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci0gIHJlc3VtZVByb3h5TG9hZFBhZ2UoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1NlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvU2VydmljZUludGVyZmFjZURldGFpbHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU1YTZiNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvU2VydmljZUludGVyZmFjZURldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoY3VycmVudFRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsgICAKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShzZWxlY3RlZE5vZGUpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9kZXRhaWxzdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICB2YXIgc2VydmljZUludGVyZmFjZURldGFpbHNXU0RMVVJMVGFibGUgPSBnZXRUYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNXU0RMVVJMIik7Ci0gICAgdmFyIHNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzTmFtZVRhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzTmFtZSIpOwotICAgIHZhciBzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Rlc2NyaXB0aW9uc1RhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRGVzY3JpcHRpb25zIik7Ci0gICAgdmFyIHNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzSWRlbnRpZmllcnNUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0lkZW50aWZpZXJzIik7Ci0gICAgdmFyIHNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQ2F0ZWdvcmllc1RhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQ2F0ZWdvcmllcyIpOwotPCUKLSAgIExpc3RFbGVtZW50IHdzZGxVUkxMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgIFN0cmluZyB3c2RsVVJMID0gbnVsbDsKLSAgIGlmICh3c2RsVVJMTGlzdEVsZW1lbnQgPT0gbnVsbCkKLSAgIHsKLSAgICAgdHJ5Ci0gICAgIHsKLSAgICAgICBVZGRpNGpIZWxwZXIgdWRkaTRqSGVscGVyID0gbmV3IFVkZGk0akhlbHBlcigpOwotICAgICAgIHdzZGxVUkwgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETChzaUVsZW1lbnQuZ2V0VE1vZGVsKCkpOwotICAgICAgIHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICAgICBpZiAod3NkbFVSTCA9PSBudWxsKQotICAgICAgICAgd3NkbFVSTCA9ICJ0ZW1wLndzZGwiOwotICAgICB9Ci0gICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgewotICAgICAgIHdzZGxVUkwgPSAiIjsKLSAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgIH0KLSAgICAgd3NkbFVSTExpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHdzZGxVUkwpOwotICAgICB3c2RsVVJMTGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKC0xLC0xLDApOwotICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMLHdzZGxVUkxMaXN0RWxlbWVudCk7Ci0gICB9Ci0gICBlbHNlCi0gICAgIHdzZGxVUkwgPSAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgIGJvb2xlYW4gaXNFcnJvciA9ICFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICBib29sZWFuIGlzTmV3SXRlbSA9ICh3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc1NpbmdsZUl0ZW1Sb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzV1NETFVSTCIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvdygic2VydmljZUludGVyZmFjZURldGFpbHNXU0RMVVJMIiw8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsVVJMKSU+Iik7Ci08JQotICAgaWYgKGlzRXJyb3IpCi0gICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1dTRExVUkxUYWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUgICAKLSAgIH0KLQotICAgTGlzdEVsZW1lbnQgbmFtZUxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpbmFtZUxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgaXNFcnJvciA9ICFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgIGlzTmV3SXRlbSA9IChuYW1lTGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc1NpbmdsZUl0ZW1Sb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzTmFtZSIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNOYW1lU2luZ2xlSXRlbVJvdygic2VydmljZUludGVyZmFjZURldGFpbHNOYW1lIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iKTsKLTwlCi0gICBpZiAoaXNFcnJvcikKLSAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzTmFtZVRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgfQotICAgCi0gICBWZWN0b3IgZGVzY3JpcHRpb25JbmRleFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpOwotICAgaWYgKGRlc2NyaXB0aW9uSW5kZXhWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25JbmRleFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGVzY3JpcHRpb25JbmRleFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiKSklPiIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPWRlc2NyaXB0aW9uLmdldExhbmcoKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Rlc2NyaXB0aW9uc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUgICAgICAgCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0gICAKLSAgIFZlY3RvciBpZFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0gICBpZiAoaWRWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8aWRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWlkVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTLGkpOwotICAgICAgIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvdygic2VydmljZUludGVyZmFjZURldGFpbHNJZGVudGlmaWVycyIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNJZGVudGlmaWVyUm93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0lkZW50aWZpZXJzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JSAgICAgICAKLSAgICAgfQotICAgfQotICAgCi0gICBWZWN0b3IgY2F0VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotICAgaWYgKGNhdFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxjYXRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWNhdFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTLGkpOwotICAgICAgIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQ2F0ZWdvcmllcyIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNDYXRlZ29yeVJvdygic2VydmljZUludGVyZmFjZURldGFpbHNDYXRlZ29yaWVzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0gICAKLSAgIC8vIEF1dGhlbnRpY2F0aW9uLgotICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgIHsKLSAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPiAgIAotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocHVibGlzaFVSTCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodXNlcklkKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VydmljZUludGVyZmFjZURldGFpbHNBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0lPiAgCi0gICAgc2hvd01haW5Gb3JtKCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNob3dNYWluRm9ybSgpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NEZXRhaWxzU2luZ2xlSXRlbVRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1dTRExVUkwiLCI8JT1VRERJQWN0aW9uSW5wdXRzLldTRExfVVJMX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNTaW5nbGVJdGVtVGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzTmFtZSIsIjwlPVVERElBY3Rpb25JbnB1dHMuTkFNRV9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNMYW5ndWFnZUlucHV0VGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9WSUVXSUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04lPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0lkZW50aWZpZXJUYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNJZGVudGlmaWVycyIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0NhdGVnb3J5VGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQ2F0ZWdvcmllcyIsZm9ybSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAgCi08L3NjcmlwdD4gIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRm9ybSh0aGlzKSI+ICAKLSAgICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPiAgICAgIAotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZJT4iIHZhbHVlPSI8JT1mb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKSU+Ij4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVUQUlMU19FRElUQUJMRSIsc2VsZWN0ZWROb2RlLmdldE5vZGVOYW1lKCkpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4gICAgICAgIAotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSIpJT4KLSAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICA8JT1mb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1dTRExVUkwiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNTaW5nbGVJdGVtX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzTmFtZSIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNTaW5nbGVJdGVtX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4gICAKLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRGVzY3JpcHRpb25zIik7Ci0gICBTdHJpbmdbXSBkZXNjU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OUyIsIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGVzY1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzSWRlbnRpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0lkZW50aWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzQ2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgCi08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0F1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Zvcm0+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci0gIHJlc3VtZVByb3h5TG9hZFBhZ2UoKTsgIAotPC9zY3JpcHQ+ICAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MjI4YjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1Qcm9wZXJ0aWVzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBTdHJpbmcgd3NkbFVSTDsKLSAgIC8vIHNlbGVjdGVkTm9kZSBzaG91bGQgYmUgZWl0aGVyIGEgc2VydmljZSBvciBhIHNlcnZpY2UgaW50ZXJmYWNlIG5vZGUuCi0gICBpZiAoc2VsZWN0ZWROb2RlIGluc3RhbmNlb2YgU2VydmljZU5vZGUpCi0gICB7Ci0gICAgIFNlcnZpY2VOb2RlIHNlcnZpY2VOb2RlID0gKFNlcnZpY2VOb2RlKXNlbGVjdGVkTm9kZTsKLSAgICAgd3NkbFVSTCA9IHNlcnZpY2VOb2RlLmdldFdTRExVUkxGcm9tRGV0YWlsc1Rvb2woKTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgU2VydmljZUludGVyZmFjZU5vZGUgc2lOb2RlID0gKFNlcnZpY2VJbnRlcmZhY2VOb2RlKXNlbGVjdGVkTm9kZTsKLSAgICAgd3NkbFVSTCA9IHNpTm9kZS5nZXRXU0RMVVJMRnJvbURldGFpbHNUb29sKCk7Ci0gICB9Ci0gICBmb3JtUHJvcGVydGllcy5wdXQoImZvcm1BY3Rpb25MaW5rIiwidWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIik7Ci0gICBmb3JtUHJvcGVydGllcy5wdXQoIndzZGxVUkwiLHdzZGxVUkwpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmZhMjUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb25MaW5rIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1BY3Rpb25MaW5rLmFwcGVuZCgidWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcCIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VbnB1Ymxpc2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VbnB1Ymxpc2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhMzM3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVW5wdWJsaXNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCkpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIAotICAgRm9ybVRvb2wgdW5wdWJsaXNoVG9vbCA9IChGb3JtVG9vbCkobmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0lPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VOUFVCTElTSCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci08JQotICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgIHsKLSU+Ci0gICAgdmFyIGF1dGhlbnRpY2F0aW9uU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bnB1Ymxpc2hBdXRoZW50aWNhdGlvbiIpOwotICAgIGF1dGhlbnRpY2F0aW9uU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgdmFyIGZvcm0gPSBkb2N1bWVudC5mb3Jtc1swXTsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZyl1bnB1Ymxpc2hUb29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpKSU+IjsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpdW5wdWJsaXNoVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCkpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKXVucHVibGlzaFRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCkpJT4iOyAgICAKLTwlCi0gICB9Ci0lPgotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIiBvblVubG9hZD0iY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCkiPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VucHVibGlzaEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBoYW5kbGVTdWJtaXQodGhpcykiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9IHVucHVibGlzaFRvb2wuZ2V0SGlnaGxpZ2h0ZWRJbWFnZUxpbmsoKTsKLSAgIFN0cmluZyB0aXRsZSA9IHVucHVibGlzaFRvb2wuZ2V0QWx0VGV4dCgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTlBVQkxJU0hfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInVucHVibGlzaEF1dGhlbnRpY2F0aW9uIik7Ci0lPiAgICAgICAKLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9hZHZhbmNlZENvbW1vbl90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvYWR2YW5jZWRDb21tb25fdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmU4NTNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9hZHZhbmNlZENvbW1vbl90YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNvbHNwYW49MyBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01BWF9TRUFSQ0hfU0VUIiklPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfU0VBUkNIX1NFVCkpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjb2xzcGFuPTM+Ci0gICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCU+IiBjbGFzcz0ic210ZXh0ZW50ZXIiPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFYX1JFU1VMVFMiKSU+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTKSkKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTJT4iIGNsYXNzPSJzbXRleHRlbnRlciI+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U3NzljNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5BYnN0cmFjdFVERElFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi1VRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLU5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1Gb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLVN0cmluZyB1c2VybmFtZSA9IG51bGw7Ci1TdHJpbmcgcGFzc3dvcmQgPSBudWxsOwotaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEFic3RyYWN0VURESUVsZW1lbnQpCi17Ci0gIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKChBYnN0cmFjdFVERElFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0UmVnaXN0cnlFbGVtZW50KCk7Ci0gIHVzZXJuYW1lID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLX0KLWlmICh1c2VybmFtZSA9PSBudWxsKQotICB1c2VybmFtZSA9ICIiOwotaWYgKHBhc3N3b3JkID09IG51bGwpCi0gIHBhc3N3b3JkID0gIiI7Ci0lPgotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxsYWJlbCBmb3I9IjwlPXRhYmxlQ29udGFpbmVySWQrIl9pbnB1dF9wdWJsaXNoX3VybCIlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9VUkwiKSU+PC9sYWJlbD4KLSAgICAgICAgPCUKLSAgICAgICAgaWYgKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCkpCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSI8JT10YWJsZUNvbnRhaW5lcklkKyJfaW5wdXRfcHVibGlzaF91cmwiJT4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICA8bGFiZWwgZm9yPSI8JT10YWJsZUNvbnRhaW5lcklkKyJfaW5wdXRfdXNlcl9pZCIlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVNFUklEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwlCi0gICAgICAgIGlmICghZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKSkKLSAgICAgICAgewotICAgICAgICAlPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQrIl9pbnB1dF91c2VyX2lkIiU+IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh1c2VybmFtZSklPiIgY2xhc3M9InRleHRlbnRlciI+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPjxsYWJlbCBmb3I9IjwlPXRhYmxlQ29udGFpbmVySWQrIl9pbnB1dF9wYXNzd29yZCIlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUEFTU1dPUkQiKSU+PC9sYWJlbD48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQrIl9pbnB1dF9wYXNzd29yZCIlPiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChwYXNzd29yZCklPiIgY2xhc3M9InRleHRlbnRlciI+PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NDlhNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+IAotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NBVEVHT1JJRVMiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGRDYXRlZ29yeVJvdygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkQ2F0ZWdvcnlSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPiAgCi0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DQVRFR09SWV9UWVBFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfS0VZX1ZBTFVFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OUyIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotICAgaWYgKHRhYmxlQ29udGFpbmVySWQuc3RhcnRzV2l0aCgiZmluZEJ1c2luZXNzZXMiKSkKLSAgIHsvLyBjb25kaXRpb24gdG8gdHVybiBvZmYgZm9yIGV2ZXJ5dGhpbmcgb3RoZXIgdGhhbiBmaW5kIGJ5IGJ1c2luZXNzIHNlYXJjaGVzLgotJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJjZW50ZXIiPgotICAgICAgICA8bGFiZWwgZm9yPSJidXNpbmVzc19jYXRlZ29yaWVzIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTU19DQVRFR09SSUVTIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgIDxzZWxlY3QgaWQ9ImJ1c2luZXNzX2NhdGVnb3JpZXMiIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICA8b3B0aW9uPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9CVVNJTkVTU0VTX09OTFkiKSU+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5zZXJ2aWNlU3Vic2V0JT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFU19PTkxZIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuY29tYmluZUNhdGVnb3J5QmFncyU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQk9USCIpJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JSAgIAotICAgfQotJT4gICAgIAotPC9kaXY+ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzQ2F0ZWdvcmllc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0NhdGVnb3JpZXNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGNmZTRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzQ2F0ZWdvcmllc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NBVEVHT1JJRVMiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGREZXRhaWxzQ2F0ZWdvcnlSb3coJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdHJ1ZSkiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkRGV0YWlsc0NhdGVnb3J5Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRTZWxlY3RlZERldGFpbHNDYXRlZ29yeVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2FuY2VsU2VsZWN0ZWREZXRhaWxzQ2F0ZWdvcnlSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSU+PC9hPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NBVEVHT1JZX1RZUEUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfVkFMVUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNEaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzRGlzY292ZXJ5VVJMc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkM2Q3MTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNEaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICBib29sZWFuIGhhc0Vycm9ycyA9ICgoQm9vbGVhbilzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKSkuYm9vbGVhblZhbHVlKCk7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+ICAKLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkxTIiklPjwvc3Ryb25nPgotPCUKLSAgIGlmIChoYXNFcnJvcnMpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+ICAgICAgCi0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRydWUpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZWRpdFNlbGVjdGVkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2FuY2VsU2VsZWN0ZWREZXRhaWxzRGlzY292ZXJ5VVJMUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIiklPjwvYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElTQ09WRVJZVVJMIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OUyIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzSWRlbnRpZmllcnNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNJZGVudGlmaWVyc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkN2JjNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNJZGVudGlmaWVyc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lERU5USUZJRVJTIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkRGV0YWlsc0lkZW50aWZpZXJSb3coJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdHJ1ZSkiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkRGV0YWlsc0lkZW50aWZpZXJSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZWRpdFNlbGVjdGVkRGV0YWlsc0lkZW50aWZpZXJSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNhbmNlbFNlbGVjdGVkRGV0YWlsc0lkZW50aWZpZXJSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSU+PC9hPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lERU5USUZJRVJfVFlQRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfS0VZX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9WQUxVRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0xhbmd1YWdlSW5wdXRfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ4ZDVlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0xhbmd1YWdlSW5wdXRfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IChTdHJpbmdbXSlzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIFN0cmluZ1tdIHRpdGxlS2V5cyA9IHtvdGhlclByb3BlcnRpZXNbMF0sb3RoZXJQcm9wZXJ0aWVzWzFdfTsKLSAgIGJvb2xlYW4gaGFzRXJyb3JzID0gb3RoZXJQcm9wZXJ0aWVzWzJdLmVxdWFscyhCb29sZWFuLlRSVUUudG9TdHJpbmcoKSk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UodGl0bGVLZXlzWzBdKSU+PC9zdHJvbmc+Ci08JQotICAgaWYgKGhhc0Vycm9ycykKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4gICAgICAKLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci08JQotICAgU3RyaW5nIHRleHRDb250cm9sVGl0bGVLZXk7Ci0gICBpZiAodGl0bGVLZXlzWzBdLmVxdWFscygiRk9STV9MQUJFTF9OQU1FUyIpKQotICAgICB0ZXh0Q29udHJvbFRpdGxlS2V5ID0gIkZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUUiOwotICAgZWxzZQotICAgICB0ZXh0Q29udHJvbFRpdGxlS2V5ID0gIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIjsKLSU+ICAgICAgICAgCi0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UodGV4dENvbnRyb2xUaXRsZUtleSkpJT4nLHRydWUpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZERldGFpbHNMYW5ndWFnZUlucHV0Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRTZWxlY3RlZERldGFpbHNMYW5ndWFnZUlucHV0Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjYW5jZWxTZWxlY3RlZERldGFpbHNMYW5ndWFnZUlucHV0Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xBTkdVQUdFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0aXRsZUtleXNbMV0pJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc1NpbmdsZUl0ZW1fdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNTaW5nbGVJdGVtX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFjN2NmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc1NpbmdsZUl0ZW1fdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZyBpdGVtSGVhZGVyID0gKFN0cmluZylzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWl0ZW1IZWFkZXIlPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OUyIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIzZjUzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGlzY292ZXJ5VVJMc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgYm9vbGVhbiBoYXNFcnJvcnMgPSAoKEJvb2xlYW4pc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCkpLmJvb2xlYW5WYWx1ZSgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPiAgCi0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElTQ09WRVJZVVJMUyIpJT48L3N0cm9uZz4KLTwlCi0gICBpZiAoaGFzRXJyb3JzKQotICAgewotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPiAgICAgICAgICAgICAgICAgIAotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkRGlzY292ZXJ5VVJMUm93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElTQ09WRVJZVVJMIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9maW5kUXVhbGlmaWVyc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMzcyMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsgICAKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPjxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklORFFVQUxJRklFUlMiKSU+PC9zdHJvbmc+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PGxhYmVsIGZvcj0iY29tYmluZV9rZXlzIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DT01CSU5FX0tFWVMiKSU+PC9sYWJlbD48L3RkPgotICAgICAgPHRkPgotICAgICAgICA8c2VsZWN0IGlkPSJjb21iaW5lX2tleXMiIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLmFuZEFsbEtleXMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0FOREFMTEtFWVMiKSU+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5vckFsbEtleXMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX09SQUxMS0VZUyIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLm9yTGlrZUtleXMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX09STElLRUtFWVMiKSU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TT1JUX0JZX05BTUUiKSU+PC90ZD4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0iYWR2YW5jZV9zb3J0X2J5X25hbWVfYXNjIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NPUlRfQllfTkFNRSU+IiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5zb3J0QnlOYW1lQXNjJT4iIGNoZWNrZWQ+PGxhYmVsIGZvcj0iYWR2YW5jZV9zb3J0X2J5X25hbWVfYXNjIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TT1JUX0FTQyIpJT48L2xhYmVsPgotICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJhZHZhbmNlX3NvcnRfYnlfbmFtZV9kZXNjIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NPUlRfQllfTkFNRSU+IiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5zb3J0QnlOYW1lRGVzYyU+Ij48bGFiZWwgZm9yPSJhZHZhbmNlX3NvcnRfYnlfbmFtZV9kZXNjIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TT1JUX0RFU0MiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU09SVF9CWV9EQVRFIiklPjwvdGQ+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9ImFkdmFuY2Vfc29ydF9ieV9kYXRlX2FzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TT1JUX0JZX0RBVEUlPiIgdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5RGF0ZUFzYyU+IiBjaGVja2VkPjxsYWJlbCBmb3I9ImFkdmFuY2Vfc29ydF9ieV9kYXRlX2FzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU09SVF9BU0MiKSU+PC9sYWJlbD4KLSAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0iYWR2YW5jZV9zb3J0X2J5X2RhdGVfZGVzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TT1JUX0JZX0RBVEUlPiIgdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5RGF0ZURlc2MlPiI+PGxhYmVsIGZvcj0iYWR2YW5jZV9zb3J0X2J5X2RhdGVfZGVzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU09SVF9ERVNDIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9maW5kZm9ybWhlYWRlci5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZmluZGZvcm1oZWFkZXIuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTgyZTIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9maW5kZm9ybWhlYWRlci5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRpdGxlSW1hZ2VQYXRoKSklPiIgYWx0PSIiPgotICAgICAgPHN0cm9uZz48JT10aXRsZSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgd2lkdGg9IioiPiZuYnNwOzwvdGQ+Ci08JQotICAgaW50IGNvbHNwYW4gPSAyOwotICAgaWYgKHN1YlF1ZXJ5S2V5ICE9IG51bGwgJiYgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPiAwKQotICAgewotICAgICBpbnQgbm9kZUlkID0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpOwotICAgICBpbnQgdG9vbElkID0gZm9ybVRvb2wuZ2V0VG9vbElkKCk7Ci0gICAgIGludCB2aWV3SWQgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCk7Ci0gICAgIGludCB2aWV3VG9vbElkID0gc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKTsKLSAgICAgaW50IGNvdW50ID0gMTsKLSU+Ci0gICAgPHRkIGFsaWduPSJyaWdodCI+Ci0gICAgICA8YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLCIiLGZhbHNlKSkpJT4iPjwlPWNvdW50JT48L2E+Ci0gICAgPC90ZD4KLTwlCi0gICAgIFN0cmluZyBjdXJyZW50U3ViUXVlcnlLZXkgPSBzdWJRdWVyeUtleTsKLSAgICAgaW50IHNlcGFyYXRvclBvcyA9IC0xOwotICAgICB3aGlsZSAoKHNlcGFyYXRvclBvcyA9IGN1cnJlbnRTdWJRdWVyeUtleS5pbmRleE9mKCc6JykpICE9IC0xKQotICAgICB7Ci0gICAgICAgY291bnQrKzsKLSU+Ci0gICAgPHRkIGFsaWduPSJyaWdodCI+Ci0gICAgICA8YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLGN1cnJlbnRTdWJRdWVyeUtleS5zdWJzdHJpbmcoMCxzZXBhcmF0b3JQb3MpLGZhbHNlKSkpJT4iPjwlPWNvdW50JT48L2E+Ci0gICAgPC90ZD4gICAgICAKLTwlICAgCi0gICAgICAgY3VycmVudFN1YlF1ZXJ5S2V5ID0gY3VycmVudFN1YlF1ZXJ5S2V5LnN1YnN0cmluZyhzZXBhcmF0b3JQb3MrMSxjdXJyZW50U3ViUXVlcnlLZXkubGVuZ3RoKCkpOwotICAgICB9Ci0gICAgIGNvbHNwYW4gKz0gY291bnQ7Ci0gICB9Ci0lPiAgICAKLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgY29sc3Bhbj08JT1jb2xzcGFuJT4+IDxpbWcgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiIGFsaWduPSJ0b3AiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiPiA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9pZGVudGlmaWVyc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvaWRlbnRpZmllcnNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWFjNDZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9pZGVudGlmaWVyc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOyAgIAotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lERU5USUZJRVJTIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkSWRlbnRpZmllclJvdygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4gIAotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgIAotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lERU5USUZJRVJfVFlQRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfS0VZX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9WQUxVRSIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9sYW5ndWFnZUlucHV0X3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ1OGQxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0gKFN0cmluZ1tdKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgU3RyaW5nW10gdGl0bGVLZXlzID0ge290aGVyUHJvcGVydGllc1swXSxvdGhlclByb3BlcnRpZXNbMV19OwotICAgYm9vbGVhbiBoYXNFcnJvcnMgPSBvdGhlclByb3BlcnRpZXNbMl0uZXF1YWxzKEJvb2xlYW4uVFJVRS50b1N0cmluZygpKTsKLSAgIGJvb2xlYW4gaXNGaW5kID0gdGFibGVDb250YWluZXJJZC5zdGFydHNXaXRoKCJmaW5kIik7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UodGl0bGVLZXlzWzBdKSU+PC9zdHJvbmc+Ci08JQotICAgaWYgKGhhc0Vycm9ycykKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci08JQotICAgU3RyaW5nIHRleHRDb250cm9sVGl0bGVLZXk7Ci0gICBpZiAodGl0bGVLZXlzWzBdLmVxdWFscygiRk9STV9MQUJFTF9OQU1FUyIpKQotICAgICB0ZXh0Q29udHJvbFRpdGxlS2V5ID0gIkZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUUiOwotICAgZWxzZQotICAgICB0ZXh0Q29udHJvbFRpdGxlS2V5ID0gIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIjsKLSU+ICAgICAgIAotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGRMYW5ndWFnZUlucHV0Um93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UodGV4dENvbnRyb2xUaXRsZUtleSkpJT4nKSI+Ci0gICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPgotICAgICAgPC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRpdGxlS2V5c1sxXSklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlIAotICAgaWYgKGlzRmluZCkKLSAgIHsvLyBjb25kaXRpb24gdG8gdHVybiBvZmYgd2hlbiBwdWJsaXNoaW5nIHRvIGNvbWUuCi0lPiAgICAgCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbmFtZXNfZmluZFF1YWxpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIH0KLSU+ICAgICAKLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2xvZ2luX2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9sb2dpbl9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYThjNWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2xvZ2luX2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQWJzdHJhY3RVRERJRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi1VRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLU5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKChBYnN0cmFjdFVERElFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0UmVnaXN0cnlFbGVtZW50KCk7Ci1TdHJpbmcgdXNlcm5hbWUgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci1TdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotCi1pZiAodXNlcm5hbWUgPT0gbnVsbCkgewotCXVzZXJuYW1lID0gIiI7Ci19Ci0KLWlmIChwYXNzd29yZCA9PSBudWxsKSB7Ci0JcGFzc3dvcmQgPSAiIjsKLX0KLQotaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkgewotCXB1Ymxpc2hVUkwgPSAiIjsKLX0KLQotJT4KLSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCU+IiB2YWx1ZT0idHJ1ZSIvPgotICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiIgdmFsdWU9IlF1ZXJ5IFJlc3VsdHMiLz4KLSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCU+IiB2YWx1ZT0iMTAwIi8+Ci0gIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMlPiIgdmFsdWU9IjEwIi8+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICA8bGFiZWw+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9VUkwiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4iIHZhbHVlPSI8JT1wdWJsaXNoVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiLz4KLSAgICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxsYWJlbD48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VU0VSSUQiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSI8JT11c2VybmFtZSU+IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+IiBjbGFzcz0idGV4dGVudGVyIi8+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPjxsYWJlbD48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QQVNTV09SRCIpJT48L2xhYmVsPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiB2YWx1ZSA9IjwlPXBhc3N3b3JkJT4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPiIgY2xhc3M9InRleHRlbnRlciIvPjwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9uYW1lc19maW5kUXVhbGlmaWVyc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbmFtZXNfZmluZFF1YWxpZmllcnNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2VlNjhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9uYW1lc19maW5kUXVhbGlmaWVyc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImZpbmRfcXVhbGlmaWVyX2V4YWN0X25hbWVfbWF0Y2giIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLmV4YWN0TmFtZU1hdGNoJT4iPjxsYWJlbCBmb3I9ImZpbmRfcXVhbGlmaWVyX2V4YWN0X25hbWVfbWF0Y2giPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VYQUNUX05BTUVfTUFUQ0giKSU+PC9sYWJlbD4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iZmluZF9xdWFsaWZpZXJfY2FzZV9zZW5zaXRpdmVfbWF0Y2giIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLmNhc2VTZW5zaXRpdmVNYXRjaCU+Ij48bGFiZWwgZm9yPSJmaW5kX3F1YWxpZmllcl9jYXNlX3NlbnNpdGl2ZV9tYXRjaCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0FTRV9TRU5TSVRJVkVfTUFUQ0giKSU+PC9sYWJlbD4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9yZXN1bHRzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9yZXN1bHRzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYzMTg1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvcmVzdWx0c190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nW10gc3BlY2lmaWNJbmZvID0gKFN0cmluZ1tdKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgU3RyaW5nIHRpdGxlID0gc3BlY2lmaWNJbmZvWzBdOwotICAgU3RyaW5nIHBhcmVudENvbnRhaW5lcklkID0gc3BlY2lmaWNJbmZvWzFdOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXRpdGxlJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3Jlc3VsdHNmb3JtaGVhZGVyLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9yZXN1bHRzZm9ybWhlYWRlci5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwM2MyNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3Jlc3VsdHNmb3JtaGVhZGVyLmluYworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0aXRsZUltYWdlUGF0aCkpJT4iIGFsdD0iIj4KLSAgICAgIDxzdHJvbmc+PCU9dGl0bGUlPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci08JQotICAgaW50IGNvbHNwYW4gPSAxOwotICAgaWYgKGhhc1RhcmdldCkKLSAgIHsKLSAgICAgU3RyaW5nIHJldHVybkxpbmsgPSBUcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbi5nZXRBY3Rpb25MaW5rRm9yUmV0dXJuKCk7Ci0lPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IioiPiZuYnNwOzwvdGQ+Ci0gICAgPHRkIGFsaWduPSJyaWdodCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHJldHVybkxpbmspKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19UQVJHRVQiKSU+PC9hPgotICAgIDwvdGQ+Ci08JQotICAgICBjb2xzcGFuICs9IDI7Ci0gICB9Ci0lPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCBjb2xzcGFuPTwlPWNvbHNwYW4lPj4gPGltZyBoZWlnaHQ9MiB3aWR0aD0iMTAwJSIgYWxpZ249InRvcCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiI+IDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY29sc3Bhbj08JT1jb2xzcGFuJT4+Ci08JQotICAgaWYgKGhhc1RhcmdldCkKLSAgIHsKLSU+Ci08JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TVUJRVUVSWSIpJT4KLTwlCi0gICB9Ci0lPgotPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUVVFUlkiKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRfY2F0ZWdvcmllc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRfY2F0ZWdvcmllc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMWZmMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkX2NhdGVnb3JpZXNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+IAotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPCEtLQotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRTZWxlY3RlZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjYW5jZWxTZWxlY3RlZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIiklPjwvYT4KLSAgICA8L3RkPgotICAgIC0tPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTonJzsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPCEtLQotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAtLT4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxNSUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgIDwhLS0KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMCUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NIRUNLRUQiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSI3MCUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZJTEUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIqIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OUyIpJT48L3RoPgotICAgICAgLS0+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PiAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNQdWJsaXNoZXJBc3NlcnRpb25zX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c1B1Ymxpc2hlckFzc2VydGlvbnNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDI4MjI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c1B1Ymxpc2hlckFzc2VydGlvbnNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ1tdIHNwZWNpZmljSW5mbyA9IChTdHJpbmdbXSlzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIFN0cmluZyB0YWJsZVRpdGxlS2V5ID0gc3BlY2lmaWNJbmZvWzBdOwotICAgYm9vbGVhbiBoYXNFcnJvcnMgPSBzcGVjaWZpY0luZm9bMV0uZXF1YWxzKEJvb2xlYW4uVFJVRS50b1N0cmluZygpKTsKLSAgIFN0cmluZyBxdWVyeUl0ZW1TdHJpbmcgPSBzcGVjaWZpY0luZm9bMl07Ci0gICBTdHJpbmcgcGFyZW50Q29udGFpbmVySWQgPSBzcGVjaWZpY0luZm9bM107Ci0gICBTdHJpbmcgdHJhbnNmZXJUYXJnZXRLZXkgPSBzcGVjaWZpY0luZm9bNF07Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UodGFibGVUaXRsZUtleSklPjwvc3Ryb25nPgotPCUKLSAgIGlmIChoYXNFcnJvcnMpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+ICAgICAgICAgCi0gICAgPC90ZD4KLTwlCi0gICBpZiAoc2VjdGlvbkhlYWRlckluZm8uaXNEeW5hbWljKCkpCi0gICB7Ci0lPiAgICAgICAKLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDppbml0aWF0ZVN1YlF1ZXJ5KCc8JT1wYXJlbnRDb250YWluZXJJZCU+JywnPCU9dHJhbnNmZXJUYXJnZXRLZXklPicsPCU9cXVlcnlJdGVtU3RyaW5nJT4sdHJ1ZSkiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfR0VUIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmluaXRpYXRlU3ViUXVlcnkoJzwlPXBhcmVudENvbnRhaW5lcklkJT4nLCc8JT10cmFuc2ZlclRhcmdldEtleSU+Jyw8JT1xdWVyeUl0ZW1TdHJpbmclPixmYWxzZSkiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRklORCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLTwlCi0gICB9Ci0lPiAgICAgICAKLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT0oKEJ1c2luZXNzRWxlbWVudCl1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpLmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJUkVDVElPTiIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FTU0VSVElPTl9UWVBFIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YjNkYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdbXSBzcGVjaWZpY0luZm8gPSAoU3RyaW5nW10pc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCk7Ci0gICBTdHJpbmcgdGFibGVUaXRsZUtleSA9IHNwZWNpZmljSW5mb1swXTsKLSAgIGJvb2xlYW4gaGFzRXJyb3JzID0gc3BlY2lmaWNJbmZvWzFdLmVxdWFscyhCb29sZWFuLlRSVUUudG9TdHJpbmcoKSk7Ci0gICBTdHJpbmcgcXVlcnlJdGVtU3RyaW5nID0gc3BlY2lmaWNJbmZvWzJdOwotICAgU3RyaW5nIHBhcmVudENvbnRhaW5lcklkID0gc3BlY2lmaWNJbmZvWzNdOwotICAgU3RyaW5nIHRyYW5zZmVyVGFyZ2V0S2V5ID0gc3BlY2lmaWNJbmZvWzRdOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRhYmxlVGl0bGVLZXkpJT48L3N0cm9uZz4KLTwlCi0gICBpZiAoaGFzRXJyb3JzKQotICAgewotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPiAgICAgICAgIAotICAgIDwvdGQ+Ci08JQotICAgaWYgKHNlY3Rpb25IZWFkZXJJbmZvLmlzRHluYW1pYygpKQotICAgewotJT4gICAgICAgCi0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6aW5pdGlhdGVTdWJRdWVyeSgnPCU9cGFyZW50Q29udGFpbmVySWQlPicsJzwlPXRyYW5zZmVyVGFyZ2V0S2V5JT4nLDwlPXF1ZXJ5SXRlbVN0cmluZyU+LHRydWUpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0dFVCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDppbml0aWF0ZVN1YlF1ZXJ5KCc8JT1wYXJlbnRDb250YWluZXJJZCU+JywnPCU9dHJhbnNmZXJUYXJnZXRLZXklPicsPCU9cXVlcnlJdGVtU3RyaW5nJT4sZmFsc2UpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0ZJTkQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci08JQotICAgfQotJT4gICAgICAgCi0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3NfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWZkOTRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3NfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2Q2YTc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NWMwOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMzA0M2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfb3Blbl9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZDdjZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9jYXRlZ29yeS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2NhdGVnb3J5LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUxNGQ3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2NhdGVnb3J5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvZmluZF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvZmluZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxOGQ3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2ZpbmRfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9maW5kX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU0MGEwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzUwNjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDU2OTljLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNDI2M2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyY2VmMWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ODk0ZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NWVhNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZmY4NTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ZTk5MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX2Nsb3NlZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczN2Q3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1NTAwYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19vcGVuX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19vcGVuX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZjYTE1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJ5LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcnkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjA3NjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcnkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWQ3OTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDE1MDZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZ2lzdHJ5LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVnaXN0cnkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjQzY2FlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVnaXN0cnkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWdzdHJ5Y2F0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZ3N0cnljYXRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3ZDU5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZ3N0cnljYXRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTY3MTRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTMyNWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmU0YTc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmQ5ODIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZjYzAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5OGY2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU2NTQ0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX29wZW5fZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX29wZW5fZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MmI0YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19vcGVuX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmODYwNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY5MjJhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNTQxNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX2J1c19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MzBiMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTRkZDNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGJkODNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBlYjE5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk3MTNlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZGM5YTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl9jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfVE9PTEJBUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvbmF2aWdhdG9yX3Rvb2xiYXIuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05URU5UJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWM5Y2EwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90cmVldmlldy5jc3MiKSklPiI+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdHJlZXZpZXcuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotPC9oZWFkPgotPCUKLSAgIFN0cmluZyBzZWxlY3RlZEFuY2hvck5hbWUgPSAiIjsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgaW50IGZvY3VzZWROb2RlSWQgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldEZvY3VzZWROb2RlSWQoKTsKLSAgIFN0cmluZyBmb2N1c2VkQW5jaG9yTmFtZSA9IFN0cmluZy52YWx1ZU9mKGZvY3VzZWROb2RlSWQpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKQotICAgewotICAgICBzZWxlY3RlZEFuY2hvck5hbWUgPSBzZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotICAgICBpZiAoZm9jdXNlZE5vZGVJZCA9PSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpCi0gICAgICAgZm9jdXNlZEFuY2hvck5hbWUgPSBzZWxlY3RlZEFuY2hvck5hbWU7Ci0gICB9Ci0lPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBvbkxvYWQ9InNlbGYubG9jYXRpb24uaGFzaD0nIzwlPWZvY3VzZWRBbmNob3JOYW1lJT4nO3NldFNlbGVjdGVkQW5jaG9yTmFtZSgnPCU9c2VsZWN0ZWRBbmNob3JOYW1lJT4nKSIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRyZWVjb250ZW50Ym9yZGVyIj4KLTwlPW5hdmlnYXRvck1hbmFnZXIucmVuZGVyVHJlZVZpZXcocmVzcG9uc2UpJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9uYXZpZ2F0b3JfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZmU1MTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgidWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUHJvY2Vzc1VERElGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9uYXZpZ2F0b3IuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAodWRkaVBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICBlbHNlCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTkFWSUdBVE9SIiklPjwvdGQ+Ci08JQotICAgU3RyaW5nIGFsdFJlZnJlc2ggPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9SRUZSRVNIIik7Ci0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAKLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0UmVmcmVzaCU+IiB0aXRsZT0iPCU9YWx0UmVmcmVzaCU+Ij48L2E+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRDbGVhciU+IiB0aXRsZT0iPCU9YWx0Q2xlYXIlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxZDFjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19UT09MQkFSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc190b29sYmFyLmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDkxMDU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPCUKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5hdmlnYXRvck5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgaWYgKHNlbGVjdGVkTmF2aWdhdG9yTm9kZSAhPSBudWxsKQotICAgewotICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgaWYgKHNlbGVjdGVkTmF2aWdhdG9yTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5hdmlnYXRvck5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgZWxzZQotICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROYXZpZ2F0b3JOb2RlLmdldFZpZXdUb29sTWFuYWdlcigpOwotICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICBpZiAoc2VsZWN0ZWRUb29sICE9IG51bGwgJiYgc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBsb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkVG9vbC5nZXRGb3JtTGluaygpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fQUNUSU9OX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICAgfQotICAgfQotICAgZWxzZQotICAgewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX05PREVfU0VMRUNURUQiKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA5Y2QyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoInVkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChVRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9Qcm9jZXNzVURESUZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2FjdGlvbnMuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAodWRkaVBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICB7Ci0gICAgIGlmICh1ZGRpUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIH0KLSAgIGlmIChkb3VibGVDbGlja0NvbHVtblRpdGxlID09IG51bGwpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQUNUSU9OUyIpJT48L3RkPgotPCUKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5hdmlnYXRvck5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgaWYgKHNlbGVjdGVkTmF2aWdhdG9yTm9kZSAhPSBudWxsKQotICAgewotICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgaWYgKHNlbGVjdGVkTmF2aWdhdG9yTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5hdmlnYXRvck5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgZWxzZQotICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROYXZpZ2F0b3JOb2RlLmdldFZpZXdUb29sTWFuYWdlcigpOwotICAgICBmb3IgKGludCBpPTA7aTx0b29sTWFuYWdlci5nZXROdW1iZXJPZlRvb2xzKCk7aSsrKQotICAgICB7Ci0gICAgICAgVG9vbCB0b29sID0gKFRvb2wpdG9vbE1hbmFnZXIuZ2V0VG9vbChpKTsKLSU+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjwlPXRvb2wucmVuZGVyVG9vbChyZXNwb25zZSxjb250cm9sbGVyKSU+PC90ZD4KLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2NicGFuZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvY2JwYW5lcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMjcxOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvY2JwYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgY2F0ZWdvcnlCcm93c2VyV2luZG93ID0gdG9wOwotICB2YXIgY2F0ZWdvcnlCcm93c2VyV2luZG93V29ya0FyZWEgPSB0b3AuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX1dPUktBUkVBJT4iXTsKLSAgdmFyIGNhdGVnb3J5QnJvd3NlcldpbmRvd1Rvb2xiYXIgPSBjYXRlZ29yeUJyb3dzZXJXaW5kb3cuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX1RPT0xCQVIlPiJdOwotICB2YXIgY2F0ZWdvcnlCcm93c2VyV2luZG93Q29udGVudCA9IGNhdGVnb3J5QnJvd3NlcldpbmRvdy5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLkNBVEVHT1JJRVNfQ09OVEVOVCU+Il07Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvZGV0YWlsc3RhYmxlcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZGUzNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvZGV0YWlsc3RhYmxlcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdyh0YWJsZUNvbnRhaW5lcklkLHRleHRDb250cm9sVGl0bGUsaGFzRXJyb3IpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI3MCUiOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiPCU9QWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUJT4iKSk7IDwlLy8gdmlld0lkJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBsYW5ndWFnZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwgdGV4dCU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLHRleHRDb250cm9sVGl0bGUpKTsgPCUvLyBjb250cm9sIHRpdGxlJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsaGFzRXJyb3IpKTsgPCUvLyBtb2RlJT4KLSAgICBpZiAoaGFzRXJyb3IpCi0gICAgewotICAgICAgdmFyIGxhbmd1YWdlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgICBsYW5ndWFnZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgICBwb3B1bGF0ZUxhbmd1YWdlU2VsZWN0KGxhbmd1YWdlU2VsZWN0KTsKLSAgICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQobGFuZ3VhZ2VTZWxlY3QpOwotICAgICAgCi0gICAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAgdGV4dElucHV0LnRpdGxlID0gdGV4dENvbnRyb2xUaXRsZTsKLSAgICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQodGV4dElucHV0KTsKLSAgICAgIAotICAgICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIAotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICAKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbikKLSAgewotICAgIGZvciAodmFyIGk9MDtpPGNvbHVtbi5jaGlsZE5vZGVzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgY29sdW1uLnJlbW92ZUNoaWxkKGNvbHVtbi5jaGlsZE5vZGVzW2ldKTsKLSAgICAgIGktLTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciByZW1vdmVMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChyZW1vdmVMaW5rLCJyZW1vdmVEZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgcmVtb3ZlTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKHJlbW92ZUxpbmspOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoZWRpdExpbmssImVkaXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOyAgCi0gIH0gIAotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGNhbmNlbExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGNhbmNlbExpbmssImNhbmNlbERldGFpbHNMYW5ndWFnZUlucHV0Um93RWRpdCIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgY2FuY2VsTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGNhbmNlbExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW3Jvd0luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICAKLSAgICB2YXIgbGFuZ0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIHZhciBpbnB1dFZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgIHZhciB0ZXh0Q29udHJvbFRpdGxlID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKQotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHJldHVybjsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPSB0cnVlOwotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICAKLSAgICB2YXIgbGFuZ3VhZ2VTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBwb3B1bGF0ZUxhbmd1YWdlU2VsZWN0KGxhbmd1YWdlU2VsZWN0KTsKLSAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChsYW5ndWFnZVNlbGVjdCxjb2x1bW4xQ29udHJvbCk7Ci0gICAgbGFuZ3VhZ2VTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIHNldExhbmd1YWdlU2VsZWN0KGxhbmd1YWdlU2VsZWN0LGxhbmdJZCk7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIHZhciB0ZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKHRleHRJbnB1dCxjb2x1bW4yQ29udHJvbCk7Ci0gICAgdGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgdGV4dElucHV0LnRpdGxlID0gdGV4dENvbnRyb2xUaXRsZTsKLSAgICB0ZXh0SW5wdXQudmFsdWUgPSBpbnB1dFZhbHVlOwotCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMyk7Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyxyb3dJbmRleCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldERldGFpbHNMYW5ndWFnZUlucHV0Um93KHRhYmxlQ29udGFpbmVySWQsaW5kZXgsdmlld0lkLGxhbmdJZCxpbnB1dFZhbHVlKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzK2luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWUgPSB2aWV3SWQ7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlID0gbGFuZ0lkOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9IGlucHV0VmFsdWU7Ci0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBzZXRMYW5ndWFnZVNlbGVjdChjb2x1bW4xQ29udHJvbCxsYW5nSWQpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAgcG9wdWxhdGVMYW5ndWFnZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICAgIHZhciBsYW5ndWFnZSA9IHNldExhbmd1YWdlU2VsZWN0KHRlbXBTZWxlY3QsbGFuZ0lkKTsKLSAgICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGxhbmd1YWdlKSksY29sdW1uMUNvbnRyb2wpOwotICAgIH0KLSAgICAKLSAgICB2YXIgY29sdW1uMkNvbnRyb2wgPSBjb2x1bW4yLmNoaWxkTm9kZXNbMF07Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgY29sdW1uMkNvbnRyb2wudmFsdWUgPSBpbnB1dFZhbHVlOwotICAgIGVsc2UKLSAgICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGlucHV0VmFsdWUpKSxjb2x1bW4yQ29udHJvbCkKLSAgfQotICAKLSAgZnVuY3Rpb24gcmVtb3ZlRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7Ci0gICAgZml4RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dMaW5rcyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotICAgIAotICBmdW5jdGlvbiBjYW5jZWxEZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0VkaXQodGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW3Jvd0luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICAKLSAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgIHZhciBsYW5nSWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgdmFyIGlucHV0VmFsdWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgdmFyIHJvd0FjdGlvbkxpbmtIcmVmID0gY29sdW1uMy5jaGlsZE5vZGVzW2NvbHVtbjMuY2hpbGROb2Rlcy5sZW5ndGgtMV0uaHJlZjsKLSAgICBpZiAocm93QWN0aW9uTGlua0hyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSAhPSAwKQotICAgICAgcmV0dXJuOwotICAgICAgCi0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID0gZmFsc2U7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdOwotICAgIHZhciB0ZW1wU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVMYW5ndWFnZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICB2YXIgbGFuZ3VhZ2UgPSBzZXRMYW5ndWFnZVNlbGVjdCh0ZW1wU2VsZWN0LGxhbmdJZCk7Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0RGVmYXVsdERpc3BsYXlTdHJpbmcobGFuZ3VhZ2UpKSxjb2x1bW4xQ29udHJvbCk7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGlucHV0VmFsdWUpKSxjb2x1bW4yQ29udHJvbCk7Ci0KLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4zKTsKLSAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyxyb3dJbmRleCk7Ci0gIH0KLQotICBmdW5jdGlvbiByZW1vdmVTZWxlY3RlZERldGFpbHNMYW5ndWFnZUlucHV0Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgcmVtb3ZlU2VsZWN0ZWRSb3dzKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZpeERldGFpbHNMYW5ndWFnZUlucHV0Um93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpeERldGFpbHNMYW5ndWFnZUlucHV0Um93TGlua3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIDwlLy8gRml4IHRoZSBsaW5rcyU+Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IGNvbHVtbnMuaXRlbSgwKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgCi0gICAgICBmb3IgKHZhciBqPTE7ajxjb2x1bW5zLmxlbmd0aDtqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgIGNvbHVtbnMuaXRlbShqKS5jbGFzc05hbWUgPSAicm93Y29sb3IiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAgIH0KLSAgICAgIAotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICAgIHZhciBsaW5rID0gY29sdW1uMy5jaGlsZE5vZGVzW2NvbHVtbjMuY2hpbGROb2Rlcy5sZW5ndGgtMV07Ci0gICAgICB2YXIgcmVtb3ZlTGluazsKLSAgICAgIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpyZW1vdmUiKSA9PSAwKQotICAgICAgICByZW1vdmVMaW5rID0gdHJ1ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVtb3ZlTGluayA9IGZhbHNlOwotICAgICAgICAKLSAgICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjMpOyAgICAgICAgICAgIAotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OnJlbW92ZSIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjMsaSk7Ci0gICAgICBlbHNlIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4zLGkpOwotICAgICAgZWxzZSBpZiAobGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6ZWRpdCIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4zLGkpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdFNlbGVjdGVkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgZWRpdERldGFpbHNMYW5ndWFnZUlucHV0Um93KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfQotICB9Ci0gICAgCi0gIGZ1bmN0aW9uIGNhbmNlbFNlbGVjdGVkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgY2FuY2VsRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzSWRlbnRpZmllclJvdyh0YWJsZUNvbnRhaW5lcklkLGhhc0Vycm9yKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLSAgICAKLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4xLndpZHRoID0gIjEwJSI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI0MCUiOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMud2lkdGggPSAiNDAlIjsKLSAgICBjb2x1bW40LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLQotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiPCU9QWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUJT4iKSk7IDwlLy8gdmlld0lkJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBrZXkgdHlwZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwga2V5IG5hbWUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIGtleSB2YWx1ZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLGhhc0Vycm9yKSk7IDwlLy8gbW9kZSU+Ci0gICAgCi0gICAgdmFyIGlkZW50aWZpZXJUeXBlU2VsZWN0OwotICAgIHZhciBrZXlOYW1lVGV4dElucHV0OwotICAgIGlmIChoYXNFcnJvcikKLSAgICB7Ci0gICAgICBpZGVudGlmaWVyVHlwZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAgaWRlbnRpZmllclR5cGVTZWxlY3Qub25jaGFuZ2UgPSBoYW5kbGVJZGVudGlmaWVyQ2hhbmdlOwotICAgICAgcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdChpZGVudGlmaWVyVHlwZVNlbGVjdCk7Ci0gICAgICBpZGVudGlmaWVyVHlwZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGlkZW50aWZpZXJUeXBlU2VsZWN0KTsgICAgCi0gICAgCi0gICAgICBrZXlOYW1lVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgIGtleU5hbWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIGtleU5hbWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9OQU1FIiklPiI7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGtleU5hbWVUZXh0SW5wdXQpOwotCi0gICAgICB2YXIga2V5VmFsdWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAga2V5VmFsdWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIGtleVZhbHVlVGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfSURFTlRJRklFUl9LRVlfVkFMVUUiKSU+IjsKLSAgICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQpOyAgICAgIAotICAgICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIAotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gICAgaWYgKGhhc0Vycm9yKQotICAgICAga2V5TmFtZVRleHRJbnB1dC52YWx1ZSA9IGlkZW50aWZpZXJUeXBlU2VsZWN0Lm9wdGlvbnNbMF0udGV4dDsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNJZGVudGlmaWVyUm93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciByZW1vdmVMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChyZW1vdmVMaW5rLCJyZW1vdmVEZXRhaWxzSWRlbnRpZmllclJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgcmVtb3ZlTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKHJlbW92ZUxpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzSWRlbnRpZmllclJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGVkaXRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChlZGl0TGluaywiZWRpdERldGFpbHNJZGVudGlmaWVyUm93Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICBlZGl0TGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChlZGl0TGluayk7Ci0gIH0gIAotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNJZGVudGlmaWVyUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChjYW5jZWxMaW5rLCJjYW5jZWxEZXRhaWxzSWRlbnRpZmllclJvd0VkaXQiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsgIAotICB9Ci0KLSAgZnVuY3Rpb24gZWRpdERldGFpbHNJZGVudGlmaWVyUm93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci0gICAgCi0gICAgdmFyIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSAgICAgCi0gICAgdmFyIGtleU5hbWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgdmFyIGtleVZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKQotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHJldHVybjsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPSB0cnVlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICB2YXIgaWRlbnRpZmllclR5cGVTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBpZGVudGlmaWVyVHlwZVNlbGVjdC5vbmNoYW5nZSA9IGhhbmRsZUlkZW50aWZpZXJDaGFuZ2U7Ci0gICAgcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdChpZGVudGlmaWVyVHlwZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoaWRlbnRpZmllclR5cGVTZWxlY3QsY29sdW1uMUNvbnRyb2wpOwotICAgIGlkZW50aWZpZXJUeXBlU2VsZWN0LmNsYXNzTmFtZSA9ICJzZWxlY3RsaXN0IjsKLSAgICBzZXRUTW9kZWxLZXlTZWxlY3QoaWRlbnRpZmllclR5cGVTZWxlY3QsdE1vZGVsS2V5KTsgICAgCi0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBrZXlOYW1lVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChrZXlOYW1lVGV4dElucHV0LGNvbHVtbjJDb250cm9sKTsKLSAgICBrZXlOYW1lVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0lERU5USUZJRVJfS0VZX05BTUUiKSU+IjsKLSAgICBrZXlOYW1lVGV4dElucHV0LnZhbHVlID0ga2V5TmFtZTsKLSAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgdmFyIGtleVZhbHVlVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4zLnJlcGxhY2VDaGlsZChrZXlWYWx1ZVRleHRJbnB1dCxjb2x1bW4zQ29udHJvbCk7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0lERU5USUZJRVJfS0VZX1ZBTFVFIiklPiI7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQudmFsdWUgPSBrZXlWYWx1ZTsKLSAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgIAotICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQscm93SW5kZXgpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGV0YWlsc0lkZW50aWZpZXJSb3codGFibGVDb250YWluZXJJZCxpbmRleCx2aWV3SWQsdE1vZGVsS2V5LGtleU5hbWUsa2V5VmFsdWUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MraW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZSA9IHZpZXdJZDsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPSB0TW9kZWxLZXk7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlID0ga2V5TmFtZTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWUgPSBrZXlWYWx1ZTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHNldFRNb2RlbEtleVNlbGVjdChjb2x1bW4xQ29udHJvbCx0TW9kZWxLZXkpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAgcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICAgIHZhciB0TW9kZWxLZXlWYWx1ZSA9IHNldFRNb2RlbEtleVNlbGVjdCh0ZW1wU2VsZWN0LHRNb2RlbEtleSk7Ci0gICAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0TW9kZWxLZXlWYWx1ZSksY29sdW1uMUNvbnRyb2wpOwotICAgIH0KLSAgICAgICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjJDb250cm9sLnZhbHVlID0ga2V5TmFtZTsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlOYW1lKSxjb2x1bW4yQ29udHJvbCk7Ci0gICAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgY29sdW1uM0NvbnRyb2wudmFsdWUgPSBrZXlWYWx1ZTsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4zLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlWYWx1ZSksY29sdW1uM0NvbnRyb2wpOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVtb3ZlRGV0YWlsc0lkZW50aWZpZXJSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7Ci0gICAgZml4RGV0YWlsc0lkZW50aWZpZXJSb3dMaW5rcyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsRGV0YWlsc0lkZW50aWZpZXJSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci0gICAgCi0gICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICB2YXIgdE1vZGVsS2V5ID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIHZhciBrZXlOYW1lID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgIHZhciBrZXlWYWx1ZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICB2YXIgcm93QWN0aW9uTGlua0hyZWYgPSBjb2x1bW40LmNoaWxkTm9kZXNbY29sdW1uNC5jaGlsZE5vZGVzLmxlbmd0aC0xXS5ocmVmOwotICAgIGlmIChyb3dBY3Rpb25MaW5rSHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmNhbmNlbCIpICE9IDApCi0gICAgICByZXR1cm47Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID0gZmFsc2U7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdOwotICAgIHZhciB0ZW1wU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICB2YXIgdE1vZGVsS2V5VmFsdWUgPSBzZXRUTW9kZWxLZXlTZWxlY3QodGVtcFNlbGVjdCx0TW9kZWxLZXkpOwotICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRNb2RlbEtleVZhbHVlKSxjb2x1bW4xQ29udHJvbCk7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGtleU5hbWUpLGNvbHVtbjJDb250cm9sKTsKLSAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5VmFsdWUpLGNvbHVtbjNDb250cm9sKTsKLQotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHJvd0luZGV4KTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICA8JS8vIEZpeCB0aGUgbGlua3MlPgotICAgIGZpeERldGFpbHNJZGVudGlmaWVyUm93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpeERldGFpbHNJZGVudGlmaWVyUm93TGlua3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW2ldOwotICAgICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSBjb2x1bW5zLml0ZW0oMCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGZvciAodmFyIGo9MTtqPGNvbHVtbnMubGVuZ3RoO2orKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJyb3djb2xvciI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb2x1bW5zLml0ZW0oaikuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgICAgfQotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci0gICAgICB2YXIgbGluayA9IGNvbHVtbjQuY2hpbGROb2Rlc1tjb2x1bW40LmNoaWxkTm9kZXMubGVuZ3RoLTFdOwotICAgICAgdmFyIHJlbW92ZUxpbms7Ci0gICAgICBpZiAobGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6cmVtb3ZlIikgPT0gMCkKLSAgICAgICAgcmVtb3ZlTGluayA9IHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlbW92ZUxpbmsgPSBmYWxzZTsgICAgICAKLSAgICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgICAgCi0gICAgICBpZiAobGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6cmVtb3ZlIikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxpKTsKLSAgICAgIGVsc2UgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmVkaXQiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxpKTsKLSAgICAgIGVsc2UgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmNhbmNlbCIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXRTZWxlY3RlZERldGFpbHNJZGVudGlmaWVyUm93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGVkaXREZXRhaWxzSWRlbnRpZmllclJvdyh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0gIAotICB9Ci0gIAotICBmdW5jdGlvbiBjYW5jZWxTZWxlY3RlZERldGFpbHNJZGVudGlmaWVyUm93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGNhbmNlbERldGFpbHNJZGVudGlmaWVyUm93RWRpdCh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0gIAotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCxoYXNFcnJvcikKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIAotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI1JSI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI1NSUiOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMud2lkdGggPSAiMjUlIjsKLSAgICBjb2x1bW40LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLQotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiPCU9QWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUJT4iKSk7IDwlLy8gdmlld0lkJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBrZXkgdHlwZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwga2V5IG5hbWUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIGtleSB2YWx1ZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLGhhc0Vycm9yKSk7IDwlLy8gbW9kZSU+Ci0gICAgCi0gICAgaWYgKGhhc0Vycm9yKQotICAgIHsKLSAgICAgIHZhciBjYXRlZ29yeVR5cGVTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICAgIHBvcHVsYXRlQ2F0ZWdvcnlUeXBlU2VsZWN0KGNhdGVnb3J5VHlwZVNlbGVjdCk7Ci0gICAgICBjYXRlZ29yeVR5cGVTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChjYXRlZ29yeVR5cGVTZWxlY3QpOwotICAgICAgCi0gICAgICB2YXIga2V5TmFtZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBrZXlOYW1lVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgICBrZXlOYW1lVGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX05BTUUiKSU+IjsKLSAgICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQoa2V5TmFtZVRleHRJbnB1dCk7Ci0gICAgICAKLSAgICAgIHZhciBrZXlWYWx1ZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBrZXlWYWx1ZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAga2V5VmFsdWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9LRVlfVkFMVUUiKSU+IjsKLSAgICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQpOwotICAgICAgYWRkQ2F0ZWdvcnlSb3dCcm93c2VMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICAgIAotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7ICAgICAgCi0gIH0KLQotICBmdW5jdGlvbiBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGNhbmNlbExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGNhbmNlbExpbmssImNhbmNlbERldGFpbHNDYXRlZ29yeVJvd0VkaXQiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsgIAotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0NhdGVnb3J5Um93QnJvd3NlQ2FuY2VsQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICBhZGRDYXRlZ29yeVJvd0Jyb3dzZUxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLSAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNDYXRlZ29yeVJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGVkaXRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChlZGl0TGluaywiZWRpdERldGFpbHNDYXRlZ29yeVJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0NhdGVnb3J5Um93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciByZW1vdmVMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChyZW1vdmVMaW5rLCJyZW1vdmVEZXRhaWxzQ2F0ZWdvcnlSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIHJlbW92ZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChyZW1vdmVMaW5rKTsgIAotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0NhdGVnb3J5Um93QnJvd3NlUmVtb3ZlQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICBhZGRDYXRlZ29yeVJvd0Jyb3dzZUxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLSAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGVkaXREZXRhaWxzQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW3Jvd0luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICB2YXIgY29sdW1uNCA9IGNvbHVtbnMuaXRlbSg0KTsKLSAgICAKLSAgICB2YXIgdE1vZGVsS2V5ID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlCi0gICAgdmFyIGtleU5hbWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgdmFyIGtleVZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKQotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHJldHVybjsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPSB0cnVlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICB2YXIgY2F0ZWdvcnlUeXBlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVDYXRlZ29yeVR5cGVTZWxlY3QoY2F0ZWdvcnlUeXBlU2VsZWN0KTsKLSAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChjYXRlZ29yeVR5cGVTZWxlY3QsY29sdW1uMUNvbnRyb2wpOwotICAgIGNhdGVnb3J5VHlwZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgc2V0VE1vZGVsS2V5U2VsZWN0KGNhdGVnb3J5VHlwZVNlbGVjdCx0TW9kZWxLZXkpOyAgICAKLSAgICAKLSAgICB2YXIgY29sdW1uMkNvbnRyb2wgPSBjb2x1bW4yLmNoaWxkTm9kZXNbMF07Ci0gICAgdmFyIGtleU5hbWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKGtleU5hbWVUZXh0SW5wdXQsY29sdW1uMkNvbnRyb2wpOwotICAgIGtleU5hbWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBrZXlOYW1lVGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX05BTUUiKSU+IjsKLSAgICBrZXlOYW1lVGV4dElucHV0LnZhbHVlID0ga2V5TmFtZTsKLSAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgdmFyIGtleVZhbHVlVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4zLnJlcGxhY2VDaGlsZChrZXlWYWx1ZVRleHRJbnB1dCxjb2x1bW4zQ29udHJvbCk7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9WQUxVRSIpJT4iOwotICAgIGtleVZhbHVlVGV4dElucHV0LnZhbHVlID0ga2V5VmFsdWU7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uNCk7Ci0gICAgCi0gICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93QnJvd3NlQ2FuY2VsQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCxjb2x1bW40LHJvd0luZGV4KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERldGFpbHNDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkLGluZGV4LHZpZXdJZCx0TW9kZWxLZXksa2V5TmFtZSxrZXlWYWx1ZSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cytpbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlID0gdmlld0lkOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSA9IHRNb2RlbEtleTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPSBrZXlOYW1lOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZSA9IGtleVZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKTsKLSAgICAKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgc2V0VE1vZGVsS2V5U2VsZWN0KGNvbHVtbjFDb250cm9sLHRNb2RlbEtleSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhciB0ZW1wU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgICBwb3B1bGF0ZUNhdGVnb3J5VHlwZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICAgIHZhciB0TW9kZWxLZXlWYWx1ZSA9IHNldFRNb2RlbEtleVNlbGVjdCh0ZW1wU2VsZWN0LHRNb2RlbEtleSk7Ci0gICAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0TW9kZWxLZXlWYWx1ZSksY29sdW1uMUNvbnRyb2wpOwotICAgIH0KLSAgICAgICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjJDb250cm9sLnZhbHVlID0ga2V5TmFtZTsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlOYW1lKSxjb2x1bW4yQ29udHJvbCk7Ci0gICAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgY29sdW1uM0NvbnRyb2wudmFsdWUgPSBrZXlWYWx1ZTsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4zLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlWYWx1ZSksY29sdW1uM0NvbnRyb2wpOyAKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZURldGFpbHNDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdGFibGUuZGVsZXRlUm93KHJvd0luZGV4KTsKLSAgICBmaXhEZXRhaWxzQ2F0ZWdvcnlSb3dMaW5rcyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsRGV0YWlsc0NhdGVnb3J5Um93RWRpdCh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgIAotICAgIHZhciB2aWV3SWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgdmFyIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICB2YXIga2V5TmFtZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICB2YXIga2V5VmFsdWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWU7Ci0gICAgdmFyIHJvd0FjdGlvbkxpbmtIcmVmID0gY29sdW1uNC5jaGlsZE5vZGVzW2NvbHVtbjQuY2hpbGROb2Rlcy5sZW5ndGgtMV0uaHJlZjsKLSAgICBpZiAocm93QWN0aW9uTGlua0hyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSAhPSAwKQotICAgICAgcmV0dXJuOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlQ2F0ZWdvcnlUeXBlU2VsZWN0KHRlbXBTZWxlY3QpOwotICAgIHZhciB0TW9kZWxLZXlWYWx1ZSA9IHNldFRNb2RlbEtleVNlbGVjdCh0ZW1wU2VsZWN0LHRNb2RlbEtleSk7Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodE1vZGVsS2V5VmFsdWUpLGNvbHVtbjFDb250cm9sKTsKLSAgICAKLSAgICB2YXIgY29sdW1uMkNvbnRyb2wgPSBjb2x1bW4yLmNoaWxkTm9kZXNbMF07Ci0gICAgY29sdW1uMi5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5TmFtZSksY29sdW1uMkNvbnRyb2wpOwotICAgIAotICAgIHZhciBjb2x1bW4zQ29udHJvbCA9IGNvbHVtbjMuY2hpbGROb2Rlc1swXTsKLSAgICBjb2x1bW4zLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlWYWx1ZSksY29sdW1uM0NvbnRyb2wpOwotCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uNCk7ICAgIAotICAgIGFkZERldGFpbHNDYXRlZ29yeVJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxyb3dJbmRleCk7Ci0gICAgaWYgKHJvd0luZGV4ID09IHRhcmdldENhdGVnb3J5Um93KQotICAgICAgY2xvc2VDYXRlZ29yeUJyb3dzZXIoKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0ZWREZXRhaWxzQ2F0ZWdvcnlSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJZCk7Ci0gICAgPCUvLyBGaXggdGhlIGxpbmtzJT4KLSAgICBmaXhEZXRhaWxzQ2F0ZWdvcnlSb3dMaW5rcyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZml4RGV0YWlsc0NhdGVnb3J5Um93TGlua3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW2ldOwotICAgICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSBjb2x1bW5zLml0ZW0oMCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGZvciAodmFyIGo9MTtqPGNvbHVtbnMubGVuZ3RoO2orKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJyb3djb2xvciI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb2x1bW5zLml0ZW0oaikuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgICAgfQotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci08JSAgICAgIAotICAgICAgLy8gQnJvd3NlLCBSZW1vdmUKLSAgICAgIC8vIEJyb3dzZSwgQ2FuY2VsCi0gICAgICAvLyBFZGl0Ci0gICAgICAvLyBCcm93c2UKLSU+ICAgICAgCi0gICAgICB2YXIgbGFzdExpbmsgPSBjb2x1bW40LmNoaWxkTm9kZXNbY29sdW1uNC5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgICAgaWYgKGxhc3RMaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpyZW1vdmUiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dCcm93c2VSZW1vdmVBY3Rpb25MaW5rcyh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgICBlbHNlIGlmIChsYXN0TGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6Y2FuY2VsIikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93QnJvd3NlQ2FuY2VsQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCxjb2x1bW40LGkpOwotICAgICAgZWxzZSBpZiAobGFzdExpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmVkaXQiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgICBlbHNlIGlmIChsYXN0TGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6b3BlbiIpID09IDApCi0gICAgICAgIGFkZENhdGVnb3J5Um93QnJvd3NlTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXRTZWxlY3RlZERldGFpbHNDYXRlZ29yeVJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBlZGl0RGV0YWlsc0NhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbFNlbGVjdGVkRGV0YWlsc0NhdGVnb3J5Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGNhbmNlbERldGFpbHNDYXRlZ29yeVJvd0VkaXQodGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9ICAKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCx0TW9kZWxLZXksY2F0ZWdvcnlOYW1lLGlzQ2hlY2tlZCxmaWxlTmFtZSxoYXNFcnJvcikKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIC8vdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAvL3ZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAvL3ZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAvL3ZhciBjb2x1bW40ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAKLSAgICAvL2NvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiMTUlIjsKLSAgICAvL2NvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIC8vY29sdW1uMi53aWR0aCA9ICIxMCUiOwotICAgIC8vY29sdW1uMy5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgLy9jb2x1bW4zLndpZHRoID0gIjcwJSI7Ci0gICAgLy9jb2x1bW40LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAKLSAgICAvL3ZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgLy9jb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLSAgICAKLSAgICAvL2NvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixmaWxlTmFtZSkpOyAgPCUvLyBvcmlnaW5hbCBmaWxlIG5hbWUlPgotICAgIC8vY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLGhhc0Vycm9yKSk7ICA8JS8vIG1vZGUlPgotICAgIC8vY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLHRNb2RlbEtleSkpOyA8JS8vIHRNb2RlbEtleSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjYXRlZ29yeU5hbWUpKTsKLSAgICAKLSAgICAvL2NvbHVtbjIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaXNDaGVja2VkKSk7Ci0gICAgCi0gICAgLy9pZiAoaGFzRXJyb3IpCi0gICAgLy97Ci0gICAgLy8gIGNvbHVtbjMuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZJT4iLHRNb2RlbEtleSkpOwotICAgIC8vICB2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAvLyAgZmlsZUlucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsIjwlPVVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfRklMRU5BTUUlPiIpOwotICAgIC8vICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwiZmlsZSIpOwotICAgIC8vICBmaWxlSW5wdXQudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfRklMRSIpKSU+IjsKLSAgICAvLyAgZmlsZUlucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZWZpbGVicm93c2UiOwotICAgIC8vICBjb2x1bW4zLmFwcGVuZENoaWxkKGZpbGVJbnB1dCk7Ci0gICAgLy8gIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93Q2FuY2VsTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsdGFibGUucm93cy5sZW5ndGgpOwotICAgIC8vfQotICAgIC8vZWxzZQotICAgIC8vewotICAgIC8vICBjb2x1bW4zLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGZpbGVOYW1lKSk7Ci0gICAgLy8gIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93RWRpdExpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHRhYmxlLnJvd3MubGVuZ3RoKTsKLSAgICAvL30KLSAgICAKLSAgICAvL25ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgLy9uZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgLy9uZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgLy9uZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgCi0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93RWRpdExpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgZWRpdExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGVkaXRMaW5rLCJlZGl0RGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGVkaXRMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGVkaXRMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7ICAgIAotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgIAotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPT0gInRydWUiKTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICByZXR1cm47Ci0gICAgdmFyIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPSB0cnVlOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjMpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZJT4iLHRNb2RlbEtleSkpOwotICAgIHZhciBmaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCI8JT1VRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX0ZJTEVOQU1FJT4iKTsKLSAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwiZmlsZSIpOwotICAgIGZpbGVJbnB1dC50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9GSUxFIikpJT4iOwotICAgIGZpbGVJbnB1dC5jbGFzc05hbWUgPSAidGFibGVmaWxlYnJvd3NlIjsKLSAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGZpbGVJbnB1dCk7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uNCk7Ci0gICAgCi0gICAgYWRkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dDYW5jZWxMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxyb3dJbmRleCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93Q2FuY2VsTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChjYW5jZWxMaW5rLCJjYW5jZWxEZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0VkaXQiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci0gICAgCi0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIGlmICghZWRpdGFibGUpCi0gICAgICByZXR1cm47Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlID0gZmFsc2U7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMyk7Ci0gICAgY29sdW1uMy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWUpKTsKLSAgICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW40KTsKLSAgICAKLSAgICBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0VkaXRMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxyb3dJbmRleCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXRTZWxlY3RlZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGVkaXREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsU2VsZWN0ZWREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBjYW5jZWxEZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0VkaXQodGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9Ci0gIH0gIAotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyh0YWJsZUNvbnRhaW5lcklkLGhhc0Vycm9yKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI4NSUiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIAotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgCi0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCI8JT1BY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQlPiIpKTsgPCUvLyB2aWV3SWQlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIERpc2NvdmVyeSBVUkwlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixoYXNFcnJvcikpOyA8JS8vIG1vZGUlPgotICAgIGlmIChoYXNFcnJvcikKLSAgICB7Ci0gICAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAgdGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfRElTQ09WRVJZX1VSTCIpJT4iOwotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZCh0ZXh0SW5wdXQpOwotICAgICAgYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4yLHRhYmxlLnJvd3MubGVuZ3RoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpKTsKLSAgICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjIsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICAKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgcmVtb3ZlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQocmVtb3ZlTGluaywicmVtb3ZlRGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgcmVtb3ZlTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKHJlbW92ZUxpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgZWRpdExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGVkaXRMaW5rLCJlZGl0RGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChjYW5jZWxMaW5rLCJjYW5jZWxEZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdCIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgY2FuY2VsTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGNhbmNlbExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0RGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIAotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIAotICAgIHZhciBkaXNjb3ZlcnlVUkwgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9PSAidHJ1ZSIpCi0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgcmV0dXJuOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9IHRydWU7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdOwotICAgIHZhciB0ZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKHRleHRJbnB1dCxjb2x1bW4xQ29udHJvbCk7Ci0gICAgdGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgdGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfRElTQ09WRVJZX1VSTCIpJT4iOwotICAgIHRleHRJbnB1dC52YWx1ZSA9IGRpc2NvdmVyeVVSTDsKLSAgICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4yKTsKLSAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjIscm93SW5kZXgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREZXRhaWxzRGlzY292ZXJ5VVJMUm93KHRhYmxlQ29udGFpbmVySWQsaW5kZXgsdmlld0lkLGRpc2NvdmVyeVVSTCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cytpbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlID0gdmlld0lkOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSA9IGRpc2NvdmVyeVVSTDsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjFDb250cm9sLnZhbHVlID0gZGlzY292ZXJ5VVJMOwotICAgIGVsc2UKLSAgICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGRpc2NvdmVyeVVSTCkpLGNvbHVtbjFDb250cm9sKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcmVtb3ZlRGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdGFibGUuZGVsZXRlUm93KHJvd0luZGV4KTsKLSAgICBmaXhEZXRhaWxzRGlzY292ZXJ5VVJMUm93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNEaXNjb3ZlcnlVUkxSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgCi0gICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICB2YXIgZGlzY292ZXJ5VVJMID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIHZhciByb3dBY3Rpb25MaW5rSHJlZiA9IGNvbHVtbjIuY2hpbGROb2Rlc1tjb2x1bW4yLmNoaWxkTm9kZXMubGVuZ3RoLTFdLmhyZWY7Ci0gICAgaWYgKHJvd0FjdGlvbkxpbmtIcmVmLmluZGV4T2YoImphdmFzY3JpcHQ6Y2FuY2VsIikgIT0gMCkKLSAgICAgIHJldHVybjsKLSAgICAgIAotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXTsKLSAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhkaXNjb3ZlcnlVUkwpKSxjb2x1bW4xQ29udHJvbCk7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMik7Ci0gICAgYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMixyb3dJbmRleCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGVkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmaXhEZXRhaWxzRGlzY292ZXJ5VVJMUm93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpeERldGFpbHNEaXNjb3ZlcnlVUkxSb3dMaW5rcyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgPCUvLyBGaXggdGhlIGxpbmtzJT4KLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gY29sdW1ucy5pdGVtKDApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICAKLSAgICAgIGZvciAodmFyIGo9MTtqPGNvbHVtbnMubGVuZ3RoO2orKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJyb3djb2xvciI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb2x1bW5zLml0ZW0oaikuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgICAgfQotICAgICAgCi0gICAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgICAgdmFyIGxpbmsgPSBjb2x1bW4yLmNoaWxkTm9kZXNbY29sdW1uMi5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjIpOwotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OnJlbW92ZSIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMixpKTsKLSAgICAgIGVsc2UgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmNhbmNlbCIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMixpKTsKLSAgICAgIGVsc2UgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmVkaXQiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4yLGkpOyAKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXRTZWxlY3RlZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgZWRpdERldGFpbHNEaXNjb3ZlcnlVUkxSb3codGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbFNlbGVjdGVkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBjYW5jZWxEZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdCh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNTaW5nbGVJdGVtUm93KHRhYmxlQ29udGFpbmVySWQsaGFzRXJyb3IpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIAotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjAud2lkdGggPSAiOTAlIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBpdGVtIHZhbHVlJT4KLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsaGFzRXJyb3IpKTsgPCUvLyBtb2RlJT4KLSAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIAotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0Jyb3dzZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCx3c2RsVHlwZSxjb2x1bW4pCi0gIHsKLSAgICB2YXIgYnJvd3NlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBicm93c2VMaW5rLmhyZWYgPSAiamF2YXNjcmlwdDpvcGVuV1NETEJyb3dzZXIoJ2NvbnRlbnRib3JkZXInLCIrd3NkbFR5cGUrIikiOwotICAgIGJyb3dzZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoYnJvd3NlTGluayk7ICAgIAotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dCcm93c2VDYW5jZWxBY3Rpb25MaW5rcyh0YWJsZUNvbnRhaW5lcklkLHdzZGxUeXBlLGNvbHVtbikKLSAgewotICAgIGFkZERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0Jyb3dzZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCx3c2RsVHlwZSxjb2x1bW4pOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLSAgICB2YXIgY2FuY2VsTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBjYW5jZWxMaW5rLmhyZWYgPSAiamF2YXNjcmlwdDpjYW5jZWxEZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dFZGl0KCciK3RhYmxlQ29udGFpbmVySWQrIicpIjsKLSAgICBjYW5jZWxMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoY2FuY2VsTGluayk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uKQotICB7Ci0gICAgdmFyIGVkaXRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIGVkaXRMaW5rLmhyZWYgPSAiamF2YXNjcmlwdDplZGl0RGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93KCciK3RhYmxlQ29udGFpbmVySWQrIicpIjsKLSAgICBlZGl0TGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChlZGl0TGluayk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0VkaXQodGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gY29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIAotICAgIGNvbHVtbjAuY2hpbGROb2Rlc1syXS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4wQ29udHJvbCA9IGNvbHVtbjAuY2hpbGROb2Rlc1tjb2x1bW4wLmNoaWxkTm9kZXMubGVuZ3RoLTFdOwotICAgIGNvbHVtbjAucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldFdTRExVUkxEaXNwbGF5KGNvbHVtbjAuY2hpbGROb2Rlc1swXS52YWx1ZSkpLGNvbHVtbjBDb250cm9sKTsKLSAgICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4xKTsKLSAgICAKLSAgICBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjEpOwotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0RGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93KHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMCA9IGNvbHVtbnMuaXRlbSgwKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAKLSAgICB2YXIgd3NkbFR5cGUgPSBjb2x1bW4wLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgY29sdW1uMC5jaGlsZE5vZGVzWzJdLnZhbHVlID0gdHJ1ZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMENvbnRyb2wgPSBjb2x1bW4wLmNoaWxkTm9kZXNbY29sdW1uMC5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICB2YXIgd3NkbFVSTEVkaXRDb250cm9sID0gY3JlYXRlV1NETFVSTEVkaXRDb250cm9sKCk7Ci0gICAgY29sdW1uMC5yZXBsYWNlQ2hpbGQod3NkbFVSTEVkaXRDb250cm9sLGNvbHVtbjBDb250cm9sKTsKLSAgICB3c2RsVVJMRWRpdENvbnRyb2wuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICB3c2RsVVJMRWRpdENvbnRyb2wudmFsdWUgPSBnZXRXU0RMVVJMRGlzcGxheShjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWUpOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjEpOwotICAgIAotICAgIGFkZERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0Jyb3dzZUNhbmNlbEFjdGlvbkxpbmtzKHRhYmxlQ29udGFpbmVySWQsd3NkbFR5cGUsY29sdW1uMSk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNyZWF0ZVdTRExVUkxFZGl0Q29udHJvbCgpCi0gIHsKLSAgICB2YXIgY29udHJvbDsKLSAgICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gICAgICBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiPGlucHV0IG5hbWU9JzwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+Jz4iKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgibmFtZSIsIjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+Iik7Ci0gICAgfQotICAgIHJldHVybiBjb250cm9sOwotICB9Ci0gIAotICBmdW5jdGlvbiBnZXRXU0RMVVJMRGlzcGxheSh3c2RsVVJMKQotICB7Ci0gICAgaWYgKHdzZGxVUkwubGVuZ3RoIDwgMSkKLSAgICAgIHdzZGxVUkxEaXNwbGF5ID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XU0RMX1VSTF9JU19VTlJFQUNIQUJMRSIpKSU+IjsKLSAgICBlbHNlCi0gICAgICB3c2RsVVJMRGlzcGxheSA9IHdzZGxVUkw7Ci0gICAgcmV0dXJuIHdzZGxVUkxEaXNwbGF5OwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3codGFibGVDb250YWluZXJJZCx3c2RsVHlwZSx3c2RsVVJMKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0KLSAgICBjb2x1bW4wLmluc2VydEJlZm9yZShjcmVhdGVIaWRkZW5FbGVtZW50KCIiLHdzZGxUeXBlKSxjb2x1bW4wLmNoaWxkTm9kZXNbMV0pOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4wLmNoaWxkTm9kZXNbMl0udmFsdWUgPT0gInRydWUiKTsKLSAgICB2YXIgd3NkbFVSTERpc3BsYXkgPSBnZXRXU0RMVVJMRGlzcGxheSh3c2RsVVJMKTsKLSAgICBjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWUgPSB3c2RsVVJMOwotICAgIAotICAgIHZhciBjb2x1bW4wQ29udHJvbDsgICAgCi0gICAgaWYgKGVkaXRhYmxlKQotICAgIHsKLSAgICAgIGNvbHVtbjBDb250cm9sID0gY3JlYXRlV1NETFVSTEVkaXRDb250cm9sKCk7Ci0gICAgICBjb2x1bW4wQ29udHJvbC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAgYWRkRGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93QnJvd3NlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLHdzZGxUeXBlLGNvbHVtbjEpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMENvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3c2RsVVJMRGlzcGxheSk7Ci0gICAgICBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjEpOwotICAgIH0KLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKGNvbHVtbjBDb250cm9sKTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBjb2x1bW4wQ29udHJvbC52YWx1ZSA9IHdzZGxVUkxEaXNwbGF5OwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uKQotICB7Ci0gICAgdmFyIGNhbmNlbExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgY2FuY2VsTGluay5ocmVmID0gImphdmFzY3JpcHQ6Y2FuY2VsRGV0YWlsc05hbWVTaW5nbGVJdGVtUm93RWRpdCgnIit0YWJsZUNvbnRhaW5lcklkKyInKSI7Ci0gICAgY2FuY2VsTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGNhbmNlbExpbmspOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc05hbWVTaW5nbGVJdGVtUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4pICAKLSAgewotICAgIHZhciBlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBlZGl0TGluay5ocmVmID0gImphdmFzY3JpcHQ6ZWRpdERldGFpbHNOYW1lU2luZ2xlSXRlbVJvdygnIit0YWJsZUNvbnRhaW5lcklkKyInKSI7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0RGV0YWlsc05hbWVTaW5nbGVJdGVtUm93KHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMCA9IGNvbHVtbnMuaXRlbSgwKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAKLSAgICBjb2x1bW4wLmNoaWxkTm9kZXNbMV0udmFsdWUgPSB0cnVlOwotICAgIAotICAgIHZhciBjb2x1bW4wQ29udHJvbCA9IGNvbHVtbjAuY2hpbGROb2Rlc1tjb2x1bW4wLmNoaWxkTm9kZXMubGVuZ3RoLTFdOwotICAgIHZhciB0ZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjAucmVwbGFjZUNoaWxkKHRleHRJbnB1dCxjb2x1bW4wQ29udHJvbCk7Ci0gICAgdGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgdGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfSU5QVVRfVEVYVF9WQUxVRSIpJT4iOwotICAgIHRleHRJbnB1dC52YWx1ZSA9IGNvbHVtbjAuY2hpbGROb2Rlc1swXS52YWx1ZTsKLQotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjEpOwotICAgIAotICAgIGFkZERldGFpbHNOYW1lU2luZ2xlSXRlbVJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4xKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsRGV0YWlsc05hbWVTaW5nbGVJdGVtUm93RWRpdCh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgCi0gICAgY29sdW1uMC5jaGlsZE5vZGVzWzFdLnZhbHVlID0gZmFsc2U7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjBDb250cm9sID0gY29sdW1uMC5jaGlsZE5vZGVzW2NvbHVtbjAuY2hpbGROb2Rlcy5sZW5ndGgtMV07Ci0gICAgY29sdW1uMC5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29sdW1uMC5jaGlsZE5vZGVzWzBdLnZhbHVlKSxjb2x1bW4wQ29udHJvbCk7Ci0gICAgCi0gICAgZm9yICh2YXIgaT0wO2k8Y29sdW1uMS5jaGlsZE5vZGVzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgY29sdW1uMS5yZW1vdmVDaGlsZChjb2x1bW4xLmNoaWxkTm9kZXNbaV0pOwotICAgICAgaS0tOwotICAgIH0KLSAgICBhZGREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjEpOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3codGFibGVDb250YWluZXJJZCxuYW1lKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgCi0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjAuY2hpbGROb2Rlc1sxXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIGNvbHVtbjAuY2hpbGROb2Rlc1swXS52YWx1ZSA9IG5hbWU7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjBDb250cm9sOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICB7Ci0gICAgICBjb2x1bW4wQ29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBjb2x1bW4wQ29udHJvbC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAgY29sdW1uMENvbnRyb2wudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JTlBVVF9URVhUX1ZBTFVFIiklPiI7Ci0gICAgICBjb2x1bW4wQ29udHJvbC52YWx1ZSA9IG5hbWU7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TX05PTkUiKSU+IikpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMENvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuYW1lKTsKLSAgICAgIGFkZERldGFpbHNOYW1lU2luZ2xlSXRlbVJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMSk7Ci0gICAgfQotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQoY29sdW1uMENvbnRyb2wpOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTFRhYmxlKHRhYmxlQ29udGFpbmVySWQsbW9kaWZpZWROYW1lLHZpZXdJZE5hbWUsZGlzY292ZXJ5VVJMTmFtZSxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgdmFyIGRpc2NvdmVyeVVSTDsKLSAgICAgIGlmIChlZGl0YWJsZSkKLSAgICAgICAgZGlzY292ZXJ5VVJMID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgICAgZWxzZQotICAgICAgICBkaXNjb3ZlcnlVUkwgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQodmlld0lkTmFtZSx2aWV3SWQpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChkaXNjb3ZlcnlVUkxOYW1lLGRpc2NvdmVyeVVSTCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KG1vZGlmaWVkTmFtZSxlZGl0YWJsZSkpOyAgICAgICAgCi0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRGV0YWlsc0xhbmd1YWdlSW5wdXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkLG1vZGlmaWVkTmFtZSx2aWV3SWROYW1lLGxhbmdJZE5hbWUsaW5wdXROYW1lLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAgIHZhciB2aWV3SWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgICB2YXIgbGFuZ0lkLGlucHV0VGV4dDsKLSAgICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHsKLSAgICAgICAgbGFuZ0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdLnZhbHVlOwotICAgICAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICAgICAgaW5wdXRUZXh0ID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBsYW5nSWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgICAgIGlucHV0VGV4dCA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICAgIH0KLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCh2aWV3SWROYW1lLHZpZXdJZCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KGxhbmdJZE5hbWUsbGFuZ0lkKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoaW5wdXROYW1lLGlucHV0VGV4dCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KG1vZGlmaWVkTmFtZSxlZGl0YWJsZSkpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0RldGFpbHNJZGVudGlmaWVyVGFibGUodGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgdmFyIHRNb2RlbEtleSxpZEtleU5hbWUsaWRLZXlWYWx1ZTsKLSAgICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHsKLSAgICAgICAgdE1vZGVsS2V5ID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdLnZhbHVlOwotICAgICAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICAgICAgaWRLZXlOYW1lID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICAgICAgaWRLZXlWYWx1ZSA9IGNvbHVtbjMuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdE1vZGVsS2V5ID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgICAgICBpZEtleU5hbWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgICAgIGlkS2V5VmFsdWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWU7Ci0gICAgICB9Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuSURFTlRJRklFUl9WSUVXSUQlPiIsdmlld0lkKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9UWVBFJT4iLHRNb2RlbEtleSkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUlPiIsaWRLZXlOYW1lKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUlPiIsaWRLZXlWYWx1ZSkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLklERU5USUZJRVJfTU9ESUZJRUQlPiIsZWRpdGFibGUpKTsgICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NEZXRhaWxzQ2F0ZWdvcnlUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAgIHZhciB2aWV3SWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgICB2YXIgdE1vZGVsS2V5LGNhdEtleU5hbWUsY2F0S2V5VmFsdWU7Ci0gICAgICBpZiAoZWRpdGFibGUpCi0gICAgICB7Ci0gICAgICAgIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XS52YWx1ZTsKLSAgICAgICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgICAgIGNhdEtleU5hbWUgPSBjb2x1bW4yLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgICAgICBjYXRLZXlWYWx1ZSA9IGNvbHVtbjMuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdE1vZGVsS2V5ID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgICAgICBjYXRLZXlOYW1lID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgICAgICBjYXRLZXlWYWx1ZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICAgIH0KLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5DQVRFR09SWV9WSUVXSUQlPiIsdmlld0lkKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSU+Iix0TW9kZWxLZXkpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSU+IixjYXRLZXlOYW1lKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFJT4iLGNhdEtleVZhbHVlKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfTU9ESUZJRUQlPiIsZWRpdGFibGUpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NEZXRhaWxzU2luZ2xlSXRlbVRhYmxlKHRhYmxlQ29udGFpbmVySWQsbW9kaWZpZWROYW1lLGlucHV0TmFtZSxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjAuY2hpbGROb2Rlc1tjb2x1bW4wLmNoaWxkTm9kZXMubGVuZ3RoLTJdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgdmFyIGlucHV0VmFsdWU7Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgaW5wdXRWYWx1ZSA9IGNvbHVtbjAuY2hpbGROb2Rlc1tjb2x1bW4wLmNoaWxkTm9kZXMubGVuZ3RoLTFdLnZhbHVlOwotICAgIGVsc2UKLSAgICAgIGlucHV0VmFsdWUgPSBjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KGlucHV0TmFtZSxpbnB1dFZhbHVlKSk7Ci0gICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KG1vZGlmaWVkTmFtZSxlZGl0YWJsZSkpOyAgICAKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3Jlc3VsdHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWI2NjcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3Jlc3VsdHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGdldE51bWJlck9mU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIG51bWJlclNlbGVjdGVkID0gMDsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgbnVtYmVyU2VsZWN0ZWQrKzsKLSAgICB9Ci0gICAgcmV0dXJuIG51bWJlclNlbGVjdGVkOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzUmVzdWx0Rm9ybSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSh0YWJsZUNvbnRhaW5lcklkLCI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iLGZvcm0sdHJ1ZSk7Ci0gICAgICBmb3JtLnN1Ym1pdCgpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb25zKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIGZvcm0uYWN0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIC8vIEVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIGlzIHNlbGVjdGVkLgotICAgIHZhciBudW1iZXJTZWxlY3RlZCA9IGdldE51bWJlck9mU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAobnVtYmVyU2VsZWN0ZWQgPiAwKQotICAgICAgcHJvY2Vzc1Jlc3VsdEZvcm0odGFibGVDb250YWluZXJJZCxmb3JtKTsKLSAgICBlbHNlCi0gICAgICBhbGVydCgiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICB9Ci0gIAotICBmdW5jdGlvbiByZWZyZXNoU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICBmb3JtLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgICAvLyBFbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBzZWxlY3RlZC4KLSAgICB2YXIgbnVtYmVyU2VsZWN0ZWQgPSBnZXROdW1iZXJPZlNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCk7Ci0gICAgaWYgKG51bWJlclNlbGVjdGVkID4gMCkKLSAgICAgIHByb2Nlc3NSZXN1bHRGb3JtKHRhYmxlQ29udGFpbmVySWQsZm9ybSk7Ci0gICAgZWxzZQotICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkU2VsZWN0aW9uc1RvRmF2b3JpdGVzKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIGZvcm0uYWN0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0FkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIC8vIEVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIGlzIHNlbGVjdGVkLgotICAgIHZhciBudW1iZXJTZWxlY3RlZCA9IGdldE51bWJlck9mU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAobnVtYmVyU2VsZWN0ZWQgPiAwKQotICAgICAgcHJvY2Vzc1Jlc3VsdEZvcm0odGFibGVDb250YWluZXJJZCxmb3JtKTsKLSAgICBlbHNlCi0gICAgICBhbGVydCgiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICB9Ci0gIAotPCUKLSAgIGlmIChzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLnNpemUoKSA+IDApCi0gICB7Ci0gICAgIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgc3ViUXVlcnlUcmFuc2ZlclRhcmdldCA9IChTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KXN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIuZWxlbWVudEF0KDApOwotICAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0LmdldFN1YlF1ZXJ5S2V5KCk7Ci0gICAgIGludCBsYXN0U2VwYXJhdG9yUG9zID0gc3ViUXVlcnlLZXkubGFzdEluZGV4T2YoJzonKTsKLSAgICAgU3RyaW5nIHRhcmdldFF1ZXJ5S2V5OwotICAgICBpZiAobGFzdFNlcGFyYXRvclBvcyA9PSAtMSkKLSAgICAgICB0YXJnZXRRdWVyeUtleSA9ICIiOwotICAgICBlbHNlCi0gICAgICAgdGFyZ2V0UXVlcnlLZXkgPSBzdWJRdWVyeUtleS5zdWJzdHJpbmcoMCxsYXN0U2VwYXJhdG9yUG9zKTsKLSAgICAgU3RyaW5nIHRhcmdldFByb3BlcnR5ID0gc3ViUXVlcnlLZXkuc3Vic3RyaW5nKGxhc3RTZXBhcmF0b3JQb3MrMSxzdWJRdWVyeUtleS5sZW5ndGgoKSk7Ci0lPiAgICAgCi0gIGZ1bmN0aW9uIHRyYW5zZmVyU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICBmb3JtLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9UcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbkpTUC5qc3AiKSklPiI7Ci0gICAgLy8gRW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGl0ZW0gaXMgc2VsZWN0ZWQuCi0gICAgdmFyIG51bWJlclNlbGVjdGVkID0gZ2V0TnVtYmVyT2ZTZWxlY3Rpb25zKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGlmIChudW1iZXJTZWxlY3RlZCA+IDApCi0gICAgewotPCUKLSAgICAgaWYgKHRhcmdldFByb3BlcnR5LmVxdWFscyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpIHx8IHRhcmdldFByb3BlcnR5LmVxdWFscyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTKSB8fCB0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFKSkKLSAgICAgewotJT4KLSAgICAgIGlmIChudW1iZXJTZWxlY3RlZCAhPSAxKQotICAgICAgewotICAgICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfU0lOR0xFX0lURU0iKSklPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLTwlCi0gICAgICAgRm9ybVRvb2wgdGFyZ2V0Rm9ybVRvb2wgPSBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0LmdldFRhcmdldEZvcm1Ub29sKCk7Ci0gICAgICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHRhcmdldEZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKXRhcmdldEZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXModGFyZ2V0UXVlcnlLZXkpOwotICAgICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3MgPSAoVmVjdG9yKXRhcmdldEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpOwotICAgICAgIGlmIChzZXJ2aWNlQnVzaW5lc3MgIT0gbnVsbCAmJiBzZXJ2aWNlQnVzaW5lc3Muc2l6ZSgpID4gMCkKLSAgICAgICB7Ci0lPgotICAgICAgaWYgKCFjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9JVEVNX1JFUExBQ0VNRU5UIikpJT4iKSkKLSAgICAgICAgcmV0dXJuOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSU+Ci0gICAgICBwcm9jZXNzUmVzdWx0Rm9ybSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBhbGVydCgiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICB9Ci08JQotICAgfQotJT4gICAgICAgCi08L3NjcmlwdD4gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpZnJhbWVzZXRzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyNGFkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpZnJhbWVzZXRzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpCi0gIHsKLSAgICByZXR1cm4gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuQUNUSU9OU19DT05UQUlORVIlPiJdLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmcmFtZXNldCIpLml0ZW0oMCk7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRnJhbWVzZXRTaXplcyhmcmFtZXNldFNpemVzRm9ybSkKLSAgewotICAgIHRvZ2dsZURvdWJsZUNsaWNrQ29sdW1uVGl0bGUoKTsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+LnZhbHVlID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuY29sczsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPi52YWx1ZSA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5yb3dzOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLnN1Ym1pdCgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDg2NGNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIG5hdmlnYXRvckNvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIlPiJdOwotICB2YXIgbmF2aWdhdG9yVG9vbGJhciA9IG5hdmlnYXRvckNvbnRhaW5lci5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9UT09MQkFSJT4iXTsKLSAgdmFyIG5hdmlnYXRvckNvbnRlbnQgPSBuYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEVOVCU+Il07Ci0gIHZhciBhY3Rpb25zQ29udGFpbmVyID0gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuQUNUSU9OU19DT05UQUlORVIlPiJdOwotICB2YXIgcHJvcGVydGllc0NvbnRhaW5lciA9IGFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBwcm9wZXJ0aWVzVG9vbGJhciA9IHByb3BlcnRpZXNDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX1RPT0xCQVIlPiJdOwotICB2YXIgcHJvcGVydGllc0NvbnRlbnQgPSBwcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05URU5UJT4iXTsKLSAgdmFyIHN0YXR1c0NvbnRhaW5lciA9IGFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHN0YXR1c1Rvb2xiYXIgPSBzdGF0dXNDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5TVEFUVVNfVE9PTEJBUiU+Il07Ci0gIHZhciBzdGF0dXNDb250ZW50ID0gc3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRFTlQlPiJdOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmIyNzg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODk0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy93c2RsYnJvd3Nlci5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSBzZXNzaW9uLmdldElkKCk7Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCkpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbW1vbkNhdGVnb3J5TW9kZWxzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9ImFwcGxpY2F0aW9uIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gUmVxdWlyZXMgYnJvd3NlcmRldGVjdC5qcywgdGFibGVzLmpzcCAoZXhwbG9yZXIpCi0gIHZhciByb3dDaGVja2JveE5hbWUgPSAicm93Q2hlY2tib3hOYW1lIjsKLSAgdmFyIGNhdGVnb3J5V2luZG93OwotICB2YXIgY2F0ZWdvcnlXaW5kb3dDbG9zZWQgPSB0cnVlOwotICB2YXIgdGFyZ2V0Q2F0ZWdvcnlSb3cgPSAtMTsKLSAgdmFyIHRhcmdldENhdGVnb3J5S2V5TmFtZUVsZW1lbnQ7Ci0gIHZhciB0YXJnZXRDYXRlZ29yeUtleVZhbHVlRWxlbWVudDsKLSAgdmFyIGxhbmd1YWdlQXJyYXkgPSBuZXcgQXJyYXkoKTsKLSAgdmFyIGNhdGVnb3J5QXJyYXkgPSBuZXcgQXJyYXkoKTsKLSAgdmFyIHdpbGRjYXJkQ2F0ZWdvcnlCcm93c2VyVVJMUmUgPSAvKCUpLzsKLQotICBmdW5jdGlvbiBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKQotICB7Ci0gICAgY2xvc2VDYXRlZ29yeUJyb3dzZXIoKTsKLSAgICBjbG9zZVdTRExCcm93c2VyKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBMYW5ndWFnZShkaXNwbGF5TmFtZSxsYW5nSWQpCi0gIHsKLSAgICB0aGlzLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7Ci0gICAgdGhpcy5sYW5nSWQgPSBsYW5nSWQ7Ci0gIH0KLQotICBmdW5jdGlvbiBjb21wYXJlTGFuZ3VhZ2VEaXNwbGF5TmFtZXMoYSxiKQotICB7Ci0gICAgdmFyIHJlc3VsdCA9IGEuZGlzcGxheU5hbWUubG9jYWxlQ29tcGFyZShiLmRpc3BsYXlOYW1lKTsKLSAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgIHJldHVybiAtMTsKLSAgICBlbHNlIGlmIChyZXN1bHQgPiAwKQotICAgICAgcmV0dXJuIDE7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIDA7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRUTW9kZWxLZXlTZWxlY3QoaXRlbVNlbGVjdCx0TW9kZWxLZXkpCi0gIHsKLSAgICBmb3IgKHZhciBpPTA7aTxpdGVtU2VsZWN0Lm9wdGlvbnMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaXRlbVNlbGVjdC5vcHRpb25zW2ldLnZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gdE1vZGVsS2V5LnRvTG93ZXJDYXNlKCkpCi0gICAgICB7Ci0gICAgICAgIGl0ZW1TZWxlY3Qub3B0aW9uc1tpXS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBpdGVtU2VsZWN0Lm9wdGlvbnNbaV0udGV4dDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCxsYW5ndWFnZVZhbHVlKQotICB7Ci0gICAgdmFyIHN0YXJ0OwotPCUKLSAgIC8vIENvbXBhcmUgd2l0aCB0aGUgZW1wdHkgc3RyaW5nIG9ubHkgaWYgdGhlIGxhbmd1YWdlVmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZy4KLSU+Ci0gICAgaWYgKGxhbmd1YWdlVmFsdWUubGVuZ3RoIDwgMSkKLSAgICAgIHN0YXJ0ID0gMDsKLSAgICBlbHNlCi0gICAgICBzdGFydCA9IDE7Ci0gICAgZm9yICh2YXIgaT1zdGFydDtpPGxhbmd1YWdlU2VsZWN0Lm9wdGlvbnMubGVuZ3RoO2krKykKLSAgICB7Ci08JQotICAgLy8gVXNlIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGNoZWNrIGlmIGxhbmd1YWdlVmFsdWUgYmVnaW5zIHdpdGggYSBrZXkgd2hvc2UgaXRlbSBpcyBpbiB0aGUgcGljayBsaXN0LiBUaGlzIGVuYWJsZXMgIkVuZ2xpc2giIHRvIGJlIHNlbGVjdGVkCi0gICAvLyBmb3IgZW4teHh4IChkaWFsZWN0cykuCi0lPgotICAgICAgdmFyIHJlZ0V4cCA9IG5ldyBSZWdFeHAoIl4iK2xhbmd1YWdlU2VsZWN0Lm9wdGlvbnNbaV0udmFsdWUsImkiKTsKLSAgICAgIGlmIChyZWdFeHAudGVzdChsYW5ndWFnZVZhbHVlKSkKLSAgICAgIHsKLSAgICAgICAgbGFuZ3VhZ2VTZWxlY3Qub3B0aW9uc1tpXS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBsYW5ndWFnZVNlbGVjdC5vcHRpb25zW2ldLnRleHQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcG9wdWxhdGVMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCkKLSAgewotICAgIGlmIChsYW5ndWFnZUFycmF5Lmxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCIiLCIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0VOIikpJT4iLCJlbiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQUEiKSklPiIsImFhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9BQiIpKSU+IiwiYWIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0FGIikpJT4iLCJhZiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQU0iKSklPiIsImFtIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9BUiIpKSU+IiwiYXIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0FTIikpJT4iLCJhcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQVkiKSklPiIsImF5Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9BWiIpKSU+IiwiYXoiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JBIikpJT4iLCJiYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQkUiKSklPiIsImJlIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9CRyIpKSU+IiwiYmciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JIIikpJT4iLCJiaCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQkkiKSklPiIsImJpIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9CTiIpKSU+IiwiYm4iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JPIikpJT4iLCJibyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQlIiKSklPiIsImJyIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9DQSIpKSU+IiwiY2EiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0NPIikpJT4iLCJjbyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQ1oiKSklPiIsImN6Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9DWSIpKSU+IiwiY3kiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0RBIikpJT4iLCJkYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfREUiKSklPiIsImRlIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9EWiIpKSU+IiwiZHoiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0VMIikpJT4iLCJlbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRU8iKSklPiIsImVvIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9FUyIpKSU+IiwiZXMiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0VUIikpJT4iLCJldCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRVUiKSklPiIsImV1Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9GQSIpKSU+IiwiZmEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZJIikpJT4iLCJmaSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRkoiKSklPiIsImZqIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9GTyIpKSU+IiwiZm8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZSIikpJT4iLCJmciIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRlkiKSklPiIsImZ5Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9HQSIpKSU+IiwiZ2EiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0dEIikpJT4iLCJnZCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfR0wiKSklPiIsImdsIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9HTiIpKSU+IiwiZ24iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0dVIikpJT4iLCJndSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSEEiKSklPiIsImhhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9ISSIpKSU+IiwiaGkiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0hSIikpJT4iLCJociIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSFUiKSklPiIsImh1Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9IWSIpKSU+IiwiaHkiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0lBIikpJT4iLCJpYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSUUiKSklPiIsImllIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9JSyIpKSU+IiwiaWsiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0lOIikpJT4iLCJpbiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSVMiKSklPiIsImlzIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9JVCIpKSU+IiwiaXQiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0lXIikpJT4iLCJpdyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSkEiKSklPiIsImphIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9KSSIpKSU+IiwiamkiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0pXIikpJT4iLCJqdyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS0EiKSklPiIsImthIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LSyIpKSU+Iiwia2siKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tMIikpJT4iLCJrbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS00iKSklPiIsImttIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LTiIpKSU+Iiwia24iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tPIikpJT4iLCJrbyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS1MiKSklPiIsImtzIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LVSIpKSU+Iiwia3UiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tZIikpJT4iLCJreSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTEEiKSklPiIsImxhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9MTiIpKSU+IiwibG4iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0xPIikpJT4iLCJsbyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTFQiKSklPiIsImx0Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9MViIpKSU+IiwibHYiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01HIikpJT4iLCJtZyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTUkiKSklPiIsIm1pIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NSyIpKSU+IiwibWsiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01MIikpJT4iLCJtbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTU4iKSklPiIsIm1uIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NTyIpKSU+IiwibW8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01SIikpJT4iLCJtciIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTVMiKSklPiIsIm1zIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NVCIpKSU+IiwibXQiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01ZIikpJT4iLCJteSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTkEiKSklPiIsIm5hIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9ORSIpKSU+IiwibmUiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX05MIikpJT4iLCJubCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTk8iKSklPiIsIm5vIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9PQyIpKSU+Iiwib2MiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX09NIikpJT4iLCJvbSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfT1IiKSklPiIsIm9yIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9QQSIpKSU+IiwicGEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1BMIikpJT4iLCJwbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUFMiKSklPiIsInBzIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9QVCIpKSU+IiwicHQiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1FVIikpJT4iLCJxdSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUk0iKSklPiIsInJtIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9STiIpKSU+Iiwicm4iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1JPIikpJT4iLCJybyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUlUiKSklPiIsInJ1Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9SVyIpKSU+IiwicnciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NBIikpJT4iLCJzYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU0QiKSklPiIsInNkIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TRyIpKSU+Iiwic2ciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NIIikpJT4iLCJzaCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU0kiKSklPiIsInNpIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TSyIpKSU+Iiwic2siKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NMIikpJT4iLCJzbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU00iKSklPiIsInNtIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TTiIpKSU+Iiwic24iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NPIikpJT4iLCJzbyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU1EiKSklPiIsInNxIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TUiIpKSU+Iiwic3IiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NTIikpJT4iLCJzcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU1QiKSklPiIsInN0IikKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NVIikpJT4iLCJzdSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU1YiKSklPiIsInN2Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TVyIpKSU+Iiwic3ciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RBIikpJT4iLCJ0YSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVEUiKSklPiIsInRlIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9URyIpKSU+IiwidGciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RIIikpJT4iLCJ0aCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVEkiKSklPiIsInRpIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9USyIpKSU+IiwidGsiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RMIikpJT4iLCJ0bCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVE4iKSklPiIsInRuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UTyIpKSU+IiwidG8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RSIikpJT4iLCJ0ciIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVFMiKSklPiIsInRzIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UVCIpKSU+IiwidHQiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RXIikpJT4iLCJ0dyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVUsiKSklPiIsInVrIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9VUiIpKSU+IiwidXIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1VaIikpJT4iLCJ1eiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVkkiKSklPiIsInZpIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9WTyIpKSU+Iiwidm8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1dPIikpJT4iLCJ3byIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfWEgiKSklPiIsInhoIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9ZTyIpKSU+IiwieW8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1pIIikpJT4iLCJ6aCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfWlUiKSklPiIsInp1Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5LnNvcnQoY29tcGFyZUxhbmd1YWdlRGlzcGxheU5hbWVzKTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciBpPTA7aTxsYW5ndWFnZUFycmF5Lmxlbmd0aDtpKyspCi0gICAgICBsYW5ndWFnZVNlbGVjdC5vcHRpb25zW2ldID0gbmV3IE9wdGlvbihsYW5ndWFnZUFycmF5W2ldLmRpc3BsYXlOYW1lLGxhbmd1YWdlQXJyYXlbaV0ubGFuZ0lkKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncyh0YWJsZUNvbnRhaW5lcklkLG5hbWVJbmRleCxsYW5ndWFnZVZhbHVlLG5hbWVUZXh0VmFsdWUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MrbmFtZUluZGV4XTsKLSAgICB2YXIgbGFuZ3VhZ2VTZWxlY3QgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpLml0ZW0oMCk7Ci0gICAgdmFyIG5hbWVUZXh0ID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMSk7Ci0gICAgc2V0TGFuZ3VhZ2VTZWxlY3QobGFuZ3VhZ2VTZWxlY3QsbGFuZ3VhZ2VWYWx1ZSk7Ci0gICAgbmFtZVRleHQudmFsdWUgPSBuYW1lVGV4dFZhbHVlOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0ZWRDYXRlZ29yeVJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIC8vIENoZWNrIGlmIGFueSByb3dzIGFib3ZlIGFuZCBpbmNsdWRpbmcgdGhlIHRhcmdldENhdGVnb3J5Um93IGFyZSBzZWxlY3RlZC4KLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgbmV3VGFyZ2V0Q2F0ZWdvcnlSb3cgPSB0YXJnZXRDYXRlZ29yeVJvdzsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPD10YXJnZXRDYXRlZ29yeVJvdztpKyspCi0gICAgewotICAgICAgdmFyIHRhYmxlUm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlUm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGkgPT0gdGFyZ2V0Q2F0ZWdvcnlSb3cpCi0gICAgICAgICAgbmV3VGFyZ2V0Q2F0ZWdvcnlSb3cgPSAtMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld1RhcmdldENhdGVnb3J5Um93LS07Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChuZXdUYXJnZXRDYXRlZ29yeVJvdyA9PSAtMSkKLSAgICAgIGNsb3NlQ2F0ZWdvcnlCcm93c2VyKCk7Ci0gICAgdGFyZ2V0Q2F0ZWdvcnlSb3cgPSBuZXdUYXJnZXRDYXRlZ29yeVJvdzsKLSAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJZCk7Ci0gICAgLy8gRml4IHRoZSBicm93c2UuLi4gbGlua3MuCi0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHRhYmxlUm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciBicm93c2VMaW5rID0gdGFibGVSb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKS5pdGVtKDApOwotICAgICAgc2V0SlNMaW5rUm93VGFyZ2V0KGJyb3dzZUxpbmssIm9wZW5DYXRlZ29yeUJyb3dzZXIiLHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gYWRkTGFuZ3VhZ2VJbnB1dFJvdyh0YWJsZUNvbnRhaW5lcklkLHRleHRDb250cm9sVGl0bGUpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGxhbmd1YWdlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChsYW5ndWFnZVNlbGVjdCk7Ci0KLSAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKHRleHRJbnB1dCk7Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBsYW5ndWFnZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgdGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgdGV4dElucHV0LnRpdGxlID0gdGV4dENvbnRyb2xUaXRsZTsKLSAgICBjb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4yLndpZHRoID0gIjkwJSI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRJZGVudGlmaWVyUm93U2V0dGluZ3ModGFibGVDb250YWluZXJJZCxpZGVudGlmaWVySW5kZXgsdE1vZGVsS2V5LGtleU5hbWUsa2V5VmFsdWUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MraWRlbnRpZmllckluZGV4XTsKLSAgICB2YXIgaWRlbnRpZmllclR5cGVTZWxlY3QgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpLml0ZW0oMCk7Ci0gICAgdmFyIHJvd0VsZW1lbnRDb2xsZWN0aW9uID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIHZhciBrZXlOYW1lVGV4dCA9IHJvd0VsZW1lbnRDb2xsZWN0aW9uLml0ZW0oMSk7Ci0gICAgdmFyIGtleVZhbHVlVGV4dCA9IHJvd0VsZW1lbnRDb2xsZWN0aW9uLml0ZW0oMik7Ci0gICAgc2V0VE1vZGVsS2V5U2VsZWN0KGlkZW50aWZpZXJUeXBlU2VsZWN0LHRNb2RlbEtleSk7Ci0gICAga2V5TmFtZVRleHQudmFsdWUgPSBrZXlOYW1lOwotICAgIGtleVZhbHVlVGV4dC52YWx1ZSA9IGtleVZhbHVlOwotICB9Ci0KLSAgZnVuY3Rpb24gcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdChpZGVudGlmaWVyVHlwZVNlbGVjdCkKLSAgewotICAgIHZhciBjb3VudGVyID0gMDsKLSAgICBpZGVudGlmaWVyVHlwZVNlbGVjdC5vcHRpb25zW2NvdW50ZXIrK10gPSBuZXcgT3B0aW9uKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0lERU5USUZJRVJfRFVOUyIpKSU+IiwiPCU9VE1vZGVsLkRfVV9OX1NfVE1PREVMX0tFWSU+Iik7Ci0gICAgaWRlbnRpZmllclR5cGVTZWxlY3Qub3B0aW9uc1tjb3VudGVyKytdID0gbmV3IE9wdGlvbigiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9JREVOVElGSUVSX1RIT01BU19SRUdJU1RSWSIpKSU+IiwiPCU9VE1vZGVsLlRIT01BU19SRUdJU1RFUl9UTU9ERUxfS0VZJT4iKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGhhbmRsZUlkZW50aWZpZXJDaGFuZ2UoZSkKLSAgewotICAgIHZhciBpZGVudGlmaWVyU2VsZWN0OwotICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgICAgIGlkZW50aWZpZXJTZWxlY3QgPSBldmVudC5zcmNFbGVtZW50OwotICAgIGVsc2UKLSAgICAgIGlkZW50aWZpZXJTZWxlY3QgPSBlLnRhcmdldDsKLSAgICB2YXIgY2VsbCA9IGlkZW50aWZpZXJTZWxlY3QucGFyZW50Tm9kZTsKLSAgICB2YXIgcm93ID0gY2VsbC5wYXJlbnROb2RlOwotICAgIHZhciBpbnB1dEVsZW1lbnRzID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIGZvciAodmFyIGk9MDtpPGlucHV0RWxlbWVudHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaW5wdXRFbGVtZW50cy5pdGVtKGkpLnR5cGUgPT0gInRleHQiKQotICAgICAgewotICAgICAgICBpbnB1dEVsZW1lbnRzLml0ZW0oaSkudmFsdWUgPSBpZGVudGlmaWVyU2VsZWN0Lm9wdGlvbnNbaWRlbnRpZmllclNlbGVjdC5zZWxlY3RlZEluZGV4XS50ZXh0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRJZGVudGlmaWVyUm93KHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBrZXlUeXBlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAga2V5VHlwZVNlbGVjdC5vbmNoYW5nZSA9IGhhbmRsZUlkZW50aWZpZXJDaGFuZ2U7Ci0gICAgcG9wdWxhdGVJZGVudGlmaWVyVHlwZVNlbGVjdChrZXlUeXBlU2VsZWN0KTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGtleVR5cGVTZWxlY3QpOwotCi0gICAgdmFyIGtleU5hbWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQoa2V5TmFtZVRleHRJbnB1dCk7Ci0KLSAgICB2YXIga2V5VmFsdWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAga2V5VHlwZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCIKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4xLndpZHRoID0gIjUlIjsKLSAgICBrZXlOYW1lVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9OQU1FIikpJT4iOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNDAlIjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGtleVZhbHVlVGV4dElucHV0LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0lERU5USUZJRVJfS0VZX1ZBTFVFIikpJT4iOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMud2lkdGggPSAiNTUlIjsKLQotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgICBrZXlOYW1lVGV4dElucHV0LnZhbHVlID0ga2V5VHlwZVNlbGVjdC5vcHRpb25zWzBdLnRleHQ7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIENhdGVnb3J5KGRpc3BsYXlOYW1lLHRNb2RlbEtleSkKLSAgewotICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTsKLSAgICB0aGlzLnRNb2RlbEtleSA9IHRNb2RlbEtleTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvbXBhcmVDYXRlZ29yeURpc3BsYXlOYW1lcyhhLGIpCi0gIHsKLSAgICB2YXIgcmVzdWx0ID0gYS5kaXNwbGF5TmFtZS5sb2NhbGVDb21wYXJlKGIuZGlzcGxheU5hbWUpOwotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgcmV0dXJuIC0xOwotICAgIGVsc2UgaWYgKHJlc3VsdCA+IDApCi0gICAgICByZXR1cm4gMTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gMDsKLSAgfSAgCi0KLSAgZnVuY3Rpb24gcG9wdWxhdGVDYXRlZ29yeVR5cGVTZWxlY3QoY2F0ZWdvcnlUeXBlU2VsZWN0KQotICB7Ci0gICAgaWYgKGNhdGVnb3J5QXJyYXkubGVuZ3RoID09IDApCi0gICAgewotPCUKLSAgIEVudW1lcmF0aW9uIGNvbW1vbkNhdGVnb3JpZXMgPSBjb21tb25DYXRlZ29yeU1vZGVscy5lbGVtZW50cygpOwotICAgd2hpbGUgKGNvbW1vbkNhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICB7Ci0gICAgIENhdGVnb3J5TW9kZWwgY29tbW9uQ2F0ZWdvcnlNb2RlbCA9IChDYXRlZ29yeU1vZGVsKWNvbW1vbkNhdGVnb3JpZXMubmV4dEVsZW1lbnQoKTsKLSU+Ci0gICAgICBjYXRlZ29yeUFycmF5W2NhdGVnb3J5QXJyYXkubGVuZ3RoXSA9IG5ldyBDYXRlZ29yeSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbW1vbkNhdGVnb3J5TW9kZWwuZ2V0RGlzcGxheU5hbWUoKSklPiIsIjwlPWNvbW1vbkNhdGVnb3J5TW9kZWwuZ2V0VE1vZGVsS2V5KCklPiIpOwotPCUKLSAgIH0KLSAgIEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCk7Ci0gICBpZiAodXNlckRlZmluZWRDYXRlZ29yaWVzICE9IG51bGwpCi0gICB7Ci0gICAgIHdoaWxlICh1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgIHsKLSAgICAgICBDYXRlZ29yeU1vZGVsIHVzZXJEZWZpbmVkQ2F0ZWdvcnkgPSAoQ2F0ZWdvcnlNb2RlbCl1c2VyRGVmaW5lZENhdGVnb3JpZXMubmV4dEVsZW1lbnQoKTsKLSU+Ci0gICAgICBjYXRlZ29yeUFycmF5W2NhdGVnb3J5QXJyYXkubGVuZ3RoXSA9IG5ldyBDYXRlZ29yeSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0RGlzcGxheU5hbWUoKSklPiIsIjwlPXVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0VE1vZGVsS2V5KCklPiIpOwotPCUKLSAgICAgfQotICAgfQotJT4KLSAgICAgIGNhdGVnb3J5QXJyYXkuc29ydChjb21wYXJlQ2F0ZWdvcnlEaXNwbGF5TmFtZXMpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHZhciBpPTA7aTxjYXRlZ29yeUFycmF5Lmxlbmd0aDtpKyspCi0gICAgICBjYXRlZ29yeVR5cGVTZWxlY3Qub3B0aW9uc1tpXSA9IG5ldyBPcHRpb24oY2F0ZWdvcnlBcnJheVtpXS5kaXNwbGF5TmFtZSxjYXRlZ29yeUFycmF5W2ldLnRNb2RlbEtleSk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRKU0xpbmtSb3dUYXJnZXQobGluayxqc0Z1bmN0aW9uLHRhYmxlQ29udGFpbmVySWQscm93KQotICB7Ci0gICAgbGluay5ocmVmID0gImphdmFzY3JpcHQ6Iitqc0Z1bmN0aW9uKyIoJyIrdGFibGVDb250YWluZXJJZCsiJywiK3JvdysiKSI7Ci0gIH0KLQotICBmdW5jdGlvbiBvcGVuQ2F0ZWdvcnlCcm93c2VyKHRhYmxlQ29udGFpbmVySWQscm93KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNhdGVnb3J5U2VsZWN0ID0gdGFibGUucm93c1tyb3ddLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgIHZhciBzZWxlY3RlZENhdGVnb3J5T3B0aW9uID0gY2F0ZWdvcnlTZWxlY3Qub3B0aW9uc1tjYXRlZ29yeVNlbGVjdC5vcHRpb25zLnNlbGVjdGVkSW5kZXhdOwotICAgIHZhciBjYXRlZ29yeVR5cGUgPSB0YWJsZS5yb3dzW3Jvd10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpLml0ZW0oMCkub3B0aW9ucy5zZWxlY3RlZEluZGV4OwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tyb3ddLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHRhcmdldENhdGVnb3J5Um93ID0gcm93OwotICAgIHRhcmdldENhdGVnb3J5S2V5TmFtZUVsZW1lbnQgPSBjb2x1bW5zLml0ZW0oMikuY2hpbGROb2Rlc1swXTsKLSAgICB0YXJnZXRDYXRlZ29yeUtleVZhbHVlRWxlbWVudCA9IGNvbHVtbnMuaXRlbSgzKS5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmdldFdpbGRDYXJkQWN0aW9uTGluayhzZXNzaW9uSWQpKSklPiI7Ci0gICAgY2F0ZWdvcnlXaW5kb3cgPSB3aW5kb3cub3BlbihsaW5rLnJlcGxhY2Uod2lsZGNhcmRDYXRlZ29yeUJyb3dzZXJVUkxSZSxzZWxlY3RlZENhdGVnb3J5T3B0aW9uLnZhbHVlKSwiY2F0ZWdvcnlXaW5kb3ciLCJoZWlnaHQ9MzAwLHdpZHRoPTMwMCxzdGF0dXM9eWVzLHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJsZT15ZXMiKTsKLSAgICBpZiAoY2F0ZWdvcnlXaW5kb3cuZm9jdXMpCi0gICAgICBjYXRlZ29yeVdpbmRvdy5mb2N1cygpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xvc2VDYXRlZ29yeUJyb3dzZXIoKQotICB7Ci0gICAgaWYgKCFjYXRlZ29yeVdpbmRvd0Nsb3NlZCkKLSAgICAgIGNhdGVnb3J5V2luZG93LmNsb3NlKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKHRhYmxlQ29udGFpbmVySWQsY2F0ZWdvcnlJbmRleCx0TW9kZWxLZXksa2V5TmFtZSxrZXlWYWx1ZSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cytjYXRlZ29yeUluZGV4XTsKLSAgICB2YXIgY2F0ZWdvcnlUeXBlU2VsZWN0ID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgIHZhciByb3dFbGVtZW50Q29sbGVjdGlvbiA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICB2YXIga2V5TmFtZVRleHQgPSByb3dFbGVtZW50Q29sbGVjdGlvbi5pdGVtKDEpOwotICAgIHZhciBrZXlWYWx1ZVRleHQgPSByb3dFbGVtZW50Q29sbGVjdGlvbi5pdGVtKDIpOwotICAgIHNldFRNb2RlbEtleVNlbGVjdChjYXRlZ29yeVR5cGVTZWxlY3QsdE1vZGVsS2V5KTsKLSAgICBrZXlOYW1lVGV4dC52YWx1ZSA9IGtleU5hbWU7Ci0gICAga2V5VmFsdWVUZXh0LnZhbHVlID0ga2V5VmFsdWU7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRDYXRlZ29yeVJvd0Jyb3dzZUxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgYnJvd3NlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoYnJvd3NlTGluaywib3BlbkNhdGVnb3J5QnJvd3NlciIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgYnJvd3NlTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChicm93c2VMaW5rKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZENhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW40ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICB2YXIgY2F0ZWdvcnlUeXBlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVDYXRlZ29yeVR5cGVTZWxlY3QoY2F0ZWdvcnlUeXBlU2VsZWN0KTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNhdGVnb3J5VHlwZVNlbGVjdCk7Ci0KLSAgICB2YXIga2V5TmFtZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMi5hcHBlbmRDaGlsZChrZXlOYW1lVGV4dElucHV0KTsKLQotICAgIHZhciBrZXlWYWx1ZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMy5hcHBlbmRDaGlsZChrZXlWYWx1ZVRleHRJbnB1dCk7Ci0KLSAgICBhZGRDYXRlZ29yeVJvd0Jyb3dzZUxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHRhYmxlLnJvd3MubGVuZ3RoKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNhdGVnb3J5VHlwZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI1JSI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGtleU5hbWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX05BTUUiKSklPiI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI1NSUiOwotICAgIGtleVZhbHVlVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX1ZBTFVFIikpJT4iOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMud2lkdGggPSAiMjUlIjsKLSAgICBjb2x1bW40LmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLQotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREaXNjb3ZlcnlVUkxSb3dTZXR0aW5ncyh0YWJsZUNvbnRhaW5lcklkLGRpc2NvdmVyeVVSTEluZGV4LGRpc2NvdmVyeVVSTCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cytkaXNjb3ZlcnlVUkxJbmRleF07Ci0gICAgdmFyIHJvd0VsZW1lbnRDb2xsZWN0aW9uID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIHZhciBkaXNjb3ZlcnlVUkxUZXh0SW5wdXQgPSByb3dFbGVtZW50Q29sbGVjdGlvbi5pdGVtKDEpOwotICAgIGRpc2NvdmVyeVVSTFRleHRJbnB1dC52YWx1ZSA9IGRpc2NvdmVyeVVSTDsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERpc2NvdmVyeVVSTFJvdyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGRpc2NvdmVyeVVSTFRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChkaXNjb3ZlcnlVUkxUZXh0SW5wdXQpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgZGlzY292ZXJ5VVJMVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgZGlzY292ZXJ5VVJMVGV4dElucHV0LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RJU0NPVkVSWV9VUkwiKSklPiI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI5NSUiOwotCi0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZFJlc3VsdFJvdyh0YWJsZUNvbnRhaW5lcklkLG5vZGVJZCx1cmwsbmFtZSxkZXNjcmlwdGlvbikKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLG5vZGVJZCkpOwotCi0gICAgdmFyIG5hbWVEZXRhaWxzTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBuYW1lRGV0YWlsc0xpbmsuaHJlZiA9IHVybDsKLSAgICBuYW1lRGV0YWlsc0xpbmsudGFyZ2V0ID0gIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI7Ci0gICAgbmFtZURldGFpbHNMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5hbWUpKTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKG5hbWVEZXRhaWxzTGluayk7Ci0KLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGRlc2NyaXB0aW9uKSkpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI0OCUiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNDglIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldEZpbmRRdWFsaWZpZXJUYWJsZShjb250YWluZXJJZCkKLSAgewotICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb250YWluZXJJZCk7Ci0gICAgcmV0dXJuIGNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUiKS5pdGVtKDEpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RmluZFF1YWxpZmllcihmaW5kUXVhbGlmaWVyLG5hbWVUYWJsZUNvbnRhaW5lcklkLGNhdGVnb3J5VGFibGVDb250YWluZXJJZCxmaW5kUXVhbGlmaWVyc1RhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdHdpc3RPcGVuTmFtZXMgPSBmYWxzZTsKLSAgICB2YXIgdHdpc3RPcGVuQ2F0ZWdvcmllcyA9IGZhbHNlOwotICAgIHZhciB0d2lzdE9wZW5GaW5kUXVhbGlmaWVycyA9IGZhbHNlOwotCi0gICAgaWYgKGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuZXhhY3ROYW1lTWF0Y2glPiIpCi0gICAgewotICAgICAgdmFyIGZxVGFibGUgPSBnZXRGaW5kUXVhbGlmaWVyVGFibGUobmFtZVRhYmxlQ29udGFpbmVySWQpOwotICAgICAgdmFyIGV4YWN0TmFtZU1hdGNoQ2hlY2tib3ggPSBmcVRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBleGFjdE5hbWVNYXRjaENoZWNrYm94LmNoZWNrZWQgPSB0cnVlOwotICAgICAgdHdpc3RPcGVuTmFtZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLmNhc2VTZW5zaXRpdmVNYXRjaCU+IikKLSAgICB7Ci0gICAgICB2YXIgZnFUYWJsZSA9IGdldEZpbmRRdWFsaWZpZXJUYWJsZShuYW1lVGFibGVDb250YWluZXJJZCk7Ci0gICAgICB2YXIgY2FzZVNlbnNpdGl2ZU1hdGNoQ2hlY2tib3ggPSBmcVRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMSk7Ci0gICAgICBjYXNlU2Vuc2l0aXZlTWF0Y2hDaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKLSAgICAgIHR3aXN0T3Blbk5hbWVzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5zZXJ2aWNlU3Vic2V0JT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuY29tYmluZUNhdGVnb3J5QmFncyU+IikKLSAgICB7Ci0gICAgICB2YXIgZnFUYWJsZSA9IGdldEZpbmRRdWFsaWZpZXJUYWJsZShjYXRlZ29yeVRhYmxlQ29udGFpbmVySWQpOwotICAgICAgdmFyIGNhdGVnb3J5U2VsZWN0ID0gZnFUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikuaXRlbSgwKTsKLSAgICAgIHNldFNlbGVjdChjYXRlZ29yeVNlbGVjdCxmaW5kUXVhbGlmaWVyKTsKLSAgICAgIHR3aXN0T3BlbkNhdGVnb3JpZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLmFuZEFsbEtleXMlPiIgfHwgZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5vckFsbEtleXMlPiIgfHwgZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5vckxpa2VLZXlzJT4iKQotICAgIHsKLSAgICAgIHZhciBmcVRhYmxlID0gZ2V0VGFibGUoZmluZFF1YWxpZmllcnNUYWJsZUNvbnRhaW5lcklkKTsKLSAgICAgIHZhciBrZXlTZWxlY3QgPSBmcVRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgICAgc2V0U2VsZWN0KGtleVNlbGVjdCxmaW5kUXVhbGlmaWVyKTsKLSAgICAgIGlmIChmaW5kUXVhbGlmaWVyICE9ICI8JT1GaW5kUXVhbGlmaWVyLmFuZEFsbEtleXMlPiIpCi0gICAgICAgIHR3aXN0T3BlbkZpbmRRdWFsaWZpZXJzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5zb3J0QnlOYW1lQXNjJT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5TmFtZURlc2MlPiIgfHwgZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5zb3J0QnlEYXRlQXNjJT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5RGF0ZURlc2MlPiIpCi0gICAgewotICAgICAgdmFyIGZxVGFibGUgPSBnZXRUYWJsZShmaW5kUXVhbGlmaWVyc1RhYmxlQ29udGFpbmVySWQpOwotICAgICAgdmFyIHNvcnRDb2xsZWN0aW9uID0gZnFUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICAgIGZvciAodmFyIGk9MDtpPHNvcnRDb2xsZWN0aW9uLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChzb3J0Q29sbGVjdGlvbi5pdGVtKGkpLnZhbHVlID09IGZpbmRRdWFsaWZpZXIpCi0gICAgICAgICAgc29ydENvbGxlY3Rpb24uaXRlbShpKS5jaGVja2VkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChmaW5kUXVhbGlmaWVyICE9ICI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeU5hbWVBc2MlPiIgJiYgZmluZFF1YWxpZmllciAhPSAiPCU9RmluZFF1YWxpZmllci5zb3J0QnlEYXRlQXNjJT4iKQotICAgICAgICB0d2lzdE9wZW5GaW5kUXVhbGlmaWVycyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR3aXN0T3Blbk5hbWVzKQotICAgICAgdHdpc3RPcGVuKG5hbWVUYWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAodHdpc3RPcGVuQ2F0ZWdvcmllcykKLSAgICAgIHR3aXN0T3BlbihjYXRlZ29yeVRhYmxlQ29udGFpbmVySWQpOwotICAgIGlmICh0d2lzdE9wZW5GaW5kUXVhbGlmaWVycykKLSAgICAgIHR3aXN0T3BlbihmaW5kUXVhbGlmaWVyc1RhYmxlQ29udGFpbmVySWQpOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGxhbmdWYXIsdGV4dFZhcixmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGxhbmd1YWdlU2VsZWN0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKTsKLSAgICB2YXIgdGV4dElucHV0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIGZvciAodmFyIGk9MDtpPGxhbmd1YWdlU2VsZWN0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBoaWRkZW5MYW5ndWFnZVNlbGVjdCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQobGFuZ1ZhcixsYW5ndWFnZVNlbGVjdHNbaV0udmFsdWUpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5MYW5ndWFnZVNlbGVjdCk7Ci0gICAgfQotCi0gICAgZm9yICh2YXIgaT0wO2k8dGV4dElucHV0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmICh0ZXh0SW5wdXRzW2ldLnR5cGUgPT0gInRleHQiKQotICAgICAgewotICAgICAgICB2YXIgaGlkZGVuVGV4dElucHV0ID0gY3JlYXRlSGlkZGVuRWxlbWVudCh0ZXh0VmFyLHRleHRJbnB1dHNbaV0udmFsdWUpOwotICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGhpZGRlblRleHRJbnB1dCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc05hbWVGaW5kUXVhbGlmaWVycyh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRGaW5kUXVhbGlmaWVyVGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIG5hbWVGaW5kUXVhbGlmaWVyQ2hlY2tib3hlcyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIGZvciAodmFyIGk9MDtpPG5hbWVGaW5kUXVhbGlmaWVyQ2hlY2tib3hlcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBpdGVtID0gbmFtZUZpbmRRdWFsaWZpZXJDaGVja2JveGVzLml0ZW0oaSk7Ci0gICAgICBpZiAoaXRlbS5jaGVja2VkKQotICAgICAgewotICAgICAgICB2YXIgaGlkZGVuRmluZFF1YWxpZmllciA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUiU+IixpdGVtLnZhbHVlKTsKLSAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5GaW5kUXVhbGlmaWVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzSWRlbnRpZmllclRhYmxlKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBpZGVudGlmaWVyVHlwZVNlbGVjdHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7Ci0gICAgdmFyIHRleHRJbnB1dHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxpZGVudGlmaWVyVHlwZVNlbGVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaGlkZGVuSWRlbnRpZmllclR5cGVTZWxlY3QgPSBjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSU+IixpZGVudGlmaWVyVHlwZVNlbGVjdHNbaV0udmFsdWUpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5JZGVudGlmaWVyVHlwZVNlbGVjdCk7Ci0gICAgfQotCi0gICAgdmFyIGlzS2V5TmFtZSA9IHRydWU7Ci0gICAgZm9yICh2YXIgaT0wO2k8dGV4dElucHV0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmICh0ZXh0SW5wdXRzW2ldLnR5cGUgPT0gInRleHQiKQotICAgICAgewotICAgICAgICB2YXIgbmFtZTsKLSAgICAgICAgaWYgKGlzS2V5TmFtZSkKLSAgICAgICAgICBuYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSU+IjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5hbWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSU+IjsKLSAgICAgICAgdmFyIGhpZGRlblRleHRJbnB1dCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQobmFtZSx0ZXh0SW5wdXRzW2ldLnZhbHVlKTsKLSAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5UZXh0SW5wdXQpOwotICAgICAgICBpc0tleU5hbWUgPSAhaXNLZXlOYW1lOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NDYXRlZ29yeVRhYmxlKHRhYmxlQ29udGFpbmVySWQsZm9ybSxpc0ZpbmRCdXNpbmVzcykKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjYXRlZ29yeVR5cGVTZWxlY3RzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwotICAgIHZhciB0ZXh0SW5wdXRzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgZm9yICh2YXIgaT0wO2k8Y2F0ZWdvcnlUeXBlU2VsZWN0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBoaWRkZW5DYXRlZ29yeVR5cGVTZWxlY3QgPSBjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUlPiIsY2F0ZWdvcnlUeXBlU2VsZWN0c1tpXS52YWx1ZSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGhpZGRlbkNhdGVnb3J5VHlwZVNlbGVjdCk7Ci0gICAgfQotCi0gICAgdmFyIGlzS2V5TmFtZSA9IHRydWU7Ci0gICAgZm9yICh2YXIgaT0wO2k8dGV4dElucHV0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmICh0ZXh0SW5wdXRzW2ldLnR5cGUgPT0gInRleHQiKQotICAgICAgewotICAgICAgICB2YXIgbmFtZTsKLSAgICAgICAgaWYgKGlzS2V5TmFtZSkKLSAgICAgICAgICBuYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUlPiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFJT4iOwotICAgICAgICB2YXIgaGlkZGVuVGV4dElucHV0ID0gY3JlYXRlSGlkZGVuRWxlbWVudChuYW1lLHRleHRJbnB1dHNbaV0udmFsdWUpOwotICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGhpZGRlblRleHRJbnB1dCk7Ci0gICAgICAgIGlzS2V5TmFtZSA9ICFpc0tleU5hbWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlzRmluZEJ1c2luZXNzKQotICAgIHsKLSAgICAgIHRhYmxlID0gZ2V0RmluZFF1YWxpZmllclRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgdmFyIGNhdGVnb3J5RmluZFF1YWxpZmllciA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgICAgaWYgKGNhdGVnb3J5RmluZFF1YWxpZmllci5zZWxlY3RlZEluZGV4ICE9IDApCi0gICAgICB7Ci0gICAgICAgIHZhciBoaWRkZW5GaW5kUXVhbGlmaWVyID0gY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9GSU5EUVVBTElGSUVSJT4iLGNhdGVnb3J5RmluZFF1YWxpZmllci52YWx1ZSk7Ci0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuRmluZFF1YWxpZmllcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0Rpc2NvdmVyeVVSTFRhYmxlKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0ZXh0SW5wdXRzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgZm9yICh2YXIgaT0wO2k8dGV4dElucHV0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmICh0ZXh0SW5wdXRzW2ldLnR5cGUgPT0gInRleHQiKQotICAgICAgewotICAgICAgICB2YXIgaGlkZGVuVGV4dElucHV0ID0gY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ESVNDT1ZFUllVUkwlPiIsdGV4dElucHV0c1tpXS52YWx1ZSk7Ci0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dElucHV0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZFF1YWxpZmllclRhYmxlKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBmaW5kUXVhbGlmaWVyU2VsZWN0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxmaW5kUXVhbGlmaWVyU2VsZWN0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBmaW5kUXVhbGlmaWVyU2VsZWN0ID0gZmluZFF1YWxpZmllclNlbGVjdHMuaXRlbShpKTsKLSAgICAgIHZhciBoaWRkZW5GaW5kUXVhbGlmaWVyID0gY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9GSU5EUVVBTElGSUVSJT4iLGZpbmRRdWFsaWZpZXJTZWxlY3QudmFsdWUpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5GaW5kUXVhbGlmaWVyKTsKLSAgICB9Ci0KLSAgICB2YXIgZmluZFF1YWxpZmllclNvcnRSYWRpb3MgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxmaW5kUXVhbGlmaWVyU29ydFJhZGlvcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChmaW5kUXVhbGlmaWVyU29ydFJhZGlvcy5pdGVtKGkpLmNoZWNrZWQpCi0gICAgICB7Ci0gICAgICAgIHZhciBoaWRkZW5Tb3J0RWxlbWVudCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUiU+IixmaW5kUXVhbGlmaWVyU29ydFJhZGlvcy5pdGVtKGkpLnZhbHVlKTsKLSAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5Tb3J0RWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1Jlc3VsdFRhYmxlKHRhYmxlQ29udGFpbmVySWQsaW5wdXROYW1lLGZvcm0sc2VsZWN0ZWRPbmx5KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGlucHV0cyA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgICBpZiAoc2VsZWN0ZWRPbmx5KQotICAgICAgewotICAgICAgICBpZiAoaW5wdXRzLml0ZW0oMCkuY2hlY2tlZCkKLSAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoaW5wdXROYW1lLGlucHV0cy5pdGVtKDEpLnZhbHVlKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChpbnB1dE5hbWUsaW5wdXRzLml0ZW0oMSkudmFsdWUpKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBpbml0aWF0ZVN1YlF1ZXJ5KGZvcm1Db250YWluZXJJZCxuZXdTdWJRdWVyeUtleSxxdWVyeUl0ZW0saXNHZXQpCi0gIHsKLSAgICBpZiAoaXNHZXQpCi0gICAgewotICAgICAgdmFyIGhhc0dldEl0ZW1zID0gZmFsc2U7Ci0gICAgICBzd2l0Y2ggKHF1ZXJ5SXRlbSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+OgotICAgICAgICAgIGhhc0dldEl0ZW1zID0gPCU9cmVnTm9kZS5oYXNCdXNpbmVzcygpJT47Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT46Ci0gICAgICAgICAgaGFzR2V0SXRlbXMgPSA8JT1yZWdOb2RlLmhhc1NlcnZpY2UoKSU+OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPjoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBoYXNHZXRJdGVtcyA9IDwlPXJlZ05vZGUuaGFzU2VydmljZUludGVyZmFjZSgpJT47Ci0gICAgICB9Ci0gICAgICBpZiAoIWhhc0dldEl0ZW1zKQotICAgICAgewotICAgICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fSVRFTVNfVE9fR0VUIikpJT4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICB2YXIgZm9ybUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1Db250YWluZXJJZCk7Ci0gICAgdmFyIGZvcm0gPSBmb3JtQ29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4udmFsdWUgPSBpc0dldDsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+LnZhbHVlID0gbmV3U3ViUXVlcnlLZXk7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4udmFsdWUgPSBxdWVyeUl0ZW07Ci0gICAgdmFyIG9rVG9TdWJtaXQgPSBmYWxzZTsKLSAgICBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkIikKLSAgICAgIG9rVG9TdWJtaXQgPSBwcm9jZXNzRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0oZm9ybSk7Ci0gICAgZWxzZSBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJmaW5kU2VydmljZXNBZHZhbmNlZCIpCi0gICAgICBva1RvU3VibWl0ID0gcHJvY2Vzc0ZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybShmb3JtKTsKLSAgICBlbHNlIGlmIChmb3JtQ29udGFpbmVySWQgPT0gImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkIikKLSAgICAgIG9rVG9TdWJtaXQgPSBwcm9jZXNzRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtKGZvcm0pOwotICAgIGVsc2UgaWYgKGZvcm1Db250YWluZXJJZCA9PSAicHVibGlzaFNlcnZpY2VTaW1wbGUiKQotICAgICAgb2tUb1N1Ym1pdCA9IHByb2Nlc3NQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0oZm9ybSk7Ci0gICAgZWxzZSBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJwdWJsaXNoU2VydmljZUFkdmFuY2VkIikKLSAgICAgIG9rVG9TdWJtaXQgPSBwcm9jZXNzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0oZm9ybSk7Ci0gICAgZWxzZSBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJwdWJsaXNoZXJBc3NlcnRpb25zIikKLSAgICAgIG9rVG9TdWJtaXQgPSBoYW5kbGVTdWJtaXQoZm9ybSk7Ci0gICAgZWxzZSBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXMiKQotICAgICAgb2tUb1N1Ym1pdCA9IHByb2Nlc3NGb3JtKGZvcm0pOwotICAgIGlmIChva1RvU3VibWl0KQotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZDM3NTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3N0YXR1c19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5TVEFUVVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX3Rvb2xiYXIuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLlNUQVRVU19DT05URU5UJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTU0YjUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxwcmU+Ci08JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5nZXRNZXNzYWdlc0Zyb21MaXN0KCkpJT4KLSAgICAgICAgPC9wcmU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmQ5ZTlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoInVkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChVRERJRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1Byb2Nlc3NVRERJRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3RhdHVzLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAodWRkaVBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9TVEFUVVMiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iIHRhcmdldD0iPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRFTlQlPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRDbGVhciU+IiB0aXRsZT0iPCU9YWx0Q2xlYXIlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvdWRkaV9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS91ZGRpX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjZmYjMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS91ZGRpX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9VRERJX1BFUlNQRUNUSVZFX0NPTlRFTlQiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCBjb2xzPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIgYmdjb2xvcj0jRUNFOUQ4PgotICA8JQotICBpZiAob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuaXNSVEwoKSkKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuQUNUSU9OU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnNfY29udGFpbmVyLmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL25hdmlnYXRvcl9jb250YWluZXIuanNwIikpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPCUKLSAgfQotICBlbHNlCi0gIHsKLSAgJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuQUNUSU9OU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnNfY29udGFpbmVyLmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvZnJhbWVzZXQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvQ2xlYXJXU0RMQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0NsZWFyV1NETEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYzM1Y2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvQ2xlYXJXU0RMQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5DbGVhcldTRExBY3Rpb24iJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLWlmIChjb250cm9sbGVyLmdldFNlc3Npb25JZCgpID09IG51bGwpIHsKLSU+Ci0KLSA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLQkgICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudCA9IHRvcC5mcmFtZXNbIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfQ09OVEVOVCU+Il07Ci0JCXBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICJodHRwOi8vPCU9cmVxdWVzdC5nZXRTZXJ2ZXJOYW1lKCklPjo8JT1yZXF1ZXN0LmdldFNlcnZlclBvcnQoKSU+PCU9cmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpJT4vYWN0aW9ucy9TZXNzaW9uVGltZWRPdXQuanNwIjsKLSA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLUNsZWFyV1NETEFjdGlvbiBhY3Rpb24gPSBuZXcgQ2xlYXJXU0RMQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5pbmMiICU+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E0MDM4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9DcmVhdGVJbnN0YW5jZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5DcmVhdGVJbnN0YW5jZUFjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gIDwlCi0gIENyZWF0ZUluc3RhbmNlQWN0aW9uIGFjdGlvbiA9IG5ldyBDcmVhdGVJbnN0YW5jZUFjdGlvbihjb250cm9sbGVyKTsKLSAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgYWN0aW9uLmV4ZWN1dGUoKTsKLSAgJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIDwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYmY0NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gIDwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uIGFjdGlvbiA9IG5ldyBJbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gIGlmIChpbnB1dHNWYWxpZCkKLSAgewotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgfQotICAlPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYzJkNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICA8JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb24gYWN0aW9uID0gbmV3IEludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gIGlmIChpbnB1dHNWYWxpZCkKLSAgewotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgfQotICAlPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTIzOWZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMQWN0aW9uSW5wdXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydC5IVFRQVHJhbnNwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LkhUVFBUcmFuc3BvcnRFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bi5taXNjLkJBU0U2NERlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLUludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbiBhY3Rpb24gPSBuZXcgSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uKGNvbnRyb2xsZXIpOwotU3RyaW5nIGh0dHBCYXNpY0F1dGhEYXRhID0gcmVxdWVzdC5nZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9BVVRIKTsKLWlmIChodHRwQmFzaWNBdXRoRGF0YSAhPSBudWxsICYmIGh0dHBCYXNpY0F1dGhEYXRhLmxlbmd0aCgpID4gMCkKLXsKLSAgaW50IGJhc2ljSW5kZXggPSBodHRwQmFzaWNBdXRoRGF0YS5pbmRleE9mKEhUVFBUcmFuc3BvcnQuQkFTSUMpOwotICBpZiAoYmFzaWNJbmRleCAhPSAtMSkKLSAgewotICAgIEJBU0U2NERlY29kZXIgZGVjb2RlciA9IG5ldyBCQVNFNjREZWNvZGVyKCk7Ci0gICAgaHR0cEJhc2ljQXV0aERhdGEgPSBuZXcgU3RyaW5nKGRlY29kZXIuZGVjb2RlQnVmZmVyKGh0dHBCYXNpY0F1dGhEYXRhLnN1YnN0cmluZyhiYXNpY0luZGV4ICsgSFRUUFRyYW5zcG9ydC5CQVNJQy5sZW5ndGgoKSArIDEpKSk7Ci0gICAgaW50IGNvbG9uSW5kZXggPSBodHRwQmFzaWNBdXRoRGF0YS5pbmRleE9mKEhUVFBUcmFuc3BvcnQuQ09MT04pOwotICAgIGlmIChjb2xvbkluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIGFjdGlvbi5hZGRQcm9wZXJ0eShXU0RMQWN0aW9uSW5wdXRzLkhUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRSwgaHR0cEJhc2ljQXV0aERhdGEuc3Vic3RyaW5nKDAsIGNvbG9uSW5kZXgpKTsKLSAgICAgIGFjdGlvbi5hZGRQcm9wZXJ0eShXU0RMQWN0aW9uSW5wdXRzLkhUVFBfQkFTSUNfQVVUSF9QQVNTV09SRCwgaHR0cEJhc2ljQXV0aERhdGEuc3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxLCBodHRwQmFzaWNBdXRoRGF0YS5sZW5ndGgoKSkpOwotICAgIH0KLSAgfQotfQotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotaWYgKCFpbnB1dHNWYWxpZCkKLXsKLSU+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci0gICAgPGhlYWQ+Ci0gICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPjwvc2NyaXB0PgotICAgIDwvaGVhZD4KLSAgICA8Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICA8L3NjcmlwdD4KLSAgICA8L2JvZHk+Ci0gIDwvaHRtbD4KLTwlCi19Ci1lbHNlCi17Ci0gIHRyeQotICB7Ci0gICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci0gICAgICA8aGVhZD4KLSAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPjwvc2NyaXB0PgotICAgICAgPC9oZWFkPgotICAgICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgd3NkbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICAgIDwlCi0gICAgICAgICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgJT4KLSAgICAgICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Jlc3VsdF9jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICA8JQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICU+Ci0gICAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgPCUKLSAgICAgICAgICB9Ci0gICAgICAgICAgJT4KLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICA8L2JvZHk+Ci0gICAgPC9odG1sPgotPCUKLSAgfQotICBjYXRjaCAoSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBodHRwZSkKLSAgewotICAgIGludCBjb2RlID0gaHR0cGUuZ2V0U3RhdHVzQ29kZSgpOwotICAgIGlmIChjb2RlID09IEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfVU5BVVRIT1JJWkVEKQotICAgIHsKLSAgICAgIHJlc3BvbnNlLnNldFN0YXR1cyhjb2RlKTsKLSAgICAgIHJlc3BvbnNlLnNldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX0NPTlRFTlRfTEVOR1RILCBTdHJpbmcudmFsdWVPZigwKSk7Ci0gICAgICBTdHJpbmcgd3d3QXV0aERhdGEgPSBodHRwZS5nZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9XV1dfQVVUSC50b0xvd2VyQ2FzZSgpKTsKLSAgICAgIGlmICh3d3dBdXRoRGF0YSA9PSBudWxsKQotICAgICAgICB3d3dBdXRoRGF0YSA9IGh0dHBlLmdldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX1dXV19BVVRIKTsKLSAgICAgIGlmICh3d3dBdXRoRGF0YSA9PSBudWxsKQotICAgICAgICB3d3dBdXRoRGF0YSA9IEhUVFBUcmFuc3BvcnQuQkFTSUM7Ci0gICAgICByZXNwb25zZS5zZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9XV1dfQVVUSCwgd3d3QXV0aERhdGEpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKFN0cmluZy52YWx1ZU9mKGNvZGUpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGh0dHBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAlPgotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotICAgICAgICAgIDxoZWFkPgotICAgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICAgICAgICA8L2hlYWQ+Ci0gICAgICAgICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgPC9ib2R5PgotICAgICAgICA8L2h0bWw+Ci0gICAgICA8JQotICAgIH0KLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFjYzllOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydC5IVFRQVHJhbnNwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LkhUVFBUcmFuc3BvcnRFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bi5taXNjLkJBU0U2NERlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLioiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24gYWN0aW9uID0gbmV3IEludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAKLWlmIChhY3Rpb24ud2FzU2F2ZUFzU2VsZWN0ZWQoKSkKLXsKLSAgLy8gd3JpdGUgdG8gZmlsZSBzeXN0ZW0KLSAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwotICByZXNwb25zZS5zZXRIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24iLCJhdHRhY2htZW50O2ZpbGVuYW1lPSIrYWN0aW9uLmdldERlZmF1bHRTYXZlQXNGaWxlTmFtZSgpKTsKLSAgYWN0aW9uLndyaXRlU291cmNlQ29udGVudChyZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKSk7ICAgIAotfQotZWxzZQotewotICBpZiAoIWlucHV0c1ZhbGlkKQotICB7Ci0gICU+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotICAgICAgPGhlYWQ+Ci0gICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICAgIDwvaGVhZD4KLSAgICAgIDxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICA8L2JvZHk+Ci0gICAgPC9odG1sPgotICA8JQotICB9Ci0gIGVsc2UKLSAgewotICAgIGlmIChhY3Rpb24ud2FzTmV3RmlsZVNlbGVjdGVkKCkpCi0gICAgeyAgICAgCi0gICU+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLSAgICAgICAgPGhlYWQ+Ci0gICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+PC9zY3JpcHQ+Ci0gICAgICAgIDwvaGVhZD4KLSAgICAgICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8L2JvZHk+Ci0gICAgICA8L2h0bWw+Ci0gICAgPCUgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgaHR0cEJhc2ljQXV0aERhdGEgPSByZXF1ZXN0LmdldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX0FVVEgpOwotICAgICAgaWYgKGh0dHBCYXNpY0F1dGhEYXRhICE9IG51bGwgJiYgaHR0cEJhc2ljQXV0aERhdGEubGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBpbnQgYmFzaWNJbmRleCA9IGh0dHBCYXNpY0F1dGhEYXRhLmluZGV4T2YoSFRUUFRyYW5zcG9ydC5CQVNJQyk7Ci0gICAgICAgIGlmIChiYXNpY0luZGV4ICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgQkFTRTY0RGVjb2RlciBkZWNvZGVyID0gbmV3IEJBU0U2NERlY29kZXIoKTsKLSAgICAgICAgICBodHRwQmFzaWNBdXRoRGF0YSA9IG5ldyBTdHJpbmcoZGVjb2Rlci5kZWNvZGVCdWZmZXIoaHR0cEJhc2ljQXV0aERhdGEuc3Vic3RyaW5nKGJhc2ljSW5kZXggKyBIVFRQVHJhbnNwb3J0LkJBU0lDLmxlbmd0aCgpICsgMSkpKTsKLSAgICAgICAgICBpbnQgY29sb25JbmRleCA9IGh0dHBCYXNpY0F1dGhEYXRhLmluZGV4T2YoSFRUUFRyYW5zcG9ydC5DT0xPTik7Ci0gICAgICAgICAgaWYgKGNvbG9uSW5kZXggIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgYWN0aW9uLmFkZFByb3BlcnR5KFdTRExBY3Rpb25JbnB1dHMuSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FLCBodHRwQmFzaWNBdXRoRGF0YS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCkpOwotICAgICAgICAgICAgYWN0aW9uLmFkZFByb3BlcnR5KFdTRExBY3Rpb25JbnB1dHMuSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JELCBodHRwQmFzaWNBdXRoRGF0YS5zdWJzdHJpbmcoY29sb25JbmRleCArIDEsIGh0dHBCYXNpY0F1dGhEYXRhLmxlbmd0aCgpKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgICAlPgotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotICAgICAgICAgIDxoZWFkPgotICAgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICAgICAgICA8L2hlYWQ+Ci0gICAgICAgICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9yZXN1bHRfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgICA8L2JvZHk+Ci0gICAgICAgIDwvaHRtbD4KLTwlCi0gICAgICB9Ci0gICAgICBjYXRjaCAoSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBodHRwZSkKLSAgICAgIHsKLSAgICAgICAgaW50IGNvZGUgPSBodHRwZS5nZXRTdGF0dXNDb2RlKCk7Ci0gICAgICAgIGlmIChjb2RlID09IEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfVU5BVVRIT1JJWkVEKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKGNvZGUpOwotICAgICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX0NPTlRFTlRfTEVOR1RILCBTdHJpbmcudmFsdWVPZigwKSk7Ci0gICAgICAgICAgU3RyaW5nIHd3d0F1dGhEYXRhID0gaHR0cGUuZ2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfV1dXX0FVVEgudG9Mb3dlckNhc2UoKSk7Ci0gICAgICAgICAgaWYgKHd3d0F1dGhEYXRhID09IG51bGwpCi0gICAgICAgICAgICB3d3dBdXRoRGF0YSA9IGh0dHBlLmdldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX1dXV19BVVRIKTsKLSAgICAgICAgICBpZiAod3d3QXV0aERhdGEgPT0gbnVsbCkKLSAgICAgICAgICAgIHd3d0F1dGhEYXRhID0gSFRUUFRyYW5zcG9ydC5CQVNJQzsKLSAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9XV1dfQVVUSCwgd3d3QXV0aERhdGEpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgICAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShTdHJpbmcudmFsdWVPZihjb2RlKSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoaHR0cGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAlPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLSAgICAgICAgICAgIDxoZWFkPgotICAgICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+PC9zY3JpcHQ+Ci0gICAgICAgICAgICA8L2hlYWQ+Ci0gICAgICAgICAgICA8Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgICAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgICAgIDwvYm9keT4KLSAgICAgICAgICA8L2h0bWw+Ci0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL09wZW5XU0RMQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL09wZW5XU0RMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmZTI1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9PcGVuV1NETEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuT3BlbldTRExBY3Rpb24iJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgT3BlbldTRExBY3Rpb24gYWN0aW9uID0gbmV3IE9wZW5XU0RMQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgaWYgKCFpbnB1dHNWYWxpZCkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0gICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpIHsKLSAgICAgIHdzZGxOYXZpZ2F0b3JDb250ZW50LmxvY2F0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICB3c2RsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotICAgIH0KLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YmVhNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvUmVmcmVzaFdTRExBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuUmVmcmVzaFdTRExBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuQ2xlYXJXU0RMQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08JQotaWYgKGNvbnRyb2xsZXIuZ2V0U2Vzc2lvbklkKCkgPT0gbnVsbCkgewotJT4KLQotIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotCSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50ID0gdG9wLmZyYW1lc1siPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9DT05URU5UJT4iXTsKLQkJcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gImh0dHA6Ly88JT1yZXF1ZXN0LmdldFNlcnZlck5hbWUoKSU+OjwlPXJlcXVlc3QuZ2V0U2VydmVyUG9ydCgpJT48JT1yZXF1ZXN0LmdldENvbnRleHRQYXRoKCklPi9hY3Rpb25zL1Nlc3Npb25UaW1lZE91dC5qc3AiOwotIDwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotJT4JCi0KLSA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotIDwvc2NyaXB0PgotIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBSZWZyZXNoV1NETEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVmcmVzaFdTRExBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgLy8gVGhlIGFjdGlvbiBtYXkgYmUgZXhlY3V0ZWQgdmlhIHByb2dyYW0gbGluay4KLSAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gIGlmIChwYXJhbXNWYWxpZCkgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSB3c2RsTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgCi0gICAgLy8gUnVuIHRoZSBhY3Rpb24uCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAKLSAgICBpZiAoYWN0aW9uUmVzdWx0KSB7Ci0gCSU+Ci0JIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIAlpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpIHsKLSAgICAgIAl3c2RsTmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgCXdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgIAl3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgCX0KLSAgICAJZWxzZSB7Ci0gICAgICAJcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotICAgIAl9Ci0gIAk8L3NjcmlwdD4KLSAgIDwlCi0gICB9Ci0gICBlbHNlIHsKLSAgICU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgCWlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfV1NETF9OT0RFIiwgd3NkbE5vZGUuZ2V0Tm9kZU5hbWUoKSkpJT4iKSkKLSAgICAgIAlwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDbGVhcldTRExBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSUQpKSklPiI7Ci0gICAgCWVsc2UgewotICAgICAgCXdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgIAl3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgCX0KLSAgCTwvc2NyaXB0PgotICAgPCUKLSAgfQotIH0KLSU+Ci08JQotfQotJT4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1Jlc2l6ZVdTRExGcmFtZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTc2NDcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1Jlc2l6ZVdTRExGcmFtZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gQ3JlYXRlIHRoZSBhY3Rpb24uCi0gICBSZXNpemVXU0RMRnJhbWVzQWN0aW9uIGFjdGlvbiA9IG5ldyBSZXNpemVXU0RMRnJhbWVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgCi0gICAvLyBQb3B1bGF0ZSB0aGUgYWN0aW9uIHdpdGggdGhlIHJlcXVlc3QgcHJvcGVydGllcy4KLSAgIGJvb2xlYW4gcmVzdWx0ID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAocmVzdWx0KQotICAgewotICAgICBhY3Rpb24uZXhlY3V0ZShmYWxzZSk7Ci0gICAgIAotICAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7ICAKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldC5zZXRBdHRyaWJ1dGUoImNvbHMiLCI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIpOwotICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5zZXRBdHRyaWJ1dGUoInJvd3MiLCI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iKTsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNkNDRhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24iICU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1pZiAoY29udHJvbGxlci5nZXRTZXNzaW9uSWQoKSA9PSBudWxsKSB7Ci0lPgotCi0gPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0JICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnQgPSB0b3AuZnJhbWVzWyI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX0NPTlRFTlQlPiJdOwotCQlwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiaHR0cDovLzwlPXJlcXVlc3QuZ2V0U2VydmVyTmFtZSgpJT46PCU9cmVxdWVzdC5nZXRTZXJ2ZXJQb3J0KCklPjwlPXJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSU+L2FjdGlvbnMvU2Vzc2lvblRpbWVkT3V0LmpzcCI7Ci0gPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0lPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jIiAlPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ3NjQxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDFjNzY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbgotU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbiBhY3Rpb24gPSBuZXcgU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbihjb250cm9sbGVyKTsKLSAgIAotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgIAotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9zd2l0Y2hwZXJzcGVjdGl2ZS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hSZWFkT25seUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoUmVhZE9ubHlGcmFnbWVudFZpZXdzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZkNzY5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hSZWFkT25seUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZSIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLWlmICh3c2RsUGVyc3BlY3RpdmUuZ2V0U3RhdHVzQ29udGVudFR5cGUoKSA9PSBXU0RMUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX0ZPUk0pCi0gIHdzZGxQZXJzcGVjdGl2ZS5zZXRTdGF0dXNDb250ZW50VHlwZShXU0RMUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX1NPVVJDRSk7Ci1lbHNlCi0gIHdzZGxQZXJzcGVjdGl2ZS5zZXRTdGF0dXNDb250ZW50VHlwZShXU0RMUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX0ZPUk0pOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9yZXN1bHRfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoV1NETERldGFpbHNWaWV3c0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hXU0RMRGV0YWlsc1ZpZXdzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE3YWRmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hXU0RMRGV0YWlsc1ZpZXdzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExEZXRhaWxzVG9vbCIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgd3NkbE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLVdTRExEZXRhaWxzVG9vbCB3c2RsRGV0YWlsc1Rvb2wgPSAoV1NETERldGFpbHNUb29sKXdzZGxOb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci13c2RsRGV0YWlsc1Rvb2wudG9nZ2xlVmlld0lkKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25BYm9ydEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25BYm9ydEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZTJkODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uQWJvcnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLkludm9rZVdTRExPcGVyYXRpb25Ub29sIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCUKLUludm9rZVdTRExPcGVyYXRpb25Ub29sIGludm9rZVdTRExPcGVyYXRpb25Ub29sID0gKEludm9rZVdTRExPcGVyYXRpb25Ub29sKWNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLWlmIChpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5nZXRGcmFnbWVudFZpZXdJRCgpLmVxdWFscyhGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9TT1VSQ0VfVE9fRk9STSkpCi0gIGludm9rZVdTRExPcGVyYXRpb25Ub29sLnNldEZyYWdtZW50Vmlld0lEKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFKTsKLWVsc2UKLSAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RnJhZ21lbnRWaWV3SUQoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk0pOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ1YWMxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCUKLVN5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbiBhY3Rpb24gPSBuZXcgU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uKGNvbnRyb2xsZXIpOwotYm9vbGVhbiBwYXJhbVZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLVN0cmluZyB2aWV3SUQgPSAoU3RyaW5nKWFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfSUQpOwotYm9vbGVhbiBzb3VyY2VUb0Zvcm0gPSB2aWV3SUQuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNKTsKLWlmIChzb3VyY2VUb0Zvcm0pIHsKLSAgaWYgKHBhcmFtVmFsaWQpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoIWNvbmZpcm0oIjwlPWNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1NZTkNfVklFV1MiKSU+IikpCi0gICAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uQWJvcnRKU1AuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoIWNvbmZpcm0oIjwlPWNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1NZTkNfVklFV1NfREVTUElURV9JTlZBTElEX1NPVVJDRV9DT05URU5UIiklPiIpKQotICAgICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkFib3J0SlNQLmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLWFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1RvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1RvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU1ODZkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFRvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MTZjMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvVXBkYXRlV1NETEJpbmRpbmdBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLWlmIChjb250cm9sbGVyLmdldFNlc3Npb25JZCgpID09IG51bGwpIHsKLSU+Ci0KLSA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLQkgICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudCA9IHRvcC5mcmFtZXNbIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfQ09OVEVOVCU+Il07Ci0JCXBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICJodHRwOi8vPCU9cmVxdWVzdC5nZXRTZXJ2ZXJOYW1lKCklPjo8JT1yZXF1ZXN0LmdldFNlcnZlclBvcnQoKSU+PCU9cmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpJT4vYWN0aW9ucy9TZXNzaW9uVGltZWRPdXQuanNwIjsKLSA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24gYWN0aW9uID0gbmV3IFVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uKGNvbnRyb2xsZXIpOwotICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMDY1MmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLldTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbiIlPgotCi0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gbmV3IFdTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETENoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETENoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGY0ODAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1dTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+Ci08JQotRW51bWVyYXRpb24gcGFyYW1OYW1lcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyTmFtZXMoKTsKLXdoaWxlIChwYXJhbU5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gIFN0cmluZyBwYXJhbU5hbWUgPSAoU3RyaW5nKXBhcmFtTmFtZXMubmV4dEVsZW1lbnQoKTsKLSAgU3RyaW5nW10gcGFyYW1WYWx1ZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlclZhbHVlcyhwYXJhbU5hbWUpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtVmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPXBhcmFtTmFtZSU+IiB2YWx1ZT0iPCU9cGFyYW1WYWx1ZXNbaV0lPiI+Ci08JQotICB9Ci19Ci0lPgotPC9mb3JtPgotPC9ib2R5PgotPC9odG1sPgotCi08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci1pZiAoYWN0aW9uLmZhdm9yaXRlRXhpc3RzKCkpIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fT1ZFUldSSVRFX0ZBVk9SSVRFUyIpKSU+IikpCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmMDJkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyMzgyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLldTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSBuZXcgV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmODc2MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLVdTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ZyYWdtZW50c0Zvcm1WaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9GcmFnbWVudHNGb3JtVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYWY0MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ZyYWdtZW50c0Zvcm1WaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLW5vZGVJRC5kZWxldGUoMCwgbm9kZUlELmxlbmd0aCgpKTsKLW5vZGVJRC5hcHBlbmQoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKTsKLUludm9rZVdTRExPcGVyYXRpb25Ub29sIGludm9rZVdTRExPcGVyYXRpb25Ub29sID0gKEludm9rZVdTRExPcGVyYXRpb25Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLUl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0U09BUEhlYWRlcnMoKS5pdGVyYXRvcigpOwotCi1pZiAoaXQuaGFzTmV4dCgpKSB7Ci0JU3RyaW5nIGhlYWRlckRpdklkID0gIkhlYWRlciI7Ci0JU3RyaW5nIGhlYWRlckltZ0lkID0gInhIZWFkZXIiOwotICAgICU+Ci0JPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1oZWFkZXJEaXZJZCU+JywnPCU9aGVhZGVySW1nSWQlPicpIj48aW1nIG5hbWU9IjwlPWhlYWRlckltZ0lkJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0hFQURFUiIpJT48L3N0cm9uZz48L3RkPgotCSAgPC90cj4KLQk8L3RhYmxlPgotCQotCTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0JICA8dHI+Ci0JICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0JICA8L3RyPgotCTwvdGFibGU+Ci0JCi0JPGRpdiBpZD0iPCU9aGVhZGVyRGl2SWQlPiI+Ci0JPCUKLQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaXQubmV4dCgpOwotCSAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRIZWFkZXJGcmFnbWVudChzb2FwSGVhZGVyKTsJICAgCi0JICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0JICBmcmFnSUQuYXBwZW5kKGZyYWcuZ2V0SUQoKSk7Ci0JICAlPgotCSAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYWcuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0JICA8JSAgCi0JfQotCSU+Ci0JPC9kaXY+Ci0gICAgPCUgICAgCi19Ci0KLWJvb2xlYW4gaGFzSW5wdXQgPSBCb29sZWFuLnBhcnNlQm9vbGVhbihyZXF1ZXN0LmdldFBhcmFtZXRlcigiaGFzSW5wdXQiKSk7Ci1TdHJpbmcgYm9keURpdklkID0gIkJvZHkiOwotCi1pZiAoaGFzSW5wdXQpIHsKLQlTdHJpbmcgYm9keUltZ0lkID0gInhCb2R5IjsKLSAgICAlPgotCTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0JICA8dHI+Ci0JICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9Ym9keURpdklkJT4nLCc8JT1ib2R5SW1nSWQlPicpIj48aW1nIG5hbWU9IjwlPWJvZHlJbWdJZCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0JICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CT0RZIiklPjwvc3Ryb25nPjwvdGQ+Ci0JICA8L3RyPgotCTwvdGFibGU+IAotCQotCTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0JICA8dHI+Ci0JICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0JICA8L3RyPgotCTwvdGFibGU+Ci0gICAgPCUKLX0KLSU+Ci0KLTxkaXYgaWQ9IjwlPWJvZHlEaXZJZCU+IiBjbGFzcz0iZnJhZ2FyZWEiPgotPCUKLWl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci13aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gIFBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLSAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICBmcmFnSUQuYXBwZW5kKGZyYWcuZ2V0SUQoKSk7Ci0gICU+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1mcmFnLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICA8JQotfQotJT4KLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9GcmFnbWVudHNTb2FwVmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvRnJhZ21lbnRzU29hcFZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWVlZTg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9GcmFnbWVudHNTb2FwVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqIDIwMDYwNzI2ICAgMTQ0ODI0IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpKHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgSVNPQVBUcmFuc3BvcnQgc29hcFRyYW5zcG9ydCA9IG9wZXJFbGVtZW50LmdldFNPQVBUcmFuc3BvcnRQcm92aWRlcigpLm5ld1RyYW5zcG9ydCgpOwotICAgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlID0gc29hcFRyYW5zcG9ydC5uZXdNZXNzYWdlKG9wZXJFbGVtZW50LmdldE1lc3NhZ2VDb250ZXh0KCkpOwotICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT0FQX1JFUVVFU1RfVE1QLCBzb2FwTWVzc2FnZSk7Ci0gICAKLSAgIEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoc29hcE1lc3NhZ2UuZ2V0TmFtZXNwYWNlVGFibGUoKSk7ICAgICAgCi0gICAKLSAgIFN0cmluZyBjYWNoZWRIZWFkZXJDb250ZW50ID0gb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIpOwotICAgU3RyaW5nIGNhY2hlZEJvZHlDb250ZW50ID0gb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCk7Ci0gICAKLSAgIC8vIGlmIGVpdGhlciBoZWFkZXIgb3IgYm9keSBoYXMgYmVlbiBjYWNoZWQsIG5lZWQgdG8gZW5zdXJlIG5hbWVzcGFjZSB0YWJsZSBpcyB1cGRhdGVkCi0gICAvLyBmcm9tIHRoZSBjYWNoZWQgY29weQotICAgaWYgKGNhY2hlZEhlYWRlckNvbnRlbnQgIT0gbnVsbCB8fCBjYWNoZWRCb2R5Q29udGVudCAhPSBudWxsKSB7Ci0JICAgaWYgKFNPQVBNZXNzYWdlVXRpbHMuZGVjb2RlTmFtZXNwYWNlVGFibGUoc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIG9wZXJFbGVtZW50KSkKLQkJICAgc29hcE1lc3NhZ2Uuc2V0TmFtZXNwYWNlVGFibGUoc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUpOwotICAgfQotCSAgICAgICAgICAgIAotICAgU3RyaW5nIGhlYWRlckNvbnRlbnQ7Ci0gICBTdHJpbmcgYm9keUNvbnRlbnQ7Ci0gICAKLSAgIGlmIChjYWNoZWRIZWFkZXJDb250ZW50ICE9IG51bGwpCi0gICAgICAgaGVhZGVyQ29udGVudCA9IGNhY2hlZEhlYWRlckNvbnRlbnQ7Ci0gICBlbHNlIHsKLQkgICB0cnkgewotCSAgICAgICBTT0FQTWVzc2FnZVV0aWxzLnNldEhlYWRlckNvbnRlbnRGcm9tTW9kZWwoc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7Ci0JICAgICAgIAotCSAgICAgICAvLyBlbnN1cmUgbmFtZXNwYWNlIHRhYmxlIHVwZGF0ZWQgaW4gbWVzc2FnZSBiZWZvcmUgc2VyaWFsaXplIG9wZXJhdGlvbgotCSAgICAgICBzb2FwTWVzc2FnZS5zZXROYW1lc3BhY2VUYWJsZShzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSk7Ci0JICAgICAgIGhlYWRlckNvbnRlbnQgPSBzb2FwVHJhbnNwb3J0Lm5ld1NlcmlhbGl6ZXIoKS5zZXJpYWxpemUoSVNPQVBNZXNzYWdlLkhFQURFUl9DT05URU5ULCBzb2FwTWVzc2FnZSk7Ci0JICAgfQotCSAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkgICBoZWFkZXJDb250ZW50ID0gIiI7Ci0JICAgfQotICAgfQotICAgCi0gICBpZiAoY2FjaGVkQm9keUNvbnRlbnQgIT0gbnVsbCkKLQkgICBib2R5Q29udGVudCA9IGNhY2hlZEJvZHlDb250ZW50OwotICAgZWxzZSB7Ci0JICAgdHJ5IHsKLQkgICAgICAgU09BUE1lc3NhZ2VVdGlscy5zZXRCb2R5Q29udGVudEZyb21Nb2RlbChzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgb3BlckVsZW1lbnQsIHNvYXBNZXNzYWdlKTsKLQkgICAgICAgCi0JICAgICAgIC8vIGVuc3VyZSBuYW1lc3BhY2UgdGFibGUgdXBkYXRlZCBpbiBtZXNzYWdlIGJlZm9yZSBzZXJpYWxpemUgb3BlcmF0aW9uCi0JICAgICAgIHNvYXBNZXNzYWdlLnNldE5hbWVzcGFjZVRhYmxlKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlKTsKLQkgICAgICAgYm9keUNvbnRlbnQgPSBzb2FwVHJhbnNwb3J0Lm5ld1NlcmlhbGl6ZXIoKS5zZXJpYWxpemUoSVNPQVBNZXNzYWdlLkJPRFlfQ09OVEVOVCwgc29hcE1lc3NhZ2UpOwotCSAgIH0KLQkgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJICAgYm9keUNvbnRlbnQgPSAiIjsKLQkgICB9Ci0gICB9ICAgICAgCi0gICAKLSAgIC8vIGNhY2hlIHRoZSBuYW1lc3BhY2UgdGFibGUKLSAgIEVudW1lcmF0aW9uIGVubSA9IHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLmtleXMoKTsKLSAgIHdoaWxlIChlbm0uaGFzTW9yZUVsZW1lbnRzKCkpCi0gICB7Ci0gICAgIFN0cmluZyB1cmkgPSAoU3RyaW5nKWVubS5uZXh0RWxlbWVudCgpOwotICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZylzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5nZXQodXJpKTsKLSAgICAgU3RyaW5nIHZhbHVlID0gU29hcEhlbHBlci5lbmNvZGVOYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXgsIHVyaSk7Ci0gICAgICU+Ci0gICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX05BTUVTUEFDRSU+IiB2YWx1ZT0iPCU9dmFsdWUlPiI+Ci0gICAgIDwlCi0gICB9Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotPCUKLQlFbGVtZW50IHNvYXBFbnZlbG9wZUVsZW1lbnQgPSBzb2FwTWVzc2FnZS5nZXRFbnZlbG9wZShmYWxzZSk7Ci0gICAgU3RyaW5nQnVmZmVyIGhlYWRlciA9IG5ldyBTdHJpbmdCdWZmZXIoIjwiKTsKLSAgICBoZWFkZXIuYXBwZW5kKHNvYXBFbnZlbG9wZUVsZW1lbnQuZ2V0VGFnTmFtZSgpKTsKLSAgICBOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IHNvYXBFbnZlbG9wZUVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotICAgIGludCBudW1iZXJPZkF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOwotICAgIGlmIChudW1iZXJPZkF0dHJpYnV0ZXMgPT0gMCkKLSAgICAgIGhlYWRlci5hcHBlbmQoJz4nKTsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIGZvciAoaW50IGk9MDtpPG51bWJlck9mQXR0cmlidXRlcztpKyspCi0gICAgewotICAgICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICAgIE5vZGUgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0gICAgICBoZWFkZXIuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVOYW1lKCkpLmFwcGVuZCgiPVwiIikuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVWYWx1ZSgpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgICBpZiAoaSA9PSBudW1iZXJPZkF0dHJpYnV0ZXMtMSkKLSAgICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9OD4KLSAgICAgIDxpbWcgd2lkdGg9OCBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgfQotICAgIAotICAgIEVsZW1lbnQgc29hcEhlYWRlckVsZW1lbnQgPSBzb2FwTWVzc2FnZS5nZXRIZWFkZXIoZmFsc2UpOwotICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgaGVhZGVyLmFwcGVuZCgnPCcpLmFwcGVuZChzb2FwSGVhZGVyRWxlbWVudC5nZXRUYWdOYW1lKCkpOwotICAgIGF0dHJpYnV0ZXMgPSBzb2FwSGVhZGVyRWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgbnVtYmVyT2ZBdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLSAgICBpZiAobnVtYmVyT2ZBdHRyaWJ1dGVzID09IDApCi0gICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD04PgotICAgICAgPGltZyB3aWR0aD04IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICBmb3IgKGludCBpPTA7aTxudW1iZXJPZkF0dHJpYnV0ZXM7aSsrKQotICAgIHsKLSAgICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgICBOb2RlIGF0dHJOb2RlID0gYXR0cmlidXRlcy5pdGVtKGkpOwotICAgICAgaGVhZGVyLmFwcGVuZChhdHRyTm9kZS5nZXROb2RlTmFtZSgpKS5hcHBlbmQoIj1cIiIpLmFwcGVuZChhdHRyTm9kZS5nZXROb2RlVmFsdWUoKSkuYXBwZW5kKCdcIicpOwotICAgICAgaWYgKGkgPT0gbnVtYmVyT2ZBdHRyaWJ1dGVzLTEpCi0gICAgICAgIGhlYWRlci5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTE2PgotICAgICAgPGltZyB3aWR0aD0xNiBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgfQotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTM+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9IjE2Ij4KLSAgICAgIDxpbWcgd2lkdGg9IjE2IiBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+ICAgIAotICAgIDx0ZCB2YWxpZ249ImNlbnRlciIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSI8JT1XU0RMQWN0aW9uSW5wdXRzLlNFTEVDVEVEX0ZJTEVfSEVBREVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NPQVBfRklMRSIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpkb0FjdGlvbignPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTl9CUk9XU0VfRklMRV9IRUFERVIlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQlVUVE9OX0xBQkVMX0xPQUQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpkb0FjdGlvbignPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTl9TQVZFX0FTX0hFQURFUiU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJCVVRUT05fTEFCRUxfU0FWRV9BUyIpJT48L2E+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0zPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPSIxNiI+Ci0gICAgICA8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHdpZHRoPSIxMDAlIj4KLSAgICAgIDx0ZXh0YXJlYSBpZD0ic29hcF9oZWFkZXJfY29udGVudCIgbmFtZT0iPCU9RnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlRfSEVBREVSJT4iIGNsYXNzPSJ0ZXh0YXJlYWVudGVyIj48JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KGhlYWRlckNvbnRlbnQpJT48L3RleHRhcmVhPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgIGhlYWRlci5hcHBlbmQoIjwvIikuYXBwZW5kKHNvYXBIZWFkZXJFbGVtZW50LmdldFRhZ05hbWUoKSkuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTEgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD04PgotICAgICAgPGltZyB3aWR0aD04IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICBFbGVtZW50IHNvYXBCb2R5RWxlbWVudCA9IHNvYXBNZXNzYWdlLmdldEJvZHkoZmFsc2UpOwotICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgaGVhZGVyLmFwcGVuZCgnPCcpLmFwcGVuZChzb2FwQm9keUVsZW1lbnQuZ2V0VGFnTmFtZSgpKTsKLSAgICBhdHRyaWJ1dGVzID0gc29hcEJvZHlFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICBudW1iZXJPZkF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOwotICAgIGlmIChudW1iZXJPZkF0dHJpYnV0ZXMgPT0gMCkKLSAgICAgIGhlYWRlci5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTg+Ci0gICAgICA8aW1nIHdpZHRoPTggaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIGZvciAoaW50IGk9MDtpPG51bWJlck9mQXR0cmlidXRlcztpKyspCi0gICAgewotICAgICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICAgIE5vZGUgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0gICAgICBoZWFkZXIuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVOYW1lKCkpLmFwcGVuZCgiPVwiIikuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVWYWx1ZSgpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgICBpZiAoaSA9PSBudW1iZXJPZkF0dHJpYnV0ZXMtMSkKLSAgICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICB9Ci0KLSAgICBFbGVtZW50IHdyYXBwZXJFbGVtZW50ID0gbnVsbDsKLSAgICBpZiAoIW9wZXJFbGVtZW50LmlzRG9jdW1lbnRTdHlsZSgpKQotICAgIHsgICAgICAKLSAgICAgIC8vIEdlbmVyYXRlIGFuIFJQQyBzdHlsZSB3cmFwcGVyIGVsZW1lbnQuICAgICAgCi0gICAgICB3cmFwcGVyRWxlbWVudCA9IChFbGVtZW50KSBzb2FwQm9keUVsZW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICAgIGhlYWRlci5hcHBlbmQoJzwnKS5hcHBlbmQod3JhcHBlckVsZW1lbnQuZ2V0VGFnTmFtZSgpKTsKLSAgICAgIGF0dHJpYnV0ZXMgPSB3cmFwcGVyRWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBudW1iZXJPZkF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOwotICAgICAgaWYgKG51bWJlck9mQXR0cmlidXRlcyA9PSAwKQotICAgICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgIDxpbWcgd2lkdGg9MTYgaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgICAgZm9yIChpbnQgaT0wO2k8bnVtYmVyT2ZBdHRyaWJ1dGVzO2krKykKLSAgICAgIHsKLSAgICAgICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICAgICAgTm9kZSBhdHRyTm9kZSA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLSAgICAgICAgaGVhZGVyLmFwcGVuZChhdHRyTm9kZS5nZXROb2RlTmFtZSgpKS5hcHBlbmQoIj1cIiIpLmFwcGVuZChhdHRyTm9kZS5nZXROb2RlVmFsdWUoKSkuYXBwZW5kKCdcIicpOwotICAgICAgICBpZiAoaSA9PSBudW1iZXJPZkF0dHJpYnV0ZXMtMSkKLSAgICAgICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0yND4KLSAgICAgIDxpbWcgd2lkdGg9MjQgaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgICAgfQotICAgIH0KLQotICAgIGludCBzb3VyY2VDb250ZW50SW5kZW50YXRpb25JbWFnZVdpZHRoID0gMTY7Ci0gICAgaWYgKHdyYXBwZXJFbGVtZW50ICE9IG51bGwpCi0gICAgICBzb3VyY2VDb250ZW50SW5kZW50YXRpb25JbWFnZVdpZHRoICs9IDg7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9Mz4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD08JT1zb3VyY2VDb250ZW50SW5kZW50YXRpb25JbWFnZVdpZHRoJT4+Ci0gICAgICA8aW1nIHdpZHRoPTwlPXNvdXJjZUNvbnRlbnRJbmRlbnRhdGlvbkltYWdlV2lkdGglPiBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+ICAgIAotICAgIDx0ZCB2YWxpZ249ImNlbnRlciIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSI8JT1XU0RMQWN0aW9uSW5wdXRzLlNFTEVDVEVEX0ZJTEUlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU09BUF9GSUxFIiklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmRvQWN0aW9uKCc8JT1XU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkJVVFRPTl9MQUJFTF9MT0FEIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImNlbnRlciIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9BY3Rpb24oJzwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fU0FWRV9BUyU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJCVVRUT05fTEFCRUxfU0FWRV9BUyIpJT48L2E+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0zPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTwlPXNvdXJjZUNvbnRlbnRJbmRlbnRhdGlvbkltYWdlV2lkdGglPj4KLSAgICAgIDxpbWcgd2lkdGg9PCU9c291cmNlQ29udGVudEluZGVudGF0aW9uSW1hZ2VXaWR0aCU+IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgd2lkdGg9IjEwMCUiPgotICAgICAgPHRleHRhcmVhIGlkPSJzb2FwX2JvZHlfY29udGVudCIgbmFtZT0iPCU9RnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlQlPiIgY2xhc3M9ImJpZ3RleHRhcmVhZW50ZXIiPjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QoYm9keUNvbnRlbnQpJT48L3RleHRhcmVhPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIGlmICh3cmFwcGVyRWxlbWVudCAhPSBudWxsKQotICAgewotICAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgICBoZWFkZXIuYXBwZW5kKCI8LyIpLmFwcGVuZCh3cmFwcGVyRWxlbWVudC5nZXRUYWdOYW1lKCkpLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIH0KLQotICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgIGhlYWRlci5hcHBlbmQoIjwvIikuYXBwZW5kKHNvYXBCb2R5RWxlbWVudC5nZXRUYWdOYW1lKCkpLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0xIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9OD4KLSAgICAgIDxpbWcgd2lkdGg9OCBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgaGVhZGVyLmFwcGVuZCgiPC8iKS5hcHBlbmQoc29hcEVudmVsb3BlRWxlbWVudC5nZXRUYWdOYW1lKCkpLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0xIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ludm9rZVdTRExPcGVyYXRpb25Gb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9JbnZva2VXU0RMT3BlcmF0aW9uRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZDJkNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ludm9rZVdTRExPcGVyYXRpb25Gb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUxMiAgIDEyMTIxMCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICBTdHJpbmcgZnJhZ21lbnRWaWV3SUQgPSBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5nZXRGcmFnbWVudFZpZXdJRCgpOwotICBpbnQgb3BlcmF0aW9uVHlwZSA9IG9wZXJFbGVtZW50LmdldE9wZXJhdGlvblR5cGUoKTsKLSAgU3RyaW5nIGludm9rZVdTRExPcGVyYXRpb25VUkwgPSByZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoaW52b2tlV1NETE9wZXJhdGlvblRvb2wuZ2V0Rm9ybUFjdGlvbkxpbmsob3BlcmF0aW9uVHlwZSxmcmFnbWVudFZpZXdJRCkpKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0lOVk9LRV9XU0RMX09QRVJBVElPTiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL2ZyYWdtZW50dGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gZG9BY3Rpb24oYWN0aW9uKQotICB7Ci0gICAgdmFyIGZvcm0gPSBkb2N1bWVudC5mb3Jtc1swXTsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIGZvcm0uPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTiU+LnZhbHVlID0gYWN0aW9uOwotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgIGZvcm0uPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTiU+LnZhbHVlID0gIjwlPWludm9rZVdTRExPcGVyYXRpb25VUkwlPiI7Ci0gICAgICByZXNldFN1Ym1pc3Npb24oKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNsb3NlQ2hpbGRXaW5kb3dzKCkKLSAgewotICAgIGNsb3NlWFNESW5mb0RpYWxvZygpOwotICAgIGNsb3NlQ2FsZW5kYXJCcm93c2VyKCk7Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUNoaWxkV2luZG93cygpIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8Zm9ybSBhY3Rpb249IjwlPWludm9rZVdTRExPcGVyYXRpb25VUkwlPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTiU+IiB2YWx1ZT0iPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTl9GT1JNJT4iPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfSU5WT0tFX1dTRExfT1BFUkFUSU9OIik7Ci0gICAgaWYgKG9wZXJhdGlvblR5cGUgPT0gV1NETE9wZXJhdGlvbkVsZW1lbnQuT1BFUkFUSU9OX1RZUEVfU09BUCkKLSAgICB7Ci0gICAgJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRpdGxlSW1hZ2VQYXRoKSklPiIgYWx0PSIiPgotICAgICAgPHN0cm9uZz48JT10aXRsZSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgd2lkdGg9IioiPiZuYnNwOzwvdGQ+Ci0gICAgPHRkIGFsaWduPSJyaWdodCIgY2xhc3M9ImxhYmVscyI+Ci08JQotICAgaWYgKGZyYWdtZW50Vmlld0lELmVxdWFscyhGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSkpCi0gICB7Ci0lPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzeW5jaHJvbml6ZUZyYWdtZW50Vmlld3MoJzwlPUZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNJT4nKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1dJVENIX1RPX0ZPUk1fVklFVyIpJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRk9STSIpJT48L2E+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c3luY2hyb25pemVGcmFnbWVudFZpZXdzKCc8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSU+JykiIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NXSVRDSF9UT19TT1VSQ0VfVklFVyIpJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfU09VUkNFIiklPjwvYT4KLTwlCi0gICB9Ci0lPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIGNvbHNwYW49Mz48aW1nIGhlaWdodD0yIHdpZHRoPSIxMDAlIiBhbGlnbj0idG9wIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICA8JQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLQotICAgICAgICA8JSAgICAgICAgICAgCi0JCS8vaGVyZSB3ZSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB0aGlzIG9wZXJhdGlvbgotCQlib29sZWFuIGhhc0lucHV0ID0gdHJ1ZTsKLQkJc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7ICAKLQkJSXRlcmF0b3IgaXRlciA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOyAgICAgICAgCi0JCVN0cmluZyBvcGVyYXRpb25OYW1lID0gb3BlckVsZW1lbnQuZ2V0TmFtZSgpOwotCi0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkKLQkJewotCQkJUGFydCBwYXJ0ID0gKFBhcnQpaXRlci5uZXh0KCk7IAotCQkJSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsgIAotCQkJb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uIGRlZiA9IGZyYWcuZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLQkJCS8vd2UgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIG9wZXJhdGlvbidzIGlucHV0IG1lc3NhZ2UKLQkJCWlmIChkZWYgPT0gbnVsbCkKLQkJCXsKLQkJCQkvL3RoaXMgaXMgdGhlIHBhdHRlcm4gPGVsZW1lbnQgbmFtZT0iZm9vIj48L2VsZW1lbnQ+Ci0JCQkJaGFzSW5wdXQgPSBmYWxzZTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlvcmcudzNjLmRvbS5FbGVtZW50IGVsZW1lbnQgPSBkZWYuZ2V0RWxlbWVudCgpOwkJCQkKLQkJCQlpZiAoZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoImNvbXBsZXhUeXBlIikgJiYgIWVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKQotCQkJCXsJLy90aGlzIGlzIHRoZSBwYXR0ZXJuICA8ZWxlbWVudCBuYW1lPSJmb28iPjxjb21wbGV4VHlwZS8+PC9lbGVtZW50PgotCQkJCQkvL3RoZXJlIGNvdWxkIGJlIG90aGVyIHBhdHRlcm5zIHdpdGggbm8gaW5wdXQgYnV0IHRoZXkgYXJlIHVuY29tbW9uCi0JCQkJCWhhc0lucHV0ID0gZmFsc2U7Ci0JCQkJfQotCQkJfSAKLSAgICAgIAl9Ci0JCWlmIChoYXNJbnB1dCB8fCAhb3BlckVsZW1lbnQuZ2V0U09BUEhlYWRlcnMoKS5pc0VtcHR5KCkpCi0JCXsKLQkJCW91dC5wcmludCh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlZPS0VfV1NETF9PUEVSQVRJT05fREVTQyIpKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCW91dC5wcmludCh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlZPS0VfV1NETF9PUEVSQVRJT05fREVTQ19OT19JTlBVVCIsIG9wZXJhdGlvbk5hbWUgKSk7Ci0JCX0KLSAgICAgICAgJT4KLSAgICAgICAgIAotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImtleWxpbmVmaWVsZHNldCI+Ci0gICAgICAgICAgICA8bGVnZW5kIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8bGFiZWwgZm9yPSI8JT1XU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTkRfUE9JTlRTIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICA8L2xlZ2VuZD4KLSAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0xMCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0iPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPiIgbmFtZT0iPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPiIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICBXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KW9wZXJFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gZW5kUG9pbnRzID0gYmluZGluZ0VsZW1lbnQuZ2V0RW5kUG9pbnRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyRW5kUG9pbnQgPSBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5nZXRFbmRQb2ludCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZFBvaW50cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPWVuZFBvaW50c1tpXSU+IiA8JWlmIChlbmRQb2ludHNbaV0uZXF1YWxzKGN1cnJFbmRQb2ludCkpIHslPnNlbGVjdGVkPCV9JT4+PCU9ZW5kUG9pbnRzW2ldJT4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPC9maWVsZHNldD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8JQotICAgIGlmIChmcmFnbWVudFZpZXdJRC5lcXVhbHMoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UpKQotICAgIHsKLSAgICAlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL0ZyYWdtZW50c1NvYXBWaWV3LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8JQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvRnJhZ21lbnRzRm9ybVZpZXcuanNwIiBmbHVzaD0idHJ1ZSI+Ci0JPGpzcDpwYXJhbSBuYW1lPSJoYXNJbnB1dCIgdmFsdWU9IjwlPWhhc0lucHV0JT4iLz4KLTwvanNwOmluY2x1ZGU+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL09wZW5XU0RMRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvT3BlbldTRExGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlMzZmZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvT3BlbldTRExGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlscyIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX09QRU5fV1NETCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy93c2RsYnJvd3Nlci5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiIgb25VbmxvYWQ9ImNsb3NlV1NETEJyb3dzZXIoKSI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9PcGVuV1NETEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBoYW5kbGVTdWJtaXQodGhpcykiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzZGwvaW1hZ2VzL29wZW5fd3NkbF9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfT1BFTl9XU0RMIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgIDx0YWJsZT4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09QRU5fV1NETF9ERVNDIiklPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPiAgICAgICAgCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF93c2RsX3VybCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIGlmICghZm9ybVRvb2wuaXNJbnB1dFZhbGlkKEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCkpIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIFN0cmluZyB3c2RsVXJsID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwpOwotICAgICAgICAgICAgICBpZiAod3NkbFVybCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHdzZGxVcmwgPSAiIjsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdjb250ZW50Ym9yZGVyJyw8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0UlPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3dzZGxfdXJsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NkbFVybCklPiIgc2l6ZT0iNTAiIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGNsb3NlV1NETEJyb3dzZXIoKTsKLTwvc2NyaXB0PiAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9Qcm9jZXNzV1NETEZyYW1lc2V0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTUyZjRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9Qcm9jZXNzV1NETEZyYW1lc2V0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoZm9ybUFjdGlvbi50b1N0cmluZygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPgotICA8aW5wdXQgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkZSQU1FX05BTUUlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9Zm9ybUZyYW1lTmFtZSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iPgotPC9mb3JtPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1JlYWRPbmx5RnJhZ21lbnRzRm9ybVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1JlYWRPbmx5RnJhZ21lbnRzRm9ybVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWIzODgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c0Zvcm1WaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqIDIwMDcwNTA3ICAgMTg1NjAwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0Ugc3RhdHVzIHBhbmUncyAiaGVhZGVyIiB0d2lzdGllIHNob3VsZCBub3QgYXBwZWFyIGZvciByZXNwb25zZXMgd2l0aG91dCBoZWFkZXJzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwucGFyc2Vycy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci13c2RsUGVyc3BlY3RpdmUuc2V0U3RhdHVzQ29udGVudFR5cGUoV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9GT1JNKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0T3BlcmF0aW9uTm9kZSgpOwotbm9kZUlELmRlbGV0ZSgwLCBub2RlSUQubGVuZ3RoKCkpOwotbm9kZUlELmFwcGVuZChvcGVyTm9kZS5nZXROb2RlSWQoKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotT3BlcmF0aW9uIG9wZXIgPSBvcGVyRWxlbWVudC5nZXRPcGVyYXRpb24oKTsKLWlmIChvcGVyLmdldE91dHB1dCgpID09IG51bGwpCi17Ci0lPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTk9USElOR19UT19ESVNQTEFZX0lOX0ZPUk1fVklFVyIpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci1lbHNlCi17Ci0gIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSA9IChJU09BUE1lc3NhZ2UpIG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVNQT05TRSk7Ci0gIEVsZW1lbnRbXSBoZWFkZXJDb250ZW50ID0gc29hcE1lc3NhZ2UuZ2V0SGVhZGVyQ29udGVudCgpOzsKLSAgRWxlbWVudFtdIGJvZHlDb250ZW50ICAgPSBzb2FwTWVzc2FnZS5nZXRCb2R5Q29udGVudCgpOwotICAKLSAgYm9vbGVhbiBjYWNoZWQgPSAoKEJvb2xlYW4pb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChXU0RMQWN0aW9uSW5wdXRzLlNPQVBfUkVTUE9OU0VfQ0FDSEVEKSkuYm9vbGVhblZhbHVlKCk7Ci0KLSAgaWYgKHNvYXBNZXNzYWdlLmdldEJvZHkoZmFsc2UpID09IG51bGwpIC8vIGJvZHkgaXMgbWFuZGF0b3J5Ci0gIHsKLSAgJT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU09BUF9SRVNQT05TRV9GQUlMRURfVkFMSURBVElPTl9JTl9GT1JNX1ZJRVciKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0JaWYgKGhlYWRlckNvbnRlbnQgIT0gbnVsbCAmJiBoZWFkZXJDb250ZW50Lmxlbmd0aCA+IDApIHsJCQotCi0JCVN0cmluZyBoZWFkZXJEaXZJZCA9ICJIZWFkZXIiOwotCQlTdHJpbmcgaGVhZGVySW1nSWQgPSAieEhlYWRlciI7CQkKLQkgICAgJT4KLQkgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkJICA8dHI+Ci0JCSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWhlYWRlckRpdklkJT4nLCc8JT1oZWFkZXJJbWdJZCU+JykiPjxpbWcgbmFtZT0iPCU9aGVhZGVySW1nSWQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotCQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0hFQURFUiIpJT48L3N0cm9uZz48L3RkPgotCQkgIDwvdHI+Ci0JCTwvdGFibGU+Ci0JCQotCQk8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotCQkgIDx0cj4KLQkJICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0JCSAgPC90cj4KLQkJPC90YWJsZT4KLQkJCi0JCTxkaXYgaWQ9IjwlPWhlYWRlckRpdklkJT4iIGNsYXNzPSJmcmFnYXJlYSI+Ci0JCTwlCi0JCWJvb2xlYW4gaGFzU09BUEhlYWRlcnMgPSBmYWxzZTsJCQotCQlJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldFNPQVBIZWFkZXJzKGZhbHNlKS5pdGVyYXRvcigpOwotCQlpbnQgc3RhcnQgPSAwOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpICYmIHN0YXJ0IDwgaGVhZGVyQ29udGVudC5sZW5ndGgpIHsKLQkJCVNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKSBpdC5uZXh0KCk7CQkJCQkJCQkJCi0JCQlJWFNERnJhZ21lbnQgZnJhZ21lbnQgPSBvcGVyRWxlbWVudC5nZXRIZWFkZXJGcmFnbWVudChzb2FwSGVhZGVyLCBmYWxzZSk7Ci0JCQkKLQkJCWlmICghY2FjaGVkKSB7CQkJCQotCQkJCWludCBwb3MgPSBTT0FQTWVzc2FnZVV0aWxzLmZpbmRGaXJzdE1hdGNoaW5nRWxlbWVudCgKLQkJCQkJc29hcEhlYWRlci5nZXRFUGFydCgpLAotCQkJCQloZWFkZXJDb250ZW50LAotCQkJCQlzb2FwTWVzc2FnZS5nZXROYW1lc3BhY2VUYWJsZSgpLAotCQkJCQlmcmFnbWVudC5nZXROYW1lKCksCi0JCQkJCXN0YXJ0KTsKLQkJCQkKLQkJCQlpZiAocG9zID09IC0xKQotCQkJCQljb250aW51ZTsKLQkJCQkKLQkJCQlFbGVtZW50IGVsZW1lbnQgPSBoZWFkZXJDb250ZW50W3Bvc107Ci0JCQkJc3RhcnQgPSBwb3MgKyAxOwotCQkJCQotCQkJCWlmICghZnJhZ21lbnQuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKG5ldyBFbGVtZW50W10geyBlbGVtZW50IH0pKQotCQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWVsc2UgaWYgKCFmcmFnbWVudC52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpKQotCQkJCWNvbnRpbnVlOwotCQkJCi0JCQloYXNTT0FQSGVhZGVycyA9IHRydWU7CQkJCQotCQkJZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotCQkJZnJhZ0lELmFwcGVuZChmcmFnbWVudC5nZXRJRCgpKTsKLQkJCSU+Ci0JCQk8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLQkJCTwlICAKLQkJfQkJCi0JCWlmICghaGFzU09BUEhlYWRlcnMpIHsKLQkJCSU+Ci0JCQk8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotCQkgICAgICA8dHI+Ci0JCSAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiPgotCQkgICAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0FOTk9UX0RJU1BMQVlfSEVBREVSX0lOX0ZPUk1fVklFVyIpJT4KLQkJICAgICAgICA8L3RkPgotCQkgICAgICA8L3RyPgotCQkgICAgPC90YWJsZT4KLQkJCTwlCi0JCX0KLQkJJT4KLQkJPC9kaXY+Ci0JCTwlICAgCi0JfQotCQkKLQlTdHJpbmcgYm9keURpdklkID0gIkJvZHkiOwotCVN0cmluZyBib2R5SW1nSWQgPSAieEJvZHkiOwkgIAkJCi0JJT4JCQkKLQk8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotCSAgPHRyPgotCSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWJvZHlEaXZJZCU+JywnPCU9Ym9keUltZ0lkJT4nKSI+PGltZyBuYW1lPSI8JT1ib2R5SW1nSWQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotCSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPjxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQk9EWSIpJT48L3N0cm9uZz48L3RkPgotCSAgPC90cj4KLQk8L3RhYmxlPiAKLQkKLQk8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotCSAgPHRyPgotCSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotCSAgPC90cj4KLQk8L3RhYmxlPgotCQotCTxkaXYgaWQ9IjwlPWJvZHlEaXZJZCU+IiBjbGFzcz0iZnJhZ2FyZWEiPgotCTwlCQotCWJvb2xlYW4gaGFzU09BUEJvZHkgPSBmYWxzZTsKLQlpZiAoYm9keUNvbnRlbnQgIT0gbnVsbCAmJiBib2R5Q29udGVudC5sZW5ndGggPiAwKSB7CQkJCQotCQkKLQkgICAgTWFwIHBhcnRzTWFwID0gb3Blci5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkuZ2V0UGFydHMoKTsKLQkgICAgSXRlcmF0b3IgaXQgPSBwYXJ0c01hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCSAgICBIYXNodGFibGUgdXJpUmVmZXJlbmNlcyA9IG51bGw7Ci0JICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0JICAgIHsKLQkgICAgICBJWFNERnJhZ21lbnQgZnJhZ21lbnQgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudCgoUGFydClpdC5uZXh0KCksIGZhbHNlKTsKLQkgICAgICBpZiAoIWNhY2hlZCkKLQkgICAgICB7Ci0JICAgICAgICBpZiAoIW9wZXJFbGVtZW50LmlzVXNlTGl0ZXJhbCgpICYmIChmcmFnbWVudCBpbnN0YW5jZW9mIElTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQpKQotCSAgICAgICAgewotCSAgICAgICAgICBpZiAodXJpUmVmZXJlbmNlcyA9PSBudWxsKQotCSAgICAgICAgICAgIHVyaVJlZmVyZW5jZXMgPSBTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQucGFyc2VVUklSZWZlcmVuY2VzKHNvYXBNZXNzYWdlLmdldEVudmVsb3BlKHRydWUpLCB0cnVlKTsKLQkgICAgICAgICAgKChJU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50KWZyYWdtZW50KS5zZXRVUklSZWZlcmVuY2VzKHVyaVJlZmVyZW5jZXMpOwotCSAgICAgICAgfQotCSAgICAgICAgaWYgKCFmcmFnbWVudC5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoYm9keUNvbnRlbnQpKQotCSAgICAgICAgCWNvbnRpbnVlOwotCSAgICAgIH0KLQkgICAgICBlbHNlIGlmICghZnJhZ21lbnQudmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSkKLQkJCWNvbnRpbnVlOwotCQkJCi0JCSAgaGFzU09BUEJvZHkgPSB0cnVlOwkJCQkKLQkgICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0JICAgICAgZnJhZ0lELmFwcGVuZChmcmFnbWVudC5nZXRJRCgpKTsKLQkgICAgICAlPgotCSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1mcmFnbWVudC5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotCSAgICAgIDwlCi0JICAgIH0KLQkgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMQWN0aW9uSW5wdXRzLlNPQVBfUkVTUE9OU0VfQ0FDSEVELCBuZXcgQm9vbGVhbih0cnVlKSk7Ci0JfQotCQotCWlmIChzb2FwTWVzc2FnZS5nZXRGYXVsdCgpID09IG51bGwgJiYgKGJvZHlDb250ZW50ID09IG51bGwgfHwgYm9keUNvbnRlbnQubGVuZ3RoID09IDApKSB7Ci0JCSU+Ci0JCTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0JICAgICAgPHRyPgotCSAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiPgotCSAgICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CT0RZX0lTX0VNUFRZIiklPgotCSAgICAgICAgPC90ZD4KLQkgICAgICA8L3RyPgotCSAgICA8L3RhYmxlPgotCQk8JQotICAgIH0KLQllbHNlIGlmICghaGFzU09BUEJvZHkpIHsKLQkJJT4KLQkJPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkgICAgICA8dHI+Ci0JICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyI+Ci0JICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NBTk5PVF9ESVNQTEFZX0JPRFlfSU5fRk9STV9WSUVXIiklPgotCSAgICAgICAgPC90ZD4KLQkgICAgICA8L3RyPgotCSAgICA8L3RhYmxlPgotCQk8JQotCX0gCi0gICAgJT4KLSAgICA8L2Rpdj4KLSAgICA8JQotICB9Ci19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1JlYWRPbmx5RnJhZ21lbnRzU29hcFZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1JlYWRPbmx5RnJhZ21lbnRzU29hcFZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTMxZWJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c1NvYXBWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwOSAgIDEwMzA3MiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDYwNTE1ICAgMTQwNjA3IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLXdzZGxQZXJzcGVjdGl2ZS5zZXRTdGF0dXNDb250ZW50VHlwZShXU0RMUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX1NPVVJDRSk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE9wZXJhdGlvbk5vZGUoKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1TdHJpbmcgc29hcFJlcXVlc3RUYWJsZUNvbnRhaW5lcklkID0gIlNPQVBSZXF1ZXN0IjsKLVN0cmluZ0J1ZmZlciBzb2FwUmVxdWVzdFR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotc29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZS5hcHBlbmQoc29hcFJlcXVlc3RUYWJsZUNvbnRhaW5lcklkKTsKLVN0cmluZyBzb2FwUmVzcG9uc2VUYWJsZUNvbnRhaW5lcklkID0gIlNPQVBSZXNwb25zZSI7Ci1TdHJpbmdCdWZmZXIgc29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci1zb2FwUmVzcG9uc2VUd2lzdEltYWdlTmFtZS5hcHBlbmQoc29hcFJlc3BvbnNlVGFibGVDb250YWluZXJJZCk7Ci0lPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHNlY3Rpb25JZHMgPSBbIjwlPXNvYXBSZXF1ZXN0VGFibGVDb250YWluZXJJZCU+IiwiPCU9c29hcFJlc3BvbnNlVGFibGVDb250YWluZXJJZCU+Il07Ci0gIGZ1bmN0aW9uIHRvZ2dsZVNPQVBFbnZlbG9wZShzb2FwRW52ZWxvcGVUeXBlLHR3aXN0SW1hZ2VOYW1lKQotICB7Ci08JQotICAgIC8vIElmIGJvdGggZW52ZWxvcGVzIGFyZSBleHBhbmRlZCwgZWFjaCBzaG91bGQgaGF2ZSA1MCUgaGVpZ2h0LiBPdGhlcndpc2UsIHRoZSByZW1haW5pbmcgZGlzcGxheWVkIGVudmVsb3BlIHNob3VsZCBiZSByZXNldCB0byAxMDAlIGhlaWdodC4KLSU+Ci0gICAgdmFyIHNvYXBTZWN0aW9uSWQgPSBzZWN0aW9uSWRzW3NvYXBFbnZlbG9wZVR5cGVdOwotICAgIHZhciBzb2FwU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNvYXBTZWN0aW9uSWQpOwotICAgIHZhciBzb2FwU2VjdGlvblRhYmxlID0gZ2V0VGFibGUoc29hcFNlY3Rpb25JZCk7Ci0gICAgdmFyIG90aGVyU29hcFNlY3Rpb25JZCA9IHNlY3Rpb25JZHNbMS1zb2FwRW52ZWxvcGVUeXBlXTsKLSAgICB2YXIgb3RoZXJTb2FwU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG90aGVyU29hcFNlY3Rpb25JZCk7Ci0gICAgdmFyIG90aGVyU29hcFNlY3Rpb25UYWJsZSA9IGdldFRhYmxlKG90aGVyU29hcFNlY3Rpb25JZCk7Ci0gICAgaWYgKHNvYXBTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKQotICAgIHsKLSAgICAgIGlmIChvdGhlclNvYXBTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPT0gIiIpCi0gICAgICB7Ci0gICAgICAgIHNvYXBTZWN0aW9uVGFibGUuaGVpZ2h0ID0gIjUwJSI7Ci0gICAgICAgIG90aGVyU29hcFNlY3Rpb25UYWJsZS5oZWlnaHQgPSAiNTAlIjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgc29hcFNlY3Rpb25UYWJsZS5oZWlnaHQgPSAiMTAwJSI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpZiAob3RoZXJTb2FwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID09ICIiKQotICAgICAgICBvdGhlclNvYXBTZWN0aW9uVGFibGUuaGVpZ2h0ID0gIjEwMCUiOwotICAgIH0KLSAgICB0d2lzdChzb2FwU2VjdGlvbklkLHR3aXN0SW1hZ2VOYW1lKTsKLSAgfQotPC9zY3JpcHQ+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dG9nZ2xlU09BUEVudmVsb3BlKDwlPVdTRExBY3Rpb25JbnB1dHMuU09BUF9FTlZFTE9QRV9UWVBFX1JFUVVFU1QlPiwnPCU9c29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT1zb2FwUmVxdWVzdFR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NPQVBfUkVRVUVTVF9FTlZFTE9QRSIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08ZGl2IGlkPSI8JT1zb2FwUmVxdWVzdFRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBoZWlnaHQ9IjUwJSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxscGFkZGluZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGlmcmFtZSBuYW1lPSJyZXF1ZXN0RW52ZWxvcGVGcmFtZSIgZnJhbWVib3JkZXI9MCBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh3c2RsUGVyc3BlY3RpdmUuZ2V0U09BUEVudmVsb3BlWE1MTGluayhXU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRV9SRVFVRVNUKSkpJT4iIHdpZHRoPSI5NSUiIGhlaWdodD0iMTAwJSI+PC9pZnJhbWU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdCgiPCU9c29hcFJlcXVlc3RUYWJsZUNvbnRhaW5lcklkJT4iLCI8JT1zb2FwUmVxdWVzdFR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIpOwotPC9zY3JpcHQ+Ci0KLTwlCi1pZiAob3BlckVsZW1lbnQuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkgIT0gbnVsbCkKLXsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnRvZ2dsZVNPQVBFbnZlbG9wZSg8JT1XU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRV9SRVNQT05TRSU+LCc8JT1zb2FwUmVzcG9uc2VUd2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT1zb2FwUmVzcG9uc2VUd2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TT0FQX1JFU1BPTlNFX0VOVkVMT1BFIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxkaXYgaWQ9IjwlPXNvYXBSZXNwb25zZVRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBoZWlnaHQ9IjUwJSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxscGFkZGluZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgIAk8IS0tIHRoZSBvbmxvYWQgY2FsbCBpcyB0byBmaXggYnVnIDE0MDYwNyBpbiBidWd6aWxsYSAtLT4KLSAgICAgICAgPGlmcmFtZSBvbmxvYWQ9ImphdmFzY3JpcHQ6cmVxdWVzdEVudmVsb3BlRnJhbWUuZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCkiIGZyYW1lYm9yZGVyPTAgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQod3NkbFBlcnNwZWN0aXZlLmdldFNPQVBFbnZlbG9wZVhNTExpbmsoV1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEVfUkVTUE9OU0UpKSklPiIgd2lkdGg9Ijk1JSIgaGVpZ2h0PSIxMDAlIj48L2lmcmFtZT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHR3aXN0KCI8JT1zb2FwUmVzcG9uc2VUYWJsZUNvbnRhaW5lcklkJT4iLCI8JT1zb2FwUmVzcG9uc2VUd2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iKTsKLTwvc2NyaXB0PgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETEJpbmRpbmdEZXRhaWxzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETEJpbmRpbmdEZXRhaWxzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYmUzYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExCaW5kaW5nRGV0YWlsc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgTm9kZSBiaW5kaW5nTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NETF9CSU5ESU5HX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHJvd0NoZWNrYm94TmFtZSA9ICJyb3dDaGVja2JveE5hbWUiOwotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1VwZGF0ZVdTRExCaW5kaW5nQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIGhhbmRsZVN1Ym1pdCh0aGlzKSI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzZGwvaW1hZ2VzL29wZW5fd3NkbF9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0JJTkRJTkdfREVUQUlMUyIpOwotICAgV1NETEJpbmRpbmdFbGVtZW50IHdzZGxCaW5kaW5nRWxlbWVudCA9IChXU0RMQmluZGluZ0VsZW1lbnQpYmluZGluZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFZlY3RvciBvcGVyYXRpb25Ob2RlcyA9IGJpbmRpbmdOb2RlLmdldENoaWxkTm9kZXMoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPWJpbmRpbmdOb2RlLmdldE5vZGVJZCgpJT4iPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JJTkRJTkdfREVUQUlMU19ERVNDIix3c2RsUGVyc3BlY3RpdmUuZ2V0QmluZGluZ1R5cGVTdHJpbmcod3NkbEJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmdUeXBlKCkpKSU+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgU3RyaW5nIGRvY3VtZW50YXRpb24gPSB3c2RsQmluZGluZ0VsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9ET0NVTUVOVEFUSU9OKTsKLSAgIGlmIChkb2N1bWVudGF0aW9uLmxlbmd0aCgpID4gMCkKLSAgIHsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj48JT1kb2N1bWVudGF0aW9uJT48L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0xMD4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICB9Ci0KLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiT3BlcmF0aW9ucyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG9wZXJhdGlvbk5vZGVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvb3BlcmF0aW9uc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgaWYgKG9wZXJhdGlvbk5vZGVzLnNpemUoKSA+IDApCi0gICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHR3aXN0KCJPcGVyYXRpb25zIiwieE9wZXJhdGlvbnMiKTsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJFbmRwb2ludHMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyh3c2RsQmluZGluZ0VsZW1lbnQpOwotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvZW5kcG9pbnRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgaWYgKHdzZGxCaW5kaW5nRWxlbWVudC5nZXRFbmRQb2ludHMoKS5sZW5ndGggPiAwKQotICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHR3aXN0T3BlbigiRW5kcG9pbnRzIik7Ci08L3NjcmlwdD4KLTwlCi0gIH0KLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5N2M5N2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgTm9kZSB3c2RsTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSB3c2RsTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgV1NETERldGFpbHNUb29sIHdzZGxEZXRhaWxzVG9vbCA9IChXU0RMRGV0YWlsc1Rvb2wpY3VycmVudFRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NETF9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHN3aXRjaFdTRExEZXRhaWxzVmlldygpIHsKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1N3aXRjaFdTRExEZXRhaWxzVmlld3NBY3Rpb25KU1AuanNwIikpJT4iOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NETF9ERVRBSUxTIik7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodGl0bGVJbWFnZVBhdGgpKSU+IiBhbHQ9IiI+Ci0gICAgICA8c3Ryb25nPjwlPXRpdGxlJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCB3aWR0aD0iKiI+Jm5ic3A7PC90ZD4KLSAgICA8dGQgYWxpZ249InJpZ2h0IiBjbGFzcz0ibGFiZWxzIj4KLTwlCi0gICBpZiAod3NkbERldGFpbHNUb29sLmdldFZpZXdJZCgpID09IFdTRExEZXRhaWxzVG9vbC5TT1VSQ0VfVklFV19JRCkKLSAgIHsgICAgIAotJT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c3dpdGNoV1NETERldGFpbHNWaWV3KCkiIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NXSVRDSF9UT19GT1JNX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0ZPUk0iKSU+PC9hPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnN3aXRjaFdTRExEZXRhaWxzVmlldygpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TV0lUQ0hfVE9fU09VUkNFX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1NPVVJDRSIpJT48L2E+Ci08JQotICAgfQotJT4gICAKLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCBjb2xzcGFuPTM+PGltZyBoZWlnaHQ9MiB3aWR0aD0iMTAwJSIgYWxpZ249InRvcCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICBpZiAod3NkbERldGFpbHNUb29sLmdldFZpZXdJZCgpID09IFdTRExEZXRhaWxzVG9vbC5GT1JNX1ZJRVdfSUQpCi0gIHsKLSU+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL1dTRExEZXRhaWxzRm9ybVZpZXcuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgfQotICBlbHNlCi0gIHsKLSU+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGhlaWdodD0iMTAwJSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxscGFkZGluZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlmcmFtZSBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9mb3Jtcy9XU0RMRGV0YWlsc1NvdXJjZVZpZXcuanNwIikpJT4iIHdpZHRoPSI5NSUiIGhlaWdodD0iMTAwJSI+PC9pZnJhbWU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICB9Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzRm9ybVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzRm9ybVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTI1YzUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm1WaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9ERVRBSUxTX0RFU0MiKSU+PC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotTm9kZSB3c2RsTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpd3NkbE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLVN0cmluZyBkb2N1bWVudGF0aW9uID0gd3NkbEVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9ET0NVTUVOVEFUSU9OKTsKLWlmIChkb2N1bWVudGF0aW9uICE9IG51bGwgJiYgZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA+IDApCi17Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+PCU9ZG9jdW1lbnRhdGlvbiU+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotfQotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L3RoPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT13c2RsRWxlbWVudC5nZXRXc2RsVXJsKCklPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0xMD4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlICAgCi1zZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIlNlcnZpY2VzIik7Ci1WZWN0b3Igc2VydmljZU5vZGVzID0gd3NkbE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNlcnZpY2VOb2Rlcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL3NlcnZpY2VzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MTA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JSAgIAotVmVjdG9yIGJpbmRpbmdOb2RlcyA9IG5ldyBWZWN0b3IoKTsKLWZvciAoaW50IGk9MDtpPHNlcnZpY2VOb2Rlcy5zaXplKCk7aSsrKQotewotICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdChpKTsKLSAgVmVjdG9yIHNlcnZpY2VCaW5kaW5nTm9kZXMgPSBzZXJ2aWNlTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gIGZvciAoaW50IGo9MDtqPHNlcnZpY2VCaW5kaW5nTm9kZXMuc2l6ZSgpO2orKykKLSAgewotICAgIE5vZGUgc2VydmljZUJpbmRpbmdOb2RlID0gKE5vZGUpc2VydmljZUJpbmRpbmdOb2Rlcy5lbGVtZW50QXQoaik7Ci0gICAgYmluZGluZ05vZGVzLmFkZEVsZW1lbnQoc2VydmljZUJpbmRpbmdOb2RlKTsKLSAgfQotfQotc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLXNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJCaW5kaW5ncyIpOwotc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGJpbmRpbmdOb2Rlcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL2JpbmRpbmdzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLWlmIChzZXJ2aWNlTm9kZXMuc2l6ZSgpID4gMCkKLXsKLSU+Ci0gIHR3aXN0KCJTZXJ2aWNlcyIsInhTZXJ2aWNlcyIpOwotPCUKLX0KLWlmIChiaW5kaW5nTm9kZXMuc2l6ZSgpID4gMCkKLXsKLSU+Ci0gIHR3aXN0KCJCaW5kaW5ncyIsInhCaW5kaW5ncyIpOwotPCUKLX0KLSU+Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc1NvdXJjZVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzU291cmNlVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MGE0YjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzU291cmNlVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L3htbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwueG1sLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC5mYWN0b3J5LioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci1XU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxFbGVtZW50LmdldERlZmluaXRpb24oKTsKLVdTRExGYWN0b3J5IHdzZGxGYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotV1NETFdyaXRlciB3c2RsV3JpdGVyID0gd3NkbEZhY3RvcnkubmV3V1NETFdyaXRlcigpOwotU3RyaW5nV3JpdGVyIHN0cmluZ1dyaXRlciA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLXRyeQotewotICB3c2RsV3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBzdHJpbmdXcml0ZXIpOwotICAlPgotICA8JT1zdHJpbmdXcml0ZXIudG9TdHJpbmcoKSU+Ci0gIDwlCi19Ci1jYXRjaCAoV1NETEV4Y2VwdGlvbiB3c2RsZSkKLXsKLSAgJT4KLSAgPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0gIDwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZDlkNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtUHJvcGVydGllcyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgU3RyaW5nIHdzZGxVcmwgPSAoKFdTRExFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpKS5nZXRXc2RsVXJsKCk7Ci0gICBmb3JtUHJvcGVydGllcy5wdXQoImZvcm1BY3Rpb25MaW5rIiwid3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIik7Ci0gICBmb3JtUHJvcGVydGllcy5wdXQoIndzZGxVUkwiLHdzZGxVcmwpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0ltcG9ydFdTRExBbmRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5M2Q4MGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbkxpbmsiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotZm9ybUFjdGlvbkxpbmsuYXBwZW5kKCJ3c2RsL2FjdGlvbnMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwIik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExTZXJ2aWNlRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExTZXJ2aWNlRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmY0YmQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMU2VydmljZURldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIE5vZGUgc2VydmljZU5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1dTRExfU0VSVklDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NkbC9pbWFnZXMvb3Blbl93c2RsX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTRExfU0VSVklDRV9ERVRBSUxTIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRV9ERVRBSUxTX0RFU0MiKSU+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgV1NETFNlcnZpY2VFbGVtZW50IHdzZGxTZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpc2VydmljZU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFN0cmluZyBkb2N1bWVudGF0aW9uID0gd3NkbFNlcnZpY2VFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfRE9DVU1FTlRBVElPTik7Ci0gICBpZiAoZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA+IDApCi0gICB7Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+PCU9ZG9jdW1lbnRhdGlvbiU+PC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MTA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgfQotICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IHNlcnZpY2VOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiQmluZGluZ3MiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhiaW5kaW5nTm9kZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9iaW5kaW5nc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLTwlCi0gICBpZiAoYmluZGluZ05vZGVzLnNpemUoKSA+IDApCi0gICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHR3aXN0KCJCaW5kaW5ncyIsInhCaW5kaW5ncyIpOwotPC9zY3JpcHQ+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9iaW5kaW5nc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvYmluZGluZ3NfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODZlZTYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9iaW5kaW5nc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JJTkRJTkdTIiklPjwvc3Ryb25nPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjIwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjIwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQklORElOR19UWVBFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ET0NVTUVOVEFUSU9OIiklPjwvdGg+Ci0gICAgPC90cj4KLTwlCi0gICBWZWN0b3IgYmluZGluZ05vZGVzID0gKFZlY3RvcilzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIGZvciAoaW50IGk9MDtpPGJpbmRpbmdOb2Rlcy5zaXplKCk7aSsrKQotICAgewotICAgICBOb2RlIGJpbmRpbmdOb2RlID0gKE5vZGUpYmluZGluZ05vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgV1NETEJpbmRpbmdFbGVtZW50IHdzZGxCaW5kaW5nRWxlbWVudCA9IChXU0RMQmluZGluZ0VsZW1lbnQpYmluZGluZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgQmluZGluZyBiaW5kaW5nID0gd3NkbEJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmcoKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhiaW5kaW5nTm9kZS5nZXROb2RlSWQoKSxmYWxzZSkpKSU+Ij48JT1iaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCklPjwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRCaW5kaW5nVHlwZVN0cmluZyh3c2RsQmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZ1R5cGUoKSklPjwvdGQ+Ci08JQotICAgICBXU0RMU2VydmljZUVsZW1lbnQgd3NkbFNlcnZpY2VFbGVtZW50ID0gKFdTRExTZXJ2aWNlRWxlbWVudCl3c2RsQmluZGluZ0VsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxTZXJ2aWNlRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgICBpZiAoZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA8IDEpCi0gICAgICAgZG9jdW1lbnRhdGlvbiA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsgICAgIAotJT4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9ZG9jdW1lbnRhdGlvbiU+PC90ZD4KLSAgICA8L3RyPgotPCUKLSAgIH0KLSU+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9lbmRwb2ludF90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvZW5kcG9pbnRfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2RkMmUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9lbmRwb2ludF90YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGFkZEVuZHBvaW50KHRhYmxlQ29udGFpbmVySUQsIGlkLCBuYW1lLCB2YWx1ZSwgaXNSZW1vdmFibGUpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgaWYgKCFpc1JlbW92YWJsZSkKLSAgICB7Ci0gICAgICByb3dDaGVja2JveC5kaXNhYmxlZCA9IHRydWU7Ci0gICAgfQotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGVuZFBvaW50OwotICAgIGlmIChpc1JlbW92YWJsZSkKLSAgICB7Ci0gICAgICBlbmRQb2ludCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBlbmRQb2ludC50eXBlID0gInRleHQiOwotICAgICAgZW5kUG9pbnQuaWQgPSBpZDsKLSAgICAgIGVuZFBvaW50Lm5hbWUgPSBuYW1lOwotICAgICAgaWYgKHZhbHVlICE9IG51bGwpCi0gICAgICAgIGVuZFBvaW50LnZhbHVlID0gdmFsdWU7Ci0gICAgICBlbmRQb2ludC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBlbmRQb2ludCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZhbHVlKTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGVuZFBvaW50KTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVFbmRwb2ludENoZWNrQWxsQ2xpY2sodGFibGVDb250YWluZXJJZCxjaGVja0FsbENoZWNrYm94KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94Q2VsbCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikuaXRlbSgwKTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHJvd0NoZWNrYm94Q2VsbC5jaGlsZE5vZGVzWzBdOwotICAgICAgaWYgKCFyb3dDaGVja2JveC5kaXNhYmxlZCkKLSAgICAgIHsKLSAgICAgICAgcm93Q2hlY2tib3guY2hlY2tlZCA9IGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZDsKLSAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInJvd2NvbG9yIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBoaWdobGlnaHRSb3codGFibGUucm93c1tpXSwidGFibGVjZWxscyIpOwotICAgICAgfQotICAgIH0KLSAgfQotPC9zY3JpcHQ+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJRCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJRCk7ICAgCi0gICBXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgU3RyaW5nW10gZW5kcG9pbnRzID0gYmluZGluZ0VsZW1lbnQuZ2V0RW5kUG9pbnRzKCk7Ci0gICBTdHJpbmcgYWRkcmVzc0xvY2F0aW9uID0gKChXU0RMU2VydmljZUVsZW1lbnQpYmluZGluZ0VsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpKS5nZXRBZGRyZXNzTG9jYXRpb24oYmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZygpKTsgICAKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VORF9QT0lOVFMiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGRFbmRwb2ludCgnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4nLCAnPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPicsICc8JT1hZGRyZXNzTG9jYXRpb24lPicsIHRydWUpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlRW5kcG9pbnRDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRU5EX1BPSU5UUyIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgYm9vbGVhbiBpc0RlZmF1bHRBZGRlZCA9IGZhbHNlOwotICBmb3IgKGludCBpID0gMDsgaSA8IGVuZHBvaW50cy5sZW5ndGg7IGkrKykKLSAgewotICAgIGlmIChlbmRwb2ludHNbaV0uZXF1YWxzKGFkZHJlc3NMb2NhdGlvbikgJiYgIWlzRGVmYXVsdEFkZGVkKQotICAgIHsKLSU+Ci0gICAgYWRkRW5kcG9pbnQoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1XU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCU+JywgIiIsICc8JT1lbmRwb2ludHNbaV0lPicsIGZhbHNlKTsKLSAgICAKLTwlCi0gICAgICBpc0RlZmF1bHRBZGRlZCA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0lPgotICAgIGFkZEVuZHBvaW50KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPicsICc8JT1XU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCU+JywgJzwlPWVuZHBvaW50c1tpXSU+JywgdHJ1ZSk7Ci08JQotICAgIH0KLSAgfQotJT4KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL29wZXJhdGlvbnNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL29wZXJhdGlvbnNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWU4MjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9vcGVyYXRpb25zX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7ICAgCi0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09QRVJBVElPTlMiKSU+PC9zdHJvbmc+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgYWx0PSIiIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMjAlIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ET0NVTUVOVEFUSU9OIiklPjwvdGg+Ci0gICAgPC90cj4KLTwlCi0gICBWZWN0b3Igb3BlcmF0aW9uTm9kZXMgPSAoVmVjdG9yKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgZm9yIChpbnQgaT0wO2k8b3BlcmF0aW9uTm9kZXMuc2l6ZSgpO2krKykKLSAgIHsKLSAgICAgTm9kZSBvcGVyYXRpb25Ob2RlID0gKE5vZGUpb3BlcmF0aW9uTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCB3c2RsT3BlcmF0aW9uRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyYXRpb25Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsob3BlcmF0aW9uTm9kZS5nZXROb2RlSWQoKSxmYWxzZSkpKSU+Ij48JT13c2RsT3BlcmF0aW9uRWxlbWVudC5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCklPjwvYT48L3RkPgotPCUgICAgIAotICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxPcGVyYXRpb25FbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfRE9DVU1FTlRBVElPTik7Ci0gICAgIGlmIChkb2N1bWVudGF0aW9uLmxlbmd0aCgpIDwgMSkKLSAgICAgICBkb2N1bWVudGF0aW9uID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJUQUJMRV9CTEFOS19QTEFDRUhPTERFUiIpOwotJT4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9ZG9jdW1lbnRhdGlvbiU+PC90ZD4KLSAgICA8L3RyPgotPCUgICAKLSAgIH0gICAKLSU+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9zZXJ2aWNlc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvc2VydmljZXNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjM1OWM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9zZXJ2aWNlc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOyAgIAotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFUyIpJT48L3N0cm9uZz48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIyMCUiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RPQ1VNRU5UQVRJT04iKSU+PC90aD4KLSAgICA8L3RyPgotPCUKLSAgIFZlY3RvciBzZXJ2aWNlTm9kZXMgPSAoVmVjdG9yKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgZm9yIChpbnQgaT0wO2k8c2VydmljZU5vZGVzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIE5vZGUgc2VydmljZU5vZGUgPSAoTm9kZSlzZXJ2aWNlTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICBXU0RMU2VydmljZUVsZW1lbnQgd3NkbFNlcnZpY2VFbGVtZW50ID0gKFdTRExTZXJ2aWNlRWxlbWVudClzZXJ2aWNlTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlcnZpY2VOb2RlLmdldE5vZGVJZCgpLGZhbHNlKSkpJT4iPjwlPXdzZGxTZXJ2aWNlRWxlbWVudC5nZXRTZXJ2aWNlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSU+PC9hPjwvdGQ+Ci08JSAgICAgCi0gICAgIFN0cmluZyBkb2N1bWVudGF0aW9uID0gd3NkbFNlcnZpY2VFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfRE9DVU1FTlRBVElPTik7Ci0gICAgIGlmIChkb2N1bWVudGF0aW9uLmxlbmd0aCgpIDwgMSkKLSAgICAgICBkb2N1bWVudGF0aW9uID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJUQUJMRV9CTEFOS19QTEFDRUhPTERFUiIpOwotJT4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9ZG9jdW1lbnRhdGlvbiU+PC90ZD4KLSAgICA8L3RyPgotPCUgICAKLSAgIH0gICAKLSU+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50Ly5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheUZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5Rml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNjMjM1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5Rml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JU09BUEVuY0FycmF5RnJhZ21lbnQgZnJhZyA9IChJU09BUEVuY0FycmF5RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxRml4V0ZyYWdtZW50SlNQLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZjJlNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JU09BUEVuY0FycmF5RnJhZ21lbnQgZnJhZyA9IChJU09BUEVuY0FycmF5RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEQmFzZSA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZUJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJREJhc2UpLnRvU3RyaW5nKCk7Ci1TdHJpbmdbXSBncm91cElEcyA9IGZyYWcuZ2V0R3JvdXBJRHMoKTsKLWZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4nLCc8JT1pICsgdHdpc3RJbWFnZU5hbWVCYXNlJT4nKSI+PGltZyBuYW1lPSI8JT1pICsgdHdpc3RJbWFnZU5hbWVCYXNlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgPCU9ZnJhZy5nZXROYW1lKCklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8c3BhbiBpZD0iPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4iPgotICA8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci08JQotICAgIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ21lbnRzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1tpXSk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGlsZEZyYWdtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdtZW50c1tqXS5nZXRJRCgpKTsKLSU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWdtZW50c1tqXS5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLTwlCi0gICAgfQotJT4KLSAgPC90YWJsZT4KLSAgPC9zcGFuPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJhbmdlV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAyYTY5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RHcm91cFNlcUZyYWdtZW50IGZyYWcgPSAoSVhTREdyb3VwU2VxRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgbmFtZUFuY2hvcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuTkFNRV9BTkNIT1JfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotJT4KLTxhIG5hbWU9IjwlPW5hbWVBbmNob3JJRCU+Ii8+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NPQVBfRU5DX0FSUkFZUyIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBTdHJpbmdbXSBncm91cElEcyA9IGZyYWcuZ2V0R3JvdXBJRHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgU3RyaW5nIGdyb3VwSUQ7Ci0gICAgaWYgKGkgPCBncm91cElEcy5sZW5ndGgpCi0gICAgICBncm91cElEID0gZ3JvdXBJRHNbaV07Ci0gICAgZWxzZQotICAgICAgZ3JvdXBJRCA9IGZyYWcuY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpOwotICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1ncm91cElEJT4iPgotICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgICAgICBmcmFnSUQuYXBwZW5kKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdLmdldElEKCkpOwotICAgICAgJT4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1ncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQSGVhZGVyV3JhcHBlcldGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEhlYWRlcldyYXBwZXJXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDkxOGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQSGVhZGVyV3JhcHBlcldGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLVNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQgd3JhcHBlckZyYWdtZW50ID0gKFNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSB3cmFwcGVyRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci1mcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci1mcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLQotU3RyaW5nIG11c3RVbmRlcnN0YW5kSUQgPSB3cmFwcGVyRnJhZ21lbnQuZ2V0TXVzdFVuZGVyc3RhbmRJRCgpOwotU3RyaW5nIGFjdG9ySUQgPSB3cmFwcGVyRnJhZ21lbnQuZ2V0QWN0b3JJRCgpOwotCi1TdHJpbmcgZmllbGRzZXRDbGFzcyA9ICBCcm93c2VyRGV0ZWN0LmlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcihyZXF1ZXN0KSA/ICIiIDogImhlYWRlcmZpZWxkc2V0IjsKLSU+Ci08dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iZml4ZnJhZ3RhYmxlIj4KLSAgPHRyPgotICAgIDx0ZD4KLQkgIDxmaWVsZHNldCBjbGFzcz0iPCU9ZmllbGRzZXRDbGFzcyU+Ij4KLQkJPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4JICAgICAgCSAgCi0JCTx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJmaXhmcmFndGFibGUiPgotCQkgIDx0cj4KLQkJICAgIDx0ZCBoZWlnaHQ9IjMiPjwhLS0gc3BhY2VyIC0tPjwvdGQ+Ci0JCSAgPC90cj4KLQkJICA8dHI+Ci0JCSAgICA8dGQ+Ci0JCSAgICAgIDwlIGlmICh3cmFwcGVyRnJhZ21lbnQuaXNNdXN0VW5kZXJzdGFuZCgpKSB7ICU+ICAgIAkKLQkJICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSI8JT1tdXN0VW5kZXJzdGFuZElEJT4iIG5hbWU9IjwlPW11c3RVbmRlcnN0YW5kSUQlPiIgY2hlY2tlZC8+Ci0JCSAgICAgIDwlIH0gZWxzZSB7ICU+Ci0JCSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iPCU9bXVzdFVuZGVyc3RhbmRJRCU+IiBuYW1lPSI8JT1tdXN0VW5kZXJzdGFuZElEJT4iLz4KLQkJICAgICAgPCUgfSAlPiAgICAgIAkKLQkJICAgIDwvdGQ+Ci0JCSAgICA8dGQgY2xhc3M9ImxhYmVsIj4KLQkJICAgICAgPGxhYmVsIGZvcj0iPCU9bXVzdFVuZGVyc3RhbmRJRCU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NVVNUVU5ERVJTVEFORCIpJT48L2xhYmVsPgotCQkgICAgPC90ZD4KLQkJICAgIDx0ZD58PC90ZD4KLQkJICAgIDx0ZCBjbGFzcz0ibGFiZWwiPgotCQkgICAgICA8bGFiZWwgZm9yPSI8JT1hY3RvcklEJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVE9SIiklPjwvbGFiZWw+Ci0JCSAgICA8L3RkPgotCQkgICAgPHRkPgotCQkgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNXB4Ij4KLSAgICAgIAkJICAgIDwlIGlmICghd3JhcHBlckZyYWdtZW50LnZhbGlkYXRlQWN0b3IoKSkgeyAlPgotICAgICAgCQkgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICAgICAgICAgICAgPCUgfSAlPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAJCTwvdGQ+ICAgIAkKLQkJICAgIDx0ZCB3aWR0aD0iMTAwJSI+ICAgIAkKLQkJICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSI8JT1hY3RvcklEJT4iIG5hbWU9IjwlPWFjdG9ySUQlPiIgdmFsdWU9IjwlPXdyYXBwZXJGcmFnbWVudC5nZXRBY3RvcigpJT4iIGNsYXNzPSJ0YWJsZXRleHRlbnRlciIvPgotCQkgICAgPC90ZD4KLQkJICA8L3RyPgotCQkgIDx0cj4KLQkJICAgIDx0ZCBoZWlnaHQ9IjMiPjwhLS0gc3BhY2VyIC0tPjwvdGQ+Ci0JCSAgPC90cj4gICAgCi0JCTwvdGFibGU+Ci0JICA8L2ZpZWxkc2V0PgotCTwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLQk8dGQgaGVpZ2h0PSI1Ij48IS0tIHNwYWNlciAtLT48L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4Rml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4Rml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg3ZDRiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleEZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MTYgICAxODU1OTYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBtaXNpbnRlcnByZXRzIHJlc3BvbnNlIG1lc3NhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYXR0cmlidXRlIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRENvbXBsZXhGcmFnbWVudCBmcmFnID0gKElYU0RDb21wbGV4RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIAotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDwlCi0gIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgICBTdHJpbmcgY2hpbGRGcmFnSUQ7Ci0gICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICAgIGNoaWxkRnJhZ0lEID0gY2hpbGRGcmFnLmdldElEKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY2hpbGRGcmFnSUQgPSBmcmFnLmNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICAgICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gICAgfQotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSAgICBhdHRyaWJ1dGUuZGVsZXRlKDAsIGF0dHJpYnV0ZS5sZW5ndGgoKSk7Ci0gICAgYXR0cmlidXRlLmFwcGVuZCgiZmFsc2UiKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1jaGlsZEZyYWdJRCU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWcuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZnJhZy5nZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGF0dHJpYnV0ZUZyYWdtZW50OwotICBmb3IoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaisrKXsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tqXTsKLSAgICAKLSAgICBpZihhdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpLnN0YXJ0c1dpdGgoY2hpbGRGcmFnSUQpKXsKLSAgICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgIGZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotICAgICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgICAgYXR0cmlidXRlLmFwcGVuZCgidHJ1ZSIpOwotICAgICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1hdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPCUKLSAgICB9ICAKLSAgfSAgCi19Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWI1NDBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTE2ICAgMTg1NTk2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgbWlzaW50ZXJwcmV0cyByZXNwb25zZSBtZXNzYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhdHRyaWJ1dGUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRENvbXBsZXhGcmFnbWVudCBmcmFnID0gKElYU0RDb21wbGV4RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEQmFzZSA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZUJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJREJhc2UpLnRvU3RyaW5nKCk7Ci1JWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGg7IGkrKykgewotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnc1tpXS5nZXRJRCgpKTsKLSU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4nLCc8JT1pICsgdHdpc3RJbWFnZU5hbWVCYXNlJT4nKSI+PGltZyBuYW1lPSI8JT1pICsgdHdpc3RJbWFnZU5hbWVCYXNlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgPCU9ZnJhZy5nZXROYW1lKCklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8c3BhbiBpZD0iPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4iPgotICA8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gICAgPHRyPgotICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWdzW2ldLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwlCi0KLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZnJhZy5nZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGF0dHJpYnV0ZUZyYWdtZW50OwotICBmb3IoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaisrKXsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tqXTsKLSAgICAKLSAgICBpZiAoYXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKS5zdGFydHNXaXRoKGNoaWxkRnJhZ3NbaV0uZ2V0SUQoKSkpIHsKLSAgICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgIGZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotICAgICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgICAgYXR0cmlidXRlLmFwcGVuZCgidHJ1ZSIpOwotICAgICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1hdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8JQotICAgIH0gIAotICB9Ci19ICAKLSAgJT4KLSAgCi0gIDwvdGFibGU+Ci0gIDwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NTk4ZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMjAxICAgMTk3ODY1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYXR0cmlidXRlIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRENvbXBsZXhGcmFnbWVudCBmcmFnID0gKElYU0RDb21wbGV4RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgbmFtZUFuY2hvcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuTkFNRV9BTkNIT1JfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotJT4KLTxhIG5hbWU9IjwlPW5hbWVBbmNob3JJRCU+Ii8+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjcmVhdGVJbnN0YW5jZSgnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4sICc8JT1mcmFnSUQlPicsICc8JT1uYW1lQW5jaG9ySUQlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1pbk9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ09OVEVOVCIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZEZyYWdzLmxlbmd0aCB8fCBpIDwgeHNkQ29uZmlnLmdldE1pbk9jY3VycygpOyBpKyspIHsKLSAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnOwotICAgIFN0cmluZyBjaGlsZEZyYWdJRDsKLSAgICBpZiAoaSA8IGNoaWxkRnJhZ3MubGVuZ3RoKSB7Ci0gICAgICBjaGlsZEZyYWcgPSBjaGlsZEZyYWdzW2ldOwotICAgICAgY2hpbGRGcmFnSUQgPSBjaGlsZEZyYWcuZ2V0SUQoKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBjaGlsZEZyYWdJRCA9IGZyYWcuY3JlYXRlQ29tcGxleEluc3RhbmNlKCk7Ci0gICAgICBjaGlsZEZyYWcgPSBmcmFnLmdldEZyYWdtZW50KGNoaWxkRnJhZ0lEKTsKLSAgICB9Ci0gICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnSUQpOwotICAlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD4KLSAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlUm93Q2hlY2tib3hDbGljaygpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWNoaWxkRnJhZ0lEJT4iPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNoaWxkRnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotICA8JQotICAKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZnJhZy5nZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGF0dHJpYnV0ZUZyYWdtZW50OwotICBmb3IoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaisrKXsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tqXTsKLSAgICAKLSAgICBpZihhdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpLnN0YXJ0c1dpdGgoY2hpbGRGcmFnSUQpKXsKLSAgICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgIGZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotICAgICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgICAgYXR0cmlidXRlLmFwcGVuZCgidHJ1ZSIpOwotICAgICAgICU+Ci0gICAgICAKLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiB3aWR0aD0xMD4KLSAgICAgICAgICAKLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCklPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC90ZD4KLSAgICAgPC90cj4KLSAgICAgPCUKLSAgICAKLSAgICAKLSAgICB9ICAKLSAgfQotfQotJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1NjIwYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLTwlCi0vKioKLSogPGNvcHlyaWdodD4KLSoKLSogTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9wZXJ0eSBvZiBJQk0KLSogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUKLSogcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuCi0qCi0qIDwvY29weXJpZ2h0PgotKgotKiBGaWxlIHBsdWdpbnMvY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleEZpeFdGcmFnbWVudEpTUC5qc3AsIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yIDIKLSogVmVyc2lvbiAxLjIgMDUvMDUvMjYgMTY6MTg6MjMKLSovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhdHRyaWJ1dGUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEQ29tcGxleEZyYWdtZW50IGZyYWcgPSAoSVhTRENvbXBsZXhGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgCi0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAlPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPCUKLSAgCi0gIAotICAKLSAgICAKLSAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnOwotICAgIFN0cmluZyBjaGlsZEZyYWdJRDsKLSAgICBpZiAoaSA8IGNoaWxkRnJhZ3MubGVuZ3RoKSB7Ci0gICAgICBjaGlsZEZyYWcgPSBjaGlsZEZyYWdzW2ldOwotICAgICAgY2hpbGRGcmFnSUQgPSBjaGlsZEZyYWcuZ2V0SUQoKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBjaGlsZEZyYWdJRCA9IGZyYWcuY3JlYXRlQ29tcGxleEluc3RhbmNlKCk7Ci0gICAgICBjaGlsZEZyYWcgPSBmcmFnLmdldEZyYWdtZW50KGNoaWxkRnJhZ0lEKTsKLSAgICB9Ci0gICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnSUQpOwotICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICBhdHRyaWJ1dGUuYXBwZW5kKCJmYWxzZSIpOwotICAlPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTE2PgotICAgICAgPGltZyB3aWR0aD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWNoaWxkRnJhZ0lEJT4iPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNoaWxkRnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotICA8JQotICAKLSAgCi0gCi0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGZyYWcuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnbWVudDsKLSAgZm9yKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGorKyl7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbal07Ci0gICAgaWYoYXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKS5zdGFydHNXaXRoKGNoaWxkRnJhZ0lEKSl7Ci0gICAgSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICBhdHRyaWJ1dGUuZGVsZXRlKDAsIGF0dHJpYnV0ZS5sZW5ndGgoKSk7Ci0gICAgYXR0cmlidXRlLmFwcGVuZCgidHJ1ZSIpOwotICAgICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1hdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgICA8L3RyPgotICAgIAotICAgIDwlCi0gICAgfQotICB9ICAgIAotfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2M2MDIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08JQotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSRnJhZ21lbnRKU1AuanNwLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiAxCi0qIFZlcnNpb24gMS4xIDAzLzAyLzI4IDE1OjMzOjU3Ci0qLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEQ29tcGxleEZyYWdtZW50IGZyYWcgPSAoSVhTRENvbXBsZXhGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySURCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lQmFzZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEQmFzZSkudG9TdHJpbmcoKTsKLUlYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZEZyYWdzLmxlbmd0aDsgaSsrKSB7Ci0gIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdzW2ldLmdldElEKCkpOwotJT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPicsJzwlPWkgKyB0d2lzdEltYWdlTmFtZUJhc2UlPicpIj48aW1nIG5hbWU9IjwlPWkgKyB0d2lzdEltYWdlTmFtZUJhc2UlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICA8JT1mcmFnLmdldE5hbWUoKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDxzcGFuIGlkPSI8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPiI+Ci0gIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgICA8dHI+Ci0gICAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNoaWxkRnJhZ3NbaV0uZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPCUKLQotICBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBmcmFnLmdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICBJWFNEQXR0cmlidXRlRnJhZ21lbnQgYXR0cmlidXRlRnJhZ21lbnQ7Ci0gIGZvcihpbnQgaiA9IDA7IGogPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBqKyspewotICAgIGF0dHJpYnV0ZUZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnRzW2pdOwotICAgIAotICAgIGlmKGF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCkuc3RhcnRzV2l0aChjaGlsZEZyYWdzW2ldLmdldElEKCkpKXsKLSAgICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgIGZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotICAgICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgICAgYXR0cmlidXRlLmFwcGVuZCgidHJ1ZSIpOwotICAgIAotICAgICAgCi0gICAgICAlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICAgICAgPGltZyB3aWR0aD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+IiBhbHQ9IiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCklPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC90ZD4KLSAgICAgPC90cj4KLSAgICA8JQotICAgIAotICAgIAotICAgIH0gIAotICB9Ci19Ci0gICU+Ci0gIAotICA8L3RhYmxlPgotICA8L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NDJmMTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLTwlCi0vKioKLSogPGNvcHlyaWdodD4KLSoKLSogTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9wZXJ0eSBvZiBJQk0KLSogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUKLSogcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuCi0qCi0qIDwvY29weXJpZ2h0PgotKgotKiBGaWxlIHBsdWdpbnMvY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJhbmdlV0ZyYWdtZW50SlNQLmpzcCwgd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIgMgotKiBWZXJzaW9uIDEuMiAwNS8wNS8yNiAxNjoxODoyNAotKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3NBdHRyaWJ1dGUoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NPTlRFTlQiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAKLSAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgICBTdHJpbmcgY2hpbGRGcmFnSUQ7Ci0gICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICAgIGNoaWxkRnJhZ0lEID0gY2hpbGRGcmFnLmdldElEKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY2hpbGRGcmFnSUQgPSBmcmFnLmNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICAgICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gICAgfQotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSAgJT4KLSAgCi0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Y2hpbGRGcmFnSUQlPiI+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIAotICA8JQotICBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBmcmFnLmdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICBJWFNEQXR0cmlidXRlRnJhZ21lbnQgYXR0cmlidXRlRnJhZ21lbnQ7Ci0gIGZvcihpbnQgaiA9IDA7IGogPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBqKyspewotICAgIGF0dHJpYnV0ZUZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnRzW2pdOwotICAgIAotICAgIGlmKGF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCkuc3RhcnRzV2l0aChjaGlsZEZyYWdJRCkpewotICAgICAgSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0gICAgICBhdHRyaWJ1dGUuZGVsZXRlKDAsIGF0dHJpYnV0ZS5sZW5ndGgoKSk7Ci0gICAgICBhdHRyaWJ1dGUuYXBwZW5kKCJ0cnVlIik7Ci0gICAgICAgJT4KLSAgICAgIAotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIHdpZHRoPTEwPgotICAgICAgICAgIAotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9YXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKSU+Ij4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZGVsZWdhdGlvbkZyYWdtZW50LmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3RkPgotICAgICA8L3RyPgotICAgICA8JQotICAgIAotICAgIAotICAgIH0gIAotICB9Ci19Ci0lPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E4YWQ4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uTm9kZUxpc3QiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0ic2Vzc2lvbklEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUhCi1wcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MTlNfTEFORyA9ICJ4bWw6bGFuZyI7Ci1wcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9YTUxOU19MQU5HID0gImVuLVVTIjsKLSU+Ci0KLTwlCi1IdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklELnRvU3RyaW5nKCkpOwotQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRENvbXBvbmVudCB4c2RDb21wb25lbnQgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci1YU0RBbm5vdGF0aW9uIGFubm90YXRpb24gPSBudWxsOwotRUxpc3QgYXBwSW5mb0xpc3QgPSBudWxsOwotRUxpc3QgZG9jTGlzdCA9IG51bGw7Ci1pZiAoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gIGFubm90YXRpb24gPSAoKFhTRFR5cGVEZWZpbml0aW9uKXhzZENvbXBvbmVudCkuZ2V0QW5ub3RhdGlvbigpOwotZWxzZSBpZiAoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICBhbm5vdGF0aW9uID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24peHNkQ29tcG9uZW50KS5nZXRBbm5vdGF0aW9uKCk7Ci1pZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7Ci0gIGFwcEluZm9MaXN0ID0gYW5ub3RhdGlvbi5nZXRBcHBsaWNhdGlvbkluZm9ybWF0aW9uKCk7Ci0gIGRvY0xpc3QgPSBhbm5vdGF0aW9uLmdldFVzZXJJbmZvcm1hdGlvbigpOwotfQotU3RyaW5nIGFwcEluZm9Db250YWluZXJJRCA9ICI6OmFwcEluZm8iOwotU3RyaW5nIHhhcHBJbmZvQ29udGFpbmVySUQgPSAieDo6YXBwSW5mbyI7Ci1TdHJpbmcgZG9jdW1lbnRhdGlvbkNvbnRhaW5lcklEID0gIjo6ZG9jdW1lbnRhdGlvbiI7Ci1TdHJpbmcgeGRvY3VtZW50YXRpb25Db250YWluZXJJRCA9ICJ4Ojpkb2N1bWVudGF0aW9uIjsKLSU+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLHR3aXN0SW1hZ2VOYW1lKQotICB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHR3aXN0SW1hZ2UgPSBkb2N1bWVudC5pbWFnZXNbdHdpc3RJbWFnZU5hbWVdOwotICAgIGlmICh0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICB7Ci0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICB0d2lzdEltYWdlLnNyYyA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiI7Ci0gICAgICB0d2lzdEltYWdlLmFsdCA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIikpJT4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAgIHR3aXN0SW1hZ2Uuc3JjID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IjsKLSAgICAgIHR3aXN0SW1hZ2UuYWx0ID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSklPiI7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdHdpc3RDbG9zZSh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpLnN0eWxlLmRpc3BsYXkgPT0gIiIpCi0gICAgICB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLCJ4Iit0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotPC9zY3JpcHQ+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9YXBwSW5mb0NvbnRhaW5lcklEJT4nLCc8JT14YXBwSW5mb0NvbnRhaW5lcklEJT4nKSI+PGltZyBuYW1lPSI8JT14YXBwSW5mb0NvbnRhaW5lcklEJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICA8c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1hTRF9BUFBMSUNBVElPTl9JTkZPUk1BVElPTiIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT1hcHBJbmZvQ29udGFpbmVySUQlPiI+Ci08dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MQU5HVUFHRSIpJT48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9YU0RfQVBQTElDQVRJT05fSU5GT1JNQVRJT04iKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgYm9vbGVhbiBvcGVuQXBwSW5mb1RhYmxlID0gZmFsc2U7Ci0gIGlmIChhcHBJbmZvTGlzdCAhPSBudWxsKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcHBJbmZvTGlzdC5zaXplKCk7IGkrKykgewotICAgICAgRWxlbWVudCBlID0gKEVsZW1lbnQpYXBwSW5mb0xpc3QuZ2V0KGkpOwotICAgICAgU3RyaW5nIGFwcEluZm9MYW5nID0gZS5nZXRBdHRyaWJ1dGUoWE1MTlNfTEFORyk7Ci0gICAgICBTdHJpbmcgYXBwSW5mb1RleHQgPSBudWxsOwotICAgICAgTm9kZUxpc3QgbmwgPSBlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmwuZ2V0TGVuZ3RoKCk7IGorKykgewotICAgICAgICBpZiAobmwuaXRlbShqKS5nZXROb2RlVHlwZSgpID09IG9yZy53M2MuZG9tLk5vZGUuVEVYVF9OT0RFKSB7Ci0gICAgICAgICAgYXBwSW5mb1RleHQgPSBubC5pdGVtKGopLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoYXBwSW5mb1RleHQgIT0gbnVsbCkKLSAgICAgIHsgCi0gICAgICAgIG9wZW5BcHBJbmZvVGFibGUgPSB0cnVlOwotICAgICAgICBpZiAoYXBwSW5mb1RleHQudHJpbSgpLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgICBhcHBJbmZvVGV4dCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9KChhcHBJbmZvTGFuZyAhPSBudWxsICYmIGFwcEluZm9MYW5nLmxlbmd0aCgpID4gMCkgPyBhcHBJbmZvTGFuZyA6IERFRkFVTFRfWE1MTlNfTEFORyklPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT1hcHBJbmZvVGV4dCU+PC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+Ci08JQotaWYgKCFvcGVuQXBwSW5mb1RhYmxlKSB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHR3aXN0Q2xvc2UoJzwlPWFwcEluZm9Db250YWluZXJJRCU+Jyk7Ci08L3NjcmlwdD4KLTwlCi19Ci0lPgotCi08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRvY3VtZW50YXRpb25Db250YWluZXJJRCU+JywnPCU9eGRvY3VtZW50YXRpb25Db250YWluZXJJRCU+JykiPjxpbWcgbmFtZT0iPCU9eGRvY3VtZW50YXRpb25Db250YWluZXJJRCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9YU0RfRE9DVU1FTlRBVElPTiIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT1kb2N1bWVudGF0aW9uQ29udGFpbmVySUQlPiI+Ci08dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MQU5HVUFHRSIpJT48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9YU0RfRE9DVU1FTlRBVElPTiIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBib29sZWFuIG9wZW5Eb2NUYWJsZSA9IGZhbHNlOwotICBpZiAoZG9jTGlzdCAhPSBudWxsKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkb2NMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICBFbGVtZW50IGUgPSAoRWxlbWVudClkb2NMaXN0LmdldChpKTsKLSAgICAgIFN0cmluZyBkb2NMYW5nID0gZS5nZXRBdHRyaWJ1dGUoWE1MTlNfTEFORyk7Ci0gICAgICBTdHJpbmcgZG9jVGV4dCA9IG51bGw7Ci0gICAgICBOb2RlTGlzdCBubCA9IGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBubC5nZXRMZW5ndGgoKTsgaisrKSB7Ci0gICAgICAgIGlmIChubC5pdGVtKGopLmdldE5vZGVUeXBlKCkgPT0gb3JnLnczYy5kb20uTm9kZS5URVhUX05PREUpIHsKLSAgICAgICAgICBkb2NUZXh0ID0gbmwuaXRlbShqKS5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfSAgICAgIAotICAgICAgaWYgKGRvY1RleHQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgb3BlbkRvY1RhYmxlID0gdHJ1ZTsKLSAgICAgICAgaWYgKGRvY1RleHQudHJpbSgpLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgICBkb2NUZXh0ID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJUQUJMRV9CTEFOS19QTEFDRUhPTERFUiIpOwotICAlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT0oKGRvY0xhbmcgIT0gbnVsbCAmJiBkb2NMYW5nLmxlbmd0aCgpID4gMCkgPyBkb2NMYW5nIDogREVGQVVMVF9YTUxOU19MQU5HKSU+PC90ZD4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRvY1RleHQlPjwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gICAgICB9Ci0gICAgfQotICB9Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgotPCUKLWlmICghb3BlbkRvY1RhYmxlKSB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHR3aXN0Q2xvc2UoJzwlPWRvY3VtZW50YXRpb25Db250YWluZXJJRCU+Jyk7Ci08L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzljOWYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnJwYy5OYW1lc3BhY2VDb25zdGFudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5IYXNodGFibGUiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotLy8gVE9ETzogUmVwbGFjZSAiU09BUC1FTlYiIGJ5IE5hbWVzcGFjZUNvbnN0YW50cy5OU1BSRUZJWF9TT0FQX0VOVkVMT1BFICg9InNvYXBlbnYiKQotc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KE5hbWVzcGFjZUNvbnN0YW50cy5OU1VSSV9TT0FQX0VOVkVMT1BFLCJTT0FQLUVOViIpOwotc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KE5hbWVzcGFjZUNvbnN0YW50cy5OU1VSSV9TQ0hFTUFfWFNJLE5hbWVzcGFjZUNvbnN0YW50cy5OU1BSRUZJWF9TQ0hFTUFfWFNJKTsKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU0NIRU1BX1hTRCxOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU0NIRU1BX1hTRCk7Ci1FbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBmcmFnLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyghb3BlckVsZW1lbnQuaXNVc2VMaXRlcmFsKCksIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKSk7Ci1TdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci1mb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gIGlmIChpbnN0YW5jZURvY3VtZW50c1tpXSA9PSBudWxsKQotICAgIGNvbnRpbnVlOwotICBzYi5hcHBlbmQoWE1MVXRpbHMuc2VyaWFsaXplKGluc3RhbmNlRG9jdW1lbnRzW2ldLCB0cnVlKSk7Ci0gIHNiLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotfQotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPHRleHRhcmVhIGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIGNsYXNzPSJ0ZXh0YXJlYWVudGVyIiByZWFkb25seT48JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHNiLnRvU3RyaW5nKCkpJT48L3RleHRhcmVhPgotPCUKLSAgICAgIC8qCi0gICAgICBTdHJpbmdCdWZmZXIgdXJsID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgdXJsLmFwcGVuZChyZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRYTUwuanNwPyIpKSk7Ci0gICAgICB1cmwuYXBwZW5kKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpLmFwcGVuZCgiPSIpLmFwcGVuZChmcmFnSUQpLmFwcGVuZCgiJiIpOwotICAgICAgdXJsLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoIj0iKS5hcHBlbmQobm9kZUlEKS5hcHBlbmQoIiYiKTsKLSAgICAgIHVybC5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCI9IikuYXBwZW5kKHNlc3Npb24uZ2V0SWQoKSk7Ci0gICAgICAqLwotJT4KLSAgICAgIDwhLS0KLSAgICAgIDxpZnJhbWUgc3JjPSIiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjE1MHB4Ij48L2lmcmFtZT4KLSAgICAgIC0tPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRYTUwuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRYTUwuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTA4OWYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50WE1MLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQveG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy54bWwuc2F4LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy54bWwuc2F4LmhlbHBlcnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnJwYy5OYW1lc3BhY2VDb25zdGFudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5wYXJzZXJzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci08JQotU3RyaW5nIGZyYWdJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpOwotU3RyaW5nIG5vZGVJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci1Db250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotLy8gVE9ETzogUmVwbGFjZSAiU09BUC1FTlYiIGJ5IE5hbWVzcGFjZUNvbnN0YW50cy5OU1BSRUZJWF9TT0FQX0VOVkVMT1BFICg9InNvYXBlbnYiKQotc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KE5hbWVzcGFjZUNvbnN0YW50cy5OU1VSSV9TT0FQX0VOVkVMT1BFLCJTT0FQLUVOViIpOwotc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KE5hbWVzcGFjZUNvbnN0YW50cy5OU1VSSV9TQ0hFTUFfWFNJLE5hbWVzcGFjZUNvbnN0YW50cy5OU1BSRUZJWF9TQ0hFTUFfWFNJKTsKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU0NIRU1BX1hTRCxOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU0NIRU1BX1hTRCk7Ci1FbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFswXTsKLVN0cmluZ0J1ZmZlciBzYiA9IG51bGw7Ci10cnkKLXsKLSAgaW5zdGFuY2VEb2N1bWVudHMgPSBmcmFnLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyghb3BlckVsZW1lbnQuaXNVc2VMaXRlcmFsKCksIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKSk7Ci0gIGlmIChpbnN0YW5jZURvY3VtZW50cy5sZW5ndGggPT0gMSkKLSAgewotICAgIGJ5dGVbXSBiID0gWE1MVXRpbHMuc2VyaWFsaXplKGluc3RhbmNlRG9jdW1lbnRzWzBdLCB0cnVlKS5nZXRCeXRlcyhIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiKTsKLSAgICBTQVhQYXJzZXJGYWN0b3J5IHNheEZhY3RvcnkgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgc2F4RmFjdG9yeS5zZXRWYWxpZGF0aW5nKHRydWUpOwotICAgIFNBWFBhcnNlciBzYXhQYXJzZXIgPSBzYXhGYWN0b3J5Lm5ld1NBWFBhcnNlcigpOwotICAgIHNheFBhcnNlci5wYXJzZShiYWlzLAotICAgICAgbmV3IERlZmF1bHRIYW5kbGVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICBiYWlzLmNsb3NlKCk7Ci0gICAgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKG5ldyBTdHJpbmcoYikpOwotICB9Ci19Ci1jYXRjaCAoVGhyb3dhYmxlIHQpCi17Ci19Ci1pZiAoc2IgPT0gbnVsbCkKLXsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZyYWcuZ2V0TmFtZSgpJT48L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PVVURi04Iik7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0gPT0gbnVsbCkKLSAgICAgIGNvbnRpbnVlOwotICAgIHNiLmFwcGVuZChIVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KFhNTFV0aWxzLnNlcmlhbGl6ZShpbnN0YW5jZURvY3VtZW50c1tpXSwgdHJ1ZSkpKTsKLSAgfQotJT4KLTwlPXNiLnRvU3RyaW5nKCklPgotPC9ib2R5PgotPC9odG1sPgotPCUKLX0KLWVsc2UKLXsKLSU+Ci08JT1zYi50b1N0cmluZygpJT4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTg1MjBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHBhcmFtID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZShmcmFnLmdldElEKCksIDApOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZD4KLSAgICAgIDwlCi0gICAgICBpZiAoIWZyYWcudmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSkgewotICAgICAgJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgIDwlCi0gICAgICB9Ci0gICAgICAlPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDx0ZXh0YXJlYSBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiBjbGFzcz0idGV4dGFyZWFlbnRlciI+PCU9KChwYXJhbSAhPSBudWxsKSA/IEhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QocGFyYW0pIDogIiIpJT48L3RleHRhcmVhPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25SRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25SRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDkzMWYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uUkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRERlbGVnYXRpb25GcmFnbWVudCB3cmFwcGVyRnJhZ21lbnQgPSAoSVhTRERlbGVnYXRpb25GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IHdyYXBwZXJGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IHdyYXBwZXJGcmFnbWVudC5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25XRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25XRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzQ2MDdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERGVsZWdhdGlvbkZyYWdtZW50IHdyYXBwZXJGcmFnbWVudCA9IChJWFNERGVsZWdhdGlvbkZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gd3JhcHBlckZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gd3JhcHBlckZyYWdtZW50LmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1mcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci1mcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZGVsZWdhdGlvbkZyYWdtZW50LmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnRSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnRSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmMyNjI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioKLSogPGNvcHlyaWdodD4KLSoKLSogTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9wZXJ0eSBvZiBJQk0KLSogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUKLSogcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuCi0qCi0qIDwvY29weXJpZ2h0PgotKgotKiBGaWxlIHBsdWdpbnMvY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGlvbldGcmFnbWVudEpTUC5qc3AsIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yLCAyMDAzMTIzMWEgMQotKiBWZXJzaW9uIDEuMSAwMy8wMi8yOCAxNTozNDowNAotKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBlbGVtZW50RnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBlbGVtZW50RnJhZ21lbnQuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLWZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLWZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotZWxlbWVudElELmRlbGV0ZSgwLCBlbGVtZW50SUQubGVuZ3RoKCkpOwotZWxlbWVudElELmFwcGVuZChlbGVtZW50RnJhZ21lbnQuZ2V0SUQoKSk7Ci0lPgotCi0gCi0KLTx0YWJsZSAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZGVsZWdhdGlvbkZyYWdtZW50LmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLSAKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnRXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnRXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTU2NDRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAlPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gZWxlbWVudEZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZWxlbWVudEZyYWdtZW50LmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1mcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci1mcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLWVsZW1lbnRJRC5kZWxldGUoMCwgZWxlbWVudElELmxlbmd0aCgpKTsKLWVsZW1lbnRJRC5hcHBlbmQoZWxlbWVudEZyYWdtZW50LmdldElEKCkpOwotJT4KLQotIAotCi08dGFibGUgIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotIAotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERW1wdHlSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVtcHR5UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEzY2VlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERW1wdHlSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVtcHR5V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YTQ5NDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVtcHR5V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1pbnQgbWluT2NjdXJzID0geHNkQ29uZmlnLmdldE1pbk9jY3VycygpOwotaW50IG1heE9jY3VycyA9IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsKLWlmIChtaW5PY2N1cnMgPT0gbWF4T2NjdXJzKSB7Ci0lPgotPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1tYXhPY2N1cnMlPiIvPgotPCUKLX0gZWxzZSB7Ci0gIFN0cmluZ1tdIHBhcmFtcyA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSk7Ci0lPgotICA8dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8bGFiZWwgZm9yPSI8JT1mcmFnLmdldElEKCklPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT0NDVVJBTkNFIiklPiZuYnNwOzxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgPCUKLSAgICAgIGlmIChtYXhPY2N1cnMgIT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEKSB7Ci0gICAgICAlPgotICAgICAgICA8c2VsZWN0IGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgaSA9IG1pbk9jY3VyczsgaSA8PSBtYXhPY2N1cnM7IGkrKykgewotICAgICAgICAlPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPWklPiIgPCUgaWYgKHBhcmFtcyAhPSBudWxsICYmIGkgPT0gcGFyYW1zLmxlbmd0aCkgeyAlPnNlbGVjdGVkPCUgfSAlPj48JT1pJT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwlCi0gICAgICB9IGVsc2UgewotICAgICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT0oKHBhcmFtcyAhPSBudWxsKSA/IFN0cmluZy52YWx1ZU9mKHBhcmFtcy5sZW5ndGgpIDogIiIpJT4iIGNsYXNzPSJ0YWJsZXRleHRlbnRlciI+Ci0gICAgICA8JQotICAgICAgICBpZiAoIWZyYWcudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKSkgewotICAgICAgICAlPgotICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cEFsbFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBBbGxXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTkwMjkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cEFsbFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBBbGxGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cEFsbEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1ib29sZWFuIGVuYWJsZUdyb3VwID0gKHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSA+IDAgfHwgZnJhZy5nZXRHcm91cElEcygpLmxlbmd0aCA+IDApOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBncm91cElEID0gZnJhZy5nZXRHcm91cEFsbEluc3RhbmNlKCk7Ci1TdHJpbmcgZ3JvdXBDaGVja2JveElEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuWFNEX0FMTF9HUk9VUF9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgZ3JvdXBNZW1iZXJSYWRpb0lEID0gKG5ldyBTdHJpbmdCdWZmZXIoZ3JvdXBDaGVja2JveElEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gaW5pdEdyb3VwQWxsKHRhYmxlQ29udGFpbmVySUQsIHR3aXN0SW1hZ2VOYW1lLCBmcmFnSUQsIGdyb3VwSUQsIGdyb3VwQ2hlY2tib3hJRCwgZW5hYmxlKSB7Ci0gICAgdmFyIGNoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZ3JvdXBDaGVja2JveElEKTsKLSAgICBjaGVja2JveC5jaGVja2VkID0gZW5hYmxlOwotICAgIGVuYWJsZUdyb3VwQWxsKHRhYmxlQ29udGFpbmVySUQsIHR3aXN0SW1hZ2VOYW1lLCBmcmFnSUQsIGdyb3VwSUQsIGNoZWNrYm94KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGVuYWJsZUdyb3VwQWxsKHRhYmxlQ29udGFpbmVySUQsIHR3aXN0SW1hZ2VOYW1lLCBmcmFnSUQsIGdyb3VwSUQsIGNoZWNrYm94KSB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIGNoZWNrYm94VGFibGUgPSBjaGVja2JveC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZTsKLSAgICBpZiAoY2hlY2tib3guY2hlY2tlZCkgewotICAgICAgaWYgKHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKQotICAgICAgICB0d2lzdCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSk7Ci0gICAgICBjaGVja2JveC5uYW1lID0gZnJhZ0lEOwotICAgICAgY2hlY2tib3gudmFsdWUgPSBncm91cElEOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGlmICh0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09ICIiKQotICAgICAgICB0d2lzdCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSk7Ci0gICAgICBjaGVja2JveC5uYW1lID0gIiI7Ci0gICAgICBjaGVja2JveC52YWx1ZSA9ICIiOwotICAgIH0KLSAgICB2YXIgdGRzID0gY2hlY2tib3hUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY2hlY2tib3hDZWxsSW5kZXggPSBjaGVja2JveC5wYXJlbnROb2RlLmNlbGxJbmRleDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRkcy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKGkgPT0gY2hlY2tib3hDZWxsSW5kZXggfHwgY2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgdGRzLml0ZW0oaSkuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZWxzZQotICAgICAgICB0ZHMuaXRlbShpKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGdyb3VwQWxsT3JkZXJpbmdNb3ZlVXAodGFibGVDb250YWluZXJJRCkgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIGlmICh0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uY2VsbHNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKS5jaGVja2VkKSB7Ci0gICAgICBhbGVydCgnPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9DQU5OT1RfTU9WRV9GSVJTVF9FTEVNRU5UX1VQIiklPicpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmb3IgKHZhciBpID0gbnVtYmVyT2ZIZWFkZXJSb3dzICsgMTsgaSA8IHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmICh0YWJsZS5yb3dzW2ldLmNlbGxzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCkuY2hlY2tlZCkgewotICAgICAgICBzd2FwUm93cyh0YWJsZSwgaS0xLCBpKTsKLSAgICAgICAgdGFibGUucm93c1tpLTFdLmNlbGxzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCkuY2hlY2tlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgYWxlcnQoJzwlPWNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSU+Jyk7Ci0gIH0KLQotICBmdW5jdGlvbiBncm91cEFsbE9yZGVyaW5nTW92ZURvd24odGFibGVDb250YWluZXJJRCkgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIGlmICh0YWJsZS5yb3dzW3RhYmxlLnJvd3MubGVuZ3RoIC0gMV0uY2VsbHNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKS5jaGVja2VkKSB7Ci0gICAgICBhbGVydCgnPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9DQU5OT1RfTU9WRV9MQVNUX0VMRU1FTlRfRE9XTiIpJT4nKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZm9yICh2YXIgaSA9IG51bWJlck9mSGVhZGVyUm93czsgaSA8IHRhYmxlLnJvd3MubGVuZ3RoIC0gMTsgaSsrKSB7Ci0gICAgICBpZiAodGFibGUucm93c1tpXS5jZWxsc1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApLmNoZWNrZWQpIHsKLSAgICAgICAgc3dhcFJvd3ModGFibGUsIGksIGkrMSk7Ci0gICAgICAgIHRhYmxlLnJvd3NbaSsxXS5jZWxsc1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApLmNoZWNrZWQgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGFsZXJ0KCc8JT1jb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPicpOwotICB9Ci0KLSAgPCUKLSAgLy8gcm93SW5kZXgxIG11c3QgYmUgc21hbGxlciB0aGFuIHJvd0luZGV4MiBpbiBvcmRlciB0byB3b3JrCi0gICU+Ci0gIGZ1bmN0aW9uIHN3YXBSb3dzKHRhYmxlLCByb3dJbmRleDEsIHJvd0luZGV4MikgewotICAgIHZhciByb3cxQ2hpbGROb2RlcyA9IGNsb25lQXJyYXkodGFibGUucm93c1tyb3dJbmRleDFdLmNoaWxkTm9kZXMpOwotICAgIHZhciByb3cyQ2hpbGROb2RlcyA9IGNsb25lQXJyYXkodGFibGUucm93c1tyb3dJbmRleDJdLmNoaWxkTm9kZXMpOwotICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleDIpOwotICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleDEpOwotICAgIHZhciByb3cxID0gdGFibGUuaW5zZXJ0Um93KHJvd0luZGV4MSk7Ci0gICAgdmFyIHJvdzIgPSB0YWJsZS5pbnNlcnRSb3cocm93SW5kZXgyKTsKLSAgICBhcHBlbmRUb1Jvdyhyb3cxLCByb3cyQ2hpbGROb2Rlcyk7Ci0gICAgYXBwZW5kVG9Sb3cocm93Miwgcm93MUNoaWxkTm9kZXMpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xvbmVBcnJheShvbGRBcnJheSkgewotICAgIHZhciBhcnJheUNsb25lID0gbmV3IEFycmF5KCk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGRBcnJheS5sZW5ndGg7IGkrKykgewotICAgICAgYXJyYXlDbG9uZVtpXSA9IG9sZEFycmF5W2ldLmNsb25lTm9kZSh0cnVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5Q2xvbmU7Ci0gIH0KLQotICBmdW5jdGlvbiBhcHBlbmRUb1Jvdyhyb3csIG5vZGVzQXJyYXkpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICAgIHJvdy5hcHBlbmRDaGlsZChub2Rlc0FycmF5W2ldKTsKLSAgICB9Ci0gIH0KLTwvc2NyaXB0PgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDwlCi0gICAgaWYgKHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSA+IDApIHsKLSAgICAlPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgICA8JQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSI8JT1ncm91cENoZWNrYm94SUQlPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1ncm91cElEJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0VOQUJMRV9ESVNBQkxFX0dST1VQIiklPiIgb25DbGljaz0iamF2YXNjcmlwdDplbmFibGVHcm91cEFsbCgnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPXR3aXN0SW1hZ2VOYW1lJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9Z3JvdXBJRCU+JywgdGhpcykiIGNoZWNrZWQ+PGxhYmVsIGZvcj0iPCU9Z3JvdXBDaGVja2JveElEJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VOQUJMRV9ESVNBQkxFX0dST1VQIiklPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgICA8JQotICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Omdyb3VwQWxsT3JkZXJpbmdNb3ZlVXAoJzwlPXRhYmxlQ29udGFpbmVySUQlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9HUk9VUF9BTExfT1JERVJJTkdfTU9WRV9VUCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpncm91cEFsbE9yZGVyaW5nTW92ZURvd24oJzwlPXRhYmxlQ29udGFpbmVySUQlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9HUk9VUF9BTExfT1JERVJJTkdfTU9WRV9ET1dOIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0xMD48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VMRU1FTlRTIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldLmdldElEKCkpOwotICAlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1ncm91cE1lbWJlclJhZGlvSUQlPiIgdmFsdWU9IjwlPWZyYWdJRC50b1N0cmluZygpJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9FTEVNRU5UX0lOX0dST1VQIiklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIHdpZHRoPSIxMDAlIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWdyb3VwSUQlPiIgdmFsdWU9IjwlPWZyYWdJRC50b1N0cmluZygpJT4iPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWdyb3VwTWVtYmVyRnJhZ21lbnRzW2ldLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+Ci08JQotaWYgKCFlbmFibGVHcm91cCkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgaW5pdEdyb3VwQWxsKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9dHdpc3RJbWFnZU5hbWUlPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT1ncm91cElEJT4nLCAnPCU9Z3JvdXBDaGVja2JveElEJT4nLCA8JT1lbmFibGVHcm91cCU+KTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZUZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VGaXhXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzIzZGMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZUZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gY2hvb3NlKHNlbGVjdCkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0Lm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciB0YWJsZUNvbnRhaW5lcklEID0gJzwlPUZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEJT4nOwotICAgICAgdGFibGVDb250YWluZXJJRCArPSBzZWxlY3Qub3B0aW9ucyhpKS52YWx1ZTsKLSAgICAgIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzZWxlY3Qub3B0aW9ucyhpKS5zZWxlY3RlZCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd1RhYmxlKHRhYmxlQ29udGFpbmVySUQsIHNob3cpIHsKLSAgICB2YXIgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAoc2hvdykKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci08L3NjcmlwdD4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBDaG9pY2VGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0hPSUNFUyIpJT48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRUxFTUVOVFMiKSU+PC90aD4KLSAgPC90cj4KLTwlCi0gIFhTRFBhcnRpY2xlW10gY2hvaWNlcyA9IGZyYWcuZ2V0Q2hvaWNlcygpOwotICBTdHJpbmdbXSBncm91cElEcyA9IGZyYWcuZ2V0R3JvdXBJRHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7IGkrKykgewotICAgIFN0cmluZyBncm91cElEOwotICAgIGludCBjaG9pY2VJbmRleDsKLSAgICBpZiAoaSA8IGdyb3VwSURzLmxlbmd0aCkgewotICAgICAgZ3JvdXBJRCA9IGdyb3VwSURzW2ldOwotICAgICAgY2hvaWNlSW5kZXggPSBmcmFnLmdldENob2ljZUluZGV4KGdyb3VwSUQpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGdyb3VwSUQgPSBmcmFnLmNyZWF0ZUdyb3VwQ2hvaWNlSW5zdGFuY2UoMCk7Ci0gICAgICBjaG9pY2VJbmRleCA9IDA7Ci0gICAgfQotICAgIElYU0RGcmFnbWVudFtdIGNob2ljZUZyYWdzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1ncm91cElEJT4iPgotICAgICAgICA8c2VsZWN0IGlkPSI8JT1ncm91cElEJT4iIG5hbWU9IjwlPWdyb3VwSUQlPiIgb25DaGFuZ2U9ImphdmFzY3JpcHQ6Y2hvb3NlKHRoaXMpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQ0hPSUNFUyIpJT4iPgotPCUKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICBYU0RDb21wb25lbnQgeHNkQ29tcG9uZW50ID0gY2hvaWNlRnJhZ3Nbal0uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gIiI7Ci0gICAgICAgICAgICBpZih4c2RDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICAgICAgICAgIG5hbWUgPSAoKFhTREVsZW1lbnREZWNsYXJhdGlvbil4c2RDb21wb25lbnQpLmdldFFOYW1lKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIG5hbWUgPSB4c2RDb21wb25lbnQuZ2V0RWxlbWVudCgpLmdldFRhZ05hbWUoKTsgIAotICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChqID09IGNob2ljZUluZGV4KSB7Ci0lPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1jaG9pY2VGcmFnc1tqXS5nZXRJRCgpJT4iIHNlbGVjdGVkPjwlPW5hbWUlPgotPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9Y2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSU+Ij48JT1uYW1lJT4KLTwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLTwlCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hvaWNlRnJhZ3MubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICAgICAgZnJhZ0lELmFwcGVuZChjaG9pY2VGcmFnc1tqXS5nZXRJRCgpKTsKLSAgICAgICAgICBTdHJpbmcgY2hvaWNlRnJhZ1RhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChjaG9pY2VGcmFnc1tqXS5nZXRJRCgpKS50b1N0cmluZygpOwotJT4KLSAgICAgICAgICA8c3BhbiBpZD0iPCU9Y2hvaWNlRnJhZ1RhYmxlQ29udGFpbmVySUQlPiI+Ci0gICAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hvaWNlRnJhZ3Nbal0uZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgICAgPC9zcGFuPgotICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgc2hvd1RhYmxlKCc8JT1jaG9pY2VGcmFnVGFibGVDb250YWluZXJJRCU+JywgPCU9KGogPT0gY2hvaWNlSW5kZXgpJT4pOwotICAgICAgICAgIDwvc2NyaXB0PgotPCUKLSAgICAgICAgfQotJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLTwlCi0gIH0KLSU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlUkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NmI4NTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlUkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RHcm91cENob2ljZUZyYWdtZW50IGZyYWcgPSAoSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEQmFzZSA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZUJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJREJhc2UpLnRvU3RyaW5nKCk7Ci1TdHJpbmdbXSBncm91cElEcyA9IGZyYWcuZ2V0R3JvdXBJRHMoKTsKLWlmIChncm91cElEcy5sZW5ndGggPT0gMSkgewotICBpbnQgY2hvaWNlSW5kZXggPSBmcmFnLmdldENob2ljZUluZGV4KGdyb3VwSURzWzBdKTsKLSAgSVhTREZyYWdtZW50IGNob2ljZUZyYWcgPSBmcmFnLmdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURzWzBdKVtjaG9pY2VJbmRleF07Ci0gIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgZnJhZ0lELmFwcGVuZChjaG9pY2VGcmFnLmdldElEKCkpOwotJT4KLSAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNob2ljZUZyYWcuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci1lbHNlIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGg7IGkrKykgewotICAgIGludCBjaG9pY2VJbmRleCA9IGZyYWcuZ2V0Q2hvaWNlSW5kZXgoZ3JvdXBJRHNbaV0pOwotICAgIElYU0RGcmFnbWVudCBjaG9pY2VGcmFnID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1tpXSlbY2hvaWNlSW5kZXhdOwotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNob2ljZUZyYWcuZ2V0SUQoKSk7Ci0lPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9aSArIHRhYmxlQ29udGFpbmVySURCYXNlJT4nLCc8JT1pICsgdHdpc3RJbWFnZU5hbWVCYXNlJT4nKSI+PGltZyBuYW1lPSI8JT1pICsgdHdpc3RJbWFnZU5hbWVCYXNlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfR1JPVVBfTlVNQkVSIiwgU3RyaW5nLnZhbHVlT2YoaSArIDEpKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPHNwYW4gaWQ9IjwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+Ij4KLSAgICA8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iIGFsdD0iIj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaG9pY2VGcmFnLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPC9zcGFuPgotPCUKLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJhbmdlV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5MWI3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gY2hvb3NlKHNlbGVjdCkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0Lm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciB0YWJsZUNvbnRhaW5lcklEID0gJzwlPUZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEJT4nOwotICAgICAgdGFibGVDb250YWluZXJJRCArPSBzZWxlY3Qub3B0aW9ucyhpKS52YWx1ZTsKLSAgICAgIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzZWxlY3Qub3B0aW9ucyhpKS5zZWxlY3RlZCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd1RhYmxlKHRhYmxlQ29udGFpbmVySUQsIHNob3cpIHsKLSAgICB2YXIgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAoc2hvdykKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci08L3NjcmlwdD4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBDaG9pY2VGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPGEgbmFtZT0iPCU9bmFtZUFuY2hvcklEJT4iLz4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjcmVhdGVJbnN0YW5jZSgnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4sICc8JT1mcmFnSUQlPicsICc8JT1uYW1lQW5jaG9ySUQlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0hPSUNFUyIpJT48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRUxFTUVOVFMiKSU+PC90aD4KLSAgPC90cj4KLTwlCi0gIFhTRFBhcnRpY2xlW10gY2hvaWNlcyA9IGZyYWcuZ2V0Q2hvaWNlcygpOwotICBTdHJpbmdbXSBncm91cElEcyA9IGZyYWcuZ2V0R3JvdXBJRHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgU3RyaW5nIGdyb3VwSUQ7Ci0gICAgaW50IGNob2ljZUluZGV4OwotICAgIGlmIChpIDwgZ3JvdXBJRHMubGVuZ3RoKSB7Ci0gICAgICBncm91cElEID0gZ3JvdXBJRHNbaV07Ci0gICAgICBjaG9pY2VJbmRleCA9IGZyYWcuZ2V0Q2hvaWNlSW5kZXgoZ3JvdXBJRCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgZ3JvdXBJRCA9IGZyYWcuY3JlYXRlR3JvdXBDaG9pY2VJbnN0YW5jZSgwKTsKLSAgICAgIGNob2ljZUluZGV4ID0gMDsKLSAgICB9Ci0gICAgSVhTREZyYWdtZW50W10gY2hvaWNlRnJhZ3MgPSBmcmFnLmdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSUQpOwotJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1ncm91cElEJT4iPgotICAgICAgICA8c2VsZWN0IGlkPSI8JT1ncm91cElEJT4iIG5hbWU9IjwlPWdyb3VwSUQlPiIgb25DaGFuZ2U9ImphdmFzY3JpcHQ6Y2hvb3NlKHRoaXMpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQ0hPSUNFUyIpJT4iPgotPCUKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pY2hvaWNlRnJhZ3Nbal0uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgICAgICAgIGlmIChqID09IGNob2ljZUluZGV4KSB7Ci0lPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1jaG9pY2VGcmFnc1tqXS5nZXRJRCgpJT4iIHNlbGVjdGVkPjwlPXhzZEVsZW1lbnQuZ2V0UU5hbWUoKSU+Ci08JQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0lPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1jaG9pY2VGcmFnc1tqXS5nZXRJRCgpJT4iPjwlPXhzZEVsZW1lbnQuZ2V0UU5hbWUoKSU+Ci08JQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci08JQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgICAgIGZyYWdJRC5hcHBlbmQoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSk7Ci0gICAgICAgICAgU3RyaW5nIGNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci0gICAgICAgICAgPHNwYW4gaWQ9IjwlPWNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEJT4iPgotICAgICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNob2ljZUZyYWdzW2pdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHNob3dUYWJsZSgnPCU9Y2hvaWNlRnJhZ1RhYmxlQ29udGFpbmVySUQlPicsIDwlPShqID09IGNob2ljZUluZGV4KSU+KTsKLSAgICAgICAgICA8L3NjcmlwdD4KLTwlCi0gICAgICAgIH0KLSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci08JQotICB9Ci0lPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFJGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmRmZGEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJREJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWVCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySURCYXNlKS50b1N0cmluZygpOwotU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci1pZiAoZ3JvdXBJRHMubGVuZ3RoID09IDEpIHsKLSAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBmcmFnLmdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURzWzBdKTsKLSU+Ci0gIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tpXS5nZXRJRCgpKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Z3JvdXBNZW1iZXJGcmFnbWVudHNbaV0uZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLTwlCi0gIH0KLSU+Ci0gIDwvdGFibGU+Ci08JQotfQotZWxzZSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pOwotJT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+JywnPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+JykiPjxpbWcgbmFtZT0iPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0dST1VQX05VTUJFUiIsIFN0cmluZy52YWx1ZU9mKGkgKyAxKSklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxzcGFuIGlkPSI8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPiI+Ci0gICAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdLmdldElEKCkpOwotJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiIgYWx0PSIiPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotPCUKLSAgICB9Ci0lPgotICAgIDwvdGFibGU+Ci0gICAgPC9zcGFuPgotPCUKLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFNlcUZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFGaXhXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWQ4MWMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFNlcUZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwU2VxRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBTZXFGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci1mb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gIFN0cmluZyBncm91cElEOwotICBpZiAoaSA8IGdyb3VwSURzLmxlbmd0aCkKLSAgICBncm91cElEID0gZ3JvdXBJRHNbaV07Ci0gIGVsc2UKLSAgICBncm91cElEID0gZnJhZy5jcmVhdGVHcm91cFNlcUluc3RhbmNlKCk7Ci0gIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEKTsKLSU+Ci0gIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLSAgZm9yIChpbnQgaiA9IDA7IGogPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGorKykgewotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdLmdldElEKCkpOwotJT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1ncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLTwlCi0gIH0KLSU+Ci0gIDwvdGFibGU+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFNlcVJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFNlcVJhbmdlV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjNDFlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFSYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBTZXFGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cFNlcUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZUluc3RhbmNlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPiwgJzwlPWZyYWdJRCU+JywgJzwlPW5hbWVBbmNob3JJRCU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VMRU1FTlRTIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIFN0cmluZ1tdIGdyb3VwSURzID0gZnJhZy5nZXRHcm91cElEcygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURzLmxlbmd0aCB8fCBpIDwgeHNkQ29uZmlnLmdldE1pbk9jY3VycygpOyBpKyspIHsKLSAgICBTdHJpbmcgZ3JvdXBJRDsKLSAgICBpZiAoaSA8IGdyb3VwSURzLmxlbmd0aCkKLSAgICAgIGdyb3VwSUQgPSBncm91cElEc1tpXTsKLSAgICBlbHNlCi0gICAgICBncm91cElEID0gZnJhZy5jcmVhdGVHcm91cFNlcUluc3RhbmNlKCk7Ci0gICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBmcmFnLmdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSUQpOwotICAlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD4KLSAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlUm93Q2hlY2tib3hDbGljaygpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWdyb3VwSUQlPiI+Ci0gICAgICA8JQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgICAgIGZyYWdJRC5hcHBlbmQoZ3JvdXBNZW1iZXJGcmFnbWVudHNbal0uZ2V0SUQoKSk7Ci0gICAgICAlPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPCUKLSAgICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICA8L3RyPgotICA8JQotICB9Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9EaWFsb2cuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9EaWFsb2cuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjEzYzQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvRGlhbG9nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5uZXQuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyBub2RlSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgIFN0cmluZyBmcmFnbWVudElkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5GUkFHTUVOVF9JRCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT4KLSAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVElUTEVfWFNEX0lORk9STUFUSU9OX0RJQUxPRyIpJT4KLSAgPC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgbGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvZnJhZ21lbnQvWFNESW5mb190b29sYmFyLmpzcD8iKTsKLSAgIGxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgbGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICBsaW5rLmFwcGVuZCgnJicpLmFwcGVuZChXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKS5hcHBlbmQoJz0nKS5hcHBlbmQoZnJhZ21lbnRJZCk7Ci0lPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuWFNEX0lORk9fVE9PTEJBUiU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGxpbmsudG9TdHJpbmcoKSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwlICAgICAgCi0gICBsaW5rLnNldExlbmd0aCgwKTsKLSAgIGxpbmsuYXBwZW5kKCJ3c2RsL2ZyYWdtZW50L1hTREluZm9fY29udGVudC5qc3A/Iik7Ci0gICBsaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgIGxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgbGluay5hcHBlbmQoJyYnKS5hcHBlbmQoV1NETEFjdGlvbklucHV0cy5GUkFHTUVOVF9JRCkuYXBwZW5kKCc9JykuYXBwZW5kKGZyYWdtZW50SWQpOwotJT4gIAotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuWFNEX0lORk9fQ09OVEVOVCU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGxpbmsudG9TdHJpbmcoKSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWI5NjRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0ic2Vzc2lvbklEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBzZXNzaW9uSUQuYXBwZW5kKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpKTsKLSAgIGZyYWdJRC5hcHBlbmQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5GUkFHTUVOVF9JRCkpOwotCi0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklELnRvU3RyaW5nKCkpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIG5vZGVJRC5hcHBlbmQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLSAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1hTRF9JTkZPUk1BVElPTl9DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhZy5nZXRJbmZvcm1hdGlvbkZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9fdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIxODZiOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpKSk7Ci0gICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpKTsgICAKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25VbmxvYWQ9InRvcC5vcGVuZXIueHNkSW5mb0RpYWxvZ0Nsb3NlZD10cnVlIiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzZGwuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHRvcC5vcGVuZXIueHNkSW5mb0RpYWxvZ0Nsb3NlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVjNGQzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLVN0cmluZyBmcmFnSURTdHJpbmcgPSBmcmFnSUQudG9TdHJpbmcoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotWFNEVHlwZURlZmluaXRpb24geHNkQnVpbHRJblR5cGUgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZ0lEU3RyaW5nJT4iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9KHhzZEJ1aWx0SW5UeXBlICE9IG51bGwgPyB4c2RCdWlsdEluVHlwZS5nZXROYW1lKCkgOiBzaW1wbGVUeXBlLmdldE5hbWUoKSklPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWdJRFN0cmluZykpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDwlCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0iNjAlIj4KLSAgICAgIDwlCi0gICAgICBTdHJpbmcgdmFsdWUgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlKGZyYWcuZ2V0SUQoKSwgaSk7Ci0gICAgICAlPgotICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZ0lEU3RyaW5nJT4iIHZhbHVlPSI8JT0oKHZhbHVlICE9IG51bGwpID8gSFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh2YWx1ZSkgOiAiIiklPiIgc2l6ZT0iNTAiIGNsYXNzPSJ0YWJsZXRleHRlbnRlciI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5DYWxlbmRhckJyb3dzZXIoPCU9cmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpJT4sJ2NvbnRlbnRib3JkZXInLCc8JT1mcmFnSURTdHJpbmclPicsPCU9aSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjMwJSI+Jm5ic3A7PC90ZD4gICAgCi0gIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NTIzZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWZyYWcuZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLVhTRFR5cGVEZWZpbml0aW9uIHhzZEJ1aWx0SW5UeXBlID0gWFNEVHlwZURlZmluaXRpb25VdGlsLnJlc29sdmVUb1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbihzaW1wbGVUeXBlKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci1pbnQgY2FsZW5kYXJUeXBlID0gSW50ZWdlci5wYXJzZUludChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9KHhzZEJ1aWx0SW5UeXBlICE9IG51bGwgPyB4c2RCdWlsdEluVHlwZS5nZXROYW1lKCkgOiBzaW1wbGVUeXBlLmdldE5hbWUoKSklPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICU+Ci0gICAgCi0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkU2ltcGxlQXRvbWljRGF0ZVRpbWVSb3dzKDwlPWNhbGVuZGFyVHlwZSU+LCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCBudWxsLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWREYXRlVGltZVJvd3MoPCU9Y2FsZW5kYXJUeXBlJT4sJzwlPXRhYmxlQ29udGFpbmVySUQlPicsPCU9eHNkQ29uZmlnLmdldE1pbk9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggd2lkdGg9IjkwJSIgY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9WQUxVRVMiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OUyIpJT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLTwvc3Bhbj4KLTwlCi1TdHJpbmdbXSB2YWx1ZXMgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpOwotaW50IGkgPSAwOwotaWYgKHZhbHVlcyAhPSBudWxsKSB7Ci0gIGZvciAoIDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGFkZFNpbXBsZUF0b21pY0RhdGVUaW1lUm93cyg8JT1jYWxlbmRhclR5cGUlPiwiPCU9dGFibGVDb250YWluZXJJRCU+IiwiPCU9ZnJhZy5nZXRJRCgpJT4iLCI8JT1mcmFnLmdldElEKCklPiIsIjwlPXZhbHVlc1tpXSU+Iiw8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPik7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci1mb3IgKCA7IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgYWRkU2ltcGxlQXRvbWljRGF0ZVRpbWVSb3dzKDwlPWNhbGVuZGFyVHlwZSU+LCI8JT10YWJsZUNvbnRhaW5lcklEJT4iLCI8JT1mcmFnLmdldElEKCklPiIsIjwlPWZyYWcuZ2V0SUQoKSU+IixudWxsLDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+KTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNFbnVtRml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNFbnVtRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk5NzMxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bUZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLSAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50IGZyYWcgPSAoWFNEU2ltcGxlQXRvbWljRW51bUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci0gICBJWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci0gICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWZyYWcuZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgIFhTRFR5cGVEZWZpbml0aW9uIHhzZEJ1aWx0SW5UeXBlID0gWFNEVHlwZURlZmluaXRpb25VdGlsLnJlc29sdmVUb1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbihzaW1wbGVUeXBlKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpJT4KLSAgICA8L3RkPgotICAgICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAlPgotICAgIDx0ZD4KLTwlCi0gICBpZiAoIWZyYWcudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKSkKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci08JQotICAgT3B0aW9uVmVjdG9yIG9wdGlvblZlY3RvciA9IGZyYWcuZ2V0T3B0aW9uVmVjdG9yKCk7Ci0gICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKQotICAgewotJT4KLSAgPHRyPgotICAgIDx0ZD4KLTwlCi0gICAgIFN0cmluZyBzZWxlY3RlZFZhbHVlID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZShmcmFnLmdldElEKCksIGkpOwotJT4KLSAgICAgIDxzZWxlY3QgaWQ9IjwlPWZyYWcuZ2V0SUQoKSU+IiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9InNlbGVjdGxpc3QiPgotPCUgICAgICAgICAgICAgIAotICAgICBmb3IgKGludCBqID0gMDsgaiA8IG9wdGlvblZlY3Rvci5zaXplKCk7IGorKykKLSAgICAgewotICAgICAgIFN0cmluZyBkaXNwbGF5VmFsdWUgPSBvcHRpb25WZWN0b3IuZ2V0RGlzcGxheVZhbHVlKGopOwotICAgICAgIFN0cmluZyB2YWx1ZSA9IG9wdGlvblZlY3Rvci5nZXRWYWx1ZShqKTsKLSAgICAgICBpZiAodmFsdWUuZXF1YWxzKHNlbGVjdGVkVmFsdWUpKQotICAgICAgIHsKLSU+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPXZhbHVlJT4iIHNlbGVjdGVkPjwlPWRpc3BsYXlWYWx1ZSU+Ci08JQotICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgewotJT4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9dmFsdWUlPiI+PCU9ZGlzcGxheVZhbHVlJT4KLTwlCi0gICAgICAgfQotICAgICB9Ci0lPgotICAgICAgPC9zZWxlY3Q+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwlCi0gICB9Ci0gICU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3YTllZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci0gICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudCBmcmFnID0gKFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotICAgSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotICAgT3B0aW9uVmVjdG9yIG9wdGlvblZlY3RvciA9IGZyYWcuZ2V0T3B0aW9uVmVjdG9yKCk7Ci0gICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWZyYWcuZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgIFhTRFR5cGVEZWZpbml0aW9uIHhzZEJ1aWx0SW5UeXBlID0gWFNEVHlwZURlZmluaXRpb25VdGlsLnJlc29sdmVUb1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbihzaW1wbGVUeXBlKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotICAgU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci0gICBTdHJpbmcgb3B0aW9uc0NvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuWFNEX0FUT01JQ19FTlVNX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08c3BhbiBpZD0iPCU9b3B0aW9uc0NvbnRhaW5lcklEJT4iPgotPCUKLSAgIGZvciAoaW50IGogPSAwOyBqIDwgb3B0aW9uVmVjdG9yLnNpemUoKTsgaisrKSB7Ci0lPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPW9wdGlvbnNDb250YWluZXJJRCU+IiB2YWx1ZT0iPCU9b3B0aW9uVmVjdG9yLmdldERpc3BsYXlWYWx1ZShqKSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1vcHRpb25zQ29udGFpbmVySUQlPiIgdmFsdWU9IjwlPW9wdGlvblZlY3Rvci5nZXRWYWx1ZShqKSU+Ij4KLTwlCi0gICB9Ci0lPgotPC9zcGFuPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGFkZFNpbXBsZUF0b21pY0VudW1Sb3dzKHRhYmxlQ29udGFpbmVySUQsIG9wdGlvbnNDb250YWluZXJJRCwgaWQsIG5hbWUsIHZhbHVlLCBtYXhPY2N1cnMpIHsKLSAgICBpZiAoY2hlY2tNYXhPY2N1cnNSZWFjaGVkKHRhYmxlQ29udGFpbmVySUQsIG1heE9jY3VycykpCi0gICAgICByZXR1cm47Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKLSAgICBzZWxlY3QuaWQgPSBpZDsKLSAgICBzZWxlY3QubmFtZSA9IG5hbWU7Ci0gICAgc2VsZWN0LmNsYXNzTmFtZSA9ICJzZWxlY3RsaXN0IjsKLSAgICB2YXIgb3B0aW9ucyA9IGdldE9wdGlvbnMob3B0aW9uc0NvbnRhaW5lcklEKTsKLSAgICB2YXIgaW5kZXggPSAwOwotICAgIGZvciAodmFyIGsgPSAwOyBrIDwgb3B0aW9ucy5sZW5ndGg7IGsgKz0gMikgewotICAgICAgc2VsZWN0Lm9wdGlvbnNbaW5kZXhdID0gbmV3IE9wdGlvbihvcHRpb25zW2tdLnZhbHVlLG9wdGlvbnNbaysxXS52YWx1ZSk7Ci0gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA9PSBvcHRpb25zW2srMV0udmFsdWUpCi0gICAgICAgIHNlbGVjdC5vcHRpb25zW2luZGV4XS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgICBpbmRleCsrOwotICAgIH0KLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRPcHRpb25zKG9wdGlvbnNDb250YWluZXJJRCkgewotICAgIHZhciBvcHRpb25zQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9uc0NvbnRhaW5lcklEKTsKLSAgICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNDb250YWluZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgcmV0dXJuIG9wdGlvbnM7Ci0gIH0KLTwvc2NyaXB0PgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8bGFiZWwgZm9yPSI8JT1mcmFnLmdldElEKCklPiI+PGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+PC9sYWJlbD4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8JT0oeHNkQnVpbHRJblR5cGUgIT0gbnVsbCA/IHhzZEJ1aWx0SW5UeXBlLmdldE5hbWUoKSA6IHNpbXBsZVR5cGUuZ2V0TmFtZSgpKSU+Ci0gICAgPC90ZD4KLSAgICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGRTaW1wbGVBdG9taWNFbnVtUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPW9wdGlvbnNDb250YWluZXJJRCU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgbnVsbCwgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1pbk9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9WQUxVRVMiKSU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L3NwYW4+Ci08JQotU3RyaW5nW10gdmFsdWVzID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKTsKLWludCBpID0gMDsKLWlmICh2YWx1ZXMgIT0gbnVsbCkgewotICBmb3IgKCA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBhZGRTaW1wbGVBdG9taWNFbnVtUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPW9wdGlvbnNDb250YWluZXJJRCU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPXZhbHVlc1tpXSU+JywgJzwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+Jyk7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci1mb3IgKCA7IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgYWRkU2ltcGxlQXRvbWljRW51bVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1vcHRpb25zQ29udGFpbmVySUQlPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT1mcmFnLmdldElEKCklPicsIG51bGwsICc8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPicpOwotICA8L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0ZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I2YWQ4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYXR0cmlidXRlIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci1YU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci1ib29sZWFuIGF0dHJpYnV0ZUJvb2wgPSBCb29sZWFuLnZhbHVlT2YoYXR0cmlidXRlLnRvU3RyaW5nKCkpLmJvb2xlYW5WYWx1ZSgpIDsKLQotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9KHhzZEJ1aWx0SW5UeXBlICE9IG51bGwgPyB4c2RCdWlsdEluVHlwZS5nZXROYW1lKCkgOiBzaW1wbGVUeXBlLmdldE5hbWUoKSklPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpICYmICEoYXR0cmlidXRlQm9vbCkgKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAlPgotICAgIAotICAgIDx0ZD4KLSAgICAgIDwlCi0gICAgICBpZiAoIWZyYWcudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKSkgewotICAgICAgJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgIDwlCi0gICAgICB9Ci0gICAgICAlPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPCUKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7IGkrKykgewotICAlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCUKLSAgICAgIFN0cmluZyB2YWx1ZSA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWUoZnJhZy5nZXRJRCgpLCBpKTsKLSAgICAgICU+Ci0gICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IjwlPWZyYWcuZ2V0SUQoKSU+IiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPSgodmFsdWUgIT0gbnVsbCkgPyBIVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHZhbHVlKSA6ICIiKSU+IiBzaXplPSI1MCIgY2xhc3M9InRhYmxldGV4dGVudGVyIj4KLSAgICA8L3RkPgotICA8L3RyPgotICA8JQotICB9Ci0gICU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljSW5mb0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJjZWZmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljSW5mb0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMyMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9InNlc3Npb25JRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JRC50b1N0cmluZygpKTsKLUNvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKTsKLQotaW50IG1pbkxlbmd0aCA9IC0xOwotaW50IG1heExlbmd0aCA9IC0xOwotVmVjdG9yIHBhdHRlcm5WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci1TdHJpbmcgd2hpdGVTcGFjZSA9IG51bGw7Ci1ib29sZWFuIG1pbkV4Y2x1c2l2ZSA9IHRydWU7Ci1PYmplY3QgbWluID0gbnVsbDsKLWJvb2xlYW4gbWF4RXhjbHVzaXZlID0gdHJ1ZTsKLU9iamVjdCBtYXggPSBudWxsOwotaW50IHRvdGFsRGlnaXRzID0gLTE7Ci1pbnQgZnJhY3Rpb25EaWdpdHMgPSAtMTsKLQotWFNEU2ltcGxlVHlwZURlZmluaXRpb24gY3VyclR5cGUgPSBzaW1wbGVUeXBlOwotd2hpbGUgKCFYU0RUeXBlRGVmaW5pdGlvblV0aWwuaXNSb290VHlwZURlZmluaXRpb24oY3VyclR5cGUpKSB7Ci0gIC8vIG1pbkxlbmd0aAotICBpZiAobWluTGVuZ3RoIDwgMCkgewotICAgIFhTRExlbmd0aEZhY2V0IHhzZExlbmd0aEZhY2V0ID0gY3VyclR5cGUuZ2V0TGVuZ3RoRmFjZXQoKTsKLSAgICBYU0RNaW5MZW5ndGhGYWNldCB4c2RNaW5MZW5ndGhGYWNldCA9IGN1cnJUeXBlLmdldE1pbkxlbmd0aEZhY2V0KCk7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoeHNkTGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgIG1pbkxlbmd0aCA9IHhzZExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoeHNkTWluTGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgIG1pbkxlbmd0aCA9IHhzZE1pbkxlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gIH0KLSAgLy8gbWF4TGVuZ3RoCi0gIGlmIChtYXhMZW5ndGggPCAwKSB7Ci0gICAgWFNETGVuZ3RoRmFjZXQgeHNkTGVuZ3RoRmFjZXQgPSBjdXJyVHlwZS5nZXRMZW5ndGhGYWNldCgpOwotICAgIFhTRE1heExlbmd0aEZhY2V0IHhzZE1heExlbmd0aEZhY2V0ID0gY3VyclR5cGUuZ2V0TWF4TGVuZ3RoRmFjZXQoKTsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmICh4c2RMZW5ndGhGYWNldCAhPSBudWxsKQotICAgICAgbWF4TGVuZ3RoID0geHNkTGVuZ3RoRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICBlbHNlIGlmICh4c2RNYXhMZW5ndGhGYWNldCAhPSBudWxsKQotICAgICAgbWF4TGVuZ3RoID0geHNkTWF4TGVuZ3RoRmFjZXQuZ2V0VmFsdWUoKTsKLSAgfQotICAvLyBwYXR0ZXJuVmVjdG9yCi0gIEVMaXN0IHhzZFBhdHRlcm5GYWNldHMgPSBjdXJyVHlwZS5nZXRQYXR0ZXJuRmFjZXRzKCk7Ci0gIGlmICh4c2RQYXR0ZXJuRmFjZXRzICE9IG51bGwpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHhzZFBhdHRlcm5GYWNldHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIFhTRFBhdHRlcm5GYWNldCB4c2RQYXR0ZXJuRmFjZXQgPSAoWFNEUGF0dGVybkZhY2V0KXhzZFBhdHRlcm5GYWNldHMuZ2V0KGkpOwotICAgICAgRUxpc3QgcGF0dGVybnMgPSB4c2RQYXR0ZXJuRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcGF0dGVybnMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgcGF0dGVyblZlY3Rvci5hZGQocGF0dGVybnMuZ2V0KGopKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLy8gd2hpdGVTcGFjZQotICBpZiAod2hpdGVTcGFjZSA9PSBudWxsKSB7Ci0gICAgWFNEV2hpdGVTcGFjZUZhY2V0IHhzZFdoaXRlU3BhY2VGYWNldCA9IGN1cnJUeXBlLmdldFdoaXRlU3BhY2VGYWNldCgpOwotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgaWYgKHhzZFdoaXRlU3BhY2VGYWNldCAhPSBudWxsKQotICAgICAgd2hpdGVTcGFjZSA9IHhzZFdoaXRlU3BhY2VGYWNldC5nZXRWYWx1ZSgpLmdldE5hbWUoKTsKLSAgfQotICAvLyBtaW4gaW4vZXhjbHVzaXZlCi0gIGlmIChtaW4gPT0gbnVsbCApIHsKLSAgICBYU0RNaW5FeGNsdXNpdmVGYWNldCB4c2RNaW5FeGNsdXNpdmVGYWNldCA9IGN1cnJUeXBlLmdldE1pbkV4Y2x1c2l2ZUZhY2V0KCk7Ci0gICAgWFNETWluSW5jbHVzaXZlRmFjZXQgeHNkTWluSW5jbHVzaXZlRmFjZXQgPSBjdXJyVHlwZS5nZXRNaW5JbmNsdXNpdmVGYWNldCgpOwotICAgIGlmICh4c2RNaW5FeGNsdXNpdmVGYWNldCAhPSBudWxsKSB7Ci0gICAgICBtaW4gPSB4c2RNaW5FeGNsdXNpdmVGYWNldC5nZXRWYWx1ZSgpOwotICAgICAgbWluRXhjbHVzaXZlID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoeHNkTWluSW5jbHVzaXZlRmFjZXQgIT0gbnVsbCkgewotICAgICAgbWluID0geHNkTWluSW5jbHVzaXZlRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIG1pbkV4Y2x1c2l2ZSA9IGZhbHNlOwotICAgIH0KLSAgfQotICAvLyBtYXggaW4vZXhjbHVzaXZlCi0gIGlmIChtYXggPT0gbnVsbCkgewotICAgIFhTRE1heEV4Y2x1c2l2ZUZhY2V0IHhzZE1heEV4Y2x1c2l2ZUZhY2V0ID0gY3VyclR5cGUuZ2V0TWF4RXhjbHVzaXZlRmFjZXQoKTsKLSAgICBYU0RNYXhJbmNsdXNpdmVGYWNldCB4c2RNYXhJbmNsdXNpdmVGYWNldCA9IGN1cnJUeXBlLmdldE1heEluY2x1c2l2ZUZhY2V0KCk7Ci0gICAgaWYgKHhzZE1heEV4Y2x1c2l2ZUZhY2V0ICE9IG51bGwpIHsKLSAgICAgIG1heCA9IHhzZE1heEV4Y2x1c2l2ZUZhY2V0LmdldFZhbHVlKCk7Ci0gICAgICBtYXhFeGNsdXNpdmUgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmICh4c2RNYXhJbmNsdXNpdmVGYWNldCAhPSBudWxsKSB7Ci0gICAgICBtYXggPSB4c2RNYXhJbmNsdXNpdmVGYWNldC5nZXRWYWx1ZSgpOwotICAgICAgbWF4RXhjbHVzaXZlID0gZmFsc2U7Ci0gICAgfQotICB9Ci0gIC8vIHRvdGFsRGlnaXRzCi0gIGlmICh0b3RhbERpZ2l0cyA8IDApIHsKLSAgICBYU0RUb3RhbERpZ2l0c0ZhY2V0IHhzZFRvdGFsRGlnaXRzRmFjZXQgPSBjdXJyVHlwZS5nZXRUb3RhbERpZ2l0c0ZhY2V0KCk7Ci0gICAgaWYgKHhzZFRvdGFsRGlnaXRzRmFjZXQgIT0gbnVsbCkKLSAgICAgIHRvdGFsRGlnaXRzID0geHNkVG90YWxEaWdpdHNGYWNldC5nZXRWYWx1ZSgpOwotICB9Ci0gIC8vIGZyYWN0aW9uRGlnaXRzCi0gIGlmIChmcmFjdGlvbkRpZ2l0cyA8IDApIHsKLSAgICBYU0RGcmFjdGlvbkRpZ2l0c0ZhY2V0IHhzZEZyYWN0aW9uRGlnaXRzRmFjZXQgPSBjdXJyVHlwZS5nZXRGcmFjdGlvbkRpZ2l0c0ZhY2V0KCk7Ci0gICAgaWYgKHhzZEZyYWN0aW9uRGlnaXRzRmFjZXQgIT0gbnVsbCkKLSAgICAgIGZyYWN0aW9uRGlnaXRzID0geHNkRnJhY3Rpb25EaWdpdHNGYWNldC5nZXRWYWx1ZSgpOwotICB9Ci0gIC8vIHdhbGsgdG8gYmFzZSB0eXBlCi0gIGN1cnJUeXBlID0gY3VyclR5cGUuZ2V0QmFzZVR5cGVEZWZpbml0aW9uKCk7Ci19Ci0lPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JBU0VfVFlQRSIpJT4KLSAgICA8L3RoPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDwlPVhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSkuZ2V0TmFtZSgpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPCUKLVN0cmluZyBtaW5MZW5ndGhTdHJpbmcgPSAobWluTGVuZ3RoIDwgMCkgPyB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTkJPVU5ERUQiKSA6IFN0cmluZy52YWx1ZU9mKG1pbkxlbmd0aCk7Ci1TdHJpbmcgbWF4TGVuZ3RoU3RyaW5nID0gKG1heExlbmd0aCA8IDApID8gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5CT1VOREVEIikgOiBTdHJpbmcudmFsdWVPZihtYXhMZW5ndGgpOwotU3RyaW5nW10gbGVuZ3RoVmFsdWVzID0ge21pbkxlbmd0aFN0cmluZywgbWF4TGVuZ3RoU3RyaW5nfTsKLWlmIChtaW5MZW5ndGggPj0gMCB8fCBtYXhMZW5ndGggPj0gMCkgewotJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xFTkdUSCIpJT4KLSAgICAgIDwvdGg+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MRU5HVEhfVkFMVUUiLCBsZW5ndGhWYWx1ZXMpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci0lPgotCi08JQotaWYgKHBhdHRlcm5WZWN0b3Iuc2l6ZSgpID4gMCkgewotICBTdHJpbmcgcGF0dGVybkNvbnRhaW5lcklEID0gIjo6cGF0dGVybiI7Ci0gIFN0cmluZyB4cGF0dGVybkNvbnRhaW5lcklEID0gIng6OnBhdHRlcm4iOwotJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXBhdHRlcm5Db250YWluZXJJRCU+JywnPCU9eHBhdHRlcm5Db250YWluZXJJRCU+JykiPjxpbWcgbmFtZT0iPCU9eHBhdHRlcm5Db250YWluZXJJRCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QQVRURVJOIiklPjwvc3Ryb25nPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8c3BhbiBpZD0iPCU9cGF0dGVybkNvbnRhaW5lcklEJT4iPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BBVFRFUk4iKSU+Ci0gICAgICA8L3RoPgotICAgIDwvdHI+Ci0gICAgPCUKLSAgICBmb3IgKGludCBrID0gMDsgayA8IHBhdHRlcm5WZWN0b3Iuc2l6ZSgpOyBrKyspIHsKLSAgICAlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgIDwlPShTdHJpbmcpcGF0dGVyblZlY3Rvci5nZXQoayklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8JQotICAgIH0KLSAgICAlPgotICA8L3RhYmxlPgotICA8L3NwYW4+Ci08JQotfQotJT4KLQotPCUKLWlmICh3aGl0ZVNwYWNlICE9IG51bGwpIHsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XSElURVNQQUNFIiklPgotICAgICAgPC90aD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDwlPXdoaXRlU3BhY2UlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLX0KLSU+Ci0KLTwlCi1TdHJpbmcgbG93ZXJCb3VuZDsKLWlmIChtaW5FeGNsdXNpdmUpCi0gIGxvd2VyQm91bmQgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NSU5fRVhDTFVTSVZFIiwgKG1pbiA9PSBudWxsKSA/IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQk9VTkRFRCIpIDogbWluLnRvU3RyaW5nKCkpOwotZWxzZQotICBsb3dlckJvdW5kID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUlOX0lOQ0xVU0lWRSIsIChtaW4gPT0gbnVsbCkgPyB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTkJPVU5ERUQiKSA6IG1pbi50b1N0cmluZygpKTsKLVN0cmluZyB1cHBlckJvdW5kOwotaWYgKG1heEV4Y2x1c2l2ZSkKLSAgdXBwZXJCb3VuZCA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01BWF9FWENMVVNJVkUiLCAobWF4ID09IG51bGwpID8gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5CT1VOREVEIikgOiBtYXgudG9TdHJpbmcoKSk7Ci1lbHNlCi0gIHVwcGVyQm91bmQgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQVhfSU5DTFVTSVZFIiwgKG1heCA9PSBudWxsKSA/IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQk9VTkRFRCIpIDogbWF4LnRvU3RyaW5nKCkpOwotaWYgKG1pbiAhPSBudWxsIHx8IG1heCAhPSBudWxsKSB7Ci0lPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkFOR0VfT0ZfVkFMVUVTIiklPgotICAgICAgPC90aD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDwlPWxvd2VyQm91bmQgKyB1cHBlckJvdW5kJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci0lPgotCi08JQotaWYgKHRvdGFsRGlnaXRzID49IDApIHsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9UT1RBTF9ESUdJVFMiKSU+Ci0gICAgICA8L3RoPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCU9dG90YWxEaWdpdHMlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLX0KLSU+Ci0KLTwlCi1pZiAoZnJhY3Rpb25EaWdpdHMgPj0gMCkgewotJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZSQUNUSU9OX0RJR0lUUyIpJT4KLSAgICAgIDwvdGg+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8JT1mcmFjdGlvbkRpZ2l0cyU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY1JGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZGQ0YjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY1JGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci1YU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci1TdHJpbmdbXSBsYWJlbEFyZ3MgPSB7ZnJhZy5nZXROYW1lKCksICh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpfTsKLVN0cmluZ1tdIHBhcmFtcyA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSk7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGlkPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQVRPTUlDX05BTUVfVFlQRSIsIGxhYmVsQXJncyklPgotICAgIDwvdGg+Ci0gICAgPHRkIGhlYWRlcnM9IjwlPWZyYWcuZ2V0SUQoKSU+IiBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgd2lkdGg9IjEwMCUiIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9KChwYXJhbXMgIT0gbnVsbCAmJiBwYXJhbXMubGVuZ3RoID4gMCkgPyBIVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKHBhcmFtc1swXSkgOiB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OVUxMIikpJT4KLSAgICA8L3RkPgotICA8L3RyPgotICA8JQotICBpZiAocGFyYW1zICE9IG51bGwpIHsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+PC90ZD4KLSAgICAgICAgPHRkIGhlYWRlcnM9IjwlPWZyYWcuZ2V0SUQoKSU+IiBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgd2lkdGg9IjEwMCUiIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMocGFyYW1zW2ldKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwlCi0gICAgfQotICB9Ci0gICU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY1JhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNjhkNzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY1JhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci1YU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBhZGRTaW1wbGVBdG9taWNSb3dzKHRhYmxlQ29udGFpbmVySUQsIGlkLCBuYW1lLCB2YWx1ZSwgbWF4T2NjdXJzKSB7Ci0gICAgaWYgKGNoZWNrTWF4T2NjdXJzUmVhY2hlZCh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMpKQotICAgICAgcmV0dXJuOwotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChpbnB1dCk7Ci0gICAgaW5wdXQudHlwZSA9ICJ0ZXh0IjsKLSAgICBpbnB1dC5pZCA9IGlkOwotICAgIGlucHV0Lm5hbWUgPSBuYW1lOwotICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmxlbmd0aCA+IDApCi0gICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlOwotICAgIGlucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci08L3NjcmlwdD4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8JT0oeHNkQnVpbHRJblR5cGUgIT0gbnVsbCA/IHhzZEJ1aWx0SW5UeXBlLmdldE5hbWUoKSA6IHNpbXBsZVR5cGUuZ2V0TmFtZSgpKSU+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGRTaW1wbGVBdG9taWNSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCBudWxsLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZD4KLSAgICAgIDwlCi0gICAgICBpZiAoIWZyYWcudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKSkgewotICAgICAgJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgIDwlCi0gICAgICB9Ci0gICAgICAlPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1ZBTFVFUyIpJT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLTwvc3Bhbj4KLTwlCi1TdHJpbmdbXSB2YWx1ZXMgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpOwotaW50IGkgPSAwOwotaWYgKHZhbHVlcyAhPSBudWxsKSB7Ci0gIGZvciAoIDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGFkZFNpbXBsZUF0b21pY1Jvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT12YWx1ZXNbaV0lPicsICc8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPicpOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotZm9yICggOyBpIDwgeHNkQ29uZmlnLmdldE1pbk9jY3VycygpOyBpKyspIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGFkZFNpbXBsZUF0b21pY1Jvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT1mcmFnLmdldElEKCklPicsIG51bGwsICc8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPicpOwotICA8L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RGaXhXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWMyMzAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0Rml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlTGlzdEZyYWdtZW50IGZyYWcgPSAoSVhTRFNpbXBsZUxpc3RGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLWZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgU3RyaW5nIGNoaWxkRnJhZ0lEOwotICBpZiAoaSA8IGNoaWxkRnJhZ3MubGVuZ3RoKSB7Ci0gICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICBjaGlsZEZyYWdJRCA9IGNoaWxkRnJhZy5nZXRJRCgpOwotICB9Ci0gIGVsc2UgewotICAgIGNoaWxkRnJhZ0lEID0gZnJhZy5jcmVhdGVMaXN0SW5zdGFuY2UoKTsKLSAgICBjaGlsZEZyYWcgPSBmcmFnLmdldEZyYWdtZW50KGNoaWxkRnJhZ0lEKTsKLSAgfQotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnSUQpOwotJT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Y2hpbGRGcmFnSUQlPiI+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08JQotfQotJT4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdFJGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdFJGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMjg2MTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RTaW1wbGVMaXN0RnJhZ21lbnQgZnJhZyA9IChJWFNEU2ltcGxlTGlzdEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1JWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLSU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci08JQotZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZEZyYWdzLmxlbmd0aDsgaSsrKSB7Ci0gIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdzW2ldLmdldElEKCkpOwotJT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWdzW2ldLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwlCi19Ci0lPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZWJiYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RTaW1wbGVMaXN0RnJhZ21lbnQgZnJhZyA9IChJWFNEU2ltcGxlTGlzdEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfSVRFTVMiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgICBTdHJpbmcgY2hpbGRGcmFnSUQ7Ci0gICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICAgIGNoaWxkRnJhZ0lEID0gY2hpbGRGcmFnLmdldElEKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY2hpbGRGcmFnSUQgPSBmcmFnLmNyZWF0ZUxpc3RJbnN0YW5jZSgpOwotICAgICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gICAgfQotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1jaGlsZEZyYWdJRCU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWcuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvbkZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25GaXhXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWQ4MzQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvbkZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlVW5pb25GcmFnbWVudCBmcmFnID0gKElYU0RTaW1wbGVVbmlvbkZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBjaGFuZ2VVbmlvbk1lbWJlclR5cGUoc2VsZWN0KSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3Qub3B0aW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIHRhYmxlQ29udGFpbmVySUQgPSAnPCU9RnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQlPic7Ci0gICAgICB0YWJsZUNvbnRhaW5lcklEICs9IHNlbGVjdC5vcHRpb25zKGkpLnZhbHVlOwotICAgICAgc2hvd1RhYmxlKHRhYmxlQ29udGFpbmVySUQsIHNlbGVjdC5vcHRpb25zKGkpLnNlbGVjdGVkKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93VGFibGUodGFibGVDb250YWluZXJJRCwgc2hvdykgewotICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySUQpOwotICAgIGlmIChzaG93KQotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGVsc2UKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gIH0KLTwvc2NyaXB0PgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIG5vd3JhcD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTklPTl9UWVBFIiklPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjEwMCUiIG5vd3JhcD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTklPTl9NRU1CRVJTIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uW10gbWVtYmVyVHlwZXMgPSBmcmFnLmdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpOwotICBJWFNERnJhZ21lbnRbXSBtZW1iZXJGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgICBpbnQgdHlwZVNlbGVjdGlvbkluZGV4ID0gMDsKLSAgICBTdHJpbmdbXSBuZXdNZW1iZXJGcmFnSURzID0gbmV3IFN0cmluZ1ttZW1iZXJUeXBlcy5sZW5ndGhdOwotICAgIElYU0RGcmFnbWVudFtdIG5ld01lbWJlckZyYWdzID0gbmV3IElYU0RGcmFnbWVudFttZW1iZXJUeXBlcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWVtYmVyVHlwZXMubGVuZ3RoOyBqKyspIHsKLSAgICAgIGlmIChpIDwgbWVtYmVyRnJhZ3MubGVuZ3RoICYmIG1lbWJlckZyYWdzW2ldLmdldFhTRFR5cGVEZWZpbml0aW9uKCkuZ2V0UU5hbWUoKS5lcXVhbHMobWVtYmVyVHlwZXNbal0uZ2V0UU5hbWUoKSkpIHsKLSAgICAgICAgbmV3TWVtYmVyRnJhZ0lEc1tqXSA9IG1lbWJlckZyYWdzW2ldLmdldElEKCk7Ci0gICAgICAgIG5ld01lbWJlckZyYWdzW2pdID0gbWVtYmVyRnJhZ3NbaV07Ci0gICAgICAgIHR5cGVTZWxlY3Rpb25JbmRleCA9IGo7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgbmV3TWVtYmVyRnJhZ0lEc1tqXSA9IGZyYWcuY3JlYXRlVW5pb25JbnN0YW5jZShqKTsKLSAgICAgICAgbmV3TWVtYmVyRnJhZ3Nbal0gPSBmcmFnLmdldEZyYWdtZW50KG5ld01lbWJlckZyYWdJRHNbal0pOwotICAgICAgfQotICAgIH0KLSAgICAlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDxzZWxlY3QgaWQ9IjwlPWZyYWcuZ2V0SUQoKSU+IiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgb25DaGFuZ2U9ImphdmFzY3JpcHQ6Y2hhbmdlVW5pb25NZW1iZXJUeXBlKHRoaXMpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfVU5JT05fVFlQRSIpJT4iPgotICAgICAgICAgIDwlCi0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGsrKykgewotICAgICAgICAgICAgaWYgKGsgPT0gdHlwZVNlbGVjdGlvbkluZGV4KSB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPW5ld01lbWJlckZyYWdJRHNba10lPiIgc2VsZWN0ZWQ+PCU9bWVtYmVyVHlwZXNba10uZ2V0UU5hbWUoKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9bmV3TWVtYmVyRnJhZ0lEc1trXSU+Ij48JT1tZW1iZXJUeXBlc1trXS5nZXRRTmFtZSgpJT4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgbCA9IDA7IGwgPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGwrKykgewotICAgICAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgICAgICBmcmFnSUQuYXBwZW5kKG5ld01lbWJlckZyYWdJRHNbbF0pOwotICAgICAgICAgIFN0cmluZyBtZW1iZXJUYWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQobmV3TWVtYmVyRnJhZ3NbbF0uZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSAgICAgICAgJT4KLSAgICAgICAgPHNwYW4gaWQ9IjwlPW1lbWJlclRhYmxlQ29udGFpbmVySUQlPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPW5ld01lbWJlckZyYWdzW2xdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3NwYW4+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgIHNob3dUYWJsZSgnPCU9bWVtYmVyVGFibGVDb250YWluZXJJRCU+JywgPCU9KGwgPT0gdHlwZVNlbGVjdGlvbkluZGV4KSU+KTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTYxZmU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RTaW1wbGVVbmlvbkZyYWdtZW50IGZyYWcgPSAoSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLUlYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi1mb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRnJhZ3MubGVuZ3RoOyBpKyspIHsKLSAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ3NbaV0uZ2V0SUQoKSk7Ci0lPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNoaWxkRnJhZ3NbaV0uZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPCUKLX0KLSU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uUmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uUmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTYxMTAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlVW5pb25GcmFnbWVudCBmcmFnID0gKElYU0RTaW1wbGVVbmlvbkZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gY2hhbmdlVW5pb25NZW1iZXJUeXBlKHNlbGVjdCkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0Lm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciB0YWJsZUNvbnRhaW5lcklEID0gJzwlPUZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEJT4nOwotICAgICAgdGFibGVDb250YWluZXJJRCArPSBzZWxlY3Qub3B0aW9ucyhpKS52YWx1ZTsKLSAgICAgIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzZWxlY3Qub3B0aW9ucyhpKS5zZWxlY3RlZCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd1RhYmxlKHRhYmxlQ29udGFpbmVySUQsIHNob3cpIHsKLSAgICB2YXIgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAoc2hvdykKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci08L3NjcmlwdD4KLTxhIG5hbWU9IjwlPW5hbWVBbmNob3JJRCU+Ii8+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjcmVhdGVJbnN0YW5jZSgnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4sICc8JT1mcmFnSUQlPicsICc8JT1uYW1lQW5jaG9ySUQlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1pbk9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOSU9OX1RZUEUiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOSU9OX01FTUJFUlMiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgWFNEU2ltcGxlVHlwZURlZmluaXRpb25bXSBtZW1iZXJUeXBlcyA9IGZyYWcuZ2V0TWVtYmVyVHlwZURlZmluaXRpb25zKCk7Ci0gIElYU0RGcmFnbWVudFtdIG1lbWJlckZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZW1iZXJGcmFncy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgaW50IHR5cGVTZWxlY3Rpb25JbmRleCA9IDA7Ci0gICAgU3RyaW5nW10gbmV3TWVtYmVyRnJhZ0lEcyA9IG5ldyBTdHJpbmdbbWVtYmVyVHlwZXMubGVuZ3RoXTsKLSAgICBJWFNERnJhZ21lbnRbXSBuZXdNZW1iZXJGcmFncyA9IG5ldyBJWFNERnJhZ21lbnRbbWVtYmVyVHlwZXMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG1lbWJlclR5cGVzLmxlbmd0aDsgaisrKSB7Ci0gICAgICBpZiAoaSA8IG1lbWJlckZyYWdzLmxlbmd0aCAmJiBtZW1iZXJGcmFnc1tpXS5nZXRYU0RUeXBlRGVmaW5pdGlvbigpLmdldFFOYW1lKCkuZXF1YWxzKG1lbWJlclR5cGVzW2pdLmdldFFOYW1lKCkpKSB7Ci0gICAgICAgIG5ld01lbWJlckZyYWdJRHNbal0gPSBtZW1iZXJGcmFnc1tpXS5nZXRJRCgpOwotICAgICAgICBuZXdNZW1iZXJGcmFnc1tqXSA9IG1lbWJlckZyYWdzW2ldOwotICAgICAgICB0eXBlU2VsZWN0aW9uSW5kZXggPSBqOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIG5ld01lbWJlckZyYWdJRHNbal0gPSBmcmFnLmNyZWF0ZVVuaW9uSW5zdGFuY2Uoaik7Ci0gICAgICAgIG5ld01lbWJlckZyYWdzW2pdID0gZnJhZy5nZXRGcmFnbWVudChuZXdNZW1iZXJGcmFnSURzW2pdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPHNlbGVjdCBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiBvbkNoYW5nZT0iamF2YXNjcmlwdDpjaGFuZ2VVbmlvbk1lbWJlclR5cGUodGhpcykiIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9VTklPTl9UWVBFIiklPiI+Ci0gICAgICAgICAgPCUKLSAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IG1lbWJlclR5cGVzLmxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICBpZiAoayA9PSB0eXBlU2VsZWN0aW9uSW5kZXgpIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9bmV3TWVtYmVyRnJhZ0lEc1trXSU+IiBzZWxlY3RlZD48JT1tZW1iZXJUeXBlc1trXS5nZXRRTmFtZSgpJT4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1uZXdNZW1iZXJGcmFnSURzW2tdJT4iPjwlPW1lbWJlclR5cGVzW2tdLmdldFFOYW1lKCklPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAlPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8JQotICAgICAgICBmb3IgKGludCBsID0gMDsgbCA8IG1lbWJlclR5cGVzLmxlbmd0aDsgbCsrKSB7Ci0gICAgICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgICAgIGZyYWdJRC5hcHBlbmQobmV3TWVtYmVyRnJhZ0lEc1tsXSk7Ci0gICAgICAgICAgU3RyaW5nIG1lbWJlclRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChuZXdNZW1iZXJGcmFnc1tsXS5nZXRJRCgpKS50b1N0cmluZygpOwotICAgICAgICAlPgotICAgICAgICA8c3BhbiBpZD0iPCU9bWVtYmVyVGFibGVDb250YWluZXJJRCU+Ij4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9bmV3TWVtYmVyRnJhZ3NbbF0uZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwvc3Bhbj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgc2hvd1RhYmxlKCc8JT1tZW1iZXJUYWJsZUNvbnRhaW5lcklEJT4nLCA8JT0obCA9PSB0eXBlU2VsZWN0aW9uSW5kZXgpJT4pOwotICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8JQotICB9Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjA1NTkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9pbnZva2Vfd3NkbF9vcGVyYXRpb25faGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9pbnZva2Vfd3NkbF9vcGVyYXRpb25faGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2ZjNDAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvb3Blbl93c2RsX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9vcGVuX3dzZGxfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZmE4MTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9vcGVuX3dzZGxfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL29wZW5fd3NkbF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL29wZW5fd3NkbF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NTViYWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX2JpbmRpbmdfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfYmluZGluZ19ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzODZjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfYmluZGluZ19ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvd3NkbF9vcGVyYXRpb25fbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfb3BlcmF0aW9uX25vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjExYmEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvd3NkbF9vcGVyYXRpb25fbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvd3NkbF9zZXJ2aWNlX25vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWQwOGJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvd3NkbF9zZXJ2aWNlX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy9mcmFnbWVudHRhYmxlcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy9mcmFnbWVudHRhYmxlcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMGNkY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvZnJhZ21lbnR0YWJsZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9jYWxlbmRhcmJyb3dzZXIuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotCi08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHhzZEluZm9EaWFsb2c7Ci0gIHZhciB4c2RJbmZvRGlhbG9nQ2xvc2VkID0gdHJ1ZTsKLSAgdmFyIHJvd0NoZWNrYm94TmFtZSA9ICJyb3dDaGVja2JveE5hbWUiOwotICB2YXIgdW5ib3VuZGVkID0gPCU9RnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEJT47Ci0KLSAgZnVuY3Rpb24gY2hlY2tNYXhPY2N1cnNSZWFjaGVkKHRhYmxlQ29udGFpbmVySUQsIG1heE9jY3VycykgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIGlmIChtYXhPY2N1cnMgIT0gdW5ib3VuZGVkICYmICh0YWJsZS5yb3dzLmxlbmd0aCAtIG51bWJlck9mSGVhZGVyUm93cykgPj0gbWF4T2NjdXJzKSB7Ci0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTUFYX09DQ1VSU19WSU9MQVRJT04iKSklPiIpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKHRhYmxlQ29udGFpbmVySUQsIG1pbk9jY3VycykgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciByb3dzTGVuZ3RoID0gdGFibGUucm93cy5sZW5ndGggLSBudW1iZXJPZkhlYWRlclJvd3M7Ci0gICAgdmFyIGNoZWNrZWRSb3dzID0gMDsKLSAgICBmb3IgKHZhciBpID0gbnVtYmVyT2ZIZWFkZXJSb3dzOyBpIDwgdGFibGUucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIHRhYmxlUm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlUm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgY2hlY2tlZFJvd3MrKzsKLSAgICB9Ci0gICAgaWYgKGNoZWNrZWRSb3dzID09IDApCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpKSU+Iik7Ci0gICAgZWxzZSBpZiAoKHJvd3NMZW5ndGggLSBjaGVja2VkUm93cykgPCBtaW5PY2N1cnMpCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTUlOX09DQ1VSU19WSU9MQVRJT04iKSklPiIpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklEKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gY2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3NBdHRyaWJ1dGUodGFibGVDb250YWluZXJJRCwgbWluT2NjdXJzKSB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHJvd3NMZW5ndGggPSB0YWJsZS5yb3dzLmxlbmd0aCAtIG51bWJlck9mSGVhZGVyUm93czsKLSAgICB2YXIgY2hlY2tlZFJvd3MgPSAwOwotICAgIGZvciAodmFyIGkgPSBudW1iZXJPZkhlYWRlclJvd3M7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdGFibGVSb3cgPSB0YWJsZS5yb3dzW2ldOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGVSb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBjaGVja2VkUm93cysrOwotICAgIH0KLSAgICBpZiAoY2hlY2tlZFJvd3MgPT0gMCkKLSAgICAgIGFsZXJ0KCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIikpJT4iKTsKLSAgICBlbHNlIGlmICgocm93c0xlbmd0aCAtIGNoZWNrZWRSb3dzKSA8IG1pbk9jY3VycykKLSAgICAgIGFsZXJ0KCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9NSU5fT0NDVVJTX1ZJT0xBVElPTiIpKSU+Iik7Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlU2VsZWN0ZWRSb3dzQXR0cmlidXRlKHRhYmxlQ29udGFpbmVySUQpOwotICB9Ci0gIAotICAKLSAgZnVuY3Rpb24gY2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZERhdGVUaW1lUm93cyhjYWxlbmRhclR5cGUsdGFibGVDb250YWluZXJJRCxtaW5PY2N1cnMpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgbmV3Q2FsZW5kYXJUYXJnZXRSb3cgPSBjYWxlbmRhclRhcmdldFJvdzsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSBjb2x1bW5zLml0ZW0oMCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgewotICAgICAgICBpZiAoaS1udW1iZXJPZkhlYWRlclJvd3MgPT0gY2FsZW5kYXJUYXJnZXRSb3cpCi0gICAgICAgICAgbmV3Q2FsZW5kYXJUYXJnZXRSb3cgPSAtMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0NhbGVuZGFyVGFyZ2V0Um93LS07Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChuZXdDYWxlbmRhclRhcmdldFJvdyA9PSAtMSkKLSAgICAgIGNsb3NlQ2FsZW5kYXJCcm93c2VyKCk7Ci0gICAgY2FsZW5kYXJUYXJnZXRSb3cgPSBuZXdDYWxlbmRhclRhcmdldFJvdzsKLSAgICAgIAotICAgIGNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKHRhYmxlQ29udGFpbmVySUQsbWluT2NjdXJzKTsKLTwlCi0gICAvLyBGaXggdGhlIGJyb3dzZS4uLiBsaW5rcy4KLSU+Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIGRhdGVUaW1lVGV4dEZpZWxkID0gY29sdW1ucy5pdGVtKDEpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBzZXREYXRlVGltZUJyb3dzZUxpbmtIcmVmKGNvbHVtbnMuaXRlbSgyKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpLml0ZW0oMCksY2FsZW5kYXJUeXBlLGRhdGVUaW1lVGV4dEZpZWxkLm5hbWUsaS1udW1iZXJPZkhlYWRlclJvd3MpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKHRhYmxlQ29udGFpbmVySUQsIG1heE9jY3VycywgZnJhZ21lbnRJRCwgbmFtZUFuY2hvcklEKSB7Ci0gICAgaWYgKGNoZWNrTWF4T2NjdXJzUmVhY2hlZCh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMpKQotICAgICAgcmV0dXJuOwotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgbmV3Q29sdW1uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICBuZXdDb2x1bW4uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9RnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfSUQlPiIsIGZyYWdtZW50SUQpKTsKLSAgICBuZXdDb2x1bW4uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9RnJhZ21lbnRDb25zdGFudHMuTkFNRV9BTkNIT1JfSUQlPiIsIG5hbWVBbmNob3JJRCkpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2x1bW4pOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKTsKLSAgICBmb3JtWzBdLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9DcmVhdGVJbnN0YW5jZUFjdGlvbkpTUC5qc3AiKSklPiI7Ci0gICAgZm9ybVswXS5zdWJtaXQoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIG9wZW5YU0RJbmZvRGlhbG9nKGxpbmspIHsKLSAgICB4c2RJbmZvRGlhbG9nID0gd2luZG93Lm9wZW4obGluaywgIlhTREluZm9ybWF0aW9uRGlhbG9nIiwgImhlaWdodD01MDAsd2lkdGg9NTAwLHNjcm9sbGJhcnM9bm8scmVzaXphYmxlPXllcyIpOwotICAgIGlmICh4c2RJbmZvRGlhbG9nLmZvY3VzKQotICAgICAgeHNkSW5mb0RpYWxvZy5mb2N1cygpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xvc2VYU0RJbmZvRGlhbG9nKCkKLSAgewotICAgIGlmICgheHNkSW5mb0RpYWxvZ0Nsb3NlZCkKLSAgICAgIHhzZEluZm9EaWFsb2cuY2xvc2UoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHN5bmNocm9uaXplRnJhZ21lbnRWaWV3cyh2aWV3SUQpIHsKLSAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIik7Ci0gICAgaWYgKHZpZXdJRCA9PSAiPCU9RnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UlPiIpCi0gICAgICBmb3JtWzBdLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPUZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfSUQlPiIsIjwlPUZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFJT4iKSk7Ci0gICAgZWxzZQotICAgICAgZm9ybVswXS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX0lEJT4iLCI8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9TT1VSQ0VfVE9fRk9STSU+IikpOwotICAgIGZvcm1bMF0uYWN0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkpTUC5qc3AiKSklPiI7Ci0gICAgZm9ybVswXS5zdWJtaXQoKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkU2ltcGxlQXRvbWljRGF0ZVRpbWVSb3dzKGNhbGVuZGFyVHlwZSx0YWJsZUNvbnRhaW5lcklELGlkLG5hbWUsdmFsdWUsbWF4T2NjdXJzKSB7Ci0gICAgaWYgKGNoZWNrTWF4T2NjdXJzUmVhY2hlZCh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMpKQotICAgICAgcmV0dXJuOwotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGlucHV0LnR5cGUgPSAidGV4dCI7Ci0gICAgaW5wdXQuaWQgPSBpZDsKLSAgICBpbnB1dC5uYW1lID0gbmFtZTsKLSAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKQotICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZTsKLSAgICBpbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoaW5wdXQpOwotICAgIAotICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQoY3JlYXRlRGF0ZVRpbWVCcm93c2VMaW5rKGNhbGVuZGFyVHlwZSxuYW1lLHRhYmxlLnJvd3MubGVuZ3RoLTEpKTsKLSAgICBjb2x1bW4yLndpZHRoID0gIjkwJSI7Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfSAgCi0gIAotICBmdW5jdGlvbiBjcmVhdGVEYXRlVGltZUJyb3dzZUxpbmsoY2FsZW5kYXJUeXBlLG5hbWUscG9zaXRpb24pCi0gIHsKLSAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXREYXRlVGltZUJyb3dzZUxpbmtIcmVmKGxpbmssY2FsZW5kYXJUeXBlLG5hbWUscG9zaXRpb24pOwotICAgIGxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSklPiIpKTsKLSAgICByZXR1cm4gbGluazsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGF0ZVRpbWVCcm93c2VMaW5rSHJlZihsaW5rLGNhbGVuZGFyVHlwZSxuYW1lLHBvc2l0aW9uKQotICB7Ci0gICAgbGluay5ocmVmID0gImphdmFzY3JpcHQ6b3BlbkNhbGVuZGFyQnJvd3NlcigiK2NhbGVuZGFyVHlwZSsiLCdjb250ZW50Ym9yZGVyJywnIituYW1lKyInLCIrcG9zaXRpb24rIikiOwotICAgIHJldHVybiBsaW5rOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvd3NkbGZyYW1lc2V0cy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYzM4NDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvd3NkbGZyYW1lc2V0cy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKQotICB7Ci0gICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfQUNUSU9OU19DT05UQUlORVIlPiJdLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmcmFtZXNldCIpLml0ZW0oMCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NGcmFtZXNldFNpemVzKGZyYW1lc2V0U2l6ZXNGb3JtKQotICB7Ci0gICAgdG9nZ2xlRG91YmxlQ2xpY2tDb2x1bW5UaXRsZSgpOwotICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCA9IGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0KCk7Ci0gICAgdmFyIGFjdGlvbnNDb250YWluZXJGcmFtZXNldCA9IGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLjwlPVdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UJT4udmFsdWUgPSBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldC5jb2xzOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLjwlPVdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiU+LnZhbHVlID0gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0LnJvd3M7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uc3VibWl0KCk7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNTA5YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciB3c2RsTmF2aWdhdG9yQ29udGFpbmVyID0gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9V1NETEZyYW1lTmFtZXMuV1NETF9OQVZJR0FUT1JfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzZGxOYXZpZ2F0b3JUb29sYmFyID0gd3NkbE5hdmlnYXRvckNvbnRhaW5lci5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX1RPT0xCQVIlPiJdOwotICB2YXIgd3NkbE5hdmlnYXRvckNvbnRlbnQgPSB3c2RsTmF2aWdhdG9yQ29udGFpbmVyLmZyYW1lc1siPCU9V1NETEZyYW1lTmFtZXMuV1NETF9OQVZJR0FUT1JfQ09OVEVOVCU+Il07Ci0gIHZhciB3c2RsQWN0aW9uc0NvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfQUNUSU9OU19DT05UQUlORVIlPiJdOwotICB2YXIgd3NkbFByb3BlcnRpZXNDb250YWluZXIgPSB3c2RsQWN0aW9uc0NvbnRhaW5lci5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfUFJPUEVSVElFU19DT05UQUlORVIlPiJdOwotICB2YXIgd3NkbFByb3BlcnRpZXNUb29sYmFyID0gd3NkbFByb3BlcnRpZXNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfVE9PTEJBUiU+Il07Ci0gIHZhciB3c2RsUHJvcGVydGllc0NvbnRlbnQgPSB3c2RsUHJvcGVydGllc0NvbnRhaW5lci5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfUFJPUEVSVElFU19DT05URU5UJT4iXTsKLSAgdmFyIHdzZGxTdGF0dXNDb250YWluZXIgPSB3c2RsQWN0aW9uc0NvbnRhaW5lci5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfU1RBVFVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2RsU3RhdHVzVG9vbGJhciA9IHdzZGxTdGF0dXNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19UT09MQkFSJT4iXTsKLSAgdmFyIHdzZGxTdGF0dXNDb250ZW50ID0gd3NkbFN0YXR1c0NvbnRhaW5lci5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfU1RBVFVTX0NPTlRFTlQlPiJdOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc29hcF9lbnZlbG9wZV94bWwuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NvYXBfZW52ZWxvcGVfeG1sLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JlZWM5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc29hcF9lbnZlbG9wZV94bWwuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT48JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC94bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC4qIiAlPjxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPjwlCi1pbnQgc29hcEVudmVsb3BlVHlwZSA9IEludGVnZXIucGFyc2VJbnQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEUpKTsKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpIHdzZGxQZXJzcGVjdGl2ZS5nZXRPcGVyYXRpb25Ob2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLUlTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZTsKLXN3aXRjaCAoc29hcEVudmVsb3BlVHlwZSkKLXsKLSAgY2FzZSBXU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRV9SRVFVRVNUOgotICAgIHNvYXBNZXNzYWdlID0gKElTT0FQTWVzc2FnZSkgb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT0FQX1JFUVVFU1QpOwotICAgIGJyZWFrOwotICBjYXNlIFdTRExBY3Rpb25JbnB1dHMuU09BUF9FTlZFTE9QRV9UWVBFX1JFU1BPTlNFOgotICBkZWZhdWx0OgotICAgIHNvYXBNZXNzYWdlID0gKElTT0FQTWVzc2FnZSkgb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT0FQX1JFU1BPTlNFKTsKLSAgICBicmVhazsKLX0KLVN0cmluZyBtZXNzYWdlcyA9IHNvYXBNZXNzYWdlLnRvWE1MKCk7Ci0lPjwlPW1lc3NhZ2VzJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX2FjdGlvbnNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX2FjdGlvbnNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlkOTNhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+IiBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfUFJPUEVSVElFU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpJT4iIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTEgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfU1RBVFVTX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9zdGF0dXNfY29udGFpbmVyLmpzcCIpJT4iIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTEgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX25hdmlnYXRvcl9jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTIzNzBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX25hdmlnYXRvcl9jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX25hdmlnYXRvcl90b29sYmFyLmpzcCIpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCIpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNWEyOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgICAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdHJlZXZpZXcuY3NzIikpJT4iPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci0gICAgPC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdHJlZXZpZXcuanMiKSklPiI+Ci0gICAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08JQotICAgIFN0cmluZyBzZWxlY3RlZEFuY2hvck5hbWUgPSAiIjsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBpbnQgZm9jdXNlZE5vZGVJZCA9IG5vZGVNYW5hZ2VyLmdldEZvY3VzZWROb2RlSWQoKTsKLSAgICBTdHJpbmcgZm9jdXNlZEFuY2hvck5hbWUgPSBTdHJpbmcudmFsdWVPZihmb2N1c2VkTm9kZUlkKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkgewotICAgICAgICBzZWxlY3RlZEFuY2hvck5hbWUgPSBzZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotICAgICAgICBpZiAoZm9jdXNlZE5vZGVJZCA9PSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpCi0gICAgICAgICAgICBmb2N1c2VkQW5jaG9yTmFtZSA9IHNlbGVjdGVkQW5jaG9yTmFtZTsKLSAgICB9Ci0lPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBvbkxvYWQ9InNlbGYubG9jYXRpb24uaGFzaD0nIzwlPWZvY3VzZWRBbmNob3JOYW1lJT4nO3NldFNlbGVjdGVkQW5jaG9yTmFtZSgnPCU9c2VsZWN0ZWRBbmNob3JOYW1lJT4nKSIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgICA8ZGl2IGlkPSJ0cmVlY29udGVudGJvcmRlciI+Ci0gICAgICAgIDwlPW5vZGVNYW5hZ2VyLnJlbmRlclRyZWVWaWV3KHJlc3BvbnNlKSU+Ci0gICAgPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzM2EwNGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4gIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgid3NkbC9hY3Rpb25zL1Jlc2l6ZVdTRExGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9Qcm9jZXNzV1NETEZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL25hdmlnYXRvci5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmICh3c2RsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIGVsc2UKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9OQVZJR0FUT1IiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0UmVmcmVzaCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1JFRlJFU0giKTsKLSAgIFN0cmluZyBhbHRDbGVhciA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0NMRUFSIik7Ci0lPiAgICAgICAgICAgCi0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1JlZnJlc2hXU0RMQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0UmVmcmVzaCU+IiB0aXRsZT0iPCU9YWx0UmVmcmVzaCU+Ij48L2E+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvQ2xlYXJXU0RMQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRDbGVhciU+IiB0aXRsZT0iPCU9YWx0Q2xlYXIlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTIxNTFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxmcmFtZXNldCBjb2xzPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDwlCi0gIGlmIChvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5pc1JUTCgpKQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX0FDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDxmcmFtZSBuYW1lPSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX0FDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNjkyMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmU0ODI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08JQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkVG9vbCAhPSBudWxsICYmIHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pIHsKLSAgICAgICAgJT4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICBsb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkVG9vbC5nZXRGb3JtTGluaygpKSklPiI7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fQUNUSU9OX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OT0RFX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcHJvcGVydGllc190b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZWNlNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcHJvcGVydGllc190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoIndzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChXU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL1Byb2Nlc3NXU0RMRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYWN0aW9ucy5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmICh3c2RsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgIHsKLSAgICAgaWYgKHdzZGxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9BQ1RJT05TIiklPjwvdGQ+Ci08JQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgICAgIGlmIChzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIGZvcihpbnQgaT0wOyBpPHRvb2xNYW5hZ2VyLmdldE51bWJlck9mVG9vbHMoKTsgaSsrKSB7Ci0gICAgICAgICAgICBUb29sIHRvb2wgPSAoVG9vbCl0b29sTWFuYWdlci5nZXRUb29sKGkpOwotICAgICAgICAgICAgJT4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PCU9dG9vbC5yZW5kZXJUb29sKHJlc3BvbnNlLGNvbnRyb2xsZXIpJT48L3RkPgotICAgICAgICAgICAgPCUKLSAgICAgICAgfQotICAgIH0KLSU+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9yZXN1bHRfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9yZXN1bHRfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MjcxMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcmVzdWx0X2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIGludCB2aWV3SUQgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0U3RhdHVzQ29udGVudFR5cGUoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzd2l0Y2hSZWFkT25seUZyYWdtZW50c1ZpZXcoKSB7Ci0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9Td2l0Y2hSZWFkT25seUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwIikpJT4iOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBhbGlnbj0icmlnaHQiIGNsYXNzPSJsYWJlbHMiPgotPCUKLSAgICAgICAgaWYgKHZpZXdJRCA9PSB3c2RsUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX1NPVVJDRSkKLSAgICAgICAgeyAgICAgCi0lPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c3dpdGNoUmVhZE9ubHlGcmFnbWVudHNWaWV3KCkiIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NXSVRDSF9UT19GT1JNX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0ZPUk0iKSU+PC9hPgotPCUKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSU+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzd2l0Y2hSZWFkT25seUZyYWdtZW50c1ZpZXcoKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1dJVENIX1RPX1NPVVJDRV9WSUVXIiklPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19TT1VSQ0UiKSU+PC9hPgotPCUKLSAgICAgICAgfQotJT4gICAKLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi0gIGlmICh2aWV3SUQgPT0gd3NkbFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9TT1VSQ0UpCi0gIHsKLSU+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL1JlYWRPbmx5RnJhZ21lbnRzU29hcFZpZXcuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgfQotICBlbHNlCi0gIHsKLSU+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL1JlYWRPbmx5RnJhZ21lbnRzRm9ybVZpZXcuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA4ODQyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgc3RhdHVzQ29udGVudFNyYyA9ICJ3c2RsX3N0YXR1c19jb250ZW50LmpzcCI7Ci0gICBzd2l0Y2ggKHdzZGxQZXJzcGVjdGl2ZS5nZXRTdGF0dXNDb250ZW50VHlwZSgpKQotICAgewotICAgICBjYXNlIFdTRExQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfRk9STToKLSAgICAgICBzdGF0dXNDb250ZW50U3JjID0gIndzZGxfcmVzdWx0X2NvbnRlbnQuanNwIjsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBXU0RMUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX1NPVVJDRToKLSAgICAgCXN0YXR1c0NvbnRlbnRTcmMgPSAid3NkbF9yZXN1bHRfY29udGVudC5qc3AiOwotICAgICAJYnJlYWs7Ci0gICB9Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9TVEFUVVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfc3RhdHVzX3Rvb2xiYXIuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9TVEFUVVNfQ09OVEVOVCU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoc3RhdHVzQ29udGVudFNyYyklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3OTFkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgd3NkbFBlcnNwZWN0aXZlLnNldFN0YXR1c0NvbnRlbnRUeXBlKFdTRExQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9ERUZBVUxUKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8cHJlPgotPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuZ2V0TWVzc2FnZXNGcm9tTGlzdCgpKSU+Ci0gICAgICAgIDwvcHJlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZTA5N2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RsZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoIndzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChXU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zdGF0dXMuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAod3NkbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICB7Ci0gICAgIGlmICh3c2RsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICB9Ci0gICBpZiAoZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9PSBudWxsKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1NUQVRVUyIpJT48L3RkPgotPCUKLSAgIFN0cmluZyBhbHRDbGVhciA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0NMRUFSIik7Ci0lPiAgICAgICAgICAgCi0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IiB0YXJnZXQ9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfU1RBVFVTX0NPTlRFTlQlPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRDbGVhciU+IiB0aXRsZT0iPCU9YWx0Q2xlYXIlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGxfYnJvd3Nlci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGxfYnJvd3Nlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YjZjZGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2Jyb3dzZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubmV0LioiICU+Ci0KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgU3RyaW5nIHdzZGxUeXBlU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLldTRExfVFlQRSk7Ci0gICBpbnQgd3NkbFR5cGUgPSBBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFOwotICAgdHJ5Ci0gICB7Ci0gICAgIHdzZGxUeXBlID0gSW50ZWdlci5wYXJzZUludCh3c2RsVHlwZVN0cmluZyk7Ci0gICB9Ci0gICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0gICB7Ci0gICB9Ci0gICBjb250cm9sbGVyLnNldFdTRExUeXBlKHdzZGxUeXBlKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPgotPCUKLSAgIFN0cmluZyB3c2RsU291cmNlOwotICAgaWYgKHdzZGxUeXBlID09IEFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0UpCi0gICAgIHdzZGxTb3VyY2UgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRVMiKTsKLSAgIGVsc2UKLSAgICAgd3NkbFNvdXJjZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiV1NETF9UWVBFX1NFUlZJQ0VTIik7Ci0gICAgIAotICAgU3RyaW5nQnVmZmVyIHNlc3Npb25JZFBhcmFtID0gbmV3IFN0cmluZ0J1ZmZlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIHNlc3Npb25JZFBhcmFtLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgCi0gICBTdHJpbmdCdWZmZXIgdG9vbGJhckxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsX3Rvb2xiYXIuanNwPyIpOwotICAgdG9vbGJhckxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotJT4KLSAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIlRJVExFX1dTRExfQlJPV1NFUiIsd3NkbFNvdXJjZSklPgotICA8L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5XU0RMX1RPT0xCQVIlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfV1NETF9UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodG9vbGJhckxpbmsudG9TdHJpbmcoKSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPUZyYW1lTmFtZXMuV1NETF9DT05URU5UJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1dTRExfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsIndzZGxfY29udGVudC5qc3AiKSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGxfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGxfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YTkzNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDA1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDUyNCAgIDE0MjQ5OSBqZWZmbGl1QGNhLmlibS5jb20gLSBKZWZmcmV5IExpdQotICogMjAwNzAxMDkgICAxNjk1NTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XZWJTZXJ2aWNlRmluZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV2ViU2VydmljZUNhdGVnb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5uZXQuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBpbnQgd3NkbFR5cGUgPSBjb250cm9sbGVyLmdldFdTRExUeXBlKCk7Ci0gICAKLSAgIFZlY3RvciB3c0luZm9DYWNoZSA9IG5ldyBWZWN0b3IoKTsKLSAgIGludCB3b3Jrc3BhY2VTdGFydCA9IC0xOwotICAgaW50IHdvcmtzcGFjZUVuZCAgID0gLTE7Ci0gICAKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfV1NETF9DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgCi0gIAotICBmdW5jdGlvbiBmaWxsQ2F0ZWdvcmllcygpCi0gIHsKLSAgICB2YXIgeSA9IDA7Ci0gICAgdmFyIHggPSAwOwotICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9BbGwiKSU+IiwiPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfQWxsIiklPiIpOwotICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfRkFWT1JJVEVTIiklPiIsIjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1NPVVJDRV9GQVZPUklURVMiKSU+Iik7Ci08JQotICAgewotICAgICBXZWJTZXJ2aWNlQ2F0ZWdvcnlbXSBjYXRlZ29yaWVzID0gV2ViU2VydmljZUZpbmRlci5pbnN0YW5jZSgpLmdldFdlYlNlcnZpY2VDYXRlZ29yaWVzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGNhdGVnb3JpZXMubGVuZ3RoO2krKykKLSAgICAgewotICAgICAgIFN0cmluZyBsYWJlbCA9IEhUTUxVdGlscy5KU01hbmdsZShjYXRlZ29yaWVzW2ldLmdldExhYmVsKCkpOwotICAgICAgIGlmKGNhdGVnb3JpZXNbaV0uZ2V0SWQoKS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5jYXRlZ29yeS53b3Jrc3BhY2UiKSl7Ci0lPgotICAgIHZhciB5ID0geDsKLTwlICAgIAotICAgICAgIH0gICAgCi0lPiAgICAKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT1sYWJlbCU+IiwiPCU9bGFiZWwlPiIpOwotPCUgICAgICAgCi0gICAgIH0KLSAgIH0gCi0lPgotICAgIGlmIChkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4ub3B0aW9uc1t5XS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgICBmaWxsV1NETEZpbGVzQnlDYXRlZ29yeShkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zW3ldLnZhbHVlKTsKLSAgICB9Ci0gIAotICB9ICAgIAotICAKLSAgZnVuY3Rpb24gZmlsbFdlYlByb2plY3RzKCkKLSAgewotICAgIHZhciB4ID0gMDsKLTwlCi0gICB7Ci0gICAgIElXb3Jrc3BhY2VSb290IGlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IGlXb3Jrc3BhY2VSb290LmdldFByb2plY3RzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHByb2plY3RzLmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBpZiAoIXByb2plY3RzW2ldLmlzT3BlbigpKQotICAgICAgICAgY29udGludWU7Ci0gICAgICAgU3RyaW5nIG5hbWUgPSBIVE1MVXRpbHMuSlNNYW5nbGUocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlBST0pFQ1QlPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT1uYW1lJT4iLCI8JT1uYW1lJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgaWYgKGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5QUk9KRUNUJT4ub3B0aW9ucy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5QUk9KRUNUJT4ub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgICBmaWxsV1NETEZpbGVzKGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5QUk9KRUNUJT4ub3B0aW9uc1swXS52YWx1ZSk7Ci0gICAgfQotICB9Ci0KLTwlISBwcml2YXRlIFZlY3RvciB3c2RsVVJMc18gPSBuZXcgVmVjdG9yKCk7ICU+Ci0KLSAgIGZ1bmN0aW9uIGZpbGxXU0RMRmlsZXNCeUNhdGVnb3J5KHdlYlNlcnZpY2VGaW5kZXJMYWJlbCkKLSAgIHsKLSAgICB2YXIgY3VycmVudE51bWJlck9mT3B0aW9ucyA9IGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9ucy5sZW5ndGg7Ci0gICAgZm9yICh2YXIgaT0wO2k8Y3VycmVudE51bWJlck9mT3B0aW9ucztpKyspCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbMF0gPSBudWxsOwotICAgIGlmICh3ZWJTZXJ2aWNlRmluZGVyTGFiZWwgPT0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9BbGwiKSklPiIpewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2plY3RzIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgCi0gICAgICBmaWxsQWxsV1NETEZpbGVzKCk7Ci0gICAgfQotICAgIGlmICh3ZWJTZXJ2aWNlRmluZGVyTGFiZWwgPT0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfRkFWT1JJVEVTIikpJT4iKXsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9qZWN0cyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7IAotICAgICAgZmlsbEZhdm9yaXRlV1NETEZpbGVzKCk7Ci0gICAgfQotICAgIAotPCUKLSAgIHsKLSAgICAgICAgIAotICAgICBXZWJTZXJ2aWNlRmluZGVyIGZpbmRlciA9IFdlYlNlcnZpY2VGaW5kZXIuaW5zdGFuY2UoKTsKLSAgICAgV2ViU2VydmljZUNhdGVnb3J5W10gY2F0ZWdvcmllcyA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2F0ZWdvcmllcygpOwotICAgICBmb3IgKGludCBpPTA7aTxjYXRlZ29yaWVzLmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBXZWJTZXJ2aWNlQ2F0ZWdvcnkgY2F0ZWdvcnkgPSBjYXRlZ29yaWVzW2ldOwotJT4KLSAgICBpZiAod2ViU2VydmljZUZpbmRlckxhYmVsID09ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY2F0ZWdvcnkuZ2V0TGFiZWwoKSklPiIpCi0gICAgewotICAgIHZhciB4ID0gMDsKLSAgICAgICAgCi08JQotICAgICAgIEl0ZXJhdG9yIGl0ID0gZmluZGVyLmdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeShjYXRlZ29yeSxudWxsKTsKLSAgICAgICBpZihjYXRlZ29yeS5nZXRJZCgpLmVxdWFscygib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLmNhdGVnb3J5LndvcmtzcGFjZSIpKXsKLQotICAgIAkgICB3b3Jrc3BhY2VTdGFydCA9IHdzSW5mb0NhY2hlLnNpemUoKTsKLSAgICAJICAgd29ya3NwYWNlRW5kICAgPSB3b3Jrc3BhY2VTdGFydDsKLSAgICAJICAgCi0gICAgCSAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgICAgCSAgIHdzSW5mb0NhY2hlLmFkZChpdC5uZXh0KCkpOwotICAgICAgICAJICAgd29ya3NwYWNlRW5kKys7Ci0gICAgCSAgIH0KLSU+Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvamVjdHMiKS5zdHlsZS5kaXNwbGF5ID0gIiI7IAotICAgICAgZmlsbFdlYlByb2plY3RzKCk7Ci08JQotICAgICAgIH0KLSAgICAgICBlbHNlewotJT4KLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9qZWN0cyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICAKLTwlICAKLSAgICAgICAgIHdoaWxlKGl0Lmhhc05leHQoKSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgV2ViU2VydmljZUluZm8gd3NpID0gKFdlYlNlcnZpY2VJbmZvKWl0Lm5leHQoKTsKLSAgICAgICAgICAgU3RyaW5nIHdzZGwgPSBIVE1MVXRpbHMuSlNNYW5nbGUod3NpLmdldFdzZGxVUkwoKSk7Ci0lPgotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT13c2RsJT4iLCAiPCU9d3NkbCU+Iik7IAotPCUKLSAgICAgICAgICAgd3NJbmZvQ2FjaGUuYWRkKHdzaSk7Ci0gICAgICAgICB9Ci0gICAgICAgfQotJT4KLSAgICB9Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICB9Ci0gIAotICBmdW5jdGlvbiBmaWxsQWxsV1NETEZpbGVzKCkKLSAgewotICAgIHZhciB4ID0gMDsKLSAgICB2YXIgY3VycmVudE51bWJlck9mT3B0aW9ucyA9IGRvY3VtZW50LmZvcm1zWzBdLndlYlByb2plY3RXU0RMVVJMLm9wdGlvbnMubGVuZ3RoOwotICAgIGZvciAodmFyIGk9MDtpPGN1cnJlbnROdW1iZXJPZk9wdGlvbnM7aSsrKQotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0ud2ViUHJvamVjdFdTRExVUkwub3B0aW9uc1swXSA9IG51bGw7Ci08JQotICAgICBUcmVlU2V0IHVybHMgPSBuZXcgVHJlZVNldCgpOwotICAgICBJdGVyYXRvciB3c0l0ZXJhdG9yID0gd3NJbmZvQ2FjaGUuaXRlcmF0b3IoKTsKLSAgICAgd2hpbGUgKHdzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICB7Ci0gICAgICAgV2ViU2VydmljZUluZm8gd3NJbmZvID0gKFdlYlNlcnZpY2VJbmZvKXdzSXRlcmF0b3IubmV4dCgpOwotICAgICAgIFN0cmluZyB3c2RsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKHdzSW5mby5nZXRXc2RsVVJMKCkpOwotICAgICAgIHVybHMuYWRkKHdzZGwpOwotICAgICB9Ci0gICAgIAotICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgTm9kZU1hbmFnZXIgZmF2b3JpdGVzTm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICBUcmVlRWxlbWVudCBmYXZvcml0ZXNNYWluRWxlbWVudCA9IGZhdm9yaXRlc05vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVXU0RMU2VydmljZXNFbGVtZW50ID0gKFRyZWVFbGVtZW50KShmYXZvcml0ZXNNYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFKS5uZXh0RWxlbWVudCgpKTsKLSAgICAgRW51bWVyYXRpb24gZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnRzID0gZmF2b3JpdGVXU0RMU2VydmljZXNFbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfTk9ERSk7Ci0gICAgIHdoaWxlIChmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgIHsKLSAgICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnQgPSAoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KWZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50cy5uZXh0RWxlbWVudCgpOwotICAgICAgIFN0cmluZyB3c2RsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKChmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudC5nZXRTZXJ2aWNlKCkuZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldExvY2F0aW9uKCkpOwotICAgICAgIHVybHMuYWRkKHdzZGwpOwotICAgICB9Ci0gICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdXJscy5pdGVyYXRvcigpOwotICAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpewotICAgICAgIFN0cmluZyB3c2RsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKGl0ZXJhdG9yLm5leHQoKS50b1N0cmluZygpKTsKLSU+Ci0gICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9uc1t4KytdID0gbmV3IE9wdGlvbigiPCU9d3NkbCU+IiwgIjwlPXdzZGwlPiIpOyAKLTwlCi0KLSAgICAgfQotICAgCi0lPiAgICAgIAotICB9Ci0gIAotICBmdW5jdGlvbiBmaWxsV1NETEZpbGVzKHNlbGVjdGVkV2ViUHJvamVjdE5hbWUpCi0gIHsKLSAgICB2YXIgY3VycmVudE51bWJlck9mT3B0aW9ucyA9IGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9ucy5sZW5ndGg7Ci0gICAgZm9yICh2YXIgaT0wO2k8Y3VycmVudE51bWJlck9mT3B0aW9ucztpKyspCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbMF0gPSBudWxsOwotPCUKLSAgIHsKLQotICAgICBJV29ya3NwYWNlUm9vdCBpV29ya3NwYWNlUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBpV29ya3NwYWNlUm9vdC5nZXRQcm9qZWN0cygpOwotICAgICAgIAotICAgICBmb3IgKGludCBpPTA7aTxwcm9qZWN0cy5sZW5ndGg7aSsrKQotICAgICB7Ci0gICAgICAgaWYgKCFwcm9qZWN0c1tpXS5pc09wZW4oKSkKLSAgICAgICAgIGNvbnRpbnVlOwotICAgICAgIHsKLSU+Ci0gICAgaWYgKHNlbGVjdGVkV2ViUHJvamVjdE5hbWUgPT0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwcm9qZWN0c1tpXS5nZXROYW1lKCkpJT4iKQotICAgIHsKLSAgICAgIHZhciB4PTA7Ci08JQotICAgICAgICAgU3RyaW5nIHBsYXRmb3JtUHJvdG9jb2wgPSAicGxhdGZvcm06L3Jlc291cmNlIjsKLSAgICAgICAgIFN0cmluZyBodHRwUHJvdG9jb2wgPSAiaHR0cDovLyI7Ci0gICAgICAgICBTdHJpbmcgaHR0cHNQcm90b2NvbCA9ICJodHRwczovLyI7Ci0gICAgICAgICB3c2RsVVJMc18ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLQotCQkgSXRlcmF0b3Igd3MgPSB3c0luZm9DYWNoZS5zdWJMaXN0KHdvcmtzcGFjZVN0YXJ0LCB3b3Jrc3BhY2VFbmQpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgIHdoaWxlICh3cy5oYXNOZXh0KCkpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBXZWJTZXJ2aWNlSW5mbyB3c0luZm8gPSAoV2ViU2VydmljZUluZm8pd3MubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIHVybCA9IHdzSW5mby5nZXRXc2RsVVJMKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAvLyBmaWx0ZXIgd3NkbCBVUkxzIHdpdGggc2FtZSBwcm9qZWN0IG5hbWUgYXMgc2VsZWN0ZWQgcHJvamVjdAotICAgICAgICAgIC8vIG9ubHkgbG9vayBhdCB3b3Jrc3BhY2UgVVJMcyByZXR1cm5lZCBmcm9tIHRoZSB3ZWIgc2VydmljZSBmaW5kZXIKLSAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgocGxhdGZvcm1Qcm90b2NvbCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgIC8vc3RyaXAgb2ZmIHBsYXRmb3JtUHJvdG9jb2wgdG8gbG9vayBhdCB0aGUgd29ya3NwYWNlIHBhdGgKLSAgICAgICAgICAgICBQYXRoIHdzZGxQYXRoID0gbmV3IFBhdGgodXJsLnN1YnN0cmluZyhwbGF0Zm9ybVByb3RvY29sLmxlbmd0aCgpKzEpKTsKLSAgICAgICAgICAgICBTdHJpbmcgcGF0aFByb2pOYW1lID0gd3NkbFBhdGguc2VnbWVudCgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgICAgICAgICAgaWYgKHBhdGhQcm9qTmFtZS5lcXVhbHMocHJvamVjdHNbaV0uZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICB3c2RsVVJMc18uYWRkKHVybCk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBhbHNvIGFkZCBhbnkgaHR0cCBvciBodHRwcyBVUkxzIHJldHVybmVkCi0gICAgICAgICAgZWxzZSBpZiAodXJsLnN0YXJ0c1dpdGgoaHR0cFByb3RvY29sKSB8fCB1cmwuc3RhcnRzV2l0aChodHRwc1Byb3RvY29sKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgICB3c2RsVVJMc18uYWRkKHVybCk7Ci0gICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgICAgaWYgKHdzZGxUeXBlID09IEFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0UpCi0gICAgICAgICB7Ci0gICAgICAgICAKLSAgICAgICAgIH0KLQotICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHdzZGxVUkxzXy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICAgewotICAgICAgICAgICAgIFN0cmluZyB3c2RsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKGl0Lm5leHQoKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbeCsrXSA9IG5ldyBPcHRpb24oIjwlPXdzZGwlPiIsICI8JT13c2RsJT4iKTsgCi0gICAgICAgICAgICAgPCUKLSAgICAgICAgIH0KLSU+Ci0gICAgfQotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLSU+Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpbGxGYXZvcml0ZVdTRExGaWxlcygpCi0gIHsKLSAgICB2YXIgY3VycmVudE51bWJlck9mT3B0aW9ucyA9IGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9ucy5sZW5ndGg7Ci0gICAgZm9yICh2YXIgaT0wO2k8Y3VycmVudE51bWJlck9mT3B0aW9ucztpKyspCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbMF0gPSBudWxsOwotICAgIHZhciB4ID0gMDsKLTwlCi0gICBFbnVtZXJhdGlvbiBmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudHMyID0gZmF2b3JpdGVXU0RMU2VydmljZXNFbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfTk9ERSk7Ci0gICB3aGlsZSAoZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnRzMi5oYXNNb3JlRWxlbWVudHMoKSkKLSAgIHsKLSAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudClmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudHMyLm5leHRFbGVtZW50KCk7Ci0gICAgIFN0cmluZyB1cmwgPSBIVE1MVXRpbHMuSlNNYW5nbGUoKGZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50LmdldFNlcnZpY2UoKS5nZXREZXNjcmlwdGlvbnMoKSlbMF0uZ2V0TG9jYXRpb24oKSk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9uc1t4KytdID0gbmV3IE9wdGlvbigiPCU9dXJsJT4iLCI8JT11cmwlPiIpOwotPCUgICAgIAotICAgfQotJT4gIAotICAKLSAgfQotICAKLSAgCi0gIAotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICBmaWxsQ2F0ZWdvcmllcygpOwotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsgICAgICAKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgPGZvcm0gc3R5bGU9Im1hcmdpbi10b3A6MCI+Ci0KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD4gPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfU09VUkNFIiklPiA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDxkaXYgaWQ9IndvcmtiZW5jaCIgPgotICAgICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX0NBVEVHT1JZIiklPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQgbm93cmFwPgotICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4iIG9uQ2hhbmdlPSJmaWxsV1NETEZpbGVzQnlDYXRlZ29yeSh0aGlzLnZhbHVlKSIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1JFRlJFU0giKSU+IiBvbkNsaWNrPSJkb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQoKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+ICAgIAotICAgICAgICAgIDxkaXYgaWQ9InByb2plY3RzIiBzdHlsZT0iZGlzcGxheTpub25lOyI+ICAgICAgICAgIAotICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4gICAgICAgICAgICAgIAotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfU09VUkNFX1dFQlBST0pFQ1RTIiklPjwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwPgotICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJwcm9qZWN0IiBvbkNoYW5nZT0iZmlsbFdTRExGaWxlcyh0aGlzLnZhbHVlKSIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRUZSRVNIIiklPiIgb25DbGljaz0iZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDx0YWJsZT4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgbm93cmFwIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9HTyIpJT4iIG9uQ2xpY2s9InRvcC5vcGVuZXIudGFyZ2V0V1NETFVSTEVsZW1lbnQudmFsdWU9dGhpcy5mb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4udmFsdWU7dG9wLmNsb3NlKCkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBub3dyYXAgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0NBTkNFTCIpJT4iIG9uQ2xpY2s9InRvcC5jbG9zZSgpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgIAotICAgICAgPC9mb3JtPgotICAgIDwvZGl2PgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7Ci08L3NjcmlwdD4gIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDYzYWFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfV1NETF9UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBvblVubG9hZD0idG9wLm9wZW5lci53c2RsV2luZG93Q2xvc2VkPXRydWUiIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciI+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NkbC5naWYiKSklPiIgYWx0PSIiIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9CUk9XU0VSIiklPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdG9wLm9wZW5lci53c2RsV2luZG93Q2xvc2VkID0gZmFsc2U7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NleHBsb3Jlci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZXhwbG9yZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTAwYzEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NleHBsb3Jlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubmV0LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiIlPgotCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gaW5pdFdpbmRvd05hbWUobmFtZSkKLSAgICB7Ci0gICAgICB3aW5kb3cubmFtZSA9IG5hbWU7Ci0gICAgfQotICA8L3NjcmlwdD4KLSAgPCUKLSAgU3RyaW5nIHNlc3Npb25JZCA9IHNlc3Npb24uZ2V0SWQoKTsKLSAgJT4KLSAgPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIj4KLSAgICA8JSEKLSAgICBwcml2YXRlIHZvaWQgcmVzZXRDb250cm9sbGVyKFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uLFN0cmluZyBzZXNzaW9uSWQsSHR0cFNlc3Npb24gc2Vzc2lvbixIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxDb250cm9sbGVyIGNvbnRyb2xsZXIpewotCSAgICAvLyBBZGQgdGhlIHNlc3Npb24gdG8gdGhlIGFwcGxpY2F0aW9uLiBUaGlzIGFsbG93cyB1cyB0byByZXN1cnJlY3QgdGhlIHNlc3Npb24gZXZlbiBpZiB0aGUgYnJvd3NlciBjaG9vc2VzIG5vdCB0byBwYXJ0aWNpcGF0ZS4KLQkgICAgYXBwbGljYXRpb24uc2V0QXR0cmlidXRlKHNlc3Npb25JZCxzZXNzaW9uKTsKLSAgICAKLQkgICAgLy8gU2V0IE1heCBpbmFjdGl2aXR5IHRpbWUgb3V0IHZhbHVlIHRvIDMwbWlucy4KLQkgICAgc2Vzc2lvbi5zZXRNYXhJbmFjdGl2ZUludGVydmFsKDE4MDApOwotCQotCSAgICAvLyBMYXVuY2hPcHRpb25NYW5hZ2VyIChiZWxvdykgaGFuZGxlcyBtb3N0IG9wdGlvbnMsCi0JICAgIC8vIGJ1dCBuZWVkIHRvIGdldCBzdGF0ZSBhbmQgaW5zdGFsbCBsb2NhdGlvbnMgZWFybGllciwKLQkgICAgLy8gc3BlY2lmaWNhbGx5IGJlZm9yZSBjb250cm9sbGVyLmluaXQoKS4KLQkgICAgRW51bWVyYXRpb24gcGFyYW1OYW1lcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyTmFtZXMoKTsKLQkgICAgd2hpbGUgKHBhcmFtTmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0JICAgIHsKLQkgICAgICBTdHJpbmcgcGFyYW1OYW1lID0gKFN0cmluZylwYXJhbU5hbWVzLm5leHRFbGVtZW50KCk7Ci0JICAgICAgU3RyaW5nW10gcGFyYW1WYWx1ZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlclZhbHVlcyhwYXJhbU5hbWUpOwotCSAgICAgIGlmIChwYXJhbVZhbHVlcyAhPSBudWxsICYmIHBhcmFtVmFsdWVzLmxlbmd0aCA+IDApCi0JICAgICAgewotCSAgICAgICAgU3RyaW5nIGRlY29kZWRQYXJhbU5hbWUgPSBVUkxVdGlscy5kZWNvZGUocGFyYW1OYW1lKTsKLQkgICAgICAgIGlmIChkZWNvZGVkUGFyYW1OYW1lLmVxdWFscyhMYXVuY2hPcHRpb25zLkRFRkFVTFRfRkFWT1JJVEVTX0xPQ0FUSU9OKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgY29udHJvbGxlci5zZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24ocGFyYW1WYWx1ZXNbMF0pOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZSBpZiAoZGVjb2RlZFBhcmFtTmFtZS5lcXVhbHMoTGF1bmNoT3B0aW9ucy5TVEFURV9MT0NBVElPTikpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGNvbnRyb2xsZXIuc2V0U3RhdGVMb2NhdGlvbihwYXJhbVZhbHVlc1swXSk7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0JCi0JICAgIC8vIGNvbnRyb2xsZXIuaW5pdCgpCi0JICAgIGNvbnRyb2xsZXIuaW5pdChzZXNzaW9uSWQsYXBwbGljYXRpb24scmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpKTsKLSAgICB9Ci0gICAgJT4KLSAgICA8JS8vcmVzZXRDb250cm9sbGVyKGFwcGxpY2F0aW9uLHNlc3Npb25JZCxzZXNzaW9uLHJlcXVlc3QsY29udHJvbGxlcik7JT4KLSAgPC9qc3A6dXNlQmVhbj4KLSAgPCUKLSAgLy8gQ2hlY2sgaWYgc2Vzc2lvbiBDb250cm9sbGVyIG5lZWRzIHRvIGJlIHJlLWluaXRpYWxpemVkCi0gIGlmIChjb250cm9sbGVyLmdldFNlc3Npb25JZCgpPT1udWxsKXsKLQkgIHJlc2V0Q29udHJvbGxlcihhcHBsaWNhdGlvbixzZXNzaW9uSWQsc2Vzc2lvbixyZXF1ZXN0LGNvbnRyb2xsZXIpOwotICB9Ci0gCi0gIC8vIHByZWxvYWQgZnJvbSBMYXVuY2hPcHRpb25NYW5hZ2VyCi0gIFN0cmluZyBrZXkgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVUkxVdGlscy5lbmNvZGUoV1NFeHBsb3JlckNvbnRleHQuSUQpKTsKLSAgaWYgKGtleSAhPSBudWxsICYmIGtleS5sZW5ndGgoKSA+IDApCi0gIHsKLSAgICBMYXVuY2hPcHRpb25zTWFuYWdlciBtYW5hZ2VyID0gTGF1bmNoT3B0aW9uc01hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLSAgICBtYW5hZ2VyLm1hbmFnZShrZXksIHNlc3Npb25JZCwgYXBwbGljYXRpb24pOwotICB9Ci0gICAgCi0gICU+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvYWN0aW9uZW5naW5lLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVElUTEVfV1NFWFBMT1JFUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPCUKLS8vIHJlc2V0IHBlcnNwZWN0aXZlIGNvbnRlbnQgdG8gYmxhbmsKLWNvbnRyb2xsZXIuZW5hYmxlUGVyc3BlY3RpdmVDb250ZW50QmxhbmsodHJ1ZSk7Ci0lPgotPGZyYW1lc2V0IHJvd3M9IjAsMzUsKiIgYm9yZGVyPTAgb25sb2FkPSJpbml0V2luZG93TmFtZSgnPCU9RnJhbWVOYW1lcy5XSU5ET1dfTkFNRV9XU0VYUExPUkVSX0pTUCU+JykiPgotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QRVJTUEVDVElWRV9XT1JLQVJFQSIpJT4iIGZyYW1lYm9yZGVyPTAgbm9yZXNpemU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1RPT0xCQVIlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJwZXJzcGVjdGl2ZV90b29sYmFyLmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbm9yZXNpemU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX0NPTlRFTlQlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJwZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0NsZWFyTm9kZUNvbmZpcm1KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvQ2xlYXJOb2RlQ29uZmlybUpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YzY4MTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvQ2xlYXJOb2RlQ29uZmlybUpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkwNiAxNTU0MzQgICBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQmFjayBTbGFzaCAnXCcgbm90IGFwcGVhcmluZyBpbiAiV1NJTCBubyBsb25nZXIgcmVzb2x2YWJsZSIgZXJyb3IgbWVzc2FnZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkNsZWFyV1NJTEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfQ09ORklSTV9SRU1PVkVfTk9ERSIsIGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXROb2RlTmFtZSgpKSklPiIpKSB7Ci0gICAgICAgICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDbGVhcldTSUxBY3Rpb24uZ2V0QWN0aW9uTGluayhjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Tm9kZUlkKCkpKSklPiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgICAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgIH0KLSAgICA8L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0NsZWFyV1NJTEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWJiMTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0NsZWFyV1NJTEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkNsZWFyV1NJTEFjdGlvbiIlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgICBDbGVhcldTSUxBY3Rpb24gYWN0aW9uID0gbmV3IENsZWFyV1NJTEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTViOTQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZGNkOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvT3BlbldTSUxBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvT3BlbldTSUxBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWI4Mzc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotT3BlbldTSUxBY3Rpb24gYWN0aW9uID0gbmV3IE9wZW5XU0lMQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotaWYgKCFpbnB1dHNWYWxpZCkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NpbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkgewotICAgICAgICB3c2lsTmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICB3c2lsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9PcGVuV1NJTExpbmtBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkY2JlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9PcGVuV1NJTExpbmtBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuT3BlbldTSUxMaW5rQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotT3BlbldTSUxMaW5rQWN0aW9uIGFjdGlvbiA9IG5ldyBPcGVuV1NJTExpbmtBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci1pZiAoIWlucHV0c1ZhbGlkKSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICB3c2lsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICBpZiAoYWN0aW9uUmVzdWx0KSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKSB7Ci0gICAgICAgIHdzaWxOYXZpZ2F0b3JDb250ZW50LmxvY2F0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgIHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci0gIGVsc2UgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIHdzaWxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvUmVmcmVzaEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZWNjNzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvUmVmcmVzaEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qIiU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgIEFjdGlvbiBhY3Rpb24gPSBSZWZyZXNoQWN0aW9uLm5ld0FjdGlvbihyZXF1ZXN0LCBjb250cm9sbGVyKTsKLQotICAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgIDwlCi0gICAgaWYgKCFhY3Rpb25SZXN1bHQpIHsKLSAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIFJlZnJlc2hXU0lMQWN0aW9uKSB7Ci0gICAgICAgICU+Ci0gICAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvYWN0aW9ucy9DbGVhck5vZGVDb25maXJtSlNQLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgJT4KLSAgICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgICAgIHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgICAgICAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotICAgIDwlCi0gICAgfQotICAgIGVsc2UgewotICAgICU+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICAgICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICA8L3NjcmlwdD4KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9SZXNpemVXU0lMRnJhbWVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhYzUyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9SZXNpemVXU0lMRnJhbWVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBDcmVhdGUgdGhlIGFjdGlvbi4KLSAgIFJlc2l6ZVdTSUxGcmFtZXNBY3Rpb24gYWN0aW9uID0gbmV3IFJlc2l6ZVdTSUxGcmFtZXNBY3Rpb24oY29udHJvbGxlcik7Ci0gICAKLSAgIC8vIFBvcHVsYXRlIHRoZSBhY3Rpb24gd2l0aCB0aGUgcmVxdWVzdCBwcm9wZXJ0aWVzLgotICAgYm9vbGVhbiByZXN1bHQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmIChyZXN1bHQpCi0gICB7Ci0gICAgIGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLSAgICAgCi0gICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldC5zZXRBdHRyaWJ1dGUoImNvbHMiLCI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIpOwotICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5zZXRBdHRyaWJ1dGUoInJvd3MiLCI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iKTsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y5NGM4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxOb2RlQWN0aW9uIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgIFNlbGVjdFdTSUxOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RXU0lMTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgICBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTFRvb2xBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTFRvb2xBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzhkZmQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxUb29sQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICAgU2VsZWN0V1NJTFRvb2xBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdFdTSUxUb29sQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotICAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdkMDdiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24KLSAgIFN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb24gYWN0aW9uID0gbmV3IFN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb24oY29udHJvbGxlcik7Ci0gICAKLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgIAotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICAKLSAgIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotICAgYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1MzEzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSBuZXcgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA5OWNmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uIiU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1BZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5uZXdBY3Rpb24ocmVxdWVzdCwgY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24KLWFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjM1NWVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBBY3Rpb24gYWN0aW9uID0gQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24ubmV3QWN0aW9uKHJlcXVlc3QsIGNvbnRyb2xsZXIpOwotCi0gIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgaWYgKGFjdGlvblJlc3VsdCkKLSAgewotICAgIGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLm1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCk7Ci0gICU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxmYWxzZSkpKSU+IjsKLSAgICA8L3NjcmlwdD4KLSAgPCUKLSAgfQotICBlbHNlCi0gIHsKLSAgJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLSAgPCUKLSAgfQotICAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZDIyZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLldzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbiIlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uID0gbmV3IFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwsZmFsc2UpKSklPiI7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZjOTY0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLkVudW1lcmF0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC9hY3Rpb25zL1dzaWxBZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+Ci08JQotICAgIEVudW1lcmF0aW9uIHBhcmFtTmFtZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlck5hbWVzKCk7Ci0gICAgd2hpbGUgKHBhcmFtTmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIFN0cmluZyBwYXJhbU5hbWUgPSAoU3RyaW5nKXBhcmFtTmFtZXMubmV4dEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtVmFsdWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1OYW1lKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1WYWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPXBhcmFtTmFtZSU+IiB2YWx1ZT0iPCU9cGFyYW1WYWx1ZXNbaV0lPiI+Ci08JQotICAgICAgfQotICAgIH0KLSU+Ci0gIDwvZm9ybT4KLTwvYm9keT4KLTwvaHRtbD4KLTwlCi1pZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoV3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTikgPT0gbnVsbCkgewotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEFkZFRvRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IEFkZFRvRmF2b3JpdGVzQWN0aW9uLm5ld0FjdGlvbihyZXF1ZXN0LCBjb250cm9sbGVyKTsKLSAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gIGlmIChhY3Rpb24uZmF2b3JpdGVFeGlzdHMoKSkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fT1ZFUldSSVRFX0ZBVk9SSVRFUyIpKSU+IikpCi0gICAgICAgIGRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLWVsc2UgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uc3VibWl0KCk7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGFhYzY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uIGFjdGlvbiA9IG5ldyBXc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg0YzgzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBhY3Rpb24gPSBuZXcgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsVG9nZ2xlTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsVG9nZ2xlTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MmNkYjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVdzaWxUb2dnbGVOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBXc2lsVG9nZ2xlTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvT3BlbldTSUxGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9PcGVuV1NJTEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmIzNTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9PcGVuV1NJTEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1XU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLUZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKXdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9PUEVOX1dTSUwiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBoYW5kbGVTdWJtaXQodGhpcykiPgotICA8JQotICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvb3Blbl93c2lsX2hpZ2hsaWdodGVkLmdpZiI7Ci0gIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfT1BFTl9XU0lMIik7Ci0gICU+Ci0gIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICA8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PUEVOX1dTSUxfREVTQyIpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4gICAgICAgIAotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iPgotICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF93c2lsX3VybCI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIldTSUxfVVJMIiklPjwvbGFiZWw+Ci0gICAgICAgIDwlCi0gICAgICAgIGlmICghZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9VUkwpKSB7Ci0gICAgICAgICU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB3c2lsVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMKTsKLSAgICAgICAgaWYgKHdzaWxVUkwgPT0gbnVsbCkKLSAgICAgICAgICB3c2lsVVJMID0gIiI7Ci0gICAgICAgICU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3dzaWxfdXJsIiBuYW1lPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHdzaWxVUkwpJT4iIHNpemU9IjUwIiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPCUKLSAgU3RyaW5nIGluc3BlY3Rpb25UeXBlU3RyaW5nID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShXc2lsQWN0aW9uSW5wdXRzLldTSUxfSU5TUEVDVElPTl9UWVBFKTsKLSAgaW50IGluc3BlY3Rpb25UeXBlID0gV3NpbEFjdGlvbklucHV0cy5XU0lMX0RFVEFJTFM7Ci0gIGlmIChpbnNwZWN0aW9uVHlwZVN0cmluZyAhPSBudWxsKQotICAgIGluc3BlY3Rpb25UeXBlID0gSW50ZWdlci5wYXJzZUludChpbnNwZWN0aW9uVHlwZVN0cmluZyk7Ci0gICU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxsYWJlbCBmb3I9Imluc3BlY3Rpb25fdHlwZSI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0hPT1NFX1dTSUxfSU5TUEVDVElPTl9UWVBFIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPHNlbGVjdCBpZD0iaW5zcGVjdGlvbl90eXBlIiBuYW1lPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLldTSUxfSU5TUEVDVElPTl9UWVBFJT4iIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLldTSUxfREVUQUlMUyU+IiA8JSBpZiAoaW5zcGVjdGlvblR5cGUgPT0gV3NpbEFjdGlvbklucHV0cy5XU0lMX0RFVEFJTFMpIHsgJT5zZWxlY3RlZDwlIH0gJT4+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NJTCIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLldTRExfU0VSVklDRVMlPiIgPCUgaWYgKGluc3BlY3Rpb25UeXBlID09IFdzaWxBY3Rpb25JbnB1dHMuV1NETF9TRVJWSUNFUykgeyAlPnNlbGVjdGVkPCUgfSAlPj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1NFUlZJQ0UiKSU+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9V3NpbEFjdGlvbklucHV0cy5VRERJX1NFUlZJQ0VTJT4iIDwlIGlmIChpbnNwZWN0aW9uVHlwZSA9PSBXc2lsQWN0aW9uSW5wdXRzLlVERElfU0VSVklDRVMpIHsgJT5zZWxlY3RlZDwlIH0gJT4+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9TRVJWSUNFIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuVURESV9CVVNJTkVTU0VTJT4iIDwlIGlmIChpbnNwZWN0aW9uVHlwZSA9PSBXc2lsQWN0aW9uSW5wdXRzLlVERElfQlVTSU5FU1NFUykgeyAlPnNlbGVjdGVkPCUgfSAlPj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VRERJX0JVU0lORVNTIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuV1NJTF9MSU5LUyU+IiA8JSBpZiAoaW5zcGVjdGlvblR5cGUgPT0gV3NpbEFjdGlvbklucHV0cy5XU0lMX0xJTktTKSB7ICU+c2VsZWN0ZWQ8JSB9ICU+PjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTSUxfTElOS1MiKSU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1Byb2Nlc3NXU0lMRnJhbWVzZXRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMmU2ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1Byb2Nlc3NXU0lMRnJhbWVzZXRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChmb3JtQWN0aW9uLnRvU3RyaW5nKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuRlJBTUVfTkFNRSU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT1mb3JtRnJhbWVOYW1lJT4iPgotICA8aW5wdXQgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iPgotICA8aW5wdXQgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiI+Ci08L2Zvcm0+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvVWRkaUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1VkZGlCdXNpbmVzc0RldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiZTljNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvVWRkaUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0TGFuZ3MiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdHMiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgIGludCB2aWV3SUQgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSBudWxsOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IG51bGw7Ci0gICAgU3RyaW5nIGRpc2NvdmVyeVVSTCA9IG51bGw7Ci0gICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgbGluayA9IG51bGw7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KSB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxlID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFVERElMaW5rcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICAgIGxpbmsgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmIChsaW5rICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFic3RyYWN0cy5hZGRBbGwobGluay5nZXRMaW5rQWJzdHJhY3RzKCkpOwotICAgICAgICAgICAgYWJzdHJhY3RMYW5ncy5hZGRBbGwobGluay5nZXRMaW5rQWJzdHJhY3RMYW5ncygpKTsKLSAgICAgICAgICAgIGlucXVpcnlBUEkgPSBsaW5rLmdldFVERElMaW5rSW5xdWlyeUFQSSgpOwotICAgICAgICAgICAgYnVzaW5lc3NLZXkgPSBsaW5rLmdldFVERElMaW5rQnVzaW5lc3NLZXkoKTsKLSAgICAgICAgICAgIGRpc2NvdmVyeVVSTCA9IGxpbmsuZ2V0VURESUxpbmtEaXNjb3ZlcnlVUkwoKTsKLSAgICAgICAgfQotICAgIH0KLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9VRERJX0JVU0lORVNTX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfVURESV9MSU5LX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50ICYmIGxpbmsgIT0gbnVsbCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IiB2YWx1ZT0iPCU9dmlld0lEJT4iPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9BUEkiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9KChpbnF1aXJ5QVBJICE9IG51bGwpID8gaW5xdWlyeUFQSSA6IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BIikpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1NfS0VZIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPSgoYnVzaW5lc3NLZXkgIT0gbnVsbCkgPyBidXNpbmVzc0tleSA6IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BIikpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElTQ09WRVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT0oKGRpc2NvdmVyeVVSTCAhPSBudWxsKSA/IGRpc2NvdmVyeVVSTCA6IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BIikpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9VZGRpU2VydmljZURldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9VZGRpU2VydmljZURldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI5NmMyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvVWRkaVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5SZWZyZXNoQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ibmFtZUxhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibmFtZXMiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICBpbnQgdmlld0lEID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gbnVsbDsKLSAgICBTdHJpbmcgc2VydmljZUtleSA9IG51bGw7Ci0gICAgU3RyaW5nIGRpc2NvdmVyeVVSTCA9IG51bGw7Ci0gICAgV3NpbFNlcnZpY2VFbGVtZW50IHNlcnZpY2UgPSBudWxsOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICAgICBMaXN0RWxlbWVudCBsZSA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICBzZXJ2aWNlID0gKFdzaWxTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgaWYgKHNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgbmFtZXMuYWRkQWxsKHNlcnZpY2UuZ2V0U2VydmljZU5hbWVzKCkpOwotICAgICAgICAgICAgbmFtZUxhbmdzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VOYW1lTGFuZ3MoKSk7Ci0gICAgICAgICAgICBhYnN0cmFjdHMuYWRkQWxsKHNlcnZpY2UuZ2V0U2VydmljZUFic3RyYWN0cygpKTsKLSAgICAgICAgICAgIGFic3RyYWN0TGFuZ3MuYWRkQWxsKHNlcnZpY2UuZ2V0U2VydmljZUFic3RyYWN0TGFuZ3MoKSk7Ci0gICAgICAgICAgICBpbnF1aXJ5QVBJID0gKChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KXNlcnZpY2UpLmdldFVERElTZXJ2aWNlSW5xdWlyeUFQSSgpOwotICAgICAgICAgICAgc2VydmljZUtleSA9ICgoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudClzZXJ2aWNlKS5nZXRVRERJU2VydmljZUtleSgpOwotICAgICAgICAgICAgZGlzY292ZXJ5VVJMID0gKChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KXNlcnZpY2UpLmdldFVERElTZXJ2aWNlRGlzY292ZXJ5VVJMKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVURESV9TRVJWSUNFX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NJTF9TRVJWSUNFX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50ICYmIHNlcnZpY2UgIT0gbnVsbCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IiB2YWx1ZT0iPCU9dmlld0lEJT4iPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlFVSVJZX0FQSSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT0oKGlucXVpcnlBUEkgIT0gbnVsbCkgPyBpbnF1aXJ5QVBJIDogd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkEiKSklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfS0VZIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPSgoc2VydmljZUtleSAhPSBudWxsKSA/IHNlcnZpY2VLZXkgOiB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQSIpKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElTQ09WRVJZX1VSTCIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT0oKGRpc2NvdmVyeVVSTCAhPSBudWxsKSA/IGRpc2NvdmVyeVVSTCA6IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BIikpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsTmFtZVRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTA4ZmI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLVdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci1Xc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0lNUE9SVF9UT19XT1JLQkVOQ0giKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvYWN0aW9ucy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFJT4iIHZhbHVlPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUlPiI+Ci0gIDwlCi0gIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9oaWdobGlnaHRlZC5naWYiOwotICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQVRMX0lNUE9SVF9XU0lMX1RPX1dPUktCRU5DSCIpOwotICAlPgotICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1dTSUxfVE9fV09SS0JFTkNIX0RFU0MiKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTQwIHZhbGlnbj0iY2VudGVyIj4KLSAgICAgICAgPGxhYmVsIGZvcj0ic2VsZWN0X3dvcmtiZW5jaF9wcm9qZWN0X25hbWUiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiV09SS0JFTkNIX1BST0pFQ1RfTkFNRSIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9NDAgdmFsaWduPSJjZW50ZXIiIG5vd3JhcD4KLSAgICAgICAgPCUKLSAgICAgICAgSVdvcmtzcGFjZVJvb3QgaVdvcmtzcGFjZVJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgICAgICBJUHJvamVjdFtdIHByb2plY3RzID0gaVdvcmtzcGFjZVJvb3QuZ2V0UHJvamVjdHMoKTsKLSAgICAgICAgJT4KLSAgICAgICAgPHNlbGVjdCBpZD0ic2VsZWN0X3dvcmtiZW5jaF9wcm9qZWN0X25hbWUiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5XT1JLQkVOQ0hfUFJPSkVDVF9OQU1FJT4iIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghcHJvamVjdHNbaV0uaXNPcGVuKCkpCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gcHJvamVjdHNbaV0uZ2V0TmFtZSgpOwotICAgICAgICAlPgotICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1wcm9qZWN0TmFtZSU+Ij48JT1wcm9qZWN0TmFtZSU+Ci0gICAgICAgIDwlCi0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgICAgICAgfQotICAgICAgICAlPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ltcG9ydGVkX3dzaWxfZmlsZV9uYW1lIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIldTSUxfRklMRV9OQU1FIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSIgd2lkdGg9IjYwJSI+Ci08JQotIFN0cmluZyB3c2lsRmlsZU5hbWUgPSAidGVtcC53c2lsIjsKLSBTdHJpbmcgd3NpbFVSTCA9IHdzaWxFbGVtZW50LmdldFdzaWxVcmwoKTsKLSBpZiAod3NpbFVSTC5lbmRzV2l0aCgiLndzaWwiKSkKLSB7Ci0gICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IE1hdGgubWF4KHdzaWxVUkwubGFzdEluZGV4T2YoIi8iKSwgd3NpbFVSTC5sYXN0SW5kZXhPZigiXFwiKSk7Ci0gICBpZiAobGFzdFNlcGFyYXRvclBvcyA+IDApCi0gICAgIHdzaWxGaWxlTmFtZSA9IHdzaWxVUkwuc3Vic3RyaW5nKGxhc3RTZXBhcmF0b3JQb3MrMSwgd3NpbFVSTC5sZW5ndGgoKSk7Ci0gfQotJT4gICAKLSAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9pbXBvcnRlZF93c2lsX2ZpbGVfbmFtZSIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVEVEX0ZJTEVfTkFNRSU+IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2lsRmlsZU5hbWUpJT4iIHNpemU9NTAgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgIAotICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2RsU2VydmljZURldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2RsU2VydmljZURldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQyMjQzNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NkbFNlcnZpY2VEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLndzaWwuUU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuVmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLkVudW1lcmF0aW9uIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ibmFtZUxhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibmFtZXMiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICAgU3RyaW5nIGJpbmRpbmdUYWJsZSA9ICJiaW5kaW5nVGFibGUiOwotICAgIFN0cmluZyB4YmluZGluZ1RhYmxlID0gInhiaW5kaW5nVGFibGUiOwotCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgIGludCB2aWV3SUQgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV3NpbFNlcnZpY2VFbGVtZW50IHNlcnZpY2UgPSBudWxsOwotICAgIFN0cmluZyB3c2RsVVJMID0gbnVsbDsKLSAgICBWZWN0b3Igd3NkbEJpbmRpbmdzID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICAgICBMaXN0RWxlbWVudCBsZSA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxXU0RMU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICBzZXJ2aWNlID0gKFdzaWxTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgaWYgKHNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgbmFtZXMuYWRkQWxsKHNlcnZpY2UuZ2V0U2VydmljZU5hbWVzKCkpOwotICAgICAgICAgICAgbmFtZUxhbmdzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VOYW1lTGFuZ3MoKSk7Ci0gICAgICAgICAgICBhYnN0cmFjdHMuYWRkQWxsKHNlcnZpY2UuZ2V0U2VydmljZUFic3RyYWN0cygpKTsKLSAgICAgICAgICAgIGFic3RyYWN0TGFuZ3MuYWRkQWxsKHNlcnZpY2UuZ2V0U2VydmljZUFic3RyYWN0TGFuZ3MoKSk7Ci0gICAgICAgICAgICB3c2RsVVJMID0gKChXc2lsV3NkbFNlcnZpY2VFbGVtZW50KXNlcnZpY2UpLmdldFdTRExTZXJ2aWNlVVJMKCk7Ci0gICAgICAgICAgICB3c2RsQmluZGluZ3MgPSAoKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpc2VydmljZSkuZ2V0V1NETEJpbmRpbmcoKTsKLSAgICAgICAgfQotICAgIH0KLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0RMX1NFUlZJQ0VfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfU0VSVklDRV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCAmJiBzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPXZpZXdJRCU+Ij4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVJMIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzZGxVUkwlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxOYW1lVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxBYnN0cmFjdFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWJpbmRpbmdUYWJsZSU+JywnPCU9eGJpbmRpbmdUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGJpbmRpbmdUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX0JJTkRJTkdTIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9YmluZGluZ1RhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRVNQQUNFX1VSSSIpJT48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xPQ0FMX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9IHdzZGxCaW5kaW5ncy5lbGVtZW50cygpOwotICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBRTmFtZSBxbmFtZSA9IChRTmFtZSllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48JT1xbmFtZS5nZXROYW1lc3BhY2VVUkkoKSU+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9cW5hbWUuZ2V0TG9jYWxOYW1lKCklPjwvdGQ+Ci0gICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9YmluZGluZ1RhYmxlJT4nLCc8JT14YmluZGluZ1RhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICAgICAgPCUKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbERldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTg5NzcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0TGFuZ3MiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdHMiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID1jb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSBudWxsOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICAgICB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICAgIGFic3RyYWN0cy5hZGRBbGwod3NpbEVsZW1lbnQuZ2V0V1NJTEFic3RyYWN0cygpKTsKLSAgICAgICAgYWJzdHJhY3RMYW5ncy5hZGRBbGwod3NpbEVsZW1lbnQuZ2V0V1NJTEFic3RyYWN0TGFuZ3MoKSk7Ci0gICAgfQotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1dTSUxfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuVklFV0lEJT4iIHZhbHVlPSI8JT1BY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQlPiI+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT13c2lsRWxlbWVudC5nZXRXc2lsVXJsKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxBYnN0cmFjdFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4KLQotICAgIDwlCi0gICAgfQotICAgICU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWFmZjdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLioiICU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICBUb29sIHNlbGVjdGVkVG9vbCA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotJT4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybVByb3BlcnRpZXMiIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFdTRExTZXJ2aWNlc1Rvb2wpCi0gIHsKLSAgICBpbnQgdmlld0lkID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gKFdzaWxFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIExpc3RFbGVtZW50IGxlID0gd3NpbEVsZW1lbnQuZ2V0QWxsV1NETFNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lkKTsKLSAgICBXc2lsV3NkbFNlcnZpY2VFbGVtZW50IHdzaWxXc2RsU2VydmljZUVsZW1lbnQgPSAoV3NpbFdzZGxTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICBmb3JtUHJvcGVydGllcy5wdXQoIndzZGxVUkwiLHdzaWxXc2RsU2VydmljZUVsZW1lbnQuZ2V0V1NETFNlcnZpY2VVUkwoKSk7Ci0gIH0KLSAgZm9ybVByb3BlcnRpZXMucHV0KCJmb3JtQWN0aW9uTGluayIsIndzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCIpOwotJT4gICAKLTwvanNwOnVzZUJlYW4+Ci08JQotICBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFdTRExTZXJ2aWNlc1Rvb2wpCi0gIHsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0ltcG9ydFdTRExBbmRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gIH0KLSAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpCi0gIHsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk5MTk1ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uTGluayIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtQWN0aW9uTGluay5hcHBlbmQoIndzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AiKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbExpbmtEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbExpbmtEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNjRhM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxMaW5rRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0TGFuZ3MiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdHMiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID1jb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgaW50IHZpZXdJRCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXc2lsV3NpbExpbmtFbGVtZW50IGxpbmsgPSBudWxsOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICAgICBMaXN0RWxlbWVudCBsZSA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxXU0lMTGlua3MoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICBsaW5rID0gKFdzaWxXc2lsTGlua0VsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmIChsaW5rICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFic3RyYWN0TGFuZ3MuYWRkQWxsKGxpbmsuZ2V0TGlua0Fic3RyYWN0TGFuZ3MoKSk7Ci0gICAgICAgICAgICBhYnN0cmFjdHMuYWRkQWxsKGxpbmsuZ2V0TGlua0Fic3RyYWN0cygpKTsKLSAgICAgICAgfQotICAgIH0KLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0lMX0xJTktfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfTElOS19ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCAmJiBsaW5rICE9IG51bGwpIHsKLSAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWxpbmsuZ2V0V1NJTExpbmtMb2NhdGlvbigpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAgICAgCi0KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjVkMTlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWEzZGRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNTFkYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZTEzMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjMDI4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4YzhlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYTA5ODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNGJiZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDFlMzdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFiOTc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL29wZW5fd3NpbF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvb3Blbl93c2lsX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTljYzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvb3Blbl93c2lsX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9vcGVuX3dzaWxfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9vcGVuX3dzaWxfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjE3NzVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvb3Blbl93c2lsX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvd3NpbF9ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvd3NpbF9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1OTE2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL3dzaWxfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxBYnN0cmFjdFRhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxBYnN0cmFjdFRhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM0ZDA4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHMiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCUKLVN0cmluZyBhYnN0cmFjdFRhYmxlID0gImFic3RyYWN0VGFibGUiOwotU3RyaW5nIHhhYnN0cmFjdFRhYmxlID0gInhhYnN0cmFjdFRhYmxlIjsKLVN0cmluZyBzaG93QWxsQWJzdHJhY3RJRCA9ICJzaG93QWxsQWJzdHJhY3RJRCI7Ci1XU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID1jb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gc2hvd0Fic3RyYWN0KHRhYmxlQ29udGFpbmVySUQpIHsKLSAgICAgICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgICAgICB2YXIgaGlkZGVuSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnPCU9c2hvd0FsbEFic3RyYWN0SUQlPicpOwotICAgICAgICA8JQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFic3RyYWN0cy5zaXplKCk7IGkrKykgewotICAgICAgICAlPgotICAgICAgICAgICBhZGRSb3dUb0Fic3RyYWN0VGFibGUodGFibGVCb2R5LAotICAgICAgICAgICAgICAgIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWFic3RyYWN0TGFuZ3MuZWxlbWVudEF0KGkpKSU+IiwKLSAgICAgICAgICAgICAgICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylhYnN0cmFjdHMuZWxlbWVudEF0KGkpKSU+Iik7Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhZGRSb3dUb0Fic3RyYWN0VGFibGUodGFibGVCb2R5LCBsYW5nLCBhYnN0KSB7Ci0gICAgICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgICAgICBhZGRLZXlWYWx1ZVRvUm93KG5ld1JvdywgbGFuZywgYWJzdCk7Ci0gICAgICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICAgIH0KLTwvc2NyaXB0PgotCi08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWFic3RyYWN0VGFibGUlPicsJzwlPXhhYnN0cmFjdFRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14YWJzdHJhY3RUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQlNUUkFDVCIpJT48L3N0cm9uZz4KLSAgICAgICAgPC90ZD4KLSAgICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPWFic3RyYWN0VGFibGUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MQU5HVUFHRSIpJT48L3RoPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjEwMCUiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FCU1RSQUNUIiklPjwvdGg+Ci0gICAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwvZGl2PgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBzaG93QWJzdHJhY3QoJzwlPWFic3RyYWN0VGFibGUlPicpOwotICAgIHR3aXN0SW5pdCgnPCU9YWJzdHJhY3RUYWJsZSU+JywnPCU9eGFic3RyYWN0VGFibGUlPicpOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMjVmMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBpc1NvbWV0aGluZ1NlbGVjdGVkKHRhYmxlQ29udGFpbmVySWQpIHsKLSAgICAgICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzOyBpPHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveENlbGwgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLml0ZW0oMCk7Ci0gICAgICAgICAgICB2YXIgcm93Q2hlY2tib3ggPSByb3dDaGVja2JveENlbGwuY2hpbGROb2Rlc1swXTsKLSAgICAgICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGFsZXJ0KCI8JT1jb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KHRhYmxlQ29udGFpbmVySWQsIGZvcm0sIGxvY2F0aW9uKSB7Ci0gICAgICAgIGlmIChpc1NvbWV0aGluZ1NlbGVjdGVkKHRhYmxlQ29udGFpbmVySWQpKQotICAgICAgICAgICAgc2V0TG9jYXRpb25BbmRTdWJtaXQoZm9ybSwgbG9jYXRpb24pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNldExvY2F0aW9uQW5kU3VibWl0KGZvcm0sIGxvY2F0aW9uKSB7Ci0gICAgICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3JtLmFjdGlvbiA9IGxvY2F0aW9uOwotICAgICAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxOYW1lVGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbE5hbWVUYWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNjBjOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbE5hbWVUYWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHMiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJuYW1lTGFuZ3MiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJuYW1lcyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwlCi1TdHJpbmcgbmFtZVRhYmxlID0gIm5hbWVUYWJsZSI7Ci1TdHJpbmcgeG5hbWVUYWJsZSA9ICJ4bmFtZVRhYmxlIjsKLVN0cmluZyBzaG93QWxsTmFtZUlEID0gInNob3dBbGxOYW1lSUQiOwotV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIHNob3dOYW1lKHRhYmxlQ29udGFpbmVySUQpIHsKLSAgICAgICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgICAgICB2YXIgaGlkZGVuSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnPCU9c2hvd0FsbE5hbWVJRCU+Jyk7Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgJT4KLSAgICAgICAgICAgYWRkUm93VG9OYW1lVGFibGUodGFibGVCb2R5LAotICAgICAgICAgICAgICAgIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKW5hbWVMYW5ncy5lbGVtZW50QXQoaSkpJT4iLAotICAgICAgICAgICAgICAgIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKW5hbWVzLmVsZW1lbnRBdChpKSklPiIpOwotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWRkUm93VG9OYW1lVGFibGUodGFibGVCb2R5LCBsYW5nLCBuYW1lKSB7Ci0gICAgICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgICAgICBhZGRLZXlWYWx1ZVRvUm93KG5ld1JvdywgbGFuZywgbmFtZSk7Ci0gICAgICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICAgIH0KLTwvc2NyaXB0PgotCi08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPW5hbWVUYWJsZSU+JywnPCU9eG5hbWVUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eG5hbWVUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvc3Ryb25nPgotICAgICAgICA8L3RkPgotICAgIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9bmFtZVRhYmxlJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+PC90aD4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwvZGl2PgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBzaG93TmFtZSgnPCU9bmFtZVRhYmxlJT4nKTsKLSAgICB0d2lzdEluaXQoJzwlPW5hbWVUYWJsZSU+JywnPCU9eG5hbWVUYWJsZSU+Jyk7Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2M1YjNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgd3NpbE5hdmlnYXRvckNvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfTkFWSUdBVE9SX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2lsTmF2aWdhdG9yVG9vbGJhciA9IHdzaWxOYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9UT09MQkFSJT4iXTsKLSAgdmFyIHdzaWxOYXZpZ2F0b3JDb250ZW50ID0gd3NpbE5hdmlnYXRvckNvbnRhaW5lci5mcmFtZXNbIjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfTkFWSUdBVE9SX0NPTlRFTlQlPiJdOwotICB2YXIgd3NpbEFjdGlvbnNDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX0FDVElPTlNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyID0gd3NpbEFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzaWxQcm9wZXJ0aWVzVG9vbGJhciA9IHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX1RPT0xCQVIlPiJdOwotICB2YXIgd3NpbFByb3BlcnRpZXNDb250ZW50ID0gd3NpbFByb3BlcnRpZXNDb250YWluZXIuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfQ09OVEVOVCU+Il07Ci0gIHZhciB3c2lsU3RhdHVzQ29udGFpbmVyID0gd3NpbEFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1NUQVRVU19DT05UQUlORVIlPiJdOwotICB2YXIgd3NpbFN0YXR1c1Rvb2xiYXIgPSB3c2lsU3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfVE9PTEJBUiU+Il07Ci0gIHZhciB3c2lsU3RhdHVzQ29udGVudCA9IHdzaWxTdGF0dXNDb250YWluZXIuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1NUQVRVU19DT05URU5UJT4iXTsKLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNTEyNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0KLSAgICBmdW5jdGlvbiB3c2lsSGFuZGxlQ2hlY2tBbGxDbGljayh0YWJsZUNvbnRhaW5lcklkLCBjaGVja0FsbENoZWNrYm94KSB7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93czsgaTx0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgcm93Q2hlY2tib3hDZWxsID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKS5pdGVtKDApOwotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94ID0gcm93Q2hlY2tib3hDZWxsLmNoaWxkTm9kZXNbMF07Ci0gICAgICAgICAgICByb3dDaGVja2JveC5jaGVja2VkID0gY2hlY2tBbGxDaGVja2JveC5jaGVja2VkOwotICAgICAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpIHsKLSAgICAgICAgICAgICAgICBoaWdobGlnaHRSb3codGFibGUucm93c1tpXSwicm93Y29sb3IiKTsKLSAgICAgICAgICAgICAgICByb3dDaGVja2JveC5uYW1lID0gIjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBoaWdobGlnaHRSb3codGFibGUucm93c1tpXSwidGFibGVjZWxscyIpOwotICAgICAgICAgICAgICAgIHJvd0NoZWNrYm94Lm5hbWUgPSAiIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ2hlY2tCb3hJbnB1dChjaGVja2JveCwgaXNDaGVja2VkKSB7Ci0gICAgICAgIGlmIChpc0NoZWNrZWQpIHsKLSAgICAgICAgICAgIGNoZWNrYm94Lm5hbWUgPSAiPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoZWNrYm94Lm5hbWUgPSAiIjsKLSAgICAgICAgfQotICAgICAgICBoYW5kbGVSb3dDaGVja2JveENsaWNrKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdHdpc3RJbml0KHRhYmxlQ29udGFpbmVySWQsdHdpc3RJbWFnZU5hbWUpIHsKLSAgICAgICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJZCk7Ci0gICAgICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICBpZiAodGFibGUucm93cy5sZW5ndGggPiBudW1iZXJPZkhlYWRlclJvd3MpIHsKLSAgICAgICAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICAgICAgICB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLCB0d2lzdEltYWdlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICAgICAgICB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLCB0d2lzdEltYWdlTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhZGRLZXlWYWx1ZVRvUm93KHJvdywga2V5LCB2YWx1ZSkgewotICAgICAgICB2YXIga2V5VGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGtleSk7Ci0gICAgICAgIHZhciB2YWx1ZVRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSk7Ci0gICAgICAgIHZhciBuZXdDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICB2YXIgbmV3Q29sMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgICAgIG5ld0NvbC5hcHBlbmRDaGlsZChrZXlUZXh0KTsKLSAgICAgICAgbmV3Q29sLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAgICAgbmV3Q29sMi5hcHBlbmRDaGlsZCh2YWx1ZVRleHQpOwotICAgICAgICBuZXdDb2wyLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAgICAgcm93LmFwcGVuZENoaWxkKG5ld0NvbCk7Ci0gICAgICAgIHJvdy5hcHBlbmRDaGlsZChuZXdDb2wyKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjbGVhclRhYmxlKHRhYmxlQm9keSwgbnVtSGVhZGVyKSB7Ci0gICAgICAgIGZvcih2YXIgaSA9IG51bUhlYWRlcjsgaSA8IHRhYmxlQm9keS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB0YWJsZUJvZHkuZGVsZXRlUm93KGkpOwotICAgICAgICAgICAgaS0tOwotICAgICAgICB9Ci0gICAgfQotCi08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbGZyYW1lc2V0cy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MjY3M2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbGZyYW1lc2V0cy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKQotICB7Ci0gICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfQUNUSU9OU19DT05UQUlORVIlPiJdLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmcmFtZXNldCIpLml0ZW0oMCk7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRnJhbWVzZXRTaXplcyhmcmFtZXNldFNpemVzRm9ybSkKLSAgewotICAgIHRvZ2dsZURvdWJsZUNsaWNrQ29sdW1uVGl0bGUoKTsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1Xc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+LnZhbHVlID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuY29sczsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1Xc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPi52YWx1ZSA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5yb3dzOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLnN1Ym1pdCgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3ZpZXdzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3ZpZXdzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3ZpZXdzL1VkZGlCdXNpbmVzc1ZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3ZpZXdzL1VkZGlCdXNpbmVzc1ZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjk5MjVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpQnVzaW5lc3NWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdlVERElCdXNpbmVzc0xpc3QgPSAiZGl2VURESUJ1c2luZXNzTGlzdCI7Ci0gICAgU3RyaW5nIHhkaXZVRERJQnVzaW5lc3NMaXN0ID0gInhkaXZVRERJQnVzaW5lc3NMaXN0IjsKLQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9VRERJX0JVU0lORVNTRVMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9VRERJX0xJTktTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX1VERElfQlVTSU5FU1NFU19ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLCc8JT14ZGl2VURESUJ1c2luZXNzTGlzdCU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdlVERElCdXNpbmVzc0xpc3QlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9CVVNJTkVTUyIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdlVERElCdXNpbmVzc0xpc3QlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0id3NpbEhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdlVERElCdXNpbmVzc0xpc3QlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSVRFTV9OVU1CRVIiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VRERJX0JVU0lORVNTX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIExpc3RNYW5hZ2VyIHVkZGlMaW5rcyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJTGlua3MoKTsKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gdWRkaUxpbmtzLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgICAgICAgIGludCBpdGVtTnVtID0gMTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudClzb3J0ZWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB1ZGRpTGluayA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSB1ZGRpTGluay5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IiB2YWx1ZT0iPCU9bGUuZ2V0Vmlld0lkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgJT4KLQkgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgbGUuZ2V0Vmlld0lkKCksIDAsIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1TdHJpbmcudmFsdWVPZihpdGVtTnVtKSU+PC9hPjwvdGQ+Ci0gICAgICAgCSAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgbGUuZ2V0Vmlld0lkKCksIDAsIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1uYW1lJT48L2E+PC90ZD4KLSAgICAgICAJICAgICAgICAgIDwlCi0gICAgICAgCSAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0JICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48JT1TdHJpbmcudmFsdWVPZihpdGVtTnVtKSU+PC90ZD4KLSAgICAgICAJICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5BVkFJTEFCTEVfVURESV9CVVNJTkVTUyIpJT4mbmJzcDs8JT11ZGRpTGluay5nZXRVRERJTGlua0J1c2luZXNzS2V5KCklPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgaXRlbU51bSsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2VURESUJ1c2luZXNzTGlzdCU+JywnPCU9eGRpdlVERElCdXNpbmVzc0xpc3QlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdlVERElCdXNpbmVzc0xpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BRERfVE9fRkFWT1JJVEVTIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFRlJFU0giKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdlVERElCdXNpbmVzc0xpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZWZyZXNoQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICByZXN1bWVQcm94eUxvYWRQYWdlKCk7Ci08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3ZpZXdzL1VkZGlTZXJ2aWNlc1ZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3ZpZXdzL1VkZGlTZXJ2aWNlc1ZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTJlYjRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpU2VydmljZXNWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuUmVmcmVzaEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2VURESVNlcnZpY2VMaXN0ID0gImRpdlVERElTZXJ2aWNlTGlzdCI7Ci0gICAgU3RyaW5nIHhkaXZVRERJU2VydmljZUxpc3QgPSAieGRpdlVERElTZXJ2aWNlTGlzdCI7Ci0KLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9TRVJWSUNFUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci0gICAgPC9zY3JpcHQ+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9VRERJX1NFUlZJQ0VTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX1VERElfU0VSVklDRVNfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLQotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZVRERJU2VydmljZUxpc3QlPicsJzwlPXhkaXZVRERJU2VydmljZUxpc3QlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZVRERJU2VydmljZUxpc3QlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9TRVJWSUNFIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGFsdD0iIiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9IndzaWxIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZVRERJU2VydmljZUxpc3QlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSVRFTV9OVU1CRVIiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VRERJX1NFUlZJQ0VfTkFNRSIpJT48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgTGlzdE1hbmFnZXIgdWRkaVNlcnZpY2VzID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFVERElTZXJ2aWNlcygpOwotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSB1ZGRpU2VydmljZXMuZ2V0TGlzdEVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgaW50IGl0ZW1OdW0gPSAxOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc29ydGVkVmVjdG9yLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3RFbGVtZW50IGxlID0gKExpc3RFbGVtZW50KXNvcnRlZFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgdWRkaVNlcnZpY2UgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSB1ZGRpU2VydmljZS5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IiB2YWx1ZT0iPCU9bGUuZ2V0Vmlld0lkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgICAgIAk8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvYT48L3RkPgotCSAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgbGUuZ2V0Vmlld0lkKCksIDAsIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1uYW1lJT48L2E+PC90ZD4KLQkgICAgICAgICAgICAgICAgIDwlCi0JICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAJPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvdGQ+Ci0JCQkJPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5BVkFJTEFCTEVfVURESV9TRVJWSUNFIiklPiZuYnNwOzwlPXVkZGlTZXJ2aWNlLmdldFVERElTZXJ2aWNlS2V5KCklPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgaXRlbU51bSsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLCc8JT14ZGl2VURESVNlcnZpY2VMaXN0JT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJU2VydmljZUxpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19GQVZPUklURVMiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdlVERElTZXJ2aWNlTGlzdCU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUZSRVNIIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJU2VydmljZUxpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZWZyZXNoQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICByZXN1bWVQcm94eUxvYWRQYWdlKCk7Ci08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3ZpZXdzL1dzZGxTZXJ2aWNlc1ZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3ZpZXdzL1dzZGxTZXJ2aWNlc1ZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWFmNGQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2RsU2VydmljZXNWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLldzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2V1NETExpc3QgPSAiZGl2V1NETExpc3QiOwotICAgIFN0cmluZyB4ZGl2V1NETExpc3QgPSAieGRpdldTRExMaXN0IjsKLQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9XU0RMX1NFUlZJQ0VTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9XU0RMX1NFUlZJQ0VTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX1dTRExfU0VSVklDRVNfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9V3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2V1NETExpc3QlPicsJzwlPXhkaXZXU0RMTGlzdCU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdldTRExMaXN0JT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfU0VSVklDRSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdldTRExMaXN0JT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9IndzaWxIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZXU0RMTGlzdCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JVEVNX05VTUJFUiIpJT48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgTGlzdE1hbmFnZXIgd3NkbFNlcnZpY2VzID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFdTRExTZXJ2aWNlcygpOwotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSB3c2RsU2VydmljZXMuZ2V0TGlzdEVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgaW50IGl0ZW1OdW0gPSAxOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc29ydGVkVmVjdG9yLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3RFbGVtZW50IGxlID0gKExpc3RFbGVtZW50KXNvcnRlZFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIFdzaWxXc2RsU2VydmljZUVsZW1lbnQgd3NkbFNlcnZpY2UgPSAoV3NpbFdzZGxTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHdzZGxVUkwgPSB3c2RsU2VydmljZS5nZXRXU0RMU2VydmljZVVSTCgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPWxlLmdldFZpZXdJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBsZS5nZXRWaWV3SWQoKSwgMCwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPVN0cmluZy52YWx1ZU9mKGl0ZW1OdW0pJT48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjwlPXdzZGxVUkwlPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1OdW0rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdldTRExMaXN0JT4nLCc8JT14ZGl2V1NETExpc3QlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUREX1RPX1dTRExfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdldTRExMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BRERfVE9fRkFWT1JJVEVTIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZXU0RMTGlzdCU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3ZpZXdzL1dzaWxMaW5rc1ZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3ZpZXdzL1dzaWxMaW5rc1ZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmRiODk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2lsTGlua3NWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5PcGVuV1NJTExpbmtBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZXU0lMTGlzdCA9ICJkaXZXU0lMTGlzdCI7Ci0gICAgU3RyaW5nIHhkaXZXU0lMTGlzdCA9ICJ4ZGl2V1NJTExpc3QiOwotCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1dTSUxfTElOS1MiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9XU0lMX0xJTktTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX1dTSUxfTElOS1MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5XU0lMTGlua0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZXU0lMTGlzdCU+JywnPCU9eGRpdldTSUxMaXN0JT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2V1NJTExpc3QlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NJTF9MSU5LUyIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBhbHQ9IiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdldTSUxMaXN0JT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9IndzaWxIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZXU0lMTGlzdCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JVEVNX05VTUJFUiIpJT48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT48L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgTGlzdE1hbmFnZXIgd3NpbExpbmtzID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFdTSUxMaW5rcygpOwotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSB3c2lsTGlua3MuZ2V0TGlzdEVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgaW50IGl0ZW1OdW0gPSAxOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc29ydGVkVmVjdG9yLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3RFbGVtZW50IGxlID0gKExpc3RFbGVtZW50KXNvcnRlZFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIFdzaWxXc2lsTGlua0VsZW1lbnQgd3NpbExpbmsgPSAoV3NpbFdzaWxMaW5rRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVybCA9IHdzaWxMaW5rLmdldFdTSUxMaW5rTG9jYXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuVklFV0lEJT4iIHZhbHVlPSI8JT1sZS5nZXRWaWV3SWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgbGUuZ2V0Vmlld0lkKCksIDAsIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1TdHJpbmcudmFsdWVPZihpdGVtTnVtKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48JT11cmwlPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1OdW0rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdldTSUxMaXN0JT4nLCc8JT14ZGl2V1NJTExpc3QlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUREX1RPX05BVklHQVRPUiIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2V1NJTExpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuV1NJTExpbmtBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNGFiOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfYWN0aW9uc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiIgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSU+IiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1NUQVRVU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfc3RhdHVzX2NvbnRhaW5lci5qc3AiKSU+IiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhM2U1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWwgbGFuZz0iPCU9cmVzcG9uc2UuZ2V0TG9jYWxlKCkuZ2V0TGFuZ3VhZ2UoKSU+Ij4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9UT09MQkFSJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9uYXZpZ2F0b3JfdG9vbGJhci5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05URU5UJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTljMzk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAgICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3RyZWV2aWV3LmNzcyIpKSU+Ij4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3RyZWV2aWV3LmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotPC9oZWFkPgotPCUKLSAgICBTdHJpbmcgc2VsZWN0ZWRBbmNob3JOYW1lID0gIiI7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgaW50IGZvY3VzZWROb2RlSWQgPSBub2RlTWFuYWdlci5nZXRGb2N1c2VkTm9kZUlkKCk7Ci0gICAgU3RyaW5nIGZvY3VzZWRBbmNob3JOYW1lID0gU3RyaW5nLnZhbHVlT2YoZm9jdXNlZE5vZGVJZCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpIHsKLSAgICAgICAgc2VsZWN0ZWRBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSAgICAgICAgaWYgKGZvY3VzZWROb2RlSWQgPT0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKQotICAgICAgICAgICAgZm9jdXNlZEFuY2hvck5hbWUgPSBzZWxlY3RlZEFuY2hvck5hbWU7Ci0gICAgfQotJT4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25Mb2FkPSJzZWxmLmxvY2F0aW9uLmhhc2g9JyM8JT1mb2N1c2VkQW5jaG9yTmFtZSU+JztzZXRTZWxlY3RlZEFuY2hvck5hbWUoJzwlPXNlbGVjdGVkQW5jaG9yTmFtZSU+JykiIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gICAgPGRpdiBpZD0idHJlZWNvbnRlbnRib3JkZXIiPgotICAgICAgICA8JT1ub2RlTWFuYWdlci5yZW5kZXJUcmVlVmlldyhyZXNwb25zZSklPgotICAgIDwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTdiZDNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+ICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIiBvbmRibGNsaWNrPSJwcm9jZXNzRnJhbWVzZXRTaXplcyhkb2N1bWVudC5mb3Jtc1swXSkiPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgZm9ybUFjdGlvbi5hcHBlbmQoIndzaWwvYWN0aW9ucy9SZXNpemVXU0lMRnJhbWVzQWN0aW9uSlNQLmpzcCIpOwotJT4gIAotPC9qc3A6dXNlQmVhbj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtRnJhbWVOYW1lLmFwcGVuZChXc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvZm9ybXMvUHJvY2Vzc1dTSUxGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9uYXZpZ2F0b3IuZ2lmIikpJT4iIGFsdD0iIiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAod3NpbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICBlbHNlCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTkFWSUdBVE9SIiklPjwvdGQ+Ci08JQotICAgU3RyaW5nIGFsdFJlZnJlc2ggPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1JFRlJFU0hfV1NJTCIpOwotICAgU3RyaW5nIGFsdENsZWFyID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9DTEVBUl9XU0lMIik7Ci0lPiAgICAgICAgICAgCi0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwIikpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRSZWZyZXNoJT4iIHRpdGxlPSI8JT1hbHRSZWZyZXNoJT4iPjwvYT48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb25KU1AuanNwIikpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdENsZWFyJT4iIHRpdGxlPSI8JT1hbHRDbGVhciU+Ij48L2E+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOWNjMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGZyYW1lc2V0IGNvbHM9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+IiBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPCUKLSAgaWYgKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmlzUlRMKCkpCi0gIHsKLSAgJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfQUNUSU9OU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX2FjdGlvbnNfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfTkFWSUdBVE9SX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPCUKLSAgfQotICBlbHNlCi0gIHsKLSAgJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfTkFWSUdBVE9SX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfQUNUSU9OU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX2FjdGlvbnNfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPCUKLSAgfQotICAlPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc0YzBlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfQ09OVEVOVCU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MmYzOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyOwotICAgICAgICBpZiAoc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sTWFuYWdlcigpOwotICAgICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgICBpZiAoc2VsZWN0ZWRUb29sICE9IG51bGwgJiYgc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikgewotICAgICAgICAlPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIGxvY2F0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoc2VsZWN0ZWRUb29sLmdldEZvcm1MaW5rKCkpKSU+IjsKLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19BQ1RJT05fU0VMRUNURUQiKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX05PREVfU0VMRUNURUQiKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0gICAgPCUKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk5YjFiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgid3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFdzaWxGcmFtZU5hbWVzLldTSUxfUFJPUEVSVElFU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvZm9ybXMvUHJvY2Vzc1dTSUxGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9hY3Rpb25zLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAod3NpbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICB9Ci0gICBpZiAoZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9PSBudWxsKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0FDVElPTlMiKSU+PC90ZD4KLTwlCi0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZm9yKGludCBpPTA7IGk8dG9vbE1hbmFnZXIuZ2V0TnVtYmVyT2ZUb29scygpOyBpKyspIHsKLSAgICAgICAgICAgIFRvb2wgdG9vbCA9IChUb29sKXRvb2xNYW5hZ2VyLmdldFRvb2woaSk7Ci0gICAgICAgICAgICAlPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48JT10b29sLnJlbmRlclRvb2wocmVzcG9uc2UsY29udHJvbGxlciklPjwvdGQ+Ci0gICAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotJT4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfc3RhdHVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZmFjMTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfc3RhdHVzX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvL0VOIj4KLTxodG1sIGxhbmc9IjwlPXJlc3BvbnNlLmdldExvY2FsZSgpLmdldExhbmd1YWdlKCklPiI+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfU1RBVFVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3N0YXR1c190b29sYmFyLmpzcCIpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfU1RBVFVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3N0YXR1c19jb250ZW50LmpzcCIpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZWJlNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8cHJlPgotPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuZ2V0TWVzc2FnZXNGcm9tTGlzdCgpKSU+Ci0gICAgICAgIDwvcHJlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0Y2JmN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfc3RhdHVzX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Ci08aHRtbCBsYW5nPSI8JT1yZXNwb25zZS5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpJT4iPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ3c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoV3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL2Zvcm1zL1Byb2Nlc3NXU0lMRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3RhdHVzLmdpZiIpKSU+IiBhbHQ9IiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAod3NpbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9TVEFUVVMiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1NUQVRVU19DT05URU5UJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGI5YjJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4KLS5jZHRwcm9qZWN0Ci1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1wYXJzZXIuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYjY2NDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIwN2Q5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI1dlZCBKdW4gMDYgMTQ6MzM6NTMgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjViMGI2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM5OjU5IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzIwYTVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcgotQnVuZGxlLVZlcnNpb246IDEuMC4yMDIucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLnBsdWdpbi5QYXJzZXJQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY287eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmFwYWNoZS53c2lsNGo7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwxLjEuMCkiLAotIG9yZy51ZGRpNGo7YnVuZGxlLXZlcnNpb249IlsyLjAuNCwyLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMyM2Q3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NWFjNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBQYXJzZXIKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPQ29udHJhY3RSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjby9ESVNDT0NvbnRyYWN0UmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYjQwYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPQ29udHJhY3RSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjbzsKLQotcHVibGljIGNsYXNzIERJU0NPQ29udHJhY3RSZWZlcmVuY2UgZXh0ZW5kcyBESVNDT1JlZmVyZW5jZQotewotICBwcml2YXRlIFN0cmluZyBkb2NSZWZfOwotICAKLSAgcHVibGljIERJU0NPQ29udHJhY3RSZWZlcmVuY2UoU3RyaW5nIHJlZixTdHJpbmcgZG9jUmVmKQotICB7Ci0gICAgc3VwZXIocmVmKTsKLSAgICBkb2NSZWZfID0gZG9jUmVmOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERvY1JlZigpCi0gIHsKLSAgICByZXR1cm4gZG9jUmVmXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPUGFyc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09QYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM1YjdiOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09QYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY287Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi0vKioKLSAqIFNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL21zZG5tYWcvaXNzdWVzLzAyLzAyL3htbC9kZWZhdWx0LmFzcHggZm9yIG1vcmUKLSAqIGRldGFpbHMgb24gRElTQ08uCi0gKi8KLXB1YmxpYyBjbGFzcyBESVNDT1BhcnNlcgotewotICBwcml2YXRlIERvY3VtZW50QnVpbGRlciBwYXJzZXJfOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBOU19ESVNDTyA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9kaXNjby8iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBESVNDT1ZFUlkgPSAiZGlzY292ZXJ5IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRElTQ09WRVJZX1JFRiA9ICJkaXNjb3ZlcnlSZWYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBOU19DT05UUkFDVF9SRUYgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvZGlzY28vc2NsLyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENPTlRSQUNUX1JFRiA9ICJjb250cmFjdFJlZiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJFRiA9ICJyZWYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBET0NfUkVGID0gImRvY1JlZiI7Ci0KLSAgcHVibGljIERJU0NPUGFyc2VyKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZG9jQnVpbGRlckZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBkb2NCdWlsZGVyRmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLSAgICAgIHBhcnNlcl8gPSBkb2NCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKQotICAgIHsKLSAgICAgIHBhcnNlcl8gPSBudWxsOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBESVNDT1JlZmVyZW5jZVtdIHBhcnNlKFN0cmluZyBkaXNjb1VSSSwgSW5wdXRTb3VyY2Ugc291cmNlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocGFyc2VyXyAhPSBudWxsKQotICAgIHsKLSAgICAgIERvY3VtZW50IGRvYyA9IHBhcnNlcl8ucGFyc2Uoc291cmNlKTsKLSAgICAgIEVsZW1lbnQgcm9vdEVsZW1lbnQgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBSb290IGVsZW1lbnQgbXVzdCBieSA8ZGlzY286ZGlzY292ZXJ5Ci0gICAgICAvLyB4bWxuczpkaXNjbz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvZGlzY28vIj4KLSAgICAgIGlmIChyb290RWxlbWVudCAhPSBudWxsICYmIHJvb3RFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhOU19ESVNDTykgJiYgcm9vdEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKERJU0NPVkVSWSkpCi0gICAgICB7Ci0gICAgICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSByb290RWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIFZlY3RvciBkaXNjb1JlZmVyZW5jZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAgICAgaWYgKGNoaWxkTm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpY2hpbGROb2RlOwotICAgICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICAgICAgICBTdHJpbmcgbnNVUkkgPSBlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgaWYgKG5zVVJJLmVxdWFscyhOU19ESVNDTykgJiYgbG9jYWxOYW1lLmVxdWFscyhESVNDT1ZFUllfUkVGKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gRElTQ08gbGluay4KLSAgICAgICAgICAgICAgU3RyaW5nIHJlZiA9IGNvbnZlcnRUb0Fic29sdXRlVVJJKGRpc2NvVVJJLCBlbGVtZW50LmdldEF0dHJpYnV0ZShSRUYpKTsKLSAgICAgICAgICAgICAgZGlzY29SZWZlcmVuY2VzLmFkZEVsZW1lbnQobmV3IERJU0NPUmVmZXJlbmNlKHJlZikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobnNVUkkuZXF1YWxzKE5TX0NPTlRSQUNUX1JFRikgJiYgbG9jYWxOYW1lLmVxdWFscyhDT05UUkFDVF9SRUYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBXU0RMIGxpbmsuCi0gICAgICAgICAgICAgIFN0cmluZyByZWYgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSShkaXNjb1VSSSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoUkVGKSk7Ci0gICAgICAgICAgICAgIFN0cmluZyBkb2NSZWYgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSShkaXNjb1VSSSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoRE9DX1JFRikpOwotICAgICAgICAgICAgICBkaXNjb1JlZmVyZW5jZXMuYWRkRWxlbWVudChuZXcgRElTQ09Db250cmFjdFJlZmVyZW5jZShyZWYsIGRvY1JlZikpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbnQgbnVtYmVyT2ZESVNDT1JlZmVyZW5jZXMgPSBkaXNjb1JlZmVyZW5jZXMuc2l6ZSgpOwotICAgICAgICBpZiAobnVtYmVyT2ZESVNDT1JlZmVyZW5jZXMgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgRElTQ09SZWZlcmVuY2VbXSByZWZlcmVuY2VzID0gbmV3IERJU0NPUmVmZXJlbmNlW251bWJlck9mRElTQ09SZWZlcmVuY2VzXTsKLSAgICAgICAgICBkaXNjb1JlZmVyZW5jZXMuY29weUludG8ocmVmZXJlbmNlcyk7Ci0gICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlIGRvY3VtZW50IGlzIG5vdCBhIHZhbGlkIERJU0NPIGRvY3VtZW50LgotICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29udmVydFRvQWJzb2x1dGVVUkkoU3RyaW5nIGRpc2NvVVJJLCBTdHJpbmcgcmVmVVJJKQotICB7Ci0gICAgaWYgKHJlZlVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChyZWZVUkkuaW5kZXhPZigiOi8vIikgPiAtMSkKLSAgICAgIHsKLSAgICAgICAgLy8gcmVmVVJJIGlzIGFscmVhZHkgYWJzb2x1dGUuCi0gICAgICAgIHJldHVybiByZWZVUkk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhYnNvbHV0ZVVSSSA9IG5ldyBTdHJpbmdCdWZmZXIoZGlzY29VUkkuc3Vic3RyaW5nKDAsIE1hdGgubWF4KGRpc2NvVVJJLmxhc3RJbmRleE9mKCdcXCcpLCBkaXNjb1VSSS5sYXN0SW5kZXhPZignLycpICsgMSkpKTsKLSAgICAgICAgYWJzb2x1dGVVUkkuYXBwZW5kKHJlZlVSSSk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZVVSSS50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09SZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRlZDNjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09SZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjbzsKLQotcHVibGljIGNsYXNzIERJU0NPUmVmZXJlbmNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIHJlZl87Ci0gIAotICBwdWJsaWMgRElTQ09SZWZlcmVuY2UoU3RyaW5nIHJlZikKLSAgewotICAgIHJlZl8gPSByZWY7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmKCkKLSAgewotICAgIHJldHVybiByZWZfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L05ldFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L05ldFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZjA0YTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvdmVyeS9OZXRVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci0KLWltcG9ydCBzdW4ubWlzYy5CQVNFNjRFbmNvZGVyOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgTmV0VXRpbHMKLXsKLQotICAvKioKLSAgICogR2V0IHRoZSBqYXZhLm5ldC5VUkxDb25uZWN0aW9uIGdpdmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgVVJMLiBUaGlzIGNsYXNzIGVuc3VyZXMKLSAgICogdGhhdCBwcm94eSBzZXR0aW5ncyBpbiBXU0FEIGFyZSByZXNwZWN0ZWQuCi0gICAqIEBwYXJhbSB1cmxTdHJpbmcgU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgVVJMLgotICAgKiBAcmV0dXJuIGphdmEubmV0LlVSTENEb25uZWN0aW9uIFVSTENvbm5lY3Rpb24gdG8gdGhlIFVSTC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgVVJMQ29ubmVjdGlvbiBnZXRVUkxDb25uZWN0aW9uKFN0cmluZyB1cmxTdHJpbmcpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgdXJsID0gY3JlYXRlVVJMKHVybFN0cmluZyk7Ci0gICAgICBVUkxDb25uZWN0aW9uIHVjID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICBTdHJpbmcgcHJveHlVc2VyTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wcm94eVVzZXJOYW1lIik7Ci0gICAgICBTdHJpbmcgcHJveHlQYXNzd29yZCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wcm94eVBhc3N3b3JkIik7Ci0gICAgICBpZiAocHJveHlVc2VyTmFtZSAhPSBudWxsICYmIHByb3h5UGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHVzZXJOYW1lUGFzc3dvcmQgPSBuZXcgU3RyaW5nQnVmZmVyKHByb3h5VXNlck5hbWUpOwotICAgICAgICB1c2VyTmFtZVBhc3N3b3JkLmFwcGVuZCgnOicpLmFwcGVuZChwcm94eVBhc3N3b3JkKTsKLSAgICAgICAgQkFTRTY0RW5jb2RlciBlbmNvZGVyID0gbmV3IEJBU0U2NEVuY29kZXIoKTsKLSAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gZW5jb2Rlci5lbmNvZGUodXNlck5hbWVQYXNzd29yZC50b1N0cmluZygpLmdldEJ5dGVzKCkpOwotICAgICAgICB1c2VyTmFtZVBhc3N3b3JkLnNldExlbmd0aCgwKTsKLSAgICAgICAgdXNlck5hbWVQYXNzd29yZC5hcHBlbmQoIkJhc2ljICIpLmFwcGVuZChlbmNvZGluZyk7Ci0gICAgICAgIHVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiUHJveHktYXV0aG9yaXphdGlvbiIsdXNlck5hbWVQYXNzd29yZC50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB1YzsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgamF2YS5pby5JbnB1dFN0cmVhbSBmb3IgYSBVUkwgZ2l2ZW4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwuIFRoaXMgY2xhc3MKLSAgICogZW5zdXJlcyB0aGF0IHByb3h5IHNldHRpbmdzIGluIFdTQUQgYXJlIHJlc3BlY3RlZC4KLSAgICogQHBhcmFtIHVybFN0cmluZyBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwuCi0gICAqIEByZXR1cm4gamF2YS5pby5JbnB1dFN0cmVhbSBJbnB1dFN0cmVhbSBmb3IgcmVhZGluZyB0aGUgVVJMIHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgSW5wdXRTdHJlYW0gZ2V0VVJMSW5wdXRTdHJlYW0oU3RyaW5nIHVybFN0cmluZykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFVSTENvbm5lY3Rpb24gdWMgPSBnZXRVUkxDb25uZWN0aW9uKHVybFN0cmluZyk7Ci0gICAgICBpZiAodWMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1Yy5nZXRJbnB1dFN0cmVhbSgpOwotICAgICAgICByZXR1cm4gaXM7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgVVJMIGZyb20gYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB1cmxTdHJpbmcgU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgVVJMLgotICAgKiBAcmV0dXJuIFVSTCBqYXZhLmxhbmcuVVJMIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkwuCi0gICAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFVSTCBjcmVhdGVVUkwoU3RyaW5nIHVybFN0cmluZykgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotICB7Ci0gIAlyZXR1cm4gbmV3IFVSTCh1cmxTdHJpbmcpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L1dlYlNlcnZpY2VzUGFyc2VyRXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L1dlYlNlcnZpY2VzUGFyc2VyRXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNzhiY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvdmVyeS9XZWJTZXJ2aWNlc1BhcnNlckV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeTsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlc1BhcnNlckV4dCBleHRlbmRzIFdlYlNlcnZpY2VzUGFyc2VyIHsKLQotICAgIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXJFeHQoU3RyaW5nIHVyaSkgewotICAgICAgICBzdXBlcih1cmkpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBVUkwgY3JlYXRlVVJMKFN0cmluZyB1cmwpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gTmV0VXRpbHMuY3JlYXRlVVJMKHVybCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMDU5M2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzQ29uc3RhbnRzCi17Ci0gIC8vIE5hbWVzcGFjZQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfV1NETCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VRERJX1YxID0gInVybjp1ZGRpLW9yZzphcGkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVURESV9WMiA9ICJ1cm46dWRkaS1vcmc6YXBpX3YyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VERElfQklORElORyA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vdWRkaS8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfV1NJTF9JTlNQRUNUSU9OID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi8iOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNMaW5rLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc0xpbmsuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4MTBkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc0xpbmsuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNMaW5rCi17Ci0gIHByb3RlY3RlZCBMaW5rIGxpbmtfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNMaW5rKCkKLSAgewotICAgIGxpbmtfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGdldExpbmsoKQotICB7Ci0gICAgcmV0dXJuIGxpbmtfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TGluayhMaW5rIGxpbmspCi0gIHsKLSAgICBsaW5rXyA9IGxpbms7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhiMTU2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkluc3BlY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2VOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLkJ1c2luZXNzRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuaW1wbC5BYnN0cmFjdEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmltcGwuRGVzY3JpcHRpb25JbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5pbXBsLkxpbmtJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5pbXBsLlNlcnZpY2VOYW1lSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuaW1wbC5leHRlbnNpb24udWRkaS5CdXNpbmVzc0Rlc2NyaXB0aW9uSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuaW1wbC5leHRlbnNpb24udWRkaS5TZXJ2aWNlRGVzY3JpcHRpb25JbXBsOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5CdXNpbmVzc0tleTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuU2VydmljZUtleTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0IGltcGxlbWVudHMgSUZhdm9yaXRlc1JlZ2lzdHJ5VHlwZQotewotICBwdWJsaWMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3QoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFJlYWRMb2NhdGlvbigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFdyaXRlTG9jYXRpb24oKTsKLSAgcHJvdGVjdGVkIGFic3RyYWN0IFdTSUxEb2N1bWVudCBnZXRXU0lMRG9jdW1lbnQoKTsKLQotICBwdWJsaWMgdm9pZCBpbml0KCkKLSAgewotICAgIGdldFdTSUxEb2N1bWVudCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFdTSUxEb2N1bWVudCBsb2FkV1NJTERvY3VtZW50KFN0cmluZyBwYXRoLCBib29sZWFuIGZvcmNlKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBXU0lMRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLSAgICAgIHdzaWxEb2MucmVhZChuZXcgRmlsZVJlYWRlcihuZXcgRmlsZShwYXRoKSkpOwotICAgICAgcmV0dXJuIHdzaWxEb2M7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBpZiAoZm9yY2UpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gdDIpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZhdm9yaXRlc1ZlcnNpb24oKQotICB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGluc3BlY3Rpb24uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgaWYgKGFic3RyYWN0cy5sZW5ndGggPiAwKQotICAgICAgcmV0dXJuIGFic3RyYWN0c1swXS5nZXRUZXh0KCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRGYXZvcml0ZXNWZXJzaW9uKFN0cmluZyB2ZXJzaW9uKQotICB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBBYnN0cmFjdCBhYnN0ID0gbmV3IEFic3RyYWN0SW1wbCgpOwotICAgIGFic3Quc2V0VGV4dCh2ZXJzaW9uKTsKLSAgICBpbnNwZWN0aW9uLnJlbW92ZUFic3RyYWN0cygpOwotICAgIGluc3BlY3Rpb24uYWRkQWJzdHJhY3QoYWJzdCk7Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2F2ZSgpIHRocm93cyBXU0lMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBpZiAod3NpbERvYyAhPSBudWxsKQotICAgICAgd3NpbERvYy53cml0ZShnZXRXcml0ZUxvY2F0aW9uKCkpOwotICB9Ci0KLSAgcHVibGljIElGYXZvcml0ZXNVRERJUmVnaXN0cnlbXSBnZXRGYXZvcml0ZXNVRERJUmVnaXN0cmllcygpCi0gIHsKLSAgICBMaW5rW10gbGlua3MgPSBsb2FkVURESVJlZ2lzdHJpZXMoKTsKLSAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlbXSByZWdpc3RyaWVzID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeVtsaW5rcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcmVnaXN0cmllc1tpXSA9IG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnkoKTsKLSAgICAgIHJlZ2lzdHJpZXNbaV0uc2V0TGluayhsaW5rc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiByZWdpc3RyaWVzOwotICB9Ci0KLSAgcHVibGljIElGYXZvcml0ZXNVRERJQnVzaW5lc3NbXSBnZXRGYXZvcml0ZXNVRERJQnVzaW5lc3NlcygpCi0gIHsKLSAgICBMaW5rW10gbGlua3MgPSBsb2FkVURESUJ1c2luZXNzZXMoKTsKLSAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NbXSBidXNpbmVzc2VzID0gbmV3IEZhdm9yaXRlc1VERElCdXNpbmVzc1tsaW5rcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYnVzaW5lc3Nlc1tpXSA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3MoKTsKLSAgICAgIGJ1c2luZXNzZXNbaV0uc2V0TGluayhsaW5rc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiBidXNpbmVzc2VzOwotICB9Ci0KLSAgcHVibGljIElGYXZvcml0ZXNVRERJU2VydmljZVtdIGdldEZhdm9yaXRlc1VERElTZXJ2aWNlcygpCi0gIHsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBsb2FkVURESVNlcnZpY2VzKCk7Ci0gICAgRmF2b3JpdGVzVURESVNlcnZpY2VbXSB1ZGRpU2VydmljZXMgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2Vbc2VydmljZXMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHVkZGlTZXJ2aWNlc1tpXSA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZSgpOwotICAgICAgdWRkaVNlcnZpY2VzW2ldLnNldFNlcnZpY2Uoc2VydmljZXNbaV0pOwotICAgIH0KLSAgICByZXR1cm4gdWRkaVNlcnZpY2VzOwotICB9Ci0KLSAgcHVibGljIElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZVtdIGdldEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlcygpCi0gIHsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBsb2FkVURESVNlcnZpY2VJbnRlcmZhY2VzKCk7Ci0gICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VbXSBzZXJJbnRzID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlW3NlcnZpY2VzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBzZXJJbnRzW2ldID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKCk7Ci0gICAgICBzZXJJbnRzW2ldLnNldFNlcnZpY2Uoc2VydmljZXNbaV0pOwotICAgIH0KLSAgICByZXR1cm4gc2VySW50czsKLSAgfQotCi0gIHB1YmxpYyBJRmF2b3JpdGVzV1NETFtdIGdldEZhdm9yaXRlc1dTRExzKCkKLSAgewotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGxvYWRXU0RMU2VydmljZXMoKTsKLSAgICBGYXZvcml0ZXNXU0RMW10gd3NkbHMgPSBuZXcgRmF2b3JpdGVzV1NETFtzZXJ2aWNlcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgd3NkbHNbaV0gPSBuZXcgRmF2b3JpdGVzV1NETCgpOwotICAgICAgd3NkbHNbaV0uc2V0U2VydmljZShzZXJ2aWNlc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsczsKLSAgfQotCi0gIHB1YmxpYyBJRmF2b3JpdGVzV1NJTFtdIGdldEZhdm9yaXRlc1dTSUxzKCkKLSAgewotICAgIExpbmtbXSBsaW5rcyA9IGxvYWRXU0lMcygpOwotICAgIEZhdm9yaXRlc1dTSUxbXSB3c2lscyA9IG5ldyBGYXZvcml0ZXNXU0lMW2xpbmtzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB3c2lsc1tpXSA9IG5ldyBGYXZvcml0ZXNXU0lMKCk7Ci0gICAgICB3c2lsc1tpXS5zZXRMaW5rKGxpbmtzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzaWxzOwotICB9Ci0KLSAgcHVibGljIExpbmtbXSBsb2FkVURESVJlZ2lzdHJpZXMoKSB7Ci0gICAgcmV0dXJuIGxvYWRMaW5rc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMSk7Ci0gIH0KLSAgICAKLSAgcHVibGljIExpbmtbXSBsb2FkVURESUJ1c2luZXNzZXMoKSB7Ci0gICAgcmV0dXJuIGxvYWRMaW5rc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMik7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRVRERJU2VydmljZXMoKSB7Ci0gICAgcmV0dXJuIGxvYWRTZXJ2aWNlc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMik7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRVRERJU2VydmljZUludGVyZmFjZXMoKSB7Ci0gICAgcmV0dXJuIGxvYWRTZXJ2aWNlc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRXU0RMU2VydmljZXMoKSB7Ci0gICAgcmV0dXJuIGxvYWRTZXJ2aWNlc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfV1NETCk7Ci0gIH0KLQotICBwdWJsaWMgTGlua1tdIGxvYWRXU0lMcygpIHsKLSAgICByZXR1cm4gbG9hZExpbmtzQnlOYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9XU0lMX0lOU1BFQ1RJT04pOwotICB9Ci0KLSAgcHJpdmF0ZSBTZXJ2aWNlW10gbG9hZFNlcnZpY2VzQnlOYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkgewotICAgIFZlY3RvciBzZXJ2aWNlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgaWYgKHdzaWxEb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGluc3BlY3Rpb24uZ2V0U2VydmljZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgICBEZXNjcmlwdGlvbltdIGRlc2MgPSBzZXJ2aWNlc1tpXS5nZXREZXNjcmlwdGlvbnMoKTsKLSAgICAgICAgIGlmIChkZXNjWzBdLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICAgICAgICAgc2VydmljZVZlY3Rvci5hZGQoc2VydmljZXNbaV0pOwotICAgICAgfQotICAgIH0KLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBuZXcgU2VydmljZVtzZXJ2aWNlVmVjdG9yLnNpemUoKV07Ci0gICAgc2VydmljZVZlY3Rvci5jb3B5SW50byhzZXJ2aWNlcyk7Ci0gICAgcmV0dXJuIHNlcnZpY2VzOwotICB9Ci0KLSAgcHJpdmF0ZSBMaW5rW10gbG9hZExpbmtzQnlOYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkgewotICAgIFZlY3RvciBsaW5rVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgaWYgKHdzaWxEb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICAgIExpbmtbXSBsaW5rcyA9IGluc3BlY3Rpb24uZ2V0TGlua3MoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChsaW5rc1tpXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCkuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgICAgbGlua1ZlY3Rvci5hZGQobGlua3NbaV0pOwotICAgICAgfQotICAgIH0KLSAgICBMaW5rW10gbGlua3MgPSBuZXcgTGlua1tsaW5rVmVjdG9yLnNpemUoKV07Ci0gICAgbGlua1ZlY3Rvci5jb3B5SW50byhsaW5rcyk7Ci0gICAgcmV0dXJuIGxpbmtzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESVJlZ2lzdHJ5KElGYXZvcml0ZXNVRERJUmVnaXN0cnkgcmVnaXN0cnkpCi0gIHsKLSAgICBhZGRVRERJUmVnaXN0cnkocmVnaXN0cnkuZ2V0TmFtZSgpLCByZWdpc3RyeS5nZXRJbnF1aXJ5VVJMKCksIHJlZ2lzdHJ5LmdldFB1Ymxpc2hVUkwoKSwgcmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uVVJMKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESUJ1c2luZXNzKElGYXZvcml0ZXNVRERJQnVzaW5lc3MgYnVzaW5lc3MpCi0gIHsKLSAgICBhZGRVRERJQnVzaW5lc3MoYnVzaW5lc3MuZ2V0TmFtZSgpLCBidXNpbmVzcy5nZXRJbnF1aXJ5VVJMKCksIGJ1c2luZXNzLmdldEJ1c2luZXNzS2V5KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESVNlcnZpY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBhZGRVRERJU2VydmljZShzZXJ2aWNlLmdldE5hbWUoKSwgc2VydmljZS5nZXRJbnF1aXJ5VVJMKCksIHNlcnZpY2UuZ2V0U2VydmljZUtleSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSBzZXJ2aWNlSW50ZXJmYWNlKQotICB7Ci0gICAgYWRkVURESVNlcnZpY2VJbnRlcmZhY2Uoc2VydmljZUludGVyZmFjZS5nZXROYW1lKCksIHNlcnZpY2VJbnRlcmZhY2UuZ2V0SW5xdWlyeVVSTCgpLCBzZXJ2aWNlSW50ZXJmYWNlLmdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNXU0RMKElGYXZvcml0ZXNXU0RMIHdzZGwpCi0gIHsKLSAgICBhZGRXU0RMU2VydmljZSh3c2RsLmdldFdzZGxVcmwoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNXU0lMKElGYXZvcml0ZXNXU0lMIHdzaWwpCi0gIHsKLSAgICBhZGRXU0lMTGluayh3c2lsLmdldFdzaWxVcmwoKSk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBhZGRVRERJUmVnaXN0cnkoU3RyaW5nIHJlZ2lzdHJ5TmFtZSwgU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBwdWJsaXNoQVBJLCBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMKSB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBMaW5rIGxpbmsgPSBuZXcgTGlua0ltcGwoKTsKLSAgICAvLyByZWdpc3RyeSBuYW1lCi0gICAgQWJzdHJhY3QgYWJzdCA9IG5ldyBBYnN0cmFjdEltcGwoKTsKLSAgICBhYnN0LnNldFRleHQocmVnaXN0cnlOYW1lKTsKLSAgICBsaW5rLmFkZEFic3RyYWN0KGFic3QpOwotICAgIC8vIGlucXVpcnkgVVJMCi0gICAgQWJzdHJhY3QgYWJzdDIgPSBuZXcgQWJzdHJhY3RJbXBsKCk7Ci0gICAgYWJzdDIuc2V0VGV4dChpbnF1aXJ5QVBJKTsKLSAgICBsaW5rLmFkZEFic3RyYWN0KGFic3QyKTsKLSAgICAvLyBwdWJsaXNoIFVSTAotICAgIEFic3RyYWN0IGFic3QzID0gbmV3IEFic3RyYWN0SW1wbCgpOwotICAgIGlmIChwdWJsaXNoQVBJICE9IG51bGwpCi0gICAgICBhYnN0My5zZXRUZXh0KHB1Ymxpc2hBUEkpOwotICAgIGVsc2UKLSAgICAgIGFic3QzLnNldFRleHQoIiIpOwotICAgIGxpbmsuYWRkQWJzdHJhY3QoYWJzdDMpOwotICAgIC8vIHJlZ2lzdHJhdGlvbiBVUkwKLSAgICBBYnN0cmFjdCBhYnN0NCA9IG5ldyBBYnN0cmFjdEltcGwoKTsKLSAgICBpZiAocmVnaXN0cmF0aW9uVVJMICE9IG51bGwpCi0gICAgICBhYnN0NC5zZXRUZXh0KHJlZ2lzdHJhdGlvblVSTCk7Ci0gICAgZWxzZQotICAgICAgYWJzdDQuc2V0VGV4dCgiIik7Ci0gICAgbGluay5hZGRBYnN0cmFjdChhYnN0NCk7Ci0gICAgLy8gYWRkIG5hbWVzcGFjZQotICAgIGxpbmsuc2V0UmVmZXJlbmNlZE5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjEpOwotICAgIGluc3BlY3Rpb24uYWRkTGluayhsaW5rKTsKLSAgICByZXR1cm4gbGluazsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGFkZFVERElCdXNpbmVzcyhTdHJpbmcgYnVzaW5lc3NOYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIGJ1c2luZXNzS2V5KSB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBMaW5rIGxpbmsgPSBuZXcgTGlua0ltcGwoKTsKLSAgICBBYnN0cmFjdCBhYnN0ID0gbmV3IEFic3RyYWN0SW1wbCgpOwotICAgIGFic3Quc2V0VGV4dChidXNpbmVzc05hbWUpOwotICAgIGxpbmsuYWRkQWJzdHJhY3QoYWJzdCk7Ci0gICAgbGluay5zZXRSZWZlcmVuY2VkTmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMik7Ci0gICAgQnVzaW5lc3NEZXNjcmlwdGlvbiBiZCA9IG5ldyBCdXNpbmVzc0Rlc2NyaXB0aW9uSW1wbCgpOwotICAgIGJkLnNldExvY2F0aW9uKGlucXVpcnlBUEkpOwotICAgIEJ1c2luZXNzS2V5IGtleSA9IG5ldyBCdXNpbmVzc0tleShidXNpbmVzc0tleSk7Ci0gICAgYmQuc2V0QnVzaW5lc3NLZXkoa2V5KTsKLSAgICBsaW5rLnNldEV4dGVuc2lvbkVsZW1lbnQoYmQpOwotICAgIGluc3BlY3Rpb24uYWRkTGluayhsaW5rKTsKLSAgICByZXR1cm4gbGluazsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGFkZFVERElTZXJ2aWNlKFN0cmluZyBzZXJ2aWNlTmFtZSwgU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBzZXJ2aWNlS2V5KSB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBuZXcgU2VydmljZUltcGwoKTsKLSAgICBTZXJ2aWNlTmFtZSBuYW1lID0gbmV3IFNlcnZpY2VOYW1lSW1wbCgpOwotICAgIG5hbWUuc2V0VGV4dChzZXJ2aWNlTmFtZSk7Ci0gICAgc2VydmljZS5hZGRTZXJ2aWNlTmFtZShuYW1lKTsKLSAgICBEZXNjcmlwdGlvbiBkZXNjID0gbmV3IERlc2NyaXB0aW9uSW1wbCgpOwotICAgIGRlc2Muc2V0UmVmZXJlbmNlZE5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjIpOwotICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IG5ldyBTZXJ2aWNlRGVzY3JpcHRpb25JbXBsKCk7Ci0gICAgc2Quc2V0TG9jYXRpb24oaW5xdWlyeUFQSSk7Ci0gICAgU2VydmljZUtleSBrZXkgPSBuZXcgU2VydmljZUtleShzZXJ2aWNlS2V5KTsKLSAgICBzZC5zZXRTZXJ2aWNlS2V5KGtleSk7Ci0gICAgZGVzYy5zZXRFeHRlbnNpb25FbGVtZW50KHNkKTsKLSAgICBzZXJ2aWNlLmFkZERlc2NyaXB0aW9uKGRlc2MpOwotICAgIGluc3BlY3Rpb24uYWRkU2VydmljZShzZXJ2aWNlKTsKLSAgICByZXR1cm4gc2VydmljZTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGFkZFVERElTZXJ2aWNlSW50ZXJmYWNlKFN0cmluZyBzZXJJbnROYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHNlckludEtleSkgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gbmV3IFNlcnZpY2VJbXBsKCk7Ci0gICAgU2VydmljZU5hbWUgbmFtZSA9IG5ldyBTZXJ2aWNlTmFtZUltcGwoKTsKLSAgICBuYW1lLnNldFRleHQoc2VySW50TmFtZSk7Ci0gICAgc2VydmljZS5hZGRTZXJ2aWNlTmFtZShuYW1lKTsKLSAgICBEZXNjcmlwdGlvbiBkZXNjID0gbmV3IERlc2NyaXB0aW9uSW1wbCgpOwotICAgIGRlc2Muc2V0UmVmZXJlbmNlZE5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjEpOwotICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IG5ldyBTZXJ2aWNlRGVzY3JpcHRpb25JbXBsKCk7Ci0gICAgc2Quc2V0TG9jYXRpb24oaW5xdWlyeUFQSSk7Ci0gICAgU2VydmljZUtleSBrZXkgPSBuZXcgU2VydmljZUtleShzZXJJbnRLZXkpOwotICAgIHNkLnNldFNlcnZpY2VLZXkoa2V5KTsKLSAgICBkZXNjLnNldEV4dGVuc2lvbkVsZW1lbnQoc2QpOwotICAgIHNlcnZpY2UuYWRkRGVzY3JpcHRpb24oZGVzYyk7Ci0gICAgaW5zcGVjdGlvbi5hZGRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgYWRkV1NETFNlcnZpY2UoU3RyaW5nIHVybCkgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gbmV3IFNlcnZpY2VJbXBsKCk7Ci0gICAgRGVzY3JpcHRpb24gZGVzYyA9IG5ldyBEZXNjcmlwdGlvbkltcGwoKTsKLSAgICBkZXNjLnNldExvY2F0aW9uKHVybCk7Ci0gICAgZGVzYy5zZXRSZWZlcmVuY2VkTmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfV1NETCk7Ci0gICAgc2VydmljZS5hZGREZXNjcmlwdGlvbihkZXNjKTsKLSAgICBpbnNwZWN0aW9uLmFkZFNlcnZpY2Uoc2VydmljZSk7Ci0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLQotICBwdWJsaWMgTGluayBhZGRXU0lMTGluayhTdHJpbmcgdXJsKSB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBMaW5rIGxpbmsgPSBuZXcgTGlua0ltcGwoKTsKLSAgICBsaW5rLnNldExvY2F0aW9uKHVybCk7Ci0gICAgbGluay5zZXRSZWZlcmVuY2VkTmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfV1NJTF9JTlNQRUNUSU9OKTsKLSAgICBpbnNwZWN0aW9uLmFkZExpbmsobGluayk7Ci0gICAgcmV0dXJuIGxpbms7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJUmVnaXN0cnkoSUZhdm9yaXRlc1VERElSZWdpc3RyeSByZWdpc3RyeSkKLSAgewotICAgIGlmIChyZWdpc3RyeSBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElSZWdpc3RyeSkKLSAgICAgIHJlbW92ZUxpbmsoKChGYXZvcml0ZXNVRERJUmVnaXN0cnkpcmVnaXN0cnkpLmdldExpbmsoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJQnVzaW5lc3MoSUZhdm9yaXRlc1VERElCdXNpbmVzcyBidXNpbmVzcykKLSAgewotICAgIGlmIChidXNpbmVzcyBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElCdXNpbmVzcykKLSAgICAgIHJlbW92ZUxpbmsoKChGYXZvcml0ZXNVRERJQnVzaW5lc3MpYnVzaW5lc3MpLmdldExpbmsoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJU2VydmljZShJRmF2b3JpdGVzVURESVNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGlmIChzZXJ2aWNlIGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2UpCi0gICAgICByZW1vdmVTZXJ2aWNlKCgoRmF2b3JpdGVzVURESVNlcnZpY2Upc2VydmljZSkuZ2V0U2VydmljZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSBzZXJ2aWNlSW50ZXJmYWNlKQotICB7Ci0gICAgaWYgKHNlcnZpY2VJbnRlcmZhY2UgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSkKLSAgICAgIHJlbW92ZVNlcnZpY2UoKChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSlzZXJ2aWNlSW50ZXJmYWNlKS5nZXRTZXJ2aWNlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzV1NETChJRmF2b3JpdGVzV1NETCB3c2RsKQotICB7Ci0gICAgaWYgKHdzZGwgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0RMKQotICAgICAgcmVtb3ZlU2VydmljZSgoKEZhdm9yaXRlc1dTREwpd3NkbCkuZ2V0U2VydmljZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1dTSUwoSUZhdm9yaXRlc1dTSUwgd3NpbCkKLSAgewotICAgIGlmICh3c2lsIGluc3RhbmNlb2YgRmF2b3JpdGVzV1NJTCkKLSAgICAgIHJlbW92ZUxpbmsoKChGYXZvcml0ZXNXU0lMKXdzaWwpLmdldExpbmsoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgaW5zcGVjdGlvbi5yZW1vdmVTZXJ2aWNlKHNlcnZpY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlTGluayhMaW5rIGxpbmspCi0gIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIGluc3BlY3Rpb24ucmVtb3ZlTGluayhsaW5rKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1NlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI3NWZlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1NlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNTZXJ2aWNlCi17Ci0gIHByb3RlY3RlZCBTZXJ2aWNlIHNlcnZpY2VfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNTZXJ2aWNlKCkKLSAgewotICAgIHNlcnZpY2VfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGdldFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZShTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBzZXJ2aWNlXyA9IHNlcnZpY2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESUJ1c2luZXNzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElCdXNpbmVzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDUxY2JmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESUJ1c2luZXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5CdXNpbmVzc0Rlc2NyaXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESUJ1c2luZXNzIGV4dGVuZHMgRmF2b3JpdGVzTGluayBpbXBsZW1lbnRzIElGYXZvcml0ZXNVRERJQnVzaW5lc3MKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VERElCdXNpbmVzcygpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiAobGlua18uZ2V0QWJzdHJhY3RzKCkpWzBdLmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpCi0gIHsKLSAgICByZXR1cm4gKChCdXNpbmVzc0Rlc2NyaXB0aW9uKWxpbmtfLmdldEV4dGVuc2lvbkVsZW1lbnQoKSkuZ2V0TG9jYXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QnVzaW5lc3NLZXkoKQotICB7Ci0gICAgcmV0dXJuICgoQnVzaW5lc3NEZXNjcmlwdGlvbilsaW5rXy5nZXRFeHRlbnNpb25FbGVtZW50KCkpLmdldEJ1c2luZXNzS2V5KCkuZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QnVzaW5lc3NLZXkoU3RyaW5nIGtleSkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNlMjhhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuQWJzdHJhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5wbHVnaW4uUGFyc2VyUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGV4dGVuZHMgRmF2b3JpdGVzTGluayBpbXBsZW1lbnRzIElGYXZvcml0ZXNVRERJUmVnaXN0cnkKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VERElSZWdpc3RyeSgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gKGxpbmtfLmdldEFic3RyYWN0cygpKVswXS5nZXRUZXh0KCk7Ci0gICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiJSIpKQotICAgIHsKLSAgICAgIFN0cmluZyB0cmFuc2xhdGVkTmFtZSA9IFBhcnNlclBsdWdpbi5nZXRNZXNzYWdlKG5hbWUpOwotICAgICAgaWYgKHRyYW5zbGF0ZWROYW1lICE9IG51bGwpCi0gICAgICAgIG5hbWUgPSB0cmFuc2xhdGVkTmFtZTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKQotICB7Ci0gICAgcmV0dXJuIChsaW5rXy5nZXRBYnN0cmFjdHMoKSlbMV0uZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkKLSAgewotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gbGlua18uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgaWYgKGFic3RyYWN0cy5sZW5ndGggPiAyKQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gYWJzdHJhY3RzWzJdLmdldFRleHQoKTsKLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwgJiYgcHVibGlzaFVSTC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHJldHVybiBwdWJsaXNoVVJMOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVnaXN0cmF0aW9uVVJMKCkKLSAgewotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gbGlua18uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgaWYgKGFic3RyYWN0cy5sZW5ndGggPiAzKQotICAgIHsKLSAgICAgIFN0cmluZyByZWdpc3RyYXRpb25VUkwgPSBhYnN0cmFjdHNbM10uZ2V0VGV4dCgpOwotICAgICAgaWYgKHJlZ2lzdHJhdGlvblVSTCAhPSBudWxsICYmIHJlZ2lzdHJhdGlvblVSTC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHJldHVybiByZWdpc3RyYXRpb25VUkw7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIChsaW5rXy5nZXRBYnN0cmFjdHMoKSlbMF0uc2V0VGV4dChuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgICAobGlua18uZ2V0QWJzdHJhY3RzKCkpWzFdLnNldFRleHQoaW5xdWlyeVVSTCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoVVJMKFN0cmluZyBwdWJsaXNoVVJMKQotICB7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBsaW5rXy5nZXRBYnN0cmFjdHMoKTsKLSAgICBpZiAoYWJzdHJhY3RzLmxlbmd0aCA+IDIpCi0gICAgICBhYnN0cmFjdHNbMl0uc2V0VGV4dChwdWJsaXNoVVJMKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlZ2lzdHJhdGlvblVSTChTdHJpbmcgcmVnaXN0cmF0aW9uVVJMKQotICB7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBsaW5rXy5nZXRBYnN0cmFjdHMoKTsKLSAgICBpZiAoYWJzdHJhY3RzLmxlbmd0aCA+IDMpCi0gICAgICBhYnN0cmFjdHNbM10uc2V0VGV4dChyZWdpc3RyYXRpb25VUkwpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMDA5YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuU2VydmljZURlc2NyaXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2UgZXh0ZW5kcyBGYXZvcml0ZXNTZXJ2aWNlIGltcGxlbWVudHMgSUZhdm9yaXRlc1VERElTZXJ2aWNlCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZSgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiAoc2VydmljZV8uZ2V0U2VydmljZU5hbWVzKCkpWzBdLmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpCi0gIHsKLSAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSAoU2VydmljZURlc2NyaXB0aW9uKShzZXJ2aWNlXy5nZXREZXNjcmlwdGlvbnMoKSlbMF0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgIHJldHVybiBzZC5nZXRMb2NhdGlvbigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlS2V5KCkKLSAgewotICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IChTZXJ2aWNlRGVzY3JpcHRpb24pKHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpKVswXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNkLmdldFNlcnZpY2VLZXkoKS5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlS2V5KFN0cmluZyBrZXkpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjJkOWZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLlNlcnZpY2VEZXNjcmlwdGlvbjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlIGV4dGVuZHMgRmF2b3JpdGVzU2VydmljZSBpbXBsZW1lbnRzIElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZQotewotICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKHNlcnZpY2VfLmdldFNlcnZpY2VOYW1lcygpKVswXS5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKQotICB7Ci0gICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gKFNlcnZpY2VEZXNjcmlwdGlvbikoc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2QuZ2V0TG9jYXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUludGVyZmFjZUtleSgpCi0gIHsKLSAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSAoU2VydmljZURlc2NyaXB0aW9uKShzZXJ2aWNlXy5nZXREZXNjcmlwdGlvbnMoKSlbMF0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgIHJldHVybiBzZC5nZXRTZXJ2aWNlS2V5KCkuZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUludGVyZmFjZUtleShTdHJpbmcga2V5KQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzV1NETC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNXU0RMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNTMyYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNXU0RMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTREwgZXh0ZW5kcyBGYXZvcml0ZXNTZXJ2aWNlIGltcGxlbWVudHMgSUZhdm9yaXRlc1dTREwKLXsKLSAgcHVibGljIEZhdm9yaXRlc1dTREwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0V3NkbFVybCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVXJsKCkKLSAgewotICAgIHJldHVybiAoc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldExvY2F0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXc2RsVXJsKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzV1NJTC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNXU0lMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjY2YzMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNXU0lMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTSUwgZXh0ZW5kcyBGYXZvcml0ZXNMaW5rIGltcGxlbWVudHMgSUZhdm9yaXRlc1dTSUwKLXsKLSAgcHVibGljIEZhdm9yaXRlc1dTSUwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0V3NpbFVybCgpOwotICB9Ci0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdzaWxVcmwoKQotICB7Ci0gICAgcmV0dXJuIGxpbmtfLmdldExvY2F0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXc2lsVXJsKFN0cmluZyB3c2lsVVJMKQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1JlZ2lzdHJ5VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzUmVnaXN0cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5Yzk0YTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzUmVnaXN0cnlUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGludGVyZmFjZSBJRmF2b3JpdGVzUmVnaXN0cnlUeXBlCi17Ci0gIHB1YmxpYyBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5W10gZ2V0RmF2b3JpdGVzVURESVJlZ2lzdHJpZXMoKTsKLSAgcHVibGljIElGYXZvcml0ZXNVRERJQnVzaW5lc3NbXSBnZXRGYXZvcml0ZXNVRERJQnVzaW5lc3NlcygpOwotICBwdWJsaWMgSUZhdm9yaXRlc1VERElTZXJ2aWNlW10gZ2V0RmF2b3JpdGVzVURESVNlcnZpY2VzKCk7Ci0gIHB1YmxpYyBJRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VbXSBnZXRGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZXMoKTsKLSAgcHVibGljIElGYXZvcml0ZXNXU0RMW10gZ2V0RmF2b3JpdGVzV1NETHMoKTsKLSAgcHVibGljIElGYXZvcml0ZXNXU0lMW10gZ2V0RmF2b3JpdGVzV1NJTHMoKTsKLQotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNVRERJUmVnaXN0cnkoSUZhdm9yaXRlc1VERElSZWdpc3RyeSByZWdpc3RyeSk7Ci0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1VERElCdXNpbmVzcyhJRmF2b3JpdGVzVURESUJ1c2luZXNzIGJ1c2luZXNzKTsKLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESVNlcnZpY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlIHNlcnZpY2UpOwotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZShJRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2Ugc2VydmljZUludGVyZmFjZSk7Ci0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1dTREwoSUZhdm9yaXRlc1dTREwgd3NkbCk7Ci0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1dTSUwoSUZhdm9yaXRlc1dTSUwgd3NpbCk7Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzVURESVJlZ2lzdHJ5KElGYXZvcml0ZXNVRERJUmVnaXN0cnkgcmVnaXN0cnkpOwotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJQnVzaW5lc3MoSUZhdm9yaXRlc1VERElCdXNpbmVzcyBidXNpbmVzcyk7Ci0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1VERElTZXJ2aWNlKElGYXZvcml0ZXNVRERJU2VydmljZSBzZXJ2aWNlKTsKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlIHNlcnZpY2VJbnRlcmZhY2UpOwotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNXU0RMKElGYXZvcml0ZXNXU0RMIHdzZGwpOwotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNXU0lMKElGYXZvcml0ZXNXU0lMIHdzaWwpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJQnVzaW5lc3MuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElCdXNpbmVzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTU1ZjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElCdXNpbmVzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZhdm9yaXRlc1VERElCdXNpbmVzcwotewotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0QnVzaW5lc3NLZXkoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCk7Ci0gIHB1YmxpYyB2b2lkIHNldEJ1c2luZXNzS2V5KFN0cmluZyBrZXkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM3MzMzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGYXZvcml0ZXNVRERJUmVnaXN0cnkKLXsKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpOwotICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKTsKLSAgcHVibGljIFN0cmluZyBnZXRSZWdpc3RyYXRpb25VUkwoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCk7Ci0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hVUkwoU3RyaW5nIHB1Ymxpc2hVUkwpOwotICBwdWJsaWMgdm9pZCBzZXRSZWdpc3RyYXRpb25VUkwoU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ4MGE0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZhdm9yaXRlc1VERElTZXJ2aWNlCi17Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKTsKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlS2V5KCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpOwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlS2V5KFN0cmluZyBrZXkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MjdjODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZQotewotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUludGVyZmFjZUtleSgpOwotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKTsKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUludGVyZmFjZUtleShTdHJpbmcga2V5KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1dTREwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1dTREwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmMzY2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNXU0RMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGludGVyZmFjZSBJRmF2b3JpdGVzV1NETAotewotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVXJsKCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyB2b2lkIHNldFdzZGxVcmwoU3RyaW5nIHdzZGxVUkwpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzV1NJTC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzV1NJTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODhkYzQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1dTSUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGYXZvcml0ZXNXU0lMCi17Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldFdzaWxVcmwoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIHZvaWQgc2V0V3NpbFVybChTdHJpbmcgd3NpbFVSTCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvcGx1Z2luL1BhcnNlclBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3BsdWdpbi9QYXJzZXJQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUzMmIyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvcGx1Z2luL1BhcnNlclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5wbHVnaW47Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLk1lc3NhZ2VVdGlsczsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFBhcnNlclBsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFBhcnNlclBsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFBhcnNlclBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQkJdHJ5IHsKLQkJCXJlc291cmNlQnVuZGxlICAgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIuUGFyc2VyUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBQYXJzZXJQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFBhcnNlclBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci0KLQkgLyoqCi0JICAqIFJldHVybnMgdGhlIG1lc3NhZ2Ugc3RyaW5nIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGtleSBmcm9tCi0JICAqIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGZvciB0aGUgYXBwcm9wcmlhdGUgbG9jYWxlLgotCSAgKiBAcGFyYW0ga2V5IFRoZSBtZXNzYWdlIGtleSBzdHJpbmcgcHJlZml4ZWQgYnkgYSAiJSIgc3ltYm9sLgotCSAgKiBUaGF0IGlzLCB0aGUgc3RyaW5nIHBhc3NlZCBpbiBtdXN0IGJlIG9mIHRoZSBmb3JtICIlS0VZIgotCSAgKiB3aGVyZSB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBjb250YWlucyBhIGxpbmUgb2YgdGhlCi0JICAqIGZvcm06ICJLRVkgPSB2YWx1ZSIuCi0JICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBtZXNzYWdlLgotCSAgKi8KLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcga2V5ICkKLQkgIHsKLQkgICAgTWVzc2FnZVV0aWxzIG1zZ1V0aWxzID0gbmV3IE1lc3NhZ2VVdGlscyggIm9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIucGx1Z2luIiwgcGx1Z2luICk7Ci0JICAgIAotCSAgICBpZigga2V5LnN0YXJ0c1dpdGgoIiUiKSkKLQkgICAgewotCSAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcoIDEsIGtleS5sZW5ndGgoKSApOwotCSAgICB9Ci0JICAgIAotCSAgICByZXR1cm4gbXNnVXRpbHMuZ2V0TWVzc2FnZShrZXkpOwotCSAgfQotCi0JICAvKioKLQkgICogUmV0dXJucyB0aGUgbWVzc2FnZSBzdHJpbmcgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20KLQkgICogdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgZm9yIHRoZSBhcHByb3ByaWF0ZSBsb2NhbGUuCi0JICAqIFN1YnN0aXR1dGlvbiBzZXF1ZW5jZXMgaW4gdGhlIG1lc3NhZ2Ugc3RyaW5nCi0JICAqIGFyZSByZXBsYWNlZCBieSB0aGUgZ2l2ZW4gYXJyYXkgb2Ygc3Vic3RpdHV0aW9uIG9iamVjdHMgKHdoaWNoCi0JICAqIGFyZSBtb3N0IGZyZXF1ZW50bHkgc3RyaW5ncykuIFNlZSBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdCBmb3IKLQkgICogZnVydGhlciBkZXRhaWxzIG9uIHN1YnN0aXR1dGlvbi4KLQkgICogQHBhcmFtIGtleSBUaGUgbWVzc2FnZSBrZXkgc3RyaW5nIHByZWZpeGVkIGJ5IGEgIiUiIHN5bWJvbC4KLQkgICogVGhhdCBpcywgdGhlIHN0cmluZyBwYXNzZWQgaW4gbXVzdCBiZSBvZiB0aGUgZm9ybSAiJUtFWSIKLQkgICogd2hlcmUgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgY29udGFpbnMgYSBsaW5lIG9mIHRoZQotCSAgKiBmb3JtOiAiS0VZID0gdmFsdWUiLgotCSAgKiBAcGFyYW0gYXJncyBUaGUgc3Vic3RpdHV0aW9uIHZhbHVlcyBmb3IgdGhlIG1lc3NhZ2UKLQkgICogYXMgcmVxdWlyZWQgYnkgdGhlIG1lc3NhZ2UgaW4gcGx1Z2luLnByb3BlcnRpZXMgYW5kCi0JICAqIGJ5IHRoZSBydWxlcyBvZiBjbGFzcyBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdC4KLQkgICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG1lc3NhZ2UuCi0JICAqLwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MgKQotCSAgewotCSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0TWVzc2FnZShrZXkpLGFyZ3MpOwotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvSFRNTEhlYWRIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9IVE1MSGVhZEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYzYzYwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9IVE1MSGVhZEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTcgICAxNDIzMjQgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLXB1YmxpYyBjbGFzcyBIVE1MSGVhZEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotewotICBwcml2YXRlIGZpbmFsIGNoYXIgU1RBUlRfVEFHID0gJzwnOwotICBwcml2YXRlIGZpbmFsIGNoYXIgRU5EX1RBRyA9ICc+JzsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSEVBRF9TVEFSVF9UQUcgPSAiPGhlYWQ+IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSEVBRF9FTkRfVEFHID0gIjwvaGVhZD4iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBST09UX1NUQVJUX1RBRyA9ICI8cm9vdD4iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBST09UX0VORF9UQUcgPSAiPC9yb290PiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVURjggPSAiVVRGLTgiOwotICAKLSAgLy9IVE1MIE1FVEEgdGFnIGluZm9ybWF0aW9uIHVzZWQgdG8gZGV0ZWN0IHRoZSBjaGFyc2V0LgotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVE1MX0NPTlRFTlQgPSAiY29udGVudCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfRVFVSVYgPSAiaHR0cC1lcXVpdiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfRVFVSVZfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENIQVJTRVQgPSAiY2hhcnNldCI7Ci0gIAotICAvLyBXU0lMIHRhZyBpbmZvcm1hdGlvbi4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTUVUQSA9ICJtZXRhIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTkFNRSA9ICJuYW1lIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVklDRV9JTlNQRUNUSU9OID0gInNlcnZpY2VJbnNwZWN0aW9uIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ09OVEVOVCA9ICJjb250ZW50IjsKLSAgCi0gIC8vIERJU0NPIHRhZyBpbmZvcm1hdGlvbi4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTElOSyA9ICJsaW5rIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVFlQRSA9ICJ0eXBlIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEVYVF9YTUwgPSAidGV4dC94bWwiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSRUwgPSAicmVsIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQUxURVJOQVRFID0gImFsdGVybmF0ZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhSRUYgPSAiaHJlZiI7Ci0gICAgCi0gIHByaXZhdGUgU3RyaW5nIGJhc2VVUklfOwotICBwcml2YXRlIFZlY3RvciB3c2lsc187Ci0gIHByaXZhdGUgVmVjdG9yIGRpc2Nvc187Ci0gIHByaXZhdGUgU3RyaW5nIGJ5dGVFbmNvZGluZyA9IFVURjg7IC8vRGVmYXVsdCB0byBVVEYtOC4KLSAgCi0gIHB1YmxpYyBIVE1MSGVhZEhhbmRsZXIoU3RyaW5nIGJhc2VVUkkpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGJhc2VVUklfID0gYmFzZVVSSTsKLSAgICB3c2lsc18gPSBuZXcgVmVjdG9yKCk7Ci0gICAgZGlzY29zXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V3NpbHMoKQotICB7Ci0gICAgU3RyaW5nW10gd3NpbHMgPSBuZXcgU3RyaW5nW3dzaWxzXy5zaXplKCldOwotICAgIHdzaWxzXy5jb3B5SW50byh3c2lscyk7Ci0gICAgcmV0dXJuIHdzaWxzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGlzY29zKCkKLSAgewotICAgIFN0cmluZ1tdIGRpc2NvcyA9IG5ldyBTdHJpbmdbZGlzY29zXy5zaXplKCldOwotICAgIGRpc2Nvc18uY29weUludG8oZGlzY29zKTsKLSAgICByZXR1cm4gZGlzY29zOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBxTmFtZUxDID0gcU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICBpZiAocU5hbWVMQy5lcXVhbHMoTUVUQSkpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVWYWx1ZSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoTkFNRSk7Ci0gICAgICBpZiAoU0VSVklDRV9JTlNQRUNUSU9OLmVxdWFscyhuYW1lVmFsdWUpKQotICAgICAgewotICAgICAgICBTdHJpbmcgd3NpbFVSSSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoQ09OVEVOVCk7Ci0gICAgICAgIGlmIChiYXNlVVJJXyAhPSBudWxsICYmIHdzaWxVUkkuaW5kZXhPZigiOi8iKSA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBzYi5hcHBlbmQoYmFzZVVSSV8uc3Vic3RyaW5nKDAsIGJhc2VVUklfLmxhc3RJbmRleE9mKCIvIikrMSkpOwotICAgICAgICAgIHNiLmFwcGVuZCh3c2lsVVJJKTsKLSAgICAgICAgICB3c2lsVVJJID0gc2IudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXdzaWxzXy5jb250YWlucyh3c2lsVVJJKSkKLSAgICAgICAgICB3c2lsc18uYWRkKHdzaWxVUkkpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChxTmFtZUxDLmVxdWFscyhMSU5LKSkKLSAgICB7Ci0gICAgICAvLyBTZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9tc2RubWFnL2lzc3Vlcy8wMi8wMi94bWwvZGVmYXVsdC5hc3B4IGZvciBtb3JlIGRldGFpbHMgb24gRElTQ08uCi0gICAgICBTdHJpbmcgdHlwZSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoVFlQRSk7Ci0gICAgICBTdHJpbmcgcmVsID0gYXR0cmlidXRlcy5nZXRWYWx1ZShSRUwpOwotICAgICAgU3RyaW5nIGhyZWYgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKEhSRUYpOwotICAgICAgaWYgKFRFWFRfWE1MLmVxdWFscyh0eXBlKSAmJiBBTFRFUk5BVEUuZXF1YWxzKHJlbCkgJiYgaHJlZiAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgZGlzY29VUkkgPSBocmVmOwotICAgICAgICBpZiAoZGlzY29VUkkuaW5kZXhPZigiOi8iKSA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBzYi5hcHBlbmQoYmFzZVVSSV8uc3Vic3RyaW5nKDAsYmFzZVVSSV8ubGFzdEluZGV4T2YoIi8iKSsxKSk7Ci0gICAgICAgICAgc2IuYXBwZW5kKGRpc2NvVVJJKTsKLSAgICAgICAgICBkaXNjb1VSSSA9IHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkaXNjb3NfLmNvbnRhaW5zKGRpc2NvVVJJKSkKLSAgICAgICAgICBkaXNjb3NfLmFkZChkaXNjb1VSSSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBwcm92aWRlZCB0YWcgaW4gdGhlIHByb3ZpZGVkIGRvY3VtZW50IHRvIHRoZSBwcm92aWRlZCBTdHJpbmdCdWZmZXIuCi0gICAqIEBwYXJhbSB0YXJnZXQKLSAgICogQHBhcmFtIGRvY3VtZW50Ci0gICAqIEBwYXJhbSB0YWcKLSAgICogQHBhcmFtIGVuY29kaW5nCi0gICAqIEByZXR1cm4gYm9vbGVhbiBmYWxzZSBpZiB0aGUgdmFsdWUgb2YgdGhlIGVuY29kaW5nIHBhcmFtZXRlciBtYXRjaGVkIHRoZSBkZXRlY3RlZCBjaGFyc2V0IG9yIGlmIG5vIGNoYXJzZXQgd2FzIGRldGVjdGVkLgotICAgKiBSZXR1cm5zIHRydWUgaWYgYSBjaGFyc2V0IHdhcyBkZXRlY3RlZCBhbmQgaXQgZGlkIG5vdCBlcXVhbCB0aGUgZW5jb2RpbmcgcGFyYW1ldGVyLiBJZiB0cnVlIGlzIHJldHVybmVkCi0gICAqIHRoZSBoYXJ2ZXN0aW5nIG9mIHRoZSB0YWdzIHdvdWxkIGhhdmUgc3RvcHBlZCBhdCB0aGUgcG9pbnQgdGhlIGNoYXJzZXQgd2FzIGRldGVjdGVkLiBUaGUgY2FsbGVyCi0gICAqIHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kIGFnYWluIHdpdGggdGhlIGNvcnJlY3QgZW5jb2RpbmcuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaGFydmVzdFRhZ3MoU3RyaW5nQnVmZmVyIHRhcmdldCxTdHJpbmcgZG9jdW1lbnQsU3RyaW5nIHRhZywgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0JYm9vbGVhbiBjaGFuZ2VFbmNvZGluZyA9IGZhbHNlOwotICAgIGludCBpbmRleCA9IGRvY3VtZW50LmluZGV4T2YoU1RBUlRfVEFHKTsKLSAgICBpbnQgZG9jdW1lbnRMZW5ndGggPSBkb2N1bWVudC5sZW5ndGgoKTsKLSAgICBpbnQgdGFnTGVuZ3RoID0gdGFnLmxlbmd0aCgpOwotICAgIHdoaWxlIChpbmRleCAhPSAtMSAmJiAoaW5kZXgrMSt0YWdMZW5ndGgpPGRvY3VtZW50TGVuZ3RoKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBkb2N1bWVudC5zdWJzdHJpbmcoaW5kZXgrMSxpbmRleCsxK3RhZ0xlbmd0aCk7Ci0gICAgICBpZiAoc3RyLnRvTG93ZXJDYXNlKCkuZXF1YWxzKHRhZykpCi0gICAgICB7Ci0gICAgICAgIHN0ciA9IGRvY3VtZW50LnN1YnN0cmluZyhpbmRleCxkb2N1bWVudC5pbmRleE9mKEVORF9UQUcsaW5kZXgrMSkrMSk7Ci0gICAgICAgIHRhcmdldC5hcHBlbmQoc3RyKTsKLSAgICAgICAgaW5kZXggKz0gc3RyLmxlbmd0aCgpOwotICAgICAgICAKLSAgICAgICAgLy9JZiB0YWcgaXMgTUVUQSBhbmQgZGVjbGFyZXMgdGhlIGNoYXJzZXQsIGZpbmQgb3V0IHdoYXQgaXQgaXMKLSAgICAgICAgLy9hbmQgaWYgaXQgbWF0Y2hlcyB3aGF0IHdhcyBwYXNzZWQgaW4uIElmIGl0IG1hdGNoZXMsIGNvbnRpbnVlIAotICAgICAgICAvL3dpdGggdGhlIHBhcnNpbmcgYW5kIHJldHVybiBmYWxzZSB3aGVuIGNvbXBsZXRlLiAKLSAgICAgICAgLy9JZiB0aGUgZGV0ZWN0ZWQgY2hhcnNldCBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0IHdhcyBwYXNzZWQgaW4sIAotICAgICAgICAvLy0gY2hhbmdlIGJ5dGVFbmNvZGluZyB0byBlcXVhbCB0aGUgZGV0ZWN0ZWQgY2hhcnNldC4KLSAgICAgICAgLy8tIHN0b3AgcGFyc2luZy4KLSAgICAgICAgLy8tIHJldHVybiB0cnVlLgotICAgICAgICBpZiAodGFnLmVxdWFscyhNRVRBKSkKLSAgICAgICAgewotICAgICAgICAgIGludCBpZHhPZkNvbnRlbnQgPSBzdHIuaW5kZXhPZihIVE1MX0NPTlRFTlQpOwotICAgICAgICAgIGludCBpZHhPZkhUVFBFUVVJViA9IHN0ci5pbmRleE9mKEhUVFBfRVFVSVYpOwotICAgICAgICAgIGlmIChpZHhPZkhUVFBFUVVJViE9IC0xICYmIGlkeE9mQ29udGVudCAhPSAtMSkKLSAgICAgICAgICB7Ci0gICAgICAgIAkvL0NoZWNrIGlmIHRoZSBodHRwLWVxdWl2IGF0dHJpYnV0ZSBpcyBzZXQgdG8gQ29udGVudC1UeXBlLgotICAgICAgICAgIAlpbnQgaWR4T2ZIVFRQRVFVSVZPcGVuUXVvdGUgPSBzdHIuaW5kZXhPZigiXCIiLCBpZHhPZkhUVFBFUVVJVisxKTsKLSAgICAgICAgCWludCBpZHhPZkhUVFBFUVVJVkNsb3NpbmdRdW90ZSA9IHN0ci5pbmRleE9mKCJcIiIsIGlkeE9mSFRUUEVRVUlWT3BlblF1b3RlKzEpOwotICAgICAgICAJU3RyaW5nIGhUVFBFUVVJVlZhbHVlVW50cmltbWVkID0gc3RyLnN1YnN0cmluZyhpZHhPZkhUVFBFUVVJVk9wZW5RdW90ZSsxLCBpZHhPZkhUVFBFUVVJVkNsb3NpbmdRdW90ZSk7Ci0gICAgICAgIAlpZiAoaFRUUEVRVUlWVmFsdWVVbnRyaW1tZWQudHJpbSgpLmVxdWFscyhIVFRQX0VRVUlWX0NPTlRFTlRfVFlQRSkpCi0gICAgICAgIAl7Ci0gICAgICAgIAkgIC8vVGhpcyBNRVRBIHRhZyBjb250YWlucyB0aGUgY2hhcnNldC4gR2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29udGVudCBhdHRyaWJ1dGUKLSAgICAgICAgCSAgaW50IGlkeE9mT3BlblF1b3RlID0gc3RyLmluZGV4T2YoIlwiIiwgaWR4T2ZDb250ZW50KzEpOwotICAgICAgICAJICBpbnQgaWR4T2ZDbG9zaW5nUXVvdGUgPSBzdHIuaW5kZXhPZigiXCIiLCBpZHhPZk9wZW5RdW90ZSsxKTsKLSAgICAgICAgCSAgU3RyaW5nIGNvbnRlbnRWYWx1ZSA9IHN0ci5zdWJzdHJpbmcoaWR4T2ZPcGVuUXVvdGUrMSwgaWR4T2ZDbG9zaW5nUXVvdGUpOwotICAgICAgICAJICAKLSAgICAgICAgCSAgLy9HZXQgdGhlIGNoYXJzZXQKLSAgICAgICAgCSAgaW50IGlkeE9mQ2hhclNldCA9IGNvbnRlbnRWYWx1ZS5pbmRleE9mKENIQVJTRVQpOwotICAgICAgICAJICBpbnQgaWR4T2ZFcXVhbHMgPSBjb250ZW50VmFsdWUuaW5kZXhPZigiPSIsIGlkeE9mQ2hhclNldCtDSEFSU0VULmxlbmd0aCgpKTsKLSAgICAgICAgCSAgU3RyaW5nIGRldGVjdGVkRW5jb2RpbmdWYWx1ZVVudHJpbW1lZCA9IGNvbnRlbnRWYWx1ZS5zdWJzdHJpbmcoaWR4T2ZFcXVhbHMrMSk7Ci0gICAgICAgIAkgIFN0cmluZyBkZXRlY3RlZEVuY29kaW5nVmFsdWUgPSBkZXRlY3RlZEVuY29kaW5nVmFsdWVVbnRyaW1tZWQudHJpbSgpOwotICAgICAgICAJICBpZiAoIWRldGVjdGVkRW5jb2RpbmdWYWx1ZS5lcXVhbHMoZW5jb2RpbmcpKQotICAgICAgICAJICB7Ci0gICAgICAgIAkgICAgYnl0ZUVuY29kaW5nID0gZGV0ZWN0ZWRFbmNvZGluZ1ZhbHVlOwotICAgICAgICAJICAgIGNoYW5nZUVuY29kaW5nID0gdHJ1ZTsKLSAgICAgICAgCSAgICBicmVhazsKLSAgICAgICAgCSAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBpbmRleCsrOwotICAgICAgaW5kZXggPSBkb2N1bWVudC5pbmRleE9mKFNUQVJUX1RBRyxpbmRleCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjaGFuZ2VFbmNvZGluZzsKLSAgfQotICAKLQotICAvKioKLSAgICogSWYgdGhlIHByb3ZpZGVkIGJ5dGUgYXJyYXkgcmVwZXJlc2VudHMgdGhlIGNvbnRlbnRzIG9mIGFuIEhUTUwKLSAgICogZG9jdW1lbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGEgYnl0ZSBhcnJheSBpbiB3aGljaAotICAgKiA8dWw+Ci0gICAqIDxsaT50aGUgb3BlbmluZyBhbmQgY2xvc2luZyBIRUFEIHRhZ3MgYXJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggCi0gICAqIG9wZW5pbmcgYW5kIGNsb3NpbmcgPHJvb3Q+IHRhZ3M8L2xpPgotICAgKiA8bGk+b25seSB0aGUgTUVUQSBhbmQgTElOSyBlbGVtZW50cyBhcmUgaW4gdGhlIEhUTUwgZG9jdW1lbnQKLSAgICogYXJlIGluY2x1ZGVkIGluIHRoZSBjb250ZW50cyBiZXR3ZWVuIHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nCi0gICAqIDxyb290PiB0YWdzLgotICAgKiA8L3VsPgotICAgKiBUaGlzIG1ldGhvZCB3aWxsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGJ5dGVFbmNvZGluZyBTdHJpbmcKLSAgICogYXR0cmlidXRlIG9uIHRoaXMgY2xhc3MgaWYgaXQgaXMgc29tZXRoaW5nIG90aGVyIHRoYW4KLSAgICogVVRGLTguIENhbGxlcnMgb2YgdGhpcyBtZXRob2Qgc2hvdWxkIGNhbGwgZ2V0Qnl0ZUVuY29kaW5nKCkKLSAgICogYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBpZiB0aGV5IG5lZWQgdG8ga25vdyB0aGUgY2hhcnNldAotICAgKiB2YWx1ZSB1c2VkIGJ5IHRoaXMgbWV0aG9kIHRvIGRlY29kZS9lbmRjb2RlIHRoZSBieXRlIGFycmF5LgotICAgKiBAcGFyYW0gYgotICAgKiBAcmV0dXJuIGJ5dGVbXQotICAgKi8KLSAgcHVibGljIGJ5dGVbXSBoYXJ2ZXN0SGVhZFRhZ3MoYnl0ZVtdIGIpCi0gIHsKLSAgICBTdHJpbmcgczsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgCS8vQXNzdW1lIHRoZSBkZWZhdWx0IGJ5dGUgZW5jb2Rpbmcgb2YgVVRGLTggZm9yIG5vdy4KLSAgICAJcyA9IG5ldyBTdHJpbmcoYiwgYnl0ZUVuY29kaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gdWVlKQotICAgIHsKLSAgICAgIHMgPSBuZXcgU3RyaW5nKGIpOwotICAgIH0KLSAgICBTdHJpbmcgaGVhZCA9IHMudG9Mb3dlckNhc2UoKTsKLSAgICBpbnQgaGVhZFN0YXJ0SW5kZXggPSBoZWFkLmluZGV4T2YoSEVBRF9TVEFSVF9UQUcpOwotICAgIGludCBoZWFkRW5kSW5kZXggPSBoZWFkLmluZGV4T2YoSEVBRF9FTkRfVEFHKTsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgc2IuYXBwZW5kKFJPT1RfU1RBUlRfVEFHKTsKLSAgICBpZiAoaGVhZFN0YXJ0SW5kZXggIT0gLTEgJiYgaGVhZEVuZEluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIGhlYWQgPSBzLnN1YnN0cmluZyhoZWFkU3RhcnRJbmRleCwgaGVhZEVuZEluZGV4K0hFQURfRU5EX1RBRy5sZW5ndGgoKSk7Ci0gICAgICBib29sZWFuIGVuY29kaW5nQ2hhbmdlZCA9IGhhcnZlc3RUYWdzKHNiLGhlYWQsTUVUQSwgYnl0ZUVuY29kaW5nKTsKLSAgICAgIGlmIChlbmNvZGluZ0NoYW5nZWQpCi0gICAgICB7Ci0gICAgCSAgLy9UaGUgaGFydmVzdFRhZ3MgbWV0aG9kIGRldGVjdGVkIGEgZGlmZmVyZW50IGNoYXJzZXQKLSAgICAJICAvL3RoYW4gdGhlIG9uZSB0aGF0IHdhcyBwYXNzZWQgaW4uIFN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZwotICAgIAkgIC8vd2l0aCB0aGUgY29ycmVjdCBjaGFyc2V0LgotICAgIAkgICAgU3RyaW5nIHMyOwotICAgIAkgICAgdHJ5Ci0gICAgCSAgICB7Ci0gICAgCSAgICAJczIgPSBuZXcgU3RyaW5nKGIsIGJ5dGVFbmNvZGluZyk7Ci0gICAgCSAgICB9Ci0gICAgCSAgICBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB1ZWUpCi0gICAgCSAgICB7Ci0gICAgCSAgICAgIHMyID0gbmV3IFN0cmluZyhiKTsKLSAgICAJICAgIH0KLSAgICAJICAgIFN0cmluZyBoZWFkMiA9IHMyLnRvTG93ZXJDYXNlKCk7Ci0gICAgCSAgICBpbnQgaGVhZDJTdGFydEluZGV4ID0gaGVhZDIuaW5kZXhPZihIRUFEX1NUQVJUX1RBRyk7Ci0gICAgCSAgICBpbnQgaGVhZDJFbmRJbmRleCA9IGhlYWQyLmluZGV4T2YoSEVBRF9FTkRfVEFHKTsKLSAgICAJICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIAkgICAgc2IuYXBwZW5kKFJPT1RfU1RBUlRfVEFHKTsKLSAgICAJICAgIGlmIChoZWFkMlN0YXJ0SW5kZXggIT0gLTEgJiYgaGVhZDJFbmRJbmRleCAhPSAtMSkKLSAgICAJICAgIHsKLSAgICAJICAgICAgaGVhZDIgPSBzMi5zdWJzdHJpbmcoaGVhZDJTdGFydEluZGV4LCBoZWFkMkVuZEluZGV4K0hFQURfRU5EX1RBRy5sZW5ndGgoKSk7Ci0gICAgCSAgICAgIGhhcnZlc3RUYWdzKHNiLGhlYWQyLE1FVEEsIGJ5dGVFbmNvZGluZyk7Ci0gICAgCSAgICAgIGhhcnZlc3RUYWdzKHNiLGhlYWQyLExJTkssYnl0ZUVuY29kaW5nKTsKLSAgICAJICAgIH0gICAgCSAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGhhcnZlc3RUYWdzKHNiLGhlYWQsTElOSyxieXRlRW5jb2RpbmcpOwotICAgICAgfQotICAgIH0KLSAgICBzYi5hcHBlbmQoUk9PVF9FTkRfVEFHKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgCXJldHVybiBzYi50b1N0cmluZygpLmdldEJ5dGVzKGJ5dGVFbmNvZGluZyk7ICAgICAgCi0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB1ZWUpCi0gICAgewotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKTsKLSAgICB9ICAgIAotICAgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEJ5dGVFbmNvZGluZygpCi0gIHsKLQkgIHJldHVybiBieXRlRW5jb2Rpbmc7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL0lsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL0lsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE3ZmUxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9JbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotcHVibGljIGNsYXNzIElsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTI1MzM5ODExNzYyODU1NjEyMzRMOwotCi0gIHB1YmxpYyBJbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uKFN0cmluZyBhcmcpCi0gIHsKLSAgICBzdXBlcihhcmcpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9VRERJVVJJSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9VRERJVVJJSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjM2U4OTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvVURESVVSSUhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBVRERJVVJJSGVscGVyCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWVNFUlZJQ0VfVVJJX1RFTVBMQVRFID0gInVkZGlzZXJ2aWNlOnF1ZXJ5OnswfTpxdWVyeTp7MX0iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRUtFWV9VUklfVEVNUExBVEUgPSAidWRkaXNlcnZpY2U6c2VydmljZUtleTp7MH06c2VydmljZUtleTp7MX0iOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0UXVlcnlTZXJ2aWNlVVJJKFN0cmluZyBxdWVyeSxTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICAgIFN0cmluZ1tdIHVyaVBhcmFtcyA9IHtxdWVyeSxpbnF1aXJ5VVJMfTsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUVVFUllTRVJWSUNFX1VSSV9URU1QTEFURSx1cmlQYXJhbXMpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRTZXJ2aWNlS2V5VVJJKFN0cmluZyBzZXJ2aWNlS2V5LFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgU3RyaW5nW10gdXJpUGFyYW1zID0ge3NlcnZpY2VLZXksaW5xdWlyeVVSTH07Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFNFUlZJQ0VLRVlfVVJJX1RFTVBMQVRFLHVyaVBhcmFtcyk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHBhcnNlVVJJKFN0cmluZyBwYXR0ZXJuLFN0cmluZyB1cmkpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBNZXNzYWdlRm9ybWF0IG1mID0gbmV3IE1lc3NhZ2VGb3JtYXQocGF0dGVybik7Ci0gICAgICBPYmplY3RbXSBwYXJzZWRSZXN1bHRzID0gbWYucGFyc2UodXJpKTsKLSAgICAgIGlmIChwYXJzZWRSZXN1bHRzICE9IG51bGwgJiYgcGFyc2VkUmVzdWx0cy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBTdHJpbmdbXSByZXN1bHRzID0gbmV3IFN0cmluZ1twYXJzZWRSZXN1bHRzLmxlbmd0aF07Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPHBhcnNlZFJlc3VsdHMubGVuZ3RoO2krKykKLSAgICAgICAgICByZXN1bHRzW2ldID0gKFN0cmluZylwYXJzZWRSZXN1bHRzW2ldOwotICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHBhcnNlU2VydmljZUtleVVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgcmV0dXJuIHBhcnNlVVJJKFNFUlZJQ0VLRVlfVVJJX1RFTVBMQVRFLHVyaSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gcGFyc2VRdWVyeVNlcnZpY2VVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIHJldHVybiBwYXJzZVVSSShRVUVSWVNFUlZJQ0VfVVJJX1RFTVBMQVRFLHVyaSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dTSUxNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1NJTE1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyODZiYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1NJTE1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBjbGFzcyBXU0lMTWVzc2FnZXMgZXh0ZW5kcyBOTFMKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC53c2lsIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgc3RhdGljCi0gIHsKLSAgICBOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXU0lMTWVzc2FnZXMuY2xhc3MpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lOVkFMSURfQVJHVU1FTlRTOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSUxMRUdBTF9BUkdVTUVOVFM7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJJOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSU5WQUxJRF9XU0lMX1VSSTsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VOUkVTT0xWQUJMRV9XU0RMOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT047Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9NQUxGT1JNRURfV1NETDsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dSSVRFX1dTSUw7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNmFlMzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC00OTE4MjExMDIxNjIwMzE2MDQ5TDsKLQotICBwcml2YXRlIElPRXhjZXB0aW9uIGlvZV87Ci0gIHByaXZhdGUgU3RyaW5nIHd3d0F1dGhNc2dfOwotICBwcml2YXRlIFN0cmluZyB1cmxfOwotCi0gIHB1YmxpYyBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbihJT0V4Y2VwdGlvbiBpb2UsIFN0cmluZyB3d3dBdXRoTXNnLCBTdHJpbmcgdXJsKQotICB7Ci0gICAgc3VwZXIoaW9lLmdldE1lc3NhZ2UoKSk7Ci0gICAgaW9lXyA9IGlvZTsKLSAgICB3d3dBdXRoTXNnXyA9IHd3d0F1dGhNc2c7Ci0gICAgdXJsXyA9IHVybDsKLSAgfQotCi0gIHB1YmxpYyBJT0V4Y2VwdGlvbiBnZXRJT0V4Y2VwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaW9lXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1dXQXV0aGVudGljYXRpb25Nc2coKQotICB7Ci0gICAgcmV0dXJuIHd3d0F1dGhNc2dfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVUkwoKQotICB7Ci0gICAgcmV0dXJuIHVybF87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dXV0F1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1dXQXV0aGVudGljYXRpb25IYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZGViYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1dXQXV0aGVudGljYXRpb25IYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotcHVibGljIGludGVyZmFjZSBXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIKLXsKLSAgcHVibGljIHZvaWQgaGFuZGxlV1dXQXV0aGVudGljYXRpb24oV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24gd3d3YWUpOwotICBwdWJsaWMgU3RyaW5nIGdldFVzZXJuYW1lKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dlYlNlcnZpY2VFbnRpdHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dlYlNlcnZpY2VFbnRpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkxN2JkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XZWJTZXJ2aWNlRW50aXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUVudGl0eQotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX1VOS05PV04gPSAtMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9IVE1MID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9XU0lMID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9XU0RMID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9VRERJX1NFUlZJQ0UgPSAzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX0RJU0NPID0gNDsKLQotICBwcml2YXRlIE9iamVjdCBwYXJlbnRfOwotICBwcml2YXRlIExpc3QgY2hpbGRyZW5fOwotICBwcml2YXRlIGludCB0eXBlXzsKLSAgcHJpdmF0ZSBTdHJpbmcgdXJpXzsKLSAgcHJpdmF0ZSBieXRlW10gYnl0ZXNfOwotICBwcml2YXRlIFN0cmluZyBodHRwVXNlcm5hbWVfOwotICBwcml2YXRlIFN0cmluZyBodHRwUGFzc3dvcmRfOwotICBwcml2YXRlIFN0cmluZyBkb2N1bWVudGF0aW9uXzsKLSAgcHJpdmF0ZSBPYmplY3QgbW9kZWxfOwotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRW50aXR5KCkKLSAgewotICAgIHBhcmVudF8gPSBudWxsOwotICAgIGNoaWxkcmVuXyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICB0eXBlXyA9IFRZUEVfVU5LTk9XTjsKLSAgICB1cmlfID0gbnVsbDsKLSAgICBieXRlc18gPSBudWxsOwotICAgIGh0dHBVc2VybmFtZV8gPSBudWxsOwotICAgIGh0dHBQYXNzd29yZF8gPSBudWxsOwotICAgIGRvY3VtZW50YXRpb25fID0gbnVsbDsKLSAgICBtb2RlbF8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRQYXJlbnQoKQotICB7Ci0gICAgcmV0dXJuIHBhcmVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnQoT2JqZWN0IHBhcmVudCkKLSAgewotICAgIHBhcmVudF8gPSBwYXJlbnQ7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRDaGlsZHJlbigpCi0gIHsKLSAgICByZXR1cm4gY2hpbGRyZW5fOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQ2hpbGQoT2JqZWN0IGNoaWxkKQotICB7Ci0gICAgY2hpbGRyZW5fLmFkZChjaGlsZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVDaGlsZChPYmplY3QgY2hpbGQpCi0gIHsKLSAgICBjaGlsZHJlbl8ucmVtb3ZlKGNoaWxkKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRUeXBlKGludCB0eXBlKQotICB7Ci0gICAgdHlwZV8gPSB0eXBlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKQotICB7Ci0gICAgcmV0dXJuIHVyaV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIHVyaV8gPSB1cmk7Ci0gIH0KLQotICBwdWJsaWMgYnl0ZVtdIGdldEJ5dGVzKCkKLSAgewotICAgIHJldHVybiBieXRlc187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRCeXRlcyhieXRlW10gYnl0ZXMpCi0gIHsKLSAgICBieXRlc18gPSBieXRlczsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SFRUUFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiBodHRwVXNlcm5hbWVfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SFRUUFVzZXJuYW1lKFN0cmluZyBodHRwVXNlcm5hbWUpCi0gIHsKLSAgICBodHRwVXNlcm5hbWVfID0gaHR0cFVzZXJuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIVFRQUGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBQYXNzd29yZF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRIVFRQUGFzc3dvcmQoU3RyaW5nIGh0dHBQYXNzd29yZCkKLSAgewotICAgIGh0dHBQYXNzd29yZF8gPSBodHRwUGFzc3dvcmQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RG9jdW1lbnRhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZG9jdW1lbnRhdGlvbl87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERvY3VtZW50YXRpb24oU3RyaW5nIGRvY3VtZW50YXRpb24pCi0gIHsKLSAgICBkb2N1bWVudGF0aW9uXyA9IGRvY3VtZW50YXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWwoKQotICB7Ci0gICAgcmV0dXJuIG1vZGVsXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TW9kZWwoT2JqZWN0IG1vZGVsKQotICB7Ci0gICAgbW9kZWxfID0gbW9kZWw7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0VudGl0eVJlc29sdmVkKCkKLSAgewotICAgIHJldHVybiAoYnl0ZXNfICE9IG51bGwpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XZWJTZXJ2aWNlc1BhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV2ViU2VydmljZXNQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVjYjQxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XZWJTZXJ2aWNlc1BhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwNCAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUxNyAgIDE0MjMyNCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNzExICAgMTUwMzAxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwODE4ICAgMTU0MzkzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwOTA2ICAgMTU2NDIwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkluc3BlY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLkV4dGVuc2lvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuVURESUNvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY28uRElTQ09Db250cmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvLkRJU0NPUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY28uRElTQ09SZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgc3VuLm1pc2MuQkFTRTY0RW5jb2RlcjsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VzUGFyc2VyCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUlNFX05PTkUgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJTRV9XU0lMID0gMTw8MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFSU0VfV1NETCA9IDE8PDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUlNFX0xJTktTID0gMTw8MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFSU0VfRElTQ08gPSAxPDwzOwotCi0gIHByaXZhdGUgU3RyaW5nIHVyaV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHVyaVRvRW50aXR5VGFibGVfOwotCi0gIHByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZF87Ci0KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAgIHRoaXMobnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIoU3RyaW5nIHVyaSkKLSAgewotICAgIHVyaV8gPSB1cmk7Ci0gICAgdXJpVG9FbnRpdHlUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaHR0cEJhc2ljQXV0aFVzZXJuYW1lXyA9IG51bGw7Ci0gICAgaHR0cEJhc2ljQXV0aFBhc3N3b3JkXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpCi0gIHsKLSAgICByZXR1cm4gdXJpXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgdXJpXyA9IHVyaTsKLSAgfQotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRW50aXR5IGdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgaWYgKHVyaSAhPSBudWxsKQotICAgICAgcmV0dXJuIChXZWJTZXJ2aWNlRW50aXR5KXVyaVRvRW50aXR5VGFibGVfLmdldCh1cmkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gd3NpbFVSSQotICAgKiBAcmV0dXJuCi0gICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGggZ2V0V1NJTERvY3VtZW50VmVyYm9zZShTdHJpbmcsIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50KFN0cmluZyB3c2lsVVJJICkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBnZXRXU0lMRG9jdW1lbnRWZXJib3NlKHdzaWxVUkksICJVVEYtOCIgKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHdzaWxVUkkKLSAgICogQHJldHVybgotICAgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0gICAqIEB0aHJvd3MgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgICogQHRocm93cyBXU0lMRXhjZXB0aW9uCi0gICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGggZ2V0V1NJTERvY3VtZW50VmVyYm9zZShTdHJpbmcsIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50VmVyYm9zZShTdHJpbmcgd3NpbFVSSSApIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiwgV1NJTEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGdldFdTSUxEb2N1bWVudFZlcmJvc2UoIHdzaWxVUkksICJVVEYtOCIgKTsKLSAgfQotICAKLSAgcHVibGljIFdTSUxEb2N1bWVudCBnZXRXU0lMRG9jdW1lbnRWZXJib3NlKFN0cmluZyB3c2lsVVJJLCBTdHJpbmcgYnl0ZUVuY29kaW5nICkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBXU0lMRXhjZXB0aW9uCi0gIHsKLSAgICBXZWJTZXJ2aWNlRW50aXR5IHdzRW50aXR5ID0gZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzaWxVUkkpOwotICAgIAotICAgIGlmICh3c0VudGl0eSA9PSBudWxsKQotICAgIHsKLSAgICAgIHdzRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgIHdzRW50aXR5LnNldFVSSSh3c2lsVVJJKTsKLSAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dCh3c2lsVVJJLCB3c0VudGl0eSk7Ci0gICAgfQotICAgIAotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jdW1lbnQgPSAoV1NJTERvY3VtZW50KXdzRW50aXR5LmdldE1vZGVsKCk7Ci0gICAgCi0gICAgaWYgKHdzaWxEb2N1bWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIEZvciBzb21lIHJlYXNvbiBXU0RMNEogaXMgbm90IHJlYWRpbmcgdGhlIGNvbnRlbnQgdHlwZSBwcm9wZXJseSBmb3IgcGxhdGZvcm0gcmVzb3VyY2VzLiAgVGhlcmVmb3JlLCB3ZSB3aWxsIGdldAotICAgICAgLy8gdGhlIHN0cmVhbSBkaXJlY3RseSBmcm9tIEVjbGlwc2UgaWYgd2UgZmluZCBhIHBsYXRmb3JtIHByb3RvY29sIHNwZWNpZmllZCBpbiB0aGUgVVJMLgotICAgICAgaWYoIHdzaWxVUkkuc3RhcnRzV2l0aCggInBsYXRmb3JtOi9yZXNvdXJjZSIgKSApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyAgICBwYXRoICAgICA9IHdzaWxVUkkuc3Vic3RyaW5nKDE4KTsKLSAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKCBwYXRoICk7Ci0gICAgICAgIAotICAgICAgICBpZiggcmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSApCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRmlsZSAgICAgICAgICAgICBmaWxlICAgPSAoSUZpbGUpcmVzb3VyY2U7Ci0gICAgICAgICAgICBJbnB1dFN0cmVhbSAgICAgICBzdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0gICAgICAgICAgICBJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoIHN0cmVhbSwgZmlsZS5nZXRDaGFyc2V0KCkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICAgIHdzaWxEb2N1bWVudCA9IFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgICAgICAgd3NpbERvY3VtZW50LnJlYWQoIHJlYWRlciApOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKXt9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gVE9ETyB0aGUgZm9sbG93aW5nIDMgbGluZXMgb2YgY29kZSBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZCwgc2luY2UKLSAgICAgICAgLy8gdGhlIFdTREw0SiBwYXJzZXIgZG9lcyBub3QgbmVlZCBhIGJ5dGUgc3RyZWFtLgotICAgICAgICBieXRlW10gYiA9IGdldElucHV0U3RyZWFtQXNCeXRlQXJyYXkod3NpbFVSSSk7Ci0gICAgICAgIHdzRW50aXR5LnNldEJ5dGVzKGIpOwotICAgICAgICBzZXRIVFRQU2V0dGluZ3Mod3NFbnRpdHkpOwotICAgICAgCi0gICAgICAgIC8vIFRoaXMgcGFyc2VyIG9ubHkgY2hlY2tzIHRoZSBoZWFkZXIgb2YgSFRNTCBmb3IgYSBwYXJ0aWN1bGFyIGVuY29kaW5nLgotICAgICAgICAvLyBJdCBkb2Vzbid0IGNoZWNrIHRoZSBlbmNvZGluZyBmb3IgZ2VuZXJhbCBYTUwgZG9jdW1lbnRzIGxpa2UgV1NETCBhbmQgV1NJTC4KLSAgICAgICAgLy8gVGhpcyBjYXVzaW5nIHRoaXMgcGFyc2VyIHRvIGFsd2F5IHVzZSBVVEYtOCBhcyB0aGUgZW5jb2RpbmcuICBUaGVyZWZvcmUsCi0gICAgICAgIC8vIHNpbmNlIHdlIGNhbiBub3QgdHJ1c3QgdGhlIGVuY29kaW5nIHNwZWNpZmllZCB3ZSB3aWxsIG5vdCB1c2UgaXQuICBJbnN0ZWFkLAotICAgICAgICAvLyB3ZSB3aWxsIGp1c3QgbGV0IHRoZSBXU0lMIHBhcnNlciBmaWd1cmUgb3V0IHdoYXQgZW5jb2RpbmcgdG8gdXNlLgotICAgICAgCi0gICAgICAgIC8vSW5wdXRTdHJlYW1SZWFkZXIgaXNyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiKSwgYnl0ZUVuY29kaW5nICk7Ci0gICAgICAgIHdzaWxEb2N1bWVudCA9IFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgICB3c2lsRG9jdW1lbnQucmVhZCh3c2lsVVJJKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgd3NFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NJTCk7Ci0gICAgICB3c0VudGl0eS5zZXRNb2RlbCh3c2lsRG9jdW1lbnQpOwotICAgIH0KLSAgICByZXR1cm4gd3NpbERvY3VtZW50OwotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gZ2V0V1NETERlZmluaXRpb24oU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0V1NETERlZmluaXRpb25WZXJib3NlKHdzZGxVUkkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldFdTRExEZWZpbml0aW9uVmVyYm9zZShTdHJpbmcgd3NkbFVSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBXZWJTZXJ2aWNlRW50aXR5IHdzRW50aXR5ID0gZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzZGxVUkkpOwotICAgIGlmICh3c0VudGl0eSA9PSBudWxsKQotICAgIHsKLSAgICAgIHdzRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgIHdzRW50aXR5LnNldFVSSSh3c2RsVVJJKTsKLSAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dCh3c2RsVVJJLCB3c0VudGl0eSk7Ci0gICAgfQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKXdzRW50aXR5LmdldE1vZGVsKCk7Ci0gICAgaWYgKGRlZmluaXRpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBieXRlW10gYiA9IGdldElucHV0U3RyZWFtQXNCeXRlQXJyYXkod3NkbFVSSSk7Ci0gICAgICB3c0VudGl0eS5zZXRCeXRlcyhiKTsKLSAgICAgIHNldEhUVFBTZXR0aW5ncyh3c0VudGl0eSk7Ci0gICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGIpOwotICAgICAgV1NETEZhY3RvcnkgZmFjdG9yeSA9IFdTRExQbHVnaW4uSU5TVEFOQ0UuY3JlYXRlV1NETDRKRmFjdG9yeSgpOwotICAgICAgV1NETFJlYWRlciB3c2RsUmVhZGVyID0gZmFjdG9yeS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgICBkZWZpbml0aW9uID0gd3NkbFJlYWRlci5yZWFkV1NETCh3c2RsVVJJLCBuZXcgSW5wdXRTb3VyY2UoYmFpcykpOwotICAgICAgd3NFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCk7Ci0gICAgICB3c0VudGl0eS5zZXRNb2RlbChkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwYXJzZSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBwYXJzZVVSTChQQVJTRV9XU0lMIHwgUEFSU0VfV1NETCB8IFBBUlNFX0xJTktTIHwgUEFSU0VfRElTQ08pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGFyc2UoaW50IHBhcnNlT3B0aW9uKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcGFyc2VVUkwocGFyc2VPcHRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlVVJMKGludCBwYXJzZU9wdGlvbikgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgewotICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgIAotICAgIC8vIFRoaXMgdmFyaWFibGUgbWFrZXMgdGhpcyBvYmplY3QgYSBsaXR0bGUgbW9yZSB0aHJlYWQgc2FmZSB0aGFuIGl0IHdhcwotICAgIC8vIGJlZm9yZSwgYWx0aG91Z2ggdGhpcyBvYmplY3QgaXMgbm90IGNvbXBsZXRlbHkgdGhyZWFkIHNhZmUuICBUaGUgc2NlbmFyaW8KLSAgICAvLyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gYXZvaWQgaXMgd2hlcmUgb25lIGNhbGwgdG8gdGhpcyBtZXRob2QgZ2V0cyBibG9ja2VkCi0gICAgLy8gYXQgdGhlIGdldElucHV0U3RyZWFtQXNCeXRlQXJyYXkgY2FsbC4gIFRoZW4gYSBzZWNvbmQgY2FsbCB0byB0aGUgbWV0aG9kCi0gICAgLy8gaXMgbWFkZSB0aGF0IGNoYW5nZXMgdGhlIHVyaV8gZ2xvYmFsIHZhcmlhYmxlLiAgV2hlbiB0aGUgZmlyc3QgY2FsbAotICAgIC8vIGNvbXBsZXRlcyBpdCB3b3VsZCB1c2UgdXJpXyB2YWx1ZSBmcm9tIHRoZSBzZWNvbmQgaW52b2NhdGlvbiBpbnN0ZWFkCi0gICAgLy8gb2YgdGhlIHZhbHVlIGZyb20gdGhlIGZpcnN0LiAgU3RvcmluZyB0aGUgdXJpXyBpbnRvIHRoaXMgdmFyaWFibGUgaGVscHMgCi0gICAgLy8gYXZvaWQgdGhpcyBiYWQgc2NlbmFyaW8uCi0gICAgU3RyaW5nIHRoZVVyaSA9IHVyaV87Ci0gICAgCi0gICAgd3NFbnRpdHkuc2V0VVJJKHRoZVVyaSk7Ci0gICAgYnl0ZVtdIGIgPSBnZXRJbnB1dFN0cmVhbUFzQnl0ZUFycmF5KHRoZVVyaSk7Ci0gICAgd3NFbnRpdHkuc2V0Qnl0ZXMoYik7Ci0gICAgc2V0SFRUUFNldHRpbmdzKHdzRW50aXR5KTsKLSAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQodGhlVXJpLCB3c0VudGl0eSk7Ci0gICAgLy8gcGFyc2UgdXJpXyBhcyBhIEhUTUwgZG9jdW1lbnQKLSAgICBIVE1MSGVhZEhhbmRsZXIgaGVhZEhhbmRsZXIgPSBuZXcgSFRNTEhlYWRIYW5kbGVyKHRoZVVyaSk7Ci0gICAgYnl0ZVtdIGhlYWQgPSBoZWFkSGFuZGxlci5oYXJ2ZXN0SGVhZFRhZ3MoYik7Ci0gICAgU3RyaW5nIGJ5dGVFbmNvZGluZyA9IGhlYWRIYW5kbGVyLmdldEJ5dGVFbmNvZGluZygpOwotICAgIFNBWFBhcnNlckZhY3RvcnkgZmFjdG9yeSA9IFNBWFBhcnNlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKGZhbHNlKTsKLSAgICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotICAgIFNBWFBhcnNlciBwYXJzZXIgPSBmYWN0b3J5Lm5ld1NBWFBhcnNlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oaGVhZCk7Ci0gICAgICBJbnB1dFN0cmVhbVJlYWRlciBpc3IgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoYmFpcywgYnl0ZUVuY29kaW5nKTsKLSAgICAgIElucHV0U291cmNlIGlzID0gbmV3IElucHV0U291cmNlKGlzcik7Ci0gICAgICBwYXJzZXIucGFyc2UoaXMsIGhlYWRIYW5kbGVyKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICB9Ci0gICAgU3RyaW5nW10gd3NpbFVSSXMgPSBoZWFkSGFuZGxlci5nZXRXc2lscygpOwotICAgIFN0cmluZ1tdIGRpc2NvVVJJcyA9IGhlYWRIYW5kbGVyLmdldERpc2NvcygpOwotICAgIC8vIHRydWUgaWYgdXJpXyBpcyBhIEhUTUwgZG9jdW1lbnQKLSAgICBpZiAod3NpbFVSSXMubGVuZ3RoID4gMCB8fCBkaXNjb1VSSXMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICB3c0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9IVE1MKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NpbFVSSXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBhYnNvbHV0ZVVSSSA9IGNvbnZlcnRUb0Fic29sdXRlVVJJKHRoZVVyaSwgd3NpbFVSSXNbaV0pOwotICAgICAgICBXZWJTZXJ2aWNlRW50aXR5IHdzaWxFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgICB3c2lsRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTSUwpOwotICAgICAgICB3c2lsRW50aXR5LnNldFVSSShhYnNvbHV0ZVVSSSk7Ci0gICAgICAgIGFzc29jaWF0ZSh3c0VudGl0eSwgd3NpbEVudGl0eSk7Ci0gICAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dChhYnNvbHV0ZVVSSSwgd3NpbEVudGl0eSk7Ci0gICAgICAgIGlmICgocGFyc2VPcHRpb24gfCBQQVJTRV9XU0lMKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlV1NJTChhYnNvbHV0ZVVSSSwgcGFyc2VPcHRpb24sIGJ5dGVFbmNvZGluZyApOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY29VUklzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgZGlzY29FbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgICBkaXNjb0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9ESVNDTyk7Ci0gICAgICAgIGRpc2NvRW50aXR5LnNldFVSSShkaXNjb1VSSXNbaV0pOwotICAgICAgICBhc3NvY2lhdGUod3NFbnRpdHksZGlzY29FbnRpdHkpOwotICAgICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQoZGlzY29VUklzW2ldLGRpc2NvRW50aXR5KTsKLSAgICAgICAgaWYgKChwYXJzZU9wdGlvbiB8IFBBUlNFX0RJU0NPKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlRElTQ08oZGlzY29VUklzW2ldLHBhcnNlT3B0aW9uKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgICAgICAgIHsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZmFsc2UgaWYgdXJpXyBpcyBub3QgYSBIVE1MIGRvY3VtZW50Ci0gICAgLy8gdGhlbiBwYXJzZSB1cmlfIGFzIGEgV1NJTCBkb2N1bWVudAotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcGFyc2VXU0lMKHRoZVVyaSwgcGFyc2VPcHRpb24sIGJ5dGVFbmNvZGluZyApOwotICAgICAgICAvLyBubyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgYSBXU0lMIGRvY3VtZW50Ci0gICAgICAgIHdzRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTSUwpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgICAgewotICAgICAgICAvLyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgbm90IGEgV1NJTCBkb2N1bWVudAotICAgICAgICAvLyB0aGVuIHBhcnNlIHVyaV8gYXMgYSBESVNDTyBkb2N1bWVudC4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBwYXJzZURJU0NPKHRoZVVyaSwgcGFyc2VPcHRpb24pOwotICAgICAgICAgIC8vIG5vIGV4Y2VwdGlvbiB0aHJvd24gaWYgdXJpXyBpcyBhIERJU0NPIGRvY3VtZW50Ci0gICAgICAgICAgd3NFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfRElTQ08pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gdDIpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgbm90IGEgRElTQ08gZG9jdW1lbnQKLSAgICAgICAgICAvLyB0aGVuIHBhcnNlIHVyaV8gYXMgYSBXU0RMIGRvY3VtZW50Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcGFyc2VXU0RMKHRoZVVyaSk7Ci0gICAgICAgICAgICAvLyBubyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgYSBXU0RMIGRvY3VtZW50Ci0gICAgICAgICAgICB3c0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0MykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgbm90IGEgV1NETCBkb2N1bWVudAotICAgICAgICAgICAgLy8gdGhlbiBkbyBub3RoaW5nCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlV1NJTChTdHJpbmcgd3NpbFVSSSwgaW50IHBhcnNlT3B0aW9uLCBTdHJpbmcgYnl0ZUVuY29kaW5nICkgdGhyb3dzIFdTSUxFeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdTRExFeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBXZWJTZXJ2aWNlRW50aXR5IHdzaWxFbnRpdHkgPSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NpbFVSSSk7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSAoV1NJTERvY3VtZW50KXdzaWxFbnRpdHkuZ2V0TW9kZWwoKTsKLSAgICBpZiAod3NpbERvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcHMgZnJvbSBvY2N1cnJpbmcgd2hlbiBhIFdTSUwgY3ljbGVzIG9jY3VyLgotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50VmVyYm9zZSh3c2lsVVJJLCBieXRlRW5jb2RpbmcgKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBpbnNwZWN0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBEZXNjcmlwdGlvbltdIGRlc2NzID0gc2VydmljZXNbaV0uZ2V0RGVzY3JpcHRpb25zKCk7Ci0gICAgICAvLyBTZXQgdGhlIGRvY3VtZW50YXRpb24gdG8gdGhlIDxzZXJ2aWNlPiBlbGVtZW50J3MgZmlyc3QgYWJzdHJhY3QuCi0gICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IG51bGw7Ci0gICAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IHNlcnZpY2VzW2ldLmdldEFic3RyYWN0cygpOwotICAgICAgaWYgKGFic3RyYWN0cyAhPSBudWxsICYmIGFic3RyYWN0cy5sZW5ndGggPiAwKQotICAgICAgICBkb2N1bWVudGF0aW9uID0gYWJzdHJhY3RzWzBdLmdldFRleHQoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGVzY3MubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAJU3RyaW5nIHJlZmVyZW5jZWROUyA9IGRlc2NzW2pdLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKTsKLSAgICAgIAkvLyBJZiBhIDxkZXNjcmlwdGlvbj4gZWxlbWVudCBjb250YWlucyBhbiBhYnN0cmFjdCwgdXNlIGl0IHRvIG92ZXJyaWRlIHRoZSBzZXJ2aWNlIGRvY3VtZW50YXRpb24uICAgICAgCQotICAgICAgCWFic3RyYWN0cyA9IGRlc2NzW2pdLmdldEFic3RyYWN0cygpOwotICAgICAgCWlmIChhYnN0cmFjdHMgIT0gbnVsbCAmJiBhYnN0cmFjdHMubGVuZ3RoID4gMCkKLSAgICAgIAkgIGRvY3VtZW50YXRpb24gPSBhYnN0cmFjdHNbMF0uZ2V0VGV4dCgpOwotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5OU19VUklfV1NETC5lcXVhbHMocmVmZXJlbmNlZE5TKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBsb2NhdGlvbiA9IGRlc2NzW2pdLmdldExvY2F0aW9uKCk7Ci0gICAgICAgICAgaWYgKGxvY2F0aW9uICE9IG51bGwgJiYgbG9jYXRpb24ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBhYnNvbHV0ZVVSSSA9IGNvbnZlcnRUb0Fic29sdXRlVVJJKHdzaWxVUkksIGxvY2F0aW9uKTsKLSAgICAgICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NkbEVudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICAgICAgICB3c2RsRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTREwpOwotICAgICAgICAgICAgd3NkbEVudGl0eS5zZXRVUkkoYWJzb2x1dGVVUkkpOwotICAgICAgICAgICAgd3NkbEVudGl0eS5zZXREb2N1bWVudGF0aW9uKGRvY3VtZW50YXRpb24pOwotICAgICAgICAgICAgYXNzb2NpYXRlKHdzaWxFbnRpdHksIHdzZGxFbnRpdHkpOwotICAgICAgICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KGFic29sdXRlVVJJLCB3c2RsRW50aXR5KTsKLSAgICAgICAgICAgIGlmICgocGFyc2VPcHRpb24gfCBQQVJTRV9XU0RMKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgICAgICAgcGFyc2VXU0RMKGFic29sdXRlVVJJKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoVURESUNvbnN0YW50cy5OU19VUklfVURESV9WMi5lcXVhbHMocmVmZXJlbmNlZE5TKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2lvbkVsZW1lbnQgZWUgPSBkZXNjc1tqXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgICAgICAgaWYgKGVlIGluc3RhbmNlb2YgU2VydmljZURlc2NyaXB0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IChTZXJ2aWNlRGVzY3JpcHRpb24pZWU7Ci0gICAgICAgICAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHNkLmdldExvY2F0aW9uKCk7Ci0gICAgICAgICAgICBTdHJpbmcgc2VydmljZUtleSA9IHNkLmdldFNlcnZpY2VLZXkoKS5nZXRUZXh0KCk7Ci0gICAgICAgICAgICBXZWJTZXJ2aWNlRW50aXR5IHVkZGlTZXJ2aWNlRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgICAgICAgIHVkZGlTZXJ2aWNlRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1VERElfU0VSVklDRSk7Ci0gICAgICAgICAgICBTdHJpbmcgdWRkaVNlcnZpY2VLZXlVUkkgPSBVRERJVVJJSGVscGVyLmdldFNlcnZpY2VLZXlVUkkoc2VydmljZUtleSxpbnF1aXJ5VVJMKTsKLSAgICAgICAgICAgIHVkZGlTZXJ2aWNlRW50aXR5LnNldFVSSSh1ZGRpU2VydmljZUtleVVSSSk7Ci0gICAgICAgICAgICB1ZGRpU2VydmljZUVudGl0eS5zZXREb2N1bWVudGF0aW9uKGRvY3VtZW50YXRpb24pOwotICAgICAgICAgICAgYXNzb2NpYXRlKHdzaWxFbnRpdHksdWRkaVNlcnZpY2VFbnRpdHkpOwotICAgICAgICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KHVkZGlTZXJ2aWNlS2V5VVJJLHVkZGlTZXJ2aWNlRW50aXR5KTsKLSAgICAgICAgICAgIC8vIFRPRE86IHBhcnNlIFdTREwgaWYgbmVjZXNzYXJ5Li4uCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIExpbmtbXSBsaW5rcyA9IGluc3BlY3Rpb24uZ2V0TGlua3MoKTsgICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoV1NJTENvbnN0YW50cy5OU19VUklfV1NJTC5lcXVhbHMobGlua3NbaV0uZ2V0UmVmZXJlbmNlZE5hbWVzcGFjZSgpKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb24gPSBudWxsOwotICAgICAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGxpbmtzW2ldLmdldEFic3RyYWN0cygpOwotICAgICAgICBpZiAoYWJzdHJhY3RzICE9IG51bGwgJiYgYWJzdHJhY3RzLmxlbmd0aCA+IDApCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiA9IGFic3RyYWN0c1swXS5nZXRUZXh0KCk7Ci0gICAgICAgIFN0cmluZyBsaW5rTG9jYXRpb24gPSBsaW5rc1tpXS5nZXRMb2NhdGlvbigpOwotICAgICAgICBTdHJpbmcgYWJzb2x1dGVVUkkgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSSh3c2lsVVJJLCBsaW5rTG9jYXRpb24pOwotICAgICAgICAvLyBQcmV2ZW50IGN5Y2xlcy4KLSAgICAgICAgV2ViU2VydmljZUVudGl0eSB3c2lsTGlua0VudGl0eSA9IGdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSShhYnNvbHV0ZVVSSSk7Ci0gICAgICAgIGlmICh3c2lsTGlua0VudGl0eSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgd3NpbExpbmtFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgICAgIHdzaWxMaW5rRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTSUwpOwotICAgICAgICAgIHdzaWxMaW5rRW50aXR5LnNldFVSSShhYnNvbHV0ZVVSSSk7Ci0gICAgICAgICAgd3NpbExpbmtFbnRpdHkuc2V0RG9jdW1lbnRhdGlvbihkb2N1bWVudGF0aW9uKTsKLSAgICAgICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQoYWJzb2x1dGVVUkksIHdzaWxMaW5rRW50aXR5KTsKLSAgICAgICAgICBpZiAoKHBhcnNlT3B0aW9uIHwgUEFSU0VfTElOS1MpID09IHBhcnNlT3B0aW9uKQotICAgICAgICAgICAgcGFyc2VXU0lMKGFic29sdXRlVVJJLCBwYXJzZU9wdGlvbiwgYnl0ZUVuY29kaW5nICk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzb2NpYXRlKHdzaWxFbnRpdHksd3NpbExpbmtFbnRpdHkpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHBhcnNlRElTQ08oU3RyaW5nIGRpc2NvVVJJLCBpbnQgcGFyc2VPcHRpb24pIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBFeGNlcHRpb24KLSAgewotICAgIFdlYlNlcnZpY2VFbnRpdHkgZGlzY29FbnRpdHkgPSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkoZGlzY29VUkkpOwotICAgIGJ5dGVbXSBiID0gZ2V0SW5wdXRTdHJlYW1Bc0J5dGVBcnJheShkaXNjb1VSSSk7Ci0gICAgZGlzY29FbnRpdHkuc2V0Qnl0ZXMoYik7Ci0gICAgc2V0SFRUUFNldHRpbmdzKGRpc2NvRW50aXR5KTsKLSAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGIpOwotICAgIERJU0NPUGFyc2VyIHBhcnNlciA9IG5ldyBESVNDT1BhcnNlcigpOwotICAgIERJU0NPUmVmZXJlbmNlW10gcmVmZXJlbmNlcyA9IHBhcnNlci5wYXJzZShkaXNjb1VSSSxuZXcgSW5wdXRTb3VyY2UoYmFpcykpOwotICAgIGlmIChyZWZlcmVuY2VzICE9IG51bGwgJiYgcmVmZXJlbmNlcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDtpPHJlZmVyZW5jZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlZmVyZW5jZXNbaV0gaW5zdGFuY2VvZiBESVNDT0NvbnRyYWN0UmVmZXJlbmNlKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gY29udHJhY3RSZWYKLSAgICAgICAgICBESVNDT0NvbnRyYWN0UmVmZXJlbmNlIHJlZmVyZW5jZSA9IChESVNDT0NvbnRyYWN0UmVmZXJlbmNlKXJlZmVyZW5jZXNbaV07Ci0gICAgICAgICAgU3RyaW5nIHJlZiA9IHJlZmVyZW5jZS5nZXRSZWYoKTsKLSAgICAgICAgICBTdHJpbmcgZG9jUmVmID0gcmVmZXJlbmNlLmdldERvY1JlZigpOwotICAgICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NkbEVudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICAgICAgd3NkbEVudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMKTsKLSAgICAgICAgICB3c2RsRW50aXR5LnNldFVSSShyZWYpOwotICAgICAgICAgIHdzZGxFbnRpdHkuc2V0RG9jdW1lbnRhdGlvbihkb2NSZWYpOwotICAgICAgICAgIGFzc29jaWF0ZShkaXNjb0VudGl0eSx3c2RsRW50aXR5KTsKLSAgICAgICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQocmVmLHdzZGxFbnRpdHkpOwotICAgICAgICAgIGlmICgocGFyc2VPcHRpb24gfCBQQVJTRV9XU0RMKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgICAgIHBhcnNlV1NETChyZWYpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIGRpc2NvdmVyeVJlZgotICAgICAgICAgIFN0cmluZyByZWYgPSByZWZlcmVuY2VzW2ldLmdldFJlZigpOwotICAgICAgICAgIC8vIFByZXZlbnQgY3ljbGVzLgotICAgICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgZGlzY29MaW5rRW50aXR5ID0gZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHJlZik7Ci0gICAgICAgICAgaWYgKGRpc2NvTGlua0VudGl0eSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGRpc2NvTGlua0VudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICAgICAgICBkaXNjb0xpbmtFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfRElTQ08pOwotICAgICAgICAgICAgZGlzY29MaW5rRW50aXR5LnNldFVSSShyZWYpOwotICAgICAgICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KHJlZixkaXNjb0xpbmtFbnRpdHkpOwotICAgICAgICAgICAgaWYgKChwYXJzZU9wdGlvbiB8IFBBUlNFX0xJTktTKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgICAgICAgcGFyc2VESVNDTyhyZWYscGFyc2VPcHRpb24pOwotICAgICAgICAgIH0KLSAgICAgICAgICBhc3NvY2lhdGUoZGlzY29FbnRpdHksZGlzY29MaW5rRW50aXR5KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBwYXJzZVdTREwoU3RyaW5nIHdzZGxVUkkpIHRocm93cyBXU0RMRXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh3c2RsVVJJKTsKLSAgfQotCi0gIHByaXZhdGUgYnl0ZVtdIGdldElucHV0U3RyZWFtQXNCeXRlQXJyYXkoU3RyaW5nIHVyaVN0cmluZykgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBUcnkgdG8gZ2V0IGEgY2FjaGVkIGNvcHkgb2YgdGhlIGJ5dGVbXQotICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NFbnRpdHkgPSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkodXJpU3RyaW5nKTsKLSAgICBpZiAod3NFbnRpdHkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBieXRlW10gYnl0ZXMgPSB3c0VudGl0eS5nZXRCeXRlcygpOwotICAgICAgaWYgKGJ5dGVzICE9IG51bGwpCi0gICAgICAgIHJldHVybiBieXRlczsKLSAgICB9Ci0gICAgLy8gR2V0IHRoZSBieXRlW10gYnkgb3BlbmluZyBhIHN0cmVhbSB0byB0aGUgVVJJCi0gICAgVVJMIHVybCA9IGNyZWF0ZVVSTCh1cmlTdHJpbmcpOwotICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotICAgIC8vIHByb3h5IHNlcnZlciBzZXR0aW5nCi0gICAgU3RyaW5nIHByb3h5VXNlck5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlVc2VyTmFtZSIpOwotICAgIFN0cmluZyBwcm94eVBhc3N3b3JkID0gU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5UGFzc3dvcmQiKTsKLSAgICBpZiAocHJveHlVc2VyTmFtZSAhPSBudWxsICYmIHByb3h5UGFzc3dvcmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgdXNlck5hbWVQYXNzd29yZCA9IG5ldyBTdHJpbmdCdWZmZXIocHJveHlVc2VyTmFtZSk7Ci0gICAgICB1c2VyTmFtZVBhc3N3b3JkLmFwcGVuZCgnOicpLmFwcGVuZChwcm94eVBhc3N3b3JkKTsKLSAgICAgIEJBU0U2NEVuY29kZXIgZW5jb2RlciA9IG5ldyBCQVNFNjRFbmNvZGVyKCk7Ci0gICAgICBTdHJpbmcgZW5jb2RpbmcgPSBlbmNvZGVyLmVuY29kZSh1c2VyTmFtZVBhc3N3b3JkLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKSk7Ci0gICAgICB1c2VyTmFtZVBhc3N3b3JkLnNldExlbmd0aCgwKTsKLSAgICAgIHVzZXJOYW1lUGFzc3dvcmQuYXBwZW5kKCJCYXNpYyAiKS5hcHBlbmQoZW5jb2RpbmcpOwotICAgICAgY29ubi5zZXRSZXF1ZXN0UHJvcGVydHkoIlByb3h5LWF1dGhvcml6YXRpb24iLCB1c2VyTmFtZVBhc3N3b3JkLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHNldHRpbmcKLSAgICBpZiAoaHR0cEJhc2ljQXV0aFVzZXJuYW1lXyAhPSBudWxsICYmIGh0dHBCYXNpY0F1dGhQYXNzd29yZF8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKGh0dHBCYXNpY0F1dGhVc2VybmFtZV8pOwotICAgICAgc2IuYXBwZW5kKCc6JykuYXBwZW5kKGh0dHBCYXNpY0F1dGhQYXNzd29yZF8pOwotICAgICAgQkFTRTY0RW5jb2RlciBlbmNvZGVyID0gbmV3IEJBU0U2NEVuY29kZXIoKTsKLSAgICAgIFN0cmluZyBlbmNvZGluZyA9IGVuY29kZXIuZW5jb2RlKHNiLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKSk7Ci0gICAgICBzYi5zZXRMZW5ndGgoMCk7Ci0gICAgICBzYi5hcHBlbmQoIkJhc2ljICIpLmFwcGVuZChlbmNvZGluZyk7Ci0gICAgICBjb25uLnNldFJlcXVlc3RQcm9wZXJ0eSgiQXV0aG9yaXphdGlvbiIsIHNiLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7Ci0gICAgICBTdHJpbmcgd3d3QXV0aE1zZyA9IGNvbm4uZ2V0SGVhZGVyRmllbGQoIldXVy1BdXRoZW50aWNhdGUiKTsKLSAgICAgIGlmICh3d3dBdXRoTXNnICE9IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbihuZXcgSU9FeGNlcHRpb24oKSwgd3d3QXV0aE1zZywgdXJpU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3d3QXV0aE1zZyA9IGNvbm4uZ2V0SGVhZGVyRmllbGQoIldXVy1BdXRoZW50aWNhdGUiKTsKLSAgICAgIGlmICh3d3dBdXRoTXNnICE9IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbihpb2UsIHd3d0F1dGhNc2csIHVyaVN0cmluZyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IGlvZTsKLSAgICB9Ci0gICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVsxMDI0XTsKLSAgICBpbnQgYnl0ZVJlYWQgPSBpcy5yZWFkKGIpOwotICAgIHdoaWxlIChieXRlUmVhZCAhPSAtMSkKLSAgICB7Ci0gICAgICBiYW9zLndyaXRlKGIsIDAsIGJ5dGVSZWFkKTsKLSAgICAgIGJ5dGVSZWFkID0gaXMucmVhZChiKTsKLSAgICB9Ci0gICAgaXMuY2xvc2UoKTsKLSAgICByZXR1cm4gYmFvcy50b0J5dGVBcnJheSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFVSTCBjcmVhdGVVUkwoU3RyaW5nIHVybCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIG5ldyBVUkwodXJsKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhc3NvY2lhdGUoV2ViU2VydmljZUVudGl0eSBwYXJlbnQsIFdlYlNlcnZpY2VFbnRpdHkgY2hpbGQpCi0gIHsKLSAgICBwYXJlbnQuYWRkQ2hpbGQoY2hpbGQpOwotICAgIGNoaWxkLnNldFBhcmVudChwYXJlbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29udmVydFRvQWJzb2x1dGVVUkkoU3RyaW5nIGJhc2VVUkksU3RyaW5nIHJlZlVSSSkKLSAgewotICAgIGlmIChyZWZVUkkgIT0gbnVsbCAmJiByZWZVUkkuaW5kZXhPZigiOiIpIDwgMCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgYWJzb2x1dGVVUkkgPSBuZXcgU3RyaW5nQnVmZmVyKGJhc2VVUkkuc3Vic3RyaW5nKDAsTWF0aC5tYXgoYmFzZVVSSS5sYXN0SW5kZXhPZignXFwnKSxiYXNlVVJJLmxhc3RJbmRleE9mKCcvJykrMSkpKTsKLSAgICAgIGFic29sdXRlVVJJLmFwcGVuZChyZWZVUkkpOwotICAgICAgcmV0dXJuIGFic29sdXRlVVJJLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiByZWZVUkk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0SFRUUFNldHRpbmdzKFdlYlNlcnZpY2VFbnRpdHkgZW50aXR5KQotICB7Ci0gICAgaWYgKGh0dHBCYXNpY0F1dGhVc2VybmFtZV8gIT0gbnVsbCAmJiBodHRwQmFzaWNBdXRoUGFzc3dvcmRfICE9IG51bGwpCi0gICAgewotICAgICAgZW50aXR5LnNldEhUVFBVc2VybmFtZShodHRwQmFzaWNBdXRoVXNlcm5hbWVfKTsKLSAgICAgIGVudGl0eS5zZXRIVFRQUGFzc3dvcmQoaHR0cEJhc2ljQXV0aFBhc3N3b3JkXyk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCYXNpY0F1dGhVc2VybmFtZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUoU3RyaW5nIHVzZXJuYW1lKQotICB7Ci0gICAgaHR0cEJhc2ljQXV0aFVzZXJuYW1lXyA9IHVzZXJuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCYXNpY0F1dGhQYXNzd29yZF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQoU3RyaW5nIHBhc3N3b3JkKQotICB7Ci0gICAgaHR0cEJhc2ljQXV0aFBhc3N3b3JkXyA9IHBhc3N3b3JkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC93c2lsLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC93c2lsLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNDUzMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvd3NpbC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgZm9yIEFkZFdTRExUb1dTSUxDb21tYW5kCi0jCi1NU0dfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFM9SVdBQjAwNTVFIEludmFsaWQgY29tbWFuZCBhcmd1bWVudHMuCi1NU0dfRVJST1JfSUxMRUdBTF9BUkdVTUVOVFM9SVdBQjAxMDVFIElsbGVnYWwgYXJndW1lbnQuCi1NU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSST1JV0FCMDE4NUUgSW52YWxpZCBXU0RMIFVSSS4KLU1TR19FUlJPUl9JTlZBTElEX1dTSUxfVVJJPUlXQUIwMjA2RSBJbnZhbGlkIFdTSUwgVVJJLgotTVNHX0VSUk9SX1VOUkVTT0xWQUJMRV9XU0RMPUlXQUIwNDA1RSBXU0RMIGlzIHVucmVzb2x2YWJsZS4KLU1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTj1JV0FCMDQ1MUUgQW4gdW5leHBlY3RlZCBleGNlcHRpb24gaGFzIG9jY3VyZWQuCi1NU0dfRVJST1JfTUFMRk9STUVEX1dTREw9SVdBQjA0NTJFIFdTREwgaXMgbWFsZm9ybWVkLCBlcnJvciBwYXJzaW5nIFdTREwuCi1NU0dfRVJST1JfV1JJVEVfV1NJTD1JV0FCMDQ1M0UgRXJyb3Igd3JpdGluZyBXU0lMLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvcGFyc2VyL1BsdWdpbk1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9wYXJzZXIvUGx1Z2luTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzNDQwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9wYXJzZXIvUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGNsYXNzIFBsdWdpbk1lc3NhZ2VzIGV4dGVuZHMgTkxTCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLnBsdWdpbiI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHN0YXRpYwotICB7Ci0gICAgTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgUGx1Z2luTWVzc2FnZXMuY2xhc3MpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUDsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUF9URVNUOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFM7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9OVFRDT01NOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3BhcnNlci9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3BhcnNlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRiNjc0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgUHVibGljVURESVJlZ2lzdHJ5VHlwZQotIwotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUD1TQVAgVURESSBSZWdpc3RyeQotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUF9URVNUPVNBUCBVRERJIFRlc3QgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9YTUVUSE9EUz1YTWV0aG9kcyBSZWdpc3RyeQotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX05UVENPTU09TlRUIENvbW11bmljYXRpb25zIFJlZ2lzdHJ5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0ZTg2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjBkYjg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLS5zZXR0aW5ncwotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVjMGY0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWJkNTY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uuc3d0O2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZTtidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5mb3JtcztidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWksCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU1YWMzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgc2NoZW1hLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGljb25zLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vYmoxNi9maWxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL29iajE2L2ZpbGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYyZGVkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL29iajE2L2ZpbGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb2JqMTYvZmxkcl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vYmoxNi9mbGRyX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3OTFmMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vYmoxNi9mbGRyX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L2Zhdm9yaXRlX292ci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L2Zhdm9yaXRlX292ci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYjE2NzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi9mYXZvcml0ZV9vdnIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi9pbnZhbGlkdHlwZV9vdnIuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvaWNvbnMvZnVsbC9vdnIxNi9pbnZhbGlkdHlwZV9vdnIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTlkY2NjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvaW52YWxpZHR5cGVfb3ZyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvdW5tb2RpZmlhYmxlX292ci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L3VubW9kaWZpYWJsZV9vdnIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDkzZDgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvdW5tb2RpZmlhYmxlX292ci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9pY29ucy9mdWxsL292cjE2L3dhcm5pbmdfb3ZyLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvd2FybmluZ19vdnIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTJkYWM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL2ljb25zL2Z1bGwvb3ZyMTYvd2FybmluZ19vdnIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNhYTExYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVNlcnZpY2UgcG9saWN5Ci1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLVNFUlZJQ0VfUE9MSUNZX05BTUU9U2VydmljZSBwb2xpY3kgVUkKLVBSRUZFUkVOQ0VfU0VSVklDRVBPTElDSUVTPVNlcnZpY2UgUG9saWNpZXMKLUNPTVBMSUFOQ0VfTEVWRUxfTE9OR05BTUU9Q29tcGxpYW5jZSBsZXZlbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGJmZDZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InNlcnZpY2Vwb2xpY3l1aSIgbmFtZT0iJVNFUlZJQ0VfUE9MSUNZX05BTUUiIHNjaGVtYT0ic2NoZW1hL3NlcnZpY2VQb2xpY3l1aS5leHNkIi8+Ci0gICAKLSAgPCEtLSBXZSBuZWVkIHRoaXMgcGx1Z2luIHRvIGJlIGxvYWRlZCBhdCBzdGFydHVwIHRpbWUgc28gdGhhdCB0aGUKLSAgICAgICBTZXJ2aWNlUG9saWN5UHJvcGVydHlUZXN0ZXIgY2xhc3Mgd2lsbCBhbHdheXMgYmUgbG9hZGVkLiAgSWYgdGhpcyBpcwotICAgICAgIG5vdCBkb25lIHRoZW4gdGhlIFNlcnZpY2UgUG9saWN5IHByb2plY3QgcHJvcGVydHkgcGFnZSB3aWxsIGFwcGVhcgotICAgICAgIG9uIGFsbCBwcm9qZWN0IHByb3BlcnR5IHBhZ2VzIHVudGlsIHRoZSBwbHVnaW4gaGFzIGJlZW4gbG9hZGVkLiAKLSAgICAgICAtLT4KLSAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCIvPgotICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotICAgICAgPHBhZ2UgbmFtZT0iJVBSRUZFUkVOQ0VfU0VSVklDRVBPTElDSUVTIgotICAgICAgCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLnByZWZlcmVuY2VzLlNlcnZpY2VQb2xpY2llc1ByZWZlcmVuY2VQYWdlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJlZmVyZW5jZXMuV1NJQ29tcGxpYW5jZVByZWZlcmVuY2VQYWdlIj4KLSAgICAgIDwvcGFnZT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xpY3l1aSI+Ci0gICAgIDxzZXJ2aWNlUG9saWN5VUk+Ci0gICAgICAgPG9wZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2kuKiI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBsb25nTmFtZT0iJUNPTVBMSUFOQ0VfTEVWRUxfTE9OR05BTUUiLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LnN1Z2dlc3Rpb25FbnVtIi8+Ci0gICAgICAgICA8ZW5hYmxlZCBtdWx0aXNlbGVjdD0idHJ1ZSIvPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICA8L3NlcnZpY2VQb2xpY3lVST4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJvcGVydHlQYWdlcyI+Ci0KLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBuYW1lPSIlUFJFRkVSRU5DRV9TRVJWSUNFUE9MSUNJRVMiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLnByb3BlcnRpZXMuU2VydmljZVBvbGljaWVzUHJvcGVydHlQYWdlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJvcGVydGllcy5XU0lDb21wbGlhbmNlUHJvcGVydHlQYWdlIj4KLSAgICAgICAgICAgCi0gICAgICAgICAgICA8ZW5hYmxlZFdoZW4+Ci0gICAgICAgICAgICAgICA8YWRhcHQgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiPiAKLSAgICAgICAgICAgICAgICAgPHRlc3QgcHJvcGVydHk9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5pc0VuYWJsZWQiLz4KLSAgICAgICAgICAgICAgIDwvYWRhcHQ+IAotICAgICAgICAgICAgPC9lbmFibGVkV2hlbj4KLSAgICAgIDwvcGFnZT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMucHJvcGVydHlUZXN0ZXJzIj4KLSAgICA8cHJvcGVydHlUZXN0ZXIKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuZW5hYmxlZCIKLSAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0IgotICAgICAgbmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkiCi0gICAgICBwcm9wZXJ0aWVzPSJpc0VuYWJsZWQiCi0gICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLnByb3BlcnRpZXMuU2VydmljZVBvbGljeVByb3BlcnR5VGVzdGVyIj4KLSAgICA8L3Byb3BlcnR5VGVzdGVyPgotICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc2NoZW1hL3NlcnZpY2VQb2xpY3l1aS5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc2NoZW1hL3NlcnZpY2VQb2xpY3l1aS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODZjNTVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NjaGVtYS9zZXJ2aWNlUG9saWN5dWkuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kudWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS51aSIgaWQ9InNlcnZpY2VQb2xpY3lVSSIgbmFtZT0iU2VydmljZSBwb2xpY3kgVUkiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhpcyBleHRlbnNpb24gYWxsb3dzIGV4dGVuZGVycyB0byBhZGQgc2VydmljZSBwb2xpY3kgVUkgb3BlcmF0aW9ucyBmb3IgdGhlCi0gICAgICAgICBzZXJ2aWNlIHBvbGljaWVzIHRoYXQgdGhleSBoYXZlIGFkZGVkLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzZXJ2aWNlUG9saWN5VUkiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0ic2VydmljZVBvbGljeVVJIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGV4dGVuc2lvbiBpcyBpbnRlbmRlZCBmb3IgZXh0ZW5kZXJzIHdobyB3YW50IHRvIGFkZCBVSSBvcGVyYXRpb25zIHRvIHRoZSBTZXJ2aWNlIHBvbGljaWVzIHRoYXQgdGhleSBoYXZlIGRlZmluZWQuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8Y2hvaWNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJvcGVyYXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icXVpY2tGaXgiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvY2hvaWNlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iZGVzY3JpcHRvciI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgQSBkZXNjcmlwdG9yIGZvciB0aGlzIFNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBvciBhY3Rpb24uCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgZGVzY3JpcHRpb24gb2YgdGhpcyBzZXJ2aWNlIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzaG9ydE5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIHNob3J0IG5hbWUgb2YgdGhpcyBzZXJ2aWNlIG9wZXJhdGlvbi4gIE5vdGU6IGlmIGEgc2hvcnQgbmFtZSBpcyBub3Qgc3BlY2lmaWVkIGl0IGlzIGRlZmF1bHRlZCB0byB0aGUgdmFsdWUgb2YgdGhlIGxvbmcgbmFtZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsb25nTmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbG9uZyBuYW1lIG9mIHRoaXMgc2VydmljZSBvcGVyYXRpb24uICBOb3RlOiBpZiBhIGxvbmcgbmFtZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBpdCBpcyBkZWZhdWx0ZWQgdG8gdGhlIHNob3J0TmFtZSB2YWx1ZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb250ZXh0SGVscElkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjb250ZXh0IGhlbHAgaWQgZm9yIHRoaXMgc2VydmljZSBvcGVyYXRpb24gaWYgaXQgaXMgcmVxdWlyZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWNvbnBhdGgiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBwbHVnaW4gcmVsYXRpdmUgcGF0aCB0byBzb21lIGljb24gZmlsZSBmb3IgdGhpcyBzZXJ2aWNlIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0ib3BlcmF0aW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBEZWZpbmVzIGEgU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkZXNjcmlwdG9yIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImVuYWJsZWQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0gICAgICAgICAgICA8Y2hvaWNlPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzZWxlY3Rpb24iLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY29tcGxleCIvPgotICAgICAgICAgICAgPC9jaG9pY2U+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIHVuaXF1ZSBpZCBvZiB0aGlzIHNlcnZpY2Ugb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvbGljeVBhdHRlcm4iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZSBzcGVjaWZpZXMgd2hpY2ggc2VydmljZSBwb2xpY2VzIHRoaXMgb3BlcmF0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aC4gIEFueSBKYXZhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXkgYmUgc3BlY2lmaWVkLiAgVGhpcyBleHByZXNzaW9uIHdpbGwgYmUgdXNlZCB0byBtYXRjaCB0aGUgaWRzIG9mIGFsbCBrbm93biBzZXJ2aWNlIHBvbGljeSBpZHMuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0id29ya3NwYWNlT25seSIgdHlwZT0iYm9vbGVhbiI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIGlmIHRoaXMgb3BlcmF0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCBpbiB0aGUgd29ya3NwYWNlIHByZWZlcmVuY2UgcGFnZS4gIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgaXQgaXMgZGVmYXVsdGVkIHRvIGZhbHNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlZmF1bHRkYXRhIiB0eXBlPSJib29sZWFuIiB1c2U9ImRlZmF1bHQiIHZhbHVlPSJ0cnVlIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iZW51bWVyYXRpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoaXMgZWxlbWVudCBkZWZpbmVzIHRoZSBlbnVtZXJhdGlvbiB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aC4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGlkIG9mIHRoaXMgZW51bWVyYXRpb24uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGVmYXVsdEl0ZW0iIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldCBieSB0aGUgZW51bWVyYXRpb24uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InNlbGVjdGlvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IHRoZSBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIGEgc29tZSBraW5kIG9mIFVJIGJvb2xlYW4gc2VsZWN0aW9uLiAgQWxsIHNlcnZpY2UgcG9saWNpZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3BlcmF0aW9uIHNob3VsZCB1c2UgdGhlIG9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5ib29sZWFuRW51bSBlbnVtZXJhdGlvbi4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWNvbiIgdHlwZT0iYm9vbGVhbiI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBib29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgYm9vbGVhbiBzZWxlY3Rpb24gc2hvdWxkIGJlIHJlbmRlcmVkIHZpYSBhbiBpY29uLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJjb21wbGV4Ij4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgY29tcGxleCB0byByZW5kZXIgYW5kIHBlcnNpc3QuICBUaGUgbGF1bmNoQ2xhc3MgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGxhdW5jaCBhIGRpYWxvZyB0byBzZXQgbW9yZSBjb21wbGV4IGRhdGEuICBUaGUgZXh0ZW5kZXIgd2lsbCBuZWVkIHRvIGNhbGwgdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtIEFQSSB0byBwZXJzaXN0IGRhdGEgb24gZWFjaCBwb2xpY3kgYXMgcmVxdWlyZWQuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhdW5jaENsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB0byBsYXVuY2ggYSBkaWFsb2cuICBUaGUgY2xhc3Mgc3BlY2lmaWVkIG11c3QgaW1wbGVtZW50IHRoZSBJTGF1bmNoT3BlcmF0aW9uIGludGVyZmFjZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iZW5hYmxlZCI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgSW5kaWNhdGVzIGlmIHRoaXMgb3BlcmF0aW9uIGlzIGVuYWJsZWQvZ3JheWVkIG91dCBvciBub3QgaW4gdGhlIFVJLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJlbmFibGVkQ2xhc3MiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHNwZWNpZmllZCBpbiB0aGUgYXR0cmlidXRlIG11Y2ggaW1wbGVtZW50IHRoZSBJRW5hYmxlT3BlcmF0aW9uIGludGVyZmFjZS4gIFRoaXMgY2xhc3MgYWxsb3dzIGV4dGVuZGVycyB0byBwcm92aWRlIGEgbW9yZSBjb21wbGV4IGxvZ2ljIGZvciB3aGVuIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im11bHRpc2VsZWN0IiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEluZGljYXRlcyBpZiB0aGlzIG9wZXJhdGlvbiBhbGxvd3MgbXVsdGlwbGUgc2VsZWN0aW9uIG9mIHBvbGljeSBvYmplY3RzIG9yIG5vdC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0icXVpY2tGaXgiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoaXMgZWxlbWVudCBhbGxvd3MgZXh0ZW5kZXJzIHRvIGFkZCBxdWljayBmaXhlcyB0byB0aGUgU2VydmljZSBwb2xpY3kgVUkgZnJhbWV3b3Jrcy4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iYWN0aW9uIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwbHVnaW5JZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgcGx1Z2luIGlkIHRoYXQgdGhlIGVuY2xvc2VkIHF1aWNrIGZpeCBhY3Rpb25zIGFwcGx5IHRvLiAgVGhpcyBpcyB0aGUgaWQgdGhhdCB3aWxsIG1hdGNoIHRoZSBwbHVnaW4gaWQgZnJvbSB0aGUgSVN0YXR1cyBvZiBhIFNlcnZpY2VQb2xpY3kgb2JqZWN0LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvZGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNvZGUgdGhhdCB0aGUgZW5jbG9zZWQgcXVpY2sgZml4IGFjdGlvbnMgYXBwbHkgdG8uICBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgd2lsbCBtYXRjaCB0aGUgY29kZSBmcm9tIHRoZSBJU3RhdHVzIG9mIGEgU2VydmljZVBvbGljeSBvYmplY3QuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImFjdGlvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhlIGVsZW1lbnQgaXMgdXNlZCB0byBhZGQgYSBxdWljayBmaXggYWN0aW9uLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkZXNjcmlwdG9yIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgdGhhdCB0aGUgZnJhbWV3b3JrIHdpbGwgY2FsbCBmb3IgYSBwYXJ0aWN1bGFyIHF1aWNrIGZpeCBhY3Rpb24uICBUaGlzIGNsYXNzIG11c3QgaW1wbGVtZW50IHRoZSBJUXVpY2tGaXhBY3Rpb24gaW50ZXJmYWNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAxLjAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL0Jhc2VPcGVyYXRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL0Jhc2VPcGVyYXRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTBmOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9CYXNlT3BlcmF0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZyBvZiBzZXJ2aWNlIHBvbGljeQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU3RhdGVFbnVtZXJhdGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSUVuYWJsZU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSUxhdW5jaE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzLlJlZ2lzdHJ5VXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBCYXNlT3BlcmF0aW9uSW1wbCAKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgaWQ7Ci0gIHByaXZhdGUgSURlc2NyaXB0b3IgICAgICAgICAgIGRlc2NyaXB0b3I7Ci0gIHByaXZhdGUgT3BlcmF0aW9uS2luZCAgICAgICAgIG9wZXJhdGlvbktpbmQ7Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgIHBvbGljeUlkUGF0dGVybjsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICAgbXVsdGlTZWxlY3QgPSBmYWxzZTsKLSAgcHJpdmF0ZSBJTGF1bmNoT3BlcmF0aW9uICAgICAgbGF1bmNoT3BlcmF0aW9uT2JqZWN0OwotICBwcml2YXRlIElFbmFibGVPcGVyYXRpb24gICAgICBlbmFibGVPcGVyYXRpb25PYmplY3Q7Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgIGVudW1JZDsKLSAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZW5hYmxlZEVsZW1lbnQ7Ci0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbXBsZXhFbGVtZW50OwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgICB3b3Jrc3BhY2VPbmx5OwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICBkZWZhdWx0SXRlbTsgIAotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgICB1c2VEZWZhdWx0RGF0YTsKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgdGhpcy5pZCA9IGlkOwotICB9Ci0gIHB1YmxpYyBib29sZWFuIGlzV29ya3NwYWNlT25seSgpCi0gIHsKLSAgICByZXR1cm4gd29ya3NwYWNlT25seTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdvcmtzcGFjZU9ubHkoIGJvb2xlYW4gd29ya3NwYWNlT25seSApCi0gIHsKLSAgICB0aGlzLndvcmtzcGFjZU9ubHkgPSB3b3Jrc3BhY2VPbmx5OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbiggYm9vbGVhbiBpc0ljb24gKQotICB7Ci0gICAgaWYoIGlzSWNvbiApCi0gICAgewotICAgICAgb3BlcmF0aW9uS2luZCA9IE9wZXJhdGlvbktpbmQuaWNvblNlbGVjdGlvbjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG9wZXJhdGlvbktpbmQgPSBPcGVyYXRpb25LaW5kLnNlbGVjdGlvbjsgICAgIAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElEZXNjcmlwdG9yIGdldERlc2NyaXB0b3IoKQotICB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gIH0KLQotICBwdWJsaWMgT3BlcmF0aW9uS2luZCBnZXRPcGVyYXRpb25LaW5kKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb25LaW5kOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbnVtZXJhdGlvbklkKCkKLSAgewotICAgIHJldHVybiBlbnVtSWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbnVtZXJhdGlvbklkKCBTdHJpbmcgZW51bUlkICkKLSAgewotICAgIHRoaXMuZW51bUlkICAgPSBlbnVtSWQ7ICAKLSAgICBvcGVyYXRpb25LaW5kID0gT3BlcmF0aW9uS2luZC5lbnVtZXJhdGlvbjsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRQb2xpY3lJZFBhdHRlcm4oKQotICB7Ci0gICAgcmV0dXJuIHBvbGljeUlkUGF0dGVybjsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcyApCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgCi0gICAgLy8gSWYgd2UgZG9uJ3QgYWxsb3cgbXVsdGkgc2VsZWN0IGFuZCBtdWx0aXBsZSBwb2xpY2llcyBoYXZlIGJlZW4gc2VsZWN0ZWQKLSAgICAvLyB0aGVuIHRoaXMgb3BlcmF0aW9uIGlzIG5vdCBlbmFibGVkLgotICAgIGlmKCAhbXVsdGlTZWxlY3QgJiYgc2VsZWN0ZWRQb2xpY2llcy5zaXplKCkgPiAxICkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIHJlc3VsdCAmJiBlbmFibGVkRWxlbWVudCAhPSBudWxsICkKLSAgICB7Ci0gICAgICAvLyBXZSBoYXZlIGFuIGV4dGVuc2lvbiBmb3IgdGhpcyBlbmFibGVtZW50IGNvZGUgc28gd2Ugd2lsbCBjYWxsIHRoaXMKLSAgICAgIC8vIGNvZGUuCi0gICAgICBpZiggZW5hYmxlT3BlcmF0aW9uT2JqZWN0ID09IG51bGwgKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBlbmFibGVkQ2xhc3NOYW1lID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGVOYW1lKCBlbmFibGVkRWxlbWVudCwgImVuYWJsZWRjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIGVuYWJsZU9wZXJhdGlvbk9iamVjdCA9IChJRW5hYmxlT3BlcmF0aW9uKWVuYWJsZWRFbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oIGVuYWJsZWRDbGFzc05hbWUgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkubG9nRXJyb3IoICJFcnJvciBsb2FkaW5nIHNlcnZpY2UgcG9saWN5IHVpIFwiZW5hYmxlZFwiIGNsYXNzLiIsIGV4YyApOyAgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggZW5hYmxlT3BlcmF0aW9uT2JqZWN0ICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gZW5hYmxlT3BlcmF0aW9uT2JqZWN0LmlzRW5hYmxlZCggc2VsZWN0ZWRQb2xpY2llcyApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsYXVuY2hPcGVyYXRpb24oIElTZXJ2aWNlUG9saWN5IHRoaXNQb2xpY3ksIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMgKQotICB7Ci0gICAgaWYoIGxhdW5jaE9wZXJhdGlvbk9iamVjdCA9PSBudWxsICkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGxhdW5jaENsYXNzTmFtZSA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlTmFtZSggY29tcGxleEVsZW1lbnQsICJsYXVuY2hjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBsYXVuY2hPcGVyYXRpb25PYmplY3QgPSAoSUxhdW5jaE9wZXJhdGlvbiljb21wbGV4RWxlbWVudC5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCBsYXVuY2hDbGFzc05hbWUgKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmxvZ0Vycm9yKCAiRXJyb3IgbG9hZGluZyBzZXJ2aWNlIHBvbGljeSB1aSBsYXVuY2ggY2xhc3MuIiwgZXhjICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYoIGxhdW5jaE9wZXJhdGlvbk9iamVjdCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBsYXVuY2hPcGVyYXRpb25PYmplY3QubGF1bmNoKCBzZWxlY3RlZFBvbGljaWVzICk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNNdWx0aVNlbGVjdCgpCi0gIHsKLSAgICByZXR1cm4gbXVsdGlTZWxlY3Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNdWx0aVNlbGVjdChib29sZWFuIG11bHRpU2VsZWN0KQotICB7Ci0gICAgdGhpcy5tdWx0aVNlbGVjdCA9IG11bHRpU2VsZWN0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRvcihJRGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICB7Ci0gICAgdGhpcy5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBvbGljeUlkUGF0dGVybihTdHJpbmcgcG9saWN5SWRQYXR0ZXJuKQotICB7Ci0gICAgdGhpcy5wb2xpY3lJZFBhdHRlcm4gPSBwb2xpY3lJZFBhdHRlcm47Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZW5hYmxlZEVsZW1lbnQpCi0gIHsKLSAgICB0aGlzLmVuYWJsZWRFbGVtZW50ID0gZW5hYmxlZEVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDb21wbGV4RWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29tcGxleEVsZW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbXBsZXhFbGVtZW50ID0gY29tcGxleEVsZW1lbnQ7Ci0gICAgb3BlcmF0aW9uS2luZCA9IE9wZXJhdGlvbktpbmQuY29tcGxleDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmF1bHRJdGVtKCBTdHJpbmcgZGVmYXVsdEl0ZW0gKQotICB7Ci0gICAgdGhpcy5kZWZhdWx0SXRlbSA9IGRlZmF1bHRJdGVtOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEl0ZW0oKQotICB7Ci0gICAgaWYoIGRlZmF1bHRJdGVtID09IG51bGwgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICAgICBwbGF0Zm9ybSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1MaXN0ID0gcGxhdGZvcm0uZ2V0U3RhdGVFbnVtZXJhdGlvbiggZW51bUlkICk7Ci0gICAgICAKLSAgICAgIGlmKCBlbnVtTGlzdCAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgZGVmYXVsdEl0ZW0gPSBlbnVtTGlzdC5nZXQoMCkuZ2V0SWQoKTsKLSAgICAgIAotICAgICAgICAvLyBObyBkZWZhdWx0IGl0ZW0gaGFzIGJlZW4gc3BlY2lmaWVkIHNvIHdlIHdpbGwgc2VhcmNoIHRoZSBlbnVtZXJhdGlvbiBmb3Igb25lLgotICAgICAgICAvLyBJZiBub25lIHdhcyBzcGVjaWZpZWQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGVudW1lcmF0aW9uIGlzIHVzZWQuCi0gICAgICAgIGZvciggSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0gOiBlbnVtTGlzdCApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggaXRlbS5pc0RlZmF1bHQoKSApCi0gICAgICAgICAgewotICAgICAgICAgICAgZGVmYXVsdEl0ZW0gPSBpdGVtLmdldElkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgICAKLSAgICByZXR1cm4gZGVmYXVsdEl0ZW07Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1VzZURlZmF1bHREYXRhKCkKLSAgewotICAgIHJldHVybiB1c2VEZWZhdWx0RGF0YTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVzZURlZmF1bHREYXRhKCBib29sZWFuIHVzZURlZmF1bHREYXRhICkKLSAgewotICAgIHRoaXMudXNlRGVmYXVsdERhdGEgPSB1c2VEZWZhdWx0RGF0YTsKLSAgfSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9JQ29uTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9JQ29uTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjk0OTYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvSUNvbk1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjUgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuQ29tcG9zaXRlSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgSUNvbk1hbmFnZXIKLXsKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBJbWFnZT4gaWNvblRhYmxlOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBmYXZvcml0ZSA9ICJmYXYiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgaW52YWxpZCAgPSAiaW52IjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdhcm5pbmcgID0gIndhciI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIGZpbmFsIFN0cmluZyBsb2NrICAgICA9ICJsb2MiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIFN0cmluZyBmb2xkZXJCYXNlVVJMOyAKLSAgcHJpdmF0ZSBTdHJpbmcgbGVhZkJhc2VVUkw7Ci0gIHByaXZhdGUgSW1hZ2UgIGZhdm9yaXRlSW1hZ2U7Ci0gIHByaXZhdGUgSW1hZ2UgIGludmFsaWRJbWFnZTsKLSAgcHJpdmF0ZSBJbWFnZSAgd2FybmluZ0ltYWdlOwotICBwcml2YXRlIEltYWdlICBsb2NrSW1hZ2U7Ci0gIAotICBwcml2YXRlIERlY29yYXRvckRlc2NyaXB0b3IgaWNvbkNyZWF0b3I7Ci0gIAotICBwdWJsaWMgSUNvbk1hbmFnZXIoKQotICB7Ci0gICAgaWNvblRhYmxlID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbWFnZT4oKTsKLSAgICBhZGRPdmVybGF5SWNvbnMoKTsgIAotICAgIGljb25DcmVhdG9yID0gbmV3IERlY29yYXRvckRlc2NyaXB0b3IoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRGb2xkZXJCYXNlVXJsKCkKLSAgewotICAgIHJldHVybiBmb2xkZXJCYXNlVVJMOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGVhZkJhc2VVcmwoKQotICB7Ci0gICAgcmV0dXJuIGxlYWZCYXNlVVJMOyAgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBhZGRPdmVybGF5SWNvbnMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQnVuZGxlIGJ1bmRsZSAgICAgID0gU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKTsKLSAgICAgIFVSTCAgICBmb2xkZXJVcmwgICA9IEZpbGVMb2NhdG9yLmZpbmQoIGJ1bmRsZSwgbmV3IFBhdGgoICJpY29ucy9mdWxsL29iajE2L2ZsZHJfb2JqLmdpZiIgKSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgICBVUkwgICAgbGVhZlVybCAgICAgPSBGaWxlTG9jYXRvci5maW5kKCBidW5kbGUsIG5ldyBQYXRoKCAiaWNvbnMvZnVsbC9vYmoxNi9maWxlX29iai5naWYiICksIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgVVJMICAgIGZhdm9yaXRlVXJsID0gRmlsZUxvY2F0b3IuZmluZCggYnVuZGxlLCBuZXcgUGF0aCggImljb25zL2Z1bGwvb3ZyMTYvZmF2b3JpdGVfb3ZyLmdpZiIgKSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgICBVUkwgICAgaW52YWxpZFVybCAgPSBGaWxlTG9jYXRvci5maW5kKCBidW5kbGUsIG5ldyBQYXRoKCAiaWNvbnMvZnVsbC9vdnIxNi9pbnZhbGlkdHlwZV9vdnIuZ2lmIiApLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFVSTCAgICB3YXJuaW5nVXJsICA9IEZpbGVMb2NhdG9yLmZpbmQoIGJ1bmRsZSwgbmV3IFBhdGgoICJpY29ucy9mdWxsL292cjE2L3dhcm5pbmdfb3ZyLmdpZiIgKSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgICBVUkwgICAgbG9ja1VybCAgICAgPSBGaWxlTG9jYXRvci5maW5kKCBidW5kbGUsIG5ldyBQYXRoKCAiaWNvbnMvZnVsbC9vdnIxNi91bm1vZGlmaWFibGVfb3ZyLmdpZiIgKSwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIGdldEljb25JbWFnZSggZm9sZGVyVXJsICk7Ci0gICAgICBnZXRJY29uSW1hZ2UoIGxlYWZVcmwgKTsKLSAgICAgIGZhdm9yaXRlSW1hZ2UgICA9IGdldEljb25JbWFnZSggZmF2b3JpdGVVcmwgKTsKLSAgICAgIGludmFsaWRJbWFnZSAgICA9IGdldEljb25JbWFnZSggaW52YWxpZFVybCApOwotICAgICAgd2FybmluZ0ltYWdlICAgID0gZ2V0SWNvbkltYWdlKCB3YXJuaW5nVXJsICk7Ci0gICAgICBsb2NrSW1hZ2UgICAgICAgPSBnZXRJY29uSW1hZ2UoIGxvY2tVcmwgKTsKLSAgICAgIAotICAgICAgZm9sZGVyQmFzZVVSTCA9IGZvbGRlclVybC50b1N0cmluZygpOwotICAgICAgbGVhZkJhc2VVUkwgICA9IGxlYWZVcmwudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgY2F0Y2goIFRocm93YWJsZSBleGMgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5sb2dFcnJvciggIkVycm9yIHJlYWRpbmcgaWNvbiBvdmVybGF5cyIsIGV4YyApOyAvLyROT04tTkxTLTEkCi0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBoYXNDaGFuZ2VkKCBTdHJpbmdbXSBzdHJpbmcxLCBTdHJpbmdbXSBzdHJpbmcyICkKLSAgewotICAgIGlmKCBzdHJpbmcxID09IG51bGwgfHwgc3RyaW5nMiA9PSBudWxsIHx8IHN0cmluZzEubGVuZ3RoICE9IHN0cmluZzIubGVuZ3RoICkgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHN0cmluZzEubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBTdHJpbmcgdmFsdWUxID0gc3RyaW5nMVtpbmRleF07Ci0gICAgICBTdHJpbmcgdmFsdWUyID0gc3RyaW5nMltpbmRleF07Ci0gICAgICAKLSAgICAgIC8vIFdlIGNhbiBkbyBwb2ludGVyIGNvbXBhcmlzb24gc2luY2Ugd2UgYXJlIHVzaW5nIGNvbnN0YW50IFN0cmluZ3MuCi0gICAgICBpZiggdmFsdWUxICE9IHZhbHVlMiApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJbWFnZSBnZXRJY29uT3ZlcmxheSggU3RyaW5nIGJhc2VVcmwsIFN0cmluZ1tdIG92ZXJsYXlzICkKLSAgewotICAgIFN0cmluZyBpbWFnZVVybCAgPSBnZXRJbWFnZVVSTCggYmFzZVVybCwgb3ZlcmxheXMgKTsgCi0gICAgSW1hZ2UgIHJlc3VsdCAgICA9IChJbWFnZSlpY29uVGFibGUuZ2V0KCBpbWFnZVVybCApOwotICAgIAotICAgIGlmKCByZXN1bHQgPT0gbnVsbCApCi0gICAgewotICAgICAgSW1hZ2UgYmFzZUltYWdlID0gKEltYWdlKWljb25UYWJsZS5nZXQoIGJhc2VVcmwgKTsKLSAgICAgIAotICAgICAgaWYoIGJhc2VJbWFnZSA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBsb2FkIHRoaXMgYmFzZUltYWdlCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgYmFzZUltYWdlID0gZ2V0SWNvbkltYWdlKCBuZXcgVVJMKCBiYXNlVXJsICkgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkubG9nRXJyb3IoICJFcnJvciBsb2FkaW5nIGltYWdlIGZyb206IiArIGJhc2VVcmwsIGV4Yyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBpY29uQ3JlYXRvci5zZXRCYXNlSW1hZ2UoIGJhc2VJbWFnZSwgb3ZlcmxheXMgKTsKLSAgICAgIAotICAgICAgcmVzdWx0ID0gaWNvbkNyZWF0b3IuY3JlYXRlSW1hZ2UoKTsKLSAgICAgIGljb25UYWJsZS5wdXQoIGltYWdlVXJsLCByZXN1bHQgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGhhc092ZXJsYXkoIFN0cmluZ1tdIG92ZXJsYXlzLCBTdHJpbmcgdmFsdWUgKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAKLSAgICBmb3IoIFN0cmluZyBvdmVybGF5IDogb3ZlcmxheXMgKQotICAgIHsKLSAgICAgIC8vIE5vdGU6IFdlIGFyZSB1c2luZyBzdHJpbmcgcG9pbnRlciBjb21wYXJpc29uIGhlcmUgc2luY2UsIHRoZSBzdHJpbmdzCi0gICAgICAvLyBzaG91bGQgb25seSBiZSB0aGUgY29uc3RhbnRzIGRlZmluZWQgYWJvdmUuCi0gICAgICBpZiggb3ZlcmxheSA9PSB2YWx1ZSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfSAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEltYWdlVVJMKCBTdHJpbmcgYmFzZVVybCwgU3RyaW5nW10gb3ZlcmxheXMgKQotICB7Ci0gICAgU3RyaW5nIHVybCA9IGJhc2VVcmw7Ci0gICAgCi0gICAgZm9yKCBTdHJpbmcgdmFsdWUgOiBvdmVybGF5cyApCi0gICAgewotICAgICAgaWYoIHZhbHVlICE9IG51bGwgKQotICAgICAgewotICAgICAgICB1cmwgPSB1cmwgKyAiOiIgKyB2YWx1ZTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdXJsOwotICB9Ci0gIAotICBwdWJsaWMgSW1hZ2UgZ2V0SWNvbkltYWdlKCBVUkwgdXJsICkKLSAgewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1cmwudG9TdHJpbmcoKTsKLSAgICBJbWFnZSAgaW1hZ2UgICAgID0gaWNvblRhYmxlLmdldCggdXJsU3RyaW5nICk7Ci0gICAgCi0gICAgaWYoIGltYWdlID09IG51bGwgKQotICAgIHsKLSAgICAgIEltYWdlRGVzY3JpcHRvciBpbWFnZURlc2MgPSBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTCh1cmwpOwotICAgICAgCi0gICAgICBpbWFnZSA9IGltYWdlRGVzYy5jcmVhdGVJbWFnZSgpOwotICAgICAgaWNvblRhYmxlLnB1dCggdXJsU3RyaW5nLCBpbWFnZSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW1hZ2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICB7Ci0gICAgZm9yKCBJbWFnZSBpbWFnZSA6IGljb25UYWJsZS52YWx1ZXMoKSApCi0gICAgewotICAgICAgaW1hZ2UuZGlzcG9zZSgpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBEZWNvcmF0b3JEZXNjcmlwdG9yIGV4dGVuZHMgQ29tcG9zaXRlSW1hZ2VEZXNjcmlwdG9yCi0gIHsKLSAgICBwcml2YXRlIEltYWdlICAgIGJhc2VJbWFnZTsKLSAgICBwcml2YXRlIFBvaW50ICAgIHNpemU7Ci0gICAgcHJpdmF0ZSBTdHJpbmdbXSBvdmVybGF5czsKLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBkcmF3Q29tcG9zaXRlSW1hZ2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotICAgIHsKLSAgICAgIGRyYXdJbWFnZSggYmFzZUltYWdlLmdldEltYWdlRGF0YSgpLCAwLCAwKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG92ZXJsYXlzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIGlmKCBoYXNPdmVybGF5KG92ZXJsYXlzLCBmYXZvcml0ZSkgKQotICAgICAgICB7Ci0gICAgICAgICAgZHJhd0ltYWdlKCBmYXZvcml0ZUltYWdlLmdldEltYWdlRGF0YSgpLCBzaXplLnggLSBmYXZvcml0ZUltYWdlLmdldEJvdW5kcygpLndpZHRoLCAwICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBoYXNPdmVybGF5KCBvdmVybGF5cywgd2FybmluZyApICkKLSAgICAgICAgewotICAgICAgICAgIGRyYXdJbWFnZSggd2FybmluZ0ltYWdlLmdldEltYWdlRGF0YSgpLCAwLCBzaXplLnkgLSB3YXJuaW5nSW1hZ2UuZ2V0Qm91bmRzKCkuaGVpZ2h0ICk7ICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggaGFzT3ZlcmxheSggb3ZlcmxheXMsIGludmFsaWQgKSApCi0gICAgICAgIHsKLSAgICAgICAgICBkcmF3SW1hZ2UoIGludmFsaWRJbWFnZS5nZXRJbWFnZURhdGEoKSwgMCwgc2l6ZS55IC0gaW52YWxpZEltYWdlLmdldEJvdW5kcygpLmhlaWdodCApOyAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoIGhhc092ZXJsYXkoIG92ZXJsYXlzLCBsb2NrICkgKQotICAgICAgICB7Ci0gICAgICAgICAgZHJhd0ltYWdlKCBsb2NrSW1hZ2UuZ2V0SW1hZ2VEYXRhKCksIAotICAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC0gbG9ja0ltYWdlLmdldEJvdW5kcygpLndpZHRoLCAKLSAgICAgICAgICAgICAgICAgICAgIHNpemUueSAtIGxvY2tJbWFnZS5nZXRCb3VuZHMoKS5oZWlnaHQgKTsgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRCYXNlSW1hZ2UoIEltYWdlIGltYWdlLCBTdHJpbmdbXSBvdmVybGF5cyApCi0gICAgeyAKLSAgICAgIFJlY3RhbmdsZSBib3VuZHMgPSBpbWFnZS5nZXRCb3VuZHMoKTsKLSAgICAgIAotICAgICAgdGhpcy5iYXNlSW1hZ2UgPSBpbWFnZTsKLSAgICAgIHRoaXMuc2l6ZSAgICAgID0gbmV3IFBvaW50KCBib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQgKTsKLSAgICAgIHRoaXMub3ZlcmxheXMgID0gb3ZlcmxheXM7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCBQb2ludCBnZXRTaXplKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvUG9saWN5T3BlcmF0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Qb2xpY3lPcGVyYXRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZTc2MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Qb2xpY3lPcGVyYXRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZQotICogYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVBvbGljeU9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFBvbGljeU9wZXJhdGlvbkltcGwgaW1wbGVtZW50cyBJUG9saWN5T3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgQmFzZU9wZXJhdGlvbkltcGwgYmFzZU9wZXJhdGlvbjsKLSAgcHJpdmF0ZSBJU2VydmljZVBvbGljeSAgICBwb2xpY3k7Ci0gIAotICBwdWJsaWMgUG9saWN5T3BlcmF0aW9uSW1wbCggQmFzZU9wZXJhdGlvbkltcGwgYmFzZU9wZXJhdGlvbiwgSVNlcnZpY2VQb2xpY3kgcG9saWN5ICkKLSAgewotICAgIHRoaXMuYmFzZU9wZXJhdGlvbiA9IGJhc2VPcGVyYXRpb247Ci0gICAgdGhpcy5wb2xpY3kgICAgICAgID0gcG9saWN5OwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRJdGVtKCkKLSAgewotICAgIHJldHVybiBiYXNlT3BlcmF0aW9uLmdldERlZmF1bHRJdGVtKCk7Ci0gIH0KLQotICBwdWJsaWMgSURlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5nZXREZXNjcmlwdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVudW1lcmF0aW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIGJhc2VPcGVyYXRpb24uZ2V0RW51bWVyYXRpb25JZCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5nZXRJZCgpOwotICB9Ci0KLSAgcHVibGljIE9wZXJhdGlvbktpbmQgZ2V0T3BlcmF0aW9uS2luZCgpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5nZXRPcGVyYXRpb25LaW5kKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBvbGljeUlkUGF0dGVybigpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5nZXRQb2xpY3lJZFBhdHRlcm4oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcyApCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5pc0VuYWJsZWQoIHNlbGVjdGVkUG9saWNpZXMgKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzV29ya3NwYWNlT25seSgpCi0gIHsKLSAgICByZXR1cm4gYmFzZU9wZXJhdGlvbi5pc1dvcmtzcGFjZU9ubHkoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxhdW5jaE9wZXJhdGlvbiggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcykKLSAgewotICAgIGJhc2VPcGVyYXRpb24ubGF1bmNoT3BlcmF0aW9uKCBwb2xpY3ksIHNlbGVjdGVkUG9saWNpZXMgKTsKLSAgfQotCi0gIHB1YmxpYyBJU2VydmljZVBvbGljeSBnZXRTZXJ2aWNlUG9saWN5KCkKLSAgewotICAgIHJldHVybiBwb2xpY3k7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXRlSXRlbSggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBJUG9saWN5U3RhdGUgc3RhdGUgICAgICAgPSBnZXRTdGF0ZSggcHJvamVjdCApOwotICAgIFN0cmluZyAgICAgICBrZXkgICAgICAgICA9IGJhc2VPcGVyYXRpb24uZ2V0SWQoKTsKLSAgICBTdHJpbmcgICAgICAgZGVmYXVsdEl0ZW0gPSBiYXNlT3BlcmF0aW9uLmdldERlZmF1bHRJdGVtKCk7Ci0gICAgCi0gICAgaWYoIGJhc2VPcGVyYXRpb24uaXNVc2VEZWZhdWx0RGF0YSgpICkKLSAgICB7Ci0gICAgICBrZXkgPSBJUG9saWN5U3RhdGUuRGVmYXVsdFZhbHVlS2V5OwotICAgIH0KLSAgICAKLSAgICBpZiggZGVmYXVsdEl0ZW0gIT0gbnVsbCApCi0gICAgewotICAgICAgc3RhdGUucHV0RGVmYXVsdFZhbHVlKCBrZXksIGRlZmF1bHRJdGVtLCBmYWxzZSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdGUuZ2V0VmFsdWUoIGtleSApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U3RhdGVJdGVtKCBJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc3RhdGVJdGVtICkKLSAgewotICAgIElQb2xpY3lTdGF0ZSBzdGF0ZSA9IGdldFN0YXRlKCBwcm9qZWN0ICk7Ci0gICAgU3RyaW5nICAgICAgIGtleSAgID0gYmFzZU9wZXJhdGlvbi5nZXRJZCgpOwotICAgIAotICAgIGlmKCBiYXNlT3BlcmF0aW9uLmlzVXNlRGVmYXVsdERhdGEoKSApCi0gICAgewotICAgICAga2V5ID0gSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGUucHV0VmFsdWUoIGtleSwgc3RhdGVJdGVtICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVBvbGljeVN0YXRlIGdldFN0YXRlKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIHJldHVybiBwcm9qZWN0ID09IG51bGwgPyBwb2xpY3kuZ2V0UG9saWN5U3RhdGUoKSA6IHBvbGljeS5nZXRQb2xpY3lTdGF0ZSggcHJvamVjdCApOyAgIAotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNVc2VEZWZhdWx0RGF0YSgpIAotICB7Ci0JICByZXR1cm4gYmFzZU9wZXJhdGlvbi5pc1VzZURlZmF1bHREYXRhKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvUXVpY2tGaXhBY3Rpb25JbmZvSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9RdWlja0ZpeEFjdGlvbkluZm9JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3OGZmYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9RdWlja0ZpeEFjdGlvbkluZm9JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeUFjdGl2YXRvclVJOwotCi1wdWJsaWMgY2xhc3MgUXVpY2tGaXhBY3Rpb25JbmZvSW1wbCBpbXBsZW1lbnRzIElRdWlja0ZpeEFjdGlvbkluZm8KLXsKLSAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudDsKLSAgcHJpdmF0ZSBJRGVzY3JpcHRvciAgICAgICAgICAgZGVzY3JpcHRvcjsKLSAgCi0gIHB1YmxpYyBRdWlja0ZpeEFjdGlvbkluZm9JbXBsKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgSURlc2NyaXB0b3IgZGVzY3JpcHRvciApCi0gIHsKLSAgICB0aGlzLmVsZW1lbnQgICAgPSBlbGVtZW50OwotICAgIHRoaXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUXVpY2tGaXhBY3Rpb24gZ2V0QWN0aW9uKCkKLSAgewotICAgIElRdWlja0ZpeEFjdGlvbiByZXN1bHQgPSBudWxsOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIE9iamVjdCBhY3Rpb24gPSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBpZiggYWN0aW9uIGluc3RhbmNlb2YgSVF1aWNrRml4QWN0aW9uICkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gKElRdWlja0ZpeEFjdGlvbilhY3Rpb247Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmxvZ0Vycm9yKCAiRXJyb3IgbG9hZGluZyBxdWljayBmaXggYWN0aW9uLiIsIGV4YyApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgSURlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpCi0gIHsKLSAgICByZXR1cm4gZGVzY3JpcHRvcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TY3JvbGxlZFBhZ2VDb250ZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1Njcm9sbGVkUGFnZUNvbnRlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJiZWZjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1Njcm9sbGVkUGFnZUNvbnRlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMCAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5Gb3JtQ29sb3JzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLndpZGdldHMuRm9ybVRvb2xraXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5TaGFyZWRTY3JvbGxlZENvbXBvc2l0ZTsKLQotCi1wdWJsaWMgY2xhc3MgU2Nyb2xsZWRQYWdlQ29udGVudCBleHRlbmRzIFNoYXJlZFNjcm9sbGVkQ29tcG9zaXRlIHsKLQotCXByaXZhdGUgRm9ybVRvb2xraXQgZlRvb2xraXQ7Ci0JCi0JcHVibGljIFNjcm9sbGVkUGFnZUNvbnRlbnQoQ29tcG9zaXRlIHBhcmVudCkgewotCQl0aGlzKHBhcmVudCwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMKTsKLQl9Ci0JCi0JcHVibGljIFNjcm9sbGVkUGFnZUNvbnRlbnQoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlKSB7Ci0JCXN1cGVyKHBhcmVudCwgc3R5bGUpOwotCQkKLQkJc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLQkJCi0JCWZUb29sa2l0PSBnZXREaWFsb2dzRm9ybVRvb2xraXQoKTsKLQkJCi0JCXNldEV4cGFuZEhvcml6b250YWwodHJ1ZSk7Ci0JCXNldEV4cGFuZFZlcnRpY2FsKHRydWUpOwotCQkKLQkJQ29tcG9zaXRlIGJvZHk9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOwotCQlib2R5LnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0JCXNldENvbnRlbnQoYm9keSk7Ci0JfQotCQotCXB1YmxpYyBGb3JtVG9vbGtpdCBnZXREaWFsb2dzRm9ybVRvb2xraXQoKSB7Ci0JCWlmIChmVG9vbGtpdCA9PSBudWxsKSB7Ci0JCQlGb3JtQ29sb3JzIGNvbG9ycz0gbmV3IEZvcm1Db2xvcnMoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJY29sb3JzLnNldEJhY2tncm91bmQobnVsbCk7Ci0JCQljb2xvcnMuc2V0Rm9yZWdyb3VuZChudWxsKTsJCi0JCQlmVG9vbGtpdD0gbmV3IEZvcm1Ub29sa2l0KGNvbG9ycyk7Ci0JCX0KLQkJcmV0dXJuIGZUb29sa2l0OwotCX0KLQotCXB1YmxpYyB2b2lkIGFkYXB0Q2hpbGQoQ29udHJvbCBjaGlsZENvbnRyb2wpIHsKLQkJZlRvb2xraXQuYWRhcHQoY2hpbGRDb250cm9sLCB0cnVlLCB0cnVlKTsKLQl9Ci0JCi0JcHVibGljIENvbXBvc2l0ZSBnZXRCb2R5KCkgewotCQlyZXR1cm4gKENvbXBvc2l0ZSkgZ2V0Q29udGVudCgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWNpZXNDb21wb3NpdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljaWVzQ29tcG9zaXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NWZiZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWNpZXNDb21wb3NpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTA2IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSAqIDIwMDcxMTIwIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSSAKLSAqIDIwMDcxMjEyICAgMjA5ODU4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIEVuaGFuY2luZyBzZXJ2aWNlIHBvbGljeSBmcmFtZXdvcmsgYW5kIFVJCi0gKiAyMDA4MDIxMSAgIDIxODUyMCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDMyNCAgIDIyMjA5NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBVSSBub3cgbGlzdGVucyBmb3Igc3RhdGUgY2hhbmdlcy4KLSAqIDIwMDgwMzI0ICAgMjIzNjM0IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIFNlcnZpY2UgUG9saWNpZXMgcHJlZmVyZW5jZSB0cmVlIHNob3VsZCBiZSAzIGxldmVsIHRyZWUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkV4cGFuc2lvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkV4cGFuc2lvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLndpZGdldHMuRXhwYW5kYWJsZUNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLklXb3JrYmVuY2hIZWxwU3lzdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeUVudW1lcmF0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVJlbGF0aW9uc2hpcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGVFbnVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUG9saWN5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUG9saWN5T3BlcmF0aW9uLk9wZXJhdGlvbktpbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzLlNlcnZpY2VVdGlsczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljaWVzQ29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIGltcGxlbWVudHMKLQkJU2VsZWN0aW9uTGlzdGVuZXIsIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyICB7Ci0KLQlwcml2YXRlIFNjcm9sbGVkQ29tcG9zaXRlIG9wZXJhdGlvbnNTY3JvbGxlZENvbXBvc2l0ZTsKLQkvL2Egc2Nyb2xsYWJsZSBjb21wb3NpdGUgY29udGFpbmluZyBvcGVyYXRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHNlbGVjdGVkIHBvbGljaWVzCi0JcHJpdmF0ZSBDb21wb3NpdGUgb3BlcmF0aW9uc0NvbXBvc2l0ZTsKLQlwcml2YXRlIElXb3JrYmVuY2hIZWxwU3lzdGVtIGhlbHBTeXN0ZW07Ci0JcHJpdmF0ZSBDb21wb3NpdGUgbWFzdGVyQ29tcG9zaXRlOwotCXByaXZhdGUgQ29tcG9zaXRlIGRldGFpbHNDb21wb3NpdGU7Ci0JcHJpdmF0ZSBUcmVlIG1hc3RlclBvbGljeVRyZWU7Ci0JLy90ZXJ0aWFyeSBhbmQgaGlnaGVyIGxldmVsIHBvbGljeSBub2RlcyBpbiBhIHNlcGFyYXRlIHRyZWUKLQlwcml2YXRlIFRyZWUgZGV0YWlsc1BvbGljeVRyZWU7Ci0JcHJpdmF0ZSBUZXh0IHRleHRfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uOwotCXByaXZhdGUgVGV4dCB0ZXh0X0RldGFpbHNQYW5lbF9kZXBlbmRlbmNpZXM7Ci0JcHJpdmF0ZSBMYWJlbCBsYWJlbF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb247Ci0JcHJpdmF0ZSBMYWJlbCBsYWJlbF9kZXRhaWxzUGFuZWxfZGVwZW5kYW5jaWVzOwotCXByaXZhdGUgSGFzaHRhYmxlPFN0cmluZywgSVN0YXR1cz4gYWxsRXJyb3JzOwotCXByaXZhdGUgSVN0YXR1cyBlcnJvcjsKLQlwcml2YXRlIGJvb2xlYW4gYkNvbXBsZXhPcENvbXBsZXRlZCA9IHRydWU7Ci0JcHJpdmF0ZSBMaXN0PENoaWxkQ2hhbmdlRXZlbnQ+IGxpc3RDaGlsZENoYW5nZUV2ZW50czsKLQlwcml2YXRlIElDb25NYW5hZ2VyIGljb25NYW5hZ2VyID0gbmV3IElDb25NYW5hZ2VyKCk7Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQlwcml2YXRlIFNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyOwotCXByaXZhdGUgRXhwYW5kYWJsZUNvbXBvc2l0ZSBleGNvbXBvc2l0ZTsKLQlwcml2YXRlIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybQotCQkJLmdldEluc3RhbmNlKCk7Ci0JcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSBwbGF0Zm9ybVVJID0gU2VydmljZVBvbGljeVBsYXRmb3JtVUkKLQkJCS5nZXRJbnN0YW5jZSgpOwotCXByaXZhdGUgSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIgc3RhdGVDaGFuZ2VMaXN0ZW5lciAgPSBuZXcgU3RhdGVDaGFuZ2VMaXN0ZW5lcigpOwotCXByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VFbmFibGVkICAgPSB0cnVlOwotCXByaXZhdGUgSGFzaFNldDxJU2VydmljZVBvbGljeT4gICAgc3RhdGVDaGFuZ2VQb2xpY3lTZXQgPSBuZXcgSGFzaFNldDxJU2VydmljZVBvbGljeT4oKTsKLQlwcml2YXRlIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgICAgIGxhc3RTZWxlY3RlZFNwICAgICAgID0gbnVsbDsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gZXhwYW5kYWJsZSBjb21wb3NpdGUKLQkgKiBAcGFyYW0gcGFyZW50Ci0JICogQHBhcmFtIG5Db2x1bW5zCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgRXhwYW5kYWJsZUNvbXBvc2l0ZSBjcmVhdGVFeHBhbmRhYmxlQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQsCi0JCQlpbnQgbkNvbHVtbnMpIHsKLQkJRXhwYW5kYWJsZUNvbXBvc2l0ZSBleGNvbXBvc2l0ZSA9IG5ldyBFeHBhbmRhYmxlQ29tcG9zaXRlKHBhcmVudCwKLQkJCQlTV1QuTk9ORSwgRXhwYW5kYWJsZUNvbXBvc2l0ZS5UV0lTVElFCi0JCQkJCQl8IEV4cGFuZGFibGVDb21wb3NpdGUuQ0xJRU5UX0lOREVOVCk7Ci0JCWV4Y29tcG9zaXRlLnNldEV4cGFuZGVkKGZhbHNlKTsKLQkJZXhjb21wb3NpdGUuc2V0VmlzaWJsZShmYWxzZSk7Ci0JCWV4Y29tcG9zaXRlLnNldEZvbnQoSkZhY2VSZXNvdXJjZXMuZ2V0Rm9udFJlZ2lzdHJ5KCkuZ2V0Qm9sZCgKLQkJCQlKRmFjZVJlc291cmNlcy5ESUFMT0dfRk9OVCkpOwotCQlleGNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5GSUxMLAotCQkJCXRydWUsIGZhbHNlLCBuQ29sdW1ucywgMSkpOwotCQlleGNvbXBvc2l0ZS5hZGRFeHBhbnNpb25MaXN0ZW5lcihuZXcgRXhwYW5zaW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIGV4cGFuc2lvblN0YXRlQ2hhbmdlZChFeHBhbnNpb25FdmVudCBlKSB7Ci0JCQkJZXhwYW5kZWRTdGF0ZUNoYW5nZWQoKEV4cGFuZGFibGVDb21wb3NpdGUpIGUuZ2V0U291cmNlKCkpOwotCQkJfQotCQl9KTsKLQkJbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZShleGNvbXBvc2l0ZSk7Ci0JCXJldHVybiBleGNvbXBvc2l0ZTsKLQl9Ci0JCi0JLyoqCi0JICogQGF1dGhvciBlcmljZHAKLQkgKiBIZWxwZXIgY2xhc3MgdGhhdCBlbmNhcHN1bGF0ZXMgZGF0YSByZXF1aXJlZCB3aGVuIGFuIGFjdGlvbiBjb250cm9sIGNoYW5nZXMgc3RhdGUKLQkgKgotCSAqLwotCXByaXZhdGUgY2xhc3MgQWN0aW9uQ29udHJvbERhdGEgewotCQlwcml2YXRlIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwTGlzdDsKLQkJcHJpdmF0ZSBMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvTGlzdDsKLS8vCQlwcml2YXRlIElQb2xpY3lPcGVyYXRpb24gcG87Ci0KLQkJcHVibGljIEFjdGlvbkNvbnRyb2xEYXRhKExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwTGlzdCwgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb0xpc3QpIHsKLQkJCXRoaXMuc3BMaXN0ID0gc3BMaXN0OwotCQkJdGhpcy5wb0xpc3QgPSBwb0xpc3Q7Ci0JCX0KLQkJcHVibGljIExpc3Q8SVNlcnZpY2VQb2xpY3k+IGdldFNwTGlzdCgpIHsKLQkJCXJldHVybiBzcExpc3Q7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRTcExpc3QoTGlzdDxJU2VydmljZVBvbGljeT4gc3BMaXN0KSB7Ci0JCQl0aGlzLnNwTGlzdCA9IHNwTGlzdDsKLQkJfQotLy8KLS8vCQlwdWJsaWMgSVBvbGljeU9wZXJhdGlvbiBnZXRQbygpIHsKLS8vCQkJcmV0dXJuIHBvOwotLy8JCX0KLS8vCi0vLwkJcHVibGljIHZvaWQgc2V0UG8oSVBvbGljeU9wZXJhdGlvbiBwbykgewotLy8JCQl0aGlzLnBvID0gcG87Ci0vLwkJfQotCi0JCXB1YmxpYyBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGdldFBvTGlzdCgpIHsKLQkJCXJldHVybiBwb0xpc3Q7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRQb0xpc3QoTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb0xpc3QpIHsKLQkJCXRoaXMucG9MaXN0ID0gcG9MaXN0OwotCQl9Ci0JfQotCi0JLyoqCi0JICogTWFrZXMgdGhlIHNjcm9sbGFibGUgY29tcG9zaXRlIGF3YXJlIG9mIHRoaXMgY29udHJvbCwgc28gZXhwYW5kL2NvbGxhcHNlCi0JICogb2YgdGhlIHNjcm9sbGFibGUgY29tcG9zaXRlIHdpbGwgbW92ZSB0aGlzIGNvbnRyb2wgZG93bi91cCBhY2NvcmRpbmdseQotCSAqIEBwYXJhbSBjb250cm9sIHRoZSBjb250cm9sIHRvIG1ha2UgdGhlIHNjcm9sbGFibGUgY29tcG9zaXRlIGF3YXJlIG9mCi0JICovCi0JcHJpdmF0ZSB2b2lkIG1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUoQ29udHJvbCBjb250cm9sKSB7Ci0JCVNjcm9sbGVkUGFnZUNvbnRlbnQgcGFyZW50U2Nyb2xsZWRDb21wb3NpdGUgPSBnZXRQYXJlbnRTY3JvbGxlZENvbXBvc2l0ZShjb250cm9sKTsKLQkJaWYgKHBhcmVudFNjcm9sbGVkQ29tcG9zaXRlICE9IG51bGwpIHsKLQkJCXBhcmVudFNjcm9sbGVkQ29tcG9zaXRlLmFkYXB0Q2hpbGQoY29udHJvbCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFNjcm9sbGVkUGFnZUNvbnRlbnQgZ2V0UGFyZW50U2Nyb2xsZWRDb21wb3NpdGUoQ29udHJvbCBjb250cm9sKSB7Ci0JCUNvbnRyb2wgcGFyZW50ID0gY29udHJvbC5nZXRQYXJlbnQoKTsKLQkJd2hpbGUgKCEocGFyZW50IGluc3RhbmNlb2YgU2Nyb2xsZWRQYWdlQ29udGVudCkgJiYgcGFyZW50ICE9IG51bGwpIHsKLQkJCXBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKTsKLQkJfQotCQlpZiAocGFyZW50IGluc3RhbmNlb2YgU2Nyb2xsZWRQYWdlQ29udGVudCkgewotCQkJcmV0dXJuIChTY3JvbGxlZFBhZ2VDb250ZW50KSBwYXJlbnQ7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIGV4cGFuZGVkU3RhdGVDaGFuZ2VkKEV4cGFuZGFibGVDb21wb3NpdGUgZXhwYW5kYWJsZSkgewotCQlTY3JvbGxlZFBhZ2VDb250ZW50IHBhcmVudFNjcm9sbGVkQ29tcG9zaXRlID0gZ2V0UGFyZW50U2Nyb2xsZWRDb21wb3NpdGUoZXhwYW5kYWJsZSk7Ci0JCWlmIChwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZSAhPSBudWxsKSB7Ci0JCQlwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZS5yZWZsb3codHJ1ZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcGFyZW50Ci0JICogQHJldHVybiBhIHNjcm9sbGFibGUgY29tcG9zaXRlIGNvbnRhaW5pbmcgYW4gZXhwYW5kYWJsZSBjb250ZW50Ci0JICoKLQkgKi8KLQlwcml2YXRlIENvbXBvc2l0ZSBjcmVhdGVEZXRhaWxzU2Nyb2xsUGFnZUNvbnRlbnQoQ29tcG9zaXRlIHBhcmVudCkgewotCi0JCWludCBuQ29sdW1ucyA9IDE7Ci0KLQkJZmluYWwgU2Nyb2xsZWRQYWdlQ29udGVudCBwYWdlQ29udGVudCA9IG5ldyBTY3JvbGxlZFBhZ2VDb250ZW50KHBhcmVudCk7Ci0KLQkJR3JpZExheW91dCBwYWdlQ29udExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCXBhZ2VDb250TGF5b3V0Lm51bUNvbHVtbnMgPSBuQ29sdW1uczsKLQkJcGFnZUNvbnRMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJcGFnZUNvbnRMYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCi0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBwYWdlQ29udGVudC5nZXRCb2R5KCk7Ci0JCWNvbXBvc2l0ZS5zZXRMYXlvdXQocGFnZUNvbnRMYXlvdXQpOwotCi0JCWV4Y29tcG9zaXRlID0gY3JlYXRlRXhwYW5kYWJsZUNvbXBvc2l0ZShjb21wb3NpdGUsIG5Db2x1bW5zKTsKLQotCQlDb21wb3NpdGUgaW5uZXIgPSBuZXcgQ29tcG9zaXRlKGV4Y29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0JCWlubmVyLnNldEZvbnQoY29tcG9zaXRlLmdldEZvbnQoKSk7Ci0JCWlubmVyLnNldExheW91dChuZXcgR3JpZExheW91dChuQ29sdW1ucywgZmFsc2UpKTsKLQkJZXhjb21wb3NpdGUuc2V0Q2xpZW50KGlubmVyKTsKLQkJLy9kZXRhaWxzIHBvbGljeSB0cmVlIGZvciB0ZXJ0aWFyeSBhbmQgaGlnaGVyIGxldmVsIHNlcnZpY2UgcG9saWNpZXMKLQkJZGV0YWlsc1BvbGljeVRyZWUgPSBuZXcgVHJlZShpbm5lciwgU1dULkJPUkRFUiB8IFNXVC5NVUxUSSk7Ci0JCWRldGFpbHNQb2xpY3lUcmVlLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCQlHcmlkRGF0YSBkZXRhaWxzUHJlZlRyZWVHRCA9IG5ldyBHcmlkRGF0YSgKLQkJCQlHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotCQlkZXRhaWxzUHJlZlRyZWVHRC5oZWlnaHRIaW50ID0gNTA7Ci0JCWRldGFpbHNQb2xpY3lUcmVlLnNldExheW91dERhdGEoZGV0YWlsc1ByZWZUcmVlR0QpOwotCQlkZXRhaWxzUG9saWN5VHJlZS5zZXRUb29sVGlwVGV4dChXc3RTUFVJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QU1BfREVUQUlMU1RSRUUpOwotCQkvL21ha2UgdGhlIHNjcm9sbGFibGUgY29tcG9zaXRlIGF3YXJlIG9mIHRoZSB0cmVlIHNvIGV4cGFuZC9jb2xsYXBzZSB3b3JrcyBwcm9wZXJseQotCQltYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKGRldGFpbHNQb2xpY3lUcmVlKTsKLQkJCi0JCWNyZWF0ZVBvbGljeU9wZXJhdGlvbnNDb21wb3NpdGUoY29tcG9zaXRlKTsKLQotCQlsYWJlbF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb24gPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0KLQkJbGFiZWxfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uCi0JCQkJLnNldFRleHQoV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1NFUlZJQ0VQT0xJQ0lFU19ERVNDUklQVElPTik7Ci0JCW1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUobGFiZWxfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb24gPSBuZXcgVGV4dChjb21wb3NpdGUsIFNXVC5XUkFQCi0JCQkJfCBTV1QuQk9SREVSIHwgU1dULlZfU0NST0xMIHwgU1dULlJFQURfT05MWSk7Ci0JCUdyaWREYXRhIGRldGFpbHNHRCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwKLQkJCQl8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0JCWRldGFpbHNHRC5oZWlnaHRIaW50ID0gNTA7Ci0JCWRldGFpbHNHRC53aWR0aEhpbnQgPSA0MDA7Ci0JCXRleHRfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uLnNldExheW91dERhdGEoZGV0YWlsc0dEKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb24uc2V0VG9vbFRpcFRleHQoV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFNQX0RFU0NSSVBUSU9OKTsKLQotCQltYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKHRleHRfRGV0YWlsc1BhbmVsX2Rlc2NyaXB0aW9uKTsKLQkJbGFiZWxfZGV0YWlsc1BhbmVsX2RlcGVuZGFuY2llcyA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5OT05FKTsKLQkJbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZShsYWJlbF9kZXRhaWxzUGFuZWxfZGVwZW5kYW5jaWVzKTsKLQkJbGFiZWxfZGV0YWlsc1BhbmVsX2RlcGVuZGFuY2llcwotCQkJCS5zZXRUZXh0KFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVwZW5kZW5jaWVzID0gbmV3IFRleHQoY29tcG9zaXRlLCBTV1QuV1JBUAotCQkJCXwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5SRUFEX09OTFkpOwotCQl0ZXh0X0RldGFpbHNQYW5lbF9kZXBlbmRlbmNpZXMuc2V0VG9vbFRpcFRleHQoV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFNQX0RFUEVOREVOQ0lFUyk7Ci0JCW1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUodGV4dF9EZXRhaWxzUGFuZWxfZGVwZW5kZW5jaWVzKTsKLQkJR3JpZERhdGEgZGVwZW5kZW5jaWVzR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMCi0JCQkJfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotCQlkZXBlbmRlbmNpZXNHRC5oZWlnaHRIaW50ID0gMTAwOwotCQlkZXBlbmRlbmNpZXNHRC53aWR0aEhpbnQgPSA0MDA7Ci0JCXRleHRfRGV0YWlsc1BhbmVsX2RlcGVuZGVuY2llcy5zZXRMYXlvdXREYXRhKGRlcGVuZGVuY2llc0dEKTsKLQotCQlyZXR1cm4gcGFnZUNvbnRlbnQ7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyB0aGUgc2Nyb2xsYWJsZSBjb21wb3NpdGUgdGhhdCB3aWxsIGNvbnRhaW4gd2lkZ2V0cyBhc3NvY2lhdGVkIHdpdGggYSBwb2xpY3kgb3BlcmF0aW9uCi0JICogQHBhcmFtIHBhcmVudCB0aGUgcGFyZW50IGNvbXBvc2l0ZQotCSAqLwotCXByaXZhdGUgdm9pZCBjcmVhdGVQb2xpY3lPcGVyYXRpb25zQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlID0gbmV3IFNjcm9sbGVkQ29tcG9zaXRlKHBhcmVudCwKLQkJCQlTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOwotCQlvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGUuc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlLnNldEV4cGFuZFZlcnRpY2FsKHRydWUpOwotCQlHcmlkRGF0YSBvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGVHRCA9IG5ldyBHcmlkRGF0YSgKLQkJCQlHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotCQlvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGVHRC5oZWlnaHRIaW50ID02MDsKLQkJb3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlLnNldExheW91dERhdGEob3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlR0QpOwotCQlvcGVyYXRpb25zQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGUsCi0JCQkJU1dULk5PTkUpOwotCQlvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGUuc2V0Q29udGVudChvcGVyYXRpb25zQ29tcG9zaXRlKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCW9wZXJhdGlvbnNDb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7Ci0vLwkJR3JpZERhdGEgb3BlcmF0aW9uc0NvbXBvc2l0ZUdEID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0vLwkJb3BlcmF0aW9uc0NvbXBvc2l0ZUdELmhlaWdodEhpbnQgPSAxMDAwOwotLy8JCW9wZXJhdGlvbnNDb21wb3NpdGVHRC53aWR0aEhpbnQgPSAxMDAwOwotLy8JCW9wZXJhdGlvbnNDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShvcGVyYXRpb25zQ29tcG9zaXRlR0QpOwotCQlvcGVyYXRpb25zU2Nyb2xsZWRDb21wb3NpdGUuc2V0TWluU2l6ZShvcGVyYXRpb25zQ29tcG9zaXRlLmNvbXB1dGVTaXplKAotCQkJCTQwMCwgMTAwKSk7Ci0JCW1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUob3BlcmF0aW9uc1Njcm9sbGVkQ29tcG9zaXRlKTsKLQkJbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZShvcGVyYXRpb25zQ29tcG9zaXRlKTsKLQl9Ci0KLQlwdWJsaWMgU2VydmljZVBvbGljaWVzQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQsIElQcm9qZWN0IHByb2plY3QsCi0JCQlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotCi0JCXN1cGVyKHBhcmVudCwgU1dULk5PTkUpOwotCQl0aGlzLnByb2plY3QgPSBwcm9qZWN0OwotCQl0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7Ci0JCWFsbEVycm9ycyA9IG5ldyBIYXNodGFibGU8U3RyaW5nLCBJU3RhdHVzPigpOwotCQloZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0JCUdyaWRMYXlvdXQgcGFyZW50TGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJcGFyZW50TGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQlwYXJlbnRMYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmcgPSAwOwotCQl0aGlzLnNldExheW91dChwYXJlbnRMYXlvdXQpOwotCQl0aGlzLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCQltYXN0ZXJDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5OT05FKTsKLQotCQlHcmlkTGF5b3V0IG1hc3RlckxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCW1hc3RlckxheW91dC5udW1Db2x1bW5zID0gMTsKLQkJbWFzdGVyTGF5b3V0Lmhvcml6b250YWxTcGFjaW5nID0gMDsKLQkJbWFzdGVyQ29tcG9zaXRlLnNldExheW91dChtYXN0ZXJMYXlvdXQpOwotCQltYXN0ZXJDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9WRVJUSUNBTCkpOwotCi0JCWRldGFpbHNDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBkZXRhaWxzTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZGV0YWlsc0xheW91dC5udW1Db2x1bW5zID0gMTsKLQkJZGV0YWlsc0xheW91dC5ob3Jpem9udGFsU3BhY2luZyA9IDA7Ci0JCWRldGFpbHNDb21wb3NpdGUuc2V0TGF5b3V0KGRldGFpbHNMYXlvdXQpOwotCQlkZXRhaWxzQ29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCQltYXN0ZXJQb2xpY3lUcmVlID0gbmV3IFRyZWUobWFzdGVyQ29tcG9zaXRlLCBTV1QuQk9SREVSIHwgU1dULk1VTFRJKTsKLQkJbWFzdGVyUG9saWN5VHJlZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKSk7Ci0JCW1hc3RlclBvbGljeVRyZWUuc2V0VG9vbFRpcFRleHQoV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFNQX1RSRUUpOwotCi0JCUNvbXBvc2l0ZSBvdGhlcnNDb21wb3NpdGUgPSBjcmVhdGVEZXRhaWxzU2Nyb2xsUGFnZUNvbnRlbnQoZGV0YWlsc0NvbXBvc2l0ZSk7Ci0JCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkZJTEwsIHRydWUsCi0JCQkJdHJ1ZSk7Ci0JCW90aGVyc0NvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKLQotCQltYXN0ZXJQb2xpY3lUcmVlLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCi0JCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IHBvbGljeUxpc3QgPSBwbGF0Zm9ybS5nZXRSb290U2VydmljZVBvbGljaWVzKG51bGwpOwotCQkKLQkJcG9saWN5TGlzdCA9IFNlcnZpY2VVdGlscy5zb3J0TGlzdCggcG9saWN5TGlzdCApOwotCQkKLQkJZm9yIChJU2VydmljZVBvbGljeSBwb2xpY3kgOiBwb2xpY3lMaXN0KSB7Ci0JCQlhZGRQb2xpY3kocG9saWN5LCBtYXN0ZXJQb2xpY3lUcmVlLCB0cnVlKTsKLQkJfQotCQlUcmVlSXRlbVtdIHRyZWVJdGVtcyA9IG1hc3RlclBvbGljeVRyZWUuZ2V0SXRlbXMoKTsKLQkJaWYgKHRyZWVJdGVtcy5sZW5ndGggPiAwKSB7Ci0JCQkvL3NlbGVjdCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgdHJlZSAmIGZpcmUgZXZlbnQgc28gVUkgaXMgdXBkYXRlZAotCQkJbWFzdGVyUG9saWN5VHJlZS5zZXRTZWxlY3Rpb24odHJlZUl0ZW1zWzBdKTsKLQkJCW1hc3RlclBvbGljeVRyZWUubm90aWZ5TGlzdGVuZXJzKFNXVC5TZWxlY3Rpb24sIG5ldyBFdmVudCgpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGltYWdlIG9uIHRpLCBpZiBhc3NvY2lhdGVkIHNlcnZpY2UgcG9saWN5IGRlZmluZXMgYW4gaWNvbgotCSAqIGl0IHdpbGwgd2lsbCBiZSB1c2VkLCBvdGhlcndpc2UgZGVmYXVsdCBGb2xkZXIvTGVhZiBpY29ucyB3aWxsIGJlIHVzZWQKLQkgKiBAcGFyYW0gdGkgdGhlIFRyZWVJdGVtIHRvIHNldCB0aGUgaW1hZ2UgZm9yCi0JICogQHBhcmFtIHNwIHRoZSBzZXJ2aWNlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGkKLQkgKiBAcGFyYW0gaWNvbk92ZXJsYXlzIGRlc2NyaXB0aW9uIG9mIHdoaWNoIG92ZXJsYXlzIHNob3VsZCBiZSBhcHBsaWVkIAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXRJbWFnZShUcmVlSXRlbSB0aSwgSVNlcnZpY2VQb2xpY3kgc3AsIFN0cmluZ1tdIGljb25PdmVybGF5cykgewotCQlJbWFnZSBpID0gKHNwLmdldENoaWxkcmVuKCkuc2l6ZSgpID09IDApID8gaWNvbk1hbmFnZXIuZ2V0SWNvbk92ZXJsYXkoCi0JCQkJaWNvbk1hbmFnZXIuZ2V0TGVhZkJhc2VVcmwoKSwgaWNvbk92ZXJsYXlzKSA6IGljb25NYW5hZ2VyCi0JCQkJLmdldEljb25PdmVybGF5KGljb25NYW5hZ2VyLmdldEZvbGRlckJhc2VVcmwoKSwgaWNvbk92ZXJsYXlzKTsKLQkJaWYgKHNwLmdldERlc2NyaXB0b3IoKSAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgaWNvblBhdGhCdW5kbGVJRCA9IG51bGw7Ci0JCQlTdHJpbmcgaWNvblBhdGggPSBudWxsOwotCQkJaWNvblBhdGhCdW5kbGVJRCA9IHNwLmdldERlc2NyaXB0b3IoKS5nZXRJY29uQnVuZGxlSWQoKTsKLQkJCWljb25QYXRoID0gc3AuZ2V0RGVzY3JpcHRvcigpLmdldEljb25QYXRoKCk7Ci0JCQlpZiAoaWNvblBhdGhCdW5kbGVJRCAhPSBudWxsICYmIGljb25QYXRoICE9IG51bGwKLQkJCQkJJiYgaWNvblBhdGhCdW5kbGVJRC5sZW5ndGgoKSA+IDAgJiYgaWNvblBhdGgubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJQnVuZGxlIGIgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoaWNvblBhdGhCdW5kbGVJRCk7Ci0JCQkJaSA9IGljb25NYW5hZ2VyLmdldEljb25PdmVybGF5KEZpbGVMb2NhdG9yLmZpbmQoYiwKLQkJCQkJCW5ldyBQYXRoKGljb25QYXRoKSwgbnVsbCkudG9TdHJpbmcoKSwgaWNvbk92ZXJsYXlzKTsKLQkJCX0KLQkJfQotCQl0aS5zZXRJbWFnZShpKTsKLQkJLy8gaW1hZ2UgaGFzIGNoYW5nZWQsIG5vdGlmeSBjaGFuZ2UgbGlzdGVuZXJzIHNvIHRyZWUgZ2V0cyB1cGRhdGVkCi0JCXRpLm5vdGlmeUxpc3RlbmVycyhTV1QuTW9kaWZ5LCBuZXcgRXZlbnQoKSk7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpczR0aExldmVsT3JIaWdoZXJQb2xpY3kgKElTZXJ2aWNlUG9saWN5IHNwKSB7Ci0JCXJldHVybiBzcC5nZXRQYXJlbnRQb2xpY3koKSAhPSBudWxsCi0JCSYmIHNwLmdldFBhcmVudFBvbGljeSgpLmdldFBhcmVudFBvbGljeSgpICE9IG51bGwgJiYgc3AuZ2V0UGFyZW50UG9saWN5KCkuZ2V0UGFyZW50UG9saWN5KCkuZ2V0UGFyZW50UG9saWN5KCkgIT0gbnVsbDsKLQkJCi0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpczNyZExldmVsUG9sSW5NYXN0ZXJUcmVlV2l0aENoaWxkcmVuIChMaXN0PElTZXJ2aWNlUG9saWN5PiBzcExpc3RJbk1hc3RlclRyZWUpIHsKLQkJcmV0dXJuIHNwTGlzdEluTWFzdGVyVHJlZS5nZXQoMCkuZ2V0UGFyZW50UG9saWN5KCkgIT0gbnVsbCAmJiBzcExpc3RJbk1hc3RlclRyZWUuZ2V0KDApLmdldFBhcmVudFBvbGljeSgpLmdldFBhcmVudFBvbGljeSgpICE9IG51bGwKLQkJJiYgc3BMaXN0SW5NYXN0ZXJUcmVlLmdldCgwKS5nZXRDaGlsZHJlbigpLnNpemUoKSA+IDAgOwotCX0KLQkvKioKLQkgKiBBZGQgc2VydmljZSBwb2xpY3kgc3AgYW5kIGNoaWxkcmVuIG9mIHNwIHRvIHRoZSBwYXJlbnQKLQkgKiBAcGFyYW0gc3AgdGhlIHNlcnZpY2UgcG9saWN5IHRvIGFkZAotCSAqIEBwYXJhbSBwYXJlbnQgZWl0aGVyIGEgVHJlZSAobWFzdGVyUG9saWN5VHJlZSBvciBEZXRhaWxzUG9saWN5VHJlZSksIG9yIGEgVHJlZUl0ZW0KLQkgKiB0byBhZGQgc2VydmljZSBwb2xpY3kgY2hpbGRyZW4gdG8KLQkgKiBAcGFyYW0gYWRkVXBUb0xldmVsM09ubHkgZmFsc2UgaWYgc2hvdWxkIGFkZCA0dGggYW5kIGhpZ2hlciBsZXZlbAotCSAqIGNoaWxkIHBvbGljaWVzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZFBvbGljeShJU2VydmljZVBvbGljeSBzcCwgV2lkZ2V0IHBhcmVudCwKLQkJCWJvb2xlYW4gYWRkVXBUb0xldmVsM09ubHkpIHsKLQkJc3AuYWRkUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLQkJYWRkU3RhdGVMaXN0ZW5lciggc3AgKTsKLQkJaWYgKGFkZFVwVG9MZXZlbDNPbmx5ICYmIGlzNHRoTGV2ZWxPckhpZ2hlclBvbGljeShzcCkgKQotCQkJLy8gZG9uJ3QgYWRkIDR0aCBsZXZlbCBhbmQgaGlnaGVyIGJyYW5jaGVzLCB0aGVzZSBhcmUgYWRkZWQgb24gZGVtYW5kCi0JCQkvLyB0byBhIGRpZmZlcmVudCB0cmVlCi0JCQlyZXR1cm47Ci0JCVRyZWVJdGVtIHRpOwotCQlpZiAocGFyZW50IGluc3RhbmNlb2YgVHJlZUl0ZW0pCi0JCQl0aSA9IG5ldyBUcmVlSXRlbSgoVHJlZUl0ZW0pIHBhcmVudCwgU1dULk5PTkUpOwotCQllbHNlCi0JCQl0aSA9IG5ldyBUcmVlSXRlbSgoVHJlZSkgcGFyZW50LCBTV1QuTk9ORSk7Ci0JCXRpLnNldFRleHQoc3AuZ2V0RGVzY3JpcHRvcigpLmdldExvbmdOYW1lKCkpOwotCQl0aS5zZXREYXRhKHNwKTsKLQotCQlzZXRJbWFnZSh0aSwgc3AsIGdldEljb25PdmVybGF5SW5mbyhzcCwgZmFsc2UpKTsKLQkJTGlzdDxJU2VydmljZVBvbGljeT4gY2hpbGRyZW5Qb2xpY3lMaXN0ID0gc3AuZ2V0Q2hpbGRyZW4oKTsKLQkJCi0JCWNoaWxkcmVuUG9saWN5TGlzdCA9IFNlcnZpY2VVdGlscy5zb3J0TGlzdCggY2hpbGRyZW5Qb2xpY3lMaXN0ICk7Ci0JCQotCQlmb3IgKElTZXJ2aWNlUG9saWN5IHBvbGljeSA6IGNoaWxkcmVuUG9saWN5TGlzdCkgewotCQkJYWRkUG9saWN5KHBvbGljeSwgdGksIGFkZFVwVG9MZXZlbDNPbmx5KTsKLQkJfQotCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyBpY29uIG92ZXJsYXkgaW5mb3JtYXRpb24KLQkgKiBAcGFyYW0gc3AgdGhlIHNlcnZpY2UgcG9saWN5IHRoYXQgc2hvdWxkIGhhdmUgc29tZSBvdmVybGF5IGltYWdlcyBhc3NvY2lhdGVkIHdpdGggaXQKLQkgKiBAcGFyYW0gaW52YWxpZCB0cnVlIGlmIHRoZSBzZXJ2aWNlIHBvbGljeSBpcyB2YWxpZAotCSAqIEByZXR1cm4gU3RyaW5nW10gY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IG92ZXJsYXlzIHRvIGFwcGx5IHRvIHRoZSBpY29uIHRoYXQKLQkgKiBpcyBhc3NvY2lhdGVkIHdpdGggc3AKLQkgKi8KLQlwcml2YXRlIFN0cmluZ1tdIGdldEljb25PdmVybGF5SW5mbyhJU2VydmljZVBvbGljeSBzcCwgYm9vbGVhbiBpbnZhbGlkKSB7Ci0JCVN0cmluZ1tdIG92ZXJMYXlzID0gbmV3IFN0cmluZ1s0XTsKLQkJCQkKLQkJSVBvbGljeVN0YXRlIHBvbFN0YXRlID0gKHByb2plY3QgPT0gbnVsbCkgPyBzcC5nZXRQb2xpY3lTdGF0ZSgpIDogc3AKLQkJCQkuZ2V0UG9saWN5U3RhdGUocHJvamVjdCk7Ci0JCUlQb2xpY3lTdGF0ZUVudW0gcG9sRW51bSA9IChwcm9qZWN0ID09IG51bGwpID8gc3AuZ2V0UG9saWN5U3RhdGVFbnVtKCkKLQkJCQk6IHNwLmdldFBvbGljeVN0YXRlRW51bShwcm9qZWN0KTsKLQkJaWYgKCFwb2xTdGF0ZS5pc011dGFibGUoKSkKLQkJCW92ZXJMYXlzWzBdID0gaWNvbk1hbmFnZXIubG9jazsKLQkJaWYgKChzcC5nZXRTdGF0dXMoKSAhPSBudWxsICYmIHNwLmdldFN0YXR1cygpLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgfHwgaW52YWxpZCkKLQkJCW92ZXJMYXlzWzFdID0gaWNvbk1hbmFnZXIuaW52YWxpZDsKLQkJaWYgKChzcC5nZXRTdGF0dXMoKSAhPSBudWxsICYmIHNwLmdldFN0YXR1cygpLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSkKLQkJCW92ZXJMYXlzWzJdID0gaWNvbk1hbmFnZXIud2FybmluZzsKLQkJaWYgKHBvbEVudW0gIT0gbnVsbCkgewotCQkJaWYgKHBvbEVudW0uZ2V0RW51bUlkKCkuZXF1YWxzKAotCQkJCQkib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmJvb2xlYW5FbnVtIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChwb2xpY3lIYXNJY29uU2VsZWN0aW9uT3BlcmF0aW9uU2VsZWN0ZWQoc3ApKQotCQkJCQlvdmVyTGF5c1szXSA9IGljb25NYW5hZ2VyLmZhdm9yaXRlOwotCQkJfQotCQkJCQotCQl9Ci0JCXJldHVybiBvdmVyTGF5czsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3AKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gcG9saWN5SGFzSWNvblNlbGVjdGlvbk9wZXJhdGlvblNlbGVjdGVkKElTZXJ2aWNlUG9saWN5IHNwKSB7Ci0JCWJvb2xlYW4gaWNvblNlbGVjdGlvbk9wZXJhdGlvblNlbGVjdGVkID0gZmFsc2U7Ci0JCUxpc3Q8SVBvbGljeU9wZXJhdGlvbj4gb3BlcmF0aW9uTGlzdCA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9ucyhzcCwgcHJvamVjdCA9PSBudWxsKTsKLQkJZm9yIChJUG9saWN5T3BlcmF0aW9uIG9wZXJhdGlvbkl0ZW0gOiBvcGVyYXRpb25MaXN0KSB7Ci0JCQlpZiAob3BlcmF0aW9uSXRlbS5nZXRPcGVyYXRpb25LaW5kKCkuZXF1YWxzKE9wZXJhdGlvbktpbmQuaWNvblNlbGVjdGlvbikpIHsKLQkJCQlTdHJpbmcgc3RhdGVJRCA9IG9wZXJhdGlvbkl0ZW0uZ2V0U3RhdGVJdGVtKHByb2plY3QpOwotCQkJCWlmIChzdGF0ZUlELmVxdWFscygib3JnLmVjbGlwc2Uud3N0LnRydWUiKSkgIC8vJE5PTi1OTFMtMSQKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQkKLQkJfQotCQlyZXR1cm4gaWNvblNlbGVjdGlvbk9wZXJhdGlvblNlbGVjdGVkOwotCX0KLQotCS8qKgotCSAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JICovCi0JcHVibGljIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkgewotCQlpbml0aWFsaXplRGVmYXVsdHMoKTsKLQkJVHJlZUl0ZW0gc2VsZWN0ZWQgPSBudWxsOwotCQlJU2VydmljZVBvbGljeSBmb2N1c1NQID0gbnVsbDsKLQkJLy8gZmlyZSBzZWxlY3Rpb24gZXZlbnQgdG8gdHJlZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBvcGVyYXRpb24gVUkgc28KLQkJLy8gb3BlcmF0aW9uIFVJIGdldHMgdXBkYXRlZAotCQlpZiAoZGV0YWlsc1BvbGljeVRyZWUuaXNWaXNpYmxlKCkKLQkJCQkmJiBkZXRhaWxzUG9saWN5VHJlZS5nZXRTZWxlY3Rpb24oKS5sZW5ndGggPiAwKSB7Ci0JCQlkZXRhaWxzUG9saWN5VHJlZS5ub3RpZnlMaXN0ZW5lcnMoU1dULlNlbGVjdGlvbiwgbmV3IEV2ZW50KCkpOwotCQkJc2VsZWN0ZWQgPSBkZXRhaWxzUG9saWN5VHJlZS5nZXRTZWxlY3Rpb24oKVswXTsKLQkJCWZvY3VzU1AgPSAoSVNlcnZpY2VQb2xpY3kpIHNlbGVjdGVkLmdldERhdGEoKTsKLQkJfSBlbHNlIGlmIChtYXN0ZXJQb2xpY3lUcmVlLmdldFNlbGVjdGlvbigpLmxlbmd0aCA+IDApIHsKLQkJCW1hc3RlclBvbGljeVRyZWUubm90aWZ5TGlzdGVuZXJzKFNXVC5TZWxlY3Rpb24sIG5ldyBFdmVudCgpKTsKLQkJCXNlbGVjdGVkID0gbWFzdGVyUG9saWN5VHJlZS5nZXRTZWxlY3Rpb24oKVswXTsKLQkJCWZvY3VzU1AgPSAoSVNlcnZpY2VQb2xpY3kpIHNlbGVjdGVkLmdldERhdGEoKTsKLQkJfQotCi0JCWVycm9yID0gdmFsaWRhdGVBbGxQb2xpY2llcyhmb2N1c1NQKTsKLQotCX0KLQlwcml2YXRlIGNsYXNzIENoaWxkQ2hhbmdlRXZlbnQgewotCQlwdWJsaWMgQ2hpbGRDaGFuZ2VFdmVudChMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGFuZ2VkQ2hpbGRyZW4sIExpc3Q8Qm9vbGVhbj4gYWRkZWQgKSB7Ci0JCQl0aGlzLmNoYW5nZWRDaGlsZHJlbiA9IGNoYW5nZWRDaGlsZHJlbjsKLQkJCXRoaXMuYWRkZWQgPSBhZGRlZDsKLQkJCQotCQl9Ci0JCXByaXZhdGUgTGlzdDxJU2VydmljZVBvbGljeT4gY2hhbmdlZENoaWxkcmVuOwotCQlwcml2YXRlIExpc3Q8Qm9vbGVhbj4gYWRkZWQ7Ci0JCXB1YmxpYyBMaXN0PElTZXJ2aWNlUG9saWN5PiBnZXRDaGFuZ2VkQ2hpbGRyZW4oKSB7Ci0JCQlyZXR1cm4gY2hhbmdlZENoaWxkcmVuOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldENoYW5nZWRDaGlsZHJlbihMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGFuZ2VkQ2hpbGRyZW4pIHsKLQkJCXRoaXMuY2hhbmdlZENoaWxkcmVuID0gY2hhbmdlZENoaWxkcmVuOwotCQl9Ci0JCXB1YmxpYyBMaXN0PEJvb2xlYW4+IGdldEFkZGVkKCkgewotCQkJcmV0dXJuIGFkZGVkOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldEFkZGVkKExpc3Q8Qm9vbGVhbj4gYWRkZWQpIHsKLQkJCXRoaXMuYWRkZWQgPSBhZGRlZDsKLQkJfQotCX0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyI2NoaWxkQ2hhbmdlKExpc3Q8b3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5PiwgTGlzdDxqYXZhLmxhbmcuQm9vbGVhbj4pCi0JICovCi0JcHVibGljIHZvaWQgY2hpbGRDaGFuZ2UoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoaWxkLCBMaXN0PEJvb2xlYW4+IGFkZGVkICkgewotCQkvL2lnbm9yZSBldmVudHMgdW5sZXNzIHdlIGFyZSBpbiBhIGNvbXBsZXggb3BlcmF0aW9uCi0JCWlmICghYkNvbXBsZXhPcENvbXBsZXRlZCkKLQkJCS8vY2FjaGUgdGhlIGV2ZW50IHVudGlsIGNvbXBsZXggb3BlcmF0aW9uIGNvbXBsZXRlZAotCQkJbGlzdENoaWxkQ2hhbmdlRXZlbnRzLmFkZChuZXcgQ2hpbGRDaGFuZ2VFdmVudChjaGlsZCwgYWRkZWQpKTsKLQkJCQotCX0KLQkKLQkKLQkvKioKLQkgKiBAcGFyYW0gY2hpbGQKLQkgKiBAcGFyYW0gYWRkZWQKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc0NoaWxkQ2hhbmdlRXZlbnQoQ2hpbGRDaGFuZ2VFdmVudCBjY2UsCi0JCQlIYXNodGFibGU8U3RyaW5nLCBJU2VydmljZVBvbGljeT4gaHRUb3BMZXZlbEFkZHRpb25zKSB7Ci0JCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoYW5nZWRTZXJ2aWNlUG9saWN5TGlzdCA9IGNjZS5nZXRDaGFuZ2VkQ2hpbGRyZW4oKTsKLQkJTGlzdDxCb29sZWFuPiBjaGFuZ2VkU2VydmljZVBvbGljeUFkZGVkTGlzdCA9IGNjZS5nZXRBZGRlZCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoYW5nZWRTZXJ2aWNlUG9saWN5TGlzdC5zaXplKCk7IGkrKykgewotCQkJSVNlcnZpY2VQb2xpY3kgbmV4dENoYW5nZWRTZXJ2aWNlUG9saWN5ID0gY2hhbmdlZFNlcnZpY2VQb2xpY3lMaXN0LmdldChpKTsKLQkJCWJvb2xlYW4gYWRkZWQgPSBjaGFuZ2VkU2VydmljZVBvbGljeUFkZGVkTGlzdC5nZXQoaSk7Ci0JCQlpZiAoIWFkZGVkKSB7Ci0JCQkJLy9kZWxldGUgbm9kZQotCQkJCXByb2Nlc3NDaGlsZENoYW5nZUV2ZW50UmVtb3ZlU2VydmljZVBvbGljeShuZXh0Q2hhbmdlZFNlcnZpY2VQb2xpY3kpOwotCQkJfSBlbHNlIHsKLQkJCQkvL2FuIGFkZGl0aW9uLCBvbmx5IHByb2Nlc3MgdG9wIGxldmVsIGFkZGl0aW9ucyBhcyB0aGlzIGlzIGEgcmVjdXJzaXZlIG9wZXJhdGlvbiAoYWRkcyBjaGlsZHJlbiB0b28pCi0JCQkJaWYgKGh0VG9wTGV2ZWxBZGR0aW9ucy5jb250YWluc0tleShuZXh0Q2hhbmdlZFNlcnZpY2VQb2xpY3kuZ2V0SWQoKSkpIHsKLQkJCQkJcHJvY2Vzc0NoaWxkQ2hhbmdlRXZlbnRBZGRTZXJ2aWNlUG9saWN5KG5leHRDaGFuZ2VkU2VydmljZVBvbGljeSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JCi0JLyoqCi0JICogQHBhcmFtIG5leHRDaGFuZ2VkU2VydmljZVBvbGljeQotCSAqLwotCXByaXZhdGUgdm9pZCBwcm9jZXNzQ2hpbGRDaGFuZ2VFdmVudFJlbW92ZVNlcnZpY2VQb2xpY3koSVNlcnZpY2VQb2xpY3kgbmV4dENoYW5nZWRTZXJ2aWNlUG9saWN5KSB7Ci0JCWJvb2xlYW4gaXM0dGhMZXZlbE9ySGlnaGVyID0gaXM0dGhMZXZlbE9ySGlnaGVyUG9saWN5KG5leHRDaGFuZ2VkU2VydmljZVBvbGljeSk7Ci0JCQotCQlyZW1vdmVTdGF0ZUxpc3RlbmVyKCBuZXh0Q2hhbmdlZFNlcnZpY2VQb2xpY3kgKTsKLQkJCi0JCWlmIChpczR0aExldmVsT3JIaWdoZXIpIHsKLQkJCWlmIChkZXRhaWxzUG9saWN5VHJlZS5pc1Zpc2libGUoKSkgewotCQkJCVRyZWVJdGVtW10gY2hpbGRyZW4gPSBkZXRhaWxzUG9saWN5VHJlZS5nZXRJdGVtcygpOwotCQkJCVRyZWVJdGVtIGZvdW5kID0gbnVsbDsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCQkgZm91bmQgPSBmaW5kUG9saWN5KG5leHRDaGFuZ2VkU2VydmljZVBvbGljeSwgY2hpbGRyZW5baV0pOwkKLQkJCQkJIGlmIChmb3VuZCAhPSBudWxsKQotCQkJCQkJIGJyZWFrOwotCQkJCX0KLQkJCQlpZiAoZm91bmQgIT0gbnVsbCAmJiAhZm91bmQuaXNEaXNwb3NlZCgpKSB7Ci0JCQkJCXByb2Nlc3NDaGlsZENoYW5nZUV2ZW50RGVsZXRlVHJlZUl0ZW0oZm91bmQpOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCVRyZWVJdGVtW10gY2hpbGRyZW4gPSBtYXN0ZXJQb2xpY3lUcmVlLmdldEl0ZW1zKCk7Ci0JCQlUcmVlSXRlbSBmb3VuZCA9IG51bGw7Ci0JCQlmb3IgKGludCBpPTA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCSBmb3VuZCA9IGZpbmRQb2xpY3kobmV4dENoYW5nZWRTZXJ2aWNlUG9saWN5LCBjaGlsZHJlbltpXSk7CQotCQkJCSBpZiAoZm91bmQgIT0gbnVsbCkKLQkJCQkJIGJyZWFrOwotCQkJfQotCQkJaWYgKGZvdW5kICE9IG51bGwgJiYgIWZvdW5kLmlzRGlzcG9zZWQoKSkgewotCQkJCXByb2Nlc3NDaGlsZENoYW5nZUV2ZW50RGVsZXRlVHJlZUl0ZW0oZm91bmQpOwotCQkJCQotCQkJfQotCi0JCQkKLQkJCQotCQl9Ci0JCQotCX0KLQotCS8qKgotCSAqIERlbGV0ZSB0aGUgaXRlbSwgYW5kIGNob29zZSBzZXQgYSBuZXcgc2VsZWN0aW9uIGFzIGFwcHJvcHJpYXRlIGZyb20gb25lIG9mIHRoZSBwb2xpY3kgdHJlZXMgCi0JICogQHBhcmFtIGRlbGV0ZUl0ZW0KLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc0NoaWxkQ2hhbmdlRXZlbnREZWxldGVUcmVlSXRlbShUcmVlSXRlbSBkZWxldGVJdGVtKSB7Ci0JCVRyZWUgcGFyZW50VHJlZSA9IGRlbGV0ZUl0ZW0uZ2V0UGFyZW50KCk7Ci0JCVRyZWUgc2VsZWN0aW9uVHJlZSA9IHBhcmVudFRyZWU7Ci0JCVRyZWVJdGVtIHBhcmVudFRyZWVJdGVtID0gZGVsZXRlSXRlbS5nZXRQYXJlbnRJdGVtKCk7Ci0JCS8vaW5kZXggb2YgZm91bmQgaW4gdGhlIHRyZWUKLQkJaW50IGlkeCA9IChwYXJlbnRUcmVlSXRlbSA9PSBudWxsKSA/IHBhcmVudFRyZWUuaW5kZXhPZihkZWxldGVJdGVtKSA6IHBhcmVudFRyZWVJdGVtLmluZGV4T2YoZGVsZXRlSXRlbSk7Ci0JCS8vaXMgaW5kZXggdGhlIGxhc3QgaW5kZXggaW4gdGhlIHRyZWUKLQkJYm9vbGVhbiBpc0xhc3RJbmRleCA9IChwYXJlbnRUcmVlSXRlbSA9PSBudWxsKSA/IHBhcmVudFRyZWUuaW5kZXhPZihkZWxldGVJdGVtKSA9PSBwYXJlbnRUcmVlLmdldEl0ZW1Db3VudCgpIC0xIDogcGFyZW50VHJlZUl0ZW0uaW5kZXhPZihkZWxldGVJdGVtKSA9PSBwYXJlbnRUcmVlSXRlbS5nZXRJdGVtQ291bnQoKSAtMTsKLQkJLy9udW1iZXIgb2Ygc2libGluZ3MKLQkJaW50IHNpYmxpbmdzQ291bnQgPSAocGFyZW50VHJlZUl0ZW0gPT0gbnVsbCkgPyBwYXJlbnRUcmVlLmdldEl0ZW1Db3VudCgpIC0xIDogcGFyZW50VHJlZUl0ZW0uZ2V0SXRlbUNvdW50KCkgLTE7Ci0JCWJvb2xlYW4gaGFzUGFyZW50ID0gKHBhcmVudFRyZWVJdGVtID09IG51bGwpID8gcGFyZW50VHJlZS5nZXRJdGVtQ291bnQoKSA9PSAwIDogcGFyZW50VHJlZUl0ZW0uZ2V0SXRlbUNvdW50KCkgPT0gMDsKLQkJZGVsZXRlSXRlbS5kaXNwb3NlKCk7Ci0JCWlmIChwYXJlbnRUcmVlSXRlbSA9PSBudWxsKSAKLQkJCXBhcmVudFRyZWUucmVkcmF3KCk7Ci0JCWVsc2UKLQkJCXBhcmVudFRyZWUucmVkcmF3KCk7Ci0JCVRyZWVJdGVtIHNlbGVjdEl0ZW0gPSBudWxsOwotCQlpZiAoc2libGluZ3NDb3VudCA9PSAwKSB7Ci0JCQlpZiAoaGFzUGFyZW50KSB7Ci0JCQkvL25vIHNpYmxpbmdzLCBzZWxlY3QgcGFyZW50Ci0JCQlpZiAgKHBhcmVudFRyZWVJdGVtID09IG51bGwpIAotCQkJCXNlbGVjdEl0ZW0gPSBwYXJlbnRUcmVlLmdldEl0ZW0oMCk7Ci0JCQllbHNlIAotCQkJCXNlbGVjdEl0ZW0gPSBwYXJlbnRUcmVlSXRlbTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHBhcmVudFRyZWUgPT0gZGV0YWlsc1BvbGljeVRyZWUpCi0JCQkJCS8vc2VsZWN0IHNvbWV0aGluZyBmcm9tIG1hc3RlciB0cmVlCi0JCQkJCWlmIChtYXN0ZXJQb2xpY3lUcmVlLmdldEl0ZW1zKCkubGVuZ3RoID4gMCkgewotCQkJCQkJc2VsZWN0SXRlbSA9IG1hc3RlclBvbGljeVRyZWUuZ2V0SXRlbSgwKTsKLQkJCQkJCXNlbGVjdGlvblRyZWUgPSBtYXN0ZXJQb2xpY3lUcmVlOwotCQkJCQl9Ci0JCQkJCi0JCQl9Ci0JCQkKLQkJfSBlbHNlIHsKLQkJCWlmICAocGFyZW50VHJlZUl0ZW0gPT0gbnVsbCkgewotCQkJCWlmIChpc0xhc3RJbmRleCkKLQkJCQkJc2VsZWN0SXRlbSA9IHBhcmVudFRyZWUuZ2V0SXRlbShpZHggLTEpOwotCQkJCWVsc2UgCi0JCQkJCXNlbGVjdEl0ZW0gPSBwYXJlbnRUcmVlLmdldEl0ZW0oaWR4KTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGlzTGFzdEluZGV4KQotCQkJCQlzZWxlY3RJdGVtID0gcGFyZW50VHJlZUl0ZW0uZ2V0SXRlbShpZHggLTEpOwotCQkJCWVsc2UgCi0JCQkJCXNlbGVjdEl0ZW0gPSBwYXJlbnRUcmVlSXRlbS5nZXRJdGVtKGlkeCk7Ci0KLQkJCX0KLQkJfQotCQlpZiAoc2VsZWN0SXRlbSAhPSBudWxsKSB7Ci0JCQlzZWxlY3Rpb25UcmVlLnNldFNlbGVjdGlvbihzZWxlY3RJdGVtKTsKLQkJCXNlbGVjdGlvblRyZWUubm90aWZ5TGlzdGVuZXJzKFNXVC5TZWxlY3Rpb24sIG5ldyBFdmVudCgpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwb2xpY3lUb0FkZAotCSAqLwotCXByaXZhdGUgdm9pZCBwcm9jZXNzQ2hpbGRDaGFuZ2VFdmVudEFkZFNlcnZpY2VQb2xpY3koSVNlcnZpY2VQb2xpY3kgcG9saWN5VG9BZGQpIHsKLQkJYm9vbGVhbiBpczR0aExldmVsT3JIaWdoZXIgPSBpczR0aExldmVsT3JIaWdoZXJQb2xpY3kocG9saWN5VG9BZGQpOwotCQlJU2VydmljZVBvbGljeSBwYXJlbnQgPSBwb2xpY3lUb0FkZC5nZXRQYXJlbnRQb2xpY3koKTsKLQkJaWYgKGlzNHRoTGV2ZWxPckhpZ2hlcikgewotCQkJaWYgKGRldGFpbHNQb2xpY3lUcmVlLmlzVmlzaWJsZSgpKSB7Ci0JCQkJVHJlZUl0ZW1bXSBjaGlsZHJlbiA9IGRldGFpbHNQb2xpY3lUcmVlLmdldEl0ZW1zKCk7Ci0JCQkJVHJlZUl0ZW0gZm91bmQgPSBudWxsOwotCQkJCWZvciAoaW50IGk9MDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCSBmb3VuZCA9IGZpbmRQb2xpY3kocGFyZW50LCBjaGlsZHJlbltpXSk7CQotCQkJCQkgaWYgKGZvdW5kICE9IG51bGwpCi0JCQkJCQkgYnJlYWs7Ci0JCQkJfQotCQkJCWlmIChmb3VuZCAhPSBudWxsICYmICFmb3VuZC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCQkJYWRkUG9saWN5KHBvbGljeVRvQWRkLCBmb3VuZCwgZmFsc2UpOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCQkvL2xlc3MgdGhhbiA0dGggbGV2ZWwgcG9saWN5Ci0JCQkJVHJlZUl0ZW1bXSBjaGlsZHJlbiA9IG1hc3RlclBvbGljeVRyZWUuZ2V0SXRlbXMoKTsKLQkJCQlUcmVlSXRlbSBmb3VuZCA9IG51bGw7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCQkJIGZvdW5kID0gZmluZFBvbGljeShwYXJlbnQsIGNoaWxkcmVuW2ldKTsJCi0JCQkJCSBpZiAoZm91bmQgIT0gbnVsbCkKLQkJCQkJCSBicmVhazsKLQkJCQl9Ci0JCQkJaWYgKGZvdW5kICE9IG51bGwgJiYgIWZvdW5kLmlzRGlzcG9zZWQoKSkgewotCQkJCQlhZGRQb2xpY3kocG9saWN5VG9BZGQsIGZvdW5kLCBmYWxzZSk7Ci0JCQkJCQotCQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIEZpbmQgdGhlIHBvbGljeSB3aXRoaW4gdGhlIHRyZWUgdGkKLQkgKiBAcGFyYW0gcG9saWN5VG9GaW5kCi0JICovCi0JcHJpdmF0ZSBUcmVlSXRlbSBmaW5kUG9saWN5KElTZXJ2aWNlUG9saWN5IHBvbGljeVRvRmluZCwgVHJlZUl0ZW0gdGkpIHsKLQkJVHJlZUl0ZW0gdG9SZXR1cm4gPSBudWxsOwotCQlpZiAodGkgPT0gbnVsbCB8fCAhKHRpLmdldERhdGEoKSBpbnN0YW5jZW9mIElTZXJ2aWNlUG9saWN5KSkKLQkJCXJldHVybiB0b1JldHVybjsKLQkJSVNlcnZpY2VQb2xpY3kgc3AgPSAoSVNlcnZpY2VQb2xpY3kpdGkuZ2V0RGF0YSgpOwotCQlpZiAoc3AuZ2V0SWQoKS5lcXVhbHMocG9saWN5VG9GaW5kLmdldElkKCkpKQotCQkJcmV0dXJuIHRpOwotCQllbHNlIHsKLQkJCVRyZWVJdGVtW10gdGlDaGlsZHJlbiA9IHRpLmdldEl0ZW1zKCk7Ci0JCQlmb3IgKGludCBpID0wOyBpIDwgdGlDaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCXRvUmV0dXJuID0gZmluZFBvbGljeShwb2xpY3lUb0ZpbmQsIHRpQ2hpbGRyZW5baV0pOwotCQkJCWlmICh0b1JldHVybiAhPSBudWxsKQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdG9SZXR1cm47Ci0JfQotCS8qKgotCSAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgdXNpbmcgZGVmYXVsdCB2YWx1ZXMgaW4gdGhlIHByZWZlcmVuY2UKLQkgKiBzdG9yZS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzKCkgewotCQlpZiAocHJvamVjdCA9PSBudWxsKQotCQkJcGxhdGZvcm0ucmVzdG9yZURlZmF1bHRzKCk7Ci0JCWVsc2UKLQkJCXBsYXRmb3JtLnJlc3RvcmVEZWZhdWx0cyhwcm9qZWN0KTsKLQotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCWlmIChlLmdldFNvdXJjZSgpID09IG1hc3RlclBvbGljeVRyZWUgfHwgZS5nZXRTb3VyY2UoKSA9PSBkZXRhaWxzUG9saWN5VHJlZSkgewotCQkJVHJlZUl0ZW1bXSBzZWxlY3RlZEl0ZW1zOwotCQkJaWYgKGUuZ2V0U291cmNlKCkgPT0gbWFzdGVyUG9saWN5VHJlZSkKLQkJCQlzZWxlY3RlZEl0ZW1zID0gbWFzdGVyUG9saWN5VHJlZS5nZXRTZWxlY3Rpb24oKTsKLQkJCWVsc2UKLQkJCQlzZWxlY3RlZEl0ZW1zID0gZGV0YWlsc1BvbGljeVRyZWUuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkvL3Bvc3NpYmxlIHRoYXQgYW4gZXZlbnQgaXMgZmlyZWQgYW5kIG5vIG5vZGVzIHNlbGVjdGVkCi0JCQlpZiAoIShzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApKQotCQkJCXJldHVybjsKLQkJCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2VsZWN0ZWRJdGVtcy5sZW5ndGg7IGkrKykgewotCQkJCXNwLmFkZCgoSVNlcnZpY2VQb2xpY3kpIHNlbGVjdGVkSXRlbXNbaV0uZ2V0RGF0YSgpKTsKLQkJCX0KLQkJCS8vdXBkYXRlIHRoZSBjb250ZXh0IHNlbnNpdGl2ZSBoZWxwCi0JCQl1cGRhdGVDU0goc3ApOwotCQkJdXBkYXRlSW5mb1BhbmVscyhzcCk7Ci0KLQkJCWlmIChlLmdldFNvdXJjZSgpID09IG1hc3RlclBvbGljeVRyZWUpIHsKLQkJCQkvLyBpZiBzZWxlY3RlZCBub2RlIGluIG1hc3RlciB0cmVlIGlzIDNyZCBsZXZlbCAmIGhhcwotCQkJCS8vIGNoaWxkcmVuLCBwb3B1bGF0ZSBkZXRhaWxzIHRyZWUKLQkJCQlpZiAoaXMzcmRMZXZlbFBvbEluTWFzdGVyVHJlZVdpdGhDaGlsZHJlbihzcCkpIHsKLQkJCQkJcG9wdWxhdGVEZXRhaWxzUG9saWN5VHJlZShzcCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLy9pZiBleHBhbmRhYmxlIGNvbXBvc2l0ZSB3YXMgdmlzaWJsZSwgY29sbGFwc2UgYW5kIHNldCBpbnZpc2libGUKLQkJCQkJaWYgKGV4Y29tcG9zaXRlLmdldFZpc2libGUoKSkgewotCQkJCQkJZXhjb21wb3NpdGUuc2V0VmlzaWJsZShmYWxzZSk7Ci0JCQkJCQlleGNvbXBvc2l0ZS5zZXRFeHBhbmRlZChmYWxzZSk7Ci0JCQkJCQlleHBhbmRlZFN0YXRlQ2hhbmdlZChleGNvbXBvc2l0ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlhZGRBY3Rpb25CdXR0b25zKHNwKTsKLQkJCWxhc3RTZWxlY3RlZFNwID0gc3A7Ci0KLQkJfSBlbHNlIHsKLQkJCS8vIGFuIGFjdGlvbiBjb250cm9sIGZpcmVkIGEgY2hhbmdlIGV2ZW50Ci0JCQlDb250cm9sIGFjdGlvbkNvbnRyb2wgPSAoQ29udHJvbCkgZS5nZXRTb3VyY2UoKTsKLQkJCXVwZGF0ZVBvbGljeShhY3Rpb25Db250cm9sKTsKLQkJCQotCQkJaWYoIGxhc3RTZWxlY3RlZFNwICE9IG51bGwgKQotCQkJewotCQkJICBhZGRBY3Rpb25CdXR0b25zKGxhc3RTZWxlY3RlZFNwKTsgIAotCQkJfQotCQkJCi0JCQkvL3BvbGljeSB1cGRhdGVzIG1pZ2h0IGRlbGV0ZSBub2RlcyBpbiB0aGUgdHJlZSwgc28gbWFrZSBzdXJlIGFjdGlvbiBjb250cm9sIG5vdCBkaXNwb3NlZAotCQkJSVNlcnZpY2VQb2xpY3kgY2hhbmdlZFNQID0gbnVsbDsKLQkJCWlmICghYWN0aW9uQ29udHJvbC5pc0Rpc3Bvc2VkKCkpCi0JCQkJY2hhbmdlZFNQID0gKChBY3Rpb25Db250cm9sRGF0YSkgYWN0aW9uQ29udHJvbC5nZXREYXRhKCkpCi0JCQkJCS5nZXRTcExpc3QoKS5nZXQoMCk7Ci0JCQllcnJvciA9IHZhbGlkYXRlQWxsUG9saWNpZXMoY2hhbmdlZFNQKTsKLQkJCS8vaW5mb3JtIGxpc3RlbmVycyB0aGF0IGEgY29udHJvbCBoYXMgY2hhbmdlZCwgYXMgY29tcG9zaXRlIG1heSBiZSBpbiBlcnJvciBub3cKLQkJCWxpc3RlbmVyLndpZGdldFNlbGVjdGVkKGUpOwotCi0JCX0KLQotCX0KLQotCS8qKgotCSAqIFBvcHVsYXRlIHRoZSBkZXRhaWxzIHBvbGljeSB0cmVlIHdpdGggc3AgYW5kIHRoZWlyIGNoaWxkcmVuCi0JICogQHBhcmFtIHNwIGEgbGlzdCBvZiB0b3AgbGV2ZWwgZGV0YWlscyB0cmVlIHNlcnZpY2UgcG9saWNpZXMKLQkgKi8KLQlwcml2YXRlIHZvaWQgcG9wdWxhdGVEZXRhaWxzUG9saWN5VHJlZShMaXN0PElTZXJ2aWNlUG9saWN5PiBzcCkgewotCQlMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGlsZHBvbGljeUxpc3QgPSBzcC5nZXQoMCkKLQkJCQkuZ2V0Q2hpbGRyZW4oKTsKLQkJZGV0YWlsc1BvbGljeVRyZWUucmVtb3ZlQWxsKCk7Ci0JCWZvciAoSVNlcnZpY2VQb2xpY3kgcG9saWN5IDogY2hpbGRwb2xpY3lMaXN0KSB7Ci0JCQlhZGRQb2xpY3kocG9saWN5LCBkZXRhaWxzUG9saWN5VHJlZSwgZmFsc2UpOwotCQl9Ci0JCS8vIHVwZGF0ZSBkZXRhaWxzIHByZWZlcmVuY2UgdHJlZQotCQlUcmVlSXRlbVtdIHRyZWVJdGVtcyA9IGRldGFpbHNQb2xpY3lUcmVlLmdldEl0ZW1zKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdHJlZUl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0JCQl1cGRhdGVWYWxpZFN0YXRlcyh0cmVlSXRlbXNbaV0sIHRydWUpOwotCQl9Ci0KLQkJZXhjb21wb3NpdGUuc2V0VmlzaWJsZSh0cnVlKTsKLQkJZXhjb21wb3NpdGUuc2V0VGV4dChzcC5nZXQoMCkuZ2V0RGVzY3JpcHRvcigpLmdldExvbmdOYW1lKCkKLQkJCQkrICIgKCIgKyBXc3RTUFVJUGx1Z2luTWVzc2FnZXMuVEVYVF9ERVRBSUxTICsgIikiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCS8vIHRleHQgaGFzIGNoYW5nZWQsIHNvIG5lZWQgdG8gZm9yY2UgbGF5b3V0IHNvIHVwZGF0ZWQKLQkJZXhjb21wb3NpdGUubGF5b3V0KCk7Ci0JfQotCi0JLyoqCi0JICogVXBkYXRlcyB0aGUgZGV0YWlscyBhbmQgZGVwZW5kZW5jaWVzIHBhbmVscyBmb3IgdGhlIGZpcnN0IHNlcnZpY2UKLQkgKiBwb2xpY3kgaW4gc3BMaXN0Ci0JICogQHBhcmFtIHNwTGlzdCBhIGxpc3Qgb2Ygc2VsZWN0ZWQgc2VydmljZSBwb2xpY2llcwotCSAqLwotCXByaXZhdGUgdm9pZCB1cGRhdGVJbmZvUGFuZWxzKExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNwTGlzdCkgewotCQlTdHJpbmcgZGVzYyA9IChzcExpc3QuZ2V0KDApID09IG51bGwKLQkJCQl8fCBzcExpc3QuZ2V0KDApLmdldERlc2NyaXB0b3IoKSA9PSBudWxsIHx8IHNwTGlzdC5nZXQoMCkKLQkJCQkuZ2V0RGVzY3JpcHRvcigpLmdldERlc2NyaXB0aW9uKCkgPT0gbnVsbCkgPyAiIiA6IHNwTGlzdC5nZXQoMCkgLy8kTk9OLU5MUy0xJAotCQkJCS5nZXREZXNjcmlwdG9yKCkuZ2V0RGVzY3JpcHRpb24oKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVzY3JpcHRpb24uc2V0VGV4dChkZXNjKTsKLQkJdGV4dF9EZXRhaWxzUGFuZWxfZGVwZW5kZW5jaWVzLnNldFRleHQoZ2V0RGVwZW5kYW5jaWVzVGV4dChzcExpc3QKLQkJCQkuZ2V0KDApKSk7Ci0JfQotCi0JLyoqCi0JICogVXBkYXRlcyB0aGUgY29udGV4dCBzZW5zaXRpdmUgaGVscCBmb3IgdGhlIGNvbXBvc2l0ZSB3aXRoIAotCSAqIHRoYXQgZGVmaW5lZCBmb3IgdGhlIGZpcnN0IHBvbGljeSBpbiBzcExpc3QgKG9yIGEgcGFyZW50IG9mIAotCSAqIGZpcnN0IHBvbGljeSBpbiBzcExpc3QgcG9saWN5IGRvZXMgbm90IGRlZmluZSBhbnkgQ1NIKQotCSAqIEBwYXJhbSBzcExpc3QgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgc2VydmljZSBwb2xpY2llcwotCSAqLwotCXByaXZhdGUgdm9pZCB1cGRhdGVDU0goTGlzdDxJU2VydmljZVBvbGljeT4gc3BMaXN0KSB7Ci0JCVN0cmluZyBDU0hfSUQgPSAoc3BMaXN0LmdldCgwKSA9PSBudWxsIHx8IHNwTGlzdC5nZXQoMCkuZ2V0RGVzY3JpcHRvcigpID09IG51bGwpID8gbnVsbAotCQkJCTogc3BMaXN0LmdldCgwKS5nZXREZXNjcmlwdG9yKCkuZ2V0Q29udGV4dEhlbHBJZCgpOwotCQlJU2VydmljZVBvbGljeSBwYXJlbnRTUCA9IHNwTGlzdC5nZXQoMCk7Ci0JCXdoaWxlICgoQ1NIX0lEID09IG51bGwgfHwgQ1NIX0lELmxlbmd0aCgpID09IDApKSB7Ci0JCQlwYXJlbnRTUCA9IHBhcmVudFNQLmdldFBhcmVudFBvbGljeSgpOwotCQkJaWYgKHBhcmVudFNQID09IG51bGwpCi0JCQkJYnJlYWs7Ci0JCQlDU0hfSUQgPSAocGFyZW50U1AuZ2V0RGVzY3JpcHRvcigpID09IG51bGwpID8gbnVsbCA6IHBhcmVudFNQCi0JCQkJCS5nZXREZXNjcmlwdG9yKCkuZ2V0Q29udGV4dEhlbHBJZCgpOwotCQl9Ci0JCWhlbHBTeXN0ZW0uc2V0SGVscCh0aGlzLCBDU0hfSUQpOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlcyBhbGwgU2VydmljZSBQb2xpY2llcyBpbiB0aGUgbW9kZWwKLQkgKiAKLQkgKiBAcGFyYW0gSVNlcnZpY2VQb2xpY3kKLQkgKiAgICAgICAgICAgIHRoZSBmb2N1cyBwb2xpY3ksIGkuZS4gb25lIHRoYXQgY2hhbmdlZCBzdGF0ZQotCSAqIEByZXR1cm4gSVN0YXR1cyBudWxsIGlmIG5vIFNlcnZpY2UgcG9saWNpZXMgaW4gZXJyb3IsIG90aGVyd2lzZSBhIFNlcnZpY2UKLQkgKiAgICAgICAgIFBvbGljeSBlcnJvciAodGhlIGZvY3VjUG9saWN5IGVycm9yIGlmIGl0IGlzIGluIGVycm9yKS4KLQkgKiAgICAgICAgIFBvc3Rjb25kaXRpb24tIHRoZSBlcnJvciBwcm9wZXJ0eSBpcyB1cGRhdGVkLgotCSAqLwotCXByaXZhdGUgSVN0YXR1cyB2YWxpZGF0ZUFsbFBvbGljaWVzKElTZXJ2aWNlUG9saWN5IGZvY3VzUG9saWN5KSB7Ci0JCS8vIHJlbW92ZSBhbGwgZXJyb3JzIGFzIGdvaW5nIHRvIHJlLXZhbGlkYXRlCi0JCWFsbEVycm9ycy5jbGVhcigpOwotCQkvLyByZS12YWxpZGF0ZSBhbGwgcG9saWNpZXMgaW4gbW9kZWwKLQkJTGlzdDxJU2VydmljZVBvbGljeT4gc2VydmljZVBvbGljeUxpc3QgPSBwbGF0Zm9ybQotCQkJCS5nZXRSb290U2VydmljZVBvbGljaWVzKG51bGwpOwotCQlmb3IgKElTZXJ2aWNlUG9saWN5IHNlcnZpY2VQb2xpY3lJdGVtIDogc2VydmljZVBvbGljeUxpc3QpIHsKLQkJCXZhbGlkYXRlUG9saWN5KHNlcnZpY2VQb2xpY3lJdGVtKTsKLQkJfQotCQkvLyBkZWZpbmUgZXJyb3IgbWVzc2FnZQotCQlJU3RhdHVzIGVycm9yID0gKGZvY3VzUG9saWN5ID09IG51bGwpID8gbnVsbCA6IGFsbEVycm9ycwotCQkJCS5nZXQoZm9jdXNQb2xpY3kuZ2V0SWQoKSk7Ci0JCWlmIChlcnJvciA9PSBudWxsKQotCQkJaWYgKCFhbGxFcnJvcnMuaXNFbXB0eSgpKQotCQkJCWVycm9yID0gYWxsRXJyb3JzLmdldChhbGxFcnJvcnMua2V5cygpLm5leHRFbGVtZW50KCkpOwotCi0JCS8vIHVwZGF0ZSBtYXN0ZXIgcG9saWN5IHRyZWUKLQkJVHJlZUl0ZW1bXSB0cmVlSXRlbXMgPSBtYXN0ZXJQb2xpY3lUcmVlLmdldEl0ZW1zKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdHJlZUl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0JCQl1cGRhdGVWYWxpZFN0YXRlcyh0cmVlSXRlbXNbaV0sIGZhbHNlKTsKLQkJfQotCQlpZiAoZGV0YWlsc1BvbGljeVRyZWUuaXNWaXNpYmxlKCkpIHsKLQkJCS8vIHVwZGF0ZSBkZXRhaWxzIHByZWZlcmVuY2UgdHJlZQotCQkJdHJlZUl0ZW1zID0gZGV0YWlsc1BvbGljeVRyZWUuZ2V0SXRlbXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdHJlZUl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdXBkYXRlVmFsaWRTdGF0ZXModHJlZUl0ZW1zW2ldLCBmYWxzZSk7Ci0JCQl9Ci0KLQkJfQotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JLyoqCi0JICogVXBkYXRlcyB0aGUgcG9saWN5IHRyZWVzIHRvIHJlZmxlY3QgdmFsaWQgb3IgaW52YWxpZCBzdGF0ZXMsIGludmFsaWQgc3RhdGVzIGFyZSAKLQkgKiBwcm9wYWdhdGVkIHVwIHRocm91Z2ggdGhlIHRyZWUsIGFuZCB1cCB0byBtYXN0ZXIgdHJlZSBpZiB1cGRhdGVEZXRhaWxzT25seSBpcyBmYWxzZQotCSAqIEBwYXJhbSB0aSB0aGUgVHJlZUl0ZW0gdG8gdXBkYXRlLCB1cGRhdGVzIHRpIGFuZCBhbGwgaXQncyBjaGlsZHJlbgotCSAqIEBwYXJhbSB1cGRhdGVEZXRhaWxzT25seSBpZiBmYWxzZSB0aGVuIHByb3BhZ2F0ZSBpbnZhbGlkIHN0YXRlcyBpbnRvCi0JICogbWFzdGVyIHRyZWUgCi0JICovCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZVZhbGlkU3RhdGVzKFRyZWVJdGVtIHRpLCBib29sZWFuIHVwZGF0ZURldGFpbHNPbmx5KSB7Ci0JCS8vIGFzc3VtZSB0cmVlIGl0ZW0gaXMgdmFsaWQgZm9yIG5vdwotCQlJU2VydmljZVBvbGljeSBzcCA9IChJU2VydmljZVBvbGljeSkgdGkuZ2V0RGF0YSgpOwotCQlzZXRWYWxpZFBvbGljeVN0YXRlKHRpKTsKLQotCQlpZiAoYWxsRXJyb3JzLmNvbnRhaW5zS2V5KHNwLmdldElkKCkpKQotCQkJc2V0SW52YWxpZFBvbGljeVN0YXRlKHRpLCB1cGRhdGVEZXRhaWxzT25seSk7Ci0JCVRyZWVJdGVtW10gdHJlZUl0ZW1zID0gdGkuZ2V0SXRlbXMoKTsKLQkJaWYgKHRpLmdldEl0ZW1zKCkubGVuZ3RoID09IDApIHsKLQkJCWlmIChzcC5nZXRDaGlsZHJlbigpLnNpemUoKSAhPSAwICYmIHBvbGljeUNoaWxkcmVuSW52YWxpZChzcCkpCi0JCQkJc2V0SW52YWxpZFBvbGljeVN0YXRlKHRpLCB1cGRhdGVEZXRhaWxzT25seSk7Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHRyZWVJdGVtcy5sZW5ndGg7IGkrKykgewotCi0JCQkJdXBkYXRlVmFsaWRTdGF0ZXModHJlZUl0ZW1zW2ldLCB1cGRhdGVEZXRhaWxzT25seSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIENoZWNrcyB3aGV0aGVyIHRoZSBzcCBoYXMgaW52YWxpZCBjaGlsZHJlbgotCSAqIEBwYXJhbSBzcCB0aGUgc2VydmljZSBwb2xpY3kgd2hvc2UgY2hpbGRyZW4gbWF5IGJlIGludmFsaWQKLQkgKiBAcmV0dXJuIHRydWUgaWYgc3AgaGFzIGFuIGludmFsaWQgY2hpbGQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gcG9saWN5Q2hpbGRyZW5JbnZhbGlkKElTZXJ2aWNlUG9saWN5IHNwKSB7Ci0JCWJvb2xlYW4gdG9SZXR1cm4gPSBmYWxzZTsKLQkJTGlzdDxJU2VydmljZVBvbGljeT4gc2VydmljZVBvbGljeUxpc3QgPSBzcC5nZXRDaGlsZHJlbigpOwotCQlmb3IgKElTZXJ2aWNlUG9saWN5IHNlcnZpY2VQb2xpY3lJdGVtIDogc2VydmljZVBvbGljeUxpc3QpIHsKLQkJCWlmIChhbGxFcnJvcnMuY29udGFpbnNLZXkoc2VydmljZVBvbGljeUl0ZW0uZ2V0SWQoKSkpCi0JCQkJcmV0dXJuIHRydWU7Ci0JCQllbHNlCi0JCQkJdG9SZXR1cm4gPSBwb2xpY3lDaGlsZHJlbkludmFsaWQoc2VydmljZVBvbGljeUl0ZW0pOwotCQl9Ci0JCXJldHVybiB0b1JldHVybjsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZXMgdGhlIFNlcnZpY2UgUG9saWNpZXMgZm9yIHRoZSBzcCBhbmQgYWxsIGl0J3MgY2hpbGRyZW4sIGNyZWF0aW5nIAotCSAqIGVycm9yIHN0YXR1cyBvYmplY3RzIGZvciBhbnkgdW5zYXRpc2ZpZWQgcmVsYXRpb25zaGlwcwotCSAqIAotCSAqIEBwYXJhbSBzcAotCSAqICAgICAgICAgICAgdGhlIHNlcnZpY2UgcG9saWN5IHRvIHZhbGlkYXRlCi0JICovCi0JcHJpdmF0ZSB2b2lkIHZhbGlkYXRlUG9saWN5KElTZXJ2aWNlUG9saWN5IHNwKSB7Ci0JCVN0cmluZyBvcGVyYXRpb25Mb25nTmFtZTsKLQkJU3RyaW5nIG9wZXJhdGlvblNlbGVjdGlvbkxvbmdOYW1lOwotCQlTdHJpbmcgZGVwZW5kYW50UG9saWN5U2hvcnROYW1lOwotCQlMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+IHJlbGF0aW9uU2hpcExpc3QgPSBzcC5nZXRSZWxhdGlvbnNoaXBzKCk7Ci0JCVN0cmluZyBjdXJyZW50VmFsdWVJRCA9IG51bGw7Ci0JCWlmIChyZWxhdGlvblNoaXBMaXN0ICE9IG51bGwgJiYgcmVsYXRpb25TaGlwTGlzdC5zaXplKCkgPiAwKSB7Ci0JCWZvciAoSVBvbGljeVJlbGF0aW9uc2hpcCByZWxhdGlvblNoaXBJdGVtIDogcmVsYXRpb25TaGlwTGlzdCkgewotCQkJLy9vcGVyYXRpb25zIGZvciB0aGUgcG9saWN5Ci0JCQlMaXN0PElQb2xpY3lPcGVyYXRpb24+IHBvbGljeU9wZXJhdGlvbnNMaXN0ID0gcGxhdGZvcm1VSQotCQkJCQkuZ2V0T3BlcmF0aW9ucyhyZWxhdGlvblNoaXBJdGVtLmdldFBvbGljeUVudW1lcmF0aW9uTGlzdCgpCi0JCQkJCQkJLmdldFBvbGljeSgpLCBwcm9qZWN0ID09IG51bGwpOwotCQkJLy9kZWZhdWx0IG9wZXJhdGlvbiBuYW1lCi0JCQlvcGVyYXRpb25Mb25nTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlmb3IgKElQb2xpY3lPcGVyYXRpb24gcG9saWN5T3BlcmF0aW9uSXRlbSA6IHBvbGljeU9wZXJhdGlvbnNMaXN0KSB7Ci0JCQkJaWYgKHBvbGljeU9wZXJhdGlvbkl0ZW0uaXNVc2VEZWZhdWx0RGF0YSgpKSB7Ci0JCQkJCW9wZXJhdGlvbkxvbmdOYW1lID0gcG9saWN5T3BlcmF0aW9uSXRlbS5nZXREZXNjcmlwdG9yKCkKLQkJCQkJCQkuZ2V0TG9uZ05hbWUoKTsKLQkJCQkJY3VycmVudFZhbHVlSUQgPSBwb2xpY3lPcGVyYXRpb25JdGVtLmdldFN0YXRlSXRlbShwcm9qZWN0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJLy8gYSBsaXN0IG9mIHN0YXRlcwotCQkJTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IHNwU3RhdGVFbnVtZXJhdGlvbkxpc3QgPSByZWxhdGlvblNoaXBJdGVtCi0JCQkJCS5nZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKS5nZXRFbnVtZXJhdGlvbkxpc3QoKTsKLQkJCS8vIGEgbGlzdCBvZiByZWxhdGVkIHBvbGljaWVzIGFuZCB0aGVpciBhY2NlcHRhYmxlIHN0YXRlcyB0byBzYXRpc2Z5IGEgc3RhdGVFbnVtZXJhdGlvbkl0ZW0gaW4gc3BTdGF0ZUVudW1lcmF0aW9uTGlzdAotCQkJTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiByZWxhdGVkUG9saWNpZXMgPSByZWxhdGlvblNoaXBJdGVtCi0JCQkJCS5nZXRSZWxhdGVkUG9saWNpZXMoKTsKLQkJCWZvciAoSVN0YXRlRW51bWVyYXRpb25JdGVtIHN0YXRlRW51bWVyYXRpb25JdGVtIDogc3BTdGF0ZUVudW1lcmF0aW9uTGlzdCkgewotCQkJCWlmIChzdGF0ZUVudW1lcmF0aW9uSXRlbS5nZXRJZCgpICE9IGN1cnJlbnRWYWx1ZUlEKQotCQkJCQljb250aW51ZTsKLQkJCQkvL2xvbmcgbmFtZSBvZiB0aGUgcmVsYXRlZCBwb2xpY3kgb3BlcmF0aW9uCi0JCQkJb3BlcmF0aW9uU2VsZWN0aW9uTG9uZ05hbWUgPSBzdGF0ZUVudW1lcmF0aW9uSXRlbS5nZXRMb25nTmFtZSgpOwotCQkJCWZvciAoSVBvbGljeUVudW1lcmF0aW9uTGlzdCByZWxhdGVkUG9saWN5RW51bWVyYXRpb25JdGVtIDogcmVsYXRlZFBvbGljaWVzKSB7Ci0JCQkJCWRlcGVuZGFudFBvbGljeVNob3J0TmFtZSA9IHJlbGF0ZWRQb2xpY3lFbnVtZXJhdGlvbkl0ZW0KLQkJCQkJCQkuZ2V0UG9saWN5KCkuZ2V0RGVzY3JpcHRvcigpLmdldFNob3J0TmFtZSgpOwotCQkJCQkvL3RoZSBsaXN0IG9mIHJlbGF0ZWQgc3Agc3RhdGVzIHRoYXQgc2F0aXNmeSB0aGUgc3RhdGVFbnVtZXJhdGlvbkl0ZW0KLQkJCQkJTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IHJlbGF0ZWRTUFN0YXRlRW51bWVyYXRpb25MaXN0ID0gcmVsYXRlZFBvbGljeUVudW1lcmF0aW9uSXRlbQotCQkJCQkJCS5nZXRFbnVtZXJhdGlvbkxpc3QoKTsKLQkJCQkJLy90aGUgbGlzdCBvZiB2YWxpZCBpZHMgZm9yIHRoZSByZWxhdGVkIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbgotCQkJCQlMaXN0PFN0cmluZz4gdmFsaWRJZHMgPSBuZXcgVmVjdG9yPFN0cmluZz4oKTsKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGVkU1BTdGF0ZUVudW1lcmF0aW9uTGlzdAotCQkJCQkJCS5zaXplKCk7IGkrKykgewotCQkJCQkJdmFsaWRJZHMKLQkJCQkJCQkJLmFkZChyZWxhdGVkU1BTdGF0ZUVudW1lcmF0aW9uTGlzdAotCQkJCQkJCQkJCS5nZXQoaSkuZ2V0SWQoKSk7Ci0KLQkJCQkJfQotCQkJCQkvL2dldCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcmVsYXRlZCBzZXJ2aWNlIHBvbGljeSBkZWZhdWx0IG9wZXJhdGlvbgotCQkJCQlTdHJpbmcgY3VycmVudEl0ZW1JRCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJCUxpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcmVsYXRlZFNlcnZpY2VQb2xpY3lQb2xpY3lPcGVyYXRpb25zTGlzdCA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9ucyhyZWxhdGVkUG9saWN5RW51bWVyYXRpb25JdGVtLmdldFBvbGljeSgpLCBwcm9qZWN0ID09bnVsbCk7Ci0JCQkJCUlQb2xpY3lPcGVyYXRpb24gcmVsYXRlZFBvbGljeU9wZXJhdGlvbkl0ZW0gPSBudWxsOwotCQkJCQlmb3IgKElQb2xpY3lPcGVyYXRpb24gcmVsYXRlZFNlcnZpY2VQb2xpY3lQb2xpY3lPcGVyYXRpb25JdGVtIDogcmVsYXRlZFNlcnZpY2VQb2xpY3lQb2xpY3lPcGVyYXRpb25zTGlzdCkgewotCQkJCQkJaWYgKHJlbGF0ZWRTZXJ2aWNlUG9saWN5UG9saWN5T3BlcmF0aW9uSXRlbS5pc1VzZURlZmF1bHREYXRhKCkpIHsKLQkJCQkJCQljdXJyZW50SXRlbUlEID0gcmVsYXRlZFNlcnZpY2VQb2xpY3lQb2xpY3lPcGVyYXRpb25JdGVtLmdldFN0YXRlSXRlbShwcm9qZWN0KTsKLQkJCQkJCQlyZWxhdGVkUG9saWN5T3BlcmF0aW9uSXRlbSA9IHJlbGF0ZWRTZXJ2aWNlUG9saWN5UG9saWN5T3BlcmF0aW9uSXRlbTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQkKLQkJCQkJaWYgKCF2YWxpZElkcwotCQkJCQkJCS5jb250YWlucyhjdXJyZW50SXRlbUlEKSkgewotCQkJCQkJLy8gcG9saWN5IHN0YXRlIGlzIGludmFsaWQKLQkJCQkJCUlTdGF0dXMgZXJyb3IgPSBjcmVhdGVVbnNhdGlzZmllZFJlbGF0aW9uc2hpcEVycm9yKHNwLAotCQkJCQkJCQlvcGVyYXRpb25Mb25nTmFtZSwKLQkJCQkJCQkJb3BlcmF0aW9uU2VsZWN0aW9uTG9uZ05hbWUsCi0JCQkJCQkJCWRlcGVuZGFudFBvbGljeVNob3J0TmFtZSwKLQkJCQkJCQkJcmVsYXRlZFBvbGljeU9wZXJhdGlvbkl0ZW0sCi0JCQkJCQkJCXJlbGF0ZWRTUFN0YXRlRW51bWVyYXRpb25MaXN0KTsKLQkJCQkJCWFsbEVycm9ycy5wdXQoc3AuZ2V0SWQoKSwgZXJyb3IpOwotCi0JCQkJCX0KLQotCi0JCQkJfQotCi0JCQl9Ci0KLQkJfQotCQl9Ci0KLQkJTGlzdDxJU2VydmljZVBvbGljeT4gc2VydmljZVBvbGljeUNoaWxkcmVuTGlzdCA9IHNwLmdldENoaWxkcmVuKCk7Ci0JCWZvciAoSVNlcnZpY2VQb2xpY3kgc2VydmljZVBvbGljeUNoaWxkcmVuSXRlbSA6IHNlcnZpY2VQb2xpY3lDaGlsZHJlbkxpc3QpIHsKLQkJCXZhbGlkYXRlUG9saWN5KHNlcnZpY2VQb2xpY3lDaGlsZHJlbkl0ZW0pOwotCi0JCX0KLQotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGljb24gZm9yIHRoZSB0aSBkZW5vdGluZyBpdCBhcyB2YWxpZAotCSAqIEBwYXJhbSB0aSBhIHZhbGlkIHRyZWUgaXRlbQotCSAqLwotCXByaXZhdGUgdm9pZCBzZXRWYWxpZFBvbGljeVN0YXRlKFRyZWVJdGVtIHRpKSB7Ci0JCUlTZXJ2aWNlUG9saWN5IHNwID0gKElTZXJ2aWNlUG9saWN5KSB0aS5nZXREYXRhKCk7Ci0JCXNldEltYWdlKHRpLCBzcCwgZ2V0SWNvbk92ZXJsYXlJbmZvKHNwLCBmYWxzZSkpOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGljb24gZm9yIHRpIGRlbm90aW5nIGl0IGFzIGludmFsaWQsIGFzIHdlbGwgYXMgdGkncyBwYXJlbnQgdHJlZSBpdGVtcwotCSAqIEBwYXJhbSB0aSBhbiBpbnZhbGlkIHRyZWUgaXRlbQotCSAqIEBwYXJhbSB1cGRhdGVEZXRhaWxzT25seSB0cnVlIGluZGljYXRlcyBkbyBub3QgdXBkYXRlIHBhcmVudCB0cmVlIGl0ZW1zIG9ubHkgaW4gbWFzdGVyIHRyZWUKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0SW52YWxpZFBvbGljeVN0YXRlKFRyZWVJdGVtIHRpLCBib29sZWFuIHVwZGF0ZURldGFpbHNPbmx5KSB7Ci0JCUlTZXJ2aWNlUG9saWN5IFNQID0gKElTZXJ2aWNlUG9saWN5KSB0aS5nZXREYXRhKCk7Ci0JCXNldEltYWdlKHRpLCBTUCwgZ2V0SWNvbk92ZXJsYXlJbmZvKFNQLCB0cnVlKSk7Ci0JCVRyZWVJdGVtIHBhcmVudDsKLQkJaWYgKHRpLmdldFBhcmVudCgpID09IG1hc3RlclBvbGljeVRyZWUgfHwgdXBkYXRlRGV0YWlsc09ubHkpCi0JCQlwYXJlbnQgPSB0aS5nZXRQYXJlbnRJdGVtKCk7Ci0JCWVsc2UKLQkJCXBhcmVudCA9ICh0aS5nZXRQYXJlbnRJdGVtKCkgPT0gbnVsbCAmJiBTUC5nZXRQYXJlbnRQb2xpY3koKSAhPSBudWxsKSA/IGdldFBhcmVudEluTWFzdGVyVHJlZShTUAotCQkJCQkuZ2V0SWQoKSkKLQkJCQkJOiB0aS5nZXRQYXJlbnRJdGVtKCk7Ci0JCXdoaWxlIChwYXJlbnQgIT0gbnVsbCkgewotCQkJc2V0SW1hZ2UocGFyZW50LCAoSVNlcnZpY2VQb2xpY3kpIHBhcmVudC5nZXREYXRhKCksCi0JCQkJCWdldEljb25PdmVybGF5SW5mbygoSVNlcnZpY2VQb2xpY3kpIHBhcmVudC5nZXREYXRhKCksCi0JCQkJCQkJdHJ1ZSkpOwotCQkJaWYgKHVwZGF0ZURldGFpbHNPbmx5KQotCQkJCXBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnRJdGVtKCk7Ci0JCQllbHNlIHsKLQkJCQlwYXJlbnQgPSAocGFyZW50LmdldFBhcmVudEl0ZW0oKSA9PSBudWxsICYmICgoSVNlcnZpY2VQb2xpY3kpIHBhcmVudAotCQkJCQkJLmdldERhdGEoKSkuZ2V0UGFyZW50UG9saWN5KCkgIT0gbnVsbCkgPyBnZXRQYXJlbnRJbk1hc3RlclRyZWUoKChJU2VydmljZVBvbGljeSkgcGFyZW50Ci0JCQkJCQkuZ2V0RGF0YSgpKS5nZXRQYXJlbnRQb2xpY3koKS5nZXRJZCgpKQotCQkJCQkJOiBwYXJlbnQuZ2V0UGFyZW50SXRlbSgpOwotCQkJfQotCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGVycm9yIHN0YXR1cyBvYmplY3QgZm9yIHRoZSBzcC4gVGhlIGVycm9yIG1lc3NhZ2UgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgCi0JICogYW4gdW5zYXRpc2ZpZWQgcmVsYXRpb25zaGlwCi0JICogQHBhcmFtIHNwCi0JICogQHBhcmFtIG9wZXJhdGlvbkxvbmdOYW1lCi0JICogQHBhcmFtIG9wZXJhdGlvblNlbGVjdGlvbkxvbmdOYW1lCi0JICogQHBhcmFtIGRlcGVuZGFudFBvbGljeVNob3J0TmFtZQotCSAqIEBwYXJhbSByZWxhdGVkT3BlcmF0aW9uCi0JICogQHBhcmFtIHJlbGF0ZWRPcGVyYXRpb25BY2NlcHRhYmxlVmFsdWVzCi0JICogQHJldHVybiBhbiBFcnJvciBzdGF0dXMKLQkgKi8KLQlwcml2YXRlIElTdGF0dXMgY3JlYXRlVW5zYXRpc2ZpZWRSZWxhdGlvbnNoaXBFcnJvcihJU2VydmljZVBvbGljeSBzcCwKLQkJCVN0cmluZyBvcGVyYXRpb25Mb25nTmFtZSwgU3RyaW5nIG9wZXJhdGlvblNlbGVjdGlvbkxvbmdOYW1lLAotCQkJU3RyaW5nIGRlcGVuZGFudFBvbGljeVNob3J0TmFtZSwKLQkJCUlQb2xpY3lPcGVyYXRpb24gcmVsYXRlZE9wZXJhdGlvbiwKLQkJCUxpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiByZWxhdGVkT3BlcmF0aW9uQWNjZXB0YWJsZVZhbHVlcykgewotCQlTdHJpbmcgZGVwZW5kYW50T3BlcmF0aW9uU2hvcnROYW1lOwotCQlTdHJpbmcgZGVwZW5kYW50T3BlcmF0aW9uU2VsZWN0aW9uU2hvcnROYW1lTGlzdDsKLQkJZGVwZW5kYW50T3BlcmF0aW9uU2hvcnROYW1lID0gcmVsYXRlZE9wZXJhdGlvbgotCQkJCS5nZXREZXNjcmlwdG9yKCkuZ2V0U2hvcnROYW1lKCk7Ci0JCWRlcGVuZGFudE9wZXJhdGlvblNlbGVjdGlvblNob3J0TmFtZUxpc3QgPSBuZXcgU3RyaW5nKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcmVsYXRlZE9wZXJhdGlvbkFjY2VwdGFibGVWYWx1ZXMuc2l6ZSgpOyBpKyspIHsKLQkJCUlTdGF0ZUVudW1lcmF0aW9uSXRlbSBpdGVtID0gcmVsYXRlZE9wZXJhdGlvbkFjY2VwdGFibGVWYWx1ZXMuZ2V0KGkpOwotCQkJaWYgKGkgIT0gMCkKLQkJCQlkZXBlbmRhbnRPcGVyYXRpb25TZWxlY3Rpb25TaG9ydE5hbWVMaXN0ICs9ICIgfCAiOyAvLyROT04tTkxTLTEkCi0JCQlkZXBlbmRhbnRPcGVyYXRpb25TZWxlY3Rpb25TaG9ydE5hbWVMaXN0ICs9IGl0ZW0uZ2V0U2hvcnROYW1lKCk7Ci0KLQkJfQotCQlTdHJpbmdbXSBhcmdzID0geyBzcC5nZXREZXNjcmlwdG9yKCkuZ2V0TG9uZ05hbWUoKSwgb3BlcmF0aW9uTG9uZ05hbWUsCi0JCQkJb3BlcmF0aW9uU2VsZWN0aW9uTG9uZ05hbWUsIGRlcGVuZGFudFBvbGljeVNob3J0TmFtZSwKLQkJCQlkZXBlbmRhbnRPcGVyYXRpb25TaG9ydE5hbWUsCi0JCQkJZGVwZW5kYW50T3BlcmF0aW9uU2VsZWN0aW9uU2hvcnROYW1lTGlzdH07Ci0JCUlTdGF0dXMgZXJyb3IgPSBuZXcgU3RhdHVzKFN0YXR1cy5FUlJPUiwKLQkJCQlTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuUExVR0lOX0lELCBOTFMuYmluZCgKLQkJCQkJCVdzdFNQVUlQbHVnaW5NZXNzYWdlcy5TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DWV9FUlJPUiwKLQkJCQkJCWFyZ3MpKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwYXJlbnRJRCB0aGUgaWQgdG8gZmluZCBpbiB0aGUgbWFzdGVyIHRyZWUKLQkgKiBAcmV0dXJuIGEgVHJlZUl0ZW0gd2l0aCB0aGUgaWQgaW4gdGhlIG1hc3RlciB0cmVlCi0JICovCi0JcHJpdmF0ZSBUcmVlSXRlbSBnZXRQYXJlbnRJbk1hc3RlclRyZWUoU3RyaW5nIHBhcmVudElEKSB7Ci0JCVRyZWVJdGVtIHBhcmVudCA9IG51bGw7Ci0JCVRyZWVJdGVtW10gcm9vdE5vZGVzID0gbWFzdGVyUG9saWN5VHJlZS5nZXRJdGVtcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJvb3ROb2Rlcy5sZW5ndGg7IGkrKykgewotCQkJcGFyZW50ID0gZmluZENoaWxkTm9kZShyb290Tm9kZXNbaV0sIHBhcmVudElEKTsKLQkJCWlmIChwYXJlbnQgIT0gbnVsbCkKLQkJCQlicmVhazsKLQkJfQotCQlyZXR1cm4gcGFyZW50OwotCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIFRyZWVJdGVtIGFzc29jaWF0ZWQgd2l0aCBhIGNoaWxkIHBvbGljeSBvZiB0aQotCSAqIEBwYXJhbSB0aQotCSAqIEBwYXJhbSBpZCB0aGUgcG9saWN5IGlkIG9mIGEgY2hpbGQgbm9kZSBvZiB0aQotCSAqIEByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBjaGlsZCBwb2xpY3kgbWF0Y2hpbmcgaWQKLQkgKi8KLQlwcml2YXRlIFRyZWVJdGVtIGZpbmRDaGlsZE5vZGUoVHJlZUl0ZW0gdGksIFN0cmluZyBpZCkgewotCQlUcmVlSXRlbSB0b1JldHVybiA9IG51bGw7Ci0JCWlmICgoKElTZXJ2aWNlUG9saWN5KSB0aS5nZXREYXRhKCkpLmdldElkKCkuZXF1YWxzKGlkKSkgewotCQkJdG9SZXR1cm4gPSB0aTsKLQkJfSBlbHNlIHsKLQkJCVRyZWVJdGVtW10gY2hpbGRJdGVtcyA9IHRpLmdldEl0ZW1zKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkSXRlbXMubGVuZ3RoOyBpKyspIHsKLQkJCQl0b1JldHVybiA9IGZpbmRDaGlsZE5vZGUoY2hpbGRJdGVtc1tpXSwgaWQpOwotCQkJfQotCi0JCX0KLQkJcmV0dXJuIHRvUmV0dXJuOwotCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyBkZXBlbmRhbmN5IGluZm9ybWF0aW9uIGFib3V0IHNwLCB0aGF0IGlzIGluZm9ybWF0aW9uIGFib3V0Ci0JICogaXQncyByZWxhdGlvbnNoaXBzIChpZiBhbnkpIHdpdGggb3RoZXIgc2VydmljZSBwb2xpY2llcwotCSAqIEBwYXJhbSBzcCB0aGUgc2VydmljZSBwb2xpY3kgdG8gZ2V0IGRlcGVuZGVuY3kgaW5mbyBhYm91dAotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXREZXBlbmRhbmNpZXNUZXh0KElTZXJ2aWNlUG9saWN5IHNwKSB7Ci0JCS8vIHRoZSByZWxhdGlvbnNoaXBzIGRlZmluZWQgZm9yIHRoZSBwb2xpY3kKLQkJTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiByZWxhdGlvblNoaXBMaXN0ID0gc3AuZ2V0UmVsYXRpb25zaGlwcygpOwotCQlpZiAocmVsYXRpb25TaGlwTGlzdCA9PSBudWxsIHx8IHJlbGF0aW9uU2hpcExpc3Quc2l6ZSgpID09IDApCi0JCQlyZXR1cm4gV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLlNFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNJRVNfTk9ORTsKLQkJU3RyaW5nIHRvUmV0dXJuID0gbmV3IFN0cmluZygpOwotCi0JCVN0cmluZyBvcGVyYXRpb25Mb25nTmFtZTsKLQkJU3RyaW5nIG9wZXJhdGlvblNlbGVjdGlvbkxvbmdOYW1lOwotCQlTdHJpbmcgZGVwZW5kYW50UG9saWN5U2hvcnROYW1lOwotCQlTdHJpbmcgZGVwZW5kYW50T3BlcmF0aW9uU2hvcnROYW1lOwotCQlTdHJpbmcgZGVwZW5kYW50T3BlcmF0aW9uU2VsZWN0aW9uU2hvcnROYW1lTGlzdDsKLQotCQlmb3IgKElQb2xpY3lSZWxhdGlvbnNoaXAgcmVsYXRpb25TaGlwSXRlbSA6IHJlbGF0aW9uU2hpcExpc3QpIHsKLQkJCUxpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9saWN5T3BlcmF0aW9uc0xpc3QgPSBwbGF0Zm9ybVVJCi0JCQkJCS5nZXRPcGVyYXRpb25zKHJlbGF0aW9uU2hpcEl0ZW0uZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCkKLQkJCQkJCQkuZ2V0UG9saWN5KCksIHByb2plY3QgPT0gbnVsbCk7Ci0JCQlvcGVyYXRpb25Mb25nTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlmb3IgKElQb2xpY3lPcGVyYXRpb24gcG9saWN5T3BlcmF0aW9uSXRlbSA6IHBvbGljeU9wZXJhdGlvbnNMaXN0KSB7Ci0JCQkJaWYgKHBvbGljeU9wZXJhdGlvbkl0ZW0uaXNVc2VEZWZhdWx0RGF0YSgpKSB7Ci0JCQkJCW9wZXJhdGlvbkxvbmdOYW1lID0gcG9saWN5T3BlcmF0aW9uSXRlbS5nZXREZXNjcmlwdG9yKCkKLQkJCQkJCQkuZ2V0TG9uZ05hbWUoKTsKLQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkvLyBwb2xpY2llcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbGF0aW9uc2hpcCBpdGVtCi0JCQlMaXN0PElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+IHJlbGF0ZWRQb2xpY2llcyA9IHJlbGF0aW9uU2hpcEl0ZW0KLQkJCQkJLmdldFJlbGF0ZWRQb2xpY2llcygpOwotCQkJTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IHNwU3RhdGVFbnVtZXJhdGlvbkxpc3QgPSByZWxhdGlvblNoaXBJdGVtCi0JCQkJCS5nZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKS5nZXRFbnVtZXJhdGlvbkxpc3QoKTsKLQkJCWZvciAoSVN0YXRlRW51bWVyYXRpb25JdGVtIHN0YXRlRW51bWVyYXRpb25JdGVtIDogc3BTdGF0ZUVudW1lcmF0aW9uTGlzdCkgewotCQkJCW9wZXJhdGlvblNlbGVjdGlvbkxvbmdOYW1lID0gc3RhdGVFbnVtZXJhdGlvbkl0ZW0uZ2V0TG9uZ05hbWUoKTsKLQkJCQlmb3IgKElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgcmVsYXRlZFBvbGljeUVudW1lcmF0aW9uSXRlbSA6IHJlbGF0ZWRQb2xpY2llcykgewotCQkJCQlkZXBlbmRhbnRQb2xpY3lTaG9ydE5hbWUgPSByZWxhdGVkUG9saWN5RW51bWVyYXRpb25JdGVtCi0JCQkJCQkJLmdldFBvbGljeSgpLmdldERlc2NyaXB0b3IoKS5nZXRTaG9ydE5hbWUoKTsKLQkJCQkJTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IHJlbGF0ZWRTUFN0YXRlRW51bWVyYXRpb25MaXN0ID0gcmVsYXRlZFBvbGljeUVudW1lcmF0aW9uSXRlbQotCQkJCQkJCS5nZXRFbnVtZXJhdGlvbkxpc3QoKTsKLQkJCQkJTGlzdDxJUG9saWN5T3BlcmF0aW9uPiByZWxhdGVkUG9saWN5T3BlcmF0aW9uc0xpc3QgPSBwbGF0Zm9ybVVJCi0JCQkJCQkJLmdldE9wZXJhdGlvbnMocmVsYXRlZFBvbGljeUVudW1lcmF0aW9uSXRlbQotCQkJCQkJCQkJLmdldFBvbGljeSgpLCAocHJvamVjdCA9PSBudWxsKSk7Ci0JCQkJCWRlcGVuZGFudE9wZXJhdGlvblNob3J0TmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJCWZvciAoSVBvbGljeU9wZXJhdGlvbiByZWxhdGVkUG9saWN5T3BlcmF0aW9uSXRlbSA6IHJlbGF0ZWRQb2xpY3lPcGVyYXRpb25zTGlzdCkgewotCQkJCQkJaWYgKHJlbGF0ZWRQb2xpY3lPcGVyYXRpb25JdGVtLmlzVXNlRGVmYXVsdERhdGEoKSkKLQkJCQkJCQlkZXBlbmRhbnRPcGVyYXRpb25TaG9ydE5hbWUgPSByZWxhdGVkUG9saWN5T3BlcmF0aW9uSXRlbQotCQkJCQkJCQkJLmdldERlc2NyaXB0b3IoKS5nZXRTaG9ydE5hbWUoKTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0KLQkJCQkJZGVwZW5kYW50T3BlcmF0aW9uU2VsZWN0aW9uU2hvcnROYW1lTGlzdCA9IG5ldyBTdHJpbmcoKTsKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGVkU1BTdGF0ZUVudW1lcmF0aW9uTGlzdC5zaXplKCk7IGkrKykgewotCQkJCQkJSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0gPSByZWxhdGVkU1BTdGF0ZUVudW1lcmF0aW9uTGlzdAotCQkJCQkJCQkuZ2V0KGkpOwotCQkJCQkJaWYgKGkgIT0gMCkKLQkJCQkJCQlkZXBlbmRhbnRPcGVyYXRpb25TZWxlY3Rpb25TaG9ydE5hbWVMaXN0ICs9ICIgfCAiOyAvLyROT04tTkxTLTEkCi0JCQkJCQlkZXBlbmRhbnRPcGVyYXRpb25TZWxlY3Rpb25TaG9ydE5hbWVMaXN0ICs9IGl0ZW0KLQkJCQkJCQkJLmdldFNob3J0TmFtZSgpOwotCi0JCQkJCX0KLQkJCQkJU3RyaW5nW10gYXJncyA9IHsgb3BlcmF0aW9uTG9uZ05hbWUsCi0JCQkJCQkJb3BlcmF0aW9uU2VsZWN0aW9uTG9uZ05hbWUsCi0JCQkJCQkJZGVwZW5kYW50UG9saWN5U2hvcnROYW1lLAotCQkJCQkJCWRlcGVuZGFudE9wZXJhdGlvblNob3J0TmFtZSwKLQkJCQkJCQlkZXBlbmRhbnRPcGVyYXRpb25TZWxlY3Rpb25TaG9ydE5hbWVMaXN0IH07Ci0JCQkJCXRvUmV0dXJuICs9IE5MUy5iaW5kKAotCQkJCQkJCVdzdFNQVUlQbHVnaW5NZXNzYWdlcy5TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTLAotCQkJCQkJCWFyZ3MpCi0JCQkJCQkJKyAiXHJcbiI7IC8vJE5PTi1OTFMtMSQKLQotCQkJCX0KLQotCQkJfQotCi0JCX0KLQkJcmV0dXJuIHRvUmV0dXJuOwotCX0KLQotCi0JLyoqCi0JICogU2F2ZXMgdG8gdGhlIHByZWZlcmVuY2Ugc3RvcmUgdGhlIHdpZGdldCBkYXRhICh3aWRnZXQgZGF0YSBjb250YWlucyBhbGwgCi0JICogc2VydmljZSBwb2xpY3kgb3BlcmF0aW9ucyB0aGUgY29udHJvbCBhcHBsaWVzIHRvKQotCSAqIEBwYXJhbSBhY3Rpb25Db250cm9sIGEgd2lkZ2V0IHdobydzIGRhdGEgbmVlZHMgdG8gYmUgc2F2ZWQgdG8gdGhlIHByZWZlcmVuY2Ugc3RvcmUKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHZvaWQgdXBkYXRlUG9saWN5KENvbnRyb2wgYWN0aW9uQ29udHJvbCkgewotCi0JCUxpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9saWN5T3BlcmF0aW9uTGlzdCA9ICgoQWN0aW9uQ29udHJvbERhdGEpIGFjdGlvbkNvbnRyb2wuZ2V0RGF0YSgpKS5nZXRQb0xpc3QoKTsKLQkJSVBvbGljeU9wZXJhdGlvbiBwbzAgPSBwb2xpY3lPcGVyYXRpb25MaXN0LmdldCgwKTsKLQkJCi0JCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlcnZpY2VQb2xpY3lMaXN0ID0gKChBY3Rpb25Db250cm9sRGF0YSkgYWN0aW9uQ29udHJvbAotCQkJCS5nZXREYXRhKCkpLmdldFNwTGlzdCgpOwotCQlpZiAoYWN0aW9uQ29udHJvbCBpbnN0YW5jZW9mIEJ1dHRvbgotCQkJCSYmIHBvMC5nZXRPcGVyYXRpb25LaW5kKCkuZXF1YWxzKE9wZXJhdGlvbktpbmQuY29tcGxleCkpCi0JCQl1cGRhdGVDb21wbGV4T3BlcmF0aW9uUHJlZmVyZW5jZShwbzAsIHNlcnZpY2VQb2xpY3lMaXN0KTsKLQkJZWxzZQotCQkJZm9yIChJUG9saWN5T3BlcmF0aW9uIHBvbGljeU9wZXJhdGlvbkl0ZW0gOiBwb2xpY3lPcGVyYXRpb25MaXN0KSB7Ci0KLQkJCQl1cGRhdGVTZWxlY3Rpb25PcGVyYXRpb25QcmVmZXJlbmNlKGFjdGlvbkNvbnRyb2wsIHBvbGljeU9wZXJhdGlvbkl0ZW0pOwotCQkJfQotCi0JfQotCi0JcHVibGljIGJvb2xlYW4gb2tUb0xlYXZlKCkgewotCQlyZXR1cm4gYWxsRXJyb3JzLnNpemUoKSA9PSAwOwotCi0JfQotCi0JLyoqCi0JICogU2F2ZXMgdmFsdWUgb2YgZW51bWVyYXRpb24sIHNlbGVjdGlvbiwgYW5kIGljb25zZWxlY3Rpb24gdHlwZSBvcGVyYXRpb25zCi0JICogdG8gdGhlIHByZWZlcmVuY2Ugc3RvcmUKLQkgKiBAcGFyYW0gYWN0aW9uQ29udHJvbCB0aGUgYWN0aW9uIGNvbnRyb2wgY29udGFpbmluZyB0aGUgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJlZmVyZW5jZQotCSAqIEBwYXJhbSBwbyAKLQkgKiBAcGFyYW0gc3AKLQkgKi8KLQlwcml2YXRlIHZvaWQgdXBkYXRlU2VsZWN0aW9uT3BlcmF0aW9uUHJlZmVyZW5jZShDb250cm9sIGFjdGlvbkNvbnRyb2wsIElQb2xpY3lPcGVyYXRpb24gcG8pIHsKLQkJU3RyaW5nIHNlbGVjdGVkVmFsdWU7Ci0JCQotCQkvLyBXZSBhcmUgdXBkYXRpbmcgdGhlIHN0YXRlIG9mIGEgc2VydmljZSBwb2xpY3kuICBXZSBkb24ndCB3YW50IHRoaXMKLQkJLy8gdXBkYXRlIHRvIHRyaWdnZXIgb3VyIHN0YXRlIGNoYW5nZSBsaXN0ZW5lci4KLQkJZW5hYmxlU3RhdGVMaXN0ZW5lciggZmFsc2UgKTsKLQkJCi0JCWlmIChhY3Rpb25Db250cm9sIGluc3RhbmNlb2YgQ29tYm8pIHsKLQkJCXNlbGVjdGVkVmFsdWUgPSAoKENvbWJvKSBhY3Rpb25Db250cm9sKS5nZXRUZXh0KCk7Ci0JCQlMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZW51bUl0ZW1MaXN0ID0gU2VydmljZVBvbGljeVBsYXRmb3JtCi0JCQkJCS5nZXRJbnN0YW5jZSgpLmdldFN0YXRlRW51bWVyYXRpb24ocG8uZ2V0RW51bWVyYXRpb25JZCgpKTsKLQkJCWZvciAoSVN0YXRlRW51bWVyYXRpb25JdGVtIGVudW1JdGVtIDogZW51bUl0ZW1MaXN0KSB7Ci0JCQkJaWYgKGVudW1JdGVtLmdldExvbmdOYW1lKCkuZXF1YWxzKHNlbGVjdGVkVmFsdWUpKSB7Ci0JCQkJCXBvLnNldFN0YXRlSXRlbShwcm9qZWN0LCBlbnVtSXRlbS5nZXRJZCgpKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCQlpZiAoKChCdXR0b24pIGFjdGlvbkNvbnRyb2wpLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkJcG8uc2V0U3RhdGVJdGVtKHByb2plY3QsICJvcmcuZWNsaXBzZS53c3QudHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0JCQl9IGVsc2UKLQkJCQlwby5zZXRTdGF0ZUl0ZW0ocHJvamVjdCwgIm9yZy5lY2xpcHNlLndzdC5mYWxzZSIpOyAvLyROT04tTkxTLTEkCi0KLQkJfQotCi0JCS8vIFJlZW5hYmxlIG91ciBzdGF0ZSBjaGFuZ2UgbGlzdGVuZXIuCi0JCWVuYWJsZVN0YXRlTGlzdGVuZXIoIHRydWUgKTsKLQl9Ci0KLQkKLQlwcml2YXRlIHZvaWQgYWRkU3RhdGVMaXN0ZW5lciggSVNlcnZpY2VQb2xpY3kgcG9saWN5ICkKLQl7Ci0JICBpZiggc3RhdGVDaGFuZ2VQb2xpY3lTZXQuY29udGFpbnMoIHBvbGljeSApICkgcmV0dXJuOwotCSAgCi0JICBpZiggcHJvamVjdCA9PSBudWxsICkKLQkgIHsKLQkgICAgcG9saWN5LmdldFBvbGljeVN0YXRlKCkuYWRkUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciggc3RhdGVDaGFuZ2VMaXN0ZW5lciwgZmFsc2UgKTsKLQkgIH0KLQkgIGVsc2UKLQkgIHsKLQkgICAgcG9saWN5LmdldFBvbGljeVN0YXRlKCBwcm9qZWN0ICkuYWRkUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciggc3RhdGVDaGFuZ2VMaXN0ZW5lciwgZmFsc2UgKTsKLQkgIH0KLQkgIAotCSAgc3RhdGVDaGFuZ2VQb2xpY3lTZXQuYWRkKCBwb2xpY3kgKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHJlbW92ZVN0YXRlTGlzdGVuZXIoIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0JewotICAgIGlmKCBzdGF0ZUNoYW5nZVBvbGljeVNldC5jb250YWlucyggcG9saWN5ICkgKSByZXR1cm47Ci0gICAgCi0gICAgaWYoIHByb2plY3QgPT0gbnVsbCApCi0gICAgewotCSAgICBwb2xpY3kuZ2V0UG9saWN5U3RhdGUoKS5yZW1vdmVQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKCBzdGF0ZUNoYW5nZUxpc3RlbmVyICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwb2xpY3kuZ2V0UG9saWN5U3RhdGUoIHByb2plY3QgKS5yZW1vdmVQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKCBzdGF0ZUNoYW5nZUxpc3RlbmVyICk7ICAgICAgCi0gICAgfQotICAgIAotCSAgc3RhdGVDaGFuZ2VQb2xpY3lTZXQucmVtb3ZlKCBwb2xpY3kgKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGVuYWJsZVN0YXRlTGlzdGVuZXIoIGJvb2xlYW4gZW5hYmxlZCApCi0JewotCSAgc3RhdGVDaGFuZ2VFbmFibGVkID0gZW5hYmxlZDsKLQl9Ci0JCi0JLyoqCi0JICogTGF1bmNoZXMgdGhlIGNvbXBsZXggb3BlcmF0aW9uIGZvciB0aGUgbGlzdCBvZiBzZXJ2aWNlIHBvbGljaWVzCi0JICogQHBhcmFtIHBvIGEgImNvbXBsZXgiIHBvbGljeSBvcGVyYXRpb24gCi0JICogQHBhcmFtIHNwcyBhIGxpc3Qgb2Ygc2VydmljZSBwb2xpY2llcyB0byBhcHBseSB0aGUgb3BlcmF0aW9uIHRvCi0JICovCi0JcHJpdmF0ZSB2b2lkICB1cGRhdGVDb21wbGV4T3BlcmF0aW9uUHJlZmVyZW5jZShJUG9saWN5T3BlcmF0aW9uIHBvLAotCQkJTGlzdDxJU2VydmljZVBvbGljeT4gc3BzKSB7Ci0JCS8vY29tcGxleCBvcGVyYXRpb25zIGNhbiByZXN1bHQgaW4gYWRkZWQgYW5kIGRlbGV0ZWQgbm9kZXMsIGNhY2hlIHRoZW0gdW50aWwgb3BlcmF0aW9uIGNvbXBsZXRlZAotCQliQ29tcGxleE9wQ29tcGxldGVkID0gZmFsc2U7Ci0JCWxpc3RDaGlsZENoYW5nZUV2ZW50cyA9IG5ldyBWZWN0b3I8Q2hpbGRDaGFuZ2VFdmVudD4oKTsKLQkJdHJ5IHsKLQkJCXBvLmxhdW5jaE9wZXJhdGlvbihzcHMpOwotCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLQkJCS8vanVzdCB3YW50IHRvIG1ha2Ugc3VyZSBmaW5hbGx5IGNsYXVzZSBpcyBleGVjdXRlZCBzbyBjYW4gdXBkYXRlIFVJIG9mIGFkZGl0aW9ucy9kZWxldGlvbnMKLQkJfSBmaW5hbGx5IHsKLQkJCWJDb21wbGV4T3BDb21wbGV0ZWQgPXRydWU7Ci0JCQlIYXNodGFibGU8U3RyaW5nLCBJU2VydmljZVBvbGljeT4gdG9wTGV2ZWxBZGRzID0gZ2V0SGlnaGVzdExldmVsQ2hpbGRyZW4obGlzdENoaWxkQ2hhbmdlRXZlbnRzLCB0cnVlKTsKLQkJCWZvciAoQ2hpbGRDaGFuZ2VFdmVudCBjaGlsZENoYW5nZUV2ZW50SXRlbSA6IGxpc3RDaGlsZENoYW5nZUV2ZW50cykgewotCQkJCXByb2Nlc3NDaGlsZENoYW5nZUV2ZW50KGNoaWxkQ2hhbmdlRXZlbnRJdGVtLCB0b3BMZXZlbEFkZHMpOwotCQkJfQotCQkJCi0JCX0KLQl9Ci0JcHJpdmF0ZSBIYXNodGFibGU8U3RyaW5nLCBJU2VydmljZVBvbGljeT4gZ2V0SGlnaGVzdExldmVsQ2hpbGRyZW4gKExpc3Q8Q2hpbGRDaGFuZ2VFdmVudD4gaHRDaGlsZENoYW5nZUV2ZW50cywgYm9vbGVhbiBmb3JBZGRPbmx5KSB7Ci0JCUhhc2h0YWJsZTxTdHJpbmcsIElTZXJ2aWNlUG9saWN5PiB0b1JldHVybiA9IG5ldyBIYXNodGFibGU8U3RyaW5nLCBJU2VydmljZVBvbGljeT4oKTsKLQkJSXRlcmF0b3I8Q2hpbGRDaGFuZ2VFdmVudD4gZWxlbWVudHMgPSBodENoaWxkQ2hhbmdlRXZlbnRzLml0ZXJhdG9yKCk7Ci0JCUNoaWxkQ2hhbmdlRXZlbnQgbmV4dDsKLQkJSGFzaHRhYmxlPFN0cmluZywgSVNlcnZpY2VQb2xpY3k+IGFsbFNwcyA9IG5ldyBIYXNodGFibGU8U3RyaW5nLCBJU2VydmljZVBvbGljeT4oKTsKLQkJd2hpbGUgKGVsZW1lbnRzLmhhc05leHQoKSkgewotCQkJbmV4dCA9IGVsZW1lbnRzLm5leHQoKTsKLQkJCUxpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoYW5nZWRDaGlsZHJlbkxpc3QgPSBuZXh0LmdldENoYW5nZWRDaGlsZHJlbigpOwotCQkJTGlzdDxCb29sZWFuPiBhZGRlZExpc3QgPSBuZXh0LmdldEFkZGVkKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoYW5nZWRDaGlsZHJlbkxpc3Quc2l6ZSgpOyBpKyspIHsKLQkJCQlpZiAoZm9yQWRkT25seSAmJiBhZGRlZExpc3QuZ2V0KGkpLmJvb2xlYW5WYWx1ZSgpID09IHRydWUpCi0JCQkJCWFsbFNwcy5wdXQoY2hhbmdlZENoaWxkcmVuTGlzdC5nZXQoaSkuZ2V0SWQoKSwgY2hhbmdlZENoaWxkcmVuTGlzdC5nZXQoaSkpOwotCQkJfQotCQl9Ci0JCUVudW1lcmF0aW9uPElTZXJ2aWNlUG9saWN5PiBzZXJ2aWNlUG9saWN5RWxlbWVudHMgPSBhbGxTcHMuZWxlbWVudHMoKTsKLQkJSVNlcnZpY2VQb2xpY3kgbmV4dFNlcnZpY2VQb2xpY3lFbGVtZW50OwotCQl3aGlsZSAoc2VydmljZVBvbGljeUVsZW1lbnRzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQluZXh0U2VydmljZVBvbGljeUVsZW1lbnQgPSBzZXJ2aWNlUG9saWN5RWxlbWVudHMubmV4dEVsZW1lbnQoKTsKLQkJCWlmIChuZXh0U2VydmljZVBvbGljeUVsZW1lbnQuZ2V0UGFyZW50UG9saWN5KCkgPT0gbnVsbCB8fCAhYWxsU3BzLmNvbnRhaW5zS2V5KG5leHRTZXJ2aWNlUG9saWN5RWxlbWVudC5nZXRQYXJlbnRQb2xpY3koKS5nZXRJZCgpKSkgewotCQkJCXRvUmV0dXJuLnB1dChuZXh0U2VydmljZVBvbGljeUVsZW1lbnQuZ2V0SWQoKSwgbmV4dFNlcnZpY2VQb2xpY3lFbGVtZW50KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdG9SZXR1cm47Ci0JfQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQkJaWNvbk1hbmFnZXIuZGlzcG9zZSgpOwotCQkKLQkJZm9yKCBJU2VydmljZVBvbGljeSBwb2xpY3kgOiBzdGF0ZUNoYW5nZVBvbGljeVNldCApCi0JCXsKLQkJICBJUG9saWN5U3RhdGUgc3RhdGUgPSBwcm9qZWN0ID09IG51bGwgPyBwb2xpY3kuZ2V0UG9saWN5U3RhdGUoKSA6IHBvbGljeS5nZXRQb2xpY3lTdGF0ZSggcHJvamVjdCApOwotCQkgIAotCQkgIHN0YXRlLnJlbW92ZVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIoIHN0YXRlQ2hhbmdlTGlzdGVuZXIgKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBVSSB3aWRnZXRzIGZvciBvcGVyYXRpb25zIGFwcGxpY2FibGUgdG8gdGhlIGxpc3Qgb2Ygc2VydmljZSBwb2xpY2llcyBzcAotCSAqIEBwYXJhbSBzcExpc3QgdGhlIGxpc3Qgb2Ygc2VydmljZSBwb2xpY2llcyB0byBjcmVhdGUgVUkgd2lkZ2V0cywgdGhlIFVJIHdpZGdldHMKLQkgKiB3aWxsIGJlIHVzZWQgdG8gZGVmaW5lIG9wZXJhdGlvbnMvcHJlZmVyZW5jZXMgdG8gYXBwbHkgdG8gdGhlIHNlcnZpY2UgcG9saWNpZXMgaW4gdGhlIGxpc3QKLQkgKi8KLQlwcml2YXRlIHZvaWQgYWRkQWN0aW9uQnV0dG9ucyhMaXN0PElTZXJ2aWNlUG9saWN5PiBzcExpc3QpIHsKLQkgIAotCQkvLyByZW1vdmUgZXhpc3RpbmcgYWN0aW9uIGNvbnRyb2xzCi0JCUNvbnRyb2xbXSB0b1JlbW92ZSA9IG9wZXJhdGlvbnNDb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0b1JlbW92ZS5sZW5ndGg7IGkrKykgewotCQkJdG9SZW1vdmVbaV0uZGlzcG9zZSgpOwotCQl9Ci0JCUxpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gcG9saWN5T3BlcmF0aW9uTGlzdExpc3QgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnNMaXN0KHNwTGlzdCwgKHByb2plY3QgPT0gbnVsbCkpOwotCi0JCWZvciAoTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb2xpY3lPcGVyYXRpb25MaXN0IDogcG9saWN5T3BlcmF0aW9uTGlzdExpc3QpIHsKLQkJCWlmIChwb2xpY3lPcGVyYXRpb25MaXN0LnNpemUoKSA+IDApIHsKLQkJCWlmIChwb2xpY3lPcGVyYXRpb25MaXN0LmdldCgwKS5nZXRPcGVyYXRpb25LaW5kKCkgPT0gSVBvbGljeU9wZXJhdGlvbi5PcGVyYXRpb25LaW5kLmNvbXBsZXgpIHsKLQkJCQlhZGRDb21wbGV4T3BlcmF0aW9uVUkocG9saWN5T3BlcmF0aW9uTGlzdCwgc3BMaXN0KTsKLQkJCX0gZWxzZQotCQkJCWFkZFNlbGVjdGlvbk9wZXJhdGlvblVJKHBvbGljeU9wZXJhdGlvbkxpc3QsIHNwTGlzdCk7Ci0JCQl9Ci0KLQkJfQotCQkvLyBqdXN0IHJlbW92ZWQgYW5kIGFkZGVkIHNvbWUgY29udHJvbHMgc28gZm9yY2UgY29tcG9zaXRlCi0JCS8vIHRvIHJlLWxheW91dCBpdCdzIGNvbnRyb2xzCi0JCW9wZXJhdGlvbnNTY3JvbGxlZENvbXBvc2l0ZS5zZXRNaW5TaXplKG9wZXJhdGlvbnNDb21wb3NpdGUuY29tcHV0ZVNpemUoCi0JCQkJU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKSk7Ci0JCW9wZXJhdGlvbnNDb21wb3NpdGUubGF5b3V0KCk7Ci0JfQotCS8qKgotCSAqIENyZWF0ZXMgVUkgd2lkZ2V0cyBmb3IgcG9saWN5IG9wZXJhdGlvbnMgb2YgZW51bWVyYXRpb24sIHNlbGVjdGlvbiwgYW5kIAotCSAqIGljb25zZWxlY3Rpb24gdHlwZXMKLQkgKiBAcGFyYW0gcG8gdGhlIHBvbGljeSBvcGVyYXRpb24gdG8gY3JlYXRlIGEgVUkgd2lkZ2V0IGZvcgotCSAqIEBwYXJhbSBzcCB0aGUgc2VydmljZSBwb2xpY2llcyB0aGlzIG9wZXJhdGlvbiB3aWxsIGFwcGx5IHRvCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZFNlbGVjdGlvbk9wZXJhdGlvblVJKExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9zLCBMaXN0PElTZXJ2aWNlUG9saWN5PiBzcHMpIHsKLQkJLy91c2UgdGhlIGZpcnN0IG9wZXJhdGlvbiBpbnN0YW5jZSBpbiB0aGUgbGlzdCBmb3IgZGF0YQotCQlJUG9saWN5T3BlcmF0aW9uIHBvMCA9IHBvcy5nZXQoMCk7Ci0JCS8vSVNlcnZpY2VQb2xpY3kgc3AwID0gcG9zLmdldCgwKS5nZXRTZXJ2aWNlUG9saWN5KCk7Ci0JCUlEZXNjcmlwdG9yIGQgPSBwbzAuZ2V0RGVzY3JpcHRvcigpOwotCQlDb250cm9sIHNlbGVjdGlvbkNvbnRyb2w7Ci0JCWlmIChwbzAuZ2V0T3BlcmF0aW9uS2luZCgpID09IElQb2xpY3lPcGVyYXRpb24uT3BlcmF0aW9uS2luZC5lbnVtZXJhdGlvbikgewotCQkJTGFiZWwgbCA9IG5ldyBMYWJlbChvcGVyYXRpb25zQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0JCQlsLnNldFRleHQoZC5nZXRMb25nTmFtZSgpICsgIjoiKTsgLy8kTk9OLU5MUy0xJAotCQkJQ29tYm8gY2IgPSBuZXcgQ29tYm8ob3BlcmF0aW9uc0NvbXBvc2l0ZSwgU1dULkRST1BfRE9XTgotCQkJCQl8IFNXVC5SRUFEX09OTFkpOwotCQkJc2VsZWN0aW9uQ29udHJvbCA9IGNiOwotCQkJY2IuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCQlMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZW51bUl0ZW1MaXN0ID0gU2VydmljZVBvbGljeVBsYXRmb3JtCi0JCQkJCS5nZXRJbnN0YW5jZSgpLmdldFN0YXRlRW51bWVyYXRpb24ocG8wLmdldEVudW1lcmF0aW9uSWQoKSk7Ci0JCQlmb3IgKElTdGF0ZUVudW1lcmF0aW9uSXRlbSBlbnVtSXRlbSA6IGVudW1JdGVtTGlzdCkgewotCQkJCWNiLmFkZChlbnVtSXRlbS5nZXRMb25nTmFtZSgpKTsKLQkJCX0KLQkJCWwuc2V0RW5hYmxlZChwbzAuaXNFbmFibGVkKHNwcykpOwotCQkJY2Iuc2V0RW5hYmxlZChwbzAuaXNFbmFibGVkKHNwcykpOwotCQkJaWYgKGNiLmlzRW5hYmxlZCgpKQotCQkJCWNiLnNldFRleHQoZ2V0RW51bWVyYXRpb25PcGVyYXRpb25DdXJyZW50U2VsZWN0aW9uKHBvMCkpOwotCQl9IGVsc2UgewotCQkJLy8gYSBzZWxlY3Rpb24gb3IgaWNvbgotCQkJQnV0dG9uIGNoZWNrQm94ID0gbmV3IEJ1dHRvbihvcGVyYXRpb25zQ29tcG9zaXRlLCBTV1QuQ0hFQ0spOwotCQkJc2VsZWN0aW9uQ29udHJvbCA9IGNoZWNrQm94OwotCQkJY2hlY2tCb3guYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCQlHcmlkRGF0YSBjaGVja0JveEdEID0gbmV3IEdyaWREYXRhKCk7Ci0JCQljaGVja0JveEdELmhvcml6b250YWxTcGFuID0gMjsKLQkJCWNoZWNrQm94LnNldExheW91dERhdGEoY2hlY2tCb3hHRCk7Ci0JCQljaGVja0JveC5zZXRUZXh0KGQuZ2V0TG9uZ05hbWUoKSk7Ci0JCQljaGVja0JveC5zZXRFbmFibGVkKHBvMC5pc0VuYWJsZWQoc3BzKSk7Ci0JCQlpZiAoY2hlY2tCb3guaXNFbmFibGVkKCkpCi0JCQkJY2hlY2tCb3gKLQkJCQkJCS5zZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uT3BlcmF0aW9uQ3VycmVudFNlbGVjdGlvbihwbzApKTsKLQotCQl9Ci0KLQkJc2VsZWN0aW9uQ29udHJvbC5zZXREYXRhKG5ldyBBY3Rpb25Db250cm9sRGF0YShzcHMsIHBvcykpOwotCi0JfQotCS8qKgotCSAqIEBwYXJhbSBzcCBhIHNlcnZpY2UgcG9saWN5IHdpdGggYSBzZWxlY3Rpb24gb3IgaWNvbnNlbGVjdGlvbiBvcGVyYXRpb24gZGVmaW5lZAotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBzZWxlY3RlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBnZXRTZWxlY3Rpb25PcGVyYXRpb25DdXJyZW50U2VsZWN0aW9uKElQb2xpY3lPcGVyYXRpb24gcG8pIHsKLQkJcmV0dXJuIHBvLmdldFN0YXRlSXRlbShwcm9qZWN0KS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC50cnVlIikgPyB0cnVlIDogZmFsc2U7IC8vJE5PTi1OTFMtMSQKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzcCBhIHNlcnZpY2UgcG9saWN5IHdpdGggYW4gZW51bWVyYXRpb24gb3BlcmF0aW9uIGRlZmluZWQKLQkgKiBAcmV0dXJuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW51bWVyYXRpb24gaXRlbQotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldEVudW1lcmF0aW9uT3BlcmF0aW9uQ3VycmVudFNlbGVjdGlvbihJUG9saWN5T3BlcmF0aW9uIHBvKSB7Ci0JCVN0cmluZyBjdXJyZW50U2VsZWN0aW9uID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1JdGVtTGlzdCA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybQotCQkuZ2V0SW5zdGFuY2UoKS5nZXRTdGF0ZUVudW1lcmF0aW9uKHBvLmdldEVudW1lcmF0aW9uSWQoKSk7Ci0JCWZvciAoSVN0YXRlRW51bWVyYXRpb25JdGVtIGVudW1JdGVtIDogZW51bUl0ZW1MaXN0KSB7Ci0JCQlpZiAoZW51bUl0ZW0uZ2V0SWQoKS5lcXVhbHMocG8uZ2V0U3RhdGVJdGVtKHByb2plY3QpKSkgewotCQkJCWN1cnJlbnRTZWxlY3Rpb24gPSBlbnVtSXRlbS5nZXRMb25nTmFtZSgpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiBjdXJyZW50U2VsZWN0aW9uOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgVUkgd2lkZ2V0cyBmb3IgcG9saWN5IG9wZXJhdGlvbnMgb2YgY29tcGxleCB0eXBlCi0JICogQHBhcmFtIHBvIHRoZSBwb2xpY3kgb3BlcmF0aW9uIHRvIGNyZWF0ZSBhIFVJIHdpZGdldCBmb3IKLQkgKiBAcGFyYW0gc3BzIHRoZSBzZXJ2aWNlIHBvbGljaWVzIHRoaXMgb3BlcmF0aW9uIHdpbGwgYXBwbHkgdG8KLQkgKi8KLQlwcml2YXRlIHZvaWQgYWRkQ29tcGxleE9wZXJhdGlvblVJKExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9zLAotCQkJTGlzdDxJU2VydmljZVBvbGljeT4gc3BzKSB7Ci0JCUlQb2xpY3lPcGVyYXRpb24gcG8wID0gcG9zLmdldCgwKTsKLQkJSURlc2NyaXB0b3IgZCA9IHBvMC5nZXREZXNjcmlwdG9yKCk7Ci0JCUJ1dHRvbiBwdXNoQnV0dG9uID0gbmV3IEJ1dHRvbihvcGVyYXRpb25zQ29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0JCUdyaWREYXRhIHB1c2hCdXR0b25HRCA9IG5ldyBHcmlkRGF0YSgpOwotCQlwdXNoQnV0dG9uR0QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlwdXNoQnV0dG9uLnNldExheW91dERhdGEocHVzaEJ1dHRvbkdEKTsKLQkJcHVzaEJ1dHRvbi5zZXRUZXh0KGQuZ2V0TG9uZ05hbWUoKSk7Ci0JCXB1c2hCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCXB1c2hCdXR0b24uc2V0RGF0YShuZXcgQWN0aW9uQ29udHJvbERhdGEoc3BzLCBwb3MpKTsKLQkJcHVzaEJ1dHRvbi5zZXRFbmFibGVkKHBvMC5pc0VuYWJsZWQoc3BzKSk7Ci0gIAotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovICAKLQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCi0JfQotCi0JLyoqCi0JICogQHJldHVybiB0aGUgZXJyb3IgdGhhdCBzaG91bGQgYmUgc2hvd24sIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YWxpZGF0aW9uIGVycm9ycywKLQkgKiByZXR1cm4gdGhlIHZhbGlkYXRpb24gZXJyb3IgZm9yIGEgc2VydmljZSBwb2xpY3kgdGhhdCBqdXN0IGNoYW5nZXMgc3RhdGUgKG9mdGVuIHRoZQotCSAqIHNlbGVjdGVkIHNlcnZpY2UgcG9saWN5KQotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGdldEVycm9yKCkgewotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCQotCXByaXZhdGUgY2xhc3MgU3RhdGVDaGFuZ2VMaXN0ZW5lciBpbXBsZW1lbnRzIElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyCi0JewotICAgIHB1YmxpYyB2b2lkIHBvbGljeVN0YXRlQ2hhbmdlKElTZXJ2aWNlUG9saWN5IHBvbGljeSwgU3RyaW5nIGtleSwgU3RyaW5nIG9sZFZhbHVlLCBTdHJpbmcgbmV3VmFsdWUpCi0gICAgewotICAgICAgLy8gV2UgYXJlIG5vdCBlbmFibGVkIGZvciBzdGF0ZSBjaGFuZ2UgZXZlbnRzIHNvIHdlIHdpbGwgaWdub3JlIHRoaXMgZXZlbnQuCi0gICAgICBpZiggIXN0YXRlQ2hhbmdlRW5hYmxlZCApIHJldHVybjsKLSAgICAgIAotICAgICAgZXJyb3IgPSB2YWxpZGF0ZUFsbFBvbGljaWVzKCBwb2xpY3kgKTsKLSAgICAgIAotICAgICAgLy9pbmZvcm0gbGlzdGVuZXJzIHRoYXQgYSBjb250cm9sIGhhcyBjaGFuZ2VkLCBhcyBjb21wb3NpdGUgbWF5IGJlIGluIGVycm9yIG5vdwotICAgICAgbGlzdGVuZXIud2lkZ2V0U2VsZWN0ZWQoIG51bGwgKTsKLSAgICB9CSAgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZDFhOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UGxhdGZvcm1VSUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2Rpbmcgb2Ygc2VydmljZSBwb2xpY3kKLSAqIDIwMDgwMTA5ICAgMjEzNDk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMzI1ICAgMjIyMDk1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklQb2xpY3lPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbkluZm87Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSUltcGwKLXsKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBCYXNlT3BlcmF0aW9uSW1wbD4gICAgICAgICAgICAgYmFzZU9wZXJhdGlvbk1hcDsKLSAgcHJpdmF0ZSBNYXA8SVNlcnZpY2VQb2xpY3ksIFNldDxJUG9saWN5T3BlcmF0aW9uPj4gcG9saWN5Q2FjaGU7Ci0gIHByaXZhdGUgTWFwPFN0cmluZyxMaXN0PElRdWlja0ZpeEFjdGlvbkluZm8+PiAgICAgIHF1aWNrRml4ZXM7Ci0gIAotICBwdWJsaWMgU2VydmljZVBvbGljeVBsYXRmb3JtVUlJbXBsKCkKLSAgewotICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgIHBsYXRmb3JtICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgIFNlcnZpY2VQb2xpY3lSZWdpc3RyeVVJIHJlZ2lzdHJ5ICA9IG5ldyBTZXJ2aWNlUG9saWN5UmVnaXN0cnlVSSgpOwotICAgIFNldDxTdHJpbmc+ICAgICAgICAgICAgIHBvbGljeUlkcyA9IHBsYXRmb3JtLmdldEFsbFBvbGljeUlkcygpOwotICAgIAotICAgIGJhc2VPcGVyYXRpb25NYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJhc2VPcGVyYXRpb25JbXBsPigpOwotICAgIHBvbGljeUNhY2hlICAgICAgPSBuZXcgSGFzaE1hcDxJU2VydmljZVBvbGljeSwgU2V0PElQb2xpY3lPcGVyYXRpb24+PigpOwotICAgIHF1aWNrRml4ZXMgICAgICAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4+KCk7Ci0gICAgcmVnaXN0cnkubG9hZCggYmFzZU9wZXJhdGlvbk1hcCwgcXVpY2tGaXhlcyApOwotICAgIGNyZWF0ZU9wZXJhdGlvbkNhY2hlKCBwb2xpY3lJZHMgKTsKLSAgICAKLSAgICBwbGF0Zm9ybS5hZGRDaGlsZENoYW5nZUxpc3RlbmVyKCBuZXcgQ2hpbGRMaXN0ZW5lcigpLCBmYWxzZSApOwotICB9Ci0gICAgICAKLSAgcHVibGljIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4gZ2V0UXVpY2tGaXhlcyggSVN0YXR1cyBzdGF0dXMgKQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICBwbHVnaW5JZCA9IHN0YXR1cy5nZXRQbHVnaW4oKTsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgICAgID0gc3RhdHVzLmdldENvZGUoKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgIGtleSAgICAgID0gcGx1Z2luSWQgKyAiOiIgKyBjb2RlOyAvLyROT04tTkxTLTEkCi0gICAgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPiByZXN1bHQgICA9IHF1aWNrRml4ZXMuZ2V0KCBrZXkgKTsKLSAgICAKLSAgICBpZiggcmVzdWx0ID09IG51bGwgKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8SVF1aWNrRml4QWN0aW9uSW5mbz4oKTsKLSAgICAgIHF1aWNrRml4ZXMucHV0KCBrZXksIHJlc3VsdCApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBnZXRBbGxPcGVyYXRpb25zKCkKLSAgewotICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gb3BlcmF0aW9ucyA9IG5ldyBWZWN0b3I8SVBvbGljeU9wZXJhdGlvbj4oKTsKLSAgICAKLSAgICBmb3IoIFNldDxJUG9saWN5T3BlcmF0aW9uPiBvcGVyYXRpb25TZXQgOiBwb2xpY3lDYWNoZS52YWx1ZXMoKSApCi0gICAgewotICAgICAgb3BlcmF0aW9ucy5hZGRBbGwoIG9wZXJhdGlvblNldCApOyAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBvcGVyYXRpb25zOwotICB9Ci0gIAotICBwdWJsaWMgU2V0PElQb2xpY3lPcGVyYXRpb24+IGdldE9wZXJhdGlvbnNGb3JQb2xpY3koIElTZXJ2aWNlUG9saWN5IHBvbGljeSwgYm9vbGVhbiBpc1dvcmtzcGFjZSApCi0gIHsKLSAgICBTZXQ8SVBvbGljeU9wZXJhdGlvbj4gcG9saWN5T3BlcmF0aW9ucyAgID0gcG9saWN5Q2FjaGUuZ2V0KCBwb2xpY3kgKTsKLSAgICBTZXQ8SVBvbGljeU9wZXJhdGlvbj4gcmVzdWx0ICAgICAgICAgICAgID0gbmV3IEhhc2hTZXQ8SVBvbGljeU9wZXJhdGlvbj4oKTsKLSAgICAKLSAgICBpZiggcG9saWN5T3BlcmF0aW9ucyAhPSBudWxsICkKLSAgICB7Ci0gICAgICByZXN1bHQuYWRkQWxsKCBwb2xpY3lPcGVyYXRpb25zICk7ICAKLSAgICAKLSAgICAgIGlmKCAhaXNXb3Jrc3BhY2UgKQotICAgICAgewotICAgICAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gb3BlcmF0aW9uIDogcG9saWN5T3BlcmF0aW9ucyApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggb3BlcmF0aW9uLmlzV29ya3NwYWNlT25seSgpICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQucmVtb3ZlKCBvcGVyYXRpb24gKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gZ2V0T3BlcmF0aW9uc0xpc3QoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHBvbGljaWVzLCBib29sZWFuIGlzV29ya3NwYWNlICkKLSAgewotICAgIE1hcDxTdHJpbmcsIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IG9wZXJhdGlvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxJUG9saWN5T3BlcmF0aW9uPj4oKTsKLSAgICAKLSAgICBmb3IoIElTZXJ2aWNlUG9saWN5IHBvbGljeSA6IHBvbGljaWVzICkKLSAgICB7Ci0gICAgICBTZXQ8SVBvbGljeU9wZXJhdGlvbj4gb3BlcmF0aW9ucyA9IHBvbGljeUNhY2hlLmdldCggcG9saWN5ICk7Ci0KLSAgICAgIGlmKCBvcGVyYXRpb25zICE9IG51bGwgKQotICAgICAgewotICAgICAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gb3BlcmF0aW9uIDogb3BlcmF0aW9ucyApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgIGlkICAgICAgICA9IG9wZXJhdGlvbi5nZXRJZCgpOwotICAgICAgICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gZW50cnlMaXN0ID0gb3BlcmF0aW9uTWFwLmdldCggaWQgKTsKLSAgICAgICAgCi0gICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGFkZCB0aGlzIG9wZXJhdGlvbiBpZiBpdCBpcyBmb3IgdGhlIHdvcmtzcGFjZSBwcmVmZXJlbmNlIHBhZ2Ugb3IKLSAgICAgICAgICAvLyBpZiB3ZSBhcmUgb24gdGhlIHByb2plY3QgcHJlZmVyZW5jZSBwYWdlIGFuZCB0aGUgb3BlcmF0aW9uIGlzIG5vdCBvbmx5Ci0gICAgICAgICAgLy8gZm9yIHRoZSB3b3Jrc3BhY2UgbGV2ZWwuCi0gICAgICAgICAgaWYoIGlzV29ya3NwYWNlIHx8ICFvcGVyYXRpb24uaXNXb3Jrc3BhY2VPbmx5KCkgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCBlbnRyeUxpc3QgPT0gbnVsbCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGVudHJ5TGlzdCA9IG5ldyBWZWN0b3I8SVBvbGljeU9wZXJhdGlvbj4oKTsKLSAgICAgICAgICAgICAgb3BlcmF0aW9uTWFwLnB1dCggaWQsIGVudHJ5TGlzdCApOwotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGVudHJ5TGlzdC5hZGQoIG9wZXJhdGlvbiApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmV3IFZlY3RvcjxMaXN0PElQb2xpY3lPcGVyYXRpb24+Piggb3BlcmF0aW9uTWFwLnZhbHVlcygpICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVPcGVyYXRpb25DYWNoZSggU2V0PFN0cmluZz4gcG9saWN5SWRzICkKLSAgewotICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICAgICAgIHBsYXRmb3JtICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICBDb2xsZWN0aW9uPEJhc2VPcGVyYXRpb25JbXBsPiBvcGVyYXRpb25zID0gYmFzZU9wZXJhdGlvbk1hcC52YWx1ZXMoKTsKLSAgICAKLSAgICBmb3IoIEJhc2VPcGVyYXRpb25JbXBsIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMgKQotICAgIHsKLSAgICAgIFN0cmluZyAgcG9saWN5UGF0dGVybiA9IG9wZXJhdGlvbi5nZXRQb2xpY3lJZFBhdHRlcm4oKTsKLSAgICAgIFBhdHRlcm4gcGF0dGVybiAgICAgICA9IFBhdHRlcm4uY29tcGlsZSggcG9saWN5UGF0dGVybiApOwotICAgICAgCi0gICAgICBmb3IoIFN0cmluZyBwb2xpY3lJZCA6IHBvbGljeUlkcyApCi0gICAgICB7Ci0gICAgICAgIE1hdGNoZXIgbWF0Y2hlciA9IHBhdHRlcm4ubWF0Y2hlciggcG9saWN5SWQgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBtYXRjaGVyLm1hdGNoZXMoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBJU2VydmljZVBvbGljeSAgICAgICAgcG9saWN5ICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koIHBvbGljeUlkICk7Ci0gICAgICAgICAgU2V0PElQb2xpY3lPcGVyYXRpb24+IG9wZXJhdGlvbnNTZXQgPSBwb2xpY3lDYWNoZS5nZXQocG9saWN5KTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggb3BlcmF0aW9uc1NldCA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvcGVyYXRpb25zU2V0ID0gbmV3IEhhc2hTZXQ8SVBvbGljeU9wZXJhdGlvbj4oKTsKLSAgICAgICAgICAgIHBvbGljeUNhY2hlLnB1dCggcG9saWN5LCBvcGVyYXRpb25zU2V0ICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIG9wZXJhdGlvbnNTZXQuYWRkKCBuZXcgUG9saWN5T3BlcmF0aW9uSW1wbCggb3BlcmF0aW9uLCBwb2xpY3kgKSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBDaGlsZExpc3RlbmVyIGltcGxlbWVudHMgSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIGNoaWxkQ2hhbmdlKExpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoaWxkTGlzdCwgTGlzdDxCb29sZWFuPiBhZGRlZExpc3QpCi0gICAgewotICAgICAgU2V0PFN0cmluZz4gaWRTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZExpc3Quc2l6ZSgpOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gY2hpbGRMaXN0LmdldCggaW5kZXggKTsKLSAgICAgICAgYm9vbGVhbiAgICAgICAgYWRkZWQgID0gYWRkZWRMaXN0LmdldCggaW5kZXggKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBhZGRlZCApCi0gICAgICAgIHsKLSAgICAgICAgCi0gICAgICAgICAgaWRTZXQuYWRkKCBwb2xpY3kuZ2V0SWQoKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHBvbGljeUNhY2hlLnJlbW92ZSggcG9saWN5ICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoIGlkU2V0LnNpemUoKSA+IDAgKQotICAgICAgewotICAgICAgICBjcmVhdGVPcGVyYXRpb25DYWNoZSggaWRTZXQgKTsKLSAgICAgIH0KLSAgICB9ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lSZWdpc3RyeVVJLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lSZWdpc3RyeVVJLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMWY2ODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5UmVnaXN0cnlVSS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzLlJlZ2lzdHJ5VXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5UmVnaXN0cnlVSQotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWSUNFX1BPTElDWV9JRCA9IFNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5QTFVHSU5fSUQgKyAiLnNlcnZpY2Vwb2xpY3l1aSI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBTZXJ2aWNlUG9saWN5UmVnaXN0cnlVSSgpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgbG9hZCggTWFwPFN0cmluZywgQmFzZU9wZXJhdGlvbkltcGw+IG9wZXJhdGlvbk1hcCwgTWFwPFN0cmluZywgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPj4gcXVpY2tGaXhlcyApCi0gIHsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKFNFUlZJQ0VfUE9MSUNZX0lEKTsKLSAgICAKLSAgICBmb3IoIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50IDogZWxlbWVudHMgKQotICAgIHsKLSAgICAgIFN0cmluZyBlbGVtZW50TmFtZSA9IGVsZW1lbnQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAKLSAgICAgIGlmKCBlbGVtZW50TmFtZS5lcXVhbHMoICJzZXJ2aWNlcG9saWN5dWkiKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY2hpbGRyZW4gPSBlbGVtZW50LmdldENoaWxkcmVuKCk7Ci0gICAgICAgIAotICAgICAgICBmb3IoIElDb25maWd1cmF0aW9uRWxlbWVudCBjaGlsZCA6IGNoaWxkcmVuICkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBuYW1lID0gY2hpbGQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIG5hbWUuZXF1YWxzKCAib3BlcmF0aW9uIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRTZXJ2aWNlUG9saWN5dWkoIGNoaWxkLCBvcGVyYXRpb25NYXAgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiggbmFtZS5lcXVhbHMoICJxdWlja2ZpeCIpICkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRRdWlja0ZpeCggY2hpbGQsIHF1aWNrRml4ZXMgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IHVpIGVsZW1lbnQsICIgKyBuYW1lICsgIiBmb3VuZC4iICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBlcnJvciggIlVuZGVmaW5lZCBzZXJ2aWNlIHBvbGljeSB1aSBlbGVtZW50LCAiICsgZWxlbWVudE5hbWUgKyAiIGZvdW5kLiIgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgfSAKLSAgfQotICAgCi0gIHByaXZhdGUgdm9pZCBsb2FkU2VydmljZVBvbGljeXVpKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIEJhc2VPcGVyYXRpb25JbXBsPiBvcGVyYXRpb25NYXAgKQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgICAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuICAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJwb2xpY3lwYXR0ZXJuIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgd29ya3NwYWNlT25seSAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAid29ya3NwYWNlb25seSIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIHVzZURlZmF1bHRTdHJpbmcgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggZWxlbWVudCwgImRlZmF1bHRkYXRhIiApOyAvLyROT04tTkxTLTEkCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY2hpbGRyZW4gICAgICAgICA9IGVsZW1lbnQuZ2V0Q2hpbGRyZW4oKTsKLSAgICBJRGVzY3JpcHRvciAgICAgICAgICAgICBkZXNjcmlwdG9yICAgICAgID0gbnVsbDsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICBlbnVtSWQgICAgICAgICAgID0gbnVsbDsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICBkZWZhdWx0SXRlbSAgICAgID0gbnVsbDsKLSAgICBib29sZWFuICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gICAgICAgID0gZmFsc2U7Ci0gICAgYm9vbGVhbiAgICAgICAgICAgICAgICAgaWNvbiAgICAgICAgICAgICA9IGZhbHNlOwotICAgIGJvb2xlYW4gICAgICAgICAgICAgICAgIG11bHRpU2VsZWN0ICAgICAgPSBmYWxzZTsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgICBlbmFibGVkRWxlbWVudCAgID0gbnVsbDsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgICBsYXVuY2hFbGVtZW50ICAgID0gbnVsbDsKLSAgICBib29sZWFuICAgICAgICAgICAgICAgICBlcnJvciAgICAgICAgICAgID0gZmFsc2U7Ci0gICAgYm9vbGVhbiAgICAgICAgICAgICAgICAgdXNlRGVmYXVsdERhdGEgICA9IHRydWU7Ci0gICAgCi0gICAgaWYoIHVzZURlZmF1bHRTdHJpbmcgIT0gbnVsbCApCi0gICAgewotICAgICAgdXNlRGVmYXVsdERhdGEgPSB1c2VEZWZhdWx0U3RyaW5nLmVxdWFscyggInRydWUiICk7ICAgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICAKLSAgICBmb3IoIElDb25maWd1cmF0aW9uRWxlbWVudCBjaGlsZCA6IGNoaWxkcmVuICkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGNoaWxkLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgCi0gICAgICBpZiggbmFtZS5lcXVhbHMoICJkZXNjcmlwdG9yIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBkZXNjcmlwdG9yID0gUmVnaXN0cnlVdGlscy5sb2FkRGVzY3JpcHRvciggY2hpbGQgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAiZW51bWVyYXRpb24iICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGVudW1JZCA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBjaGlsZCwgImlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGRlZmF1bHRJdGVtID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGNoaWxkLCAiZGVmYXVsdGl0ZW0iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCi0gICAgICAgIGlmKCBlbnVtSWQgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvciggIlNlcnZpY2UgcG9saWN5IHVpIGVudW1lcmF0aW9uIGVsZW1lbnQgaXMgbWlzc2luZyBpZCBhdHRyaWJ1dGUuIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICB9ICAgICAgIAotICAgICAgfQotICAgICAgZWxzZSBpZiggbmFtZS5lcXVhbHMoICJzZWxlY3Rpb24iICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBpY29uVmFsdWUgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggY2hpbGQsICJpY29uIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAotICAgICAgICBzZWxlY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICBpZiggaWNvblZhbHVlICE9IG51bGwgJiYgaWNvblZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoICJ0cnVlIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgaWNvbiA9IHRydWU7Ci0gICAgICAgICAgdXNlRGVmYXVsdERhdGEgPSB0cnVlOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAiY29tcGxleCIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGxhdW5jaENsYXNzID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGNoaWxkLCAibGF1bmNoY2xhc3MiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCi0gICAgICAgIGlmKCBsYXVuY2hDbGFzcyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgdWkgZW51bWVyYXRpb24gZWxlbWVudCBpcyBtaXNzaW5nIGlkIGF0dHJpYnV0ZS4iICk7ICAgICAgICAgICAgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbGF1bmNoRWxlbWVudCA9IGNoaWxkOwotICAgICAgfQotICAgICAgZWxzZSBpZiggbmFtZS5lcXVhbHMoICJlbmFibGVkIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBTdHJpbmcgbXVsdGlTZWxlY3RWYWx1ZSA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBjaGlsZCwgIm11bHRpc2VsZWN0IiApLnRvTG93ZXJDYXNlKCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAKLSAgICAgICAgaWYoIG11bHRpU2VsZWN0VmFsdWUgIT0gbnVsbCAmJiBtdWx0aVNlbGVjdFZhbHVlLmVxdWFscyggInRydWUiICkpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIG11bHRpU2VsZWN0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgIAotICAgICAgICBTdHJpbmcgZW5hYmxlZENsYXNzID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGNoaWxkLCAiZW5hYmxlZGNsYXNzIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAotICAgICAgICBpZiggZW5hYmxlZENsYXNzICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgZW5hYmxlZEVsZW1lbnQgPSBjaGlsZDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSAKLSAgICAgIHsKLSAgICAgICAgZXJyb3IoICJVbmRlZmluZWQgc2VydmljZSBwb2xpY3kgdWkgZWxlbWVudCwgIiArIG5hbWUgKyAiIGZvdW5kLiIgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYoIGRlc2NyaXB0b3IgPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJTZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24gZWxlbWVudCBtdXN0IGhhdmUgYSBkZXNjcmlwdG9yIGVsZW1lbnQgZGVmaW5lZC4iICk7ICAgLy8kTk9OLU5MUy0xJAotICAgICAgZXJyb3IgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiggaWQgPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJJZCBhdHRyaWJ1dGUgbm90IHNwZWNpZmllZCBpbiBzZXJ2aWNlIHBvbGljeSB1aSBvcGVyYXRpb24gZWxlbWVudC4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIHBvbGljeVBhdHRlcm4gPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJJZCBhdHRyaWJ1dGUgbm90IHNwZWNpZmllZCBpbiBzZXJ2aWNlIHBvbGljeSB1aSBvcGVyYXRpb24gZWxlbWVudC4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGVycm9yID0gdHJ1ZTsgICAgIAotICAgIH0KLSAgICAKLSAgICBpZiggKCBlbnVtSWQgPT0gbnVsbCAmJiAhc2VsZWN0aW9uICYmIGxhdW5jaEVsZW1lbnQgPT0gbnVsbCkgIHx8Ci0gICAgICAgICggZW51bUlkICE9IG51bGwgJiYgKHNlbGVjdGlvbiB8fCBsYXVuY2hFbGVtZW50ICE9IG51bGwpKSB8fAotICAgICAgICAoIHNlbGVjdGlvbiAmJiAoZW51bUlkICE9IG51bGwgfHwgbGF1bmNoRWxlbWVudCAhPSBudWxsKSkgfHwKLSAgICAgICAgKCBsYXVuY2hFbGVtZW50ICE9IG51bGwgJiYgKHNlbGVjdGlvbiAmJiBlbnVtSWQgIT0gbnVsbCkpKQotICAgIHsKLSAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIGVsZW1lbnQgbXVzdCBoYXZlIGVpdGhlciBhbiBlbnVtZXJhdGlvbiBlbGVtZW50IG9yIGEgc2VsZWN0aW9uIGVsZW1lbnQgb3IgYSBjb21wbGV4IGVsZW1lbnQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYoICEgZXJyb3IgKQotICAgIHsKLSAgICAgIEJhc2VPcGVyYXRpb25JbXBsIG9wZXJhdGlvbiAgICAgICAgICA9IG5ldyBCYXNlT3BlcmF0aW9uSW1wbCgpOwotICAgICAgYm9vbGVhbiAgICAgICAgICAgd29ya3NwYWNlT25seVZhbHVlID0gd29ya3NwYWNlT25seSAhPSBudWxsICYmIHdvcmtzcGFjZU9ubHkuZXF1YWxzKCAidHJ1ZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgCi0gICAgICBvcGVyYXRpb24uc2V0SWQoIGlkICk7Ci0gICAgICBvcGVyYXRpb24uc2V0UG9saWN5SWRQYXR0ZXJuKCBwb2xpY3lQYXR0ZXJuICk7Ci0gICAgICBvcGVyYXRpb24uc2V0RGVzY3JpcHRvciggZGVzY3JpcHRvciApOwotICAgICAgb3BlcmF0aW9uLnNldE11bHRpU2VsZWN0KCBtdWx0aVNlbGVjdCApOwotICAgICAgb3BlcmF0aW9uLnNldEVudW1lcmF0aW9uSWQoIGVudW1JZCApOwotICAgICAgb3BlcmF0aW9uLnNldFdvcmtzcGFjZU9ubHkoIHdvcmtzcGFjZU9ubHlWYWx1ZSApOwotICAgICAgb3BlcmF0aW9uLnNldFVzZURlZmF1bHREYXRhKCB1c2VEZWZhdWx0RGF0YSApOwotICAgICAgCi0gICAgICBpZiggZGVmYXVsdEl0ZW0gIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbi5zZXREZWZhdWx0SXRlbSggZGVmYXVsdEl0ZW0gKTsgICAgICAgIAotICAgICAgfQotICAgICAgCi0gICAgICBpZiggc2VsZWN0aW9uICkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uLnNldEVudW1lcmF0aW9uSWQoICJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuYm9vbGVhbkVudW0iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgb3BlcmF0aW9uLnNldFNlbGVjdGlvbiggaWNvbiApOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiggbGF1bmNoRWxlbWVudCAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uLnNldENvbXBsZXhFbGVtZW50KCBsYXVuY2hFbGVtZW50ICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmKCBlbmFibGVkRWxlbWVudCAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uLnNldEVuYWJsZWRFbGVtZW50KCBlbmFibGVkRWxlbWVudCApOwotICAgICAgfQotICAgICAgCi0gICAgICBvcGVyYXRpb25NYXAucHV0KCBpZCwgb3BlcmF0aW9uICk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZFF1aWNrRml4KCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgTWFwPFN0cmluZywgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPj4gcXVpY2tGaXhlcyApCi0gIHsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSAgIGNoaWxkcmVuID0gZWxlbWVudC5nZXRDaGlsZHJlbiggImFjdGlvbiIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgcGx1Z2luSWQgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggZWxlbWVudCwgInBsdWdpbmlkIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICBjb2RlICAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiY29kZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgIExpc3Q8SVF1aWNrRml4QWN0aW9uSW5mbz4gZml4TGlzdCAgPSBuZXcgVmVjdG9yPElRdWlja0ZpeEFjdGlvbkluZm8+KCk7Ci0gICAgCi0gICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2hpbGQgOiBjaGlsZHJlbiApCi0gICAgewotICAgICAgbG9hZEFjdGlvbiggY2hpbGQsIGZpeExpc3QgKTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIHBsdWdpbklkID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiTWlzc2luZyBwbHVnaW5JZCBhdHRyaWJ1dGUgZm9yIFNlcnZpY2UgcG9saWN5IFVJIHF1aWNrIGZpeCBleHRlbnNpb24iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYoIGNvZGUgPT0gbnVsbCApCi0gICAgewotICAgICAgZXJyb3IoICJNaXNzaW5nIGNvZGUgYXR0cmlidXRlIGZvciBTZXJ2aWNlIHBvbGljeSBVSSBxdWljayBmaXggZXh0ZW5zaW9uIiApOyAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmKCBmaXhMaXN0LnNpemUoKSA9PSAwICkKLSAgICB7Ci0gICAgICBlcnJvciggIk1pc3NpbmcgYWN0aW9uIGVsZW1lbnQgZm9yIFNlcnZpY2UgcG9saWN5IFVJIHF1aWNrIGZpeCBleHRlbnNpb24iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgU3RyaW5nIGtleSA9IHBsdWdpbklkICsgIjoiICsgY29kZTsgLy8kTk9OLU5MUy0xJAotICAgIHF1aWNrRml4ZXMucHV0KCBrZXksIGZpeExpc3QgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRBY3Rpb24oIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50LCBMaXN0PElRdWlja0ZpeEFjdGlvbkluZm8+IGZpeExpc3QgKQotICB7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZGVzY0VsZW0gPSBlbGVtZW50LmdldENoaWxkcmVuKCAiZGVzY3JpcHRvciIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIGNsYXp6ICAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIGlmKCBkZXNjRWxlbSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggIk1pc3NpbmcgZGVzY3JpcHRvciBlbGVtZW50IGZvciBTZXJ2aWNlIHBvbGljeSBVSSBxdWljayBmaXggZXh0ZW5zaW9uIiApOyAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm47ICAgICAgCi0gICAgfQotICAgIAotICAgIGlmKCBjbGF6eiA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggIk1pc3NpbmcgY2xhc3MgYXR0cmlidXRlIGZvciBTZXJ2aWNlIHBvbGljeSBVSSBxdWljayBmaXggZXh0ZW5zaW9uIiApOyAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm47ICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgSURlc2NyaXB0b3IgICAgICAgICAgICBkZXNjcmlwdG9yID0gUmVnaXN0cnlVdGlscy5sb2FkRGVzY3JpcHRvciggZWxlbWVudCApOwotICAgIFF1aWNrRml4QWN0aW9uSW5mb0ltcGwgYWN0aW9uICAgICA9IG5ldyBRdWlja0ZpeEFjdGlvbkluZm9JbXBsKCBlbGVtZW50LCBkZXNjcmlwdG9yICk7Ci0gICAgCi0gICAgZml4TGlzdC5hZGQoIGFjdGlvbiApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZXJyb3IoIFN0cmluZyBtZXNzYWdlICkKLSAgewotICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5sb2dFcnJvciggbWVzc2FnZSwgbnVsbCApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1dzdFNQVUlQbHVnaW5NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Xc3RTUFVJUGx1Z2luTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4NjNiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1dzdFNQVUlQbHVnaW5NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI1IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSAqIDIwMDcxMTA3IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSAqIDIwMDcxMTIwICAgMjA5ODU4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIEVuaGFuY2luZyBzZXJ2aWNlIHBvbGljeSBmcmFtZXdvcmsgYW5kIFVJCi0gKiAyMDA3MTIxMiAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXc3RTUFVJUGx1Z2luTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5Xc3RTUFVJUGx1Z2luTWVzc2FnZXMiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgV3N0U1BVSVBsdWdpbk1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRVJWSUNFUE9MSUNJRVNfREVTQ1JJUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRVBPTElDSUVTX0RFUEVOREVOQ0lFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BTUF9ERVNDUklQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BTUF9ERVBFTkRFTkNJRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QU1BfVFJFRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BTUF9ERVRBSUxTVFJFRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DSUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNZX0VSUk9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNJRVNfTk9ORTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMSU5LX0NPTkZJR1dPUktTUEFDRV9TRVRUSU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FTkFCTEVfUFJPSkVDVF9TRVRUSU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9RRkxJTks7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEVYVF9RRklYX05PU1VHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFWFRfREVUQUlMUzsKLQotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV3N0U1BVSVBsdWdpbk1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1dzdFNQVUlQbHVnaW5NZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9Xc3RTUFVJUGx1Z2luTWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBjNWU1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL1dzdFNQVUlQbHVnaW5NZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcxMDI1IDE5Njk5NyAgIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMKLSMgMjAwNzExMDcgMTk2OTk3ICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotIyAyMDA3MTEyMCAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotIyAyMDA3MTIxMiAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIFNlcnZpY2UgUG9saWNpZXMgUHJlZmVyZW5jZSBwYWdlCi0jCi0KLUxBQkVMX1NFUlZJQ0VQT0xJQ0lFU19ERVNDUklQVElPTj1EZXNjcmlwdGlvbjoKLUxBQkVMX1NFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNJRVM9RGVwZW5kZW5jaWVzOgotI2V4YW1wbGUgbWVzc2FnZSBiZWxvdyBpcyBDb21wbGlhbmNlIGxldmVsICJTdWdnZXN0IGNvbXBsaWFuY2UiIHJlcXVpcmVzIFdTLUkgQVAgMS4wICBbIHN1Z2dlc3R8aWdub3JlIF0KLVNFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNJRVM9ezB9IFwiezF9XCIgcmVxdWlyZXMgezJ9IHszfSBbezR9XQotI2V4YW1wbGUgbWVzc2FnZSBiZWxvdyBpcyBXUy1JIFNTQlAgQ29tcGxpYW5jZSBsZXZlbCAiU3VnZ2VzdCBjb21wbGlhbmNlIiByZXF1aXJlcyBXUy1JIEFQIDEuMCAgWyBzdWdnZXN0fGlnbm9yZSBdCi1TRVJWSUNFUE9MSUNJRVNfREVQRU5ERU5DWV9FUlJPUj0gezB9IHsxfSBcInsyfVwiIHJlcXVpcmVzIHszfSB7NH0gW3s1fV0KLVNFUlZJQ0VQT0xJQ0lFU19ERVBFTkRFTkNJRVNfTk9ORT1Ob25lCi1UT09MVElQX1BTUF9ERVNDUklQVElPTj1EZXNjcmlwdGlvbiBvZiBzZWxlY3RlZCB0cmVlIG5vZGUKLVRPT0xUSVBfUFNQX0RFUEVOREVOQ0lFUz1EZXBlbmRlbmNpZXMgb2Ygc2VsZWN0ZWQgdHJlZSBub2RlCi1UT09MVElQX1BTUF9UUkVFPVNlbGVjdCBhIHRyZWUgbm9kZSBhbmQgdXNlIHRoZSBwYW5lbCBvbiB0aGUgcmlnaHQgdG8gZGVmaW5lIHJlbGF0ZWQgcHJlZmVyZW5jZXMKLVRPT0xUSVBfUFNQX0RFVEFJTFNUUkVFPVNlbGVjdCBhIHRyZWUgbm9kZSBhbmQgdXNlIHRoZSBwYW5lbCBiZWxvdyB0byBkZWZpbmUgcmVsYXRlZCBwcmVmZXJlbmNlcwotTEFCRUxfUUZMSU5LPVF1aWNrIEZpeAotVEVYVF9RRklYX05PU1VHPU5vIFN1Z2dlc3Rpb25zLiBTZWUgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIGFueSBsaXN0ZWQgZGVwZW5kZW5jaWVzIGZvciB7MX0gdG8gcmVzb2x2ZSB0aGUgZXJyb3IuCi1URVhUX0RFVEFJTFM9ZGV0YWlscwotTElOS19DT05GSUdXT1JLU1BBQ0VfU0VUVElOR1M9Q29uZmlndXJlIFdvcmtzcGFjZSBTZXR0aW5ncy4uLgotTEFCRUxfRU5BQkxFX1BST0pFQ1RfU0VUVElOR1M9RW5hYmxlIHByb2plY3Qgc3BlY2lmaWMgc2V0dGluZ3MKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9wcmVmZXJlbmNlcy9TZXJ2aWNlUG9saWNpZXNQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9wcmVmZXJlbmNlcy9TZXJ2aWNlUG9saWNpZXNQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTcwNjQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvcHJlZmVyZW5jZXMvU2VydmljZVBvbGljaWVzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjUgMTk2OTk3ICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotICogMjAwNzExMDcgMTk2OTk3ICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotICogMjAwNzExMjAgICAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljaWVzQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWNpZXNQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMKLQkJSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lcgotCi17Ci0JU2VydmljZVBvbGljaWVzQ29tcG9zaXRlIHByZWZlcmVuY2VQYWdlOwotCUNvbXBvc2l0ZSBzdXBlclBhcmVudDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQUdFX0lEID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJlZmVyZW5jZXMuV1NJQ29tcGxpYW5jZVByZWZlcmVuY2VQYWdlIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogQ3JlYXRlcyBwcmVmZXJlbmNlIHBhZ2UgY29udHJvbHMgb24gZGVtYW5kLgotCSAqIAotCSAqIEBwYXJhbSBwYXJlbnRDb21wb3NpdGUKLQkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgZm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLQkgKi8KLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgc3VwZXJwYXJlbnQpIHsKLQkJcHJlZmVyZW5jZVBhZ2UgPSBuZXcgU2VydmljZVBvbGljaWVzQ29tcG9zaXRlKHN1cGVycGFyZW50LCBudWxsLCB0aGlzKTsKLQkJb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KHN1cGVycGFyZW50KTsKLQkJdGhpcy5zdXBlclBhcmVudCA9IHN1cGVycGFyZW50OwotCQlyZXR1cm4gcHJlZmVyZW5jZVBhZ2U7Ci0KLQl9Ci0KLQkvKioKLQkgKiBEb2VzIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkZWZhdWx0IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpIHsKLQkJcHJlZmVyZW5jZVBhZ2UucGVyZm9ybURlZmF1bHRzKCk7Ci0JCUlTdGF0dXMgZXJyb3IgPSBwcmVmZXJlbmNlUGFnZS5nZXRFcnJvcigpOwotCQlpZiAoZXJyb3IgPT0gbnVsbCkgewotCQkJc3VwZXIuc2V0VmFsaWQodHJ1ZSk7Ci0JCQlzdXBlci5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdXBlci5zZXRFcnJvck1lc3NhZ2UoZXJyb3IuZ2V0TWVzc2FnZSgpKTsKLQkJCXN1cGVyLnNldFZhbGlkKGZhbHNlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKiAKLQkgKiBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0JICovCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkgewotCQlzdG9yZVZhbHVlcygpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBTdG9yZXMgdGhlIHZhbHVlcyBvZiB0aGUgY29udHJvbHMgYmFjayB0byB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RvcmVWYWx1ZXMoKSB7Ci0JCVNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpLmNvbW1pdENoYW5nZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQ2FuY2VsIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotCSAqIAotCSAqIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtQ2FuY2VsKCkgewotCQlTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKS5kaXNjYXJkQ2hhbmdlcygpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JICogCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkgewotCQlzdG9yZVZhbHVlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgewotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBva1RvTGVhdmUoKSB7Ci0JCXJldHVybiBwcmVmZXJlbmNlUGFnZS5nZXRFcnJvcigpID09IG51bGw7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdXBlci5kaXNwb3NlKCk7Ci0JCXByZWZlcmVuY2VQYWdlLmRpc3Bvc2UoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCi0JfQotCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQlJU3RhdHVzIGVycm9yID0gcHJlZmVyZW5jZVBhZ2UuZ2V0RXJyb3IoKTsKLQkJaWYgKGVycm9yID09IG51bGwpIHsKLQkJCXN1cGVyLnNldFZhbGlkKHRydWUpOwotCQkJc3VwZXIuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQl9IGVsc2UgewotCQkJc3VwZXIuc2V0RXJyb3JNZXNzYWdlKGVycm9yLmdldE1lc3NhZ2UoKSk7Ci0JCQlzdXBlci5zZXRWYWxpZChmYWxzZSk7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9wcm9wZXJ0aWVzL1NlcnZpY2VQb2xpY2llc1Byb3BlcnR5UGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9zZXJ2aWNlL3BvbGljeS91aS9wcm9wZXJ0aWVzL1NlcnZpY2VQb2xpY2llc1Byb3BlcnR5UGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2EwYWY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvcHJvcGVydGllcy9TZXJ2aWNlUG9saWNpZXNQcm9wZXJ0eVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMDcgMTk2OTk3ICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotICogMjAwNzExMDggMTk2OTk3ICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotICogMjAwNzExMjAgICAyMDk4NTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkucHJvcGVydGllczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Db250cm9sRW5hYmxlU3RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2dQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSU1lc3NhZ2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlByZWZlcmVuY2VzVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlByb3BlcnR5UGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljaWVzQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5Xc3RTUFVJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnNlcnZpY2UucG9saWN5LnVpLnByZWZlcmVuY2VzLlNlcnZpY2VQb2xpY2llc1ByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSTsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY2llc1Byb3BlcnR5UGFnZSBleHRlbmRzIFByb3BlcnR5UGFnZSBpbXBsZW1lbnRzCi0JCVNlbGVjdGlvbkxpc3RlbmVyIHsKLQotCXByaXZhdGUgU2VydmljZVBvbGljaWVzQ29tcG9zaXRlIHByb3BlcnR5UGFnZTsKLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFHRV9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByb3BlcnRpZXMuV1NJQ29tcGxpYW5jZVByb3BlcnR5UGFnZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIEJ1dHRvbiBmVXNlUHJvamVjdFNldHRpbmdzOwotCXByaXZhdGUgTGluayBmQ2hhbmdlV29ya3NwYWNlU2V0dGluZ3M7Ci0JcHJpdmF0ZSBDb250cm9sRW5hYmxlU3RhdGUgZkJsb2NrRW5hYmxlU3RhdGU7Ci0JcHJpdmF0ZSBDb250cm9sIGZDb25maWd1cmF0aW9uQmxvY2tDb250cm9sOwotCXByaXZhdGUgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtID0gU2VydmljZVBvbGljeVBsYXRmb3JtCi0JCQkuZ2V0SW5zdGFuY2UoKTsKLQotCXB1YmxpYyBTZXJ2aWNlUG9saWNpZXNQcm9wZXJ0eVBhZ2UoKSB7Ci0JCWZCbG9ja0VuYWJsZVN0YXRlID0gbnVsbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgc3VwZXJwYXJlbnQpIHsKLQkJcHJvamVjdCA9IChJUHJvamVjdCkgZ2V0RWxlbWVudCgpLmdldEFkYXB0ZXIoSVByb2plY3QuY2xhc3MpOwotCQlib29sZWFuIHByb2plY3RQcmVmc0VuYWJsZWQgPSBwbGF0Zm9ybQotCQkJCS5pc1Byb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQocHJvamVjdCk7Ci0JCWlmICghcHJvamVjdFByZWZzRW5hYmxlZCkgewotCQkJLy9lbmFibGUgdGhlbSBzbyB0aGF0IHNlcnZpY2UgcG9saWNpZXMgY29tcG9zaXRlIFVJIHJlZmxlY3RzIAotCQkJLy9jdXJyZW50bHkgc2V0IHByb2plY3QgcHJlZmVyZW5jZXMsIG90aGVyd2lzZSBzaG93cyB3b3Jrc3BhY2UgCi0JCQkvL3ByZWZlcmVuY2VzIGFuZCB3b3VsZCBuZWVkIHRvIHJlZHJhdyB0cmVlIHdoZW4gdXNlciBlbmFibGVzIHRoZW0gCi0JCQlwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QsIHRydWUpOwotCQl9Ci0JCXByb3BlcnR5UGFnZSA9IG5ldyBTZXJ2aWNlUG9saWNpZXNDb21wb3NpdGUoc3VwZXJwYXJlbnQsIHByb2plY3QsIHRoaXMpOwotCQlwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QsIHByb2plY3RQcmVmc0VuYWJsZWQpOwotCQlmQ29uZmlndXJhdGlvbkJsb2NrQ29udHJvbCA9IHByb3BlcnR5UGFnZTsKLQkJZW5hYmxlUHJlZmVyZW5jZUNvbnRlbnQocHJvamVjdFByZWZzRW5hYmxlZCk7Ci0JCWZVc2VQcm9qZWN0U2V0dGluZ3Muc2V0U2VsZWN0aW9uKHByb2plY3RQcmVmc0VuYWJsZWQpOwotCQl1cGRhdGVMaW5rVmlzaWJpbGl0eSgpOwotCi0JCW9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7Ci0JCXJldHVybiBwcm9wZXJ0eVBhZ2U7Ci0JfQotCi0JcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJcHJvcGVydHlQYWdlLndpZGdldERlZmF1bHRTZWxlY3RlZChlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdXBlci5kaXNwb3NlKCk7Ci0JCXByb3BlcnR5UGFnZS5kaXNwb3NlKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gb2tUb0xlYXZlKCkgewotCQlyZXR1cm4gcHJvcGVydHlQYWdlLmdldEVycm9yKCkgPT0gbnVsbDsKLQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpIHsKLQkJaWYgKCFmVXNlUHJvamVjdFNldHRpbmdzLmdldFNlbGVjdGlvbigpKSB7Ci0JCQlwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QsIGZhbHNlKTsKLQkJfQotCQlzdG9yZVZhbHVlcygpOwotCX0KLQotCS8qKgotCSAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDYW5jZWwgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JICogIEByZXR1cm4gd2hldGhlciBpdCBpcyBva2F5IHRvIGNsb3NlIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtQ2FuY2VsKCkgewotCQlwbGF0Zm9ybS5kaXNjYXJkQ2hhbmdlcyhwcm9qZWN0KTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoqCi0JICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKSB7Ci0JCWVuYWJsZVByb2plY3RTcGVjaWZpY1NldHRpbmdzKGZhbHNlKTsKLQkJcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChwcm9qZWN0LCBmYWxzZSk7Ci0JCXByb3BlcnR5UGFnZS5wZXJmb3JtRGVmYXVsdHMoKTsKLQkJSVN0YXR1cyBlcnJvciA9IHByb3BlcnR5UGFnZS5nZXRFcnJvcigpOwotCQlpZiAoZXJyb3IgPT0gbnVsbCkgewotCQkJc3VwZXIuc2V0VmFsaWQodHJ1ZSk7Ci0JCQlzdXBlci5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdXBlci5zZXRFcnJvck1lc3NhZ2UoZXJyb3IuZ2V0TWVzc2FnZSgpKTsKLQkJCXN1cGVyLnNldFZhbGlkKGZhbHNlKTsKLQkJfQotCi0JfQotCi0JLyoqCi0JICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotCSAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0JICovCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkgewotCQlpZiAoIWZVc2VQcm9qZWN0U2V0dGluZ3MuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCXBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQocHJvamVjdCwgZmFsc2UpOwotCQl9Ci0JCXN0b3JlVmFsdWVzKCk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIFN0b3JlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb250cm9scyBiYWNrIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotCSAqLwotCXByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpIHsKLQkJcGxhdGZvcm0uY29tbWl0Q2hhbmdlcyhwcm9qZWN0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCUlTdGF0dXMgZXJyb3IgPSBwcm9wZXJ0eVBhZ2UuZ2V0RXJyb3IoKTsKLQkJaWYgKGVycm9yID09IG51bGwpIHsKLQkJCXN1cGVyLnNldFZhbGlkKHRydWUpOwotCQkJc3VwZXIuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQl9IGVsc2UgewotCQkJc3VwZXIuc2V0RXJyb3JNZXNzYWdlKGVycm9yLmdldE1lc3NhZ2UoKSk7Ci0JCQlzdXBlci5zZXRWYWxpZChmYWxzZSk7Ci0JCX0KLQotCX0KLQotCXByb3RlY3RlZCBMYWJlbCBjcmVhdGVEZXNjcmlwdGlvbkxhYmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJLy8JCQlmUGFyZW50Q29tcG9zaXRlPSBwYXJlbnQ7Ci0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQljb21wb3NpdGUuc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7Ci0JCWNvbXBvc2l0ZQotCQkJCS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpKTsKLQotCQlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBzZSkgewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBzZSkgewotCQkJCWVuYWJsZVByb2plY3RTcGVjaWZpY1NldHRpbmdzKGZVc2VQcm9qZWN0U2V0dGluZ3MKLQkJCQkJCS5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZChwcm9qZWN0LAotCQkJCQkJZlVzZVByb2plY3RTZXR0aW5ncy5nZXRTZWxlY3Rpb24oKSk7Ci0JCQl9Ci0JCX07Ci0KLQkJZlVzZVByb2plY3RTZXR0aW5ncyA9IG5ldyBCdXR0b24oY29tcG9zaXRlLCBTV1QuQ0hFQ0spOwotCQlmVXNlUHJvamVjdFNldHRpbmdzLmFkZFNlbGVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJZlVzZVByb2plY3RTZXR0aW5ncwotCQkJCS5zZXRUZXh0KFdzdFNQVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9FTkFCTEVfUFJPSkVDVF9TRVRUSU5HUyk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gMTsKLQkJZ2QuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0JCWZVc2VQcm9qZWN0U2V0dGluZ3Muc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWZDaGFuZ2VXb3Jrc3BhY2VTZXR0aW5ncyA9IGNyZWF0ZUxpbmsoY29tcG9zaXRlLAotCQkJCVdzdFNQVUlQbHVnaW5NZXNzYWdlcy5MSU5LX0NPTkZJR1dPUktTUEFDRV9TRVRUSU5HUyk7Ci0JCWZDaGFuZ2VXb3Jrc3BhY2VTZXR0aW5ncy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRU5ELAotCQkJCVNXVC5DRU5URVIsIGZhbHNlLCBmYWxzZSkpOwotCi0JCUxhYmVsIGhvcml6b250YWxMaW5lID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULlNFUEFSQVRPUgotCQkJCXwgU1dULkhPUklaT05UQUwpOwotCQlob3Jpem9udGFsTGluZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5GSUxMLAotCQkJCXRydWUsIGZhbHNlLCAyLCAxKSk7Ci0JCWhvcml6b250YWxMaW5lLnNldEZvbnQoY29tcG9zaXRlLmdldEZvbnQoKSk7Ci0KLQkJcmV0dXJuIHN1cGVyLmNyZWF0ZURlc2NyaXB0aW9uTGFiZWwocGFyZW50KTsKLQl9Ci0KLQlwcml2YXRlIExpbmsgY3JlYXRlTGluayhDb21wb3NpdGUgY29tcG9zaXRlLCBTdHJpbmcgdGV4dCkgewotCQlMaW5rIGxpbmsgPSBuZXcgTGluayhjb21wb3NpdGUsIFNXVC5OT05FKTsKLQkJbGluay5zZXRGb250KGNvbXBvc2l0ZS5nZXRGb250KCkpOwotCQlsaW5rLnNldFRleHQoIjxBPiIgKyB0ZXh0ICsgIjwvQT4iKTsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKLQkJbGluay5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJb3BlbldvcmtzcGFjZVByZWZlcmVuY2VzKChMaW5rKSBlLndpZGdldCk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJb3BlbldvcmtzcGFjZVByZWZlcmVuY2VzKChMaW5rKSBlLndpZGdldCk7Ci0JCQl9Ci0JCX0pOwotCQlyZXR1cm4gbGluazsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlTGlua1Zpc2liaWxpdHkoKSB7Ci0JCWlmIChmQ2hhbmdlV29ya3NwYWNlU2V0dGluZ3MgPT0gbnVsbAotCQkJCXx8IGZDaGFuZ2VXb3Jrc3BhY2VTZXR0aW5ncy5pc0Rpc3Bvc2VkKCkpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCWZDaGFuZ2VXb3Jrc3BhY2VTZXR0aW5ncy5zZXRFbmFibGVkKCF1c2VQcm9qZWN0U2V0dGluZ3MoKSk7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gdXNlUHJvamVjdFNldHRpbmdzKCkgewotCQlyZXR1cm4gZlVzZVByb2plY3RTZXR0aW5ncy5nZXRTZWxlY3Rpb24oKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBlbmFibGVQcmVmZXJlbmNlQ29udGVudChib29sZWFuIGVuYWJsZSkgewotCQlpZiAoZW5hYmxlKSB7Ci0JCQlpZiAoZkJsb2NrRW5hYmxlU3RhdGUgIT0gbnVsbCkgewotCQkJCWZCbG9ja0VuYWJsZVN0YXRlLnJlc3RvcmUoKTsKLQkJCQlmQmxvY2tFbmFibGVTdGF0ZSA9IG51bGw7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZkJsb2NrRW5hYmxlU3RhdGUgPT0gbnVsbCkgewotCQkJCWZCbG9ja0VuYWJsZVN0YXRlID0gQ29udHJvbEVuYWJsZVN0YXRlCi0JCQkJCQkuZGlzYWJsZShmQ29uZmlndXJhdGlvbkJsb2NrQ29udHJvbCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBlbmFibGVQcm9qZWN0U3BlY2lmaWNTZXR0aW5ncygKLQkJCWJvb2xlYW4gdXNlUHJvamVjdFNwZWNpZmljU2V0dGluZ3MpIHsKLQkJZlVzZVByb2plY3RTZXR0aW5ncy5zZXRTZWxlY3Rpb24odXNlUHJvamVjdFNwZWNpZmljU2V0dGluZ3MpOwotCQllbmFibGVQcmVmZXJlbmNlQ29udGVudCh1c2VQcm9qZWN0U3BlY2lmaWNTZXR0aW5ncyk7Ci0JCXVwZGF0ZUxpbmtWaXNpYmlsaXR5KCk7Ci0JCWRvU3RhdHVzQ2hhbmdlZCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGRvU3RhdHVzQ2hhbmdlZCgpIHsKLQkJaWYgKHVzZVByb2plY3RTZXR0aW5ncygpKSB7Ci0JCQlJU3RhdHVzIHN0YXR1czsKLQkJCXN0YXR1cyA9IChwcm9wZXJ0eVBhZ2UuZ2V0RXJyb3IoKSA9PSBudWxsKSA/IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywKLQkJCQkJU2VydmljZVBvbGljeUFjdGl2YXRvclVJLlBMVUdJTl9JRCwgIiIpIDogcHJvcGVydHlQYWdlIC8vJE5PTi1OTFMtMSQKLQkJCQkJLmdldEVycm9yKCk7Ci0JCQl1cGRhdGVTdGF0dXMoc3RhdHVzKTsKLQkJfSBlbHNlIHsKLQkJCXVwZGF0ZVN0YXR1cyhuZXcgU3RhdHVzKElTdGF0dXMuT0ssCi0JCQkJCVNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSS5QTFVHSU5fSUQsICIiKSk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCB1cGRhdGVTdGF0dXMoSVN0YXR1cyBzdGF0dXMpIHsKLQkJYm9vbGVhbiB2YWxpZCA9IChzdGF0dXMgPT0gbnVsbCB8fCAhc3RhdHVzLm1hdGNoZXMoSVN0YXR1cy5FUlJPUikpOwotCQlzZXRWYWxpZCh2YWxpZCk7Ci0JCWFwcGx5VG9TdGF0dXNMaW5lKHRoaXMsIHN0YXR1cyk7Ci0JfQotCi0JLyoqCi0JICogQXBwbGllcyB0aGUgc3RhdHVzIHRvIHRoZSBzdGF0dXMgbGluZSBvZiBhIGRpYWxvZyBwYWdlLgotCSAqIEBwYXJhbSBwYWdlIHRoZSBkaWFsb2cgcGFnZQotCSAqIEBwYXJhbSBzdGF0dXMgdGhlIHN0YXR1cyB0byBhcHBseQotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBhcHBseVRvU3RhdHVzTGluZShEaWFsb2dQYWdlIHBhZ2UsIElTdGF0dXMgc3RhdHVzKSB7Ci0JCVN0cmluZyBtZXNzYWdlID0gc3RhdHVzLmdldE1lc3NhZ2UoKTsKLQkJaWYgKG1lc3NhZ2UgIT0gbnVsbCAmJiBtZXNzYWdlLmxlbmd0aCgpID09IDApIHsKLQkJCW1lc3NhZ2UgPSBudWxsOwotCQl9Ci0JCXN3aXRjaCAoc3RhdHVzLmdldFNldmVyaXR5KCkpIHsKLQkJY2FzZSBJU3RhdHVzLk9LOgotCQkJcGFnZS5zZXRNZXNzYWdlKG1lc3NhZ2UsIElNZXNzYWdlUHJvdmlkZXIuTk9ORSk7Ci0JCQlwYWdlLnNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJCWJyZWFrOwotCQljYXNlIElTdGF0dXMuV0FSTklORzoKLQkJCXBhZ2Uuc2V0TWVzc2FnZShtZXNzYWdlLCBJTWVzc2FnZVByb3ZpZGVyLldBUk5JTkcpOwotCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQlicmVhazsKLQkJY2FzZSBJU3RhdHVzLklORk86Ci0JCQlwYWdlLnNldE1lc3NhZ2UobWVzc2FnZSwgSU1lc3NhZ2VQcm92aWRlci5JTkZPUk1BVElPTik7Ci0JCQlwYWdlLnNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcGFnZS5zZXRNZXNzYWdlKG51bGwpOwotCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobWVzc2FnZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBmaW5hbCB2b2lkIG9wZW5Xb3Jrc3BhY2VQcmVmZXJlbmNlcyhPYmplY3QgZGF0YSkgewotCQlTdHJpbmcgaWQgPSBTZXJ2aWNlUG9saWNpZXNQcmVmZXJlbmNlUGFnZS5QQUdFX0lEOwotCQlQcmVmZXJlbmNlc1V0aWwuY3JlYXRlUHJlZmVyZW5jZURpYWxvZ09uKGdldFNoZWxsKCksIGlkLAotCQkJCW5ldyBTdHJpbmdbXSB7IGlkIH0sIGRhdGEpLm9wZW4oKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvcHJvcGVydGllcy9TZXJ2aWNlUG9saWN5UHJvcGVydHlUZXN0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvc2VydmljZS9wb2xpY3kvdWkvcHJvcGVydGllcy9TZXJ2aWNlUG9saWN5UHJvcGVydHlUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ1MDViYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3NlcnZpY2UvcG9saWN5L3VpL3Byb3BlcnRpZXMvU2VydmljZVBvbGljeVByb3BlcnR5VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlCi0gKiBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5zZXJ2aWNlLnBvbGljeS51aS5wcm9wZXJ0aWVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5Qcm9wZXJ0eVRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeVByb3BlcnR5VGVzdGVyIGV4dGVuZHMgUHJvcGVydHlUZXN0ZXIKLXsKLQotICBwdWJsaWMgYm9vbGVhbiB0ZXN0KE9iamVjdCByZWNlaXZlciwgU3RyaW5nIHByb3BlcnR5LCBPYmplY3RbXSBhcmdzLCBPYmplY3QgZXhwZWN0ZWRWYWx1ZSkKLSAgewotICAgIHJldHVybiBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKS5pc0VuYWJsZWQoIHJlY2VpdmVyICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUVuYWJsZU9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JRW5hYmxlT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YTAzNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JRW5hYmxlT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGVuYWJsZWRDbGFzcyBhdHRyaWJ1dGUgb2YgdGhlCi0gKiBlbmFibGVkIGVsZW1lbnQuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElFbmFibGVPcGVyYXRpb24KLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0ZWRQb2xpY2llcyB0aGUgc2VsZWN0ZWQgc2VydmljZSBwb2xpY2llcy4KLSAgICogQHJldHVybiByZXR1cm5zIHdoZXRoZXIgdGhlIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSUxhdW5jaE9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JTGF1bmNoT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNmMzZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JTGF1bmNoT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgSW5pdGlhbCBjb2RpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGxhdW5jaENsYXNzIGF0dHJpYnV0ZSBvZgotICogdGhlIGNvbXBsZXggZWxlbWVudC4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUxhdW5jaE9wZXJhdGlvbgotewotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIHRoaXMgY29tcGxleCBvcGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0ZWRQb2xpY2llcyBhIGxpc3Qgb2YgdGhlIHNlcnZpY2UgcG9saWNpZXMgdGhhdCB3ZXJlIHNlbGVjdGVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgbGF1bmNoKCBMaXN0PElTZXJ2aWNlUG9saWN5PiBzZWxlY3RlZFBvbGljaWVzICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lQb2xpY3lPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTFhY2NlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVBvbGljeU9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSByZXByZXNlbnRzIGEgU2VydmljZSBwb2xpY3kgb3BlcmF0aW9uIHRoYXQgaGFzIGJlZW4gZGVmaW5lZAotICogaW4gdGhlIHBsdWdpbi54bWwgbWV0YSBkYXRhLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJUG9saWN5T3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiAKLSAgICogSW5kaWNhdGVzIHRoZSBraW5kIG9mIFNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiB0aGF0IHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuCi0gICAqIDx1bD4KLSAgICogPGxpPmVudW1lcmF0aW9uOiBpbmRpY2F0ZXMgdGhhdCBhIGxpc3Qgb2YgZW51bWVyYXRlZCB2YWx1ZXMgaXMgYXNzb2NpYXRlZC48L2xpPgotICAgKiA8bGk+c2VsZWN0aW9uOiBpbmRpY2F0ZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggc29tZQotICAgKiBib29sZWFuIG9wZXJhdGlvbjwvbGk+Ci0gICAqIDxsaT4gaWNvblNlbGVjdGlvbjogdGhpcyBvcGVyYXRpb24gaXMgc2ltaWxhciB0byB0aGUgc2VsZWN0aW9uIG9wZXJhdGlvbgotICAgKiBleGNlcHQgdGhhdCBpdCB2aXN1YWwgc3RhdGUgaXMgcmVuZGVyZWQgdmlhIGFuIGljb24uPC9saT4KLSAgICogPGxpPmNvbXBsZXg6IGluZGljYXRlcyB0aGF0IHNvbWUgY29tcGxleCBvcGVyYXRpb24gaXMgcmVxdWlyZWQgdG8gcmVuZGVyCi0gICAqIGFuZCBwZXJzaXN0IHNvbWUgcG9saWN5IGRhdGEuICBUaGlzIG9wZXJhdGlvbiB3aWxsIGJlIHJlbmRlcmVkIHZpYSBhIFVJCi0gICAqIGJ1dHRvbi4gIFdoZW4gdGhpcyBidXR0b24gaXMgc2VsZWN0ZWQgdGhlIGxhdW5jaCBjbGFzcyBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgKiBvcGVyYXRpb24gaXMgY2FsbGVkLjwvbGk+ICAgCi0gICAqIDx1bC8+IAotICAgKi8KLSAgcHVibGljIGVudW0gT3BlcmF0aW9uS2luZCB7IGVudW1lcmF0aW9uLCBzZWxlY3Rpb24sIGljb25TZWxlY3Rpb24sIGNvbXBsZXggfTsKLSAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHVuaXF1ZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElkKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeSBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgSURlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBzaG91bGQgb25seSBhcHBlYXIKLSAgICogaW4gdGhlIHdvcmtzcGFjZSBzZXJ2aWNlIHBvbGljeSBwcmVmZXJlbmNlIHBhZ2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dvcmtzcGFjZU9ubHkoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBraW5kIG9mIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb25LaW5kIGdldE9wZXJhdGlvbktpbmQoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBlbnVtZXJhdGlvbiBJRCBpZiB0aGlzIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBpcwotICAgKiBhbiBlbnVtZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW51bWVyYXRpb25JZCgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgaWYgdGhpcyBpcyBhbiBlbnVtZXJhdGlvbiBpdCByZXR1cm5zIHRoZSBkZWZhdWx0IGl0ZW0gZm9yIHRoaXMKLSAgICogZW51bWVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRJdGVtKCk7Ci0gIAotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHNlcnZpY2UgcG9saWN5IG9wZXJhdGlvbiBpZiB0aGlzIGlzIGEgY29tcGxleCBvcGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0ZWRQb2xpY2llcyB0aGUgc2VsZWN0ZWQgc2VydmljZSBwb2xpY2llcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGxhdW5jaE9wZXJhdGlvbiggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcyApOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0ZWRQb2xpY2llcyB0aGUgc2VsZWN0ZWQgc2VydmljZSBwb2xpY2llcy4KLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCggTGlzdDxJU2VydmljZVBvbGljeT4gc2VsZWN0ZWRQb2xpY2llcyApOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wZXJhdGlvbi4KLSAgICogQWxsIHNlcnZpY2UgcG9saWN5IElEIHRoYXQgbWF0Y2ggdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gd2lsbCBiZSBhc3NvY2lhdGVkCi0gICAqIHdpdGggdGhpcyBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBvbGljeUlkUGF0dGVybigpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHNlcnZpY2UgcG9saWN5IGZvciB0aGlzIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBJU2VydmljZVBvbGljeSBnZXRTZXJ2aWNlUG9saWN5KCk7Ci0gIAotICAvKioKLSAgICogQHBhcmFtIHByb2plY3QgdGhlIHByb2plY3QgaWYgdGhpcyBpcyBwcm9qZWN0IHByb3BlcnR5IHBhZ2UgaXRlbS4KLSAgICogRm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UgY29udGV4dCBudWxsIHNob3VsZCBiZSBzcGVjaWZpZWQuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgY3VycmVudCBlbnVtZXJhdGlvbiBpdGVtIGZvciB0aGlzIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdGVJdGVtKCBJUHJvamVjdCBwcm9qZWN0ICk7Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgY3VycmVudCBlbnVtZXJhdGlvbiBpdGVtIGZvciB0aGlzIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIHByb2plY3QgdGhlIHByb2plY3QgaWYgdGhpcyBpcyBwcm9qZWN0IHByb3BlcnR5IHBhZ2UgaXRlbS4KLSAgICogRm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UgY29udGV4dCBudWxsIHNob3VsZCBiZSBzcGVjaWZpZWQuCi0gICAqIEBwYXJhbSBzdGF0ZUl0ZW0gdGhlIGl0ZW0uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGF0ZUl0ZW0oIElQcm9qZWN0IHByb2plY3QsIFN0cmluZyBzdGF0ZUl0ZW0gKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gdXNlcyBkZWZhdWx0IHN0YXRlIG9yIG5vdC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVXNlRGVmYXVsdERhdGEoKTsgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9JUXVpY2tGaXhBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFmZjc0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTIwICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLQotLyoqCi0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgYnkgZXh0ZW5kZXJzIHRvIGFkZCBxdWljayBmaXhlcyB0byB0aGUgc2VydmljZSBwb2xpY3kgdWkKLSAqIGZyYW1ld29yay4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVF1aWNrRml4QWN0aW9uCi17Ci0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgdGhpcyBhY3Rpb24gdG8gcmVzb2x2ZQotICAgKiBhIHBhcnRpY3VsYXIgc2VydmljZSBwb2xpY3kgcHJvYmxlbS4KLSAgICogCi0gICAqIEBwYXJhbSBwb2xpY3kgVGhlIHBvbGljeSB0aGF0IHRoaXMgcXVpY2sgZml4IGFwcGxpZXMgdG8uCi0gICAqLwotICBwdWJsaWMgdm9pZCBhY3Rpb24oIElTZXJ2aWNlUG9saWN5IHBvbGljeSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL0lRdWlja0ZpeEFjdGlvbkluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjY1NWI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvSVF1aWNrRml4QWN0aW9uSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTIwICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLQotcHVibGljIGludGVyZmFjZSBJUXVpY2tGaXhBY3Rpb25JbmZvCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgZGVzY3JpcHRvciBmb3IgdGhpcyBxdWljayBmaXguCi0gICAqLwotICBwdWJsaWMgSURlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGFjdGlvbiBmb3IgdGhpcyBxdWljayBmaXguCi0gICAqLwotICBwdWJsaWMgSVF1aWNrRml4QWN0aW9uIGdldEFjdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeUFjdGl2YXRvclVJLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNjA0MzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS9TZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWk7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3JVSSBleHRlbmRzIFBsdWdpbiBpbXBsZW1lbnRzIElTdGFydHVwIHsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSI7IC8vJE5PTi1OTFMtMSQKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkgcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkoKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgbmFtZWQgcmVzb3VyY2UKLQkgKiBhcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uCi0JICogQHJldHVybiBBbiBpbWFnZSBkZXNjcmlwdG9yLCBwb3NzaWJseSBudWxsLgotCSAqLwotCQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIG5hbWUpIHsKLQkJCXRyeSB7Ci0JCQkJVVJMIGluc3RhbGxVUkwgPSBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKTsgLy8kTk9OLU5MUy0xJAotCQkJCVVSTCBpbWFnZVVSTCA9IG5ldyBVUkwoaW5zdGFsbFVSTCwgbmFtZSk7Ci0JCQkJcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLQkJCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JICAgICByZXR1cm4gbnVsbDsKLQkgICB9Ci0JIH0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yVUkgZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0JCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvciggU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCBQTFVHSU5fSUQsIDAsIG1lc3NhZ2UsIGV4YyApOwotICAgIAotICAgIGdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coc3RhdHVzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpCi0gIHsKLSAgICAvLyBETyBub3RoaW5nLiAgQWxsIHdlIHdhbnQgdG8gZG8gaXMgZ2V0IHRoZSBwbHVnaW4gbG9hZGVkIGF0IFVJIHN0YXJ0IHRpbWUuCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvU2VydmljZVBvbGljeVBsYXRmb3JtVUkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FlYjRiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL1NlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIEluaXRpYWwgY29kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeVBsYXRmb3JtVUlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLQotLyoqCi0gKiAKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBnZXQgU2VydmljZSBwb2xpY3kgVUkgaW5mb3JtYXRpb24uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeVBsYXRmb3JtVUkKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU2VydmljZVBvbGljeVBsYXRmb3JtVUkgaW5zdGFuY2U7Ci0gIAotICBwcml2YXRlIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJSW1wbCBwbGF0Zm9ybVVJOwotICAKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSgpCi0gIHsKLSAgICBwbGF0Zm9ybVVJID0gbmV3IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJSW1wbCgpOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGlzIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtIFVJIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2VydmljZVBvbGljeVBsYXRmb3JtVUkgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYoIGluc3RhbmNlID09IG51bGwgKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYWxsIHRoZSBvcGVyYXRpb25zIGZvciBhbGwga25vd24gcG9saWNpZXMuCi0gICAqLwotICBwdWJsaWMgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBnZXRBbGxPcGVyYXRpb25zKCkKLSAgewotICAgIHJldHVybiBwbGF0Zm9ybVVJLmdldEFsbE9wZXJhdGlvbnMoKTsKLSAgfQotICAKLSAgcHVibGljIElQb2xpY3lPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCBJU2VydmljZVBvbGljeSBwb2xpY3ksIFN0cmluZyBpZCApCi0gIHsKLSAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IG9wZXJhdGlvbnMgPSBnZXRPcGVyYXRpb25zKCBwb2xpY3ksIHRydWUgKTsKLSAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgIHJlc3VsdCAgICAgPSBudWxsOwotICAgIAotICAgIGZvciggSVBvbGljeU9wZXJhdGlvbiBvcGVyYXRpb24gOiBvcGVyYXRpb25zICkKLSAgICB7Ci0gICAgICBpZiggb3BlcmF0aW9uLmdldElkKCkuZXF1YWxzKCBpZCApICkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gcG9saWN5IHRoZSBwb2xpY3kKLSAgICogQHBhcmFtIGlzV29ya3NwYWNlIHRydWUgaWYgdGhpcyBpcyBhIHByZWZlcmVuY2UgcGFnZSBjb250ZXh0Ci0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbGlzdCBvZiBvcGVyYXRpb25zIGZvciB0aGlzIHBvbGljeS4KLSAgICovCi0gIHB1YmxpYyBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGdldE9wZXJhdGlvbnMoIElTZXJ2aWNlUG9saWN5IHBvbGljeSwgYm9vbGVhbiBpc1dvcmtzcGFjZSApCi0gIHsKLSAgICByZXR1cm4gbmV3IFZlY3RvcjxJUG9saWN5T3BlcmF0aW9uPiggcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zRm9yUG9saWN5KCBwb2xpY3ksIGlzV29ya3NwYWNlICkgKTsKLSAgfQotICAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHBvbGljaWVzCi0gICAqIEBwYXJhbSBpc1dvcmtzcGFjZQotICAgKiBAcmV0dXJuIHJldHVybnMgYSBsaXN0IHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIG9wZXJhdGlvbnMuICBFYWNoIGxpc3QKLSAgICogYXMgdGhlIHRvcCBsZXZlbCBjb250YWlucyBsaXN0IG9mIElQb2xpY3lPcGVyYXRpb25zIHRoYXQgcmVmZXJlbmNlIHRoZSAKLSAgICogc2FtZSBiYXNlIG9wZXJhdGlvbi4gIEhvd2V2ZXIsIHRoZXkgd2lsbCBlYWNoIGhhdmUgZGlmZmVyZW50IGFzc29jaWF0ZWQKLSAgICogcG9saWNpZXMuCi0gICAqLwotICBwdWJsaWMgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBnZXRPcGVyYXRpb25zTGlzdCggTGlzdDxJU2VydmljZVBvbGljeT4gcG9saWNpZXMsIGJvb2xlYW4gaXNXb3Jrc3BhY2UgKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uc0xpc3QoIHBvbGljaWVzLCBpc1dvcmtzcGFjZSApOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogQHJldHVybiByZXR1cm5zIGEgbGlzdCBvZiBxdWljayBmaXhlcyBmb3IgdGhpcyBzdGF0dXMgb2JqZWN0LiAgSWYKLSAgICogbm8gcXVpY2sgZml4ZXMgYXJlIGF2YWlsYWJsZSBhbiBlbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPiBnZXRRdWlja0ZpeGVzKCBJU3RhdHVzIHN0YXR1cyApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1VSS5nZXRRdWlja0ZpeGVzKCBzdGF0dXMgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91aS91dGlscy9BY3Rpdml0eVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2M2JlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL0FjdGl2aXR5VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMiAgIDIwOTg1OCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkudXRpbHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aXZpdGllcy5JQWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGl2aXRpZXMuSUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotCi1wdWJsaWMgY2xhc3MgQWN0aXZpdHlVdGlscwotewotICBwdWJsaWMgc3RhdGljIElGaWx0ZXIgZ2V0Q3VycmVudEFjdGl2aXRpZXNGaWx0ZXIoKQotICB7Ci0gICAgZmluYWwgSVdvcmtiZW5jaCAgICAgICB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotICAgIGZpbmFsIElBY3Rpdml0eU1hbmFnZXIgbWFuYWdlciAgID0gd29ya2JlbmNoLmdldEFjdGl2aXR5U3VwcG9ydCgpLmdldEFjdGl2aXR5TWFuYWdlcigpOwotICAgICAgICAgCi0gICAgcmV0dXJuIG5ldyBJRmlsdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0gICAgICB7IAotICAgICAgICBJSWRlbnRpZmllciBpZGVudGlmaWVyID0gbWFuYWdlci5nZXRJZGVudGlmaWVyKCBwb2xpY3kuZ2V0SWQoKSApOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgPT0gbnVsbCA/IGZhbHNlIDogaWRlbnRpZmllci5pc0VuYWJsZWQoKTsKLSAgICAgIH0gIAotICAgIH07Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3VpL3V0aWxzL1NlcnZpY2VVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjViNTk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdWkvdXRpbHMvU2VydmljZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAyMTEgICAyMTg1MjAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS51dGlsczsKLQotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlVXRpbHMKLXsKLSAgcHVibGljIHN0YXRpYyBMaXN0PElTZXJ2aWNlUG9saWN5PiBzb3J0TGlzdCggTGlzdDxJU2VydmljZVBvbGljeT4gdW5zb3J0ZWRMaXN0ICkKLSAgewotICAgIFRyZWVTZXQ8SVNlcnZpY2VQb2xpY3k+IHNvcnRlZFNldCA9IG5ldyBUcmVlU2V0PElTZXJ2aWNlUG9saWN5PiggbmV3IENvbXBhcmVTZXJ2aWNlUG9saWN5KCkgKTsKLSAgICBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+ICBzb3J0ZWRMaXN0ID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICAKLSAgICBzb3J0ZWRTZXQuYWRkQWxsKCB1bnNvcnRlZExpc3QgKTsKLSAgICBzb3J0ZWRMaXN0LmFkZEFsbCggc29ydGVkU2V0ICk7Ci0gICAgCi0gICAgcmV0dXJuIHNvcnRlZExpc3Q7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIENvbXBhcmVTZXJ2aWNlUG9saWN5IGltcGxlbWVudHMgQ29tcGFyYXRvcjxJU2VydmljZVBvbGljeT4KLSAgewotICAgIHB1YmxpYyBpbnQgY29tcGFyZShJU2VydmljZVBvbGljeSBhcmcwLCBJU2VydmljZVBvbGljeSBhcmcxKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lMCA9IGFyZzAuZ2V0RGVzY3JpcHRvcigpLmdldExvbmdOYW1lKCk7Ci0gICAgICBTdHJpbmcgbmFtZTEgPSBhcmcxLmdldERlc2NyaXB0b3IoKS5nZXRMb25nTmFtZSgpOwotICAgICAgCi0gICAgICByZXR1cm4gbmFtZTAuY29tcGFyZVRvKCBuYW1lMSApOyAKLSAgICB9ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0ZTg2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNzk2OGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjA4MTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI1RodSBOb3YgMjkgMTE6NTk6MzMgRVNUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI2MmE4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5O3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3IKLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnM7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LAotIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnV0aWxzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVjYTRjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgc2NoZW1hLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzBhZmM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9U2VydmljZSBwb2xpY3kKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotU0VSVklDRV9QT0xJQ1lfTkFNRT1TZXJ2aWNlIHBvbGljeQotCi1UUlVFX1NIT1JUTkFNRT10cnVlCi1GQUxTRV9TSE9SVE5BTUU9ZmFsc2UKLUlHTk9SRV9TSE9SVE5BTUU9aWdub3JlCi1XQVJOX1NIT1JUTkFNRT13YXJuCi1FUlJPUl9TSE9SVE5BTUU9ZXJyb3IKLUlHTk9SRV9MT05HTkFNRT1JZ25vcmUKLVdBUk5fTE9OR05BTUU9V2FybgotRVJST1JfTE9OR05BTUU9RXJyb3IKLQotU1VHX0lHTk9SRV9TSE9SVE5BTUU9aWdub3JlCi1TVUdfU1VHR0VTVF9TSE9SVE5BTUU9c3VnZ2VzdAotU1VHX1JFUVVJUkVfU0hPUlROQU1FPXJlcXVpcmUKLVNVR19JR05PUkVfTE9OR05BTUU9SWdub3JlIGNvbXBsaWFuY2UKLVNVR19TVUdHRVNUX0xPTkdOQU1FPVN1Z2dlc3QgY29tcGxpYW5jZQotU1VHX1JFUVVJUkVfTE9OR05BTUU9UmVxdWlyZSBjb21wbGlhbmNlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhiYmM2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0ic2VydmljZXBvbGljeSIgbmFtZT0iJVNFUlZJQ0VfUE9MSUNZX05BTUUiIHNjaGVtYT0ic2NoZW1hL3NlcnZpY2VQb2xpY3kuZXhzZCIvPgotICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuc2VydmljZXBvbGljeSI+Ci0gICAgIDxzZXJ2aWNlUG9saWN5PgotICAgICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuYm9vbGVhbkVudW0iIAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJvcmcuZWNsaXBzZS53c3QudHJ1ZSI+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0LnRydWUiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IiVUUlVFX1NIT1JUTkFNRSIgLz4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3QuZmFsc2UiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IiVGQUxTRV9TSE9SVE5BTUUiIC8+Ci0gICAgICAgPC9lbnVtZXJhdGlvbj4KLSAgICAgICAKLSAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIiAKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ib3JnLmVjbGlwc2Uud3N0Lmlnbm9yZSI+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0Lmlnbm9yZSIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iJUlHTk9SRV9TSE9SVE5BTUUiIGxvbmdOYW1lPSIlSUdOT1JFX0xPTkdOQU1FIiAvPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC53YXJuIgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSIlV0FSTl9TSE9SVE5BTUUiIGxvbmdOYW1lPSIlV0FSTl9MT05HTkFNRSIgLz4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiCi0gICAgICAgICAgICAgICBzaG9ydE5hbWU9IiVFUlJPUl9TSE9SVE5BTUUiIGxvbmdOYW1lPSIlRVJST1JfTE9OR05BTUUiIC8+Ci0gICAgICAgPC9lbnVtZXJhdGlvbj4KLSAgICAgICAKLSAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5zdWdnZXN0aW9uRW51bSIgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Im9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIj4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iJVNVR19JR05PUkVfU0hPUlROQU1FIiBsb25nTmFtZT0iJVNVR19JR05PUkVfTE9OR05BTUUiIC8+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0IgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSIlU1VHX1NVR0dFU1RfU0hPUlROQU1FIiBsb25nTmFtZT0iJVNVR19TVUdHRVNUX0xPTkdOQU1FIiAvPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIKLSAgICAgICAgICAgICAgIHNob3J0TmFtZT0iJVNVR19SRVFVSVJFX1NIT1JUTkFNRSIgbG9uZ05hbWU9IiVTVUdfUkVRVUlSRV9MT05HTkFNRSIgLz4KLSAgICAgICA8L2VudW1lcmF0aW9uPgotICAgICA8L3NlcnZpY2VQb2xpY3k+Ci0gICA8L2V4dGVuc2lvbj4gICAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc2NoZW1hL3NlcnZpY2VQb2xpY3kuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NjaGVtYS9zZXJ2aWNlUG9saWN5LmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZTgxOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc2NoZW1hL3NlcnZpY2VQb2xpY3kuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeSIgaWQ9InNlcnZpY2VQb2xpY3kiIG5hbWU9IlNlcnZpY2UgcG9saWN5Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBleHRlbmRlcnMgdG8gZGVmaW5lIHNlcnZpY2UgcG9saWNpZXMuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWE6Ly9vcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zL3NjaGVtYS9leHByZXNzaW9uTGFuZ3VhZ2UuZXhzZCIvPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzZXJ2aWNlUG9saWN5IiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InNlcnZpY2VQb2xpY3kiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJwb2xpY3kiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImVudW1lcmF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJsb2FkTGlzdGVuZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImVuYWJsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0icG9saWN5Ij4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZGVzY3JpcHRvciIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJyZWxhdGlvbnNoaXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic3RhdGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBhcmVudFBvbGljeUlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFyZW50IHBvbGljeSBpZCBmb3IgdGhpcyBwb2xpY3kuICBJZiB0aGlzIGlzIGEgcm9vdCBwb2xpY3kgdGhpcyBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIHVuaXF1ZSBpZCBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJlbnVtTGlzdElkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIElmIHRoaXMgcG9saWN5JmFwb3M7cyBzdGF0ZSBpcyBhc3NvY2lhdGVkIHdpdGggYW4gZW51bWVyYXRpb24gdGhlbiB0aGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIGlkIG9mIHRoaXMgZW51bWVyYXRpb24uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGVmYXVsdEVudW1JZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzaG91bGQgb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlIGVudW1MaXN0SWQgaXMgYWxzbyBzcGVjaWZpZWQuICBJdCBpcyB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGVudW0gdmFsdWUgZGVmaW5lZCBieSB0aGUgZW51bWVyYXRpb24uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibXV0YWJsZSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJkZWZhdWx0IiB2YWx1ZT0iZmFsc2UiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEluZGljYXRlcyBpZiB0aGlzIHBvbGljeSBoYXMgbXV0YWJsZSBkYXRhIG9yIG5vdC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iZGVzY3JpcHRvciI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgZGVzY3JpcHRpb24gb2YgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzaG9ydE5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIHNob3J0IG5hbWUgb2YgdGhpcyBzZXJ2aWNlIHBvbGljeS4gIE5vdGU6IGlmIGEgc2hvcnQgbmFtZSBpcyBub3Qgc3BlY2lmaWVkIGl0IGlzIGRlZmF1bHRlZCB0byB0aGUgdmFsdWUgb2YgdGhlIGxvbmcgbmFtZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsb25nTmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbG9uZyBuYW1lIG9mIHRoaXMgc2VydmljZSBwb2xpY3kuICBOb3RlOiBpZiBhIGxvbmcgbmFtZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBpdCBpcyBkZWZhdWx0ZWQgdG8gdGhlIHNob3J0TmFtZSB2YWx1ZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb250ZXh0SGVscElkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjb250ZXh0IGhlbHAgaWQgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kgaWYgaXQgaXMgcmVxdWlyZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWNvblBhdGgiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBwbHVnaW4gcmVsYXRpdmUgcGF0aCB0byBzb21lIGljb24gZmlsZSBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0icmVsYXRpb25zaGlwIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBTcGVjaWZpZXMgYSBzdGF0ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIHNlcnZpY2UgcG9saWN5IGFuZCB0aGUgc3RhdGVzIG9mIG90aGVyIHNlcnZpY2UgcG9saWNpZXMuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InRhcmdldFBvbGljeSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZW51bUxpc3QiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InRhcmdldFBvbGljeSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Iml0ZW1MaXN0IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJlbnVtZXJhdGlvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9Iml0ZW0iIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlZmF1bHQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9Iml0ZW0iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzaG9ydE5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibG9uZ05hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImxvYWRMaXN0ZW5lciI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIgaW50ZXJmYWNlLiAgVGhlIGxvYWQgbWV0aG9kIG9mIHRoaXMgY2xhc3Mgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgU2VydmljZVBvbGljeSBmcmFtZXdvcmsgaXMgZmlyc3QgbG9hZGVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJzdGF0ZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IGFsbG93cyB0aGUgZXh0ZW5kZXIgdG8gZGVmaW5lIHN0YXRlIGRhdGEgZm9yIHRoaXMgcG9saWN5LgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJrZXkiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGtleSBmb3IgdGhpcyBzdGF0ZSBkYXRhLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGlzIHN0YXRlIGRhdGEuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIDEuMAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvRGVzY3JpcHRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvRGVzY3JpcHRvckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0ZDM3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L0Rlc2NyaXB0b3JJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDMwICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3k7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci0KLXB1YmxpYyBjbGFzcyBEZXNjcmlwdG9ySW1wbCBpbXBsZW1lbnRzIElEZXNjcmlwdG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nICBzaG9ydE5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nICBsb25nTmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgIGRlc2NyaXB0aW9uOwotICBwcml2YXRlIFN0cmluZyAgaWNvblBhdGg7Ci0gIHByaXZhdGUgU3RyaW5nICBpY29uQnVuZGxlSWQ7Ci0gIHByaXZhdGUgU3RyaW5nICBjb250ZXh0SGVscElkOwotICBwcml2YXRlIGJvb2xlYW4gaGFzQ2hhbmdlZCA9IGZhbHNlOwotICAgIAotICBwdWJsaWMgYm9vbGVhbiBoYXNDaGFuZ2VkKCkKLSAgewotICAgIHJldHVybiBoYXNDaGFuZ2VkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZXNldEhhc0NoYW5nZWQoKQotICB7Ci0gICAgaGFzQ2hhbmdlZCA9IGZhbHNlOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnROYW1lKCkKLSAgewotICAgIHJldHVybiBzaG9ydE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNob3J0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuc2hvcnROYW1lID0gbmFtZTsKLSAgICAKLSAgICBpZiggbG9uZ05hbWUgPT0gbnVsbCApIGxvbmdOYW1lID0gc2hvcnROYW1lOwotICAgIAotICAgIGhhc0NoYW5nZWQgPSB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldExvbmdOYW1lKCkKLSAgewotICAgIHJldHVybiBsb25nTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldExvbmdOYW1lKFN0cmluZyBsb25nTmFtZSkKLSAgewotICAgIHRoaXMubG9uZ05hbWUgPSBsb25nTmFtZTsKLSAgICAKLSAgICBpZiggc2hvcnROYW1lID09IG51bGwgKSBzaG9ydE5hbWUgPSBsb25nTmFtZTsKLSAgICAKLSAgICBoYXNDaGFuZ2VkID0gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pCi0gIHsKLSAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgaGFzQ2hhbmdlZCA9IHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWNvblBhdGgoKQotICB7Ci0gICAgcmV0dXJuIGljb25QYXRoOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJY29uUGF0aChTdHJpbmcgaWNvblBhdGgpCi0gIHsKLSAgICB0aGlzLmljb25QYXRoID0gaWNvblBhdGg7Ci0gICAgaGFzQ2hhbmdlZCA9IHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWNvbkJ1bmRsZUlkKCkKLSAgewotICAgIHJldHVybiBpY29uQnVuZGxlSWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEljb25CdW5kbGVJZChTdHJpbmcgaWNvbkJ1bmRsZUlkKQotICB7Ci0gICAgdGhpcy5pY29uQnVuZGxlSWQgPSBpY29uQnVuZGxlSWQ7Ci0gICAgaGFzQ2hhbmdlZCA9IHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGV4dEhlbHBJZCgpCi0gIHsKLSAgICByZXR1cm4gY29udGV4dEhlbHBJZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHRIZWxwSWQoU3RyaW5nIGNvbnRleHRIZWxwSWQpCi0gIHsKLSAgICB0aGlzLmNvbnRleHRIZWxwSWQgPSBjb250ZXh0SGVscElkOwotICAgIGhhc0NoYW5nZWQgPSB0cnVlOwotICB9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9FbnVtZXJhdGlvblN0YXRlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9FbnVtZXJhdGlvblN0YXRlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmQwODQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvRW51bWVyYXRpb25TdGF0ZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlRW51bTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci0KLXB1YmxpYyBjbGFzcyBFbnVtZXJhdGlvblN0YXRlSW1wbCBpbXBsZW1lbnRzIElQb2xpY3lTdGF0ZUVudW0KLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVkFMVUUgPSBJUG9saWN5U3RhdGUuRGVmYXVsdFZhbHVlS2V5OyAgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgZW51bUlkOwotICBwcml2YXRlIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBlbnVtTGlzdDsKLSAgcHJpdmF0ZSBJUG9saWN5U3RhdGUgICAgICAgICAgICAgICAgc3RhdGU7Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRJZDsKLSAgCi0gIHB1YmxpYyBFbnVtZXJhdGlvblN0YXRlSW1wbCggU3RyaW5nIGVudW1JZCwgU3RyaW5nIGRlZmF1bHRJZCwgSVBvbGljeVN0YXRlIHN0YXRlICkKLSAgewotICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgIAotICAgIHRoaXMuZW51bUlkICAgID0gZW51bUlkOwotICAgIHRoaXMuZW51bUxpc3QgID0gcGxhdGZvcm0uZ2V0U3RhdGVFbnVtZXJhdGlvbiggZW51bUlkICk7Ci0gICAgdGhpcy5zdGF0ZSAgICAgPSBzdGF0ZTsKLSAgICB0aGlzLmRlZmF1bHRJZCA9IGVudW1MaXN0LmdldCgwKS5nZXRJZCgpOwotICAgCi0gICAgaWYoIGRlZmF1bHRJZCAhPSBudWxsICkKLSAgICB7Ci0gICAgICB0aGlzLmRlZmF1bHRJZCA9IGRlZmF1bHRJZDsKLSAgICAgIHN0YXRlLnB1dERlZmF1bHRWYWx1ZSggVkFMVUUsIGRlZmF1bHRJZCwgZmFsc2UgKTsgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3IoIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBlbnVtSXRlbSA6IGVudW1MaXN0ICkKLSAgICAgIHsKLSAgICAgICAgaWYoIGVudW1JdGVtLmlzRGVmYXVsdCgpICkKLSAgICAgICAgewotICAgICAgICAgIHRoaXMuZGVmYXVsdElkID0gZW51bUl0ZW0uZ2V0SWQoKTsKLSAgICAgICAgICBzdGF0ZS5wdXREZWZhdWx0VmFsdWUoIFZBTFVFLCAgdGhpcy5kZWZhdWx0SWQsIGZhbHNlICk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEVudW1JZCgpCi0gIHsKLSAgICByZXR1cm4gZW51bUlkOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0SWQoKQotICB7Ci0gICAgcmV0dXJuIGRlZmF1bHRJZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q3VycmVudEl0ZW0oIFN0cmluZyBpdGVtSWQgKQotICB7Ci0gICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZW51bUl0ZW0gOiBlbnVtTGlzdCApCi0gICAgewotICAgICAgU3RyaW5nIGVudW1JdGVtSWQgPSBlbnVtSXRlbS5nZXRJZCgpOwotICAgICAgCi0gICAgICBpZiggZW51bUl0ZW1JZC5lcXVhbHMoIGl0ZW1JZCApICkKLSAgICAgIHsKLSAgICAgICAgc3RhdGUucHV0VmFsdWUoIFZBTFVFLCBlbnVtSXRlbUlkICk7IAotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZ2V0Q3VycmVudEl0ZW0oKQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgIGN1cnJlbnRFbnVtID0gc3RhdGUuZ2V0VmFsdWUoIFZBTFVFICk7Ci0gICAgSVN0YXRlRW51bWVyYXRpb25JdGVtIGN1cnJlbnRJdGVtID0gbnVsbDsKLSAgICAKLSAgICBmb3IoIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBlbnVtSXRlbSA6IGVudW1MaXN0ICkKLSAgICB7Ci0gICAgICBpZiggZW51bUl0ZW0uZ2V0SWQoKS5lcXVhbHMoIGN1cnJlbnRFbnVtICkgKQotICAgICAgewotICAgICAgICBjdXJyZW50SXRlbSA9IGVudW1JdGVtOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGN1cnJlbnRJdGVtOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L0xvY2FsVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvTG9jYWxVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmYxZWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvTG9jYWxVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAzMCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDMyNSAgIDIyMjA5NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5RW51bWVyYXRpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5UmVsYXRpb25zaGlwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuQmFja2luZ1N0b3JlRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgTG9jYWxVdGlscwotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTRV9LRVkgICAgICA9ICJvcmcuZWNsaXBzZS53c3QuIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQUxfSURTX0tFWSA9ICJsb2NhbElkcyI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkVOVF9LRVkgICAgPSAicGFyZW50SWQiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNVVRBQkxFX0tFWSAgID0gIm11dGFibGUiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERVNDUl9LRVkgICAgID0gImRlc2NyaXB0aW9uIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9OR05BTUVfS0VZICA9ICJsb25nbmFtZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIT1JUTkFNRV9LRVkgPSAic2hvcnRuYW1lIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNPTlBBVEhfS0VZICA9ICJpY29ucGF0aCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElDT05CVU5EX0tFWSAgPSAiaWNvbmJ1bmRsZWlkIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVMUElEX0tFWSAgICA9ICJjb250ZXh0aGVscGlkIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5VTUxJU1RfS0VZICA9ICJlbnVtbGlzdGlkIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGRU5VTV9LRVkgICA9ICJkZWZhdWx0ZW51bWlkIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX0tFWSAgICAgICA9ICJyZWwiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfU1VGRklYID0gIi50YXJnZXQiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTT1VSQ0VfU1VGRklYID0gIi5zb3VyY2UiOyAvLyROT04tTkxTLTEkCi0gIAotICBwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXRMb2NhbFBvbGljeUlkcygpCi0gIHsKLSAgICBMaXN0PFN0cmluZz4gICAgICAgIHJlc3VsdCAgICAgID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7Ci0gICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IGdldFByZWZlcmVuY2VzKCk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBrZXkgICAgICAgICA9IEJBU0VfS0VZICsgTE9DQUxfSURTX0tFWTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgIGlkc1ZhbHVlICAgID0gcHJlZmVyZW5jZXMuZ2V0KCBrZXkgLCAiIiApOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgaWYoICFpZHNWYWx1ZS5lcXVhbHMoICIiICkgKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmVzdWx0ID0gY3JlYXRlU3RyaW5nTGlzdCggaWRzVmFsdWUgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIHNhdmVMb2NhbElkcyggTGlzdDxTdHJpbmc+IGxvY2FsSWRzICkKLSAgeyAKLSAgICBJRWNsaXBzZVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gZ2V0UHJlZmVyZW5jZXMoKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgIGtleSAgICAgICAgID0gQkFTRV9LRVkgKyBMT0NBTF9JRFNfS0VZOwotICAgIAotICAgIGlmKCBsb2NhbElkcy5zaXplKCkgPiAwICkKLSAgICB7Ci0gICAgICBwcmVmZXJlbmNlcy5wdXQoIGtleSwgY3JlYXRlU3BhY2VEZWxpbWl0ZWRTdHJpbmcoIGxvY2FsSWRzICkgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCByZW1vdmVBbGxQcmVmZXJlbmNlUG9saWNpZXMoIFN0cmluZyBzdGFydHNXaXRoLCBJRWNsaXBzZVByZWZlcmVuY2VzIHByZWZzICkKLSAgewotICAgIGlmKCBzdGFydHNXaXRoID09IG51bGwgKSBzdGFydHNXaXRoID0gQkFTRV9LRVk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IHByZWZzID09IG51bGwgPyBnZXRQcmVmZXJlbmNlcygpIDogcHJlZnM7Ci0gICAgICBTdHJpbmdbXSAgICAgICAgICAgIGtleXMgICAgICAgID0gcHJlZmVyZW5jZXMua2V5cygpOwotICAgICAgCi0gICAgICBmb3IoIFN0cmluZyBrZXkgOiBrZXlzICkKLSAgICAgIHsKLSAgICAgICAgaWYoIGtleS5zdGFydHNXaXRoKCBzdGFydHNXaXRoICkgKQotICAgICAgICB7Ci0gICAgICAgICAgcHJlZmVyZW5jZXMucmVtb3ZlKCBrZXkgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggQmFja2luZ1N0b3JlRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5sb2dFcnJvciggIkVycm9yIGxvYWRpbmcgc2VydmljZSBwb2xpY3kgbG9jYWwgcHJlZmVyZW5jZXMuIiwgZXhjKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIHNhdmVMb2NhbFBvbGljeSggU2VydmljZVBvbGljeUltcGwgcG9saWN5ICkKLSAgewotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBnZXRQcmVmZXJlbmNlcygpOwotICAgIFN0cmluZyAgICAgICAgICAgICAgcG9saWN5SWQgICAgPSBwb2xpY3kuZ2V0SWQoKTsKLSAgICBJRGVzY3JpcHRvciAgICAgICAgIGRlc2NyaXB0b3IgID0gcG9saWN5LmdldERlc2NyaXB0b3IoKTsKLSAgICBJU2VydmljZVBvbGljeSAgICAgIHBhcmVudCAgICAgID0gcG9saWN5LmdldFBhcmVudFBvbGljeSgpOwotICAgIAotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgUEFSRU5UX0tFWSwgIHBhcmVudCA9PSBudWxsID8gbnVsbCA6IHBhcmVudC5nZXRJZCgpICk7Ci0gICAgc2F2ZSggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBNVVRBQkxFX0tFWSwgIiIgKyBwb2xpY3kuZ2V0UG9saWN5U3RhdGUoKS5pc011dGFibGUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgc2F2ZSggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBFTlVNTElTVF9LRVksIHBvbGljeS5nZXRFbnVtTGlzdElkKCkgKTsKLSAgICBzYXZlKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIERFRkVOVU1fS0VZLCBwb2xpY3kuZ2V0RGVmYXVsdEVudW1JZCgpICk7Ci0gICAgc2F2ZSggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBERVNDUl9LRVksIGRlc2NyaXB0b3IuZ2V0RGVzY3JpcHRpb24oKSApOwotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgU0hPUlROQU1FX0tFWSwgZGVzY3JpcHRvci5nZXRTaG9ydE5hbWUoKSApOwotICAgIHNhdmUoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgTE9OR05BTUVfS0VZLCBkZXNjcmlwdG9yLmdldExvbmdOYW1lKCkgKTsKLSAgICBzYXZlKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIElDT05QQVRIX0tFWSwgZGVzY3JpcHRvci5nZXRJY29uUGF0aCgpICk7Ci0gICAgc2F2ZSggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBJQ09OQlVORF9LRVksIGRlc2NyaXB0b3IuZ2V0SWNvbkJ1bmRsZUlkKCkgKTsKLSAgICBzYXZlKCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIEhFTFBJRF9LRVksIGRlc2NyaXB0b3IuZ2V0Q29udGV4dEhlbHBJZCgpICk7Ci0gICAgc2F2ZVJlbGF0aW9uc2hpcHMoIHByZWZlcmVuY2VzLCBwb2xpY3lJZCwgcG9saWN5LmdldFJlbGF0aW9uc2hpcHMoKSApOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9hZExvY2FsUG9saWN5KCBTdHJpbmcgcG9saWN5SWQsIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwgcGxhdGZvcm0gKQotICB7Ci0gICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IGdldFByZWZlcmVuY2VzKCk7Ci0gICAgU2VydmljZVBvbGljeUltcGwgICBwb2xpY3kgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koIHBvbGljeUlkICk7Ci0gICAgRGVzY3JpcHRvckltcGwgICAgICBkZXNjcmlwdG9yICA9IChEZXNjcmlwdG9ySW1wbClwb2xpY3kuZ2V0RGVzY3JpcHRvcigpOwotICAgIFN0cmluZyAgICAgICAgICAgICAgcGFyZW50SWQgICAgPSBwcmVmZXJlbmNlcy5nZXQoIGNyZWF0ZUtleSggcG9saWN5SWQsIFBBUkVOVF9LRVkpLCBudWxsICk7Ci0gICAgCi0gICAgaWYoIHBhcmVudElkICE9IG51bGwgKQotICAgIHsKLSAgICAgIElTZXJ2aWNlUG9saWN5IHBhcmVudFBvbGljeSA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koIHBhcmVudElkICk7Ci0gICAgICAKLSAgICAgIHBvbGljeS5zZXRQYXJlbnQoIChTZXJ2aWNlUG9saWN5SW1wbClwYXJlbnRQb2xpY3kgKTsKLSAgICB9Ci0gICAgCi0gICAgcG9saWN5LmdldFBvbGljeVN0YXRlKCkuc2V0TXV0YWJsZSggcHJlZmVyZW5jZXMuZ2V0Qm9vbGVhbiggY3JlYXRlS2V5KCBwb2xpY3lJZCwgTVVUQUJMRV9LRVkpLCB0cnVlICkgKTsKLSAgICBwb2xpY3kuc2V0RW51bUxpc3RJZCggcHJlZmVyZW5jZXMuZ2V0KCBjcmVhdGVLZXkoIHBvbGljeUlkLCBFTlVNTElTVF9LRVkpLCBudWxsICkgKTsKLSAgICBwb2xpY3kuc2V0RGVmYXVsdEVudW1JZCggcHJlZmVyZW5jZXMuZ2V0KCBjcmVhdGVLZXkoIHBvbGljeUlkLCBERUZFTlVNX0tFWSksIG51bGwgKSApOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRpb24oIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgREVTQ1JfS0VZKSwgbnVsbCApICk7Ci0gICAgZGVzY3JpcHRvci5zZXRTaG9ydE5hbWUoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgU0hPUlROQU1FX0tFWSksIG51bGwgKSApOwotICAgIGRlc2NyaXB0b3Iuc2V0TG9uZ05hbWUoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgTE9OR05BTUVfS0VZKSwgbnVsbCApICk7Ci0gICAgZGVzY3JpcHRvci5zZXRJY29uUGF0aCggcHJlZmVyZW5jZXMuZ2V0KCBjcmVhdGVLZXkoIHBvbGljeUlkLCBJQ09OUEFUSF9LRVkpLCBudWxsICkgKTsKLSAgICBkZXNjcmlwdG9yLnNldEljb25CdW5kbGVJZCggcHJlZmVyZW5jZXMuZ2V0KCBjcmVhdGVLZXkoIHBvbGljeUlkLCBJQ09OQlVORF9LRVkpLCBudWxsICkgKTsKLSAgICBkZXNjcmlwdG9yLnNldENvbnRleHRIZWxwSWQoIHByZWZlcmVuY2VzLmdldCggY3JlYXRlS2V5KCBwb2xpY3lJZCwgSEVMUElEX0tFWSksIG51bGwgKSApOwotICAgIHBvbGljeS5zZXRSZWxhdGlvbnNoaXBzKCBsb2FkUmVsYXRpb25zaGlwcyggcHJlZmVyZW5jZXMsIHBvbGljeUlkLCBwbGF0Zm9ybSApICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIElFY2xpcHNlUHJlZmVyZW5jZXMgZ2V0UHJlZmVyZW5jZXMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBJbnN0YW5jZVNjb3BlKCkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBjcmVhdGVTdHJpbmdMaXN0KCBTdHJpbmcgc3BhY2VEZWxpbWl0ZWRTdHJpbmcgKQotICB7Ci0gICAgU3RyaW5nW10gc3BsaXRWYWx1ZXMgPSBzcGFjZURlbGltaXRlZFN0cmluZy5zcGxpdCggIiAiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICByZXR1cm4gQXJyYXlzLmFzTGlzdCggc3BsaXRWYWx1ZXMgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVNwYWNlRGVsaW1pdGVkU3RyaW5nKCBMaXN0PFN0cmluZz4gc3RyaW5nTGlzdCApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBzdHJpbmdMaXN0LnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgU3RyaW5nIGlkID0gc3RyaW5nTGlzdC5nZXQoIGluZGV4ICk7Ci0gICAgICAKLSAgICAgIGJ1ZmZlci5hcHBlbmQoIGlkICk7Ci0gICAgICAKLSAgICAgIGlmKCBpbmRleCA8IChzdHJpbmdMaXN0LnNpemUoKSAtIDEpICkgYnVmZmVyLmFwcGVuZCggJyAnICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyB2b2lkIHNhdmVSZWxhdGlvbnNoaXBzKCBJRWNsaXBzZVByZWZlcmVuY2VzIHByZWZlcmVuY2VzLCBTdHJpbmcgcG9saWN5SWQsIExpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwcyApCi0gIHsKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcmVsYXRpb25zaGlwcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIElQb2xpY3lSZWxhdGlvbnNoaXAgICAgICAgICAgcmVsYXRpb25zaGlwICAgPSByZWxhdGlvbnNoaXBzLmdldCggaW5kZXggKTsKLSAgICAgIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgICAgICAgcG9saWN5TGlzdCAgICAgPSByZWxhdGlvbnNoaXAuZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCk7Ci0gICAgICBMaXN0PElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+IHRhcmdldFBvbGljaWVzID0gcmVsYXRpb25zaGlwLmdldFJlbGF0ZWRQb2xpY2llcygpOwotICAgICAgCi0gICAgICBzYXZlUG9saWN5UmVsYXRpb25zaGlwKCBpbmRleCsxLCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIHBvbGljeUxpc3QsIFNPVVJDRV9TVUZGSVggKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgdGFyZ2V0SW5kZXggPSAwOyB0YXJnZXRJbmRleCA8IHRhcmdldFBvbGljaWVzLnNpemUoKTsgdGFyZ2V0SW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgdGFyZ2V0UG9saWN5ID0gdGFyZ2V0UG9saWNpZXMuZ2V0KCB0YXJnZXRJbmRleCApOwotICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgIHRhcmdldFN1ZmZpeCA9IFRBUkdFVF9TVUZGSVggKyAodGFyZ2V0SW5kZXgrMSk7Ci0gICAgICAgIAotICAgICAgICBzYXZlUG9saWN5UmVsYXRpb25zaGlwKCBpbmRleCsxLCBwcmVmZXJlbmNlcywgcG9saWN5SWQsIHRhcmdldFBvbGljeSwgdGFyZ2V0U3VmZml4ICk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+IGxvYWRSZWxhdGlvbnNoaXBzKCBJRWNsaXBzZVByZWZlcmVuY2VzIHByZWZlcmVuY2VzLCBTdHJpbmcgcG9saWN5SWQsIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwgcGxhdGZvcm0gKQotICB7Ci0gICAgTGlzdDxJUG9saWN5UmVsYXRpb25zaGlwPiByZWxhdGlvbnNoaXBzID0gbmV3IFZlY3RvcjxJUG9saWN5UmVsYXRpb25zaGlwPigpOwotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgcmVsQ291bnQgICAgICA9IDE7Ci0gICAgSVBvbGljeUVudW1lcmF0aW9uTGlzdCAgICBzb3VyY2VMaXN0ICAgID0gbG9hZFBvbGljeVJlbGF0aW9uc2hpcCggcmVsQ291bnQsIHByZWZlcmVuY2VzLCBwbGF0Zm9ybSwgcG9saWN5SWQsIFNPVVJDRV9TVUZGSVggKTsKLSAgICAKLSAgICB3aGlsZSggc291cmNlTGlzdCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldENvdW50ICA9IDE7Ci0gICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFN1ZmZpeCA9IFRBUkdFVF9TVUZGSVggKyB0YXJnZXRDb3VudDsKLSAgICAgIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgICAgICAgdGFyZ2V0TGlzdCAgID0gbG9hZFBvbGljeVJlbGF0aW9uc2hpcCggcmVsQ291bnQsIHByZWZlcmVuY2VzLCBwbGF0Zm9ybSwgcG9saWN5SWQsIHRhcmdldFN1ZmZpeCApOwotICAgICAgTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiB0YXJnZXRzICAgICAgPSBuZXcgVmVjdG9yPElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+KCk7Ci0gICAgICAKLSAgICAgIHdoaWxlKCB0YXJnZXRMaXN0ICE9IG51bGwgKQotICAgICAgewotICAgICAgICB0YXJnZXRzLmFkZCggdGFyZ2V0TGlzdCApOwotICAgICAgICB0YXJnZXRDb3VudCsrOwotICAgICAgICB0YXJnZXRTdWZmaXggPSBUQVJHRVRfU1VGRklYICsgdGFyZ2V0Q291bnQ7Ci0gICAgICAgIHRhcmdldExpc3QgPSBsb2FkUG9saWN5UmVsYXRpb25zaGlwKCByZWxDb3VudCwgcHJlZmVyZW5jZXMsIHBsYXRmb3JtLCBwb2xpY3lJZCwgdGFyZ2V0U3VmZml4ICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJlbGF0aW9uc2hpcHMuYWRkKCBuZXcgUG9saWN5UmVsYXRpb25zaGlwSW1wbCggc291cmNlTGlzdCwgdGFyZ2V0cyApICk7Ci0gICAgICByZWxDb3VudCsrOwotICAgICAgc291cmNlTGlzdCA9IGxvYWRQb2xpY3lSZWxhdGlvbnNoaXAoIHJlbENvdW50LCBwcmVmZXJlbmNlcywgcGxhdGZvcm0sIHBvbGljeUlkLCBTT1VSQ0VfU1VGRklYICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZWxhdGlvbnNoaXBzOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyB2b2lkIHNhdmVQb2xpY3lSZWxhdGlvbnNoaXAoIGludCAgICAgICAgICAgICAgICAgICAgcmVsQ291bnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgICAgcHJlZmVyZW5jZXMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgcG9saWN5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBvbGljeUVudW1lcmF0aW9uTGlzdCBlbnVtTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgIGtleVN1ZmZpeCApCi0gIHsKLSAgICBTdHJpbmcga2V5ICAgPSBjcmVhdGVLZXkoIHBvbGljeUlkLCBSRUxfS0VZICsgcmVsQ291bnQgKyBrZXlTdWZmaXggKTsKLSAgICBTdHJpbmcgdmFsdWUgPSBjcmVhdGVSZWxhdGlvbnNoaXBWYWx1ZSggZW51bUxpc3QgKTsKLSAgICAKLSAgICBwcmVmZXJlbmNlcy5wdXQoIGtleSwgdmFsdWUgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgSVBvbGljeUVudW1lcmF0aW9uTGlzdCBsb2FkUG9saWN5UmVsYXRpb25zaGlwKCBpbnQgICAgICAgICAgICAgICAgICAgICAgIHJlbENvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgICAgICAgcHJlZmVyZW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtSW1wbCBwbGF0Zm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgIHBvbGljeUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAga2V5U3VmZml4ICkKLSAgewotICAgIFN0cmluZyAgICAgICAgICAgICAgICAga2V5ICAgICAgPSBjcmVhdGVLZXkoIHBvbGljeUlkLCBSRUxfS0VZICsgcmVsQ291bnQgKyBrZXlTdWZmaXggKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgIHZhbHVlICAgID0gcHJlZmVyZW5jZXMuZ2V0KCBrZXksICIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBJUG9saWN5RW51bWVyYXRpb25MaXN0IGVudW1MaXN0ID0gbnVsbDsKLSAgICAKLSAgICBpZiggIXZhbHVlLmVxdWFscyggIiIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBTdHJpbmdbXSAgICAgICAgICAgICAgICAgICAgc3BsaXRWYWx1ZSAgICAgPSB2YWx1ZS5zcGxpdCggIiAiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRQb2xpY3lJZCA9IHNwbGl0VmFsdWVbMF07Ci0gICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICAgICAgdGFyZ2V0UG9saWN5ICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCB0YXJnZXRQb2xpY3lJZCApOwotICAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGl0ZW1zICAgICAgICAgID0gbmV3IFZlY3RvcjxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+KCk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMTsgaW5kZXggPCBzcGxpdFZhbHVlLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBpdGVtID0gcGxhdGZvcm0uZ2V0U3RhdGVJdGVtRW51bWVyYXRpb24oIHNwbGl0VmFsdWVbaW5kZXhdICk7Ci0gICAgICAgIAotICAgICAgICBpdGVtcy5hZGQoIGl0ZW0gKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgZW51bUxpc3QgPSBuZXcgUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbCggaXRlbXMsIHRhcmdldFBvbGljeSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZW51bUxpc3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCB3aWxsIGNyZWF0ZSBhIHNwYWNlIGRlbGltaXRlZCBzdHJpbmcgb2YgZW51bWVyYXRpb25zIGlkLgotICAgKiBUaGUgZmlyc3QgaWQgaW4gdGhlIGxpc3Qgd2lsbCBiZSB0aGUgcG9saWN5IGlkIGZvciB0aGlzIHJlbGF0aW9uc2hpcC4KLSAgICogU3Vic2VxdWVudCBpZHMgd2lsbCBiZSBlbnVtZXJhdGlvbiBpdGVtIGlkcy4KLSAgICogCi0gICAqIEBwYXJhbSBlbnVtTGlzdAotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3JlYXRlUmVsYXRpb25zaGlwVmFsdWUoIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgZW51bUxpc3QgKQotICB7Ci0gICAgTGlzdDxTdHJpbmc+ICAgICAgICAgICAgICAgIHN0cmluZ0xpc3QgPSBuZXcgVmVjdG9yPFN0cmluZz4oKTsKLSAgICBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gaXRlbUxpc3QgICA9IGVudW1MaXN0LmdldEVudW1lcmF0aW9uTGlzdCgpOwotICAgIAotICAgIHN0cmluZ0xpc3QuYWRkKCBlbnVtTGlzdC5nZXRQb2xpY3koKS5nZXRJZCgpICk7Ci0gICAgCi0gICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbSA6IGl0ZW1MaXN0ICkKLSAgICB7Ci0gICAgICBzdHJpbmdMaXN0LmFkZCggaXRlbS5nZXRJZCgpICk7ICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNyZWF0ZVNwYWNlRGVsaW1pdGVkU3RyaW5nKCBzdHJpbmdMaXN0ICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgc2F2ZSggSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcywgU3RyaW5nIHBvbGljeUlkLCBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUgKQotICB7Ci0gICAgaWYoIHZhbHVlICE9IG51bGwgJiYgIXZhbHVlLmVxdWFscyggIiIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcmVmZXJlbmNlcy5wdXQoIGNyZWF0ZUtleShwb2xpY3lJZCxrZXkpLCB2YWx1ZSApOyAgICAgIAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZUtleSggU3RyaW5nIGlkLCBTdHJpbmcga2V5ICkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKDUwKTsKLSAgICAKLSAgICBidWZmZXIuYXBwZW5kKCBCQVNFX0tFWSApOwotICAgIGJ1ZmZlci5hcHBlbmQoIGlkICk7Ci0gICAgYnVmZmVyLmFwcGVuZCggJy4nICk7Ci0gICAgYnVmZmVyLmFwcGVuZCgga2V5ICk7Ci0gICAgCi0gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1BvbGljeVN0YXRlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9Qb2xpY3lTdGF0ZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFhNGI1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1BvbGljeVN0YXRlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTIyMSAgIDIxMzQ5MiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDEwOSAgIDIxNDgxOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDMyNSAgIDIyMjA5NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUHJvamVjdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSVByZWZlcmVuY2VzU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI7Ci0KLXB1YmxpYyBjbGFzcyBQb2xpY3lTdGF0ZUltcGwgaW1wbGVtZW50cyBJUG9saWN5U3RhdGUKLXsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPiBzdGF0ZUNoYW5nZUxpc3RlbmVyczsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyPiBzdGF0ZUNoYW5nZUxpc3RlbmVyc09ubHlPbkNvbW1pdDsKLSAgcHJpdmF0ZSBJUHJlZmVyZW5jZXNTZXJ2aWNlICAgICAgICAgICAgICBzZXJ2aWNlOwotICBwcml2YXRlIElQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q7Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YWJsZTsKLSAgcHJpdmF0ZSBJU2VydmljZVBvbGljeSAgICAgICAgICAgICAgICAgICBwb2xpY3k7Ci0gIHByaXZhdGUgTWFwPFN0cmluZyxUYWJsZUVudHJ5PiAgICAgICAgICAgdGFibGU7Ci0gIHByaXZhdGUgU2VydmljZVBvbGljeVBsYXRmb3JtICAgICAgICAgICAgcGxhdGZvcm07Ci0KLSAgcHVibGljIFBvbGljeVN0YXRlSW1wbCggSVNlcnZpY2VQb2xpY3kgcG9saWN5LCBJUHJvamVjdCBwcm9qZWN0KQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlICAgICAgICAgICAgICA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpOwotICAgIHRoaXMucGxhdGZvcm0gICAgICAgICAgICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICB0aGlzLnByb2plY3QgICAgICAgICAgICAgID0gcHJvamVjdDsKLSAgICB0aGlzLnBvbGljeSAgICAgICAgICAgICAgID0gcG9saWN5OwotICAgIHRoaXMubXV0YWJsZSAgICAgICAgICAgICAgPSBwb2xpY3kuaXNQcmVkZWZpbmVkKCkgPyBmYWxzZSA6IHRydWU7Ci0gICAgdGhpcy50YWJsZSAgICAgICAgICAgICAgICA9IG5ldyBIYXNoTWFwPFN0cmluZywgVGFibGVFbnRyeT4oKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgY29tbWl0Q2hhbmdlcygpCi0gIHsKLSAgICAvLyBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGlzIHBvbGljeSBpcyBub3QgbXV0YWJsZS4KLSAgICBpZiggIW11dGFibGUgKSByZXR1cm47Ci0gICAgCi0gICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHByb2plY3QgPT0gbnVsbCApCi0gICAgewotICAgICAgcHJlZmVyZW5jZXMgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwcmVmZXJlbmNlcyA9IG5ldyBQcm9qZWN0U2NvcGUoIHByb2plY3QgKS5nZXROb2RlKCBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRCApOwotICAgIH0KLQotICAgIGZvciggTWFwLkVudHJ5PFN0cmluZywgVGFibGVFbnRyeT4gZW50cnkgOiB0YWJsZS5lbnRyeVNldCgpICkKLSAgICB7Ci0gICAgICBTdHJpbmcgICAgIGtleSAgICAgICAgPSBlbnRyeS5nZXRLZXkoKTsKLSAgICAgIFN0cmluZyAgICAgc3RvcmVLZXkgICA9IG1ha2VTdG9yZUtleSgga2V5ICk7Ci0gICAgICBUYWJsZUVudHJ5IHRhYmxlRW50cnkgPSBlbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgU3RyaW5nICAgICB2YWx1ZSAgICAgID0gdGFibGVFbnRyeS52YWx1ZTsKLSAgICAgIAotICAgICAgaWYoIHZhbHVlICE9IG51bGwgKQotICAgICAgewotICAgICAgICAvLyBUZW1wb3JhcmlseSByZW1vdmUgdGhlIHRhYmxlRW50cnkgdmFsdWUgc28gdGhhdCBnZXRWYWx1ZSB3aWxsIGdldCB0aGUgb2xkIHZhbHVlLgotICAgICAgICB0YWJsZUVudHJ5LnZhbHVlID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gZ2V0VmFsdWUoIGtleSApOwotICAgICAgICAKLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgdGFibGVFbnRyeSB2YWx1ZTsKLSAgICAgICAgdGFibGVFbnRyeS52YWx1ZSA9IHZhbHVlOwotICAgICAgIAotICAgICAgICBpZiggIXZhbHVlLmVxdWFscyggb2xkVmFsdWUgKSApIAotICAgICAgICB7Ci0gICAgICAgICAgcHJlZmVyZW5jZXMucHV0KCBzdG9yZUtleSwgdGFibGVFbnRyeS52YWx1ZSApOwotICAgICAgICAgIGZpcmVQb2xpY3lTdGF0ZUNoYW5nZSggc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQsIGtleSwgb2xkVmFsdWUsIHZhbHVlICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgSUVjbGlwc2VQcmVmZXJlbmNlc1tdIGdldE5vZGVzKCkKLSAgewotICAgIElFY2xpcHNlUHJlZmVyZW5jZXNbXSByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGlmKCBwcm9qZWN0ICE9IG51bGwgJiYgcGxhdGZvcm0uaXNQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QpICkKLSAgICB7IAotICAgICAgcmVzdWx0ICAgID0gbmV3IElFY2xpcHNlUHJlZmVyZW5jZXNbMl07Ci0gICAgICByZXN1bHRbMF0gPSBuZXcgUHJvamVjdFNjb3BlKCBwcm9qZWN0ICkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICAgIHJlc3VsdFsxXSA9IG5ldyBJbnN0YW5jZVNjb3BlKCkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBJRWNsaXBzZVByZWZlcmVuY2VzWzFdOwotICAgICAgcmVzdWx0WzBdID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKCBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRCApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNjYXJkQ2hhbmdlcygpCi0gIHsKLSAgICBpZiggIW11dGFibGUgKSByZXR1cm47Ci0gICAgCi0gICAgZm9yKCBUYWJsZUVudHJ5IGVudHJ5IDogdGFibGUudmFsdWVzKCkgKQotICAgIHsKLSAgICAgIGVudHJ5LnZhbHVlID0gbnVsbDsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVEZWZhdWx0cygpCi0gIHsKLSAgICAvLyBXZSB3YW50IHRvIHJlc3RvcmUgdGhlIHNldHRpbmcgdG8gdGhlcmUgZGVmYXVsdCBzdGF0ZSwgYnV0IHdlIGRvbid0Ci0gICAgLy8gd2FudCBjaGFuZ2UgdGhlIGJhY2tlbmQgZWNsaXBzZSBwcmVmZXJlbmNlcywgc2luY2UgdGhlIHVzZXIgbWlnaHQgbm90Ci0gICAgLy8gY29tbWl0IHRoZXNlIGNoYW5nZXMuICBUaGVyZWZvcmUsIHdlIHdpbGwgc2V0IHRoZSB2YWx1ZXMgZm9yIGFsbCB0aGUKLSAgICAvLyB0YWJsZSBlbnRyaWVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWUuICAKLSAgICBpZiggcHJvamVjdCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBmb3IoIFRhYmxlRW50cnkgZW50cnkgOiB0YWJsZS52YWx1ZXMoKSApCi0gICAgICB7Ci0gICAgICAgICBlbnRyeS52YWx1ZSA9IGVudHJ5LmRlZmF1bHRWYWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIE5vdGU6IHNpbmNlIHdlIGFyZSByZXN0b3JpbmcgdGhlIHN0YXRlIGZvciBhIHByb2plY3Qgd2UgbmVlZCB0byBlbnN1cmUKLSAgICAgIC8vICAgICAgIHRoYXQgb25seSB0aGUgaW5zdGFuY2Ugc2NvcGUgdmFsdWVzIGFyZSB1c2VkLiAgKGllLiB3ZSB3YW50IHRvCi0gICAgICAvLyAgICAgICBpZ25vcmUgcHJvamVjdCBzY29wZSB2YWx1ZXMuKQotICAgICAgSUVjbGlwc2VQcmVmZXJlbmNlc1tdIG5vZGVzID0gbmV3IElFY2xpcHNlUHJlZmVyZW5jZXNbXXtuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEICl9OwotICAgICAgCi0gICAgICBmb3IoIE1hcC5FbnRyeTxTdHJpbmcsVGFibGVFbnRyeT4gZW50cnkgOiB0YWJsZS5lbnRyeVNldCgpICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nICAgICBzdG9yZUtleSAgICAgPSBtYWtlU3RvcmVLZXkoIGVudHJ5LmdldEtleSgpICk7Ci0gICAgICAgIFRhYmxlRW50cnkgdGFibGVFbnRyeSAgID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgICAgU3RyaW5nICAgICBkZWZhdWx0VmFsdWUgPSAiIjsKLSAgICAgICAgCi0gICAgICAgIGlmKCB0YWJsZUVudHJ5LmRlZmF1bHRWYWx1ZSAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRhYmxlRW50cnkuZGVmYXVsdFZhbHVlOyAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdGFibGVFbnRyeS52YWx1ZSA9IHNlcnZpY2UuZ2V0KCBzdG9yZUtleSwgZGVmYXVsdFZhbHVlLCBub2RlcyApOyAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIAotICB9Ci0gIAotICAvKiogCi0gICAqIFRoZSBtZXRob2QgZ2V0cyB0aGUgdmFsdWUgZnJvbSB0aGUgZm9sbG93aW5nIHBsYWNlcyBpbiB0aGUgZ2l2ZW4gb3JkZXIuCi0gICAqIAotICAgKiAxKSBGcm9tIHRoZSBsb2NhbCB0YWJsZS4KLSAgICogMikgRnJvbSB0aGUgcHJlZmVyZW5jZSBzdG9yZSBub2Rlcy4gIE5vdGU6IHRoaXMgY291bGQgaW5jbHVkZSBzZWFyY2hpbmcKLSAgICogICAgICAgICB0aGUgcHJvamVjdCBwcmVmZXJlbmNlIHN0b3JlIGFuZCB0aGUgcGx1Z2luIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqIDMpIEZyb20gdGhlIGRlZmF1bHQgaW4gdGhlIGxvY2FsIHRhYmxlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRWYWx1ZShTdHJpbmcga2V5KQotICB7Ci0gICAgU3RyaW5nICAgICByZXN1bHQgPSBudWxsOwotICAgIFRhYmxlRW50cnkgZW50cnkgID0gdGFibGUuZ2V0KCBrZXkgKTsKLSAgICAKLSAgICBpZiggZW50cnkgPT0gbnVsbCApCi0gICAgewotICAgICAgZW50cnkgPSBuZXcgVGFibGVFbnRyeSgpOwotICAgICAgdGFibGUucHV0KCBrZXksIGVudHJ5ICk7Ci0gICAgfQotICAgIAotICAgIGlmKCBwcm9qZWN0ID09IG51bGwgfHwKLSAgICAgICAgKCBwcm9qZWN0ICE9IG51bGwgJiYgcGxhdGZvcm0uaXNQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBwcm9qZWN0ICkgKSApCi0gICAgeyAKLSAgICAgICAgcmVzdWx0ID0gZW50cnkudmFsdWU7Ci0gICAgfQotICAgIAotICAgIGlmKCByZXN1bHQgPT0gbnVsbCApCi0gICAgewotICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGxvY2FsIHZhbHVlIGZvciB0aGlzIGtleSBzbyB3ZSB3aWxsIGxvb2sgaW4gdGhlCi0gICAgICAvLyBwcmVmZXJlbmNlIHN0b3JlLgotICAgICAgU3RyaW5nIGRlZmF1bHRWYWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgc3RvcmVLZXkgICAgID0gbWFrZVN0b3JlS2V5KCBrZXkgKTsKLSAgICAgIAotICAgICAgaWYoIGVudHJ5LmRlZmF1bHRWYWx1ZSAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgZGVmYXVsdFZhbHVlID0gZW50cnkuZGVmYXVsdFZhbHVlOwotICAgICAgfQotICAgICAgCi0gICAgICByZXN1bHQgPSBzZXJ2aWNlLmdldCggc3RvcmVLZXksIGRlZmF1bHRWYWx1ZSwgZ2V0Tm9kZXMoKSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgbWFrZVN0b3JlS2V5KCBTdHJpbmcga2V5ICkKLSAgewotICAgIHJldHVybiBwb2xpY3kuZ2V0SWQoKSArICIuIiArIGtleTsgICAgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc011dGFibGUoKQotICB7Ci0gICAgcmV0dXJuIG11dGFibGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwdXREZWZhdWx0VmFsdWUoIFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0VmFsdWUsIGJvb2xlYW4gb3ZlcnJpZGVFeGlzdGluZyApCi0gIHsKLSAgICBpZiggIW11dGFibGUgKSByZXR1cm47Ci0gICAgCi0gICAgVGFibGVFbnRyeSBlbnRyeSA9IHRhYmxlLmdldCgga2V5ICk7Ci0gICAgCi0gICAgaWYoIGVudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIGVudHJ5ID0gbmV3IFRhYmxlRW50cnkoKTsKLSAgICAgIHRhYmxlLnB1dCgga2V5LCBlbnRyeSApOwotICAgIH0KLSAgICAKLSAgICBpZiggZW50cnkuZGVmYXVsdFZhbHVlID09IG51bGwgfHwgb3ZlcnJpZGVFeGlzdGluZyApCi0gICAgewotICAgICAgZW50cnkuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlOwotICAgIH0KLSAgICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHB1dFZhbHVlKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmKCAhbXV0YWJsZSApIHJldHVybjsKLSAgICAKLSAgICBUYWJsZUVudHJ5IGVudHJ5ID0gdGFibGUuZ2V0KCBrZXkgKTsKLSAgICAKLSAgICBpZiggZW50cnkgPT0gbnVsbCApCi0gICAgewotICAgICAgZW50cnkgPSBuZXcgVGFibGVFbnRyeSgpOwotICAgICAgdGFibGUucHV0KCBrZXksIGVudHJ5ICk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG9sZFZhbHVlID0gZ2V0VmFsdWUoIGtleSApOwotICAgIAotICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7Ci0gICAgZmlyZVBvbGljeVN0YXRlQ2hhbmdlKCBzdGF0ZUNoYW5nZUxpc3RlbmVycywga2V5LCBvbGRWYWx1ZSwgdmFsdWUgKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGludGVybmFsU2V0TXV0YWJsZSggYm9vbGVhbiBtdXRhYmxlICkKLSAgewotICAgIHRoaXMubXV0YWJsZSA9IG11dGFibGU7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TXV0YWJsZShib29sZWFuIG11dGFibGUpCi0gIHsKLSAgICBpZiggcG9saWN5LmlzUHJlZGVmaW5lZCgpICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmxvZ0Vycm9yKCAiQXR0ZW1wdCB0byBzZXQgbXV0YWJpbGl0eSBvbiBhIHByZWRlZmluZWQgc2VydmljZSBwb2xpY3kuIiwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aGlzLm11dGFibGUgPSBtdXRhYmxlOwotICAgIH0KLSAgfSAgCi0gIAotICBwdWJsaWMgdm9pZCBhZGRQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKElQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyLCBib29sZWFuIG5vdGlmeU9uQ29tbWl0T25seSApCi0gIHsKLSAgICBpZiggbm90aWZ5T25Db21taXRPbmx5ICkKLSAgICB7Ci0gICAgICBpZiggc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQgPT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJzT25seU9uQ29tbWl0ID0gbmV3IFZlY3RvcjxJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcj4oKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQuYWRkKCBsaXN0ZW5lciApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYoIHN0YXRlQ2hhbmdlTGlzdGVuZXJzID09IG51bGwgKQotICAgICAgewotICAgICAgICBzdGF0ZUNoYW5nZUxpc3RlbmVycyA9IG5ldyBWZWN0b3I8SVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXI+KCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJzLmFkZCggbGlzdGVuZXIgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIoSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIpCi0gIHsKLSAgICBpZiggc3RhdGVDaGFuZ2VMaXN0ZW5lcnMgIT0gbnVsbCApCi0gICAgewotICAgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcnMucmVtb3ZlKCBsaXN0ZW5lciApOwotICAgIH0KLSAgICAKLSAgICBpZiggc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQgIT0gbnVsbCApCi0gICAgewotICAgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcnNPbmx5T25Db21taXQucmVtb3ZlKCBsaXN0ZW5lciApOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGZpcmVQb2xpY3lTdGF0ZUNoYW5nZSggTGlzdDxJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcj4gbGlzdGVuZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlICkKLSAgewotICAgIGlmKCBsaXN0ZW5lcnMgIT0gbnVsbCApCi0gICAgewotICAgICAgZm9yKCBJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciA6IGxpc3RlbmVycyApICAKLSAgICAgIHsKLSAgICAgICAgbGlzdGVuZXIucG9saWN5U3RhdGVDaGFuZ2UoIHBvbGljeSwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUgKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgVGFibGVFbnRyeQotICB7Ci0gICAgU3RyaW5nIHZhbHVlOwotICAgIFN0cmluZyBkZWZhdWx0VmFsdWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU2VydmljZVBvbGljeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU2VydmljZVBvbGljeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVmZjMwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1NlcnZpY2VQb2xpY3lJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDgwMjE0ICAgMjE4OTk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIENvbmN1cnJlbnQgZXhjZXB0aW9uIGZpeAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lFbnVtZXJhdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lSZWxhdGlvbnNoaXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlRW51bTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuUG9saWN5RW51bWVyYXRpb25MaXN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuUG9saWN5UmVsYXRpb25zaGlwSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVN0YXR1c0NoYW5nZUxpc3RlbmVyOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeUltcGwgaW1wbGVtZW50cyBJU2VydmljZVBvbGljeQotewotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRlZmluZWQ7Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ7Ci0gIHByaXZhdGUgU2VydmljZVBvbGljeUltcGwgICAgICAgICAgICAgICAgcGFyZW50OwotICBwcml2YXRlIERlc2NyaXB0b3JJbXBsICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I7Ci0gIHByaXZhdGUgTGlzdDxJU2VydmljZVBvbGljeT4gICAgICAgICAgICAgY29tbWl0dGVkQ2hpbGRyZW47Ci0gIHByaXZhdGUgTGlzdDxJU2VydmljZVBvbGljeT4gICAgICAgICAgICAgY2hpbGRyZW47Ci0gIHByaXZhdGUgUG9saWN5U3RhdGVJbXBsICAgICAgICAgICAgICAgICAgcG9saWN5U3RhdGU7Ci0gIHByaXZhdGUgTWFwPElQcm9qZWN0LCBQb2xpY3lTdGF0ZUltcGw+ICAgcHJvamVjdFBvbGljeVN0YXRlczsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+ICAgICAgICByZWxhdGlvbnNoaXBMaXN0OwotICBwcml2YXRlIExpc3Q8SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI+IGNoaWxkQ2hhbmdlTGlzdGVuZXJzOwotICBwcml2YXRlIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwgICAgICAgIHBsYXRmb3JtOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1MaXN0SWQ7Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEVudW1JZDsKLSAgcHJpdmF0ZSBMaXN0PElTdGF0dXNDaGFuZ2VMaXN0ZW5lcj4gICAgICBzdGF0dXNDaGFuZ2VMaXN0ZW5lcnM7IAotICBwcml2YXRlIElTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czsKLSAgCi0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5yZXNvbHZlZFBhcmVudDsKLSAgcHJpdmF0ZSBMaXN0PFVucmVzb2x2ZWRSZWxhdGlvbnNoaXA+ICAgICB1bnJlc29sdmVkUmVsYXRpb25zaGlwTGlzdDsKLSAgCi0gIHB1YmxpYyBTZXJ2aWNlUG9saWN5SW1wbCggYm9vbGVhbiBpc1ByZWRlZmluZWQsIFN0cmluZyBpZCwgU2VydmljZVBvbGljeVBsYXRmb3JtSW1wbCBwbGF0Zm9ybSApCi0gIHsKLSAgICB0aGlzLnByZWRlZmluZWQgICAgICAgICAgICAgICAgID0gaXNQcmVkZWZpbmVkOyAgCi0gICAgdGhpcy5pZCAgICAgICAgICAgICAgICAgICAgICAgICA9IGlkOwotICAgIHRoaXMuY2hpbGRyZW4gICAgICAgICAgICAgICAgICAgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigpOwotICAgIHRoaXMucmVsYXRpb25zaGlwTGlzdCAgICAgICAgICAgPSBuZXcgVmVjdG9yPElQb2xpY3lSZWxhdGlvbnNoaXA+KCk7Ci0gICAgdGhpcy51bnJlc29sdmVkUmVsYXRpb25zaGlwTGlzdCA9IG5ldyBWZWN0b3I8VW5yZXNvbHZlZFJlbGF0aW9uc2hpcD4oKTsKLSAgICB0aGlzLnBvbGljeVN0YXRlICAgICAgICAgICAgICAgID0gbmV3IFBvbGljeVN0YXRlSW1wbCggdGhpcywgbnVsbCApOwotICAgIHRoaXMucGxhdGZvcm0gICAgICAgICAgICAgICAgICAgPSBwbGF0Zm9ybTsgIAotICAgIHRoaXMuY2hpbGRDaGFuZ2VMaXN0ZW5lcnMgICAgICAgPSBuZXcgVmVjdG9yPElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyPigpOwotICAgIHRoaXMucHJvamVjdFBvbGljeVN0YXRlcyAgICAgICAgPSBuZXcgSGFzaE1hcDxJUHJvamVjdCwgUG9saWN5U3RhdGVJbXBsPigpOwotICAgIHRoaXMuc3RhdHVzICAgICAgICAgICAgICAgICAgICAgPSBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc1ByZWRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIHByZWRlZmluZWQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiBpZDsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnQoIFNlcnZpY2VQb2xpY3lJbXBsIHBhcmVudCApCi0gIHsKLSAgICB0aGlzLnBhcmVudCA9IHBhcmVudDsKLSAgICAKLSAgICBpZiggcGFyZW50ICE9IG51bGwgKQotICAgIHsKLSAgICAgIHBhcmVudC5hZGRDaGlsZCggdGhpcywgZmFsc2UgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNvbW1pdENoYW5nZXMoKQotICB7Ci0gICAgcG9saWN5U3RhdGUuY29tbWl0Q2hhbmdlcygpOwotICAgIAotICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBjaGlsZHJlbiBpbiB0aGUgY29tbWl0dGVkQ2hpbGRyZW4gb2JqZWN0LgotICAgIGNvbW1pdHRlZENoaWxkcmVuID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oIGNoaWxkcmVuICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRpc2NhcmRDaGFuZ2VzKCkKLSAgewotICAgIHBvbGljeVN0YXRlLmRpc2NhcmRDaGFuZ2VzKCk7Ci0gICAgICAgIAotICAgIGZpcmVDaGlsZENoYW5nZXNEdWV0b0Rpc2NhcmQoKTsKLSAgICAKLSAgICAvL1Jlc3RvcmUgY2hpbGRyZW4uCi0gICAgY2hpbGRyZW4gPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PiggY29tbWl0dGVkQ2hpbGRyZW4gKTsKLSAgfQotICAKLSAgcHVibGljIExpc3Q8SVNlcnZpY2VQb2xpY3k+IGdldENoaWxkcmVuKCkKLSAgewotICAgIHJldHVybiBjaGlsZHJlbjsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZENoaWxkKCBTZXJ2aWNlUG9saWN5SW1wbCBjaGlsZCwgYm9vbGVhbiBmaXJlRXZlbnQgKQotICB7Ci0gICAgY2hpbGRyZW4uYWRkKCBjaGlsZCApOwotICAgICAgCi0gICAgaWYoIGZpcmVFdmVudCApCi0gICAgewotICAgICAgZmlyZUNoaWxkQ2hhbmdlRXZlbnQoIGNoaWxkLCB0cnVlICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZW1vdmVDaGlsZChJU2VydmljZVBvbGljeSBwb2xpY3lUb1JlbW92ZSApCi0gIHsKLSAgICBpZiggIXBvbGljeVRvUmVtb3ZlLmlzUHJlZGVmaW5lZCgpICkKLSAgICB7Ci0gICAgICAvLyBSZW1vdmUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGlzIHBvbGljeSBmaXJzdC4KLSAgICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoaWxkUG9saWNpZXMgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PiggcG9saWN5VG9SZW1vdmUgLmdldENoaWxkcmVuKCkgKTsKLSAgICAgIAotICAgICAgZm9yKCBJU2VydmljZVBvbGljeSBjaGlsZFBvbGljeSA6IGNoaWxkUG9saWNpZXMgKQotICAgICAgewotICAgICAgICBwb2xpY3lUb1JlbW92ZS5yZW1vdmVDaGlsZCggY2hpbGRQb2xpY3kgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgYm9vbGVhbiByZW1vdmVkID0gY2hpbGRyZW4ucmVtb3ZlKCBwb2xpY3lUb1JlbW92ZSAgKTsKLSAgICAgIAotICAgICAgaWYoIHJlbW92ZWQgKQotICAgICAgewotICAgICAgICBwbGF0Zm9ybS5yZW1vdmVQb2xpY3koIHBvbGljeVRvUmVtb3ZlICk7Ci0gICAgICAgIGZpcmVDaGlsZENoYW5nZUV2ZW50KCBwb2xpY3lUb1JlbW92ZSAsIGZhbHNlICk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIElEZXNjcmlwdG9yIGdldERlc2NyaXB0b3IoKQotICB7Ci0gICAgaWYoIGRlc2NyaXB0b3IgPT0gbnVsbCApCi0gICAgewotICAgICAgZGVzY3JpcHRvciA9IG5ldyBEZXNjcmlwdG9ySW1wbCgpOyAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBkZXNjcmlwdG9yOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdG9yKCBEZXNjcmlwdG9ySW1wbCBkZXNjcmlwdG9yICkKLSAgewotICAgIHRoaXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gIH0KLQotICBwdWJsaWMgSVNlcnZpY2VQb2xpY3kgZ2V0UGFyZW50UG9saWN5KCkKLSAgewotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICBwdWJsaWMgSVBvbGljeVN0YXRlIGdldFBvbGljeVN0YXRlKCkKLSAgewotICAgIHJldHVybiBwb2xpY3lTdGF0ZTsKLSAgfQotICAKLSAgcHVibGljIElQb2xpY3lTdGF0ZSBnZXRQb2xpY3lTdGF0ZSggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBQb2xpY3lTdGF0ZUltcGwgcHJvamVjdFBvbGljeVN0YXRlID0gcHJvamVjdFBvbGljeVN0YXRlcy5nZXQoIHByb2plY3QgKTsKLSAgICAKLSAgICBpZiggcHJvamVjdFBvbGljeVN0YXRlID09IG51bGwgKQotICAgIHsKLSAgICAgIHByb2plY3RQb2xpY3lTdGF0ZSA9IG5ldyBQb2xpY3lTdGF0ZUltcGwoIHRoaXMsIHByb2plY3QgKTsKLSAgICAgIHByb2plY3RQb2xpY3lTdGF0ZS5pbnRlcm5hbFNldE11dGFibGUoIHBvbGljeVN0YXRlLmlzTXV0YWJsZSgpICk7Ci0gICAgICBwcm9qZWN0UG9saWN5U3RhdGVzLnB1dCggcHJvamVjdCwgcHJvamVjdFBvbGljeVN0YXRlICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcm9qZWN0UG9saWN5U3RhdGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUG9saWN5U3RhdGVFbnVtIGdldFBvbGljeVN0YXRlRW51bSgpCi0gIHsKLSAgICBFbnVtZXJhdGlvblN0YXRlSW1wbCBuZXdFbnVtID0gbnVsbDsKLSAgICAKLSAgICBpZiggZW51bUxpc3RJZCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBuZXdFbnVtID0gbmV3IEVudW1lcmF0aW9uU3RhdGVJbXBsKCBlbnVtTGlzdElkLCBkZWZhdWx0RW51bUlkLCBwb2xpY3lTdGF0ZSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmV3RW51bTsKLSAgfQotICAKLSAgcHVibGljIElQb2xpY3lTdGF0ZUVudW0gZ2V0UG9saWN5U3RhdGVFbnVtKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIEVudW1lcmF0aW9uU3RhdGVJbXBsIG5ld0VudW0gPSBudWxsOwotICAgIAotICAgIGlmKCBlbnVtTGlzdElkICE9IG51bGwgKQotICAgIHsKLSAgICAgIG5ld0VudW0gPSBuZXcgRW51bWVyYXRpb25TdGF0ZUltcGwoIGVudW1MaXN0SWQsIGRlZmF1bHRFbnVtSWQsIGdldFBvbGljeVN0YXRlKCBwcm9qZWN0ICkgKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5ld0VudW07Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQb2xpY3lTdGF0ZSggUG9saWN5U3RhdGVJbXBsIHBvbGljeVN0YXRlICkKLSAgewotICAgIHRoaXMucG9saWN5U3RhdGUgPSBwb2xpY3lTdGF0ZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVzdG9yZURlZmF1bHRzKCkKLSAgewotICAgIC8vIFJlbW92ZSBhbGwgbG9jYWwgY2hpbGRyZW4gZnJvbSB0aGUgdHJlZQotICAgIC8vIEphdmEgd2lsbCBub3QgbGV0IHlvdSByZW1vdmUgYW4gaXRlbSBmcm9tIGEgY29sbGVjdGlvbgotICAgIC8vIHRoYXQgaXMgYmVpbmcgaXRlcmF0ZWQgb3Zlciwgc28gd2UgbmVlZCB0byBjcmVhdGUgYSB0ZW1wb3JhcnkKLSAgICAvLyBjb3B5IG9mIHRoZSBjaGlsZHJlbiBjb2xsZWN0aW9uIHRvIGl0ZXJhdG9yIG92ZXIuCi0gICAgVmVjdG9yPElTZXJ2aWNlUG9saWN5PiB0ZW1wQ2hpbGRyZW4gPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PiggY2hpbGRyZW4gKTsKLSAgICAKLSAgICBmb3IoIElTZXJ2aWNlUG9saWN5IGNoaWxkIDogdGVtcENoaWxkcmVuICkKLSAgICB7Ci0gICAgICBpZiggIWNoaWxkLmlzUHJlZGVmaW5lZCgpICkKLSAgICAgIHsKLSAgICAgICAgcmVtb3ZlQ2hpbGQoIGNoaWxkICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHBvbGljeVN0YXRlLnJlc3RvcmVEZWZhdWx0cygpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZXN0b3JlRGVmYXVsdHMoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgUG9saWN5U3RhdGVJbXBsIHN0YXRlSW1wbCA9IHByb2plY3RQb2xpY3lTdGF0ZXMuZ2V0KCBwcm9qZWN0ICk7Ci0gICAgCi0gICAgaWYoIHN0YXRlSW1wbCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBzdGF0ZUltcGwucmVzdG9yZURlZmF1bHRzKCk7Ci0gICAgfQotICB9Ci0gIAotICAKLSAgcHVibGljIExpc3Q8SVBvbGljeVJlbGF0aW9uc2hpcD4gZ2V0UmVsYXRpb25zaGlwcygpCi0gIHsKLSAgICByZXR1cm4gcmVsYXRpb25zaGlwTGlzdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UmVsYXRpb25zaGlwcyhMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+IHJlbGF0aW9uc2hpcHMpCi0gIHsKLSAgICBpZiggIXByZWRlZmluZWQgKQotICAgIHsKLSAgICAgIHRoaXMucmVsYXRpb25zaGlwTGlzdCA9IHJlbGF0aW9uc2hpcHM7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbnVtTGlzdElkKCkKLSAgewotICAgIHJldHVybiBlbnVtTGlzdElkOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVudW1MaXN0SWQoU3RyaW5nIGVudW1MaXN0SWQpCi0gIHsKLSAgICB0aGlzLmVudW1MaXN0SWQgPSBlbnVtTGlzdElkOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0RW51bUlkKCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0RW51bUlkOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERlZmF1bHRFbnVtSWQoU3RyaW5nIGRlZmF1bHRFbnVtVmFsdWUpCi0gIHsKLSAgICB0aGlzLmRlZmF1bHRFbnVtSWQgPSBkZWZhdWx0RW51bVZhbHVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VW5yZXNvbHZlZFBhcmVudCggU3RyaW5nIHBhcmVudElkICkKLSAgewotICAgIHVucmVzb2x2ZWRQYXJlbnQgPSBwYXJlbnRJZDsgIAotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHNldFVucmVzb2x2ZWRSZWxhdGlvbnNoaXBzKCBMaXN0PFVucmVzb2x2ZWRSZWxhdGlvbnNoaXA+IHJlbGF0aW9uc2hpcHMgKQotICB7Ci0gICAgdW5yZXNvbHZlZFJlbGF0aW9uc2hpcExpc3QgPSByZWxhdGlvbnNoaXBzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZXNvbHZlKCkKLSAgewotICAgIHNldFBhcmVudCggcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggdW5yZXNvbHZlZFBhcmVudCApICk7Ci0gICAgICAgIAotICAgIGZvciggVW5yZXNvbHZlZFJlbGF0aW9uc2hpcCByZWxhdGlvbnNoaXAgOiB1bnJlc29sdmVkUmVsYXRpb25zaGlwTGlzdCApCi0gICAgewotICAgICAgTGlzdDxTdHJpbmc+ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VFbnVtSWRMaXN0ID0gcmVsYXRpb25zaGlwLmdldFNvdXJjZUVudW1lcmF0aW9uTGlzdCgpOyAKLSAgICAgIExpc3Q8VW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcD4gdGFyZ2V0RW51bUlkTGlzdCA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRFbnVtZXJhdGlvbkxpc3QoKTsKLSAgICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiAgICAgICAgc291cmNlRW51bUxpc3QgICA9IGdldFJlc29sdmVkRW51bUxpc3QoIHNvdXJjZUVudW1JZExpc3QgKTsKLSAgICAgIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgICAgICAgICAgICAgc291cmNlUG9saWN5TGlzdCA9IG5ldyBQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsKCBzb3VyY2VFbnVtTGlzdCwgdGhpcyApOwotICAgICAgTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiAgICAgICB0YXJnZXRQb2xpY3lMaXN0ID0gbmV3IFZlY3RvcjxJUG9saWN5RW51bWVyYXRpb25MaXN0PigpOwotICAgICAgCi0gICAgICBmb3IoIFVucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXAgdGFyZ2V0RW51bSA6IHRhcmdldEVudW1JZExpc3QgKQotICAgICAgewotICAgICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICAgICAgdGFyZ2V0UG9saWN5ICAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCB0YXJnZXRFbnVtLmdldFBvbGljeUlkKCkgKTsKLSAgICAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IHRhcmdldExpc3QgICAgICAgICAgID0gZ2V0UmVzb2x2ZWRFbnVtTGlzdCggdGFyZ2V0RW51bS5nZXRFbnVtTGlzdCgpKTsKLSAgICAgICAgSVBvbGljeUVudW1lcmF0aW9uTGlzdCAgICAgIHRhcmdldEVudW1Qb2xpY3lMaXN0ID0gbmV3IFBvbGljeUVudW1lcmF0aW9uTGlzdEltcGwoIHRhcmdldExpc3QsIHRhcmdldFBvbGljeSApOwotICAgICAgICAKLSAgICAgICAgdGFyZ2V0UG9saWN5TGlzdC5hZGQoIHRhcmdldEVudW1Qb2xpY3lMaXN0ICk7Ci0gICAgICAgIAotICAgICAgICBpZiggdGFyZ2V0UG9saWN5ID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5sb2dFcnJvciggIlBvbGljeSBpZCwgIiArIHRhcmdldEVudW0uZ2V0UG9saWN5SWQoKSArICIgbm90IGZvdW5kLiIsIG51bGwgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgSVBvbGljeVJlbGF0aW9uc2hpcCBwb2xpY3lSZWxhdGlvbnNoaXAgPSBuZXcgUG9saWN5UmVsYXRpb25zaGlwSW1wbCggc291cmNlUG9saWN5TGlzdCwgdGFyZ2V0UG9saWN5TGlzdCApOwotICAgICAgCi0gICAgICByZWxhdGlvbnNoaXBMaXN0LmFkZCggcG9saWN5UmVsYXRpb25zaGlwICk7Ci0gICAgfQotICAgICAgICAKLSAgICB1bnJlc29sdmVkUGFyZW50ID0gbnVsbDsKLSAgICB1bnJlc29sdmVkUmVsYXRpb25zaGlwTGlzdCA9IG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGdldFJlc29sdmVkRW51bUxpc3QoIExpc3Q8U3RyaW5nPiBlbnVtSWRMaXN0ICkKLSAgewotICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBlbnVtTGlzdCA9IG5ldyBWZWN0b3I8SVN0YXRlRW51bWVyYXRpb25JdGVtPigpOwotICAgIAotICAgIGZvciggU3RyaW5nIGVudW1JZCA6IGVudW1JZExpc3QgKQotICAgIHsKLSAgICAgIGVudW1MaXN0LmFkZCggcGxhdGZvcm0uZ2V0U3RhdGVJdGVtRW51bWVyYXRpb24oIGVudW1JZCApICk7ICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZW51bUxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZFBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIoSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIpCi0gIHsKLSAgICBjaGlsZENoYW5nZUxpc3RlbmVycy5hZGQoIGxpc3RlbmVyICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIoSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIpCi0gIHsKLSAgICBjaGlsZENoYW5nZUxpc3RlbmVycy5yZW1vdmUoIGxpc3RlbmVyICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZFN0YXR1c0NoYW5nZUxpc3RlbmVyKCBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgaWYoIHN0YXR1c0NoYW5nZUxpc3RlbmVycyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBzdGF0dXNDaGFuZ2VMaXN0ZW5lcnMgPSBuZXcgVmVjdG9yPElTdGF0dXNDaGFuZ2VMaXN0ZW5lcj4oKTsgICAgCi0gICAgfQotICAgIAotICAgIHN0YXR1c0NoYW5nZUxpc3RlbmVycy5hZGQoIGxpc3RlbmVyICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVN0YXR1c0NoYW5nZUxpc3RlbmVyKCBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgaWYoIHN0YXR1c0NoYW5nZUxpc3RlbmVycyAhPSBudWxsICkKLSAgICB7Ci0gICAgICBzdGF0dXNDaGFuZ2VMaXN0ZW5lcnMucmVtb3ZlKCBsaXN0ZW5lciApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFN0YXR1cyggSVN0YXR1cyBzdGF0dXMgKQotICB7Ci0gICAgSVN0YXR1cyBvbGRTdGF0dXMgPSB0aGlzLnN0YXR1czsKLSAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czsKLSAgICBmaXJlU3RhdHVzQ2hhbmdlRXZlbnQoIG9sZFN0YXR1cywgc3RhdHVzICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBmaXJlU3RhdHVzQ2hhbmdlRXZlbnQoIElTdGF0dXMgb2xkU3RhdHVzLCBJU3RhdHVzIG5ld1N0YXR1cyApCi0gIHsKLSAgICBpZiggc3RhdHVzQ2hhbmdlTGlzdGVuZXJzICE9IG51bGwgKQotICAgIHsKLSAgICAgIGZvciggSVN0YXR1c0NoYW5nZUxpc3RlbmVyIGxpc3RlbmVyIDogc3RhdHVzQ2hhbmdlTGlzdGVuZXJzICkKLSAgICAgIHsKLSAgICAgICAgbGlzdGVuZXIuc3RhdHVzQ2hhbmdlKCB0aGlzLCBvbGRTdGF0dXMsIG5ld1N0YXR1cyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZmlyZUNoaWxkQ2hhbmdlc0R1ZXRvRGlzY2FyZCgpCi0gIHsKLSAgICBTZXQ8SVNlcnZpY2VQb2xpY3k+IGNoaWxkU2V0ID0gbmV3IEhhc2hTZXQ8SVNlcnZpY2VQb2xpY3k+KCBjaGlsZHJlbiApOwotICAgIFNldDxJU2VydmljZVBvbGljeT4gY29tbWl0dGVkQ2hpbGRTZXQgPSBuZXcgSGFzaFNldDxJU2VydmljZVBvbGljeT4oIGNvbW1pdHRlZENoaWxkcmVuICk7Ci0gICAgCi0gICAgZm9yKCBJU2VydmljZVBvbGljeSBjaGlsZCA6IGNoaWxkU2V0ICkKLSAgICB7Ci0gICAgICBpZiggY29tbWl0dGVkQ2hpbGRTZXQuY29udGFpbnMoIGNoaWxkICkgKQotICAgICAgewotICAgICAgICBjb21taXR0ZWRDaGlsZFNldC5yZW1vdmUoIGNoaWxkICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIEEgY2hpbGQgd2FzIGFkZGVkIGFuZCBpcyBub3cgYmVpbmcgZGVsZXRlZCBieSB0aGUgZGlzY2FyZC4KLSAgICAgICAgZmlyZUNoaWxkQ2hhbmdlRXZlbnQoIGNoaWxkLCBmYWxzZSApOwotICAgICAgICBwbGF0Zm9ybS5maXJlQ2hpbGRDaGFuZ2VFdmVudCggY2hpbGQsIGZhbHNlICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIEFueSBjaGlsZHJlbiBsZWZ0IGluIHRoZSBjb21taXR0ZWQgc2V0IG11c3QgaGF2ZSBiZWVuIGRlbGV0ZWQgYW5kIGFyZSBub3cKLSAgICAvLyBiZWluZyBhZGRlZCBiYWNrIGR1ZSB0byB0aGUgZGlzY2FyZC4KLSAgICBmb3IoIElTZXJ2aWNlUG9saWN5IGNoaWxkIDogY29tbWl0dGVkQ2hpbGRTZXQgKQotICAgIHsKLSAgICAgIGZpcmVDaGlsZENoYW5nZUV2ZW50KCBjaGlsZCwgdHJ1ZSApOwotICAgICAgcGxhdGZvcm0uZmlyZUNoaWxkQ2hhbmdlRXZlbnQoIGNoaWxkLCB0cnVlICk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZmlyZUNoaWxkQ2hhbmdlRXZlbnQoIElTZXJ2aWNlUG9saWN5IHBvbGljeSwgYm9vbGVhbiBpc0FkZCApCi0gIHsKLSAgICBmb3IoIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyIDogY2hpbGRDaGFuZ2VMaXN0ZW5lcnMgKQotICAgIHsKLSAgICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHBvbGljeUxpc3QgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigxKTsKLSAgICAgIExpc3Q8Qm9vbGVhbj4gICAgICAgIGFkZGVkTGlzdCAgPSBuZXcgVmVjdG9yPEJvb2xlYW4+KDEpOwotICAgICAgCi0gICAgICBwb2xpY3lMaXN0LmFkZCggcG9saWN5ICk7Ci0gICAgICBhZGRlZExpc3QuYWRkKCBpc0FkZCApOwotICAgICAgbGlzdGVuZXIuY2hpbGRDaGFuZ2UoIHBvbGljeUxpc3QsIGFkZGVkTGlzdCApOyAgICAgCi0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1NlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjAwZjkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTExMyAgIDIwOTcwMSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDExMSAgIDIxNDkwNyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA4MDIxNCAgIDIxODk5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBDb25jdXJyZW50IGV4Y2VwdGlvbiBmaXgKLSAqIDIwMDgwMzI1ICAgMjIyMDk1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3k7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5FdmFsdWF0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuRXhwcmVzc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLklFdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5Qcm9qZWN0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU3RhdGVFbnVtZXJhdGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lBY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5CYWNraW5nU3RvcmVFeGNlcHRpb247Ci0KLQotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwgCi17Ci0gIHByaXZhdGUgTGlzdDxJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXI+ICAgICAgICBsb2FkTGlzdGVuZXJzOwotICBwcml2YXRlIE1hcDxTdHJpbmcsIFNlcnZpY2VQb2xpY3lJbXBsPiAgICAgICAgICAgY29tbWl0dGVkUG9saWN5TWFwOwotICBwcml2YXRlIE1hcDxTdHJpbmcsIFNlcnZpY2VQb2xpY3lJbXBsPiAgICAgICAgICAgcG9saWN5TWFwOwotICBwcml2YXRlIE1hcDxTdHJpbmcsIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPj4gZW51bUxpc3Q7Ci0gIHByaXZhdGUgTWFwPFN0cmluZywgU3RhdGVFbnVtZXJhdGlvbkl0ZW1JbXBsPiAgICBlbnVtSXRlbUxpc3Q7Ci0gIHByaXZhdGUgTWFwPElQcm9qZWN0LCBQcm9qZWN0RW50cnk+ICAgICAgICAgICAgICBlbmFibGVkUHJvamVjdE1hcDsKLSAgcHJpdmF0ZSBMaXN0PEV4cHJlc3Npb24+ICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWRMaXN0OwotICBwcml2YXRlIExpc3Q8SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI+ICAgICAgICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnM7Ci0gIHByaXZhdGUgTGlzdDxJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lcj4gICAgICAgICBjaGlsZENoYW5nZUxpc3RlbmVyc09uQ29tbWl0OwotICBwcml2YXRlIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgICAgICAgICAgICAgICAgICAgY29tbWl0Q2hpbGRDaGFuZ2VQb2xpY3k7Ci0gIHByaXZhdGUgTGlzdDxCb29sZWFuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRDaGlsZENoYW5nZUFkZGVkOwotICBwcml2YXRlIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgICAgICAgICAgICAgICAgICAgcXVldWVkQ2hpbGRDaGFuZ2VQb2xpY3k7Ci0gIHByaXZhdGUgTGlzdDxCb29sZWFuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkOwotICBwcml2YXRlIExpc3Q8SVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcj4gcHJvamVjdFBsYXRmb3JtTGlzdGVuZXJzOwotICAKLSAgcHVibGljIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwoKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGxvYWQoKQotICB7Ci0gICAgU2VydmljZVBvbGljeVJlZ2lzdHJ5IHJlZ2lzdHJ5ICA9IG5ldyBTZXJ2aWNlUG9saWN5UmVnaXN0cnkoIHRoaXMgKTsKLSAgICBMaXN0PFN0cmluZz4gICAgICAgICAgbG9jYWxJZHMgID0gTG9jYWxVdGlscy5nZXRMb2NhbFBvbGljeUlkcygpOwotICAgIAotICAgIGxvYWRMaXN0ZW5lcnMgICAgID0gbmV3IFZlY3RvcjxJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXI+KCk7Ci0gICAgcG9saWN5TWFwICAgICAgICAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNlcnZpY2VQb2xpY3lJbXBsPigpOwotICAgIGVudW1MaXN0ICAgICAgICAgID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4+KCk7Ci0gICAgZW51bUl0ZW1MaXN0ICAgICAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0YXRlRW51bWVyYXRpb25JdGVtSW1wbD4oKTsKLSAgICBlbmFibGVkUHJvamVjdE1hcCA9IG5ldyBIYXNoTWFwPElQcm9qZWN0LCBQcm9qZWN0RW50cnk+KCk7Ci0gICAgZW5hYmxlZExpc3QgICAgICAgPSBuZXcgVmVjdG9yPEV4cHJlc3Npb24+KCk7Ci0gICAgCi0gICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnMgICAgICAgICA9IG5ldyBWZWN0b3I8SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI+KCk7Ci0gICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnNPbkNvbW1pdCA9IG5ldyBWZWN0b3I8SVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI+KCk7Ci0gICAgY29tbWl0Q2hpbGRDaGFuZ2VQb2xpY3kgICAgICA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgY29tbWl0Q2hpbGRDaGFuZ2VBZGRlZCAgICAgICA9IG5ldyBWZWN0b3I8Qm9vbGVhbj4oKTsKLSAgICBwcm9qZWN0UGxhdGZvcm1MaXN0ZW5lcnMgICAgID0gbmV3IFZlY3RvcjxJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyPigpOwotICAgIAotICAgIHJlZ2lzdHJ5LmxvYWQoIGxvYWRMaXN0ZW5lcnMsIHBvbGljeU1hcCwgZW51bUxpc3QsIGVudW1JdGVtTGlzdCApOwotICAgIAotICAgIC8vIFRoaXMgZmlyc3QgbG9vcCB0aHJvdWdoIHRoZSBpZHMgd2lsbCBvbmx5IGNyZWF0ZSBzZXJ2aWNlIHBvbGljeSBvYmplY3RzCi0gICAgLy8gd2l0aG91dCBwb3B1bGF0aW5nIHRoZW0gd2l0aCB0aGVyZSB2YWx1ZXMuCi0gICAgZm9yKCBTdHJpbmcgbG9jYWxQb2xpY3lJZCA6IGxvY2FsSWRzICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5SW1wbCBsb2NhbFBvbGljeSA9IG5ldyBTZXJ2aWNlUG9saWN5SW1wbCggZmFsc2UsIGxvY2FsUG9saWN5SWQsIHRoaXMgKTsKLSAgICAgIAotICAgICAgcG9saWN5TWFwLnB1dCggbG9jYWxQb2xpY3lJZCwgbG9jYWxQb2xpY3kgKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVGhpcyBzZWNvbmQgbG9vcCB3aWxsIHBvcHVsYXRlIHRoZSBzZXJ2aWNlIHBvbGljeSB2YWx1ZXMgYW5kCi0gICAgLy8gY3Jvc3NyZWZlcmVuY2UgcGFyZW50IGFuZCBjaGlsZCBzZXJ2aWNlIHBvbGljaWVzLgotICAgIGZvciggU3RyaW5nIGxvY2FsUG9saWN5SWQgOiBsb2NhbElkcyApCi0gICAgewotICAgICAgTG9jYWxVdGlscy5sb2FkTG9jYWxQb2xpY3koIGxvY2FsUG9saWN5SWQsIHRoaXMgKTsKLSAgICB9Ci0gICAgICAgCi0gICAgZm9yKCBJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIgbG9hZExpc3RlbmVyIDogbG9hZExpc3RlbmVycyApCi0gICAgewotICAgICAgbG9hZExpc3RlbmVyLmxvYWQoKTsKLSAgICB9Ci0gICAgCi0gICAgY29tbWl0Q2hhbmdlcyggZmFsc2UgKTsgICAKLQotICAgIC8vIENvbW1pdCBhbnkgcHJvamVjdCBsZXZlbCBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgYnkgbG9hZCBsaXN0ZW5lcnMuCi0gICAgZm9yKCBJUHJvamVjdCBwcm9qZWN0IDogZW5hYmxlZFByb2plY3RNYXAua2V5U2V0KCkgKQotICAgIHsKLSAgICAgIGNvbW1pdENoYW5nZXMoIHByb2plY3QgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEVuYWJsZWRFeHByZXNzaW9uKCBFeHByZXNzaW9uIGV4cHJlc3Npb24gKQotICB7Ci0gICAgaWYoIGV4cHJlc3Npb24gIT0gbnVsbCApCi0gICAgewotICAgICAgZW5hYmxlZExpc3QuYWRkKCBleHByZXNzaW9uICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgYm9vbGVhbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgIElFdmFsdWF0aW9uQ29udGV4dCBjb250ZXh0ID0gbmV3IEV2YWx1YXRpb25Db250ZXh0KCBudWxsLCBvYmplY3QgKTsKLSAgICBjb250ZXh0LmFkZFZhcmlhYmxlKCAic2VsZWN0aW9uIiwgb2JqZWN0ICk7IC8vJE5PTi1OTFMtMSQKLSAgICBjb250ZXh0LnNldEFsbG93UGx1Z2luQWN0aXZhdGlvbiggdHJ1ZSApOwotICAgIAotICAgIGZvciggRXhwcmVzc2lvbiBlbmFibGVkSXRlbSA6IGVuYWJsZWRMaXN0ICkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgRXZhbHVhdGlvblJlc3VsdCBleHBSZXN1bHQgPSBlbmFibGVkSXRlbS5ldmFsdWF0ZSggY29udGV4dCApOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgYW55IGV4cHJlc3Npb24gcmV0dXJucyBUUlVFIG9yIE5PVF9MT0FERUQgd2Ugd2lsbCByZXR1cm4gdHJ1ZSBhcwotICAgICAgICAvLyB0aGUgcmVzdWx0LgotICAgICAgICBpZiggZXhwUmVzdWx0ICE9IEV2YWx1YXRpb25SZXN1bHQuRkFMU0UgKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgLy8gSWdub3JlIHRoZSBleHByZXNzaW9uIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCi0gICAgICAgIFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IubG9nRXJyb3IoICJFcnJvciBldmFsdWF0aW5nIGVuYWJsZW1lbnQgZXhwcmVzc2lvbi4iLCBleGMgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjb21taXRDaGFuZ2VzKCBib29sZWFuIHNhdmVMb2NhbHMgKQotICB7Ci0gICAgTGlzdDxTdHJpbmc+IGxvY2FsSWRzID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7Ci0gICAgCi0gICAgaWYoIHNhdmVMb2NhbHMgKSBMb2NhbFV0aWxzLnJlbW92ZUFsbFByZWZlcmVuY2VQb2xpY2llcyggbnVsbCwgbnVsbCApOwotICAgIAotICAgIC8vIEZpcmUgY2hpbGQgY2hhbmdlIGV2ZW50cyBmb3IgY29tbWl0IGxpc3RlbmVycwotICAgIGZvciggSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgOiBjaGlsZENoYW5nZUxpc3RlbmVyc09uQ29tbWl0ICkKLSAgICB7Ci0gICAgICBsaXN0ZW5lci5jaGlsZENoYW5nZSggY29tbWl0Q2hpbGRDaGFuZ2VQb2xpY3ksIGNvbW1pdENoaWxkQ2hhbmdlQWRkZWQgKTsKLSAgICB9Ci0gICAgCi0gICAgcmVtb3ZlRGVsZXRlZFByZWZlcmVuY2VEYXRhKCk7Ci0gICAgCi0gICAgY29tbWl0Q2hpbGRDaGFuZ2VQb2xpY3kgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigpOwotICAgIGNvbW1pdENoaWxkQ2hhbmdlQWRkZWQgID0gbmV3IFZlY3RvcjxCb29sZWFuPigpOwotICAgIAotICAgIGZvciggU2VydmljZVBvbGljeUltcGwgcG9saWN5IDogcG9saWN5TWFwLnZhbHVlcygpICkKLSAgICB7Ci0gICAgICBwb2xpY3kuY29tbWl0Q2hhbmdlcygpOwotICAgICAgCi0gICAgICBpZiggc2F2ZUxvY2FscyAmJiAhcG9saWN5LmlzUHJlZGVmaW5lZCgpICkKLSAgICAgIHsKLSAgICAgICAgTG9jYWxVdGlscy5zYXZlTG9jYWxQb2xpY3koIHBvbGljeSApOwotICAgICAgICBsb2NhbElkcy5hZGQoIHBvbGljeS5nZXRJZCgpICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmKCBzYXZlTG9jYWxzICkgTG9jYWxVdGlscy5zYXZlTG9jYWxJZHMoIGxvY2FsSWRzICk7Ci0gICAgCi0gICAgY29tbWl0dGVkUG9saWN5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4oKTsKLSAgICBjb21taXR0ZWRQb2xpY3lNYXAucHV0QWxsKCBwb2xpY3lNYXAgKTsKLSAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmdldERlZmF1bHQoKS5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZURlbGV0ZWRQcmVmZXJlbmNlRGF0YSgpCi0gIHsKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY29tbWl0Q2hpbGRDaGFuZ2VQb2xpY3kuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBJU2VydmljZVBvbGljeSBwb2xpY3kgPSBjb21taXRDaGlsZENoYW5nZVBvbGljeS5nZXQoIGluZGV4ICk7Ci0gICAgICBib29sZWFuICAgICAgICBhZGRlZCAgPSBjb21taXRDaGlsZENoYW5nZUFkZGVkLmdldCggaW5kZXggKTsKLSAgICAgIAotICAgICAgaWYoICFhZGRlZCApCi0gICAgICB7Ci0gICAgICAgIC8vIEFkZCBwb2xpY3kgaXMgYmVpbmcgZGVsZXRlZC4gIFdlIG5lZWQgdG8gcmVtb3ZlIGFueSBzdGF0ZSBkYXRhCi0gICAgICAgIC8vIGZvciB0aGlzIHBvbGljeSBhdCB0aGUgd29ya3NwYWNlIGxldmVsIGFuZCB0aGUgcHJvamVjdCBsZXZlbC4KLSAgICAgICAgTG9jYWxVdGlscy5yZW1vdmVBbGxQcmVmZXJlbmNlUG9saWNpZXMoIHBvbGljeS5nZXRJZCgpLCBudWxsICk7Ci0gICAgICAgIAotICAgICAgICBmb3IoIElQcm9qZWN0IHByb2ogOiBlbmFibGVkUHJvamVjdE1hcC5rZXlTZXQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggcHJvai5leGlzdHMoKSAmJiBwcm9qLmlzT3BlbigpICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRWNsaXBzZVByZWZlcmVuY2VzIHByb2pQcmVmcyA9IG5ldyBQcm9qZWN0U2NvcGUoIHByb2ogKS5nZXROb2RlKCBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRCApOwotICAgICAgICAgICAgTG9jYWxVdGlscy5yZW1vdmVBbGxQcmVmZXJlbmNlUG9saWNpZXMoIHBvbGljeS5nZXRJZCgpLCBwcm9qUHJlZnMgKTsKLSAgICAgICAgICAKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwcm9qUHJlZnMuZmx1c2goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKCBCYWNraW5nU3RvcmVFeGNlcHRpb24gZXhjICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5sb2dFcnJvciggIkVycm9yIGZsdXNoaW5nIHByb2plY3QgcHJvcGVydGllcy4iLCBleGMgKTsgLy8kTk9OLU5MUy0xJCAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbGx5IHRvIHJlbW92ZSBhIHNlcnZpY2UgcG9saWN5LgotICAgKiAKLSAgICogQHBhcmFtIHBvbGljeQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUG9saWN5KCBJU2VydmljZVBvbGljeSBwb2xpY3kgKQotICB7Ci0gICAgcG9saWN5TWFwLnJlbW92ZSggcG9saWN5LmdldElkKCkgKTsKLSAgICBmaXJlQ2hpbGRDaGFuZ2VFdmVudCggcG9saWN5LCBmYWxzZSApOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgb25seSBjYWxsZWQgZnJvbSB0aGUgcGxhdGZvcm0gQVBJCi0gICAqIAotICAgKiBAcGFyYW0gcG9saWN5Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVQbGF0Zm9ybVBvbGljeSggSVNlcnZpY2VQb2xpY3kgcG9saWN5ICkKLSAgewotICAgIGlmKCBwb2xpY3kuaXNQcmVkZWZpbmVkKCkgKSByZXR1cm47Ci0gICAgCi0gICAgSVNlcnZpY2VQb2xpY3kgcGFyZW50ID0gcG9saWN5LmdldFBhcmVudFBvbGljeSgpOwotICAgIAotICAgIGlmKCBwYXJlbnQgPT0gbnVsbCApCi0gICAgewotICAgICAgLy8gUmVtb3ZlIGFueSBjaGlsZHJlbiBmaXJzdAotICAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gY2hpbGRyZW4gPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PiggcG9saWN5LmdldENoaWxkcmVuKCkgKTsKLSAgICAgIAotICAgICAgZm9yKCBJU2VydmljZVBvbGljeSBjaGlsZCA6IGNoaWxkcmVuICkKLSAgICAgIHsKLSAgICAgICAgcG9saWN5LnJlbW92ZUNoaWxkKCBjaGlsZCApOyAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIHJlbW92ZVBvbGljeSggKFNlcnZpY2VQb2xpY3lJbXBsKXBvbGljeSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoIHBvbGljeSApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkQ2hpbGRDaGFuZ2VMaXN0ZW5lciggSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIsIGJvb2xlYW4gb25Db21taXQgKQotICB7Ci0gICAgaWYoIG9uQ29tbWl0ICkKLSAgICB7Ci0gICAgICBjaGlsZENoYW5nZUxpc3RlbmVyc09uQ29tbWl0LmFkZCggbGlzdGVuZXIgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNoaWxkQ2hhbmdlTGlzdGVuZXJzLmFkZCggbGlzdGVuZXIgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNoaWxkQ2hhbmdlTGlzdGVuZXIoIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyLCBib29sZWFuIG9uQ29tbWl0ICkKLSAgewotICAgIGlmKCBvbkNvbW1pdCApCi0gICAgewotICAgICAgY2hpbGRDaGFuZ2VMaXN0ZW5lcnNPbkNvbW1pdC5yZW1vdmUoIGxpc3RlbmVyICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjaGlsZENoYW5nZUxpc3RlbmVycy5yZW1vdmUoIGxpc3RlbmVyICk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBxdWV1ZUNoaWxkQ2hhbmdlTGlzdGVuZXJzKCBib29sZWFuIHF1ZXVlICkKLSAgewotICAgIGlmKCBxdWV1ZSAmJiBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkID09IG51bGwgKQotICAgIHsKLSAgICAgIHF1ZXVlZENoaWxkQ2hhbmdlQWRkZWQgPSBuZXcgVmVjdG9yPEJvb2xlYW4+KCk7Ci0gICAgICBxdWV1ZWRDaGlsZENoYW5nZVBvbGljeSA9IG5ldyBWZWN0b3I8SVNlcnZpY2VQb2xpY3k+KCk7Ci0gICAgfQotICAgIGVsc2UgaWYoICFxdWV1ZSAmJiBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkICE9IG51bGwgKQotICAgIHsKLSAgICAgIC8vIFF1ZXVpbmcgaGFzIGJlZW4gdHVybmVkIG9mZiBzbyB3ZSB3aWxsIGZpcmUgYWxsIHRoZSBxdWV1ZWQgZXZlbnRzLgotICAgICAgZm9yKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciA6IGNoaWxkQ2hhbmdlTGlzdGVuZXJzICkKLSAgICAgIHsKLSAgICAgICAgbGlzdGVuZXIuY2hpbGRDaGFuZ2UoIHF1ZXVlZENoaWxkQ2hhbmdlUG9saWN5LCBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHF1ZXVlZENoaWxkQ2hhbmdlQWRkZWQgPSBudWxsOwotICAgICAgcXVldWVkQ2hpbGRDaGFuZ2VQb2xpY3kgPSBudWxsOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgZmlyZUNoaWxkQ2hhbmdlRXZlbnQoIElTZXJ2aWNlUG9saWN5IHBvbGljeSwgYm9vbGVhbiBpc0FkZCApCi0gIHsKLSAgICBpZiggcXVldWVkQ2hpbGRDaGFuZ2VBZGRlZCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiBwb2xpY3lMaXN0ID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oMSk7Ci0gICAgICBMaXN0PEJvb2xlYW4+ICAgICAgICBhZGRlZExpc3QgID0gbmV3IFZlY3RvcjxCb29sZWFuPigxKTsKLSAgICAgIAotICAgICAgcG9saWN5TGlzdC5hZGQoIHBvbGljeSApOwotICAgICAgYWRkZWRMaXN0LmFkZCggaXNBZGQgKTsKLSAgICAgIAotICAgICAgZm9yKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciA6IGNoaWxkQ2hhbmdlTGlzdGVuZXJzICkKLSAgICAgIHsKLSAgICAgICAgbGlzdGVuZXIuY2hpbGRDaGFuZ2UoIHBvbGljeUxpc3QsIGFkZGVkTGlzdCApOyAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBxdWV1ZWRDaGlsZENoYW5nZUFkZGVkLmFkZCggaXNBZGQgKTsKLSAgICAgIHF1ZXVlZENoaWxkQ2hhbmdlUG9saWN5LmFkZCggcG9saWN5ICk7Ci0gICAgfQotICAgIAotICAgIGNvbW1pdENoaWxkQ2hhbmdlQWRkZWQuYWRkKCBpc0FkZCApOwotICAgIGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5LmFkZCggcG9saWN5ICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNvbW1pdENoYW5nZXMoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgZm9yKCBTZXJ2aWNlUG9saWN5SW1wbCBwb2xpY3kgOiBwb2xpY3lNYXAudmFsdWVzKCkgKQotICAgIHsKLSAgICAgICgoUG9saWN5U3RhdGVJbXBsKXBvbGljeS5nZXRQb2xpY3lTdGF0ZSggcHJvamVjdCApKS5jb21taXRDaGFuZ2VzKCk7Ci0gICAgfQotICAgIAotICAgIFByb2plY3RFbnRyeSBlbnRyeSA9IGdldFByb2plY3RFbnRyeSggcHJvamVjdCApOwotICAgIAotICAgIGVudHJ5LmlzRW5hYmxlZENvbW1pdHRlZCA9IGVudHJ5LmlzRW5hYmxlZDsgIAotICAgIHNldFByb2plY3RFbmFibGVkKCBwcm9qZWN0LCBlbnRyeS5pc0VuYWJsZWRDb21taXR0ZWQgKTsKLSAgICAgICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcm9qZWN0UHJlZnMgPSBuZXcgUHJvamVjdFNjb3BlKCBwcm9qZWN0ICkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICAgIAotICAgICAgcHJvamVjdFByZWZzLmZsdXNoKCk7Ci0gICAgfQotICAgIGNhdGNoKCBCYWNraW5nU3RvcmVFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmxvZ0Vycm9yKCAiRXJyb3Igd2hpbGUgY29tbWl0dGluZyBwcm9qZWN0IHByZWZlcmVuY2VzLiIsIGV4YyApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNjYXJkQ2hhbmdlcygpCi0gIHsKLSAgICBwb2xpY3lNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNlcnZpY2VQb2xpY3lJbXBsPigpOwotICAgIHBvbGljeU1hcC5wdXRBbGwoIGNvbW1pdHRlZFBvbGljeU1hcCApOwotICAgIAotICAgIGNvbW1pdENoaWxkQ2hhbmdlUG9saWN5ID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICBjb21taXRDaGlsZENoYW5nZUFkZGVkICA9IG5ldyBWZWN0b3I8Qm9vbGVhbj4oKTsKLSAgICAKLSAgICBmb3IoIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSA6IGNvbW1pdHRlZFBvbGljeU1hcC52YWx1ZXMoKSApCi0gICAgewotICAgICAgcG9saWN5LmRpc2NhcmRDaGFuZ2VzKCk7Ci0gICAgfSAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZGlzY2FyZENoYW5nZXMoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgZm9yKCBTZXJ2aWNlUG9saWN5SW1wbCBwb2xpY3kgOiBwb2xpY3lNYXAudmFsdWVzKCkgKQotICAgIHsKLSAgICAgICgoUG9saWN5U3RhdGVJbXBsKXBvbGljeS5nZXRQb2xpY3lTdGF0ZSggcHJvamVjdCApKS5kaXNjYXJkQ2hhbmdlcygpOwotICAgIH0KLSAgICAKLSAgICBQcm9qZWN0RW50cnkgZW50cnkgPSBnZXRQcm9qZWN0RW50cnkoIHByb2plY3QgKTsKLSAgICAKLSAgICBlbnRyeS5pc0VuYWJsZWQgPSBlbnRyeS5pc0VuYWJsZWRDb21taXR0ZWQ7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVzdG9yZURlZmF1bHRzKCkKLSAgewotICAgIFZlY3RvcjxTZXJ2aWNlUG9saWN5SW1wbD4gdGVtcFBvbGljeVZhbHVlcyAKLSAgICAgICA9IG5ldyBWZWN0b3I8U2VydmljZVBvbGljeUltcGw+KCBwb2xpY3lNYXAudmFsdWVzKCkgKTsKLSAgICAKLSAgICBmb3IoIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSA6IHRlbXBQb2xpY3lWYWx1ZXMgKQotICAgIHsKLSAgICAgIHBvbGljeS5yZXN0b3JlRGVmYXVsdHMoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVEZWZhdWx0cyggSVByb2plY3QgcHJvamVjdCApCi0gIHsKLSAgICBmb3IoIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSA6IHBvbGljeU1hcC52YWx1ZXMoKSApCi0gICAgewotICAgICAgcG9saWN5LnJlc3RvcmVEZWZhdWx0cyggcHJvamVjdCApOwotICAgIH0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRBbGxQb2xpY3lJZHMoKQotICB7Ci0gICAgcmV0dXJuIHBvbGljeU1hcC5rZXlTZXQoKTsKLSAgfQotICAgIAotICBwdWJsaWMgTGlzdDxJU2VydmljZVBvbGljeT4gZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyggSUZpbHRlciBmaWx0ZXIgKQotICB7Ci0gICAgTGlzdDxJU2VydmljZVBvbGljeT4gcm9vdFBvbGljaWVzID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICAKLSAgICBmb3IoIFN0cmluZyBwb2xpY3lJZCA6IHBvbGljeU1hcC5rZXlTZXQoKSApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUltcGwgcG9saWN5ID0gcG9saWN5TWFwLmdldCggcG9saWN5SWQgKTsKLSAgICAgIAotICAgICAgaWYoIHBvbGljeS5nZXRQYXJlbnRQb2xpY3koKSA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgaWYoIGZpbHRlciA9PSBudWxsIHx8IChmaWx0ZXIgIT0gbnVsbCAmJiBmaWx0ZXIuYWNjZXB0KCBwb2xpY3kgKSkgKQotICAgICAgICB7Ci0gICAgICAgICAgcm9vdFBvbGljaWVzLmFkZCggcG9saWN5ICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJvb3RQb2xpY2llczsKLSAgfQotICAKLSAgcHVibGljIFNlcnZpY2VQb2xpY3lJbXBsIGNyZWF0ZVNlcnZpY2VQb2xpY3koIElTZXJ2aWNlUG9saWN5IHBhcmVudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICBpZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICBlbnVtTGlzdElkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgIGRlZmF1bHRFbnVtSWQgKQotICB7Ci0gICAgaWYoIGlkID09IG51bGwgKSBpZCA9ICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuaWQiOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgU3RyaW5nICAgICAgICAgICAgdW5pcXVlSWQgPSBtYWtlVW5pcXVlSWQoIGlkICk7Ci0gICAgU2VydmljZVBvbGljeUltcGwgcG9saWN5ICAgPSBuZXcgU2VydmljZVBvbGljeUltcGwoIGZhbHNlLCB1bmlxdWVJZCwgdGhpcyApOwotICAgIAotICAgIHBvbGljeS5zZXRQYXJlbnQoIChTZXJ2aWNlUG9saWN5SW1wbClwYXJlbnQgKTsKLSAgICBwb2xpY3kuc2V0RW51bUxpc3RJZCggZW51bUxpc3RJZCApOwotICAgIHBvbGljeS5zZXREZWZhdWx0RW51bUlkKCBkZWZhdWx0RW51bUlkICk7Ci0gICAgcG9saWN5TWFwLnB1dCggdW5pcXVlSWQsIHBvbGljeSApOwotICAgIGZpcmVDaGlsZENoYW5nZUV2ZW50KCBwb2xpY3ksIHRydWUgKTsKLSAgICAKLSAgICByZXR1cm4gcG9saWN5OwotICB9Ci0gIAotICBwdWJsaWMgU2VydmljZVBvbGljeUltcGwgZ2V0U2VydmljZVBvbGljeSggU3RyaW5nIGlkICkKLSAgewotICAgIHJldHVybiBpZCA9PSBudWxsID8gbnVsbCA6IHBvbGljeU1hcC5nZXQoIGlkICk7ICAKLSAgfQotICAKLSAgcHVibGljIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBnZXRTdGF0ZUVudW1lcmF0aW9uKCBTdHJpbmcgZW51bUlkICkKLSAgewotICAgIHJldHVybiBlbnVtTGlzdC5nZXQoIGVudW1JZCApOyAKLSAgfQotICAKLSAgcHVibGljIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBnZXRTdGF0ZUl0ZW1FbnVtZXJhdGlvbiggU3RyaW5nIHN0YXRlSXRlbUlkICkKLSAgewotICAgIHJldHVybiBlbnVtSXRlbUxpc3QuZ2V0KCBzdGF0ZUl0ZW1JZCApOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc1Byb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgUHJvamVjdEVudHJ5IGVudHJ5ICA9IGdldFByb2plY3RFbnRyeSggcHJvamVjdCApOwotICAgIAotICAgIHJldHVybiBlbnRyeS5pc0VuYWJsZWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBnZXRQcm9qZWN0UHJlZmVyZW5jZUVuYWJsZWQoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBwbHVnaW5JZCAgICAgICAgICA9IFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEOwotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJvamVjdFByZWZlcmVuY2UgPSBuZXcgUHJvamVjdFNjb3BlKCBwcm9qZWN0ICkuZ2V0Tm9kZSggcGx1Z2luSWQgKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgIGtleSAgICAgICAgICAgICAgID0gcGx1Z2luSWQgKyAiLnByb2plY3RFbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHJldHVybiBwcm9qZWN0UHJlZmVyZW5jZS5nZXRCb29sZWFuKCBrZXksIGZhbHNlICk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBJUHJvamVjdCBwcm9qZWN0LCBib29sZWFuIHZhbHVlICkKLSAgewotICAgIFByb2plY3RFbnRyeSBlbnRyeSAgPSBnZXRQcm9qZWN0RW50cnkoIHByb2plY3QgKTsKLSAgICAKLSAgICBlbnRyeS5pc0VuYWJsZWQgPSB2YWx1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIHByb2plY3QgcGxhdGZvcm0gbGlzdGVuZXIuICBXaGVuIGEgcGFydGljdWxhciBwcm9qZWN0IGlzIHJlZmVyZW5jZWQKLSAgICogYnkgaW4gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtIHRoaXMgbGlzdGVuZXIgd2lsbCBiZSBjYWxsZWQgdGhlIGZpcnN0Ci0gICAqIHRpbWUgdGhlIHByb2plY3QgaXMgbG9hZGVkIGludG8gdGhlIHN5c3RlbS4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFByb2plY3RMb2FkTGlzdGVuZXIoIElQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgcHJvamVjdFBsYXRmb3JtTGlzdGVuZXJzLmFkZCggbGlzdGVuZXIgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlbW92ZXMgYSBwcm9qZWN0IHBsYXRmb3JtIGxpc3RlbmVyLgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUHJvamVjdExvYWRMaXN0ZW5lciggSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICBwcm9qZWN0UGxhdGZvcm1MaXN0ZW5lcnMucmVtb3ZlKCBsaXN0ZW5lciApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0UHJvamVjdEVuYWJsZWQoIElQcm9qZWN0IHByb2plY3QsIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICBwbHVnaW5JZCAgICAgICAgICA9IFNlcnZpY2VQb2xpY3lBY3RpdmF0b3IuUExVR0lOX0lEOwotICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJvamVjdFByZWZlcmVuY2UgPSBuZXcgUHJvamVjdFNjb3BlKCBwcm9qZWN0ICkuZ2V0Tm9kZSggcGx1Z2luSWQgKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgIGtleSAgICAgICAgICAgICAgID0gcGx1Z2luSWQgKyAiLnByb2plY3RFbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgcHJvamVjdFByZWZlcmVuY2UucHV0Qm9vbGVhbigga2V5LCB2YWx1ZSApOyAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBQcm9qZWN0RW50cnkgZ2V0UHJvamVjdEVudHJ5KCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIFByb2plY3RFbnRyeSBlbnRyeSAgPSBlbmFibGVkUHJvamVjdE1hcC5nZXQoIHByb2plY3QgKTsKLSAgICAKLSAgICBpZiggZW50cnkgPT0gbnVsbCApCi0gICAgewotICAgICAgZW50cnkgPSBuZXcgUHJvamVjdEVudHJ5KCk7Ci0gICAgICBlbmFibGVkUHJvamVjdE1hcC5wdXQoIHByb2plY3QsIGVudHJ5ICk7Ci0gICAgICBlbnRyeS5pc0VuYWJsZWRDb21taXR0ZWQgPSBnZXRQcm9qZWN0UHJlZmVyZW5jZUVuYWJsZWQoIHByb2plY3QgKTsKLSAgICAgIGVudHJ5LmlzRW5hYmxlZCA9IGVudHJ5LmlzRW5hYmxlZENvbW1pdHRlZDsKLSAgICAgIGZpcmVQcm9qZWN0TG9hZExpc3RlbmVyKCBwcm9qZWN0ICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5OwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZmlyZVByb2plY3RMb2FkTGlzdGVuZXIoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgZm9yKCBJUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyIGxpc3RlbmVyIDogcHJvamVjdFBsYXRmb3JtTGlzdGVuZXJzICkKLSAgICB7Ci0gICAgICBsaXN0ZW5lci5sb2FkKCBwcm9qZWN0ICk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBtYWtlVW5pcXVlSWQoIFN0cmluZyBpZCApCi0gIHsKLSAgICBTdHJpbmcgIHJlc3VsdCAgPSBpZDsKLSAgICBpbnQgICAgIGlkQ291bnQgPSAxOwotICAgIFBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSggIlxcZCokIiApOyAvLyBNYXRjaCBhbnkgbnVtZXJpY2FsIGRpZ2l0cyBhdCB0aGUgZW5kIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHN0cmluZy4KLSAgICAKLSAgICB3aGlsZSggcG9saWN5TWFwLmNvbnRhaW5zS2V5KCByZXN1bHQgKSApCi0gICAgewotICAgICAgTWF0Y2hlciBtYXRjaGVyID0gcGF0dGVybi5tYXRjaGVyKCByZXN1bHQgKTsKLSAgICAKLSAgICAgIHJlc3VsdCA9IG1hdGNoZXIucmVwbGFjZUZpcnN0KCAiIiApICsgaWRDb3VudDsgLy8kTk9OLU5MUy0xJAotICAgICAgaWRDb3VudCsrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFByb2plY3RFbnRyeQotICB7Ci0gICAgIGJvb2xlYW4gaXNFbmFibGVkQ29tbWl0dGVkOwotICAgICBib29sZWFuIGlzRW5hYmxlZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TZXJ2aWNlUG9saWN5UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvU2VydmljZVBvbGljeVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNTcxMjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TZXJ2aWNlUG9saWN5UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5FeHByZXNzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuRXhwcmVzc2lvbkNvbnZlcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLkV4cHJlc3Npb25UYWdOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlscy5SZWdpc3RyeVV0aWxzOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeVJlZ2lzdHJ5Ci17Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZJQ0VfUE9MSUNZX0lEID0gU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKyAiLnNlcnZpY2Vwb2xpY3kiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwgcGxhdGZvcm07Ci0gIAotICBwdWJsaWMgU2VydmljZVBvbGljeVJlZ2lzdHJ5KCBTZXJ2aWNlUG9saWN5UGxhdGZvcm1JbXBsIHBsYXRmb3JtICkKLSAgewotICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgbG9hZCggTGlzdDxJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXI+ICAgICAgICBsb2FkTGlzdGVuZXJzLAotICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTZXJ2aWNlUG9saWN5SW1wbD4gICAgICAgICAgIHBvbGljeU1hcCwKLSAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+PiBlbnVtTWFwLAotICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGw+ICAgIGVudW1JdGVtTWFwICkKLSAgewotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoU0VSVklDRV9QT0xJQ1lfSUQpOwotICAgIAotICAgIGZvciggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgOiBlbGVtZW50cyApCi0gICAgewotICAgICAgU3RyaW5nIGVsZW1lbnROYW1lID0gZWxlbWVudC5nZXROYW1lKCkudG9Mb3dlckNhc2UoKTsKLSAgICAgIAotICAgICAgaWYoIGVsZW1lbnROYW1lLmVxdWFscyggInNlcnZpY2Vwb2xpY3kiKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbG9hZFNlcnZpY2VQb2xpY3koIGVsZW1lbnQsIGxvYWRMaXN0ZW5lcnMsIHBvbGljeU1hcCwgZW51bU1hcCwgZW51bUl0ZW1NYXAgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZXJyb3IoICJVbmRlZmluZWQgc2VydmljZSBwb2xpY3kgZWxlbWVudCwgIiArIGVsZW1lbnROYW1lICsgIiBmb3VuZC4iICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBSZXNvbHZlIGFsbCBwb2xpY3kgc2VydmljZXMuCi0gICAgZm9yKCBTdHJpbmcgcG9saWN5SWQgOiBwb2xpY3lNYXAua2V5U2V0KCkgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lJbXBsIHBvbGljeSA9IHBvbGljeU1hcC5nZXQoIHBvbGljeUlkICk7Ci0gICAgICAKLSAgICAgIHBvbGljeS5yZXNvbHZlKCk7Ci0gICAgfQotICB9Ci0gICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWRTZXJ2aWNlUG9saWN5KCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXI+ICAgICAgICBsb2FkTGlzdGVuZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIFNlcnZpY2VQb2xpY3lJbXBsPiAgICAgICAgICAgcG9saWN5TWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPj4gZW51bU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGw+ICAgIGVudW1JdGVtTWFwICkgCi0gIHsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjaGlsZEVsZW1lbnRzID0gZWxlbWVudC5nZXRDaGlsZHJlbigpOwotICAgIAotICAgIGZvciggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNoaWxkIDogY2hpbGRFbGVtZW50cyApCi0gICAgewotICAgICAgU3RyaW5nIGNoaWxkTmFtZSA9IGNoaWxkLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgCi0gICAgICBpZiggY2hpbGROYW1lLmVxdWFscyggImxvYWRsaXN0ZW5lciIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbG9hZExvYWRMaXN0ZW5lciggY2hpbGQsIGxvYWRMaXN0ZW5lcnMgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGNoaWxkTmFtZS5lcXVhbHMoICJwb2xpY3kiICkgKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGxvYWRQb2xpY3koIGNoaWxkLCBwb2xpY3lNYXAgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGNoaWxkTmFtZS5lcXVhbHMoICJlbnVtZXJhdGlvbiIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbG9hZEVudW1lcmF0aW9uKCBjaGlsZCwgZW51bU1hcCwgZW51bUl0ZW1NYXAgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGNoaWxkTmFtZS5lcXVhbHMoIEV4cHJlc3Npb25UYWdOYW1lcy5FTkFCTEVNRU5UICkgKSAKLSAgICAgIHsKLSAgICAgICAgbG9hZEVuYWJsZW1lbnQoIGNoaWxkICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IGVsZW1lbnQsICIgKyBjaGlsZE5hbWUgKyAiIGZvdW5kLiIgKTsgICAgICAgICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBsb2FkRW5hYmxlbWVudCggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gRXhwcmVzc2lvbkNvbnZlcnRlci5nZXREZWZhdWx0KCkucGVyZm9ybSggZWxlbWVudCApOwotICAgICAgCi0gICAgICBwbGF0Zm9ybS5hZGRFbmFibGVkRXhwcmVzc2lvbiggZXhwcmVzc2lvbiApOwotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGVycm9yKCAiRXJyb3IgbG9hZGluZyBlbmFibGVtZW50IGV4cHJlc3Npb246ICIgKyBleGMuZ2V0TWVzc2FnZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBsb2FkRW51bWVyYXRpb24oIElDb25maWd1cmF0aW9uRWxlbWVudCAgICAgICAgICAgICAgICAgICAgZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+PiBlbnVtTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdGF0ZUVudW1lcmF0aW9uSXRlbUltcGw+ICAgIGVudW1JdGVtTWFwICkKLSAgewotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBlbnVtSWQgICAgICAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJpZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RW51bUlkID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJkZWZhdWx0IiApOyAvLyROT04tTkxTLTEkCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gICAgIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50LmdldENoaWxkcmVuKCk7Ci0gICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVudW1MaXN0ICAgICAgPSBuZXcgVmVjdG9yPElTdGF0ZUVudW1lcmF0aW9uSXRlbT4oKTsKLSAgICAKLSAgICBpZiggZW51bUlkID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiXCJJZFwiIGF0dHJpYnV0ZSBtaXNzaW5nIGZyb20gU2VyaXZjZSBQb2xpY3kgRW51bWVyYXRpb24gZWxlbWVudC4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgZm9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY2hpbGQgOiBjaGlsZEVsZW1lbnRzICkKLSAgICB7Ci0gICAgICBTdHJpbmcgY2hpbGROYW1lID0gY2hpbGQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAKLSAgICAgIGlmKCBjaGlsZE5hbWUuZXF1YWxzKCAiaXRlbSIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbG9hZEl0ZW0oIGNoaWxkLCBlbnVtTGlzdCwgZW51bUl0ZW1NYXAgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZXJyb3IoICJVbmRlZmluZWQgc2VydmljZSBwb2xpY3kgZW51bWVyYXRpb24gZWxlbWVudCwgIiArIGNoaWxkTmFtZSArICIgZm91bmQuIiApOyAgICAgICAgIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfSAKLSAgICB9Ci0gICAgCi0gICAgaWYoIGRlZmF1bHRFbnVtSWQgIT0gbnVsbCApCi0gICAgewotICAgICAgU3RhdGVFbnVtZXJhdGlvbkl0ZW1JbXBsIGRlZmF1bHRFbnVtID0gZW51bUl0ZW1NYXAuZ2V0KCBkZWZhdWx0RW51bUlkICk7Ci0gICAgICAKLSAgICAgIGlmKCBkZWZhdWx0RW51bSA9PSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgZXJyb3IoICJEZWZhdWx0IGVudW0gYXR0cmlidXRlIGZvciBlbnVtZXJhdGlvbiAiICsgZW51bUlkICsgIiBub3QgZm91bmQuIiApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZGVmYXVsdEVudW0uc2V0RGVmYXVsdCggdHJ1ZSApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBlbnVtTWFwLnB1dCggZW51bUlkLCBlbnVtTGlzdCApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZEl0ZW0oIElDb25maWd1cmF0aW9uRWxlbWVudCAgICAgICAgICAgICAgICAgZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gICAgICAgICAgIGVudW1MaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIFN0YXRlRW51bWVyYXRpb25JdGVtSW1wbD4gZW51bUl0ZW1NYXApCi0gIHsKLSAgICBTdHJpbmcgaXRlbUlkICAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJpZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyBzaG9ydE5hbWUgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggZWxlbWVudCwgInNob3J0bmFtZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyBsb25nTmFtZSAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggZWxlbWVudCwgImxvbmduYW1lIiApOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgaWYoIGl0ZW1JZCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggIlwiSWRcIiBhdHRyaWJ1dGUgbWlzc2luZyBmcm9tIFNlcml2Y2UgUG9saWN5IEVudW1lcmF0aW9uIGl0ZW0gZWxlbWVudC4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgaWYoIHNob3J0TmFtZSA9PSBudWxsICYmIGxvbmdOYW1lID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAic2hvcnROYW1lIG9yIGxvbmdOYW1lIGF0dHJpYnV0ZSBtaXNzaW5nIGZyb20gU2VydmljZSBQb2xpY3kgRW51bWVyYXRpb24gaXRlbSBlbGVtZW50LiIgKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlIGlmKCBzaG9ydE5hbWUgPT0gbnVsbCApCi0gICAgewotICAgICAgc2hvcnROYW1lID0gbG9uZ05hbWU7Ci0gICAgfQotICAgIGVsc2UgaWYoIGxvbmdOYW1lID09IG51bGwgKQotICAgIHsKLSAgICAgIGxvbmdOYW1lID0gc2hvcnROYW1lOwotICAgIH0KLSAgICAgIAotICAgIFN0YXRlRW51bWVyYXRpb25JdGVtSW1wbCBpdGVtID0gbmV3IFN0YXRlRW51bWVyYXRpb25JdGVtSW1wbCgpOwotICAgIAotICAgIGl0ZW0uc2V0SWQoIGl0ZW1JZCApOwotICAgIGl0ZW0uc2V0U2hvcnROYW1lKCBzaG9ydE5hbWUgKTsKLSAgICBpdGVtLnNldExvbmdOYW1lKCBsb25nTmFtZSApOwotICAgIGVudW1MaXN0LmFkZCggaXRlbSApOwotICAgIGVudW1JdGVtTWFwLnB1dCggaXRlbUlkLCBpdGVtICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBsb2FkTG9hZExpc3RlbmVyKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8SVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyPiBsb2FkTGlzdGVuZXJzICkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIE9iamVjdCBsaXN0ZW5lciA9IGVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbiggImNsYXNzIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAKLSAgICAgIGlmKCBsaXN0ZW5lciBpbnN0YW5jZW9mIElQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lciApCi0gICAgICB7Ci0gICAgICAgIGxvYWRMaXN0ZW5lcnMuYWRkKCAoSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyKWxpc3RlbmVyICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yKCAiTG9hZCBsaXN0ZW5lciwgIiArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCAiY2xhc3MiICkgKyAiIGRvZXMgbm90IGltcGxlbWVudCBJUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIiICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5sb2dFcnJvciggIkVycm9yIGxvYWRpbmcgc2VydmljZSBwb2xpY3kgbG9hZGxpc3RlbmVyLiIsIGV4YyApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZFBvbGljeSggSUNvbmZpZ3VyYXRpb25FbGVtZW50IHBvbGljeSwgTWFwPFN0cmluZywgU2VydmljZVBvbGljeUltcGw+IHBvbGljeU1hcCApCi0gIHsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSAgICAgIHBvbGljeUVsZW1lbnRzID0gcG9saWN5LmdldENoaWxkcmVuKCk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZCAgICAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3ksICJwYXJlbnRwb2xpY3lpZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgICAgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggcG9saWN5LCAiaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIGVudW1MaXN0SWQgICAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIHBvbGljeSwgImVudW1saXN0aWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRFbnVtSWQgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIHBvbGljeSwgImRlZmF1bHRlbnVtaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGVWYWx1ZSAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIHBvbGljeSwgIm11dGFibGUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBib29sZWFuICAgICAgICAgICAgICAgICAgICAgIG11dGFibGUgICAgICAgID0gbXV0YWJsZVZhbHVlICE9IG51bGwgJiYgbXV0YWJsZVZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoICJ0cnVlIiApOyAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgRGVzY3JpcHRvckltcGwgICAgICAgICAgICAgICBkZXNjcmlwdG9yICAgICA9IG51bGw7Ci0gICAgTGlzdDxVbnJlc29sdmVkUmVsYXRpb25zaGlwPiByZWxhdGlvbnNoaXBzICA9IG5ldyBWZWN0b3I8VW5yZXNvbHZlZFJlbGF0aW9uc2hpcD4oKTsKLSAgICBMaXN0PFN0cmluZ1tdPiAgICAgICAgICAgICAgIHN0YXRlS2V5VmFsdWVzID0gbmV3IFZlY3RvcjxTdHJpbmdbXT4oKTsKLSAgICAKLSAgICAvLyBJZiB0aGUgbXV0YWJsZSBhdHRyaWJ1dGUgd2FzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBlbnVtTGlzdElkIGF0dHJpYnV0ZQotICAgIC8vIGF0dHJpYnV0ZSB3YXMgc3BlY2lmaWVkIHRoZW4gdGhpcyBwb2xpY3kgc2hvdWxkIGJlIG11dGFibGUsIHNpbmNlCi0gICAgLy8gaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGFzc29jaWF0ZSBzdGF0ZSB3aXRoIGEgcG9saWN5IHRoYXQgaXMgbm90Ci0gICAgLy8gY2hhbmdlYWJsZS4KLSAgICBpZiggbXV0YWJsZVZhbHVlID09IG51bGwgJiYgZW51bUxpc3RJZCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBtdXRhYmxlID0gdHJ1ZTsgIAotICAgIH0KLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBmb3IoIElDb25maWd1cmF0aW9uRWxlbWVudCBwb2xpY3lFbGVtZW50IDogcG9saWN5RWxlbWVudHMgKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmFtZSA9IHBvbGljeUVsZW1lbnQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAKLSAgICAgICAgaWYoIG5hbWUuZXF1YWxzKCAiZGVzY3JpcHRvciIpICkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgZGVzY3JpcHRvciA9IFJlZ2lzdHJ5VXRpbHMubG9hZERlc2NyaXB0b3IoIHBvbGljeUVsZW1lbnQgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBuYW1lLmVxdWFscyggInJlbGF0aW9uc2hpcCIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIGxvYWRSZWxhdGlvbnNoaXAoIHBvbGljeUVsZW1lbnQsIHJlbGF0aW9uc2hpcHMgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBuYW1lLmVxdWFscyggInN0YXRlIiApICkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGtleSAgID0gUmVnaXN0cnlVdGlscy5nZXRBdHRyaWJ1dGUoIHBvbGljeUVsZW1lbnQsICJrZXkiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBSZWdpc3RyeVV0aWxzLmdldEF0dHJpYnV0ZSggcG9saWN5RWxlbWVudCwgInZhbHVlIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCi0gICAgICAgICAgaWYoIGtleSA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvciggIlNlcnZpY2UgcG9saWN5IHN0YXRlIG1pc3NpbmcgYXR0cmlidXRlIFwia2V5XCIuIiApOyAvLyROT04tTkxTLTEkICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIHZhbHVlID09IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgc3RhdGUgbWlzc2luZyBhdHRyaWJ1dGUgXCJ2YWx1ZVwiLiIgKTsgLy8kTk9OLU5MUy0xJCAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmKCBrZXkgIT0gbnVsbCAmJiB2YWx1ZSAhPSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZUtleVZhbHVlcy5hZGQoIG5ldyBTdHJpbmdbXXsga2V5LCB2YWx1ZSB9ICk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGVycm9yKCAiVW5kZWZpbmVkIHNlcnZpY2UgcG9saWN5IGVsZW1lbnQsICIgKyBuYW1lICsgIiBmb3VuZC4iICk7ICAgICAgICAgICAgICAgICAgIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFNlcnZpY2VQb2xpY3lJbXBsIG5ld1BvbGljeSA9IG5ldyBTZXJ2aWNlUG9saWN5SW1wbCggdHJ1ZSwgaWQsIHBsYXRmb3JtICk7Ci0gICAgICAKLSAgICAgIG5ld1BvbGljeS5zZXRVbnJlc29sdmVkUGFyZW50KCBwYXJlbnRJZCApOwotICAgICAgbmV3UG9saWN5LnNldFVucmVzb2x2ZWRSZWxhdGlvbnNoaXBzKCByZWxhdGlvbnNoaXBzICk7Ci0gICAgICBuZXdQb2xpY3kuc2V0RGVzY3JpcHRvciggZGVzY3JpcHRvciApOwotICAgICAgbmV3UG9saWN5LnNldEVudW1MaXN0SWQoIGVudW1MaXN0SWQgKTsKLSAgICAgIG5ld1BvbGljeS5zZXREZWZhdWx0RW51bUlkKCBkZWZhdWx0RW51bUlkICk7Ci0gICAgICBwb2xpY3lNYXAucHV0KCBpZCwgbmV3UG9saWN5ICk7Ci0gICAgICAKLSAgICAgIFBvbGljeVN0YXRlSW1wbCBwb2xpY3lTdGF0ZSA9IChQb2xpY3lTdGF0ZUltcGwpbmV3UG9saWN5LmdldFBvbGljeVN0YXRlKCk7Ci0gICAgICAKLSAgICAgIC8vIFRlbXBvcmFyaWx5IGFsbG93IHRoZSBzdGF0ZSB0byBiZSB1cGRhdGVkIGZvciBzdGF0aWMgc3RhdGUgcHJvdmlkZWQKLSAgICAgIC8vIGJ5IHRoZSBleHRlbmRlci4KLSAgICAgIHBvbGljeVN0YXRlLmludGVybmFsU2V0TXV0YWJsZSggdHJ1ZSApOwotICAgICAgCi0gICAgICBmb3IoIFN0cmluZ1tdIGtleVZhbHVlIDogc3RhdGVLZXlWYWx1ZXMgKQotICAgICAgewotICAgICAgICBwb2xpY3lTdGF0ZS5wdXRWYWx1ZSgga2V5VmFsdWVbMF0sIGtleVZhbHVlWzFdICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHBvbGljeVN0YXRlLmludGVybmFsU2V0TXV0YWJsZSggbXV0YWJsZSApOwotICAgIH0KLSAgICBjYXRjaCggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXJyb3IoICJBbiBlcnJvciB3YXMgZm91bmQgbG9hZGluZyBhIHNlcnZpY2UgcG9saWN5LiIgKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAgIAotICBwcml2YXRlIHZvaWQgbG9hZFJlbGF0aW9uc2hpcCggSUNvbmZpZ3VyYXRpb25FbGVtZW50IHJlbGF0aW9uc2hpcEVsZW1lbnQsIExpc3Q8VW5yZXNvbHZlZFJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwcyApCi0gIHsKLSAgICBTdHJpbmcgZW51bVZhbHVlQXR0ciA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCByZWxhdGlvbnNoaXBFbGVtZW50LCAiZW51bWxpc3QiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBpZiggZW51bVZhbHVlQXR0ciA9PSBudWxsICkKLSAgICB7Ci0gICAgICBlcnJvciggIlNlcnZpY2UgcG9saWN5IHJlbGF0aW9uc2hpcCBtaXNzaW5nIGF0dHJpYnV0ZSBcImVudW1MaXN0XCIuIiApOyAvLyROT04tTkxTLTEkCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIAotICAgIExpc3Q8U3RyaW5nPiAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRW51bUxpc3QgICAgICAgICA9IEFycmF5cy5hc0xpc3QoIGVudW1WYWx1ZUF0dHIuc3BsaXQoICIgIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSAgICAgICAgICAgIGNoaWxkcmVuICAgICAgICAgICAgICAgPSByZWxhdGlvbnNoaXBFbGVtZW50LmdldENoaWxkcmVuKCk7Ci0gICAgTGlzdDxVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwPiB0YXJnZXRSZWxhdGlvbnNoaXBMaXN0ID0gbmV3IFZlY3RvcjxVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwPigpOwotICAgIAotICAgIGZvciggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNoaWxkIDogY2hpbGRyZW4gKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lID0gY2hpbGQuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAKLSAgICAgIGlmKCBuYW1lLmVxdWFscyggInRhcmdldHBvbGljeSIgKSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbG9hZFBvbGljeVJlbGF0aW9uc2hpcCggY2hpbGQsIHRhcmdldFJlbGF0aW9uc2hpcExpc3QgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZXJyb3IoICJVbmRlZmluZWQgc2VydmljZSBwb2xpY3kgZWxlbWVudCwgIiArIG5hbWUgKyAiIGZvdW5kLiIgKTsgICAgICAgICAgICAgICAgICAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgfQotICAgIAotICAgIFVucmVzb2x2ZWRSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwID0gbmV3IFVucmVzb2x2ZWRSZWxhdGlvbnNoaXAoIHNvdXJjZUVudW1MaXN0LCB0YXJnZXRSZWxhdGlvbnNoaXBMaXN0ICk7Ci0gICAgCi0gICAgcmVsYXRpb25zaGlwcy5hZGQoIHJlbGF0aW9uc2hpcCApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbG9hZFBvbGljeVJlbGF0aW9uc2hpcCggSUNvbmZpZ3VyYXRpb25FbGVtZW50IHBvbGljeUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFVucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXA+IHBvbGljeVJlbGF0aW9uc2hpcExpc3QgKQotICB7Ci0gICAgU3RyaW5nIGl0ZW1MaXN0QXR0ciA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3lFbGVtZW50LCAiaXRlbWxpc3QiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgcG9saWN5SWQgICAgICA9IFJlZ2lzdHJ5VXRpbHMuZ2V0QXR0cmlidXRlKCBwb2xpY3lFbGVtZW50LCAiaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBpZiggaXRlbUxpc3RBdHRyID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgcmVsYXRpb25zaGlwIG1pc3NpbmcgYXR0cmlidXRlIFwiZW51bUxpc3RcIi4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIHBvbGljeUlkID09IG51bGwgKQotICAgIHsKLSAgICAgIGVycm9yKCAiU2VydmljZSBwb2xpY3kgcmVsYXRpb25zaGlwIG1pc3NpbmcgYXR0cmlidXRlIFwiaWRcIi4iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgTGlzdDxTdHJpbmc+ICAgICAgICAgICAgICAgICB0YXJnZXRFbnVtTGlzdCAgICAgPSBBcnJheXMuYXNMaXN0KCBpdGVtTGlzdEF0dHIuc3BsaXQoICIgIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICBVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwIHBvbGljeVJlbGF0aW9uc2hpcCA9IG5ldyBVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwKCBwb2xpY3lJZCwgdGFyZ2V0RW51bUxpc3QgKTsKLSAgICAKLSAgICBwb2xpY3lSZWxhdGlvbnNoaXBMaXN0LmFkZCggcG9saWN5UmVsYXRpb25zaGlwICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBlcnJvciggU3RyaW5nIG1lc3NhZ2UgKQotICB7Ci0gICAgU2VydmljZVBvbGljeUFjdGl2YXRvci5sb2dFcnJvciggbWVzc2FnZSwgbnVsbCApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1N0YXRlRW51bWVyYXRpb25JdGVtSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9TdGF0ZUVudW1lcmF0aW9uSXRlbUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlMjI5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1N0YXRlRW51bWVyYXRpb25JdGVtSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3k7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVN0YXRlRW51bWVyYXRpb25JdGVtOwotCi1wdWJsaWMgY2xhc3MgU3RhdGVFbnVtZXJhdGlvbkl0ZW1JbXBsIGltcGxlbWVudHMgSVN0YXRlRW51bWVyYXRpb25JdGVtCi17Ci0gIHByaXZhdGUgU3RyaW5nICBpZDsKLSAgcHJpdmF0ZSBTdHJpbmcgIHNob3J0TmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgIGxvbmdOYW1lOwotICBwcml2YXRlIGJvb2xlYW4gaXNEZWZhdWx0ID0gZmFsc2U7Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiBpZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkKLSAgewotICAgIHRoaXMuaWQgPSBpZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnROYW1lKCkKLSAgewotICAgIHJldHVybiBzaG9ydE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNob3J0TmFtZShTdHJpbmcgc2hvcnROYW1lKQotICB7Ci0gICAgdGhpcy5zaG9ydE5hbWUgPSBzaG9ydE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9uZ05hbWUoKQotICB7Ci0gICAgcmV0dXJuIGxvbmdOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRMb25nTmFtZShTdHJpbmcgbG9uZ05hbWUpCi0gIHsKLSAgICB0aGlzLmxvbmdOYW1lID0gbG9uZ05hbWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0RlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGlzRGVmYXVsdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmF1bHQoYm9vbGVhbiBpc0RlZmF1bHQpCi0gIHsKLSAgICB0aGlzLmlzRGVmYXVsdCA9IGlzRGVmYXVsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9VbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1VucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3ZDc0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvaW50ZXJuYWwvcG9saWN5L1VucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwCi17Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgIHBvbGljeUlkOwotICBwcml2YXRlIExpc3Q8U3RyaW5nPiBlbnVtTGlzdDsKLSAgCi0gIHB1YmxpYyBVbnJlc29sdmVkUG9saWN5UmVsYXRpb25zaGlwKCBTdHJpbmcgcG9saWN5SWQsIExpc3Q8U3RyaW5nPiBlbnVtTGlzdCApCi0gIHsKLSAgICB0aGlzLnBvbGljeUlkID0gcG9saWN5SWQ7Ci0gICAgdGhpcy5lbnVtTGlzdCA9IGVudW1MaXN0OwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFBvbGljeUlkKCkKLSAgewotICAgIHJldHVybiBwb2xpY3lJZDsKLSAgfQotICAKLSAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRFbnVtTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gZW51bUxpc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9pbnRlcm5hbC9wb2xpY3kvVW5yZXNvbHZlZFJlbGF0aW9uc2hpcC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9VbnJlc29sdmVkUmVsYXRpb25zaGlwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MTlmNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL2ludGVybmFsL3BvbGljeS9VbnJlc29sdmVkUmVsYXRpb25zaGlwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgY2xhc3MgVW5yZXNvbHZlZFJlbGF0aW9uc2hpcCAKLXsKLSAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gc291cmNlRW51bWVyYXRpb25MaXN0OwotICBwcml2YXRlIExpc3Q8VW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcD4gdGFyZ2V0RW51bWVyYXRpb25MaXN0OwotICAKLSAgcHVibGljIFVucmVzb2x2ZWRSZWxhdGlvbnNoaXAoIExpc3Q8U3RyaW5nPiBzb3VyY2VFbnVtZXJhdGlvbkxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFVucmVzb2x2ZWRQb2xpY3lSZWxhdGlvbnNoaXA+IHRhcmdldEVudW1lcmF0aW9uTGlzdCApCi0gIHsKLSAgICB0aGlzLnNvdXJjZUVudW1lcmF0aW9uTGlzdCA9IHNvdXJjZUVudW1lcmF0aW9uTGlzdDsKLSAgICB0aGlzLnRhcmdldEVudW1lcmF0aW9uTGlzdCA9IHRhcmdldEVudW1lcmF0aW9uTGlzdDsKLSAgfQotICAKLSAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRTb3VyY2VFbnVtZXJhdGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHNvdXJjZUVudW1lcmF0aW9uTGlzdDsKLSAgfQotICAKLSAgcHVibGljIExpc3Q8VW5yZXNvbHZlZFBvbGljeVJlbGF0aW9uc2hpcD4gZ2V0VGFyZ2V0RW51bWVyYXRpb25MaXN0KCkKLSAgewotICAgIHJldHVybiB0YXJnZXRFbnVtZXJhdGlvbkxpc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSURlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRmMGExZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotcHVibGljIGludGVyZmFjZSBJRGVzY3JpcHRvcgotewotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc2hvcnQgbmFtZSBmb3IgdGhlIGRlc2NyaXB0b3IKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnROYW1lKCk7Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgc2hvcnQgbmFtZSBmb3IgdGhlIGRlc2NyaXB0b3IuCi0gICAqIEBwYXJhbSBuYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG9ydE5hbWUoU3RyaW5nIG5hbWUpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGxvbmcgbmFtZSBmb3IgdGhlIGRlc2NyaXB0b3IuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvbmdOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGxvbmcgbmFtZSBmb3IgdGhlIGRlc2NyaXB0b3IuCi0gICAqIEBwYXJhbSBsb25nTmFtZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9uZ05hbWUoU3RyaW5nIGxvbmdOYW1lKTsKLQotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgZGVzY3JpcHRvci4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKTsKLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBkZXNjcmlwdG9yLgotICAgKiBAcGFyYW0gZGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbik7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgaWNvbiBwYXRoIGZvciB0aGlzIGRlc2NyaXB0b3IuICBUaGlzIHBhdGgKLSAgICogaXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBzcGVjaWZpZWQgYnkgdGhlIGljb24gYnVuZGxlIGlkLiAgVGhpcwotICAgKiBtZXRob2QgbWF5IHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoaXMgZGVzY3JpcHRvci4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWNvblBhdGgoKTsKLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBpY29uIHBhdGNoIGZvciB0aGlzIGRlc2NyaXB0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gaWNvblBhdGgKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEljb25QYXRoKFN0cmluZyBpY29uUGF0aCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgYnVuZGxlIElEIG9mIGEgcGx1Z2luIHRoYXQgY29udGFpbnMgYW4gaWNvbi4gIFRoaXMKLSAgICogbWV0aG9kIG1heSByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBpY29uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlc2NyaXB0b3IuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEljb25CdW5kbGVJZCgpOwotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGljb24gYnVuZGxlIGlkIGZvciB0aGlzIGRlc2NyaXB0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gaWNvbkJ1bmRsZUlkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJY29uQnVuZGxlSWQoU3RyaW5nIGljb25CdW5kbGVJZCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgY29udGV4dCBoZWxwIGlkIGZvciB0aGlzIGRlc2NyaXB0b3IuICBUaGlzIG1ldGhvZAotICAgKiBtYXkgcmV0dXJuIG51bGwgaWYgbm8gY29udGV4dCBoYXMgYmVlbiBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHRIZWxwSWQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgY29udGV4dCBoZWxwIGlkIGZvciB0aGlzIGRlc2NyaXB0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGV4dEhlbHBJZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dEhlbHBJZChTdHJpbmcgY29udGV4dEhlbHBJZCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDE4Yjg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSUZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGZpbHRlciBzZXJ2aWNlIHBvbGljaWVzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJRmlsdGVyCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHBvbGljeSB0aGUgc2VydmljZSBwb2xpY3kuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoaXMgcG9saWN5IGlzIGFjY2VwdGVkIGJ5IHRoZSBmaWx0ZXIuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoIElTZXJ2aWNlUG9saWN5IHBvbGljeSApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5RW51bWVyYXRpb25MaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U2ZTZjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lFbnVtZXJhdGlvbkxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgcG9saWN5IGFuZCBhIGxpc3QKLSAqIG9mIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW1zLiAgVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB3aXRoIHRoZSBJUG9saWN5UmVsYXRpb25zaGlwCi0gKiBpbnRlcmZhY2UuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBzZXJ2aWNlIHBvbGljeS4KLSAgICovCi0gIHB1YmxpYyBJU2VydmljZVBvbGljeSBnZXRQb2xpY3koKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgbGlzdCBvZiBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZ2V0RW51bWVyYXRpb25MaXN0KCk7ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVJlbGF0aW9uc2hpcC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5UmVsYXRpb25zaGlwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NTQ4NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5UmVsYXRpb25zaGlwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIGJldHdlZW4KLSAqIHNlcnZpY2UgcG9saWNpZXMuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lSZWxhdGlvbnNoaXAKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNvdXJjZSBzZXJ2aWNlIHBvbGljeSBhbG9uZyB3aXRoIGEgbGlzdAotICAgKiBvZiBwb3NzaWJsZSBzdGF0ZXMgdGhhdCB0aGlzIHNvdXJjZSBwb2xpY3kgY291bGQgYmUgaW4uCi0gICAqLwotICBwdWJsaWMgSVBvbGljeUVudW1lcmF0aW9uTGlzdCBnZXRQb2xpY3lFbnVtZXJhdGlvbkxpc3QoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIGEgbGlzdCBvZiBvdGhlciB0YXJnZXQgc2VydmljZSBwb2xpY2llcyBhbmQgdGhlIHN0YXRlcyB0aGF0Ci0gICAqIHRoZXNlIHBvbGljaWVzIG11c3QgYmUgaW4gdG8gc2F0aXNmeSB0aGUgcmVsYXRpb25zaGlwLgotICAgKi8KLSAgcHVibGljIExpc3Q8SVBvbGljeUVudW1lcmF0aW9uTGlzdD4gZ2V0UmVsYXRlZFBvbGljaWVzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg4OTI0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lQb2xpY3lTdGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyOwotCi0vKioKLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBzZXJ2aWNlIHBvbGljeSBleHRlbmRlcnMgdG8gc2F2ZSB0aGUgc3RhdGUgb2YKLSAqIHRoZXJlIHBvbGljaWVzLiAgTm90ZTogZXh0ZW5kZXJzIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IGlmIHRoZXNlIGNoYW5nZXMKLSAqIGFyZSBjb21taXR0ZWQgb3IgZGlzY2FyZGVkLiAgVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBmcmFtZXdvcmsuICBGb3IgZXhhbXBsZQotICogaWYgYW4gZXh0ZW5kZXIgbWFrZXMgYSBudW1iZXIgb2YgY2FsbHMgdG8gdGhlIHB1dFZhbHVlIG1ldGhvZCBhbmQgYXQgc29tZQotICogcG9pbnQgU2VydmljZVBvbGljeVBsYXRmb3JtLmRpc2NhcmQoKSBpcyBjYWxsZWQsIHRoZSBmcmFtZXdvcmsgd2lsbCBoYW5kbGUKLSAqIHRoZSBkaXNjYXJkaW5nIG9mIHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhlIHB1dFZhbHVlIG1ldGhvZCBjYWxscy4KLSAqIAotICogTm90ZTogdGhpcyBkYXRhIHdpbGwgZXZlbnR1YWxseSBiZSBzdG9yZWQgaW4gRWNsaXBzZSB3aXRoIHRoZSBmb2xsb3dpbmcga2V5OgotICogCi0gKiAgICAgc2VydmljZVBvbGljeUlkICsgIi4iICsga2V5Ci0gKiAgICAgCi0gKiAgICAgd2hlcmUgc2VydmljZVBvbGljeUlkIGlzIHRoZSB1bmlxdWUgaWQgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kgYW5kIHRoZSBrZXkKLSAqICAgICBpcyB0aGUga2V5IHNwZWNpZmllZCBpbiB0aGUgcHV0VmFsdWUgbWV0aG9kLgotICogCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVBvbGljeVN0YXRlCi17Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIERlZmF1bHRWYWx1ZUtleSA9ICJkZWZhdWx0LnZhbHVlLmtleSI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoaXMgcG9saWN5IGlzIG11dGFibGUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc011dGFibGUoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIG11dGFibGUgc2V0cyB3aGV0aGVyIHRoaXMgcG9saWN5IGlzIG11dGFibGUgb3Igbm90LiAgTm90ZToKLSAgICogaWYgdGhlIHNlcnZpY2UgcG9saWN5IGZvciB0aGlzIElQb2xpY3lTdGF0ZSBvYmplY3QgaXMgcHJlZGVmaW5lZCBjYWxsaW5nCi0gICAqIHRoaXMgbWV0aG9kIHdpbGwgaGF2ZSBubyBlZmZlY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNdXRhYmxlKCBib29sZWFuIG11dGFibGUgKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBzZXRzIHNvbWUgc3RhdGUgZm9yIGEgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IGEga2V5IGZvciB0aGlzIHBvbGljeSBzdGF0ZS4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgcG9saWN5IHN0YXRlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHV0VmFsdWUoIFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSApOwotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGdldHMgc29tZSBzdGF0ZSBmb3IgYSBzZXJ2aWNlIHBvbGljeS4gIElmIHRoZXJlCi0gICAqIGlzIG5vIHBlcnNpc3RlZCB2YWx1ZSBmb3IgdGhpcyBrZXkgdGhlIGRlZmF1bHQgdmFsdWUgd2lsbCBiZQotICAgKiByZXR1cm5lZC4gIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgdmFsdWUgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgotICAgKiAKLSAgICogQHBhcmFtIGtleSBhIGtleSBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICogQHJldHVybiByZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGtleSBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCBTdHJpbmcga2V5ICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgZGVmYXVsdCBmb3IgYSBwYXJ0aWN1bGFyIGtleS4gIAotICAgKiAKLSAgICogQHBhcmFtIGtleSB0aGUga2V5Ci0gICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAqIEBwYXJhbSBvdmVycmlkZUV4aXN0aW5nIGluZGljYXRlcyBpZiBhIGV4aXN0aW5nIGRlZmF1bHQgdmFsdWUgc2hvdWxkIGJlIG92ZXJyaWRkZW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBwdXREZWZhdWx0VmFsdWUoIFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0VmFsdWUsIGJvb2xlYW4gb3ZlcnJpZGVFeGlzdGluZyApOwotICAKLSAgLyoqCi0gICAqIEFkZHMgYSBwb2xpY3kgc3RhdGUgY2hhbmdlIGxpc3RlbmVyIHRvIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyCi0gICAqIEBwYXJhbSBub3RpZnlPbmx5T25Db21taXQgaW5kaWNhdGVzIGlmIHRoaXMgbGlzdGVuZXIgc2hvdWxkIGJlCi0gICAqIGNhbGxlZCBmb3IgYWxsIHN0YXRlIGNoYW5nZXMgb3Igb25seSB3aGVuIHRoZSBzdGF0ZSBkYXRhIGlzCi0gICAqIGNvbW1pdHRlZC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyKCBJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciwgYm9vbGVhbiBub3RpZnlPbmx5T25Db21taXQgKTsKLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGEgcG9saWN5IHN0YXRlIGNoYW5nZSBsaXN0ZW5lciBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIEBwYXJhbSBsaXN0ZW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lciggSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVBvbGljeVN0YXRlRW51bS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MDcxOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JUG9saWN5U3RhdGVFbnVtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAzMjUgICAyMjIwOTUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotLyoqCi0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBzdGF0ZSB3aGVuIGFuIGVudW1lcmF0aW9uIGlzIHVzZWQKLSAqIHRvIHBlcnNpc3Qgc3RhdGUuICAKLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVBvbGljeVN0YXRlRW51bQotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBUUlVFX0VOVU0gID0gIm9yZy5lY2xpcHNlLndzdC50cnVlIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRkFMU0VfRU5VTSA9ICJvcmcuZWNsaXBzZS53c3QuZmFsc2UiOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGVudW1lcmF0aW9uIGlkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZpY2UgcG9saWN5LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbnVtSWQoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IGVudW0gaXRlbSBmb3IgdGhpcyBlbnVtZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdElkKCk7Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgY3VycmVudCBlbnVtIGl0ZW0uICBUaGlzIGVudW0gaXRlbSBpZCBuZWVkcyB0byBiZSBhbmQgZW51bSBpdGVtCi0gICAqIGlkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVudW1lcmF0aW9uLgotICAgKiBAcGFyYW0gaXRlbUlkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50SXRlbSggU3RyaW5nIGl0ZW1JZCApOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGN1cnJlbnQgZW51bSBpdGVtLgotICAgKi8KLSAgcHVibGljIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBnZXRDdXJyZW50SXRlbSgpOyAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvSVNlcnZpY2VQb2xpY3kuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY2MTNkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTZXJ2aWNlUG9saWN5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVycy5JU3RhdHVzQ2hhbmdlTGlzdGVuZXI7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNlcnZpY2VQb2xpY3kKLXsgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhpcyBTZXJ2aWNlIHBvbGljeSBpcyBkZWZpbmVkIGluIHBsdWdpbi54bWwgCi0gICAqIG1ldGEgZGF0YS4gIE90aGVyd2lzZSwgZmFsc2UgaXMgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ByZWRlZmluZWQoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSB1bmlxdWUgSUQgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElkKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICovCi0gIHB1YmxpYyBJRGVzY3JpcHRvciBnZXREZXNjcmlwdG9yKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3Qgb2YgcmVsYXRpb25zaGlwcyB0byBvdGhlciBJU2VydmljZVBvbGljeSBvYmplY3RzLiAgCi0gICAqICAKLSAgICovCi0gIHB1YmxpYyBMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+IGdldFJlbGF0aW9uc2hpcHMoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgcmVsYXRpb25zaGlwcyBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICogCi0gICAqIEBwYXJhbSByZWxhdGlvbnNoaXBzCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWxhdGlvbnNoaXBzKCBMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+IHJlbGF0aW9uc2hpcHMgKTsKLSAgCi0gIC8qKgotICAgKiBSZXN0b3JlcyB0aGUgcG9saWN5IHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS4gIEFsbCBsb2NhbGx5IGFkZGVkCi0gICAqIGNoaWxkIHBvbGljaWVzIHdpbGwgYmUgcmVtb3ZlZC4gIFRoZSBzdGF0ZSBvZiBlYWNoIHBvbGljeSB3aWxsCi0gICAqIGJlIHNldCB0byBpcyBkZWZhdWx0IHZhbHVlLiAgIE5vdGU6IHRoZSBjaGFuZ2VzIG1hZGUgY2FsbGluZwotICAgKiB0aGlzIG1ldGhvZCBjYW4gYmUgdW5kb25lIGlmIHRoZSBwbGF0Zm9ybSBwZXJmb3JtcyBhIGRpc2NhcmRDaGFuZ2VzCi0gICAqIG9wZXJhdGlvbi4gIEFsdGVybmF0aXZlbHksIGlmIHRoZSBwbGFmb3JtIHBlcmZvcm1zIGEgY29tbWl0Q2hhbmdlcwotICAgKiBvcGVyYXRpb24gdGhlc2UgY2hhbmdlcyB3aWxsIGJlIHNhdmVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdG9yZURlZmF1bHRzKCk7Ci0gIAotICAvKioKLSAgICogUmVzdG9yZXMgdGhlIHBvbGljeSB0byBpdHMgb3JpZ2luYWwgc3RhdGUgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LiAgCi0gICAqIFRoZSBzdGF0ZSBvZiBlYWNoIHBvbGljeSB3aWxsIGJlIHNldCB0byBpcyBkZWZhdWx0IHZhbHVlLiAgIAotICAgKiBOb3RlOiB0aGUgY2hhbmdlcyBtYWRlIGNhbGxpbmcKLSAgICogdGhpcyBtZXRob2QgY2FuIGJlIHVuZG9uZSBpZiB0aGUgcGxhdGZvcm0gcGVyZm9ybXMgYSBkaXNjYXJkQ2hhbmdlcwotICAgKiBvcGVyYXRpb24uICBBbHRlcm5hdGl2ZWx5LCBpZiB0aGUgcGxhZm9ybSBwZXJmb3JtcyBhIGNvbW1pdENoYW5nZXMKLSAgICogb3BlcmF0aW9uIHRoZXNlIGNoYW5nZXMgd2lsbCBiZSBzYXZlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVEZWZhdWx0cyggSVByb2plY3QgcHJvamVjdCApOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHBvbGljeSBzdGF0ZSBmb3IgdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICovCi0gIHB1YmxpYyBJUG9saWN5U3RhdGUgZ2V0UG9saWN5U3RhdGUoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QgdGhlIHByb2plY3QuCi0gICAqIEByZXR1cm4gVGhlIElQb2xpY3lTdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuCi0gICAqLwotICBwdWJsaWMgSVBvbGljeVN0YXRlIGdldFBvbGljeVN0YXRlKCBJUHJvamVjdCBwcm9qZWN0ICk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc3RhdGUgZW51bWVyYXRpb24gb2JqZWN0IGZvciB0aGlzIHNlcnZpY2UKLSAgICogcG9saWN5LiAgSWYgdGhpcyBwb2xpY3kgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbiBlbnVtZXJhdGlvbgotICAgKiBudWxsIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgSVBvbGljeVN0YXRlRW51bSBnZXRQb2xpY3lTdGF0ZUVudW0oKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBzdGF0ZSBlbnVtZXJhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIHByb2plY3QuICBJZgotICAgKiBubyBzdGF0ZSBlbnVtZXJhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlcnZpY2UgcG9saWN5Ci0gICAqIG51bGwgd2lsbCBiZSByZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBJUG9saWN5U3RhdGVFbnVtIGdldFBvbGljeVN0YXRlRW51bSggSVByb2plY3QgcHJvamVjdCApOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHBhcmVudCBwb2xpY3kgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuICBJZiB0aGlzCi0gICAqIHNlcnZpY2UgcG9saWN5IGhhcyBubyBwYXJlbnQgdGhlbiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIElTZXJ2aWNlUG9saWN5IGdldFBhcmVudFBvbGljeSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGNoaWxkIHNlcnZpY2UgcG9saWNpZXMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuICBDaGFuZ2VzCi0gICAqIG1hZGUgdG8gdGhlIHJldHVybmVkIGxpc3QgZG8gbm90IGNoYW5nZSB0aGUgdW5kZXJseWluZyBudW1iZXIgb2YgY2hpbGRyZW4KLSAgICogZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgTGlzdDxJU2VydmljZVBvbGljeT4gZ2V0Q2hpbGRyZW4oKTsKLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGEgY2hpbGQgc2VydmljZSBwb2xpY3kgZnJvbSB0aGlzIHNlcnZpY2UgcG9saWN5LiAgSWYgdGhlIHBvbGljeSBzcGVjaWZpZWQKLSAgICogaXMgbnVsbCBvciBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHNlcnZpY2UgcG9saWN5IHRoaXMgbWV0aG9kIHdpbGwgaGF2ZSBubyBlZmZlY3QuCi0gICAqIEFsc28sIGlmIHRoaXMgc2VydmljZSBwb2xpY3kgaXMgcHJlZGVmaW5lZCBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgaGF2ZQotICAgKiBubyBlZmZlY3QuCi0gICAqIEBwYXJhbSBwb2xpY3kKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNoaWxkKCBJU2VydmljZVBvbGljeSBwb2xpY3kgKTsKLSAgCi0gIC8qKgotICAgKiBBZGRzIGEgY2hpbGQgbGlzdGVuZXIgdG8gdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIoIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyICk7Ci0gIAotICAvKioKLSAgICogUmVtb3ZlcyBhIGNoaWxkIGxpc3RlbmVyIGZyb20gdGhpcyBzZXJ2aWNlIHBvbGljeS4KLSAgICogQHBhcmFtIGxpc3RlbmVyCi0gICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyKCBJUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciApOwotICAKLSAgLyoqCi0gICAqIEFkZHMgYSBzdGF0dXMgY2hhbmdlIGxpc3RlbmVyIHRvIHRoaXMgc2VydmljZSBwb2xpY3kuIFdoZW4gdGhlIHN0YXR1cyBjaGFuZ2VzCi0gICAqIHRoaXMgbGlzdGVuZXIgd2lsbCBiZSBub3RpZmllZC4KLSAgICogIAotICAgKiBAcGFyYW0gbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFN0YXR1c0NoYW5nZUxpc3RlbmVyKCBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgKTsKLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGEgc3RhdHVzIGNoYW5nZSBsaXN0ZW5lciBmcm9tIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVN0YXR1c0NoYW5nZUxpc3RlbmVyKCBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBzdGF0dXMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKTsKLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBzdGF0dXMgZm9yIHRoaXMgc2VydmljZSBwb2xpY3kuCi0gICAqIAotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGF0dXMoIElTdGF0dXMgc3RhdHVzICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9JU3RhdGVFbnVtZXJhdGlvbkl0ZW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FhYzVhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L0lTdGF0ZUVudW1lcmF0aW9uSXRlbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7Ci0KLS8qKgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGRlc2NyaWJlIGEgc3RhdGUgZW51bWVyYXRpb24gaXRlbSB0aGF0IHdhcwotICogZGVmaW5lZCBieSBhbiBlbnVtZXJhdGlvbiBpbiBwbHVnaW4ueG1sIG1ldGEgZGF0YS4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVN0YXRlRW51bWVyYXRpb25JdGVtCi17ICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIElEIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKTsKLQotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc2hvcnQgbmFtZSBvZiB0aGlzIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW0uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNob3J0TmFtZSgpOwotICAgIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbG9uZyBuYW1lIG9mIHRoaXMgc3RhdGUgZW51bWVyYXRpb24gaXRlbS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9uZ05hbWUoKTsKLQotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoaXMgZW51bWVyYXRpb24gaXRlbSBpcyB0aGUgZGVmYXVsdCBmb3IgdGhpcwotICAgKiBlbnVtZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRGVmYXVsdCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE1NjZmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeUVudW1lcmF0aW9uTGlzdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJUG9saWN5RW51bWVyYXRpb25MaXN0IGludGVyZmFjZS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsIGltcGxlbWVudHMgSVBvbGljeUVudW1lcmF0aW9uTGlzdAotewotICBwcml2YXRlIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBlbnVtTGlzdDsKLSAgcHJpdmF0ZSBJU2VydmljZVBvbGljeSAgICAgICAgICAgICAgcG9saWN5OwotICAKLSAgLyoqCi0gICAqIEEgc2ltcGxlIGNvbnN0cnVjdG9yIGZvciB0aGlzIGNsYXNzLgotICAgKiAKLSAgICogQHBhcmFtIGVudW1MaXN0Ci0gICAqIEBwYXJhbSBwb2xpY3kKLSAgICovCi0gIHB1YmxpYyBQb2xpY3lFbnVtZXJhdGlvbkxpc3RJbXBsKCBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gZW51bUxpc3QsIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0gIHsKLSAgICB0aGlzLmVudW1MaXN0ID0gZW51bUxpc3Q7Ci0gICAgdGhpcy5wb2xpY3kgICA9IHBvbGljeTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBsaXN0IG9mIHN0YXRlIGVudW1lcmF0aW9uIGl0ZW1zLgotICAgKi8KLSAgcHVibGljIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBnZXRFbnVtZXJhdGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIGVudW1MaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBzZXJ2aWNlIHBvbGljeS4KLSAgICovCi0gIHB1YmxpYyBJU2VydmljZVBvbGljeSBnZXRQb2xpY3koKQotICB7Ci0gICAgcmV0dXJuIHBvbGljeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9Qb2xpY3lSZWxhdGlvbnNoaXBJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk0YWU5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1BvbGljeVJlbGF0aW9uc2hpcEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJUG9saWN5UmVsYXRpb25zaGlwCi0gKiBpbnRlcmZhY2UuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUG9saWN5UmVsYXRpb25zaGlwSW1wbCBpbXBsZW1lbnRzIElQb2xpY3lSZWxhdGlvbnNoaXAKLXsKLSAgcHJpdmF0ZSBJUG9saWN5RW51bWVyYXRpb25MaXN0ICAgICAgIHBvbGljeUVudW1lcmF0aW9uTGlzdDsKLSAgcHJpdmF0ZSBMaXN0PElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+IHJlbGF0ZWRQb2xpY2VzOwotICAKLSAgcHVibGljIFBvbGljeVJlbGF0aW9uc2hpcEltcGwoIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgICAgICAgcG9saWN5RW51bWVyYXRpb25MaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiByZWxhdGVkUG9saWNpZXMgKQotICB7Ci0gICAgdGhpcy5wb2xpY3lFbnVtZXJhdGlvbkxpc3QgPSBwb2xpY3lFbnVtZXJhdGlvbkxpc3Q7Ci0gICAgdGhpcy5yZWxhdGVkUG9saWNlcyAgICAgICAgPSByZWxhdGVkUG9saWNpZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzb3VyY2Ugc2VydmljZSBwb2xpY3kgYWxvbmcgd2l0aCBhIGxpc3QKLSAgICogb2YgcG9zc2libGUgc3RhdGVzIHRoYXQgdGhpcyBzb3VyY2UgcG9saWN5IGNvdWxkIGJlIGluLgotICAgKi8KLSAgcHVibGljIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCkKLSAgewotICAgIHJldHVybiBwb2xpY3lFbnVtZXJhdGlvbkxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGxpc3Qgb2Ygb3RoZXIgdGFyZ2V0IHNlcnZpY2UgcG9saWNpZXMgYW5kIHRoZSBzdGF0ZXMgdGhhdAotICAgKiB0aGVzZSBwb2xpY2llcyBtdXN0IGJlIGluIHRvIHNhdGlzZnkgdGhlIHJlbGF0aW9uc2hpcC4KLSAgICovCi0gIHB1YmxpYyBMaXN0PElQb2xpY3lFbnVtZXJhdGlvbkxpc3Q+IGdldFJlbGF0ZWRQb2xpY2llcygpCi0gIHsKLSAgICByZXR1cm4gcmVsYXRlZFBvbGljZXM7Ci0gIH0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L1NlcnZpY2VQb2xpY3lBY3RpdmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjFhNDM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeUFjdGl2YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSI7IC8vJE5PTi1OTFMtMSQKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgU2VydmljZVBvbGljeUFjdGl2YXRvcigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgU2VydmljZVBvbGljeUFjdGl2YXRvciBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQkKLQkvKioKLQkgKiBMb2dzIGFuIGVycm9yIHdpdGggdGhpcyBwbHVnaW4uCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiBAcGFyYW0gZXhjCi0JICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvciggU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCBQTFVHSU5fSUQsIDAsIG1lc3NhZ2UsIGV4YyApOwotICAgIAotICAgIGdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coc3RhdHVzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvU2VydmljZVBvbGljeVBsYXRmb3JtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NzYwZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9TZXJ2aWNlUG9saWN5UGxhdGZvcm0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAzMjUgICAyMjIwOTUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5pbnRlcm5hbC5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzLklQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lcjsKLQotLyoqCi0gKiAKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBhY2Nlc3MgYW5kIGFkZCBzZXJ2aWNlIHBvbGljaWVzIHRvIHRoZSBwbGF0Zm9ybS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUG9saWN5UGxhdGZvcm0KLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU2VydmljZVBvbGljeVBsYXRmb3JtIGluc3RhbmNlOwotICBwcml2YXRlIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwgcGxhdGZvcm1JbXBsOwotICAKLSAgcHJpdmF0ZSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0oKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsID0gbmV3IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybUltcGwoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2VydmljZVBvbGljeVBsYXRmb3JtIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmKCBpbnN0YW5jZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBpbnN0YW5jZSA9IG5ldyBTZXJ2aWNlUG9saWN5UGxhdGZvcm0oKTsKLSAgICAgIGluc3RhbmNlLnBsYXRmb3JtSW1wbC5sb2FkKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gb2JqZWN0Ci0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoaXMgcGxhdGZvcm0gaXMgZW5hYmxlZCBmb3Igc3BlY2lmaWVkIG9iamVjdC4gIEluIG1vc3QKLSAgICogY2FzZXMgdGhlIHNwZWNpZmllZCBvYmplY3Qgd2lsbCBiZSBhbiBJUHJvamVjdC4gIFRoaXMgbWV0aG9kIGlzIHVzdWFsbHkgY2FsbGVkCi0gICAqIHRvIGRldGVybWluZSBpZiBhIHRoZSBzZXJ2aWNlIHBvbGljeSBlbnRyeSBzaG91bGQgYXBwZWFyIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBsLmlzRW5hYmxlZCggb2JqZWN0ICk7ICAKLSAgfQotICAKLSAgLyoqCi0gICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBjb21taXQgYWxsIHRoZSBzdGF0ZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIHRvIGFsbAotICAgKiB0aGUgc2VydmljZSBwb2xpY2llcy4gIFRoZSBtZXRob2Qgb25seSBhcHBsaWVzIHRvIHN0YXRlIGNoYW5nZXMgYXQgdGhlIHdvcmtzcGFjZQotICAgKiBsZXZlbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNvbW1pdENoYW5nZXMoKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLmNvbW1pdENoYW5nZXMoIHRydWUgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBkaXNjYXJkIGFsbCB0aGUgc3RhdGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSB0byBhbGwKLSAgICogdGhlIHNlcnZpY2UgcG9saWNpZXMuICBUaGUgbWV0aG9kIG9ubHkgYXBwbGllcyB0byBzdGF0ZSBjaGFuZ2VzIGF0IHRoZSB3b3Jrc3BhY2UKLSAgICogbGV2ZWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCBkaXNjYXJkQ2hhbmdlcygpCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwuZGlzY2FyZENoYW5nZXMoKTsgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgY29tbWl0IGFsbCB0aGUgc3RhdGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSB0byBhbGwKLSAgICogdGhlIHNlcnZpY2UgcG9saWNpZXMgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LiAgVGhlIG1ldGhvZCBvbmx5IGFwcGxpZXMgdG8gCi0gICAqIHN0YXRlIGNoYW5nZXMgYXQgdGhlIHByb2plY3QgbGV2ZWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb21taXRDaGFuZ2VzKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5jb21taXRDaGFuZ2VzKCBwcm9qZWN0ICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZGlzY2FyZCBhbGwgdGhlIHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYWxsCi0gICAqIHRoZSBzZXJ2aWNlIHBvbGljaWVzIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC4gIFRoZSBtZXRob2Qgb25seSBhcHBsaWVzIHRvIAotICAgKiBzdGF0ZSBjaGFuZ2VzIGF0IHRoZSBwcm9qZWN0IGxldmVsLgotICAgKi8KLSAgcHVibGljIHZvaWQgZGlzY2FyZENoYW5nZXMoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLmRpc2NhcmRDaGFuZ2VzKCBwcm9qZWN0ICk7IAotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhbGwgc2VydmljZSBwb2xpY3kgSURzIHRoYXQgYXJlIGRlZmluZWQuCi0gICAqLwotICBwdWJsaWMgU2V0PFN0cmluZz4gZ2V0QWxsUG9saWN5SWRzKCkKLSAgewotICAgIHJldHVybiBwbGF0Zm9ybUltcGwuZ2V0QWxsUG9saWN5SWRzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGZpbHRlciBhIGZpbHRlciBhIHRoZSBzZXJ2aWNlIHBvbGljaWVzLiAgVGhpcyBtZXRob2QgbWF5IGJlIG51bGwgaWYKLSAgICogbm8gZmlsdGVyIGlzIHJlcXVpcmVkLgotICAgKiBAcmV0dXJuIHJldHVybnMgYWxsIHJvb3QgbGV2ZWwgc2VydmljZSBwb2xpY2llcy4gIElmIGEgZmlsdGVyIGlzIHNwZWNpZmllZAotICAgKiBzb21lIHNlcnZpY2UgcG9saWNpZXMgbWF5IGJlIHJlbW92ZWQgZnJvbSB0aGUgcmV0dXJuZWQgbGlzdC4gIEEgcm9vdAotICAgKiBsZXZlbCBzZXJ2aWNlIHBvbGljeSBpcyBkZWZpbmVkIHRvIGJlIGEgc2VydmljZSBwb2xpY3kgd2l0aCBubyBwYXJlbnQuCi0gICAqIAotICAgKi8KLSAgcHVibGljIExpc3Q8SVNlcnZpY2VQb2xpY3k+IGdldFJvb3RTZXJ2aWNlUG9saWNpZXMoIElGaWx0ZXIgZmlsdGVyICkKLSAgewotICAgIHJldHVybiBwbGF0Zm9ybUltcGwuZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyggZmlsdGVyICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGlkCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIHNlcnZpY2UgcG9saWN5IGdpdmVuIGl0J3MgdW5pcXVlIElELgotICAgKi8KLSAgcHVibGljIElTZXJ2aWNlUG9saWN5IGdldFNlcnZpY2VQb2xpY3koIFN0cmluZyBpZCApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBsLmdldFNlcnZpY2VQb2xpY3koIGlkICk7ICAKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdAotICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHByb2plY3QgaGFzIGJlZW4gZW5hYmxlZCBmb3IKLSAgICogcHJvamVjdCBzcGVjaWZpYyBwb2xpY3kgcHJlZmVyZW5jZXMuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1Byb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoIElQcm9qZWN0IHByb2plY3QgKQotICB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW1wbC5pc1Byb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoIHByb2plY3QgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgd2hldGhlciBwcm9qZWN0IHNwZWNpZmljIHNlcnZpY2UgcG9saWN5IHByZWZlcmVuY2VzIGlzIGVuYWJsZWQgb3Igbm90LgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHBhcmFtIHZhbHVlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBJUHJvamVjdCBwcm9qZWN0LCBib29sZWFuIHZhbHVlICkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBwcm9qZWN0LCB2YWx1ZSApOyAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlc3RvcmVzIHRoZSB3b3Jrc3BhY2UgbGV2ZWwgZGVmYXVsdHMuICBOb3RlOiB0aGUgc3RhdGUgY2hhbmdlcyBtYWRlIGJ5IAotICAgKiBjYWxsaW5nIHRoaXMgbWV0aG9kIG5lZWQgdG8gYmUgY29tbWl0dGVkIG9yIGRpc2NhcmRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN0b3JlRGVmYXVsdHMoKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLnJlc3RvcmVEZWZhdWx0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogUmVzdG9yZXMgdGhlIHByb2plY3QgbGV2ZWwgZGVmYXVsdHMuICBOb3RlOiB0aGUgc3RhdGUgY2hhbmdlcyBtYWRlIGJ5IAotICAgKiBjYWxsaW5nIHRoaXMgbWV0aG9kIG5lZWQgdG8gYmUgY29tbWl0dGVkIG9yIGRpc2NhcmRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAqCi0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdG9yZURlZmF1bHRzKCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5yZXN0b3JlRGVmYXVsdHMoIHByb2plY3QgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gSVNlcnZpY2VQb2xpY3kgb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudCB0aGUgcGFyZW50IHBvbGljeSBmb3IgdGhpcyBwb2xpY3kuICBJZiB0aGlzIHBvbGljeSBoYXMgbm8gCi0gICAqIHBhcmVudCBudWxsIG1heSBiZSBzcGVjaWZpZWQuCi0gICAqIEBwYXJhbSBpZCBUaGlzIGlzIGEgdW5pcXVlIGlkIGZvciB0aGlzIHNlcnZpY2UgcG9saWN5LiAgSWYgdGhlIGlkIHNwZWNpZmllZAotICAgKiBpcyBub3QgdW5pcXVlIHRyYWlsaW5nIG51bWVyaWNhbCBkaWdpdHMgaW4gdGhlIGlkIHdpbGwgYmUgc3RyaXBwZWQgb2ZmLiAgCi0gICAqIE51bWVyaWNhbCBkaWdpdHMgd2lsbCB0aGVuIGJlIGFkZGVkIHRvIGVuZCBvZiB0aGUgaWQgdG8gbWFrZSBpdCB1bmlxdWUuCi0gICAqIElmIHRoZSBpZCBpcyBlbXB0eSBvciBudWxsIHRoZSBmcmFtZXdvcmsgd2lsbCBhc3NpZ24gYSB1bmlxdWUgaWQuCi0gICAqIEBwYXJhbSBlbnVtTGlzdElkIElmIHRoaXMgcG9saWN5J3Mgc3RhdGUgaXMgZGVmaW5lZCBieSBhbiBlbnVtZXJhdGlvbgotICAgKiB0aGUgZW51bWVyYXRpb24gaWQgc2hvdWxkIGJlIHNwZWNpZmllZCBoZXJlLiAgT3RoZXJ3aXNlIG51bGwgc2hvdWxkIGJlCi0gICAqIHNwZWNpZmllZC4KLSAgICogQHBhcmFtIGRlZmF1bHRFbnVtSWQgSWYgdGhpcyBwb2xpY3kncyBzdGF0ZSBpcyBkZWZpbmVkIGJ5IGFuIGVudW1lcmF0aW9uCi0gICAqIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgZGVmYXVsdCB2YWx1ZS4gIFRoaXMgdmFsdWUgbWF5IGJlIG51bGwgCi0gICAqIGlmIG5vdCB1c2luZyBhbiBlbnVtZXJhdGlvbiBvciBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgZW51bWVyYXRpb24KLSAgICogc2hvdWxkIGJlIHVzZWQuCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIHNlcnZpY2UgcG9saWN5IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBJU2VydmljZVBvbGljeSBjcmVhdGVTZXJ2aWNlUG9saWN5KCBJU2VydmljZVBvbGljeSBwYXJlbnQsIFN0cmluZyBpZCwgU3RyaW5nIGVudW1MaXN0SWQsIFN0cmluZyBkZWZhdWx0RW51bUlkICkKLSAgewotICAgIHJldHVybiBwbGF0Zm9ybUltcGwuY3JlYXRlU2VydmljZVBvbGljeSggcGFyZW50LCBpZCwgZW51bUxpc3RJZCwgZGVmYXVsdEVudW1JZCApOwotICB9Ci0gIAotICAvKioKLSAgICogUmVtb3ZlcyBhIHNlcnZpY2UgcG9saWN5IGZyb20gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtLgotICAgKiAKLSAgICogQHBhcmFtIHBvbGljeSB0aGUgc2VydmljZSBwb2xpY3kKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVNlcnZpY2VQb2xpY3koIElTZXJ2aWNlUG9saWN5IHBvbGljeSApCi0gIHsKLSAgICBwbGF0Zm9ybUltcGwucmVtb3ZlUGxhdGZvcm1Qb2xpY3koIHBvbGljeSApOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgYWxsb3dzIGNhbGxzIHRvIGxpc3RlbmVyIHRvIGFueSBjaGlsZCBjaGFuZ2UgdGhhdCBpcwotICAgKiBtYWRlIGluIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybSByZWdhcmRsZXNzIG9mIHdoZXJlIGl0IGlzIAotICAgKiBsb2NhdGVkIGluIHRoZSB0cmVlIG9mIHNlcnZpY2UgcG9saWNpZXMuCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIKLSAgICogQHBhcmFtIG9uQ29tbWl0IGluZGljYXRlcyB3aGV0aGVyIHRoaXMgbGlzdGVuZXIgc2hvdWxkIGJlIGludm9rZWQgd2hlbgotICAgKiB0aGUgdGhlIHBsYXRmb3JtIGNoYW5nZXMgYXJlIGNvbW1pdHRlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENoaWxkQ2hhbmdlTGlzdGVuZXIoIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyLCBib29sZWFuIG9uQ29tbWl0ICkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5hZGRDaGlsZENoYW5nZUxpc3RlbmVyKCBsaXN0ZW5lciwgb25Db21taXQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBxdWV1ZUNoaWxkQ2hhbmdlTGlzdGVuZXJzKCBib29sZWFuIHF1ZXVlICkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5xdWV1ZUNoaWxkQ2hhbmdlTGlzdGVuZXJzKCBxdWV1ZSApOwotICB9Ci0gIAotICAvKioKLSAgICogUmVtb3ZlcyBhIGNoaWxkIGNoYW5nZSBsaXN0ZW5lciBmcm9tIHRoZSBzZXJ2aWNlIHBvbGljeSBwbGF0Zm9ybS4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lcgotICAgKiBAcGFyYW0gb25Db21taXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgbGlzdGVuZXIgc2hvdWxkIGJlIHJlbW92ZWQKLSAgICogZnJvbSB0aGUgb25Db21taXQgbGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNoaWxkQ2hhbmdlTGlzdGVuZXIoIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyIGxpc3RlbmVyLCBib29sZWFuIG9uQ29tbWl0ICkKLSAgewotICAgIHBsYXRmb3JtSW1wbC5yZW1vdmVDaGlsZENoYW5nZUxpc3RlbmVyKCBsaXN0ZW5lciwgb25Db21taXQgKTsgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIHByb2plY3QgcGxhdGZvcm0gbGlzdGVuZXIuICBXaGVuIGEgcGFydGljdWxhciBwcm9qZWN0IGlzIHJlZmVyZW5jZWQKLSAgICogYnkgaW4gdGhlIHNlcnZpY2UgcG9saWN5IHBsYXRmb3JtIHRoaXMgbGlzdGVuZXIgd2lsbCBiZSBjYWxsZWQgdGhlIGZpcnN0Ci0gICAqIHRpbWUgdGhlIHByb2plY3QgaXMgbG9hZGVkIGludG8gdGhlIHN5c3RlbS4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFByb2plY3RMb2FkTGlzdGVuZXIoIElQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLmFkZFByb2plY3RMb2FkTGlzdGVuZXIoIGxpc3RlbmVyICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGEgcHJvamVjdCBwbGF0Zm9ybSBsaXN0ZW5lci4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVByb2plY3RMb2FkTGlzdGVuZXIoIElQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgcGxhdGZvcm1JbXBsLnJlbW92ZVByb2plY3RMb2FkTGlzdGVuZXIoIGxpc3RlbmVyICk7ICAgIAotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBlbnVtSWQKLSAgICogQHJldHVybiByZXR1cm5zIGEgbGlzdCBvZiBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtcyBnaXZlbiB0aGUgdW5pcXVlCi0gICAqIGVudW1lcmF0aW9uIElEIGZvciB0aGlzIGVudW1lcmF0aW9uLgotICAgKi8KLSAgcHVibGljIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiBnZXRTdGF0ZUVudW1lcmF0aW9uKCBTdHJpbmcgZW51bUlkICkKLSAgewotICAgIHJldHVybiBwbGF0Zm9ybUltcGwuZ2V0U3RhdGVFbnVtZXJhdGlvbiggZW51bUlkICk7IAotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBzdGF0ZUl0ZW1JZAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBzdGF0ZSBlbnVtZXJhdGlvbiBpdGVtIGdpdmVuIHRoaXMgSUQgZm9yIHRoaXMgZW51bWVyYXRpb24KLSAgICogaXRlbS4KLSAgICovCi0gIHB1YmxpYyBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZ2V0U3RhdGVJdGVtRW51bWVyYXRpb24oIFN0cmluZyBzdGF0ZUl0ZW1JZCApCi0gIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbXBsLmdldFN0YXRlSXRlbUVudW1lcmF0aW9uKCBzdGF0ZUl0ZW1JZCApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUxMzYwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5Q2hpbGRDaGFuZ2VMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kubGlzdGVuZXJzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXIKLXsKLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgaXMgY2FsbGVkIHdpdGggYW4gYXJyYXkgb2YgY2hpbGQgY2hhbmdlcy4gIEVhY2ggY2hpbGQgaXRlbQotICAgKiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGFkZGVkIGl0ZW0gYXQgdGhlIHNhbWUgaW5kZXggdmFsdWUuCi0gICAqIAotICAgKiBAcGFyYW0gY2hpbGQgc2VydmljZSBwb2xpY2llcyB0aGF0IGhhdmUgY2hhbmdlZC4KLSAgICogQHBhcmFtIGFkZGVkIGluZGljYXRlcyBpZiB0aGUgYXNzb2NpYXRlIHBvbGljeSB3YXMgYWRkZWQgb3IgcmVtb3ZlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNoaWxkQ2hhbmdlKCBMaXN0PElTZXJ2aWNlUG9saWN5PiBjaGlsZCwgTGlzdDxCb29sZWFuPiBhZGRlZCApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZiMGRjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Mb2FkTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lQbGF0Zm9ybUxvYWRMaXN0ZW5lcgotewotICBwdWJsaWMgdm9pZCBsb2FkKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JUG9saWN5UGxhdGZvcm1Qcm9qZWN0TG9hZExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MzZhZmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVBsYXRmb3JtUHJvamVjdExvYWRMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMzI0ICAgMjIyMDk1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFVJIG5vdyBsaXN0ZW5zIGZvciBzdGF0ZSBjaGFuZ2VzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElQb2xpY3lQbGF0Zm9ybVByb2plY3RMb2FkTGlzdGVuZXIKLXsKLSAgcHVibGljIHZvaWQgbG9hZCggSVByb2plY3QgcHJvamVjdCApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvbGlzdGVuZXJzL0lQb2xpY3lTdGF0ZUNoYW5nZUxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhOWNiNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVBvbGljeVN0YXRlQ2hhbmdlTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLQotcHVibGljIGludGVyZmFjZSBJUG9saWN5U3RhdGVDaGFuZ2VMaXN0ZW5lcgotewotICBwdWJsaWMgdm9pZCBwb2xpY3lTdGF0ZUNoYW5nZSggSVNlcnZpY2VQb2xpY3kgcG9saWN5LCBTdHJpbmcga2V5LCBTdHJpbmcgb2xkVmFsdWUsIFN0cmluZyBuZXdWYWx1ZSApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS9saXN0ZW5lcnMvSVN0YXR1c0NoYW5nZUxpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkxM2YyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L2xpc3RlbmVycy9JU3RhdHVzQ2hhbmdlTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5Lmxpc3RlbmVyczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLQotcHVibGljIGludGVyZmFjZSBJU3RhdHVzQ2hhbmdlTGlzdGVuZXIKLXsKLSAgcHVibGljIHZvaWQgc3RhdHVzQ2hhbmdlKCBJU2VydmljZVBvbGljeSBwb2xpY3ksIElTdGF0dXMgb2xkU3RhdHVzLCBJU3RhdHVzIG5ld1N0YXR1cyApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS91dGlscy9SZWdpc3RyeVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJhZWQ1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3V0aWxzL1JlZ2lzdHJ5VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51dGlsczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UuaW50ZXJuYWwucG9saWN5LkRlc2NyaXB0b3JJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5QWN0aXZhdG9yOwotCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlVdGlscwotewotICBwdWJsaWMgc3RhdGljIERlc2NyaXB0b3JJbXBsIGxvYWREZXNjcmlwdG9yKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCApCi0gIHsKLSAgICBEZXNjcmlwdG9ySW1wbCBkZXNjcmlwdG9yID0gbmV3IERlc2NyaXB0b3JJbXBsKCk7Ci0gICAgCi0gICAgU3RyaW5nIHNob3J0TmFtZSAgID0gZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAic2hvcnRuYW1lIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nIGxvbmdOYW1lICAgID0gZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAibG9uZ25hbWUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBnZXRBdHRyaWJ1dGUoIGVsZW1lbnQsICJkZXNjcmlwdGlvbiIgKTsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyBpY29uUGF0aCAgICA9IGdldEF0dHJpYnV0ZSggZWxlbWVudCwgImljb25wYXRoIiApOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nIGNvbnRleHRIZWxwID0gZ2V0QXR0cmlidXRlKCBlbGVtZW50LCAiY29udGV4dGhlbHBpZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIGlmKCBzaG9ydE5hbWUgPT0gbnVsbCAmJiBsb25nTmFtZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLmxvZ0Vycm9yKCAiU2hvcnQgbmFtZSBvciBMb25nIG5hbWUgbWlzc2luZyBmcm9tIHNlcnZpY2UgcG9saWN5IGRlc2NyaXB0b3IuIiwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGVsc2UgaWYoIHNob3J0TmFtZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBzaG9ydE5hbWUgPSBsb25nTmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiggbG9uZ05hbWUgPT0gbnVsbCApCi0gICAgewotICAgICAgbG9uZ05hbWUgPSBzaG9ydE5hbWU7Ci0gICAgfQotICAgIAotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRpb24oIGRlc2NyaXB0aW9uICk7Ci0gICAgZGVzY3JpcHRvci5zZXRTaG9ydE5hbWUoIHNob3J0TmFtZSApOwotICAgIGRlc2NyaXB0b3Iuc2V0TG9uZ05hbWUoIGxvbmdOYW1lICk7Ci0gICAgZGVzY3JpcHRvci5zZXRDb250ZXh0SGVscElkKCBjb250ZXh0SGVscCApOwotICAgIAotICAgIGlmKCBpY29uUGF0aCAhPSBudWxsICkKLSAgICB7Ci0gICAgICBkZXNjcmlwdG9yLnNldEljb25QYXRoKCBpY29uUGF0aCApOwotICAgICAgZGVzY3JpcHRvci5zZXRJY29uQnVuZGxlSWQoIGVsZW1lbnQuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCkgKTsKLSAgICB9Ci0gICAgCi0gICAgZGVzY3JpcHRvci5yZXNldEhhc0NoYW5nZWQoKTsKLSAgICByZXR1cm4gZGVzY3JpcHRvcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIHRha2VzIGluIGEgbG93ZXIgY2FzZSBhdHRyaWJ1dGUgbmFtZS4gIEl0IHdpbGwgdGhlbiByZXR1cm4KLSAgICogdGhlIHNhbWUgYXR0cmlidXRlIG5hbWUgdGhhdCBpbmNsdWRlcyBwb3RlbnRpYWxseSB1cHBlcmNhc2UgY2hhcmFjdGVycy4KLSAgICogVGhpcyBtZXRob2QgYWxsb3dzIGNsaWVudHMgdG8gc3BlY2lmeSBhdHRyaWJ1dGUgbmFtZXMgaW4gYSBjYXNlIGluc2Vuc2l0aXZlCi0gICAqIGZhc2hpb24uCi0gICAqICAKLSAgICogQHBhcmFtIGVsZW1lbnQKLSAgICogQHBhcmFtIGF0dHJpYnV0ZQotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGVOYW1lKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZSApCi0gIHsKLSAgICBTdHJpbmdbXSBuYW1lcyAgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCk7Ci0gICAgU3RyaW5nICAgcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBmb3IoIFN0cmluZyBuYW1lIDogbmFtZXMgKQotICAgIHsKLSAgICAgIGlmKCBuYW1lLnRvTG93ZXJDYXNlKCkuZXF1YWxzKCBhdHRyaWJ1dGUgKSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG5hbWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZSApCi0gIHsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTsKLSAgICBTdHJpbmcgICB2YWx1ZSA9IG51bGw7Ci0gICAgCi0gICAgZm9yKCBTdHJpbmcgbmFtZSA6IG5hbWVzICkKLSAgICB7Ci0gICAgICBpZiggbmFtZS50b0xvd2VyQ2FzZSgpLmVxdWFscyggYXR0cmlidXRlICkgKQotICAgICAgewotICAgICAgICB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCBuYW1lICk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDg2N2JhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLXdzdWkuamFyCi1idWlsZC54bWwKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNDg3ZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3MudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjY1NGJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM4OjE1IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5NjkwYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mzk6NDYgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWMwOWMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3MudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbi5XU1VJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkuY29tbWFuZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c3J0O3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTdlY2Q1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOTIyMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA4MjAgICAxOTE1ODUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA3MTEwMiAgIDIwODQ5MSBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBVSQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfV1NJPVdpemFyZCBWYWxpZGF0aW9uCi0KLSMKLSMgUG9wdXAgYWN0aW9uIENhdGVnb3J5Ci0jCi1MQUJFTF9QT1BVUF9DQVRFR09SWV9XRUJfU0VSVklDRVM9V2ViIFNlcnZpY2VzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkxNzhkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLSAgICAJPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+Ci0KLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5XZWJTZXJ2aWNlc1ByZWZlcmVuY2VQYWdlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5uYW1lIj4KLSAgICAgIDwvcGFnZT4KLSAgICAgIAotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX1dTSSIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzLldTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzLldpemFyZFZhbGlkYXRpb24iPgotICAgICAgPC9wYWdlPgotCi0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotCi0gICAgICA8IS0tIFRoZSBpZCBmb3IgdGhpcyBjYXRlZ29yeSBzaG91bGQgYmUgY2hhbmdlZCBmcm9tIGpzdCB0byB3c3QgaW4gdmVyc2lvbiAzLjAuLS0+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIgotICAgICAgICAgICAgYWRhcHRhYmxlPSJ0cnVlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudSI+Ci0gICAgICAgICA8bWVudQotICAgICAgICAgICAgICAgbGFiZWw9IiVMQUJFTF9QT1BVUF9DQVRFR09SWV9XRUJfU0VSVklDRVMiCi0gICAgICAgICAgICAgICBwYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51Ij4KLSAgICAgICAgICAgIDxzZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgIG5hbWU9InBvcHVwQWN0aW9ucyI+Ci0gICAgICAgICAgICA8L3NlcGFyYXRvcj4KLSAgICAgICAgIDwvbWVudT4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+ICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvV3N0V1NVSVBsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NGViM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA4MTYgICAxNTE2MzIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFJlbW92ZWQgdW51c2VkIHByb3BlcnRpZXMgZm9yICJXYWl0IGZvciB3aXphcmQgV1NETCB2YWxpZGF0aW9uIgotIyAyMDA3MDQyNCAgIDE4MjM3NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDcxMTIwICAgMjA5ODU4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIEVuaGFuY2luZyBzZXJ2aWNlIHBvbGljeSBmcmFtZXdvcmsgYW5kIFVJCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBVSQotUExVR0lOX1ZFTkRPUj1FY2xpcHNlLm9yZwotUExVR0lOX0RFU0M9XAotVGhlIFdlYiBzZXJ2aWNlcyBHVUkgcGx1Z2luIGRlbGl2ZXJzIHRoZSBncmFwaGljYWwgXAotdXNlciBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlcyBmdW5jdGlvbiBpbiB0aGUgV1NUIHN1YnByb2plY3QuCi0KLVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLQotCi0jCi0jICBXUy1JIFByZWZlcmVuY2UgcGFnZXMKLSMKLSMgV1MtSSBDb21wbGlhbmNlIFBhZ2UKLSMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfV1NJPVdTLUkgQ29tcGxpYW5jZQotU1RPUF9OT05fV1NJPVJlcXVpcmUgY29tcGxpYW5jZQotV0FSTl9OT05fV1NJPVN1Z2dlc3QgY29tcGxpYW5jZQotSUdOT1JFX05PTl9XU0k9SWdub3JlIGNvbXBsaWFuY2UKLUZPTExPV19XU0lfUFJFRkVSRU5DRT1Gb2xsb3cgUHJlZmVyZW5jZQotCi1UT09MVElQX1BXU0lfUEFHRT1XZWIgU2VydmljZXMgSW50ZXJvcGVyYWJpbGl0eQotVE9PTFRJUF9QV1NJX1JBRElPX1NUT1BfTk9OX1dTST1TdG9wIGFuZCBwcm9kdWNlIGFuIGVycm9yIG1lc3NhZ2UgaWYgeW91IG1ha2UgYSBjaG9pY2UgdGhhdCBkb2VzIG5vdCBjb21wbHkgd2l0aCBXUy1JLgotVE9PTFRJUF9QV1NJX1JBRElPX1dBUk5JTkdfTk9OX1dTST1Qcm9kdWNlIGEgd2FybmluZyBtZXNzYWdlIGlmIHlvdSBtYWtlIGEgY2hvaWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggV1MtSS4KLVRPT0xUSVBfUFdTSV9SQURJT19JR05PUkVfTk9OX1dTST1TaWxlbnRseSBhbGxvdyBjaG9pY2VzIHRoYXQgZG8gbm90IGNvbXBseSB3aXRoIFdTLUkuCi1UT09MVElQX1BXU0lfUkFESU9fRk9MTE9XX1dTSV9QUkVGRVJFTkNFPVByb2plY3Qgd291bGQgdXNlIFdTLUkgY29tcGxpYW5jZSBsZXZlbCBzZXQgaW4gV29ya3NwYWNlIFByZWZlcmVuY2UuCi0KLUxBQkVMX1dTSV9TU0JQPVdTLUkgUyZTQlAgY29tcGxpYW5jZSBsZXZlbAotVE9PTFRJUF9QV1NJX1NTQlBfTEFCRUw9V1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgY29tcGxpYW5jZSBsZXZlbAotVE9PTFRJUF9QV1NJX1NTQlBfQ09NQk89Q2hvb3NlIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSBjb21wbGlhbmNlIGxldmVsCi0KLUxBQkVMX1dTSV9BUD1XUy1JIEEmUCBjb21wbGlhbmNlIGxldmVsCi1UT09MVElQX1BXU0lfQVBfTEFCRUw9V1MtSSBBdHRhY2htZW50IFByb2ZpbGUgY29tcGxpYW5jZSBsZXZlbAotVE9PTFRJUF9QV1NJX0FQX0NPTUJPPUNob29zZSB0aGUgV1MtSSBBdHRhY2htZW50IFByb2ZpbGUgY29tcGxpYW5jZSBsZXZlbAotCi0jCi0jCVdTREwgVmFsaWRhdGlvbgotIwotTEFCRUxfV1NETFZBTD1TZWxlY3Qgd2hldGhlciBXU0RMIHZhbGlkYXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiB3aXphcmRzIHRoYXQgY29uc3VtZSBXU0RMIGZpbGVzCi1MQUJFTF9XU0RMVkFMX05PTkU9Jk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24KLUxBQkVMX1dTRExWQUxfUkVNT1RFPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gZm9yICZyZW1vdGUgZmlsZXMgb25seQotTEFCRUxfV1NETFZBTF9BTEw9V2l6YXJkIFdTREwgdmFsaWRhdGlvbiBmb3IgJmFsbCBXU0RMIGZpbGVzCi1UT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9OT05FPURvIG5vdCBwZXJmb3JtIFdTREwgdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlIG9yIFVSTCBpbnB1dCB0byB0aGUgV2ViIFNlcnZpY2VzIHdpemFyZAotVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfUkVNT1RFPU9ubHkgcGVyZm9ybSBXU0RMIHZhbGlkYXRpb24gb24gcmVtb3RlIFdTREwgZmlsZSBvciBVUkwgaW5wdXQgdG8gdGhlIFdlYiBTZXJ2aWNlcyB3aXphcmQKLVRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX0FMTD1QZXJmb3JtIFdTREwgdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlIG9yIFVSTCBpbnB1dCB0byB0aGUgV2ViIFNlcnZpY2VzIHdpemFyZAotVE9PTFRJUF9QV1NJX1dTRExWQUxfTEFCRUw9U2VsZWN0IHdoZXRoZXIgV1NETCB2YWxpZGF0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWQgb24gd2l6YXJkcyB0aGF0IGNvbnN1bWUgV1NETCBmaWxlcywgXG5mb3IgZXhhbXBsZSwgV2ViIFNlcnZpY2Ugd2l6YXJkIGluIHNrZWxldG9uIHNjZW5hcmlvIGFuZCBXZWIgU2VydmljZSBDbGllbnQgd2l6YXJkLgotCi0KLVdFQlNFUlZJQ0VfQ0FURUdPUllfUFJFRj1FeHBhbmQgdGhpcyBwcmVmZXJlbmNlcyBjYXRlZ29yeSB0byBzZXQgc3BlY2lmaWMgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzLgotV0VCU0VSVklDRV9DQVRFR09SWV9QUkVGX0xJTks9U2VlIDxhIGhyZWY9XCJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzLldTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZVwiPidTZXJ2aWNlIFBvbGljaWVzJzwvYT4gZm9yIFdTLUkgY29tcGxpYW5jZSBwcmVmZXJlbmNlcy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL1dzdFdTVUlQbHVnaW5NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzZWM4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL1dzdFdTVUlQbHVnaW5NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI4ICAgMTUxNjMyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDQyNCAgIDE4MjM3NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIFdzdFdTVUlQbHVnaW5NZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLldzdFdTVUlQbHVnaW4iOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgV3N0V1NVSVBsdWdpbk1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fVkVORE9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBMVUdJTl9ERVNDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXRUJTRVJWSUNFX0NBVEVHT1JZX1BSRUZfTElOSzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUkVGRVJFTkNFX0NBVEVHT1JZX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTVE9QX05PTl9XU0k7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0FSTl9OT05fV1NJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElHTk9SRV9OT05fV1NJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTExPV19XU0lfUFJFRkVSRU5DRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfUkFESU9fU1RPUF9OT05fV1NJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19XQVJOSU5HX05PTl9XU0k7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1JBRElPX0lHTk9SRV9OT05fV1NJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19GT0xMT1dfV1NJX1BSRUZFUkVOQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV1NJX1NTQlA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1NTQlBfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1NTQlBfQ09NQk87Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV1NJX0FQOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9BUF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfQVBfQ09NQk87Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV1NETFZBTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XU0RMVkFMX05PTkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV1NETFZBTF9SRU1PVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV1NETFZBTF9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfTk9ORTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9SRU1PVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9XU0RMVkFMX0xBQkVMOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBXRUJTRVJWSUNFX0NBVEVHT1JZX1BSRUY7Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXc3RXU1VJUGx1Z2luTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvY29tbWFuZC9PcGVuRWRpdG9yQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9jb21tYW5kL09wZW5FZGl0b3JDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZTZhMDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9jb21tYW5kL09wZW5FZGl0b3JDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODEwICAgMTM1Mzk1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBFbmFibGUgV1RQIFdlYiBzZXJ2aWNlIGZyYW1ld29yayBvcGVuaW5nIEphdmEgZWRpdG9yCi0gKiAyMDA2MTAyNSAgIDE2MjI4OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd29ya3NwYWNlIHBhdGhzIHdpdGggc3BhY2VzIGJyZWFrIEphdmEgRWRpdG9yIExhdW5jaAotICogMjAwODA0MTEgICAyMjY3NjcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lciBkb2VzIG5vdCBoYW5kbGUgcGF0aHMgdy8gc3BhY2VzIHRoYXQgYXJlIGVuY29kZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbi5XU1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsLlVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLS8qKgotICogQSBjb21tYW5kIHdoaWNoLCB3aGVuIGdpdmVuIGFuIGFycmF5IG9mIGltcGxlbWVudGF0aW9uIFVSTHMsIHdpbGwKLSAqIG9wZW4gdGhlbSB3aXRoaW4gRWNsaXBzZSB1c2luZyB0aGUgZWRpdG9yIHJlZ2lzdGVyZWQgd2l0aCB0aGUKLSAqIGZpbGUgZXh0ZW5zaW9ucy4KLSAqLwotcHVibGljIGNsYXNzIE9wZW5FZGl0b3JDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBJV2ViU2VydmljZSB3ZWJTZXJ2aWNlOwotCXByaXZhdGUgSUNvbnRleHQJY29udGV4dDsKLSAKLQkvKioKLQkgKiBTZXR0ZXIgZm9yIHRoZSBJV2ViU2VydmljZQotCSAqIAotCSAqIEBwYXJhbSB3ZWJTZXJ2aWNlIFRoZSBJV2ViU2VydmljZQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoSVdlYlNlcnZpY2Ugd2ViU2VydmljZSkgewotCQl0aGlzLndlYlNlcnZpY2UgPSB3ZWJTZXJ2aWNlOyAgCi0JfQotCSAgCi0JLyoqCi0JICogU2V0dGVyIGZvciB0aGUgSUNvbnRleHQKLQkgKiAKLQkgKiBAcGFyYW0gY29udGV4dCBUaGUgSUNvbnRleHQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDb250ZXh0IChJQ29udGV4dCBjb250ZXh0KSB7Ci0JCXRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMub3BlcmF0aW9ucy5BYnN0cmFjdE9wZXJhdGlvbiNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yLCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZSkKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKQotCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCi0JCWlmIChjb250ZXh0LmdldFNjZW5hcmlvKCkuZ2V0VmFsdWUoKSAhPSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikKLQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkKLQkJU3RyaW5nW10gaW1wbFVSTHMgPSB3ZWJTZXJ2aWNlLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0SW1wbFVSTHMoKTsKLQkJCQotCQkvLyBub3RoaW5nIHRvIG9wZW4KLQkJaWYgKGltcGxVUkxzID09IG51bGwpCi0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCi0JCUlGaWxlIGZpbGU7Ci0JCQotCQlmb3IgKGludCBpID0gMDsgaSA8IGltcGxVUkxzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgeyAgICAJCQkJCQkKLQkJCQlTdHJpbmcgaW1wbFVSTCA9IGltcGxVUkxzW2ldOwotCQkJCWZpbGUgPSBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudG9GaWxlKGltcGxVUkwpOwotCQkJCQkJCi0JCQkJaWYgKGZpbGUgPT0gbnVsbCB8fCAhZmlsZS5leGlzdHMoKSkKLQkJCQkJY29udGludWU7Ci0JCQkJCi0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotCQkJCQotCQkJCWlmIChwYWdlID09IG51bGwpCi0JCQkJCWNvbnRpbnVlOwotCQkJCQkJCQkKLQkJCQlJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCB0cnVlKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCS8vVE9ETzogZm9yIFdUUCAyLjAsIHJldHVybiBwcm9wZXIgc3RhdHVzICh3aXRoIE5MUykKLQkJCQlXU1VJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TG9nKCkubG9nKAotCQkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBXU1VJUGx1Z2luLklELCAwLCBlLmdldE1lc3NhZ2UoKSwgZSkpOwotCQkJfQkJCQotCQl9Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9wbHVnaW4vV1NVSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9wbHVnaW4vV1NVSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTA5OTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvcGx1Z2luL1dTVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbjsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKiAKLSogQ29udHJpYnV0b3JzOgotKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdTVUlQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luCi17Ci0KLSAvKioKLSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3Qud3MudWkiOwotCi0gLyoqCi0gKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gKi8KLSBwcml2YXRlIHN0YXRpYyBXU1VJUGx1Z2luIGluc3RhbmNlXzsKLSAKLSAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLSAgKi8KLSBwdWJsaWMgV1NVSVBsdWdpbigpIHsKLQlzdXBlcigpOwotCWluc3RhbmNlXyA9IHRoaXM7Ci0gfQotCi0gLyoqCi0gKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICogKFdTVUlQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3Qud3MudWkiKTsKLSAqIEByZXR1cm4gVGhlIFdTVUlQbHVnaW4gc2luZ2xldG9uLgotICovCi0gc3RhdGljIHB1YmxpYyBXU1VJUGx1Z2luIGdldEluc3RhbmNlKCkgewotICAgcmV0dXJuIGluc3RhbmNlXzsKLSB9Ci0KLSAvKioKLSAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlCi0gKiBhcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uCi0gKiBAcmV0dXJuIEFuIGltYWdlIGRlc2NyaXB0b3IsIHBvc3NpYmx5IG51bGwuCi0gKi8KLQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIG5hbWUpIHsKLQkJdHJ5IHsKLQkJCVVSTCBpbnN0YWxsVVJMID0gaW5zdGFuY2VfLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIik7Ci0JCQlVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsIG5hbWUpOwotCQkJcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLSAgICAgcmV0dXJuIG51bGw7Ci0gICB9Ci0gfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1dlYlNlcnZpY2VzUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvcHJlZmVyZW5jZXMvV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTc5NDdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvcHJlZmVyZW5jZXMvV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDI0IDE4MjM3NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTEyMCAgIDIwOTg1OCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgUGV0ZXJzLCBFbmhhbmNpbmcgc2VydmljZSBwb2xpY3kgZnJhbWV3b3JrIGFuZCBVSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlByZWZlcmVuY2VzVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkuV3N0V1NVSVBsdWdpbk1lc3NhZ2VzOwotCi0vKioKLSAqIFRoZSBXZWJTZXJ2aWNlc1ByZWZlcmVuY2VQYWdlCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlc1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cyBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UgewotCXByaXZhdGUgQ29tcG9zaXRlIHBhcmVudENvbXBvc2l0ZSA9IG51bGw7Ci0vKioKLSAqIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIFNXVCBjb250cm9sIGZvciB0aGUgY3VzdG9taXplZCBib2R5IAotICogb2YgdGhpcyBwcmVmZXJlbmNlIHBhZ2UgdW5kZXIgdGhlIGdpdmVuIHBhcmVudCBjb21wb3NpdGUuCi0gKiA8cD4KLSAqIFRoaXMgZnJhbWV3b3JrIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGNvbmNyZXRlCi0gKiBzdWJjbGFzc2VzLgotICogPC9wPgotICoKLSAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBjb21wb3NpdGUKLSAqIEByZXR1cm4gdGhlIG5ldyBjb250cm9sCi0gKi8KLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUgcGFyZW50KSB7Ci0JCXBhcmVudENvbXBvc2l0ZSA9IHBhcmVudDsKLQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCWNvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCUxhYmVsIG1lc3NhZ2UgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0JCW1lc3NhZ2Uuc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuV0VCU0VSVklDRV9DQVRFR09SWV9QUkVGKTsKLQkJTGluayBsaW5rID0gbmV3IExpbmsoY29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0JCWxpbmsuc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuV0VCU0VSVklDRV9DQVRFR09SWV9QUkVGX0xJTkspOwotCQlsaW5rLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCVByZWZlcmVuY2VzVXRpbC5jcmVhdGVQcmVmZXJlbmNlRGlhbG9nT24ocGFyZW50Q29tcG9zaXRlCi0JCQkJCQkuZ2V0U2hlbGwoKSwgZS50ZXh0LCBudWxsLCBudWxsKTsKLQkJCQlwYXJlbnRDb21wb3NpdGUubGF5b3V0KCk7Ci0JCQl9Ci0JCX0pOwotCi0JCW5vRGVmYXVsdEFuZEFwcGx5QnV0dG9uKCk7Ci0JCURpYWxvZy5hcHBseURpYWxvZ0ZvbnQoY29tcG9zaXRlKTsKLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0KLQkvKioKLQkgKiBEbyBhbnkgaW5pdGlhbGl6YXRpb24gcmVxdWlyZWQgYnkgdGhlIGRlc2t0b3AuIEJ5IGRlZmF1bHQgZG8gbm90aGluZy4KLQkgKi8KLXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCBkZXNrdG9wKSB7fQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3V0aWxzL0FkYXB0ZXJVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS91dGlscy9BZGFwdGVyVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1ZTUyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3V0aWxzL0FkYXB0ZXJVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDcxNiAgIDE5MTM1NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwODAyMjAgICAyMTk1MzcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHM7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci0KLS8qKgotICogVGhlIEFkYXB0ZXJVdGlscyBjbGFzcyBwcm92aWRlcyB1dGlsaXR5IG1ldGhvZHMgdG8gZ2V0IG9iamVjdHMgZnJvbSB0aGUgUGxhdGZvcm0ncyBhZGFwdGVyIGV4dGVuc2lvbi4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyVXRpbHMgewkKLQkKLQkvKioKLQkgKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgYW4gSUZpbGUgb3IgU3RyaW5nIGFkYXB0ZXIuCi0JICogCi0JICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0LgotCSAqIEByZXR1cm4gVHJ1ZSB0aGUgb2JqZWN0IGlzIGFkYXB0YWJsZSB0byBJRmlsZSBvciBTdHJpbmcsIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzQWRhcHRlcihPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJYm9vbGVhbiBoYXNBZGFwdGVyID0gUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5oYXNBZGFwdGVyKG9iamVjdCwgIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2UuSUZpbGUiKTsKLQkJaWYgKCFoYXNBZGFwdGVyKQotCQkJaGFzQWRhcHRlciA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkuaGFzQWRhcHRlcihvYmplY3QsICJqYXZhLmxhbmcuU3RyaW5nIik7Ci0JCXJldHVybiBoYXNBZGFwdGVyOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gb2JqZWN0IE9iamVjdCB0byBhZGFwdAotCSAqIEByZXR1cm4gVGhlIGFkYXB0ZWQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZmlsZSBvciBTdHJpbmcgaWYgYW4gYWRhcHRlciBpcyBmb3VuZC4gCi0JICogICAgICAgICBSZXR1cm5zIG51bGwgaWYgYW4gYWRhcHRlciBpcyBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBPYmplY3QgZ2V0QWRhcHRlZE9iamVjdCAoT2JqZWN0IG9iamVjdCkgeyAKLQkJaWYgKG9iamVjdCA9PSBudWxsKSAKLQkJCXJldHVybiBudWxsOwotCQlPYmplY3QgYWRhcHRlZE9iamVjdCA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkubG9hZEFkYXB0ZXIob2JqZWN0LCAib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiKTsKLQkJaWYgKGFkYXB0ZWRPYmplY3QgPT0gbnVsbCkgewotCQkJYWRhcHRlZE9iamVjdCA9IFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkubG9hZEFkYXB0ZXIob2JqZWN0LCAiamF2YS5sYW5nLlN0cmluZyIpOwotCQl9Ci0JCXJldHVybiBhZGFwdGVkT2JqZWN0OwotCX0KLQkKLQkvKioKLQkgICAqIEBwYXJhbSBvYmplY3QgTG9vayB1cCBhbiBhZGFwdGVyIG1hcHBpbmcgdGhlIG9iamVjdCB0byBJRmlsZSBvciBTdHJpbmcuCi0JICAgKiBAcmV0dXJuIFRoZSBXU0RMIHVyaSByZXR1cm5lZCBieSB0aGUgYWRhcHRlciBvciBudWxsIGlmIG5vIGFkYXB0ZXIgaXMgZm91bmQuCi0JICAgKi8KLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFkYXB0ZWRXU0RMIChPYmplY3Qgb2JqZWN0KSB7Ci0JCSAgU3RyaW5nIHdzZGxVUkkgPSBudWxsOwotCQkgIE9iamVjdCBhZGFwdGVkT2JqZWN0ID0gQWRhcHRlclV0aWxzLmdldEFkYXB0ZWRPYmplY3Qob2JqZWN0KTsKLQkJICBpZiAoIGFkYXB0ZWRPYmplY3QgIT0gbnVsbCkgewotCQkJICBpZiAoYWRhcHRlZE9iamVjdCBpbnN0YW5jZW9mIElGaWxlKQotCQkJICB7Ci0JCQkJICBVUkkgdXJpID0gKChJRmlsZSlhZGFwdGVkT2JqZWN0KS5nZXRMb2NhdGlvblVSSSgpOwotCQkJCSAgaWYgKHVyaSAhPSBudWxsKSB7Ci0JCQkJCSAgd3NkbFVSSSA9IHVyaS50b1N0cmluZygpOwotCQkJCSAgfQotCQkJCSAgCi0JCQkgIH0gZWxzZSBpZiAoYWRhcHRlZE9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJCSAgd3NkbFVSSSA9IChTdHJpbmcpIGFkYXB0ZWRPYmplY3Q7Ci0JCQkgIH0KLQkJICB9Ci0JCSAgcmV0dXJuIHdzZGxVUkk7Ci0JICB9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzaS9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvd3NpL3ByZWZlcmVuY2VzL1dTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWY3MWQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvd3NpL3ByZWZlcmVuY2VzL1dTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxMCAgIDEzMTM1MiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDcyOCAgIDE1MTYzMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzEwMjUgICAgICAgICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5JV29ya2JlbmNoSGVscFN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5Xc3RXU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbi5XU1VJUGx1Z2luOwotCi0KLQotcHVibGljIGNsYXNzIFdTSUNvbXBsaWFuY2VQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lciwgTGlzdGVuZXIKLQotewotCSAgCi0gIC8qQ09OVEVYVF9JRCBQV1NJMDAwMSBmb3IgdGhlIFdTLUkgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1BBR0UgPSBXU1VJUGx1Z2luLklEICsgIi5QV1NJMDAwMCI7Ci0gIAotICBwcml2YXRlIFRleHQgd3NkbFZhbGlkYXRpb25MYWJlbF87Ci0gIC8qQ09OVEVYVF9JRCBQV1NJMDAwOSBmb3IgdGhlIE5vIFdpemFyZCBXU0RMIHZhbGlkYXRpb24gYnV0dG9uIG9uIHRoZSBQcm9maWxlIENvbXBsaWFuY2UgYW5kIFZhbGlkYXRpb24gcGFnZSovCi0gIHByaXZhdGUgQnV0dG9uIHZhbGlkYXRlTm9Xc2RsQnV0dG9uXzsKLSAgLypDT05URVhUX0lEIFBXU0kwMDAxMCBmb3IgdGhlIFdpemFyZCBXU0RMIHZhbGlkYXRpb24gZm9yIHJlbW90ZSBmaWxlcyBvbmx5IGJ1dHRvbiBvbiB0aGUgUHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uIHBhZ2UqLwotICBwcml2YXRlIEJ1dHRvbiB2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fOwotICAvKkNPTlRFWFRfSUQgUFdTSTAwMDExIGZvciB0aGUgV2l6YXJkIFdTREwgdmFsaWRhdGlvbiBmb3IgYWxsIGZpbGVzIGJ1dHRvbiBvbiB0aGUgUHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uIHBhZ2UqLwotICBwcml2YXRlIEJ1dHRvbiB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fOwotICAKLQotICAvKgotICAgKiBDT05URVhUX0lEIFBXUlMwMDA5IGZvciB0aGUgbm8gd3NkbCB2YWxpZGF0aW9uIHJhZGlvIGJ1dHRvbiBvZiB0aGUgcHJvZmlsZSB2YWxpZGF0aW9uIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1JBRElPX1dTRExWQUxfTk9ORSA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDA5IjsKLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAxMCBmb3IgdGhlIHdzZGwgdmFsaWRhdGlvbiBvbiByZW1vdGUgZG9jdW1lbnQgcmFkaW8gYnV0dG9uIG9mIHRoZSBwcm9maWxlIHZhbGlkYXRpb24gcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU0lfUkFESU9fV1NETFZBTF9SRU1PVEUgPSBXU1VJUGx1Z2luLklEICsgIi5QV1NJMDAwMTAiOwotICAvKgotICAgKiBDT05URVhUX0lEIFBXUlMwMDExIGZvciB0aGUgd3NkbCB2YWxpZGF0aW9uIG9uIGFsbCBkb2N1bWVudCByYWRpbyBidXR0b24gb2YgdGhlIHByb2ZpbGUgdmFsaWRhdGlvbiBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTSV9SQURJT19XU0RMVkFMX0FMTCA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDExIjsKLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAxMiBmb3IgdGhlIHdzZGwgdmFsaWRhdGlvbiBsYWJlbCBvZiB0aGUgcHJvZmlsZSB2YWxpZGF0aW9uIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1dTRExWQUxfTEFCRUwgPSBXU1VJUGx1Z2luLklEICsgIi5QV1NJMDAxMiI7Ci0KLSAvKioKLSAgICogQ3JlYXRlcyBwcmVmZXJlbmNlIHBhZ2UgY29udHJvbHMgb24gZGVtYW5kLgotICAgKiAgIEBwYXJhbSBwYXJlbnRDb21wb3NpdGUgIHRoZSBwYXJlbnQgZm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBzdXBlcnBhcmVudCkKLSAgewotICAgCi0gICAgSVdvcmtiZW5jaEhlbHBTeXN0ZW0gaGVscFN5c3RlbSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpOwotCQotICAgIENvbXBvc2l0ZSAgIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoIHN1cGVycGFyZW50LCBTV1QuTk9ORSApOwkKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHBhcmVudC5zZXRMYXlvdXQoIGxheW91dCApOwotICAgIHBhcmVudC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfVkVSVElDQUwgKSApOwotICAgIHBhcmVudC5zZXRUb29sVGlwVGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QV1NJX1BBR0UpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChwYXJlbnQsSU5GT1BPUF9QV1NJX1BBR0UpOwotCi0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDE7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0KLSAgICAKLSAgICB3c2RsVmFsaWRhdGlvbkxhYmVsXyA9IG5ldyBUZXh0KHBhcmVudCwgU1dULlJFQURfT05MWSk7Ci0gICAgd3NkbFZhbGlkYXRpb25MYWJlbF8uc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfV1NETFZBTCk7Ci0gICAgd3NkbFZhbGlkYXRpb25MYWJlbF8uc2V0VG9vbFRpcFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFdTSV9XU0RMVkFMX0xBQkVMKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAod3NkbFZhbGlkYXRpb25MYWJlbF8sIElORk9QT1BfUFdTSV9XU0RMVkFMX0xBQkVMKTsKLSAgICAKLSAgICB2YWxpZGF0ZU5vV3NkbEJ1dHRvbl8gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULlJBRElPKTsKLSAgICB2YWxpZGF0ZU5vV3NkbEJ1dHRvbl8uc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfV1NETFZBTF9OT05FKTsKLSAgICB2YWxpZGF0ZU5vV3NkbEJ1dHRvbl8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgdGhpcyk7Ci0gICAgdmFsaWRhdGVOb1dzZGxCdXR0b25fLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9OT05FKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodmFsaWRhdGVOb1dzZGxCdXR0b25fLCBJTkZPUE9QX1BXU0lfUkFESU9fV1NETFZBTF9OT05FKTsKLSAgICAKLSAgICB2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5SQURJTyk7Ci0gICAgdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXy5zZXRUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9XU0RMVkFMX1JFTU9URSk7Ci0gICAgdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLSAgICB2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9SRU1PVEUpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fLCBJTkZPUE9QX1BXU0lfUkFESU9fV1NETFZBTF9SRU1PVEUpOwotICAgIAotICAgIHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULlJBRElPKTsKLSAgICB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fLnNldFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1dTRExWQUxfQUxMKTsKLSAgICB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHRoaXMpOwotICAgIHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8uc2V0VG9vbFRpcFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX0FMTCk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8sIElORk9QT1BfUFdTSV9SQURJT19XU0RMVkFMX0FMTCk7Ci0gICAgCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7ICAgIAotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotICB7Ci0gICAgcGVyZm9ybU9rKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICAgeyB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgdXNpbmcgZGVmYXVsdCB2YWx1ZXMKLSAgICogaW4gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzKCkKLSAgewotCi0gICAgUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dCB3c2RsVmFsaWRhdGlvbkNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpOwotICAgIFN0cmluZyB2YWxpZGF0aW9uU2VsZWN0aW9uID0gd3NkbFZhbGlkYXRpb25Db250ZXh0LmdldERlZmF1bHQoKTsKLSAgICB3c2RsVmFsaWRhdGlvbkNvbnRleHQudXBkYXRlV1NETFZhbGlkYXRpb24odmFsaWRhdGlvblNlbGVjdGlvbik7Ci0gICAgdmFsaWRhdGVOb1dzZGxCdXR0b25fLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICBwcm9jZXNzV1NETFZhbGlkYXRpb25TZWxlY3Rpb24odmFsaWRhdGlvblNlbGVjdGlvbik7Ci0gICAgCi0gICAgV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0KCkuc2V0V2FpdEZvcldTRExWYWxpZGF0aW9uKFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCgpLmdldERlZmF1bHQoKSk7Ci0gICAgCi0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotICB7Ci0gICAgU3RyaW5nIHZhbGlkYXRpb25TZWxlY3Rpb24gPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpLmdldFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbigpOwotICAgIHByb2Nlc3NXU0RMVmFsaWRhdGlvblNlbGVjdGlvbih2YWxpZGF0aW9uU2VsZWN0aW9uKTsKLSAgICAKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzV1NETFZhbGlkYXRpb25TZWxlY3Rpb24oU3RyaW5nIHZhbGlkYXRpb25TZWxlY3Rpb24pIHsKLQotCQlpZiAoUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9OT19XU0RMLmVxdWFscyh2YWxpZGF0aW9uU2VsZWN0aW9uKSkgewotCQkJdmFsaWRhdGVOb1dzZGxCdXR0b25fLnNldFNlbGVjdGlvbih0cnVlKTsKLQkJfSBlbHNlIGlmIChQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX1JFTU9URV9XU0RMLmVxdWFscyh2YWxpZGF0aW9uU2VsZWN0aW9uKSkgewotCQkJdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JCX0gZWxzZSBpZiAoUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9BTExfV1NETC5lcXVhbHModmFsaWRhdGlvblNlbGVjdGlvbikpIHsKLQkJCXZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOwotCQl9Ci0KLQl9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkKLSAgfQotICAKLSAgLyoqCi0gICAqIENhbGxlZCB3aGVuIGFuIGV2ZW50IG9jY3VycyBvbiB0aGUgcGFnZS4gSGFuZGxlcyB0aGUgZXZlbnQgYW5kIHJldmFsaWRhdGVzIHRoZSBwYWdlLgotICAgKiAKLSAgICogQHBhcmFtIGV2ZW50Ci0gICAqICAgICAgICAgIFRoZSBldmVudCB0aGF0IG9jY3VyZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgewotCSAgCi0JICBTdHJpbmcgd3NkbFZhbGRhdGlvblNlbGVjdGlvbiA9IG51bGw7Ci0JICBpZiAodmFsaWRhdGVOb1dzZGxCdXR0b25fID09IGV2ZW50LndpZGdldCkgewotCQkgIHdzZGxWYWxkYXRpb25TZWxlY3Rpb24gPSBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX05PX1dTREw7Ci0JICB9Ci0JICBlbHNlIGlmICh2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fID09IGV2ZW50LndpZGdldCkgewotCQkgIHdzZGxWYWxkYXRpb25TZWxlY3Rpb24gPSBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX1JFTU9URV9XU0RMOwotCSAgfQotCSAgZWxzZSBpZiAodmFsaWRhdGVBbGxXc2RsQnV0dG9uXyA9PSBldmVudC53aWRnZXQpIHsKLQkJICB3c2RsVmFsZGF0aW9uU2VsZWN0aW9uID0gUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9BTExfV1NETDsKLQkgIH0KLQkgIFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NETFZhbGlkYXRpb25Db250ZXh0KCkudXBkYXRlV1NETFZhbGlkYXRpb24od3NkbFZhbGRhdGlvblNlbGVjdGlvbik7Ci0JICAKLSAgfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvd3NydC9JT2JqZWN0U2VsZWN0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvd3NydC9JT2JqZWN0U2VsZWN0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU5ZTY4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzcnQvSU9iamVjdFNlbGVjdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotCi1wdWJsaWMgaW50ZXJmYWNlIElPYmplY3RTZWxlY3RvciB7Ci0JCi0JcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbCk7Ci0JcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCk7Ci0JcHVibGljIFN0cmluZyBnZXRQcm9qZWN0KCk7Ci0JcHVibGljIElTdGF0dXMgdmFsaWRhdGVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWwpOwotCXB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGU4NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWExODhkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLXRlbXAuZm9sZGVyCi1idWlsZC54bWwKLXdzLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5NGUyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMTI1MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI1RodSBNYXkgMzEgMTM6MTI6NTMgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZTU2ZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjEyIEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk2YTA3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vbml0b3I7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0O3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmFwYWNoZS53c2lsNGo7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi4zLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjMwMSwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnM7YnVuZGxlLXZlcnNpb249IlszLjMuMCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9SVC5nZW5tb2RlbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL1JULmdlbm1vZGVsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWFhNGYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL1JULmdlbm1vZGVsCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgotICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL1JlZ2lzdHJ5TW9kZWwyL3NyYyIKLSAgICBlZGl0RGlyZWN0b3J5PSIvUmVnaXN0cnlNb2RlbDIuZWRpdC9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL1JlZ2lzdHJ5TW9kZWwyLmVkaXRvci9zcmMiCi0gICAgbW9kZWxQbHVnaW5JRD0iUmVnaXN0cnlNb2RlbDIiIHJ1bnRpbWVKYXI9InRydWUiIG1vZGVsTmFtZT0iUlQiIGVkaXRQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnByb3ZpZGVyLlJURWRpdFBsdWdpbiIKLSAgICBlZGl0b3JQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnByZXNlbnRhdGlvbi5SVEVkaXRvclBsdWdpbiIKLSAgICBydW50aW1lQ29tcGF0aWJpbGl0eT0iZmFsc2UiPgotICA8Zm9yZWlnbk1vZGVsPkluZGV4LnhzZDwvZm9yZWlnbk1vZGVsPgotICA8Zm9yZWlnbk1vZGVsPlJlZ2lzdHJ5LnhzZDwvZm9yZWlnbk1vZGVsPgotICA8Zm9yZWlnbk1vZGVsPlVERElSZWdpc3RyeS54c2Q8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5UYXhvbm9teS54c2Q8L2ZvcmVpZ25Nb2RlbD4KLSAgPGdlblBhY2thZ2VzIHByZWZpeD0iUlRJbmRleCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAiCi0gICAgICByZXNvdXJjZT0iWE1MIiBlY29yZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvIj4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9EZXNjcmlwdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRGVzY3JpcHRpb24vdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9EZXNjcmlwdGlvbi9sYW5nIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0RvY3VtZW50Um9vdCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QvbWl4ZWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QveE1MTlNQcmVmaXhNYXAiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QveFNJU2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QvZGVzY3JpcHRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QvaW5kZXgiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QvbmFtZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9JbmRleCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvZGVzY3JpcHRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvcmVnaXN0cnkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvdGF4b25vbXkiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vTmFtZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vTmFtZS92YWx1ZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL05hbWUvbGFuZyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgPC9nZW5QYWNrYWdlcz4KLSAgPGdlblBhY2thZ2VzIHByZWZpeD0iVGF4b25vbXkiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwIgotICAgICAgcmVzb3VyY2U9IlhNTCIgZWNvcmVQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8iPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9ubG5hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5L2NhdGVnb3J5Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5L2NvZGUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkvbmFtZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9Eb2N1bWVudFJvb3QvbWl4ZWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L3hNTE5TUHJlZml4TWFwIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC94U0lTY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9Eb2N1bWVudFJvb3QvY2F0ZWdvcnkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L3RheG9ub215Ii8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9OYW1lIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZS92YWx1ZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9OYW1lL2xhbmciLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L25sbmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkvY2F0ZWdvcnkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkvaWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkvbG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkvbmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9yZWYiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkvdG1vZGVsS2V5Ii8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICA8L2dlblBhY2thZ2VzPgotICA8Z2VuUGFja2FnZXMgcHJlZml4PSJSZWdpc3RyeSIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAiCi0gICAgICByZXNvdXJjZT0iWE1MIiBlY29yZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLyI+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRGVzY3JpcHRpb24vdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRGVzY3JpcHRpb24vbGFuZyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QvbWl4ZWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L3hNTE5TUHJlZml4TWFwIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC94U0lTY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QvZGVzY3JpcHRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L3JlZ2lzdHJ5Ii8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9OYW1lIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZS92YWx1ZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9OYW1lL2xhbmciLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L2lkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L2xvY2F0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L3JlZiIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgPC9nZW5QYWNrYWdlcz4KLSAgPGdlblBhY2thZ2VzIHByZWZpeD0iVURESVJlZ2lzdHJ5IiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMCIKLSAgICAgIHJlc291cmNlPSJYTUwiIGVjb3JlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLyI+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QvbWl4ZWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC94TUxOU1ByZWZpeE1hcCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L3hTSVNjaGVtYUxvY2F0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QvdGF4b25vbWllcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L3VkZGlSZWdpc3RyeSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1RheG9ub21pZXMiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1RheG9ub21pZXMvdGF4b25vbXkiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVURESVJlZ2lzdHJ5L3ZlcnNpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9kaXNjb3ZlcnlVUkwiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9wdWJsaWNhdGlvblVSTCIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVURESVJlZ2lzdHJ5L3NlY3VyZWREaXNjb3ZlcnlVUkwiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9zZWN1cmVkUHVibGljYXRpb25VUkwiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9kZWZhdWx0TG9naW4iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9kZWZhdWx0UGFzc3dvcmQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvdGF4b25vbWllcyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgPC9nZW5QYWNrYWdlcz4KLTwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9SVC54c2QyZWNvcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9SVC54c2QyZWNvcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZGFlODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvUlQueHNkMmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkFTQ0lJIj8+Ci08eHNkMmVjb3JlOlhTRDJFY29yZU1hcHBpbmdSb290IHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2QyZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvWFNEMkVjb3JlIiBpbnB1dHM9IkluZGV4LnhzZCMvIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvIFRheG9ub215LnhzZCMvIFJlZ2lzdHJ5LnhzZCMvIFVERElSZWdpc3RyeS54c2QjLyIKLSAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8iCi0gICAgdG9wVG9Cb3R0b209InRydWUiPgotICA8bmVzdGVkIGlucHV0cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIy8vYmFzZTtYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbj0yIgotICAgICAgb3V0cHV0cz0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIy8vWE1MTmFtZXNwYWNlRG9jdW1lbnRSb290L2Jhc2UiLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL2lkO1hTREF0dHJpYnV0ZURlY2xhcmF0aW9uPTMiIG91dHB1dHM9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSMvL1hNTE5hbWVzcGFjZURvY3VtZW50Um9vdC9pZCIvPgotICA8bmVzdGVkIGlucHV0cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIy8vbGFuZztYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiIgb3V0cHV0cz0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIy8vWE1MTmFtZXNwYWNlRG9jdW1lbnRSb290L2xhbmciLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL2xhbmc7WFNEQXR0cmlidXRlRGVjbGFyYXRpb24vWFNEU2ltcGxlVHlwZURlZmluaXRpb24iCi0gICAgICBvdXRwdXRzPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9MYW5ndWFnZSIvPgotICA8bmVzdGVkIGlucHV0cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIy8vc3BhY2U7WFNEQXR0cmlidXRlRGVjbGFyYXRpb249MSIKLSAgICAgIG91dHB1dHM9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSMvL1hNTE5hbWVzcGFjZURvY3VtZW50Um9vdC9zcGFjZSIvPgotICA8bmVzdGVkIGlucHV0cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIy8vc3BhY2U7WFNEQXR0cmlidXRlRGVjbGFyYXRpb249MS9YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiIKLSAgICAgIG91dHB1dHM9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSMvL1NwYWNlVHlwZSIvPgotICA8bmVzdGVkIGlucHV0cz0iYnVuZGxlZW50cnk6Ly8xODM5L2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIy8vc3RyaW5nO1hTRFNpbXBsZVR5cGVEZWZpbml0aW9uPTciCi0gICAgICBvdXRwdXRzPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciLz4KLSAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9OYW1lIj4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vTmFtZTtYU0RDb21wbGV4VHlwZURlZmluaXRpb249Mi9YU0RBdHRyaWJ1dGVVc2UiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9OYW1lL2xhbmciLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9DYXRlZ29yeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5Ij4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5L25sbmFtZSIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9DYXRlZ29yeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb249MS9YU0RQYXJ0aWNsZS9YU0RNb2RlbEdyb3VwL1hTRFBhcnRpY2xlPTEiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9jYXRlZ29yeSIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9DYXRlZ29yeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb249MS9YU0RBdHRyaWJ1dGVVc2U9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5L2NvZGUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkvbmFtZSIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL2NhdGVnb3J5O1hTREVsZW1lbnREZWNsYXJhdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L2NhdGVnb3J5Ii8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9EZXNjcmlwdGlvbjtYU0RDb21wbGV4VHlwZURlZmluaXRpb249MiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uIj4KLSAgICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vRGVzY3JpcHRpb247WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRGVzY3JpcHRpb24vbGFuZyIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL2Rlc2NyaXB0aW9uO1hTREVsZW1lbnREZWNsYXJhdGlvbj0yIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L2Rlc2NyaXB0aW9uIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9EZXNjcmlwdGlvbjtYU0RDb21wbGV4VHlwZURlZmluaXRpb249MiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRGVzY3JpcHRpb24iPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9EZXNjcmlwdGlvbjtYU0RDb21wbGV4VHlwZURlZmluaXRpb249Mi9YU0RBdHRyaWJ1dGVVc2UiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0Rlc2NyaXB0aW9uL2xhbmciLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9kZXNjcmlwdGlvbjtYU0RFbGVtZW50RGVjbGFyYXRpb249MiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L2Rlc2NyaXB0aW9uIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9OYW1lO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9OYW1lIj4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vTmFtZTtYU0RDb21wbGV4VHlwZURlZmluaXRpb249MS9YU0RBdHRyaWJ1dGVVc2UiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL05hbWUvbGFuZyIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9OYW1lIj4KLSAgICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vTmFtZTtYU0RDb21wbGV4VHlwZURlZmluaXRpb249MS9YU0RBdHRyaWJ1dGVVc2UiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9OYW1lL2xhbmciLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJidW5kbGVlbnRyeTovLzE4MzkvY2FjaGUvd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QjLy9hbnlVUkk7WFNEU2ltcGxlVHlwZURlZmluaXRpb249MjMiCi0gICAgICBvdXRwdXRzPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9BbnlVUkkiLz4KLSAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5Ij4KLSAgICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9uYW1lIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RQYXJ0aWNsZS9YU0RNb2RlbEdyb3VwL1hTRFBhcnRpY2xlPTEiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9kZXNjcmlwdGlvbiIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9SZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vUmVnaXN0cnkvaWQiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTREF0dHJpYnV0ZVVzZT0yIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vUmVnaXN0cnkvbG9jYXRpb24iLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTREF0dHJpYnV0ZVVzZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vUmVnaXN0cnkvcmVmIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vVGF4b25vbXk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkiPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L25sbmFtZSIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkvY2F0ZWdvcnkiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vVGF4b25vbXk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTREF0dHJpYnV0ZVVzZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2lkIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2xvY2F0aW9uIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MyIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L25hbWUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vVGF4b25vbXk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTREF0dHJpYnV0ZVVzZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkvcmVmIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9NCIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L3Rtb2RlbEtleSIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IkluZGV4LnhzZCMvL0luZGV4O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgiPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9JbmRleDtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvbmFtZSIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9JbmRleDtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9JbmRleC9kZXNjcmlwdGlvbiIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9JbmRleDtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0yIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9JbmRleC9yZWdpc3RyeSIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9JbmRleDtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0zIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9JbmRleC90YXhvbm9teSIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IkluZGV4LnhzZCMvL2luZGV4O1hTREVsZW1lbnREZWNsYXJhdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L2luZGV4Ii8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9uYW1lO1hTREVsZW1lbnREZWNsYXJhdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L25hbWUiLz4KLSAgPG5lc3RlZCBpbnB1dHM9IkluZGV4LnhzZCMvL25hbWU7WFNERWxlbWVudERlY2xhcmF0aW9uPTEiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9uYW1lO1hTREVsZW1lbnREZWNsYXJhdGlvbj0yIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L25hbWUiLz4KLSAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL3JlZ2lzdHJ5O1hTREVsZW1lbnREZWNsYXJhdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9yZWdpc3RyeSIvPgotICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vdGF4b25vbXk7WFNERWxlbWVudERlY2xhcmF0aW9uIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L3RheG9ub215Ii8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJVRERJUmVnaXN0cnkueHNkIy8vVGF4b25vbWllcztYU0RDb21wbGV4VHlwZURlZmluaXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9UYXhvbm9taWVzIj4KLSAgICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1RheG9ub21pZXM7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9UYXhvbm9taWVzL3RheG9ub215Ii8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL3RheG9ub21pZXM7WFNERWxlbWVudERlY2xhcmF0aW9uPTEiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L3RheG9ub21pZXMiLz4KLSAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVURESVJlZ2lzdHJ5L3ZlcnNpb24iLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1VERElSZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9kaXNjb3ZlcnlVUkwiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1VERElSZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0yIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9wdWJsaWNhdGlvblVSTCIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJVRERJUmVnaXN0cnkueHNkIy8vVURESVJlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RQYXJ0aWNsZS9YU0RNb2RlbEdyb3VwL1hTRFBhcnRpY2xlPTMiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVURESVJlZ2lzdHJ5L3NlY3VyZWREaXNjb3ZlcnlVUkwiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1VERElSZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT00IgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9zZWN1cmVkUHVibGljYXRpb25VUkwiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1VERElSZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT01IgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9kZWZhdWx0TG9naW4iLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1VERElSZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT02IgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9kZWZhdWx0UGFzc3dvcmQiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1VERElSZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT03IgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS90YXhvbm9taWVzIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL3VkZGlSZWdpc3RyeTtYU0RFbGVtZW50RGVjbGFyYXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L3VkZGlSZWdpc3RyeSIvPgotPC94c2QyZWNvcmU6WFNEMkVjb3JlTWFwcGluZ1Jvb3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNhNzNiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBqbWVyZ2VyLyxcCi0gICAgICAgICAgICAgICBpY29ucy8KLXNyYy5pbmNsdWRlcyA9IGNvbXBvbmVudC54bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2NvbXBvbmVudC54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9jb21wb25lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2UzNWM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2NvbXBvbmVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNvbXBvbmVudCB4bWxucz0iaHR0cDovL2VjbGlwc2Uub3JnL3d0cC9yZWxlbmcvdG9vbHMvY29tcG9uZW50LW1vZGVsIiBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3MiPgotICAgPGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+Ci0gICA8L2NvbXBvbmVudC1kZXBlbmRzPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LndzIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmF4aXMiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS53c2lsNGoiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLnVkZGk0aiIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08L2NvbXBvbmVudD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2ljb25zL2Z1bGwvb2JqMTYvd3NpY2F0LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2ljb25zL2Z1bGwvb2JqMTYvd3NpY2F0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5OTgzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9pY29ucy9mdWxsL29iajE2L3dzaWNhdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9pY29ucy9mdWxsL29iajE2L3dzaWNhdF9jaGlsZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9pY29ucy9mdWxsL29iajE2L3dzaWNhdF9jaGlsZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YTlmM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvaWNvbnMvZnVsbC9vYmoxNi93c2ljYXRfY2hpbGQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvam1lcmdlci9tZXJnZS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9qbWVyZ2VyL21lcmdlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFlMjEzNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9qbWVyZ2VyL21lcmdlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIE1lcmdlIHJ1bGVzIHVzZWQgYnkgSk1lcmdlciAtLT4KLTxtZXJnZTpvcHRpb25zIAotCXhtbG5zOm1lcmdlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9lY2xpcHNlL2VtZi9jb2RlZ2VuL2ptZXJnZS9PcHRpb25zIj4KLQk8bWVyZ2U6cHVsbCAKLQkJc291cmNlR2V0PSJNZXRob2QvZ2V0UmV0dXJuVHlwZSIgCi0JCXRhcmdldFB1dD0iTWV0aG9kL3NldFJldHVyblR5cGUiLz4KLQk8bWVyZ2U6cHVsbCAKLQkJc291cmNlR2V0PSJNZXRob2QvZ2V0RXhjZXB0aW9ucyIgCi0JCXRhcmdldFB1dD0iTWV0aG9kL2FkZEV4Y2VwdGlvbiIvPgotCi08IS0tIE1lcmdlIHJ1bGVzIHRvIGhhbmRsZSBhbm5vdGF0aW9uOgotCS0gV2l0aCB0aGlzIHB1bGwgcnVsZSwgYW5ub3RhdGlvbnMgaW4gdGhlIHRhcmdldCBpcyByZXBsYWNlZCBieSBhbm5vdGF0aW9ucyBvZiB0aGUgCi0Jc2FtZSBuYW1lIGluIHRoZSBzb3VyY2UuCi0JLSBXaXRoIHRoaXMgc3dlZXAgcnVsZSwgYW55IGFubm90YXRpb24gaW4gdGhlIHRhcmdldCB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIAotICAJc291cmNlIGlzIGNvbW1lbnRlZCBvdXQuIAotICAJLSBCeSBkZWZhdWx0LCBhbnkgYW5ub3RhdGlvbiBpbiB0aGUgc291cmNlIHRoYXQgaXMgbm90IGluIHRoZSB0YXJnZXQgYXJlIHB1bGxlZCBpbnRvIHRoZSB0YXJnZXQuCi0tLT4KLQotCTxtZXJnZTpwdWxsIAotICAgIAlzb3VyY2VHZXQ9IkFubm90YXRpb24vZ2V0Q29udGVudHMiCi0gICAgCXRhcmdldFB1dD0iQW5ub3RhdGlvbi9zZXRDb250ZW50cyIvPgotICAgCi0gIAk8bWVyZ2U6c3dlZXAgc2VsZWN0PSJBbm5vdGF0aW9uIiBhY3Rpb249ImNvbW1lbnQiLz4KLQkJCi08L21lcmdlOm9wdGlvbnM+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9JbmRleC54c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9JbmRleC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkY2Y1NDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvSW5kZXgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hCi14bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgoteG1sbnM6cnRpPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4IgoteG1sbnM6cmVnPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSIKLXhtbG5zOnRheD0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi10YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgiPgotCi0JPHhzZDppbXBvcnQKLQluYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLQlzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiCi0Jc2NoZW1hTG9jYXRpb249Ii4vUmVnaXN0cnkueHNkIi8+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi0Jc2NoZW1hTG9jYXRpb249Ii4vVGF4b25vbXkueHNkIi8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iaW5kZXgiIHR5cGU9InJ0aTpJbmRleCIvPgotCQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5kZXgiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InJ0aTpOYW1lIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InJ0aTpEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IHJlZj0icmVnOnJlZ2lzdHJ5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0YXg6dGF4b25vbXkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0icnRpOk5hbWUiLz4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTmFtZSI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0icnRpOkRlc2NyaXB0aW9uIi8+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkRlc2NyaXB0aW9uIj4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvUmVnaXN0cnkueHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvUmVnaXN0cnkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWUxOTY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1JlZ2lzdHJ5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYQoteG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLXhtbG5zOnJlZz0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiCi10YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5Ij4KLQotCTx4c2Q6aW1wb3J0Ci0JbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0Jc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvPgotCi0JPHhzZDplbGVtZW50IG5hbWU9InJlZ2lzdHJ5IiB0eXBlPSJyZWc6UmVnaXN0cnkiLz4KLQkKLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdHJ5Ij4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJyZWc6TmFtZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJyZWc6RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6YW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InJlZiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhdGlvbiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InJlZzpOYW1lIi8+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik5hbWUiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InJlZzpEZXNjcmlwdGlvbiIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJEZXNjcmlwdGlvbiI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1RheG9ub215LnhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1RheG9ub215LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI1NmFlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9UYXhvbm9teS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEKLXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi14bWxuczp0YXg9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSI+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCXNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLz4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0YXhvbm9teSIgdHlwZT0idGF4OlRheG9ub215Ii8+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlRheG9ub215Ij4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJubG5hbWUiIHR5cGU9InRheDpOYW1lIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iY2F0ZWdvcnkiIHR5cGU9InRheDpDYXRlZ29yeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzZDphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0icmVmIiB0eXBlPSJ4c2Q6YW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxvY2F0aW9uIiB0eXBlPSJ4c2Q6YW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idG1vZGVsS2V5IiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iY2F0ZWdvcnkiIHR5cGU9InRheDpDYXRlZ29yeSIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDYXRlZ29yeSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibmxuYW1lIiB0eXBlPSJ0YXg6TmFtZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJ0YXg6Q2F0ZWdvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iY29kZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InRheDpOYW1lIi8+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik5hbWUiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9VRERJUmVnaXN0cnkueHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvVURESVJlZ2lzdHJ5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMzNjI2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9VRERJUmVnaXN0cnkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hCi14bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgoteG1sbnM6dXJnPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkiCi14bWxuczpyZWc9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5IgoteG1sbnM6dGF4PSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIKLXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5Ij4KLQotCTx4c2Q6aW1wb3J0Ci0JbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0Jc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvPgotCQotCTx4c2Q6aW1wb3J0Ci0JbmFtZXNwYWNlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSIKLQlzY2hlbWFMb2NhdGlvbj0iLi9SZWdpc3RyeS54c2QiLz4KLQotCTx4c2Q6aW1wb3J0Ci0JbmFtZXNwYWNlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIKLQlzY2hlbWFMb2NhdGlvbj0iLi9UYXhvbm9teS54c2QiLz4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ1ZGRpUmVnaXN0cnkiIHR5cGU9InVyZzpVRERJUmVnaXN0cnkiLz4KLQkKLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlVERElSZWdpc3RyeSI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJyZWc6UmVnaXN0cnkiPgotCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjEiLz4KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImRpc2NvdmVyeVVSTCIgdHlwZT0ieHNkOmFueVVSSSIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJwdWJsaWNhdGlvblVSTCIgdHlwZT0ieHNkOmFueVVSSSIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cmVkRGlzY292ZXJ5VVJMIiB0eXBlPSJ4c2Q6YW55VVJJIiBtaW5PY2N1cnM9IjEiLz4KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9InNlY3VyZWRQdWJsaWNhdGlvblVSTCIgdHlwZT0ieHNkOmFueVVSSSIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJkZWZhdWx0TG9naW4iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMSIvPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZGVmYXVsdFBhc3N3b3JkIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjEiLz4KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9InRheG9ub21pZXMiIHR5cGU9InVyZzpUYXhvbm9taWVzIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9InRheG9ub21pZXMiIHR5cGU9InVyZzpUYXhvbm9taWVzIi8+Ci0JCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUYXhvbm9taWVzIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InRheDp0YXhvbm9teSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDA0MmQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0icmVnaXN0cnkiCi0gICAgbnNVUkk9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5IiBuc1ByZWZpeD0icmVnaXN0cnkiPgotICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iJiN4RDsmI3hBOyAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lc3BhY2UuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0mI3hEOyYjeEE7ICAgIHN1aXRhYmxlIGZvciBpbXBvcnQgYnkgb3RoZXIgc2NoZW1hIGRvY3VtZW50cy4gICYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUgZGVmaW5lZCYjeEQ7JiN4QTsgICAgb25seSBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSBvciBpdHMgc3ViZ3JvdXBzLiAgVGhlJiN4RDsmI3hBOyAgICBmb2xsb3dpbmcgbmFtZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoaXMgbmFtZXNwYWNlIGFuZCBzaG91bGQmI3hEOyYjeEE7ICAgIG5vdCBiZSB1c2VkIHdpdGggY29uZmxpY3Rpbmcgc2VtYW50aWNzIGJ5IGFueSBXb3JraW5nIEdyb3VwLCYjeEQ7JiN4QTsgICAgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2U6JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgYmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSYjeEQ7JiN4QTsgICAgICAgICBwcm92aWRlcyBhIFVSSSB0byBiZSB1c2VkIGFzIHRoZSBiYXNlIGZvciBpbnRlcnByZXRpbmcgYW55JiN4RDsmI3hBOyAgICAgICAgIHJlbGF0aXZlIFVSSXMgaW4gdGhlIHNjb3BlIG9mIHRoZSBlbGVtZW50IG9uIHdoaWNoIGl0JiN4RDsmI3hBOyAgICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgQmFzZSBzcGVjaWZpY2F0aW9uLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGlkICAgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuJiN4RDsmI3hBOyAgICAgICAgIFRoZSB4bWw6aWQgc3BlY2lmaWNhdGlvbiBpcyBub3QgeWV0IGEgVzNDIFJlY29tbWVuZGF0aW9uLCYjeEQ7JiN4QTsgICAgICAgICBidXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgaGVyZSB0byBmYWNpbGl0YXRlIGV4cGVyaW1lbnRhdGlvbiYjeEQ7JiN4QTsgICAgICAgICB3aXRoIHRoZSBtZWNoYW5pc21zIGl0IHByb3Bvc2VzLiAgTm90ZSB0aGF0IGl0IGlzIF9ub3RfIGluY2x1ZGVkJiN4RDsmI3hBOyAgICAgICAgIGluIHRoZSBzcGVjaWFsQXR0cnMgYXR0cmlidXRlIGdyb3VwLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGxhbmcgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgaXMgYSBsYW5ndWFnZSBjb2RlIGZvciB0aGUgbmF0dXJhbCBsYW5ndWFnZSBvZiB0aGUgY29udGVudCBvZiYjeEQ7JiN4QTsgICAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCYjeEQ7JiN4QTsgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLiYjeEQ7JiN4QTsgICYjeEQ7JiN4QTsgICAgc3BhY2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcmI3hEOyYjeEE7ICAgICAgICAgZGlzY2lwbGluZSBpcyBpbnRlbmRlZCBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQ7IGl0cyYjeEQ7JiN4QTsgICAgICAgICB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cyYjeEQ7JiN4QTsgICAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBGYXRoZXIgKGluIGFueSBjb250ZXh0IGF0IGFsbCk6IGRlbm90ZXMgSm9uIEJvc2FrLCB0aGUgY2hhaXIgb2YgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBvcmlnaW5hbCBYTUwgV29ya2luZyBHcm91cC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSAmI3hEOyYjeEE7ICAgICAgICAgdGhlIGZvbGxvd2luZyBkZWNpc2lvbiBvZiB0aGUgVzNDIFhNTCBQbGVuYXJ5IGFuZCAmI3hEOyYjeEE7ICAgICAgICAgWE1MIENvb3JkaW5hdGlvbiBncm91cHM6JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgICAgICAgSW4gYXBwcmVjaWF0aW9uIGZvciBoaXMgdmlzaW9uLCBsZWFkZXJzaGlwIGFuZCBkZWRpY2F0aW9uJiN4RDsmI3hBOyAgICAgICAgICAgICB0aGUgVzNDIFhNTCBQbGVuYXJ5IG9uIHRoaXMgMTB0aCBkYXkgb2YgRmVicnVhcnksIDIwMDAmI3hEOyYjeEE7ICAgICAgICAgICAgIHJlc2VydmVzIGZvciBKb24gQm9zYWsgaW4gcGVycGV0dWl0eSB0aGUgWE1MIG5hbWUmI3hEOyYjeEE7ICAgICAgICAgICAgIHhtbDpGYXRoZXImI3hEOyYjeEE7ICAmI3hEOyYjeEE7VGhpcyBzY2hlbWEgZGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBhbiBhdHRyaWJ1dGUgZ3JvdXAmI3hEOyYjeEE7ICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5JiN4RDsmI3hBOyAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZywgeG1sOnNwYWNlIG9yIHhtbDppZCYjeEQ7JiN4QTsgICAgICAgIGF0dHJpYnV0ZXMgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hJiN4RDsmI3hBOyAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6JiN4RDsmI3hBOyAgICAgICAgJmFtcDtsdDtzY2hlbWEgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2ltcG9ydCBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJnF1b3Q7JiN4RDsmI3hBOyAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMmI3hEOyYjeEE7ICAgICAgICBvciB0aGUgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7dHlwZSAuIC4gLiZhbXA7Z3Q7JiN4RDsmI3hBOyAgICAgICAgIC4gLiAuJiN4RDsmI3hBOyAgICAgICAgICZhbXA7bHQ7YXR0cmlidXRlR3JvdXAgcmVmPSZxdW90O3htbDpzcGVjaWFsQXR0cnMmcXVvdDsvJmFtcDtndDsmI3hEOyYjeEE7ICYjeEQ7JiN4QTsgICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UmI3hEOyYjeEE7ICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzJiN4RDsmI3hBO0luIGtlZXBpbmcgd2l0aCB0aGUgWE1MIFNjaGVtYSBXRydzIHN0YW5kYXJkIHZlcnNpb25pbmcmI3hEOyYjeEE7ICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkLiYjeEQ7JiN4QTsgICBBdCB0aGUgZGF0ZSBvZiBpc3N1ZSBpdCBjYW4gYWxzbyBiZSBmb3VuZCBhdCYjeEQ7JiN4QTsgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuJiN4RDsmI3hBOyAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsJiN4RDsmI3hBOyAgIGluIG9yZGVyIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhNTCBTY2hlbWEmI3hEOyYjeEE7ICAgaXRzZWxmLCBvciB3aXRoIHRoZSBYTUwgbmFtZXNwYWNlIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MJiN4RDsmI3hBOyAgIFNjaGVtYSBvciBYTUwgbmFtZXNwYWNlcyBjaGFuZ2UsIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIHdpbGwgY2hhbmdlJiN4RDsmI3hBOyAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdCYjeEQ7JiN4QTsgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2Qgd2lsbCBub3QgY2hhbmdlLiYjeEQ7JiN4QTsgICIvPgotICA8L2VBbm5vdGF0aW9ucz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZXNjcmlwdGlvbiI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJEZXNjcmlwdGlvbiIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbHVlIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOjAiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxhbmciIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vTGFuZ3VhZ2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJsYW5nIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRvY3VtZW50Um9vdCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSIiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9Im1peGVkIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1peGVkIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUZlYXR1cmVNYXBFbnRyeSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudFdpbGRjYXJkIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjptaXhlZCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ4TUxOU1ByZWZpeE1hcCIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ4bWxuczpwcmVmaXgiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieFNJU2NoZW1hTG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieHNpOnNjaGVtYUxvY2F0aW9uIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImRlc2NyaXB0aW9uIiB1cHBlckJvdW5kPSItMiIKLSAgICAgICAgZVR5cGU9IiMvL0Rlc2NyaXB0aW9uIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImRlc2NyaXB0aW9uIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgdXBwZXJCb3VuZD0iLTIiIGVUeXBlPSIjLy9OYW1lIgotICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJyZWdpc3RyeSIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9SZWdpc3RyeSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJyZWdpc3RyeSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik5hbWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iTmFtZSIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbHVlIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOjAiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxhbmciIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vTGFuZ3VhZ2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJsYW5nIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlJlZ2lzdHJ5Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IlJlZ2lzdHJ5Ii8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50T25seSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJuYW1lIiBsb3dlckJvdW5kPSIxIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL05hbWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibmFtZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZXNjcmlwdGlvbiIgbG93ZXJCb3VuZD0iMSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy9EZXNjcmlwdGlvbiIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZXNjcmlwdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpZCIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9BbnlVUkkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJpZCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsb2NhdGlvbiIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9BbnlVUkkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJsb2NhdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyZWYiIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0icmVmIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEwOTVjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0icnRpbmRleCIKLSAgICBuc1VSST0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleCIgbnNQcmVmaXg9InJ0aW5kZXgiPgotICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iJiN4RDsmI3hBOyAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lc3BhY2UuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0mI3hEOyYjeEE7ICAgIHN1aXRhYmxlIGZvciBpbXBvcnQgYnkgb3RoZXIgc2NoZW1hIGRvY3VtZW50cy4gICYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUgZGVmaW5lZCYjeEQ7JiN4QTsgICAgb25seSBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSBvciBpdHMgc3ViZ3JvdXBzLiAgVGhlJiN4RDsmI3hBOyAgICBmb2xsb3dpbmcgbmFtZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoaXMgbmFtZXNwYWNlIGFuZCBzaG91bGQmI3hEOyYjeEE7ICAgIG5vdCBiZSB1c2VkIHdpdGggY29uZmxpY3Rpbmcgc2VtYW50aWNzIGJ5IGFueSBXb3JraW5nIEdyb3VwLCYjeEQ7JiN4QTsgICAgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2U6JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgYmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSYjeEQ7JiN4QTsgICAgICAgICBwcm92aWRlcyBhIFVSSSB0byBiZSB1c2VkIGFzIHRoZSBiYXNlIGZvciBpbnRlcnByZXRpbmcgYW55JiN4RDsmI3hBOyAgICAgICAgIHJlbGF0aXZlIFVSSXMgaW4gdGhlIHNjb3BlIG9mIHRoZSBlbGVtZW50IG9uIHdoaWNoIGl0JiN4RDsmI3hBOyAgICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgQmFzZSBzcGVjaWZpY2F0aW9uLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGlkICAgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuJiN4RDsmI3hBOyAgICAgICAgIFRoZSB4bWw6aWQgc3BlY2lmaWNhdGlvbiBpcyBub3QgeWV0IGEgVzNDIFJlY29tbWVuZGF0aW9uLCYjeEQ7JiN4QTsgICAgICAgICBidXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgaGVyZSB0byBmYWNpbGl0YXRlIGV4cGVyaW1lbnRhdGlvbiYjeEQ7JiN4QTsgICAgICAgICB3aXRoIHRoZSBtZWNoYW5pc21zIGl0IHByb3Bvc2VzLiAgTm90ZSB0aGF0IGl0IGlzIF9ub3RfIGluY2x1ZGVkJiN4RDsmI3hBOyAgICAgICAgIGluIHRoZSBzcGVjaWFsQXR0cnMgYXR0cmlidXRlIGdyb3VwLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGxhbmcgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgaXMgYSBsYW5ndWFnZSBjb2RlIGZvciB0aGUgbmF0dXJhbCBsYW5ndWFnZSBvZiB0aGUgY29udGVudCBvZiYjeEQ7JiN4QTsgICAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCYjeEQ7JiN4QTsgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLiYjeEQ7JiN4QTsgICYjeEQ7JiN4QTsgICAgc3BhY2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcmI3hEOyYjeEE7ICAgICAgICAgZGlzY2lwbGluZSBpcyBpbnRlbmRlZCBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQ7IGl0cyYjeEQ7JiN4QTsgICAgICAgICB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cyYjeEQ7JiN4QTsgICAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBGYXRoZXIgKGluIGFueSBjb250ZXh0IGF0IGFsbCk6IGRlbm90ZXMgSm9uIEJvc2FrLCB0aGUgY2hhaXIgb2YgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBvcmlnaW5hbCBYTUwgV29ya2luZyBHcm91cC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSAmI3hEOyYjeEE7ICAgICAgICAgdGhlIGZvbGxvd2luZyBkZWNpc2lvbiBvZiB0aGUgVzNDIFhNTCBQbGVuYXJ5IGFuZCAmI3hEOyYjeEE7ICAgICAgICAgWE1MIENvb3JkaW5hdGlvbiBncm91cHM6JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgICAgICAgSW4gYXBwcmVjaWF0aW9uIGZvciBoaXMgdmlzaW9uLCBsZWFkZXJzaGlwIGFuZCBkZWRpY2F0aW9uJiN4RDsmI3hBOyAgICAgICAgICAgICB0aGUgVzNDIFhNTCBQbGVuYXJ5IG9uIHRoaXMgMTB0aCBkYXkgb2YgRmVicnVhcnksIDIwMDAmI3hEOyYjeEE7ICAgICAgICAgICAgIHJlc2VydmVzIGZvciBKb24gQm9zYWsgaW4gcGVycGV0dWl0eSB0aGUgWE1MIG5hbWUmI3hEOyYjeEE7ICAgICAgICAgICAgIHhtbDpGYXRoZXImI3hEOyYjeEE7ICAmI3hEOyYjeEE7VGhpcyBzY2hlbWEgZGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBhbiBhdHRyaWJ1dGUgZ3JvdXAmI3hEOyYjeEE7ICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5JiN4RDsmI3hBOyAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZywgeG1sOnNwYWNlIG9yIHhtbDppZCYjeEQ7JiN4QTsgICAgICAgIGF0dHJpYnV0ZXMgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hJiN4RDsmI3hBOyAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6JiN4RDsmI3hBOyAgICAgICAgJmFtcDtsdDtzY2hlbWEgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2ltcG9ydCBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJnF1b3Q7JiN4RDsmI3hBOyAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMmI3hEOyYjeEE7ICAgICAgICBvciB0aGUgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7dHlwZSAuIC4gLiZhbXA7Z3Q7JiN4RDsmI3hBOyAgICAgICAgIC4gLiAuJiN4RDsmI3hBOyAgICAgICAgICZhbXA7bHQ7YXR0cmlidXRlR3JvdXAgcmVmPSZxdW90O3htbDpzcGVjaWFsQXR0cnMmcXVvdDsvJmFtcDtndDsmI3hEOyYjeEE7ICYjeEQ7JiN4QTsgICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UmI3hEOyYjeEE7ICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzJiN4RDsmI3hBO0luIGtlZXBpbmcgd2l0aCB0aGUgWE1MIFNjaGVtYSBXRydzIHN0YW5kYXJkIHZlcnNpb25pbmcmI3hEOyYjeEE7ICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkLiYjeEQ7JiN4QTsgICBBdCB0aGUgZGF0ZSBvZiBpc3N1ZSBpdCBjYW4gYWxzbyBiZSBmb3VuZCBhdCYjeEQ7JiN4QTsgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuJiN4RDsmI3hBOyAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsJiN4RDsmI3hBOyAgIGluIG9yZGVyIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhNTCBTY2hlbWEmI3hEOyYjeEE7ICAgaXRzZWxmLCBvciB3aXRoIHRoZSBYTUwgbmFtZXNwYWNlIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MJiN4RDsmI3hBOyAgIFNjaGVtYSBvciBYTUwgbmFtZXNwYWNlcyBjaGFuZ2UsIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIHdpbGwgY2hhbmdlJiN4RDsmI3hBOyAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdCYjeEQ7JiN4QTsgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2Qgd2lsbCBub3QgY2hhbmdlLiYjeEQ7JiN4QTsgICIvPgotICA8L2VBbm5vdGF0aW9ucz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZXNjcmlwdGlvbiI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJEZXNjcmlwdGlvbiIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbHVlIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOjAiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxhbmciIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vTGFuZ3VhZ2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJsYW5nIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRvY3VtZW50Um9vdCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSIiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9Im1peGVkIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1peGVkIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUZlYXR1cmVNYXBFbnRyeSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudFdpbGRjYXJkIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjptaXhlZCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ4TUxOU1ByZWZpeE1hcCIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ4bWxuczpwcmVmaXgiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieFNJU2NoZW1hTG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieHNpOnNjaGVtYUxvY2F0aW9uIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImRlc2NyaXB0aW9uIiB1cHBlckJvdW5kPSItMiIKLSAgICAgICAgZVR5cGU9IiMvL0Rlc2NyaXB0aW9uIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImRlc2NyaXB0aW9uIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iaW5kZXgiIHVwcGVyQm91bmQ9Ii0yIgotICAgICAgICBlVHlwZT0iIy8vSW5kZXgiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgICAgICByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iaW5kZXgiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJuYW1lIiB1cHBlckJvdW5kPSItMiIgZVR5cGU9IiMvL05hbWUiCi0gICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibmFtZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkluZGV4Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IkluZGV4Ii8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50T25seSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJuYW1lIiBsb3dlckJvdW5kPSIxIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL05hbWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibmFtZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZXNjcmlwdGlvbiIgbG93ZXJCb3VuZD0iMSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy9EZXNjcmlwdGlvbiIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZXNjcmlwdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJyZWdpc3RyeSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFQ2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5IgotICAgICAgICBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InJlZ2lzdHJ5Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGF4b25vbXkiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teSIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ0YXhvbm9teSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik5hbWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iTmFtZSIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbHVlIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOjAiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxhbmciIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vTGFuZ3VhZ2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJsYW5nIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTg4OWIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0idGF4b25vbXkiCi0gICAgbnNVUkk9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IiBuc1ByZWZpeD0idGF4b25vbXkiPgotICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iJiN4RDsmI3hBOyAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lc3BhY2UuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0mI3hEOyYjeEE7ICAgIHN1aXRhYmxlIGZvciBpbXBvcnQgYnkgb3RoZXIgc2NoZW1hIGRvY3VtZW50cy4gICYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUgZGVmaW5lZCYjeEQ7JiN4QTsgICAgb25seSBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSBvciBpdHMgc3ViZ3JvdXBzLiAgVGhlJiN4RDsmI3hBOyAgICBmb2xsb3dpbmcgbmFtZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoaXMgbmFtZXNwYWNlIGFuZCBzaG91bGQmI3hEOyYjeEE7ICAgIG5vdCBiZSB1c2VkIHdpdGggY29uZmxpY3Rpbmcgc2VtYW50aWNzIGJ5IGFueSBXb3JraW5nIEdyb3VwLCYjeEQ7JiN4QTsgICAgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2U6JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgYmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSYjeEQ7JiN4QTsgICAgICAgICBwcm92aWRlcyBhIFVSSSB0byBiZSB1c2VkIGFzIHRoZSBiYXNlIGZvciBpbnRlcnByZXRpbmcgYW55JiN4RDsmI3hBOyAgICAgICAgIHJlbGF0aXZlIFVSSXMgaW4gdGhlIHNjb3BlIG9mIHRoZSBlbGVtZW50IG9uIHdoaWNoIGl0JiN4RDsmI3hBOyAgICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgQmFzZSBzcGVjaWZpY2F0aW9uLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGlkICAgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuJiN4RDsmI3hBOyAgICAgICAgIFRoZSB4bWw6aWQgc3BlY2lmaWNhdGlvbiBpcyBub3QgeWV0IGEgVzNDIFJlY29tbWVuZGF0aW9uLCYjeEQ7JiN4QTsgICAgICAgICBidXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgaGVyZSB0byBmYWNpbGl0YXRlIGV4cGVyaW1lbnRhdGlvbiYjeEQ7JiN4QTsgICAgICAgICB3aXRoIHRoZSBtZWNoYW5pc21zIGl0IHByb3Bvc2VzLiAgTm90ZSB0aGF0IGl0IGlzIF9ub3RfIGluY2x1ZGVkJiN4RDsmI3hBOyAgICAgICAgIGluIHRoZSBzcGVjaWFsQXR0cnMgYXR0cmlidXRlIGdyb3VwLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGxhbmcgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgaXMgYSBsYW5ndWFnZSBjb2RlIGZvciB0aGUgbmF0dXJhbCBsYW5ndWFnZSBvZiB0aGUgY29udGVudCBvZiYjeEQ7JiN4QTsgICAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCYjeEQ7JiN4QTsgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLiYjeEQ7JiN4QTsgICYjeEQ7JiN4QTsgICAgc3BhY2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcmI3hEOyYjeEE7ICAgICAgICAgZGlzY2lwbGluZSBpcyBpbnRlbmRlZCBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQ7IGl0cyYjeEQ7JiN4QTsgICAgICAgICB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cyYjeEQ7JiN4QTsgICAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBGYXRoZXIgKGluIGFueSBjb250ZXh0IGF0IGFsbCk6IGRlbm90ZXMgSm9uIEJvc2FrLCB0aGUgY2hhaXIgb2YgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBvcmlnaW5hbCBYTUwgV29ya2luZyBHcm91cC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSAmI3hEOyYjeEE7ICAgICAgICAgdGhlIGZvbGxvd2luZyBkZWNpc2lvbiBvZiB0aGUgVzNDIFhNTCBQbGVuYXJ5IGFuZCAmI3hEOyYjeEE7ICAgICAgICAgWE1MIENvb3JkaW5hdGlvbiBncm91cHM6JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgICAgICAgSW4gYXBwcmVjaWF0aW9uIGZvciBoaXMgdmlzaW9uLCBsZWFkZXJzaGlwIGFuZCBkZWRpY2F0aW9uJiN4RDsmI3hBOyAgICAgICAgICAgICB0aGUgVzNDIFhNTCBQbGVuYXJ5IG9uIHRoaXMgMTB0aCBkYXkgb2YgRmVicnVhcnksIDIwMDAmI3hEOyYjeEE7ICAgICAgICAgICAgIHJlc2VydmVzIGZvciBKb24gQm9zYWsgaW4gcGVycGV0dWl0eSB0aGUgWE1MIG5hbWUmI3hEOyYjeEE7ICAgICAgICAgICAgIHhtbDpGYXRoZXImI3hEOyYjeEE7ICAmI3hEOyYjeEE7VGhpcyBzY2hlbWEgZGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBhbiBhdHRyaWJ1dGUgZ3JvdXAmI3hEOyYjeEE7ICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5JiN4RDsmI3hBOyAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZywgeG1sOnNwYWNlIG9yIHhtbDppZCYjeEQ7JiN4QTsgICAgICAgIGF0dHJpYnV0ZXMgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hJiN4RDsmI3hBOyAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6JiN4RDsmI3hBOyAgICAgICAgJmFtcDtsdDtzY2hlbWEgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2ltcG9ydCBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJnF1b3Q7JiN4RDsmI3hBOyAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMmI3hEOyYjeEE7ICAgICAgICBvciB0aGUgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7dHlwZSAuIC4gLiZhbXA7Z3Q7JiN4RDsmI3hBOyAgICAgICAgIC4gLiAuJiN4RDsmI3hBOyAgICAgICAgICZhbXA7bHQ7YXR0cmlidXRlR3JvdXAgcmVmPSZxdW90O3htbDpzcGVjaWFsQXR0cnMmcXVvdDsvJmFtcDtndDsmI3hEOyYjeEE7ICYjeEQ7JiN4QTsgICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UmI3hEOyYjeEE7ICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzJiN4RDsmI3hBO0luIGtlZXBpbmcgd2l0aCB0aGUgWE1MIFNjaGVtYSBXRydzIHN0YW5kYXJkIHZlcnNpb25pbmcmI3hEOyYjeEE7ICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkLiYjeEQ7JiN4QTsgICBBdCB0aGUgZGF0ZSBvZiBpc3N1ZSBpdCBjYW4gYWxzbyBiZSBmb3VuZCBhdCYjeEQ7JiN4QTsgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuJiN4RDsmI3hBOyAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsJiN4RDsmI3hBOyAgIGluIG9yZGVyIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhNTCBTY2hlbWEmI3hEOyYjeEE7ICAgaXRzZWxmLCBvciB3aXRoIHRoZSBYTUwgbmFtZXNwYWNlIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MJiN4RDsmI3hBOyAgIFNjaGVtYSBvciBYTUwgbmFtZXNwYWNlcyBjaGFuZ2UsIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIHdpbGwgY2hhbmdlJiN4RDsmI3hBOyAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdCYjeEQ7JiN4QTsgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2Qgd2lsbCBub3QgY2hhbmdlLiYjeEQ7JiN4QTsgICIvPgotICA8L2VBbm5vdGF0aW9ucz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJDYXRlZ29yeSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJDYXRlZ29yeSIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmxuYW1lIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL05hbWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibmxuYW1lIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImNhdGVnb3J5IiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL0NhdGVnb3J5IiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImNhdGVnb3J5Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImNvZGUiIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iY29kZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRG9jdW1lbnRSb290Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IiIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ibWl4ZWQiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibWl4ZWQiIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRmVhdHVyZU1hcEVudHJ5Ij4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50V2lsZGNhcmQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOm1peGVkIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhNTE5TUHJlZml4TWFwIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhtbG5zOnByZWZpeCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ4U0lTY2hlbWFMb2NhdGlvbiIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ4c2k6c2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iY2F0ZWdvcnkiIHVwcGVyQm91bmQ9Ii0yIgotICAgICAgICBlVHlwZT0iIy8vQ2F0ZWdvcnkiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgICAgICByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iY2F0ZWdvcnkiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJuYW1lIiB1cHBlckJvdW5kPSItMiIgZVR5cGU9IiMvL05hbWUiCi0gICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibmFtZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InRheG9ub215IiB1cHBlckJvdW5kPSItMiIKLSAgICAgICAgZVR5cGU9IiMvL1RheG9ub215IiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InRheG9ub215Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTmFtZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJOYW1lIi8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJzaW1wbGUiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmFsdWUiIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSI6MCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJzaW1wbGUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibGFuZyIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9MYW5ndWFnZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImxhbmciLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGF4b25vbXkiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iVGF4b25vbXkiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRPbmx5Ii8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5sbmFtZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5sbmFtZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjYXRlZ29yeSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9DYXRlZ29yeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJjYXRlZ29yeSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpZCIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9BbnlVUkkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJpZCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsb2NhdGlvbiIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9BbnlVUkkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJsb2NhdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVmIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0FueVVSSSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InJlZiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0bW9kZWxLZXkiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0idG1vZGVsS2V5Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4Y2U2MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0idWRkaXJlZ2lzdHJ5IgotICAgIG5zVVJJPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkiIG5zUHJlZml4PSJ1ZGRpcmVnaXN0cnkiPgotICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iJiN4RDsmI3hBOyAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lc3BhY2UuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0mI3hEOyYjeEE7ICAgIHN1aXRhYmxlIGZvciBpbXBvcnQgYnkgb3RoZXIgc2NoZW1hIGRvY3VtZW50cy4gICYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUgZGVmaW5lZCYjeEQ7JiN4QTsgICAgb25seSBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSBvciBpdHMgc3ViZ3JvdXBzLiAgVGhlJiN4RDsmI3hBOyAgICBmb2xsb3dpbmcgbmFtZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoaXMgbmFtZXNwYWNlIGFuZCBzaG91bGQmI3hEOyYjeEE7ICAgIG5vdCBiZSB1c2VkIHdpdGggY29uZmxpY3Rpbmcgc2VtYW50aWNzIGJ5IGFueSBXb3JraW5nIEdyb3VwLCYjeEQ7JiN4QTsgICAgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2U6JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgYmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSYjeEQ7JiN4QTsgICAgICAgICBwcm92aWRlcyBhIFVSSSB0byBiZSB1c2VkIGFzIHRoZSBiYXNlIGZvciBpbnRlcnByZXRpbmcgYW55JiN4RDsmI3hBOyAgICAgICAgIHJlbGF0aXZlIFVSSXMgaW4gdGhlIHNjb3BlIG9mIHRoZSBlbGVtZW50IG9uIHdoaWNoIGl0JiN4RDsmI3hBOyAgICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgQmFzZSBzcGVjaWZpY2F0aW9uLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGlkICAgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuJiN4RDsmI3hBOyAgICAgICAgIFRoZSB4bWw6aWQgc3BlY2lmaWNhdGlvbiBpcyBub3QgeWV0IGEgVzNDIFJlY29tbWVuZGF0aW9uLCYjeEQ7JiN4QTsgICAgICAgICBidXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgaGVyZSB0byBmYWNpbGl0YXRlIGV4cGVyaW1lbnRhdGlvbiYjeEQ7JiN4QTsgICAgICAgICB3aXRoIHRoZSBtZWNoYW5pc21zIGl0IHByb3Bvc2VzLiAgTm90ZSB0aGF0IGl0IGlzIF9ub3RfIGluY2x1ZGVkJiN4RDsmI3hBOyAgICAgICAgIGluIHRoZSBzcGVjaWFsQXR0cnMgYXR0cmlidXRlIGdyb3VwLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGxhbmcgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgaXMgYSBsYW5ndWFnZSBjb2RlIGZvciB0aGUgbmF0dXJhbCBsYW5ndWFnZSBvZiB0aGUgY29udGVudCBvZiYjeEQ7JiN4QTsgICAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCYjeEQ7JiN4QTsgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLiYjeEQ7JiN4QTsgICYjeEQ7JiN4QTsgICAgc3BhY2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcmI3hEOyYjeEE7ICAgICAgICAgZGlzY2lwbGluZSBpcyBpbnRlbmRlZCBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQ7IGl0cyYjeEQ7JiN4QTsgICAgICAgICB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cyYjeEQ7JiN4QTsgICAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBGYXRoZXIgKGluIGFueSBjb250ZXh0IGF0IGFsbCk6IGRlbm90ZXMgSm9uIEJvc2FrLCB0aGUgY2hhaXIgb2YgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBvcmlnaW5hbCBYTUwgV29ya2luZyBHcm91cC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSAmI3hEOyYjeEE7ICAgICAgICAgdGhlIGZvbGxvd2luZyBkZWNpc2lvbiBvZiB0aGUgVzNDIFhNTCBQbGVuYXJ5IGFuZCAmI3hEOyYjeEE7ICAgICAgICAgWE1MIENvb3JkaW5hdGlvbiBncm91cHM6JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgICAgICAgSW4gYXBwcmVjaWF0aW9uIGZvciBoaXMgdmlzaW9uLCBsZWFkZXJzaGlwIGFuZCBkZWRpY2F0aW9uJiN4RDsmI3hBOyAgICAgICAgICAgICB0aGUgVzNDIFhNTCBQbGVuYXJ5IG9uIHRoaXMgMTB0aCBkYXkgb2YgRmVicnVhcnksIDIwMDAmI3hEOyYjeEE7ICAgICAgICAgICAgIHJlc2VydmVzIGZvciBKb24gQm9zYWsgaW4gcGVycGV0dWl0eSB0aGUgWE1MIG5hbWUmI3hEOyYjeEE7ICAgICAgICAgICAgIHhtbDpGYXRoZXImI3hEOyYjeEE7ICAmI3hEOyYjeEE7VGhpcyBzY2hlbWEgZGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBhbiBhdHRyaWJ1dGUgZ3JvdXAmI3hEOyYjeEE7ICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5JiN4RDsmI3hBOyAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZywgeG1sOnNwYWNlIG9yIHhtbDppZCYjeEQ7JiN4QTsgICAgICAgIGF0dHJpYnV0ZXMgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hJiN4RDsmI3hBOyAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6JiN4RDsmI3hBOyAgICAgICAgJmFtcDtsdDtzY2hlbWEgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2ltcG9ydCBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJnF1b3Q7JiN4RDsmI3hBOyAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMmI3hEOyYjeEE7ICAgICAgICBvciB0aGUgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7dHlwZSAuIC4gLiZhbXA7Z3Q7JiN4RDsmI3hBOyAgICAgICAgIC4gLiAuJiN4RDsmI3hBOyAgICAgICAgICZhbXA7bHQ7YXR0cmlidXRlR3JvdXAgcmVmPSZxdW90O3htbDpzcGVjaWFsQXR0cnMmcXVvdDsvJmFtcDtndDsmI3hEOyYjeEE7ICYjeEQ7JiN4QTsgICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UmI3hEOyYjeEE7ICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzJiN4RDsmI3hBO0luIGtlZXBpbmcgd2l0aCB0aGUgWE1MIFNjaGVtYSBXRydzIHN0YW5kYXJkIHZlcnNpb25pbmcmI3hEOyYjeEE7ICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkLiYjeEQ7JiN4QTsgICBBdCB0aGUgZGF0ZSBvZiBpc3N1ZSBpdCBjYW4gYWxzbyBiZSBmb3VuZCBhdCYjeEQ7JiN4QTsgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuJiN4RDsmI3hBOyAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsJiN4RDsmI3hBOyAgIGluIG9yZGVyIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhNTCBTY2hlbWEmI3hEOyYjeEE7ICAgaXRzZWxmLCBvciB3aXRoIHRoZSBYTUwgbmFtZXNwYWNlIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MJiN4RDsmI3hBOyAgIFNjaGVtYSBvciBYTUwgbmFtZXNwYWNlcyBjaGFuZ2UsIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIHdpbGwgY2hhbmdlJiN4RDsmI3hBOyAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdCYjeEQ7JiN4QTsgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2Qgd2lsbCBub3QgY2hhbmdlLiYjeEQ7JiN4QTsgICIvPgotICA8L2VBbm5vdGF0aW9ucz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb2N1bWVudFJvb3QiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iIi8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJtaXhlZCIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaXhlZCIgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VGZWF0dXJlTWFwRW50cnkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRXaWxkY2FyZCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSI6bWl4ZWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieE1MTlNQcmVmaXhNYXAiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieG1sbnM6cHJlZml4Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhTSVNjaGVtYUxvY2F0aW9uIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhzaTpzY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0YXhvbm9taWVzIiB1cHBlckJvdW5kPSItMiIKLSAgICAgICAgZVR5cGU9IiMvL1RheG9ub21pZXMiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgICAgICByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0idGF4b25vbWllcyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InVkZGlSZWdpc3RyeSIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9VRERJUmVnaXN0cnkiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgICAgICByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0idWRkaVJlZ2lzdHJ5Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGF4b25vbWllcyI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJUYXhvbm9taWVzIi8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50T25seSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0YXhvbm9teSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFQ2xhc3Mgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215IgotICAgICAgICBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InRheG9ub215Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVURESVJlZ2lzdHJ5IiBlU3VwZXJUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IlVERElSZWdpc3RyeSIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVyc2lvbiIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0idmVyc2lvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkaXNjb3ZlcnlVUkwiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImRpc2NvdmVyeVVSTCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwdWJsaWNhdGlvblVSTCIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9BbnlVUkkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0icHVibGljYXRpb25VUkwiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2VjdXJlZERpc2NvdmVyeVVSTCIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9BbnlVUkkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ic2VjdXJlZERpc2NvdmVyeVVSTCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzZWN1cmVkUHVibGljYXRpb25VUkwiCi0gICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InNlY3VyZWRQdWJsaWNhdGlvblVSTCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWZhdWx0TG9naW4iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImRlZmF1bHRMb2dpbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWZhdWx0UGFzc3dvcmQiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImRlZmF1bHRQYXNzd29yZCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0YXhvbm9taWVzIiBlVHlwZT0iIy8vVGF4b25vbWllcyIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ0YXhvbm9taWVzIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODIxZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzExMjIgICAyMDk4NTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA4MDMyNCAgIDIyMDczOSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVGV4dCBEZXNjcmlwdGlvbiBtaXNzaW5nIGZvciBQcm9maWxlIENvbXBsYWluY2Ugbm9kZXMKLSMgMjAwODA0MDMgICAyMjU0ODAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotIyBFeHRlbnNpb24gcG9pbnQgbmFtZXMKLVhQX1dFQl9TRVJWSUNFX0xPQ0FUT1I9V2ViIFNlcnZpY2UgTG9jYXRvcgotWF9XRUJfU0VSVklDRV9MT0NBVE9SX1dPUktTUEFDRT1Xb3Jrc3BhY2UgV2ViIFNlcnZpY2UgTG9jYXRvcgotWF9XRUJfU0VSVklDRV9MT0NBVE9SX0NBVEVHT1JZX1dPUktTUEFDRT1Xb3Jrc3BhY2UgV1NETCBkb2N1bWVudHMKLVhfV1NJTF9DT05URU5UX1RZUEU9V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgRG9jdW1lbnQKLQotTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SPUlXQUIwMDAxRSBVbmFibGUgdG8gbW9uaXRvciBwb3J0IHswfSBvZiB7MX0uCi0KLSMgQ3VycmVudGx5IGtub3duIHB1YmxpYyBVRERJIHJlZ2lzdHJpZXMKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVA9U0FQIFVEREkgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVBfVEVTVD1TQVAgVURESSBUZXN0IFJlZ2lzdHJ5Ci1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFM9WE1ldGhvZHMgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9OVFRDT01NPU5UVCBDb21tdW5pY2F0aW9ucyBSZWdpc3RyeQotCi0KLVBSRUZFUkVOQ0VfU0VSVklDRVBPTElDSUVTX0NPTlRBSU5FUl9XU0lfQ09NUExJQU5DRT1Qcm9maWxlIENvbXBsaWFuY2UKLUxBQkVMX1dTSV9TU0JQPVdTLUkgQlAgMS4xICsgU1NCUCAxLjAKLUxBQkVMX1dTSV9BUD1XUy1JIEFQIDEuMAotCi0jIFNlcnZpY2UgcG9saWN5IGRlc2NyaXB0aW9ucwotREVTQ1JJUFRJT05fV1NJX0NPTVBMSUFOQ0U9V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpIHByb2ZpbGVzIGNvbXBsaWFuY2UgbGV2ZWxzLgotREVTQ1JJUFRJT05fV1NJX0FQPVdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSAxLjBcblwKLVJlcXVpcmVtZW50cyBmb3Igc3VwcG9ydGluZyBpbnRlcm9wZXJhYmxlIFNPQVAgbWVzc2FnZXMgd2l0aCBhdHRhY2htZW50cy1iYXNlZCBXZWIgc2VydmljZXMuCi1ERVNDUklQVElPTl9XU0lfU1NCUD1XUy1JIEJhc2ljIFByb2ZpbGUgMS4xIGFuZCBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wXG5cCi1CYXNpYyBwcm9maWxlIGFuZCByZXF1aXJlbWVudHMgcmVsYXRlZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiBhbiBlbnZlbG9wZSBhbmQgaXRzIHJlcHJlc2VudGF0aW9uIGluIGEgU09BUCBtZXNzYWdlLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNzhhZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsLCB0aG91Z2ggbGlrZWx5IHRvIGJlIHByb21vdGVkIGZvciBwdWJsaWMgdXNlLCBwb3NzaWJseSB3aXRoIGNoYW5nZXMsIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0ibG9jYXRvciIgbmFtZT0iJVhQX1dFQl9TRVJWSUNFX0xPQ0FUT1IiIHNjaGVtYT0ic2NoZW1hL3dlYlNlcnZpY2VMb2NhdG9yLmV4c2QiLz4KLQotICAgPCEtLSBFeHRlbnNpb24gcHJvdmlkaW5nIHdvcmtzcGFjZSBXU0RMIGRpc2NvdmVyeSAtLT4gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciI+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlTG9jYXRvckNhdGVnb3J5Ci0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLmNhdGVnb3J5LndvcmtzcGFjZSIKLSAgICAgICAgICAgIGxhYmVsPSIlWF9XRUJfU0VSVklDRV9MT0NBVE9SX0NBVEVHT1JZX1dPUktTUEFDRSIvPgotCi0gICAgICA8d2ViU2VydmljZUxvY2F0b3IKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV29ya3NwYWNlV1NETExvY2F0b3IiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLldvcmtzcGFjZVdTRExMb2NhdG9yIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5jYXRlZ29yeS53b3Jrc3BhY2UiCi0gICAgICAgICAgICBsYWJlbD0iJVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9XT1JLU1BBQ0UiPgotICAgICAgPC93ZWJTZXJ2aWNlTG9jYXRvcj4KLQotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDwhLS0gRXh0ZW5zaW9uIHRvIGJpbmQgYSBmaWxlIHR5cGUgdG8gV1NJTCBmaWxlcyAtLT4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnRlYW0uY29yZS5maWxlVHlwZXMiPgotICAgICAgPGZpbGVUeXBlcwotICAgICAgICAgICAgdHlwZT0idGV4dCIKLSAgICAgICAgICAgIGV4dGVuc2lvbj0id3NpbCIvPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gRXh0ZW5zaW9uIHRvIGRlZmluZSBhIGNvbnRlbnQgdHlwZSBmb3IgV1NJTCBmaWxlcyAtLT4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50VHlwZXMiPgotICAgICAgPGNvbnRlbnQtdHlwZQotICAgICAgICAgICAgcHJpb3JpdHk9ImhpZ2giCi0gICAgICAgICAgICBuYW1lPSIlWF9XU0lMX0NPTlRFTlRfVFlQRSIKLSAgICAgICAgICAgIGlkPSJ3c2lsc291cmNlIgotICAgICAgICAgICAgYmFzZS10eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIgotICAgICAgICAgICAgZGVmYXVsdC1jaGFyc2V0PSJVVEYtOCIKLSAgICAgICAgICAgIGZpbGUtZXh0ZW5zaW9ucz0id3NpbCIvPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5zZXJ2aWNlcG9saWN5Ij4KLSAgICAgPHNlcnZpY2VQb2xpY3k+Ci0gICAgICAgICA8bG9hZExpc3RlbmVyIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuTWlncmF0ZVdTSXByZWZlcmVuY2VzTG9hZExpc3RlbmVyIi8+Ci0gICAgIDwvc2VydmljZVBvbGljeT4KLSAgIDwvZXh0ZW5zaW9uPiAKLSAgIAotICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLnByb3BlcnR5VGVzdGVycyI+Ci0gICAgPHByb3BlcnR5VGVzdGVyCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2Uud3Muc2VydmljZS5wb2xpY3kiCi0gICAgICB0eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCIKLSAgICAgIG5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2Uud3Muc2VydmljZS5wb2xpY3kiCi0gICAgICBwcm9wZXJ0aWVzPSJwcm9qZWN0SGFzV1NETGZpbGVzIgotICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5XU0RMRmlsZVByb3BlcnR5VGVzdGVyIj4KLSAgICA8L3Byb3BlcnR5VGVzdGVyPgotICA8L2V4dGVuc2lvbj4KLSAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuc2VydmljZXBvbGljeSI+Ci0gICAgIDxzZXJ2aWNlUG9saWN5PgotICAgICAgIDxlbmFibGVtZW50PgotICAgICAgICAgICA8b3I+Ci0gICAgICAgICAgICAgPHRlc3QgcHJvcGVydHk9Im9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByb2plY3RGYWNldCIKLSAgICAgICAgICAgICAgICAgICB2YWx1ZT0ianN0LndlYiIvPgotICAgICAgICAgICAgIDx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcm9qZWN0RmFjZXQiCi0gICAgICAgICAgICAgICAgICAgdmFsdWU9ImpzdC5lamIiLz4KLSAgICAgICAgICAgICA8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2Uud3Muc2VydmljZS5wb2xpY3kucHJvamVjdEhhc1dTRExmaWxlcyIvPgotICAgICAgICAgICA8L29yPgotICAgICAgIDwvZW5hYmxlbWVudD4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAiPgotICAgICAgICAgPCEtLSBDT05URVhUX0lEIFBTUFcwMDAxIGZvciB0aGUgU2VydmljZSBQb2xpY2llcyBXUy1JIFByZWZlcmVuY2VzIGNhdGVnb3J5IC0tPgotICAgICAgICAgPGRlc2NyaXB0b3IgbG9uZ05hbWU9IiVQUkVGRVJFTkNFX1NFUlZJQ0VQT0xJQ0lFU19DT05UQUlORVJfV1NJX0NPTVBMSUFOQ0UiIGljb25QYXRoPSJpY29ucy9mdWxsL29iajE2L3dzaWNhdC5naWYiIGNvbnRleHRIZWxwSWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5QU1BXMDAwMSIKLSAgICAgICAgIAlkZXNjcmlwdGlvbj0iJURFU0NSSVBUSU9OX1dTSV9DT01QTElBTkNFIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgPHBvbGljeSBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaWFwIiBwYXJlbnRQb2xpY3lJZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wIiBlbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuc3VnZ2VzdGlvbkVudW0iIGRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCI+Ci0gICAgICAgICA8IS0tIENPTlRFWFRfSUQgUFNQVzAwMDIgZm9yIHRoZSBTZXJ2aWNlIFBvbGljaWVzIFdTLUkgQVAgMS4wIFByZWZlcmVuY2UgLS0+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBsb25nTmFtZT0iJUxBQkVMX1dTSV9BUCIgaWNvblBhdGg9Imljb25zL2Z1bGwvb2JqMTYvd3NpY2F0X2NoaWxkLmdpZiIgY29udGV4dEhlbHBJZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLlBTUFcwMDAyIgotICAgICAgICAgCWRlc2NyaXB0aW9uPSIlREVTQ1JJUFRJT05fV1NJX0FQIi8+Ci0gICAgICAgICA8cmVsYXRpb25zaGlwIGVudW1MaXN0PSJvcmcuZWNsaXBzZS53c3Quc3VnLnN1Z2dlc3QiPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3Npc3NicCIKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0IG9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIvPgotICAgICAgICAgPC9yZWxhdGlvbnNoaXA+Ci0gICAgICAgICA8cmVsYXRpb25zaGlwIGVudW1MaXN0PSJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3Npc3NicCIKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIi8+Ci0gICAgICAgICA8L3JlbGF0aW9uc2hpcD4KLSAgICAgICAgIDxzdGF0ZSBrZXk9ImRlZmF1bHRQcm90b2NvbCIgdmFsdWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3Npc3NicCIgcGFyZW50UG9saWN5SWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcCIgZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LnN1Z2dlc3Rpb25FbnVtIiBkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3Quc3VnLnN1Z2dlc3QiPgotICAgICAgICAgPCEtLSBDT05URVhUX0lEIFBTUFcwMDAzIGZvciB0aGUgU2VydmljZSBQb2xpY2llcyBXUy1JIFNTQlAgMS4wIFByZWZlcmVuY2UgLS0+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBsb25nTmFtZT0iJUxBQkVMX1dTSV9TU0JQIiBpY29uUGF0aD0iaWNvbnMvZnVsbC9vYmoxNi93c2ljYXRfY2hpbGQuZ2lmIiBjb250ZXh0SGVscElkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuUFNQVzAwMDMiCi0gICAgICAgICAJZGVzY3JpcHRpb249IiVERVNDUklQVElPTl9XU0lfU1NCUCIvPgotICAgICAgICAgPHN0YXRlIGtleT0iZGVmYXVsdFByb3RvY29sIiB2YWx1ZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIvPgotICAgICAgIDwvcG9saWN5PgotICAgICA8L3NlcnZpY2VQb2xpY3k+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NjaGVtYS93ZWJTZXJ2aWNlTG9jYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc2NoZW1hL3dlYlNlcnZpY2VMb2NhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTdkMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc2NoZW1hL3dlYlNlcnZpY2VMb2NhdG9yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MiIGlkPSJ3ZWJTZXJ2aWNlTG9jYXRvciIgbmFtZT0iV2ViIFNlcnZpY2UgTG9jYXRvciIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwcm92aWRlZCB0byByZWdpc3RlciBsb2NhdG9ycyB0aGF0IGV4dGVuZCBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yLgotICAgICAgICAgVGhlc2UgbG9jYXRvcnMgYXJlIHVzZWQgYnkgV2ViU2VydmljZUZpbmRlciB0byBsb2NhdGUgV2ViIHNlcnZpY2VzIGZvciB0aGUgcHVycG9zZSBvZiBXZWIgc2VydmljZSBkaXNjb3ZlcnkuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YWxsPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlTG9jYXRvciIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlTG9jYXRvckNhdGVnb3J5IiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L2FsbD4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0id2ViU2VydmljZUxvY2F0b3IiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgV2ViIFNlcnZpY2UgTG9jYXRvci4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUgZm9yIHRoZSBsb2NhdG9yIGNsYXNzIHdoaWNoIGV4dGVuZHMgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvci4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIHNob3J0IGxhYmVsIHRvIGlkZW50aWZ5IHRoZSBXZWIgU2VydmljZSBMb2NhdG9yLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcHVycG9zZSBvZiB0aGUgV2ViIFNlcnZpY2UgTG9jYXRvci4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imljb24iIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgYW4gaWNvbiB0aGF0IHJlcHJlc2VudHMgdGhlIFdlYiBTZXJ2aWNlIExvY2F0b3IuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2F0ZWdvcnkiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgYSBjYXRlZ29yeSB0byB3aGljaCB0aGUgV2ViIFNlcnZpY2UgTG9jYXRvciBzaG91bGQgYmVsb25nLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlTG9jYXRvckNhdGVnb3J5Ij4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNhdGVnb3J5IG9mIFdlYiBTZXJ2aWNlIExvY2F0b3JzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgc2hvcnQgbGFiZWwgZm9yIHRoZSBjYXRlZ29yeSBvZiBXZWIgU2VydmljZSBMb2NhdG9ycy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNhdGVnb3J5IG9mIFdlYiBTZXJ2aWNlIExvY2F0b3JzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWNvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbGx5LCBhbiBpY29uIHRoYXQgcmVwcmVzZW50cyB0aGUgY2F0ZWdvcnkgb2YgV2ViIFNlcnZpY2UgTG9jYXRvcnMuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2F0ZWdvcnkiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgYSBwYXJlbnQgY2F0ZWdvcnkgdW5kZXIgd2hpY2ggdGhlIFdlYiBTZXJ2aWNlIExvY2F0b3IKLSAgICAgICAgICAgICAgICAgIGNhdGVnb3J5IHNob3VsZCBiZSBncm91cGVkLiBJZiBhYnNlbnQsIHRoZSBjYXRlZ29yeSBpcyBjb25zaWRlcmVkCi0gICAgICAgICAgICAgICAgICB0byBiZSBhIHJvb3QgY2F0ZWdvcnkuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBFeHRlbmRlcnMgc2hvdWxkIGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvciZsdDsvY29kZSZndDsuICBUaGUgV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSB1c2VzIHRoaXMgZXh0ZW5zaW9uIHBvaW50IHRvIHJldHJpZXZlIGFsbCBsb2NhdG9ycy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvV3N0V1NQbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvV3N0V1NQbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgwMzY2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL1dzdFdTUGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA0MjAgICAxMjA3MTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNzAxMjUgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSMgMjAwNzA0MDkgICAxODE2MzUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSMgMjAwODA0MDMgICAyMjU0ODAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBHZXRNb25pdG9yQ29tbWFuZAotIwotTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SPUlXQUIwMDAxRSBVbmFibGUgdG8gbW9uaXRvciBwb3J0IHswfSBvZiB7MX0uCi0KLSMKLSMgV1NETFV0aWxpdHkKLSMKLU1TR19VTkFCTEVfVE9fUkVTT0xWRV9IVFRQPUNvdWxkIG5vdCByZXNvbHZlIHNlcnZpY2UgZGVmaW5pdGlvbiBodHRwOi8vezB9LiAgU2VydmljZSBtYXkgbm90IGJlIHJ1bm5pbmcgb24gdGhlIHNlcnZlci4KLU1TR19VTkFCTEVfVE9fUkVTT0xWRV9QTEFURk9STV9VUkk9Q291bGQgbm90IHBhcnNlIHBsYXRmb3JtOi9yZXNvdXJjZXswfS4KLQotIwotIyBXU0lDb21wbGlhbmNlVXRpbHMKLSMKLUlHTk9SRV9MQUJFTD1JZ25vcmUKLUlHTk9SRV9ERVNDUklQVElPTj1JZ25vcmUgdGhlIFdTLUkgbm9uLWNvbXBsaWFuY2UgYW5kIGNvbnRpbnVlCi1JR05PUkVfQUxMX0xBQkVMPUlnbm9yZSBBbGwKLUlHTk9SRV9BTExfREVTQ1JJUFRJT049QWx3YXlzIGlnbm9yZSB0aGUgV1MtSSBub24tY29tcGxpYW5jZSBhbmQgY29udGludWUKLUNBTkNFTF9MQUJFTD1DYW5jZWwKLUNBTkNFTF9ERVNDUklQVElPTj1DYW5jZWwKLQotIwotIwlXUy1JIENvbXBsaWFuY2UgTWVzc2FnZXMKLSMKLVdTSV9TU0JQX0VSUk9SPVlvdSBoYXZlIG1hZGUgYSBjaG9pY2UgdGhhdCBtYXkgcmVzdWx0IGluIGEgV2ViIHNlcnZpY2UgdGhhdCBkb2VzIG5vdCBjb21wbHkgd2l0aCB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSBhbmQgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMC4gWW91ciBjdXJyZW50IFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlIGlzIHNldCB0byByZXF1aXJlIGNvbXBsaWFuY2UuCi1XU0lfU1NCUF9XQVJOSU5HPVlvdSBoYXZlIG1hZGUgYSBjaG9pY2UgdGhhdCBtYXkgcmVzdWx0IGluIGEgV2ViIHNlcnZpY2UgdGhhdCBkb2VzIG5vdCBjb21wbHkgd2l0aCB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSBhbmQgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMC4gRG8geW91IHdpc2ggdG8gaWdub3JlIHRoaXMgd2FybmluZyBhbmQgY29udGludWU/Ci1XU0lfU1NCUF9JTkNPTVBMSUFOVF9SVU5USU1FPVRoZSBzZWxlY3RlZCBXZWIgU2VydmljZSBydW50aW1lIGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUgMS4xIGFuZCBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wLgotV1NJX0FQX0VSUk9SPVlvdSBoYXZlIG1hZGUgYSBjaG9pY2UgdGhhdCBtYXkgcmVzdWx0IGluIGEgV2ViIHNlcnZpY2UgdGhhdCBkb2VzIG5vdCBjb21wbHkgd2l0aCB0aGUgV1MtSSBBdHRhY2htZW50IFByb2ZpbGUgMS4wLiBZb3VyIGN1cnJlbnQgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2UgaXMgc2V0IHRvIHJlcXVpcmUgY29tcGxpYW5jZS4KLVdTSV9BUF9XQVJOSU5HPVlvdSBoYXZlIG1hZGUgYSBjaG9pY2UgdGhhdCBtYXkgcmVzdWx0IGluIGEgV2ViIHNlcnZpY2UgdGhhdCBkb2VzIG5vdCBjb21wbHkgd2l0aCB0aGUgV1MtSSBBdHRhY2htZW50IFByb2ZpbGUgMS4wLiBEbyB5b3Ugd2lzaCB0byBpZ25vcmUgdGhpcyB3YXJuaW5nIGFuZCBjb250aW51ZT8KLVdTSV9BUF9JTkNPTVBMSUFOVF9SVU5USU1FPVRoZSBzZWxlY3RlZCBXZWIgU2VydmljZSBydW50aW1lIGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBXUy1JIEF0dGFjaG1lbnQgUHJvZmlsZSAxLjAuCi0KLQotIwotIyBXU0RMQ29waWVyIE1lc3NhZ2VzCi0jCi1NU0dfRVJST1JfQ09QWV9XU0RMPUZhaWxlZCB0byBjb3B5IFdTREwgInswfSIgdG8gInsxfSIuCi1NU0dfRVJST1JfVEFSR0VUX0ZPTERFUl9OT1RfU1BFQ0lGSUVEPUEgdGFyZ2V0IGZvbGRlciB3YXMgbm90IHNwZWNpZmllZC4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvV3N0V1NQbHVnaW5NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9Xc3RXU1BsdWdpbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYjIzODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9Xc3RXU1BsdWdpbk1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjAgICAxMjA3MTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwMTI1ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA3MDQwOSAgIDE4MTYzNSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NETENvcGllciB1dGlsaXR5IHNob3VsZCBjcmVhdGUgdGFyZ2V0IGZvbGRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXc3RXU1BsdWdpbk1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW4iOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgV3N0V1NQbHVnaW5NZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19VTkFCTEVfVE9fUkVTT0xWRV9QTEFURk9STV9VUkk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1VOQUJMRV9UT19SRVNPTFZFX0hUVFA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUdOT1JFX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElHTk9SRV9ERVNDUklQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJR05PUkVfQUxMX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElHTk9SRV9BTExfREVTQ1JJUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0FOQ0VMX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENBTkNFTF9ERVNDUklQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0lfU1NCUF9FUlJPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0lfU1NCUF9XQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTSV9TU0JQX0lOQ09NUExJQU5UX1JVTlRJTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NJX0FQX0VSUk9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTSV9BUF9XQVJOSU5HOwkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0lfQVBfSU5DT01QTElBTlRfUlVOVElNRTsKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ09QWV9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9UQVJHRVRfRk9MREVSX05PVF9TUEVDSUZJRUQ7Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXc3RXU1BsdWdpbk1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9CdW5kbGVVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vQnVuZGxlVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc0NzE2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9CdW5kbGVVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAxICAgMTg0NTA1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNiAgIDIyNDE0OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIHNlcnZpY2Ugc2NlbmFyaW9zIGJyb2tlIGluIGxhdGVzdCBidWlsZHMgd2l0aCBFcXVpbm94IHAyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5WZXJzaW9uOwotCi1wdWJsaWMgY2xhc3MgQnVuZGxlVXRpbHMKLXsKLQlzdGF0aWMgcHVibGljIFVSTCBnZXRVUkxGcm9tQnVuZGxlKCBTdHJpbmcgYnVuZGxlSWQsIFN0cmluZyBwYXRoICkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotCXsKLQkJQnVuZGxlICAgICAgYnVuZGxlICAgICA9IFBsYXRmb3JtLmdldEJ1bmRsZSggYnVuZGxlSWQgKTsKLQkJVVJMICAgICAgICAgaW5zdGFsbFVSTCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgICAgICAgICBmaWxlVVJMICAgID0gbmV3IFVSTChpbnN0YWxsVVJMLCBwYXRoICk7Ci0KLQkJcmV0dXJuIGZpbGVVUkw7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGJ1bmRsZUlkCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBwYXRoIGZvciB0aGUgSmFycmVkIHBsdWdpbi4gIFJldHVybnMgbnVsbCBpZiBwYXRoIG5vdCBmb3VuZC4KLQkgKi8KLQlzdGF0aWMgcHVibGljIElQYXRoIGdldEphcnJlZFBsdWdpblBhdGgoU3RyaW5nIGJ1bmRsZUlkKSB7Ci0JCUlQYXRoIHJlc3VsdCA9IG51bGw7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlSWQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJRmlsZSBmaWxlID0gRmlsZUxvY2F0b3IuZ2V0QnVuZGxlRmlsZShidW5kbGUpOwotCQkJCXJlc3VsdCA9IG5ldyBQYXRoKGZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpKTsKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gaWdub3JlLCByZXR1cm4gbnVsbAotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGJ1bmRsZUlkCi0JICogQHJldHVybiBUaGUgdmVyc29pbiBvZiB0aGUgcGx1Z2luIHdpdGggdGhhdCBidW5kbGUgSUQKLQkgKi8KLQlzdGF0aWMgcHVibGljIFZlcnNpb24gZ2V0VmVyc2lvbihTdHJpbmcgYnVuZGxlSWQpIHsKLQkJVmVyc2lvbiByZXN1bHQgPSBudWxsOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZUlkKTsKLQkJU3RyaW5nIHZlcnNpb25TdHJpbmcgPSAoU3RyaW5nKSBidW5kbGUuZ2V0SGVhZGVycygpLmdldCgiQnVuZGxlLVZlcnNpb24iKTsKLQkJcmVzdWx0ID0gbmV3IFZlcnNpb24odmVyc2lvblN0cmluZyk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9IVFRQVXRpbGl0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vSFRUUFV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY1MTEyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9IVFRQVXRpbGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTI0ICAgMTY3NDg3IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5IdHRwVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKLQotcHVibGljIGNsYXNzIEhUVFBVdGlsaXR5IHsKLQotCXB1YmxpYyBTdHJpbmcgaGFuZGxlUmVkaXJlY3QoU3RyaW5nIHVybFN0cmluZyl7Ci0JCVVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JCVN0cmluZyB1cmxSZWRpcmVjdCA9IHVybFN0cmluZzsKLQkJaW50IHRpbWUgPSAwOwotCQl3aGlsZSh1cmxSZWRpcmVjdCE9IG51bGwpewotCQkJaWYgKHRpbWUgPT0gNikgcmV0dXJuIHVybFJlZGlyZWN0OwotCQkJdHJ5ewotCQkJCVVSTCB1cmwgPSBuZXcgVVJMKHVybFJlZGlyZWN0KTsKLQkJCQljb25uID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0JCQl9Y2F0Y2goRXhjZXB0aW9uIGV4Yyl7Ci0JCQkJcmV0dXJuIHVybFJlZGlyZWN0OwotCQkJfQotCQkJaWYgKGNvbm4gaW5zdGFuY2VvZiBIdHRwVVJMQ29ubmVjdGlvbikKLQkJCQl7Ci0JCQkJSHR0cFVSTENvbm5lY3Rpb24gaHR0cCA9IChIdHRwVVJMQ29ubmVjdGlvbikgY29ubjsKLQkJCQlodHRwLnNldEluc3RhbmNlRm9sbG93UmVkaXJlY3RzKGZhbHNlKTsKLQkgICAgICAgICAKLQkJCQl0cnl7Ci0JCQkJCWludCBjb2RlID0gaHR0cC5nZXRSZXNwb25zZUNvZGUoKTsKLQkJCQkJaWYgKGNvZGUgPj0gMzAwICYmIGNvZGUgPD0gMzA3ICYmIGNvZGUgIT0gMzA2ICYmCi0JICAgICAgICAJCQkgY29kZSAhPSBIdHRwVVJMQ29ubmVjdGlvbi5IVFRQX05PVF9NT0RJRklFRCkKLQkJCQkJewotCQkJCQkJU3RyaW5nIHVybFJlZGlyZWN0MiA9IGNoYW5nZVNsYXNoKGh0dHAuZ2V0SGVhZGVyRmllbGQoIkxvY2F0aW9uIikpOwotCSAgICAgICAgICAgCSAJCWlmICh1cmxSZWRpcmVjdDIgPT0gbnVsbCB8fCB1cmxSZWRpcmVjdC5lcXVhbHModXJsUmVkaXJlY3QyKSkgcmV0dXJuIHVybFJlZGlyZWN0OwotCSAgICAgICAgICAJIAkJZWxzZSB1cmxSZWRpcmVjdCA9IHVybFJlZGlyZWN0MjsKLQkJCQkJfWVsc2UgcmV0dXJuIHVybFJlZGlyZWN0OwotCQkJCQotCQkJCQotCQkJCX1jYXRjaChJT0V4Y2VwdGlvbiBleGMpewotCQkJCQlyZXR1cm4gdXJsUmVkaXJlY3Q7IAotCQkJCX0KLQkJCX0KLQkJCWVsc2UgcmV0dXJuIHVybFJlZGlyZWN0OwotCQkJdGltZSsrOwotCQl9Ci0JCXJldHVybiB1cmxTdHJpbmc7Ci0JfQotCi0JcHVibGljIFN0cmluZyBjaGFuZ2VTbGFzaChTdHJpbmcgdXJsKXsKLQkJU3RyaW5nIHRlbXAgPSAiIjsKLQkJdHJ5ewotCQkJdGVtcCA9IHVybC5yZXBsYWNlKCdcXCcsICcvJyk7Ci0JCX1jYXRjaChFeGNlcHRpb24gZXhjKXsKLQkJCXJldHVybiB1cmw7Ci0JCX0KLQkJcmV0dXJuIHRlbXA7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vTGl2ZVdTRExGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0xpdmVXU0RMRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGM2MGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vTGl2ZVdTRExGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBMaXZlV1NETEZpbHRlciBleHRlbmRzIFRocmVhZAotewotICBwcml2YXRlIFN0cmluZyB3c2RsVVJMXzsKLSAgcHJpdmF0ZSBib29sZWFuIGZpbmlzaF87Ci0gIHByaXZhdGUgYm9vbGVhbiBsaXZlXzsKLQotICBwdWJsaWMgTGl2ZVdTRExGaWx0ZXIoU3RyaW5nIHdzZGxVUkwpCi0gIHsKLSAgICB3c2RsVVJMXyA9IHdzZGxVUkw7Ci0gICAgZmluaXNoXyA9IGZhbHNlOwotICAgIGxpdmVfID0gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdTRExVUkwoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxVUkxfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNGaW5pc2goKQotICB7Ci0gICAgcmV0dXJuIGZpbmlzaF87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1dTRExMaXZlKCkKLSAgewotICAgIHJldHVybiBsaXZlXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBsaXZlXyA9IHZhbGlkYXRlV1NETCgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIlRocm93aW5nIGV4Y2VwdGlvbiAiICsgdC5nZXRNZXNzYWdlKCkpOwotICAgICAgbGl2ZV8gPSBmYWxzZTsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIGZpbmlzaF8gPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB2YWxpZGF0ZVdTREwoKSB0aHJvd3MgV1NETEV4Y2VwdGlvbiwgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgewotICAJV2ViU2VydmljZXNQYXJzZXJFeHQgcGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBwYXJzZXIuZ2V0V1NETERlZmluaXRpb25WZXJib3NlKHdzZGxVUkxfKTsKLSAgCVN5c3RlbS5vdXQucHJpbnRsbigid3NkbFVSTF8gIiArIHdzZGxVUkxfLnRvU3RyaW5nKCkpOwotICAgIE1hcCBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKTsKLSAgICBJdGVyYXRvciBzZXJ2aWNlSXRlcmF0b3IgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2VydmljZUl0ZXJhdG9yICIgKyBzZXJ2aWNlSXRlcmF0b3IudG9TdHJpbmcoKSk7Ci0gICAgd2hpbGUgKHNlcnZpY2VJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upc2VydmljZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIE1hcCBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKTsKLSAgICAgIEl0ZXJhdG9yIHBvcnRJdGVyYXRvciA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAocG9ydEl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpcG9ydEl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBJdGVyYXRvciBleHRlbnNpYmlsaXR5RWxlbWVudHNJdGVyYXRvciA9IGV4dGVuc2liaWxpdHlFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIGlmICgoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykgfHwgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9XU0RMVXRpbGl0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vV1NETFV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxNjBjNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9XU0RMVXRpbGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotLyoqCi0gKiBVdGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBXU0RMIGZpbGUgcmVzb3VyY2UuCi0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgV1NETFV0aWxpdHkgewotCi0JcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbl8gPSBudWxsOwotCXByb3RlY3RlZCBJUmVzb3VyY2UgcmVzb3VyY2VfID0gbnVsbDsKLQlwcm90ZWN0ZWQgU3RyaW5nIHNlcnZpY2VOYW1lXyA9ICIiOwotCXByb3RlY3RlZCBVUkwgdXJsXyA9IG51bGw7Ci0JCi0JcHVibGljIFdTRExVdGlsaXR5KElSZXNvdXJjZSByZXMpCi0JewotIAkJc3VwZXIoKTsKLQkJcmVzb3VyY2VfID0gcmVzOwotCQlidWlsZERlZmluaXRpb24oKTsJCQotCX0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBidWlsZERlZmluaXRpb24oKQotCXsJCQotCQlpZiAocmVzb3VyY2VfLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLQkgICAgeyAgICAgICAgCi0JICAgICAgICBTdHJpbmcgZXh0ID0gcmVzb3VyY2VfLmdldEZpbGVFeHRlbnNpb24oKTsKLQkgICAgICAgIFN0cmluZyByZXNQYXRoID0gcmVzb3VyY2VfLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLQkgICAgICAgIGlmIChleHQgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkJICAgICAgCQotCQkgICAgICAgIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlcigpOwotCQkgICAgICAJCQkgICAgICAJCi0JCSAgICAgIAl0cnkgewotCQkgICAgICAJCWRlZmluaXRpb25fID0gcGFyc2VyLmdldFdTRExEZWZpbml0aW9uKCJwbGF0Zm9ybToiICsgcmVzUGF0aCk7Ci0JCSAgICAgIAkgICBpZiAoZGVmaW5pdGlvbl8gPT0gbnVsbCl7CQkgICAgICAJCSAgIAotCQkgICAgICAJCSB0aHJvdyBuZXcgRXhjZXB0aW9uKE5MUy5iaW5kKFdzdFdTUGx1Z2luTWVzc2FnZXMuTVNHX1VOQUJMRV9UT19SRVNPTFZFX1BMQVRGT1JNX1VSSSwgcmVzUGF0aCkpOwkJICAgICAgCQkgCi0JCSAgICAgIAkgICB9Ci0JCSAgICAgIAl9Ci0JCSAgICAgIAljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkgICAgICAJCXJldHVybiBmYWxzZTsKLQkJICAgICAgCX0KLQkgICAgICAgIH0KLQkgICAgICAgIGVsc2UgaWYgKHJlc1BhdGguaW5kZXhPZignPycpID4gMCkgIC8vZGVwbG95ZWQgcmVzb3VyY2UKLQkgICAgICAgIHsKLQkgICAgICAgIAlXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXIoKTsKLQkJICAgICAgCQkJICAgICAgCQotCQkgICAgICAJdHJ5IHsKLQkJICAgICAgCQlkZWZpbml0aW9uXyA9IHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvbigiaHR0cDoiICsgcmVzUGF0aCk7Ci0JCSAgICAgIAkgICBpZiAoZGVmaW5pdGlvbl8gPT0gbnVsbCl7Ci0JCSAgICAgIAkJIHRocm93IG5ldyBFeGNlcHRpb24oTkxTLmJpbmQoV3N0V1NQbHVnaW5NZXNzYWdlcy5NU0dfVU5BQkxFX1RPX1JFU09MVkVfSFRUUCwgcmVzUGF0aCkpOwkJICAgICAgCQkKLQotCQkgICAgICAJICAgfQotCQkgICAgICAJfQotCQkgICAgICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJICAgICAgCQlyZXR1cm4gZmFsc2U7Ci0JCSAgICAgIAl9Ci0JICAgICAgICB9Ci0JICAgIH0KLQkJc2VydmljZU5hbWVfID0gIiI7CQkKLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCS8qKgotCSAqIERldGVybWluZXMgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgV1NETCBmaWxlCi0JICogCi0JICogQHBhcmFtIHJlc291cmNlIFRoZSB3b3Jrc3BhY2UgcmVzb3VyY2UgZm9yIHRoZSBXU0RMIGZpbGUKLQkgKiBAcmV0dXJuIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgdmFsdWUgb2YgdGhlIG5hbWUgYXR0cmlidXRlIG9mIHRoZSBzZXJ2aWNlIGVsZW1lbnQgCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTmFtZSgpCi0JewotCQlpZiAoc2VydmljZU5hbWVfLmVxdWFscygiIikpCi0JCXsKLQkJCWlmIChkZWZpbml0aW9uXyAhPSBudWxsKQotCQkJewotCQkJCSAgIE1hcCBzZXJ2aWNlc01hcCA9IGRlZmluaXRpb25fLmdldFNlcnZpY2VzKCk7ICAvL2p2aCAtIG5lZWQgdG8gaGFuZGxlIG51bGwgZGVmaW5pdGlvbiBoZXJlLi4uLgotCQkJICAJICAgT2JqZWN0W10gc2VydmljZXMgPSBzZXJ2aWNlc01hcC52YWx1ZXMoKS50b0FycmF5KCk7Ci0JCQkgIAkgICAKLQkJCSAgCSAgIC8vIFRPRE86IGhlcmUgY2FuIGRldGVjdCBpZiBubyBzZXJ2aWNlIHRhZyAtIHNlbmQgYXBwcm9wcmlhdGUgbWVzc2FnZQotCQkJICAJICAgLy8gVE9ETzogd2hhdCBpZiA+IDEgc2VydmljZSBkZWZpbmVkIGluIHRoZSBXU0RMPwotCQkJICAJICAgLy8gZm9yIG5vdyByZXR1cm4gdGhlIGZpcnN0IHNlcnZpY2UgbmFtZSBmb3VuZC4uLgotCQkJICAJICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykgewotCQkJCQkgICBTZXJ2aWNlIHMgPSAoU2VydmljZSlzZXJ2aWNlc1tpXTsKLQkJCQkJICAgU3RyaW5nIHFTdHJpbmcgPSBzLmdldFFOYW1lKCkudG9TdHJpbmcoKTsKLQkJCQkJICAgCi0JCQkJCSAgIC8vZ2V0IG5hbWUgb25seSBmcm9tIHF1YWxpZmllZCBzdHJpbmcKLQkJCQkJICAgaW50IGluZGV4MSA9IHFTdHJpbmcuaW5kZXhPZigifSIpKzE7ICAvLyROT04tTkxTLTEkCi0JCQkJCSAgIGludCBpbmRleDIgPSBxU3RyaW5nLmxlbmd0aCgpOwotCQkJCQkgICAKLQkJCQkJICAgc2VydmljZU5hbWVfID0gcVN0cmluZy5zdWJzdHJpbmcoaW5kZXgxLCBpbmRleDIpOwkJCQkgICAKLQkJCSAgCSAgIH0gIAkKLQkJCX0JCQkJICAKLQkJfQotCSAgCXJldHVybiBzZXJ2aWNlTmFtZV87Ci0JfQotCQotCXB1YmxpYyBVUkwgZ2V0V1NETEFkZHJlc3MoKSAKLSAgICB7Ci0JICAgaWYgKHVybF8gPT0gbnVsbCkKLQkgICB7CSAgIAotCSAgICAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSBudWxsOwotCSAgICAgICBpZiAoZGVmaW5pdGlvbl8gIT0gbnVsbCkKLQkgICAgICAgewotCSAgICAJICAgTWFwIHNlcnZpY2VzTWFwID0gZGVmaW5pdGlvbl8uZ2V0U2VydmljZXMoKTsKLQkJICAJICAgT2JqZWN0W10gc2VydmljZXMgPSBzZXJ2aWNlc01hcC52YWx1ZXMoKS50b0FycmF5KCk7Ci0JCSAgCSAgIAotCQkgIAkgICAvLyBUT0RPOiBoZXJlIGNhbiBkZXRlY3QgaWYgbm8gc2VydmljZSB0YWcgLSBzZW5kIGFwcHJvcHJpYXRlIG1lc3NhZ2UKLQkJICAJICAgLy8gVE9ETzogd2hhdCBpZiA+IDEgc2VydmljZSBkZWZpbmVkIGluIHRoZSBXU0RMPwotCQkgIAkgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJICAgU2VydmljZSBzID0gKFNlcnZpY2Upc2VydmljZXNbaV07Ci0JCQkJICAgTWFwIHBvcnRzTWFwID0gcy5nZXRQb3J0cygpOwotCQkJCSAgIE9iamVjdFtdIHBvcnRzID0gcG9ydHNNYXAudmFsdWVzKCkudG9BcnJheSgpOwotCQkKLQkJCQkgICAvLyBUT0RPOiBoZXJlIGNhbiBkZXRlY3QgaWYgPiAxIHBvcnQgZm9yIHRoZSBzZXJ2aWNlIC0gZGV0ZXJtaW5lIGhvdyB0byBoYW5kbGUKLQkJCQkgICBmb3IgKGludCBqID0gMDsgaiA8IHBvcnRzLmxlbmd0aDsgaisrKSB7Ci0JCQkJCQlQb3J0IHAgPSAoUG9ydClwb3J0c1tqXTsKLQkJCQkJCUxpc3QgZXh0TGlzdCA9IHAuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0JCQkJCQkKLQkJCQkJCWZvciAoaW50IGsgPSAwOyBqIDwgZXh0TGlzdC5zaXplKCk7IGorKyl7Ci0JCQkJCQkgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dExpc3QuZ2V0KGspOwotCQkJCQkJICAgICAgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLQkJCQkJCSAgICAgIHsgIAotCQkJCQkJICAgICAgICBsb2NhdGlvblVSSSA9ICgoU09BUEFkZHJlc3MpZXh0RWxlbWVudCkuZ2V0TG9jYXRpb25VUkkoKTsKLQkJCQkJCSAgICAgIH0KLQkJCQkJCSAgICAgIGVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykKLQkJCQkJCSAgICAgICB7Ci0JCQkJCQkgICAgICAgIGxvY2F0aW9uVVJJID0gKChIVFRQQWRkcmVzcylleHRFbGVtZW50KS5nZXRMb2NhdGlvblVSSSgpOwkJCQkJCSAgICAgICAgCi0JCQkJCQkgICAgICB9Ci0JCQkJCQkgICAgICBlbHNlCi0JCQkJCQkgICAgICB7Ci0JCQkJCQkgICAgCSAgLy9UT0RPOiBpZiBub3QgU09BUCBvciBIVFRQIC0gaG93IGRvIHdlIHdhbnQgdG8gaGFuZGxlIGl0Li4uIAotCQkJCQkJICAgICAgfQotCQkJCQkJIH0JCQkJCQotCQkJCSAgIH0KLQkJICAJICAgfSAgCQkgICAgCQotCQkgIAkgCi0JCQkgICAgdHJ5IHsKLQkJCSAgICAgICAgIHVybF8gPSBuZXcgVVJMKGxvY2F0aW9uVVJJICsgIj8iICsgcmVzb3VyY2VfLmdldEZpbGVFeHRlbnNpb24oKSk7CSAgICAgICAgIAotCQkJICAgIH0KLQkJCSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1hbEV4Yyl7fQotICAgICAgICAgICAgfQkgIAkJICAgICAgCi0JICAgIH0KLQkgICByZXR1cm4gdXJsXzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGEvTGFiZWxzQW5kSWRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGEvTGFiZWxzQW5kSWRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MjhkNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhL0xhYmVsc0FuZElkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YTsKLQotcHVibGljIGNsYXNzIExhYmVsc0FuZElkcwotewotICBwcml2YXRlIFN0cmluZ1tdIGxhYmVsc187Ci0gIHByaXZhdGUgU3RyaW5nW10gaWRzXzsKLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGlkc18uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0SWRzXygpCi0gIHsKLSAgICByZXR1cm4gaWRzXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGlkc18gVGhlIGlkc18gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWRzXyhTdHJpbmdbXSBpZHNfKQotICB7Ci0gICAgdGhpcy5pZHNfID0gaWRzXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBsYWJlbHNfLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldExhYmVsc18oKQotICB7Ci0gICAgcmV0dXJuIGxhYmVsc187Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBsYWJlbHNfIFRoZSBsYWJlbHNfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExhYmVsc18oU3RyaW5nW10gbGFiZWxzXykKLSAgewotICAgIHRoaXMubGFiZWxzXyA9IGxhYmVsc187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljQ29ubmVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNDb25uZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZjEyZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNDb25uZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1wdWJsaWMgY2xhc3MgQmFzaWNDb25uZWN0aW9uIGltcGxlbWVudHMgQ29ubmVjdGlvbgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgUmVsIGZSZWw7Ci0gIHByaXZhdGUgRWxlbWVudCBmRWxlbWVudDsKLSAgcHJpdmF0ZSBDb25uZWN0aW9uIGZPcHBvc2luZ0Nvbm5lY3Rpb247Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1VUQk9VTkQgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkJPVU5EID0gMTsKLQotICBwdWJsaWMgc3RhdGljIENvbm5lY3Rpb25bXSBjcmVhdGVQYWlyICggUmVsIG91dGJvdW5kUmVsLCBFbGVtZW50IHRhcmdldEVsZW1lbnQsIFJlbCBpbmJvdW5kUmVsLCBFbGVtZW50IHNvdXJjZUVsZW1lbnQgKQotICB7Ci0gICAgQmFzaWNDb25uZWN0aW9uIG91dGJvdW5kQ29ubmVjdGlvbiA9IG5ldyBCYXNpY0Nvbm5lY3Rpb24ob3V0Ym91bmRSZWwsdGFyZ2V0RWxlbWVudCk7Ci0gICAgQmFzaWNDb25uZWN0aW9uIGluYm91bmRDb25uZWN0aW9uID0gbmV3IEJhc2ljQ29ubmVjdGlvbihpbmJvdW5kUmVsLHNvdXJjZUVsZW1lbnQpOwotICAgIG91dGJvdW5kQ29ubmVjdGlvbi5mT3Bwb3NpbmdDb25uZWN0aW9uID0gaW5ib3VuZENvbm5lY3Rpb247Ci0gICAgaW5ib3VuZENvbm5lY3Rpb24uZk9wcG9zaW5nQ29ubmVjdGlvbiA9IG91dGJvdW5kQ29ubmVjdGlvbjsKLSAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25bXSB7b3V0Ym91bmRDb25uZWN0aW9uLGluYm91bmRDb25uZWN0aW9ufTsKLSAgfQotCi0gIHB1YmxpYyBCYXNpY0Nvbm5lY3Rpb24gKCBSZWwgcmVsLCBFbGVtZW50IGVsZW1lbnQgKQotICB7Ci0gICAgZlJlbCA9IHJlbDsKLSAgICBmRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgZk9wcG9zaW5nQ29ubmVjdGlvbiA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgUmVsIGdldFJlbCAoKQotICB7Ci0gICAgcmV0dXJuIGZSZWw7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRPcHBvc2luZ0Nvbm5lY3Rpb24gKCkKLSAgewotICAgIHJldHVybiBmT3Bwb3NpbmdDb25uZWN0aW9uOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50LmdldE5hbWUoKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWRmYjhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgQmFzaWNFbGVtZW50IGltcGxlbWVudHMgRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgU3RyaW5nIGZOYW1lOwotICBwcml2YXRlIFN0cmluZyBmTVVJRDsKLSAgcHJpdmF0ZSBNb2RlbCBmTW9kZWw7Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGZSZWxzOwotICBwcml2YXRlIEhhc2h0YWJsZSBmUHJvcGVydGllczsKLSAgcHJpdmF0ZSBWZWN0b3IgZkxpc3RlbmVyczsKLQotICBwdWJsaWMgQmFzaWNFbGVtZW50ICggU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsICkKLSAgewotICAgIGZOYW1lID0gbmFtZTsKLSAgICBzZXRNVUlEKG1vZGVsLm1ha2VNVUlEKG5hbWUpKTsKLSAgICBtb2RlbC5hZGRFbGVtZW50KHRoaXMpOwotICAgIGZNb2RlbCA9IG1vZGVsOwotICAgIGZSZWxzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGZMaXN0ZW5lcnMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZlByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZlByb3BlcnRpZXMucHV0KFByb3BlcnR5Lk5BTUUsbmV3IEJhc2ljUHJvcGVydHkoUHJvcGVydHkuTkFNRSxmTmFtZSkpOwotICB9Ci0KLSAgcHVibGljIEJhc2ljRWxlbWVudCAoIFN0cmluZyBuYW1lLCBFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBvdXRib3VuZFJlbE5hbWUsIFN0cmluZyBpbmJvdW5kUmVsTmFtZSApCi0gIHsKLSAgICB0aGlzKG5hbWUsZWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICBjb25uZWN0KGVsZW1lbnQsb3V0Ym91bmRSZWxOYW1lLGluYm91bmRSZWxOYW1lKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYSBjbG9uZSBvZiB0aGlzIDxjb2RlPkVsZW1lbnQ8L2NvZGU+Ci0gICogb2YgdGhlIHNhbWUgY2xhc3MgYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgbW9kZWwsCi0gICogYnV0IHdpdGggbm8gUHJvcGVydGllcywgUmVscyBvciBMaXN0ZW5lcnMgZXhjZXB0IGZvcgotICAqIHRoZSB7QGxpbmsgUHJvcGVydHkjTkFNRSBOQU1FfSBwcm9wZXJ0eS4KLSAgKiBAcmV0dXJuIE9iamVjdCBBIG5ldyBFbGVtZW50LgotICAqLwotICBwdWJsaWMgRWxlbWVudCBzaGFsbG93Q2xvbmUgKCkKLSAgewotICAgIHJldHVybiBuZXcgQmFzaWNFbGVtZW50KGZOYW1lLGZNb2RlbCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGEgY2xvbmUgb2YgdGhpcyA8Y29kZT5FbGVtZW50PC9jb2RlPgotICAqIG9mIHRoZSBzYW1lIGNsYXNzIGFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYW5kIG1vZGVsCi0gICogYW5kIHdpdGggYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBFbGVtZW50J3MgUHJvcGVydGllcy4KLSAgKiBUaGUgUmVscyBhbmQgTGlzdGVuZXJzIGFyZSBub3QgY2xvbmVkLgotICAqIEByZXR1cm4gRWxlbWVudCBBIG5ldyBFbGVtZW50LgotICAqLwotICBwdWJsaWMgZmluYWwgRWxlbWVudCBkZWVwQ2xvbmUgKCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IHNoYWxsb3dDbG9uZSgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgUHJvcGVydHkgcHJvcGVydHkgPSAoUHJvcGVydHkpZS5uZXh0RWxlbWVudCgpOwotICAgICAgUHJvcGVydHkgbmV3UHJvcGVydHkgPSAoUHJvcGVydHkpcHJvcGVydHkuc2hhbGxvd0Nsb25lKCk7Ci0gICAgICBuZXdFbGVtZW50LnNldFByb3BlcnR5KG5ld1Byb3BlcnR5KTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgKiBNb2RlbC1WaWV3LUNvbnRyb2xsZXI6IEFsbCBwcm9wZXJ0eSBjaGFuZ2VzIHRvIHRoZSBtb2RlbAotICAqIChzdWNoIGFzIHRob3NlIG1hZGUgYnkgYSB3aXphcmQgaW4gdGhlIHJvbGUgb2YgYSBDb250cm9sbGVyKQotICAqIHNob3VsZCB5aWVsZCBldmVudHMgdG8gd2hpY2ggYW4gaW50ZXJlc3RlZCBwYXJ0eSBjYW4gbGlzdGVuCi0gICogKHN1Y2ggYXMgYSB3aXphcmQgaW4gdGhlIHJvbGUgb2YgYSBWaWV3ZXIpLgotICAqIEBwYXJhbSB0bWwgVGhlIGxpc3RlbmVyIHRvIGFkZC4KLSAgKi8KLSAgcHVibGljIHZvaWQgYWRkTGlzdGVuZXIgKCBFbGVtZW50TGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgZkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotICB9Ci0KLSAgcHVibGljIE1vZGVsIGdldE1vZGVsICgpCi0gIHsKLSAgICByZXR1cm4gZk1vZGVsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCAoKQotICB7Ci0gICAgcmV0dXJuIChmTW9kZWwgIT0gbnVsbCAmJiBmTW9kZWwuY29udGFpbnNFbGVtZW50KHRoaXMpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZSAoKQotICB7Ci0gICAgcmV0dXJuIGZNb2RlbC5yZW1vdmVFbGVtZW50KHRoaXMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZSAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIGZOYW1lID0gbmFtZTsKLSAgICBmUHJvcGVydGllcy5wdXQoUHJvcGVydHkuTkFNRSxuZXcgQmFzaWNQcm9wZXJ0eShQcm9wZXJ0eS5OQU1FLGZOYW1lKSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBmTmFtZTsKLSAgfQotCi0gIC8qCi0gICogVGhlIGdldHRlciBmb3IgdGhlIE1VSUQKLSAgKiBUaGUgTVVJRCBpcyB0aGUgTW9kZWwgVW5pcXVlIElkZW50aWZpZXIsIG1hZGUgZnJvbSB0aGUgbmFtZSBhbmQgYW4KLSAgKiBhcHBlbmRlZCB1bmlxdWUgbnVtYmVyIAotICAqIEByZXR1cm4gU3RyaW5nIGEgdW5pcXVlIGlkIGZvciB0aGlzIGVsZW1lbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBtb2RlbCAKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNVUlEKCkKLSAgewotICAgIHJldHVybiBmTVVJRDsKLSAgfQotCi0gIC8qCi0gICoKLSAgKgotICAqLwotICBwdWJsaWMgaW50IGdldE51bWJlcklEKCkKLSAgewotICAgIFN0cmluZyBudW1iZXIgPSBnZXRNVUlEKCkuc3Vic3RyaW5nKGdldE5hbWUoKS5sZW5ndGgoKSk7ICAKLSAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChudW1iZXIpOwotICB9Ci0KLSAgLyoKLSAgKiBTZXQgdGhlIE1VSUQgd2hpY2ggd2FzIG1hZGUgYnkgdGhlIG1vZGVsCi0gICogU2hvdWxkIG9ubHkgYmUgc2V0dGFibGUgd2l0aGluIHRoaXMgZWxlbWVudAotICAqIFNldCBvbmNlIHVwb24gY3JlYXRpb24sIHlvdSBjYW4gY2hhbmdlIHRoZSBuYW1lCi0gICogYnV0IHRoZSBpZCB3aWxsIHJlbWFpbiBjb25zdGFudC4KLSAgKi8KLSAgcHJpdmF0ZSB2b2lkIHNldE1VSUQoU3RyaW5nIE1VSUQpCi0gIHsKLSAgICBmTVVJRCA9IE1VSUQ7Ci0gIH0KLSAKLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHkgKCBQcm9wZXJ0eSBwcm9wZXJ0eSApCi0gIHsKLSAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gcHJvcGVydHkuZ2V0TmFtZSgpOwotICAgIFByb3BlcnR5IG9sZFByb3BlcnR5ID0gZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKTsKLSAgICBmUHJvcGVydGllcy5wdXQocHJvcGVydHlOYW1lLHByb3BlcnR5KTsKLSAgICBpZiAob2xkUHJvcGVydHkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBQcm9wZXJ0eUFkZEV2ZW50IGV2ZW50ID0gbmV3IFByb3BlcnR5QWRkRXZlbnQodGhpcyxwcm9wZXJ0eSk7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gZkxpc3RlbmVycy5lbGVtZW50cygpOwotICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgICgoRWxlbWVudExpc3RlbmVyKWUubmV4dEVsZW1lbnQoKSkucHJvcGVydHlBZGRlZChldmVudCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBPYmplY3Qgb2xkVmFsdWUgPSBvbGRQcm9wZXJ0eS5nZXRWYWx1ZSgpOwotICAgICAgT2JqZWN0IG5ld1ZhbHVlID0gcHJvcGVydHkuZ2V0VmFsdWUoKTsKLSAgICAgIGlmIChvbGRWYWx1ZSAhPSBuZXdWYWx1ZSkKLSAgICAgIHsKLSAgICAgICAgaWYgKG9sZFZhbHVlID09IG51bGwgfHwgbmV3VmFsdWUgPT0gbnVsbCB8fCAoIW9sZFZhbHVlLmVxdWFscyhuZXdWYWx1ZSkpKQotICAgICAgICB7Ci0gICAgICAgICAgUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCA9IG5ldyBQcm9wZXJ0eUNoYW5nZUV2ZW50KHRoaXMscHJvcGVydHksb2xkUHJvcGVydHkpOwotICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSBmTGlzdGVuZXJzLmVsZW1lbnRzKCk7Ci0gICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgKChFbGVtZW50TGlzdGVuZXIpZS5uZXh0RWxlbWVudCgpKS5wcm9wZXJ0eUNoYW5nZWQoZXZlbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAocHJvcGVydHlOYW1lLmVxdWFscyhQcm9wZXJ0eS5OQU1FKSkgZk5hbWUgPSBwcm9wZXJ0eS5nZXRWYWx1ZSgpLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eUFzT2JqZWN0ICggU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSApCi0gIHsKLSAgICBzZXRQcm9wZXJ0eShuZXcgQmFzaWNQcm9wZXJ0eShuYW1lLHZhbHVlKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eUFzU3RyaW5nICggU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSApCi0gIHsKLSAgICBzZXRQcm9wZXJ0eShuZXcgQmFzaWNQcm9wZXJ0eShuYW1lLHZhbHVlKSk7Ci0gIH0KLQotICBwdWJsaWMgUHJvcGVydHkgZ2V0UHJvcGVydHkgKCBTdHJpbmcgbmFtZSApCi0gIHsKLSAgICByZXR1cm4gKFByb3BlcnR5KWZQcm9wZXJ0aWVzLmdldChuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHlBc09iamVjdCAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIFByb3BlcnR5IHByb3BlcnR5ID0gZ2V0UHJvcGVydHkobmFtZSk7Ci0gICAgcmV0dXJuIChwcm9wZXJ0eSA9PSBudWxsID8gbnVsbCA6IHByb3BlcnR5LmdldFZhbHVlKCkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eUFzU3RyaW5nICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgUHJvcGVydHkgcHJvcGVydHkgPSBnZXRQcm9wZXJ0eShuYW1lKTsKLSAgICByZXR1cm4gKHByb3BlcnR5ID09IG51bGwgPyBudWxsIDogcHJvcGVydHkuZ2V0VmFsdWVBc1N0cmluZygpKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQcm9wZXJ0aWVzICgpCi0gIHsKLSAgICByZXR1cm4gZlByb3BlcnRpZXMuZWxlbWVudHMoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGNvbm5lY3QgKCBFbGVtZW50IHRhcmdldEVsZW1lbnQsIFN0cmluZyBvdXRib3VuZFJlbE5hbWUsIFN0cmluZyBpbmJvdW5kUmVsTmFtZSApCi0gIHsKLSAgICBpZiAoZk1vZGVsID09IG51bGwgfHwgZk1vZGVsICE9IHRhcmdldEVsZW1lbnQuZ2V0TW9kZWwoKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgRWxlbWVudCBzb3VyY2VFbGVtZW50ID0gdGhpczsKLSAgICBSZWwgb3V0Ym91bmRSZWwgPSBzb3VyY2VFbGVtZW50LmdldFJlbChvdXRib3VuZFJlbE5hbWUpOwotICAgIFJlbCBpbmJvdW5kUmVsID0gdGFyZ2V0RWxlbWVudC5nZXRSZWwoaW5ib3VuZFJlbE5hbWUpOwotICAgIENvbm5lY3Rpb25bXSBwYWlyID0gQmFzaWNDb25uZWN0aW9uLmNyZWF0ZVBhaXIob3V0Ym91bmRSZWwsdGFyZ2V0RWxlbWVudCxpbmJvdW5kUmVsLHNvdXJjZUVsZW1lbnQpOwotICAgIG91dGJvdW5kUmVsLmFkZENvbm5lY3Rpb24ocGFpcltCYXNpY0Nvbm5lY3Rpb24uT1VUQk9VTkRdKTsKLSAgICBpbmJvdW5kUmVsLmFkZENvbm5lY3Rpb24ocGFpcltCYXNpY0Nvbm5lY3Rpb24uSU5CT1VORF0pOwotICAgIFJlbEFkZEV2ZW50IGV2ZW50ID0gbmV3IFJlbEFkZEV2ZW50KHBhaXIpOwotICAgIEVudW1lcmF0aW9uIGVTb3VyY2UgPSBnZXRMaXN0ZW5lcnMoKTsKLSAgICBFbnVtZXJhdGlvbiBlVGFyZ2V0ID0gdGFyZ2V0RWxlbWVudC5nZXRMaXN0ZW5lcnMoKTsKLSAgICB3aGlsZSAoZVNvdXJjZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICAoKEVsZW1lbnRMaXN0ZW5lcillU291cmNlLm5leHRFbGVtZW50KCkpLnJlbEFkZGVkKGV2ZW50KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoZVRhcmdldC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICAoKEVsZW1lbnRMaXN0ZW5lcillVGFyZ2V0Lm5leHRFbGVtZW50KCkpLnJlbEFkZGVkKGV2ZW50KTsKLSAgICB9Ci0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZGlzY29ubmVjdCAoIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCwgU3RyaW5nIG91dGJvdW5kUmVsTmFtZSApCi0gIHsKLSAgICByZXR1cm4gZGlzY29ubmVjdCh0YXJnZXRFbGVtZW50LGdldFJlbChvdXRib3VuZFJlbE5hbWUpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGRpc2Nvbm5lY3RSZWwgKCBTdHJpbmcgb3V0Ym91bmRSZWxOYW1lICkKLSAgewotICAgIHJldHVybiBkaXNjb25uZWN0UmVsKGdldFJlbChvdXRib3VuZFJlbE5hbWUpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGRpc2Nvbm5lY3RBbGwgKCkKLSAgewotICAgIGlmIChmTW9kZWwgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgIEVudW1lcmF0aW9uIGUgPSBmUmVscy5lbGVtZW50cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFJlbCByZWwgPSAoUmVsKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGRpc2Nvbm5lY3RSZWwocmVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0RWxlbWVudHMgKCBTdHJpbmcgcmVsTmFtZSApCi0gIHsKLSAgICByZXR1cm4gZ2V0UmVsKHJlbE5hbWUpLmdldFRhcmdldEVsZW1lbnRzKCk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE51bWJlck9mRWxlbWVudHMgKCBTdHJpbmcgcmVsTmFtZSApCi0gIHsKLSAgICByZXR1cm4gZ2V0UmVsKHJlbE5hbWUpLmdldE51bWJlck9mVGFyZ2V0RWxlbWVudHMoKTsKLSAgfQotCi0gIHB1YmxpYyBSZWwgZ2V0UmVsICggU3RyaW5nIHJlbE5hbWUgKQotICB7Ci0gICAgUmVsIHJlbCA9IChSZWwpZlJlbHMuZ2V0KHJlbE5hbWUpOwotICAgIGlmIChyZWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZWwgPSBuZXcgQmFzaWNSZWwocmVsTmFtZSx0aGlzKTsKLSAgICAgIGZSZWxzLnB1dChyZWxOYW1lLHJlbCk7Ci0gICAgfQotICAgIHJldHVybiByZWw7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UmVscyAoKQotICB7Ci0gICAgcmV0dXJuIGZSZWxzLmVsZW1lbnRzKCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0TGlzdGVuZXJzKCkKLSAgewotICAgIHJldHVybiBmTGlzdGVuZXJzLmVsZW1lbnRzKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBkaXNjb25uZWN0ICggRWxlbWVudCB0YXJnZXRFbGVtZW50LCBSZWwgb3V0Ym91bmRSZWwgKQotICB7Ci0gICAgaWYgKGZNb2RlbCA9PSBudWxsIHx8IGZNb2RlbCAhPSB0YXJnZXRFbGVtZW50LmdldE1vZGVsKCkgfHwgb3V0Ym91bmRSZWwgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgIENvbm5lY3Rpb24gb3V0Ym91bmRDb25uZWN0aW9uID0gb3V0Ym91bmRSZWwuZ2V0Q29ubmVjdGlvblRvKHRhcmdldEVsZW1lbnQpOwotICAgIGlmIChvdXRib3VuZENvbm5lY3Rpb24gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgIENvbm5lY3Rpb24gaW5ib3VuZENvbm5lY3Rpb24gPSBvdXRib3VuZENvbm5lY3Rpb24uZ2V0T3Bwb3NpbmdDb25uZWN0aW9uKCk7Ci0gICAgUmVsUmVtb3ZlRXZlbnQgZXZlbnQgPSBuZXcgUmVsUmVtb3ZlRXZlbnQobmV3IENvbm5lY3Rpb24gW10ge291dGJvdW5kQ29ubmVjdGlvbixpbmJvdW5kQ29ubmVjdGlvbn0pOwotICAgICAgRW51bWVyYXRpb24gZSA9IGZMaXN0ZW5lcnMuZWxlbWVudHMoKTsKLSAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICAoKEVsZW1lbnRMaXN0ZW5lcillLm5leHRFbGVtZW50KCkpLnJlbFJlbW92ZWQoZXZlbnQpOwotICAgICAgfQotCi0gICAgRW51bWVyYXRpb24gZVRhcmdldCA9IHRhcmdldEVsZW1lbnQuZ2V0TGlzdGVuZXJzKCk7Ci0gICAgd2hpbGUgKGVUYXJnZXQuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgKChFbGVtZW50TGlzdGVuZXIpZVRhcmdldC5uZXh0RWxlbWVudCgpKS5yZWxSZW1vdmVkKGV2ZW50KTsKLSAgICB9Ci0KLSAgICBSZWwgaW5ib3VuZFJlbCA9IGluYm91bmRDb25uZWN0aW9uLmdldFJlbCgpOwotICAgIGJvb2xlYW4gZG9uZSA9IG91dGJvdW5kUmVsLnJlbW92ZUNvbm5lY3Rpb24ob3V0Ym91bmRDb25uZWN0aW9uKTsKLSAgICBpbmJvdW5kUmVsLnJlbW92ZUNvbm5lY3Rpb24oaW5ib3VuZENvbm5lY3Rpb24pOwotICAgIHJldHVybiBkb25lOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZGlzY29ubmVjdFJlbCAoIFJlbCBvdXRib3VuZFJlbCApCi0gIHsKLSAgICBpZiAoZk1vZGVsID09IG51bGwgfHwgb3V0Ym91bmRSZWwgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgIEVsZW1lbnRbXSBlbGVtZW50cyA9IG5ldyBFbGVtZW50W291dGJvdW5kUmVsLmdldE51bWJlck9mVGFyZ2V0RWxlbWVudHMoKV07Ci0gICAgaW50IGkgPSAwOwotICAgIEVudW1lcmF0aW9uIGUgPSBvdXRib3VuZFJlbC5nZXRUYXJnZXRFbGVtZW50cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGVsZW1lbnRzW2krK10gPSAoRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgfQotICAgIHdoaWxlIChpLS0gPiAwKQotICAgIHsKLSAgICAgIGRpc2Nvbm5lY3QoZWxlbWVudHNbaV0sb3V0Ym91bmRSZWwpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkKLSAgewotICAgIHJldHVybiBnZXROYW1lKCk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNNb2RlbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmQyMDYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljTW9kZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIEJhc2ljTW9kZWwgaW1wbGVtZW50cyBNb2RlbAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgU3RyaW5nIGZOYW1lOwotICBwcml2YXRlIEhhc2h0YWJsZSBmRWxlbWVudHM7Ci0gIHByaXZhdGUgRWxlbWVudCBmUm9vdDsKLSAgLy9UaGlzIGlzIHVzZWQgYnkgdGhlIE1VSUQKLSAgcHJpdmF0ZSBpbnQgZlVuaXF1ZU51bWJlckNvdW50ZXI7Ci0KLSAgcHVibGljIEJhc2ljTW9kZWwgKCBTdHJpbmcgbmFtZSApCi0gIHsKLSAgICBmTmFtZSA9IG5hbWU7Ci0gICAgZkVsZW1lbnRzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGZSb290ID0gbnVsbDsKLSAgICBmVW5pcXVlTnVtYmVyQ291bnRlciA9IDA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgZk5hbWUgPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0gIHsKLSAgICByZXR1cm4gZk5hbWU7Ci0gIH0KLQotCi0gIC8qCi0gICogc2ltcGxlIGNvdW50ZXIgdGhhdCBpbmNyZW1lbnRzIGVhY2ggY2FsbCAKLSAgKi8KLSAgcHVibGljIGludCBnZXRVbmlxdWVOdW1iZXIoKQotICB7Ci0gICAgZlVuaXF1ZU51bWJlckNvdW50ZXIrKzsKLSAgICByZXR1cm4gZlVuaXF1ZU51bWJlckNvdW50ZXI7Ci0gIH0KLQotICAvKgotICAqIFRoaXMgd2lsbCB1c2UgYSB1bmlxdWUgbnVtYmVyIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbmFtZSAKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgb2YgdGhlIGVsZW1lbnQKLSAgKiBAcmV0dXJuIFN0cmluZyBNVUlECi0gICovCi0gIHB1YmxpYyBTdHJpbmcgbWFrZU1VSUQoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgbnVtID0gU3RyaW5nLnZhbHVlT2YoZ2V0VW5pcXVlTnVtYmVyKCkpOwotICAgIFN0cmluZyBtdWlkID0gbmFtZSArIG51bTsKLSAgICByZXR1cm4gbXVpZDsKLSAgfQotCi0KLSAgcHVibGljIGJvb2xlYW4gc2V0Um9vdEVsZW1lbnQgKCBFbGVtZW50IHJvb3QgKQotICB7Ci0gICAgaWYgKHJvb3QuZ2V0TW9kZWwoKSA9PSBudWxsKQotICAgICAgYWRkRWxlbWVudChyb290KTsKLSAgICBlbHNlIGlmIChyb290LmdldE1vZGVsKCkgIT0gdGhpcykKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmUm9vdCA9IHJvb3Q7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBnZXRSb290RWxlbWVudCAoKQotICB7Ci0gICAgaWYgKGZSb290ID09IG51bGwpIGZSb290ID0gZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgcmV0dXJuIGZSb290OwotICB9Ci0KLQotICAvKioKLSAgKiBHZXQgdGhlIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGlzIG5hbWUKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgCi0gICogQHJldHVybiBWZWN0b3IgYSB2ZWN0b3Igb2YgZWxlbWVudHMgdGhhdCBoYXZlIHRoaXMgbmFtZQotICAqIFRoZXNlIGVsZW1lbnRzIG1heSBiZSBvZiBkaWZmZXJlbnQgdHlwZXMKLSAgKiovCi0KLSAgcHVibGljIFZlY3RvciBnZXRFbGVtZW50c0J5TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFZlY3RvciB2ZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGZFbGVtZW50cy5rZXlzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICBpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSB2ZWN0b3IuYWRkRWxlbWVudChlbGVtZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHZlY3RvcjsKLSAgfQotCi0gCi0KLSAgcHVibGljIGJvb2xlYW4gYWRkRWxlbWVudCAoIEVsZW1lbnQgZWxlbWVudCApCi0gIHsKLSAgICBpZiAoZWxlbWVudC5nZXRNb2RlbCgpICE9IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICBmRWxlbWVudHMucHV0KGVsZW1lbnQsZWxlbWVudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVFbGVtZW50ICggRWxlbWVudCBlbGVtZW50ICkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE1vZGVsKCkgIT0gdGhpcykgcmV0dXJuIGZhbHNlOwotICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgIGlmIChmUm9vdCA9PSBlbGVtZW50KSBmUm9vdCA9IG51bGw7Ci0gICAgcmV0dXJuIChmRWxlbWVudHMucmVtb3ZlKGVsZW1lbnQpID09IGVsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEVsZW1lbnRzICgpCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnRzLmVsZW1lbnRzKCk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE51bWJlck9mRWxlbWVudHMgKCkKLSAgewotICAgIHJldHVybiBmRWxlbWVudHMuc2l6ZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gY29udGFpbnNFbGVtZW50ICggRWxlbWVudCBlbGVtZW50ICkKLSAgewotICAgIHJldHVybiBmRWxlbWVudHMuY29udGFpbnMoZWxlbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgZ2V0Rmlyc3RFbGVtZW50ICgpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoKTsKLSAgICByZXR1cm4gKGUuaGFzTW9yZUVsZW1lbnRzKCkgPyAoRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkKLSAgewotICAgIHJldHVybiBnZXROYW1lKCk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNQcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNQcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTRjM2QxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBCYXNpY1Byb3BlcnR5IGltcGxlbWVudHMgUHJvcGVydHkKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIFN0cmluZyBmTmFtZTsKLSAgcHJpdmF0ZSBPYmplY3QgZlZhbHVlOwotCi0gIHB1YmxpYyBCYXNpY1Byb3BlcnR5ICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgZk5hbWUgPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIEJhc2ljUHJvcGVydHkgKCBTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlICkKLSAgewotICAgIGZOYW1lID0gbmFtZTsKLSAgICBmVmFsdWUgPSB2YWx1ZTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYSBzaGFsbG93IGNsb25lIG9mIHRoaXMgPGNvZGU+UHJvcGVydHk8L2NvZGU+LgotICAqIFByb3BlcnR5IGtleSBhbmQgdmFsdWUgcmVmZXJlbmNlcyBhcmUgY2xvbmVkLAotICAqIGJ1dCB0aGUgdmFsdWUgb2JqZWN0cyB0aGVtc2VsdmVzIGFyZSBub3QgY2xvbmVkLgotICAqIEByZXR1cm4gUHJvcGVydHkgQSBuZXcgUHJvcGVydHkuCi0gICovCi0gIHB1YmxpYyBQcm9wZXJ0eSBzaGFsbG93Q2xvbmUgKCkKLSAgewotICAgIHJldHVybiBuZXcgQmFzaWNQcm9wZXJ0eShmTmFtZSxmVmFsdWUpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0gIHsKLSAgICByZXR1cm4gZk5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoIE9iamVjdCB2YWx1ZSApCi0gIHsKLSAgICBmVmFsdWUgPSB2YWx1ZTsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZ2V0VmFsdWUgKCkKLSAgewotICAgIHJldHVybiBmVmFsdWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRWYWx1ZUFzU3RyaW5nICggU3RyaW5nIHZhbHVlICkKLSAgewotICAgIGZWYWx1ZSA9IHZhbHVlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRWYWx1ZUFzU3RyaW5nICgpCi0gIHsKLSAgICByZXR1cm4gKGZWYWx1ZSAhPSBudWxsID8gZlZhbHVlLnRvU3RyaW5nKCkgOiBudWxsKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY1JlbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNSZWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA1ZjA4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY1JlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIEJhc2ljUmVsIGltcGxlbWVudHMgUmVsCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZk5hbWU7Ci0gIHByaXZhdGUgRWxlbWVudCBmU291cmNlRWxlbWVudDsKLSAgcHJpdmF0ZSBWZWN0b3IgZkNvbm5lY3Rpb25zOwotCi0gIHB1YmxpYyBCYXNpY1JlbCAoIFN0cmluZyBuYW1lLCBFbGVtZW50IHNvdXJjZUVsZW1lbnQgKQotICB7Ci0gICAgZk5hbWUgPSBuYW1lOwotICAgIGZTb3VyY2VFbGVtZW50ID0gc291cmNlRWxlbWVudDsKLSAgICBmQ29ubmVjdGlvbnMgPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBmTmFtZTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGdldFNvdXJjZUVsZW1lbnQgKCkKLSAgewotICAgIHJldHVybiBmU291cmNlRWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRUYXJnZXRFbGVtZW50cyAoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBFbGVtZW50RW51bWVyYXRpb24oZkNvbm5lY3Rpb25zLmVsZW1lbnRzKCkpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZlRhcmdldEVsZW1lbnRzICgpCi0gIHsKLSAgICByZXR1cm4gZkNvbm5lY3Rpb25zLnNpemUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb24gKCBDb25uZWN0aW9uIGNvbm5lY3Rpb24gKQotICB7Ci0gICAgZkNvbm5lY3Rpb25zLmFkZEVsZW1lbnQoY29ubmVjdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVDb25uZWN0aW9uICggQ29ubmVjdGlvbiBjb25uZWN0aW9uICkKLSAgewotICAgIHJldHVybiBmQ29ubmVjdGlvbnMucmVtb3ZlRWxlbWVudChjb25uZWN0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb25UbyAoIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCApCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZkNvbm5lY3Rpb25zLmVsZW1lbnRzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgQ29ubmVjdGlvbiBjID0gKENvbm5lY3Rpb24pZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKGMuZ2V0RWxlbWVudCgpID09IHRhcmdldEVsZW1lbnQpIHJldHVybiBjOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkKLSAgewotICAgIHJldHVybiBnZXROYW1lKCk7Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIEVsZW1lbnRFbnVtZXJhdGlvbiBpbXBsZW1lbnRzIEVudW1lcmF0aW9uCi0gIHsKLSAgICBwcml2YXRlIEVudW1lcmF0aW9uIGZDb25uZWN0aW9uRW51bWVyYXRpb247Ci0KLSAgICBwdWJsaWMgRWxlbWVudEVudW1lcmF0aW9uICggRW51bWVyYXRpb24gY29ubmVjdGlvbkVudW1lcmF0aW9uICkKLSAgICB7Ci0gICAgICBmQ29ubmVjdGlvbkVudW1lcmF0aW9uID0gY29ubmVjdGlvbkVudW1lcmF0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc01vcmVFbGVtZW50cyAoKQotICAgIHsKLSAgICAgIHJldHVybiBmQ29ubmVjdGlvbkVudW1lcmF0aW9uLmhhc01vcmVFbGVtZW50cygpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgbmV4dEVsZW1lbnQgKCkKLSAgICB7Ci0gICAgICByZXR1cm4gKChDb25uZWN0aW9uKWZDb25uZWN0aW9uRW51bWVyYXRpb24ubmV4dEVsZW1lbnQoKSkuZ2V0RWxlbWVudCgpOwotICAgIH0KLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Db25uZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Db25uZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZGNmNmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQ29ubmVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGFic3RyYWN0IGNsYXNzIGZvciBhIGNvbm5lY3Rpb24gdGhhdCB0aWVzIGEgUmVsIHRvIGEgTm9kZS4KLSogTm9ybWFsbHkgQ29ubmVjdGlvbiBvYmplY3RzIGFyZSBtYW51ZmFjdHVyZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZQotKiBkZXJpdmVkIGNsYXNzZXMgb2YgdGhlIE1vZGVsIGZyYW1ld29yaywgYW5kIGFyZSBub3QgbWFuaXB1bGF0ZWQgYnkKLSogdGhlIGNhbGxlciBkaXJlY3RseS4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIENvbm5lY3Rpb24KLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBSZWwgdGhhdCBvd25zIHRoaXMgY29ubmVjdGlvbi4KLSAgKiBAcmV0dXJuIFJlbCBUaGUgUmVsIHRoYXQgb3ducyB0aGlzIGNvbm5lY3Rpb24uCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLCB0aGF0IGlzLCBhIENvbm5lY3Rpb24KLSAgKiBjYW5ub3QgZXhpc3Qgd2l0aG91dCBhIFJlbCB0byBvd24gaXQuCi0gICovCi0gIHB1YmxpYyBSZWwgZ2V0UmVsICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIE5vZGUgdGhhdCB0aGlzIGNvbm5lY3Rpb24gcG9pbnRzIHRvLgotICAqIEByZXR1cm4gTm9kZSBUaGUgTm9kZSB0aGlzIGNvbm5lY3Rpb24gcG9pbnRzIHRvLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbCwgdGhhdCBpcywgYSBDb25uZWN0aW9uCi0gICogY2Fubm90IGV4aXN0IHdpdGhvdXQgYSBOb2RlIHRvIHBvaW50IHRvLgotICAqLwotICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50ICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG9wcG9zaW5nIGNvbm5lY3Rpb24gdG8gdGhpcyBjb25uZWN0aW9uLgotICAqIENvbm5lY3Rpb24gb2JqZWN0cyBhbHdheXMgZXhpc3QgaW4gcGFpcnMsIHRoYXQgaXMsCi0gICogaWYgbm9kZSAiUGFyZW50IiBoYXMgYSByZWxhdGlvbnNoaXAgbmFtZWQgIkNoaWxkcmVuIgotICAqIGNvbnRhaW5pbmcgYSBjb25uZWN0aW9uIHRvIG5vZGUgIkNoaWxkIiwgdGhlbiB0aGVyZQotICAqIG11c3QgZXhpc3QgYW4gb3Bwb3NpbmcgY29ubmVjdGlvbiBmcm9tICJDaGlsZCIgdG8KLSAgKiAiUGFyZW50IiBpbiBzb21lIHJlbGF0aW9uc2hpcCBvZiAiQ2hpbGQiIChmb3IgZXhhbXBsZSwKLSAgKiBpbiBhIHJlbGF0aW9uc2hpcCBjYWxsZWQgIlBhcmVudHMiKS4KLSAgKiBAcmV0dXJuIENvbm5lY3Rpb24gVGhlIG9wcG9zaW5nIGNvbm5lY3Rpb24uCi0gICogQXMgYSBnZW5lcmFsIHJ1bGUsIHRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciByZXR1cm4gbnVsbC4KLSAgKiBJdCBtYXkgb25seSByZXR1cm4gbnVsbCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoZSBwYWlyCi0gICogb2YgY29ubmVjdGlvbnMuCi0gICovCi0gIHB1YmxpYyBDb25uZWN0aW9uIGdldE9wcG9zaW5nQ29ubmVjdGlvbiAoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTA1N2MwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi0vKioKLSogVGhpcyBpcyB0aGUgYWJzdHJhY3QgY2xhc3MgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGJlIG1hbmFnZWQgYnkgYSBNb2RlbC4KLSogRXZlcnkgZWxlbWVudCBoYXMgYSBuYW1lLCBhIHNldCBvZiBwcm9wZXJ0aWVzLCBhbmQgYSBzZXQgb2YgcmVsYXRpb25zaGlwcwotKiB0byBvdGhlciBlbGVtZW50cy4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIEVsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBSZXR1cm5zIGEgY2xvbmUgb2YgdGhpcyA8Y29kZT5FbGVtZW50PC9jb2RlPgotICAqIG9mIHRoZSBzYW1lIGNsYXNzIGFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYW5kIG1vZGVsLAotICAqIGJ1dCB3aXRoIG5vIFByb3BlcnRpZXMsIFJlbHMgb3IgTGlzdGVuZXJzIGV4Y2VwdCBmb3IKLSAgKiB0aGUge0BsaW5rIFByb3BlcnR5I05BTUUgTkFNRX0gcHJvcGVydHkuCi0gICogQHJldHVybiBPYmplY3QgQSBuZXcgRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIEVsZW1lbnQgc2hhbGxvd0Nsb25lICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgYSBjbG9uZSBvZiB0aGlzIDxjb2RlPkVsZW1lbnQ8L2NvZGU+Ci0gICogb2YgdGhlIHNhbWUgY2xhc3MgYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgbW9kZWwKLSAgKiBhbmQgd2l0aCBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIEVsZW1lbnQncyBQcm9wZXJ0aWVzLgotICAqIFRoZSBSZWxzIGFuZCBMaXN0ZW5lcnMgYXJlIG5vdCBjbG9uZWQuCi0gICogQHJldHVybiBFbGVtZW50IEEgbmV3IEVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBFbGVtZW50IGRlZXBDbG9uZSAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBtb2RlbCB0aGlzIGVsZW1lbnQgYmVsb25ncyB0bywgb3IgbnVsbCBpZiB0aGUgZWxlbWVudAotICAqIGhhcyBub3QgYmVlbiBhZGRlZCB0byBhIG1vZGVsLiBTZWUgYWxzbyB7QGxpbmsgI2lzVmFsaWQgaXNWYWxpZCgpfS4KLSAgKiBAcmV0dXJuIE1vZGVsIFRoZSBtb2RlbCB0aGlzIGVsZW1lbnQgYmVsb25ncyB0bywgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgTW9kZWwgZ2V0TW9kZWwgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgZWxlbWVudCBiZWxvbmdzIHRvIGEgbW9kZWwuCi0gICogU2VlIGFsc28ge0BsaW5rICNnZXRNb2RlbCBnZXRNb2RlbCgpfS4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIGVsZW1lbnQgYmVsb25ncyB0byBhIG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkICgpOwotCi0gIC8qKgotICAqIFJlbW92ZXMgdGhpcyBlbGVtZW50IGZyb20gdGhlIG1vZGVsIHRvIHdoaWNoIGl0IGN1cnJlbnRseSBiZWxvbmdzLgotICAqIEFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIHtAbGluayAjZ2V0TW9kZWwgZ2V0TW9kZWwoKX0gd2lsbCByZXR1cm4KLSAgKiBudWxsIGFuZCB7QGxpbmsgI2lzVmFsaWQgaXNWYWxpZCgpfSB3aWxsIHJldHVybiBmYWxzZS4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgZWxlbWVudCB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbQotICAqIGl0cyBtb2RlbC4gVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBiZWxvbmcKLSAgKiB0byBhbnkgbW9kZWwuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZSAoKTsKLQotICAvKioKLSAgKiBTZXRzIHRoZSBuYW1lIG9mIHRoaXMgZWxlbWVudCBhbmQgdXBkYXRlcyB0aGUgIm5hbWUiIHByb3BlcnR5LgotICAqIEV2ZXJ5IGVsZW1lbnQgaW5jbHVkZXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIChzZWUgUHJvcGVydHkuTkFNRSkKLSAgKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2FtZSBzdHJpbmcgYXMgcGFzc2VkIGludG8gc2V0TmFtZSgpLgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoaXMgZWxlbWVudC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZSAoIFN0cmluZyBuYW1lICk7Ci0KLSAgLyoqCi0gICoKLSAgKi8KLSAgcHVibGljIHZvaWQgYWRkTGlzdGVuZXIgKCBFbGVtZW50TGlzdGVuZXIgbGlzdGVuZXIgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgZWxlbWVudC4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbmFtZSBvZiB0aGlzIGVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKTsKLQotICAvKioKLSAgKiBBZGRzIG9yIHNldHMgYSBwcm9wZXJ0eSBvZiB0aGlzIGVsZW1lbnQuCi0gICogUHJvcGVydGllcyBzZXQgdXNpbmcgdGhpcyBtZXRob2QgY2FuIGJlIHJldHJpZXZlZCB1c2luZyBlaXRoZXIKLSAgKiB7QGxpbmsgI2dldFByb3BlcnR5IGdldFByb3BlcnR5KCl9IG9yCi0gICoge0BsaW5rICNnZXRQcm9wZXJ0eUFzT2JqZWN0IGdldFByb3BlcnR5QXNPYmplY3QoKX0uCi0gICogRXZlcnkgZWxlbWVudCBpbmNsdWRlcyBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgKHNlZSBQcm9wZXJ0eS5OQU1FKQotICAqIHdob3NlIHZhbHVlIGlzIHRoZSBzYW1lIHN0cmluZyBhcyBwYXNzZWQgaW50byB7QGxpbmsgI3NldE5hbWUgc2V0TmFtZSgpfS4KLSAgKiBBbnkgcHJldmlvdXMgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIHJlcGxhY2VkLgotICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gc2V0LgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eSAoIFByb3BlcnR5IHByb3BlcnR5ICk7Ci0KLSAgLyoqCi0gICogQWRkcyBvciBzZXRzIGEgcHJvcGVydHkgb2YgdGhpcyBlbGVtZW50LgotICAqIFByb3BlcnRpZXMgc2V0IHVzaW5nIHRoaXMgbWV0aG9kIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgZWl0aGVyCi0gICoge0BsaW5rICNnZXRQcm9wZXJ0eSBnZXRQcm9wZXJ0eSgpfSBvcgotICAqIHtAbGluayAjZ2V0UHJvcGVydHlBc09iamVjdCBnZXRQcm9wZXJ0eUFzT2JqZWN0KCl9LgotICAqIEV2ZXJ5IGVsZW1lbnQgaW5jbHVkZXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIChzZWUgUHJvcGVydHkuTkFNRSkKLSAgKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2FtZSBzdHJpbmcgYXMgcGFzc2VkIGludG8ge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0uCi0gICogQW55IHByZXZpb3VzIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZSBpcyByZXBsYWNlZC4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LgotICAqIEBwYXJhbSB2YWx1ZSBUaGUgT2JqZWN0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5QXNPYmplY3QgKCBTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlICk7Ci0KLSAgLyoqCi0gICogQWRkcyBvciBzZXRzIGEgU3RyaW5nIHByb3BlcnR5IG9mIHRoaXMgZWxlbWVudC4KLSAgKiBQcm9wZXJ0aWVzIHNldCB1c2luZyB0aGlzIG1ldGhvZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIGVpdGhlcgotICAqIHtAbGluayAjZ2V0UHJvcGVydHkgZ2V0UHJvcGVydHkoKX0sCi0gICoge0BsaW5rICNnZXRQcm9wZXJ0eUFzT2JqZWN0IGdldFByb3BlcnR5QXNPYmplY3QoKX0gb3IKLSAgKiB7QGxpbmsgI2dldFByb3BlcnR5QXNTdHJpbmcgZ2V0UHJvcGVydHlBc1N0cmluZygpfS4KLSAgKiBFdmVyeSBlbGVtZW50IGluY2x1ZGVzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiAoc2VlIFByb3BlcnR5Lk5BTUUpCi0gICogd2hvc2UgdmFsdWUgaXMgdGhlIHNhbWUgc3RyaW5nIGFzIHBhc3NlZCBpbnRvIHtAbGluayAjc2V0TmFtZSBzZXROYW1lKCl9LgotICAqIEFueSBwcmV2aW91cyBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgcmVwbGFjZWQuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldC4KLSAgKiBAcGFyYW0gdmFsdWUgVGhlIFN0cmluZyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eUFzU3RyaW5nICggU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgYSBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gbmFtZSBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0gICogRXZlcnkgZWxlbWVudCBpbmNsdWRlcyBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgKHNlZSBQcm9wZXJ0eS5OQU1FKQotICAqIHdob3NlIHZhbHVlIGlzIHRoZSBzYW1lIHN0cmluZyBhcyBwYXNzZWQgaW50byB7QGxpbmsgI3NldE5hbWUgc2V0TmFtZSgpfS4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0dXJuLgotICAqIEByZXR1cm4gUHJvcGVydHkgVGhlIHByb3BlcnR5LCBvciBudWxsIGlmIG5vbmUuCi0gICovCi0gIHB1YmxpYyBQcm9wZXJ0eSBnZXRQcm9wZXJ0eSAoIFN0cmluZyBuYW1lICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgT2JqZWN0IHZhbHVlIG9mIGEgcHJvcGVydHkgb2YgdGhlIGdpdmVuIG5hbWUgb3IgbnVsbAotICAqIGlmIHRoZXJlIGlzIG5vbmUuCi0gICogRXZlcnkgZWxlbWVudCBpbmNsdWRlcyBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgKHNlZSBQcm9wZXJ0eS5OQU1FKQotICAqIHdob3NlIHZhbHVlIGlzIHRoZSBzYW1lIHN0cmluZyBhcyBwYXNzZWQgaW50byB7QGxpbmsgI3NldE5hbWUgc2V0TmFtZSgpfS4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0dXJuLgotICAqIEByZXR1cm4gT2JqZWN0IFRoZSBwcm9wZXJ0eSB2YWx1ZSBhcyBhbiBPYmplY3QsIG9yIG51bGwgaWYgbm9uZS4KLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eUFzT2JqZWN0ICggU3RyaW5nIG5hbWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBTdHJpbmcgdmFsdWUgb2YgYSBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gbmFtZSBvciBudWxsCi0gICogaWYgdGhlcmUgaXMgbm9uZS4KLSAgKiBFdmVyeSBlbGVtZW50IGluY2x1ZGVzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiAoc2VlIFByb3BlcnR5Lk5BTUUpCi0gICogd2hvc2UgdmFsdWUgaXMgdGhlIHNhbWUgc3RyaW5nIGFzIHBhc3NlZCBpbnRvIHtAbGluayAjc2V0TmFtZSBzZXROYW1lKCl9LgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byByZXR1cm4uCi0gICogQHJldHVybiBTdHJpbmcgVGhlIHByb3BlcnR5IHZhbHVlIGFzIGEgU3RyaW5nLCBvciBudWxsIGlmIG5vbmUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlBc1N0cmluZyAoIFN0cmluZyBuYW1lICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiBhbGwgcHJvcGVydGllcyBvZiB0aGlzIGVsZW1lbnQuCi0gICogVGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSBwcm9wZXJ0eSB0aGF0IGNhcnJpZXMgdGhlCi0gICogbmFtZSBvZiB0aGlzIGVsZW1lbnQgKHNlZSB7QGxpbmsgI3NldE5hbWUgc2V0TmFtZSgpfSkuCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBBbiBlbnVtZXJhdGlvbiBvZiBhbGwgcHJvcGVydGllcyBvZiB0aGlzIGVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQcm9wZXJ0aWVzICgpOwotCi0gIC8qKgotICAqIENyZWF0ZXMgYSBiaWRpcmVjdGlvbmFsIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgZWxlbWVudCBhbmQgYW5vdGhlci4KLSAgKiBCb3RoIHJlbGF0aW9uc2hpcHMgYXJlIGlkZW50aWZpZWQgYnkgbmFtZXMuIFRoZSBuYW1lcyBvZiBhbGwgdGhlCi0gICogb3V0Ym91bmQgcmVsYXRpb25zaGlwcyBvZiBhIGVsZW1lbnQgbXVzdCBiZSBtdXR1YWxseSB1bmlxdWUuCi0gICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gY29ubmVjdCB0by4KLSAgKiBAcGFyYW0gb3V0Ym91bmRSZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAgdG8gY29udGFpbiB0aGUKLSAgKiBjb25uZWN0aW9uIHRvIHRoZSBlbGVtZW50LgotICAqIEBwYXJhbSBpbmJvdW5kUmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwIHRvIGNvbnRhaW4gdGhlCi0gICogaW52ZXJzZSBjb25uZWN0aW9uIGJhY2sgdG8gdGhpcyBlbGVtZW50LgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBjb25uZWN0aW9uIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LgotICAqIEJvdGggZWxlbWVudHMgbXVzdCBiZWxvbmcgdG8gdGhlIHNhbWUgbW9kZWwsIG90aGVyIGZhbHNlIGlzIHJldHVybmVkLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBjb25uZWN0ICggRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgb3V0Ym91bmRSZWxOYW1lLCBTdHJpbmcgaW5ib3VuZFJlbE5hbWUgKTsKLQotICAvKioKLSAgKiBEaXNtYW50bGVzIHRoZSBjb25uZWN0aW9uIHRvIGFub3RoZXIgZWxlbWVudCBpbiBhIGdpdmVuIHJlbGF0aW9uc2hpcC4KLSAgKiBUaGUgaW52ZXJzZSBjb25uZWN0aW9uIGlzIGFsc28gYXV0b21hdGljYWxseSBkaXNtYW50bGVkLgotICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGRpc2Nvbm5lY3QgZnJvbS4KLSAgKiBAcGFyYW0gb3V0Ym91bmRSZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAgY29udGFpbmluZwotICAqIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBlbGVtZW50LgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBjb25uZWN0aW9uIGlzIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LgotICAqIEJvdGggZWxlbWVudHMgbXVzdCBiZWxvbmcgdG8gdGhlIHNhbWUgbW9kZWwsIG90aGVyIGZhbHNlIGlzIHJldHVybmVkLgotICAqIElmIHRoZSBlbGVtZW50cyBhcmUgbm90IGNvbm5lY3RlZCB0aHJvdWdoIHRoZSBnaXZlbiByZWxhdGlvbnNoaXAsIHRoZW4KLSAgKiBmYWxzZSBpcyByZXR1cm5lZC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gZGlzY29ubmVjdCAoIEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG91dGJvdW5kUmVsTmFtZSApOwotCi0gIC8qKgotICAqIERpc21hbnRsZXMgdGhlIGNvbm5lY3Rpb24gdG8gYWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbiByZWxhdGlvbnNoaXAuCi0gICogVGhlIGludmVyc2UgY29ubmVjdGlvbnMgYXJlIGFsc28gYXV0b21hdGljYWxseSBkaXNtYW50bGVkLgotICAqIEBwYXJhbSBvdXRib3VuZFJlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiBhbGwgY29ubmVjdGlvbnMgYXJlIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LgotICAqIFRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UgaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgYmVsb25nIHRvIGEgbW9kZWwuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGRpc2Nvbm5lY3RSZWwgKCBTdHJpbmcgb3V0Ym91bmRSZWxOYW1lICk7Ci0KLSAgLyoqCi0gICogRGlzbWFudGxlcyBhbGwgY29ubmVjdGlvbnMgZnJvbSB0aGlzIGVsZW1lbnQuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgYWxsIGNvbm5lY3Rpb25zIGFyZSByZW1vdmVkIHN1Y2Nlc3NmdWxseS4KLSAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IGJlbG9uZyB0byBhIG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBkaXNjb25uZWN0QWxsICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb2YgYWxsIGVsZW1lbnRzCi0gICogY29ubmVjdGVkIHRocnUgdGhlIGdpdmVuIHJlbGF0aW9uc2hpcC4KLSAgKiBAcGFyYW0gcmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLgotICAqIEByZXR1cm4gRW51bWVyYXRpb24gVGhlIGVsZW1lbnRzIGluIHRoZSByZWxhdGlvbnNoaXAuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0RWxlbWVudHMgKCBTdHJpbmcgcmVsTmFtZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gcmVsYXRpb25zaGlwLgotICAqIEBwYXJhbSByZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuCi0gICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcmVsYXRpb25zaGlwLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZS4KLSAgKi8KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0TGlzdGVuZXJzKCk7Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZkVsZW1lbnRzICggU3RyaW5nIHJlbE5hbWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSByZWxhdGlvbnNoaXAgb2JqZWN0IG9mIHRoZSBnaXZlbiBuYW1lLgotICAqIEBwYXJhbSByZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuCi0gICogQHJldHVybiBpbnQgVGhlIHJlbGF0aW9uc2hpcC4gVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLgotICAqIEluIG90aGVyIHdvcmRzLCBhbnkgcmVmZXJlbmNlIHRvIGEgcmVsYXRpb25zaGlwIG5hbWUgYXV0b21hdGljYWxseQotICAqIGJyaW5ncyBhIGNvcnJlc3BvbmRpbmcgUmVsIG9iamVjdCBpbnRvIGV4aXN0ZW5jZS4gQ2FyZWxlc3MgbmFtaW5nCi0gICogbWF5IHJlc3VsdCBpbiB0aGUge0BsaW5rICNnZXRSZWxzIGdldFJlbHMoKX0gbWV0aG9kIHJldHVybmluZyBhbiBlbnVtZXJhdGlvbiBvZgotICAqIG1vcmUgcmVsYXRpb25zaGlwcyB0aGFuIHdvdWxkIGJlIG1lYW5pbmdmdWwsIGVmZmljaWVudCBvciB1c2VmdWwuCi0gICovCi0gIHB1YmxpYyBSZWwgZ2V0UmVsICggU3RyaW5nIHJlbE5hbWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIGFsbCBrbm93biByZWxhdGlvbnNoaXBzLgotICAqIEByZXR1cm4gRW51bWVyYXRpb24gVGhlIG91dGJvdW5kIHJlbGF0aW9uc2hpcHMgb2YgdGhlIGVsZW1lbnQuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UmVscyAoKTsKLQotCi0gIC8qCi0gICogVGhlcmUgaXMgYSBuZWVkIHNvbWV0aW1lcyBmb3IgZWFjaCBlbGVtZW50IGluIGEgbW9kZWwgdG8gaGF2ZSBhIHVuaXF1ZSBpZGVudGlmaWVyLgotICAqIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgbGVmdCB0byBhIG5hbWUsIGJ1dCBzaW5jZSB0aGUgZWxlbWVudCBtYWtlciBnaXZlcyBpdCBpdHMgbmFtZQotICAqIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgYSBtb2RlbCBjb3VsZCBoYXZlIHR3byBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIG5hbWUuIElmIHRoZXkgCi0gICogYXJlIHRoZSBzYW1lIGVsZW1lbnQgdHlwZSB0aGVuIHRoZXJlIHdvdWxkIGJlIG5vIHdheSB0byBkaWZmZXJlbmNpYXRlIGJldHdlZW4gdGhlIHR3by4KLSAgKiBUaGUgZm9sbG93aW5nIGdldHRlciBhbmQgc2V0dGVyIHdpbGwgcHJvdmlkZSBhIHVuaXF1ZSBpZGVudGlmaWVyLiBUaGlzIGlkZW50aWZpZXIgd2lsbCBiZSBrbm93biAKLSAgKiBhcyB0aGUgbXVpZCBvciBNb2RlbCBVbmlxdWUgSWRlbnRpZmllci4gVW5saWtlIGEgdXVpZCBpdCB3aWxsIG9ubHkgYmUgYXNzdXJlZCB1bmlxdWVuZXNzIAotICAqIHdpdGhpbiBpdHMgb3duIG1vZGVsLiBUaGUgaW50ZW50aW9uIGlzIHRvIHVzZSBhIHVuaXF1ZSBudW1iZXIgYXBwZW5kZWQgdG8gdGhlIGVuZCAKLSAgKiBvZiB0aGUgbmFtZS4KLSAgKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBnZXR0ZXIKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgdW5pcXVlIGlkZW50aWZpZXIKLSAgKi8KLQotICBwdWJsaWMgU3RyaW5nIGdldE1VSUQoKTsKLSAgCi0gIAotCi0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudEFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnRBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YmMxN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudEFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBUaGlzIGlzIHdoZXJlIHdlIHN0b3JlIGFsbCB0aGUgc3RhdGUgZGF0YSB0aGF0IHZhcmlvdXMgVUlzCi0qIChzdWNoIGFzIHRoZSBOZXdXU0RMQ3JlYXRpb25XaXphcmQpIGNhcHR1cmUgZnJvbSB0aGUgdXNlcgotKiBhbmQgdGhlbiBuZWVkIHRvIHByb2Nlc3MuCi0qLwotcHVibGljIGNsYXNzIEVsZW1lbnRBZGFwdGVyIGltcGxlbWVudHMgRWxlbWVudExpc3RlbmVyCi17Ci0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcHJvcGVydHlBZGRlZCAoIFByb3BlcnR5QWRkRXZlbnQgZXZlbnQgKQotICB7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGluIHRoZSBtb2RlbCBjaGFuZ2VzLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5LCBvbGQgdmFsdWUKLSAgKiBhbmQgbmV3IHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQgKCBQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50ICkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpbiB0aGUgbW9kZWwgaXMgcmVtb3ZlZC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgb2xkIHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCBwcm9wZXJ0eVJlbW92ZWQgKCBQcm9wZXJ0eVJlbW92ZUV2ZW50IGV2ZW50ICkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHkgYW5kIHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCByZWxBZGRlZCAoIFJlbEFkZEV2ZW50IGV2ZW50ICkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHkgYW5kIHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkICggUmVsUmVtb3ZlRXZlbnQgZXZlbnQgKQotICB7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50TGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwOTZmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50TGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBUaGlzIGlzIHdoZXJlIHdlIHN0b3JlIGFsbCB0aGUgc3RhdGUgZGF0YSB0aGF0IHZhcmlvdXMgVUlzCi0qIChzdWNoIGFzIHRoZSBOZXdXU0RMQ3JlYXRpb25XaXphcmQpIGNhcHR1cmUgZnJvbSB0aGUgdXNlcgotKiBhbmQgdGhlbiBuZWVkIHRvIHByb2Nlc3MuCi0qLwotcHVibGljIGludGVyZmFjZSBFbGVtZW50TGlzdGVuZXIKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5QWRkZWQgKCBQcm9wZXJ0eUFkZEV2ZW50IGV2ZW50ICk7Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpbiB0aGUgbW9kZWwgY2hhbmdlcy4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSwgb2xkIHZhbHVlCi0gICogYW5kIG5ldyB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkICggUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCApOwotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaW4gdGhlIG1vZGVsIGlzIHJlbW92ZWQuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHkgYW5kIG9sZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcHJvcGVydHlSZW1vdmVkICggUHJvcGVydHlSZW1vdmVFdmVudCBldmVudCApOwotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcmVsQWRkZWQgKCBSZWxBZGRFdmVudCBldmVudCApOwotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZCAoIFJlbFJlbW92ZUV2ZW50IGV2ZW50ICk7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL01vZGVsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Nb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWE1ZGY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL01vZGVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKioKLSogVGhpcyBpcyB0aGUgYWJzdHJhY3QgY2xhc3MgZm9yIGEgc2ltcGxlIGRhdGEgbW9kZWwgY29uc2lzdGluZyBvZgotKiBhIG5ldHdvcmsgb2YgbmFtZWQgbm9kZXMgKGNsYXNzIE5vZGUpLiBFdmVyeSBub2RlIGNhcnJpZXMgYSBzZXQKLSogb2YgbmFtZWQgcHJvcGVydGllcyAoY2xhc3MgUHJvcGVydHkpLiBOb2RlcyBhcmUgaW50ZXJyZWxhdGVkIGJ5Ci0qIHJlbGF0aW9uc2hpcHMgKGNsYXNzIFJlbCkgYW5kIGNvbm5lY3Rpb25zIChjbGFzcyBDb25uZWN0aW9uKS4KLSogRWFjaCBNb2RlbCBrZWVwcyBhIHJlZ2lzdHJ5IG9mIGFsbCBvZiBpdHMgbm9kZXMsIGFuZCBrZWVwcyBhCi0qIHJlZmVyZW5jZSB0byBvbmUgInJvb3QiIG5vZGUgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN0YXJ0aW5nCi0qIHBvaW50IGZvciBuYXZpZ2F0aW9uLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgTW9kZWwKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBTZXRzIHRoZSBuYW1lIG9mIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kZWwuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUgKCBTdHJpbmcgbmFtZSApOwotCi0gIC8qKgotICAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIG1vZGVsLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBuYW1lIG9mIHRoZSBtb2RlbC4gVGhpcyBtdXN0IG5vdCBiZSBudWxsLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLSAgLyoqCi0gICogU2V0cyBhIG5vZGUgYXMgdGhlIHJvb3Qgb2YgdGhlIG1vZGVsLiBJZiB0aGUgbm9kZSBkb2VzIG5vdAotICAqIGJlbG9uZyB0byBhIG1vZGVsLCB0aGVuIGl0IGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkuIElmIHRoZQotICAqIG5vZGUgYWxyZWFkeSBiZWxvbmdzIHRvIGFub3RoZXIgbW9kZWwsIHRoZW4gdGhlIHJvb3Qgbm9kZQotICAqIGlzIG5vdCBzZXQgYW5kIG1ldGhvZCByZXR1cm5zIGZhbHNlLgotICAqIEBwYXJhbSByb290IFRoZSBub2RlIHRvIHNldCBhcyB0aGUgcm9vdC4gVGhlIG5vZGUgbXVzdAotICAqIGJlbG9uZyBlaXRoZXIgdG8gdGhpcyBtb2RlbCBvciB0byBubyBtb2RlbC4gVGhpcyBtdXN0Ci0gICogbm90IGJlIG51bGwuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIG5vZGUgd2FzIHNldCBhcyB0aGUgcm9vdC4KLSAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBnaXZlbiBub2RlIGFscmVhZHkgYmVsb25ncwotICAqIHRvIGFub3RoZXIgbW9kZWwuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIHNldFJvb3RFbGVtZW50ICggRWxlbWVudCByb290ICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgcm9vdCBub2RlLiBUaGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyBhIG5vZGUKLSAgKiBleGNlcHQgb24gYW4gZW1wdHkgTW9kZWwuIElmIHNldFJvb3ROb2RlKCkgaGFzIG5vdCBiZWVuCi0gICogY2FsbGVkLCBvciBpZiB0aGUgbGFzdCByb290IG5vZGUgd2FzIHJlbW92ZWQgZnJvbSB0aGUgbW9kZWwsCi0gICogdGhlbiB0aGUgbWV0aG9kIHdpbGwgc2VsZWN0IGFuZCByZXR1cm4gYW4gYXJiaXRyYXJ5IG5vZGUgYXMKLSAgKiB0aGUgcm9vdC4gVGhpcyBtZXRob2Qgd2lsbCBjb25zaXN0ZW50bHkgcmV0dXJuIHRoZSBzYW1lIG5vZGUKLSAgKiB1bnRpbCBlaXRoZXIKLSAgKiAoYSkgc2V0Um9vdE5vZGUoKSBpcyBjYWxsZWQgd2l0aCBhIGRpZmZlcmVudCBub2RlIG9yCi0gICogKGIpIHJlbW92ZU5vZGUoKSBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBub2RlIGZyb20gdGhlIG1vZGVsLgotICAqIEByZXR1cm4gTm9kZSBUaGUgY3VycmVudCByb290IG5vZGUsIG9yIG51bGwgaWYgdGhlIG1vZGVsIGlzIGVtcHR5LgotICAqLwotCi0gIHB1YmxpYyBFbGVtZW50IGdldFJvb3RFbGVtZW50ICgpOwotCi0gIC8qKgotICAqIEdldCB0aGUgZWxlbWVudHMgdGhhdCBoYXZlIHRoaXMgbmFtZQotICAqIEBwYXJhbSBTdHJpbmcgbmFtZSB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCAKLSAgKiBAcmV0dXJuIFZlY3RvciBhIHZlY3RvciBvZiBlbGVtZW50cyB0aGF0IGhhdmUgdGhpcyBuYW1lCi0gICogVGhlc2UgZWxlbWVudHMgbWF5IGJlIG9mIGRpZmZlcmVudCB0eXBlcwotICAqKi8KLQotICBwdWJsaWMgVmVjdG9yIGdldEVsZW1lbnRzQnlOYW1lKFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgKiBBZGRzIGEgbm9kZSB0byB0aGUgbW9kZWwuIElmIHRoZSBub2RlIGFscmVhZHkgYmVsb25ncyB0byBhbm90aGVyCi0gICogbW9kZWwgdGhlbiBpdCB3aWxsIG5vdCBiZSBhZGRlZC4KLSAgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0byBhZGQuIFRoaXMgbXVzdCBub3QgYmUgbnVsbC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgbm9kZSB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5LgotICAqIFRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UgaWYgdGhlIGdpdmVuIG5vZGUgYWxyZWFkeSBiZWxvbmdzIHRvCi0gICogdGhlIGN1cnJlbnQgbW9kZWwgb3IgdG8gYW5vdGhlciBtb2RlbC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWRkRWxlbWVudCAoIEVsZW1lbnQgZWxlbWVudCApOwotCi0gIC8qKgotICAqIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIG1vZGVsLgotICAqIEBwYXJhbSBub2RlIFRoZSBub2RlIHRvIHJlbW92ZS4gVGhpcyBtdXN0IG5vdCBiZSBudWxsLgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBub2RlIHdhcyByZW1vdmVkIHN1Y2Nlc3NmdWxseS4KLSAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBnaXZlbiBub2RlIGRvZXMgbm90IGJlbG9uZwotICAqIHRvIHRoaXMgbW9kZWwuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUVsZW1lbnQgKCBFbGVtZW50IGVsZW1lbnQgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIGFsbCBub2RlcyBpbiB0aGUgbW9kZWwgYW5kIGluIG5vCi0gICogcGFydGljdWxhciBvcmRlciwKLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIEFuIGVudW1lcmF0aW9uIG9mIGFsbCBub2RlcyBpbiB0aGUgbW9kZWwuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0RWxlbWVudHMgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBtb2RlbC4KLSAgKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBtb2RlbC4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUuCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZFbGVtZW50cyAoKTsKLQotICAvKioKLSAgKiBEZXRlcm1pbmVzIGlmIHRoaXMgbW9kZWwgY29udGFpbnMgdGhlIGdpdmVuIG5vZGUuCi0gICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdG8gY2hlY2sgZm9yLiBUaGlzIG11c3Qgbm90IGJlIG51bGwuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIG1vZGVsIGNvbnRhaW5zIHRoZSBub2RlLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0VsZW1lbnQgKCBFbGVtZW50IGVsZW1lbnQgKTsKLQotICAvKgotICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBwcm92aWRlIHRoZSBuZXh0IG51bWJlciBpbiB0aGUgcXVldWUgZm9yIHRoZSBNVUlECi0gICoKLSAgKi8KLSAgcHVibGljIGludCBnZXRVbmlxdWVOdW1iZXIoKTsKLQotICAvKgotICAqIGhlcmVzIHdoYXQgd2UgY2FsbCBmcm9tIHRoZSBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBTdHJpbmcgbWFrZU1VSUQoU3RyaW5nIG5hbWUpOwotCi0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2M2QyMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBjbGFzcyBmb3IgcHJvcGVydGllcyBvZiBhIE5vZGUuCi0qIEV2ZXJ5IHByb3BlcnR5IGhhcyBhbiBpbW11dGFibGUgbmFtZSBhbmQgYSB2YWx1ZSBvZiB0eXBlIE9iamVjdC4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIFByb3BlcnR5Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogRXZlcnkgTm9kZSBoYXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIHRoYXQgaXMgZXF1aXZhbGVudAotICAqIHRvIGFuZCBrZXB0IHN5bmNocm9uaXplZCB3aXRoIE5vZGUuZ2V0TmFtZSgpIGFuZCBOb2RlLnNldE5hbWUoKS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJuYW1lIjsKLQotICAvKioKLSAgKiBSZXR1cm5zIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGlzIDxjb2RlPlByb3BlcnR5PC9jb2RlPi4KLSAgKiBQcm9wZXJ0eSBrZXkgYW5kIHZhbHVlIHJlZmVyZW5jZXMgYXJlIGNsb25lZCwKLSAgKiBidXQgdGhlIHZhbHVlIG9iamVjdHMgdGhlbXNlbHZlcyBhcmUgbm90IGNsb25lZC4KLSAgKiBAcmV0dXJuIFByb3BlcnR5IEEgbmV3IFByb3BlcnR5LgotICAqLwotICBwdWJsaWMgUHJvcGVydHkgc2hhbGxvd0Nsb25lICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhpcyBub2RlLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBuYW1lIG9mIHRoaXMgbm9kZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpOwotCi0gIC8qKgotICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuCi0gICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuIEFueSBwcmV2aW91cyB2YWx1ZSBpcyByZXBsYWNlZC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsdWUgKCBPYmplY3QgdmFsdWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LgotICAqIEByZXR1cm4gT2JqZWN0IFRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LCBwb3NzaWJseSBudWxsLgotICAqLwotICBwdWJsaWMgT2JqZWN0IGdldFZhbHVlICgpOwotCi0gIC8qKgotICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgYXMgYSBzdHJpbmcuCi0gICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdG8gc2V0LiBBbnkgcHJldmlvdXMgdmFsdWUgaXMgcmVwbGFjZWQuCi0gICogVGhlIHR5cGUgb2YgdGhlIHByZXZpb3VzIHZhbHVlLCBpZiBhbnksIGlzIG9mIG5vIGNvbnNlcXVlbmNlLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRWYWx1ZUFzU3RyaW5nICggU3RyaW5nIHZhbHVlICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBhcyBhIHN0cmluZy4KLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBhcyBhIHN0cmluZywgcG9zc2libHkgbnVsbC4KLSAgKiBJZiB0aGUgc2V0IHZhbHVlIGlzIGFuIGFyYml0cmFyeSBPYmplY3QsIHRoZW4gT2JqZWN0LnRvU3RyaW5nKCkgaXMKLSAgKiByZXR1cm5lZC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRWYWx1ZUFzU3RyaW5nICgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlBZGRFdmVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlBZGRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTI3Y2ExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5QWRkRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBDYXJyaWVzIGRhdGEgcmVsZXZhbnQgdG8gd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSovCi1wdWJsaWMgY2xhc3MgUHJvcGVydHlBZGRFdmVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFRoZSBtb2RlbCB0aGUgY2hhbmdlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIEJhc2ljRWxlbWVudCBmRWxlbWVudDsKLQotICAvKioKLSAgKiBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICovCi0gIHByb3RlY3RlZCBQcm9wZXJ0eSBmUHJvcGVydHk7Ci0KLSAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm9wZXJ0eSdzIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFByb3BlcnR5QWRkRXZlbnQgKCBCYXNpY0VsZW1lbnQgZWxlbWVudCwgUHJvcGVydHkgcHJvcGVydHkpCi0gIHsKLSAgICBmRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgZlByb3BlcnR5ID0gcHJvcGVydHk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgdGhhdCBjaGFuZ2VkICh0aGF0IHByb2R1Y2VkIHRoaXMgZXZlbnQpLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKi8KLSAgcHVibGljIEJhc2ljRWxlbWVudCBnZXRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICAqIEByZXR1cm4gVGlueU1vZGVsIFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgICovCi0gIHB1YmxpYyBQcm9wZXJ0eSBnZXRQcm9wZXJ0eSAoKQotICB7Ci0gICAgcmV0dXJuIGZQcm9wZXJ0eTsKLSAgfQotCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eUNoYW5nZUV2ZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eUNoYW5nZUV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZjAxMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlDaGFuZ2VFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotLyoqCi0qIENhcnJpZXMgZGF0YSByZWxldmFudCB0byB3aGVuIGEgcHJvcGVydHkgaXMgY2hhbmdlZCBpbiB0aGUgbW9kZWwuCi0qLwotcHVibGljIGNsYXNzIFByb3BlcnR5Q2hhbmdlRXZlbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBUaGUgbW9kZWwgdGhlIGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBCYXNpY0VsZW1lbnQgZkVsZW1lbnQ7Ci0KLSAgLyoqCi0gICogVGhlIHByb3BlcnR5IHRoYXQgY2hhbmdlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIFByb3BlcnR5IGZQcm9wZXJ0eTsKLQotICAvKioKLSAgKiBUaGUgcHJvcGVydHkncyBvbGQgdmFsdWUuCi0gICovCi0gIHByb3RlY3RlZCBQcm9wZXJ0eSBmT2xkUHJvcGVydHk7Ci0KLSAgIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdGhhdCBjaGFuZ2VkLgotICAgKiBAcGFyYW0gb2xkVmFsdWUgVGhlIHByb3BlcnR5J3Mgb2xkIHZhbHVlLgotICAgKiBAcGFyYW0gbmV3VmFsdWUgVGhlIHByb3BlcnR5J3MgbmV3IHZhbHVlLgotICAgKi8KLSAgcHVibGljIFByb3BlcnR5Q2hhbmdlRXZlbnQgKCBCYXNpY0VsZW1lbnQgZWxlbWVudCAsIFByb3BlcnR5IHByb3BlcnR5LCBQcm9wZXJ0eSBvbGRQcm9wZXJ0eSApCi0gIHsKLSAgICBmRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgZlByb3BlcnR5ID0gcHJvcGVydHk7Ci0gICAgZk9sZFByb3BlcnR5ID0gb2xkUHJvcGVydHk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgdGhhdCBjaGFuZ2VkICh0aGF0IHByb2R1Y2VkIHRoaXMgZXZlbnQpLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKi8KLSAgcHVibGljIEJhc2ljRWxlbWVudCBnZXRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgcHJvcGVydHkgdGhhdCBjaGFuZ2VkLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgcHJvcGVydHkgdGhhdCBjaGFuZ2VkLgotICAgKi8KLSAgcHVibGljIFByb3BlcnR5IGdldFByb3BlcnR5ICgpCi0gIHsKLSAgICByZXR1cm4gZlByb3BlcnR5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHByb3BlcnR5J3Mgb2xkIHZhbHVlLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgcHJvcGVydHkncyBvbGQgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgUHJvcGVydHkgZ2V0T2xkUHJvcGVydHkgKCkKLSAgewotICAgIHJldHVybiBmT2xkUHJvcGVydHk7Ci0gIH0KLQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlSZW1vdmVFdmVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlSZW1vdmVFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODFhMTgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5UmVtb3ZlRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBDYXJyaWVzIGRhdGEgcmVsZXZhbnQgdG8gd2hlbiBhIHByb3BlcnR5IGlzIHJlbW92ZWQgZnJvbSB0aGUgbW9kZWwuCi0qLwotcHVibGljIGNsYXNzIFByb3BlcnR5UmVtb3ZlRXZlbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBUaGUgbW9kZWwgdGhlIGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBCYXNpY0VsZW1lbnQgZkVsZW1lbnQ7Ci0KLSAgLyoqCi0gICogVGhlIHByb3BlcnR5IHRoYXQgd2FzIHJlbW92ZWQuCi0gICovCi0gIHByb3RlY3RlZCBQcm9wZXJ0eSBmUHJvcGVydHk7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyByZW1vdmVkLgotICAgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnR5J3MgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgUHJvcGVydHlSZW1vdmVFdmVudCAoIEJhc2ljRWxlbWVudCBlbGVtZW50LCBQcm9wZXJ0eSBwcm9wZXJ0eSkKLSAgewotICAgIGZFbGVtZW50ID0gZWxlbWVudDsKLSAgICBmUHJvcGVydHkgPSBwcm9wZXJ0eTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCB0aGF0IGNoYW5nZWQgKHRoYXQgcHJvZHVjZWQgdGhpcyBldmVudCkuCi0gICAqIEByZXR1cm4gVGlueU1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqLwotICBwdWJsaWMgQmFzaWNFbGVtZW50IGdldEVsZW1lbnQgKCkKLSAgewotICAgIHJldHVybiBmRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCBwcm9wZXJ0eSB0aGF0IHdhcyByZW1vdmVkLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgcHJvcGVydHkgdGhhdCB3YXMgcmVtb3ZlZC4KLSAgICovCi0gIHB1YmxpYyBQcm9wZXJ0eSBnZXRQcm9wZXJ0eSAoKQotICB7Ci0gICAgcmV0dXJuIGZQcm9wZXJ0eTsKLSAgfQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYjI5MmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi0vKioKLSogVGhpcyBpcyB0aGUgYWJzdHJhY3QgY2xhc3MgZm9yIHJlbGF0aW9uc2hpcHMgaW4gYSBNb2RlbC4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIFJlbAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhpcyByZWxhdGlvbnNoaXAuIFJlbGF0aW9uc2hpcCBuYW1lcwotICAqIGNhbm5vdCBiZSBjaGFuZ2VkLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBub2RlIHRoYXQgb3ducyB0aGlzIHJlbGF0aW9uc2hpcC4KLSAgKiBAcmV0dXJuIE5vZGUgVGhlIG5vZGUgdGhhdCBvd25zIHRoaXMgcmVsYXRpb25zaGlwLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbCwgdGhhdCBpcywgcmVsYXRpb25zaGlwcwotICAqIGNhbm5vdCBleGlzdCBpbiB0aGUgYWJzZW5jZSBvZiBhIG5vZGUuCi0gICovCi0gIHB1YmxpYyBFbGVtZW50IGdldFNvdXJjZUVsZW1lbnQoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIGFsbCBub2RlcyBpbiB0aGlzIHJlbGF0aW9uc2hpcC4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIFRoZSBub2RlcyBpbiB0aGlzIHJlbGF0aW9uc2hpcC4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwuCi0gICovCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRUYXJnZXRFbGVtZW50cyAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhpcyByZWxhdGlvbnNoaXAuCi0gICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGlzIHJlbGF0aW9uc2hpcC4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUuCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZUYXJnZXRFbGVtZW50cyAoKTsKLQotICAvKioKLSAgKiBBZGRzIGEgY29ubmVjdGlvbiB0byB0aGlzIHJlbGF0aW9uc2hpcC4gVGhpcyBtZXRob2QgaXMKLSAgKiBpbnRlbmRlZCBmb3IgdXNlIGJ5IGRlcml2YXRpb25zIG9mIHRoZSBNb2RlbCBmcmFtZXdvcmssCi0gICogbm90IGJ5IHVzZXJzIG9mIHRoZSBmcmFtZXdvcmsuIENvbm5lY3Rpb24gb2JqZWN0cyBzaG91bGQKLSAgKiBvbmx5IGJlIGNvbnN0cnVjdGVkLCBhZGRlZCwgcmVtb3ZlZCBhbmQgcmV0cmlldmVkIGJ5Ci0gICogaW1wbGVtZW50YXRpb25zIG9mIHRoZSBOb2RlIGFuZCBSZWwgaW50ZXJmYWNlcy4KLSAgKiBAcGFyYW0gY29ubmVjdGlvbiBUaGUgY29ubmVjdGlvbiB0byBhZGQuCi0gICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb24gKCBDb25uZWN0aW9uIGNvbm5lY3Rpb24gKTsKLQotICAvKioKLSAgKiBSZW1vdmVzIGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcmVsYXRpb25zaGlwLiBUaGlzIG1ldGhvZCBpcwotICAqIGludGVuZGVkIGZvciB1c2UgYnkgZGVyaXZhdGlvbnMgb2YgdGhlIE1vZGVsIGZyYW1ld29yaywKLSAgKiBub3QgYnkgdXNlcnMgb2YgdGhlIGZyYW1ld29yay4gQ29ubmVjdGlvbiBvYmplY3RzIHNob3VsZAotICAqIG9ubHkgYmUgY29uc3RydWN0ZWQsIGFkZGVkLCByZW1vdmVkIGFuZCByZXRyaWV2ZWQgYnkKLSAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIE5vZGUgYW5kIFJlbCBpbnRlcmZhY2VzLgotICAqIEBwYXJhbSBjb25uZWN0aW9uIFRoZSBjb25uZWN0aW9uIHRvIHJlbW92ZS4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiB3YXMgZm91bmQgYW5kIHJlbW92ZWQuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUNvbm5lY3Rpb24gKCBDb25uZWN0aW9uIGNvbm5lY3Rpb24gKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBDb25uZWN0aW9uIG9iamVjdCBmb3IgdGhlIGdpdmVuIHRhcmdldCBub2RlLgotICAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciB1c2UgYnkgZGVyaXZhdGlvbnMgb2YgdGhlIE1vZGVsCi0gICogZnJhbWV3b3JrLCBub3QgYnkgdXNlcnMgb2YgdGhlIGZyYW1ld29yay4gQ29ubmVjdGlvbiBvYmplY3RzCi0gICogc2hvdWxkIG9ubHkgYmUgY29uc3RydWN0ZWQsIGFkZGVkLCByZW1vdmVkIGFuZCByZXRyaWV2ZWQgYnkKLSAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIE5vZGUgYW5kIFJlbCBpbnRlcmZhY2VzLgotICAqIEBwYXJhbSB0YXJnZXROb2RlIFRoZSBub2RlIHRvIGZpbmQgdGhlIENvbm5lY3Rpb24gdG8uCi0gICogQHJldHVybiBDb25uZWN0aW9uIFRoZSBjb25uZWN0aW9uLCBvciBudWxsIGlmIG5vbmUuCi0gICovCi0gIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb25UbyAoIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCApOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWxBZGRFdmVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsQWRkRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNjYzQ5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWxBZGRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBDYXJyaWVzIGRhdGEgcmVsZXZhbnQgdG8gd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSovCi1wdWJsaWMgY2xhc3MgUmVsQWRkRXZlbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBUaGUgbW9kZWwgdGhlIGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBDb25uZWN0aW9uIGZPdXRCb3VuZDsKLQotICAvKioKLSAgKiBUaGUgbW9kZWwgdGhlIGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBDb25uZWN0aW9uIGZJbkJvdW5kOwotCi0gIC8qKgotICAqIFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIFByb3BlcnR5IGZQcm9wZXJ0eTsKLQotIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnR5J3MgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgUmVsQWRkRXZlbnQgKENvbm5lY3Rpb25bXSBwYWlyKQotICB7Ci0gICAgIGZPdXRCb3VuZCA9IHBhaXJbQmFzaWNDb25uZWN0aW9uLk9VVEJPVU5EXTsKLSAgICAgZkluQm91bmQgPSBwYWlyW0Jhc2ljQ29ubmVjdGlvbi5JTkJPVU5EXTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBvdXRib3VuZCBjb25uZWN0aW9uIHRoYXQgY2hhbmdlZCAKLSAgKiovCi0gIHB1YmxpYyBDb25uZWN0aW9uIGdldE91dEJvdW5kQ29ubmVjdGlvbiAoKQotICB7Ci0gICAgcmV0dXJuIGZPdXRCb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjaGFuZ2VkIHJlbCBuYW1lIAotICAqKi8KLSAgcHVibGljIFN0cmluZyBnZXRPdXRCb3VuZFJlbE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZPdXRCb3VuZC5nZXRSZWwoKS5nZXROYW1lKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwKLSAgKiovCi0gIHB1YmxpYyBSZWwgZ2V0T3V0Qm91bmRSZWwoKQotICB7Ci0gICAgcmV0dXJuIGZPdXRCb3VuZC5nZXRSZWwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjaGFuZ2VkIHJlbCBuYW1lIAotICAqKi8KLSAgcHVibGljIFN0cmluZyBnZXRJbkJvdW5kUmVsTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZkluQm91bmQuZ2V0UmVsKCkuZ2V0TmFtZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsCi0gICoqLwotICBwdWJsaWMgUmVsIGdldEluQm91bmRSZWwoKQotICB7Ci0gICAgcmV0dXJuIGZJbkJvdW5kLmdldFJlbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG91dGJvdW5kIGVsZW1lbnQgdGhhdCBjaGFuZ2VkIAotICAqKi8KLSAgcHVibGljIEVsZW1lbnQgZ2V0UGFyZW50RWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZPdXRCb3VuZC5nZXRFbGVtZW50KCk7Ci0gIH0KLQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGluYm91bmQgY29ubmVjdGlvbiB0aGF0IGNoYW5nZWQgCi0gICoqLwotICBwdWJsaWMgRWxlbWVudCBnZXRDaGlsZEVsZW1lbnQgKCkKLSAgewotICAgIHJldHVybiBmSW5Cb3VuZC5nZXRFbGVtZW50KCk7Ci0gIH0KLQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsUmVtb3ZlRXZlbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbFJlbW92ZUV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlOWE2YjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsUmVtb3ZlRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotLyoqCi0qIENhcnJpZXMgZGF0YSByZWxldmFudCB0byB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotKi8KLXB1YmxpYyBjbGFzcyBSZWxSZW1vdmVFdmVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFRoZSBtb2RlbCB0aGUgY2hhbmdlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIENvbm5lY3Rpb24gZk91dEJvdW5kOwotCi0gIC8qKgotICAqIFRoZSBtb2RlbCB0aGUgY2hhbmdlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIENvbm5lY3Rpb24gZkluQm91bmQ7Ci0KLSAgLyoqCi0gICogVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAqLwotICBwcm90ZWN0ZWQgUHJvcGVydHkgZlByb3BlcnR5OwotCi0gCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvcGVydHkncyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBSZWxSZW1vdmVFdmVudCAoQ29ubmVjdGlvbltdIHBhaXIpCi0gIHsKLSAgICAgZk91dEJvdW5kID0gcGFpcltCYXNpY0Nvbm5lY3Rpb24uT1VUQk9VTkRdOwotICAgICBmSW5Cb3VuZCA9IHBhaXJbQmFzaWNDb25uZWN0aW9uLklOQk9VTkRdOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHRoYXQgY2hhbmdlZCAodGhhdCBwcm9kdWNlZCB0aGlzIGV2ZW50KS4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICovCi0gIHB1YmxpYyBDb25uZWN0aW9uIGdldE91dEJvdW5kICgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICAqLwotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRJbkJvdW5kICgpCi0gIHsKLSAgICByZXR1cm4gZkluQm91bmQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwgbmFtZSAKLSAgKiovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3V0Qm91bmRSZWxOYW1lKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQuZ2V0UmVsKCkuZ2V0TmFtZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsCi0gICoqLwotICBwdWJsaWMgUmVsIGdldE91dEJvdW5kUmVsKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQuZ2V0UmVsKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwgbmFtZSAKLSAgKiovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5Cb3VuZFJlbE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZJbkJvdW5kLmdldFJlbCgpLmdldE5hbWUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjaGFuZ2VkIHJlbAotICAqKi8KLSAgcHVibGljIFJlbCBnZXRJbkJvdW5kUmVsKCkKLSAgewotICAgIHJldHVybiBmSW5Cb3VuZC5nZXRSZWwoKTsKLSAgfQotICAKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3V0Ym91bmQgZWxlbWVudCB0aGF0IGNoYW5nZWQgCi0gICoqLwotICBwdWJsaWMgRWxlbWVudCBnZXRPdXRCb3VuZEVsZW1lbnQgKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQuZ2V0RWxlbWVudCgpOwotICB9Ci0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbmJvdW5kIGNvbm5lY3Rpb24gdGhhdCBjaGFuZ2VkIAotICAqKi8KLSAgcHVibGljIEVsZW1lbnQgZ2V0SW5ib3VuZEVsZW1lbnQgKCkKLSAgewotICAgIHJldHVybiBmSW5Cb3VuZC5nZXRFbGVtZW50KCk7Ci0gIH0KLSAgCi0KLSAgCi19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4ZWN1dGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeGVjdXRhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NGE2ODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4ZWN1dGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSogQWxsIEV4dGVuc2lvbnMgd2l0aCBleGVjdHV0YWJsZSBleHRlbnNpb25zIHNob3VsZCBpbXBsZW1lbnQgdGhpcyAKLSogdG8gZml0IG91ciBmcmFtZXdvcmsKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VFeGVjdXRhYmxlCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICAvKioKLSAgKlJldHVybnMgYSB3aXphcmQgZnJhZ21lbnQgZm9yIHRoaXMgZXhlbnRpb24gdHlwZSAKLSAgKgotICAqLwotICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gZ2V0RmluaXNoQ29tbWFuZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDA2OTIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotCi0KLS8qKgotKiBUaGlzIHJlcHJlc2VudHMgYW4gZXh0ZW5zaW9uIGluIHRoZSBwbHVnaW4gcmVnaXN0cnkgCi0qIEl0IGpvYiBpcyB0byBhY3QgYXMgYSBwcm94eSB0byB0aGUgaWNvbmZpZ2VsZW1lbnQKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VFeHRlbnNpb24KLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogSWYgdGhlIGV4dGVuc2lvbiBoYXMgY29kZSB0aGF0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIG9yIGEgZnJhZ21lbnQgYWRkZWQKLSAgKiBAcmV0dXJuIFdlYlNlcnZpY2VFeGVjdXRhYmxlIHRoaXMgaW50ZXJmYWNlIGhvbGRzIGV4ZWN1dGFibGUgY29kZSBhbmQgYSAKLSAgKiBmcmFnbWVudAotICAqLwotICBwdWJsaWMgT2JqZWN0IGdldFdlYlNlcnZpY2VFeGVjdXRhYmxlRXh0ZW5zaW9uKCk7Ci0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgY29uZmlnIGVsZW1lbnQgdGhhdCBob2xkcyB0aGUgZXh0ZW5zaW9uIGluZm8KLSAgKiBAcGFyYW0gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyB2b2lkIHNldENvbmZpZ0VsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpOwotIAotICAvKioKLSAgKiBJZiB0aGUgZXh0ZW5zaW9uIGhhcyBjb2RlIHRoYXQgCi0gICogQHJldHVybiBJQ29uZmlndXJhdGlvbkVsZW1lbnQgRXh0ZW5zaW9uIGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIElDb25maWd1cmF0aW9uRWxlbWVudCBnZXRDb25maWdFbGVtZW50KCk7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MmY3ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkVudmlyb25tZW50U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotCi0KLQotLyoqCi0qIFRoaXMgcmVwcmVzZW50cyBhbiBleHRlbnNpb24gaW4gdGhlIHBsdWdpbiByZWdpc3RyeSAKLSogSXQgam9iIGlzIHRvIGFjdCBhcyBhIHByb3h5IHRvIHRoZSBpY29uZmlnZWxlbWVudAotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbCBpbXBsZW1lbnRzIFdlYlNlcnZpY2VFeHRlbnNpb24KLXsKLQotCXByaXZhdGUgSUxvZwlsb2dfOwotCQotICAvKgotICAqIFRoZSBDb25maWdFbGVtZW50IHRoYXQgaG9sZHMgZXh0ZW5zaW9uIGluZm8KLSAgKi8KLSAgcHJvdGVjdGVkIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50XzsKLQotICAvKgotICAqIFRoZSBleHRlbnNpb24gZXhlY3V0YWJsZSAKLSAgKi8KLSAgcHJvdGVjdGVkIFdlYlNlcnZpY2VFeGVjdXRhYmxlIHdlYlNlcnZpY2VFeGVjdXRhYmxlXzsKLSAgCi0KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25JbXBsKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KQotICB7Ci0gICAgY29uZmlnRWxlbWVudF8gPSBjb25maWdFbGVtZW50OwotICAgIGxvZ18gPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotICB9Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogSWYgdGhlIGV4dGVuc2lvbiBoYXMgY29kZSB0aGF0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIG9yIGEgZnJhZ21lbnQgYWRkZWQKLSAgKiBAcmV0dXJuIFdlYlNlcnZpY2VFeGVjdXRhYmxlIHRoaXMgaW50ZXJmYWNlIGhvbGRzIGV4ZWN1dGFibGUgY29kZSBhbmQgYSAKLSAgKiBmcmFnbWVudAotICAqLwotICBwdWJsaWMgT2JqZWN0IGdldFdlYlNlcnZpY2VFeGVjdXRhYmxlRXh0ZW5zaW9uKCkKLSAgewotICAgIGlmKHdlYlNlcnZpY2VFeGVjdXRhYmxlXyAhPSBudWxsKSByZXR1cm4gd2ViU2VydmljZUV4ZWN1dGFibGVfOwotCi0gICAgdHJ5ewotICAgICAgcmV0dXJuIGNvbmZpZ0VsZW1lbnRfLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgfWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpewotICAgICAgbG9nXy5sb2coSUxvZy5FUlJPUiwgNTAyOSwgdGhpcywgImdldFdlYlNlcnZpY2VFeGVjdXRhYmxlRXh0ZW5zaW9uIixlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50IHRoYXQgaG9sZHMgdGhlIGV4dGVuc2lvbiBpbmZvCi0gICogQHBhcmFtIElDb25maWd1cmF0aW9uRWxlbWVudCBFeHRlbnNpb24gZWxlbWVudAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb25maWdFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KQotICB7Ci0gICAgY29uZmlnRWxlbWVudF8gPSBjb25maWdFbGVtZW50OwotICB9CQotCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50IHRoYXQgaG9sZHMgdGhlIGV4dGVuc2lvbiBpbmZvCi0gICogQHJldHVybiBJQ29uZmlndXJhdGlvbkVsZW1lbnQgRXh0ZW5zaW9uIGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIElDb25maWd1cmF0aW9uRWxlbWVudCBnZXRDb25maWdFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBjb25maWdFbGVtZW50XzsKLSAgfQotICAKLSAgLyoqCi0gICogVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBiZWluZyB1c2VkCi0gICogQHJldHVybiBTdHJpbmcgbmFtZSBvZiB0aGlzIGV4dGVuc2lvbgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJuYW1lIiApOwotICB9Ci0KLQotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NmVjY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0OwotCi0KLS8qKgotKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgZXh0ZW5zaW9ucyBmb3IgYSBnaXZlbiBleHRlbnNpb24tcG9pbnQgCi0qIGFsc28gcmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9iamVjdHMgCi0qCi0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkKLXsKLSAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMKLSAgKiBAcmV0dXJuIFRoZSBuYW1lcyBvZiBhbGwgcmVnaXN0ZXJlZCBleHRlbnNpb25zLgotICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZUV4dGVuc2lvbk5hbWVzICgpOwotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9iamVjdCBvZiB0aGUgZ2l2ZW4gbmFtZQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdAotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbiBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZSggU3RyaW5nIG5hbWUpOwotCi0gIC8qKgotICAqIFJldHVybnMgQWxsIGV4dGVudGlvbiBvYmplY3RzIGluIHRoaXMgcmVnaXN0cnkKLSAgKkByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3RzCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uW10gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnMoKTsKLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWQ0ZGY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGEuTGFiZWxzQW5kSWRzOwotCi0KLS8qKgotKiBUaGlzIGlzIGEgZ2VuZXJpYyByZWdpc3RyeSB3aGljaCBzZXRzIHVwIGdlbmVyYWwgY29kZSBpbiBoYW5kbGluZyAgIAotKiBJQ29uZmlnRWxlbWVudHMgZm9yIGFuIGV4dGVuc2lvbgotKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsIGltcGxlbWVudHMgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5Ci17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICAKLSAgcHJpdmF0ZSBIYXNodGFibGUgbmFtZUV4dGVuc2lvblRhYmxlXzsKLSAgcHJpdmF0ZSBWZWN0b3IgaWRfOwotICBwcml2YXRlIFZlY3RvciBsYWJlbF87Ci0gIHByaXZhdGUgTGFiZWxzQW5kSWRzIGxhYmVsc2FuZGlkc187Ci0gICAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsKCkKLSAgewotICAgIG5hbWVFeHRlbnNpb25UYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgbGFiZWxfID0gbmV3IFZlY3RvcigpOwotICAgIGlkXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBsb2FkRXh0ZW5zaW9ucygpOwotICB9Ci0gIAotICAvKioKLSAgKiBDaGlsZHJlbiByZWdpc3RyaWVzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgZXh0ZW5zaW9uIHR5cGVzIAotICAqIEByZXR1cm4gV2Vic2VydmljZUV4dGVuc2lvbiBob2xkcyBhIGNvbmZpZyBlbGVtCi0gICogZm9yIHRoYXQgZXh0ZW5zaW9uIGNhcGFibGUgb2YgY3JlYXRpbmcgYW4gZXhlY3V0YWJsZSBmaWxlCi0gICovCi0gIHB1YmxpYyBhYnN0cmFjdCBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGNyZWF0ZVdlYlNlcnZpY2VFeHRlbnNpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpOwotCi0gIC8qKgotICAqIENoaWxkcmVuIG11c3QgaW1wbGVtZW50IGhvdyB0aGV5IGdldCB0aGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gCi0gICogQHJldHVybiBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBhbiBhcnJheSBvZiBlbGVtZW50cyBwYXJ0aWN1bGFyIHRvIHRoYXQKLSAgKiBleHRlbnNpb24KLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IElDb25maWd1cmF0aW9uRWxlbWVudFtdIGdldENvbmZpZ0VsZW1lbnRzKCk7Ci0KLSAgLyoKLSAgKiBMb2FkcyBXZWJTZXJ2aWNlRXh0ZW5zaW9ucyBmb3IgV2ViU2VydmljZUNsaWVudFRlc3QgaW50byB0aGlzIHJlZ2lzdHJ5LgotICAqIFRoaXMgaXMgZG9uZSBieSBxdWVyeWluZyB0aGUgcGx1Z2luIHJlZ2lzdHJ5IGZvciBhbGwgZXh0ZW5zaW9ucwotICAqIHRoYXQgZXh0ZW5kIHdlYlNlcnZpY2VDbGllbnRUZXN0ICAKLSAgKi8KLSAgcHJpdmF0ZSB2b2lkIGxvYWRFeHRlbnNpb25zICgpCi0gIHsgICAgCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnID0gZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxjb25maWcubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBjb25maWdbaWR4XTsKLSAgICAgIFN0cmluZyBsYWJlbCA9IGVsZW0uZ2V0QXR0cmlidXRlKCAibGFiZWwiICk7Ci0gICAgICBTdHJpbmcgaWQgPSAgIGVsZW0uZ2V0QXR0cmlidXRlKCAiaWQiICk7ICAgICAgCi0gICAgICBXZWJTZXJ2aWNlRXh0ZW5zaW9uIHdlYlNlcnZpY2VFeHRlbnNpb24gPSBjcmVhdGVXZWJTZXJ2aWNlRXh0ZW5zaW9uKGVsZW0pOwkKLSAgICAgIG5hbWVFeHRlbnNpb25UYWJsZV8ucHV0KGxhYmVsLHdlYlNlcnZpY2VFeHRlbnNpb24pOwotICAgICAgbGFiZWxfLmFkZChsYWJlbCk7Ci0gICAgICBpZF8uYWRkKGlkKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgcmVnaXN0ZXJlZCBleHRlbnNpb25zCi0gICogQHJldHVybiBUaGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucy4KLSAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VFeHRlbnNpb25OYW1lcyAoKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmdbXSluYW1lRXh0ZW5zaW9uVGFibGVfLmtleVNldCgpLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIG5hbWVzIGFuZCBJZHMgCi0gICAqLwotICBwdWJsaWMgTGFiZWxzQW5kSWRzIGdldExhYmVsc0FuZElEcygpCi0gIHsKLSAgCWxhYmVsc2FuZGlkc18gPSBuZXcgTGFiZWxzQW5kSWRzKCk7Ci0gIAlsYWJlbHNhbmRpZHNfLnNldExhYmVsc18oKFN0cmluZ1tdKWxhYmVsXy50b0FycmF5KCBuZXcgU3RyaW5nWzBdICkpOwotICAJbGFiZWxzYW5kaWRzXy5zZXRJZHNfKChTdHJpbmdbXSlpZF8udG9BcnJheSggbmV3IFN0cmluZ1swXSApKTsKLSAgCXJldHVybiBsYWJlbHNhbmRpZHNfOwotICB9Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBleHRlbnNpb24gb2JqZWN0IG9mIHRoZSBnaXZlbiBuYW1lCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdAotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbiBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZSggU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKFdlYlNlcnZpY2VFeHRlbnNpb24pbmFtZUV4dGVuc2lvblRhYmxlXy5nZXQobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIEFsbCBleHRlbnRpb24gb2JqZWN0cyBpbiB0aGlzIHJlZ2lzdHJ5Ci0gICpAcmV0dXJuIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0cwotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbltdIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zKCkKLSAgewotICAgIHJldHVybiAoV2ViU2VydmljZUV4dGVuc2lvbltdKW5hbWVFeHRlbnNpb25UYWJsZV8udmFsdWVzKCkudG9BcnJheSggbmV3IFdlYlNlcnZpY2VFeHRlbnNpb25bMF0gKTsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9BYnN0cmFjdENsaWVudEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQWJzdHJhY3RDbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTI3N2ZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9BYnN0cmFjdENsaWVudEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRmFjdG9yeUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENsaWVudEZyYWdtZW50IGV4dGVuZHMgQ29tbWFuZEZhY3RvcnlGcmFnbWVudAotewotICBwcm90ZWN0ZWQgSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudF87Ci0gIHByb3RlY3RlZCBJRW52aXJvbm1lbnQgICAgICAgZW52aXJvbm1lbnRfOwotICBwcm90ZWN0ZWQgSUNvbnRleHQgICAgICAgICAgY29udGV4dF87Ci0gIHByb3RlY3RlZCBJU2VsZWN0aW9uICAgICAgICBzZWxlY3Rpb25fOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgICAgICAgcHJvamVjdF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgICAgICAgICAgICBtb2R1bGVfOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgICAgICAgZWFyUHJvamVjdF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgICAgICAgICAgICBlYXJfOwotICAgIAotICBwdWJsaWMgQWJzdHJhY3RDbGllbnRGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQoIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7IAotCQotCXdlYlNlcnZpY2VDbGllbnRfID0gZnJhZ21lbnQud2ViU2VydmljZUNsaWVudF87Ci0JZW52aXJvbm1lbnRfICAgICAgPSBmcmFnbWVudC5lbnZpcm9ubWVudF87Ci0JY29udGV4dF8gICAgICAgICAgPSBmcmFnbWVudC5jb250ZXh0XzsKLQlzZWxlY3Rpb25fICAgICAgICA9IGZyYWdtZW50LnNlbGVjdGlvbl87Ci0JbW9kdWxlXyAgICAgICAgICAgPSBmcmFnbWVudC5tb2R1bGVfOwotCWVhcl8gICAgICAgICAgICAgID0gZnJhZ21lbnQuZWFyXzsKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlICkKLSAgewotCXdlYlNlcnZpY2VDbGllbnRfID0gd2ViU2VydmljZTsgIAotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW52aXJvbm1lbnQoIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCApCi0gIHsKLQllbnZpcm9ubWVudF8gPSBlbnZpcm9ubWVudDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dCggSUNvbnRleHQgY29udGV4dCApCi0gIHsJICAKLQljb250ZXh0XyA9IGNvbnRleHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbiggSVNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0Jc2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KCBTdHJpbmcgcHJvamVjdCkKLSAgewotICAgIHByb2plY3RfID0gcHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TW9kdWxlKCBTdHJpbmcgbW9kdWxlICkKLSAgewotCW1vZHVsZV8gPSBtb2R1bGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3QoU3RyaW5nIGVhclByb2plY3QpCi0gIHsKLSAgICBlYXJQcm9qZWN0XyA9IGVhclByb2plY3Q7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotCWVhcl8gPSBlYXI7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fic3RyYWN0U2VydmljZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdmNmQ3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGYWN0b3J5RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2VydmljZUZyYWdtZW50IGV4dGVuZHMgQ29tbWFuZEZhY3RvcnlGcmFnbWVudAotewotICBwcm90ZWN0ZWQgSVdlYlNlcnZpY2Ugd2ViU2VydmljZV87Ci0gIHByb3RlY3RlZCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnRfOwotICBwcm90ZWN0ZWQgSUNvbnRleHQgICAgY29udGV4dF87Ci0gIHByb3RlY3RlZCBJU2VsZWN0aW9uICBzZWxlY3Rpb25fOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgcHJvamVjdF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgICAgICBtb2R1bGVfOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgZWFyUHJvamVjdF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgICAgICBlYXJfOwotICAgIAotICBwdWJsaWMgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCggQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7IAotCQotCXdlYlNlcnZpY2VfICA9IGZyYWdtZW50LndlYlNlcnZpY2VfOwotCWVudmlyb25tZW50XyA9IGZyYWdtZW50LmVudmlyb25tZW50XzsKLQljb250ZXh0XyAgICAgPSBmcmFnbWVudC5jb250ZXh0XzsKLQlzZWxlY3Rpb25fICAgPSBmcmFnbWVudC5zZWxlY3Rpb25fOwotCW1vZHVsZV8gICAgICA9IGZyYWdtZW50Lm1vZHVsZV87Ci0JZWFyXyAgICAgICAgID0gZnJhZ21lbnQuZWFyXzsKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZSB3ZWJTZXJ2aWNlICkKLSAgewotCXdlYlNlcnZpY2VfID0gd2ViU2VydmljZTsgIAotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW52aXJvbm1lbnQoIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCApCi0gIHsKLQllbnZpcm9ubWVudF8gPSBlbnZpcm9ubWVudDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dCggSUNvbnRleHQgY29udGV4dCApCi0gIHsJICAKLQljb250ZXh0XyA9IGNvbnRleHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbiggSVNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0Jc2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KCBTdHJpbmcgcHJvamVjdCkKLSAgewotICAgIHByb2plY3RfID0gcHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TW9kdWxlKCBTdHJpbmcgbW9kdWxlICkKLSAgewotCW1vZHVsZV8gPSBtb2R1bGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3QoU3RyaW5nIGVhclByb2plY3QpCi0gIHsKLSAgICBlYXJQcm9qZWN0XyA9IGVhclByb2plY3Q7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotCWVhcl8gPSBlYXI7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fzc2VtYmxlQ2xpZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9Bc3NlbWJsZUNsaWVudEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMmI1M2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fzc2VtYmxlQ2xpZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgQXNzZW1ibGVDbGllbnRGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQgCi17Ci0gIHB1YmxpYyBBc3NlbWJsZUNsaWVudEZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgQXNzZW1ibGVDbGllbnRGcmFnbWVudCggQXNzZW1ibGVDbGllbnRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VDbGllbnRfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0QXNzZW1ibGUoKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlQ2xpZW50Xy5hc3NlbWJsZSggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9Bc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2M5ZDg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9Bc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0U2VydmljZUZyYWdtZW50IAotewotICBwdWJsaWMgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudCggQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZV8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXRBc3NlbWJsZSgpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VfLmFzc2VtYmxlKCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXBsb3lDbGllbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RlcGxveUNsaWVudEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZWZjMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RlcGxveUNsaWVudEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgRGVwbG95Q2xpZW50RnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENsaWVudEZyYWdtZW50IAotewotICBwdWJsaWMgRGVwbG95Q2xpZW50RnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBEZXBsb3lDbGllbnRGcmFnbWVudCggRGVwbG95Q2xpZW50RnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBEZXBsb3lDbGllbnRGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZUNsaWVudF8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXREZXBsb3koKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlQ2xpZW50Xy5kZXBsb3koIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RlcGxveVNlcnZpY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RlcGxveVNlcnZpY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWJlOTlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXBsb3lTZXJ2aWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCAKLXsKLSAgcHVibGljIERlcGxveVNlcnZpY2VGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIERlcGxveVNlcnZpY2VGcmFnbWVudCggRGVwbG95U2VydmljZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgRGVwbG95U2VydmljZUZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlXyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldERlcGxveSgpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VfLmRlcGxveSggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGV2ZWxvcENsaWVudEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGV2ZWxvcENsaWVudEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZjhlMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RldmVsb3BDbGllbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBEZXZlbG9wQ2xpZW50RnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENsaWVudEZyYWdtZW50IAotewotICBwdWJsaWMgRGV2ZWxvcENsaWVudEZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgRGV2ZWxvcENsaWVudEZyYWdtZW50KCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBEZXZlbG9wQ2xpZW50RnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VDbGllbnRfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0RGV2ZWxvcCgpICkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlQ2xpZW50Xy5kZXZlbG9wKCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXZlbG9wU2VydmljZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzUzODZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXZlbG9wU2VydmljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCAKLXsKLSAgcHVibGljIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBEZXZlbG9wU2VydmljZUZyYWdtZW50KCBEZXZlbG9wU2VydmljZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZV8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXREZXZlbG9wKCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZV8uZGV2ZWxvcCggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvSW5zdGFsbENsaWVudEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvSW5zdGFsbENsaWVudEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNjM3ZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0luc3RhbGxDbGllbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBJbnN0YWxsQ2xpZW50RnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENsaWVudEZyYWdtZW50IAotewotCXByaXZhdGUgSUNvbnRleHQgY29udGV4dF87Ci0JCi0gIHB1YmxpYyBJbnN0YWxsQ2xpZW50RnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQoIEluc3RhbGxDbGllbnRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IEluc3RhbGxDbGllbnRGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZUNsaWVudF8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXRJbnN0YWxsKCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZUNsaWVudF8uaW5zdGFsbCggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KElDb250ZXh0IGNvbnRleHQpCi0gIHsKLQkgIGNvbnRleHRfPWNvbnRleHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JbnN0YWxsU2VydmljZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDdlNjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JbnN0YWxsU2VydmljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLQotcHVibGljIGNsYXNzIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCAKLXsKLQlwcml2YXRlIElDb250ZXh0IGNvbnRleHRfOwotCQotICBwdWJsaWMgSW5zdGFsbFNlcnZpY2VGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQoIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBJbnN0YWxsU2VydmljZUZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlXyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldEluc3RhbGwoKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlXy5pbnN0YWxsKCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgewotCSAgY29udGV4dF89Y29udGV4dDsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9SdW5DbGllbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL1J1bkNsaWVudEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMTliNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL1J1bkNsaWVudEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFJ1bkNsaWVudEZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDbGllbnRGcmFnbWVudCAKLXsKLQlwcml2YXRlIElDb250ZXh0IGNvbnRleHRfOwotCQotICBwdWJsaWMgUnVuQ2xpZW50RnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBSdW5DbGllbnRGcmFnbWVudCggUnVuQ2xpZW50RnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBSdW5DbGllbnRGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZUNsaWVudF8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXRSdW4oKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlQ2xpZW50Xy5ydW4oIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotICB7Ci0JICBjb250ZXh0Xz1jb250ZXh0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvUnVuU2VydmljZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvUnVuU2VydmljZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZmU4OTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL1J1blNlcnZpY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBSdW5TZXJ2aWNlRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCAKLXsKLQkKLQlwcml2YXRlIElDb250ZXh0IGNvbnRleHRfOwotCQotICBwdWJsaWMgUnVuU2VydmljZUZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgUnVuU2VydmljZUZyYWdtZW50KCBSdW5TZXJ2aWNlRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBSdW5TZXJ2aWNlRnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0UnVuKCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZV8ucnVuKCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgewotCSAgY29udGV4dF89Y29udGV4dDsJICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvRGVzY3JpcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L0Rlc2NyaXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwODA3NDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvRGVzY3JpcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRGVzY3JpcHRpb24uamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREZXNjcmlwdGlvbigpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRGVzY3JpcHRpb24gZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFZhbHVlKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERlc2NyaXB0aW9uX1ZhbHVlKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRWYWx1ZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TGFuZyhTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREZXNjcmlwdGlvbl9MYW5nKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5MYW5ndWFnZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldExhbmcoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TGFuZyhTdHJpbmcgdmFsdWUpOwotCi19IC8vIERlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9Eb2N1bWVudFJvb3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L0RvY3VtZW50Um9vdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzA4ODI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L0RvY3VtZW50Um9vdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRG9jdW1lbnRSb290LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG9jdW1lbnQgUm9vdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRSZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdCgpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRSb290IGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWl4ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwLkVudHJ5fS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWl4ZWQ8L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfTWl4ZWQoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGZWF0dXJlTWFwRW50cnkiIG1hbnk9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUZlYXR1cmVNYXAgZ2V0TWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nIG1hcCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WFNJIFNjaGVtYSBMb2NhdGlvbjwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBtb2RlbCBtYXBUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIGtleVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlVHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTWFwIGdldFhTSVNjaGVtYUxvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldERlc2NyaXB0aW9uKERlc2NyaXB0aW9uKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRGVzY3JpcHRpb24gZ2V0RGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbiB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldE5hbWUoTmFtZSkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9OYW1lKCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JTmFtZSBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXROYW1lKE5hbWUgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVnaXN0cnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlZ2lzdHJ5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlZ2lzdHJ5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXRSZWdpc3RyeShSZWdpc3RyeSkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9SZWdpc3RyeSgpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVJlZ2lzdHJ5IGdldFJlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRSZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlZ2lzdHJ5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0UmVnaXN0cnkoUmVnaXN0cnkgdmFsdWUpOwotCi19IC8vIERvY3VtZW50Um9vdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzNkZDM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L05hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogTmFtZS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldE5hbWVfKCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBOYW1lIGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRWYWx1ZShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXROYW1lX1ZhbHVlKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRWYWx1ZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRMYW5nKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldE5hbWVfTGFuZygpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuTGFuZ3VhZ2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRMYW5nKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TGFuZyhTdHJpbmcgdmFsdWUpOwotCi19IC8vIE5hbWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTkyZGEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJlZ2lzdHJ5PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0SWQgPGVtPklkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRSZWYgPGVtPlJlZjwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0UmVnaXN0cnkoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlZ2lzdHJ5IGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldFJlZ2lzdHJ5X05hbWUoKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb259LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldFJlZ2lzdHJ5X0Rlc2NyaXB0aW9uKCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldERlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SWQ8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldElkKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldFJlZ2lzdHJ5X0lkKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRJZCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRJZCA8ZW0+SWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRJZCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0SWQoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TG9jYXRpb24oU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0UmVnaXN0cnlfTG9jYXRpb24oKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldExvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVmPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SZWY8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVmPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRSZWYoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0UmVnaXN0cnlfUmVmKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRSZWYoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0UmVmIDxlbT5SZWY8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlZjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0UmVmKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRSZWYoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBSZWdpc3RyeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnlGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMyNDEzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBSZWdpc3RyeUZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7Ci0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSZWdpc3RyeUZhY3RvcnkgZUlOU1RBTkNFID0gbmV3IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUZhY3RvcnlJbXBsKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRGVzY3JpcHRpb24gY3JlYXRlRGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlOYW1lIGNyZWF0ZU5hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSZWdpc3RyeSBjcmVhdGVSZWdpc3RyeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSZWdpc3RyeVBhY2thZ2UgZ2V0UmVnaXN0cnlQYWNrYWdlKCk7Ci0KLX0gLy9SZWdpc3RyeUZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5UGFja2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnlQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOGYxZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnlQYWNrYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NzAgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeVBhY2thZ2UuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSAqIDx1bD4KLSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gKiA8L3VsPgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIAotICogICAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS5odG1sIGFuZAotICogICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lc3BhY2UuCi0gKiAKLSAqICAgICBUaGlzIHNjaGVtYSBkb2N1bWVudCBkZXNjcmliZXMgdGhlIFhNTCBuYW1lc3BhY2UsIGluIGEgZm9ybQotICogICAgIHN1aXRhYmxlIGZvciBpbXBvcnQgYnkgb3RoZXIgc2NoZW1hIGRvY3VtZW50cy4gIAotICogCi0gKiAgICAgTm90ZSB0aGF0IGxvY2FsIG5hbWVzIGluIHRoaXMgbmFtZXNwYWNlIGFyZSBpbnRlbmRlZCB0byBiZSBkZWZpbmVkCi0gKiAgICAgb25seSBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSBvciBpdHMgc3ViZ3JvdXBzLiAgVGhlCi0gKiAgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkCi0gKiAgICAgbm90IGJlIHVzZWQgd2l0aCBjb25mbGljdGluZyBzZW1hbnRpY3MgYnkgYW55IFdvcmtpbmcgR3JvdXAsCi0gKiAgICAgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2U6Ci0gKiAKLSAqICAgICBiYXNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBwcm92aWRlcyBhIFVSSSB0byBiZSB1c2VkIGFzIHRoZSBiYXNlIGZvciBpbnRlcnByZXRpbmcgYW55Ci0gKiAgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdAotICogICAgICAgICAgYXBwZWFyczsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgQmFzZSBzcGVjaWZpY2F0aW9uLgotICogCi0gKiAgICAgaWQgICAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuCi0gKiAgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwKLSAqICAgICAgICAgIGJ1dCB0aGlzIGF0dHJpYnV0ZSBpcyBpbmNsdWRlZCBoZXJlIHRvIGZhY2lsaXRhdGUgZXhwZXJpbWVudGF0aW9uCi0gKiAgICAgICAgICB3aXRoIHRoZSBtZWNoYW5pc21zIGl0IHByb3Bvc2VzLiAgTm90ZSB0aGF0IGl0IGlzIF9ub3RfIGluY2x1ZGVkCi0gKiAgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4KLSAqIAotICogICAgIGxhbmcgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YKLSAqICAgICAgICAgIGFueSBlbGVtZW50OyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkCi0gKiAgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLgotICogICAKLSAqICAgICBzcGFjZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZQotICogICAgICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcKLSAqICAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMKLSAqICAgICAgICAgIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSB2aXJ0dWUgb2YgaXRzCi0gKiAgICAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIEZhdGhlciAoaW4gYW55IGNvbnRleHQgYXQgYWxsKTogZGVub3RlcyBKb24gQm9zYWssIHRoZSBjaGFpciBvZiAKLSAqICAgICAgICAgIHRoZSBvcmlnaW5hbCBYTUwgV29ya2luZyBHcm91cC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSAKLSAqICAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgCi0gKiAgICAgICAgICBYTUwgQ29vcmRpbmF0aW9uIGdyb3VwczoKLSAqIAotICogICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbgotICogICAgICAgICAgICAgIHRoZSBXM0MgWE1MIFBsZW5hcnkgb24gdGhpcyAxMHRoIGRheSBvZiBGZWJydWFyeSwgMjAwMAotICogICAgICAgICAgICAgIHJlc2VydmVzIGZvciBKb24gQm9zYWsgaW4gcGVycGV0dWl0eSB0aGUgWE1MIG5hbWUKLSAqICAgICAgICAgICAgICB4bWw6RmF0aGVyCi0gKiAgIAotICogVGhpcyBzY2hlbWEgZGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBhbiBhdHRyaWJ1dGUgZ3JvdXAKLSAqICAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieQotICogICAgICAgICBzY2hlbWFzIHdpc2hpbmcgdG8gYWxsb3cgeG1sOmJhc2UsIHhtbDpsYW5nLCB4bWw6c3BhY2Ugb3IgeG1sOmlkCi0gKiAgICAgICAgIGF0dHJpYnV0ZXMgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuCi0gKiAKLSAqICAgICAgICAgVG8gZW5hYmxlIHRoaXMsIHN1Y2ggYSBzY2hlbWEgbXVzdCBpbXBvcnQgdGhpcyBzY2hlbWEKLSAqICAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6Ci0gKiAgICAgICAgICZsdDtzY2hlbWEgLiAuIC4mZ3Q7Ci0gKiAgICAgICAgICAuIC4gLgotICogICAgICAgICAgJmx0O2ltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAqICAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvJmd0OwotICogCi0gKiAgICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMKLSAqICAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLgotICogCi0gKiAgICAgICAgICZsdDt0eXBlIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDthdHRyaWJ1dGVHcm91cCByZWY9InhtbDpzcGVjaWFsQXR0cnMiLyZndDsKLSAqICAKLSAqICAgICAgICAgIHdpbGwgZGVmaW5lIGEgdHlwZSB3aGljaCB3aWxsIHNjaGVtYS12YWxpZGF0ZSBhbiBpbnN0YW5jZQotICogICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzCi0gKiBJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nCi0gKiAgICBwb2xpY3ksIHRoaXMgc2NoZW1hIGRvY3VtZW50IHdpbGwgcGVyc2lzdCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkLgotICogICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZC4KLSAqICAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsCi0gKiAgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hCi0gKiAgICBpdHNlbGYsIG9yIHdpdGggdGhlIFhNTCBuYW1lc3BhY2UgaXRzZWxmLiAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBYTUwKLSAqICAgIFNjaGVtYSBvciBYTUwgbmFtZXNwYWNlcyBjaGFuZ2UsIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZQotICogICAgYWNjb3JkaW5nbHk7IHRoZSB2ZXJzaW9uIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2Qgd2lsbCBub3QgY2hhbmdlLgotICogICAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeUZhY3RvcnkKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBSZWdpc3RyeVBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7Ci0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5BTUUgPSAicmVnaXN0cnkiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSI7Ci0KLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1BSRUZJWCA9ICJyZWdpc3RyeSI7Ci0KLQkvKioKLQkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVJlZ2lzdHJ5UGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5EZXNjcmlwdGlvbkltcGwgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRlc2NyaXB0aW9uSW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGwjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT04gPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT05fX1ZBTFVFID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT05fX0xBTkcgPSAxOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBERVNDUklQVElPTl9GRUFUVVJFX0NPVU5UID0gMjsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGwjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1QgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19NSVhFRCA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVAgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhTSSBTY2hlbWEgTG9jYXRpb248L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fTkFNRSA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVnaXN0cnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19SRUdJU1RSWSA9IDU7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9GRUFUVVJFX0NPVU5UID0gNjsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLk5hbWVJbXBsIDxlbT5OYW1lPC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLk5hbWVJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlQYWNrYWdlSW1wbCNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBOQU1FID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfX1ZBTFVFID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9fTEFORyA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPk5hbWU8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9GRUFUVVJFX0NPVU5UID0gMjsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbCA8ZW0+UmVnaXN0cnk8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlQYWNrYWdlSW1wbCNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBSRUdJU1RSWSA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgUkVHSVNUUllfX05BTUUgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBSRUdJU1RSWV9fREVTQ1JJUFRJT04gPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgUkVHSVNUUllfX0lEID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFJFR0lTVFJZX19MT0NBVElPTiA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgUkVHSVNUUllfX1JFRiA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPlJlZ2lzdHJ5PC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgPSA1OwotCi0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldERlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmFsdWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldFZhbHVlKCkKLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fVmFsdWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiNnZXRMYW5nIDxlbT5MYW5nPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGFuZzwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0TGFuZygpCi0JICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX0xhbmcoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290IDxlbT5Eb2N1bWVudCBSb290PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0RG9jdW1lbnRSb290KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5NaXhlZDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE1peGVkKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRSZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFJlZ2lzdHJ5KCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9SZWdpc3RyeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldE5hbWVfKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWx1ZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRWYWx1ZSgpCi0JICogQHNlZSAjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldE5hbWVfVmFsdWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5MYW5nPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lI2dldExhbmcoKQotCSAqIEBzZWUgI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXROYW1lX0xhbmcoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0UmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldE5hbWUoKQotCSAqIEBzZWUgI2dldFJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRSZWdpc3RyeV9OYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXREZXNjcmlwdGlvbigpCi0JICogQHNlZSAjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldFJlZ2lzdHJ5X0Rlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0SWQgPGVtPklkPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SWQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldElkKCkKLQkgKiBAc2VlICNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0UmVnaXN0cnlfSWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0TG9jYXRpb24oKQotCSAqIEBzZWUgI2dldFJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRSZWdpc3RyeV9Mb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldFJlZiA8ZW0+UmVmPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVmPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRSZWYoKQotCSAqIEBzZWUgI2dldFJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRSZWdpc3RyeV9SZWYoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVJlZ2lzdHJ5RmFjdG9yeSBnZXRSZWdpc3RyeUZhY3RvcnkoKTsKLQotfSAvL1JlZ2lzdHJ5UGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9EZXNjcmlwdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvRGVzY3JpcHRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMWQ5NDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9EZXNjcmlwdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERlc2NyaXB0aW9uSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRlc2NyaXB0aW9uSW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5EZXNjcmlwdGlvbkltcGwjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIERlc2NyaXB0aW9uSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgRGVzY3JpcHRpb24gewotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFOR19FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbGFuZyA9IExBTkdfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRGVzY3JpcHRpb25JbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREZXNjcmlwdGlvbigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKLQkJU3RyaW5nIG9sZFZhbHVlID0gdmFsdWU7Ci0JCXZhbHVlID0gbmV3VmFsdWU7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUUsIG9sZFZhbHVlLCB2YWx1ZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZygpIHsKLQkJcmV0dXJuIGxhbmc7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TGFuZyhTdHJpbmcgbmV3TGFuZykgewotCQlTdHJpbmcgb2xkTGFuZyA9IGxhbmc7Ci0JCWxhbmcgPSBuZXdMYW5nOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkcsIG9sZExhbmcsIGxhbmcpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUU6Ci0JCQkJcmV0dXJuIGdldFZhbHVlKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlyZXR1cm4gZ2V0TGFuZygpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19WQUxVRToKLQkJCQlzZXRWYWx1ZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlzZXRMYW5nKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HOgotCQkJCXNldExhbmcoTEFOR19FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUU6Ci0JCQkJcmV0dXJuIFZBTFVFX0VERUZBVUxUID09IG51bGwgPyB2YWx1ZSAhPSBudWxsIDogIVZBTFVFX0VERUZBVUxULmVxdWFscyh2YWx1ZSk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlyZXR1cm4gTEFOR19FREVGQVVMVCA9PSBudWxsID8gbGFuZyAhPSBudWxsIDogIUxBTkdfRURFRkFVTFQuZXF1YWxzKGxhbmcpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAodmFsdWU6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBsYW5nOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChsYW5nKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vRGVzY3JpcHRpb25JbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTMyZTM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY3ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRG9jdW1lbnRSb290SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuQmFzaWNGZWF0dXJlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG9jdW1lbnQgUm9vdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRSb290SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgRG9jdW1lbnRSb290IHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNaXhlZCgpIDxlbT5NaXhlZDwvZW0+fScgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRNaXhlZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEZlYXR1cmVNYXAgbWl4ZWQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WE1MTlNQcmVmaXhNYXAoKSA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fScgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTWFwIHhNTE5TUHJlZml4TWFwID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhTSVNjaGVtYUxvY2F0aW9uKCkgPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4U0lTY2hlbWFMb2NhdGlvbiA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRG9jdW1lbnRSb290SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290KCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEZlYXR1cmVNYXAgZ2V0TWl4ZWQoKSB7Ci0JCWlmIChtaXhlZCA9PSBudWxsKSB7Ci0JCQltaXhlZCA9IG5ldyBCYXNpY0ZlYXR1cmVNYXAodGhpcywgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEKTsKLQkJfQotCQlyZXR1cm4gbWl4ZWQ7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVNYXAgZ2V0WE1MTlNQcmVmaXhNYXAoKSB7Ci0JCWlmICh4TUxOU1ByZWZpeE1hcCA9PSBudWxsKSB7Ci0JCQl4TUxOU1ByZWZpeE1hcCA9IG5ldyBFY29yZUVNYXAoRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQKTsKLQkJfQotCQlyZXR1cm4geE1MTlNQcmVmaXhNYXA7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVNYXAgZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSB7Ci0JCWlmICh4U0lTY2hlbWFMb2NhdGlvbiA9PSBudWxsKSB7Ci0JCQl4U0lTY2hlbWFMb2NhdGlvbiA9IG5ldyBFY29yZUVNYXAoRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OKTsKLQkJfQotCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERlc2NyaXB0aW9uIGdldERlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKERlc2NyaXB0aW9uKWdldE1peGVkKCkuZ2V0KFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldERlc2NyaXB0aW9uKERlc2NyaXB0aW9uIG5ld0Rlc2NyaXB0aW9uLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgbmV3RGVzY3JpcHRpb24sIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKERlc2NyaXB0aW9uIG5ld0Rlc2NyaXB0aW9uKSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgbmV3RGVzY3JpcHRpb24pOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOYW1lIGdldE5hbWUoKSB7Ci0JCXJldHVybiAoTmFtZSlnZXRNaXhlZCgpLmdldChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldE5hbWUoTmFtZSBuZXdOYW1lLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCBuZXdOYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXROYW1lKE5hbWUgbmV3TmFtZSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgbmV3TmFtZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IGdldFJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gKFJlZ2lzdHJ5KWdldE1peGVkKCkuZ2V0KFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFJlZ2lzdHJ5KFJlZ2lzdHJ5IG5ld1JlZ2lzdHJ5LCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfUmVnaXN0cnkoKSwgbmV3UmVnaXN0cnksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlZ2lzdHJ5KFJlZ2lzdHJ5IG5ld1JlZ2lzdHJ5KSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfUmVnaXN0cnkoKSwgbmV3UmVnaXN0cnkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIENsYXNzIGJhc2VDbGFzcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlpZiAoZmVhdHVyZUlEID49IDApIHsKLQkJCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGZlYXR1cmVJRCwgYmFzZUNsYXNzKSkgewotCQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE1peGVkKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFhNTE5TUHJlZml4TWFwKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFhTSVNjaGVtYUxvY2F0aW9uKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQkJcmV0dXJuIGJhc2ljU2V0RGVzY3JpcHRpb24obnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQkJcmV0dXJuIGJhc2ljU2V0TmFtZShudWxsLCBtc2dzKTsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19SRUdJU1RSWToKLQkJCQkJcmV0dXJuIGJhc2ljU2V0UmVnaXN0cnkobnVsbCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gZ2V0TWl4ZWQoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJcmV0dXJuIGdldFhNTE5TUHJlZml4TWFwKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCXJldHVybiBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19SRUdJU1RSWToKLQkJCQlyZXR1cm4gZ2V0UmVnaXN0cnkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJZ2V0TWl4ZWQoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5jbGVhcigpOwotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuY2xlYXIoKTsKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJc2V0RGVzY3JpcHRpb24oKERlc2NyaXB0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXNldE5hbWUoKE5hbWUpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1JFR0lTVFJZOgotCQkJCXNldFJlZ2lzdHJ5KChSZWdpc3RyeSluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCWdldE1peGVkKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQlzZXREZXNjcmlwdGlvbigoRGVzY3JpcHRpb24pbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlzZXROYW1lKChOYW1lKW51bGwpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1JFR0lTVFJZOgotCQkJCXNldFJlZ2lzdHJ5KChSZWdpc3RyeSludWxsKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCXJldHVybiBtaXhlZCAhPSBudWxsICYmICFtaXhlZC5pc0VtcHR5KCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCXJldHVybiB4TUxOU1ByZWZpeE1hcCAhPSBudWxsICYmICF4TUxOU1ByZWZpeE1hcC5pc0VtcHR5KCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCXJldHVybiB4U0lTY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmICF4U0lTY2hlbWFMb2NhdGlvbi5pc0VtcHR5KCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZ2V0RGVzY3JpcHRpb24oKSAhPSBudWxsOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpICE9IG51bGw7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19SRUdJU1RSWToKLQkJCQlyZXR1cm4gZ2V0UmVnaXN0cnkoKSAhPSBudWxsOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAobWl4ZWQ6ICIpOwotCQlyZXN1bHQuYXBwZW5kKG1peGVkKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vRG9jdW1lbnRSb290SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9OYW1lSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9OYW1lSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2NlZjc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvTmFtZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IE5hbWVJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLk5hbWVJbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLk5hbWVJbXBsI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBOYW1lSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgTmFtZSB7Ci0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQU5HX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBsYW5nID0gTEFOR19FREVGQVVMVDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBOYW1lSW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0TmFtZV8oKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgewotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JCVN0cmluZyBvbGRWYWx1ZSA9IHZhbHVlOwotCQl2YWx1ZSA9IG5ld1ZhbHVlOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZWdpc3RyeVBhY2thZ2UuTkFNRV9fVkFMVUUsIG9sZFZhbHVlLCB2YWx1ZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZygpIHsKLQkJcmV0dXJuIGxhbmc7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TGFuZyhTdHJpbmcgbmV3TGFuZykgewotCQlTdHJpbmcgb2xkTGFuZyA9IGxhbmc7Ci0JCWxhbmcgPSBuZXdMYW5nOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZWdpc3RyeVBhY2thZ2UuTkFNRV9fTEFORywgb2xkTGFuZywgbGFuZykpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXJldHVybiBnZXRWYWx1ZSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlyZXR1cm4gZ2V0TGFuZygpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXNldFZhbHVlKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJc2V0TGFuZygoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJc2V0TGFuZyhMQU5HX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXJldHVybiBWQUxVRV9FREVGQVVMVCA9PSBudWxsID8gdmFsdWUgIT0gbnVsbCA6ICFWQUxVRV9FREVGQVVMVC5lcXVhbHModmFsdWUpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlyZXR1cm4gTEFOR19FREVGQVVMVCA9PSBudWxsID8gbGFuZyAhPSBudWxsIDogIUxBTkdfRURFRkFVTFQuZXF1YWxzKGxhbmcpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAodmFsdWU6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBsYW5nOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChsYW5nKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vTmFtZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZjJjMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeUZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeUZhY3RvcnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFJlZ2lzdHJ5RmFjdG9yeSB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbmQgaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5RmFjdG9yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKLQkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OOiByZXR1cm4gY3JlYXRlRGVzY3JpcHRpb24oKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1Q6IHJldHVybiBjcmVhdGVEb2N1bWVudFJvb3QoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUU6IHJldHVybiBjcmVhdGVOYW1lKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWTogcmV0dXJuIGNyZWF0ZVJlZ2lzdHJ5KCk7Ci0JCQlkZWZhdWx0OgotCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRGVzY3JpcHRpb24gY3JlYXRlRGVzY3JpcHRpb24oKSB7Ci0JCURlc2NyaXB0aW9uSW1wbCBkZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbkltcGwoKTsKLQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEb2N1bWVudFJvb3QgY3JlYXRlRG9jdW1lbnRSb290KCkgewotCQlEb2N1bWVudFJvb3RJbXBsIGRvY3VtZW50Um9vdCA9IG5ldyBEb2N1bWVudFJvb3RJbXBsKCk7Ci0JCXJldHVybiBkb2N1bWVudFJvb3Q7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5hbWUgY3JlYXRlTmFtZSgpIHsKLQkJTmFtZUltcGwgbmFtZSA9IG5ldyBOYW1lSW1wbCgpOwotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgY3JlYXRlUmVnaXN0cnkoKSB7Ci0JCVJlZ2lzdHJ5SW1wbCByZWdpc3RyeSA9IG5ldyBSZWdpc3RyeUltcGwoKTsKLQkJcmV0dXJuIHJlZ2lzdHJ5OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeVBhY2thZ2UgZ2V0UmVnaXN0cnlQYWNrYWdlKCkgewotCQlyZXR1cm4gKFJlZ2lzdHJ5UGFja2FnZSlnZXRFUGFja2FnZSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGRlcHJlY2F0ZWQKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBSZWdpc3RyeVBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKLQkJcmV0dXJuIFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0U7Ci0JfQotCi19IC8vUmVnaXN0cnlGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNzFlN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2OCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJlZ2lzdHJ5PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGwjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlJbXBsI2dldElkIDxlbT5JZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbCNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGwjZ2V0UmVmIDxlbT5SZWY8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFJlZ2lzdHJ5IHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IG5hbWUgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVzY3JpcHRpb24oKSA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBkZXNjcmlwdGlvbiA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWQoKSA8ZW0+SWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldElkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZCgpIDxlbT5JZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0SWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgaWQgPSBJRF9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uKCkgPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvbiA9IExPQ0FUSU9OX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlZigpIDxlbT5SZWY8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFJlZigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlZigpIDxlbT5SZWY8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFJlZigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyByZWYgPSBSRUZfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgUmVnaXN0cnlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXRSZWdpc3RyeSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXROYW1lKCkgewotCQlpZiAobmFtZSA9PSBudWxsKSB7Ci0JCQluYW1lID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KE5hbWUuY2xhc3MsIHRoaXMsIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTkFNRSk7Ci0JCX0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldERlc2NyaXB0aW9uKCkgewotCQlpZiAoZGVzY3JpcHRpb24gPT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24gPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoRGVzY3JpcHRpb24uY2xhc3MsIHRoaXMsIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fREVTQ1JJUFRJT04pOwotCQl9Ci0JCXJldHVybiBkZXNjcmlwdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldElkKCkgewotCQlyZXR1cm4gaWQ7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIG5ld0lkKSB7Ci0JCVN0cmluZyBvbGRJZCA9IGlkOwotCQlpZCA9IG5ld0lkOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0lELCBvbGRJZCwgaWQpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkgewotCQlyZXR1cm4gbG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIG5ld0xvY2F0aW9uKSB7Ci0JCVN0cmluZyBvbGRMb2NhdGlvbiA9IGxvY2F0aW9uOwotCQlsb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0xPQ0FUSU9OLCBvbGRMb2NhdGlvbiwgbG9jYXRpb24pKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFJlZigpIHsKLQkJcmV0dXJuIHJlZjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZWYoU3RyaW5nIG5ld1JlZikgewotCQlTdHJpbmcgb2xkUmVmID0gcmVmOwotCQlyZWYgPSBuZXdSZWY7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fUkVGLCBvbGRSZWYsIHJlZikpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIENsYXNzIGJhc2VDbGFzcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlpZiAoZmVhdHVyZUlEID49IDApIHsKLQkJCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGZlYXR1cmVJRCwgYmFzZUNsYXNzKSkgewotCQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19OQU1FOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE5hbWUoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXREZXNjcmlwdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0lEOgotCQkJCXJldHVybiBnZXRJZCgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0xPQ0FUSU9OOgotCQkJCXJldHVybiBnZXRMb2NhdGlvbigpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX1JFRjoKLQkJCQlyZXR1cm4gZ2V0UmVmKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX05BTUU6Ci0JCQkJZ2V0TmFtZSgpLmNsZWFyKCk7Ci0JCQkJZ2V0TmFtZSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCWdldERlc2NyaXB0aW9uKCkuY2xlYXIoKTsKLQkJCQlnZXREZXNjcmlwdGlvbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0lEOgotCQkJCXNldElkKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19MT0NBVElPTjoKLQkJCQlzZXRMb2NhdGlvbigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fUkVGOgotCQkJCXNldFJlZigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX05BTUU6Ci0JCQkJZ2V0TmFtZSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCWdldERlc2NyaXB0aW9uKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fSUQ6Ci0JCQkJc2V0SWQoSURfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19MT0NBVElPTjoKLQkJCQlzZXRMb2NhdGlvbihMT0NBVElPTl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX1JFRjoKLQkJCQlzZXRSZWYoUkVGX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19OQU1FOgotCQkJCXJldHVybiBuYW1lICE9IG51bGwgJiYgIW5hbWUuaXNFbXB0eSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBkZXNjcmlwdGlvbiAhPSBudWxsICYmICFkZXNjcmlwdGlvbi5pc0VtcHR5KCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fSUQ6Ci0JCQkJcmV0dXJuIElEX0VERUZBVUxUID09IG51bGwgPyBpZCAhPSBudWxsIDogIUlEX0VERUZBVUxULmVxdWFscyhpZCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJcmV0dXJuIExPQ0FUSU9OX0VERUZBVUxUID09IG51bGwgPyBsb2NhdGlvbiAhPSBudWxsIDogIUxPQ0FUSU9OX0VERUZBVUxULmVxdWFscyhsb2NhdGlvbik7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fUkVGOgotCQkJCXJldHVybiBSRUZfRURFRkFVTFQgPT0gbnVsbCA/IHJlZiAhPSBudWxsIDogIVJFRl9FREVGQVVMVC5lcXVhbHMocmVmKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKGlkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChpZCk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbG9jYXRpb246ICIpOwotCQlyZXN1bHQuYXBwZW5kKGxvY2F0aW9uKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCByZWY6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHJlZik7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL1JlZ2lzdHJ5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5UGFja2FnZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNmOWJlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5UGFja2FnZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4NiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5UGFja2FnZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuWE1MVHlwZVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW1wbC5YTUxUeXBlUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215UGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlQYWNrYWdlSW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeVBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgUmVnaXN0cnlQYWNrYWdlIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBkZXNjcmlwdGlvbkVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBkb2N1bWVudFJvb3RFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgbmFtZUVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyByZWdpc3RyeUVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0JICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKLQkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KLQkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0JICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKLQkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAotCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNlTlNfVVJJCi0JICogQHNlZSAjaW5pdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgUmVnaXN0cnlQYWNrYWdlSW1wbCgpIHsKLQkJc3VwZXIoZU5TX1VSSSwgUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCi0JICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKLQkgKiBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGFsbAotCSAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcwotCSAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKLQkgKiB3aXRoIHRoaXMgcGFja2FnZSwgaXRzZWxmLgotCSAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKLQkgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKLQkgKiBhbmQgcmVnaXN0ZXJlZC4gIFRoZSBwYWNrYWdlcyBhcmUgdGhlbiBpbml0aWFsaXplZCBpbiB0d28gc3RlcHM6Ci0JICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKLQkgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bwotCSAqIHRob3NlIG9mIGFub3RoZXIuCi0JICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQotCSAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2VOU19VUkkKLQkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlZ2lzdHJ5UGFja2FnZSBpbml0KCkgewotCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoUmVnaXN0cnlQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCi0JCVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlUmVnaXN0cnlQYWNrYWdlID0gKFJlZ2lzdHJ5UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IFJlZ2lzdHJ5UGFja2FnZUltcGwoKSk7Ci0KLQkJaXNJbml0ZWQgPSB0cnVlOwotCi0JCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcwotCQlYTUxUeXBlUGFja2FnZUltcGwuaW5pdCgpOwotCi0JCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCi0JCVJUSW5kZXhQYWNrYWdlSW1wbCB0aGVSVEluZGV4UGFja2FnZSA9IChSVEluZGV4UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJUSW5kZXhQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUlRJbmRleFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUlRJbmRleFBhY2thZ2UuZU5TX1VSSSkgOiBSVEluZGV4UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJVGF4b25vbXlQYWNrYWdlSW1wbCB0aGVUYXhvbm9teVBhY2thZ2UgPSAoVGF4b25vbXlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVGF4b25vbXlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVGF4b25vbXlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKSA6IFRheG9ub215UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlVURESVJlZ2lzdHJ5UGFja2FnZSA9IChVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFVERElSZWdpc3RyeVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSA6IFVERElSZWdpc3RyeVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0KLQkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSVEluZGV4UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUlRJbmRleFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVUYXhvbm9teVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5mcmVlemUoKTsKLQotCQlyZXR1cm4gdGhlUmVnaXN0cnlQYWNrYWdlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0RGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiBkZXNjcmlwdGlvbkVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZXNjcmlwdGlvbl9WYWx1ZSgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWRlc2NyaXB0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fTGFuZygpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWRlc2NyaXB0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXREb2N1bWVudFJvb3QoKSB7Ci0JCXJldHVybiBkb2N1bWVudFJvb3RFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RG9jdW1lbnRSb290X01peGVkKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X05hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfUmVnaXN0cnkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldE5hbWVfKCkgewotCQlyZXR1cm4gbmFtZUVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXROYW1lX1ZhbHVlKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldE5hbWVfTGFuZygpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKW5hbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldFJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gcmVnaXN0cnlFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0UmVnaXN0cnlfTmFtZSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKXJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0UmVnaXN0cnlfRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlyZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFJlZ2lzdHJ5X0lkKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSZWdpc3RyeV9Mb2NhdGlvbigpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0UmVnaXN0cnlfUmVmKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlGYWN0b3J5IGdldFJlZ2lzdHJ5RmFjdG9yeSgpIHsKLQkJcmV0dXJuIChSZWdpc3RyeUZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcwotCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKLQkJaXNDcmVhdGVkID0gdHJ1ZTsKLQotCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLQkJZGVzY3JpcHRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoREVTQ1JJUFRJT04pOwotCQljcmVhdGVFQXR0cmlidXRlKGRlc2NyaXB0aW9uRUNsYXNzLCBERVNDUklQVElPTl9fVkFMVUUpOwotCQljcmVhdGVFQXR0cmlidXRlKGRlc2NyaXB0aW9uRUNsYXNzLCBERVNDUklQVElPTl9fTEFORyk7Ci0KLQkJZG9jdW1lbnRSb290RUNsYXNzID0gY3JlYXRlRUNsYXNzKERPQ1VNRU5UX1JPT1QpOwotCQljcmVhdGVFQXR0cmlidXRlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX05BTUUpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlkpOwotCi0JCW5hbWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTkFNRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUobmFtZUVDbGFzcywgTkFNRV9fVkFMVUUpOwotCQljcmVhdGVFQXR0cmlidXRlKG5hbWVFQ2xhc3MsIE5BTUVfX0xBTkcpOwotCi0JCXJlZ2lzdHJ5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFJFR0lTVFJZKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShyZWdpc3RyeUVDbGFzcywgUkVHSVNUUllfX05BTUUpOwotCQljcmVhdGVFUmVmZXJlbmNlKHJlZ2lzdHJ5RUNsYXNzLCBSRUdJU1RSWV9fREVTQ1JJUFRJT04pOwotCQljcmVhdGVFQXR0cmlidXRlKHJlZ2lzdHJ5RUNsYXNzLCBSRUdJU1RSWV9fSUQpOwotCQljcmVhdGVFQXR0cmlidXRlKHJlZ2lzdHJ5RUNsYXNzLCBSRUdJU1RSWV9fTE9DQVRJT04pOwotCQljcmVhdGVFQXR0cmlidXRlKHJlZ2lzdHJ5RUNsYXNzLCBSRUdJU1RSWV9fUkVGKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKLQkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47Ci0JCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0JCS8vIEluaXRpYWxpemUgcGFja2FnZQotCQlzZXROYW1lKGVOQU1FKTsKLQkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7Ci0JCXNldE5zVVJJKGVOU19VUkkpOwotCi0JCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLQkJWE1MVHlwZVBhY2thZ2VJbXBsIHRoZVhNTFR5cGVQYWNrYWdlID0gKFhNTFR5cGVQYWNrYWdlSW1wbClFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShYTUxUeXBlUGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0KLQkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKLQkJaW5pdEVDbGFzcyhkZXNjcmlwdGlvbkVDbGFzcywgRGVzY3JpcHRpb24uY2xhc3MsICJEZXNjcmlwdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIERlc2NyaXB0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVzY3JpcHRpb25fTGFuZygpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRMYW5ndWFnZSgpLCAibGFuZyIsIG51bGwsIDAsIDEsIERlc2NyaXB0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKGRvY3VtZW50Um9vdEVDbGFzcywgRG9jdW1lbnRSb290LmNsYXNzLCAiRG9jdW1lbnRSb290IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgZWNvcmVQYWNrYWdlLmdldEVGZWF0dXJlTWFwRW50cnkoKSwgIm1peGVkIiwgbnVsbCwgMCwgLTEsIG51bGwsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4TUxOU1ByZWZpeE1hcCIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4U0lTY2hlbWFMb2NhdGlvbiIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgdGhpcy5nZXREZXNjcmlwdGlvbigpLCBudWxsLCAiZGVzY3JpcHRpb24iLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgdGhpcy5nZXROYW1lXygpLCBudWxsLCAibmFtZSIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfUmVnaXN0cnkoKSwgdGhpcy5nZXRSZWdpc3RyeSgpLCBudWxsLCAicmVnaXN0cnkiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKG5hbWVFQ2xhc3MsIE5hbWUuY2xhc3MsICJOYW1lIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXROYW1lX1ZhbHVlKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAidmFsdWUiLCBudWxsLCAwLCAxLCBOYW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0TmFtZV9MYW5nKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldExhbmd1YWdlKCksICJsYW5nIiwgbnVsbCwgMCwgMSwgTmFtZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyhyZWdpc3RyeUVDbGFzcywgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeS5jbGFzcywgIlJlZ2lzdHJ5IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RVJlZmVyZW5jZShnZXRSZWdpc3RyeV9OYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5hbWUiLCBudWxsLCAxLCAtMSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0UmVnaXN0cnlfRGVzY3JpcHRpb24oKSwgdGhpcy5nZXREZXNjcmlwdGlvbigpLCBudWxsLCAiZGVzY3JpcHRpb24iLCBudWxsLCAxLCAtMSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0UmVnaXN0cnlfSWQoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJpZCIsIG51bGwsIDAsIDEsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRSZWdpc3RyeV9Mb2NhdGlvbigpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgImxvY2F0aW9uIiwgbnVsbCwgMCwgMSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFJlZ2lzdHJ5X1JlZigpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgInJlZiIsIG51bGwsIDAsIDEsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCS8vIENyZWF0ZSByZXNvdXJjZQotCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKLQotCQkvLyBDcmVhdGUgYW5ub3RhdGlvbnMKLQkJLy8gaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhCi0JCWNyZWF0ZUV4dGVuZGVkTWV0YURhdGFBbm5vdGF0aW9ucygpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpemVzIHRoZSBhbm5vdGF0aW9ucyBmb3IgPGI+aHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhPC9iPi4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKSB7Ci0JCVN0cmluZyBzb3VyY2UgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIjsJCQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChkZXNjcmlwdGlvbkVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiRGVzY3JpcHRpb24iLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREZXNjcmlwdGlvbl9WYWx1ZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICI6MCIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERlc2NyaXB0aW9uX0xhbmcoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJsYW5nIiwKLQkJCSAibmFtZXNwYWNlIiwgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChkb2N1bWVudFJvb3RFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIiIsCi0JCQkgImtpbmQiLCAibWl4ZWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X01peGVkKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnRXaWxkY2FyZCIsCi0JCQkgIm5hbWUiLCAiOm1peGVkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInhtbG5zOnByZWZpeCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ4c2k6c2NoZW1hTG9jYXRpb24iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImRlc2NyaXB0aW9uIiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9OYW1lKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgIm5hbWUiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInJlZ2lzdHJ5IiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKG5hbWVFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIk5hbWUiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXROYW1lX1ZhbHVlKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIjowIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0TmFtZV9MYW5nKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibGFuZyIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAocmVnaXN0cnlFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIlJlZ2lzdHJ5IiwKLQkJCSAia2luZCIsICJlbGVtZW50T25seSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRSZWdpc3RyeV9OYW1lKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgIm5hbWUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0UmVnaXN0cnlfRGVzY3JpcHRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiZGVzY3JpcHRpb24iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0UmVnaXN0cnlfSWQoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJpZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRSZWdpc3RyeV9Mb2NhdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImxvY2F0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFJlZ2lzdHJ5X1JlZigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInJlZiIKLQkJICAgfSk7Ci0JfQotCi19IC8vUmVnaXN0cnlQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5QWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFiMjA1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5QWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUxIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgUmVnaXN0cnlQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlBZGFwdGVyRmFjdG9yeSgpIHsKLQkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7Ci0JCQltb2RlbFBhY2thZ2UgPSBSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKLQkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogVGhlIHN3aXRjaCB0aGUgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFJlZ2lzdHJ5U3dpdGNoIG1vZGVsU3dpdGNoID0KLQkJbmV3IFJlZ2lzdHJ5U3dpdGNoKCkgewotCQkJcHVibGljIE9iamVjdCBjYXNlRGVzY3JpcHRpb24oRGVzY3JpcHRpb24gb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZURlc2NyaXB0aW9uQWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290QWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlTmFtZShOYW1lIG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVOYW1lQWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlUmVnaXN0cnkoUmVnaXN0cnkgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZVJlZ2lzdHJ5QWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOwotCQkJfQotCQl9OwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KLQkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKLQkJcmV0dXJuIChBZGFwdGVyKW1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7Ci0JfQotCi0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVzY3JpcHRpb25BZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290IDxlbT5Eb2N1bWVudCBSb290PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVOYW1lQWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZ2lzdHJ5QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfSAvL1JlZ2lzdHJ5QWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjc4NzIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTEgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRXh0ZW5kZWRNZXRhRGF0YTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VGYWN0b3J5SW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlIEZhY3Rvcnk8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LnV0aWwuUmVnaXN0cnlSZXNvdXJjZUltcGwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFhNTFJlc291cmNlRmFjdG9yeUltcGwgewotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFeHRlbmRlZE1ldGFEYXRhIGV4dGVuZGVkTWV0YURhdGE7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JCWV4dGVuZGVkTWV0YURhdGEgPSBFeHRlbmRlZE1ldGFEYXRhLklOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKSB7Ci0JCVhNTFJlc291cmNlIHJlc3VsdCA9IG5ldyBSZWdpc3RyeVJlc291cmNlSW1wbCh1cmkpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCi0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1NDSEVNQV9MT0NBVElPTiwgQm9vbGVhbi5UUlVFKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOwotCi0JCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9MRVhJQ0FMX0hBTkRMRVIsIEJvb2xlYW4uVFJVRSk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19IC8vUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5UmVzb3VyY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5UmVzb3VyY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYmZjMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTEgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlSW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlIDwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkudXRpbC5SZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5UmVzb3VyY2VJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VJbXBsIHsKLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB1cmkgdGhlIFVSSSBvZiB0aGUgbmV3IHJlc291cmNlLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlSZXNvdXJjZUltcGwoVVJJIHVyaSkgewotCQlzdXBlcih1cmkpOwotCX0KLQotfSAvL1JlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVN3aXRjaC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVN3aXRjaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzkzNzBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlTd2l0Y2guamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5U3dpdGNoLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KLSAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KLSAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKLSAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0Ci0gKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5Ci0gKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKLSAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlTd2l0Y2ggewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgUmVnaXN0cnlQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlTd2l0Y2goKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7Ci0JCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKLQkJfQotCQllbHNlIHsKLQkJCUxpc3QgZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKLQkJCXJldHVybgotCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/Ci0JCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKLQkJCQkJZG9Td2l0Y2goKEVDbGFzcyllU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT046IHsKLQkJCQlEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbil0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1Q6IHsKLQkJCQlEb2N1bWVudFJvb3QgZG9jdW1lbnRSb290ID0gKERvY3VtZW50Um9vdCl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlRG9jdW1lbnRSb290KGRvY3VtZW50Um9vdCk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuTkFNRTogewotCQkJCU5hbWUgbmFtZSA9IChOYW1lKXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VOYW1lKG5hbWUpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZOiB7Ci0JCQkJUmVnaXN0cnkgcmVnaXN0cnkgPSAoUmVnaXN0cnkpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZVJlZ2lzdHJ5KHJlZ2lzdHJ5KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZURlc2NyaXB0aW9uKERlc2NyaXB0aW9uIG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VEb2N1bWVudFJvb3QoRG9jdW1lbnRSb290IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VOYW1lKE5hbWUgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlUmVnaXN0cnkoUmVnaXN0cnkgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfSAvL1JlZ2lzdHJ5U3dpdGNoCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L0Rlc2NyaXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L0Rlc2NyaXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1Nzc2MzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9EZXNjcmlwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEZXNjcmlwdGlvbi5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXg7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREZXNjcmlwdGlvbigpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRGVzY3JpcHRpb24gZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFZhbHVlKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREZXNjcmlwdGlvbl9WYWx1ZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VmFsdWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TGFuZyhTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RGVzY3JpcHRpb25fTGFuZygpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuTGFuZ3VhZ2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRMYW5nKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24jZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TGFuZyhTdHJpbmcgdmFsdWUpOwotCi19IC8vIERlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L0RvY3VtZW50Um9vdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9Eb2N1bWVudFJvb3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUzMzg4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L0RvY3VtZW50Um9vdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRG9jdW1lbnRSb290LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRJbmRleCA8ZW0+SW5kZXg8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERvY3VtZW50Um9vdCgpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRSb290IGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWl4ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwLkVudHJ5fS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWl4ZWQ8L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X01peGVkKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmVhdHVyZU1hcEVudHJ5IiBtYW55PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlGZWF0dXJlTWFwIGdldE1peGVkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YTUxOUyBQcmVmaXggTWFwPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKQotCSAqIEBtb2RlbCBtYXBUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIGtleVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlVHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTWFwIGdldFhNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBtb2RlbCBtYXBUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIGtleVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlVHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTWFwIGdldFhTSVNjaGVtYUxvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldERlc2NyaXB0aW9uKERlc2NyaXB0aW9uKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURlc2NyaXB0aW9uIGdldERlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbiB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmRleDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5kZXg8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5kZXg8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldEluZGV4KEluZGV4KQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERvY3VtZW50Um9vdF9JbmRleCgpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUluZGV4IGdldEluZGV4KCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldEluZGV4IDxlbT5JbmRleDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5kZXg8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldEluZGV4KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRJbmRleChJbmRleCB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldE5hbWUoTmFtZSkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREb2N1bWVudFJvb3RfTmFtZSgpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCU5hbWUgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXROYW1lKE5hbWUgdmFsdWUpOwotCi19IC8vIERvY3VtZW50Um9vdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9JbmRleC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9JbmRleC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGFhNGFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvSW5kZXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogSW5kZXguamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZGV4PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0SW5kZXgoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEluZGV4IGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lfS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldEluZGV4X05hbWUoKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldE5hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9ufS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0SW5kZXhfRGVzY3JpcHRpb24oKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXREZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVnaXN0cnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5fS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlZ2lzdHJ5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVnaXN0cnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0SW5kZXhfUmVnaXN0cnkoKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5IiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXRSZWdpc3RyeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGF4b25vbXk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215fS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRheG9ub215PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0SW5kZXhfVGF4b25vbXkoKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215IiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXRUYXhvbm9teSgpOwotCi19IC8vIEluZGV4CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L05hbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTQ1ZmIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBOYW1lLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldE5hbWVfKCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBOYW1lIGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRWYWx1ZShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0TmFtZV9WYWx1ZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VmFsdWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRMYW5nKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXROYW1lX0xhbmcoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkxhbmd1YWdlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TGFuZygpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TGFuZyhTdHJpbmcgdmFsdWUpOwotCi19IC8vIE5hbWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvUlRJbmRleEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvUlRJbmRleEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRkYjcwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L1JUSW5kZXhGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJUSW5kZXhGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBSVEluZGV4RmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKLQkvKioKLQkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVJUSW5kZXhGYWN0b3J5IGVJTlNUQU5DRSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4RmFjdG9yeUltcGwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlEZXNjcmlwdGlvbiBjcmVhdGVEZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlEb2N1bWVudFJvb3QgY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkluZGV4PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbmRleDwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JSW5kZXggY3JlYXRlSW5kZXgoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JTmFtZSBjcmVhdGVOYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVJUSW5kZXhQYWNrYWdlIGdldFJUSW5kZXhQYWNrYWdlKCk7Ci0KLX0gLy9SVEluZGV4RmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9SVEluZGV4UGFja2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9SVEluZGV4UGFja2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWQyYmQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvUlRJbmRleFBhY2thZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1MCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJUSW5kZXhQYWNrYWdlLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSAqIDx1bD4KLSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gKiA8L3VsPgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIAotICogICAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS5odG1sIGFuZAotICogICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lc3BhY2UuCi0gKiAKLSAqICAgICBUaGlzIHNjaGVtYSBkb2N1bWVudCBkZXNjcmliZXMgdGhlIFhNTCBuYW1lc3BhY2UsIGluIGEgZm9ybQotICogICAgIHN1aXRhYmxlIGZvciBpbXBvcnQgYnkgb3RoZXIgc2NoZW1hIGRvY3VtZW50cy4gIAotICogCi0gKiAgICAgTm90ZSB0aGF0IGxvY2FsIG5hbWVzIGluIHRoaXMgbmFtZXNwYWNlIGFyZSBpbnRlbmRlZCB0byBiZSBkZWZpbmVkCi0gKiAgICAgb25seSBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSBvciBpdHMgc3ViZ3JvdXBzLiAgVGhlCi0gKiAgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkCi0gKiAgICAgbm90IGJlIHVzZWQgd2l0aCBjb25mbGljdGluZyBzZW1hbnRpY3MgYnkgYW55IFdvcmtpbmcgR3JvdXAsCi0gKiAgICAgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2U6Ci0gKiAKLSAqICAgICBiYXNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBwcm92aWRlcyBhIFVSSSB0byBiZSB1c2VkIGFzIHRoZSBiYXNlIGZvciBpbnRlcnByZXRpbmcgYW55Ci0gKiAgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdAotICogICAgICAgICAgYXBwZWFyczsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgQmFzZSBzcGVjaWZpY2F0aW9uLgotICogCi0gKiAgICAgaWQgICAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuCi0gKiAgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwKLSAqICAgICAgICAgIGJ1dCB0aGlzIGF0dHJpYnV0ZSBpcyBpbmNsdWRlZCBoZXJlIHRvIGZhY2lsaXRhdGUgZXhwZXJpbWVudGF0aW9uCi0gKiAgICAgICAgICB3aXRoIHRoZSBtZWNoYW5pc21zIGl0IHByb3Bvc2VzLiAgTm90ZSB0aGF0IGl0IGlzIF9ub3RfIGluY2x1ZGVkCi0gKiAgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4KLSAqIAotICogICAgIGxhbmcgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YKLSAqICAgICAgICAgIGFueSBlbGVtZW50OyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkCi0gKiAgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLgotICogICAKLSAqICAgICBzcGFjZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZQotICogICAgICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcKLSAqICAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMKLSAqICAgICAgICAgIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSB2aXJ0dWUgb2YgaXRzCi0gKiAgICAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIEZhdGhlciAoaW4gYW55IGNvbnRleHQgYXQgYWxsKTogZGVub3RlcyBKb24gQm9zYWssIHRoZSBjaGFpciBvZiAKLSAqICAgICAgICAgIHRoZSBvcmlnaW5hbCBYTUwgV29ya2luZyBHcm91cC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSAKLSAqICAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgCi0gKiAgICAgICAgICBYTUwgQ29vcmRpbmF0aW9uIGdyb3VwczoKLSAqIAotICogICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbgotICogICAgICAgICAgICAgIHRoZSBXM0MgWE1MIFBsZW5hcnkgb24gdGhpcyAxMHRoIGRheSBvZiBGZWJydWFyeSwgMjAwMAotICogICAgICAgICAgICAgIHJlc2VydmVzIGZvciBKb24gQm9zYWsgaW4gcGVycGV0dWl0eSB0aGUgWE1MIG5hbWUKLSAqICAgICAgICAgICAgICB4bWw6RmF0aGVyCi0gKiAgIAotICogVGhpcyBzY2hlbWEgZGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBhbiBhdHRyaWJ1dGUgZ3JvdXAKLSAqICAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieQotICogICAgICAgICBzY2hlbWFzIHdpc2hpbmcgdG8gYWxsb3cgeG1sOmJhc2UsIHhtbDpsYW5nLCB4bWw6c3BhY2Ugb3IgeG1sOmlkCi0gKiAgICAgICAgIGF0dHJpYnV0ZXMgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuCi0gKiAKLSAqICAgICAgICAgVG8gZW5hYmxlIHRoaXMsIHN1Y2ggYSBzY2hlbWEgbXVzdCBpbXBvcnQgdGhpcyBzY2hlbWEKLSAqICAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6Ci0gKiAgICAgICAgICZsdDtzY2hlbWEgLiAuIC4mZ3Q7Ci0gKiAgICAgICAgICAuIC4gLgotICogICAgICAgICAgJmx0O2ltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAqICAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvJmd0OwotICogCi0gKiAgICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMKLSAqICAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLgotICogCi0gKiAgICAgICAgICZsdDt0eXBlIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDthdHRyaWJ1dGVHcm91cCByZWY9InhtbDpzcGVjaWFsQXR0cnMiLyZndDsKLSAqICAKLSAqICAgICAgICAgIHdpbGwgZGVmaW5lIGEgdHlwZSB3aGljaCB3aWxsIHNjaGVtYS12YWxpZGF0ZSBhbiBpbnN0YW5jZQotICogICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzCi0gKiBJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nCi0gKiAgICBwb2xpY3ksIHRoaXMgc2NoZW1hIGRvY3VtZW50IHdpbGwgcGVyc2lzdCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkLgotICogICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZC4KLSAqICAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsCi0gKiAgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hCi0gKiAgICBpdHNlbGYsIG9yIHdpdGggdGhlIFhNTCBuYW1lc3BhY2UgaXRzZWxmLiAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBYTUwKLSAqICAgIFNjaGVtYSBvciBYTUwgbmFtZXNwYWNlcyBjaGFuZ2UsIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZQotICogICAgYWNjb3JkaW5nbHk7IHRoZSB2ZXJzaW9uIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2Qgd2lsbCBub3QgY2hhbmdlLgotICogICAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhGYWN0b3J5Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUlRJbmRleFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7Ci0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5BTUUgPSAicnRpbmRleCI7Ci0KLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19QUkVGSVggPSAicnRpbmRleCI7Ci0KLQkvKioKLQkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVJUSW5kZXhQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRlc2NyaXB0aW9uSW1wbCA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5EZXNjcmlwdGlvbkltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbCNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBERVNDUklQVElPTiA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBERVNDUklQVElPTl9fVkFMVUUgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBERVNDUklQVElPTl9fTEFORyA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OX0ZFQVRVUkVfQ09VTlQgPSAyOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5Eb2N1bWVudFJvb3RJbXBsIDxlbT5Eb2N1bWVudCBSb290PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleFBhY2thZ2VJbXBsI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fTUlYRUQgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTiA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19ERVNDUklQVElPTiA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5kZXg8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19JTkRFWCA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX05BTUUgPSA1OwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfRkVBVFVSRV9DT1VOVCA9IDY7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkluZGV4SW1wbCA8ZW0+SW5kZXg8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5JbmRleEltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbCNnZXRJbmRleCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBJTkRFWCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgSU5ERVhfX05BTUUgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBJTkRFWF9fREVTQ1JJUFRJT04gPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZ2lzdHJ5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBJTkRFWF9fUkVHSVNUUlkgPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBJTkRFWF9fVEFYT05PTVkgPSAzOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5JbmRleDwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBJTkRFWF9GRUFUVVJFX0NPVU5UID0gNDsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuTmFtZUltcGwgPGVtPk5hbWU8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5OYW1lSW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleFBhY2thZ2VJbXBsI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IE5BTUUgPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9fVkFMVUUgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBOQU1FX19MQU5HID0gMTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+TmFtZTwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBOQU1FX0ZFQVRVUkVfQ09VTlQgPSAyOwotCi0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXREZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24jZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmFsdWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24jZ2V0VmFsdWUoKQotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREZXNjcmlwdGlvbl9WYWx1ZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24jZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxhbmc8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24jZ2V0TGFuZygpCi0JICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX0xhbmcoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldERvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5NaXhlZDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0RG9jdW1lbnRSb290X01peGVkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbigpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRJbmRleCA8ZW0+SW5kZXg8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5JbmRleDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0SW5kZXgoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X0luZGV4KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE5hbWUoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X05hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCA8ZW0+SW5kZXg8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW5kZXg8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldEluZGV4KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0TmFtZSgpCi0JICogQHNlZSAjZ2V0SW5kZXgoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldEluZGV4X05hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXREZXNjcmlwdGlvbigpCi0JICogQHNlZSAjZ2V0SW5kZXgoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldEluZGV4X0Rlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldFJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0UmVnaXN0cnkoKQotCSAqIEBzZWUgI2dldEluZGV4KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRJbmRleF9SZWdpc3RyeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlRheG9ub215PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldFRheG9ub215KCkKLQkgKiBAc2VlICNnZXRJbmRleCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0SW5kZXhfVGF4b25vbXkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0TmFtZV8oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmFsdWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSNnZXRWYWx1ZSgpCi0JICogQHNlZSAjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldE5hbWVfVmFsdWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxhbmc8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSNnZXRMYW5nKCkKLQkgKiBAc2VlICNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0TmFtZV9MYW5nKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSVEluZGV4RmFjdG9yeSBnZXRSVEluZGV4RmFjdG9yeSgpOwotCi19IC8vUlRJbmRleFBhY2thZ2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9EZXNjcmlwdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9EZXNjcmlwdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY4Y2I1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvRGVzY3JpcHRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEZXNjcmlwdGlvbkltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRGVzY3JpcHRpb25JbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRGVzY3JpcHRpb25JbXBsI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBEZXNjcmlwdGlvbkltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERlc2NyaXB0aW9uIHsKLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgdmFsdWUgPSBWQUxVRV9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBTkdfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGxhbmcgPSBMQU5HX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIERlc2NyaXB0aW9uSW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREZXNjcmlwdGlvbigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKLQkJU3RyaW5nIG9sZFZhbHVlID0gdmFsdWU7Ci0JCXZhbHVlID0gbmV3VmFsdWU7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OX19WQUxVRSwgb2xkVmFsdWUsIHZhbHVlKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMYW5nKCkgewotCQlyZXR1cm4gbGFuZzsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMYW5nKFN0cmluZyBuZXdMYW5nKSB7Ci0JCVN0cmluZyBvbGRMYW5nID0gbGFuZzsKLQkJbGFuZyA9IG5ld0xhbmc7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HLCBvbGRMYW5nLCBsYW5nKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUU6Ci0JCQkJcmV0dXJuIGdldFZhbHVlKCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HOgotCQkJCXJldHVybiBnZXRMYW5nKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlzZXRMYW5nKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OX19WQUxVRToKLQkJCQlzZXRWYWx1ZShWQUxVRV9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlzZXRMYW5nKExBTkdfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUU6Ci0JCQkJcmV0dXJuIFZBTFVFX0VERUZBVUxUID09IG51bGwgPyB2YWx1ZSAhPSBudWxsIDogIVZBTFVFX0VERUZBVUxULmVxdWFscyh2YWx1ZSk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HOgotCQkJCXJldHVybiBMQU5HX0VERUZBVUxUID09IG51bGwgPyBsYW5nICE9IG51bGwgOiAhTEFOR19FREVGQVVMVC5lcXVhbHMobGFuZyk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiICh2YWx1ZTogIik7Ci0JCXJlc3VsdC5hcHBlbmQodmFsdWUpOwotCQlyZXN1bHQuYXBwZW5kKCIsIGxhbmc6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGxhbmcpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9EZXNjcmlwdGlvbkltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDhkYmMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjcgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEb2N1bWVudFJvb3RJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkJhc2ljRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZUVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRJbmRleCA8ZW0+SW5kZXg8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIERvY3VtZW50Um9vdEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERvY3VtZW50Um9vdCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWl4ZWQoKSA8ZW0+TWl4ZWQ8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TWl4ZWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBGZWF0dXJlTWFwIG1peGVkID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhNTE5TUHJlZml4TWFwKCkgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4TUxOU1ByZWZpeE1hcCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeFNJU2NoZW1hTG9jYXRpb24gPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIERvY3VtZW50Um9vdEltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290KCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEZlYXR1cmVNYXAgZ2V0TWl4ZWQoKSB7Ci0JCWlmIChtaXhlZCA9PSBudWxsKSB7Ci0JCQltaXhlZCA9IG5ldyBCYXNpY0ZlYXR1cmVNYXAodGhpcywgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQl9Ci0JCXJldHVybiBtaXhlZDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU1hcCBnZXRYTUxOU1ByZWZpeE1hcCgpIHsKLQkJaWYgKHhNTE5TUHJlZml4TWFwID09IG51bGwpIHsKLQkJCXhNTE5TUHJlZml4TWFwID0gbmV3IEVjb3JlRU1hcChFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCX0KLQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlpZiAoeFNJU2NoZW1hTG9jYXRpb24gPT0gbnVsbCkgewotCQkJeFNJU2NoZW1hTG9jYXRpb24gPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OKTsKLQkJfQotCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERlc2NyaXB0aW9uIGdldERlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKERlc2NyaXB0aW9uKWdldE1peGVkKCkuZ2V0KFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24gbmV3RGVzY3JpcHRpb24sIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIG5ld0Rlc2NyaXB0aW9uLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBuZXdEZXNjcmlwdGlvbikgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgbmV3RGVzY3JpcHRpb24pOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBJbmRleCBnZXRJbmRleCgpIHsKLQkJcmV0dXJuIChJbmRleClnZXRNaXhlZCgpLmdldChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0luZGV4KCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEluZGV4KEluZGV4IG5ld0luZGV4LCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9JbmRleCgpLCBuZXdJbmRleCwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0SW5kZXgoSW5kZXggbmV3SW5kZXgpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0luZGV4KCksIG5ld0luZGV4KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTmFtZSBnZXROYW1lKCkgewotCQlyZXR1cm4gKE5hbWUpZ2V0TWl4ZWQoKS5nZXQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldE5hbWUoTmFtZSBuZXdOYW1lLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIG5ld05hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWUoTmFtZSBuZXdOYW1lKSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIG5ld05hbWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIENsYXNzIGJhc2VDbGFzcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlpZiAoZmVhdHVyZUlEID49IDApIHsKLQkJCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGZlYXR1cmVJRCwgYmFzZUNsYXNzKSkgewotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0TWl4ZWQoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYTUxOU1ByZWZpeE1hcCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFhTSVNjaGVtYUxvY2F0aW9uKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCQlyZXR1cm4gYmFzaWNTZXREZXNjcmlwdGlvbihudWxsLCBtc2dzKTsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0lOREVYOgotCQkJCQlyZXR1cm4gYmFzaWNTZXRJbmRleChudWxsLCBtc2dzKTsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJCXJldHVybiBiYXNpY1NldE5hbWUobnVsbCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCXJldHVybiBnZXRNaXhlZCgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCXJldHVybiBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCXJldHVybiBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZ2V0RGVzY3JpcHRpb24oKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fSU5ERVg6Ci0JCQkJcmV0dXJuIGdldEluZGV4KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCWdldE1peGVkKCkuY2xlYXIoKTsKLQkJCQlnZXRNaXhlZCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuY2xlYXIoKTsKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQlzZXREZXNjcmlwdGlvbigoRGVzY3JpcHRpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fSU5ERVg6Ci0JCQkJc2V0SW5kZXgoKEluZGV4KW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJc2V0TmFtZSgoTmFtZSluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCXNldERlc2NyaXB0aW9uKChEZXNjcmlwdGlvbiludWxsKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0lOREVYOgotCQkJCXNldEluZGV4KChJbmRleCludWxsKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJc2V0TmFtZSgoTmFtZSludWxsKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIG1peGVkICE9IG51bGwgJiYgIW1peGVkLmlzRW1wdHkoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4geE1MTlNQcmVmaXhNYXAgIT0gbnVsbCAmJiAheE1MTlNQcmVmaXhNYXAuaXNFbXB0eSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCXJldHVybiB4U0lTY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmICF4U0lTY2hlbWFMb2NhdGlvbi5pc0VtcHR5KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpICE9IG51bGw7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0lOREVYOgotCQkJCXJldHVybiBnZXRJbmRleCgpICE9IG51bGw7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKSAhPSBudWxsOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAobWl4ZWQ6ICIpOwotCQlyZXN1bHQuYXBwZW5kKG1peGVkKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vRG9jdW1lbnRSb290SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0luZGV4SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0luZGV4SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGRjMDhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9JbmRleEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IEluZGV4SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbmRleDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuSW5kZXhJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkluZGV4SW1wbCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkluZGV4SW1wbCNnZXRSZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkluZGV4SW1wbCNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmRleEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIEluZGV4IHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IG5hbWUgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVzY3JpcHRpb24oKSA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBkZXNjcmlwdGlvbiA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWdpc3RyeSgpIDxlbT5SZWdpc3RyeTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IHJlZ2lzdHJ5ID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRheG9ub215KCkgPGVtPlRheG9ub215PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgdGF4b25vbXkgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEluZGV4SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXRJbmRleCgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXROYW1lKCkgewotCQlpZiAobmFtZSA9PSBudWxsKSB7Ci0JCQluYW1lID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KE5hbWUuY2xhc3MsIHRoaXMsIFJUSW5kZXhQYWNrYWdlLklOREVYX19OQU1FKTsKLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0RGVzY3JpcHRpb24oKSB7Ci0JCWlmIChkZXNjcmlwdGlvbiA9PSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbiA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChEZXNjcmlwdGlvbi5jbGFzcywgdGhpcywgUlRJbmRleFBhY2thZ2UuSU5ERVhfX0RFU0NSSVBUSU9OKTsKLQkJfQotCQlyZXR1cm4gZGVzY3JpcHRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldFJlZ2lzdHJ5KCkgewotCQlpZiAocmVnaXN0cnkgPT0gbnVsbCkgewotCQkJcmVnaXN0cnkgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoUmVnaXN0cnkuY2xhc3MsIHRoaXMsIFJUSW5kZXhQYWNrYWdlLklOREVYX19SRUdJU1RSWSk7Ci0JCX0KLQkJcmV0dXJuIHJlZ2lzdHJ5OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRUYXhvbm9teSgpIHsKLQkJaWYgKHRheG9ub215ID09IG51bGwpIHsKLQkJCXRheG9ub215ID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFRheG9ub215LmNsYXNzLCB0aGlzLCBSVEluZGV4UGFja2FnZS5JTkRFWF9fVEFYT05PTVkpOwotCQl9Ci0JCXJldHVybiB0YXhvbm9teTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19OQU1FOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE5hbWUoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX0RFU0NSSVBUSU9OOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldERlc2NyaXB0aW9uKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19SRUdJU1RSWToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRSZWdpc3RyeSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fVEFYT05PTVk6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0VGF4b25vbXkoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19SRUdJU1RSWToKLQkJCQlyZXR1cm4gZ2V0UmVnaXN0cnkoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1RBWE9OT01ZOgotCQkJCXJldHVybiBnZXRUYXhvbm9teSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX05BTUU6Ci0JCQkJZ2V0TmFtZSgpLmNsZWFyKCk7Ci0JCQkJZ2V0TmFtZSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fREVTQ1JJUFRJT046Ci0JCQkJZ2V0RGVzY3JpcHRpb24oKS5jbGVhcigpOwotCQkJCWdldERlc2NyaXB0aW9uKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19SRUdJU1RSWToKLQkJCQlnZXRSZWdpc3RyeSgpLmNsZWFyKCk7Ci0JCQkJZ2V0UmVnaXN0cnkoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1RBWE9OT01ZOgotCQkJCWdldFRheG9ub215KCkuY2xlYXIoKTsKLQkJCQlnZXRUYXhvbm9teSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX05BTUU6Ci0JCQkJZ2V0TmFtZSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fREVTQ1JJUFRJT046Ci0JCQkJZ2V0RGVzY3JpcHRpb24oKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1JFR0lTVFJZOgotCQkJCWdldFJlZ2lzdHJ5KCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19UQVhPTk9NWToKLQkJCQlnZXRUYXhvbm9teSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19OQU1FOgotCQkJCXJldHVybiBuYW1lICE9IG51bGwgJiYgIW5hbWUuaXNFbXB0eSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGRlc2NyaXB0aW9uICE9IG51bGwgJiYgIWRlc2NyaXB0aW9uLmlzRW1wdHkoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1JFR0lTVFJZOgotCQkJCXJldHVybiByZWdpc3RyeSAhPSBudWxsICYmICFyZWdpc3RyeS5pc0VtcHR5KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19UQVhPTk9NWToKLQkJCQlyZXR1cm4gdGF4b25vbXkgIT0gbnVsbCAmJiAhdGF4b25vbXkuaXNFbXB0eSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLX0gLy9JbmRleEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9OYW1lSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL05hbWVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNjg1MjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL05hbWVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBOYW1lSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuTmFtZUltcGwjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5OYW1lSW1wbCNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgTmFtZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIE5hbWUgewotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFOR19FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbGFuZyA9IExBTkdfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgTmFtZUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0TmFtZV8oKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgewotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JCVN0cmluZyBvbGRWYWx1ZSA9IHZhbHVlOwotCQl2YWx1ZSA9IG5ld1ZhbHVlOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSVEluZGV4UGFja2FnZS5OQU1FX19WQUxVRSwgb2xkVmFsdWUsIHZhbHVlKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMYW5nKCkgewotCQlyZXR1cm4gbGFuZzsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMYW5nKFN0cmluZyBuZXdMYW5nKSB7Ci0JCVN0cmluZyBvbGRMYW5nID0gbGFuZzsKLQkJbGFuZyA9IG5ld0xhbmc7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJUSW5kZXhQYWNrYWdlLk5BTUVfX0xBTkcsIG9sZExhbmcsIGxhbmcpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXJldHVybiBnZXRWYWx1ZSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXJldHVybiBnZXRMYW5nKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlzZXRWYWx1ZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJc2V0TGFuZygoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlzZXRWYWx1ZShWQUxVRV9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoTEFOR19FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXJldHVybiBWQUxVRV9FREVGQVVMVCA9PSBudWxsID8gdmFsdWUgIT0gbnVsbCA6ICFWQUxVRV9FREVGQVVMVC5lcXVhbHModmFsdWUpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXJldHVybiBMQU5HX0VERUZBVUxUID09IG51bGwgPyBsYW5nICE9IG51bGwgOiAhTEFOR19FREVGQVVMVC5lcXVhbHMobGFuZyk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiICh2YWx1ZTogIik7Ci0JCXJlc3VsdC5hcHBlbmQodmFsdWUpOwotCQlyZXN1bHQuYXBwZW5kKCIsIGxhbmc6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGxhbmcpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9OYW1lSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL1JUSW5kZXhGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL1JUSW5kZXhGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWZhMzNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9SVEluZGV4RmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJUSW5kZXhGYWN0b3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSVEluZGV4RmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBSVEluZGV4RmFjdG9yeSB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbmQgaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJUSW5kZXhGYWN0b3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgewotCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTjogcmV0dXJuIGNyZWF0ZURlc2NyaXB0aW9uKCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1Q6IHJldHVybiBjcmVhdGVEb2N1bWVudFJvb3QoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVg6IHJldHVybiBjcmVhdGVJbmRleCgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FOiByZXR1cm4gY3JlYXRlTmFtZSgpOwotCQkJZGVmYXVsdDoKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERlc2NyaXB0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKCkgewotCQlEZXNjcmlwdGlvbkltcGwgZGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb25JbXBsKCk7Ci0JCXJldHVybiBkZXNjcmlwdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpIHsKLQkJRG9jdW1lbnRSb290SW1wbCBkb2N1bWVudFJvb3QgPSBuZXcgRG9jdW1lbnRSb290SW1wbCgpOwotCQlyZXR1cm4gZG9jdW1lbnRSb290OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBJbmRleCBjcmVhdGVJbmRleCgpIHsKLQkJSW5kZXhJbXBsIGluZGV4ID0gbmV3IEluZGV4SW1wbCgpOwotCQlyZXR1cm4gaW5kZXg7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5hbWUgY3JlYXRlTmFtZSgpIHsKLQkJTmFtZUltcGwgbmFtZSA9IG5ldyBOYW1lSW1wbCgpOwotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUlRJbmRleFBhY2thZ2UgZ2V0UlRJbmRleFBhY2thZ2UoKSB7Ci0JCXJldHVybiAoUlRJbmRleFBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBkZXByZWNhdGVkCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgUlRJbmRleFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKLQkJcmV0dXJuIFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRTsKLQl9Ci0KLX0gLy9SVEluZGV4RmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9SVEluZGV4UGFja2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9SVEluZGV4UGFja2FnZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5NzU1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvUlRJbmRleFBhY2thZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NzMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4UGFja2FnZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5YTUxUeXBlUGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5pbXBsLlhNTFR5cGVQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215UGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlQYWNrYWdlSW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSVEluZGV4UGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBSVEluZGV4UGFja2FnZSB7Ci0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgZGVzY3JpcHRpb25FQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgZG9jdW1lbnRSb290RUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIGluZGV4RUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIG5hbWVFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAotCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0JICogcGFja2FnZSBVUkkgdmFsdWUuCi0JICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYwotCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0JICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKLQkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2VOU19VUkkKLQkgKiBAc2VlICNpbml0KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBSVEluZGV4UGFja2FnZUltcGwoKSB7Ci0JCXN1cGVyKGVOU19VUkksIFJUSW5kZXhGYWN0b3J5LmVJTlNUQU5DRSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCi0JICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKLQkgKiBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGFsbAotCSAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcwotCSAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKLQkgKiB3aXRoIHRoaXMgcGFja2FnZSwgaXRzZWxmLgotCSAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKLQkgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKLQkgKiBhbmQgcmVnaXN0ZXJlZC4gIFRoZSBwYWNrYWdlcyBhcmUgdGhlbiBpbml0aWFsaXplZCBpbiB0d28gc3RlcHM6Ci0JICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKLQkgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bwotCSAqIHRob3NlIG9mIGFub3RoZXIuCi0JICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQotCSAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2VOU19VUkkKLQkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJUSW5kZXhQYWNrYWdlIGluaXQoKSB7Ci0JCWlmIChpc0luaXRlZCkgcmV0dXJuIChSVEluZGV4UGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSVEluZGV4UGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCi0JCVJUSW5kZXhQYWNrYWdlSW1wbCB0aGVSVEluZGV4UGFja2FnZSA9IChSVEluZGV4UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgUlRJbmRleFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgOiBuZXcgUlRJbmRleFBhY2thZ2VJbXBsKCkpOwotCi0JCWlzSW5pdGVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKLQkJWE1MVHlwZVBhY2thZ2VJbXBsLmluaXQoKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcwotCQlUYXhvbm9teVBhY2thZ2VJbXBsIHRoZVRheG9ub215UGFja2FnZSA9IChUYXhvbm9teVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBUYXhvbm9teVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVGF4b25vbXlQYWNrYWdlLmVOU19VUkkpIDogVGF4b25vbXlQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCQlSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVJlZ2lzdHJ5UGFja2FnZSA9IChSZWdpc3RyeVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBSZWdpc3RyeVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIDogUmVnaXN0cnlQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCQlVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVVRERJUmVnaXN0cnlQYWNrYWdlID0gKFVERElSZWdpc3RyeVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVRERJUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVRERJUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIDogVURESVJlZ2lzdHJ5UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQotCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cwotCQl0aGVSVEluZGV4UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSZWdpc3RyeVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVVERElSZWdpc3RyeVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQotCQl0aGVSVEluZGV4UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVRheG9ub215UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVVERElSZWdpc3RyeVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKLQkJdGhlUlRJbmRleFBhY2thZ2UuZnJlZXplKCk7Ci0KLQkJcmV0dXJuIHRoZVJUSW5kZXhQYWNrYWdlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0RGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiBkZXNjcmlwdGlvbkVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZXNjcmlwdGlvbl9WYWx1ZSgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWRlc2NyaXB0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fTGFuZygpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWRlc2NyaXB0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXREb2N1bWVudFJvb3QoKSB7Ci0JCXJldHVybiBkb2N1bWVudFJvb3RFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RG9jdW1lbnRSb290X01peGVkKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X0luZGV4KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X05hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldEluZGV4KCkgewotCQlyZXR1cm4gaW5kZXhFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0SW5kZXhfTmFtZSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWluZGV4RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0SW5kZXhfRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlpbmRleEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldEluZGV4X1JlZ2lzdHJ5KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW5kZXhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbmRleF9UYXhvbm9teSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWluZGV4RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXROYW1lXygpIHsKLQkJcmV0dXJuIG5hbWVFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZV9WYWx1ZSgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKW5hbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXROYW1lX0xhbmcoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSluYW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJUSW5kZXhGYWN0b3J5IGdldFJUSW5kZXhGYWN0b3J5KCkgewotCQlyZXR1cm4gKFJUSW5kZXhGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKLQkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47Ci0JCWlzQ3JlYXRlZCA9IHRydWU7Ci0KLQkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCi0JCWRlc2NyaXB0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFU0NSSVBUSU9OKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkZXNjcmlwdGlvbkVDbGFzcywgREVTQ1JJUFRJT05fX1ZBTFVFKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkZXNjcmlwdGlvbkVDbGFzcywgREVTQ1JJUFRJT05fX0xBTkcpOwotCi0JCWRvY3VtZW50Um9vdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhET0NVTUVOVF9ST09UKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX01JWEVEKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVApOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19ERVNDUklQVElPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19JTkRFWCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19OQU1FKTsKLQotCQlpbmRleEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTkRFWCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoaW5kZXhFQ2xhc3MsIElOREVYX19OQU1FKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShpbmRleEVDbGFzcywgSU5ERVhfX0RFU0NSSVBUSU9OKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShpbmRleEVDbGFzcywgSU5ERVhfX1JFR0lTVFJZKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShpbmRleEVDbGFzcywgSU5ERVhfX1RBWE9OT01ZKTsKLQotCQluYW1lRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5BTUUpOwotCQljcmVhdGVFQXR0cmlidXRlKG5hbWVFQ2xhc3MsIE5BTUVfX1ZBTFVFKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShuYW1lRUNsYXNzLCBOQU1FX19MQU5HKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKLQkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47Ci0JCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0JCS8vIEluaXRpYWxpemUgcGFja2FnZQotCQlzZXROYW1lKGVOQU1FKTsKLQkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7Ci0JCXNldE5zVVJJKGVOU19VUkkpOwotCi0JCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLQkJWE1MVHlwZVBhY2thZ2VJbXBsIHRoZVhNTFR5cGVQYWNrYWdlID0gKFhNTFR5cGVQYWNrYWdlSW1wbClFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShYTUxUeXBlUGFja2FnZS5lTlNfVVJJKTsKLQkJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVSZWdpc3RyeVBhY2thZ2UgPSAoUmVnaXN0cnlQYWNrYWdlSW1wbClFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSk7Ci0JCVRheG9ub215UGFja2FnZUltcGwgdGhlVGF4b25vbXlQYWNrYWdlID0gKFRheG9ub215UGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVGF4b25vbXlQYWNrYWdlLmVOU19VUkkpOwotCi0JCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKLQotCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycwotCQlpbml0RUNsYXNzKGRlc2NyaXB0aW9uRUNsYXNzLCBEZXNjcmlwdGlvbi5jbGFzcywgIkRlc2NyaXB0aW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXREZXNjcmlwdGlvbl9WYWx1ZSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgInZhbHVlIiwgbnVsbCwgMCwgMSwgRGVzY3JpcHRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXREZXNjcmlwdGlvbl9MYW5nKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldExhbmd1YWdlKCksICJsYW5nIiwgbnVsbCwgMCwgMSwgRGVzY3JpcHRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3MoZG9jdW1lbnRSb290RUNsYXNzLCBEb2N1bWVudFJvb3QuY2xhc3MsICJEb2N1bWVudFJvb3QiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUZlYXR1cmVNYXBFbnRyeSgpLCAibWl4ZWQiLCBudWxsLCAwLCAtMSwgbnVsbCwgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgbnVsbCwgInhNTE5TUHJlZml4TWFwIiwgbnVsbCwgMCwgLTEsIG51bGwsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgbnVsbCwgInhTSVNjaGVtYUxvY2F0aW9uIiwgbnVsbCwgMCwgLTEsIG51bGwsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCB0aGlzLmdldERlc2NyaXB0aW9uKCksIG51bGwsICJkZXNjcmlwdGlvbiIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfSW5kZXgoKSwgdGhpcy5nZXRJbmRleCgpLCBudWxsLCAiaW5kZXgiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgdGhpcy5nZXROYW1lXygpLCBudWxsLCAibmFtZSIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3MoaW5kZXhFQ2xhc3MsIEluZGV4LmNsYXNzLCAiSW5kZXgiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldEluZGV4X05hbWUoKSwgdGhpcy5nZXROYW1lXygpLCBudWxsLCAibmFtZSIsIG51bGwsIDEsIC0xLCBJbmRleC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0SW5kZXhfRGVzY3JpcHRpb24oKSwgdGhpcy5nZXREZXNjcmlwdGlvbigpLCBudWxsLCAiZGVzY3JpcHRpb24iLCBudWxsLCAxLCAtMSwgSW5kZXguY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldEluZGV4X1JlZ2lzdHJ5KCksIHRoZVJlZ2lzdHJ5UGFja2FnZS5nZXRSZWdpc3RyeSgpLCBudWxsLCAicmVnaXN0cnkiLCBudWxsLCAwLCAtMSwgSW5kZXguY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldEluZGV4X1RheG9ub215KCksIHRoZVRheG9ub215UGFja2FnZS5nZXRUYXhvbm9teSgpLCBudWxsLCAidGF4b25vbXkiLCBudWxsLCAwLCAtMSwgSW5kZXguY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyhuYW1lRUNsYXNzLCBOYW1lLmNsYXNzLCAiTmFtZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0TmFtZV9WYWx1ZSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgInZhbHVlIiwgbnVsbCwgMCwgMSwgTmFtZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldE5hbWVfTGFuZygpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRMYW5ndWFnZSgpLCAibGFuZyIsIG51bGwsIDAsIDEsIE5hbWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCS8vIENyZWF0ZSByZXNvdXJjZQotCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKLQotCQkvLyBDcmVhdGUgYW5ub3RhdGlvbnMKLQkJLy8gaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhCi0JCWNyZWF0ZUV4dGVuZGVkTWV0YURhdGFBbm5vdGF0aW9ucygpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpemVzIHRoZSBhbm5vdGF0aW9ucyBmb3IgPGI+aHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhPC9iPi4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKSB7Ci0JCVN0cmluZyBzb3VyY2UgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIjsJCQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChkZXNjcmlwdGlvbkVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiRGVzY3JpcHRpb24iLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREZXNjcmlwdGlvbl9WYWx1ZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICI6MCIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERlc2NyaXB0aW9uX0xhbmcoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJsYW5nIiwKLQkJCSAibmFtZXNwYWNlIiwgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChkb2N1bWVudFJvb3RFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIiIsCi0JCQkgImtpbmQiLCAibWl4ZWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X01peGVkKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnRXaWxkY2FyZCIsCi0JCQkgIm5hbWUiLCAiOm1peGVkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInhtbG5zOnByZWZpeCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ4c2k6c2NoZW1hTG9jYXRpb24iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImRlc2NyaXB0aW9uIiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9JbmRleCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJpbmRleCIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfTmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJuYW1lIiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGluZGV4RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJJbmRleCIsCi0JCQkgImtpbmQiLCAiZWxlbWVudE9ubHkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0SW5kZXhfTmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJuYW1lIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldEluZGV4X0Rlc2NyaXB0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImRlc2NyaXB0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldEluZGV4X1JlZ2lzdHJ5KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInJlZ2lzdHJ5IiwKLQkJCSAibmFtZXNwYWNlIiwgImh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldEluZGV4X1RheG9ub215KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInRheG9ub215IiwKLQkJCSAibmFtZXNwYWNlIiwgImh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKG5hbWVFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIk5hbWUiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXROYW1lX1ZhbHVlKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIjowIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0TmFtZV9MYW5nKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibGFuZyIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0JCSAgIH0pOwotCX0KLQotfSAvL1JUSW5kZXhQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWRlNDE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4QWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJUSW5kZXhBZGFwdGVyRmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJUSW5kZXhBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgUlRJbmRleFBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSVEluZGV4QWRhcHRlckZhY3RvcnkoKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKLQkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogVGhlIHN3aXRjaCB0aGUgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFJUSW5kZXhTd2l0Y2ggbW9kZWxTd2l0Y2ggPQotCQluZXcgUlRJbmRleFN3aXRjaCgpIHsKLQkJCXB1YmxpYyBPYmplY3QgY2FzZURlc2NyaXB0aW9uKERlc2NyaXB0aW9uIG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVEZXNjcmlwdGlvbkFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZUluZGV4KEluZGV4IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVJbmRleEFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZU5hbWUoTmFtZSBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlTmFtZUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLQkJCX0KLQkJfTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0JICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCXJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotCX0KLQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZXNjcmlwdGlvbkFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4IDxlbT5JbmRleDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlSW5kZXhBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5hbWVBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19IC8vUlRJbmRleEFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDA5ZmNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FeHRlbmRlZE1ldGFEYXRhOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUZhY3RvcnlJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC51dGlsLlJUSW5kZXhSZXNvdXJjZUltcGwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VGYWN0b3J5SW1wbCB7Ci0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEV4dGVuZGVkTWV0YURhdGEgZXh0ZW5kZWRNZXRhRGF0YTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCQlleHRlbmRlZE1ldGFEYXRhID0gRXh0ZW5kZWRNZXRhRGF0YS5JTlNUQU5DRTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkgewotCQlYTUxSZXNvdXJjZSByZXN1bHQgPSBuZXcgUlRJbmRleFJlc291cmNlSW1wbCh1cmkpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCi0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1NDSEVNQV9MT0NBVElPTiwgQm9vbGVhbi5UUlVFKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOwotCi0JCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9MRVhJQ0FMX0hBTkRMRVIsIEJvb2xlYW4uVFJVRSk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19IC8vUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4UmVzb3VyY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFJlc291cmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTMxNjQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4UmVzb3VyY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJUSW5kZXhSZXNvdXJjZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlSW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlIDwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC51dGlsLlJUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSVEluZGV4UmVzb3VyY2VJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VJbXBsIHsKLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB1cmkgdGhlIFVSSSBvZiB0aGUgbmV3IHJlc291cmNlLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUlRJbmRleFJlc291cmNlSW1wbChVUkkgdXJpKSB7Ci0JCXN1cGVyKHVyaSk7Ci0JfQotCi19IC8vUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4U3dpdGNoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFN3aXRjaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTg1YmUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4U3dpdGNoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4U3dpdGNoLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSVEluZGV4U3dpdGNoIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFJUSW5kZXhQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUlRJbmRleFN3aXRjaCgpIHsKLQkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7Ci0JCQltb2RlbFBhY2thZ2UgPSBSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0JCQlyZXR1cm4KLQkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPwotCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6Ci0JCQkJCWRvU3dpdGNoKChFQ2xhc3MpZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT046IHsKLQkJCQlEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbil0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVDogewotCQkJCURvY3VtZW50Um9vdCBkb2N1bWVudFJvb3QgPSAoRG9jdW1lbnRSb290KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VEb2N1bWVudFJvb3QoZG9jdW1lbnRSb290KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYOiB7Ci0JCQkJSW5kZXggaW5kZXggPSAoSW5kZXgpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZUluZGV4KGluZGV4KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLk5BTUU6IHsKLQkJCQlOYW1lIG5hbWUgPSAoTmFtZSl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlTmFtZShuYW1lKTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZURlc2NyaXB0aW9uKERlc2NyaXB0aW9uIG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VEb2N1bWVudFJvb3QoRG9jdW1lbnRSb290IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW5kZXg8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW5kZXg8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZUluZGV4KEluZGV4IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VOYW1lKE5hbWUgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfSAvL1JUSW5kZXhTd2l0Y2gKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L0NhdGVnb3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9DYXRlZ29yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTNkOTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L0NhdGVnb3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBDYXRlZ29yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNhdGVnb3J5PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0TmxuYW1lIDxlbT5ObG5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldENvZGUgPGVtPkNvZGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0Q2F0ZWdvcnkoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIENhdGVnb3J5IGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmxuYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lfS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5sbmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5sbmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldENhdGVnb3J5X05sbmFtZSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0TmxuYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Q2F0ZWdvcnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldENhdGVnb3J5X0NhdGVnb3J5KCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0Q2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNvZGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkNvZGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q29kZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0Q29kZShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRDYXRlZ29yeV9Db2RlKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRDb2RlKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldENvZGUgPGVtPkNvZGU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkNvZGU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldENvZGUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldENvZGUoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRDYXRlZ29yeV9OYW1lKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBDYXRlZ29yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvRG9jdW1lbnRSb290LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9Eb2N1bWVudFJvb3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcwMjRlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9Eb2N1bWVudFJvb3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXREb2N1bWVudFJvb3QoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERvY3VtZW50Um9vdCBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcC5FbnRyeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X01peGVkKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmVhdHVyZU1hcEVudHJ5IiBtYW55PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlGZWF0dXJlTWFwIGdldE1peGVkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YTUxOUyBQcmVmaXggTWFwPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpCi0JICogQG1vZGVsIG1hcFR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIga2V5VHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWVUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0cmFuc2llbnQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVNYXAgZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlhTSSBTY2hlbWEgTG9jYXRpb248L2I+PC9lbT4nIG1hcC4KLQkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicgbWFwLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q2F0ZWdvcnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkNhdGVnb3J5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNhdGVnb3J5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXRDYXRlZ29yeShDYXRlZ29yeSkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9DYXRlZ29yeSgpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUNhdGVnb3J5IGdldENhdGVnb3J5KCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkNhdGVnb3J5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRDYXRlZ29yeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0Q2F0ZWdvcnkoQ2F0ZWdvcnkgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXROYW1lKE5hbWUpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXREb2N1bWVudFJvb3RfTmFtZSgpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCU5hbWUgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TmFtZShOYW1lIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXhvbm9teTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXhvbm9teTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0VGF4b25vbXkoVGF4b25vbXkpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXREb2N1bWVudFJvb3RfVGF4b25vbXkoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9teSBnZXRUYXhvbm9teSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXhvbm9teTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFRheG9ub215KFRheG9ub215IHZhbHVlKTsKLQotfSAvLyBEb2N1bWVudFJvb3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L05hbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L05hbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAxZWNlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9OYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IE5hbWUuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXROYW1lXygpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTmFtZSBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0VmFsdWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0TmFtZV9WYWx1ZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VmFsdWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TGFuZyhTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXROYW1lX0xhbmcoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkxhbmd1YWdlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TGFuZygpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExhbmcoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBOYW1lCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE0YmUwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldE5sbmFtZSA8ZW0+TmxuYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRJZCA8ZW0+SWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0UmVmIDxlbT5SZWY8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0VG1vZGVsS2V5IDxlbT5UbW9kZWwgS2V5PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRUYXhvbm9teSgpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVGF4b25vbXkgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5ObG5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWV9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmxuYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmxuYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXlfTmxuYW1lKCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXRObG5hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNhdGVnb3J5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNhdGVnb3J5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXlfQ2F0ZWdvcnkoKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5IiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXRDYXRlZ29yeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPklkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklkPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRJZChTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRUYXhvbm9teV9JZCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0SWQoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0SWQgPGVtPklkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JZDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0SWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldElkKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExvY2F0aW9uKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldFRheG9ub215X0xvY2F0aW9uKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRMb2NhdGlvbigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRUYXhvbm9teV9OYW1lKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJlZjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVmPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlZjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0UmVmKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldFRheG9ub215X1JlZigpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0UmVmKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFJlZiA8ZW0+UmVmPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWY8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFJlZigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0UmVmKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UbW9kZWwgS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UbW9kZWwgS2V5PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRtb2RlbCBLZXk8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFRtb2RlbEtleShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRUYXhvbm9teV9UbW9kZWxLZXkoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRUbW9kZWxLZXkoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0VG1vZGVsS2V5IDxlbT5UbW9kZWwgS2V5PC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UbW9kZWwgS2V5PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRUbW9kZWxLZXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFRtb2RlbEtleShTdHJpbmcgdmFsdWUpOwotCi19IC8vIFRheG9ub215CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDZmZGJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teUZhY3RvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFRheG9ub215RmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKLQkvKioKLQkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub215RmFjdG9yeSBlSU5TVEFOQ0UgPSBuZXcgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215RmFjdG9yeUltcGwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q2F0ZWdvcnk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlDYXRlZ29yeSBjcmVhdGVDYXRlZ29yeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlEb2N1bWVudFJvb3QgY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCU5hbWUgY3JlYXRlTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UYXhvbm9teTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub215IGNyZWF0ZVRheG9ub215KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub215UGFja2FnZSBnZXRUYXhvbm9teVBhY2thZ2UoKTsKLQotfSAvL1RheG9ub215RmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXlQYWNrYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teVBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJkOTZmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teVBhY2thZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1MCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215UGFja2FnZS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAotICogPHVsPgotICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAqIDwvdWw+Ci0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogCi0gKiAgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kCi0gKiAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5hbWVzcGFjZS4KLSAqIAotICogICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtCi0gKiAgICAgc3VpdGFibGUgZm9yIGltcG9ydCBieSBvdGhlciBzY2hlbWEgZG9jdW1lbnRzLiAgCi0gKiAKLSAqICAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQKLSAqICAgICBvbmx5IGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIG9yIGl0cyBzdWJncm91cHMuICBUaGUKLSAqICAgICBmb2xsb3dpbmcgbmFtZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoaXMgbmFtZXNwYWNlIGFuZCBzaG91bGQKLSAqICAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwKLSAqICAgICBzcGVjaWZpY2F0aW9uLCBvciBkb2N1bWVudCBpbnN0YW5jZToKLSAqIAotICogICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHByb3ZpZGVzIGEgVVJJIHRvIGJlIHVzZWQgYXMgdGhlIGJhc2UgZm9yIGludGVycHJldGluZyBhbnkKLSAqICAgICAgICAgIHJlbGF0aXZlIFVSSXMgaW4gdGhlIHNjb3BlIG9mIHRoZSBlbGVtZW50IG9uIHdoaWNoIGl0Ci0gKiAgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkCi0gKiAgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBCYXNlIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgaWYgZGVjbGFyZWQgdG8gYmUgb2YgdHlwZSBJRC4KLSAqICAgICAgICAgIFRoZSB4bWw6aWQgc3BlY2lmaWNhdGlvbiBpcyBub3QgeWV0IGEgVzNDIFJlY29tbWVuZGF0aW9uLAotICogICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24KLSAqICAgICAgICAgIHdpdGggdGhlIG1lY2hhbmlzbXMgaXQgcHJvcG9zZXMuICBOb3RlIHRoYXQgaXQgaXMgX25vdF8gaW5jbHVkZWQKLSAqICAgICAgICAgIGluIHRoZSBzcGVjaWFsQXR0cnMgYXR0cmlidXRlIGdyb3VwLgotICogCi0gKiAgICAgbGFuZyAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgaXMgYSBsYW5ndWFnZSBjb2RlIGZvciB0aGUgbmF0dXJhbCBsYW5ndWFnZSBvZiB0aGUgY29udGVudCBvZgotICogICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAgIAotICogICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlCi0gKiAgICAgICAgICB2YWx1ZSBpcyBhIGtleXdvcmQgaW5kaWNhdGluZyB3aGF0IHdoaXRlc3BhY2UgcHJvY2Vzc2luZwotICogICAgICAgICAgZGlzY2lwbGluZSBpcyBpbnRlbmRlZCBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQ7IGl0cwotICogICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMKLSAqICAgICAgICAgIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLgotICogCi0gKiAgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mIAotICogICAgICAgICAgdGhlIG9yaWdpbmFsIFhNTCBXb3JraW5nIEdyb3VwLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IAotICogICAgICAgICAgdGhlIGZvbGxvd2luZyBkZWNpc2lvbiBvZiB0aGUgVzNDIFhNTCBQbGVuYXJ5IGFuZCAKLSAqICAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOgotICogCi0gKiAgICAgICAgICAgICAgSW4gYXBwcmVjaWF0aW9uIGZvciBoaXMgdmlzaW9uLCBsZWFkZXJzaGlwIGFuZCBkZWRpY2F0aW9uCi0gKiAgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwCi0gKiAgICAgICAgICAgICAgcmVzZXJ2ZXMgZm9yIEpvbiBCb3NhayBpbiBwZXJwZXR1aXR5IHRoZSBYTUwgbmFtZQotICogICAgICAgICAgICAgIHhtbDpGYXRoZXIKLSAqICAgCi0gKiBUaGlzIHNjaGVtYSBkZWZpbmVzIGF0dHJpYnV0ZXMgYW5kIGFuIGF0dHJpYnV0ZSBncm91cAotICogICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5Ci0gKiAgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQKLSAqICAgICAgICAgYXR0cmlidXRlcyBvbiBlbGVtZW50cyB0aGV5IGRlZmluZS4KLSAqIAotICogICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYQotICogICAgICAgICBmb3IgdGhlIFhNTCBuYW1lc3BhY2UsIGUuZy4gYXMgZm9sbG93czoKLSAqICAgICAgICAgJmx0O3NjaGVtYSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotICogICAgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8mZ3Q7Ci0gKiAKLSAqICAgICAgICAgU3Vic2VxdWVudGx5LCBxdWFsaWZpZWQgcmVmZXJlbmNlIHRvIGFueSBvZiB0aGUgYXR0cmlidXRlcwotICogICAgICAgICBvciB0aGUgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuCi0gKiAKLSAqICAgICAgICAgJmx0O3R5cGUgLiAuIC4mZ3Q7Ci0gKiAgICAgICAgICAuIC4gLgotICogICAgICAgICAgJmx0O2F0dHJpYnV0ZUdyb3VwIHJlZj0ieG1sOnNwZWNpYWxBdHRycyIvJmd0OwotICogIAotICogICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlCi0gKiAgICAgICAgICBlbGVtZW50IHdpdGggYW55IG9mIHRob3NlIGF0dHJpYnV0ZXMKLSAqIEluIGtlZXBpbmcgd2l0aCB0aGUgWE1MIFNjaGVtYSBXRydzIHN0YW5kYXJkIHZlcnNpb25pbmcKLSAqICAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2QuCi0gKiAgICBBdCB0aGUgZGF0ZSBvZiBpc3N1ZSBpdCBjYW4gYWxzbyBiZSBmb3VuZCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLgotICogICAgVGhlIHNjaGVtYSBkb2N1bWVudCBhdCB0aGF0IFVSSSBtYXkgaG93ZXZlciBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwKLSAqICAgIGluIG9yZGVyIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhNTCBTY2hlbWEKLSAqICAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTAotICogICAgU2NoZW1hIG9yIFhNTCBuYW1lc3BhY2VzIGNoYW5nZSwgdGhlIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIHdpbGwgY2hhbmdlCi0gKiAgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZCB3aWxsIG5vdCBjaGFuZ2UuCi0gKiAgIAotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215RmFjdG9yeQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFRheG9ub215UGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTkFNRSA9ICJ0YXhvbm9teSI7Ci0KLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IjsKLQotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTlNfUFJFRklYID0gInRheG9ub215IjsKLQotCS8qKgotCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbXlQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teVBhY2thZ2VJbXBsLmluaXQoKTsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkNhdGVnb3J5SW1wbCA8ZW0+Q2F0ZWdvcnk8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuQ2F0ZWdvcnlJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbCNnZXRDYXRlZ29yeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBDQVRFR09SWSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmxuYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBDQVRFR09SWV9fTkxOQU1FID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgQ0FURUdPUllfX0NBVEVHT1JZID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db2RlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgQ0FURUdPUllfX0NPREUgPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBDQVRFR09SWV9fTkFNRSA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPkNhdGVnb3J5PC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IENBVEVHT1JZX0ZFQVRVUkVfQ09VTlQgPSA0OwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuRG9jdW1lbnRSb290SW1wbCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbCNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVCA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWl4ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX01JWEVEID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YTUxOUyBQcmVmaXggTWFwPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WFNJIFNjaGVtYSBMb2NhdGlvbjwvYj48L2VtPicgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04gPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNhdGVnb3J5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fQ0FURUdPUlkgPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19OQU1FID0gNDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1RBWE9OT01ZID0gNTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX0ZFQVRVUkVfQ09VTlQgPSA2OwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuTmFtZUltcGwgPGVtPk5hbWU8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuTmFtZUltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teVBhY2thZ2VJbXBsI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IE5BTUUgPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9fVkFMVUUgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBOQU1FX19MQU5HID0gMTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+TmFtZTwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBOQU1FX0ZFQVRVUkVfQ09VTlQgPSAyOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsIDxlbT5UYXhvbm9teTwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teVBhY2thZ2VJbXBsI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IFRBWE9OT01ZID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5ObG5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01ZX19OTE5BTUUgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNhdGVnb3J5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9fQ0FURUdPUlkgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfX0lEID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01ZX19MT0NBVElPTiA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01ZX19OQU1FID0gNDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWY8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9fUkVGID0gNTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UbW9kZWwgS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfX1RNT0RFTF9LRVkgPSA2OwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5UYXhvbm9teTwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9GRUFUVVJFX0NPVU5UID0gNzsKLQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Q2F0ZWdvcnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXRDYXRlZ29yeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0TmxuYW1lIDxlbT5ObG5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPk5sbmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0TmxuYW1lKCkKLQkgKiBAc2VlICNnZXRDYXRlZ29yeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0Q2F0ZWdvcnlfTmxuYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRDYXRlZ29yeSgpCi0JICogQHNlZSAjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldENhdGVnb3J5X0NhdGVnb3J5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0Q29kZSA8ZW0+Q29kZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkNvZGU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldENvZGUoKQotCSAqIEBzZWUgI2dldENhdGVnb3J5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRDYXRlZ29yeV9Db2RlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5hbWUoKQotCSAqIEBzZWUgI2dldENhdGVnb3J5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRDYXRlZ29yeV9OYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldERvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+TWl4ZWQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRNaXhlZCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5DYXRlZ29yeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldENhdGVnb3J5KCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9DYXRlZ29yeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldE5hbWUoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X05hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRUYXhvbm9teSgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfVGF4b25vbXkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXROYW1lXygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmFsdWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0VmFsdWUoKQotCSAqIEBzZWUgI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXROYW1lX1ZhbHVlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGFuZzwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSNnZXRMYW5nKCkKLQkgKiBAc2VlICNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0TmFtZV9MYW5nKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UYXhvbm9teTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldFRheG9ub215KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRObG5hbWUgPGVtPk5sbmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+TmxuYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRObG5hbWUoKQotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRUYXhvbm9teV9ObG5hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+Q2F0ZWdvcnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldENhdGVnb3J5KCkKLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0VGF4b25vbXlfQ2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRJZCA8ZW0+SWQ8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JZDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0SWQoKQotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9JZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvY2F0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRMb2NhdGlvbigpCi0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFRheG9ub215X0xvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldE5hbWUoKQotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9OYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0UmVmIDxlbT5SZWY8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SZWY8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFJlZigpCi0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFRheG9ub215X1JlZigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFRtb2RlbEtleSA8ZW0+VG1vZGVsIEtleTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRtb2RlbCBLZXk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFRtb2RlbEtleSgpCi0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFRheG9ub215X1Rtb2RlbEtleSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbXlGYWN0b3J5IGdldFRheG9ub215RmFjdG9yeSgpOwotCi19IC8vVGF4b25vbXlQYWNrYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL0NhdGVnb3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9DYXRlZ29yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzViMmUzYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL0NhdGVnb3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogQ2F0ZWdvcnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNhdGVnb3J5PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuQ2F0ZWdvcnlJbXBsI2dldE5sbmFtZSA8ZW0+TmxuYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuQ2F0ZWdvcnlJbXBsI2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkNhdGVnb3J5SW1wbCNnZXRDb2RlIDxlbT5Db2RlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuQ2F0ZWdvcnlJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBDYXRlZ29yeUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIENhdGVnb3J5IHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRObG5hbWUoKSA8ZW0+TmxuYW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5sbmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IG5sbmFtZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDYXRlZ29yeSgpIDxlbT5DYXRlZ29yeTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRDYXRlZ29yeSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IGNhdGVnb3J5ID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb2RlKCkgPGVtPkNvZGU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldENvZGUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENPREVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q29kZSgpIDxlbT5Db2RlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRDb2RlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGNvZGUgPSBDT0RFX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgQ2F0ZWdvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXRDYXRlZ29yeSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRObG5hbWUoKSB7Ci0JCWlmIChubG5hbWUgPT0gbnVsbCkgewotCQkJbmxuYW1lID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KE5hbWUuY2xhc3MsIHRoaXMsIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkxOQU1FKTsKLQkJfQotCQlyZXR1cm4gbmxuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRDYXRlZ29yeSgpIHsKLQkJaWYgKGNhdGVnb3J5ID09IG51bGwpIHsKLQkJCWNhdGVnb3J5ID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KENhdGVnb3J5LmNsYXNzLCB0aGlzLCBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NBVEVHT1JZKTsKLQkJfQotCQlyZXR1cm4gY2F0ZWdvcnk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRDb2RlKCkgewotCQlyZXR1cm4gY29kZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDb2RlKFN0cmluZyBuZXdDb2RlKSB7Ci0JCVN0cmluZyBvbGRDb2RlID0gY29kZTsKLQkJY29kZSA9IG5ld0NvZGU7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ09ERSwgb2xkQ29kZSwgY29kZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkgewotCQlTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0JCW5hbWUgPSBuZXdOYW1lOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkxOQU1FOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE5sbmFtZSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NBVEVHT1JZOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldENhdGVnb3J5KCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OTE5BTUU6Ci0JCQkJcmV0dXJuIGdldE5sbmFtZSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NBVEVHT1JZOgotCQkJCXJldHVybiBnZXRDYXRlZ29yeSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NPREU6Ci0JCQkJcmV0dXJuIGdldENvZGUoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05MTkFNRToKLQkJCQlnZXRObG5hbWUoKS5jbGVhcigpOwotCQkJCWdldE5sbmFtZSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NBVEVHT1JZOgotCQkJCWdldENhdGVnb3J5KCkuY2xlYXIoKTsKLQkJCQlnZXRDYXRlZ29yeSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NPREU6Ci0JCQkJc2V0Q29kZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkFNRToKLQkJCQlzZXROYW1lKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkxOQU1FOgotCQkJCWdldE5sbmFtZSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NBVEVHT1JZOgotCQkJCWdldENhdGVnb3J5KCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ09ERToKLQkJCQlzZXRDb2RlKENPREVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OQU1FOgotCQkJCXNldE5hbWUoTkFNRV9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkxOQU1FOgotCQkJCXJldHVybiBubG5hbWUgIT0gbnVsbCAmJiAhbmxuYW1lLmlzRW1wdHkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWToKLQkJCQlyZXR1cm4gY2F0ZWdvcnkgIT0gbnVsbCAmJiAhY2F0ZWdvcnkuaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NPREU6Ci0JCQkJcmV0dXJuIENPREVfRURFRkFVTFQgPT0gbnVsbCA/IGNvZGUgIT0gbnVsbCA6ICFDT0RFX0VERUZBVUxULmVxdWFscyhjb2RlKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OQU1FOgotCQkJCXJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiIChjb2RlOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChjb2RlKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBuYW1lOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChuYW1lKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vQ2F0ZWdvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzc4NzQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY3ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRG9jdW1lbnRSb290SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuQmFzaWNGZWF0dXJlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG9jdW1lbnQgUm9vdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRSb290SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgRG9jdW1lbnRSb290IHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNaXhlZCgpIDxlbT5NaXhlZDwvZW0+fScgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRNaXhlZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEZlYXR1cmVNYXAgbWl4ZWQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WE1MTlNQcmVmaXhNYXAoKSA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fScgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTWFwIHhNTE5TUHJlZml4TWFwID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhTSVNjaGVtYUxvY2F0aW9uKCkgPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4U0lTY2hlbWFMb2NhdGlvbiA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRG9jdW1lbnRSb290SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290KCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEZlYXR1cmVNYXAgZ2V0TWl4ZWQoKSB7Ci0JCWlmIChtaXhlZCA9PSBudWxsKSB7Ci0JCQltaXhlZCA9IG5ldyBCYXNpY0ZlYXR1cmVNYXAodGhpcywgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEKTsKLQkJfQotCQlyZXR1cm4gbWl4ZWQ7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVNYXAgZ2V0WE1MTlNQcmVmaXhNYXAoKSB7Ci0JCWlmICh4TUxOU1ByZWZpeE1hcCA9PSBudWxsKSB7Ci0JCQl4TUxOU1ByZWZpeE1hcCA9IG5ldyBFY29yZUVNYXAoRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQKTsKLQkJfQotCQlyZXR1cm4geE1MTlNQcmVmaXhNYXA7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVNYXAgZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSB7Ci0JCWlmICh4U0lTY2hlbWFMb2NhdGlvbiA9PSBudWxsKSB7Ci0JCQl4U0lTY2hlbWFMb2NhdGlvbiA9IG5ldyBFY29yZUVNYXAoRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OKTsKLQkJfQotCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIENhdGVnb3J5IGdldENhdGVnb3J5KCkgewotCQlyZXR1cm4gKENhdGVnb3J5KWdldE1peGVkKCkuZ2V0KFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0NhdGVnb3J5KCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldENhdGVnb3J5KENhdGVnb3J5IG5ld0NhdGVnb3J5LCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKSwgbmV3Q2F0ZWdvcnksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldENhdGVnb3J5KENhdGVnb3J5IG5ld0NhdGVnb3J5KSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKSwgbmV3Q2F0ZWdvcnkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOYW1lIGdldE5hbWUoKSB7Ci0JCXJldHVybiAoTmFtZSlnZXRNaXhlZCgpLmdldChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldE5hbWUoTmFtZSBuZXdOYW1lLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCBuZXdOYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXROYW1lKE5hbWUgbmV3TmFtZSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgbmV3TmFtZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215IGdldFRheG9ub215KCkgewotCQlyZXR1cm4gKFRheG9ub215KWdldE1peGVkKCkuZ2V0KFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFRheG9ub215KFRheG9ub215IG5ld1RheG9ub215LCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVGF4b25vbXkoKSwgbmV3VGF4b25vbXksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRheG9ub215KFRheG9ub215IG5ld1RheG9ub215KSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVGF4b25vbXkoKSwgbmV3VGF4b25vbXkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIENsYXNzIGJhc2VDbGFzcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlpZiAoZmVhdHVyZUlEID49IDApIHsKLQkJCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGZlYXR1cmVJRCwgYmFzZUNsYXNzKSkgewotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE1peGVkKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFhNTE5TUHJlZml4TWFwKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFhTSVNjaGVtYUxvY2F0aW9uKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19DQVRFR09SWToKLQkJCQkJcmV0dXJuIGJhc2ljU2V0Q2F0ZWdvcnkobnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQkJcmV0dXJuIGJhc2ljU2V0TmFtZShudWxsLCBtc2dzKTsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NWToKLQkJCQkJcmV0dXJuIGJhc2ljU2V0VGF4b25vbXkobnVsbCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gZ2V0TWl4ZWQoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJcmV0dXJuIGdldFhNTE5TUHJlZml4TWFwKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCXJldHVybiBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fQ0FURUdPUlk6Ci0JCQkJcmV0dXJuIGdldENhdGVnb3J5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NWToKLQkJCQlyZXR1cm4gZ2V0VGF4b25vbXkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJZ2V0TWl4ZWQoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5jbGVhcigpOwotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuY2xlYXIoKTsKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fQ0FURUdPUlk6Ci0JCQkJc2V0Q2F0ZWdvcnkoKENhdGVnb3J5KW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXNldE5hbWUoKE5hbWUpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01ZOgotCQkJCXNldFRheG9ub215KChUYXhvbm9teSluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCWdldE1peGVkKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19DQVRFR09SWToKLQkJCQlzZXRDYXRlZ29yeSgoQ2F0ZWdvcnkpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlzZXROYW1lKChOYW1lKW51bGwpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01ZOgotCQkJCXNldFRheG9ub215KChUYXhvbm9teSludWxsKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCXJldHVybiBtaXhlZCAhPSBudWxsICYmICFtaXhlZC5pc0VtcHR5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCXJldHVybiB4TUxOU1ByZWZpeE1hcCAhPSBudWxsICYmICF4TUxOU1ByZWZpeE1hcC5pc0VtcHR5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCXJldHVybiB4U0lTY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmICF4U0lTY2hlbWFMb2NhdGlvbi5pc0VtcHR5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19DQVRFR09SWToKLQkJCQlyZXR1cm4gZ2V0Q2F0ZWdvcnkoKSAhPSBudWxsOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpICE9IG51bGw7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NWToKLQkJCQlyZXR1cm4gZ2V0VGF4b25vbXkoKSAhPSBudWxsOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAobWl4ZWQ6ICIpOwotCQlyZXN1bHQuYXBwZW5kKG1peGVkKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vRG9jdW1lbnRSb290SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9OYW1lSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9OYW1lSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzU1YmQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvTmFtZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IE5hbWVJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLk5hbWVJbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLk5hbWVJbXBsI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBOYW1lSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgTmFtZSB7Ci0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQU5HX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBsYW5nID0gTEFOR19FREVGQVVMVDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBOYW1lSW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0TmFtZV8oKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgewotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JCVN0cmluZyBvbGRWYWx1ZSA9IHZhbHVlOwotCQl2YWx1ZSA9IG5ld1ZhbHVlOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuTkFNRV9fVkFMVUUsIG9sZFZhbHVlLCB2YWx1ZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZygpIHsKLQkJcmV0dXJuIGxhbmc7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TGFuZyhTdHJpbmcgbmV3TGFuZykgewotCQlTdHJpbmcgb2xkTGFuZyA9IGxhbmc7Ci0JCWxhbmcgPSBuZXdMYW5nOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuTkFNRV9fTEFORywgb2xkTGFuZywgbGFuZykpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXJldHVybiBnZXRWYWx1ZSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlyZXR1cm4gZ2V0TGFuZygpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXNldFZhbHVlKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJc2V0TGFuZygoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJc2V0TGFuZyhMQU5HX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXJldHVybiBWQUxVRV9FREVGQVVMVCA9PSBudWxsID8gdmFsdWUgIT0gbnVsbCA6ICFWQUxVRV9FREVGQVVMVC5lcXVhbHModmFsdWUpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlyZXR1cm4gTEFOR19FREVGQVVMVCA9PSBudWxsID8gbGFuZyAhPSBudWxsIDogIUxBTkdfRURFRkFVTFQuZXF1YWxzKGxhbmcpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAodmFsdWU6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBsYW5nOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChsYW5nKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vTmFtZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNWI1NGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teUZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teUZhY3RvcnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVGF4b25vbXlGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFRheG9ub215RmFjdG9yeSB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbmQgaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215RmFjdG9yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKLQkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZOiByZXR1cm4gY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1Q6IHJldHVybiBjcmVhdGVEb2N1bWVudFJvb3QoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUU6IHJldHVybiBjcmVhdGVOYW1lKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWTogcmV0dXJuIGNyZWF0ZVRheG9ub215KCk7Ci0JCQlkZWZhdWx0OgotCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQ2F0ZWdvcnkgY3JlYXRlQ2F0ZWdvcnkoKSB7Ci0JCUNhdGVnb3J5SW1wbCBjYXRlZ29yeSA9IG5ldyBDYXRlZ29yeUltcGwoKTsKLQkJcmV0dXJuIGNhdGVnb3J5OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEb2N1bWVudFJvb3QgY3JlYXRlRG9jdW1lbnRSb290KCkgewotCQlEb2N1bWVudFJvb3RJbXBsIGRvY3VtZW50Um9vdCA9IG5ldyBEb2N1bWVudFJvb3RJbXBsKCk7Ci0JCXJldHVybiBkb2N1bWVudFJvb3Q7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5hbWUgY3JlYXRlTmFtZSgpIHsKLQkJTmFtZUltcGwgbmFtZSA9IG5ldyBOYW1lSW1wbCgpOwotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXkgY3JlYXRlVGF4b25vbXkoKSB7Ci0JCVRheG9ub215SW1wbCB0YXhvbm9teSA9IG5ldyBUYXhvbm9teUltcGwoKTsKLQkJcmV0dXJuIHRheG9ub215OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teVBhY2thZ2UgZ2V0VGF4b25vbXlQYWNrYWdlKCkgewotCQlyZXR1cm4gKFRheG9ub215UGFja2FnZSlnZXRFUGFja2FnZSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGRlcHJlY2F0ZWQKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBUYXhvbm9teVBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKLQkJcmV0dXJuIFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0U7Ci0JfQotCi19IC8vVGF4b25vbXlGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1Nzg5NTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3NiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsI2dldE5sbmFtZSA8ZW0+TmxuYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsI2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCNnZXRJZCA8ZW0+SWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUltcGwjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUltcGwjZ2V0UmVmIDxlbT5SZWY8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUltcGwjZ2V0VG1vZGVsS2V5IDxlbT5UbW9kZWwgS2V5PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVGF4b25vbXlJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBUYXhvbm9teSB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmxuYW1lKCkgPGVtPk5sbmFtZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRObG5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBubG5hbWUgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q2F0ZWdvcnkoKSA8ZW0+Q2F0ZWdvcnk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBjYXRlZ29yeSA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWQoKSA8ZW0+SWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldElkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZCgpIDxlbT5JZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0SWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgaWQgPSBJRF9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uKCkgPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvbiA9IExPQ0FUSU9OX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVmKCkgPGVtPlJlZjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0UmVmKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBSRUZfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVmKCkgPGVtPlJlZjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0UmVmKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHJlZiA9IFJFRl9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUbW9kZWxLZXkoKSA8ZW0+VG1vZGVsIEtleTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VG1vZGVsS2V5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUTU9ERUxfS0VZX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRtb2RlbEtleSgpIDxlbT5UbW9kZWwgS2V5PC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRUbW9kZWxLZXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgdG1vZGVsS2V5ID0gVE1PREVMX0tFWV9FREVGQVVMVDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBUYXhvbm9teUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldFRheG9ub215KCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldE5sbmFtZSgpIHsKLQkJaWYgKG5sbmFtZSA9PSBudWxsKSB7Ci0JCQlubG5hbWUgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoTmFtZS5jbGFzcywgdGhpcywgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OTE5BTUUpOwotCQl9Ci0JCXJldHVybiBubG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldENhdGVnb3J5KCkgewotCQlpZiAoY2F0ZWdvcnkgPT0gbnVsbCkgewotCQkJY2F0ZWdvcnkgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoQ2F0ZWdvcnkuY2xhc3MsIHRoaXMsIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fQ0FURUdPUlkpOwotCQl9Ci0JCXJldHVybiBjYXRlZ29yeTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldElkKCkgewotCQlyZXR1cm4gaWQ7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIG5ld0lkKSB7Ci0JCVN0cmluZyBvbGRJZCA9IGlkOwotCQlpZCA9IG5ld0lkOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0lELCBvbGRJZCwgaWQpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkgewotCQlyZXR1cm4gbG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIG5ld0xvY2F0aW9uKSB7Ci0JCVN0cmluZyBvbGRMb2NhdGlvbiA9IGxvY2F0aW9uOwotCQlsb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0xPQ0FUSU9OLCBvbGRMb2NhdGlvbiwgbG9jYXRpb24pKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpIHsKLQkJU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotCQluYW1lID0gbmV3TmFtZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRSZWYoKSB7Ci0JCXJldHVybiByZWY7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVmKFN0cmluZyBuZXdSZWYpIHsKLQkJU3RyaW5nIG9sZFJlZiA9IHJlZjsKLQkJcmVmID0gbmV3UmVmOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1JFRiwgb2xkUmVmLCByZWYpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFRtb2RlbEtleSgpIHsKLQkJcmV0dXJuIHRtb2RlbEtleTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUbW9kZWxLZXkoU3RyaW5nIG5ld1Rtb2RlbEtleSkgewotCQlTdHJpbmcgb2xkVG1vZGVsS2V5ID0gdG1vZGVsS2V5OwotCQl0bW9kZWxLZXkgPSBuZXdUbW9kZWxLZXk7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fVE1PREVMX0tFWSwgb2xkVG1vZGVsS2V5LCB0bW9kZWxLZXkpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkxOQU1FOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE5sbmFtZSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0NBVEVHT1JZOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldENhdGVnb3J5KCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OTE5BTUU6Ci0JCQkJcmV0dXJuIGdldE5sbmFtZSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0NBVEVHT1JZOgotCQkJCXJldHVybiBnZXRDYXRlZ29yeSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0lEOgotCQkJCXJldHVybiBnZXRJZCgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0xPQ0FUSU9OOgotCQkJCXJldHVybiBnZXRMb2NhdGlvbigpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19SRUY6Ci0JCQkJcmV0dXJuIGdldFJlZigpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1RNT0RFTF9LRVk6Ci0JCQkJcmV0dXJuIGdldFRtb2RlbEtleSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OTE5BTUU6Ci0JCQkJZ2V0TmxuYW1lKCkuY2xlYXIoKTsKLQkJCQlnZXRObG5hbWUoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19DQVRFR09SWToKLQkJCQlnZXRDYXRlZ29yeSgpLmNsZWFyKCk7Ci0JCQkJZ2V0Q2F0ZWdvcnkoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19JRDoKLQkJCQlzZXRJZCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTE9DQVRJT046Ci0JCQkJc2V0TG9jYXRpb24oKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05BTUU6Ci0JCQkJc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fUkVGOgotCQkJCXNldFJlZigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fVE1PREVMX0tFWToKLQkJCQlzZXRUbW9kZWxLZXkoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OTE5BTUU6Ci0JCQkJZ2V0TmxuYW1lKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fQ0FURUdPUlk6Ci0JCQkJZ2V0Q2F0ZWdvcnkoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19JRDoKLQkJCQlzZXRJZChJRF9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0xPQ0FUSU9OOgotCQkJCXNldExvY2F0aW9uKExPQ0FUSU9OX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkFNRToKLQkJCQlzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19SRUY6Ci0JCQkJc2V0UmVmKFJFRl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1RNT0RFTF9LRVk6Ci0JCQkJc2V0VG1vZGVsS2V5KFRNT0RFTF9LRVlfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05MTkFNRToKLQkJCQlyZXR1cm4gbmxuYW1lICE9IG51bGwgJiYgIW5sbmFtZS5pc0VtcHR5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fQ0FURUdPUlk6Ci0JCQkJcmV0dXJuIGNhdGVnb3J5ICE9IG51bGwgJiYgIWNhdGVnb3J5LmlzRW1wdHkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19JRDoKLQkJCQlyZXR1cm4gSURfRURFRkFVTFQgPT0gbnVsbCA/IGlkICE9IG51bGwgOiAhSURfRURFRkFVTFQuZXF1YWxzKGlkKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19MT0NBVElPTjoKLQkJCQlyZXR1cm4gTE9DQVRJT05fRURFRkFVTFQgPT0gbnVsbCA/IGxvY2F0aW9uICE9IG51bGwgOiAhTE9DQVRJT05fRURFRkFVTFQuZXF1YWxzKGxvY2F0aW9uKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OQU1FOgotCQkJCXJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fUkVGOgotCQkJCXJldHVybiBSRUZfRURFRkFVTFQgPT0gbnVsbCA/IHJlZiAhPSBudWxsIDogIVJFRl9FREVGQVVMVC5lcXVhbHMocmVmKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19UTU9ERUxfS0VZOgotCQkJCXJldHVybiBUTU9ERUxfS0VZX0VERUZBVUxUID09IG51bGwgPyB0bW9kZWxLZXkgIT0gbnVsbCA6ICFUTU9ERUxfS0VZX0VERUZBVUxULmVxdWFscyh0bW9kZWxLZXkpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAoaWQ6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGlkKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBsb2NhdGlvbjogIik7Ci0JCXJlc3VsdC5hcHBlbmQobG9jYXRpb24pOwotCQlyZXN1bHQuYXBwZW5kKCIsIG5hbWU6ICIpOwotCQlyZXN1bHQuYXBwZW5kKG5hbWUpOwotCQlyZXN1bHQuYXBwZW5kKCIsIHJlZjogIik7Ci0JCXJlc3VsdC5hcHBlbmQocmVmKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCB0bW9kZWxLZXk6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHRtb2RlbEtleSk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL1RheG9ub215SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teVBhY2thZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215UGFja2FnZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZmN2RhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215UGFja2FnZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1OCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215UGFja2FnZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuWE1MVHlwZVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW1wbC5YTUxUeXBlUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleFBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeVBhY2thZ2VJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215UGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBUYXhvbm9teVBhY2thZ2UgewotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIGNhdGVnb3J5RUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIGRvY3VtZW50Um9vdEVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBuYW1lRUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIHRheG9ub215RUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKLQkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQotCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgotCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKLQkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcwotCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0JICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2VOU19VUkkKLQkgKiBAc2VlICNpbml0KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBUYXhvbm9teVBhY2thZ2VJbXBsKCkgewotCQlzdXBlcihlTlNfVVJJLCBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKLQkgKiBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4gIFNpbXBsZQotCSAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsCi0JICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCi0JICogaW5pdGlhbGl6YXRpb24gZm9yIGludGVyZGVwZW5kZW50IHBhY2thZ2VzIGRpcmVjdGx5LCBpbiBwYXJhbGxlbAotCSAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuCi0JICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAotCSAqIGhhdmUgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlaXIgVVJJIHZhbHVlcyBhcmUgZmlyc3QgY3JlYXRlZAotCSAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoKLQkgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQotCSAqIGFyZSBpbml0aWFsaXplZCwgc2luY2Ugb25lIHBhY2thZ2UncyBtZXRhLW1vZGVsIG9iamVjdHMgbWF5IHJlZmVyIHRvCi0JICogdGhvc2Ugb2YgYW5vdGhlci4KLQkgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCi0JICogYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZU5TX1VSSQotCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0JICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGF4b25vbXlQYWNrYWdlIGluaXQoKSB7Ci0JCWlmIChpc0luaXRlZCkgcmV0dXJuIChUYXhvbm9teVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVGF4b25vbXlQYWNrYWdlLmVOU19VUkkpOwotCi0JCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKLQkJVGF4b25vbXlQYWNrYWdlSW1wbCB0aGVUYXhvbm9teVBhY2thZ2UgPSAoVGF4b25vbXlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgaW5zdGFuY2VvZiBUYXhvbm9teVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgOiBuZXcgVGF4b25vbXlQYWNrYWdlSW1wbCgpKTsKLQotCQlpc0luaXRlZCA9IHRydWU7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCi0JCVhNTFR5cGVQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKLQkJUlRJbmRleFBhY2thZ2VJbXBsIHRoZVJUSW5kZXhQYWNrYWdlID0gKFJUSW5kZXhQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUlRJbmRleFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBSVEluZGV4UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSVEluZGV4UGFja2FnZS5lTlNfVVJJKSA6IFJUSW5kZXhQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCQlSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVJlZ2lzdHJ5UGFja2FnZSA9IChSZWdpc3RyeVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBSZWdpc3RyeVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIDogUmVnaXN0cnlQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCQlVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVVRERJUmVnaXN0cnlQYWNrYWdlID0gKFVERElSZWdpc3RyeVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVRERJUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVRERJUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIDogVURESVJlZ2lzdHJ5UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQotCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cwotCQl0aGVUYXhvbm9teVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJUSW5kZXhQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSZWdpc3RyeVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVVERElSZWdpc3RyeVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQotCQl0aGVUYXhvbm9teVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSVEluZGV4UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVVERElSZWdpc3RyeVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmZyZWV6ZSgpOwotCi0JCXJldHVybiB0aGVUYXhvbm9teVBhY2thZ2U7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXRDYXRlZ29yeSgpIHsKLQkJcmV0dXJuIGNhdGVnb3J5RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldENhdGVnb3J5X05sbmFtZSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWNhdGVnb3J5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0Q2F0ZWdvcnlfQ2F0ZWdvcnkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSljYXRlZ29yeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldENhdGVnb3J5X0NvZGUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSljYXRlZ29yeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldENhdGVnb3J5X05hbWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSljYXRlZ29yeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0RG9jdW1lbnRSb290KCkgewotCQlyZXR1cm4gZG9jdW1lbnRSb290RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9DYXRlZ29yeSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9OYW1lKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXROYW1lXygpIHsKLQkJcmV0dXJuIG5hbWVFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZV9WYWx1ZSgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKW5hbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXROYW1lX0xhbmcoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSluYW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXRUYXhvbm9teSgpIHsKLQkJcmV0dXJuIHRheG9ub215RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRheG9ub215X05sbmFtZSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKXRheG9ub215RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0VGF4b25vbXlfQ2F0ZWdvcnkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSl0YXhvbm9teUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFRheG9ub215X0lkKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGF4b25vbXlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9Mb2NhdGlvbigpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXRheG9ub215RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfTmFtZSgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXRheG9ub215RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfUmVmKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGF4b25vbXlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9UbW9kZWxLZXkoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl0YXhvbm9teUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teUZhY3RvcnkgZ2V0VGF4b25vbXlGYWN0b3J5KCkgewotCQlyZXR1cm4gKFRheG9ub215RmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCi0JICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKLQkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOwotCQlpc0NyZWF0ZWQgPSB0cnVlOwotCi0JCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcwotCQljYXRlZ29yeUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDQVRFR09SWSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoY2F0ZWdvcnlFQ2xhc3MsIENBVEVHT1JZX19OTE5BTUUpOwotCQljcmVhdGVFUmVmZXJlbmNlKGNhdGVnb3J5RUNsYXNzLCBDQVRFR09SWV9fQ0FURUdPUlkpOwotCQljcmVhdGVFQXR0cmlidXRlKGNhdGVnb3J5RUNsYXNzLCBDQVRFR09SWV9fQ09ERSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoY2F0ZWdvcnlFQ2xhc3MsIENBVEVHT1JZX19OQU1FKTsKLQotCQlkb2N1bWVudFJvb3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9DVU1FTlRfUk9PVCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04pOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fQ0FURUdPUlkpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fTkFNRSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19UQVhPTk9NWSk7Ci0KLQkJbmFtZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhOQU1FKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShuYW1lRUNsYXNzLCBOQU1FX19WQUxVRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUobmFtZUVDbGFzcywgTkFNRV9fTEFORyk7Ci0KLQkJdGF4b25vbXlFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEFYT05PTVkpOwotCQljcmVhdGVFUmVmZXJlbmNlKHRheG9ub215RUNsYXNzLCBUQVhPTk9NWV9fTkxOQU1FKTsKLQkJY3JlYXRlRVJlZmVyZW5jZSh0YXhvbm9teUVDbGFzcywgVEFYT05PTVlfX0NBVEVHT1JZKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh0YXhvbm9teUVDbGFzcywgVEFYT05PTVlfX0lEKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh0YXhvbm9teUVDbGFzcywgVEFYT05PTVlfX0xPQ0FUSU9OKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh0YXhvbm9teUVDbGFzcywgVEFYT05PTVlfX05BTUUpOwotCQljcmVhdGVFQXR0cmlidXRlKHRheG9ub215RUNsYXNzLCBUQVhPTk9NWV9fUkVGKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh0YXhvbm9teUVDbGFzcywgVEFYT05PTVlfX1RNT0RFTF9LRVkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcwotCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKLQkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKLQkJaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCi0JCXNldE5hbWUoZU5BTUUpOwotCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKLQkJc2V0TnNVUkkoZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcwotCQlYTUxUeXBlUGFja2FnZUltcGwgdGhlWE1MVHlwZVBhY2thZ2UgPSAoWE1MVHlwZVBhY2thZ2VJbXBsKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFhNTFR5cGVQYWNrYWdlLmVOU19VUkkpOwotCi0JCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKLQotCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycwotCQlpbml0RUNsYXNzKGNhdGVnb3J5RUNsYXNzLCBDYXRlZ29yeS5jbGFzcywgIkNhdGVnb3J5IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RVJlZmVyZW5jZShnZXRDYXRlZ29yeV9ObG5hbWUoKSwgdGhpcy5nZXROYW1lXygpLCBudWxsLCAibmxuYW1lIiwgbnVsbCwgMCwgLTEsIENhdGVnb3J5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRDYXRlZ29yeV9DYXRlZ29yeSgpLCB0aGlzLmdldENhdGVnb3J5KCksIG51bGwsICJjYXRlZ29yeSIsIG51bGwsIDAsIC0xLCBDYXRlZ29yeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0Q2F0ZWdvcnlfQ29kZSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgImNvZGUiLCBudWxsLCAwLCAxLCBDYXRlZ29yeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldENhdGVnb3J5X05hbWUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJuYW1lIiwgbnVsbCwgMCwgMSwgQ2F0ZWdvcnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3MoZG9jdW1lbnRSb290RUNsYXNzLCBEb2N1bWVudFJvb3QuY2xhc3MsICJEb2N1bWVudFJvb3QiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUZlYXR1cmVNYXBFbnRyeSgpLCAibWl4ZWQiLCBudWxsLCAwLCAtMSwgbnVsbCwgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgbnVsbCwgInhNTE5TUHJlZml4TWFwIiwgbnVsbCwgMCwgLTEsIG51bGwsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgbnVsbCwgInhTSVNjaGVtYUxvY2F0aW9uIiwgbnVsbCwgMCwgLTEsIG51bGwsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9DYXRlZ29yeSgpLCB0aGlzLmdldENhdGVnb3J5KCksIG51bGwsICJjYXRlZ29yeSIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfTmFtZSgpLCB0aGlzLmdldE5hbWVfKCksIG51bGwsICJuYW1lIiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9UYXhvbm9teSgpLCB0aGlzLmdldFRheG9ub215KCksIG51bGwsICJ0YXhvbm9teSIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3MobmFtZUVDbGFzcywgTmFtZS5jbGFzcywgIk5hbWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldE5hbWVfVmFsdWUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIE5hbWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXROYW1lX0xhbmcoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0TGFuZ3VhZ2UoKSwgImxhbmciLCBudWxsLCAwLCAxLCBOYW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKHRheG9ub215RUNsYXNzLCBUYXhvbm9teS5jbGFzcywgIlRheG9ub215IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RVJlZmVyZW5jZShnZXRUYXhvbm9teV9ObG5hbWUoKSwgdGhpcy5nZXROYW1lXygpLCBudWxsLCAibmxuYW1lIiwgbnVsbCwgMCwgLTEsIFRheG9ub215LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRUYXhvbm9teV9DYXRlZ29yeSgpLCB0aGlzLmdldENhdGVnb3J5KCksIG51bGwsICJjYXRlZ29yeSIsIG51bGwsIDAsIC0xLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGF4b25vbXlfSWQoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJpZCIsIG51bGwsIDAsIDEsIFRheG9ub215LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGF4b25vbXlfTG9jYXRpb24oKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJsb2NhdGlvbiIsIG51bGwsIDAsIDEsIFRheG9ub215LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGF4b25vbXlfTmFtZSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgIm5hbWUiLCBudWxsLCAwLCAxLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFRheG9ub215X1JlZigpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgInJlZiIsIG51bGwsIDAsIDEsIFRheG9ub215LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGF4b25vbXlfVG1vZGVsS2V5KCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAidG1vZGVsS2V5IiwgbnVsbCwgMSwgMSwgVGF4b25vbXkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCS8vIENyZWF0ZSByZXNvdXJjZQotCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKLQotCQkvLyBDcmVhdGUgYW5ub3RhdGlvbnMKLQkJLy8gaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhCi0JCWNyZWF0ZUV4dGVuZGVkTWV0YURhdGFBbm5vdGF0aW9ucygpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpemVzIHRoZSBhbm5vdGF0aW9ucyBmb3IgPGI+aHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhPC9iPi4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKSB7Ci0JCVN0cmluZyBzb3VyY2UgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIjsJCQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChjYXRlZ29yeUVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiQ2F0ZWdvcnkiLAotCQkJICJraW5kIiwgImVsZW1lbnRPbmx5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldENhdGVnb3J5X05sbmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJubG5hbWUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0Q2F0ZWdvcnlfQ2F0ZWdvcnkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiY2F0ZWdvcnkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0Q2F0ZWdvcnlfQ29kZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImNvZGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0Q2F0ZWdvcnlfTmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgIm5hbWUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZG9jdW1lbnRSb290RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICIiLAotCQkJICJraW5kIiwgIm1peGVkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50V2lsZGNhcmQiLAotCQkJICJuYW1lIiwgIjptaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ4bWxuczpwcmVmaXgiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieHNpOnNjaGVtYUxvY2F0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9DYXRlZ29yeSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJjYXRlZ29yeSIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfTmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJuYW1lIiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9UYXhvbm9teSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJ0YXhvbm9teSIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChuYW1lRUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJOYW1lIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0TmFtZV9WYWx1ZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICI6MCIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldE5hbWVfTGFuZygpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImxhbmciLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKHRheG9ub215RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJUYXhvbm9teSIsCi0JCQkgImtpbmQiLCAiZWxlbWVudE9ubHkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VGF4b25vbXlfTmxuYW1lKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgIm5sbmFtZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRUYXhvbm9teV9DYXRlZ29yeSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJjYXRlZ29yeSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRUYXhvbm9teV9JZCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImlkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub215X0xvY2F0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibG9jYXRpb24iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VGF4b25vbXlfTmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgIm5hbWUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VGF4b25vbXlfUmVmKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAicmVmIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub215X1Rtb2RlbEtleSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInRtb2RlbEtleSIKLQkJICAgfSk7Ci0JfQotCi19IC8vVGF4b25vbXlQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215QWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMyYjcwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215QWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215QWRhcHRlckZhY3RvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVGF4b25vbXlBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgVGF4b25vbXlQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlBZGFwdGVyRmFjdG9yeSgpIHsKLQkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7Ci0JCQltb2RlbFBhY2thZ2UgPSBUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKLQkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogVGhlIHN3aXRjaCB0aGUgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFRheG9ub215U3dpdGNoIG1vZGVsU3dpdGNoID0KLQkJbmV3IFRheG9ub215U3dpdGNoKCkgewotCQkJcHVibGljIE9iamVjdCBjYXNlQ2F0ZWdvcnkoQ2F0ZWdvcnkgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZUNhdGVnb3J5QWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290QWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlTmFtZShOYW1lIG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVOYW1lQWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlVGF4b25vbXkoVGF4b25vbXkgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZVRheG9ub215QWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOwotCQkJfQotCQl9OwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KLQkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKLQkJcmV0dXJuIChBZGFwdGVyKW1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7Ci0JfQotCi0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlQ2F0ZWdvcnlBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290IDxlbT5Eb2N1bWVudCBSb290PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVOYW1lQWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRheG9ub215QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfSAvL1RheG9ub215QWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWQ1Y2M2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRXh0ZW5kZWRNZXRhRGF0YTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VGYWN0b3J5SW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlIEZhY3Rvcnk8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LnV0aWwuVGF4b25vbXlSZXNvdXJjZUltcGwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFhNTFJlc291cmNlRmFjdG9yeUltcGwgewotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFeHRlbmRlZE1ldGFEYXRhIGV4dGVuZGVkTWV0YURhdGE7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JCWV4dGVuZGVkTWV0YURhdGEgPSBFeHRlbmRlZE1ldGFEYXRhLklOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKSB7Ci0JCVhNTFJlc291cmNlIHJlc3VsdCA9IG5ldyBUYXhvbm9teVJlc291cmNlSW1wbCh1cmkpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCi0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1NDSEVNQV9MT0NBVElPTiwgQm9vbGVhbi5UUlVFKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOwotCi0JCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9MRVhJQ0FMX0hBTkRMRVIsIEJvb2xlYW4uVFJVRSk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19IC8vVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215UmVzb3VyY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215UmVzb3VyY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjYmVkOWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVJlc291cmNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teVJlc291cmNlSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlSW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlIDwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkudXRpbC5UYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215UmVzb3VyY2VJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VJbXBsIHsKLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB1cmkgdGhlIFVSSSBvZiB0aGUgbmV3IHJlc291cmNlLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlSZXNvdXJjZUltcGwoVVJJIHVyaSkgewotCQlzdXBlcih1cmkpOwotCX0KLQotfSAvL1RheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVN3aXRjaC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVN3aXRjaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmRkYzc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlTd2l0Y2guamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215U3dpdGNoLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KLSAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KLSAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKLSAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0Ci0gKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5Ci0gKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKLSAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVGF4b25vbXlTd2l0Y2ggewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgVGF4b25vbXlQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlTd2l0Y2goKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7Ci0JCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKLQkJfQotCQllbHNlIHsKLQkJCUxpc3QgZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKLQkJCXJldHVybgotCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/Ci0JCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKLQkJCQkJZG9Td2l0Y2goKEVDbGFzcyllU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUlk6IHsKLQkJCQlDYXRlZ29yeSBjYXRlZ29yeSA9IChDYXRlZ29yeSl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlQ2F0ZWdvcnkoY2F0ZWdvcnkpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1Q6IHsKLQkJCQlEb2N1bWVudFJvb3QgZG9jdW1lbnRSb290ID0gKERvY3VtZW50Um9vdCl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlRG9jdW1lbnRSb290KGRvY3VtZW50Um9vdCk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuTkFNRTogewotCQkJCU5hbWUgbmFtZSA9IChOYW1lKXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VOYW1lKG5hbWUpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZOiB7Ci0JCQkJVGF4b25vbXkgdGF4b25vbXkgPSAoVGF4b25vbXkpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZVRheG9ub215KHRheG9ub215KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q2F0ZWdvcnk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q2F0ZWdvcnk8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZUNhdGVnb3J5KENhdGVnb3J5IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VEb2N1bWVudFJvb3QoRG9jdW1lbnRSb290IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VOYW1lKE5hbWUgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UYXhvbm9teTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UYXhvbm9teTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlVGF4b25vbXkoVGF4b25vbXkgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfSAvL1RheG9ub215U3dpdGNoCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvRG9jdW1lbnRSb290LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvRG9jdW1lbnRSb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5OGRjYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L0RvY3VtZW50Um9vdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRG9jdW1lbnRSb290LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VWRkaVJlZ2lzdHJ5IDxlbT5VZGRpIFJlZ2lzdHJ5PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdCgpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRSb290IGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWl4ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwLkVudHJ5fS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWl4ZWQ8L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9NaXhlZCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZlYXR1cmVNYXBFbnRyeSIgbWFueT0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRmVhdHVyZU1hcCBnZXRNaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpCi0JICogQG1vZGVsIG1hcFR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIga2V5VHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWVUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0cmFuc2llbnQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVNYXAgZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlhTSSBTY2hlbWEgTG9jYXRpb248L2I+PC9lbT4nIG1hcC4KLQkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicgbWFwLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBtb2RlbCBtYXBUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIGtleVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlVHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTWFwIGdldFhTSVNjaGVtYUxvY2F0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXhvbm9taWVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXhvbm9taWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub21pZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldFRheG9ub21pZXMoVGF4b25vbWllcykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9taWVzIGdldFRheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXhvbm9taWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRUYXhvbm9taWVzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRUYXhvbm9taWVzKFRheG9ub21pZXMgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VWRkaSBSZWdpc3RyeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5VZGRpIFJlZ2lzdHJ5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXRVZGRpUmVnaXN0cnkoVURESVJlZ2lzdHJ5KQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVURESVJlZ2lzdHJ5IGdldFVkZGlSZWdpc3RyeSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFVkZGlSZWdpc3RyeSA8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0VWRkaVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRVZGRpUmVnaXN0cnkoVURESVJlZ2lzdHJ5IHZhbHVlKTsKLQotfSAvLyBEb2N1bWVudFJvb3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9UYXhvbm9taWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVGF4b25vbWllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzdlYmNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9UYXhvbm9taWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub21pZXMuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGF4b25vbWllczwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzI2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRUYXhvbm9taWVzKCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBUYXhvbm9taWVzIGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGF4b25vbXk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215fS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRheG9ub215PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFRheG9ub21pZXNfVGF4b25vbXkoKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215IiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXRUYXhvbm9teSgpOwotCi19IC8vIFRheG9ub21pZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNmMjExNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VRERJUmVnaXN0cnk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFZlcnNpb24gPGVtPlZlcnNpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREaXNjb3ZlcnlVUkwgPGVtPkRpc2NvdmVyeSBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRQdWJsaWNhdGlvblVSTCA8ZW0+UHVibGljYXRpb24gVVJMPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCA8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMIDxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERlZmF1bHRMb2dpbiA8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERlZmF1bHRQYXNzd29yZCA8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBVRERJUmVnaXN0cnkgZXh0ZW5kcyBSZWdpc3RyeSB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVyc2lvbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVyc2lvbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WZXJzaW9uPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRWZXJzaW9uKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5X1ZlcnNpb24oKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRWZXJzaW9uKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0VmVyc2lvbiA8ZW0+VmVyc2lvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVyc2lvbjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VmVyc2lvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VmVyc2lvbihTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGlzY292ZXJ5IFVSTDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNjb3ZlcnkgVVJMPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXREaXNjb3ZlcnlVUkwoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfRGlzY292ZXJ5VVJMKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0RGlzY292ZXJ5VVJMKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGlzY292ZXJ5VVJMIDxlbT5EaXNjb3ZlcnkgVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNjb3ZlcnkgVVJMPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXREaXNjb3ZlcnlVUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldERpc2NvdmVyeVVSTChTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UHVibGljYXRpb24gVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UHVibGljYXRpb24gVVJMPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRQdWJsaWNhdGlvblVSTChTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9QdWJsaWNhdGlvblVSTCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFB1YmxpY2F0aW9uVVJMKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0UHVibGljYXRpb25VUkwgPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHVibGljYXRpb24gVVJMPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRQdWJsaWNhdGlvblVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0UHVibGljYXRpb25VUkwoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0U2VjdXJlZERpc2NvdmVyeVVSTChTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9TZWN1cmVkRGlzY292ZXJ5VVJMKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWREaXNjb3ZlcnlVUkwgPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRTZWN1cmVkRGlzY292ZXJ5VVJMKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFNlY3VyZWRQdWJsaWNhdGlvblVSTChTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9TZWN1cmVkUHVibGljYXRpb25VUkwoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwgPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRTZWN1cmVkUHVibGljYXRpb25VUkwoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlZmF1bHQgTG9naW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlZmF1bHQgTG9naW48L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0RGVmYXVsdExvZ2luKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRMb2dpbigpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldERlZmF1bHRMb2dpbigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERlZmF1bHRMb2dpbiA8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0RGVmYXVsdExvZ2luKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXREZWZhdWx0TG9naW4oU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlZmF1bHQgUGFzc3dvcmQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0RGVmYXVsdFBhc3N3b3JkKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRQYXNzd29yZCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldERlZmF1bHRQYXNzd29yZCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERlZmF1bHRQYXNzd29yZCA8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0RGVmYXVsdFBhc3N3b3JkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXREZWZhdWx0UGFzc3dvcmQoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRheG9ub21pZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRheG9ub21pZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbWllczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0VGF4b25vbWllcyhUYXhvbm9taWVzKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfVGF4b25vbWllcygpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub21pZXMgZ2V0VGF4b25vbWllcygpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub21pZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldFRheG9ub21pZXMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFRheG9ub21pZXMoVGF4b25vbWllcyB2YWx1ZSk7Ci0KLX0gLy8gVURESVJlZ2lzdHJ5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxMGM3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBVRERJUmVnaXN0cnlGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgewotCS8qKgotCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVURESVJlZ2lzdHJ5RmFjdG9yeSBlSU5TVEFOQ0UgPSBuZXcgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlGYWN0b3J5SW1wbCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlEb2N1bWVudFJvb3QgY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRheG9ub21pZXM8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRheG9ub21pZXM8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub21pZXMgY3JlYXRlVGF4b25vbWllcygpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VRERJUmVnaXN0cnk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVERElSZWdpc3RyeTwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVURESVJlZ2lzdHJ5IGNyZWF0ZVVERElSZWdpc3RyeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlVRERJUmVnaXN0cnlQYWNrYWdlIGdldFVERElSZWdpc3RyeVBhY2thZ2UoKTsKLQotfSAvL1VERElSZWdpc3RyeUZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlQYWNrYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5UGFja2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWU1YWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlQYWNrYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NjggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlQYWNrYWdlLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICogPC91bD4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiAKLSAqICAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLgotICogCi0gKiAgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0KLSAqICAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAKLSAqIAotICogICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUgZGVmaW5lZAotICogICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZQotICogICAgIGZvbGxvd2luZyBuYW1lcyBhcmUgY3VycmVudGx5IGRlZmluZWQgaW4gdGhpcyBuYW1lc3BhY2UgYW5kIHNob3VsZAotICogICAgIG5vdCBiZSB1c2VkIHdpdGggY29uZmxpY3Rpbmcgc2VtYW50aWNzIGJ5IGFueSBXb3JraW5nIEdyb3VwLAotICogICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOgotICogCi0gKiAgICAgYmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueQotICogICAgICAgICAgcmVsYXRpdmUgVVJJcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGVsZW1lbnQgb24gd2hpY2ggaXQKLSAqICAgICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIGlkICAgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELgotICogICAgICAgICAgVGhlIHhtbDppZCBzcGVjaWZpY2F0aW9uIGlzIG5vdCB5ZXQgYSBXM0MgUmVjb21tZW5kYXRpb24sCi0gKiAgICAgICAgICBidXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgaGVyZSB0byBmYWNpbGl0YXRlIGV4cGVyaW1lbnRhdGlvbgotICogICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZAotICogICAgICAgICAgaW4gdGhlIHNwZWNpYWxBdHRycyBhdHRyaWJ1dGUgZ3JvdXAuCi0gKiAKLSAqICAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBpcyBhIGxhbmd1YWdlIGNvZGUgZm9yIHRoZSBuYXR1cmFsIGxhbmd1YWdlIG9mIHRoZSBjb250ZW50IG9mCi0gKiAgICAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqICAgCi0gKiAgICAgc3BhY2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UKLSAqICAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nCi0gKiAgICAgICAgICBkaXNjaXBsaW5lIGlzIGludGVuZGVkIGZvciB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudDsgaXRzCi0gKiAgICAgICAgICB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cwotICogICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBGYXRoZXIgKGluIGFueSBjb250ZXh0IGF0IGFsbCk6IGRlbm90ZXMgSm9uIEJvc2FrLCB0aGUgY2hhaXIgb2YgCi0gKiAgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgCi0gKiAgICAgICAgICB0aGUgZm9sbG93aW5nIGRlY2lzaW9uIG9mIHRoZSBXM0MgWE1MIFBsZW5hcnkgYW5kIAotICogICAgICAgICAgWE1MIENvb3JkaW5hdGlvbiBncm91cHM6Ci0gKiAKLSAqICAgICAgICAgICAgICBJbiBhcHByZWNpYXRpb24gZm9yIGhpcyB2aXNpb24sIGxlYWRlcnNoaXAgYW5kIGRlZGljYXRpb24KLSAqICAgICAgICAgICAgICB0aGUgVzNDIFhNTCBQbGVuYXJ5IG9uIHRoaXMgMTB0aCBkYXkgb2YgRmVicnVhcnksIDIwMDAKLSAqICAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lCi0gKiAgICAgICAgICAgICAgeG1sOkZhdGhlcgotICogICAKLSAqIFRoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwCi0gKiAgICAgICAgIHN1aXRhYmxlIGZvciB1c2UgYnkKLSAqICAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZywgeG1sOnNwYWNlIG9yIHhtbDppZAotICogICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLgotICogCi0gKiAgICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hCi0gKiAgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOgotICogICAgICAgICAmbHQ7c2NoZW1hIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDtpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0gKiAgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLyZndDsKLSAqIAotICogICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzCi0gKiAgICAgICAgIG9yIHRoZSBncm91cCBkZWZpbmVkIGJlbG93IHdpbGwgaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3QsIGUuZy4KLSAqIAotICogICAgICAgICAmbHQ7dHlwZSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWw6c3BlY2lhbEF0dHJzIi8mZ3Q7Ci0gKiAgCi0gKiAgICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UKLSAqICAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcwotICogSW4ga2VlcGluZyB3aXRoIHRoZSBYTUwgU2NoZW1hIFdHJ3Mgc3RhbmRhcmQgdmVyc2lvbmluZwotICogICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4KLSAqICAgIEF0IHRoZSBkYXRlIG9mIGlzc3VlIGl0IGNhbiBhbHNvIGJlIGZvdW5kIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuCi0gKiAgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLAotICogICAgaW4gb3JkZXIgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgWE1MIFNjaGVtYQotICogICAgaXRzZWxmLCBvciB3aXRoIHRoZSBYTUwgbmFtZXNwYWNlIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MCi0gKiAgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2Qgd2lsbCBjaGFuZ2UKLSAqICAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4KLSAqICAgCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeUZhY3RvcnkKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBVRERJUmVnaXN0cnlQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgewotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOQU1FID0gInVkZGlyZWdpc3RyeSI7Ci0KLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeSI7Ci0KLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1BSRUZJWCA9ICJ1ZGRpcmVnaXN0cnkiOwotCi0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlVRERJUmVnaXN0cnlQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5UGFja2FnZUltcGwuaW5pdCgpOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5UGFja2FnZUltcGwjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1QgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19NSVhFRCA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVAgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhTSSBTY2hlbWEgTG9jYXRpb248L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXhvbm9taWVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fVEFYT05PTUlFUyA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VWRkaSBSZWdpc3RyeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1VERElfUkVHSVNUUlkgPSA0OwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfRkVBVFVSRV9DT1VOVCA9IDU7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVGF4b25vbWllc0ltcGwgPGVtPlRheG9ub21pZXM8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlRheG9ub21pZXNJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeVBhY2thZ2VJbXBsI2dldFRheG9ub21pZXMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgVEFYT05PTUlFUyA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGF4b25vbXk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01JRVNfX1RBWE9OT01ZID0gMDsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+VGF4b25vbWllczwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NSUVTX0ZFQVRVUkVfQ09VTlQgPSAxOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwgPGVtPlVERElSZWdpc3RyeTwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlQYWNrYWdlSW1wbCNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWSA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fTkFNRSA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTkFNRTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fREVTQ1JJUFRJT04gPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0RFU0NSSVBUSU9OOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fSUQgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0lEOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fTE9DQVRJT04gPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0xPQ0FUSU9OOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX1JFRiA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fUkVGOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlcnNpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19WRVJTSU9OID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2NvdmVyeSBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19ESVNDT1ZFUllfVVJMID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlB1YmxpY2F0aW9uIFVSTDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX1BVQkxJQ0FUSU9OX1VSTCA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkwgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19TRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTCA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgNDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWZhdWx0IExvZ2luPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fREVGQVVMVF9MT0dJTiA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgNTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWZhdWx0IFBhc3N3b3JkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fREVGQVVMVF9QQVNTV09SRCA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgNjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXhvbm9taWVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUyA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgNzsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+VURESVJlZ2lzdHJ5PC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfRkVBVFVSRV9DT1VOVCA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgODsKLQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290IDxlbT5Eb2N1bWVudCBSb290PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldERvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPk1peGVkPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE1peGVkKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlRheG9ub21pZXM8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbWllcygpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfVGF4b25vbWllcygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VWRkaVJlZ2lzdHJ5IDxlbT5VZGRpIFJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRVZGRpUmVnaXN0cnkoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1VkZGlSZWdpc3RyeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcwotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0VGF4b25vbWllcygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXMjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5UYXhvbm9teTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXMjZ2V0VGF4b25vbXkoKQotCSAqIEBzZWUgI2dldFRheG9ub21pZXMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldFRheG9ub21pZXNfVGF4b25vbXkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSA8ZW0+VURESVJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlVERElSZWdpc3RyeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0VURESVJlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRWZXJzaW9uIDxlbT5WZXJzaW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmVyc2lvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRWZXJzaW9uKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9WZXJzaW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREaXNjb3ZlcnlVUkwgPGVtPkRpc2NvdmVyeSBVUkw8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXNjb3ZlcnkgVVJMPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERpc2NvdmVyeVVSTCgpCi0JICogQHNlZSAjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfRGlzY292ZXJ5VVJMKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRQdWJsaWNhdGlvblVSTCA8ZW0+UHVibGljYXRpb24gVVJMPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UHVibGljYXRpb24gVVJMPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9QdWJsaWNhdGlvblVSTCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCA8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWREaXNjb3ZlcnlVUkwoKQotCSAqIEBzZWUgI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWREaXNjb3ZlcnlVUkwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCA8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKQotCSAqIEBzZWUgI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWRQdWJsaWNhdGlvblVSTCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGVmYXVsdExvZ2luIDxlbT5EZWZhdWx0IExvZ2luPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0TG9naW4oKQotCSAqIEBzZWUgI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRMb2dpbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGVmYXVsdFBhc3N3b3JkIDxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0UGFzc3dvcmQoKQotCSAqIEBzZWUgI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRQYXNzd29yZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlRheG9ub21pZXM8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0VGF4b25vbWllcygpCi0JICogQHNlZSAjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRVRERJUmVnaXN0cnlfVGF4b25vbWllcygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVURESVJlZ2lzdHJ5RmFjdG9yeSBnZXRVRERJUmVnaXN0cnlGYWN0b3J5KCk7Ci0KLX0gLy9VRERJUmVnaXN0cnlQYWNrYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDJkM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRG9jdW1lbnRSb290SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkJhc2ljRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZUVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRVZGRpUmVnaXN0cnkgPGVtPlVkZGkgUmVnaXN0cnk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudFJvb3RJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBEb2N1bWVudFJvb3QgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1peGVkKCkgPGVtPk1peGVkPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE1peGVkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRmVhdHVyZU1hcCBtaXhlZCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYTUxOU1ByZWZpeE1hcCgpIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYTUxOU1ByZWZpeE1hcCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeE1MTlNQcmVmaXhNYXAgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fScgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTWFwIHhTSVNjaGVtYUxvY2F0aW9uID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBEb2N1bWVudFJvb3RJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290KCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEZlYXR1cmVNYXAgZ2V0TWl4ZWQoKSB7Ci0JCWlmIChtaXhlZCA9PSBudWxsKSB7Ci0JCQltaXhlZCA9IG5ldyBCYXNpY0ZlYXR1cmVNYXAodGhpcywgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCX0KLQkJcmV0dXJuIG1peGVkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhNTE5TUHJlZml4TWFwKCkgewotCQlpZiAoeE1MTlNQcmVmaXhNYXAgPT0gbnVsbCkgewotCQkJeE1MTlNQcmVmaXhNYXAgPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVApOwotCQl9Ci0JCXJldHVybiB4TUxOU1ByZWZpeE1hcDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJaWYgKHhTSVNjaGVtYUxvY2F0aW9uID09IG51bGwpIHsKLQkJCXhTSVNjaGVtYUxvY2F0aW9uID0gbmV3IEVjb3JlRU1hcChFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OKTsKLQkJfQotCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub21pZXMgZ2V0VGF4b25vbWllcygpIHsKLQkJcmV0dXJuIChUYXhvbm9taWVzKWdldE1peGVkKCkuZ2V0KFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFRheG9ub21pZXMoVGF4b25vbWllcyBuZXdUYXhvbm9taWVzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKSwgbmV3VGF4b25vbWllcywgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGF4b25vbWllcyhUYXhvbm9taWVzIG5ld1RheG9ub21pZXMpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVGF4b25vbWllcygpLCBuZXdUYXhvbm9taWVzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5IGdldFVkZGlSZWdpc3RyeSgpIHsKLQkJcmV0dXJuIChVRERJUmVnaXN0cnkpZ2V0TWl4ZWQoKS5nZXQoVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1VkZGlSZWdpc3RyeSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRVZGRpUmVnaXN0cnkoVURESVJlZ2lzdHJ5IG5ld1VkZGlSZWdpc3RyeSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKSwgbmV3VWRkaVJlZ2lzdHJ5LCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRVZGRpUmVnaXN0cnkoVURESVJlZ2lzdHJ5IG5ld1VkZGlSZWdpc3RyeSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKSwgbmV3VWRkaVJlZ2lzdHJ5KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0TWl4ZWQoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFhNTE5TUHJlZml4TWFwKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYU0lTY2hlbWFMb2NhdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVM6Ci0JCQkJCXJldHVybiBiYXNpY1NldFRheG9ub21pZXMobnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1VERElfUkVHSVNUUlk6Ci0JCQkJCXJldHVybiBiYXNpY1NldFVkZGlSZWdpc3RyeShudWxsLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gZ2V0TWl4ZWQoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCXJldHVybiBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJcmV0dXJuIGdldFhTSVNjaGVtYUxvY2F0aW9uKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTUlFUzoKLQkJCQlyZXR1cm4gZ2V0VGF4b25vbWllcygpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1VERElfUkVHSVNUUlk6Ci0JCQkJcmV0dXJuIGdldFVkZGlSZWdpc3RyeSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJZ2V0TWl4ZWQoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5jbGVhcigpOwotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTUlFUzoKLQkJCQlzZXRUYXhvbm9taWVzKChUYXhvbm9taWVzKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVURESV9SRUdJU1RSWToKLQkJCQlzZXRVZGRpUmVnaXN0cnkoKFVERElSZWdpc3RyeSluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTUlFUzoKLQkJCQlzZXRUYXhvbm9taWVzKChUYXhvbm9taWVzKW51bGwpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19VRERJX1JFR0lTVFJZOgotCQkJCXNldFVkZGlSZWdpc3RyeSgoVURESVJlZ2lzdHJ5KW51bGwpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCXJldHVybiBtaXhlZCAhPSBudWxsICYmICFtaXhlZC5pc0VtcHR5KCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4geE1MTlNQcmVmaXhNYXAgIT0gbnVsbCAmJiAheE1MTlNQcmVmaXhNYXAuaXNFbXB0eSgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgIXhTSVNjaGVtYUxvY2F0aW9uLmlzRW1wdHkoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NSUVTOgotCQkJCXJldHVybiBnZXRUYXhvbm9taWVzKCkgIT0gbnVsbDsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19VRERJX1JFR0lTVFJZOgotCQkJCXJldHVybiBnZXRVZGRpUmVnaXN0cnkoKSAhPSBudWxsOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAobWl4ZWQ6ICIpOwotCQlyZXN1bHQuYXBwZW5kKG1peGVkKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vRG9jdW1lbnRSb290SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVGF4b25vbWllc0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1RheG9ub21pZXNJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNzViZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVGF4b25vbWllc0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub21pZXNJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGF4b25vbWllczwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5UYXhvbm9taWVzSW1wbCNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9taWVzSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgVGF4b25vbWllcyB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGF4b25vbXkoKSA8ZW0+VGF4b25vbXk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCB0YXhvbm9teSA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgVGF4b25vbWllc0ltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXRUYXhvbm9taWVzKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldFRheG9ub215KCkgewotCQlpZiAodGF4b25vbXkgPT0gbnVsbCkgewotCQkJdGF4b25vbXkgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoVGF4b25vbXkuY2xhc3MsIHRoaXMsIFVERElSZWdpc3RyeVBhY2thZ2UuVEFYT05PTUlFU19fVEFYT05PTVkpOwotCQl9Ci0JCXJldHVybiB0YXhvbm9teTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVEFYT05PTUlFU19fVEFYT05PTVk6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0VGF4b25vbXkoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVNfX1RBWE9OT01ZOgotCQkJCXJldHVybiBnZXRUYXhvbm9teSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTX19UQVhPTk9NWToKLQkJCQlnZXRUYXhvbm9teSgpLmNsZWFyKCk7Ci0JCQkJZ2V0VGF4b25vbXkoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVEFYT05PTUlFU19fVEFYT05PTVk6Ci0JCQkJZ2V0VGF4b25vbXkoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVNfX1RBWE9OT01ZOgotCQkJCXJldHVybiB0YXhvbm9teSAhPSBudWxsICYmICF0YXhvbm9teS5pc0VtcHR5KCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotfSAvL1RheG9ub21pZXNJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU4MDMzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBVRERJUmVnaXN0cnlGYWN0b3J5IHsKLQkvKioKLQkgKiBDcmVhdGVzIGFuZCBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKLQkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UOiByZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVEFYT05PTUlFUzogcmV0dXJuIGNyZWF0ZVRheG9ub21pZXMoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZOiByZXR1cm4gY3JlYXRlVURESVJlZ2lzdHJ5KCk7Ci0JCQlkZWZhdWx0OgotCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpIHsKLQkJRG9jdW1lbnRSb290SW1wbCBkb2N1bWVudFJvb3QgPSBuZXcgRG9jdW1lbnRSb290SW1wbCgpOwotCQlyZXR1cm4gZG9jdW1lbnRSb290OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9taWVzIGNyZWF0ZVRheG9ub21pZXMoKSB7Ci0JCVRheG9ub21pZXNJbXBsIHRheG9ub21pZXMgPSBuZXcgVGF4b25vbWllc0ltcGwoKTsKLQkJcmV0dXJuIHRheG9ub21pZXM7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeSBjcmVhdGVVRERJUmVnaXN0cnkoKSB7Ci0JCVVERElSZWdpc3RyeUltcGwgdWRkaVJlZ2lzdHJ5ID0gbmV3IFVERElSZWdpc3RyeUltcGwoKTsKLQkJcmV0dXJuIHVkZGlSZWdpc3RyeTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5UGFja2FnZSBnZXRVRERJUmVnaXN0cnlQYWNrYWdlKCkgewotCQlyZXR1cm4gKFVERElSZWdpc3RyeVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBkZXByZWNhdGVkCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgVURESVJlZ2lzdHJ5UGFja2FnZSBnZXRQYWNrYWdlKCkgewotCQlyZXR1cm4gVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0U7Ci0JfQotCi19IC8vVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhlMzhiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MzEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VRERJUmVnaXN0cnk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCNnZXRWZXJzaW9uIDxlbT5WZXJzaW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0RGlzY292ZXJ5VVJMIDxlbT5EaXNjb3ZlcnkgVVJMPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0UHVibGljYXRpb25VUkwgPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsI2dldFNlY3VyZWREaXNjb3ZlcnlVUkwgPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsI2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCA8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCNnZXREZWZhdWx0TG9naW4gPGVtPkRlZmF1bHQgTG9naW48L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCNnZXREZWZhdWx0UGFzc3dvcmQgPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5SW1wbCBleHRlbmRzIFJlZ2lzdHJ5SW1wbCBpbXBsZW1lbnRzIFVERElSZWdpc3RyeSB7Ci0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlcnNpb24oKSA8ZW0+VmVyc2lvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmVyc2lvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSU0lPTl9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZXJzaW9uKCkgPGVtPlZlcnNpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZlcnNpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgdmVyc2lvbiA9IFZFUlNJT05fRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzY292ZXJ5VVJMKCkgPGVtPkRpc2NvdmVyeSBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERpc2NvdmVyeVVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTQ09WRVJZX1VSTF9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNjb3ZlcnlVUkwoKSA8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0RGlzY292ZXJ5VVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGRpc2NvdmVyeVVSTCA9IERJU0NPVkVSWV9VUkxfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHVibGljYXRpb25VUkwoKSA8ZW0+UHVibGljYXRpb24gVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRQdWJsaWNhdGlvblVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElDQVRJT05fVVJMX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFB1YmxpY2F0aW9uVVJMKCkgPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0UHVibGljYXRpb25VUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgcHVibGljYXRpb25VUkwgPSBQVUJMSUNBVElPTl9VUkxfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpIDxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFNlY3VyZWREaXNjb3ZlcnlVUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFQ1VSRURfRElTQ09WRVJZX1VSTF9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCkgPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBzZWN1cmVkRGlzY292ZXJ5VVJMID0gU0VDVVJFRF9ESVNDT1ZFUllfVVJMX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpIDxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKSA8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBzZWN1cmVkUHVibGljYXRpb25VUkwgPSBTRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWZhdWx0TG9naW4oKSA8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0RGVmYXVsdExvZ2luKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0xPR0lOX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlZmF1bHRMb2dpbigpIDxlbT5EZWZhdWx0IExvZ2luPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXREZWZhdWx0TG9naW4oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgZGVmYXVsdExvZ2luID0gREVGQVVMVF9MT0dJTl9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWZhdWx0UGFzc3dvcmQoKSA8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0RGVmYXVsdFBhc3N3b3JkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1BBU1NXT1JEX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlZmF1bHRQYXNzd29yZCgpIDxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXREZWZhdWx0UGFzc3dvcmQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgZGVmYXVsdFBhc3N3b3JkID0gREVGQVVMVF9QQVNTV09SRF9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRheG9ub21pZXMoKSA8ZW0+VGF4b25vbWllczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VGF4b25vbWllcygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFRheG9ub21pZXMgdGF4b25vbWllcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgVURESVJlZ2lzdHJ5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldFVERElSZWdpc3RyeSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VmVyc2lvbigpIHsKLQkJcmV0dXJuIHZlcnNpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmVyc2lvbihTdHJpbmcgbmV3VmVyc2lvbikgewotCQlTdHJpbmcgb2xkVmVyc2lvbiA9IHZlcnNpb247Ci0JCXZlcnNpb24gPSBuZXdWZXJzaW9uOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1ZFUlNJT04sIG9sZFZlcnNpb24sIHZlcnNpb24pKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldERpc2NvdmVyeVVSTCgpIHsKLQkJcmV0dXJuIGRpc2NvdmVyeVVSTDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREaXNjb3ZlcnlVUkwoU3RyaW5nIG5ld0Rpc2NvdmVyeVVSTCkgewotCQlTdHJpbmcgb2xkRGlzY292ZXJ5VVJMID0gZGlzY292ZXJ5VVJMOwotCQlkaXNjb3ZlcnlVUkwgPSBuZXdEaXNjb3ZlcnlVUkw7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTCwgb2xkRGlzY292ZXJ5VVJMLCBkaXNjb3ZlcnlVUkwpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFB1YmxpY2F0aW9uVVJMKCkgewotCQlyZXR1cm4gcHVibGljYXRpb25VUkw7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0UHVibGljYXRpb25VUkwoU3RyaW5nIG5ld1B1YmxpY2F0aW9uVVJMKSB7Ci0JCVN0cmluZyBvbGRQdWJsaWNhdGlvblVSTCA9IHB1YmxpY2F0aW9uVVJMOwotCQlwdWJsaWNhdGlvblVSTCA9IG5ld1B1YmxpY2F0aW9uVVJMOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1BVQkxJQ0FUSU9OX1VSTCwgb2xkUHVibGljYXRpb25VUkwsIHB1YmxpY2F0aW9uVVJMKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCkgewotCQlyZXR1cm4gc2VjdXJlZERpc2NvdmVyeVVSTDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZWN1cmVkRGlzY292ZXJ5VVJMKFN0cmluZyBuZXdTZWN1cmVkRGlzY292ZXJ5VVJMKSB7Ci0JCVN0cmluZyBvbGRTZWN1cmVkRGlzY292ZXJ5VVJMID0gc2VjdXJlZERpc2NvdmVyeVVSTDsKLQkJc2VjdXJlZERpc2NvdmVyeVVSTCA9IG5ld1NlY3VyZWREaXNjb3ZlcnlVUkw7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9ESVNDT1ZFUllfVVJMLCBvbGRTZWN1cmVkRGlzY292ZXJ5VVJMLCBzZWN1cmVkRGlzY292ZXJ5VVJMKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKSB7Ci0JCXJldHVybiBzZWN1cmVkUHVibGljYXRpb25VUkw7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKFN0cmluZyBuZXdTZWN1cmVkUHVibGljYXRpb25VUkwpIHsKLQkJU3RyaW5nIG9sZFNlY3VyZWRQdWJsaWNhdGlvblVSTCA9IHNlY3VyZWRQdWJsaWNhdGlvblVSTDsKLQkJc2VjdXJlZFB1YmxpY2F0aW9uVVJMID0gbmV3U2VjdXJlZFB1YmxpY2F0aW9uVVJMOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfUFVCTElDQVRJT05fVVJMLCBvbGRTZWN1cmVkUHVibGljYXRpb25VUkwsIHNlY3VyZWRQdWJsaWNhdGlvblVSTCkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdExvZ2luKCkgewotCQlyZXR1cm4gZGVmYXVsdExvZ2luOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRMb2dpbihTdHJpbmcgbmV3RGVmYXVsdExvZ2luKSB7Ci0JCVN0cmluZyBvbGREZWZhdWx0TG9naW4gPSBkZWZhdWx0TG9naW47Ci0JCWRlZmF1bHRMb2dpbiA9IG5ld0RlZmF1bHRMb2dpbjsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOLCBvbGREZWZhdWx0TG9naW4sIGRlZmF1bHRMb2dpbikpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdFBhc3N3b3JkKCkgewotCQlyZXR1cm4gZGVmYXVsdFBhc3N3b3JkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRQYXNzd29yZChTdHJpbmcgbmV3RGVmYXVsdFBhc3N3b3JkKSB7Ci0JCVN0cmluZyBvbGREZWZhdWx0UGFzc3dvcmQgPSBkZWZhdWx0UGFzc3dvcmQ7Ci0JCWRlZmF1bHRQYXNzd29yZCA9IG5ld0RlZmF1bHRQYXNzd29yZDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX1BBU1NXT1JELCBvbGREZWZhdWx0UGFzc3dvcmQsIGRlZmF1bHRQYXNzd29yZCkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9taWVzIGdldFRheG9ub21pZXMoKSB7Ci0JCXJldHVybiB0YXhvbm9taWVzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFRheG9ub21pZXMoVGF4b25vbWllcyBuZXdUYXhvbm9taWVzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCVRheG9ub21pZXMgb2xkVGF4b25vbWllcyA9IHRheG9ub21pZXM7Ci0JCXRheG9ub21pZXMgPSBuZXdUYXhvbm9taWVzOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKLQkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVMsIG9sZFRheG9ub21pZXMsIG5ld1RheG9ub21pZXMpOwotCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOwotCQl9Ci0JCXJldHVybiBtc2dzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRheG9ub21pZXMoVGF4b25vbWllcyBuZXdUYXhvbm9taWVzKSB7Ci0JCWlmIChuZXdUYXhvbm9taWVzICE9IHRheG9ub21pZXMpIHsKLQkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOwotCQkJaWYgKHRheG9ub21pZXMgIT0gbnVsbCkKLQkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpdGF4b25vbWllcykuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUywgbnVsbCwgbXNncyk7Ci0JCQlpZiAobmV3VGF4b25vbWllcyAhPSBudWxsKQotCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdUYXhvbm9taWVzKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTLCBudWxsLCBtc2dzKTsKLQkJCW1zZ3MgPSBiYXNpY1NldFRheG9ub21pZXMobmV3VGF4b25vbWllcywgbXNncyk7Ci0JCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7Ci0JCX0KLQkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVMsIG5ld1RheG9ub21pZXMsIG5ld1RheG9ub21pZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTkFNRToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXROYW1lKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RGVzY3JpcHRpb24oKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTOgotCQkJCQlyZXR1cm4gYmFzaWNTZXRUYXhvbm9taWVzKG51bGwsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZ2V0RGVzY3JpcHRpb24oKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19JRDoKLQkJCQlyZXR1cm4gZ2V0SWQoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0TG9jYXRpb24oKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19SRUY6Ci0JCQkJcmV0dXJuIGdldFJlZigpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1ZFUlNJT046Ci0JCQkJcmV0dXJuIGdldFZlcnNpb24oKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ESVNDT1ZFUllfVVJMOgotCQkJCXJldHVybiBnZXREaXNjb3ZlcnlVUkwoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19QVUJMSUNBVElPTl9VUkw6Ci0JCQkJcmV0dXJuIGdldFB1YmxpY2F0aW9uVVJMKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9ESVNDT1ZFUllfVVJMOgotCQkJCXJldHVybiBnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkw6Ci0JCQkJcmV0dXJuIGdldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfTE9HSU46Ci0JCQkJcmV0dXJuIGdldERlZmF1bHRMb2dpbigpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfUEFTU1dPUkQ6Ci0JCQkJcmV0dXJuIGdldERlZmF1bHRQYXNzd29yZCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVM6Ci0JCQkJcmV0dXJuIGdldFRheG9ub21pZXMoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTkFNRToKLQkJCQlnZXROYW1lKCkuY2xlYXIoKTsKLQkJCQlnZXROYW1lKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJZ2V0RGVzY3JpcHRpb24oKS5jbGVhcigpOwotCQkJCWdldERlc2NyaXB0aW9uKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fSUQ6Ci0JCQkJc2V0SWQoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0xPQ0FUSU9OOgotCQkJCXNldExvY2F0aW9uKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19SRUY6Ci0JCQkJc2V0UmVmKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19WRVJTSU9OOgotCQkJCXNldFZlcnNpb24oKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RJU0NPVkVSWV9VUkw6Ci0JCQkJc2V0RGlzY292ZXJ5VVJMKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19QVUJMSUNBVElPTl9VUkw6Ci0JCQkJc2V0UHVibGljYXRpb25VUkwoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfRElTQ09WRVJZX1VSTDoKLQkJCQlzZXRTZWN1cmVkRGlzY292ZXJ5VVJMKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTDoKLQkJCQlzZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfTE9HSU46Ci0JCQkJc2V0RGVmYXVsdExvZ2luKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX1BBU1NXT1JEOgotCQkJCXNldERlZmF1bHRQYXNzd29yZCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUzoKLQkJCQlzZXRUYXhvbm9taWVzKChUYXhvbm9taWVzKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX05BTUU6Ci0JCQkJZ2V0TmFtZSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCWdldERlc2NyaXB0aW9uKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fSUQ6Ci0JCQkJc2V0SWQoSURfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19MT0NBVElPTjoKLQkJCQlzZXRMb2NhdGlvbihMT0NBVElPTl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1JFRjoKLQkJCQlzZXRSZWYoUkVGX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVkVSU0lPTjoKLQkJCQlzZXRWZXJzaW9uKFZFUlNJT05fRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ESVNDT1ZFUllfVVJMOgotCQkJCXNldERpc2NvdmVyeVVSTChESVNDT1ZFUllfVVJMX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUFVCTElDQVRJT05fVVJMOgotCQkJCXNldFB1YmxpY2F0aW9uVVJMKFBVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfRElTQ09WRVJZX1VSTDoKLQkJCQlzZXRTZWN1cmVkRGlzY292ZXJ5VVJMKFNFQ1VSRURfRElTQ09WRVJZX1VSTF9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfUFVCTElDQVRJT05fVVJMOgotCQkJCXNldFNlY3VyZWRQdWJsaWNhdGlvblVSTChTRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfTE9HSU46Ci0JCQkJc2V0RGVmYXVsdExvZ2luKERFRkFVTFRfTE9HSU5fRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX1BBU1NXT1JEOgotCQkJCXNldERlZmF1bHRQYXNzd29yZChERUZBVUxUX1BBU1NXT1JEX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUzoKLQkJCQlzZXRUYXhvbm9taWVzKChUYXhvbm9taWVzKW51bGwpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX05BTUU6Ci0JCQkJcmV0dXJuIG5hbWUgIT0gbnVsbCAmJiAhbmFtZS5pc0VtcHR5KCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGRlc2NyaXB0aW9uICE9IG51bGwgJiYgIWRlc2NyaXB0aW9uLmlzRW1wdHkoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19JRDoKLQkJCQlyZXR1cm4gSURfRURFRkFVTFQgPT0gbnVsbCA/IGlkICE9IG51bGwgOiAhSURfRURFRkFVTFQuZXF1YWxzKGlkKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19MT0NBVElPTjoKLQkJCQlyZXR1cm4gTE9DQVRJT05fRURFRkFVTFQgPT0gbnVsbCA/IGxvY2F0aW9uICE9IG51bGwgOiAhTE9DQVRJT05fRURFRkFVTFQuZXF1YWxzKGxvY2F0aW9uKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19SRUY6Ci0JCQkJcmV0dXJuIFJFRl9FREVGQVVMVCA9PSBudWxsID8gcmVmICE9IG51bGwgOiAhUkVGX0VERUZBVUxULmVxdWFscyhyZWYpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1ZFUlNJT046Ci0JCQkJcmV0dXJuIFZFUlNJT05fRURFRkFVTFQgPT0gbnVsbCA/IHZlcnNpb24gIT0gbnVsbCA6ICFWRVJTSU9OX0VERUZBVUxULmVxdWFscyh2ZXJzaW9uKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ESVNDT1ZFUllfVVJMOgotCQkJCXJldHVybiBESVNDT1ZFUllfVVJMX0VERUZBVUxUID09IG51bGwgPyBkaXNjb3ZlcnlVUkwgIT0gbnVsbCA6ICFESVNDT1ZFUllfVVJMX0VERUZBVUxULmVxdWFscyhkaXNjb3ZlcnlVUkwpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1BVQkxJQ0FUSU9OX1VSTDoKLQkJCQlyZXR1cm4gUFVCTElDQVRJT05fVVJMX0VERUZBVUxUID09IG51bGwgPyBwdWJsaWNhdGlvblVSTCAhPSBudWxsIDogIVBVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVC5lcXVhbHMocHVibGljYXRpb25VUkwpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfRElTQ09WRVJZX1VSTDoKLQkJCQlyZXR1cm4gU0VDVVJFRF9ESVNDT1ZFUllfVVJMX0VERUZBVUxUID09IG51bGwgPyBzZWN1cmVkRGlzY292ZXJ5VVJMICE9IG51bGwgOiAhU0VDVVJFRF9ESVNDT1ZFUllfVVJMX0VERUZBVUxULmVxdWFscyhzZWN1cmVkRGlzY292ZXJ5VVJMKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTDoKLQkJCQlyZXR1cm4gU0VDVVJFRF9QVUJMSUNBVElPTl9VUkxfRURFRkFVTFQgPT0gbnVsbCA/IHNlY3VyZWRQdWJsaWNhdGlvblVSTCAhPSBudWxsIDogIVNFQ1VSRURfUFVCTElDQVRJT05fVVJMX0VERUZBVUxULmVxdWFscyhzZWN1cmVkUHVibGljYXRpb25VUkwpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfTE9HSU46Ci0JCQkJcmV0dXJuIERFRkFVTFRfTE9HSU5fRURFRkFVTFQgPT0gbnVsbCA/IGRlZmF1bHRMb2dpbiAhPSBudWxsIDogIURFRkFVTFRfTE9HSU5fRURFRkFVTFQuZXF1YWxzKGRlZmF1bHRMb2dpbik7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9QQVNTV09SRDoKLQkJCQlyZXR1cm4gREVGQVVMVF9QQVNTV09SRF9FREVGQVVMVCA9PSBudWxsID8gZGVmYXVsdFBhc3N3b3JkICE9IG51bGwgOiAhREVGQVVMVF9QQVNTV09SRF9FREVGQVVMVC5lcXVhbHMoZGVmYXVsdFBhc3N3b3JkKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTOgotCQkJCXJldHVybiB0YXhvbm9taWVzICE9IG51bGw7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiICh2ZXJzaW9uOiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh2ZXJzaW9uKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBkaXNjb3ZlcnlVUkw6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGRpc2NvdmVyeVVSTCk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgcHVibGljYXRpb25VUkw6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHB1YmxpY2F0aW9uVVJMKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBzZWN1cmVkRGlzY292ZXJ5VVJMOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChzZWN1cmVkRGlzY292ZXJ5VVJMKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBzZWN1cmVkUHVibGljYXRpb25VUkw6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHNlY3VyZWRQdWJsaWNhdGlvblVSTCk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgZGVmYXVsdExvZ2luOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChkZWZhdWx0TG9naW4pOwotCQlyZXN1bHQuYXBwZW5kKCIsIGRlZmF1bHRQYXNzd29yZDogIik7Ci0JCXJlc3VsdC5hcHBlbmQoZGVmYXVsdFBhc3N3b3JkKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vVURESVJlZ2lzdHJ5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5UGFja2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NzUyOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5UGFja2FnZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0MiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5YTUxUeXBlUGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5pbXBsLlhNTFR5cGVQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFVERElSZWdpc3RyeVBhY2thZ2UgewotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIGRvY3VtZW50Um9vdEVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyB0YXhvbm9taWVzRUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIHVkZGlSZWdpc3RyeUVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0JICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKLQkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KLQkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0JICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKLQkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAotCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2VOU19VUkkKLQkgKiBAc2VlICNpbml0KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCgpIHsKLQkJc3VwZXIoZU5TX1VSSSwgVURESVJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcwotCSAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCi0JICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLQkgKiBkZXBlbmRlbnQgcGFja2FnZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBUaGlzIG1ldGhvZCBkcml2ZXMKLQkgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCi0JICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLQkgKiA8cD5PZiB0aGlzIHBhY2thZ2UgYW5kIGl0cyBpbnRlcmRlcGVuZGVuY2llcywgYWxsIHBhY2thZ2VzIHdoaWNoCi0JICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCi0JICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotCSAqIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgYWxsIG9mIHRoZSBwYWNrYWdlcyBhcmUgY3JlYXRlZCBiZWZvcmUgYW55Ci0JICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KLQkgKiB0aG9zZSBvZiBhbm90aGVyLgotCSAqIDxwPkludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWZmZWN0IGFueSBwYWNrYWdlcyB0aGF0IGhhdmUKLQkgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNlTlNfVVJJCi0JICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBVRERJUmVnaXN0cnlQYWNrYWdlIGluaXQoKSB7Ci0JCWlmIChpc0luaXRlZCkgcmV0dXJuIChVRERJUmVnaXN0cnlQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVERElSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotCQlVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVVRERJUmVnaXN0cnlQYWNrYWdlID0gKFVERElSZWdpc3RyeVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIFVERElSZWdpc3RyeVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgOiBuZXcgVURESVJlZ2lzdHJ5UGFja2FnZUltcGwoKSk7Ci0KLQkJaXNJbml0ZWQgPSB0cnVlOwotCi0JCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcwotCQlYTUxUeXBlUGFja2FnZUltcGwuaW5pdCgpOwotCi0JCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCi0JCVJUSW5kZXhQYWNrYWdlSW1wbCB0aGVSVEluZGV4UGFja2FnZSA9IChSVEluZGV4UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJUSW5kZXhQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUlRJbmRleFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUlRJbmRleFBhY2thZ2UuZU5TX1VSSSkgOiBSVEluZGV4UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJVGF4b25vbXlQYWNrYWdlSW1wbCB0aGVUYXhvbm9teVBhY2thZ2UgPSAoVGF4b25vbXlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVGF4b25vbXlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVGF4b25vbXlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKSA6IFRheG9ub215UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVSZWdpc3RyeVBhY2thZ2UgPSAoUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSA6IFJlZ2lzdHJ5UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQotCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSVEluZGV4UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSZWdpc3RyeVBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUlRJbmRleFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVUYXhvbm9teVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSZWdpc3RyeVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5mcmVlemUoKTsKLQotCQlyZXR1cm4gdGhlVURESVJlZ2lzdHJ5UGFja2FnZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldERvY3VtZW50Um9vdCgpIHsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdEVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfVGF4b25vbWllcygpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldFRheG9ub21pZXMoKSB7Ci0JCXJldHVybiB0YXhvbm9taWVzRUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRheG9ub21pZXNfVGF4b25vbXkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSl0YXhvbm9taWVzRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXRVRERJUmVnaXN0cnkoKSB7Ci0JCXJldHVybiB1ZGRpUmVnaXN0cnlFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X1ZlcnNpb24oKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfRGlzY292ZXJ5VVJMKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X1B1YmxpY2F0aW9uVVJMKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWREaXNjb3ZlcnlVUkwoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfU2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRMb2dpbigpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9EZWZhdWx0UGFzc3dvcmQoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVRERJUmVnaXN0cnlfVGF4b25vbWllcygpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDcpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnlGYWN0b3J5IGdldFVERElSZWdpc3RyeUZhY3RvcnkoKSB7Ci0JCXJldHVybiAoVURESVJlZ2lzdHJ5RmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCi0JICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKLQkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOwotCQlpc0NyZWF0ZWQgPSB0cnVlOwotCi0JCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcwotCQlkb2N1bWVudFJvb3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9DVU1FTlRfUk9PVCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04pOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fVEFYT05PTUlFUyk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19VRERJX1JFR0lTVFJZKTsKLQotCQl0YXhvbm9taWVzRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRBWE9OT01JRVMpOwotCQljcmVhdGVFUmVmZXJlbmNlKHRheG9ub21pZXNFQ2xhc3MsIFRBWE9OT01JRVNfX1RBWE9OT01ZKTsKLQotCQl1ZGRpUmVnaXN0cnlFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVURESV9SRUdJU1RSWSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19WRVJTSU9OKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElfUkVHSVNUUllfX0RJU0NPVkVSWV9VUkwpOwotCQljcmVhdGVFQXR0cmlidXRlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fUFVCTElDQVRJT05fVVJMKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElfUkVHSVNUUllfX1NFQ1VSRURfRElTQ09WRVJZX1VSTCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19TRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElfUkVHSVNUUllfX0RFRkFVTFRfUEFTU1dPUkQpOwotCQljcmVhdGVFUmVmZXJlbmNlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCi0JICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOwotCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKLQkJc2V0TmFtZShlTkFNRSk7Ci0JCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOwotCQlzZXROc1VSSShlTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCi0JCVRheG9ub215UGFja2FnZUltcGwgdGhlVGF4b25vbXlQYWNrYWdlID0gKFRheG9ub215UGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVGF4b25vbXlQYWNrYWdlLmVOU19VUkkpOwotCQlSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVJlZ2lzdHJ5UGFja2FnZSA9IChSZWdpc3RyeVBhY2thZ2VJbXBsKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKTsKLQkJWE1MVHlwZVBhY2thZ2VJbXBsIHRoZVhNTFR5cGVQYWNrYWdlID0gKFhNTFR5cGVQYWNrYWdlSW1wbClFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShYTUxUeXBlUGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0JCXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVSZWdpc3RyeVBhY2thZ2UuZ2V0UmVnaXN0cnkoKSk7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKLQkJaW5pdEVDbGFzcyhkb2N1bWVudFJvb3RFQ2xhc3MsIERvY3VtZW50Um9vdC5jbGFzcywgIkRvY3VtZW50Um9vdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG9jdW1lbnRSb290X01peGVkKCksIGVjb3JlUGFja2FnZS5nZXRFRmVhdHVyZU1hcEVudHJ5KCksICJtaXhlZCIsIG51bGwsIDAsIC0xLCBudWxsLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBudWxsLCAieE1MTlNQcmVmaXhNYXAiLCBudWxsLCAwLCAtMSwgbnVsbCwgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBudWxsLCAieFNJU2NoZW1hTG9jYXRpb24iLCBudWxsLCAwLCAtMSwgbnVsbCwgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKSwgdGhpcy5nZXRUYXhvbm9taWVzKCksIG51bGwsICJ0YXhvbm9taWVzIiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKSwgdGhpcy5nZXRVRERJUmVnaXN0cnkoKSwgbnVsbCwgInVkZGlSZWdpc3RyeSIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3ModGF4b25vbWllc0VDbGFzcywgVGF4b25vbWllcy5jbGFzcywgIlRheG9ub21pZXMiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldFRheG9ub21pZXNfVGF4b25vbXkoKSwgdGhlVGF4b25vbXlQYWNrYWdlLmdldFRheG9ub215KCksIG51bGwsICJ0YXhvbm9teSIsIG51bGwsIDAsIC0xLCBUYXhvbm9taWVzLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3ModWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJUmVnaXN0cnkuY2xhc3MsICJVRERJUmVnaXN0cnkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFVERElSZWdpc3RyeV9WZXJzaW9uKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAidmVyc2lvbiIsIG51bGwsIDEsIDEsIFVERElSZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFVERElSZWdpc3RyeV9EaXNjb3ZlcnlVUkwoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJkaXNjb3ZlcnlVUkwiLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfUHVibGljYXRpb25VUkwoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJwdWJsaWNhdGlvblVSTCIsIG51bGwsIDEsIDEsIFVERElSZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFVERElSZWdpc3RyeV9TZWN1cmVkRGlzY292ZXJ5VVJMKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAic2VjdXJlZERpc2NvdmVyeVVSTCIsIG51bGwsIDEsIDEsIFVERElSZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFVERElSZWdpc3RyeV9TZWN1cmVkUHVibGljYXRpb25VUkwoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJzZWN1cmVkUHVibGljYXRpb25VUkwiLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfRGVmYXVsdExvZ2luKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAiZGVmYXVsdExvZ2luIiwgbnVsbCwgMSwgMSwgVURESVJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRQYXNzd29yZCgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgImRlZmF1bHRQYXNzd29yZCIsIG51bGwsIDEsIDEsIFVERElSZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldFVERElSZWdpc3RyeV9UYXhvbm9taWVzKCksIHRoaXMuZ2V0VGF4b25vbWllcygpLCBudWxsLCAidGF4b25vbWllcyIsIG51bGwsIDAsIDEsIFVERElSZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQkvLyBDcmVhdGUgcmVzb3VyY2UKLQkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0KLQkJLy8gQ3JlYXRlIGFubm90YXRpb25zCi0JCS8vIGh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YQotCQljcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyB0aGUgYW5ub3RhdGlvbnMgZm9yIDxiPmh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YTwvYj4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCkgewotCQlTdHJpbmcgc291cmNlID0gImh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI7CQkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZG9jdW1lbnRSb290RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICIiLAotCQkJICJraW5kIiwgIm1peGVkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50V2lsZGNhcmQiLAotCQkJICJuYW1lIiwgIjptaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ4bWxuczpwcmVmaXgiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieHNpOnNjaGVtYUxvY2F0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInRheG9ub21pZXMiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1VkZGlSZWdpc3RyeSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJ1ZGRpUmVnaXN0cnkiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAodGF4b25vbWllc0VDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiVGF4b25vbWllcyIsCi0JCQkgImtpbmQiLCAiZWxlbWVudE9ubHkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VGF4b25vbWllc19UYXhvbm9teSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJ0YXhvbm9teSIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgICh1ZGRpUmVnaXN0cnlFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIlVERElSZWdpc3RyeSIsCi0JCQkgImtpbmQiLCAiZWxlbWVudE9ubHkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X1ZlcnNpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidmVyc2lvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRVRERJUmVnaXN0cnlfRGlzY292ZXJ5VVJMKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImRpc2NvdmVyeVVSTCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRVRERJUmVnaXN0cnlfUHVibGljYXRpb25VUkwoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAicHVibGljYXRpb25VUkwiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWREaXNjb3ZlcnlVUkwoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAic2VjdXJlZERpc2NvdmVyeVVSTCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRVRERJUmVnaXN0cnlfU2VjdXJlZFB1YmxpY2F0aW9uVVJMKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInNlY3VyZWRQdWJsaWNhdGlvblVSTCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRVRERJUmVnaXN0cnlfRGVmYXVsdExvZ2luKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImRlZmF1bHRMb2dpbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRVRERJUmVnaXN0cnlfRGVmYXVsdFBhc3N3b3JkKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImRlZmF1bHRQYXNzd29yZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRVRERJUmVnaXN0cnlfVGF4b25vbWllcygpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJ0YXhvbm9taWVzIgotCQkgICB9KTsKLQl9Ci0KLX0gLy9VRERJUmVnaXN0cnlQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjOGUwYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFVERElSZWdpc3RyeVBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnlBZGFwdGVyRmFjdG9yeSgpIHsKLQkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7Ci0JCQltb2RlbFBhY2thZ2UgPSBVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0JCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBVRERJUmVnaXN0cnlTd2l0Y2ggbW9kZWxTd2l0Y2ggPQotCQluZXcgVURESVJlZ2lzdHJ5U3dpdGNoKCkgewotCQkJcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290QWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlVGF4b25vbWllcyhUYXhvbm9taWVzIG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVUYXhvbm9taWVzQWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlVURESVJlZ2lzdHJ5KFVERElSZWdpc3RyeSBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlVURESVJlZ2lzdHJ5QWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBjYXNlUmVnaXN0cnkoUmVnaXN0cnkgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZVJlZ2lzdHJ5QWRhcHRlcigpOwotCQkJfQotCQkJcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOwotCQkJfQotCQl9OwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KLQkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKLQkJcmV0dXJuIChBZGFwdGVyKW1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7Ci0JfQotCi0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRG9jdW1lbnRSb290QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXMKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlVGF4b25vbWllc0FkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5IDxlbT5VRERJUmVnaXN0cnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVVERElSZWdpc3RyeUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWdpc3RyeUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9VRERJUmVnaXN0cnlBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTMxNWFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkV4dGVuZGVkTWV0YURhdGE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlRmFjdG9yeUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSBGYWN0b3J5PC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkudXRpbC5VRERJUmVnaXN0cnlSZXNvdXJjZUltcGwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRXh0ZW5kZWRNZXRhRGF0YSBleHRlbmRlZE1ldGFEYXRhOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQkJZXh0ZW5kZWRNZXRhRGF0YSA9IEV4dGVuZGVkTWV0YURhdGEuSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKLQkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IFVERElSZWdpc3RyeVJlc291cmNlSW1wbCh1cmkpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIGV4dGVuZGVkTWV0YURhdGEpOwotCi0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1NDSEVNQV9MT0NBVElPTiwgQm9vbGVhbi5UUlVFKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOwotCi0JCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9MRVhJQ0FMX0hBTkRMRVIsIEJvb2xlYW4uVFJVRSk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19IC8vVURESVJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlSZXNvdXJjZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQwMjljNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlSZXNvdXJjZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlSW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlIDwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LnV0aWwuVURESVJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VJbXBsIHsKLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB1cmkgdGhlIFVSSSBvZiB0aGUgbmV3IHJlc291cmNlLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsKFVSSSB1cmkpIHsKLQkJc3VwZXIodXJpKTsKLQl9Ci0KLX0gLy9VRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVN3aXRjaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDNkOGFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5U3dpdGNoLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KLSAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KLSAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKLSAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0Ci0gKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5Ci0gKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKLSAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBVRERJUmVnaXN0cnlTd2l0Y2ggewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgVURESVJlZ2lzdHJ5UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeVN3aXRjaCgpIHsKLQkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7Ci0JCQltb2RlbFBhY2thZ2UgPSBVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOwotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7Ci0JCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKLQkJfQotCQllbHNlIHsKLQkJCUxpc3QgZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKLQkJCXJldHVybgotCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/Ci0JCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKLQkJCQkJZG9Td2l0Y2goKEVDbGFzcyllU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1Q6IHsKLQkJCQlEb2N1bWVudFJvb3QgZG9jdW1lbnRSb290ID0gKERvY3VtZW50Um9vdCl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlRG9jdW1lbnRSb290KGRvY3VtZW50Um9vdCk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVM6IHsKLQkJCQlUYXhvbm9taWVzIHRheG9ub21pZXMgPSAoVGF4b25vbWllcyl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlVGF4b25vbWllcyh0YXhvbm9taWVzKTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWTogewotCQkJCVVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgPSAoVURESVJlZ2lzdHJ5KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VVRERJUmVnaXN0cnkodWRkaVJlZ2lzdHJ5KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VSZWdpc3RyeSh1ZGRpUmVnaXN0cnkpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRheG9ub21pZXM8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZVRheG9ub21pZXMoVGF4b25vbWllcyBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVERElSZWdpc3RyeTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VRERJUmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZVVERElSZWdpc3RyeShVRERJUmVnaXN0cnkgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlUmVnaXN0cnkoUmVnaXN0cnkgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfSAvL1VERElSZWdpc3RyeVN3aXRjaApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb25pdG9yL0dldE1vbml0b3JDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vbml0b3IvR2V0TW9uaXRvckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNkZWU2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vbml0b3IvR2V0TW9uaXRvckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb25pdG9yV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5Nb25pdG9yQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUudXRpbC5Tb2NrZXRVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIEdldE1vbml0b3JDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCXByaXZhdGUgYm9vbGVhbiBtb25pdG9yU2VydmljZTsKLQotCXByaXZhdGUgYm9vbGVhbiBjcmVhdGU7Ci0KLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotCi0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLQotCXByaXZhdGUgTGlzdCBlbmRwb2ludHM7Ci0KLQlwdWJsaWMgR2V0TW9uaXRvckNvbW1hbmQoKSB7Ci0JCW1vbml0b3JTZXJ2aWNlID0gdHJ1ZTsKLQkJY3JlYXRlID0gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpIHsKLQkJSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0KLQkJZW5kcG9pbnRzID0gbmV3IFZlY3RvcigpOwotCQlpZiAobW9uaXRvclNlcnZpY2UgJiYgd2ViU2VydmljZXNQYXJzZXIgIT0gbnVsbCAmJiB3c2RsVVJJICE9IG51bGwgJiYgd3NkbFVSSS5sZW5ndGgoKSA+IDApIHsKLQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkkpOwotCQkJaWYgKGRlZmluaXRpb24gIT0gbnVsbCkgewotCQkJCU1hcCBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKTsKLQkJCQlmb3IgKEl0ZXJhdG9yIHNlcnZpY2VzSXQgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBzZXJ2aWNlc0l0Lmhhc05leHQoKTspIHsKLQkJCQkJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIHNlcnZpY2VzSXQubmV4dCgpOwotCQkJCQlNYXAgcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0JCQkJCWZvciAoSXRlcmF0b3IgcG9ydHNJdCA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IHBvcnRzSXQuaGFzTmV4dCgpOykgewotCQkJCQkJUG9ydCB3c2RsUG9ydCA9IChQb3J0KSBwb3J0c0l0Lm5leHQoKTsKLQkJCQkJCUxpc3QgZXh0RWxlbWVudHMgPSB3c2RsUG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQkJCQkJCWZvciAoSXRlcmF0b3IgZXh0RWxlbWVudHNJdCA9IGV4dEVsZW1lbnRzLml0ZXJhdG9yKCk7IGV4dEVsZW1lbnRzSXQuaGFzTmV4dCgpOykgewotCQkJCQkJCUV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnRzSXQubmV4dCgpOwotCQkJCQkJCVN0cmluZyBlbmRwb2ludCA9IG51bGw7Ci0JCQkJCQkJVVJMIGVuZHBvaW50VVJMID0gbnVsbDsKLQkJCQkJCQlpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotCQkJCQkJCQllbmRwb2ludCA9ICgoU09BUEFkZHJlc3MpIGV4dEVsZW1lbnQpLmdldExvY2F0aW9uVVJJKCk7Ci0JCQkJCQkJZWxzZSBpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKQotCQkJCQkJCQllbmRwb2ludCA9ICgoSFRUUEFkZHJlc3MpIGV4dEVsZW1lbnQpLmdldExvY2F0aW9uVVJJKCk7Ci0JCQkJCQkJaWYgKGVuZHBvaW50ICE9IG51bGwpIHsKLQkJCQkJCQkJdHJ5IHsKLQkJCQkJCQkJCWVuZHBvaW50VVJMID0gbmV3IFVSTChlbmRwb2ludCk7Ci0JCQkJCQkJCX0KLQkJCQkJCQkJY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkgewotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJCWlmIChlbmRwb2ludFVSTCAhPSBudWxsKSB7Ci0JCQkJCQkJCVN0cmluZyBwcm90b2NvbCA9IGVuZHBvaW50VVJMLmdldFByb3RvY29sKCk7Ci0JCQkJCQkJCVN0cmluZyBob3N0ID0gZW5kcG9pbnRVUkwuZ2V0SG9zdCgpOwotCQkJCQkJCQlpbnQgcG9ydCA9IGVuZHBvaW50VVJMLmdldFBvcnQoKTsKLQkJCQkJCQkJaWYgKHBvcnQgPT0gLTEpIHsKLQkJCQkJCQkJCWlmICgiaHR0cCIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkpCi0JCQkJCQkJCQkJcG9ydCA9IDgwOwotCQkJCQkJCQkJZWxzZSBpZiAoImh0dHBzIi5lcXVhbHNJZ25vcmVDYXNlKHByb3RvY29sKSkKLQkJCQkJCQkJCQlwb3J0ID0gNDQzOwotCQkJCQkJCQl9Ci0JCQkJCQkJCWlmIChwcm90b2NvbCAhPSBudWxsICYmIHByb3RvY29sLnN0YXJ0c1dpdGgoImh0dHAiKSAmJiBob3N0ICE9IG51bGwgJiYgaG9zdC5sZW5ndGgoKSA+IDAgJiYgcG9ydCAhPSAtMSkgewotCQkJCQkJCQkJSU1vbml0b3IgbSA9IG51bGw7Ci0JCQkJCQkJCQlJTW9uaXRvcltdIG1vbml0b3JzID0gTW9uaXRvckNvcmUuZ2V0TW9uaXRvcnMoKTsKLQkJCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbW9uaXRvcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCQkJCQlpZiAoaG9zdC5lcXVhbHNJZ25vcmVDYXNlKG1vbml0b3JzW2ldLmdldFJlbW90ZUhvc3QoKSkgJiYgcG9ydCA9PSBtb25pdG9yc1tpXS5nZXRSZW1vdGVQb3J0KCkpIHsKLQkJCQkJCQkJCQkJbSA9IG1vbml0b3JzW2ldOwotCQkJCQkJCQkJCQlicmVhazsKLQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQl9Ci0JCQkJCQkJCQlpZiAobSA9PSBudWxsICYmIGNyZWF0ZSkgewotCQkJCQkJCQkJCWludCBtb25pdG9yZWRQb3J0ID0gU29ja2V0VXRpbC5maW5kVW51c2VkUG9ydCg1MDAwLCAxNTAwMCk7Ci0JCQkJCQkJCQkJSU1vbml0b3JXb3JraW5nQ29weSBtb25pdG9yV29ya2luZ0NvcHkgPSBNb25pdG9yQ29yZS5jcmVhdGVNb25pdG9yKCk7Ci0JCQkJCQkJCQkJbW9uaXRvcldvcmtpbmdDb3B5LnNldExvY2FsUG9ydChtb25pdG9yZWRQb3J0KTsKLQkJCQkJCQkJCQltb25pdG9yV29ya2luZ0NvcHkuc2V0UmVtb3RlSG9zdChob3N0KTsKLQkJCQkJCQkJCQltb25pdG9yV29ya2luZ0NvcHkuc2V0UmVtb3RlUG9ydChwb3J0KTsKLQkJCQkJCQkJCQltb25pdG9yV29ya2luZ0NvcHkuc2V0UHJvdG9jb2woIkhUVFAiKTsKLQkJCQkJCQkJCQl0cnkgewotCQkJCQkJCQkJCQltID0gbW9uaXRvcldvcmtpbmdDb3B5LnNhdmUoKTsKLQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0JCQkJCQkJCQkJCUlTdGF0dXMgd2FybmluZyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoTkxTLmJpbmQoV3N0V1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1IsIG5ldyBPYmplY3RbXXtTdHJpbmcudmFsdWVPZihwb3J0KSwgZW5kcG9pbnR9KSwgdCk7Ci0JCQkJCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCQkJCQlpZiAoZW52ICE9IG51bGwpCi0JCQkJCQkJCQkJCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQod2FybmluZyk7Ci0JCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQkJY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBzZSkgewotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQkJaWYgKG0gIT0gbnVsbCkgewotCQkJCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCQkJCWlmICghbS5pc1J1bm5pbmcoKSkKLQkJCQkJCQkJCQkJCW0uc3RhcnQoKTsKLQkJCQkJCQkJCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihlbmRwb2ludFVSTC5nZXRQcm90b2NvbCgpKTsKLQkJCQkJCQkJCQkJc2IuYXBwZW5kKCI6Ly9sb2NhbGhvc3Q6Iik7Ci0JCQkJCQkJCQkJCXNiLmFwcGVuZChTdHJpbmcudmFsdWVPZihtLmdldExvY2FsUG9ydCgpKSk7Ci0JCQkJCQkJCQkJCXNiLmFwcGVuZChlbmRwb2ludFVSTC5nZXRGaWxlKCkpOwotCQkJCQkJCQkJCQllbmRwb2ludHMuYWRkKHNiLnRvU3RyaW5nKCkpOwotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIHQpIHsKLQkJCQkJCQkJCQkJSVN0YXR1cyB3YXJuaW5nID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyhOTFMuYmluZChXc3RXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUiwgbmV3IE9iamVjdFtde1N0cmluZy52YWx1ZU9mKHBvcnQpLCBlbmRwb2ludH0pLCB0KTsKLQkJCQkJCQkJCQkJdHJ5IHsKLQkJCQkJCQkJCQkJCWlmIChlbnYgIT0gbnVsbCkKLQkJCQkJCQkJCQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydCh3YXJuaW5nKTsKLQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCQljYXRjaCAoU3RhdHVzRXhjZXB0aW9uIHNlKSB7Ci0JCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQl9Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TW9uaXRvclNlcnZpY2UoYm9vbGVhbiBtb25pdG9yU2VydmljZSkgewotCQl0aGlzLm1vbml0b3JTZXJ2aWNlID0gbW9uaXRvclNlcnZpY2U7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikgewotCQl0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkgewotCQl0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENyZWF0ZShib29sZWFuIGNyZWF0ZSkgewotCQl0aGlzLmNyZWF0ZSA9IGNyZWF0ZTsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRFbmRwb2ludHMoKSB7Ci0JCXJldHVybiBlbmRwb2ludHM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wbHVnaW4vV1NQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NWYyOWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wbHVnaW4vV1NQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDMgMTI4ODI3ICAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDI0ICAgMTE1NjkwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRNZXJnZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lBUENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJU1NCUENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgV1NQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBXU1BsdWdpbiBwbHVnaW47Ci0JCi0JcHJpdmF0ZSBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQgd3NpU1NCUENvbnRleHRfOwotCXByaXZhdGUgUGVyc2lzdGVudFdTSUFQQ29udGV4dCB3c2lBUENvbnRleHRfOwotCXByaXZhdGUgUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dCB3c2RsVmFsaWRhdGlvbkNvbnRleHRfOwotCXByaXZhdGUgUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQgd2FpdEZvcldzZGxWYWxpZGF0aW9uQ29udGV4dF87Ci0JcHJpdmF0ZSBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dF87Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3Qud3MiOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgV1NQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLQkgKiAoV1NQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3Qud3MiKTsKLQkgKiBAcmV0dXJuIFRoZSBXU1BsdWdpbiBzaW5nbGV0b24uCi0JICovCi0JIHN0YXRpYyBwdWJsaWMgV1NQbHVnaW4gZ2V0SW5zdGFuY2UoKSB7Ci0JICAgcmV0dXJuIHBsdWdpbjsKLQkgfQotCSAKLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFdTUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0KLQkvKioKLQkgKiBHZXQgV1NJIENvbnRleHQKLQkgKiBAZGVwcmVjYXRlZCB1c2UgZ2V0V1NJU1NCUENvbnRleHQgb3IgZ2V0V1NJQVBDb250ZXh0IGluc3RlYWQKLQkgKiAKLQkgKi8gCi0gcHVibGljIFBlcnNpc3RlbnRXU0lDb250ZXh0IGdldFdTSUNvbnRleHQoKSAKLSAJeyAvLyBkZWZhdWx0aW5nIHRvIGdldCBXU0kgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIGNvbnRleHQKLSAJICByZXR1cm4gZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAJfQotIAotIC8qKgotCSAqIEdldCBXU0kgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIENvbnRleHQKLQkgKiAKLQkgKi8gCi0gcHVibGljIFBlcnNpc3RlbnRXU0lTU0JQQ29udGV4dCBnZXRXU0lTU0JQQ29udGV4dCgpIAotCXsKLQkgIGlmICh3c2lTU0JQQ29udGV4dF8gPT0gbnVsbCkKLQkgIAl7Ci0JICAJCXdzaVNTQlBDb250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQoKTsKLQkgIAkJd3NpU1NCUENvbnRleHRfLmxvYWQoKTsKLQkgIAl9Ci0JICByZXR1cm4gd3NpU1NCUENvbnRleHRfOwotCX0KLSAKLSAvKioKLQkgKiBHZXQgV1NJIEF0dGFjaG1lbnQgUHJvZmlsZSBDb250ZXh0Ci0JICogCi0JICovIAotIHB1YmxpYyBQZXJzaXN0ZW50V1NJQVBDb250ZXh0IGdldFdTSUFQQ29udGV4dCgpIAotCXsKLQkgIGlmICh3c2lBUENvbnRleHRfID09IG51bGwpCi0JICAJewotCSAgCQl3c2lBUENvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRXU0lBUENvbnRleHQoKTsKLQkgIAkJd3NpQVBDb250ZXh0Xy5sb2FkKCk7Ci0JICAJfQotCSAgcmV0dXJuIHdzaUFQQ29udGV4dF87Ci0JfQotCi0JIC8qKgotCSAqIEdldCBXU0RMIFZhbGlhdGlvbiBDb250ZXh0Ci0JICogCi0JICovIAotCi0JcHVibGljIFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQgZ2V0V1NETFZhbGlkYXRpb25Db250ZXh0KCkgewotCQlpZiAod3NkbFZhbGlkYXRpb25Db250ZXh0XyA9PSBudWxsKSB7Ci0JCQl3c2RsVmFsaWRhdGlvbkNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQoKTsKLQkJCXdzZGxWYWxpZGF0aW9uQ29udGV4dF8ubG9hZCgpOwotCQl9Ci0JCXJldHVybiB3c2RsVmFsaWRhdGlvbkNvbnRleHRfOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgV2FpdCBmb3IgV1NETCBWYWxpYXRpb24gQ29udGV4dAotCSAqIAotCSAqLyAKLQotCXB1YmxpYyBQZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCBnZXRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0KCkgewotCQlpZiAod2FpdEZvcldzZGxWYWxpZGF0aW9uQ29udGV4dF8gPT0gbnVsbCkgewotCQkJd2FpdEZvcldzZGxWYWxpZGF0aW9uQ29udGV4dF8gPSBuZXcgUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQoKTsKLQkJCXdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfLmxvYWQoKTsKLQkJfQotCQlyZXR1cm4gd2FpdEZvcldzZGxWYWxpZGF0aW9uQ29udGV4dF87Ci0JfQotCQotCS8qKgotCSAqIEdldCBTa2VsZXRvbiBNZXJnZSBDb250ZXh0Ci0JICogCi0JICovIAotIHB1YmxpYyBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IGdldE1lcmdlQ29udGV4dCgpIAotCXsKLQkgIGlmIChtZXJnZUNvbnRleHRfID09IG51bGwpCi0JICAJewotCQkgIG1lcmdlQ29udGV4dF8gPSBuZXcgUGVyc2lzdGVudE1lcmdlQ29udGV4dCgpOwotCQkgIG1lcmdlQ29udGV4dF8ubG9hZCgpOwotCSAgCX0KLQkgIHJldHVybiBtZXJnZUNvbnRleHRfOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWVyZ2VEZWZhdWx0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NZXJnZURlZmF1bHRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MjU5OTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NZXJnZURlZmF1bHRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDMgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMTA5ICAgMjA5MDc1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1wdWJsaWMgY2xhc3MgTWVyZ2VEZWZhdWx0cwotewotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9TS0VMRVRPTl9NRVJHRV9ERUZBVUxUID0gdHJ1ZTsKLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3Igc2tlbGV0b24gbWVyZ2UuCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldFNrZWxldG9uTWVyZ2VEZWZhdWx0KCkKLSB7Ci0JcmV0dXJuIFBSRUZFUkVOQ0VfU0tFTEVUT05fTUVSR0VfREVGQVVMVDsKLSB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL01pZ3JhdGVXU0lwcmVmZXJlbmNlc0xvYWRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NaWdyYXRlV1NJcHJlZmVyZW5jZXNMb2FkTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkxMGIxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL01pZ3JhdGVXU0lwcmVmZXJlbmNlc0xvYWRMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEwNSAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MTIxOCAgIDIwOTg1OCBlcGV0ZXJzQGNhLmlibS5jb20gLSBFcmljIFBldGVycywgRW5oYW5jaW5nIHNlcnZpY2UgcG9saWN5IGZyYW1ld29yayBhbmQgVUkKLSAqIDIwMDgwMzE4ICAgMjIzMTE4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIG1ldGFkYXRhIHJlcXVpcmVkIGluIFdTLUkgcHJvZmlsZXMgdG8gc3VwcG9ydCBlZGl0b3JzICYgdmFsaWRhdG9ycwotICogMjAwODAzMTggICAyMjE1NzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyOwotCi1wdWJsaWMgY2xhc3MgTWlncmF0ZVdTSXByZWZlcmVuY2VzTG9hZExpc3RlbmVyIGltcGxlbWVudHMgSVBvbGljeVBsYXRmb3JtTG9hZExpc3RlbmVyCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVOVU1fSURfVkFMVUVTID0geyAib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIiwgIm9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCIsICJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSJ9OyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBDT05URVhUX0lEUyAgICA9IHsgUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJLCBQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0ksIFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJIH07Ci0gIAotICBwdWJsaWMgdm9pZCBsb2FkKCkKLSAgewotICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIGhhcyBzZXQgYW55IFdTSSBwcmVmZXJlbmNlcy4KLSAgICAvLyBJZiBub3Qgd2Ugd2FudCB0byBkZWZhdWx0IFdTSSBwcmVmZXJlbmNlcyB0byBhbnkgb2xkIFdTSSBwcmVmZXJlbmNlcyB0aGF0Ci0gICAgLy8gaGF2ZSBiZWVuIHNldC4KLSAgICAKLSAgICBJRWNsaXBzZVByZWZlcmVuY2VzICAgcHJlZmVyZW5jZXMgID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKCBTZXJ2aWNlUG9saWN5QWN0aXZhdG9yLlBMVUdJTl9JRCApOyAgICAKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgYXBWYWx1ZSAgICAgID0gcHJlZmVyZW5jZXMuZ2V0KCBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuU2VydmljZVBvbGljeUlEX0FQMTAgKyAiLiIgKyBJUG9saWN5U3RhdGUuRGVmYXVsdFZhbHVlS2V5LCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgc3NicFZhbHVlICAgID0gcHJlZmVyZW5jZXMuZ2V0KCBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuU2VydmljZVBvbGljeUlEX1NTQlAxMCArICIuIiArIElQb2xpY3lTdGF0ZS5EZWZhdWx0VmFsdWVLZXksIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgIFByZWZlcmVuY2VzICAgICAgICAgICBvbGRQcmVmcyAgICAgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0gICAgU3RyaW5nW10gICAgICAgICAgICAgIG9sZFByb3BOYW1lcyA9IG9sZFByZWZzLnByb3BlcnR5TmFtZXMoKTsKLSAgICAKLSAgICBpZiggYXBWYWx1ZSA9PSBudWxsICkKLSAgICB7Ci0gICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm0gcGxhdGZvcm0gICAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgICBJU2VydmljZVBvbGljeSAgICAgICAgYXBQb2xpY3kgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLlNlcnZpY2VQb2xpY3lJRF9BUDEwICk7Ci0gICAgICBJUG9saWN5U3RhdGUgICAgICAgICAgYXBTdGF0ZSAgICAgID0gYXBQb2xpY3kuZ2V0UG9saWN5U3RhdGUoKTsKLSAgICAgIAotICAgICAgaWYoIGluZGV4T2ZTdHJpbmcoICJub25XU0lBUENvbXBsaWFuY2UiLCBvbGRQcm9wTmFtZXMgKSAhPSAtMSApIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBhbiBvbGQgQVAgdmFsdWUgc28gd2Ugd2lsbCB1c2UgaXQncyB2YWx1ZSBhcyB0aGUgZGVmYXVsdCBmb3Igc2V0dGluZ3MuCi0gICAgICAgIFN0cmluZyBvbGRBcFZhbHVlID0gb2xkUHJlZnMuZ2V0U3RyaW5nKCAibm9uV1NJQVBDb21wbGlhbmNlIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGludCAgICBvbGRBcEluZGV4ID0gaW5kZXhPZlN0cmluZyggb2xkQXBWYWx1ZSwgQ09OVEVYVF9JRFMgKTsKLSAgICAgICAgU3RyaW5nIG5ld0FwVmFsdWUgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgaWYoIG9sZEFwSW5kZXggPCBFTlVNX0lEX1ZBTFVFUy5sZW5ndGggKQotICAgICAgICB7Ci0gICAgICAgICAgbmV3QXBWYWx1ZSA9IEVOVU1fSURfVkFMVUVTW29sZEFwSW5kZXhdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggbmV3QXBWYWx1ZSAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGFwU3RhdGUucHV0VmFsdWUoIElQb2xpY3lTdGF0ZS5EZWZhdWx0VmFsdWVLZXksIG5ld0FwVmFsdWUgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCQkvLyBhbHNvIG5lZWQgdG8gY2hlY2sgaWYgYW55IHByb2plY3Qgc3BlY2lmaWMgcHJlZmVyZW5jZXMgd2VyZSBzZXQKLQkJCVF1YWxpZmllZE5hbWUgbmFtZSA9IG5ldyBRdWFsaWZpZWROYW1lKFdTUGx1Z2luLklELAotCQkJCQkibm9uV1NJQVBDb21wbGlhbmNlIik7IC8vJE5PTi1OTFMtMSQKLQkJCUlQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpCi0JCQkJCS5nZXRQcm9qZWN0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCUlQcm9qZWN0IHByb2plY3QgPSBwcm9qZWN0c1tpXTsKLQkJCQkJU3RyaW5nIG9sZFByb3BlcnR5ID0gbnVsbDsKLQkJCQkJCW9sZFByb3BlcnR5ID0gcHJvamVjdC5nZXRQZXJzaXN0ZW50UHJvcGVydHkobmFtZSk7Ci0JCQkJCWlmIChvbGRQcm9wZXJ0eSAhPSBudWxsICYmICFvbGRQcm9wZXJ0eS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCWludCBvbGRBcEluZGV4ID0gaW5kZXhPZlN0cmluZyhvbGRQcm9wZXJ0eSwgQ09OVEVYVF9JRFMpOwotCQkJCQkJU3RyaW5nIG5ld0FwVmFsdWUgPSBudWxsOwotCQkJCQkJaWYgKG9sZEFwSW5kZXggIT0gLTEgJiYgb2xkQXBJbmRleCA8IEVOVU1fSURfVkFMVUVTLmxlbmd0aCkgewotCQkJCQkJCW5ld0FwVmFsdWUgPSBFTlVNX0lEX1ZBTFVFU1tvbGRBcEluZGV4XTsKLQkJCQkJCX0KLQotCQkJCQkJaWYgKG5ld0FwVmFsdWUgIT0gbnVsbCkgewotCQkJCQkJCWFwU3RhdGUgPSBhcFBvbGljeS5nZXRQb2xpY3lTdGF0ZShwcm9qZWN0KTsKLQkJCQkJCQlwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QsIHRydWUpOwotCQkJCQkgICAgICAgIGFwU3RhdGUucHV0VmFsdWUoIElQb2xpY3lTdGF0ZS5EZWZhdWx0VmFsdWVLZXksIG5ld0FwVmFsdWUgKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQkvL2lnbm9yZSB0aGlzIHByb2plY3QKLQkJCQl9Ci0JCQl9Ci0gICAgfQotCi0KLSAgICAKLSAgICBpZiggc3NicFZhbHVlID09IG51bGwgKQotICAgIHsKLSAgICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSAgICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBzc2JwUG9saWN5ICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuU2VydmljZVBvbGljeUlEX1NTQlAxMCApOwotICAgICAgSVBvbGljeVN0YXRlICAgICAgICAgIHNzYnBTdGF0ZSAgICA9IHNzYnBQb2xpY3kuZ2V0UG9saWN5U3RhdGUoKTsKLSAgICAgIAotICAgICAgaWYoIGluZGV4T2ZTdHJpbmcoICJub25XU0lTU0JQQ29tcGxpYW5jZSIsIG9sZFByb3BOYW1lcyApICE9IC0xICkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlIGFuIG9sZCBTU0JQIHZhbHVlIHNvIHdlIHdpbGwgdXNlIGl0J3MgdmFsdWUgYXMgdGhlIGRlZmF1bHQgZm9yIHNldHRpbmdzLgotICAgICAgICBTdHJpbmcgb2xkU1NCUFZhbHVlID0gb2xkUHJlZnMuZ2V0U3RyaW5nKCAibm9uV1NJU1NCUENvbXBsaWFuY2UiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgaW50ICAgIG9sZFNTQlBJbmRleCA9IGluZGV4T2ZTdHJpbmcoIG9sZFNTQlBWYWx1ZSwgQ09OVEVYVF9JRFMgKTsKLSAgICAgICAgU3RyaW5nIG5ld1NTQlBWYWx1ZSA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICBpZiggb2xkU1NCUEluZGV4IDwgRU5VTV9JRF9WQUxVRVMubGVuZ3RoICkKLSAgICAgICAgewotICAgICAgICAgIG5ld1NTQlBWYWx1ZSA9IEVOVU1fSURfVkFMVUVTW29sZFNTQlBJbmRleF07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBuZXdTU0JQVmFsdWUgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgCXNzYnBTdGF0ZS5wdXRWYWx1ZSggSVBvbGljeVN0YXRlLkRlZmF1bHRWYWx1ZUtleSwgbmV3U1NCUFZhbHVlICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQkJLy8gYWxzbyBuZWVkIHRvIGNoZWNrIGlmIGFueSBwcm9qZWN0IHNwZWNpZmljIHByZWZlcmVuY2VzIHdlcmUgc2V0Ci0JCVF1YWxpZmllZE5hbWUgbmFtZSA9IG5ldyBRdWFsaWZpZWROYW1lKFdTUGx1Z2luLklELAotCQkJCSJub25XU0lTU0JQQ29tcGxpYW5jZSIpOyAvLyROT04tTkxTLTEkCi0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpCi0JCQkJLmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXRyeSB7Ci0JCQkJSVByb2plY3QgcHJvamVjdCA9IHByb2plY3RzW2ldOwotCQkJCVN0cmluZyBvbGRQcm9wZXJ0eSA9IG51bGw7Ci0JCQkJCW9sZFByb3BlcnR5ID0gcHJvamVjdC5nZXRQZXJzaXN0ZW50UHJvcGVydHkobmFtZSk7Ci0JCQkJaWYgKG9sZFByb3BlcnR5ICE9IG51bGwgJiYgIW9sZFByb3BlcnR5LmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQlpbnQgb2xkU1NCUEluZGV4ID0gaW5kZXhPZlN0cmluZyhvbGRQcm9wZXJ0eSwgQ09OVEVYVF9JRFMpOwotCQkJCQlTdHJpbmcgbmV3U1NCUFZhbHVlID0gbnVsbDsKLQkJCQkJaWYgKG9sZFNTQlBJbmRleCAhPSAtMSAmJiBvbGRTU0JQSW5kZXggPCBFTlVNX0lEX1ZBTFVFUy5sZW5ndGgpIHsKLQkJCQkJCW5ld1NTQlBWYWx1ZSA9IEVOVU1fSURfVkFMVUVTW29sZFNTQlBJbmRleF07Ci0JCQkJCX0KLQotCQkJCQlpZiAobmV3U1NCUFZhbHVlICE9IG51bGwpIHsKLQkJCQkJCXNzYnBTdGF0ZSA9IHNzYnBQb2xpY3kuZ2V0UG9saWN5U3RhdGUocHJvamVjdCk7Ci0JCQkJCQlwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKHByb2plY3QsIHRydWUpOwotCQkJCQkJc3NicFN0YXRlLnB1dFZhbHVlKCBJUG9saWN5U3RhdGUuRGVmYXVsdFZhbHVlS2V5LCBuZXdTU0JQVmFsdWUgKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCS8vaWdub3JlIHRoaXMgcHJvamVjdAotCQkJfQotCQl9Ci0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgaW50IGluZGV4T2ZTdHJpbmcoIFN0cmluZyB0YXJnZXQsIFN0cmluZ1tdIHZhbHVlcyApCi0gIHsKLSAgICBpbnQgcmVzdWx0ID0gLTE7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleDwgdmFsdWVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgU3RyaW5nIHZhbHVlID0gdmFsdWVzW2luZGV4XTsKLSAgICAgIAotICAgICAgaWYoIHZhbHVlLmVxdWFscyggdGFyZ2V0ICkgKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBpbmRleDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudE1lcmdlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50TWVyZ2VDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYzA3Y2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50TWVyZ2VDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDMgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQKLXsKLQkgLyoqCi0JICAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBlbmFibGUgc2tlbGV0b24gbWVyZ2UgZ2VuZXJhbCBwcmVmZXJlbmNlIGZyb20KLQkgICogdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JKiovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9TS0VMRVRPTl9NRVJHRSA9ICJza2VsZXRvbk1lcmdlIjsKLQkKLSAgcHJpdmF0ZSBzdGF0aWMgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBjb250ZXh0XyA9IG51bGw7Ci0gIAotICBwdWJsaWMgc3RhdGljIFBlcnNpc3RlbnRNZXJnZUNvbnRleHQgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYoIGNvbnRleHRfID09IG51bGwgKQotICAgIHsKLSAgICAgIGNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRNZXJnZUNvbnRleHQoKTsKLSAgICAgIGNvbnRleHRfLmxvYWQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRleHRfOwotICB9Ci0gIAotICBwdWJsaWMgUGVyc2lzdGVudE1lcmdlQ29udGV4dCgpCi0gIHsKLQkgIHN1cGVyKFdTUGx1Z2luLmdldEluc3RhbmNlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9hZCgpCi0gIHsKLSAgICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfU0tFTEVUT05fTUVSR0UsIE1lcmdlRGVmYXVsdHMuZ2V0U2tlbGV0b25NZXJnZURlZmF1bHQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTa2VsZXRvbk1lcmdlRW5hYmxlZChib29sZWFuIGVuYWJsZSkKLSAgewotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfU0tFTEVUT05fTUVSR0UsIGVuYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1NrZWxldG9uTWVyZ2VFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX1NLRUxFVE9OX01FUkdFKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjFjMDQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0Ci17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVEVfTk9fV1NETCA9ICIwIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJREFURV9SRU1PVEVfV1NETCA9ICIxIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJREFURV9BTExfV1NETCA9ICIyIjsKLQotCXByaXZhdGUgU3RyaW5nIHdzZGxfdmFsaWRhdGlvbiA9ICJXU0RMX1ZBTElEQVRJT04iOwotCi1wdWJsaWMgUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dCAoKSAKLXsKLQlzdXBlciggIFdTUGx1Z2luLmdldEluc3RhbmNlKCkpOwotCQotfQotCi1wdWJsaWMgdm9pZCBsb2FkKCkgCi17Ci0Jc2V0RGVmYXVsdCh3c2RsX3ZhbGlkYXRpb24sIFZBTElEQVRFX05PX1dTREwpOwotfQotCi0vLyB0byBiZSB1c2VkIG9ubHkgYnkgdGhlIHByZWZlcmVuY2UgcGFnZQotcHVibGljIHZvaWQgdXBkYXRlV1NETFZhbGlkYXRpb24gKCBTdHJpbmcgdmFsdWUpCi17Ci0gCQlzZXRWYWx1ZSggd3NkbF92YWxpZGF0aW9uLCB2YWx1ZSk7Ci19Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0UGVyc2lzdGVudFdTRExWYWxpZGF0aW9uICgpCi17Ci0JU3RyaW5nIHByb3BlcnR5ID0gZ2V0VmFsdWVBc1N0cmluZyh3c2RsX3ZhbGlkYXRpb24pOwotLy8JIGRlZmF1bHQgdG8gSWdub3JlIGlmIG5vIGluaXQgaGFzIGJlZW4gZG9uZSBmcm9tIGluaSBmaWxlCi0JaWYgKHByb3BlcnR5ID09IG51bGwgfHwgcHJvcGVydHkuZXF1YWxzKCIiKSkgewotCQlzZXRWYWx1ZSggd3NkbF92YWxpZGF0aW9uLCBWQUxJREFURV9OT19XU0RMKTsKLQkJcmV0dXJuIFZBTElEQVRFX05PX1dTREw7Ci0JfQotCWVsc2UKLQkJcmV0dXJuIHByb3BlcnR5OwotfQotCi1wdWJsaWMgU3RyaW5nIGdldERlZmF1bHQoKQotewotCXJldHVybiBnZXREZWZhdWx0U3RyaW5nKHdzZGxfdmFsaWRhdGlvbik7Ci19Ci0KLXB1YmxpYyBib29sZWFuIFZhbGlkYXRlTm9XU0RMKCkKLXsKLQkgcmV0dXJuIFZBTElEQVRFX05PX1dTREwuZXF1YWxzKGdldFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbigpKTsKLX0KLQotcHVibGljIGJvb2xlYW4gV2Fybk5vbldTSUNvbXBsaWFuY2VzKCkKLXsKLQkgcmV0dXJuIFZBTElEQVRFX1JFTU9URV9XU0RMLmVxdWFscyhnZXRQZXJzaXN0ZW50V1NETFZhbGlkYXRpb24oKSk7Ci19Ci0KLXB1YmxpYyBib29sZWFuIElnbm9yZU5vbldTSUNvbXBsaWFuY2VzKCkKLXsKLQkgcmV0dXJuIFZBTElEQVRFX0FMTF9XU0RMLmVxdWFscyhnZXRQZXJzaXN0ZW50V1NETFZhbGlkYXRpb24oKSk7Ci19Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJQVBDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lBUENvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U1NWI3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lBUENvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA4MDMxOCAgIDIyMzExOCBlcmljZHBAY2EuaWJtLmNvbSAtIEVyaWMgRC4gUGV0ZXJzLCBtZXRhZGF0YSByZXF1aXJlZCBpbiBXUy1JIHByb2ZpbGVzIHRvIHN1cHBvcnQgZWRpdG9ycyAmIHZhbGlkYXRvcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFdTSUFQQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRXU0lDb250ZXh0Ci17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTl9XU0lfQVBfQ09NUExJQU5DRSA9ICJub25XU0lBUENvbXBsaWFuY2UiOwotCi1wdWJsaWMgUGVyc2lzdGVudFdTSUFQQ29udGV4dCAoKSAKLXsKLQlzdXBlcigpOwotCW5vbl93c2lfY29tcGxpYW5jZSA9IE5PTl9XU0lfQVBfQ09NUExJQU5DRTsKLQluYW1lID0gbmV3IFF1YWxpZmllZE5hbWUoV1NQbHVnaW4uSUQgLCBub25fd3NpX2NvbXBsaWFuY2UpOwotCXdzaVdhcm5pbmdfID0gV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfQVBfV0FSTklORzsKLQl3c2lFcnJvcl8gPSBXc3RXU1BsdWdpbk1lc3NhZ2VzLldTSV9BUF9FUlJPUjsKLX0KLQotcHVibGljIFN0cmluZyBnZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSAoKQotewotCVN0cmluZyBwcm9wZXJ0eSA9IGdldFZhbHVlQXNTdHJpbmcobm9uX3dzaV9jb21wbGlhbmNlKTsKLQkvLyBkZWZhdWx0IHRvIFdhcm5pbmcgaWYgbm8gaW5pdCBoYXMgYmVlbiBkb25lIGZyb20gaW5pIGZpbGUKLQlpZiAocHJvcGVydHkgPT0gbnVsbCB8fCBwcm9wZXJ0eS5lcXVhbHMoIiIpKSB7Ci0JCXNldFZhbHVlKCBub25fd3NpX2NvbXBsaWFuY2UsIFdBUk5fTk9OX1dTSSk7Ci0JCXJldHVybiBXQVJOX05PTl9XU0k7Ci0JfQotCWVsc2UKLQkJcmV0dXJuIHByb3BlcnR5OwotfQotCi1wcm90ZWN0ZWQgU3RyaW5nIGdldFNlcnZpY2VQb2xpY3lJZCgpCi17Ci0gIHJldHVybiBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuU2VydmljZVBvbGljeUlEX0FQMTA7Ci19ICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTYyNGYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMDggICAyMDkyNjcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwODAzMTggICAyMjMxMTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgbWV0YWRhdGEgcmVxdWlyZWQgaW4gV1MtSSBwcm9maWxlcyB0byBzdXBwb3J0IGVkaXRvcnMgJiB2YWxpZGF0b3JzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkVudmlyb25tZW50U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLldzdFdTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LlNlcnZpY2VQb2xpY3lQbGF0Zm9ybTsKLQotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50V1NJQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0Ci17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RPUF9OT05fV1NJID0gIjAiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdBUk5fTk9OX1dTSSA9ICIxIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJR05PUkVfTk9OX1dTSSA9ICIyIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT0xMT1dfV1NJX1BSRUZFUkVOQ0UgPSAiMyI7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gRU5VTV9JRF9WQUxVRVMgPSB7ICJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiLCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0IiwgIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIn07Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIENPTlRFWFRfSURTICAgID0geyBTVE9QX05PTl9XU0ksIFdBUk5fTk9OX1dTSSwgSUdOT1JFX05PTl9XU0kgfTsKLQkKLQlwcm90ZWN0ZWQgUXVhbGlmaWVkTmFtZSBuYW1lID0gbnVsbDsgLy8gc2V0IGluIHN1YmNsYXNzCi0JcHJvdGVjdGVkIFN0cmluZyBub25fd3NpX2NvbXBsaWFuY2U7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTl9XU0lfU1NCUF9DT01QTElBTkNFID0gIm5vbldTSVNTQlBDb21wbGlhbmNlIjsKLQlwcm90ZWN0ZWQgU3RyaW5nIHdzaVdhcm5pbmdfOyAvLyBzZXQgaW4gc3ViY2xhc3MKLQlwcm90ZWN0ZWQgU3RyaW5nIHdzaUVycm9yXzsgLy8gc2V0IGluIHN1YmNsYXNzCi0KLXB1YmxpYyBQZXJzaXN0ZW50V1NJQ29udGV4dCAoKSAKLXsKLQlzdXBlciggIFdTUGx1Z2luLmdldEluc3RhbmNlKCkpOwotCQotLy8gIE5PVEU6ICBuYW1lLCB3c2lXYXJuaW5nXyBhbmQgd3NpRXJyb3JfIHNob3VsZCBiZSBzZXQgaW4gdGhlIHN1YmNsYXNzZXMuICBUaGlzIGlzIHByb3ZpZGluZyBkZWZhdWx0aW5nIG9ubHkuCi0Jbm9uX3dzaV9jb21wbGlhbmNlID0gTk9OX1dTSV9TU0JQX0NPTVBMSUFOQ0U7Ci0JbmFtZSA9IG5ldyBRdWFsaWZpZWROYW1lKFdTUGx1Z2luLklEICwgbm9uX3dzaV9jb21wbGlhbmNlKTsKLQl3c2lXYXJuaW5nXyA9IFdzdFdTUGx1Z2luTWVzc2FnZXMuV1NJX1NTQlBfV0FSTklORzsKLQl3c2lFcnJvcl8gPSBXc3RXU1BsdWdpbk1lc3NhZ2VzLldTSV9TU0JQX0VSUk9SOwotfQotCi1wdWJsaWMgdm9pZCBsb2FkKCkgCi17Ci0JLy8gbGV0IHRoZSBkZWZhdWx0IGJlIHJlYWQgZnJvbSBwbHVnaW5fY29zdG9taXphdGlvbi5pbmkgZmlsZQotCS8vIHNldERlZmF1bHQobm9uX3dzaV9jb21wbGlhbmNlLCBXQVJOX05PTl9XU0kpOwotfQotCi0vLyB0byBiZSB1c2VkIG9ubHkgYnkgdGhlIHByZWZlcmVuY2UgcGFnZQotcHVibGljIHZvaWQgdXBkYXRlV1NJQ29tcGxpYW5jZXMgKCBTdHJpbmcgdmFsdWUpCi17Ci0gCQlzZXRWYWx1ZSggbm9uX3dzaV9jb21wbGlhbmNlLCB2YWx1ZSk7Ci19Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0UGVyc2lzdGVudFdTSUNvbXBsaWFuY2UgKCkKLXsKLQlTdHJpbmcgcHJvcGVydHkgPSBnZXRWYWx1ZUFzU3RyaW5nKG5vbl93c2lfY29tcGxpYW5jZSk7Ci0vLwkgZGVmYXVsdCB0byBXYXJuaW5nIGlmIG5vIGluaXQgaGFzIGJlZW4gZG9uZSBmcm9tIGluaSBmaWxlCi0JaWYgKHByb3BlcnR5ID09IG51bGwgfHwgcHJvcGVydHkuZXF1YWxzKCIiKSkgewotCQlzZXRWYWx1ZSggbm9uX3dzaV9jb21wbGlhbmNlLCBXQVJOX05PTl9XU0kpOwotCQlyZXR1cm4gV0FSTl9OT05fV1NJOwotCX0KLQllbHNlCi0JCXJldHVybiBwcm9wZXJ0eTsKLX0KLQotcHVibGljIGJvb2xlYW4gU3RvcE5vbldTSUNvbXBsaWFuY2VzKCkKLXsKLQkgcmV0dXJuIFNUT1BfTk9OX1dTSS5lcXVhbHMoZ2V0UGVyc2lzdGVudFdTSUNvbXBsaWFuY2UoKSk7Ci19Ci0KLXB1YmxpYyBib29sZWFuIFdhcm5Ob25XU0lDb21wbGlhbmNlcygpCi17Ci0JIHJldHVybiBXQVJOX05PTl9XU0kuZXF1YWxzKGdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlKCkpOwotfQotCi1wdWJsaWMgYm9vbGVhbiBJZ25vcmVOb25XU0lDb21wbGlhbmNlcygpCi17Ci0JIHJldHVybiBJR05PUkVfTk9OX1dTSS5lcXVhbHMoZ2V0UGVyc2lzdGVudFdTSUNvbXBsaWFuY2UoKSk7Ci19Ci0KLS8vIHRvIGJlIHVzZWQgb25seSBieSB0aGUgcHJvcGVydHkgcGFnZQotcHVibGljIHZvaWQgdXBkYXRlUHJvamVjdFdTSUNvbXBsaWFuY2VzICggSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHZhbHVlKQotewotICAgIHRyeSB7Ci0JCXByb2plY3Quc2V0UGVyc2lzdGVudFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgeyAKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJObyBzdWNoIFByb2plY3QiKTsKLSAgICAJSUxvZyBsb2cgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotICAgIAlsb2cubG9nKElMb2cuSU5GTywgNTA4NCwgdGhpcywgInVwZGF0ZVByb2plY3RXU0lDb21wbGlhbmNlcyIsICJObyBzdWNoIFByb2plY3QgIitwcm9qZWN0KTsKLSAgICB9Ci19Ci0KLXB1YmxpYyBib29sZWFuIHByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXMoSVByb2plY3QgcHJvamVjdCkKLXsKLSAJcmV0dXJuIFNUT1BfTk9OX1dTSS5lcXVhbHMoZ2V0UHJvamVjdFBlcnNpc3RlbnRQcm9wZXJ0eShwcm9qZWN0KSk7ICAgIAotfQotCi1wdWJsaWMgYm9vbGVhbiBwcm9qZWN0V2Fybk5vbldTSUNvbXBsaWFuY2VzKElQcm9qZWN0IHByb2plY3QpCi17Ci0gCXJldHVybiBXQVJOX05PTl9XU0kuZXF1YWxzKGdldFByb2plY3RQZXJzaXN0ZW50UHJvcGVydHkocHJvamVjdCkpOyAgICAKLX0KLQotcHVibGljIGJvb2xlYW4gcHJvamVjdElnbm9yZU5vbldTSUNvbXBsaWFuY2VzKElQcm9qZWN0IHByb2plY3QpCi17Ci0gCXJldHVybiBJR05PUkVfTk9OX1dTSS5lcXVhbHMoZ2V0UHJvamVjdFBlcnNpc3RlbnRQcm9wZXJ0eShwcm9qZWN0KSk7ICAgIAotfQotCi0KLS8vIHRvIGJlIHVzZWQgb25seSBieSB0aGUgcHJvcGVydHkgcGFnZQotcHVibGljIGJvb2xlYW4gcHJvamVjdEZvbGxvd1dTSVByZWZlcmFuY2UoSVByb2plY3QgcHJvamVjdCkKLXsKLSAgICB0cnkgewotIAlTdHJpbmcgcHJvcGVydHkgPSBwcm9qZWN0LmdldFBlcnNpc3RlbnRQcm9wZXJ0eShuYW1lKTsKLSAgICByZXR1cm4gKHByb3BlcnR5ID09IG51bGwgfHwgcHJvcGVydHkuZXF1YWxzKCIiKSB8fCBwcm9wZXJ0eS5lcXVhbHMoRk9MTE9XX1dTSV9QUkVGRVJFTkNFKSk7Ci0gICAgCX0KLSAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSAgICAgewotICAgIAlyZXR1cm4gdHJ1ZTsKLSAgICAgfSAgICAgCi19Ci0KLXByaXZhdGUgU3RyaW5nIGdldFByb2plY3RQZXJzaXN0ZW50UHJvcGVydHkoSVByb2plY3QgcHJvamVjdCkKLXsKLQlTdHJpbmcgcHJvcGVydHkgPSBnZXRQcm9qZWN0V1NJQ29tcGxpYW5jZShwcm9qZWN0KTsKLQlpZiAocHJvcGVydHkuZXF1YWxzKEZPTExPV19XU0lfUFJFRkVSRU5DRSkpIHsKLQkJcHJvcGVydHkgPSBnZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSgpOwotCX0KLQlyZXR1cm4gcHJvcGVydHk7Ci0gfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoSVByb2plY3QgcHJvamVjdCkKLSAgewotCi0gICAgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtICAgICAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIHNlcnZpY2VQb2xpY3kgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggZ2V0U2VydmljZVBvbGljeUlkKCkgKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlSUQgPSBzZXJ2aWNlUG9saWN5LmdldFBvbGljeVN0YXRlRW51bShwcm9qZWN0KS5nZXRDdXJyZW50SXRlbSgpLmdldElkKCk7Ci0JCVN0cmluZyAgICAgICAgICAgICAgICBwcm9wZXJ0eSAgICAgICA9IEZPTExPV19XU0lfUFJFRkVSRU5DRTsKLQkJCi0JCWZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBFTlVNX0lEX1ZBTFVFUy5sZW5ndGg7IGluZGV4KysgKQotCQl7Ci0JCSAgaWYoIEVOVU1fSURfVkFMVUVTW2luZGV4XS5lcXVhbHMoIGN1cnJlbnRTdGF0ZUlEICkgKQotCQkgIHsKLQkJICAgIHByb3BlcnR5ID0gQ09OVEVYVF9JRFNbaW5kZXhdOwotCQkgICAgYnJlYWs7Ci0JCSAgfQotCQl9Ci0JCQotCQlyZXR1cm4gcHJvcGVydHk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcnZpY2VQb2xpY3lJZCgpCi0gIHsKLSAgICByZXR1cm4gV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLlNlcnZpY2VQb2xpY3lJRF9TU0JQMTA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBRdWFsaWZpZWROYW1lIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXYXJuaW5nKCkKLSAgewotCSAgcmV0dXJuIHdzaVdhcm5pbmdfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFcnJvcigpCi0gIHsKLQkgIHJldHVybiB3c2lFcnJvcl87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lTU0JQQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTA4MjczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwODAzMTggICAyMjMxMTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgbWV0YWRhdGEgcmVxdWlyZWQgaW4gV1MtSSBwcm9maWxlcyB0byBzdXBwb3J0IGVkaXRvcnMgJiB2YWxpZGF0b3JzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotCi0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRXU0lTU0JQQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRXU0lDb250ZXh0Ci17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTl9XU0lfU1NCUF9DT01QTElBTkNFID0gIm5vbldTSVNTQlBDb21wbGlhbmNlIjsKLQotICBwdWJsaWMgUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0ICgpIAotICB7Ci0JICBzdXBlcigpOwotCSAgbm9uX3dzaV9jb21wbGlhbmNlID0gTk9OX1dTSV9TU0JQX0NPTVBMSUFOQ0U7Ci0JICBuYW1lID0gbmV3IFF1YWxpZmllZE5hbWUoV1NQbHVnaW4uSUQgLCBub25fd3NpX2NvbXBsaWFuY2UpOwotCSAgd3NpV2FybmluZ18gPSBXc3RXU1BsdWdpbk1lc3NhZ2VzLldTSV9TU0JQX1dBUk5JTkc7Ci0JICB3c2lFcnJvcl8gPSBXc3RXU1BsdWdpbk1lc3NhZ2VzLldTSV9TU0JQX0VSUk9SOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJ2aWNlUG9saWN5SWQoKQotICB7Ci0gICAgcmV0dXJuIFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfU1NCUDEwOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNlZDIxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0Ci17Ci0KLQlwcml2YXRlIFN0cmluZyB3YWl0X2Zvcl93c2RsX3ZhbGlkYXRpb24gPSAiV0FJVF9GT1JfV1NETF9WQUxJREFUSU9OIjsKLQotcHVibGljIFBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0ICgpIAotewotCXN1cGVyKCAgV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JCi19Ci0KLXB1YmxpYyB2b2lkIGxvYWQoKSAKLXsKLQlzZXREZWZhdWx0KHdhaXRfZm9yX3dzZGxfdmFsaWRhdGlvbiwgdHJ1ZSk7Ci19Ci0KLS8vIHRvIGJlIHVzZWQgb25seSBieSB0aGUgcHJlZmVyZW5jZSBwYWdlCi1wdWJsaWMgdm9pZCBzZXRXYWl0Rm9yV1NETFZhbGlkYXRpb24gKCBib29sZWFuIHZhbHVlKQotewotIAkJc2V0VmFsdWUoIHdhaXRfZm9yX3dzZGxfdmFsaWRhdGlvbiwgdmFsdWUpOwotfQotCi1wdWJsaWMgYm9vbGVhbiBnZXRQZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uICgpCi17Ci0JcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKHdhaXRfZm9yX3dzZGxfdmFsaWRhdGlvbik7Ci0KLX0KLQotcHVibGljIGJvb2xlYW4gZ2V0RGVmYXVsdCgpCi17Ci0JcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKHdhaXRfZm9yX3dzZGxfdmFsaWRhdGlvbik7Ci19Ci0KLQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NETEZpbGVQcm9wZXJ0eVRlc3Rlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0RMRmlsZVByb3BlcnR5VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZWZlNDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0RMRmlsZVByb3BlcnR5VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMjAgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzEyMTkgICAyMTM0NDcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuUHJvcGVydHlUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMRmlsZVByb3BlcnR5VGVzdGVyIGV4dGVuZHMgUHJvcGVydHlUZXN0ZXIKLXsKLSAgcHVibGljIGJvb2xlYW4gdGVzdChPYmplY3QgcmVjZWl2ZXIsIFN0cmluZyBwcm9wZXJ0eSwgT2JqZWN0W10gYXJncywgT2JqZWN0IGV4cGVjdGVkVmFsdWUpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIAotICAgIGlmKCByZWNlaXZlciBpbnN0YW5jZW9mIElDb250YWluZXIpCi0gICAgewotICAgICAgcmVzdWx0ID0gaGFzV1NETGZpbGUoIChJQ29udGFpbmVyKSByZWNlaXZlciApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaGFzV1NETGZpbGUoIElDb250YWluZXIgY29udGFpbmVyICkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ICAgPSBmYWxzZTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJUmVzb3VyY2VbXSBjaGlsZHJlbiA9IGNvbnRhaW5lci5tZW1iZXJzKCk7Ci0gICAgICAKLSAgICAgIGZvciggSVJlc291cmNlIGNoaWxkIDogY2hpbGRyZW4gKQotICAgICAgewotICAgICAgICBpZiggY2hpbGQgaW5zdGFuY2VvZiBJQ29udGFpbmVyICkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGhhc1dTRExmaWxlKCAoSUNvbnRhaW5lcikgY2hpbGQgKTsKLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBjaGlsZCBpbnN0YW5jZW9mIElGaWxlICkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBjaGlsZC5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIGV4dGVuc2lvbiAhPSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBleHRlbnNpb24uZXF1YWxzKCAid3NkbCIgKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIElmIHdlIGZvdW5kIGEgc2luZ2xlIHdzZGwgZmlsZSB3ZSB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KLSAgICAgICAgaWYoIHJlc3VsdCApIGJyZWFrOwotICAgICAgfSAgICAKLSAgICB9Ci0gICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICAvLyBJZ25vcmUgZXhjZXB0aW9uIGFuZCByZXR1cm4gZmFsc2UuICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NJQ29tcGxpYW5jZVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNzEzODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotCi0KLXB1YmxpYyBjbGFzcyBXU0lDb21wbGlhbmNlVXRpbHMKLXsKLQotLyoqCi0gKiBAcGFyYW0gcHJvamVjdAotICogQHBhcmFtIGNvbnRleHQKLSAqIEByZXR1cm4KLSAqLwotcHVibGljIHN0YXRpYyBpbnQgZ2V0V1NJU2V2ZXJpdHkgKElQcm9qZWN0IHByb2plY3QsIFBlcnNpc3RlbnRXU0lDb250ZXh0IGNvbnRleHQpCi17Ci0JaWYgKGNvbnRleHQucHJvamVjdFN0b3BOb25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLQkJcmV0dXJuIFN0YXR1cy5FUlJPUjsKLQllbHNlIGlmIChjb250ZXh0LnByb2plY3RXYXJuTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0JCXJldHVybiBTdGF0dXMuV0FSTklORzsKLQllbHNlCi0JCXJldHVybiBTdGF0dXMuSU5GTzsKLX0KLQotLyoqCi0gKiBAcGFyYW0gbW9uaXRvciBJU3RhdHVzSGFuZGxlcgotICogQHBhcmFtIHN0YXR1cyBTdGF0dXNbXQotICogQHBhcmFtIHByb2plY3QgSVByb2plY3QKLSAqIEBwYXJhbSBjb250ZXh0IFBlcnNpc3RlbnRXU0lDb250ZXh0Ci0gKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0byBjb250aW51ZQotICovCi1wdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tXU0lDb21wbGlhbmNlICggSVN0YXR1c0hhbmRsZXIgbW9uaXRvciwgU3RhdHVzW10gc3RhdHVzLCBJUHJvamVjdCBwcm9qZWN0LCBQZXJzaXN0ZW50V1NJQ29udGV4dCBjb250ZXh0KQotewotICAJaWYgKGNvbnRleHQucHJvamVjdFN0b3BOb25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLSAgCQl7Ci0gICAgICAKLSAgCQkJLy8gZW1pdCBhbiBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gZmFsc2UKLSAgCQkJSVN0YXR1cyBzdGF0dXNfID0gU3RhdHVzVXRpbHMubXVsdGlTdGF0dXMoIGNvbnRleHQuZ2V0RXJyb3IoKSwgc3RhdHVzICk7Ci0JCQltb25pdG9yLnJlcG9ydEVycm9yKHN0YXR1c18pOwotICAJCQlyZXR1cm4gZmFsc2U7Ci0gIAkJfQotICAJZWxzZSBpZiAoY29udGV4dC5wcm9qZWN0V2Fybk5vbldTSUNvbXBsaWFuY2VzKHByb2plY3QpKQotICAJCXsKLSAgCQkJLy8gZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSB3aXRoIHRoZSBvcHRpb25zIHRvIHN0b3AsIGlnbm9yZSB0aGlzIG9uZSwgb3IgaWdub3JlIGFsbCBjb21pbmcgbWVzc2FnZXMKLSAgCQkJSVN0YXR1cyBzdGF0dXNfID0gU3RhdHVzVXRpbHMubXVsdGlTdGF0dXMoIGNvbnRleHQuZ2V0V2FybmluZygpLCBzdGF0dXMpOwotCi0gIAkJCUNob2ljZSBpZ25vcmVDaG9pY2UgPSBuZXcgQ2hvaWNlKCdJJywgV3N0V1NQbHVnaW5NZXNzYWdlcy5JR05PUkVfTEFCRUwsIFdzdFdTUGx1Z2luTWVzc2FnZXMuSUdOT1JFX0RFU0NSSVBUSU9OKTsKLSAgCQkJQ2hvaWNlIGlnbm9yZUFsbENob2ljZSA9IG5ldyBDaG9pY2UoJ0EnLCBXc3RXU1BsdWdpbk1lc3NhZ2VzLklHTk9SRV9BTExfTEFCRUwsIFdzdFdTUGx1Z2luTWVzc2FnZXMuSUdOT1JFX0FMTF9ERVNDUklQVElPTik7Ci0gIAkJCUNob2ljZSBjYW5jZWxDaG9pY2UgPSBuZXcgQ2hvaWNlKCdDJywgV3N0V1NQbHVnaW5NZXNzYWdlcy5DQU5DRUxfTEFCRUwsIFdzdFdTUGx1Z2luTWVzc2FnZXMuQ0FOQ0VMX0RFU0NSSVBUSU9OKTsKLSAgCQkJQ2hvaWNlIHJlc3VsdCA9IG1vbml0b3IucmVwb3J0KHN0YXR1c18sIG5ldyBDaG9pY2VbXXtpZ25vcmVDaG9pY2UsIGlnbm9yZUFsbENob2ljZSwgY2FuY2VsQ2hvaWNlfSk7Ci0gIAkJCQotICAJCQkvLyBpZiB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgYm94IG9yIHNlbGVjdHMgaWdub3JlIGNvbnRpbnVlCi0gIAkJCWlmIChyZXN1bHQgPT0gbnVsbCB8fCAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKGlnbm9yZUNob2ljZS5nZXRMYWJlbCgpKSkpCi0gICAgICAgIAkJCXJldHVybiB0cnVlOwotICAJCQkvLyBpZiB0aGUgdXNlciBzZWxlY3RzIGlnbm9yZSBhbGwsIGNoYW5nZSB0aGUgcHJlZmVyZW5jZQotCSAgICAgICAgZWxzZSAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhpZ25vcmVBbGxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0JICAgICAgICAJewotCSAgICAgICAgCQljb250ZXh0LnVwZGF0ZVByb2plY3RXU0lDb21wbGlhbmNlcyhwcm9qZWN0LCBQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgICAgICAJCXJldHVybiB0cnVlOwotCSAgICAgICAgCX0KLQkJCS8vIGlmIHRoZSB1c2VyIHNlbGVjdHMgdG8gY2FuY2VsICwgZG8gbm90IGNvbnRpbnVlIHdpdGggdGhlIGNvbW1hbmQKLSAgICAgICAgCWVsc2UgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhjYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0JCQkJCQlyZXR1cm4gZmFsc2U7Ci0gIAkJfQotICByZXR1cm4gdHJ1ZTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1dTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9XU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMyMzZjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1dTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDgwMzE4ICAgMjIzMTE4IGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBELiBQZXRlcnMsIG1ldGFkYXRhIHJlcXVpcmVkIGluIFdTLUkgcHJvZmlsZXMgdG8gc3VwcG9ydCBlZGl0b3JzICYgdmFsaWRhdG9ycwotICogMjAwODAzMjQgICAyMjMxMTggZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIEQuIFBldGVycywgbWV0YWRhdGEgcmVxdWlyZWQgaW4gV1MtSSBwcm9maWxlcyB0byBzdXBwb3J0IGVkaXRvcnMgJiB2YWxpZGF0b3JzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1wdWJsaWMgaW50ZXJmYWNlIFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cyB7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2wgPSAiZGVmYXVsdFByb3RvY29sIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzdGF0ZUtleURlZmF1bHRQcm90b2NvbF9WQUxVRV9TT0FQID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHN0YXRlS2V5RGVmYXVsdFByb3RvY29sX1ZBTFVFX1NPQVAxMiA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAxMi8iOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNlcnZpY2VQb2xpY3lJRF9TU0JQMTAgPSAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaXNzYnAiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNlcnZpY2VQb2xpY3lJRF9BUDEwID0gIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lhcCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU2VydmljZVBvbGljeUlEX1dTSVByb2ZpbGVSb290ID0gIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcCI7Ci0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3RhdGVFbnVtUmVxdWlyZSA9ICJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHN0YXRlRW51bVN1Z2dlc3QgPSAib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzdGF0ZUVudW1JZ25vcmUgPSAib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUiOwotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvR2VuZXJpY1Jlc291cmNlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9HZW5lcmljUmVzb3VyY2VGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MzZkMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9HZW5lcmljUmVzb3VyY2VGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRXh0ZW5kZWRNZXRhRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUltcGw7Ci0KLS8qKgotICogUGF0dGVybmVkIGFmdGVyIHRoZSBSZXNvdXJjZUZhY3RvcnkgY2xhc3NlcyBnZW5lcmF0ZWQKLSAqIGJ5IHRoZSBFTUYgdG9vbHMsIHRoaXMgZ2VuZXJpYyBmYWN0b3J5IGhhbmRsZXMgY3JlYXRpb24KLSAqIG9mIEVNRiByZXNvdXJjZXMgZm9yIFhNTCBkb2N1bWVudHMgaW4gZ2VuZXJhbC4KLSAqLwotcHVibGljIGNsYXNzIEdlbmVyaWNSZXNvdXJjZUZhY3RvcnkgZXh0ZW5kcyBYTUxSZXNvdXJjZUZhY3RvcnlJbXBsCi17Ci0JLyoqCi0JICogSG9sZHMgYW4gaW5zdGFuY2Ugb2YgPGNvZGU+RXh0ZW5kZWRNZXRhRGF0YTwvY29kZT4KLQkgKiBmb3IgYXNzb2NpYXRpbmcgZXh0ZW5kZWQgbWV0YWRhdGEgd2l0aCB0aGUKLQkgKiA8Y29kZT5SZXNvdXJjZTwvY29kZT4gcmV0dXJuZWQgYnkgPGNvZGU+Y3JlYXRlUmVzb3VyY2U8L2NvZGU+LgotCSAqLwotCXByb3RlY3RlZCBFeHRlbmRlZE1ldGFEYXRhIGV4dGVuZGVkTWV0YURhdGE7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkdlbmVyaWNSZXNvdXJjZUZhY3Rvcnk8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBHZW5lcmljUmVzb3VyY2VGYWN0b3J5KCkKLQl7Ci0JCXN1cGVyKCk7Ci0JCWV4dGVuZGVkTWV0YURhdGEgPSBFeHRlbmRlZE1ldGFEYXRhLklOU1RBTkNFOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZSRGYWN0b3J5I2NyZWF0ZVJlc291cmNlKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpCi0JICovCi0JcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpCi0JewotCQlYTUxSZXNvdXJjZSByZXN1bHQgPSBuZXcgWE1MUmVzb3VyY2VJbXBsKHVyaSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgZXh0ZW5kZWRNZXRhRGF0YSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgZXh0ZW5kZWRNZXRhRGF0YSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1NDSEVNQV9MT0NBVElPTiwgQm9vbGVhbi5UUlVFKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfTEVYSUNBTF9IQU5ETEVSLCBCb29sZWFuLlRSVUUpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvSVJlZ2lzdHJ5TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9JUmVnaXN0cnlNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4Yjc5MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9JUmVnaXN0cnlNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkwNiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotCi0vKioKLSAqIEFuIElSZWdpc3RyeU1hbmFnZXIgbWFuYWdlcyBhIGZhbWlseSBvZiA8Y29kZT5SZWdpc3RyeTwvY29kZT4KLSAqIGFuZCA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIHBlcnNpc3RlZCB3aXRoaW4gc29tZQotICogYWRkcmVzc2FibGUgbG9jYXRpb24gc3VjaCBhcyB1bmRlciBhIGRpcmVjdG9yeSBpbiB0aGUKLSAqIGZpbGVzeXN0ZW0gb3IgdW5kZXIgYSBmb2xkZXIgaW4gdGhlIEVjbGlwc2Ugd29ya3NwYWNlLAotICogYW5kIHJlZmVyZW5jZWQgZnJvbSBhbiBpbmRleCBkb2N1bWVudCBhdCB0aGUgc2FtZSBsb2NhdGlvbi4gCi0gKiA8cD4KLSAqIENhbGwgPGNvZGU+UmVnaXN0ZXJ5U2VydmljZS5nZXREZWZhdWx0UmVnaXN0cnlNYW5hZ2VyKCk8L2NvZGU+Ci0gKiBvciA8Y29kZT5SZWdpc3RlcnlTZXJ2aWNlLmdldFJlZ2lzdHJ5TWFuYWdlcihVUkwpPC9jb2RlPiB0bwotICogZ2V0IGEgbmV3IElSZWdpc3RyeU1hbmFnZXIuCi0gKiAKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlJlZ2lzdHJ5U2VydmljZSNpbnN0YW5jZSgpCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teQotICogQGF1dGhvciBjYnJlYWxleQotICovCi1wdWJsaWMgaW50ZXJmYWNlIElSZWdpc3RyeU1hbmFnZXIKLXsKLQkvKioKLQkgKiBBIGNvbnN0YW50IGZvciB1c2UgaW4gdGhlIDxjb2RlPnJlbW92ZVJlZ2lzdHJ5KC4uLik8L2NvZGU+Ci0JICogYW5kIDxjb2RlPnJlbW92ZVRheG9ub215KC4uLik8L2NvZGU+IG1ldGhvZHMgdGhhdCB3aWxsCi0JICogY2F1c2UgdGhlIGdpdmVuIHJlZ2lzdHJ5IG9yIHRheG9ub215IGRvY3VtZW50IHRvIGJlIHJlbW92ZWQKLQkgKiBmcm9tIHRoZSBpbmRleCwgYnV0IG5vdCBkZWxldGVkLgotCSAqIAotCSAqIEBzZWUgI3JlbW92ZVJlZ2lzdHJ5KFN0cmluZywgYm9vbGVhbikKLQkgKiBAc2VlICNyZW1vdmVUYXhvbm9teShTdHJpbmcsIGJvb2xlYW4pCi0JICovCi0JcHVibGljIGJvb2xlYW4gS0VFUF9ET0NVTUVOVCA9IGZhbHNlOwotCi0JLyoqCi0JICogQSBjb25zdGFudCBmb3IgdXNlIGluIHRoZSA8Y29kZT5yZW1vdmVSZWdpc3RyeSguLi4pPC9jb2RlPgotCSAqIGFuZCA8Y29kZT5yZW1vdmVUYXhvbm9teSguLi4pPC9jb2RlPiBtZXRob2RzIHRoYXQgd2lsbAotCSAqIGNhdXNlIHRoZSBnaXZlbiByZWdpc3RyeSBvciB0YXhvbm9teSBkb2N1bWVudCB0byBiZSByZW1vdmVkCi0JICogZnJvbSB0aGUgaW5kZXggYW5kIGRlbGV0ZWQuCi0JICogCi0JICogQHNlZSAjcmVtb3ZlUmVnaXN0cnkoU3RyaW5nLCBib29sZWFuKQotCSAqIEBzZWUgI3JlbW92ZVRheG9ub215KFN0cmluZywgYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBERUxFVEVfRE9DVU1FTlQgPSB0cnVlOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBYTUwgaW5kZXggZG9jdW1lbnQgdGhhdCByZWZlcmVuY2VzCi0JICogdGhlIFhNTCByZWdpc3RyeSBhbmQgdGF4b25vbXkgbW9kZWxzIG1hbmFnZWQgYnkgdGhpcwotCSAqIFJlZ2lzdHJ5IE1hbmFnZXIuCi0JICogCi0JICogQHJldHVybiBUaGUgVVJMIG9mIHRoZSBtYW5hZ2luZyBkb2N1bWVudC4KLQkgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBJZiBhIFVSTCB0byB0aGUgbWFuYWdpbmcKLQkgKiBkb2N1bWVudCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBvciBjcmVhdGVkLgotCSAqLwotCXB1YmxpYyBVUkwgZ2V0VVJMICgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBBZGRzIGFuIDxjb2RlPklUYXhvbm9teUZpbmRlcjwvY29kZT4gdGhhdCB0aGUKLQkgKiA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBjYW4gdXNlIHRvIGZpbmQKLQkgKiB0aGUgc2V0IG9mIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgdXNlZAotCSAqIGJ5IGEgZ2l2ZW4gPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsLgotCSAqIDxjb2RlPklSZWdpc3RyeU1hbmFnZXIuc2F2ZShyZWdpc3RyeSk8L2NvZGU+IG5lZWRzIGhlbHAgZmluZGluZwotCSAqIHRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIHVzZWQgYnkgYSA8Y29kZT5SZWdpc3RyeTwvY29kZT4sCi0JICogaWYgYW55LgotCSAqIAotCSAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbmNyZXRlIDxjb2RlPlJlZ2lzdHJ5PGNvZGU+Ci0JICogY2xhc3MgZm9yIHdoaWNoIHRoZSA8Y29kZT5JVGF4b25vbXlGaW5kZXI8L2NvZGU+IGlzIGJlaW5nIGFkZGVkLgotCSAqIEBwYXJhbSB0YXhvbm9teUZpbmRlciBBbiA8Y29kZT5JVGF4b25vbXlGaW5kZXI8L2NvZGU+IHRoYXQga25vd3MKLQkgKiBob3cgdG8gZGV0ZXJtaW5lIHRoZSBzZXQgb2YgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyBhIGdpdmVuCi0JICogY29uY3JldGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsIGlzIHVzaW5nLgotCSAqIEBzZWUgSVRheG9ub215RmluZGVyCi0JICogQHNlZSAjc2F2ZVJlZ2lzdHJ5KFJlZ2lzdHJ5KQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFRheG9ub215RmluZGVyICggU3RyaW5nIGNsYXNzTmFtZSwgSVRheG9ub215RmluZGVyIHRheG9ub215RmluZGVyICk7Ci0KLSAgICAvKioKLSAgICAgKiBEZXN0cm95cyB0aGUgaW5kZXggb2YgcmVnaXN0cmllcyBhbmQgdGF4b25vbWllcyBpbiBtZW1vcnkuCi0gICAgICogU3Vic2VxdWVudCBjYWxscyB0byA8Y29kZT5nZXRJbmRleCgpPC9jb2RlPiBhbmQgb3RoZXIgbWV0aG9kcwotICAgICAqIG9mIHRoaXMgaW50ZXJmYWNlIHdpbGwgY2F1c2UgdGhlIGluZGV4IHRvIGJlIHJlbG9hZGVkLgotICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgYW55dGltZSB0aGUgY2FsbGVyIHN1c3BlY3RzIHRoZQotICAgICAqIHBlcnNpc3RlbnQgaW5kZXggaGFzIGNoYW5nZWQgYW5kIHdpc2hlcyB0byBsb2FkIHRoZSBjaGFuZ2VzCi0gICAgICogaW50byB0aGUgY3VycmVudCA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWZyZXNoTWFuYWdlciAoKTsKLQotCS8qKgotCSAqIFNhdmVzIGEgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIHRvIGFuIFhNTCBkb2N1bWVudAotCSAqIGxvY2F0ZWQgcmVsYXRpdmUgdG8gdGhlIGluZGV4IFhNTCBkb2N1bWVudCBhcyBpZGVudGlmaWVkIGJ5Ci0JICogPGNvZGU+Z2V0VVJMKCk8L2NvZGU+LCBhbmQgdXBkYXRlcyB0aGUgaW5kZXggWE1MIGRvY3VtZW50Ci0JICogd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzYXZlZCB0YXhvbm9teSBkb2N1bWVudC4KLQkgKiBUaGUgcmVsYXRpdmUgcGF0aG5hbWUgdG8gdGhlIHRheG9ub215IFhNTCBkb2N1bWVudCBpcwotCSAqIGNvbXB1dGVkIGJ5IHRoZSA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBhbmQgY2Fubm90Ci0JICogYmUgaW5mbHVlbmNlZCBieSB0aGUgY2FsbGVyLgotCSAqIAotCSAqIEBwYXJhbSByZWdpc3RyeSBUaGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsIChhbmQKLQkgKiByZWZlcmVuY2VkIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMpIHRvIHNhdmUuCi0JICogQHJldHVybiBBIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiByZWZlcmVuY2UuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKiBAc2VlICNhZGRUYXhvbm9teUZpbmRlcihTdHJpbmcsIElUYXhvbm9teUZpbmRlcikKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgc2F2ZVJlZ2lzdHJ5ICggUmVnaXN0cnkgcmVnaXN0cnkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIExvYWRzIGFzIG5lY2Vzc2FyeSBhbmQgcmV0dXJucyBhIGZ1bGwgPGNvZGU+UmVnaXN0cnk8L2NvZGU+Ci0JICogbW9kZWwgYXMgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gVVJJIGFuZCByZWZlcmVuY2VkIGZyb20KLQkgKiB0aGUgaW5kZXggWE1MIGRvY3VtZW50IGxvY2F0ZWQgYXQgPGNvZGU+Z2V0VVJMKCk8L2NvZGU+LgotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBpZGVudGlmaWVyIG9mIHRoZSByZWdpc3RyeS4KLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwKLQkgKiBvciBudWxsIGlmIG5vIHN1Y2ggbW9kZWwgY2FuIGJlIGZvdW5kLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICovCi0JcHVibGljIFJlZ2lzdHJ5IGxvYWRSZWdpc3RyeSAoIFN0cmluZyB1cmkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIExvYWRzIGFzIG5lY2Vzc2FyeSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBmdWxsIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPgotCSAqIG1vZGVscyBhcyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBhcnJheSBvZiBVUklzIGFuZCByZWZlcmVuY2VkIGZyb20KLQkgKiB0aGUgaW5kZXggWE1MIGRvY3VtZW50IGxvY2F0ZWQgYXQgPGNvZGU+Z2V0VVJMKCk8L2NvZGU+LgotCSAqIFVzZWZ1bCBpbiBjb25qdW5jdGlvbiB3aXRoIDxjb2RlPmdldFJlZ2lzdHJ5VVJJcygpPC9jb2RlPi4KLQkgKiBOb3RlIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYXJyYXkgbWF5IGJlIGxlc3MgdGhhbgotCSAqIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9mIFVSSXMgaW4gY2FzZXMgd2hlcmUgb25lIG9yIG1vcmUKLQkgKiBVUklzIGZhaWwgdG8gcmVzb2x2ZSB0byBhIGxvYWRhYmxlIG1vZGVsLgotCSAqIAotCSAqIEBwYXJhbSB1cmlzIFRoZSBVUkkgaWRlbnRpZmllcnMgb2YgdGhlIHJlZ2lzdHJpZXMuCi0JICogQHJldHVybiBUaGUgYXJyYXkgb2YgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVscywKLQkgKiBuZXZlciBudWxsLCBidXQgcG9zc2libHkgZW1wdHkuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlbXSBsb2FkUmVnaXN0cmllcyAoIFN0cmluZ1tdIHVyaXMgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgVVJJIGlkZW50aWZpZXJzIHRvIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPgotCSAqIG1vZGVscyBpbiB0aGUgaW5kZXggbWFuYWdlZCBieSB0aGlzIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+LgotCSAqIAotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgVVJJIGlkZW50aWZpZXJzLCBwb3NzaWJseSBlbXB0eSBidXQgbmV2ZXIgbnVsbCwKLQkgKiB0byByZWdpc3RlcmVkIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbHMuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0UmVnaXN0cnlVUklzICgpIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogUmVtb3ZlcyB0aGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsIGlkZW50aWZpZWQgYnkgdGhlCi0JICogZ2l2ZW4gPGNvZGU+dXJpPC9jb2RlPiBmcm9tIHRoZSBpbmRleCBhbmQgZWl0aGVyIGtlZXBzIG9yCi0JICogZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyA8Y29kZT5SZWdpc3RyeTwvY29kZT4gZG9jdW1lbnQKLQkgKiBiYXNlZCBvbiB0aGUgdmFsdWUgZ2l2ZW4gZm9yIDxjb2RlPmRlbGV0ZURvY3VtZW50PC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgaWRlbnRpZmllciBvZiB0aGUgbW9kZWwgdG8gZGVsZXRlLgotCSAqIEBwYXJhbSBkZWxldGVEb2N1bWVudCBFaXRoZXIgPGNvZGU+S0VFUF9ET0NVTUVOVDwvY29kZT4KLQkgKiBvciA8Y29kZT5ERUxFVEVfRE9DVU1FTlQ8L2NvZGU+IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQotCSAqIG1vZGVsIGRvY3VtZW50IHNob3VsZCBiZSBrZXB0IG9yIGRlbGV0ZWQuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKiBAc2VlICNLRUVQX0RPQ1VNRU5UCi0JICogQHNlZSAjREVMRVRFX0RPQ1VNRU5UCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlUmVnaXN0cnkgKCBTdHJpbmcgdXJpLCBib29sZWFuIGRlbGV0ZURvY3VtZW50ICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBTYXZlcyBhIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbCB0byBhbiBYTUwgZG9jdW1lbnQKLQkgKiBsb2NhdGVkIHJlbGF0aXZlIHRvIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQgYXMgaWRlbnRpZmllZCBieQotCSAqIDxjb2RlPmdldFVSTCgpPC9jb2RlPiwgYW5kIHVwZGF0ZXMgdGhlIGluZGV4IFhNTCBkb2N1bWVudAotCSAqIHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc2F2ZWQgdGF4b25vbXkgZG9jdW1lbnQuCi0JICogVGhlIHJlbGF0aXZlIHBhdGhuYW1lIHRvIHRoZSB0YXhvbm9teSBYTUwgZG9jdW1lbnQgaXMKLQkgKiBjb21wdXRlZCBieSB0aGUgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gYW5kIGNhbm5vdAotCSAqIGJlIGluZmx1ZW5jZWQgYnkgdGhlIGNhbGxlci4KLQkgKiAKLQkgKiBAcGFyYW0gdGF4b25vbXkgVGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbCB0byBzYXZlLgotCSAqIEByZXR1cm4gQSA8Y29kZT5UYXhvbm9teTwvY29kZT4gcmVmZXJlbmNlLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFRheG9ub215Ci0JICovCi0JcHVibGljIFRheG9ub215IHNhdmVUYXhvbm9teSAoIFRheG9ub215IHRheG9ub215ICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBMb2FkcyBhcyBuZWNlc3NhcnkgYW5kIHJldHVybnMgYSBmdWxsIDxjb2RlPlRheG9ub215PC9jb2RlPgotCSAqIG1vZGVsIGFzIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIFVSSSBhbmQgcmVmZXJlbmNlZCBmcm9tCi0JICogdGhlIGluZGV4IFhNTCBkb2N1bWVudCBsb2NhdGVkIGF0IDxjb2RlPmdldFVSTCgpPC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgaWRlbnRpZmllciBvZiB0aGUgdGF4b25vbXkuCi0JICogQHJldHVybiBUaGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsCi0JICogb3IgbnVsbCBpZiBubyBzdWNoIG1vZGVsIGNhbiBiZSBmb3VuZC4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBUYXhvbm9teQotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBsb2FkVGF4b25vbXkgKCBTdHJpbmcgdXJpICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBMb2FkcyBhcyBuZWNlc3NhcnkgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgZnVsbCA8Y29kZT5UYXhvbm9teTwvY29kZT4KLQkgKiBtb2RlbHMgYXMgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gYXJyYXkgb2YgVVJJcyBhbmQgcmVmZXJlbmNlZCBmcm9tCi0JICogdGhlIGluZGV4IFhNTCBkb2N1bWVudCBsb2NhdGVkIGF0IDxjb2RlPmdldFVSTCgpPC9jb2RlPi4KLQkgKiBVc2VmdWwgaW4gY29uanVuY3Rpb24gd2l0aCA8Y29kZT5nZXRUYXhvbm9teVVSSXMoKTwvY29kZT4uCi0JICogTm90ZSB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIGFycmF5IG1heSBiZSBsZXNzIHRoYW4KLQkgKiB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvZiBVUklzIGluIGNhc2VzIHdoZXJlIG9uZSBvciBtb3JlCi0JICogVVJJcyBmYWlsIHRvIHJlc29sdmUgdG8gYSBsb2FkYWJsZSBtb2RlbC4gCi0JICogCi0JICogQHBhcmFtIHVyaXMgVGhlIFVSSSBpZGVudGlmaWVycyBvZiB0aGUgdGF4b25vbWllcy4KLQkgKiBAcmV0dXJuIFRoZSBhcnJheSBvZiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzLAotCSAqIG5ldmVyIG51bGwsIGJ1dCBwb3NzaWJseSBlbXB0eS4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBSZWdpc3RyeQotCSAqLwotCXB1YmxpYyBUYXhvbm9teVtdIGxvYWRUYXhvbm9taWVzICggU3RyaW5nW10gdXJpcyApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBVUkkgaWRlbnRpZmllcnMgdG8gPGNvZGU+VGF4b25vbXk8L2NvZGU+Ci0JICogbW9kZWxzIGluIHRoZSBpbmRleCBtYW5hZ2VkIGJ5IHRoaXMgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4uCi0JICogCi0JICogQHJldHVybiBBbiBhcnJheSBvZiBVUkkgaWRlbnRpZmllcnMsIHBvc3NpYmx5IGVtcHR5IGJ1dCBuZXZlciBudWxsLAotCSAqIHRvIHJlZ2lzdGVyZWQgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscy4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBUYXhvbm9teQotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRUYXhvbm9teVVSSXMgKCkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBSZW1vdmVzIHRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwgaWRlbnRpZmllZCBieSB0aGUKLQkgKiBnaXZlbiA8Y29kZT51cmk8L2NvZGU+IGZyb20gdGhlIGluZGV4IGFuZCBlaXRoZXIga2VlcHMgb3IKLQkgKiBkZWxldGVzIHRoZSBjb3JyZXNwb25kaW5nIDxjb2RlPlRheG9ub215PC9jb2RlPiBkb2N1bWVudAotCSAqIGJhc2VkIG9uIHRoZSB2YWx1ZSBnaXZlbiBmb3IgPGNvZGU+ZGVsZXRlRG9jdW1lbnQ8L2NvZGU+LgotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBpZGVudGlmaWVyIG9mIHRoZSBtb2RlbCB0byBkZWxldGUuCi0JICogQHBhcmFtIGRlbGV0ZURvY3VtZW50IEVpdGhlciA8Y29kZT5LRUVQX0RPQ1VNRU5UPC9jb2RlPgotCSAqIG9yIDxjb2RlPkRFTEVURV9ET0NVTUVOVDwvY29kZT4gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCi0JICogbW9kZWwgZG9jdW1lbnQgc2hvdWxkIGJlIGtlcHQgb3IgZGVsZXRlZC4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBUYXhvbm9teQotCSAqIEBzZWUgI0tFRVBfRE9DVU1FTlQKLQkgKiBAc2VlICNERUxFVEVfRE9DVU1FTlQKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVUYXhvbm9teSAoIFN0cmluZyB1cmksIGJvb2xlYW4gZGVsZXRlRG9jdW1lbnQgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvSVRheG9ub215RmluZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0lUYXhvbm9teUZpbmRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzhmY2MwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvSVRheG9ub215RmluZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotCi0vKioKLSAqIEFuIDxjb2RlPklUYXhvbm9teUZpbmRlcjwvY29kZT4gY29tcHV0ZXMgdGhlIHNldCBvZgotICogPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyByZWZlcmVuY2VkIG9yIHVzZWQgYnkgYQotICogPGNvZGU+UmVnaXN0cnk8L2NvZGU+LgotICogQGF1dGhvciBnaWxiZXJ0YUBjYS5pYm0uY29tCi0gKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIKLSAqLwotcHVibGljIGludGVyZmFjZSBJVGF4b25vbXlGaW5kZXIKLXsKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IHRheG9ub21pZXMgdXNlZCBieSB0aGUgZ2l2ZW4KLQkgKiA8Y29kZT5yZWdpc3RyeTwvY29kZT4uIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbC4KLQkgKgotCSAqIEBwYXJhbSByZWdpc3RyeSBUaGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGZvciB3aGljaAotCSAqIGEgc2V0IG9mIHRheG9ub21pZXMgbWlnaHQgYmUgZm91bmQuCi0JICogQHJldHVybiBUaGUgYXJyYXkgb2YgdGF4b25vbWllcywgcG9zc2libHkgZW1wdHkuCi0JICovCi0JcHVibGljIFRheG9ub215W10gdGF4b25vbWllcyAoIFJlZ2lzdHJ5IHJlZ2lzdHJ5ICk7CQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvUmVnaXN0cnlNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1JlZ2lzdHJ5TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODNjY2QyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvUmVnaXN0cnlNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUxNyAgIDEzMTU4MiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDYwOTA2ICAgMTQxNzk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLS8qKgotICogQSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+LgotICogQGF1dGhvciBjYnJlYWxleQotICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeU1hbmFnZXIgaW1wbGVtZW50cyBJUmVnaXN0cnlNYW5hZ2VyCi17Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFJFR0lTVFJZID0gIlJlZ2lzdHJ5IjsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgVEFYT05PTVkgPSAiVGF4b25vbXkiOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBYTUwgPSAieG1sIjsKLQlwcml2YXRlIEhhc2h0YWJsZSB0YXhvbm9teUZpbmRlcnNfOwotCXByaXZhdGUgSW5kZXggaW5kZXhfOwotCXByaXZhdGUgR2VuZXJpY1Jlc291cmNlRmFjdG9yeSByZXNvdXJjZUZhY3RvcnlfID0gbmV3IEdlbmVyaWNSZXNvdXJjZUZhY3RvcnkoKTsKLQlwcml2YXRlIFVSTCByZWdpc3RyeVVSTF89IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmcgcmVnaXN0cnlQYXRobmFtZV8gPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIG5ldyBSZWdpc3RyeU1hbmFnZXIgZm9yIHRoZSBpbmRleCBYTUwgZmlsZQotCSAqIGF0IHRoZSBnaXZlbiA8Y29kZT51cmw8L2NvZGU+LgotCSAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byB0aGUgaW5kZXggWE1MIGZpbGUuCi0JICovCi0JUmVnaXN0cnlNYW5hZ2VyICggVVJMIHVybCApCi0JewotCQlyZWdpc3RyeVVSTF8gPSB1cmw7Ci0JCXRheG9ub215RmluZGVyc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIG5ldyBSZWdpc3RyeU1hbmFnZXIgZm9yIHRoZSBpbmRleCBYTUwgZmlsZQotCSAqIGF0IHRoZSBnaXZlbiA8Y29kZT5wYXRobmFtZTwvY29kZT4uCi0JICogQHBhcmFtIHBhdGhuYW1lIFRoZSBwYXRobmFtZSB0byB0aGUgaW5kZXggWE1MIGZpbGUuCi0JICovCi0JUmVnaXN0cnlNYW5hZ2VyICggU3RyaW5nIHBhdGhuYW1lICkKLQl7Ci0JCXJlZ2lzdHJ5UGF0aG5hbWVfID0gcGF0aG5hbWU7Ci0JCXRheG9ub215RmluZGVyc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjZ2V0VVJMKCkKLQkgKi8KLQlwdWJsaWMgVVJMIGdldFVSTCAoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0JewotCQlpZiAocmVnaXN0cnlVUkxfID09IG51bGwpCi0JCXsKLQkJCXJlZ2lzdHJ5VVJMXyA9IG5ldyBGaWxlKHJlZ2lzdHJ5UGF0aG5hbWVfKS50b1VSTCgpOwotCQl9Ci0JCXJldHVybiByZWdpc3RyeVVSTF87Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhYnNvbHV0ZSBVUkwgY29tcHV0ZWQgZnJvbSB0aGUgYWJzb2x1dGUgVVJMIG9mIHRoZQotCSAqIGluZGV4IFhNTCBkb2N1bWVudCBtYW5hZ2VkIGJ5IHRoaXMgPGNvZGU+UmVnaXN0cnlNYW5hZ2VyPC9jb2RlPgotCSAqIGFuZCB0aGUgZ2l2ZW4gPGNvZGU+aWQ8L2NvZGU+LiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRldGVybWluZQotCSAqIGEgcmVhc29uYWJsZSBsb2NhdGlvbiBVUkwgZm9yIHJlZ2lzdHJ5IGFuZCB0YXhvbm9teSBkb2N1bWVudHMKLQkgKiB3aGVuIHJlZmVyZW5jZXMgdG8gdGhlbSBhcmUgZmlyc3QgdG8gYmUgYWRkZWQgdG8gdGhlIGluZGV4IFhNTAotCSAqIGRvY3VtZW50LiBUaGlzIG1ldGhvZCBpcyBpZGVtcG90ZW50IGluc29mYXIgYXMgaXQgd2lsbCBhbHdheXMKLQkgKiBjb21wdXRlIHRoZSBzYW1lIFVSTCBmb3IgYSBnaXZlbiA8Y29kZT5SZWdpc3RyeU1hbmFnZXI8L2NvZGU+Ci0JICogYW5kIGEgZ2l2ZW4gPGNvZGU+aWQ8L2NvZGU+LgotCSAqIAotCSAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHJlZmVyZW5jZWQgcmVnaXN0cnkgb3IgdGF4b25vbXkgZG9jdW1lbnQuIAotCSAqIEByZXR1cm4gVGhlIGFic29sdXRlIFVSTCB0byB0aGUgcmVmZXJlbmNlZCBkb2N1bWVudC4KLQkgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBJZiBhIHZpYWJsZSBhYnNvbHV0ZSBVUkwgY2Fubm90Ci0JICogYmUgY29tcHV0ZWQuCi0JICovCi0JcHJpdmF0ZSBVUkwgZ2V0VVJMICggU3RyaW5nIGlkICkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIGJhc2VVcmwgPSAiIjsgCi0JCVVSTCBpbmRleFVybCA9IGdldFVSTCgpOwotCQlTdHJpbmcgaW5kZXhTdHJpbmcgPSBpbmRleFVybC50b1N0cmluZygpOwotCQlpbnQgaW5kZXggPSBpbmRleFN0cmluZy5sYXN0SW5kZXhPZigiLyIpOyAKLQkJYmFzZVVybCA9IGluZGV4U3RyaW5nLnN1YnN0cmluZygwLGluZGV4ICsgMSk7Ci0JCVN0cmluZyB1cmxTdHJpbmcgPSBiYXNlVXJsICsgaWQgKyAiLiIgKyBYTUw7Ci0JCXJldHVybiBuZXcgVVJMKHVybFN0cmluZyk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjcmVmcmVzaE1hbmFnZXIoKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2hNYW5hZ2VyICgpCi0JewotCQlpbmRleF8gPSBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBDYWNoZXMgYW5kIHJldHVybnMgdGhlIGluZGV4IG1vZGVsLiBPbiBmaXJzdCBjYWxsLAotCSAqIGlmIGFuIGluZGV4IGRvY3VtZW50IGV4aXN0cywgdGhlIGluZGV4IGlzIGxvYWRlZAotCSAqIGZyb20gaXQsIG90aGVyd2lzZSwgYSBuZXcgaW5kZXggaXMgcmV0dXJuZWQuCi0JICogQHJldHVybiBUaGUgaW5kZXguCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBpbmRleCBjYW5ub3QgYmUgbG9hZGVkIGZvciBhbnkgcmVhc29uLgotCSAqLwotCXByaXZhdGUgSW5kZXggZ2V0SW5kZXggKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWlmIChpbmRleF8gPT0gbnVsbCkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJVVJMIGluZGV4VVJMID0gZ2V0VVJMKCk7Ci0JCQkJaWYgKFJlZ2lzdHJ5U2VydmljZS5leGlzdHMoaW5kZXhVUkwpKQotCQkJCXsKLQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnlfLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioueG1sIikpOwotCQkJCQlyZXNvdXJjZS5sb2FkKFJlZ2lzdHJ5U2VydmljZS5nZXRJbnB1dFN0cmVhbUZvcihpbmRleFVSTCksbnVsbCk7Ci0JCQkJCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QgZG9jdW1lbnQgPSAob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdClyZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKTsKLQkJCQkJaW5kZXhfID0gZG9jdW1lbnQuZ2V0SW5kZXgoKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJaW5kZXhfID0gUlRJbmRleEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUluZGV4KCk7Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJLy9UT0RPOiBOZWVkIGEgbWVzc2FnZSBmb3IgdGhpcyBTdGF0dXMuCi0JCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsZSkpOwotCQkJfQotCQl9Ci0JCXJldHVybiBpbmRleF87Ci0JfQotCi0JLyoqCi0JICogU2F2ZXMgdGhlIGluZGV4IG1vZGVsIHRvIGFuIFhNTCBkb2N1bWVudC4JCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBzYXZlIGZhaWxzIGZvciBhbnkgcmVhc29uLgotCSAqLwotCXByaXZhdGUgdm9pZCBzYXZlSW5kZXggKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QgZG9jdW1lbnQgPSBSVEluZGV4RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCWRvY3VtZW50LnNldEluZGV4KGdldEluZGV4KCkpOwotCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlRmFjdG9yeV8uY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi54bWwiKSk7Ci0JCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRvY3VtZW50KTsKLQkJdHJ5Ci0JCXsKLQkJCXJlc291cmNlLnNhdmUoUmVnaXN0cnlTZXJ2aWNlLmdldE91dHB1dFN0cmVhbUZvcihnZXRVUkwoKSksbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCS8vVE9ETzogTmVlZCBhIG1lc3NhZ2UgZm9yIHRoaXMgU3RhdHVzLgotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsZSkpOwotCQl9Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2FkZFRheG9ub215RmluZGVyKGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JVGF4b25vbXlGaW5kZXIpCi0JICovCi0JcHVibGljIHZvaWQgYWRkVGF4b25vbXlGaW5kZXIoU3RyaW5nIGNsYXNzTmFtZSwgSVRheG9ub215RmluZGVyIHRheG9ub215RmluZGVyKQotCXsKLQkJdGF4b25vbXlGaW5kZXJzXy5wdXQoY2xhc3NOYW1lLHRheG9ub215RmluZGVyKTsKLQl9Ci0JCi0JLyoqCi0JICogQWRkcyB0aGUgZ2l2ZW4gPGNvZGU+cmVnaXN0cnk8L2NvZGU+IGFzLWlzLCB3aGV0aGVyIGZ1bGwgbW9kZWwKLQkgKiBvciByZWZlcmVuY2UsIHRvIHRoZSBpbmRleCBvbmx5IGlmIGEgcmVnaXN0cnkgd2l0aCB0aGUgc2FtZSBJRAotCSAqIG9yIHJlZmVyZW5jZSBpcyBub3QgYWxyZWFkeSBzdG9yZWQgdGhlcmUuCi0JICogQHBhcmFtIHJlZ2lzdHJ5IFRoZSByZWdpc3RyeSB0byBhZGQuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZFJlZ2lzdHJ5VG9JbmRleChSZWdpc3RyeSByZWdpc3RyeSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBpZCA9IHJlZ2lzdHJ5LmdldElkKCk7Ci0JCWlmIChpZCA9PSBudWxsKSBpZCA9IHJlZ2lzdHJ5LmdldFJlZigpOwotCQlpZiAoaWQgIT0gbnVsbCAmJiBnZXRSZWdpc3RyeShpZCkgPT0gbnVsbCkKLQkJewotCQkJZ2V0SW5kZXgoKS5nZXRSZWdpc3RyeSgpLmFkZChyZWdpc3RyeSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQWRkcyB0aGUgZ2l2ZW4gPGNvZGU+dGF4b25vbXk8L2NvZGU+IGFzLWlzLCB3aGV0aGVyIGZ1bGwgbW9kZWwKLQkgKiBvciByZWZlcmVuY2UsIHRvIHRoZSBpbmRleCBvbmx5IGlmIGEgdGF4b25vbXkgd2l0aCB0aGUgc2FtZSBJRAotCSAqIG9yIHJlZmVyZW5jZSBpcyBub3QgYWxyZWFkeSBzdG9yZWQgdGhlcmUuCi0JICogQHBhcmFtIHRheG9ub215IFRoZSB0YXhvbm9teSB0byBhZGQuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZFRheG9ub215VG9JbmRleChUYXhvbm9teSB0YXhvbm9teSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBpZCA9IHRheG9ub215LmdldElkKCk7Ci0JCWlmIChpZCA9PSBudWxsKSBpZCA9IHRheG9ub215LmdldFJlZigpOwotCQlpZiAoaWQgIT0gbnVsbCAmJiBnZXRUYXhvbm9teShpZCkgPT0gbnVsbCkKLQkJewotCQkgCWdldEluZGV4KCkuZ2V0VGF4b25vbXkoKS5hZGQodGF4b25vbXkpOwkKLQkJfQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNzYXZlUmVnaXN0cnkob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSkKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgc2F2ZVJlZ2lzdHJ5ICggUmVnaXN0cnkgcmVnaXN0cnkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCQlSZWdpc3RyeSByZWdpc3RyeVJlZiA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQlVUkwgdXJsID0gZ2V0VVJMKFJFR0lTVFJZICsgcmVnaXN0cnkuZ2V0SWQoKSk7Ci0JCQlyZWdpc3RyeVNlcnZpY2Uuc2F2ZVJlZ2lzdHJ5KHVybCxyZWdpc3RyeSk7Ci0JCQlyZWdpc3RyeVJlZiA9IHJlZ2lzdHJ5U2VydmljZS5uZXdSZWdpc3RyeVJlZmVyZW5jZShyZWdpc3RyeSk7Ci0JCQlyZWdpc3RyeVJlZi5zZXRMb2NhdGlvbih1cmwudG9TdHJpbmcoKSk7Ci0JCQlhZGRSZWdpc3RyeVRvSW5kZXgocmVnaXN0cnlSZWYpOwotCQkJc2F2ZUluZGV4KCk7Ci0JCQkvKgotCQkJICogVE9ETzogVGhlIGZvbGxvd2luZyBwaWxlIG9mIGNvZGUgaXMgY29tbWVudGVkIG91dAotCQkJICogc2luY2UgdGhlcmUgaXNuJ3QgYSByZWxpYWJsZSB3YXkgdW5kZXIgdGhlIGN1cnJlbnQKLQkJCSAqIGRlc2lnbiB0byBzYXZlIHRheG9ub215IG1vZGVscyBoZWxkIGluIGEgcmVnaXN0cnkgbW9kZWwKLQkJCSAqIAotCQkJSVRheG9ub215RmluZGVyIGZpbmRlciA9IChJVGF4b25vbXlGaW5kZXIpdGF4b25vbXlGaW5kZXJzXy5nZXQocmVnaXN0cnkuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCQkJaWYgKGZpbmRlciAhPSBudWxsKQotCQkJewotCQkJCVRheG9ub215W10gdGF4b25vbWllcyA9IGZpbmRlci50YXhvbm9taWVzKHJlZ2lzdHJ5KTsKLQkJCQlmb3IgKGludCBpPTA7IGk8dGF4b25vbWllcy5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCVN0cmluZyBpZCA9IHRheG9ub21pZXNbaV0uZ2V0SWQoKTsKLQkJCQkJU3RyaW5nIHJlZiA9IHRheG9ub21pZXNbaV0uZ2V0UmVmKCk7Ci0JCQkJCWlmIChpZCAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlVUkwgdGF4b25vbXlVUkwgPSBnZXRVUkwoVEFYT05PTVkgKyBpZCk7Ci0JCQkJCQlyZWdpc3RyeVNlcnZpY2Uuc2F2ZVRheG9ub215KHRheG9ub215VVJMLHRheG9ub21pZXNbaV0pOwotCQkJCQkJVGF4b25vbXkgdGF4b25vbXlSZWYgPSByZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXlSZWZlcmVuY2UodGF4b25vbWllc1tpXSk7Ci0JCQkJCQl0YXhvbm9teVJlZi5zZXRMb2NhdGlvbih0YXhvbm9teVVSTC50b1N0cmluZygpKTsKLQkJCQkJCWFkZFRheG9ub215VG9JbmRleCh0YXhvbm9teVJlZik7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAocmVmICE9IG51bGwpCi0JCQkJCXsKLQkJCQkJCWlmICh0YXhvbm9taWVzW2ldLmdldExvY2F0aW9uKCkgPT0gbnVsbCkKLQkJCQkJCXsKLQkJCQkJCQlTdHJpbmcgbG9jYXRpb24gPSBudWxsOwotCQkJCQkJCVRheG9ub215IHRheG9ub215ID0gZ2V0VGF4b25vbXkocmVmKTsKLQkJCQkJCQlpZiAodGF4b25vbXkgIT0gbnVsbCkgbG9jYXRpb24gPSB0YXhvbm9teS5nZXRMb2NhdGlvbigpOwotCQkJCQkJCWlmIChsb2NhdGlvbiA9PSBudWxsKSBsb2NhdGlvbiA9IGdldFVSTChUQVhPTk9NWSArIHJlZikudG9TdHJpbmcoKTsKLQkJCQkJCQl0YXhvbm9taWVzW2ldLnNldExvY2F0aW9uKGxvY2F0aW9uKTsKLQkJCQkJCQlpZiAodGF4b25vbXkgPT0gbnVsbCkKLQkJCQkJCQl7Ci0JCQkJCQkJCWFkZFRheG9ub215VG9JbmRleChyZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXlSZWZlcmVuY2UodGF4b25vbWllc1tpXSkpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJICAgICovCi0JCX0KLQkJY2F0Y2ggKCBNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUgKQotCQl7Ci0JCQkvL1RPRE86IE1lc3NhZ2UgdGV4dCByZXF1aXJlZC4KLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLG1lKSk7Ci0JCX0KLQkJcmV0dXJuIHJlZ2lzdHJ5U2VydmljZS5uZXdSZWdpc3RyeVJlZmVyZW5jZShyZWdpc3RyeVJlZik7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjbG9hZFJlZ2lzdHJ5KGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IGxvYWRSZWdpc3RyeSAoIFN0cmluZyB1cmkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCQl0cnkKLQkJewotCQkJUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRSZWdpc3RyeSh1cmkpOwotCQkJaWYgKHJlZ2lzdHJ5ID09IG51bGwpIHJldHVybiBudWxsOwotCi0JCQkvLyBJZiB0aGUgUmVnaXN0cnkgaGFzIGFuIElELCBpdCdzIGEgZnVsbCBtb2RlbAotCQkJLy8gaW5saW5lZCB3aXRoaW4gdGhlIEluZGV4IGFuZCBpcyByZXR1cm5lZCBhcy1pcy4KLQkJCWlmIChyZWdpc3RyeS5nZXRJZCgpICE9IG51bGwpIHJldHVybiByZWdpc3RyeTsKLQotCQkJLy8gT3RoZXJ3aXNlIGl0J3MgYSByZWZlcmVuY2UgdG8gYSBmdWxsIG1vZGVsCi0JCQkvLyB3aGljaCB3ZSBsb2FkIGZyb20gdGhlIHJlZmVyZW5jZSdzIGxvY2F0aW9uLgotCQkJU3RyaW5nIHVybFN0cmluZyA9IHJlZ2lzdHJ5LmdldExvY2F0aW9uKCk7Ci0JCQlpZiAodXJsU3RyaW5nID09IG51bGwpIHJldHVybiBudWxsOwotCQkJVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTsKLQkJCXJldHVybiByZWdpc3RyeVNlcnZpY2UubG9hZFJlZ2lzdHJ5KHVybCk7Ci0JCX0KLQkJY2F0Y2ggKCBNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUgKQotCQl7Ci0JCQkvL1RPRE86IE1lc3NhZ2UgdGV4dCByZXF1aXJlZC4KLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLG1lKSk7Ci0JCX0KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjbG9hZFJlZ2lzdHJpZXMoamF2YS5sYW5nLlN0cmluZ1tdKQotCSAqLwotCXB1YmxpYyBSZWdpc3RyeVtdIGxvYWRSZWdpc3RyaWVzICggU3RyaW5nW10gdXJpcyApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KHVyaXMubGVuZ3RoKTsKLQkJZm9yIChpbnQgaT0wOyBpPHVyaXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gbG9hZFJlZ2lzdHJ5KHVyaXNbaV0pOwotCQkJaWYgKHJlZ2lzdHJ5ICE9IG51bGwpCi0JCQl7Ci0JCQkJbGlzdC5hZGQocmVnaXN0cnkpOwotCQkJfQotCQl9Ci0JCXJldHVybiAoUmVnaXN0cnlbXSlsaXN0LnRvQXJyYXkobmV3IFJlZ2lzdHJ5WzBdKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNnZXRSZWdpc3RyeVVSSXMoKQotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRSZWdpc3RyeVVSSXMgKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUVMaXN0IGxpc3QgPSBnZXRJbmRleCgpLmdldFJlZ2lzdHJ5KCk7Ci0JCUxpc3QgcmVnaXN0cnlVUklzID0gbmV3IEFycmF5TGlzdChsaXN0LnNpemUoKSk7Ci0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpCi0JCXsKLQkJCS8vIEVhY2ggUmVnaXN0cnkgZm91bmQgaW4gdGhlIGluZGV4IG1heSBiZQotCQkJLy8gZWl0aGVyIGEgZnVsbCBtb2RlbCBvciBhIHJlZmVyZW5jZSB0byBvbmUuCi0JCQlSZWdpc3RyeSByZWdpc3RyeSA9IChSZWdpc3RyeSlpdGVyYXRvci5uZXh0KCk7Ci0JCQlpZiAocmVnaXN0cnkuZ2V0SWQoKSAhPSBudWxsKQotCQkJewotCQkJCXJlZ2lzdHJ5VVJJcy5hZGQocmVnaXN0cnkuZ2V0SWQoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChyZWdpc3RyeS5nZXRSZWYoKSAhPSBudWxsKQotCQkJewotCQkJCXJlZ2lzdHJ5VVJJcy5hZGQocmVnaXN0cnkuZ2V0UmVmKCkpOwotCQkJfQotCQl9CQotCQlyZXR1cm4gKFN0cmluZ1tdKXJlZ2lzdHJ5VVJJcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI3JlbW92ZVJlZ2lzdHJ5KGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlUmVnaXN0cnkgKCBTdHJpbmcgdXJpLCBib29sZWFuIGRlbGV0ZURvY3VtZW50ICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUVMaXN0IGxpc3QgPSBnZXRJbmRleCgpLmdldFJlZ2lzdHJ5KCk7Ci0JCVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0UmVnaXN0cnkodXJpKTsKLQkJaWYgKHJlZ2lzdHJ5ICE9IG51bGwpCi0JCXsKLQkJCWxpc3QucmVtb3ZlKHJlZ2lzdHJ5KTsKLQkJCXNhdmVJbmRleCgpOwotCQkJLy8gVGhlIGlkZW50aWZpZWQgUmVnaXN0cnkgbWF5IGJlIGVpdGhlciBhIGZ1bGwgbW9kZWwKLQkJCS8vIChpZS4gaW5saW5lZCBpbiB0aGUgSW5kZXgpIG9yIGEgcmVmZXJlbmNlIHRvIG9uZS4KLQkJCS8vIE9ubHkgaW4gdGhlIGxhdHRlciBjYXNlIGlzIHRoZXJlIGEgZmlsZSB0byBkZWxldGUuCi0JCQlpZiAoZGVsZXRlRG9jdW1lbnQgJiYgcmVnaXN0cnkuZ2V0TG9jYXRpb24oKSAhPSBudWxsKQotCQkJewotCQkJCS8vVE9ETzogSW1wbGVtZW50IG1lLgotCQkJfQotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjc2F2ZVRheG9ub215KG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkpCi0JICovCi0JcHVibGljIFRheG9ub215IHNhdmVUYXhvbm9teSAoIFRheG9ub215IHRheG9ub215ICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkJVGF4b25vbXkgdGF4b25vbXlSZWYgPSBudWxsOwotCQl0cnkKLQkJewotCQkJVVJMCXVybCA9IGdldFVSTChUQVhPTk9NWSArIHRheG9ub215LmdldElkKCkpOwotCQkgICAgcmVnaXN0cnlTZXJ2aWNlLnNhdmVUYXhvbm9teSh1cmwsdGF4b25vbXkpOwotCQkJdGF4b25vbXlSZWYgPSByZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXlSZWZlcmVuY2UodGF4b25vbXkpOwotCQkJdGF4b25vbXlSZWYuc2V0TG9jYXRpb24odXJsLnRvU3RyaW5nKCkpOwotCQkJYWRkVGF4b25vbXlUb0luZGV4KHRheG9ub215UmVmKTsKLQkJCXNhdmVJbmRleCgpOwotCQl9Ci0JCWNhdGNoICggTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lICkKLQkJewotCQkJLy9UT0RPOiBNZXNzYWdlIHRleHQgcmVxdWlyZWQuCi0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixtZSkpOwotCQl9Ci0JCXJldHVybiByZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXlSZWZlcmVuY2UodGF4b25vbXlSZWYpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNsb2FkVGF4b25vbXkoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXkgbG9hZFRheG9ub215ICggU3RyaW5nIHVyaSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JCXRyeQotCQl7Ci0JCQlUYXhvbm9teSB0YXhvbm9teSA9IGdldFRheG9ub215KHVyaSk7Ci0JCQlpZiAodGF4b25vbXkgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0KLQkJCS8vIElmIHRoZSBUYXhvbm9teSBoYXMgYW4gSUQsIGl0J3MgYSBmdWxsIG1vZGVsCi0JCQkvLyBpbmxpbmVkIHdpdGhpbiB0aGUgSW5kZXggYW5kIGlzIHJldHVybmVkIGFzLWlzLgotCQkJaWYgKHRheG9ub215LmdldElkKCkgIT0gbnVsbCkgcmV0dXJuIHRheG9ub215OwotCi0JCQkvLyBPdGhlcndpc2UgaXQncyBhIHJlZmVyZW5jZSB0byBhIGZ1bGwgbW9kZWwKLQkJCS8vIHdoaWNoIHdlIGxvYWQgZnJvbSB0aGUgcmVmZXJlbmNlJ3MgbG9jYXRpb24uCi0JCQlTdHJpbmcgdXJsU3RyaW5nID0gdGF4b25vbXkuZ2V0TG9jYXRpb24oKTsKLQkJCWlmICh1cmxTdHJpbmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0JCQlVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHJpbmcpOwotCQkJcmV0dXJuIHJlZ2lzdHJ5U2VydmljZS5sb2FkVGF4b25vbXkodXJsKTsKLQkJfQotCQljYXRjaCAoIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSApCi0JCXsKLQkJCS8vVE9ETzogTWVzc2FnZSB0ZXh0IHJlcXVpcmVkLgotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsbWUpKTsKLQkJfQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNsb2FkVGF4b25vbWllcyhqYXZhLmxhbmcuU3RyaW5nW10pCi0JICovCi0JcHVibGljIFRheG9ub215W10gbG9hZFRheG9ub21pZXMgKCBTdHJpbmdbXSB1cmlzICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QodXJpcy5sZW5ndGgpOwotCQlmb3IgKGludCBpPTA7IGk8dXJpcy5sZW5ndGg7IGkrKykKLQkJewotCQkJVGF4b25vbXkgdGF4b25vbXkgPSBsb2FkVGF4b25vbXkodXJpc1tpXSk7Ci0JCQlpZiAodGF4b25vbXkgIT0gbnVsbCkKLQkJCXsKLQkJCQlsaXN0LmFkZCh0YXhvbm9teSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChUYXhvbm9teVtdKWxpc3QudG9BcnJheShuZXcgVGF4b25vbXlbMF0pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2dldFRheG9ub215VVJJcygpCi0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFRheG9ub215VVJJcyAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJRUxpc3QgbGlzdCA9IGdldEluZGV4KCkuZ2V0VGF4b25vbXkoKTsKLQkJTGlzdCB0YXhvbm9teVVSSXMgPSBuZXcgQXJyYXlMaXN0KGxpc3Quc2l6ZSgpKTsKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkKLQkJewotCQkJLy8gRWFjaCBUYXhvbm9teSBmb3VuZCBpbiB0aGUgaW5kZXggbWF5IGJlCi0JCQkvLyBlaXRoZXIgYSBmdWxsIG1vZGVsIG9yIGEgcmVmZXJlbmNlIHRvIG9uZS4KLQkJCVRheG9ub215IHRheG9ub215ID0gKFRheG9ub215KWl0ZXJhdG9yLm5leHQoKTsKLQkJCWlmICh0YXhvbm9teS5nZXRJZCgpICE9IG51bGwpCi0JCQl7Ci0JCQkJdGF4b25vbXlVUklzLmFkZCh0YXhvbm9teS5nZXRJZCgpKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHRheG9ub215LmdldFJlZigpICE9IG51bGwpCi0JCQl7Ci0JCQkJdGF4b25vbXlVUklzLmFkZCh0YXhvbm9teS5nZXRSZWYoKSk7Ci0JCQl9Ci0JCX0JCi0JCXJldHVybiAoU3RyaW5nW10pdGF4b25vbXlVUklzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjcmVtb3ZlVGF4b25vbXkoamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVUYXhvbm9teSAoIFN0cmluZyB1cmksIGJvb2xlYW4gZGVsZXRlRG9jdW1lbnQgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJRUxpc3QgbGlzdCA9IGdldEluZGV4KCkuZ2V0VGF4b25vbXkoKTsKLQkJVGF4b25vbXkgdGF4b25vbXkgPSBnZXRUYXhvbm9teSh1cmkpOwotCQlpZiAodGF4b25vbXkgIT0gbnVsbCkKLQkJewotCQkJbGlzdC5yZW1vdmUodGF4b25vbXkpOwotCQkJc2F2ZUluZGV4KCk7Ci0JCQkvLyBUaGUgaWRlbnRpZmllZCBUYXhvbm9teSBtYXkgYmUgZWl0aGVyIGEgZnVsbCBtb2RlbAotCQkJLy8gKGllLiBpbmxpbmVkIGluIHRoZSBJbmRleCkgb3IgYSByZWZlcmVuY2UgdG8gb25lLgotCQkJLy8gT25seSBpbiB0aGUgbGF0dGVyIGNhc2UgaXMgdGhlcmUgYSBmaWxlIHRvIGRlbGV0ZS4KLQkJCWlmIChkZWxldGVEb2N1bWVudCAmJiB0YXhvbm9teS5nZXRMb2NhdGlvbigpICE9IG51bGwpCi0JCQl7Ci0JCQkJLy9UT0RPOiBJbXBsZW1lbnQgbWUuCi0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBSZWdpc3RyeSBmcm9tIHRoZSBpbmRleCB3aG9zZSBJRCBvciBSZWZlcmVuY2UKLQkgKiBtYXRjaGVzIHRoZSBnaXZlbiBVUkkuIEFzIHN1Y2gsIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gYQotCSAqIGZ1bGwgbW9kZWwgb3IgYSByZWZlcmVuY2UgdG8gYSBmdWxsIG1vZGVsLgotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBpZGVudGlmaWVyIG9mIHRoZSBSZWdpc3RyeQotCSAqIEByZXR1cm4gVGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBvYmplY3Qgd2hvc2UgSUQgb3IgcmVmZXJlbmNlCi0JICogbWF0Y2hlcyB0aGUgZ2l2ZW4gPGNvZGU+dXJpPC9jb2RlPiwgb3IgbnVsbCBpZiBub25lIG1hdGNoLgotCSAqLwotICAgIHByaXZhdGUgUmVnaXN0cnkgZ2V0UmVnaXN0cnkgKCBTdHJpbmcgdXJpICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgICB7Ci0JCUVMaXN0IGxpc3QgPSBnZXRJbmRleCgpLmdldFJlZ2lzdHJ5KCk7CQotCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSl7Ci0JCQlSZWdpc3RyeSByZWdpc3RyeSA9IChSZWdpc3RyeSlpdC5uZXh0KCk7Ci0JCQlpZiAodXJpLmVxdWFscyhyZWdpc3RyeS5nZXRJZCgpKSB8fCB1cmkuZXF1YWxzKHJlZ2lzdHJ5LmdldFJlZigpKSl7Ci0JCQkJcmV0dXJuIHJlZ2lzdHJ5OyAgCi0JCQl9Ci0JCX0JCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBUYXhvbm9teSBmcm9tIHRoZSBpbmRleCB3aG9zZSBJRCBvciBSZWZlcmVuY2UKLQkgKiBtYXRjaGVzIHRoZSBnaXZlbiBVUkkuIEFzIHN1Y2gsIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gYQotCSAqIGZ1bGwgbW9kZWwgb3IgYSByZWZlcmVuY2UgdG8gYSBmdWxsIG1vZGVsLgotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBpZGVudGlmaWVyIG9mIHRoZSBUYXhvbm9teQotCSAqIEByZXR1cm4gVGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3Qgd2hvc2UgSUQgb3IgcmVmZXJlbmNlCi0JICogbWF0Y2hlcyB0aGUgZ2l2ZW4gPGNvZGU+dXJpPC9jb2RlPiwgb3IgbnVsbCBpZiBub25lIG1hdGNoLgotCSAqLwotICAgIHByaXZhdGUgVGF4b25vbXkgZ2V0VGF4b25vbXkgKCBTdHJpbmcgdXJpICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgICB7Ci0JCUVMaXN0IGxpc3QgPSBnZXRJbmRleCgpLmdldFRheG9ub215KCk7CQotCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSl7Ci0JCQlUYXhvbm9teSB0YXhvbm9teSA9IChUYXhvbm9teSlpdC5uZXh0KCk7Ci0JCQlpZiAodXJpLmVxdWFscyh0YXhvbm9teS5nZXRJZCgpKSB8fCB1cmkuZXF1YWxzKHRheG9ub215LmdldFJlZigpKSl7Ci0JCQkJcmV0dXJuIHRheG9ub215OwotCQkJfQotCQl9CQotICAgICAgICByZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1JlZ2lzdHJ5U2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9SZWdpc3RyeVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU4YzgxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1JlZ2lzdHJ5U2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotLyoqCi0gKiBSZWdpc3RyeVNlcnZpY2UgaXMgdGhlIHN0YXJ0aW5nIGNsYXNzIG9mIHRoZSBXZWIgc2VydmljZSByZWdpc3RyeQotICogcHJvZ3JhbW1pbmcgbW9kZWwuIENhbGwgdGhlIDxjb2RlPlJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpPC9jb2RlPgotICogc3RhdGljIG1ldGhvZCB0byBnZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICogPHA+Ci0gKiBSZWdpc3RyeVNlcnZpY2UgcHJvdmlkZXMgZmFjdG9yeSBtZXRob2RzIGZvciBnZXR0aW5nIG5ldwotICogaW5zdGFuY2VzIG9mIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+IG9iamVjdHMgd2hpY2gsCi0gKiBpbiB0dXJuLCBwcm92aWRlIHRoZSBtZWFucyBmb3IgcmVnaXN0ZXJpbmcgYW5kIHVucmVnaXN0ZXJpbmcKLSAqIGdyb3VwcyBvZiA8Y29kZT5SZWdpc3RyeTwvY29kZT4gYW5kIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMKLSAqIGF0IFVSTCBhZGRyZXNzYWJsZSBsb2NhdGlvbnMgaW4gdGhlIGZpbGVzeXN0ZW0gb3IgZWxzZXdoZXJlLgotICogPHA+Ci0gKiBSZWdpc3RyeVNlcnZpY2UgcHJvdmlkZXMgdXRpbGl0eSBtZXRob2RzIHRvIGVhc2UgdGhlIGNyZWF0aW9uLAotICogbG9hZGluZyBhbmQgc2F2aW5nIHJhdyBpbnN0YW5jZXMgb2YgdGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPgotICogYW5kIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMsIGFuZCB0byBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZgotICogY29tcG9zaW5nIGFuZCBmaW5kaW5nIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgaW4KLSAqIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbHMuCi0gKiA8cD4KLSAqIEEgdHlwaWNhbCB1c2Ugb2YgPGNvZGU+UmVnaXN0cnlTZXJ2aWNlPC9jb2RlPiBhbmQgaXRzIHJlbGF0ZWQKLSAqIGNsYXNzZXMgdG8gY3JlYXRlIGFuZCBzYXZlIGEgbmV3IGZhbWlseSBvZiBtb2RlbHMgaXM6Ci0gKiA8YmxvY2txdW90ZT4KLSAqIDxjb2RlPgotICogUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotICogTXlSZWdpc3RyeSByZWdpc3RyeSA9IE15UmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNeVJlZ2lzdHJ5KCk7Ci0gKiAvLyBidWlsZCB1cCB5b3VyIHJlZ2lzdHJ5IG1vZGVsIGhlcmUKLSAqIFRheG9ub215IHRheG9ub215ID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215KCk7Ci0gKiAvLyBidWlsZCB1cCB5b3VyIHRheG9ub215IG1vZGVsIGhlcmUKLSAqIHJlZ2lzdHJ5U2VydmljZS5hZGRUYXhvbm9teShyZWdpc3RyeSx0YXhvbm9teSk7Ci0gKiBJUmVnaXN0cnlNYW5hZ2VyIHJlZ2lzdHJ5TWFuYWdlciA9IHJlZ2lzdHJ5U2VydmljZS5nZXREZWZhdWx0UmVnaXN0cnlNYW5hZ2VyKCk7Ci0gKiByZWdpc3RyeU1hbmFnZXIuc2F2ZVJlZ2lzdHJ5KHJlZ2lzdHJ5KTsKLSAqIDwvY29kZT4KLSAqIDwvYmxvY2txdW90ZT4KLSAqIEBzZWUgI2luc3RhbmNlKCkKLSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlcgotICogQHNlZSBSZWdpc3RyeQotICogQHNlZSBUYXhvbm9teQotICogQGF1dGhvciBjYnJlYWxleQotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlTZXJ2aWNlCi17Ci0JcHJpdmF0ZSBzdGF0aWMgUmVnaXN0cnlTZXJ2aWNlIGluc3RhbmNlXzsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9JTkRFWF9YTUxfRklMRSA9ICJEZWZhdWx0SW5kZXgueG1sIjsKLQlwcml2YXRlIEhhc2h0YWJsZSByZWdpc3RyeU1hbmFnZXJzXyA9IG5ldyBIYXNodGFibGUoKTsKLQlwcml2YXRlIElSZWdpc3RyeU1hbmFnZXIgZGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcl8gPSBudWxsOwotCXByaXZhdGUgR2VuZXJpY1Jlc291cmNlRmFjdG9yeSByZXNvdXJjZUZhY3RvcnlfID0gbmV3IEdlbmVyaWNSZXNvdXJjZUZhY3RvcnkoKTsKLQotCS8qKgotCSAqIEEgUmVnaXN0cnlTZXJ2aWNlIGNhbm5vdCBiZSBkaXJlY3RseSBjb25zdHJ1Y3RlZC4KLQkgKiBVc2UgQGxpbmsgI2luc3RhbmNlKCkgdG8gZ2V0IHRoZSBzaW5nbGV0b24gb2YgdGhpcyBjbGFzcy4KLQkgKi8KLQlwcml2YXRlIFJlZ2lzdHJ5U2VydmljZSAoKQotCXsKLQkJUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoInhtbCIscmVzb3VyY2VGYWN0b3J5Xyk7Ci0JCVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0Q2xhc3MoKTsKLQkJVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXRDbGFzcygpOwotCQlSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0Q2xhc3MoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gb2YgdGhpcyBjbGFzcy4KLQkgKiBAcmV0dXJuIFRoZSBzaW5nbGV0b24gb2YgdGhpcyBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlZ2lzdHJ5U2VydmljZSBpbnN0YW5jZSAoKQotCXsKLQkJaWYgKGluc3RhbmNlXyA9PSBudWxsKQotCQl7Ci0JCQlpbnN0YW5jZV8gPSBuZXcgUmVnaXN0cnlTZXJ2aWNlKCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbmNlXzsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIGRlZmF1bHQgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gZm9yIHRoZSBzeXN0ZW0uCi0JICogQHJldHVybiBUaGUgZGVmYXVsdCA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBmb3IgdGhlIHN5c3RlbS4KLQkgKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIKLQkgKi8KLQlwdWJsaWMgSVJlZ2lzdHJ5TWFuYWdlciBnZXREZWZhdWx0UmVnaXN0cnlNYW5hZ2VyICgpCi0JewotCQlpZiAoZGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcl8gPT0gbnVsbCkKLQkJewotCQkJU3RyaW5nIGluZGV4RmlsZW5hbWUgPSBXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RhdGVMb2NhdGlvbigpLmFwcGVuZChERUZBVUxUX0lOREVYX1hNTF9GSUxFKS50b1N0cmluZygpOwotCQkJZGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcl8gPSBuZXcgUmVnaXN0cnlNYW5hZ2VyKGluZGV4RmlsZW5hbWUpOwotCQl9Ci0JCXJldHVybiBkZWZhdWx0UmVnaXN0cnlNYW5hZ2VyXzsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IG9yIGV4aXN0aW5nIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+IGZvciB0aGUgZ2l2ZW4gVVJMLgotCSAqIEBwYXJhbSB1cmwgQSBVUkwgdG8gdGhlIFhNTCBkb2N1bWVudCB0aGF0IHBlcnNpc3RzCi0JICogdGhlIHNldCBvZiByZWdpc3RyaWVzIG1hbmFnZWQgYnkgdGhpcyA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPi4KLQkgKiBAcmV0dXJuIFRoZSBuZXcgb3IgZXhpc3RpbmcgPGNvZGU+UmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBmb3IgdGhlIGdpdmVuIFVSTC4KLQkgKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIKLQkgKi8KLQlwdWJsaWMgSVJlZ2lzdHJ5TWFuYWdlciBnZXRSZWdpc3RyeU1hbmFnZXIgKCBVUkwgdXJsICkKLQl7Ci0JCUlSZWdpc3RyeU1hbmFnZXIgcmVnaXN0cnlNYW5hZ2VyID0gKElSZWdpc3RyeU1hbmFnZXIpcmVnaXN0cnlNYW5hZ2Vyc18uZ2V0KHVybCk7Ci0JCWlmIChyZWdpc3RyeU1hbmFnZXIgPT0gbnVsbCkKLQkJewotCQkJcmVnaXN0cnlNYW5hZ2VyID0gbmV3IFJlZ2lzdHJ5TWFuYWdlcih1cmwpOwotCQkJcmVnaXN0cnlNYW5hZ2Vyc18ucHV0KHVybCxyZWdpc3RyeU1hbmFnZXIpOwotCQl9Ci0JCXJldHVybiByZWdpc3RyeU1hbmFnZXI7Ci0JfQotCQotCS8qKgotCSAqIFJlbW92ZXMgdGhlIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+IGZvciB0aGUgZ2l2ZW4gVVJMLgotCSAqIE5vIHBoeXNpY2FsIHJlc291cmNlcyBhcmUgZGVsZXRlZC4KLQkgKiBAcGFyYW0gdXJsIEEgVVJMIHRvIHRoZSBYTUwgZG9jdW1lbnQgdGhhdCBwZXJzaXN0cwotCSAqIHRoZSBzZXQgb2YgcmVnaXN0cmllcyBtYW5hZ2VkIGJ5IHRoaXMgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4uCi0JICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlUmVnaXN0cnlNYW5hZ2VyICggVVJMIHVybCApCi0JewotCQlyZWdpc3RyeU1hbmFnZXJzXy5yZW1vdmUodXJsKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbC4KLQkgKiBBcyBhIGdlbmVyYWwgcnVsZSwgdGhpcyBtZXRob2QgaGFzIGxpdHRsZSBhY3R1YWwgdmFsdWUgYXMKLQkgKiBtb3N0IGNvbmNyZXRlIHJlZ2lzdHJ5IG1vZGVscyB3aWxsIGJlIG9mIHR5cGVzIHRoYXQgZXh0ZW5kCi0JICogdGhlIGJhc2UgUmVnaXN0cnkgbW9kZWwsIHN1Y2ggYXMgPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPi4KLQkgKiBGb3IgZXhhbXBsZSwgPGNvZGU+VURESVJlZ2lzdHJ5U2VydmljZS5uZXdVRERJUmVnaXN0cnkoKTwvY29kZT4KLQkgKiByZXR1cm5zIGEgbmV3IDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4uIFByb3ZpZGVycyBvZiBvdGhlcgotCSAqIGNvbmNyZXRlIHR5cGVzIG9mIHJlZ2lzdHJpZXMgbWF5IHByb3ZpZGUgc2ltaWxhciBmYWNpbGl0aWVzLgotCSAqIEByZXR1cm4gQSBuZXcgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsLiBOZXZlciByZXR1cm5zIG51bGwuCi0JICogQHNlZSBSZWdpc3RyeQotCSAqIEBzZWUgVURESVJlZ2lzdHJ5U2VydmljZSNuZXdVRERJUmVnaXN0cnkoKQotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBuZXdSZWdpc3RyeSAoKQotCXsKLQkJcmV0dXJuIFJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVnaXN0cnkoKTsKLQl9Ci0JCi0JLyoqCi0JICogTG9hZHMgdGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCBmcm9tIGFuIFhNTCBkb2N1bWVudC4KLQkgKiBJZiBsb2FkaW5nIHRoZSBtb2RlbCBvZiBhIHJlZ2lzdHJ5IHRoYXQgZXh0ZW5kcyB0aGUgYmFzZQotCSAqIFJlZ2lzdHJ5IGludGVyZmFjZSBhbmQgU2NoZW1hLCB5b3UgbXVzdCBpbml0aWFsaXplIHRoZSBFTUYKLQkgKiBlQ29yZSBwYWNrYWdlIChlZy4gPGNvZGU+TXlSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFPC9jb2RlPgotCSAqIGZvciB5b3VyIG1vZGVsIGJlZm9yZSBjYWxsaW5nIHRoaXMgbG9hZCBtZXRob2QuCi0JICogRm9yIFVEREkgUmVnaXN0cnkgbW9kZWxzLCB0aGlzIGlzIGRvbmUgYXV0b21hdGljYWxseSBieQotCSAqIGNhbGxpbmcgPGNvZGU+VURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpPC9jb2RlPi4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gdGhlIFhNTCBkb2N1bWVudCB0byBsb2FkLgotCSAqIEByZXR1cm4gVGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbC4KLQkgKiBAdGhyb3dzIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IElmIHRoZSBtb2RlbCBjYW5ub3QgYmUgbG9hZGVkLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKiBAc2VlIFVERElSZWdpc3RyeVNlcnZpY2UjaW5zdGFuY2UoKQotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBsb2FkUmVnaXN0cnkgKCBVUkwgdXJsICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VGYWN0b3J5Xy5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLnhtbCIpKTsKLQkJdHJ5Ci0JCXsKLQkJCXJlc291cmNlLmxvYWQoZ2V0SW5wdXRTdHJlYW1Gb3IodXJsKSxudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsZSkpOwotCQl9Ci0JCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290IGRvY3VtZW50ID0gKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290KXJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOwotCQlyZXR1cm4gZG9jdW1lbnQuZ2V0UmVnaXN0cnkoKTsKLQl9Ci0KLQkvKioKLQkgKiBTYXZlcyB0aGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsIHRvIGFuIFhNTCBkb2N1bWVudC4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gdGhlIFhNTCBkb2N1bWVudCB0byBzYXZlLgotCSAqIEBwYXJhbSByZWdpc3RyeSBUaGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsIHRvIHNhdmUuCi0JICogQHRocm93cyA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBJZiB0aGUgbW9kZWwgY2Fubm90IGJlIHNhdmVkLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzYXZlUmVnaXN0cnkgKCBVUkwgdXJsLCBSZWdpc3RyeSByZWdpc3RyeSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCBkb2N1bWVudCA9IFJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCWRvY3VtZW50LnNldFJlZ2lzdHJ5KHJlZ2lzdHJ5KTsKLQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnlfLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioueG1sIikpOwotCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkb2N1bWVudCk7Ci0JCXRyeQotCQl7Ci0JCQlyZXNvdXJjZS5zYXZlKGdldE91dHB1dFN0cmVhbUZvcih1cmwpLG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixlKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbC4KLQkgKiBAcmV0dXJuIEEgbmV3IDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbC4gTmV2ZXIgcmV0dXJucyBudWxsLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXkgbmV3VGF4b25vbXkgKCkKLQl7Ci0JCXJldHVybiBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRheG9ub215KCk7Ci0JfQotCQotCS8qKgotCSAqIExvYWRzIHRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwgZnJvbSBhbiBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIHRoZSBYTUwgZG9jdW1lbnQgdG8gbG9hZC4KLQkgKiBAcmV0dXJuIHRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwuCi0JICogQHRocm93cyA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBJZiB0aGUgbW9kZWwgY2Fubm90IGJlIGxvYWRlZC4KLQkgKiBAc2VlIFRheG9ub215Ci0JICovCi0JcHVibGljIFRheG9ub215IGxvYWRUYXhvbm9teSAoIFVSTCB1cmwgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnlfLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioueG1sIikpOwotCQl0cnkKLQkJewotCQkJcmVzb3VyY2UubG9hZChnZXRJbnB1dFN0cmVhbUZvcih1cmwpLG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixlKSk7Ci0JCX0KLQkJb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QgZG9jdW1lbnQgPSAob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QpcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCk7Ci0JCXJldHVybiBkb2N1bWVudC5nZXRUYXhvbm9teSgpOwotCX0KLQotCS8qKgotCSAqIFNhdmVzIHRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwgdG8gYW4gWE1MIGRvY3VtZW50LgotCSAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byB0aGUgWE1MIGRvY3VtZW50IHRvIHNhdmUuCi0JICogQHBhcmFtIHRheG9ub215IFRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwgdG8gc2F2ZS4KLQkgKiBAdGhyb3dzIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IElmIHRoZSBtb2RlbCBjYW5ub3QgYmUgc2F2ZWQuCi0JICogQHNlZSBUYXhvbm9teQotCSAqLwotCXB1YmxpYyB2b2lkIHNhdmVUYXhvbm9teSAoIFVSTCB1cmwsIFRheG9ub215IHRheG9ub215ICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290IGRvY3VtZW50ID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEb2N1bWVudFJvb3QoKTsKLQkJZG9jdW1lbnQuc2V0VGF4b25vbXkodGF4b25vbXkpOwotCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlRmFjdG9yeV8uY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi54bWwiKSk7Ci0JCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRvY3VtZW50KTsKLQkJdHJ5Ci0JCXsKLQkJCXJlc291cmNlLnNhdmUoZ2V0T3V0cHV0U3RyZWFtRm9yKHVybCksbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLGUpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBuZXcgUmVnaXN0cnkgbW9kZWwgY29uZmlndXJlZAotCSAqIHRvIHJlZmVyZW5jZSB0aGUgZ2l2ZW4gPGNvZGU+cmVnaXN0cnk8L2NvZGU+LgotCSAqIDxwPgotCSAqIFRoZSBnaXZlbiA8Y29kZT5yZWdpc3RyeTwvY29kZT4gY2FuIGJlIGVpdGhlciBhIGZ1bGwKLQkgKiBtb2RlbCBhcyBzaWduaWZpZWQgYnkgaGF2aW5nIGEgbm9uLW51bGwsIG5vbi1lbXB0eQotCSAqIGlkZW50aWZpZXIgKDxjb2RlPnJlZ2lzdHJ5LmdldElkKCk8L2NvZGU+KSwgb3IgYQotCSAqIHJlZmVyZW5jZSBpdHNlbGYgYXMgc2lnbmlmaWVkIGJ5IGhhdmluZyBhIG5vbi1udWxsLAotCSAqIG5vbi1lbXB0eSByZWZlcmVuY2UgKDxjb2RlPnJlZ2lzdHJ5LmdldFJlZigpPC9jb2RlPikuCi0JICogPHA+Ci0JICogSWYgdGhlIGdpdmVuIDxjb2RlPnJlZ2lzdHJ5PC9jb2RlPiBpcyBhIGZ1bGwgbW9kZWwsCi0JICogdGhlbiBhIG5ldyA8Y29kZT5SZWdpc3RyeTwvY29kZT4gaXMgcmV0dXJuZWQgc3VjaCB0aGF0Ci0JICogPHVsPgotCSAqIDxsaT48Y29kZT5nZXRSZWYoKTwvY29kZT4gZXF1YWxzIDxjb2RlPnJlZ2lzdHJ5LmdldElkKCk8L2NvZGU+PC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0TG9jYXRpb24oKTwvY29kZT4gaXMgbnVsbDwvbGk+Ci0JICogPGxpPjxjb2RlPmdldElkKCk8L2NvZGU+IGlzIG51bGw8L2xpPgotCSAqIDwvdWw+Ci0JICogPHA+Ci0JICogSW4gdGhlIGdpdmVuIDxjb2RlPnJlZ2lzdHJ5PC9jb2RlPiBpcyBpdHNlbGYgYSByZWZlcmVuY2UsCi0JICogdGhlbiBhIG5ldyA8Y29kZT5SZWdpc3RyeTwvY29kZT4gaXMgcmV0dXJuZWQgc3VjaCB0aGF0Ci0JICogPHVsPgotCSAqIDxsaT48Y29kZT5nZXRSZWYoKTwvY29kZT4gZXF1YWxzIDxjb2RlPnJlZ2lzdHJ5LmdldFJlZigpPC9jb2RlPjwvbGk+Ci0JICogPGxpPjxjb2RlPmdldExvY2F0aW9uKCk8L2NvZGU+IGVxdWFscyA8Y29kZT5yZWdpc3RyeS5nZXRMb2NhdGlvbigpPC9jb2RlPjwvbGk+Ci0JICogPGxpPjxjb2RlPmdldElkKCk8L2NvZGU+IGlzIG51bGw8L2xpPgotCSAqIDwvdWw+Ci0JICogCi0JICogQHBhcmFtIHJlZ2lzdHJ5IFRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwgdG8gY2xvbmUgb3IKLQkgKiByZWZlciB0byBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZ2l2ZW4gPGNvZGU+cmVnaXN0cnk8L2NvZGU+Ci0JICogaXMgYSBmdWxsIG1vZGVsIG9yIGEgcmVmZXJlbmNlLgotCSAqIEByZXR1cm4gQSBuZXcgPGNvZGU+UmVnaXN0cnk8L2NvZGU+LCBndWFyYW50ZWVkIHRvIGJlIGEgcmVmZXJlbmNlLgotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBuZXdSZWdpc3RyeVJlZmVyZW5jZSAoIFJlZ2lzdHJ5IHJlZ2lzdHJ5ICkKLQl7Ci0JCVN0cmluZyBpZCA9IHJlZ2lzdHJ5LmdldElkKCk7Ci0JCVN0cmluZyByZWYgPSByZWdpc3RyeS5nZXRSZWYoKTsKLQkJUmVnaXN0cnkgcmVnaXN0cnlSZWYgPSBuZXdSZWdpc3RyeSgpOwotCQlpZiAocmVmID09IG51bGwgfHwgIiIuZXF1YWxzKHJlZikpCi0JCXsKLQkJCXJlZ2lzdHJ5UmVmLnNldFJlZihpZCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlyZWdpc3RyeVJlZi5zZXRSZWYocmVmKTsKLQkJCXJlZ2lzdHJ5UmVmLnNldExvY2F0aW9uKHJlZ2lzdHJ5LmdldExvY2F0aW9uKCkpOwotCQl9Ci0JCXJldHVybiByZWdpc3RyeVJlZjsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgbmV3IFRheG9ub215IG1vZGVsIGNvbmZpZ3VyZWQKLQkgKiB0byByZWZlcmVuY2UgdGhlIGdpdmVuIDxjb2RlPnRheG9ub215PC9jb2RlPi4KLQkgKiA8cD4KLQkgKiBUaGUgZ2l2ZW4gPGNvZGU+dGF4b25vbXk8L2NvZGU+IGNhbiBiZSBlaXRoZXIgYSBmdWxsCi0JICogbW9kZWwgYXMgc2lnbmlmaWVkIGJ5IGhhdmluZyBhIG5vbi1udWxsLCBub24tZW1wdHkKLQkgKiBpZGVudGlmaWVyICg8Y29kZT50YXhvbm9teS5nZXRJZCgpPC9jb2RlPiksIG9yIGEKLQkgKiByZWZlcmVuY2UgaXRzZWxmIGFzIHNpZ25pZmllZCBieSBoYXZpbmcgYSBub24tbnVsbCwKLQkgKiBub24tZW1wdHkgcmVmZXJlbmNlICg8Y29kZT50YXhvbm9teS5nZXRSZWYoKTwvY29kZT4pLgotCSAqIDxwPgotCSAqIElmIHRoZSBnaXZlbiA8Y29kZT50YXhvbm9teTwvY29kZT4gaXMgYSBmdWxsIG1vZGVsLAotCSAqIHRoZW4gYSBuZXcgPGNvZGU+VGF4b25vbXk8L2NvZGU+IGlzIHJldHVybmVkIHN1Y2ggdGhhdAotCSAqIDx1bD4KLQkgKiA8bGk+PGNvZGU+Z2V0UmVmKCk8L2NvZGU+IGVxdWFscyA8Y29kZT50YXhvbm9teS5nZXRJZCgpPC9jb2RlPjwvbGk+Ci0JICogPGxpPjxjb2RlPmdldExvY2F0aW9uKCk8L2NvZGU+IGlzIG51bGw8L2xpPgotCSAqIDxsaT48Y29kZT5nZXRJZCgpPC9jb2RlPiBpcyBudWxsPC9saT4KLQkgKiA8L3VsPgotCSAqIDxwPgotCSAqIEluIHRoZSBnaXZlbiA8Y29kZT50YXhvbm9teTwvY29kZT4gaXMgaXRzZWxmIGEgcmVmZXJlbmNlLAotCSAqIHRoZW4gYSBuZXcgPGNvZGU+VGF4b25vbXk8L2NvZGU+IGlzIHJldHVybmVkIHN1Y2ggdGhhdAotCSAqIDx1bD4KLQkgKiA8bGk+PGNvZGU+Z2V0UmVmKCk8L2NvZGU+IGVxdWFscyA8Y29kZT50YXhvbm9teS5nZXRSZWYoKTwvY29kZT48L2xpPgotCSAqIDxsaT48Y29kZT5nZXRMb2NhdGlvbigpPC9jb2RlPiBlcXVhbHMgPGNvZGU+dGF4b25vbXkuZ2V0TG9jYXRpb24oKTwvY29kZT48L2xpPgotCSAqIDxsaT48Y29kZT5nZXRJZCgpPC9jb2RlPiBpcyBudWxsPC9saT4KLQkgKiA8L3VsPgotCSAqIAotCSAqIEBwYXJhbSB0YXhvbm9teSBUaGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIHRvIGNsb25lIG9yCi0JICogcmVmZXIgdG8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGdpdmVuIDxjb2RlPnRheG9ub215PC9jb2RlPgotCSAqIGlzIGEgZnVsbCBtb2RlbCBvciBhIHJlZmVyZW5jZS4KLQkgKiBAcmV0dXJuIEEgbmV3IDxjb2RlPlRheG9ub215PC9jb2RlPiwgZ3VhcmFudGVlZCB0byBiZSBhIHJlZmVyZW5jZS4KLQkgKi8KLQlwdWJsaWMgVGF4b25vbXkgbmV3VGF4b25vbXlSZWZlcmVuY2UgKCBUYXhvbm9teSB0YXhvbm9teSApCi0JewotCQlTdHJpbmcgaWQgPSB0YXhvbm9teS5nZXRJZCgpOwotCQlTdHJpbmcgcmVmID0gdGF4b25vbXkuZ2V0UmVmKCk7Ci0JCVRheG9ub215IHRheG9ub215UmVmID0gbmV3VGF4b25vbXkoKTsKLQkJaWYgKHJlZiA9PSBudWxsIHx8ICIiLmVxdWFscyhyZWYpKQotCQl7Ci0JCQl0YXhvbm9teVJlZi5zZXRSZWYoaWQpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJdGF4b25vbXlSZWYuc2V0UmVmKHJlZik7Ci0JCQl0YXhvbm9teVJlZi5zZXRMb2NhdGlvbih0YXhvbm9teS5nZXRMb2NhdGlvbigpKTsKLQkJfQotCQlyZXR1cm4gdGF4b25vbXlSZWY7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBVUkwgaWRlbnRpZmllcwotCSAqIGEgcmVzb3VyY2UgdGhhdCBleGlzdHMgYW5kIGlzIGEgZmlsZS4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgb2YgdGhlIHJlc291cmNlIHRvIGNoZWNrIGZvciBleGlzdGVuY2UuCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBVUkwgcmVzb3VyY2UgZXhpc3RzIGFuZCBpcyBhIGZpbGUsCi0JICogb3IgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXN0YXRpYyBib29sZWFuIGV4aXN0cyAoIFVSTCB1cmwgKQotCXsKLQkJaWYgKCJwbGF0Zm9ybSIuZXF1YWxzKHVybC5nZXRQcm90b2NvbCgpKSkKLQkJewotCQkJU3RyaW5nIHVybEZpbGUgPSB1cmwuZ2V0RmlsZSgpLnRyaW0oKTsKLQkJCUlQYXRoIHBhdGggPSBuZXcgUGF0aCh1cmxGaWxlKS5yZW1vdmVGaXJzdFNlZ21lbnRzKDEpOwotCQkJaWYgKHBhdGguc2VnbWVudENvdW50KCkgPD0gMSkKLQkJCXsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQlJUGF0aCBvc1BhdGggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCkuZ2V0TG9jYXRpb24oKTsKLQkJCWlmIChvc1BhdGggPT0gbnVsbCkKLQkJCXsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShvc1BhdGgudG9TdHJpbmcoKSk7Ci0JCQlyZXR1cm4gKGZpbGUuZXhpc3RzKCkgJiYgIWZpbGUuaXNEaXJlY3RvcnkoKSk7Ci0JCX0KLQkJZWxzZSBpZiAoImZpbGUiLmVxdWFscyh1cmwuZ2V0UHJvdG9jb2woKSkpCi0JCXsKLQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKHVybC5nZXRGaWxlKCkudHJpbSgpKTsKLQkJCXJldHVybiAoZmlsZS5leGlzdHMoKSAmJiAhZmlsZS5pc0RpcmVjdG9yeSgpKTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogT3BlbnMgYW4gPGNvZGU+T3V0cHV0U3RyZWFtPC9jb2RlPiBmb3Igd3JpdGluZyB0bwotCSAqIHRoZSBnaXZlbiA8Y29kZT51cmw8L2NvZGU+LgotCSAqIEBwYXJhbSB1cmwgVGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UgdG8gd3JpdGUuCi0JICogQHJldHVybiBBbiBPdXB0dXRTdHJlYW0gdG8gd3JpdGUgdG8uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiB0aGUgc3RyZWFtIGNvdWxkIG5vdCBiZSBvcGVuZWQuCi0JICovCi0Jc3RhdGljIE91dHB1dFN0cmVhbSBnZXRPdXRwdXRTdHJlYW1Gb3IgKCBVUkwgdXJsICkgdGhyb3dzIElPRXhjZXB0aW9uCi0JewotCQlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbnVsbDsKLQkJaWYgKCJwbGF0Zm9ybSIuZXF1YWxzKHVybC5nZXRQcm90b2NvbCgpKSkKLQkJewotCQkJU3RyaW5nIHVybEZpbGUgPSB1cmwuZ2V0RmlsZSgpLnRyaW0oKTsKLQkJCUlQYXRoIHBhdGggPSBuZXcgUGF0aCh1cmxGaWxlKS5yZW1vdmVGaXJzdFNlZ21lbnRzKDEpOwotCQkJaWYgKHBhdGguc2VnbWVudENvdW50KCkgPD0gMSkKLQkJCXsKLQkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlRoZSBQbGF0Zm9ybSBVUkwgezB9IGlzIG5vdCBib3VuZCB0byBhIGxvY2FsLCB3cml0YWJsZSBmaWxlLiIpOwotCQkJfQotCQkJSVBhdGggb3NQYXRoID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpLmdldExvY2F0aW9uKCk7Ci0JCQlpZiAob3NQYXRoID09IG51bGwpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJUaGUgUGxhdGZvcm0gVVJMIHswfSBpcyBub3QgYm91bmQgdG8gYSBsb2NhbCwgd3JpdGFibGUgZmlsZS4iKTsKLQkJCX0KLQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKG9zUGF0aC50b1N0cmluZygpKTsKLQkJCWlmIChmaWxlLmlzRGlyZWN0b3J5KCkpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJUaGUgUGxhdGZvcm0gVVJMIHswfSBpcyBib3VuZCB0byBhIGZvbGRlci4iKTsKLQkJCX0KLQkJCW91dHB1dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOwotCQl9Ci0JCWVsc2UgaWYgKCJmaWxlIi5lcXVhbHModXJsLmdldFByb3RvY29sKCkpKQotCQl7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZSh1cmwuZ2V0RmlsZSgpLnRyaW0oKSk7Ci0JCQlpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKQotCQkJewotCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigiVGhlIEZpbGUgVVJMIHswfSBpcyBib3VuZCB0byBhIGRpcmVjdG9yeS4iKTsKLQkJCX0KLQkJCW91dHB1dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0JCQljb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwotCQkJb3V0cHV0U3RyZWFtID0gY29ubmVjdGlvbi5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJfQotCQlyZXR1cm4gb3V0cHV0U3RyZWFtOwotCX0KLQotCS8qKgotCSAqIE9wZW5zIGFuIDxjb2RlPklucHV0U3RyZWFtPC9jb2RlPiBmb3IgcmVhZGluZyBmcm9tCi0JICogdGhlIGdpdmVuIDxjb2RlPnVybDwvY29kZT4uCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIG9mIHRoZSByZXNvdXJjZSB0byByZWFkLgotCSAqIEByZXR1cm4gQW4gSW5wdXRTdHJlYW0gdG8gcmVhZCBmcm9tLgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgdGhlIHN0cmVhbSBjb3VsZCBub3QgYmUgb3BlbmVkLgotCSAqLwotCXN0YXRpYyBJbnB1dFN0cmVhbSBnZXRJbnB1dFN0cmVhbUZvciAoIFVSTCB1cmwgKSB0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCXJldHVybiB1cmwub3BlblN0cmVhbSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvVURESVJlZ2lzdHJ5U2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9VRERJUmVnaXN0cnlTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViM2NhMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9VRERJUmVnaXN0cnlTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotCi0vKioKLSAqIFVERElSZWdpc3RyeVNlcnZpY2UgaXMgYW4gYWRqdW5jdCB0byA8Y29kZT5SZWdpc3RyeVNlcnZpY2U8L2NvZGU+LgotICogQ2FsbCB0aGUgPGNvZGU+UmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk8L2NvZGU+IHN0YXRpYyBtZXRob2QgdG8KLSAqIGdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gKiA8cD4KLSAqIFVERElSZWdpc3RyeVNlcnZpY2UgcHJvdmlkZXMgdXRpbGl0eSBtZXRob2RzIHRvIGVhc2UgdGhlIGNyZWF0aW9uCi0gKiBvZiBuZXcgPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPiBtb2RlbHMgYW5kIHRoZSBtYW5hZ2VtZW50IG9mIHRoZWlyCi0gKiByZWxhdGlvbnNoaXBzIHRvIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMuCi0gKiA8cD4KLSAqIFV0aWxpdHkgbWV0aG9kcyBmb3IgbG9hZGluZyBhbmQgc2F2aW5nIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBhbmQKLSAqIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgYXJlIG9uIDxjb2RlPlJlZ2lzdHJ5U2VydmljZTwvY29kZT4uCi0gKiBNZXRob2RzIGZvciBtYW5hZ2luZyBhbiBpbmRleGVkIGZhbWlseSBvZiA8Y29kZT5SZWdpc3RyeTwvY29kZT4gYW5kCi0gKiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIGFyZSBvbiA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPi4KLSAqIDxwPgotICogQSB0eXBpY2FsIHVzZSBvZiA8Y29kZT5VRERJUmVnaXN0cnlTZXJ2aWNlPC9jb2RlPiBhbmQgaXRzIHJlbGF0ZWQKLSAqIGNsYXNzZXMgdG8gY3JlYXRlIGFuZCBzYXZlIGEgbmV3IGZhbWlseSBvZiBtb2RlbHMgaXM6Ci0gKiA8YmxvY2txdW90ZT4KLSAqIDxjb2RlPgotICogUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotICogVURESVJlZ2lzdHJ5U2VydmljZSB1ZGRpUmVnaXN0cnlTZXJ2aWNlID0gVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotICogVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSA9IHVkZGlSZWdpc3RyeVNlcnZpY2UubmV3VURESVJlZ2lzdHJ5KCk7Ci0gKiAvLyBidWlsZCB1cCB5b3VyIHJlZ2lzdHJ5IG1vZGVsIGhlcmUKLSAqIFRheG9ub215IHRheG9ub215ID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215KCk7Ci0gKiAvLyBidWlsZCB1cCB5b3VyIHRheG9ub215IG1vZGVsIGhlcmUKLSAqIHVkZGlSZWdpc3RyeVNlcnZpY2UuYWRkVGF4b25vbXkodWRkaVJlZ2lzdHJ5LHRheG9ub215KTsKLSAqIElSZWdpc3RyeU1hbmFnZXIgcmVnaXN0cnlNYW5hZ2VyID0gcmVnaXN0cnlTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLSAqIHJlZ2lzdHJ5TWFuYWdlci5zYXZlUmVnaXN0cnkodWRkaVJlZ2lzdHJ5KTsKLSAqIDwvY29kZT4KLSAqIDwvYmxvY2txdW90ZT4KLSAqIEBzZWUgI2luc3RhbmNlKCkKLSAqIEBzZWUgUmVnaXN0cnlTZXJ2aWNlCi0gKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIKLSAqIEBzZWUgVURESVJlZ2lzdHJ5Ci0gKiBAc2VlIFRheG9ub215Ci0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKi8KLXB1YmxpYyBjbGFzcyBVRERJUmVnaXN0cnlTZXJ2aWNlCi17Ci0JcHJpdmF0ZSBzdGF0aWMgVURESVJlZ2lzdHJ5U2VydmljZSBpbnN0YW5jZV87Ci0KLQkvKioKLQkgKiBBIFVERElSZWdpc3RyeVNlcnZpY2UgY2Fubm90IGJlIGRpcmVjdGx5IGNvbnN0cnVjdGVkLgotCSAqIFVzZSBAbGluayAjaW5zdGFuY2UoKSB0byBnZXQgdGhlIHNpbmdsZXRvbiBvZiB0aGlzIGNsYXNzLgotCSAqLwotCXByaXZhdGUgVURESVJlZ2lzdHJ5U2VydmljZSAoKQotCXsKLQkJVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0Q2xhc3MoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gb2YgdGhpcyBjbGFzcy4KLQkgKiBAcmV0dXJuIFRoZSBzaW5nbGV0b24gb2YgdGhpcyBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFVERElSZWdpc3RyeVNlcnZpY2UgaW5zdGFuY2UgKCkKLQl7Ci0JCWlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLQkJewotCQkJaW5zdGFuY2VfID0gbmV3IFVERElSZWdpc3RyeVNlcnZpY2UoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQkKLQkvKioKLQkgKiBBZGRzIGEgcmVmZXJlbmNlIGZyb20gdGhlIGdpdmVuIDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4KLQkgKiB0byB0aGUgZ2l2ZW4gPGNvZGU+VGF4b25vbXk8L2NvZGU+IG9iamVjdC4KLQkgKiBAcGFyYW0gdWRkaVJlZ2lzdHJ5IFRoZSA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+IHRvIHdoaWNoIHRoZSByZWZlcmVuY2UKLQkgKiB0byB0aGUgZ2l2ZW4gPGNvZGU+VGF4b25vbXk8L2NvZGU+IG9iamVjdCBzaG91bGQgYmUgYWRkZWQuCi0JICogQHBhcmFtIHRheG9ub215IFRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gb2JqZWN0IHRvIGFkZC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb3ZlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFRheG9ub215ICggVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSwgVGF4b25vbXkgdGF4b25vbXkgKQotCXsKLQkJYWRkVGF4b25vbWllcyh1ZGRpUmVnaXN0cnksbmV3IFRheG9ub215W10ge3RheG9ub215fSk7Ci0JfQotCi0JLyoqCi0JICogQWRkcyB0aGUgZ2l2ZW4gPGNvZGU+VGF4b25vbXk8L2NvZGU+IG9iamVjdHMgYXMtaXMKLQkgKiAod2hldGhlciB0aGV5IGFyZSByZWZlcmVuY2VzIG9yIGZ1bGwgbW9kZWxzKQotCSAqIHRvIHRoZSBnaXZlbiA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+LgotCSAqIEBwYXJhbSB1ZGRpUmVnaXN0cnkgVGhlIDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4gdG8gd2hpY2gKLQkgKiB0aGUgZ2l2ZW4gPGNvZGU+VGF4b25vbXk8L2NvZGU+IG9iamVjdHMgc2hvdWxkIGJlIGFkZGVkLgotCSAqIEBwYXJhbSB0YXhvbm9taWVzIFRoZSBhcnJheSBvZiA8Y29kZT5UYXhvbm9teTwvY29kZT4gb2JqZWN0cyB0byBhZGQuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW92ZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUYXhvbm9taWVzICggVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSwgVGF4b25vbXlbXSB0YXhvbm9taWVzICkKLQl7Ci0JCWlmICh0YXhvbm9taWVzLmxlbmd0aCA+IDApCi0JCXsKLQkJCVRheG9ub21pZXMgdGF4b25vbXlTZXQgPSB1ZGRpUmVnaXN0cnkuZ2V0VGF4b25vbWllcygpOwotCQkJaWYgKHRheG9ub215U2V0ID09IG51bGwpCi0JCQl7Ci0JCQkJdGF4b25vbXlTZXQgPSBVRERJUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUYXhvbm9taWVzKCk7Ci0JCQkJdWRkaVJlZ2lzdHJ5LnNldFRheG9ub21pZXModGF4b25vbXlTZXQpOwotCQkJfQotCQkJRUxpc3QgbGlzdCA9IHRheG9ub215U2V0LmdldFRheG9ub215KCk7Ci0JCQlmb3IgKGludCBpPTA7IGk8dGF4b25vbWllcy5sZW5ndGg7IGkrKykKLQkJCXsKLQkJCQlsaXN0LmFkZCh0YXhvbm9taWVzW2ldKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFVSSSBpZGVudGlmaWVycyB0byA8Y29kZT5UYXhvbm9teTwvY29kZT4KLQkgKiBtb2RlbHMgY29udGFpbmVkIGluIG9yIHJlZmVyZW5jZWQgYnkgdGhlIDxjb2RlPnVkZGlSZWdpc3RyeTwvY29kZT4uCi0JICogUGFzc2luZyB0aGUgcmVzdWx0IHRvIDxjb2RlPklSZWdpc3RyeU1hbmFnZXIubG9hZFRheG9ub21pZXMoKTwvY29kZT4KLQkgKiBpcyBhIGhhbmR5IHdheSB0byByZXNvbHZlIGFuZCBsb2FkIHRoZSBmdWxsIHRheG9ub215IG1vZGVscyB1c2VkCi0JICogYnkgdGhlIFVEREkgcmVnaXN0cnkuCi0JICogCi0JICogQHJldHVybiBBbiBhcnJheSBvZiBVUkkgaWRlbnRpZmllcnMsIHBvc3NpYmx5IGVtcHR5IGJ1dCBuZXZlciBudWxsLAotCSAqIHRvIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMuCi0JICogQHNlZSBUYXhvbm9teQotCSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlciNsb2FkVGF4b25vbWllcyhTdHJpbmdbXSkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0VGF4b25vbXlVUklzICggVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSApCi0JewotCQlUYXhvbm9taWVzIHRheG9ub21pZXMgPSB1ZGRpUmVnaXN0cnkuZ2V0VGF4b25vbWllcygpOwotCQlpZiAodGF4b25vbWllcyA9PSBudWxsKSByZXR1cm4gbmV3IFN0cmluZ1swXTsKLQkJRUxpc3QgdGF4b25vbXlMaXN0ID0gdGF4b25vbWllcy5nZXRUYXhvbm9teSgpOwotCQlMaXN0IHRheG9ub215VVJJcyA9IG5ldyBBcnJheUxpc3QodGF4b25vbXlMaXN0LnNpemUoKSk7Ci0JCUl0ZXJhdG9yIGkgPSB0YXhvbm9teUxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlUYXhvbm9teSB0YXhvbm9teSA9IChUYXhvbm9teSlpLm5leHQoKTsKLQkJCWlmICh0YXhvbm9teS5nZXRJZCgpICE9IG51bGwpCi0JCQl7Ci0JCQkJdGF4b25vbXlVUklzLmFkZCh0YXhvbm9teS5nZXRJZCgpKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHRheG9ub215LmdldFJlZigpICE9IG51bGwpCi0JCQl7Ci0JCQkJdGF4b25vbXlVUklzLmFkZCh0YXhvbm9teS5nZXRSZWYoKSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChTdHJpbmdbXSl0YXhvbm9teVVSSXMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGZ1bGwgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscwotCSAqIGNvbnRhaW5lZCBpbiBvciByZWZlcmVuY2VkIGJ5IHRoZSBnaXZlbiA8Y29kZT51ZGRpUmVnaXN0cnk8L2NvZGU+LgotCSAqIElubGluZSB0YXhvbm9taWVzIGFyZSByZXR1cm5lZCBhcy1pcy4gUmVmZXJlbmNlcyB0byB0YXhvbm9taWVzIGFyZQotCSAqIHJlc29sdmVkIGJ5IGZvbGxvd2luZyB0aGUgbG9jYXRpb25zIG9mIHRoZSByZWZlcmVuY2VzIGFuZCBsb2FkaW5nCi0JICogdGhlIG1vZGVscyBhdCB0aGUgbG9jYXRpb24gVVJMcy4KLQkgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwsIGJ1dCBtYXkgcmV0dXJuIGFuIGVtcHR5IGFycmF5LgotCSAqIEBwYXJhbSByZWdpc3RyeSBUaGUgPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPiB3aG9zZQotCSAqIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgdG8gZmluZC4KLQkgKiBAcmV0dXJuIFRoZSBhcnJheSwgbmV2ZXIgbnVsbCBidXQgcG9zc2libHkgbGVuZ3RoIHplcm8sCi0JICogb2YgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb3ZlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teQotCSAqIEBzZWUgI2dldFRheG9ub215VVJJcyhVRERJUmVnaXN0cnkpCi0JICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyI2xvYWRUYXhvbm9taWVzKFN0cmluZ1tdKQotCSAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIHN1ZmZlcnMgZnJvbSBhIGxhY2sgb2YgYXdhcmVuZXNzIG9mIHRoZQotCSAqIEluZGV4IFhNTCBkb2N1bWVudCB0aGF0IGlzIG9mdGVuIHJlc3BvbnNpYmxlIGZvciBtYXBwaW5nIFVSSXMKLQkgKiB0byBsb2NhdGlvbiBVUkxzLiBVc2UKLQkgKiA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyLmxvYWRUYXhvbm9taWVzKGdldFRheG9ub215VVJJcyh1ZGRpUmVnaXN0cnkpKTwvY29kZT4KLQkgKiBpbnN0ZWFkLgotCSAqLwotCXB1YmxpYyBUYXhvbm9teVtdIGdldFRheG9ub21pZXMgKCBVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5ICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkJVGF4b25vbWllcyB0YXhvbm9taWVzID0gdWRkaVJlZ2lzdHJ5LmdldFRheG9ub21pZXMoKTsKLQkJaWYgKHRheG9ub21pZXMgPT0gbnVsbCkgcmV0dXJuIG5ldyBUYXhvbm9teVswXTsKLQkJRUxpc3QgbGl0ZXJhbFRheG9ub215TGlzdCA9IHRheG9ub21pZXMuZ2V0VGF4b25vbXkoKTsKLQkJTGlzdCByZXNvbHZlZFRheG9ub215TGlzdCA9IG5ldyBBcnJheUxpc3QobGl0ZXJhbFRheG9ub215TGlzdC5zaXplKCkpOwotCQlJdGVyYXRvciBpID0gbGl0ZXJhbFRheG9ub215TGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCXsKLQkJCVRheG9ub215IGxpdGVyYWxUYXhvbm9teSA9IChUYXhvbm9teSlpLm5leHQoKTsKLQkJCWlmIChsaXRlcmFsVGF4b25vbXkuZ2V0SWQoKSAhPSBudWxsKQotCQkJewotCQkJCXJlc29sdmVkVGF4b25vbXlMaXN0LmFkZChsaXRlcmFsVGF4b25vbXkpOwotCQkJfQotCQkJZWxzZSBpZiAobGl0ZXJhbFRheG9ub215LmdldExvY2F0aW9uKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCVRheG9ub215IHJlc29sdmVkVGF4b25vbXkgPSByZWdpc3RyeVNlcnZpY2UubG9hZFRheG9ub215KG5ldyBVUkwobGl0ZXJhbFRheG9ub215LmdldExvY2F0aW9uKCkpKTsKLQkJCQkJcmVzb2x2ZWRUYXhvbm9teUxpc3QuYWRkKHJlc29sdmVkVGF4b25vbXkpOwotCQkJCX0KLQkJCQljYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQkvL1RPRE86IE5lZWQgbWVzc2FnZSB0ZXh0IGhlcmUKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBXU1BsdWdpbi5JRCwgMCwgIiIsIGUpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChUYXhvbm9teVtdKXJlc29sdmVkVGF4b25vbXlMaXN0LnRvQXJyYXkobmV3IFRheG9ub215WzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+IG1vZGVsLgotCSAqIEByZXR1cm4gQSBuZXcgPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCwgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5IG5ld1VERElSZWdpc3RyeSAoKQotCXsKLQkJcmV0dXJuIFVERElSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVVERElSZWdpc3RyeSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvVURESVRheG9ub215RmluZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1VERElUYXhvbm9teUZpbmRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDRjZTg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvVURESVRheG9ub215RmluZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLQotLyoqCi0gKiBUaGlzIDxjb2RlPklUYXhvbm9teUZpbmRlcjwvY29kZT4gZm9yIFVEREkgcmVnaXN0cmllcwotICogcmV0dXJucyBhbiBhcnJheSBvZiA8Y29kZT5UYXhvbm9teTwvY29kZT4KLSAqIG1vZGVscyB1c2VkIChzdXBwb3J0ZWQgYnkpIHRoZSByZWdpc3RyeS4KLSAqIEBhdXRob3IgZ2lsYmVydGFAY2EuaWJtLmNvbQotICogQHNlZSBVRERJUmVnaXN0cnkKLSAqLwotcHVibGljIGNsYXNzIFVERElUYXhvbm9teUZpbmRlciBpbXBsZW1lbnRzIElUYXhvbm9teUZpbmRlcgotewotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JVGF4b25vbXlGaW5kZXIjdGF4b25vbWllcyhvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5KQotCSAqLwotCXB1YmxpYyBUYXhvbm9teVtdIHRheG9ub21pZXMgKCBSZWdpc3RyeSByZWdpc3RyeSApCi0JewotCQlpZiAoIHJlZ2lzdHJ5IGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5ICkKLQkJewotCQkJVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSA9IChVRERJUmVnaXN0cnkpcmVnaXN0cnk7CSAgCi0JCQlyZXR1cm4gKFRheG9ub215W10pdWRkaVJlZ2lzdHJ5LmdldFRheG9ub21pZXMoKS5nZXRUYXhvbm9teSgpLnRvQXJyYXkobmV3IFRheG9ub215WzBdKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3V0aWwvVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3V0aWwvVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYzgyYjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91dGlsL1VuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgyNSAgIDEzNTU3MCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgU2VydmljZSBpbXBsZW1lbnRhdGlvbiBVUkwgbm90IGRpc3BsYXllZCBwcm9wZXJseSBvbiBmaXJzdCBwYWdlCi0gKiAyMDA3MDEyNSAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIHB1YmxpYyB1dGlsaXR5IG1ldGhvZCBmb3IgY29weWluZyBXU0RMIGZpbGVzIAotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDgwNDExICAgMjI2NzY3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIgZG9lcyBub3QgaGFuZGxlIHBhdGhzIHcvIHNwYWNlcyB0aGF0IGFyZSBlbmNvZGVkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci0KLS8qKgotICogPHA+QSB1dGlsaXR5IGNsYXNzIGZvciB0cmFuc2Zvcm1pbmcgYSBwYXRoIHRvIGFuZCBmcm9tIHRoZSBmb2xsb3dpbmcgZm9ybWF0czo8L3A+Ci0gKiA8dWw+Ci0gKiA8bGk+QW4gYWJzb2x1dGUgZWNsaXBzZSBwYXRoIChpLmUuIHN0YXJ0cyB3aXRoIC9Qcm9qZWN0TmFtZS8uLi4pPC9saT4KLSAqIDxsaT5BbiBhYnNvbHV0ZSBmaWxlc3lzdGVtIFVSSSBwYXRoIChpLmUuIGZpbGU6L0M6L015V29ya3NwYWNlL1Byb2plY3ROYW1lLy4uLik8L2xpPgotICogPGxpPkEgcGxhdGZvcm0gVVJJIHBhdGggKGkuZS4gcGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3ROYW1lLy4uLik8L2xpPiAKLSAqIDwvdWw+IAotICogPHA+SW4gYWxsIGNhc2VzLCBpZiB0aGUgdHJhbnNmb3JtZXIgY291bGQgbm90IGNvbnZlcnQgdGhlIHBhdGgsIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZC48L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIgewotCQotCS8qKgotCSAqIFByZWZpeCBvZiBwbGF0Zm9ybSBVUklzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMQVRGT1JNX1BSRUZJWCA9ICJwbGF0Zm9ybTovcmVzb3VyY2UvIjsKLQkKLQkvKioKLQkgKiBQcmVmaXggb2YgZmlsZXN5c3RlbSBVUklzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX1BSRUZJWCA9ICJmaWxlOi8iOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFBST1RPQ09MX01BUktFUiA9ICI6IjsKLQlwcml2YXRlIHN0YXRpYyBjaGFyIFBBVEhfU0VQQVJBVE9SICAgID0gJy8nOwotIAkKLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGEgVVJJIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gcHJlZml4LiAgVGhpcyBtZXRob2QgaXMgY2FzZS1pbnNlbnNpdGl2ZS4gCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIHN0cmluZyB0byBjaGVjay4KLQkgKiBAcGFyYW0gcHJlZml4IFRoZSBwcmVmaXguCi0JICogQHJldHVybiB0cnVlIGlmZiBwcmVmaXggaXMgYSBzdHJpY3QgcHJlZml4IG9mIHRoZSBVUkkgc3RyaW5nIChpLmUuIHByZWZpeCAhPSB1cmkpLCBmYWxzZQotCSAqIGlzIHJldHVybmVkIG90aGVyd2lzZS4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUHJlZml4KFN0cmluZyB1cmksIFN0cmluZyBwcmVmaXgpIHsKLQkJaWYgKHByZWZpeC5sZW5ndGgoKSA+PSB1cmkubGVuZ3RoKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCQotCQlyZXR1cm4gdXJpLnN1YnN0cmluZygwLCBwcmVmaXgubGVuZ3RoKCkpLmVxdWFsc0lnbm9yZUNhc2UocHJlZml4KTsKLQl9Ci0KLQkvKioKLQkgKiBUcmFuc2Zvcm0gdGhlIGdpdmVuIHBhdGggdG8gYW4gZWNsaXBzZSBwYXRoLiAgSWYgdGhlIGdpdmVuIHBhdGggaXMgYSBmaWxlc3lzdGVtIFVSSSwgaXQgbXVzdCBtYXAgdG8KLQkgKiBhIHJlYWwgcmVzb3VyY2UgaW4gdGhlIHdvcmtzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIFRoZSBwYXRoIHRvIHRyYW5zZm9ybS4KLQkgKiBAcmV0dXJuIFJldHVybnMgYW4gZWNsaXBzZSBwYXRoIGVxdWl2YWxlbnQgb2YgdGhlIGdpdmVuIHBhdGguCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdG9QYXRoKFN0cmluZyBzdHIpIHsKLQkJCi0JCWlmIChzdHIgPT0gbnVsbCB8fCBzdHIubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBzdHI7Ci0JCQotCQlpZiAoaXNQcmVmaXgoc3RyLCBQTEFURk9STV9QUkVGSVgpKSB7Ci0JCQlzdHIgPSBzdHIuc3Vic3RyaW5nKFBMQVRGT1JNX1BSRUZJWC5sZW5ndGgoKSAtIDEpOwotCQl9Ci0JCWVsc2UgaWYgKGlzUHJlZml4KHN0ciwgTE9DQVRJT05fUFJFRklYKSkgewotCQkJSUZpbGUgZmlsZSA9IHRvRmlsZShzdHIpOwotCQkJaWYgKGZpbGUgIT0gbnVsbCkKLQkJCQlzdHIgPSBmaWxlLmdldEZ1bGxQYXRoKCkubWFrZUFic29sdXRlKCkudG9TdHJpbmcoKTsKLQkJfQotCQkKLQkJcmV0dXJuIHN0cjsKLQl9Ci0KLQkvKioKLQkgKiBUcmFuc2Zvcm0gdGhlIGdpdmVuIHBhdGggdG8gYSBwbGF0Zm9ybSBVUkkgcGF0aC4gIElmIHRoZSBnaXZlbiBwYXRoIGlzIGEgZmlsZXN5c3RlbSBVUkksIGl0IG11c3QgbWFwIHRvCi0JICogYSByZWFsIHJlc291cmNlIGluIHRoZSB3b3Jrc3BhY2UuCi0JICogCi0JICogQHBhcmFtIHN0ciBUaGUgcGF0aCB0byB0cmFuc2Zvcm0uCi0JICogQHJldHVybiBSZXR1cm5zIGEgcGxhdGZvcm0gVVJJIHBhdGggZXF1aXZhbGVudCBvZiB0aGUgZ2l2ZW4gcGF0aC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB0b1BsYXRmb3JtUGF0aChTdHJpbmcgc3RyKSB7Ci0KLQkJaWYgKHN0ciA9PSBudWxsIHx8IHN0ci5sZW5ndGgoKSA9PSAwKQotCQkJcmV0dXJuIHN0cjsJCQotCQkKLQkJaWYgKGlzUHJlZml4KHN0ciwgTE9DQVRJT05fUFJFRklYKSkgewotCQkJSUZpbGUgZmlsZSA9IHRvRmlsZShzdHIpOwotCQkJaWYgKGZpbGUgIT0gbnVsbCkKLQkJCQlzdHIgPSBQTEFURk9STV9QUkVGSVggKyBmaWxlLmdldEZ1bGxQYXRoKCkubWFrZVJlbGF0aXZlKCk7Ci0JCX0JCQkKLQkJZWxzZSBpZiAoc3RyLmluZGV4T2YoUFJPVE9DT0xfTUFSS0VSKSA9PSAtMSkgewotCQkJaWYgKHN0ci5jaGFyQXQoMCkgPT0gUEFUSF9TRVBBUkFUT1IpCi0JCQkJc3RyID0gUExBVEZPUk1fUFJFRklYICsgc3RyLnN1YnN0cmluZygxKTsKLQkJCWVsc2UKLQkJCQlzdHIgPSBQTEFURk9STV9QUkVGSVggKyBzdHI7Ci0JCX0KLQkJCi0JCXJldHVybiBzdHI7Ci0JfQotCQotCS8qKgotCSAqIFRyYW5zZm9ybSB0aGUgZ2l2ZW4gcGF0aCB0byBhIGZpbGVzeXN0ZW0gVVJJIHBhdGguICBUaGUgcGF0aCBtdXN0IGJlIGEgdmFsaWQKLQkgKiBlY2xpcHNlIHJlc291cmNlLgotCSAqIAotCSAqIEBwYXJhbSBzdHIgVGhlIHBhdGggdG8gdHJhbnNmb3JtLgotCSAqIEByZXR1cm4gUmV0dXJucyBhIGZpbGVzeXN0ZW0gVVJJIHBhdGggZXF1aXZhbGVudCBvZiB0aGUgZ2l2ZW4gcGF0aC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB0b0xvY2F0aW9uKFN0cmluZyBzdHIpIHsKLQkJCi0JCWlmIChzdHIgPT0gbnVsbCB8fCBzdHIubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBzdHI7Ci0JCQotCQlTdHJpbmcgcyA9IHN0cjsKLQkJCi0JCWlmIChpc1ByZWZpeChzLCBQTEFURk9STV9QUkVGSVgpKQotCQkJcyA9IHRvUGF0aChzKTsKLQkJCi0JCWlmIChzLmluZGV4T2YoUFJPVE9DT0xfTUFSS0VSKSA9PSAtMSkgewkJCQotCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChzKSk7Ci0JCQlpZiAoZmlsZSAhPSBudWxsKQotCQkJCXN0ciA9IGZpbGUuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQl9Ci0JCQkJCi0JCXJldHVybiBzdHI7Ci0JfQkKLQkKLQkvKioKLQkgKiBUcmFuc2Zvcm0gdGhlIGdpdmVuIFVSSSB0byBhbiBJRmlsZS4gIFJldHVybnMgbnVsbCBpZiB0aGUgVVJJIGlzIG5vdCBpbiB0aGUgd29ya3NwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBzdHIgVGhlIFVSSSB0byB0cmFuc2Zvcm0uCi0JICogQHJldHVybiBSZXR1cm5zIElGaWxlCi0JICovCi0JcHVibGljIHN0YXRpYyBJRmlsZSB0b0ZpbGUoU3RyaW5nIHN0cikgewotCQkKLQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQotCQkvLyBsb2NhbCBmaWxlc3lzdGVtIHBhdGgKLQkJaWYgKGlzUHJlZml4KHN0ciwgTE9DQVRJT05fUFJFRklYKSkgewotCQkJc3RyID0gc3RyLnN1YnN0cmluZyhMT0NBVElPTl9QUkVGSVgubGVuZ3RoKCkpLnJlcGxhY2VBbGwoIiUyMCIsICIgIik7Ci0JCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlRm9yTG9jYXRpb24obmV3IFBhdGgoc3RyKSk7Ci0JCX0KLQkJZWxzZSB7CQotCQkJLy8gcGxhdGZvcm0gcGF0aAotCQkJaWYgKHN0ci5zdGFydHNXaXRoKFBMQVRGT1JNX1BSRUZJWCkpCi0JCQkJc3RyID0gc3RyLnN1YnN0cmluZyhQTEFURk9STV9QUkVGSVgubGVuZ3RoKCkpOwotCQkKLQkJCWlmIChzdHIuaW5kZXhPZihQUk9UT0NPTF9NQVJLRVIpID09IC0xKSB7CQkJCi0JCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChzdHIpKTsKLQkJCX0KLQkJfQotCQkJCQkJCQkKLQkJcmV0dXJuIGZpbGU7Ci0JfQkKLQkKLQkvKioKLQkgKiBUcmFuc2Zvcm0gdGhlIGdpdmVuIFVSSXMgdG8gYW4gSUZpbGVzLiAgCi0JICogSUZpbGUgc2V0IHRvIG51bGwgaWYgdGhlIFVSSSBpcyBub3QgaW4gdGhlIHdvcmtzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIFRoZSBVUklzIHRvIHRyYW5zZm9ybS4KLQkgKiBAcmV0dXJuIFJldHVybnMgSUZpbGVbXQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZpbGVbXSB0b0ZpbGVzKFN0cmluZ1tdIHVyaXMpIHsKLQkJCi0JCUlGaWxlW10gZmlsZXMgPSBudWxsOwotCQlpZiAodXJpcyAhPSBudWxsKSB7Ci0JCQlmaWxlcyA9IG5ldyBJRmlsZVt1cmlzLmxlbmd0aF07CQkKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdXJpcy5sZW5ndGg7IGkrKykgewotCQkJCVN0cmluZyB1cmkgPSB1cmlzW2ldOwotCQkJCWZpbGVzW2ldID0gVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLnRvRmlsZSh1cmkpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlczsKLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91dGlsL1dTRExDb3BpZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdXRpbC9XU0RMQ29waWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MTNlZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91dGlsL1dTRExDb3BpZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMjUgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcwotICogMjAwNzA0MDkgICAxODE2MzUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRExDb3BpZXIgdXRpbGl0eSBzaG91bGQgY3JlYXRlIHRhcmdldCBmb2xkZXIKLSAqIDIwMDcxMjA1ICAgMjExMjYyIGVyaWNkcEBjYS5pYm0uY29tIC0gRXJpYyBQZXRlcnMsIENvcHlXU0RMVHJlZUNvbW1hbmQgZmFpbHMgdG8gY29weSA/d3NkbAotICogMjAwODAzMjQgICAyMTU1NTIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRExDb3BpZXIgZXhwZWN0cyBub3QgZW5jb2RlZCBVUkkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFdyaXRlcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLklVUklTY2hlbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuU2ltcGxlVVJJRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5VUklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUVuY29kZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLldzdFdTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuTmV0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hRGlyZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRFNjaGVtYUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEUGFyc2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogPHA+VGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB0byBjb3B5IGEgV1NETCBmaWxlIGFuZCBpdHMgcmVsYXRpdmUgaW1wb3J0cwotICogKGJvdGggd3NkbDppbXBvcnQgYW5kIHhzZDppbXBvcnQpIHRvIGEgZm9sZGVyIGluIHRoZSBmaWxlc3lzdGVtLiAgVGhlIGNvZGUgd2lsbCBhbmFseXplCi0gKiB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgZG9lcyB0aGUgZm9sbG93aW5nOgotICogPG9sPgotICogICAgPGxpPmZpbmQgYWxsIGZpbGVzIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkIGFuZCB0YWcgdGhlbSBhcyBzdWNoLjwvbGk+Ci0gKiAgICA8bGk+ZmluZCB0aGUgY29tbW9uIHBhcmVudCBkaXJlY3Rvcnkgb2YgYWxsIHRoZSBmaWxlcyB0aGF0IGFyZSB0YWdnZWQ7IHRoaXMgaXMgdGhlIAotICogICAgcm9vdCBvZiB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZS48L2xpPgotICogPC9vbD4KLSAqIER1cmluZyB0aGUgY29weSwgdGhlIHJvb3Qgb2YgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaXMgYmUgbWFwcGVkIHRvIHRoZSAKLSAqIHNwZWNpZmllZCB0YXJnZXQgZm9sZGVyIGFuZCBhbGwgdGFnZ2VkIGZpbGVzIHdpbGwgYmUgZHVwbGljYXRlZCB1bmRlciBpdC48L3A+Ci0gKiAKLSAqIDxwPklmIHRoZSBXU0RMIHNvdXJjZSBhbmQgdGhlIHRhcmdldCBsb2NhdGlvbiBhcmUgdGhlIHNhbWUsIHRoaXMgdXRpbGl0eSBvbmx5IGd1YXJhbnRlZXMKLSAqIHRoYXQgdGhlIHN0YXJ0aW5nIFdTREwgZmlsZSBpcyAicmUtY29waWVkIiBvbnRvIGl0c2VsZiAoc2luY2UgdGhlIFdTREwgZGVmaW5pdGlvbiBjb3VsZCAKLSAqIGhhdmUgYmVlbiBhbHRlcmVkKS4gIE5vIGd1YXJhbnRlZSBpcyBtYWRlIGZvciB0aGUgb3RoZXIgZmlsZXMgdGhhdCB0aGUgV1NETCBmaWxlIGltcG9ydHMuPC9wPgotICogCi0gKiA8cD5Ob3RlIHRoYXQgV1NETENvcGllciBkb2VzIG5vdCBkbyBhIGRpcmVjdCBmaWxlIGNvcHkuICBUaGUgc291cmNlIGZpbGVzIGFyZSByZWFkIGludG8KLSAqIGEgbW9kZWwgYW5kIHRoZW4gd3JpdHRlbiBvdXQgdG8gdGhlIHRhcmdldCBmb2xkZXIsIGhlbmNlIHRoZSBvdXRwdXQgZmlsZSBtaWdodCBub3QgYmUKLSAqIHN5bnRhY3RpY2FsbHkgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgZmlsZSBidXQgdGhleSB3aWxsIGJlIHN0cnVjdHVyYWxseSBpZGVudGljYWwuPC9wPgotICogCi0gKiA8cD5TaW5jZSB0aGlzIHV0aWxpdHkgaW1wbGVtZW50cyBJV29ya3NwYWNlUnVubmFibGUsIGl0IGNhbiBiZSBydW4gYnkgdGhlIHdvcmtzcGFjZSBhcwotICogYW4gYXRvbWljIHdvcmtzcGFjZSBvcGVyYXRpb24uPC9wPgotICovCi1wdWJsaWMgY2xhc3MgV1NETENvcGllciBpbXBsZW1lbnRzIElXb3Jrc3BhY2VSdW5uYWJsZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNEID0gIi54c2QiOwotCQotCS8qKgotCSAqIEhlbHBlciBjbGFzcyBob2xkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlcyB3ZSBuZWVkIHRvIGNvcHkKLQkgKi8KLQlwcml2YXRlIGNsYXNzIFhNTE9iamVjdEluZm8gewotCSAgCQotCQlwdWJsaWMgSVBhdGggIHBhdGg7Ci0JICAJcHVibGljIE9iamVjdCBjb250ZW50OwotCSAgCSAgCQotCSAgCS8qKgotCSAgCSAqIENvbnN0cnVjdG9yLgotCSAgCSAqIAotCSAgCSAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZS4KLQkgIAkgKiBAcGFyYW0gY29udGVudCBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzb3VyY2UgZmlsZSAoZWl0aGVyIHdzZGwgb3IgeHNkKQotCSAgCSAqLwotCSAgCXB1YmxpYyBYTUxPYmplY3RJbmZvKElQYXRoIHBhdGgsIE9iamVjdCBjb250ZW50KSB7Ci0JICAJCXRoaXMucGF0aCAgICA9IHBhdGguc2V0RGV2aWNlKG51bGwpOyAvLyB3ZSB3YW50IGEgZGV2aWNlIGluZGVwZW5kZW50IHBhdGggIAkJCi0JICAJCXRoaXMuY29udGVudCA9IGNvbnRlbnQ7Ci0JICAJfQotCX0JICAKLQkKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcgk9IG51bGw7CQkJCQkvLyBwYXJzZXIgdG8gcGFyc2UgdGhlIHdzZGwgYW5kIHhzZCBmaWxlcwotCQotCXByaXZhdGUgVVJJIHNvdXJjZVVSSQkJCQk9IFVSSS5jcmVhdGUoIiIpOwkJLy8gdXJpIG9mIHRoZSBzdGFydGluZyB3c2RsCi0JcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb24JCT0gbnVsbDsJCQkJCS8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGFydGluZyB3c2RsCi0JCi0JcHJpdmF0ZSBVUkkgdGFyZ2V0Rm9sZGVyVVJJCQkJPSBudWxsOwkJCQkJLy8gdXJpIG9mIHRoZSBmb2xkZXIgdG8gY29weSB0bwotCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGVuYW1lCQk9IG51bGw7CQkJCQkvLyBvcHRpb25hbCBuZXcgZmlsZW5hbWUgZm9yIHRoZSBzdGFydGluZyB3c2RsCi0JCi0JcHJpdmF0ZSBJUGF0aCBwYXRoUHJlZml4CQkJPSBudWxsOyAgCQkJCS8vIHRoZSBzaG9ydGVzdCBjb21tb24gcGF0aCBvZiBhbGwgZmlsZXMgd2UgbmVlZCB0byBjb3B5Ci0JcHJpdmF0ZSBJUGF0aCB3c2RsUmVsUGF0aAkJCT0gbnVsbDsJCQkJCS8vIHJlbGF0aXZlIHBhdGggb2YgdGhlIHN0YXJ0aW5nIHdzZGwgdG8gdGhlIHRhcmdldCBmb2xkZXIKLQkJCi0JcHJpdmF0ZSBNYXAgeG1sT2JqZWN0SW5mb3MJCQk9IG5ldyBMaW5rZWRIYXNoTWFwKCk7CS8vIHRhYmxlIHRvIHN0b3JlIGluZm8gYWJvdXQgdGhlIGZpbGVzIHdlIG5lZWQgdG8gY29weQotCQotCXByaXZhdGUgU2ltcGxlVVJJRmFjdG9yeSB1cmlGYWN0b3J5ID0gbnVsbDsKLQkKLQkvKioKLQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLiAgQSBuZXcgV2ViU2VydmljZXNQYXJzZXIgaXMgY29uc3RydWN0ZWQgZm9yIHVzZS4KLQkgKi8KLQlwdWJsaWMgV1NETENvcGllcigpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IuICBUaGUgZ2l2ZW4gV2ViU2VydmljZXNQYXJzZXIgd2lsbCBiZSB1c2VkLgotCSAqIAotCSAqIEBwYXJhbSBwYXJzZXIgQSBXZWJTZXJ2aWNlc1BhcnNlciBmb3IgV1NETENvcGllciB0byB1c2UuICBJZiBudWxsLCBhIG5ldyBvbmUgd2lsbCBiZSBjb25zdHJ1Y3RlZC4KLQkgKi8KLQlwdWJsaWMgV1NETENvcGllcihXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpIHsKLQkJaWYgKHBhcnNlciA9PSBudWxsKQotCQkJdGhpcy5wYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXIoKTsKLQkJZWxzZQotCQkJdGhpcy5wYXJzZXIgPSBwYXJzZXI7Ci0JCQotCQlJVVJJU2NoZW1lIGVjbGlwc2VTY2hlbWUgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZVNjaGVtZSgpOwotCSAgICBJVVJJU2NoZW1lIGZpbGVTY2hlbWUgICAgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RmlsZVNjaGVtZSgpOwotCSAgICB1cmlGYWN0b3J5ID0gbmV3IFNpbXBsZVVSSUZhY3RvcnkoKTsKLQkgICAgdXJpRmFjdG9yeS5yZWdpc3RlclNjaGVtZSgicGxhdGZvcm0iLCBlY2xpcHNlU2NoZW1lKTsKLQkgICAgdXJpRmFjdG9yeS5yZWdpc3RlclNjaGVtZSgiZmlsZSIsIGZpbGVTY2hlbWUpOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIFVSSSBvZiB0aGUgc3RhcnRpbmcgd3NkbCBkb2N1bWVudC4gIFRoZSBVUkkgbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkkKLQkgKiB3aXRoIGEgdmFsaWQgcHJvdG9jb2wuICBGb3IgbG9jYWwgZmlsZXMsIGJvdGggZmlsZTovIGFuZCBwbGF0Zm9ybTovcmVzb3VyY2UgCi0JICogcHJvdG9jb2wgYXJlIGFjY2VwdGFibGUuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBvZiB0aGUgc3RhcnRpbmcgd3NkbCBkb2N1bWVudC4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNvdXJjZVVSSShTdHJpbmcgdXJpKSB7Ci0JCXNldFNvdXJjZVVSSSh1cmksIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSBVUkkgb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuICBUaGUgVVJJIG11c3QgYmUgYW4gYWJzb2x1dGUgVVJJCi0JICogd2l0aCBhIHZhbGlkIHByb3RvY29sLiAgRm9yIGxvY2FsIGZpbGVzLCBib3RoIGZpbGU6LyBhbmQgcGxhdGZvcm06L3Jlc291cmNlIAotCSAqIHByb3RvY29sIGFyZSBhY2NlcHRhYmxlLiAKLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuIAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNvdXJjZVVSSShVUkkgdXJpKSB7Ci0JCXNldFNvdXJjZVVSSSh1cmksIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBTYW1lIGFzIHNldFNvdXJjZVVSSShTdHJpbmcgdXJpKSB2ZXJzaW9uLCBleGNlcHQgdGhhdCBhbiBhbHJlYWR5IHBhcnNlZAotCSAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3c2RsIGRvY3VtZW50IGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBtZXRob2QgdG8gYXZvaWQKLQkgKiBoYXZpbmcgdG8gcGFyc2UgaXQgYSBzZWNvbmQgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuCi0JICogQHBhcmFtIGRlZmluaXRpb24gQSBwYXJzZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2VVUkkoU3RyaW5nIHVyaSwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCWlmICh1cmkgIT0gbnVsbCkKLQkJCXVyaSA9IHVyaS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0JCVVSSSB1cmlPYmogPSBudWxsOwkJCi0JCXRyeSB7Ci0JCQl0cnkgewotCQkJCXVyaU9iaiA9IG5ldyBVUkkodXJpKTsKLQkJCX0KLQkJCWNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZSkgewkJCQkKLQkJCQl1cmlPYmogPSBVUkkuY3JlYXRlKFVSSUVuY29kZXIuZW5jb2RlKHVyaSwgIlVURi04IikpOwotCQkJfQotCQkJc2V0U291cmNlVVJJKHVyaU9iaiwgZGVmaW5pdGlvbik7CQkKLQkJfQotCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUsIGRlZmF1bHQgVVJJKCIiKSBpcyB1c2VkLCBvcGVyYXRpb24gd2lsbCBiZSBhIG5vLW9wCi0JCX0JCQotCX0KLQkKLQkvKioKLQkgKiBTYW1lIGFzIHNldFNvdXJjZVVSSShTdHJpbmcgdXJpKSB2ZXJzaW9uLCBleGNlcHQgdGhhdCBhbiBhbHJlYWR5IHBhcnNlZAotCSAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3c2RsIGRvY3VtZW50IGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBtZXRob2QgdG8gYXZvaWQKLQkgKiBoYXZpbmcgdG8gcGFyc2UgaXQgYSBzZWNvbmQgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuCi0JICogQHBhcmFtIGRlZmluaXRpb24gQSBwYXJzZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuIAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNvdXJjZVVSSShVUkkgdXJpLCBEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJc291cmNlVVJJID0gdXJpOwotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCX0KLQkKLQkvKioKLQkgKiBTcGVjaWZ5IHRoZSB0YXJnZXQgZm9sZGVyIFVSSSBmb3IgV1NETENvcGllciB0byBjb3B5IHRoZSB3c2RsIHRvLiAgVGhlIFVSSSBtdXN0IGJlCi0JICogYW4gYWJzb2x1dGUgVVJJIHdpdGggYSB2YWxpZCBwcm90b2NvbC4gIEJvdGggZmlsZTovIGFuZCBwbGF0Zm9ybTovcmVzb3VyY2UgcHJvdG9jb2wKLQkgKiBhcmUgYWNjZXB0YWJsZS4gIFRoZSBlbnRpcmUgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aXRoIGFsbCB0aGUgZmlsZXMgdGhhdCB0aGUgd3NkbCAKLQkgKiBpbXBvcnRzIHdpbGwgYmUgZHVwbGljYXRlZCB1bmRlciB0aGlzIGZvbGRlci4gIElmIHRoZSB0YXJnZXQgZm9sZGVyIGRvZXMgbm90IGV4aXN0LCAKLQkgKiBpdCB3aWxsIGJlIGNyZWF0ZWQuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIHRhcmdldCBmb2xkZXIgVVJJIHdoZXJlIHRoZSB3c2RsIHN0cnVjdHVyZSBpcyBjb3BpZWQgdG8uCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXJnZXRGb2xkZXJVUkkoU3RyaW5nIHVyaSkgewotCQlpZiAodXJpICE9IG51bGwpCi0JCQl1cmkgPSB1cmkucmVwbGFjZSgnXFwnLCAnLycpOwotCQlVUkkgdXJpT2JqID0gbnVsbDsJCQotCQl0cnkgewotCQkJdHJ5IHsKLQkJCQl1cmlPYmogPSBuZXcgVVJJKHVyaSk7Ci0JCQl9Ci0JCQljYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpIHsJCQkJCi0JCQkJdXJpT2JqID0gVVJJLmNyZWF0ZShVUklFbmNvZGVyLmVuY29kZSh1cmksICJVVEYtOCIpKTsKLQkJCX0KLQkJCXNldFRhcmdldEZvbGRlclVSSSh1cmlPYmopOwkJCi0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJLy8gaWdub3JlLCB0YXJnZXRGb2xkZXJVUkkgd2lsbCBiZSBjaGVja2VkIGZvciBudWxsIGxhdGVyCi0JCX0JCQotCX0KLQkKLQkvKioKLQkgKiBTcGVjaWZ5IHRoZSB0YXJnZXQgZm9sZGVyIFVSSSBmb3IgV1NETENvcGllciB0byBjb3B5IHRoZSB3c2RsIHRvLiAgVGhlIFVSSSBtdXN0IGJlCi0JICogYW4gYWJzb2x1dGUgVVJJIHdpdGggYSB2YWxpZCBwcm90b2NvbC4gIEJvdGggZmlsZTovIGFuZCBwbGF0Zm9ybTovcmVzb3VyY2UgcHJvdG9jb2wKLQkgKiBhcmUgYWNjZXB0YWJsZS4gIFRoZSBlbnRpcmUgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aXRoIGFsbCB0aGUgZmlsZXMgdGhhdCB0aGUgd3NkbCAKLQkgKiBpbXBvcnRzIHdpbGwgYmUgZHVwbGljYXRlZCB1bmRlciB0aGlzIGZvbGRlci4gIElmIHRoZSB0YXJnZXQgZm9sZGVyIGRvZXMgbm90IGV4aXN0LCAKLQkgKiBpdCB3aWxsIGJlIGNyZWF0ZWQuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIHRhcmdldCBmb2xkZXIgVVJJIHdoZXJlIHRoZSB3c2RsIHN0cnVjdHVyZSBpcyBjb3BpZWQgdG8uIAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRhcmdldEZvbGRlclVSSShVUkkgdXJpKSB7CQkKLQkJdGFyZ2V0Rm9sZGVyVVJJID0gdXJpOwotCX0KLQkKLQkvKioKLQkgKiBPcHRpb25hbGx5IHNldCBhIG5ldyBmaWxlbmFtZSBmb3IgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQgdG8gdXNlIGFmdGVyIGl0IGlzCi0JICogY29waWVkLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIHdzZGwgaXMgdXNlZC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUgQSBmaWxlbmFtZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXJnZXRGaWxlbmFtZShTdHJpbmcgZmlsZW5hbWUpIHsKLQkJdGFyZ2V0RmlsZW5hbWUgPSBmaWxlbmFtZTsKLQl9IAotCQotCS8qCi0JICogQ29tcGFyZSB0aGUgcGF0aCBwcmVmaXggd2l0aCB0aGUgcGF0aCBpbiB0aGUgaW5mbyBvYmplY3QsCi0JICogbW9kaWZ5IHRoZSBwYXRoIHByZWZpeCBhY2NvcmRpbmdseS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgdXBkYXRlUGF0aFByZWZpeChYTUxPYmplY3RJbmZvIGluZm8pIHsKLQkgIAlpZiAocGF0aFByZWZpeCA9PSBudWxsKQotCSAgICAgICAgcGF0aFByZWZpeCA9IGluZm8ucGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0JICAgIGVsc2UgewotCSAgICAJaW50IG1hdGNoaW5nID0gcGF0aFByZWZpeC5tYXRjaGluZ0ZpcnN0U2VnbWVudHMoaW5mby5wYXRoKTsKLQkgICAgCQotCSAgICAJaWYgKG1hdGNoaW5nIDwgcGF0aFByZWZpeC5zZWdtZW50Q291bnQoKSkKLQkgICAgCQlwYXRoUHJlZml4ID0gcGF0aFByZWZpeC51cHRvU2VnbWVudChtYXRjaGluZyk7Ci0JICAgIH0KLQl9ICAgIAkKLQkKLQkvKgotCSAqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gVVJJIGlzIGEgcmVsYXRpdmUgVVJJLiAKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNSZWxhdGl2ZShTdHJpbmcgdXJpKSB7Ci0JCXJldHVybiB1cmkuaW5kZXhPZignOicpID09IC0xOwotCX0KLQotCS8qCi0JICogQW5hbHl6ZSB0aGUgd3NkbCBkb2N1bWVudCBhdCB0aGUgZ2l2ZW4gVVJJLCBhbmQgdHJhdmVyc2UgYW55IHJlbGF0aXZlIGZpbGVzIHRoYXQKLQkgKiBpdCBpbXBvcnRzLiBDYW4gb3B0aW9uYWxseSBwYXNzIGluIGEgcGFyc2VkIERlZmluaXRpb24gaWYgb25lJ3MgYXZhaWxhYmxlIHNvCi0JICogd2UgZG9uJ3QgaGF2ZSB0byBwYXJzZSB0aGUgd3NkbCBhZ2FpbiAob3RoZXJ3aXNlIGp1c3QgcGFzcyBpbiBudWxsKS4gCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVXU0RMKFVSSSB1cmksIERlZmluaXRpb24gZGVmaW5pdGlvbikgdGhyb3dzIAotCQlNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB7Ci0JCQotCQl1cmkgPSB1cmkubm9ybWFsaXplKCk7Ci0JCQotCQkvLyBhbHJlYWR5IHNlZW4gdGhpcyB3c2RsLCBza2lwCi0JCWlmICh4bWxPYmplY3RJbmZvcy5jb250YWluc0tleSh1cmkudG9TdHJpbmcoKSkpCi0JCQlyZXR1cm47Ci0JCQkJCi0JCS8vIG5lZWQgdG8gcGFyc2UgdGhlIHdzZGwgb3Vyc2VsdmVzCi0JCWlmIChkZWZpbml0aW9uID09IG51bGwpCi0JCQlkZWZpbml0aW9uID0gcGFyc2VyLmdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh1cmkudG9TdHJpbmcoKSk7Ci0JCQotCQkvLyBzYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBzdGFydGluZyB3c2RsCi0JCWlmICh0aGlzLmRlZmluaXRpb24gPT0gbnVsbCkKLQkJCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JCQotCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgodXJpLmdldFBhdGgoKSk7Ci0JCQotCQkvLyBhIHRhcmdldCBmaWxlbmFtZSB3YXMgZ2l2ZW4sIHNvIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBwYXRoIHdpdGggdGhlIG5ldyBuYW1lCi0JCWlmIChkZWZpbml0aW9uID09IHRoaXMuZGVmaW5pdGlvbiAmJiB0YXJnZXRGaWxlbmFtZSAhPSBudWxsKQotCQkJcGF0aCA9IHBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLmFwcGVuZCh0YXJnZXRGaWxlbmFtZSk7Ci0JCSAJCQotCSAgICBYTUxPYmplY3RJbmZvIGluZm8gPSBuZXcgWE1MT2JqZWN0SW5mbyhwYXRoLCBkZWZpbml0aW9uKTsJICAgIAotCSAgICB4bWxPYmplY3RJbmZvcy5wdXQodXJpLnRvU3RyaW5nKCksIGluZm8pOwotCSAgICB1cGRhdGVQYXRoUHJlZml4KGluZm8pOwotCQkKLQkgICAgLy8gbm93IGxvb2sgYXQgd3NkbCBpbXBvcnRzCi0JICAgIAotCSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewotCi0JICAgIAlMaXN0IGxpc3QgPSAoTGlzdCkgaXQubmV4dCgpOwotCSAgICAgIAotCSAgICAJZm9yIChJdGVyYXRvciBsaXN0SXQgPSBsaXN0Lml0ZXJhdG9yKCk7IGxpc3RJdC5oYXNOZXh0KCk7KSB7Ci0JICAgIAkJCi0JCSAgICAgICAgSW1wb3J0IHdzZGxJbXBvcnQgPSAoSW1wb3J0KSBsaXN0SXQubmV4dCgpOwotCQkgICAgICAgIFN0cmluZyB3c2RsSW1wb3J0TG9jYXRpb24gPSB3c2RsSW1wb3J0LmdldExvY2F0aW9uVVJJKCk7Ci0KLQkJICAgICAgICAvLyBhbmFseXplIGFueSByZWxhdGl2ZSBpbXBvcnRzIHdlIGZpbmQKLQkJICAgICAgICBpZiAod3NkbEltcG9ydExvY2F0aW9uICE9IG51bGwgJiYgaXNSZWxhdGl2ZSh3c2RsSW1wb3J0TG9jYXRpb24pKSB7Ci0KLQkJICAgICAgICAJLy8gYmFkIGZvcm0sIGltcG9ydGluZyB4c2Qgd2l0aCB3c2RsOmltcG9ydCwgYnV0IG5lZWQgdG8gaGFuZGxlCi0JCSAgICAgICAgCWlmICh3c2RsSW1wb3J0TG9jYXRpb24uZW5kc1dpdGgoWFNEKSkKLQkJICAgICAgICAJCWFuYWx5emVYU0QodXJpLnJlc29sdmUod3NkbEltcG9ydExvY2F0aW9uKSk7Ci0JCSAgICAgICAgCWVsc2UJCi0JCSAgICAgICAgCQlhbmFseXplV1NETCh1cmkucmVzb2x2ZSh3c2RsSW1wb3J0TG9jYXRpb24pLCBudWxsKTsKLQkJICAgICAgICB9Ci0JICAgIAl9Ci0JICAgIH0KLQkgICAgCi0JICAgIC8vIG5vdyBsb29rIGF0IHhzZCBpbXBvcnRzCi0KLQkgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0JICAgIAotCSAgICAvLyB0aGVyZSdzIG5vIHdzZGw6dHlwZXMsIHdlJ3JlIGRvbmUKLQkgICAgaWYgKHR5cGVzID09IG51bGwpCi0JICAgIAlyZXR1cm47Ci0JICAgICAgICAJCi0gICAgCWZvciAoSXRlcmF0b3IgaXQgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7CQkJCi0JCQkKLSAgICAJCUV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsgICAgCQkKLSAgICAJCUVsZW1lbnQgZWxlbWVudDsKLSAgICAJCQotICAgIAkJLy8gd2UnbGwgdHJ5IHRvIHBhcnNlIGFueSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIGFuZAotICAgIAkJLy8gWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIGludG8gYW4gWFNEIHNjaGVtYSAgICAJCQotICAgIAkJCi0gICAgCQlpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAJCQllbGVtZW50ID0gKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnQpLmdldEVsZW1lbnQoKTsKLSAgIAkJCWVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgIAkJCQllbGVtZW50ID0gKChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudCkuZ2V0RWxlbWVudCgpOwotICAgCQkJZWxzZQotICAgCQkJCWNvbnRpbnVlOwotICAgIAkJCSAgICAJCQkKLQkJCXRyeSB7Ci0JCQkJWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuY3JlYXRlU2NoZW1hKGVsZW1lbnQpOwotCQkJCQotCQkJCS8vIGFuYWx5emUgdGhlIGlubGluZWQgc2NoZW1hIGF0IHRoZSBjdXJyZW50IHVyaQotCQkJCWFuYWx5emVYU0QodXJpLCB4c2RTY2hlbWEpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0JCQkJLy8gaWdub3JlIGFueSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHRoYXQgY2Fubm90IGJlIHBhcnNlZCBpbnRvIGEKLQkJCQkvLyBYU0RTY2hlbWEgaW5zdGFuY2UKLQkJCX0KLSAgICAgICAgfQotCX0KLQkKLQkvKgotCSAqIEFuYWx5emUgdGhlIHNjaGVtYSBhdCB0aGUgZ2l2ZW4gVVJJLCB0cmF2ZXJzZSBpdHMgaW1wb3J0cyBhbmQgaW5jbHVkZXMuCi0JICogVGhlIHNjaGVtYSBpbmZvcm1hdGlvbiBpcyBub3Qgc3RvcmVkIGluIFhNTE9iamVjdEluZm9zIGJlY2F1c2UgaXQncwotCSAqIGVpdGhlciBub3QgbmVjY2Vzc2FyeSAoc2NoZW1hIGlubGluZWQgaW4gYSB3c2RsKSBvciBpdCBoYXMgYWxyZWFkeQotCSAqIGJlZW4gc3RvcmVkLgotCSAqLwotCXByaXZhdGUgdm9pZCBhbmFseXplWFNEKFVSSSB1cmksIFhTRFNjaGVtYSBzY2hlbWEpIHsKLQkJCi0JCWlmIChzY2hlbWEgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJCi0JCS8vIGxvb2sgYXQgdGhlIGltcG9ydHMgYW5kIGluY2x1ZGVzCi0JICAgIAotCQlmb3IgKEl0ZXJhdG9yIGl0ID0gc2NoZW1hLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewotCSAgICAgICAgCi0JCQlPYmplY3QgY29udGVudCA9IGl0Lm5leHQoKTsKLQkgICAgICAgIAotCQkJaWYgKCEoY29udGVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYURpcmVjdGl2ZSkpCi0JCQkJY29udGludWU7Ci0JCQkJCSAgICAgICAgCi0JCQlYU0RTY2hlbWFEaXJlY3RpdmUgeHNkU2NoZW1hRGlyZWN0aXZlID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgY29udGVudDsKLQkJCVN0cmluZyB4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbiA9IHhzZFNjaGVtYURpcmVjdGl2ZS5nZXRTY2hlbWFMb2NhdGlvbigpOwotCSAgICAgICAgICAKLQkJCS8vIGFuYWx5emUgYW55IHJlbGF0aXZlIGltcG9ydHMgYW5kIGluY2x1ZGVzIHdlIGZpbmQKLQkJCWlmICh4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbiAhPSBudWxsICYmIGlzUmVsYXRpdmUoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24pKQotCQkJCWFuYWx5emVYU0QodXJpLnJlc29sdmUoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24pKTsKLQkJfQotCX0KLQkKLQkvKgotCSAqIEFuYWx5emUgdGhlIHNjaGVtYSBhdCB0aGUgZ2l2ZW4gVVJJLCB0aGUgc2NoZW1hIGlzIHBhcnNlZCBhbmQgc3RvcmVkIGluCi0JICogWE1MT2JqZWN0SW5mb3MuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVYU0QoVVJJIHVyaSkgewotCQkKLQkJdXJpID0gdXJpLm5vcm1hbGl6ZSgpOwotCQkKLQkJLy8gYWxyZWFkeSBzZWVuIHRoaXMgeHNkLCBza2lwIGl0Ci0JCWlmICh4bWxPYmplY3RJbmZvcy5jb250YWluc0tleSh1cmkudG9TdHJpbmcoKSkpCi0JCQlyZXR1cm47Ci0JCQotCQlYU0RTY2hlbWEgeHNkU2NoZW1hID0gWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEodXJpLnRvU3RyaW5nKCkpOwotCi0JCS8vIGlmIHNjaGVtYSBpcyBub3QgY2FjaGVkLCBwYXJzZSBpdAotCSAgICBpZiAoeHNkU2NoZW1hID09IG51bGwpIHsKLQkgICAgCVhTRFBhcnNlciBwID0gbmV3IFhTRFBhcnNlcihudWxsKTsKLQkgICAgCUlucHV0U3RyZWFtIGlzID0gTmV0VXRpbHMuZ2V0VVJMSW5wdXRTdHJlYW0odXJpLnRvU3RyaW5nKCkpOwotCSAgICAgIAotCSAgICAJaWYgKGlzICE9IG51bGwpIHsKLQkgICAgCQlwLnBhcnNlKGlzKTsKLQkgICAgCQl4c2RTY2hlbWEgPSBwLmdldFNjaGVtYSgpOwotCSAgICAJfQotCSAgICB9Ci0JICAgIAotCSAgICBpZiAoeHNkU2NoZW1hICE9IG51bGwpIHsKLQkgICAgICAgIAotCSAgICAJWE1MT2JqZWN0SW5mbyBpbmZvID0gbmV3IFhNTE9iamVjdEluZm8obmV3IFBhdGgodXJpLmdldFBhdGgoKSksIHhzZFNjaGVtYSk7CSAgICAJCi0JICAgIAl4bWxPYmplY3RJbmZvcy5wdXQodXJpLnRvU3RyaW5nKCksIGluZm8pOwotCSAgICAJdXBkYXRlUGF0aFByZWZpeChpbmZvKTsKLQkgICAgICAKLQkgICAgCS8vIGFuYWx5emUgaXRzIGltcG9ydHMgYW5kIGluY2x1ZGVzCi0JICAgIAlhbmFseXplWFNEKHVyaSwgeHNkU2NoZW1hKTsKLQkgICAgfQotCX0KLQkJCi0JLyoKLQkgKiBBcHBlbmRzIGEgcGF0aCB0byBhIFVSSSBhbmQgcmV0dXJucyB0aGUgbmV3IGNvbWJpbmVkIFVSSSBpbiBhbiBhcnJheSBvZiAyIGVsZW1lbnRzLAotCSAqIHdoZXJlIHRoZSBmaXJzdCBlbGVtZW50IGlzIGluIGRlY29kZWQgZm9ybSBhbmQgdGhlIHNlY29uZCBlbGVtZW50IGlzIGluIGVuY29kZWQgZm9ybS4KLQkgKi8KLQlwcml2YXRlIFN0cmluZ1tdIGFwcGVuZFBhdGhUb1VSSShVUkkgdXJpT2JqLCBJUGF0aCBwYXRoKSB7Ci0JCQotCQlTdHJpbmcgc2NoZW1lU3BlY2lmaWNQYXJ0ID0gdXJpT2JqLmdldFNjaGVtZVNwZWNpZmljUGFydCgpOyAKLQkJCi0JCWlmIChzY2hlbWVTcGVjaWZpY1BhcnQuZW5kc1dpdGgoIi8iKSkKLQkJCXBhdGggPSBwYXRoLm1ha2VSZWxhdGl2ZSgpOwotCQllbHNlCi0JCQlwYXRoID0gcGF0aC5tYWtlQWJzb2x1dGUoKTsKLQkJCi0JCXJldHVybiBuZXcgU3RyaW5nW10gewotCQkJCXVyaU9iai5nZXRTY2hlbWUoKSArICc6JyArIHNjaGVtZVNwZWNpZmljUGFydCArIHBhdGgsCi0JCQkJdXJpT2JqLmdldFNjaGVtZSgpICsgJzonICsgdXJpT2JqLmdldFJhd1NjaGVtZVNwZWNpZmljUGFydCgpICsgcGF0aAotCQl9OwotCX0KLQkKLQkvKgotCSAqIFdyaXRlcyB0aGUgd3NkbCBkZWZpbml0aW9uIHRvIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoLCByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0IGZvbGRlci4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyB3cml0ZVhNTE9iaihJUGF0aCBwYXRoLCBEZWZpbml0aW9uIGRlZmluaXRpb24sIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzCi0JCVdTRExFeGNlcHRpb24sIFVSSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewkJCQkKLQkJCSAgCi0JICAgIFdTRExGYWN0b3J5IHdzZGxGYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwkgICAgCi0JICAgIFdTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLQkgICAgCi0JICAgIFN0cmluZ1tdIHRhcmdldFVSSSA9IGFwcGVuZFBhdGhUb1VSSSh0YXJnZXRGb2xkZXJVUkksIHBhdGgpOwotCSAgICAKLQkgICAgT3V0cHV0U3RyZWFtIG9zID0gdXJpRmFjdG9yeS5uZXdVUkkodGFyZ2V0VVJJWzBdKS5nZXRPdXRwdXRTdHJlYW0oKTsJICAgIAotCSAgICB3c2RsV3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBvcyk7Ci0JICAgIG9zLmNsb3NlKCk7Ci0JICAgIAotCSAgICByZXR1cm4gdGFyZ2V0VVJJWzFdOwotCX0KLSAgCi0JLyoKLQkgKiBXcml0ZXMgdGhlIHhzZCBzY2hlbWEgdG8gdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSB0YXJnZXQgZm9sZGVyLgotCSAqLwotCXByaXZhdGUgU3RyaW5nIHdyaXRlWE1MT2JqKElQYXRoIHBhdGgsIFhTRFNjaGVtYSB4c2RTY2hlbWEsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzCi0JCVRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24sIFVSSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewkJCQotCQkKLQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTgiKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiMiIpOwotCQkKLQkJRWxlbWVudCBlID0geHNkU2NoZW1hLmdldEVsZW1lbnQoKTsKLQkJRE9NU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZSk7CQkKLQkJCi0JCVN0cmluZ1tdIHRhcmdldFVSSSA9IGFwcGVuZFBhdGhUb1VSSSh0YXJnZXRGb2xkZXJVUkksIHBhdGgpOwotCQkKLQkJT3V0cHV0U3RyZWFtIG9zID0gdXJpRmFjdG9yeS5uZXdVUkkodGFyZ2V0VVJJWzBdKS5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcgU3RyZWFtUmVzdWx0KG9zKSk7Ci0JCW9zLmNsb3NlKCk7Ci0JCQotCQlyZXR1cm4gdGFyZ2V0VVJJWzFdOwotCX0gIAotCi0JLyoKLQkgKiBDb21wYXJlcyB0aGUgMiB1cmlzIGFuZCBzZWUgaWYgdGhleSBwb2ludCB0byB0aGUgc2FtZSBmaWxlLiAKLQkgKiBXZSBuZWVkIHRvIGNvbnZlcnQgYm90aCB1cmlzIHRvIGZpbGVzeXN0ZW0gdXJpcyBpbiBvcmRlciB0byBjb21wYXJlLgotCSAqLwkKLQlwcml2YXRlIGJvb2xlYW4gaXNTYW1lTG9jYXRpb24oU3RyaW5nIHVyaTEsIFN0cmluZyB1cmkyKSB7Ci0KLQkJLy8gaWYgZWl0aGVyIHVyaSBpcyBudWxsLCB3ZSBjYW5ub3QgbWFrZSBhbnkgbWVhbmluZ2Z1bCBjb21wYXJpc29uCi0JCWlmICh1cmkxID09IG51bGwgfHwgdXJpMiA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCQkKLQkJdXJpMSA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b0xvY2F0aW9uKHVyaTEpOwotCQl1cmkyID0gVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLnRvTG9jYXRpb24odXJpMik7Ci0JCQotCQlyZXR1cm4gdXJpMS5lcXVhbHModXJpMik7Ci0JfQotCQotCS8qKgotCSAqIEV4ZWN1dGVzIHRoZSBjb3B5aW5nIGFjdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbW9uaXRvciBBbiBvcHRpb25hbCBwcm9ncmVzcyBtb25pdG9yLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBUaHJvd24gaWYgdGhlIGNvcHlpbmcgaXMgdW5zdWNjZXNzZnVsLiAgUG9zc2libGUgY2F1c2VzIGluY2x1ZGU6Ci0JICogdGFyZ2V0IGZvbGRlciBVUkkgd2FzIG5vdCBzcGVjaWZpZWQ7IHNvdXJjZSBVUkkgaGFzIGluY29ycmVjdCBmb3JtYXQ7IHByb2JsZW0gcGFyc2luZyB3c2RsIAotCSAqIG9yIHhzZCBkb2N1bWVudHM7IHByb2JsZW0gd3JpdGluZyB0byBmaWxlc3lzdGVtLgotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCi0JCXhtbE9iamVjdEluZm9zLmNsZWFyKCk7Ci0KLQkJLy8gdGFyZ2V0IGZvbGRlciBtdXN0IGJlIHNldAotCQlpZiAodGFyZ2V0Rm9sZGVyVVJJID09IG51bGwpCi0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhXc3RXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9UQVJHRVRfRk9MREVSX05PVF9TUEVDSUZJRUQpKTsJCQotCQkJCQotICAJCXRyeSB7Ci0gIAkJCWFuYWx5emVXU0RMKHNvdXJjZVVSSSwgZGVmaW5pdGlvbik7ICAJCQkgCi0gIAkJCQotICAJCQkvLyBiZWdpbiB3cml0aW5nIG91dCBmaWxlcwotICAJCQkKLSAgCQkJSXRlcmF0b3IgaXRlciA9IHhtbE9iamVjdEluZm9zLnZhbHVlcygpLml0ZXJhdG9yKCk7IAkJCSAgCQkJCi0gIAkJCQotICAJCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLSAgCQkJCVhNTE9iamVjdEluZm8gaW5mbyA9IChYTUxPYmplY3RJbmZvKSBpdGVyLm5leHQoKTsgIAkJCQkKLSAgCQkJCUlQYXRoIHJlbFBhdGggPSBpbmZvLnBhdGgucmVtb3ZlRmlyc3RTZWdtZW50cyhwYXRoUHJlZml4LnNlZ21lbnRDb3VudCgpKTsKLSAgCQkJCQotICAJCQkJaWYgKGluZm8uY29udGVudCBpbnN0YW5jZW9mIERlZmluaXRpb24pIHsKLSAgCQkJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaW5mby5jb250ZW50OwotICAJCQkJCQotICAJCQkJCS8vIGlmIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHdzZGwsIHJlbWVtYmVyIGl0cyBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0YXJnZXQgZm9sZGVyCi0gIAkJCQkJaWYgKGRlZmluaXRpb24gPT0gdGhpcy5kZWZpbml0aW9uKQotICAJCQkJCQl3c2RsUmVsUGF0aCA9IHJlbFBhdGg7Ci0KLSAgCQkJCQlTdHJpbmcgdGFyZ2V0VVJJID0gd3JpdGVYTUxPYmoocmVsUGF0aCwgZGVmaW5pdGlvbiwgbW9uaXRvcik7Ci0gIAkJCQkJCi0gIAkJCQkJaWYgKGRlZmluaXRpb24gPT0gdGhpcy5kZWZpbml0aW9uICYmIGlzU2FtZUxvY2F0aW9uKHNvdXJjZVVSSS50b1N0cmluZygpLCB0YXJnZXRVUkkpKQotICAJCQkJCQlyZXR1cm47Ci0gIAkJCQl9Ci0gIAkJCQllbHNlCi0gIAkJCQkJd3JpdGVYTUxPYmoocmVsUGF0aCwgKFhTRFNjaGVtYSkgaW5mby5jb250ZW50LCBtb25pdG9yKTsgIAkJCQkJCi0gIAkJCX0gIAkJCQotICAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0gIAkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotICAJCQkJCU5MUy5iaW5kKFdzdFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX0NPUFlfV1NETCwgbmV3IFN0cmluZ1tdIHtzb3VyY2VVUkkudG9TdHJpbmcoKSwgdGFyZ2V0Rm9sZGVyVVJJLnRvU3RyaW5nKCl9KSwgdCkpOwotICAJCX0KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgc3RhcnRpbmcgd3NkbCBkb2N1bWVudCwgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCBmb2xkZXIgYWZ0ZXIKLQkgKiBjb3B5aW5nIGNvbXBsZXRlcy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBJUGF0aCBnZXRSZWxhdGl2ZVBhdGgoKSB7Ci0JCXJldHVybiB3c2RsUmVsUGF0aDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL0Fic3RyYWN0V2ViU2VydmljZUxvY2F0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTQ0NjcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDYyMCAgIDE0Nzg2MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKiAKLSAqIEltcGxlbWVudGF0aW9uIG9mIElXZWJTZXJ2aWNlTG9jYXRvci4gIEV4dGVuZGVycyBtdXN0IGltcGxlbWVudCB0aGUgYWJzdHJhY3QgbWV0aG9kIGdldFdlYlNlcnZpY2VzKCkuICAKLSAqIFRoaXMgY2xhc3Mgd2lsbCBiZSB1c2VkIHRvIHByb3ZpZGUgbWV0aG9kcyB1c2VmdWwgdG8gbG9jYXRvciBpbXBsZW1lbnRlcnMuICBFeHRlbmRlcnMgc2hvdWxkIHJlZ2lzdGVyIHRoZWlyCi0gKiBsb2NhdG9yIGltcGxlbWVudGF0aW9uIHdpdGggdGhlaXIgcGx1Z2luIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQuIAotICoKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IgaW1wbGVtZW50cyBJV2ViU2VydmljZUxvY2F0b3IgewotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotCSAqLwotCXB1YmxpYyBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yICgpCi0JewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBsaXN0IG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMuCi0JICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QncwotCSAqIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHJldHVybmluZyBhbiBlbXB0eSBsaXN0LgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwKLQkgKiBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIG5vbi1udWxsIGJ1dCBwb3NzaWJseSBlbXB0eSBsaXN0IG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMKLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kJ3MKLQkgKiBkZWZhdWx0IGJlaGF2aW91ciBvZiByZXR1cm5pbmcgYW4gZW1wdHkgbGlzdC4KLQkgKiBAcGFyYW0gcHJvamVjdHMgT25lIG9yIG1vcmUgcHJvamVjdHMgdG8gd2hpY2gKLQkgKiB0aGUgc2VhcmNoIHNob3VsZCBiZSBsaW1pdGVkLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwKLQkgKiBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIG5vbi1udWxsIGJ1dCBwb3NzaWJseSBlbXB0eSBsaXN0IG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMKLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLiAKLQkgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCdzCi0JICogZGVmYXVsdCBiZWhhdmlvdXIgb2YgcmV0dXJuaW5nIGFuIGVtcHR5IGxpc3QuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbm9uLW51bGwgYnV0IHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cwotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VzICggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOyAKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLiAKLQkgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCdzCi0JICogZGVmYXVsdCBiZWhhdmlvdXIgb2YgcmV0dXJuaW5nIGFuIGVtcHR5IGxpc3QuCi0JICogQHBhcmFtIHByb2plY3RzIE9uZSBvciBtb3JlIHByb2plY3RzIHRvIHdoaWNoCi0JICogdGhlIHNlYXJjaCBzaG91bGQgYmUgbGltaXRlZC4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsCi0JICogb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBub24tbnVsbCBidXQgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZXMgKCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7IAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvSVdlYlNlcnZpY2VMb2NhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL0lXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzUzMzFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvSVdlYlNlcnZpY2VMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDYyMCAgIDE0Nzg2MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLQotLyoqCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKiBJbnRlcmZhY2UgZm9yIFdlYiBzZXJ2aWNlIGxvY2F0b3JzIHRoYXQgd2lsbCBiZSByZXRyaWV2ZWQKLSAqIGJ5IHRoZSBXZWJTZXJ2aWNlRmluZGVyLiBUaGlzIGludGVyZmFjZSBzaG91bGQgbm90IGJlCi0gKiBpbXBsZW1lbnRlZCBkaXJlY3RseS4gSW5zdGVhZCwgc3ViY2xhc3NlcyBzaG91bGQgZXh0ZW5kCi0gKiBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yIGFuZCBpbXBsZW1lbnQgdGhlCi0gKiBnZXRXZWJTZXJ2aWNlcygpIGFuZCBnZXRXZWJTZXJ2aWNlQ2xpZW50cygpIG1ldGhvZHMuIAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElXZWJTZXJ2aWNlTG9jYXRvcgotewotCS8qKgotCSAqIFJldHVybnMgYSBsaXN0IG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMuCi0JICogVGhpcyBvcGVyYXRpb24gbWF5IGJlIGxvbmcgcnVubmluZy4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsCi0JICogb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBsaXN0IG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMuCi0JICogcG9zc2libHkgZW1wdHksIHBvc3NpYmx5IG51bGwuCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZUNsaWVudHMgKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKTsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIGEgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqIFRoaXMgb3BlcmF0aW9uIG1heSBiZSBsb25nIHJ1bm5pbmcuCi0JICogQHBhcmFtIHByb2plY3RzIE9uZSBvciBtb3JlIHByb2plY3RzIHRvIHdoaWNoIHRoZQotCSAqIHNlYXJjaCBzaG91bGQgYmUgbGltaXRlZC4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsCi0JICogb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBsaXN0IG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMuCi0JICogcG9zc2libHkgZW1wdHksIHBvc3NpYmx5IG51bGwuCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZUNsaWVudHMgKCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKTsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIGEgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLgotCSAqIFRoaXMgb3BlcmF0aW9uIG1heSBiZSBsb25nIHJ1bm5pbmcuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLAotCSAqIHBvc3NpYmx5IGVtcHR5LCBwb3NzaWJseSBudWxsLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VzICggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLgotCSAqIFRoaXMgb3BlcmF0aW9uIG1heSBiZSBsb25nIHJ1bm5pbmcuCi0JICogQHBhcmFtIHByb2plY3RzIE9uZSBvciBtb3JlIHByb2plY3RzIHRvIHdoaWNoIHRoZQotCSAqIHNlYXJjaCBzaG91bGQgYmUgbGltaXRlZC4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsCi0JICogb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsCi0JICogcG9zc2libHkgZW1wdHksIHBvc3NpYmx5IG51bGwuCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZXMgKCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUNhdGVnb3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VDYXRlZ29yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzU4NTNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUNhdGVnb3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBBIFdlYlNlcnZpY2VDYXRlZ29yeSByZXByZXNlbnRzIGEgZGVmaW5lZCBjYXRlZ29yeSBvZgotICogV2ViIHNlcnZpY2UgbG9jYXRvcnMgcGx1Z2dlZCBpbnRvIHRoZSBXZWJTZXJ2aWNlRmluZGVyCi0gKiBmcmFtZXdvcmsuIEVhY2ggY2F0ZWdvcnkgaGFzIGEgbm9uLXRyYW5zbGF0YWJsZSBpZGVudGlmaWVyLAotICogYW4gb3B0aW9uYWwgbm9uLXRyYW5zbGF0YWJsZSBwYXJlbnQgY2F0ZWdvcnkgaWRlbnRpZmllcgotICogKGFic2VudCBmb3Igcm9vdCBjYXRlZ29yaWVzKSwgYSB0cmFuc2xhdGFibGUgc2hvcnQgbGFiZWwsCi0gKiBhIHRyYW5zbGF0YWJsZSBsb25nIGRlc2NyaXB0aW9uIGFuZCBhbiBpY29uLgotICogQHNlZSBXZWJTZXJ2aWNlRmluZGVyI2dldFdlYlNlcnZpY2VDYXRlZ29yaWVzKCkgCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlQ2F0ZWdvcnkKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0lEID0gImlkIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfQ0FURUdPUlkgPSAiY2F0ZWdvcnkiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9MQUJFTCA9ICJsYWJlbCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0RFU0NSSVBUSU9OID0gImRlc2NyaXB0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfSUNPTiA9ICJpY29uIjsgLy8kTk9OLU5MUy0xJAotCQotCXByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGljZV87Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIG5ldyBXZWJTZXJ2aWNlQ2F0ZWdvcnkgZm9yIHRoZSBnaXZlbgotCSAqIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBmcm9tIHRoZSBleHRlbnNpb24gcmVnaXN0cnkuCi0JICogQHBhcmFtIGljZSBUaGUgY29uZmlndXJhdGlvbiBlbGVtZW50IG9uIHdoaWNoIHRoaXMKLQkgKiBuZXcgV2ViU2VydmljZUNhdGVnb3J5IGlzIGJhc2VkLiAKLQkgKi8KLQlwdWJsaWMgV2ViU2VydmljZUNhdGVnb3J5ICggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGljZSApCi0JewotCQlpY2VfID0gaWNlOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBub24tdHJhbnNsYXRhYmxlIGlkZW50aWZpZXIgb2YgdGhpcyBjYXRlZ29yeS4KLQkgKiBAcmV0dXJuIFRoZSBub24tdHJhbnNsYXRhYmxlIGlkZW50aWZpZXIgb2YgdGhpcyBjYXRlZ29yeS4KLQkgKiBUaGlzIHNob3VsZCBuZXZlciBiZSBudWxsLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SWQgKCkKLQl7Ci0JCXJldHVybiBpY2VfLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0lEKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbm9uLXRyYW5zbGF0YWJsZSBpZGVudGlmaWVyIG9mIHRoaXMgY2F0ZWdvcnkncwotCSAqIGltbWVkaWF0ZSBwYXJlbnQgY2F0ZWdvcnksIG9yIG51bGwgaWYgdGhpcyBpcyBhIHJvb3QgY2F0ZWdvcnkKLQkgKiBhbmQsIGFzIHN1Y2gsIGhhcyBubyBwYXJlbnQgY2F0ZWdvcnkuCi0JICogQHJldHVybiBUaGUgbm9uLXRyYW5zbGF0YWJsZSBpZGVudGlmaWVyIG9mIHRoaXMgY2F0ZWdvcnkncwotCSAqIHBhcmVudCwgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UGFyZW50SWQgKCkKLQl7Ci0JCXJldHVybiBpY2VfLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0NBVEVHT1JZKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGlzIGNhdGVnb3J5J3MgaW1tZWRpYXRlIHBhcmVudCBXZWJTZXJ2aWNlQ2F0ZWdvcnksIG9yCi0JICogbnVsbCBpZiB0aGlzIGlzIGEgcm9vdCBjYXRlZ29yeSBhbmQsIGFzIHN1Y2gsIGhhcyBubyBwYXJlbnQgY2F0ZWdvcnkuCi0JICogQHJldHVybiBUaGlzIGNhdGVnb3J5J3MgaW1tZWRpYXRlIHBhcmVudCBXZWJTZXJ2aWNlQ2F0ZWdvcnksIG9yCi0JICogbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqLwotCXB1YmxpYyBXZWJTZXJ2aWNlQ2F0ZWdvcnkgZ2V0UGFyZW50ICgpCi0JewotCQlyZXR1cm4gV2ViU2VydmljZUZpbmRlci5pbnN0YW5jZSgpLmdldFdlYlNlcnZpY2VDYXRlZ29yeUJ5SWQoZ2V0UGFyZW50SWQoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGludGVybmF0aW9uYWxpemVkIHNob3J0IGxhYmVsIG9mIHRoaXMgY2F0ZWdvcnksCi0JICogb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLiBOb3RlIHRoYXQgdXNlciBpbnRlcmZhY2VzIG1heQotCSAqIGNob29zZSB0byBieXBhc3MgY2F0ZWdvcmllcyB0aGF0IGRvIG5vdCBoYXZlIGEgbGFiZWwuCi0JICogQHJldHVybiBUaGUgaW50ZXJuYXRpb25hbGl6ZWQgc2hvcnQgbGFiZWwgb2YgdGhpcyBjYXRlZ29yeSwKLQkgKiBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMYWJlbCAoKQotCXsKLQkJcmV0dXJuIGljZV8uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfTEFCRUwpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBpbnRlcm5hdGlvbmFsaXplZCBkZXNjcmlwdGlvbiBvZiB0aGlzIGNhdGVnb3J5LAotCSAqIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKiBAcmV0dXJuIFRoZSBpbnRlcm5hdGlvbmFsaXplZCBkZXNjcmlwdGlvbiBvZiB0aGlzIGNhdGVnb3J5LAotCSAqIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpCi0JewotCQlyZXR1cm4gaWNlXy5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9ERVNDUklQVElPTik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGljb24gb2YgdGhpcyBjYXRlZ29yeSwgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqIEByZXR1cm4gVGhlIGljb24gb2YgdGhpcyBjYXRlZ29yeSwgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SWNvbiAoKQotCXsKLQkJcmV0dXJuIGljZV8uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfSUNPTik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlRmluZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VGaW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwZDk5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VGaW5kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDYyMCAgIDE0Nzg2MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLQotLyoqCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKiBXZWJTZXJ2aWNlRmluZGVyIGlzIGEgc2luZ2xldG9uIHdoaWNoIGZpbmRzIGFsbCBleHRlbmRlcnMgYW5kIHJldHVybnMgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLSAqIEZpbmRzIHdlYiBzZXJ2aWNlcyBieSBjYWxsaW5nIGxvY2F0b3JzIGV4dGVuZGluZyB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLkFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9IAotICogd2hpY2ggaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLldlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnl9LgotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUZpbmRlciB7Ci0KLQlwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlRmluZGVyIGluc3RhbmNlID0gbnVsbDsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX0xPQ0FUT1IgPSAid2ViU2VydmljZUxvY2F0b3IiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfQ0FURUdPUlkgPSAid2ViU2VydmljZUxvY2F0b3JDYXRlZ29yeSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0lEID0gImlkIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfQ0xBU1MgPSAiY2xhc3MiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9DQVRFR09SWSA9ICJjYXRlZ29yeSI7IC8vJE5PTi1OTFMtMSQKLS8vCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfTEFCRUwgPSAibGFiZWwiOyAvLyROT04tTkxTLTEkCi0vLwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0RFU0NSSVBUSU9OID0gImRlc2NyaXB0aW9uIjsgLy8kTk9OLU5MUy0xJAotLy8JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9JQ09OID0gImljb24iOyAvLyROT04tTkxTLTEkCi0KLQkvKgotCSAqIFB1YmxpYyBjb25zdHJ1Y3Rpb24gaXMgbm90IGFsbG93ZWQuCi0JICogVXNlIFdlYlNlcnZpY2VGaW5kZXIuaW5zdGFuY2UoKS4KLQkgKi8KLQlwcml2YXRlIFdlYlNlcnZpY2VGaW5kZXIgKCkJCi0JewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBvZiA8Y29kZT5XZWJTZXJ2aWNlRmluZGVyPC9jb2RlPi4KLQkgKiBAcmV0dXJuIFRoZSBzaW5nbGV0b24gb2YgPGNvZGU+V2ViU2VydmljZUZpbmRlcjwvY29kZT4uCi0JICovCi0JcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlRmluZGVyIGluc3RhbmNlICgpCi0JewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLQkJewotCQkJaW5zdGFuY2UgPSBuZXcgV2ViU2VydmljZUZpbmRlcigpOwotCQl9Ci0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JCQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2VzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludC4gIEN1cnJlbnRseSByZXR1cm5zIGFsbCB3ZWIgCi0JICogc2VydmljZXMgZm91bmQgZm9yIGFsbCByZWdpc3RlcmVkIGxvY2F0b3JzLiAgTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2VzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlSW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZXMgKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeUlkKG51bGwsbW9uaXRvcik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2VzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludC4gIEN1cnJlbnRseSByZXR1cm5zIGFsbCB3ZWIgCi0JICogc2VydmljZXMgZm91bmQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGdpdmVuIHByb2plY3RzIGZvciBhbGwgcmVnaXN0ZXJlZCBsb2NhdG9ycy4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZXMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlcyAoIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5SWQobnVsbCxwcm9qZWN0cyxtb25pdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZXMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZXMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIGNhdGVnb3J5IFRoZSBjYXRlZ29yeSBvZiBsb2NhdG9ycyB0byB1c2UuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnkgKCBXZWJTZXJ2aWNlQ2F0ZWdvcnkgY2F0ZWdvcnksIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciAgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeUlkKGNhdGVnb3J5ID09IG51bGwgPyBudWxsIDogY2F0ZWdvcnkuZ2V0SWQoKSxtb25pdG9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlcyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQgdW5kZXIgdGhlIGdpdmVuIGNhdGVnb3J5LgotCSAqIFRoZSBzZWFyY2ggaXMgY29uc3RyYWluZWQgdG8gdGhlIGdpdmVuIHNldCBvZiBvbmUgb3IgbW9yZSBwcm9qZWN0cy4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZXMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIGNhdGVnb3J5IFRoZSBjYXRlZ29yeSBvZiBsb2NhdG9ycyB0byB1c2UuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnkgKCBXZWJTZXJ2aWNlQ2F0ZWdvcnkgY2F0ZWdvcnksIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciAgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeUlkKGNhdGVnb3J5ID09IG51bGwgPyBudWxsIDogY2F0ZWdvcnkuZ2V0SWQoKSxwcm9qZWN0cyxtb25pdG9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlcyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQgdW5kZXIgdGhlIGdpdmVuIGNhdGVnb3J5LgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlSW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlcyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gY2F0ZWdvcnlJZCBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5SWQgKCBTdHJpbmcgY2F0ZWdvcnlJZCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkLG51bGwsbW9uaXRvcik7CQotCX0gCi0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlcyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQgdW5kZXIgdGhlIGdpdmVuIGNhdGVnb3J5LgotCSAqIFRoZSBzZWFyY2ggaXMgY29uc3RyYWluZWQgdG8gdGhlIGdpdmVuIHNldCBvZiBvbmUgb3IgbW9yZSBwcm9qZWN0cy4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZXMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIGNhdGVnb3J5SWQgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeUlkICggU3RyaW5nIGNhdGVnb3J5SWQsIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlMaW5rZWRMaXN0IHdlYlNlcnZpY2VzID0gbmV3IExpbmtlZExpc3QoKTsKLQkJV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSB3c2xyID0gV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSByZWdFbGVtZW50cyA9IHdzbHIuZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWdFbGVtZW50cy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKEVMRU1FTlRfTE9DQVRPUi5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0TmFtZSgpKSkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCWlmIChjYXRlZ29yeUlkID09IG51bGwgfHwgY2F0ZWdvcnlJZC5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfQ0FURUdPUlkpKSkKLQkJCQkJewotCQkJCQkJT2JqZWN0IG9iaiA9IHJlZ0VsZW1lbnRzW2ldLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQVRUUklCVVRFX0NMQVNTKTsKLQkJCQkJCWlmIChvYmogaW5zdGFuY2VvZiBJV2ViU2VydmljZUxvY2F0b3IpCi0JCQkJCQl7Ci0JCQkJCQkJSVdlYlNlcnZpY2VMb2NhdG9yIHdzbCA9IChJV2ViU2VydmljZUxvY2F0b3Ipb2JqOwotCQkJCQkJCUxpc3Qgd3NMaXN0ID0gcHJvamVjdHMgPT0gbnVsbCA/IHdzbC5nZXRXZWJTZXJ2aWNlcyhtb25pdG9yKSA6IHdzbC5nZXRXZWJTZXJ2aWNlcyhwcm9qZWN0cyxtb25pdG9yKTsKLQkJCQkJCQlpZiAod3NMaXN0ICE9IG51bGwpCi0JCQkJCQkJewotCQkJCQkJCQl3ZWJTZXJ2aWNlcy5hZGRBbGwod3NMaXN0KTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IAotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4KQotCQkJCXsKLQkJCQkJLy8gUXVpZXRseSBieXBhc3MgYW55IElXZWJTZXJ2aWNlTG9jYXRvcnMgdGhhdCBmYWlsZWQgdG8gYmUgbG9hZGVkLgotCQkJCX0KLQkJCX0KLQkJfSAKLQkJcmV0dXJuIHdlYlNlcnZpY2VzLml0ZXJhdG9yKCk7CQotCX0gCi0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50LiAgQ3VycmVudGx5IHJldHVybnMgYWxsIHdlYiAKLQkgKiBzZXJ2aWNlIGNsaWVudHMgZm91bmQgZm9yIGFsbCByZWdpc3RlcmVkIGxvY2F0b3JzLiAgTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUNsaWVudEluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VDbGllbnRzICggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChudWxsLG1vbml0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50LiAgQ3VycmVudGx5IHJldHVybnMgYWxsIHdlYiAKLQkgKiBzZXJ2aWNlIGNsaWVudHMgZm91bmQgZm9yIGFsbCByZWdpc3RlcmVkIGxvY2F0b3JzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBnaXZlbiBwcm9qZWN0cy4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlQ2xpZW50SW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZUNsaWVudHMgKCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKG51bGwscHJvamVjdHMsbW9uaXRvcik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQgdW5kZXIgdGhlIGdpdmVuIGNhdGVnb3J5LgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4gCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlQ2xpZW50SW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeSBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5ICggV2ViU2VydmljZUNhdGVnb3J5IGNhdGVnb3J5LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5ID09IG51bGwgPyBudWxsIDogY2F0ZWdvcnkuZ2V0SWQoKSxtb25pdG9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBUaGUgc2VhcmNoIGlzIGNvbnN0cmFpbmVkIHRvIHRoZSBnaXZlbiBzZXQgb2Ygb25lIG9yIG1vcmUgcHJvamVjdHMuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LiAKLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIGNhdGVnb3J5IFRoZSBjYXRlZ29yeSBvZiBsb2NhdG9ycyB0byB1c2UuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnkgKCBXZWJTZXJ2aWNlQ2F0ZWdvcnkgY2F0ZWdvcnksIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnkgPT0gbnVsbCA/IG51bGwgOiBjYXRlZ29yeS5nZXRJZCgpLHByb2plY3RzLG1vbml0b3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQgdW5kZXIgdGhlIGdpdmVuIGNhdGVnb3J5LgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIGNhdGVnb3J5SWQgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkICggU3RyaW5nIGNhdGVnb3J5SWQsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZCxudWxsLG1vbml0b3IpOwotCX0gCi0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50IHVuZGVyIHRoZSBnaXZlbiBjYXRlZ29yeS4KLQkgKiBUaGUgc2VhcmNoIGlzIGNvbnN0cmFpbmVkIHRvIHRoZSBnaXZlbiBzZXQgb2Ygb25lIG9yIG1vcmUgcHJvamVjdHMuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUNsaWVudEluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gY2F0ZWdvcnlJZCBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQgKCBTdHJpbmcgY2F0ZWdvcnlJZCwgSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCUxpbmtlZExpc3Qgd2ViU2VydmljZUNsaWVudHMgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IHdzbHIgPSBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIHJlZ0VsZW1lbnRzID0gd3Nsci5nZXRDb25maWdFbGVtZW50cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoRUxFTUVOVF9MT0NBVE9SLmVxdWFscyhyZWdFbGVtZW50c1tpXS5nZXROYW1lKCkpKQotCQkJewotCQkJCXRyeQotCQkJCXsKLQkJCQkJaWYgKGNhdGVnb3J5SWQgPT0gbnVsbCB8fCBjYXRlZ29yeUlkLmVxdWFscyhyZWdFbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9DQVRFR09SWSkpKQotCQkJCQl7Ci0JCQkJCQlPYmplY3Qgb2JqID0gcmVnRWxlbWVudHNbaV0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihBVFRSSUJVVEVfQ0xBU1MpOwotCQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElXZWJTZXJ2aWNlTG9jYXRvcikKLQkJCQkJCXsKLQkJCQkJCQlJV2ViU2VydmljZUxvY2F0b3Igd3NsID0gKElXZWJTZXJ2aWNlTG9jYXRvcilvYmo7Ci0JCQkJCQkJTGlzdCB3c0xpc3QgPSBwcm9qZWN0cyA9PSBudWxsID8gd3NsLmdldFdlYlNlcnZpY2VDbGllbnRzKG1vbml0b3IpIDogd3NsLmdldFdlYlNlcnZpY2VDbGllbnRzKHByb2plY3RzLG1vbml0b3IpOwotCQkJCQkJCWlmICh3c0xpc3QgIT0gbnVsbCkKLQkJCQkJCQl7Ci0JCQkJCQkJCXdlYlNlcnZpY2VDbGllbnRzLmFkZEFsbCh3c0xpc3QpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0gCi0JCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXgpCi0JCQkJewotCQkJCQkvLyBRdWlldGx5IGJ5cGFzcyBhbnkgSVdlYlNlcnZpY2VMb2NhdG9ycyB0aGF0IGZhaWxlZCB0byBiZSBsb2FkZWQuCi0JCQkJfQotCQkJfQotCQl9IAotCQlyZXR1cm4gd2ViU2VydmljZUNsaWVudHMuaXRlcmF0b3IoKTsJCi0JfSAKLQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgcmVnaXN0ZXJlZCBXZWIgU2VydmljZSBDYXRlZ29yeSBJRHMuCi0JICogQHJldHVybiBBbiBhcnJheSwgbmV2ZXIgbnVsbCBidXQgcG9zc2libHkgZW1wdHksCi0JICogb2YgcmVnaXN0ZXJlZCBXZWIgU2VydmljZSBDYXRlZ29yeSBkZXNjcmlwdG9ycy4KLQkgKi8KLQlwdWJsaWMgV2ViU2VydmljZUNhdGVnb3J5W10gZ2V0V2ViU2VydmljZUNhdGVnb3JpZXMgKCkKLQl7Ci0JCUxpbmtlZExpc3QgY2F0ZWdvcmllcyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JCVdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgd3NsciA9IFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gcmVnRWxlbWVudHMgPSB3c2xyLmdldENvbmZpZ0VsZW1lbnRzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcmVnRWxlbWVudHMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmIChFTEVNRU5UX0NBVEVHT1JZLmVxdWFscyhyZWdFbGVtZW50c1tpXS5nZXROYW1lKCkpKQotCQkJewotCQkJCWNhdGVnb3JpZXMuYWRkKG5ldyBXZWJTZXJ2aWNlQ2F0ZWdvcnkocmVnRWxlbWVudHNbaV0pKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKFdlYlNlcnZpY2VDYXRlZ29yeVtdKWNhdGVnb3JpZXMudG9BcnJheShuZXcgV2ViU2VydmljZUNhdGVnb3J5WzBdKTsKLQotCX0JCi0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHJlZ2lzdGVyZWQgV2ViIFNlcnZpY2UgQ2F0ZWdvcnkgSURzLgotCSAqIEByZXR1cm4gQW4gYXJyYXksIG5ldmVyIG51bGwgYnV0IHBvc3NpYmx5IGVtcHR5LAotCSAqIG9mIHJlZ2lzdGVyZWQgV2ViIFNlcnZpY2UgQ2F0ZWdvcnkgSURzLgotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlQ2F0ZWdvcnlJZHMgKCkKLQl7Ci0JCUxpbmtlZExpc3QgY2F0ZWdvcmllcyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JCVdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgd3NsciA9IFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gcmVnRWxlbWVudHMgPSB3c2xyLmdldENvbmZpZ0VsZW1lbnRzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcmVnRWxlbWVudHMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmIChFTEVNRU5UX0NBVEVHT1JZLmVxdWFscyhyZWdFbGVtZW50c1tpXS5nZXROYW1lKCkpKQotCQkJewotCQkJCVN0cmluZyBpZCA9IHJlZ0VsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0lEKTsKLQkJCQlpZiAoaWQgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWNhdGVnb3JpZXMuYWRkKGlkKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChTdHJpbmdbXSljYXRlZ29yaWVzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIFdlYlNlcnZpY2VDYXRlZ29yeSB3aXRoIHRoZSBnaXZlbiBJRCwKLQkgKiBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICogQHBhcmFtIGNhdGVnb3J5SWQgVGhlIElEIG9mIHRoZSBjYXRlZ29yeSB0byBmaW5kLgotCSAqIEByZXR1cm4gVGhlIG1hdGNoaW5nIGNhdGVnb3J5IGRlc2NyaXB0b3IsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKi8KLQlwdWJsaWMgV2ViU2VydmljZUNhdGVnb3J5IGdldFdlYlNlcnZpY2VDYXRlZ29yeUJ5SWQgKCBTdHJpbmcgY2F0ZWdvcnlJZCApCi0JewotCQlXZWJTZXJ2aWNlQ2F0ZWdvcnkgY2F0ZWdvcnkgPSBudWxsOwotCQlpZiAoY2F0ZWdvcnlJZCAhPSBudWxsKQotCQl7Ci0JCQlXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IHdzbHIgPSBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSByZWdFbGVtZW50cyA9IHdzbHIuZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVnRWxlbWVudHMubGVuZ3RoOyBpKyspCi0JCQl7Ci0JCQkJaWYgKEVMRU1FTlRfQ0FURUdPUlkuZXF1YWxzKHJlZ0VsZW1lbnRzW2ldLmdldE5hbWUoKSkpCi0JCQkJewotCQkJCQlTdHJpbmcgaWQgPSByZWdFbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9JRCk7Ci0JCQkJCWlmIChjYXRlZ29yeUlkLmVxdWFscyhpZCkpCi0JCQkJCXsKLQkJCQkJCXJldHVybiBuZXcgV2ViU2VydmljZUNhdGVnb3J5KHJlZ0VsZW1lbnRzW2ldKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gY2F0ZWdvcnk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlTG9jYXRvckV4dGVuc2lvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlTG9jYXRvckV4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTQyYjAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUxvY2F0b3JFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvbkltcGw7Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKiAKLSAqIFRoaXMgY2xhc3MgaXMgcHJvdmlkZWQgZm9yIHRoZSBhZGRpdGlvbiBvZiBsb2NhdG9yIGV4dGVuc2lvbiBzcGVjaWZpYyBmdW5jdGlvbnMKLSAqIAotICovCi0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlTG9jYXRvckV4dGVuc2lvbiBleHRlbmRzIFdlYlNlcnZpY2VFeHRlbnNpb25JbXBsIHsKLQkKLS8vCSBDb3B5cmlnaHQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0JCi0JIHB1YmxpYyBXZWJTZXJ2aWNlTG9jYXRvckV4dGVuc2lvbihJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLQkgIHsKLQkgICAgc3VwZXIoY29uZmlnRWxlbWVudCk7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2Q2YmZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbDsKLQotLyoqCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKiBSZXRyaWV2ZXMgbG9jYXRvcnMgd2hpY2ggZXh0ZW5kIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0gKiBMb2NhdG9ycyBtdXN0IGNyZWF0ZSBhbiBleHRlbnNpb24gZm9yIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQgaW4gb3JkZXIgdG8gYmUgcmV0cmlldmVkIGJ5Ci0gKiB0aGUgcmVnaXN0cnkuCi0gKi8KLQotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSBleHRlbmRzIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwgewotCi0JIC8vIENvcHlyaWdodAotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQkgIC8qCi0JICAgKiBUaGlzIGlzIGEgc2luZ2xldG9uIGJlY2FzdWUgaXQgd2FzIGRlY2lkZWQgdGhhdCB0aGUgbWVtb3J5IGZvb3QgcHJpbnQgCi0JICAgKiBpcyBub3QgYXMgZXhwZW5zaXZlIGFzIHRoZSB0aW1lIHRha2VuIHJldHJpZXZpbmcgdGhlIGRhdGEKLQkgICAqIAotCSAgICovCi0JICAKLQkgIAotCSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSB3c2xyOwotCSAgCi0JICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKQotCSAgewotCSAgCWlmKHdzbHIgPT0gbnVsbCkgd3NsciA9IG5ldyBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5KCk7Ci0JICAgIHJldHVybiB3c2xyOwotCSAgfQotCSAgCi0JICBwcml2YXRlIFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkoKQotCSAgewotCSAgICBzdXBlcigpOwotCSAgfQotCSAgCi0JICAvKioKLQkgICogQ2hpbGRyZW4gcmVnaXN0cmllcyB3aWxsIGhhdmUgZGlmZmVyZW50IGV4dGVuc2lvbiB0eXBlcyAKLQkgICogQHJldHVybiBXZWJzZXJ2aWNlRXh0ZW5zaW9uIGhvbGRzIGEgY29uZmlnIGVsZW0KLQkgICogZm9yIHRoYXQgZXh0ZW5zaW9uIGNhcGFibGUgb2YgY3JlYXRpbmcgYW4gZXhlY3V0YWJsZSBmaWxlCi0JICAqLwotCSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLQkgIHsKLQkgICAgcmV0dXJuIG5ldyBXZWJTZXJ2aWNlTG9jYXRvckV4dGVuc2lvbihjb25maWdFbGVtZW50KTsKLQkgIH0KLQotCSAgLyoqCi0JICAqIENvbnRhY3RzIHBsYXRmb3JtIHJlZ2lzdHJ5IGFuZCBnZXRzIGFsbCBsb2NhdG9ycyB3aGljaCBoYXZlIHJlZ2lzdGVyZWQgCi0JICAqICB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50LgotCSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGFuIGFycmF5IG9mIGVsZW1lbnRzIHdoaWNoIGNvbnRhaW4gbG9jYXRvcnMgCi0JICAqIGV4dGVuZGluZyBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yLgotCSAgKi8KLQkgIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBnZXRDb25maWdFbGVtZW50cygpCi0JICB7Ci0JICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWcgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmVjbGlwc2Uud3N0LndzIiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2F0b3IiKTsKLQkgICAgcmV0dXJuIGNvbmZpZzsgICAgCi0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV29ya3NwYWNlV1NETExvY2F0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV29ya3NwYWNlV1NETExvY2F0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQzMGRkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dvcmtzcGFjZVdTRExMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLS8qKgotICogRXh0ZW5kcyB0aGUgV2ViIFNlcnZpY2VzIEZpbmRlciBGcmFtZXdvcmsuCi0gKiBGaW5kcyBhbGwgLndzZGwgZmlsZXMgaW4gdGhlIHdvcmtzcGFjZS4KLSAqIE5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5LiAgV29ya3NwYWNlV1NETExvY2F0b3IgcmVnaXN0ZXJzIHdpdGggV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSAKLSAqIGFuZCBpcyBhY2Nlc3NlZCBieSB0aGUge0BsaW5rIFdlYlNlcnZpY2VGaW5kZXJ9LiAKLSAqLwotCi1wdWJsaWMgY2xhc3MgV29ya3NwYWNlV1NETExvY2F0b3IgZXh0ZW5kcyBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yCi17Ci0KLQlwcm90ZWN0ZWQgTGlzdCB3c2RsU2VydmljZXMgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTEFURk9STV9SRVMgPSAicGxhdGZvcm06L3Jlc291cmNlIjsgIC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9FWFQgPSAid3NkbCI7ICAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgV29ya3NwYWNlV1NETExvY2F0b3IoKQotCXsKLQkJc3VwZXIoKTsJCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiBhbGwgLndzZGwgZmlsZXMgaW4gdGhlIHdvcmtzcGFjZS4gIEN1cnJlbnRseSBkb2VzIG5vdCBlbGltaW5hdGUgbXVsdGlwbGUgCi0JICogb2NjdXJlbmNlcyBvZiB0aGUgc2FtZSB3ZWIgc2VydmljZS4gCi0JICogCi0JICogVE9ETzogYWRkIGEgbGlzdGVuZXIgdG8gdGhlIHdvcmtzcGFjZSByZXNvdXJjZSB0cmVlIHNvIHRoYXQgZ2V0V2ViU2VydmljZXMgZG9lc24ndCBhbHdheXMKLQkgKiB1c2UgdGhlIFdTRExWaXNpdG9yIHRvIHdhbGsgdGhlIGVudGlyZSByZXNvdXJjZSB0cmVlLiAgVGhhdCBzaG91bGQgb25seSBoYXBwZW4gb25jZS4gIEFmdGVyCi0JICogdGhhdCB0aGUgcmVzb3VyY2UgdHJlZSBjYW4gYmUgbW9uaXRvcmVkIGZvciBtb2RpZmljYXRpb25zIHRvIC53c2RsIGZpbGVzIGFuZCBjaGFuZ2VzIG1hZGUgdG8gYSBjYWNoZS4gCi0JICogCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsIHBvc3NpYmx5IG51bGwuCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZXMgKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQl7CQotCQlpZiAod3NkbFNlcnZpY2VzID09IG51bGwpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCUlXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCVdTRExWaXNpdG9yIHZpc2l0b3IgPSBuZXcgV1NETFZpc2l0b3IoKTsKLQkJCQlyb290LmFjY2VwdCh2aXNpdG9yKTsJCQotCQkJCXdzZGxTZXJ2aWNlcyA9IHZpc2l0b3IuZ2V0V1NETCgpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkKLQkJCXsKLQkJCQkvLyBEbyBub3RoaW5nLgotCQkJfQotCQl9Ci0JCXJldHVybiB3c2RsU2VydmljZXM7CQkKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIGFsbCAud3NkbCBmaWxlcyBpbiB0aGUgZ2l2ZW4gcHJvamVjdC4KLQkgKiBDdXJyZW50bHkgZG9lcyBub3QgZWxpbWluYXRlIG11bHRpcGxlIG9jY3VyZW5jZXMgb2YgdGhlIHNhbWUgd2ViIHNlcnZpY2UuIAotCSAqIAotCSAqIFRPRE86IGFkZCBhIGxpc3RlbmVyIHRvIHRoZSB3b3Jrc3BhY2UgcmVzb3VyY2UgdHJlZSBzbyB0aGF0IGdldFdlYlNlcnZpY2VzIGRvZXNuJ3QgYWx3YXlzCi0JICogdXNlIHRoZSBXU0RMVmlzaXRvciB0byB3YWxrIHRoZSBlbnRpcmUgcmVzb3VyY2UgdHJlZS4gIFRoYXQgc2hvdWxkIG9ubHkgaGFwcGVuIG9uY2UuICBBZnRlcgotCSAqIHRoYXQgdGhlIHJlc291cmNlIHRyZWUgY2FuIGJlIG1vbml0b3JlZCBmb3IgbW9kaWZpY2F0aW9ucyB0byAud3NkbCBmaWxlcyBhbmQgY2hhbmdlcyBtYWRlIHRvIGEgY2FjaGUuIAotCSAqIAotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZXMgKElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQl7Ci0JCVdTRExWaXNpdG9yIHZpc2l0b3IgPSBuZXcgV1NETFZpc2l0b3IoKTsKLQkJaWYgKHByb2plY3RzICE9IG51bGwpCi0JCXsKLQkJCWZvciAoaW50IHA9MDsgcDxwcm9qZWN0cy5sZW5ndGg7IHArKykKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCXByb2plY3RzW3BdLmFjY2VwdCh2aXNpdG9yKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXgpCi0JCQkJewotCQkJCQkvLyBEbyBub3RoaW5nLgotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gdmlzaXRvci5nZXRXU0RMKCk7Ci0JfQotCi0JLyoqCi0JICogIFVzZXMgdGhlIFZpc2l0b3IgcGF0dGVybiB0byB3YWxrIHRoZSB3b3Jrc3BhY2UgcmVzb3VyY2UgdHJlZQotCSAqLwotCXByaXZhdGUgY2xhc3MgV1NETFZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VWaXNpdG9yCi0JewotCi0JCXByaXZhdGUgVmVjdG9yIHdzZGwgPSBuZXcgVmVjdG9yKCk7Ci0KLQkJLyoqCi0JCSAqIHZpc2l0cyBldmVyeSBub2RlIG9uIHRoZSByZXNvdXJjZSB0cmVlIHN0b3BwaW5nIGEgZmlsZSByZXNvdXJjZXMKLQkJICogaWYgZmlsZSByZXNvdXJjZSBoYXMgZXh0ZW5zaW9uIC53c2RsIGEgV2ViU2VydmljZUluZm8gb2JqZWN0IGlzIGNyZWF0ZWQgYW5kIGFkZGVkIHRvIGEgdmVjdG9yIAotCQkgKiAgVE9ETzogbG9vayBhdCBjYWNoaW5nIHRvIGVsaW1pbmF0ZSBkdXBsaWNhdGUgd2ViIHNlcnZpY2UgZGVmaW5pdGlvbnMgaW4gdGhlIHZlY3RvciByZXR1cm5lZAotCQkgKiAgVE9ETzogYWRkIG1vcmUgaW5mb3JtYXRpb24gdG8gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdC4gIEN1cnJlbnRseSBvbmx5IHRoZSBxdWFsaWZpZWQgZmlsZW5hbWUgaXMgYWRkZWQuCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2UgcmVzb3VyY2UpCi0JCXsKLQkJCWlmIChyZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpCi0JCQl7ICAgICAgICAKLQkJCQlTdHJpbmcgZXh0ID0gcmVzb3VyY2UuZ2V0RmlsZUV4dGVuc2lvbigpOwotCQkJCWlmIChleHQgIT0gbnVsbCAmJiBleHQuZXF1YWxzSWdub3JlQ2FzZShXU0RMX0VYVCkpCi0JCQkJewotCQkJCQlTdHJpbmcgdXJsU3RyaW5nID0gUExBVEZPUk1fUkVTICsgcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQkJCQlXZWJTZXJ2aWNlSW5mbyB3c0luZm8gPSBuZXcgV2ViU2VydmljZUluZm8oKTsKLQkJCQkJd3NJbmZvLnNldFdzZGxVUkwodXJsU3RyaW5nKTsgICAgICAgICAgIAotCQkJCQl3c2RsLmFkZCh3c0luZm8pOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJLyoqCi0JCSAqIFJldHVybnMgYSB2ZWN0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkJICogQHJldHVybiB2ZWN0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cwotCQkgKi8KLQkJcHVibGljIFZlY3RvciBnZXRXU0RMKCkKLQkJewotCQkJcmV0dXJuIHdzZGw7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzaWwvQWRkV1NETFRvV1NJTENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NpbC9BZGRXU0RMVG9XU0lMQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzA4Y2JhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NpbC9BZGRXU0RMVG9XU0lMQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NpbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkluc3BlY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi5FeHRlbnNpb25CdWlsZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24ud3NkbC5JbXBsZW1lbnRlZEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLlJlZmVyZW5jZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuUmVmZXJlbmNlZFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLnhtbC5YTUxXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuSVVSSUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuVVJJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLklsbGVnYWxBcmd1bWVudHNFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldTSUxNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRXU0RMVG9XU0lMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR19XU0lMID0gIi13c2lsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHX1dTREwgPSAiLXdzZGwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUkdfUkVTT0xWRV9XU0RMID0gIi1yZXNvbHZld3NkbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR19IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUgPSAiLWh0dHB1c2VybmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR19IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQgPSAiLWh0dHBwYXNzd29yZCI7Ci0gIHByaXZhdGUgV1dXQXV0aGVudGljYXRpb25IYW5kbGVyIHd3d0F1dGhIYW5kbGVyXzsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBhcmdzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NpbF87Ci0gIHByaXZhdGUgQXJyYXlMaXN0IHdzZGxzXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlc29sdmVXU0RMXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cFVzZXJuYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cFBhc3N3b3JkXzsKLQotICBwdWJsaWMgQWRkV1NETFRvV1NJTENvbW1hbmQoKQotICB7Ci0gICAgd3d3QXV0aEhhbmRsZXJfID0gbnVsbDsKLSAgICBhcmdzXyA9IG5ldyBTdHJpbmdbMF07Ci0gICAgY2xlYXJQYXJzZWRBcmdzKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2xlYXJQYXJzZWRBcmdzKCkKLSAgewotICAgIHdzaWxfID0gbnVsbDsKLSAgICBpZiAod3NkbHNfID09IG51bGwpCi0gICAgICB3c2Rsc18gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZWxzZQotICAgICAgd3NkbHNfLmNsZWFyKCk7Ci0gICAgcmVzb2x2ZVdTRExfID0gZmFsc2U7Ci0gICAgaHR0cFVzZXJuYW1lXyA9IG51bGw7Ci0gICAgaHR0cFBhc3N3b3JkXyA9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogRXhlY3V0ZXMgdGhlIENvbW1hbmQuCi0gICAqIAotICAgKiBAcGFyYW0gZW52aXJvbm1lbnQKLSAgICogICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQuIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEByZXR1cm4gQSA8Y29kZT5TdGF0dXM8L2NvZGU+IG9iamVjdCBpbmRpY2F0aW5nIHRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlCi0gICAqICAgICAgICAgPGNvZGU+ZXhlY3V0ZTwvY29kZT4gbWV0aG9kIHdhcyBzdWNjZXNzZnVsLiBBIHZhbHVkIG9mIDxjb2RlPm51bGw8L2NvZGU+LAotICAgKiAgICAgICAgIG9yIGEgU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZiBsZXNzIHRoYW4gPGNvZGU+U3RhdHVzLkVSUk9SPC9jb2RlPgotICAgKiAgICAgICAgIHNpZ25pZmllcyBzdWNjZXNzLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAgIElVUklGYWN0b3J5IHVyaUZhY3RvcnkgPSBlbnZpcm9ubWVudC5nZXRVUklGYWN0b3J5KCk7Ci0gICAgLy8gUGFyc2UgYXJndW1lbnRzCi0gICAgdHJ5Ci0gICAgewotICAgICAgcGFyc2VBcmd1bWVudHMoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24gaWFlKQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9JTExFR0FMX0FSR1VNRU5UUywgaWFlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9JTlZBTElEX0FSR1VNRU5UUywgZSk7Ci0gICAgfQotICAgIC8vIENyZWF0ZSBuZXcgV1NJTCBkb2N1bWVudAotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jdW1lbnQgPSBudWxsOwotICAgIFVSTCB3c2lsVVJMID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICB3c2lsRG9jdW1lbnQgPSBXU0lMRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLSAgICAgIHdzaWxVUkwgPSBuZXcgVVJMKHdzaWxfKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX0lOVkFMSURfV1NJTF9VUkksIG11cmxlKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTSUxFeGNlcHRpb24gd3NpbGUpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTiwgd3NpbGUpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAvLyBSZWFkIFdTSUwKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnB1dFN0cmVhbSBpcyA9IHVyaUZhY3RvcnkubmV3VVJJKHdzaWxVUkwpLmdldElucHV0U3RyZWFtKCk7Ci0gICAgICBpZiAoaXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgd3NpbERvY3VtZW50LnJlYWQobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0gICAgICAgIGlzLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChVUklFeGNlcHRpb24gdXJpZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VORVhQRUNURURfRVhDRVBUSU9OLCB1cmllKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VORVhQRUNURURfRVhDRVBUSU9OLCBpb2UpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICBjYXRjaCAoV1NJTEV4Y2VwdGlvbiB3c2lsZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VORVhQRUNURURfRVhDRVBUSU9OLCB3c2lsZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIC8vIGludGVybmFsRXhlY3V0ZQotICAgIFN0cmluZyBodHRwVXNlcm5hbWUgPSBudWxsOwotICAgIFN0cmluZyBodHRwUGFzc3dvcmQgPSBudWxsOwotICAgIGlmICh3c2Rsc18uc2l6ZSgpID09IDEgJiYgaHR0cFVzZXJuYW1lXyAhPSBudWxsICYmIGh0dHBQYXNzd29yZF8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBodHRwVXNlcm5hbWUgPSBodHRwVXNlcm5hbWVfOwotICAgICAgaHR0cFBhc3N3b3JkID0gaHR0cFBhc3N3b3JkXzsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHdzZGxzXy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFN0cmluZyB3c2RsID0gKFN0cmluZykgaXQubmV4dCgpOwotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBudWxsOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IGludGVybmFsRXhlY3V0ZShlbnZpcm9ubWVudCwgd3NpbERvY3VtZW50LCBwbGF0Zm9ybTJGaWxlKHVyaUZhY3RvcnksIHdzaWxfKSwgd3NkbCwgaHR0cFVzZXJuYW1lLCBodHRwUGFzc3dvcmQpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHd3d2FlKQotICAgICAgewotICAgICAgICBpZiAod3d3QXV0aEhhbmRsZXJfICE9IG51bGwgJiYgaHR0cFVzZXJuYW1lID09IG51bGwgJiYgaHR0cFBhc3N3b3JkID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB3d3dBdXRoSGFuZGxlcl8uaGFuZGxlV1dXQXV0aGVudGljYXRpb24od3d3YWUpOwotICAgICAgICAgIFN0cmluZyBoYW5kbGVyVXNlcm5hbWUgPSB3d3dBdXRoSGFuZGxlcl8uZ2V0VXNlcm5hbWUoKTsKLSAgICAgICAgICBTdHJpbmcgaGFuZGxlclBhc3N3b3JkID0gd3d3QXV0aEhhbmRsZXJfLmdldFBhc3N3b3JkKCk7Ci0gICAgICAgICAgaWYgKGhhbmRsZXJVc2VybmFtZSAhPSBudWxsICYmIGhhbmRsZXJQYXNzd29yZCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBzdGF0dXMgPSBpbnRlcm5hbEV4ZWN1dGUoZW52aXJvbm1lbnQsIHdzaWxEb2N1bWVudCwgcGxhdGZvcm0yRmlsZSh1cmlGYWN0b3J5LCB3c2lsXyksIHdzZGwsIGhhbmRsZXJVc2VybmFtZSwgaGFuZGxlclBhc3N3b3JkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB3d3dhZTIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIElTdGF0dXMgd3d3YWVTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTlJFU09MVkFCTEVfV1NETCwgd3d3YWUyLmdldElPRXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Iod3d3YWVTdGF0dXMpOwotICAgICAgICAgICAgICByZXR1cm4gd3d3YWVTdGF0dXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzdGF0dXMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIElTdGF0dXMgcyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VOUkVTT0xWQUJMRV9XU0RMLCB3d3dhZS5nZXRJT0V4Y2VwdGlvbigpKTsKLSAgICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Iocyk7Ci0gICAgICAgICAgcmV0dXJuIHM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSAhPSBTdGF0dXMuT0spCi0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIC8vIFdyaXRlIFdTSUwKLSAgICB0cnkKLSAgICB7Ci0gICAgICBYTUxXcml0ZXIgeG1sV3JpdGVyID0gbmV3IFhNTFdyaXRlcigpOwotICAgICAgT3V0cHV0U3RyZWFtIG9zID0gdXJpRmFjdG9yeS5uZXdVUkkod3NpbFVSTCkuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgICBpZiAob3MgIT0gbnVsbCkKLSAgICAgICAgeG1sV3JpdGVyLndyaXRlRG9jdW1lbnQod3NpbERvY3VtZW50LCBvcyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOwotICAgICAgb3MuY2xvc2UoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVSSUV4Y2VwdGlvbiB1cmllKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfV1JJVEVfV1NJTCwgdXJpZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9XUklURV9XU0lMLCBpb2UpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICBjYXRjaCAoV1NJTEV4Y2VwdGlvbiB3c2lsZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX1dTSUwsIHdzaWxlKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwcml2YXRlIElTdGF0dXMgaW50ZXJuYWxFeGVjdXRlKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgV1NJTERvY3VtZW50IHdzaWxEb2N1bWVudCwgU3RyaW5nIHdzaWwsIFN0cmluZyB3c2RsLCBTdHJpbmcgaHR0cFVzZXJuYW1lLCBTdHJpbmcgaHR0cFBhc3N3b3JkKSB0aHJvd3MgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgQXJyYXlMaXN0IHdzZGxTZXJ2aWNlID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEFycmF5TGlzdCB3c2RsQmluZGluZyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAocmVzb2x2ZVdTRExfKQotICAgIHsKLSAgICAgIC8vIFBhcnNlIFdTREwKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkZWZpbml0aW9uID0gcGFyc2VXU0RMKHdzZGwsIHdzZGxTZXJ2aWNlLCB3c2RsQmluZGluZywgaHR0cFVzZXJuYW1lLCBodHRwUGFzc3dvcmQpOwotICAgICAgfQotICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAgIHsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJJLCBtdXJsZSk7Ci0gICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLSAgICAgIHsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTlJFU09MVkFCTEVfV1NETCwgaW9lKTsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBwY2UpCi0gICAgICB7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIHBjZSk7Ci0gICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgfQotICAgICAgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBzYXhlKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX01BTEZPUk1FRF9XU0RMLCBzYXhlKTsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIEFkZCBXU0RMIHRvIFdTSUwKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jdW1lbnQuZ2V0SW5zcGVjdGlvbigpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gd3NpbERvY3VtZW50LmNyZWF0ZVNlcnZpY2UoKTsKLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgZG9jdW1lbnRhdGlvbiA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLSAgICAgICAgQWJzdHJhY3Qgc2VydmljZUFic3RyYWN0ID0gd3NpbERvY3VtZW50LmNyZWF0ZUFic3RyYWN0KCk7Ci0gICAgICAgIHNlcnZpY2VBYnN0cmFjdC5zZXRUZXh0KEVsZW1lbnQyU3RyaW5nKGRvY3VtZW50YXRpb24pKTsKLSAgICAgICAgc2VydmljZS5hZGRBYnN0cmFjdChzZXJ2aWNlQWJzdHJhY3QpOwotICAgICAgfQotICAgICAgRGVzY3JpcHRpb24gZGVzYyA9IHdzaWxEb2N1bWVudC5jcmVhdGVEZXNjcmlwdGlvbigpOwotICAgICAgZGVzYy5zZXRSZWZlcmVuY2VkTmFtZXNwYWNlKFdTRExDb25zdGFudHMuTlNfVVJJX1dTREwpOwotICAgICAgZGVzYy5zZXRMb2NhdGlvbihnZXRSZWxhdGl2ZVVSSSh3c2lsLCB3c2RsKSk7Ci0gICAgICBFeHRlbnNpb25CdWlsZGVyIGV4dEJ1aWxkZXIgPSB3c2lsRG9jdW1lbnQuZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRCdWlsZGVyKFdTRExDb25zdGFudHMuTlNfVVJJX1dTSUxfV1NETCk7Ci0gICAgICBpZiAoZGVmaW5pdGlvbiA9PSBudWxsIHx8IGVuZHBvaW50UHJlc2VudChkZWZpbml0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHdzZGxTZXJ2aWNlLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlID0gKFJlZmVyZW5jZSkgZXh0QnVpbGRlci5jcmVhdGVFbGVtZW50KG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLk5TX1VSSV9XU0lMX1dTREwsIFdTRExDb25zdGFudHMuRUxFTV9SRUZFUkVOQ0UpKTsKLSAgICAgICAgICByZWZlcmVuY2Uuc2V0RW5kcG9pbnRQcmVzZW50KG5ldyBCb29sZWFuKHRydWUpKTsKLSAgICAgICAgICBSZWZlcmVuY2VkU2VydmljZSByZWZTZXJ2aWNlID0gKFJlZmVyZW5jZWRTZXJ2aWNlKSBleHRCdWlsZGVyLmNyZWF0ZUVsZW1lbnQobmV3IFFOYW1lKFdTRExDb25zdGFudHMuTlNfVVJJX1dTSUxfV1NETCwgV1NETENvbnN0YW50cy5FTEVNX1JFRl9TRVJWSUNFKSk7Ci0gICAgICAgICAgcmVmU2VydmljZS5zZXRSZWZlcmVuY2VkU2VydmljZU5hbWUoKFFOYW1lKSBpdC5uZXh0KCkpOwotICAgICAgICAgIHJlZmVyZW5jZS5zZXRSZWZlcmVuY2VkU2VydmljZShyZWZTZXJ2aWNlKTsKLSAgICAgICAgICBkZXNjLnNldEV4dGVuc2lvbkVsZW1lbnQocmVmZXJlbmNlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlID0gKFJlZmVyZW5jZSkgZXh0QnVpbGRlci5jcmVhdGVFbGVtZW50KG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLk5TX1VSSV9XU0lMX1dTREwsIFdTRExDb25zdGFudHMuRUxFTV9SRUZFUkVOQ0UpKTsKLSAgICAgICAgcmVmZXJlbmNlLnNldEVuZHBvaW50UHJlc2VudChuZXcgQm9vbGVhbihmYWxzZSkpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gd3NkbEJpbmRpbmcuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIEltcGxlbWVudGVkQmluZGluZyBiaW5kaW5nID0gKEltcGxlbWVudGVkQmluZGluZykgZXh0QnVpbGRlci5jcmVhdGVFbGVtZW50KG5ldyBRTmFtZShXU0RMQ29uc3RhbnRzLk5TX1VSSV9XU0lMX1dTREwsIFdTRExDb25zdGFudHMuRUxFTV9JTVBMX0JJTkRJTkcpKTsKLSAgICAgICAgICBiaW5kaW5nLnNldEJpbmRpbmdOYW1lKChRTmFtZSkgaXQubmV4dCgpKTsKLSAgICAgICAgICByZWZlcmVuY2UuYWRkSW1wbGVtZW50ZWRCaW5kaW5nKGJpbmRpbmcpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzZXJ2aWNlLmFkZERlc2NyaXB0aW9uKGRlc2MpOwotICAgICAgaW5zcGVjdGlvbi5hZGRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIH0KLSAgICBjYXRjaCAoV1NJTEV4Y2VwdGlvbiB3c2lsZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VORVhQRUNURURfRVhDRVBUSU9OLCB3c2lsZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VORVhQRUNURURfRVhDRVBUSU9OLCB0KTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiwgYW5kIG9ubHkgaWYsIHRoZSBDb21tYW5kJ3MgPGNvZGU+dW5kbzwvY29kZT4KLSAgICogbWV0aG9kIGlzIHN1cHBvcnRlZC4KLSAgICogCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgQ29tbWFuZCBzdXBwb3J0cyBiZWluZyB1bmRvbmUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VuZG9hYmxlKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBVbmRvZXMgdGhlIENvbW1hbmQuCi0gICAqIAotICAgKiBAcGFyYW0gZW52aXJvbm1lbnQKLSAgICogICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQuIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEByZXR1cm4gQSA8Y29kZT5TdGF0dXM8L2NvZGU+IG9iamVjdCBpbmRpY2F0aW5nIHRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlCi0gICAqICAgICAgICAgPGNvZGU+dW5kbzwvY29kZT4gbWV0aG9kIHdhcyBzdWNjZXNzZnVsLiBBIHZhbHVkIG9mIDxjb2RlPm51bGw8L2NvZGU+LAotICAgKiAgICAgICAgIG9yIGEgU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZiBsZXNzIHRoYW4gPGNvZGU+U3RhdHVzLkVSUk9SPC9jb2RlPgotICAgKiAgICAgICAgIHNpZ25pZmllcyBzdWNjZXNzLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgdW5kbyhJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBwYXJzZVdTREwoU3RyaW5nIHdzZGwsIEFycmF5TGlzdCB3c2RsU2VydmljZSwgQXJyYXlMaXN0IHdzZGxCaW5kaW5nLCBTdHJpbmcgaHR0cFVzZXJuYW1lLCBTdHJpbmcgaHR0cFBhc3N3b3JkKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgV2ViU2VydmljZXNQYXJzZXIgd3NQYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXIod3NkbCk7Ci0gICAgaWYgKGh0dHBVc2VybmFtZSAhPSBudWxsICYmIGh0dHBQYXNzd29yZCAhPSBudWxsKQotICAgIHsKLSAgICAgIHdzUGFyc2VyLnNldEhUVFBCYXNpY0F1dGhVc2VybmFtZShodHRwVXNlcm5hbWUpOwotICAgICAgd3NQYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFBhc3N3b3JkKGh0dHBQYXNzd29yZCk7Ci0gICAgfQotICAgIHdzUGFyc2VyLnBhcnNlKFdlYlNlcnZpY2VzUGFyc2VyLlBBUlNFX05PTkUpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGwpOwotICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgTWFwIHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VzLmtleVNldCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHdzZGxTZXJ2aWNlLmFkZChwYXJzZVFOYW1lKChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSBpdC5uZXh0KCkpKTsKLSAgICAgIE1hcCBiaW5kaW5ncyA9IGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBiaW5kaW5ncy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB3c2RsQmluZGluZy5hZGQocGFyc2VRTmFtZSgoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkgaXQubmV4dCgpKSk7Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGVuZHBvaW50UHJlc2VudChEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICByZXR1cm4gKGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS5zaXplKCkgPiAwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBcmd1bWVudHMoKQotICB7Ci0gICAgcmV0dXJuIGFyZ3NfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QXJndW1lbnRzKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBhcmdzXyA9IGFyZ3M7Ci0gIH0KLQotICBwdWJsaWMgV1dXQXV0aGVudGljYXRpb25IYW5kbGVyIGdldFdXV0F1dGhlbnRpY2F0aW9uSGFuZGxlcigpCi0gIHsKLSAgICByZXR1cm4gd3d3QXV0aEhhbmRsZXJfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V1dXQXV0aGVudGljYXRpb25IYW5kbGVyKFdXV0F1dGhlbnRpY2F0aW9uSGFuZGxlciB3d3dBdXRoSGFuZGxlcikKLSAgewotICAgIHd3d0F1dGhIYW5kbGVyXyA9IHd3d0F1dGhIYW5kbGVyOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlQXJndW1lbnRzKCkgdGhyb3dzIElsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24KLSAgewotICAgIGNsZWFyUGFyc2VkQXJncygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnc18ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKEFSR19XU0lMLmVxdWFscyhhcmdzX1tpXSkpCi0gICAgICAgIHdzaWxfID0gYXJnc19bKytpXTsKLSAgICAgIGVsc2UgaWYgKEFSR19XU0RMLmVxdWFscyhhcmdzX1tpXSkpCi0gICAgICAgIHdzZGxzXy5hZGQoYXJnc19bKytpXSk7Ci0gICAgICBlbHNlIGlmIChBUkdfUkVTT0xWRV9XU0RMLmVxdWFscyhhcmdzX1tpXSkpCi0gICAgICAgIHJlc29sdmVXU0RMXyA9IHRydWU7Ci0gICAgICBlbHNlIGlmIChBUkdfSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FLmVxdWFscyhhcmdzX1tpXSkpCi0gICAgICAgIGh0dHBVc2VybmFtZV8gPSBhcmdzX1srK2ldOwotICAgICAgZWxzZSBpZiAoQVJHX0hUVFBfQkFTSUNfQVVUSF9QQVNTV09SRC5lcXVhbHMoYXJnc19baV0pKQotICAgICAgICBodHRwUGFzc3dvcmRfID0gYXJnc19bKytpXTsKLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24oYXJnc19baV0pOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgUU5hbWUgcGFyc2VRTmFtZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHFuYW1lKQotICB7Ci0gICAgcmV0dXJuIG5ldyBRTmFtZShxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSwgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgRWxlbWVudDJTdHJpbmcoRWxlbWVudCBlKSB0aHJvd3MgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIGJ5dGVbXSBiID0gbmV3IGJ5dGVbMF07Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBET01Tb3VyY2UgZG9tU291cmNlID0gbmV3IERPTVNvdXJjZShlKTsKLSAgICAgIFRyYW5zZm9ybWVyIHNlcmlhbGl6ZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigpOwotICAgICAgc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotICAgICAgc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiMiIpOwotICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgICBzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQoYmFvcykpOwotICAgICAgYmFvcy5jbG9zZSgpOwotICAgICAgYiA9IGJhb3MudG9CeXRlQXJyYXkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBTdHJpbmcoYik7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBwbGF0Zm9ybTJGaWxlKElVUklGYWN0b3J5IHVyaUZhY3RvcnksIFN0cmluZyB1cmkpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gdXJpRmFjdG9yeS5uZXdVUkkodXJpKS5hc0ZpbGUoKS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICByZXR1cm4gdXJpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIEZXRF9TTEFTSCA9ICcvJzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIEJXRF9TTEFTSCA9ICdcXCc7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIHBhcmVudERpciA9ICIuLi8iOwotCi0gIHByaXZhdGUgU3RyaW5nIGdldFJlbGF0aXZlVVJJKFN0cmluZyBiYXNlVVJJLCBTdHJpbmcgdGFyZ2V0VVJJKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIGJhc2VVUklDb3B5ID0gYmFzZVVSSS5yZXBsYWNlKEJXRF9TTEFTSCwgRldEX1NMQVNIKTsKLSAgICAgIFN0cmluZyB0YXJnZXRVUklDb3B5ID0gdGFyZ2V0VVJJLnJlcGxhY2UoQldEX1NMQVNILCBGV0RfU0xBU0gpOwotICAgICAgaW50IG1hdGNoaW5nSW5kZXggPSAtMTsKLSAgICAgIGludCBpbmRleCA9IHRhcmdldFVSSUNvcHkuaW5kZXhPZihGV0RfU0xBU0gpOwotICAgICAgd2hpbGUgKGluZGV4ICE9IC0xKQotICAgICAgewotICAgICAgICBpZiAoYmFzZVVSSUNvcHkuc3RhcnRzV2l0aCh0YXJnZXRVUklDb3B5LnN1YnN0cmluZygwLCBpbmRleCArIDEpKSkKLSAgICAgICAgewotICAgICAgICAgIG1hdGNoaW5nSW5kZXggPSBpbmRleDsKLSAgICAgICAgICBpbmRleCA9IHRhcmdldFVSSUNvcHkuaW5kZXhPZihGV0RfU0xBU0gsIGluZGV4ICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKG1hdGNoaW5nSW5kZXggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGludCBzbGFzaENvdW50ID0gLTE7Ci0gICAgICAgIGludCBmcm9tSW5kZXggPSBtYXRjaGluZ0luZGV4OwotICAgICAgICB3aGlsZSAoZnJvbUluZGV4ICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgc2xhc2hDb3VudCsrOwotICAgICAgICAgIGZyb21JbmRleCA9IGJhc2VVUklDb3B5LmluZGV4T2YoRldEX1NMQVNILCBmcm9tSW5kZXggKyAxKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmdCdWZmZXIgcmVsYXRpdmVVUkkgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2xhc2hDb3VudDsgaSsrKQotICAgICAgICAgIHJlbGF0aXZlVVJJLmFwcGVuZChwYXJlbnREaXIpOwotICAgICAgICByZWxhdGl2ZVVSSS5hcHBlbmQodGFyZ2V0VVJJLnN1YnN0cmluZyhtYXRjaGluZ0luZGV4ICsgMSwgdGFyZ2V0VVJJLmxlbmd0aCgpKSk7Ci0gICAgICAgIHJldHVybiByZWxhdGl2ZVVSSS50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gdGFyZ2V0VVJJOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMTY4YmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFdlYlNlcnZpY2UgaW1wbGVtZW50cyBJV2ViU2VydmljZSB7Ci0JCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlSW5mbyBpbmZvOwotCi0JcHVibGljIEFic3RyYWN0V2ViU2VydmljZShXZWJTZXJ2aWNlSW5mbyBpbmZvKSB7Ci0JCXRoaXMuaW5mbyA9IGluZm87Ci0JfQotCQotCi0JcHVibGljIFdlYlNlcnZpY2VJbmZvIGdldFdlYlNlcnZpY2VJbmZvKCkgewotCQlyZXR1cm4gaW5mbzsKLQl9Ci0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCQotCi0JcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBkZXBsb3koSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGRldmVsb3AoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCQotCi0JcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBpbnN0YWxsKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCQotCi0JcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBydW4oSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmY2E1NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZUNsaWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQgaW1wbGVtZW50cyBJV2ViU2VydmljZUNsaWVudCB7Ci0JCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBpbmZvOwotCi0JcHVibGljIEFic3RyYWN0V2ViU2VydmljZUNsaWVudChXZWJTZXJ2aWNlQ2xpZW50SW5mbyBpbmZvKSB7Ci0JCXRoaXMuaW5mbyA9IGluZm87Ci0JfQotCQotCi0JcHVibGljIFdlYlNlcnZpY2VDbGllbnRJbmZvIGdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkgewotCQlyZXR1cm4gaW5mbzsKLQl9Ci0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCQotCi0JcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBkZXBsb3koSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGRldmVsb3AoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCQotCi0JcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBpbnN0YWxsKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCQotCi0JcHVibGljIGFic3RyYWN0IElDb21tYW5kRmFjdG9yeSBydW4oSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzkwMzNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lIGltcGxlbWVudHMgSVdlYlNlcnZpY2VSdW50aW1lIHsKLQotCXB1YmxpYyBhYnN0cmFjdCBJV2ViU2VydmljZSBnZXRXZWJTZXJ2aWNlKFdlYlNlcnZpY2VJbmZvIGluZm8pOwotCS8qKgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBJV2ViU2VydmljZUNsaWVudCBnZXRXZWJTZXJ2aWNlQ2xpZW50KFdlYlNlcnZpY2VDbGllbnRJbmZvIGluZm8pOwotCS8qKgotCSAqLwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgYW5ub3VuY2UoSVdlYlNlcnZpY2Ugd2ViU2VydmljZSkKLQl7Ci0JCS8vVE9ETyBwcm92aWRlIGEgYm9pbGVyLXBsYXRlIGFubm91bmNlIGltcGxlbWVudGF0aW9uLgotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGNlNTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTA3IDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMzAgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNiAgIDE5ODQzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi1wdWJsaWMgY2xhc3MgQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIgaW1wbGVtZW50cwotCQlJV2ViU2VydmljZVJ1bnRpbWVDaGVja2VyIHsKLQotCXB1YmxpYyBJU3RhdHVzIGNoZWNrUnVudGltZUNvbXBhdGliaWxpdHkoU3RyaW5nIHNlcnZlclR5cGVJZCwgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQsCi0JCQlTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyBwcm9qZWN0VHlwZUlkLCBTdHJpbmcgZWFyUHJvamVjdE5hbWUpIHsKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCXB1YmxpYyBJU3RhdHVzIGNoZWNrU2VydmljZUNsaWVudENvbXBhdGliaWxpdHkoYm9vbGVhbiBzZXJ2aWNlTmVlZEVBUiwKLQkJCVN0cmluZyBzZXJ2aWNlRUFSTmFtZSwgU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZSwKLQkJCWJvb2xlYW4gY2xpZW50TmVlZEVBUiwgU3RyaW5nIGNsaWVudEVBUk5hbWUsCi0JCQlTdHJpbmcgY2xpZW50UHJvamVjdE5hbWUpIHsKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUzNzE4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotcHVibGljIGludGVyZmFjZSBJQ29udGV4dCB7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0QXNzZW1ibGUoKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRDaGVja091dEZpbGVzKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50KCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0Q3JlYXRlRm9sZGVycygpOwotCQotCXB1YmxpYyBib29sZWFuIGdldERlcGxveSgpOwotCQotCXB1YmxpYyBib29sZWFuIGdldERldmVsb3AoKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0T3ZlcldyaXRlRmlsZXMoKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRQdWJsaXNoKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0UnVuKCk7Ci0JCi0JcHVibGljIFdlYlNlcnZpY2VTY2VuYXJpbyBnZXRTY2VuYXJpbygpOwotCQotCXB1YmxpYyBib29sZWFuIGdldFRlc3QoKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lNZXJnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JTWVyZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZGM3MjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lNZXJnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLQotLyoKLSAqIFRoZSBJTWVyZ2VyIGludGVyZmFjZSBoYW5kbGVzIG1lcmdpbmcgb2YgdGhlIGFycmF5IG9mIElGaWxlcy4gIFVzZXJzIG9mIHRoZSBJTWVyZ2VyIGludGVyZmFjZSBzaG91bGQ6Ci0gKiAxLiBDYWxsIGxvYWQoKSB3aXRoIHRoZSBhcnJheSBvZiBJRmlsZXMgdG8gbG9hZCBhbmQgc3RvcmVkIGluIG1lcmdlIG1vZGVscwotICogMi4gQ2FsbCBtZXJnZSgpIHRvIG1lcmdlIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBJRmlsZXMgd2l0aCB0aGUgbWVyZ2VkIG1vZGVscyB0aGF0IGhhZCBiZWVuIHN0b3JlZCAKLSAqIHByZXZpb3VzbHkgKGF0IHRoZSB0aW1lIGxvYWQgd2FzIGNhbGxlZCkuCi0gKiAKLSAqIFRoaXMgY2xhc3MgaXMgbm90IG1lYW50IHRvIGJlIGltcGxlbWVudGVkIGRpcmVjdGx5LiAgSW1wbGVtZW50ZXJzIHNob3VsZCBzdWJjbGFzcyB0aGUgTWVyZ2VyIGNsYXNzIGluc3RlYWQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSU1lcmdlciB7IAotCQotCS8qKgotCSAqIExvYWQgdGhlIHVyaXMgc3BlY2lmaWVkIHNvIHRoYXQgYSBtZXJnZSBjYW4gYmUgZG9uZSBsYXRlciBvbgotCSAqIEBwYXJhbSB1cmxzCi0JICogQHJldHVybiBJU3RhdHVzCi0JICovCi0JcHVibGljIElTdGF0dXMgbG9hZChJRmlsZVtdIGZpbGVzKTsKLQkKLQkvKioKLQkgKiBNZXJnZSB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBhcnJheSBvZiBJRmlsZXMgd2l0aCB3aGF0IGhhZCBiZWVuIHN0b3JlZCB3aGVuIGxvYWQgd2FzIGZpcnN0IGNhbGxlZCBhbmQgd3JpdGUgCi0JICogdGhlIG1lcmdlZCBjb250ZW50IGJhY2sgaW4gdGhlIGZpbGVzLiAKLQkgKiBAcGFyYW0gbW9uaXRvciBQcm9ncmVzcyBtb25pdG9yCi0JICogQHBhcmFtIHN0YXR1c0hhbmRsZXIgVGhlIHN0YXR1cyBoYW5kbGVyIHVzZWQgdG8gaGFuZGxlIHRoZSB3cml0aW5nIG9mIHRoZSBtZXJnZWQgY29udGVudAotCSAqIEByZXR1cm4gSVN0YXR1cwotCSAqLwotCXB1YmxpYyBJU3RhdHVzIG1lcmdlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlcik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVNlbGVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lTZWxlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg5M2I1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVNlbGVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1wdWJsaWMgaW50ZXJmYWNlIElTZWxlY3Rpb24gewotCQotCU9iamVjdFtdIGdldFNlbGVjdGlvbigpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjNlNjFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgSVdlYlNlcnZpY2UgewotCi0JLyoqCi0JICovCi0JcHVibGljIFdlYlNlcnZpY2VJbmZvIGdldFdlYlNlcnZpY2VJbmZvKCk7Ci0JCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXZlbG9wKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXBsb3koSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBpbnN0YWxsKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBydW4oSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZUNsaWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlQ2xpZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMjFlY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlQ2xpZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElXZWJTZXJ2aWNlQ2xpZW50IHsKLQkKLQkvKioKLQkgKi8KLQlwdWJsaWMgV2ViU2VydmljZUNsaWVudEluZm8gZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKTsKLQkKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRldmVsb3AoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRlcGxveShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgYXNzZW1ibGUoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGluc3RhbGwoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUHVibGlzaGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VQdWJsaXNoZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZkYzVlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VQdWJsaXNoZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVdlYlNlcnZpY2VQdWJsaXNoZXIgewotCQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgcHVibGlzaChJRW52aXJvbm1lbnQgZW52LCBJV2ViU2VydmljZSB3cyk7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVJ1bnRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVJ1bnRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4YzJlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VSdW50aW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgSVdlYlNlcnZpY2VSdW50aW1lIHsKLQkKLQkvKioKLQkgKi8KLQlwdWJsaWMgSVdlYlNlcnZpY2UgZ2V0V2ViU2VydmljZShXZWJTZXJ2aWNlSW5mbyBpbmZvKTsKLQkvKioKLQkgKi8KLQlwdWJsaWMgSVdlYlNlcnZpY2VDbGllbnQgZ2V0V2ViU2VydmljZUNsaWVudChXZWJTZXJ2aWNlQ2xpZW50SW5mbyBpbmZvKTsKLQkvKioKLQkgKi8KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFubm91bmNlKElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUnVudGltZUNoZWNrZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZlMzQ0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMTA3IDIwMzgyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMzAgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA4MDMyNiAgIDE5ODQzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci0KLS8qCi0gKiBUaGUgSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciBpbnRlcmZhY2UgYWxsb3cgdGhlIGV4dGVuZGVyIHRvIGhhdmUgYSB3YXkgdG8gY2hlY2sgdGhlIAotICogdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUncyBjb21wYXRpYmlsaXR5IHdpdGggc2VydmVyIHR5cGUsIHByb2plY3QsIHByb2plY3QgdHlwZSBhbmQgRUFSLgotICogVGhpcyBjbGFzcyBjYW4gYmUgcHJvdmlkZWQgYXMgdGhlIHJ1bnRpbWVDaGVja2VyIGF0dHJpYnV0ZSBpbiB0aGUgCi0gKiAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmNsaWVudFJ1bnRpbWVzIiBhbmQKLSAqICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuc2VydmljZVJ1bnRpbWVzIiBleHRlbnNpb24gcG9pbnRzLgotICovCi0KLXB1YmxpYyBpbnRlcmZhY2UgSVdlYlNlcnZpY2VSdW50aW1lQ2hlY2tlciB7Ci0KLQkvKioKLQkgKiBAcGFyYW0gc2VydmVyVHlwZUlkIHNlcnZlciB0eXBlIElECi0JICogQHBhcmFtIHNlcnZlckluc3RhbmFjZUlkIHNlcnZlciBpbnN0YW5jZSBJRAotCSAqIEBwYXJhbSBwcm9qZWN0TmFtZSBwcm9qZWN0IG5hbWUgCi0JICogQHBhcmFtIHByb2plY3RUeXBlSWQgcHJvamVjdCB0ZW1wbGF0ZSBJRCwgc2V0IHRvICIiIGlmIHRoZSBwcm9qZWN0IHNwZWNpZmllZCBieSBwcm9qZWN0TmFtZSBhbHJlYWR5IGV4aXN0IAotCSAqIEBwYXJhbSBlYXJQcm9qZWN0TmFtZSBFQVIgcHJvamVjdCBuYW1lCi0JICogQHJldHVybiBJU3RhdHVzCi0JICovCi0JcHVibGljIElTdGF0dXMgY2hlY2tSdW50aW1lQ29tcGF0aWJpbGl0eShTdHJpbmcgc2VydmVyVHlwZUlkLCBTdHJpbmcgc2VydmVySW5zdGFuY2VJZCwgCi0JCQlTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyBwcm9qZWN0VHlwZUlkLCBTdHJpbmcgZWFyUHJvamVjdE5hbWUpOwotCQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2aWNlTmVlZEVBUgotCSAqIEBwYXJhbSBzZXJ2aWNlRUFSTmFtZQotCSAqIEBwYXJhbSBzZXJ2aWNlUHJvamVjdE5hbWUKLQkgKiBAcGFyYW0gY2xpZW50TmVlZEVBUgotCSAqIEBwYXJhbSBjbGllbnRFQVJOYW1lCi0JICogQHBhcmFtIGNsaWVudFByb2plY3ROYW1lCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGNoZWNrU2VydmljZUNsaWVudENvbXBhdGliaWxpdHkoYm9vbGVhbiBzZXJ2aWNlTmVlZEVBUiwgU3RyaW5nIHNlcnZpY2VFQVJOYW1lLCBTdHJpbmcgc2VydmljZVByb2plY3ROYW1lLCAKLQkJCWJvb2xlYW4gY2xpZW50TmVlZEVBUiwgU3RyaW5nIGNsaWVudEVBUk5hbWUsIFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZSk7Ci0JCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VUZXN0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDc0OGFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGludGVyZmFjZSBJV2ViU2VydmljZVRlc3RlciB7Ci0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2VuZXJhdGUoVGVzdEluZm8gdGVzdEluZm8pOwotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGxhdW5jaChUZXN0SW5mbyB0ZXN0SW5mbyk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvTWVyZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvTWVyZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3OTU3ZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L01lcmdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci0KLS8qCi0gKiBNZXJnZXIgaXMgdGhlIEFic3RyYWN0IGNsYXNzIHRoYXQgc2hvdWxkIGJlIHN1YmNsYXNzZWQuIAotICovCi1wdWJsaWMgY2xhc3MgTWVyZ2VyIGltcGxlbWVudHMgSU1lcmdlciB7Ci0KLQlwdWJsaWMgSVN0YXR1cyBsb2FkKElGaWxlW10gZmlsZXMpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgbWVyZ2UoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1NpbXBsZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9TaW1wbGVDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODRiNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1NpbXBsZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLQotcHVibGljIGNsYXNzIFNpbXBsZUNvbnRleHQgaW1wbGVtZW50cyBJQ29udGV4dCB7Ci0KLQlib29sZWFuIGRldmVsb3A7Ci0JYm9vbGVhbiBhc3NlbWJsZTsKLQlib29sZWFuIGRlcGxveTsKLQlib29sZWFuIGluc3RhbGw7Ci0JYm9vbGVhbiBydW47Ci0JYm9vbGVhbiBjbGllbnQ7Ci0JYm9vbGVhbiB0ZXN0OwotCWJvb2xlYW4gcHVibGlzaDsKLQkKLQlXZWJTZXJ2aWNlU2NlbmFyaW8gc2NlbmFyaW87Ci0JCi0JYm9vbGVhbiBvdmVyd3JpdGVGaWxlczsKLQlib29sZWFuIGNyZWF0ZUZvbGRlcnM7Ci0JYm9vbGVhbiBjaGVja091dEZpbGVzOwotCQotCQotCQotCQotCXB1YmxpYyBTaW1wbGVDb250ZXh0KCkKLQl7Ci0JCXN1cGVyKCk7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotCXB1YmxpYyBTaW1wbGVDb250ZXh0KGJvb2xlYW4gZGV2ZWxvcCwgYm9vbGVhbiBhc3NlbWJsZSwgYm9vbGVhbiBkZXBsb3ksIGJvb2xlYW4gaW5zdGFsbCwgYm9vbGVhbiBydW4sIGJvb2xlYW4gY2xpZW50LCBib29sZWFuIHRlc3QsIGJvb2xlYW4gcHVibGlzaCwgV2ViU2VydmljZVNjZW5hcmlvIHNjZW5hcmlvLCBib29sZWFuIG92ZXJ3cml0ZUZpbGVzLCBib29sZWFuIGZvbGRlcnMsIGJvb2xlYW4gY2hlY2tPdXRGaWxlcykgewotCQlzdXBlcigpOwkJCi0JCXRoaXMuZGV2ZWxvcCA9IGRldmVsb3A7Ci0JCXRoaXMuYXNzZW1ibGUgPSBhc3NlbWJsZTsKLQkJdGhpcy5kZXBsb3kgPSBkZXBsb3k7Ci0JCXRoaXMuaW5zdGFsbCA9IGluc3RhbGw7Ci0JCXRoaXMucnVuID0gcnVuOwotCQl0aGlzLmNsaWVudCA9IGNsaWVudDsKLQkJdGhpcy50ZXN0ID0gdGVzdDsKLQkJdGhpcy5wdWJsaXNoID0gcHVibGlzaDsKLQkJdGhpcy5zY2VuYXJpbyA9IHNjZW5hcmlvOwotCQl0aGlzLm92ZXJ3cml0ZUZpbGVzID0gb3ZlcndyaXRlRmlsZXM7Ci0JCXRoaXMuY3JlYXRlRm9sZGVycyA9IGZvbGRlcnM7Ci0JCXRoaXMuY2hlY2tPdXRGaWxlcyA9IGNoZWNrT3V0RmlsZXM7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlKCkgewotCQlyZXR1cm4gYXNzZW1ibGU7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEFzc2VtYmxlKGJvb2xlYW4gYXNzZW1ibGUpIHsKLQkJdGhpcy5hc3NlbWJsZSA9IGFzc2VtYmxlOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRDaGVja091dEZpbGVzKCkgewotCQlyZXR1cm4gY2hlY2tPdXRGaWxlczsKLQl9Ci0JcHVibGljIHZvaWQgc2V0Q2hlY2tPdXRGaWxlcyhib29sZWFuIGNoZWNrT3V0RmlsZXMpIHsKLQkJdGhpcy5jaGVja091dEZpbGVzID0gY2hlY2tPdXRGaWxlczsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50KCkgewotCQlyZXR1cm4gY2xpZW50OwotCX0KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnQoYm9vbGVhbiBjbGllbnQpIHsKLQkJdGhpcy5jbGllbnQgPSBjbGllbnQ7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldENyZWF0ZUZvbGRlcnMoKSB7Ci0JCXJldHVybiBjcmVhdGVGb2xkZXJzOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRDcmVhdGVGb2xkZXJzKGJvb2xlYW4gY3JlYXRlRm9sZGVycykgewotCQl0aGlzLmNyZWF0ZUZvbGRlcnMgPSBjcmVhdGVGb2xkZXJzOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3koKSB7Ci0JCXJldHVybiBkZXBsb3k7Ci0JfQotCXB1YmxpYyB2b2lkIHNldERlcGxveShib29sZWFuIGRlcGxveSkgewotCQl0aGlzLmRlcGxveSA9IGRlcGxveTsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcCgpIHsKLQkJcmV0dXJuIGRldmVsb3A7Ci0JfQotCXB1YmxpYyB2b2lkIHNldERldmVsb3AoYm9vbGVhbiBkZXZlbG9wKSB7Ci0JCXRoaXMuZGV2ZWxvcCA9IGRldmVsb3A7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldEluc3RhbGwoKSB7Ci0JCXJldHVybiBpbnN0YWxsOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRJbnN0YWxsKGJvb2xlYW4gaW5zdGFsbCkgewotCQl0aGlzLmluc3RhbGwgPSBpbnN0YWxsOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRPdmVyV3JpdGVGaWxlcygpIHsKLQkJcmV0dXJuIG92ZXJ3cml0ZUZpbGVzOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRPdmVyV3JpdGVGaWxlcyhib29sZWFuIG92ZXJ3cml0ZUZpbGVzKSB7Ci0JCXRoaXMub3ZlcndyaXRlRmlsZXMgPSBvdmVyd3JpdGVGaWxlczsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0UHVibGlzaCgpIHsKLQkJcmV0dXJuIHB1Ymxpc2g7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFB1Ymxpc2goYm9vbGVhbiBwdWJsaXNoKSB7Ci0JCXRoaXMucHVibGlzaCA9IHB1Ymxpc2g7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldFJ1bigpIHsKLQkJcmV0dXJuIHJ1bjsKLQl9Ci0JcHVibGljIHZvaWQgc2V0UnVuKGJvb2xlYW4gcnVuKSB7Ci0JCXRoaXMucnVuID0gcnVuOwotCX0KLQlwdWJsaWMgV2ViU2VydmljZVNjZW5hcmlvIGdldFNjZW5hcmlvKCkgewotCQlyZXR1cm4gc2NlbmFyaW87Ci0JfQotCXB1YmxpYyB2b2lkIHNldFNjZW5hcmlvKFdlYlNlcnZpY2VTY2VuYXJpbyBzY2VuYXJpbykgewotCQl0aGlzLnNjZW5hcmlvID0gc2NlbmFyaW87Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldFRlc3QoKSB7Ci0JCXJldHVybiB0ZXN0OwotCX0KLQlwdWJsaWMgdm9pZCBzZXRUZXN0KGJvb2xlYW4gdGVzdCkgewotCQl0aGlzLnRlc3QgPSB0ZXN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9UZXN0SW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1Rlc3RJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkZjhkMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1Rlc3RJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjA4ICAgMTQ1NTI5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0vKioKLSAqIFRoaXMgaG9sZHMgaW5mbyB0aGF0IGNvbWVzIGZyb20gdXNlciBpbnB1dCBvciBzb21lIGNhbGN1bGF0aW9ucyB0aGF0IAotICogd2hpY2ggbWlnaHQgYmUgdXNlZnVsIHRvIGFueSB0ZXN0IGV4dGVuZGVycwotICovCi0KLXB1YmxpYyBjbGFzcyBUZXN0SW5mbyB7Ci0gIHByaXZhdGUgU3RyaW5nIGpzcEZvbGRlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgZ2VuZXJhdGlvblByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBwcm94eUJlYW47Ci0gIHByaXZhdGUgU3RyaW5nIHNldEVuZHBvaW50TWV0aG9kOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBjbGllbnRNb2R1bGU7Ci0gIHByaXZhdGUgYm9vbGVhbiBjbGllbnROZWVkRUFSOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRFQVJQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBjbGllbnRFQVJNb2R1bGU7Ci0gIHByaXZhdGUgQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSUQ7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFNlcnZlclR5cGVJRDsKLSAgcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcjsKLSAgcHJpdmF0ZSBJU2VydmVyIGNsaWVudEV4aXN0aW5nU2VydmVyOwotICBwcml2YXRlIExpc3QgZW5kcG9pbnRzOwotICBwcml2YXRlIFN0cmluZyB3c2RsU2VydmljZVVSTDsKLSAgcHJpdmF0ZSBib29sZWFuIGV4dGVybmFsQnJvd3NlcjsgIAotICBwcml2YXRlIGJvb2xlYW4gcnVuVGVzdENsaWVudDsKLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBmb2xkZXIgdGhlIHVzZXIgaGFzIGNob3NlbiB0byBnZW5lcmF0ZSBhbnkganNwcyAKLSAgKiBAcGFyYW0ganNwRm9sZGVyCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldEpzcEZvbGRlcihTdHJpbmcganNwRm9sZGVyKXsKLQl0aGlzLmpzcEZvbGRlciA9IGpzcEZvbGRlcjsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEpzcEZvbGRlcigpewotICAgIHJldHVybiBqc3BGb2xkZXI7ICAKLSAgfQotICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgcHJvamVjdCB0aGUgdXNlciBoYXMgY2hvc2VuIHRvIGdlbmVyYXRlIGFydGlmYWN0cyB0byAgCi0gICogQHBhcmFtIGdlbmVyYXRpb25Qcm9qZWN0Ci0gICovCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRpb25Qcm9qZWN0KFN0cmluZyBnZW5lcmF0aW9uUHJvamVjdCl7Ci0gICAgdGhpcy5nZW5lcmF0aW9uUHJvamVjdCA9IGdlbmVyYXRpb25Qcm9qZWN0OwkgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEdlbmVyYXRpb25Qcm9qZWN0KCl7Ci0gICAgcmV0dXJuIGdlbmVyYXRpb25Qcm9qZWN0OwkgIAotICB9Ci0gIAotICAvKioKLSAgKiBUaGUgcHJveHkgYmVhbiB3YXMgZ2VuZXJhdGVkIGJ5IHVzIHRoaXMgaXMgdGhlIG5hbWUgb2YgaXQgIAotICAqIEBwYXJhbSBwcm94eUJlYW4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJveHlCZWFuKFN0cmluZyBwcm94eUJlYW4pewotICAgIHRoaXMucHJveHlCZWFuID0gcHJveHlCZWFuOwkgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFByb3h5QmVhbigpewotICAgIHJldHVybiBwcm94eUJlYW47CSAgCi0gIH0KLQkgIAotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBTZXRFbmRwb2ludE1ldGhvZCAgIAotICAqIEBwYXJhbSAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2V0RW5kcG9pbnRNZXRob2QoU3RyaW5nIHNldEVuZHBvaW50TWV0aG9kKXsKLQl0aGlzLnNldEVuZHBvaW50TWV0aG9kID0gc2V0RW5kcG9pbnRNZXRob2Q7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXRFbmRwb2ludE1ldGhvZCgpewotICAgIHJldHVybiBzZXRFbmRwb2ludE1ldGhvZDsgIAotICB9Ci0gIAotICAvKioKLSAgKiBUaGUgY2xpZW50UHJvamVjdCBjb250YWlucyB0aGUgY2xpZW50IGFydGlmYWN0cyBpbmNsdWRpbmcgdGhlIAotICAqIGdlbmVyYXRlZCBwcm94eSBiZWFuICAgCi0gICogQHBhcmFtIGNsaWVudFByb2plY3QgU3RyaW5nCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoU3RyaW5nIGNsaWVudFByb2plY3QpewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdCgpewotICAgIHJldHVybiBjbGllbnRQcm9qZWN0OwkgIAotICB9Ci0JICAKLSAgLyoqCi0gICAqIFRoZSBjbGllbnRNb2R1bGUgY29udGFpbnMgdGhlIGNsaWVudCBhcnRpZmFjdHMgaW5jbHVkaW5nIHRoZSAKLSAgICogbW9kdWxlICAgCi0gICAqIEBwYXJhbSBjbGllbnRQcm9qZWN0IFN0cmluZwotICAgKi8KLSAgIHB1YmxpYyB2b2lkIHNldENsaWVudE1vZHVsZShTdHJpbmcgY2xpZW50TW9kdWxlKXsKLSAgICAgdGhpcy5jbGllbnRNb2R1bGUgPSBjbGllbnRNb2R1bGU7CSAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50TW9kdWxlKCl7Ci0gICAgIHJldHVybiBjbGllbnRNb2R1bGU7CSAgCi0gICB9Ci0gIAotICAvKioKLSAgKiBUaGVzZSBhcmUgbWV0aG9kcyBvbiB0aGUgcHJveHliZWFuIHRoZSB1c2VyIGhhcyBjaGVja2VkIG9uZXMgCi0gICogdGhleSB3YW50IGluY2x1ZGVkIGluIHRoZSB0ZXN0IGNsaWVudCAgICAgCi0gICogQHBhcmFtIG1ldGhvZHMKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWV0aG9kcyhCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kcyl7Ci0JdGhpcy5tZXRob2RzID0gbWV0aG9kczsgIAotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhblNlbGVjdGlvbltdIGdldE1ldGhvZHMoKXsKLSAgICByZXR1cm4gbWV0aG9kczsgIAotICB9Ci0gIAotICAvKioKLSAgKiBJZiB0aGUgY29tbWFuZCBuZWVkcyBhIHNlcnZlciB0aGlzIGlzIHRoZSBjaG9zZW4gCi0gICogY2xpZW50IHNlcnZlcklECi0gICogQHBhcmFtIHNhbXBsZVNlcnZlclR5cGVJRAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlU2VydmVyVHlwZUlEKFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEKXsKLSAgICB0aGlzLnNlcnZpY2VTZXJ2ZXJUeXBlSUQgPSBzZXJ2aWNlU2VydmVyVHlwZUlEOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlclR5cGVJRCgpewotICAgIHJldHVybiBzZXJ2aWNlU2VydmVyVHlwZUlEOyAgCi0gIH0KLSAgCi0gIC8qKgotICAqIElmIHRoZSBjb21tYW5kIG5lZWRzIGEgc2VydmVyIHRoaXMgaXMgdGhlIGNob3NlbiAKLSAgKiBjbGllbnQgc2VydmVySUQKLSAgKiBAcGFyYW0gc2FtcGxlU2VydmVyVHlwZUlECi0gICovCi0gICBwdWJsaWMgdm9pZCBzZXRDbGllbnRTZXJ2ZXJUeXBlSUQoU3RyaW5nIGNsaWVudFNlcnZlclR5cGVJRCl7Ci0gICAgIHRoaXMuY2xpZW50U2VydmVyVHlwZUlEID0gY2xpZW50U2VydmVyVHlwZUlEOyAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50U2VydmVyVHlwZUlEKCl7Ci0gICAgIHJldHVybiBjbGllbnRTZXJ2ZXJUeXBlSUQ7ICAKLSAgIH0KLQkgIAotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBJU2VydmVyIGlmIHJlcXVpcmVkCi0gICogQHBhcmFtIHNhbXBsZUV4aXN0aW5nU2VydmVyCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcil7Ci0JdGhpcy5zZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgPSBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXI7ICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBJU2VydmVyIGdldFNlcnZpY2VFeGlzdGluZ1NlcnZlcigpewotICAgIHJldHVybiBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXI7ICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIGlzIHRoZSBTdHJpbmcgaWYgcmVxdWlyZWQKLSAgICogQHBhcmFtIGNsaWVudEVBUlByb2plY3QKLSAgICovCi0gICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFQVJQcm9qZWN0KFN0cmluZyBjbGllbnRFQVJQcm9qZWN0KXsKLSAJdGhpcy5jbGllbnRFQVJQcm9qZWN0ID0gY2xpZW50RUFSUHJvamVjdDsgICAKLSAgIH0KLSAgIAotICAgcHVibGljIFN0cmluZyBnZXRDbGllbnRFQVJQcm9qZWN0KCl7Ci0gICAgIHJldHVybiBjbGllbnRFQVJQcm9qZWN0OyAgIAotICAgfQotICAgCi0gICAKLSAgIC8qKgotICAgICogVGhpcyBpcyB0aGUgU3RyaW5nIGlmIHJlcXVpcmVkCi0gICAgKiBAcGFyYW0gY2xpZW50RUFSUHJvamVjdAotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Q2xpZW50RUFSTW9kdWxlKFN0cmluZyBjbGllbnRFQVJNb2R1bGUpewotICAJdGhpcy5jbGllbnRFQVJNb2R1bGUgPSBjbGllbnRFQVJNb2R1bGU7ICAgCi0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RUFSTW9kdWxlKCl7Ci0gICAgICByZXR1cm4gY2xpZW50RUFSTW9kdWxlOyAgIAotICAgIH0KLSAgIAotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBJU2VydmVyIGlmIHJlcXVpcmVkCi0gICogQHBhcmFtIHNhbXBsZUV4aXN0aW5nU2VydmVyCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgY2xpZW50RXhpc3RpbmdTZXJ2ZXIpewotICAgIHRoaXMuY2xpZW50RXhpc3RpbmdTZXJ2ZXIgPSBjbGllbnRFeGlzdGluZ1NlcnZlcjsgICAKLSAgfQotICAgCi0gIHB1YmxpYyBJU2VydmVyIGdldENsaWVudEV4aXN0aW5nU2VydmVyKCl7Ci0gICAgcmV0dXJuIGNsaWVudEV4aXN0aW5nU2VydmVyOyAgIAotICB9Ci0gICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgZW5kcG9pbnRzIGlmIG1vbml0b3Igc2VydmljZSBpcyBlbmFibGVkCi0gICogQHBhcmFtIGVuZHBvaW50cwotICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChMaXN0IGVuZHBvaW50cyl7Ci0JdGhpcy5lbmRwb2ludHMgPSBlbmRwb2ludHM7ICAKLSAgfQotICBwdWJsaWMgTGlzdCBnZXRFbmRwb2ludCgpewotICAgIHJldHVybiBlbmRwb2ludHM7ICAKLSAgfSAKLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBwcm9qZWN0IHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiBkZWFsaW5nIHdpdGgKLSAgKiB3c2RsCi0gICogQHBhcmFtIHNlcnZpY2VQcm9qZWN0Ci0gICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KFN0cmluZyBzZXJ2aWNlUHJvamVjdCl7Ci0gICAgdGhpcy5zZXJ2aWNlUHJvamVjdCA9IHNlcnZpY2VQcm9qZWN0OyAgICAJICAKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVByb2plY3QoKXsKLSAgICByZXR1cm4gc2VydmljZVByb2plY3Q7Ci0gIH0KLQotICAvKioKLSAgKiBXU0RMIFVSTAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRXc2RsU2VydmljZVVSTChTdHJpbmcgd3NkbFNlcnZpY2VVUkwpewotCXRoaXMud3NkbFNlcnZpY2VVUkwgPSB3c2RsU2VydmljZVVSTDsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxTZXJ2aWNlVVJMKCl7Ci0gICAgcmV0dXJuIHdzZGxTZXJ2aWNlVVJMOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBjbGllbnROZWVkRUFSCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRDbGllbnROZWVkRUFSKCkgewotCQlyZXR1cm4gY2xpZW50TmVlZEVBUjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudE5lZWRFQVIoYm9vbGVhbiBjbGllbnROZWVkRUFSKSB7Ci0JCXRoaXMuY2xpZW50TmVlZEVBUiA9IGNsaWVudE5lZWRFQVI7Ci0gIH0KLQotICAvKioKLSAgICogZXh0ZXJuYWwgYnJvd3NlcgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0RXh0ZXJuYWxCcm93c2VyKCkgCi0gIHsKLQkgIHJldHVybiBleHRlcm5hbEJyb3dzZXI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFeHRlcm5hbEJyb3dzZXIoYm9vbGVhbiBleHRlcm5hbEJyb3dzZXIpIHsKLQkgIHRoaXMuZXh0ZXJuYWxCcm93c2VyID0gZXh0ZXJuYWxCcm93c2VyOwotICB9Ci0KLXB1YmxpYyBib29sZWFuIGdldFJ1blRlc3RDbGllbnQoKSB7Ci0JcmV0dXJuIHJ1blRlc3RDbGllbnQ7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFJ1blRlc3RDbGllbnQoYm9vbGVhbiBydW5UZXN0Q2xpZW50KSB7Ci0JdGhpcy5ydW5UZXN0Q2xpZW50ID0gcnVuVGVzdENsaWVudDsKLX0KLQotCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUNsaWVudEluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlQ2xpZW50SW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmJiN2QzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlQ2xpZW50SW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDgxNSAgIDE5OTYyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzExMzAgICAyMDM4MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNsaWVudEluZm8gewotCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlU3RhdGUgc3RhdGU7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyRmFjdG9yeUlkOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUnVudGltZUlkOwotCXByaXZhdGUgU3RyaW5nIHdlYlNlcnZpY2VSdW50aW1lSWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTDsKLQlwcml2YXRlIFN0cmluZyBpbXBsVVJMOwotCXByaXZhdGUgU3RyaW5nIHByb3h5RW5kcG9pbnQgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBzZXJ2ZXJDcmVhdGVkID0gZmFsc2U7Ci0JCi0JcHVibGljIFN0cmluZyBnZXRJbXBsVVJMKCkgewotCQlyZXR1cm4gaW1wbFVSTDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0SW1wbFVSTChTdHJpbmcgaW1wbFVSTCkgewotCQl0aGlzLmltcGxVUkwgPSBpbXBsVVJMOwotCX0KLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlckZhY3RvcnlJZCgpIHsKLQkJcmV0dXJuIHNlcnZlckZhY3RvcnlJZDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0U2VydmVyRmFjdG9yeUlkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpIHsKLQkJdGhpcy5zZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpIHsKLQkJcmV0dXJuIHNlcnZlckluc3RhbmNlSWQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RhbmNlSWQpIHsKLQkJdGhpcy5zZXJ2ZXJJbnN0YW5jZUlkID0gc2VydmVySW5zdGFuY2VJZDsKLQl9Ci0JcHVibGljIFdlYlNlcnZpY2VTdGF0ZSBnZXRTdGF0ZSgpIHsKLQkJcmV0dXJuIHN0YXRlOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTdGF0ZShXZWJTZXJ2aWNlU3RhdGUgc3RhdGUpIHsKLQkJdGhpcy5zdGF0ZSA9IHN0YXRlOwotCX0KLQlwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VSdW50aW1lSWQoKSB7Ci0JCXJldHVybiB3ZWJTZXJ2aWNlUnVudGltZUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlUnVudGltZUlkKFN0cmluZyB3ZWJTZXJ2aWNlUnVudGltZUlkKSB7Ci0JCXRoaXMud2ViU2VydmljZVJ1bnRpbWVJZCA9IHdlYlNlcnZpY2VSdW50aW1lSWQ7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSTCgpIHsKLQkJcmV0dXJuIHdzZGxVUkw7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFdzZGxVUkwoU3RyaW5nIHdzZGxVUkwpIHsKLQkJdGhpcy53c2RsVVJMID0gd3NkbFVSTDsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRQcm94eUVuZHBvaW50KCkgewotCQlyZXR1cm4gcHJveHlFbmRwb2ludDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0UHJveHlFbmRwb2ludChTdHJpbmcgcHJveHlFbmRwb2ludCkgewotCQl0aGlzLnByb3h5RW5kcG9pbnQgPSBwcm94eUVuZHBvaW50OwotCX0KLQkKLQkvKioKLQkgKiBAcmV0dXJuIEluZGljYXRlZCB3aGV0aGVyIHRoZSBmcmFtZXdvcmsgaGFkIGNyZWF0ZWQgCi0JICogdGhlIHNlcnZlciBpbnN0YW5jZSByZWZlcmVuY2VkIGJ5IGdldFNlcnZlckluc3RhbmNlSWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1NlcnZlckNyZWF0ZWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJDcmVhdGVkOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gc2VydmVyQ3JlYXRlZCBUcnVlIGlmIHRoZSBmcmFtZXdvcmsgaGFkIGNyZWF0ZWQgCi0JICogdGhlIHNlcnZlciBpbnN0YW5jZSByZWZlcmVuY2VkIGJ5IGdldFNlcnZlckluc3RhbmNlSWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJDcmVhdGVkKGJvb2xlYW4gc2VydmVyQ3JlYXRlZCkgewotCQl0aGlzLnNlcnZlckNyZWF0ZWQgPSBzZXJ2ZXJDcmVhdGVkOwotCX0KLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlclJ1bnRpbWVJZCgpIHsKLQkJcmV0dXJuIHNlcnZlclJ1bnRpbWVJZDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0U2VydmVyUnVudGltZUlkKFN0cmluZyBzZXJ2ZXJSdW50aW1lSWQpIHsKLQkJdGhpcy5zZXJ2ZXJSdW50aW1lSWQgPSBzZXJ2ZXJSdW50aW1lSWQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY2OTFhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMjg5MDUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwMzMwICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA4MTUgICAxOTk2MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMTMwICAgMjAzODI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRNZXJnZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnV0aWwuVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyOwotCi0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlSW5mbyB7Ci0KLQlwcml2YXRlIFdlYlNlcnZpY2VTdGF0ZSBzdGF0ZTsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVySW5zdGFuY2VJZDsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJSdW50aW1lSWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgd2ViU2VydmljZVJ1bnRpbWVJZDsKLQlwcml2YXRlIFN0cmluZyB3c2RsVVJMOwotCXByaXZhdGUgU3RyaW5nIGVuZFBvaW50VVJMOwotCXByaXZhdGUgU3RyaW5nIGltcGxVUkw7Ci0JcHJpdmF0ZSBTdHJpbmdbXSBpbXBsVVJMczsKLQlwcml2YXRlIGJvb2xlYW4gc2VydmVyQ3JlYXRlZCA9IGZhbHNlOwotCQotCXByaXZhdGUgSU1lcmdlciBtZXJnZXI7Ci0JCi0JcHVibGljIFN0cmluZyBnZXRFbmRQb2ludFVSTCgpCi0JewotCQlyZXR1cm4gZW5kUG9pbnRVUkw7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEVuZFBvaW50VVJMKFN0cmluZyBlbmRQb2ludFVSTCkKLQl7Ci0JCXRoaXMuZW5kUG9pbnRVUkwgPSBlbmRQb2ludFVSTDsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRJbXBsVVJMKCkKLQl7Ci0JCXJldHVybiBpbXBsVVJMOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRJbXBsVVJMKFN0cmluZyBpbXBsVVJMKQotCXsKLQkJdGhpcy5pbXBsVVJMID0gaW1wbFVSTDsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJGYWN0b3J5SWQoKQotCXsKLQkJcmV0dXJuIHNlcnZlckZhY3RvcnlJZDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0U2VydmVyRmFjdG9yeUlkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpCi0JewotCQl0aGlzLnNlcnZlckZhY3RvcnlJZCA9IHNlcnZlckZhY3RvcnlJZDsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJJbnN0YW5jZUlkKCkKLQl7Ci0JCXJldHVybiBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKQotCXsKLQkJdGhpcy5zZXJ2ZXJJbnN0YW5jZUlkID0gc2VydmVySW5zdGFuY2VJZDsKLQl9Ci0JcHVibGljIFdlYlNlcnZpY2VTdGF0ZSBnZXRTdGF0ZSgpCi0JewotCQlyZXR1cm4gc3RhdGU7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFN0YXRlKFdlYlNlcnZpY2VTdGF0ZSBzdGF0ZSkKLQl7Ci0JCXRoaXMuc3RhdGUgPSBzdGF0ZTsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlUnVudGltZUlkKCkKLQl7Ci0JCXJldHVybiB3ZWJTZXJ2aWNlUnVudGltZUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlUnVudGltZUlkKFN0cmluZyB3ZWJTZXJ2aWNlUnVudGltZUlkKQotCXsKLQkJdGhpcy53ZWJTZXJ2aWNlUnVudGltZUlkID0gd2ViU2VydmljZVJ1bnRpbWVJZDsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJMKCkKLQl7Ci0JCXJldHVybiB3c2RsVVJMOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJMKFN0cmluZyB3c2RsVVJMKQotCXsKLQkJdGhpcy53c2RsVVJMID0gd3NkbFVSTDsKLQl9Ci0JcHVibGljIFN0cmluZ1tdIGdldEltcGxVUkxzKCkKLQl7Ci0JCXJldHVybiBpbXBsVVJMczsKLQl9Ci0JcHVibGljIHZvaWQgc2V0SW1wbFVSTHMoU3RyaW5nW10gaW1wbFVSTHMpCi0JewotCQl0aGlzLmltcGxVUkxzID0gaW1wbFVSTHM7Ci0JCWxvYWRNZXJnZXIoKTsKLQkJCi0JfQotCXB1YmxpYyBJTWVyZ2VyIGdldE1lcmdlcigpIHsKLQkJcmV0dXJuIG1lcmdlcjsKLQl9Ci0JcHVibGljIHZvaWQgc2V0TWVyZ2VyKElNZXJnZXIgbWVyZ2VyKSB7Ci0JCXRoaXMubWVyZ2VyID0gbWVyZ2VyOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgbG9hZE1lcmdlcigpIHsKLQkJaWYgKG1lcmdlciAhPSBudWxsKSB7Ci0JCQlQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0JCQlpZiAobWVyZ2VDb250ZXh0LmlzU2tlbGV0b25NZXJnZUVuYWJsZWQoKSkgewotCQkJCW1lcmdlci5sb2FkKFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b0ZpbGVzKGltcGxVUkxzKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQHJldHVybiBJbmRpY2F0ZWQgd2hldGhlciB0aGUgZnJhbWV3b3JrIGhhZCBjcmVhdGVkIAotCSAqIHRoZSBzZXJ2ZXIgaW5zdGFuY2UgcmVmZXJlbmNlZCBieSBnZXRTZXJ2ZXJJbnN0YW5jZUlkCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNTZXJ2ZXJDcmVhdGVkKCkgewotCQlyZXR1cm4gc2VydmVyQ3JlYXRlZDsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHNlcnZlckNyZWF0ZWQgVHJ1ZSBpZiB0aGUgZnJhbWV3b3JrIGhhZCBjcmVhdGVkIAotCSAqIHRoZSBzZXJ2ZXIgaW5zdGFuY2UgcmVmZXJlbmNlZCBieSBnZXRTZXJ2ZXJJbnN0YW5jZUlkCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmVyQ3JlYXRlZChib29sZWFuIHNlcnZlckNyZWF0ZWQpIHsKLQkJdGhpcy5zZXJ2ZXJDcmVhdGVkID0gc2VydmVyQ3JlYXRlZDsKLQl9Ci0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJSdW50aW1lSWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJSdW50aW1lSWQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFNlcnZlclJ1bnRpbWVJZChTdHJpbmcgc2VydmVyUnVudGltZUlkKSB7Ci0JCXRoaXMuc2VydmVyUnVudGltZUlkID0gc2VydmVyUnVudGltZUlkOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlU2NlbmFyaW8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlU2NlbmFyaW8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVjY2YxZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZVNjZW5hcmlvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjQgICAxMTY3NTAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5BYnN0cmFjdEVudW1lcmF0b3I7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIFdlYlNlcnZpY2VTY2VuYXJpbyBleHRlbmRzIEFic3RyYWN0RW51bWVyYXRvcgotewotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJPVFRPTVVQID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9QRE9XTiA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMSUVOVCA9IDI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTY2VuYXJpbyBCT1RUT01VUF9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTY2VuYXJpbyhCT1RUT01VUCwgIkJPVFRPTVVQIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVNjZW5hcmlvIFRPUERPV05fTElURVJBTCA9IG5ldyBXZWJTZXJ2aWNlU2NlbmFyaW8oVE9QRE9XTiwgIlRPUERPV04iKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU2NlbmFyaW8gQ0xJRU5UX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVNjZW5hcmlvKENMSUVOVCwgIkNMSUVOVCIpOwotCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgV2ViU2VydmljZVNjZW5hcmlvW10gVkFMVUVTX0FSUkFZID0KLSAgICBuZXcgV2ViU2VydmljZVNjZW5hcmlvW10KLSAgICB7Ci0JICBCT1RUT01VUF9MSVRFUkFMLAotCSAgVE9QRE9XTl9MSVRFUkFMLAotCSAgQ0xJRU5UX0xJVEVSQUwsCi0gICAgfTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIExpc3QgVkFMVUVTID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KFZBTFVFU19BUlJBWSkpOwotCi0KLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlU2NlbmFyaW8gZ2V0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpCi0gICAgewotICAgICAgV2ViU2VydmljZVNjZW5hcmlvIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKLSAgICAgIGlmIChyZXN1bHQudG9TdHJpbmcoKS5lcXVhbHMobmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLQotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VTY2VuYXJpbyBnZXQoaW50IHZhbHVlKQotICB7Ci0gICAgc3dpdGNoICh2YWx1ZSkKLSAgICB7Ci0gICAgICBjYXNlIEJPVFRPTVVQOiByZXR1cm4gQk9UVE9NVVBfTElURVJBTDsKLSAgICAgIGNhc2UgVE9QRE9XTjogcmV0dXJuIFRPUERPV05fTElURVJBTDsKLSAgICAgIGNhc2UgQ0xJRU5UOiByZXR1cm4gQ0xJRU5UX0xJVEVSQUw7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwkKLSAgfQotCi0gIC8qKgotICAgKiBPbmx5IHRoaXMgY2xhc3MgY2FuIGNvbnN0cnVjdCBpbnN0YW5jZXMuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIFdlYlNlcnZpY2VTY2VuYXJpbyhpbnQgdmFsdWUsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIodmFsdWUsIG5hbWUpOwotICB9Ci0gIAotCi19IC8vV2ViU2VydmljZVNjZW5hcmlvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZVN0YXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZVN0YXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjBjMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VTdGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5BYnN0cmFjdEVudW1lcmF0b3I7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIFdlYlNlcnZpY2VTdGF0ZSBleHRlbmRzIEFic3RyYWN0RW51bWVyYXRvcgotewotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOS05PV04gPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVZFTE9QRUQgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBU1NFTUJMRUQgPSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVBMT1lFRCA9IDM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExFRCA9IDQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJVTk5JTkcgPSA1OwotICAKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVN0YXRlIFVOS05PV05fTElURVJBTCA9IG5ldyBXZWJTZXJ2aWNlU3RhdGUoVU5LTk9XTiwgIlVOS05PV04iKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU3RhdGUgREVWRUxPUEVEX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVN0YXRlKERFVkVMT1BFRCwgIkRFVkVMT1BFRCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTdGF0ZSBBU1NFTUJMRURfTElURVJBTCA9IG5ldyBXZWJTZXJ2aWNlU3RhdGUoQVNTRU1CTEVELCAiQVNTRU1CTEVEIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVN0YXRlIERFUExPWUVEX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVN0YXRlKERFUExPWUVELCAiREVQTE9ZRUQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU3RhdGUgSU5TVEFMTEVEX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVN0YXRlKElOU1RBTExFRCwgIklOU1RBTExFRCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTdGF0ZSBSVU5OSU5HX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVN0YXRlKFJVTk5JTkcsICJSVU5OSU5HIik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgV2ViU2VydmljZVN0YXRlW10gVkFMVUVTX0FSUkFZID0KLSAgICBuZXcgV2ViU2VydmljZVN0YXRlW10KLSAgICB7Ci0JICBVTktOT1dOX0xJVEVSQUwsCi0JICBERVZFTE9QRURfTElURVJBTCwKLQkgIEFTU0VNQkxFRF9MSVRFUkFMLAotCSAgREVQTE9ZRURfTElURVJBTCwKLQkgIElOU1RBTExFRF9MSVRFUkFMLAotCSAgUlVOTklOR19MSVRFUkFMLAotICAgIH07Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0IFZBTFVFUyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChWQUxVRVNfQVJSQVkpKTsKLQotCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVN0YXRlIGdldChTdHJpbmcgbmFtZSkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVkFMVUVTX0FSUkFZLmxlbmd0aDsgKytpKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VTdGF0ZSByZXN1bHQgPSBWQUxVRVNfQVJSQVlbaV07Ci0gICAgICBpZiAocmVzdWx0LnRvU3RyaW5nKCkuZXF1YWxzKG5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0KLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlU3RhdGUgZ2V0KGludCB2YWx1ZSkKLSAgewotICAgIHN3aXRjaCAodmFsdWUpCi0gICAgewotICAgICAgY2FzZSBVTktOT1dOOiByZXR1cm4gVU5LTk9XTl9MSVRFUkFMOwotICAgICAgY2FzZSBERVZFTE9QRUQ6IHJldHVybiBERVZFTE9QRURfTElURVJBTDsKLSAgICAgIGNhc2UgQVNTRU1CTEVEOiByZXR1cm4gQVNTRU1CTEVEX0xJVEVSQUw7Ci0JICBjYXNlIERFUExPWUVEOiByZXR1cm4gREVQTE9ZRURfTElURVJBTDsKLQkgIGNhc2UgSU5TVEFMTEVEOiByZXR1cm4gSU5TVEFMTEVEX0xJVEVSQUw7Ci0JICBjYXNlIFJVTk5JTkc6IHJldHVybiBSVU5OSU5HX0xJVEVSQUw7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwkKLSAgfQotCi0gIC8qKgotICAgKiBPbmx5IHRoaXMgY2xhc3MgY2FuIGNvbnN0cnVjdCBpbnN0YW5jZXMuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIFdlYlNlcnZpY2VTdGF0ZShpbnQgdmFsdWUsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIodmFsdWUsIG5hbWUpOwotICB9Ci0KLX0gLy9XZWJTZXJ2aWNlU3RhdGUKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTE3ODc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1hc2QiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtYXNkLXdzZGwxMSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1yZWZhY3RvciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1zb2FwIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLXNlYXJjaCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJqYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NWY2MmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotd3NkbGVkaXRvci5qYXIKLXRlbXAuZm9sZGVyCi1vcmcuZWNsaXBzZS53c3Qud3NkbC51aV8xLjAuMC5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWE0ZGRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbC51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzE1YzJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotI1N1biBKdW4gMDMgMDA6NDk6MDYgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZjdhYzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIEphbiAzMCAyMzozODoxNSBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEzN2QwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJV9VSV9QTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMi4xMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnNwZWNpYWxpemVkLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnZpc2l0b3IsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24sCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5jb25uZWN0aW9ucywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0cywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmljb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwubGFiZWwucHJvdmlkZXJzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVjb25jaWxlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLmN1c3RvbWl6YXRpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnhzZDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZ2VmO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkudmlld3M7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDEuMy4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVkaXQ7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3Jpbmc7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3RvcmluZztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmFwYWNoZS54ZXJjZXM7YnVuZGxlLXZlcnNpb249IlsyLjguMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5zZWFyY2g7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3k7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NjkyZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IC4KLXNvdXJjZS4uID0gc3JjLWFzZC8sXAotICAgICAgICAgICBzcmMtYXNkLXdzZGwxMSxcCi0gICAgICAgICAgIHNyYy1yZWZhY3Rvci8sXAotICAgICAgICAgICBzcmMtc29hcC8sXAotICAgICAgICAgICBzcmMtc2VhcmNoLwotb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2RsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kbGNsMTYvc2hvd3Byb3BlcnRpZXNfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0ZmYxMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2RsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kdG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kdG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTcwYzkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZHRvb2wxNi9jYXB0dXJlc2NyZWVuLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZWxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2VsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGMxOWEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZWxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvY2FwdHVyZXNjcmVlbi5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvY2FwdHVyZXNjcmVlbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NjgzMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9ldG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9ldG9vbDE2L3pvb21taW51cy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvem9vbW1pbnVzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQyYzkyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvem9vbW1pbnVzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZXRvb2wxNi96b29tcGx1cy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvem9vbXBsdXMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjZkNzU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZXRvb2wxNi96b29tcGx1cy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3JlbG9hZGdyYW1tYXIuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9yZWxvYWRncmFtbWFyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ0YzljYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3JlbG9hZGdyYW1tYXIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy92YWxpZGF0ZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3ZhbGlkYXRlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIzNDdhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3ZhbGlkYXRlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvd3NkbF9maWxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3dzZGxfZmlsZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWIxZjkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvd3NkbF9maWxlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFmYzc5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotX1VJX0xBQkVMX05FV19DQVRFR09SWV9OQU1FX1dTPVdlYiBTZXJ2aWNlcwotX1VJX0xBQkVMX0NSRUFURV9ORVdfV1NETF9GSUxFPUNyZWF0ZSBhIG5ldyBXU0RMIEZpbGUKLV9VSV9XU0RMX0xBQkVMPVdTREwgRmlsZXMKLV9VSV9MQUJFTF9HRU5FUkFMPUdlbmVyYWwKLV9VSV9MQUJFTF9ET0NVTUVOVEFUSU9OPURvY3VtZW50YXRpb24KLV9VSV9MQUJFTF9FWFRFTlNJT05TPUV4dGVuc2lvbnMKLV9VSV9MQUJFTF9SRUZBQ1RPUj1SZWZhY3RvcgotX1VJX0VESVRPUl9OQU1FPVdTREwgRWRpdG9yCi1fVUlfUkVMT0FEX0RFUEVOREVOQ0lFUz1SZWxvYWQgRGVwZW5kZW5jaWVzCi1yZWZhY3RvcmluZy5tZW51LmxhYmVsPVJlZmFjdG9yCi1BZGRCb29rbWFyay5sYWJlbD1BZGQgQm9vJmttYXJrLi4uCi1BZGRCb29rbWFyay50b29sdGlwPUFkZCBCb29rbWFyay4uLgotU2VsZWN0UnVsZXIubGFiZWw9U2VsZWN0IFJ1bGVyCi1BZGRUYXNrLmxhYmVsPUFkZCAmVGFzay4uLgotQWRkVGFzay50b29sdGlwPUFkZCBUYXNrLi4uCi1XU0RMRWRpdG9yTW9kZXM9V1NETCBFZGl0b3IgTW9kZXMKLQotY29tbWFuZC53c2RsLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50Lm5hbWU9UmVuYW1lIFdTREwgY29tcG9uZW50Ci0KLV9VSV9QTFVHSU5fTkFNRT1XU0RMIFVJCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLSMjCi1XU0RMX1NvdXJjZV90YXJnZXRfbmFtZT1XU0RMIFNvdXJjZQotV1NETF9oeXBlcmxpbms9V1NETCBDb250ZW50Ci1TT0FQPVNPQVAKLUhUVFA9SFRUUAotUmVmZXJlbmNlcz1SZWZlcmVuY2VzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjI5NjFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgotCQk8ZWRpdG9yCi0JCQluYW1lPSIlX1VJX0VESVRPUl9OQU1FIgotCQkJaWNvbj0iaWNvbnMvd3NkbF9maWxlX29iai5naWYiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIgotCQkJY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3IiPgotCQkJPGNvbnRlbnRUeXBlQmluZGluZwotCQkJCWNvbnRlbnRUeXBlSWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiIC8+Ci0JCTwvZWRpdG9yPgotCTwvZXh0ZW5zaW9uPgotCQotCQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KLQkJPGNhdGVnb3J5Ci0JCQlpZD0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLQkJCW5hbWU9IiVfVUlfTEFCRUxfTkVXX0NBVEVHT1JZX05BTUVfV1MiIC8+Ci0JCTx3aXphcmQKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIKLQkJCW5hbWU9IldTREwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdXU0RMV2l6YXJkIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciCi0JCQlpY29uPSJpY29ucy93c2RsX2ZpbGVfb2JqLmdpZiI+Ci0JCQk8ZGVzY3JpcHRpb24+JV9VSV9MQUJFTF9DUkVBVEVfTkVXX1dTRExfRklMRTwvZGVzY3JpcHRpb24+Ci0JCQk8c2VsZWN0aW9uIGNsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiIC8+Ci0JCTwvd2l6YXJkPgotCTwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+Ci0JCTwhLS0gcGxhY2UgZXZlcnl0aGluZyBpbiAiV2ViIFNlcnZpY2VzIiAtLT4KLQkJPHBhZ2UKLQkJCW5hbWU9IiVfVUlfV1NETF9MQUJFTCIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMUHJlZmVyZW5jZVBhZ2UiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETFByZWZlcmVuY2VQYWdlIiAvPgotCTwvZXh0ZW5zaW9uPgotCi0JPCEtLSBUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyB1c2VkIHRvIHN1cGxlbWVudCBXU0RMIDEuMSBzY2hlbWFzIGluIG9yZGVyIHRvICAgLS0+Ci0JPCEtLSBjb25zdHJhaW4gdGhlIGV4dGVuc2libGl0eSBlbGVtZW50cyB0aGF0IGFyZSBhbGxvd2VkIGF0IHRoZSAnd3NkbCcgbGV2ZWwgLS0+Ci0JPGV4dGVuc2lvbi1wb2ludAotCQlpZD0iZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiCi0JCW5hbWU9IkV4dGVuc2libGl0eSBFbGVtZW50IEZpbHRlciIKLQkJc2NoZW1hPSJzY2hlbWEvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIuZXhzZCIgLz4KLQkJCi0JPGV4dGVuc2lvbi1wb2ludCBpZD0iaW50ZXJuYWxFZGl0b3JDb25maWd1cmF0aW9uIiBuYW1lPSJXU0RMRWRpdG9yRXh0ZW5zaW9uQ29uZmlndXJhdGlvbiIvPiAgICAKLSAgICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJlZGl0b3JNb2RlcyIgbmFtZT0iJVdTRExFZGl0b3JNb2RlcyIvPgotCTxleHRlbnNpb24tcG9pbnQgaWQ9ImV4dGVuc2lvbkNhdGVnb3JpZXMiIG5hbWU9IkV4dGVuc2lvbiBDYXRlZ29yaWVzIi8+CQkKLQk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJjb250ZW50R2VuZXJhdG9yVUkiIG5hbWU9IlVJIFBvcnQgYW5kIEJpbmRpbmcgQ29udGVudCBHZW5lcmF0b3JzIiBzY2hlbWE9InNjaGVtYS9jb250ZW50R2VuZXJhdG9yVUkuZXhzZCIvPgotCTxleHRlbnNpb24tcG9pbnQgaWQ9ImFkYXB0ZXJGYWN0b3J5IiBuYW1lPSJBZGFwdGVyIEZhY3RvcnkgRXh0ZW5zaW9uIiBzY2hlbWE9InNjaGVtYS9hZGFwdGVyRmFjdG9yeS5leHNkIi8+Ci0KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5wcm9wZXJ0eUNvbnRyaWJ1dG9yIj4KLQkJPHByb3BlcnR5Q29udHJpYnV0b3IKLQkJCWNvbnRyaWJ1dG9ySWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3IiCi0KLQkJCWxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RMYWJlbFByb3ZpZGVyIj4JCQkKLQkJCTxwcm9wZXJ0eUNhdGVnb3J5IGNhdGVnb3J5PSJnZW5lcmFsIj48L3Byb3BlcnR5Q2F0ZWdvcnk+Ci0JCQk8cHJvcGVydHlDYXRlZ29yeSBjYXRlZ29yeT0iZG9jdW1lbnRhdGlvbiI+PC9wcm9wZXJ0eUNhdGVnb3J5PgotCQkJPHByb3BlcnR5Q2F0ZWdvcnkgY2F0ZWdvcnk9ImV4dGVuc2liaWxpdHkiPjwvcHJvcGVydHlDYXRlZ29yeT4KLQkJPC9wcm9wZXJ0eUNvbnRyaWJ1dG9yPgotCTwvZXh0ZW5zaW9uPgotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLnByb3BlcnR5VGFicyI+Ci0JCTxwcm9wZXJ0eVRhYnMKLQkJCWNvbnRyaWJ1dG9ySWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3IiPgotCQkJPHByb3BlcnR5VGFiCi0JCQkJbGFiZWw9IiVfVUlfTEFCRUxfR0VORVJBTCIKLQkJCQljYXRlZ29yeT0iZ2VuZXJhbCIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiPgotCQkJPC9wcm9wZXJ0eVRhYj4KLQkJCTxwcm9wZXJ0eVRhYgotCQkJCWxhYmVsPSIlX1VJX0xBQkVMX0VYVEVOU0lPTlMiCi0JCQkJY2F0ZWdvcnk9ImV4dGVuc2liaWxpdHkiCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5leHRlbnNpYmlsaXR5Ij4KLQkJCTwvcHJvcGVydHlUYWI+Ci0JCQk8cHJvcGVydHlUYWIKLQkJCQlsYWJlbD0iJV9VSV9MQUJFTF9ET0NVTUVOVEFUSU9OIgotCQkJCWNhdGVnb3J5PSJkb2N1bWVudGF0aW9uIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZG9jdW1lbnRhdGlvbiI+Ci0JCQk8L3Byb3BlcnR5VGFiPgotCQk8L3Byb3BlcnR5VGFicz4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5wcm9wZXJ0eVNlY3Rpb25zIj4KLSAgIDxwcm9wZXJ0eVNlY3Rpb25zIGNvbnRyaWJ1dG9ySWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3IiPgotICAgICA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmRvY3VtZW50YXRpb24iIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuRG9jdW1lbnRhdGlvblNlY3Rpb24iCi0JIAlpZD0icHJvcC5zZWN0aW9uLkRvY3VtZW50YXRpb25TZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdCI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotICAgCi0gICAJIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lU2VjdGlvbiIgIAotCSAJaWQ9InByb3Auc2VjdGlvbi5OYW1lU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotICAgCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9ucy5XMTFQYXJhbWV0ZXJTZWN0aW9uIgotICAgICAgICBmaWx0ZXI9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnMuVzExUGFyYW1ldGVyU2VjdGlvbkZpbHRlciIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uVzExUGFyYW1ldGVyU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXIiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0gICAJIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lU2VjdGlvbiIgIAotCSAJaWQ9InByb3Auc2VjdGlvbi5OYW1lU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb24iPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lU2VjdGlvbiIgIAotCSAJaWQ9InByb3Auc2VjdGlvbi5OYW1lU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2UiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JU2VydmljZSI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLkVuZFBvaW50U2VjdGlvbiIgIAotCSAJaWQ9InByb3Auc2VjdGlvbi5FbmRQb2ludFNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRW5kUG9pbnQiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuQmluZGluZ1NlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uQmluZGluZ1NlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZyI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLkltcG9ydFNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uSW1wb3J0U2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbXBvcnQiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgPCEtLQotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYXNkLmVkaXRvci5wcm9wZXJ0aWVzLnNlY3Rpb25zLlNjaGVtYVNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uU2NoZW1hU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5hc2QuZmFjYWRlLklUeXBlIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+CSAKLQktLT4KLQotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZXNwYWNlU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZXNwYWNlU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbiI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVzcGFjZVNlY3Rpb24iCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVzcGFjZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24iPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lc3BhY2VTZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5OYW1lc3BhY2VTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUNhdGVnb3J5QWRhcHRlciI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLQotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9ucy5XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbiIKLQkJZmlsdGVyPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zLlcxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uRmlsdGVyIgotCSAJaWQ9InByb3Auc2VjdGlvbi5NZXNzYWdlUmVmZXJlbmNlU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8IS0tIG1vdmUgdG8gd3NkbCBzcGVjaWZpYyBwbHVnaW4gLS0+Ci0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZXh0ZW5zaWJpbGl0eSIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zLlcxMUV4dGVuc2lvbnNTZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5XMTFBcHBsaWNhdGlvbkluZm9TZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlciI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5leHRlbnNpYmlsaXR5IiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnMuVzExRXh0ZW5zaW9uc1NlY3Rpb24iCi0JIAlpZD0icHJvcC5zZWN0aW9uLlcxMUFwcGxpY2F0aW9uSW5mb1NlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24iPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVTZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5OYW1lU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nT3BlcmF0aW9uIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVTZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5OYW1lU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotICA8L3Byb3BlcnR5U2VjdGlvbnM+Ci08L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaW9uQ2F0ZWdvcmllcyI+Ci0gICAgIDxjYXRlZ29yeQotICAgICAJZGlzcGxheU5hbWU9IkhUVFAiCi0gICAgICAJbmFtZXNwYWNlVVJJPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIj4KLSAgICAgIDwvY2F0ZWdvcnk+Ci0KLSAgICAgPGNhdGVnb3J5Ci0gICAgIAlkaXNwbGF5TmFtZT0iU09BUCIKLSAgICAgIAluYW1lc3BhY2VVUkk9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICAgICA8L2NhdGVnb3J5PgotCi0gICAgIDxjYXRlZ29yeQotICAgICAgICBkaXNwbGF5TmFtZT0iTUlNRSIKLSAgICAgIAluYW1lc3BhY2VVUkk9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iPgotICAgICA8L2NhdGVnb3J5PgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPiAKLSAgICAgIDxvYmplY3RDb250cmlidXRpb24gCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucmVmYWN0b3JpbmcubWVudS5vYmplY3RDb250cmliIiAKLSAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXIiPiAgCi0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGxlZGl0b3IucmVmYWN0b3JpbmcubWVudS5yZWZhY3Rvckdyb3VwLm9iamVjdCIgCi0gICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgc3R5bGU9InB1bGxkb3duIgotICAgICAgICAgICAgbWVudWJhclBhdGg9InJlZmFjdG9yaW5nLXNsb3QtdGVtcCIKLSAgICAgICAgICAgIGxhYmVsPSIlX1VJX0xBQkVMX1JFRkFDVE9SIiAKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zLldTRExSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUiPiAKLSAgICAgICAgIDwvYWN0aW9uPiAgICAgICAgICAKLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAgICAgICAgICAgICAgIAotICAgIDwvZXh0ZW5zaW9uPgotICAgIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPiAKLSAgICAgIDxvYmplY3RDb250cmlidXRpb24gCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuc2VhcmNoUmVmZXJlbmNlcy5tZW51Lm9iamVjdENvbnRyaWIiIAotICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlciI+ICAKLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbGVkaXRvci5zZWFyY2hSZWZlcmVuY2VzLm1lbnUuc2VhcmNoUmVmZXJlbmNlcy5vYmplY3QiIAotICAgICAgICAgICAgZW5hYmxlc0Zvcj0iMSIKLSAgICAgICAgICAgIHN0eWxlPSJwdWxsZG93biIKLSAgICAgICAgICAgIG1lbnViYXJQYXRoPSJzZWFyY2hSZWZlcmVuY2VzLXNsb3QtdGVtcCIKLSAgICAgICAgICAgIGxhYmVsPSIlUmVmZXJlbmNlcyIgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlIj4gCi0gICAgICAgICA8L2FjdGlvbj4gICAgICAgICAgCi0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgICAgICAgICAgICAKLSAgICA8L2V4dGVuc2lvbj4gICAgCi0JCi0JCTwhLS0gaW50aWFsaXplIHdzZGwgc291cmNlIHZhbGlkYXRvciAtLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnNvdXJjZXZhbGlkYXRpb24iPgotCQk8dmFsaWRhdG9yCi0JCQlzY29wZT0idG90YWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVjb25jaWxlci5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWNvbmNpbGVyLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMIj4KLQkJCTxjb250ZW50VHlwZUlkZW50aWZpZXIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSI+Ci0JCQkJPHBhcnRpdGlvblR5cGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuWE1MX0RFRkFVTFQiPgotCQkJCTwvcGFydGl0aW9uVHlwZT4KLQkJCTwvY29udGVudFR5cGVJZGVudGlmaWVyPgotCQk8L3ZhbGlkYXRvcj4KLQk8L2V4dGVuc2lvbj4KLQkKLQkJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5lZGl0b3JDb25maWd1cmF0aW9uIj4KLQkJPCEtLSBhZGQgcHJlZmVyZW5jZSBwYWdlcyB0byB0aGUgY29udGV4dCBtZW51IGFjdGlvbiAoSUQgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBkZWNsYXJlZCAicGF0aCIgYWJvdmUpIC0tPgotCQk8cHJvdmlzaW9uYWxEZWZpbml0aW9uCi0JCQl0eXBlPSJwcmVmZXJlbmNlcGFnZXMiCi0JCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETFByZWZlcmVuY2VQYWdlIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIiAvPgotCQk8c291cmNlVmlld2VyQ29uZmlndXJhdGlvbgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbldTREwiCi0JCQl0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiIC8+Ci08IS0tCQkJCi0JCTxjb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24KLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5vdXRsaW5lLldTRExDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24iCi0JCQl0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiIC8+Ci0tLT4KLQk8L2V4dGVuc2lvbj4KLQkKLQkJPCEtLSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpcyB1c2VkIHRvIGF1Z21lbnQgdGhlIE1vZGVsUXVlcnkgdG8gcHJvdmlkZSBXU0RMIHNwZWNpZmljIGd1aWRlZCBlZGl0aW5nIC0tPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5tb2RlbFF1ZXJ5RXh0ZW5zaW9ucyI+Ci0JCTxtb2RlbFF1ZXJ5RXh0ZW5zaW9uCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dC5XU0RMTW9kZWxRdWVyeUV4dGVuc2lvbiIKLQkJCWNvbnRlbnRUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIj4KLQkJPC9tb2RlbFF1ZXJ5RXh0ZW5zaW9uPgotCTwvZXh0ZW5zaW9uPgotICAgCi0gICAgICAgIDwhLS0gU2VhcmNoIHBhcnRpY2lwYW50IGV4dGVuc2lvbiB0aGF0IHN1cHBvcnRzIFhNTENvbXBvbmVudFNlYXJjaFBhdHRlbiBvbiBXU0RMIHJlc291cmNlcyAtLT4KLQkgPGV4dGVuc2lvbiAgIAotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaFBhcnRpY2lwYW50cyI+Ci0JCTxzZWFyY2hQYXJ0aWNpcGFudAotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnNlYXJjaC5XU0RMU2VhcmNoUGFydGljaXBhbnQiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLldTRExTZWFyY2hQYXJ0aWNpcGFudCI+Ci0JCQk8ZW5hYmxlbWVudD4KLQkJCSAgIDxvcj4KLQkJCSAgICAgIDx3aXRoIHZhcmlhYmxlPSJwYXR0ZXJuIj4KLQkJCQkJPGluc3RhbmNlb2YgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVybiIvPgkJCSAgIAotCQkJCSAgPC93aXRoPgotCQkJCTwvb3I+Ci0JCQk8L2VuYWJsZW1lbnQ+Ci0JCTwvc2VhcmNoUGFydGljaXBhbnQ+Ci0JIDwvZXh0ZW5zaW9uPgotCQotCi0KLQk8IS0tIFJlZmFjdG9yaW5nIENPUkUgLS0+Ci0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucmVuYW1lUGFydGljaXBhbnRzIj4KLQkJPHJlbmFtZVBhcnRpY2lwYW50Ci0JCQluYW1lPSJXU0RMIFJlbmFtZSBQYXJ0aWNwYW50IiAgICAgICAgICAgCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuV1NETENvbXBvbmVudFJlbmFtZVBhcnRpY2lwYW50IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yaW5nLldTRExDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudCI+Ci0JCQk8ZW5hYmxlbWVudD4KLQkJCSAgIDxvcj4KLQkJCSAgIDx3aXRoIHZhcmlhYmxlPSJlbGVtZW50Ij4KLQkJCQkJPGluc3RhbmNlb2YgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ii8+CQkJICAgCi0JCQkJPC93aXRoPgotCQkJICAgPHdpdGggdmFyaWFibGU9ImVsZW1lbnQiPgotCQkJCQk8aW5zdGFuY2VvZiB2YWx1ZT0ib3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50Ii8+CQkJCQkJCQkKLQkJCQk8L3dpdGg+CQkJCQkJCQotCQkJCTwvb3I+Ci0JCQk8L2VuYWJsZW1lbnQ+CQkJCi0JCTwvcmVuYW1lUGFydGljaXBhbnQ+Ci0JPC9leHRlbnNpb24+Ci0JCi0JIAk8IS0tICBSZWZhY3RvcmluZyBVSSBleHRlbnNpb25zIC0tPgotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+IAotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbiAKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3RvcmluZy5tZW51Lm9iamVjdENvbnRyaWIiIAotICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ij4gCi0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucmVmYWN0b3JpbmcubWVudS5yZWZhY3Rvckdyb3VwLm9iamVjdCIgCi0gICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgc3R5bGU9InB1bGxkb3duIgotICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgIGxhYmVsPSIlcmVmYWN0b3JpbmcubWVudS5sYWJlbCIgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9ucy5XU0RMUmVmYWN0b3JHcm91cEFjdGlvbkRlbGVnYXRlIj4gCi0gICAgICAgICA8L2FjdGlvbj4gCi0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAKLSAgIAotICAgIDx2aWV3ZXJDb250cmlidXRpb24KLSAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkucmVmYWN0b3JpbmcubWVudS5zb3VyY2UiCi0gICAgICAgIHRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlLnNvdXJjZS5FZGl0b3JDb250ZXh0Ij4KLQkgICAgPGFjdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucmVmYWN0b3JpbmcubWVudS5yZWZhY3Rvckdyb3VwLnNvdXJjZSIKLSAgICAgICAJCXN0eWxlPSJwdWxsZG93biIKLSAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICBsYWJlbD0iJXJlZmFjdG9yaW5nLm1lbnUubGFiZWwiIAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnMuV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZSI+IAotICAJICAgIDwvYWN0aW9uPgotICAgICAgIDwvdmlld2VyQ29udHJpYnV0aW9uPiAgICAgICAKLSAgICAgPC9leHRlbnNpb24+Ci0gICAgICAgICAgCi0gICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbW1hbmRzIj4KLQkJPGNvbW1hbmQKLQkJCW5hbWU9IiVjb21tYW5kLndzZGwucmVmYWN0b3IucmVuYW1lLmVsZW1lbnQubmFtZSIKLQkJCWRlc2NyaXB0aW9uPSIlY29tbWFuZC53c2RsLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50LmRlc2NyaXB0aW9uIgotCQkJY2F0ZWdvcnlJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkuZWRpdCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudCI+Ci0JCTwvY29tbWFuZD4KLQk8L2V4dGVuc2lvbj4gICAKLQkKLQkJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9yQWN0aW9ucyI+Ci0JCTxlZGl0b3JDb250cmlidXRpb24KLQkJCWlkPSJvcmcuZWNsaXBzZS51aS5hcnRpY2xlcy5hY3Rpb24uY29udHJpYnV0aW9uLmVkaXRvciIKLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIj4KLQotCQkJPG1lbnUKLQkJCQlpZD0iV1NETEVkaXRvciIKLQkJCQlsYWJlbD0iJV9VSV9FRElUT1JfTkFNRSIKLQkJCQlwYXRoPSJhZGRpdGlvbnMiPgotCQkJCTxzZXBhcmF0b3IgbmFtZT0iZ3JvdXAxIiAvPgotCQkJPC9tZW51PgotCi0JCQk8YWN0aW9uCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmFjdGlvbnMuUmVsb2FkRGVwZW5kZW5jaWVzQWN0aW9uRGVsZWdhdGUiCi0JCQkJbGFiZWw9IiVfVUlfUkVMT0FEX0RFUEVOREVOQ0lFUyIKLQkJCQlpY29uPSJpY29ucy9yZWxvYWRncmFtbWFyLmdpZiIKLQkJCQl0b29sdGlwPSJSZWxvYWQgRGVwZW5kZW5jaWVzIgotCQkJCW1lbnViYXJQYXRoPSJXU0RMRWRpdG9yL2dyb3VwMSIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuUmVsb2FkRGVwZW5kZW5jaWVzQWN0aW9uRGVsZWdhdGUiPgotCQkJPC9hY3Rpb24+Ci0KLQkJCTwhLS0KLQkJCQk8YWN0aW9uCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuVmFsaWRhdGVBY3Rpb25EZWxlZ2F0ZSIgCi0JCQkJbGFiZWw9IiVfVUlfQUNUSU9OX1ZBTElEQVRFX1dTRExfRE9DVU1FTlQiIAotCQkJCWljb249Imljb25zL3ZhbGlkYXRlLmdpZiIgCi0JCQkJdG9vbHRpcD0iJV9VSV9BQ1RJT05fVkFMSURBVEVfV1NETF9ET0NVTUVOVCIKLQkJCQltZW51YmFyUGF0aD0iV1NETEVkaXRvci9ncm91cDEiCi0JCQkJdG9vbGJhclBhdGg9IiVOb3JtYWwvV1NETEVkaXRvciIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5WYWxpZGF0ZUFjdGlvbkRlbGVnYXRlIj4gCi0JCQkJPC9hY3Rpb24+ICAgICAgCi0JCQktLT4KLQotCQk8L2VkaXRvckNvbnRyaWJ1dGlvbj4KLSAgICAgICAgPGVkaXRvckNvbnRyaWJ1dGlvbgotICAgICAgICAgICAgdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2Uuc291cmNlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UucnVsZXIuYWN0aW9ucyI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFkZEJvb2ttYXJrLmxhYmVsIgotICAgICAgICAgICAgICAgaGVscENvbnRleHRJZD0ib3JnLmVjbGlwc2UudWkuYm9va21hcmtfYWN0aW9uX2NvbnRleHQiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIgotICAgICAgICAgICAgICAgYWN0aW9uSUQ9IlJ1bGVyRG91YmxlQ2xpY2siCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIi8+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVNlbGVjdFJ1bGVyLmxhYmVsIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iCi0gICAgICAgICAgICAgICBhY3Rpb25JRD0iUnVsZXJDbGljayIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlNlbGVjdFJ1bGVyQWN0aW9uIi8+Ci0gICAgICAgIDwvZWRpdG9yQ29udHJpYnV0aW9uPgotCTwvZXh0ZW5zaW9uPgotICAgCi0gICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQkKLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI+Ci0JCTxleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcgotCQkJbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlci5Tb2FwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciI+Ci0JCTwvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXI+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI+Ci0JCTxleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcgotCQkJbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlci5IdHRwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciI+Ci0JCTwvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXI+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI+Ci0JCTxleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcgotCQkJbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlci5NaW1lRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciI+Ci0JCTwvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXI+Ci0JPC9leHRlbnNpb24+Ci0KLQotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIj4KLQkJPGV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlci5YU0RFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIj4KLQkJPC9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcj4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uCi0gIAkgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzZC51aS5leHRlbnNpYmlsaXR5Tm9kZUN1c3RvbWl6YXRpb25zIj4KLSAgICAgICA8bm9kZUN1c3RvbWl6YXRpb24KLQkJCW5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQkJCW5vZGVFZGl0b3JQcm92aWRlckNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLmN1c3RvbWl6YXRpb25zLlNPQVBOb2RlRWRpdG9yUHJvdmlkZXIiCi0JCQlsYWJlbFByb3ZpZGVyQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmxhYmVsLnByb3ZpZGVycy5TT0FQTGFiZWxQcm92aWRlciI+Ci0JCTwvbm9kZUN1c3RvbWl6YXRpb24+CQkKLSAgICAgICA8bm9kZUN1c3RvbWl6YXRpb24KLQkJCW5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIKLQkJCW5vZGVFZGl0b3JQcm92aWRlckNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLmN1c3RvbWl6YXRpb25zLlNPQVBOb2RlRWRpdG9yUHJvdmlkZXIiCi0JCQlsYWJlbFByb3ZpZGVyQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmxhYmVsLnByb3ZpZGVycy5IVFRQTGFiZWxQcm92aWRlciI+Ci0JCTwvbm9kZUN1c3RvbWl6YXRpb24+CQkJCQkKLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLQkJPHZpZXdlckNvbnRyaWJ1dGlvbgotCQkJdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2Uuc291cmNlLlJ1bGVyQ29udGV4dCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NsZC51aS5ydWxlci5jb250ZXh0LmFjdGlvbnMiPgotCQkJPGFjdGlvbgotCQkJCWxhYmVsPSIlQWRkVGFzay5sYWJlbCIKLQkJCQloZWxwQ29udGV4dElkPSJvcmcuZWNsaXBzZS51aS5BZGRUYXNrX2FjdGlvbl9jb250ZXh0IgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLlRhc2tSdWxlckFjdGlvbiIKLQkJCQl0b29sdGlwPSIlQWRkVGFzay50b29sdGlwIgotCQkJCW1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuVGFza1J1bGVyQWN0aW9uIj4KLQkJCTwvYWN0aW9uPgotCQkJPGFjdGlvbgotCQkJCWxhYmVsPSIlQWRkQm9va21hcmsubGFiZWwiCi0JCQkJaGVscENvbnRleHRJZD0ib3JnLmVjbGlwc2UudWkuYm9va21hcmtfYWN0aW9uX2NvbnRleHQiCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiIKLQkJCQl0b29sdGlwPSIlQWRkQm9va21hcmsudG9vbHRpcCIKLQkJCQltZW51YmFyUGF0aD0iYWRkaXRpb25zIgotCQkJCWlkPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iPgotCQkJPC9hY3Rpb24+Ci0JCTwvdmlld2VyQ29udHJpYnV0aW9uPgotCTwvZXh0ZW5zaW9uPgotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLmh5cGVybGlua0RldGVjdG9yVGFyZ2V0cyI+Ci0JCTx0YXJnZXQKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIgotCQkJbmFtZT0iJVdTRExfU291cmNlX3RhcmdldF9uYW1lIj4KLQkJPC90YXJnZXQ+Ci0JPC9leHRlbnNpb24+Ci0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IuaHlwZXJsaW5rRGV0ZWN0b3JzIj4KLQkJPGh5cGVybGlua0RldGVjdG9yCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dC5XU0RMSHlwZXJsaW5rRGV0ZWN0b3IiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dC5XU0RMSHlwZXJsaW5rRGV0ZWN0b3IiCi0JCQluYW1lPSIlV1NETF9oeXBlcmxpbmsiCi0JCQl0YXJnZXRJZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSI+Ci0JCTwvaHlwZXJsaW5rRGV0ZWN0b3I+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPGV4dGVuc2lvbiBwb2ludCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5jb250ZW50R2VuZXJhdG9yVUkiPgotICAgICAgPGNvbnRlbnRHZW5lcmF0b3JVSQotICAgICAgICBuYW1lPSJTT0FQIgotICAgICAgICBuYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0gICAgICAgIGxhYmVsPSIlU09BUCIKLSAgICAgICAgcG9ydE9wdGlvbnNQYWdlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWkuQWRkcmVzc1BvcnRPcHRpb25zUGFnZSIKLSAgICAgICAgYmluZGluZ09wdGlvbnNQYWdlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWkuU29hcEJpbmRpbmdPcHRpb25zUGFnZSI+Ci0gICAgICA8L2NvbnRlbnRHZW5lcmF0b3JVST4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbiBwb2ludCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5jb250ZW50R2VuZXJhdG9yVUkiPgotICAgICAgPGNvbnRlbnRHZW5lcmF0b3JVSQotICAgICAgICBuYW1lPSJIVFRQIgotICAgICAgICBuYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iCi0gICAgICAgIGxhYmVsPSIlSFRUUCIKLSAgICAgICAgcG9ydE9wdGlvbnNQYWdlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWkuQWRkcmVzc1BvcnRPcHRpb25zUGFnZSIKLSAgICAgICAgYmluZGluZ09wdGlvbnNQYWdlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWkuSHR0cEJpbmRpbmdPcHRpb25zUGFnZSI+Ci0gICAgICA8L2NvbnRlbnRHZW5lcmF0b3JVST4KLSAgIDwvZXh0ZW5zaW9uPiAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9hZGFwdGVyRmFjdG9yeS5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvYWRhcHRlckZhY3RvcnkuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE4NjUzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9hZGFwdGVyRmFjdG9yeS5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIgaWQ9ImFkYXB0ZXJGYWN0b3J5IiBuYW1lPSJBZGFwdGVyIEZhY3RvcnkgRXh0ZW5zaW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBBZGFwdGVyIEZhY3RvcnkgRXh0ZW5zaW9uIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBhZGFwdGVyIGZhY3RvcmllcyB0aGF0IGV4dGVuZCB0aGUgZGVzY3JpcHRpb24gb2YgV1NETCBlbGVtZW50cyBmb3IgVUkgcHVycG9zZXMuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhlIEFkYXB0ZXIgRmFjdG9yeSBFeHRlbnNpb24gZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIHJlZ2lzdGVyIGFkYXB0ZXIgZmFjdG9yaWVzIHRoYXQgZXh0ZW5kIHRoZSBkZXNjcmlwdGlvbiBvZiBXU0RMIGVsZW1lbnRzIGZvciBVSSBwdXJwb3Nlcy4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iYWRhcHRlckZhY3RvcnkiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImFkYXB0ZXJGYWN0b3J5Ij4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBuYW1lc3BhY2UgdGhpcyBleHRlbnNpb24gcG9pbnQgaW5zdGFuY2UgYXBwbGllcyB0by4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJhZGFwdGVyRmFjdG9yeUNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEFkYXB0ZXIgZmFjdG9yeSBmb3IgYSBzcGVjaWZpYyBuYW1lc3BhY2UuICBUaGUgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3RvcnkmbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0iOm9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ii8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIHBsdWdpbnMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSBjb250ZW50IGdlbmVyYXRvciB1aSBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICZsdDtleHRlbnNpb24gcG9pbnQgPSAmcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5hZGFwdGVyRmFjdG9yeSZxdW90OyZndDsKLSAgICAgICZsdDthZGFwdGVyRmFjdG9yeQotICBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyZxdW90OwotICAgICAgICBhZGFwdGVyRmFjdG9yeUNsYXNzPSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNvYXAuU09BUEFkYXB0ZXJGYWN0b3J5JnF1b3Q7Jmd0OwotICAgICAgJmx0Oy9hZGFwdGVyRmFjdG9yeSZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3RvcnkmbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2NvbnRlbnRHZW5lcmF0b3JVSS5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvY29udGVudEdlbmVyYXRvclVJLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NzU4YjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvY29udGVudEdlbmVyYXRvclVJLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiIGlkPSJjb250ZW50R2VuZXJhdG9yVUkiIG5hbWU9IlVJIFBvcnQgYW5kIEJpbmRpbmcgQ29udGVudCBHZW5lcmF0b3JzIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBVSSBQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycyBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgVUkgKGluIHRoZSBOZXcgV1NETCBGaWxlIHdpemFyZCkgZm9yIHRoZWlyIGN1c3RvbSBnZW5lcmF0b3JzIGZvciBQb3J0cyBhbmQgQmluZGluZ3MuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhlIFVJIFBvcnQgYW5kIEJpbmRpbmcgQ29udGVudCBHZW5lcmF0b3JzIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciB1aSAoZm9yIHRoZSBOZXcgV1NETCBGaWxlIHdpemFyZCkgZm9yIHRoZWlyIGN1c3RvbSBjb250ZW50IGdlbmVyYXRvcnMgZm9yIFdTREwgUG9ydHMgYW5kIEJpbmRpbmdzLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJjb250ZW50R2VuZXJhdG9yVUkiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImNvbnRlbnRHZW5lcmF0b3JVSSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgTmFtZSB1c2VkIGZvciB0aGlzIHBhcnRpY3VsYXIgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZXNwYWNlIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlIGFwcGxpZXMgdG8uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9ydE9wdGlvbnNQYWdlQ2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVUkgdGhhdCBvZmZlcnMgcG9ydCBvcHRpb25zLiAgVGhlIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249IjpvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzLkNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImJpbmRpbmdPcHRpb25zUGFnZUNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFVJIHRoYXQgb2ZmZXJzIGJpbmRpbmcgb3B0aW9ucy4gIFRoZSBjbGFzcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzLkNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSZsdDsvY29kZSZndDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSI6b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbGFiZWwgdXNlZCB0byBkZXNjcmliZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBwbHVnaW5zLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgY29udGVudCBnZW5lcmF0b3IgdWkgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSAgICZsdDtleHRlbnNpb24gcG9pbnQgPSAmcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5jb250ZW50R2VuZXJhdG9yVUkmcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7Y29udGVudEdlbmVyYXRvclVJCi0gICAgICAgIG5hbWU9JnF1b3Q7U09BUCZxdW90OwotICAgICAgICBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyZxdW90OwotICAgICAgICBwb3J0T3B0aW9uc1BhZ2VDbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpLkFkZHJlc3NQb3J0T3B0aW9uc1BhZ2UmcXVvdDsKLSAgICAgICAgYmluZGluZ09wdGlvbnNQYWdlQ2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aS5Tb2FwQmluZGluZ09wdGlvbnNQYWdlJnF1b3Q7Jmd0OwotICAgICAgJmx0Oy9jb250ZW50R2VuZXJhdG9yVUkmZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBzdXBwbGllZCBjbGFzc2VzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlJmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotCi0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2V4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlci5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTQ3MGQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2V4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiBpZD0iZXh0ZW5zaWJpbGl0eWVsZW1lbnRGaWx0ZXIiIG5hbWU9IkV4dGVuc2liaWxpdHkgRWxlbWVudCBGaWx0ZXIiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIEV4dGVuc2liaWxpdHkgRWxlbWVudCBGaWx0ZXIgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIHJlZ2lzdGVyIGZpbHRlcnMgZm9yIEV4dGVuc2liaWxpdHkgRWxlbWVudHMgaW4gdGhlIFdTREwgRWRpdG9yIGJhc2VkIG9uIHRoZSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQmYXBvcztzIG5hbWVzcGFjZS4gIFRoZXNlIGZpbHRlcnMgZGV0ZXJtaW5lIHdoYXQgaXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBXU0RMIEVkaXRvci4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBuYW1lc3BhY2UgdGhpcyBleHRlbnNpb24gcG9pbnQgaW5zdGFuY2UgYXBwbGllcyB0by4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlci5FeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgcGx1Z2lucy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhbiBFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmlsdGVyIGNvbnRyaWJ1dGlvbjoKLSZsdDtwcmUmZ3Q7Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciZxdW90OyZndDsKLSAgICAgICZsdDtleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcgotICAgICAgICAgICAgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8mcXVvdDsKLSAgICAgICAgICAgIGNsYXNzPSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlci5Tb2FwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciZxdW90Oy8mZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBzdXBwbGllZCBjbGFzcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2V4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVycy5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvZXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXJzLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3Zjg5N2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvZXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXJzLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiBpZD0iZXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXJzIiBuYW1lPSJFeHRlbnNpYmlsaXR5IEl0ZW0gVHJlZSBQcm92aWRlcnMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIEV4dGVuc2liaWxpdHkgSXRlbSBUcmVlIFByb3ZpZGVyIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBjdXN0b20gSUxhYmVsUHJvdmlkZXJzICh0byBwcm92aWRlIGN1c3RvbSBsYWJlbHMgYW5kIGljb25zKSBmb3IgRXh0ZW5zaWJpbGl0eSBFbGVtZW50cyBpbiB0aGUgV1NETCBFZGl0b3IgYmFzZWQgb24gdGhlIEV4dGVuc2liaWxpdHkgRWxlbWVudCZhcG9zO3MgbmFtZXNwYWNlLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJleHRlbnNpYmlsaXR5SXRlbVRyZWVQcm92aWRlciIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXIiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZSBhcHBsaWVzIHRvLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsUHJvdmlkZXJDbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXImbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBwbHVnaW5zLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGFuIEV4dGVuc2liaWxpdHkgSXRlbSBUcmVlIFByb3ZpZGVyIGNvbnRyaWJ1dGlvbjoKLSZsdDtwcmUmZ3Q7Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5leHRlbnNpYmlsaXR5SXRlbVRyZWVQcm92aWRlcnMmcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7ZXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXIKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvJnF1b3Q7Ci0gICAgICAgICAgICBsYWJlbFByb3ZpZGVyQ2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwub3V0bGluZS5TT0FQTGFiZWxQcm92aWRlciZxdW90Oy8mZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBzdXBwbGllZCBjbGFzcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyJmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvaW50ZXJuYWxFZGl0b3JFeHRlbnNpb25zLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9pbnRlcm5hbEVkaXRvckV4dGVuc2lvbnMuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3MTBkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9pbnRlcm5hbEVkaXRvckV4dGVuc2lvbnMuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiIGlkPSJpbnRlcm5hbEVkaXRvckV4dGVuc2lvbnMiIG5hbWU9IkludGVybmFsIEVkaXRvciBFeHRlbnNpb25zIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBJbnRlcm5hbCBFZGl0b3IgRXh0ZW5zaW9uIHBvaW50IGlzIHVzZWQgdG8gcHJvdmlkZSBHVUkgb2JqZWN0cywgYWN0aW9ucywgY29udGV4dCBtZW51IGl0ZW1zLCBldGMuLi4gZm9yIG5vbiBXU0RMIE1vZGVsIE9iamVjdHMgaW4gdGhlIFdTREwgRWRpdG9yLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJpbnRlcm5hbEVkaXRvckV4dGVuc2lvbiIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iaW50ZXJuYWxFZGl0b3JFeHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbi5XU0RMRWRpdG9yRXh0ZW5zaW9uJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgcGx1Z2lucy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhbiBJbnRlcm5hbCBFZGl0b3IgRXh0ZW5zaW9uIGNvbnRyaWJ1dGlvbjoKLSZsdDtwcmUmZ3Q7Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbEVkaXRvckV4dGVuc2lvbnMmcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7aW50ZXJuYWxFZGl0b3JFeHRlbnNpb24KLSAgICAgICAgICAgIGNsYXNzPSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnhzZC5YU0RFeHRlbnNpb24mcXVvdDsgLyZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbi5XU0RMRWRpdG9yRXh0ZW5zaW9uJmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvcHJvcGVydHlEZXNjcmlwdG9yUHJvdmlkZXIuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL3Byb3BlcnR5RGVzY3JpcHRvclByb3ZpZGVyLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMzg0NjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvcHJvcGVydHlEZXNjcmlwdG9yUHJvdmlkZXIuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiIGlkPSJwcm9wZXJ0eURlc2NyaXB0b3JQcm92aWRlciIgbmFtZT0iUHJvcGVydHkgRGVzY3JpcHRvciBQcm92aWRlciIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgUHJvcGVydHkgRGVzY3JpcHRvciBQcm92aWRlciBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgdGhlaXIgb3duIGN1c3RvbSBJUHJvcGVydHlEZXNjcmlwdG9yIGluIHRoZSBXU0RMIEVkaXRvciBiYXNlZCBvbiBuYW1lc3BhY2UuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InByb3BlcnR5RGVzY3JpcHRvclByb3ZpZGVyIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eURlc2NyaXB0b3JQcm92aWRlciI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZXNwYWNlIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlIGFwcGxpZXMgdG8uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eURlc2NyaXB0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBwbHVnaW5zLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGFuICBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkucHJvcGVydHlEZXNjcmlwdG9yUHJvdmlkZXImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7cHJvcGVydHlEZXNjcmlwdG9yUHJvdmlkZXIKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvJnF1b3Q7Ci0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leGFtcGxlLkV4YW1wbGVQcm9wZXJ0eURlc2NyaXB0b3ImcXVvdDsvJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlEZXNjcmlwdG9yJmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9EZWZhdWx0RWRpdG9yTW9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9EZWZhdWx0RWRpdG9yTW9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmFiYjY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvRGVmYXVsdEVkaXRvck1vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkFTREVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5BU0RDb250ZW50T3V0bGluZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5FZGl0b3JNb2RlOwotCi1wdWJsaWMgY2xhc3MgRGVmYXVsdEVkaXRvck1vZGUgZXh0ZW5kcyBFZGl0b3JNb2RlCi17Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIElEID0gIERlZmF1bHRFZGl0b3JNb2RlLmNsYXNzLmdldE5hbWUoKTsKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VzLl9VSV9MQUJFTF9ERUZBVUxUOwotICB9Ci0KLSAgcHVibGljIEVkaXRQYXJ0RmFjdG9yeSBnZXRFZGl0UGFydEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBU0RFZGl0UGFydEZhY3RvcnkoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIElEOwotICB9Ci0KLSAgcHVibGljIElDb250ZW50UHJvdmlkZXIgZ2V0T3V0bGluZVByb3ZpZGVyKCkKLSAgewotICAgIHJldHVybiBuZXcgQVNEQ29udGVudE91dGxpbmVQcm92aWRlcigpOwotICB9IAotICAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoYWRhcHRlcik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvSURlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0lEZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzIwMWEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvSURlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcjsKLQotcHVibGljIGludGVyZmFjZSBJRGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgZXh0ZW5kcyBJU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgewotCXB1YmxpYyB2b2lkIGluaXRWaWV3ZXJTcGVjaWZpY0NvbnRyaWJ1dGlvbnMoSUFjdGlvbkJhcnMgYmFycyk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JU2VsZWN0aW9uTWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0lTZWxlY3Rpb25NYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI2ZGFmZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0lTZWxlY3Rpb25NYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLQotcHVibGljIGludGVyZmFjZSBJU2VsZWN0aW9uTWFwcGVyIHsKLQlJU2VsZWN0aW9uIG1hcFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGVkT2JqZWN0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0ludGVybmFsV1NETE11bHRpUGFnZUVkaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjFjZjZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLktleVN0cm9rZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5BY3Rpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5HRUZBY3Rpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVBvc3RTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExQWRkUGFydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMU9wZW5JbXBvcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXRFeGlzdGluZ01lc3NhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXROZXdFbGVtZW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3TWVzc2FnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld1R5cGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNETXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE1lc3NhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGlyZWN0RWRpdEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLktleWJvYXJkRHJhZ0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuRGVmaW5pdGlvbnNFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5BU0RDb250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwuSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LlcxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LlcxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dC5XU0RMTW9kZWxBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlcxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5kZXNpZ24uSUtleWJvYXJkRHJhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuRWRpdG9yTW9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuRWRpdG9yTW9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLlByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLXB1YmxpYyBjbGFzcyBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IgZXh0ZW5kcyBBU0RNdWx0aVBhZ2VFZGl0b3IKLXsKLQlSZXNvdXJjZVNldCByZXNvdXJjZVNldDsKLQlSZXNvdXJjZSB3c2RsUmVzb3VyY2U7Ci0JCi0JcHJvdGVjdGVkIFdTRExFZGl0b3JSZXNvdXJjZUNoYW5nZUhhbmRsZXIgcmVzb3VyY2VDaGFuZ2VIYW5kbGVyOwotCQotCXByb3RlY3RlZCBXU0RMTW9kZWxBZGFwdGVyIG1vZGVsQWRhcHRlcjsKLQlwcm90ZWN0ZWQgU291cmNlRWRpdG9yU2VsZWN0aW9uTGlzdGVuZXIgZlNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyOwotCXByb3RlY3RlZCBXU0RMU2VsZWN0aW9uTWFuYWdlclNlbGVjdGlvbkxpc3RlbmVyIGZXU0RMU2VsZWN0aW9uTGlzdGVuZXI7Ci0KLSAgcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbDsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfRURJVE9SX01PREVfRVhURU5TSU9OX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmVkaXRvck1vZGVzIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIElEZXNjcmlwdGlvbiBidWlsZE1vZGVsKElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeyAgIAotCSAgdHJ5IHsKLQkJICAvLyBJU1NVRTogVGhpcyBjb2RlIHdoaWNoIGRlYWxzIHdpdGggdGhlIHN0cnVjdHVyZWQgbW9kZWwgaXMgc2ltaWxhciB0byB0aGUgb25lIGluIHRoZSBYU0QgZWRpdG9yLiAKLQkJICAvLyBJdCBjb3VsZCBiZSByZWZhY3RvcmVkIGludG8gdGhlIGJhc2UgY2xhc3MuCi0KLQkJICBEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCSAgSURvY3VtZW50IGRvYyA9IHN0cnVjdHVyZWRUZXh0RWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXREb2N1bWVudChlZGl0b3JJbnB1dCk7Ci0JCSAgaWYgKGRvYyBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkRG9jdW1lbnQpIHsKLQkJCSAgSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0RXhpc3RpbmdNb2RlbEZvckVkaXQoZG9jKTsKLQkJCSAgaWYgKG1vZGVsID09IG51bGwpIHsKLQkJCQkgIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGRvYyk7Ci0JCQkgIH0KLQkJCSAgc3RydWN0dXJlZE1vZGVsID0gbW9kZWw7Ci0JCQkgIGRvY3VtZW50ID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQkgIH0KLQkJICBBc3NlcnQuaXNOb3ROdWxsKGRvY3VtZW50KTsKLQotCQkgIE9iamVjdCBvYmogPSBudWxsOwotCi0JCSAgaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSU5vZGVOb3RpZmllcikgewotCQkJICBJTm9kZU5vdGlmaWVyIG5vdGlmaWVyID0gKElOb2RlTm90aWZpZXIpIGRvY3VtZW50OwotCQkJICBtb2RlbEFkYXB0ZXIgPSAoV1NETE1vZGVsQWRhcHRlcikgbm90aWZpZXIuZ2V0QWRhcHRlckZvcihXU0RMTW9kZWxBZGFwdGVyLmNsYXNzKTsKLQkJCSAgaWYgKG1vZGVsQWRhcHRlciA9PSBudWxsKSB7Ci0JCQkJICBtb2RlbEFkYXB0ZXIgPSBuZXcgV1NETE1vZGVsQWRhcHRlcigpOwotCQkJCSAgbm90aWZpZXIuYWRkQWRhcHRlcihtb2RlbEFkYXB0ZXIpOwotCQkJCSAgb2JqID0gbW9kZWxBZGFwdGVyLmNyZWF0ZURlZmluaXRpb24oZG9jdW1lbnQpOwotCQkJICB9Ci0JCQkgIGlmIChvYmogPT0gbnVsbCkgewotCQkJCSAgb2JqID0gbW9kZWxBZGFwdGVyLmNyZWF0ZURlZmluaXRpb24oZG9jdW1lbnQpOwotCQkJICB9Ci0JCSAgfQotCi0JCSAgaWYgKG9iaiBpbnN0YW5jZW9mIERlZmluaXRpb24pIHsKLQkJCSAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIG9iajsKLQkJCSAgbW9kZWwgPSAoSURlc2NyaXB0aW9uKSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChkZWZpbml0aW9uKTsKLQkJICB9Ci0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfSAgICAKLQotCSAgcmV0dXJuIG1vZGVsOwotICB9Ci0JCi0JcHJpdmF0ZSBYU0RTY2hlbWFbXSBnZXRJbmxpbmVTY2hlbWFzKCkgewotCQlMaXN0IHR5cGVzID0gZ2V0TW9kZWwoKS5nZXRUeXBlcygpOwotCQlYU0RTY2hlbWFbXSBzY2hlbWFzID0gbmV3IFhTRFNjaGVtYVt0eXBlcy5zaXplKCldOwotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQlXMTFUeXBlIHR5cGUgPSAoVzExVHlwZSkgdHlwZXMuZ2V0KGluZGV4KTsKLQkJCXNjaGVtYXNbaW5kZXhdID0gKFhTRFNjaGVtYSkgdHlwZS5nZXRUYXJnZXQoKTsKLQkJfQotCQkKLQkJcmV0dXJuIHNjaGVtYXM7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyB0eXBlKSB7Ci0JCWlmICh0eXBlID09IERlZmluaXRpb24uY2xhc3MpCi0JCXsKLQkJCXJldHVybiAoKFcxMURlc2NyaXB0aW9uKSBnZXRNb2RlbCgpKS5nZXRUYXJnZXQoKTsKLQkJfQotCQllbHNlIGlmICh0eXBlID09IElTZWxlY3Rpb25NYXBwZXIuY2xhc3MpCi0JCXsKLQkJCXJldHVybiBuZXcgV1NETFNlbGVjdGlvbk1hcHBlcigpOwotCQl9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRGVmaW5pdGlvbi5jbGFzcyAmJiBtb2RlbCBpbnN0YW5jZW9mIEFkYXB0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKChBZGFwdGVyKW1vZGVsKS5nZXRUYXJnZXQoKTsgCi0gICAgICAgIH0KLQkJZWxzZSBpZiAodHlwZSA9PSBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmNsYXNzKSB7Ci0JCQlyZXR1cm4gbmV3IFcxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcihnZXRFZGl0b3JJbnB1dCgpKTsKLQkJfQotCi0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKQotICAgICAgICB7Ci0gICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvcklucHV0OwotICAgICAgICAgICAgV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gbmV3IFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoZmlsZUVkaXRvcklucHV0LmdldEZpbGUoKSwgbnVsbCk7Ci0gICAgICAgICAgICByZWZNYW5hZ2VyLnNldFNjaGVtYXMoZ2V0SW5saW5lU2NoZW1hcygpKTsKLSAgICAgICAgICAgIHJldHVybiByZWZNYW5hZ2VyOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlID09IFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykKLSAgICAgICAgewotICAgICAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCA9IChJRmlsZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgICAgICAgIFdTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IG5ldyBXU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCksIG51bGwpOwotICAgICAgICAgICAgcmVmTWFuYWdlci5zZXRTY2hlbWFzKGdldElubGluZVNjaGVtYXMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVmTWFuYWdlcjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBXMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpIHsKLSAgICAgICAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgCUlGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvcklucHV0OwotICAgICAgICAgICAgCXJldHVybiBuZXcgVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKChXMTFEZXNjcmlwdGlvbikgZ2V0TW9kZWwoKSwgZmlsZUVkaXRvcklucHV0LmdldEZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAJSUZpbGVFZGl0b3JJbnB1dCBmaWxlRWRpdG9ySW5wdXQgPSAoSUZpbGVFZGl0b3JJbnB1dCkgZWRpdG9ySW5wdXQ7Ci0gICAgICAgICAgICAJcmV0dXJuIG5ldyBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGdldE1vZGVsKCksIGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfSAgICAgICAgCQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSBnZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIAlJRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCA9IChJRmlsZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgICAgICAgIAlyZXR1cm4gbmV3IFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGdldE1vZGVsKCksIGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfSAgICAgICAgCQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5jbGFzcykKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gSUtleWJvYXJkRHJhZy5jbGFzcykgewotCQkJcmV0dXJuIG5ldyBLZXlib2FyZERyYWdJbXBsKCk7Ci0JCX0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmNsYXNzKSB7Ci0gICAgICAgIAlyZXR1cm4gbmV3IFcxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcihnZXRFZGl0b3JJbnB1dCgpKTsKLSAgICAgICAgfQotCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcih0eXBlKTsKLQl9Ci0JCi0JLyoqCi0JICogTGlzdGVuZXIgb24gU1NFJ3Mgc291cmNlIGVkaXRvcidzIHNlbGVjdGlvbnMgdGhhdCBjb252ZXJ0cyBET00KLQkgKiBzZWxlY3Rpb25zIGludG8geHNkIHNlbGVjdGlvbnMgYW5kIG5vdGlmaWVzIFdTREwgc2VsZWN0aW9uIG1hbmFnZXIKLQkgKi8KLQlwcml2YXRlIGNsYXNzIFNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCS8qKgotCQkgKiBEZXRlcm1pbmVzIFdTREwgZmFjYWRlIG9iamVjdCBiYXNlZCBvbiBET00gbm9kZQotCQkgKiAKLQkJICogQHBhcmFtIG9iamVjdAotCQkgKiBAcmV0dXJuCi0JCSAqLwotCQlwcml2YXRlIE9iamVjdCBnZXRXU0RMRmFjYWRlT2JqZWN0KE9iamVjdCBvYmplY3QpIHsKLQkJCS8vIGdldCB0aGUgZWxlbWVudCBub2RlCi0JCQlFbGVtZW50IGVsZW1lbnQgPSBudWxsOwotCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUpIHsKLQkJCQlOb2RlIG5vZGUgPSAoTm9kZSkgb2JqZWN0OwotCQkJCWlmIChub2RlICE9IG51bGwpIHsKLQkJCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewotCQkJCQkJZWxlbWVudCA9IChFbGVtZW50KSBub2RlOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkFUVFJJQlVURV9OT0RFKSB7Ci0JCQkJCQllbGVtZW50ID0gKChBdHRyKSBub2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCU9iamVjdCBvID0gZWxlbWVudDsKLQkJCWlmIChlbGVtZW50ICE9IG51bGwpIHsKLQkJCQlEZWZpbml0aW9uIGRlZiA9IChEZWZpbml0aW9uKSAoKFcxMURlc2NyaXB0aW9uKSBtb2RlbCkuZ2V0VGFyZ2V0KCk7Ci0JCQkJT2JqZWN0IG1vZGVsT2JqZWN0ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5maW5kTW9kZWxPYmplY3RGb3JFbGVtZW50KGRlZiwgZWxlbWVudCk7Ci0JCQkJCi0JCQkJLy8gcm1haDogV2UgaGFuZGxlIHRoaXMgc3BlY2lhbCBzY2VuYXJpbyB3aGVyZSB0aGUgbW9kZWxPYmplY3QgaXMgYW4gWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuCi0JCQkJLy8gV2UgYWN0dWFsbHkgd2FudCB0aGUgWFNEU2NoZW1hIG9iamVjdC4gIEhvd2V2ZXIsIG91ciBub2RlIHJlY29uY2lsZXIgd2lsbCBhbHdheXMgcmV0dXJuCi0JCQkJLy8gWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgYmVjYXVzZSBib3RoIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGFuZCBYU0RTY2hlbWEKLQkJCQkvLyBib3RoIGhhdmUgdGhlIFNBTUUgRWxlbWVudCBvYmplY3QsIGFuZCB0aGUgcmVjb25jaWxlciBlbmNvdW50ZXJzIHRoZSBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudAotCQkJCS8vIGZpcnN0Li4uLiAgU2VlIFdTRExOb2RlTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIgZm9yIG1vcmUgZGV0YWlscy4uLi4uCi0JCQkJaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHsKLQkJCQkJbW9kZWxPYmplY3QgPSAoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBtb2RlbE9iamVjdCkuZ2V0U2NoZW1hKCk7Ci0JCQkJfQotCQkJCWlmIChtb2RlbE9iamVjdCAhPSBudWxsKSB7Ci0JCQkJCW8gPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdCgoTm90aWZpZXIpIG1vZGVsT2JqZWN0KTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gbzsKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCWlmIChnZXRTZWxlY3Rpb25NYW5hZ2VyKCkuZ2V0RW5hYmxlTm90aWZ5KCkgJiYgZ2V0QWN0aXZlUGFnZSgpID09IDEpCi0JCQl7Ci0JCQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0JCQkJewotCQkJCQlMaXN0IHNlbGVjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJCWZvciAoSXRlcmF0b3IgaSA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQkJCQl7Ci0JCQkJCQlPYmplY3QgZG9tTm9kZSA9IGkubmV4dCgpOwotCQkJCQkJT2JqZWN0IGZhY2FkZSA9IGdldFdTRExGYWNhZGVPYmplY3QoZG9tTm9kZSk7Ci0JCQkJCQlpZiAoZmFjYWRlICE9IG51bGwpCi0JCQkJCQl7Ci0JCQkJCQkJc2VsZWN0aW9ucy5hZGQoZmFjYWRlKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQkKLQkJCQkJaWYgKCFzZWxlY3Rpb25zLmlzRW1wdHkoKSkKLQkJCQkJewotCQkJCQkJU3RydWN0dXJlZFNlbGVjdGlvbiB3c2RsU2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9ucyk7Ci0JCQkJCQlnZXRTZWxlY3Rpb25NYW5hZ2VyKCkuc2V0U2VsZWN0aW9uKHdzZGxTZWxlY3Rpb24sIGdldFRleHRFZGl0b3IoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBMaXN0ZW5lciBvbiBXU0RMJ3Mgc2VsZWN0aW9uIG1hbmFnZXIncyBzZWxlY3Rpb25zIHRoYXQgY29udmVydHMgV1NETAotCSAqIHNlbGVjdGlvbnMgaW50byBET00gc2VsZWN0aW9ucyBhbmQgbm90aWZpZXMgU1NFJ3Mgc2VsZWN0aW9uIHByb3ZpZGVyCi0JICovCi0JcHJpdmF0ZSBjbGFzcyBXU0RMU2VsZWN0aW9uTWFuYWdlclNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCS8qKgotCQkgKiBEZXRlcm1pbmVzIERPTSBub2RlIGJhc2VkIG9uIG9iamVjdCAod3NkbCBub2RlKQotCQkgKiAKLQkJICogQHBhcmFtIG9iamVjdAotCQkgKiBAcmV0dXJuCi0JCSAqLwotCQlwcml2YXRlIE9iamVjdCBnZXRPYmplY3RGb3JPdGhlck1vZGVsKE9iamVjdCBvYmplY3QpIHsKLQkJCU5vZGUgbm9kZSA9IG51bGw7Ci0JCQkKLQkJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlKSB7Ci0JCQkJbm9kZSA9IChOb2RlKSBvYmplY3Q7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCQkvLyBUaGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGEgVVJJIGZyYWdtZW50IHVzZWQgdG8gaWRlbnRpZnkgYSBXU0RMIGVsZW1lbnQuCi0JCQkJLy8gVGhlIFVSSSBmcmFnbWVudCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGRlZmluaXRpb24gYmVpbmcgZWRpdGVkIGluIHRoaXMgZWRpdG9yLgotCQkJCVN0cmluZyB1cmlGcmFnbWVudCA9IChTdHJpbmcpb2JqZWN0OwotCQkJCUVPYmplY3QgZGVmaW5pdGlvbiA9ICgoRGVmaW5pdGlvbikoKFcxMURlc2NyaXB0aW9uKWdldE1vZGVsKCkpLmdldFRhcmdldCgpKTsKLQkJCQlFT2JqZWN0IG1vZGVsT2JqZWN0ID0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKS5nZXRFT2JqZWN0KHVyaUZyYWdtZW50KTsKLQotCQkJCWlmIChtb2RlbE9iamVjdCAhPSBudWxsKSB7Ci0JCQkJCW5vZGUgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldE5vZGVGb3JPYmplY3QobW9kZWxPYmplY3QpOwotCQkJCX0gICAgICAgIAotCQkJfQotCQkJZWxzZSB7Ci0JCQkJbm9kZSA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0Tm9kZUZvck9iamVjdChvYmplY3QpOwotCQkJfQotCQkJCi0JCQkvLyB0aGUgdGV4dCBlZGl0b3IgY2FuIG9ubHkgYWNjZXB0IHNlZCBub2RlcyEKLQkJCS8vCi0JCQlpZiAoIShub2RlIGluc3RhbmNlb2YgSURPTU5vZGUpKSB7Ci0JCQkJbm9kZSA9IG51bGw7Ci0JCQl9Ci0JCQlyZXR1cm4gbm9kZTsKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCS8vIGRvIG5vdCBmaXJlIHNlbGVjdGlvbiBpbiBzb3VyY2UgZWRpdG9yIGlmIHRoZSBjdXJyZW50IGFjdGl2ZSBwYWdlIGlzIHRoZSBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IgKHNvdXJjZSkKLQkJCS8vIFdlIG9ubHkgd2FudCB0byBtYWtlIHNvdXJjZSBzZWxlY3Rpb25zIGlmIHRoZSBhY3RpdmUgcGFnZSBpcyBlaXRoZXIgdGhlIG91dGxpbmUgb3IgcHJvcGVydGllcyAoYSBtb2RpZnkKLQkJCS8vIGhhcyBiZWVuIGRvbmUgdmlhIHRoZSBvdXRsaW5lIG9yIHByb3BlcnRpZXMgYW5kIG5vdCB0aGUgc291cmNlIHZpZXcpLiAgV2UgZG9uJ3Qgd2FudCB0byBiZSBzZWxlY3RpbmcKLQkJCS8vIGFuZCB1bnNlbGVjdGluZyB0aGluZ3MgaW4gdGhlIHNvdXJjZSB3aGVuIGVkaXRpbmcgaW4gdGhlIHNvdXJjZSEhCi0JCQlib29sZWFuIG1ha2VTZWxlY3Rpb24gPSB0cnVlOwotCQkJaWYgKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpICE9IG51bGwgICYmICEoZXZlbnQuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBJUG9zdFNlbGVjdGlvblByb3ZpZGVyKSkgewotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQlpZiAocGFnZS5nZXRBY3RpdmVQYXJ0KCkgaW5zdGFuY2VvZiBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIHsKLQkJCQkJaWYgKGdldEFjdGl2ZUVkaXRvcigpIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCW1ha2VTZWxlY3Rpb24gPSBmYWxzZTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCQotCQkJLy8gZG8gbm90IGZpcmUgc2VsZWN0aW9uIGluIHNvdXJjZSBlZGl0b3IgaWYgc2VsZWN0aW9uIGV2ZW50IGNhbWUKLQkJCS8vIGZyb20gc291cmNlIGVkaXRvcgotCQkJCWlmIChldmVudC5nZXRTb3VyY2UoKSAhPSBnZXRUZXh0RWRpdG9yKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKSAmJiBtYWtlU2VsZWN0aW9uKSB7Ci0JCQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJTGlzdCBvdGhlck1vZGVsT2JqZWN0TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQkJZm9yIChJdGVyYXRvciBpID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQkJCU9iamVjdCB3c2RsT2JqZWN0ID0gaS5uZXh0KCk7Ci0KLQkJCQkJCWlmICh3c2RsT2JqZWN0IGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQkJCQkJd3NkbE9iamVjdCA9ICgoV1NETEJhc2VBZGFwdGVyKSB3c2RsT2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCQkJCX0KLQotCQkJCQkJT2JqZWN0IG90aGVyTW9kZWxPYmplY3QgPSBnZXRPYmplY3RGb3JPdGhlck1vZGVsKHdzZGxPYmplY3QpOwotCQkJCQkJaWYgKG90aGVyTW9kZWxPYmplY3QgIT0gbnVsbCkgewotCQkJCQkJCW90aGVyTW9kZWxPYmplY3RMaXN0LmFkZChvdGhlck1vZGVsT2JqZWN0KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlpZiAoIW90aGVyTW9kZWxPYmplY3RMaXN0LmlzRW1wdHkoKSkgewotCQkJCQkJU3RydWN0dXJlZFNlbGVjdGlvbiBub2RlU2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ob3RoZXJNb2RlbE9iamVjdExpc3QpOwotCQkJCQkJZ2V0VGV4dEVkaXRvcigpLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuc2V0U2VsZWN0aW9uKG5vZGVTZWxlY3Rpb24pOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZUdyYXBoaWNhbFZpZXdlcigpIHsKLQkJc3VwZXIuY29uZmlndXJlR3JhcGhpY2FsVmlld2VyKCk7Ci0JCWdyYXBoaWNhbFZpZXdlci5nZXRLZXlIYW5kbGVyKCkucHV0KEtleVN0cm9rZS5nZXRQcmVzc2VkKFNXVC5GMiwgMCksIGdldEFjdGlvblJlZ2lzdHJ5KCkuZ2V0QWN0aW9uKEdFRkFjdGlvbkNvbnN0YW50cy5ESVJFQ1RfRURJVCkpOwotCQlzZXRFZGl0UGFydEZhY3RvcnkoZ2V0RWRpdG9yTW9kZU1hbmFnZXIoKS5nZXRDdXJyZW50TW9kZSgpLmdldEVkaXRQYXJ0RmFjdG9yeSgpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlUGFnZXMoKSB7Ci0JCXN1cGVyLmNyZWF0ZVBhZ2VzKCk7Ci0JCQotCQlpZiAocmVzb3VyY2VDaGFuZ2VIYW5kbGVyID09IG51bGwpIHsKLQkJCXJlc291cmNlQ2hhbmdlSGFuZGxlciA9IG5ldyBXU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyKHRoaXMpOwotCQkJcmVzb3VyY2VDaGFuZ2VIYW5kbGVyLmF0dGFjaCgpOwotCQl9Ci0JCQotCQlmU291cmNlRWRpdG9yU2VsZWN0aW9uTGlzdGVuZXIgPSBuZXcgU291cmNlRWRpdG9yU2VsZWN0aW9uTGlzdGVuZXIoKTsKLQkJSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gZ2V0VGV4dEVkaXRvcigpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7Ci0JCWlmIChwcm92aWRlciBpbnN0YW5jZW9mIElQb3N0U2VsZWN0aW9uUHJvdmlkZXIpIHsKLQkJCSgoSVBvc3RTZWxlY3Rpb25Qcm92aWRlcikgcHJvdmlkZXIpLmFkZFBvc3RTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZlNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyKTsKLQkJfQotCQllbHNlIHsKLQkJCXByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmU291cmNlRWRpdG9yU2VsZWN0aW9uTGlzdGVuZXIpOwotCQl9Ci0JCQotCQlmV1NETFNlbGVjdGlvbkxpc3RlbmVyID0gbmV3IFdTRExTZWxlY3Rpb25NYW5hZ2VyU2VsZWN0aW9uTGlzdGVuZXIoKTsKLQkJZ2V0U2VsZWN0aW9uTWFuYWdlcigpLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmV1NETFNlbGVjdGlvbkxpc3RlbmVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJaWYgKHN0cnVjdHVyZWRNb2RlbCAhPSBudWxsKSB7Ci0JCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7ICAgICAgCi0JCX0KLQkJaWYgKHJlc291cmNlQ2hhbmdlSGFuZGxlciAhPSBudWxsKSB7Ci0JCQlyZXNvdXJjZUNoYW5nZUhhbmRsZXIuZGlzcG9zZSgpOwotCQl9Ci0JCWdldFNlbGVjdGlvbk1hbmFnZXIoKS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZldTRExTZWxlY3Rpb25MaXN0ZW5lcik7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVsb2FkRGVwZW5kZW5jaWVzKCkgewotCQl0cnkgewotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pICgoVzExRGVzY3JpcHRpb24pIGdldE1vZGVsKCkpLmdldFRhcmdldCgpOwotCQkJaWYgKGRlZmluaXRpb24gIT0gbnVsbCkgewotCQkJCVdTRExSZXNvdXJjZVV0aWwucmVsb2FkRGlyZWN0aXZlcyhkZWZpbml0aW9uKTsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnVwZGF0ZUJpbmRpbmdSZWZlcmVuY2VzKGRlZmluaXRpb24pOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwudXBkYXRlUG9ydFR5cGVSZWZlcmVuY2VzKGRlZmluaXRpb24pOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwudXBkYXRlTWVzc2FnZVJlZmVyZW5jZXMoZGVmaW5pdGlvbik7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC51cGRhdGVTY2hlbWFSZWZlcmVuY2VzKGRlZmluaXRpb24pOwotCQkJCS8vIHRoZSBsaW5lIGJlbG93IHNpbXBseSBjYXVzZXMgYSBub3RpZmljYXRpb24gaW4gb3JkZXIgdG8KLQkJCQkvLyB1cGRhdGUgb3VyCi0JCQkJLy8gdmlld3MKLQkJCQkvLwotCQkJCWRlZmluaXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZGVmaW5pdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUFjdGlvbnMoKSB7Ci0JCXN1cGVyLmNyZWF0ZUFjdGlvbnMoKTsKLQotICAgIEFjdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0QWN0aW9uUmVnaXN0cnkoKTsKLSAgICBCYXNlU2VsZWN0aW9uQWN0aW9uIGFjdGlvbjsKLSAgICBpZiAoIWlzRmlsZVJlYWRPbmx5KCkpIHsKLQkgICAgYWN0aW9uID0gbmV3IEFTREFkZE1lc3NhZ2VBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFBZGRQYXJ0QWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQkgICAgCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFTZXROZXdNZXNzYWdlQWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotCSAgICBhY3Rpb24gPSBuZXcgVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQkgICAgCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFTZXROZXdUeXBlQWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQkgICAgCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCSAgICAKLQkgICAgYWN0aW9uID0gbmV3IFcxMVNldE5ld0VsZW1lbnRBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCSAgICAKLQkgICAgYWN0aW9uID0gbmV3IFcxMVNldEV4aXN0aW5nRWxlbWVudEFjdGlvbih0aGlzKTsKLQkgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0JICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0JICAgIAotICAgICAgQVNERGlyZWN0RWRpdEFjdGlvbiBkaXJlY3RFZGl0QWN0aW9uID0gbmV3IEFTRERpcmVjdEVkaXRBY3Rpb24odGhpcyk7Ci0gICAgICBkaXJlY3RFZGl0QWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihkaXJlY3RFZGl0QWN0aW9uKTsKLSAgICB9Ci0gICAgYWN0aW9uID0gbmV3IFcxMU9wZW5JbXBvcnRBY3Rpb24odGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgIGFjdGlvbiA9IG5ldyBPcGVuSW5OZXdFZGl0b3IodGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQl9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfRURJVE9SX01PREVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZGVmYXVsdEVkaXRvck1vZGVJZCI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHByb3RlY3RlZCBFZGl0b3JNb2RlTWFuYWdlciBjcmVhdGVFZGl0b3JNb2RlTWFuYWdlcigpCi0gIHsKLSAgICBmaW5hbCBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgPSAoUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcilnZXRBZGFwdGVyKFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuY2xhc3MpOwotICAgIEVkaXRvck1vZGVNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgRWRpdG9yTW9kZU1hbmFnZXIoV1NETF9FRElUT1JfTU9ERV9FWFRFTlNJT05fSUQpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgaW5pdCgpCi0gICAgICB7Ci0gICAgICAgIGlmIChwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyID09IG51bGwgfHwgCi0gICAgICAgICAgICBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyLmlzRWRpdG9yTW9kZUFwcGxpY2FibGUoRGVmYXVsdEVkaXRvck1vZGUuSUQpKQotICAgICAgICB7ICAgICAgICAgIAotICAgICAgICAgIGFkZE1vZGUobmV3IERlZmF1bHRFZGl0b3JNb2RlKCkpOwotICAgICAgICB9ICAKLSAgICAgICAgc3VwZXIuaW5pdCgpOwotICAgICAgfQotICAgICAgCi0gICAgICBwcm90ZWN0ZWQgRWRpdG9yTW9kZSBnZXREZWZhdWx0TW9kZSgpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBkZWZhdWx0TW9kZUlkID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhERUZBVUxUX0VESVRPUl9NT0RFX0lEKTsKLSAgICAgICAgaWYgKGRlZmF1bHRNb2RlSWQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEVkaXRvck1vZGUgZWRpdG9yTW9kZSA9IGdldEVkaXRvck1vZGUoZGVmYXVsdE1vZGVJZCk7Ci0gICAgICAgICAgaWYgKGVkaXRvck1vZGUgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZWRpdG9yTW9kZTsKLSAgICAgICAgICB9ICAKLSAgICAgICAgfSAgICAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RGVmYXVsdE1vZGUoKTsKLSAgICAgIH0gICAgICAKLSAgICB9OwotICAgIG1hbmFnZXIuc2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcihwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKTsKLSAgICByZXR1cm4gbWFuYWdlcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZWRpdG9yTW9kZUNoYW5nZWQoRWRpdG9yTW9kZSBuZXdFZGl0b3JNb2RlKQotICB7Ci0gICAgRWRpdFBhcnRGYWN0b3J5IGVkaXRQYXJ0RmFjdG9yeSA9IG5ld0VkaXRvck1vZGUuZ2V0RWRpdFBhcnRGYWN0b3J5KCk7Ci0gICAgaWYgKGVkaXRQYXJ0RmFjdG9yeSAhPSBudWxsKQotICAgIHsgIAotICAgICAgZ3JhcGhpY2FsVmlld2VyLnNldEVkaXRQYXJ0RmFjdG9yeShlZGl0UGFydEZhY3RvcnkpOwotICAgICAgaWYgKGdyYXBoaWNhbFZpZXdlciBpbnN0YW5jZW9mIERlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIpCi0gICAgICB7ICAKLSAgICAgICAgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlciB2aWV3ZXIgPSAoRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcilncmFwaGljYWxWaWV3ZXI7Ci0gICAgICAgIERlZmluaXRpb25zRWRpdFBhcnQgZWRpdFBhcnQgPSAoRGVmaW5pdGlvbnNFZGl0UGFydCl2aWV3ZXIuZ2V0Um9vdEVkaXRQYXJ0KCkuZ2V0Q29udGVudHMoKTsKLSAgICAgICAgZWRpdFBhcnQuc2V0TW9kZWxDaGlsZHJlbihDb2xsZWN0aW9ucy5FTVBUWV9MSVNUKTsKLSAgICAgICAgZWRpdFBhcnQucmVmcmVzaCgpOwotICAgICAgICBlZGl0UGFydC5zZXRNb2RlbENoaWxkcmVuKG51bGwpOwotICAgICAgICBlZGl0UGFydC5yZWZyZXNoKCk7ICAgICAgICAKLSAgICAgIH0KLSAgICB9ICAKLSAgICBJQ29udGVudFByb3ZpZGVyIHByb3ZpZGVyID0gbmV3RWRpdG9yTW9kZS5nZXRPdXRsaW5lUHJvdmlkZXIoKTsKLSAgICBpZiAocHJvdmlkZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBBU0RDb250ZW50T3V0bGluZVBhZ2Ugb3V0bGluZSA9IChBU0RDb250ZW50T3V0bGluZVBhZ2UpZ2V0Q29udGVudE91dGxpbmVQYWdlKCk7Ci0gICAgICBpZiAob3V0bGluZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBUcmVlVmlld2VyIHRyZWVWaWV3ZXIgPSBvdXRsaW5lLmdldFRyZWVWaWV3ZXIoKTsKLSAgICAgICAgaWYgKHRyZWVWaWV3ZXIgIT0gbnVsbCkKLSAgICAgICAgeyAgICAgIAotICAgICAgICAgIG91dGxpbmUuZ2V0VHJlZVZpZXdlcigpLnNldENvbnRlbnRQcm92aWRlcihwcm92aWRlcik7Ci0gICAgICAgICAgb3V0bGluZS5nZXRUcmVlVmlld2VyKCkucmVmcmVzaCgpOwotICAgICAgICB9Ci0gICAgICB9ICAKLQotICAgIH0gIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBzdG9yZUN1cnJlbnRNb2RlUHJlZmVyZW5jZShTdHJpbmcgaWQpCi0gIHsKLSAgICBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0VmFsdWUoREVGQVVMVF9FRElUT1JfTU9ERV9JRCwgaWQpOyAgICAKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NzQ0YjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgTWVzc2FnZXMuY2xhc3MpOyAvLyROT04tTkxTLTEkCi0JfQotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoQlVORExFX05BTUUpOwotCi0JcHJpdmF0ZSBNZXNzYWdlcygpIHsKLQl9Ci0KLQkvKioKLQkgKiBAZGVwcmVjYXRlZDogVXNlIE1lc3NhZ2VzLl9TVFJJTkdfS0VZIHRvIGFjY2VzcyBzdHJpbmdzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuICchJyArIGtleSArICchJzsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBkZXByZWNhdGVkOiBVc2UgTWVzc2FnZXMuX1NUUklOR19LRVkgdG8gYWNjZXNzIHN0cmluZ3MuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIFN0cmluZyBhcmcwKSB7Ci0JCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRTdHJpbmcoa2V5KSwgbmV3IE9iamVjdCBbXSB7IGFyZzAgfSk7Ci0JfQotCi0JLyoqCi0JICogQGRlcHJlY2F0ZWQ6IFVzZSBNZXNzYWdlcy5fU1RSSU5HX0tFWSB0byBhY2Nlc3Mgc3RyaW5ncy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0W10gYXJncykgewotCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0U3RyaW5nKGtleSksIGFyZ3MpOwotCX0KLQkKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0VESVRPUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9ERVBFTkRFTkNJRVNfQ0hBTkdFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfREVQRU5ERU5DSUVTX0NIQU5HRURfUkVGUkVTSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRURJVF9OQU1FU1BBQ0VTX0RJQUxPR19USVRMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX0NSRUFUSU5HX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9SRU1FTUJFUl9NWV9ERUNJU0lPTl9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUkVHRU5fQklORElOR1NfT05fU0FWRV9RVUVTVElPTk1BUks7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1dBUk5JTkdfRFVQTElDQVRFX05BTUVfRVhJU1RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FU1BBQ0VfVVJJU19UT19CRV9JTkNMVURFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX0FVVE9fUkVHRU5FUkFURV9CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9QUkVGX1BBR0VfUFJPTVBUX1JFR0VOX0JJTkRJTkdfT05fU0FWRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRURJVF9OQU1FU1BBQ0VTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX0lNUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1BBUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfWE1MX1NDSEVNQV9FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fUkVPUkRFUl9QQVJUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fUkVPUkRFUl9NRVNTQUdFX1JFRkVSRU5DRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX09QRU5fSU5fTkVXX0VESVRPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0VYSVNUSU5HX01FU1NBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FWElTVElOR19FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9FUlJPUl9OQU1FU1BBQ0VfSU5WQUxJRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRVJST1JfRklMRV9BTFJFQURZX0VYSVNUUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfREVTQ1JJUFRJT05fTkVXX1dTRExfRklMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUkVHRU5fQklORElORFNfT05fU0FWRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUkFESU9fRE9DVU1FTlRfTElURVJBTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVElUTEVfU1BFQ0lGWV9QT1JUVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQklORElOR19QUk9UT0NPTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfSU5MSU5FX1NDSEVNQV9PRjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfVEFSR0VUX05BTUVTUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUFJFRklYX1dJVEhfQ09MT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0NSRUFURV9XU0RMX1NLRUxFVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9DUkVBVEVfTkVXX1dTRExfRklMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfU09BUF9CSU5ESU5HX09QVElPTlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0hUVFBfQklORElOR19PUFRJT05TOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9BRERfRVhURU5TSU9OX0VMRU1FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1NQRUNJRllfQklORElOR19ERVRBSUxTX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9TUEVDSUZZX1BPUlRfREVUQUlMU19UT19CRV9DUkVBVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9ORVdfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTkVXX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9SRUZFUkVOQ0VfS0lORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTkVXX01FU1NBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1JBRElPX1JQQ19FTkNPREVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9SQURJT19SUENfTElURVJBTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0VYSVNUSU5HX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1NQRUNJRllfUE9SVF9ERVRBSUxTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9USVRMRV9TUEVDSUZZX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX1NQRUNJRllfQklORElOR19ERVRBSUxTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9FUlJPUl9GSUxFX01VU1RfRU5EX1dJVEhfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVElUTEVfU1BFQ0lGWV9NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9USVRMRV9ORVdfV1NETF9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9SRU5BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9UWVBFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQ0FOQ0VMX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fTkVXX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9TRVRfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRk9MREVSX0lNUE9SVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9TRVJWSUNFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRk9MREVSX0JJTkRJTkdTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9GT0xERVJfSU5URVJGQUNFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRk9MREVSX1BPUlRUWVBFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRk9MREVSX01FU1NBR0VTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fTkVXX01FU1NBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9ORVdfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1NFVF9FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fU0VUX01FU1NBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9TRVRfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQ0hFQ0tCT1hfT1ZFUldSSVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fU0VUX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fRURJVF9QT1JUX0FERFJFU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BREQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9PUEVOX0lNUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVU5TUEVDSUZJRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0JVVFRPTl9ORVc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0VMRU1FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0JVVFRPTl9CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0JJTkRJTkdfV0laQVJEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9SRU1PVkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX1NFTEVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVElUTEVfU0VMRUNUX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0RFU0NSSVBUSU9OX1NFTEVDVF9XU0RMX09SX1hTRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVElUTEVfT1BUSU9OUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfWUVTX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9QT1JUX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1BPUlRfV0laQVJEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9OT19MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUREOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9IRUxQOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FX0ZJTFRFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfV0FSTl9OQU1FX01VU1RfQ09OVEFJTl9BVF9MRUFTVF9PTkVfQ0hBUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfV0FSTl9OQU1FX0hBU19TUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfV0FSTl9OQU1FX0lOVkFMSURfRklSU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dBUk5fTkFNRV9JTlZBTElEX0NIQVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0RFRkFVTFQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dTSV9DT01QTElBTkNFX0xJTktfVEVYVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfV0FSTl9XU0lfQ09NUExJQU5DRV9QUk9UT0NPTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfRVJST1JfV1NJX0NPTVBMSUFOQ0VfUFJPVE9DT0w7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dBUk5fV1NJX0NPTVBMSUFOQ0VfUlBDX0VOQ09ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9FUlJPUl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1VOREVGSU5FRF9BUkcxOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9PUl9VTkRFRklORURfQVJHMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTk9fT0JKRUNUX1NQRUNJRklFRF9BUkcxOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OT19QQVJBTUVURVJTX1NQRUNJRklFRDsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvUmVsb2FkRGVwZW5kZW5jaWVzQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvUmVsb2FkRGVwZW5kZW5jaWVzQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyYzQzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1JlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25EZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIFJlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlIGV4dGVuZHMgQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJRWRpdG9yQWN0aW9uRGVsZWdhdGUKLXsKLQlwcml2YXRlIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciB3c2RsRWRpdG9yOwotCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElBY3Rpb24gYWN0aW9uLCBJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpCi0JewotCQl3c2RsRWRpdG9yID0gKHRhcmdldEVkaXRvciBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgPyAoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKXRhcmdldEVkaXRvciA6IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotCXsKLQkJaWYgKHdzZGxFZGl0b3IgIT0gbnVsbCkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJd3NkbEVkaXRvci5yZWxvYWREZXBlbmRlbmNpZXMoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9Tb3VyY2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9Tb3VyY2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWZlMjczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU291cmNlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRFZGl0b3JBY3Rpb25CdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuSUV4dGVuZGVkQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5JU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci0KLXB1YmxpYyBjbGFzcyBTb3VyY2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBleHRlbmRzIE11bHRpUGFnZUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yIGltcGxlbWVudHMgSUV4dGVuZGVkQ29udHJpYnV0b3IgewotCi0JcHJvdGVjdGVkIElFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciA9IG51bGw7Ci0JcHJvdGVjdGVkIElFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciA9IG51bGw7Ci0JcHJvdGVjdGVkIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciBtdWx0aVBhZ2VFZGl0b3IgPSBudWxsOwotCi0JLy8gRWRpdG9yRXh0ZW5zaW9uCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVESVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLlhNTE11bHRpUGFnZUVkaXRvclBhcnQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBJRXh0ZW5kZWRDb250cmlidXRvciBleHRlbmRlZENvbnRyaWJ1dG9yOwotCi0JcHVibGljIFNvdXJjZUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgewotCQlzdXBlcigpOwotCi0JCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yID0gbmV3IFNvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvcigpOwotCi0JCS8vIFJlYWQgYWN0aW9uIGV4dGVuc2lvbnMuCi0JCUV4dGVuZGVkRWRpdG9yQWN0aW9uQnVpbGRlciBidWlsZGVyID0gbmV3IEV4dGVuZGVkRWRpdG9yQWN0aW9uQnVpbGRlcigpOwotCQlleHRlbmRlZENvbnRyaWJ1dG9yID0gYnVpbGRlci5yZWFkQWN0aW9uRXh0ZW5zaW9ucyhFRElUT1JfSUQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXQoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgewotCQlzdXBlci5pbml0KGFjdGlvbkJhcnMpOwotCi0JCWlmIChhY3Rpb25CYXJzICE9IG51bGwpIHsKLQkJCWluaXREZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcihhY3Rpb25CYXJzKTsKLQkJCWluaXRTb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvcihhY3Rpb25CYXJzKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGluaXREZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcihJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7Ci0JCWlmIChkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciAhPSBudWxsKQotCQkJZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuaW5pdChhY3Rpb25CYXJzLCBnZXRQYWdlKCkpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGluaXRTb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvcihJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7Ci0JCWlmIChzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciAhPSBudWxsKQotCQkJc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IuaW5pdChhY3Rpb25CYXJzLCBnZXRQYWdlKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQotCQlpZiAoZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmRpc3Bvc2UoKTsKLQotCQlpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLmRpc3Bvc2UoKTsKLQotCQlpZiAoZXh0ZW5kZWRDb250cmlidXRvciAhPSBudWxsKQotCQkJZXh0ZW5kZWRDb250cmlidXRvci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yLkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yI2NvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyKQotCSAqLwotCXB1YmxpYyBmaW5hbCB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnUpIHsKLQkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51KTsKLQotCQlhZGRUb01lbnUobWVudSk7Ci0KLQkJaWYgKGV4dGVuZGVkQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWV4dGVuZGVkQ29udHJpYnV0b3IuY29udHJpYnV0ZVRvTWVudShtZW51KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnUpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElFeHRlbmRlZENvbnRyaWJ1dG9yI2NvbnRyaWJ1dGVUb1BvcHVwTWVudShJTWVudU1hbmFnZXIpCi0JICovCi0JcHVibGljIGZpbmFsIHZvaWQgY29udHJpYnV0ZVRvUG9wdXBNZW51KElNZW51TWFuYWdlciBtZW51KSB7Ci0KLQkJYWRkVG9Qb3B1cE1lbnUobWVudSk7Ci0KLQkJaWYgKGV4dGVuZGVkQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWV4dGVuZGVkQ29udHJpYnV0b3IuY29udHJpYnV0ZVRvUG9wdXBNZW51KG1lbnUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZFRvUG9wdXBNZW51KElNZW51TWFuYWdlciBtZW51KSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yLkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yI2NvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyKQotCSAqLwotCXB1YmxpYyBmaW5hbCB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7Ci0JCXN1cGVyLmNvbnRyaWJ1dGVUb1Rvb2xCYXIodG9vbEJhck1hbmFnZXIpOwotCi0JCWFkZFRvVG9vbEJhcih0b29sQmFyTWFuYWdlcik7Ci0KLQkJaWYgKGV4dGVuZGVkQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWV4dGVuZGVkQ29udHJpYnV0b3IuY29udHJpYnV0ZVRvVG9vbEJhcih0b29sQmFyTWFuYWdlcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgewotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvci5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciNjb250cmlidXRlVG9TdGF0dXNMaW5lKElTdGF0dXNMaW5lTWFuYWdlcikKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBjb250cmlidXRlVG9TdGF0dXNMaW5lKElTdGF0dXNMaW5lTWFuYWdlciBtYW5hZ2VyKSB7Ci0JCXN1cGVyLmNvbnRyaWJ1dGVUb1N0YXR1c0xpbmUobWFuYWdlcik7Ci0KLQkJYWRkVG9TdGF0dXNMaW5lKG1hbmFnZXIpOwotCi0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLmNvbnRyaWJ1dGVUb1N0YXR1c0xpbmUobWFuYWdlcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkVG9TdGF0dXNMaW5lKElTdGF0dXNMaW5lTWFuYWdlciBtYW5hZ2VyKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJRXh0ZW5kZWRDb250cmlidXRvciN1cGRhdGVUb29sYmFyQWN0aW9ucygpCi0JICovCi0JcHVibGljIHZvaWQgdXBkYXRlVG9vbGJhckFjdGlvbnMoKSB7Ci0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLnVwZGF0ZVRvb2xiYXJBY3Rpb25zKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHRhcmdldEVkaXRvcikgewotCQkvLyBzYXZlIG11bHRpUGFnZUVkaXRvciBiZWZvcmUgY2FsbGluZyBzdXBlci5zZXRBY3RpdmVFZGl0b3IodGFyZ2V0RWRpdG9yKQotCQkvLyBzdXBlci5zZXRBY3RpdmVFZGl0b3Igd2lsbCBjYWxsIHNldEFjdGl2ZVBhZ2UoSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yKQotCQkvLyBtdWx0aVBhZ2VFZGl0b3IgaXMgbmVlZGVkIGluIHNldEFjdGl2ZVBhZ2UoSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yKQotCQlpZiAodGFyZ2V0RWRpdG9yIGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKQotCQkJbXVsdGlQYWdlRWRpdG9yID0gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgdGFyZ2V0RWRpdG9yOwotCi0JCXN1cGVyLnNldEFjdGl2ZUVkaXRvcih0YXJnZXRFZGl0b3IpOwotCi0JCXVwZGF0ZVRvb2xiYXJBY3Rpb25zKCk7Ci0KLQkJaWYgKGV4dGVuZGVkQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWV4dGVuZGVkQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKHRhcmdldEVkaXRvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlUGFnZShJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3IpIHsKLQkJLy8gVGhpcyBjb250cmlidXRvciBpcyBkZXNpZ25lZCBmb3IgU3RydWN0dXJlZFRleHRNdWx0aVBhZ2VFZGl0b3JQYXJ0LgotCQkvLyBUbyBzYWZlLWd1YXJkIHRoaXMgZnJvbSBwcm9ibGVtcyBjYXVzZWQgYnkgdW5leHBlY3RlZCB1c2FnZSBieSBvdGhlciBlZGl0b3JzLCB0aGUgZm9sbG93aW5nCi0JCS8vIGNoZWNrIGlzIGFkZGVkLgotCQlpZiAobXVsdGlQYWdlRWRpdG9yICE9IG51bGwpIHsKLQkJCWlmIChhY3RpdmVFZGl0b3IgIT0gbnVsbCAmJiBhY3RpdmVFZGl0b3IgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikKLQkJCQlhY3RpdmF0ZVNvdXJjZVBhZ2UoYWN0aXZlRWRpdG9yKTsKLQkJCWVsc2UKLQkJCQlhY3RpdmF0ZURlc2lnblBhZ2UoYWN0aXZlRWRpdG9yKTsKLQkJfQotCi0JCXVwZGF0ZVRvb2xiYXJBY3Rpb25zKCk7Ci0KLQkJSUFjdGlvbkJhcnMgYWN0aW9uQmFycyA9IGdldEFjdGlvbkJhcnMoKTsKLQkJaWYgKGFjdGlvbkJhcnMgIT0gbnVsbCkgewotCQkJLy8gdXBkYXRlIG1lbnUgYmFyIGFuZCB0b29sIGJhcgotCQkJYWN0aW9uQmFycy51cGRhdGVBY3Rpb25CYXJzKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhY3RpdmF0ZURlc2lnblBhZ2UoSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yKSB7Ci0JCWlmIChkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciAhPSBudWxsICYmIGRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yIGluc3RhbmNlb2YgSURlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yKSB7Ci0JCQlkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvci5zZXRBY3RpdmVFZGl0b3IobXVsdGlQYWdlRWRpdG9yKTsKLQkJfQotCi0JCWlmIChzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciAhPSBudWxsICYmIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yIGluc3RhbmNlb2YgSVNvdXJjZVZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yKSB7Ci0JCQkvLyBpZiBkZXNpZ24gcGFnZSBpcyBub3QgcmVhbGx5IGFuIElFZGl0b3JQYXJ0LCBhY3RpdmVFZGl0b3IgPT0gbnVsbCwgc28gcGFzcyBpbiBtdWx0aVBhZ2VFZGl0b3IgaW5zdGVhZCAoZDI4MjQxNCkKLQkJCWlmIChhY3RpdmVFZGl0b3IgPT0gbnVsbCkgewotCQkJCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcihtdWx0aVBhZ2VFZGl0b3IpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKGFjdGl2ZUVkaXRvcik7Ci0JCQl9Ci0JCQkoKElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IpLnNldFZpZXdlclNwZWNpZmljQ29udHJpYnV0aW9uc0VuYWJsZWQoZmFsc2UpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWN0aXZhdGVTb3VyY2VQYWdlKElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvcikgewotCQlpZiAoZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgIT0gbnVsbCAmJiBkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciBpbnN0YW5jZW9mIElEZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgewotCQkJZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKG11bHRpUGFnZUVkaXRvcik7Ci0JCX0KLQotCQlpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCAmJiBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciBpbnN0YW5jZW9mIElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgewotCQkJc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKGFjdGl2ZUVkaXRvcik7Ci0JCQkoKElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IpLnNldFZpZXdlclNwZWNpZmljQ29udHJpYnV0aW9uc0VuYWJsZWQodHJ1ZSk7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU291cmNlUGFnZUFjdGlvbkNvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1NvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGZjNzBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU291cmNlUGFnZUFjdGlvbkNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmFjdGlvbnMuQWN0aW9uQ29udHJpYnV0b3JYTUw7Ci0KLQotLyoqCi0gKiBTb3VyY2VQYWdlQWN0aW9uQ29udHJpYnV0b3IKLSAqIAotICogVGhpcyBjbGFzcyBpcyBmb3IgbXVsdGkgcGFnZSBlZGl0b3IncyBzb3VyY2UgcGFnZSBjb250cmlidXRvci4KLSAqCi0gKiBVc2UgV1NETEVkaXRvckFjdGlvbkNvbnRyaWJ1dG9yIGZvciBzaW5nbGUgcGFnZSBlZGl0b3IKLSAqICovCi1wdWJsaWMgY2xhc3MgU291cmNlUGFnZUFjdGlvbkNvbnRyaWJ1dG9yIGV4dGVuZHMgQWN0aW9uQ29udHJpYnV0b3JYTUwgewotCi0JcHJpdmF0ZSBJQWN0aW9uQmFycyBmQmFyczsKLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGNhbGxzOgotCSAqIDx1bD4KLQkgKiAgPGxpPjxjb2RlPmNvbnRyaWJ1dGVUb01lbnU8L2NvZGU+IHdpdGggPGNvZGU+YmFyczwvY29kZT4nIG1lbnUgbWFuYWdlcjwvbGk+Ci0JICogIDxsaT48Y29kZT5jb250cmlidXRlVG9Ub29sQmFyPC9jb2RlPiB3aXRoIDxjb2RlPmJhcnM8L2NvZGU+JyB0b29sIGJhcgotCSAqICAgIG1hbmFnZXI8L2xpPgotCSAqICA8bGk+PGNvZGU+Y29udHJpYnV0ZVRvU3RhdHVzTGluZTwvY29kZT4gd2l0aCA8Y29kZT5iYXJzPC9jb2RlPicgc3RhdHVzIGxpbmUKLQkgKiAgICBtYW5hZ2VyPC9saT4KLQkgKiA8L3VsPgotCSAqIFRoZSBnaXZlbiBhY3Rpb24gYmFycyBhcmUgYWxzbyByZW1lbWJlcmVkIGFuZCBtYWRlIGFjY2Vzc2libGUgdmlhIAotCSAqIDxjb2RlPmdldEFjdGlvbkJhcnM8L2NvZGU+LgotCSAqIAotCSAqIEBwYXJhbSBiYXJzIHRoZSBhY3Rpb24gYmFycwotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSUFjdGlvbkJhcnMgYmFycykgewotCQlmQmFycyA9IGJhcnM7Ci0JCWNvbnRyaWJ1dGVUb01lbnUoYmFycy5nZXRNZW51TWFuYWdlcigpKTsKLQkJY29udHJpYnV0ZVRvVG9vbEJhcihiYXJzLmdldFRvb2xCYXJNYW5hZ2VyKCkpOwotCQljb250cmlidXRlVG9TdGF0dXNMaW5lKGJhcnMuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGlzIGNvbnRyaWJ1dG9yJ3MgYWN0aW9uIGJhcnMuCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBhY3Rpb24gYmFycwotCSAqLwotCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgewotCQlyZXR1cm4gZkJhcnM7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uV1NETC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25XU0RMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmIxMjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25XU0RMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSVNvdXJjZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLQotcHVibGljIGNsYXNzIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbldTREwgZXh0ZW5kcyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUwgewotCXByb3RlY3RlZCBNYXAgZ2V0SHlwZXJsaW5rRGV0ZWN0b3JUYXJnZXRzKElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyKSB7Ci0JCU1hcCB0YXJnZXRzID0gc3VwZXIuZ2V0SHlwZXJsaW5rRGV0ZWN0b3JUYXJnZXRzKHNvdXJjZVZpZXdlcik7Ci0JCXRhcmdldHMucHV0KCJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIiwgbnVsbCk7ICAvLyROT04tTkxTLTEkCi0JCXJldHVybiB0YXJnZXRzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODU5Y2UyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLlpvb21NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLkFjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLlpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuWm9vbUluUmV0YXJnZXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuWm9vbU91dFJldGFyZ2V0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkdyb3VwTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnRTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLlJldGFyZ2V0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvckFjdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLklXU0RMVG9vbGJhckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuYWN0aW9ucy5DYXB0dXJlU2NyZWVuQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yIGV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OwotICBwcml2YXRlIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciB3c2RsRWRpdG9yOwotICBwcm90ZWN0ZWQgSVRleHRFZGl0b3IgdGV4dEVkaXRvcjsKLSAgcHJvdGVjdGVkIElFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciA9IG51bGw7Ci0gIHByb3RlY3RlZCBMaXN0IGZQYXJ0TGlzdGVuZXJzPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIFpvb21JblJldGFyZ2V0QWN0aW9uIHpvb21JblJldGFyZ2V0QWN0aW9uOwotICBab29tT3V0UmV0YXJnZXRBY3Rpb24gem9vbU91dFJldGFyZ2V0QWN0aW9uOwotICBab29tQ29tYm9Db250cmlidXRpb25JdGVtIHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW07Ci0gIEFjdGlvbiBjYXB0dXJlU2NyZWVuQWN0aW9uOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yLgotICAgKi8KLSAgcHVibGljIFdTRExBY3Rpb25CYXJDb250cmlidXRvcigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yID0gbmV3IFNvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvcigpOwotICAgIHpvb21JblJldGFyZ2V0QWN0aW9uID0gbmV3IFpvb21JblJldGFyZ2V0QWN0aW9uKCk7Ci0gICAgem9vbUluUmV0YXJnZXRBY3Rpb24uc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigiaWNvbnMvZXRvb2wxNi96b29tcGx1cy5naWYiKSk7Ci0gICAgem9vbU91dFJldGFyZ2V0QWN0aW9uID0gbmV3IFpvb21PdXRSZXRhcmdldEFjdGlvbigpOwotICAgIHpvb21PdXRSZXRhcmdldEFjdGlvbi5zZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKCJpY29ucy9ldG9vbDE2L3pvb21taW51cy5naWYiKSk7Ci0gICAgY2FwdHVyZVNjcmVlbkFjdGlvbiA9IG5ldyBDYXB0dXJlU2NyZWVuQWN0aW9uKCk7Ci0gICAgZlBhcnRMaXN0ZW5lcnMuYWRkKHpvb21JblJldGFyZ2V0QWN0aW9uKTsKLSAgICBmUGFydExpc3RlbmVycy5hZGQoem9vbU91dFJldGFyZ2V0QWN0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFjdGl2ZVBhZ2UoSUVkaXRvclBhcnQgcGFydCkKLSAgewotICAgIGlmIChhY3RpdmVFZGl0b3JQYXJ0ID09IHBhcnQpCi0gICAgICByZXR1cm47Ci0KLSAgICBhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKLQotICAgIElBY3Rpb25CYXJzIGFjdGlvbkJhcnMgPSBnZXRBY3Rpb25CYXJzKCk7Ci0gICAgYm9vbGVhbiBpc1NvdXJjZSA9IGZhbHNlOwotICAgIAotICAgIGlmIChhY3RpdmVFZGl0b3JQYXJ0ICE9IG51bGwgJiYgYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKQotICAgIHsKLSAgICAJaXNTb3VyY2UgPSB0cnVlOwotICAgICAgICB6b29tSW5SZXRhcmdldEFjdGlvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgem9vbU91dFJldGFyZ2V0QWN0aW9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICBhY3RpdmF0ZVNvdXJjZVBhZ2UoYWN0aXZlRWRpdG9yUGFydCwgdHJ1ZSk7Ci0gICAgICAgIGNhcHR1cmVTY3JlZW5BY3Rpb24uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBhY3RpdmF0ZVNvdXJjZVBhZ2Uod3NkbEVkaXRvciwgZmFsc2UpOwotICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpCi0gICAgICB7Ci0gICAgICAgIHdzZGxFZGl0b3IgPSAoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSBwYXJ0OwotICAgICAgfQotICAgICAgaWYgKHdzZGxFZGl0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gY3M6IGhlcmUncyB3ZSBlbnN1cmUgdGhlIFVORE8gYW5kIFJFRE8gYWN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gCi0gICAgICAgIC8vIHRoZSBkZXNpZ24gdmlldyBpcyBhY3RpdmUKLSAgICAgICAgSVdvcmtiZW5jaFBhcnRTaXRlIHNpdGUgPSB3c2RsRWRpdG9yLmdldFNpdGUoKTsKLSAgICAgICAgaWYgKHNpdGUgaW5zdGFuY2VvZiBJRWRpdG9yU2l0ZSkgCi0gICAgICAgIHsKLSAgICAgICAgICBJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gd3NkbEVkaXRvci5nZXRUZXh0RWRpdG9yKCk7Ci0gICAgICAgICAgSUFjdGlvbkJhcnMgc2l0ZUFjdGlvbkJhcnMgPSAoKElFZGl0b3JTaXRlKSBzaXRlKS5nZXRBY3Rpb25CYXJzKCk7Ci0gICAgICAgICAgc2l0ZUFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihJVGV4dEVkaXRvckFjdGlvbkNvbnN0YW50cy5VTkRPLCBnZXRBY3Rpb24odGV4dEVkaXRvciwgSVRleHRFZGl0b3JBY3Rpb25Db25zdGFudHMuVU5ETykpOwotICAgICAgICAgIHNpdGVBY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoSVRleHRFZGl0b3JBY3Rpb25Db25zdGFudHMuUkVETywgZ2V0QWN0aW9uKHRleHRFZGl0b3IsIElUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzLlJFRE8pKTsKLSAgICAgICAgICBzaXRlQWN0aW9uQmFycy51cGRhdGVBY3Rpb25CYXJzKCk7ICAgICAgICAgICAgICAKLSAgICAgICAgfSAgICAgICAgCi0KLSAgICAgICAgT2JqZWN0IGFkYXB0ZXIgPSB3c2RsRWRpdG9yLmdldEFkYXB0ZXIoQWN0aW9uUmVnaXN0cnkuY2xhc3MpOwotICAgICAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIEFjdGlvblJlZ2lzdHJ5KQotICAgICAgICB7Ci0gICAgICAgICAgQWN0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSAoQWN0aW9uUmVnaXN0cnkpIGFkYXB0ZXI7Ci0gICAgICAgICAgYWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuREVMRVRFLmdldElkKCksIHJlZ2lzdHJ5LmdldEFjdGlvbihBU0REZWxldGVBY3Rpb24uSUQpKTsKLSAgICAgICAgICB6b29tSW5SZXRhcmdldEFjdGlvbi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgIHpvb21PdXRSZXRhcmdldEFjdGlvbi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgIGNhcHR1cmVTY3JlZW5BY3Rpb24uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGlmIChhY3Rpb25CYXJzICE9IG51bGwpIHsKLSAgICAgIC8vIHVwZGF0ZSBtZW51IGJhciBhbmQgdG9vbCBiYXIKLSAgICAgIGFjdGlvbkJhcnMudXBkYXRlQWN0aW9uQmFycygpOwotICAgIH0KLSAgICAKLSAgICBpZiAoem9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbSAhPSBudWxsKQotICAgIHsKLSAgICAgIHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0uc2V0VmlzaWJsZSghaXNTb3VyY2UpOwotICAgICAgem9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbS51cGRhdGUoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgYWN0aW9uIHJlZ2lzdGVkIHdpdGggdGhlIGdpdmVuIHRleHQgZWRpdG9yLgotICAgKiBAcmV0dXJuIElBY3Rpb24gb3IgbnVsbCBpZiBlZGl0b3IgaXMgbnVsbC4KLSAgICovCi0gIHByb3RlY3RlZCBJQWN0aW9uIGdldEFjdGlvbihJVGV4dEVkaXRvciBlZGl0b3IsIFN0cmluZyBhY3Rpb25JRCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiAoZWRpdG9yID09IG51bGwgPyBudWxsIDogZWRpdG9yLmdldEFjdGlvbihhY3Rpb25JRCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciBtYW5hZ2VyKQotICB7Ci0gICAgbWFuYWdlci5hZGQobmV3IEdyb3VwTWFya2VyKCJXU0RMRWRpdG9yIikpOyAvLyROT04tTkxTLTEkCi0gICAgTGlzdCBsaXN0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExFZGl0b3JDb25maWd1cmF0aW9uKCkuZ2V0VG9vbGJhckFjdGlvbnMoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgbWFuYWdlci5hZGQoKElXU0RMVG9vbGJhckFjdGlvbilpLm5leHQoKSk7Ci0gICAgfQotCi0vLyAgICBtYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotICAgIFN0cmluZ1tdIHpvb21TdHJpbmdzID0gbmV3IFN0cmluZ1tdIHsgWm9vbU1hbmFnZXIuRklUX0FMTCwgWm9vbU1hbmFnZXIuRklUX0hFSUdIVCwgWm9vbU1hbmFnZXIuRklUX1dJRFRIIH07Ci0gICAgem9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbSA9IG5ldyBab29tQ29tYm9Db250cmlidXRpb25JdGVtKGdldFBhZ2UoKSwgem9vbVN0cmluZ3MpOwotICAgIG1hbmFnZXIuYWRkKHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0pOwotICAgIG1hbmFnZXIuYWRkKGNhcHR1cmVTY3JlZW5BY3Rpb24pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpCi0gIHsKLSAgICBJRWRpdG9yUGFydCBhY3RpdmVOZXN0ZWRFZGl0b3IgPSBudWxsOwotICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgTXVsdGlQYWdlRWRpdG9yUGFydCkKLSAgICB7Ci0gICAgICBhY3RpdmVOZXN0ZWRFZGl0b3IgPSBwYXJ0OwotICAgIH0KLSAgICBzZXRBY3RpdmVQYWdlKGFjdGl2ZU5lc3RlZEVkaXRvcik7Ci0gICAgCi0gICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpCi0gICAgewotICAgICAgd3NkbEVkaXRvciA9IChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIHBhcnQ7Ci0KLSAgICAgIHRleHRFZGl0b3IgPSB3c2RsRWRpdG9yLmdldFRleHRFZGl0b3IoKTsKLSAgICAgIGlmICh0ZXh0RWRpdG9yICE9IG51bGwpCi0gICAgICB7ICAgICAgCi0gICAgICAgIGdldEFjdGlvbkJhcnMoKS51cGRhdGVBY3Rpb25CYXJzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIExpc3QgbGlzdCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0RMRWRpdG9yQ29uZmlndXJhdGlvbigpLmdldFRvb2xiYXJBY3Rpb25zKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gbGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgICgoSVdTRExUb29sYmFyQWN0aW9uKWkubmV4dCgpKS5zZXRFZGl0b3JQYXJ0KHBhcnQpOwotICAgIH0KLSAgICBzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGFjdGl2YXRlU291cmNlUGFnZShJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3IsIGJvb2xlYW4gc3RhdGUpCi0gIHsKLSAgICBpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCAmJiBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciBpbnN0YW5jZW9mIElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikKLSAgICB7Ci0gICAgICBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvci5zZXRBY3RpdmVFZGl0b3IoYWN0aXZlRWRpdG9yKTsKLSAgICAgICgoSVNvdXJjZVZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yKSBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvcikuc2V0Vmlld2VyU3BlY2lmaWNDb250cmlidXRpb25zRW5hYmxlZChzdGF0ZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChJQWN0aW9uQmFycyBiYXJzLCBJV29ya2JlbmNoUGFnZSBwYWdlKQotICB7Ci0JICBJdGVyYXRvciBlID0gZlBhcnRMaXN0ZW5lcnMuaXRlcmF0b3IoKTsKLQkgIHdoaWxlIChlLmhhc05leHQoKSkKLQkgIHsKLQkJICBwYWdlLmFkZFBhcnRMaXN0ZW5lcigoUmV0YXJnZXRBY3Rpb24pIGUubmV4dCgpKTsKLQkgIH0KLQotCSAgaW5pdFNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yKGJhcnMpOwotCSAgc3VwZXIuaW5pdChiYXJzLCBwYWdlKTsKLSAgfQotCi0gIAotICBwcm90ZWN0ZWQgdm9pZCBpbml0U291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgewotICAgIGlmIChzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciAhPSBudWxsKQotICAgICAgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IuaW5pdChhY3Rpb25CYXJzLCBnZXRQYWdlKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewotCSAgZlBhcnRMaXN0ZW5lcnMgPSBudWxsOwotCSAgaWYgKHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yICE9IG51bGwpCi0JCSAgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IuZGlzcG9zZSgpOwotCSAgc3VwZXIuZGlzcG9zZSgpOwotICB9Ci0KLXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1hbmFnZXIpIHsKLQlzdXBlci5jb250cmlidXRlVG9NZW51KG1hbmFnZXIpOwotCQotCUlNZW51TWFuYWdlciBtZW51ID0gbmV3IE1lbnVNYW5hZ2VyKE1lc3NhZ2VzLl9VSV9FRElUT1JfTkFNRSwgIldTRExFZGl0b3IiKTsKLQotICAgIG1lbnUuYWRkKHpvb21JblJldGFyZ2V0QWN0aW9uKTsKLSAgICBtZW51LmFkZCh6b29tT3V0UmV0YXJnZXRBY3Rpb24pOwotCW1hbmFnZXIuYXBwZW5kVG9Hcm91cChJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUywgbWVudSk7Ci0JbWVudS5hZGQoY2FwdHVyZVNjcmVlbkFjdGlvbik7Ci0KLSAgICBtZW51LnVwZGF0ZUFsbCh0cnVlKTsKLQkKLX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMRWRpdG9yUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExFZGl0b3JQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY3ZmQ4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExFZGl0b3JQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWRhcHRlcmZhY3RvcnkuZXh0ZW5zaW9uLkFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hZGFwdGVyZmFjdG9yeS5leHRlbnNpb24uQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLk5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLldTRExFZGl0b3JDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Qcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuYXBwaW5mby5FeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMRWRpdG9yUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiAvLywgSVBsdWdpbkhlbHBlcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1BBR0UgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGVmYXVsdHBhZ2UiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0lHTl9QQUdFID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRlc2lnbnBhZ2UiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPVVJDRV9QQUdFID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNvdXJjZXBhZ2UiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX0VESVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIjsgIC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgWFNEX0VESVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5JbnRlcm5hbFhTRE11bHRpUGFnZUVkaXRvciI7ICAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9UWVBFX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmciOyAvLyROT04tTkxTLTEkCi0gIAotICBwdWJsaWMgc3RhdGljIGludCBERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9QUk9NUFQgPSAwOwotICBwdWJsaWMgc3RhdGljIGludCBERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9JR05PUkUgPSAxOwotICBwdWJsaWMgc3RhdGljIGludCBERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9SRUxPQUQgPSAyOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgV1NETEVkaXRvclBsdWdpbiBpbnN0YW5jZTsKLSAgcHJpdmF0ZSBFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5IHJlZ2lzdHJ5OwotICBwcml2YXRlIFdTRExFZGl0b3JDb25maWd1cmF0aW9uIHdzZGxFZGl0b3JDb25maWd1cmF0aW9uID0gbnVsbDsKLQotICBwcml2YXRlIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyUmVnaXN0cnk7Ci0gIHByaXZhdGUgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgY29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnk7Ci0gIHByaXZhdGUgQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSBhZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5OwotICAKLSAgcHJpdmF0ZSBpbnQgZGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeSA9IERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1JFTE9BRDsKLQotICBwdWJsaWMgV1NETEVkaXRvckNvbmZpZ3VyYXRpb24gZ2V0V1NETEVkaXRvckNvbmZpZ3VyYXRpb24oKQotICB7Ci0gICAgaWYgKHdzZGxFZGl0b3JDb25maWd1cmF0aW9uID09IG51bGwpCi0gICAgewotICAgICAgd3NkbEVkaXRvckNvbmZpZ3VyYXRpb24gPSBuZXcgV1NETEVkaXRvckNvbmZpZ3VyYXRpb24oKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxFZGl0b3JDb25maWd1cmF0aW9uOwotICB9Ci0gIAotCXB1YmxpYyBFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5IGdldEV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnkoKSB7Ci0JCWlmIChyZWdpc3RyeSA9PSBudWxsKSB7Ci0JCQlyZWdpc3RyeSA9IG5ldyBFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5KCJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5leHRlbnNpb25DYXRlZ29yaWVzIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIHJlZ2lzdHJ5Ll9faW50ZXJuYWxTZXREZXByZWNhdGVkRXh0ZW5zaW9uSWQoIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLkV4dGVuc2lvbnNTY2hlbWFzRGVzY3JpcHRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgcmVnaXN0cnkuc2V0UHJlZlN0b3JlKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSApOwotCQl9Ci0JCQotCQlyZXR1cm4gcmVnaXN0cnk7Ci0JfQotCQotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFJlc291cmNlcyBoZWxwZXIuCi0gICAqLwotCi0gIHB1YmxpYyBXU0RMRWRpdG9yUGx1Z2luKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotCi0gICAgLy8gVE9ETy4uLiByZW1vdmUgdGhpcyBjb2RlIHdoZW4gd2UgYWRkICdkZXBlbmRlbmNpZXNDaGFuZ2VkUG9saWN5JwotICAgIC8vIHRvIGFuIGVkaXRvciBwcmVmZXJlbmNlcyBwYWdlCi0gICAgdHJ5Ci0gICAgewotICAgIAkvLyBfREVCVUdfVVBEQVRFX1BPTElDWSA9IDBEdW1teS5sYWJlbD0KLSAgICAgIFN0cmluZyBzdHJpbmcgPSAiMER1bW15LmxhYmVsIjsgLy8kTk9OLU5MUy0xJAotICAgICAgaW50IHBvbGljeSA9IEludGVnZXIucGFyc2VJbnQoc3RyaW5nKTsKLSAgICAgIGlmIChwb2xpY3kgPj0gMCAmJiBwb2xpY3kgPD0gREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUkVMT0FEKQotICAgICAgewotICAgICAgICBkZXBlbmRlbmNpZXNDaGFuZ2VkUG9saWN5ID0gcG9saWN5OwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0gIH0KLQotICBwdWJsaWMgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5IGdldEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeSgpCi0gIHsKLSAgICBpZiAoZXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5ID09IG51bGwpCi0gICAgewotICAgICAgZXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5ID0gbmV3IE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgICAgbmV3IEVsZW1lbnRDb250ZW50RmlsdGVyRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoZXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5KS5yZWFkUmVnaXN0cnkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeTsKLSAgfQotICAKLSAgcHVibGljIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IGdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCkgewotCSAgaWYgKGNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5ID09IG51bGwpIHsKLQkJICBjb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSA9IG5ldyBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkgIG5ldyBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihjb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSkucmVhZFJlZ2lzdHJ5KCk7Ci0JICB9Ci0KLQkgIHJldHVybiBjb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeTsKLSAgfQotCi0gIHB1YmxpYyBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5IGdldEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnkoKSB7Ci0JICBpZiAoYWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSA9PSBudWxsKSB7Ci0JCSAgYWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSA9IG5ldyBBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCSAgbmV3IEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoYWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSkucmVhZFJlZ2lzdHJ5KCk7Ci0JICB9Ci0KLQkgIHJldHVybiBhZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgSW5zdGFsbCBVUkwKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxVUkwoKQotICB7Ci0JdHJ5Ci0JewotCSAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFuY2UuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JewotCSAgcmV0dXJuIG51bGw7Ci0JfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgcGx1Z2luIHBoeXNpY2FsIGRpcmVjdG9yeSBsb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJUGF0aCBnZXRQbHVnaW5Mb2NhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJUGF0aCBpbnN0YWxsUGF0aCA9IG5ldyBQYXRoKGdldEluc3RhbGxVUkwoKS50b0V4dGVybmFsRm9ybSgpKS5yZW1vdmVUcmFpbGluZ1NlcGFyYXRvcigpOwotICAgICAgU3RyaW5nIGluc3RhbGxTdHIgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwobmV3IFVSTChpbnN0YWxsUGF0aC50b1N0cmluZygpKSkuZ2V0RmlsZSgpOwotICAgICAgcmV0dXJuIG5ldyBQYXRoKGluc3RhbGxTdHIpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiV1NETEVkaXRvclBsdWdpbi5nZXRQbHVnaW5Mb2NhdGlvbigpIGV4Y2VwdGlvbi4uIiArIGUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCBIYXNodGFibGUgaW1hZ2VEZXNjcmlwdG9yQ2FjaGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgcHJvdGVjdGVkIEltYWdlRGVzY3JpcHRvciBpbnRlcm5hbEdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcga2V5KQotICB7Ci0gICAgSW1hZ2VEZXNjcmlwdG9yIGltYWdlRGVzY3JpcHRvciA9IChJbWFnZURlc2NyaXB0b3IpIGltYWdlRGVzY3JpcHRvckNhY2hlLmdldChrZXkpOwotICAgIGlmIChpbWFnZURlc2NyaXB0b3IgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbWFnZURlc2NyaXB0b3IgPSBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoV1NETEVkaXRvclBsdWdpbi5jbGFzcywga2V5KTsKLSAgICAgIGlmIChpbWFnZURlc2NyaXB0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW1hZ2VEZXNjcmlwdG9yQ2FjaGUucHV0KGtleSwgaW1hZ2VEZXNjcmlwdG9yKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGltYWdlRGVzY3JpcHRvcjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBpbWFnZSBmaWxlIGF0IHRoZSBnaXZlbgotICAgKiBwbHVnLWluIHJlbGF0aXZlIHBhdGguCi0gICAqCi0gICAqIEBwYXJhbSBwYXRoIHRoZSBwYXRoCi0gICAqIEByZXR1cm4gdGhlIGltYWdlIGRlc2NyaXB0b3IKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oU3RyaW5nIHBhdGgpIHsKLSAgICByZXR1cm4gQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgcGF0aCk7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcga2V5KQotICB7Ci0gICAgcmV0dXJuIGdldEluc3RhbmNlKCkuaW50ZXJuYWxHZXRJbWFnZURlc2NyaXB0b3Ioa2V5KTsKLSAgfQotCi0gIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShTdHJpbmcgaWNvbk5hbWUpCi0gIHsKLSAgICBJbWFnZVJlZ2lzdHJ5IGltYWdlUmVnaXN0cnkgPSBnZXRJbWFnZVJlZ2lzdHJ5KCk7Ci0gICAgCi0gICAgaWYgKGltYWdlUmVnaXN0cnkuZ2V0KGljb25OYW1lKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBpbWFnZVJlZ2lzdHJ5LmdldChpY29uTmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpbWFnZVJlZ2lzdHJ5LnB1dChpY29uTmFtZSwgSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21GaWxlKGdldENsYXNzKCksIGljb25OYW1lKSk7Ci0gICAgICByZXR1cm4gaW1hZ2VSZWdpc3RyeS5nZXQoaWNvbk5hbWUpOwotICAgIH0KLSAgfQotICAKLSAgLyoKLSAgICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoU3RyaW5nIGtleSwgYm9vbGVhbiBpc0dyYXllZCkKLSAgICB7IAotICAgICAgSW1hZ2UgaW1hZ2UgPSBudWxsOwotICAgICAgaWYgKCFpc0dyYXllZCkKLSAgICAgIHsKLSAgICAgICAgaW1hZ2UgPSBzdXBlci5nZXRJbWFnZShrZXkpOwotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGltYWdlID0gKEltYWdlKWdyYXllZEltYWdlTWFwLmdldChrZXkpOwotICAgICAgICBpZiAoaW1hZ2UgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEltYWdlIGNvbG9ySW1hZ2UgPSBzdXBlci5nZXRJbWFnZShrZXkpOwotICAgICAgICAgIGlmIChjb2xvckltYWdlICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW1hZ2UgPSBuZXcgSW1hZ2UoRGlzcGxheS5nZXRDdXJyZW50KCksIGNvbG9ySW1hZ2UsIFNXVC5JTUFHRV9HUkFZKTsvL1NXVC5JTUFHRV9ESVNBQkxFKTsKLSAgICAgICAgICAgIGdyYXllZEltYWdlTWFwLnB1dChrZXksIGltYWdlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBpbWFnZTsKLSAgICB9Ci0gICovCi0KLSAgLyoqCi0gICAqIEdldCB0aGUgbWV0YWRhdGEgZGlyZWN0b3J5IGZvciB0aGlzIHBsdWdpbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWV0YURhdGFEaXJlY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIGdldEluc3RhbmNlKCkuZ2V0U3RhdGVMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NETEVkaXRvclBsdWdpbiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0JICBuZXcgV1NETEVkaXRvclBsdWdpbigpOwotCX0KLSAgICAKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICBwdWJsaWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU2hlbGwgZ2V0U2hlbGwoKQotICB7Ci0gICAgcmV0dXJuIGdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMob3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcyhJUHJlZmVyZW5jZVN0b3JlIHN0b3JlKQotICB7Ci0gICAgc3RvcmUuc2V0RGVmYXVsdChERUZBVUxUX1BBR0UsIERFU0lHTl9QQUdFKTsKLSAgICAKLSAgICAvLyBXU0RMUHJlZmVyZW5jZVBhZ2UgcHJlZnMKLSAgICBzdG9yZS5zZXREZWZhdWx0KE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFLCBERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0UpOyAvLyROT04tTkxTLTEkCi0gICAgc3RvcmUuc2V0RGVmYXVsdChNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0FVVE9fUkVHRU5FUkFURV9CSU5ESU5HLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKLSAgICBzdG9yZS5zZXREZWZhdWx0KE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfUFJPTVBUX1JFR0VOX0JJTkRJTkdfT05fU0FWRSwgZmFsc2UpOyAvLyROT04tTkxTLTEkCi0gICAgLy8gRG8gd2UgbmVlZCB0aGlzIHByZWZlcmVuY2UgYmVsb3c/ICBMb29rIGF0IFdTRExQcmVmZXJlbmNlUGFnZS5qYXZhCi0vLyAgICBzdG9yZS5zZXREZWZhdWx0KCJEZWZ1YWx0IExvY2F0aW9uOiIsICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBzZXREZWZhdWx0UGFnZQotICAgKiBTZXQgdGhlIGRlZmF1bHQgcGFnZSB0byBvcGVuIHdoZW4gdGhlIGVkaXRvciBzdGFydHMuIE1haW50YWlucyB0aGUgc3RhdGUKLSAgICogd2hlbiBXU0FEIGlzIHNodXRkb3duIGFuZCByZXN0YXJ0ZWQuCi0gICAqIEBwYXJhbSBwYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0UGFnZShTdHJpbmcgcGFnZSkKLSAgewotICAgIGdldFByZWZlcmVuY2VTdG9yZSgpLnNldFZhbHVlKERFRkFVTFRfUEFHRSwgcGFnZSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRQYWdlKCkKLSAgewotICAgIHJldHVybiBnZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoREVGQVVMVF9QQUdFKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0RGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeSgpCi0gIHsKLSAgICAvL3JldHVybiBnZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRJbnQoREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1kpOwotICAgIHJldHVybiBkZXBlbmRlbmNpZXNDaGFuZ2VkUG9saWN5OwotICB9Ci0gIAotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0RVQ1RfQ1VTVE9NSVpBVElPTl9QUk9WSURFUl9QTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlclBsdWdpbklkIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPRFVDVF9DVVNUT01JWkFUSU9OX1BST1ZJREVSX0NMQVNTX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlckNsYXNzTmFtZSI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHByaXZhdGUgc3RhdGljIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVySW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgCi0gIHB1YmxpYyBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIGdldFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIoKQotICB7Ci0gICAgaWYgKCFwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVySW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlckluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgIFN0cmluZyBwbHVnaW5OYW1lID0gZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKFBST0RVQ1RfQ1VTVE9NSVpBVElPTl9QUk9WSURFUl9QTFVHSU5fSUQpOwotICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhQUk9EVUNUX0NVU1RPTUlaQVRJT05fUFJPVklERVJfQ0xBU1NfTkFNRSk7Ci0gICAgICBpZiAocGx1Z2luTmFtZSAhPSBudWxsICYmIHBsdWdpbk5hbWUubGVuZ3RoKCkgPiAwICYmCi0gICAgCSAgY2xhc3NOYW1lICE9IG51bGwgJiYgY2xhc3NOYW1lLmxlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKHBsdWdpbk5hbWUpOwotICAgICAgICAgIENsYXNzIGNsYXp6ID0gYnVuZGxlLmxvYWRDbGFzcyhjbGFzc05hbWUpOwotICAgICAgICAgIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgPSAoUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciljbGF6ei5uZXdJbnN0YW5jZSgpOwotICAgICAgICB9ICAgICAgICAgIAotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9ICAKLSAgICByZXR1cm4gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLSAgfSAgIAotfQotCi1jbGFzcyBCYXNlUmVnaXN0cnlSZWFkZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiByZWFkIGZyb20gcGx1Z2luIHJlZ2lzdHJ5IGFuZCBwYXJzZSBpdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeShTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJZCkKLSAgewotCUlFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JSUV4dGVuc2lvblBvaW50IHBvaW50ID0gZXh0ZW5zaW9uUmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoUExVR0lOX0lELCBleHRlbnNpb25Qb2ludElkKTsKLQotICAgIGlmIChwb2ludCAhPSBudWxsKQotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gcG9pbnQuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICByZWFkRWxlbWVudChlbGVtZW50c1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgfQotfQotCi0vKioKLSAqIAotICovCi1hYnN0cmFjdCBjbGFzcyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIgZXh0ZW5kcyBCYXNlUmVnaXN0cnlSZWFkZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUVfU1BBQ0UgPSAibmFtZXNwYWNlIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgU3RyaW5nIGV4dGVuc2lvblBvaW50SWQ7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGFnTmFtZTsKLSAgcHJvdGVjdGVkIFN0cmluZ1tdIGF0dHJpYnV0ZU5hbWVzOwotICBwcm90ZWN0ZWQgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5IG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeTsKLQotICBwcml2YXRlIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJZCwgU3RyaW5nIHRhZ05hbWUsIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmV4dGVuc2lvblBvaW50SWQgPSBleHRlbnNpb25Qb2ludElkOwotICAgIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7Ci0gICAgdGhpcy5uc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgPSBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnk7Ci0gIH0KLQotICBwdWJsaWMgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKFN0cmluZyBleHRlbnNpb25Qb2ludElkLCBTdHJpbmcgdGFnTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzKGV4dGVuc2lvblBvaW50SWQsIHRhZ05hbWUsIG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgYXR0cmlidXRlTmFtZXMgPSBuZXcgU3RyaW5nWzFdOwotICAgIGF0dHJpYnV0ZU5hbWVzWzBdID0gYXR0cmlidXRlTmFtZTsKLSAgfQotCi0gIHB1YmxpYyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoU3RyaW5nIGV4dGVuc2lvblBvaW50SWQsIFN0cmluZyB0YWdOYW1lLCBTdHJpbmdbXSBhdHRyaWJ1dGVOYW1lcywgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5IG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSkKLSAgewotICAgIHRoaXMoZXh0ZW5zaW9uUG9pbnRJZCwgdGFnTmFtZSwgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgICB0aGlzLmF0dHJpYnV0ZU5hbWVzID0gYXR0cmlidXRlTmFtZXM7Ci0gIH0KLSAgLyoqCi0gICAqIHJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIHBhcnNlIGl0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZFJlZ2lzdHJ5KCkKLSAgewotICAgIHN1cGVyLnJlYWRSZWdpc3RyeShleHRlbnNpb25Qb2ludElkKTsKLSAgfQotCi0gIC8qKgotICAgKiByZWFkRWxlbWVudCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9OQU1FX1NQQUNFKTsKLSAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWVzLmxlbmd0aCA9PSAxKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWVzWzBdKTsKLSAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5LnB1dChuYW1lc3BhY2UsIGNsYXNzTmFtZSwgYnVuZGxlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tpXTsKLSAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCAmJiBjbGFzc05hbWUubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtYXAucHV0KGF0dHJpYnV0ZU5hbWUsIGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeS5wdXQobmFtZXNwYWNlLCBtYXAsIGJ1bmRsZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotLyoqCi0gKiAKLSAqLwotY2xhc3MgRWxlbWVudENvbnRlbnRGaWx0ZXJFeHRlbnNpb25SZWdpc3RyeVJlYWRlciBleHRlbmRzIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRFTlNJT05fUE9JTlRfSUQgPSAiZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19OQU1FID0gImV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBFbGVtZW50Q29udGVudEZpbHRlckV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkpCi0gIHsKLSAgICBzdXBlcihFWFRFTlNJT05fUE9JTlRfSUQsIFRBR19OQU1FLCAiY2xhc3MiLCBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkpOyAvLyROT04tTkxTLTEkCi0gIH0KLX0KLQotY2xhc3MgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIgZXh0ZW5kcyBCYXNlUmVnaXN0cnlSZWFkZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX1BPSU5UX0lEID0gImNvbnRlbnRHZW5lcmF0b3JVSSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9DT05URU5UX0dFTkVSQVRPUiA9ICJjb250ZW50R2VuZXJhdG9yVUkiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FID0gIm5hbWUiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfTEFCRUwgPSAibGFiZWwiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9QT1JUX09QVElPTlNfUEFHRV9DTEFTUyA9ICJwb3J0T3B0aW9uc1BhZ2VDbGFzcyI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0JJTkRJTkdfT1BUSU9OU19QQUdFX0NMQVNTID0gImJpbmRpbmdPcHRpb25zUGFnZUNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByb3RlY3RlZCBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeTsKLQotICBwdWJsaWMgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0gIH0KLQotICAvKioKLSAgICogcmVhZCBmcm9tIHBsdWdpbiByZWdpc3RyeSBhbmQgcGFyc2UgaXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoKQotICB7Ci0gICAgc3VwZXIucmVhZFJlZ2lzdHJ5KEVYVEVOU0lPTl9QT0lOVF9JRCk7Ci0gIH0KLQotICAvKioKLSAgICogcmVhZEVsZW1lbnQoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKEVMRU1FTlRfQ09OVEVOVF9HRU5FUkFUT1IpKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX05BTUUpOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9OQU1FU1BBQ0UpOwotCi0gICAgICBpZiAobmFtZSAhPSBudWxsICYmIG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gYmluZGluZ0dlbmVyYXRvckV4dGVuc2lvbiA9IG5ldyBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24obmFtZSwgbmFtZXNwYWNlKTsKLSAgICAgICAgYmluZGluZ0dlbmVyYXRvckV4dGVuc2lvbi5zZXRQb3J0T3B0aW9uc1BhZ2VDbGFzc05hbWUoZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX1BPUlRfT1BUSU9OU19QQUdFX0NMQVNTKSk7Ci0gICAgICAgIGJpbmRpbmdHZW5lcmF0b3JFeHRlbnNpb24uc2V0QmluZGluZ09wdGlvbnNQYWdlQ2xhc3NOYW1lKGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9CSU5ESU5HX09QVElPTlNfUEFHRV9DTEFTUykpOwotICAgICAgICBiaW5kaW5nR2VuZXJhdG9yRXh0ZW5zaW9uLnNldExhYmVsKGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9MQUJFTCkpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIENsYXNzTG9hZGVyIHBsdWdpbkNsYXNzc0xvYWRlciA9IGVsZW1lbnQuZ2V0RGVjbGFyaW5nRXh0ZW5zaW9uKCkuZ2V0RGVjbGFyaW5nUGx1Z2luRGVzY3JpcHRvcigpLmdldFBsdWdpbigpLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICAgICAgICBiaW5kaW5nR2VuZXJhdG9yRXh0ZW5zaW9uLnNldENsYXNzTG9hZGVyKHBsdWdpbkNsYXNzc0xvYWRlcik7Ci0gICAgICAgICAgcmVnaXN0cnkuYWRkKGJpbmRpbmdHZW5lcmF0b3JFeHRlbnNpb24pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLWNsYXNzIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIgZXh0ZW5kcyBCYXNlUmVnaXN0cnlSZWFkZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX1BPSU5UX0lEID0gImFkYXB0ZXJGYWN0b3J5IjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX0FEQVBURVJfRkFDVE9SWSA9ICJhZGFwdGVyRmFjdG9yeSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9BREFQVEVSX0ZBQ1RPUllfQ0xBU1MgPSAiYWRhcHRlckZhY3RvcnlDbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQotICBwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeTsKLQotICBwdWJsaWMgQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIHJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIHBhcnNlIGl0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZFJlZ2lzdHJ5KCkKLSAgewotICAgIHN1cGVyLnJlYWRSZWdpc3RyeShFWFRFTlNJT05fUE9JTlRfSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIHJlYWRFbGVtZW50KCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhFTEVNRU5UX0FEQVBURVJfRkFDVE9SWSkpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9OQU1FU1BBQ0UpOwotCi0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uIGFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uID0gbmV3IEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uKG5hbWVzcGFjZSk7Ci0gICAgICAgIGFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uLnNldEFkYXB0ZXJGYWN0b3J5Q2xhc3NOYW1lKGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9BREFQVEVSX0ZBQ1RPUllfQ0xBU1MpKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBDbGFzc0xvYWRlciBwbHVnaW5DbGFzc3NMb2FkZXIgPSBlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldERlY2xhcmluZ1BsdWdpbkRlc2NyaXB0b3IoKS5nZXRQbHVnaW4oKS5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7Ci0gICAgICAgICAgYWRhcHRlckZhY3RvcnlFeHRlbnNpb24uc2V0Q2xhc3NMb2FkZXIocGx1Z2luQ2xhc3NzTG9hZGVyKTsKLSAgICAgICAgICByZWdpc3RyeS5hZGQoYWRhcHRlckZhY3RvcnlFeHRlbnNpb24pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExFZGl0b3JSZXNvdXJjZUNoYW5nZUhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZjZmE1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExFZGl0b3JSZXNvdXJjZUNoYW5nZUhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETEVkaXRvclJlc291cmNlQ2hhbmdlSGFuZGxlcgotewotICBwcm90ZWN0ZWQgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIHdzZGxFZGl0b3I7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzVXBkYXRlUmVxdWlyZWQ7Ci0gIHByb3RlY3RlZCBJbnRlcm5hbFJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKLSAgcHJvdGVjdGVkIEludGVybmFsUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lcjsKLQotICBwdWJsaWMgV1NETEVkaXRvclJlc291cmNlQ2hhbmdlSGFuZGxlcihJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvcikKLSAgewotICAgIHRoaXMud3NkbEVkaXRvciA9IHdzZGxFZGl0b3I7Ci0gICAgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9IG5ldyBJbnRlcm5hbFJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKTsKLSAgICBwYXJ0TGlzdGVuZXIgPSBuZXcgSW50ZXJuYWxQYXJ0TGlzdGVuZXIoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGF0dGFjaCgpCi0gIHsKLSAgICBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKLSAgICB3c2RsRWRpdG9yLmdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRQYXJ0U2VydmljZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsKLSAgICBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKLSAgICB3c2RsRWRpdG9yLmdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRQYXJ0U2VydmljZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIE1hcCBjb21wdXRlRGVwZW5kZW5jeU1hcCgpCi0gIHsKLSAgICBNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgd3NkbEVkaXRvcikuZ2V0TW9kZWwoKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgKChXMTFEZXNjcmlwdGlvbikgZGVzY3JpcHRpb24pLmdldFRhcmdldCgpOwotICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKS5nZXRSZXNvdXJjZVNldCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlpLm5leHQoKTsKLSAgICAgIGlmIChyZXNvdXJjZSAhPSBkZWZpbml0aW9uLmVSZXNvdXJjZSgpKQotICAgICAgewotICAgICAgICBTdHJpbmcgdXJpID0gcmVzb3VyY2UuZ2V0VVJJKCkudG9TdHJpbmcoKTsKLSAgICAgICAgaWYgKG1hcC5nZXQodXJpKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbWFwLnB1dCh1cmksIHVyaSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1SZWxvYWQoKQotICB7Ci0gIAlib29sZWFuIGRvUmVsb2FkID0gZmFsc2U7ICAJCi0JaW50IHBvbGljeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREZXBlbmRlbmNpZXNDaGFuZ2VkUG9saWN5KCk7Ci0JCi0gIAlpZiAocG9saWN5ID09IFdTRExFZGl0b3JQbHVnaW4uREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUFJPTVBUKQotICAJewotCQlkb1JlbG9hZCA9IE1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uKHdzZGxFZGl0b3IuZ2V0U2l0ZSgpLmdldFNoZWxsKCksIE1lc3NhZ2VzLl9VSV9ERVBFTkRFTkNJRVNfQ0hBTkdFRCwgTWVzc2FnZXMuX1VJX0RFUEVOREVOQ0lFU19DSEFOR0VEX1JFRlJFU0gpOyAgCSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgCX0KLSAgCWVsc2UgaWYgKHBvbGljeSA9PSBXU0RMRWRpdG9yUGx1Z2luLkRFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1JFTE9BRCkKLSAgCXsKLSAgCQlkb1JlbG9hZCA9IHRydWU7Ci0gIAl9Ci0gIAkKLSAgICBpZiAoZG9SZWxvYWQpCi0gICAgeyAgICAKLSAgICAgIHdzZGxFZGl0b3IucmVsb2FkRGVwZW5kZW5jaWVzKCk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzTGlzdGVuaW5nVG9SZXNvdXJjZUNoYW5nZXMoKQotICB7Ci0gIAlpbnQgcG9saWN5ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlcGVuZGVuY2llc0NoYW5nZWRQb2xpY3koKTsKLSAgCXJldHVybiBwb2xpY3kgPT0gV1NETEVkaXRvclBsdWdpbi5ERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9QUk9NUFQgfHwKLSAgCQkgICBwb2xpY3kgPT0gV1NETEVkaXRvclBsdWdpbi5ERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9SRUxPQUQ7Ci0gIH0KLQotCi0gIGNsYXNzIEludGVybmFsUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciBpbXBsZW1lbnRzIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VEZWx0YVZpc2l0b3IKLSAgewotICAgIHByb3RlY3RlZCBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNQZW5kaW5nID0gZmFsc2U7Ci0gICAgcHJvdGVjdGVkIGludCBjb3VudCA9IDA7Ci0KLSAgICBwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpCi0gICAgeyAgICAgIAkKLSAgICAgIERpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0Q3VycmVudCgpOwotICAgICAgCSAgICAgCQotICAgICAgaWYgKGRpc3BsYXkgIT0gbnVsbCAmJiBpc0xpc3RlbmluZ1RvUmVzb3VyY2VDaGFuZ2VzKCkgJiYgIWlzVXBkYXRlUmVxdWlyZWQpCi0gICAgICB7Ci0gICAgICAgIGlmIChldmVudC5nZXRUeXBlKCkgPT0gSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpCi0gICAgICAgIHsKLSAgICAgICAgICBJUmVzb3VyY2VEZWx0YVtdIGRlbHRhcyA9IGV2ZW50LmdldERlbHRhKCkuZ2V0QWZmZWN0ZWRDaGlsZHJlbigpOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVsdGFzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBkZWx0YXNbaV0uYWNjZXB0KHRoaXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGlzdC5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1BlbmRpbmcpCi0gICAgICAgICAgewotICAgICAgICAgICAgaXNQZW5kaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGRpc3BsYXkudGltZXJFeGVjKDIwMDAsIG5ldyBUaW1lckV2ZW50KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgIHsKLSAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IGRlbHRhLmdldFJlc291cmNlKCk7Ci0gICAgICBpZiAocmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotICAgICAgewotICAgICAgICBpZiAoIWxpc3QuY29udGFpbnMocmVzb3VyY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQocmVzb3VyY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjbGFzcyBUaW1lckV2ZW50IGltcGxlbWVudHMgUnVubmFibGUKLSAgICB7Ci0gICAgICBwdWJsaWMgVGltZXJFdmVudCgpCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJOZXdUaW1lckV2ZW50KCIgKyB3c2RsRWRpdG9yLmdldERlZmluaXRpb24oKS5lUmVzb3VyY2UoKS5nZXRVUkkoKSArICIpICIgKyBjb3VudCk7ICAgICAgCQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgewotLy8gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2UpaS5uZXh0KCk7Ci0vLyAgICAgICAgICBTdHJpbmcgcGxhdGZvcm1QYXRoID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkocmVzb3VyY2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS50b1N0cmluZygpOwotLy8gICAgICAgIH0KLQotICAgICAgICBNYXAgZGVwZW5kZW5jeU1hcCA9IGNvbXB1dGVEZXBlbmRlbmN5TWFwKCk7Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gbGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKWkubmV4dCgpOwotICAgICAgICAgIFN0cmluZyBwbGF0Zm9ybVBhdGggPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShyZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgaWYgKGRlcGVuZGVuY3lNYXAuZ2V0KHBsYXRmb3JtUGF0aCkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpc1VwZGF0ZVJlcXVpcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICh3c2RsRWRpdG9yLmdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRQYXJ0U2VydmljZSgpLmdldEFjdGl2ZVBhcnQoKSA9PSB3c2RsRWRpdG9yKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpc1VwZGF0ZVJlcXVpcmVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgIHBlcmZvcm1SZWxvYWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpc1BlbmRpbmcgPSBmYWxzZTsKLSAgICAgICAgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBjbGFzcyBJbnRlcm5hbFBhcnRMaXN0ZW5lciBpbXBsZW1lbnRzIElQYXJ0TGlzdGVuZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkKLSAgICB7Ci0gICAgICBpZiAocGFydCA9PSB3c2RsRWRpdG9yKQotICAgICAgeyAgICAgCi0gICAgICAgIGlmIChpc1VwZGF0ZVJlcXVpcmVkKQotICAgICAgICB7Ci0gICAgICAgICAgaXNVcGRhdGVSZXF1aXJlZCA9IGZhbHNlOwotICAgICAgICAgIHBlcmZvcm1SZWxvYWQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcGFydCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwYXJ0KQotICAgIHsKLSAgICB9Ci0KLSAgIAotICAgIHB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwYXJ0KQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0gICAgewotICAgIH0KLSAgfQotCi0KLX0KLQotLyoKLWNsYXNzIERlcGVuZGVuY3lWaXNpdG9yCi17Ci0JcHVibGljIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHRoZUltcG9ydCkKLQl7Ci0JCWlmICh0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKSAhPSBudWxsKQotCQl7Ci0JCQl2aXNpdERlZmluaXRpb24odGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCkpOwotCQl9Ci0JCWVsc2UgaWYgKHRoZUltcG9ydC5nZXRFU2NoZW1hKCkgIT0gbnVsbCkKLQkJewotCQkJdmlzaXRTY2hlbWEodGhlSW1wb3J0LmdldEVTY2hlbWEoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB2aXNpdFhTRFNjaGVtYURpcmVjdGl2ZShYU0RTY2hlbWFEaXJlY3RpdmUgZGlyZWN0aXZlKQotCXsKLQkJWFNEU2NoZW1hIHJlZmVyZW5jZWRTY2hlbWEgPSBkaXJlY3RpdmUuZ2V0UmVzb2x2ZWRTY2hlbWEoKTsKLQkJaWYgKHJlZmVyZW5jZWRTY2hlbWEgIT0gbnVsbCkKLQkJewotCQkJdmlzaXRTY2hlbWEocmVmZXJlbmNlZFNjaGVtYSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotCXsKLQkJaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLQkJewotCQkJZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJCXsKLQkJCQl2aXNpdEltcG9ydCgoSW1wb3J0KWkubmV4dCgpKTsKLQkJCX0KLQkJCVR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLQkJCWlmICh0eXBlcyAhPSBudWxsKQotCQkJewotCi0JCQkJZm9yIChJdGVyYXRvciBpID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJCQl7Ci0JCQkJCU9iamVjdCBvID0gaS5uZXh0KCk7Ci0JCQkJCWlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0JCQkJCXsKLQkJCQkJCVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpbzsKLQkJCQkJCWlmIChlLmdldEVYU0RTY2hlbWEoKSAhPSBudWxsKQotCQkJCQkJewotCQkJCQkJCXZpc2l0U2NoZW1hKGUuZ2V0RVhTRFNjaGVtYSgpKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHZpc2l0U2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpCi0JewotCQlmb3IgKEl0ZXJhdG9yIGkgPSBzY2hlbWEuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCXsKLQkJCU9iamVjdCBvID0gaS5uZXh0KCk7Ci0JCQlpZiAobyBpbnN0YW5jZW9mIFhTRFNjaGVtYURpcmVjdGl2ZSkKLQkJCXsKLQkJCQl2aXNpdFhTRFNjaGVtYURpcmVjdGl2ZSgoWFNEU2NoZW1hRGlyZWN0aXZlKW8pOwotCQkJfQotCQl9Ci0JfQotfQotCi1jbGFzcyBSZWxvYWREZXBlbmRlbmN5VmlzaXRvciBleHRlbmRzIERlcGVuZGVuY3lWaXNpdG9yCi17Ci0JcHVibGljIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHRoZUltcG9ydCkKLQl7Ci0JCUNvbXBvbmVudEhhbmRsZXIgaGFuZGxlciA9IFdTRExSZWNvbmNpbGVyLmdldFJlY29uY2lsZXIodGhlSW1wb3J0KTsKLQkJRWxlbWVudCBlbGVtZW50ID0gV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHRoZUltcG9ydCk7Ci0JCWlmIChlbGVtZW50ICE9IG51bGwgJiYgaGFuZGxlciAhPSBudWxsKQotCQl7Ci0JCQloYW5kbGVyLnJlY29uY2lsZSh3c2RsRWRpdG9yLmdldERlZmluaXRpb24oKSwgdGhlSW1wb3J0LCBlbGVtZW50KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHZpc2l0WFNEU2NoZW1hRGlyZWN0aXZlKFhTRFNjaGVtYURpcmVjdGl2ZSBkaXJlY3RpdmUpCi0JewotCi0JfQotfSovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETFByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNzIwNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlN0cmluZ0ZpZWxkRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLQotcHVibGljIGNsYXNzIFdTRExQcmVmZXJlbmNlUGFnZSBleHRlbmRzIEZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cyBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UgewotCi0gIHB1YmxpYyBXU0RMUHJlZmVyZW5jZVBhZ2UoKQotICB7Ci0gICAgc3VwZXIoRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZS5GTEFUKTsKLSAgICBzZXRQcmVmZXJlbmNlU3RvcmUoV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpCi0gIHsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpCi0gIHsKLSAgICBDb21wb3NpdGUgcGFyZW50ID0gZ2V0RmllbGRFZGl0b3JQYXJlbnQoKTsKLQlHcmlkTGF5b3V0IHBhcmVudExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JcGFyZW50TGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQlwYXJlbnQuc2V0TGF5b3V0KHBhcmVudExheW91dCk7Ci0JCi0vLyAgICBXb3JrYmVuY2hIZWxwLnNldEhlbHAoZ2V0Q29udHJvbCgpLCBzb21lIGNvbnRleHQgaWQgaGVyZSk7IAotCi0JR3JvdXAgZ3JvdXAgPSBuZXcgR3JvdXAocGFyZW50LCBTV1QuTlVMTCk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIGdyb3VwLnNldExheW91dChsYXlvdXQpOwotICAgIGdyb3VwLnNldFRleHQoTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9DUkVBVElOR19GSUxFUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZ3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShncm91cCwgU1dULk5VTEwpOwotICAgIEdyaWREYXRhIGRhdGExID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YTEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGExLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGExLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGExKTsKLQkKLQlTdHJpbmcgbmFtZXNwYWNlTGFiZWwgPSBNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRTsgIC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmdGaWVsZEVkaXRvciB0YXJnZXROYW1lc3BhY2UgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IobmFtZXNwYWNlTGFiZWwsIG5hbWVzcGFjZUxhYmVsLCBjb21wb3NpdGUpOwotICAgIEdyaWRMYXlvdXQgY29tcG9zaXRlTGF5b3V0ID0gKEdyaWRMYXlvdXQpY29tcG9zaXRlLmdldExheW91dCgpOwotICAgIGNvbXBvc2l0ZUxheW91dC5tYXJnaW5XaWR0aCA9IDU7ICAgLy8gRGVmYXVsdCB2YWx1ZQotICAgIGNvbXBvc2l0ZUxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICBhZGRGaWVsZCh0YXJnZXROYW1lc3BhY2UpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodGFyZ2V0TmFtZXNwYWNlLmdldFRleHRDb250cm9sKGNvbXBvc2l0ZSksIEFTREVkaXRvckNTSGVscElkcy5XU0RMX1BSRUZfREVGQVVMVF9UTlMpOwotCQotCVN0cmluZyBnZW5lcmF0ZUxhYmVsID0gTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9BVVRPX1JFR0VORVJBVEVfQklORElORzsgLy8kTk9OLU5MUy0xJAotCUJvb2xlYW5GaWVsZEVkaXRvciBnZW5lcmF0ZUJpbmRpbmdPblNhdmUgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKGdlbmVyYXRlTGFiZWwsIGdlbmVyYXRlTGFiZWwsIHBhcmVudCk7Ci0JYWRkRmllbGQoZ2VuZXJhdGVCaW5kaW5nT25TYXZlKTsKLSAgICAKLQlTdHJpbmcgc2hvd0dlbmVyYXRlRGlhbG9nTGFiZWwgPSBNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX1BST01QVF9SRUdFTl9CSU5ESU5HX09OX1NBVkU7IC8vJE5PTi1OTFMtMSQKLQlCb29sZWFuRmllbGRFZGl0b3Igc2hvd0dlbmVyYXRlRGlhbG9nID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcihzaG93R2VuZXJhdGVEaWFsb2dMYWJlbCwgc2hvd0dlbmVyYXRlRGlhbG9nTGFiZWwsIHBhcmVudCk7Ci0JYWRkRmllbGQoc2hvd0dlbmVyYXRlRGlhbG9nKTsKLQotICAgIC8qIERvIHdlIG5lZWQgdGhpcyBwcmVmZXJlbmNlIGJlbG93PyAgSWYgc28sIGNoYW5nZSBXU0RMRWRpdG9yUGx1Z2luLmphdmEgYW5kIHVzZSB0aGlzIHByZWZlcmVuY2UgaW46Ci0gICAgICAgSHR0cENvbnRlbnRHZW5lcmF0b3IuamF2YQotICAgICAgIFNvYXBDb250ZW50R2VuZXJhdG9yLmphdmEKLSAgICAgICBTb2FwUG9ydE9wdGlvbnNQYWdlLmphdmEKLSAgICAqLwotLy8gICAgSHR0cFBvcnRPcHRpb25zUGFnZS5qYXZhICAgIFN0cmluZ0ZpZWxkRWRpdG9yIGxvY2F0aW9uID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKCJEZWZ1YWx0IExvY2F0aW9uOiIsICJEZWZhdWx0IExvY2F0aW9uOiIsIGVkaXRvckdyb3VwMSk7IC8vIEV4dGVybmFsaXplCi0vLyAgICBhZGRGaWVsZChsb2NhdGlvbik7IAotCQotCWFwcGx5RGlhbG9nRm9udChwYXJlbnQpOwotICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExTZWxlY3Rpb25NYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETFNlbGVjdGlvbk1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yzg4OGQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETFNlbGVjdGlvbk1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uTWFwcGVyIGltcGxlbWVudHMgSVNlbGVjdGlvbk1hcHBlciB7Ci0KLQlwdWJsaWMgSVNlbGVjdGlvbiBtYXBTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgU3RydWN0dXJlZFNlbGVjdGlvbikgeyAgCi0JCQlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHN0cnVjdHVyZWRTZWxlY3Rpb24gPSAoU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb247Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSBzdHJ1Y3R1cmVkU2VsZWN0aW9uLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApIHsKLQkJCQlPYmplY3QgbyA9IGkubmV4dCgpOwotCQkJCWlmIChvIGluc3RhbmNlb2YgQWRhcHRlcikgewotCQkJCQlsaXN0LmFkZCgoKEFkYXB0ZXIpbykuZ2V0VGFyZ2V0KCkpOwotCQkJCX0gIAotCQkJCWVsc2UgewotCQkJCQlsaXN0LmFkZChvKTsKLQkJCQl9ICAKLQkJCX0gIAotCQl9Ci0JCXJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihsaXN0KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEVsZW1lbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRFbGVtZW50QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMTYxYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEVsZW1lbnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5OZXdDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgQWRkRWxlbWVudEFjdGlvbiBleHRlbmRzIEJhc2VOb2RlQWN0aW9uIHsKLQlwcm90ZWN0ZWQgTm9kZSBwYXJlbnROb2RlOwotCXByb3RlY3RlZCBTdHJpbmcgcHJlZml4OwotCXByb3RlY3RlZCBTdHJpbmcgbm9kZU5hbWU7Ci0JcHJvdGVjdGVkIEVsZW1lbnQgbmV3RWxlbWVudDsKLQlwcm90ZWN0ZWQgTm9kZSByZWxhdGl2ZU5vZGUgPSBudWxsOwotCXByb3RlY3RlZCBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0OwotCXByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0JcHJvdGVjdGVkIERvY3VtZW50IGRvY3VtZW50OwotCXByb3RlY3RlZCBib29sZWFuIGNvbXB1dGVUb3BMZXZlbFJlZkNoaWxkOwotCi0JcHJvdGVjdGVkIGJvb2xlYW4gc2VsZWN0TmV3bHlDcmVhdGVkT2JqZWN0ID0gdHJ1ZTsgLy8gV2Ugc2hvdWxkIG5vdCBiZQotCQkJCQkJCQkJCQkJCQkvLyBzZWxlY3RpbmcgdGhlCi0JCQkJCQkJCQkJCQkJCS8vIG9iamVjdCBpbiB0aGUKLQkJCQkJCQkJCQkJCQkJLy8gYWN0aW9uLi4uLi4gVE9ETwotCi0JcHVibGljIEFkZEVsZW1lbnRBY3Rpb24oU3RyaW5nIHRleHQsIFN0cmluZyBpbWFnZURlc2NyaXB0b3JLZXksIE5vZGUgcGFyZW50Tm9kZSwgU3RyaW5nIG5vZGVOYW1lKSB7Ci0JCXNldFRleHQodGV4dCk7Ci0JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcihpbWFnZURlc2NyaXB0b3JLZXkpKTsKLQkJdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTsKLQkJdGhpcy5ub2RlTmFtZSA9IG5vZGVOYW1lOwotCX0KLQotCXB1YmxpYyBBZGRFbGVtZW50QWN0aW9uKFN0cmluZyB0ZXh0LCBTdHJpbmcgaW1hZ2VEZXNjcmlwdG9yS2V5LCBOb2RlIHBhcmVudE5vZGUsIFN0cmluZyBwcmVmaXgsIFN0cmluZyBsb2NhbE5hbWUpIHsKLQkJc2V0VGV4dCh0ZXh0KTsKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKGltYWdlRGVzY3JpcHRvcktleSkpOwotCQl0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlOwotCQl0aGlzLnByZWZpeCA9IHByZWZpeDsKLQkJdGhpcy5ub2RlTmFtZSA9IGxvY2FsTmFtZTsKLQl9Ci0KLQlwdWJsaWMgQWRkRWxlbWVudEFjdGlvbihTdHJpbmcgdGV4dCwgTm9kZSBwYXJlbnROb2RlLCBTdHJpbmcgcHJlZml4LCBTdHJpbmcgbG9jYWxOYW1lKSB7Ci0JCXNldFRleHQodGV4dCk7Ci0JCXNldEltYWdlRGVzY3JpcHRvcihudWxsKTsKLQkJdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTsKLQkJdGhpcy5wcmVmaXggPSBwcmVmaXg7Ci0JCXRoaXMubm9kZU5hbWUgPSBsb2NhbE5hbWU7Ci0JfQotCi0JcHVibGljIEFkZEVsZW1lbnRBY3Rpb24oTm9kZSBwYXJlbnROb2RlLCBTdHJpbmcgcHJlZml4LCBTdHJpbmcgbG9jYWxOYW1lLCBOb2RlIHJlbGF0aXZlTm9kZSkgewotCQl0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlOwotCQl0aGlzLnByZWZpeCA9IHByZWZpeDsKLQkJdGhpcy5ub2RlTmFtZSA9IGxvY2FsTmFtZTsKLQkJdGhpcy5yZWxhdGl2ZU5vZGUgPSByZWxhdGl2ZU5vZGU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q29tcHV0ZVRvcExldmVsUmVmQ2hpbGQoYm9vbGVhbiBpc0VuYWJsZWQpIHsKLQkJY29tcHV0ZVRvcExldmVsUmVmQ2hpbGQgPSBpc0VuYWJsZWQ7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0RWRpdG9yUGFydChJRWRpdG9yUGFydCBlZGl0b3JQYXJ0KSB7Ci0JCXRoaXMuZWRpdG9yUGFydCA9IGVkaXRvclBhcnQ7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gc2hvd0RpYWxvZygpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlib29sZWFuIG9rID0gc2hvd0RpYWxvZygpOwotCQlpZiAob2spIHsKLQkJCWJlZ2luUmVjb3JkaW5nKCk7Ci0JCQlwZXJmb3JtQWRkRWxlbWVudCgpOwotCQkJZW5kUmVjb3JkaW5nKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQWRkRWxlbWVudCgpIHsKLQkJaWYgKHBhcmVudE5vZGUgIT0gbnVsbCkgewotCQkJbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpOwotCQkJYWRkQXR0cmlidXRlcyhuZXdFbGVtZW50KTsKLQkJCWlmIChyZWxhdGl2ZU5vZGUgPT0gbnVsbCAmJiBjb21wdXRlVG9wTGV2ZWxSZWZDaGlsZCkgewotCQkJCXJlbGF0aXZlTm9kZSA9IGNvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKG5ld0VsZW1lbnQpOwotCQkJfQotCi0JCQlpZiAocmVsYXRpdmVOb2RlID09IG51bGwpIHsKLQkJCQlwYXJlbnROb2RlLmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3RWxlbWVudCwgcmVsYXRpdmVOb2RlKTsKLQkJCX0KLQkJCS8vIGZvcm1hdChwYXJlbnROb2RlKTsKLQkJCWZvcm1hdChuZXdFbGVtZW50KTsKLQkJCS8vIFVnbHkuLi4uLiBXZSBzaG91bGQgbm90IGJlIHNlbGVjdGluZyB0aGUgb2JqZWN0IGluIHRoZSBncmFwaAotCQkJLy8gdmlldyBpbiB0aGUgQWN0aW9uLgotCQkJLy8gVGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZCBvdXQuIFdlIGFkZCB0aGlzIGJvb2xlYW4gY2hlY2sKLQkJCS8vIGJlY2F1c2UgV1NETFNldFR5cGVEaWFsb2cuamF2YQotCQkJLy8gdXNlcyBBZGRJbXBvcnRBY3Rpb24uamF2YSBidXQgd2Ugc2hvdWxkIG5vdCBiZSBzZWxlY3RpbmcgdGhlCi0JCQkvLyBuZXdseSBjcmVhdGVkIGltcG9ydC4uLi4KLQkJCWlmIChzZWxlY3ROZXdseUNyZWF0ZWRPYmplY3QpIHsKLQkJCQlzZWxlY3RPYmplY3RGb3JOZXdFbGVtZW50KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvLyBVZ2x5Li4uLi4gV2Ugc2hvdWxkIG5vdCBiZSBzZWxlY3RpbmcgdGhlIG9iamVjdCBpbiB0aGUgZ3JhcGggdmlldyBpbgotCS8vIHRoZSBBY3Rpb24uCi0JLy8gVGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZCBvdXQuIFdlIGFkZCB0aGlzIGJvb2xlYW4gY2hlY2sgYmVjYXVzZQotCS8vIFdTRExTZXRUeXBlRGlhbG9nLmphdmEKLQkvLyB1c2VzIEFkZEltcG9ydEFjdGlvbi5qYXZhIGJ1dCB3ZSBzaG91bGQgbm90IGJlIHNlbGVjdGluZyB0aGUgbmV3bHkKLQkvLyBjcmVhdGVkIGltcG9ydC4uLi4KLQkvLyBXZSBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBiZWZvcmUgY2FsbGluZyBydW4oKQotCXB1YmxpYyB2b2lkIHNlbGVjdE9iamVjdEZvck5ld0VsZW1lbnQoYm9vbGVhbiBzZWxlY3QpIHsKLQkJc2VsZWN0TmV3bHlDcmVhdGVkT2JqZWN0ID0gc2VsZWN0OwotCX0KLQotCXB1YmxpYyBOb2RlIGdldE5vZGUoKSB7Ci0JCWlmIChwYXJlbnROb2RlICE9IG51bGwpIHsKLQkJCXJldHVybiBwYXJlbnROb2RlOwotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIGRvY3VtZW50OwotCQl9Ci0JfQotCi0KLQlwdWJsaWMgU3RyaW5nIGdldFVuZG9EZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREOyAvLyROT04tTkxTLTEkCi0JfQotCi0KLQlwcm90ZWN0ZWQgRWxlbWVudCBjcmVhdGVFbGVtZW50KFN0cmluZyBub2RlTmFtZSkgewotCQlEb2N1bWVudCBkb2N1bWVudCA9IHBhcmVudE5vZGUuZ2V0T3duZXJEb2N1bWVudCgpOwotCi0JCUVsZW1lbnQgZWxlbWVudCA9IChwcmVmaXggIT0gbnVsbCAmJiBwcmVmaXgubGVuZ3RoKCkgPiAwKSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocHJlZml4ICsgIjoiICsgbm9kZU5hbWUpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChub2RlTmFtZSk7IC8vJE5PTi1OTFMtMSQKLQotCQlyZXR1cm4gZWxlbWVudDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRBdHRyaWJ1dGVzKEVsZW1lbnQgbmV3RWxlbWVudCkgewotCX0KLQotCi0JcHJvdGVjdGVkIHZvaWQgZm9ybWF0KE5vZGUgcGFyZW50Tm9kZSkgewotCQlpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIElET01Ob2RlKSB7Ci0JCQkvLyBmb3JtYXQgc2VsZWN0ZWQgbm9kZQotCQkJRm9ybWF0UHJvY2Vzc29yWE1MIGZvcm1hdFByb2Nlc3NvclhNTCA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLQkJCWZvcm1hdFByb2Nlc3NvclhNTC5mb3JtYXROb2RlKChJRE9NTm9kZSkgcGFyZW50Tm9kZSk7Ci0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBFbGVtZW50IGdldERlZmluaXRpb25FbGVtZW50KEVsZW1lbnQgcGFyZW50RWxlbWVudCkgewotCQlFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gbnVsbDsKLQotCQlmb3IgKE5vZGUgbm9kZSA9IHBhcmVudEVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpLmdldEZpcnN0Q2hpbGQoKTsgbm9kZSAhPSBudWxsOyBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpKSB7Ci0JCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7Ci0JCQkJRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIG5vZGU7Ci0JCQkJaWYgKFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoZWxlbWVudCkgPT0gV1NETENvbnN0YW50cy5ERUZJTklUSU9OKSB7Ci0JCQkJCWRlZmluaXRpb25FbGVtZW50ID0gZWxlbWVudDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBkZWZpbml0aW9uRWxlbWVudDsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudCBnZXROZXdFbGVtZW50KCkgewotCQlyZXR1cm4gbmV3RWxlbWVudDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdE9iamVjdEZvck5ld0VsZW1lbnQoKSB7Ci0JCWlmIChlZGl0b3JQYXJ0ID09IG51bGwpIHsKLQkJCWVkaXRvclBhcnQgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQl9Ci0JCWlmIChlZGl0b3JQYXJ0ICE9IG51bGwgJiYgZGVmaW5pdGlvbiAhPSBudWxsKSB7Ci0JCQlPYmplY3Qgb2JqZWN0ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5maW5kTW9kZWxPYmplY3RGb3JFbGVtZW50KGRlZmluaXRpb24sIG5ld0VsZW1lbnQpOwotCQkJaWYgKG9iamVjdCAhPSBudWxsKSB7Ci0JCQkJSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcyk7Ci0JCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKLQkJCQkJc2VsZWN0aW9uUHJvdmlkZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG9iamVjdCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdE9iamVjdChXU0RMRWxlbWVudCBvYmplY3QpIHsKLQkJaWYgKGVkaXRvclBhcnQgPT0gbnVsbCkgewotCQkJZWRpdG9yUGFydCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCX0KLQkJaWYgKGVkaXRvclBhcnQgIT0gbnVsbCAmJiBkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJCWlmIChvYmplY3QgIT0gbnVsbCkgewotCQkJCUlTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlciA9IChJU2VsZWN0aW9uUHJvdmlkZXIpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJU2VsZWN0aW9uUHJvdmlkZXIuY2xhc3MpOwotCQkJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7Ci0JCQkJCXNlbGVjdGlvblByb3ZpZGVyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihvYmplY3QpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHNob3dEaWFsb2dIZWxwZXIoU3RyaW5nIHRpdGxlLCBTdHJpbmcgZGVmYXVsdE5hbWUsIExpc3QgdXNlZE5hbWVzKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBkZWZhdWx0TmFtZTsKLQkJTmV3Q29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IG5ldyBOZXdDb21wb25lbnREaWFsb2coV1NETEVkaXRvclBsdWdpbi5nZXRTaGVsbCgpLCB0aXRsZSwgZGVmYXVsdE5hbWUsIHVzZWROYW1lcyk7Ci0JCWludCByYyA9IGRpYWxvZy5jcmVhdGVBbmRPcGVuKCk7Ci0JCWlmIChyYyA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKSB7Ci0JCQlyZXN1bHQgPSBkaWFsb2cuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgewotCQkJcmVzdWx0ID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByb3RlY3RlZCBOb2RlIGNvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKE5vZGUgbm9kZVRvQWRkKSB7Ci0JCU5vZGUgcmVzdWx0ID0gbnVsbDsKLQkJaW50IGEgPSBnZXRQcmVjZWRlbmNlKG5vZGVUb0FkZCk7Ci0KLQkJZm9yIChOb2RlIG5vZGUgPSBwYXJlbnROb2RlLmdldEZpcnN0Q2hpbGQoKTsgbm9kZSAhPSBudWxsOyBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpKSB7Ci0JCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7Ci0JCQkJaW50IGIgPSBnZXRQcmVjZWRlbmNlKG5vZGUpOwotCQkJCWlmIChiID4gYSkgewotCQkJCQlyZXN1bHQgPSBub2RlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVEZWZpbml0aW9uU3R1YigpIHsKLQkJaWYgKGRvY3VtZW50ICE9IG51bGwpIHsKLQkJCS8vIENyZWF0ZSB0aGUgRGVmaW5pdGlvbnMgZWxlbWVudCB3aXRoIHByb3BlciBuYW1lc3BhY2UKLQkJCVByZWZlcmVuY2VzIHByZWZlcmVuY2UgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQkJU3RyaW5nIGNoYXJTZXQgPSBwcmVmZXJlbmNlLmdldFN0cmluZyhDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5PVVRQVVRfQ09ERVNFVCk7Ci0JCQlpZiAoY2hhclNldCA9PSBudWxsIHx8IGNoYXJTZXQudHJpbSgpLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCWNoYXJTZXQgPSAiVVRGLTgiOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oInhtbCIsICJ2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCIiICsgY2hhclNldCArICJcIiIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkJCUVsZW1lbnQgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIndzZGw6ZGVmaW5pdGlvbnMiKTsgLy8kTk9OLU5MUy0xJAotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocm9vdCk7Ci0KLQkJCS8vIEFkZCB2YXJpb3VzIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGhlcmUuCi0JCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6c29hcCIsICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnRucyIsIGdldERlZmF1bHROYW1lc3BhY2UoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczp3c2RsIiwgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCXJvb3Quc2V0QXR0cmlidXRlKCJuYW1lIiwgZ2V0RmlsZU5hbWUoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCXJvb3Quc2V0QXR0cmlidXRlKCJ0YXJnZXROYW1lc3BhY2UiLCBnZXREZWZhdWx0TmFtZXNwYWNlKCkpOyAvLyROT04tTkxTLTEkCi0KLQkJCWRlZmluaXRpb24uc2V0RWxlbWVudChyb290KTsKLQkJCXBhcmVudE5vZGUgPSByb290OwotCQkJcHJlZml4ID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdE5hbWVzcGFjZSgpIHsKLQkJU3RyaW5nIG5hbWVzcGFjZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0UpOyAvLyROT04tTkxTLTEkCi0JCWlmICghbmFtZXNwYWNlLmVuZHNXaXRoKCIvIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJbmFtZXNwYWNlID0gbmFtZXNwYWNlLmNvbmNhdCgiLyIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQotCQluYW1lc3BhY2UgKz0gZ2V0RmlsZU5hbWUoKSArICIvIjsgLy8kTk9OLU5MUy0xJAotCi0JCXJldHVybiBuYW1lc3BhY2U7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RmlsZU5hbWUoKSB7Ci0JCVN0cmluZyBmaWxlTG9jYXRpb24gPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0JCUlQYXRoIGZpbGVQYXRoID0gbmV3IFBhdGgoZmlsZUxvY2F0aW9uKTsKLQkJcmV0dXJuIGZpbGVQYXRoLnJlbW92ZUZpbGVFeHRlbnNpb24oKS5sYXN0U2VnbWVudCgpLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBIYXNoTWFwIHByZWNlZGVuY2VNYXAgPSBjcmVhdGVQcmVjZWRlbmNlTWFwKCk7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGludCBnZXRQcmVjZWRlbmNlKE5vZGUgbm9kZSkgewotCQlpbnQgcmVzdWx0ID0gMjsKLQkJU3RyaW5nIGxvY2FsTmFtZSA9IG5vZGUuZ2V0TG9jYWxOYW1lKCk7Ci0JCWlmIChsb2NhbE5hbWUgIT0gbnVsbCkgewotCQkJSW50ZWdlciBpbnRlZ2VyID0gKEludGVnZXIpIHByZWNlZGVuY2VNYXAuZ2V0KGxvY2FsTmFtZSk7Ci0JCQlpZiAoaW50ZWdlciAhPSBudWxsKSB7Ci0JCQkJcmVzdWx0ID0gaW50ZWdlci5pbnRWYWx1ZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBIYXNoTWFwIGNyZWF0ZVByZWNlZGVuY2VNYXAoKSB7Ci0JCUhhc2hNYXAgaGFzaE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCWhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuRE9DVU1FTlRBVElPTl9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoMSkpOwotCQloYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLklNUE9SVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoMykpOwotCQloYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLlRZUEVTX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcig0KSk7Ci0JCWhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuTUVTU0FHRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoNSkpOwotCQloYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoNikpOwotCQloYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLkJJTkRJTkdfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDcpKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5TRVJWSUNFX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcig4KSk7Ci0JCXJldHVybiBoYXNoTWFwOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkRWxlbWVudERlY2xhcmF0aW9uQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkRWxlbWVudERlY2xhcmF0aW9uQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZjQwNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBBZGRFbGVtZW50RGVjbGFyYXRpb25BY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLQlwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCXByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlOwotCXByb3RlY3RlZCBTdHJpbmcgcHJlZml4OwotCQotCXB1YmxpYyBBZGRFbGVtZW50RGVjbGFyYXRpb25BY3Rpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgc3VnZ2VzdGVkUHJlZml4KQotCXsKLQkJdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQkJdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0JCXRoaXMucHJlZml4ID0gc3VnZ2VzdGVkUHJlZml4OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKQotCXsKLQkJU3RyaW5nIGV4aXN0aW5nUHJlZml4ID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgobmFtZXNwYWNlKTsKLQkJaWYgKGV4aXN0aW5nUHJlZml4ICE9IG51bGwpCi0JCXsKLQkJCXByZWZpeCA9IGV4aXN0aW5nUHJlZml4OwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJlZml4ID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVQcmVmaXgoZGVmaW5pdGlvbiwgcHJlZml4KTsKLQkJCUVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZGVmaW5pdGlvbik7Ci0JCQlpZiAoZGVmaW5pdGlvbkVsZW1lbnQgIT0gbnVsbCkKLQkJCXsKLQkJCQlkZWZpbml0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXgsIG5hbWVzcGFjZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0JCQkKLQkJfQkJCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KCkKLQl7Ci0JCXJldHVybiBwcmVmaXg7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEltcG9ydEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEltcG9ydEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTI1NDkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRJbXBvcnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOyAKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBBZGRJbXBvcnRBY3Rpb24gZXh0ZW5kcyBBZGRFbGVtZW50QWN0aW9uCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uOwotICBwcm90ZWN0ZWQgU3RyaW5nIGVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeDsKLQotICBwdWJsaWMgQWRkSW1wb3J0QWN0aW9uKElFZGl0b3JQYXJ0IHBhcnQsIERlZmluaXRpb24gZGVmaW5pdGlvbiwgTm9kZSBwYXJlbnROb2RlLCBTdHJpbmcgcHJlZml4KQotICB7Ci0JdGhpcyhwYXJ0LCBkZWZpbml0aW9uLCBwYXJlbnROb2RlLCBwcmVmaXgsIG51bGwsIG51bGwpOwotICB9Ci0gIAotICBwdWJsaWMgQWRkSW1wb3J0QWN0aW9uKElFZGl0b3JQYXJ0IHBhcnQsIERlZmluaXRpb24gZGVmaW5pdGlvbiwgTm9kZSBwYXJlbnROb2RlLCBTdHJpbmcgcHJlZml4LCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9JTVBPUlQsICJpY29ucy9pbXBvcnRfb2JqLmdpZiIsIHBhcmVudE5vZGUsIHByZWZpeCwgImltcG9ydCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCSAgc2V0RGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLQkgIHNldENvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKHRydWUpOwotCSAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0JICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0JICBzZXRFZGl0b3JQYXJ0KHBhcnQpOwotCSAgCi0JICBpZiAocGFydCBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgewotCSAgCWRvY3VtZW50ID0gKChJRE9NTW9kZWwpICgoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSBwYXJ0KS5nZXRNb2RlbCgpKS5nZXREb2N1bWVudCgpOwotCSAgfQotICB9Ci0gICAgICAgIAotICBwcm90ZWN0ZWQgRWxlbWVudCBjcmVhdGVFbGVtZW50KFN0cmluZyBub2RlTmFtZSkKLSAgewotICAJaWYgKGVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeCAhPSBudWxsICYmIG5hbWVzcGFjZSAhPSBudWxsKQotICAJeyAKLSAgICAJRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChkZWZpbml0aW9uKTsKLSAgICAJaWYgKGRlZmluaXRpb25FbGVtZW50ICE9IG51bGwpCi0gICAgCXsgICAgCi0JICAJICBkZWZpbml0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBlbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXgsIG5hbWVzcGFjZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAJfSAgICAgIAkKLSAgCX0KLSAgCXJldHVybiBzdXBlci5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXgoU3RyaW5nIG5zUHJlZml4KQotICB7Ci0gIAl0aGlzLmVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeCA9IG5zUHJlZml4OwotICB9Ci0gICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZXMoRWxlbWVudCBuZXdFbGVtZW50KQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lc3BhY2UiLCBuYW1lc3BhY2UgIT0gbnVsbCA/IG5hbWVzcGFjZSA6ICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoImxvY2F0aW9uIiwgbG9jYXRpb24gIT0gbnVsbCA/IGxvY2F0aW9uIDogIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1BZGRFbGVtZW50KCkgewotICAJaWYgKHBhcmVudE5vZGUgPT0gbnVsbCB8fCAoZG9jdW1lbnQgIT0gbnVsbCAmJiBkb2N1bWVudC5nZXRDaGlsZE5vZGVzKCkuZ2V0TGVuZ3RoKCkgPT0gMCkpIHsKLSAgCQljcmVhdGVEZWZpbml0aW9uU3R1YigpOwotICAJfQotICAJCi0gIAlzdXBlci5wZXJmb3JtQWRkRWxlbWVudCgpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZFdTSVNjaGVtYUltcG9ydEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZFdTSVNjaGVtYUltcG9ydEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTAyZWFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRXU0lTY2hlbWFJbXBvcnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLXB1YmxpYyBjbGFzcyBBZGRXU0lTY2hlbWFJbXBvcnRBY3Rpb24gZXh0ZW5kcyBCYXNlTm9kZUFjdGlvbgotewotICAgIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gICAgcHJvdGVjdGVkIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQ7Ci0gICAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0gICAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvbjsKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeDsKLQotICAgIHB1YmxpYyBBZGRXU0lTY2hlbWFJbXBvcnRBY3Rpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pCi0gICAgewotICAgICAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgICAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgICAgICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgICAgICBkZWZpbml0aW9uRWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChkZWZpbml0aW9uKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTm9kZSBnZXROb2RlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBkZWZpbml0aW9uRWxlbWVudDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRVbmRvRGVzY3JpcHRpb24oKQotICAgIHsKLSAgICAJcmV0dXJuIE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0lNUE9SVDsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIHByb3RlY3RlZCBFbGVtZW50IGdldE9yQ3JlYXRlVHlwZXNFbGVtZW50KCkKLSAgICB7Ci0gICAgICAgIEVsZW1lbnQgdHlwZXNFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGRlZmluaXRpb24uZ2V0VHlwZXMoKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbkVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBZGRFbGVtZW50QWN0aW9uIGFkZFR5cGVzQWN0aW9uID0gbmV3IEFkZEVsZW1lbnRBY3Rpb24oIiIsICJpY29ucy94c2Rfb2JqLmdpZiIsIGRlZmluaXRpb25FbGVtZW50LCBkZWZpbml0aW9uRWxlbWVudC5nZXRQcmVmaXgoKSwgInR5cGVzIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICAgICAgICAgICAgYWRkVHlwZXNBY3Rpb24uc2V0Q29tcHV0ZVRvcExldmVsUmVmQ2hpbGQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYWRkVHlwZXNBY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgICAgICAgdHlwZXNFbGVtZW50ID0gYWRkVHlwZXNBY3Rpb24uZ2V0TmV3RWxlbWVudCgpOwotICAgICAgICAgICAgICAgIGZvcm1hdCh0eXBlc0VsZW1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdHlwZXNFbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGRlZmluaXRpb24uZ2V0VHlwZXMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHR5cGVzRWxlbWVudDsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIEVsZW1lbnQgZ2V0SW1wb3J0SG9sZGVyRWxlbWVudChFbGVtZW50IHR5cGVzRWxlbWVudCkgewotICAgIAlFbGVtZW50IGltcG9ydEhvbGRlckVsZW1lbnQgPSBudWxsOwotICAgICAgICBOb2RlTGlzdCBub2RlTGlzdCA9IHR5cGVzRWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbShpKTsKLSAgICAgICAgICAgIGlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIG5vZGU7Ci0gICAgICAgICAgICAgICAgaWYgKCJzY2hlbWEiLmVxdWFscyhlbGVtZW50LmdldExvY2FsTmFtZSgpKSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgidGFyZ2V0TmFtZXNwYWNlIikgPT0gbnVsbCkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbXBvcnRIb2xkZXJFbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gaW1wb3J0SG9sZGVyRWxlbWVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRWxlbWVudCBnZXRPckNyZWF0ZUltcG9ydEhvbGRlckVsZW1lbnQoRWxlbWVudCB0eXBlc0VsZW1lbnQpCi0gICAgewotICAgICAgICBFbGVtZW50IGltcG9ydEhvbGRlckVsZW1lbnQgPSBnZXRJbXBvcnRIb2xkZXJFbGVtZW50KHR5cGVzRWxlbWVudCk7Ci0gICAgICAgIGlmIChpbXBvcnRIb2xkZXJFbGVtZW50ID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFkZEVsZW1lbnRBY3Rpb24gYWRkSW1wb3J0SG9sZGVyQWN0aW9uID0gbmV3IEFkZEVsZW1lbnRBY3Rpb24oIiIsICJpY29ucy94c2Rfb2JqLmdpZiIsIHR5cGVzRWxlbWVudCwgInhzZCIsICJzY2hlbWEiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJCAvLyROT04tTkxTLTQkCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgYWRkQXR0cmlidXRlcyhFbGVtZW50IG5ld0VsZW1lbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIiwgV1NETENvbnN0YW50cy5YU0RfTkFNRVNQQUNFX1VSSSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgYWRkSW1wb3J0SG9sZGVyQWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgaW1wb3J0SG9sZGVyRWxlbWVudCA9IGFkZEltcG9ydEhvbGRlckFjdGlvbi5nZXROZXdFbGVtZW50KCk7Ci0gICAgICAgICAgICBmb3JtYXQoaW1wb3J0SG9sZGVyRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGltcG9ydEhvbGRlckVsZW1lbnQ7Ci0gICAgfQotICAgIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYWRkIHRoZSBpbXBvcnQgaWYgaXQncyBhbHJlYWR5IHRoZXJlCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gaW1wb3J0Tm90QWxyZWFkeUV4aXN0cygpIHsKLSAgICAJYm9vbGVhbiBub3RFeGlzdHMgPSB0cnVlOwotICAgIAkKLSAgICAJaWYgKGRlZmluaXRpb24uZ2V0VHlwZXMoKSAhPSBudWxsKSB7Ci0gICAgCQlFbGVtZW50IHR5cGVzRWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChkZWZpbml0aW9uLmdldFR5cGVzKCkpOwotICAgIAkJRWxlbWVudCBzY2hlbWFFbGVtZW50ID0gZ2V0SW1wb3J0SG9sZGVyRWxlbWVudCh0eXBlc0VsZW1lbnQpOwotCi0gICAgCQlpZiAoc2NoZW1hRWxlbWVudCAhPSBudWxsKSB7Ci0gICAgCQkJLy8gQ29sbGVjdCBjaGlsZHJlbgotICAgIAkJCU5vZGUgbm9kZSA9IHNjaGVtYUVsZW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotICAgIAkJCWphdmEudXRpbC5WZWN0b3Igc2NoZW1hQ2hpbGRyZW4gPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotICAgIAkJCWlmIChub2RlICE9IG51bGwpIHsKLSAgICAJCQkJTm9kZSBjaGlsZCA9IG5vZGU7Ci0JCQkJCQotICAgIAkJCQlpZiAoIShjaGlsZCBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5UZXh0SW1wbCkpIHsKLSAgICAJCQkJCXNjaGVtYUNoaWxkcmVuLmFkZEVsZW1lbnQoY2hpbGQpOwotICAgIAkJCQl9Ci0JCQkJCQotICAgIAkJCQl3aGlsZSAoY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSAhPSBudWxsKSB7Ci0gICAgCQkJCQljaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgCQkJCQlpZiAoIShjaGlsZCBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5UZXh0SW1wbCkpIHsKLSAgICAJCQkJCQlzY2hlbWFDaGlsZHJlbi5hZGRFbGVtZW50KGNoaWxkKTsKLSAgICAJCQkJCX0KLSAgICAJCQkJfQotCi0gICAgCQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzY2hlbWFDaGlsZHJlbi5zaXplKCk7IGluZGV4KyspIHsKLSAgICAJCQkJCUVsZW1lbnQgc2NoZW1hQ2hpbGQgPSAoRWxlbWVudCkgc2NoZW1hQ2hpbGRyZW4uZWxlbWVudEF0KGluZGV4KTsKLSAgICAJCQkJCVN0cmluZyBzY2hlbWFMb2NhdGlvbiA9IHNjaGVtYUNoaWxkLmdldEF0dHJpYnV0ZSgic2NoZW1hTG9jYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIAkJCQkJU3RyaW5nIHNjaGVtYU5hbWVzcGFjZSA9IHNjaGVtYUNoaWxkLmdldEF0dHJpYnV0ZSgibmFtZXNwYWNlIik7IC8vJE5PTi1OTFMtMSQKLQkJCQkKLSAgICAJCQkJCWlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmIG5hbWVzcGFjZSAhPSBudWxsICYmCi0gICAgCQkJCQkJCXNjaGVtYUxvY2F0aW9uLmVxdWFscyhsb2NhdGlvbikgJiYgc2NoZW1hTmFtZXNwYWNlLmVxdWFscyhuYW1lc3BhY2UpKSB7Ci0gICAgCQkJCQkJbm90RXhpc3RzID0gZmFsc2U7Ci0gICAgCQkJCQkJYnJlYWs7Ci0gICAgCQkJCQl9Ci0gICAgCQkJCX0KLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBub3RFeGlzdHM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICB7Ci0gICAgICAgIGlmIChkZWZpbml0aW9uRWxlbWVudCAhPSBudWxsICYmIGltcG9ydE5vdEFscmVhZHlFeGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgYmVnaW5SZWNvcmRpbmcoKTsKLSAgICAgICAgICAgIHBlcmZvcm1BZGRFbGVtZW50KCk7Ci0gICAgICAgICAgICBlbmRSZWNvcmRpbmcoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBwZXJmb3JtQWRkRWxlbWVudCgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCB0eXBlc0VsZW1lbnQgPSBnZXRPckNyZWF0ZVR5cGVzRWxlbWVudCgpOwotICAgICAgICAgICAgRWxlbWVudCBpbXBvcnRIb2xkZXJFbGVtZW50ID0gZ2V0T3JDcmVhdGVJbXBvcnRIb2xkZXJFbGVtZW50KHR5cGVzRWxlbWVudCk7Ci0KLSAgICAgICAgICAgIEFkZEVsZW1lbnRBY3Rpb24gYWRkSW1wb3J0QWN0aW9uID0gbmV3IEFkZEVsZW1lbnRBY3Rpb24oIiIsICJpY29ucy94c2Rfb2JqLmdpZiIsIGltcG9ydEhvbGRlckVsZW1lbnQsIGltcG9ydEhvbGRlckVsZW1lbnQuZ2V0UHJlZml4KCksICJpbXBvcnQiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZXMoRWxlbWVudCBuZXdFbGVtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWVzcGFjZSIsIG5hbWVzcGFjZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoInNjaGVtYUxvY2F0aW9uIiwgbG9jYXRpb24pOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGFkZEltcG9ydEFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGFkZEltcG9ydEFjdGlvbi5nZXROZXdFbGVtZW50KCk7Ci0gICAgICAgICAgICBmb3JtYXQobmV3RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXgoU3RyaW5nIG5zUHJlZml4KQotICAgIHsKLSAgICAgICAgdGhpcy5lbGVtZW50RGVjbGFyYXRpb25OYW1lc3BhY2VQcmVmaXggPSBuc1ByZWZpeDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgZm9ybWF0KE5vZGUgcGFyZW50Tm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGZvcm1hdCBzZWxlY3RlZCBub2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgRm9ybWF0UHJvY2Vzc29yWE1MIGZvcm1hdFByb2Nlc3NvclhNTCA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLSAgICAgICAgICAgIGZvcm1hdFByb2Nlc3NvclhNTC5mb3JtYXROb2RlKChJRE9NTm9kZSlwYXJlbnROb2RlKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9CYXNlTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0Jhc2VOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZDM1YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0Jhc2VOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsgCi0gICAgICAgICAgICAgICAgICAgICAgCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VOb2RlQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17IAotICBwdWJsaWMgYWJzdHJhY3QgTm9kZSBnZXROb2RlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCk7Ci0KLSAgcHVibGljIHZvaWQgYmVnaW5SZWNvcmRpbmcoKQotICB7ICAgIAotICAgIE5vZGUgbm9kZSA9IGdldE5vZGUoKTsgIAotICAgIGlmIChub2RlIGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgewotICAgICAgKChJRE9NTm9kZSlub2RlKS5nZXRNb2RlbCgpLmJlZ2luUmVjb3JkaW5nKHRoaXMsIGdldFVuZG9EZXNjcmlwdGlvbigpKTsgIAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVuZFJlY29yZGluZygpCi0gIHsgICAgICAgICAgICAgICAgIAotICAgIE5vZGUgbm9kZSA9IGdldE5vZGUoKTsgCi0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICB7Ci0gICAgICAoKElET01Ob2RlKW5vZGUpLmdldE1vZGVsKCkuZW5kUmVjb3JkaW5nKHRoaXMpOyAgCi0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0VkaXROYW1lc3BhY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvRWRpdE5hbWVzcGFjZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFlYmNmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvRWRpdE5hbWVzcGFjZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuRWRpdE5hbWVzcGFjZXNEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NTmFtZXNwYWNlSW5mb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLk5hbWVzcGFjZUluZm87Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgRWRpdE5hbWVzcGFjZXNBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQotICBwdWJsaWMgRWRpdE5hbWVzcGFjZXNBY3Rpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgc2V0VGV4dChNZXNzYWdlcy5fVUlfRURJVF9OQU1FU1BBQ0VTKTsgLy8kTk9OLU5MUy0xJAotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgRE9NTmFtZXNwYWNlSW5mb01hbmFnZXIgbmFtZXNwYWNlSW5mb01hbmFnZXIgPSBuZXcgRE9NTmFtZXNwYWNlSW5mb01hbmFnZXIoKTsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZGVmaW5pdGlvbik7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IG5hbWVzcGFjZUluZm9MaXN0ID0gbmFtZXNwYWNlSW5mb01hbmFnZXIuZ2V0TmFtZXNwYWNlSW5mb0xpc3QoZWxlbWVudCk7Ci0vLyAgICAgIExpc3Qgb2xkTmFtZXNwYWNlSW5mb0xpc3QgPSBOYW1lc3BhY2VJbmZvLmNsb25lTmFtZXNwYWNlSW5mb0xpc3QobmFtZXNwYWNlSW5mb0xpc3QpOwotCi0gICAgICAvLyBoZXJlIHdlIHN0b3JlIGEgY29weSBvZiB0aGUgb2xkIGluZm8gZm9yIGVhY2ggTmFtZXNwYWNlSW5mbwotICAgICAgLy8gdGhpcyBpbmZvIHdpbGwgYmUgdXNlZCBpbiBjcmVhdGVQcmVmaXhNYXBwaW5nKCkgdG8gZmlndXJlIG91dCBob3cgdG8gdXBkYXRlIHRoZSBkb2N1bWVudCAKLSAgICAgIC8vIGluIHJlc3BvbnNlIHRvIHRoZXNlIGNoYW5nZXMKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG5hbWVzcGFjZUluZm9MaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgTmFtZXNwYWNlSW5mbyBpbmZvID0gKE5hbWVzcGFjZUluZm8pIGkubmV4dCgpOwotICAgICAgICBOYW1lc3BhY2VJbmZvIG9sZENvcHkgPSBuZXcgTmFtZXNwYWNlSW5mbyhpbmZvKTsKLSAgICAgICAgaW5mby5zZXRQcm9wZXJ0eSgib2xkQ29weSIsIG9sZENvcHkpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0KLQkgIElQYXRoIHBhdGggPSBuZXcgUGF0aChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAgIEVkaXROYW1lc3BhY2VzRGlhbG9nIGRpYWxvZyA9IG5ldyBFZGl0TmFtZXNwYWNlc0RpYWxvZyhXU0RMRWRpdG9yUGx1Z2luLmdldFNoZWxsKCksICBwYXRoLCBNZXNzYWdlcy5fVUlfRURJVF9OQU1FU1BBQ0VTX0RJQUxPR19USVRMRSwgZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbmFtZXNwYWNlSW5mb0xpc3QpOyAvLyROT04tTkxTLTEkCi0gICAgICBpbnQgcmMgPSBkaWFsb2cuY3JlYXRlQW5kT3BlbigpOwotICAgICAgaWYgKHJjID09IElEaWFsb2dDb25zdGFudHMuT0tfSUQpCi0gICAgICB7ICAgICAgCQotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgidGFyZ2V0TmFtZXNwYWNlIiwgZGlhbG9nLmdldFRhcmdldE5hbWVzcGFjZSgpKTsgLy8kTk9OLU5MUy0xJAotCQkKLSAgICAgICAgTGlzdCBuZXdJbmZvTGlzdCA9IGRpYWxvZy5nZXROYW1lc3BhY2VJbmZvTGlzdCgpOwotICAgICAgICBuYW1lc3BhY2VJbmZvTWFuYWdlci5yZW1vdmVOYW1lc3BhY2VJbmZvKGVsZW1lbnQpOwotICAgICAgICBuYW1lc3BhY2VJbmZvTWFuYWdlci5hZGROYW1lc3BhY2VJbmZvKGVsZW1lbnQsIG5ld0luZm9MaXN0LCBmYWxzZSk7Ci0KLS8qCi0gICAgICAgIC8vIHNlZSBpZiB3ZSBuZWVkIHRvIHJlbmFtZSBhbnkgcHJlZml4ZXMKLSAgICAgICAgTWFwIHByZWZpeE1hcHBpbmcgPSBjcmVhdGVQcmVmaXhNYXBwaW5nKG9sZE5hbWVzcGFjZUluZm9MaXN0LCBuYW1lc3BhY2VJbmZvTGlzdCk7Ci0gICAgICAgIGlmIChwcmVmaXhNYXBwaW5nLnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAvL21hbmFnZXIuZ2V0TW9kZWwoKS5hYm91dFRvQ2hhbmdlTW9kZWwoKTsKLSAgICAgICAgICBSZXBsYWNlUHJlZml4QWN0aW9uIHJlcGxhY2VQcmVmaXhBY3Rpb24gPSBuZXcgUmVwbGFjZVByZWZpeEFjdGlvbihlbGVtZW50LCBwcmVmaXhNYXBwaW5nKTsKLSAgICAgICAgICByZXBsYWNlUHJlZml4QWN0aW9uLnJ1bigpOwotICAgICAgICAgIC8vbWFuYWdlci5nZXRNb2RlbCgpLmNoYW5nZWRNb2RlbCgpOwotICAgICAgICB9Ci0qLyAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIE1hcCBjcmVhdGVQcmVmaXhNYXBwaW5nKExpc3Qgb2xkTGlzdCwgTGlzdCBuZXdMaXN0KQotICB7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNodGFibGUoKTsKLQotICAgIEhhc2h0YWJsZSBvbGRVUklUb1ByZWZpeFRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IG9sZExpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE5hbWVzcGFjZUluZm8gb2xkSW5mbyA9IChOYW1lc3BhY2VJbmZvKSBpLm5leHQoKTsKLSAgICAgIG9sZFVSSVRvUHJlZml4VGFibGUucHV0KG9sZEluZm8udXJpLCBvbGRJbmZvKTsKLSAgICB9Ci0KLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBuZXdMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBOYW1lc3BhY2VJbmZvIG5ld0luZm8gPSAoTmFtZXNwYWNlSW5mbykgaS5uZXh0KCk7Ci0gICAgICBOYW1lc3BhY2VJbmZvIG9sZEluZm8gPSAoTmFtZXNwYWNlSW5mbykgb2xkVVJJVG9QcmVmaXhUYWJsZS5nZXQobmV3SW5mby51cmkgIT0gbnVsbCA/IG5ld0luZm8udXJpIDogIiIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIC8vIGlmIG9sZEluZm8gaXMgbm9uIG51bGwgLi4uIHRoZXJlJ3MgYSBtYXRjaGluZyBVUkkgaW4gdGhlIG9sZCBzZXQKLSAgICAgIC8vIHdlIGNhbiB1c2UgaXRzIHByZWZpeCB0byBkZXRlbWluZSBvdXQgbWFwcGluZwotICAgICAgLy8KLSAgICAgIC8vIGlmIG9sZEluZm8gaXMgbnVsbCAuLi4gIHdlIHVzZSB0aGUgJ29sZENvcHknIHdlIHN0YXNoZWQgYXdheSAKLSAgICAgIC8vIGFzc3VtaW5nIHRoYXQgdGhlIHVzZXIgY2hhbmdlZCB0aGUgVVJJIGFuZCB0aGUgcHJlZml4Ci0gICAgICBpZiAob2xkSW5mbyA9PSBudWxsKQotICAgICAgewotICAgICAgICBvbGRJbmZvID0gKE5hbWVzcGFjZUluZm8pIG5ld0luZm8uZ2V0UHJvcGVydHkoIm9sZENvcHkiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotCi0gICAgICBpZiAob2xkSW5mbyAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmV3UHJlZml4ID0gbmV3SW5mby5wcmVmaXggIT0gbnVsbCA/IG5ld0luZm8ucHJlZml4IDogIiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgU3RyaW5nIG9sZFByZWZpeCA9IG9sZEluZm8ucHJlZml4ICE9IG51bGwgPyBvbGRJbmZvLnByZWZpeCA6ICIiOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmICghb2xkUHJlZml4LmVxdWFscyhuZXdQcmVmaXgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWFwLnB1dChvbGRQcmVmaXgsIG5ld1ByZWZpeCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0lXU0RMVG9vbGJhckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0lXU0RMVG9vbGJhckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGZiMjVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9JV1NETFRvb2xiYXJBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVdTRExUb29sYmFyQWN0aW9uIGV4dGVuZHMgSUFjdGlvbnsKLQlwdWJsaWMgdm9pZCBzZXRFZGl0b3JQYXJ0KElFZGl0b3JQYXJ0IGVkaXRvclBhcnQpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9PcGVuSW5OZXdFZGl0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9PcGVuSW5OZXdFZGl0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzZTA3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvT3BlbkluTmV3RWRpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5PcGVuT25TZWxlY3Rpb25IZWxwZXI7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuSW5OZXdFZGl0b3IgZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLk9wZW5Jbk5ld0VkaXRvciI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBPcGVuSW5OZXdFZGl0b3IoSVdvcmtiZW5jaFBhcnQgcGFydCkKLSAgewotICAgIHN1cGVyKHBhcnQpOwotICAgIHNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9PUEVOX0lOX05FV19FRElUT1IpOyAvLyROT04tTkxTLTEkCi0gICAgc2V0SWQoSUQpOwotICAgIHNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigid3NkbF9maWxlX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FsY3VsYXRlRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLSAgICAgIC8vIHNob3VsZCBtYWtlIHRoaXMgZ2VuZXJpYyBhbmQgYmUgYWJsZSB0byBnZXQgdGhlIG93bmVyIGZyb20gYSBmYWNhZGUgb2JqZWN0Ci0gICAgICBpZiAobyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikKLSAgICAgIHsKLSAgICAgICAgV1NETEJhc2VBZGFwdGVyIGJhc2VBZGFwdGVyID0gKFdTRExCYXNlQWRhcHRlcilvOwotCi0gICAgICAgIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICAgICAgSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoRGVmaW5pdGlvbi5jbGFzcyk7Ci0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBEZWZpbml0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgRU9iamVjdCBlT2JqZWN0ID0gKEVPYmplY3QpYmFzZUFkYXB0ZXIuZ2V0VGFyZ2V0KCk7Ci0gICAgICAgICAgT3Blbk9uU2VsZWN0aW9uSGVscGVyIG9wZW5IZWxwZXIgPSBuZXcgT3Blbk9uU2VsZWN0aW9uSGVscGVyKChEZWZpbml0aW9uKW9iamVjdCk7Ci0gICAgICAgICAgb3BlbkhlbHBlci5vcGVuRWRpdG9yKGVPYmplY3QpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvT3BlbldTRExFZGl0b3JVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvT3BlbldTRExFZGl0b3JVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YzYxMjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL09wZW5XU0RMRWRpdG9yVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtLkVGUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW0uSUZpbGVTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5BRFRSZWFkT25seUZpbGVFZGl0b3JJbnB1dDsKLQotLyoqCi0gKiAKLSAqIENvbnZlbmllbmNlIENsYXNzIHRvIG9wZW4gYSBXU0RMIHJlc291cmNlCi0gKgotICovCi1wdWJsaWMgY2xhc3MgT3BlbldTRExFZGl0b3JVdGlsCi17Ci0gIHB1YmxpYyBPcGVuV1NETEVkaXRvclV0aWwoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogT3BlbnMgdGhlIFdTREwgRWRpdG9yIG9uIGEgV1NETCByZXNvdXJjZSBmcm9tIGFuIEhUVFAgcmVmZXJlbmNlCi0gICAqIAotICAgKiBAcGFyYW0gaHR0cFVSSSA6IFVSSSBpbiB0aGUgZm9ybSBvZiAiaHR0cDovL3d3dy4uLiIKLSAgICogQHJldHVybiBJRWRpdG9yUGFydCBvZiB0aGUgb3BlbmVkIFdTREwgZWRpdG9yCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElFZGl0b3JQYXJ0IG9wZW5IdHRwRmlsZUluRWRpdG9yKFVSSSBodHRwVVJJKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gb3Blbkh0dHBGaWxlSW5FZGl0b3IoaHR0cFVSSS50b1N0cmluZygpKTsgCi0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIElFZGl0b3JQYXJ0IG9wZW5IdHRwRmlsZUluRWRpdG9yKFN0cmluZyB1cmxTdHJpbmcpIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5IHsKLSAgICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBudWxsOwotICAgICAgSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotICAgICAgaWYgKHdvcmtiZW5jaCAhPSBudWxsKSB7Ci0gICAgICAgIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgICAgICBpZiAod2luZG93ICE9IG51bGwpIHsKLSAgICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gd2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgICBpZiAocGFnZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBBRFRSZWFkT25seUZpbGVFZGl0b3JJbnB1dCByZWFkT25seUZpbGUgPSBuZXcgQURUUmVhZE9ubHlGaWxlRWRpdG9ySW5wdXQodXJsU3RyaW5nKTsKLSAgICAgICAgICAgIHJlYWRPbmx5RmlsZS5zZXRFZGl0b3JJRChXU0RMRWRpdG9yUGx1Z2luLldTRExfRURJVE9SX0lEKTsKLSAgICAgICAgICAgIGVkaXRvclBhcnQgPSBwYWdlLm9wZW5FZGl0b3IocmVhZE9ubHlGaWxlLCBXU0RMRWRpdG9yUGx1Z2luLldTRExfRURJVE9SX0lEKTsgCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZWRpdG9yUGFydDsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIHBpZSkKLSAgICB7Ci0gICAgICB0aHJvdyBwaWU7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogT3BlbnMgdGhlIFdTREwgRWRpdG9yIG9uIGEgV1NETCByZXNvdXJjZSB0aGF0IGlzIGluIHRoZSBsb2NhbCBmaWxlIHN5c3RlbQotICAgKiAKLSAgICogQHBhcmFtIGZpbGVVUkk6IFRoZSBVUkkgZmlsZSBpbiB0aGUgZm9ybSBvZiBmaWxlOi8vIAotICAgKiBAcmV0dXJuIElFZGl0b3JQYXJ0IG9mIHRoZSBvcGVuZWQgV1NETCBlZGl0b3IKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSUVkaXRvclBhcnQgb3BlbkZpbGVJbkVkaXRvcihVUkkgZmlsZVVSSSkgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotICAgICAgSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IG51bGw7Ci0gICAgICBJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0gICAgICBpZiAod29ya2JlbmNoICE9IG51bGwpIHsKLSAgICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgICAgIGlmICh3aW5kb3cgIT0gbnVsbCkgewotICAgICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3aW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICAgIGlmIChwYWdlICE9IG51bGwpIHsKLSAgICAgICAgICAgIElQYXRoIHBhdGggPSBuZXcgUGF0aChmaWxlVVJJLmdldFBhdGgoKSk7Ci0gICAgICAgICAgICBJRmlsZVN0b3JlIGZpbGVTdG9yZSA9IEVGUy5nZXRMb2NhbEZpbGVTeXN0ZW0oKS5nZXRTdG9yZShwYXRoKTsKLSAgICAgICAgICAgIGlmICghZmlsZVN0b3JlLmZldGNoSW5mbygpLmlzRGlyZWN0b3J5KCkgJiYgZmlsZVN0b3JlLmZldGNoSW5mbygpLmV4aXN0cygpKSB7Ci0gICAgICAgICAgICAgIElERS5vcGVuRWRpdG9yT25GaWxlU3RvcmUocGFnZSwgZmlsZVN0b3JlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBlZGl0b3JQYXJ0OwotICAgIH0KLSAgICBjYXRjaCAoUGFydEluaXRFeGNlcHRpb24gcGllKQotICAgIHsKLSAgICAgIHRocm93IHBpZTsKLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL1JlbmFtZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL1JlbmFtZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWZkNGQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9SZW5hbWVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsgCi0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3IuQmluZGluZ1JlbmFtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvci5NZXNzYWdlUmVuYW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yLlBvcnRUeXBlUmVuYW1lcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8vaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBSZW5hbWVBY3Rpb24gLy9leHRlbmRzIEJhc2VOb2RlQWN0aW9uIGltcGxlbWVudHMgUnVubmFibGUKLXsKLSAgcHJvdGVjdGVkIE9iamVjdCBtb2RlbE9iamVjdDsgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld05hbWU7Ci0gIHByb3RlY3RlZCBOb2RlIG5vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgcHVibGljIFJlbmFtZUFjdGlvbihPYmplY3QgbW9kZWxPYmplY3QsIFN0cmluZyBuZXdOYW1lKQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICB0aGlzLm1vZGVsT2JqZWN0ID0gbW9kZWxPYmplY3Q7Ci0gICAgdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLSAgICB0aGlzLm5vZGUgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldE5vZGVGb3JPYmplY3QobW9kZWxPYmplY3QpOwotICB9ICAgICAgCi0KLSAgLyoKLSAgcHVibGljIE5vZGUgZ2V0Tm9kZSgpCi0gIHsKLSAgICByZXR1cm4gbm9kZTsKLSAgfQotICAqLwotCi0gIC8qCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldFdTRExTdHJpbmcoIl9VSV9BQ1RJT05fUkVOQU1FIik7ICAvLyROT04tTkxTLTEkCi0gIH0KLSAgKi8KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgT3BlcmF0aW9uKSAKLSAgICB7Ci0gICAgICByZW5hbWVPcGVyYXRpb25IZWxwZXIoKE9wZXJhdGlvbiltb2RlbE9iamVjdCk7Ci0gICAgfSAgCi0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBJbnB1dCB8fAotICAgICAgICAgICAgIG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgT3V0cHV0IHx8Ci0gICAgICAgICAgICAgbW9kZWxPYmplY3QgaW5zdGFuY2VvZiBGYXVsdCkKLSAgICB7Ci0gICAgICByZW5hbWVJT0ZIZWxwZXIoKFdTRExFbGVtZW50KW1vZGVsT2JqZWN0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKG1vZGVsT2JqZWN0LCBuZXdOYW1lKTsKLSAgICB9Ci0gIH0gCi0KLSAgcHJvdGVjdGVkIHZvaWQgcmVuYW1lTW9kZWxPYmplY3RIZWxwZXIoT2JqZWN0IG1vZGVsT2JqZWN0LCBTdHJpbmcgdGhlTmV3TmFtZSkKLSAgewotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChtb2RlbE9iamVjdCk7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7IAotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCB0aGVOZXdOYW1lKTsgLy8kTk9OLU5MUy0xJAotICAgIH0gICAgCi0KLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBNZXNzYWdlKQotICAgIHsKLSAgICAgIE1lc3NhZ2VSZW5hbWVyIHJlbmFtZXIgPSBuZXcgTWVzc2FnZVJlbmFtZXIoKE1lc3NhZ2UpbW9kZWxPYmplY3QsIHRoZU5ld05hbWUpOwotICAgICAgcmVuYW1lci52aXNpdEJpbmRpbmdzKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgUG9ydFR5cGUpCi0gICAgewotICAgICAgUG9ydFR5cGVSZW5hbWVyIHJlbmFtZXIgPSBuZXcgUG9ydFR5cGVSZW5hbWVyKChQb3J0VHlwZSltb2RlbE9iamVjdCwgdGhlTmV3TmFtZSk7Ci0gICAgICByZW5hbWVyLnZpc2l0QmluZGluZ3MoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nKQotICAgIHsKLSAgICAgIEJpbmRpbmdSZW5hbWVyIHJlbmFtZXIgPSBuZXcgQmluZGluZ1JlbmFtZXIoKEJpbmRpbmcpbW9kZWxPYmplY3QsIHRoZU5ld05hbWUpOwotICAgICAgcmVuYW1lci52aXNpdFNlcnZpY2VzKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVuYW1lT3BlcmF0aW9uSGVscGVyKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICByZW5hbWVNb2RlbE9iamVjdEhlbHBlcihvcGVyYXRpb24sIG5ld05hbWUpOwotICB9Ci0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW5hbWVJT0ZIZWxwZXIoV1NETEVsZW1lbnQgb2JqZWN0KQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9iamVjdC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7IAotICAgIENvbXBvbmVudFJlZmVyZW5jZVV0aWwgdXRpbCA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKGRlZmluaXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBMaXN0IGxpc3QgPSBudWxsOwotCi0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElucHV0KQotICAgIHsKLSAgICAgIGxpc3QgPSB1dGlsLmdldEJpbmRpbmdJbnB1dHMoKElucHV0KW9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE91dHB1dCkKLSAgICB7Ci0gICAgICBsaXN0ID0gdXRpbC5nZXRCaW5kaW5nT3V0cHV0cygoT3V0cHV0KW9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UgLy8gZmF1bHQKLSAgICB7Ci0gICAgICBsaXN0ID0gdXRpbC5nZXRCaW5kaW5nRmF1bHRzKChGYXVsdClvYmplY3QpOwotICAgIH0KLSAgICAgIAotICAgIGlmIChsaXN0ICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChJdGVyYXRvciBpID0gbGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBPYmplY3QgYmluZGluZ09iamVjdCA9IGkubmV4dCgpOwotICAgICAgICByZW5hbWVNb2RlbE9iamVjdEhlbHBlcihiaW5kaW5nT2JqZWN0LCBuZXdOYW1lKTsKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgfQotCi0gICAgcmVuYW1lTW9kZWxPYmplY3RIZWxwZXIob2JqZWN0LCBuZXdOYW1lKTsKLSAgfSAgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL1NtYXJ0UmVuYW1lQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvU21hcnRSZW5hbWVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIxZWFhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvU21hcnRSZW5hbWVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotLyoKLSAqIFRoaXMgY2xhc3MgcmVuYW1lcyAncmVsYXRlZCcgV1NETEVsZW1lbnRzLiAgVGhlIHNjZW5hcmlvIGlzIGFzIGZvbGxvd3M6Ci0gKiBUaGUgdXNlciByZW5hbWVzIGEgV1NETEVsZW1lbnQgaW4gdGhlIGVkaXRvciwgc2F5IGEgTWVzc2FnZS4gIFRoaXMgY2xhc3MKLSAqIHdpbGwgZmluZCB0aGUgJ3JlbGF0ZWQnIGVsZW1lbnRzIHRvIHRoaXMgTWVzc2FnZSBhbmQgcmVuYW1lIHRoZW0gYXMgd2VsbC4KLSAqIEl0IHdpbGwgb25seSByZW5hbWUgYSAncmVsYXRlZCcgZWxlbWVudCBpZiB0aGUgZWxlbWVudCBuYW1lIChvciBwYXJ0IG9mIGl0KQotICogaXMgZ2VuZXJhdGVkLgotICogCi0gKiBTZWUgTmFtZVV0aWwuamF2YQotICovCi1wdWJsaWMgY2xhc3MgU21hcnRSZW5hbWVBY3Rpb24gZXh0ZW5kcyBCYXNlTm9kZUFjdGlvbiBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLQlwcm90ZWN0ZWQgT2JqZWN0IGVsZW1lbnQ7Ci0JcHJvdGVjdGVkIFN0cmluZyBuZXdOYW1lOwotCXByaXZhdGUgTGlzdCBtZXNzYWdlUmVmZXJlbmNlczsgLy8gVGhpcyB2YXJpYWJsZSBzaG91bGQgYmUgYWNjZXNzZWQgYnkgbWV0aG9kIGdldEFsbE1lc3NhZ2VSZWZlcmVuY2VzKCkKLQlwcm90ZWN0ZWQgTm9kZSBub2RlOwotCXByaXZhdGUgYm9vbGVhbiByZW5hbWVQYXJlbnQgPSB0cnVlOwotCXByaXZhdGUgU3RyaW5nIG9sZE5hbWU7Ci0JCi0JcHVibGljIFNtYXJ0UmVuYW1lQWN0aW9uKE9iamVjdCBlbGVtZW50LCBTdHJpbmcgbmV3TmFtZSkgewotCQlzZXRUZXh0KCJTbWFydCBSZW5hbWUgQWN0aW9uIik7IC8vIERvIG5vdCB0cmFuc2xhdGUgLy8kTk9OLU5MUy0xJAotCQl0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwotCQl0aGlzLm5ld05hbWUgPSBuZXdOYW1lOwotCSAgICB0aGlzLm5vZGUgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldE5vZGVGb3JPYmplY3QoZWxlbWVudCk7Ci0JfQotCQotCXB1YmxpYyBOb2RlIGdldE5vZGUoKSB7Ci0JICAgcmV0dXJuIG5vZGU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRVbmRvRGVzY3JpcHRpb24oKSB7Ci0JICByZXR1cm4gTWVzc2FnZXMuX1VJX0FDVElPTl9SRU5BTUU7ICAvLyROT04tTkxTLTEkCi0JfQotCQotCS8qCi0JICogYm9vbGVhbiBhcmd1bWVudCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgdG9wIGxldmVsIChwYXJlbnQpIG9iamVjdCBzaG91bGQgYmUgcmVuYW1lZAotCSAqIGl0c2VsZi4gIE90aGVyd2lzZSwgb25seSB0aGUgImNoaWxkIiBvYmplY3RzIHdpbGwgYmUgcmVuYW1lZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oYm9vbGVhbiByZW5hbWVQYXJlbnQpIHsKLQkJdGhpcy5yZW5hbWVQYXJlbnQgPSByZW5hbWVQYXJlbnQ7Ci0JCXJ1bigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJUmVuYW1lQWN0aW9uIHJlbmFtZXI7Ci0JCQotCQliZWdpblJlY29yZGluZygpOwotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE9wZXJhdGlvbikgewotCQkJT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIGVsZW1lbnQ7Ci0JCQlvbGROYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLQotCQkJaWYgKG9sZE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJCi0JCQkvLyBSZW5hbWUgT3BlcmF0aW9uCi0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24ob3BlcmF0aW9uLCBuZXdOYW1lKTsKLQkJCQlyZW5hbWVyLnJ1bigpOwotCQkJfQotCQkJCi0JCQkvLyBSZW5hbWUgSW5wdXQKLQkJCUlucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotCQkJLyoKLQkJCWlmIChpbnB1dCAhPSBudWxsICYmIGlzSW5wdXRPdXRwdXROYW1lR2VuZXJhdGVkKG9sZE5hbWUsIGlucHV0LmdldE5hbWUoKSkpIHsKLQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihpbnB1dCwgbmV3TmFtZSk7Ci0JCQkJcmVuYW1lci5ydW4oKTsKLQkJCX0KLQkJCSovCi0JCQkKLQkJCS8vIFJlbmFtZSBPdXRwdXQKLQkJCU91dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotCQkJLyoKLQkJCWlmIChvdXRwdXQgIT0gbnVsbCAmJiBpc0lucHV0T3V0cHV0TmFtZUdlbmVyYXRlZChvbGROYW1lLCBvdXRwdXQuZ2V0TmFtZSgpKSkgewotCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKG91dHB1dCwgbmV3TmFtZSk7Ci0JCQkJcmVuYW1lci5ydW4oKTsKLQkJCX0KLQkJCSovCi0JCQkKLQkJCQotCQkJLy8gCi0JCQlXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IG9wZXJhdGlvbi5nZXRDb250YWluZXIoKTsKLQkJCWlmICh3c2RsRWxlbWVudCBpbnN0YW5jZW9mIFBvcnRUeXBlKSB7Ci0JCQkJUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIHdzZGxFbGVtZW50OwotCQkJCU1hcCBiaW5kaW5ncyA9IHBvcnRUeXBlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRCaW5kaW5ncygpOwotCQkJCUNvbGxlY3Rpb24gdmFsdWVzID0gYmluZGluZ3MudmFsdWVzKCk7Ci0JCQkJSXRlcmF0b3IgaXRlcmF0b3IgPSB2YWx1ZXMuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQkJCUJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJCQotCQkJCQkvLyBGaW5kIG9ubHkgQmluZGluZ3Mgd2hpY2ggcmVmZXJlbmNlIHRoZSBtb2RpZmllZCBQb3J0VHlwZS0tPk9wZXJhdGlvbgotCQkJCQlpZiAoYmluZGluZy5nZXRQb3J0VHlwZSgpLmVxdWFscyhwb3J0VHlwZSkpIHsKLQkJCQkJCVN0cmluZyBvcGVyYXRpb25JbnB1dE5hbWUgPSBudWxsOwotCQkJCQkJU3RyaW5nIG9wZXJhdGlvbk91dHB1dE5hbWUgPSBudWxsOwotCQkJCQkJaWYob3BlcmF0aW9uLmdldElucHV0KCkgIT0gbnVsbCkgewotCQkJCQkJCW9wZXJhdGlvbklucHV0TmFtZSA9IG9wZXJhdGlvbi5nZXRJbnB1dCgpLmdldE5hbWUoKTsKLQkJCQkJCX0KLQkJCQkJCWlmKG9wZXJhdGlvbi5nZXRPdXRwdXQoKSAhPSBudWxsKSB7Ci0JCQkJCQkJb3BlcmF0aW9uT3V0cHV0TmFtZSA9IG9wZXJhdGlvbi5nZXRPdXRwdXQoKS5nZXROYW1lKCk7Ci0JCQkJCQl9Ci0JCQkJCQkKLQkJCQkJCUJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbihvcGVyYXRpb24uZ2V0TmFtZSgpLCBvcGVyYXRpb25JbnB1dE5hbWUgLCBvcGVyYXRpb25PdXRwdXROYW1lKTsKLQkJCQkJCS8vIFRoZXJlIG1heSBiZSBubyBiaW5kaW5nIGNvbnRlbnQgaW4gd2hpY2ggY2FzZSBiaW5kaW5nT3BlcmF0aW9uIHdvdWxkIGJlIG51bGwKLQkJCQkJCWlmIChiaW5kaW5nT3BlcmF0aW9uICE9IG51bGwpIHsKLQkJCQkJCQlMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0JCQkJCQkJSXRlcmF0b3IgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTsKLQkJCQkJCQl3aGlsZSAoZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQkJCQkJCU9iamVjdCBvYmplY3QgPSBleHRlbnNpYmlsaXR5RWxlbWVudHNJdGVyYXRvci5uZXh0KCk7Ci0JCQkJCQkJCWlmKG9iamVjdCBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pIHsKLQkJCQkJCQkJCVNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IChTT0FQT3BlcmF0aW9uKSBvYmplY3Q7Ci0JCQkJCQkJCQlTdHJpbmcgc29hcEFjdGlvblVSSSA9IHNvYXBPcGVyYXRpb24uZ2V0U29hcEFjdGlvblVSSSgpOwotCi0JCQkJCQkJCQkvLyBDaGVjayBpZiB0aGUgb2xkIHNvYXBBY3Rpb25VUkkgaXMgYSBnZW5lcmF0ZWQgU3RyaW5nLiAgSWYgaXQncyBub3QKLQkJCQkJCQkJCS8vIGdlbmVyYXRlZCwgbGVhdmUgaXQuICBJdCBtZWFucyBhIHVzZXIgaGFzIGVkaXRlZCBhbmQgd2Ugc2hvdWxkbid0IHRvdWNoIGl0LgotCQkJCQkJCQkJU3RyaW5nIHRucyA9IG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQkJCQkJCQlpZiAoY29tcHV0ZVNPQVBBY3Rpb25VUkkodG5zLCBvbGROYW1lKS5lcXVhbHMoc29hcEFjdGlvblVSSSkpIHsKLQkJCQkJCQkJCQkvLyBDaG9wIG9mZiB0aGUgT3BlcmF0aW9uIG5hbWUgYXQgdGhlIGVuZCBhbmQgYXBwZW5kIHRoZSBuZXcgbmFtZS4KLQkJCQkJCQkJCQlTdHJpbmcgbmV3U09BUEFjdGlvblVSSSA9IHNvYXBBY3Rpb25VUkkuc3Vic3RyaW5nKDAsIHNvYXBBY3Rpb25VUkkubGVuZ3RoKCkgLSBvbGROYW1lLmxlbmd0aCgpKTsKLQkJCQkJCQkJCQluZXdTT0FQQWN0aW9uVVJJID0gbmV3U09BUEFjdGlvblVSSSArIG5ld05hbWU7Ci0JCQkJCQkJCQkJc29hcE9wZXJhdGlvbi5zZXRTb2FwQWN0aW9uVVJJKG5ld1NPQVBBY3Rpb25VUkkpOwotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJCi0JCQkKLQkJCS8vIFJlbmFtZSBNZXNzYWdlcyBhbmQgUGFydHMKLQkJCU1lc3NhZ2UgbXNnOwotCi0JCQkvLyBJbnB1dAotCQkJaWYgKGlucHV0ICE9IG51bGwgJiYgaW5wdXQuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0JCQkJbXNnID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLQkJCQlTdHJpbmcgb2xkTWVzc2FnZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCi0JCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCQotCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgIlJlcXVlc3QiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCQlyZW5hbWVNZXNzYWdlSGVscGVyKG1zZywgY29tcHV0ZU5ld01lc3NhZ2VOYW1lKG1zZywgb2xkTmFtZSwgbmV3TmFtZSkpOwotCQkJCQkJCi0JCQkJCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJCQkJcmVuYW1lUGFydHNIZWxwZXIobXNnLmdldEVQYXJ0cygpLCBvbGRNZXNzYWdlTmFtZSwgbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIHRydWUpOwkKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCQotCQkJLy8gT3V0cHV0Ci0JCQlpZiAob3V0cHV0ICE9IG51bGwgJiYgb3V0cHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0JCQkJbXNnID0gb3V0cHV0LmdldEVNZXNzYWdlKCk7Ci0JCQkJU3RyaW5nIG9sZE1lc3NhZ2VOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCQkKLQkJCQlpZiAobXNnICE9IG51bGwpIHsKLQkJCQkJb2xkTWVzc2FnZU5hbWUgPSBtc2cuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCQkJCi0JCQkJCWlmIChpc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9sZE1lc3NhZ2VOYW1lLCBvbGROYW1lLCAiUmVzcG9uc2UiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCQlyZW5hbWVNZXNzYWdlSGVscGVyKG1zZywgY29tcHV0ZU5ld01lc3NhZ2VOYW1lKG1zZywgb2xkTmFtZSwgbmV3TmFtZSkpOwotCQkJCQkJCi0JCQkJCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJCQkJcmVuYW1lUGFydHNIZWxwZXIobXNnLmdldEVQYXJ0cygpLCBvbGRNZXNzYWdlTmFtZSwgbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIHRydWUpOwotCQkJCQl9Ci0JCQkJCQotCQkJCX0KLQkJCX0KLQkJCQotCQkJLy8gRmF1bHRzCi0JCQlMaXN0IGZhdWx0cyA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCk7Ci0JCQlpZiAoZmF1bHRzICE9IG51bGwpIHsKLQkJCQlJdGVyYXRvciBpdCA9IGZhdWx0cy5pdGVyYXRvcigpOwotCQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQkJRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGl0Lm5leHQoKTsKLQkJCQkJbXNnID0gZmF1bHQuZ2V0RU1lc3NhZ2UoKTsKLQkJCQkJU3RyaW5nIG9sZE1lc3NhZ2VOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQotCQkJCQlpZiAobXNnICE9IG51bGwpIHsKLQkJCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCQkKLQkJCQkJCWlmIChpc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9sZE1lc3NhZ2VOYW1lLCBvbGROYW1lLCBmYXVsdC5nZXROYW1lKCkpKSB7Ci0JCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQkKLQkJCQkJCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSW5wdXQpIHsKLQkJCUlucHV0IGlucHV0ID0gKElucHV0KSBlbGVtZW50OwotCQkJb2xkTmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLQkJCWlmIChvbGROYW1lID09IG51bGwpIHsKLQkJCQlvbGROYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCQotCQkJaWYgKG9sZE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJCi0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJaW5wdXQuc2V0TmFtZShuZXdOYW1lKTsKLQkJCX0KLQotLy8JCQkgUmVuYW1lIE1lc3NhZ2VzIGFuZCBQYXJ0cwotCQkJTWVzc2FnZSBtc2c7Ci0JCQkKLQkJCS8vIElucHV0Ci0JCQlpZiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCQltc2cgPSBpbnB1dC5nZXRFTWVzc2FnZSgpOwotCQkJCVN0cmluZyBvbGRNZXNzYWdlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJCi0JCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCQotCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgIlJlcXVlc3QiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCQlyZW5hbWVNZXNzYWdlSGVscGVyKG1zZywgY29tcHV0ZU5ld01lc3NhZ2VOYW1lKG1zZywgb2xkTmFtZSwgbmV3TmFtZSkpOwotCQkJCQkJCi0JCQkJCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJCQkJcmVuYW1lUGFydHNIZWxwZXIobXNnLmdldEVQYXJ0cygpLCBvbGRNZXNzYWdlTmFtZSwgbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIHRydWUpOwkKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgT3V0cHV0KSB7Ci0JCQlPdXRwdXQgb3V0cHV0ID0gKE91dHB1dCkgZWxlbWVudDsKLQkJCW9sZE5hbWUgPSBvdXRwdXQuZ2V0TmFtZSgpOwotCQkJaWYgKG9sZE5hbWUgPT0gbnVsbCkgewotCQkJCW9sZE5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJCi0JCQlpZiAob2xkTmFtZS5lcXVhbHMobmV3TmFtZSkpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQkKLQkJCWlmIChyZW5hbWVQYXJlbnQpIHsKLQkJCQlvdXRwdXQuc2V0TmFtZShuZXdOYW1lKTsKLQkJCX0KLQotLy8JCQkgUmVuYW1lIE1lc3NhZ2VzIGFuZCBQYXJ0cwotCQkJTWVzc2FnZSBtc2c7Ci0JCQkKLQkJCS8vIE91dHB1dAotCQkJaWYgKG91dHB1dCAhPSBudWxsICYmIG91dHB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCW1zZyA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotCQkJCVN0cmluZyBvbGRNZXNzYWdlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCWlmIChpc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9sZE1lc3NhZ2VOYW1lLCBvbGROYW1lLCAiUmVzcG9uc2UiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCQlyZW5hbWVNZXNzYWdlSGVscGVyKG1zZywgY29tcHV0ZU5ld01lc3NhZ2VOYW1lKG1zZywgb2xkTmFtZSwgbmV3TmFtZSkpOwotCQkJCQkJCi0JCQkJCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJCQkJcmVuYW1lUGFydHNIZWxwZXIobXNnLmdldEVQYXJ0cygpLCBvbGRNZXNzYWdlTmFtZSwgbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIHRydWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBGYXVsdCkgewotCQkJRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGVsZW1lbnQ7Ci0JCQlNZXNzYWdlIG1zZyA9IGZhdWx0LmdldEVNZXNzYWdlKCk7Ci0JCQlTdHJpbmcgb2xkTWVzc2FnZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJb2xkTmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLQkJCQotCQkJaWYgKG9sZE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJCi0JCQkvLyBSZW5hbWUgdGhlIEZhdWx0Ci0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oZmF1bHQsIG5ld05hbWUpOwotCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQl9Ci0KLQkJCS8vIFJlbmFtZSB0aGUgTWVzc2FnZSBhbmQgUGFydHMKLQkJCWlmIChtc2cgIT0gbnVsbCkgewotCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCi0JCQkJT3BlcmF0aW9uIG9wID0gKE9wZXJhdGlvbikgZmF1bHQuZUNvbnRhaW5lcigpOwotCQkJCWlmIChpc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9sZE1lc3NhZ2VOYW1lLCBvcC5nZXROYW1lKCksIG9sZE5hbWUpKSB7Ci0JCQkJCXJlbmFtZU1lc3NhZ2VIZWxwZXIobXNnLCBjb21wdXRlTmV3TWVzc2FnZU5hbWUobXNnLCBvbGROYW1lLCBuZXdOYW1lKSk7Ci0JCQkJCQotCQkJCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJCQlyZW5hbWVGYXVsdFBhcnRzKG1zZy5nZXRFUGFydHMoKSwgb3AuZ2V0TmFtZSgpLCBvbGROYW1lLCBuZXdOYW1lKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE1lc3NhZ2UpIHsKLQkJCU1lc3NhZ2UgbXNnID0gKE1lc3NhZ2UpIGVsZW1lbnQ7Ci0JCQlvbGROYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQlTdHJpbmcgb2xkTWVzc2FnZU5hbWUgPSBtc2cuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCQotCQkJaWYgKG9sZE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCi0JCQlTdHJpbmcgbmV3TWVzc2FnZU5hbWUgPSBjb21wdXRlTmV3TWVzc2FnZU5hbWUobXNnLCBvbGROYW1lLCBuZXdOYW1lKTsKLQkJCWlmIChyZW5hbWVQYXJlbnQpIHsKLQkJCQlyZW5hbWVNZXNzYWdlSGVscGVyKG1zZywgbmV3TWVzc2FnZU5hbWUpOwotCQkJfQotCQkJCQkKLQkJCWlmIChtc2cuZ2V0RVBhcnRzKCkgIT0gbnVsbCkKLQkJCQlyZW5hbWVQYXJ0c0hlbHBlcihtc2cuZ2V0RVBhcnRzKCksIG9sZE1lc3NhZ2VOYW1lLCBuZXdNZXNzYWdlTmFtZSwgdHJ1ZSk7Ci0vLwkJCQlyZW5hbWVQYXJ0c0hlbHBlcihtc2cuZ2V0RVBhcnRzKCksIG9sZE1lc3NhZ2VOYW1lLCBtc2cuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgdHJ1ZSk7Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBhcnQpIHsKLQkJCVBhcnQgcGFydCA9IChQYXJ0KSBlbGVtZW50OwotCQkJU3RyaW5nIG9sZFBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0JCQkKLQkJCWlmIChvbGRQYXJ0TmFtZS5lcXVhbHMobmV3TmFtZSkpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQkKLQkJCWlmIChyZW5hbWVQYXJlbnQpIHsKLQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihlbGVtZW50LCBuZXdOYW1lKTsKLQkJCQlyZW5hbWVyLnJ1bigpOwotCQkJfQotCQkJCi0vLwkJCVJlbmFtZSBFbGVtZW50cwotCQkJcmVuYW1lWFNERWxlbWVudChwYXJ0LCBvbGRQYXJ0TmFtZSwgbmV3TmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBvcnQpIHsKLQkJCVBvcnQgcG9ydCA9IChQb3J0KSBlbGVtZW50OwotCQkJU3RyaW5nIG9sZFBvcnROYW1lID0gcG9ydC5nZXROYW1lKCk7Ci0JCQkKLQkJCWlmIChyZW5hbWVQYXJlbnQpIHsKLQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihlbGVtZW50LCBuZXdOYW1lKTsKLQkJCQlyZW5hbWVyLnJ1bigpOwotCQkJfQotCi0vLwkJCVJlbmFtZSBCaW5kaW5nCi0JCQlCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0JCQlpZiAoYmluZGluZyAhPSBudWxsICYmIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMob2xkUG9ydE5hbWUpKSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oYmluZGluZywgbmV3TmFtZSk7CQotCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQl9Ci0JCX0KLQkJZW5kUmVjb3JkaW5nKCk7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGNvbXB1dGVTT0FQQWN0aW9uVVJJKFN0cmluZyB0bnMsIFN0cmluZyBvcGVyYXRpb25OYW1lKSB7Ci0JCS8vIFdlIG5lZWQgbW9yZSBpbnZlc3RpZ2F0aW9uIGhlcmUuICBXZSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgaG93IHRoaXMgU09BUEFjdGlvblVSSQotCQkvLyBpcyBnZW5lcmF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiAgT25lIGlzc3VlIEkgc2VlIGhlcmUgaXMgdGhlIHRyYWlsaW5nIHNsYXNoIG9mIHRoZQotCQkvLyB0YXJnZXRuYW1lc3BhY2UuICBNb3JlIHNwZWNpZmljYWxseSwgdGhlIGxhY2sgb2Ygb25lLiAgSWYgdGhlcmUgaXMgbm8gdHJhaWxpbmcgc2xhc2gsCi0JCS8vIGRvZXMgaXQgYWRkIG9uZT8KLQkJcmV0dXJuIHRucyArIG9wZXJhdGlvbk5hbWU7Ci0JfQotCS8vIGJvb2xlYW4gaXNJbnB1dE91dHB1dCBzaG91bGQgYmUgc2V0IHRvIHRydWUgaWYgdGhlIHBhcnQgaXMgYW4gSW5wdXQgb3IgT3V0cHV0LgotCS8vIFNldCBmYWxzZSBpZiB0aGUgcGFydCBpcyBhIEZhdWx0LgotCXByaXZhdGUgdm9pZCByZW5hbWVQYXJ0c0hlbHBlcihMaXN0IHBhcnRzTGlzdCwgU3RyaW5nIG9sZFN1YlN0cmluZywgU3RyaW5nIG5ld1N1YlN0cmluZywgYm9vbGVhbiBpc0lucHV0T3V0cHV0KSB7Ci0JCVJlbmFtZUFjdGlvbiByZW5hbWVyOwotCQkKLQkJaWYgKHBhcnRzTGlzdCAhPSBudWxsKSB7Ci0JCQlJdGVyYXRvciBwSXQgPSBwYXJ0c0xpc3QuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChwSXQuaGFzTmV4dCgpKSB7Ci0JCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHBJdC5uZXh0KCk7Ci0JCQkJU3RyaW5nIG9sZFBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0JCQkJCi0JCQkJaWYgKGlzUGFydE5hbWVHZW5lcmF0ZWQob2xkUGFydE5hbWUsIG9sZFN1YlN0cmluZykpIHsKLQkJCQkJU3RyaW5nIG5ld1BhcnROYW1lOwotCQkJCQlpZiAoaXNJbnB1dE91dHB1dCkgewotCQkJCQkJbmV3UGFydE5hbWUgPSBjb21wdXRlTmV3UGFydE5hbWUocGFydCwgb2xkU3ViU3RyaW5nLCBuZXdTdWJTdHJpbmcpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJbmV3UGFydE5hbWUgPSBjb21wdXRlTmV3RmF1bHRQYXJ0TmFtZShwYXJ0LCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZyk7Ci0JCQkJCX0KLQkJCQkJCi0JCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKHBhcnQsIG5ld1BhcnROYW1lKTsKLQkJCQkJcmVuYW1lci5ydW4oKTsKLQkJCQkJCi0JCQkJCS8vIFJlbmFtZSBFbGVtZW50cwotLy8JCQkJCXJlbmFtZVhTREVsZW1lbnQocGFydCwgb2xkUGFydE5hbWUsIG5ld1BhcnROYW1lKTsKLQkJCQl9Ci0JCQkJCi0JCQkJLy8gUmVuYW1lIEVsZW1lbnRzCi0JCQkJcmVuYW1lWFNERWxlbWVudChwYXJ0LCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZyk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1cGRhdGUgdGhlIFBhcnQgbmFtZSB3aGVuIHRoZSBGYXVsdCBuYW1lIGlzIGNoYW5nZWQuICBPbmx5Ci0JLy8gY2hhbmdlIHRoZSBQYXJ0IG5hbWUgaWYgdGhlIHBhcnQgbmFtZSBpcyBhIGdlbmVyYXRlZCBuYW1lLgotCS8vIENvbXBhcmUgdG8gcmVuYW1lUGFydHNIZWxwZXIoKS4gIFRoZSByZW5hbWVQYXJ0c0hlbHBlcigpIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhIEZhdWx0Ci0JLy8gaGFzIE5PVCBiZWVuIHJlbmFtZWQsIHJhdGhlciwgaXQgaXMgdHJpZ2dlcmVkIGJ5IHNvbWUgb3RoZXIgbmFtaW5nIChleC4gT3BlcmF0aW9uCi0JLy8gcmVuYW1pbmcpLiAgSXQgd2lsbCB1cGRhdCBJbnB1dC9PdXRwdXQsIEFORCBGYXVsdCBQYXJ0cy4KLQlwcml2YXRlIHZvaWQgcmVuYW1lRmF1bHRQYXJ0cyhMaXN0IHBhcnRzTGlzdCwgU3RyaW5nIGJhc2VOYW1lLCBTdHJpbmcgb2xkU3ViU3RyaW5nLCBTdHJpbmcgbmV3U3ViU3RyaW5nKSB7Ci0JCVJlbmFtZUFjdGlvbiByZW5hbWVyOwotCQkKLQkJaWYgKHBhcnRzTGlzdCAhPSBudWxsKSB7Ci0JCQlJdGVyYXRvciBwSXQgPSBwYXJ0c0xpc3QuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChwSXQuaGFzTmV4dCgpKSB7Ci0JCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHBJdC5uZXh0KCk7Ci0JCQkJU3RyaW5nIG9sZFBhcnROYW1lID0gcGFydC5nZXROYW1lKCk7Ci0JCQkJCi0JCQkJaWYgKGlzUGFydE5hbWVHZW5lcmF0ZWQob2xkUGFydE5hbWUsIGJhc2VOYW1lLCBvbGRTdWJTdHJpbmcpKSB7Ci0JCQkJCVN0cmluZyBuZXdQYXJ0TmFtZTsKLQkJCQkJbmV3UGFydE5hbWUgPSBjb21wdXRlTmV3RmF1bHRQYXJ0TmFtZShwYXJ0LCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZyk7Ci0JCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKHBhcnQsIG5ld1BhcnROYW1lKTsKLQkJCQkJcmVuYW1lci5ydW4oKTsKLQkJCQkJCi0JCQkJCS8vIFJlbmFtZSBFbGVtZW50cwotCQkJCQlyZW5hbWVYU0RFbGVtZW50KHBhcnQsIG9sZFBhcnROYW1lLCBuZXdQYXJ0TmFtZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBvbGRTdWJTdHJpbmcsIFN0cmluZyBuZXdTdWJTdHJpbmcpIHsKLQkJU3RyaW5nIHN0cmluZyA9IG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJcmV0dXJuIHJlcGxhY2VTZWN0aW9uV2l0aFN1YlN0cmluZyhzdHJpbmcsIG9sZFN1YlN0cmluZywgbmV3U3ViU3RyaW5nLCAwKTsJCQotCX0KLQkKLS8vCXByaXZhdGUgU3RyaW5nIGNvbXB1dGVOZXdGYXVsdE1lc3NhZ2VOYW1lKE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIG9sZFN1YlN0cmluZywgU3RyaW5nIG5ld1N1YlN0cmluZykgewotLy8JCVN0cmluZyBzdHJpbmcgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0vLwkJcmV0dXJuIHJlcGxhY2VTZWN0aW9uV2l0aFN1YlN0cmluZyhzdHJpbmcsIG9sZFN1YlN0cmluZywgbmV3U3ViU3RyaW5nLCAxKTsJCQotLy8JfQotCQotCS8vIE1ldGhvZCBmb3IgSW5wdXQsIE91dHB1dCwgYW5kIEZhdWx0IFBhcnRzCi0JLy8gU2VlIGNvbXB1dGVOZXdGYXVsdFBhcnROYW1lKCkgZm9yIGNvbXBhcmlzb24KLQlwcml2YXRlIFN0cmluZyBjb21wdXRlTmV3UGFydE5hbWUoUGFydCBwYXJ0LCBTdHJpbmcgb2xkU3ViU3RyaW5nLCBTdHJpbmcgbmV3U3ViU3RyaW5nKSB7Ci0JCVN0cmluZyBzdHJpbmcgPSBwYXJ0LmdldE5hbWUoKTsKLQkJcmV0dXJuIHJlcGxhY2VTZWN0aW9uV2l0aFN1YlN0cmluZyhzdHJpbmcsIG9sZFN1YlN0cmluZywgbmV3U3ViU3RyaW5nLCAwKTsJCQotCX0KLQkKLQkvLyBNZXRob2QgZm9yIEZhdWx0IFBhcnRzCi0JLy8gVGhpcyBtZXRob2QgYmVoYXZlcyBpbiB0aGUgZXhhY3Qgc2FtZSB3YXkgYXMgY29tcHV0ZU5ld1BhcnROYW1lKCkgZXhjZXB0IGl0IHN0YXJ0cyBzZWFyY2hpbmcgZm9yIGEgbWF0Y2gKLQkvLyBhZnRlciB0aGUgZmlyc3QgY2hhcmFjdGVyLiAgVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIHVzZXJzIHdobyB3aXNoIHRvIHJlbmFtZSBhIGdlbmVyYXRlZCAoRmF1bHQpIHBhcnQKLQkvLyB3aGVyZSB0aGUgRmF1bHQgbmFtZSBoYXMgY2hhbmdlZC4gIFdlIHN0YXJ0IG91ciBzZWFyY2ggYWZ0ZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgbmFtZQotCS8vIG9mIHRoZSBwYXJ0IGlzIGJ1aWx0IGJ5IGFwcGVuZGluZyB0aGUgRmF1bHQgbmFtZSBhZnRlciB0aGUgT3BlcmF0aW9uIG5hbWUuCi0JcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZU5ld0ZhdWx0UGFydE5hbWUoUGFydCBwYXJ0LCBTdHJpbmcgb2xkU3ViU3RyaW5nLCBTdHJpbmcgbmV3U3ViU3RyaW5nKSB7Ci0JCVN0cmluZyBzdHJpbmcgPSBwYXJ0LmdldE5hbWUoKTsKLQkJcmV0dXJuIHJlcGxhY2VTZWN0aW9uV2l0aFN1YlN0cmluZyhzdHJpbmcsIG9sZFN1YlN0cmluZywgbmV3U3ViU3RyaW5nLCAxKTsJCQotCX0KLQkKLQlwcml2YXRlIFN0cmluZyByZXBsYWNlU2VjdGlvbldpdGhTdWJTdHJpbmcoU3RyaW5nIGZ1bGxTdHJpbmcsIFN0cmluZyBvbGRTdWJTdHJpbmcsIFN0cmluZyBuZXdTdWJTdHJpbmcsIGludCBzdGFydFNlYXJjaEluZGV4KSB7Ci0JCVN0cmluZ0J1ZmZlciBmdWxsU0IgPSBuZXcgU3RyaW5nQnVmZmVyKGZ1bGxTdHJpbmcpOwotCQlpbnQgaW5kZXggPSBmdWxsU0IuaW5kZXhPZihvbGRTdWJTdHJpbmcsIHN0YXJ0U2VhcmNoSW5kZXgpOwotCQlpZiAoaW5kZXggPj0gMCkgewotCQkJcmV0dXJuIGZ1bGxTQi5yZXBsYWNlKGluZGV4LCBpbmRleCArIG9sZFN1YlN0cmluZy5sZW5ndGgoKSwgbmV3U3ViU3RyaW5nKS50b1N0cmluZygpOwotCQl9Ci0JCQotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjb21tb25OYW1lR2VuZXJhdG9yQ2hlY2soU3RyaW5nIHRhcmdldE5hbWUsIFN0cmluZyBiYXNlTmFtZSwgU3RyaW5nIGFwcGVuZE5hbWUpIHsKLQkJLy8gRmlyc3QgY3JpdGVyaWEgaXMgdGFyZ2V0TmFtZSBtdXN0IHN0YXJ0IHdpdGggdGhlIGJhc2VOYW1lCi0JCWlmICghdGFyZ2V0TmFtZS5zdGFydHNXaXRoKGJhc2VOYW1lKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJCQotCQlpZiAoYXBwZW5kTmFtZS50cmltKCkubGVuZ3RoKCkgPiAwKSB7Ci0JCQkvLyBTZWNvbmQgY3JpdGVyaWEuICBUaGUgYXBwZW5kZWQgbmFtZSBtdXN0IGJlIGluIHRoZSB0YXJnZXROYW1lIGFuZCBiZWdpbiByaWdodAotCQkJLy8gYWZ0ZXIgdGhlIGJhc2VOYW1lIGxvY2F0aW9uCi0JCQlpZiAoIXRhcmdldE5hbWUuc3RhcnRzV2l0aChhcHBlbmROYW1lLCBiYXNlTmFtZS5sZW5ndGgoKSkpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQkKLQkJLy8gVGhpcmQgY3JpdGVyaWEgKGlmIG5lY2Vzc2FyeSkuICBJZiBiYXNlTmFtZSArIGFwcGVuZE5hbWUgaXMgc2hvcnRlciB0aGFuIHRhcmdldE5hbWUsCi0JCS8vIHRoZW4gdGhlcmUgbXVzdCBiZSAnZXh0cmEnIGNoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZiB0YXJnZXROYW1lLiAgVGhlc2UgY2hhcmFjdGVycyBtdXN0Ci0JCS8vIG1ha2UgdXAgYW4gaW50ZWdlci4gIElmIG5vdCwgaXQgaXMgbm90IGEgZ2VuZXJhdGVkIHN0cmluZy4KLQkJaW50IHN1Ykxlbmd0aCA9IGJhc2VOYW1lLmxlbmd0aCgpICsgYXBwZW5kTmFtZS5sZW5ndGgoKTsKLQkJaWYgKHRhcmdldE5hbWUubGVuZ3RoKCkgPiBzdWJMZW5ndGgpIHsKLQkJCS8vIFdlIGhhdmUgJ2V4dHJhJyBjaGFyYWN0ZXJzCi0JCQlTdHJpbmcgZXh0cmFzID0gdGFyZ2V0TmFtZS5zdWJzdHJpbmcoc3ViTGVuZ3RoKTsKLQkJCQotCQkJaWYoIWlzRGlnaXQoZXh0cmFzKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJCi0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNPcGVyYXRpb25OYW1lR2VuZXJhdGVkKFN0cmluZyBvcE5hbWUsIFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiBvcE5hbWUuZXF1YWxzKG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChTdHJpbmcgbXNnTmFtZSwgU3RyaW5nIGJhc2VOYW1lLCBTdHJpbmcgYXBwZW5kTmFtZSkgewotCQlyZXR1cm4gY29tbW9uTmFtZUdlbmVyYXRvckNoZWNrKG1zZ05hbWUsIGJhc2VOYW1lLCBhcHBlbmROYW1lKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzSW5wdXRPdXRwdXROYW1lR2VuZXJhdGVkKFN0cmluZyBpbk91dE5hbWUsIFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiBpbk91dE5hbWUuZXF1YWxzKG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNGYXVsdE5hbWVHZW5lcmF0ZWQoU3RyaW5nIGZhdWx0TmFtZSwgU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIGZhdWx0TmFtZS5lcXVhbHMobmFtZSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1BhcnROYW1lR2VuZXJhdGVkKFN0cmluZyBwYXJ0TmFtZSwgU3RyaW5nIGJhc2VOYW1lKSB7Ci0JCXJldHVybiBjb21tb25OYW1lR2VuZXJhdG9yQ2hlY2socGFydE5hbWUsIGJhc2VOYW1lLCAiIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzUGFydE5hbWVHZW5lcmF0ZWQoU3RyaW5nIHBhcnROYW1lLCBTdHJpbmcgYmFzZU5hbWUsIFN0cmluZyBhcHBlbmROYW1lKSB7Ci0JCXJldHVybiBjb21tb25OYW1lR2VuZXJhdG9yQ2hlY2socGFydE5hbWUsIGJhc2VOYW1lLCBhcHBlbmROYW1lKTsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0RpZ2l0KFN0cmluZyBzdHJpbmcpIHsKLQkJYm9vbGVhbiByVmFsdWUgPSB0cnVlOwotCQljaGFyW10gY2hhcnMgPSBzdHJpbmcudG9DaGFyQXJyYXkoKTsKLQkKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJaWYgKCFDaGFyYWN0ZXIuaXNEaWdpdChjaGFyc1tpbmRleF0pKSB7Ci0JCQkJclZhbHVlID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByVmFsdWU7Ci0JfQotCQotCS8qCi0JICogVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFpZCBpbiByZW5hbWluZyBhIG1lc3NhZ2UKLQkgKi8KLQlwcml2YXRlIHZvaWQgcmVuYW1lTWVzc2FnZUhlbHBlcihNZXNzYWdlIG1zZywgU3RyaW5nIG5ld05hbWUpIHsKLQkJTGlzdCBtZXNzYWdlUmVmcyA9IGdldFJlZmVyZW5jaW5nTWVzc2FnZVJlZmVyZW5jZXMobXNnLCBnZXRBbGxNZXNzYWdlUmVmZXJlbmNlcygpKTsKLQkJCi0JCVJlbmFtZUFjdGlvbiByZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihtc2csIG5ld05hbWUpOwotCQlyZW5hbWVyLnJ1bigpOwotCQkKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBtZXNzYWdlUmVmcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UgPSAoTWVzc2FnZVJlZmVyZW5jZSkgaXRlcmF0b3IubmV4dCgpOwotCQkJbWVzc2FnZVJlZmVyZW5jZS5zZXRFTWVzc2FnZShtc2cpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgTGlzdCBnZXRSZWZlcmVuY2luZ01lc3NhZ2VSZWZlcmVuY2VzKE1lc3NhZ2UgbXNnLCBMaXN0IG1lc3NhZ2VSZWZzKSB7Ci0JCVZlY3RvciByZWZlcmVuY2VzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCQlRTmFtZSBtZXNzYWdlUU5hbWUgPSBtc2cuZ2V0UU5hbWUoKTsKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBtZXNzYWdlUmVmcy5pdGVyYXRvcigpOwotCQkKLQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlID0gKE1lc3NhZ2VSZWZlcmVuY2UpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCWlmIChtZXNzYWdlUmVmZXJlbmNlLmdldEVNZXNzYWdlKCkgIT0gbnVsbCAmJiBtZXNzYWdlUU5hbWUuZXF1YWxzKG1lc3NhZ2VSZWZlcmVuY2UuZ2V0RU1lc3NhZ2UoKS5nZXRRTmFtZSgpKSkgewotCQkJCXJlZmVyZW5jZXNWZWN0b3IuYWRkRWxlbWVudChtZXNzYWdlUmVmZXJlbmNlKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHJlZmVyZW5jZXNWZWN0b3I7Ci0JfQotCQotCXByaXZhdGUgTGlzdCBnZXRBbGxNZXNzYWdlUmVmZXJlbmNlcygpIHsKLQkJaWYgKG1lc3NhZ2VSZWZlcmVuY2VzID09IG51bGwpIHsKLQkJCW1lc3NhZ2VSZWZlcmVuY2VzID0gbmV3IFZlY3RvcigpOwotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKChXU0RMRWxlbWVudCkgZWxlbWVudCkuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCQkJTGlzdCBwb3J0VHlwZXMgPSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKTsKLQkJCi0JCQlpZiAocG9ydFR5cGVzICE9IG51bGwpIHsKLQkJCQlJdGVyYXRvciBwb3J0VHlwZUl0ZXJhdG9yID0gcG9ydFR5cGVzLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKHBvcnRUeXBlSXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQkJCUxpc3Qgb3BlcmF0aW9uc0xpc3QgPSAoKFBvcnRUeXBlKSBwb3J0VHlwZUl0ZXJhdG9yLm5leHQoKSkuZ2V0RU9wZXJhdGlvbnMoKTsKLQkJCQkJCi0JCQkJCWlmIChvcGVyYXRpb25zTGlzdCAhPSBudWxsKSB7Ci0JCQkJCQlJdGVyYXRvciBvcGVyYXRpb25zSXRlcmF0b3IgPSBvcGVyYXRpb25zTGlzdC5pdGVyYXRvcigpOwotCQkJCQkJd2hpbGUgKG9wZXJhdGlvbnNJdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCQkJCQltZXNzYWdlUmVmZXJlbmNlcy5hZGRBbGwoZ2V0QWxsTWVzc2FnZVJlZmVyZW5jZXMoKE9wZXJhdGlvbikgb3BlcmF0aW9uc0l0ZXJhdG9yLm5leHQoKSkpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbWVzc2FnZVJlZmVyZW5jZXM7Ci0JfQotCQotCXByaXZhdGUgVmVjdG9yIGdldEFsbE1lc3NhZ2VSZWZlcmVuY2VzKE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKLQkJVmVjdG9yIGlvZnMgPSBuZXcgVmVjdG9yKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlpb2ZzLmFkZEVsZW1lbnQoaXQubmV4dCgpKTsKLQkJfQotCQkKLQkJaWYgKGlvZnMgPT0gbnVsbCkKLQkJCWlvZnMgPSBuZXcgVmVjdG9yKCk7Ci0JCQotCQlpZiAob3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpCi0JCQlpb2ZzLmFkZEVsZW1lbnQob3BlcmF0aW9uLmdldEVJbnB1dCgpKTsKLQkJCi0JCWlmIChvcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpCi0JCQlpb2ZzLmFkZEVsZW1lbnQob3BlcmF0aW9uLmdldEVPdXRwdXQoKSk7Ci0JCQotCQlyZXR1cm4gaW9mczsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZVhTREVsZW1lbnQoUGFydCBwYXJ0LCBTdHJpbmcgb2xkWFNETmFtZSwgU3RyaW5nIG5ld1hTRE5hbWUpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsYXJhdGlvbiA9IHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0JCWlmIChlbGVtZW50RGVjbGFyYXRpb24gIT0gbnVsbCAmJiBlbGVtZW50RGVjbGFyYXRpb24uZ2V0TmFtZSgpLnN0YXJ0c1dpdGgob2xkWFNETmFtZSkpIHsKLQkJCXJlbmFtZUVsZW1lbnREZWNsYXJhdGlvbkhlbHBlcihlbGVtZW50RGVjbGFyYXRpb24sIG9sZFhTRE5hbWUsIG5ld1hTRE5hbWUpOwotCQkJCi0JCQkvLyBIZXJlIHdlIHJlbmFtZSB0aGUgZWxlbWVudCByZWZlcmVuY2UuCi0JCQkvLwotCQkJUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUocGFydC5nZXRFbGVtZW50TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBuZXdYU0ROYW1lKTsKLQkJCXBhcnQuc2V0RWxlbWVudE5hbWUocW5hbWUpOwkJCQotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnREZWNsYXJhdGlvbiAhPSBudWxsICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLQkJCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBlbGVtZW50OwotCQkJaWYgKEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uLCB0cnVlKSA9PSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpIHsKLQkJCQlpZiAoZWxlbWVudERlY2xhcmF0aW9uLmdldE5hbWUoKS5lcXVhbHMob2xkTmFtZSkpIHsKLQkJCQkJcmVuYW1lRWxlbWVudERlY2xhcmF0aW9uSGVscGVyKGVsZW1lbnREZWNsYXJhdGlvbiwgb2xkTmFtZSwgbmV3TmFtZSk7Ci0JCQkJCQotCQkJCQkvLyBIZXJlIHdlIHJlbmFtZSB0aGUgZWxlbWVudCByZWZlcmVuY2UuCi0JCQkJCS8vCi0JCQkJCVFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKHBhcnQuZ2V0RWxlbWVudE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSwgbmV3TmFtZSk7Ci0JCQkJCXBhcnQuc2V0RWxlbWVudE5hbWUocW5hbWUpOwkKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZUVsZW1lbnREZWNsYXJhdGlvbkhlbHBlcihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2xhcmF0aW9uLCBTdHJpbmcgb2xkWFNETmFtZSwgU3RyaW5nIG5ld1hTRE5hbWUpIHsKLQkJaWYgKGVsZW1lbnREZWNsYXJhdGlvbiAhPSBudWxsICYmIGVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCkuc3RhcnRzV2l0aChvbGRYU0ROYW1lKSkgewotCQkJU3RyaW5nIG5ld0VsZW1lbnROYW1lID0gcmVwbGFjZVNlY3Rpb25XaXRoU3ViU3RyaW5nKGVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCksIG9sZFhTRE5hbWUsIG5ld1hTRE5hbWUsIDApOwotCQkJZWxlbWVudERlY2xhcmF0aW9uLnNldE5hbWUobmV3RWxlbWVudE5hbWUpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvV1NETEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWEyZTQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvV1NETEFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvckF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnNwZWNpYWxpemVkLlcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQuVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hZGFwdGVyZmFjdG9yeS5leHRlbnNpb24uQWRhcHRlckZhY3RvcnlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwKLXsKLSAgc3RhdGljIFdTRExBZGFwdGVyRmFjdG9yeSBpbnN0YW5jZTsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgV1NETEFkYXB0ZXJGYWN0b3J5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IFdTRExBZGFwdGVyRmFjdG9yeSgpOwotICAgIH0gIAotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpCi0gIHsKLQkgIEFkYXB0ZXIgYWRhcHRlciA9IG51bGw7Ci0KLQkgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBEZWZpbml0aW9uKSB7Ci0JCSAgYWRhcHRlciA9IG5ldyBXMTFEZXNjcmlwdGlvbigpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU2VydmljZSkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExU2VydmljZSgpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZykgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExQmluZGluZygpOwotCSAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ09wZXJhdGlvbikgewotICAgICAgICAgIGFkYXB0ZXIgPSBuZXcgVzExQmluZGluZ09wZXJhdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0IHx8Ci0gICAgICAgICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0IHx8Ci0gICAgICAgICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgICB7ICAKLQkJICBhZGFwdGVyID0gbmV3IFcxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JICB9Ci0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQb3J0KSB7Ci0JCSAgYWRhcHRlciA9IG5ldyBXMTFFbmRQb2ludCgpOwotCSAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgUG9ydFR5cGUpIHsKLSAgICAgICAgICBhZGFwdGVyID0gbmV3IFcxMUludGVyZmFjZSgpOwotICAgICAgfSAgCi0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLQkJICBhZGFwdGVyID0gbmV3IFcxMU9wZXJhdGlvbigpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVzc2FnZVJlZmVyZW5jZSkKLQkgIHsKLQkgICAgaW50IGtpbmQgPSAtMTsKLQkgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIElucHV0KQotCSAgICB7Ci0JICAgICAga2luZCA9IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQ7Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgT3V0cHV0KQotCSAgICB7Ci0JICAgICAga2luZCA9IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUOwotCSAgICB9Ci0JICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZhdWx0KQotCSAgICB7Ci0JICAgICAga2luZCA9IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfRkFVTFQ7Ci0JICAgIH0KLQkgICAgYWRhcHRlciA9IG5ldyBXMTFNZXNzYWdlUmVmZXJlbmNlKGtpbmQpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSW1wb3J0KSB7Ci0JCSAgYWRhcHRlciA9IG5ldyBXMTFJbXBvcnQoKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFhTRFNjaGVtYSkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExVHlwZSgpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVzc2FnZSkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExTWVzc2FnZSgpOwotCSAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgUGFydCkKLSAgICAgIHsKLSAgICAJICBhZGFwdGVyID0gbmV3IFcxMVBhcmFtZXRlckZvclBhcnQoKTsgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgICAgYWRhcHRlciA9IG5ldyBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVVc2UpCi0gICAgICB7Ci0gICAgICAgICAgYWRhcHRlciA9IG5ldyBXMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUoKTsKLSAgICAgIH0gICAgICAgIAotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVzc2FnZSB8fCAKLSAgICAgICAgICAgICAgIHRhcmdldCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KQotICAgICAgewotICAgICAgICAvLyBub3Qgd2Ugb25seSBuZWVkIHRoaXMgYWRhcHRlciB0byBzZXJ2ZSBhcyBhbiAnb3RoZXJUaGluZ3NUb0xpc3RlblRvJyBhZGFwdGVyCi0gICAgICAgIC8vIGZvciB1c2UgYnkgdGhlIFcxMU1lc3NhZ2VSZWZlcmVuY2Ugd2hlbiBjb21wdXRpbmcgYSBwYXJhbWV0ZXIgbGlzdAotICAgICAgICBhZGFwdGVyID0gbmV3IFdTRExCYXNlQWRhcHRlcigpOwotICAgICAgfSAgCi0gICAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcyB8fAotICAgICAgICAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0gICAgICB7Ci0gICAgICAgIC8vIFRPRE8uLiB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgZmFjdG9yeSB0byBkZWxlZ2F0ZSB0byBleHRlbnNpb24gbGFuZ3VhZ2UgYWRhcHRlciBmYWN0b3JpZXMKLSAgICAgICAgLy8gdGhlcmUgc2hvdWxkIGJlIG5vIHJlZmVyZW5jZXMgdG8gU09BUCBvciBIVFRQIHN0dWZmIGZyb20gd2l0aGluIHRoaXMgY2xhc3MKLSAgICAgICAgLy8KLSAgICAgICAgYWRhcHRlciA9IG5ldyBXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7ICAgICAgICAKLSAgICAgIH0gICAgICAgICAKLSAgICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgewotICAgIAkgIEFkYXB0ZXIgZXh0ZW5zaWJpbGl0eUFkYXB0ZXIgPSBudWxsOwotICAgIAkgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHRhcmdldDsKLSAgICAJICBTdHJpbmcgbmFtZXNwYWNlID0gZXh0RWxlbWVudC5nZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgIAkgIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uIGV4dGVuc2lvbiA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRBZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgCSAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKSB7Ci0gICAgCQkgIEFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSBleHRlbnNpb24uZ2V0QWRhcHRlckZhY3RvcnkoKTsKLSAgICAJCSAgZXh0ZW5zaWJpbGl0eUFkYXB0ZXIgPSBmYWN0b3J5LmFkYXB0KHRhcmdldCwgQWRhcHRlci5jbGFzcyk7Ci0gICAgCSAgfQotICAgIAkgIAotICAgIAkgIGlmIChleHRlbnNpYmlsaXR5QWRhcHRlciA9PSBudWxsKSB7Ci0gICAgCQkgIGFkYXB0ZXIgPSBuZXcgVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgCSAgfQotICAgIAkgIGVsc2UgewotICAgIAkJICBhZGFwdGVyID0gZXh0ZW5zaWJpbGl0eUFkYXB0ZXI7Ci0gICAgCSAgfQotICAgICAgfSAgCi0JICBpZiAoYWRhcHRlciA9PSBudWxsKQotCSAgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5PIEFEQVBURVIgQ1JFQVRFRCBGT1IgIiArIHRhcmdldCk7ICAgIC8vJE5PTi1OTFMtMSQKLQkgICAgVGhyZWFkLmR1bXBTdGFjaygpOwotCSAgfQotCi0JICByZXR1cm4gYWRhcHRlcjsJCSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIHRhcmdldCkKLSAgewotICAgIHJldHVybiBhZGFwdCh0YXJnZXQsIHRoaXMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExCYXNlQWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9XU0RMQmFzZUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA1MzJkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExCYXNlQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVyczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExRGVsZXRlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFSZW5hbWVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLklBY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5FbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQmFzZUFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIElBU0RPYmplY3QsIElUcmVlRWxlbWVudCwgSUFjdGlvblByb3ZpZGVyIHsKLQlwcm90ZWN0ZWQgTGlzdCBsaXN0ZW5lckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JcHJvdGVjdGVkIFdTRExCYXNlQWRhcHRlciBvd25lcjsKLQkKLQlwdWJsaWMgdm9pZCByZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgIGlmICghbGlzdGVuZXJMaXN0LmNvbnRhaW5zKGxpc3RlbmVyKSkKLSAgICAgICB7Ci0JCSBsaXN0ZW5lckxpc3QuYWRkKGxpc3RlbmVyKTsKLSAgICAgICB9ICAKLQl9Ci0KLQlwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyTGlzdGVuZXIoSUFTRE9iamVjdExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWxpc3RlbmVyTGlzdC5yZW1vdmUobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHBvcHVsYXRlQWRhcHRlckxpc3QoTGlzdCBub3RpZmllckxpc3QsIExpc3QgYWRhcHRlckxpc3QpIHsKLQkJZm9yIChJdGVyYXRvciBpID0gbm90aWZpZXJMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgICB7Ci0gICAgICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBOb3RpZmllcikKLSAgICAgICAgICAgIHsgIAotCQkJTm90aWZpZXIgY29tcG9uZW50ID0gKE5vdGlmaWVyKW87ICAgICAgCi0JCQlBZGFwdGVyIGFkYXB0ZXIgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChjb21wb25lbnQpOwotCQkJYWRhcHRlckxpc3QuYWRkKGFkYXB0ZXIpOwotCQkJCi0JCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCSgoV1NETEJhc2VBZGFwdGVyKSBhZGFwdGVyKS5zZXRPd25lcih0aGlzKTsKLQkJCX0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwb3B1bGF0ZUFkYXB0ZXJMaXN0RXJyb3IiICsgbyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIH0gIAotCQl9Ci0JfQotCQotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgbm90aWZpZXIpIHsKLQkJQWRhcHRlciBhZGFwdGVyID0gV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQobm90aWZpZXIpOwotCi0JCWlmIChhZGFwdGVyIGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyICYmICgoV1NETEJhc2VBZGFwdGVyKSBhZGFwdGVyKS5vd25lciA9PSBudWxsKSB7Ci0JCQkoKFdTRExCYXNlQWRhcHRlcikgYWRhcHRlcikuc2V0T3duZXIodGhpcyk7Ci0JCX0KLQkJCi0JCXJldHVybiBhZGFwdGVyOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRPd25lcihXU0RMQmFzZUFkYXB0ZXIgb3duZXIpIHsKLQkJdGhpcy5vd25lciA9IG93bmVyOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCXJldHVybiB0eXBlID09IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmdldFdTRExBZGFwdGVyRmFjdG9yeSgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0JCVN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbMF07Ci0JCQotCQlyZXR1cm4gYWN0aW9uSURzOwotCX0KLSAgICAKLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBtc2cpCi0JewotCSAgc3VwZXIubm90aWZ5Q2hhbmdlZChtc2cpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0JICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBudWxsKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsgICAgICAgIAotICAgICAgICAvLyBUT0RPLi4uIGV4Y2VwdGlvbiBzaG91bGQgbmV2ZXIgaGFwcGVuIGhlcmUuLiBidXQgdGhleSBkbwotICAgICAgICAvLyBkdW1waW5nIHRoZSBzdGFjayB0byB0aGUgY29uc29sZSB1bnRpbCB3ZSB0cmFjayB0aGVzZSBkb3duCi0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIG5vdGlmeUxpc3RlbmVycyhPYmplY3QgY2hhbmdlZE9iamVjdCwgU3RyaW5nIHByb3BlcnR5KQotCXsKLQkgIExpc3QgY2xvbmVkTGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCSAgY2xvbmVkTGlzdGVuZXJMaXN0LmFkZEFsbChsaXN0ZW5lckxpc3QpOwotCSAgZm9yIChJdGVyYXRvciBpID0gY2xvbmVkTGlzdGVuZXJMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0JICB7Ci0JICAgIElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lciA9IChJQVNET2JqZWN0TGlzdGVuZXIpaS5uZXh0KCk7Ci0JICAgIGxpc3RlbmVyLnByb3BlcnR5Q2hhbmdlZCh0aGlzLCBwcm9wZXJ0eSk7Ci0JICB9ICAgICAgCi0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldE5hbWVDb21tYW5kKFN0cmluZyBuZXdOYW1lKSB7Ci0JCXJldHVybiBuZXcgVzExUmVuYW1lQ29tbWFuZCh0aGlzLCBuZXdOYW1lKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHsKLQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQkJdHJ5CXsKLQkJCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBudWxsOwotCQkJSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJaWYgKHdpbmRvdyAhPSBudWxsKQl7Ci0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJaWYgKHBhZ2UgIT0gbnVsbCkgewotCQkJCQllZGl0b3JQYXJ0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCQlkZWZpbml0aW9uID0gKChXU0RMRWxlbWVudCkgdGFyZ2V0KS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0JCQl9Ci0JCQlpZiAoZWRpdG9yUGFydCA9PSBudWxsKSB7Ci0JCQkJcmV0dXJuIGZhbGxCYWNrQ2hlY2tJc1JlYWRPbmx5KCk7Ci0JCQl9Ci0KLQkJCURlZmluaXRpb24gZWRpdG9yRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoRGVmaW5pdGlvbi5jbGFzcyk7Ci0JCQlpZiAoZGVmaW5pdGlvbiAhPSBudWxsICYmIGRlZmluaXRpb24gPT0gZWRpdG9yRGVmaW5pdGlvbikgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXJldHVybiBmYWxsQmFja0NoZWNrSXNSZWFkT25seSgpOwotCQkJfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0KLQkJfQotCQkKLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBmYWxsQmFja0NoZWNrSXNSZWFkT25seSgpIHsKLQkJRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQllbGVtZW50ID0gKChXU0RMRWxlbWVudCkgdGFyZ2V0KS5nZXRFbGVtZW50KCk7Ci0JCX0KLQkJZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpIHsKLQkJCWVsZW1lbnQgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KSB0YXJnZXQpLmdldEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRE9NTm9kZSB8fCBlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudEltcGwpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0gIAotCXB1YmxpYyBPYmplY3QgZ2V0T3duZXIoKSB7Ci0JCXJldHVybiBvd25lcjsKLQl9Ci0KLQlwdWJsaWMgQ29tbWFuZCBnZXREZWxldGVDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMURlbGV0ZUNvbW1hbmQodGhpcyk7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCkgewotCQlyZXR1cm4gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJbWFnZSBnZXRTZWNvbmRhcnlJbWFnZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMUFkZFBhcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFBZGRQYXJ0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1M2EyNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMUFkZFBhcnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLlBhcmFtZXRlckVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkTWVzc2FnZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLQotcHVibGljIGNsYXNzIFcxMUFkZFBhcnRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRQYXJ0QWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBXMTFBZGRQYXJ0QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9QQVJUKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3BhcnRfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IG51bGw7Ci0JCQlJTWVzc2FnZSBpTWVzc2FnZSA9IG51bGw7Ci0JCQlNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIFcxMU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQltZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgbykuZ2V0VGFyZ2V0KCk7Ci0JCQkJbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQkJVzExUGFyYW1ldGVyRm9yUGFydCBwYXJhbSA9IChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBvOwotCQkJCWlmIChwYXJhbS5nZXRPd25lcigpIGluc3RhbmNlb2YgSU1lc3NhZ2UpIHsKLQkJCQkJaU1lc3NhZ2UgPSAoSU1lc3NhZ2UpIHBhcmFtLmdldE93bmVyKCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHBhcmFtLmdldE93bmVyKCkgaW5zdGFuY2VvZiBXMTFNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJCW1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBwYXJhbS5nZXRPd25lcigpKS5nZXRUYXJnZXQoKTsKLQkJCQkJbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJCQl9Ci0JCQkJCi0JCQkJaWYgKG1lc3NhZ2UgPT0gbnVsbCkgewotCQkJCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFyYW0uZ2V0VGFyZ2V0KCk7Ci0JCQkJCW1lc3NhZ2UgPSAoTWVzc2FnZSkgcGFydC5lQ29udGFpbmVyKCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlKSB7Ci0JCQkJaU1lc3NhZ2UgPSAoSU1lc3NhZ2UpIG87Ci0JCQl9Ci0JCQkKLQkJCWlmIChtZXNzYWdlID09IG51bGwgJiYgaU1lc3NhZ2UgPT0gbnVsbCAmJiBtZXNzYWdlUmVmICE9IG51bGwpIHsKLQkJCQlJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IgZWRpdG9yID0gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pICgoVzExRGVzY3JpcHRpb24pIGVkaXRvci5nZXRNb2RlbCgpKS5nZXRUYXJnZXQoKTsKLQkJCQlTdHJpbmcgbWVzc2FnZU5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGRlZmluaXRpb24sICJOZXdNZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE1lc3NhZ2VDb21tYW5kKGRlZmluaXRpb24sIG1lc3NhZ2VOYW1lLCBmYWxzZSk7Ci0JCQkJY29tbWFuZC5ydW4oKTsKLQkJCQltZXNzYWdlID0gKE1lc3NhZ2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCQltZXNzYWdlUmVmLnNldEVNZXNzYWdlKG1lc3NhZ2UpOwotCQkJfQotCQkJCi0JCQlpZiAobWVzc2FnZSAhPSBudWxsKSB7Ci0JCQkJaU1lc3NhZ2UgPSAoSU1lc3NhZ2UpIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KG1lc3NhZ2UpOwotCQkJfQotCi0JCQlpZiAoaU1lc3NhZ2UgIT0gbnVsbCkgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9IGlNZXNzYWdlLmdldEFkZFBhcnRDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IGVsZW1lbnQgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXNlbGVjdEFuZERpcmVjdEVkaXQoZWxlbWVudCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgZG9EaXJlY3RFZGl0KEVkaXRQYXJ0IGVwKSB7Ci0JCWlmIChlcCBpbnN0YW5jZW9mIFBhcmFtZXRlckVkaXRQYXJ0KSB7Ci0JCQkoKFBhcmFtZXRlckVkaXRQYXJ0KSBlcCkucGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMU9wZW5JbXBvcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFPcGVuSW1wb3J0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OTU2ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMU9wZW5JbXBvcnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXMTFPcGVuSW1wb3J0QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNET3BlbkltcG9ydEFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIFcxMU9wZW5JbXBvcnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fT1BFTl9JTVBPUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDAgJiYgZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApIGluc3RhbmNlb2YgVzExSW1wb3J0KSB7Ci0JCQlJbXBvcnQgdGhlSW1wb3J0ID0gZ2V0V1NETEltcG9ydCgoVzExSW1wb3J0KSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCkpOwotCQkJCi0JCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB0aGVJbXBvcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCQkJb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5PcGVuT25TZWxlY3Rpb25IZWxwZXIgaGVscGVyID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuT3Blbk9uU2VsZWN0aW9uSGVscGVyKGRlZmluaXRpb24pOwotCQkgICAgaGVscGVyLm9wZW5FZGl0b3IoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSB0aGVJbXBvcnQpOwotCQl9Ci0JfQotCQotCSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FsY3VsYXRlRW5hYmxlZCgpIHsKLQkJICBib29sZWFuIGVuYWJsZWQgPSBzdXBlci5jYWxjdWxhdGVFbmFibGVkKCk7Ci0JCSAgaWYgKGVuYWJsZWQpIHsKLQkJCSAgaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDAgJiYgZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApIGluc3RhbmNlb2YgVzExSW1wb3J0KSB7Ci0JCQkJCUltcG9ydCB0aGVJbXBvcnQgPSBnZXRXU0RMSW1wb3J0KChXMTFJbXBvcnQpIGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKSk7Ci0JCQkJCQotCQkJCQlpZiAodGhlSW1wb3J0ICE9IG51bGwpIHsKLQkJCQkJCVN0cmluZyBsb2NhdGlvbiA9IHRoZUltcG9ydC5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQkKLQkJCQkJCWlmIChsb2NhdGlvbiA9PSBudWxsIHx8IGxvY2F0aW9uLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQkJCQkJZW5hYmxlZCA9IGZhbHNlOwotCQkJCQl9Ci0JCQkgIH0KLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIGVuYWJsZWQ7Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgSW1wb3J0IGdldFdTRExJbXBvcnQoVzExSW1wb3J0IHcxMUltcG9ydCkgewotCQkgIHJldHVybiAoSW1wb3J0KSAoKFcxMUltcG9ydCkgdzExSW1wb3J0KS5nZXRUYXJnZXQoKTsKLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY2OGZmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgd3NkbEJhc2VBZGFwdGVyOwotCQotCXB1YmxpYyBXMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fRVhJU1RJTkdfRUxFTUVOVCk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvbWVzc2FnZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQl3c2RsQmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcih3c2RsQmFzZUFkYXB0ZXIpOwotCQlpZiAod3NkbEJhc2VBZGFwdGVyICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZSh3c2RsQmFzZUFkYXB0ZXIuZ2V0VGFyZ2V0KCksIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQl3c2RsQmFzZUFkYXB0ZXIgPSBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNzY1ZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRFNldE1lc3NhZ2VJbnRlcmZhY2VBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIElNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2U7Ci0KLQkKLQlwdWJsaWMgVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0VYSVNUSU5HX01FU1NBR0UpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL21lc3NhZ2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAobWVzc2FnZVJlZmVyZW5jZSA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQkJbWVzc2FnZVJlZmVyZW5jZSA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIobWVzc2FnZVJlZmVyZW5jZSk7Ci0JCWlmIChtZXNzYWdlUmVmZXJlbmNlICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShtZXNzYWdlUmVmZXJlbmNlLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJbWVzc2FnZVJlZmVyZW5jZSA9IG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU4MmI0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0RXhpc3RpbmdUeXBlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgd3NkbEJhc2VBZGFwdGVyOwotCQotCXB1YmxpYyBXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fRVhJU1RJTkdfVFlQRSk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvbWVzc2FnZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQl3c2RsQmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIod3NkbEJhc2VBZGFwdGVyKTsKLQkJaWYgKHdzZGxCYXNlQWRhcHRlciAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2Uod3NkbEJhc2VBZGFwdGVyLmdldFRhcmdldCgpLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJd3NkbEJhc2VBZGFwdGVyID0gbnVsbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld0VsZW1lbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdFbGVtZW50QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ODJkYTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld0VsZW1lbnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXROZXdFbGVtZW50QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0TmV3RWxlbWVudEFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIHdzZGxCYXNlQWRhcHRlcjsKLQkKLQlwdWJsaWMgVzExU2V0TmV3RWxlbWVudEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9ORVdfRUxFTUVOVCk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3NlcnZpY2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQl3c2RsQmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcih3c2RsQmFzZUFkYXB0ZXIpOwotICAgICAgICBpZiAod3NkbEJhc2VBZGFwdGVyICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZSh3c2RsQmFzZUFkYXB0ZXIsIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQl3c2RsQmFzZUFkYXB0ZXIgPSBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3TWVzc2FnZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld01lc3NhZ2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVmOTE0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3TWVzc2FnZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMVNldE5ld01lc3NhZ2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXROZXdNZXNzYWdlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlOwotCQotCXB1YmxpYyBXMTFTZXROZXdNZXNzYWdlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX05FV19NRVNTQUdFKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJTWVzc2FnZVJlZmVyZW5jZShJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCXRoaXMubWVzc2FnZVJlZmVyZW5jZSA9IG1lc3NhZ2VSZWZlcmVuY2U7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsJCQotCQlpZiAobWVzc2FnZVJlZmVyZW5jZSA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQkJbWVzc2FnZVJlZmVyZW5jZSA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIobWVzc2FnZVJlZmVyZW5jZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlUmVmZXJlbmNlICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShtZXNzYWdlUmVmZXJlbmNlLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJbWVzc2FnZVJlZmVyZW5jZSA9IG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdUeXBlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3VHlwZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDBlNmYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdUeXBlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFcxMVNldE5ld1R5cGVBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXROZXdUeXBlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgd3NkbEJhc2VBZGFwdGVyOwotCQotCXB1YmxpYyBXMTFTZXROZXdUeXBlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX05FV19UWVBFKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7CQkKLQkJaWYgKHdzZGxCYXNlQWRhcHRlciA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSVBhcmFtZXRlciAmJiBvIGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQkJCXdzZGxCYXNlQWRhcHRlciA9IChXU0RMQmFzZUFkYXB0ZXIpIG87Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKHdzZGxCYXNlQWRhcHRlcik7Ci0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgIT0gbnVsbCAmJiByZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gcmVmTWFuYWdlci5nZXROZXdEaWFsb2coKTsKLQkJCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQkJCXJlZk1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHdzZGxCYXNlQWRhcHRlciwgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXdzZGxCYXNlQWRhcHRlciA9IG51bGw7Ci0JfQotICAgIAotICAgIHByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0gICAgICAgICAgICAgICAgV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgd3NkbEJhc2VBZGFwdGVyLmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpLCBudWxsLCBkZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVmMjhlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Db250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVNldEludGVyZmFjZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREdlbmVyYXRlQmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXROZXdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uY3VzdG9tLk5vZGVDdXN0b21pemF0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFcxMUJpbmRpbmcgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJQmluZGluZyB7Ci0KLQlwdWJsaWMgSUludGVyZmFjZSBnZXRJbnRlcmZhY2UoKSB7Ci0gICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKChCaW5kaW5nKSB0YXJnZXQpLmdldEVQb3J0VHlwZSgpOwotICAgICAgICBpZiAocG9ydFR5cGUgIT0gbnVsbCkKLSAgICAgICAgeyAgCi0JICAgICAgcmV0dXJuIChJSW50ZXJmYWNlKSBjcmVhdGVBZGFwdGVyKHBvcnRUeXBlKTsKLQkJfQkJCi0JCXJldHVybiBudWxsOwotCX0KLSAgICAKLSAgICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nQ29udGVudExpc3QoKQotICAgIHsKLSAgICAgIExpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgIExpc3QgYmluZGluZ09wZXJhdGlvbnMgPSBjb3B5TGlzdCgoKEJpbmRpbmcpdGFyZ2V0KS5nZXRFQmluZGluZ09wZXJhdGlvbnMoKSk7IAotICAgICAgTGlzdCBvcGVyYXRpb25zID0gY29weUxpc3QoKChCaW5kaW5nKXRhcmdldCkuZ2V0RVBvcnRUeXBlKCkuZ2V0RU9wZXJhdGlvbnMoKSk7Ci0gICAgICAKLSAgICAgIC8vIERldGVybWluZSBpZiB3ZSBuZWVkIHBsYWNlaG9sZGVycyBmb3IgT3BlcmF0aW9ucwotCSAgTGlzdCB0b0FkYXB0TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIAotCSAgSXRlcmF0b3IgYmluZGluZ09wSXQgPSBiaW5kaW5nT3BlcmF0aW9ucy5pdGVyYXRvcigpOwotCSAgd2hpbGUgKGJpbmRpbmdPcEl0Lmhhc05leHQoKSkgewotCQkgIEJpbmRpbmdPcGVyYXRpb24gaXRlbSA9IChCaW5kaW5nT3BlcmF0aW9uKSBiaW5kaW5nT3BJdC5uZXh0KCk7Ci0JCSAgb3BlcmF0aW9ucy5yZW1vdmUoaXRlbS5nZXRFT3BlcmF0aW9uKCkpOwotCSAgfQotCSAgCi0gICAgICBJdGVyYXRvciBvcGVyYXRpb25zSXQgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAob3BlcmF0aW9uc0l0Lmhhc05leHQoKSkgewotICAgIAkgIE9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wZXJhdGlvbnNJdC5uZXh0KCk7Ci0gICAgCSAgdG9BZGFwdExpc3QuYWRkKG9wKTsKLSAgICAJICB0b0FkYXB0TGlzdC5hZGQob3AuZ2V0RUlucHV0KCkpOwotICAgIAkgIHRvQWRhcHRMaXN0LmFkZChvcC5nZXRFT3V0cHV0KCkpOwotICAgIAkgIHRvQWRhcHRMaXN0LmFkZEFsbChvcC5nZXRFRmF1bHRzKCkpOwotICAgICAgfQotCi0gICAgICBJdGVyYXRvciBpdCA9IHRvQWRhcHRMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7IAotICAgICAgICAgIGlmIChvICE9IG51bGwpCi0gICAgICAgICAgeyAgCi0gICAgCSAgICBPYmplY3QgYWRhcHRlZCA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KChOb3RpZmllcilvKTsKLSAgICAJICAgIEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgcGxhY2VIb2xkZXIgPSBuZXcgQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlcihhZGFwdGVkKTsKLSAgICAJICAgIGFkYXB0ZXJMaXN0LmFkZChwbGFjZUhvbGRlcik7Ci0gICAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9ICgoQmluZGluZyl0YXJnZXQpLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWkubmV4dCgpOwotICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEhhbmRsZSBJbnB1dAotICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSA9PSBudWxsICYmIG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0gICAgICAgIAkvLyBOZWVkIGEgcGxhY2Vob2xkZXIKLSAgICAgICAgCU9iamVjdCBhZGFwdGVkT2JqZWN0ID0gY3JlYXRlQWRhcHRlcihvcGVyYXRpb24uZ2V0RUlucHV0KCkpOwotICAgICAgICAJQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlciB0ZW1wID0gbmV3IEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIoYWRhcHRlZE9iamVjdCk7Ci0gICAgICAgIAlhZGFwdGVyTGlzdC5hZGQodGVtcCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEhhbmRsZSBPdXRwdXQKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgPT0gbnVsbCAmJiBvcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpIHsKLSAgICAgICAgCS8vIE5lZWQgYSBwbGFjZWhvbGRlcgotICAgICAgICAJT2JqZWN0IGFkYXB0ZWRPYmplY3QgPSBjcmVhdGVBZGFwdGVyKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkpOwotICAgICAgICAJQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlciB0ZW1wID0gbmV3IEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIoYWRhcHRlZE9iamVjdCk7Ci0gICAgICAgIAlhZGFwdGVyTGlzdC5hZGQodGVtcCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBIYW5kbGUgRmF1bHRzCi0gICAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgIExpc3QgZmF1bHRzID0gY29weUxpc3Qob3BlcmF0aW9uLmdldEVGYXVsdHMoKSk7Ci0gICAgICAgIExpc3QgYmluZGluZ0ZhdWx0cyA9IGNvcHlMaXN0KGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKSk7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBiaW5kaW5nRmF1bHRzLnNpemUoKTsgaW5kZXgrKykgewotICAgICAgICAJQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpIGJpbmRpbmdGYXVsdHMuZ2V0KGluZGV4KTsKLSAgICAgICAgCWxpc3QuYWRkKGJpbmRpbmdGYXVsdCk7Ci0gICAgICAgIAkKLSAgICAgICAgCWZhdWx0cy5yZW1vdmUoYmluZGluZ0ZhdWx0LmdldEVGYXVsdCgpKTsgICAgICAgIAkKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gTGVmdCBvdmVyIGZhdWx0cyBuZWVkIHBsYWNlaG9sZGVycwotICAgICAgICBJdGVyYXRvciByZW1hbmluZ0ZhdWx0cyA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAocmVtYW5pbmdGYXVsdHMuaGFzTmV4dCgpKSB7Ci0gICAgICAgIAlPYmplY3QgYWRhcHRlZE9iamVjdCA9IGNyZWF0ZUFkYXB0ZXIoKEZhdWx0KSByZW1hbmluZ0ZhdWx0cy5uZXh0KCkpOwotICAgICAgICAJQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlciB0ZW1wID0gbmV3IEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIoYWRhcHRlZE9iamVjdCk7Ci0gICAgICAgIAlhZGFwdGVyTGlzdC5hZGQodGVtcCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcG9wdWxhdGVBZGFwdGVyTGlzdChsaXN0LCBhZGFwdGVyTGlzdCk7Ci0gICAgICByZXR1cm4gYWRhcHRlckxpc3Q7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgTGlzdCBjb3B5TGlzdChMaXN0IG9yaWdMaXN0KSB7Ci0gICAgCUxpc3QgbmV3TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAJSXRlcmF0b3IgaXQgPSBvcmlnTGlzdC5pdGVyYXRvcigpOwotICAgIAl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgCQluZXdMaXN0LmFkZChpdC5uZXh0KCkpOwotICAgIAl9Ci0gICAgCQotICAgIAlyZXR1cm4gbmV3TGlzdDsKLSAgICB9Ci0KLQlwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmxpdHlPYmplY3RzKCkgewotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuICgoQmluZGluZykgdGFyZ2V0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkgewotCQlJdGVyYXRvciBpdCA9ICgoQmluZGluZykgdGFyZ2V0KS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCQkKLQkJCWlmIChpdGVtIGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCQlXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCkgaXRlbTsKLQkJCQlTdHJpbmcgbmFtZXNwYWNlID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQkJCQotCQkJCWlmIChuYW1lc3BhY2UgIT0gbnVsbCkgewotCQkJCQlDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGZhY3RvcnlSZWdpc3RyeSA9IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJCQkJQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yID0gZmFjdG9yeVJlZ2lzdHJ5LmdldEdlbmVyYXRvckNsYXNzRnJvbU5hbWVzcGFjZShuYW1lc3BhY2UpOwotCQkJCQlpZiAoY29udGVudEdlbmVyYXRvciAhPSBudWxsKSB7Ci0JCQkJCQlyZXR1cm4gY29udGVudEdlbmVyYXRvci5nZXRQcm90b2NvbCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLSAgICBMaXN0IGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTREdlbmVyYXRlQmluZGluZ0FjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQgKyBNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9QT1JUVFlQRSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhY3Rpb25JRHMuYWRkKEFTRFNldE5ld0ludGVyZmFjZUFjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZyBbXSlhY3Rpb25JRHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0SW50ZXJmYWNlQ29tbWFuZChJSW50ZXJmYWNlIG5ld0ludGVyZmFjZSkgewotCQlXMTFJbnRlcmZhY2UgdzExSW50ZXJmYWNlID0gKFcxMUludGVyZmFjZSkgbmV3SW50ZXJmYWNlOwotCQlyZXR1cm4gbmV3IFcxMVNldEludGVyZmFjZUNvbW1hbmQoKEJpbmRpbmcpIHRhcmdldCwgKFBvcnRUeXBlKSB3MTFJbnRlcmZhY2UuZ2V0VGFyZ2V0KCkpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRHZW5lcmF0ZUJpbmRpbmdDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUdlbmVyYXRlQmluZGluZ0NvbW1hbmQoKEJpbmRpbmcpIHRoaXMuZ2V0VGFyZ2V0KCkpOwotCX0KLSAgICAKLSAgICBwcml2YXRlIElMYWJlbFByb3ZpZGVyIGdldExhYmVsUHJvdmlkZXIoTm9kZSBub2RlKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBub2RlLmdldE5hbWVzcGFjZVVSSSgpOyAgICAgIAotICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgeyAgCi0gICAgICAgIE5vZGVDdXN0b21pemF0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBYU0RFZGl0b3JQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldE5vZGVDdXN0b21pemF0aW9uUmVnaXN0cnkoKTsgICAgICAKLSAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmdldExhYmVsUHJvdmlkZXIobmFtZXNwYWNlKTsKLSAgICAgIH0gICAgICAgIAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKQotICB7Ci0gICAgSW1hZ2UgaW1hZ2UgPSBudWxsOwotICAgIExpc3QgbGlzdCA9ICgoQmluZGluZykgdGFyZ2V0KS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAobGlzdC5zaXplKCkgPiAwKQotICAgIHsgIAotICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWxpc3QuZ2V0KDApOwotICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGVlLmdldEVsZW1lbnQoKTsKLSAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgIHsgIAotICAgICAgICAgSUxhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlciA9IGdldExhYmVsUHJvdmlkZXIoZWxlbWVudCk7Ci0gICAgICAgICBpZiAobGFiZWxQcm92aWRlciAhPSBudWxsKQotICAgICAgICAgewotICAgICAgICAgICBpbWFnZT0gbGFiZWxQcm92aWRlci5nZXRJbWFnZShlbGVtZW50KTsKLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgfSAgICAgICAgCi0gICAgaWYgKGltYWdlID09IG51bGwpCi0gICAgewotICAgICAgaW1hZ2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2JpbmRpbmdfb2JqLmdpZiIpOyAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgfSAgCi0gICAgcmV0dXJuIGltYWdlOwotICAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpCi0gIHsKLSAgICByZXR1cm4gImJpbmRpbmciOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBnZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgIElUcmVlRWxlbWVudFtdIHJlc3VsdCA9IG5ldyBJVHJlZUVsZW1lbnRbbGlzdC5zaXplKCldOwotICAgIGxpc3QudG9BcnJheShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCSAgaWYgKGdldEJpbmRpbmdPcGVyYXRpb25zKCkuc2l6ZSgpID4gMCkgewotCQkgIHJldHVybiB0cnVlOwotCSAgfQotCSAgCi0JICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCSAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdPcGVyYXRpb25zKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KCgoQmluZGluZyl0YXJnZXQpLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpLCBsaXN0KTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ09wZXJhdGlvbnMoYm9vbGVhbiBjcmVhdGVNaXNzaW5nT3BlcmF0aW9ucywgYm9vbGVhbiBzaG93RXh0cmFPcGVyYXRpb25zKQotICB7Ci0gICAgcmV0dXJuIGdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBlODZmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci0KLQotcHVibGljIGNsYXNzIFcxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLCBJVHJlZUVsZW1lbnQKLXsKLSAgcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkKLSAgewotICAgIHJldHVybiBJVHJlZUVsZW1lbnQuRU1QVFlfTElTVDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCSAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKQotICB7ICAgCi0gICAgU3RyaW5nIGltYWdlTmFtZSA9IG51bGw7Ci0gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICB7Ci0gICAgICBpbWFnZU5hbWUgPSAiaWNvbnMvaW5wdXRfb2JqLmdpZiI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICB7Ci0gICAgICBpbWFnZU5hbWUgPSAiaWNvbnMvb3V0cHV0X29iai5naWYiOyAgICAgICAvLyROT04tTkxTLTEkCi0gICAgfSAKLSAgICBlbHNlIC8vaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICB7Ci0gICAgICBpbWFnZU5hbWUgPSAiaWNvbnMvZmF1bHRfb2JqLmdpZiI7IC8vJE5PTi1OTFMtMSQKLSAgICB9ICAKLSAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKGltYWdlTmFtZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLQkgIFN0cmluZyBuYW1lID0gbnVsbDsKLQkgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0JICB7Ci0JCSAgbmFtZSA9ICgoQmluZGluZ0lucHV0KSB0YXJnZXQpLmdldE5hbWUoKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0JICB7Ci0JCSAgbmFtZSA9ICgoQmluZGluZ091dHB1dCkgdGFyZ2V0KS5nZXROYW1lKCk7Ci0JICB9IAotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotCSAgewotCQkgIG5hbWUgPSAoKEJpbmRpbmdGYXVsdCkgdGFyZ2V0KS5nZXROYW1lKCk7Ci0JICB9Ci0JICAKLQkgIGlmIChuYW1lID09IG51bGwpIHsKLQkJICBuYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQotCSAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKQotICB7Ci0JICBTdHJpbmcgdGV4dCA9ICIiOyAvLyROT04tTkxTLTEkCi0JICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotCSAgewotCQkgIHRleHQgPSAiYmluZGluZyBpbnB1dCI7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0JICB7Ci0JCSAgdGV4dCA9ICJiaW5kaW5nIG91dHB1dCI7IC8vJE5PTi1OTFMtMSQKLQkgIH0gCi0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0JICB7Ci0JCSAgdGV4dCA9ICJiaW5kaW5nIGZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgCi0JICByZXR1cm4gdGV4dDsKLSAgfQotCi0gIHB1YmxpYyBJTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkKLSAgewotICAgIEVPYmplY3QgcmVzdWx0Tm90aWZpZXIgPSBudWxsOwotICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgcmVzdWx0Tm90aWZpZXIgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVJbnB1dCgoQmluZGluZ0lucHV0KXRhcmdldCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgcmVzdWx0Tm90aWZpZXIgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVPdXRwdXQoKEJpbmRpbmdPdXRwdXQpdGFyZ2V0KTsKLSAgICB9ICAgICAgICAgIAotICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLSAgICB7Ci0gICAgICByZXN1bHROb3RpZmllciA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZUZhdWx0KChCaW5kaW5nRmF1bHQpdGFyZ2V0KTsKLSAgICB9ICAgICAgICAgICAgICAgCi0gICAgcmV0dXJuIHJlc3VsdE5vdGlmaWVyICE9IG51bGwgPyAoSU1lc3NhZ2VSZWZlcmVuY2UpY3JlYXRlQWRhcHRlcihyZXN1bHROb3RpZmllcikgOiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmxpdHlPYmplY3RzKCkKLSAgewotICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7ICAgIAotICAgIENvbGxlY3Rpb24gYWN0aW9uSURzID0gbmV3IEFycmF5TGlzdCgpOwotLy8gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotLy8gICAgICBhY3Rpb25JRHMuYWRkKE9wZW5Jbk5ld0VkaXRvci5JRCk7Ci0vLyAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZ09wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjOGRlNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBXMTFCaW5kaW5nT3BlcmF0aW9uIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUJpbmRpbmdPcGVyYXRpb24sIElUcmVlRWxlbWVudAotewotICAKLSAgcHVibGljIElPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKXRhcmdldDsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5jb21wdXRlT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOyAgICAKLSAgICByZXR1cm4gb3BlcmF0aW9uICE9IG51bGwgPyAoSU9wZXJhdGlvbiljcmVhdGVBZGFwdGVyKG9wZXJhdGlvbikgOiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nTWVzc2FnZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKXRhcmdldDsKLSAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpKTsKLSAgICB9Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgIHsgIAotICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpKTsKLSAgICB9ICAgICAKLSAgICBsaXN0LmFkZEFsbChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkpOwotICAgIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHBvcHVsYXRlQWRhcHRlckxpc3QobGlzdCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pdGFyZ2V0OwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKTsKLSAgICByZXR1cm4gb3BlcmF0aW9uICE9IG51bGwgPyBvcGVyYXRpb24uZ2V0TmFtZSgpIDogbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEV4dGVuc2libGl0eU9iamVjdHMoKQotICB7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gIH0KLQotICBwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gZ2V0QmluZGluZ01lc3NhZ2VzKCk7Ci0gICAgSVRyZWVFbGVtZW50W10gcmVzdWx0ID0gbmV3IElUcmVlRWxlbWVudFtsaXN0LnNpemUoKV07Ci0gICAgbGlzdC50b0FycmF5KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JICBpZiAoZ2V0QmluZGluZ01lc3NhZ2VzKCkuc2l6ZSgpID4gMCkgewotCQkgIHJldHVybiB0cnVlOwotCSAgfQotCSAgCi0JICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCSAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKQotICB7Ci0gICAgU3RyaW5nIGltYWdlTmFtZSA9ICJpY29ucy9vcGVyYXRpb25iaW5kaW5nX29iai5naWYiOyAvLyROT04tTkxTLTEkCi0gICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZShpbWFnZU5hbWUpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkKLSAgewotICAgIHJldHVybiAiYmluZGluZyBvcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsgICAgCi0gICAgQ29sbGVjdGlvbiBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZyBbXSlhY3Rpb25JRHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFDYXRlZ29yeUFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQ2F0ZWdvcnlBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMTMzN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFDYXRlZ29yeUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEltcG9ydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkTWVzc2FnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRTY2hlbWFBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkU2VydmljZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMUNhdGVnb3J5QWRhcHRlciBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElDYXRlZ29yeUFkYXB0ZXIsIElUcmVlRWxlbWVudCwgSUFTRE9iamVjdExpc3RlbmVyIHsKLQkgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IElNUE9SVFMgPSAxOwotCSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgVFlQRVMgPSAyOwotCSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU0VSVklDRVMgPSAzOwotCSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgQklORElOR1MgPSA1OwotCSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgSU5URVJGQUNFUyA9IDY7Ci0JICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBNRVNTQUdFUyA9IDc7Ci0JICAKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIElNUE9SVFNfSEVBREVSX1RFWFQgPSBNZXNzYWdlcy5fVUlfRk9MREVSX0lNUE9SVFM7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFRZUEVTX0hFQURFUl9URVhUID0gTWVzc2FnZXMuX1VJX0ZPTERFUl9UWVBFUzsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgU0VSVklDRV9IRUFERVJfVEVYVCA9IE1lc3NhZ2VzLl9VSV9GT0xERVJfU0VSVklDRVM7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEJJTkRJTkdfSEVBREVSX1RFWFQgPSBNZXNzYWdlcy5fVUlfRk9MREVSX0JJTkRJTkdTOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBJTlRFUkZBQ0VfSEVBREVSX1RFWFQgPSBNZXNzYWdlcy5fVUlfUE9SVF9UWVBFOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBNRVNTQUdFX0hFQURFUl9URVhUID0gTWVzc2FnZXMuX1VJX0ZPTERFUl9NRVNTQUdFUzsgLy8kTk9OLU5MUy0xJAotCi0JICBwcm90ZWN0ZWQgU3RyaW5nIHRleHQ7Ci0JICBwcm90ZWN0ZWQgSW1hZ2UgaW1hZ2U7Ci0JICBwcm90ZWN0ZWQgaW50IGdyb3VwVHlwZTsKLQkgIHByb3RlY3RlZCBDb2xsZWN0aW9uIGNoaWxkcmVuOwotCSAgcHJvdGVjdGVkIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKLQkgIAotCSAgcHVibGljIFcxMUNhdGVnb3J5QWRhcHRlcihJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24sIFN0cmluZyBsYWJlbCwgSW1hZ2UgaW1hZ2UsIENvbGxlY3Rpb24gY2hpbGRyZW4sIGludCBncm91cFR5cGUpIHsKLQkgICAgdGhpcy50ZXh0ID0gbGFiZWw7Ci0JICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTsKLQkgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCSAgICB0aGlzLnRhcmdldCA9ICgoVzExRGVzY3JpcHRpb24pIGRlc2NyaXB0aW9uKS5nZXRUYXJnZXQoKTsKLQkgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuOwotCSAgICB0aGlzLmdyb3VwVHlwZSA9IGdyb3VwVHlwZTsKLQkgIH0KLQkgIAotCSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpIHsKLQkgICAgcmV0dXJuIChEZWZpbml0aW9uKSB0YXJnZXQ7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpIHsKLQkJICByZXR1cm4gZGVzY3JpcHRpb247Ci0JICB9Ci0KLQkgIHB1YmxpYyBpbnQgZ2V0R3JvdXBUeXBlKCkgewotCSAgICByZXR1cm4gZ3JvdXBUeXBlOwotCSAgfQotCi0JICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JICAgIHJldHVybiBpbWFnZTsKLQkgIH0KLQotCSAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCSAgICByZXR1cm4gdGV4dDsKLQkgIH0KLQotCSAgcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCSAgICByZXR1cm4gKElUcmVlRWxlbWVudFtdKSBjaGlsZHJlbi50b0FycmF5KG5ldyBJVHJlZUVsZW1lbnRbMF0pOwotCSAgfQotCi0JICBwdWJsaWMgdm9pZCBzZXRDaGlsZHJlbihDb2xsZWN0aW9uIGxpc3QpIHsKLQkgICAgY2hpbGRyZW4gPSBsaXN0OwotCSAgfQotCi0JICBwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3QgZWxlbWVudCkgewotCSAgICByZXR1cm4gbnVsbDsKLQkgIH0KLQotCSAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IGVsZW1lbnQpIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsgICAgCi0JICAgIENvbGxlY3Rpb24gYWN0aW9uSURzID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICAKLQkgICAgc3dpdGNoIChncm91cFR5cGUpIHsKLQkgICAgICBjYXNlIElNUE9SVFMgOiB7Ci0JICAgICAgICBhY3Rpb25JRHMuYWRkKEFTREFkZEltcG9ydEFjdGlvbi5JRCk7Ci0JICAgICAgICBicmVhazsKLQkgICAgICB9Ci0JICAgICAgY2FzZSBUWVBFUyA6IHsKLQkgICAgICAgIGFjdGlvbklEcy5hZGQoQVNEQWRkU2NoZW1hQWN0aW9uLklEKTsKLQkgICAgICAgIGJyZWFrOwotCSAgICAgIH0KLQkgICAgICBjYXNlIFNFUlZJQ0VTIDogewotCSAgICAgICAgYWN0aW9uSURzLmFkZChBU0RBZGRTZXJ2aWNlQWN0aW9uLklEKTsKLQkgICAgICAgIGJyZWFrOwotCSAgICAgIH0KLQkgICAgICBjYXNlIEJJTkRJTkdTIDogewotCSAgICAgICAgYWN0aW9uSURzLmFkZChBU0RBZGRCaW5kaW5nQWN0aW9uLklEKTsKLQkgICAgICAgIGJyZWFrOwotCSAgICAgIH0KLQkgICAgICBjYXNlIElOVEVSRkFDRVMgOiB7Ci0JICAgICAgICBhY3Rpb25JRHMuYWRkKEFTREFkZEludGVyZmFjZUFjdGlvbi5JRCk7Ci0JICAgICAgICBicmVhazsKLQkgICAgICB9Ci0JICAgICAgY2FzZSBNRVNTQUdFUyA6IHsKLQkgICAgCWFjdGlvbklEcy5hZGQoQVNEQWRkTWVzc2FnZUFjdGlvbi5JRCk7Ci0JICAgICAgICBicmVhazsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChPYmplY3Qgb2JqZWN0LCBTdHJpbmcgcHJvcGVydHkpIHsKLQkgICAgaWYgKGdldFRleHQoKS5lcXVhbHMocHJvcGVydHkpKQotCSAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBwcm9wZXJ0eSk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQkgIHJldHVybiBudWxsOwotCSAgfQotCSAgCi0JICBwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJICBpZiAoZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPiAwKSB7Ci0JCQkgIHJldHVybiB0cnVlOwotCQkgIH0KLQkJICAKLQkJICByZXR1cm4gZmFsc2U7Ci0JICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFEZXNjcmlwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFEZXNjcmlwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjZjOWE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExRGVzY3JpcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLk5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkQmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkSW1wb3J0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRJbnRlcmZhY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZE1lc3NhZ2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZFNjaGVtYUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkU2VydmljZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEJpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZFNlcnZpY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5ET01OYW1lc3BhY2VJbmZvTWFuYWdlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVzExRGVzY3JpcHRpb24gZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJRGVzY3JpcHRpb24gewotCXByb3RlY3RlZCBMaXN0IGNhdGVnb3JpZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCi0JcHJvdGVjdGVkIFcxMUNhdGVnb3J5QWRhcHRlciBnZXRDYXRlZ29yeShpbnQgY2F0ZWdvcnlJZCkgewotCQlyZXR1cm4gZ2V0Q2F0ZWdvcnkoY2F0ZWdvcnlJZCwgZ2V0Q2F0ZWdvcnlBZGFwdGVycygpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFcxMUNhdGVnb3J5QWRhcHRlciBnZXRDYXRlZ29yeShpbnQgY2F0ZWdvcnlJZCwgTGlzdCBsaXN0KSB7Ci0JCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlXMTFDYXRlZ29yeUFkYXB0ZXIgYWRhcHRlciA9IChXMTFDYXRlZ29yeUFkYXB0ZXIpIGl0Lm5leHQoKTsKLQkJCWlmIChhZGFwdGVyLmdldEdyb3VwVHlwZSgpID09IGNhdGVnb3J5SWQpIHsKLQkJCQlyZXR1cm4gYWRhcHRlcjsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXByb3RlY3RlZCBMaXN0IGdldENhdGVnb3J5QWRhcHRlcnMoKSB7Ci0JICAgIC8vIGp1c3Qgc2V0IGNhdGVnb3J5YWRhcHRlcnMnIGNoaWxkcmVuIGlmIGNhdGVnb3J5IGFkYXB0ZXJzIGFyZQotCSAgICAvLyBhbHJlYWR5IGNyZWF0ZWQKLQkgICAgaWYgKGNhdGVnb3JpZXMuc2l6ZSgpID09IDApIHsKLQkgICAgCWNhdGVnb3JpZXMgPSBjcmVhdGVDYXRlZ29yeUFkYXB0ZXJzKCk7Ci0JICAgIH0KLQkgICAgZWxzZSB7Ci0JICAgIAlXMTFDYXRlZ29yeUFkYXB0ZXIgY2F0ZWdvcnkgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuSU1QT1JUUywgY2F0ZWdvcmllcyk7Ci0JICAgIAljYXRlZ29yeS5zZXRDaGlsZHJlbihnZXRJbXBvcnRzKCkpOwotCSAgICAJCi0JICAgIAljYXRlZ29yeSA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5UWVBFUywgY2F0ZWdvcmllcyk7Ci0JICAgIAlhZGRMaXN0ZW5lclRvVHlwZXMoY2F0ZWdvcnkpOwotCi0JICAgIAljYXRlZ29yeSA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5TRVJWSUNFUywgY2F0ZWdvcmllcyk7Ci0JICAgIAljYXRlZ29yeS5zZXRDaGlsZHJlbihnZXRTZXJ2aWNlcygpKTsKLQotCSAgICAJY2F0ZWdvcnkgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuQklORElOR1MsIGNhdGVnb3JpZXMpOwotCSAgICAJY2F0ZWdvcnkuc2V0Q2hpbGRyZW4oZ2V0QmluZGluZ3MoKSk7Ci0KLQkgICAgCWNhdGVnb3J5ID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLklOVEVSRkFDRVMsIGNhdGVnb3JpZXMpOwotCSAgICAJY2F0ZWdvcnkuc2V0Q2hpbGRyZW4oZ2V0SW50ZXJmYWNlcygpKTsKLQotCSAgICAJY2F0ZWdvcnkgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuTUVTU0FHRVMsIGNhdGVnb3JpZXMpOwotCSAgICAJY2F0ZWdvcnkuc2V0Q2hpbGRyZW4oZ2V0TWVzc2FnZXMoKSk7Ci0JICAgIH0KLSAgICAJcmV0dXJuIGNhdGVnb3JpZXM7Ci0JfQotCQotCS8vIFRPRE86IHJtYWg6IHJpZ2h0IG5vdyBpdCBsb29rcyBsaWtlIHRoZSBkZWZpbml0aW9uIG5lZWRzIHRvIGtub3cgdG9vIG11Y2ggYWJvdXQgdGhlIGNhdGVnb3JpZXMKLQkvLyBXZSBzaG91bGQgbWFrZSB0aGUgY2F0ZWdvcmllcyBtb3JlIHNlbGYtc3VmZmljaWVudC4uLi4gc28gaXQga25vd3MgaG93IHRvIGNvbXB1dGUgaXQncyBjaGlsZHJlbgotCS8vIGJhc2VkIG9uIGl0J3Mga2luZAotCXByb3RlY3RlZCBMaXN0IGNyZWF0ZUNhdGVnb3J5QWRhcHRlcnMoKSB7Ci0JCUxpc3QgY2F0ZWdvcmllcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCUxpc3QgaW1wb3J0TGlzdCA9IGdldEltcG9ydHMoKTsKLS8vCQlMaXN0IHNjaGVtYUxpc3QgPSBnZXRUeXBlcygpOwotCQlMaXN0IHNlcnZpY2VMaXN0ID0gZ2V0U2VydmljZXMoKTsKLQkJTGlzdCBiaW5kaW5nTGlzdCA9IGdldEJpbmRpbmdzKCk7Ci0JCUxpc3QgaW50ZXJmYWNlTGlzdCA9IGdldEludGVyZmFjZXMoKTsKLQkJTGlzdCBtZXNzYWdlTGlzdCA9IGdldE1lc3NhZ2VzKCk7Ci0KLQkJU3RyaW5nIGNhdGVnb3J5VGl0bGUgPSBXMTFDYXRlZ29yeUFkYXB0ZXIuSU1QT1JUU19IRUFERVJfVEVYVDsKLQkJSW1hZ2UgY2F0ZWdvcnlJbWFnZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvaW1wb3J0aGVhZGVyX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCQlXMTFDYXRlZ29yeUFkYXB0ZXIgY2F0ZWdvcnkgPSBuZXcgVzExQ2F0ZWdvcnlBZGFwdGVyKHRoaXMsIGNhdGVnb3J5VGl0bGUsIGNhdGVnb3J5SW1hZ2UsIGltcG9ydExpc3QsIFcxMUNhdGVnb3J5QWRhcHRlci5JTVBPUlRTKTsKLQkJcmVnaXN0ZXJMaXN0ZW5lcihjYXRlZ29yeSk7Ci0JCWNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTsKLQkJCi0JCWNhdGVnb3J5VGl0bGUgPSBXMTFDYXRlZ29yeUFkYXB0ZXIuVFlQRVNfSEVBREVSX1RFWFQ7Ci0JCWNhdGVnb3J5SW1hZ2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3R5cGVzX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCQljYXRlZ29yeSA9IG5ldyBXMTFUeXBlc0NhdGVnb3J5QWRhcHRlcih0aGlzLCBjYXRlZ29yeVRpdGxlLCBjYXRlZ29yeUltYWdlLCBXMTFDYXRlZ29yeUFkYXB0ZXIuVFlQRVMpOwotCQlhZGRMaXN0ZW5lclRvVHlwZXMoY2F0ZWdvcnkpOwotCQlyZWdpc3Rlckxpc3RlbmVyKGNhdGVnb3J5KTsKLQkJY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpOwotCQkKLQkJY2F0ZWdvcnlUaXRsZSA9IFcxMUNhdGVnb3J5QWRhcHRlci5TRVJWSUNFX0hFQURFUl9URVhUOwotCQljYXRlZ29yeUltYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9zZXJ2aWNlaGVhZGVyX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCQljYXRlZ29yeSA9IG5ldyBXMTFDYXRlZ29yeUFkYXB0ZXIodGhpcywgY2F0ZWdvcnlUaXRsZSwgY2F0ZWdvcnlJbWFnZSwgc2VydmljZUxpc3QsIFcxMUNhdGVnb3J5QWRhcHRlci5TRVJWSUNFUyk7Ci0JCXJlZ2lzdGVyTGlzdGVuZXIoY2F0ZWdvcnkpOwotCQljYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7Ci0JCQotCQljYXRlZ29yeVRpdGxlID0gVzExQ2F0ZWdvcnlBZGFwdGVyLkJJTkRJTkdfSEVBREVSX1RFWFQ7Ci0JCWNhdGVnb3J5SW1hZ2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2JpbmRpbmdoZWFkZXJfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JCWNhdGVnb3J5ID0gbmV3IFcxMUNhdGVnb3J5QWRhcHRlcih0aGlzLCBjYXRlZ29yeVRpdGxlLCBjYXRlZ29yeUltYWdlLCBiaW5kaW5nTGlzdCwgVzExQ2F0ZWdvcnlBZGFwdGVyLkJJTkRJTkdTKTsKLQkJcmVnaXN0ZXJMaXN0ZW5lcihjYXRlZ29yeSk7Ci0JCWNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTsKLQkJCi0JCWNhdGVnb3J5VGl0bGUgPSBXMTFDYXRlZ29yeUFkYXB0ZXIuSU5URVJGQUNFX0hFQURFUl9URVhUOwotCQljYXRlZ29yeUltYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wb3J0dHlwZWhlYWRlcl9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkJY2F0ZWdvcnkgPSBuZXcgVzExQ2F0ZWdvcnlBZGFwdGVyKHRoaXMsIGNhdGVnb3J5VGl0bGUsIGNhdGVnb3J5SW1hZ2UsIGludGVyZmFjZUxpc3QsIFcxMUNhdGVnb3J5QWRhcHRlci5JTlRFUkZBQ0VTKTsKLQkJcmVnaXN0ZXJMaXN0ZW5lcihjYXRlZ29yeSk7Ci0JCWNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTsKLQkJCi0JCWNhdGVnb3J5VGl0bGUgPSBXMTFDYXRlZ29yeUFkYXB0ZXIuTUVTU0FHRV9IRUFERVJfVEVYVDsKLQkJY2F0ZWdvcnlJbWFnZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvbWVzc2FnZWhlYWRlcl9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkJY2F0ZWdvcnkgPSBuZXcgVzExQ2F0ZWdvcnlBZGFwdGVyKHRoaXMsIGNhdGVnb3J5VGl0bGUsIGNhdGVnb3J5SW1hZ2UsIG1lc3NhZ2VMaXN0LCBXMTFDYXRlZ29yeUFkYXB0ZXIuTUVTU0FHRVMpOwotCQlyZWdpc3Rlckxpc3RlbmVyKGNhdGVnb3J5KTsKLQkJY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpOwotCQkKLQkJcmV0dXJuIGNhdGVnb3JpZXM7Ci0JICB9Ci0JCi0JLy8gU3BlY2lhbCBjYXNlOgotCS8vIFdlIG5lZWQgdG8gaGF2ZSB0aGUgVHlwZXMgb2JqZWN0IGluZm9ybSBvdXIgZmFjYWRlIChXMTFUeXBlc0NhdGVnb3J5QWRhcHRlcikgb2YgaXQncwotCS8vIGNoYW5nZXMuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSByZXN0IG9mIHRoZSBXMTFDYXRlZ29yeUFkYXB0ZXJzIHdoaWNoIGxpc3RlbnMKLQkvLyB0byB0aGUgRGVmaW5pdGlvbiBvYmplY3QuCi0JcHJpdmF0ZSB2b2lkIGFkZExpc3RlbmVyVG9UeXBlcyhXMTFDYXRlZ29yeUFkYXB0ZXIgY2F0ZWdvcnkpIHsKLQkJRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgdGhpcy5nZXRUYXJnZXQoKTsKLQkJVHlwZXMgdHlwZXMgPSBkZWYuZ2V0RVR5cGVzKCk7Ci0JCWlmICh0eXBlcyAhPSBudWxsICYmICF0eXBlcy5lQWRhcHRlcnMoKS5jb250YWlucyhjYXRlZ29yeSkpIHsKLQkJCXR5cGVzLmVBZGFwdGVycygpLmFkZChjYXRlZ29yeSk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgewotCQlyZXR1cm4gKChEZWZpbml0aW9uKSB0YXJnZXQpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZVByZWZpeCgpIHsKLQkJU3RyaW5nIHRucyA9IGdldFRhcmdldE5hbWVzcGFjZSgpOwotCQlyZXR1cm4gKChEZWZpbml0aW9uKSB0YXJnZXQpLmdldFByZWZpeCh0bnMpOwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRTZXJ2aWNlcygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoKERlZmluaXRpb24pIGdldFRhcmdldCgpKTsKLQkJTGlzdCBzZXJ2aWNlcyA9IHV0aWwuZ2V0U2VydmljZXMoKTsKLQkJcG9wdWxhdGVBZGFwdGVyTGlzdChzZXJ2aWNlcywgYWRhcHRlckxpc3QpOwotCQkKLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQotCXB1YmxpYyBMaXN0IGdldEJpbmRpbmdzKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbCgoRGVmaW5pdGlvbikgZ2V0VGFyZ2V0KCkpOwotCQlMaXN0IGJpbmRpbmdzID0gdXRpbC5nZXRCaW5kaW5ncygpOwotCQlwb3B1bGF0ZUFkYXB0ZXJMaXN0KGJpbmRpbmdzLCBhZGFwdGVyTGlzdCk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQotCXB1YmxpYyBMaXN0IGdldEludGVyZmFjZXMoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwgdXRpbCA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKChEZWZpbml0aW9uKSBnZXRUYXJnZXQoKSk7Ci0JCUxpc3QgcG9ydFR5cGVzID0gdXRpbC5nZXRQb3J0VHlwZXMoKTsKLQkJcG9wdWxhdGVBZGFwdGVyTGlzdChwb3J0VHlwZXMsIGFkYXB0ZXJMaXN0KTsKLQotCQlyZXR1cm4gYWRhcHRlckxpc3Q7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldEltcG9ydHMoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXBvcHVsYXRlQWRhcHRlckxpc3QoKChEZWZpbml0aW9uKSB0YXJnZXQpLmdldEVJbXBvcnRzKCksIGFkYXB0ZXJMaXN0KTsKLQotCQlyZXR1cm4gYWRhcHRlckxpc3Q7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldFR5cGVzKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlUeXBlcyB0eXBlcyA9ICgoRGVmaW5pdGlvbikgdGFyZ2V0KS5nZXRFVHlwZXMoKTsKLSAgICAgICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICAgIHsgIAotCQkgIHBvcHVsYXRlQWRhcHRlckxpc3QodHlwZXMuZ2V0U2NoZW1hcygpLCBhZGFwdGVyTGlzdCk7Ci0gICAgICAgIH0gIAotCQlyZXR1cm4gYWRhcHRlckxpc3Q7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbCgoRGVmaW5pdGlvbikgZ2V0VGFyZ2V0KCkpOwotCQlMaXN0IG1lc3NhZ2VzID0gdXRpbC5nZXRNZXNzYWdlcygpOwotCQlwb3B1bGF0ZUFkYXB0ZXJMaXN0KG1lc3NhZ2VzLCBhZGFwdGVyTGlzdCk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCVN0cmluZyBuYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCURlZmluaXRpb24gZGVmaW5pdGlvbiA9ICgoRGVmaW5pdGlvbikgdGFyZ2V0KTsKLQkJaWYgKGRlZmluaXRpb24uZ2V0UU5hbWUoKSAhPSBudWxsKSB7Ci0JCQluYW1lID0gZGVmaW5pdGlvbi5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQl9Ci0JCXJldHVybiBuYW1lOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0JCVN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbM107Ci0JCWFjdGlvbklEc1swXSA9IEFTREFkZFNlcnZpY2VBY3Rpb24uSUQ7Ci0JCWFjdGlvbklEc1sxXSA9IEFTREFkZEJpbmRpbmdBY3Rpb24uSUQ7Ci0JCWFjdGlvbklEc1syXSA9IEFTREFkZEludGVyZmFjZUFjdGlvbi5JRDsKLQkJCi0JCXJldHVybiBhY3Rpb25JRHM7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZEltcG9ydENvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkSW1wb3J0Q29tbWFuZCgoRGVmaW5pdGlvbikgdGFyZ2V0KTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkU2NoZW1hQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFBZGRTY2hlbWFDb21tYW5kKChEZWZpbml0aW9uKSB0YXJnZXQpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRTZXJ2aWNlQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFBZGRTZXJ2aWNlQ29tbWFuZCgoRGVmaW5pdGlvbikgdGFyZ2V0KTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkQmluZGluZ0NvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkQmluZGluZ0NvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZEludGVyZmFjZUNvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkSW50ZXJmYWNlQ29tbWFuZCgoRGVmaW5pdGlvbikgdGFyZ2V0KTsJCi0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZE1lc3NhZ2VDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZE1lc3NhZ2VDb21tYW5kKChEZWZpbml0aW9uKSB0YXJnZXQpOwkKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0RWRpdE5hbWVzcGFjZXNDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZCgoRGVmaW5pdGlvbikgdGFyZ2V0KTsKLQl9Ci0JCi0JcHVibGljIExpc3QgZ2V0TmFtZXNwYWNlc0luZm8oKSB7Ci0JCURPTU5hbWVzcGFjZUluZm9NYW5hZ2VyIG5hbWVzcGFjZUluZm9NYW5hZ2VyID0gbmV3IERPTU5hbWVzcGFjZUluZm9NYW5hZ2VyKCk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdCgoRGVmaW5pdGlvbikgdGFyZ2V0KTsKLQkJcmV0dXJuIG5hbWVzcGFjZUluZm9NYW5hZ2VyLmdldE5hbWVzcGFjZUluZm9MaXN0KGVsZW1lbnQpOwotCX0KLQkKLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAiZGVmaW5pdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlMaXN0IGNoaWxkcmVuID0gZ2V0Q2F0ZWdvcnlBZGFwdGVycygpOwotCQlyZXR1cm4gKElUcmVlRWxlbWVudFtdKSBjaGlsZHJlbi50b0FycmF5KG5ldyBJVHJlZUVsZW1lbnRbMF0pOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJaWYgKGdldENoaWxkcmVuKCkubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKGZpbmFsIE5vdGlmaWNhdGlvbiBtc2cpIHsKLQkJLy8gVE9ETzogcm1haDogVGhpcyBjb2RlIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFcxMUNhdGVnb3J5QWRhcHRlcgotCQljbGFzcyBDYXRlZ29yeU5vdGlmaWNhdGlvbiBleHRlbmRzIE5vdGlmaWNhdGlvbkltcGwgewotCQkJcHJvdGVjdGVkIE9iamVjdCBjYXRlZ29yeTsKLQkJCQotCQkJcHVibGljIENhdGVnb3J5Tm90aWZpY2F0aW9uKE9iamVjdCBjYXRlZ29yeSkgewotCQkJCXN1cGVyKG1zZy5nZXRFdmVudFR5cGUoKSwgbXNnLmdldE9sZFZhbHVlKCksIG1zZy5nZXROZXdWYWx1ZSgpLCBtc2cuZ2V0UG9zaXRpb24oKSk7Ci0JCQkJdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5OwotCQkJfQotCQkJCi0JCQlwdWJsaWMgT2JqZWN0IGdldE5vdGlmaWVyKCkgewotCQkJCXJldHVybiBjYXRlZ29yeTsKLQkJCX0KLQkJCQotCQkJcHVibGljIE9iamVjdCBnZXRGZWF0dXJlKCkgewotCQkJCXJldHVybiBtc2cuZ2V0RmVhdHVyZSgpOwotCQkJfQotCQl9Ci0KLQkJaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRUltcG9ydHMoKSkgewotCQkJVzExQ2F0ZWdvcnlBZGFwdGVyIGFkYXB0ZXIgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuSU1QT1JUUyk7Ci0JCQlBc3NlcnQuaXNUcnVlKGFkYXB0ZXIgIT0gbnVsbCk7Ci0JCQlhZGFwdGVyLnNldENoaWxkcmVuKGdldEltcG9ydHMoKSk7Ci0JCQlub3RpZnlMaXN0ZW5lcnMobmV3IENhdGVnb3J5Tm90aWZpY2F0aW9uKGFkYXB0ZXIpLCBhZGFwdGVyLmdldFRleHQoKSk7Ci0JCX0KLQkJZWxzZSBpZiAobXNnLmdldEZlYXR1cmUoKSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FVHlwZXMoKSkgewotCQkJVzExQ2F0ZWdvcnlBZGFwdGVyIGFkYXB0ZXIgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuVFlQRVMpOwotCQkJQXNzZXJ0LmlzVHJ1ZShhZGFwdGVyICE9IG51bGwpOwotCQkJYWRhcHRlci5zZXRDaGlsZHJlbihnZXRJbXBvcnRzKCkpOwotCQkJbm90aWZ5TGlzdGVuZXJzKG5ldyBDYXRlZ29yeU5vdGlmaWNhdGlvbihhZGFwdGVyKSwgYWRhcHRlci5nZXRUZXh0KCkpOwotCQl9Ci0JCWVsc2UgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRVNlcnZpY2VzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLlNFUlZJQ0VTKTsKLQkJCUFzc2VydC5pc1RydWUoYWRhcHRlciAhPSBudWxsKTsKLQkJCWFkYXB0ZXIuc2V0Q2hpbGRyZW4oZ2V0U2VydmljZXMoKSk7Ci0JCQlub3RpZnlMaXN0ZW5lcnMobmV3IENhdGVnb3J5Tm90aWZpY2F0aW9uKGFkYXB0ZXIpLCBhZGFwdGVyLmdldFRleHQoKSk7Ci0JCX0KLQkJZWxzZSBpZiAobXNnLmdldEZlYXR1cmUoKSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKSkgewotCQkJVzExQ2F0ZWdvcnlBZGFwdGVyIGFkYXB0ZXIgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuQklORElOR1MpOwotCQkJQXNzZXJ0LmlzVHJ1ZShhZGFwdGVyICE9IG51bGwpOwotCQkJYWRhcHRlci5zZXRDaGlsZHJlbihnZXRCaW5kaW5ncygpKTsKLQkJCW5vdGlmeUxpc3RlbmVycyhuZXcgQ2F0ZWdvcnlOb3RpZmljYXRpb24oYWRhcHRlciksIGFkYXB0ZXIuZ2V0VGV4dCgpKTsKLQkJfQotCQllbHNlIGlmIChtc2cuZ2V0RmVhdHVyZSgpID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VQb3J0VHlwZXMoKSkgewotCQkJVzExQ2F0ZWdvcnlBZGFwdGVyIGFkYXB0ZXIgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuSU5URVJGQUNFUyk7Ci0JCQlBc3NlcnQuaXNUcnVlKGFkYXB0ZXIgIT0gbnVsbCk7Ci0JCQlhZGFwdGVyLnNldENoaWxkcmVuKGdldEludGVyZmFjZXMoKSk7Ci0JCQlub3RpZnlMaXN0ZW5lcnMobmV3IENhdGVnb3J5Tm90aWZpY2F0aW9uKGFkYXB0ZXIpLCBhZGFwdGVyLmdldFRleHQoKSk7Ci0JCX0KLQkJZWxzZSBpZiAobXNnLmdldEZlYXR1cmUoKSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FTWVzc2FnZXMoKSkgewotCQkJVzExQ2F0ZWdvcnlBZGFwdGVyIGFkYXB0ZXIgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuTUVTU0FHRVMpOwotCQkJQXNzZXJ0LmlzVHJ1ZShhZGFwdGVyICE9IG51bGwpOwotCQkJYWRhcHRlci5zZXRDaGlsZHJlbihnZXRNZXNzYWdlcygpKTsKLQkJCW5vdGlmeUxpc3RlbmVycyhuZXcgQ2F0ZWdvcnlOb3RpZmljYXRpb24oYWRhcHRlciksIGFkYXB0ZXIuZ2V0VGV4dCgpKTsKLQkJfQotCQllbHNlIHsKLQkJCW5vdGlmeUxpc3RlbmVycyhudWxsLCBudWxsKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExRW5kUG9pbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExRW5kUG9pbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0MTA1ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUVuZFBvaW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Db250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRBZGRyZXNzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5zcGVjaWFsaXplZC5XMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEVuZFBvaW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3QmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVzExRW5kUG9pbnQgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJRW5kUG9pbnQsIElBU0RPYmplY3RMaXN0ZW5lciB7Ci0gCi0gICAgcHJvdGVjdGVkIExpc3QgYWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzID0gbnVsbDsKLSAgICBwcm90ZWN0ZWQgTGlzdCB0aGluZ3NUb0xpc3RlblRvID0gbnVsbDsKLSAgICAKLQlwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MoKSB7Ci0gICAgICAgIExpc3QgbGlzdCA9IGdldEFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50cygpOwotICAgICAgICBpZiAobGlzdC5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlciBhZGRyZXNzRUUgPSAoVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcilsaXN0LmdldCgwKTsKLSAgICAgICAgICByZXR1cm4gYWRkcmVzc0VFLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgIH0JCi0JCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRBcHBsaWNhYmxlUHJvdG9jb2woKSB7Ci0JCUNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgZmFjdG9yeVJlZ2lzdHJ5ID0gQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQlMaXN0IHByb3RvY29scyA9IGZhY3RvcnlSZWdpc3RyeS5nZXRCaW5kaW5nRXh0ZW5zaW9uTmFtZXMoKTsKLQkJcmV0dXJuIHByb3RvY29sczsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UHJvdG9jb2woU3RyaW5nIG5ld1Byb3RvY29sKSB7Ci0JCUNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgZmFjdG9yeVJlZ2lzdHJ5ID0gQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQlDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW5lcmF0b3IgPSBmYWN0b3J5UmVnaXN0cnkuZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZShuZXdQcm90b2NvbCk7Ci0JCWlmIChjb250ZW50R2VuZXJhdG9yICE9IG51bGwpIHsKLQkJCVN0cmluZyBjdXJyZW50QWRkcmVzcyA9IGdldEFkZHJlc3MoKTsKLQkJCWlmIChjdXJyZW50QWRkcmVzcyAhPSBudWxsKSB7Ci0JCQkJY29udGVudEdlbmVyYXRvci5zZXRBZGRyZXNzTG9jYXRpb24oY3VycmVudEFkZHJlc3MpOwotCQkJfQotCi0JCQlQb3J0IHBvcnQgPSBnZXRQb3J0KCk7Ci0gICAgCQkvL3d0cCBidWcgMjIxMDI0IC0gbmFtZXNwYWNlIGFuZCBwcmVmaXhlcyBhcmUgbm90IGFkZGVkIHdoZW4gYWRkIG5ldyBwb3J0Ci0JCQlhZGRSZXF1aXJlZE5hbWVzcGFjZXMocG9ydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGNvbnRlbnRHZW5lcmF0b3IpOwotCQkJY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZVBvcnRDb250ZW50KHBvcnQpOwotCQl9Ci0JfQotCi0gICAgcHJvdGVjdGVkIExpc3QgZ2V0QWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzKCkKLSAgICB7ICAgICAgIAotICAgICAgICBhZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHRoaW5nc1RvTGlzdGVuVG8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBnZXRUYXJnZXQoKTsgICAgICAgICAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKLSAgICAgICAgeyAgIAotICAgICAgICAgIE5vdGlmaWVyIGl0ZW0gPSAoTm90aWZpZXIpaXQubmV4dCgpOwotICAgICAgICAgIEFkYXB0ZXIgYWRhcHRlciA9IGNyZWF0ZUFkYXB0ZXIoaXRlbSk7Ci0gICAgICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKQotICAgICAgICAgIHsgIAotICAgICAgICAgICAgYWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzLmFkZChhZGFwdGVyKTsKLSAgICAgICAgICB9ICAgICAgICAgICAgIAotICAgICAgICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgSUFTRE9iamVjdCkKLSAgICAgICAgICB7ICAKLSAgICAgICAgICAgIHRoaW5nc1RvTGlzdGVuVG8uYWRkKGFkYXB0ZXIpOwotICAgICAgICAgIH0gIAotICAgICAgICB9Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHRoaW5nc1RvTGlzdGVuVG8uaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpaS5uZXh0KCk7Ci0gICAgICAgICAgb2JqZWN0LnJlZ2lzdGVyTGlzdGVuZXIodGhpcyk7Ci0gICAgICAgIH0gIAotICAgICAgIAotICAgICAgcmV0dXJuIGFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50czsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgY2xlYXJBZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMoKQotICAgIHsgICAgCi0gICAgICBpZiAodGhpbmdzVG9MaXN0ZW5UbyAhPSBudWxsKQotICAgICAgeyAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHRoaW5nc1RvTGlzdGVuVG8uaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpaS5uZXh0KCk7Ci0gICAgICAgICAgb2JqZWN0LnVucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgdGhpbmdzVG9MaXN0ZW5UbyA9IG51bGw7Ci0gICAgICBhZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMgPSBudWxsOwotICAgIH0KLQotCXB1YmxpYyBJQmluZGluZyBnZXRCaW5kaW5nKCkgewotCQlpZiAoZ2V0UG9ydCgpLmdldEVCaW5kaW5nKCkgIT0gbnVsbCkgewotCQkJcmV0dXJuIChJQmluZGluZykgY3JlYXRlQWRhcHRlcihnZXRQb3J0KCkuZ2V0RUJpbmRpbmcoKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIGdldFBvcnQoKS5nZXROYW1lKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpIHsKLQkgIHJldHVybiBnZXRBZGRyZXNzKCk7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0VHlwZSgpIHsKLQkJcmV0dXJuIGdldEJpbmRpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFBvcnQgZ2V0UG9ydCgpIHsKLQkJcmV0dXJuIChQb3J0KSB0YXJnZXQ7Ci0JfQotCQotCXB1YmxpYyBJU2VydmljZSBnZXRPd25lclNlcnZpY2UoKSB7Ci0JCXJldHVybiAoSVNlcnZpY2UpIG93bmVyOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAgQ29sbGVjdGlvbiBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBhY3Rpb25JRHMuYWRkKEFTREFkZEVuZFBvaW50QWN0aW9uLklEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCArIE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX0JJTkRJTkcpOyAvLyROT04tTkxTLTEkCi0gICAgYWN0aW9uSURzLmFkZChBU0RTZXROZXdCaW5kaW5nQWN0aW9uLklEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZyBbXSlhY3Rpb25JRHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0QmluZGluZ0NvbW1hbmQoSUJpbmRpbmcgYmluZGluZykgewotCQlXMTFCaW5kaW5nIHcxMUJpbmRpbmcgPSAoVzExQmluZGluZykgYmluZGluZzsKLQkJcmV0dXJuIG5ldyBXMTFTZXRCaW5kaW5nQ29tbWFuZCgoUG9ydCkgdGFyZ2V0LCAoQmluZGluZykgdzExQmluZGluZy5nZXRUYXJnZXQoKSk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldEFkZHJlc3NDb21tYW5kKFN0cmluZyBuZXdBZGRyZXNzKSB7Ci0JCXJldHVybiBuZXcgVzExU2V0QWRkcmVzc0NvbW1hbmQoKFBvcnQpIHRoaXMuZ2V0VGFyZ2V0KCksIG5ld0FkZHJlc3MpOwotCX0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQoT2JqZWN0IG9iamVjdCwgU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIC8vIHRoaXMgaXMgY2FsbGVkIHdoZW4gb25lIG9mIHRoZSAnYWRkcmVzcycgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFkYXB0ZXJzIHdlJ3JlIGxpc3RlbmluZyB0byBjaGFuZ2VzCi0gICAgICAvLwotICAgICAgY2xlYXJBZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMoKTsgICAgICAKLSAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBudWxsKTsKLSAgICB9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wb3J0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAicG9ydCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlyZXR1cm4gSVRyZWVFbGVtZW50LkVNUFRZX0xJU1Q7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkgewotCQlTdHJpbmcgcHJvdG9jb2wgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkKLQkJTGlzdCBsaXN0ID0gZ2V0QWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIGlmIChsaXN0LnNpemUoKSA+IDApIHsKLSAgICAgICAgCVcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIgYWRkcmVzc0VFID0gKFcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIpbGlzdC5nZXQoMCk7Ci0gICAgICAgIAlPYmplY3QgdGFyZ2V0ID0gYWRkcmVzc0VFLmdldFRhcmdldCgpOwotCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkJV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpIHRhcmdldDsKLQkJCQlTdHJpbmcgbmFtZXNwYWNlID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQkJCQotCQkJCWlmIChuYW1lc3BhY2UgIT0gbnVsbCkgewotCQkJCQlDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGZhY3RvcnlSZWdpc3RyeSA9IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJCQkJQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yID0gZmFjdG9yeVJlZ2lzdHJ5LmdldEdlbmVyYXRvckNsYXNzRnJvbU5hbWVzcGFjZShuYW1lc3BhY2UpOwotCQkJCQlpZiAoY29udGVudEdlbmVyYXRvciAhPSBudWxsKSB7Ci0JCQkJCQlwcm90b2NvbCA9IGNvbnRlbnRHZW5lcmF0b3IuZ2V0UHJvdG9jb2woKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLSAgICAgICAgfQkKLQotCQlyZXR1cm4gcHJvdG9jb2w7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhZGRSZXF1aXJlZE5hbWVzcGFjZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW5lcmF0b3IpCi0JewotCSAgaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLQkgIHsKLQkgICAgU3RyaW5nW10gbmFtZXNwYWNlTmFtZXMgPSBjb250ZW50R2VuZXJhdG9yLmdldFJlcXVpcmVkTmFtZXNwYWNlcygpOwotCSAgICBTdHJpbmdbXSBwcmVmZXJyZWRQcmVmaXhlcyA9IG5ldyBTdHJpbmcgW25hbWVzcGFjZU5hbWVzLmxlbmd0aF07Ci0JICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lc3BhY2VOYW1lcy5sZW5ndGg7IGluZGV4KyspCi0JICAgIHsKLQkgICAgICBwcmVmZXJyZWRQcmVmaXhlc1tpbmRleF0gPSBjb250ZW50R2VuZXJhdG9yLmdldFByZWZlcnJlZE5hbWVzcGFjZVByZWZpeChuYW1lc3BhY2VOYW1lc1tpbmRleF0pOwotCSAgICB9Ci0KLQkgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotCSAgICAKLQkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lc3BhY2VOYW1lcy5sZW5ndGg7IGkrKykKLQkgICAgewotCSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBuYW1lc3BhY2VOYW1lc1tpXTsKLQkgICAgICBpZiAoIW1hcC5jb250YWluc1ZhbHVlKG5hbWVzcGFjZSkpCi0JICAgICAgewotCSAgICAgICAgU3RyaW5nIHByZWZpeCA9IChpIDwgcHJlZmVycmVkUHJlZml4ZXMubGVuZ3RoKSA/IHByZWZlcnJlZFByZWZpeGVzW2ldIDogInAwIjsKLQkgICAgICAgIGlmIChtYXAuY29udGFpbnNLZXkocHJlZml4KSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgcHJlZml4ID0gY29tcHV0ZVVuaXF1ZVByZWZpeCgicCIsIG1hcCk7Ci0JICAgICAgICB9Ci0JICAgICAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZShwcmVmaXgsIG5hbWVzcGFjZSk7Ci0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZVVuaXF1ZVByZWZpeChTdHJpbmcgYmFzZSwgTWFwIHRhYmxlKQotICB7Ci0gICAgaW50IGkgPSAwOwotICAgIFN0cmluZyBwcmVmaXggPSBiYXNlOwotICAgIHdoaWxlICh0cnVlKQotICAgIHsKLSAgICAgIGlmICghdGFibGUuY29udGFpbnNLZXkocHJlZml4KSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByZWZpeCA9IGJhc2UgKyBpOwotICAgICAgICBpKys7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmVmaXg7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExSW1wb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUltcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDA4MWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExSW1wb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExT3BlbkltcG9ydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMUltcG9ydCBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElJbXBvcnQgewotCi0JcHVibGljIEltcG9ydCBnZXRJbXBvcnQoKSB7Ci0JCXJldHVybiAoSW1wb3J0KSB0YXJnZXQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkgewotCQlyZXR1cm4gZ2V0SW1wb3J0KCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlUHJlZml4KCkgewotCQlyZXR1cm4gZ2V0SW1wb3J0KCkuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldFByZWZpeChnZXROYW1lc3BhY2UoKSk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKSB7Ci0JCXJldHVybiBnZXRJbXBvcnQoKS5nZXRMb2NhdGlvblVSSSgpOwotCX0KLQkKLQlwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoSURlc2NyaXB0aW9uKSBvd25lcjsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydCkgdGFyZ2V0OwotCQlyZXR1cm4gdGhlSW1wb3J0LmdldExvY2F0aW9uVVJJKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkJU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1syXTsKLQkJYWN0aW9uSURzWzBdID0gVzExT3BlbkltcG9ydEFjdGlvbi5JRDsKLQkJYWN0aW9uSURzWzFdID0gQVNERGVsZXRlQWN0aW9uLklEOyAgICAKLQkJcmV0dXJuIGFjdGlvbklEczsKLQl9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9pbXBvcnRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJpbXBvcnQiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIElUcmVlRWxlbWVudC5FTVBUWV9MSVNUOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFJbnRlcmZhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExSW50ZXJmYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwY2VkOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkT3BlcmF0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRPcGVyYXRpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFJbnRlcmZhY2UgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJSW50ZXJmYWNlIHsKLQotCXB1YmxpYyBMaXN0IGdldE9wZXJhdGlvbnMoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXBvcHVsYXRlQWRhcHRlckxpc3QoKChQb3J0VHlwZSkgdGFyZ2V0KS5nZXRFT3BlcmF0aW9ucygpLCBhZGFwdGVyTGlzdCk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiAoKFBvcnRUeXBlKSB0YXJnZXQpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLSAgICBMaXN0IGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTREFkZE9wZXJhdGlvbkFjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0REZWxldGVBY3Rpb24uSUQpOwotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGFjdGlvbklEcy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZE9wZXJhdGlvbkNvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkT3BlcmF0aW9uQ29tbWFuZCgoUG9ydFR5cGUpIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcG9ydHR5cGVfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJwb3J0VHlwZSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlMaXN0IG9wZXJhdGlvbnMgPSBnZXRPcGVyYXRpb25zKCk7Ci0JCUlUcmVlRWxlbWVudFtdIHRyZWVFbGVtZW50cyA9IG5ldyBJVHJlZUVsZW1lbnRbb3BlcmF0aW9ucy5zaXplKCldOwotCQkKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhdGlvbnMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudHNbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgb3BlcmF0aW9ucy5nZXQoaW5kZXgpOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJlZUVsZW1lbnRzOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJaWYgKGdldENoaWxkcmVuKCkubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFNZXNzYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMWI5YTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFNZXNzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExQWRkUGFydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRQYXJ0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci0KLQotcHVibGljIGNsYXNzIFcxMU1lc3NhZ2UgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJTWVzc2FnZSB7Ci0KLQlwdWJsaWMgTGlzdCBnZXRQYXJ0cygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLS8vCQlwb3B1bGF0ZUFkYXB0ZXJMaXN0KCgoTWVzc2FnZSkgdGFyZ2V0KS5nZXRFUGFydHMoKSwgYWRhcHRlckxpc3QpOwotCQlJdGVyYXRvciBwYXJ0cyA9ICgoTWVzc2FnZSkgdGFyZ2V0KS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAocGFydHMuaGFzTmV4dCgpKSB7Ci0JCQlOb3RpZmllciBjb21wb25lbnQgPSAoTm90aWZpZXIpIHBhcnRzLm5leHQoKTsKLQkJCUFkYXB0ZXIgYWRhcHRlciA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGNvbXBvbmVudCk7Ci0JCQlhZGFwdGVyTGlzdC5hZGQoYWRhcHRlcik7CQkJCi0JCX0KLQotCQlyZXR1cm4gYWRhcHRlckxpc3Q7Ci0JfQotCQotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChJRGVzY3JpcHRpb24pIG93bmVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJaWYgKCgoTWVzc2FnZSkgdGFyZ2V0KS5nZXRRTmFtZSgpICE9IG51bGwpIHsKLQkJCXJldHVybiAoKE1lc3NhZ2UpIHRhcmdldCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJfQotCQkKLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLSAgICBMaXN0IGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBhY3Rpb25JRHMuYWRkKFcxMUFkZFBhcnRBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLSAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0gICAgICBhY3Rpb25JRHMuYWRkKE9wZW5Jbk5ld0VkaXRvci5JRCk7Ci0gICAgfQotICAgIHJldHVybiAoU3RyaW5nIFtdKWFjdGlvbklEcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRQYXJ0Q29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFBZGRQYXJ0Q29tbWFuZCgoTWVzc2FnZSkgdGFyZ2V0KTsKLQl9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9tZXNzYWdlX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAibWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlMaXN0IHBhcnRzID0gZ2V0UGFydHMoKTsKLQkJSVRyZWVFbGVtZW50W10gdHJlZUVsZW1lbnRzID0gbmV3IElUcmVlRWxlbWVudFtwYXJ0cy5zaXplKCldOwotCQkKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzLnNpemUoKTsgaW5kZXgrKykgewotCQkJdHJlZUVsZW1lbnRzW2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIHBhcnRzLmdldChpbmRleCk7Ci0JCX0KLQkJCi0JCXJldHVybiB0cmVlRWxlbWVudHM7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCWlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZVJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFNZXNzYWdlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZGE0ZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFNZXNzYWdlUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0ODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMUFkZFBhcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXRFeGlzdGluZ01lc3NhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXROZXdNZXNzYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvci5XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRGYXVsdEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRPcGVyYXRpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLk1vZGVsRGlhZ25vc3RpY0luZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvci5XU0RMVmlzaXRvckZvclBhcmFtZXRlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLlByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgVzExTWVzc2FnZVJlZmVyZW5jZSBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElNZXNzYWdlUmVmZXJlbmNlLCBJQVNET2JqZWN0TGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIGludCBtZXNzYWdlS2luZCA9IC0xOwotICBwcm90ZWN0ZWQgTGlzdCBwYXJhbWV0ZXJzID0gbnVsbDsKLSAgcHJvdGVjdGVkIExpc3Qgb3RoZXJUaGluZ3NUb0xpc3RlblRvID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBXMTFNZXNzYWdlUmVmZXJlbmNlKGludCBtZXNzYWdlS2luZCkKLSAgewotICAgIHRoaXMubWVzc2FnZUtpbmQgPSBtZXNzYWdlS2luZDsKLSAgfQotCi0gIHB1YmxpYyBJT3BlcmF0aW9uIGdldE93bmVyT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiAoSU9wZXJhdGlvbikgb3duZXI7Ci0gIH0KLSAgCi0gIC8qCi0gIHByaXZhdGUgU3RyaW5nIGdldE1lc3NhZ2VTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0W10gYXJncykgewotCSAgU3RyaW5nIHN0cmluZyA9IG51bGw7Ci0KLQkgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotCSAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpIHsKLQkJICBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgPSAoUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcilvYmplY3Q7Ci0JCSAgU3RyaW5nIG5ld1N0cmluZyA9IHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuZ2V0UHJvZHVjdFN0cmluZyhrZXksIGFyZ3MpOwotCQkgIGlmIChuZXdTdHJpbmcgIT0gbnVsbCkgewotCQkJICBzdHJpbmcgPSBuZXdTdHJpbmc7Ci0JCSAgfQotCSAgfQotCi0JICByZXR1cm4gc3RyaW5nOwotICB9Ci0gICovCi0gIAotICAvLyBDb252ZW5pZW5jZSBtZXRob2QKLSAgcHVibGljIE1lc3NhZ2VSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gIHsKLSAgICByZXR1cm4gKE1lc3NhZ2VSZWZlcmVuY2UpIHRhcmdldDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNvbXB1dGVNZXNzYWdlS2luZCgpCi0gIHsKLSAgICBpZiAoZ2V0TWVzc2FnZVJlZmVyZW5jZSgpIGluc3RhbmNlb2YgSW5wdXQpCi0gICAgewotICAgICAgbWVzc2FnZUtpbmQgPSBLSU5EX0lOUFVUOwotICAgIH0KLSAgICBlbHNlIGlmIChnZXRNZXNzYWdlUmVmZXJlbmNlKCkgaW5zdGFuY2VvZiBPdXRwdXQpCi0gICAgewotICAgICAgbWVzc2FnZUtpbmQgPSBLSU5EX09VVFBVVDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZ2V0TWVzc2FnZVJlZmVyZW5jZSgpIGluc3RhbmNlb2YgRmF1bHQpCi0gICAgICBtZXNzYWdlS2luZCA9IEtJTkRfRkFVTFQ7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldEtpbmQoKQotICB7Ci0JICBpZiAobWVzc2FnZUtpbmQgPT0gLTEpCi0JICB7Ci0JCSAgY29tcHV0ZU1lc3NhZ2VLaW5kKCk7Ci0JICB9Ci0JICByZXR1cm4gbWVzc2FnZUtpbmQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLQkgIE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IGdldE1lc3NhZ2VSZWZlcmVuY2UoKTsKLQkgIGlmIChtZXNzYWdlUmVmLmdldE5hbWUoKSAhPSBudWxsKSB7Ci0JCSAgcmV0dXJuIG1lc3NhZ2VSZWYuZ2V0TmFtZSgpOwotCSAgfQotCSAgCi0JICByZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFBhcmFtZXRlcnMoKQotICB7Ci0JICBMaXN0IHBhcmFtZXRlcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotCSAgTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCSAgaWYgKG1lc3NhZ2VSZWYgIT0gbnVsbCkgewotCQkgIGlmIChtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJICBpZiAobWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpICE9IG51bGwpIHsKLQkJCQkgIHBhcnRzID0gbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpOwotCQkJICB9Ci0JCSAgfQotCSAgfQotCSAgCi0JICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KHBhcnRzLCBwYXJhbWV0ZXJzKTsKLQkgIAotCSAgb3RoZXJUaGluZ3NUb0xpc3RlblRvID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzIHZpc2l0b3JGb3JQYXJhbWV0ZXJzID0gbmV3IFdTRExWaXNpdG9yRm9yUGFyYW1ldGVycygpOwotICAgICAgdmlzaXRvckZvclBhcmFtZXRlcnMudmlzaXRNZXNzYWdlUmVmZXJlbmNlKG1lc3NhZ2VSZWYpOwotICAgICAgcG9wdWxhdGVBZGFwdGVyTGlzdCh2aXNpdG9yRm9yUGFyYW1ldGVycy5jb25jcmV0ZUNvbXBvbmVudHMsIG90aGVyVGhpbmdzVG9MaXN0ZW5Ubyk7Ci0gICAgICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KHZpc2l0b3JGb3JQYXJhbWV0ZXJzLnRoaW5nc1RvTGlzdGVuVG8sIG90aGVyVGhpbmdzVG9MaXN0ZW5Ubyk7Ci0gICAgICAKLSAgICAgIC8vIG5vdyB3ZSBsaXN0ZW4gdG8gYWxsIHRoZSAndGhpbmdzIHdlIG5lZWQgdG8gbGlzdGVuIHRvJwotICAgICAgLy8KLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG90aGVyVGhpbmdzVG9MaXN0ZW5Uby5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEFkYXB0ZXIgYWRhcHRlciA9IChBZGFwdGVyKSBpLm5leHQoKTsKLSAgICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgSUFTRE9iamVjdCBhc2RPYmplY3QgPSAoSUFTRE9iamVjdCkgYWRhcHRlcjsKLSAgICAgICAgICBhc2RPYmplY3QucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgfQotICAgICAgfQotCSAgCi0JICByZXR1cm4gcGFyYW1ldGVyczsKLSAgICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQoT2JqZWN0IG9iamVjdCwgU3RyaW5nIHByb3BlcnR5KQotICB7Ci0gICAgLy8gdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gb25lIG9mIHRoZSAnb3RoZXJUaGluZ3NUb0xpc3RlblRvJyBoYXMgY2hhbmdlZAotICAgIC8vIHdoZW4gb25lIG9mIHRoZXNlIHRoaW5ncyBjaGFuZ2VzIGl0IG1lYW5zIG91ciBwYXJhbXRlciBsaXN0IG1heSBoYXZlIGNoYW5nZXMKLSAgICAvLyBzbyB3ZSBuZWVkIHRvIHJlY29tcHV0ZSBpdAotLy8gICAgT2JqZWN0IG5vdGlmaWVyID0gbnVsbDsKLS8vICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBBZGFwdGVyKQotLy8gICAgewotLy8gICAgICBub3RpZmllciA9ICgoQWRhcHRlcilvYmplY3QpLmdldFRhcmdldCgpOwotLy8gICAgfSAgCi0vLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNvbWV0aGluZyBpbiB0aGUgJ290aGVyVGhpbmdzVG9MaXN0ZW5UbycgbGlzdCBoYXMgY2hhbmdlZCAiICsgbm90aWZpZXIpOyAgICAKLSAgICBjbGVhclBhcmFtZXRlcnMoKTsKLSAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgbnVsbCk7ICAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY2xlYXJQYXJhbWV0ZXJzKCkKLSAgewotICAgIGlmIChvdGhlclRoaW5nc1RvTGlzdGVuVG8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvdGhlclRoaW5nc1RvTGlzdGVuVG8uaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBBZGFwdGVyIGFkYXB0ZXIgPSAoQWRhcHRlcikgaS5uZXh0KCk7Ci0gICAgICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgSUFTRE9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgIElBU0RPYmplY3QgYXNkT2JqZWN0ID0gKElBU0RPYmplY3QpIGFkYXB0ZXI7Ci0gICAgICAgICAgYXNkT2JqZWN0LnVucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBwYXJhbWV0ZXJzID0gbnVsbDsgICAgCi0gICAgb3RoZXJUaGluZ3NUb0xpc3RlblRvID0gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbXNnKQotICB7Ci0gICAgY2xlYXJQYXJhbWV0ZXJzKCk7ICAgIAotICAgIHN1cGVyLm5vdGlmeUNoYW5nZWQobXNnKTsgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpCi0gIHsKLQkgIExpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIGFjdGlvbnMuYWRkKEFTREFkZE9wZXJhdGlvbkFjdGlvbi5JRCk7CSAgCi0JICBhY3Rpb25zLmFkZEFsbCgoKFcxMU9wZXJhdGlvbikgZ2V0T3duZXJPcGVyYXRpb24oKSkuZ2V0VmFsaWRJbnB1dE91dHB1QWN0aW9ucygpKTsgCi0JICBhY3Rpb25zLmFkZChBU0RBZGRGYXVsdEFjdGlvbi5JRCk7Ci0JICBhY3Rpb25zLmFkZChXMTFBZGRQYXJ0QWN0aW9uLklEKTsKLQkgIGFjdGlvbnMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0JICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQgKyBNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9NRVNTQUdFKTsgLy8kTk9OLU5MUy0xJAotCSAgYWN0aW9ucy5hZGQoVzExU2V0TmV3TWVzc2FnZUFjdGlvbi5JRCk7Ci0JICBhY3Rpb25zLmFkZChXMTFTZXRFeGlzdGluZ01lc3NhZ2VBY3Rpb24uSUQpOwotCSAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCk7Ci0vLyAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0vLyAgICAgIGFjdGlvbnMuYWRkKE9wZW5Jbk5ld0VkaXRvci5JRCk7Ci0vLyAgICB9Ci0KLQkgIFN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbYWN0aW9ucy5zaXplKCldOwotCSAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFjdGlvbnMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCSAgYWN0aW9uSURzW2luZGV4XSA9IChTdHJpbmcpIGFjdGlvbnMuZ2V0KGluZGV4KTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIGFjdGlvbklEczsKLSAgfQotICAKLSAgcHVibGljIENvbW1hbmQgZ2V0UmVvcmRlclBhcmFtZXRlcnNDb21tYW5kKElQYXJhbWV0ZXIgbGVmdFNpYmxpbmcsIElQYXJhbWV0ZXIgcmlnaHRTaWJsaW5nLCBJUGFyYW1ldGVyIG1vdmluZ1BhcmFtZXRlcikgewotCSAgcmV0dXJuIG5ldyBXMTFSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQobGVmdFNpYmxpbmcsIHJpZ2h0U2libGluZywgbW92aW5nUGFyYW1ldGVyKTsKLSAgfQotICAKLSAgcHVibGljIENvbW1hbmQgZ2V0QWRkUGFyYW10ZXJDb21tYW5kKCkgewotICAgICAgQ29tbWFuZCBjb21tYW5kID0gbnVsbDsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKWdldE1lc3NhZ2VSZWZlcmVuY2UoKS5lQ29udGFpbmVyKCk7Ci0gICAgICBpZiAoZ2V0S2luZCgpID09IEtJTkRfSU5QVVQpCi0gICAgICB7ICAgIAotICAgICAgICBjb21tYW5kID0gbmV3IFcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24pOwotICAgICAgfSAgCi0gICAgICBlbHNlIGlmIChnZXRLaW5kKCkgPT0gS0lORF9PVVRQVVQpCi0gICAgICB7Ci0gICAgICAgIGNvbW1hbmQgPSBuZXcgVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24pOyAgICAgICAgCi0gICAgICB9IAotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBjb21tYW5kID0gbmV3IFcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIChGYXVsdClnZXRNZXNzYWdlUmVmZXJlbmNlKCkpOyAgICAgICAgCi0gICAgICB9IAotICAgICAgcmV0dXJuIGNvbW1hbmQ7Ci0gIH0gIAotICAKLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JICAgIGlmIChnZXRLaW5kKCkgPT0gS0lORF9JTlBVVCkKLQkgICAgewotCSAgICAJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvaW5wdXRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JICAgIH0KLQkgICAgZWxzZSBpZiAoZ2V0S2luZCgpID09IEtJTkRfT1VUUFVUKQotCSAgICB7Ci0JICAgIAlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9vdXRwdXRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JICAgIH0KLQkgICAgZWxzZSBpZiAoZ2V0S2luZCgpID09IEtJTkRfRkFVTFQpCi0JICAgIHsKLQkgICAgCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2ZhdWx0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCSAgICB9Ci0JICAgIHJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JICAgIGlmIChnZXRLaW5kKCkgPT0gS0lORF9JTlBVVCkKLQkgICAgewotCSAgICAgIHJldHVybiAiaW5wdXQiOyAvLyROT04tTkxTLTEkCi0JICAgIH0KLQkgICAgZWxzZSBpZiAoZ2V0S2luZCgpID09IEtJTkRfT1VUUFVUKQotCSAgICB7Ci0JICAgICAgcmV0dXJuICJvdXRwdXQiOyAvLyROT04tTkxTLTEkCi0JICAgIH0KLQkgICAgZWxzZSBpZiAoZ2V0S2luZCgpID09IEtJTkRfRkFVTFQpCi0JICAgIHsKLQkgICAgICByZXR1cm4gZ2V0TmFtZSgpOwotCSAgICB9Ci0JICAgIHJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCX0KLSAgICAKLQkvKgotCSAqIEBkZXByZWNhdGVkLiAgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZS4KLQkgKiBVc2UgZ2V0U2ltcGxpZmllZFBhcmFtZXRlcnMoKS4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRQYXJhbWV0ZXJzMigpCi0JewotCQlyZXR1cm4gZ2V0U2ltcGxpZmllZERpYWdub3N0aWNNZXNzYWdlcygpOwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRTaW1wbGlmaWVkUGFyYW1ldGVycygpCi0gICAgewotCSAgaWYgKHBhcmFtZXRlcnMgPT0gbnVsbCkKLQkgIHsKLQkgICAgcGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgb3RoZXJUaGluZ3NUb0xpc3RlblRvID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICBXU0RMVmlzaXRvckZvclBhcmFtZXRlcnMgdmlzaXRvckZvclBhcmFtZXRlcnMgPSBuZXcgV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzKCk7Ci0JICAgIHZpc2l0b3JGb3JQYXJhbWV0ZXJzLnZpc2l0TWVzc2FnZVJlZmVyZW5jZShnZXRNZXNzYWdlUmVmZXJlbmNlKCkpOwotCSAgICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KHZpc2l0b3JGb3JQYXJhbWV0ZXJzLmNvbmNyZXRlQ29tcG9uZW50cywgcGFyYW1ldGVycyk7Ci0JICAgIHBvcHVsYXRlQWRhcHRlckxpc3QodmlzaXRvckZvclBhcmFtZXRlcnMudGhpbmdzVG9MaXN0ZW5Ubywgb3RoZXJUaGluZ3NUb0xpc3RlblRvKTsKLQotCSAgICAvLyBub3cgd2UgbGlzdGVuIHRvIGFsbCB0aGUgJ3RoaW5ncyB3ZSBuZWVkIHRvIGxpc3RlbiB0bycKLQkgICAgLy8KLQkgICAgZm9yIChJdGVyYXRvciBpID0gb3RoZXJUaGluZ3NUb0xpc3RlblRvLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkgICAgewotCSAgICAgIEFkYXB0ZXIgYWRhcHRlciA9IChBZGFwdGVyKSBpLm5leHQoKTsKLQkgICAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIElBU0RPYmplY3QpCi0JICAgICAgewotCSAgICAgICAgSUFTRE9iamVjdCBhc2RPYmplY3QgPSAoSUFTRE9iamVjdCkgYWRhcHRlcjsKLQkgICAgICAgIGFzZE9iamVjdC5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotCSAgICAgIH0KLQkgICAgfSAKLQkgIH0KLQotCSAgcmV0dXJuIHBhcmFtZXRlcnM7Ci0JfSAgICAKLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0gICAgICAvKgotCQlMaXN0IHBhcnRzID0gZ2V0UGFyYW1ldGVycygpOwotCQlJVHJlZUVsZW1lbnRbXSB0cmVlRWxlbWVudHMgPSBuZXcgSVRyZWVFbGVtZW50W3BhcnRzLnNpemUoKV07Ci0JCQotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgcGFydHMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudHNbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgcGFydHMuZ2V0KGluZGV4KTsKLQkJfQotCQkqLwotCQlyZXR1cm4gSVRyZWVFbGVtZW50LkVNUFRZX0xJU1Q7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCWlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcm9jZXNzQWR2YW5jZWRXMTFNZXNzYWdlUmVmZXJlbmNlKCkgewotCQlkaWFnbm9zdGljTWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpIGdldFRhcmdldCgpOwotCQlMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotCQlpZiAobWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCWlmIChtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCkgIT0gbnVsbCkgewotCQkJCXBhcnRzID0gbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpOwotCQkJfQotCQl9Ci0KLQkJLy8gbWVzc2FnZVJlZiBjYW4gbm90IGJlIG51bGwsIGdpdmVuIGFib3ZlCi0JCWlmIChtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkgPT0gbnVsbCkgewotCQkJYWRkRXJyb3JEaWFnbm9zdGljTWVzc2FnZShnZXRVbmRlZmluZWRBcmcxU3RyaW5nKCJtZXNzYWdlIikpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZWxzZSBpZiAocGFydHMuc2l6ZSgpIDw9IDApIHsKLQkJCVN0cmluZ1tdIGFyZ3MgPSBuZXcgU3RyaW5nWzFdOwotCQkJYXJnc1swXSA9ICJwYXJ0IjsgLy8kTk9OLU5MUy0xJAotCQkJYWRkV2FybmluZ0RpYWdub3N0aWNNZXNzYWdlKGdldE5vT2JqZWN0U3BlY2lmaWVkQXJnc1N0cmluZyhhcmdzKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc1NpbXBsaWZpZWRXMTFNZXNzYWdlUmVmZXJlbmNlKCkgewotCQlkaWFnbm9zdGljTWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgZ2V0VGFyZ2V0KCk7Ci0JCSAgaWYgKG1lc3NhZ2VSZWYgPT0gbnVsbCB8fCBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkgPT0gbnVsbCkgewotCQkJICBhZGRFcnJvckRpYWdub3N0aWNNZXNzYWdlKGdldFVuZGVmaW5lZEFyZzFTdHJpbmcoIm1lc3NhZ2UiKSk7IC8vJE5PTi1OTFMtMSQKLQkJICB9Ci0JCSAgZWxzZSBpZiAobWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLnNpemUoKSA8PSAwKSB7Ci0JCQkgIGFkZFdhcm5pbmdEaWFnbm9zdGljTWVzc2FnZShnZXROb1BhcmFtZXRlcnNTcGVjaWZpZWRTdHJpbmcoKSk7Ci0JCSAgfQotCQkgIGVsc2UgewotCQkJICBQYXJ0IHBhcnQgPSAoUGFydCkgbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLmdldCgwKTsKLQkJCSAgWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkJICBpZiAoeHNkRWxlbWVudCA9PSBudWxsIHx8IHhzZEVsZW1lbnQuZ2V0U2NoZW1hKCkgPT0gbnVsbCkgewotCQkJCSAgLy8gTm8gWFNEIEVsZW1lbnQKLQkJCQkgIGFkZEVycm9yRGlhZ25vc3RpY01lc3NhZ2UoZ2V0VW5kZWZpbmVkQXJnMVN0cmluZygiZWxlbWVudCIpKTsgLy8kTk9OLU5MUy0xJAotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCSAgTXlJbm5lckVsZW1lbnRWaXNpdG9yIHZpc2l0b3IgPSBuZXcgTXlJbm5lckVsZW1lbnRWaXNpdG9yKCk7Ci0JCQkJICB2aXNpdG9yLmZpbmRFcnJvcnNBbmRXYXJuaW5ncyh4c2RFbGVtZW50KTsKLQkJCQkgIGRpYWdub3N0aWNNZXNzYWdlcy5hZGRBbGwodmlzaXRvci5nZXREaWFnbm9zdGljTWVzc2FnZXMoKSk7Ci0JCQkgIH0KLQkJICB9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZEVycm9yRGlhZ25vc3RpY01lc3NhZ2UoU3RyaW5nIHR4dCkgewotCQlkaWFnbm9zdGljTWVzc2FnZXMuYWRkKG5ldyBNb2RlbERpYWdub3N0aWNJbmZvKHR4dCwgTW9kZWxEaWFnbm9zdGljSW5mby5FUlJPUl9UWVBFLCBudWxsKSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhZGRXYXJuaW5nRGlhZ25vc3RpY01lc3NhZ2UoU3RyaW5nIHR4dCkgewotCQlkaWFnbm9zdGljTWVzc2FnZXMuYWRkKG5ldyBNb2RlbERpYWdub3N0aWNJbmZvKHR4dCwgTW9kZWxEaWFnbm9zdGljSW5mby5XQVJOSU5HX1RZUEUsIG51bGwpKTsJCQotCX0KLQkKLQlwcm90ZWN0ZWQgTGlzdCBkaWFnbm9zdGljTWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgTGlzdCBnZXREaWFnbm9zdGljTWVzc2FnZXMoKSB7Ci0JCXByb2Nlc3NBZHZhbmNlZFcxMU1lc3NhZ2VSZWZlcmVuY2UoKTsKLQkJcmV0dXJuIGRpYWdub3N0aWNNZXNzYWdlczsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRTaW1wbGlmaWVkRGlhZ25vc3RpY01lc3NhZ2VzKCkgewotCQlwcm9jZXNzU2ltcGxpZmllZFcxMU1lc3NhZ2VSZWZlcmVuY2UoKTsKLQkJcmV0dXJuIGRpYWdub3N0aWNNZXNzYWdlczsKLQl9Ci0JCi0JcHJpdmF0ZSBjbGFzcyBNeUlubmVyRWxlbWVudFZpc2l0b3IgZXh0ZW5kcyBXMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvciB7Ci0JCXByaXZhdGUgTGlzdCBkaWFnTWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlwdWJsaWMgdm9pZCBmaW5kRXJyb3JzQW5kV2FybmluZ3MoWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQpIHsKLQkJCWlmICh4c2RFbGVtZW50LmdldFR5cGVEZWZpbml0aW9uKCkgPT0gbnVsbCB8fCB4c2RFbGVtZW50LmdldFR5cGVEZWZpbml0aW9uKCkuZ2V0U2NoZW1hKCkgPT0gbnVsbCkgewotCQkJCS8vIE5vIFhTRCB0eXBlIChub24gYW5vbnltb3VzKSBkZWZpbmVkCi0JCQkJZGlhZ01lc3NhZ2VzLmFkZChuZXcgTW9kZWxEaWFnbm9zdGljSW5mbyhnZXRVbmRlZmluZWRBcmcxU3RyaW5nKCJ0eXBlIiksIE1vZGVsRGlhZ25vc3RpY0luZm8uRVJST1JfVFlQRSwgbnVsbCkpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0KLQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBpbm5lckVsZW1lbnQgPSBzdXBlci5nZXRJbm5lclhTREVsZW1lbnQoeHNkRWxlbWVudCk7Ci0JCQlpZiAoaW5uZXJFbGVtZW50LmVxdWFscyh4c2RFbGVtZW50KSkgewotCQkJCWRpYWdNZXNzYWdlcy5hZGQobmV3IE1vZGVsRGlhZ25vc3RpY0luZm8oZ2V0Tm9QYXJhbWV0ZXJzU3BlY2lmaWVkU3RyaW5nKCksIE1vZGVsRGlhZ25vc3RpY0luZm8uV0FSTklOR19UWVBFLCBudWxsKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXB1YmxpYyBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlcygpIHsKLQkJCXJldHVybiBkaWFnTWVzc2FnZXM7Ci0JCX0KLQl9Ci0JCi0JICBwcml2YXRlIFN0cmluZyBnZXROb09iamVjdFNwZWNpZmllZEFyZ3NTdHJpbmcoU3RyaW5nW10gYXJncykgewkJICAKLQkJICBTdHJpbmcgc3RyaW5nID0gTkxTLmJpbmQoTWVzc2FnZXMuX1VJX0xBQkVMX05PX09CSkVDVF9TUEVDSUZJRURfQVJHMSwgYXJncyk7Ci0JCSAgU3RyaW5nIGN1c3RvbWl6ZWRNZXNzYWdlID0gZ2V0UHJvZHVjdEN1c3RvbWl6ZWRNZXNzYWdlKCJfVUlfTEFCRUxfTk9fT0JKRUNUX1NQRUNJRklFRF9BUkcxIiwgYXJncyk7IC8vJE5PTi1OTFMtMSQKLQkJICBpZiAoY3VzdG9taXplZE1lc3NhZ2UgIT0gbnVsbCAmJiAhY3VzdG9taXplZE1lc3NhZ2UuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotCQkJICBzdHJpbmcgPSBjdXN0b21pemVkTWVzc2FnZTsKLQkJICByZXR1cm4gc3RyaW5nOwotCSAgfQotCQotCSAgcHJpdmF0ZSBTdHJpbmcgZ2V0VW5kZWZpbmVkQXJnMVN0cmluZyhTdHJpbmcgYXJnKSB7Ci0JCSAgU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbMV07Ci0JCSAgYXJnc1swXSA9IGFyZzsJCSAgCi0JCSAgU3RyaW5nIHN0cmluZyA9IE5MUy5iaW5kKE1lc3NhZ2VzLl9VSV9MQUJFTF9VTkRFRklORURfQVJHMSwgYXJncyk7Ci0JCSAgU3RyaW5nIGN1c3RvbWl6ZWRNZXNzYWdlID0gZ2V0UHJvZHVjdEN1c3RvbWl6ZWRNZXNzYWdlKCJfVUlfTEFCRUxfVU5ERUZJTkVEX0FSRzEiLCBhcmdzKTsgLy8kTk9OLU5MUy0xJAotCQkgIGlmIChjdXN0b21pemVkTWVzc2FnZSAhPSBudWxsICYmICFjdXN0b21pemVkTWVzc2FnZS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQkgIHN0cmluZyA9IGN1c3RvbWl6ZWRNZXNzYWdlOwotCQkgIHJldHVybiBzdHJpbmc7Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgU3RyaW5nIGdldE5vUGFyYW1ldGVyc1NwZWNpZmllZFN0cmluZygpIHsKLQkJICBTdHJpbmdbXSBhcmdzID0gbmV3IFN0cmluZ1swXTsKLQkJICBTdHJpbmcgc3RyaW5nID0gTkxTLmJpbmQoTWVzc2FnZXMuX1VJX0xBQkVMX05PX1BBUkFNRVRFUlNfU1BFQ0lGSUVELCBhcmdzKTsKLQkJICBTdHJpbmcgY3VzdG9taXplZE1lc3NhZ2UgPSBnZXRQcm9kdWN0Q3VzdG9taXplZE1lc3NhZ2UoIl9VSV9MQUJFTF9OT19QQVJBTUVURVJTX1NQRUNJRklFRCIsIGFyZ3MpOyAvLyROT04tTkxTLTEkCi0JCSAgaWYgKGN1c3RvbWl6ZWRNZXNzYWdlICE9IG51bGwgJiYgIWN1c3RvbWl6ZWRNZXNzYWdlLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLQkJCSAgc3RyaW5nID0gY3VzdG9taXplZE1lc3NhZ2U7Ci0JCSAgcmV0dXJuIHN0cmluZzsKLQkgIH0KLQkgIAotCSAgLyoqCi0JICAgKiBSZXR1cm5zIGEgY3VzdG9tZWQgcHJvZHVjdC1iYXNlZCBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBhcmd1bWVudHMKLQkgICAqIG9yIG51bGwgaWYgbm9uZSBleGlzdHMuCi0JICAgKiBAcGFyYW0ga2V5Ci0JICAgKiBAcGFyYW0gYXJncwotCSAgICogQHJldHVybiBTdHJpbmcgY3VzdG9taXplZCBtZXNzYWdlIG9yIG51bGwgaWYgbm9uZSBleGlzdHMKLQkgICAqLwotCSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UHJvZHVjdEN1c3RvbWl6ZWRNZXNzYWdlKFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MpIHsKLQkJICBTdHJpbmcgcHJvZHVjdE1lc3NhZ2UgPSBudWxsOwotCQkgIAotCQkgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotCQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCQkgIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKW9iamVjdDsKLQkJCSAgU3RyaW5nIGN1c3RvbWl6ZWRTdHJpbmcgPSBudWxsOwotCQkJICBpZiAoYXJncyA9PSBudWxsKSB7Ci0JCQkJICBjdXN0b21pemVkU3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKGtleSk7Ci0JCQkgIH0KLQkJCSAgZWxzZSB7Ci0JCQkJICBjdXN0b21pemVkU3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKGtleSwgYXJncyk7Ci0JCQkgIH0KLQkJCSAgCi0JCQkgIGlmIChjdXN0b21pemVkU3RyaW5nICE9IG51bGwgJiYgIWN1c3RvbWl6ZWRTdHJpbmcuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJICBwcm9kdWN0TWVzc2FnZSA9IGN1c3RvbWl6ZWRTdHJpbmc7Ci0JCQkgIH0KLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIHByb2R1Y3RNZXNzYWdlOwotCSAgfQotICB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMU9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U5YTZmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMU9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5EZWZhdWx0RWRpdG9yTW9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExUmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRGYXVsdEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRJbnB1dEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRPcGVyYXRpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkT3V0cHV0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5FZGl0b3JNb2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFcxMU9wZXJhdGlvbiBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElPcGVyYXRpb24gewotCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCkKLQl7Ci0JCUxpc3QgbW9kZWxBZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoZ2V0T3BlcmF0aW9uKCkuZ2V0RUZhdWx0cygpLnNpemUoKSArIDIpOwotCQkKLQkJSW5wdXQgaW5wdXQgPSBnZXRPcGVyYXRpb24oKS5nZXRFSW5wdXQoKTsKLQkJT3V0cHV0IG91dHB1dCA9IGdldE9wZXJhdGlvbigpLmdldEVPdXRwdXQoKTsKLQkJCi0JCU9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IGdldE9wZXJhdGlvbigpLmdldFN0eWxlKCk7Ci0JCWlmIChvcGVyYXRpb25UeXBlICE9IG51bGwpIHsKLQkJCWlmIChvcGVyYXRpb25UeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UpICYmIGlucHV0ICE9IG51bGwgJiYgb3V0cHV0ICE9IG51bGwpIHsKLQkJCQkvLyBJbnB1dCwgT3V0cHV0Ci0JCQkJbW9kZWxBZGFwdGVyTGlzdC5hZGQoY3JlYXRlQWRhcHRlcihpbnB1dCkpOwotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIob3V0cHV0KSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvcGVyYXRpb25UeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0UpICYmIGlucHV0ICE9IG51bGwgJiYgb3V0cHV0ICE9IG51bGwpIHsKLQkJCQkvLyBPdXRwdXQsIElucHV0Ci0JCQkJbW9kZWxBZGFwdGVyTGlzdC5hZGQoY3JlYXRlQWRhcHRlcihvdXRwdXQpKTsKLQkJCQltb2RlbEFkYXB0ZXJMaXN0LmFkZChjcmVhdGVBZGFwdGVyKGlucHV0KSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvcGVyYXRpb25UeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLk9ORV9XQVkpICYmIGlucHV0ICE9IG51bGwpIHsKLQkJCQkvLyBJbnB1dAotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIoaW5wdXQpKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9wZXJhdGlvblR5cGUuZXF1YWxzKE9wZXJhdGlvblR5cGUuTk9USUZJQ0FUSU9OKSAmJiBvdXRwdXQgIT0gbnVsbCkgewotCQkJCS8vT3V0cHV0Ci0JCQkJbW9kZWxBZGFwdGVyTGlzdC5hZGQoY3JlYXRlQWRhcHRlcihvdXRwdXQpKTsKLQkJCX0KLQkJfQotCQkKLQkJZm9yIChJdGVyYXRvciBpID0gZ2V0T3BlcmF0aW9uKCkuZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykJewotCQkJRU9iamVjdCBvID0gKEVPYmplY3QpIGkubmV4dCgpOwotCQkJbW9kZWxBZGFwdGVyTGlzdC5hZGQoY3JlYXRlQWRhcHRlcihvKSk7Ci0JCX0KLQotCQlyZXR1cm4gbW9kZWxBZGFwdGVyTGlzdDsKLQl9Ci0JCi0JLy8gQ29udmllbmVuY2UgbWV0aG9kCi0JcHVibGljIE9wZXJhdGlvbiBnZXRPcGVyYXRpb24oKQotCXsKLQkJcmV0dXJuIChPcGVyYXRpb24pIHRhcmdldDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBnZXRPcGVyYXRpb24oKS5nZXROYW1lKCk7Ci0JfQotCQotCXB1YmxpYyBJSW50ZXJmYWNlIGdldE93bmVySW50ZXJmYWNlKCkKLQl7Ci0JCXJldHVybiAoSUludGVyZmFjZSlvd25lcjsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotCQlMaXN0IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFjdGlvbnMuYWRkKEFTREFkZE9wZXJhdGlvbkFjdGlvbi5JRCk7Ci0JCWFjdGlvbnMuYWRkQWxsKGdldFZhbGlkSW5wdXRPdXRwdUFjdGlvbnMoKSk7Ci0JCWFjdGlvbnMuYWRkKEFTREFkZEZhdWx0QWN0aW9uLklEKTsKLQkJYWN0aW9ucy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLSAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0gICAgICBhY3Rpb25zLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgIH0KLQkJCi0JCVN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbYWN0aW9ucy5zaXplKCldOwotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYWN0aW9ucy5zaXplKCk7IGluZGV4KyspIHsKLQkJCWFjdGlvbklEc1tpbmRleF0gPSAoU3RyaW5nKSBhY3Rpb25zLmdldChpbmRleCk7Ci0JCX0KLQkJCi0JCXJldHVybiBhY3Rpb25JRHM7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZElucHV0Q29tbWFuZCgpIHsKLQkJVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kKGdldE9wZXJhdGlvbigpKTsKLQkJCi0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgICBFZGl0b3JNb2RlTWFuYWdlciBtYW5hZ2VyID0gKEVkaXRvck1vZGVNYW5hZ2VyKSBlZGl0b3IuZ2V0QWRhcHRlcihFZGl0b3JNb2RlTWFuYWdlci5jbGFzcyk7Ci0JCWlmIChtYW5hZ2VyLmdldEN1cnJlbnRNb2RlKCkuZ2V0SWQoKSAhPSBEZWZhdWx0RWRpdG9yTW9kZS5jbGFzcy5nZXROYW1lKCkpIHsKLQkJCWNvbW1hbmQuc2V0UGFyYW1ldGVyUGF0dGVybihBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpOwotCQl9Ci0KLQkJcmV0dXJuIGNvbW1hbmQ7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZE91dHB1dENvbW1hbmQoKSB7Ci0JCVcxMUFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBXMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kKGdldE9wZXJhdGlvbigpKTsKLQkJCi0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgICBFZGl0b3JNb2RlTWFuYWdlciBtYW5hZ2VyID0gKEVkaXRvck1vZGVNYW5hZ2VyKSBlZGl0b3IuZ2V0QWRhcHRlcihFZGl0b3JNb2RlTWFuYWdlci5jbGFzcyk7Ci0JCWlmIChtYW5hZ2VyLmdldEN1cnJlbnRNb2RlKCkuZ2V0SWQoKSAhPSBEZWZhdWx0RWRpdG9yTW9kZS5jbGFzcy5nZXROYW1lKCkpIHsKLQkJCWNvbW1hbmQuc2V0UGFyYW1ldGVyUGF0dGVybihBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpOwotCQl9Ci0KLQkJcmV0dXJuIGNvbW1hbmQ7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZEZhdWx0Q29tbWFuZChPYmplY3QgZmF1bHQpIHsKLQkJVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kKGdldE9wZXJhdGlvbigpLCBudWxsKTsKLQkJCi0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgICBFZGl0b3JNb2RlTWFuYWdlciBtYW5hZ2VyID0gKEVkaXRvck1vZGVNYW5hZ2VyKSBlZGl0b3IuZ2V0QWRhcHRlcihFZGl0b3JNb2RlTWFuYWdlci5jbGFzcyk7Ci0JCWlmIChtYW5hZ2VyLmdldEN1cnJlbnRNb2RlKCkuZ2V0SWQoKSAhPSBEZWZhdWx0RWRpdG9yTW9kZS5jbGFzcy5nZXROYW1lKCkpIHsKLQkJCWNvbW1hbmQuc2V0UGFyYW1ldGVyUGF0dGVybihBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpOwotCQl9Ci0KLQkJcmV0dXJuIGNvbW1hbmQ7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQoSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYmxpbmcsIElNZXNzYWdlUmVmZXJlbmNlIHJpZ2h0U2libGluZywgSU1lc3NhZ2VSZWZlcmVuY2UgbW92aW5nTWVzc2FnZVJlZikgewotCQlyZXR1cm4gbmV3IFcxMVJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQobGVmdFNpYmxpbmcsIHJpZ2h0U2libGluZywgbW92aW5nTWVzc2FnZVJlZik7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldFZhbGlkSW5wdXRPdXRwdUFjdGlvbnMoKSB7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCWlmIChnZXRPcGVyYXRpb24oKS5nZXRFSW5wdXQoKSA9PSBudWxsKSB7Ci0JCQlsaXN0LmFkZChBU0RBZGRJbnB1dEFjdGlvbi5JRCk7Ci0JCX0KLQkJaWYgKGdldE9wZXJhdGlvbigpLmdldEVPdXRwdXQoKSA9PSBudWxsKSB7Ci0JCQlsaXN0LmFkZChBU0RBZGRPdXRwdXRBY3Rpb24uSUQpOwotCQl9Ci0JCQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9vcGVyYXRpb25fb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJvcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBtZXNzYWdlcyA9IGdldE1lc3NhZ2VzKCk7Ci0JCUlUcmVlRWxlbWVudFtdIHRyZWVFbGVtZW50cyA9IG5ldyBJVHJlZUVsZW1lbnRbbWVzc2FnZXMuc2l6ZSgpXTsKLQkJCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBtZXNzYWdlcy5zaXplKCk7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50c1tpbmRleF0gPSAoSVRyZWVFbGVtZW50KSBtZXNzYWdlcy5nZXQoaW5kZXgpOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJlZUVsZW1lbnRzOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlpZiAoZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvckF0dHJpYnV0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM4MjI4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvckF0dHJpYnV0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXROZXdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Qcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotLy9pbXBvcnQgY29tLmlibS5jY2wuc29hLnNkby53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLlNET1cxMURlbGV0ZUNvbW1hbmQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJUGFyYW1ldGVyIHsKLQkKLQlwcm90ZWN0ZWQgWFNEQXR0cmlidXRlVXNlIGdldFhTREF0dHJpYnV0ZVVzZSgpIHsKLQkJcmV0dXJuIChYU0RBdHRyaWJ1dGVVc2UpIHRhcmdldDsKLQl9Ci0KLQlwcm90ZWN0ZWQgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gZ2V0WFNEQXR0dHJpYnV0ZURlY2xhcmF0aW9uKCkgewotCQlYU0RBdHRyaWJ1dGVVc2UgYXR0clVzZSA9IGdldFhTREF0dHJpYnV0ZVVzZSgpOwotCQlyZXR1cm4gYXR0clVzZS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpOwkJCi0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0T3duZXIoKSB7Ci0JCXJldHVybiAoSU1lc3NhZ2VSZWZlcmVuY2UpIG93bmVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIGdldFhTREF0dHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkgewotCQlYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbCA9IGdldFhTREF0dHRyaWJ1dGVEZWNsYXJhdGlvbigpOwotCQkKLQkJaWYgKGF0dHJEZWNsLmdldFR5cGUoKSAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gYXR0ckRlY2wuZ2V0VHlwZSgpLmdldE5hbWUoKTsKLQkJfQotCQkKLQkJcmV0dXJuICJlcnJvcjogY291bGQgbm90IGdldCB0eXBlIG5hbWUiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZVF1YWxpZmllcigpIHsKLSAgICAgICAgWFNEVHlwZURlZmluaXRpb24gdGQgPSBnZXRYU0RBdHR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgICByZXR1cm4gdGQgIT0gbnVsbCA/IHRkLmdldFRhcmdldE5hbWVzcGFjZSgpIDogbnVsbDsKLQl9Ci0JCi0JICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAgICAgICAgTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgIC8vbGlzdC5hZGQoQVNEQWRkT3BlcmF0aW9uQWN0aW9uLklEKTsKLSAgICAgICAgICAvL2xpc3QuYWRkKEFTREFkZElucHV0QWN0aW9uLklEKTsKLSAgICAgICAgICAvL2xpc3QuYWRkKEFTREFkZE91dHB1dEFjdGlvbi5JRCk7Ci0gICAgICAgICAgLy9saXN0LmFkZChBU0RBZGRGYXVsdEFjdGlvbi5JRCk7Ci0gICAgICAgICAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lEICsgTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfVFlQRSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBhY3Rpb25zLmFkZChXMTFTZXROZXdUeXBlQWN0aW9uLklEKTsKLSAgICAgICAgICBhY3Rpb25zLmFkZChXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uSUQpOwotICAgICAgICAgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9FTkRfSUQpOwotCi0gICAgICAgICAgYWN0aW9ucy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsgICAgCi0gICAgICAgICAgU3RyaW5nW10gcmVzdWx0ID0gbmV3IFN0cmluZ1thY3Rpb25zLnNpemUoKV07Ci0gICAgICAgICAgYWN0aW9ucy50b0FycmF5KHJlc3VsdCk7Ci0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgQ29tbWFuZCBnZXREZWxldGVDb21tYW5kKCkgewotICAgICAgICByZXR1cm4gbmV3IFcxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQodGhpcyk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldFR5cGVDb21tYW5kKFN0cmluZyBpZCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiBnZXRQYXJhbWV0ZXJTdHJpbmcoImF0dHJpYnV0ZSIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldFBhcmFtZXRlclN0cmluZyhTdHJpbmcgdHh0KSB7Ci0JCVN0cmluZyBzdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQlPYmplY3Qgb2JqZWN0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIoKTsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpIHsKLQkJCVByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKW9iamVjdDsKLQkJCVN0cmluZyBuZXdTdHJpbmcgPSBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyLmdldFByb2R1Y3RTdHJpbmcoIl9VSV9MQUJFTF9QQVJBTUVURVJfQVJHIiwgbmV3IE9iamVjdFtde3R4dH0pOyAvLyROT04tTkxTLTEkCi0JCQlpZiAobmV3U3RyaW5nICE9IG51bGwpIHsKLQkJCQlzdHJpbmcgPSBuZXdTdHJpbmc7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gc3RyaW5nOwotCX0KLQkgIAotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG5ldyBJVHJlZUVsZW1lbnRbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvckVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM1NDE3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3VHlwZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVJlbmFtZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExU2V0VHlwZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Qcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50IGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSVBhcmFtZXRlcgotewotICBwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gKChYU0RFbGVtZW50RGVjbGFyYXRpb24pIHRhcmdldCkuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotCVN0cmluZyBjb21wTmFtZSA9ICIiOy8vICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJfVUlfTEFCRUxfTk9fVFlQRV9TUEVDSUZJRUQiKSArICIpIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiBhbm9ueW1vdXNUeXBlID0gZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKTsKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiB0ZCA9IGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgCi0gICAgaWYgKGFub255bW91c1R5cGUgIT0gbnVsbCkgewotICAgICAgICBjb21wTmFtZSA9ICIqKmFub255bW91cyoqIjsgIC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICByZXR1cm4gKHRkICE9IG51bGwgJiYgdGQuZ2V0TmFtZSgpICE9IG51bGwpID8gdGQuZ2V0TmFtZSgpIDogY29tcE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWVRdWFsaWZpZXIoKQotICB7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gdGQgPSBnZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKS5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIHJldHVybiB0ZCAhPSBudWxsID8gdGQuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgOiBudWxsOwotICAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotCSAgTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCSAgLy9saXN0LmFkZChBU0RBZGRPcGVyYXRpb25BY3Rpb24uSUQpOwotICAgICAgLy9saXN0LmFkZChBU0RBZGRJbnB1dEFjdGlvbi5JRCk7Ci0gICAgICAvL2xpc3QuYWRkKEFTREFkZE91dHB1dEFjdGlvbi5JRCk7Ci0gICAgICAvL2xpc3QuYWRkKEFTREFkZEZhdWx0QWN0aW9uLklEKTsKLSAgICAgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCArIE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX1RZUEUpOyAvLyROT04tTkxTLTEkCi0gICAgICBhY3Rpb25zLmFkZChXMTFTZXROZXdUeXBlQWN0aW9uLklEKTsKLSAgICAgIGFjdGlvbnMuYWRkKFcxMVNldEV4aXN0aW5nVHlwZUFjdGlvbi5JRCk7Ci0gICAgICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLSAgICAgCi0gICAgICBhY3Rpb25zLmFkZChBU0REZWxldGVBY3Rpb24uSUQpOwkgIAotICAgICAgU3RyaW5nW10gcmVzdWx0ID0gbmV3IFN0cmluZ1thY3Rpb25zLnNpemUoKV07Ci0gICAgICBhY3Rpb25zLnRvQXJyYXkocmVzdWx0KTsKLQkgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgQ29tbWFuZCBnZXREZWxldGVDb21tYW5kKCkKLSAgewotICAgIHJldHVybiBuZXcgVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZCh0aGlzKTsKLSAgfQotCi0gIHB1YmxpYyBDb21tYW5kIGdldFNldFR5cGVDb21tYW5kKFN0cmluZyBhY3Rpb25JZCkgewotCSAgcmV0dXJuIG5ldyBXMTFTZXRUeXBlQ29tbWFuZCh0aGlzLmdldFRhcmdldCgpLCBhY3Rpb25JZCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb21tYW5kIGdldFNldE5hbWVDb21tYW5kKFN0cmluZyBuZXdOYW1lKSB7ICAgIAotICAgIHJldHVybiBuZXcgVzExUmVuYW1lQ29tbWFuZCh0aGlzLCBuZXdOYW1lKSB7Ci0gICAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotICAJCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhnZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKS5nZXRFbGVtZW50KCkpOwotCQkJZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuc2V0TmFtZShuZXdOYW1lKTsKLSAgCQl9Ci0gIAkJZmluYWxseSB7Ci0gIAkJCWVuZFJlY29yZGluZyhnZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKS5nZXRFbGVtZW50KCkpOwotICAJCX0KLSAgICAgIH0KLSAgICB9OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0T3duZXIoKQotICB7Ci0JICByZXR1cm4gKElNZXNzYWdlUmVmZXJlbmNlKSBvd25lcjsKLSAgfQotICAKLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiBnZXRQYXJhbWV0ZXJTdHJpbmcoImVsZW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQkgIHByaXZhdGUgU3RyaW5nIGdldFBhcmFtZXRlclN0cmluZyhTdHJpbmcgdHh0KSB7Ci0JCSAgU3RyaW5nIHN0cmluZyA9ICIiOyAvLyROT04tTkxTLTEkCi0JCSAgT2JqZWN0IG9iamVjdCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKCk7Ci0JCSAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpIHsKLQkJCSAgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyID0gKFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpb2JqZWN0OwotCQkJICBTdHJpbmcgbmV3U3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKCJfVUlfTEFCRUxfUEFSQU1FVEVSX0FSRyIsIG5ldyBPYmplY3RbXXt0eHR9KTsgLy8kTk9OLU5MUy0xJAotCQkJICBpZiAobmV3U3RyaW5nICE9IG51bGwpIHsKLQkJCQkgIHN0cmluZyA9IG5ld1N0cmluZzsKLQkJCSAgfQotCQkgIH0KLQotCQkgIHJldHVybiBzdHJpbmc7Ci0JICB9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlyZXR1cm4gbmV3IElUcmVlRWxlbWVudFswXTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvclBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yUGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2JhZTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yUGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMUFkZFBhcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXROZXdFbGVtZW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3VHlwZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRFbGVtZW50Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRUeXBlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRGYXVsdEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRPcGVyYXRpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLk1vZGVsRGlhZ25vc3RpY0luZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBXMTFQYXJhbWV0ZXJGb3JQYXJ0IGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSVBhcmFtZXRlcgotewotICBwcm90ZWN0ZWQgUGFydCBnZXRQYXJ0KCkKLSAgewotICAgIHJldHVybiAoUGFydCkgdGFyZ2V0OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBnZXRQYXJ0KCkuZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgIGlmIChnZXRQYXJ0KCkuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIHJldHVybiBnZXRQYXJ0KCkuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChnZXRQYXJ0KCkuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBnZXRQYXJ0KCkuZ2V0VHlwZURlZmluaXRpb24oKS5nZXROYW1lKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0Tm9OYW1lU3BlY2lmaWVkU3RyaW5nKCk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldE5vTmFtZVNwZWNpZmllZFN0cmluZygpIHsKLQkgIHJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lUXVhbGlmaWVyKCkKLSAgewotICAgIGlmIChnZXRQYXJ0KCkuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIHJldHVybiBnZXRQYXJ0KCkuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGdldFBhcnQoKS5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGdldFBhcnQoKS5nZXRUeXBlRGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgeyAgCi0gICAgICByZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICB9ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotCSAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE11bHRpUGFnZUVkaXRvclBhcnQpIHsKLQkJICBJT3BlcmF0aW9uIG9wZXJhdGlvbiA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIGdldE93bmVyKCkpLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0KLQkJICBMaXN0IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCSAgYWN0aW9ucy5hZGQoVzExQWRkUGFydEFjdGlvbi5JRCk7Ci0JCSAgYWN0aW9ucy5hZGQoQVNEQWRkT3BlcmF0aW9uQWN0aW9uLklEKTsKLQkJICBhY3Rpb25zLmFkZEFsbCgoKFcxMU9wZXJhdGlvbikgb3BlcmF0aW9uKS5nZXRWYWxpZElucHV0T3V0cHVBY3Rpb25zKCkpOwotCQkgIGFjdGlvbnMuYWRkKEFTREFkZEZhdWx0QWN0aW9uLklEKTsKLQkJICAKLQkJICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQgKyBNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9UWVBFKTsgLy8kTk9OLU5MUy0xJAotCQkgIGFjdGlvbnMuYWRkKFcxMVNldE5ld1R5cGVBY3Rpb24uSUQpOwotCQkgIGFjdGlvbnMuYWRkKFcxMVNldEV4aXN0aW5nVHlwZUFjdGlvbi5JRCk7Ci0JCSAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCk7Ci0KLQkJICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQgKyBNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9FTEVNRU5UKTsgLy8kTk9OLU5MUy0xJAotCQkgIGFjdGlvbnMuYWRkKFcxMVNldE5ld0VsZW1lbnRBY3Rpb24uSUQpOwotCQkgIGFjdGlvbnMuYWRkKFcxMVNldEV4aXN0aW5nRWxlbWVudEFjdGlvbi5JRCk7Ci0JCSAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCk7CQkgIAotCQkgIAotCQkgIGFjdGlvbnMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0gICAgICAKLSAgICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgYWN0aW9ucy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICAgIH0KLQkJICAKLQkJICBTdHJpbmdbXSBhY3Rpb25JRHMgPSBuZXcgU3RyaW5nW2FjdGlvbnMuc2l6ZSgpXTsKLQkJICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYWN0aW9ucy5zaXplKCk7IGluZGV4KyspIHsKLQkJCSAgYWN0aW9uSURzW2luZGV4XSA9IChTdHJpbmcpIGFjdGlvbnMuZ2V0KGluZGV4KTsKLQkJICB9Ci0JICAKLQkJICByZXR1cm4gYWN0aW9uSURzOwotCSAgfQotCSAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7Ci0JCSAgU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1syXTsKLQkJICBhY3Rpb25JRHNbMF0gPSBXMTFBZGRQYXJ0QWN0aW9uLklEOwotCQkgIGFjdGlvbklEc1sxXSA9IEFTRERlbGV0ZUFjdGlvbi5JRDsKLQkJICAKLQkJICByZXR1cm4gYWN0aW9uSURzOwotCSAgfQotCSAgCi0JICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZ2V0T3duZXIoKQotICB7Ci0JICByZXR1cm4gb3duZXI7Ci0gIH0KLSAgCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wYXJ0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLSAgICAKLSAgICBwdWJsaWMgSW1hZ2UgZ2V0U2Vjb25kYXJ5SW1hZ2UoKSB7Ci0gICAgICAKLSAgICAgIGlmIChnZXRQYXJ0KCkuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHsgIAotICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9lbGVtZW50X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgZWxzZSBpZiAoZ2V0UGFydCgpLmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGdldFBhcnQoKS5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgICAgICB7ICAKLSAgICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9jb21wbGV4dHlwZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9zaW1wbGV0eXBlX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9ICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgIAotICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wYXJ0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfSAgCi0gICAgfSAgICAKLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAicGFydCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlyZXR1cm4gbmV3IElUcmVlRWxlbWVudFswXTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0VHlwZUNvbW1hbmQoU3RyaW5nIGFjdGlvbklkKSB7Ci0JCXJldHVybiBuZXcgVzExU2V0VHlwZUNvbW1hbmQoKFBhcnQpIHRoaXMuZ2V0VGFyZ2V0KCksIGFjdGlvbklkKTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0RWxlbWVudENvbW1hbmQoU3RyaW5nIGFjdGlvbklkKSB7Ci0JCXJldHVybiBuZXcgVzExU2V0RWxlbWVudENvbW1hbmQoKFBhcnQpIHRoaXMuZ2V0VGFyZ2V0KCksIGFjdGlvbklkKTsKLQl9Ci0JCi0JLy8gVE9ETzogV2Ugc2hvdWxkIG1vdmUgdGhlIGlzVHlwZSgpIG1ldGhvZCB0byB0aGUgSVBhcmFtZXRlciBJbnRlcmZhY2UuLi4uLi4uLgotCXB1YmxpYyBib29sZWFuIGlzVHlwZSgpIHsKLQkJUGFydCBwYXJ0ID0gKFBhcnQpIHRhcmdldDsKLQkJaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlcygpIHsKLQkJTGlzdCBlcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCVBhcnQgcGFydCA9IChQYXJ0KSBnZXRUYXJnZXQoKTsKLQkJaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgPT0gbnVsbCAmJiBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgPT0gbnVsbCkgewotCQkJU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbMl07Ci0JCQlhcmdzWzBdID0gImVsZW1lbnQiOyAvLyROT04tTkxTLTEkCi0JCQlhcmdzWzFdID0gInR5cGUiOyAvLyROT04tTkxTLTEkCi0JCQkKLQkJCVN0cmluZyBzdHJpbmcgPSBOTFMuYmluZChNZXNzYWdlcy5fVUlfTEFCRUxfT1JfVU5ERUZJTkVEX0FSRzIsIGFyZ3MpOwotCQkJU3RyaW5nIGN1c3RvbWl6ZWRNZXNzYWdlID0gZ2V0UHJvZHVjdEN1c3RvbWl6ZWRNZXNzYWdlKCJfVUlfTEFCRUxfT1JfVU5ERUZJTkVEX0FSRzIiLCBhcmdzKTsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKGN1c3RvbWl6ZWRNZXNzYWdlICE9IG51bGwgJiYgIWN1c3RvbWl6ZWRNZXNzYWdlLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLQkJCQlzdHJpbmcgPSBjdXN0b21pemVkTWVzc2FnZTsKLQkJCQotCQkJTW9kZWxEaWFnbm9zdGljSW5mbyBpbmZvID0gbmV3IE1vZGVsRGlhZ25vc3RpY0luZm8oc3RyaW5nLCBNb2RlbERpYWdub3N0aWNJbmZvLkVSUk9SX1RZUEUsIG51bGwpOwotCQkJZXJyb3JzLmFkZChpbmZvKTsKLQkJfQotCQkKLQkJcmV0dXJuIGVycm9yczsKLQl9Ci0JCi0JICAvKioKLQkgICAqIFJldHVybnMgYSBjdXN0b21lZCBwcm9kdWN0LWJhc2VkIG1lc3NhZ2UgZm9yIHRoZSBnaXZlbiBrZXkgYW5kIGFyZ3VtZW50cwotCSAgICogb3IgbnVsbCBpZiBub25lIGV4aXN0cy4KLQkgICAqIEBwYXJhbSBrZXkKLQkgICAqIEBwYXJhbSBhcmdzCi0JICAgKiBAcmV0dXJuIFN0cmluZyBjdXN0b21pemVkIG1lc3NhZ2Ugb3IgbnVsbCBpZiBub25lIGV4aXN0cwotCSAgICovCi0JICBwcml2YXRlIFN0cmluZyBnZXRQcm9kdWN0Q3VzdG9taXplZE1lc3NhZ2UoU3RyaW5nIGtleSwgT2JqZWN0W10gYXJncykgewotCQkgIFN0cmluZyBwcm9kdWN0TWVzc2FnZSA9IG51bGw7Ci0JCSAgCi0JCSAgT2JqZWN0IG9iamVjdCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKCk7Ci0JCSAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpIHsKLQkJCSAgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyID0gKFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpb2JqZWN0OwotCQkJICBTdHJpbmcgY3VzdG9taXplZFN0cmluZyA9IG51bGw7Ci0JCQkgIGlmIChhcmdzID09IG51bGwpIHsKLQkJCQkgIGN1c3RvbWl6ZWRTdHJpbmcgPSBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyLmdldFByb2R1Y3RTdHJpbmcoa2V5KTsKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQkgIGN1c3RvbWl6ZWRTdHJpbmcgPSBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyLmdldFByb2R1Y3RTdHJpbmcoa2V5LCBhcmdzKTsKLQkJCSAgfQotCQkJICAKLQkJCSAgaWYgKGN1c3RvbWl6ZWRTdHJpbmcgIT0gbnVsbCAmJiAhY3VzdG9taXplZFN0cmluZy5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkgIHByb2R1Y3RNZXNzYWdlID0gY3VzdG9taXplZFN0cmluZzsKLQkJCSAgfQotCQkgIH0KLQotCQkgIHJldHVybiBwcm9kdWN0TWVzc2FnZTsKLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZTBhMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkRW5kUG9pbnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEVuZFBvaW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QudXRpbC5FbmRQb2ludENvbXBhcmF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXJ2aWNlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSVNlcnZpY2UgewotCi0JcHVibGljIExpc3QgZ2V0RW5kUG9pbnRzKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlMaXN0IGVuZFBvaW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSXRlcmF0b3IgaXQgPSAoKFNlcnZpY2UpIHRhcmdldCkuZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJZW5kUG9pbnRzLmFkZChpdC5uZXh0KCkpOwotCQl9Ci0KLQkJcG9wdWxhdGVBZGFwdGVyTGlzdChlbmRQb2ludHMsIGFkYXB0ZXJMaXN0KTsKLQkJQ29sbGVjdGlvbnMuc29ydChhZGFwdGVyTGlzdCwgbmV3IEVuZFBvaW50Q29tcGFyYXRvcigpKTsKLQotCQlyZXR1cm4gYWRhcHRlckxpc3Q7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gKChTZXJ2aWNlKSB0YXJnZXQpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldEZpZWxkcygpIHsKLQkJcmV0dXJuIGdldEVuZFBvaW50cygpOwotCX0KLQkKLQlwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoSURlc2NyaXB0aW9uKSBvd25lcjsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotICAgIExpc3QgYWN0aW9uSURzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhY3Rpb25JRHMuYWRkKEFTREFkZEVuZFBvaW50QWN0aW9uLklEKTsKLQkJYWN0aW9uSURzLmFkZChBU0REZWxldGVBY3Rpb24uSUQpOwotCi0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZyBbXSlhY3Rpb25JRHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0gICAgCi0gICAgcHVibGljIENvbW1hbmQgZ2V0QWRkRW5kUG9pbnRDb21tYW5kKCkgewotICAgICAgcmV0dXJuIG5ldyBXMTFBZGRFbmRQb2ludENvbW1hbmQoKFNlcnZpY2UpdGFyZ2V0KTsKLSAgICB9Ci0gICAgCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9zZXJ2aWNlX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAic2VydmljZSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlMaXN0IGVuZFBvaW50cyA9IGdldEVuZFBvaW50cygpOwotCQlJVHJlZUVsZW1lbnRbXSB0cmVlRWxlbWVudHMgPSBuZXcgSVRyZWVFbGVtZW50W2VuZFBvaW50cy5zaXplKCldOwotCQkKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGVuZFBvaW50cy5zaXplKCk7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50c1tpbmRleF0gPSAoSVRyZWVFbGVtZW50KSBlbmRQb2ludHMuZ2V0KGluZGV4KTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50czsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJaWYgKGdldENoaWxkcmVuKCkubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIwZGRmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNET3BlblNjaGVtYUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgVzExVHlwZSBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElUeXBlIHsKLQlwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoSURlc2NyaXB0aW9uKSBvd25lcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCVhTRFNjaGVtYSBzY2hlbWE9IChYU0RTY2hlbWEpIHRhcmdldDsKLQkJcmV0dXJuIHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotCQlTdHJpbmdbXSBhY3Rpb25JRHMgPSBuZXcgU3RyaW5nWzJdOwotCQlhY3Rpb25JRHNbMF0gPSBBU0RPcGVuU2NoZW1hQWN0aW9uLklEOwotCQlhY3Rpb25JRHNbMV0gPSBBU0REZWxldGVBY3Rpb24uSUQ7CQotCQlyZXR1cm4gYWN0aW9uSURzOwotCX0KLQkKLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3hzZF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gInNjaGVtYSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlyZXR1cm4gbmV3IElUcmVlRWxlbWVudFswXTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVR5cGVzQ2F0ZWdvcnlBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVR5cGVzQ2F0ZWdvcnlBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhODU0MTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlc0NhdGVnb3J5QWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMVR5cGVzQ2F0ZWdvcnlBZGFwdGVyIGV4dGVuZHMgVzExQ2F0ZWdvcnlBZGFwdGVyIHsKLQlwdWJsaWMgVzExVHlwZXNDYXRlZ29yeUFkYXB0ZXIoSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uLCBTdHJpbmcgbGFiZWwsIEltYWdlIGltYWdlLCBpbnQgZ3JvdXBUeXBlKSB7Ci0JCXN1cGVyKGRlc2NyaXB0aW9uLCBsYWJlbCxpbWFnZSwgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCwgZ3JvdXBUeXBlKTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCUxpc3QgdHlwZXMgPSAoKFcxMURlc2NyaXB0aW9uKSBnZXRPd25lckRlc2NyaXB0aW9uKCkpLmdldFR5cGVzKCk7Ci0JCXJldHVybiAoSVRyZWVFbGVtZW50W10pIHR5cGVzLnRvQXJyYXkobmV3IElUcmVlRWxlbWVudFswXSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRCaW5kaW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRCaW5kaW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzVkNTYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkQmluZGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkQmluZGluZ0NvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmQgewotCXByaXZhdGUgU3RyaW5nIG5ld05hbWU7Ci0JcHJpdmF0ZSBCaW5kaW5nIG5ld0JpbmRpbmc7Ci0JCi0JcHVibGljIFcxMUFkZEJpbmRpbmdDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0JJTkRJTkcsIGRlZmluaXRpb24pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXROZXdCaW5kaW5nTmFtZShTdHJpbmcgbmV3TmFtZSkgewotCQl0aGlzLm5ld05hbWUgPSBuZXdOYW1lOwotCX0KLQkKLQlwdWJsaWMgQmluZGluZyBnZXROZXdCaW5kaW5nKCkgewotCQlyZXR1cm4gbmV3QmluZGluZzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJCXN1cGVyLmV4ZWN1dGUoKTsKLQkJCWlmIChuZXdOYW1lID09IG51bGwgfHwgbmV3TmFtZS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQluZXdOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVCaW5kaW5nTmFtZShkZWZpbml0aW9uLCAiTmV3QmluZGluZyIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQkKLQkJCUFkZEJpbmRpbmdDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkQmluZGluZ0NvbW1hbmQoZGVmaW5pdGlvbiwgbmV3TmFtZSk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJCi0JCQluZXdCaW5kaW5nID0gKEJpbmRpbmcpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCWZvcm1hdENoaWxkKG5ld0JpbmRpbmcuZ2V0RWxlbWVudCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gbmV3QmluZGluZzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEVuZFBvaW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRFbmRQb2ludENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY0ZTM3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEVuZFBvaW50Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Qb3J0V2l6YXJkOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkRW5kUG9pbnRDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kCi17Ci0gICAgcHJpdmF0ZSBTZXJ2aWNlIHNlcnZpY2U7Ci0gICAgcHJpdmF0ZSBQb3J0IHBvcnQ7Ci0gICAgCi0gICAgcHVibGljIFcxMUFkZEVuZFBvaW50Q29tbWFuZChTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BREQsIHNlcnZpY2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJCQotCSAgICAJUG9ydFdpemFyZCB3aXphcmQgPSBuZXcgUG9ydFdpemFyZChzZXJ2aWNlKTsKLQkJCVdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgV2l6YXJkRGlhbG9nKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCksIHdpemFyZCk7Ci0JCQl3aXphcmREaWFsb2cuY3JlYXRlKCk7Ci0KLQkJCWludCByZXN1bHQgPSB3aXphcmREaWFsb2cub3BlbigpOwotCQkJaWYgKHJlc3VsdCA9PSBXaW5kb3cuT0sgJiYgc2VydmljZS5nZXRFUG9ydHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJTGlzdCBwb3J0cyA9IHNlcnZpY2UuZ2V0RVBvcnRzKCk7Ci0JCQkJcG9ydCA9IChQb3J0KSBwb3J0cy5nZXQocG9ydHMuc2l6ZSgpIC0gMSk7Ci0JCQkJCi0JCQkJZm9ybWF0Q2hpbGQocG9ydC5nZXRFbGVtZW50KCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotICAgIH0KLQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIHBvcnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NWNlMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcm90ZWN0ZWQgT3BlcmF0aW9uIG9wZXJhdGlvbjsKLQlwcm90ZWN0ZWQgRmF1bHQgZmF1bHQ7Ci0JcHJvdGVjdGVkIE9iamVjdCBuZXdPYmplY3Q7Ci0JcHJpdmF0ZSBpbnQgcGFyYW1ldGVyUGF0dGVybiA9IC0xOwotCQotCXB1YmxpYyBXMTFBZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgRmF1bHQgZmF1bHQpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfRkFVTFQsIG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLQkJdGhpcy5mYXVsdCA9IGZhdWx0OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJQYXR0ZXJuKGludCBwYXR0ZXJuKSB7Ci0JCXBhcmFtZXRlclBhdHRlcm4gPSBwYXR0ZXJuOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCWlmIChwYXJhbWV0ZXJQYXR0ZXJuID09IC0xKSB7Ci0JCQkJLy8gRGV0ZXJtaW5lIHdoaWNoIFBhdHRlcm4gd2Ugc2hvdWxkIHVzZS4gIEZvciBleGFtcGxlLCBBRERCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQKLQkJCQlwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm5Gb3JGYXVsdChvcGVyYXRpb24sIGZhdWx0KTsKLQkJCQlpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCQlwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihvcGVyYXRpb24pOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbiwgZmF1bHQpOwotCQkJY29tbWFuZC5zZXRTdHlsZShwYXJhbWV0ZXJQYXR0ZXJuKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlmYXVsdCA9IChGYXVsdCkgY29tbWFuZC5nZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JCQluZXdPYmplY3QgPSBjb21tYW5kLmdldE5ld2x5QWRkZWRDb21wb25lbnRQYXJ0KCk7Ci0JCQkKLQkJCWlmIChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpIHsKLQkJCQkvLyBUcnkgdG8gZ3JhYiB0aGUgImlubmVyIiBYU0RFbGVtZW50Ci0JCQkJbmV3T2JqZWN0ID0gZ2V0TmV3WFNERWxlbWVudChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBuZXdPYmplY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbXBvcnRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEltcG9ydENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRhMmY4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEltcG9ydENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEltcG9ydENvbW1hbmQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRJbXBvcnRDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcml2YXRlIE9iamVjdCBjb21wb25lbnQ7Ci0JCi0JcHVibGljIFcxMUFkZEltcG9ydENvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCXN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0lNUE9SVCwgZGVmaW5pdGlvbik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCXN1cGVyLmV4ZWN1dGUoKTsKLQkJCVN0cmluZyBuYW1lc3BhY2UgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIGxvY2F0aW9uID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCUFkZEltcG9ydENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRJbXBvcnRDb21tYW5kKGRlZmluaXRpb24sIG5hbWVzcGFjZSwgbG9jYXRpb24pOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCWZvcm1hdENoaWxkKGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKS5nZXRFbGVtZW50KCkpOwotCQkJY29tcG9uZW50ID0gY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIGNvbXBvbmVudDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNDNjMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIFcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZHsKLQlwcm90ZWN0ZWQgT3BlcmF0aW9uIG9wZXJhdGlvbjsKLQlwcml2YXRlIE9iamVjdCBpbnB1dDsKLQlwcml2YXRlIGludCBwYXJhbWV0ZXJQYXR0ZXJuID0gLTE7Ci0JCi0JcHVibGljIFcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0lOUFVULCBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclBhdHRlcm4oaW50IHBhdHRlcm4pIHsKLQkJcGFyYW1ldGVyUGF0dGVybiA9IHBhdHRlcm47Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQotCQkJaWYgKHBhcmFtZXRlclBhdHRlcm4gPT0gLTEpIHsKLQkJCQkvLyBEZXRlcm1pbmUgd2hpY2ggUGF0dGVybiB3ZSBzaG91bGQgdXNlLiAgRm9yIGV4YW1wbGUsIEFEREJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVAotCQkJCXBhcmFtZXRlclBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuKG9wZXJhdGlvbiwgdHJ1ZSk7Ci0JCQkJaWYgKHBhcmFtZXRlclBhdHRlcm4gPT0gLTEpIHsKLQkJCQkJcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uKTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIHBhcmFtZXRlclBhdHRlcm4pOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCWlucHV0ID0gY29tbWFuZC5nZXROZXdseUFkZGVkQ29tcG9uZW50UGFydCgpOwotCQkJCi0JCQlmb3JtYXRDaGlsZChvcGVyYXRpb24uZ2V0RUlucHV0KCkuZ2V0RWxlbWVudCgpKTsKLQkJCWlmIChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpIHsKLQkJCQkvLyBUcnkgdG8gZ3JhYiB0aGUgImlubmVyIiBYU0RFbGVtZW50Ci0JCQkJaW5wdXQgPSBnZXROZXdYU0RFbGVtZW50KGNvbW1hbmQuZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkpOwotCQkJCWZvcm1hdENoaWxkKGdldFhTRFBhcmVudChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpKS5nZXRFbGVtZW50KCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCBYU0RDb25jcmV0ZUNvbXBvbmVudCBnZXRYU0RQYXJlbnQoWFNEQ29uY3JldGVDb21wb25lbnQgeHNkKSB7Ci0JCVhTRENvbmNyZXRlQ29tcG9uZW50IHBhcmVudCA9IHhzZC5nZXRTY2hlbWEoKTsKLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gaW5wdXQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbnRlcmZhY2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEludGVyZmFjZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNlZjdkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEludGVyZmFjZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRQb3J0VHlwZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLQotcHVibGljIGNsYXNzIFcxMUFkZEludGVyZmFjZUNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmQgewotCXByaXZhdGUgU3RyaW5nIG5ld05hbWU7Ci0JcHJpdmF0ZSBQb3J0VHlwZSBuZXdQb3J0VHlwZTsKLQkKLQlwdWJsaWMgVzExQWRkSW50ZXJmYWNlQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9QT1JUVFlQRSwgZGVmaW5pdGlvbik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldE5ld1BvcnRUeXBlTmFtZShTdHJpbmcgbmV3TmFtZSkgewotCQl0aGlzLm5ld05hbWUgPSBuZXdOYW1lOwotCX0KLQkKLQlwdWJsaWMgUG9ydFR5cGUgZ2V0TmV3UG9ydFR5cGUoKSB7Ci0JCXJldHVybiBuZXdQb3J0VHlwZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJCXN1cGVyLmV4ZWN1dGUoKTsKLQkJCWlmIChuZXdOYW1lID09IG51bGwgfHwgbmV3TmFtZS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQluZXdOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVQb3J0VHlwZU5hbWUoZGVmaW5pdGlvbiwgIk5ld1BvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCS8vIEFkZCB0aGUgUG9ydCBUeXBlCi0JCQlBZGRQb3J0VHlwZUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRQb3J0VHlwZUNvbW1hbmQoZGVmaW5pdGlvbiwgbmV3TmFtZSwgZmFsc2UpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCQotCQkJbmV3UG9ydFR5cGUgPSAoUG9ydFR5cGUpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCQotCQkJLy8gQWRkIHRoZSBPcGVyYXRpb24KLQkJCUlJbnRlcmZhY2UgaUludGVyZmFjZSA9IChJSW50ZXJmYWNlKSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChuZXdQb3J0VHlwZSk7Ci0JCQlDb21tYW5kIGFkZE9wZXJhdGlvbkNvbW1hbmQgPSBpSW50ZXJmYWNlLmdldEFkZE9wZXJhdGlvbkNvbW1hbmQoKTsKLQkJCWFkZE9wZXJhdGlvbkNvbW1hbmQuZXhlY3V0ZSgpOwotCQkJZm9ybWF0Q2hpbGQobmV3UG9ydFR5cGUuZ2V0RWxlbWVudCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gbmV3UG9ydFR5cGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRNZXNzYWdlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRNZXNzYWdlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTg0NGUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkTWVzc2FnZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkTWVzc2FnZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIFcxMUFkZE1lc3NhZ2VDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLSAgICBwcml2YXRlIFN0cmluZyBuZXdOYW1lOwotICAgIHByaXZhdGUgTWVzc2FnZSBtZXNzYWdlOwotCQotICAgIHB1YmxpYyBXMTFBZGRNZXNzYWdlQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfTUVTU0FHRSwgZGVmaW5pdGlvbik7Ci0gICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldE5ld01lc3NhZ2VOYW1lKFN0cmluZyBuZXdOYW1lKSB7Ci0JCXRoaXMubmV3TmFtZSA9IG5ld05hbWU7Ci0JfQotCi0gICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLSAgICAJdHJ5IHsKLSAgICAJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLSAgICAJCXN1cGVyLmV4ZWN1dGUoKTsKLQkJCWlmIChuZXdOYW1lID09IG51bGwgfHwgbmV3TmFtZS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQluZXdOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShkZWZpbml0aW9uLCAiTmV3TWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCi0JICAgIAlBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE1lc3NhZ2VDb21tYW5kKGRlZmluaXRpb24sIG5ld05hbWUsIHRydWUpOwotCSAgICAgICAgY29tbWFuZC5ydW4oKTsKLQkgICAgICAgIG1lc3NhZ2UgPSAoTWVzc2FnZSkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCSAgICAgICAgZm9ybWF0Q2hpbGQobWVzc2FnZS5nZXRFbGVtZW50KCkpOwotICAgIAl9Ci0gICAgCWZpbmFsbHkgewotICAgIAkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLSAgICAJfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgTWVzc2FnZSBnZXROZXdNZXNzYWdlKCkgewotICAgIAlyZXR1cm4gbWVzc2FnZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotICAgIAlyZXR1cm4gbWVzc2FnZTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRPcGVyYXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZE9wZXJhdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFlMGFhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZE9wZXJhdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCYXNlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRGYXVsdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkSW5wdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZElucHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRPcGVyYXRpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkT3BlcmF0aW9uQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJpdmF0ZSBQb3J0VHlwZSBwb3J0VHlwZTsKLQlwcml2YXRlIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0JCi0JcHVibGljIFcxMUFkZE9wZXJhdGlvbkNvbW1hbmQoUG9ydFR5cGUgcG9ydFR5cGUpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfT1BFUkFUSU9OLCBwb3J0VHlwZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLnBvcnRUeXBlID0gcG9ydFR5cGU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhwb3J0VHlwZS5nZXRFbGVtZW50KCkpOwotCQkJCi0JCQlTdHJpbmcgbmFtZSA9IE5hbWVVdGlsLmdldE9wZXJhdGlvbk5hbWUocG9ydFR5cGUpOwotCQkJQWRkT3BlcmF0aW9uQ29tbWFuZCBvcGVyYXRpb25Db21tYW5kID0gbmV3IEFkZE9wZXJhdGlvbkNvbW1hbmQocG9ydFR5cGUsIG5hbWUpOwotCQkJb3BlcmF0aW9uQ29tbWFuZC5ydW4oKTsKLQkJCW9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9wZXJhdGlvbkNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkKLQkJCWNyZWF0ZU1lc3NhZ2Uob3BlcmF0aW9uLCBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0lOUFVUKTsKLQkJCWNyZWF0ZU1lc3NhZ2Uob3BlcmF0aW9uLCBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCk7Ci0JCi0JCQljcmVhdGVQYXJhbWV0ZXIob3BlcmF0aW9uLCBudWxsLCBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0lOUFVUKTsKLQkJCWNyZWF0ZVBhcmFtZXRlcihvcGVyYXRpb24sIG51bGwsIElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUKTsKLQkKLQkJCW9wZXJhdGlvbi5zZXRTdHlsZShPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UpOwotCQkJZm9ybWF0Q2hpbGQob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcocG9ydFR5cGUuZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBvcGVyYXRpb247Ci0JfQotCQotCXByaXZhdGUgTWVzc2FnZVJlZmVyZW5jZSBjcmVhdGVNZXNzYWdlKE9wZXJhdGlvbiBvcGVyYXRpb24sIGludCBtZXNzYWdlS2luZCkgewotCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSBudWxsOwotCQlBZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZCBtZXNzYWdlUmVmQ29tbWFuZCA9IG51bGw7Ci0JICAgIGlmIChtZXNzYWdlS2luZCA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0lOUFVUKQotCSAgICB7Ci0JICAgIAltZXNzYWdlUmVmQ29tbWFuZCA9IG5ldyBBZGRJbnB1dENvbW1hbmQob3BlcmF0aW9uLCBudWxsKTsKLQkgICAgfQotCSAgICBlbHNlIGlmIChtZXNzYWdlS2luZCA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCkKLQkgICAgewotCSAgICAJbWVzc2FnZVJlZkNvbW1hbmQgPSBuZXcgQWRkT3V0cHV0Q29tbWFuZChvcGVyYXRpb24sIG51bGwpOwotCSAgICB9Ci0JICAgIGVsc2UgaWYgKG1lc3NhZ2VLaW5kID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfRkFVTFQpCi0JICAgIHsKLQkgICAgCW1lc3NhZ2VSZWZDb21tYW5kID0gbmV3IEFkZEZhdWx0Q29tbWFuZChvcGVyYXRpb24sIE5hbWVVdGlsLmdldEZhdWx0TmFtZShvcGVyYXRpb24pKTsKLQkgICAgfQotCSAgICBtZXNzYWdlUmVmQ29tbWFuZC5ydW4oKTsKLQkgICAgbWVzc2FnZVJlZiA9IChNZXNzYWdlUmVmZXJlbmNlKSBtZXNzYWdlUmVmQ29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCSAgICAKLS8vCSAgICBBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE1lc3NhZ2VDb21tYW5kKG1lc3NhZ2VSZWYuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBOYW1lVXRpbC5nZXRNZXNzYWdlTmFtZShtZXNzYWdlUmVmKSk7Ci0vLwkgICAgY29tbWFuZC5ydW4oKTsKLS8vCSAgICBtZXNzYWdlUmVmLnNldEVNZXNzYWdlKChNZXNzYWdlKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCkpOwotCSAgICAKLQkgICAgcmV0dXJuIG1lc3NhZ2VSZWY7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBjcmVhdGVQYXJhbWV0ZXIoT3BlcmF0aW9uIG9wZXJhdGlvbiwgUGFydCBwYXJ0LCBpbnQga2luZCkgewotCQkgIElQYXJhbWV0ZXIgcGFyYW1ldGVyID0gbnVsbDsKLQkJICBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZCBhZGRQYXJhbWV0ZXJDb21tYW5kID0gbnVsbDsKLQkJICAKLQkJICBpZiAoa2luZCA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0lOUFVUKSB7Ci0JCQkgIGludCBwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihwb3J0VHlwZSwgdHJ1ZSk7Ci0JCQkgIGlmIChwYXJhbWV0ZXJQYXR0ZXJuID09IC0xKSB7Ci0JCQkJICBwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UOwotCQkJICB9Ci0JCQkgIGFkZFBhcmFtZXRlckNvbW1hbmQgPSBuZXcgQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbiwgcGFyYW1ldGVyUGF0dGVybiwgdHJ1ZSk7Ci0JCSAgfQotCQkgIGVsc2UgaWYgKGtpbmQgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpIHsKLQkJCSAgaW50IHBhcmFtZXRlclBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuKHBvcnRUeXBlLCBmYWxzZSk7Ci0JCQkgIGlmIChwYXJhbWV0ZXJQYXR0ZXJuID09IC0xKSB7Ci0JCQkJICBwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UOwotCQkJICB9CQkJICAKLQkJCSAgYWRkUGFyYW1ldGVyQ29tbWFuZCA9IG5ldyBBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbiwgcGFyYW1ldGVyUGF0dGVybik7Ci0JCSAgfQotCQkgIAotCQkgIGlmIChwYXJhbWV0ZXIgPT0gbnVsbCAmJiBhZGRQYXJhbWV0ZXJDb21tYW5kICE9IG51bGwpIHsKLQkJCSAgYWRkUGFyYW1ldGVyQ29tbWFuZC5ydW4oKTsKLQkJICB9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE4ZDFlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcm90ZWN0ZWQgT3BlcmF0aW9uIG9wZXJhdGlvbjsKLQlwcml2YXRlIE9iamVjdCBvdXRwdXQ7Ci0JcHJpdmF0ZSBpbnQgcGFyYW1ldGVyUGF0dGVybiA9IC0xOwotCQotCXB1YmxpYyBXMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfT1VUUFVULCBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclBhdHRlcm4oaW50IHBhdHRlcm4pIHsKLQkJcGFyYW1ldGVyUGF0dGVybiA9IHBhdHRlcm47Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQotCQkJaWYgKHBhcmFtZXRlclBhdHRlcm4gPT0gLTEpIHsKLQkJCQkvLyBEZXRlcm1pbmUgd2hpY2ggUGF0dGVybiB3ZSBzaG91bGQgdXNlLiAgRm9yIGV4YW1wbGUsIEFEREJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVAotCQkJCXBhcmFtZXRlclBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuKG9wZXJhdGlvbiwgZmFsc2UpOwotCQkJCWlmIChwYXJhbWV0ZXJQYXR0ZXJuID09IC0xKSB7Ci0JCQkJCXBhcmFtZXRlclBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuKG9wZXJhdGlvbik7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIHBhcmFtZXRlclBhdHRlcm4pOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCW91dHB1dCA9IGNvbW1hbmQuZ2V0TmV3bHlBZGRlZENvbXBvbmVudFBhcnQoKTsKLQkJCQotCQkJZm9ybWF0Q2hpbGQob3BlcmF0aW9uLmdldEVPdXRwdXQoKS5nZXRFbGVtZW50KCkpOwotCQkJaWYgKGNvbW1hbmQuZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotCQkJCS8vIFRyeSB0byBncmFiIHRoZSAiaW5uZXIiIFhTREVsZW1lbnQKLQkJCQlvdXRwdXQgPSBnZXROZXdYU0RFbGVtZW50KGNvbW1hbmQuZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkpOwotCQkJCWZvcm1hdENoaWxkKGdldFhTRFBhcmVudChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpKS5nZXRFbGVtZW50KCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCBYU0RDb25jcmV0ZUNvbXBvbmVudCBnZXRYU0RQYXJlbnQoWFNEQ29uY3JldGVDb21wb25lbnQgeHNkKSB7Ci0JCVhTRENvbmNyZXRlQ29tcG9uZW50IHBhcmVudCA9IHhzZDsKLQkJCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCA0OyBpbmRleCsrKSB7Ci0JCQlYU0RDb25jcmV0ZUNvbXBvbmVudCBwcmV2aW91cyA9IHBhcmVudDsKLQkJCXBhcmVudCA9IHBhcmVudC5nZXRDb250YWluZXIoKTsKLQkJCWlmIChwYXJlbnQgPT0gbnVsbCkgewotCQkJCXBhcmVudCA9IHByZXZpb3VzOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcGFyZW50OwotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBvdXRwdXQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRQYXJ0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRQYXJ0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTA0Y2ZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkUGFydENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRQYXJ0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkUGFydENvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmQgewotICAgIHByaXZhdGUgTWVzc2FnZSBtZXNzYWdlOwotICAgIHByaXZhdGUgUGFydCBwYXJ0OwotICAgIAotICAgIHB1YmxpYyBXMTFBZGRQYXJ0Q29tbWFuZChNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfUEFSVCwgbWVzc2FnZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotICAgIAl0cnkgewotICAgIAkJYmVnaW5SZWNvcmRpbmcobWVzc2FnZS5nZXRFbGVtZW50KCkpOwotCi0JICAgIAlBZGRQYXJ0Q29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIE5hbWVVdGlsLmJ1aWxkVW5pcXVlUGFydE5hbWUobWVzc2FnZSwgIk5ld1BhcnQiKSk7IC8vJE5PTi1OTFMtMSQKLQkgICAgICAgIGNvbW1hbmQucnVuKCk7Ci0JICAgICAgICBwYXJ0ID0gKFBhcnQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkgICAgICAgIGZvcm1hdENoaWxkKHBhcnQuZ2V0RWxlbWVudCgpKTsKLSAgICAJfQotICAgIAlmaW5hbGx5IHsKLSAgICAJCWVuZFJlY29yZGluZyhtZXNzYWdlLmdldEVsZW1lbnQoKSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gcGFydDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFNjaGVtYUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkU2NoZW1hQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzI2MzM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkU2NoZW1hQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRYU0RTY2hlbWFDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRTY2hlbWFDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcml2YXRlIE9iamVjdCBzY2hlbWE7Ci0JCi0JcHVibGljIFcxMUFkZFNjaGVtYUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfU0NIRU1BLCBkZWZpbml0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJCXN1cGVyLmV4ZWN1dGUoKTsKLSAgICAKLQkJCVN0cmluZyB0bnMgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJTGlzdCBleGlzdGluZ05hbWVzcGFjZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0JCi0JCQlpZiAodHlwZXMgIT0gbnVsbCkgewotCQkJCUl0ZXJhdG9yIGVlSXQgPSB0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoZWVJdC5oYXNOZXh0KCkpIHsKLQkJCQkJT2JqZWN0IGl0ZW0gPSBlZUl0Lm5leHQoKTsKLQkJCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgewotCQkJCQkJWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWVFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBpdGVtOwotCQkJCQkJaWYgKGVlRWxlbWVudC5nZXRTY2hlbWEoKSAhPSBudWxsKSB7Ci0JCQkJCQkJU3RyaW5nIG5zID0gZWVFbGVtZW50LmdldFNjaGVtYSgpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJCQkJCWV4aXN0aW5nTmFtZXNwYWNlcy5hZGQobnMpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSAKLQkJCX0KLQkJCXRucyA9IE5hbWVVdGlsLmdldFVuaXF1ZU5hbWVIZWxwZXIodG5zLCBleGlzdGluZ05hbWVzcGFjZXMpOwotCQkJCi0JCQlBZGRYU0RTY2hlbWFDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNEU2NoZW1hQ29tbWFuZChkZWZpbml0aW9uLCB0bnMpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCWZvcm1hdENoaWxkKGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKS5nZXRFbGVtZW50KCkpOwotCQkJc2NoZW1hID0gY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBzY2hlbWE7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkU2VydmljZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkU2VydmljZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNmOWE4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFNlcnZpY2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5CaW5kaW5nR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Db250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Qb3J0R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFNlcnZpY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5TZXJ2aWNlUG9saWN5SGVscGVyOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkU2VydmljZUNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmQgewotCXByaXZhdGUgU2VydmljZSBzZXJ2aWNlOwotCQotCXB1YmxpYyBXMTFBZGRTZXJ2aWNlQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1NFUlZJQ0UsIGRlZmluaXRpb24pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQkJc3VwZXIuZXhlY3V0ZSgpOwotCQkJU3RyaW5nIG5ld05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZVNlcnZpY2VOYW1lKGRlZmluaXRpb24pOwotCQkJQWRkU2VydmljZUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRTZXJ2aWNlQ29tbWFuZChkZWZpbml0aW9uLCBuZXdOYW1lLCBmYWxzZSk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJc2VydmljZSA9IChTZXJ2aWNlKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQkKLQkJCVBvcnRHZW5lcmF0b3IgcG9ydEdlbmVyYXRvciA9IG5ldyBQb3J0R2VuZXJhdG9yKHNlcnZpY2UpOwotCQkJCi0JCQkvLyBzZXQgdGhlIGRlZmF1bHQgY29udGVudCBnZW5lcmF0b3IKLQkJCUNvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IG51bGw7Ci0JCQlJUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdChkZWZpbml0aW9uKTsKLQkJCVN0cmluZyBwcm90b2NvbCA9IFNlcnZpY2VQb2xpY3lIZWxwZXIuZ2V0RGVmYXVsdEJpbmRpbmcocHJvamVjdCk7Ci0JCQlpZiAocHJvdG9jb2wgIT0gbnVsbCkgewotCQkJCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCQkJQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvck5hbWVzcGFjZShwcm90b2NvbCk7Ci0JCQkJaWYgKGV4dCAhPSBudWxsKSB7Ci0JCQkJCWNvbnRlbnRHZW5lcmF0b3IgPSBCaW5kaW5nR2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoZXh0LmdldE5hbWVzcGFjZSgpKTsKLQkJCQkgIH0KLQkJCX0KLQkJCS8vIHVuYWJsZSB0byBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZW50IGdlbmVyYXRvciwgdHJ5IGFnYWluCi0JCQlpZiAoY29udGVudEdlbmVyYXRvciA9PSBudWxsKSB7Ci0JCQkJLy8gR2V0IHRoZSBmaXJzdCBhdmFpbGFibGUgY29udGVudCBnZW5lcmF0b3IKLQkJCQlMaXN0IHByb3RvY29scyA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpLmdldEJpbmRpbmdFeHRlbnNpb25OYW1lcygpOwotCQkJCWlmIChwcm90b2NvbHMuc2l6ZSgpID49IDEpIHsKLQkJCQkJcHJvdG9jb2wgPSAoU3RyaW5nKXByb3RvY29scy5nZXQoMCk7Ci0JCQkJCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Gb3JOYW1lKHByb3RvY29sKTsKLQkJCQkJaWYgKGV4dCAhPSBudWxsKSB7Ci0JCQkJCQljb250ZW50R2VuZXJhdG9yID0gQmluZGluZ0dlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKGV4dC5nZXROYW1lc3BhY2UoKSk7Ci0JCQkJICB9Ci0JCQkJfQotCQkJfQotCQkJcG9ydEdlbmVyYXRvci5zZXRDb250ZW50R2VuZXJhdG9yKGNvbnRlbnRHZW5lcmF0b3IpOwotCQkJcG9ydEdlbmVyYXRvci5zZXROYW1lKE5hbWVVdGlsLmJ1aWxkVW5pcXVlUG9ydE5hbWUoc2VydmljZSwgIk5ld1BvcnQiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCXBvcnRHZW5lcmF0b3IuZ2VuZXJhdGVQb3J0KCk7Ci0JCQkKLQkJCWZvcm1hdENoaWxkKHNlcnZpY2UuZ2V0RWxlbWVudCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gc2VydmljZTsKLQl9Ci0KLQlwcml2YXRlIElQcm9qZWN0IGdldFByb2plY3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBudWxsOwotCi0JCVN0cmluZyBsb2NhdGlvbiA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLQkJVVJMIHVybCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQl1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCXsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJaWYgKHVybCAhPSBudWxsKSB7Ci0JCQlVUkwgZmlsZVVSTCA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWZpbGVVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWlmIChmaWxlVVJMICE9IG51bGwpIHsKLQkJCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgoZmlsZVVSTC5nZXRQYXRoKCkpOwotCQkJCUlGaWxlIGZpbGVzW10gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRGaWxlc0ZvckxvY2F0aW9uKHBhdGgpOwotCQkJCUlGaWxlIGZpbGUgPSBudWxsOwotCQkJCWlmIChmaWxlcy5sZW5ndGggPiAwKSB7Ci0JCQkJCS8vIGp1c3QgZ2V0IHRoZSBmaXJzdCBmaWxlCi0JCQkJCWZpbGUgPSBmaWxlc1swXTsKLQkJCQl9Ci0JCQkJcHJvamVjdCA9IGZpbGUuZ2V0UHJvamVjdCgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRGVsZXRlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFEZWxldGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlOTIzYzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFEZWxldGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFEZWxldGVDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJvdGVjdGVkIFdTRExCYXNlQWRhcHRlciBvYmplY3Q7Ci0JCi0JcHVibGljIFcxMURlbGV0ZUNvbW1hbmQoV1NETEJhc2VBZGFwdGVyIG9iamVjdCkgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0RFTEVURSwgbnVsbCk7Ci0JCXRoaXMub2JqZWN0ID0gb2JqZWN0OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQlFbGVtZW50IGVsZW1lbnQgPSBudWxsOwotCQlpZiAob2JqZWN0LmdldFRhcmdldCgpIGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCWVsZW1lbnQgPSAoKFdTRExFbGVtZW50KSBvYmplY3QuZ2V0VGFyZ2V0KCkpLmdldEVsZW1lbnQoKTsKLQkJfQotCQllbHNlIGlmIChvYmplY3QuZ2V0VGFyZ2V0KCkgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkgewotCQkJZWxlbWVudCA9ICgoWFNEQ29uY3JldGVDb21wb25lbnQpIG9iamVjdC5nZXRUYXJnZXQoKSkuZ2V0RWxlbWVudCgpOwotCQl9Ci0JCQotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZWxlbWVudCk7Ci0JCQkKLQkJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFTZXJ2aWNlKSB7Ci0JCQkJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlzZXJ2aWNlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFU2VydmljZXMoKS5yZW1vdmUoc2VydmljZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFFbmRQb2ludCkgewotCQkJCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSAoKFcxMVNlcnZpY2UpICgoVzExRW5kUG9pbnQpIG9iamVjdCkuZ2V0T3duZXJTZXJ2aWNlKCkpLmdldFRhcmdldCgpOwotCQkJCVBvcnQgcG9ydCA9IChQb3J0KSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJc2VydmljZS5nZXRFUG9ydHMoKS5yZW1vdmUocG9ydCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFCaW5kaW5nKSB7Ci0JCQkJQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQliaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFQmluZGluZ3MoKS5yZW1vdmUoYmluZGluZyk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFJbnRlcmZhY2UpIHsKLQkJCQlQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCXBvcnRUeXBlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkucmVtb3ZlKHBvcnRUeXBlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMU9wZXJhdGlvbikgewotCQkJCVBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSAoKFcxMUludGVyZmFjZSkgKChXMTFPcGVyYXRpb24pIG9iamVjdCkuZ2V0T3duZXJJbnRlcmZhY2UoKSkuZ2V0VGFyZ2V0KCk7Ci0JCQkJT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLnJlbW92ZShvcGVyYXRpb24pOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIHBhcnQuZUNvbnRhaW5lcigpOwotCQkJCW1lc3NhZ2UuZ2V0RVBhcnRzKCkucmVtb3ZlKHBhcnQpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUltcG9ydCkgewotCQkJCUltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJdGhlSW1wb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFSW1wb3J0cygpLnJlbW92ZSh0aGVJbXBvcnQpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExVHlwZSkgewotCQkJCVcxMVR5cGUgdzExVHlwZSA9IChXMTFUeXBlKSBvYmplY3Q7Ci0JCQkJWFNEU2NoZW1hIHNjaGVtYSA9IChYU0RTY2hlbWEpICB3MTFUeXBlLmdldFRhcmdldCgpOwotCQkJCVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGVlRWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgc2NoZW1hLmVDb250YWluZXIoKTsKLQkJCQlUeXBlcyB0eXBlID0gKFR5cGVzKSBlZUVsZW1lbnQuZ2V0Q29udGFpbmVyKCk7Ci0JCQkJdHlwZS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkucmVtb3ZlKGVlRWxlbWVudCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChNZXNzYWdlUmVmZXJlbmNlKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pbWVzc2FnZVJlZi5lQ29udGFpbmVyKCk7Ci0JCQkJaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBJbnB1dCkgewotCQkJCQlvcGVyYXRpb24uc2V0RUlucHV0KG51bGwpOwotCQkJCX0KLQkJCQllbHNlIGlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgT3V0cHV0KSB7Ci0JCQkJCW9wZXJhdGlvbi5zZXRFT3V0cHV0KG51bGwpOwotCQkJCX0KLQkJCQllbHNlIGlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgRmF1bHQpIHsKLQkJCQkJb3BlcmF0aW9uLmdldEVGYXVsdHMoKS5yZW1vdmUobWVzc2FnZVJlZik7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSU1lc3NhZ2UpIHsKLQkJCQlNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCW1lc3NhZ2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVNZXNzYWdlcygpLnJlbW92ZShtZXNzYWdlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhlbGVtZW50KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMTI1YzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFcxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcml2YXRlIElQYXJhbWV0ZXIgcGFyYW1ldGVyOwotCQotCXB1YmxpYyBXMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kKElQYXJhbWV0ZXIgcGFyYW0pIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9ERUxFVEUsIG51bGwpOwotCQl0aGlzLnBhcmFtZXRlciA9IHBhcmFtOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQlPYmplY3Qgb2JqZWN0ID0gKChXU0RMQmFzZUFkYXB0ZXIpIHBhcmFtZXRlcikuZ2V0VGFyZ2V0KCk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IG51bGw7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCWVsZW1lbnQgPSAoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgb2JqZWN0KS5nZXRFbGVtZW50KCk7Ci0JCX0KLQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCWVsZW1lbnQgPSAoKFBhcnQpIG9iamVjdCkuZ2V0RWxlbWVudCgpOwotCQl9Ci0JCQotCQlpZiAoZWxlbWVudCAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJlZ2luUmVjb3JkaW5nKGVsZW1lbnQpOwotCQkJCWRlbGV0ZSgpOwotCQkJfQotCQkJZmluYWxseSB7Ci0JCQkJZW5kUmVjb3JkaW5nKGVsZW1lbnQpOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBkZWxldGUoKSB7Ci0JCU9iamVjdCBvYmplY3QgPSAoKFdTRExCYXNlQWRhcHRlcikgcGFyYW1ldGVyKS5nZXRUYXJnZXQoKTsKLQkJCi0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCVhTRENvbmNyZXRlQ29tcG9uZW50IHhzZENvbXBvbmVudCA9ICgoWFNERWxlbWVudERlY2xhcmF0aW9uKSBvYmplY3QpLmdldENvbnRhaW5lcigpOwotCQkJCi0JCQlpZiAoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgeHNkQ29tcG9uZW50OwotCQkJCWlmIChwYXJ0aWNsZS5nZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApIHsKLQkJCQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gKFhTRE1vZGVsR3JvdXApIHBhcnRpY2xlLmdldENvbnRhaW5lcigpOwotCQkJCQlpZiAobW9kZWxHcm91cC5nZXRDb250ZW50cygpLnNpemUoKSA+PSAyKSB7Ci0JCQkJCQltb2RlbEdyb3VwLmdldENvbnRlbnRzKCkucmVtb3ZlKHBhcnRpY2xlKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCW1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5yZW1vdmUocGFydGljbGUpOwotCQkJCQkJLy8gVE9ETzogV2UgbmVlZCB0aGUgbGluZSBiZWxvdyB0byBkZWxldGUgdGhlIE1lc3NhZ2UgYW5kIFBhcnQKLS8vCQkJCQkJcmVtb3ZlTWVzc2FnZUFuZFBhcnQod1BhcmFtZXRlci5nZXRQYXJ0KCkpOwotCQkJCQkJLy8gVE9ETzogUmVtb3ZlIHRoZSBYU0QgY29tcG9uZW50cyBhcyB3ZWxsLi4uLi4KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKHhzZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYSl7Ci0JCQkJLy8gVE9ETzogV2UgbmVlZCB0aGUgbGluZSBiZWxvdyB0byBkZWxldGUgdGhlIE1lc3NhZ2UgYW5kIFBhcnQKLS8vCQkJCXJlbW92ZU1lc3NhZ2VBbmRQYXJ0KHdQYXJhbWV0ZXIuZ2V0UGFydCgpKTsgLy8gRGVsZXRlIHRoZSBwYXJ0IGFzIHdlbGwKLQkJCQlYU0RTY2hlbWEgeHNkU2NoZW1hID0gKFhTRFNjaGVtYSkgeHNkQ29tcG9uZW50OwotCQkJCXhzZFNjaGVtYS5nZXRDb250ZW50cygpLnJlbW92ZShvYmplY3QpOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFBhcnQpIHsKLQkJCXJlbW92ZU1lc3NhZ2VBbmRQYXJ0KChQYXJ0KSBvYmplY3QpOwotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE1lc3NhZ2UpIHsKLQkJCXJlbW92ZU1lc3NhZ2VBbmRQYXJ0KChQYXJ0KSAoKE1lc3NhZ2UpIG9iamVjdCkuZ2V0RVBhcnRzKCkuZ2V0KDApKTsKLQkJfQotCQkKLQkJLy8gRG8gd2Ugd2FudCB0byByZW1vdmUgdGhlIElucHV0L091dHB1dC9GYXVsdCBNZXNzYWdlUmVmZXJlbmNlIGFzIHdlbGwgaWYKLQkJLy8gdGhlcmUgYXJlIG5vIG1vcmUgImlucHV0cyI/Li4uLgotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCByZW1vdmVNZXNzYWdlQW5kUGFydChQYXJ0IHBhcnQpIHsKLQkJVzExTWVzc2FnZVJlZmVyZW5jZSAgd01lc3NhZ2UgPSBudWxsOwotCQkvKgotCQlpZiAocGFyYW1ldGVyIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgewotCQkJd01lc3NhZ2UgPSAoVzExTWVzc2FnZVJlZmVyZW5jZSkgKChXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSBwYXJhbWV0ZXIpLmdldE93bmVyKCk7CQotCQl9Ci0JCWVsc2UgKi9pZiAocGFyYW1ldGVyIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotCQkJd01lc3NhZ2UgPSAoVzExTWVzc2FnZVJlZmVyZW5jZSkgKChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBwYXJhbWV0ZXIpLmdldE93bmVyKCk7Ci0JCX0KLQkJCi0JCU1lc3NhZ2UgbWVzc2FnZSA9IHdNZXNzYWdlLmdldE1lc3NhZ2VSZWZlcmVuY2UoKS5nZXRFTWVzc2FnZSgpOyAKLQkJbWVzc2FnZS5nZXRFUGFydHMoKS5yZW1vdmUocGFydCk7Ci0JCQotCQkoKERlZmluaXRpb24pIHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKS5nZXRFTWVzc2FnZXMoKS5yZW1vdmUobWVzc2FnZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzM2ExZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5ET01OYW1lc3BhY2VJbmZvTWFuYWdlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJpdmF0ZSBMaXN0IG5hbWVzcGFjZXNJbmZvTGlzdDsKLQlwcml2YXRlIFN0cmluZyB0YXJnZXROYW1lc3BhY2U7Ci0JcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlUHJlZml4OwotCQotCXB1YmxpYyBXMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JICBzdXBlcihNZXNzYWdlcy5fVUlfRURJVF9OQU1FU1BBQ0VTLCBkZWZpbml0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlc0luZm8oTGlzdCBuYW1lc3BhY2VzKSB7Ci0JCW5hbWVzcGFjZXNJbmZvTGlzdCA9IG5hbWVzcGFjZXM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFRhcmdldE5hbWVzcGFjZShTdHJpbmcgdG5zKSB7Ci0JCXRhcmdldE5hbWVzcGFjZSA9IHRuczsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VGFyZ2V0TmFtZXNwYWNlUHJlZml4KFN0cmluZyBwcmVmaXgpIHsKLQkJdGFyZ2V0TmFtZXNwYWNlUHJlZml4ID0gcHJlZml4OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQkJc3VwZXIuZXhlY3V0ZSgpOwotCQkJaWYgKHRhcmdldE5hbWVzcGFjZVByZWZpeCAhPSBudWxsKSB7Ci0JCQkJRWxlbWVudCBlbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0KLQkJCQkvLyBSZW1vdmUgdGhlIG9sZCBwcmVmaXgKLQkJCQlTdHJpbmcgb2xkUHJlZml4ID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCQkJZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoInhtbG5zOiIrb2xkUHJlZml4KTsgIC8vJE5PTi1OTFMtMSQKLQotCQkJCS8vIFNldCB0aGUgbmV3IHByZWZpeAotCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJ4bWxuczoiICsgdGFyZ2V0TmFtZXNwYWNlUHJlZml4LCBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQkJU3RyaW5nIG5ld1ZhbHVlID0gdGFyZ2V0TmFtZXNwYWNlOwotCQkJCVN0cmluZyBwcmVmaXggPSBkZWZpbml0aW9uLmdldFByZWZpeChkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQkJCQlkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZShuZXdWYWx1ZSk7Ci0JCQkJZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkuc2V0QXR0cmlidXRlKCJ4bWxuczoiICsgcHJlZml4LCBuZXdWYWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJaWYgKG5hbWVzcGFjZXNJbmZvTGlzdCAhPSBudWxsKSB7Ci0JCQkJRE9NTmFtZXNwYWNlSW5mb01hbmFnZXIgbmFtZXNwYWNlSW5mb01hbmFnZXIgPSBuZXcgRE9NTmFtZXNwYWNlSW5mb01hbmFnZXIoKTsKLQotCQkJCS8qCi0JCSAgICAgIExpc3QgbmFtZXNwYWNlSW5mb0xpc3QgPSBuYW1lc3BhY2VJbmZvTWFuYWdlci5nZXROYW1lc3BhY2VJbmZvTGlzdChlbGVtZW50KTsKLS8vCQkgICAgICBMaXN0IG9sZE5hbWVzcGFjZUluZm9MaXN0ID0gTmFtZXNwYWNlSW5mby5jbG9uZU5hbWVzcGFjZUluZm9MaXN0KG5hbWVzcGFjZUluZm9MaXN0KTsKLQotCQkgICAgICAvLyBoZXJlIHdlIHN0b3JlIGEgY29weSBvZiB0aGUgb2xkIGluZm8gZm9yIGVhY2ggTmFtZXNwYWNlSW5mbwotCQkgICAgICAvLyB0aGlzIGluZm8gd2lsbCBiZSB1c2VkIGluIGNyZWF0ZVByZWZpeE1hcHBpbmcoKSB0byBmaWd1cmUgb3V0IGhvdyB0byB1cGRhdGUgdGhlIGRvY3VtZW50IAotCQkgICAgICAvLyBpbiByZXNwb25zZSB0byB0aGVzZSBjaGFuZ2VzCi0JCSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG5hbWVzcGFjZUluZm9MaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJICAgICAgewotCQkgICAgICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IChOYW1lc3BhY2VJbmZvKSBpLm5leHQoKTsKLQkJICAgICAgICBOYW1lc3BhY2VJbmZvIG9sZENvcHkgPSBuZXcgTmFtZXNwYWNlSW5mbyhpbmZvKTsKLQkJICAgICAgICBpbmZvLnNldFByb3BlcnR5KCJvbGRDb3B5Iiwgb2xkQ29weSk7IC8vJE5PTi1OTFMtMSQKLQkJICAgICAgfQotCQkJCSAqLwotCi0JCQkJbmFtZXNwYWNlSW5mb01hbmFnZXIucmVtb3ZlTmFtZXNwYWNlSW5mbyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQkJbmFtZXNwYWNlSW5mb01hbmFnZXIuYWRkTmFtZXNwYWNlSW5mbyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSwgbmFtZXNwYWNlc0luZm9MaXN0LCBmYWxzZSk7Ci0KLQkJCQkvKgotCSAgICAgICAgLy8gc2VlIGlmIHdlIG5lZWQgdG8gcmVuYW1lIGFueSBwcmVmaXhlcwotCSAgICAgICAgTWFwIHByZWZpeE1hcHBpbmcgPSBjcmVhdGVQcmVmaXhNYXBwaW5nKG9sZE5hbWVzcGFjZUluZm9MaXN0LCBuYW1lc3BhY2VJbmZvTGlzdCk7Ci0JICAgICAgICBpZiAocHJlZml4TWFwcGluZy5zaXplKCkgPiAwKQotCSAgICAgICAgewotCSAgICAgICAgICAvL21hbmFnZXIuZ2V0TW9kZWwoKS5hYm91dFRvQ2hhbmdlTW9kZWwoKTsKLQkgICAgICAgICAgUmVwbGFjZVByZWZpeEFjdGlvbiByZXBsYWNlUHJlZml4QWN0aW9uID0gbmV3IFJlcGxhY2VQcmVmaXhBY3Rpb24oZWxlbWVudCwgcHJlZml4TWFwcGluZyk7Ci0JICAgICAgICAgIHJlcGxhY2VQcmVmaXhBY3Rpb24ucnVuKCk7Ci0JICAgICAgICAgIC8vbWFuYWdlci5nZXRNb2RlbCgpLmNoYW5nZWRNb2RlbCgpOwotCSAgICAgICAgfQotCQkJCSAqLyAgIAotCQkJfQotCi0JCQkvKgotCQkgLy8gQ291bGQgbm90IG1vZGlmeSAobW9yZSBzcGVjaWZpY2FsbHkgcmVtb3ZlKSBuYW1lc3BhY2VzIHZpYSBtb2RlbC4uLi4uCi0JCSAvLyBzaG91bGQgcmV2aXNpdCB0aGlzCi0JCWlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCB8fCB0YXJnZXROYW1lc3BhY2VQcmVmaXggIT0gbnVsbCkgewotCQkJTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotCQkJU3RyaW5nIG9sZFRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQlTdHJpbmcgb2xkUHJlZml4ID0gbnVsbDsKLQotCQkJSXRlcmF0b3IgaXQgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQubmV4dCgpOwotCQkJCU9iamVjdCB2YWx1ZSA9IG1hcC5nZXQoa2V5KTsKLQkJCQlpZiAodmFsdWUgIT0gbnVsbCAmJiBvbGRUYXJnZXROYW1lc3BhY2UgIT0gbnVsbCAmJiB2YWx1ZS5lcXVhbHMob2xkVGFyZ2V0TmFtZXNwYWNlKSkgewotCQkJCQlvbGRQcmVmaXggPSBrZXk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKG9sZFByZWZpeCAhPSBudWxsICYmICFvbGRQcmVmaXguZXF1YWxzKHRhcmdldE5hbWVzcGFjZVByZWZpeCkpIHsKLQkJCQltYXAucmVtb3ZlKG9sZFByZWZpeCk7Ci0JCQkJZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0JCQl9Ci0KLQkJCVN0cmluZyB0bnMgPSAiIjsKLQkJCVN0cmluZyBwcmVmaXggPSAiIjsKLQkJCWlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkgewotCQkJCXRucyA9IHRhcmdldE5hbWVzcGFjZTsKLQkJCX0KLQkJCWlmICh0YXJnZXROYW1lc3BhY2VQcmVmaXggIT0gbnVsbCkgewotCQkJCXByZWZpeCA9IHRhcmdldE5hbWVzcGFjZVByZWZpeDsKLQkJCX0KLQkJCWRlZmluaXRpb24uYWRkTmFtZXNwYWNlKHByZWZpeCwgdG5zKTsKLQkJCWRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKHRucyk7Ci0vLwkJCW1hcC5wdXQocHJlZml4LCB0bnMpOwotCQl9Ci0JCQkgKi8KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JLyoKLQlwcm90ZWN0ZWQgTWFwIGNyZWF0ZVByZWZpeE1hcHBpbmcoTGlzdCBvbGRMaXN0LCBMaXN0IG5ld0xpc3QpCi0JewotCQlNYXAgbWFwID0gbmV3IEhhc2h0YWJsZSgpOwotCi0JCUhhc2h0YWJsZSBvbGRVUklUb1ByZWZpeFRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBvbGRMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJewotCQkJTmFtZXNwYWNlSW5mbyBvbGRJbmZvID0gKE5hbWVzcGFjZUluZm8pIGkubmV4dCgpOwotCQkJb2xkVVJJVG9QcmVmaXhUYWJsZS5wdXQob2xkSW5mby51cmksIG9sZEluZm8pOwotCQl9Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gbmV3TGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCXsKLQkJCU5hbWVzcGFjZUluZm8gbmV3SW5mbyA9IChOYW1lc3BhY2VJbmZvKSBpLm5leHQoKTsKLQkJCU5hbWVzcGFjZUluZm8gb2xkSW5mbyA9IChOYW1lc3BhY2VJbmZvKSBvbGRVUklUb1ByZWZpeFRhYmxlLmdldChuZXdJbmZvLnVyaSAhPSBudWxsID8gbmV3SW5mby51cmkgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQotCQkJLy8gaWYgb2xkSW5mbyBpcyBub24gbnVsbCAuLi4gdGhlcmUncyBhIG1hdGNoaW5nIFVSSSBpbiB0aGUgb2xkIHNldAotCQkJLy8gd2UgY2FuIHVzZSBpdHMgcHJlZml4IHRvIGRldGVtaW5lIG91dCBtYXBwaW5nCi0JCQkvLwotCQkJLy8gaWYgb2xkSW5mbyBpcyBudWxsIC4uLiAgd2UgdXNlIHRoZSAnb2xkQ29weScgd2Ugc3Rhc2hlZCBhd2F5IAotCQkJLy8gYXNzdW1pbmcgdGhhdCB0aGUgdXNlciBjaGFuZ2VkIHRoZSBVUkkgYW5kIHRoZSBwcmVmaXgKLQkJCWlmIChvbGRJbmZvID09IG51bGwpCi0JCQl7Ci0JCQkJb2xkSW5mbyA9IChOYW1lc3BhY2VJbmZvKSBuZXdJbmZvLmdldFByb3BlcnR5KCJvbGRDb3B5Iik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJaWYgKG9sZEluZm8gIT0gbnVsbCkKLQkJCXsKLQkJCQlTdHJpbmcgbmV3UHJlZml4ID0gbmV3SW5mby5wcmVmaXggIT0gbnVsbCA/IG5ld0luZm8ucHJlZml4IDogIiI7IC8vJE5PTi1OTFMtMSQKLQkJCQlTdHJpbmcgb2xkUHJlZml4ID0gb2xkSW5mby5wcmVmaXggIT0gbnVsbCA/IG9sZEluZm8ucHJlZml4IDogIiI7IC8vJE5PTi1OTFMtMSQKLQkJCQlpZiAoIW9sZFByZWZpeC5lcXVhbHMobmV3UHJlZml4KSkKLQkJCQl7Ci0JCQkJCW1hcC5wdXQob2xkUHJlZml4LCBuZXdQcmVmaXgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gbWFwOwotCX0KLQkqLwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUdlbmVyYXRlQmluZGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyMTFmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUdlbmVyYXRlQmluZGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzLkJpbmRpbmdXaXphcmQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJvdGVjdGVkIEJpbmRpbmcgYmluZGluZzsKLQkKLQlwdWJsaWMgVzExR2VuZXJhdGVCaW5kaW5nQ29tbWFuZChCaW5kaW5nIGJpbmRpbmcpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0dFTkVSQVRFX0JJTkRJTkdfQ09OVEVOVCwgYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlCaW5kaW5nV2l6YXJkIHdpemFyZCA9IG5ldyBCaW5kaW5nV2l6YXJkKGJpbmRpbmcuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBiaW5kaW5nLCBCaW5kaW5nV2l6YXJkLktJTkRfUkVHRU5FUkFURV9CSU5ESU5HKTsKLQkJCXdpemFyZC5zZXRCaW5kaW5nTmFtZShDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldE5hbWUoYmluZGluZykpOwotCQkJd2l6YXJkLnNldFBvcnRUeXBlTmFtZShDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldFBvcnRUeXBlUmVmZXJlbmNlKGJpbmRpbmcpKTsKLQkJCVdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgV2l6YXJkRGlhbG9nKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCksIHdpemFyZCk7Ci0JCQl3aXphcmREaWFsb2cuY3JlYXRlKCk7Ci0JCQlpZiAod2l6YXJkRGlhbG9nLm9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlmb3JtYXRDaGlsZChiaW5kaW5nLmdldEVsZW1lbnQoKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVuYW1lQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW5hbWVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNTljYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW5hbWVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnBhcnRpY2lwYW50cy5SZW5hbWVSZWZhY3RvcmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5TbWFydFJlbmFtZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yLkJpbmRpbmdSZW5hbWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3IuTWVzc2FnZVJlbmFtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvci5Qb3J0VHlwZVJlbmFtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IuUGVyZm9ybVVuc2F2ZWRSZWZhY3RvcmluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlJlZmFjdG9yaW5nQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IuWE1MUmVmYWN0b3JpbmdDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5yZW5hbWUuUmVuYW1lQ29tcG9uZW50UHJvY2Vzc29yOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFSZW5hbWVDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJvdGVjdGVkIFdTRExCYXNlQWRhcHRlciBvYmplY3Q7Ci0JcHJvdGVjdGVkIFN0cmluZyBuZXdOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBXMTFSZW5hbWVDb21tYW5kKFdTRExCYXNlQWRhcHRlciBvYmplY3QsIFN0cmluZyBuZXdOYW1lKSB7Ci0JCXN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fUkVOQU1FLCAob2JqZWN0LmdldFRhcmdldCgpIGluc3RhbmNlb2YgV1NETEVsZW1lbnQpID8gKChXU0RMRWxlbWVudCkgb2JqZWN0LmdldFRhcmdldCgpKS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkgOiAgbnVsbCk7Ci0JCXRoaXMub2JqZWN0ID0gb2JqZWN0OwotCQl0aGlzLm5ld05hbWUgPSBuZXdOYW1lOwotCX0KLQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQlTdHJpbmcgb3JpZ05hbWUgPSBudWxsOwotCQkJCi0JCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExRGVzY3JpcHRpb24pIHsKLQkJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCVcxMVRvcExldmVsRWxlbWVudENvbW1hbmQuZW5zdXJlRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLQkJCQlTdHJpbmcgbnMgPSBkZWZpbml0aW9uLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCQkJZGVmaW5pdGlvbi5zZXRRTmFtZShuZXcgUU5hbWUobnMsIG5ld05hbWUpKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMVNlcnZpY2UpIHsKLQkJCQlTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCVN0cmluZyBucyA9IHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJCQlzZXJ2aWNlLnNldFFOYW1lKG5ldyBRTmFtZShucywgbmV3TmFtZSkpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExRW5kUG9pbnQpIHsKLQkJCQlQb3J0IHBvcnQgPSAoUG9ydCkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCXBvcnQuc2V0TmFtZShuZXdOYW1lKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMUJpbmRpbmcpIHsKLQkJCQlCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCW9yaWdOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExSW50ZXJmYWNlKSB7Ci0JCQkJUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlvcmlnTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFPcGVyYXRpb24pIHsKLQkJCQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCVNtYXJ0UmVuYW1lQWN0aW9uIGFjdGlvbiA9IG5ldyBTbWFydFJlbmFtZUFjdGlvbihvcGVyYXRpb24sIG5ld05hbWUpOwotCQkJCXJlbmFtZU9wZXJhdGlvbkhlbHBlcihvcGVyYXRpb24pOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQlXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KSAoKFcxMU1lc3NhZ2VSZWZlcmVuY2UpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQkJcmVuYW1lSU9GSGVscGVyKGVsZW1lbnQpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExTWVzc2FnZSkgewotCQkJCU1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSAoKFcxMU1lc3NhZ2UpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0vLwkJCQlJdGVyYXRvciBwYXJ0cyA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJCQlvcmlnTmFtZSA9IG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCQkKLQkJCQlTbWFydFJlbmFtZUFjdGlvbiBhY3Rpb24gPSBuZXcgU21hcnRSZW5hbWVBY3Rpb24obWVzc2FnZSwgbmV3TmFtZSk7Ci0JCQkJYWN0aW9uLnJ1bihmYWxzZSk7Ci0vLwkJCQl3aGlsZSAocGFydHMuaGFzTmV4dCgpKSB7Ci0vLwkJCQkJU21hcnRSZW5hbWVBY3Rpb24gYWN0aW9uID0gbmV3IFNtYXJ0UmVuYW1lQWN0aW9uKHBhcnRzLm5leHQoKSwgbmV3TmFtZSk7Ci0vLwkJCQkJYWN0aW9uLnJ1bigpOwotLy8JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQkJU21hcnRSZW5hbWVBY3Rpb24gYWN0aW9uID0gbmV3IFNtYXJ0UmVuYW1lQWN0aW9uKHBhcnQsIG5ld05hbWUpOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMUJpbmRpbmdPcGVyYXRpb24pIHsKLQkJCQlCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgKChXMTFCaW5kaW5nT3BlcmF0aW9uKSBvYmplY3QpLmdldFRhcmdldCgpOwotCQkJCWJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShuZXdOYW1lKTsKLQkJCQliaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKS5zZXROYW1lKG5ld05hbWUpOwotCQkJCS8vIFRPRE86IFdlIHNob3VsZCBnbyBvZmYgYW5kIHJlbmFtZSB0aGUgYXNzb2NpYXRlZCBQb3J0VHlwZSBPcGVyYXRpb24KLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJT2JqZWN0IGJpbmRpbmdNZXNzYWdlUmVmID0gKChXMTFCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSkgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCQlpZiAoYmluZGluZ01lc3NhZ2VSZWYgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpIHsKLQkJCQkJKChCaW5kaW5nSW5wdXQpIGJpbmRpbmdNZXNzYWdlUmVmKS5zZXROYW1lKG5ld05hbWUpOwotCQkJCQkoKEJpbmRpbmdJbnB1dCkgYmluZGluZ01lc3NhZ2VSZWYpLmdldEVJbnB1dCgpLnNldE5hbWUobmV3TmFtZSk7Ci0JCQkJCS8vIFRPRE86IFdlIHNob3VsZCBnbyBvZmYgYW5kIHJlbmFtZSB0aGUgYXNzb2NpYXRlZCBQb3J0dHlwZSBNZXNzYWdlUmVmZXJlbmNlCi0JCQkJfQotCQkJCWVsc2UgaWYgKGJpbmRpbmdNZXNzYWdlUmVmIGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkgewotCQkJCQkoKEJpbmRpbmdPdXRwdXQpIGJpbmRpbmdNZXNzYWdlUmVmKS5zZXROYW1lKG5ld05hbWUpOwotCQkJCQkoKEJpbmRpbmdPdXRwdXQpIGJpbmRpbmdNZXNzYWdlUmVmKS5nZXRFT3V0cHV0KCkuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkJLy8gVE9ETzogV2Ugc2hvdWxkIGdvIG9mZiBhbmQgcmVuYW1lIHRoZSBhc3NvY2lhdGVkIFBvcnR0eXBlIE91dHB1dAkJCQkKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoYmluZGluZ01lc3NhZ2VSZWYgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpIHsKLQkJCQkJKChCaW5kaW5nRmF1bHQpIGJpbmRpbmdNZXNzYWdlUmVmKS5zZXROYW1lKG5ld05hbWUpOwotCQkJCQkoKEJpbmRpbmdGYXVsdCkgYmluZGluZ01lc3NhZ2VSZWYpLmdldEVGYXVsdCgpLnNldE5hbWUobmV3TmFtZSk7Ci0JCQkJCS8vIFRPRE86IFdlIHNob3VsZCBnbyBvZmYgYW5kIHJlbmFtZSB0aGUgYXNzb2NpYXRlZCBQb3J0dHlwZSBGYXVsdAotCQkJCX0KLQkJCX0KLQkKLQkJCU9iamVjdCB0YXJnZXQgPSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQgJiYgb3JpZ05hbWUgIT0gbnVsbCkgewotCQkJCVdTRExFbGVtZW50IGNvbXBvbmVudCA9IChXU0RMRWxlbWVudCkgdGFyZ2V0OwotCQkJCVN0cmluZyBuYW1lc3BhY2UgPSBjb21wb25lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQotCQkJCVJlZmFjdG9yaW5nQ29tcG9uZW50IHJlZmFjdG9yaW5nQ29tcG9uZW50ID0gbmV3IFhNTFJlZmFjdG9yaW5nQ29tcG9uZW50KAotCQkJCQkJY29tcG9uZW50LAotCQkJCQkJKElET01FbGVtZW50KWNvbXBvbmVudC5nZXRFbGVtZW50KCksIAotCQkJCQkJb3JpZ05hbWUsCi0JCQkJCQluYW1lc3BhY2UpOwotCQotCQkJCVJlbmFtZUNvbXBvbmVudFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgUmVuYW1lQ29tcG9uZW50UHJvY2Vzc29yKHJlZmFjdG9yaW5nQ29tcG9uZW50LCBuZXdOYW1lLCB0cnVlKTsgICAgCi0JCQkJUmVuYW1lUmVmYWN0b3JpbmcgcmVmYWN0b3JpbmcgPSBuZXcgUmVuYW1lUmVmYWN0b3JpbmcocHJvY2Vzc29yKTsKLQkJCQlQZXJmb3JtVW5zYXZlZFJlZmFjdG9yaW5nT3BlcmF0aW9uIHJlZmFjdG9yT3BlcmF0aW9uID0gbmV3IFBlcmZvcm1VbnNhdmVkUmVmYWN0b3JpbmdPcGVyYXRpb24ocmVmYWN0b3JpbmcpOwotCQkJCXJlZmFjdG9yT3BlcmF0aW9uLnJ1bihudWxsKTsgCi0JCQkJCi0JICAgICAgICAgICAgLy8gcm1haCA6IGR1ZSB0byB0aGUgb3JkZXJpbmcgaW4gd2hpY2ggcmVmYWN0b3JpbmcgaXMgY2FsbGVkCi0JICAgICAgICAgICAgLy8gKGkuZS4gdGhlIHJlZmVyZW5jZSBjaGFuZ2VzIGJlZm9yZSB0aGUgZGVjbGFyYXRpb24gY2hhbmdlcykgCi0JICAgICAgICAgICAgLy8gb3VyIG1vZGVsIHJlZmVyZW5jZXMgbWF5IGJlIG1lc3NlZCB1cCBhdCB0aGlzIHBvaW50LgotCSAgICAgICAgICAgIC8vIFRoZSBsaW5lIG9mIGNvZGUgYmVsb3cgZ2V0cyB0aGUgbW9kZWwgdG8gZml4IHVwIGl0cyByZWZlcmVuY2VzLiAgCi0JCQkJKChEZWZpbml0aW9uSW1wbCkgY29tcG9uZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSkucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0KLQkvLyBUT0RPOiBXZSBzaG91bGQgbG9vayBhdCB1c2luZyB0aGUgcmVmYWN0b3IgbWVjaGFuaXNtIHRvIGRvIHRoaXMgcmVuYW1pbmcuLi4uCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZU9wZXJhdGlvbkhlbHBlcihPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0JCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7IAotCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChkZWZpbml0aW9uKTsKLQkJSXRlcmF0b3IgaXQgPSB1dGlsLmdldEJpbmRpbmdPcGVyYXRpb25zKG9wZXJhdGlvbikuaXRlcmF0b3IoKTsKLQotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgaXQubmV4dCgpOwotCQkJRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGJpbmRpbmdPcGVyYXRpb24pOwotCQkJaWYgKGVsZW1lbnQgIT0gbnVsbCkKLQkJCXsgCi0JCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuZXdOYW1lKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJLy8JCSAgICBUT0RPOiBXZSBzaG91bGQgZ28gdGhyb3VnaCB0aGUgbW9kZWwgdG8gcmVuYW1lLi4uLiBOb3QgdGhlIEVsZW1lbnQuLi4KLQkJCS8vCQkJYmluZGluZ09wZXJhdGlvbi5zZXROYW1lKG5ld05hbWUpOwotCQl9Ci0JfQotCi0JLy8gVE9ETzogV2Ugc2hvdWxkIGxvb2sgYXQgdXNpbmcgdGhlIHJlZmFjdG9yIG1lY2hhbmlzbSB0byBkbyB0aGlzIHJlbmFtaW5nLi4uLgotCXByaXZhdGUgdm9pZCByZW5hbWVJT0ZIZWxwZXIoV1NETEVsZW1lbnQgb2JqZWN0KQotCXsgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9iamVjdC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7IAotCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChkZWZpbml0aW9uKTsKLQkJTGlzdCBsaXN0ID0gbnVsbDsKLQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgSW5wdXQpCi0JCXsKLQkJCWxpc3QgPSB1dGlsLmdldEJpbmRpbmdJbnB1dHMoKElucHV0KW9iamVjdCk7Ci0JCX0KLQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgT3V0cHV0KQotCQl7Ci0JCQlsaXN0ID0gdXRpbC5nZXRCaW5kaW5nT3V0cHV0cygoT3V0cHV0KW9iamVjdCk7Ci0JCX0KLQkJZWxzZSAvLyBmYXVsdAotCQl7Ci0JCQlsaXN0ID0gdXRpbC5nZXRCaW5kaW5nRmF1bHRzKChGYXVsdClvYmplY3QpOwotCQl9Ci0KLQkJaWYgKGxpc3QgIT0gbnVsbCkKLQkJewotCQkJZm9yIChJdGVyYXRvciBpID0gbGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotCQkJewotCQkJCU9iamVjdCBiaW5kaW5nT2JqZWN0ID0gaS5uZXh0KCk7Ci0JCQkJcmVuYW1lTW9kZWxPYmplY3RIZWxwZXIoYmluZGluZ09iamVjdCwgbmV3TmFtZSk7Ci0JCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQl9Ci0KLQkJcmVuYW1lTW9kZWxPYmplY3RIZWxwZXIob2JqZWN0LCBuZXdOYW1lKTsKLQl9Ci0KLQkvLyBUT0RPOiBXZSBzaG91bGQgbG9vayBhdCB1c2luZyB0aGUgcmVmYWN0b3IgbWVjaGFuaXNtIHRvIGRvIHRoaXMgcmVuYW1pbmcuLi4uCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKE9iamVjdCBtb2RlbE9iamVjdCwgU3RyaW5nIHRoZU5ld05hbWUpCi0JewotCQkvLyBUT0RPOiBXZSBzaG91bGQgZ28gdGhyb3VnaCB0aGUgbW9kZWwgdG8gcmVuYW1lLi4uLiBOb3QgdGhlIEVsZW1lbnQuLi4KLQkJRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KG1vZGVsT2JqZWN0KTsKLQkJaWYgKGVsZW1lbnQgIT0gbnVsbCkKLQkJeyAKLQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgdGhlTmV3TmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJfSAgICAKLQotCQlpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBNZXNzYWdlKQotCQl7Ci0JCQlNZXNzYWdlUmVuYW1lciByZW5hbWVyID0gbmV3IE1lc3NhZ2VSZW5hbWVyKChNZXNzYWdlKW1vZGVsT2JqZWN0LCB0aGVOZXdOYW1lKTsKLQkJCXJlbmFtZXIudmlzaXRCaW5kaW5ncygpOwotCQl9Ci0JCWVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgUG9ydFR5cGUpCi0JCXsKLQkJCVBvcnRUeXBlUmVuYW1lciByZW5hbWVyID0gbmV3IFBvcnRUeXBlUmVuYW1lcigoUG9ydFR5cGUpbW9kZWxPYmplY3QsIHRoZU5ld05hbWUpOwotCQkJcmVuYW1lci52aXNpdEJpbmRpbmdzKCk7Ci0JCX0KLQkJZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nKQotCQl7Ci0JCQlCaW5kaW5nUmVuYW1lciByZW5hbWVyID0gbmV3IEJpbmRpbmdSZW5hbWVyKChCaW5kaW5nKW1vZGVsT2JqZWN0LCB0aGVOZXdOYW1lKTsKLQkJCXJlbmFtZXIudmlzaXRTZXJ2aWNlcygpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNlODIwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBXMTFSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJvdGVjdGVkIElNZXNzYWdlUmVmZXJlbmNlIGxlZnRTaWJsaW5nOwotCXByb3RlY3RlZCBJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYmxpbmc7Ci0JcHJvdGVjdGVkIElNZXNzYWdlUmVmZXJlbmNlIG1vdmluZ1BhcmFtZXRlcjsKLQkKLQlwdWJsaWMgVzExUmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZChJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2libGluZywgSU1lc3NhZ2VSZWZlcmVuY2UgcmlnaHRTaWJsaW5nLCBJTWVzc2FnZVJlZmVyZW5jZSBtb3ZpbmdQYXJhbWV0ZXIpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9SRU9SREVSX01FU1NBR0VfUkVGRVJFTkNFLCBudWxsKTsKLQkJdGhpcy5sZWZ0U2libGluZyA9IGxlZnRTaWJsaW5nOwotCQl0aGlzLnJpZ2h0U2libGluZyA9IHJpZ2h0U2libGluZzsKLQkJdGhpcy5tb3ZpbmdQYXJhbWV0ZXIgPSBtb3ZpbmdQYXJhbWV0ZXI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCUlNZXNzYWdlUmVmZXJlbmNlIGxlZnRTaWJFbGVtZW50ID0gbnVsbDsKLQkJSU1lc3NhZ2VSZWZlcmVuY2UgbW92aW5nQ2hpbGQgPSBudWxsOwotCQkKLQkJaWYgKGxlZnRTaWJsaW5nIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCWxlZnRTaWJFbGVtZW50ID0gKElNZXNzYWdlUmVmZXJlbmNlKSBsZWZ0U2libGluZzsgCi0JCX0KLQkJaWYgKG1vdmluZ1BhcmFtZXRlciBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQltb3ZpbmdDaGlsZCA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbW92aW5nUGFyYW1ldGVyOwotCQl9Ci0JCQotCQlXMTFPcGVyYXRpb24gdzExT3BlcmF0aW9uID0gKFcxMU9wZXJhdGlvbikgbW92aW5nQ2hpbGQuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQkJT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIHcxMU9wZXJhdGlvbi5nZXRUYXJnZXQoKTsKLQkJCi0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQotCQkJaWYgKG1vdmluZ0NoaWxkLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0lOUFVUKSB7Ci0JCQkJaWYgKGxlZnRTaWJFbGVtZW50ID09IG51bGwpIHsKLQkJCQkJLy8gSW5wdXQvT3V0cHV0IHN0eWxlCi0JCQkJCXNldElucHV0T3V0cHV0T3JkZXIob3BlcmF0aW9uLCB0cnVlKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAobGVmdFNpYkVsZW1lbnQgIT0gbnVsbCAmJiBsZWZ0U2liRWxlbWVudC5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCkgewotCQkJCQlpZiAocmlnaHRTaWJsaW5nLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCkgewotCQkJCQkJLy8gSW5wdXQvT3V0cHV0IHN0eWxlCi0JCQkJCQlzZXRJbnB1dE91dHB1dE9yZGVyKG9wZXJhdGlvbiwgdHJ1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCS8vIE91dHB1dC9JbnB1dCBzdHlsZQotCQkJCQlzZXRJbnB1dE91dHB1dE9yZGVyKG9wZXJhdGlvbiwgZmFsc2UpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKG1vdmluZ0NoaWxkLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCkgewotCQkJCWlmIChsZWZ0U2liRWxlbWVudCA9PSBudWxsKSB7Ci0JCQkJCS8vIE91dHB1dC9JbnB1dCBzdHlsZQotCQkJCQlzZXRJbnB1dE91dHB1dE9yZGVyKG9wZXJhdGlvbiwgZmFsc2UpOwotCQkJCX0KLQkJCQllbHNlIGlmIChsZWZ0U2liRWxlbWVudCAhPSBudWxsICYmIGxlZnRTaWJFbGVtZW50LmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCkgewotCQkJCQlpZiAocmlnaHRTaWJsaW5nLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0lOUFVUKSB7Ci0JCQkJCQkvLyBPdXRwdXQvSW5wdXQgc3R5bGUKLQkJCQkJCXNldElucHV0T3V0cHV0T3JkZXIob3BlcmF0aW9uLCBmYWxzZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCS8vIElucHV0L091dHB1dCBzdHlsZQotCQkJCQlzZXRJbnB1dE91dHB1dE9yZGVyKG9wZXJhdGlvbiwgdHJ1ZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCS8vIGJvb2xlYW4gaW5wdXRGaXJzdCA9IHRydWUgaWYgdGhlIElucHV0IGlzIHRoZSBmaXJzdCBpbiB0aGUgb3JkZXIgb2YgSW5wdXQgYW5kIE91dHB1dAotCXByaXZhdGUgdm9pZCBzZXRJbnB1dE91dHB1dE9yZGVyKE9wZXJhdGlvbiBvcGVyYXRpb24sIGJvb2xlYW4gaW5wdXRGaXJzdCkgewotCQkvLyBXZSBuZWVkIHRvIGRldGVybWluZSBtb3JlIGluZm8gYmVmb3JlIHdlIGNhbiBzZXQgdGhlIHN0eWxlCQotCQlpZiAoaW5wdXRGaXJzdCAmJiBvcGVyYXRpb24uZ2V0RUlucHV0KCkgIT0gbnVsbCkgewotCQkJLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW4gT3V0cHV0Ci0JCQlpZiAob3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0JCQkJLy8gT3JkZXIgaXM6IElucHV0LCBPdXRwdXQKLQkJCQlzZXRPcGVyYXRpb25TdHlsZShvcGVyYXRpb24sIE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBPcmRlciBpczogSW5wdXQKLQkJCQlzZXRPcGVyYXRpb25TdHlsZShvcGVyYXRpb24sIE9wZXJhdGlvblR5cGUuT05FX1dBWSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAob3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0JCQkvLyBDaGVjayBpZiB0aGVyZSBpcyBhbiBJbnB1dAotCQkJaWYgKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0JCQkJLy8gT3JkZXIgaXM6IE91dHB1dCwgSW5wdXQKLQkJCQlzZXRPcGVyYXRpb25TdHlsZShvcGVyYXRpb24sIE9wZXJhdGlvblR5cGUuU09MSUNJVF9SRVNQT05TRSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBPcmRlciBpczogT3V0cHV0Ci0JCQkJc2V0T3BlcmF0aW9uU3R5bGUob3BlcmF0aW9uLCBPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTik7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldE9wZXJhdGlvblN0eWxlKE9wZXJhdGlvbiBvcGVyYXRpb24sIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSkgewotCQkvLyBJZiB0aGVyZSBpcyBubyBzdHlsZSB0byBiZWdpbiB3aXRoLCBkb24ndCBzZXQgb25lIG5vdwotCQlpZiAob3BlcmF0aW9uLmdldFN0eWxlKCkgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0JCQotCQlvcGVyYXRpb24uc2V0U3R5bGUob3BlcmF0aW9uVHlwZSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVvcmRlclBhcmFtZXRlcnNDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDc1ZTgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVvcmRlclBhcmFtZXRlcnNDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci0KLXB1YmxpYyBjbGFzcyBXMTFSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLSAgICBwcm90ZWN0ZWQgSVBhcmFtZXRlciBsZWZ0U2libGluZzsKLSAgICBwcm90ZWN0ZWQgSVBhcmFtZXRlciByaWdodFNpYmxpbmc7Ci0gICAgcHJvdGVjdGVkIElQYXJhbWV0ZXIgbW92aW5nUGFyYW1ldGVyOwotICAgIAotICAgIHB1YmxpYyBXMTFSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQoSVBhcmFtZXRlciBsZWZ0U2libGluZywgSVBhcmFtZXRlciByaWdodFNpYmxpbmcsIElQYXJhbWV0ZXIgbW92aW5nUGFyYW1ldGVyKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fUkVPUkRFUl9QQVJULCBudWxsKTsKLSAgICAgICAgdGhpcy5sZWZ0U2libGluZyA9IGxlZnRTaWJsaW5nOwotICAgICAgICB0aGlzLnJpZ2h0U2libGluZyA9IHJpZ2h0U2libGluZzsKLSAgICAgICAgdGhpcy5tb3ZpbmdQYXJhbWV0ZXIgPSBtb3ZpbmdQYXJhbWV0ZXI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0gICAgCWlmIChsZWZ0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQgfHwKLSAgICAJCXJpZ2h0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQgfHwKLSAgICAJCW1vdmluZ1BhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLSAgICAJCWV4ZWN1dGVGb3JQYXJ0KCk7Ci0gICAgCX0KLSAgICAJZWxzZSBpZiAobGVmdFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50IHx8Ci0gICAgICAgIAkJIHJpZ2h0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckVsZW1lbnQgfHwKLSAgICAgICAgCQkgbW92aW5nUGFyYW1ldGVyIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgewotICAgIAkJZXhlY3V0ZUZvckVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgIAllbHNlIGlmIChsZWZ0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckF0dHJpYnV0ZSB8fAotICAgICAgIAkJICAgICByaWdodFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUgfHwKLSAgICAJCSAgICAgbW92aW5nUGFyYW1ldGVyIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlKSB7Ci0vLyAgICAJCWV4ZWN1dGVGb3JFbGVtZW50KCk7Ci0gICAgCX0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGV4ZWN1dGVGb3JFbGVtZW50KCkgewotICAgIAlYU0RFbGVtZW50RGVjbGFyYXRpb24gbGVmdFNpYkVsZW1lbnQgPSBudWxsOwotICAgIAlYU0RFbGVtZW50RGVjbGFyYXRpb24gcmlnaHRTaWJFbGVtZW50ID0gbnVsbDsKLSAgICAJWFNERWxlbWVudERlY2xhcmF0aW9uIG1vdmluZ0NoaWxkID0gbnVsbDsKLSAgICAJCi0JCVhTRFBhcnRpY2xlIG1vdmluZ1BhcnRpY2xlID0gbnVsbDsKLQkJWFNEUGFydGljbGUgbGVmdFBhcnRpY2xlID0gbnVsbDsKLQkJWFNEUGFydGljbGUgcmlnaHRQYXJ0aWNsZSA9IG51bGw7Ci0KLQkJaWYgKGxlZnRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgewotCQkJbGVmdFNpYkVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSAoKFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIGxlZnRTaWJsaW5nKS5nZXRUYXJnZXQoKTsKLQkJCWxlZnRQYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgbGVmdFNpYkVsZW1lbnQuZUNvbnRhaW5lcigpOwotCQl9Ci0JCWlmIChyaWdodFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSB7Ci0JCQlyaWdodFNpYkVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSAoKFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIHJpZ2h0U2libGluZykuZ2V0VGFyZ2V0KCk7Ci0JCQlyaWdodFBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSByaWdodFNpYkVsZW1lbnQuZUNvbnRhaW5lcigpOwotCQl9Ci0JCWlmIChtb3ZpbmdQYXJhbWV0ZXIgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSB7Ci0JCQltb3ZpbmdDaGlsZCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pICgoVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgbW92aW5nUGFyYW1ldGVyKS5nZXRUYXJnZXQoKTsKLQkJCW1vdmluZ1BhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBtb3ZpbmdDaGlsZC5lQ29udGFpbmVyKCk7Ci0JCX0KLQkJCi0JCWlmIChtb3ZpbmdDaGlsZC5lcXVhbHMobGVmdFNpYkVsZW1lbnQpIHx8IG1vdmluZ0NoaWxkLmVxdWFscyhyaWdodFNpYkVsZW1lbnQpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLSAgICAJCi0gICAgCWlmIChtb3ZpbmdDaGlsZCAhPSBudWxsKSB7Ci0gICAgCQl0cnkgewotICAgIAkJCWJlZ2luUmVjb3JkaW5nKG1vdmluZ1BhcnRpY2xlLmdldEVsZW1lbnQoKSk7Ci0KLSAgICAJCQlYU0RNb2RlbEdyb3VwIGNvbnRhaW5lciA9IChYU0RNb2RlbEdyb3VwKSBtb3ZpbmdQYXJ0aWNsZS5nZXRDb250YWluZXIoKTsKLSAgICAJCQlMaXN0IHBhcnRpY2xlcyA9IGNvbnRhaW5lci5nZXRDb250ZW50cygpOwotICAgIAkJCQotICAgIAkJCXBhcnRpY2xlcy5yZW1vdmUobW92aW5nUGFydGljbGUpOwotCi0gICAgCQkJaW50IGxlZnRJbmRleCA9IC0xLCByaWdodEluZGV4ID0gLTE7Ci0gICAgCQkJaWYgKGxlZnRQYXJ0aWNsZSAhPSBudWxsKSB7Ci0gICAgCQkJCWxlZnRJbmRleCA9IHBhcnRpY2xlcy5pbmRleE9mKGxlZnRQYXJ0aWNsZSk7Ci0gICAgCQkJfQotICAgIAkJCWlmIChyaWdodFBhcnRpY2xlIT0gbnVsbCkgewotICAgIAkJCQlyaWdodEluZGV4ID0gcGFydGljbGVzLmluZGV4T2YocmlnaHRQYXJ0aWNsZSk7Ci0gICAgCQkJfQotCi0gICAgCQkJaWYgKGxlZnRJbmRleCA9PSAtMSkgewotICAgIAkJCQkvLyBBZGQgbW92aW5nIGNoaWxkIHRvIHRoZSBmcm9udAotICAgIAkJCQlwYXJ0aWNsZXMuYWRkKDAsIG1vdmluZ1BhcnRpY2xlKTsgIAkJCQkKLSAgICAJCQl9Ci0gICAgCQkJZWxzZSBpZiAocmlnaHRJbmRleCA9PSAtMSkgewotICAgIAkJCQkvLyBBZGQgbW92aW5nIGNoaWxkIHRvIHRoZSBlbmQKLSAgICAJCQkJcGFydGljbGVzLmFkZChtb3ZpbmdQYXJ0aWNsZSk7Ci0gICAgCQkJfQotICAgIAkJCWVsc2UgewotICAgIAkJCQkvLyBBZGQgbW92aW5nIGNoaWxkIGFmdGVyIHRoZSBvY2N1cmVuY2Ugb2YgdGhlIGxlZnQgc2libGluZwotICAgIAkJCQlwYXJ0aWNsZXMuYWRkKGxlZnRJbmRleCArIDEsIG1vdmluZ1BhcnRpY2xlKTsKLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCQlmaW5hbGx5IHsKLSAgICAJCQllbmRSZWNvcmRpbmcobW92aW5nUGFydGljbGUuZ2V0RWxlbWVudCgpKTsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgZXhlY3V0ZUZvclBhcnQoKSB7Ci0JCVBhcnQgbGVmdFNpYkVsZW1lbnQgPSBudWxsOwotCQlQYXJ0IHJpZ2h0U2liRWxlbWVudCA9IG51bGw7Ci0JCVBhcnQgbW92aW5nQ2hpbGQgPSBudWxsOwotCi0JCWlmIChsZWZ0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLQkJCWxlZnRTaWJFbGVtZW50ID0gKFBhcnQpICgoVzExUGFyYW1ldGVyRm9yUGFydCkgbGVmdFNpYmxpbmcpLmdldFRhcmdldCgpOyAKLQkJfQotCQlpZiAocmlnaHRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotCQkJcmlnaHRTaWJFbGVtZW50ID0gKFBhcnQpICgoVzExUGFyYW1ldGVyRm9yUGFydCkgcmlnaHRTaWJsaW5nKS5nZXRUYXJnZXQoKTsKLQkJfQotCQlpZiAobW92aW5nUGFyYW1ldGVyIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotCQkJbW92aW5nQ2hpbGQgPSAoUGFydCkgKChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBtb3ZpbmdQYXJhbWV0ZXIpLmdldFRhcmdldCgpOwotCQl9Ci0JCQotCQlpZiAobW92aW5nQ2hpbGQuZXF1YWxzKGxlZnRTaWJFbGVtZW50KSB8fCBtb3ZpbmdDaGlsZC5lcXVhbHMocmlnaHRTaWJFbGVtZW50KSkgewotCQkJcmV0dXJuOwotCQl9Ci0gICAgCQotICAgIAlpZiAobW92aW5nQ2hpbGQgIT0gbnVsbCkgewotICAgIAkJdHJ5IHsKLSAgICAJCQliZWdpblJlY29yZGluZyhtb3ZpbmdDaGlsZC5nZXRFbGVtZW50KCkpOwotICAgICAgICAJCU1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBtb3ZpbmdDaGlsZC5lQ29udGFpbmVyKCk7Ci0gICAgCQkJTGlzdCBwYXJ0cyA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCk7Ci0KLSAgICAJCQlwYXJ0cy5yZW1vdmUobW92aW5nQ2hpbGQpOwotCi0gICAgCQkJaW50IGxlZnRJbmRleCA9IC0xLCByaWdodEluZGV4ID0gLTE7Ci0gICAgCQkJaWYgKGxlZnRTaWJFbGVtZW50ICE9IG51bGwpIHsKLSAgICAJCQkJbGVmdEluZGV4ID0gcGFydHMuaW5kZXhPZihsZWZ0U2liRWxlbWVudCk7Ci0gICAgCQkJfQotICAgIAkJCWlmIChyaWdodFNpYkVsZW1lbnQgIT0gbnVsbCkgewotICAgIAkJCQlyaWdodEluZGV4ID0gcGFydHMuaW5kZXhPZihyaWdodFNpYkVsZW1lbnQpOwotICAgIAkJCX0KLQotICAgIAkJCWlmIChsZWZ0SW5kZXggPT0gLTEpIHsKLSAgICAJCQkJLy8gQWRkIG1vdmluZyBjaGlsZCB0byB0aGUgZnJvbnQKLSAgICAJCQkJcGFydHMuYWRkKDAsIG1vdmluZ0NoaWxkKTsgIAkJCQkKLSAgICAJCQl9Ci0gICAgCQkJZWxzZSBpZiAocmlnaHRJbmRleCA9PSAtMSkgewotICAgIAkJCQkvLyBBZGQgbW92aW5nIGNoaWxkIHRvIHRoZSBlbmQKLSAgICAJCQkJcGFydHMuYWRkKG1vdmluZ0NoaWxkKTsKLSAgICAJCQl9Ci0gICAgCQkJZWxzZSB7Ci0gICAgCQkJCS8vIEFkZCBtb3ZpbmcgY2hpbGQgYWZ0ZXIgdGhlIG9jY3VyZW5jZSBvZiB0aGUgbGVmdCBzaWJsaW5nCi0gICAgCQkJCXBhcnRzLmFkZChsZWZ0SW5kZXggKyAxLCBtb3ZpbmdDaGlsZCk7Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAkJZmluYWxseSB7Ci0gICAgCQkJZW5kUmVjb3JkaW5nKG1vdmluZ0NoaWxkLmdldEVsZW1lbnQoKSk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRBZGRyZXNzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRBZGRyZXNzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODgzZjFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QWRkcmVzc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5zcGVjaWFsaXplZC5XMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NQ29udGVudEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkRPTUNvbnRlbnRCdWlsZGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXRBZGRyZXNzQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByaXZhdGUgUG9ydCBwb3J0OwotCXByaXZhdGUgU3RyaW5nIG5ld0FkZHJlc3M7Ci0JCi0JcHVibGljIFcxMVNldEFkZHJlc3NDb21tYW5kKFBvcnQgcG9ydCwgU3RyaW5nIG5ld0FkZHJlc3MpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9FRElUX1BPUlRfQUREUkVTUywgcG9ydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLnBvcnQgPSBwb3J0OwotCQl0aGlzLm5ld0FkZHJlc3MgPSBuZXdBZGRyZXNzOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcocG9ydC5nZXRFbGVtZW50KCkpOwotCi0JCQkvLyBTaG91bGQgdGhlIGFjdHVhbCBzZXQgYWRkcmVzcyBjb2RlIGxpdmUgaW4gaXQncyAnb3duIHNlcGFyYXRlJyBjb21tYW5kPz8KLQkJCWlmICghc2V0QWRkcmVzcygpKSB7Ci0JCQkJY3JlYXRlTmV3RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQkJCQlzZXRBZGRyZXNzKCk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcocG9ydC5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBzZXRBZGRyZXNzKCkgewotCQlib29sZWFuIHN1Y2Nlc3MgPSBmYWxzZTsKLQkJCi0JCWlmIChwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlJdGVyYXRvciBlZUl0ID0gcG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChlZUl0Lmhhc05leHQoKSkgewotCQkJCU5vdGlmaWVyIG5vdGlmaWVyID0gKE5vdGlmaWVyKWVlSXQubmV4dCgpOwotCQkJCUFkYXB0ZXIgYWRhcHRlciA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KG5vdGlmaWVyKTsKLQkJICAgICAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIpIHsKLQkJICAgICAgICAJKChXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKWFkYXB0ZXIpLnNldExvY2F0aW9uVVJJKG5ld0FkZHJlc3MpOwotCQkgICAgICAgIAlzdWNjZXNzID0gdHJ1ZTsKLQkJICAgICAgICB9Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBzdWNjZXNzOwotCX0KLQotCS8qCi0JICogVE9ETzogcm1haDogV2UgbmVlZCB0byBjbGVhbiB0aGUgY29kZSBiZWxvdy4uLi4uCi0JICogVGhpbmdzIHNob3VsZCBiZSB3cmFwcGVkIHVwIGFuZCBwbGFjZWQgaW4gYSBjb21tb24gbG9jYXRpb24uICBDdXJyZW50bHksIHRoaXMgaXMKLQkgKiBmcm9tIHRoZSBBZGRFRU1lbnVBY3Rpb25Db250cml1Ym9yLmphdmEgY2xhc3MKLQkgKi8KLQlwcml2YXRlIHZvaWQgY3JlYXRlTmV3RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSB7Ci0JCUxpc3QgbW9kZWxRdWVyeUFjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCU1vZGVsUXVlcnkgbW9kZWxRdWVyeSA9IE1vZGVsUXVlcnlVdGlsLmdldE1vZGVsUXVlcnkocG9ydC5nZXRFbGVtZW50KCkuZ2V0T3duZXJEb2N1bWVudCgpKTsKLQkgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWQgPSBtb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKHBvcnQuZ2V0RWxlbWVudCgpKTsKLQkgICAgCi0JICAgIGlmIChlZCAhPSBudWxsKQotCSAgICB7Ci0JICAgICAgICAgIC8vIGFkZCBpbnNlcnQgY2hpbGQgbm9kZSBhY3Rpb25zCi0JICAgICAgICAgIC8vCi0JICAgICAgICAgIGludCBpYyA9IE1vZGVsUXVlcnkuSU5DTFVERV9DSElMRF9OT0RFUzsKLQkgICAgICAgICAgaW50IHZjID0gTW9kZWxRdWVyeS5WQUxJRElUWV9TVFJJQ1Q7Ci0KLQkgICAgICAgICAgbW9kZWxRdWVyeS5nZXRJbnNlcnRBY3Rpb25zKHBvcnQuZ2V0RWxlbWVudCgpLCBlZCwgLTEsIGljLCB2YywgbW9kZWxRdWVyeUFjdGlvbkxpc3QpOwotCSAgICAgfQotCSAgICAKLQkgICAgY3JlYXRlTmV3RXh0ZW5zaWJpbGl0eUVsZW1lbnRIZWxwZXIxKG1vZGVsUXVlcnlBY3Rpb25MaXN0KTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZU5ld0V4dGVuc2liaWxpdHlFbGVtZW50SGVscGVyMShMaXN0IG1vZGVsUXVlcnlBY3Rpb25MaXN0KQotCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAgIGZvciAoSXRlcmF0b3IgaSA9IG1vZGVsUXVlcnlBY3Rpb25MaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0JICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgICBNb2RlbFF1ZXJ5QWN0aW9uIGFjdGlvbiA9IChNb2RlbFF1ZXJ5QWN0aW9uKWkubmV4dCgpOwotCSAgICAgIENNTm9kZSBjbW5vZGUgPSBhY3Rpb24uZ2V0Q01Ob2RlKCk7Ci0JICAgICAgaWYgKGNtbm9kZSAhPSBudWxsKQotCSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgICAgIGJvb2xlYW4gaXNPdGhlck5hbWVzcGFjZSA9IGZhbHNlOwotCSAgICAgICAgQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gKENNRG9jdW1lbnQpY21ub2RlLmdldFByb3BlcnR5KCJDTURvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLQkgICAgICAgIGlmIChjbURvY3VtZW50ICE9IG51bGwpICAgICAgICAgIAotCSAgICAgICAgeyAgICAgICAgICAgICAKLQkgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IChTdHJpbmcpY21Eb2N1bWVudC5nZXRQcm9wZXJ0eSgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL3RhcmdldE5hbWVzcGFjZVVSSSIpOyAgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgICBpc090aGVyTmFtZXNwYWNlID0gbmFtZXNwYWNlVVJJICE9IG51bGwgJiYgIW5hbWVzcGFjZVVSSS5lcXVhbHMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpOwotCSAgICAgICAgfQotCi0JICAgICAgICBpZiAoaXNPdGhlck5hbWVzcGFjZSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgaW50IGNtTm9kZVR5cGUgPSBjbW5vZGUuZ2V0Tm9kZVR5cGUoKTsKLQkgICAgICAgICAgaWYgKGFjdGlvbi5nZXRLaW5kKCkgPT0gTW9kZWxRdWVyeUFjdGlvbi5JTlNFUlQpCi0JICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAgICAgICAgICAgc3dpdGNoIChjbU5vZGVUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgY2FzZSBDTU5vZGUuRUxFTUVOVF9ERUNMQVJBVElPTiA6Ci0JICAgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgCSAgY3JlYXRlTmV3RXh0ZW5zaWJpbGl0eUVsZW1lbnRIZWxwZXIyKChDTUVsZW1lbnREZWNsYXJhdGlvbiljbW5vZGUsIGFjdGlvbi5nZXRQYXJlbnQoKSwgYWN0aW9uLmdldFN0YXJ0SW5kZXgoKSk7Ci0JICAgICAgICAgICAgICAgIHJldHVybjsKLQkgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICB9Ci0JICAgICAgICAgIH0gICAgICAgICAgIAotCSAgICAgICAgfQotCSAgICAgIH0gICAKLQkgICAgfQotCSAgfQotCi0gICAgcHVibGljIHZvaWQgY3JlYXRlTmV3RXh0ZW5zaWJpbGl0eUVsZW1lbnRIZWxwZXIyKENNTm9kZSBjbW5vZGUsIE5vZGUgcGFyZW50LCBpbnQgaW5kZXgpCi0gICAgewotICAgICAgaWYgKGNtbm9kZSAhPSBudWxsICYmIHBhcmVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9IHBhcmVudC5nZXROb2RlVHlwZSgpID09IE5vZGUuRE9DVU1FTlRfTk9ERSA/IChEb2N1bWVudClwYXJlbnQgOiBwYXJlbnQuZ2V0T3duZXJEb2N1bWVudCgpOyAgICAgICAgCi0KLSAgICAgICAgRE9NQ29udGVudEJ1aWxkZXIgYnVpbGRlciA9IG5ldyBET01Db250ZW50QnVpbGRlckltcGwoZG9jdW1lbnQpOyAKLSAgICAgICAgYnVpbGRlci5zZXRQcm9wZXJ0eShET01Db250ZW50QnVpbGRlci5QUk9QRVJUWV9CVUlMRF9CTEFOS19URVhUX05PREVTLCBCb29sZWFuLlRSVUUpOwotICAgICAgICBidWlsZGVyLnNldEJ1aWxkUG9saWN5KERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX09OTFlfUkVRVUlSRURfQ09OVEVOVCk7Ci0gICAgICAgIGJ1aWxkZXIuYnVpbGQocGFyZW50LCBjbW5vZGUpOwotICAgICAgICBpbnNlcnROb2Rlc0F0SW5kZXgocGFyZW50LCBidWlsZGVyLmdldFJlc3VsdCgpLCBpbmRleCwgdHJ1ZSk7Ci0gICAgICB9Ci0gICAgfSAKLQotICAgIHB1YmxpYyB2b2lkIGluc2VydE5vZGVzQXRJbmRleChOb2RlIHBhcmVudCwgTGlzdCBsaXN0LCBpbnQgaW5kZXgsIGJvb2xlYW4gZm9ybWF0KQotICAgIHsgICAgICAgICAgICAgICAgICAgCi0gICAgICBOb2RlTGlzdCBub2RlTGlzdCA9IHBhcmVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGluZGV4ID0gbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgICB9Ci0gICAgICBOb2RlIHJlZkNoaWxkID0gKGluZGV4IDwgbm9kZUxpc3QuZ2V0TGVuZ3RoKCkpID8gbm9kZUxpc3QuaXRlbShpbmRleCkgOiBudWxsOwotICAgIAotICAgICAgLy8gaGVyZSB3ZSBjb25zaWRlciB0aGUgY2FzZSB3aGVyZSB0aGUgcHJldmlvdXMgbm9kZSBpcyBhICd3aGl0ZSBzcGFjZScgVGV4dCBub2RlCi0gICAgICAvLyB3ZSBzaG91bGQgcmVhbGx5IGRvIHRoZSBpbnNlcnQgYmVmb3JlIHRoaXMgbm9kZQotICAgICAgLy8KLSAgICAgIGludCBwcmV2SW5kZXggPSBpbmRleCAtIDE7Ci0gICAgICBOb2RlIHByZXZDaGlsZCA9IChwcmV2SW5kZXggPCBub2RlTGlzdC5nZXRMZW5ndGgoKSkgPyBub2RlTGlzdC5pdGVtKHByZXZJbmRleCkgOiBudWxsOwotCSAgICBpZiAoaXNXaGl0ZXNwYWNlVGV4dE5vZGUocHJldkNoaWxkKSkgCi0gICAgICB7Ci0JICAJICByZWZDaGlsZCA9IHByZXZDaGlsZDsKLQkgICAgfQotICAgIAotICAgICAgZm9yIChJdGVyYXRvciBpID0gbGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBOb2RlIG5ld05vZGUgPSAoTm9kZSlpLm5leHQoKTsKLSAgICAKLSAgICAgICAgaWYgKG5ld05vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkFUVFJJQlVURV9OT0RFKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gKEVsZW1lbnQpcGFyZW50OwotICAgICAgICAgIHBhcmVudEVsZW1lbnQuc2V0QXR0cmlidXRlTm9kZSgoQXR0ciluZXdOb2RlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZkNoaWxkKTsKLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbmV3Tm9kZSA9IChOb2RlKWkubmV4dCgpOwotICAgICAgICBpZiAoZm9ybWF0KQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkgICAgICBGb3JtYXRQcm9jZXNzb3JYTUwgZm9ybWF0UHJvY2Vzc29yWE1MID0gbmV3IEZvcm1hdFByb2Nlc3NvclhNTCgpOwotCQkgICAgICBmb3JtYXRQcm9jZXNzb3JYTUwuZm9ybWF0Tm9kZSgoSURPTU5vZGUpbmV3Tm9kZSk7Ci0gICAgICAgIH0gIAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgLy9zZXRWaWV3ZXJTZWxlY3Rpb24obGlzdCk7Ci0gICAgfSAgIAotCQotICAgIHByb3RlY3RlZCBib29sZWFuIGlzV2hpdGVzcGFjZVRleHROb2RlKE5vZGUgbm9kZSkgCi0gICAgewotCSAgICByZXR1cm4gKG5vZGUgIT0gbnVsbCkgJiYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkgJiYgKG5vZGUuZ2V0Tm9kZVZhbHVlKCkudHJpbSgpLmxlbmd0aCgpID09IDApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QmluZGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QmluZGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEyYWQzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEJpbmRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLQotcHVibGljIGNsYXNzIFcxMVNldEJpbmRpbmdDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJpdmF0ZSBQb3J0IHBvcnQ7Ci0JcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmc7Ci0JCi0JcHVibGljIFcxMVNldEJpbmRpbmdDb21tYW5kKFBvcnQgcG9ydCwgQmluZGluZyBiaW5kaW5nKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX0JJTkRJTkcsIHBvcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5wb3J0ID0gcG9ydDsKLQkJdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKHBvcnQuZ2V0RWxlbWVudCgpKTsKLQkJCXBvcnQuc2V0RUJpbmRpbmcoYmluZGluZyk7Ci0KLQkJCXVwZGF0ZVBvcnRQcm90b2NvbChwb3J0LCBiaW5kaW5nKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhwb3J0LmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHVwZGF0ZVBvcnRQcm90b2NvbChQb3J0IHBvcnQsIEJpbmRpbmcgYmluZGluZykgewotCQlTdHJpbmcgYmluZGluZ1Byb3RvY29sID0gZ2V0QmluZGluZ1Byb3RvY29sKGJpbmRpbmcpOwotCQlpZiAoYmluZGluZ1Byb3RvY29sICE9IG51bGwpIHsKLQkgICAgVzExRW5kUG9pbnQgcG9ydFByb3RvY29sID0gZ2V0UG9ydFByb3RvY29sKHBvcnQpOwotCSAgICBpZiAoKHBvcnRQcm90b2NvbCA9PSBudWxsKSB8fCAhKGJpbmRpbmdQcm90b2NvbC5lcXVhbHMocG9ydFByb3RvY29sLmdldFByb3RvY29sKCkpKSkgewotICAgICAgICBTdHJpbmcgcG9ydEFkZHJlc3MgPSBudWxsOwotCSAgICAgIGlmIChwb3J0UHJvdG9jb2wgIT0gbnVsbCkgewotCSAgICAgICAgcG9ydEFkZHJlc3MgPSBwb3J0UHJvdG9jb2wuZ2V0QWRkcmVzcygpOwotCSAgICAgIH0KLQkgICAgICBpZiAocG9ydEFkZHJlc3MgPT0gbnVsbCkgewotCSAgICAgICAgcG9ydEFkZHJlc3MgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZyI7IC8vJE5PTi1OTFMtMSQKLQkgICAgICB9Ci0JICAgICAgCi0gICAgICAgIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkgZmFjdG9yeVJlZ2lzdHJ5ID0gQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgICAgICBDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW5lcmF0b3IgPSBmYWN0b3J5UmVnaXN0cnkuZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZShiaW5kaW5nUHJvdG9jb2wpOwotICAgICAgICBpZiAoY29udGVudEdlbmVyYXRvciAhPSBudWxsKSB7Ci0gICAgICAgICAgY29udGVudEdlbmVyYXRvci5zZXRBZGRyZXNzTG9jYXRpb24ocG9ydEFkZHJlc3MpOwotICAgICAgICAgIGNvbnRlbnRHZW5lcmF0b3IuZ2VuZXJhdGVQb3J0Q29udGVudChwb3J0KTsKLSAgICAgICAgfQotCSAgICB9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEJpbmRpbmdQcm90b2NvbChCaW5kaW5nIGJpbmRpbmcpIHsKLSAgICBOb3RpZmllciBub3RpZmllciA9IChOb3RpZmllciliaW5kaW5nOwotICAgIEFkYXB0ZXIgYWRhcHRlciA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KG5vdGlmaWVyKTsKLSAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFcxMUJpbmRpbmcpIHsKLSAgICAgIHJldHVybiAoKFcxMUJpbmRpbmcpYWRhcHRlcikuZ2V0UHJvdG9jb2woKTsKLSAgICB9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgVzExRW5kUG9pbnQgZ2V0UG9ydFByb3RvY29sKFBvcnQgcG9ydCkgewotICAgIE5vdGlmaWVyIG5vdGlmaWVyID0gKE5vdGlmaWVyKXBvcnQ7Ci0gICAgQWRhcHRlciBhZGFwdGVyID0gV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQobm90aWZpZXIpOwotICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgVzExRW5kUG9pbnQpIHsKLSAgICAgIHJldHVybiAoVzExRW5kUG9pbnQpYWRhcHRlcjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRFbGVtZW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRFbGVtZW50Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDQ5ODdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0RWxlbWVudENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0RWxlbWVudENvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcml2YXRlIFBhcnQgcGFyZW50OwotCXByaXZhdGUgU3RyaW5nIGFjdGlvbjsKLQlwcml2YXRlIGJvb2xlYW4gY29udGludWVBcHBseTsKLQotCXB1YmxpYyBXMTFTZXRFbGVtZW50Q29tbWFuZChQYXJ0IHBhcmVudCwgU3RyaW5nIGFjdGlvbikgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9FTEVNRU5ULCBwYXJlbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0JCXRoaXMuYWN0aW9uID0gYWN0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkKLQl7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCWNvbnRpbnVlQXBwbHkgPSB0cnVlOyAKLQkJCWlmIChhY3Rpb24uZXF1YWxzKElQYXJhbWV0ZXIuU0VUX05FV19BQ1RJT05fSUQpKQotCQkJewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gbmV3VmFsdWUgPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbilpbnZva2VEaWFsb2coY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuZ2V0TmV3RGlhbG9nKCkpOwotCi0JCQkJLy8gU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIG5ldyB0eXBlCi0JCQkJaWYgKGNvbnRpbnVlQXBwbHkpCi0JCQkJCWNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShwYXJlbnQsIG5ld1ZhbHVlKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIG5ld1ZhbHVlID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24paW52b2tlRGlhbG9nKGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpKTsKLQkJCQlpZiAoY29udGludWVBcHBseSkKLQkJCQkJY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHBhcmVudCwgbmV3VmFsdWUpOwotCQkJfQotCQkJZm9ybWF0Q2hpbGQocGFyZW50LmdldEVsZW1lbnQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgT2JqZWN0IGludm9rZURpYWxvZyhJQ29tcG9uZW50RGlhbG9nIGRpYWxvZykKLQl7Ci0JCU9iamVjdCBuZXdWYWx1ZSA9IG51bGw7Ci0JCQotCQlpZiAoZGlhbG9nID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCQotCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spCi0JCXsKLQkJCW5ld1ZhbHVlID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQljb250aW51ZUFwcGx5ID0gZmFsc2U7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdWYWx1ZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkKLQl7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlc3VsdCA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvciAhPSBudWxsKQotCQl7Ci0JCQlyZXN1bHQgPSAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpZWRpdG9yLmdldEFkYXB0ZXIoWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKTsKLQkJCQotCQkJaWYgKGVkaXRvciBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikKLQkJCXsKLQkJCQlJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvciA9IChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIGVkaXRvcjsKLQkJCQkKLQkJCQlMaXN0IHR5cGVzID0gd3NkbEVkaXRvci5nZXRNb2RlbCgpLmdldFR5cGVzKCk7Ci0JCQkJWFNEU2NoZW1hW10gc2NoZW1hcyA9IG5ldyBYU0RTY2hlbWFbdHlwZXMuc2l6ZSgpXTsKLQkJCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQkJCVcxMVR5cGUgdHlwZSA9IChXMTFUeXBlKSB0eXBlcy5nZXQoaW5kZXgpOwotCQkJCQlzY2hlbWFzW2luZGV4XSA9IChYU0RTY2hlbWEpIHR5cGUuZ2V0VGFyZ2V0KCk7Ci0JCQkJfQotCQkJCQotCQkJCSgoV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcmVzdWx0KS5zZXRTY2hlbWFzKHNjaGVtYXMpOwotCQkJCQotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCX0gIAotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0SW50ZXJmYWNlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRJbnRlcmZhY2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxODgyZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRJbnRlcmZhY2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0SW50ZXJmYWNlQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByaXZhdGUgQmluZGluZyBiaW5kaW5nOwotCXByaXZhdGUgUG9ydFR5cGUgcG9ydFR5cGU7Ci0JCi0JcHVibGljIFcxMVNldEludGVyZmFjZUNvbW1hbmQoQmluZGluZyBiaW5kaW5nLCBQb3J0VHlwZSBwb3J0VHlwZSkgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9QT1JUVFlQRSwgYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotCQl0aGlzLnBvcnRUeXBlID0gcG9ydFR5cGU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhiaW5kaW5nLmdldEVsZW1lbnQoKSk7Ci0JCQliaW5kaW5nLnNldEVQb3J0VHlwZShwb3J0VHlwZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoYmluZGluZy5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0VHlwZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0VHlwZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU4ZjYwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldFR5cGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0VHlwZUNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcml2YXRlIE9iamVjdCBwYXJlbnQ7Ci0JcHJpdmF0ZSBTdHJpbmcgYWN0aW9uOwotCXByaXZhdGUgYm9vbGVhbiBjb250aW51ZUFwcGx5OwotCQotCXB1YmxpYyBXMTFTZXRUeXBlQ29tbWFuZChPYmplY3QgcGFyZW50LCBTdHJpbmcgYWN0aW9uKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX1RZUEUsIG51bGwpOwotCQl0aGlzLnBhcmVudCA9IHBhcmVudDsKLQkJdGhpcy5hY3Rpb24gPSBhY3Rpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKQotCXsKLQkJdHJ5IHsKLQkJCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJCWJlZ2luUmVjb3JkaW5nKCgoV1NETEVsZW1lbnQpIHBhcmVudCkuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQotCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJY29udGludWVBcHBseSA9IHRydWU7IAotCQkJaWYgKGFjdGlvbi5lcXVhbHMoSVBhcmFtZXRlci5TRVRfTkVXX0FDVElPTl9JRCkpCi0JCQl7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBuZXdWYWx1ZSA9IChDb21wb25lbnRTcGVjaWZpY2F0aW9uKWludm9rZURpYWxvZyhjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5nZXROZXdEaWFsb2coKSk7Ci0KLQkJCQkvLyBTZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgbmV3IHR5cGUKLQkJCQlpZiAoY29udGludWVBcHBseSkKLQkJCQkJY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHBhcmVudCwgbmV3VmFsdWUpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gbmV3VmFsdWUgPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbilpbnZva2VEaWFsb2coY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCkpOwotCQkJCWlmIChjb250aW51ZUFwcGx5KQotCQkJCQljb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UocGFyZW50LCBuZXdWYWx1ZSk7Ci0JCQl9Ci0KLQkJCS8vIEZvcm1hdAotCQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkJZm9ybWF0Q2hpbGQoKChXU0RMRWxlbWVudCkgcGFyZW50KS5nZXRFbGVtZW50KCkpOwotCQkJfQotCQkJZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpIHsKLQkJCQlmb3JtYXRDaGlsZCgoKFhTRENvbmNyZXRlQ29tcG9uZW50KSBwYXJlbnQpLmdldEVsZW1lbnQoKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAocGFyZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCQllbmRSZWNvcmRpbmcoKChXU0RMRWxlbWVudCkgcGFyZW50KS5nZXRFbGVtZW50KCkpOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgT2JqZWN0IGludm9rZURpYWxvZyhJQ29tcG9uZW50RGlhbG9nIGRpYWxvZykKLQl7Ci0JCU9iamVjdCBuZXdWYWx1ZSA9IG51bGw7Ci0JCQotCQlpZiAoZGlhbG9nID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCQotCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spCi0JCXsKLQkJCW5ld1ZhbHVlID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQljb250aW51ZUFwcGx5ID0gZmFsc2U7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdWYWx1ZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkKLQl7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlc3VsdCA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvciAhPSBudWxsKQotCQl7Ci0JCQlyZXN1bHQgPSAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpZWRpdG9yLmdldEFkYXB0ZXIoWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKTsKLQkJCQotCQkJaWYgKGVkaXRvciBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikKLQkJCXsKLQkJCQlJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvciA9IChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIGVkaXRvcjsKLQkJCQkKLQkJCQlMaXN0IHR5cGVzID0gd3NkbEVkaXRvci5nZXRNb2RlbCgpLmdldFR5cGVzKCk7Ci0JCQkJWFNEU2NoZW1hW10gc2NoZW1hcyA9IG5ldyBYU0RTY2hlbWFbdHlwZXMuc2l6ZSgpXTsKLQkJCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQkJCVcxMVR5cGUgdHlwZSA9IChXMTFUeXBlKSB0eXBlcy5nZXQoaW5kZXgpOwotCQkJCQlzY2hlbWFzW2luZGV4XSA9IChYU0RTY2hlbWEpIHR5cGUuZ2V0VGFyZ2V0KCk7Ci0JCQkJfQotCQkJCQotCQkJCSgoV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcikgcmVzdWx0KS5zZXRTY2hlbWFzKHNjaGVtYXMpOwotCQkJCQotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCX0gIAotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNjliODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmZvcm1hdC5JU3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvci5XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBleHRlbmRzIENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTCA9ICJ4bWwiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0KLSAgcHVibGljIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQoU3RyaW5nIGxhYmVsLCBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBzdXBlcihsYWJlbCk7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgYmVnaW5SZWNvcmRpbmcoT2JqZWN0IGVsZW1lbnQpIHsKLQkgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSURPTU5vZGUpIHsKLQkJICAoKElET01Ob2RlKSBlbGVtZW50KS5nZXRNb2RlbCgpLmJlZ2luUmVjb3JkaW5nKHRoaXMsIGdldFVuZG9EZXNjcmlwdGlvbigpKTsKLQkgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgZW5kUmVjb3JkaW5nKE9iamVjdCBlbGVtZW50KSB7Ci0JICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElET01Ob2RlKSB7Ci0JCSAgKChJRE9NTm9kZSkgZWxlbWVudCkuZ2V0TW9kZWwoKS5lbmRSZWNvcmRpbmcodGhpcyk7Ci0JICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkgewotCSAgcmV0dXJuIGdldExhYmVsKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGZvcm1hdENoaWxkKEVsZW1lbnQgY2hpbGQpCi0gIHsKLSAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICB7Ci0gICAgICBJRE9NTW9kZWwgbW9kZWwgPSAoKElET01Ob2RlKWNoaWxkKS5nZXRNb2RlbCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIHRlbGwgdGhlIG1vZGVsIHRoYXQgd2UgYXJlIGFib3V0IHRvIG1ha2UgYSBiaWcgbW9kZWwgY2hhbmdlCi0gICAgICAgIG1vZGVsLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotICAgICAgICAKLSAgICAgICAgSVN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IgZm9ybWF0UHJvY2Vzc29yID0gbmV3IEZvcm1hdFByb2Nlc3NvclhNTCgpOwotICAgICAgICBmb3JtYXRQcm9jZXNzb3IuZm9ybWF0Tm9kZShjaGlsZCk7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIC8vIHRlbGwgdGhlIG1vZGVsIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0aGUgYmlnIG1vZGVsIGNoYW5nZQotICAgICAgICBtb2RlbC5jaGFuZ2VkTW9kZWwoKTsgCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCi0gIHsKLSAgICBlbnN1cmVEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGdldE5ld1hTREVsZW1lbnQoWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQpIHsgCi0JICBXMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvciB2aXNpdG9yID0gbmV3IFcxMUZpbmRJbm5lckVsZW1lbnRWaXNpdG9yKCk7Ci0JICByZXR1cm4gdmlzaXRvci5nZXRJbm5lclhTREVsZW1lbnQoeHNkRWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgZW5zdXJlRGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLQotICAgIEVsZW1lbnQgZGVmaW5pdGlvbnNFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLSAgICBpZiAoZGVmaW5pdGlvbnNFbGVtZW50ID09IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGdldERlZmF1bHROYW1lc3BhY2UoZGVmaW5pdGlvbik7Ci0gICAgICBkZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZShudWxsLCBnZXRGaWxlTmFtZShkZWZpbml0aW9uKSkpOwotICAgICAgZGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ3c2RsIiwgV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpOyAvLyROT04tTkxTLTEkCi0gICAgICBkZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgIC8vIE1vdmluZyB0aGVzZSBhYm92ZSB1cGRhdGVFbGVtZW50KCkgc2VlbXMgdG8gY2F1c2UgZ3JpZWYgd2l0aCB0aGUgbW9kZWwuCi0gICAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgidG5zIiwgdGFyZ2V0TmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInhzZCIsIFdTRExDb25zdGFudHMuWFNEX05BTUVTUEFDRV9VUkkpOyAvLyROT04tTkxTLTEkCi0gICAgICBkZWZpbml0aW9uc0VsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICB9Ci0KLSAgICBlbnN1cmVYTUxEaXJlY3RpdmUoZG9jdW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBlbnN1cmVYTUxEaXJlY3RpdmUoRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBpZiAoaGFzWE1MRGlyZWN0aXZlKGRvY3VtZW50KSkKLSAgICB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIE5vZGUgZmlyc3RDaGlsZCA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLSAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24geG1sRGVjbGFyYXRpb24gPSBnZXRYTUxEZWNsYXJhdGlvbihkb2N1bWVudCk7Ci0gICAgZG9jdW1lbnQuaW5zZXJ0QmVmb3JlKHhtbERlY2xhcmF0aW9uLCBmaXJzdENoaWxkKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNYTUxEaXJlY3RpdmUoRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBOb2RlIGZpcnN0Q2hpbGQgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0gICAKLSAgICBpZiAoZmlyc3RDaGlsZCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGZpcnN0Q2hpbGQuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gID0gKFByb2Nlc3NpbmdJbnN0cnVjdGlvbilmaXJzdENoaWxkOwotICAgIAotICAgIGlmICghcHJvY2Vzc2luZ0luc3RydWN0aW9uLmdldFRhcmdldCgpLmVxdWFscyhYTUwpKSAKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgUHJvY2Vzc2luZ0luc3RydWN0aW9uIGdldFhNTERlY2xhcmF0aW9uKERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZSA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0gICAgU3RyaW5nIGNoYXJTZXQgPSBwcmVmZXJlbmNlLmdldFN0cmluZyhDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5PVVRQVVRfQ09ERVNFVCk7Ci0gICAgaWYgKGNoYXJTZXQgPT0gbnVsbCB8fCBjaGFyU2V0LnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgY2hhclNldCA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uIHhtbERlY2xhcmF0aW9uID0gZG9jdW1lbnQuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKFhNTCwgInZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiIgKyBjaGFyU2V0ICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIHJldHVybiB4bWxEZWNsYXJhdGlvbjsKLSAgICAKLSAgfQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdE5hbWVzcGFjZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRSk7Ci0KLSAgICBpZiAoIW5hbWVzcGFjZS5lbmRzV2l0aCgiLyIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgbmFtZXNwYWNlID0gbmFtZXNwYWNlLmNvbmNhdCgiLyIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgbmFtZXNwYWNlICs9IGdldEZpbGVOYW1lKGRlZmluaXRpb24pICsgIi8iOyAvLyROT04tTkxTLTEkCi0KLSAgICByZXR1cm4gbmFtZXNwYWNlOwotCi0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RmlsZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLSAgICBJUGF0aCBmaWxlUGF0aCA9IG5ldyBQYXRoKGZpbGVMb2NhdGlvbik7Ci0gICAgcmV0dXJuIGZpbGVQYXRoLnJlbW92ZUZpbGVFeHRlbnNpb24oKS5sYXN0U2VnbWVudCgpLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9zcGVjaWFsaXplZC9XMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMzZmYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9zcGVjaWFsaXplZC9XMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlciBleHRlbmRzIFcxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcgotewotICAvLyBUT0RPLi4uIG1ha2UgdGhpcyBjbGFzcyBhYnN0cmFjdCBhbmQgcHJvdmlkZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgaW4KLSAgLy8gU09BUCBhbmQgSFRUUCBwYWNrYWdlcy4gVGhlIFdTRExBZGFwdGVyRmFjdG9yeSBuZWVkcyB0byBrbm93IHRvIGRlbGVnYXRlIHRvIGV4dGVuc2lvbgotICAvLyBhZGFwdGVycyB0byBzdXBwb3J0IHRoZSBhZGRpdGlvbiBvZiBtb3JlIGV4dGVuc2lvbiBsYW5ndWFnZXMKLSAgLy8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpCi0gIHsKLSAgICBTdHJpbmcgYWRkcmVzcyA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgIHsKLSAgICAgIGFkZHJlc3MgPSAoKFNPQVBBZGRyZXNzKSB0YXJnZXQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKQotICAgIHsKLSAgICAgIGFkZHJlc3MgPSAoKEhUVFBBZGRyZXNzKSB0YXJnZXQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgfQotICAgIHJldHVybiBhZGRyZXNzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIGFkZHJlc3MpCi0gIHsKLSAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgewotICAgICAgKChTT0FQQWRkcmVzcykgdGFyZ2V0KS5zZXRMb2NhdGlvblVSSShhZGRyZXNzKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0gICAgewotICAgICAgKChIVFRQQWRkcmVzcykgdGFyZ2V0KS5zZXRMb2NhdGlvblVSSShhZGRyZXNzKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3NwZWNpYWxpemVkL1cxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGQ0ZmI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIKLXsKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvdmlzaXRvci9XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWE1MjQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvdmlzaXRvci9XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnZpc2l0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotCi0vKgotICogQ2xhc3MgdXNlZCB0byBmaW5kIGFuZCByZXR1cm4gdGhlICJpbm5lciIgWFNERWxlbWVudCB3aGVuIGdpdmVuIGFuIFhTREVsZW1lbnQuCi0gKiBUaGlzIGNsYXNzIGV4dGVuZHMgVzExWFNEVmlzaXRvciB3aGljaCByZW1vdmVzIHRoZSBuZWVkIGZvciB0aGlzIGNsYXNzIHRvIHJlaW1wbGVtZW50Ci0gKiB0aGUgYWN0dWFsIHRyYXZlcnNhbCBvZiB0aGUgWFNEIE1vZGVsIHRvIGxvY2F0ZSB0aGUgaW5uZXIgWFNERWxlbWVudC4KLSAqIAotICogQnkgZGVmYXVsdCwgdGhpcyBjbGFzcyB3aWxsIGxvY2F0ZSB0aGUgaW5uZXIgWFNERWxlbWVudCBhdCBkZXB0aCAyLiAgSG93ZXZlciwgdGhpcyBkZXB0aAotICogY2FuIGJlIGNoYW5nZWQgYnkgY2FsbGluZyBzZXRFbGVtZW50RGVwdGgobmV3RGVwdGgpLgotICovCi1wdWJsaWMgY2xhc3MgVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IgZXh0ZW5kcyBXMTFYU0RWaXNpdG9yIHsKLQkgIHByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudEF0RGVwdGg7Ci0JICBwcm90ZWN0ZWQgaW50IGVsZW1lbnREZXB0aCA9IDI7Ci0JICBwcm90ZWN0ZWQgaW50IGRlcHRoID0gMTsKLQkgIAotCSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRJbm5lclhTREVsZW1lbnQoWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQpIHsKLQkJICBlbGVtZW50QXREZXB0aCA9IHhzZEVsZW1lbnQ7Ci0JCSAgZGVwdGggPSAxOwotCQkgIHZpc2l0RWxlbWVudERlY2xhcmF0aW9uKHhzZEVsZW1lbnQpOwotCQkgIAotCQkgIHJldHVybiBlbGVtZW50QXREZXB0aDsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgdmlzaXRFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpIHsKLQkJICBpZiAoZGVwdGggPT0gZWxlbWVudERlcHRoKSB7Ci0JCQkgIGVsZW1lbnRBdERlcHRoID0gZWxlbWVudDsKLQkJICB9Ci0JCSAgZGVwdGgrKzsKLQkJICAKLQkJICBzdXBlci52aXNpdEVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0RWxlbWVudERlcHRoKGludCBlbGVtZW50RGVwdGgpIHsKLQkJICB0aGlzLmVsZW1lbnREZXB0aCA9IGVsZW1lbnREZXB0aDsgCi0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMVhTRFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlOTI0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRElkZW50aXR5Q29uc3RyYWludERlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXBEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROb3RhdGlvbkRlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEV2lsZGNhcmQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFYU0RWaXNpdG9yCi17Ci0gIHB1YmxpYyBXMTFYU0RWaXNpdG9yKCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgWFNEU2NoZW1hIHNjaGVtYTsKLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0U2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpCi0gIHsKLSAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2NoZW1hLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ciA9IChYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyKTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSAoWFNEVHlwZURlZmluaXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0VHlwZURlZmluaXRpb24odHlwZSk7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdEVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRJZGVudGl0eUNvbnN0cmFpbnREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNESWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbiBpZGVudGl0eUNvbnN0cmFpbnQgPSAoWFNESWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRJZGVudGl0eUNvbnN0cmFpbnREZWZpbml0aW9uKGlkZW50aXR5Q29uc3RyYWludCk7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzY2hlbWEuZ2V0TW9kZWxHcm91cERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiBtb2RlbEdyb3VwID0gKFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdE1vZGVsR3JvdXBEZWZpbml0aW9uKG1vZGVsR3JvdXApOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2NoZW1hLmdldEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiBhdHRyaWJ1dGVHcm91cCA9IChYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKGF0dHJpYnV0ZUdyb3VwKTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXROb3RhdGlvbkRlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNETm90YXRpb25EZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTRE5vdGF0aW9uRGVjbGFyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0Tm90YXRpb25EZWNsYXJhdGlvbihlbGVtZW50KTsKLSAgICB9Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlRGVjbGFyYXRpb24oWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cikKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGUpCi0gIHsKLSAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0U2ltcGxlVHlwZURlZmluaXRpb24oKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKXR5cGUpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pdHlwZSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdEVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmlzRWxlbWVudERlY2xhcmF0aW9uUmVmZXJlbmNlKCkpCi0gICAgewotICAgIH0KLSAgICBlbHNlIGlmIChlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdFR5cGVEZWZpbml0aW9uKGVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdElkZW50aXR5Q29uc3RyYWludERlZmluaXRpb24oWFNESWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbiBpZGVudGl0eUNvbnN0cmFpbnQpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRNb2RlbEdyb3VwRGVmaW5pdGlvbihYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiBtb2RlbEdyb3VwRGVmKQotICB7Ci0gICAgaWYgKCFtb2RlbEdyb3VwRGVmLmlzTW9kZWxHcm91cERlZmluaXRpb25SZWZlcmVuY2UoKSkKLSAgICB7Ci0gICAgICBpZiAobW9kZWxHcm91cERlZi5nZXRNb2RlbEdyb3VwKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdmlzaXRNb2RlbEdyb3VwKG1vZGVsR3JvdXBEZWYuZ2V0TW9kZWxHcm91cCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IG1vZGVsR3JvdXBEZWYuZ2V0UmVzb2x2ZWRNb2RlbEdyb3VwRGVmaW5pdGlvbigpLmdldE1vZGVsR3JvdXAoKTsKLSAgICAgIGlmIChtb2RlbEdyb3VwICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0TW9kZWxHcm91cChtb2RlbEdyb3VwKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbihYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24gYXR0cmlidXRlR3JvdXApCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYXR0cmlidXRlR3JvdXAuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBPYmplY3QgbyA9IGl0Lm5leHQoKTsKLSAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEQXR0cmlidXRlVXNlKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVVc2UgYXR0clVzZSA9IChYU0RBdHRyaWJ1dGVVc2UpbzsKLSAgICAgICAgdmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyVXNlLmdldENvbnRlbnQoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24gYXR0ckdyb3VwID0gKFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbilvOwotICAgICAgICB2aXNpdEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbihhdHRyR3JvdXApOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXROb3RhdGlvbkRlY2xhcmF0aW9uKFhTRE5vdGF0aW9uRGVjbGFyYXRpb24gbm90YXRpb24pCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRTaW1wbGVUeXBlRGVmaW5pdGlvbihYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiB0eXBlKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB0eXBlKQotICB7Ci0gICAgaWYgKHR5cGUuZ2V0Q29udGVudCgpICE9IG51bGwpCi0gICAgewotICAgICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhDb250ZW50ID0gdHlwZS5nZXRDb250ZW50KCk7Ci0gICAgICBpZiAoY29tcGxleENvbnRlbnQgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgdmlzaXRTaW1wbGVUeXBlRGVmaW5pdGlvbigoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pY29tcGxleENvbnRlbnQpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoY29tcGxleENvbnRlbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkKLSAgICAgIHsKLSAgICAgICAgdmlzaXRQYXJ0aWNsZSgoWFNEUGFydGljbGUpIGNvbXBsZXhDb250ZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0UGFydGljbGUoWFNEUGFydGljbGUgcGFydGljbGUpCi0gIHsKLSAgICB2aXNpdFBhcnRpY2xlQ29udGVudChwYXJ0aWNsZS5nZXRDb250ZW50KCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFBhcnRpY2xlQ29udGVudChYU0RQYXJ0aWNsZUNvbnRlbnQgcGFydGljbGVDb250ZW50KQotICB7Ci0gICAgaWYgKHBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0TW9kZWxHcm91cERlZmluaXRpb24oKFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKSBwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKQotICAgIHsKLSAgICAgIHZpc2l0TW9kZWxHcm91cCgoWFNETW9kZWxHcm91cClwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgewotICAgICAgdmlzaXRFbGVtZW50RGVjbGFyYXRpb24oKFhTREVsZW1lbnREZWNsYXJhdGlvbilwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RXaWxkY2FyZCkKLSAgICB7Ci0gICAgICB2aXNpdFdpbGRjYXJkKChYU0RXaWxkY2FyZClwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRNb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCkKLSAgewotICAgIGlmIChtb2RlbEdyb3VwLmdldENvbnRlbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gbW9kZWxHcm91cC5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIHZpc2l0UGFydGljbGUocGFydGljbGUpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRXaWxkY2FyZChYU0RXaWxkY2FyZCB3aWxkY2FyZCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvckZvckZpZWxkcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMVhTRFZpc2l0b3JGb3JGaWVsZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJlNmRkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvckZvckZpZWxkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFcxMVhTRFZpc2l0b3JGb3JGaWVsZHMgZXh0ZW5kcyBXMTFYU0RWaXNpdG9yCi17Ci0gIHB1YmxpYyBXMTFYU0RWaXNpdG9yRm9yRmllbGRzKCkKLSAgewotICB9Ci0KLSAgTGlzdCBjb25jcmV0ZUNvbXBvbmVudExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIExpc3QgdGhpbmdzV2VOZWVkVG9MaXN0ZW5UbyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB0eXBlKQotICB7Ci0gICAgc3VwZXIudmlzaXRDb21wbGV4VHlwZURlZmluaXRpb24odHlwZSk7Ci0gICAgaWYgKHR5cGUuZ2V0QXR0cmlidXRlQ29udGVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IHR5cGUuZ2V0QXR0cmlidXRlQ29udGVudHMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQgYXR0ckdyb3VwQ29udGVudCA9IChYU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQpaXRlci5uZXh0KCk7Ci0gICAgICAgIGlmIChhdHRyR3JvdXBDb250ZW50IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlVXNlKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEQXR0cmlidXRlVXNlIGF0dHJVc2UgPSAoWFNEQXR0cmlidXRlVXNlKWF0dHJHcm91cENvbnRlbnQ7Ci0gICAgICAgICAgY29uY3JldGVDb21wb25lbnRMaXN0LmFkZChhdHRyVXNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChhdHRyR3JvdXBDb250ZW50IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uIGF0dHJHcm91cCA9IChYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pYXR0ckdyb3VwQ29udGVudDsKLSAgICAgICAgICB0aGluZ3NXZU5lZWRUb0xpc3RlblRvLmFkZChhdHRyR3JvdXApOwotICAgICAgICAgIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKGF0dHJHcm91cCk7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICAKLSAgcHVibGljIHZvaWQgdmlzaXRNb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCkKLSAgewotICAgIHN1cGVyLnZpc2l0TW9kZWxHcm91cChtb2RlbEdyb3VwKTsKLSAgICB0aGluZ3NXZU5lZWRUb0xpc3RlblRvLmFkZChtb2RlbEdyb3VwKTsgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiBhdHRyaWJ1dGVHcm91cCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBhdHRyaWJ1dGVHcm91cC5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgaWYgKG8gaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVVc2UpCi0gICAgICB7Ci0gICAgICAgIFhTREF0dHJpYnV0ZVVzZSBhdHRyaWJ1dGVVc2UgPSAoWFNEQXR0cmlidXRlVXNlKW87Ci0gICAgICAgIGNvbmNyZXRlQ29tcG9uZW50TGlzdC5hZGQoYXR0cmlidXRlVXNlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pCi0gICAgICB7Ci0gICAgICAgIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiBhdHRyR3JvdXAgPSAoWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKW87Ci0gICAgICAgIHRoaW5nc1dlTmVlZFRvTGlzdGVuVG8uYWRkKGF0dHJHcm91cCk7Ci0gICAgICAgIGlmIChhdHRyR3JvdXAuaXNBdHRyaWJ1dGVHcm91cERlZmluaXRpb25SZWZlcmVuY2UoKSkKLSAgICAgICAgewotICAgICAgICAgIGF0dHJHcm91cCA9IGF0dHJHcm91cC5nZXRSZXNvbHZlZEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbigpOwotICAgICAgICAgIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKGF0dHJHcm91cCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCkKLSAgewotICAgIC8vc3VwZXIudmlzaXRFbGVtZW50RGVjbGFyYXRpb24oZWxlbWVudCk7Ci0gICAgY29uY3JldGVDb21wb25lbnRMaXN0LmFkZChlbGVtZW50KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyKQotICB7Ci0gICAgc3VwZXIudmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyKTsKLSAgICBjb25jcmV0ZUNvbXBvbmVudExpc3QuYWRkKGF0dHIpOwotICB9Ci0KLQotICBwdWJsaWMgTGlzdCBnZXRDb25jcmV0ZUNvbXBvbmVudExpc3QoKQotICB7Ci0gICAgcmV0dXJuIGNvbmNyZXRlQ29tcG9uZW50TGlzdDsKLSAgfQotCi0KLSAgcHVibGljIExpc3QgZ2V0VGhpbmdzV2VOZWVkVG9MaXN0ZW5UbygpCi0gIHsKLSAgICByZXR1cm4gdGhpbmdzV2VOZWVkVG9MaXN0ZW5UbzsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q1ODdjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5mb3JtYXQuSVN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuWFNEQ29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQgewotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCAgICAgPSAwOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfRUxFTUVOVCAgICAgICAgICAgICAgICAgPSAxOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfQ09NUExFWFRZUEVfU0VRX0VMRU1FTlQgPSAyOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfQ09NUExFWFRZUEUgICAgICAgICAgICAgPSAzOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfU0lNUExFVFlQRQkJCSAgID0gNDsKLQotCXByb3RlY3RlZCBpbnQgc3R5bGUgPSAwOwotCXByb3RlY3RlZCBPcGVyYXRpb24gb3BlcmF0aW9uOwotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gbmV3WFNERWxlbWVudDsKLQlwcm90ZWN0ZWQgUGFydCBuZXdQYXJ0OwotCQotCXByb3RlY3RlZCBTdHJpbmcgbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWU7Ci0JcHJvdGVjdGVkIFN0cmluZyBuZXdYU0RFbGVtZW50TmFtZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5ld1dTRExNZXNzYWdlTmFtZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5ld1dTRExQYXJ0TmFtZTsKLQkKLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBydW4oKTsKLQlwdWJsaWMgYWJzdHJhY3QgTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JCi0JcHVibGljIEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIGludCBzdHlsZSkgewotCQl0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLQkJdGhpcy5zdHlsZSA9IHN0eWxlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTdHlsZShpbnQgc3R5bGUpIHsKLQkJdGhpcy5zdHlsZSA9IHN0eWxlOwotCX0KLQkKLQlwdWJsaWMgWFNERWxlbWVudERlY2xhcmF0aW9uIGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpIHsKLQkJcmV0dXJuIG5ld1hTREVsZW1lbnQ7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzUGFydEVsZW1lbnRSZWZlcmVuY2UoKSB7Ci0JCWlmIChzdHlsZSA9PSBQQVJUX0VMRU1FTlQgfHwgc3R5bGUgPT0gUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGNyZWF0ZVBhcnRFbGVtZW50U2VxRWxlbWVudFBhdHRlcm4oUGFydCBwYXJ0LCBYU0RFbGVtZW50RGVjbGFyYXRpb24gcGFydEVsZW1lbnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHJldHVybmVkWFNERWxlbWVudCA9IG51bGw7Ci0JCQotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gb3JpZ2luYWxFbGVtZW50ID0gbnVsbDsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGFub25YU0RFbGVtZW50ID0gbnVsbDsKLQkJCi0JCS8vIENyZWF0ZSB0aGUgWFNERWxlbWVudCAoYW5vbnltb3VzKSByZWZlcmVuY2VkIGJ5IHRoZSBQYXJ0IGlmIG5lY2Vzc2FyeQotCQlpZiAocGFydEVsZW1lbnQgPT0gbnVsbCB8fCBwYXJ0RWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpID09IG51bGwgfHwgcGFydEVsZW1lbnQuZ2V0U2NoZW1hKCkgPT0gbnVsbCkgewotCQkJYW5vblhTREVsZW1lbnQgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlQW5vbnltb3VzWFNERWxlbWVudERlZmluaXRpb24oZ2V0QW5vbnltb3VzWFNERWxlbWVudEJhc2VOYW1lKCksIHBhcnQpOwotLy8JCQlwYXJ0LnNldEVsZW1lbnREZWNsYXJhdGlvbihhbm9uWFNERWxlbWVudCk7Ci0JCQlTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBhbm9uWFNERWxlbWVudCk7Ci0JCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCBmYWxzZSwgcHJlZml4ZWROYW1lKTsKLQkJCXBhcnQuc2V0VHlwZURlZmluaXRpb24obnVsbCk7Ci0JCQkKLQkJCWlmIChwYXJ0RWxlbWVudCAhPSBudWxsICYmIHBhcnRFbGVtZW50LmdldFNjaGVtYSgpICE9IG51bGwpIHsKLQkJCQlvcmlnaW5hbEVsZW1lbnQgPSBwYXJ0RWxlbWVudDsKLQkJCQkvLyBSZW1vdmUgdGhlICdvcmlnaW5hbCcgWFNERWxlbWVudCBhcyBhIEdsb2JhbCBFbGVtZW50Ci0JCQkJcGFydEVsZW1lbnQuZ2V0U2NoZW1hKCkuZ2V0Q29udGVudHMoKS5yZW1vdmUocGFydEVsZW1lbnQpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJYW5vblhTREVsZW1lbnQgPSBwYXJ0RWxlbWVudDsKLQkJfQotCQkKLQkJLy8gQWRkIHRoZSAnb3JpZ2luYWwnIFhTREVsZW1lbnQgaWYgaXQncyB0eXBlIHdhc24ndCBhbm9ueW1vdXMKLQkJaWYgKG9yaWdpbmFsRWxlbWVudCAhPSBudWxsKSB7Ci0JCQlYU0RDb21wb25lbnRIZWxwZXIuYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChhbm9uWFNERWxlbWVudCwgb3JpZ2luYWxFbGVtZW50KTsKLQkJfQotCQkKLQkJLy8gQ3JlYXRlIGEgbmV3IFhTREVsZW1lbnQKLQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gWFNEQ29tcG9uZW50SGVscGVyLmdldFhTRE1vZGVsR3JvdXAoYW5vblhTREVsZW1lbnQsIHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQobnVsbCwgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCksIG1vZGVsR3JvdXApOwotCQkKLQkJLy8gQWRkIHRoZSBuZXdseSBjcmVhdGVkIFhTREVsZW1lbnQgdG8gdGhlIE1vZGVsR3JvdXAKLQkJWFNEQ29tcG9uZW50SGVscGVyLmFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoYW5vblhTREVsZW1lbnQsIHJldHVybmVkWFNERWxlbWVudCk7Ci0KLQkJZm9ybWF0Q2hpbGQoYW5vblhTREVsZW1lbnQuZ2V0RWxlbWVudCgpKTsKLQkJcmV0dXJuIHJldHVybmVkWFNERWxlbWVudDsKLQl9Ci0JCi0JcHJvdGVjdGVkIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjcmVhdGVQYXJ0RWxlbWVudFJlZmVyZW5jZUNvbXBvbmVudHMoUGFydCBwYXJ0KSB7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiByZXR1cm5lZFhTREVsZW1lbnQgPSBudWxsOwotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gcGFydEVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkKLQkJaWYgKHN0eWxlID09IFBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCkgewotCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gY3JlYXRlUGFydEVsZW1lbnRTZXFFbGVtZW50UGF0dGVybihwYXJ0LCBwYXJ0RWxlbWVudCk7Ci0JCX0KLQkJZWxzZSBpZiAoc3R5bGUgPT0gUEFSVF9FTEVNRU5UKSB7Ci0JCQlpZiAocGFydEVsZW1lbnQgPT0gbnVsbCkgewotCQkJCXJldHVybmVkWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSwgcGFydCk7Ci0JCQkJaWYgKHJldHVybmVkWFNERWxlbWVudCAhPSBudWxsICYmICFyZXR1cm5lZFhTREVsZW1lbnQuZXF1YWxzKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkpKSB7Ci0vLwkJCQkJcGFydC5zZXRFbGVtZW50RGVjbGFyYXRpb24ocmV0dXJuZWRYU0RFbGVtZW50KTsKLQkJCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgcmV0dXJuZWRYU0RFbGVtZW50KTsKLQkJCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgZmFsc2UsIHByZWZpeGVkTmFtZSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gY3JlYXRlUGFydEVsZW1lbnRTZXFFbGVtZW50UGF0dGVybihwYXJ0LCBwYXJ0RWxlbWVudCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQotCQotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlUGFydENvbXBsZXhUeXBlUmVmZXJlbmNlKFBhcnQgcGFydCkgewotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gcmV0dXJuZWRYU0RFbGVtZW50ID0gbnVsbDsKLQkJCi0JCWlmIChzdHlsZSA9PSBQQVJUX0NPTVBMRVhUWVBFX1NFUV9FTEVNRU5UKSB7Ci0JCQlYU0RUeXBlRGVmaW5pdGlvbiBvcmlnaW5hbFR5cGUgPSBudWxsOwotCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHRvcExldmVsVHlwZSA9IG51bGw7Ci0JCQkKLQkJCS8vIENyZWF0ZSB0aGUgQ29tcGxleFR5cGUgcmVmZXJlbmNlZCBieSB0aGUgUGFydCBpZiBuZWNlc3NhcnkKLQkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgPT0gbnVsbCB8fCBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikgewotCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSBYU0RDb21wb25lbnRIZWxwZXIuZ2V0WFNEU2NoZW1hKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJCQlTdHJpbmcgdG9wTGV2ZWxOYW1lID0gTmFtZVV0aWwuZ2V0WFNEQ29tcGxleFR5cGVOYW1lKHBhcnQuZ2V0TmFtZSgpLCBzY2hlbWEpOwotCQkJCXRvcExldmVsVHlwZSA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaWlvbih0b3BMZXZlbE5hbWUsIHBhcnQpOwotCQkJCQotCQkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikgewotCQkJCQlvcmlnaW5hbFR5cGUgPSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKXsKLQkJCQl0b3BMZXZlbFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQl9CQkJCi0JCQkKLQkJCS8vIENyZWF0ZSBhIG5ldyBYU0RFbGVtZW50Ci0JCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSBYU0RDb21wb25lbnRIZWxwZXIuZ2V0WFNETW9kZWxHcm91cCh0b3BMZXZlbFR5cGUpOwotCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQobnVsbCwgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCksIG1vZGVsR3JvdXApOwotCQkJCi0JCQkvLyBBZGQgdGhlICdvcmlnaW5hbCcgWFNERWxlbWVudCBpZiBpdCdzIHR5cGUgd2Fzbid0IGFub255bW91cwotCQkJaWYgKG9yaWdpbmFsVHlwZSAhPSBudWxsKSB7Ci0JCQkJLy8gQ3JlYXRlIGFub3RoZXIgbmV3IFhTREVsZW1lbnQgdG8gJ2NvbnRhaW4nIHRoZSBvcmlnaW5hbGx5IHJlZmVyZW5jZWQgWFNEU2ltcGxlVHlwZQotCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBvcmlnWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKG51bGwsIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpLCBtb2RlbEdyb3VwKTsKLQkJCQlvcmlnWFNERWxlbWVudC5zZXRUeXBlRGVmaW5pdGlvbihvcmlnaW5hbFR5cGUpOwotCQkJfQotCQkJCi0JCQkvLyBDaGFuZ2UgUGFydCByZWZlcmVuY2UKLS8vCQkJcGFydC5zZXRUeXBlRGVmaW5pdGlvbih0b3BMZXZlbFR5cGUpOwotCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgdG9wTGV2ZWxUeXBlKTsKLQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIHRydWUsIHByZWZpeGVkTmFtZSk7Ci0JCQlmb3JtYXRDaGlsZCh0b3BMZXZlbFR5cGUuZ2V0RWxlbWVudCgpKTsKLQkJfQotCQllbHNlIGlmIChzdHlsZSA9PSBQQVJUX0NPTVBMRVhUWVBFKSB7Ci0JCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSBudWxsOwotCQkJaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSA9PSBudWxsKSB7Ci0JCQkJLy8gQ3JlYXRlIGEgbmV3IENvbXBsZXhUeXBlCi0JCQkJWFNEU2NoZW1hIHNjaGVtYSA9IFhTRENvbXBvbmVudEhlbHBlci5nZXRYU0RTY2hlbWEocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQkJCVN0cmluZyBjb21wbGV4TmFtZSA9IE5hbWVVdGlsLmdldFhTRENvbXBsZXhUeXBlTmFtZShwYXJ0LmdldE5hbWUoKSwgc2NoZW1hKTsKLQkJCQljb21wbGV4VHlwZSA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaWlvbihjb21wbGV4TmFtZSwgcGFydCk7Ci0JCQkJCi0JCQkJLy8gQ3JlYXRlIGFuIFhTREVsZW1lbnQgZm9yIHRoZSBDb21wbGV4VHlwZQotCQkJCVhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCA9IFhTRENvbXBvbmVudEhlbHBlci5nZXRYU0RNb2RlbEdyb3VwKGNvbXBsZXhUeXBlKTsKLQkJCQlyZXR1cm5lZFhTREVsZW1lbnQgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChudWxsLCBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSwgeHNkTW9kZWxHcm91cCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBUT0RPOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlLi4uLi4gIFdlIGNhbiBkZWZhdWx0IHRvIHRoZSBQQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQgc3R5bGUKLQkJCQkvLyBzaW5jZSBpdCBoYW5kbGVzICdtdWx0aXBsZScgWFNERWxlbWVudHMuLi4uIE9SIC4uLi4uIHdlIGNhbiAnb3ZlcndyaXRlIGFuZCBzZXQgYSBuZXcKLQkJCQkvLyBYU0RFbGVtZW50Ci0JCQl9Ci0JCQkKLQkJCWlmIChjb21wbGV4VHlwZSAhPSBudWxsICYmICFjb21wbGV4VHlwZS5lcXVhbHMocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpKSkgewotLy8JCQkJcGFydC5zZXRUeXBlRGVmaW5pdGlvbihjb21wbGV4VHlwZSk7Ci0JCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgY29tcGxleFR5cGUpOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIHRydWUsIHByZWZpeGVkTmFtZSk7Ci0JCQkJZm9ybWF0Q2hpbGQoY29tcGxleFR5cGUuZ2V0RWxlbWVudCgpKTsKLQkJCX0JCi0JCX0KLQkJCi0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQkKLQkvKgotCSAqIENyZWF0ZSBpZiBuZWNlc3NhcnkgYSBNZXNzYWdlIGFuZCBQYXJ0IGZvciB0aGUgZ2l2ZW4gTWVzc2FnZVJlZmVyZW5jZQotCSAqIGFuZCByZXR1cm4gaXQncyBQYXJ0Ci0JICovCi0JcHJvdGVjdGVkIFBhcnQgY3JlYXRlV1NETENvbXBvbmVudHMoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7Ci0JCU1lc3NhZ2UgbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJUGFydCBwYXJ0ID0gbnVsbDsKLQkJCi0JCWlmIChtZXNzYWdlID09IG51bGwgfHwgbWVzc2FnZS5lQ29udGFpbmVyKCkgPT0gbnVsbCkgewotCQkJLy8gQ3JlYXRlIE1lc3NhZ2UKLQkJCUFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTWVzc2FnZUNvbW1hbmQobWVzc2FnZVJlZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGdldFdTRExNZXNzYWdlTmFtZSgpKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQltZXNzYWdlID0gKE1lc3NhZ2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCW1lc3NhZ2VSZWYuc2V0RU1lc3NhZ2UobWVzc2FnZSk7Ci0JCX0KLQkJCi0JCWlmIChtZXNzYWdlLmdldEVQYXJ0cygpLnNpemUoKSA9PSAwKSB7Ci0JCQkvLyBDcmVhdGUgUGFydAotCQkJU3RyaW5nIHBhcnROYW1lID0gZ2V0V1NETFBhcnROYW1lKCk7Ci0JCQlpZiAoc3R5bGUgPT0gUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQkJcGFydE5hbWUgPSBnZXREb2NMaXRXcmFwcGVkUGFydE5hbWUoKTsKLQkJCX0KLQkJCUFkZFBhcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgcGFydE5hbWUpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCXBhcnQgPSAoUGFydCkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQl9Ci0JCWVsc2UgewotCQkJLy8gdGhlcmUgaXMgYW4gZXhpc3RpbmcgUGFydAotLy8JCQlwYXJ0ID0gKFBhcnQpIG1lc3NhZ2UuZ2V0RVBhcnRzKCkuZ2V0KDApOwotCQl9Ci0JCWZvcm1hdENoaWxkKG1lc3NhZ2UuZ2V0RWxlbWVudCgpKTsKLQkJCi0JCXJldHVybiBwYXJ0OwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERvY0xpdFdyYXBwZWRQYXJ0TmFtZSgpIHsKLQkJcmV0dXJuICJwYXJhbWV0ZXJzIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlWFNET2JqZWN0cyhQYXJ0IHBhcnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHJldHVybmVkWFNERWxlbWVudCA9IG51bGw7Ci0JCWlmIChpc1BhcnRFbGVtZW50UmVmZXJlbmNlKCkpIHsKLQkJCS8vIElzIGEgUGFydCAtLT4gRWxlbWVudCByZWZlcmVuY2UKLQkJCWlmIChwYXJ0ID09IG51bGwgJiYgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpICE9IG51bGwgJiYgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpLmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCXBhcnQgPSAoUGFydCkgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCkuZ2V0KDApOwotCQkJfQotCQkJCi0JCQlyZXR1cm5lZFhTREVsZW1lbnQgPSBjcmVhdGVQYXJ0RWxlbWVudFJlZmVyZW5jZUNvbXBvbmVudHMocGFydCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvLyBJcyBhIFBhcnQgLS0+IENvbXBsZXggVHlwZSByZWZlcmVuY2UKLS8vCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gY3JlYXRlUGFydENvbXBsZXhUeXBlUmVmZXJlbmNlKHBhcnQpOwotCQkJCi0JCQkvLyBJZiBpdCdzIGEgUGFydCAtLT4gVHlwZSByZWZlcmVuY2UsIGFkZGluZyBhIG5ldyBwYXJhbWV0ZXIgYWx3YXlzIG1lYW5zIGFkZGluZyBhIG5ldyBQYXJ0Ci0JCQkvLyB3aXRoIGEgc3RyaW5nIHJlZmVyZW5jZS4gIEJlY2F1c2Ugb2YgdGhpcyBjYXNlLCB3ZSBzaG91bGQgcmVhbGx5IHJlbmFtZSB0aGlzIG1ldGhvZCBpbnN0ZWFkCi0JCQkvLyBvZiBjcmVhdGVYU0RPYmplY3RzKCkgc2luY2Ugd2UgbWF5IGVuZCB1cCBjcmVhdGluZyBhIFBhcnQuCi0JCQlpZiAocGFydCA9PSBudWxsICYmIGdldE1lc3NhZ2VSZWZlcmVuY2UoKSAhPSBudWxsICYmIGdldE1lc3NhZ2VSZWZlcmVuY2UoKS5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCQlMaXN0IHBhcnROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQlNZXNzYWdlIG1lc3NhZ2UgPSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkuZ2V0RU1lc3NhZ2UoKTsKLQkJCQlJdGVyYXRvciBpdCA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJCVBhcnQgaXRlbSA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0JCQkJCXBhcnROYW1lcy5hZGQoaXRlbS5nZXROYW1lKCkpOwotCQkJCX0KLQkJCQlTdHJpbmcgcGFydE5hbWUgPSBOYW1lVXRpbC5nZXRVbmlxdWVOYW1lSGVscGVyKGdldFdTRExQYXJ0TmFtZSgpLCBwYXJ0TmFtZXMpOwotCQkJCUFkZFBhcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgcGFydE5hbWUpOwotCQkJCWNvbW1hbmQucnVuKCk7Ci0JCQkJbmV3UGFydCA9IChQYXJ0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQpIHsKLSAgICAJU3RyaW5nIG5hbWUgPSBjb21wb25lbnQuZ2V0TmFtZSgpOwotICAgIAlTdHJpbmcgdG5zID0gY29tcG9uZW50LmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICBMaXN0IHByZWZpeGVzID0gZ2V0UHJlZml4ZXMoZGVmaW5pdGlvbiwgdG5zKTsKLSAgICAgICAgaWYgKHByZWZpeGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIG5hbWUgPSBwcmVmaXhlcy5nZXQoMCkgKyAiOiIgKyBuYW1lOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIExpc3QgZ2V0UHJlZml4ZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlKSB7Ci0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdGhlTmFtZXNwYWNlID0gKFN0cmluZykgbWFwLmdldChwcmVmaXgpOwotICAgICAgICAgICAgaWYgKHRoZU5hbWVzcGFjZSAhPSBudWxsICYmIHRoZU5hbWVzcGFjZS5lcXVhbHMobmFtZXNwYWNlKSkgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKHByZWZpeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFBhcmFtZXRlclBhdHRlcm4oV1NETEVsZW1lbnQgZWxlbWVudCkgewotICAgIAlpbnQgcGF0dGVybiA9IC0xOwotICAgIAkKLSAgICAJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKChPcGVyYXRpb24pIGVsZW1lbnQpOwotICAgIAkJCi0JCQlQb3J0VHlwZSBwdCA9IChQb3J0VHlwZSkgKChPcGVyYXRpb24pIGVsZW1lbnQpLmdldENvbnRhaW5lcigpOwotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgUG9ydFR5cGUKLSAgICAJCQlJdGVyYXRvciBvcEl0ID0gcHQuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIAkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIG9wSXQuaGFzTmV4dCgpKSB7Ci0gICAgCQkJCU9wZXJhdGlvbiBpdGVtID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0gICAgCQkJCWlmICghaXRlbS5lcXVhbHMoZWxlbWVudCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0pOwotICAgIAkJCQl9Ci0gICAgCQkJfQotICAgIAkJfQotCi0gICAgCQlpZiAocGF0dGVybiA9PSAtMSkgewotICAgIAkJCS8vIGxldCdzIHRyeSB0byBzZWFyY2ggb3RoZXIgT3BlcmF0aW9ucyBpbiBPVEhFUiBQb3J0VHlwZXMKLSAgICAJCQlJdGVyYXRvciBwdEl0ID0gcHQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVQb3J0VHlwZXMoKS5pdGVyYXRvcigpOwotICAgIAkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIHB0SXQuaGFzTmV4dCgpKSB7Ci0gICAgCQkJCVBvcnRUeXBlIGl0ZW0gPSAoUG9ydFR5cGUpIHB0SXQubmV4dCgpOwotICAgIAkJCQlpZiAoIWl0ZW0uZXF1YWxzKHB0KSkgewotICAgIAkJCQkJcGF0dGVybiA9IGdldFBhdHRlcm4oaXRlbSk7Ci0gICAgCQkJCX0KLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCX0KLSAgICAJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBvcnRUeXBlKSB7Ci0gICAgCQlQb3J0VHlwZSBwdCA9IChQb3J0VHlwZSkgZWxlbWVudDsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKHB0KTsKLSAgICAJCQotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gT1RIRVIgUG9ydFR5cGVzCi0gICAgCQkJSXRlcmF0b3IgcHRJdCA9IHB0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBwdEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlQb3J0VHlwZSBpdGVtID0gKFBvcnRUeXBlKSBwdEl0Lm5leHQoKTsKLSAgICAJCQkJaWYgKCFpdGVtLmVxdWFscyhwdCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0pOwotICAgIAkJCQl9Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAl9Ci0gICAgCQotICAgIAlpZiAocGF0dGVybiA9PSAtMSkgewotICAgIAkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVDsKLSAgICAJfQotCi0gICAgCXJldHVybiBwYXR0ZXJuOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGludCBnZXRQYXJhbWV0ZXJQYXR0ZXJuKFdTRExFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gdXNlSW5wdXQpIHsKLSAgICAJaW50IHBhdHRlcm4gPSAtMTsKLSAgICAJCi0gICAgCWlmIChlbGVtZW50IGluc3RhbmNlb2YgT3BlcmF0aW9uKSB7Ci0gICAgCQlPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBlbGVtZW50OwotICAgIAkJaWYgKHVzZUlucHV0ICYmIG9wLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcC5nZXRFSW5wdXQoKS5nZXRFTWVzc2FnZSgpKTsKLQkJCX0KLQkJCWlmICghdXNlSW5wdXQgJiYgb3AuZ2V0RU91dHB1dCgpICE9IG51bGwpewotCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKG9wLmdldEVPdXRwdXQoKS5nZXRFTWVzc2FnZSgpKTsKLQkJCX0KLSAgICAJCQotCQkJUG9ydFR5cGUgcHQgPSAoUG9ydFR5cGUpIG9wLmdldENvbnRhaW5lcigpOwotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgUG9ydFR5cGUKLSAgICAJCQlJdGVyYXRvciBvcEl0ID0gcHQuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIAkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIG9wSXQuaGFzTmV4dCgpKSB7Ci0gICAgCQkJCU9wZXJhdGlvbiBpdGVtID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0gICAgCQkJCWlmICghaXRlbS5lcXVhbHMoZWxlbWVudCkpIHsKLSAgICAJCQkJCWlmICh1c2VJbnB1dCAmJiBpdGVtLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLSAgICAJCQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpdGVtLmdldEVJbnB1dCgpLmdldEVNZXNzYWdlKCkpOwotICAgIAkJCQkJfQotICAgIAkJCQkJaWYgKCF1c2VJbnB1dCAmJiBpdGVtLmdldEVPdXRwdXQoKSAhPSBudWxsKXsKLSAgICAJCQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpdGVtLmdldEVPdXRwdXQoKS5nZXRFTWVzc2FnZSgpKTsKLSAgICAJCQkJCX0KLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLQotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gT1RIRVIgUG9ydFR5cGVzCi0gICAgCQkJSXRlcmF0b3IgcHRJdCA9IHB0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBwdEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlQb3J0VHlwZSBpdGVtID0gKFBvcnRUeXBlKSBwdEl0Lm5leHQoKTsKLSAgICAJCQkJaWYgKCFpdGVtLmVxdWFscyhwdCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0sIHVzZUlucHV0KTsKLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJfQotICAgIAllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgUG9ydFR5cGUpIHsKLSAgICAJCVBvcnRUeXBlIHB0ID0gKFBvcnRUeXBlKSBlbGVtZW50OwotICAgIAkJcGF0dGVybiA9IGdldFBhdHRlcm4ocHQsIHVzZUlucHV0KTsKLSAgICAJCQotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gT1RIRVIgUG9ydFR5cGVzCi0gICAgCQkJSXRlcmF0b3IgcHRJdCA9IHB0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBwdEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlQb3J0VHlwZSBpdGVtID0gKFBvcnRUeXBlKSBwdEl0Lm5leHQoKTsKLSAgICAJCQkJaWYgKCFpdGVtLmVxdWFscyhwdCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0sIHVzZUlucHV0KTsKLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRQYXR0ZXJuKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0gICAgCUl0ZXJhdG9yIG9wSXQgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIG9wSXQuaGFzTmV4dCgpKSB7Ci0gICAgCQlPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBvcEl0Lm5leHQoKTsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKG9wKTsKLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBhdHRlcm4oUG9ydFR5cGUgcG9ydFR5cGUsIGJvb2xlYW4gdXNlSW5wdXQpIHsKLSAgICAJaW50IHBhdHRlcm4gPSAtMTsKLSAgICAJSXRlcmF0b3Igb3BJdCA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAJd2hpbGUgKHBhdHRlcm4gPT0gLTEgJiYgb3BJdC5oYXNOZXh0KCkpIHsKLSAgICAJCU9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgIAkJaWYgKHVzZUlucHV0ICYmIG9wLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLSAgICAJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcC5nZXRFSW5wdXQoKS5nZXRFTWVzc2FnZSgpKTsKLSAgICAJCX0KLSAgICAJCWlmICghdXNlSW5wdXQgJiYgb3AuZ2V0RU91dHB1dCgpICE9IG51bGwpIHsKLSAgICAJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcC5nZXRFT3V0cHV0KCkuZ2V0RU1lc3NhZ2UoKSk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBwYXR0ZXJuOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0UGF0dGVybihPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0JCWludCBwYXR0ZXJuID0gLTE7Ci0JCQotICAgIAlJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLQkJT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0JCUxpc3QgZmF1bHRzID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKTsKLQkJCi0JCWlmIChpbnB1dCAhPSBudWxsKSB7Ci0JCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpbnB1dC5nZXRFTWVzc2FnZSgpKTsKLQkJfQotCQkKLQkJaWYgKHBhdHRlcm4gPT0gLTEgJiYgb3V0cHV0ICE9IG51bGwpIHsKLQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKG91dHB1dC5nZXRFTWVzc2FnZSgpKTsKLQkJfQotCQkKLQkJaWYgKHBhdHRlcm4gPT0gLTEgJiYgZmF1bHRzLnNpemUoKSA+IDApIHsKLQkJCUl0ZXJhdG9yIGZhdWx0SXQgPSBmYXVsdHMuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIGZhdWx0SXQuaGFzTmV4dCgpKSB7Ci0JCQkJRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGZhdWx0SXQubmV4dCgpOwotCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGZhdWx0LmdldEVNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBhdHRlcm4oTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0JCWlmIChtZXNzYWdlICE9IG51bGwpIHsKLQkJCUl0ZXJhdG9yIHBhcnRzID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKHBhcnRzLmhhc05leHQoKSkgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwYXJ0cy5uZXh0KCk7Ci0JCQkJaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UOwotCi0JCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCQkJaWYgKGlzU2VxdWVuY2VQYXR0ZXJuKHhzZEVsZW1lbnQuZ2V0VHlwZURlZmluaXRpb24oKSkpIHsKLQkJCQkJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7CQotCQkJCQl9CQkJCQkKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX1NJTVBMRVRZUEU7Ci0JCQkJCQotCQkJCQlpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0JCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9DT01QTEVYVFlQRTsKLQkJCQkJCQotCQkJCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHhzZFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkJCQlpZiAoaXNTZXF1ZW5jZVBhdHRlcm4oeHNkVHlwZSkpIHsKLQkJCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9DT01QTEVYVFlQRV9TRVFfRUxFTUVOVDsgCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NlcXVlbmNlUGF0dGVybihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKSB7Ci0gICAgCWJvb2xlYW4gaXNTZXF1ZW5jZVBhdHRlcm4gPSBmYWxzZTsKLSAgICAJCi0gICAgCWlmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0gICAgCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB0eXBlOwotCi0JICAgIAlpZiAoY29tcGxleFR5cGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgY29tcGxleFR5cGUuZ2V0Q29udGVudCgpOwotCQkJCWlmIChwYXJ0aWNsZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJCWlzU2VxdWVuY2VQYXR0ZXJuID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBpc1NlcXVlbmNlUGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgZm9ybWF0Q2hpbGQoRWxlbWVudCBjaGlsZCkKLSAgICB7Ci0gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICAgIHsKLSAgICAgICAgSURPTU1vZGVsIG1vZGVsID0gKChJRE9NTm9kZSljaGlsZCkuZ2V0TW9kZWwoKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyB0ZWxsIHRoZSBtb2RlbCB0aGF0IHdlIGFyZSBhYm91dCB0byBtYWtlIGEgYmlnIG1vZGVsIGNoYW5nZQotICAgICAgICAgIG1vZGVsLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotICAgICAgICAgIAotICAgICAgICAgIElTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yIGZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLSAgICAgICAgICBmb3JtYXRQcm9jZXNzb3IuZm9ybWF0Tm9kZShjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgLy8gdGVsbCB0aGUgbW9kZWwgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBiaWcgbW9kZWwgY2hhbmdlCi0gICAgICAgICAgbW9kZWwuY2hhbmdlZE1vZGVsKCk7IAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBQYXJ0IGdldE5ld2x5QWRkZWRDb21wb25lbnRQYXJ0KCkgewotICAgIAlyZXR1cm4gbmV3UGFydDsKLSAgICB9Ci0KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldEFub255bW91c1hTREVsZW1lbnRCYXNlTmFtZSgpOwotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCk7Ci0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRXU0RMTWVzc2FnZU5hbWUoKTsKLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFdTRExQYXJ0TmFtZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTI1MWJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEJpbmRpbmdDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyBsb2NhbE5hbWU7Ci0gIHByaXZhdGUgQmluZGluZyBiaW5kaW5nOwotIAotICBwdWJsaWMgQWRkQmluZGluZ0NvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgIAotCQkgU3RyaW5nIGxvY2FsTmFtZSkKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGJpbmRpbmcgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZygpOwotICAgIGJpbmRpbmcuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksbG9jYWxOYW1lKSk7Ci0gICAgYmluZGluZy5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkQmluZGluZyhiaW5kaW5nKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nRmF1bHRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdGYXVsdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA5OWJiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdGYXVsdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkQmluZGluZ0ZhdWx0Q29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0OwotICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gIFN0cmluZyBuYW1lOwotICAKLSAgcHVibGljIEFkZEJpbmRpbmdGYXVsdENvbW1hbmQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYmluZGluZ09wZXJhdGlvbiA9IGJpbmRpbmdPcGVyYXRpb247Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBiaW5kaW5nRmF1bHQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ0ZhdWx0KCk7Ci0gICAgYmluZGluZ0ZhdWx0LnNldE5hbWUobmFtZSk7IAotICAgIGJpbmRpbmdGYXVsdC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGJpbmRpbmdPcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLmFkZEJpbmRpbmdGYXVsdCgoQmluZGluZ0ZhdWx0KWJpbmRpbmdGYXVsdCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ0ZhdWx0OwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0lucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nSW5wdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhODgyNWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nSW5wdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEJpbmRpbmdJbnB1dENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dDsKLSAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uOwotICBTdHJpbmcgbmFtZTsKLSAgCi0gIHB1YmxpYyBBZGRCaW5kaW5nSW5wdXRDb21tYW5kKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgYmluZGluZ0lucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIGJpbmRpbmdJbnB1dC5zZXROYW1lKG5hbWUpOyAKLSAgICBiaW5kaW5nSW5wdXQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihiaW5kaW5nT3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nSW5wdXQoKEJpbmRpbmdJbnB1dCliaW5kaW5nSW5wdXQpOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdJbnB1dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWE0NjQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ09wZXJhdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIEJpbmRpbmcgYmluZGluZzsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGJpbmRpbmdJbnB1dE5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIFN0cmluZyBiaW5kaW5nT3V0cHV0TmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgU3RyaW5nIGJpbmRpbmdGYXVsdE5hbWUgPSIiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVCaW5kaW5nSW5wdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZUJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZUJpbmRpbmdGYXVsdCA9IGZhbHNlOwotICAKLSAgcHVibGljIEFkZEJpbmRpbmdPcGVyYXRpb25Db21tYW5kKEJpbmRpbmcgYmluZGluZyxTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIEFkZEJpbmRpbmdPcGVyYXRpb25Db21tYW5kCi0gICAgKEJpbmRpbmcgYmluZGluZywgIAotICAgICBTdHJpbmcgbmFtZSwKLSAgICAgYm9vbGVhbiBjcmVhdGVCaW5kaW5nSW5wdXQsCi0gICAgIGJvb2xlYW4gY3JlYXRlQmluZGluZ091dHB1dCwKLSAgICAgYm9vbGVhbiBjcmVhdGVCaW5kaW5nRmF1bHQpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy5jcmVhdGVCaW5kaW5nSW5wdXQgPSBjcmVhdGVCaW5kaW5nSW5wdXQ7Ci0gICAgdGhpcy5jcmVhdGVCaW5kaW5nT3V0cHV0ID0gY3JlYXRlQmluZGluZ091dHB1dDsKLSAgICB0aGlzLmNyZWF0ZUJpbmRpbmdGYXVsdCA9IGNyZWF0ZUJpbmRpbmdGYXVsdDsKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgYmluZGluZ09wZXJhdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXROYW1lKG5hbWUpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgV1NETEVsZW1lbnRDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotICAgIGlmIChjcmVhdGVCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgY29tbWFuZCA9IG5ldyBBZGRCaW5kaW5nSW5wdXRDb21tYW5kKGJpbmRpbmdPcGVyYXRpb24sYmluZGluZ0lucHV0TmFtZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLQotICAgIGlmIChjcmVhdGVCaW5kaW5nT3V0cHV0KQotICAgIHsKLSAgICAgIGNvbW1hbmQgPSBuZXcgQWRkQmluZGluZ091dHB1dENvbW1hbmQoYmluZGluZ09wZXJhdGlvbixiaW5kaW5nT3V0cHV0TmFtZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLQotICAgIGlmIChjcmVhdGVCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgY29tbWFuZCA9IG5ldyBBZGRCaW5kaW5nRmF1bHRDb21tYW5kKGJpbmRpbmdPcGVyYXRpb24sYmluZGluZ0ZhdWx0TmFtZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QmluZGluZ0lucHV0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYmluZGluZ0lucHV0TmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdPdXRwdXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5iaW5kaW5nT3V0cHV0TmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdGYXVsdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdGYXVsdE5hbWUgPSBuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdPdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MGRhNTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkQmluZGluZ091dHB1dENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0OwotICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gIFN0cmluZyBuYW1lOwotICAKLSAgcHVibGljIEFkZEJpbmRpbmdPdXRwdXRDb21tYW5kKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgYmluZGluZ091dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgYmluZGluZ091dHB1dC5zZXROYW1lKG5hbWUpOyAKLSAgICBiaW5kaW5nT3V0cHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oYmluZGluZ09wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ091dHB1dCgoQmluZGluZ091dHB1dCliaW5kaW5nT3V0cHV0KTsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nT3V0cHV0OwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg2OWY5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEV4dGVuc2lvbkVsZW1lbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24uY29tbWFuZHMuQWRkRXh0ZW5zaW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBBZGRFeHRlbnNpb25FbGVtZW50Q29tbWFuZCBleHRlbmRzIEFkZEV4dGVuc2lvbkNvbW1hbmQKLXsKLSAgRXh0ZW5zaWJsZUVsZW1lbnQgaW5wdXQ7Ci0gIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50OwotICBFbGVtZW50IGFwcEluZm87Ci0gIEVsZW1lbnQgbmV3RWxlbWVudDsKLQotICBwdWJsaWMgQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQoU3RyaW5nIGxhYmVsLCBFeHRlbnNpYmxlRWxlbWVudCBpbnB1dCwgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpCi0gIHsKLSAgICBzdXBlcihsYWJlbCk7Ci0gICAgdGhpcy5pbnB1dCA9IGlucHV0OwotICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBleGVjdXRlKCkKLSAgewotICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICBFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBpbnB1dC5nZXRFbGVtZW50KCk7Ci0gICAgRG9jdW1lbnQgZG9jID0gcGFyZW50RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCk7Ci0gICAgCi0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhleHRlbnNpb25zU2NoZW1hU3BlYy5nZXROYW1lc3BhY2VVUkkoKSwgZWxlbWVudC5nZXROYW1lKCkpOwotICAgIAotICAgIFN0cmluZyBwcmVmaXggPSBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbklmUmVxdWlyZWQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpLCAicCIsIGV4dGVuc2lvbnNTY2hlbWFTcGVjLmdldE5hbWVzcGFjZVVSSSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIG5ld0VsZW1lbnQuc2V0UHJlZml4KHByZWZpeCk7Ci0gICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHVuZG8oKQotICB7Ci0gICAgLy8gVE9ETyAoY3MpIGRvIHdlIG5lZWQgdG8gaW1wbGVtZW50PwotICB9Ci0gIHB1YmxpYyBPYmplY3QgZ2V0TmV3T2JqZWN0KCkKLSAgewotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbklmUmVxdWlyZWQoRWxlbWVudCByb290RWxlbWVudCwgU3RyaW5nIHByZWZpeEhpbnQsIFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsgICAgICAKLSAgICBOYW1lc3BhY2VUYWJsZSBuYW1lc3BhY2VUYWJsZSA9IG5ldyBOYW1lc3BhY2VUYWJsZShyb290RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkpOwotICAgIG5hbWVzcGFjZVRhYmxlLmFkZEVsZW1lbnQocm9vdEVsZW1lbnQpOwotICAgIHByZWZpeCA9IG5hbWVzcGFjZVRhYmxlLmdldFByZWZpeEZvclVSSShuYW1lc3BhY2UpOwotICAgIGlmIChwcmVmaXggPT0gbnVsbCkKLSAgICB7IAotICAgICAgU3RyaW5nIGJhc2VQcmVmaXggPSBwcmVmaXhIaW50OwotICAgICAgcHJlZml4ID0gYmFzZVByZWZpeDsKLSAgICAgIFN0cmluZyB4bWxuc0NvbG9uID0gInhtbG5zOiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0geG1sbnNDb2xvbiArIHByZWZpeDsKLSAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICB3aGlsZSAocm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgICAgIHByZWZpeCA9IGJhc2VQcmVmaXggKyBjb3VudDsKLSAgICAgICAgYXR0cmlidXRlTmFtZSA9IHhtbG5zQ29sb24gKyBwcmVmaXg7Ci0gICAgICB9ICAgICAgCi0gICAgICByb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgbmFtZXNwYWNlKTsgIAotICAgIH0gICAgCi0gICAgcmV0dXJuIHByZWZpeDsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEZhdWx0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRGYXVsdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg1M2YwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEZhdWx0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEZhdWx0Q29tbWFuZCBleHRlbmRzIEFkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kCi17Ci0gIHByaXZhdGUgRmF1bHQgb3JpZ2luYWxGYXVsdDsKLSAgCi0gIHB1YmxpYyBBZGRGYXVsdENvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihvcGVyYXRpb24sbmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgQWRkRmF1bHRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lLCBib29sZWFuIGNyZWF0ZU1lc3NhZ2UpCi0gIHsKLSAgICBzdXBlcihvcGVyYXRpb24sbmFtZSxjcmVhdGVNZXNzYWdlKTsKLSAgfQotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB0byBjcmVhdGUgYSBGYXVsdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gRmF1bHQuICBJbiBlc3NlbmNlLCB0aGlzIHdpbGwKLSAgICogY3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gRmF1bHQuCi0gICAqLwotICBwdWJsaWMgQWRkRmF1bHRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIEZhdWx0IG9yaWdpbmFsRmF1bHQsIFN0cmluZyBuYW1lKSB7Ci0gIAlzdXBlcihvcGVyYXRpb24sIG5hbWUsIGZhbHNlKTsKLSAgCQotICAJdGhpcy5vcmlnaW5hbEZhdWx0ID0gb3JpZ2luYWxGYXVsdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIG1lc3NhZ2VSZWZlcmVuY2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmF1bHQoKTsKLSAgICBtZXNzYWdlUmVmZXJlbmNlLnNldE5hbWUobmFtZSk7IAotICAgIG1lc3NhZ2VSZWZlcmVuY2Uuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBvcGVyYXRpb24uYWRkRmF1bHQoKEZhdWx0KW1lc3NhZ2VSZWZlcmVuY2UpOwotICAgIAotICAgIC8vICBUQkQgLSBhZGQgYmluZGluZyBmYXVsdAotCi0gICAgaWYgKG9yaWdpbmFsRmF1bHQgPT0gbnVsbCkgewotICAgIAlpZiAoY3JlYXRlTWVzc2FnZSkKLSAgICAJCWNyZWF0ZU1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCS8vIERvIG5lY2Vzc2FyeSBjb3B5aW5nIG9mIGRhdGEgZnJvbSBvcmlnaW5hbCBGYXVsdCB0byBuZXcgRmF1bHQKLSAgICAJaWYgKG9yaWdpbmFsRmF1bHQuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0vLyAgICAJCVN0cmluZyBvcmlnaW5hbE1zZ05hbWUgPSBvcmlnaW5hbEZhdWx0LmdldEVNZXNzYWdlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLS8vICAgIAkJCi0vLyAgICAJCWJvb2xlYW4gZ2VuZWQgPSBmYWxzZTsKLS8vICAgIAkJaWYgKG9yaWdpbmFsRmF1bHQuZUNvbnRhaW5lcigpIGluc3RhbmNlb2YgT3BlcmF0aW9uKQotLy8gICAgCQkJZ2VuZWQgPSBTbWFydFJlbmFtZUFjdGlvbi5pc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9yaWdpbmFsTXNnTmFtZSwgKChPcGVyYXRpb24pIG9yaWdpbmFsRmF1bHQuZUNvbnRhaW5lcigpKS5nZXROYW1lKCksICIiKTsKLS8vICAgIAkJCi0vLyAgICAJCVN0cmluZyBuZXdNc2dOYW1lID0gIiI7Ci0vLyAgICAJCWlmIChnZW5lZCkgewotLy8gICAgCQkJbmV3TXNnTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgbWVzc2FnZVJlZmVyZW5jZSk7Ci0vLyAgICAJCX0KLS8vICAgIAkJZWxzZSB7Ci0vLyAgICAJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotLy8gICAgCQkJTWVzc2FnZSB0TWVzc2FnZSA9IG9yaWdpbmFsRmF1bHQuZ2V0RU1lc3NhZ2UoKTsKLS8vICAgIAkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGRlZmluaXRpb24sIHRNZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotLy8gICAgCQl9Ci0gICAgCQkKLSAgICAJCWNyZWF0ZU1lc3NhZ2Uob3JpZ2luYWxGYXVsdCwgTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBtZXNzYWdlUmVmZXJlbmNlKSk7Ci0gICAgCX0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODgwNzJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQgZXh0ZW5kcyBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZCB7Ci0JcHJvdGVjdGVkIEZhdWx0IGZhdWx0OwotCXByaXZhdGUgU3RyaW5nIGZhdWx0TmFtZTsKLQkKLSAgICBwdWJsaWMgc3RhdGljIGludCBnZXRQYXJhbWV0ZXJQYXR0ZXJuRm9yRmF1bHQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgRmF1bHQgZmF1bHQpIHsKLSAgICAJaW50IHBhdHRlcm4gPSAtMTsKLSAgICAJaWYgKGZhdWx0ICE9IG51bGwpIHsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGZhdWx0LmdldEVNZXNzYWdlKCkpOwotICAgIAl9Ci0JCWlmIChwYXR0ZXJuID09IC0xKSB7Ci0JCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihvcGVyYXRpb24pOwotCQl9Ci0JCQotCQlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBhdHRlcm4oTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0JCWlmIChtZXNzYWdlICE9IG51bGwpIHsKLQkJCUl0ZXJhdG9yIHBhcnRzID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKHBhcnRzLmhhc05leHQoKSkgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwYXJ0cy5uZXh0KCk7Ci0JCQkJaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UOwotCi0JCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCQkJaWYgKGlzU2VxdWVuY2VQYXR0ZXJuKHhzZEVsZW1lbnQuZ2V0VHlwZURlZmluaXRpb24oKSkpIHsKLQkJCQkJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7CQotCQkJCQl9CQkJCQkKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX1NJTVBMRVRZUEU7Ci0JCQkJCQotCQkJCQlpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0JCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9DT01QTEVYVFlQRTsKLQkJCQkJCQotCQkJCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHhzZFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkJCQlpZiAoaXNTZXF1ZW5jZVBhdHRlcm4oeHNkVHlwZSkpIHsKLQkJCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9DT01QTEVYVFlQRV9TRVFfRUxFTUVOVDsgCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NlcXVlbmNlUGF0dGVybihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKSB7Ci0gICAgCWJvb2xlYW4gaXNTZXF1ZW5jZVBhdHRlcm4gPSBmYWxzZTsKLSAgICAJCi0gICAgCWlmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0gICAgCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB0eXBlOwotCi0JICAgIAlpZiAoY29tcGxleFR5cGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgY29tcGxleFR5cGUuZ2V0Q29udGVudCgpOwotCQkJCWlmIChwYXJ0aWNsZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJCWlzU2VxdWVuY2VQYXR0ZXJuID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBpc1NlcXVlbmNlUGF0dGVybjsKLSAgICB9Ci0JCi0JcHVibGljIEFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBGYXVsdCBmYXVsdCkgewotCQlzdXBlcihvcGVyYXRpb24sIEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVCk7Ci0JCXRoaXMuZmF1bHQgPSBmYXVsdDsKLQl9Ci0JCi0JLyoKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChmYXVsdCA9PSBudWxsKSB7Ci0JCQlBZGRGYXVsdENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRGYXVsdENvbW1hbmQob3BlcmF0aW9uLCBnZXRGYXVsdE5hbWUoKSk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJZmF1bHQgPSAoRmF1bHQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJUGFydCBwYXJ0ID0gY3JlYXRlV1NETENvbXBvbmVudHMoZmF1bHQpOwotCQluZXdQYXJ0ID0gcGFydDsKLQkJCi0JCS8vIENyZWF0ZSBuZWNlc3NhcnkgWFNEIE9iamVjdHMgc3RhcnRpbmcgd2l0aCB0aGUgUGFydCByZWZlcmVuY2UKLQkJbmV3WFNERWxlbWVudCA9IGNyZWF0ZVhTRE9iamVjdHMocGFydCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRBbm9ueW1vdXNYU0RFbGVtZW50QmFzZU5hbWUoKSB7Ci0JCWlmIChuZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCkgKyAiXyIgKyBnZXRGYXVsdE5hbWUoKTsgIC8vJE5PTi1OTFMtMSQKLQkJfQotCQkKLQkJcmV0dXJuIG5ld0Fub255bW91c1hTREVsZW1lbnROYW1lOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpIHsKLQkJaWYgKG5ld1hTREVsZW1lbnROYW1lID09IG51bGwpIHsKLQkJCW5ld1hTREVsZW1lbnROYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKSArICJfIiArIGdldEZhdWx0TmFtZSgpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJCi0JCXJldHVybiBuZXdYU0RFbGVtZW50TmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRXU0RMTWVzc2FnZU5hbWUoKSB7Ci0JCWlmIChuZXdXU0RMTWVzc2FnZU5hbWUgPT0gbnVsbCkgewotCQkJbmV3V1NETE1lc3NhZ2VOYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKSArICJfIiArIGdldEZhdWx0TmFtZSgpICsgIk1zZyI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJTGlzdCB1c2VkTmFtZXMgPSBOYW1lVXRpbC5nZXRVc2VkTWVzc2FnZU5hbWVzKG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQkJbmV3V1NETE1lc3NhZ2VOYW1lID0gTmFtZVV0aWwuZ2V0VW5pcXVlTmFtZUhlbHBlcihuZXdXU0RMTWVzc2FnZU5hbWUsIHVzZWROYW1lcyk7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdXU0RMTWVzc2FnZU5hbWU7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRXU0RMUGFydE5hbWUoKSB7Ci0JCWlmIChuZXdXU0RMUGFydE5hbWUgPT0gbnVsbCkgewotCQkJbmV3V1NETFBhcnROYW1lID0gZ2V0RmF1bHROYW1lKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdXU0RMUGFydE5hbWU7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldEZhdWx0TmFtZSgpIHsKLQkJaWYgKGZhdWx0TmFtZSA9PSBudWxsKSB7Ci0JCQlpZiAoZmF1bHQgIT0gbnVsbCkgewotCQkJCWZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZhdWx0TmFtZSA9IE5hbWVVdGlsLmdldEZhdWx0TmFtZShvcGVyYXRpb24pOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhdWx0TmFtZTsKLQl9Ci0JCi0JcHVibGljIE1lc3NhZ2VSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpIHsKLQkJcmV0dXJuIGZhdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW1wb3J0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbXBvcnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MzlkYmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbXBvcnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEltcG9ydENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZTsKLSAgcHJpdmF0ZSBTdHJpbmcgbG9jYXRpb247Ci0gIHByaXZhdGUgSW1wb3J0IGltcG9ydEVsZW1lbnQ7Ci0gIAotICBwdWJsaWMgQWRkSW1wb3J0Q29tbWFuZAotICAJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgIAotICAJIFN0cmluZyBuYW1lc3BhY2UsCi0gIAkgU3RyaW5nIGxvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0RWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBpbXBvcnRFbGVtZW50ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUltcG9ydCgpOwotICAgIGltcG9ydEVsZW1lbnQuc2V0TmFtZXNwYWNlVVJJKG5hbWVzcGFjZSk7Ci0gICAgaW1wb3J0RWxlbWVudC5zZXRMb2NhdGlvblVSSShsb2NhdGlvbik7Ci0gICAgaW1wb3J0RWxlbWVudC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkSW1wb3J0KGltcG9ydEVsZW1lbnQpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvblVSSShTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW5wdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZElucHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjU3NWYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW5wdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuU21hcnRSZW5hbWVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkSW5wdXRDb21tYW5kIGV4dGVuZHMgQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQKLXsKLSAgcHJpdmF0ZSBJbnB1dCBvcmlnaW5hbElucHV0OwotCQotICBwdWJsaWMgQWRkSW5wdXRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUpOwotICB9Ci0KLSAgcHVibGljIEFkZElucHV0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBjcmVhdGVNZXNzYWdlKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUsY3JlYXRlTWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gY3JlYXRlIGFuIElucHV0IGJhc2VkIG9uIHRoZSBnaXZlbiBJbnB1dC4gIEluIGVzc2VuY2UsIHRoaXMgd2lsbAotICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBJbnB1dC4KLSAgICovCi0gIHB1YmxpYyBBZGRJbnB1dENvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgSW5wdXQgb3JpZ2luYWxJbnB1dCwgU3RyaW5nIG5hbWUpIHsKLSAgCXN1cGVyKG9wZXJhdGlvbiwgbmFtZSwgZmFsc2UpOwotICAJCi0gIAl0aGlzLm9yaWdpbmFsSW5wdXQgPSBvcmlnaW5hbElucHV0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbnB1dCgpOwotICAvLyAgbWVzc2FnZVJlZmVyZW5jZS5zZXROYW1lKG5hbWUpOyAKLSAgICBtZXNzYWdlUmVmZXJlbmNlLnNldEVuY2xvc2luZ0RlZmluaXRpb24ob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgb3BlcmF0aW9uLnNldElucHV0KChJbnB1dCltZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAKLSAgICAvLyBUQkQgLSBhZGQgYmluZGluZyBpbnB1dCAKLSAgICAKLSAgICBpZiAob3JpZ2luYWxJbnB1dCA9PSBudWxsKSB7Ci0gICAgCWlmIChjcmVhdGVNZXNzYWdlKQotICAgIAkJY3JlYXRlTWVzc2FnZSgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAJLy8gRG8gbmVjZXNzYXJ5IGNvcHlpbmcgb2YgZGF0YSBmcm9tIG9yaWdpbmFsIElucHV0IHRvIG5ldyBJbnB1dAotICAgIAlpZiAob3JpZ2luYWxJbnB1dC5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLSAgICAJCVN0cmluZyBvcmlnaW5hbE1zZ05hbWUgPSBvcmlnaW5hbElucHV0LmdldEVNZXNzYWdlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAJCQotICAgIAkJYm9vbGVhbiBnZW5lZCA9IGZhbHNlOwotICAgIAkJaWYgKG9yaWdpbmFsSW5wdXQuZUNvbnRhaW5lcigpIGluc3RhbmNlb2YgT3BlcmF0aW9uKQotICAgIAkJCWdlbmVkID0gU21hcnRSZW5hbWVBY3Rpb24uaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvcmlnaW5hbE1zZ05hbWUsICgoT3BlcmF0aW9uKSBvcmlnaW5hbElucHV0LmVDb250YWluZXIoKSkuZ2V0TmFtZSgpLCAiUmVxdWVzdCIpOyAvLyROT04tTkxTLTEkCi0gICAgCQkKLSAgICAJCVN0cmluZyBuZXdNc2dOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICAJCWlmIChnZW5lZCkgewotICAgIAkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIG1lc3NhZ2VSZWZlcmVuY2UpOwotICAgIAkJfQotICAgIAkJZWxzZSB7Ci0gICAgCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAJCQlNZXNzYWdlIHRNZXNzYWdlID0gb3JpZ2luYWxJbnB1dC5nZXRFTWVzc2FnZSgpOwotICAgIAkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGRlZmluaXRpb24sIHRNZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIAkJfQotCi0gICAgCQljcmVhdGVNZXNzYWdlKG9yaWdpbmFsSW5wdXQsIG5ld01zZ05hbWUpOwotICAgIAl9Ci0gICAgfQotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmN2QzMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnZpc2l0b3IuVzExRmluZElubmVyRWxlbWVudFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5YU0RDb21wb25lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQgZXh0ZW5kcyBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZCB7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gY3JlYXRlWFNET2JqZWN0cyA9IHRydWU7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gcmV1c2VFeGlzdGluZ01lc3NhZ2UgPSBmYWxzZTsKLQlwcml2YXRlIElucHV0IGlucHV0OwotCXB1YmxpYyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgaW50IHN0eWxlKSB7Ci0JCXN1cGVyKG9wZXJhdGlvbiwgc3R5bGUpOwotCX0KLQotCXB1YmxpYyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgaW50IHN0eWxlLCBib29sZWFuIHJldXNlTWVzc2FnZSkgewotCQlzdXBlcihvcGVyYXRpb24sIHN0eWxlKTsKLQkJcmV1c2VFeGlzdGluZ01lc3NhZ2UgPSByZXVzZU1lc3NhZ2U7Ci0JfQotCQotCS8qCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlQYXJ0IHBhcnQgPSBudWxsOwotCQlpZiAob3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCWlucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotCQl9Ci0JCWVsc2UgewotCQkJQWRkSW5wdXRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkSW5wdXRDb21tYW5kKG9wZXJhdGlvbiwgbnVsbCk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJaW5wdXQgPSAoSW5wdXQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJaWYgKHN0eWxlID09IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCkgewotCQkJcGFydCA9IGNyZWF0ZURvY0xpdFdyYXBwZWRXU0RMQ29tcG9uZW50cyhpbnB1dCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwYXJ0ID0gY3JlYXRlV1NETENvbXBvbmVudHMoaW5wdXQpOwotCQl9Ci0JCQotCQluZXdQYXJ0ID0gcGFydDsKLQkJLy8gQ3JlYXRlIG5lY2Vzc2FyeSBYU0QgT2JqZWN0cyBzdGFydGluZyB3aXRoIHRoZSBQYXJ0IHJlZmVyZW5jZQotCQlpZiAoY3JlYXRlWFNET2JqZWN0cykKLQkJCW5ld1hTREVsZW1lbnQgPSBjcmVhdGVYU0RPYmplY3RzKHBhcnQpOwotCX0KLQkKLQlwcm90ZWN0ZWQgUGFydCBjcmVhdGVEb2NMaXRXcmFwcGVkV1NETENvbXBvbmVudHMoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7Ci0JCU1lc3NhZ2UgbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJUGFydCBwYXJ0ID0gbnVsbDsKLQotCQlpZiAocmV1c2VFeGlzdGluZ01lc3NhZ2UgJiYgbWVzc2FnZSA9PSBudWxsKSB7Ci0JCQkvLyBTZWUgaWYgd2UgY2FuIHVzZSBhbiBleGlzdGluZyBNZXNzYWdlCi0JCQlNZXNzYWdlIGV4aXN0aW5nTWVzc2FnZSA9IG51bGw7Ci0JCQlTdHJpbmcgbWVzc2FnZU5hbWUgPSBnZXRJZGVhbE1lc3NhZ2VOYW1lKG1lc3NhZ2VSZWYpOwotCQkJSXRlcmF0b3IgbWVzc2FnZXMgPSBtZXNzYWdlUmVmLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFTWVzc2FnZXMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKG1lc3NhZ2VzLmhhc05leHQoKSkgewotCQkJCU1lc3NhZ2UgaXRlbSA9IChNZXNzYWdlKSBtZXNzYWdlcy5uZXh0KCk7Ci0JCQkJUU5hbWUgaXRlbU5hbWUgPSBpdGVtLmdldFFOYW1lKCk7Ci0JCQkJaWYgKGl0ZW1OYW1lICE9IG51bGwgJiYgaXRlbU5hbWUuZ2V0TG9jYWxQYXJ0KCkgIT0gbnVsbCAmJiBtZXNzYWdlTmFtZS5lcXVhbHMoaXRlbU5hbWUuZ2V0TG9jYWxQYXJ0KCkpKSB7Ci0JCQkJCWV4aXN0aW5nTWVzc2FnZSA9IGl0ZW07Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGV4aXN0aW5nTWVzc2FnZSAhPSBudWxsKSB7Ci0JCQkJaWYgKGV4aXN0aW5nTWVzc2FnZS5nZXRFUGFydHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJCS8vIFNlZSBpZiBleGlzdGluZyBNZXNzYWdlIGhhcyBhIFBhcnQgcmVmZXJlbmNpbmcgYW4gWFNEIEVsZW1lbnQgd2l0aCB0aGUgcHJvcGVyIG5hbWUKLQkJCQkJUGFydCBleGlzdGluZ1BhcnQgPSAoUGFydCkgZXhpc3RpbmdNZXNzYWdlLmdldEVQYXJ0cygpLmdldCgwKTsKLQkJCQkJaWYgKCEoZXhpc3RpbmdQYXJ0LmdldE5hbWUoKS5lcXVhbHMoZ2V0RG9jTGl0V3JhcHBlZFBhcnROYW1lKCkpKSkgewotCQkJCQkJbWVzc2FnZSA9IG51bGw7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gZXhpc3RpbmdFbGVtZW50ID0gZXhpc3RpbmdQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkJCQkJaWYgKGV4aXN0aW5nRWxlbWVudCAhPSBudWxsICYmIGV4aXN0aW5nRWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKG9wZXJhdGlvbi5nZXROYW1lKCkpKSB7Ci0JCQkJCQkJLy8gVGhlcmUgaXMgYW4gZXhpc3RpbmcgWFNEIEVsZW1lbnQgd2l0aCB0aGUgcHJvcGVyIG5hbWUKLQkJCQkJCQkvLyBTZWUgaWYgdGhlIFhTRCBFbGVtZW50IGhhcyBhbiBhbm9ueW1vdXMgdHlwZSB3aXRoIGEgc2VxdWVuY2UgYW5kIGFuIFhTRCBFbGVtZW50Ci0JCQkJCQkJVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IgdmlzaXRvciA9IG5ldyBXMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvcigpOwotCQkJCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBpbm5lckVsZW1lbnQgPSB2aXNpdG9yLmdldElubmVyWFNERWxlbWVudChleGlzdGluZ0VsZW1lbnQpOwotCQkJCQkJCWlmICghaW5uZXJFbGVtZW50LmVxdWFscyhleGlzdGluZ0VsZW1lbnQpKSB7Ci0JCQkJCQkJCS8vIEZvdW5kIGFuIGV4aXN0aW5nIGlubmVyIFhTRCBFbGVtZW50Ci0JCQkJCQkJCWNyZWF0ZVhTRE9iamVjdHMgPSBmYWxzZTsKLQotCQkJCQkJCQkvLyBzZXQgdGhlIE1lc3NhZ2VSZWZlcmVuY2UgLS0+IE1lc3NhZ2UgcmVmZXJlbmNlCi0JCQkJCQkJCW1lc3NhZ2VSZWYuc2V0RU1lc3NhZ2UoZXhpc3RpbmdNZXNzYWdlKTsKLQkJCQkJCQkJbWVzc2FnZSA9IGV4aXN0aW5nTWVzc2FnZTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAobWVzc2FnZSA9PSBudWxsIHx8IG1lc3NhZ2UuZUNvbnRhaW5lcigpID09IG51bGwpIHsKLQkJCS8vIENyZWF0ZSBNZXNzYWdlCi0JCQlBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE1lc3NhZ2VDb21tYW5kKG1lc3NhZ2VSZWYuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBnZXRXU0RMTWVzc2FnZU5hbWUoKSk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJbWVzc2FnZSA9IChNZXNzYWdlKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQltZXNzYWdlUmVmLnNldEVNZXNzYWdlKG1lc3NhZ2UpOwotCQl9Ci0KLQotCQlpZiAobWVzc2FnZS5nZXRFUGFydHMoKS5zaXplKCkgPT0gMCkgewotCQkJLy8gQ3JlYXRlIFBhcnQKLQkJCVN0cmluZyBwYXJ0TmFtZSA9IGdldERvY0xpdFdyYXBwZWRQYXJ0TmFtZSgpOwotCQkJQWRkUGFydENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBwYXJ0TmFtZSk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJcGFydCA9IChQYXJ0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwYXJ0ID0gKFBhcnQpIG1lc3NhZ2UuZ2V0RVBhcnRzKCkuZ2V0KDApOwotCQl9Ci0JCWZvcm1hdENoaWxkKG1lc3NhZ2UuZ2V0RWxlbWVudCgpKTsKLQotCQlyZXR1cm4gcGFydDsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRBbm9ueW1vdXNYU0RFbGVtZW50QmFzZU5hbWUoKSB7Ci0JCWlmIChuZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0JCQlpZiAodGhpcy5zdHlsZSA9PSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpIHsKLQkJCQluZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQluZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9IGdldFdTRExQYXJ0TmFtZSgpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWU7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCkgewotCQlpZiAobmV3WFNERWxlbWVudE5hbWUgPT0gbnVsbCkgewotCQkJbmV3WFNERWxlbWVudE5hbWUgPSAiaW4iOyAvLyROT04tTkxTLTEkCi0vLwkJCW5ld1hTREVsZW1lbnROYW1lID0gZ2V0V1NETFBhcnROYW1lKCk7Ci0JCX0KLQotCQlyZXR1cm4gbmV3WFNERWxlbWVudE5hbWU7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETE1lc3NhZ2VOYW1lKCkgewotCQlpZiAobmV3V1NETE1lc3NhZ2VOYW1lID09IG51bGwpIHsKLQkJCWlmIChvcGVyYXRpb24uZ2V0RUlucHV0KCkgIT0gbnVsbCkgewotCQkJCW5ld1dTRExNZXNzYWdlTmFtZT0gTmFtZVV0aWwuZ2V0TWVzc2FnZU5hbWUob3BlcmF0aW9uLmdldEVJbnB1dCgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG5ld1dTRExNZXNzYWdlTmFtZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdTRExQYXJ0TmFtZSgpIHsKLQkJaWYgKG5ld1dTRExQYXJ0TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdXU0RMUGFydE5hbWUgID0gTmFtZVV0aWwuZ2V0UGFydE5hbWUob3BlcmF0aW9uLmdldEVJbnB1dCgpKTsJCQkKLQkJfQotCQkKLQkJcmV0dXJuIG5ld1dTRExQYXJ0TmFtZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGNyZWF0ZVBhcnRFbGVtZW50U2VxRWxlbWVudFBhdHRlcm4oUGFydCBwYXJ0LCBYU0RFbGVtZW50RGVjbGFyYXRpb24gcGFydEVsZW1lbnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHJldHVybmVkWFNERWxlbWVudCA9IG51bGw7Ci0KLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIG9yaWdpbmFsRWxlbWVudCA9IG51bGw7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiBhbm9uWFNERWxlbWVudCA9IG51bGw7Ci0KLQkJLy8gQ3JlYXRlIHRoZSBYU0RFbGVtZW50IChhbm9ueW1vdXMpIHJlZmVyZW5jZWQgYnkgdGhlIFBhcnQgaWYgbmVjZXNzYXJ5Ci0JCWlmIChwYXJ0RWxlbWVudCA9PSBudWxsIHx8IHBhcnRFbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkgPT0gbnVsbCkgewotCQkJLy9GaW5kIGFuIGV4aXN0aW5nIFhTREVsZW1lbnQgdG8gdXNlIGlmIHBvc3NpYmxlCi0JCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gZXhpc3RpbmdFbGVtZW50ID0gbnVsbDsKLQkJCVN0cmluZyBpZGVhbEVsZW1lbnROYW1lID0gZ2V0QW5vbnltb3VzWFNERWxlbWVudEJhc2VOYW1lKCk7Ci0JCQlYU0RTY2hlbWEgc2NoZW1hID0gWFNEQ29tcG9uZW50SGVscGVyLmdldFhTRFNjaGVtYShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCQlpZiAoc2NoZW1hICE9IG51bGwpIHsKLQkJCQlJdGVyYXRvciBpdCA9IHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCkuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoZXhpc3RpbmdFbGVtZW50ID09IG51bGwgJiYgaXQuaGFzTmV4dCgpKSB7Ci0JCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBpdGVtID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgaXQubmV4dCgpOwotCQkJCQlpZiAoaXRlbS5nZXROYW1lKCkuZXF1YWxzKGlkZWFsRWxlbWVudE5hbWUpKSB7Ci0JCQkJCQkvLyBmb3VuZCBhbiBlbGVtZW50IHdlIGNhbiB1c2UuICBDb25maXJtIGl0IGhhcyBhIGRvYy1saXQtd3JhcHBlZCBwYXR0ZXJuCi0JCQkJCQkvLyBTZWUgaWYgdGhlIFhTRCBFbGVtZW50IGhhcyBhbiBhbm9ueW1vdXMgdHlwZSB3aXRoIGEgc2VxdWVuY2UgYW5kIGFuIFhTRCBFbGVtZW50Ci0JCQkJCQlleGlzdGluZ0VsZW1lbnQgPSBpdGVtOwotCi0JCQkJCQlYU0RUeXBlRGVmaW5pdGlvbiB4c2RUeXBlID0gaXRlbS5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpOwotCQkJCQkJaWYgKHhzZFR5cGUgIT0gbnVsbCkgewotCQkJCQkJCUxpc3QgY29udGVudHMgPSB4c2RUeXBlLmVDb250ZW50cygpOwotCQkJCQkJCWlmIChjb250ZW50cy5zaXplKCkgPiAwICYmIGNvbnRlbnRzLmdldCgwKSBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQkJCQkJCVhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBjb250ZW50cy5nZXQoMCk7Ci0JCQkJCQkJCUxpc3QgcGFydGljbGVDb250ZW50cyA9IHBhcnRpY2xlLmVDb250ZW50cygpOwotCQkJCQkJCQlpZiAocGFydGljbGVDb250ZW50cy5zaXplKCkgPiAwICYmIHBhcnRpY2xlQ29udGVudHMuZ2V0KDApIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJCQkJCQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gKFhTRE1vZGVsR3JvdXApIHBhcnRpY2xlQ29udGVudHMuZ2V0KDApOwotCQkJCQkJCQkJTGlzdCBtb2RlbENvbnRlbnRzID0gbW9kZWxHcm91cC5lQ29udGVudHMoKTsKLQkJCQkJCQkJCWlmIChtb2RlbENvbnRlbnRzLnNpemUoKSA+IDAgJiYgbW9kZWxDb250ZW50cy5nZXQoMCkgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotCQkJCQkJCQkJCVhTRFBhcnRpY2xlIGlubmVyUGFydGljbGUgPSAoWFNEUGFydGljbGUpIG1vZGVsQ29udGVudHMuZ2V0KDApOwotCQkJCQkJCQkJCUxpc3QgaW5uZXJDb250ZW50cyA9IGlubmVyUGFydGljbGUuZUNvbnRlbnRzKCk7Ci0JCQkJCQkJCQkJaWYgKGlubmVyQ29udGVudHMuc2l6ZSgpID4gMCAmJiBpbm5lckNvbnRlbnRzLmdldCgwKSBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJCQkJCQkJCQkvLyBpbm5lciBYU0QgRWxlbWVudCBleGlzdHMKLQkJCQkJCQkJCQkJLy8gcmV1c2UgZXhpc3RpbmcgZWxlbWVudAotCQkJCQkJCQkJCQlTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBleGlzdGluZ0VsZW1lbnQpOwotCQkJCQkJCQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCBmYWxzZSwgcHJlZml4ZWROYW1lKTsKLQkJCQkJCQkJCQkJcmV0dXJuIGV4aXN0aW5nRWxlbWVudDsKLQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQl9Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChleGlzdGluZ0VsZW1lbnQgPT0gbnVsbCkgewotCQkJCWFub25YU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZUFub255bW91c1hTREVsZW1lbnREZWZpbml0aW9uKGdldEFub255bW91c1hTREVsZW1lbnRCYXNlTmFtZSgpLCBwYXJ0KTsKLS8vCQkJCXBhcnQuc2V0RWxlbWVudERlY2xhcmF0aW9uKGFub25YU0RFbGVtZW50KTsKLQkJCQlTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBhbm9uWFNERWxlbWVudCk7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgZmFsc2UsIHByZWZpeGVkTmFtZSk7Ci0JCQkJcGFydC5zZXRUeXBlRGVmaW5pdGlvbihudWxsKTsKLQotCQkJCWlmIChwYXJ0RWxlbWVudCAhPSBudWxsICYmIHBhcnRFbGVtZW50LmdldFNjaGVtYSgpICE9IG51bGwpIHsKLQkJCQkJb3JpZ2luYWxFbGVtZW50ID0gcGFydEVsZW1lbnQ7Ci0JCQkJCS8vIFJlbW92ZSB0aGUgJ29yaWdpbmFsJyBYU0RFbGVtZW50IGFzIGEgR2xvYmFsIEVsZW1lbnQKLQkJCQkJcGFydEVsZW1lbnQuZ2V0U2NoZW1hKCkuZ2V0Q29udGVudHMoKS5yZW1vdmUocGFydEVsZW1lbnQpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCWFub25YU0RFbGVtZW50ID0gZXhpc3RpbmdFbGVtZW50OwotCQkJCS8vIHJldXNlIGV4aXN0aW5nIGVsZW1lbnQKLQkJCQlTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBleGlzdGluZ0VsZW1lbnQpOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIGZhbHNlLCBwcmVmaXhlZE5hbWUpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJYW5vblhTREVsZW1lbnQgPSBwYXJ0RWxlbWVudDsKLQkJfQotCi0JCS8vIENyZWF0ZSBhIG5ldyBYU0RFbGVtZW50Ci0JCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IFhTRENvbXBvbmVudEhlbHBlci5nZXRYU0RNb2RlbEdyb3VwKGFub25YU0RFbGVtZW50LCBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXJldHVybmVkWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKG51bGwsIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpLCBtb2RlbEdyb3VwKTsKLQotCQkvLyBBZGQgdGhlIG5ld2x5IGNyZWF0ZWQgWFNERWxlbWVudCB0byB0aGUgTW9kZWxHcm91cAotCQlYU0RDb21wb25lbnRIZWxwZXIuYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChhbm9uWFNERWxlbWVudCwgcmV0dXJuZWRYU0RFbGVtZW50KTsKLQotCQkvLyBBZGQgdGhlICdvcmlnaW5hbCcgWFNERWxlbWVudCBpZiBpdCdzIHR5cGUgd2Fzbid0IGFub255bW91cwotCQlpZiAob3JpZ2luYWxFbGVtZW50ICE9IG51bGwpIHsKLQkJCVhTRENvbXBvbmVudEhlbHBlci5hZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKGFub25YU0RFbGVtZW50LCBvcmlnaW5hbEVsZW1lbnQpOwotCQl9Ci0JCWZvcm1hdENoaWxkKGFub25YU0RFbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldElkZWFsTWVzc2FnZU5hbWUoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7CSAgICAKLQkJU3RyaW5nIG1lc3NhZ2VOYW1lID0gIk5ld01lc3NhZ2UiOyAvLyROT04tTkxTLTEkCi0JCW1lc3NhZ2VOYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKSArICJSZXF1ZXN0IjsgLy8kTk9OLU5MUy0xJAotCQkKLQkJcmV0dXJuIG1lc3NhZ2VOYW1lOwotCX0KLQkKLQlwdWJsaWMgTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkgewotCQlyZXR1cm4gaW5wdXQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRNZXNzYWdlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRNZXNzYWdlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2JkYTA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkTWVzc2FnZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5TbWFydFJlbmFtZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkTWVzc2FnZUNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIGxvY2FsTmFtZTsKLSAgcHJpdmF0ZSBNZXNzYWdlIG1lc3NhZ2U7Ci0gIHByaXZhdGUgTWVzc2FnZSBvcmlnaW5hbE1lc3NhZ2U7Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlUGFydCA9IGZhbHNlOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1BBUlRfTkFNRSA9ICJOZXdQYXJ0IjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIEFkZE1lc3NhZ2VDb21tYW5kCi0gIAkoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAgCi0gIAkgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGRNZXNzYWdlQ29tbWFuZAotCQkoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAKLQkJIFN0cmluZyBsb2NhbE5hbWUsCi0JCSBib29sZWFuIGNyZWF0ZVBhcnQpCi0JewotCSAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQkgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotCSAgdGhpcy5jcmVhdGVQYXJ0ID0gY3JlYXRlUGFydDsKLQl9Ci0gIAotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHRvIGNyZWF0ZSBhIE1lc3NhZ2UgYmFzZWQgb24gdGhlIGdpdmVuIE1lc3NhZ2UuICBJbiBlc3NlbmNlLCB0aGlzIHdpbGwKLSAgICogY3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gTWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBBZGRNZXNzYWdlQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIE1lc3NhZ2Ugb3JpZ2luYWxNZXNzYWdlLCBTdHJpbmcgbG9jYWxOYW1lLCBib29sZWFuIGNvcHlQYXJ0KSB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQl0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLQl0aGlzLmNyZWF0ZVBhcnQgPSBjb3B5UGFydDsKLSAgCXRoaXMub3JpZ2luYWxNZXNzYWdlID0gb3JpZ2luYWxNZXNzYWdlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgbWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgbWVzc2FnZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSxsb2NhbE5hbWUpKTsKLSAgICBtZXNzYWdlLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIAotICAgIGlmIChvcmlnaW5hbE1lc3NhZ2UgPT0gbnVsbCkgewotICAgIAlpZiAoY3JlYXRlUGFydCkKLSAgICAJewotICAgIAkJQWRkUGFydENvbW1hbmQgY29tbWFuZCA9IAotICAgIAkJCW5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLERFRkFVTFRfUEFSVF9OQU1FLFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsInN0cmluZyIsdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAJCWNvbW1hbmQucnVuKCk7Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCWlmIChvcmlnaW5hbE1lc3NhZ2UuZ2V0RVBhcnRzKCkgIT0gbnVsbCkgewotICAgIAkJSXRlcmF0b3IgaXQgPSBvcmlnaW5hbE1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQotICAgIAkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgIAkJCVBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgCQkJQWRkUGFydENvbW1hbmQgY29tbWFuZDsKLSAgICAJCQlpZiAoU21hcnRSZW5hbWVBY3Rpb24uaXNQYXJ0TmFtZUdlbmVyYXRlZChwYXJ0LmdldE5hbWUoKSwgb3JpZ2luYWxNZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpKQotICAgIAkJCQljb21tYW5kID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIHBhcnQsIE5hbWVVdGlsLmJ1aWxkVW5pcXVlUGFydE5hbWUobWVzc2FnZSwgbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKSk7CQotICAgIAkJCWVsc2UKLSAgICAJCQkJY29tbWFuZCA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBwYXJ0LCBwYXJ0LmdldE5hbWUoKSk7Ci0gICAgCQkJCi0gICAgCQkJCi0gICAgCQkJY29tbWFuZC5ydW4oKTsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldExvY2FsTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubG9jYWxOYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOTM5ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotCi1hYnN0cmFjdCBwdWJsaWMgY2xhc3MgQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lOwotICBwcm90ZWN0ZWQgTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlOwotICBwcm90ZWN0ZWQgT3BlcmF0aW9uIG9wZXJhdGlvbjsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gY3JlYXRlTWVzc2FnZSA9IGZhbHNlOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX01FU1NBR0VfTkFNRSA9ICJOZXdNZXNzYWdlIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBBZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBjcmVhdGVNZXNzYWdlKQotICB7Ci0gICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB0aGlzLmNyZWF0ZU1lc3NhZ2UgPSBjcmVhdGVNZXNzYWdlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlTWVzc2FnZSgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIEFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSAKLSAgICAgIG5ldyBBZGRNZXNzYWdlQ29tbWFuZChkZWZpbml0aW9uLERFRkFVTFRfTUVTU0FHRV9OQU1FLGNyZWF0ZU1lc3NhZ2UpOyAgICAgIAotICAgIGNvbW1hbmQucnVuKCk7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZS5zZXRFTWVzc2FnZSgoTWVzc2FnZSljb21tYW5kLmdldFdTRExFbGVtZW50KCkpOwotICB9Ci0gIAotICAvKgotICAgKiBPdmVybG9hZGVkIGNyZWF0ZU1lc3NhZ2UoYXJnKSBtZXRob2QuICBTaW1pbGFyIHRvIHRvIGNyZWF0ZU1lc3NhZ2UoKSBidXQgdGFrZXMgaW4gYSBNZXNzYWdlUmVmZXJlbmNlLgotICAgKiBNZXRob2QgdXNlZCB0byBjcmVhdGUgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBNZXNzYWdlIChjb250YWluZWQgaW4gdGhlIHBhc3NlZCBpbiBNZXNzYWdlUmVmZXJlbmNlKS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZU1lc3NhZ2UoTWVzc2FnZVJlZmVyZW5jZSBvcmlnaW5hbE1SZWYsIFN0cmluZyBuZXdNZXNzYWdlUmVmTmFtZSkgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgTWVzc2FnZSB0TWVzc2FnZSA9IG9yaWdpbmFsTVJlZi5nZXRFTWVzc2FnZSgpOwotICAgIEFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSAKLSAgICAgIG5ldyBBZGRNZXNzYWdlQ29tbWFuZChkZWZpbml0aW9uLCB0TWVzc2FnZSwgbmV3TWVzc2FnZVJlZk5hbWUsIHRydWUpOwotICAgIGNvbW1hbmQucnVuKCk7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZS5zZXRFTWVzc2FnZSgoTWVzc2FnZSljb21tYW5kLmdldFdTRExFbGVtZW50KCkpOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VSZWZlcmVuY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE9wZXJhdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3BlcmF0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWY3MGQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3BlcmF0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkT3BlcmF0aW9uQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIFBvcnRUeXBlIHBvcnRUeXBlOwotICBwcml2YXRlIFN0cmluZyBuYW1lOwotICBwcml2YXRlIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0gIHByaXZhdGUgT3BlcmF0aW9uIG9yaWdpbmFsT3BlcmF0aW9uOwotICBwcml2YXRlIGJvb2xlYW4gY29weUluT3V0RmF1bHQ7Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlSW5wdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZU91dHB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlRmF1bHQgPSBmYWxzZTsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfSU5QVVRfTkFNRSA9ICIiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfT1VUUFVUX05BTUUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX0ZBVUxUX05BTUUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIEFkZE9wZXJhdGlvbkNvbW1hbmQKLQkJKFBvcnRUeXBlIHBvcnRUeXBlLCAgCi0JCSBTdHJpbmcgbmFtZSkKLQl7Ci0JICB0aGlzLnBvcnRUeXBlID0gcG9ydFR5cGU7Ci0JICB0aGlzLm5hbWUgPSBuYW1lOwotCX0KLSAgCi0gIHB1YmxpYyBBZGRPcGVyYXRpb25Db21tYW5kCi0JCShQb3J0VHlwZSBwb3J0VHlwZSwgIAotCQkgU3RyaW5nIG5hbWUsCi0JCSBib29sZWFuIGNyZWF0ZUlucHV0LAotCQkgYm9vbGVhbiBjcmVhdGVPdXRwdXQsCi0JCSBib29sZWFuIGNyZWF0ZUZhdWx0KQotCXsKLQkgIHRoaXMucG9ydFR5cGUgPSBwb3J0VHlwZTsKLQkgIHRoaXMubmFtZSA9IG5hbWU7Ci0JICB0aGlzLmNyZWF0ZUlucHV0ID0gY3JlYXRlSW5wdXQ7Ci0JICB0aGlzLmNyZWF0ZU91dHB1dCA9IGNyZWF0ZU91dHB1dDsKLQkgIHRoaXMuY3JlYXRlRmF1bHQgPSBjcmVhdGVGYXVsdDsKLQl9Ci0gIAotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHRvIGNyZWF0ZSBhbiBPcGVyYXRpb24gYmFzZWQgb24gdGhlIGdpdmVuIE9wZXJhdGlvbi4gIEluIGVzc2VuY2UsIHRoaXMgd2lsbAotICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBPcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgQWRkT3BlcmF0aW9uQ29tbWFuZChQb3J0VHlwZSBwb3J0VHlwZSwgT3BlcmF0aW9uIG9yaWdpbmFsT3BlcmF0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBjb3B5SW5PdXRGYXVsdCkgewotICAJdGhpcy5wb3J0VHlwZSA9IHBvcnRUeXBlOwotICAJdGhpcy5vcmlnaW5hbE9wZXJhdGlvbiA9IG9yaWdpbmFsT3BlcmF0aW9uOwotICAJdGhpcy5uYW1lID0gbmFtZTsKLSAgCXRoaXMuY29weUluT3V0RmF1bHQgPSBjb3B5SW5PdXRGYXVsdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIG9wZXJhdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBvcGVyYXRpb24uc2V0TmFtZShuYW1lKTsKLSAgICBvcGVyYXRpb24uc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihwb3J0VHlwZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pOwotCi0gICAgaWYgKG9yaWdpbmFsT3BlcmF0aW9uID09IG51bGwpIHsgICAgCi0gICAgCVdTRExFbGVtZW50Q29tbWFuZCBjb21tYW5kID0gbnVsbDsKLSAgICAJaWYgKGNyZWF0ZUlucHV0KQotICAgIAl7Ci0gICAgCQljb21tYW5kID0gbmV3IEFkZElucHV0Q29tbWFuZChvcGVyYXRpb24sREVGQVVMVF9JTlBVVF9OQU1FLHRydWUpOwotICAgIAkJY29tbWFuZC5ydW4oKTsKLSAgICAJfQotICAgIAotICAgIAlpZiAoY3JlYXRlT3V0cHV0KQotICAgIAl7Ci0gICAgCQljb21tYW5kID0gbmV3IEFkZE91dHB1dENvbW1hbmQob3BlcmF0aW9uLERFRkFVTFRfT1VUUFVUX05BTUUsdHJ1ZSk7Ci0gICAgCQljb21tYW5kLnJ1bigpOwotICAgIAl9Ci0gICAgCi0gICAgCWlmIChjcmVhdGVGYXVsdCkKLSAgICAJewotICAgIAkJY29tbWFuZCA9IG5ldyBBZGRGYXVsdENvbW1hbmQob3BlcmF0aW9uLERFRkFVTFRfRkFVTFRfTkFNRSx0cnVlKTsKLSAgICAJCWNvbW1hbmQucnVuKCk7Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCS8vIERvIG5lY2Vzc2FyeSBjb3B5aW5nIG9mIGRhdGEgZnJvbSBvcmlnaW5hbCBvcGVyYXRpb24gdG8gbmV3IG9wZXJhdGlvbgotICAgIAkvLyBQYXJhbWF0ZXIgb3JkZXJpbmc/IERvY3VtZW50YXRpb24/ICBUaGlzIHBhcnQgc3RpbGwgbmVlZHMgdG8gYmUgd29ya2VkIG9uICAgIAkKLSAgICAJLy8gQ29weSAna2lkcycgaWYgbmVjZXNzYXJ5Ci0gICAgCWlmIChjb3B5SW5PdXRGYXVsdCkgewotICAgIAkJV1NETEVsZW1lbnRDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgCWlmIChvcmlnaW5hbE9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgICAgCXsKLSAgICAgICAgCQlPdXRwdXQgb3V0cHV0ID0gb3JpZ2luYWxPcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotICAgICAgICAJCWNvbW1hbmQgPSBuZXcgQWRkT3V0cHV0Q29tbWFuZChvcGVyYXRpb24sIG91dHB1dCwgTmFtZVV0aWwuYnVpbGRVbmlxdWVPdXRwdXROYW1lKHBvcnRUeXBlLCBvcGVyYXRpb24uZ2V0TmFtZSgpLCAiIikpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAkJY29tbWFuZC5ydW4oKTsKLSAgICAgICAgCX0KLSAgICAgICAgCQotICAgICAgICAJaWYgKG9yaWdpbmFsT3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpCi0gICAgICAgIAl7Ci0gICAgICAgIAkJSW5wdXQgaW5wdXQgPSBvcmlnaW5hbE9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLSAgICAgICAgCQljb21tYW5kID0gbmV3IEFkZElucHV0Q29tbWFuZChvcGVyYXRpb24sIGlucHV0LCBOYW1lVXRpbC5idWlsZFVuaXF1ZUlucHV0TmFtZShwb3J0VHlwZSwgb3BlcmF0aW9uLmdldE5hbWUoKSwgIiIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAJCWNvbW1hbmQucnVuKCk7Ci0gICAgICAgIAl9Ci0gICAgICAgIAotICAgICAgICAJaWYgKG9yaWdpbmFsT3BlcmF0aW9uLmdldEVGYXVsdHMoKSAhPSBudWxsKQotICAgICAgICAJewotICAgICAgICAJCUl0ZXJhdG9yIGl0ID0gb3JpZ2luYWxPcGVyYXRpb24uZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIAkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgICAJCQlGYXVsdCBmYXVsdCA9IChGYXVsdCkgaXQubmV4dCgpOwotICAgICAgICAJCQljb21tYW5kID0gbmV3IEFkZEZhdWx0Q29tbWFuZChvcGVyYXRpb24sIGZhdWx0LCBOYW1lVXRpbC5idWlsZFVuaXF1ZUZhdWx0TmFtZShvcmlnaW5hbE9wZXJhdGlvbiwgZmF1bHQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgIAkJCWNvbW1hbmQucnVuKCk7Ci0gICAgICAgIAkJfQotICAgICAgICAJfQotICAgIAkJCi0gICAgCX0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE91dHB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4MTFkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuU21hcnRSZW5hbWVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkT3V0cHV0Q29tbWFuZCBleHRlbmRzIEFkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kCi17Ci0gIHByaXZhdGUgT3V0cHV0IG9yaWdpbmFsT3V0cHV0OwotICAKLSAgcHVibGljIEFkZE91dHB1dENvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihvcGVyYXRpb24sbmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgQWRkT3V0cHV0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBjcmVhdGVNZXNzYWdlKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUsY3JlYXRlTWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gY3JlYXRlIGFuIE91dHB1dCBiYXNlZCBvbiB0aGUgZ2l2ZW4gT3V0cHV0LiAgSW4gZXNzZW5jZSwgdGhpcyB3aWxsCi0gICAqIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIE91dHB1dC4KLSAgICovCi0gIHB1YmxpYyBBZGRPdXRwdXRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIE91dHB1dCBvcmlnaW5hbE91dHB1dCwgU3RyaW5nIG5hbWUpIHsKLSAgCXN1cGVyKG9wZXJhdGlvbiwgbmFtZSwgZmFsc2UpOwotICAJCi0gIAl0aGlzLm9yaWdpbmFsT3V0cHV0ID0gb3JpZ2luYWxPdXRwdXQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBtZXNzYWdlUmVmZXJlbmNlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU91dHB1dCgpOwotLy8gICAgbWVzc2FnZVJlZmVyZW5jZS5zZXROYW1lKG5hbWUpOwotICAgIG1lc3NhZ2VSZWZlcmVuY2Uuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBvcGVyYXRpb24uc2V0T3V0cHV0KChPdXRwdXQpbWVzc2FnZVJlZmVyZW5jZSk7Ci0gICAgCi0gICAgLy8gIFRCRCAtIGFkZCBiaW5kaW5nIG91dHB1dCAKLSAgICAKLSAgICBpZiAob3JpZ2luYWxPdXRwdXQgPT0gbnVsbCkgewotICAgIAlpZiAoY3JlYXRlTWVzc2FnZSkKLSAgICAJCWNyZWF0ZU1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCS8vIERvIG5lY2Vzc2FyeSBjb3B5aW5nIG9mIGRhdGEgZnJvbSBvcmlnaW5hbCBPdXRwdXQgdG8gbmV3IE91dHB1dAotICAgIAlpZiAob3JpZ2luYWxPdXRwdXQuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0gICAgCQlTdHJpbmcgb3JpZ2luYWxNc2dOYW1lID0gb3JpZ2luYWxPdXRwdXQuZ2V0RU1lc3NhZ2UoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkKLQkJYm9vbGVhbiBnZW5lZCA9IGZhbHNlOwotCQlpZiAob3JpZ2luYWxPdXRwdXQuZUNvbnRhaW5lcigpIGluc3RhbmNlb2YgT3BlcmF0aW9uKQotCQkJZ2VuZWQgPSBTbWFydFJlbmFtZUFjdGlvbi5pc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9yaWdpbmFsTXNnTmFtZSwgKChPcGVyYXRpb24pIG9yaWdpbmFsT3V0cHV0LmVDb250YWluZXIoKSkuZ2V0TmFtZSgpLCAiUmVzcG9uc2UiKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJU3RyaW5nIG5ld01zZ05hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQlpZiAoZ2VuZWQpIHsKLQkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIG1lc3NhZ2VSZWZlcmVuY2UpOwotCQl9Ci0JCWVsc2UgewotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkJCU1lc3NhZ2UgdE1lc3NhZ2UgPSBvcmlnaW5hbE91dHB1dC5nZXRFTWVzc2FnZSgpOwotCQkJbmV3TXNnTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUoZGVmaW5pdGlvbiwgdE1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0JCX0KLQkJCi0gICAgCWNyZWF0ZU1lc3NhZ2Uob3JpZ2luYWxPdXRwdXQsIG5ld01zZ05hbWUpOwotICAgIAl9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDg1YmZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIEFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQgZXh0ZW5kcyBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZCB7Ci0JcHJpdmF0ZSBPdXRwdXQgb3V0cHV0OwotCQotCXB1YmxpYyBBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIGludCBzdHlsZSkgewotCQlzdXBlcihvcGVyYXRpb24sIHN0eWxlKTsKLQl9Ci0JCi0JLyoKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCVBhcnQgcGFydCA9IG51bGw7Ci0JCWlmIChvcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpIHsKLQkJCW91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0JCQlwYXJ0ID0gY3JlYXRlV1NETENvbXBvbmVudHMob3BlcmF0aW9uLmdldEVPdXRwdXQoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlBZGRPdXRwdXRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkT3V0cHV0Q29tbWFuZChvcGVyYXRpb24sIG51bGwpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCW91dHB1dCA9IChPdXRwdXQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCXBhcnQgPSBjcmVhdGVXU0RMQ29tcG9uZW50cyhvdXRwdXQpOwotCQl9Ci0JCQotCQluZXdQYXJ0ID0gcGFydDsKLQkJLy8gQ3JlYXRlIG5lY2Vzc2FyeSBYU0QgT2JqZWN0cyBzdGFydGluZyB3aXRoIHRoZSBQYXJ0IHJlZmVyZW5jZQotCQluZXdYU0RFbGVtZW50ID0gY3JlYXRlWFNET2JqZWN0cyhwYXJ0KTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRBbm9ueW1vdXNYU0RFbGVtZW50QmFzZU5hbWUoKSB7Ci0JCWlmIChuZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0JCQlpZiAodGhpcy5zdHlsZSA9PSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpIHsKLQkJCQluZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCkgKyAiUmVzcG9uc2UiOyAvLyROT04tTkxTLTEkOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPSBnZXRXU0RMUGFydE5hbWUoKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG5ld0Fub255bW91c1hTREVsZW1lbnROYW1lOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpIHsKLQkJaWYgKG5ld1hTREVsZW1lbnROYW1lID09IG51bGwpIHsKLQkJCW5ld1hTREVsZW1lbnROYW1lID0gIm91dCI7IC8vJE5PTi1OTFMtMSQKLS8vCQkJbmV3WFNERWxlbWVudE5hbWUgPSBnZXRXU0RMUGFydE5hbWUoKTsKLQkJfQotCQkKLQkJcmV0dXJuIG5ld1hTREVsZW1lbnROYW1lOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdTRExNZXNzYWdlTmFtZSgpIHsKLQkJaWYgKG5ld1dTRExNZXNzYWdlTmFtZSA9PSBudWxsKSB7Ci0JCQlpZiAob3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0JCQkJbmV3V1NETE1lc3NhZ2VOYW1lPSBOYW1lVXRpbC5nZXRNZXNzYWdlTmFtZShvcGVyYXRpb24uZ2V0RU91dHB1dCgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG5ld1dTRExNZXNzYWdlTmFtZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdTRExQYXJ0TmFtZSgpIHsKLQkJaWYgKG5ld1dTRExQYXJ0TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdXU0RMUGFydE5hbWUgID0gTmFtZVV0aWwuZ2V0UGFydE5hbWUob3BlcmF0aW9uLmdldEVPdXRwdXQoKSk7CQkJCi0JCX0KLQkJCi0JCXJldHVybiBuZXdXU0RMUGFydE5hbWU7Ci0JfQotCQotCXB1YmxpYyBNZXNzYWdlUmVmZXJlbmNlIGdldE1lc3NhZ2VSZWZlcmVuY2UoKSB7Ci0JCXJldHVybiBvdXRwdXQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQYXJ0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQYXJ0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDkwOGE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUGFydENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkUGFydENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBNZXNzYWdlIG1lc3NhZ2U7Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gIHByaXZhdGUgUGFydCBwYXJ0OwotICBwcml2YXRlIFBhcnQgb3JpZ2luYWxQYXJ0OwotICAKLSAgcHJpdmF0ZSBRTmFtZSB0eXBlT3JFbGVtZW50TmFtZTsKLSAgcHJpdmF0ZSBib29sZWFuIHVzZVR5cGUgPSB0cnVlOwotCi0gIHB1YmxpYyBBZGRQYXJ0Q29tbWFuZAotCQkoTWVzc2FnZSBtZXNzYWdlLAotCQkgU3RyaW5nIG5hbWUpCi0JewotCSAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLQkgIHRoaXMubmFtZSA9IG5hbWU7Ci0JfQotICAKLSAgcHVibGljIEFkZFBhcnRDb21tYW5kCi0JCShNZXNzYWdlIG1lc3NhZ2UsCi0JCSBTdHJpbmcgbmFtZSwKLQkJIFN0cmluZyBuYW1lc3BhY2UsCi0JCSBTdHJpbmcgbG9jYWxOYW1lLAotCQkgYm9vbGVhbiB1c2VUeXBlKQotCXsKLQkgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0JICB0aGlzLm5hbWUgPSBuYW1lOwotCSAgdGhpcy51c2VUeXBlID0gdXNlVHlwZTsKLQkgIHR5cGVPckVsZW1lbnROYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSxsb2NhbE5hbWUpOwotCX0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gY3JlYXRlIGEgUGFydCBiYXNlZCBvbiB0aGUgZ2l2ZW4gUGFydC4gIEluIGVzc2VuY2UsIHRoaXMgd2lsbAotICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBQYXJ0LgotICAgKi8KLSAgcHVibGljIEFkZFBhcnRDb21tYW5kCi0JKE1lc3NhZ2UgbWVzc2FnZSwKLQkgUGFydCBvcmlnaW5hbFBhcnQsCi0JIFN0cmluZyBuYW1lKQotICB7Ci0gIAl0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAJdGhpcy5uYW1lID0gbmFtZTsKLSAgCXRoaXMub3JpZ2luYWxQYXJ0ID0gb3JpZ2luYWxQYXJ0OwotICB9Ci0gIAotICAvKioKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGRQYXJ0Q29tbWFuZAotCQkoTWVzc2FnZSBtZXNzYWdlLAotCQkgU3RyaW5nIG5hbWUsCi0JCSBTdHJpbmcgbmFtZXNwYWNlLAotCQkgU3RyaW5nIGxvY2FsTmFtZSkKLQl7Ci0JICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotCSAgdGhpcy5uYW1lID0gbmFtZTsKLQkgIHR5cGVPckVsZW1lbnROYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSxsb2NhbE5hbWUpOwotCX0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHBhcnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBpZiAodHlwZU9yRWxlbWVudE5hbWUgPT0gbnVsbCkKLSAgICAgIHR5cGVPckVsZW1lbnROYW1lID0gY3JlYXRlRGVmYXVsdFR5cGVOYW1lKCk7Ci0gICAgCi0gICAgLy8gQWRkIG5hbWVzcGFjZSB0byB0aGUgRGVmaW5pdGlvbnMgaWYgaXQgaXMgbm90IHRoZXJlIHlldC4KLSAgICBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbigpOwotICAgIAotICAgIHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZShuYW1lKTsKLSAgICAKLSAgICBpZiAob3JpZ2luYWxQYXJ0ID09IG51bGwpIHsKLSAgICAJaWYgKHVzZVR5cGUpCi0gICAgCQlwYXJ0LnNldFR5cGVOYW1lKHR5cGVPckVsZW1lbnROYW1lKTsKLSAgICAJZWxzZQotICAgIAkJcGFydC5zZXRFbGVtZW50TmFtZSh0eXBlT3JFbGVtZW50TmFtZSk7Ci0gICAgfQotICAgIGVsc2UgewotICAgIAlpZiAob3JpZ2luYWxQYXJ0LmdldFR5cGVOYW1lKCkgIT0gbnVsbCkKLSAgICAJCXBhcnQuc2V0VHlwZU5hbWUob3JpZ2luYWxQYXJ0LmdldFR5cGVOYW1lKCkpOwotCi0gICAgCVN0cmluZyBuZXdFbGVtZW50TmFtZSA9IG51bGw7Ci0gICAgCWlmIChvcmlnaW5hbFBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKSB7Ci0gICAgCQkKLSAgICAJCWJvb2xlYW4gY3JlYXRlTmV3RWxlbWVudCA9IHRydWU7Ci0gICAgCQlpZiAob3JpZ2luYWxQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwgJiYgb3JpZ2luYWxQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpLmdldEVsZW1lbnQoKSAhPSBudWxsKSB7Ci0gICAgICAgIAkJaWYgKCEob3JpZ2luYWxQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpLmdldEVsZW1lbnQoKSBpbnN0YW5jZW9mIElET01Ob2RlKSkgewotICAgICAgICAJCQljcmVhdGVOZXdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIAkJfSAgICAgICAgCQkKLSAgICAJCX0KLSAgICAJCQotICAgIAkJaWYgKGNyZWF0ZU5ld0VsZW1lbnQpIHsKLSAgICAJCQluZXdFbGVtZW50TmFtZSA9IGdldE5ld05hbWVIZWxwZXIobmFtZSwgb3JpZ2luYWxQYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgZmFsc2UpOwotICAgIAkJCXBhcnQuc2V0RWxlbWVudE5hbWUobmV3IFFOYW1lKG9yaWdpbmFsUGFydC5nZXRFbGVtZW50TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBuZXdFbGVtZW50TmFtZSkpOwotCQotICAgIAkJCWlmIChvcmlnaW5hbFBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpICE9IG51bGwpIHsKLSAgICAJCQkJaWYgKG5ld0VsZW1lbnROYW1lID09IG51bGwpIHsKLSAgICAJCQkJCW5ld0VsZW1lbnROYW1lID0gZ2V0TmV3TmFtZUhlbHBlcihuYW1lLCBvcmlnaW5hbFBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBmYWxzZSk7Ci0gICAgCQkJCX0KLSAgICAJCQotICAgIAkJCQlBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kIGVsZW1lbnRBY3Rpb24gPSBuZXcgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChvcmlnaW5hbFBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBuZXdFbGVtZW50TmFtZSk7Ci0gICAgCQkJCWVsZW1lbnRBY3Rpb24ucnVuKCk7Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAkJZWxzZSB7Ci0gICAgCQkJcGFydC5zZXRFbGVtZW50TmFtZShuZXcgUU5hbWUob3JpZ2luYWxQYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksIG9yaWdpbmFsUGFydC5nZXRFbGVtZW50TmFtZSgpLmdldExvY2FsUGFydCgpKSk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gICAgCQotICAgIHBhcnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihtZXNzYWdlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgKChQYXJ0SW1wbClwYXJ0KS5yZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsgCi0gICAgbWVzc2FnZS5hZGRQYXJ0KHBhcnQpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYWRkTmFtZXNwYWNlRGVjbGFyYXRpb24oKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbWVzc2FnZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgaWYgKCFkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKS5jb250YWluc1ZhbHVlKHR5cGVPckVsZW1lbnROYW1lLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgicCIsdHlwZU9yRWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOyAvLyROT04tTkxTLTEkCi0vLyAgICAgICgoV1NETEVsZW1lbnRJbXBsKWRlZmluaXRpb24pLnVwZGF0ZUVsZW1lbnQoZmFsc2UpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBRTmFtZSBjcmVhdGVEZWZhdWx0VHlwZU5hbWUoKQotICB7Ci0gICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSwic3RyaW5nIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXR1cm4gcW5hbWU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldE5ld05hbWVIZWxwZXIoU3RyaW5nIGJhc2UsIERlZmluaXRpb24gZGVmLCBib29sZWFuIGlzVHlwZSkKLSAgeyAKLSAgICBTdHJpbmcgbmFtZSA9IGJhc2U7ICAgIAotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICAvLyBVZ2x5Li4uLiAgUmVkbyB0aGlzLi4uCi0gICAgLy8gR2V0IGEgbGlzdCBvZiBFbGVtZW50cy4uLgotICAgIExpc3QgZWxlbWVudExpc3QgPSBudWxsOwotICAgIGlmIChkZWYuZ2V0RVR5cGVzKCkgIT0gbnVsbCkgewotICAgIAlMaXN0IHhzZHNMaXN0ID0gZGVmLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAJaWYgKHhzZHNMaXN0ICE9IG51bGwpIHsKLSAgICAJCUl0ZXJhdG9yIHhzZHNJdGVyYXRvciA9IHhzZHNMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSB4c2RzSXRlcmF0b3IubmV4dCgpOwotICAgIAkJWFNEU2NoZW1hIHNjaGVtYSA9IHhzZEVsZW1lbnQuZ2V0U2NoZW1hKCk7Ci0gICAgCQlpZiAoc2NoZW1hICE9IG51bGwpIHsKLSAgICAJCQllbGVtZW50TGlzdCA9IHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGVsZW1lbnRMaXN0ICE9IG51bGwpIHsKLSAgICAJaW50IGluZGV4ID0gMDsKLSAgICAJd2hpbGUgKGluZGV4IDwgZWxlbWVudExpc3Quc2l6ZSgpKSB7Ci0gICAgCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2xhcmF0aW9uID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgZWxlbWVudExpc3QuZ2V0KGluZGV4KTsKLSAgICAJCQotICAgIAkJaWYgKG5hbWUuZXF1YWxzKGVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCkpKSB7Ci0gICAgCQkJY291bnQrKzsKLSAgICAJCQluYW1lID0gbmFtZSArIGNvdW50OwotICAgIAkJCWluZGV4ID0gMDsKLSAgICAJCX0KLSAgICAJCWVsc2UgewotICAgIAkJCWluZGV4Kys7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQb3J0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQb3J0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzI2OTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUG9ydENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZFBvcnRDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgU2VydmljZSBzZXJ2aWNlOwotICBwcml2YXRlIFN0cmluZyBuYW1lOwotICBwcml2YXRlIFBvcnQgcG9ydDsKLSAgCi0gIHB1YmxpYyBBZGRQb3J0Q29tbWFuZAotCQkoU2VydmljZSBzZXJ2aWNlLAotCQkgU3RyaW5nIG5hbWUpCi0JewotCSAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTsKLQkgIHRoaXMubmFtZSA9IG5hbWU7Ci0JfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBwb3J0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcnQoKTsKLSAgICBwb3J0LnNldE5hbWUobmFtZSk7Ci0gICAgcG9ydC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHNlcnZpY2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBzZXJ2aWNlLmFkZFBvcnQocG9ydCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUG9ydFR5cGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFBvcnRUeXBlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjZmZWI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUG9ydFR5cGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkUG9ydFR5cGVDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyBsb2NhbE5hbWU7Ci0gIHByaXZhdGUgUG9ydFR5cGUgcG9ydFR5cGU7Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlT3BlcmF0aW9uID0gZmFsc2U7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfT1BFUkFUSU9OX05BTUUgPSAiTmV3T3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBBZGRQb3J0VHlwZUNvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgIAotCQkgU3RyaW5nIGxvY2FsTmFtZSkKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JfQotCi0gIHB1YmxpYyBBZGRQb3J0VHlwZUNvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgCi0JCSBTdHJpbmcgbG9jYWxOYW1lLAotCQkgYm9vbGVhbiBjcmVhdGVPcGVyYXRpb24pCi0JewotCSAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQkgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotCSAgdGhpcy5jcmVhdGVPcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb247Ci0JfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5XU0RMRWxlbWVudEFjdGlvbiNnZXRXU0RMRWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHBvcnRUeXBlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIHBvcnRUeXBlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcnRUeXBlKCk7Ci0gICAgcG9ydFR5cGUuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksbG9jYWxOYW1lKSk7Ci0gICAgcG9ydFR5cGUuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICBkZWZpbml0aW9uLmFkZFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAKLSAgICBpZiAoY3JlYXRlT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIEFkZE9wZXJhdGlvbkNvbW1hbmQgY29tbWFuZCA9IAotICAgICAgICBuZXcgQWRkT3BlcmF0aW9uQ29tbWFuZChwb3J0VHlwZSxERUZBVUxUX09QRVJBVElPTl9OQU1FLHRydWUsdHJ1ZSxmYWxzZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TG9jYWxOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgbG9jYWxOYW1lID0gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRTZXJ2aWNlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRTZXJ2aWNlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTVjZjE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkU2VydmljZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZFNlcnZpY2VDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyBsb2NhbE5hbWU7Ci0gIHByaXZhdGUgU2VydmljZSBzZXJ2aWNlOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZVBvcnQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9QT1JUX05BTUUgPSAiTmV3UG9ydCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgQWRkU2VydmljZUNvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgIAotCQkgU3RyaW5nIGxvY2FsTmFtZSkKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JfQotCi0JcHVibGljIEFkZFNlcnZpY2VDb21tYW5kCi0JCShEZWZpbml0aW9uIGRlZmluaXRpb24sIAotCQkgU3RyaW5nIGxvY2FsTmFtZSwKLQkJIGJvb2xlYW4gY3JlYXRlUG9ydCkKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JICB0aGlzLmNyZWF0ZVBvcnQgPSBjcmVhdGVQb3J0OwotCX0KLQotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgc2VydmljZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSxsb2NhbE5hbWUpKTsKLSAgICBzZXJ2aWNlLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIAotICAgIGlmIChjcmVhdGVQb3J0KQotICAgIHsKLSAgICAgIEFkZFBvcnRDb21tYW5kIGNvbW1hbmQgPSAKLSAgICAgICAgbmV3IEFkZFBvcnRDb21tYW5kKHNlcnZpY2UsREVGQVVMVF9QT1JUX05BTUUpOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldExvY2FsTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGxvY2FsTmFtZSA9IG5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkVHlwZXNDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFR5cGVzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODdlNThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkVHlwZXNDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi0vLyBEZWZpbml0aW9uIG11c3Qgbm90IGhhdmUgInR5cGVzIiBlbGVtZW50IHRvIHJ1biB0aGlzIGNvbW1hbmQuCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkVHlwZXNDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFR5cGVzIHR5cGVzOwotICAKLSAgcHVibGljIEFkZFR5cGVzQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAJaWYgKCh0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCkpICE9IG51bGwpCi0gICAgICByZXR1cm47IC8vICJ0eXBlcyIgYWxyZWFkeSBleGlzdHMuCi0gIAkKLSAgICB0eXBlcyA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUeXBlcygpOwotICAgIHR5cGVzLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5zZXRUeXBlcyh0eXBlcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdHlwZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNDg3YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Q29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50OwotICBwcml2YXRlIFN0cmluZyBuYW1lc3BhY2VVUkk7Ci0gIHByaXZhdGUgU3RyaW5nIGxvY2FsTmFtZTsKLSAgcHJpdmF0ZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIHByaXZhdGUgTWFwIHByb3BlcnRpZXM7Ci0gCi0gIHB1YmxpYyBBZGRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRDb21tYW5kCi0gICAgKEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50LCAKLSAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSwKLSAgICAgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIHRoaXMuZXh0ZW5zaWJsZUVsZW1lbnQgPSBleHRlbnNpYmxlRWxlbWVudDsKLSAgICB0aGlzLm5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKLSAgICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLSAgfQotICAKLSAgcHVibGljIEFkZFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudENvbW1hbmQKLSAgICAoRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQsIAotICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJLAotICAgICBTdHJpbmcgbG9jYWxOYW1lLAotICAgICBNYXAgcHJvcGVydGllcykKLSAgewotICAgIHRoaXMuZXh0ZW5zaWJsZUVsZW1lbnQgPSBleHRlbnNpYmxlRWxlbWVudDsKLSAgICB0aGlzLm5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKLSAgICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLSAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGV4dGVuc2liaWxpdHlFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAJZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gIAlleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbGVtZW50VHlwZShuZXcgUU5hbWUobmFtZXNwYWNlVVJJLGxvY2FsTmFtZSkpOwotICAJCi0gICAgaWYgKHByb3BlcnRpZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHByb3BlcnRpZXMuZW50cnlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgTWFwLkVudHJ5IGVudHJ5ID0gbnVsbDsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAJZW50cnkgPSAoTWFwLkVudHJ5KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIAlTdHJpbmcgYXR0cmlidXRlID0gKFN0cmluZyllbnRyeS5nZXRLZXkoKTsKLSAgICAgIAlTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKWVudHJ5LmdldFZhbHVlKCk7ICAgICAgCQotICAgICAgCSgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClleHRlbnNpYmlsaXR5RWxlbWVudCkuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSx2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAJZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihleHRlbnNpYmxlRWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAJZXh0ZW5zaWJsZUVsZW1lbnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTE0ZTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLQotCi0vLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3IFhTREVsZW1lbnREZWNsYXJhdGlvbiBpbiB0aGUgdGFyZ2V0TmFtZXNwYWNlLgotcHVibGljIGZpbmFsIGNsYXNzIEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIHRhcmdldE5hbWVzcGFjZTsKLSAgcHJpdmF0ZSBTdHJpbmcgZWxlbWVudE5hbWU7Ci0gIHByaXZhdGUgWFNEU2NoZW1hIHNjaGVtYTsKLSAgcHJpdmF0ZSBYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudDsKLSAgCi0gIC8qKgotICAgKiBUT0RPOgotICAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIHByb2JsZW0gaGVyZS4uLi4gIFdoYXQgaWYgdGhlIGRlZmluaXRpb24gdGFyZ2V0bmFtZXNwYWNlIGlzIG51bGwuLi4uCi0gICAqLwotICBwdWJsaWMgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBlbGVtZW50TmFtZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIHRoaXMuZWxlbWVudE5hbWUgPSBlbGVtZW50TmFtZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBkZXByZWNhdGVkCi0gICAqIFVzZSBBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lKQotICAgKi8KLSAgcHVibGljIEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQKLSAgICAoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAKLSAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgCi0gICAgIFN0cmluZyBlbGVtZW50TmFtZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSB0YXJnZXROYW1lc3BhY2U7Ci0gICAgdGhpcy5lbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBnZXRTY2hlbWEoKTsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSAKLSAgICAgIFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgIGVsZW1lbnREZWNsLnNldE5hbWUoZWxlbWVudE5hbWUpOwotICAgIAotICAgIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGVEZWZpbml0aW9uID0gZ2V0WFNEU3RyaW5nVHlwZSh4c2RTY2hlbWEpOwotICAgIGVsZW1lbnREZWNsLnNldFR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGVEZWZpbml0aW9uKTsgICAgCi0gICAgeHNkU2NoZW1hLmdldENvbnRlbnRzKCkuYWRkKGVsZW1lbnREZWNsKTsKLSAgICAKLSAgICB4c2RFbGVtZW50ID0gZWxlbWVudERlY2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bihTdHJpbmcgbmV3RWxlbWVudE5hbWUpIHsKLSAgCWVsZW1lbnROYW1lID0gbmV3RWxlbWVudE5hbWU7Ci0gIAlydW4oKTsKLSAgfQotICAKLSAgLyoKLSAgICogU3BlY2lmeSB3aGljaCBTY2hlbWEgdG8gdXNlIHdoZW4gY3JlYXRpbmcgdGhlIFR5cGUuCi0gICAqIENhbGwgdGhpcyBtZXRob2QgYmVmb3JlIGNhbGxpbmcgcnVuKCkuICBPdGhlcndpc2UgaXQgd2lsbCB1c2UgdGhlIGZpcnN0Ci0gICAqIFNjaGVtYSBpdCBmaW5kcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNjaGVtYShYU0RTY2hlbWEgc2NoZW1hKSB7Ci0gIAl0aGlzLnNjaGVtYSA9IHNjaGVtYTsKLSAgfQotICAKLSAgLyoKLSAgICogUmV0dXJuIHRoZSBTY2hlbWEgdXNlZCB0byBjcmVhdGUgdGhlIFR5cGUKLSAgICovCi0gIHB1YmxpYyBYU0RTY2hlbWEgZ2V0U2NoZW1hKCkgewotICAJaWYgKHNjaGVtYSA9PSBudWxsKSB7Ci0gIAkJcmV0dXJuIGdldFhTRFNjaGVtYSh0YXJnZXROYW1lc3BhY2UpOwotICAJfQotICAJZWxzZSB7Ci0gIAkJcmV0dXJuIHNjaGVtYTsKLSAgCX0KLSAgfQotICAKLSAgcHJpdmF0ZSBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBnZXRYU0RTdHJpbmdUeXBlKFhTRFNjaGVtYSBzY2hlbWEpCi0gIHsKLSAgICByZXR1cm4gc2NoZW1hLmdldFNjaGVtYUZvclNjaGVtYSgpLnJlc29sdmVTaW1wbGVUeXBlRGVmaW5pdGlvbigic3RyaW5nIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotICAKLSAgcHJpdmF0ZSBYU0RTY2hlbWEgZ2V0WFNEU2NoZW1hKFN0cmluZyB0YXJnZXROYW1lc3BhY2UpCi0gIHsKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hOwotICAgIAotICAgIC8vIERvIHdlIGhhdmUgYSBzY2hlbWEgYWxyZWFkeT8KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldFR5cGVzKCkuZ2V0U2NoZW1hcyh0YXJnZXROYW1lc3BhY2UpLml0ZXJhdG9yKCk7Ci0gICAgaWYgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICB4c2RTY2hlbWEgPSAoWFNEU2NoZW1hKWl0ZXJhdG9yLm5leHQoKTsgLy8gR2V0IHRoZSBmaXJzdCBvbmUuCi0gICAgICByZXR1cm4geHNkU2NoZW1hOwotICAgIH0KLSAgICBlbHNlCi0gICAgewkgICAgCi0gICAgICAvLyBDcmVhdGUgYSBuZXcgc2NoZW1hIGJlY2F1c2UgdGhlcmUncyBub25lLgotICAgICAgQWRkWFNEU2NoZW1hQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTRFNjaGVtYUNvbW1hbmQoZGVmaW5pdGlvbix0YXJnZXROYW1lc3BhY2UpOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICAgIHJldHVybiAoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KWNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKSkuZ2V0U2NoZW1hKCk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIFR5cGVzIGdldFR5cGVzKCkKLSAgewotICAgIC8vIFR5cGVzIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QgeWV0LgotICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKWRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgIHJldHVybiB0eXBlczsKLSAgICBlbHNlCi0gICAgewotICAgICAgQWRkVHlwZXNDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkVHlwZXNDb21tYW5kKGRlZmluaXRpb24pOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICAgIHJldHVybiAoVHlwZXMpY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgWFNERWxlbWVudERlY2xhcmF0aW9uIGdldFhTREVsZW1lbnQoKQotICB7Ci0JICByZXR1cm4geHNkRWxlbWVudDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNEU2NoZW1hQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RTY2hlbWFDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNzkxNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RTY2hlbWFDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkWFNEU2NoZW1hQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlOwotICAKLSAgcHVibGljIEFkZFhTRFNjaGVtYUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLnRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGRYU0RTY2hlbWFDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSB0YXJnZXROYW1lc3BhY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsgICAgCi0gICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotIAotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RTY2hlbWEoKTsKLSAgICB4c2RTY2hlbWEuc2V0U2NoZW1hRm9yU2NoZW1hUU5hbWVQcmVmaXgoInhzZCIpOyAvLyROT04tTkxTLTEkCi0gICAgeHNkU2NoZW1hLnNldFRhcmdldE5hbWVzcGFjZSh0YXJnZXROYW1lc3BhY2UpOwotICAgIC8vIENob29zZSB0aGUgcHJlZml4IENob29zZSB0aGUgcHJlZml4IHVzZWQgZm9yIHRoaXMgc2NoZW1hJ3MgbmFtZXNwYWNlIGFuZCB0aGUgc2NoZW1hIGZvciBzY2hlbWEncyBuYW1lc3BhY2UuCi0gICAgLy8gICAgCi0gICAgamF2YS51dGlsLk1hcCBxTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwID0geHNkU2NoZW1hLmdldFFOYW1lUHJlZml4VG9OYW1lc3BhY2VNYXAoKTsKLS8vICAgIHFOYW1lUHJlZml4VG9OYW1lc3BhY2VNYXAucHV0KCJwIiwgeHNkU2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICBxTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwLnB1dAotCSAgKHhzZFNjaGVtYS5nZXRTY2hlbWFGb3JTY2hlbWFRTmFtZVByZWZpeCgpLG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSk7Ci0gICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0U2NoZW1hKHhzZFNjaGVtYSk7Ci0gICAgICAgCi0gICAgLy8gVEJEIC0gQ2hlY2sgaWYgbXVsdGlwbGUgc2NoZW1hcyB3aXRoIHRoZSBzYW1lIHRhcmdldE5hbWVzcGFjZSBjYW4gY28tZXhpc3QuCi0gICAgVHlwZXMgdHlwZXMgPSBnZXRUeXBlcygpOwotICAgIHR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAKLSAgICBpZiAoZGVmaW5pdGlvbi5nZXRFVHlwZXMoKSA9PSBudWxsKSB7Ci0gICAgCWRlZmluaXRpb24uc2V0RVR5cGVzKHR5cGVzKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFR5cGVzIGdldFR5cGVzKCkKLSAgewotICAgIC8vIFR5cGVzIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgcmV0dXJuIHR5cGVzOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHR5cGVzID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVR5cGVzKCk7Ci0gICAgICAgIHR5cGVzLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgICAgIHJldHVybiB0eXBlczsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2Q3Y2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBYU0RUeXBlRGVmaW5pdGlvbiBpbiB0aGUgdGFyZ2V0TmFtZXNwYWNlLgotcHVibGljIGZpbmFsIGNsYXNzIEFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlOwotICBwcml2YXRlIFN0cmluZyB0eXBlTmFtZTsKLSAgcHJpdmF0ZSBYU0RTY2hlbWEgc2NoZW1hOwotICBwcml2YXRlIFhTRFR5cGVEZWZpbml0aW9uIHhzZFR5cGU7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0NvbXBsZXhUeXBlID0gdHJ1ZTsKLSAgCi0gIC8qKgotICAgKiBUT0RPOgotICAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIHByb2JsZW0gaGVyZS4uLi4gIFdoYXQgaWYgdGhlIGRlZmluaXRpb24gdGFyZ2V0bmFtZXNwYWNlIGlzIG51bGwuLi4uCi0gICAqLwotICBwdWJsaWMgQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLnRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lLCBib29sZWFuIGlzQ29tcGxleFR5cGUpCi0gIHsKLSAgCXRoaXMoZGVmaW5pdGlvbiwgdHlwZU5hbWUpOwotICAJdGhpcy5pc0NvbXBsZXhUeXBlID0gaXNDb21wbGV4VHlwZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBkZXByZWNhdGVkCi0gICAqIFVzZSBBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgdHlwZU5hbWUpCi0gICAqLwotICBwdWJsaWMgQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kCi0gICAgKERlZmluaXRpb24gZGVmaW5pdGlvbiwgCi0gICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsCi0gICAgIFN0cmluZyB0eXBlTmFtZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSB0YXJnZXROYW1lc3BhY2U7Ci0gICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IGdldFNjaGVtYSgpOwotICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWY7Ci0gICAgCi0gICAgaWYgKGlzQ29tcGxleFR5cGUpIHsKLSAgICAJdHlwZURlZiA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbigpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAJdHlwZURlZiA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKCk7Ci0gICAgfQotICAgIAotICAgIHR5cGVEZWYuc2V0TmFtZSh0eXBlTmFtZSk7Ci0gICAgeHNkU2NoZW1hLmdldENvbnRlbnRzKCkuYWRkKHR5cGVEZWYpOwotICAgIAotICAgIHhzZFR5cGUgPSB0eXBlRGVmOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oU3RyaW5nIG5ld1R5cGVOYW1lKSB7Ci0gIAl0eXBlTmFtZSA9IG5ld1R5cGVOYW1lOwotICAJcnVuKCk7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFNwZWNpZml5IGlmIHdlIHNob3VsZCBjcmVhdGUgYSBjb21wbGV4IG9yIHNpbXBsZSB0eXBlLiAgVGhpcyBzaG91bGQgc2hvdWxkIGJlCi0gICAqIGNhbGxlZCBiZWZvcmUgcnVuKCkuCi0gICAqIE92ZXJyaWRlcyB0aGUgdmFsdWUgc2V0IHdoZW4gdGhlIGNvbnN0cnVjdG9yCi0gICAqIEFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSwgYm9vbGVhbiBpc0NvbXBsZXhUeXBlKQotICAgKiBpcyB1c2VkLgotICAgKi8KLSAgcHVibGljIHZvaWQgaXNDb21wbGV4VHlwZShib29sZWFuIGlzQ29tcGxleFR5cGUpIHsKLSAgCXRoaXMuaXNDb21wbGV4VHlwZSA9IGlzQ29tcGxleFR5cGU7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFNwZWNpZnkgd2hpY2ggU2NoZW1hIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHRoZSBUeXBlLgotICAgKiBDYWxsIHRoaXMgbWV0aG9kIGJlZm9yZSBjYWxsaW5nIHJ1bigpLiAgT3RoZXJ3aXNlIGl0IHdpbGwgdXNlIHRoZSBmaXJzdAotICAgKiBTY2hlbWEgaXQgZmluZHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoWFNEU2NoZW1hIHNjaGVtYSkgewotICAJdGhpcy5zY2hlbWEgPSBzY2hlbWE7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFJldHVybiB0aGUgU2NoZW1hIHVzZWQgdG8gY3JlYXRlIHRoZSBUeXBlCi0gICAqLwotICBwdWJsaWMgWFNEU2NoZW1hIGdldFNjaGVtYSgpIHsKLSAgCWlmIChzY2hlbWEgPT0gbnVsbCkgewotICAJCXJldHVybiBnZXRYU0RTY2hlbWEodGFyZ2V0TmFtZXNwYWNlKTsKLSAgCX0KLSAgCWVsc2UgewotICAJCXJldHVybiBzY2hlbWE7Ci0gIAl9Ci0gIH0KLQotICBwcml2YXRlIFhTRFNjaGVtYSBnZXRYU0RTY2hlbWEoU3RyaW5nIHRhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWE7Ci0gICAgCi0gICAgLy8gRG8gd2UgaGF2ZSBhIHNjaGVtYSBhbHJlYWR5PwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0VHlwZXMoKS5nZXRTY2hlbWFzKHRhcmdldE5hbWVzcGFjZSkuaXRlcmF0b3IoKTsKLSAgICBpZiAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHhzZFNjaGVtYSA9IChYU0RTY2hlbWEpaXRlcmF0b3IubmV4dCgpOyAvLyBHZXQgdGhlIGZpcnN0IG9uZS4KLSAgICAgIHJldHVybiB4c2RTY2hlbWE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7CSAgICAKLSAgICAgIC8vIENyZWF0ZSBhIG5ldyBzY2hlbWEgYmVjYXVzZSB0aGVyZSdzIG5vbmUuCi0gICAgICBBZGRYU0RTY2hlbWFDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNEU2NoZW1hQ29tbWFuZChkZWZpbml0aW9uLHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgICAgcmV0dXJuICgoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpKS5nZXRTY2hlbWEoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgVHlwZXMgZ2V0VHlwZXMoKQotICB7Ci0gICAgLy8gVHlwZXMgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdCB5ZXQuCi0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgcmV0dXJuIHR5cGVzOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBBZGRUeXBlc0NvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRUeXBlc0NvbW1hbmQoZGVmaW5pdGlvbik7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgICAgcmV0dXJuIChUeXBlcyljb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiBnZXRYU0RFbGVtZW50KCkKLSAgewotCSAgcmV0dXJuIHhzZFR5cGU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL1dTRExFbGVtZW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9XU0RMRWxlbWVudENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxODA1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL1dTRExFbGVtZW50Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHVibGljIGFic3RyYWN0IFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJ1bigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL0FkZHJlc3NQb3J0T3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9BZGRyZXNzUG9ydE9wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiOGZjYzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL0FkZHJlc3NQb3J0T3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb250ZW50Z2VuZXJhdG9yLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJhc2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLlBvcnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlOwotCi1wdWJsaWMgY2xhc3MgQWRkcmVzc1BvcnRPcHRpb25zUGFnZSBpbXBsZW1lbnRzIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSwgTW9kaWZ5TGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIFRleHQgYWRkcmVzc0ZpZWxkOwotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGNvbnRyb2w7Ci0gIHByb3RlY3RlZCBQb3J0R2VuZXJhdG9yIGdlbmVyYXRvcjsKLSAgcHJvdGVjdGVkIFdpemFyZFBhZ2Ugd2l6YXJkUGFnZTsKLQotICBwdWJsaWMgdm9pZCBpbml0KEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yKXsKLQkgIGlmIChnZW5lcmF0b3IgaW5zdGFuY2VvZiBQb3J0R2VuZXJhdG9yKSB7Ci0JCSAgdGhpcy5nZW5lcmF0b3IgPSAoUG9ydEdlbmVyYXRvcikgZ2VuZXJhdG9yOwkgIAotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXaXphcmRQYWdlKFdpemFyZFBhZ2Ugd2l6YXJkUGFnZSkgewotCSAgdGhpcy53aXphcmRQYWdlID0gd2l6YXJkUGFnZTsKLSAgfQotCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgY29udHJvbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgY29udHJvbC5zZXRMYXlvdXQobGF5b3V0KTsKLSAgICBjb250cm9sLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0gICAgTGFiZWwgc2VwYXJhdG9yID0gbmV3IExhYmVsKGNvbnRyb2wsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCk7Ci0gICAgR3JpZERhdGEgZ2Q9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBMYWJlbCBhZGRyZXNzTGFiZWwgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULk5PTkUpOwotICAgIGFkZHJlc3NMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9BRERSRVNTICsgIjoiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZHJlc3NGaWVsZCA9IG5ldyBUZXh0KGNvbnRyb2wsIFNXVC5CT1JERVIpOwotICAgIGFkZHJlc3NGaWVsZC5zZXRUZXh0KENvbnRlbnRHZW5lcmF0b3IuQUREUkVTU19MT0NBVElPTik7Ci0gICAgYWRkcmVzc0ZpZWxkLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotICAgIGFkZHJlc3NGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih0aGlzKTsKLQotICAgIGdlbmVyYXRvci5zZXRBZGRyZXNzTG9jYXRpb24oYWRkcmVzc0ZpZWxkLmdldFRleHQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc092ZXJ3cml0ZUFwcGxpY2FibGUoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKQotICB7Ci0gICAgZ2VuZXJhdG9yLnNldEFkZHJlc3NMb2NhdGlvbihhZGRyZXNzRmllbGQuZ2V0VGV4dCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE9wdGlvbnNPbkdlbmVyYXRvcigpIHsKLSAgfQotICAKLSAgcHVibGljIENvbXBvc2l0ZSBnZXRDb250cm9sKCkgewotCSAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvQmFzZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL0Jhc2VDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEwNTYyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvQmFzZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklNZXNzYWdlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmFzZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzLkNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgaW1wbGVtZW50cyBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UsIFNlbGVjdGlvbkxpc3RlbmVyLCBJTWVzc2FnZVByb3ZpZGVyIHsKLQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNvbnRyb2w7Ci0JcHJvdGVjdGVkIEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yOwotCXByb3RlY3RlZCBXaXphcmRQYWdlIHdpemFyZFBhZ2U7Ci0JcHJvdGVjdGVkIElGaWxlIHRhcmdldEZpbGU7Ci0JCi0JcHVibGljIGFic3RyYWN0IHZvaWQgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCk7Ci0JCi0JcHVibGljIENvbXBvc2l0ZSBnZXRDb250cm9sKCkgewotCQlyZXR1cm4gY29udHJvbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KEJhc2VHZW5lcmF0b3IgYmFzZUdlbmVyYXRvcikgewotCQlnZW5lcmF0b3IgPSBiYXNlR2VuZXJhdG9yOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlQXBwbGljYWJsZSgpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2l6YXJkUGFnZShXaXphcmRQYWdlIHdpemFyZFBhZ2UpIHsKLQkJdGhpcy53aXphcmRQYWdlID0gd2l6YXJkUGFnZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotCQlzZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VGFyZ2V0SUZpbGUoSUZpbGUgdGFyZ2V0RmlsZSkgewotCQl0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOwotCX0KLQkKLSAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0gICAgCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZVR5cGUoKSB7Ci0gICAgCXJldHVybiBJTWVzc2FnZVByb3ZpZGVyLk5PTkU7Ci0gICAgfQotICAgIAotCXB1YmxpYyBTdHJpbmcgZ2V0V1NJUHJlZmVyZW5jZXMoKSB7Ci0JCUlQcm9qZWN0IHRhcmdldFByb2plY3QgPSB0YXJnZXRGaWxlLmdldFByb2plY3QoKTsKLQkJUGVyc2lzdGVudFdTSUNvbnRleHQgV1NJU1NCY29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLQotCQlpZiAoV1NJU1NCY29udGV4dC5wcm9qZWN0U3RvcE5vbldTSUNvbXBsaWFuY2VzKHRhcmdldFByb2plY3QpKSB7Ci0JCQlyZXR1cm4gKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0JCX0gCi0JCWVsc2UgaWYgKFdTSVNTQmNvbnRleHQucHJvamVjdFdhcm5Ob25XU0lDb21wbGlhbmNlcyh0YXJnZXRQcm9qZWN0KSkgewotCQkJcmV0dXJuIChQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kpOwotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIChQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL0h0dHBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9IdHRwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNzViN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL0h0dHBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmdlbmVyYXRvci5IVFRQQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIEh0dHBCaW5kaW5nT3B0aW9uc1BhZ2UgZXh0ZW5kcyBCYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIAotewotICBwcm90ZWN0ZWQgQnV0dG9uIGdldEJ1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBwb3N0QnV0dG9uOwotICAKLSAgcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBjb250cm9sID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBjb250cm9sLnNldExheW91dChsYXlvdXQpOwotCi0gICAgTGFiZWwgc2VwYXJhdG9yID0gbmV3IExhYmVsKGNvbnRyb2wsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCk7Ci0gICAgR3JpZERhdGEgZ2Q9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgIAotICAgIHNlcGFyYXRvci5zZXRMYXlvdXREYXRhKGdkKTsKLQotICAgIExhYmVsIG9wdGlvbnNIZWFkaW5nID0gbmV3IExhYmVsKGNvbnRyb2wsIFNXVC5OT05FKTsKLSAgICBvcHRpb25zSGVhZGluZy5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9IVFRQX0JJTkRJTkdfT1BUSU9OUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGdldEJ1dHRvbiA9IG5ldyBCdXR0b24oY29udHJvbCwgU1dULlJBRElPKTsKLSAgICBnZXRCdXR0b24uc2V0VGV4dCgiSFRUUCBHRVQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGdldEJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0KLSAgICBwb3N0QnV0dG9uID0gbmV3IEJ1dHRvbihjb250cm9sLCBTV1QuUkFESU8pOwotICAgIHBvc3RCdXR0b24uc2V0VGV4dCgiSFRUUCBQT1NUIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIGlmIChnZW5lcmF0b3IuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2VuZXJhdG9yLmdldERlZmluaXRpb24oKTsKLSAgICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGdlbmVyYXRvci5nZXROYW1lKCkpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGRlZmluaXRpb24uZ2V0QmluZGluZyhxbmFtZSk7Ci0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IGVlTGlzdCA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBpZiAoZWVMaXN0LnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWVMaXN0LmdldCgwKTsKLSAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZWUpOwotICAgICAgICAgIFN0cmluZyB2ZXJiID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInZlcmIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIGlmICgiUE9TVCIuZXF1YWxzKHZlcmIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgewotICAgICAgICAgICAgZ2V0QnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgICAgICBwb3N0QnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwb3N0QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIGdldEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBzZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLQkKLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE9wdGlvbnNPbkdlbmVyYXRvcigpIHsKLQkgIGlmIChnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpIGluc3RhbmNlb2YgSFRUUENvbnRlbnRHZW5lcmF0b3IpIHsKLQkJICBIVFRQQ29udGVudEdlbmVyYXRvciBodHRwR2VuZXJhdG9yID0gKEhUVFBDb250ZW50R2VuZXJhdG9yKSBnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCi0JCSAgaWYgKHBvc3RCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgaHR0cEdlbmVyYXRvci5zZXRWZXJiKEhUVFBDb250ZW50R2VuZXJhdG9yLlZFUkJfUE9TVCk7Ci0JCSAgfQkgIAotCQkgIGVsc2UgaWYgKGdldEJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBodHRwR2VuZXJhdG9yLnNldFZlcmIoSFRUUENvbnRlbnRHZW5lcmF0b3IuVkVSQl9HRVQpOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbnRlbnRnZW5lcmF0b3IvdWkvSVNvYXBTdHlsZUluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9JU29hcFN0eWxlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjdhNWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9JU29hcFN0eWxlSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWk7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNvYXBTdHlsZUluZm8gewotCXB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRMaXRlcmFsUGF0dGVybigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL1NvYXBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29udGVudGdlbmVyYXRvci91aS9Tb2FwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYzE2MTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb250ZW50Z2VuZXJhdG9yL3VpL1NvYXBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSU1lc3NhZ2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5TZXJ2aWNlUG9saWN5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5XU0RMTmV3RmlsZU9wdGlvbnNQYWdlOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNvYXBCaW5kaW5nT3B0aW9uc1BhZ2UgZXh0ZW5kcyBCYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGltcGxlbWVudHMgSVNvYXBTdHlsZUluZm8KLXsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBkb2NMaXRlcmFsOwotICBwcm90ZWN0ZWQgQnV0dG9uIHJwY0xpdGVyYWw7Ci0gIHByb3RlY3RlZCBCdXR0b24gcnBjRW5jb2RlZDsKLQotICBwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIGNvbnRyb2wgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGNvbnRyb2wuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICBMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULlNFUEFSQVRPUiB8IFNXVC5IT1JJWk9OVEFMKTsKLSAgICBHcmlkRGF0YSBnZD0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIHNlcGFyYXRvci5zZXRMYXlvdXREYXRhKGdkKTsKLQotICAgIExhYmVsIG9wdGlvbnNIZWFkaW5nID0gbmV3IExhYmVsKGNvbnRyb2wsIFNXVC5OT05FKTsKLSAgICBvcHRpb25zSGVhZGluZy5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9TT0FQX0JJTkRJTkdfT1BUSU9OUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGRvY0xpdGVyYWwgPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgZG9jTGl0ZXJhbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SQURJT19ET0NVTUVOVF9MSVRFUkFMKTsgLy8kTk9OLU5MUy0xJAotICAgIGRvY0xpdGVyYWwuc2V0U2VsZWN0aW9uKHRydWUpOwotCi0gICAgcnBjTGl0ZXJhbCA9IG5ldyBCdXR0b24oY29udHJvbCwgU1dULlJBRElPKTsKLSAgICBycGNMaXRlcmFsLnNldFRleHQoTWVzc2FnZXMuX1VJX1JBRElPX1JQQ19MSVRFUkFMKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHJwY0VuY29kZWQgPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgcnBjRW5jb2RlZC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SQURJT19SUENfRU5DT0RFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGlmIChnZW5lcmF0b3IuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2VuZXJhdG9yLmdldERlZmluaXRpb24oKTsKLSAgICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGdlbmVyYXRvci5nZXROYW1lKCkpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGRlZmluaXRpb24uZ2V0QmluZGluZyhxbmFtZSk7Ci0KLSAgICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgZWVMaXN0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIGlmIChlZUxpc3Quc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBlZUxpc3QuZ2V0KDApOwotCi0gICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGVlKTsKLSAgICAgICAgICBTdHJpbmcgc3R5bGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgic3R5bGUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIAotICAgICAgICAgIGlmICgicnBjIi5lcXVhbHMoc3R5bGUpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVHJ5IHRvIGRldGVybWluZSBpZiBpdCdzIFJQQyBMaXRlcmFsIG9yIFJQQyBFbmNvZGVkCi0gICAgICAgICAgCVN0cmluZyB1c2UgPSAiZW5jb2RlZCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAJTGlzdCBvcGVyYXRpb25zID0gYmluZGluZy5nZXRFQmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICAgICAgICAJaWYgKG9wZXJhdGlvbnMuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJZWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgCQlCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLmdldCgwKTsKLSAgICAgICAgICAJCWlmIChvcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpICE9IG51bGwgJiYgb3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJCU9iamVjdCBvYmplY3QgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5nZXQoMCk7Ci0gICAgICAgICAgCQkJZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChvYmplY3QpOwotICAgICAgICAgIAkJfQotICAgICAgICAgIAkJZWxzZSBpZiAob3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCAmJiBvcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJCU9iamVjdCBvYmplY3QgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuZ2V0KDApOwotICAgICAgICAgIAkJCWVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAJCX0KLSAgICAgICAgICAJCWVsc2UgaWYgKG9wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQlCaW5kaW5nRmF1bHQgZmF1bHQgPSAoQmluZGluZ0ZhdWx0KSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKS5nZXQoMCk7Ci0gICAgICAgICAgCQkJTGlzdCBmYXVsdEVFID0gZmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgCQkJCi0gICAgICAgICAgCQkJaWYgKGZhdWx0RUUuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJCQllbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGZhdWx0RUUuZ2V0KDApKTsKLSAgICAgICAgICAJCQl9Ci0gICAgICAgICAgCQl9Ci0gICAgICAgICAgCQkKLSAgICAgICAgICAJCWlmIChlbGVtZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAJCQl1c2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgidXNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAJCX0KLSAgICAgICAgICAJfQotICAgICAgICAgIAkKLSAgICAgICAgICAJaWYgKHVzZSAhPSBudWxsICYmICJsaXRlcmFsIi5lcXVhbHModXNlKSkgeyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCQlkb2NMaXRlcmFsLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgICAgCQlycGNMaXRlcmFsLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICAgICAgICAJCXJwY0VuY29kZWQuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAJfQotICAgICAgICAgIAllbHNlIHsgICAgICAgICAgCQotICAgICAgICAgIAkJZG9jTGl0ZXJhbC5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgIAkJcnBjTGl0ZXJhbC5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgIAkJcnBjRW5jb2RlZC5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgCX0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBkb2NMaXRlcmFsLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHJwY0xpdGVyYWwuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgcnBjRW5jb2RlZC5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBzZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLQotICAgIHJldHVybiBjb250cm9sOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCkgewotCSAgaWYgKGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCkgaW5zdGFuY2VvZiBTT0FQQ29udGVudEdlbmVyYXRvcikgewotCQkgIFNPQVBDb250ZW50R2VuZXJhdG9yIHNvYXBHZW5lcmF0b3IgPSAoU09BUENvbnRlbnRHZW5lcmF0b3IpIGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCk7Ci0JCSAgaWYgKGRvY0xpdGVyYWwuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRTdHlsZShTT0FQQ29udGVudEdlbmVyYXRvci5TVFlMRV9ET0NVTUVOVCk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9MSVRFUkFMKTsKLQkJICB9CSAgCi0JCSAgZWxzZSBpZiAocnBjTGl0ZXJhbC5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBzb2FwR2VuZXJhdG9yLnNldFN0eWxlKFNPQVBDb250ZW50R2VuZXJhdG9yLlNUWUxFX1JQQyk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9MSVRFUkFMKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAocnBjRW5jb2RlZC5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBzb2FwR2VuZXJhdG9yLnNldFN0eWxlKFNPQVBDb250ZW50R2VuZXJhdG9yLlNUWUxFX1JQQyk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9FTkNPREVEKTsKLQkJICB9Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0JCXNldE9wdGlvbnNPbkdlbmVyYXRvcigpOwotCi0JCWlmICh3aXphcmRQYWdlICE9IG51bGwpIHsKLQkJCWJvb2xlYW4gaXNDb21wbGV0ZSA9IHdpemFyZFBhZ2UuaXNQYWdlQ29tcGxldGUoKTsKLQkJCWlmICh3aXphcmRQYWdlIGluc3RhbmNlb2YgV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgewotCQkJCS8vIEEgc2VsZWN0aW9uIG1hZGUgYnkgb25lIG9mIHRoZXNlIHdpZGdldHMgbWF5IGltcGFjdCB0aGUKLQkJCQkvLyBjb21wbGV0bmVzcyBvZiBhIFdpemFyZC4KLQkJCQlpc0NvbXBsZXRlID0gKChXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKSB3aXphcmRQYWdlKQotCQkJCQkJLnZhbGlkYXRlUGFnZSgpOwotCQkJfQotCQkJd2l6YXJkUGFnZS5zZXRQYWdlQ29tcGxldGUoaXNDb21wbGV0ZSk7Ci0JCX0KLQl9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewotCQlTdHJpbmcgbWVzc2FnZSA9IG51bGw7Ci0JCWlmIChycGNFbmNvZGVkICE9IG51bGwgJiYgcnBjRW5jb2RlZC5nZXRTZWxlY3Rpb24oKSkgewotCQkJaWYgKHdpemFyZFBhZ2UgaW5zdGFuY2VvZiBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKSB7Ci0JCQkJSVByb2plY3QgcHJvamVjdCA9ICgoV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgd2l6YXJkUGFnZSkKLQkJCQkJCS5nZXRQcm9qZWN0KCk7Ci0JCQkJSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gKChXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKSB3aXphcmRQYWdlKQotCQkJCQkJLmdldFNlcnZpY2VQb2xpY3koKTsKLQkJCQlpbnQgbWVzc2FnZVR5cGUgPSBTZXJ2aWNlUG9saWN5SGVscGVyLmdldE1lc3NhZ2VTZXZlcml0eSgKLQkJCQkJCXByb2plY3QsIHBvbGljeSk7Ci0JCQkJaWYgKG1lc3NhZ2VUeXBlID09IElNZXNzYWdlUHJvdmlkZXIuRVJST1IpIHsKLQkJCQkJbWVzc2FnZSA9IE1lc3NhZ2VzLl9FUlJPUl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkc7Ci0JCQkJfSBlbHNlIGlmIChtZXNzYWdlVHlwZSA9PSBJTWVzc2FnZVByb3ZpZGVyLldBUk5JTkcpIHsKLQkJCQkJbWVzc2FnZSA9IE1lc3NhZ2VzLl9XQVJOX1dTSV9DT01QTElBTkNFX1JQQ19FTkNPRElORzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLQkJCW1lc3NhZ2UgPSAiIjsgLy8kTk9OLU5MUy0xJCAKLQkJcmV0dXJuIG1lc3NhZ2U7Ci0JfQotCi0JcHVibGljIGludCBnZXRNZXNzYWdlVHlwZSgpIHsKLQkJaW50IG1lc3NhZ2VUeXBlID0gSU1lc3NhZ2VQcm92aWRlci5OT05FOwotCi0JCWlmIChycGNFbmNvZGVkICE9IG51bGwgJiYgcnBjRW5jb2RlZC5nZXRTZWxlY3Rpb24oKSkgewotCQkJaWYgKHdpemFyZFBhZ2UgaW5zdGFuY2VvZiBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKSB7Ci0JCQkJSVByb2plY3QgcHJvamVjdCA9ICgoV1NETE5ld0ZpbGVPcHRpb25zUGFnZSkgd2l6YXJkUGFnZSkKLQkJCQkJCS5nZXRQcm9qZWN0KCk7Ci0JCQkJSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gKChXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKSB3aXphcmRQYWdlKQotCQkJCQkJLmdldFNlcnZpY2VQb2xpY3koKTsKLQkJCQltZXNzYWdlVHlwZSA9IFNlcnZpY2VQb2xpY3lIZWxwZXIuZ2V0TWVzc2FnZVNldmVyaXR5KHByb2plY3QsCi0JCQkJCQlwb2xpY3kpOwotCQkJfQotCQl9Ci0JCXJldHVybiBtZXNzYWdlVHlwZTsKLQl9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0RvY3VtZW50TGl0ZXJhbFBhdHRlcm4oKSB7Ci0JICByZXR1cm4gZG9jTGl0ZXJhbC5nZXRTZWxlY3Rpb24oKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9FZGl0TmFtZXNwYWNlc0RpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL0VkaXROYW1lc3BhY2VzRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNGViYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL0VkaXROYW1lc3BhY2VzRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3M7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLm5zZWRpdC5Db21tb25FZGl0TmFtZXNwYWNlc1RhcmdldEZpZWxkRGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgRWRpdE5hbWVzcGFjZXNEaWFsb2cgZXh0ZW5kcyBEaWFsb2cKLXsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBva0J1dHRvbjsKLSAgcHJvdGVjdGVkIFN0cmluZyB0aXRsZTsKLSAgcHJvdGVjdGVkIFN0cmluZyB0YXJnZXROYW1lc3BhY2U7Ci0gIHByb3RlY3RlZCBMaXN0IG5hbWVzcGFjZUluZm9MaXN0OwotICBwcm90ZWN0ZWQgQ29tbW9uRWRpdE5hbWVzcGFjZXNUYXJnZXRGaWVsZERpYWxvZyBlZGl0V1NETE5hbWVzcGFjZXNDb250cm9sOwotICBwcm90ZWN0ZWQgSVBhdGggcmVzb3VyY2VMb2NhdGlvbjsKLSAgLy8gIHByb3RlY3RlZCBMYWJlbCBlcnJvck1lc3NhZ2VMYWJlbDsKLSAgLy8gIHByb3RlY3RlZCBTdHJpbmcgZXJyb3JNZXNzYWdlOyAgCi0KLSAgLy9wcm90ZWN0ZWQgTGFiZWwgZXJyb3JNZXNzYWdlTGFiZWw7Ci0KLSAgcHVibGljIEVkaXROYW1lc3BhY2VzRGlhbG9nKFNoZWxsIHBhcmVudFNoZWxsLCBJUGF0aCByZXNvdXJjZUxvY2F0aW9uLCBTdHJpbmcgdGl0bGUsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIExpc3QgbmFtZXNwYWNlTGlzdCkKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsKTsKLSAgICB0aGlzLnJlc291cmNlTG9jYXRpb24gPSByZXNvdXJjZUxvY2F0aW9uOwotICAgIHNldFNoZWxsU3R5bGUoZ2V0U2hlbGxTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0gICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICAgIHRoaXMudGFyZ2V0TmFtZXNwYWNlID0gdGFyZ2V0TmFtZXNwYWNlOwotICAgIHRoaXMubmFtZXNwYWNlSW5mb0xpc3QgPSBuYW1lc3BhY2VMaXN0OwotICB9Ci0KLSAgcHVibGljIGludCBjcmVhdGVBbmRPcGVuKCkKLSAgewotICAgIGNyZWF0ZSgpOwotICAgIGdldFNoZWxsKCkuc2V0VGV4dCh0aXRsZSk7Ci0gICAgc2V0QmxvY2tPbk9wZW4odHJ1ZSk7Ci0gICAgcmV0dXJuIG9wZW4oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb250cm9sIGNvbnRyb2wgPSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOwotICAgIHVwZGF0ZUVycm9yTWVzc2FnZSgpOwotICAgIHJldHVybiBjb250cm9sOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgb2tCdXR0b24gPSBjcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLk9LX0lELCBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLCB0cnVlKTsKLSAgICBjcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCwgSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwsIGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBkaWFsb2dBcmVhID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotICAgIGVkaXRXU0RMTmFtZXNwYWNlc0NvbnRyb2wgPSBuZXcgQ29tbW9uRWRpdE5hbWVzcGFjZXNUYXJnZXRGaWVsZERpYWxvZyhkaWFsb2dBcmVhLCByZXNvdXJjZUxvY2F0aW9uKTsKLSAgICBlZGl0V1NETE5hbWVzcGFjZXNDb250cm9sLnNldE5hbWVzcGFjZUluZm9MaXN0KG5hbWVzcGFjZUluZm9MaXN0KTsKLSAgICBlZGl0V1NETE5hbWVzcGFjZXNDb250cm9sLnNldFRhcmdldE5hbWVzcGFjZSh0YXJnZXROYW1lc3BhY2UpOwotCi0gICAgcmV0dXJuIGRpYWxvZ0FyZWE7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0gIHsKLSAgICB1cGRhdGVFcnJvck1lc3NhZ2UoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgY29tcHV0ZUVycm9yTWVzc2FnZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlRXJyb3JNZXNzYWdlKCkKLSAgewotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBudWxsOwotICAgIC8qCi0gICAgU3RyaW5nIG5hbWUgPSBuYW1lRmllbGQuZ2V0VGV4dCgpLnRyaW0oKTsKLSAgICBpZiAobmFtZS5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgZXJyb3JNZXNzYWdlID0gY29tcHV0ZUVycm9yTWVzc2FnZShuYW1lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIH0qLwotCi0gICAgLy9lcnJvck1lc3NhZ2VMYWJlbC5zZXRUZXh0KGVycm9yTWVzc2FnZSAhPSBudWxsID8gZXJyb3JNZXNzYWdlIDogIiIpOwotICAgIG9rQnV0dG9uLnNldEVuYWJsZWQoZXJyb3JNZXNzYWdlID09IG51bGwpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYnV0dG9uUHJlc3NlZChpbnQgYnV0dG9uSWQpCi0gIHsKLSAgICBpZiAoYnV0dG9uSWQgPT0gSURpYWxvZ0NvbnN0YW50cy5PS19JRCkKLSAgICB7Ci0gICAgICB0YXJnZXROYW1lc3BhY2UgPSBlZGl0V1NETE5hbWVzcGFjZXNDb250cm9sLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICBzdXBlci5idXR0b25QcmVzc2VkKGJ1dHRvbklkKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldE5hbWVzcGFjZUluZm9MaXN0KCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2VJbmZvTGlzdDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiB0YXJnZXROYW1lc3BhY2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9HZW5lcmF0ZUJpbmRpbmdPblNhdmVEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9HZW5lcmF0ZUJpbmRpbmdPblNhdmVEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBjZWFmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvR2VuZXJhdGVCaW5kaW5nT25TYXZlRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9nczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLQotcHVibGljIGNsYXNzIEdlbmVyYXRlQmluZGluZ09uU2F2ZURpYWxvZyBleHRlbmRzIE1lc3NhZ2VEaWFsb2cgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciB7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRpYWxvZ1RpdGxlID0gTWVzc2FnZXMuX1VJX1JFR0VOX0JJTkRJTkRTX09OX1NBVkU7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGlhbG9nTWVzc2FnZSA9IE1lc3NhZ2VzLl9VSV9SRUdFTl9CSU5ESU5HU19PTl9TQVZFX1FVRVNUSU9OTUFSSzsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIGJ1dHRvbnMgPSBuZXcgU3RyaW5nW117TWVzc2FnZXMuX1VJX1lFU19MQUJFTCwgTWVzc2FnZXMuX1VJX05PX0xBQkVMLCBNZXNzYWdlcy5fVUlfQ0FOQ0VMX0xBQkVMfTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkKLQlwcml2YXRlIEJ1dHRvbiByZW1lbWJlckRlY2lzaW9uQm94OwotCXByaXZhdGUgYm9vbGVhbiByZW1lbWJlckRlY2lzaW9uID0gZmFsc2U7Ci0JCi0JcHVibGljIEdlbmVyYXRlQmluZGluZ09uU2F2ZURpYWxvZyhTaGVsbCBzaGVsbCkgewotCQlzdXBlcihzaGVsbCwgZGlhbG9nVGl0bGUsIG51bGwsIGRpYWxvZ01lc3NhZ2UsIE1lc3NhZ2VEaWFsb2cuUVVFU1RJT04sIGJ1dHRvbnMsIDApOwotCX0KLQkKLQkKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDdXN0b21BcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIGNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMjsKLQkJY29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJY29tcC5zZXREYXRhKG5ldyBHcmlkRGF0YSgpKTsKLQkJCi0JCS8vIFNwYWNlcgotCQluZXcgTGFiZWwoY29tcCwgU1dULk5PTkUpOwotCQluZXcgTGFiZWwoY29tcCwgU1dULk5PTkUpOwotCQkKLQkJcmVtZW1iZXJEZWNpc2lvbkJveCA9IG5ldyBCdXR0b24oY29tcCwgU1dULkNIRUNLKTsKLQkJcmVtZW1iZXJEZWNpc2lvbkJveC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SRU1FTUJFUl9NWV9ERUNJU0lPTl9MQUJFTCk7Ci0JCXJlbWVtYmVyRGVjaXNpb25Cb3guYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0KLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHN0b3JlUHJvbXB0UHJlZmVyZW5jZShpbnQgc3d0VmFsdWUpIHsKLQkJLy8gU3RvcmUgdGhlIG5ldyBwcmVmZXJlbmNlIGZvciBkaXNwbGF5aW5nIHRoaXMgZGlhbG9nLgotCQlpZiAocmVtZW1iZXJEZWNpc2lvbikgewotCQkJV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9QUk9NUFRfUkVHRU5fQklORElOR19PTl9TQVZFLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCQlTdHJpbmcgZ2VuZXJhdGVJRCA9IE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfQVVUT19SRUdFTkVSQVRFX0JJTkRJTkc7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChzd3RWYWx1ZSA9PSBTV1QuWUVTKSB7Ci0JCQkJV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoZ2VuZXJhdGVJRCwgdHJ1ZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChzd3RWYWx1ZSA9PSBTV1QuTk8pIHsKLQkJCQlXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShnZW5lcmF0ZUlELCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIGludCBvcGVuKCkgewotCQlpbnQgclZhbHVlID0gc3VwZXIub3BlbigpOwotCQkKLQkJaWYgKHJWYWx1ZSA9PTApIHsKLQkJCXN0b3JlUHJvbXB0UHJlZmVyZW5jZShTV1QuWUVTKTsKLQkJCXJldHVybiBTV1QuWUVTOwotCQl9Ci0JCWVsc2UgaWYgKHJWYWx1ZSA9PSAxKSB7Ci0JCQlzdG9yZVByb21wdFByZWZlcmVuY2UoU1dULk5PKTsKLQkJCXJldHVybiBTV1QuTk87Ci0JCX0KLQkJZWxzZSBpZiAoclZhbHVlID09IDIpIHsKLQkJCXN0b3JlUHJvbXB0UHJlZmVyZW5jZShTV1QuQ0FOQ0VMKTsKLQkJCXJldHVybiBTV1QuQ0FOQ0VMOwotCQl9Ci0JCQotCQlyZXR1cm4gclZhbHVlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCWlmIChlLndpZGdldCA9PSByZW1lbWJlckRlY2lzaW9uQm94KSB7Ci0JCQlyZW1lbWJlckRlY2lzaW9uID0gcmVtZW1iZXJEZWNpc2lvbkJveC5nZXRTZWxlY3Rpb24oKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkge30KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9OZXdDb21wb25lbnREaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9OZXdDb21wb25lbnREaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU4Njg3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvTmV3Q29tcG9uZW50RGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3M7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLS8qCi0gKiBUT0RPOiBybWFoOiBsb29rIGF0IHJlbW92aW5nIHRoaXMgY2xhc3MuICBEb2Vzbid0IGxvb2sgbGlrZSBpdCdzIHVzZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBOZXdDb21wb25lbnREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgaW1wbGVtZW50cyBNb2RpZnlMaXN0ZW5lcgotewotICBwcm90ZWN0ZWQgVGV4dCBuYW1lRmllbGQ7IAotICBwcm90ZWN0ZWQgQnV0dG9uIG9rQnV0dG9uOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIFN0cmluZyB0aXRsZTsKLSAgcHJvdGVjdGVkIExhYmVsIGVycm9yTWVzc2FnZUxhYmVsOwotICBwcm90ZWN0ZWQgTGlzdCB1c2VkTmFtZXM7Ci0KLSAgcHVibGljIE5ld0NvbXBvbmVudERpYWxvZyhTaGVsbCBwYXJlbnRTaGVsbCwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgZGVmYXVsdE5hbWUpIAotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwpOwotICAgIHNldFNoZWxsU3R5bGUoZ2V0U2hlbGxTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0gICAgbmFtZSA9IGRlZmF1bHROYW1lOyAgICAgIAotICAgIHRoaXMudGl0bGUgPSB0aXRsZTsKLSAgfQotICAKLSAgcHVibGljIE5ld0NvbXBvbmVudERpYWxvZyhTaGVsbCBwYXJlbnRTaGVsbCwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgZGVmYXVsdE5hbWUsIExpc3QgdXNlZE5hbWVzKSAKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsKTsKLSAgICBzZXRTaGVsbFN0eWxlKGdldFNoZWxsU3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotICAgIG5hbWUgPSBkZWZhdWx0TmFtZTsgICAgICAKLSAgICB0aGlzLnRpdGxlID0gdGl0bGU7Ci0gICAgdGhpcy51c2VkTmFtZXMgPSB1c2VkTmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgaW50IGNyZWF0ZUFuZE9wZW4oKQotICB7Ci0gICAgY3JlYXRlKCk7Ci0gICAgZ2V0U2hlbGwoKS5zZXRUZXh0KHRpdGxlKTsKLSAgICBzZXRCbG9ja09uT3Blbih0cnVlKTsKLSAgICByZXR1cm4gb3BlbigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgIAotICB7Ci0gICAgQ29udHJvbCBjb250cm9sID0gc3VwZXIuY3JlYXRlQ29udGVudHMocGFyZW50KTsKLSAgICBuYW1lRmllbGQuZm9yY2VGb2N1cygpOwotICAgIG5hbWVGaWVsZC5zZWxlY3RBbGwoKTsgIAotICAgIHVwZGF0ZUVycm9yTWVzc2FnZSgpOwotICAgIHJldHVybiBjb250cm9sOwotICB9Ci0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKENvbXBvc2l0ZSBwYXJlbnQpIAotICB7Ci0gICAgb2tCdXR0b24gPSBjcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLk9LX0lELCBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLCB0cnVlKTsKLSAgICBjcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCwgSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwsIGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUhlYWRlckNvbnRlbnQoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFeHRlbmRlZENvbnRlbnQoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSAKLSAgewotICAgIENvbXBvc2l0ZSBkaWFsb2dBcmVhID0gKENvbXBvc2l0ZSlzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgCi0gICAgY3JlYXRlSGVhZGVyQ29udGVudChkaWFsb2dBcmVhKTsKLQotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGRpYWxvZ0FyZWEsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOwotCi0gICAgR3JpZERhdGEgZ2RGaWxsPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZEZpbGwuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZEZpbGwuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBnZEZpbGwudmVydGljYWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2RGaWxsLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlPSB0cnVlOwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdkRmlsbCk7Ci0KLSAgICBMYWJlbCBuYW1lTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgbmFtZUxhYmVsLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX05BTUUpOyAvLyROT04tTkxTLTEkCi0KLSAgICBuYW1lRmllbGQgPSBuZXcgVGV4dChjb21wb3NpdGUsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLSAgICBHcmlkRGF0YSBnZD0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIGdkLndpZHRoSGludCA9IDIwMDsKLSAgICBuYW1lRmllbGQuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgbmFtZUZpZWxkLnNldFRleHQobmFtZSk7Ci0gICAgbmFtZUZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHRoaXMpOwotCi0gICAgY3JlYXRlRXh0ZW5kZWRDb250ZW50KGRpYWxvZ0FyZWEpOwotCi0gICAgLy8gZXJyb3IgbWVzc2FnZQotICAgIGVycm9yTWVzc2FnZUxhYmVsID0gbmV3IExhYmVsKGRpYWxvZ0FyZWEsIFNXVC5OT05FKTsKLSAgICBlcnJvck1lc3NhZ2VMYWJlbC5zZXRUZXh0KCIiKTsgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgIEdyaWREYXRhIGdkMiA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkMi5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkMi5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIGdkMi53aWR0aEhpbnQgPSAyMDA7Ci0gICAgZXJyb3JNZXNzYWdlTGFiZWwuc2V0TGF5b3V0RGF0YShnZDIpOyAgICAgICAgICAKLS8vICAgIENvbG9yIGNvbG9yID0gbmV3IENvbG9yKGVycm9yTWVzc2FnZUxhYmVsLmdldERpc3BsYXkoKSwgMjAwLCAwLCAwKTsKLS8vICAgIGVycm9yTWVzc2FnZUxhYmVsLnNldEZvcmVncm91bmQoY29sb3IpOwotCi0gICAgcmV0dXJuIGRpYWxvZ0FyZWE7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICB1cGRhdGVFcnJvck1lc3NhZ2UoKTsKLSAgfSAgICAgICAgCi0KLSAgcHJvdGVjdGVkIFN0cmluZyBjb21wdXRlRXJyb3JNZXNzYWdlKFN0cmluZyBuYW1lKQotICB7Ci0gIAlpZiAodXNlZE5hbWVzID09IG51bGwpCi0gIAkJcmV0dXJuIG51bGw7Ci0gIAkKLSAgCUl0ZXJhdG9yIGl0ZXJhdG9yID0gdXNlZE5hbWVzLml0ZXJhdG9yKCk7Ci0gIAl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0gIAkJaWYgKG5hbWUuZXF1YWxzSWdub3JlQ2FzZSgoU3RyaW5nKSBpdGVyYXRvci5uZXh0KCkpKSB7Ci0gIAkJCXJldHVybiBNZXNzYWdlcy5fVUlfTEFCRUxfV0FSTklOR19EVVBMSUNBVEVfTkFNRV9FWElTVFM7IC8vJE5PTi1OTFMtMSQKLSAgCQl9Ci0gIAl9Ci0gIAkKLSAgCXJldHVybiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlRXJyb3JNZXNzYWdlKCkKLSAgeyAgICAgICAgICAgICAgICAgCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWUgPSBuYW1lRmllbGQuZ2V0VGV4dCgpLnRyaW0oKTsKLSAgICBpZiAobmFtZS5sZW5ndGgoKSA+IDApCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBlcnJvck1lc3NhZ2UgPSBjb21wdXRlRXJyb3JNZXNzYWdlKG5hbWUpOwotICAgIH0gICAKLSAgICBlbHNlCi0gICAgewotICAgICAgZXJyb3JNZXNzYWdlID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICB9ICAKLSAgICBlcnJvck1lc3NhZ2VMYWJlbC5zZXRUZXh0KGVycm9yTWVzc2FnZSAhPSBudWxsID8gZXJyb3JNZXNzYWdlIDogIiIpOyAvLyROT04tTkxTLTEkCi0vLyAgICBva0J1dHRvbi5zZXRFbmFibGVkKGVycm9yTWVzc2FnZSA9PSBudWxsKTsKLSAgfQotIAotICBwcm90ZWN0ZWQgdm9pZCBidXR0b25QcmVzc2VkKGludCBidXR0b25JZCkgCi0gIHsKLSAgICBpZiAoYnV0dG9uSWQgPT0gSURpYWxvZ0NvbnN0YW50cy5PS19JRCkKLSAgICB7Ci0gICAgICBuYW1lID0gbmFtZUZpZWxkLmdldFRleHQoKTsKLSAgICB9Ci0gICAgc3VwZXIuYnV0dG9uUHJlc3NlZChidXR0b25JZCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1Byb3RvY29sQ29tcG9uZW50Q29udHJvbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1Byb3RvY29sQ29tcG9uZW50Q29udHJvbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGFmMjY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9Qcm90b2NvbENvbXBvbmVudENvbnRyb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9nczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5QYWdlQm9vazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmFzZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmluZGluZ0dlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2U7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcm90b2NvbENvbXBvbmVudENvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciwgTW9kaWZ5TGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yOwotCi0gIHByb3RlY3RlZCBUZXh0IGNvbXBvbmVudE5hbWVGaWVsZDsKLSAgcHJvdGVjdGVkIENvbWJvIHJlZk5hbWVDb21ibzsKLSAgcHJvdGVjdGVkIEJ1dHRvbiByZWZCcm93c2VCdXR0b247Ci0gIHByb3RlY3RlZCBDb21ibyBwcm90b2NvbENvbWJvOwotICBwcm90ZWN0ZWQgQnV0dG9uIG92ZXJ3cml0ZUJ1dHRvbjsKLSAgcHJvdGVjdGVkIFBhZ2VCb29rIHBhZ2VCb29rOwotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGVtcHR5U2V0dGluZ3NQYWdlOwotICBwcm90ZWN0ZWQgTWFwIHBhZ2VNYXAgPSBuZXcgSGFzaE1hcCgpOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWZOYW1lOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgVU5TUEVDSUZJRUQgPSBNZXNzYWdlcy5fVUlfVU5TUEVDSUZJRUQ7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgUHJvdG9jb2xDb21wb25lbnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQsIEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yLCBib29sZWFuIHNob3dPdmVyd3JpdGVCdXR0b24pCi0gIHsKLSAgICBzdXBlcihwYXJlbnQsIFNXVC5OT05FKTsKLSAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvcjsKLQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIHNldExheW91dChsYXlvdXQpOwotICAgIHNldExheW91dERhdGEoY3JlYXRlR3JpZERhdGEodHJ1ZSwgMSkpOwotCi0gICAgQ29tcG9zaXRlIGxhYmVsVmFsdWVDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5OT05FKTsKLSAgICBsYWJlbFZhbHVlQ29tcG9zaXRlLnNldExheW91dChuZXcgR3JpZExheW91dCgyLCBmYWxzZSkpOwotICAgIGxhYmVsVmFsdWVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShjcmVhdGVHcmlkRGF0YShmYWxzZSwgMSkpOwotCi0gICAgLy8gcm93IDEKLSAgICAvLwotICAgIExhYmVsIGNvbXBvbmVudE5hbWVMYWJlbCA9IG5ldyBMYWJlbChsYWJlbFZhbHVlQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgY29tcG9uZW50TmFtZUxhYmVsLnNldFRleHQoZ2V0Q29tcG9uZW50TmFtZUxhYmVsVGV4dCgpKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgY29tcG9uZW50TmFtZUZpZWxkID0gbmV3IFRleHQobGFiZWxWYWx1ZUNvbXBvc2l0ZSwgU1dULkJPUkRFUik7Ci0gICAgR3JpZERhdGEgZ2ROYW1lPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZE5hbWUuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZE5hbWUuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBjb21wb25lbnROYW1lRmllbGQuc2V0TGF5b3V0RGF0YShnZE5hbWUpOwotICAgIGNvbXBvbmVudE5hbWVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih0aGlzKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNvbXBvbmVudE5hbWVGaWVsZCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1RPQ09MX0NPTVBPTkVOVF9OQU1FX1RFWFQpOwotICAgIC8vY3JlYXRlUGxhY2VIb2xkZXIobGFiZWxWYWx1ZUNvbXBvc2l0ZSk7Ci0gICAgCi0gICAgLy8gcm93IDIKLSAgICAvLwotICAgIExhYmVsIHJlZk5hbWVMYWJlbCA9IG5ldyBMYWJlbChsYWJlbFZhbHVlQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgcmVmTmFtZUxhYmVsLnNldFRleHQoZ2V0UmVmTmFtZUxhYmVsVGV4dCgpKTsgLy8kTk9OLU5MUy0xJAkKLSAgICByZWZOYW1lQ29tYm8gPSBuZXcgQ29tYm8obGFiZWxWYWx1ZUNvbXBvc2l0ZSwgU1dULlJFQURfT05MWSk7Ci0gICAgR3JpZERhdGEgZ2RSZWZOYW1lPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZFJlZk5hbWUuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZFJlZk5hbWUuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICByZWZOYW1lQ29tYm8uc2V0TGF5b3V0RGF0YShnZFJlZk5hbWUpOwotICAgIHJlZk5hbWVDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHJlZk5hbWVDb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1RPQ09MX0NPTVBPTkVOVF9SRUZfQ09NQk8pOwotCi0gICAgLy9yZWZCcm93c2VCdXR0b24gPSBuZXcgQnV0dG9uKGxhYmVsVmFsdWVDb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICAvL3JlZkJyb3dzZUJ1dHRvbi5zZXRUZXh0KCIgIC4uLiAgIik7Ci0gICAgLy9HcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOwotICAgIC8vZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IGZhbHNlOwotICAgIC8vZ2QuaGVpZ2h0SGludCA9IDE3OwotICAgIC8vZ2Qud2lkdGhIaW50ID0gMjQ7Ci0gICAgLy9yZWZCcm93c2VCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgLy9yZWZCcm93c2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgLy9jcmVhdGVQbGFjZUhvbGRlcihsYWJlbFZhbHVlQ29tcG9zaXRlKTsKLQotICAgIC8vIHJvdyAzCi0gICAgLy8KLSAgICBMYWJlbCBwcm90b2NvbExhYmVsID0gbmV3IExhYmVsKGxhYmVsVmFsdWVDb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICBwcm90b2NvbExhYmVsLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX0JJTkRJTkdfUFJPVE9DT0wpOyAvLyROT04tTkxTLTEkCi0gICAgcHJvdG9jb2xDb21ibyA9IG5ldyBDb21ibyhsYWJlbFZhbHVlQ29tcG9zaXRlLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBHcmlkRGF0YSBnZFByb3RvY29sPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZFByb3RvY29sLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2RQcm90b2NvbC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIHByb3RvY29sQ29tYm8uc2V0TGF5b3V0RGF0YShnZFByb3RvY29sKTsKLSAgICBwcm90b2NvbENvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocHJvdG9jb2xDb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1RPQ09MX0NPTVBPTkVOVF9QUk9UT0NPTF9DT01CTyk7Ci0gICAgLy9jcmVhdGVQbGFjZUhvbGRlcihsYWJlbFZhbHVlQ29tcG9zaXRlKTsKLQotICAgIC8vIG9wdGlvbmFsIG92ZXJ3cml0ZSBidXR0b24KLSAgICAvLwotICAgIGlmIChzaG93T3ZlcndyaXRlQnV0dG9uKQotICAgIHsKLSAgICAgIG92ZXJ3cml0ZUJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULkNIRUNLKTsKLSAgICAgIG92ZXJ3cml0ZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9DSEVDS0JPWF9PVkVSV1JJVEUpOyAvLyROT04tTkxTLTEkCi0gICAgICBvdmVyd3JpdGVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKG92ZXJ3cml0ZUJ1dHRvbiwgQVNERWRpdG9yQ1NIZWxwSWRzLnBST1RPQ09MX0NPTVBPTkVOVF9PVkVSV1JJVEVfQ0hFQ0tCT1gpOwotICAgIH0KLQotICAgIC8vIHByb3RvY29sIHNwZWNpZmljIHNldHRpbmdzCi0gICAgLy8KLSAgICBwYWdlQm9vayA9IG5ldyBQYWdlQm9vayh0aGlzLCBTV1QuTk9ORSk7Ci0gICAgR3JpZERhdGEgZ2RGaWxsPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZEZpbGwuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZEZpbGwuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBnZEZpbGwudmVydGljYWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2RGaWxsLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlPSB0cnVlOwotICAgIHBhZ2VCb29rLnNldExheW91dERhdGEoZ2RGaWxsKTsKLQotICAgIGVtcHR5U2V0dGluZ3NQYWdlID0gbmV3IENvbXBvc2l0ZShwYWdlQm9vaywgU1dULk5PTkUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgIG5ldyBMYWJlbChlbXB0eVNldHRpbmdzUGFnZSwgU1dULk5PTkUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXRGaWVsZHMoKQotICB7Ci0gICAgLy8gcHJpbWUgdGhlIGZpZWxkcwotICAgIC8vCi0gICAgY29tcG9uZW50TmFtZUZpZWxkLnNldFRleHQoZ2V0RGVmYXVsdE5hbWUoKSk7Ci0gICAgdXBkYXRlUmVmTmFtZUNvbWJvKCk7Ci0gICAgdXBkYXRlUHJvdG9jb2xDb21ibygpOwotICAgIHVwZGF0ZVBhZ2VCb29rKHByb3RvY29sQ29tYm8uZ2V0VGV4dCgpKTsKLSAgfQotCi0gIHB1YmxpYyBUZXh0IGdldENvbXBvbmVudE5hbWVGaWVsZCgpCi0gIHsKLSAgICByZXR1cm4gY29tcG9uZW50TmFtZUZpZWxkOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lTGFiZWxUZXh0KCkKLSAgewotICAgIHJldHVybiBNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHJpdmF0ZSBHcmlkRGF0YSBjcmVhdGVHcmlkRGF0YShib29sZWFuIGJvdGgsIGludCBzcGFuKQotICB7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoYm90aCA/IEdyaWREYXRhLkZJTExfQk9USCA6IEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0gICAgZ2QuaG9yaXpvbnRhbFNwYW4gPSBzcGFuOwotICAgIHJldHVybiBnZDsKLSAgfQotCi0gIC8vIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgLy8KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotICAgIGlmIChldmVudC53aWRnZXQgPT0gb3ZlcndyaXRlQnV0dG9uICYmIG92ZXJ3cml0ZUJ1dHRvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIGdlbmVyYXRvci5zZXRPdmVyd3JpdGUob3ZlcndyaXRlQnV0dG9uLmdldFNlbGVjdGlvbigpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXZlbnQud2lkZ2V0ID09IHJlZk5hbWVDb21ibykKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSByZWZOYW1lQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIFN0cmluZyByZWZOYW1lID0gcmVmTmFtZUNvbWJvLmdldEl0ZW0oaW5kZXgpOwotCSAgaWYgKHJlZk5hbWUuZXF1YWxzKFVOU1BFQ0lGSUVEKSkgewotCSAgICAgIGdlbmVyYXRvci5zZXRSZWZOYW1lKCIiKTsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgZWxzZSB7Ci0JICAgICAgZ2VuZXJhdG9yLnNldFJlZk5hbWUocmVmTmFtZSk7Ci0JICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGV2ZW50LndpZGdldCA9PSBwcm90b2NvbENvbWJvKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gcHJvdG9jb2xDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSAoaW5kZXggIT0gLTEpID8gcHJvdG9jb2xDb21iby5nZXRJdGVtKGluZGV4KSA6IG51bGw7Ci0gICAgICAgIAotICAgICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTGFiZWwocHJvdG9jb2wpOwotICAgICAgICBpZiAoZXh0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgCVN0cmluZyBuYW1lc3BhY2UgPSBleHQuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIAlnZW5lcmF0b3Iuc2V0Q29udGVudEdlbmVyYXRvcihCaW5kaW5nR2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IobmFtZXNwYWNlKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICB7Ci0gICAgICAgIAlnZW5lcmF0b3Iuc2V0Q29udGVudEdlbmVyYXRvcihudWxsKTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVQYWdlQm9vayhwcm90b2NvbCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElTX09WRVJXUklURV9BUFBMSUNBQkxFID0gIklTX09WRVJXUklURV9BUFBMSUNBQkxFIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQYWdlQm9vayhTdHJpbmcgcHJvdG9jb2wpCi0gIHsKLSAgICBpZiAocHJvdG9jb2wgIT0gbnVsbCkKLSAgICB7Ci0JICBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgcGFnZSA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHBhZ2VNYXAuZ2V0KHByb3RvY29sKTsKLSAgICAgIGlmIChwYWdlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHBhZ2UgPSBjcmVhdGVDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UocHJvdG9jb2wpOwotCi0gICAgICAgIGlmIChwYWdlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBwYWdlLmluaXQoZ2VuZXJhdG9yKTsKLSAgICAgICAgICBDb250cm9sIGNvbnRyb2wgPSBwYWdlLmNyZWF0ZUNvbnRyb2wocGFnZUJvb2spOwotICAgICAgICAgIGNvbnRyb2wuc2V0RGF0YShJU19PVkVSV1JJVEVfQVBQTElDQUJMRSwgbmV3IEJvb2xlYW4ocGFnZS5pc092ZXJ3cml0ZUFwcGxpY2FibGUoKSkpOwotICAgICAgICAgIHBhZ2VNYXAucHV0KHByb3RvY29sLCBwYWdlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBib29sZWFuIGVuYWJsZU92ZXJ3cml0ZUJ1dHRvbiA9IHRydWU7Ci0gICAgICBpZiAocGFnZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAob3ZlcndyaXRlQnV0dG9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBCb29sZWFuIGRhdGEgPSAoQm9vbGVhbikgcGFnZS5nZXRDb250cm9sKCkuZ2V0RGF0YShJU19PVkVSV1JJVEVfQVBQTElDQUJMRSk7Ci0gICAgICAgICAgZW5hYmxlT3ZlcndyaXRlQnV0dG9uID0gZGF0YSA9PSBudWxsIHx8IGRhdGEuZXF1YWxzKEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFnZUJvb2suc2hvd1BhZ2UocGFnZS5nZXRDb250cm9sKCkpOwotICAgICAgICBwYWdlQm9vay5sYXlvdXQoKTsKLSAgICAgICAgcGFnZUJvb2suZ2V0UGFyZW50KCkubGF5b3V0KCk7Ci0JCQotCQlwYWdlLnNldE9wdGlvbnNPbkdlbmVyYXRvcigpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwYWdlQm9vay5zaG93UGFnZShlbXB0eVNldHRpbmdzUGFnZSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvdmVyd3JpdGVCdXR0b24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVuYWJsZU92ZXJ3cml0ZUJ1dHRvbikKLSAgICAgICAgewotICAgICAgICAgIG92ZXJ3cml0ZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgIG92ZXJ3cml0ZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZ2VuZXJhdG9yLmdldE92ZXJ3cml0ZSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBvdmVyd3JpdGVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgICAgb3ZlcndyaXRlQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb3RvY29sQ29tYm8oKQotICB7Ci0gICAgcHJvdG9jb2xDb21iby5yZW1vdmVBbGwoKTsKLSAgICBwcm90b2NvbENvbWJvLmFkZChVTlNQRUNJRklFRCk7Ci0KLSAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOyAKLSAgICBMaXN0IGJpbmRpbmdOYW1lcyA9IHJlZ2lzdHJ5LmdldEJpbmRpbmdFeHRlbnNpb25OYW1lcygpOwotICAgIAotICAgIFN0cmluZyBwcm90b2NvbFRleHQgPSBnZW5lcmF0b3IuZ2V0UHJvdG9jb2woKTsKLSAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0dCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvck5hbWUocHJvdG9jb2xUZXh0KTsKLSAgICBpZiAoZXh0dCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3RvY29sVGV4dCA9IGV4dHQuZ2V0TGFiZWwoKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChJdGVyYXRvciBpID0gYmluZGluZ05hbWVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvdG9jb2wgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lKHByb3RvY29sKTsKLSAgICAgIGlmIChleHQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGxhYmVsID0gZXh0LmdldExhYmVsKCk7Ci0gICAgICAgIGlmIChsYWJlbCAhPSBudWxsKQotICAgICAgICAgIHByb3RvY29sQ29tYm8uYWRkKGxhYmVsKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJvdG9jb2xUZXh0ID09IG51bGwgJiYgcHJvdG9jb2xDb21iby5nZXRJdGVtQ291bnQoKSA+IDApCi0gICAgewotICAgICAgcHJvdG9jb2xUZXh0ID0gcHJvdG9jb2xDb21iby5nZXRJdGVtKDApOwotICAgIH0KLSAgICBwcm90b2NvbENvbWJvLnNldFRleHQocHJvdG9jb2xUZXh0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHVwZGF0ZVJlZk5hbWVDb21ibygpCi0gIHsKLSAgICByZWZOYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0KLSAgICByZWZOYW1lQ29tYm8uYWRkKFVOU1BFQ0lGSUVEKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRSZWZOYW1lcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZWZOYW1lQ29tYm8uYWRkKChTdHJpbmcpIGkubmV4dCgpKTsKLSAgICB9Ci0KLSAgICBpZiAocmVmTmFtZUNvbWJvLmdldEl0ZW1Db3VudCgpID4gMCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVmVGV4dCA9IGdlbmVyYXRvci5nZXRSZWZOYW1lKCk7Ci0gICAgICByZWZOYW1lQ29tYm8uc2V0VGV4dChyZWZUZXh0ICE9IG51bGwgPyByZWZUZXh0IDogVU5TUEVDSUZJRUQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgewotICAgIGdlbmVyYXRvci5zZXROYW1lKGNvbXBvbmVudE5hbWVGaWVsZC5nZXRUZXh0KCkpOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IExpc3QgZ2V0UmVmTmFtZXMoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRSZWZOYW1lTGFiZWxUZXh0KCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0RGVmYXVsdE5hbWUoKTsKLSAgLy8gVE9ETzogV2UgZG9uJ3QgbmVlZCB0aGUgU3RyaW5nIGFyZ3VtZW50IGZvciBjcmVhdGVDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoKSBtZXRob2QuCi0gIC8vIFJlbW92ZSB3aGVuIFdUUCBhbGxvd3MgQVBJIGNoYW5nZXMuCi0gIHB1YmxpYyBhYnN0cmFjdCBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgY3JlYXRlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKFN0cmluZyBwcm90b2NvbCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZWMxMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1cxMUJyb3dzZUNvbXBvbmVudERpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNlYXJjaExpc3REaWFsb2dDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLlNjb3BlZENvbXBvbmVudFNlYXJjaExpc3REaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMTWVzc2FnZVNlYXJjaExpc3RQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nIGltcGxlbWVudHMgSUNvbXBvbmVudERpYWxvZyB7Ci0JcHJpdmF0ZSBRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWU7Ci0JcHJpdmF0ZSBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNlbGVjdGlvbjsKLQlwcml2YXRlIFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwotCQotCXB1YmxpYyBXMTFCcm93c2VDb21wb25lbnREaWFsb2coUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lLCBJRmlsZSBpRmlsZSwgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJdGhpcy5xdWFsaWZpZWROYW1lID0gcXVhbGlmaWVkTmFtZTsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGdldFNlbGVjdGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gc2VsZWN0aW9uOwotCX0KLQotCXB1YmxpYyBpbnQgY3JlYXRlQW5kT3BlbigpIHsKLQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGRlc2NyaXB0aW9uLmdldFRhcmdldCgpOwotCQkKLQkgICAgU2hlbGwgc2hlbGwgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkgICAgaW50IHJldHVyblZhbHVlID0gV2luZG93LkNBTkNFTDsKLQkgICAgQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZyBkaWFsb2cgPSBudWxsOwotCSAgICBpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSkKLQkgICAgewotCSAgICAJV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIgZGVzY3JpcHRpb25Qcm92aWRlciA9IG5ldyBXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcigpOwotCSAgICAJZmluYWwgV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIgc2VhcmNoTGlzdFByb3ZpZGVyID0gbmV3IFdTRExCaW5kaW5nU2VhcmNoTGlzdFByb3ZpZGVyKGRlZmluaXRpb24pOwotCSAgICAJQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZ0NvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nQ29uZmlndXJhdGlvbigpOwotCSAgICAJY29uZmlndXJhdGlvbi5zZXRGaWx0ZXJMYWJlbFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX05BTUVfRklMVEVSKTsKLQkgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RGVzY3JpcHRpb25Qcm92aWRlcihkZXNjcmlwdGlvblByb3ZpZGVyKTsKLQkgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0U2VhcmNoTGlzdFByb3ZpZGVyKHNlYXJjaExpc3RQcm92aWRlcik7Ci0JICAgICAgICAKLQkgICAgICAgIFN0cmluZyBkaWFsb2dUaXRsZSA9IE1lc3NhZ2VzLl9VSV9USVRMRV9TUEVDSUZZX0JJTkRJTkc7IC8vJE5PTi1OTFMtMSQKLQkgICAgICAgIGRpYWxvZyA9IG5ldyBTY29wZWRDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nKHNoZWxsLCBkaWFsb2dUaXRsZSwgY29uZmlndXJhdGlvbik7Ci0JICAgICAgICAKLQkgICAgICAgIElGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JICAgICAgICBpZiAoZmlsZSAhPSBudWxsKSB7Ci0JCSAgICAgICAgKChTY29wZWRDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nKSBkaWFsb2cpLnNldEN1cnJlbnRSZXNvdXJjZShmaWxlKTsKLQkgICAgICAgIH0KLQkgICAgfQotCSAgICBlbHNlIGlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUpCi0JICAgIHsKLQkgICAgICBXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBkZXNjcmlwdGlvblByb3ZpZGVyID0gbmV3IFdTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyKCk7Ci0JICAgICAgZmluYWwgV1NETEludGVyZmFjZVNlYXJjaExpc3RQcm92aWRlciBzZWFyY2hMaXN0UHJvdmlkZXIgPSBuZXcgV1NETEludGVyZmFjZVNlYXJjaExpc3RQcm92aWRlcihkZWZpbml0aW9uKTsKLQkgICAgIAotCSAgICAgIENvbXBvbmVudFNlYXJjaExpc3REaWFsb2dDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZ0NvbmZpZ3VyYXRpb24oKTsKLQkgICAgICBjb25maWd1cmF0aW9uLnNldEZpbHRlckxhYmVsVGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRV9GSUxURVIpOwotCSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RGVzY3JpcHRpb25Qcm92aWRlcihkZXNjcmlwdGlvblByb3ZpZGVyKTsKLQkgICAgICBjb25maWd1cmF0aW9uLnNldFNlYXJjaExpc3RQcm92aWRlcihzZWFyY2hMaXN0UHJvdmlkZXIpOwotCSAgICAgIC8vY29uZmlndXJhdGlvbi5zZXROZXdDb21wb25lbnRIYW5kbGVyKG5ldyBOZXdUeXBlQnV0dG9uSGFuZGxlcigpKTsKLQkgICAgICAKLQkgICAgICBTdHJpbmcgZGlhbG9nVGl0bGUgPSBNZXNzYWdlcy5fVUlfVElUTEVfU1BFQ0lGWV9QT1JUVFlQRTsgLy8kTk9OLU5MUy0xJAotCSAgICAgIGRpYWxvZyA9IG5ldyBTY29wZWRDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nKHNoZWxsLCBkaWFsb2dUaXRsZSwgY29uZmlndXJhdGlvbik7Ci0JICAgICAgCi0JICAgICAgSUZpbGUgZmlsZSA9IGdldEZpbGUoKTsKLQkgICAgICBpZiAoZmlsZSAhPSBudWxsKSB7Ci0JICAgIAkgICgoU2NvcGVkQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZykgZGlhbG9nKS5zZXRDdXJyZW50UmVzb3VyY2UoZmlsZSk7Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIGVsc2UgaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpCi0JICAgIHsKLQkgICAgICBXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBkZXNjcmlwdGlvblByb3ZpZGVyID0gbmV3IFdTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyKCk7Ci0JICAgICAgZmluYWwgV1NETE1lc3NhZ2VTZWFyY2hMaXN0UHJvdmlkZXIgc2VhcmNoTGlzdFByb3ZpZGVyID0gbmV3IFdTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyKGRlZmluaXRpb24pOwotCSAgICAgCi0JICAgICAgQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZ0NvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nQ29uZmlndXJhdGlvbigpOwotCSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmlsdGVyTGFiZWxUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FX0ZJTFRFUik7Ci0JICAgICAgY29uZmlndXJhdGlvbi5zZXREZXNjcmlwdGlvblByb3ZpZGVyKGRlc2NyaXB0aW9uUHJvdmlkZXIpOwotCSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0U2VhcmNoTGlzdFByb3ZpZGVyKHNlYXJjaExpc3RQcm92aWRlcik7Ci0JICAgICAgLy9jb25maWd1cmF0aW9uLnNldE5ld0NvbXBvbmVudEhhbmRsZXIobmV3IE5ld1R5cGVCdXR0b25IYW5kbGVyKCkpOwotCSAgICAgIAotCSAgICAgIFN0cmluZyBkaWFsb2dUaXRsZSA9IE1lc3NhZ2VzLl9VSV9USVRMRV9TUEVDSUZZX01FU1NBR0U7IC8vJE5PTi1OTFMtMSQKLQkgICAgICBkaWFsb2cgPSBuZXcgU2NvcGVkQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZyhzaGVsbCwgZGlhbG9nVGl0bGUsIGNvbmZpZ3VyYXRpb24pOwotCSAgICAgIAotCSAgICAgIElGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JICAgICAgaWYgKGZpbGUgIT0gbnVsbCkgewotCSAgICAJICAoKFNjb3BlZENvbXBvbmVudFNlYXJjaExpc3REaWFsb2cpIGRpYWxvZykuc2V0Q3VycmVudFJlc291cmNlKGZpbGUpOwotCSAgICAgIH0KLQkgICAgfQotCSAgICAKLQkgICAgaWYgKGRpYWxvZyAhPSBudWxsKQotCSAgICB7Ci0JICAgICAgZGlhbG9nLnNldEJsb2NrT25PcGVuKHRydWUpOwotCSAgICAgIGRpYWxvZy5jcmVhdGUoKTsKLQkgICAgICByZXR1cm5WYWx1ZSA9IGRpYWxvZy5vcGVuKCk7Ci0JICAgICAgaWYgKHJldHVyblZhbHVlID09IFdpbmRvdy5PSykKLQkgICAgICB7Ci0JICAgICAgICBzZWxlY3Rpb24gPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgcmV0dXJuIHJldHVyblZhbHVlOwotCX0KLQkKLQlwcml2YXRlIElGaWxlIGdldEZpbGUoKSB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlJRWRpdG9ySW5wdXQgaW5wdXQgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0gICAgICAgIAlmaWxlID0gKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZmlsZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9XMTFOZXdDb21wb25lbnREaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9XMTFOZXdDb21wb25lbnREaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAyMTlhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvVzExTmV3Q29tcG9uZW50RGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3M7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkQmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkSW50ZXJmYWNlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRNZXNzYWdlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5kaWFsb2dzLk5ld0NvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMU5ld0NvbXBvbmVudERpYWxvZyBpbXBsZW1lbnRzIElDb21wb25lbnREaWFsb2cgewotCXByb3RlY3RlZCBOZXdDb21wb25lbnREaWFsb2cgZGlhbG9nOwotCXByb3RlY3RlZCBRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWU7Ci0JcHJvdGVjdGVkIElGaWxlIGlGaWxlOwotCXByb3RlY3RlZCBXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKLQlwcm90ZWN0ZWQgSUFTRE9iamVjdCBuZXdPYmplY3Q7Ci0JCi0JcHVibGljIFcxMU5ld0NvbXBvbmVudERpYWxvZyhRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUsIElGaWxlIGlGaWxlLCBXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQl0aGlzLnF1YWxpZmllZE5hbWUgPSBxdWFsaWZpZWROYW1lOwotCQl0aGlzLmlGaWxlID0gaUZpbGU7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQkJCi0JCVNoZWxsIHNoZWxsID0gRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0QWN0aXZlU2hlbGwoKTsKLQkJaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUpIHsKLQkJCVN0cmluZyBkaWFsb2dUaXRsZSA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9ORVdfQklORElORzsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIGJhc2VOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVCaW5kaW5nTmFtZShnZXREZWZpbml0aW9uKCksICJOZXdCaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLQkJCUxpc3QgdXNlZE5hbWVzID0gTmFtZVV0aWwuZ2V0VXNlZEJpbmRpbmdOYW1lcyhnZXREZWZpbml0aW9uKCkpOwotCQkJZGlhbG9nID0gbmV3IE5ld0NvbXBvbmVudERpYWxvZyhzaGVsbCwgZGlhbG9nVGl0bGUsIGJhc2VOYW1lLCB1c2VkTmFtZXMpOwotCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChzaGVsbCwgQVNERWRpdG9yQ1NIZWxwSWRzLk5FV19CSU5ESU5HX0RJQUxPRyk7Ci0JCX0KLQkJZWxzZSBpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FKSB7Ci0JCQlTdHJpbmcgZGlhbG9nVGl0bGUgPSBNZXNzYWdlcy5fVUlfTEFCRUxfTkVXX1BPUlRUWVBFOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgYmFzZU5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZVBvcnRUeXBlTmFtZShnZXREZWZpbml0aW9uKCksICJOZXdQb3J0VHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCQlMaXN0IHVzZWROYW1lcyA9IE5hbWVVdGlsLmdldFVzZWRQb3J0VHlwZU5hbWVzKGdldERlZmluaXRpb24oKSk7Ci0JCQlkaWFsb2cgPSBuZXcgTmV3Q29tcG9uZW50RGlhbG9nKHNoZWxsLCBkaWFsb2dUaXRsZSwgYmFzZU5hbWUsIHVzZWROYW1lcyk7Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHNoZWxsLCBBU0RFZGl0b3JDU0hlbHBJZHMuTkVXX1BPUlRUWVBFX0RJQUxPRyk7Ci0JCX0KLQkJZWxzZSBpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSkgewotCQkJU3RyaW5nIGRpYWxvZ1RpdGxlID0gTWVzc2FnZXMuX1VJX0xBQkVMX05FV19NRVNTQUdFOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgYmFzZU5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGdldERlZmluaXRpb24oKSwgIk5ld01lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotCQkJTGlzdCB1c2VkTmFtZXMgPSBOYW1lVXRpbC5nZXRVc2VkTWVzc2FnZU5hbWVzKGdldERlZmluaXRpb24oKSk7Ci0JCQlkaWFsb2cgPSBuZXcgTmV3Q29tcG9uZW50RGlhbG9nKHNoZWxsLCBkaWFsb2dUaXRsZSwgYmFzZU5hbWUsIHVzZWROYW1lcyk7Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHNoZWxsLCBBU0RFZGl0b3JDU0hlbHBJZHMuTkVXX01FU1NBR0VfRElBTE9HKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIChEZWZpbml0aW9uKSBkZXNjcmlwdGlvbi5nZXRUYXJnZXQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBnZXRTZWxlY3RlZENvbXBvbmVudCgpIHsKLQkJU3RyaW5nIHF1YWxpZmllciA9IGdldERlZmluaXRpb24oKS5nZXRQcmVmaXgoZ2V0RGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQkJU3RyaW5nIG5hbWUgPSBkaWFsb2cuZ2V0TmFtZSgpOwotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbihxdWFsaWZpZXIsIG5hbWUsIGlGaWxlKTsKLQkJc3BlYy5zZXRPYmplY3QobmV3T2JqZWN0KTsKLQkJcmV0dXJuIHNwZWM7Ci0JfQotCi0JcHVibGljIGludCBjcmVhdGVBbmRPcGVuKCkgewotCQlpbnQgclZhbHVlID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLQkJCi0JCWlmIChyVmFsdWUgPT0gV2luZG93Lk9LKSB7Ci0JCQkvLyBDcmVhdGUgdGhlIG5ldyBPYmplY3QKLQkJCWlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FKSB7Ci0JCQkJVzExQWRkQmluZGluZ0NvbW1hbmQgY29tbWFuZCA9IChXMTFBZGRCaW5kaW5nQ29tbWFuZCkgZGVzY3JpcHRpb24uZ2V0QWRkQmluZGluZ0NvbW1hbmQoKTsKLQkJCQljb21tYW5kLnNldE5ld0JpbmRpbmdOYW1lKGRpYWxvZy5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgT2JqZWN0IG5ld1dTRExPYmplY3QgPSBjb21tYW5kLmdldE5ld0JpbmRpbmcoKTsKLQkJCSAgICBuZXdPYmplY3QgPSAoSUFTRE9iamVjdCkgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoKE5vdGlmaWVyKSBuZXdXU0RMT2JqZWN0KTsKLQkJCX0KLQkJCWVsc2UgaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSkgewotCQkJCVcxMUFkZEludGVyZmFjZUNvbW1hbmQgY29tbWFuZCA9IChXMTFBZGRJbnRlcmZhY2VDb21tYW5kKSBkZXNjcmlwdGlvbi5nZXRBZGRJbnRlcmZhY2VDb21tYW5kKCk7Ci0JCQkJY29tbWFuZC5zZXROZXdQb3J0VHlwZU5hbWUoZGlhbG9nLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBPYmplY3QgbmV3V1NETE9iamVjdCA9IGNvbW1hbmQuZ2V0TmV3UG9ydFR5cGUoKTsKLQkJCSAgICBuZXdPYmplY3QgPSAoSUFTRE9iamVjdCkgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoKE5vdGlmaWVyKSBuZXdXU0RMT2JqZWN0KTsKLQkJCX0KLQkJCWVsc2UgaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpIHsKLQkJCQlXMTFBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gKFcxMUFkZE1lc3NhZ2VDb21tYW5kKSBkZXNjcmlwdGlvbi5nZXRBZGRNZXNzYWdlQ29tbWFuZCgpOwotCQkJCWNvbW1hbmQuc2V0TmV3TWVzc2FnZU5hbWUoZGlhbG9nLmdldE5hbWUoKSk7Ci0JCQkJZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBPYmplY3QgbmV3V1NETE9iamVjdCA9IGNvbW1hbmQuZ2V0TmV3TWVzc2FnZSgpOwotCQkJICAgIG5ld09iamVjdCA9IChJQVNET2JqZWN0KSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdCgoTm90aWZpZXIpIG5ld1dTRExPYmplY3QpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gclZhbHVlOwotCX0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgZXhlY3V0ZShDb21tYW5kIGNvbW1hbmQpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0gICAgICAgICAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29tbWFuZC5leGVjdXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MzQ1ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVNldEJpbmRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlcxMUJyb3dzZUNvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlcxMU5ld0NvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMU2V0Q29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyIGltcGxlbWVudHMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgewotCXByb3RlY3RlZCBXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKLQlwcm90ZWN0ZWQgSUZpbGUgaUZpbGU7Ci0JCi0JcHVibGljIFcxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcihXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgSUZpbGUgaUZpbGUpIHsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQl0aGlzLmlGaWxlID0gaUZpbGU7Ci0JfQotCQotCXB1YmxpYyBJQ29tcG9uZW50RGlhbG9nIGdldEJyb3dzZURpYWxvZygpIHsKLQkJcmV0dXJuIG5ldyBXMTFCcm93c2VDb21wb25lbnREaWFsb2coSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUsIGlGaWxlLCBkZXNjcmlwdGlvbik7Ci0JfQotCi0JcHVibGljIElDb21wb25lbnREaWFsb2cgZ2V0TmV3RGlhbG9nKCkgewotCQlyZXR1cm4gbmV3IFcxMU5ld0NvbXBvbmVudERpYWxvZyhJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSwgaUZpbGUsIGRlc2NyaXB0aW9uKTsKLQl9Ci0JCi0JcHJpdmF0ZSBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB7Ci0JCXJldHVybiAoRGVmaW5pdGlvbikgZGVzY3JpcHRpb24uZ2V0VGFyZ2V0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgbW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKE9iamVjdCByZWZlcmVuY2luZ09iamVjdCwgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiByZWZlcmVuY2VkQ29tcG9uZW50KSB7Ci0JCVcxMUVuZFBvaW50IHcxMUVuZFBvaW50ID0gKFcxMUVuZFBvaW50KSByZWZlcmVuY2luZ09iamVjdDsKLQkJT2JqZWN0IGJpbmRpbmdPYmplY3QgPSByZWZlcmVuY2VkQ29tcG9uZW50LmdldE9iamVjdCgpOwotCQlpZiAoYmluZGluZ09iamVjdCA9PSBudWxsKSB7Ci0JCQkvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIElCaW5kaW5nIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIENvbXBvbmVudFNwZWNpZmljYXRpb24KLQotCQl9Ci0JCQotCQlpZiAoYmluZGluZ09iamVjdCBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQkJCVBvcnQgcG9ydCA9IChQb3J0KSB3MTFFbmRQb2ludC5nZXRUYXJnZXQoKTsKLQkJCVdTRExTZXRDb21wb25lbnRIZWxwZXIgaGVscGVyID0gbmV3IFdTRExTZXRDb21wb25lbnRIZWxwZXIoaUZpbGUsIGdldERlZmluaXRpb24oKSk7Ci0JCQloZWxwZXIuc2V0V1NETENvbXBvbmVudChwb3J0LCAiYmluZGluZyIsIChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBiaW5kaW5nT2JqZWN0KTsgLy8kTk9OLU5MUy0xJAotCQkJCi0JCQlCaW5kaW5nIG5ld0JpbmRpbmcgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0JCQlXMTFTZXRCaW5kaW5nQ29tbWFuZC51cGRhdGVQb3J0UHJvdG9jb2wocG9ydCwgbmV3QmluZGluZyk7Ci0JCX0JCQotCQllbHNlIGlmIChiaW5kaW5nT2JqZWN0IGluc3RhbmNlb2YgSUJpbmRpbmcpewotCQkJSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZykgYmluZGluZ09iamVjdDsKLQkJCUNvbW1hbmQgY29tbWFuZCA9IHcxMUVuZFBvaW50LmdldFNldEJpbmRpbmdDb21tYW5kKGJpbmRpbmcpOwotCQkJQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCXN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgSUNvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIgZ2V0Q29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRRdWlja1BpY2tzKCkgewotCQlMaXN0IHNwZWNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJSXRlcmF0b3IgYmluZGluZ3MgPSBkZXNjcmlwdGlvbi5nZXRCaW5kaW5ncygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChiaW5kaW5ncy5oYXNOZXh0KCkpIHsKLQkJCUlCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGJpbmRpbmdzLm5leHQoKTsKLQkJCVN0cmluZyBxdWFsaWZpZXIgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIG5hbWUgPSBiaW5kaW5nLmdldE5hbWUoKTsKLQkJCUlGaWxlIGZpbGUgPSBudWxsOwotCQkJCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbihxdWFsaWZpZXIsIG5hbWUsIGZpbGUpOwotCQkJc3BlYy5zZXRPYmplY3QoYmluZGluZyk7Ci0JCQlzcGVjTGlzdC5hZGQoc3BlYyk7Ci0JCX0KLQotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gc3BlY0FycmF5ID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb25bc3BlY0xpc3Quc2l6ZSgpXTsKLQkJc3BlY0xpc3QudG9BcnJheShzcGVjQXJyYXkpOwotCQkKLQkJcmV0dXJuIHNwZWNBcnJheTsKLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGdldEhpc3RvcnkoKSB7Ci0JCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBoaXN0b3J5ID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb25bMF07Ci0JCXJldHVybiBoaXN0b3J5OwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFRvSGlzdG9yeShDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudCkgewotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlZmVmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlcxMUJyb3dzZUNvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlcxMU5ld0NvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMU2V0Q29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIgaW1wbGVtZW50cyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciB7Ci0JcHJvdGVjdGVkIFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwotCXByb3RlY3RlZCBJRmlsZSBpRmlsZTsKLQkKLQlwdWJsaWMgVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIoVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb24sIElGaWxlIGlGaWxlKSB7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQkJdGhpcy5pRmlsZSA9IGlGaWxlOwotCX0KLQkKLQlwdWJsaWMgSUNvbXBvbmVudERpYWxvZyBnZXRCcm93c2VEaWFsb2coKSB7Ci0JCXJldHVybiBuZXcgVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nKElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUsIGlGaWxlLCBkZXNjcmlwdGlvbik7Ci0JfQotCi0JcHVibGljIElDb21wb25lbnREaWFsb2cgZ2V0TmV3RGlhbG9nKCkgewotCQlyZXR1cm4gbmV3IFcxMU5ld0NvbXBvbmVudERpYWxvZyhJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FLCBpRmlsZSwgZGVzY3JpcHRpb24pOwotCX0KLQotCXByaXZhdGUgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkgewotCQlyZXR1cm4gKERlZmluaXRpb24pIGRlc2NyaXB0aW9uLmdldFRhcmdldCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBtb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoT2JqZWN0IHJlZmVyZW5jaW5nT2JqZWN0LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHJlZmVyZW5jZWRDb21wb25lbnQpIHsKLQkJVzExQmluZGluZyB3MTFCaW5kaW5nID0gKFcxMUJpbmRpbmcpIHJlZmVyZW5jaW5nT2JqZWN0OwotCQlPYmplY3QgaW50ZXJmYWNlT2JqZWN0ID0gcmVmZXJlbmNlZENvbXBvbmVudC5nZXRPYmplY3QoKTsKLQkJaWYgKGludGVyZmFjZU9iamVjdCA9PSBudWxsKSB7Ci0JCQkvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIElJbnRlcmZhY2UgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgQ29tcG9uZW50U3BlY2lmaWNhdGlvbgotCi0JCX0KLQkJCi0JCWlmIChpbnRlcmZhY2VPYmplY3QgaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JCQlCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgdzExQmluZGluZy5nZXRUYXJnZXQoKTsKLQkJCVdTRExTZXRDb21wb25lbnRIZWxwZXIgaGVscGVyID0gbmV3IFdTRExTZXRDb21wb25lbnRIZWxwZXIoaUZpbGUsIGdldERlZmluaXRpb24oKSk7Ci0JCQloZWxwZXIuc2V0V1NETENvbXBvbmVudChiaW5kaW5nLCAidHlwZSIsIChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBpbnRlcmZhY2VPYmplY3QpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZWxzZSBpZiAoaW50ZXJmYWNlT2JqZWN0IGluc3RhbmNlb2YgSUludGVyZmFjZSl7Ci0JCQlJSW50ZXJmYWNlIGludGVyZmF6ZSA9IChJSW50ZXJmYWNlKSBpbnRlcmZhY2VPYmplY3Q7Ci0JCQlDb21tYW5kIGNvbW1hbmQgPSB3MTFCaW5kaW5nLmdldFNldEludGVyZmFjZUNvbW1hbmQoaW50ZXJmYXplKTsKLQkJCUNvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCXN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgSUNvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIgZ2V0Q29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcigpIHsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGdldFF1aWNrUGlja3MoKSB7Ci0JCUxpc3Qgc3BlY0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlJdGVyYXRvciBpbnRlcmZhY2VzID0gZGVzY3JpcHRpb24uZ2V0SW50ZXJmYWNlcygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpbnRlcmZhY2VzLmhhc05leHQoKSkgewotCQkJSUludGVyZmFjZSBpbnRlcmZhemUgPSAoSUludGVyZmFjZSkgaW50ZXJmYWNlcy5uZXh0KCk7Ci0JCQlTdHJpbmcgcXVhbGlmaWVyID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBuYW1lID0gaW50ZXJmYXplLmdldE5hbWUoKTsKLQkJCUlGaWxlIGZpbGUgPSBudWxsOwotCQkJCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbihxdWFsaWZpZXIsIG5hbWUsIGZpbGUpOwotCQkJc3BlYy5zZXRPYmplY3QoaW50ZXJmYXplKTsKLQkJCXNwZWNMaXN0LmFkZChzcGVjKTsKLQkJfQotCi0JCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBzcGVjQXJyYXkgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltzcGVjTGlzdC5zaXplKCldOwotCQlzcGVjTGlzdC50b0FycmF5KHNwZWNBcnJheSk7Ci0JCQotCQlyZXR1cm4gc3BlY0FycmF5OwotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gZ2V0SGlzdG9yeSgpIHsKLQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGhpc3RvcnkgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvblswXTsKLQkJcmV0dXJuIGhpc3Rvcnk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVG9IaXN0b3J5KENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50KSB7Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFjNDg3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5XMTFCcm93c2VDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5XMTFOZXdDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETFNldENvbXBvbmVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlciBpbXBsZW1lbnRzIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHsKLQlwcm90ZWN0ZWQgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JcHJvdGVjdGVkIElGaWxlIGlGaWxlOwotCQotCXB1YmxpYyBXMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIoVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb24sIElGaWxlIGlGaWxlKSB7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQkJdGhpcy5pRmlsZSA9IGlGaWxlOwotCX0KLQotCXB1YmxpYyBJQ29tcG9uZW50RGlhbG9nIGdldEJyb3dzZURpYWxvZygpIHsKLQkJcmV0dXJuIG5ldyBXMTFCcm93c2VDb21wb25lbnREaWFsb2coSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUsIGlGaWxlLCBkZXNjcmlwdGlvbik7Ci0JfQotCi0JcHVibGljIElDb21wb25lbnREaWFsb2cgZ2V0TmV3RGlhbG9nKCkgewotCQlyZXR1cm4gbmV3IFcxMU5ld0NvbXBvbmVudERpYWxvZyhJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSwgaUZpbGUsIGRlc2NyaXB0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIChEZWZpbml0aW9uKSBkZXNjcmlwdGlvbi5nZXRUYXJnZXQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgbW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKE9iamVjdCByZWZlcmVuY2luZ09iamVjdCwgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiByZWZlcmVuY2VkQ29tcG9uZW50KSB7Ci0JCVcxMU1lc3NhZ2VSZWZlcmVuY2UgdzExTWVzc2FnZVJlZiA9IChXMTFNZXNzYWdlUmVmZXJlbmNlKSByZWZlcmVuY2luZ09iamVjdDsKLQkJT2JqZWN0IG1lc3NhZ2VPYmplY3QgPSByZWZlcmVuY2VkQ29tcG9uZW50LmdldE9iamVjdCgpOwotCQlpZiAobWVzc2FnZU9iamVjdCA9PSBudWxsKSB7Ci0JCQkvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIElNZXNzYWdlIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIENvbXBvbmVudFNwZWNpZmljYXRpb24KLQotCQl9Ci0JCQotCQlpZiAobWVzc2FnZU9iamVjdCBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQkJCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZj0gKE1lc3NhZ2VSZWZlcmVuY2UpIHcxMU1lc3NhZ2VSZWYuZ2V0VGFyZ2V0KCk7Ci0JCQlXU0RMU2V0Q29tcG9uZW50SGVscGVyIGhlbHBlciA9IG5ldyBXU0RMU2V0Q29tcG9uZW50SGVscGVyKGlGaWxlLCBnZXREZWZpbml0aW9uKCkpOwotCQkJaGVscGVyLnNldFdTRExDb21wb25lbnQobWVzc2FnZVJlZiwgIm1lc3NhZ2UiLCAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgbWVzc2FnZU9iamVjdCk7IC8vJE5PTi1OTFMtMSQKLQkJfQkJCi0JCWVsc2UgaWYgKG1lc3NhZ2VPYmplY3QgaW5zdGFuY2VvZiBXMTFNZXNzYWdlKXsKLQkJCS8vIEJlbG93IGlzIGEgbGl0dGxlIGNvbXBsZXguLi4uIFRoZSBhbHRlcm5hdGl2ZSB3YXMgdG8gaGF2ZSBJTWVzc2FnZSBjb250YWluIGEKLQkJCS8vIGdldFNldE1lc3NhZ2VDb21tYW5kKCkgd2hpY2ggd291bGQgaGFuZGxlIGFsbCBvZiB0aGlzIGJ1dCBkb2VzIGEgZ2V0U2V0TWVzc2FnZUNvbW1hbmQoKQotCQkJLy8gbWFrZSBzZW5zZSBhdCB0aGUgZ2VuZXJpYyBsZXZlbC4uLi4uCi0JCQlXMTFNZXNzYWdlIGlNZXNzYWdlID0gKFcxMU1lc3NhZ2UpIG1lc3NhZ2VPYmplY3Q7Ci0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWNPYmplY3QgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbigpOwotCQkJc3BlY09iamVjdC5zZXROYW1lKGlNZXNzYWdlLmdldE5hbWUoKSk7Ci0JCQlzcGVjT2JqZWN0LnNldE1ldGFOYW1lKElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FKTsKLQkJCXNwZWNPYmplY3Quc2V0UXVhbGlmaWVyKGRlc2NyaXB0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQkJCQotCQkJU3RyaW5nIGxvY2F0aW9uID0gKChEZWZpbml0aW9uKSBkZXNjcmlwdGlvbi5nZXRUYXJnZXQoKSkuZ2V0TG9jYXRpb24oKTsKLQkJCVN0cmluZyBwbGF0Zm9ybVJlc291cmNlID0gInBsYXRmb3JtOi9yZXNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLQkgICAgICAgIGlmIChsb2NhdGlvbiAhPSBudWxsICYmIGxvY2F0aW9uLnN0YXJ0c1dpdGgocGxhdGZvcm1SZXNvdXJjZSkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIFBhdGggcGF0aCA9IG5ldyBQYXRoKGxvY2F0aW9uLnN1YnN0cmluZyhwbGF0Zm9ybVJlc291cmNlLmxlbmd0aCgpKSk7Ci0JICAgICAgICAgIHNwZWNPYmplY3Quc2V0RmlsZShSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCkpOwotCSAgICAgICAgfSAgCi0JCQkKLQkJCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZj0gKE1lc3NhZ2VSZWZlcmVuY2UpIHcxMU1lc3NhZ2VSZWYuZ2V0VGFyZ2V0KCk7Ci0JCQlXU0RMU2V0Q29tcG9uZW50SGVscGVyIGhlbHBlciA9IG5ldyBXU0RMU2V0Q29tcG9uZW50SGVscGVyKGlGaWxlLCBnZXREZWZpbml0aW9uKCkpOwotCQkJaGVscGVyLnNldFdTRExDb21wb25lbnQobWVzc2FnZVJlZiwgIm1lc3NhZ2UiLCAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgc3BlY09iamVjdCk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCX0KLQotCXB1YmxpYyBJQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBnZXRDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyKCkgewotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gZ2V0UXVpY2tQaWNrcygpIHsKLQkJTGlzdCBzcGVjTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCUl0ZXJhdG9yIG1lc3NhZ2VzID0gZGVzY3JpcHRpb24uZ2V0TWVzc2FnZXMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAobWVzc2FnZXMuaGFzTmV4dCgpKSB7Ci0JCQlJTWVzc2FnZSBtZXNzYWdlID0gKElNZXNzYWdlKSBtZXNzYWdlcy5uZXh0KCk7Ci0JCQlTdHJpbmcgcXVhbGlmaWVyID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBuYW1lID0gbWVzc2FnZS5nZXROYW1lKCk7Ci0JCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJCQotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb24ocXVhbGlmaWVyLCBuYW1lLCBmaWxlKTsKLQkJCXNwZWMuc2V0T2JqZWN0KG1lc3NhZ2UpOwotCQkJc3BlY0xpc3QuYWRkKHNwZWMpOwotCQl9Ci0KLQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHNwZWNBcnJheSA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW3NwZWNMaXN0LnNpemUoKV07Ci0JCXNwZWNMaXN0LnRvQXJyYXkoc3BlY0FycmF5KTsKLQkJCi0JCXJldHVybiBzcGVjQXJyYXk7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRIaXN0b3J5KCkgewotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFRvSGlzdG9yeShDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudCkgewotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExCYXNlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEJhc2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRmZTM0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEJhc2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5TZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50TGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnRTZWFyY2hMaXN0UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGw7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMQmFzZVNlYXJjaExpc3RQcm92aWRlciBpbXBsZW1lbnRzIElDb21wb25lbnRTZWFyY2hMaXN0UHJvdmlkZXIgewotCQotCXByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0JCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlV1NETENvbXBvbmVudE9iamVjdHMoSUNvbXBvbmVudExpc3QgbGlzdCwgTGlzdCBpbnB1dENvbXBvbmVudHMsIFF1YWxpZmllZE5hbWUgbWV0YU5hbWUpIHsKLQkJSXRlcmF0b3IgaXQgPSBpbnB1dENvbXBvbmVudHMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpIGl0Lm5leHQoKTsKLQkJCVN0cmluZyBuYW1lID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgcXVhbGlmaWVyID0gd3NkbEVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWMgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbigpOwotCQkJY29tcG9uZW50U3BlYy5zZXRNZXRhTmFtZShtZXRhTmFtZSk7Ci0JCQljb21wb25lbnRTcGVjLnNldE5hbWUobmFtZSk7Ci0JCQljb21wb25lbnRTcGVjLnNldFF1YWxpZmllcihxdWFsaWZpZXIpOwotCQkJCi0JCQlTdHJpbmcgbG9jYXRpb24gPSB3c2RsRWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0TG9jYXRpb24oKTsKLQkJCVN0cmluZyBwbGF0Zm9ybVJlc291cmNlID0gInBsYXRmb3JtOi9yZXNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChsb2NhdGlvbiAhPSBudWxsICYmIGxvY2F0aW9uLnN0YXJ0c1dpdGgocGxhdGZvcm1SZXNvdXJjZSkpIHsKLQkJCQlQYXRoIHBhdGggPSBuZXcgUGF0aChsb2NhdGlvbi5zdWJzdHJpbmcocGxhdGZvcm1SZXNvdXJjZS5sZW5ndGgoKSkpOwotCQkJCUlGaWxlIHJlc3VsdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKLQkJCQlpZiAocmVzdWx0ICE9IG51bGwpIHsKLQkJCQkJY29tcG9uZW50U3BlYy5zZXRGaWxlKHJlc3VsdCk7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlsaXN0LmFkZChjb21wb25lbnRTcGVjKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgTGlzdCBnZXRXU0RMRmlsZUltcG9ydHMoTGlzdCB3c2RsSW1wb3J0cykgewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUl0ZXJhdG9yIGl0ID0gd3NkbEltcG9ydHMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJSW1wb3J0SW1wbCBpbXBvcnRJdGVtID0gKEltcG9ydEltcGwpIGl0Lm5leHQoKTsKLQkJCWltcG9ydEl0ZW0uaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7ICAgICAgICAgIC8vIExvYWQgaWYgbmVjZXNzYXJ5Ci0JCQlpZiAoaW1wb3J0SXRlbS5nZXRFU2NoZW1hKCkgPT0gbnVsbCkgewotCQkJCWxpc3QuYWRkKGltcG9ydEl0ZW0pOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JLy9UT0RPICh0cnVuZykgbWFrZSB0aGlzIG9uZSBhYnN0cmFjdCB3aGVuIHdlIGFyZSBpbiBkZXZlbG9wbWVudCBwaGFzZSBhZ2FpbgotCXByb3RlY3RlZCBMaXN0IGdldFNlYXJjaGluZ0NvbXBvbmVudHMoRGVmaW5pdGlvbiBpbXBvcnREZWZpbml0aW9uKSB7Ci0JCXJldHVybiBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGdldEltcG9ydGVkQ29tcG9uZW50cyhJQ29tcG9uZW50TGlzdCBsaXN0LCBRdWFsaWZpZWROYW1lIG1ldGFOYW1lLCBIYXNoTWFwIGV4Y2x1c2lvbnMpIHsJCQotCQlJdGVyYXRvciBpbXBvcnRzSXQgPSBnZXRXU0RMRmlsZUltcG9ydHMoZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaW1wb3J0c0l0Lmhhc05leHQoKSkgewotCQkJSW1wb3J0IGltcG9ydEl0ZW0gPSAoSW1wb3J0KSBpbXBvcnRzSXQubmV4dCgpOwotCQkJU3RyaW5nIGxvY2F0aW9uID0gaW1wb3J0SXRlbS5nZXREZWZpbml0aW9uKCkuZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0JCQlleGNsdXNpb25zLnB1dChsb2NhdGlvbiwgQm9vbGVhbi5UUlVFICk7Ci0JCQlEZWZpbml0aW9uIGltcG9ydERlZmluaXRpb24gPSBpbXBvcnRJdGVtLmdldEVEZWZpbml0aW9uKCk7Ci0JCQlpZiAoaW1wb3J0RGVmaW5pdGlvbiAhPSBudWxsKQotCQkJewotCQkgIAkgIExpc3QgaW1wb3J0ZWRDb21wb25lbnRzID0gZ2V0U2VhcmNoaW5nQ29tcG9uZW50cyhpbXBvcnREZWZpbml0aW9uKTsJCQkKLQkJCSAgY3JlYXRlV1NETENvbXBvbmVudE9iamVjdHMobGlzdCwgaW1wb3J0ZWRDb21wb25lbnRzLCBtZXRhTmFtZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2VhcmNoT3V0c2lkZUN1cnJlbnRSZXNvdXJjZShJQ29tcG9uZW50TGlzdCBsaXN0LCBTZWFyY2hTY29wZSBzY29wZSwgUXVhbGlmaWVkTmFtZSBtZXRhTmFtZSwgTWFwIGV4Y2x1c2lvbnMpIHsKLQkJaWYgKHNjb3BlICE9IG51bGwpIHsKLQkJCVdTRExDb21wb25lbnRGaW5kZXIgZmluZGVyID0gbmV3IFdTRExDb21wb25lbnRGaW5kZXIobWV0YU5hbWUpOwotCQkJSXRlcmF0b3IgaXQgPSBmaW5kZXIuZ2V0V29ya2JlbmNoUmVzb3VyY2VDb21wb25lbnRzKHNjb3BlKS5pdGVyYXRvcigpOyAKLQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIGl0ZW0gPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgaXQubmV4dCgpOwotCQkJCVN0cmluZyBpdGVtVVJJID0gVVJJSGVscGVyLmdldFBsYXRmb3JtVVJJKGl0ZW0uZ2V0RmlsZSgpKTsKLQkJCQlpZiAoZXhjbHVzaW9ucy5nZXQoaXRlbVVSSSkgPT0gbnVsbCl7Ci0JCQkJCWxpc3QuYWRkKGl0ZW0pOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQmluZGluZ1NlYXJjaExpc3RQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExCaW5kaW5nU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0M2M3MTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExCaW5kaW5nU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5TZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIgZXh0ZW5kcyBXU0RMQmFzZVNlYXJjaExpc3RQcm92aWRlciB7Ci0JcHVibGljIFdTRExCaW5kaW5nU2VhcmNoTGlzdFByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBwb3B1bGF0ZUNvbXBvbmVudExpc3QoSUNvbXBvbmVudExpc3QgbGlzdCwgU2VhcmNoU2NvcGUgc2NvcGUsIElQcm9ncmVzc01vbml0b3IgcG0pIHsKLQkJLy8gR3JhYiBleHBsaWN0bHkgZGVmaW5lZCBjb21wb25lbnRzCi0JCWNyZWF0ZVdTRExDb21wb25lbnRPYmplY3RzKGxpc3QsIGRlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCksIElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FKTsKLQotCQkvLyBGaWxlcyBleGNsdWRlZCBpZiB3ZSBzZWFyY2ggd2l0aCB0aGUgc2VhcmNoIGVuZ2luZSBsYXRlcgotCQlIYXNoTWFwIGV4Y2x1c2lvbnMgPSBuZXcgSGFzaE1hcCgpOwkKLQkJZXhjbHVzaW9ucy5wdXQoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgQm9vbGVhbi5UUlVFKTsJCQotCQkKLQkJLy8gR3JhYiBkaXJlY3RseSBpbXBvcnRlZCBjb21wb25lbnRzIGFuZCB1cGRhdGUgdGhlIGV4Y2x1c2lvbnMgJ2xpc3QnCi0JCWdldEltcG9ydGVkQ29tcG9uZW50cyhsaXN0LCBJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSwgZXhjbHVzaW9ucyk7Ci0KLQkJc2VhcmNoT3V0c2lkZUN1cnJlbnRSZXNvdXJjZShsaXN0LCBzY29wZSwgSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUsIGV4Y2x1c2lvbnMpOwotCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldFNlYXJjaGluZ0NvbXBvbmVudHMoRGVmaW5pdGlvbiBpbXBvcnREZWZpbml0aW9uKSB7Ci0JCXJldHVybiBpbXBvcnREZWZpbml0aW9uLmdldEVCaW5kaW5ncygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNjQyNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guU2VhcmNoTWF0Y2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciB7Ci0JICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJbWFnZSBCSU5ESU5HX0lNQUdFID0gIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYmluZGluZ19vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkgIHByaXZhdGUgc3RhdGljIGZpbmFsIEltYWdlIFBPUlRUWVBFX0lNQUdFID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wb3J0dHlwZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkgIHByaXZhdGUgc3RhdGljIGZpbmFsIEltYWdlIE1FU1NBR0VfSU1BR0UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL21lc3NhZ2Vfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgYm9vbGVhbiBpc0FwcGxpY2FibGUoT2JqZWN0IGNvbXBvbmVudCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFF1YWxpZmllcihPYmplY3QgY29tcG9uZW50KSB7Ci0JICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotCSAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikKLQkgICAgewotCSAgICAgIHJlc3VsdCA9ICgoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiljb21wb25lbnQpLmdldFF1YWxpZmllcigpOwotCSAgICB9ICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpCi0JICAgIHsKLQkgICAgICByZXN1bHQgPSAoKFdTRExFbGVtZW50KSBjb21wb25lbnQpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsgCi0JICAgIH0gIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBTZWFyY2hNYXRjaCkKLQkgICAgewotCSAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZSA9IGdldFF1YWxpZmllZE5hbWVGb3JTZWFyY2hNYXRjaCgoU2VhcmNoTWF0Y2gpY29tcG9uZW50KTsKLQkgICAgICBpZiAocXVhbGlmaWVkTmFtZSAhPSBudWxsKQotCSAgICAgIHsgIAotCSAgICAgICAgcmVzdWx0ID0gcXVhbGlmaWVkTmFtZS5nZXROYW1lc3BhY2UoKTsKLQkgICAgICB9ICAgIAotCSAgICB9ICAKLQkgICAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoT2JqZWN0IGNvbXBvbmVudCkgewotCSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pCi0JICAgIHsKLQkgICAgICByZXN1bHQgPSAoKENvbXBvbmVudFNwZWNpZmljYXRpb24pY29tcG9uZW50KS5nZXROYW1lKCk7Ci0JICAgIH0gIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLQkgICAgewotCSAgICAgIHJlc3VsdCA9ICgoV1NETEVsZW1lbnQpY29tcG9uZW50KS5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCJuYW1lIik7ICAvLyROT04tTkxTLTEkCi0JICAgIH0gIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBTZWFyY2hNYXRjaCkKLQkgICAgewotCSAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZSA9IGdldFF1YWxpZmllZE5hbWVGb3JTZWFyY2hNYXRjaCgoU2VhcmNoTWF0Y2gpY29tcG9uZW50KTsKLQkgICAgICBpZiAocXVhbGlmaWVkTmFtZSAhPSBudWxsKQotCSAgICAgIHsgIAotCSAgICAgICAgcmVzdWx0ID0gcXVhbGlmaWVkTmFtZS5nZXRMb2NhbE5hbWUoKTsKLQkgICAgICB9ICAgIAotCSAgICB9ICAgICAgCi0JICAgIHJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIEltYWdlIGdldEZpbGVJY29uKE9iamVjdCBjb21wb25lbnQpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvd3NkbF9maWxlX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBJRmlsZSBnZXRGaWxlKE9iamVjdCBjb21wb25lbnQpIHsKLQkgICAgSUZpbGUgcmVzdWx0ID0gbnVsbDsKLQkgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pCi0JICAgIHsKLQkgICAgICByZXN1bHQgPSAoKENvbXBvbmVudFNwZWNpZmljYXRpb24pY29tcG9uZW50KS5nZXRGaWxlKCk7Ci0JICAgIH0gIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBTZWFyY2hNYXRjaCkKLQkgICAgewotCSAgICAgIHJlc3VsdCA9ICgoU2VhcmNoTWF0Y2gpY29tcG9uZW50KS5nZXRGaWxlKCk7Ci0JICAgIH0gIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLQkgICAgewotCSAgICAgIFdTRExFbGVtZW50IGNvbmNyZXRlQ29tcG9uZW50ID0gKFdTRExFbGVtZW50KSBjb21wb25lbnQ7Ci0JICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gY29uY3JldGVDb21wb25lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0JICAgICAgewotCSAgICAgICAgLy8gVE9ETyAoY3MpIHJldmlzaXQgYW5kIHRlc3QgbW9yZQotCSAgICAgICAgLy8KLQkgICAgICAgIFN0cmluZyBsb2NhdGlvbiA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLQkgICAgICAgIFN0cmluZyBwbGF0Zm9ybVJlc291cmNlID0gInBsYXRmb3JtOi9yZXNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLQkgICAgICAgIGlmIChsb2NhdGlvbiAhPSBudWxsICYmIGxvY2F0aW9uLnN0YXJ0c1dpdGgocGxhdGZvcm1SZXNvdXJjZSkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIFBhdGggcGF0aCA9IG5ldyBQYXRoKGxvY2F0aW9uLnN1YnN0cmluZyhwbGF0Zm9ybVJlc291cmNlLmxlbmd0aCgpKSk7Ci0JICAgICAgICAgIHJlc3VsdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKLQkgICAgICAgIH0KLQkgICAgICB9ICAKLQkgICAgfQotCSAgICByZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBJTGFiZWxQcm92aWRlciBnZXRMYWJlbFByb3ZpZGVyKCkgewotCQlyZXR1cm4gdGhpczsKLQl9Ci0JCi0JICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKLQkgICAgU3RyaW5nIHJlc3VsdCA9ICIiOyAvLyROT04tTkxTLTEkCi0JICAgIFN0cmluZyBuYW1lID0gZ2V0TmFtZShlbGVtZW50KTsKLQkgICAgaWYgKG5hbWUgIT0gbnVsbCkgewotCSAgICAgIHJlc3VsdCArPSBuYW1lOwotCSAgICB9Ci0JICAgIHJldHVybiByZXN1bHQ7Ci0JICB9IAotCSAgCi0JICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGNvbXBvbmVudCkKLQkgIHsKLQkgICAgSW1hZ2UgcmVzdWx0ID0gbnVsbDsKLQkgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pCi0JICAgIHsKLQkgICAgCVF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZSA9ICgoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgY29tcG9uZW50KS5nZXRNZXRhTmFtZSgpOwotCSAgICAJaWYgKCBxdWFsaWZpZWROYW1lICE9IG51bGwgKXsKLQkgICAgCQlpZiAoIHF1YWxpZmllZE5hbWUuZXF1YWxzKElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FKSkKLQkgICAgCQkJcmVzdWx0ID0gQklORElOR19JTUFHRTsKLQkgICAgCQllbHNlIGlmICggcXVhbGlmaWVkTmFtZS5lcXVhbHMoSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSkpCi0JICAgIAkJCXJlc3VsdCA9IFBPUlRUWVBFX0lNQUdFOwotCSAgICAJCWVsc2UgaWYgKCBxdWFsaWZpZWROYW1lLmVxdWFscyhJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSkpCi0JICAgIAkJCXJlc3VsdCA9IE1FU1NBR0VfSU1BR0U7Ci0KLQkgICAgCX0KLQkgICAgfQotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBTZWFyY2hNYXRjaCkKLQkgICAgewotCSAgICAgIFNlYXJjaE1hdGNoIHNlYXJjaE1hdGNoID0gKFNlYXJjaE1hdGNoKWNvbXBvbmVudDsKLQkgICAgICBRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSAoUXVhbGlmaWVkTmFtZSlzZWFyY2hNYXRjaC5tYXAuZ2V0KCJtZXRhTmFtZSIpOyAvLyROT04tTkxTLTEkCi0JICAgICAgaWYgKCBxdWFsaWZpZWROYW1lICE9IG51bGwgKXsKLQkgICAgCSAgaWYgKCBxdWFsaWZpZWROYW1lLmVxdWFscyhJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSkpCi0JICAgIAkJICByZXN1bHQgPSBCSU5ESU5HX0lNQUdFOwotCSAgICAJICBlbHNlIGlmICggcXVhbGlmaWVkTmFtZS5lcXVhbHMoSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSkpCi0JICAgIAkJICByZXN1bHQgPSBQT1JUVFlQRV9JTUFHRTsKLQkgICAgCQllbHNlIGlmICggcXVhbGlmaWVkTmFtZS5lcXVhbHMoSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpKQotCSAgICAJCQlyZXN1bHQgPSBNRVNTQUdFX0lNQUdFOwotCi0JICAgICAgfQotCSAgICB9ICAgICAgCi0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIEJpbmRpbmcpCi0JICAgICAgcmVzdWx0ID0gQklORElOR19JTUFHRTsgICAgICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgUG9ydFR5cGUpCi0JICAgICAgcmVzdWx0ID0gUE9SVFRZUEVfSU1BR0U7Ci0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIE1lc3NhZ2UpCi0JCSAgICAgIHJlc3VsdCA9IE1FU1NBR0VfSU1BR0U7Ci0KLQkgICAgcmV0dXJuIHJlc3VsdDsKLQkgIH0KLQkKLQlwcml2YXRlIFF1YWxpZmllZE5hbWUgZ2V0UXVhbGlmaWVkTmFtZUZvclNlYXJjaE1hdGNoKFNlYXJjaE1hdGNoIG1hdGNoKSB7Ci0JCVF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZSA9IG51bGw7Ci0JCU9iamVjdCBvID0gbWF0Y2gubWFwLmdldCgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JCWlmIChvICE9IG51bGwgJiYgbyBpbnN0YW5jZW9mIFF1YWxpZmllZE5hbWUpCi0JCXsgIAotCQkJcXVhbGlmaWVkTmFtZSA9IChRdWFsaWZpZWROYW1lKW87Ci0JCX0gICAgICAKLQkJcmV0dXJuIHF1YWxpZmllZE5hbWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExDb21wb25lbnRGaW5kZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQ29tcG9uZW50RmluZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhY2IzMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExDb21wb25lbnRGaW5kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLlNlYXJjaEVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLlNlYXJjaE1hdGNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5TZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC51dGlsLkNvbGxlY3RpbmdTZWFyY2hSZXF1ZXN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MQ29tcG9uZW50RGVjbGFyYXRpb25QYXR0ZXJuOwotCi1wdWJsaWMgY2xhc3MgV1NETENvbXBvbmVudEZpbmRlciB7Ci0JUXVhbGlmaWVkTmFtZSBtZXRhTmFtZTsKLSAgICBwdWJsaWMgV1NETENvbXBvbmVudEZpbmRlcihRdWFsaWZpZWROYW1lIG1ldGFOYW1lKSB7Ci0gICAgCXRoaXMubWV0YU5hbWUgPSBtZXRhTmFtZTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgZmluZENvbXBvbmVudHMoU2VhcmNoRW5naW5lIHNlYXJjaEVuZ2luZSwgTGlzdCBsaXN0LCBTZWFyY2hTY29wZSBzZWFyY2hTY29wZSkKLSAgICB7Ci0gICAgICB0cnkgewotICAgICAgICAgIENvbGxlY3RpbmdTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IENvbGxlY3RpbmdTZWFyY2hSZXF1ZXN0b3IoKTsKLSAgICAgICAgICAKLSAgICAgICAgICBYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4gcGF0dGVybiA9IG5ldyBYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4obmV3IFF1YWxpZmllZE5hbWUoIioiLCAiKiIpLCBtZXRhTmFtZSwgU2VhcmNoUGF0dGVybi5SX1BBVFRFUk5fTUFUQ0gpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBUT0RPIChjcykgcmV0aGluayB0aGUgY29tbWVudGVkIG91dCBjb2RlIGJlbG93LiAgSXMgdGhlcmUgc29tZSByZWFzb24gZm9yIG5hcnJvd2luZyB0byBsaXN0IG9mIHNlYXJjaCBwYXJ0aWNwYW50cz8KLSAgICAgICAgICAvLyBJdCBzZWVtcyB0aGUgb25seSBiZW5lZml0IG1heSBiZSB0byBmaWx0ZXIgb3VyIHhzZCBjb21wb25lbnQgZGVjbGFyYXRpb25zIHRoYXQgYXJlbid0IGRlZmluZWQKLSAgICAgICAgICAvLyBpbiBzdGFuZCBhbG9uZSB3c2RsIGRvY3VtZW50cy4gIFBlcmhhcHMgaXQncyBiZXN0IHRvIGRvIHRoaXMgd2l0aCBhbiBhZGRpdGlvbmFsIHByb3BlcnR5IGFyZyBvbiB0aGUKLSAgICAgICAgICAvLyBkZWNsYXJhdGlvbiBwYXR0ZXJuIG9yIHBlcmhhcHMgc2ltcGx5IGRvaW5nIHNvbWUgJ3Bvc3QnIGZpbHRlcmluZy4KLSAgICAgICAgICAvLwotICAgICAgICAgIC8vU3RyaW5nIHBhcnRpY2lwYW50SWQgPSBtZXRhTmFtZS5nZXROYW1lc3BhY2UoKS5lcXVhbHMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpID8KLSAgICAgICAgICAvLyAgICAib3JnLmVjbGlwc2Uud3N0LndzZGwuc2VhcmNoLldTRExTZWFyY2hQYXJ0aWNpcGFudCIgOgotICAgICAgICAgIC8vICAgICJvcmcuZWNsaXBzZS53c3QueHNkLnNlYXJjaC5YU0RTZWFyY2hQYXJ0aWNpcGFudCI7ICAgICAgICAJCSAgCi0gICAgICAgICAgLy9TZWFyY2hQYXJ0aWNpcGFudCBwYXJ0aWNwYW50ID0gU2VhcmNoUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTZWFyY2hQYXJ0aWNpcGFudChwYXJ0aWNpcGFudElkKTsgICAgICAgICAKLSAgICAgICAgICAvL1NlYXJjaFBhcnRpY2lwYW50W10gcGFydGljaXBhbnRzID0geyBwYXJ0aWNwYW50IH07ICAgICAKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBUT0RPIChjcykgSSdtIGJldHRpbmcgd2UnbGwgbmVlZCB0byBwcm92aWRlIHNvbWUgaG9vayBoZXJlIHRvIGFsbG93IGV4dGVuZGVycyB0byBjb25maWd1cmUKLSAgICAgICAgICAvLyB0aGUgc2VhcmNoIG9wdGlvbnMuICBDdXJyZW50bHkgd2UganVzdCBwYXNzIGluIG51bGwuCi0gICAgICAgICAgc2VhcmNoRW5naW5lLnNlYXJjaChwYXR0ZXJuLCByZXF1ZXN0b3IsIHNlYXJjaFNjb3BlLCBudWxsLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICAgICAgICAKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZXF1ZXN0b3IuZ2V0UmVzdWx0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgewotICAgICAgICAgICAgU2VhcmNoTWF0Y2ggbWF0Y2ggPSAoU2VhcmNoTWF0Y2gpaS5uZXh0KCk7Ci0gICAgICAgICAgICBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbigpOwotICAgICAgICAgICAgc3BlYy5zZXRNZXRhTmFtZShtZXRhTmFtZSk7Ci0gICAgICAgICAgICBzcGVjLnNldEZpbGUobWF0Y2guZ2V0RmlsZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgT2JqZWN0IG8gPSBtYXRjaC5tYXAuZ2V0KCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIGlmIChvICE9IG51bGwgJiYgbyBpbnN0YW5jZW9mIFF1YWxpZmllZE5hbWUpCi0gICAgICAgICAgICB7ICAKLSAgICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lID0gKFF1YWxpZmllZE5hbWUpbzsKLSAgICAgICAgICAgICAgaWYgKHF1YWxpZmllZE5hbWUuZ2V0TG9jYWxOYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNwZWMuc2V0TmFtZShxdWFsaWZpZWROYW1lLmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBzcGVjLnNldFF1YWxpZmllcihxdWFsaWZpZWROYW1lLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICAgICAgICBsaXN0LmFkZChzcGVjKTsKLSAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICB9ICAKLSAgICAgICAgICB9ICAKLSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgIC8vc3RhdHVzLmFkZChlLmdldFN0YXR1cygpKTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIExpc3QgZ2V0V29ya2JlbmNoUmVzb3VyY2VDb21wb25lbnRzKFNlYXJjaFNjb3BlIHNjb3BlKSB7Ci0KLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBTZWFyY2hFbmdpbmUgc2VhcmNoRW5naW5lID0gbmV3IFNlYXJjaEVuZ2luZSgpOwotICAgICAgICBmaW5kQ29tcG9uZW50cyhzZWFyY2hFbmdpbmUsIGxpc3QsIHNjb3BlKTsgICAgCi0gICAgICAgIHJldHVybiBsaXN0OyAgICAgICAKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEludGVyZmFjZVNlYXJjaExpc3RQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlODI2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEludGVyZmFjZVNlYXJjaExpc3RQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50TGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXIgZXh0ZW5kcyBXU0RMQmFzZVNlYXJjaExpc3RQcm92aWRlciB7Ci0JcHVibGljIFdTRExJbnRlcmZhY2VTZWFyY2hMaXN0UHJvdmlkZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHBvcHVsYXRlQ29tcG9uZW50TGlzdChJQ29tcG9uZW50TGlzdCBsaXN0LCBTZWFyY2hTY29wZSBzY29wZSwgSVByb2dyZXNzTW9uaXRvciBwbSkgewotCQkvLyBHcmFiIGV4cGxpY3RseSBkZWZpbmVkIGNvbXBvbmVudHMKLQkJY3JlYXRlV1NETENvbXBvbmVudE9iamVjdHMobGlzdCwgZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCksIElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUpOwotCi0JCS8vIEZpbGVzIGV4Y2x1ZGVkIGlmIHdlIHNlYXJjaCB3aXRoIHRoZSBzZWFyY2ggZW5naW5lIGxhdGVyCi0JCUhhc2hNYXAgZXhjbHVzaW9ucyA9IG5ldyBIYXNoTWFwKCk7CQotCQlleGNsdXNpb25zLnB1dChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBCb29sZWFuLlRSVUUpOwkJCi0JCQotCQkvLyBHcmFiIGRpcmVjdGx5IGltcG9ydGVkIGNvbXBvbmVudHMgYW5kIHVwZGF0ZSB0aGUgZXhjbHVzaW9ucyAnbGlzdCcKLQkJZ2V0SW1wb3J0ZWRDb21wb25lbnRzKGxpc3QsIElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUsIGV4Y2x1c2lvbnMpOwotCi0JCXNlYXJjaE91dHNpZGVDdXJyZW50UmVzb3VyY2UobGlzdCwgc2NvcGUsIElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUsIGV4Y2x1c2lvbnMpOwotCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldFNlYXJjaGluZ0NvbXBvbmVudHMoRGVmaW5pdGlvbiBpbXBvcnREZWZpbml0aW9uKSB7Ci0JCXJldHVybiBpbXBvcnREZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKTsKLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETE1lc3NhZ2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4ZDRlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETE1lc3NhZ2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnNjb3BlLlNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTWVzc2FnZVNlYXJjaExpc3RQcm92aWRlciBleHRlbmRzIFdTRExCYXNlU2VhcmNoTGlzdFByb3ZpZGVyIHsKLQlwdWJsaWMgV1NETE1lc3NhZ2VTZWFyY2hMaXN0UHJvdmlkZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHBvcHVsYXRlQ29tcG9uZW50TGlzdChJQ29tcG9uZW50TGlzdCBsaXN0LCBTZWFyY2hTY29wZSBzY29wZSwgSVByb2dyZXNzTW9uaXRvciBwbSkgewotCQkvLyBHcmFiIGV4cGxpY3RseSBkZWZpbmVkIGNvbXBvbmVudHMKLQkJY3JlYXRlV1NETENvbXBvbmVudE9iamVjdHMobGlzdCwgZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKSwgSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpOwotCi0JCS8vIEZpbGVzIGV4Y2x1ZGVkIGlmIHdlIHNlYXJjaCB3aXRoIHRoZSBzZWFyY2ggZW5naW5lIGxhdGVyCi0JCUhhc2hNYXAgZXhjbHVzaW9ucyA9IG5ldyBIYXNoTWFwKCk7CQotCQlleGNsdXNpb25zLnB1dChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBCb29sZWFuLlRSVUUpOwkJCi0JCQotCQkvLyBHcmFiIGRpcmVjdGx5IGltcG9ydGVkIGNvbXBvbmVudHMgYW5kIHVwZGF0ZSB0aGUgZXhjbHVzaW9ucyAnbGlzdCcKLQkJZ2V0SW1wb3J0ZWRDb21wb25lbnRzKGxpc3QsIElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBleGNsdXNpb25zKTsJCQotCQkKLQkJc2VhcmNoT3V0c2lkZUN1cnJlbnRSZXNvdXJjZShsaXN0LCBzY29wZSwgSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUsIGV4Y2x1c2lvbnMpOwotCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldFNlYXJjaGluZ0NvbXBvbmVudHMoRGVmaW5pdGlvbiBpbXBvcnREZWZpbml0aW9uKSB7Ci0JCXJldHVybiBpbXBvcnREZWZpbml0aW9uLmdldEVNZXNzYWdlcygpOwotCX0JCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkODNiYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMU2V0Q29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5JWFNEU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGV4dGVuZHMJWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHsKLQlwdWJsaWMgV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcihJRmlsZSBjdXJyZW50RmlsZSwgWFNEU2NoZW1hW10gc2NoZW1hcykgewotCQlzdXBlcihjdXJyZW50RmlsZSwgc2NoZW1hcyk7Ci0JfQotCQotCXB1YmxpYyBXU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKElGaWxlIGN1cnJlbnRGaWxlLCBYU0RTY2hlbWFbXSBzY2hlbWFzLCBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJc3VwZXIoY3VycmVudEZpbGUsIG51bGwpOwotCQlpZiAoc2NoZW1hcyA9PSBudWxsIHx8IHNjaGVtYXMubGVuZ3RoID09IDApIHsKLQkJCXNldFNjaGVtYXMoZ2V0SW5saW5lU2NoZW1hcyhkZXNjcmlwdGlvbikpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgbW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKE9iamVjdCByZWZlcmVuY2luZ09iamVjdCwgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnQpIHsKLQkJaWYgKHJlZmVyZW5jaW5nT2JqZWN0IGluc3RhbmNlb2YgQWRhcHRlcikgewotCQkJQWRhcHRlciBhZGFwdGVyID0gKEFkYXB0ZXIpIHJlZmVyZW5jaW5nT2JqZWN0OwotCQkJcmVmZXJlbmNpbmdPYmplY3QgPSBhZGFwdGVyLmdldFRhcmdldCgpOwotCQl9Ci0JCQotCQlpZiAocmVmZXJlbmNpbmdPYmplY3QgaW5zdGFuY2VvZiBQYXJ0KSB7Ci0JCQlQYXJ0IHBhcnQgPSAoUGFydCkgcmVmZXJlbmNpbmdPYmplY3Q7Ci0JCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJCWlmIChBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKSBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLQkJCQlmaWxlID0gKChJRmlsZUVkaXRvcklucHV0KSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKSkuZ2V0RmlsZSgpOwotCQkJfQotCQkJCi0JCQlpZiAoY29tcG9uZW50LmlzTmV3KCkpIHsgIAotCQkJCWlmIChjb21wb25lbnQuZ2V0TWV0YU5hbWUoKSA9PSBJWFNEU2VhcmNoQ29uc3RhbnRzLkVMRU1FTlRfTUVUQV9OQU1FKSB7Ci0JCQkJCUFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBjb21wb25lbnQuZ2V0TmFtZSgpKTsKLQkJCQkJY29tbWFuZC5ydW4oKTsKLQkJCQkJU3RyaW5nIHRucyA9IGNvbW1hbmQuZ2V0WFNERWxlbWVudCgpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJCQljb21wb25lbnQuc2V0UXVhbGlmaWVyKHRucyk7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlXU0RMU2V0Q29tcG9uZW50SGVscGVyIGhlbHBlciA9IG5ldyBXU0RMU2V0Q29tcG9uZW50SGVscGVyKGZpbGUsIHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJCWhlbHBlci5zZXRYU0RFbGVtZW50Q29tcG9uZW50KHBhcnQsIGNvbXBvbmVudCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGdldFF1aWNrUGlja3MoKSB7Ci0vLwkJRWxlbWVudENvbXBvbmVudExpc3QgbGlzdCA9IG5ldyBFbGVtZW50Q29tcG9uZW50TGlzdCgpOwotLy8JCQotLy8JCWlmIChBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKSBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLS8vCQkJSUZpbGUgZmlsZSA9ICgoSUZpbGVFZGl0b3JJbnB1dCkgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCkpLmdldEZpbGUoKTsKLS8vCQkJWFNERWxlbWVudHNTZWFyY2hMaXN0UHJvdmlkZXIgcHJvdmlkZXIgPSBuZXcgWFNERWxlbWVudHNTZWFyY2hMaXN0UHJvdmlkZXIoZmlsZSwgc2NoZW1hcyk7Ci0vLwkJCXByb3ZpZGVyLnBvcHVsYXRlQ29tcG9uZW50TGlzdChsaXN0LCBudWxsLCBudWxsKTsKLS8vCQl9Ci0vLwotLy8JCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlY3NbXSA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW2xpc3Quc2l6ZSgpXTsKLS8vCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbGlzdC5zaXplKCk7IGluZGV4KyspIHsKLS8vCQkJc3BlY3NbaW5kZXhdID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGxpc3QuZ2V0KGluZGV4KTsKLS8vCQl9Ci0JCQotCQlyZXR1cm4gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb25bMF07Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFNjaGVtYXMoWFNEU2NoZW1hW10gc2NoZW1hcykgewotCQl0aGlzLnNjaGVtYXMgPSBzY2hlbWFzOwotCX0KLQkKLQlwcml2YXRlIFhTRFNjaGVtYVtdIGdldElubGluZVNjaGVtYXMoSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCUxpc3QgdHlwZXMgPSBkZXNjcmlwdGlvbi5nZXRUeXBlcygpOwotCQlYU0RTY2hlbWFbXSBzY2hlbWFzID0gbmV3IFhTRFNjaGVtYVt0eXBlcy5zaXplKCldOwotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQlXMTFUeXBlIHR5cGUgPSAoVzExVHlwZSkgdHlwZXMuZ2V0KGluZGV4KTsKLQkJCXNjaGVtYXNbaW5kZXhdID0gKFhTRFNjaGVtYSkgdHlwZS5nZXRUYXJnZXQoKTsKLQkJfQotCQkKLQkJcmV0dXJuIHNjaGVtYXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMGU1MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMU2V0Q29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmRpYWxvZ3MuTmV3VHlwZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guSVhTRFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIgZXh0ZW5kcyBYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIgewotCQotCXB1YmxpYyBXU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKElGaWxlIGN1cnJlbnRGaWxlLCBYU0RTY2hlbWFbXSBzY2hlbWFzKSB7Ci0JCXN1cGVyKGN1cnJlbnRGaWxlLCBzY2hlbWFzKTsKLQl9Ci0JCi0JcHVibGljIFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoSUZpbGUgY3VycmVudEZpbGUsIFhTRFNjaGVtYVtdIHNjaGVtYXMsIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQlzdXBlcihjdXJyZW50RmlsZSwgbnVsbCk7Ci0JCWlmIChzY2hlbWFzID09IG51bGwgfHwgc2NoZW1hcy5sZW5ndGggPT0gMCkgewotCQkJc2V0U2NoZW1hcyhnZXRJbmxpbmVTY2hlbWFzKGRlc2NyaXB0aW9uKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIElDb21wb25lbnREaWFsb2cgZ2V0TmV3RGlhbG9nKCkKLQl7Ci0JCWlmIChzY2hlbWFzLmxlbmd0aCA+IDApIHsKLQkJCU5ld1R5cGVEaWFsb2cgbmV3VHlwZURpYWxvZyA9IG5ldyBOZXdUeXBlRGlhbG9nKHNjaGVtYXNbMF0pOwotCQkJbmV3VHlwZURpYWxvZy5hbGxvd0Fub255bW91c1R5cGUoZmFsc2UpOwotCQkJcmV0dXJuIG5ld1R5cGVEaWFsb2c7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlOZXdUeXBlRGlhbG9nIG5ld1R5cGVEaWFsb2cgPSBuZXcgTmV3VHlwZURpYWxvZygpOwotCQkJbmV3VHlwZURpYWxvZy5hbGxvd0Fub255bW91c1R5cGUoZmFsc2UpOwotCQkJcmV0dXJuIG5ld1R5cGVEaWFsb2c7Ci0JCX0KLQl9CQotCi0JcHVibGljIHZvaWQgbW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKE9iamVjdCByZWZlcmVuY2luZ09iamVjdCwgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnQpIHsKLQkJaWYgKHJlZmVyZW5jaW5nT2JqZWN0IGluc3RhbmNlb2YgQWRhcHRlcikgewotCQkJQWRhcHRlciBhZGFwdGVyID0gKEFkYXB0ZXIpIHJlZmVyZW5jaW5nT2JqZWN0OwotCQkJcmVmZXJlbmNpbmdPYmplY3QgPSBhZGFwdGVyLmdldFRhcmdldCgpOwotCQl9Ci0JCQotCQlpZiAocmVmZXJlbmNpbmdPYmplY3QgaW5zdGFuY2VvZiBQYXJ0KSB7Ci0JCQlQYXJ0IHBhcnQgPSAoUGFydCkgcmVmZXJlbmNpbmdPYmplY3Q7Ci0JCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJCWlmIChBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKSBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLQkJCQlmaWxlID0gKChJRmlsZUVkaXRvcklucHV0KSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKSkuZ2V0RmlsZSgpOwotCQkJfQotCQkJCi0JCQlpZiAoY29tcG9uZW50LmlzTmV3KCkpIHsgIAotCQkJCUFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZChwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgY29tcG9uZW50LmdldE5hbWUoKSk7Ci0JCQkJaWYgKGNvbXBvbmVudC5nZXRNZXRhTmFtZSgpID09IElYU0RTZWFyY2hDb25zdGFudHMuQ09NUExFWF9UWVBFX01FVEFfTkFNRSkgewotCQkJCQljb21tYW5kLmlzQ29tcGxleFR5cGUodHJ1ZSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQljb21tYW5kLmlzQ29tcGxleFR5cGUoZmFsc2UpOwotCQkJCX0KLQkJCQljb21tYW5kLnJ1bigpOwotCQkJCVN0cmluZyB0bnMgPSBjb21tYW5kLmdldFhTREVsZW1lbnQoKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCQljb21wb25lbnQuc2V0UXVhbGlmaWVyKHRucyk7Ci0JCQl9Ci0JCQkKLQkJCVdTRExTZXRDb21wb25lbnRIZWxwZXIgaGVscGVyID0gbmV3IFdTRExTZXRDb21wb25lbnRIZWxwZXIoZmlsZSwgcGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQkJaGVscGVyLnNldFhTRFR5cGVDb21wb25lbnQocGFydCwgY29tcG9uZW50KTsKLQkJfQotCQllbHNlIGlmIChyZWZlcmVuY2luZ09iamVjdCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJc3VwZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHJlZmVyZW5jaW5nT2JqZWN0LCBjb21wb25lbnQpOwotCQl9Ci0JCWVsc2UgaWYgKHJlZmVyZW5jaW5nT2JqZWN0IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlVXNlKSB7Ci0JCQkKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNjaGVtYXMoWFNEU2NoZW1hW10gc2NoZW1hcykgewotCQl0aGlzLnNjaGVtYXMgPSBzY2hlbWFzOwotCX0KLQkKLQlwcml2YXRlIFhTRFNjaGVtYVtdIGdldElubGluZVNjaGVtYXMoSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCUxpc3QgdHlwZXMgPSBkZXNjcmlwdGlvbi5nZXRUeXBlcygpOwotCQlYU0RTY2hlbWFbXSBzY2hlbWFzID0gbmV3IFhTRFNjaGVtYVt0eXBlcy5zaXplKCldOwotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQlXMTFUeXBlIHR5cGUgPSAoVzExVHlwZSkgdHlwZXMuZ2V0KGluZGV4KTsKLQkJCXNjaGVtYXNbaW5kZXhdID0gKFhTRFNjaGVtYSkgdHlwZS5nZXRUYXJnZXQoKTsKLQkJfQotCQkKLQkJcmV0dXJuIHNjaGVtYXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0V4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVyUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9FeHRlbnNpYmlsaXR5SXRlbVRyZWVQcm92aWRlclJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZDE4MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0V4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVyUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlYWRzIHRoZSBwbHVnaW4gbWFuaWZlc3RzIGFuZCByZWdpc3RlcnMgZWFjaCBleHRlbnNpYmlsaXR5IGl0ZW0gdHJlZSBwcm92aWRlcgotICovCi1wdWJsaWMgY2xhc3MgRXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXJSZWdpc3RyeSBleHRlbmRzIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeQotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQUJFTF9QUk9WSURFUl9QUk9QRVJUWSA9ICJsYWJlbFByb3ZpZGVyQ2xhc3MiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfUFJPVklERVJfUFJPUEVSVFkgPSAiY29udGVudFByb3ZpZGVyQ2xhc3MiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nW10gQVRUX05BTUVTID0geyAibGFiZWxQcm92aWRlckNsYXNzIiwgImNvbnRlbnRQcm92aWRlckNsYXNzIiB9OyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotICBwdWJsaWMgSUxhYmVsUHJvdmlkZXIgZ2V0TGFiZWxQcm92aWRlcihTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgcmV0dXJuIChJTGFiZWxQcm92aWRlcikgZ2V0UHJvcGVydHkobmFtZXNwYWNlLCBMQUJFTF9QUk9WSURFUl9QUk9QRVJUWSk7Ci0gIH0KLQotICBwdWJsaWMgSVRyZWVDaGlsZFByb3ZpZGVyIGdldENvbnRlbnRQcm92aWRlcihTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgcmV0dXJuIChJVHJlZUNoaWxkUHJvdmlkZXIpIGdldFByb3BlcnR5KG5hbWVzcGFjZSwgQ09OVEVOVF9QUk9WSURFUl9QUk9QRVJUWSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9FeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDRjYmRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9FeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuWFNEVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBFeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyIGltcGxlbWVudHMgSVR5cGVTeXN0ZW1Qcm92aWRlcgotewotICBwcm90ZWN0ZWQgV1NETEVkaXRvckV4dGVuc2lvbltdIGV4dGVuc2lvbnM7Ci0gIHByb3RlY3RlZCBJVHlwZVN5c3RlbVByb3ZpZGVyW10gdHlwZVN5c3RlbVByb3ZpZGVyczsKLQotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIE9iamVjdFtdIEVNUFRZX0FSUkFZID0ge307Ci0KLSAgcHVibGljIEV4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXIoKQotICB7Ci0gICAgdHlwZVN5c3RlbVByb3ZpZGVycyA9IG5ldyBJVHlwZVN5c3RlbVByb3ZpZGVyWzFdOyAKLSAgICB0eXBlU3lzdGVtUHJvdmlkZXJzWzBdID0gbmV3IFhTRFR5cGVTeXN0ZW1Qcm92aWRlcigpOwotICB9ICAgICAgICAgIAotICAgICAgICAKLSAgcHVibGljIExpc3QgZ2V0QXZhaWxhYmxlVHlwZU5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgaW50IHR5cGVOYW1lQ2F0ZWdvcnkpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlU3lzdGVtUHJvdmlkZXJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGxpc3QuYWRkQWxsKHR5cGVTeXN0ZW1Qcm92aWRlcnNbaV0uZ2V0QXZhaWxhYmxlVHlwZU5hbWVzKGRlZmluaXRpb24sIHR5cGVOYW1lQ2F0ZWdvcnkpKTsKLSAgICB9ICAgCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZVR5cGVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgWFNEU2NoZW1hIHNjaGVtYSwgaW50IHR5cGVOYW1lQ2F0ZWdvcnkpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlU3lzdGVtUHJvdmlkZXJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGxpc3QuYWRkQWxsKHR5cGVTeXN0ZW1Qcm92aWRlcnNbaV0uZ2V0QXZhaWxhYmxlVHlwZXMoZGVmaW5pdGlvbiwgc2NoZW1hLCB0eXBlTmFtZUNhdGVnb3J5KSk7Ci0gICAgfSAgIAotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVTeXN0ZW1Qcm92aWRlcnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgbGlzdC5hZGRBbGwodHlwZVN5c3RlbVByb3ZpZGVyc1tpXS5nZXRBdmFpbGFibGVFbGVtZW50TmFtZXMoZGVmaW5pdGlvbikpOwotICAgIH0gICAgIAotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIGludCBnZXRDYXRlZ29yeUZvclR5cGVOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgaW50IHJlc3VsdCA9IFVOS05PV05fVFlQRTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVTeXN0ZW1Qcm92aWRlcnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcmVzdWx0ID0gdHlwZVN5c3RlbVByb3ZpZGVyc1tpXS5nZXRDYXRlZ29yeUZvclR5cGVOYW1lKGRlZmluaXRpb24sIHR5cGVOYW1lKTsKLSAgICAgIGlmIChyZXN1bHQgIT0gVU5LTk9XTl9UWVBFKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0UHJlZml4ZWROYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpIHsKLSAgCSBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVN5c3RlbVByb3ZpZGVycy5sZW5ndGg7IGkrKykKLSAgICAgewotICAgICAgIGxpc3QuYWRkQWxsKHR5cGVTeXN0ZW1Qcm92aWRlcnNbaV0uZ2V0UHJlZml4ZWROYW1lcyhkZWZpbml0aW9uLCBuYW1lc3BhY2UsIGxvY2FsTmFtZSkpOwotICAgICB9ICAgICAKLSAgICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZjBhZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lOb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyCi17ICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIE9iamVjdCBnZXRNb2RlbE9iamVjdChPYmplY3QgcGFyZW50TW9kZWxPYmplY3QsIEVsZW1lbnRbXSBlbGVtZW50Q2hhaW4sIGludCBzdGFydCwgaW50W10gZW5kKTsKLSAgcHVibGljIE5vZGUgZ2V0Tm9kZShPYmplY3QgbW9kZWxPYmplY3QpOyAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSU5vZGVSZWNvbmNpbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSU5vZGVSZWNvbmNpbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OTJkM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lOb2RlUmVjb25jaWxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEBkZXByZWFjdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSU5vZGVSZWNvbmNpbGVyCi17Ci0gIHB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoT2JqZWN0IG1vZGVsT2JqZWN0LCBFbGVtZW50IGVsZW1lbnQsIGludCBldmVudFR5cGUsIE9iamVjdCBmZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IGluZGV4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JVHJlZUNoaWxkUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JVHJlZUNoaWxkUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViZjUzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSVRyZWVDaGlsZFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGFsbG93cyBleHRlbnNpb24gd3JpdGVycyB0byBwcm92aWRlIHNwZWNpYWxpemUgdHJlZSBjb250ZW50IGJlaGF2aW91ci4KLSAqIEl0IGlzIGludGVuZGVkIHRvIGJlaGF2ZSBzaW1pbGFyIHRvIHRoZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyLgotICogVGhlIG1ham9yIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGlzIGNsYXNzIGlzIHNpbXBsaWZpZWQgc28gdGhhdCBvbmx5IG9uZSBtZXRob2QgaXMgaW52b2x2ZWQuCi0gKiAKLSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KSAgCQotICovCi1wdWJsaWMgaW50ZXJmYWNlIElUcmVlQ2hpbGRQcm92aWRlcgotewotCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSVR5cGVTeXN0ZW1Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTE0ODIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgaW50ZXJmYWNlIElUeXBlU3lzdGVtUHJvdmlkZXIKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5LTk9XTl9UWVBFID0gMHgwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVUlMVF9JTl9UWVBFID0gMHgxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSX0RFRklORURfU0lNUExFX1RZUEUgPSAweDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJfREVGSU5FRF9DT01QTEVYX1RZUEUgPSAweDQ7Ci0KLSAgcHVibGljIExpc3QgZ2V0QXZhaWxhYmxlVHlwZU5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgaW50IHR5cGVOYW1lQ2F0ZWdvcnkpOwotICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVFbGVtZW50TmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKTsgIAotICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVUeXBlcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFhTRFNjaGVtYSBzY2hlbWEsIGludCB0eXBlTmFtZUNhdGVnb3J5KTsKLSAgcHVibGljIGludCBnZXRDYXRlZ29yeUZvclR5cGVOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lKTsKLSAgcHVibGljIExpc3QgZ2V0UHJlZml4ZWROYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9OU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9OU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBkYjc4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkKLXsKLSAgcHJvdGVjdGVkIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9MT0FESU5HX0VSUk9SID0gIlBMVUdJTl9MT0FESU5HX0VSUk9SIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwdXQoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGNsYXNzTmFtZSwgQnVuZGxlIGJ1bmRsZSkKLSAgewotICAgIEV4dGVuc2lvbkluZm8gaW5mbyA9IChFeHRlbnNpb25JbmZvKSBtYXAuZ2V0KG5hbWVzcGFjZVVSSSk7Ci0gICAgaWYgKGluZm8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbmZvID0gbmV3IFNpbmdsZVByb3BlcnR5RXh0ZW5zaW9uSW5mbyhjbGFzc05hbWUsIGJ1bmRsZSk7Ci0gICAgICBtYXAucHV0KG5hbWVzcGFjZVVSSSwgaW5mbyk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBuYW1lc3BhY2VVUkksIEhhc2hNYXAgcHJvcGVydHlUb0NsYXNzTmFtZU1hcCwgQnVuZGxlIGJ1bmRsZSkKLSAgewotICAgIEV4dGVuc2lvbkluZm8gaW5mbyA9IChFeHRlbnNpb25JbmZvKSBtYXAuZ2V0KG5hbWVzcGFjZVVSSSk7Ci0gICAgaWYgKGluZm8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbmZvID0gbmV3IE11bHRpUHJvcGVydHlFeHRlbnNpb25JbmZvKHByb3BlcnR5VG9DbGFzc05hbWVNYXAsIGJ1bmRsZSk7Ci0gICAgICBtYXAucHV0KG5hbWVzcGFjZVVSSSwgaW5mbyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAZGVwcmVjYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXQoU3RyaW5nIG5hbWVzcGFjZVVSSSkKLSAgewotICAgIEV4dGVuc2lvbkluZm8gaW5mbyA9IChFeHRlbnNpb25JbmZvKSBtYXAuZ2V0KG5hbWVzcGFjZVVSSSk7Ci0gICAgcmV0dXJuIGluZm8gIT0gbnVsbCA/IGluZm8uZ2V0T2JqZWN0KCIiKSA6IG51bGw7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHkoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIHByb3BlcnR5KQotICB7Ci0gICAgRXh0ZW5zaW9uSW5mbyBpbmZvID0gKEV4dGVuc2lvbkluZm8pIG1hcC5nZXQobmFtZXNwYWNlVVJJKTsKLSAgICByZXR1cm4gaW5mbyAhPSBudWxsID8gaW5mby5nZXRPYmplY3QocHJvcGVydHkpIDogbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgRXh0ZW5zaW9uSW5mbwotICB7Ci0gICAgcHJvdGVjdGVkIEJ1bmRsZSBidW5kbGU7Ci0KLSAgICBwdWJsaWMgRXh0ZW5zaW9uSW5mbyhCdW5kbGUgYnVuZGxlKQotICAgIHsKLSAgICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBPYmplY3QgZ2V0T2JqZWN0KFN0cmluZyBwcm9wZXJ0eSk7Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIFNpbmdsZVByb3BlcnR5RXh0ZW5zaW9uSW5mbyBleHRlbmRzIEV4dGVuc2lvbkluZm8KLSAgewotICAgIHByb3RlY3RlZCBTdHJpbmcgY2xhc3NOYW1lOwotICAgIHByb3RlY3RlZCBPYmplY3Qgb2JqZWN0OwotICAgIHByb3RlY3RlZCBib29sZWFuIGVycm9yOwotCi0gICAgcHVibGljIFNpbmdsZVByb3BlcnR5RXh0ZW5zaW9uSW5mbyhTdHJpbmcgY2xhc3NOYW1lLCBCdW5kbGUgYnVuZGxlKQotICAgIHsKLSAgICAgIHN1cGVyKGJ1bmRsZSk7Ci0gICAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGdldE9iamVjdChTdHJpbmcgcHJvcGVydHkpCi0gICAgewotICAgICAgaWYgKG9iamVjdCA9PSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIENsYXNzIHRoZUNsYXNzID0gYnVuZGxlLmxvYWRDbGFzcyhjbGFzc05hbWUpOwotICAgICAgICAgIG9iamVjdCA9IHRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgb2JqZWN0ID0gUExVR0lOX0xPQURJTkdfRVJST1I7Ci0gICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIG9iamVjdCAhPSBQTFVHSU5fTE9BRElOR19FUlJPUiA/IG9iamVjdCA6IG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBNdWx0aVByb3BlcnR5RXh0ZW5zaW9uSW5mbyBleHRlbmRzIEV4dGVuc2lvbkluZm8KLSAgewotICAgIHByb3RlY3RlZCBIYXNoTWFwIHByb3BlcnR5VG9DbGFzc05hbWVUYWJsZTsKLSAgICBwcm90ZWN0ZWQgSGFzaE1hcCBwcm9wZXJ0eVRvT2JqZWN0VGFibGUgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgcHVibGljIE11bHRpUHJvcGVydHlFeHRlbnNpb25JbmZvKEhhc2hNYXAgcHJvcGVydFRvQ2xhc3NOYW1lVGFibGUsIEJ1bmRsZSBidW5kbGUpCi0gICAgewotICAgICAgc3VwZXIoYnVuZGxlKTsKLSAgICAgIHRoaXMucHJvcGVydHlUb0NsYXNzTmFtZVRhYmxlID0gcHJvcGVydFRvQ2xhc3NOYW1lVGFibGU7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRPYmplY3QoU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIE9iamVjdCByZXN1bHQgPSBudWxsOwotICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IChTdHJpbmcpIHByb3BlcnR5VG9DbGFzc05hbWVUYWJsZS5nZXQocHJvcGVydHkpOwotICAgICAgaWYgKGNsYXNzTmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBwcm9wZXJ0eVRvT2JqZWN0VGFibGUuZ2V0KHByb3BlcnR5KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgQ2xhc3MgdGhlQ2xhc3MgPSBidW5kbGUubG9hZENsYXNzKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSB0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgICAgICAgICAgcHJvcGVydHlUb09iamVjdFRhYmxlLnB1dChwcm9wZXJ0eSwgcmVzdWx0KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHByb3BlcnR5VG9PYmplY3RUYWJsZS5wdXQocHJvcGVydHksIFBMVUdJTl9MT0FESU5HX0VSUk9SKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFBMVUdJTl9MT0FESU5HX0VSUk9SOwotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQkgIHJldHVybiByZXN1bHQgIT0gUExVR0lOX0xPQURJTkdfRVJST1IgPyByZXN1bHQgOiBudWxsOyAgICAgIAotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yQ29uZmlndXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZTAwNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JDb25maWd1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5JV1NETFRvb2xiYXJBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMRWRpdG9yQ29uZmlndXJhdGlvbiB7Ci0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMRURJVE9SQ09ORklHVVJBVElPTkVYVEVOU0lPTklEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLldTRExFZGl0b3JFeHRlbnNpb25Db25maWd1cmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5URVJOQUxFRElUT1JDT05GSUdVUkFUSU9OX0VYVEVOU0lPTklEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsRWRpdG9yQ29uZmlndXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENMQVNTTkFNRSA9ICJjbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFEQVBURVJGQUNUT1JZID0gImFkYXB0ZXJGYWN0b3J5IjsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTEJBUkFDVElPTiA9ICJ0b29sYmFyQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklHVVJFRkFDVE9SWSA9ICJmaWd1cmVGYWN0b3J5IjsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRURJVFBBUlRGQUNUT1JZID0gImVkaXRQYXJ0RmFjdG9yeSI7IC8vJE5PTi1OTFMtMSQKLQotCSAgTGlzdCBkZWZpbmVkRXh0ZW5zaW9uc0xpc3QgPSBudWxsOwotCi0JICBwdWJsaWMgV1NETEVkaXRvckNvbmZpZ3VyYXRpb24oKQotCSAgewotCi0JICB9Ci0KLQkgIHB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpCi0JICB7Ci0JICAgIGlmIChkZWZpbmVkRXh0ZW5zaW9uc0xpc3QgPT0gbnVsbCkKLQkgICAgewotCSAgICAgIHJlYWRXU0RMQ29uZmlndXJhdGlvblJlZ2lzdHJ5KCk7Ci0JICAgIH0KLQkgICAgaWYgKCFkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuaXNFbXB0eSgpKQotCSAgICB7Ci0JICAgICAgcmV0dXJuICgoV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMpIGRlZmluZWRFeHRlbnNpb25zTGlzdC5nZXQoMCkpLmdldEFkYXB0ZXJGYWN0b3J5KCk7Ci0JICAgIH0KLQkgICAgcmV0dXJuIG51bGw7Ci0JICB9Ci0KLQkgIHB1YmxpYyBFZGl0UGFydEZhY3RvcnkgZ2V0RWRpdFBhcnRGYWN0b3J5KCkKLQkgIHsKLQkgICAgaWYgKGRlZmluZWRFeHRlbnNpb25zTGlzdCA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgcmVhZFdTRExDb25maWd1cmF0aW9uUmVnaXN0cnkoKTsKLQkgICAgfQotCSAgICBpZiAoIWRlZmluZWRFeHRlbnNpb25zTGlzdC5pc0VtcHR5KCkpCi0JICAgIHsKLQkgICAgICByZXR1cm4gKChXU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcykgZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmdldCgwKSkuZ2V0RWRpdFBhcnRGYWN0b3J5KCk7Ci0JICAgIH0KLQkgICAgcmV0dXJuIG51bGw7Ci0JICB9Ci0KLS8vCSAgcHVibGljIElFeHRlbmRlZEZpZ3VyZUZhY3RvcnkgZ2V0RmlndXJlRmFjdG9yeSgpCi0vLwkgIHsKLS8vCSAgICBpZiAoZGVmaW5lZEV4dGVuc2lvbnNMaXN0ID09IG51bGwpCi0vLwkgICAgewotLy8JICAgICAgcmVhZFdTRExDb25maWd1cmF0aW9uUmVnaXN0cnkoKTsKLS8vCSAgICB9Ci0vLwkgICAgaWYgKCFkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuaXNFbXB0eSgpKQotLy8JICAgIHsKLS8vCSAgICAgIHJldHVybiAoKFdTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzKSBkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuZ2V0KDApKS5nZXRGaWd1cmVGYWN0b3J5KCk7Ci0vLwkgICAgfQotLy8JICAgIHJldHVybiBudWxsOwotLy8JICB9Ci0KLQkgIHB1YmxpYyBMaXN0IGdldFRvb2xiYXJBY3Rpb25zKCkKLQkgIHsKLQkgICAgaWYgKGRlZmluZWRFeHRlbnNpb25zTGlzdCA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgcmVhZFdTRExDb25maWd1cmF0aW9uUmVnaXN0cnkoKTsKLQkgICAgfQotCSAgICBpZiAoIWRlZmluZWRFeHRlbnNpb25zTGlzdC5pc0VtcHR5KCkpCi0JICAgIHsKLQkgICAgICByZXR1cm4gKChXU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcykgZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmdldCgwKSkuZ2V0QWN0aW9uTGlzdCgpOwotCSAgICB9Ci0JICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotCSAgfQotCi0JICBwcm90ZWN0ZWQgT2JqZWN0IGxvYWRDbGFzcyhJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGNsYXNzU3RyaW5nKQotCSAgewotCSAgICBTdHJpbmcgcGx1Z2luSWQgPSBlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpOwotCi0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgQ2xhc3MgdGhlQ2xhc3MgPSBQbGF0Zm9ybS5nZXRCdW5kbGUocGx1Z2luSWQpLmxvYWRDbGFzcyhjbGFzc1N0cmluZyk7Ci0JICAgICAgT2JqZWN0IGluc3RhbmNlID0gdGhlQ2xhc3MubmV3SW5zdGFuY2UoKTsKLQotCSAgICAgIHJldHVybiBpbnN0YW5jZTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JICAgIHsKLQotCSAgICB9Ci0JICAgIHJldHVybiBudWxsOwotCSAgfQotCi0JICBwdWJsaWMgdm9pZCByZWFkV1NETENvbmZpZ3VyYXRpb25SZWdpc3RyeSgpCi0JICB7Ci0JICAgIGRlZmluZWRFeHRlbnNpb25zTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgdXBkYXRlTGlzdChJTlRFUk5BTEVESVRPUkNPTkZJR1VSQVRJT05fRVhURU5TSU9OSUQpOwotCSAgICB1cGRhdGVMaXN0KFdTRExFRElUT1JDT05GSUdVUkFUSU9ORVhURU5TSU9OSUQpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCB1cGRhdGVMaXN0KFN0cmluZyBJRCkKLQkgIHsKLQkgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gd3NkbEVkaXRvckV4dGVuc2lvbkxpc3QgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihJRCk7Ci0KLQkgICAgYm9vbGVhbiBkZWZpbmVkRXh0ZW5zaW9uc0V4aXN0ID0gKHdzZGxFZGl0b3JFeHRlbnNpb25MaXN0ICE9IG51bGwgJiYgd3NkbEVkaXRvckV4dGVuc2lvbkxpc3QubGVuZ3RoID4gMCk7Ci0KLQkgICAgZGVmaW5lZEV4dGVuc2lvbnNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0JICAgIGlmIChkZWZpbmVkRXh0ZW5zaW9uc0V4aXN0KQotCSAgICB7Ci0JICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsRWRpdG9yRXh0ZW5zaW9uTGlzdC5sZW5ndGg7IGkrKykKLQkgICAgICB7Ci0JICAgICAgICBXU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFdTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzKCk7Ci0JICAgICAgICBkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuYWRkKHByb3BlcnRpZXMpOwotCi0JICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IHdzZGxFZGl0b3JFeHRlbnNpb25MaXN0W2ldOwotCSAgICAgICAgU3RyaW5nIGFkYXB0ZXJGYWN0b3J5Q2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBREFQVEVSRkFDVE9SWSk7Ci0JICAgICAgICBpZiAoYWRhcHRlckZhY3RvcnlDbGFzcyAhPSBudWxsKQotCSAgICAgICAgewotCSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gbG9hZENsYXNzKGVsZW1lbnQsIGFkYXB0ZXJGYWN0b3J5Q2xhc3MpOwotCSAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQWRhcHRlckZhY3RvcnkpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBwcm9wZXJ0aWVzLnNldEFkYXB0ZXJGYWN0b3J5KChBZGFwdGVyRmFjdG9yeSkgb2JqZWN0KTsKLQkgICAgICAgICAgfQotCSAgICAgICAgfQotCi0vLwkgICAgICAgIFN0cmluZyBmaWd1cmVGYWN0b3J5Q2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShGSUdVUkVGQUNUT1JZKTsKLS8vCSAgICAgICAgaWYgKGZpZ3VyZUZhY3RvcnlDbGFzcyAhPSBudWxsKQotLy8JICAgICAgICB7Ci0vLwkgICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGxvYWRDbGFzcyhlbGVtZW50LCBmaWd1cmVGYWN0b3J5Q2xhc3MpOwotLy8JICAgICAgICAgIElFeHRlbmRlZEZpZ3VyZUZhY3RvcnkgZmlndXJlRmFjdG9yeSA9IG51bGw7Ci0vLwkgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElFeHRlbmRlZEZpZ3VyZUZhY3RvcnkpCi0vLwkgICAgICAgICAgewotLy8JICAgICAgICAgICAgZmlndXJlRmFjdG9yeSA9IChJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5KSBvYmplY3Q7Ci0vLwkgICAgICAgICAgICBwcm9wZXJ0aWVzLnNldEZpZ3VyZUZhY3RvcnlMaXN0KGZpZ3VyZUZhY3RvcnkpOwotLy8JICAgICAgICAgIH0KLS8vCSAgICAgICAgfQotCSAgICAgICAgCi0JICAgICAgICBTdHJpbmcgZWRpdFBhcnRGYWN0b3J5Q2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShFRElUUEFSVEZBQ1RPUlkpOwotCSAgICAgICAgaWYgKGVkaXRQYXJ0RmFjdG9yeUNsYXNzICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBsb2FkQ2xhc3MoZWxlbWVudCwgZWRpdFBhcnRGYWN0b3J5Q2xhc3MpOwotCSAgICAgICAgICBFZGl0UGFydEZhY3RvcnkgZWRpdFBhcnRGYWN0b3J5ID0gbnVsbDsKLQkgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVkaXRQYXJ0RmFjdG9yeSkKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIGVkaXRQYXJ0RmFjdG9yeSA9IChFZGl0UGFydEZhY3RvcnkpIG9iamVjdDsKLQkgICAgICAgICAgICBwcm9wZXJ0aWVzLnNldEVkaXRQYXJ0RmFjdG9yeUxpc3QoZWRpdFBhcnRGYWN0b3J5KTsKLQkgICAgICAgICAgfQotCSAgICAgICAgfQotCi0JICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSB0b29sYmFyQWN0aW9ucyA9IGVsZW1lbnQuZ2V0Q2hpbGRyZW4oVE9PTEJBUkFDVElPTik7Ci0JICAgICAgICBMaXN0IGFjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgICAgICBpZiAodG9vbGJhckFjdGlvbnMgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0b29sYmFyQWN0aW9ucy5sZW5ndGg7IGorKykKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBhY3Rpb25FbGVtZW50ID0gdG9vbGJhckFjdGlvbnNbal07Ci0JICAgICAgICAgICAgU3RyaW5nIGFjdGlvbkNsYXNzID0gYWN0aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoQ0xBU1NOQU1FKTsKLQkgICAgICAgICAgICBJV1NETFRvb2xiYXJBY3Rpb24gYWN0aW9uID0gbnVsbDsKLQkgICAgICAgICAgICBpZiAoYWN0aW9uQ2xhc3MgIT0gbnVsbCkKLQkgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gbG9hZENsYXNzKGFjdGlvbkVsZW1lbnQsIGFjdGlvbkNsYXNzKTsKLQkgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJV1NETFRvb2xiYXJBY3Rpb24pCi0JICAgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgICAgIGFjdGlvbiA9IChJV1NETFRvb2xiYXJBY3Rpb24pIG9iamVjdDsKLQkgICAgICAgICAgICAgICAgYWN0aW9uTGlzdC5hZGQoYWN0aW9uKTsKLQkgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICB9Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICAgIHByb3BlcnRpZXMuc2V0QWN0aW9uTGlzdChhY3Rpb25MaXN0KTsKLQotCi0KLQkgICAgICB9Ci0JICAgIH0KLQkgIH0KLQl9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckV4dGVuc2lvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBiYzk0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLQotcHVibGljIGludGVyZmFjZSBXU0RMRWRpdG9yRXh0ZW5zaW9uCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9VVExJTkVfVFJFRV9DT05URU5UX1BST1ZJREVSID0gMTsgICAgLy8gcmVxJ2QgZm9yIG1vZGVsIGJhc2VkIGV4dAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPVVRMSU5FX0xBQkVMX1BST1ZJREVSID0gMjsgICAgICAgICAgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNRU5VX0FDVElPTl9DT05UUklCVVRPUiA9IDM7ICAgICAgICAgIC8vIG5vZGUKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVUQUlMU19WSUVXRVJfUFJPVklERVIgPSA0OyAgICAgICAgICAvLyBub2RlCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRURJVF9QQVJUX0ZBQ1RPUlkgPSA1OyAgICAgICAgICAgICAgICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfU1lTVEVNX1BST1ZJREVSID0gNjsgICAgICAgICAgICAgLy8gcmVxJ2QgZm9yIHR5cGUgc3lzdGVtIGV4dAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT0RFX1JFQ09OQ0lMRVIgPSA3OyAgICAgICAgICAgICAgICAgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9ERV9BU1NPQ0lBVElPTl9QUk9WSURFUiA9IDg7ICAgICAgICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1PREVMX1FVRVJZX0NPTlRSSUJVVE9SID0gOTsgICAgICAgICAgLy8gcmVxJ2QgZm9yIG1vZGVsIGJhc2VkIGV4dAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX1NPVVJDRV9QUk9WSURFUiA9IDEwOyAgICAgICAgLy8gcmVxJ2QgZm9yIG1vZGVsIGJhc2VkIGV4dAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9TRUNUSU9OX0RFU0NSSVBUT1JfUFJPVklERVIgPSAxMTsgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWFNEX0RFTEVURV9BQ1RJT04gPSAxMjsKLSAgCi0gIGJvb2xlYW4gaXNFeHRlbnNpb25UeXBlU3VwcG9ydGVkKGludCB0eXBlKTsKLSAgYm9vbGVhbiBpc0FwcGxpY2FibGUoT2JqZWN0IG1vZGVsT2JqZWN0KTsKLSAgT2JqZWN0IGNyZWF0ZUV4dGVuc2lvbk9iamVjdChpbnQgdHlwZSwgSUVkaXRvclBhcnQgZWRpdG9yKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDg0NTlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydEZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcwotewotICBBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKLS8vICBJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5IGZpZ3VyZUZhY3Rvcnk7Ci0gIEVkaXRQYXJ0RmFjdG9yeSBlZGl0UGFydEZhY3Rvcnk7Ci0gIExpc3QgYWN0aW9uTGlzdDsKLQotICBwdWJsaWMgV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMoKQotICB7Ci0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFjdGlvbkxpc3QoTGlzdCBhY3Rpb25MaXN0KQotICB7Ci0gICAgdGhpcy5hY3Rpb25MaXN0ID0gYWN0aW9uTGlzdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFkYXB0ZXJGYWN0b3J5KEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KQotICB7Ci0gICAgdGhpcy5hZGFwdGVyRmFjdG9yeSA9IGFkYXB0ZXJGYWN0b3J5OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RWRpdFBhcnRGYWN0b3J5TGlzdChFZGl0UGFydEZhY3RvcnkgZWRpdFBhcnRGYWN0b3J5KQotICB7Ci0gICAgdGhpcy5lZGl0UGFydEZhY3RvcnkgPSBlZGl0UGFydEZhY3Rvcnk7Ci0gIH0KLQotLy8gIHB1YmxpYyB2b2lkIHNldEZpZ3VyZUZhY3RvcnlMaXN0KElFeHRlbmRlZEZpZ3VyZUZhY3RvcnkgZmlndXJlRmFjdG9yeSkKLS8vICB7Ci0vLyAgICB0aGlzLmZpZ3VyZUZhY3RvcnkgPSBmaWd1cmVGYWN0b3J5OwotLy8gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRBY3Rpb25MaXN0KCkKLSAgewotICAgIHJldHVybiBhY3Rpb25MaXN0OwotICB9Ci0KLSAgcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiBhZGFwdGVyRmFjdG9yeTsKLSAgfQotCi0gIHB1YmxpYyBFZGl0UGFydEZhY3RvcnkgZ2V0RWRpdFBhcnRGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiBlZGl0UGFydEZhY3Rvcnk7Ci0gIH0KLQotLy8gIHB1YmxpYyBJRXh0ZW5kZWRGaWd1cmVGYWN0b3J5IGdldEZpZ3VyZUZhY3RvcnkoKQotLy8gIHsKLS8vICAgIHJldHVybiBmaWd1cmVGYWN0b3J5OwotLy8gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU2N2U4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsgICAgICAKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRENvbXBvbmVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgV1NETE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIGltcGxlbWVudHMgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyCi17ICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIE9iamVjdCBnZXRNb2RlbE9iamVjdChPYmplY3QgcGFyZW50TW9kZWxPYmplY3QsIEVsZW1lbnRbXSBlbGVtZW50Q2hhaW4sIGludCBzdGFydCwgaW50W10gZW5kKQotICB7ICAgICAgICAgICAgICAgICAKLSAgICBPYmplY3QgY3VycmVudE9iamVjdCA9IHBhcmVudE1vZGVsT2JqZWN0OwotICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVsZW1lbnRDaGFpbi5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBPYmplY3QgbyA9IGdldE1vZGVsT2JqZWN0SGVscGVyKGN1cnJlbnRPYmplY3QsIGVsZW1lbnRDaGFpbltpXSk7Ci0gICAgICBpZiAobyA9PSBudWxsKQotICAgICAgeyAgICAgICAgICAgICAgCi0gICAgICAgIGVuZFswXSA9IGk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfSAgICAgICAgICAgIAotICAgICAgZWxzZQotICAgICAgeyAgICAgICAgICAgICAgCi0gICAgICAgIGN1cnJlbnRPYmplY3QgPSBvOwotICAgICAgfQotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICByZXR1cm4gY3VycmVudE9iamVjdCAhPSBwYXJlbnRNb2RlbE9iamVjdCA/IGN1cnJlbnRPYmplY3QgOiBudWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIH0KLQotICBwdWJsaWMgTm9kZSBnZXROb2RlKE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KQotICAgICAgcmV0dXJuICgoV1NETEVsZW1lbnRJbXBsKW1vZGVsT2JqZWN0KS5nZXRFbGVtZW50KCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgICAgIAotICBwcm90ZWN0ZWQgT2JqZWN0IGdldE1vZGVsT2JqZWN0SGVscGVyKE9iamVjdCBwYXJlbnRPYmplY3QsIEVsZW1lbnQgZWxlbWVudE5vZGUpCi0gIHsgICAgICAgICAgCi0JCU9iamVjdCByZXN1bHQgPSBudWxsOwotCQlDb2xsZWN0aW9uIGNoaWxkQ29tcG9uZW50TGlzdCA9ICgoV1NETEVsZW1lbnRJbXBsKSBwYXJlbnRPYmplY3QpLmdldFdTRExDb250ZW50cygpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBjaGlsZENvbXBvbmVudExpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQl7Ci0JCQlPYmplY3QgbyA9IGkubmV4dCgpOwotCQkJRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQotICAgICAgaWYgKG8gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBXU0RMRWxlbWVudEltcGwpCi0gICAgICAgIHsKLSAgICAgICAgICBlbGVtZW50ID0gKChXU0RMRWxlbWVudEltcGwpbykuZ2V0RWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBYU0RDb21wb25lbnRJbXBsKQotICAgICAgICB7Ci0gICAgICAgICAgZWxlbWVudCA9ICgoWFNEQ29tcG9uZW50SW1wbClvKS5nZXRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotCQkJaWYgKGVsZW1lbnQgPT0gZWxlbWVudE5vZGUpCi0JCQl7Ci0JCQkJcmVzdWx0ID0gbzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotICB9Ci19ICAgIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTMxNDc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL0V4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXI7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgCi17Ci0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRDb250ZXh0KEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIGxvY2FsTmFtZSk7ICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL0h0dHBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9IdHRwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjA4ZjY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL0h0dHBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgSHR0cEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgaW1wbGVtZW50cyBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyCi17ICAKLSAgcHVibGljIEh0dHBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyKCkKLSAgewotICB9ICAJCi0JCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRDb250ZXh0KEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSB0cnVlOyAgIAotICAgIAotICAgIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSA9IHBhcmVudEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0JaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygiYmluZGluZyIpKSAvLyROT04tTkxTLTEkCi0JewotCSAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygiYmluZGluZyIpOyAJICAgLy8kTk9OLU5MUy0xJAotCX0JICAKLQllbHNlIGlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoIm9wZXJhdGlvbiIpKSAvLyROT04tTkxTLTEkCi0JewotCSAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygib3BlcmF0aW9uIik7ICAvLyROT04tTkxTLTEkCi0JfQotCWVsc2UgaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygiaW5wdXQiKSB8fCAgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgIHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygib3V0cHV0IikpIC8vJE5PTi1OTFMtMSQKLQl7Ci0JICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJib2R5IikgfHwgIC8vJE5PTi1OTFMtMSQKLQkgICAgICAgICAgIGxvY2FsTmFtZS5lcXVhbHMoImhlYWRlciIpOyAJICAgLy8kTk9OLU5MUy0xJAotCX0JCi0JZWxzZSBpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJmYXVsdCIpKSAvLyROT04tTkxTLTEkCi0JewotCSAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygiZmF1bHQiKTsgCSAgIC8vJE5PTi1OTFMtMSQKLQl9Ci0JZWxzZSBpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJwb3J0IikpIC8vJE5PTi1OTFMtMSQKLQl7Ci0JICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJhZGRyZXNzIik7IAkgICAvLyROT04tTkxTLTEkCi0JfQkgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9NaW1lRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvTWltZUV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg5ZTAxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9NaW1lRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBNaW1lRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciBpbXBsZW1lbnRzIEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIKLXsgICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTUVfTkFNRVNQQUNFX1VSST0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIE1pbWVFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyKCkKLSAgewotICB9ICAJCi0JCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRDb250ZXh0KEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotICAgIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSA9IHBhcmVudEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lc3BhY2UgPSBwYXJlbnRFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpOwotCi0gIAlpZiAoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lc3BhY2UpKQotICAJewotICAgIAlpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJpbnB1dCIpIHx8IHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygib3V0cHV0IikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIAl7Ci0gICAgCSAgCXJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoImNvbnRlbnQiKSB8fCAvLyROT04tTkxTLTEkCi0JCQkJICAgICBsb2NhbE5hbWUuZXF1YWxzKCJtdWx0aXBhcnRSZWxhdGVkIikgfHwgLy8kTk9OLU5MUy0xJAotCQkJCSAgICAgbG9jYWxOYW1lLmVxdWFscygibWltZVhtbCIpOyAgICAJICAJIC8vJE5PTi1OTFMtMSQKLSAgICAJfQotICAJfQotICAJZWxzZSBpZiAoTUlNRV9OQU1FU1BBQ0VfVVJJLmVxdWFscyhwYXJlbnRFbGVtZW50TmFtZXNwYWNlKSkKLSAgCXsKLQkJcmVzdWx0ID0gdHJ1ZTsJCQkJCi0gIAl9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9Tb2FwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRlM2ViNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9Tb2FwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgaW1wbGVtZW50cyBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyCi17ICAgCi0gIHB1YmxpYyBTb2FwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcigpCi0gIHsKLSAgfSAgCQotCQotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkQ29udGV4dChFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQotICAgIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSA9IHBhcmVudEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7ICAgIAotICAgIGlmIChwYXJlbnRFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSkpCi0gICAgeyAKLSAgICAgIC8vIGhlcmUgd2UgYXNzdW1lIHRoZSBwYXJlbnQgZWxlbWVudCBpcyB0aGUgV1NETCBiaW5kaW5nIAotICAgICAgLy8gc2tlbGV0b24gYW5kIHRoYXQgdGhlICdsb2NhbE5hbWUnIGlzIHRoZSBTT0FQIGV4dGVuc2lvbiBlbGVtZW50Ci0gICAgICAvLyAgICAgIAotICAgICAgaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygiYmluZGluZyIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoImJpbmRpbmciKTsgCSAgIC8vJE5PTi1OTFMtMSQKLSAgICAgIH0JICAKLSAgICAgIGVsc2UgaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygib3BlcmF0aW9uIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygib3BlcmF0aW9uIik7ICAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoImlucHV0IikgfHwgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoIm91dHB1dCIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoImJvZHkiKSB8fCAgLy8kTk9OLU5MUy0xJAotICAgICAgICBsb2NhbE5hbWUuZXF1YWxzKCJoZWFkZXIiKTsgCSAgIC8vJE5PTi1OTFMtMSQKLSAgICAgIH0JCi0gICAgICBlbHNlIGlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoImZhdWx0IikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygiZmF1bHQiKTsgCSAgIC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygicG9ydCIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoImFkZHJlc3MiKTsgCSAgIC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAgICAgICAKLSAgICAgIH0gIAotICAgIH0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9YU0RFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9YU0RFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZGFiNzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvWFNERXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBYU0RFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIGltcGxlbWVudHMgRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcgoteyAgIAotICBwdWJsaWMgWFNERXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcigpCi0gIHsKLSAgfSAgCQotCQotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkQ29udGV4dChFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gcGFyZW50RWxlbWVudC5nZXRMb2NhbE5hbWUoKTsKLQlpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJ0eXBlcyIpKSAvLyROT04tTkxTLTEkCi0JewotCSAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygic2NoZW1hIik7IAkgICAvLyROT04tTkxTLTEkCi0JfQkgIAkKLSAgICByZXR1cm4gcmVzdWx0OwotICB9ICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmFjay5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JhY2suZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGQxYTI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmFjay5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRfYXNjdF92YWxfbm90X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRfYXNjdF92YWxfbm90X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYzczMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kX2FzY3RfdmFsX25vdF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kX2FzY3RfdmFsX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRfYXNjdF92YWxfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJhZDliZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRfYXNjdF92YWxfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZGluZ19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kaW5nX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NmUyZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kaW5nX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRpbmdoZWFkZXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZGluZ2hlYWRlcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmZlNTRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZGluZ2hlYWRlcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9icm93c2VidXR0b24uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9icm93c2VidXR0b24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjQwMmY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYnJvd3NlYnV0dG9uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvY29tcGxleHR5cGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvY29tcGxleHR5cGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA3Zjg1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2NvbXBsZXh0eXBlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2RlbGV0ZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9kZWxldGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY5MjJhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2RlbGV0ZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9lbGVtZW50X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2VsZW1lbnRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ0NWYwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2VsZW1lbnRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZXJyb3JfY28uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9lcnJvcl9jby5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOWRjY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9lcnJvcl9jby5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZhdWx0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZhdWx0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMjgxMTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mYXVsdF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9maWxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZpbGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhN2EzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZpbGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmxkcl9lbC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZsZHJfZWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDFjMTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmxkcl9lbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZvcndhcmQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mb3J3YXJkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFiNjk5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZvcndhcmQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9oaWRlYmluZGluZy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2hpZGViaW5kaW5nLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg0NmNkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2hpZGViaW5kaW5nLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cGFkZHJlc3Nfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cGFkZHJlc3Nfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyMGMzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBhZGRyZXNzX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBiaW5kaW5nX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBiaW5kaW5nX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MjhlZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwYmluZGluZ19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwb3BlcmF0aW9uX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBvcGVyYXRpb25fb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM0MDQxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBvcGVyYXRpb25fb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cHVybGVuY29kZWRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cHVybGVuY29kZWRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ1MDUwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHB1cmxlbmNvZGVkX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHB1cmxyZXBsYWNlbWVudF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwdXJscmVwbGFjZW1lbnRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjczNTg3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHB1cmxyZXBsYWNlbWVudF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbXBvcnRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW1wb3J0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3Mjc1YWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbXBvcnRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW1wb3J0aGVhZGVyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ltcG9ydGhlYWRlcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDAwY2I4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW1wb3J0aGVhZGVyX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2lucHV0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2lucHV0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNmIzNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbnB1dF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9tZXNzYWdlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL21lc3NhZ2Vfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjZTQ4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL21lc3NhZ2Vfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbWVzc2FnZWhlYWRlcl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9tZXNzYWdlaGVhZGVyX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYTcxMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9tZXNzYWdlaGVhZGVyX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25hbWVzcGFjZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uYW1lc3BhY2Vfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UzZjI3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25hbWVzcGFjZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uYW1lc3BhY2VkZWNsX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25hbWVzcGFjZWRlY2xfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI3OWQyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25hbWVzcGFjZWRlY2xfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmV3X3dzZGxfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmV3X3dzZGxfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEwMDExMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25ld193c2RsX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL29wZXJhdGlvbl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vcGVyYXRpb25fb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxOGEzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL29wZXJhdGlvbl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vcGVyYXRpb25iaW5kaW5nX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL29wZXJhdGlvbmJpbmRpbmdfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzODZjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL29wZXJhdGlvbmJpbmRpbmdfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X25vLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X25vLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiOWY4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF9uby5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQwOTE4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfeWVzLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X3llcy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYWNiOTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfeWVzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcGFnZV9iYW5uZXIuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wYWdlX2Jhbm5lci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYmMwYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wYWdlX2Jhbm5lci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BhcnRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcGFydF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjE5ZGZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcGFydF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5NDk4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydHR5cGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydHR5cGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEzMjVjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnR0eXBlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnR0eXBlaGVhZGVyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnR0eXBlaGVhZGVyX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmNjMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0dHlwZWhlYWRlcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRjbXBseHBsdHlwX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydGNtcGx4cGx0eXBfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI4NjY0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydGNtcGx4cGx0eXBfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcHJ0ZWxlbXRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcHJ0ZWxlbXRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyZDEwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydGVsZW10X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydHNtcGx0eXBfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcHJ0c21wbHR5cF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmZjN2M1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcHJ0c21wbHR5cF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9xdWlja2Fzc2lzdC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3F1aWNrYXNzaXN0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhZTJhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3F1aWNrYXNzaXN0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2VydmljZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zZXJ2aWNlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTZiM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zZXJ2aWNlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NlcnZpY2VoZWFkZXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2VydmljZWhlYWRlcl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjQ4MTRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2VydmljZWhlYWRlcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zaW1wbGV0eXBlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NpbXBsZXR5cGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ1ZGJiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NpbXBsZXR5cGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNDI2ZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBhZGRyZXNzX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBhZGRyZXNzX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODBiYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYWRkcmVzc19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYXR0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBhdHRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBiMzY2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBhdHRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGJpbmRpbmdfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGJpbmRpbmdfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1ZjZiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBiaW5kaW5nX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBib2R5X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBib2R5X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZDAxYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYm9keV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwZmF1bHRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGZhdWx0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NmIxZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwZmF1bHRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGhlYWRlcl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwaGVhZGVyX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MmVhM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwaGVhZGVyX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBoZWFkZXJmYXVsdF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwaGVhZGVyZmF1bHRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYwZTE5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBoZWFkZXJmYXVsdF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2Fwb3BlcmF0aW9uX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBvcGVyYXRpb25fb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNjMTkxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBvcGVyYXRpb25fb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvdHlwZXNfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvdHlwZXNfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFmNmY4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3R5cGVzX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3ZhbGlkYXRlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvdmFsaWRhdGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjM0N2FjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvdmFsaWRhdGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy93c2RsX2ZpbGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvd3NkbF9maWxlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1YjFmOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy93c2RsX2ZpbGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMveHNkX2ZpbGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMveHNkX2ZpbGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNkY2ZjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3hzZF9maWxlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3hzZF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy94c2Rfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNkY2ZjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3hzZF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9sYWJlbC9wcm92aWRlcnMvSFRUUExhYmVsUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbGFiZWwvcHJvdmlkZXJzL0hUVFBMYWJlbFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiOGRlZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9sYWJlbC9wcm92aWRlcnMvSFRUUExhYmVsUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5sYWJlbC5wcm92aWRlcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLXB1YmxpYyBjbGFzcyBIVFRQTGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgQUREUkVTUyAgICAgICAgID0gImFkZHJlc3MiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIEJJTkRJTkcgICAgICAgICA9ICJiaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBPUEVSQVRJT04gICAgICAgPSAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBVUkxfRU5DT0RFRCAgICAgPSAidXJsRW5jb2RlZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgVVJMX1JFUExBQ0VNRU5UID0gInVybFJlcGxhY2VtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0gIHByb3RlY3RlZCBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBIVFRQTGFiZWxQcm92aWRlcigpCi0gIHsgICAgICAgICAgICAgICAgICAgIAotICAgIG1hcC5wdXQoQUREUkVTUywgImljb25zL2h0dHBhZGRyZXNzX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoQklORElORywgImljb25zL2h0dHBiaW5kaW5nX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoT1BFUkFUSU9OLCAiaWNvbnMvaHR0cG9wZXJhdGlvbl9vYmouZ2lmIik7ICAgICAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChVUkxfRU5DT0RFRCwgImljb25zL2h0dHB1cmxlbmNvZGVkX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoVVJMX1JFUExBQ0VNRU5ULCAiaWNvbnMvaHR0cHVybHJlcGxhY2VtZW50X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBvYmplY3QpIAotICB7ICAgIAotICAgIE5vZGUgbm9kZSA9IChOb2RlKW9iamVjdDsKLSAgICBTdHJpbmcgaW1hZ2VOYW1lID0gKFN0cmluZyltYXAuZ2V0KG5vZGUuZ2V0TG9jYWxOYW1lKCkpOyAgICAgICAKLSAgICByZXR1cm4gaW1hZ2VOYW1lICE9IG51bGwgPyBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoaW1hZ2VOYW1lKSA6IG51bGw7IAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgIAotICB7Ci0gICAgTm9kZSBub2RlID0gKE5vZGUpb2JqZWN0OwotICAgIHJldHVybiBub2RlLmdldE5vZGVOYW1lKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2xhYmVsL3Byb3ZpZGVycy9TT0FQTGFiZWxQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9sYWJlbC9wcm92aWRlcnMvU09BUExhYmVsUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ2MGVlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2xhYmVsL3Byb3ZpZGVycy9TT0FQTGFiZWxQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmxhYmVsLnByb3ZpZGVyczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotcHVibGljIGNsYXNzIFNPQVBMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlcgoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIEFERFJFU1MgICAgICA9ICJhZGRyZXNzIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBCT0RZICAgICAgICAgPSAiYm9keSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgQklORElORyAgICAgID0gImJpbmRpbmciOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIEZBVUxUICAgICAgICA9ICJmYXVsdCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgSEVBREVSICAgICAgID0gImhlYWRlciI7ICAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIEhFQURFUl9GQVVMVCA9ICJoZWFkZXJmYXVsdCI7ICAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIE9QRVJBVElPTiAgICA9ICJvcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgcHJvdGVjdGVkIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIFNPQVBMYWJlbFByb3ZpZGVyKCkKLSAgewotICAgIG1hcC5wdXQoQUREUkVTUywgImljb25zL3NvYXBhZGRyZXNzX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoQklORElORywgImljb25zL3NvYXBiaW5kaW5nX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoQk9EWSwgImljb25zL3NvYXBib2R5X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoRkFVTFQsICJpY29ucy9zb2FwZmF1bHRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChIRUFERVIsICJpY29ucy9zb2FwaGVhZGVyX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoSEVBREVSX0ZBVUxULCAiaWNvbnMvc29hcGhlYWRlcmZhdWx0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIG1hcC5wdXQoT1BFUkFUSU9OLCAiaWNvbnMvc29hcG9wZXJhdGlvbl9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSAKLSAgeyAgICAKLSAgICBOb2RlIG5vZGUgPSAoTm9kZSlvYmplY3Q7Ci0gICAgU3RyaW5nIGltYWdlTmFtZSA9IChTdHJpbmcpbWFwLmdldChub2RlLmdldExvY2FsTmFtZSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAKLQkgIHJldHVybiBpbWFnZU5hbWUgIT0gbnVsbCA/IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZShpbWFnZU5hbWUpIDogbnVsbDsgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSAgCi0gIHsKLSAgICBOb2RlIG5vZGUgPSAoTm9kZSlvYmplY3Q7Ci0gICAgcmV0dXJuIG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZlYmNjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIKLV9VSV9ERVBFTkRFTkNJRVNfQ0hBTkdFRD1EZXBlbmRlbmNpZXMgQ2hhbmdlZAotX1VJX0RFUEVOREVOQ0lFU19DSEFOR0VEX1JFRlJFU0g9T25lIG9yIG1vcmUgZGVwZW5kZW5jaWVzIGhhdmUgY2hhbmdlZC4gIERvIHlvdSB3YW50IHRvIHJlZnJlc2ggdGhlIGVkaXRvciB0byByZWZsZWN0IHRoZXNlIGNoYW5nZXM/Ci1fVUlfRURJVF9OQU1FU1BBQ0VTX0RJQUxPR19USVRMRT1FZGl0IE5hbWVzcGFjZXMKLV9VSV9QUkVGX1BBR0VfQ1JFQVRJTkdfRklMRVM9Q3JlYXRpbmcgZmlsZXMKLV9VSV9SRU1FTUJFUl9NWV9ERUNJU0lPTl9MQUJFTD1SZW1lbWJlciBteSBkZWNpc2lvbgotX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0U9RGVmYXVsdCBUYXJnZXQgTmFtZXNwYWNlOgotX1VJX1JFR0VOX0JJTkRJTkdTX09OX1NBVkVfUVVFU1RJT05NQVJLPVJlZ2VuZXJhdGUgQmluZGluZ3MgT24gU2F2ZT8KLV9VSV9MQUJFTF9XQVJOSU5HX0RVUExJQ0FURV9OQU1FX0VYSVNUUz1XYXJuaW5nOiBkdXBsaWNhdGUgbmFtZSBhbHJlYWR5IGV4aXN0cwotX1VJX0xBQkVMX05BTUVTUEFDRV9VUklTX1RPX0JFX0lOQ0xVREVEPU5hbWVzcGFjZSBVUklzIHRvIGJlIGluY2x1ZGVkCi1fVUlfUFJFRl9QQUdFX0FVVE9fUkVHRU5FUkFURV9CSU5ESU5HPVJlZ2VuZXJhdGUgQmluZGluZyBvbiBzYXZlCi1fVUlfUFJFRl9QQUdFX1BST01QVF9SRUdFTl9CSU5ESU5HX09OX1NBVkU9UHJvbXB0IFJlZ2VuZXJhdGUgQmluZGluZyBvbiBzYXZlCi1fVUlfRURJVF9OQU1FU1BBQ0VTPUVkaXQgTmFtZXNwYWNlcy4uLgotX1VJX0FDVElPTl9BRERfSU1QT1JUPUFkZCBJbXBvcnQKLV9VSV9BQ1RJT05fQUREX0JJTkRJTkc9QWRkIEJpbmRpbmcKLV9VSV9BQ1RJT05fQUREX1BBUlQ9QWRkIFBhcnQKLV9VSV9BQ1RJT05fQUREX1hNTF9TQ0hFTUFfRUxFTUVOVD1BZGQgWE1MIFNjaGVtYSBFbGVtZW50Ci1fVUlfQUNUSU9OX1JFT1JERVJfUEFSVD1SZW9yZGVyIFBhcnQKLV9VSV9BQ1RJT05fUkVPUkRFUl9NRVNTQUdFX1JFRkVSRU5DRT1SZW9yZGVyIE1lc3NhZ2UgUmVmZXJlbmNlCi1fVUlfQUNUSU9OX09QRU5fSU5fTkVXX0VESVRPUj1PcGVuIEluIE5ldyBFZGl0b3IKLV9VSV9BQ1RJT05fRVhJU1RJTkdfTUVTU0FHRT1FeGlzdGluZyBNZXNzYWdlLi4uCi1fVUlfQUNUSU9OX0VYSVNUSU5HX0VMRU1FTlQ9RXhpc3RpbmcgRWxlbWVudC4uLgotX1VJX0VSUk9SX05BTUVTUEFDRV9JTlZBTElEPVRoZSB0YXJnZXQgbmFtZXNwYWNlIGlzIGludmFsaWQKLV9VSV9FUlJPUl9GSUxFX0FMUkVBRFlfRVhJU1RTPUZpbGUgYWxyZWFkeSBleGlzdHM6IHswfQotX1VJX0RFU0NSSVBUSU9OX05FV19XU0RMX0ZJTEU9U3BlY2lmeSB0aGUgYXR0cmlidXRlcyBmb3IgdGhlIG5ldyBXU0RMIGZpbGUuCi1fVUlfUkVHRU5fQklORElORFNfT05fU0FWRT1SZWdlbmVyYXRlIEJpbmRpbmdzIE9uIFNhdmUKLV9VSV9SQURJT19ET0NVTUVOVF9MSVRFUkFMPWRvY3VtZW50IGxpdGVyYWwKLV9VSV9USVRMRV9TUEVDSUZZX1BPUlRUWVBFPVNwZWNpZnkgUG9ydCBUeXBlCi1fVUlfTEFCRUxfQklORElOR19QUk9UT0NPTD1Qcm90b2NvbDoKLV9VSV9MQUJFTF9JTkxJTkVfU0NIRU1BX09GPUlubGluZSBTY2hlbWEgb2YgCi1fVUlfTEFCRUxfVEFSR0VUX05BTUVTUEFDRT1UYXJnZXQgbmFtZXNwYWNlOgotX1VJX0xBQkVMX1BSRUZJWF9XSVRIX0NPTE9OPVByZWZpeDoKLV9VSV9MQUJFTF9DUkVBVEVfV1NETF9TS0VMRVRPTj1DcmVhdGUgV1NETCBTa2VsZXRvbgotX1VJX0xBQkVMX0NSRUFURV9ORVdfV1NETF9GSUxFPUNyZWF0ZSBhIG5ldyBXU0RMIEZpbGUKLV9VSV9MQUJFTF9TT0FQX0JJTkRJTkdfT1BUSU9OUz1TT0FQIEJpbmRpbmcgT3B0aW9ucwotX1VJX0xBQkVMX0hUVFBfQklORElOR19PUFRJT05TPUhUVFAgQmluZGluZyBPcHRpb25zCi1fVUlfTEFCRUxfQUREX0VYVEVOU0lPTl9FTEVNRU5UPUFkZCBFeHRlbnNpb24gRWxlbWVudAotX1VJX1NQRUNJRllfQklORElOR19ERVRBSUxTX0xBQkVMPVNwZWNpZnkgdGhlIGRldGFpbHMgb2YgdGhlIGJpbmRpbmcgdGhhdCB3aWxsIGJlIGNyZWF0ZWQKLV9VSV9TUEVDSUZZX1BPUlRfREVUQUlMU19UT19CRV9DUkVBVEVEPVNwZWNpZnkgdGhlIGRldGFpbHMgb2YgdGhlIHBvcnQgdGhhdCB3aWxsIGJlIGNyZWF0ZWQKLV9VSV9MQUJFTF9ORVdfQklORElORz1OZXcgQmluZGluZwotX1VJX0xBQkVMX05FV19QT1JUVFlQRT1OZXcgUG9ydFR5cGUKLV9VSV9MQUJFTF9SRUZFUkVOQ0VfS0lORD1SZWZlcmVuY2UgS2luZAotX1VJX0xBQkVMX05FV19NRVNTQUdFPU5ldyBNZXNzYWdlCi1fVUlfUkFESU9fUlBDX0VOQ09ERUQ9cnBjIGVuY29kZWQKLV9VSV9SQURJT19SUENfTElURVJBTD1ycGMgbGl0ZXJhbAotX1VJX0FDVElPTl9FWElTVElOR19UWVBFPUV4aXN0aW5nIFR5cGUuLi4KLV9VSV9TUEVDSUZZX1BPUlRfREVUQUlMUz1TcGVjaWZ5IFBvcnQgRGV0YWlscwotX1VJX1RJVExFX1NQRUNJRllfQklORElORz1TcGVjaWZ5IEJpbmRpbmcKLV9VSV9USVRMRV9TUEVDSUZZX0JJTkRJTkdfREVUQUlMUz1TcGVjaWZ5IEJpbmRpbmcgRGV0YWlscwotX1VJX0VSUk9SX0ZJTEVfTVVTVF9FTkRfV0lUSF9XU0RMPUVycm9yOiBGaWxlIG11c3QgZW5kIHdpdGggd3NkbAotX1VJX1RJVExFX1NQRUNJRllfTUVTU0FHRT1TcGVjaWZ5IE1lc3NhZ2UKLV9VSV9USVRMRV9ORVdfV1NETF9GSUxFPU5ldyBXU0RMIEZpbGUKLV9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQ9JykKLV9VSV9BQ1RJT05fUkVOQU1FPVJlbmFtZQotX1VJX0ZPTERFUl9UWVBFUz1UeXBlcwotX1VJX0NBTkNFTF9MQUJFTD1DYW5jZWwKLV9VSV9BQ1RJT05fTkVXX1RZUEU9TmV3IFR5cGUuLi4KLV9VSV9BQ1RJT05fU0VUX1RZUEU9U2V0IFR5cGUKLV9VSV9GT0xERVJfSU1QT1JUUz1JbXBvcnRzCi1fVUlfRk9MREVSX1NFUlZJQ0VTPVNlcnZpY2VzCi1fVUlfRk9MREVSX0JJTkRJTkdTPUJpbmRpbmdzCi1fVUlfRk9MREVSX0lOVEVSRkFDRVM9SW50ZXJmYWNlcwotX1VJX0ZPTERFUl9QT1JUVFlQRVM9UG9ydFR5cGVzCi1fVUlfRk9MREVSX01FU1NBR0VTPU1lc3NhZ2VzCi1fVUlfQUNUSU9OX05FV19NRVNTQUdFPU5ldyBNZXNzYWdlLi4uCi1fVUlfQUNUSU9OX05FV19FTEVNRU5UPU5ldyBFbGVtZW50Li4uCi1fVUlfQUNUSU9OX1NFVF9FTEVNRU5UPVNldCBFbGVtZW50Ci1fVUlfQUNUSU9OX1NFVF9NRVNTQUdFPVNldCBNZXNzYWdlCi1fVUlfQUNUSU9OX1NFVF9CSU5ESU5HPVNldCBCaW5kaW5nCi1fVUlfQ0hFQ0tCT1hfT1ZFUldSSVRFPU92ZXJ3cml0ZSBleGlzdGluZyBiaW5kaW5nIGluZm9ybWF0aW9uCi1fVUlfQUNUSU9OX1NFVF9QT1JUVFlQRT1TZXQgUG9ydFR5cGUKLV9VSV9BQ1RJT05fRURJVF9QT1JUX0FERFJFU1M9RWRpdCBBZGRyZXNzCi1fVUlfQUNUSU9OX0FERD1BZGQKLV9VSV9BQ1RJT05fT1BFTl9JTVBPUlQ9T3BlbiBJbXBvcnQKLV9VSV9VTlNQRUNJRklFRD0odW5zcGVjaWZpZWQpCi1fVUlfTEFCRUxfTkFNRT1OYW1lCi1fVUlfTEFCRUxfVFlQRT1UeXBlCi1fVUlfQlVUVE9OX05FVz1OZXcuLi4KLV9VSV9MQUJFTF9FTEVNRU5UPUVsZW1lbnQKLV9VSV9CVVRUT05fQlJPV1NFPUJyb3dzZS4uLgotX1VJX0JJTkRJTkdfV0laQVJEPUJpbmRpbmcgV2l6YXJkCi1fVUlfQklORElORz1CaW5kaW5nCi1fVUlfTEFCRUxfTUVTU0FHRT1NZXNzYWdlCi1fVUlfTEFCRUxfUkVNT1ZFPVJlbW92ZQotX1VJX1RJVExFX1NFTEVDVD1TZWxlY3QKLV9VSV9USVRMRV9TRUxFQ1RfRklMRSA9IFNlbGVjdCBGaWxlCi1fVUlfREVTQ1JJUFRJT05fU0VMRUNUX1dTRExfT1JfWFNEID0gU2VsZWN0IGEgV1NETCBvciBYU0QgZmlsZSB0byBpbXBvcnQuCi1fVUlfVElUTEVfT1BUSU9OUz1PcHRpb25zCi1fVUlfWUVTX0xBQkVMPVllcwotX1VJX1BPUlRfVFlQRT1Qb3J0IFR5cGUKLV9VSV9QT1JUX1dJWkFSRD1Qb3J0IFdpemFyZAotX1VJX05PX0xBQkVMPU5vCi1fVUlfQUREPUFkZC4uLgotX1VJX0hFTFA9SGVscAotX1VJX0xBQkVMX05BTUVfRklMVEVSPU5hbWUgKD8gPSBjaGFyYWN0ZXIsICogPSBhbnkgc3RyaW5nKToKLV9XQVJOX05BTUVfTVVTVF9DT05UQUlOX0FUX0xFQVNUX09ORV9DSEFSPUlXQVgxNDE1VyBOYW1lIGZpZWxkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyCi1fV0FSTl9OQU1FX0hBU19TUEFDRT1JV0FYMTQwMlcgTmFtZSBmaWVsZCBjYW5ub3QgY29udGFpbiBhIHNwYWNlCi1fV0FSTl9OQU1FX0lOVkFMSURfRklSU1Q9SVdBWDE0MDNXIEZpcnN0IGNoYXJhY3RlciBpbiBuYW1lIGZpZWxkIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgKCdfJywgJzonLCAnbGV0dGVyJykKLV9XQVJOX05BTUVfSU5WQUxJRF9DSEFSPUlXQVgxNDA0VyBOYW1lIGZpZWxkIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyICgnCi1fV0FSTl9XU0lfQ09NUExJQU5DRV9QUk9UT0NPTD1XUy1JIGNvbXBsaWFuY2Ugd2FybmluZzogcHJvdG9jb2wgc2hvdWxkIGJlIHswfQotX0VSUk9SX1dTSV9DT01QTElBTkNFX1BST1RPQ09MPVdTLUkgY29tcGxpYW5jZSBlcnJvcjogcHJvdG9jb2wgbXVzdCBiZSB7MH0KLV9XQVJOX1dTSV9DT01QTElBTkNFX1JQQ19FTkNPRElORz1XUy1JIGNvbXBsaWFuY2Ugd2FybmluZzogYmluZGluZyBzaG91bGQgbm90IGJlIHJwYyBlbmNvZGVkCi1fRVJST1JfV1NJX0NPTVBMSUFOQ0VfUlBDX0VOQ09ESU5HPVdTLUkgY29tcGxpYW5jZSBlcnJvcjogYmluZGluZyBjYW5ub3QgYmUgcnBjIGVuY29kZWQKLV9XU0lfQ09NUExJQU5DRV9MSU5LX1RFWFQ9TW9kaWZ5IHByb2plY3QgY29tcGxpYW5jZSBzZXR0aW5nCi0KLV9VSV9MQUJFTF9VTkRFRklORURfQVJHMT17MH0gdW5kZWZpbmVkCi1fVUlfTEFCRUxfT1JfVU5ERUZJTkVEX0FSRzI9ezB9IG9yIHsxfSB1bmRlZmluZWQKLV9VSV9MQUJFTF9OT19PQkpFQ1RfU1BFQ0lGSUVEX0FSRzE9bm8gezB9IHNwZWNpZmllZAotX1VJX0xBQkVMX05PX1BBUkFNRVRFUlNfU1BFQ0lGSUVEPW5vIHBhcmFtZXRlcnMgc3BlY2lmaWVkCi0KLV9VSV9MQUJFTF9ERUZBVUxUID0gZGVmYXVsdAotCi1fVUlfRURJVE9SX05BTUU9V1NETCBFZGl0b3IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9FZGl0b3JNb2RlU2VjdGlvbkZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0VkaXRvck1vZGVTZWN0aW9uRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YTcwZGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0VkaXRvck1vZGVTZWN0aW9uRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9uczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEVkaXRvck1vZGVTZWN0aW9uRmlsdGVyCi17Ci0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzQXBwbGljYWJsZShDbGFzcyBzZWN0aW9uQ2xhc3MsIE9iamVjdCBvYmplY3QpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMUV4dGVuc2lvbnNTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExRXh0ZW5zaW9uc1NlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IzMWYwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExRXh0ZW5zaW9uc1NlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRFeHRlbnNpb25FbGVtZW50Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0LldTRExNb2RlbEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLmNvbW1hbmRzLkFkZEV4dGVuc2lvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24uY29tbWFuZHMuUmVtb3ZlRXh0ZW5zaW9uTm9kZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5BYnN0cmFjdEV4dGVuc2lvbnNTZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuYXBwaW5mby5BZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuYXBwaW5mby5ET01FeHRlbnNpb25UcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuYXBwaW5mby5ET01FeHRlbnNpb25UcmVlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uRXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uY3VzdG9tLk5vZGVDdXN0b21pemF0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFcxMUV4dGVuc2lvbnNTZWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RFeHRlbnNpb25zU2VjdGlvbgotewotICBXU0RMTW9kZWxBZGFwdGVyIG1vZGVsQWRhcHRlcjsKLSAgCi0gIHB1YmxpYyBXMTFFeHRlbnNpb25zU2VjdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHNldEV4dGVuc2lvblRyZWVMYWJlbFByb3ZpZGVyKG5ldyBXU0RMRXh0ZW5zaW9uVHJlZUxhYmVsUHJvdmlkZXIoKSk7Ci0gICAgc2V0RXh0ZW5zaW9uVHJlZUNvbnRlbnRQcm92aWRlcihuZXcgV1NETEV4dGVuc2lvblRyZWVDb250ZW50UHJvdmlkZXIoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQWRkRXh0ZW5zaW9uQ29tbWFuZCBnZXRBZGRFeHRlbnNpb25Db21tYW5kKE9iamVjdCBvKQotICB7Ci0gICAgQWRkRXh0ZW5zaW9uQ29tbWFuZCBhZGRFeHRlbnNpb25Db21tYW5kID0gbnVsbDsKLSAgICBFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCA9IGdldEV4dGVuc2libGVFbGVtZW50KGlucHV0KTsKLSAgICBpZiAoZXh0ZW5zaWJsZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pIG87Ci0gICAgICAgIGFkZEV4dGVuc2lvbkNvbW1hbmQgPSBuZXcgQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQoTWVzc2FnZXMuX1VJX0xBQkVMX0FERF9FWFRFTlNJT05fRUxFTUVOVCwgZXh0ZW5zaWJsZUVsZW1lbnQsIGVsZW1lbnQpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIC8vIFRPRE8gKGNzKSBuZWVkIHRvIGltcGxlbWVudCB0aGlzCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhZGRFeHRlbnNpb25Db21tYW5kOwotICB9Ci0KLSAgcHJvdGVjdGVkIENvbW1hbmQgZ2V0UmVtb3ZlRXh0ZW5zaW9uQ29tbWFuZChPYmplY3QgbykKLSAgewotICAgIGlmIChvIGluc3RhbmNlb2YgTm9kZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFJlbW92ZUV4dGVuc2lvbk5vZGVDb21tYW5kKCJyZW1vdmUiLCAoTm9kZSlvKTsgLy8kTk9OLU5MUy0xJAotICAgIH0gIAotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAKLSAgLy8gVE9ETyAoY3MpIHRoZSBBYnN0cmFjdEV4dGVuc2lvbnNTZWN0aW9uIGlzIHBvbGx1dGVkIHdpdGggWFNEIHNwZWNpYyBzdHVmZgotICAvLyBuZWVkIHRvIGNsZWFuIHRoYXQgdXAhIQotICAvLyBUT0RPIChjcykgd2Ugc2hvdWxkIGF2b2lkIHJlZmVyZW5jaW5nIFdTREwgbW9kZWwgb2JqZWN0cyAuLi4gZ28gdGhydSBmYWNhZGUgaW5zdGVhZAotICBwdWJsaWMgdm9pZCBzZXRJbnB1dChJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgeyAgICAKLSAgICBzdXBlci5zZXRJbnB1dChwYXJ0LCBzZWxlY3Rpb24pOwotICAgIGlzUmVhZE9ubHkgPSB0cnVlOyAgICAKLSAgICBFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCA9IGdldEV4dGVuc2libGVFbGVtZW50KGlucHV0KTsKLSAgICBpZiAoZXh0ZW5zaWJsZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7ICAgIAotICAgICAgRWxlbWVudCBlbGVtZW50ID0gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50SW1wbCkKLSAgICAgIHsgIAotICAgICAgICBpc1JlYWRPbmx5ID0gZmFsc2U7Ci0gICAgICAgIG1vZGVsQWRhcHRlciA9IFdTRExNb2RlbEFkYXB0ZXIubG9va3VwT3JDcmVhdGVNb2RlbEFkYXB0ZXIoZWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkpOwotICAgICAgICBtb2RlbEFkYXB0ZXIuZ2V0TW9kZWxSZWNvbmNpbGVBZGFwdGVyKCkuYWRkTGlzdGVuZXIoaW50ZXJuYWxOb2RlQWRhcHRlcik7Ci0gICAgICB9ICAgICAgICAgCi0gICAgfSAgICAgICAKLSAgICBhZGRCdXR0b24uc2V0RW5hYmxlZCghaXNSZWFkT25seSk7Ci0gICAgcmVtb3ZlQnV0dG9uLnNldEVuYWJsZWQoIWlzUmVhZE9ubHkpOyAgICAgICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewotICAgIHN1cGVyLmRpc3Bvc2UoKTsKLSAgICBpZiAobW9kZWxBZGFwdGVyICE9IG51bGwpCi0gICAgewotICAgICAgbW9kZWxBZGFwdGVyLmdldE1vZGVsUmVjb25jaWxlQWRhcHRlcigpLnJlbW92ZUxpc3RlbmVyKGludGVybmFsTm9kZUFkYXB0ZXIpOwotICAgIH0gIAotICB9Ci0gIAotICAvLyBUT0RPIChjcykgaW4gdGhlIGZ1dHVyZSB3ZSBuZWVkIHRvICdmaXgnIHRoaW5ncyBzbyB0aGF0IHdlIGNhbiByaWQgb2YgdGhpcyBtZXRob2QKLSAgLy8gd2UgbmVlZCBhIHdheSB0byBkbyBhbGwgb2YgdGhpcyB2aWEgdGhlIGZhY2FkZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgYW55IGRpcmVjdCAKLSAgLy8gZGVwZW5kZW5jeSBvbiB0aGUgV1NETDEuMSBtb2RlbC4vIFNpbWlsYXJseSB0aGlzIGNsYXNzIHNob3VsZG4ndCBuZWVkIHRvICdrbm93JwotICAvLyBhYm91dCBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiB0aGlzIGlzIGFuIHVuZGVybHlpbmcgZGV0YWlsIHRoYXQgbmVlZHMgdG8gYmUgaGlkZGVuCi0gIC8vIAotICBwcml2YXRlIHN0YXRpYyBFeHRlbnNpYmxlRWxlbWVudCBnZXRFeHRlbnNpYmxlRWxlbWVudChPYmplY3QgbykKLSAgewotICAgIGlmIChvIGluc3RhbmNlb2YgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pCi0gICAgeyAgICAgICAgIAotICAgICAgbyA9ICgoQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pbykuZ2V0TW9kZWwoKTsKLSAgICB9ICAKLSAgICBpZiAobyBpbnN0YW5jZW9mIEFkYXB0ZXIpCi0gICAgewotICAgICAgLy8gVE9ETyAoY3MpIHdlIG5lZWQgYSB3YXkgdG8gZG8gYWxsIG9mIHRoaXMgdmlhIHRoZSBmYWNhZGUKLSAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhbnkgZGlyZWN0IGRlcGVuZGVuY3kgb24gdGhlIFdTREwxLjEgbW9kZWwKLSAgICAgIC8vIG9mIGNvdXJzZSBhdCB0aGUgbW9tZW50IHdlIGNhbGwgdGhpcyBjbGFzcyB0aGUgVzExRXh0ZW5zaW9uU2VjdGlvbnMKLSAgICAgIC8vIHNvIHRoYXQncyBub3QgYSBwcm9ibGVtLiAgSW4gdGhlIGZ1dHVyZSB0aG91Z2ggd2UnbGwgd2FudCB0byByZXVzZSB0aGlzIAotICAgICAgLy8gY2xhc3MgZm9yIFdTREwgMi4wLgotICAgICAgLy8gICAgICAgCi0gICAgICBvID0gKChBZGFwdGVyKW8pLmdldFRhcmdldCgpOwotICAgIH0gICAgICAKLSAgICBpZiAobyBpbnN0YW5jZW9mIEV4dGVuc2libGVFbGVtZW50KQotICAgIHsKLSAgICAgIHJldHVybiAoRXh0ZW5zaWJsZUVsZW1lbnQpbzsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQWRkRXh0ZW5zaW9uc0NvbXBvbmVudERpYWxvZyBjcmVhdGVBZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nKCkKLSAgeyAgICAKLSAgICBFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCA9IGdldEV4dGVuc2libGVFbGVtZW50KGlucHV0KTsKLSAgICBpZiAoZXh0ZW5zaWJsZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIEFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2cgZGlhbG9nID0gbmV3IEFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2coY29tcG9zaXRlLmdldFNoZWxsKCksIGdldEV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnkoKSk7ICAgCi0gICAgICBkaWFsb2cuYWRkRWxlbWVudHNUYWJsZUZpbHRlcihuZXcgQWRkRXh0ZW5zaW9uc0NvbXBvbmVudERpYWxvZ0ZpbHRlcihleHRlbnNpYmxlRWxlbWVudC5nZXRFbGVtZW50KCkpKTsKLSAgICAgIHJldHVybiBkaWFsb2c7Ci0gICAgfSAgICAgIAotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIEV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnkgZ2V0RXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnkoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIElQcmVmZXJlbmNlU3RvcmUgZ2V0UHJlZlN0b3JlKCkKLSAgewotCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0gIH0KLSAKLSAgc3RhdGljIGNsYXNzIFdTRExFeHRlbnNpb25UcmVlQ29udGVudFByb3ZpZGVyIGV4dGVuZHMgRE9NRXh0ZW5zaW9uVHJlZUNvbnRlbnRQcm92aWRlcgotICB7Ci0gICAgcHVibGljIGphdmEubGFuZy5PYmplY3RbXSBnZXRFbGVtZW50cyhqYXZhLmxhbmcuT2JqZWN0IGlucHV0RWxlbWVudCkKLSAgICB7ICAgICAgICAgCi0gICAgICBFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCA9IGdldEV4dGVuc2libGVFbGVtZW50KGlucHV0RWxlbWVudCk7Ci0gICAgICBpZiAoZXh0ZW5zaWJsZUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBkb21FbGVtZW50TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsgICAgIAotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBleHRlbnNpYmxlRWxlbWVudC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpLm5leHQoKTsKLSAgICAgICAgICAvLyBhZGQgdGhlIERPTSBlbGVtZW50Ci0gICAgICAgICAgZG9tRWxlbWVudExpc3QuYWRkKGVsZW1lbnQuZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZG9tRWxlbWVudExpc3QudG9BcnJheSgpOwotICAgICAgfQotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QudG9BcnJheSgpOwotICAgIH0KLSAgfQotICAKLSAgc3RhdGljIGNsYXNzIFdTRExFeHRlbnNpb25UcmVlTGFiZWxQcm92aWRlciBleHRlbmRzIERPTUV4dGVuc2lvblRyZWVMYWJlbFByb3ZpZGVyCi0gIHsKLSAgICBwcml2YXRlIElMYWJlbFByb3ZpZGVyIGdldExhYmVsUHJvdmlkZXIoTm9kZSBub2RlKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBub2RlLmdldE5hbWVzcGFjZVVSSSgpOyAgICAgIAotICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgeyAgCi0gICAgICAgIE5vZGVDdXN0b21pemF0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBYU0RFZGl0b3JQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldE5vZGVDdXN0b21pemF0aW9uUmVnaXN0cnkoKTsgICAgICAKLSAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmdldExhYmVsUHJvdmlkZXIobmFtZXNwYWNlKTsKLSAgICAgIH0gICAgICAgIAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KQotICAgIHsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudClvYmplY3Q7Ci0gICAgICAgIElMYWJlbFByb3ZpZGVyIHByb3ZpZGVyID0gZ2V0TGFiZWxQcm92aWRlcihlbGVtZW50KTsKLSAgICAgICAgaWYgKHByb3ZpZGVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gcHJvdmlkZXIuZ2V0SW1hZ2UoZWxlbWVudCk7Ci0gICAgICAgIH0gICAgICAgICAgCi0gICAgICB9Ci0gICAgICByZXR1cm4gc3VwZXIuZ2V0SW1hZ2Uob2JqZWN0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkKLSAgICB7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICAgICBJTGFiZWxQcm92aWRlciBwcm92aWRlciA9IGdldExhYmVsUHJvdmlkZXIoZWxlbWVudCk7Ci0gICAgICAgIGlmIChwcm92aWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmdldFRleHQoZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7Ci0gICAgfSAgICAgICAgCi0gIH0KLSAgLyoqCi0gICAqIFRoaXMgZmlsdGVyIGlzIHRvIGJlIHVzZWQgYnkgdGhlIGRpYWxvZyBpbnZva2VkIHdoZW4gYWRkQnV0dG9uIGlzIHByZXNzZWQKLSAgICovCi0gIHByaXZhdGUgY2xhc3MgQWRkRXh0ZW5zaW9uc0NvbXBvbmVudERpYWxvZ0ZpbHRlciBleHRlbmRzIFZpZXdlckZpbHRlcgotICB7Ci0gICAgcHJpdmF0ZSBFbGVtZW50IGhvc3RFbGVtZW50OwotCi0gICAgcHVibGljIEFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2dGaWx0ZXIoRWxlbWVudCBob3N0RWxlbWVudCkKLSAgICB7Ci0gICAgICB0aGlzLmhvc3RFbGVtZW50ID0gaG9zdEVsZW1lbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnRFbGVtZW50LCBPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9ICgoWFNERWxlbWVudERlY2xhcmF0aW9uKSBlbGVtZW50KS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgZWxlbWVudCkuZ2V0TmFtZSgpOwotICAgICAgICBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIGZpbHRlciA9IChFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyKSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5KCkuZ2V0UHJvcGVydHkobmFtZXNwYWNlLCAiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgaWYgKGZpbHRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZpbHRlci5pc1ZhbGlkQ29udGV4dChob3N0RWxlbWVudCwgbmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGlzVHJlZVZpZXdlcklucHV0RWxlbWVudChFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCA9IGdldEV4dGVuc2libGVFbGVtZW50KGlucHV0KTsKLSAgICByZXR1cm4gZXh0ZW5zaWJsZUVsZW1lbnQgIT0gbnVsbCAmJiBleHRlbnNpYmxlRWxlbWVudC5nZXRFbGVtZW50KCkgPT0gZWxlbWVudDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IwOGIzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNDb21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lU2VjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24gZXh0ZW5kcyBOYW1lU2VjdGlvbiB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgTkVXX1NUUklORyA9IE1lc3NhZ2VzLl9VSV9CVVRUT05fTkVXOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgQlJPV1NFX1NUUklORyA9IE1lc3NhZ2VzLl9VSV9CVVRUT05fQlJPV1NFOyAvLyROT04tTkxTLTEkCi0JCi0JcHJvdGVjdGVkIENMYWJlbCBjb21ib0xhYmVsOyAKLQlwcm90ZWN0ZWQgQ0NvbWJvIGNvbWJvOwotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyOwotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0JCWNyZWF0ZUNvbnRyb2xBcmVhKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xBcmVhKCkKLQl7Ci0JCUZvcm1EYXRhIGRhdGE7Ci0JCQotCQljb21ibyA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDQ29tYm8oY29tcG9zaXRlKTsKLQkJY29tYm8uc2V0QmFja2dyb3VuZChjb21wb3NpdGUuZ2V0QmFja2dyb3VuZCgpKTsKLQkJY29tYm8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0JCWNvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19NRVNTQUdFX1JFRl9NRVNTQUdFX0NPTUJPKTsKLQkJCi0JCWNvbWJvTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX01FU1NBR0UgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIDAsIFNXVC5DRU5URVIpOwotCQljb21ib0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotLy8JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYnV0dG9uLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCWNvbWJvLnNldExheW91dERhdGEoZGF0YSk7Ci0JfQotCQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJaWYgKG5hbWVUZXh0LmlzRm9jdXNDb250cm9sKCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQlTdHJpbmcgcmVmTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQotCQljb21iby5yZW1vdmVBbGwoKTsKLQkJY29tYm8uYWRkKEJST1dTRV9TVFJJTkcpOwotCQljb21iby5hZGQoTkVXX1NUUklORyk7Ci0JCQotCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBnZXRNb2RlbCgpKS5nZXRUYXJnZXQoKTsKLQkJaWYgKG1lc3NhZ2VSZWYgIT0gbnVsbCAmJiBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJcmVmTmFtZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQl9Ci0JCQotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCWlmIChlZGl0TWFuYWdlciAhPSBudWxsKSB7Ci0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gc3BlY3MgPSBlZGl0TWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc3BlY3MubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJY29tYm8uYWRkKChTdHJpbmcpIHNwZWNzW2luZGV4XS5nZXROYW1lKCkpOwotCQkJfQotCQl9CQkKLQkJCi0JCVN0cmluZ1tdIGl0ZW1zID0gY29tYm8uZ2V0SXRlbXMoKTsKLQkJaW50IGluZGV4OwotCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCWlmIChpdGVtc1tpbmRleF0uZXF1YWxzKHJlZk5hbWUpKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChpbmRleCA8IGl0ZW1zLmxlbmd0aCkgewotCQkJLy8gRm91bmQgYSBtYXRjaAotCQkJY29tYm8uc2VsZWN0KGluZGV4KTsKLQkJfQotCQllbHNlIHsKLQkJCWNvbWJvLnNldFRleHQocmVmTmFtZSk7Ci0JCX0KLQotCQlzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKGNvbWJvKTsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCi0KLS8vCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBnZXRNb2RlbCgpKS5nZXRUYXJnZXQoKTsKLS8vCQlJdGVyYXRvciBpdCA9IG1lc3NhZ2VSZWYuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0vLwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotLy8JCQlNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgaXQubmV4dCgpOwotLy8JCQljb21iby5hZGQobWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLS8vCQl9Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLQkJaWYgKHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJcmV0dXJuIHJlZk1hbmFnZXI7Ci0JCX0KLQotCQlyZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0TWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKChJQVNET2JqZWN0KSBnZXRNb2RlbCgpKTsKLSAgICAgICAgCi0JCXJldHVybiByZWZNYW5hZ2VyOwotCX0KLQotCQotCXB1YmxpYyBib29sZWFuIHNob3VsZFVzZUV4dHJhU3BhY2UoKQotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8pIHsKLQkJCWlmIChpc0xpc3RlbmVyRW5hYmxlZCgpICYmICFpc0luRG9IYW5kbGUpIAotCQkJewotCQkJCWlzSW5Eb0hhbmRsZSA9IHRydWU7Ci0JCQkJc3RhcnREZWxheWVkRXZlbnQoZXZlbnQpOwotCQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJc3VwZXIuaGFuZGxlRXZlbnQoZXZlbnQpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlzdXBlci5kb0hhbmRsZUV2ZW50KGV2ZW50KTsKLQkJaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibykgewotCQkJU3RyaW5nIHZhbHVlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpICE9IC0xKSB7Ci0JCQkJdmFsdWUgPSBjb21iby5nZXRJdGVtKGNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOwotCQkJfQotCQkJCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBudWxsOwotCQkJaW50IGNvbnRpbnVlQXBwbHkgPSBXaW5kb3cuT0s7Ci0JCQlJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKElNZXNzYWdlUmVmZXJlbmNlKSB0aGlzLmdldE1vZGVsKCk7Ci0JCQkKLQkJCWlmICh2YWx1ZS5lcXVhbHMoTkVXX1NUUklORykpIHsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSBlZGl0TWFuYWdlci5nZXROZXdEaWFsb2coKTsKLQkJCQljb250aW51ZUFwcGx5ID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLQkJCQlzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQl9Ci0JCQllbHNlIGlmICh2YWx1ZS5lcXVhbHMoQlJPV1NFX1NUUklORykpIHsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSBlZGl0TWFuYWdlci5nZXRCcm93c2VEaWFsb2coKTsKLQkJCQljb250aW51ZUFwcGx5ID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLQkJCQlzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7CQkJCQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc3BlYyA9IGdldENvbXBvbmVudFNwZWNpZmljYXRpb25Gb3JWYWx1ZSgoU3RyaW5nKXZhbHVlKTsKLQkJCX0KLQkJCQotCQkJaWYgKGNvbnRpbnVlQXBwbHkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJCWlmIChzcGVjICE9IG51bGwpIHsKLQkJCQkJZWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKG1lc3NhZ2VSZWYsIHNwZWMpOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJCi0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFNwZWNpZmljYXRpb24gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKFN0cmluZyB2YWx1ZSkKLQl7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJaWYgKGVkaXRNYW5hZ2VyICE9IG51bGwpCi0JCXsgIAotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHF1aWNrUGlja3MgPSBlZGl0TWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0JCQlpZiAocXVpY2tQaWNrcyAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaSA8IHF1aWNrUGlja3MubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBxdWlja1BpY2tzW2ldOwotCQkJCQlpZiAodmFsdWUuZXF1YWxzKGNvbXBvbmVudFNwZWNpZmljYXRpb24uZ2V0TmFtZSgpKSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIGNvbXBvbmVudFNwZWNpZmljYXRpb247Ci0JCQkJCX0gICAgICAgICAgICAgICAgCi0JCQkJfSAgCi0JCQl9Ci0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gaGlzdG9yeSA9IGVkaXRNYW5hZ2VyLmdldEhpc3RvcnkoKTsKLQkJCWlmIChoaXN0b3J5ICE9IG51bGwpCi0JCQl7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgaGlzdG9yeS5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbiA9IGhpc3RvcnlbaV07Ci0JCQkJCWlmICh2YWx1ZS5lcXVhbHMoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpKQotCQkJCQl7ICAKLQkJCQkJCXJldHVybiBjb21wb25lbnRTcGVjaWZpY2F0aW9uOwotCQkJCQl9Ci0JCQkJfSAgCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbkZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYzU1NmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb25GaWx0ZXIgaW1wbGVtZW50cyBJRmlsdGVyIHsKLQkvLyBybWFoOiB3ZSBzaG91bGQgY29uc2lkZXIgb3RoZXIgd2F5cyBvZiAnZXh0ZW5kaW5nJyB0aGlzIGNhcGFiaWxpdHkKLQkvLyByYXRoZXIgdGhhbiBzaW1wbHkgY2hlY2tpbmcgYSB2YXJpYWJsZS4uLi4KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gc2hvd1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uID0gdHJ1ZTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBzZWxlY3QoT2JqZWN0IHRvVGVzdCkgewotCQlpZiAodG9UZXN0IGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UgJiYgc2hvd1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExUGFyYW1ldGVyU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMVBhcmFtZXRlclNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIyNjJkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExUGFyYW1ldGVyU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklUYWJiZWRQcm9wZXJ0eUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5QYXJhbWV0ZXJTZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFQYXJhbWV0ZXJTZWN0aW9uIGV4dGVuZHMgUGFyYW1ldGVyU2VjdGlvbiB7Ci0JcHJvdGVjdGVkIEJ1dHRvbiB0eXBlUmFkaW87Ci0JcHJvdGVjdGVkIEJ1dHRvbiBlbGVtZW50UmFkaW87Ci0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXI7Ci0JCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbEFyZWEoKQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xBcmVhKCk7Ci0JCUZvcm1EYXRhIGRhdGE7Ci0JCQotCQlDTGFiZWwgcmVmZXJlbmNlS2luZExhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9SRUZFUkVOQ0VfS0lORCArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlDb21wb3NpdGUgY29tcCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDb21wb3NpdGUoY29tcG9zaXRlKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlsYXlvdXQubWFyZ2luUmlnaHQgPSA1OwotCQljb21wLnNldExheW91dChsYXlvdXQpOwotCQkKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tcCwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21wLCAwLCBTV1QuQ0VOVEVSKTsKLQkJcmVmZXJlbmNlS2luZExhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQl0eXBlUmFkaW8gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQnV0dG9uKGNvbXAsIE1lc3NhZ2VzLl9VSV9MQUJFTF9UWVBFLCBTV1QuUkFESU8pOyAvLyROT04tTkxTLTEkCi0JCWVsZW1lbnRSYWRpbyA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVCdXR0b24oY29tcCwgTWVzc2FnZXMuX1VJX0xBQkVMX0VMRU1FTlQsIFNXVC5SQURJTyk7CSAvLyROT04tTkxTLTEkCi0JCXR5cGVSYWRpby5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJZWxlbWVudFJhZGlvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHR5cGVSYWRpbywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfUEFSVF9UWVBFX1JBRElPKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChlbGVtZW50UmFkaW8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX1BBUlRfRUxFTUVOVF9SQURJTyk7Ci0JCQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21ibywgK0lUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5WU1BBQ0UpOwotCQljb21wLnNldExheW91dERhdGEoZGF0YSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvV2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQlXMTFQYXJhbWV0ZXJGb3JQYXJ0IHBhcmFtZXRlciA9IChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB0aGlzLmdldE1vZGVsKCk7Ci0JCVBhcnQgcGFydCA9IChQYXJ0KSBwYXJhbWV0ZXIuZ2V0VGFyZ2V0KCk7Ci0JCQotCQlpZiAoZS53aWRnZXQgPT0gdHlwZVJhZGlvICYmIHR5cGVSYWRpby5nZXRTZWxlY3Rpb24oKSkgewotCQkJY29tYm9MYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9UWVBFKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIHRydWUsIG51bGwpOwotCQkJc3VwZXIucmVmcmVzaENvbWJvKCk7Ci0JCX0KLQkJZWxzZSBpZiAoZS53aWRnZXQgPT0gZWxlbWVudFJhZGlvICYmIGVsZW1lbnRSYWRpby5nZXRTZWxlY3Rpb24oKSkgewotCQkJY29tYm9MYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9FTEVNRU5UICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCBmYWxzZSwgbnVsbCk7Ci0JCQlyZWZyZXNoRWxlbWVudENvbWJvKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9IYW5kbGVFdmVudChFdmVudCBldmVudCkgewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvKSB7Ci0JCQlpZiAoZWxlbWVudFJhZGlvLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkJLy8gSGFuZGxlIEVsZW1lbnQgc2VsZWN0aW9uCi0JCQkJU3RyaW5nIHZhbHVlID0gY29tYm8uZ2V0SXRlbShjb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLQkJCQkKLQkJCQlXMTFQYXJhbWV0ZXJGb3JQYXJ0IHBhcmFtZXRlciA9IChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB0aGlzLmdldE1vZGVsKCk7Ci0JCQkJCi0JCQkJaWYgKHZhbHVlLmVxdWFscyhORVdfU1RSSU5HKSkgewotCQkJCQlDb21tYW5kIGNvbW1hbmQgPSBwYXJhbWV0ZXIuZ2V0U2V0RWxlbWVudENvbW1hbmQoSVBhcmFtZXRlci5TRVRfTkVXX0FDVElPTl9JRCk7Ci0JCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotCQkJCX0KLQkJCQllbHNlIGlmICh2YWx1ZS5lcXVhbHMoQlJPV1NFX1NUUklORykpIHsKLQkJCQkJQ29tbWFuZCBjb21tYW5kID0gcGFyYW1ldGVyLmdldFNldEVsZW1lbnRDb21tYW5kKElQYXJhbWV0ZXIuU0VMRUNUX0VYSVNUSU5HX0FDVElPTl9JRCk7Ci0JCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRFbGVtZW50Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKChTdHJpbmcpdmFsdWUpOwotCQkJCQlpZiAoc3BlYyAhPSBudWxsKSB7Ci0JCQkJCQllZGl0TWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UocGFyYW1ldGVyLCBzcGVjKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQkJc3VwZXIuZG9IYW5kbGVFdmVudChldmVudCk7Ci0JCXJlZnJlc2goKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcmVmcmVzaEVsZW1lbnRDb21ibygpIHsKLQkKLQkJCS8vIFJlZnJlc2ggd2l0aCBFbGVtZW50cwotCQkJSVBhcmFtZXRlciBwYXJhbSA9IG51bGw7Ci0JCQlPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJCQotCQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCQkJCXBhcmFtID0gKElQYXJhbWV0ZXIpIG1vZGVsOwotCQkJfQotCQkJCi0JCQlTdHJpbmcgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgZWxlbWVudE5hbWUgPSAiUGFyYW1ldGVyU2VjdGlvbi5qYXZhIjsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKHBhcmFtICE9IG51bGwpIHsKLQkJCQluYW1lID0gcGFyYW0uZ2V0TmFtZSgpOwotCQkJCWVsZW1lbnROYW1lID0gcGFyYW0uZ2V0Q29tcG9uZW50TmFtZSgpOwotCQkJfQotCi0JCQlpZiAoIW5hbWVUZXh0LmlzRm9jdXNDb250cm9sKCkpIHsKLQkJCQluYW1lVGV4dC5zZXRUZXh0KG5hbWUpOwotCQkJfQotCQkJCi0JCQkvLyBQb3B1bGF0ZSB0aGUgQ29tYm8KLQkJCWNvbWJvLnJlbW92ZUFsbCgpOwotCQkJY29tYm8uYWRkKEJST1dTRV9TVFJJTkcpOwotCQkJY29tYm8uYWRkKE5FV19TVFJJTkcpOwotCQkJCi0JCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldEVsZW1lbnRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJaWYgKGVkaXRNYW5hZ2VyICE9IG51bGwpIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gc3BlY3MgPSBlZGl0TWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0JCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNwZWNzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJCQljb21iby5hZGQoKFN0cmluZykgc3BlY3NbaW5kZXhdLmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBEaXNwbGF5IHRoZSBlbGVtZW50IGluIHRoZSBDb21ibwotCQkJU3RyaW5nW10gaXRlbXMgPSBjb21iby5nZXRJdGVtcygpOwotCQkJaW50IGluZGV4OwotCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaXRlbXMubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJaWYgKGl0ZW1zW2luZGV4XS5lcXVhbHMoZWxlbWVudE5hbWUpKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJaWYgKGluZGV4IDwgaXRlbXMubGVuZ3RoKSB7Ci0JCQkJLy8gRm91bmQgYSBtYXRjaAotCQkJCWNvbWJvLnNlbGVjdChpbmRleCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQljb21iby5zZXRUZXh0KGVsZW1lbnROYW1lKTsKLQkJCX0KLQkJCQotCQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCQotCQlPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQlXMTFQYXJhbWV0ZXJGb3JQYXJ0IHBhcmFtID0gKFcxMVBhcmFtZXRlckZvclBhcnQpIG1vZGVsOwotCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHBhcmFtLmdldFRhcmdldCgpOwotCQkJaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJdHlwZVJhZGlvLnNldFNlbGVjdGlvbih0cnVlKTsKLQkJCQllbGVtZW50UmFkaW8uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQkJCQljb21ib0xhYmVsLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX1RZUEUgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQloYW5kbGVUeXBlU2NlbmFyaW8gPSB0cnVlOwotCQkJfQotCQkJZWxzZSBpZiAocGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJdHlwZVJhZGlvLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0JCQkJZWxlbWVudFJhZGlvLnNldFNlbGVjdGlvbih0cnVlKTsKLQkJCQljb21ib0xhYmVsLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX0VMRU1FTlQgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQloYW5kbGVUeXBlU2NlbmFyaW8gPSBmYWxzZTsKLQkJCQlyZWZyZXNoRWxlbWVudENvbWJvKCk7CQkJCi0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBOZWl0aGVyIGEgVHlwZSBvciBFbGVtZW50Ci0JCQkJdHlwZVJhZGlvLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0JCQkJZWxlbWVudFJhZGlvLnNldFNlbGVjdGlvbih0cnVlKTsJCQkJCi0JCQl9Ci0JCX0KLQkKLQkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihlbGVtZW50UmFkaW8pOwotCQlzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKHR5cGVSYWRpbyk7Ci0JCQotCQlzdXBlci5yZWZyZXNoKCk7Ci0JCXNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldEVsZW1lbnRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLQkJaWYgKHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJcmV0dXJuIHJlZk1hbmFnZXI7Ci0JCX0KLQkJCi0JCXJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKElBU0RPYmplY3QpIGdldE1vZGVsKCkpOwotCQkKLQkJcmV0dXJuIHJlZk1hbmFnZXI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMVBhcmFtZXRlclNlY3Rpb25GaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFQYXJhbWV0ZXJTZWN0aW9uRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNWQ4MmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMVBhcmFtZXRlclNlY3Rpb25GaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuRWRpdG9yTW9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFQYXJhbWV0ZXJTZWN0aW9uRmlsdGVyIGltcGxlbWVudHMgSUZpbHRlcgotewotICBwdWJsaWMgYm9vbGVhbiBzZWxlY3QoT2JqZWN0IHRvVGVzdCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKHRvVGVzdCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpCi0gICAgeyAgCi0gICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgICBFZGl0b3JNb2RlTWFuYWdlciBtYW5hZ2VyID0gKEVkaXRvck1vZGVNYW5hZ2VyKSBlZGl0b3IuZ2V0QWRhcHRlcihFZGl0b3JNb2RlTWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIGlmIChtYW5hZ2VyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBFZGl0b3JNb2RlU2VjdGlvbkZpbHRlciBmaWx0ZXIgPSAoRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIpIG1hbmFnZXIuZ2V0Q3VycmVudE1vZGUoKS5nZXRBZGFwdGVyKEVkaXRvck1vZGVTZWN0aW9uRmlsdGVyLmNsYXNzKTsKLSAgICAgICAgICBpZiAoZmlsdGVyICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gZmlsdGVyLmlzQXBwbGljYWJsZShXMTFQYXJhbWV0ZXJTZWN0aW9uLmNsYXNzLCB0b1Rlc3QpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWNvbmNpbGVyL0RlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlY29uY2lsZXIvRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvcldTREwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmMzQzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlY29uY2lsZXIvRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvcldTREwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWNvbmNpbGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdGlvbkZyYW1ld29yazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yOwotCi0vKioKLSAqIFRoaXMgcGVyZm9ybXMgdGhlIGFzLXlvdS10eXBlIHZhbGlkYXRpb24gZm9yIFdTREwgZmlsZXMKLSAqLwotcHVibGljIGNsYXNzIERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMIGV4dGVuZHMgRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvcgotewotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgSWQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi53c2RsIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgVmFsaWRhdG9yIF92YWxpZGF0b3I7Ci0KLSAgcHVibGljIERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMKCkKLSAgewotICB9Ci0KLSAgcHJpdmF0ZSBWYWxpZGF0b3IgZ2V0VmFsaWRhdG9yKCkKLSAgewotICAgIGlmIChfdmFsaWRhdG9yID09IG51bGwpCi0gICAgICBfdmFsaWRhdG9yID0gVmFsaWRhdGlvbkZyYW1ld29yay5nZXREZWZhdWx0KCkuZ2V0VmFsaWRhdG9yKElkKTsKLSAgICByZXR1cm4gX3ZhbGlkYXRvcjsKLSAgfQotCi0gIHByb3RlY3RlZCBJVmFsaWRhdG9yIGdldERlbGVnYXRlVmFsaWRhdG9yKCkKLSAgewotICAgIFZhbGlkYXRvciB2ID0gZ2V0VmFsaWRhdG9yKCk7Ci0gICAgaWYgKHYgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIHJldHVybiB2LmFzSVZhbGlkYXRvcigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNEZWxlZ2F0ZVZhbGlkYXRvckVuYWJsZWQoSUZpbGUgZmlsZSkKLSAgewotICAgIFZhbGlkYXRvciB2ID0gZ2V0VmFsaWRhdG9yKCk7Ci0gICAgaWYgKHYgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXYuc2hvdWxkVmFsaWRhdGUoZmlsZSwgZmFsc2UsIGZhbHNlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdi5pc0J1aWxkVmFsaWRhdGlvbigpIHx8IHYuaXNNYW51YWxWYWxpZGF0aW9uKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETEh5cGVybGluay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExIeXBlcmxpbmsuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFiYTI3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETEh5cGVybGluay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLQotLyoqCi0gKiBXU0RMSHlwZXJsaW5rIGtub3dzIGhvdyB0byBvcGVuIGxpbmtzIGZyb20gd3NkbCBmaWxlcy4KLSAqIAotICogQHNlZSBXU0RMSHlwZXJsaW5rRGV0ZWN0b3IKLSAqLwotcHVibGljIGNsYXNzIFdTRExIeXBlcmxpbmsgaW1wbGVtZW50cyBJSHlwZXJsaW5rCi17Ci0gIHByaXZhdGUgSVJlZ2lvbiBmUmVnaW9uOwotICBwcml2YXRlIFN0cmluZyBmUmVzb3VyY2U7Ci0gIHByaXZhdGUgU3RyaW5nIGZTcGVjOwotCi0gIHB1YmxpYyBXU0RMSHlwZXJsaW5rKElSZWdpb24gcmVnaW9uLCBTdHJpbmcgcmVzb3VyY2UsIFN0cmluZyBzcGVjKQotICB7Ci0gICAgZlJlZ2lvbiA9IHJlZ2lvbjsKLSAgICBmUmVzb3VyY2UgPSByZXNvdXJjZTsKLSAgICBmU3BlYyA9IHNwZWM7Ci0gIH0KLQotICBwdWJsaWMgSVJlZ2lvbiBnZXRIeXBlcmxpbmtSZWdpb24oKQotICB7Ci0gICAgcmV0dXJuIGZSZWdpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVMYWJlbCgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHlwZXJsaW5rVGV4dCgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIG9wZW4oKQotICB7Ci0gICAgLyoKLSAgICAgKiBJU1NVRTogVGhlcmUgYXJlIGNsZWFuZXIgd2F5cyB0byBmaW5kIHRoZSByaWdodCBmaWxlIGJhc2VkIG9uIGEgVVJJCi0gICAgICogc3RyaW5nIGFuZCBjbGVhbmVyIHdheXMgdG8gZmluZCB3aGljaCBlZGl0b3IgdG8gb3BlbiBmb3IgdGhlIGZpbGUuIFNlZQotICAgICAqIG90aGVyIElIeXBlcmxpbmsgYW5kIElIeXBlcmxpbmtEZXRlY3RvciBpbXBsZW1lbnRvcnMgZm9yIGV4YW1wbGVzLgotICAgICAqLwotICAgIFN0cmluZyBwYXR0ZXJuID0gInBsYXRmb3JtOi9yZXNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLSAgICBpZiAoZlJlc291cmNlICE9IG51bGwgJiYgZlJlc291cmNlLnN0YXJ0c1dpdGgocGF0dGVybikpCi0gICAgewotICAgICAgUGF0aCBwYXRoID0gbmV3IFBhdGgoZlJlc291cmNlLnN1YnN0cmluZyhwYXR0ZXJuLmxlbmd0aCgpKSk7Ci0gICAgICBJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCi0gICAgICBJV29ya2JlbmNoUGFnZSB3b3JrYmVuY2hQYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0KLSAgICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSB3b3JrYmVuY2hQYWdlLmdldEFjdGl2ZUVkaXRvcigpOwotCi0gICAgICAvLyBXaGVuIHVzaW5nIHRoZSBjdXJzb3Igb3IgdGhlIG1vdXNlIHRvIG1vdmUgYXJvdW5kIGluIHRoZSB0ZXh0Ci0gICAgICAvLyBlZGl0b3IsIHRoZSBsb2NhdGlvbiBoaXN0b3J5IGlzIG5vdCB1cGRhdGVkLCBzbyB3ZSBtYWtlIHN1cmUgd2Uga2VlcAotICAgICAgLy8gYSByZWZlcmVuY2UgdG8gd2hlcmUgd2UgYXJlLiBJZiB3ZSB1c2Ugb3RoZXIgbmF2aWdhdGlvbiBtZWFucywgbGlrZSB0aGUKLSAgICAgIC8vIG91dGxpbmUgdmlldywgdGhpcyBjYWxsIHdpbGwgbm90IGFkZCBhIG5ldyBsb2NhdGlvbiBoaXN0b3J5IGVudHJ5LCBhcwotICAgICAgLy8gaXQgaXMgdGhlIHNhbWUgYXMgdGhlIGxhc3QgbG9jYXRpb24gc2V0IHRocm91Z2ggdGhlIG91dGxpbmUgZHJpdmVuCi0gICAgICAvLyBuYXZpZ2F0aW9uLgotCi0gICAgICBib29sZWFuIHNhbWVFZGl0b3IgPSBlZGl0b3JQYXJ0LmdldEVkaXRvcklucHV0KCkgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmICgoSUZpbGVFZGl0b3JJbnB1dCkgZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpKS5nZXRGaWxlKCkuZXF1YWxzKGZpbGUpOwotCi0gICAgICB3b3JrYmVuY2hQYWdlLmdldE5hdmlnYXRpb25IaXN0b3J5KCkubWFya0xvY2F0aW9uKGVkaXRvclBhcnQpOwotCi0gICAgICBpZiAoIXNhbWVFZGl0b3IpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBpbiBhIGRpZmZlcmVudCBmaWxlLCBzbyBvcGVuIHRoZSB0YXJnZXQncyBlbmNsb3NpbmcKLSAgICAgICAgICAvLyByZXNvdXJjZSBpbiBpdCdzIG93biBlZGl0b3IuIExldCB0aGUgd29ya2JlbmNoIGRlY2lkZSB3aGF0IGVkaXRvcgotICAgICAgICAgIC8vIHRvIG9wZW4gYmFzZWQgb24gdGhlIGZpbGUncyBjb250ZW50IHR5cGUuCi0KLSAgICAgICAgICBlZGl0b3JQYXJ0ID0gSURFLm9wZW5FZGl0b3Iod29ya2JlbmNoUGFnZSwgZmlsZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLS8vICAgICAgICAgIExvZ2dlci5sb2coTG9nZ2VyLldBUk5JTkdfREVCVUcsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gQXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgdGFyZ2V0IGVkaXRvcidzIHNlbGVjdGlvbiBtYW5hZ2VyIGFuZCB0cnkgdG8KLSAgICAgIC8vIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSB0aGluZyAoc2NoZW1hIGNvbXBvbmVudCwgd3NkbCBlbGVtZW50LCBldGMpCi0gICAgICAvLyBwb2ludGVkIHRvIGJ5IGZTcGVjLgotCi0gICAgICBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIgPSAoSVNlbGVjdGlvblByb3ZpZGVyKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLQotICAgICAgaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdGlvblByb3ZpZGVyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihmU3BlYykpOwotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExIeXBlcmxpbmtEZXRlY3Rvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExIeXBlcmxpbmtEZXRlY3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjYwZTJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5PcGVuT25TZWxlY3Rpb25IZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNESHlwZXJsaW5rRGV0ZWN0b3I7Ci0vKioKLSAqIERldGVjdHMgaHlwZXJsaW5rcyBmb3IgV1NETCBmaWxlcy4gVXNlZCBieSB0aGUgV1NETCB0ZXh0IGVkaXRvciB0byBwcm92aWRlIGEKLSAqICJHbyB0byBkZWNsYXJhdGlvbiIgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHdpdGggdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgSmF2YQotICogZWRpdG9yLgotICovCi1wdWJsaWMgY2xhc3MgV1NETEh5cGVybGlua0RldGVjdG9yIGV4dGVuZHMgWFNESHlwZXJsaW5rRGV0ZWN0b3IKLXsKLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKi8KLSAgcHJvdGVjdGVkIElIeXBlcmxpbmsgY3JlYXRlSHlwZXJsaW5rKElEb2N1bWVudCBkb2N1bWVudCwgSURPTU5vZGUgbm9kZSwgSVJlZ2lvbiByZWdpb24pCi0gIHsKLSAgICAvLyBIZXJlIHdlJ3JlIHRyeWluZyB0byBmaW5kIHRoZSB0YXJnZXQgY29tcG9uZW50J3MgcmVzb3VyY2UgYW5kIHNwZWMuCi0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKGRvY3VtZW50KTsKLSAgICBPcGVuT25TZWxlY3Rpb25IZWxwZXIgaGVscGVyID0gbmV3IE9wZW5PblNlbGVjdGlvbkhlbHBlcihkZWZpbml0aW9uKTsKLSAgICBTdHJpbmdbXSB0YXJnZXREYXRhID0gaGVscGVyLmNvbXB1dGVTcGVjaWZpY2F0aW9uKG5vZGUpOwotCi0gICAgaWYgKHRhcmdldERhdGEgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVzb3VyY2UgPSB0YXJnZXREYXRhWzBdOwotICAgICAgU3RyaW5nIHNwZWMgPSB0YXJnZXREYXRhWzFdOwotICAgICAgcmV0dXJuIG5ldyBXU0RMSHlwZXJsaW5rKHJlZ2lvbiwgcmVzb3VyY2UsIHNwZWMpOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGRlZmluaXRpb24gZnJvbSBkb2N1bWVudAotICAgKiAKLSAgICogQHBhcmFtIGRvY3VtZW50Ci0gICAqIEByZXR1cm4gRGVmaW5pdGlvbgotICAgKi8KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGdldERlZmluaXRpb24oSURvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRFeGlzdGluZ01vZGVsRm9yUmVhZChkb2N1bWVudCk7Ci0gICAgaWYgKG1vZGVsICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIElET01Nb2RlbCkKLSAgICAgICAgewotICAgICAgICAgIElET01Eb2N1bWVudCBkb21Eb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0gICAgICAgICAgaWYgKGRvbURvYyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFdTRExNb2RlbEFkYXB0ZXIgbW9kZWxBZGFwdGVyID0gKFdTRExNb2RlbEFkYXB0ZXIpIGRvbURvYy5nZXRBZGFwdGVyRm9yKFdTRExNb2RlbEFkYXB0ZXIuY2xhc3MpOwotICAgICAgICAgICAgLy8gSVNTVUU6IGlmIGFkYXB0ZXIgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBmb3IgZG9tRG9jIGdldEFkYXB0ZXJGb3IKLSAgICAgICAgICAgIC8vIHdpbGwgY3JlYXRlIG9uZS4gU28gd2h5IGlzIHRoaXMgbnVsbCBjaGVjay9jcmVhdGlvbiBuZWVkZWQ/Ci0gICAgICAgICAgICBpZiAobW9kZWxBZGFwdGVyID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1vZGVsQWRhcHRlciA9IG5ldyBXU0RMTW9kZWxBZGFwdGVyKCk7Ci0gICAgICAgICAgICAgIGRvbURvYy5hZGRBZGFwdGVyKG1vZGVsQWRhcHRlcik7Ci0gICAgICAgICAgICAgIG1vZGVsQWRhcHRlci5jcmVhdGVEZWZpbml0aW9uKGRvbURvYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZpbml0aW9uID0gbW9kZWxBZGFwdGVyLmdldERlZmluaXRpb24oKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNMaW5rYWJsZUF0dHJpYnV0ZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGJvb2xlYW4gaXNMaW5rYWJsZSA9IHN1cGVyLmlzTGlua2FibGVBdHRyaWJ1dGUobmFtZSl8fAotICAgIG5hbWUuZXF1YWxzKFdTRExDb25zdGFudHMuQklORElOR19BVFRSSUJVVEUpIHx8IAotICAgIG5hbWUuZXF1YWxzKFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUpIHx8IAotICAgIG5hbWUuZXF1YWxzKFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUpIHx8IAotICAgIG5hbWUuZXF1YWxzKFdTRExDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUpOyAKLSAgICByZXR1cm4gaXNMaW5rYWJsZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbEFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjM2ZjY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbEFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLklQcm9ncmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMUmVzb3VyY2VGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLkV4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC51dGlsLk1vZGVsUmVjb25jaWxlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnV0aWwuWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsQWRhcHRlciBpbXBsZW1lbnRzIElOb2RlQWRhcHRlcgotewotICBwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ7Ci0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgTW9kZWxSZWNvbmNpbGVBZGFwdGVyIG1vZGVsUmVjb25jaWxlQWRhcHRlcjsKLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiB0eXBlID09IFdTRExNb2RlbEFkYXB0ZXIuY2xhc3M7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbihFbGVtZW50IGVsZW1lbnQsIERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZURlZmluaXRpb24oZG9jdW1lbnQpOwotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbihmaW5hbCBEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIElET01Ob2RlIGRvbU5vZGUgPSAoSURPTU5vZGUpIGRvY3VtZW50OwotICAgICAgU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJibGFua1dTREwud3NkbCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGlmIChkb21Ob2RlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJhc2VMb2NhdGlvbiA9IGRvbU5vZGUuZ2V0TW9kZWwoKS5nZXRCYXNlTG9jYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgICB7Ci0gICAgICAgIElET01Nb2RlbCBkb21Nb2RlbCA9ICgoSURPTU5vZGUpIGRvY3VtZW50KS5nZXRNb2RlbCgpOwotICAgICAgICBiYXNlTG9jYXRpb24gPSBkb21Nb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5KCkpOwotICAgICAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckFkYXB0ZXJGYWN0b3J5KCkpOwotICAgICAgLy8gVE9ETy4uIC5yZXZpc3QgdGhlIGJlc3QgYXBwcm9hY2ggdG8gb2J0YWluIGEgVVJJIGZyb20gdGhlIFNTRSBtb2RlbAotICAgICAgLy8KLSAgICAgIFVSSSB1cmkgPSBudWxsOwotICAgICAgaWYgKGJhc2VMb2NhdGlvbi5zdGFydHNXaXRoKCIvIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgdXJpID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoYmFzZUxvY2F0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGJhc2VMb2NhdGlvbi5zdGFydHNXaXRoKCJodHRwIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgdXJpID0gVVJJLmNyZWF0ZVVSSShiYXNlTG9jYXRpb24pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShiYXNlTG9jYXRpb24pOwotICAgICAgfQotICAgICAgZGVmaW5pdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgICBkZWZpbml0aW9uLnNldERvY3VtZW50QmFzZVVSSSh1cmkudG9TdHJpbmcoKSk7Ci0gICAgICBkZWZpbml0aW9uLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotICAgICAgV1NETFJlc291cmNlRmFjdG9yeUltcGwgcmVzb3VyY2VGYWN0b3J5ID0gbmV3IFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCk7Ci0gICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlRmFjdG9yeS5jcmVhdGVSZXNvdXJjZSh1cmkpOwotICAgICAgcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkuYWRkKHJlc291cmNlKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2V0TW9kaWZpZWQoZmFsc2UpOwotCi0gICAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgc2V0RWxlbWVudE9wZXJhdGlvbiA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIC8vIFVzZSB0aGUgYW5pbWF0ZWQgZmxhdm91ciBhcyB3ZSBkb24ndCBrbm93IGJlZm9yZWhhbmQgaG93IG1hbnkgdGlja3Mgd2UgbmVlZC4KLSAgICAgICAgICAvLyBUaGUgdGFzayBuYW1lIHdpbGwgYmUgZGlzcGxheWVkIGJ5IHRoZSBjb2RlIGluIFdTRExSZXNvdXJjZUltcGwgYW5kIFhTRFJlc291cmNlSW1wbC4KLSAgICAgICAgICAKLSAgICAgICAgICBtb25pdG9yLmJlZ2luVGFzaygiIiwgSVByb2dyZXNzTW9uaXRvci5VTktOT1dOKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICAgICAgTWFwIGxvYWRPcHRpb25zID0gcmVzb3VyY2VTZXQuZ2V0TG9hZE9wdGlvbnMoKTsKLSAgICAgICAgICAKLSAgICAgICAgICBsb2FkT3B0aW9ucy5wdXQoV1NETFJlc291cmNlSW1wbC5XU0RMX1BST0dSRVNTX01PTklUT1IsIG1vbml0b3IpOwotICAgICAgICAgIGxvYWRPcHRpb25zLnB1dChYU0RSZXNvdXJjZUltcGwuWFNEX1BST0dSRVNTX01PTklUT1IsIG1vbml0b3IpOwotICAgICAgICAgIAotICAgICAgICAgIGRlZmluaXRpb24uc2V0RWxlbWVudChkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0gICAgICAgICAgKChEZWZpbml0aW9uSW1wbCkgZGVmaW5pdGlvbikucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLSAgICAgICAgICAKLSAgICAgICAgICBsb2FkT3B0aW9ucy5yZW1vdmUoV1NETFJlc291cmNlSW1wbC5XU0RMX1BST0dSRVNTX01PTklUT1IpOwotICAgICAgICAgIGxvYWRPcHRpb25zLnJlbW92ZShYU0RSZXNvdXJjZUltcGwuWFNEX1BST0dSRVNTX01PTklUT1IpOwotICAgICAgICB9Ci0gICAgICB9OwotCi0gICAgICBJUHJvZ3Jlc3NTZXJ2aWNlIHByb2dyZXNzU2VydmljZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcHJvZ3Jlc3NTZXJ2aWNlLmJ1c3lDdXJzb3JXaGlsZShzZXRFbGVtZW50T3BlcmF0aW9uKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0gICAgICAgICAgICAgCi0gICAgICAKLSAgICAgIC8vIGF0dGFjaCBhbiBhZGFwdGVyIHRvIGtlZXAgdGhlIFdTREwgbW9kZWwgYW5kIERPTSBpbiBzeW5jCi0gICAgICAvLwotICAgICAgbW9kZWxSZWNvbmNpbGVBZGFwdGVyID0gbmV3IFdTRExNb2RlbFJlY29uY2lsZUFkYXB0ZXIoZG9jdW1lbnQsIGRlZmluaXRpb24pOwotICAgICAgZG9tTm9kZS5nZXRNb2RlbCgpLmFkZE1vZGVsU3RhdGVMaXN0ZW5lcihtb2RlbFJlY29uY2lsZUFkYXB0ZXIpOwotICAgICAgCi0gICAgICAvLyBUT0RPLi4uIENTIDogcmV2aXNpdCB0aGlzIGxpbmUKLSAgICAgIC8vIGN1cnJlbnRseSB0aGlzIGlzIHVzZWQgdG8gYXNzb2NpYXRlIGEgJ3R5cGUnIHN5c3RlbSB3aXRoIHRoZSBkZWZpbml0aW9uCi0gICAgICAvLyBJIHN1c3BlY3QgdGhhdCB0aGlzIGNvdWxkIGJlIG1hZGUgYSB3aG9sZSBsb3QgbW9yZSBzaW1wbGUKLSAgICAgIC8vCi0gICAgICBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLnNldFR5cGVTeXN0ZW1Qcm92aWRlcihkZWZpbml0aW9uLCBuZXcgRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlcigpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBNb2RlbFJlY29uY2lsZUFkYXB0ZXIgZ2V0TW9kZWxSZWNvbmNpbGVBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBtb2RlbFJlY29uY2lsZUFkYXB0ZXI7Ci0gIH0gIAotICAKLSAgcHVibGljIHN0YXRpYyBXU0RMTW9kZWxBZGFwdGVyIGxvb2t1cE9yQ3JlYXRlTW9kZWxBZGFwdGVyKERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgV1NETE1vZGVsQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKLSAgICBpZiAoZG9jdW1lbnQgaW5zdGFuY2VvZiBJTm9kZU5vdGlmaWVyKQotICAgIHsKLSAgICAgIElOb2RlTm90aWZpZXIgbm90aWZpZXIgPSAoSU5vZGVOb3RpZmllcilkb2N1bWVudDsKLSAgICAgIGFkYXB0ZXIgPSAoV1NETE1vZGVsQWRhcHRlcilub3RpZmllci5nZXRBZGFwdGVyRm9yKFdTRExNb2RlbEFkYXB0ZXIuY2xhc3MpOwotICAgICAgaWYgKGFkYXB0ZXIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYWRhcHRlciA9IG5ldyBXU0RMTW9kZWxBZGFwdGVyKCk7ICAgICAgIAotICAgICAgICBub3RpZmllci5hZGRBZGFwdGVyKGFkYXB0ZXIpOyAgICAgICAgCi0gICAgICB9IAotICAgIH0gICAKLSAgICByZXR1cm4gYWRhcHRlcjsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZTdhOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExNb2RlbExvY2F0b3I7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTW9kZWxMb2NhdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwKLXsKLSAgcHJvdGVjdGVkIEN1c3RvbVdTRExNb2RlbExvY2F0b3IgY3VzdG9tV1NETE1vZGVsTG9jYXRvciA9IG5ldyBDdXN0b21XU0RMTW9kZWxMb2NhdG9yKCk7Ci0gIAotICBjbGFzcyBDdXN0b21XU0RMTW9kZWxMb2NhdG9yIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBXU0RMTW9kZWxMb2NhdG9yCi0gIHsKLSAgICBwdWJsaWMgU3RyaW5nIHJlc29sdmVVUkkoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKQotICAgIHsKLSAgICAgIHJldHVybiBVUklSZXNvbHZlclBsdWdpbi5jcmVhdGVSZXNvbHZlcigpLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBuYW1lc3BhY2UsIGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0FkYXRwZXJGb3JUeXBlKE9iamVjdCB0eXBlKQotICAgIHsKLSAgICAgIHJldHVybiB0eXBlID09IFdTRExNb2RlbExvY2F0b3IuY2xhc3M7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiB0eXBlID09IFdTRExNb2RlbExvY2F0b3IuY2xhc3M7Ci0gIH0KLQotICBwdWJsaWMgQWRhcHRlciBhZGFwdE5ldyhOb3RpZmllciB0YXJnZXQsIE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIGN1c3RvbVdTRExNb2RlbExvY2F0b3I7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUXVlcnlFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxRdWVyeUV4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWIzMTI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxRdWVyeUV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC50ZXh0LlhTRE1vZGVsUXVlcnlFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC51dGlsLlR5cGVzSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFdTRExNb2RlbFF1ZXJ5RXh0ZW5zaW9uIGV4dGVuZHMgWFNETW9kZWxRdWVyeUV4dGVuc2lvbgotewotICBwdWJsaWMgV1NETE1vZGVsUXVlcnlFeHRlbnNpb24oKQotICB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1BhcmVudEVsZW1lbnRNZXNzYWdlUmVmZXJlbmNlKFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSkKLSAgewotICAgIHJldHVybiBwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoImlucHV0IikgfHwgcGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJvdXRwdXQiKSB8fCBwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoImZhdWx0Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc01lc3NhZ2VSZWZlcmVuY2UoU3RyaW5nIGVsZW1lbnROYW1lKQotICB7Ci0gICAgcmV0dXJuIGVsZW1lbnROYW1lLmVxdWFscygiYm9keSIpIHx8IGVsZW1lbnROYW1lLmVxdWFscygiaGVhZGVyIikgfHwgZWxlbWVudE5hbWUuZXF1YWxzKCJmYXVsdCIpIHx8IGVsZW1lbnROYW1lLmVxdWFscygidXJsUmVwbGFjZW1lbnQiKSB8fCBlbGVtZW50TmFtZS5lcXVhbHMoInVybEVuY29kZWQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQgLy8kTk9OLU5MUy00JCAvLyROT04tTkxTLTUkCi0gIH0KLSAgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0FwcGxpY2FibGVDaGlsZEVsZW1lbnQoTm9kZSBwYXJlbnROb2RlLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsgICAgCi0gICAgCi0gICAgaWYgKHBhcmVudE5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgcGFyZW50Tm9kZTsKLSAgICAgIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZXNwYWNlVVJJID0gcGFyZW50Tm9kZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSA9IHBhcmVudE5vZGUuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICAvLyBvbmx5IGZpbHRlciBjaGlsZHJlbiBmb3IgJ25vbi1zY2hlbWEnIGVsZW1lbnRzCi0gICAgICAvLyAgIAotICAgICAgaWYgKCFXU0RMQ29uc3RhbnRzLlhTRF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhwYXJlbnRFbGVtZW50TmFtZXNwYWNlVVJJKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBhcmVudEVsZW1lbnROYW1lICE9IG51bGwgJiYgbmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgbmFtZXNwYWNlIGFyZSBvbmUgdGhhdCBhbHdheXMgc2hvdWxkIGJlIGZpbHRlcmVkIG91dCAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gZm9yIG5vdyB0aGlzIGlzIGhhcmRjb2RlZAotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGlmIChuYW1lc3BhY2UuZXF1YWxzKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIGV4Y2x1ZGUgc29hcC1lbmMgZWxlbWVudHMKLSAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChuYW1lc3BhY2UuZXF1YWxzKFdTRExDb25zdGFudHMuWFNEX05BTUVTUEFDRV9VUkkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBlY2xpcHNlIGFsbCBzY2hlbWEgZWxlbWVudHMsIGV4Y2VwdCBmb3IgJ3NjaGVtYScgd2l0aGluZyB3c2RsIHR5cGVzIGVsZW1lbnRzIAotICAgICAgICAgICAgICByZXN1bHQgPSBwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoInR5cGVzIikgJiYgbmFtZS5lcXVhbHMoInNjaGVtYSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG5hbWVzcGFjZS5lcXVhbHMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBjcyA6IHRoZSAncmVxdWlyZWQnIGF0dHJpYnV0ZSBpcyBidXJuZWQgaW50byBXU0RMIHNjaGVtYSBhcyB0aGUgJ2Jhc2UnIGV4dGVuc2liaWxpdHkgZWxlbWVudAotICAgICAgICAgICAgICAvLyB0aGUgV1RQIFdTREwgdmFsaWRhdG9yIGNvbXBsYWlucyB3aGVuIHRoZXNlIGFyZSBwcmVzZW50IHNvIHRoaXMgbGluZSBmaWx0ZXJzIHRoZW0gb3V0Ci0gICAgICAgICAgICAgIC8vIG9mIHRoZSBjb250ZW50IGFzc2lzdCBhbmQgZXh0ZW5zaW9uIGRldGFpbHMgdmlldy4gIEFzIGZhciBhcyBJIGNhbiB0ZWxsIG5vIG9uZSBhY3R1YWxseSB1c2VzICdlbQotICAgICAgICAgICAgICAvLyBpbiBwcmFjdGlzZSAuLi4gc28gZmlsdGVyaW5nIHRoZW0gb3V0IHNob3VsZCBiZSBvay4gIAotICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAvLyBUT0RPIChjcykgaG93IGNvbWUgdGhlIHNjaGVtYSBzYXlzIHRoZWlyIG9rIGJ1dCB0aGUgdmFsaWRhdG9yIGRvZXNuJ3QgbGlrZSB0aGVtPwotICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICByZXN1bHQgPSAhbmFtZS5lcXVhbHMoInJlcXVpcmVkIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIH0gIAotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBUT0RPLi4gd2Ugc2hvdWxkIGludmVzdGlnYXRlIHJlbW92aW5nIHRoZSAgRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgLy8gc2hvdWxkbid0IHRoaXMgYmUgYSBNb2RlbFF1ZXJ5RXh0ZW5zaW9uIGRlZmluZWQgb24gdGhlIGV4dGVuc2lvbiBsYW5ndWFnZXM/Ci0gICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgIEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgZmlsdGVyID0gKEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIpIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyUmVnaXN0cnkoKS5nZXRQcm9wZXJ0eShuYW1lc3BhY2UsICIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICBpZiAoZmlsdGVyICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBmaWx0ZXIuaXNWYWxpZENvbnRleHQoZWxlbWVudCwgbmFtZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLmlzQXBwbGljYWJsZUNoaWxkRWxlbWVudChwYXJlbnROb2RlLCBuYW1lc3BhY2UsIG5hbWUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEF0dHJpYnV0ZVZhbHVlcyhFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgaWYgKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIENvbXBvbmVudFJlZmVyZW5jZVV0aWwgdXRpbCA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSkpOwotICAgICAgU3RyaW5nIGN1cnJlbnRFbGVtZW50TmFtZSA9IGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICBpZiAoY2hlY2tOYW1lKG5hbWUsICJtZXNzYWdlIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbGlzdC5hZGRBbGwodXRpbC5nZXRNZXNzYWdlTmFtZXMoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChjaGVja05hbWUobmFtZSwgImJpbmRpbmciKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBsaXN0LmFkZEFsbCh1dGlsLmdldEJpbmRpbmdOYW1lcygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGNoZWNrTmFtZShuYW1lLCAidHlwZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGlmIChjaGVja05hbWUoY3VycmVudEVsZW1lbnROYW1lLCAiYmluZGluZyIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZEFsbCh1dGlsLmdldFBvcnRUeXBlTmFtZXMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2hlY2tOYW1lKGN1cnJlbnRFbGVtZW50TmFtZSwgInBhcnQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGRBbGwodXRpbC5nZXRDb21wb25lbnROYW1lTGlzdCh0cnVlKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGNoZWNrTmFtZShuYW1lLCAiZWxlbWVudCIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGlmIChjaGVja05hbWUoY3VycmVudEVsZW1lbnROYW1lLCAicGFydCIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZEFsbCh1dGlsLmdldENvbXBvbmVudE5hbWVMaXN0KGZhbHNlKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbbGlzdC5zaXplKCldOwotICAgICAgbGlzdC50b0FycmF5KHJlc3VsdCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIHN1cGVyLmdldEF0dHJpYnV0ZVZhbHVlcyhlbGVtZW50LCBuYW1lc3BhY2UsIG5hbWUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFhTRFNjaGVtYSBsb29rdXBPckNyZWF0ZVNjaGVtYUZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KQotICB7ICAgICAgIAotICAgIHJldHVybiBsb29rdXBPckNyZWF0ZVNjaGVtYShlbGVtZW50KTsKLSAgfQotICAKLSAgcHJpdmF0ZSBYU0RTY2hlbWEgbG9va3VwT3JDcmVhdGVTY2hlbWEoRWxlbWVudCBlbGVtZW50KQotICB7ICAgCi0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IG51bGw7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbG9va3VwT3JDcmVhdGVEZWZpbml0aW9uKGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLSAgICBPYmplY3QgbyA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZmluZE1vZGVsT2JqZWN0Rm9yRWxlbWVudChkZWZpbml0aW9uLCBlbGVtZW50KTsKLSAgICBpZiAobyBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KQotICAgIHsKLSAgICAgIHNjaGVtYSA9ICgoWFNEQ29uY3JldGVDb21wb25lbnQpIG8pLmdldFNjaGVtYSgpOwotICAgIH0gCi0gICAgcmV0dXJuIHNjaGVtYTsgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSU5vZGVOb3RpZmllcikKLSAgICB7Ci0gICAgICBJTm9kZU5vdGlmaWVyIG5vdGlmaWVyID0gKElOb2RlTm90aWZpZXIpIGRvY3VtZW50OwotICAgICAgV1NETE1vZGVsQWRhcHRlciBhZGFwdGVyID0gKFdTRExNb2RlbEFkYXB0ZXIpIG5vdGlmaWVyLmdldEFkYXB0ZXJGb3IoV1NETE1vZGVsQWRhcHRlci5jbGFzcyk7Ci0gICAgICBpZiAoYWRhcHRlciA9PSBudWxsKQotICAgICAgewotICAgICAgICBhZGFwdGVyID0gbmV3IFdTRExNb2RlbEFkYXB0ZXIoKTsKLSAgICAgICAgbm90aWZpZXIuYWRkQWRhcHRlcihhZGFwdGVyKTsKLSAgICAgICAgYWRhcHRlci5jcmVhdGVEZWZpbml0aW9uKGRvY3VtZW50KTsKLSAgICAgIH0KLSAgICAgIGRlZmluaXRpb24gPSBhZGFwdGVyLmdldERlZmluaXRpb24oKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLSAgCi0gIAotICBwcm90ZWN0ZWQgVHlwZXNIZWxwZXIgZ2V0VHlwZXNIZWxwZXIoZmluYWwgRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGxvb2t1cE9yQ3JlYXRlU2NoZW1hKGVsZW1lbnQpOwotICAgIHJldHVybiBuZXcgVHlwZXNIZWxwZXIoc2NoZW1hKQotICAgIHsKLSAgICAgIC8vIFRPRE8uLi4gaXQgc2VlbXMgYXMgdGhvdWdoIHRoZSBtb2RlbCBpcyBub3QgY29ycmVjdGx5Ci0gICAgICAvLyBtYWludGluZyB0aGUgbGlzdCBvZiBwcmVmaXhlcyBmb3IgYSBnaXZlbiBuYW1lc3BhY2UKLSAgICAgIC8vIG11c3QgYmUgYSBidWchCi0gICAgICAvLwotICAgICAgcHJvdGVjdGVkIExpc3QgZ2V0UHJlZml4ZXNGb3JOYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gc3VwZXIuZ2V0UHJlZml4ZXNGb3JOYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbG9va3VwT3JDcmVhdGVEZWZpbml0aW9uKGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLSAgICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIGkubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZykgbWFwLmdldChwcmVmaXgpOwotICAgICAgICAgICAgaWYgKG5zICE9IG51bGwgJiYgbnMuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghbGlzdC5jb250YWlucyhwcmVmaXgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQocHJlZml4KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICAgIH0gICAgICAgCi0gICAgfTsgICAgCi0gIH0gCi0gIAotICAvKiogICAKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVEZWZpbml0aW9uKGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxSZWNvbmNpbGVBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUmVjb25jaWxlQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzIwNzY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxSZWNvbmNpbGVBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC51dGlsLk1vZGVsUmVjb25jaWxlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEU2NoZW1hSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotY2xhc3MgV1NETE1vZGVsUmVjb25jaWxlQWRhcHRlciBleHRlbmRzIE1vZGVsUmVjb25jaWxlQWRhcHRlcgoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0KLSAgcHVibGljIFdTRExNb2RlbFJlY29uY2lsZUFkYXB0ZXIoRG9jdW1lbnQgZG9jdW1lbnQsIERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgeyAgICAgICAgICAgCi0gICAgc3VwZXIoZG9jdW1lbnQpOwotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0gCi0KLSAgLy8gVGhpcyBtZXRob2QgaXMgY2xldmVyIGVub3VnaCB0byBkZWFsIHdpdGggJ2JhZCcgZG9jdW1lbnRzIHRoYXQgaGFwcGVuIAotICAvLyB0byBoYXZlIG1vcmUgdGhhbiBvbmUgcm9vdCBlbGVtZW50LiAgSXQgcGlja3Mgb2YgdGhlIGZpcnN0ICdtYXRjaGluZycgZWxlbWVudC4KLSAgLy8KLSAgLy8gVE9ETyAoY3MpIHdoeSBhcmVuJ3Qgd2UgY2FsbGluZyB0aGlzIGZyb20gdGhlIFdTRExNb2RlbEFkYXB0ZXIgd2hlbiB0aGUgbW9kZWwgaXMgaW5pdGlhbGl6ZWQ/Ci0gIC8vCi0gIHByaXZhdGUgRWxlbWVudCBnZXREZWZpbml0aW9uRWxlbWVudChEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBudWxsOyAgICAKLSAgICBmb3IgKE5vZGUgbm9kZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsgbm9kZSAhPSBudWxsOyBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpKQotICAgIHsKLSAgICAgIGlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KW5vZGU7Ci0gICAgICAgIGlmIChXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKGVsZW1lbnQpID09IFdTRExDb25zdGFudHMuREVGSU5JVElPTikKLSAgICAgICAgewotICAgICAgICAgIGRlZmluaXRpb25FbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZGVmaW5pdGlvbkVsZW1lbnQ7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZU5vZGVDaGFuZ2VkKE5vZGUgbm9kZSkKLSAgewotICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICB7Ci0gICAgICByZWNvbmNpbGVNb2RlbE9iamVjdEZvckVsZW1lbnQoKEVsZW1lbnQpbm9kZSk7ICAgICAgCi0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCkKLSAgICB7Ci0gICAgICAvLyBUaGUgZG9jdW1lbnQgY2hhbmdlZCBzbyB3ZSBtYXkgbmVlZCB0byBmaXggdXAgdGhlIAotICAgICAgLy8gZGVmaW5pdGlvbidzIHJvb3QgZWxlbWVudAotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSAoRG9jdW1lbnQpbm9kZTsgICAgCi0gICAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gZ2V0RGVmaW5pdGlvbkVsZW1lbnQoZG9jdW1lbnQpOwotICAgICAgaWYgKGRlZmluaXRpb25FbGVtZW50ICE9IG51bGwgJiYgZGVmaW5pdGlvbkVsZW1lbnQgIT0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpCi0gICAgICB7ICAgCi0gICAgICAgIC8vIGhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgbmV3ICdkZWZpbml0aW9uJyBlbGVtZW50IHdhcyBhZGRlZAotICAgICAgICAvLyhlLmcuIHRoZSBmaWxlIHdhcyB0b3RhbGx5IGJsYW5rIGFuZCB0aGVuIHdlIHR5cGUgaW4gdGhlIHJvb3QgZWxlbWVudCkgICAgICAgIAotICAgICAgICAvLyBTZWUgQnVnIDUzNjYKLSAgICAgICAgLy8KLSAgICAgICAgaWYgKGRlZmluaXRpb25FbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhXU0RMQ29uc3RhbnRzLkRFRklOSVRJT05fRUxFTUVOVF9UQUcpKSAgICAgICAgIAotICAgICAgICB7ICAKLSAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiKioqKioqIFNldHRpbmcgbmV3IGRlZmluaXRpb24iKTsKLSAgICAgICAgICBkZWZpbml0aW9uLnNldEVsZW1lbnQoZGVmaW5pdGlvbkVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgCi0gICAgICBlbHNlIGlmIChkZWZpbml0aW9uRWxlbWVudCAhPSBudWxsKQotICAgICAgeyAgICAgICAKLSAgICAgICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQncyBjb250ZW50IGhhcyBjaGFuZ2VkCi0gICAgICAgIC8vIAotICAgICAgICAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLmVsZW1lbnRDaGFuZ2VkKGRlZmluaXRpb25FbGVtZW50KTsKLSAgICAgIH0gICAgICAKLSAgICAgIGVsc2UgaWYgKGRlZmluaXRpb25FbGVtZW50ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gZGVmaW5pdGlvbiBlbGVtZW50IGNsZWFyIG91dCB0aGUgV1NETAotICAgICAgICAvLwotICAgICAgICAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnJlbW92ZUFsbCgpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHJlbW92ZUFsbCgpIGNhbGwgZG9lcyBub3QgcmVtb3ZlIG5hbWVzcGFjZXMgYXMgd2VsbCBhbmQgdGhlIG1vZGVsCi0gICAgICAgIC8vIGRvZXMgbm90IHJlY29uY2lsZSB3ZWxsIGluIHRoaXMgY2FzZS4gQWxzbyByZXNldCB0aGUgZGVmaW5pdGlvbiBuYW1lIGFuZCB0YXJnZXQKLSAgICAgICAgLy8gbmFtZXNwYWNlLgotICAgICAgICAKLSAgICAgICAgZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCkuY2xlYXIoKTsKLSAgICAgICAgZGVmaW5pdGlvbi5zZXRRTmFtZShudWxsKTsKLSAgICAgICAgZGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UobnVsbCk7Ci0gICAgICAgIAotICAgICAgICAvLyBSZXNldCB0aGUgZG9jdW1lbnQgYmVjYXVzZSByZW1vdmVBbGwoKSBzZXRzIHRoZSBkb2N1bWVudCB0byBudWxsIGFzIHdlbGwuCi0gICAgICAgIGRlZmluaXRpb24uc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotICAgICAgfQotICAgIH0gICAgICAgICAKLSAgfQotICAgICAgIAotICBwcml2YXRlIHZvaWQgcmVjb25jaWxlTW9kZWxPYmplY3RGb3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIE9iamVjdCBtb2RlbE9iamVjdCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZmluZE1vZGVsT2JqZWN0Rm9yRWxlbWVudChkZWZpbml0aW9uLCBlbGVtZW50KTsgIAotICAgIGlmIChtb2RlbE9iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCkKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGVlID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCltb2RlbE9iamVjdDsKLSAgICAgICAgKChYU0RTY2hlbWFJbXBsKWVlLmdldFNjaGVtYSgpKS5lbGVtZW50Q2hhbmdlZChlbGVtZW50KTsKLSAgICAgICAgZWUuZWxlbWVudENoYW5nZWQoZWxlbWVudCk7ICAgICAgICAgICAgCi0gICAgICB9ICAgCi0gICAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFdTRExFbGVtZW50SW1wbCkKLSAgICAgIHsKLSAgICAgICAgKChXU0RMRWxlbWVudEltcGwpbW9kZWxPYmplY3QpLmVsZW1lbnRDaGFuZ2VkKGVsZW1lbnQpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkKLSAgICAgIHsKLSAgICAgICAgKChYU0RDb25jcmV0ZUNvbXBvbmVudCltb2RlbE9iamVjdCkuZWxlbWVudENoYW5nZWQoZWxlbWVudCk7ICAgICAgICAKLSAgICAgIH0gIAotICAgIH0gICAgIAotICB9ICAKLQotICAvKioKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlY29uY2lsZU1vZGVsT2JqZWN0Rm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQsIGludCBldmVudFR5cGUsIE9iamVjdCBmZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IGluZGV4KQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcmVjb25jaWxlTW9kZWxPYmplY3RGb3JFbGVtZW50KGVsZW1lbnQpOwotICB9ICAKLSAgCi0gIHB1YmxpYyB2b2lkIG1vZGVsRGlydHlTdGF0ZUNoYW5nZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwgYm9vbGVhbiBpc0RpcnR5KQotICB7Ci0gICAgaWYgKCFpc0RpcnR5KQotICAgIHsgIAotICAgICAgLy8gY3MgOiBBdCB0aGlzIHRpbWUgKHdoZW4gYSBzYXZlIG9jY3VycykgaXQncyBhIGdvb2Qgb3Bwb3J0dW5pdHkKLSAgICAgIC8vIHRvIHVwZGF0ZSB0aGUgbW9kZWwgdG8gZW5zdXJlIGl0J3MgaW4gc3luYyB3aXRoIHRoZSBzb3VyY2UuIAotICAgICAgLy8gVGhhdCB3YXkgaWYgdGhlIGluY3JlbWVudGFsIHN5bmMgYmV0d2VlbiBET00gYW5kIG1vZGVsIGhhcyBnb3R0ZW4KLSAgICAgIC8vIHRoZSBtb2RlbCBvdXQgb2Ygd2hhY2sgd2UnbGwgYmUgYWJsZSB0byBwdXQgdGhpbmdzIHJpZ2h0IGF0IHRoaXMgcG9pbnQuCi0gICAgICAvLyAgIAotICAgICAgLy8gVE9ETyAoY3MpIG5lZWQgdG8gZG8gbW9yZSB0byBlbnN1cmUgbW9kZWwgaXMgc3luYydkIHVwIHByb3Blcmx5ICAgICAgCi0gICAgICAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL0NvbXBvbmVudFJlZmVyZW5jZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBmMzBlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLklUeXBlU3lzdGVtUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgQ29tcG9uZW50UmVmZXJlbmNlVXRpbAotewotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiByb290RGVmaW5pdGlvbjsKLQotICBwdWJsaWMgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChEZWZpbml0aW9uIHJvb3REZWZpbml0aW9uKQotICB7Ci0gICAgdGhpcy5yb290RGVmaW5pdGlvbiA9IHJvb3REZWZpbml0aW9uOwotICB9Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzRXF1YWwoU3RyaW5nIGEsIFN0cmluZyBiKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAoYSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGEuZXF1YWxzKGIpIHx8IChhLmxlbmd0aCgpID09IDAgJiYgYiA9PSBudWxsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IChiID09IG51bGwgfHwgYi5sZW5ndGgoKSA9PSAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0VxdWFsSW5wdXROYW1lKE9wZXJhdGlvbiBvcGVyYXRpb24sIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgSW5wdXQgb3BlcmF0aW9uSW5wdXQgPSBvcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0gICAgQmluZGluZ0lucHV0IGJpbmRpbmdPcGVyYXRpb25JbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpOwotCi0gICAgaWYgKG9wZXJhdGlvbklucHV0ICE9IG51bGwgJiYgYmluZGluZ09wZXJhdGlvbklucHV0ICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gaXNFcXVhbChvcGVyYXRpb25JbnB1dC5nZXROYW1lKCksIGJpbmRpbmdPcGVyYXRpb25JbnB1dC5nZXROYW1lKCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChvcGVyYXRpb25JbnB1dCA9PSBudWxsICYmIGJpbmRpbmdPcGVyYXRpb25JbnB1dCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNFcXVhbE91dHB1dE5hbWUoT3BlcmF0aW9uIG9wZXJhdGlvbiwgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBPdXRwdXQgb3BlcmF0aW9uT3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPcGVyYXRpb25PdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICBpZiAob3BlcmF0aW9uT3V0cHV0ICE9IG51bGwgJiYgYmluZGluZ09wZXJhdGlvbk91dHB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGlzRXF1YWwob3BlcmF0aW9uT3V0cHV0LmdldE5hbWUoKSwgYmluZGluZ09wZXJhdGlvbk91dHB1dC5nZXROYW1lKCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChvcGVyYXRpb25PdXRwdXQgPT0gbnVsbCAmJiBiaW5kaW5nT3BlcmF0aW9uT3V0cHV0ID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc01hdGNoaW5nQmluZGluZyhPcGVyYXRpb24gb3BlcmF0aW9uLCBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICByZXR1cm4gaXNFcXVhbChvcGVyYXRpb24uZ2V0TmFtZSgpLCBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7IC8qICYmCi0gICAgCQkJICAgaXNFcXVhbElucHV0TmFtZShvcGVyYXRpb24sIGJpbmRpbmdPcGVyYXRpb24pICYmCi0gICAgCQkJICAgaXNFcXVhbE91dHB1dE5hbWUob3BlcmF0aW9uLCBiaW5kaW5nT3BlcmF0aW9uKTsqLwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0UG9ydHNGb3JQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRTZXJ2aWNlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgaS5uZXh0KCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGogPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGoubmV4dCgpOwotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0gICAgICAgIGlmIChiaW5kaW5nICE9IG51bGwgJiYgYmluZGluZy5nZXRFUG9ydFR5cGUoKSA9PSBwb3J0VHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKHBvcnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0UG9ydHNGb3JCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRTZXJ2aWNlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgaS5uZXh0KCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGogPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGoubmV4dCgpOwotICAgICAgICBpZiAocG9ydC5nZXRFQmluZGluZygpID09IGJpbmRpbmcpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChwb3J0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdPcGVyYXRpb25zKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOwotCi0gICAgaWYgKG9wZXJhdGlvbk5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGdldEVuY2xvc2luZ1BvcnRUeXBlKG9wZXJhdGlvbik7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRCaW5kaW5ncyhwb3J0VHlwZSkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgaS5uZXh0KCk7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uLCBiaW5kaW5nKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0QmluZGluZ09wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uLCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBqID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgai5uZXh0KCk7Ci0gICAgICBpZiAoaXNNYXRjaGluZ0JpbmRpbmcob3BlcmF0aW9uLCBiaW5kaW5nT3BlcmF0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gYmluZGluZ09wZXJhdGlvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEJpbmRpbmdJbnB1dChJbnB1dCBpbnB1dCwgQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gZ2V0QmluZGluZ09wZXJhdGlvbigoT3BlcmF0aW9uKSBpbnB1dC5lQ29udGFpbmVyKCksIGJpbmRpbmcpOwotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uICE9IG51bGwgPyBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSA6IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgQmluZGluZ091dHB1dCBnZXRCaW5kaW5nT3V0cHV0KE91dHB1dCBvdXRwdXQsIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oKE9wZXJhdGlvbikgb3V0cHV0LmVDb250YWluZXIoKSwgYmluZGluZyk7Ci0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb24gIT0gbnVsbCA/IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKSA6IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgQmluZGluZ0ZhdWx0IGdldEJpbmRpbmdGYXVsdChGYXVsdCBmYXVsdCwgQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgQmluZGluZ0ZhdWx0IHJlc3VsdCA9IG51bGw7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLSAgICBpZiAoZmF1bHROYW1lICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gZ2V0QmluZGluZ09wZXJhdGlvbigoT3BlcmF0aW9uKSBmYXVsdC5lQ29udGFpbmVyKCksIGJpbmRpbmcpOwotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gKEJpbmRpbmdGYXVsdCkgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHQoZmF1bHROYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBFT2JqZWN0IGdldEJpbmRpbmdPYmplY3QoRU9iamVjdCBpbnRlcmZhY2VPYmplY3QsIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIEVPYmplY3QgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAoaW50ZXJmYWNlT2JqZWN0IGluc3RhbmNlb2YgSW5wdXQpCi0gICAgewotICAgICAgcmVzdWx0ID0gZ2V0QmluZGluZ0lucHV0KChJbnB1dCkgaW50ZXJmYWNlT2JqZWN0LCBiaW5kaW5nKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaW50ZXJmYWNlT2JqZWN0IGluc3RhbmNlb2YgT3V0cHV0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldEJpbmRpbmdPdXRwdXQoKE91dHB1dCkgaW50ZXJmYWNlT2JqZWN0LCBiaW5kaW5nKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaW50ZXJmYWNlT2JqZWN0IGluc3RhbmNlb2YgRmF1bHQpCi0gICAgewotICAgICAgcmVzdWx0ID0gZ2V0QmluZGluZ0ZhdWx0KChGYXVsdCkgaW50ZXJmYWNlT2JqZWN0LCBiaW5kaW5nKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaW50ZXJmYWNlT2JqZWN0IGluc3RhbmNlb2YgT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldEJpbmRpbmdPcGVyYXRpb24oKE9wZXJhdGlvbikgaW50ZXJmYWNlT2JqZWN0LCBiaW5kaW5nKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaW50ZXJmYWNlT2JqZWN0IGluc3RhbmNlb2YgUG9ydFR5cGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gYmluZGluZzsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdJbnB1dHMoSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgTGlzdCBvcGVyYXRpb25zID0gZ2V0QmluZGluZ09wZXJhdGlvbnMoKE9wZXJhdGlvbikgaW5wdXQuZUNvbnRhaW5lcigpKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgaS5uZXh0KCk7Ci0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nT3V0cHV0cyhPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBvdXRwdXQuZUNvbnRhaW5lcigpOwotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IG9wZXJhdGlvbnMgPSBnZXRCaW5kaW5nT3BlcmF0aW9ucyhvcGVyYXRpb24pOwotICAgICAgZm9yIChJdGVyYXRvciBpID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBpLm5leHQoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nRmF1bHRzKEZhdWx0IGZhdWx0KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0gICAgaWYgKGZhdWx0TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBmYXVsdC5lQ29udGFpbmVyKCk7Ci0gICAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3Qgb3BlcmF0aW9ucyA9IGdldEJpbmRpbmdPcGVyYXRpb25zKG9wZXJhdGlvbik7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGkubmV4dCgpOwotICAgICAgICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdChmYXVsdE5hbWUpOwotICAgICAgICAgIGlmIChiaW5kaW5nRmF1bHQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBsaXN0LmFkZChiaW5kaW5nRmF1bHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHByb3RlY3RlZCBQb3J0VHlwZSBnZXRFbmNsb3NpbmdQb3J0VHlwZShPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcmV0dXJuIChQb3J0VHlwZSkgb3BlcmF0aW9uLmVDb250YWluZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdzKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICByZXR1cm4gZ2V0QmluZGluZ3MoZ2V0RW5jbG9zaW5nUG9ydFR5cGUob3BlcmF0aW9uKSk7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5ncyhQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaS5uZXh0KCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGogPSBkZWZpbml0aW9uLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgai5uZXh0KCk7Ci0gICAgICAgIGlmIChwb3J0VHlwZSA9PSBudWxsIHx8IGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSA9PSBwb3J0VHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKGJpbmRpbmcpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ3NXaXRob3V0T3BlcmF0aW9uKFBvcnRUeXBlIHBvcnRUeXBlLCBTdHJpbmcgb3BlcmF0aW9uTmFtZSkKLSAgewotICAgIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChvcGVyYXRpb25OYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBiaW5kaW5ncyA9IGdldEJpbmRpbmdzKHBvcnRUeXBlKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGkubmV4dCgpOwotICAgICAgICBib29sZWFuIGhhc05hbWUgPSBmYWxzZTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBqID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBqLm5leHQoKTsKLSAgICAgICAgICBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGhhc05hbWUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghaGFzTmFtZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdC5hZGQoYmluZGluZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdzKCkKLSAgewotICAgIHJldHVybiBnZXRCaW5kaW5ncygoUG9ydFR5cGUpIG51bGwpOwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ05hbWVzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRCaW5kaW5ncygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgaS5uZXh0KCk7Ci0gICAgICBsaXN0LmFkZEFsbChnZXRQcmVmaXhlZE5hbWVzKGJpbmRpbmcuZ2V0UU5hbWUoKSkpOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFBvcnRUeXBlTmFtZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBpLm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaiA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgai5uZXh0KCk7Ci0gICAgICAgIGxpc3QuYWRkQWxsKGdldFByZWZpeGVkTmFtZXMocG9ydFR5cGUuZ2V0UU5hbWUoKSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFNlcnZpY2VzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaS5uZXh0KCk7Ci0gICAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVTZXJ2aWNlcygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQb3J0VHlwZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBpLm5leHQoKTsKLSAgICAgIGxpc3QuYWRkQWxsKGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGkubmV4dCgpOwotICAgICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKSk7Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0VHlwZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBpLm5leHQoKTsKLSAgICAgIGlmIChkZWZpbml0aW9uLmdldEVUeXBlcygpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGxpc3QuYWRkKGRlZmluaXRpb24uZ2V0RVR5cGVzKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldE1lc3NhZ2VOYW1lcygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGkubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBqID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIGoubmV4dCgpOwotICAgICAgICBsaXN0LmFkZEFsbChnZXRQcmVmaXhlZE5hbWVzKG1lc3NhZ2UuZ2V0UU5hbWUoKSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldERlZmluaXRpb25zKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBhZGREZWZpbml0aW9uKHJvb3REZWZpbml0aW9uLCBsaXN0KTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZCAtLSB3ZSBzaG91bGQgYWx3YXlzIHVzZSBnZXRQcmVmaXhlZE5hbWVzCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeGVkTmFtZShRTmFtZSBxbmFtZSkKLSAgewotICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJlZml4ID0gcm9vdERlZmluaXRpb24uZ2V0UHJlZml4KHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIGlmIChwcmVmaXggIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbmFtZSA9IHByZWZpeCArICI6IiArIHFuYW1lLmdldExvY2FsUGFydCgpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0UHJlZml4ZWROYW1lcyhRTmFtZSBxbmFtZSkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBNYXAgbWFwID0gcm9vdERlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgICAgZm9yIChJdGVyYXRvciBpID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIGkubmV4dCgpOwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gKFN0cmluZykgbWFwLmdldChwcmVmaXgpOwotICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwgJiYgbmFtZXNwYWNlLmVxdWFscyhxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbmFtZSA9IHByZWZpeC5sZW5ndGgoKSA+IDAgPyBwcmVmaXggKyAiOiIgKyBxbmFtZS5nZXRMb2NhbFBhcnQoKSA6ICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgICAgICAgICBxbmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICBsaXN0LmFkZChuYW1lKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBMaXN0IGxpc3QpCi0gIHsKLSAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpc3QuYWRkKGRlZmluaXRpb24pOwotICAgICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0SW1wbCB0aGVJbXBvcnQgPSAoSW1wb3J0SW1wbCkgaS5uZXh0KCk7Ci0gICAgICAgIGlmICh0aGVJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSAhPSBudWxsICYmICF0aGVJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKS5lbmRzV2l0aCgieHNkIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIHRoZUltcG9ydC5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsJIAotICAgICAgICAgIERlZmluaXRpb24gaW1wb3J0ZWREZWZpbml0aW9uID0gKERlZmluaXRpb24pIHRoZUltcG9ydC5nZXRFRGVmaW5pdGlvbigpOwotICAgICAgICAgIGlmIChpbXBvcnRlZERlZmluaXRpb24gIT0gbnVsbCAmJiAhbGlzdC5jb250YWlucyhpbXBvcnRlZERlZmluaXRpb24pKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGFkZERlZmluaXRpb24oaW1wb3J0ZWREZWZpbml0aW9uLCBsaXN0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQb3J0VHlwZVJlZmVyZW5jZShCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoYmluZGluZyk7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgidHlwZSIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0UG9ydFR5cGVSZWZlcmVuY2UoQmluZGluZyBiaW5kaW5nLCBTdHJpbmcgcG9ydFR5cGUpCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoYmluZGluZyk7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgidHlwZSIsIHBvcnRUeXBlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJpbmRpbmdSZWZlcmVuY2UoUG9ydCBwb3J0KQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBvcnQpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImJpbmRpbmciKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZShCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoYmluZGluZyk7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFFOYW1lIGdldFBvcnRUeXBlUmVmZXJlbmNlUU5hbWUoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgUU5hbWUgcmVzdWx0ID0gbnVsbDsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0UG9ydFR5cGVSZWZlcmVuY2UoYmluZGluZyk7Ci0gICAgaWYgKHByZWZpeGVkTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IFdTRExFZGl0b3JVdGlsLmNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIHByZWZpeGVkTmFtZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFFOYW1lIGdldEJpbmRpbmdSZWZlcmVuY2VRTmFtZShQb3J0IHBvcnQpCi0gIHsKLSAgICBRTmFtZSByZXN1bHQgPSBudWxsOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHBvcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIFN0cmluZyBwcmVmaXhlZE5hbWUgPSBnZXRCaW5kaW5nUmVmZXJlbmNlKHBvcnQpOwotICAgIGlmIChwcmVmaXhlZE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBXU0RMRWRpdG9yVXRpbC5jcmVhdGVRTmFtZShkZWZpbml0aW9uLCBwcmVmaXhlZE5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZVJlZmVyZW5jZShJbnB1dCBpbnB1dCkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlUmVmZXJlbmNlSGVscGVyKGlucHV0KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VSZWZlcmVuY2UoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlUmVmZXJlbmNlSGVscGVyKG91dHB1dCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlUmVmZXJlbmNlKEZhdWx0IGZhdWx0KQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2VSZWZlcmVuY2VIZWxwZXIoZmF1bHQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWUoSW5wdXQgaW5wdXQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lSGVscGVyKGlucHV0KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgUU5hbWUgZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lKE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lSGVscGVyKG91dHB1dCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFFOYW1lIGdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZShGYXVsdCBmYXVsdCkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWVIZWxwZXIoZmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZVJlZmVyZW5jZUhlbHBlcihXU0RMRWxlbWVudCBvKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KG8pOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWVIZWxwZXIoV1NETEVsZW1lbnQgbykKLSAgewotICAgIFFOYW1lIHJlc3VsdCA9IG51bGw7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gby5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldE1lc3NhZ2VSZWZlcmVuY2VIZWxwZXIobyk7Ci0gICAgaWYgKHByZWZpeGVkTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IFdTRExFZGl0b3JVdGlsLmNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIHByZWZpeGVkTmFtZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlUG9ydFR5cGVSZWZlcmVuY2VzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGkubmV4dCgpOwotICAgICAgUU5hbWUgcW5hbWUgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldFBvcnRUeXBlUmVmZXJlbmNlUU5hbWUoYmluZGluZyk7Ci0KLSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKHFuYW1lICE9IG51bGwpID8gKFBvcnRUeXBlKSBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHFuYW1lKSA6IG51bGw7Ci0KLSAgICAgIGlmIChiaW5kaW5nLmdldFBvcnRUeXBlKCkgIT0gcG9ydFR5cGUpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcuc2V0UG9ydFR5cGUocG9ydFR5cGUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVCaW5kaW5nUmVmZXJlbmNlcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBpLm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaiA9IHNlcnZpY2UuZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgai5uZXh0KCk7Ci0gICAgICAgIFFOYW1lIHFuYW1lID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRCaW5kaW5nUmVmZXJlbmNlUU5hbWUocG9ydCk7Ci0KLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKHFuYW1lICE9IG51bGwpID8gKEJpbmRpbmcpIGRlZmluaXRpb24uZ2V0QmluZGluZyhxbmFtZSkgOiBudWxsOwotCi0gICAgICAgIGlmIChwb3J0LmdldEJpbmRpbmcoKSAhPSBiaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHVwZGF0ZU1lc3NhZ2VSZWZlcmVuY2VzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIC8vIGZvciBlYWNoIHBvcnQgdHlwZQotICAgIC8vCi0gICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIGkubmV4dCgpOwotCi0gICAgICAvLyBmb3IgZWFjaCBvcGVyYXRpb24KLSAgICAgIC8vCi0gICAgICBmb3IgKEl0ZXJhdG9yIGogPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIGoubmV4dCgpOwotCi0gICAgICAgIC8vIGhhbmRsZSBJbnB1dAotICAgICAgICAvLwotICAgICAgICBJbnB1dCBpbnB1dCA9IChJbnB1dCkgb3BlcmF0aW9uLmdldElucHV0KCk7Ci0gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgUU5hbWUgcW5hbWUgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZShpbnB1dCk7Ci0gICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKHFuYW1lICE9IG51bGwpID8gKE1lc3NhZ2UpIGRlZmluaXRpb24uZ2V0TWVzc2FnZShxbmFtZSkgOiBudWxsOwotICAgICAgICAgIGlmIChpbnB1dC5nZXRNZXNzYWdlKCkgIT0gbWVzc2FnZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGhhbmRsZSBPdXRwdXQKLSAgICAgICAgLy8KLSAgICAgICAgT3V0cHV0IG91dHB1dCA9IChPdXRwdXQpIG9wZXJhdGlvbi5nZXRPdXRwdXQoKTsKLSAgICAgICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgUU5hbWUgcW5hbWUgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZShvdXRwdXQpOwotICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChxbmFtZSAhPSBudWxsKSA/IChNZXNzYWdlKSBkZWZpbml0aW9uLmdldE1lc3NhZ2UocW5hbWUpIDogbnVsbDsKLSAgICAgICAgICBpZiAob3V0cHV0LmdldE1lc3NhZ2UoKSAhPSBtZXNzYWdlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGhhbmRsZSBGYXVsdHMKLSAgICAgICAgLy8KLSAgICAgICAgZm9yIChJdGVyYXRvciBrID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKS5pdGVyYXRvcigpOyBrLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdCkgay5uZXh0KCk7Ci0KLSAgICAgICAgICBRTmFtZSBxbmFtZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lKGZhdWx0KTsKLSAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAocW5hbWUgIT0gbnVsbCkgPyAoTWVzc2FnZSkgZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHFuYW1lKSA6IG51bGw7Ci0gICAgICAgICAgaWYgKGZhdWx0LmdldE1lc3NhZ2UoKSAhPSBtZXNzYWdlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZhdWx0LnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHVwZGF0ZVNjaGVtYVJlZmVyZW5jZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIGkubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBqID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBqLm5leHQoKTsKLSAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBhcnQpOwotICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgKChXU0RMRWxlbWVudEltcGwpcGFydCkuZWxlbWVudENoYW5nZWQoZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIE9wZXJhdGlvbiBnZXRPcGVyYXRpb24oUG9ydFR5cGUgcG9ydFR5cGUsIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIE9wZXJhdGlvbiByZXN1bHQgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBpLm5leHQoKTsKLSAgICAgIGlmIChpc01hdGNoaW5nQmluZGluZyhvcGVyYXRpb24sIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBvcGVyYXRpb247Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHVwZGF0ZU9wZXJhdGlvblJlZmVyZW5jZShCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gY29tcHV0ZU9wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICBpZiAob3BlcmF0aW9uICE9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRDb21wb25lbnROYW1lTGlzdChib29sZWFuIGlzVHlwZSkKLSAgewotICAgIExpc3QgcmVzdWx0ID0gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgICBJVHlwZVN5c3RlbVByb3ZpZGVyIHR5cGVTeXN0ZW1Qcm92aWRlciA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0VHlwZVN5c3RlbVByb3ZpZGVyKHJvb3REZWZpbml0aW9uKTsKLSAgICBpZiAodHlwZVN5c3RlbVByb3ZpZGVyICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gaXNUeXBlID8gdHlwZVN5c3RlbVByb3ZpZGVyLmdldEF2YWlsYWJsZVR5cGVOYW1lcyhyb290RGVmaW5pdGlvbiwgMCkgOiB0eXBlU3lzdGVtUHJvdmlkZXIuZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKHJvb3REZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRDb21wb25lbnROYW1lTGlzdChQYXJ0IHBhcnQsIGJvb2xlYW4gaXNUeXBlKQotICB7Ci0gICAgTGlzdCByZXN1bHQgPSBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIElUeXBlU3lzdGVtUHJvdmlkZXIgdHlwZVN5c3RlbVByb3ZpZGVyID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRUeXBlU3lzdGVtUHJvdmlkZXIoZGVmaW5pdGlvbik7Ci0gICAgaWYgKHR5cGVTeXN0ZW1Qcm92aWRlciAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGlzVHlwZSA/IHR5cGVTeXN0ZW1Qcm92aWRlci5nZXRBdmFpbGFibGVUeXBlTmFtZXMoZGVmaW5pdGlvbiwgMCkgOiB0eXBlU3lzdGVtUHJvdmlkZXIuZ2V0QXZhaWxhYmxlRWxlbWVudE5hbWVzKGRlZmluaXRpb24pOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHlwZShQYXJ0IHBhcnQpCi0gIHsKLSAgICAvL0VsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChwYXJ0KTsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnQoKTsKLSAgICByZXR1cm4gIWVsZW1lbnQuaGFzQXR0cmlidXRlKCJlbGVtZW50Iik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhcnRDb21wb25lbnRSZWZlcmVuY2UoUGFydCBwYXJ0KQotICB7Ci0gICAgLy9FbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QocGFydCk7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gcGFydC5nZXRFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCJ0eXBlIikpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgidHlwZSIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCJlbGVtZW50IikpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgiZWxlbWVudCIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q29tcG9uZW50UmVmZXJlbmNlKFBhcnQgcGFydCwgYm9vbGVhbiBpc1R5cGUsIFN0cmluZyBjb21wb25lbnROYW1lKQotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBhcnQpOwotICAgIFN0cmluZyBuZXdBdHRyaWJ1dGUgPSBpc1R5cGUgPyAidHlwZSIgOiAiZWxlbWVudCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIFN0cmluZyBvbGRBdHRyaWJ1dGUgPSBpc1R5cGUgPyAiZWxlbWVudCIgOiAidHlwZSI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG9sZEF0dHJpYnV0ZSk7Ci0KLSAgICBTdHJpbmcgdmFsdWUgPSBjb21wb25lbnROYW1lICE9IG51bGwgPyBjb21wb25lbnROYW1lIDogZWxlbWVudC5nZXRBdHRyaWJ1dGUobmV3QXR0cmlidXRlKTsKLQotICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChpc1R5cGUpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB4c2RQcmVmaXggPSBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRQcmVmaXgoV1NETENvbnN0YW50cy5YU0RfTkFNRVNQQUNFX1VSSSk7Ci0gICAgICAgIHZhbHVlID0gInN0cmluZyI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgaWYgKHhzZFByZWZpeCAhPSBudWxsICYmIHhzZFByZWZpeC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICB2YWx1ZSA9IHhzZFByZWZpeCArICI6IiArIHZhbHVlOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gZ2V0Q29tcG9uZW50TmFtZUxpc3QocGFydCwgaXNUeXBlKTsKLSAgICAgICAgdmFsdWUgPSBsaXN0LnNpemUoKSA+IDAgPyAoU3RyaW5nKSBsaXN0LmdldCgwKSA6ICJzb21lLWVsZW1lbnQtbmFtZSI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmV3QXR0cmlidXRlLCB2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIE9wZXJhdGlvbiBjb21wdXRlT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIE9wZXJhdGlvbiByZXN1bHQgPSBudWxsOwotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBiaW5kaW5nT3BlcmF0aW9uLmVDb250YWluZXIoKTsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgYmluZGluZy5nZXRQb3J0VHlwZSgpOwotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldE9wZXJhdGlvbihwb3J0VHlwZSwgYmluZGluZ09wZXJhdGlvbik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIElucHV0IGNvbXB1dGVJbnB1dChCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0KQotICB7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvbXB1dGVPcGVyYXRpb24oKEJpbmRpbmdPcGVyYXRpb24pIGJpbmRpbmdJbnB1dC5lQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBvcGVyYXRpb24gIT0gbnVsbCA/IG9wZXJhdGlvbi5nZXRFSW5wdXQoKSA6IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIE91dHB1dCBjb21wdXRlT3V0cHV0KEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCkKLSAgewotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBjb21wdXRlT3BlcmF0aW9uKChCaW5kaW5nT3BlcmF0aW9uKSBiaW5kaW5nT3V0cHV0LmVDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbiAhPSBudWxsID8gb3BlcmF0aW9uLmdldEVPdXRwdXQoKSA6IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEZhdWx0IGNvbXB1dGVGYXVsdChCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0KQotICB7Ci0gICAgRmF1bHQgcmVzdWx0ID0gbnVsbDsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gY29tcHV0ZU9wZXJhdGlvbigoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ0ZhdWx0LmVDb250YWluZXIoKSk7Ci0gICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdCkgaS5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0gICAgICAgIGlmIChmYXVsdE5hbWUgIT0gbnVsbCAmJiBmYXVsdE5hbWUuZXF1YWxzKGJpbmRpbmdGYXVsdC5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gZmF1bHQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhcnRSZWZlcmVuY2VWYWx1ZShQYXJ0IHBhcnQpCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QocGFydCk7Ci0gICAgU3RyaW5nIHZhbHVlID0gbnVsbDsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgidHlwZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7ICAgICAgCQkKLSAgICAgICAgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgidHlwZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7ICAKLSAgICAgICAgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgiZWxlbWVudCIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9ICAgICAgICAgCi0gICAgfSAgCi0gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6ICIiOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgT3BlcmF0aW9uIGdldEJpbmRpbmdPcGVyYXRpb24oRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uQ29udGVudCkKLSAgewotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBudWxsOwotICAgIE5vZGUgcGFyZW50ID0gYmluZGluZ09wZXJhdGlvbkNvbnRlbnQuZ2V0UGFyZW50Tm9kZSgpOwotICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQocm9vdERlZmluaXRpb24sIChFbGVtZW50KSBwYXJlbnQpOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbiA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZU9wZXJhdGlvbigoQmluZGluZ09wZXJhdGlvbikgb2JqZWN0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG9wZXJhdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBNZXNzYWdlIGdldEJpbmRpbmdPcGVyYXRpb25JbnB1dE1lc3NhZ2UoRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uQ29udGVudCkKLSAgewotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG51bGw7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbkNvbnRlbnQpOwotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLSAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICBwdWJsaWMgTWVzc2FnZSBnZXRCaW5kaW5nT3BlcmF0aW9uT3V0cHV0TWVzc2FnZShFbGVtZW50IGJpbmRpbmdPcGVyYXRpb25Db250ZW50KQotICB7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gZ2V0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uQ29udGVudCk7Ci0gICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIE91dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotICAgICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gb3V0cHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY29tcHV0ZVJlbGF0aXZlVVJJKElGaWxlIHJlZmVyZW5jZWRMb2NhdGlvbiwgSUZpbGUgYmFzZUxvY2F0aW9uLCBib29sZWFuIGVuYWJsZUlFU3R5bGVSZWZlcmVuY2VzKQotICB7Ci0gICAgLy8gVE9ETy4uLiB3ZSBuZWVkIHNvbWUgZXh0ZW5zaW9uIHRvIGFsbG93IElFIGZvbGtzIHRvIHBsdWdpbiBsb2dpYyB0byBjcmVhdGUgYW4gJ0lFJyBzdHlsZSBwYXRoCi0gICAgLy8gVE9ETy4uLiBjb25zaWRlciB1c2luZyBVUkkgY2xhc3MgaW4gRU1GIAotICAgIHJldHVybiBVUklIZWxwZXIuZ2V0UmVsYXRpdmVVUkkocmVmZXJlbmNlZExvY2F0aW9uLmdldExvY2F0aW9uKCksIGJhc2VMb2NhdGlvbi5nZXRMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY29tcHV0ZVJlbGF0aXZlVVJJKFN0cmluZyByZWZlcmVuY2VkTG9jYXRpb24sIFN0cmluZyBiYXNlTG9jYXRpb24sIGJvb2xlYW4gZW5hYmxlSUVTdHlsZVJlZmVyZW5jZXMpCi0gIHsKLSAgICAvLyBUT0RPLi4uIHdlIG5lZWQgc29tZSBleHRlbnNpb24gdG8gYWxsb3cgSUUgZm9sa3MgdG8gcGx1Z2luIGxvZ2ljIHRvIGNyZWF0ZSBhbiAnSUUnIHN0eWxlIHBhdGgKLSAgICAvLyBUT0RPLi4uIGNvbnNpZGVyIHVzaW5nIFVSSSBjbGFzcyBpbiBFTUYgCi0gICAgcmV0dXJuIFVSSUhlbHBlci5nZXRSZWxhdGl2ZVVSSShyZWZlcmVuY2VkTG9jYXRpb24sIGJhc2VMb2NhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9DcmVhdGVXU0RMRWxlbWVudEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL0NyZWF0ZVdTRExFbGVtZW50SGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwM2ViMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL0NyZWF0ZVdTRExFbGVtZW50SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlUmVmZXJlbmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCYXNlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRGYXVsdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkSW5wdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZElucHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRNZXNzYWdlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRPcGVyYXRpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRQYXJ0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRQb3J0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRQb3J0VHlwZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkU2VydmljZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIgewotCS8vIENvbnN0YW50cyB1c2VkIGZvciBnZXR0aW5nIFBhcnQgaW5mb3JtYXRpb24KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX0lORk9fRUxFTUVOVF9ERUNMQVJBVElPTiA9ICJFTEVNRU5UX0RFQ0xBUkFUSU9OIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlRfSU5GT19UWVBFX0RFRklOSVRJT04gICAgID0gIlRZUEVfREVGSU5JVElPTiI7IC8vJE5PTi1OTFMtMSQKLQotCS8vIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHNob3VsZCBiZSBzZXQgaWYgYSBuYW1lIG90aGVyIHRoYW4gdGhlIGNvbXB1dGVkIG5hbWUgaXMgdG8gYmUgdXNlZC4KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBzZXJ2aWNlTmFtZSA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgcG9ydE5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGJpbmRpbmdOYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBwb3J0VHlwZU5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGlucHV0TmFtZSA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgb3V0cHV0TmFtZSA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZmF1bHROYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBtZXNzYWdlTmFtZSA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgcGFydE5hbWUgPSBudWxsOwotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID0gUEFSVF9JTkZPX1RZUEVfREVGSU5JVElPTjsKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gQ1JFQVRFX0RPV05fVE9fUEFSVCA9IHRydWU7Ci0JCQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjcmVhdGVzIHRoZSAnc3BlY2lmaWVkJyAoYnkgY2FsbGluZyBhIGNlcnRhaW4gbWV0aG9kKSBXU0RMRWxlbWVudAotICogYW5kIGl0J3MgJ2NoaWxkcmVuJyBhbGwgdGhlIHdheSB0byB0aGUgUG9ydFR5cGUgbGV2ZWwuCi0gKi8KLQlwdWJsaWMgc3RhdGljIFNlcnZpY2UgY3JlYXRlU2VydmljZShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJaWYgKHNlcnZpY2VOYW1lID09IG51bGwgfHwgc2VydmljZU5hbWUudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLQkJCXNlcnZpY2VOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVTZXJ2aWNlTmFtZShkZWZpbml0aW9uKTsJCQotCQkKLQkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIucG9ydFR5cGVOYW1lID0gc2VydmljZU5hbWU7Ci0JCQotCSAgICBBZGRTZXJ2aWNlQ29tbWFuZCBhZGRTZXJ2aWNlID0gbmV3IEFkZFNlcnZpY2VDb21tYW5kKGRlZmluaXRpb24sIHNlcnZpY2VOYW1lLCBmYWxzZSk7Ci0JICAgIGFkZFNlcnZpY2UucnVuKCk7Ci0JICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBhZGRTZXJ2aWNlLmdldFdTRExFbGVtZW50KCk7Ci0JICAgIENyZWF0ZVdTRExFbGVtZW50SGVscGVyLmNyZWF0ZVBvcnQoc2VydmljZSk7Ci0gIAkJCi0JICAgIHJldHVybiBzZXJ2aWNlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFBvcnQgY3JlYXRlUG9ydChTZXJ2aWNlIHNlcnZpY2UpIHsKLQkJaWYgKHBvcnROYW1lID09IG51bGwgfHwgcG9ydE5hbWUudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLQkJCXBvcnROYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVQb3J0TmFtZShzZXJ2aWNlLCBudWxsKTsKLQkJCi0JICAgIEFkZFBvcnRDb21tYW5kIGFkZFBvcnQgPSBuZXcgQWRkUG9ydENvbW1hbmQoc2VydmljZSwgcG9ydE5hbWUpOwotCSAgICBhZGRQb3J0LnJ1bigpOwotCSAgICBQb3J0IHBvcnQgPSAoUG9ydCkgYWRkUG9ydC5nZXRXU0RMRWxlbWVudCgpOwotCQlCaW5kaW5nIGJpbmRpbmcgPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVCaW5kaW5nKHBvcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBwb3J0KTsKLQotCQlwb3J0LnNldEJpbmRpbmcoYmluZGluZyk7Ci0JCQotCSAgICByZXR1cm4gcG9ydDsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBCaW5kaW5nIGNyZWF0ZUJpbmRpbmcoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBQb3J0IHBvcnQpIHsKLQkJYmluZGluZ05hbWUgPSBwb3J0LmdldE5hbWUoKTsKLQkJaWYgKGJpbmRpbmdOYW1lID09IG51bGwgfHwgYmluZGluZ05hbWUudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLQkJCWJpbmRpbmdOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVCaW5kaW5nTmFtZShkZWZpbml0aW9uLCBudWxsKTsKLQkJCi0JCUFkZEJpbmRpbmdDb21tYW5kIGFkZEJpbmRpbmcgPSBuZXcgQWRkQmluZGluZ0NvbW1hbmQoZGVmaW5pdGlvbiwgYmluZGluZ05hbWUpOwotCQlhZGRCaW5kaW5nLnJ1bigpOwotCQlCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgYWRkQmluZGluZy5nZXRXU0RMRWxlbWVudCgpOwotCQlQb3J0VHlwZSBwb3J0VHlwZSA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLmNyZWF0ZVBvcnRUeXBlKGJpbmRpbmcuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQotCQliaW5kaW5nLnNldFBvcnRUeXBlKHBvcnRUeXBlKTsKLQkJCi0JCXJldHVybiBiaW5kaW5nOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFBvcnRUeXBlIGNyZWF0ZVBvcnRUeXBlKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlpZiAocG9ydFR5cGVOYW1lID09IG51bGwgfHwgcG9ydFR5cGVOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQlwb3J0VHlwZU5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZVBvcnRUeXBlTmFtZShkZWZpbml0aW9uLCAiUG9ydFR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJQWRkUG9ydFR5cGVDb21tYW5kIGFkZFBvcnRUeXBlQ29tbWFuZCA9IG5ldyBBZGRQb3J0VHlwZUNvbW1hbmQoZGVmaW5pdGlvbiwgcG9ydFR5cGVOYW1lKTsKLQkJYWRkUG9ydFR5cGVDb21tYW5kLnJ1bigpOwotCQlQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgYWRkUG9ydFR5cGVDb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0KLQkJaWYgKENSRUFURV9ET1dOX1RPX1BBUlQpIHsKLQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLmNyZWF0ZU9wZXJhdGlvbihwb3J0VHlwZSk7Ci0JCX0KLQkJCi0JCXJldHVybiBwb3J0VHlwZTsKLQl9Ci0KLQkKLS8qCi0gKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgY3JlYXRlcyB0aGUgJ3NwZWNpZmllZCcgKGJ5IGNhbGxpbmcgYSBjZXJ0YWluIG1ldGhvZCkgV1NETEVsZW1lbnQKLSAqIGFuZCBpdCdzICdjaGlsZHJlbicgYWxsIHRoZSB3YXkgdG8gdGhlIFBhcnQgbGV2ZWwuCi0gKi8JCi0gIAlwdWJsaWMgc3RhdGljIE9wZXJhdGlvbiBjcmVhdGVPcGVyYXRpb24oUG9ydFR5cGUgcG9ydFR5cGUpIHsKLSAgCQlpZiAob3BlcmF0aW9uTmFtZSA9PSBudWxsIHx8IG9wZXJhdGlvbk5hbWUudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLSAgCQkJb3BlcmF0aW9uTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlT3BlcmF0aW9uTmFtZShwb3J0VHlwZSk7Ci0gIAkJCi0JCUFkZE9wZXJhdGlvbkNvbW1hbmQgYWN0aW9uID0gbmV3IEFkZE9wZXJhdGlvbkNvbW1hbmQocG9ydFR5cGUsIG9wZXJhdGlvbk5hbWUpOwotCQlhY3Rpb24ucnVuKCk7Ci0JCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBhY3Rpb24uZ2V0V1NETEVsZW1lbnQoKTsKLQkJCi0JCWludCBzdHlsZSA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVDsKLSAgCQlpZiAoUEFSVF9UWVBFX09SX0RFRklOSVRJT04gPT0gUEFSVF9JTkZPX1RZUEVfREVGSU5JVElPTikgewotICAJCQlzdHlsZSA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfU0lNUExFVFlQRTsKLSAgCQl9Ci0gIAkJZWxzZSBpZiAoUEFSVF9UWVBFX09SX0RFRklOSVRJT04gPT0gUEFSVF9JTkZPX0VMRU1FTlRfREVDTEFSQVRJT04pIHsKLSAgCQkJc3R5bGUgPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7Ci0vLyAgCQkJc3R5bGUgPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlQ7Ci0gIAkJfQotICAJCQotCQlBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQgaW5wdXRDb21tYW5kID0gbmV3IEFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIHN0eWxlKTsKLQkJaW5wdXRDb21tYW5kLnJ1bigpOwotCQlBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kIG91dHB1dENvbW1hbmQgPSBuZXcgQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIHN0eWxlKTsKLQkJb3V0cHV0Q29tbWFuZC5ydW4oKTsKLQkJb3BlcmF0aW9uLnNldFN0eWxlKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSk7Ci0KLQkJcmV0dXJuIG9wZXJhdGlvbjsKLSAgCX0KLQotICAJcHVibGljIHN0YXRpYyBJbnB1dCBjcmVhdGVJbnB1dChQb3J0VHlwZSBwb3J0VHlwZSwgT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIGlucHV0TmFtZSkgewotICAJCWlmIChpbnB1dE5hbWUgPT0gbnVsbCB8fCBpbnB1dE5hbWUudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLSAgCSAgCQlpbnB1dE5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZUlucHV0TmFtZShwb3J0VHlwZSwgb3BlcmF0aW9uLmdldE5hbWUoKSwgIiIpOyAvLyROT04tTkxTLTEkCi0gIAkJCi0gIAkJQWRkSW5wdXRDb21tYW5kIGFjdGlvbiA9IG5ldyBBZGRJbnB1dENvbW1hbmQob3BlcmF0aW9uLCBpbnB1dE5hbWUpOwotICAJCWFjdGlvbi5ydW4oKTsKLSAgCQlJbnB1dCBpbnB1dCA9IChJbnB1dCkgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7IAotICAJCU1lc3NhZ2UgbWVzcyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLmNyZWF0ZU1lc3NhZ2UoaW5wdXQpOwotICAJCWlucHV0LnNldE1lc3NhZ2UobWVzcyk7Ci0gIAkJCSAgCQkKLSAgCQlyZXR1cm4gaW5wdXQ7Ci0gIAl9Ci0gIAkJCSAgCQotICAJcHVibGljIHN0YXRpYyBPdXRwdXQgY3JlYXRlT3V0cHV0KFBvcnRUeXBlIHBvcnRUeXBlLCBPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0gIAkJaWYgKG91dHB1dE5hbWUgPT0gbnVsbCB8fCBvdXRwdXROYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gIAkgIAkJb3V0cHV0TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlT3V0cHV0TmFtZShwb3J0VHlwZSwgb3BlcmF0aW9uLmdldE5hbWUoKSwgIiIpOyAvLyROT04tTkxTLTEkCi0gIAkJCi0gIAkJQWRkT3V0cHV0Q29tbWFuZCBhY3Rpb24gPSBuZXcgQWRkT3V0cHV0Q29tbWFuZChvcGVyYXRpb24sIG91dHB1dE5hbWUpOwotICAJCWFjdGlvbi5ydW4oKTsKLSAgCQlPdXRwdXQgb3V0cHV0ID0gKE91dHB1dCkgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7Ci0gIAkJTWVzc2FnZSBtZXNzID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlTWVzc2FnZShvdXRwdXQpOwotICAJCW91dHB1dC5zZXRNZXNzYWdlKG1lc3MpOwkKLSAgCQkJICAJCQotICAJCXJldHVybiBvdXRwdXQ7Ci0gIAl9Ci0gIAkJCSAgCQotICAJcHVibGljIHN0YXRpYyBGYXVsdCBjcmVhdGVGYXVsdChPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0gIAkJaWYgKGZhdWx0TmFtZSA9PSBudWxsIHx8IGZhdWx0TmFtZS50cmltKCkuZXF1YWxzKCIiKSkgIC8vJE5PTi1OTFMtMSQKLQkgIAkJZmF1bHROYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVGYXVsdE5hbWUob3BlcmF0aW9uKTsKLSAgCQkKLSAgCQlBZGRGYXVsdENvbW1hbmQgYWN0aW9uID0gbmV3IEFkZEZhdWx0Q29tbWFuZChvcGVyYXRpb24sIGZhdWx0TmFtZSk7Ci0gIAkJYWN0aW9uLnJ1bigpOwotICAJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBhY3Rpb24uZ2V0V1NETEVsZW1lbnQoKTsKLSAgCQlNZXNzYWdlIG1lc3MgPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVNZXNzYWdlKGZhdWx0KTsKLSAgCQlmYXVsdC5zZXRNZXNzYWdlKG1lc3MpOwotICAJCSAJCQotICAJCXJldHVybiBmYXVsdDsKLSAgCX0KLSAgCQkJICAJCi0gIAlwdWJsaWMgc3RhdGljIE1lc3NhZ2UgY3JlYXRlTWVzc2FnZShNZXNzYWdlUmVmZXJlbmNlIGlvZikgewotICAJCWlmIChtZXNzYWdlTmFtZSA9PSBudWxsIHx8IG1lc3NhZ2VOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gIAkgIAkJbWVzc2FnZU5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGlvZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGlvZik7Ci0vLwkgIAkJbWVzc2FnZU5hbWUgPSBOYW1lVXRpbC5idWlsZE1lc3NhZ2VOYW1lKGlvZi5nZXROYW1lKCkpOwotICAJCQotICAJCURlZmluaXRpb24gZGVmID0gaW9mLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgCQlBZGRNZXNzYWdlQ29tbWFuZCBhY3Rpb24gPSBuZXcgQWRkTWVzc2FnZUNvbW1hbmQoZGVmLCBtZXNzYWdlTmFtZSk7Ci0gIAkJYWN0aW9uLnJ1bigpOwotICAJCU1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBhY3Rpb24uZ2V0V1NETEVsZW1lbnQoKTsKLSAgCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVQYXJ0KG1lc3NhZ2UpOwotICAJCUVsZW1lbnQgcGFyZW50Tm9kZSA9IG1lc3NhZ2UuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBJRE9NTm9kZSkgCi0gICAgICB7Ci0JCSAgICAvLyBmb3JtYXQgc2VsZWN0ZWQgbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgRm9ybWF0UHJvY2Vzc29yWE1MIGZvcm1hdFByb2Nlc3NvclhNTCA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLSAgICAgICAgZm9ybWF0UHJvY2Vzc29yWE1MLmZvcm1hdE5vZGUoKElET01Ob2RlKXBhcmVudE5vZGUpOwotICAgICAgfQotICAJCQotICAJCW1lc3NhZ2VOYW1lID0gbnVsbDsKLSAgCQlyZXR1cm4gbWVzc2FnZTsKLSAgCX0KLSAgCQkJICAJCi0gIAlwdWJsaWMgc3RhdGljIFBhcnQgY3JlYXRlUGFydChNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgCQlEZWZpbml0aW9uIGRlZiA9IG1lc3NhZ2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAJCVN0cmluZyBuYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVQYXJ0TmFtZShtZXNzYWdlLCBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAJCUFkZFBhcnRDb21tYW5kIGFjdGlvbiA9IG51bGw7Ci0gIAkJCi0gIAkJaWYgKFBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID09IFBBUlRfSU5GT19UWVBFX0RFRklOSVRJT04pIHsKLSAgCQkJYWN0aW9uID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIG5hbWUsIFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAJCX0KLSAgCQllbHNlIGlmIChQQVJUX1RZUEVfT1JfREVGSU5JVElPTiA9PSBQQVJUX0lORk9fRUxFTUVOVF9ERUNMQVJBVElPTikgeyAgCQkJCi0gIAkJCS8vYWN0aW9uID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIG5hbWUsIFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciLCB0cnVlKTsKLSAgCQkJU3RyaW5nIGVsZW1lbnROYW1lID0gZ2V0TmV3TmFtZUhlbHBlcihuYW1lLCBkZWYsIGZhbHNlKTsKLSAgCQkJQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZCBlbGVtZW50QWN0aW9uID0gbmV3IEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQoZGVmLCBlbGVtZW50TmFtZSk7Ci0gIAkJCWVsZW1lbnRBY3Rpb24ucnVuKCk7Ci0gIAkJCWFjdGlvbiA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBuYW1lLCBkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGVsZW1lbnROYW1lLCBmYWxzZSk7Ci0gIAkJfQotCi0gIAkJYWN0aW9uLnJ1bigpOwotICAJCQotICAJCXJldHVybiAoUGFydCkgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7Ci0gIAl9CQotCi0gIAkvKgotICAJICogVXNlZCB0byBkZXRlcm1pbmUgYSBuYW1lIGZvciBhbiBFbGVtZW50Ci0gIAkgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0TmV3TmFtZUhlbHBlcihTdHJpbmcgYmFzZSwgRGVmaW5pdGlvbiBkZWYsIGJvb2xlYW4gaXNUeXBlKQotICAgIHsgCi0gICAgICBTdHJpbmcgbmFtZSA9IGJhc2U7ICAgIAotICAgICAgaW50IGNvdW50ID0gMDsKLQotICAgICAgLy8gVWdseS4uLi4gIFJlZG8gdGhpcy4uLgotICAgICAgLy8gR2V0IGEgbGlzdCBvZiBFbGVtZW50cy4uLgotICAgICAgTGlzdCBlbGVtZW50TGlzdCA9IG51bGw7Ci0gICAgICBpZiAoZGVmLmdldEVUeXBlcygpICE9IG51bGwpIHsKLSAgICAgIAlMaXN0IHhzZHNMaXN0ID0gZGVmLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIAlpZiAoeHNkc0xpc3QgIT0gbnVsbCkgewotICAgICAgCQlJdGVyYXRvciB4c2RzSXRlcmF0b3IgPSB4c2RzTGlzdC5pdGVyYXRvcigpOwotICAgICAgCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSB4c2RzSXRlcmF0b3IubmV4dCgpOwotICAgICAgCQlYU0RTY2hlbWEgc2NoZW1hID0geHNkRWxlbWVudC5nZXRTY2hlbWEoKTsKLSAgICAgIAkJaWYgKHNjaGVtYSAhPSBudWxsKSB7Ci0gICAgICAJCQllbGVtZW50TGlzdCA9IHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCk7Ci0gICAgICAJCX0KLSAgICAgIAl9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChlbGVtZW50TGlzdCAhPSBudWxsKSB7Ci0gICAgICAJaW50IGluZGV4ID0gMDsKLSAgICAgIAl3aGlsZSAoaW5kZXggPCBlbGVtZW50TGlzdC5zaXplKCkpIHsKLSAgICAgIAkJWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsYXJhdGlvbiA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGVsZW1lbnRMaXN0LmdldChpbmRleCk7Ci0gICAgICAJCQotICAgICAgCQlpZiAobmFtZS5lcXVhbHMoZWxlbWVudERlY2xhcmF0aW9uLmdldE5hbWUoKSkpIHsKLSAgICAgIAkJCWNvdW50Kys7Ci0gICAgICAJCQluYW1lID0gbmFtZSArIGNvdW50OwotICAgICAgCQkJaW5kZXggPSAwOwotICAgICAgCQl9Ci0gICAgICAJCWVsc2UgewotICAgICAgCQkJaW5kZXgrKzsKLSAgICAgIAkJfQotICAgICAgCX0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotCi0gIAkvKgotICAJICogUmV0dXJuIHRoZSB0eXBlIG9mIFBhcnQgdGhpcyBXU0RMRWxlbWVudCBzaG91bGQgaGF2ZSAoRWxlbWVudCB2cyBUeXBlKS4gIFRvIGRldGVybWluZSB0aGlzLCB3ZSBmaWx0ZXIgdXAgdG8gdGhlICdwYXJlbnQnIFBvcnRUeXBlCi0gIAkgKiBhbmQgZ28gZG93biB0byB0aGUgZmlyc3QgUGFydCB3ZSBlbmNvdW50ZXIgYW5kIGNoZWNrIHRoZSB0eXBlIGl0IGhhcy4gIElmIHRoaXMgZmFpbHMsIGRlZmF1bHQgdG8gVHlwZS4KLSAgCSAqLwotICAJICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYXJ0SW5mbyhXU0RMRWxlbWVudCBlbGVtZW50KSB7Ci0gIAkgIAlTdHJpbmcgcGFydEluZm8gPSBudWxsOwotICAJICAJCi0gIAkgIAlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBvcnRUeXBlKSB7Ci0gIAkgIAkJcGFydEluZm8gPSBnZXRQYXJ0SW5mbygoUG9ydFR5cGUpIGVsZW1lbnQpOwotICAJICAJfQotICAJICAJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE9wZXJhdGlvbikgewotICAJICAJCXBhcnRJbmZvID0gZ2V0UGFydEluZm8oKChXU0RMRWxlbWVudEltcGwpIGVsZW1lbnQpLmdldENvbnRhaW5lcigpKTsKLSAgCSAgCX0KLSAgCSAgCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBNZXNzYWdlUmVmZXJlbmNlSW1wbCkgewotICAJICAJCXBhcnRJbmZvID0gZ2V0UGFydEluZm8oKChXU0RMRWxlbWVudEltcGwpIGVsZW1lbnQpLmdldENvbnRhaW5lcigpKTsKLSAgCSAgCX0KLQotICAJICAJaWYgKHBhcnRJbmZvID09IG51bGwpIHsKLSAgCSAgCQlwYXJ0SW5mbyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfSU5GT19UWVBFX0RFRklOSVRJT047Ci0gIAkgIAl9Ci0gIAkgIAkKLSAgCSAgCXJldHVybiBwYXJ0SW5mbzsgIAkKLSAgCSAgfQotICAJICAKLSAgCSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFBhcnRJbmZvKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gIAkgIAlTdHJpbmcgcGFydEluZm8gPSBudWxsOwotICAJICAJCi0gIAkgIAlpZiAocG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpICE9IG51bGwpIHsKLSAgCSAgCQlJdGVyYXRvciBvcGVyYXRpb25JdCA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAJICAJCXdoaWxlIChvcGVyYXRpb25JdC5oYXNOZXh0KCkpIHsKLSAgCSAgCQkJT3BlcmF0aW9uIG9wID0gKE9wZXJhdGlvbikgb3BlcmF0aW9uSXQubmV4dCgpOwotCi0gIAkgIAkJCWlmIChvcC5nZXRFSW5wdXQoKSAhPSBudWxsKSB7Ci0gIAkgIAkJCQlwYXJ0SW5mbyA9IGdldE1lc3NhZ2VSZWZQYXJ0SW5mbygoTWVzc2FnZVJlZmVyZW5jZUltcGwpIG9wLmdldEVJbnB1dCgpKTsKLSAgCSAgCQkJfQotICAJICAJCi0gIAkgIAkJCWlmIChwYXJ0SW5mbyA9PSBudWxsICYmIG9wLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0gIAkgIAkJCQlwYXJ0SW5mbyA9IGdldE1lc3NhZ2VSZWZQYXJ0SW5mbygoTWVzc2FnZVJlZmVyZW5jZUltcGwpIG9wLmdldEVPdXRwdXQoKSk7Ci0gIAkgIAkJCX0KLSAgCSAgCQotICAJICAJCQlpZiAob3AuZ2V0RUZhdWx0cygpICE9IG51bGwpIHsKLSAgCSAgCQkJCUl0ZXJhdG9yIGZhdWx0SXQgPSBvcC5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLSAgCSAgCQkJCXdoaWxlIChwYXJ0SW5mbyA9PSBudWxsICYmIGZhdWx0SXQuaGFzTmV4dCgpKSB7Ci0gIAkgIAkJCQkJRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGZhdWx0SXQubmV4dCgpOwotICAJICAJCQkJCXBhcnRJbmZvID0gZ2V0TWVzc2FnZVJlZlBhcnRJbmZvKChNZXNzYWdlUmVmZXJlbmNlSW1wbCkgZmF1bHQpOwotICAJICAJCQkJfQotICAJICAJCQl9Ci0gIAkgIAkgIAkgIAkKLSAgCSAgCQkJaWYgKHBhcnRJbmZvICE9IG51bGwpCi0gIAkgIAkJCQlicmVhazsKLSAgCSAgCQl9Ci0gIAkgIAl9Ci0KLSAgCSAgCXJldHVybiBwYXJ0SW5mbzsKLSAgCSAgfQotICAJICAKLSAgCSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VSZWZQYXJ0SW5mbyhNZXNzYWdlUmVmZXJlbmNlSW1wbCBpb2YpIHsKLSAgCSAgCVN0cmluZyBwYXJ0SW5mbyA9IG51bGw7Ci0gIAkgIAkKLSAgCSAgCWlmIChpb2YuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsICYmIGlvZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpICE9IG51bGwpIHsKLSAgCSAgCQlJdGVyYXRvciBwYXJ0SXQgPSBpb2YuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotICAJICAJCi0gIAkgIAkJd2hpbGUgKHBhcnRJbmZvID09IG51bGwgJiYgcGFydEl0Lmhhc05leHQoKSkgewotICAJICAJCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFydEl0Lm5leHQoKTsKLSAgCSAgCQkKLSAgCSAgCQkJaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0gIAkgIAkJCQlwYXJ0SW5mbyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfSU5GT19UWVBFX0RFRklOSVRJT047Ci0gIAkgIAkJCX0KLSAgCSAgCQkJZWxzZSBpZiAocGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKSB7Ci0gIAkgIAkJCQlwYXJ0SW5mbyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfSU5GT19FTEVNRU5UX0RFQ0xBUkFUSU9OOwotICAJICAJCQl9Ci0gIAkgIAkJfQotICAJICAJfQotICAJICAJCi0gIAkgIAlyZXR1cm4gcGFydEluZm87Ci0gIAkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9OYW1lVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL05hbWVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViOTkyMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL05hbWVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1ODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBOYW1lVXRpbAotewotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgZmF1bHQgaW4gdGhlIG9wZXJhdGlvbi4KLSAgICogQHJldHVybiBTdHJpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlRmF1bHROYW1lKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgCXJldHVybiBidWlsZFVuaXF1ZUZhdWx0TmFtZShvcGVyYXRpb24sICJOZXdGYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlRmF1bHROYW1lKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBiYXNlTmFtZSkgewotICAJaWYgKGJhc2VOYW1lID09IG51bGwpCi0gIAkJYmFzZU5hbWUgPSAiTmV3RmF1bHQiOyAvLyROT04tTkxTLTEkCi0gIAkKLSAgCUxpc3QgbmFtZXMgPSBnZXRVc2VkRmF1bHROYW1lcyhvcGVyYXRpb24pOwotCi0gICAgLy8gTm93IHNlYXJjaCB0aGUgbGlzdCB1bnRpbCB3ZSBmaW5kIGFuIHVudXNlZCBuYW1lCi0gICAgcmV0dXJuIGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIG5hbWVzKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBpbnB1dCBpbiB0aGUgcG9ydFR5cGUuICBSZXR1cm5lZCBuYW1lIHdpbGwgYmUgb2YgdGhlIGZvcm06Ci0gICAqIDxvcGVyYXRpb25OYW1lPiArIDxlbmRpbmc+IFsrIHVuaXF1ZSBJbnRlZ2VyXQotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVJbnB1dE5hbWUoUG9ydFR5cGUgcG9ydFR5cGUsIFN0cmluZyBvcGVyYXRpb25OYW1lLCBTdHJpbmcgZW5kaW5nKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIFN0cmluZyBjYW5kaWRhdGUgPSBvcGVyYXRpb25OYW1lICsgZW5kaW5nOwotCi0gICAgaW50IGkgPSAwOwotCi0gICAgLy8gbG9vcCB1bnRpbCB3ZSBmaW5kIGEgdW5pcXVlIG5hbWUgKHRoZSBuYW1lIHdpbGwgY29uc2lzdCBvZiB0aGUgb3BlcmF0aW9uTmFtZSArIGVuZGluZyArIGFuIGludGVnZXIpCi0gICAgd2hpbGUgKG5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBib29sZWFuIHVuaXF1ZSA9IHRydWU7Ci0KLSAgICAgIC8vIGRldGVybWluZSBpZiB0aGlzIGNvbWJpbmF0aW9uIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIGN1cnJlbnQgcG9ydHR5cGUKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKSAmJiB1bmlxdWU7KQotICAgICAgewotICAgICAgICBPcGVyYXRpb24gY3VycmVudCA9IChPcGVyYXRpb24pIGl0Lm5leHQoKTsKLSAgICAgICAgLy8gVE9ETyA6IHBvcnQgY2hlY2sKLSAgICAgICAgLy8gb2xkICBpZihjdXJyZW50LmlzU2V0RUlucHV0KCkgJiYgY3VycmVudC5nZXRFSW5wdXQoKS5pc1NldE5hbWUoKSkgewotICAgICAgICBpZiAoY3VycmVudC5nZXRFSW5wdXQoKSAhPSBudWxsICYmIGN1cnJlbnQuZ2V0RUlucHV0KCkuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY3VycmVudC5nZXRFSW5wdXQoKS5nZXROYW1lKCkuZXF1YWxzKGNhbmRpZGF0ZSkpCi0gICAgICAgICAgICB1bmlxdWUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHVuaXF1ZSkKLSAgICAgICAgbmFtZSA9IGNhbmRpZGF0ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgY2FuZGlkYXRlID0gb3BlcmF0aW9uTmFtZSArIGVuZGluZyArIGk7Ci0gICAgICBpKys7Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIG1lc3NhZ2UgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGJhc2VOYW1lKQotICB7Ci0gICAgaWYgKGJhc2VOYW1lID09IG51bGwpCi0gICAgewotICAgICAgYmFzZU5hbWUgPSAiTmV3TWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBMaXN0IG5hbWVzID0gZ2V0VXNlZE1lc3NhZ2VOYW1lcyhkZWZpbml0aW9uKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgb3BlcmF0aW9uIGluIHRoZSBwb3J0IHR5cGUuCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZU9wZXJhdGlvbk5hbWUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgCXJldHVybiBidWlsZFVuaXF1ZU9wZXJhdGlvbk5hbWUocG9ydFR5cGUsICJOZXdPcGVyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZU9wZXJhdGlvbk5hbWUoUG9ydFR5cGUgcG9ydFR5cGUsIFN0cmluZyBiYXNlTmFtZSkKLSAgewotICAJaWYgKGJhc2VOYW1lID09IG51bGwpIHsKLSAgCQliYXNlTmFtZSA9ICJOZXdPcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0gIAl9Ci0KLSAgCUxpc3QgbmFtZXMgPSBnZXRVc2VkT3BlcmF0aW9uTmFtZXMocG9ydFR5cGUpOwotCi0gICAgLy8gTm93IHNlYXJjaCB0aGUgbGlzdCB1bnRpbCB3ZSBmaW5kIGFuIHVudXNlZCBuYW1lCi0gICAgcmV0dXJuIGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIG5hbWVzKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBvdXRwdXQgaW4gdGhlIHBvcnRUeXBlLiAgUmV0dXJuZWQgbmFtZSB3aWxsIGJlIG9mIHRoZSBmb3JtOgotICAgKiA8b3BlcmF0aW9uTmFtZT4gKyA8ZW5kaW5nPiBbKyB1bmlxdWUgSW50ZWdlcl0KLSAgICogQHJldHVybiBTdHJpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlT3V0cHV0TmFtZShQb3J0VHlwZSBwb3J0VHlwZSwgU3RyaW5nIG9wZXJhdGlvbk5hbWUsIFN0cmluZyBlbmRpbmcpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgU3RyaW5nIGNhbmRpZGF0ZSA9IG9wZXJhdGlvbk5hbWUgKyBlbmRpbmc7Ci0KLSAgICBpbnQgaSA9IDA7Ci0KLSAgICAvLyBsb29wIHVudGlsIHdlIGZpbmQgYSB1bmlxdWUgbmFtZSAodGhlIG5hbWUgd2lsbCBjb25zaXN0IG9mIHRoZSBvcGVyYXRpb25OYW1lICsgZW5kaW5nICsgYW4gaW50ZWdlcikKLSAgICB3aGlsZSAobmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGJvb2xlYW4gdW5pcXVlID0gdHJ1ZTsKLQotICAgICAgLy8gZGV0ZXJtaW5lIGlmIHRoaXMgY29tYmluYXRpb24gaXMgdW5pcXVlIHdpdGhpbiB0aGUgY3VycmVudCBwb3J0dHlwZQkJCQotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpICYmIHVuaXF1ZTspCi0gICAgICB7Ci0gICAgICAgIE9wZXJhdGlvbiBjdXJyZW50ID0gKE9wZXJhdGlvbikgaXQubmV4dCgpOwotICAgICAgICAvLyBUT0RPOiBwb3J0IGNoZWNrCi0gICAgICAgIC8vIG9sZAkJCQlpZihjdXJyZW50LmlzU2V0RU91dHB1dCgpICYmIGN1cnJlbnQuZ2V0RU91dHB1dCgpLmlzU2V0TmFtZSgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50LmdldEVPdXRwdXQoKSAhPSBudWxsICYmIGN1cnJlbnQuZ2V0RU91dHB1dCgpLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGN1cnJlbnQuZ2V0RU91dHB1dCgpLmdldE5hbWUoKS5lcXVhbHMoY2FuZGlkYXRlKSkKLSAgICAgICAgICAgIHVuaXF1ZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAodW5pcXVlKQotICAgICAgICBuYW1lID0gY2FuZGlkYXRlOwotICAgICAgZWxzZQotICAgICAgICBjYW5kaWRhdGUgPSBvcGVyYXRpb25OYW1lICsgZW5kaW5nICsgaTsKLSAgICAgIGkrKzsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgcGFydCBpbiB0aGUgbWVzc2FnZS4KLSAgICogQHJldHVybiBTdHJpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlUGFydE5hbWUoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gIAlMaXN0IG5hbWVzID0gZ2V0VXNlZFBhcnROYW1lcyhtZXNzYWdlKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKCJOZXdQYXJ0IiwgbmFtZXMpOyAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlUGFydE5hbWUoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgYmFzZU5hbWUpCi0gIHsKLSAgCWlmIChiYXNlTmFtZSA9PSBudWxsKQotICAJewotICAJCWJhc2VOYW1lID0gIk5ld1BhcnQiOyAvLyROT04tTkxTLTEkCi0gIAl9Ci0gIAkKLSAgCUxpc3QgbmFtZXMgPSBnZXRVc2VkUGFydE5hbWVzKG1lc3NhZ2UpOwotCi0gICAgLy8gTm93IHNlYXJjaCB0aGUgbGlzdCB1bnRpbCB3ZSBmaW5kIGFuIHVudXNlZCBuYW1lCi0gICAgcmV0dXJuIGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIG5hbWVzKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBwb3J0IHR5cGUgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZVBvcnRUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBiYXNlTmFtZSkKLSAgewotICAgIGlmIChiYXNlTmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGJhc2VOYW1lID0gIk5ld1BvcnRUeXBlIjsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIExpc3QgbmFtZXMgPSBnZXRVc2VkUG9ydFR5cGVOYW1lcyhkZWZpbml0aW9uKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRVbmlxdWVOYW1lSGVscGVyKFN0cmluZyBiYXNlTmFtZSwgTGlzdCBuYW1lcykKLSAgewotICAgIGludCBpID0gMDsKLQotICAgIFN0cmluZyBuYW1lID0gYmFzZU5hbWU7Ci0gICAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgaWYgKCFuYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpKys7Ci0gICAgICBuYW1lID0gYmFzZU5hbWUgKyBpOwotICAgIH0KLQotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIHNlcnZpY2UgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZVNlcnZpY2VOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAJTGlzdCBuYW1lcyA9IGdldFVzZWRTZXJ2aWNlTmFtZXMoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBOb3cgc2VhcmNoIHRoZSBsaXN0IHVudGlsIHdlIGZpbmQgYW4gdW51c2VkIG5hbWUKLSAgICByZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcigiTmV3U2VydmljZSIsIG5hbWVzKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIGJpbmRpbmcgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZUJpbmRpbmdOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGJhc2VOYW1lKQotICB7Ci0gICAgaWYgKGJhc2VOYW1lID09IG51bGwpCi0gICAgewotICAgICAgYmFzZU5hbWUgPSAiTmV3QmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBMaXN0IG5hbWVzID0gZ2V0VXNlZEJpbmRpbmdOYW1lcyhkZWZpbml0aW9uKTsKLQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZVByZWZpeChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBiYXNlUHJlZml4KQotICB7Ci0gICAgU3RyaW5nIHByZWZpeCA9IGJhc2VQcmVmaXg7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlKHByZWZpeCkgIT0gbnVsbDsgaSsrKQotICAgIHsKLSAgICAgIHByZWZpeCA9IGJhc2VQcmVmaXggKyBpOwotICAgIH0KLSAgICByZXR1cm4gcHJlZml4OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVQb3J0TmFtZShTZXJ2aWNlIHNlcnZpY2UsIFN0cmluZyBiYXNlTmFtZSkKLSAgewotICAgIGlmIChiYXNlTmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGJhc2VOYW1lID0gIk5ld1BvcnQiOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAKLSAgICBMaXN0IG5hbWVzID0gZ2V0VXNlZFBvcnROYW1lcyhzZXJ2aWNlKTsKLSAgICAKLQlyZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgbmFtZXMpOwotICB9Ci0JCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBNZXNzYWdlUmVmZXJlbmNlIG1lc3NSZWYpCi0gIHsgICAKLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgaWYgKG1lc3NSZWYgaW5zdGFuY2VvZiBJbnB1dCkKLSAgICB7Ci0gICAgICBuYW1lID0gY3JlYXRlT3BlcmF0aW9uTmFtZShtZXNzUmVmLCAiUmVxdWVzdCIpOyAgICAgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlIGlmIChtZXNzUmVmIGluc3RhbmNlb2YgT3V0cHV0KQotICAgIHsKLSAgICAgIG5hbWUgPSBjcmVhdGVPcGVyYXRpb25OYW1lKG1lc3NSZWYsICJSZXNwb25zZSIpOyAgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlIGlmIChtZXNzUmVmIGluc3RhbmNlb2YgRmF1bHQpCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBTdHJpbmcgZmF1bHROYW1lID0gKChGYXVsdCkgbWVzc1JlZikuZ2V0TmFtZSgpOwotICAgICAgaWYgKGZhdWx0TmFtZSA9PSBudWxsIHx8IGZhdWx0TmFtZS5sZW5ndGgoKSA9PSAwKQotICAgICAgeyAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBmYXVsdE5hbWUgPSAiRmF1bHQiOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBuYW1lID0gY3JlYXRlT3BlcmF0aW9uTmFtZShtZXNzUmVmLCBmYXVsdE5hbWUpOyAKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICByZXR1cm4gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShkZWZpbml0aW9uLCBuYW1lKTsKLSAgfQotICAKLSAgCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkRmF1bHROYW1lcyhPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KSBpLm5leHQoKTsKLSAgICAgIG5hbWVzLmFkZChmYXVsdC5nZXROYW1lKCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0VXNlZE9wZXJhdGlvbk5hbWVzKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIGkubmV4dCgpOwotICAgICAgbmFtZXMuYWRkKG9wLmdldE5hbWUoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lczsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldFVzZWRQYXJ0TmFtZXMoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpLm5leHQoKTsKLSAgICAgIG5hbWVzLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkUG9ydFR5cGVOYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICBBcnJheUxpc3QgbmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBpLm5leHQoKTsKLSAgICAgIC8vIFRPRE86IHBvcnQgY2hlY2sKLSAgICAgIC8vCQkJaWYgKHBvcnRUeXBlLmlzU2V0UU5hbWUoKSkKLSAgICAgIGlmIChwb3J0VHlwZS5nZXRRTmFtZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG5hbWVzLmFkZChwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICAgIAotICB9Ci0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkU2VydmljZU5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIC8vIEZpcnN0IGJ1aWxkIGEgbGlzdCBvZiBuYW1lcyBhbHJlYWR5IHVzZWQKLSAgICBBcnJheUxpc3QgbmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGkubmV4dCgpOwotICAgICAgLy8gVE9ETzogcG9ydCBjaGVjawotICAgICAgLy8gCQlpZihzZXJ2aWNlLmlzU2V0UU5hbWUoKSkKLSAgICAgIGlmIChzZXJ2aWNlLmdldFFOYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgbmFtZXMuYWRkKHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lczsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldFVzZWRNZXNzYWdlTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbXNnID0gKE1lc3NhZ2UpIGkubmV4dCgpOwotICAgICAgLy8gVE9ETzogcG9ydCBjaGVjawotICAgICAgaWYgKG1zZy5nZXRRTmFtZSgpICE9IG51bGwpCi0gICAgICAgIC8vCQkJaWYobXNnLmlzU2V0UU5hbWUoKSkKLSAgICAgICAgbmFtZXMuYWRkKG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldFVzZWRCaW5kaW5nTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBpLm5leHQoKTsKLSAgICAgIC8vIFRPRE86IHBvcnQgY2hlY2sKLSAgICAgIC8vCQkJaWYgKGJpbmRpbmcuaXNTZXRRTmFtZSgpKQotICAgICAgaWYgKGJpbmRpbmcuZ2V0UU5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lcy5hZGQoYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldFVzZWRQb3J0TmFtZXMoU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgLy8gRmlyc3QgYnVpbGQgYSBsaXN0IG9mIG5hbWVzIGFscmVhZHkgdXNlZAotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgaS5uZXh0KCk7Ci0KLSAgICAgIGlmIChwb3J0LmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lcy5hZGQocG9ydC5nZXROYW1lKCkpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVPcGVyYXRpb25OYW1lKE9iamVjdCBvYmplY3QsIFN0cmluZyBzdWZmaXgpCi0gIHsgICAgICAgICAgICAgICAKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkKLSAgICB7Ci0gICAgICBFT2JqZWN0IHBhcmVudCA9ICgoRU9iamVjdClvYmplY3QpLmVDb250YWluZXIoKTsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9ICgoT3BlcmF0aW9uKXBhcmVudCkuZ2V0TmFtZSgpOwotICAgICAgfQotICAgIH0gCi0gICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCArPSBzdWZmaXg7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZU5hbWUoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7CSAgICAKLQlTdHJpbmcgbWVzc2FnZU5hbWUgPSAiTmV3TWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQlMaXN0IG1lc3NhZ2VOYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgbWVzc2FnZVJlZi5nZXRDb250YWluZXIoKTsKLQlJdGVyYXRvciBtZXNzYWdlSXQgPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0Jd2hpbGUgKG1lc3NhZ2VJdC5oYXNOZXh0KCkpIHsKLQkJbWVzc2FnZU5hbWVzLmFkZCgoKE1lc3NhZ2UpIG1lc3NhZ2VJdC5uZXh0KCkpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCX0KLQkKLS8vCVN0cmluZyByZXF1ZXN0UmVzcG9uc2VTdHJpbmcgPSBnZXRSZXF1ZXN0T3JSZXNwb25zZShtZXNzYWdlUmVmKSArICJNc2ciOyAvLyROT04tTkxTLTEkCi0JU3RyaW5nIHJlcXVlc3RSZXNwb25zZVN0cmluZyA9IGdldFJlcXVlc3RPclJlc3BvbnNlKG1lc3NhZ2VSZWYpOyAvLyROT04tTkxTLTEkCi0JbWVzc2FnZU5hbWUgPSBnZXRVbmlxdWVOYW1lSGVscGVyKG9wZXJhdGlvbi5nZXROYW1lKCkgKyByZXF1ZXN0UmVzcG9uc2VTdHJpbmcsIG1lc3NhZ2VOYW1lcyk7Ci0JCi0JcmV0dXJuIG1lc3NhZ2VOYW1lOwotfQotCi1wdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYXJ0TmFtZShNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYpIHsKLQlTdHJpbmcgcGFydE5hbWUgPSAiTmV3UGFydCI7IC8vJE5PTi1OTFMtMSQKLQlNZXNzYWdlIG1lc3NhZ2UgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCk7Ci0JCi0JT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG1lc3NhZ2VSZWYuZ2V0Q29udGFpbmVyKCk7Ci0JU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOwotCVN0cmluZyBhcHBlbmRTdHJpbmcgPSAiIjsgICAgCSAgIC8vJE5PTi1OTFMtMSQKLQlpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIElucHV0KSB7Ci0vLwkJYXBwZW5kU3RyaW5nID0gIlBhcmFtZXRlcnMiOyAvLyROT04tTkxTLTEkCi0JCWFwcGVuZFN0cmluZyA9ICJSZXF1ZXN0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQllbHNlIGlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgT3V0cHV0KSB7Ci0vLwkJYXBwZW5kU3RyaW5nID0gIlJlc3VsdCI7IC8vJE5PTi1OTFMtMSQKLQkJYXBwZW5kU3RyaW5nID0gIlJlc3BvbnNlIjsgLy8kTk9OLU5MUy0xJAotCX0KLQllbHNlIGlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgRmF1bHQpIHsKLS8vCQlhcHBlbmRTdHJpbmcgPSAiRmF1bHQiOyAvLyROT04tTkxTLTEkCi0JCWFwcGVuZFN0cmluZyA9ICJfRmF1bHQiOyAvLyROT04tTkxTLTEkCi0JfQotCXBhcnROYW1lID0gb3BlcmF0aW9uTmFtZSArIGFwcGVuZFN0cmluZzsKLQkKLQlMaXN0IHVzZWRQYXJ0TmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewotCQlwYXJ0TmFtZSA9IG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJSXRlcmF0b3IgcGFydEl0ID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAocGFydEl0Lmhhc05leHQoKSkgewotCQkJdXNlZFBhcnROYW1lcy5hZGQoKChQYXJ0KSBwYXJ0SXQubmV4dCgpKS5nZXROYW1lKCkpOwotCQl9Ci0JfQotCQotCXBhcnROYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcihwYXJ0TmFtZSwgdXNlZFBhcnROYW1lcyk7Ci0JCi0JcmV0dXJuIHBhcnROYW1lOwotfQotCi1wdWJsaWMgc3RhdGljIFN0cmluZyBnZXRPcGVyYXRpb25OYW1lKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0JU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSAiTmV3T3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCUl0ZXJhdG9yIG9wZXJhdGlvbkl0ID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotCUxpc3QgdXNlZE5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotCXdoaWxlIChvcGVyYXRpb25JdC5oYXNOZXh0KCkpIHsKLQkJdXNlZE5hbWVzLmFkZCgoKE9wZXJhdGlvbikgb3BlcmF0aW9uSXQubmV4dCgpKS5nZXROYW1lKCkpOwotCX0KLQkKLQlvcGVyYXRpb25OYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcigiTmV3T3BlcmF0aW9uIiwgdXNlZE5hbWVzKTsgLy8kTk9OLU5MUy0xJAotCQotCXJldHVybiBvcGVyYXRpb25OYW1lOwotfQotCi1wdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXF1ZXN0T3JSZXNwb25zZShNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYpIHsKLQlpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIElucHV0KQotCXsKLQkJcmV0dXJuICJSZXF1ZXN0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQllbHNlIGlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgT3V0cHV0KQotCXsKLQkJcmV0dXJuICJSZXNwb25zZSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEZhdWx0KQotCXsKLQkJcmV0dXJuICJfRmF1bHQiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotfQotCi1wdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGYXVsdE5hbWUoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotCVN0cmluZyBmYXVsdE5hbWUgPSAiZmF1bHQiOyAvLyROT04tTkxTLTEkCi0JTGlzdCBuYW1lTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQlJdGVyYXRvciBmYXVsdEl0ID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKS5pdGVyYXRvcigpOwotCXdoaWxlIChmYXVsdEl0Lmhhc05leHQoKSkgewotCQluYW1lTGlzdC5hZGQoKChGYXVsdCkgZmF1bHRJdC5uZXh0KCkpLmdldE5hbWUoKSk7Ci0JfQotCQotCWZhdWx0TmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIoZmF1bHROYW1lLCBuYW1lTGlzdCk7Ci0JCi0JcmV0dXJuIGZhdWx0TmFtZTsKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0WFNERWxlbWVudE5hbWUoU3RyaW5nIGJhc2VOYW1lLCBPYmplY3QgcGFyZW50KSB7Ci0JU3RyaW5nIGVsZW1lbnROYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkKLQlpZiAocGFyZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hKSB7Ci0JCWVsZW1lbnROYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgZ2V0VXNlZEVsZW1lbnROYW1lcygoWFNEU2NoZW1hKSBwYXJlbnQpKTsKLQl9Ci0JZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQlMaXN0IGV4aXN0aW5nTmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwKSBwYXJlbnQ7Ci0JCUl0ZXJhdG9yIG1vZGVsR3JvdXBJdCA9IG1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAobW9kZWxHcm91cEl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IGl0ZW0gPSBtb2RlbEdyb3VwSXQubmV4dCgpOwotCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotCQkJCVhTRFBhcnRpY2xlIGV4aXN0aW5nUGFydGljbGUgPSAoWFNEUGFydGljbGUpIGl0ZW07Ci0JCQkJaWYgKGV4aXN0aW5nUGFydGljbGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQkJCWV4aXN0aW5nTmFtZXMuYWRkKCgoWFNERWxlbWVudERlY2xhcmF0aW9uKSBleGlzdGluZ1BhcnRpY2xlLmdldENvbnRlbnQoKSkuZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCWVsZW1lbnROYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgZXhpc3RpbmdOYW1lcyk7CQkJCi0JfQotCQotCXJldHVybiBlbGVtZW50TmFtZTsKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0WFNEQ29tcGxleFR5cGVOYW1lKFN0cmluZyBiYXNlTmFtZSwgWFNEU2NoZW1hIHNjaGVtYSkgewotCVN0cmluZyB0eXBlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JTGlzdCBleGlzdGluZ05hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotCQotCUl0ZXJhdG9yIGl0ID0gc2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7Ci0Jd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQlPYmplY3QgaXRlbSA9IGl0Lm5leHQoKTsKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHsKLQkJCWV4aXN0aW5nTmFtZXMuYWRkKCgoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBpdGVtKS5nZXROYW1lKCkpOwotCQl9Ci0JfQotCQotCXR5cGVOYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgZXhpc3RpbmdOYW1lcyk7Ci0JcmV0dXJuIHR5cGVOYW1lOwotfQotCi1wcml2YXRlIHN0YXRpYyBMaXN0IGdldFVzZWRFbGVtZW50TmFtZXMoWFNEU2NoZW1hIHhzZFNjaGVtYSkgewotCUxpc3QgdXNlZE5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotCUl0ZXJhdG9yIHNjaGVtYUl0ID0geHNkU2NoZW1hLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsKLQl3aGlsZSAoc2NoZW1hSXQuaGFzTmV4dCgpKSB7Ci0JCU9iamVjdCBpdGVtID0gc2NoZW1hSXQubmV4dCgpOwotCQlpZiAoaXRlbSBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJdXNlZE5hbWVzLmFkZCgoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgaXRlbSkuZ2V0TmFtZSgpKTsKLQkJfQotCX0KLQkKLQlyZXR1cm4gdXNlZE5hbWVzOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL05vZGVBc3NvY2lhdGlvbk1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9Ob2RlQXNzb2NpYXRpb25NYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYzA1MTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL05vZGVBc3NvY2lhdGlvbk1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC54c2QuWFNETm9kZUFzc29jaWF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JTm9kZUFzc29jaWF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5XU0RMTm9kZUFzc29jaWF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZGFwdGVycy5DYXRlZ29yeUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIKLXsgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBJTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIgd3NkbFByb3ZpZGVyOwotICBwcm90ZWN0ZWQgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIHhzZFByb3ZpZGVyOwotCi0gIHB1YmxpYyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCkKLSAgeyAgICAgICAgICAgICAKLQkgIHdzZGxQcm92aWRlciA9IG5ldyBXU0RMTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIoKTsKLQkgIHhzZFByb3ZpZGVyID0gbmV3IFhTRE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyKCk7Ci0gIH0gICAgICAgIAotCi0gIHByb3RlY3RlZCBJTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIgZ2V0QXBwaWNhYmxlUHJvdmlkZXIoT2JqZWN0IG9iamVjdCkKLSAgewotCSAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHx8IAotCSAgICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50IHx8Ci0JICAgICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgQ2F0ZWdvcnlBZGFwdGVyKSB7Ly8gfHwKLS8vCSAgICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIENhdGVnb3J5KSB7Ci0JCSAgcmV0dXJuIHhzZFByb3ZpZGVyOwotCSAgfQotCSAgCi0JICByZXR1cm4gd3NkbFByb3ZpZGVyOwotICB9Ci0gICAgICAgIAotCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWxPYmplY3RGb3JOb2RlKE9iamVjdCByb290T2JqZWN0LCBFbGVtZW50IHRhcmdldE5vZGUpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGlmICh0YXJnZXROb2RlICE9IG51bGwgJiYgdGFyZ2V0Tm9kZS5nZXRQYXJlbnROb2RlKCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBUaGUgZWxlbWVudCB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIERPTSwgY29tbW9uIHNjZW5hcmlvIGR1cmluZyB1bmRvLgotICAgICAgLy8gVGhlIHBhcmVudCBlbGVtZW50J3MgcmVjb25jaWxpYXRpb24gd2lsbCB0YWtlIGNhcmUgb2YgcmVjb25jaWxpbmcgaXQuCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgaW50IGN1cnJlbnRJbmRleCA9IDA7Ci0KLSAgICBFbGVtZW50W10gZWxlbWVudENoYWluID0gZ2V0UGFyZW50RWxlbWVudENoYWluKChFbGVtZW50KXRhcmdldE5vZGUpOwotCi0gICAgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIHAgPSBnZXRBcHBpY2FibGVQcm92aWRlcihyb290T2JqZWN0KTsKLSAgICBpZiAocCAhPSBudWxsKQotICAgIHsKLSAgICAgIE5vZGUgcm9vdE9iamVjdE5vZGUgPSBwLmdldE5vZGUocm9vdE9iamVjdCk7Ci0KLSAgICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBlbGVtZW50Q2hhaW4ubGVuZ3RoKQotICAgICAgewotICAgICAgICBFbGVtZW50IGUgPSBlbGVtZW50Q2hhaW5bY3VycmVudEluZGV4XTsKLSAgICAgICAgaWYgKGUgPT0gcm9vdE9iamVjdE5vZGUpCi0gICAgICAgIHsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgY3VycmVudEluZGV4Kys7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudEluZGV4Kys7Ci0gICAgICB9Ci0gICAgfQotICAgICAgICAgICAgIAotICAgIE9iamVjdCBjdXJyZW50T2JqZWN0ID0gcm9vdE9iamVjdDsgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpbnQgZW5kW10gPSBuZXcgaW50WzFdOwotCi0gICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IGVsZW1lbnRDaGFpbi5sZW5ndGgpCi0gICAgeyAgICAgICAgICAgICAgIAotICAgICAgcCA9IGdldEFwcGljYWJsZVByb3ZpZGVyKGN1cnJlbnRPYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgaWYgKHAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZW5kWzBdID0gZWxlbWVudENoYWluLmxlbmd0aDsKLSAgICAgICAgY3VycmVudE9iamVjdCA9IHAuZ2V0TW9kZWxPYmplY3QoY3VycmVudE9iamVjdCwgZWxlbWVudENoYWluLCBjdXJyZW50SW5kZXgsIGVuZCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY3VycmVudE9iamVjdCA9PSBudWxsKQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgIC8vIGZhaWx1cmUKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBjdXJyZW50SW5kZXggPSBNYXRoLm1heChlbmRbMF0sIGN1cnJlbnRJbmRleCArIDEpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7ICAgICAgICAgIAotICAgICAgICBicmVhazsKLSAgICAgIH0gCi0gICAgfSAgICAgCi0KLSAgICByZXR1cm4gKGN1cnJlbnRJbmRleCA9PSBlbGVtZW50Q2hhaW4ubGVuZ3RoKSA/IGN1cnJlbnRPYmplY3QgOiBudWxsOwotICB9ICAKLSAgICAgICAgICAgCi0KLSAgcHVibGljIE5vZGUgZ2V0Tm9kZShPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsgICAgICAgICAgCi0gICAgTm9kZSByZXN1bHQgPSBudWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgTm9kZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoTm9kZSltb2RlbE9iamVjdDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlciBwID0gZ2V0QXBwaWNhYmxlUHJvdmlkZXIobW9kZWxPYmplY3QpOyAgICAgICAgICAgICAgIAotICAgICAgaWYgKHAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gcC5nZXROb2RlKG1vZGVsT2JqZWN0KTsKLSAgICAgIH0KLSAgICB9ICAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gICAgIAotCi0gIHByb3RlY3RlZCBFbGVtZW50W10gZ2V0UGFyZW50RWxlbWVudENoYWluKEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICB3aGlsZSAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpc3QuYWRkKDAsIGVsZW1lbnQpOwotICAgICAgTm9kZSBub2RlID0gZWxlbWVudC5nZXRQYXJlbnROb2RlKCk7Ci0gICAgICBlbGVtZW50ID0gKG5vZGUgIT0gbnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpID8gKEVsZW1lbnQpbm9kZSA6IG51bGw7ICAgIAotICAgIH0gICAgICAgICAgICAgICAgCi0KLSAgICBpbnQgbGlzdFNpemUgPSBsaXN0LnNpemUoKTsKLSAgICBFbGVtZW50W10gcmVzdWx0ID0gbmV3IEVsZW1lbnRbbGlzdFNpemVdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdFNpemU7IGkrKykKLSAgICB7Ci0gICAgICByZXN1bHRbaV0gPSAoRWxlbWVudClsaXN0LmdldChpKTsKLSAgICB9ICAgICAgICAgICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvT3Blbk9uU2VsZWN0aW9uSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvT3Blbk9uU2VsZWN0aW9uSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOGRkN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL09wZW5PblNlbGVjdGlvbkhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExTd2l0Y2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkFEVFJlYWRPbmx5RmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RIeXBlcmxpbmtUYXJnZXRMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFja2FnZTsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgT3Blbk9uU2VsZWN0aW9uSGVscGVyIGV4dGVuZHMgV1NETFN3aXRjaAotewotICBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIEF0dHIgYXR0ciA9IG51bGw7Ci0gIEVsZW1lbnQgZWxlbWVudCA9IG51bGw7Ci0KLSAgcHVibGljIE9wZW5PblNlbGVjdGlvbkhlbHBlcihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgb3BlbkVkaXRvcihFT2JqZWN0IGVPYmplY3QpCi0gIHsKLSAgICBTdHJpbmdbXSBhcnJheSA9IGNvbXB1dGVTcGVjaWZpY2F0aW9uKGVPYmplY3QpOwotICAgIGlmIChhcnJheSAhPSBudWxsKQotICAgIHsKLSAgICAgIG9wZW5FZGl0b3IoYXJyYXlbMF0sIGFycmF5WzFdKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBvcGVuRWRpdG9yKE5vZGUgbm9kZSkKLSAgewotICAgIFN0cmluZ1tdIGFycmF5ID0gY29tcHV0ZVNwZWNpZmljYXRpb24obm9kZSk7Ci0gICAgaWYgKGFycmF5ICE9IG51bGwpCi0gICAgewotICAgICAgb3BlbkVkaXRvcihhcnJheVswXSwgYXJyYXlbMV0pOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIG9wZW5FZGl0b3IoU3RyaW5nIHJlc291cmNlLCBTdHJpbmcgc3BlYykKLSAgewotICAgIFN0cmluZyBwYXR0ZXJuID0gInBsYXRmb3JtOi9yZXNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLSAgICBJV29ya2JlbmNoUGFnZSB3b3JrYmVuY2hQYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoUGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICBTdHJpbmcgY3VycmVudEVkaXRvcklkID0gZWRpdG9yUGFydC5nZXRFZGl0b3JTaXRlKCkuZ2V0SWQoKTsKLSAgICAKLSAgICBpZiAocmVzb3VyY2UgIT0gbnVsbCAmJiByZXNvdXJjZS5zdGFydHNXaXRoKHBhdHRlcm4pKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQYXRoIHBhdGggPSBuZXcgUGF0aChyZXNvdXJjZS5zdWJzdHJpbmcocGF0dGVybi5sZW5ndGgoKSkpOwotICAgICAgICBJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCi0gICAgICAgIAotICAgICAgICBpZiAoZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpIGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJgotICAgICAgICAgICAoKElGaWxlRWRpdG9ySW5wdXQpZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpKS5nZXRGaWxlKCkuZXF1YWxzKGZpbGUpKQotICAgICAgICB7ICAKLSAgICAgICAgCXdvcmtiZW5jaFBhZ2UuZ2V0TmF2aWdhdGlvbkhpc3RvcnkoKS5tYXJrTG9jYXRpb24oZWRpdG9yUGFydCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogVXNlIGNvbnRlbnQgdHlwZSBhcyBiZWxvdwotICAgICAgICAgICAgaWYgKHJlc291cmNlLmVuZHNXaXRoKCJ4c2QiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoUGFnZS5vcGVuRWRpdG9yKG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSksIFdTRExFZGl0b3JQbHVnaW4uWFNEX0VESVRPUl9JRCk7IAotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgYWxyZWFkeSBpbiB0aGUgd3NkbGVkaXRvcgotCQkJICAgICAgICBlZGl0b3JQYXJ0ID0gIHdvcmtiZW5jaFBhZ2Uub3BlbkVkaXRvcihuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpLCBlZGl0b3JQYXJ0LmdldEVkaXRvclNpdGUoKS5nZXRJZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0JCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBpbml0RXgpCi0gCQkJCQl7Ci0gCQkJCQl9Ci0gICAgICAgIH0KLQotICAgICAgICBDbGFzcyB0aGVDbGFzcyA9IGVkaXRvclBhcnQuZ2V0Q2xhc3MoKTsKLSAgICAgICAgQ2xhc3NbXSBtZXRob2RBcmdzID0geyBTdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgTWV0aG9kIG1ldGhvZCA9IHRoZUNsYXNzLmdldE1ldGhvZCgib3Blbk9uU2VsZWN0aW9uIiwgbWV0aG9kQXJncyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgT2JqZWN0IGFyZ3NbXSA9IHsgc3BlYyB9OwotICAgICAgICBtZXRob2QuaW52b2tlKGVkaXRvclBhcnQsIGFyZ3MpOwotICAgICAgICB3b3JrYmVuY2hQYWdlLmdldE5hdmlnYXRpb25IaXN0b3J5KCkubWFya0xvY2F0aW9uKGVkaXRvclBhcnQpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChyZXNvdXJjZSAhPSBudWxsICYmIHJlc291cmNlLnN0YXJ0c1dpdGgoImh0dHAiKSkKLSAgICB7Ci0gICAgICBJRWRpdG9yUGFydCBuZXdFZGl0b3JQYXJ0ID0gbnVsbDsKLSAgICAgIGJvb2xlYW4gZG9PcGVuV3NkbEVkaXRvciA9IHRydWU7Ci0gICAgICBpZiAocmVzb3VyY2UuZW5kc1dpdGgoInhzZCIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGRvT3BlbldzZGxFZGl0b3IgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJRWRpdG9yUmVmZXJlbmNlW10gcmVmcyA9IHdvcmtiZW5jaFBhZ2UuZ2V0RWRpdG9yUmVmZXJlbmNlcygpOwotICAgICAgICBpbnQgbGVuZ3RoID0gcmVmcy5sZW5ndGg7Ci0gICAgICAgIC8vIE5lZWQgdG8gZmluZCBpZiBhbiBlZGl0b3Igb24gdGhhdCBzY2hlbWEgaGFzIGFscmVhZHkgYmVlbiBvcGVuZWQKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IHJlZnNbaV0uZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBBRFRSZWFkT25seUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBBRFRSZWFkT25seUZpbGVFZGl0b3JJbnB1dCByZWFkT25seUVkaXRvcklucHV0ID0gKEFEVFJlYWRPbmx5RmlsZUVkaXRvcklucHV0KSBpbnB1dDsKLSAgICAgICAgICAgIGlmIChyZWFkT25seUVkaXRvcklucHV0LmdldFVybFN0cmluZygpLmVxdWFscyhyZXNvdXJjZSkgJiYgCi0gICAgICAgICAgICAgICAgKCFkb09wZW5Xc2RsRWRpdG9yICYmIHJlYWRPbmx5RWRpdG9ySW5wdXQuZ2V0RWRpdG9ySUQoKS5lcXVhbHMoV1NETEVkaXRvclBsdWdpbi5YU0RfRURJVE9SX0lEKQotICAgICAgICAgICAgICAgIHx8IChkb09wZW5Xc2RsRWRpdG9yICYmIHJlYWRPbmx5RWRpdG9ySW5wdXQuZ2V0RWRpdG9ySUQoKS5lcXVhbHMoV1NETEVkaXRvclBsdWdpbi5XU0RMX0VESVRPUl9JRCkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmV3RWRpdG9yUGFydCA9IHJlZnNbaV0uZ2V0RWRpdG9yKHRydWUpOwotICAgICAgICAgICAgICB3b3JrYmVuY2hQYWdlLmFjdGl2YXRlKHJlZnNbaV0uZ2V0UGFydCh0cnVlKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobmV3RWRpdG9yUGFydCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQURUUmVhZE9ubHlGaWxlRWRpdG9ySW5wdXQgcmVhZE9ubHlTdG9yYWdlRWRpdG9ySW5wdXQgPSBuZXcgQURUUmVhZE9ubHlGaWxlRWRpdG9ySW5wdXQocmVzb3VyY2UpOwotICAgICAgICAgIElDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IG51bGw7Ci0gICAgICAgICAgSW5wdXRTdHJlYW0gaVN0cmVhbSA9IG51bGw7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaVN0cmVhbSA9IHJlYWRPbmx5U3RvcmFnZUVkaXRvcklucHV0LmdldFN0b3JhZ2UoKS5nZXRDb250ZW50cygpOwotICAgICAgICAgICAgY29udGVudFR5cGUgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVGb3IoaVN0cmVhbSwgcmVzb3VyY2UpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjb3JlRXhjZXB0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBjb250ZW50IHR5cGUgbW9yZSByZWxpYWJsZSBjaGVjawotICAgICAgICAgIGlmIChjb250ZW50VHlwZSAhPSBudWxsICYmIGNvbnRlbnRUeXBlLmVxdWFscyhYU0RFZGl0b3JQbHVnaW4uWFNEX0NPTlRFTlRfVFlQRV9JRCkgfHwgcmVzb3VyY2UuZW5kc1dpdGgoInhzZCIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVhZE9ubHlTdG9yYWdlRWRpdG9ySW5wdXQuc2V0RWRpdG9ySUQoV1NETEVkaXRvclBsdWdpbi5YU0RfRURJVE9SX0lEKTsKLSAgICAgICAgICAgIHdvcmtiZW5jaFBhZ2Uub3BlbkVkaXRvcihyZWFkT25seVN0b3JhZ2VFZGl0b3JJbnB1dCwgV1NETEVkaXRvclBsdWdpbi5YU0RfRURJVE9SX0lELCB0cnVlLCAwKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVhZE9ubHlTdG9yYWdlRWRpdG9ySW5wdXQuc2V0RWRpdG9ySUQoY3VycmVudEVkaXRvcklkKTsKLSAgICAgICAgICAgIHdvcmtiZW5jaFBhZ2Uub3BlbkVkaXRvcihyZWFkT25seVN0b3JhZ2VFZGl0b3JJbnB1dCwgY3VycmVudEVkaXRvcklkLCB0cnVlLCAwKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIHBpZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGNvbXB1dGVTcGVjaWZpY2F0aW9uKEVPYmplY3QgZU9iamVjdCkKLSAgewotICAgIFN0cmluZ1tdIHJlc3VsdCA9IG51bGw7Ci0gICAgT2JqZWN0IHJlZmVyZW5jZWRPYmplY3QgPSBkb1N3aXRjaChlT2JqZWN0KTsKLSAgICBpZiAocmVmZXJlbmNlZE9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgewotICAgICAgRU9iamVjdCByZWZlcmVuY2VkRU9iamVjdCA9IChFT2JqZWN0KXJlZmVyZW5jZWRPYmplY3Q7Ci0gICAgICBpZiAocmVmZXJlbmNlZEVPYmplY3QgIT0gZU9iamVjdCB8fCAKLSAgICAgICAgIHJlZmVyZW5jZWRFT2JqZWN0LmVSZXNvdXJjZSgpICE9IGRlZmluaXRpb24uZVJlc291cmNlKCkpCi0gICAgICB7ICAgICAgICAKLSAgICAgIAotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZWZlcmVuY2VkRU9iamVjdC5lUmVzb3VyY2UoKTsKLSAgICAgIGlmIChyZXNvdXJjZSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgICByZXN1bHRbMF0gPSByZXNvdXJjZS5nZXRVUkkoKS50b1N0cmluZygpOwotICAgICAgICByZXN1bHRbMV0gPSByZXNvdXJjZS5nZXRVUklGcmFnbWVudChyZWZlcmVuY2VkRU9iamVjdCk7Ci0gICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gY29tcHV0ZVNwZWNpZmljYXRpb24oTm9kZSBub2RlKQotICB7Ci0gICAgU3RyaW5nW10gcmVzdWx0ID0gbnVsbDsKLSAgICBzd2l0Y2ggKG5vZGUuZ2V0Tm9kZVR5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFIDoKLSAgICAgICAgewotICAgICAgICAgIGVsZW1lbnQgPSAoRWxlbWVudClub2RlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNlIE5vZGUuQVRUUklCVVRFX05PREUgOgotICAgICAgICB7Ci0gICAgICAgICAgYXR0ciA9IChBdHRyKW5vZGU7Ci0gICAgICAgICAgZWxlbWVudCA9IGF0dHIuZ2V0T3duZXJFbGVtZW50KCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgTm9kZS5URVhUX05PREUgOgotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBwYXJlbnQgPSBub2RlLmdldFBhcmVudE5vZGUoKTsKLSAgICAgICAgICBlbGVtZW50ID0gKHBhcmVudCBpbnN0YW5jZW9mIEVsZW1lbnQpID8gKEVsZW1lbnQpcGFyZW50IDogbnVsbDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoZGVmaW5pdGlvbiwgZWxlbWVudCk7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gY29tcHV0ZVNwZWNpZmljYXRpb24oKEVPYmplY3Qpb2JqZWN0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZUJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IGJpbmRpbmc7Ci0gICAgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gYmluZGluZy5nZXRFUG9ydFR5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZURlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBwYXJ0OwotICAgIGlmIChhdHRyICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpID09IGRlZmluaXRpb24pCi0gICAgewotICAgICAgcmVzdWx0ID0gcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwgPyAoT2JqZWN0KXBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSA6IChPYmplY3QpcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZVBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IHBvcnQ7Ci0gICAgaWYgKGlzTWF0Y2hpbmdBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5CSU5ESU5HX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gcG9ydC5nZXRFQmluZGluZygpOwotCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBmYXVsdDsKLSAgICBpZiAoaXNNYXRjaGluZ0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBmYXVsdC5nZXRNZXNzYWdlKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBpbnB1dDsKLSAgICBpZiAoaXNNYXRjaGluZ0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBpbnB1dC5nZXRNZXNzYWdlKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSBvdXRwdXQ7Ci0KLSAgICBpZiAoaXNNYXRjaGluZ0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0TWVzc2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlSW1wb3J0KEltcG9ydCB0aGVJbXBvcnQpCi0gIHsKLQkJT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0JCQotCQkvLyBGb3Igbm93LCBsb29rIGF0IHRoZSBmaWxlIGV4dGVuc2lvbi4gIFdoZW4gYnVnemlsbGEgMTE4MjkzIGlzIGZpeGVkLCBsb29rIGF0Ci0JCS8vIHRoZSBJbXBvcnQncyBlRGVmaW5pdGlvbiBhbmQgZVNjaGVtYSBpbnN0ZWFkLgotCQlQYXRoIGltcG9ydFBhdGggPSBuZXcgUGF0aCh0aGVJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSk7Ci0JCVN0cmluZyBleHRlbnNpb24gPSBpbXBvcnRQYXRoLmdldEZpbGVFeHRlbnNpb24oKTsKLQkJaWYgKGV4dGVuc2lvbi5lcXVhbHNJZ25vcmVDYXNlKCJ4c2QiKSkgeyAvLyROT04tTkxTLTEkCi0JCQlpZiAodGhlSW1wb3J0LmdldEVTY2hlbWEoKSA9PSBudWxsKSB7Ci0JCQkJKChJbXBvcnRJbXBsKXRoZUltcG9ydCkuaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7Ci0JCQl9Ci0JCQkKLQkJCXJlc3VsdCA9IHRoZUltcG9ydC5nZXRFU2NoZW1hKCk7Ci0JCX0KLQkJZWxzZSBpZiAoZXh0ZW5zaW9uLmVxdWFsc0lnbm9yZUNhc2UoIndzZGwiKSB8fCBleHRlbnNpb24uZW5kc1dpdGgoIndzZGwiKSkgeyAvLyROT04tTkxTLTEkCi0JCQlpZiAodGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCkgPT0gbnVsbCkgewotCQkJCSgoSW1wb3J0SW1wbCl0aGVJbXBvcnQpLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotCQkJfQotCQkJCi0JCQlyZXN1bHQgPSB0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLQkJfQotCQkKLQkJCi0vLwkJaWYgKHRoZUltcG9ydC5nZXRFU2NoZW1hKCkgIT0gbnVsbCkgewotLy8JCQlyZXN1bHQgPSB0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpOwotLy8JCX0KLS8vCQllbHNlIGlmICh0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0vLwkJCXJlc3VsdCA9IHRoZUltcG9ydC5nZXRFRGVmaW5pdGlvbigpOwotLy8JCX0KLS8vCQllbHNlIHsKLS8vCSAgICAgICAgLy8gTmVlZCB0byByZXNvbHZlIGltcG9ydHMgYmVjYXVzZSB0aGUgbW9kZWwgZG9lc24ndCBhdXRvbWF0aWNhbGx5Ci0vLwkgICAgICAgIC8vIGRvIGl0IGZvciB1cwotLy8JICAgICAgICAoKEltcG9ydEltcGwpdGhlSW1wb3J0KS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsKLS8vCSAgICAgICAgcmVzdWx0ID0gdGhlSW1wb3J0LmdldEVTY2hlbWEoKTsKLS8vCSAgICB9Ci0JCQotCQlyZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlV1NETEVsZW1lbnQoV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gd3NkbEVsZW1lbnQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNNYXRjaGluZ0F0dHJpYnV0ZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICByZXR1cm4gYXR0ciAhPSBudWxsICYmIHZhbHVlLmVxdWFscyhhdHRyLmdldE5hbWUoKSk7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgRUNsYXNzIHRoZUVDbGFzcyA9IG9iamVjdC5lQ2xhc3MoKTsKLSAgICAKLSAgICBpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBYU0RQYWNrYWdlLmVJTlNUQU5DRSkKLSAgICB7Ci0gICAgICAvLyBIYW5kbGUgbmF2aWdhdGlvbiBiZXR3ZWVuIGlubGluZSBzY2hlbWEgY29tcG9uZW50cy4KLSAgICAgIAotICAgICAgWFNESHlwZXJsaW5rVGFyZ2V0TG9jYXRvciB4c2RIeXBlcmxpbmtUYXJnZXRMb2NhdG9yID0gbmV3IFhTREh5cGVybGlua1RhcmdldExvY2F0b3IoKTsKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gYXR0ciAhPSBudWxsID8gYXR0ci5nZXROYW1lKCk6IG51bGw7Ci0gICAgICByZXR1cm4geHNkSHlwZXJsaW5rVGFyZ2V0TG9jYXRvci5sb2NhdGUoKFhTRENvbmNyZXRlQ29tcG9uZW50KSBvYmplY3QsIGF0dHJpYnV0ZU5hbWUpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3VwZXIuZGVmYXVsdENhc2Uob2JqZWN0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1JlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMxMjBjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LlcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyIHsKLQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0QmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKElBU0RPYmplY3QgYXNkT2JqZWN0KSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuICAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeyAKLSAgICAgICAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgJiYgYXNkT2JqZWN0IGluc3RhbmNlb2YgVzExRW5kUG9pbnQpIHsKLSAgICAgICAgICAgICAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KSAoKFcxMUVuZFBvaW50KSBhc2RPYmplY3QpLmdldFRhcmdldCgpOyAKLSAgICAgICAgICAgICAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChlbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbiwgKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcihJQVNET2JqZWN0IGFzZE9iamVjdCkgewotICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmIGFzZE9iamVjdCBpbnN0YW5jZW9mIFcxMUJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KSAoKFcxMUJpbmRpbmcpIGFzZE9iamVjdCApLmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFcxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKChXMTFEZXNjcmlwdGlvbikgZGVzY3JpcHRpb24sICgoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0TWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKElBU0RPYmplY3QgYXNkT2JqZWN0KSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGlucHV0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJiBhc2RPYmplY3QgaW5zdGFuY2VvZiBXMTFNZXNzYWdlUmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBhc2RPYmplY3QpLmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGRlc2NyaXB0aW9uLCAoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoSUFTRE9iamVjdCBhc2RPYmplY3QpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmIGFzZE9iamVjdCBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLSAgICAgICAgICAgICAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIGFzZE9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoZWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCksIG51bGwsIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoSUFTRE9iamVjdCBhc2RPYmplY3QpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmIGFzZE9iamVjdCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgYXNkT2JqZWN0IGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0gICAgICAgICAgICAgICAgV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgKChXU0RMQmFzZUFkYXB0ZXIpIGFzZE9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoZWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcigoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCksIG51bGwsIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9TZXJ2aWNlUG9saWN5SGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvU2VydmljZVBvbGljeUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTYxNGVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9TZXJ2aWNlUG9saWN5SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSU1lc3NhZ2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JUG9saWN5U3RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklQb2xpY3lTdGF0ZUVudW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci0KLS8qKgotICogQ29udGFpbnMgaGVscGVyIG1ldGhvZHMgZGVhbGluZyB3aXRoIHNlcnZpY2UgcG9saWNpZXMKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VQb2xpY3lIZWxwZXIKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYWN0aXZlIHBvbGljeSB3aXRoIGFuIGFzc29jaWF0ZWQgZGVmYXVsdCBwcm90b2NvbAotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybiBJU2VydmljZVBvbGljeSBpZiB0aGVyZSBpcyBvbmUsIG90aGVyd2lzZSBudWxsCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElTZXJ2aWNlUG9saWN5IGdldEFjdGl2ZVBvbGljeVdpdGhQcm90b2NvbChJUHJvamVjdCBwcm9qZWN0KQotICB7Ci0gICAgSVNlcnZpY2VQb2xpY3kgdGhlUG9saWN5ID0gbnVsbDsKLQotICAgIElTZXJ2aWNlUG9saWN5W10gcG9saWNpZXMgPSBnZXRBY3RpdmVTZXJ2aWNlUG9saWNpZXMocHJvamVjdCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb2xpY2llcy5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBJU2VydmljZVBvbGljeSBwb2xpY3kgPSBwb2xpY2llc1tpXTsKLSAgICAgIC8vIGdldCB0aGUgZGVmYXVsdCBwcm90b2NvbCBmcm9tIHRoZSBwb2xpY3kKLSAgICAgIElQb2xpY3lTdGF0ZSBwb2xpY3lTdGF0ZSA9IHBvbGljeS5nZXRQb2xpY3lTdGF0ZShwcm9qZWN0KTsKLSAgICAgIGlmIChwb2xpY3lTdGF0ZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgZGVmYXVsdEJpbmRpbmcgPSBwb2xpY3lTdGF0ZS5nZXRWYWx1ZShXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2wpOwotICAgICAgICBpZiAoKGRlZmF1bHRCaW5kaW5nICE9IG51bGwpICYmIChkZWZhdWx0QmluZGluZy5sZW5ndGgoKSA+IDApKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gcG9saWN5IHdpbGwgYmUgbGFzdCBvbmUgYWN0aXZlCi0gICAgICAgICAgdGhlUG9saWN5ID0gcG9saWN5OwotICAgICAgICAgIElQb2xpY3lTdGF0ZUVudW0gcG9saWN5U3RhdGVFbnVtID0gcG9saWN5LmdldFBvbGljeVN0YXRlRW51bShwcm9qZWN0KTsKLSAgICAgICAgICBTdHJpbmcgZW51bUlkID0gcG9saWN5U3RhdGVFbnVtLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLSAgICAgICAgICAvLyBpZiBmb3VuZCBhIHJlcXVpcmVkIHBvbGljeSwgc3RvcCBhbmQgcmV0dXJuIGl0Ci0gICAgICAgICAgaWYgKFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5zdGF0ZUVudW1SZXF1aXJlLmVxdWFscyhlbnVtSWQpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRoZVBvbGljeTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGRlZmF1bHQgYmluZGluZyBiYXNlZCBvbiB0aGUgcHJvamVjdAotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybiBTdHJpbmcgYmluZGluZyBpZCAobmFtZXNwYWNlKQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEJpbmRpbmcoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIFN0cmluZyBkZWZhdWx0QmluZGluZyA9IG51bGw7Ci0gICAgSVNlcnZpY2VQb2xpY3kgcG9saWN5ID0gZ2V0QWN0aXZlUG9saWN5V2l0aFByb3RvY29sKHByb2plY3QpOwotICAgIGlmIChwb2xpY3kgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWZhdWx0QmluZGluZyA9IHBvbGljeS5nZXRQb2xpY3lTdGF0ZShwcm9qZWN0KS5nZXRWYWx1ZShXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2wpOwotICAgIH0KLQotICAgIC8vIHN0aWxsIHVuYWJsZSB0byBnZXQgZGVmYXVsdCBiaW5kaW5nIHNvIGp1c3QgaGFyZGNvZGUgYSB2YWx1ZQotICAgIGlmIChkZWZhdWx0QmluZGluZyA9PSBudWxsKQotICAgICAgZGVmYXVsdEJpbmRpbmcgPSBnZXREZWZhdWx0RGVmYXVsdEJpbmRpbmcoKTsKLQotICAgIHJldHVybiBkZWZhdWx0QmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGRlZmF1bHQgYmluZGluZyBiYXNlZCBvbiBwcm9qZWN0IGFuZCBzZXJ2aWNlIHBvbGljeQotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHBhcmFtIHBvbGljeQotICAgKiBAcmV0dXJuIFN0cmluZyBiaW5kaW5nIGlkIChuYW1lc3BhY2UpCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0QmluZGluZyhJUHJvamVjdCBwcm9qZWN0LCBJU2VydmljZVBvbGljeSBwb2xpY3kpCi0gIHsKLSAgICBTdHJpbmcgZGVmYXVsdEJpbmRpbmcgPSBudWxsOwotICAgIGlmIChwb2xpY3kgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWZhdWx0QmluZGluZyA9IHBvbGljeS5nZXRQb2xpY3lTdGF0ZShwcm9qZWN0KS5nZXRWYWx1ZShXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2wpOwotICAgIH0KLQotICAgIC8vIHN0aWxsIHVuYWJsZSB0byBnZXQgZGVmYXVsdCBiaW5kaW5nIHNvIGp1c3QgaGFyZGNvZGUgYSB2YWx1ZQotICAgIGlmIChkZWZhdWx0QmluZGluZyA9PSBudWxsKQotICAgICAgZGVmYXVsdEJpbmRpbmcgPSBnZXREZWZhdWx0RGVmYXVsdEJpbmRpbmcoKTsKLQotICAgIHJldHVybiBkZWZhdWx0QmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIHNldmVyaXR5IHRvIGJlIHVzZWQgd2hlbiB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCB0aGUgY3VycmVudCBwb2xpY3kKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0Ci0gICAqIEBwYXJhbSBwb2xpY3kKLSAgICogQHJldHVybiBpbnQgKElNZXNzYWdlUHJvdmlkZXIuTk9ORSwgSU1lc3NhZ2VQcm92aWRlci5FUlJPUiwKLSAgICogICAgICAgICBJTWVzc2FnZVByb3ZpZGVyLldBUk5JTkcpCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRNZXNzYWdlU2V2ZXJpdHkoSVByb2plY3QgcHJvamVjdCwgSVNlcnZpY2VQb2xpY3kgcG9saWN5KQotICB7Ci0gICAgaW50IG1lc3NhZ2VTZXZlcml0eSA9IElNZXNzYWdlUHJvdmlkZXIuTk9ORTsKLQotICAgIGlmIChwb2xpY3kgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJUG9saWN5U3RhdGVFbnVtIHBvbGljeVN0YXRlRW51bSA9IHBvbGljeS5nZXRQb2xpY3lTdGF0ZUVudW0ocHJvamVjdCk7Ci0gICAgICBTdHJpbmcgZW51bUlkID0gcG9saWN5U3RhdGVFbnVtLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLQotICAgICAgaWYgKFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5zdGF0ZUVudW1SZXF1aXJlLmVxdWFscyhlbnVtSWQpKQotICAgICAgICBtZXNzYWdlU2V2ZXJpdHkgPSBJTWVzc2FnZVByb3ZpZGVyLkVSUk9SOwotICAgICAgZWxzZSBpZiAoV1NJU2VydmljZVBvbGljaWVzQ29uc3RhbnRzLnN0YXRlRW51bVN1Z2dlc3QuZXF1YWxzKGVudW1JZCkpCi0gICAgICAgIG1lc3NhZ2VTZXZlcml0eSA9IElNZXNzYWdlUHJvdmlkZXIuV0FSTklORzsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWVzc2FnZVNldmVyaXR5OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZGVmYXVsdCBiaW5kaW5nCi0gICAqIAotICAgKiBAcmV0dXJuIFN0cmluZyBiaW5kaW5nIGlkIChuYW1lc3BhY2UpCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdERlZmF1bHRCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBXU0lTZXJ2aWNlUG9saWNpZXNDb25zdGFudHMuc3RhdGVLZXlEZWZhdWx0UHJvdG9jb2xfVkFMVUVfU09BUDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYWN0aXZlIHNlcnZpY2UgcG9saWNpZXMgYmFzZWQgb24gcHJvamVjdAotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybiBJU2VydmljZVBvbGljeVtdCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBJU2VydmljZVBvbGljeVtdIGdldEFjdGl2ZVNlcnZpY2VQb2xpY2llcyhJUHJvamVjdCBwcm9qZWN0KQotICB7Ci0gICAgTGlzdCBzZXJ2aWNlUG9saWNpZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgLy8gRGV0ZXJtaW5lIGRlZmF1bHQgYmluZGluZyB0byB1c2UgYmFzZWQgb24gcHJvamVjdCdzIHdzaSBjb21wbGlhbmNlCi0gICAgLy8gcHJlZmVyZW5jZQotICAgIElTZXJ2aWNlUG9saWN5IHJvb3RQb2xpY3kgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2aWNlUG9saWN5KFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfV1NJUHJvZmlsZVJvb3QpOwotICAgIGlmIChyb290UG9saWN5ICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCB3c2lQb2xpY2llcyA9IHJvb3RQb2xpY3kuZ2V0Q2hpbGRyZW4oKTsKLSAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB3c2kgcG9saWNpZXMgYW5kIGRldGVybWluZSB3aGljaCBvbmVzIGFyZSBhcHBsaWNhYmxlCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzaVBvbGljaWVzLnNpemUoKTsgKytpKQotICAgICAgewotICAgICAgICBJU2VydmljZVBvbGljeSBwb2xpY3kgPSAoSVNlcnZpY2VQb2xpY3kpIHdzaVBvbGljaWVzLmdldChpKTsKLSAgICAgICAgSVBvbGljeVN0YXRlRW51bSBwb2xpY3lTdGF0ZUVudW0gPSBwb2xpY3kuZ2V0UG9saWN5U3RhdGVFbnVtKHByb2plY3QpOwotICAgICAgICBTdHJpbmcgZW51bUlkID0gcG9saWN5U3RhdGVFbnVtLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLSAgICAgICAgLy8gZm91bmQgYW4gZW5hYmxlZCBwb2xpY3kKLSAgICAgICAgaWYgKFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5zdGF0ZUVudW1SZXF1aXJlLmVxdWFscyhlbnVtSWQpIHx8IFdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5zdGF0ZUVudW1TdWdnZXN0LmVxdWFscyhlbnVtSWQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gc3BlY2lhbCBjaGVjayBmb3IgQVAgMS4wIHBvbGljeSAoaXQgZG9lc250IHJlYWxseSBjb3VudCwgc28gZG9udAotICAgICAgICAgIC8vIGFkZCBpdCkKLSAgICAgICAgICBpZiAoIVdTSVNlcnZpY2VQb2xpY2llc0NvbnN0YW50cy5TZXJ2aWNlUG9saWN5SURfQVAxMC5lcXVhbHMocG9saWN5LmdldElkKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNlcnZpY2VQb2xpY2llcy5hZGQocG9saWN5KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChJU2VydmljZVBvbGljeVtdKSBzZXJ2aWNlUG9saWNpZXMudG9BcnJheShuZXcgSVNlcnZpY2VQb2xpY3lbc2VydmljZVBvbGljaWVzLnNpemUoKV0pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVmFsaWRhdGVIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9WYWxpZGF0ZUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTgyNTk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9WYWxpZGF0ZUhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlSGVscGVyCi17Ci0gIC8vIFhNTCBMYW5nIGNhbiBoYXZlIG1hbnkgZGlmZmVyZW50IHZhbGlkIGZvcm1hdHMKLSAgLy8gMSkgeHggICAgICBpZS4gZW4sIGZyLCBkZQotICAvLyAyKSB4eC14eCAgIGllLiBlbi1VUywgZW4tRlIKLSAgLy8gMykgSS14eCAgICBpZS4gSS1lbgotICAvLyA0KSBYLXh4ICAgIGllLiBYLWVuCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNoZWNrWE1MTGFuZyhTdHJpbmcgbGFuZykKLSAgewotICAgIGlmIChsYW5nLmxlbmd0aCgpID09IDApIAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgaWYgKGxhbmcubGVuZ3RoKCkgPT0gMSkgCi0gICAgewotICAgICAgY2hhciBjaDAgPSBsYW5nLmNoYXJBdCgwKTsKLSAgICAgIGlmICgoY2gwID49ICdhJyAmJiBjaDAgPD0gJ3onKSB8fCAoY2gwID49ICdBJyAmJiBjaDAgPD0gJ1onKSkKLSAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9MQU5HX1RPT19TSE9SVCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTkFNRV9JTlZBTElEX0NIQVIiKSArIGNoMCArICAvLyROT04tTkxTLTEkCi0gICAgICAgIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EIik7ICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIGludCBvZmZzZXQ7Ci0KLSAgICBjaGFyIGNoMCA9IGxhbmcuY2hhckF0KDApOwotICAgIGlmIChsYW5nLmNoYXJBdCgxKSA9PSAnLScpIAotICAgIHsKLSAgICAgIGlmIChjaDAgPT0gJ2knIHx8IGNoMCA9PSAnSScgfHwgY2gwID09ICd4JyB8fCBjaDAgPT0gJ1gnKSAKLSAgICAgICAgb2Zmc2V0ID0gMTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiIpICsgY2gwICsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY2hhciBjaDEgPSBsYW5nLmNoYXJBdCgxKTsKLSAgICAgIGlmICgoY2gwID49ICdhJyAmJiBjaDAgPD0gJ3onKSB8fCAoY2gwID49ICdBJyAmJiBjaDAgPD0gJ1onKSkKLSAgICAgICAgaWYgKChjaDEgPj0gJ2EnICYmIGNoMSA8PSAneicpIHx8IChjaDEgPj0gJ0EnICYmIGNoMSA8PSAnWicpKQotICAgICAgICAgIG9mZnNldCA9IDI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX05BTUVfSU5WQUxJRF9DSEFSIikgKyBjaDEgKyAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiIpICsgY2gwICsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIGlmIChsYW5nLmxlbmd0aCgpID4gb2Zmc2V0KSAKLSAgICB7Ci0gICAgICBjaGFyIGNoID0gbGFuZy5jaGFyQXQob2Zmc2V0KyspOwotICAgICAgaWYgKGNoICE9ICctJykgCi0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fSFlQSEVOX05FRURFRCIpICsgSW50ZWdlci50b1N0cmluZyhvZmZzZXQtMSk7ICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgICAgZWxzZSAKLSAgICAgIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIAotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGNoID09ICctJykgCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGxhbmcubGVuZ3RoKCkgPT0gb2Zmc2V0KSAKLSAgICAgICAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9IWVBIRU5fRU5ESU5HIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2ggPSBsYW5nLmNoYXJBdChvZmZzZXQrKyk7Ci0gICAgICAgICAgICBpZiAoKGNoIDwgJ2EnIHx8IGNoID4gJ3onKSAmJiAoY2ggPCAnQScgfHwgY2ggPiAnWicpKSAKLSAgICAgICAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiIpICsgY2ggKyAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1VJX05BTUVfSU5WQUxJRF9DSEFSX0VORCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChsYW5nLmxlbmd0aCgpID09IG9mZnNldCkKLSAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgfSAKLSAgICAgICAgICBlbHNlIGlmICgoY2ggPCAnYScgfHwgY2ggPiAneicpICYmIChjaCA8ICdBJyB8fCBjaCA+ICdaJykpIAotICAgICAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiIpICsgY2ggKyAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQiKTsgICAgICAgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBlbHNlIGlmIChsYW5nLmxlbmd0aCgpID09IG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIGNoID0gbGFuZy5jaGFyQXQob2Zmc2V0KyspOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIG1pbiB2YWx1ZSBpcyBjb3JyZWN0LgotICAgKiBBIG1pbmltdW0gdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIDwgbWF4VmFsdWUKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGlzVmFsaWRNaW5WYWx1ZShTdHJpbmcgbWluVmFsdWUsIFN0cmluZyBtYXhWYWx1ZSkKLSAgewotICAgIGludCBtaW47Ci0KLSAgICBpZiAobWluVmFsdWUgPT0gbnVsbCB8fCBtaW5WYWx1ZS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgLy8gTm90aGluZyB0byBjaGVjawotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgbWluID0gSW50ZWdlci5wYXJzZUludChtaW5WYWx1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfRVJST1JfTUlOX05PVF9QT1NJVElWRSIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgaWYgKG1pbiA8IDApIAotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX0VSUk9SX01JTl9OT1RfUE9TSVRJVkUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIGludCBtYXggPSBJbnRlZ2VyLnBhcnNlSW50KG1heFZhbHVlKTsKLSAgICAgIGlmIChtaW4gPiBtYXgpIAotICAgICAgewotICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9FUlJPUl9NSU5fVkFMVUUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIC8vIE1heCBpcyBub3QgYWNjdXJhdGUuIERvbid0IGNvbXBhcmUgaXQuCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgbWF4IHZhbHVlIGlzIGNvcnJlY3QuCi0gICAqIEEgbWF4aW11bSB2YWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgPiBtaW5WYWx1ZQotICAgKgotICAgKiBJdCBjYW4gYWxzbyBiZSBzZXQgdGhlIHN0cmluZyAidW5ib3VuZGVkIgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgaXNWYWxpZE1heFZhbHVlKFN0cmluZyBtYXhWYWx1ZSwgU3RyaW5nIG1pblZhbHVlKQotICB7Ci0gICAgaW50IG1heDsKLQotICAgIGlmIChtYXhWYWx1ZSA9PSBudWxsIHx8IG1heFZhbHVlLmVxdWFscygiIikpICAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgLy8gTm90aGluZyB0byBjaGVjawotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgaWYgKG1heFZhbHVlLmVxdWFscygidW5ib3VuZGVkIikpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBtYXggPSBJbnRlZ2VyLnBhcnNlSW50KG1heFZhbHVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9FUlJPUl9NQVhfTk9UX1BPU0lUSVZFIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBpZiAobWF4IDwgMCkgCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfRVJST1JfTUFYX05PVF9QT1NJVElWRSIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgaW50IG1pbiA9IEludGVnZXIucGFyc2VJbnQobWluVmFsdWUpOwotICAgICAgaWYgKG1heCA8IG1pbikgCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX0VSUk9SX01BWF9WQUxVRSIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpCi0gICAgewotICAgICAgLy8gTWluIGlzIG5vdCBhY2N1cmF0ZS4gRG9uJ3QgY29tcGFyZSBpdC4KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIG5hbWUgY29uZm9ybXMgdG8gdGhlIFhNTCBzcGVjCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjaGVja1hNTE5hbWUoU3RyaW5nIG5hbWUsIGJvb2xlYW4gYWxsb3dFbnRpdHlSZWYpCi0gIHsKLSAgICBpbnQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBjaGFyIGNoYXJhY3RlcjsKLQotICAgIGlmIChsZW5ndGggPT0gMCkgCi0gICAgewotICAgICAgcmV0dXJuIE1lc3NhZ2VzLl9XQVJOX05BTUVfTVVTVF9DT05UQUlOX0FUX0xFQVNUX09ORV9DSEFSOwotICAgIH0KLSAgICAKLSAgICBpZiAobmFtZS5pbmRleE9mKCIgIikgPj0gMCkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHJldHVybiBNZXNzYWdlcy5fV0FSTl9OQU1FX0hBU19TUEFDRTsKLSAgICB9Ci0KLSAgICBpbnQgaW5kZXggPSAwOwotICAgIGlmIChsZW5ndGggPiAwICYmCi0gICAgICAgIG5hbWUuY2hhckF0KDApID09ICclJykKLSAgICB7Ci0gICAgICBpZiAoYWxsb3dFbnRpdHlSZWYpIAotICAgICAgewotICAgICAgICAvLyBza2lwIG92ZXIgdGhlIGZpcnN0IGNoYXJhY3RlciAKLSAgICAgICAgaW5kZXgrKzsKLSAgICAgIH0gLy8gZW5kIG9mIGlmICgpCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBNZXNzYWdlcy5fV0FSTl9OQU1FX0lOVkFMSURfRklSU1Q7Ci0gICAgICB9IC8vIGVuZCBvZiBlbHNlCi0gICAgfQotICAgIAotICAgIGZvcig7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKQotICAgIHsKLSAgICAgIGNoYXJhY3RlciA9IG5hbWUuY2hhckF0KGluZGV4KTsKLQotICAgICAgaWYoaW5kZXggPT0gMCkKLSAgICAgIHsKLSAgICAgICAgaWYoICFpc1hNTE5hbWVTdGFydChjaGFyYWN0ZXIpICkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBNZXNzYWdlcy5fV0FSTl9OQU1FX0lOVkFMSURfRklSU1Q7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYoIWlzWE1MTmFtZUNoYXIoY2hhcmFjdGVyKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICgoaW5kZXggPT0gbGVuZ3RoIC0gMSkgJiYgLy9jaGVjayBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgYSAnOycKLSAgICAgICAgICAgICAgYWxsb3dFbnRpdHlSZWYgJiYKLSAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICc7JykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyB3ZSdyZSBzdGlsbCBvayB0aGVuCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9IC8vIGVuZCBvZiBpZiAoKQotICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE1lc3NhZ2VzLl9XQVJOX05BTUVfSU5WQUxJRF9DSEFSICsgY2hhcmFjdGVyICsKLSAgICAgICAgICAgIE1lc3NhZ2VzLl9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQ7Ci0gICAgICAgICAgfSAvLyBlbmQgb2YgZWxzZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBuYW1lIGNvbmZvcm1zIHRvIHRoZSBYTUwgc3BlYwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY2hlY2tYTUxOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuIGNoZWNrWE1MTmFtZShuYW1lLCBmYWxzZSk7Ci0gIH0KLQotICAvKioKLSAgICogaXNYTUxOYW1lU3RhcnQKLSAgICoqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWE1MTmFtZVN0YXJ0KGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID09ICdfJyB8fCBjaCA9PSAnOicgfHwgQ2hhcmFjdGVyLmlzTGV0dGVyKGNoKSApOwotICB9Ci0KLSAgLyoqCi0gICAqIGlzWE1MTmFtZUNoYXIKLSAgICoqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWE1MTmFtZUNoYXIoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdChjaCkgfHwgY2ggPT0gJy4nIHx8IGNoID09ICctJyB8fCBjaCA9PSAnXycgfHwgY2ggPT0gJzonKTsKLSAgfQotCi0gIC8qKgotICAgKiBpc1hNTFByZWZpeFN0YXJ0Ci0gICAqKi8KLS8vICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWE1MUHJlZml4U3RhcnQoY2hhciBjaCkKLS8vICB7Ci0vLyAgICByZXR1cm4gKGNoID09ICdfJyB8fCBDaGFyYWN0ZXIuaXNMZXR0ZXIoY2gpICk7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBpc1hNTFByZWZpeENoYXIKLSAgICoqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWE1MUHJlZml4Q2hhcihjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KGNoKSB8fCBjaCA9PSAnLicgfHwgY2ggPT0gJy0nIHx8IGNoID09ICdfJyk7Ci0gIH0KLQotICAvKioKLSAgICogcGFyc2VFbGVtZW50VGV4dAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcGFyc2VFbGVtZW50VGV4dChTdHJpbmcgdGV4dCkKLSAgewotICAgIGlmICh0ZXh0LmluZGV4T2YoJzwnKSAhPSAtMSB8fCB0ZXh0LmluZGV4T2YoJz4nKSAhPSAtMSkKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX0VMRU1FTlRfSU5WQUxJRF9DSEFSIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogcGFyc2VBdHRyaWJ1dGVWYWx1ZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcGFyc2VBdHRyaWJ1dGVWYWx1ZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUuaW5kZXhPZignIicpICE9IC0xIHx8IHZhbHVlLmluZGV4T2YoJzwnKSAhPSAtMSB8fCB2YWx1ZS5pbmRleE9mKCc+JykgIT0gLTEpCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9BVFRSSUJVVEVfSU5WQUxJRF9DSEFSIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBwYXJzZUFEQVRBU2VjdGlvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcGFyc2VDREFUQVNlY3Rpb24oU3RyaW5nIHNlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VjdGlvbi5pbmRleE9mKCJdXT4iKSAhPSAtMSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fQ0RBVEFfSU5WQUxJRF9TVFJJTkciKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIHBhcnNlUHJvY2Vzc2lpbmdJbnN0cnVjdGlvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25EYXRhKFN0cmluZyBkYXRhKQotICB7Ci0gICAgaWYgKGRhdGEuaW5kZXhPZigiPz4iKSAhPSAtMSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fUFJPQ0VTU0lOR19JTlZBTElEX1NUUklORyIpOyAvLyROT04tTkxTLTEkCi0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25UYXJnZXQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uVGFyZ2V0KFN0cmluZyB0YXJnZXQpCi0gIHsKLSAgICBpZiAodGFyZ2V0Lmxlbmd0aCgpID09IDMgJiYgKHRhcmdldC5pbmRleE9mKCJYTUwiKSAhPSAtMSB8fCB0YXJnZXQuaW5kZXhPZigiWE1sIikgIT0gLTEgfHwgdGFyZ2V0LmluZGV4T2YoIlhtTCIpICE9IC0xIHx8IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICAgIHRhcmdldC5pbmRleE9mKCJ4TUwiKSAhPSAtMSB8fCB0YXJnZXQuaW5kZXhPZigiWG1sIikgIT0gLTEgfHwgdGFyZ2V0LmluZGV4T2YoInhNbCIpICE9IC0xIHx8IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICAgIHRhcmdldC5pbmRleE9mKCJ4bUwiKSAhPSAtMSB8fCB0YXJnZXQuaW5kZXhPZigieG1sIikgIT0gLTEpKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX1BST0NFU1NJTkdfVEFSR0VUX0lOVkFMSURfU1RSSU5HIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIH0KLSAgICByZXR1cm4gY2hlY2tYTUxOYW1lKHRhcmdldCk7Ci0gIH0KLQotICAvKioKLSAgICogcGFyc0NvbW1lbnQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlQ29tbWVudChTdHJpbmcgY29tbWVudCkKLSAgewotICAgIGlmIChjb21tZW50LmluZGV4T2YoIi0tIikgIT0gLTEpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX0NPTU1FTlRfSU5WQUxJRF9TVFJJTkciKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBwcmVmaXggY29uZm9ybXMgdG8gdGhlIFhNTCBzcGVjCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjaGVja1hNTFByZWZpeChTdHJpbmcgcHJlZml4KQotICB7Ci0gICAgaW50IGxlbmd0aCA9IHByZWZpeC5sZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGNoYXIgY2hhcmFjdGVyOwotICAgIAotICAgIGlmIChwcmVmaXguaW5kZXhPZigiICIpID49IDApIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4oVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX1BSRUZJWF9IQVNfU1BBQ0UiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgZm9yKGludCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKQotICAgIHsKLSAgICAgIGNoYXJhY3RlciA9IHByZWZpeC5jaGFyQXQoaW5kZXgpOwotCi0gICAgICBpZighaXNYTUxQcmVmaXhDaGFyKGNoYXJhY3RlcikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRTdHJpbmcoIl9XQVJOX1BSRUZJWF9JTlZBTElEX0NIQVIiLCBTdHJpbmcudmFsdWVPZihjaGFyYWN0ZXIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU0NmE3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVzExT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuRmlsZVN0b3JlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwuSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5kaWFsb2dzLklPcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5kaWFsb2dzLlhTREdyYXBoVmlld2VyRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFcxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciBpbXBsZW1lbnRzIElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIsIElPcGVuSW5OZXdFZGl0b3IgewotCXByaXZhdGUgT2JqZWN0IG9iamVjdDsKLQlwcml2YXRlIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dDsKLQkKLQlwdWJsaWMgVzExT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkKLQl7Ci0JCXRoaXMuZWRpdG9ySW5wdXQgPSBlZGl0b3JJbnB1dDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TW9kZWwoT2JqZWN0IG9iamVjdCkgewotCQl0aGlzLm9iamVjdCA9IG9iamVjdDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgb3BlbkV4dGVybmFsRWRpdG9yKCkgewotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQlPYmplY3Qgbm90aWZpZXIgPSAoKFdTRExCYXNlQWRhcHRlcikgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCU9iamVjdCBvcGVuT25Nb2RlbCA9IGdldE1vZGVsVG9PcGVuT24obm90aWZpZXIpOwotCQkJCi0JCQlpZiAob3Blbk9uTW9kZWwgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkgewotCQkJICBYU0RDb25jcmV0ZUNvbXBvbmVudCB4c2RDb21wb25lbnQgPSAoWFNEQ29uY3JldGVDb21wb25lbnQpIG9wZW5Pbk1vZGVsOwotCQkJICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0U2NoZW1hKHhzZENvbXBvbmVudCk7Ci0JCQkgIGlmIChzY2hlbWEgPT0gbnVsbCkgcmV0dXJuOwotCQkJICBpZiAoc2NoZW1hLmVSZXNvdXJjZSgpIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLQkJCSAgewotCQkJICAgIFN0cmluZyBmaWxlTmFtZSA9IHNjaGVtYS5lUmVzb3VyY2UoKS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOwotCQkJICAgIGlmIChmaWxlTmFtZSA9PSBudWxsKSBmaWxlTmFtZSA9ICJXU0RMIjsgLy8kTk9OLU5MUy0xJAotCQkJICAgIFN0cmluZyBlZGl0b3JOYW1lID0gTWVzc2FnZXMuX1VJX0xBQkVMX0lOTElORV9TQ0hFTUFfT0YgKyBmaWxlTmFtZTsKLQkJICAgICAgWFNER3JhcGhWaWV3ZXJEaWFsb2cub3BlbklubGluZVNjaGVtYShlZGl0b3JJbnB1dCwgeHNkQ29tcG9uZW50LCBzY2hlbWEsIGVkaXRvck5hbWUpOwotCQkJICB9Ci0JCQkgIGVsc2UKLQkJCSAgewotCQkJCSAgWFNER3JhcGhWaWV3ZXJEaWFsb2cub3BlblhTREVkaXRvcihlZGl0b3JJbnB1dCwgeHNkQ29tcG9uZW50LmdldFNjaGVtYSgpLCB4c2RDb21wb25lbnQpOwotCQkJICB9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0gIHB1YmxpYyB2b2lkIG9wZW5YU0RFZGl0b3IoKQotICB7Ci0gICAgb3BlbkV4dGVybmFsRWRpdG9yKCk7ICAKLSAgfQotCi0JcHJvdGVjdGVkIFhTRFNjaGVtYSBnZXRTY2hlbWEoWFNEQ29uY3JldGVDb21wb25lbnQgeHNkQ29tcG9uZW50KSB7Ci0JCVhTRFNjaGVtYSBzY2hlbWEgPSB4c2RDb21wb25lbnQuZ2V0U2NoZW1hKCk7Ci0JCWlmIChzY2hlbWEgPT0gbnVsbCkgewotCQkJT2JqZWN0IG5vdGlmaWVyID0gKChXU0RMQmFzZUFkYXB0ZXIpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQlpZiAobm90aWZpZXIgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkgewotCQkJCXNjaGVtYSA9ICgoWFNEQ29uY3JldGVDb21wb25lbnQpIG5vdGlmaWVyKS5nZXRTY2hlbWEoKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHNjaGVtYTsKLQl9Ci0JCQotCXB1YmxpYyBib29sZWFuIGxpbmtBcHBsaWNhYmxlKCkgewotCQlib29sZWFuIGFwcGxpY2FibGUgPSB0cnVlOwotCQkKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCUlQYXJhbWV0ZXIgcGFyYW0gPSAoSVBhcmFtZXRlcikgb2JqZWN0OwotCQkJU3RyaW5nIHByZWZpeCA9IHBhcmFtLmdldENvbXBvbmVudE5hbWVRdWFsaWZpZXIoKTsKLQkJCWlmIChwcmVmaXggIT0gbnVsbCAmJiBwcmVmaXguZXF1YWxzKFhTRENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSkpIHsKLQkJCQlhcHBsaWNhYmxlID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBhcHBsaWNhYmxlOwotCX0KLQkKLQlwcm90ZWN0ZWQgT2JqZWN0IGdldE1vZGVsVG9PcGVuT24oT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQlYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9ICgoWFNERWxlbWVudERlY2xhcmF0aW9uKSBvYmplY3QpLmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCk7Ci0JCQlyZXR1cm4geHNkRWxlbWVudC5nZXRUeXBlRGVmaW5pdGlvbigpOwotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFBhcnQpIHsKLQkJCU9iamVjdCBlbGVtZW50T3JUeXBlID0gKChQYXJ0KSBvYmplY3QpLmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkJaWYgKGVsZW1lbnRPclR5cGUgPT0gbnVsbCkgewotCQkJCWVsZW1lbnRPclR5cGUgPSAoKFBhcnQpIG9iamVjdCkuZ2V0VHlwZURlZmluaXRpb24oKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIGVsZW1lbnRPclR5cGU7Ci0JCX0KLQkJCi0JCXJldHVybiBvYmplY3Q7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBmaWxlCi0JICogQHJldHVybgotCSAqLwotCXByb3RlY3RlZCBib29sZWFuIGlzSW5saW5lU2NoZW1hKElGaWxlIGZpbGUpIHsKLQkJLy8gU2hvdWxkIHRoZXJlIGJlIGEgYmV0dGVyIHRlc3QgZm9yIHRoaXM/ICBUaGUgSUZpbGVzIGFyZSBkaWZmZXJlbnQgc28gd2UgY2FuJ3QgdXNlIGZpbGUgPT0gd3NkbEZpbGUuCi0JCS8vIHJldHVybiBmaWxlLmdldEZ1bGxQYXRoKCkuZXF1YWxzKHdzZGxGaWxlLmdldEZ1bGxQYXRoKCkpOwotICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVTdG9yZUVkaXRvcklucHV0KSB7Ci0gICAgICBGaWxlU3RvcmVFZGl0b3JJbnB1dCBmaWxlU3RvcmVFZGl0b3JJbnB1dCA9IChGaWxlU3RvcmVFZGl0b3JJbnB1dCllZGl0b3JJbnB1dDsKLSAgICAgIGZpbGUuZ2V0RnVsbFBhdGgoKS5lcXVhbHMoZmlsZVN0b3JlRWRpdG9ySW5wdXQuZ2V0VVJJKCkuZ2V0UGF0aCgpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLSAgICAgIElTdG9yYWdlRWRpdG9ySW5wdXQgc3RvcmFnZSA9IChJU3RvcmFnZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgIHRyeSB7Ci0gICAgICAgIElQYXRoIHBhdGggPSBzdG9yYWdlLmdldFN0b3JhZ2UoKS5nZXRGdWxsUGF0aCgpOwotICAgICAgICBpZiAocGF0aCAhPSBudWxsICYmIHBhdGguZXF1YWxzKGZpbGUuZ2V0RnVsbFBhdGgoKSkpIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLSAgICAgIElGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvcklucHV0OwotICAgICAgcmV0dXJuICBmaWxlLmdldEZ1bGxQYXRoKCkuZXF1YWxzKGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCkuZ2V0RnVsbFBhdGgoKSk7Ci0gICAgfQotCSAgcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkgewotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQlPYmplY3Qgbm90aWZpZXIgPSAoKFdTRExCYXNlQWRhcHRlcikgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCU9iamVjdCBvcGVuT25Nb2RlbCA9IGdldE1vZGVsVG9PcGVuT24obm90aWZpZXIpOwotCi0JCQkvLyBXZSBjaGVjayB0byBlbnN1cmUgaXQncyBlbGVtZW50ICE9IG51bGwuICBJZiBpdCBkb2VzLCB0aGVuIGl0J3MgYSBzaWduIG9mIGEKLQkJCS8vIGJhZCByZWZlcmVuY2UgKGlzIGludmFsaWQpLgotCQkJaWYgKG9wZW5Pbk1vZGVsIGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQgJiYgKChYU0RDb25jcmV0ZUNvbXBvbmVudCkgb3Blbk9uTW9kZWwpLmdldEVsZW1lbnQoKSAhPSBudWxsKSB7Ci0JCQkJWFNEQ29uY3JldGVDb21wb25lbnQgeHNkQ29tcG9uZW50ID0gKFhTRENvbmNyZXRlQ29tcG9uZW50KSBvcGVuT25Nb2RlbDsKLQotCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSBnZXRTY2hlbWEoeHNkQ29tcG9uZW50KTsKLQkJCQlpZiAoc2NoZW1hICE9IG51bGwpIHsKLSAgICAgICAgICBTdHJpbmcgc2NoZW1hTG9jYXRpb24gPSBVUklIZWxwZXIucmVtb3ZlUGxhdGZvcm1SZXNvdXJjZVByb3RvY29sKHNjaGVtYS5nZXRTY2hlbWFMb2NhdGlvbigpKTsKLSAgICAgICAgICBJUGF0aCBzY2hlbWFQYXRoID0gbmV3IFBhdGgoc2NoZW1hTG9jYXRpb24pOwotICAgICAgICAgIGlmIChzY2hlbWFMb2NhdGlvbi5zdGFydHNXaXRoKCJodHRwIikpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLQkJCQkgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVFZGl0b3JJbnB1dCkgewotCQkgIAkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoc2NoZW1hUGF0aCk7Ci0JCQkgIAkJaWYgKGZpbGUgIT0gbnVsbCAmJiBmaWxlLmV4aXN0cygpKSB7Ci0JCQkJICAJCXJldHVybiB0cnVlOwotCQkJCQkgIH0KLQkJCQkgIH0KLQkJCQkgIGVsc2UgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgRmlsZVN0b3JlRWRpdG9ySW5wdXQpIHsKLQkJCQkgICAgcmV0dXJuIHRydWU7Ci0vLyBSZXZpc2l0Ci0vLyAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uID0gc2NoZW1hLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0vLyAgICAgICAgICAgIHNjaGVtYVBhdGggPSBuZXcgUGF0aChVUklIZWxwZXIucmVtb3ZlUHJvdG9jb2woc2NoZW1hTG9jYXRpb24pKTsKLS8vCQkgICAgICAgIElGaWxlU3RvcmUgZmlsZVN0b3JlID0gRUZTLmdldExvY2FsRmlsZVN5c3RlbSgpLmdldFN0b3JlKHNjaGVtYVBhdGgpOwotLy8JCSAgICAgICAgaWYgKCFmaWxlU3RvcmUuZmV0Y2hJbmZvKCkuaXNEaXJlY3RvcnkoKSAmJiBmaWxlU3RvcmUuZmV0Y2hJbmZvKCkuZXhpc3RzKCkpCi0vLwkJICAgICAgICB7Ci0vLwkJCQkJICAgIHJldHVybiB0cnVlOwotLy8JCSAgICAgICAgfQotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSVN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkgIHJldHVybiB0cnVlOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzaG93UHJldmlldygpIHsKLSAgICBPYmplY3QgeHNkTW9kZWwgPSBudWxsOwotICAgIFN0cmluZyB0aXRsZSA9ICIiOwotICAgIFN0cmluZyBpbmZvID0gIiI7Ci0KLSAgICBPYmplY3Qgbm90aWZpZXIgPSAoKFdTRExCYXNlQWRhcHRlcikgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLSAgICB4c2RNb2RlbCA9IGdldE1vZGVsVG9PcGVuT24obm90aWZpZXIpOwotICAgIGlmICh4c2RNb2RlbCBpbnN0YW5jZW9mIFhTRE5hbWVkQ29tcG9uZW50KQotICAgIHsKLSAgICAgIFhTRE5hbWVkQ29tcG9uZW50IG5hbWVkQ29tcG9uZW50ID0gKFhTRE5hbWVkQ29tcG9uZW50KSB4c2RNb2RlbDsKLSAgICAgIHRpdGxlID0gbmFtZWRDb21wb25lbnQuZ2V0TmFtZSgpOwotICAgICAgaW5mbyA9IG5hbWVkQ29tcG9uZW50LmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNWYWxpZCgpICYmIHhzZE1vZGVsICE9IG51bGwpCi0gICAgewotICAJCVhTREdyYXBoVmlld2VyRGlhbG9nIGRpYWxvZyA9IG5ldyBYU0RHcmFwaFZpZXdlckRpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIHRpdGxlLCBpbmZvLCB4c2RNb2RlbCwgIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnByZXZpZXciKTsKLSAgCQlkaWFsb2cuc2V0T3BlbkV4dGVybmFsRWRpdG9yKHRoaXMpOwotICAgICAgZGlhbG9nLm9wZW4oKTsKLSAgICB9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc0YzI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQWRhcHRlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIgewotCXByaXZhdGUgc3RhdGljIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlciBpbnN0YW5jZTsKLQkKLQlwcml2YXRlIEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OwotCQotCXB1YmxpYyBzdGF0aWMgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotCQkJaW5zdGFuY2UgPSBuZXcgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JCi0JcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCUFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSBnZXRXU0RMQWRhcHRlckZhY3RvcnkoKTsKLQkJcmV0dXJuIGZhY3RvcnkuYWRhcHQodGFyZ2V0LCBmYWN0b3J5KTsKLQl9Ci0JCi0JcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldFdTRExBZGFwdGVyRmFjdG9yeSgpIHsKLQkJaWYgKGFkYXB0ZXJGYWN0b3J5ID09IG51bGwpIHsKLQkJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IFdTRExBZGFwdGVyRmFjdG9yeSgpOwotCQl9Ci0JCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0V1NETEFkYXB0ZXJGYWN0b3J5KEFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkpIHsKLQkJYWRhcHRlckZhY3RvcnkgPSBmYWN0b3J5OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMRWRpdG9yVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExFZGl0b3JVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZmE4YzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExFZGl0b3JVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLkV4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMRWRpdG9yVXRpbCBleHRlbmRzIFdTRExDb25zdGFudHMgewotCXByb3RlY3RlZCBzdGF0aWMgV1NETEVkaXRvclV0aWwgaW5zdGFuY2U7Ci0JcHJvdGVjdGVkIE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgbm9kZUFzc29jaWF0aW9uTWFuYWdlciA9IG5ldyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCk7Ci0KLQlwcm90ZWN0ZWQgSGFzaE1hcCBlbGVtZW50TmFtZVRvVHlwZU1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTEVNRU5UID0gMTQ7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRSA9IDE1OwotCi0JcHVibGljIHN0YXRpYyBXU0RMRWRpdG9yVXRpbCBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLQkJCWluc3RhbmNlID0gbmV3IFdTRExFZGl0b3JVdGlsKCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQotCXB1YmxpYyBXU0RMRWRpdG9yVXRpbCgpIHsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KEJJTkRJTkdfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKEJJTkRJTkcpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KERFRklOSVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKERFRklOSVRJT04pKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KERPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKERPQ1VNRU5UQVRJT04pKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KEZBVUxUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihGQVVMVCkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoSU1QT1JUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihJTVBPUlQpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KElOUFVUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihJTlBVVCkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoTUVTU0FHRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoTUVTU0FHRSkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoT1BFUkFUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihPUEVSQVRJT04pKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KE9VVFBVVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoT1VUUFVUKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQQVJUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihQQVJUKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQT1JUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihQT1JUKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQT1JUX1RZUEVfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFBPUlRfVFlQRSkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoU0VSVklDRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoU0VSVklDRSkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoVFlQRVNfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFRZUEVTKSk7Ci0JfQotCi0JcHVibGljIGludCBnZXRXU0RMVHlwZShFbGVtZW50IGVsZW1lbnQpIHsKLQkJaW50IHJlc3VsdCA9IC0xOwotCi0JCUludGVnZXIgaW50ZWdlciA9IChJbnRlZ2VyKSBlbGVtZW50TmFtZVRvVHlwZU1hcC5nZXQoZWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7Ci0JCWlmIChpbnRlZ2VyICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IGludGVnZXIuaW50VmFsdWUoKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldFBhcmVudEVsZW1lbnRDaGFpbihFbGVtZW50IGVsZW1lbnQpIHsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQl3aGlsZSAoZWxlbWVudCAhPSBudWxsKSB7Ci0JCQlsaXN0LmFkZCgwLCBlbGVtZW50KTsKLQkJCU5vZGUgbm9kZSA9IGVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpOwotCQkJZWxlbWVudCA9IChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSA/IChFbGVtZW50KSBub2RlIDogbnVsbDsKLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBFbGVtZW50IHRhcmdldEVsZW1lbnQpIHsKLQkJT2JqZWN0IG8gPSBub2RlQXNzb2NpYXRpb25NYW5hZ2VyLmdldE1vZGVsT2JqZWN0Rm9yTm9kZShkZWZpbml0aW9uLCB0YXJnZXRFbGVtZW50KTsKLQkJcmV0dXJuIG87Ci0JfQotCi0JcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudEZvck9iamVjdChPYmplY3QgbykgewotCQlyZXR1cm4gKChvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCkgbykuZ2V0RWxlbWVudCgpOwotCX0KLQotCXB1YmxpYyBOb2RlIGdldE5vZGVGb3JPYmplY3QoT2JqZWN0IG8pIHsKLQkJcmV0dXJuIG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIuZ2V0Tm9kZShvKTsKLQl9Ci0KLQkvLyBQcm92aWRlIGEgbWFwcGluZyBiZXR3ZWVuIERlZmluaXRpb25zIGFuZCBJVHlwZVN5c3RlbVByb3ZpZGVycwotLy8gcHJpdmF0ZSBIYXNodGFibGUgdHlwZVN5c3RlbVByb3ZpZGVycyA9IG5ldyBIYXNodGFibGUoKTsKLQlwcml2YXRlIElUeXBlU3lzdGVtUHJvdmlkZXIgdHlwZVN5c3RlbVByb3ZpZGVyOwotCi0JcHVibGljIElUeXBlU3lzdGVtUHJvdmlkZXIgZ2V0VHlwZVN5c3RlbVByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlpZiAodHlwZVN5c3RlbVByb3ZpZGVyID09IG51bGwpIHsKLQkJCXR5cGVTeXN0ZW1Qcm92aWRlciA9IG5ldyBFeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyKCk7Ci0JCX0KLQkJcmV0dXJuIHR5cGVTeXN0ZW1Qcm92aWRlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUeXBlU3lzdGVtUHJvdmlkZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBJVHlwZVN5c3RlbVByb3ZpZGVyIHR5cGVTeXN0ZW1Qcm92aWRlcikgewotCQkvLyB0eXBlU3lzdGVtUHJvdmlkZXJzLnB1dChkZWZpbml0aW9uLHR5cGVTeXN0ZW1Qcm92aWRlcik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBRTmFtZSBjcmVhdGVRTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBwcmVmaXhlZE5hbWUpIHsKLQkJUU5hbWUgcW5hbWUgPSBudWxsOwotCQlpZiAocHJlZml4ZWROYW1lICE9IG51bGwpIHsKLQkJCWludCBpbmRleCA9IHByZWZpeGVkTmFtZS5pbmRleE9mKCI6Iik7IC8vJE5PTi1OTFMtMSQKLS8vIFN0cmluZyBwcmVmaXggPSAoaW5kZXggPT0gLTEpID8gbnVsbCA6IHByZWZpeGVkTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJU3RyaW5nIHByZWZpeCA9IChpbmRleCA9PSAtMSkgPyAiIiA6IHByZWZpeGVkTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJaWYgKHByZWZpeCAhPSBudWxsKSB7Ci0JCQkJU3RyaW5nIG5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlKHByZWZpeCk7Ci0JCQkJaWYgKG5hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQkJCVN0cmluZyBsb2NhbFBhcnQgPSBwcmVmaXhlZE5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0JCQkJCXFuYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxQYXJ0KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHFuYW1lOwotCX0KLQotCXB1YmxpYyBMaXN0IGdldEV4dGVuc2liaWxpdHlFbGVtZW50Tm9kZXMoRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQpIHsKLQkJLy8gRm9yIFR5cGVzLCBJIG5lZWQgdG8gZ2V0IGFsbCB0aGUgc2NoZW1hcwotCQlpZiAoZXh0ZW5zaWJsZUVsZW1lbnQgaW5zdGFuY2VvZiBUeXBlcykgewotCQkJVHlwZXMgeHNkRUUgPSAoVHlwZXMpIGV4dGVuc2libGVFbGVtZW50OwotCQkJcmV0dXJuIHhzZEVFLmdldFNjaGVtYXMoKTsKLQkJfQotCQkvKgotCQkgKiBMaXN0IGNoaWxkTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJICogCi0JCSAqIEVsZW1lbnQgcGFyZW50RWxlbWVudCA9IGdldEVsZW1lbnRGb3JPYmplY3QoZXh0ZW5zaWJsZUVsZW1lbnQpOyBpZgotCQkgKiAocGFyZW50RWxlbWVudCAhPSBudWxsKSB7Ci0JCSAqIAotCQkgKiBOb2RlTGlzdCBub2RlTGlzdCA9IHBhcmVudEVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOyBpbnQKLQkJICogbm9kZUxpc3RMZW5ndGggPSBub2RlTGlzdC5nZXRMZW5ndGgoKTsgZm9yIChpbnQgaSA9IDA7IGkgPAotCQkgKiBub2RlTGlzdExlbmd0aDsgaSsrKSB7IGNoaWxkTGlzdC5hZGQobm9kZUxpc3QuaXRlbShpKSk7IH0gSGFzaE1hcAotCQkgKiBleHRlbnNpYmxlRWxlbWVudFRhYmxlID0gbmV3IEhhc2hNYXAoKTsgZm9yIChJdGVyYXRvciBpID0KLQkJICogZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JCSAqIGkuaGFzTmV4dCgpOykgeyBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9Ci0JCSAqIChFeHRlbnNpYmlsaXR5RWxlbWVudClpLm5leHQoKTsgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50ICE9IG51bGwpIHsKLQkJICogRWxlbWVudCBlbGVtZW50ID0gZ2V0RWxlbWVudEZvck9iamVjdChleHRlbnNpYmlsaXR5RWxlbWVudCk7IGlmCi0JCSAqIChlbGVtZW50ICE9IG51bGwpIHsgZXh0ZW5zaWJsZUVsZW1lbnRUYWJsZS5wdXQoZWxlbWVudCwgZWxlbWVudCk7IH0gfSB9Ci0JCSAqIAotCQkgKiBmb3IgKEl0ZXJhdG9yIGkgPSBjaGlsZExpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7IE9iamVjdCBvID0KLQkJICogaS5uZXh0KCk7IGlmIChleHRlbnNpYmxlRWxlbWVudFRhYmxlLmdldChvKSA9PSBudWxsKSB7IGkucmVtb3ZlKCk7IH0gfSB9Ci0JCSAqIHJldHVybiBjaGlsZExpc3Q7Ci0JCSAqLwotCQlyZXR1cm4gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCX0KLQotCS8qCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgJ2NoaWxkcmVuJyBvZiB0aGUgZ2l2ZW4gb2JqZWN0IG1vZGVsIChXU0RMRWxlbWVudCkuCi0JICovCi0JcHVibGljIHN0YXRpYyBMaXN0IGdldE1vZGVsR3JhcGhWaWV3Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgewotCQlMaXN0IGNoaWxkTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgUG9ydFR5cGUpIHsKLQkJCVBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBvYmplY3Q7Ci0JCQljaGlsZExpc3QuYWRkQWxsKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSk7Ci0JCX0KLQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgT3BlcmF0aW9uKSB7Ci0JCQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgb2JqZWN0OwotCi0JCQlpZiAob3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCQljaGlsZExpc3QuYWRkKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSk7Ci0JCQl9Ci0JCQlpZiAob3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0JCQkJY2hpbGRMaXN0LmFkZChvcGVyYXRpb24uZ2V0RU91dHB1dCgpKTsKLQkJCX0KLQkJCWNoaWxkTGlzdC5hZGRBbGwob3BlcmF0aW9uLmdldEZhdWx0cygpLnZhbHVlcygpKTsKLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UgPSAoTWVzc2FnZVJlZmVyZW5jZSkgb2JqZWN0OwotCQkJY2hpbGRMaXN0LmFkZChtZXNzYWdlUmVmZXJlbmNlLmdldEVNZXNzYWdlKCkpOwotCQl9Ci0KLQkJcmV0dXJuIGNoaWxkTGlzdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2VVUklGb3JTY2hlbWEoU3RyaW5nIHVyaSkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCVVSTCB1cmwgPSBuZXcgVVJMKHVyaSk7Ci0JCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IHVybC5vcGVuU3RyZWFtKCk7Ci0JCQlyZXN1bHQgPSBXU0RMRWRpdG9yVXRpbC5nZXRUYXJnZXROYW1lc3BhY2VVUklGb3JTY2hlbWEoaW5wdXRTdHJlYW0pOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlVVJJRm9yU2NoZW1hKElucHV0U3RyZWFtIGlucHV0KSB7Ci0JCVRhcmdldE5hbWVzcGFjZVVSSUNvbnRlbnRIYW5kbGVyIGhhbmRsZXIgPSBuZXcgVGFyZ2V0TmFtZXNwYWNlVVJJQ29udGVudEhhbmRsZXIoKTsKLQkJQ2xhc3NMb2FkZXIgcHJldkNsYXNzTG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoV1NETEVkaXRvclV0aWwuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCXRyeSB7Ci0JCQlYTUxSZWFkZXIgcmVhZGVyID0gb3JnLnhtbC5zYXguaGVscGVycy5YTUxSZWFkZXJGYWN0b3J5LmNyZWF0ZVhNTFJlYWRlcigpOwotCQkJcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKGhhbmRsZXIpOwotCQkJcmVhZGVyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShpbnB1dCkpOwotCQl9Ci0JCWNhdGNoIChTdG9wUGFyc2VFeGNlcHRpb24gZSkgewotCQkJLy8gdGhpcyBpcyBhIG5vcm1hbCBleGNlcHRpb24gdG8gc3RvcCBwYXJzaW5nIGVhcmx5LAotCQkJLy8gd2hlbiBpbmZvIGlzIGZvdW5kLCBzbyB3ZSBjYW4gc2FmZWx5IGlnbm9yZQotCQl9Ci0JCWNhdGNoIChTQVhFeGNlcHRpb24gZSkgewotCQkJLy8gVE9ETzogdGhlc2Ugc2hvdWxkIGJlIGxvZ2dlZCwgYnV0IHRoZSBvYnZpb3VzIGNob2ljZSwKLQkJCS8vIFdTRExFZGl0b3JQbHVnaW4ubG9nTWVzc2FnZShtZXNzYWdlKSBpcyBhbiBlbXB5IGltcGxlbWVudGF0aW9uLAotCQkJLy8gc28sIGZvciBub3csIHdlJ2xsIGF0IGxlYXN0IHByaW50IG91dC4KLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGxvZ2dlZCwgYnV0IHRoZSBvYnZpb3VzIGNob2ljZSwKLQkJCS8vIFdTRExFZGl0b3JQbHVnaW4ubG9nTWVzc2FnZShtZXNzYWdlKSBpcyBhbiBlbXB5IGltcGxlbWVudGF0aW9uLAotCQkJLy8gc28sIGZvciBub3csIHdlJ2xsIGF0IGxlYXN0IHByaW50IG91dC4KLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihwcmV2Q2xhc3NMb2FkZXIpOwotCQl9Ci0JCXJldHVybiBoYW5kbGVyLnRhcmdldE5hbWVzcGFjZVVSSTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGlzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhhdCBpcyB1c2VkIHRvIHN0b3AgcGFyc2luZyB3aGVuIHJlcXVpcmVkCi0JICogaW5mb3JtYXRpb24gaXMgZm91bmQuCi0JICovCi0Jc3RhdGljIGNsYXNzIFN0b3BQYXJzZUV4Y2VwdGlvbiBleHRlbmRzIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiB7Ci0JCXN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotCQkvKioKLQkJICogQ29uc3RydWN0b3IgU3RvcFBhcnNlRXhjZXB0aW9uLgotCQkgKi8KLQkJU3RvcFBhcnNlRXhjZXB0aW9uKCkgewotCQkJc3VwZXIoInRhcmdldG5hbWVzcGFjZSBmb3VuZCwgbm8gbmVlZCB0byBjb250aW51ZSB0aGUgcGFyc2UiKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgVGFyZ2V0TmFtZXNwYWNlVVJJQ29udGVudEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlciB7Ci0KLQotCQlwdWJsaWMgU3RyaW5nIHRhcmdldE5hbWVzcGFjZVVSSTsKLQotCQlwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBTQVhFeGNlcHRpb24gewotCQkJaWYgKGxvY2FsTmFtZS5lcXVhbHMoInNjaGVtYSIpIHx8IGxvY2FsTmFtZS5lcXVhbHMoImRlZmluaXRpb25zIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJewotCQkJCWludCBuQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuQXR0cmlidXRlczsgaSsrKSB7Ci0JCQkJCWlmIChhdHRyaWJ1dGVzLmdldExvY2FsTmFtZShpKS5lcXVhbHMoInRhcmdldE5hbWVzcGFjZSIpKSAvLyROT04tTkxTLTEkCi0JCQkJCXsKLQkJCQkJCXRhcmdldE5hbWVzcGFjZVVSSSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoaSk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXRocm93IG5ldyBTdG9wUGFyc2VFeGNlcHRpb24oKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMUmVzb3VyY2VVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFJlc291cmNlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDhjMTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMUmVzb3VyY2VVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExNb2RlbExvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hRGlyZWN0aXZlOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFdTRExSZXNvdXJjZVV0aWwKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlbG9hZERpcmVjdGl2ZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgUmVzb3VyY2Ugcm9vdFJlc291cmNlID0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKTsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IHJvb3RSZXNvdXJjZS5nZXRSZXNvdXJjZVNldCgpOwotCi0gICAgZm9yIChJdGVyYXRvciBpID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKSBpLm5leHQoKTsKLSAgICAgIGlmIChyZXNvdXJjZSAhPSByb290UmVzb3VyY2UpCi0gICAgICB7Ci0gICAgICAgIC8vICBUT0RPLi4uIGNvbnNpZGVyIHVubG9hZGluZyB0aGUgcmVzb3VyY2VzICAJCi0gICAgICAgIC8vICByZXNvdXJjZS51bmxvYWQoKTsJCSAgICAgIAotICAgICAgICBpLnJlbW92ZSgpOwotICAgICAgfQotICAgIH0KLSAgICBSZWxvYWREaXJlY3RpdmVWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVsb2FkRGlyZWN0aXZlVmlzaXRvcigpOwotICAgIHZpc2l0b3IudmlzaXREZWZpbml0aW9uKGRlZmluaXRpb24pOwotICB9Ci0KLSAgc3RhdGljIGNsYXNzIFJlbG9hZERpcmVjdGl2ZVZpc2l0b3IKLSAgewotCi0gICAgcHVibGljIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHRoZUltcG9ydCkKLSAgICB7Ci0gICAgICAvLyBmb3JjZSB0aGUgaW1wb3J0IHRvIHJlbG9hZAotICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHRoZUltcG9ydCk7Ci0gICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAoKFdTRExFbGVtZW50SW1wbCl0aGVJbXBvcnQpLmVsZW1lbnRDaGFuZ2VkKGVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0WFNEU2NoZW1hRGlyZWN0aXZlKFhTRFNjaGVtYURpcmVjdGl2ZSBkaXJlY3RpdmUpCi0gICAgewotICAgICAgLy8gZm9yY2UgdGhlIHNjaGVtYSBkaXJlY3RpdmUgdG8gcmVsb2FkCi0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBkaXJlY3RpdmUuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZGlyZWN0aXZlLmVsZW1lbnRBdHRyaWJ1dGVzQ2hhbmdlZChlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICAgIHsKLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICB2aXNpdEltcG9ydCgoSW1wb3J0KSBpLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgICAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgICAgewotCi0gICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgbzsKLSAgICAgICAgICAgICAgaWYgKGUuZ2V0U2NoZW1hKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZpc2l0U2NoZW1hKGUuZ2V0U2NoZW1hKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdmlzaXRTY2hlbWEoWFNEU2NoZW1hIHNjaGVtYSkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBzY2hlbWEuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaS5uZXh0KCk7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRGlyZWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgdmlzaXRYU0RTY2hlbWFEaXJlY3RpdmUoKFhTRFNjaGVtYURpcmVjdGl2ZSkgbyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW50ZXJuYWxVUklSZXNvbHZlciBpbXBsZW1lbnRzIFdTRExNb2RlbExvY2F0b3IKLSAgewotICAgIC8vSWRSZXNvbHZlciBpZFJlc29sdmVyID0gbmV3IElkUmVzb2x2ZXJJbXBsKG51bGwsIHRydWUpOwotICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXIgcmVzb2x2ZXIgPSBVUklSZXNvbHZlclBsdWdpbi5jcmVhdGVSZXNvbHZlcigpOwotCi0gICAgSW50ZXJuYWxVUklSZXNvbHZlcigpCi0gICAgeyAgCi0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyByZXNvbHZlVVJJKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhdGlvbikKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVzb2x2ZWRMb2NhdGlvbiA9IHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBuYW1lc3BhY2UsIGxvY2F0aW9uKTsKLQotICAgICAgLy8gaGVyZSdzIGFuIHVnbHkgaGFjay4uLiBQbGF0Zm9ybS5yZXNvbHZlKCkgcmV0dXJucyBXaW5kb3dzIGZpbGVzIHdpdGggdGhlIHBhdHRlcm4gImZpbGU6RDovaGVsbG8ueHNkIgotICAgICAgLy8gYnV0IEVNRidzIFVSSSBjbGFzcyBleHBlY3RzIGEgcGF0dGVybiBsaWtlIHRoaXMgImZpbGU6Ly8vRDovaGVsbG8ueHNkIgotICAgICAgLy8gICAgICAgIAotICAgICAgaWYgKHJlc29sdmVkTG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLQkJU3RyaW5nIGZpbGVQcm90b2NvbCA9ICJmaWxlOiI7ICAgICAgCSAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmIChyZXNvbHZlZExvY2F0aW9uLnN0YXJ0c1dpdGgoZmlsZVByb3RvY29sKSAmJiAhcmVzb2x2ZWRMb2NhdGlvbi5zdGFydHNXaXRoKGZpbGVQcm90b2NvbCArICIvIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIHJlc29sdmVkTG9jYXRpb24gPSByZXNvbHZlZExvY2F0aW9uLnN1YnN0cmluZyhmaWxlUHJvdG9jb2wubGVuZ3RoKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJlc29sdmVkTG9jYXRpb24gPSBVUklIZWxwZXIuYWRkSW1wbGllZEZpbGVQcm90b2NvbChyZXNvbHZlZExvY2F0aW9uKTsKLSAgICAgIH0KLSAgICAgIC8vIGVuZCB1Z2x5IGhhY2sKLSAgICAgIHJldHVybiByZXNvbHZlZExvY2F0aW9uOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMU2V0Q29tcG9uZW50SGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFNldENvbXBvbmVudEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2I0NzIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMU2V0Q29tcG9uZW50SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuQWRkRWxlbWVudERlY2xhcmF0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuQWRkSW1wb3J0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuQWRkV1NJU2NoZW1hSW1wb3J0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNESW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYUNvbnRlbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2V0Q29tcG9uZW50SGVscGVyIHsKLSAgICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgICBwcml2YXRlIElGaWxlIGN1cnJlbnRJRmlsZTsKLSAgICAKLSAgICBwdWJsaWMgV1NETFNldENvbXBvbmVudEhlbHBlcihJRmlsZSBpRmlsZSwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgICAgIGN1cnJlbnRJRmlsZSA9IGlGaWxlOwotICAgICAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRXU0RMQ29tcG9uZW50KFdTRExFbGVtZW50IGlucHV0RWxlbWVudCwgU3RyaW5nIHByb3BlcnR5LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMpIHsKLSAgICAgICAgYWRkSW1wb3J0SWZOZWNlc3Nhcnkoc3BlYyk7Ci0gICAgICAgIFN0cmluZyBjb21wb25lbnRPYmplY3QgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoc3BlYyk7Ci0KLSAgICAgICAgb3JnLnczYy5kb20uRWxlbWVudCB3c2RsRWxlbWVudCA9IGlucHV0RWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICAgIAotICAgICAgICB3c2RsRWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcGVydHksIGNvbXBvbmVudE9iamVjdCk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0WFNEVHlwZUNvbXBvbmVudChQYXJ0IHBhcnQsIENvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYykgewotICAgICAgICBpZiAoc3BlYy5nZXROYW1lKCkgIT0gbnVsbCAmJiBzcGVjLmdldFF1YWxpZmllcigpICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFkZEltcG9ydElmTmVjZXNzYXJ5KHNwZWMpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBjb21wb25lbnRPYmplY3QgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoc3BlYyk7Ci0gICAgICAgIAotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZSgoUGFydCkgcGFydCwgdHJ1ZSwgY29tcG9uZW50T2JqZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0WFNERWxlbWVudENvbXBvbmVudChQYXJ0IHBhcnQsIENvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYykgewotICAgICAgICBhZGRJbXBvcnRJZk5lY2Vzc2FyeShzcGVjKTsKLSAgICAgICAgU3RyaW5nIGNvbXBvbmVudE9iamVjdCA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShzcGVjKTsKLSAgICAgICAgCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKChQYXJ0KSBwYXJ0LCBmYWxzZSwgY29tcG9uZW50T2JqZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgLyoKLSAgICAgKiBSZXR1cm4gdGhlIHByZWZpeGVkIGNvbXBvbmVudCBuYW1lIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4KLSAgICAgKiBDb21wb25lbnRTcGVjaWZpY2F0aW9uIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBzcGVjLmdldE5hbWUoKTsKLSAgICAgICAgTGlzdCBwcmVmaXhlcyA9IGdldFByZWZpeGVzKGRlZmluaXRpb24sIHNwZWMuZ2V0UXVhbGlmaWVyKCkpOwotICAgICAgICBpZiAocHJlZml4ZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgbmFtZSA9IHByZWZpeGVzLmdldCgwKSArICI6IiArIG5hbWU7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfSAgICAgICAgIAotICAgICAgICAgIAotICAgIHByaXZhdGUgTGlzdCBnZXRQcmVmaXhlcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBuYW1lc3BhY2UpIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBNYXAgbWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLSAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB0aGVOYW1lc3BhY2UgPSAoU3RyaW5nKSBtYXAuZ2V0KHByZWZpeCk7Ci0gICAgICAgICAgICBpZiAodGhlTmFtZXNwYWNlICE9IG51bGwgJiYgdGhlTmFtZXNwYWNlLmVxdWFscyhuYW1lc3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQocHJlZml4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgYWRkSW1wb3J0SWZOZWNlc3NhcnkoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjKSB7Ci0gICAgICAgIGJvb2xlYW4gZm91bmRNYXRjaCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgaXRzZWxmCi0gICAgICAgIFBhdGggY3VycmVudEZpbGVMb2NhdGlvbiA9IG5ldyBQYXRoKGN1cnJlbnRJRmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoc3BlYy5nZXRGaWxlKCkgPT0gbnVsbCB8fCBjdXJyZW50RmlsZUxvY2F0aW9uLmVxdWFscyhzcGVjLmdldEZpbGUoKS5nZXRMb2NhdGlvbigpKSkgewotICAgICAgICAJLy8gaWYgdGhlIENvbXBvbmVudFNwZWNpZmljYXRpb24ncyBnZXRGaWxlKCkgcmV0dXJucyBudWxsLCBmb3JnZXQgYWJvdXQgYWRkaW5nIG5lY2Vzc2FyeSBpbXBvcnRzCi0gICAgICAgICAgICBmb3VuZE1hdGNoID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgcmVndWxhciBJbXBvcnRzCi0gICAgICAgIGlmICghZm91bmRNYXRjaCkgewotICAgICAgICAgICAgSXRlcmF0b3IgaW1wb3J0c0l0ID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHdoaWxlIChpbXBvcnRzSXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGltcG9ydExvY2F0aW9uID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBJbXBvcnRJbXBsIGltcG9ydEl0ZW0gPSAoSW1wb3J0SW1wbCkgaW1wb3J0c0l0Lm5leHQoKTsKLSAgICAgICAgICAgICAgICBpbXBvcnRJdGVtLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpbXBvcnRJdGVtLmdldEVTY2hlbWEoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBpbXBvcnRJdGVtLmdldEVTY2hlbWEoKTsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0TG9jYXRpb24gPSBnZXROb3JtYWxpemVkTG9jYXRpb24oc2NoZW1hLmdldFNjaGVtYUxvY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbiBpbXBvcnREZWZpbml0aW9uID0gaW1wb3J0SXRlbS5nZXRFRGVmaW5pdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBpbXBvcnRMb2NhdGlvbiA9IGdldE5vcm1hbGl6ZWRMb2NhdGlvbihpbXBvcnREZWZpbml0aW9uLmdldExvY2F0aW9uKCkpOyAKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgCi0gICAgICAgICAgICAgICAgaWYgKHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCkuZXF1YWxzKG5ldyBQYXRoKGltcG9ydExvY2F0aW9uKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgaW5saW5lIFNjaGVtYXMKLSAgICAgICAgaWYgKCFmb3VuZE1hdGNoKSB7Ci0gICAgICAgICAgICBMaXN0IGltcG9ydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkZWZpbml0aW9uLmdldEVUeXBlcygpICE9IG51bGwpIHsKLQkgICAgICAgICAgICBJdGVyYXRvciBpdCA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCSAgICAgICAgICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlZUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLQkgICAgICAgICAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IGVlRWxlbWVudC5nZXRTY2hlbWEoKTsKLQkgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSA9PSBudWxsIHx8IHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKS5lcXVhbHMoIiIpKSB7ICAgICAgICAgICAgICAgICAgICAgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3IgY29udGVudHMgPSBzY2hlbWEuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOwotCSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvbnRlbnRzLmhhc05leHQoKSkgewotCSAgICAgICAgICAgICAgICAgICAgICAgIFhTRFNjaGVtYUNvbnRlbnQgY29udGVudCA9IChYU0RTY2hlbWFDb250ZW50KSBjb250ZW50cy5uZXh0KCk7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBYU0RJbXBvcnQpIHsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0cy5hZGQoY29udGVudCk7ICAgICAgICAgICAgIAotCSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgfQotCSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSXRlcmF0b3IgaW1wb3J0SXQgPSBpbXBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoaW1wb3J0SXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgWFNESW1wb3J0IGltcG9ydEl0ZW0gPSAoWFNESW1wb3J0KSBpbXBvcnRJdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgWFNEU2NoZW1hIHJlc29sdmVkU2NoZW1hID0gaW1wb3J0SXRlbS5nZXRSZXNvbHZlZFNjaGVtYSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyByZXNvbHZlZFN0cmluZyA9IHJlc29sdmVkU2NoZW1hLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGltcG9ydExvY2F0aW9uID0gZ2V0Tm9ybWFsaXplZExvY2F0aW9uKHJlc29sdmVkU3RyaW5nKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3BlYy5nZXRGaWxlKCkuZ2V0TG9jYXRpb24oKS5lcXVhbHMobmV3IFBhdGgoaW1wb3J0TG9jYXRpb24pKSkgewotICAgICAgICAgICAgICAgICAgICBmb3VuZE1hdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWZvdW5kTWF0Y2gpIHsKLSAgICAgICAgICAgIGJvb2xlYW4gd3NpU3R5bGVJbXBvcnQgPSBpc1hTRFNjaGVtYUZpbGUoc3BlYyk7Ci0gICAgICAgICAgICBpZiAod3NpU3R5bGVJbXBvcnQpIHsKLSAgICAgICAgICAgICAgICBBZGRFbGVtZW50RGVjbGFyYXRpb25BY3Rpb24gYWN0aW9uID0gbmV3IEFkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbihkZWZpbml0aW9uLCBzcGVjLmdldFF1YWxpZmllcigpLCAieHNkIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBhY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gVVJJSGVscGVyLmdldFJlbGF0aXZlVVJJKHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCksIGN1cnJlbnRJRmlsZS5nZXRMb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBBZGRXU0lTY2hlbWFJbXBvcnRBY3Rpb24gYWRkSW1wb3J0ID0gbmV3IEFkZFdTSVNjaGVtYUltcG9ydEFjdGlvbihkZWZpbml0aW9uLCBzcGVjLmdldFF1YWxpZmllcigpLCBsb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgYWRkSW1wb3J0LnJ1bigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld1NlbGVjdGVkRmlsZUxvYyA9IHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50RmlsZUxvYyA9IGdldE5vcm1hbGl6ZWRMb2NhdGlvbihkZWZpbml0aW9uLmdldExvY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgIFN0cmluZyByZWxhdGl2ZUxvYyA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZVJlbGF0aXZlVVJJKG5ld1NlbGVjdGVkRmlsZUxvYywgY3VycmVudEZpbGVMb2MsIHRydWUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZGVmaW5pdGlvbik7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGRlZmluaXRpb24uZ2V0UHJlZml4KFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gc3BlYy5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBZGRJbXBvcnRBY3Rpb24gYWRkSW1wb3J0QWN0aW9uID0gbmV3IEFkZEltcG9ydEFjdGlvbihudWxsLCBkZWZpbml0aW9uLCBkZWZpbml0aW9uRWxlbWVudCwgcHJlZml4LCBuYW1lc3BhY2UsIHJlbGF0aXZlTG9jKTsKLSAgICAgICAgICAgICAgICBhZGRJbXBvcnRBY3Rpb24ucnVuKCk7ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RyaW5nIHVuaXF1ZVByZWZpeCA9IGdldFVuaXF1ZVByZWZpeChkZWZpbml0aW9uLCBwcmVmaXgpOyAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmluaXRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHVuaXF1ZVByZWZpeCwgbmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIC8qCi0gICAgICogVHJ5IHRvIGRldGVybWluZSBpZiB0aGUgcGFzc2VkIGluIENvbXBvbmVudFNwZWNpZmljYXRpb24gcmVmZXJzIHRvCi0gICAgICogYW4gWFNEIG9yIFdTREwgZmlsZS4gIElmIGl0J3MgYW4gWFNELCByZXR1cm4gdHJ1ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNYU0RTY2hlbWFGaWxlKENvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYykgewotICAgICAgICBTdHJpbmcgZmlsZUxvY2F0aW9uID0gc3BlYy5nZXRGaWxlKCkuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0gICAgICAgIGludCBwZXJpb2RJbmRleCA9IGZpbGVMb2NhdGlvbi5sYXN0SW5kZXhPZigiLiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAotICAgICAgICBpZiAocGVyaW9kSW5kZXggPiAwKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZUxvY2F0aW9uLnN1YnN0cmluZyhwZXJpb2RJbmRleCArIDEpOwotICAgICAgICAgICAgaWYgKGV4dGVuc2lvbi5lcXVhbHNJZ25vcmVDYXNlKCJ4c2QiKSkgeyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgU3RyaW5nIGdldFVuaXF1ZVByZWZpeChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBpbml0UHJlZml4KSB7Ci0gICAgICBTdHJpbmcgdW5pcXVlUHJlZml4OwotICAgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotCi0gICAgICBpZiAoZGVmaW5pdGlvbi5nZXROYW1lc3BhY2UoaW5pdFByZWZpeCkgPT0gbnVsbCkgewotICAgICAgICB1bmlxdWVQcmVmaXggPSBpbml0UHJlZml4OwotICAgICAgfQotICAgICAgZWxzZSB7Ly8gaWYgdXNlZCwgdGhlbiB0cnkgdG8gY3JlYXRlIGEgdW5pcXVlIG9uZQotICAgICAgICBTdHJpbmcgdGVtcFByZWZpeCA9IGluaXRQcmVmaXg7Ci0gICAgICAgIGludCBpID0gMTsKLSAgICAgICAgd2hpbGUobWFwLmNvbnRhaW5zS2V5KHRlbXBQcmVmaXggKyBpKSkgewotICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgICAgICB1bmlxdWVQcmVmaXggPSB0ZW1wUHJlZml4ICsgaTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB1bmlxdWVQcmVmaXg7Ci0gICAgfSAKLSAgICAKLSAgICBwcml2YXRlIFN0cmluZyBnZXROb3JtYWxpemVkTG9jYXRpb24oU3RyaW5nIGxvY2F0aW9uKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTChsb2NhdGlvbik7Ci0gICAgICAgICAgICBVUkwgcmVzb2x2ZWRVUkwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKHVybCk7Ci0gICAgICAgICAgICBsb2NhdGlvbiA9IHJlc29sdmVkVVJMLmdldFBhdGgoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBsb2NhdGlvbjsgCi0gICAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvWFNEQ29tcG9uZW50SGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvWFNEQ29tcG9uZW50SGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzNmOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1hTRENvbXBvbmVudEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkWFNEU2NoZW1hQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5jb21tYW5kcy5BZGRYU0RFbGVtZW50Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci0KLS8qKgotICogSW5wdXQgY3JlYXRlSW5wdXQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIHN0eWxlKSAtLS0gY3JlYXRlIGRlZmF1bHQgbWVzc2FnZS9wYXJ0L2V0Yy4KLSAqIE9iamVjdCBjcmVhdGVJbnB1dFBhcmFtZXRlcihPcGVyYXRpb24gb3BlcmF0aW9uLCBJbnB1dCBpbnB1dCwgU3R5bGUgc3R5bGUpIC0tCi0gKiAKLSAqIENvbW1hbmQgZ2V0Q3JlYXRlSW5wdXRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIElucHV0IGlucHV0LCBTdHlsZSBzdHlsZSkKLSAqIAotICogTWVzc2FnZS9wYXJ0L0VsZW1lbnQKLSAqIE1lc3NhZ2UvcGFydC9FbGVtZW50L3NlcXVlbmNlL0VsZW1lbnQKLSAqICh4KSBNZXNzYWdlL3BhcnQKLSAqLwotcHVibGljIGNsYXNzIFhTRENvbXBvbmVudEhlbHBlciB7Ci0JLyoKLQkgKiBDcmVhdGUgYW4gWFNERWxlbWVudCB3aXRoIHR5cGUgYW5vbnltb3VzLiAgU2V0IHRoZSBnaXZlbiBwYXJ0IHRvIHJlZmVyZW5jZSB0aGUgbmV3bHkgY3JlYXRlZAotCSAqIFhTREVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlQW5vbnltb3VzWFNERWxlbWVudERlZmluaXRpb24oU3RyaW5nIGJhc2VOYW1lLCBQYXJ0IHBhcnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGFub25FbGVtZW50ID0gY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgYmFzZU5hbWUsIHBhcnQpOwotCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gbmV3QW5vbiA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbigpOwotCQlYU0RQYXJ0aWNsZSBuZXdYU0RQYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCVhTRE1vZGVsR3JvdXAgbmV3WFNETW9kZWxHcm91cCA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRE1vZGVsR3JvdXAoKTsKLQkJbmV3WFNETW9kZWxHcm91cC5zZXRDb21wb3NpdG9yKFhTRENvbXBvc2l0b3IuU0VRVUVOQ0VfTElURVJBTCk7Ci0JCQotCQlhbm9uRWxlbWVudC5zZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbihuZXdBbm9uKTsKLQkJbmV3WFNEUGFydGljbGUuc2V0Q29udGVudChuZXdYU0RNb2RlbEdyb3VwKTsKLQkJbmV3QW5vbi5zZXRDb250ZW50KG5ld1hTRFBhcnRpY2xlKTsKLQkJCi0JCXJldHVybiBhbm9uRWxlbWVudDsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBiYXNlTmFtZSwgT2JqZWN0IGNvbnRleHQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSBudWxsOwotCQkKLQkJaWYgKGNvbnRleHQgaW5zdGFuY2VvZiBQYXJ0KSB7Ci0JCQlBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChkZWZpbml0aW9uLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCQotCQkJLy8gRmluZCBhIHVuaXF1ZSBuYW1lCi0JCQlYU0RTY2hlbWEgeHNkU2NoZW1hID0gY29tbWFuZC5nZXRTY2hlbWEoKTsKLQkJCVN0cmluZyBuYW1lID0gTmFtZVV0aWwuZ2V0WFNERWxlbWVudE5hbWUoYmFzZU5hbWUsIHhzZFNjaGVtYSk7Ci0JCQljb21tYW5kLnJ1bihuYW1lKTsKLQkJCS8vIFRoZSAnd29ya2Fyb3VuZCcgYmVsb3cgaXMgY2F1c2luZyBtZSB0byBoYW5nLi4uLi4gIFRoZSBsYXRlc3QgV1RQIGlzIG5lZWRlZC4KLS8vCQkJeHNkRWxlbWVudCA9IHhzZFNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKG5hbWUpOwotCQkJeHNkRWxlbWVudCA9IGNvbW1hbmQuZ2V0WFNERWxlbWVudCgpOwotCQl9Ci0JCWVsc2UgaWYgKGNvbnRleHQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgY29udGV4dDsKLQkJCVhTRFBhcnRpY2xlIG5ld1BhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJCVN0cmluZyBuYW1lID0gTmFtZVV0aWwuZ2V0WFNERWxlbWVudE5hbWUoYmFzZU5hbWUsIG1vZGVsR3JvdXApOwotCQkJCi0JCQlBZGRYU0RFbGVtZW50Q29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTREVsZW1lbnRDb21tYW5kKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1hNTF9TQ0hFTUFfRUxFTUVOVCwgbW9kZWxHcm91cCk7Ci0JCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkJCXhzZEVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBjb21tYW5kLmdldEFkZGVkQ29tcG9uZW50KCk7Ci0JCQl4c2RFbGVtZW50LnNldE5hbWUobmFtZSk7Ci0JCQl4c2RFbGVtZW50LnNldFR5cGVEZWZpbml0aW9uKGdldFhTRFN0cmluZ1R5cGUobW9kZWxHcm91cCkpOwotCQkJCi0JCQluZXdQYXJ0aWNsZS5zZXRDb250ZW50KHhzZEVsZW1lbnQpOwotCQkJbW9kZWxHcm91cC5nZXRDb250ZW50cygpLmFkZChuZXdQYXJ0aWNsZSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlBZGRYU0RFbGVtZW50Q29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTREVsZW1lbnRDb21tYW5kKCk7Ci0JCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkJCXhzZEVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBjb21tYW5kLmdldEFkZGVkQ29tcG9uZW50KCk7Ci0JCQl4c2RFbGVtZW50LnNldE5hbWUoYmFzZU5hbWUpOwotCQl9Ci0JCQotCQlyZXR1cm4geHNkRWxlbWVudDsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoWFNERWxlbWVudERlY2xhcmF0aW9uIHBhcmVudCwgWFNERWxlbWVudERlY2xhcmF0aW9uIGNoaWxkKSB7Ci0JCWlmIChwYXJlbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGFub25UeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgcGFyZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0JCQlpZiAoYW5vblR5cGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgYW5vblR5cGUuZ2V0Q29udGVudCgpOwotCQkJCWlmIChwYXJ0aWNsZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJCS8vIENyZWF0ZSBYU0RQYXJ0aWNsZQotCQkJCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgcGFydGljbGUuZ2V0Q29udGVudCgpOwotCQkJCQlhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKG1vZGVsR3JvdXAsIGNoaWxkKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCS8vIENyZWF0ZSBYU0RNb2RlbEdyb3VwIC0tIFhTRFBhcnRpY2xlCi0JCQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAocGFydGljbGUsIGNoaWxkKTsKLQkJCQl9CQkJCSAgCi0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBDcmVhdGUgWFNEUGFydGljbGUgLS0+IFhTRE1vZGVsR3JvdXAgLS0+IFhTRFBhcnRpY2xlCi0JCQkJWFNEUGFydGljbGUgbmV3UGFydGljbGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RQYXJ0aWNsZSgpOwotCQkJCWFub25UeXBlLnNldENvbnRlbnQobmV3UGFydGljbGUpOwotCQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAobmV3UGFydGljbGUsIGNoaWxkKTsKLQkJCX0JCQkgIAotCQl9Ci0JCWVsc2UgewotCQkJLy8gQ3JlYXRlIEFub255bW91cyBUeXBlIC0tPiBYU0RQYXJ0aWNsZSAtLT4gWFNETW9kZWxHcm91cCAtLT4gWFNEUGFydGljbGUKLQkJCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBuZXdBbm9uVHlwZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbigpOwotCQkJcGFyZW50LnNldEFub255bW91c1R5cGVEZWZpbml0aW9uKG5ld0Fub25UeXBlKTsKLQkJCQotCQkJWFNEUGFydGljbGUgbmV3UGFydGljbGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RQYXJ0aWNsZSgpOwotCQkJbmV3QW5vblR5cGUuc2V0Q29udGVudChuZXdQYXJ0aWNsZSk7Ci0JCQlhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKG5ld1BhcnRpY2xlLCBjaGlsZCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoWFNEUGFydGljbGUgcGFydGljbGUsIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjaGlsZCkgewotCQlYU0RNb2RlbEdyb3VwIG5ld1hTRE1vZGVsR3JvdXAgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RNb2RlbEdyb3VwKCk7Ci0JCW5ld1hTRE1vZGVsR3JvdXAuc2V0Q29tcG9zaXRvcihYU0RDb21wb3NpdG9yLlNFUVVFTkNFX0xJVEVSQUwpOwkJCQkJICAKLQkJcGFydGljbGUuc2V0Q29udGVudChuZXdYU0RNb2RlbEdyb3VwKTsKLQkJYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChuZXdYU0RNb2RlbEdyb3VwLCBjaGlsZCk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCwgWFNERWxlbWVudERlY2xhcmF0aW9uIGNoaWxkKSB7Ci0JCS8vIENyZWF0ZSBYU0RQYXJ0aWNsZQotCQlYU0RQYXJ0aWNsZSBuZXdQYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCW5ld1BhcnRpY2xlLnNldENvbnRlbnQoY2hpbGQpOwotCQltb2RlbEdyb3VwLmdldENvbnRlbnRzKCkuYWRkKG5ld1BhcnRpY2xlKTsKLQl9Ci0JCi0JLyoKLQkgKiBSZXR1cm4gaXQncyBYU0RNb2RlbEdyb3VwLiAgSWYgb25lIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgb25lCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RNb2RlbEdyb3VwIGdldFhTRE1vZGVsR3JvdXAoWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQsIERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSBudWxsOwotCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gYW5vblR5cGUgPSBudWxsOwotCQkKLQkJaWYgKHhzZEVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotCQkJYW5vblR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB4c2RFbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0JCX0JCSAgCi0JCWVsc2UgewotCQkJLy8gQ3JlYXRlIEFub255bW91cyBUeXBlCi0JCQlhbm9uVHlwZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbigpOwotCQkJYW5vblR5cGUuc2V0TmFtZSgiTmV3Q29tcGxleFR5cGVOYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJCWdldFhTRFNjaGVtYShkZWZpbml0aW9uKS5nZXRDb250ZW50cygpLmFkZChhbm9uVHlwZSk7Ci0JCQl4c2RFbGVtZW50LnNldEFub255bW91c1R5cGVEZWZpbml0aW9uKGFub25UeXBlKTsKLQkJfQotCQkKLQkJaWYgKGFub25UeXBlICE9IG51bGwpIHsKLQkJCW1vZGVsR3JvdXAgPSBnZXRYU0RNb2RlbEdyb3VwKGFub25UeXBlKTsKLQkJfQotCQkKLQkJcmV0dXJuIG1vZGVsR3JvdXA7Ci0JfQotCQotCS8qCi0JICogUmV0dXJuIGl0J3MgWFNETW9kZWxHcm91cC4gIElmIG9uZSBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIG9uZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNETW9kZWxHcm91cCBnZXRYU0RNb2RlbEdyb3VwKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB4c2RDb21wbGV4VHlwZSkgewotCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSBudWxsOwotCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IG51bGw7Ci0JCS8vIENoZWNrIGZvciBYU0RQYXJ0aWNsZQotCQlpZiAoeHNkQ29tcGxleFR5cGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCXBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSB4c2RDb21wbGV4VHlwZS5nZXRDb250ZW50KCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCQltb2RlbEdyb3VwID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNETW9kZWxHcm91cCgpOwotCQkJbW9kZWxHcm91cC5zZXRDb21wb3NpdG9yKFhTRENvbXBvc2l0b3IuU0VRVUVOQ0VfTElURVJBTCk7CQkJICAKLQkJCXBhcnRpY2xlLnNldENvbnRlbnQobW9kZWxHcm91cCk7Ci0JCQl4c2RDb21wbGV4VHlwZS5zZXRDb250ZW50KHBhcnRpY2xlKTsKLQkJfQotCQkKLQkJLy8gQ2hlY2sgZm9yIFhTRE1vZGVsR3JvdXAKLQkJaWYgKHBhcnRpY2xlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApIHsKLQkJCW1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgcGFydGljbGUuZ2V0Q29udGVudCgpOwotCQl9Ci0JCWVsc2UgewotCQkJbW9kZWxHcm91cCA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRE1vZGVsR3JvdXAoKTsKLQkJCW1vZGVsR3JvdXAuc2V0Q29tcG9zaXRvcihYU0RDb21wb3NpdG9yLlNFUVVFTkNFX0xJVEVSQUwpOwkJCSAgCi0JCQlwYXJ0aWNsZS5zZXRDb250ZW50KG1vZGVsR3JvdXApOwotCQl9Ci0JCQotCQlyZXR1cm4gbW9kZWxHcm91cDsKLQl9Ci0JCi0JLyoKLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaWlvbihTdHJpbmcgY29tcGxleFR5cGVOYW1lLCBQYXJ0IHBhcnQpIHsKLQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIG5ld0NvbXBsZXhUeXBlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKCk7Ci0JCVhTRFBhcnRpY2xlIG5ld1hTRFBhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJWFNETW9kZWxHcm91cCBuZXdYU0RNb2RlbEdyb3VwID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNETW9kZWxHcm91cCgpOwotCQluZXdYU0RNb2RlbEdyb3VwLnNldENvbXBvc2l0b3IoWFNEQ29tcG9zaXRvci5TRVFVRU5DRV9MSVRFUkFMKTsKLQkJCi0JCW5ld0NvbXBsZXhUeXBlLnNldE5hbWUoY29tcGxleFR5cGVOYW1lKTsKLQkJbmV3Q29tcGxleFR5cGUuc2V0Q29udGVudChuZXdYU0RQYXJ0aWNsZSk7Ci0JCW5ld1hTRFBhcnRpY2xlLnNldENvbnRlbnQobmV3WFNETW9kZWxHcm91cCk7Ci0JCWdldFhTRFNjaGVtYShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSkuZ2V0Q29udGVudHMoKS5hZGQobmV3Q29tcGxleFR5cGUpOwotCQkKLQkJcmV0dXJuIG5ld0NvbXBsZXhUeXBlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChYU0RDb21wbGV4VHlwZURlZmluaXRpb24gcGFyZW50LCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY2hpbGQpIHsKLQkJaWYgKHBhcmVudC5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotCQkJWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpIHBhcmVudC5nZXRDb250ZW50KCk7Ci0JCQlpZiAocGFydGljbGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJCS8vIENyZWF0ZSBYU0RQYXJ0aWNsZQotCQkJCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwKSBwYXJ0aWNsZS5nZXRDb250ZW50KCk7Ci0JCQkJYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChtb2RlbEdyb3VwLCBjaGlsZCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBDcmVhdGUgWFNETW9kZWxHcm91cCAtLSBYU0RQYXJ0aWNsZQotCQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAocGFydGljbGUsIGNoaWxkKTsKLQkJCX0JCQkJICAKLQkJfQotCQllbHNlIHsKLQkJCS8vIENyZWF0ZSBYU0RQYXJ0aWNsZSAtLT4gWFNETW9kZWxHcm91cCAtLT4gWFNEUGFydGljbGUKLQkJCVhTRFBhcnRpY2xlIG5ld1BhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJCXBhcmVudC5zZXRDb250ZW50KG5ld1BhcnRpY2xlKTsKLQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAobmV3UGFydGljbGUsIGNoaWxkKTsKLQkJfQotCX0KLQkKLQkvKgotCSAqIFJldHVybiB0aGUgaW5saW5lIFhTRFNjaGVtYSBhc3NvY2lhdGVkIHdpdGggdGhpcyBXU0RMLgotCSAqIExvb2sgZm9yIHRoZSBpbmxpbmUgWFNEU2NoZW1hIHdpdGggdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSBXU0RMLgotCSAqIElmIHRoaXMgaW5saW5lIFhTRFNjaGVtYSBkb2VzIG5vdCBleGlzdHMsIGNyZWF0ZSBpdC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRFNjaGVtYSBnZXRYU0RTY2hlbWEoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCVhTRFNjaGVtYSBzY2hlbWEgPSBudWxsOwotCQlTdHJpbmcgd3NkbFRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQotCQlUeXBlcyB0eXBlcyA9IChUeXBlcykgZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotCQlpZiAodHlwZXMgIT0gbnVsbCkgewotCQkJCi0JCQlJdGVyYXRvciBlZUl0ID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChlZUl0Lmhhc05leHQoKSkgewotCQkJCU9iamVjdCBlZUVsZW1lbnQgPSBlZUl0Lm5leHQoKTsKLQkJCQlpZiAoZWVFbGVtZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHsKLQkJCQkJWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVlRWxlbWVudDsKLQkJCQkJaWYgKGVlLmdldFNjaGVtYSgpLmdldFRhcmdldE5hbWVzcGFjZSgpICE9IG51bGwgJiYKLQkJCQkJCWVlLmdldFNjaGVtYSgpLmdldFRhcmdldE5hbWVzcGFjZSgpLmVxdWFscyh3c2RsVGFyZ2V0TmFtZXNwYWNlKSkgewotCQkJCQkJc2NoZW1hID0gZWUuZ2V0U2NoZW1hKCk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQkJaWYgKHNjaGVtYSA9PSBudWxsKSB7Ci0JCQkvLyBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgc2NoZW1hCi0JCQlBZGRYU0RTY2hlbWFDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNEU2NoZW1hQ29tbWFuZChkZWZpbml0aW9uKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlZUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCXNjaGVtYSA9IGVlRWxlbWVudC5nZXRTY2hlbWEoKTsKLQkJfQotCQkKLQkJcmV0dXJuIHNjaGVtYTsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gZ2V0WFNEU3RyaW5nVHlwZShYU0RDb21wb25lbnQgY29tcG9uZW50KSB7Ci0JCVhTRFNjaGVtYSBzY2hlbWEgPSBjb21wb25lbnQuZ2V0U2NoZW1hKCk7Ci0JCXJldHVybiBzY2hlbWEuZ2V0U2NoZW1hRm9yU2NoZW1hKCkucmVzb2x2ZVNpbXBsZVR5cGVEZWZpbml0aW9uKCJzdHJpbmciKTsgLy8kTk9OLU5MUy0xJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9YU0RUeXBlU3lzdGVtUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9YU0RUeXBlU3lzdGVtUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY5MTNjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvWFNEVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTREltcG9ydEltcGw7Ci0KLXB1YmxpYyBjbGFzcyBYU0RUeXBlU3lzdGVtUHJvdmlkZXIgaW1wbGVtZW50cyBJVHlwZVN5c3RlbVByb3ZpZGVyCi17Ci0gICAgcHVibGljIExpc3QgZ2V0UHJlZml4ZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBNYXAgbWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB0aGVOYW1lc3BhY2UgPSAoU3RyaW5nKSBtYXAuZ2V0KHByZWZpeCk7Ci0gICAgICAgICAgICBpZiAodGhlTmFtZXNwYWNlICE9IG51bGwgJiYgdGhlTmFtZXNwYWNlLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKHByZWZpeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgcHVibGljIExpc3QgZ2V0UHJlZml4ZWROYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpCi0gICAgewotICAgICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldFByZWZpeGVzKGRlZmluaXRpb24sIG5hbWVzcGFjZSkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IChwcmVmaXggIT0gbnVsbCAmJiBwcmVmaXgubGVuZ3RoKCkgPiAwKSA/IHByZWZpeCArICI6IiArIGxvY2FsTmFtZSA6IGxvY2FsTmFtZTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgbGlzdC5hZGQobmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkTmFtZWRDb21wb25lbnRzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTGlzdCBsaXN0LCBMaXN0IG5hbWVkQ29tcG9uZW50cykKLSAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG5hbWVkQ29tcG9uZW50cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhTRE5hbWVkQ29tcG9uZW50IGNvbXBvbmVudCA9IChYU0ROYW1lZENvbXBvbmVudCkgaS5uZXh0KCk7Ci0gICAgICAgICAgICBsaXN0LmFkZEFsbChnZXRQcmVmaXhlZE5hbWVzKGRlZmluaXRpb24sIGNvbXBvbmVudC5nZXRUYXJnZXROYW1lc3BhY2UoKSwgY29tcG9uZW50LmdldE5hbWUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdFdTSVN0eWxlSW1wb3J0cyhYU0RTY2hlbWEgeHNkU2NoZW1hKQotICAgIHsKLSAgICAgICAgaWYgKHhzZFNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSB4c2RTY2hlbWEuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWFNEU2NoZW1hQ29udGVudCBjb250ZW50ID0gKFhTRFNjaGVtYUNvbnRlbnQpIGkubmV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgWFNESW1wb3J0SW1wbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFhTREltcG9ydEltcGwgeHNkSW1wb3J0ID0gKFhTREltcG9ydEltcGwpIGNvbnRlbnQ7Ci0JCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKXhzZEltcG9ydC5nZXRSZXNvbHZlZFNjaGVtYSgpOwkJCQkJCi0JCQkJCWlmIChzY2hlbWEgPT0gbnVsbCkKLQkJCQkJewotCQkJCQkJc2NoZW1hID0geHNkSW1wb3J0LmltcG9ydFNjaGVtYSgpOwotCQkJCQl9ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZVR5cGVOYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIGludCB0eXBlTmFtZUNhdGVnb3J5KQotICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHR5cGVOYW1lQ2F0ZWdvcnkgPT0gSVR5cGVTeXN0ZW1Qcm92aWRlci5CVUlMVF9JTl9UWVBFKSB7Ci0gICAgICAgIAlsaXN0ID0gZ2V0QnVpbHRJblR5cGVOYW1lc0xpc3QoZGVmaW5pdGlvbik7ICAgICAgICAJCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgIAlUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0gICAgICAgIAlpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgICAgCXsKLSAgICAgICAgCQlmb3IgKEl0ZXJhdG9yIGkgPSB0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAJCXsKLSAgICAgICAgCQkJT2JqZWN0IG8gPSBpLm5leHQoKTsKLSAgICAgICAgCQkJaWYgKG8gaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgICAgCQkJewotICAgICAgICAJCQkJWFNEU2NoZW1hIHNjaGVtYSA9ICgoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIG8pLmdldFNjaGVtYSgpOwotICAgICAgICAJCQkJaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICAJCQkJewotICAgICAgICAJCQkJCWluaXRXU0lTdHlsZUltcG9ydHMoc2NoZW1hKTsKLSAgICAgICAgCQkJCQlhZGROYW1lZENvbXBvbmVudHMoZGVmaW5pdGlvbiwgbGlzdCwgc2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpKTsKLSAgICAgICAgCQkJCX0KLSAgICAgICAgCQkJfQotICAgICAgICAJCX0KLSAgICAgICAgCX0KLSAgICAgICAgCi0gICAgICAgIAlmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAJewotICAgICAgICAJCUltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KSBpLm5leHQoKTsKLSAgICAgICAgCQlYU0RTY2hlbWEgc2NoZW1hID0gdGhlSW1wb3J0LmdldEVTY2hlbWEoKTsKLSAgICAgICAgCQlpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIAkJewotICAgICAgICAJCQlhZGROYW1lZENvbXBvbmVudHMoZGVmaW5pdGlvbiwgbGlzdCwgc2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpKTsKLSAgICAgICAgCQl9Ci0gICAgICAgIAl9Ci0gICAgICAgIAlsaXN0LmFkZEFsbChnZXRCdWlsdEluVHlwZU5hbWVzTGlzdChkZWZpbml0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0JCXJldHVybiBsaXN0OyAgICAgICAgCi0gICAgfQotICAgIAotICAgIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZVR5cGVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgWFNEU2NoZW1hIHNjaGVtYSwgaW50IHR5cGVOYW1lQ2F0ZWdvcnkpCi0gICAgewotICAgICAgICBMaXN0IGtlZXBUeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgSXRlcmF0b3IgdHlwZUl0ZXJhdG9yID0gc2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIC8vIEZpbHRlciBvdXQgdW53YW50ZWQgVHlwZXMKLSAgICAgICAgaWYgKHR5cGVOYW1lQ2F0ZWdvcnkgPT0gSVR5cGVTeXN0ZW1Qcm92aWRlci5VU0VSX0RFRklORURfQ09NUExFWF9UWVBFKSB7Ci0gICAgICAgIAl3aGlsZSAodHlwZUl0ZXJhdG9yLmhhc05leHQoKSkgewotICAgICAgICAJCU9iamVjdCB0eXBlID0gdHlwZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgCQlpZiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotICAgICAgICAJCQlrZWVwVHlwZXMuYWRkKHR5cGUpOwotICAgICAgICAJCX0KLSAgICAgICAgCX0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlTmFtZUNhdGVnb3J5ID09IElUeXBlU3lzdGVtUHJvdmlkZXIuVVNFUl9ERUZJTkVEX1NJTVBMRV9UWVBFKSB7Ci0gICAgICAgIAl3aGlsZSAodHlwZUl0ZXJhdG9yLmhhc05leHQoKSkgewotICAgICAgICAJCU9iamVjdCB0eXBlID0gdHlwZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgCQlpZiAodHlwZSBpbnN0YW5jZW9mIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKSB7Ci0gICAgICAgIAkJCWtlZXBUeXBlcy5hZGQodHlwZSk7Ci0gICAgICAgIAkJfQotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvL2FkZE5hbWVkQ29tcG9uZW50cyhkZWZpbml0aW9uLCBsaXN0LCBrZWVwVHlwZXMpOyAgICAgICAgCi0gICAgICAgIC8vcmV0dXJuIGxpc3Q7Ci0gICAgICAgIHJldHVybiBrZWVwVHlwZXM7Ci0gICAgfQotCi0gICAgcHVibGljIGphdmEudXRpbC5MaXN0IGdldEJ1aWx0SW5UeXBlTmFtZXNMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIExpc3QgaXRlbXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0vLyAgICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICAgIExpc3QgcHJlZml4ZXMgPSBnZXRQcmVmaXhlcyhkZWZpbml0aW9uLCBXU0RMQ29uc3RhbnRzLlhTRF9OQU1FU1BBQ0VfVVJJKTsKLS8vICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gcHJlZml4ZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotLy8gICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0vLyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFhTRERPTUhlbHBlci5kYXRhVHlwZS5sZW5ndGg7IGorKykKLS8vICAgICAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbG9jYWxOYW1lID0gWFNERE9NSGVscGVyLmRhdGFUeXBlW2pdWzBdOwotLy8gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKHByZWZpeCAhPSBudWxsICYmIHByZWZpeC5sZW5ndGgoKSA+IDApID8gcHJlZml4ICsgIjoiICsgbG9jYWxOYW1lIDogbG9jYWxOYW1lOwotLy8gICAgICAgICAgICAgICAgICAgIGl0ZW1zLmFkZChuYW1lKTsKLS8vICAgICAgICAgICAgICAgIH0KLS8vICAgICAgICAgICAgfQotLy8gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGl0ZW1zOwotICAgIH0KLSAgICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVFbGVtZW50TmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0gICAgICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSB0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE9iamVjdCBvID0gaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSAoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBvKS5nZXRTY2hlbWEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0JCQkJCQlpbml0V1NJU3R5bGVJbXBvcnRzKHNjaGVtYSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGROYW1lZENvbXBvbmVudHMoZGVmaW5pdGlvbiwgbGlzdCwgc2NoZW1hLmdldEVsZW1lbnREZWNsYXJhdGlvbnMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KSBpLm5leHQoKTsKLSAgICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSB0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpOwotICAgICAgICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFkZE5hbWVkQ29tcG9uZW50cyhkZWZpbml0aW9uLCBsaXN0LCBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0gICAgcHVibGljIGludCBnZXRDYXRlZ29yeUZvclR5cGVOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9CYXNlUmVuYW1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL0Jhc2VSZW5hbWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5OWViNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL0Jhc2VSZW5hbWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlUmVuYW1lciBleHRlbmRzIFdTRExWaXNpdG9yCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3TmFtZTsKLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IGdsb2JhbENvbXBvbmVudDsKLSAgCi0gIHB1YmxpYyBCYXNlUmVuYW1lcihXU0RMRWxlbWVudCBnbG9iYWxDb21wb25lbnQsIFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgc3VwZXIoZ2xvYmFsQ29tcG9uZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgdGhpcy5nbG9iYWxDb21wb25lbnQgPSBnbG9iYWxDb21wb25lbnQ7Ci0gICAgdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXROZXdRTmFtZSgpCi0gIHsKLSAgICBTdHJpbmcgcU5hbWUgPSBudWxsOwotICAgIGlmIChuZXdOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2xvYmFsQ29tcG9uZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIHFOYW1lID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgICBxTmFtZSArPSAiOiIgKyBuZXdOYW1lOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBxTmFtZSA9IG5ld05hbWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBxTmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL0JpbmRpbmdSZW5hbWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvQmluZGluZ1JlbmFtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxNDg1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvQmluZGluZ1JlbmFtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEJpbmRpbmdSZW5hbWVyIGV4dGVuZHMgQmFzZVJlbmFtZXIKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBCaW5kaW5nUmVuYW1lci4KLSAgICogQHBhcmFtIGdsb2JhbENvbXBvbmVudAotICAgKiBAcGFyYW0gbmV3TmFtZQotICAgKi8KLSAgcHVibGljIEJpbmRpbmdSZW5hbWVyKFdTRExFbGVtZW50IGdsb2JhbENvbXBvbmVudCwgU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBzdXBlcihnbG9iYWxDb21wb25lbnQsIG5ld05hbWUpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgc3VwZXIudmlzaXRQb3J0KHBvcnQpOwotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLSAgICBpZiAoZ2xvYmFsQ29tcG9uZW50LmVxdWFscyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QocG9ydCk7Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiYmluZGluZyIsIGdldE5ld1FOYW1lKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL01lc3NhZ2VSZW5hbWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvTWVzc2FnZVJlbmFtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg1Yjk1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvTWVzc2FnZVJlbmFtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZVJlbmFtZXIgZXh0ZW5kcyBCYXNlUmVuYW1lcgotewotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIE1lc3NhZ2VSZW5hbWVyLgotICAgKiBAcGFyYW0gZ2xvYmFsQ29tcG9uZW50Ci0gICAqIEBwYXJhbSBuZXdOYW1lCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVJlbmFtZXIoV1NETEVsZW1lbnQgZ2xvYmFsQ29tcG9uZW50LCBTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIHN1cGVyKGdsb2JhbENvbXBvbmVudCwgbmV3TmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgc3VwZXIudmlzaXRJbnB1dChpbnB1dCk7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICBpZiAoZ2xvYmFsQ29tcG9uZW50LmVxdWFscyhtZXNzYWdlKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoaW5wdXQpOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2UiLCBnZXROZXdRTmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBzdXBlci52aXNpdE91dHB1dChvdXRwdXQpOwotICAgIGlmIChnbG9iYWxDb21wb25lbnQuZXF1YWxzKG91dHB1dCkpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KG91dHB1dCk7Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgibWVzc2FnZSIsIGdldE5ld1FOYW1lKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIHN1cGVyLnZpc2l0RmF1bHQoZmF1bHQpOwotICAgIGlmIChnbG9iYWxDb21wb25lbnQuZXF1YWxzKGZhdWx0KSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZmF1bHQpOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2UiLCBnZXROZXdRTmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1BvcnRUeXBlUmVuYW1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1BvcnRUeXBlUmVuYW1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTU5YzgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9Qb3J0VHlwZVJlbmFtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQb3J0VHlwZVJlbmFtZXIgZXh0ZW5kcyBCYXNlUmVuYW1lcgotewotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFBvcnRUeXBlUmVuYW1lci4KLSAgICogQHBhcmFtIGdsb2JhbENvbXBvbmVudAotICAgKiBAcGFyYW0gbmV3TmFtZQotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlUmVuYW1lcihXU0RMRWxlbWVudCBnbG9iYWxDb21wb25lbnQsIFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgc3VwZXIoZ2xvYmFsQ29tcG9uZW50LCBuZXdOYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBzdXBlci52aXNpdEJpbmRpbmcoYmluZGluZyk7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBiaW5kaW5nLmdldEVQb3J0VHlwZSgpOwotCi0gICAgaWYgKGdsb2JhbENvbXBvbmVudC5lcXVhbHMocG9ydFR5cGUpKQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChiaW5kaW5nKTsKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgZ2V0TmV3UU5hbWUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9XU0RMVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1dTRExWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NjgyNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1dTRExWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMVmlzaXRvcgotewotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0KLSAgcHVibGljIFdTRExWaXNpdG9yKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgdm9pZCB2aXNpdERlZmluaXRpb24oKQotICB7Ci0gICAgdmlzaXRCaW5kaW5ncygpOwotICAgIHZpc2l0TWVzc2FnZXMoKTsKLSAgICB2aXNpdFBvcnRUeXBlcygpOwotICAgIHZpc2l0U2VydmljZXMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0QmluZGluZ3MoKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGRlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRCaW5kaW5nKGJpbmRpbmcpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0TWVzc2FnZXMoKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRNZXNzYWdlKG1lc3NhZ2UpOyAKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0UG9ydFR5cGVzKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0U2VydmljZXMoKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk7Ci0gICAgaWYgKHBvcnRUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgdmlzaXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgfQotCi0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24paXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOyAKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdFBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24paXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsgCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotLy8gICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpOwotLy8gICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpOyAgICAgICAgIAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRPcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIElucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotICAgIE91dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotICAgIAotICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIHZpc2l0SW5wdXQoaW5wdXQpOwotICAgIH0KLSAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgewotICAgICAgdmlzaXRPdXRwdXQob3V0cHV0KTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYgKGZhdWx0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0RmF1bHQoZmF1bHQpOwotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotLy8gICAgWFNEVHlwZURlZmluaXRpb24gdHlwZSA9IHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdFBhcnQocGFydCk7Ci0gICAgfQotICB9ICAKLQotICBwdWJsaWMgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHZpc2l0TWVzc2FnZShtZXNzYWdlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdE91dHB1dChPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gb3V0cHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGZhdWx0LmdldEVNZXNzYWdlKCk7Ci0gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIHZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNlcnZpY2UuZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRQb3J0KHBvcnQpOwotICAgIH0KLSAgICAKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTllYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1dTRExWaXNpdG9yRm9yUGFyYW1ldGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yLlcxMVhTRFZpc2l0b3JGb3JGaWVsZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExWaXNpdG9yRm9yUGFyYW1ldGVycwotewotICAgIHB1YmxpYyBMaXN0IGNvbmNyZXRlQ29tcG9uZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBwdWJsaWMgTGlzdCB0aGluZ3NUb0xpc3RlblRvID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgcHVibGljIHZvaWQgdmlzaXRNZXNzYWdlUmVmZXJlbmNlKE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICBpZiAobWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0TWVzc2FnZShtZXNzYWdlUmVmZXJlbmNlLmdldEVNZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICAgIHsKLSAgICAgIC8vIGZvciBub3cgd2UgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IHBhcnQgaXMgdGhlIG9ubHkgb25lIHRoYXQKLSAgICAgIC8vIHNob3VsZCBiZSB1c2VkIHRvIGRlZHVjZSB0aGUgcGFyYW1ldGVycwotICAgICAgLy8gVE9ETyAoY3MpIHdlIG5lZWQgdG8gcmV2aXN0IHRoaXMsIG11bHRpcGxlIHBhcnRzIG5lZWQgdG8gYmUgY29uc2lkZXJlZAotICAgICAgLy8KLSAgICAgICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewotICAgICAgICAgICAgdGhpbmdzVG9MaXN0ZW5Uby5hZGQobWVzc2FnZSk7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtZXNzYWdlLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICB7IAotICAgICAgICAgICAgICB2aXNpdFBhcnQoKFBhcnQpaS5uZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFBhcnQoUGFydCBwYXJ0KQotICAgIHsKLSAgICAgIHRoaW5nc1RvTGlzdGVuVG8uYWRkKHBhcnQpOyAgICAgIAotICAgICAgaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdmlzaXRYU0RFbGVtZW50RGVjbGFyYXRpb24ocGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAvLyBpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pCi0gICAgICB7Ci0gICAgICAgIGNvbmNyZXRlQ29tcG9uZW50cy5hZGQocGFydCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFhTREVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWQpCi0gICAgewotICAgICAgWFNEVHlwZURlZmluaXRpb24gdGQgPSBlZC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgaWYgKHRkICE9IG51bGwpCi0gICAgICB7ICAKLSAgICAgICAgaWYgKHRkLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgY29uY3JldGVDb21wb25lbnRzLmFkZChlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGQgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gYW5vbnltb3VzIGxvY2FsbHkgZGVmaW5lZCB0eXBlCi0gICAgICAgICAgLy8gc2Ugd2UgbmVlZCB0byB2aXNpdCBpdCdzIGNoaWxkcmVuCi0gICAgICAgICAgdGhpbmdzVG9MaXN0ZW5Uby5hZGQoZWQpOwotICAgICAgICAgIHZpc2l0WFNEQ29tcGxleHRUeXBlRGVmaW5pdGlvbigoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB0ZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0WFNEQ29tcGxleHRUeXBlRGVmaW5pdGlvbihYU0RDb21wbGV4VHlwZURlZmluaXRpb24gdGQpCi0gICAgewotICAgICAgLy8gVE9ETyAoY3MpIHJldmlzaXQgdG8gc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGZvciB0aGUgV1NETCBlZGl0b3IgdG8gcmVkaXNwbGF5Ci0gICAgICAvLyB0aGUgJ0ZpZWxkcycgKGluIFhTRCBlZGl0b3IgbGluZ28pIGFzIHBhcmFtdGVycwotICAgICAgLy8gcGVyaGFwcyB0aGUgV1NETCBFZGl0b3Igc2hvdWxkIHNpbXBseSByZXVzZSB0aGUgWFNEIEVkaXRvcidzCi0gICAgICAvLyBDb21wbGV4VHlwZSBlZGl0IHBhcnQgd2hlbiBkaXNwbGF5aW5nIHRoZXNlIHNlY3Rpb25zPwotICAgICAgVzExWFNEVmlzaXRvckZvckZpZWxkcyBmaWVsZFZpc2l0b3IgPSBuZXcgVzExWFNEVmlzaXRvckZvckZpZWxkcygpOwotICAgICAgZmllbGRWaXNpdG9yLnZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKHRkKTsKLSAgICAgIGNvbmNyZXRlQ29tcG9uZW50cy5hZGRBbGwoZmllbGRWaXNpdG9yLmdldENvbmNyZXRlQ29tcG9uZW50TGlzdCgpKTsKLSAgICAgIHRoaW5nc1RvTGlzdGVuVG8uYWRkQWxsKGZpZWxkVmlzaXRvci5nZXRUaGluZ3NXZU5lZWRUb0xpc3RlblRvKCkpOwotICAgIH0KLSAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9CaW5kaW5nV2l6YXJkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvQmluZGluZ1dpemFyZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTJjZTkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9CaW5kaW5nV2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmluZGluZ0dlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlByb3RvY29sQ29tcG9uZW50Q29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ1dpemFyZCBleHRlbmRzIFdpemFyZAotewotICBwcm90ZWN0ZWQgQmluZGluZ0dlbmVyYXRvciBiaW5kaW5nR2VuZXJhdG9yOwotICBwcm90ZWN0ZWQgQmluZGluZ1dpemFyZE9wdGlvbnNQYWdlIHNwZWNpZnlCaW5kaW5nUGFnZTsKLQotICBwcm90ZWN0ZWQgRG9jdW1lbnQgZG9jdW1lbnQ7Ci0gIHByb3RlY3RlZCBpbnQga2luZDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLSU5EX05FV19CSU5ESU5HID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORF9SRUdFTkVSQVRFX0JJTkRJTkcgPSAyOwotCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIAotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHdoZW4gYXJlIGNyZWF0aW5nIGEgYnJhbmQgbmV3IEJpbmRpbmcKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nV2l6YXJkKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMoZGVmaW5pdGlvbiwgbnVsbCwgS0lORF9ORVdfQklORElORyk7Ci0gIH0KLQotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHdoZW4gYXJlIGNyZWF0aW5nIGEgYnJhbmQgbmV3IEJpbmRpbmcKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nV2l6YXJkKERlZmluaXRpb24gZGVmaW5pdGlvbiwgRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICB0aGlzKGRlZmluaXRpb24sIG51bGwsIEtJTkRfTkVXX0JJTkRJTkcpOwotICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDsKLSAgfQotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB3aGVuIHRoZXJlIGlzIGFuIGV4aXN0aW5nIEJpbmRpbmcgd2Ugd2lzaCB0byBtb2RpZnkvcmVnZW5lcmF0ZQotICAgKi8KLSAgcHVibGljIEJpbmRpbmdXaXphcmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcsIGludCBraW5kKQotICB7Ci0gICAgc3VwZXIoKTsKLQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMua2luZCA9IGtpbmQ7CQotCWJpbmRpbmdHZW5lcmF0b3IgPSBuZXcgQmluZGluZ0dlbmVyYXRvcihkZWZpbml0aW9uLCBiaW5kaW5nKTsKLQotICAgIHNldFdpbmRvd1RpdGxlKE1lc3NhZ2VzLl9VSV9CSU5ESU5HX1dJWkFSRCk7IC8vJE5PTi1OTFMtMSQKLSAgICAvL3NldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShXU0RMRWRpdG9yUGx1Z2luLmNsYXNzLCAiaWNvbnMvTmV3WE1MLmdpZiIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdOYW1lKFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotLy8gICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgYmluZGluZ05hbWUpOwotICAgIGJpbmRpbmdHZW5lcmF0b3Iuc2V0TmFtZShiaW5kaW5nTmFtZSk7Ci0vKgotIAkvLyBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZGVmaW5pdGlvbi5nZXRCaW5kaW5nKHFuYW1lKTsKLQlpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLQkgIExpc3QgZWVMaXN0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZWVMaXN0LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBlZUxpc3QuZ2V0KDApOwotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZWUpOwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbiBleHRlbnNpb24gPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0KLSAgICAgICAgICBpZiAoZXh0ZW5zaW9uICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgYmluZGluZ0dlbmVyYXRvci5zZXRQcm90b2NvbChleHRlbnNpb24uZ2V0TmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgKi8KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBvcnRUeXBlTmFtZShTdHJpbmcgcG9ydFR5cGVOYW1lKQotICB7Ci0gICAgYmluZGluZ0dlbmVyYXRvci5zZXRSZWZOYW1lKHBvcnRUeXBlTmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgQmluZGluZ0dlbmVyYXRvciBnZXRCaW5kaW5nR2VuZXJhdG9yKCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nR2VuZXJhdG9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0cnVlIGlmIHdpemFyZCBzZXR1cCBpcyBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHNldHVwKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkUGFnZXMoKQotICB7Ci0gICAgc3BlY2lmeUJpbmRpbmdQYWdlID0gbmV3IEJpbmRpbmdXaXphcmRPcHRpb25zUGFnZSgpOwotICAgIGFkZFBhZ2Uoc3BlY2lmeUJpbmRpbmdQYWdlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICB7Ci0gIAlib29sZWFuIHJlY29yZGluZ1N0YXJ0ZWQgPSBmYWxzZTsKLSAgCWlmIChkZWZpbml0aW9uLmdldEVsZW1lbnQoKSA9PSBudWxsIHx8IChkb2N1bWVudCAhPSBudWxsICYmIGRvY3VtZW50LmdldENoaWxkTm9kZXMoKS5nZXRMZW5ndGgoKSA9PSAwKSkgewotICAJCXJlY29yZGluZ1N0YXJ0ZWQgPSB0cnVlOwotICAJCWJlZ2luUmVjb3JkaW5nKCk7Ci0gIAkJCi0gIAkJLy8gQ3JlYXRlIHRoZSBEZWZpbml0aW9ucyBlbGVtZW50IHdpdGggcHJvcGVyIG5hbWVzcGFjZQotICAJICAgIFByZWZlcmVuY2VzIHByZWZlcmVuY2UgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotICAJCVN0cmluZyBjaGFyU2V0ID0gcHJlZmVyZW5jZS5nZXRTdHJpbmcoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuT1VUUFVUX0NPREVTRVQpOwotICAJICAgIGlmIChjaGFyU2V0ID09IG51bGwgfHwgY2hhclNldC50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAJICAgIHsKLSAgCSAgICAJY2hhclNldCA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLSAgCSAgICB9Ci0gIAkgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCJ4bWwiLCAidmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiIiArIGNoYXJTZXQgKyAiXCIiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gIAkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgid3NkbDpkZWZpbml0aW9ucyIpOyAgCQkgLy8kTk9OLU5MUy0xJAotICAJCWRvY3VtZW50LmFwcGVuZENoaWxkKHJvb3QpOwotCi0gIAkJLy8gQWRkIHZhcmlvdXMgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgaGVyZS4gCi0gIAkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnNvYXAiLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6dG5zIiwgZ2V0RGVmYXVsdE5hbWVzcGFjZShkZWZpbml0aW9uKSk7IC8vJE5PTi1OTFMtMSQKLSAgCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6d3NkbCIsICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAJCXJvb3Quc2V0QXR0cmlidXRlKCJuYW1lIiwgZ2V0RmlsZU5hbWUoZGVmaW5pdGlvbikpOyAvLyROT04tTkxTLTEkCi0gIAkJcm9vdC5zZXRBdHRyaWJ1dGUoInRhcmdldE5hbWVzcGFjZSIsIGdldERlZmF1bHROYW1lc3BhY2UoZGVmaW5pdGlvbikpOyAvLyROT04tTkxTLTEkCi0KLSAgCQlkZWZpbml0aW9uLnNldEVsZW1lbnQocm9vdCk7CQotICAJfQotICAJCi0JLy8gR2VuZXJhdGUvcmUtZ2VuZXJhdGUgdGhlIEJpbmRpbmcKLSAgICB0cnkKLSAgICB7Ci0JCUJpbmRpbmcgYmluZGluZyA9IGJpbmRpbmdHZW5lcmF0b3IuZ2VuZXJhdGVCaW5kaW5nKCk7Ci0JCQotICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlciA9IChJU2VsZWN0aW9uUHJvdmlkZXIpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJU2VsZWN0aW9uUHJvdmlkZXIuY2xhc3MpOwotICAgICAgICBpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlbGVjdGlvblByb3ZpZGVyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihiaW5kaW5nKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgZmluYWxseSB7Ci0gICAgCWlmIChyZWNvcmRpbmdTdGFydGVkKQotICAgIAkJZW5kUmVjb3JkaW5nKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldERlZmF1bHROYW1lc3BhY2UoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0UpOyAvLyROT04tTkxTLTEkCi0gICAgaWYgKCFuYW1lc3BhY2UuZW5kc1dpdGgoIi8iKSkgeyAvLyROT04tTkxTLTEkCi0gICAgCW5hbWVzcGFjZSA9IG5hbWVzcGFjZS5jb25jYXQoIi8iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICAKLSAgICBuYW1lc3BhY2UgKz0gZ2V0RmlsZU5hbWUoZGVmaW5pdGlvbikgKyAiLyI7IC8vJE5PTi1OTFMtMSQKLQotICAgIHJldHVybiBuYW1lc3BhY2U7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEZpbGVOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIFN0cmluZyBmaWxlTG9jYXRpb24gPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0gIAlJUGF0aCBmaWxlUGF0aCA9IG5ldyBQYXRoKGZpbGVMb2NhdGlvbik7Ci0gIAlyZXR1cm4gZmlsZVBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGJlZ2luUmVjb3JkaW5nKCkgewotICAgIE5vZGUgbm9kZSA9IGRvY3VtZW50OwotICAgIGlmIChub2RlIGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgewotICAgICAgKChJRE9NTm9kZSlub2RlKS5nZXRNb2RlbCgpLmJlZ2luUmVjb3JkaW5nKHRoaXMsIE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0JJTkRJTkcpOyAgIC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBlbmRSZWNvcmRpbmcoKSB7Ci0gICAgTm9kZSBub2RlID0gZG9jdW1lbnQ7IAotICAgIGlmIChub2RlIGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgewotICAgICAgKChJRE9NTm9kZSlub2RlKS5nZXRNb2RlbCgpLmVuZFJlY29yZGluZyh0aGlzKTsgIAotICAgIH0KLSAgfQotCi0gIGNsYXNzIEJpbmRpbmdXaXphcmRPcHRpb25zUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UKLSAgewotICAgIHByb3RlY3RlZCBQcm90b2NvbENvbXBvbmVudENvbnRyb2wgcHJvdG9jb2xDb21wb25lbnRDb250cm9sOwotCi0gICAgcHVibGljIEJpbmRpbmdXaXphcmRPcHRpb25zUGFnZSgpCi0gICAgewotICAgICAgc3VwZXIoIlNwZWNpZnlCaW5kaW5nUGFnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBzZXRUaXRsZShNZXNzYWdlcy5fVUlfVElUTEVfU1BFQ0lGWV9CSU5ESU5HX0RFVEFJTFMpOyAvLyROT04tTkxTLTEkCi0gICAgICBzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5fVUlfU1BFQ0lGWV9CSU5ESU5HX0RFVEFJTFNfTEFCRUwpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcHJvdGVjdGVkIEJpbmRpbmdHZW5lcmF0b3IgZ2V0QmluZGluZ0dlbmVyYXRvcigpCi0gICAgewotICAgICAgcmV0dXJuICgoQmluZGluZ1dpemFyZCkgZ2V0V2l6YXJkKCkpLmdldEJpbmRpbmdHZW5lcmF0b3IoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gICAgewotICAgICAgUHJvdG9jb2xDb21wb25lbnRDb250cm9sIHByb3RvY29sQ29tcG9uZW50Q29udHJvbCA9IG5ldyBCaW5kaW5nUHJvdG9jb2xDb21wb25lbnRDb250cm9sKHBhcmVudCwgYmluZGluZ0dlbmVyYXRvciwgdHJ1ZSk7Ci0gICAgICBwcm90b2NvbENvbXBvbmVudENvbnRyb2wuaW5pdEZpZWxkcygpOwotICAgICAgc2V0Q29udHJvbChwcm90b2NvbENvbXBvbmVudENvbnRyb2wpOwotICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbENvbXBvbmVudENvbnRyb2wsIEFTREVkaXRvckNTSGVscElkcy5CSU5ESU5HX1dJWkFSRCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBCaW5kaW5nUHJvdG9jb2xDb21wb25lbnRDb250cm9sIGV4dGVuZHMgUHJvdG9jb2xDb21wb25lbnRDb250cm9sCi0gIHsKLSAgICBwdWJsaWMgQmluZGluZ1Byb3RvY29sQ29tcG9uZW50Q29udHJvbChDb21wb3NpdGUgcGFyZW50LCBCaW5kaW5nR2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICB7Ci0gICAgICB0aGlzKHBhcmVudCwgZ2VuZXJhdG9yLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ1Byb3RvY29sQ29tcG9uZW50Q29udHJvbChDb21wb3NpdGUgcGFyZW50LCBCaW5kaW5nR2VuZXJhdG9yIGdlbmVyYXRvciwgYm9vbGVhbiBzaG93T3ZlcndyaXRlQnV0dG9uKQotICAgIHsKLSAgICAgIHN1cGVyKHBhcmVudCwgZ2VuZXJhdG9yLCBzaG93T3ZlcndyaXRlQnV0dG9uKTsKLQotICAgICAgaWYgKGdlbmVyYXRvci5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY29tcG9uZW50TmFtZUZpZWxkLnNldEVkaXRhYmxlKGZhbHNlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFJlZk5hbWVMYWJlbFRleHQoKQotICAgIHsKLSAgICAgIHJldHVybiBNZXNzYWdlcy5fVUlfUE9SVF9UWVBFOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcHVibGljIExpc3QgZ2V0UmVmTmFtZXMoKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChnZW5lcmF0b3IuZ2V0RGVmaW5pdGlvbigpKS5nZXRQb3J0VHlwZU5hbWVzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0TmFtZSgpCi0gICAgewotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gZ2VuZXJhdG9yLmdldE5hbWUoKTsKLSAgICAgIHJldHVybiBiaW5kaW5nTmFtZSAhPSBudWxsID8gYmluZGluZ05hbWUgOiBOYW1lVXRpbC5idWlsZFVuaXF1ZUJpbmRpbmdOYW1lKGdlbmVyYXRvci5nZXREZWZpbml0aW9uKCksIG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgY3JlYXRlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKFN0cmluZyBwcm90b2NvbCkKLSAgICB7Ci0gICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ZW5zaW9uID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTGFiZWwocHJvdG9jb2wpOwotICAgICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKSB7Ci0gICAgCSAgcmV0dXJuIGV4dGVuc2lvbi5nZXRCaW5kaW5nQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKCk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0NvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0NvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTE2ZTFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOyAgCi0gICAgICAgIAotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmFzZUdlbmVyYXRvcjsKLQotcHVibGljIGludGVyZmFjZSBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIHZvaWQgaW5pdChCYXNlR2VuZXJhdG9yIGJhc2VHZW5lcmF0b3IpOyAgICAgICAgICAgICAKLSAgcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpOwotICBwdWJsaWMgQ29tcG9zaXRlIGdldENvbnRyb2woKTsKLSAgCi0gIC8vIFRPRE8gY2FuIHRoaXMgZ28gaW50byBpbml0PwotICAvLwotICBwdWJsaWMgdm9pZCBzZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNPdmVyd3JpdGVBcHBsaWNhYmxlKCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0h0dHBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9IdHRwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NTg2NzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0h0dHBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5nZW5lcmF0b3IuSFRUUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJhc2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBIdHRwQmluZGluZ09wdGlvbnNQYWdlIGltcGxlbWVudHMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotICBwcm90ZWN0ZWQgQnV0dG9uIGdldEJ1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBwb3N0QnV0dG9uOwotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGNvbnRyb2w7Ci0gIHByb3RlY3RlZCBCYXNlR2VuZXJhdG9yIGdlbmVyYXRvcjsKLSAgcHJvdGVjdGVkIEhUVFBDb250ZW50R2VuZXJhdG9yIGh0dHBHZW5lcmF0b3I7Ci0KLSAgcHVibGljIEh0dHBCaW5kaW5nT3B0aW9uc1BhZ2UoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yKQotICB7Ci0gICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7Ci0JaWYgKGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCkgaW5zdGFuY2VvZiBIVFRQQ29udGVudEdlbmVyYXRvcikgewotCQlodHRwR2VuZXJhdG9yID0gKEhUVFBDb250ZW50R2VuZXJhdG9yKSBnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCX0KLSAgfQotCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgY29udHJvbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgY29udHJvbC5zZXRMYXlvdXQobGF5b3V0KTsKLQotICAgIExhYmVsIHNlcGFyYXRvciA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwpOwotICAgIEdyaWREYXRhIGdkPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAKLSAgICBzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBMYWJlbCBvcHRpb25zSGVhZGluZyA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuTk9ORSk7Ci0gICAgb3B0aW9uc0hlYWRpbmcuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfSFRUUF9CSU5ESU5HX09QVElPTlMpOyAvLyROT04tTkxTLTEkCi0KLSAgICBnZXRCdXR0b24gPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgZ2V0QnV0dG9uLnNldFRleHQoIkhUVFAgR0VUIik7IC8vJE5PTi1OTFMtMSQKLSAgICBnZXRCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOwotCi0gICAgcG9zdEJ1dHRvbiA9IG5ldyBCdXR0b24oY29udHJvbCwgU1dULlJBRElPKTsKLSAgICBwb3N0QnV0dG9uLnNldFRleHQoIkhUVFAgUE9TVCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpZiAoZ2VuZXJhdG9yLmdldE5hbWUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdlbmVyYXRvci5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBnZW5lcmF0b3IuZ2V0TmFtZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBkZWZpbml0aW9uLmdldEJpbmRpbmcocW5hbWUpOwotICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBlZUxpc3QgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgaWYgKGVlTGlzdC5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVlTGlzdC5nZXQoMCk7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGVlKTsKLSAgICAgICAgICBTdHJpbmcgdmVyYiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ2ZXJiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBpZiAoIlBPU1QiLmVxdWFscyh2ZXJiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdldEJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgICAgcG9zdEJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcG9zdEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBnZXRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JY29tcHV0ZU9wdGlvbnMoKTsKLQkKLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotICAKLSAgcHVibGljIENvbXBvc2l0ZSBnZXRDb250cm9sKCkgewotCSAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlQXBwbGljYWJsZSgpCi0gIHsKLSAgCXJldHVybiB0cnVlOwotICB9ICAKLQotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotCWNvbXB1dGVPcHRpb25zKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjb21wdXRlT3B0aW9ucygpCi0gIHsKLQkgIGlmIChnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpIGluc3RhbmNlb2YgSFRUUENvbnRlbnRHZW5lcmF0b3IpIHsKLQkJICBIVFRQQ29udGVudEdlbmVyYXRvciBodHRwR2VuZXJhdG9yID0gKEhUVFBDb250ZW50R2VuZXJhdG9yKSBnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCi0JCSAgaWYgKHBvc3RCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgaHR0cEdlbmVyYXRvci5zZXRWZXJiKEhUVFBDb250ZW50R2VuZXJhdG9yLlZFUkJfUE9TVCk7Ci0JCSAgfQkgIAotCQkgIGVsc2UgaWYgKGdldEJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBodHRwR2VuZXJhdG9yLnNldFZlcmIoSFRUUENvbnRlbnRHZW5lcmF0b3IuVkVSQl9HRVQpOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCkgewotCSAgY29tcHV0ZU9wdGlvbnMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmFtZXNwYWNlVGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9OYW1lc3BhY2VUYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQzOGMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9OYW1lc3BhY2VUYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DaGVja2JveENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNlbGxNb2RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGV4dENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwudmlld2Vycy5OYXZpZ2FibGVUYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5OYW1lc3BhY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuZGlhbG9ncy5FZGl0TmFtZXNwYWNlSW5mb0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmRpYWxvZ3MuVXBkYXRlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC51dGlsLlhNTENvbW1vblJlc291cmNlczsKLSAKLXB1YmxpYyBjbGFzcyBOYW1lc3BhY2VUYWJsZSBleHRlbmRzIENvbXBvc2l0ZQotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVVJJID0gWE1MQ29tbW9uUmVzb3VyY2VzLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfVUlfTEFCRUxfTkFNRVNQQUNFX05BTUUiKTsgIC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRklYID0gWE1MQ29tbW9uUmVzb3VyY2VzLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfVUlfTEFCRUxfUFJFRklYIik7ICAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIElOQ0xVREUgPSBNZXNzYWdlcy5fVUlfVElUTEVfU0VMRUNUOyAvLyROT04tTkxTLTEkCi0gICAgCi0gIHByb3RlY3RlZCBMaXN0IG5hbWVzcGFjZUluZm9MaXN0ID0gbmV3IFZlY3RvcigpOwotICBwcm90ZWN0ZWQgTGlzdCBjaGVja2VkTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJvdGVjdGVkIE5hbWVzcGFjZU5hdmlnYWJsZVRhYmxlVmlld2VyIHRhYmxlVmlld2VyOyAgICAKLSAgcHJvdGVjdGVkIEJ1dHRvbiBhZGRCdXR0b247Ci0KLSAgcHJvdGVjdGVkIE5hbWVzcGFjZUluZm9UYWJsZUxhYmVsUHJvdmlkZXIgcHJvdmlkZXI7Ci0gIHByb3RlY3RlZCBVcGRhdGVMaXN0ZW5lciB1cGRhdGVMaXN0ZW5lcjsgICAKLSAgcHJvdGVjdGVkIElQYXRoIHJlc291cmNlTG9jYXRpb247ICAKLSAgcHJvdGVjdGVkIGludCB2aXNpYmxlUm93cyA9IC0xOyAgCi0gIHByb3RlY3RlZCBib29sZWFuIGR1bW15Um93c1JlbW92ZWQgPSBmYWxzZTsKLSAgVGFibGUgdGFibGU7Ci0KLSAgcHVibGljIE5hbWVzcGFjZVRhYmxlKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsgIAotICAgIHRoaXMocGFyZW50LCAtMSwgLTEsIC0xKTsKLSAgfSAgICAKLQotICBwdWJsaWMgTmFtZXNwYWNlVGFibGUoQ29tcG9zaXRlIHBhcmVudCwgaW50IHZpc2libGVSb3dzKQotICB7Ci0gICAgdGhpcyhwYXJlbnQsIC0xLCAtMSwgdmlzaWJsZVJvd3MpOwotICB9Ci0KLSAgcHVibGljIE5hbWVzcGFjZVRhYmxlKENvbXBvc2l0ZSBwYXJlbnQsIGludCB3aWR0aEhpbnQsIGludCBoZWlnaHRIaW50KQotICB7Ci0gICAgdGhpcyhwYXJlbnQsIHdpZHRoSGludCwgaGVpZ2h0SGludCwgLTEpOwotICB9Ci0KLSAgcHVibGljIE5hbWVzcGFjZVRhYmxlKENvbXBvc2l0ZSBwYXJlbnQsIGludCB3aWR0aEhpbnQsIGludCBoZWlnaHRIaW50LCBpbnQgdmlzaWJsZVJvd3MpCi0gIHsKLSAgICBzdXBlcihwYXJlbnQsIFNXVC5OT05FKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBzZXRMYXlvdXQoY3JlYXRlR3JpZExheW91dCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBHcmlkRGF0YSBmaWxsR0Q9IG5ldyBHcmlkRGF0YSgpOwotICAgIGZpbGxHRC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGZpbGxHRC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIGZpbGxHRC52ZXJ0aWNhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBmaWxsR0QuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2U9IHRydWU7Ci0gICAgCi0gICAgc2V0TGF5b3V0RGF0YShmaWxsR0QpOyAgICAgICAgICAgICAKLSAgICAKLSAgICBHcm91cCBuYW1lc3BhY2VJbmZvR3JvdXAgPSBuZXcgR3JvdXAodGhpcywgU1dULk5PTkUpOwotICAgIG5hbWVzcGFjZUluZm9Hcm91cC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FU1BBQ0VfVVJJU19UT19CRV9JTkNMVURFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvR3JvdXAuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOyAgIAotICAgIEdyaWREYXRhIGdkID0gZmlsbEdEOwotICAgIGlmICh3aWR0aEhpbnQgIT0gLTEpCi0gICAgewotICAgICAgZ2Qud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIH0gICAKLSAgICBpZiAoaGVpZ2h0SGludCAhPSAtMSkKLSAgICB7Ci0gICAgICBnZC5oZWlnaHRIaW50ID0gaGVpZ2h0SGludDsKLSAgICB9Ci0gICAgbmFtZXNwYWNlSW5mb0dyb3VwLnNldExheW91dERhdGEoZ2QpOyAKLSAgICAvL1dvcmtiZW5jaEhlbHAuc2V0SGVscChuYW1lc3BhY2VJbmZvR3JvdXAsIG5ldyBDb250cm9sQ29udGV4dENvbXB1dGVyKG5hbWVzcGFjZUluZm9Hcm91cCwgWE1MQnVpbGRlckNvbnRleHRJZHMuWE1MQ19OQU1FU1BBQ0VfR1JPVVApKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgU3RyaW5nW10gdGl0bGVBcnJheSA9IHtJTkNMVURFLCBQUkVGSVgsIE5BTUVTUEFDRV9VUkl9OwotCi0gICAgdGFibGUgPSBuZXcgVGFibGUobmFtZXNwYWNlSW5mb0dyb3VwLCBTV1QuRlVMTF9TRUxFQ1RJT04pOwotICAgIHRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0gICAgCi0gICAgdGFibGUuc2V0TGF5b3V0RGF0YShmaWxsR0QpOwotICAgIHRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLSAgICB0YWJsZS5hZGRNb3VzZUxpc3RlbmVyKG5ldyBNb3VzZUFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIG1vdXNlRG93bihNb3VzZUV2ZW50IGUpCi0gICAgICB7Ci0gICAgICAgIFRhYmxlSXRlbSBpdGVtID0gdGFibGUuZ2V0SXRlbShuZXcgUG9pbnQoZS54LCBlLnkpKTsKLSAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmogPSBpdGVtLmdldERhdGEoKTsKLSAgICAgICAgICBpZiAob2JqICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IChUYWJsZUVsZW1lbnQpb2JqOwotICAgICAgICAgICAgVGFibGVDb2x1bW4gY29sID0gdGFibGUuZ2V0Q29sdW1uKDApOwotICAgICAgICAgICAgaWYgKGUueCA8IGNvbC5nZXRXaWR0aCgpKSAvLyBpZiB0aGUgcG9pbnQgZmFsbHMgd2l0aGluIHRoZSBTZWxlY3QgY29sdW1uIHRoZW4gcGVyZm9ybSBjaGVjay91bmNoZWNrCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50U3RhdGUgPSBob2xkZXIuZ2V0Q2hlY2tlZCgpOwotICAgICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlLmVxdWFscygidHJ1ZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBob2xkZXIuc2V0Q2hlY2tlZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgIGNoZWNrZWRMaXN0LnNldChob2xkZXIuZ2V0SW5kZXgoKSwgImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRTdGF0ZS5lcXVhbHMoImZhbHNlIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGhvbGRlci5zZXRDaGVja2VkKCJ0cnVlIik7ICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgY2hlY2tlZExpc3Quc2V0KGhvbGRlci5nZXRJbmRleCgpLCAidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotICAgICAgICAgICAgICBpZiAodXBkYXRlTGlzdGVuZXIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVwZGF0ZUxpc3RlbmVyLnVwZGF0ZU9jY3VyZWQodGhpcywgbmFtZXNwYWNlSW5mb0xpc3QpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHRhYmxlVmlld2VyID0gbmV3IE5hbWVzcGFjZU5hdmlnYWJsZVRhYmxlVmlld2VyKHRhYmxlKTsKLSAgICBwcm92aWRlciA9IG5ldyBOYW1lc3BhY2VJbmZvVGFibGVMYWJlbFByb3ZpZGVyKCk7Ci0gICAgdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKHByb3ZpZGVyKTsgICAKLSAgICB0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKHByb3ZpZGVyKTsKLSAgICB0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKHRpdGxlQXJyYXkpOwotICAgIHRhYmxlVmlld2VyLnNldENlbGxNb2RpZmllcihuZXcgTmFtZXNwYWNlSW5mb0NlbGxNb2RpZmllcigpKTsKLQotICAgICAgICAgICAgICAgICAgICAKLSAgICBpbnRbXSB3aWR0aEFycmF5ID0gezEwLCAyMCwgNTB9OwotICAgIFRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOyAgCi0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRpdGxlQXJyYXkubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgVGFibGVDb2x1bW4gY29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBpKTsKLSAgICAgIGNvbHVtbi5zZXRUZXh0KHRpdGxlQXJyYXlbaV0pOwotICAgICAgY29sdW1uLnNldEFsaWdubWVudChTV1QuTEVGVCk7Ci0gICAgICBsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSh3aWR0aEFycmF5W2ldLCB0cnVlKSk7Ci0gICAgfSAgICAgICAgIAotICAgIHRoaXMudmlzaWJsZVJvd3MgPSB2aXNpYmxlUm93czsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpc2libGVSb3dzOyBpKyspCi0gICAgewotICAgICAgVGFibGVJdGVtIGl0ZW0gPSBuZXcgVGFibGVJdGVtKHRhYmxlLCBTV1QuTk9ORSk7IAotICAgICAgaXRlbS5zZXRUZXh0KCIjIyMjIyMjIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgdGFibGUuc2V0TGF5b3V0KGxheW91dCk7ICAKLSAgICAKLSAgICBDZWxsRWRpdG9yW10gY2VsbEVkaXRvcnMgPSBuZXcgQ2VsbEVkaXRvclt0aXRsZUFycmF5Lmxlbmd0aF07Ci0gICAgY2VsbEVkaXRvcnNbMF0gPSBuZXcgTmFtZXNwYWNlSW5mb0NoZWNrYm94Q2VsbEVkaXRvcih0YWJsZSk7Ci0gICAgY2VsbEVkaXRvcnNbMV0gPSBuZXcgVGV4dENlbGxFZGl0b3IodGFibGUpOwotICAgIHRhYmxlVmlld2VyLnNldENlbGxFZGl0b3JzKGNlbGxFZGl0b3JzKTsKLQotLy8gICAgY3JlYXRlQnV0dG9ucyhuYW1lc3BhY2VJbmZvR3JvdXApOyAgICAgICAgICAgIAotCi0gICAgaW5pdGlhbGl6ZSgpOyAgICAKLSAgfSAgICAKLQotICBwdWJsaWMgdm9pZCBzZXRVcGRhdGVMaXN0ZW5lcihVcGRhdGVMaXN0ZW5lciB1cGRhdGVMaXN0ZW5lcikKLSAgewotICAgIHRoaXMudXBkYXRlTGlzdGVuZXIgPSB1cGRhdGVMaXN0ZW5lcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZUluZm9MaXN0KExpc3QgbmFtZXNwYWNlSW5mb0xpc3QpCi0gIHsgICAgCi0gICAgdGhpcy5uYW1lc3BhY2VJbmZvTGlzdCA9IG5hbWVzcGFjZUluZm9MaXN0OwotICAgIHVwZGF0ZSgpOwotICB9ICAgICAgICAgICAgICAgICAgICAgICAKLQotICBwdWJsaWMgTGlzdCBnZXROYW1lc3BhY2VJbmZvTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlSW5mb0xpc3Q7Ci0gIH0gIAotCi0gIHB1YmxpYyBMaXN0IGdldE5hbWVzcGFjZUNoZWNrZWRMaXN0KCkKLSAgewotICAgIHJldHVybiBjaGVja2VkTGlzdDsKLSAgfSAgCi0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMUHJlZml4KCkKLSAgewotICAgIHJldHVybiAoKE5hbWVzcGFjZUluZm8pKG5hbWVzcGFjZUluZm9MaXN0LmdldCgwKSkpLnByZWZpeDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlTG9jYXRpb24oSVBhdGggcmVzb3VyY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMucmVzb3VyY2VMb2NhdGlvbiA9IHJlc291cmNlTG9jYXRpb247Ci0gIH0KLQotICBwdWJsaWMgR3JpZExheW91dCBjcmVhdGVHcmlkTGF5b3V0KCkKLSAgewotICAgIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ3JpZExheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgZ3JpZExheW91dC5ob3Jpem9udGFsU3BhY2luZyA9IDA7Ci0gICAgcmV0dXJuIGdyaWRMYXlvdXQ7Ci0gIH0KLSAgICAKLSAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZSgpCi0gIHsKLSAgICAvLyBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuLi4uCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvMSA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzEucHJlZml4ID0gIndzZGwiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzEudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvMSk7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJ0cnVlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBOYW1lc3BhY2VJbmZvIGluZm8yID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLSAgICBpbmZvMi5wcmVmaXggPSAic29hcCI7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvMi51cmkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzIpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIE5hbWVzcGFjZUluZm8gaW5mbzMgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIGluZm8zLnByZWZpeCA9ICJodHRwIjsgIC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvMy51cmkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzMpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIE5hbWVzcGFjZUluZm8gaW5mbzQgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIGluZm80LnByZWZpeCA9ICJtaW1lIjsgLy8kTk9OLU5MUy0xJAotICAgIGluZm80LnVyaSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvNCk7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvNSA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzUucHJlZml4ID0gInNvYXBlbmMiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzUudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvNSk7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvNiA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzYucHJlZml4ID0gInNvYXBlbnYiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzYudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvNik7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvNyA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzcucHJlZml4ID0gInhzaSI7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvNy51cmkgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiOyAvLyROT04tTkxTLTEkCi0gICAgbmFtZXNwYWNlSW5mb0xpc3QuYWRkKGluZm83KTsKLSAgICBjaGVja2VkTGlzdC5hZGQoImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBOYW1lc3BhY2VJbmZvIGluZm84ID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLSAgICBpbmZvOC5wcmVmaXggPSAieHNkIjsgLy8kTk9OLU5MUy0xJAotICAgIGluZm84LnVyaSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzgpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgdXBkYXRlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkRGF0YSBoRmlsbEdEID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgaEZpbGxHRC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGhGaWxsR0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICAKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShoRmlsbEdEKTsKLSAgICBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgZ3JpZExheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIGdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQoZ3JpZExheW91dCk7Ci0KLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgCi0gICAgQnV0dG9uIGhpZGRlbkJ1dHRvbiA9IG5ldyBCdXR0b24oY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgaGlkZGVuQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotICAgIGhpZGRlbkJ1dHRvbi5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICBoaWRkZW5CdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0KLSAgICBTZWxlY3Rpb25MaXN0ZW5lciBzZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgICAgeyAgCi0gICAgICAgIGlmIChlLndpZGdldCA9PSBhZGRCdXR0b24pCi0gICAgICAgIHsKLSAgICAgICAgICBwZXJmb3JtTmV3KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OyAgIAotICAgIAotICAgIC8vIGNyZWF0ZSBhIGNvbXBvc2l0ZSB0byBob2xkIHRoZSB0aHJlZSBidXR0b25zCi0gICAgQ29tcG9zaXRlIGJ1dHRvbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0KLSAgICBidXR0b25Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShoRmlsbEdEKTsKLSAgICBHcmlkTGF5b3V0IGJ1dHRvbkdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGJ1dHRvbkdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgYnV0dG9uR3JpZExheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOwotICAgIGJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXQoYnV0dG9uR3JpZExheW91dCk7Ci0KLSAgICAvLyBhZGQgdGhlIE5ldyBidXR0b24KLSAgICAvLwotICAgIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0KLSAgICBhZGRCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbkNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGFkZEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEJ1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsvL1ZpZXdVdGlsaXR5LmNyZWF0ZUhvcml6b250YWxGaWxsKCkpOwotICAgIGFkZEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihzZWxlY3Rpb25MaXN0ZW5lcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwZXJmb3JtTmV3KCkKLSAgewotICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgRWRpdE5hbWVzcGFjZUluZm9EaWFsb2cgZGlhbG9nID0gaW52b2tlRGlhbG9nKFhNTENvbW1vblJlc291cmNlcy5nZXRJbnN0YW5jZSgpLmdldFN0cmluZygiX1VJX0xBQkVMX05FV19OQU1FU1BBQ0VfSU5GT1JNQVRJT04iKSwgaW5mbyk7ICAvLyROT04tTkxTLTEkCi0gICAgaWYgKGRpYWxvZy5nZXRSZXR1cm5Db2RlKCkgPT0gRGlhbG9nLk9LKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvKTsKLSAgICAgIGNoZWNrZWRMaXN0LmFkZCgidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwZXJmb3JtRGVsYXllZFVwZGF0ZSgpOwotICAgIH0KLSAgfSAKLSAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgRWRpdE5hbWVzcGFjZUluZm9EaWFsb2cgaW52b2tlRGlhbG9nKFN0cmluZyB0aXRsZSwgTmFtZXNwYWNlSW5mbyBpbmZvKQotICB7Ci0gICAgU2hlbGwgc2hlbGwgPSBYTUxDb21tb25SZXNvdXJjZXMuZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotICAgIEVkaXROYW1lc3BhY2VJbmZvRGlhbG9nIGRpYWxvZyA9IG5ldyBFZGl0TmFtZXNwYWNlSW5mb0RpYWxvZyhzaGVsbCwgaW5mbyk7Ci0gICAgZGlhbG9nLmNyZWF0ZSgpOwotICAgIGRpYWxvZy5nZXRTaGVsbCgpLnNldFRleHQodGl0bGUpOwotICAgIGRpYWxvZy5zZXRCbG9ja09uT3Blbih0cnVlKTsKLSAgICBkaWFsb2cuc2V0UmVzb3VyY2VMb2NhdGlvbihyZXNvdXJjZUxvY2F0aW9uKTsKLSAgICBkaWFsb2cub3BlbigpOyAgICAgIAotICAgIHJldHVybiBkaWFsb2c7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVsYXllZFVwZGF0ZSgpCi0gIHsKLSAgICBSdW5uYWJsZSBkZWxheWVkVXBkYXRlID0gbmV3IFJ1bm5hYmxlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgewotICAgICAgICB1cGRhdGUoKTsKLSAgICAgIH0KLSAgICB9OwotICAgIERpc3BsYXkuZ2V0Q3VycmVudCgpLmFzeW5jRXhlYyhkZWxheWVkVXBkYXRlKTsKLQotICAgIGlmICh1cGRhdGVMaXN0ZW5lciAhPSBudWxsKQotICAgIHsKLSAgICAgIHVwZGF0ZUxpc3RlbmVyLnVwZGF0ZU9jY3VyZWQodGhpcywgbmFtZXNwYWNlSW5mb0xpc3QpOwotICAgIH0KLSAgfQotIAotICBwcm90ZWN0ZWQgTmFtZXNwYWNlSW5mbyBnZXRUYXJnZXROYW1lc3BhY2VJbmZvKCkKLSAgewotICAgIHJldHVybiAobmFtZXNwYWNlSW5mb0xpc3QgIT0gbnVsbCAmJiBuYW1lc3BhY2VJbmZvTGlzdC5zaXplKCkgPiAwKSA/IAotICAgICAgICAgICAoTmFtZXNwYWNlSW5mbyluYW1lc3BhY2VJbmZvTGlzdC5nZXQoMCkgOgotICAgICAgICAgICBudWxsOwotICB9ICAgIAotCi0gICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgdm9pZCB1cGRhdGUoKQotICB7Ci0gICAgdXBkYXRlSGVscGVyKG5hbWVzcGFjZUluZm9MaXN0KTsKLSAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyB2b2lkIHVwZGF0ZUhlbHBlcihMaXN0IG5hbWVzcGFjZUluZm9MaXN0KQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpZiAodmlzaWJsZVJvd3MgIT0gLTEgJiYgIWR1bW15Um93c1JlbW92ZWQpCi0gICAgewotLy8gICAgICBkdW1teVJvd3NSZW1vdmVkID0gdHJ1ZTsKLS8vICAgICAgdGFibGVWaWV3ZXIuZ2V0VGFibGUoKS5yZW1vdmVBbGwoKTsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLSAgICB0YWJsZVZpZXdlci5zZXRJbnB1dChuYW1lc3BhY2VJbmZvTGlzdCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgeyAgICAgICAgICAgICAgICAgICAgIAotICAgICAgaWYgKG5hbWVzcGFjZUluZm9MaXN0LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHRhYmxlVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihuYW1lc3BhY2VJbmZvTGlzdC5nZXQoMCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRhYmxlVmlld2VyLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBOYW1lc3BhY2VJbmZvQ2hlY2tib3hDZWxsRWRpdG9yIGV4dGVuZHMgQ2hlY2tib3hDZWxsRWRpdG9yIGltcGxlbWVudHMgTW91c2VMaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIE5hbWVzcGFjZUluZm9DaGVja2JveENlbGxFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCkKLSAgICB7Ci0gICAgICBzdXBlcihwYXJlbnQpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGRvU2V0VmFsdWUoT2JqZWN0IHZhbHVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpCi0gICAgewotICAgICAgIHN1cGVyLmFjdGl2YXRlKCk7Ci0gICAgICAgZGVhY3RpdmF0ZSgpOwotICAgICAgIERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEZvY3VzQ29udHJvbCgpLnJlZHJhdygpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG1vdXNlRG93bihNb3VzZUV2ZW50IGUpICAgCi0gICAgeyAgICAgIAotICAgICAgaWYgKHRhYmxlVmlld2VyLmdldFRhYmxlKCkuZ2V0SXRlbShuZXcgUG9pbnQoZS54LCBlLnkpKSAhPSBudWxsKQotICAgICAgewotICAgICAgfQotICAgIH0gICAgCi0gICAgcHVibGljIHZvaWQgbW91c2VEb3VibGVDbGljayhNb3VzZUV2ZW50IGUpIHt9Ci0gICAgcHVibGljIHZvaWQgbW91c2VVcChNb3VzZUV2ZW50IGUpIHt9Ci0KLQotICB9Ci0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTmFtZXNwYWNlSW5mb0NlbGxNb2RpZmllciBpbXBsZW1lbnRzIElDZWxsTW9kaWZpZXIKLSAgewotICAgIHB1YmxpYyBOYW1lc3BhY2VJbmZvQ2VsbE1vZGlmaWVyKCkKLSAgICB7Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gY2FuTW9kaWZ5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpCi0gICAgewotICAgICAgaWYgKHByb3BlcnR5LmVxdWFscyhJTkNMVURFKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChwcm9wZXJ0eS5lcXVhbHMoUFJFRklYKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7ICAgICAgCi0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRWYWx1ZShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIGludCBjb2x1bW4gPSAwOwotICAgICAgaWYgKHByb3BlcnR5LmVxdWFscyhJTkNMVURFKSkKLSAgICAgIHsKLSAgICAgICAgY29sdW1uID0gMDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmVxdWFscyhQUkVGSVgpKQotICAgICAgewotICAgICAgICBjb2x1bW4gPSAxOwotICAgICAgfQotICAgICAgZWxzZSBpZiAocHJvcGVydHkuZXF1YWxzKE5BTUVTUEFDRV9VUkkpKQotICAgICAgewotICAgICAgICBjb2x1bW4gPSAyOwotICAgICAgfQotCi0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmdldENvbHVtblRleHQoZWxlbWVudCwgY29sdW1uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbW9kaWZ5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHksIE9iamVjdCB2YWx1ZSkKLSAgICB7Ci0gICAgICBUYWJsZUl0ZW0gaXRlbSA9IChUYWJsZUl0ZW0pZWxlbWVudDsKLSAgICAgIGlmIChpdGVtICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmogPSBpdGVtLmdldERhdGEoKTsKLSAgICAgICAgaWYgKG9iaiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IChUYWJsZUVsZW1lbnQpb2JqOwotICAgICAgICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IGhvbGRlci5nZXROYW1lc3BhY2VJbmZvKCk7Ci0gICAgICAgICAgaWYgKHByb3BlcnR5LmVxdWFscyhJTkNMVURFKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoKChCb29sZWFuKXZhbHVlKS5ib29sZWFuVmFsdWUoKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGhvbGRlci5zZXRDaGVja2VkKCJ0cnVlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBjaGVja2VkTGlzdC5zZXQoaG9sZGVyLmdldEluZGV4KCksICJ0cnVlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBob2xkZXIuc2V0Q2hlY2tlZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgIGNoZWNrZWRMaXN0LnNldChob2xkZXIuZ2V0SW5kZXgoKSwgImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5lcXVhbHMoUFJFRklYKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvLnByZWZpeCA9ICgoU3RyaW5nKXZhbHVlKS50cmltKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgUnVubmFibGUgZGVsYXllZFVwZGF0ZSA9IG5ldyBSdW5uYWJsZSgpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH07Ci0gICAgICAgICAgRGlzcGxheS5nZXRDdXJyZW50KCkuYXN5bmNFeGVjKGRlbGF5ZWRVcGRhdGUpOwotICAgICAgICAgIGlmICh1cGRhdGVMaXN0ZW5lciAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVwZGF0ZUxpc3RlbmVyLnVwZGF0ZU9jY3VyZWQodGhpcywgbmFtZXNwYWNlSW5mb0xpc3QpOwotICAgICAgICAgIH0KLQotLy8gICAgICAgICAgcGVyZm9ybURlbGF5ZWRVcGRhdGUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfSAgICAgICAgICAgICAgICAgICAKLQotICBwcm90ZWN0ZWQgY2xhc3MgVGFibGVFbGVtZW50Ci0gIHsKLSAgICBOYW1lc3BhY2VJbmZvIGluZm87Ci0gICAgaW50IGluZGV4OwotICAgIFN0cmluZyBjaGVja2VkID0gInRydWUiOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgVGFibGVFbGVtZW50KE5hbWVzcGFjZUluZm8gaW5mbywgaW50IGluZGV4KQotICAgIHsKLSAgICAgIHRoaXMuaW5mbyA9IGluZm87Ci0gICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBOYW1lc3BhY2VJbmZvIGdldE5hbWVzcGFjZUluZm8oKQotICAgIHsKLSAgICAgIHJldHVybiBpbmZvOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgaW50IGdldEluZGV4KCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2hlY2tlZCgpCi0gICAgewotICAgICAgcmV0dXJuIGNoZWNrZWQ7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldENoZWNrZWQoU3RyaW5nIGNoZWNrZWQpCi0gICAgewotICAgICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTmFtZXNwYWNlSW5mb1RhYmxlTGFiZWxQcm92aWRlcgotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIE5hbWVzcGFjZUluZm9UYWJsZUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyLCBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0gICAgcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNEZWxldGVkKE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLSAgICB7Ci0gICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlSW5mb0xpc3Quc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IChOYW1lc3BhY2VJbmZvKW5hbWVzcGFjZUluZm9MaXN0LmdldChpKTsKLSAgICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IG5ldyBUYWJsZUVsZW1lbnQoaW5mbywgaSk7Ci0gICAgICAgIGhvbGRlci5zZXRDaGVja2VkKChTdHJpbmcpY2hlY2tlZExpc3QuZ2V0KGkpKTsKLSAgICAgICAgdi5hZGQoaG9sZGVyKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB2LnRvQXJyYXkoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IG9iamVjdCwgaW50IGNvbHVtbikKLSAgICB7Ci0gICAgICBUYWJsZUVsZW1lbnQgaG9sZGVyID0gKFRhYmxlRWxlbWVudClvYmplY3Q7Ci0gICAgICBOYW1lc3BhY2VJbmZvIGluZm8gPSBob2xkZXIuZ2V0TmFtZXNwYWNlSW5mbygpOwotICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgICBzd2l0Y2ggKGNvbHVtbikKLSAgICAgIHsKLSAgICAgICAgY2FzZSAxOiB7IHJlc3VsdCA9IGluZm8ucHJlZml4OyBicmVhazsgfQotICAgICAgICBjYXNlIDI6IHsgcmVzdWx0ID0gaW5mby51cmk7IGJyZWFrOyB9Ci0gICAgICB9Ci0gICAgICByZXN1bHQgPSByZXN1bHQgIT0gbnVsbCA/IHJlc3VsdC50cmltKCkgOiAiIjsgLy8kTk9OLU5MUy0xJAotICAgICAgaWYgKHJlc3VsdC5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29sdW1uKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAyOiAKLSAgICAgICAgICB7IAotICAgICAgICAgICAgcmVzdWx0ID0gWE1MQ29tbW9uUmVzb3VyY2VzLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfVUlfTk9fTkFNRVNQQUNFX05BTUUiKTsgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBicmVhazsgCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotLy8gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdFByZWZpeCgpCi0vLyAgICB7Ci0vLyAgICAgIFN0cmluZyBkZWZhdWx0UHJlZml4ID0gInAiOwotLy8gICAgICBpZiAobmFtZXNwYWNlSW5mb0xpc3QgPT0gbnVsbCkKLS8vICAgICAgICByZXR1cm4gZGVmYXVsdFByZWZpeDsKLS8vCi0vLyAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotLy8gICAgICBmb3IgKGludCBpPTA7IGk8bmFtZXNwYWNlSW5mb0xpc3Quc2l6ZSgpOyBpKyspCi0vLyAgICAgIHsKLS8vICAgICAgICBOYW1lc3BhY2VJbmZvIG5zaW5mbyA9IChOYW1lc3BhY2VJbmZvKW5hbWVzcGFjZUluZm9MaXN0LmdldChpKTsKLS8vICAgICAgICBpZiAobnNpbmZvLnByZWZpeCAhPSBudWxsKQotLy8gICAgICAgICAgdi5hZGRFbGVtZW50KG5zaW5mby5wcmVmaXgpOwotLy8gICAgICB9Ci0vLwotLy8gICAgICBpZiAodi5jb250YWlucyhkZWZhdWx0UHJlZml4KSkKLS8vICAgICAgewotLy8gICAgICAgIFN0cmluZyBzID0gZGVmYXVsdFByZWZpeDsKLS8vICAgICAgICBmb3IgKGludCBqPTA7IHYuY29udGFpbnMocyk7IGorKykKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICBzID0gZGVmYXVsdFByZWZpeCArIEludGVnZXIudG9TdHJpbmcoaik7Ci0vLyAgICAgICAgfQotLy8gICAgICAgIHJldHVybiBzOwotLy8gICAgICB9Ci0vLyAgICAgIGVsc2UKLS8vICAgICAgICByZXR1cm4gZGVmYXVsdFByZWZpeDsKLS8vICAgIH0KLQotICAgIHB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3Qgb2JqZWN0LCBpbnQgY29sdW1uSW5kZXgpCi0gICAgewotICAgICAgaWYgKGNvbHVtbkluZGV4ID09IDApICAvLyBPdXRwdXQgQ29sdW1uCi0gICAgICB7Ci0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBUYWJsZUVsZW1lbnQgaG9sZGVyID0gKFRhYmxlRWxlbWVudCkgb2JqZWN0OwotICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBob2xkZXIuZ2V0Q2hlY2tlZCgpOwotICAgICAgICAgIGlmIChyZXN1bHQuZXF1YWxzKCJ0cnVlIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9vdXRwdXRfeWVzLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9vdXRwdXRfbm8uZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3Qgb2JqZWN0LCBPYmplY3QgcHJvcGVydHkpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsKLSAgICB9Ci0gIH0KLQotICBjbGFzcyBOYW1lc3BhY2VOYXZpZ2FibGVUYWJsZVZpZXdlciBleHRlbmRzIE5hdmlnYWJsZVRhYmxlVmlld2VyCi0gIHsKLSAgICBwdWJsaWMgTmFtZXNwYWNlTmF2aWdhYmxlVGFibGVWaWV3ZXIoVGFibGUgcGFyZW50KQotICAgIHsKLSAgICAgIHN1cGVyKHBhcmVudCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmV3V1NETFdpemFyZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL05ld1dTRExXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1Y2ZkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmV3V1NETFdpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzExMDggMTk2OTk3ICAgZXJpY2RwQGNhLmlibS5jb20gLSBFcmljIFBldGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckRlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlByZWZlcmVuY2VzVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLlVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuc2VydmljZS5wb2xpY3kudWkucHJvcGVydGllcy5TZXJ2aWNlUG9saWNpZXNQcm9wZXJ0eVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJpbmRpbmdHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuaW50ZXJuYWwudXRpbC5ET01WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkNNVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTmV3V1NETFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgewotCXByaXZhdGUgV1NETE5ld0ZpbGVQYWdlIG5ld0ZpbGVQYWdlOwotCXByaXZhdGUgV1NETE5ld0ZpbGVPcHRpb25zUGFnZSBvcHRpb25zUGFnZTsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKLQlwcml2YXRlIEJpbmRpbmdHZW5lcmF0b3IgZ2VuZXJhdG9yOwotCXByaXZhdGUgYm9vbGVhbiBmT3BlbkVkaXRvcldoZW5GaW5pc2hlZDsKLQlwcml2YXRlIElGaWxlIGZOZXdGaWxlID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBOZXdXU0RMV2l6YXJkLgotCSAqLwotCXB1YmxpYyBOZXdXU0RMV2l6YXJkKCkgewotCQlzdXBlcigpOwotCQlnZW5lcmF0b3IgPSBuZXcgQmluZGluZ0dlbmVyYXRvcihudWxsLCBudWxsKTsKLQkJZk9wZW5FZGl0b3JXaGVuRmluaXNoZWQgPSB0cnVlOwotCX0KLQkKLQlwdWJsaWMgTmV3V1NETFdpemFyZChib29sZWFuIG9wZW5FZGl0b3JXaGVuRmluaXNoZWQpIHsKLQkJdGhpcygpOwotCQlmT3BlbkVkaXRvcldoZW5GaW5pc2hlZCA9IG9wZW5FZGl0b3JXaGVuRmluaXNoZWQ7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZCNwZXJmb3JtRmluaXNoKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgewotCQlmTmV3RmlsZSA9IG5ld0ZpbGVQYWdlLmNyZWF0ZU5ld0ZpbGUoKTsKLQotCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJU3RyaW5nIGNoYXJTZXQgPSBwcmVmZXJlbmNlLmdldFN0cmluZyhDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5PVVRQVVRfQ09ERVNFVCk7Ci0JCWlmIChjaGFyU2V0ID09IG51bGwgfHwgY2hhclNldC50cmltKCkuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQljaGFyU2V0ID0gIlVURi04IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0KLQkJU3RyaW5nIHdzZGxQcmVmaXggPSAid3NkbCI7IC8vJE5PTi1OTFMtMSQKLQkJVmVjdG9yIG5hbWVzcGFjZXMgPSBvcHRpb25zUGFnZS5nZXROYW1lc3BhY2VJbmZvKCk7Ci0KLQkJU3RyaW5nIHByZWZpeCA9IG9wdGlvbnNQYWdlLmdldFByZWZpeCgpOwotCQlTdHJpbmcgZGVmaW5pdGlvbk5hbWUgPSBvcHRpb25zUGFnZS5nZXREZWZpbml0aW9uTmFtZSgpOwotCi0JCVVSSSB1cmkyID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZk5ld0ZpbGUuZ2V0RnVsbFBhdGgoKS50b09TU3RyaW5nKCksIGZhbHNlKTsKLQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0JCVdTRExSZXNvdXJjZUltcGwgcmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbCkgcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIikpOyAvLyROT04tTkxTLTEkCi0JCXJlc291cmNlLnNldFVSSSh1cmkyKTsKLQkJCi0JCVdTRExGYWN0b3J5SW1wbCBmYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotCQlEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uID0gKERlZmluaXRpb25JbXBsKSBmYWN0b3J5LmNyZWF0ZURlZmluaXRpb24oKTsKLQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZGVmaW5pdGlvbik7Ci0JCQotCQlkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZShvcHRpb25zUGFnZS5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCWRlZmluaXRpb24uc2V0TG9jYXRpb24oZk5ld0ZpbGUuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTsKLQkJZGVmaW5pdGlvbi5zZXRFbmNvZGluZyhjaGFyU2V0KTsKLQkJZGVmaW5pdGlvbi5zZXRRTmFtZShuZXcgUU5hbWUod3NkbFByZWZpeCwgZGVmaW5pdGlvbk5hbWUpKTsKLQkJZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCBvcHRpb25zUGFnZS5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lc3BhY2VzLnNpemUoKTsgaSsrKSB7Ci0JCQlOYW1lc3BhY2VJbmZvIGluZm8gPSAoTmFtZXNwYWNlSW5mbykgbmFtZXNwYWNlcy5nZXQoaSk7Ci0KLQkJCWlmIChpbmZvLnByZWZpeC5sZW5ndGgoKSA+IDApIHsKLQkJCQlkZWZpbml0aW9uLmFkZE5hbWVzcGFjZShpbmZvLnByZWZpeCwgaW5mby51cmkpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UobnVsbCwgaW5mby51cmkpOwotCQkJfQotCQl9Ci0JCS8vIFRPRE8gOiBjcy4uLiB3aHkgZG8gd2UgbmVlZCB0aGlzPyAgdGhlc2UgY2FsbHMgYXJlIGV2aWwhCi0JCWRlZmluaXRpb24udXBkYXRlRWxlbWVudCh0cnVlKTsKLQkJdHJ5IHsKLQkJCWlmIChvcHRpb25zUGFnZS5nZXRDcmVhdGVTa2VsZXRvbkJvb2xlYW4oKSkgewotCQkJCWlmIChvcHRpb25zUGFnZS5pc1NvYXBEb2NMaXRlcmFsUHJvdG9jb2woKSkgewotCQkJCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX1RZUEVfT1JfREVGSU5JVElPTiA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfSU5GT19FTEVNRU5UX0RFQ0xBUkFUSU9OOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuUEFSVF9UWVBFX09SX0RFRklOSVRJT04gPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX0lORk9fVFlQRV9ERUZJTklUSU9OOwotCQkJCX0KLQotCQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLnNlcnZpY2VOYW1lID0gZGVmaW5pdGlvbk5hbWU7Ci0JCQkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIucG9ydE5hbWUgPSBkZWZpbml0aW9uTmFtZSArIG9wdGlvbnNQYWdlLmdldFByb3RvY29sKCk7Ci0JCQkJU2VydmljZSBzZXJ2aWNlID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlU2VydmljZShkZWZpbml0aW9uKTsKLQotCQkJCS8vIEdlbmVyYXRlIEJpbmRpbmcKLQkJCQlJdGVyYXRvciBiaW5kaW5nSXQgPSBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpLml0ZXJhdG9yKCk7Ci0JCQkJQmluZGluZyBiaW5kaW5nID0gbnVsbDsKLQkJCQlpZiAoYmluZGluZ0l0Lmhhc05leHQoKSkgewotCQkJCQliaW5kaW5nID0gKEJpbmRpbmcpIGJpbmRpbmdJdC5uZXh0KCk7Ci0JCQkJfQotCi0JCQkJZ2VuZXJhdG9yLnNldERlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0JCQkJZ2VuZXJhdG9yLnNldEJpbmRpbmcoYmluZGluZyk7Ci0JCQkJUG9ydCBwb3J0ID0gKFBvcnQpIHNlcnZpY2UuZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JCQkJZ2VuZXJhdG9yLnNldE5hbWUoQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXROYW1lKHBvcnQuZ2V0RUJpbmRpbmcoKSkpOwotCQkJCWdlbmVyYXRvci5zZXRSZWZOYW1lKENvbXBvbmVudFJlZmVyZW5jZVV0aWwuZ2V0UG9ydFR5cGVSZWZlcmVuY2UocG9ydC5nZXRFQmluZGluZygpKSk7Ci0JCQkJZ2VuZXJhdG9yLnNldE92ZXJ3cml0ZSh0cnVlKTsKLQkJCQlnZW5lcmF0b3IuZ2VuZXJhdGVCaW5kaW5nKCk7Ci0JCQkJZ2VuZXJhdG9yLmdlbmVyYXRlUG9ydENvbnRlbnQoKTsJCi0JCQl9Ci0JCQlyZXNvdXJjZS5zYXZlKG51bGwpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbkNvdWxkIG5vdCB3cml0ZSBuZXcgV1NETCBmaWxlIGluIFdTREwgV2l6YXJkOiAiICsgZSk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCi0JCS8qCi0JCSAqIGlmIChmaWxlICE9IG51bGwpIHsgZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBuZXcKLQkJICogU3RydWN0dXJlZFNlbGVjdGlvbihmaWxlKTsgaWYgKHNlbGVjdGlvbiAhPSBudWxsKSB7IElXb3JrYmVuY2gKLQkJICogd29ya2JlbmNoID0gVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpOyBmaW5hbAotCQkgKiBJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9Ci0JCSAqIHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsgZmluYWwgSVdvcmtiZW5jaFBhcnQKLQkJICogZm9jdXNQYXJ0ID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCk7IGlmCi0JCSAqIChmb2N1c1BhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7Ci0JCSAqIERpc3BsYXkuZ2V0Q3VycmVudCgpLmFzeW5jRXhlYyAobmV3IFJ1bm5hYmxlKCkgeyBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCSAqICgoSVNldFNlbGVjdGlvblRhcmdldClmb2N1c1BhcnQpLnNlbGVjdFJldmVhbChzZWxlY3Rpb24pOyB9IH0pOyB9IH0gfQotCQkgKi8KLQkJaWYgKGZPcGVuRWRpdG9yV2hlbkZpbmlzaGVkKSB7Ci0JCQlvcGVuRWRpdG9yKGZOZXdGaWxlKTsKLQkJfQotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpemFyZCNpbml0KElXb3JrYmVuY2gsCi0JICogICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0KLQkJLy8gTmVlZCBuZXcgaWNvbgotCQl0aGlzLnNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IuY2xhc3MsICJpY29ucy9uZXdfd3NkbF93aXoucG5nIikpOyAvLyROT04tTkxTLTEkCi0JCXRoaXMuc2V0V2luZG93VGl0bGUoTWVzc2FnZXMuX1VJX1RJVExFX05FV19XU0RMX0ZJTEUpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7Ci0JCW5ld0ZpbGVQYWdlID0gbmV3IFdTRExOZXdGaWxlUGFnZShzZWxlY3Rpb24pOwotCQlvcHRpb25zUGFnZSA9IG5ldyBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKE1lc3NhZ2VzLl9VSV9USVRMRV9PUFRJT05TLCBNZXNzYWdlcy5fVUlfVElUTEVfT1BUSU9OUywgbnVsbCwgbmV3RmlsZVBhZ2UpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJb3B0aW9uc1BhZ2Uuc2V0QmluZGluZ0dlbmVyYXRvcihnZW5lcmF0b3IpOwotCQlhZGRQYWdlKG5ld0ZpbGVQYWdlKTsKLQkJYWRkUGFnZShvcHRpb25zUGFnZSk7Ci0JfQotCi0JcHVibGljIElQYXRoIGdldE5ld0ZpbGVQYXRoKCkgewotCQlTdHJpbmcgZmlsZU5hbWUgPSBuZXdGaWxlUGFnZS5nZXRGaWxlTmFtZSgpOwotCQlyZXR1cm4gZmlsZU5hbWUgIT0gbnVsbCA/IG5ldyBQYXRoKGZpbGVOYW1lKSA6IG51bGw7Ci0JfQotCQotCXB1YmxpYyBJRmlsZSBnZXROZXdGaWxlKCkgewotCQlyZXR1cm4gZk5ld0ZpbGU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuRmluaXNoKCkgewotCQlpZiAobmV3RmlsZVBhZ2UuaXNQYWdlQ29tcGxldGUoKSAmJiBvcHRpb25zUGFnZS5pc1BhZ2VDb21wbGV0ZSgpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0Jc3RhdGljIHB1YmxpYyB2b2lkIG9wZW5FZGl0b3IoZmluYWwgSUZpbGUgaUZpbGUpIHsKLQkJaWYgKGlGaWxlICE9IG51bGwpIHsKLQkJCUlXb3JrYmVuY2ggd29ya2JlbmNoID0gVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpOwotCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0KLQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQl0cnkgewotCQkJCQkJU3RyaW5nIGVkaXRvcklkID0gbnVsbDsKLQkJCQkJCUlFZGl0b3JEZXNjcmlwdG9yIGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKGlGaWxlLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpLCBpRmlsZS5nZXRDb250ZW50RGVzY3JpcHRpb24oKS5nZXRDb250ZW50VHlwZSgpKTsKLQkJCQkJCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJCQkJCWVkaXRvcklkID0gZWRpdG9yLmdldElkKCk7Ci0JCQkJCQl9Ci0JCQkJCQl3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpLm9wZW5FZGl0b3IobmV3IEZpbGVFZGl0b3JJbnB1dChpRmlsZSksIGVkaXRvcklkKTsKLQkJCQkJfQotCQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXgpIHsKLQkJCQkJCS8vIEIyQkdVSVBsdWdpbi5nZXRQbHVnaW4oKS5nZXRNc2dMb2dnZXIoKS53cml0ZSgiRXhjZXB0aW9uCi0JCQkJCQkvLyBlbmNvdW50ZXJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gb3BlbiBmaWxlOiAiICsgaUZpbGUKLQkJCQkJCS8vICsgIlxuXG4iICsgZXgpOwotCQkJCQl9Ci0JCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4KSB7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCXB1YmxpYyBjbGFzcyBBdmFpbGFibGVDb250ZW50Q01WaXNpdG9yIGV4dGVuZHMgQ01WaXNpdG9yIHsKLQkJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5DTFVERV9BVFRSSUJVVEVTID0gTW9kZWxRdWVyeS5JTkNMVURFX0FUVFJJQlVURVM7Ci0JCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ0xVREVfQ0hJTERfTk9ERVMgPSBNb2RlbFF1ZXJ5LklOQ0xVREVfQ0hJTERfTk9ERVM7Ci0JCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ0xVREVfU0VRVUVOQ0VfR1JPVVBTID0gTW9kZWxRdWVyeS5JTkNMVURFX1NFUVVFTkNFX0dST1VQUzsKLQotCQlwdWJsaWMgSGFzaHRhYmxlIGNoaWxkTm9kZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotCQlwdWJsaWMgSGFzaHRhYmxlIGF0dHJpYnV0ZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotCQlwdWJsaWMgRWxlbWVudCByb290RWxlbWVudDsKLQkJcHVibGljIENNRWxlbWVudERlY2xhcmF0aW9uIHJvb3RFbGVtZW50RGVjbGFyYXRpb247Ci0JCXB1YmxpYyBib29sZWFuIGlzUm9vdFZpc2l0ZWQ7Ci0JCXByb3RlY3RlZCBib29sZWFuIGluY2x1ZGVTZXF1ZW5jZUdyb3VwczsKLQkJcHVibGljIERPTVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLQkJcHVibGljIEF2YWlsYWJsZUNvbnRlbnRDTVZpc2l0b3IoRWxlbWVudCByb290RWxlbWVudCwgQ01FbGVtZW50RGVjbGFyYXRpb24gcm9vdEVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJdGhpcy5yb290RWxlbWVudCA9IHJvb3RFbGVtZW50OwotCQkJdGhpcy5yb290RWxlbWVudERlY2xhcmF0aW9uID0gcm9vdEVsZW1lbnREZWNsYXJhdGlvbjsKLQkJCXZhbGlkYXRvciA9IG5ldyBET01WYWxpZGF0b3IoKTsKLQkJfQotCi0JCXByb3RlY3RlZCBTdHJpbmcgZ2V0S2V5KENNTm9kZSBjbU5vZGUpIHsKLQkJCVN0cmluZyBrZXkgPSBjbU5vZGUuZ2V0Tm9kZU5hbWUoKTsKLQkJCUNNRG9jdW1lbnQgY21Eb2N1bWVudCA9IChDTURvY3VtZW50KSBjbU5vZGUuZ2V0UHJvcGVydHkoIkNNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKGNtRG9jdW1lbnQgIT0gbnVsbCkgewotCQkJCVN0cmluZyBuYW1lc3BhY2VVUkkgPSAoU3RyaW5nKSBjbURvY3VtZW50LmdldFByb3BlcnR5KCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvdGFyZ2V0TmFtZXNwYWNlVVJJIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlpZiAobmFtZXNwYWNlVVJJICE9IG51bGwpIHsKLQkJCQkJa2V5ID0gIlsiICsgbmFtZXNwYWNlVVJJICsgIl0iICsga2V5OyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0KLQkJcHVibGljIExpc3QgY29tcHV0ZUF2YWlsYWJsZUNvbnRlbnQoaW50IGluY2x1ZGVPcHRpb25zKSB7Ci0JCQlWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLQotCQkJaW50IGNvbnRlbnRUeXBlID0gcm9vdEVsZW1lbnREZWNsYXJhdGlvbi5nZXRDb250ZW50VHlwZSgpOwotCQkJaW5jbHVkZVNlcXVlbmNlR3JvdXBzID0gKChpbmNsdWRlT3B0aW9ucyAmIElOQ0xVREVfU0VRVUVOQ0VfR1JPVVBTKSAhPSAwKTsKLQkJCXZpc2l0Q01Ob2RlKHJvb3RFbGVtZW50RGVjbGFyYXRpb24pOwotCi0JCQlpZiAoKGluY2x1ZGVPcHRpb25zICYgSU5DTFVERV9BVFRSSUJVVEVTKSAhPSAwKSB7Ci0JCQkJdi5hZGRBbGwoYXR0cmlidXRlVGFibGUudmFsdWVzKCkpOwotCQkJCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gbmlsbGFibGVBdHRyaWJ1dGUgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgcm9vdEVsZW1lbnREZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25pbGxhYmxlIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlpZiAobmlsbGFibGVBdHRyaWJ1dGUgIT0gbnVsbCkgewotCQkJCQl2LmFkZChuaWxsYWJsZUF0dHJpYnV0ZSk7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoKGluY2x1ZGVPcHRpb25zICYgSU5DTFVERV9DSElMRF9OT0RFUykgIT0gMCkgewotCQkJCWlmIChjb250ZW50VHlwZSA9PSBDTUVsZW1lbnREZWNsYXJhdGlvbi5NSVhFRCB8fCBjb250ZW50VHlwZSA9PSBDTUVsZW1lbnREZWNsYXJhdGlvbi5FTEVNRU5UKSB7Ci0JCQkJCXYuYWRkQWxsKGNoaWxkTm9kZVRhYmxlLnZhbHVlcygpKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uQU5ZKSB7Ci0JCQkJCUNNRG9jdW1lbnQgY21Eb2N1bWVudCA9IChDTURvY3VtZW50KSByb290RWxlbWVudERlY2xhcmF0aW9uLmdldFByb3BlcnR5KCJDTURvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLQkJCQkJaWYgKGNtRG9jdW1lbnQgIT0gbnVsbCkgewotCQkJCQkJQ01OYW1lZE5vZGVNYXAgZWxlbWVudHMgPSBjbURvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0JCQkJCQlmb3IgKEl0ZXJhdG9yIGkgPSBlbGVtZW50cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQkJCQl2LmFkZCgoQ01FbGVtZW50RGVjbGFyYXRpb24pIGkubmV4dCgpKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmIChjb250ZW50VHlwZSA9PSBDTUVsZW1lbnREZWNsYXJhdGlvbi5NSVhFRCB8fCBjb250ZW50VHlwZSA9PSBDTUVsZW1lbnREZWNsYXJhdGlvbi5QQ0RBVEEgfHwgY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uQU5ZKSB7Ci0JCQkJCUNNRGF0YVR5cGUgZGF0YVR5cGUgPSByb290RWxlbWVudERlY2xhcmF0aW9uLmdldERhdGFUeXBlKCk7Ci0JCQkJCWlmIChkYXRhVHlwZSAhPSBudWxsKSB7Ci0JCQkJCQl2LmFkZChkYXRhVHlwZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gdjsKLQkJfQotCi0JCS8qCi0JCSAqIHB1YmxpYyB2b2lkIHZpc2l0Q01BbnlFbGVtZW50KENNQW55RWxlbWVudCBhbnlFbGVtZW50KSB7IFN0cmluZyB1cmkgPQotCQkgKiBhbnlFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpOyBMaXN0IGxpc3QgPQotCQkgKiBnZXRDTURvY3VtZW50TGlzdChyb290RWxlbWVudCwgcm9vdEVsZW1lbnREZWNsYXJhdGlvbiwgdXJpKTsgZm9yCi0JCSAqIChJdGVyYXRvciBpdGVyYXRvciA9IGxpc3QuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApIHsKLQkJICogQ01Eb2N1bWVudCBjbWRvY3VtZW50ID0gKENNRG9jdW1lbnQpaXRlcmF0b3IubmV4dCgpOyBpZiAoY21kb2N1bWVudCAhPQotCQkgKiBudWxsKSB7IENNTmFtZWROb2RlTWFwIG1hcCA9IGNtZG9jdW1lbnQuZ2V0RWxlbWVudHMoKTsgaW50IHNpemUgPQotCQkgKiBtYXAuZ2V0TGVuZ3RoKCk7IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7IENNTm9kZSBlZCA9Ci0JCSAqIG1hcC5pdGVtKGkpOwotCQkgKiAKLQkJICogY2hpbGROb2RlVGFibGUucHV0KGdldEtleShlZCksIGVkKTsgfSB9IH0gfQotCQkgKi8KLQkJcHVibGljIHZvaWQgdmlzaXRDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKENNQXR0cmlidXRlRGVjbGFyYXRpb24gYWQpIHsKLQkJCXN1cGVyLnZpc2l0Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbihhZCk7Ci0JCQlhdHRyaWJ1dGVUYWJsZS5wdXQoYWQuZ2V0Tm9kZU5hbWUoKSwgYWQpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgdmlzaXRDTUVsZW1lbnREZWNsYXJhdGlvbihDTUVsZW1lbnREZWNsYXJhdGlvbiBlZCkgewotCQkJaWYgKGVkID09IHJvb3RFbGVtZW50RGVjbGFyYXRpb24gJiYgIWlzUm9vdFZpc2l0ZWQpIHsKLQkJCQlpc1Jvb3RWaXNpdGVkID0gdHJ1ZTsKLQkJCQlzdXBlci52aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKGVkKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWlmICghQm9vbGVhbi5UUlVFLmVxdWFscyhlZC5nZXRQcm9wZXJ0eSgiQWJzdHJhY3QiKSkpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQljaGlsZE5vZGVUYWJsZS5wdXQoZ2V0S2V5KGVkKSwgZWQpOwotCQkJCX0KLQotCQkJCUNNTm9kZUxpc3Qgc3Vic3RpdHV0aW9uR3JvdXAgPSAoQ01Ob2RlTGlzdCkgZWQuZ2V0UHJvcGVydHkoIlN1YnN0aXR1dGlvbkdyb3VwIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlpZiAoc3Vic3RpdHV0aW9uR3JvdXAgIT0gbnVsbCkgewotCQkJCQloYW5kbGVTdWJzdGl0dXRpb25Hcm91cChzdWJzdGl0dXRpb25Hcm91cCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHJvdGVjdGVkIHZvaWQgaGFuZGxlU3Vic3RpdHV0aW9uR3JvdXAoQ01Ob2RlTGlzdCBzdWJzdGl0dXRpb25Hcm91cCkgewotCQkJaW50IHN1YnN0aXR1dGlvbkdyb3VwTGVuZ3RoID0gc3Vic3RpdHV0aW9uR3JvdXAuZ2V0TGVuZ3RoKCk7Ci0JCQlpZiAoc3Vic3RpdHV0aW9uR3JvdXBMZW5ndGggPiAxKSB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzdWJzdGl0dXRpb25Hcm91cExlbmd0aDsgaSsrKSB7Ci0JCQkJCUNNTm9kZSBlZCA9IHN1YnN0aXR1dGlvbkdyb3VwLml0ZW0oaSk7Ci0JCQkJCWlmICghQm9vbGVhbi5UUlVFLmVxdWFscyhlZC5nZXRQcm9wZXJ0eSgiQWJzdHJhY3QiKSkpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJY2hpbGROb2RlVGFibGUucHV0KGdldEtleShlZCksIGVkKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXB1YmxpYyB2b2lkIHZpc2l0Q01Hcm91cChDTUdyb3VwIGdyb3VwKSB7Ci0JCQlpZiAoaW5jbHVkZVNlcXVlbmNlR3JvdXBzKSB7Ci0JCQkJaWYgKGdyb3VwLmdldE9wZXJhdG9yKCkgPT0gQ01Hcm91cC5TRVFVRU5DRSAmJiBncm91cC5nZXRDaGlsZE5vZGVzKCkuZ2V0TGVuZ3RoKCkgPiAxICYmIGluY2x1ZGVzUmVxdWlyZWRDb250ZW50KGdyb3VwKSkgewotCQkJCQljaGlsZE5vZGVUYWJsZS5wdXQoZ3JvdXAsIGdyb3VwKTsKLQkJCQl9Ci0JCQl9Ci0JCQlzdXBlci52aXNpdENNR3JvdXAoZ3JvdXApOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaW5jbHVkZXNSZXF1aXJlZENvbnRlbnQoQ01Hcm91cCBncm91cCkgewotCQkJTGlzdCBsaXN0ID0gZ2V0VmFsaWRhdG9yKCkuY3JlYXRlQ29udGVudFNwZWNpZmljYXRpb25MaXN0KGdyb3VwKTsKLQkJCXJldHVybiBsaXN0LnNpemUoKSA+IDE7Ci0JCX0KLQotCQlwdWJsaWMgRE9NVmFsaWRhdG9yIGdldFZhbGlkYXRvcigpIHsKLQkJCXJldHVybiB2YWxpZGF0b3I7Ci0JCX0KLQl9IC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gaGVyZQotCQotCQotCXB1YmxpYyB2b2lkIG9wZW5Qcm9qZWN0V1NJUHJvcGVydGllcygpIHsKLQkJU2hlbGwgc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCUlQcm9qZWN0IHRhcmdldFByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3RmlsZVBhZ2UuZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQobmV3RmlsZVBhZ2UuZ2V0RmlsZU5hbWUoKSkpLmdldFByb2plY3QoKTsKLQkJLy9QcmVmZXJlbmNlc1V0aWwuY3JlYXRlUHJvcGVydHlEaWFsb2dPbihzaGVsbCx0YXJnZXRQcm9qZWN0LG51bGwsbnVsbCxudWxsKS5vcGVuKCk7Ci0KLQkJUHJlZmVyZW5jZXNVdGlsLmNyZWF0ZVByb3BlcnR5RGlhbG9nT24oc2hlbGwsdGFyZ2V0UHJvamVjdCxTZXJ2aWNlUG9saWNpZXNQcm9wZXJ0eVBhZ2UuUEFHRV9JRCAsbmV3IFN0cmluZ1tdIHtTZXJ2aWNlUG9saWNpZXNQcm9wZXJ0eVBhZ2UuUEFHRV9JRH0sbnVsbCkub3BlbigpOwotCX0KLQkKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0V1NJUHJlZmVyZW5jZXMoKSB7Ci0JCSAgSVByb2plY3QgdGFyZ2V0UHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXdGaWxlUGFnZS5nZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChuZXdGaWxlUGFnZS5nZXRGaWxlTmFtZSgpKSkuZ2V0UHJvamVjdCgpOwotCQkgIFBlcnNpc3RlbnRXU0lDb250ZXh0IFdTSVNTQmNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0JCSAgCi0JCSAgICAgaWYgKFdTSVNTQmNvbnRleHQucHJvamVjdFN0b3BOb25XU0lDb21wbGlhbmNlcyh0YXJnZXRQcm9qZWN0KSkKLQkJICAgICAgewotCQkgICAgICAgIHJldHVybiAoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLQkJICAgICAgfSAKLQkJICAgICAgZWxzZSBpZiAoV1NJU1NCY29udGV4dC5wcm9qZWN0V2Fybk5vbldTSUNvbXBsaWFuY2VzKHRhcmdldFByb2plY3QpKQotCQkgICAgICB7Ci0JCSAgICAgICAgcmV0dXJuIChQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kpOwotCQkgICAgICB9Ci0JCSAgICAgIGVsc2UgCi0JCSAgICAgIHsKLQkJICAgIAlyZXR1cm4gKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJICAgICAgfQotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1BvcnRXaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Qb3J0V2l6YXJkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MDIyOWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1BvcnRXaXphcmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuUG9ydEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlByb3RvY29sQ29tcG9uZW50Q29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIFBvcnRXaXphcmQgZXh0ZW5kcyBXaXphcmQKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBpbnQgU1RZTEVfTkVXX0JJTkRJTkcgPSAxOwotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIGludCBTVFlMRV9FWElTVElOR19CSU5ESU5HID0gMSA8PCAxOwotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIGludCBTVFlMRV9ERUZBVUxUID0gU1RZTEVfTkVXX0JJTkRJTkcgfCBTVFlMRV9FWElTVElOR19CSU5ESU5HOwotCi0gIHByb3RlY3RlZCBQb3J0R2VuZXJhdG9yIHBvcnRHZW5lcmF0b3I7Ci0gIHByb3RlY3RlZCBQb3J0V2l6YXJkT3B0aW9uc1BhZ2Ugc3BlY2lmeUJpbmRpbmdQYWdlOwotICBwcm90ZWN0ZWQgaW50IHN0eWxlOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgUG9ydFdpemFyZC4KLSAgICovCi0gIHB1YmxpYyBQb3J0V2l6YXJkKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIHRoaXMoc2VydmljZSwgMCk7Ci0gIH0KLQotICBwdWJsaWMgUG9ydFdpemFyZChTZXJ2aWNlIHNlcnZpY2UsIGludCBzdHlsZSkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgcG9ydEdlbmVyYXRvciA9IG5ldyBQb3J0R2VuZXJhdG9yKHNlcnZpY2UpOwotICAgIHNldFdpbmRvd1RpdGxlKE1lc3NhZ2VzLl9VSV9QT1JUX1dJWkFSRCk7IC8vJE5PTi1OTFMtMSQKLSAgICAvL3NldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShXU0RMRWRpdG9yUGx1Z2luLmNsYXNzLCAiaWNvbnMvTmV3WE1MLmdpZiIpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB3aXphcmQgc2V0dXAgaXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBzZXR1cCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkKLSAgewotICAgIHNwZWNpZnlCaW5kaW5nUGFnZSA9IG5ldyBQb3J0V2l6YXJkT3B0aW9uc1BhZ2Uoc3R5bGUpOwotICAgIGFkZFBhZ2Uoc3BlY2lmeUJpbmRpbmdQYWdlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICB7Ci0gICAgT2JqZWN0IG9iamVjdCA9IHBvcnRHZW5lcmF0b3IuZ2VuZXJhdGVQb3J0KCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAob2JqZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgICBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIgPSAoSVNlbGVjdGlvblByb3ZpZGVyKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZWxlY3Rpb25Qcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ob2JqZWN0KSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBjbGFzcyBQb3J0V2l6YXJkT3B0aW9uc1BhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlCi0gIHsKLQotICAgIHByb3RlY3RlZCBQcm90b2NvbENvbXBvbmVudENvbnRyb2wgcHJvdG9jb2xDb21wb25lbnRDb250cm9sOwotCi0gICAgcHVibGljIFBvcnRXaXphcmRPcHRpb25zUGFnZShpbnQgc3R5bGUpCi0gICAgewotICAgICAgc3VwZXIoIlNwZWNpZnlQb3J0UGFnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBzZXRUaXRsZShNZXNzYWdlcy5fVUlfU1BFQ0lGWV9QT1JUX0RFVEFJTFMpOyAvLyROT04tTkxTLTEkCi0gICAgICBzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5fVUlfU1BFQ0lGWV9QT1JUX0RFVEFJTFNfVE9fQkVfQ1JFQVRFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBwdWJsaWMgUG9ydEdlbmVyYXRvciBnZXRHZW5lcmF0b3IoKQotICAgIHsKLSAgICAgIHJldHVybiBwb3J0R2VuZXJhdG9yOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgICB7Ci0gICAgICBQcm90b2NvbENvbXBvbmVudENvbnRyb2wgcHJvdG9jb2xDb21wb25lbnRDb250cm9sID0gbmV3IFBvcnRQcm90b2NvbENvbXBvbmVudENvbnRyb2wocGFyZW50LCBwb3J0R2VuZXJhdG9yKTsKLSAgICAgIHByb3RvY29sQ29tcG9uZW50Q29udHJvbC5pbml0RmllbGRzKCk7Ci0gICAgICBzZXRDb250cm9sKHByb3RvY29sQ29tcG9uZW50Q29udHJvbCk7Ci0gICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByb3RvY29sQ29tcG9uZW50Q29udHJvbCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBPUlRfV0laQVJEKTsKLSAgICB9Ci0gIH0KLQotICBjbGFzcyBQb3J0UHJvdG9jb2xDb21wb25lbnRDb250cm9sIGV4dGVuZHMgUHJvdG9jb2xDb21wb25lbnRDb250cm9sCi0gIHsKLQotICAgIHB1YmxpYyBQb3J0UHJvdG9jb2xDb21wb25lbnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQsIFBvcnRHZW5lcmF0b3IgZ2VuZXJhdG9yKQotICAgIHsKLSAgICAgIHN1cGVyKHBhcmVudCwgZ2VuZXJhdG9yLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRSZWZOYW1lTGFiZWxUZXh0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gTWVzc2FnZXMuX1VJX0JJTkRJTkc7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCBnZXRSZWZOYW1lcygpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKHBvcnRHZW5lcmF0b3IuZ2V0RGVmaW5pdGlvbigpKS5nZXRCaW5kaW5nTmFtZXMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHROYW1lKCkKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBwb3J0R2VuZXJhdG9yLmdldFNlcnZpY2UoKTsKLSAgICAgIHJldHVybiBOYW1lVXRpbC5idWlsZFVuaXF1ZVBvcnROYW1lKHNlcnZpY2UsIG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgY3JlYXRlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKFN0cmluZyBwcm90b2NvbCkKLSAgICB7Ci0gICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ZW5zaW9uID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTGFiZWwocHJvdG9jb2wpOwotICAgICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBleHRlbnNpb24uZ2V0UG9ydENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSgpOwotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvU29hcEJpbmRpbmdPcHRpb25zUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1NvYXBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM4MzA5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvU29hcEJpbmRpbmdPcHRpb25zUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmdlbmVyYXRvci5TT0FQQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmFzZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNvYXBCaW5kaW5nT3B0aW9uc1BhZ2UgaW1wbGVtZW50cyBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UsIFNlbGVjdGlvbkxpc3RlbmVyCi17Ci0gIHByb3RlY3RlZCBCdXR0b24gZG9jTGl0ZXJhbDsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBycGNMaXRlcmFsOwotICBwcm90ZWN0ZWQgQnV0dG9uIHJwY0VuY29kZWQ7Ci0gIHByb3RlY3RlZCBDb21wb3NpdGUgY29udHJvbDsKLSAgcHJvdGVjdGVkIEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yOwotCi0gIHB1YmxpYyBTb2FwQmluZGluZ09wdGlvbnNQYWdlKCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChCYXNlR2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgewotICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOwotICB9Ci0KLSAgcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBjb250cm9sID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBjb250cm9sLnNldExheW91dChsYXlvdXQpOwotCi0gICAgTGFiZWwgc2VwYXJhdG9yID0gbmV3IExhYmVsKGNvbnRyb2wsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCk7Ci0gICAgR3JpZERhdGEgZ2Q9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICBzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBMYWJlbCBvcHRpb25zSGVhZGluZyA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuTk9ORSk7Ci0gICAgb3B0aW9uc0hlYWRpbmcuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfU09BUF9CSU5ESU5HX09QVElPTlMpOyAvLyROT04tTkxTLTEkCi0KLSAgICBkb2NMaXRlcmFsID0gbmV3IEJ1dHRvbihjb250cm9sLCBTV1QuUkFESU8pOwotICAgIGRvY0xpdGVyYWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfUkFESU9fRE9DVU1FTlRfTElURVJBTCk7IC8vJE5PTi1OTFMtMSQKLSAgICBkb2NMaXRlcmFsLnNldFNlbGVjdGlvbih0cnVlKTsKLQotICAgIHJwY0xpdGVyYWwgPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgcnBjTGl0ZXJhbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SQURJT19SUENfTElURVJBTCk7IC8vJE5PTi1OTFMtMSQKLSAgICAKLSAgICBycGNFbmNvZGVkID0gbmV3IEJ1dHRvbihjb250cm9sLCBTV1QuUkFESU8pOwotICAgIHJwY0VuY29kZWQuc2V0VGV4dChNZXNzYWdlcy5fVUlfUkFESU9fUlBDX0VOQ09ERUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpZiAoZ2VuZXJhdG9yLmdldE5hbWUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdlbmVyYXRvci5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBnZW5lcmF0b3IuZ2V0TmFtZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBkZWZpbml0aW9uLmdldEJpbmRpbmcocW5hbWUpOwotCi0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IGVlTGlzdCA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBpZiAoZWVMaXN0LnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWVMaXN0LmdldCgwKTsKLQotICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChlZSk7Ci0gICAgICAgICAgU3RyaW5nIHN0eWxlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoInJwYyIuZXF1YWxzKHN0eWxlKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgaWYgaXQncyBSUEMgTGl0ZXJhbCBvciBSUEMgRW5jb2RlZAotICAgICAgICAgIAlTdHJpbmcgdXNlID0gImVuY29kZWQiOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCUxpc3Qgb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCk7Ci0gICAgICAgICAgCWlmIChvcGVyYXRpb25zLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCWVsZW1lbnQgPSBudWxsOwotICAgICAgICAgIAkJQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BlcmF0aW9ucy5nZXQoMCk7Ci0gICAgICAgICAgCQlpZiAob3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSAhPSBudWxsICYmIG9wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQlPYmplY3Qgb2JqZWN0ID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuZ2V0KDApOwotICAgICAgICAgIAkJCWVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAJCX0KLSAgICAgICAgICAJCWVsc2UgaWYgKG9wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpICE9IG51bGwgJiYgb3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQlPYmplY3Qgb2JqZWN0ID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmdldCgwKTsKLSAgICAgICAgICAJCQllbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KG9iamVjdCk7Ci0gICAgICAgICAgCQl9Ci0gICAgICAgICAgCQllbHNlIGlmIChvcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgCQkJQmluZGluZ0ZhdWx0IGZhdWx0ID0gKEJpbmRpbmdGYXVsdCkgb3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkuZ2V0KDApOwotICAgICAgICAgIAkJCUxpc3QgZmF1bHRFRSA9IGZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIAkJCQotICAgICAgICAgIAkJCWlmIChmYXVsdEVFLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQkJZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChmYXVsdEVFLmdldCgwKSk7Ci0gICAgICAgICAgCQkJfQotICAgICAgICAgIAkJfQotICAgICAgICAgIAkJCi0gICAgICAgICAgCQlpZiAoZWxlbWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgCQkJdXNlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInVzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCQl9Ci0gICAgICAgICAgCX0KLSAgICAgICAgICAJCi0gICAgICAgICAgCWlmICh1c2UgIT0gbnVsbCAmJiAibGl0ZXJhbCIuZXF1YWxzKHVzZSkpIHsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIAkJZG9jTGl0ZXJhbC5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgIAkJcnBjTGl0ZXJhbC5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgCQlycGNFbmNvZGVkLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgICAgCX0KLSAgICAgICAgICAJZWxzZSB7ICAgICAgICAgIAkKLSAgICAgICAgICAJCWRvY0xpdGVyYWwuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAJCXJwY0xpdGVyYWwuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAJCXJwY0VuY29kZWQuc2V0U2VsZWN0aW9uKHRydWUpOwotICAgICAgICAgIAl9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZG9jTGl0ZXJhbC5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBycGNMaXRlcmFsLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHJwY0VuY29kZWQuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgY29tcHV0ZU9wdGlvbnMoKTsKLQotICAgIHJldHVybiBjb250cm9sOwotICB9Ci0KLSAgcHVibGljIENvbXBvc2l0ZSBnZXRDb250cm9sKCkgewotCSAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlQXBwbGljYWJsZSgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICB7Ci0gICAgY29tcHV0ZU9wdGlvbnMoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNvbXB1dGVPcHRpb25zKCkKLSAgewotCSAgaWYgKGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCkgaW5zdGFuY2VvZiBTT0FQQ29udGVudEdlbmVyYXRvcikgewotCQkgIFNPQVBDb250ZW50R2VuZXJhdG9yIHNvYXBHZW5lcmF0b3IgPSAoU09BUENvbnRlbnRHZW5lcmF0b3IpIGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCk7Ci0JCSAgaWYgKGRvY0xpdGVyYWwuZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRTdHlsZShTT0FQQ29udGVudEdlbmVyYXRvci5TVFlMRV9ET0NVTUVOVCk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9MSVRFUkFMKTsKLQkJICB9CSAgCi0JCSAgZWxzZSBpZiAocnBjTGl0ZXJhbC5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBzb2FwR2VuZXJhdG9yLnNldFN0eWxlKFNPQVBDb250ZW50R2VuZXJhdG9yLlNUWUxFX1JQQyk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9MSVRFUkFMKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAocnBjRW5jb2RlZC5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBzb2FwR2VuZXJhdG9yLnNldFN0eWxlKFNPQVBDb250ZW50R2VuZXJhdG9yLlNUWUxFX1JQQyk7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9FTkNPREVEKTsKLQkJICB9Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE9wdGlvbnNPbkdlbmVyYXRvcigpIHsKLQkgIGNvbXB1dGVPcHRpb25zKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1dTRExOZXdGaWxlT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9XU0RMTmV3RmlsZU9wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MDcwMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1dTRExOZXdGaWxlT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JTWVzc2FnZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlBhZ2VCb29rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmluZGluZ0dlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmNvbnRlbnRnZW5lcmF0b3IudWkuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29udGVudGdlbmVyYXRvci51aS5CYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbnRlbnRnZW5lcmF0b3IudWkuSVNvYXBTdHlsZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5TZXJ2aWNlUG9saWN5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuVmFsaWRhdGVIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLk5hbWVzcGFjZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5kaWFsb2dzLlVwZGF0ZUxpc3RlbmVyOwotCi1wdWJsaWMgY2xhc3MgV1NETE5ld0ZpbGVPcHRpb25zUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBNb2RpZnlMaXN0ZW5lciwgVXBkYXRlTGlzdGVuZXIsIFNlbGVjdGlvbkxpc3RlbmVyCi17Ci0gIHByb3RlY3RlZCBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7Ci0gIHByb3RlY3RlZCBUZXh0IHRhcmdldE5hbWVzcGFjZVRleHQ7Ci0gIHByb3RlY3RlZCBUZXh0IHByZWZpeFRleHQ7Ci0gIHByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVBvcnRPcEZpZWxkQm9vbGVhbiA9IHRydWU7Ci0gIAotICBwcm90ZWN0ZWQgUGFnZUJvb2sgcHJvdG9jb2xQYWdlQm9vazsKLSAgcHJvdGVjdGVkIENvbWJvIHByb3RvY29sQ29tYm87Ci0gIHByb3RlY3RlZCBMaW5rIFdTSVByZWZlcmVuY2VMaW5rOwotICAKLSAgcHJpdmF0ZSBCaW5kaW5nR2VuZXJhdG9yIGdlbmVyYXRvcjsKLSAgcHJpdmF0ZSBNYXAgcGFnZU1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByaXZhdGUgSVNlcnZpY2VQb2xpY3kgYWN0aXZlU2VydmljZVBvbGljeTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UuCi0gICAqIEBwYXJhbSBwYWdlTmFtZQotICAgKi8KLSAgcHVibGljIFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UoU3RyaW5nIHBhZ2VOYW1lKQotICB7Ci0gICAgc3VwZXIocGFnZU5hbWUpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRCaW5kaW5nR2VuZXJhdG9yKEJpbmRpbmdHZW5lcmF0b3IgZ2VuZXJhdG9yKSB7Ci0JICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlLgotICAgKiBAcGFyYW0gcGFnZU5hbWUKLSAgICogQHBhcmFtIHRpdGxlCi0gICAqIEBwYXJhbSB0aXRsZUltYWdlCi0gICAqLwotICBwdWJsaWMgV1NETE5ld0ZpbGVPcHRpb25zUGFnZShTdHJpbmcgcGFnZU5hbWUsIFN0cmluZyB0aXRsZSwgSW1hZ2VEZXNjcmlwdG9yIHRpdGxlSW1hZ2UpCi0gIHsKLSAgICBzdXBlcihwYWdlTmFtZSwgdGl0bGUsIHRpdGxlSW1hZ2UpOwotICAgIHNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLl9VSV9ERVNDUklQVElPTl9ORVdfV1NETF9GSUxFKTsKLSAgfQotCi0gIHB1YmxpYyBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKFN0cmluZyBwYWdlTmFtZSwgU3RyaW5nIHRpdGxlLCBJbWFnZURlc2NyaXB0b3IgdGl0bGVJbWFnZSwgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlUGFnZSkKLSAgewotICAgIHN1cGVyKHBhZ2VOYW1lLCB0aXRsZSwgdGl0bGVJbWFnZSk7Ci0gICAgc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuX1VJX0RFU0NSSVBUSU9OX05FV19XU0RMX0ZJTEUpOwotICAgIG5ld0ZpbGVDcmVhdGlvblBhZ2UgPSBuZXdGaWxlUGFnZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1BhZ2UjY3JlYXRlQ29udHJvbChDb21wb3NpdGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgYmFzZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChiYXNlLCBNZXNzYWdlcy5fVUlfSEVMUCk7IC8vJE5PTi1OTFMtMSQKLSAgICBiYXNlLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQotICAgIC8vICBHcm91cCB3c2RsR3JvdXAgPSBWaWV3VXRpbGl0eS5jcmVhdGVHcm91cChiYXNlLCAyLCAiV1NETCIsIGZhbHNlKTsKLSAgICBDb21wb3NpdGUgd3NkbEdyb3VwID0gbmV3IENvbXBvc2l0ZShiYXNlLCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICB3c2RsR3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICB3c2RsR3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAKLSAgICBHcmlkRGF0YSBnZCA9IChHcmlkRGF0YSl3c2RsR3JvdXAuZ2V0TGF5b3V0RGF0YSgpOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotCi0gICAgTGFiZWwgdGFyZ2V0TmFtZXNwYWNlID0gbmV3IExhYmVsKHdzZGxHcm91cCwgU1dULkxFRlQpOwotICAgIHRhcmdldE5hbWVzcGFjZS5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICBHcmlkRGF0YSBuc0RhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBuc0RhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgdGFyZ2V0TmFtZXNwYWNlLnNldExheW91dERhdGEobnNEYXRhKTsKLSAgICAKLSAgICB0YXJnZXROYW1lc3BhY2VUZXh0ID0gbmV3IFRleHQod3NkbEdyb3VwLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgR3JpZERhdGEgdGV4dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICB0ZXh0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICB0ZXh0RGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICB0ZXh0RGF0YS53aWR0aEhpbnQgPSAxMDsKLSAgICB0YXJnZXROYW1lc3BhY2VUZXh0LnNldExheW91dERhdGEodGV4dERhdGEpOwotICAgIAotICAgIHRhcmdldE5hbWVzcGFjZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0YXJnZXROYW1lc3BhY2VUZXh0LCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX1ROU19URVhUKTsKLQotICAgIExhYmVsIHByZWZpeCA9IG5ldyBMYWJlbCh3c2RsR3JvdXAsIFNXVC5MRUZUKTsKLSAgICBwcmVmaXguc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfUFJFRklYX1dJVEhfQ09MT04pOwotCi0gICAgR3JpZERhdGEgcHJlZml4RGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIHByZWZpeERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgcHJlZml4LnNldExheW91dERhdGEocHJlZml4RGF0YSk7Ci0gICAgCi0gICAgcHJlZml4VGV4dCA9IG5ldyBUZXh0KHdzZGxHcm91cCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIEdyaWREYXRhIHByZWZpeFRleHREYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgcHJlZml4VGV4dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgcHJlZml4VGV4dERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgcHJlZml4VGV4dERhdGEud2lkdGhIaW50ID0gMTA7Ci0gICAgcHJlZml4VGV4dC5zZXRMYXlvdXREYXRhKHByZWZpeFRleHREYXRhKTsKLQotICAgIHByZWZpeFRleHQuYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcmVmaXhUZXh0LCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX1BSRUZJWF9URVhUKTsKLSAgICAKLSAgICAvLyAgICBYTUxDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDYXRhbG9nUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5sb29rdXBPckNyZWF0ZVhNTENhdGFsb2coImRlZmF1bHQiKTsKLSAgICAvLyAgICBTZWxlY3RYTUxDYXRhbG9nSWRQYW5lbCBjYXRhbG9nID0gbmV3IFNlbGVjdFhNTENhdGFsb2dJZFBhbmVsKGJhc2UsIHhtbENhdGFsb2cpOwotCi0vLyAgRGV0ZXJtaW5lIGlmIHRoZSB1c2VyIHdpc2hlcyB0byBjcmVhdGUgYSBza2VsZXRvbiBXU0RMLiAgSWYgeWVzLCBwcmVzZW50IHRoZSB1c2VyIHdpdGggaW5wdXQgZmllbGRzLgotICAgIGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3ggPSBuZXcgQnV0dG9uKGJhc2UsIFNXVC5DSEVDSyk7Ci0gICAgY3JlYXRlU2tlbGV0b25DaGVja0JveC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9DUkVBVEVfV1NETF9TS0VMRVRPTik7Ci0gICAgY3JlYXRlU2tlbGV0b25DaGVja0JveC5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjcmVhdGVTa2VsZXRvbkNoZWNrQm94LCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX0NSRUFURV9TS0VMRVRPTl9DSEVDS0JPWCk7Ci0gICAgCi0gICAgd3NkbFNrZWxldG9uR3JvdXAgPSBuZXcgQ29tcG9zaXRlKGJhc2UsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dDIgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dDIubnVtQ29sdW1ucyA9IDI7Ci0gICAgd3NkbFNrZWxldG9uR3JvdXAuc2V0TGF5b3V0KGxheW91dDIpOwotCi0gICAgR3JpZERhdGEgZGF0YTIgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhMi52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YTIuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgd3NkbFNrZWxldG9uR3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhMik7Ci0KLSAgIGNyZWF0ZUxhYmVsKHdzZGxTa2VsZXRvbkdyb3VwLCBNZXNzYWdlcy5fVUlfTEFCRUxfQklORElOR19QUk9UT0NPTCk7Ci0gICBwcm90b2NvbENvbWJvID0gbmV3IENvbWJvKHdzZGxTa2VsZXRvbkdyb3VwLCBTV1QuUkVBRF9PTkxZKTsKLSAgIEdyaWREYXRhIGRhdGFDID0gbmV3IEdyaWREYXRhKCk7Ci0gICBkYXRhQy5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgIGRhdGFDLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgcHJvdG9jb2xDb21iby5zZXRMYXlvdXREYXRhKGRhdGFDKTsKLQotICAgIElQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0KCk7Ci0gICAgYWN0aXZlU2VydmljZVBvbGljeSA9IFNlcnZpY2VQb2xpY3lIZWxwZXIuZ2V0QWN0aXZlUG9saWN5V2l0aFByb3RvY29sKHByb2plY3QpOwotICAgIFN0cmluZyBkZWZhdWx0UHJvdG9jb2xOUyA9IFNlcnZpY2VQb2xpY3lIZWxwZXIuZ2V0RGVmYXVsdEJpbmRpbmcocHJvamVjdCwgYWN0aXZlU2VydmljZVBvbGljeSk7Ci0gICAgU3RyaW5nIGRlZmF1bHRQcm90b2NvbExhYmVsID0gbnVsbDsKLSAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHRlbnNpb24gPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lc3BhY2UoZGVmYXVsdFByb3RvY29sTlMpOwotICAgIGlmIChleHRlbnNpb24gIT0gbnVsbCkKLSAgICAgIGRlZmF1bHRQcm90b2NvbExhYmVsID0gZXh0ZW5zaW9uLmdldExhYmVsKCk7Ci0KLSAgICBJdGVyYXRvciBpdCA9IHJlZ2lzdHJ5LmdldEJpbmRpbmdFeHRlbnNpb25OYW1lcygpLml0ZXJhdG9yKCk7Ci0gICAgaW50IGRlZmF1bHRJbmRleCA9IDA7Ci0gICAgYm9vbGVhbiBkZWZhdWx0Rm91bmQgPSBmYWxzZTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICBTdHJpbmcgcHJvdG9jb2xOYW1lID0gKFN0cmluZykgaXQubmV4dCgpOwotICAgICAgU3RyaW5nIHByb3RvY29sTGFiZWwgPSBudWxsOwotICAgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvck5hbWUocHJvdG9jb2xOYW1lKTsKLSAgICAgIGlmIChleHQgIT0gbnVsbCkgewotICAgICAgICBTdHJpbmcgbGFiZWwgPSBleHQuZ2V0TGFiZWwoKTsKLSAgICAgICAgaWYgKGxhYmVsICE9IG51bGwpIHsKLSAgICAgICAgICBwcm90b2NvbExhYmVsID0gbGFiZWw7Ci0gICAgICAgICAgcHJvdG9jb2xDb21iby5hZGQocHJvdG9jb2xMYWJlbCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFkZWZhdWx0Rm91bmQgJiYgcHJvdG9jb2xMYWJlbCAhPSBudWxsKQotICAgICAgewotICAgICAgICBkZWZhdWx0Rm91bmQgPSBwcm90b2NvbExhYmVsLmVxdWFscyhkZWZhdWx0UHJvdG9jb2xMYWJlbCk7Ci0gICAgICAgIGlmICghZGVmYXVsdEZvdW5kKSB7Ci0gICAgICAgICAgKytkZWZhdWx0SW5kZXg7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFkZWZhdWx0Rm91bmQpIHsgICAgCQotICAgICAgZGVmYXVsdEluZGV4ID0gMDsKLSAgICB9Ci0KLSAgICBwcm90b2NvbENvbWJvLmFkZE1vZGlmeUxpc3RlbmVyKHRoaXMpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocHJvdG9jb2xDb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLldTRExfV0laQVJEX09QVElPTlNfUEFHRV9QUk9UT0NPTF9DT01CTyk7Ci0KLSAgICAvLyBDcmVhdGUgUGFnZUJvb2sgYW5kIHBhZ2VzL2NvbnRyb2xzIGZvciB0aGUgUGFnZUJvb2sKLSAgICBwcm90b2NvbFBhZ2VCb29rID0gbmV3IFBhZ2VCb29rKGJhc2UsIFNXVC5OT05FKTsKLSAgICBHcmlkRGF0YSBnZEZpbGwgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZEZpbGwuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2RGaWxsLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGdkRmlsbC52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2RGaWxsLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBwcm90b2NvbFBhZ2VCb29rLnNldExheW91dERhdGEoZ2RGaWxsKTsKLQotICAgIGlmIChwcm90b2NvbENvbWJvLmdldEl0ZW1Db3VudCgpID4gMCkgewotICAgICAgU3RyaW5nIHByb3RvY29sID0gcHJvdG9jb2xDb21iby5nZXRJdGVtKGRlZmF1bHRJbmRleCk7Ci0gICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTGFiZWwocHJvdG9jb2wpOwotICAgICAgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIHBhZ2UgPSBleHQuZ2V0QmluZGluZ0NvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSgpOwotICAgICAgcGFnZS5pbml0KGdlbmVyYXRvcik7Ci0KLSAgICAgIHByb3RvY29sUGFnZUJvb2suc2hvd1BhZ2UocGFnZS5nZXRDb250cm9sKCkpOwotICAgICAgcHJvdG9jb2xQYWdlQm9vay5zZXRWaXNpYmxlKHRydWUpOwotICAgICAgcHJvdG9jb2xDb21iby5zZWxlY3QoZGVmYXVsdEluZGV4KTsKLSAgICAgIHVwZGF0ZVBhZ2VCb29rKHByb3RvY29sKTsKLSAgICB9Ci0KLSAgICB3c2RsU2tlbGV0b25Hcm91cC5zZXRWaXNpYmxlKHRydWUpOwotCi0gICAgV1NJUHJlZmVyZW5jZUxpbmsgPSBuZXcgTGluayhiYXNlLCBTV1QuTk9ORSk7Ci0gICAgV1NJUHJlZmVyZW5jZUxpbmsuc2V0VGV4dCgiPEE+IiArIE1lc3NhZ2VzLl9XU0lfQ09NUExJQU5DRV9MSU5LX1RFWFQgKyAiPC9BPiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICBXU0lQcmVmZXJlbmNlTGluay5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICAgIHsKLSAgICAgICAgZ2V0TmV3V1NETFdpemFyZCgpLm9wZW5Qcm9qZWN0V1NJUHJvcGVydGllcygpOwotICAgICAgICBJUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdCgpOwotICAgICAgICBhY3RpdmVTZXJ2aWNlUG9saWN5ID0gU2VydmljZVBvbGljeUhlbHBlci5nZXRBY3RpdmVQb2xpY3lXaXRoUHJvdG9jb2wocHJvamVjdCk7Ci0gICAgICAgIHNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBXU0lQcmVmZXJlbmNlTGluay5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRU5EKSk7Ci0KLSAgICBjcmVhdGVTa2VsZXRvbkNoZWNrQm94LmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCi0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChiYXNlLCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFKTsKLQotICAgIHNldENvbnRyb2woYmFzZSk7Ci0KLSAgfQotCi0gIHByaXZhdGUgTmV3V1NETFdpemFyZCBnZXROZXdXU0RMV2l6YXJkKCkKLSAgewotICAgIHJldHVybiAoTmV3V1NETFdpemFyZClnZXRXaXphcmQoKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGNvbXB1dGVEZWZhdWx0RGVmaW5pdGlvbk5hbWUoKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSAiRGVmYXVsdE5hbWUiOyAvLyROT04tTkxTLTEkCi0gICAgSVBhdGggcGF0aCA9IGdldE5ld1dTRExXaXphcmQoKS5nZXROZXdGaWxlUGF0aCgpOwotICAgIGlmIChwYXRoICE9IG51bGwpCi0gICAgewotICAgICAgbmFtZSA9IHBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBjb21wdXRlRGVmYXVsdE5hbWVzcGFjZU5hbWUoKQotICB7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgIGlmICghbmFtZXNwYWNlLmVuZHNXaXRoKCIvIikpIHsgLy8kTk9OLU5MUy0xJAotICAgIAluYW1lc3BhY2UgPSBuYW1lc3BhY2UuY29uY2F0KCIvIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgSVBhdGggcGF0aCA9IGdldE5ld1dTRExXaXphcmQoKS5nZXROZXdGaWxlUGF0aCgpOwotICAgIGlmIChwYXRoICE9IG51bGwpCi0gICAgewotICAgICAgbmFtZXNwYWNlICs9IHBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpLnRvU3RyaW5nKCkgKyAiLyI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKQotICB7Ci0gICAgc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKLQotICAgIGlmICh2aXNpYmxlKQotICAgIHsKLSAgICAgIC8vIHByaW1lIHRoZSBmaWVsZHMgICAgCi0gICAgICB0YXJnZXROYW1lc3BhY2VUZXh0LnNldFRleHQoY29tcHV0ZURlZmF1bHROYW1lc3BhY2VOYW1lKCkpOwotICAgICAgcHJlZml4VGV4dC5zZXRUZXh0KCJ0bnMiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiB0YXJnZXROYW1lc3BhY2VUZXh0LmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KCkKLSAgewotICAgIHJldHVybiBwcmVmaXhUZXh0LmdldFRleHQoKS50cmltKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmluaXRpb25OYW1lKCkKLSAgewotICAJcmV0dXJuIGNvbXB1dGVEZWZhdWx0RGVmaW5pdGlvbk5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgewotICAgIGlmIChlLndpZGdldCA9PSB0YXJnZXROYW1lc3BhY2VUZXh0KQotICAgIHsKLSAgICAgIHN0YXJ0RGVsYXllZEV2ZW50KGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChlLndpZGdldCA9PSBwcmVmaXhUZXh0KQotICAgIHsKLSAgICAgIHNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGUud2lkZ2V0ID09IHByb3RvY29sQ29tYm8pCi0gICAgewotICAgICAgU3RyaW5nIHByb3RvY29sID0gcHJvdG9jb2xDb21iby5nZXRUZXh0KCk7Ci0KLSAgICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Gb3JMYWJlbChwcm90b2NvbCk7Ci0gICAgICBnZW5lcmF0b3Iuc2V0Q29udGVudEdlbmVyYXRvcihCaW5kaW5nR2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoZXh0LmdldE5hbWVzcGFjZSgpKSk7Ci0gICAgICB1cGRhdGVQYWdlQm9vayhwcm90b2NvbCk7Ci0gICAgICBzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHVwZGF0ZVBhZ2VCb29rKFN0cmluZyBwcm90b2NvbCkKLSAgewotICAgIGlmIChwcm90b2NvbCAhPSBudWxsKQotICAgIHsKLQkgIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBwYWdlID0gKENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSkgcGFnZU1hcC5nZXQocHJvdG9jb2wpOwotICAgICAgaWYgKHBhZ2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcGFnZSA9IGNyZWF0ZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZShwcm90b2NvbCk7Ci0KLSAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHBhZ2UuaW5pdChnZW5lcmF0b3IpOwotICAgICAgICAgIHBhZ2UuY3JlYXRlQ29udHJvbChwcm90b2NvbFBhZ2VCb29rKTsKLSAgICAgICAgICBwYWdlTWFwLnB1dChwcm90b2NvbCwgcGFnZSk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYgKHBhZ2UgaW5zdGFuY2VvZiBCYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKSB7Ci0gICAgICAgIAkgIC8vIFdlIHNob3VsZCBwdXQgdGhlIHNldFdpemFyZFBhZ2UoKSBtZXRob2QgaW50byB0aGUgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIEludGVyZmFjZQotICAgICAgICAJICAoKEJhc2VDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHBhZ2UpLnNldFdpemFyZFBhZ2UodGhpcyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYWdlICE9IG51bGwpCi0gICAgICB7Ci0gICAgCSAgcHJvdG9jb2xQYWdlQm9vay5zaG93UGFnZShwYWdlLmdldENvbnRyb2woKSk7Ci0gICAgCSAgcHJvdG9jb2xQYWdlQm9vay5sYXlvdXQoKTsKLSAgICAJICBwcm90b2NvbFBhZ2VCb29rLmdldFBhcmVudCgpLmxheW91dCgpOwotCQkKLSAgICAJICBwYWdlLnNldE9wdGlvbnNPbkdlbmVyYXRvcigpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgY3JlYXRlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKFN0cmluZyBwcm90b2NvbCkKLSAgewotICAgIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBvcHRpb25zUGFnZSA9IG51bGw7Ci0gICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpLmdldEV4dGVuc2lvbkZvckxhYmVsKHByb3RvY29sKTsKLSAgICBpZiAoZXh0ZW5zaW9uICE9IG51bGwpIHsKLSAgCSAgb3B0aW9uc1BhZ2UgPSBleHRlbnNpb24uZ2V0QmluZGluZ0NvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSgpOwotICAgIH0KLSAgICByZXR1cm4gb3B0aW9uc1BhZ2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB1cGRhdGVPY2N1cmVkKE9iamVjdCBhcmcxLCBPYmplY3QgYXJnMikKLSAgewotICAgIHNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKQotICB7Ci0gICAgYm9vbGVhbiByZWFkeSA9IHRydWU7Ci0KLSAgICBzZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0gICAgc2V0TWVzc2FnZShudWxsKTsKLQotICAgIC8vIHRoaXMuc2V0TWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIl9VSV9ERVNDUklQVElPTl9ORVdfV1NETF9GSUxFIiksdGhpcy5OT05FKTsKLSAgICAvLyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBzbyB0aGF0IHRoZSBwYWdlIGRvZXNuJ3QgaW1tZWRpYXRlbHkgc2hvdyB1cCB3aXRoIGFuIGVycm9yCi0gICAgaWYgKHRhcmdldE5hbWVzcGFjZVRleHQuZ2V0VGV4dCgpLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgaWYgKHJlYWR5KQotICAgICAgewotICAgICAgICBzZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZVRhcmdldE5hbWVzcGFjZSh0YXJnZXROYW1lc3BhY2VUZXh0LmdldFRleHQoKSkpCi0gICAgewotICAgICAgcmVhZHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoY3JlYXRlU2tlbGV0b25DaGVja0JveC5nZXRTZWxlY3Rpb24oKSkKLSAgICB7Ci0gICAgICBpZiAoIWRpc3BsYXlEaWFsb2dNZXNzYWdlcygpKQotICAgICAgewotICAgICAgICByZWFkeSA9IGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5zZXRNZXNzYWdlKE1lc3NhZ2VzLl9VSV9ERVNDUklQVElPTl9ORVdfV1NETF9GSUxFLCBOT05FKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVhZHk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBkaXNwbGF5RGlhbG9nTWVzc2FnZXMoKQotICB7Ci0gICAgU3RyaW5nIHByb3RvY29sID0gZ2V0UHJvdG9jb2woKTsKLSAgICBpZiAoIShwYWdlTWFwLmdldChwcm90b2NvbCkgaW5zdGFuY2VvZiBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlUHJvdG9jb2wocHJvdG9jb2wpKQotICAgIHsKLSAgICAgIGlmIChnZXRNZXNzYWdlVHlwZSgpID09IElNZXNzYWdlUHJvdmlkZXIuRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIG9wdGlvbnNQYWdlID0gKENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSkgcGFnZU1hcC5nZXQocHJvdG9jb2wpOwotICAgIElGaWxlIHRhcmdldEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChuZXdGaWxlQ3JlYXRpb25QYWdlLmdldEZpbGVOYW1lKCkpKTsKLQotICAgIGlmIChvcHRpb25zUGFnZSBpbnN0YW5jZW9mIEJhc2VDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpCi0gICAgewotICAgICAgKChCYXNlQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKSBvcHRpb25zUGFnZSkuc2V0VGFyZ2V0SUZpbGUodGFyZ2V0RmlsZSk7Ci0KLSAgICAgIFN0cmluZyBtZXNzYWdlID0gKChJTWVzc2FnZVByb3ZpZGVyKSBvcHRpb25zUGFnZSkuZ2V0TWVzc2FnZSgpOwotICAgICAgaW50IG1lc3NhZ2VUeXBlID0gKChJTWVzc2FnZVByb3ZpZGVyKSBvcHRpb25zUGFnZSkuZ2V0TWVzc2FnZVR5cGUoKTsKLQotICAgICAgaWYgKG1lc3NhZ2VUeXBlID09IElNZXNzYWdlUHJvdmlkZXIuTk9ORSkKLSAgICAgIHsKLSAgICAgICAgc2V0TWVzc2FnZShNZXNzYWdlcy5fVUlfREVTQ1JJUFRJT05fTkVXX1dTRExfRklMRSwgTk9ORSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNldE1lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZVR5cGUpOwotICAgICAgfQotCi0gICAgICBpZiAobWVzc2FnZVR5cGUgPT0gSU1lc3NhZ2VQcm92aWRlci5FUlJPUikKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQcmVmaXgoU3RyaW5nIHByZWZpeCkKLSAgewotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBWYWxpZGF0ZUhlbHBlci5jaGVja1hNTFByZWZpeChwcmVmaXgpOwotCi0gICAgaWYgKGVycm9yTWVzc2FnZSA9PSBudWxsIHx8IGVycm9yTWVzc2FnZS5sZW5ndGgoKSA9PSAwKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHByb3RvY29sIGJ5IGNoZWNraW5nIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSB3c2kgcG9saWN5IHJlcXVpcmVzIG9yCi0gICAqIHN1Z2dlc3RzIGEgZGVmYXVsdCBwcm90b2NvbCBhbmQgdGhhdCBwcm90b2NvbCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlCi0gICAqIGN1cnJlbnRseSBzZWxlY3RlZCBwcm90b2NvbAotICAgKiAKLSAgICogQHBhcmFtIHByb3RvY29sCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB2YWxpZGF0ZVByb3RvY29sKFN0cmluZyBwcm90b2NvbCkKLSAgewotICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvbkZvckxhYmVsKHByb3RvY29sKTsKLSAgICBpZiAoZXh0ZW5zaW9uICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGV4dGVuc2lvbi5nZXROYW1lc3BhY2UoKTsKLSAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3QoKTsKLSAgICAgICAgaWYgKGFjdGl2ZVNlcnZpY2VQb2xpY3kgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGdldCBkZWZhdWx0IGJpbmRpbmcgYW5kIGNvbXBhcmUgaWYgc2FtZSBvciBub3QKLSAgICAgICAgICBTdHJpbmcgZGVmYXVsdEJpbmRpbmcgPSBTZXJ2aWNlUG9saWN5SGVscGVyLmdldERlZmF1bHRCaW5kaW5nKHByb2plY3QsIGFjdGl2ZVNlcnZpY2VQb2xpY3kpOwotICAgICAgICAgIGlmICghZGVmYXVsdEJpbmRpbmcuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW50IG1lc3NhZ2VUeXBlID0gU2VydmljZVBvbGljeUhlbHBlci5nZXRNZXNzYWdlU2V2ZXJpdHkocHJvamVjdCwgYWN0aXZlU2VydmljZVBvbGljeSk7Ci0gICAgICAgICAgICBpZiAobWVzc2FnZVR5cGUgPT0gSU1lc3NhZ2VQcm92aWRlci5FUlJPUikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gaWYgbm90IHNhbWUsIHNldCBlcnJvciBtZXNzYWdlCi0gICAgICAgICAgICAgIC8vIHB1dCB1cCBhbiBlcnJvciBtZXNzYWdlCi0gICAgICAgICAgICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lc3BhY2UoZGVmYXVsdEJpbmRpbmcpOwotICAgICAgICAgICAgICBpZiAoZXh0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbiA9IGV4dC5nZXRMYWJlbCgpOwotICAgICAgICAgICAgICAgIHNldE1lc3NhZ2UoTkxTLmJpbmQoTWVzc2FnZXMuX0VSUk9SX1dTSV9DT01QTElBTkNFX1BST1RPQ09MLCBuZXcgU3RyaW5nW10geyBuIH0pLCBJTWVzc2FnZVByb3ZpZGVyLkVSUk9SKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlVHlwZSA9PSBJTWVzc2FnZVByb3ZpZGVyLldBUk5JTkcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIHB1dCB1cCBhIHdhcm5pbmcgbWVzc2FnZQotICAgICAgICAgICAgICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKGRlZmF1bHRCaW5kaW5nKTsKLSAgICAgICAgICAgICAgaWYgKGV4dCAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG4gPSBleHQuZ2V0TGFiZWwoKTsKLSAgICAgICAgICAgICAgICBzZXRNZXNzYWdlKE5MUy5iaW5kKE1lc3NhZ2VzLl9XQVJOX1dTSV9DT01QTElBTkNFX1BST1RPQ09MLCBuZXcgU3RyaW5nW10geyBuIH0pLCBJTWVzc2FnZVByb3ZpZGVyLldBUk5JTkcpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVhNTE5hbWUoU3RyaW5nIHhtbE5hbWUpCi0gIHsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gVmFsaWRhdGVIZWxwZXIuY2hlY2tYTUxOYW1lKHhtbE5hbWUpOwotCi0gICAgaWYgKGVycm9yTWVzc2FnZSA9PSBudWxsIHx8IGVycm9yTWVzc2FnZS5sZW5ndGgoKSA9PSAwKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBzZXRFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVRhcmdldE5hbWVzcGFjZShTdHJpbmcgbnMpCi0gIHsKLSAgICBib29sZWFuIHRlc3QgPSB0cnVlOwotICAgIHRyeQotICAgIHsKLSAgICAJbmV3IFVSSShucyk7Ci0vLyAgICAgIFVSSSB0ZXN0VVJJID0gbmV3IFVSSShucyk7Ci0gICAgICAvLyAgICAgIGlmICghdGVzdFVSSS5pc0dlbmVyaWNVUkkoKSkKLSAgICAgIC8vICAgICAgewotICAgICAgLy8gICAgICAgIHNldEVycm9yTWVzc2FnZShXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NETFN0cmluZygiX1VJX0VSUk9SX05BTUVTUEFDRV9JTlZBTElEIikpOyAvLyROT04tTkxTLTEkCi0gICAgICAvLyAgICAgICAgdGVzdCA9IGZhbHNlOwotICAgICAgLy8gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLwkJCVN0cmluZyBlcnJvck1lc3NhZ2UgPSBWYWxpZGF0ZUhlbHBlci5jaGVja1hNTE5hbWUobnMpOwotICAgICAgLy8JCQlpZiAoZXJyb3JNZXNzYWdlID09IG51bGwgfHwgZXJyb3JNZXNzYWdlLmxlbmd0aCgpID09IDApCi0gICAgICAvLwkJCXsKLSAgICAgIC8vCQkJCXRlc3QgPSB0cnVlOwotICAgICAgLy8JCQl9Ci0gICAgICAvLwkJCWVsc2UKLSAgICAgIC8vCQkJewotICAgICAgc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLl9VSV9FUlJPUl9OQU1FU1BBQ0VfSU5WQUxJRCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHRlc3QgPSBmYWxzZTsKLSAgICAgIC8vCQkJfQotICAgIH0KLQotICAgIHJldHVybiB0ZXN0OwotICB9Ci0KLSAgLyoKLSAgICogcHJpdmF0ZSBib29sZWFuIGFyZVByZWZpeGVzVW5pcXVlQW5kVmFsaWQoKSB7IGphdmEudXRpbC5MaXN0IGluZm9MaXN0ID0KLSAgICogbmFtZXNwYWNlSW5mby5nZXROYW1lc3BhY2VJbmZvTGlzdCgpOyBqYXZhLnV0aWwuTGlzdCBjaGVja2VkTGlzdCA9Ci0gICAqIG5hbWVzcGFjZUluZm8uZ2V0TmFtZXNwYWNlQ2hlY2tlZExpc3QoKTsKLSAgICogCi0gICAqIFZlY3RvciBwcmVmaXhMaXN0ID0gbmV3IFZlY3RvcigpOyBib29sZWFuIHRlc3QgPSB0cnVlOyBib29sZWFuIGlzT25lQmxhbmsgPQotICAgKiBmYWxzZTsKLSAgICogCi0gICAqIFN0cmluZyBjdXJyZW50UHJlZml4ID0gcHJlZml4VGV4dC5nZXRUZXh0KCkudHJpbSgpOyBpZgotICAgKiAoY3VycmVudFByZWZpeC5sZW5ndGgoKSA9PSAwKSB7IGlzT25lQmxhbmsgPSB0cnVlOyB9IGVsc2UgeyBpZgotICAgKiAodmFsaWRhdGVQcmVmaXgoY3VycmVudFByZWZpeCkpIHsgcHJlZml4TGlzdC5hZGQoY3VycmVudFByZWZpeCk7IH0gZWxzZSB7Ci0gICAqIHNldEVycm9yTWVzc2FnZShXU0RMRWRpdG9yUGx1Z2luLmdldFdTRExTdHJpbmcoIl9VSV9FUlJPUl9QUkVGSVhfSVNfSU5WQUxJRCIsCi0gICAqIGN1cnJlbnRQcmVmaXgpKTsgLy8kTk9OLU5MUy0xJCByZXR1cm4gZmFsc2U7IH0gfQotICAgKiAKLSAgICogZm9yIChpbnQgaSA9IDA7IGkgPCBpbmZvTGlzdC5zaXplKCk7IGkrKykgeyBOYW1lc3BhY2VJbmZvIGluZm8gPQotICAgKiAoTmFtZXNwYWNlSW5mbylpbmZvTGlzdC5nZXQoaSk7IGlmCi0gICAqICgoKFN0cmluZyljaGVja2VkTGlzdC5nZXQoaSkpLmVxdWFscygidHJ1ZSIpKSAvLyROT04tTkxTLTEkIHsgU3RyaW5nCi0gICAqIGFQcmVmaXggPSBpbmZvLnByZWZpeC50cmltKCk7IGlmIChhUHJlZml4Lmxlbmd0aCgpID4gMCkgeyBpZgotICAgKiAoIXByZWZpeExpc3QuY29udGFpbnMoYVByZWZpeCkpIHsgaWYgKHZhbGlkYXRlUHJlZml4KGFQcmVmaXgpKSB7Ci0gICAqIHByZWZpeExpc3QuYWRkKGFQcmVmaXgpOyB9IGVsc2UgewotICAgKiBzZXRFcnJvck1lc3NhZ2UoV1NETEVkaXRvclBsdWdpbi5nZXRXU0RMU3RyaW5nKCJfVUlfRVJST1JfUFJFRklYX0lTX0lOVkFMSUQiLAotICAgKiBpbmZvLnByZWZpeCkpOyAvLyROT04tTkxTLTEkIHRlc3QgPSBmYWxzZTsgYnJlYWs7IH0gfSBlbHNlIHsKLSAgICogc2V0RXJyb3JNZXNzYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0V1NETFN0cmluZygiX1VJX0VSUk9SX1BSRUZJWF9JU19BX0RVUExJQ0FURSIsCi0gICAqIGluZm8ucHJlZml4KSk7IC8vJE5PTi1OTFMtMSQgdGVzdCA9IGZhbHNlOyBicmVhazsgfSB9IGVsc2UgeyBpZgotICAgKiAoIWlzT25lQmxhbmspIHsgaXNPbmVCbGFuayA9IHRydWU7IH0gZWxzZSB7Ci0gICAqIHNldEVycm9yTWVzc2FnZShXU0RMRWRpdG9yUGx1Z2luLmdldFdTRExTdHJpbmcoIl9VSV9FUlJPUl9NT1JFX1RIQU5fT05FX1BSRUZJWF9JU19CTEFOSyIpKTsKLSAgICogLy8kTk9OLU5MUy0xJCB0ZXN0ID0gZmFsc2U7IGJyZWFrOyB9IH0gfSB9IHJldHVybiB0ZXN0OyB9Ci0gICAqLwotCi0gIHByb3RlY3RlZCBEZWxheWVkRXZlbnQgZGVsYXllZFRhc2s7Ci0KLSAgcHJvdGVjdGVkIHZvaWQgc3RhcnREZWxheWVkRXZlbnQoTW9kaWZ5RXZlbnQgZSkKLSAgewotICAgIGlmIChkZWxheWVkVGFzayA9PSBudWxsIHx8IGRlbGF5ZWRUYXNrLmdldEV2ZW50KCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWxheWVkVGFzayA9IG5ldyBEZWxheWVkRXZlbnQoKTsKLSAgICAgIGRlbGF5ZWRUYXNrLnNldEV2ZW50KGUpOwotICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkudGltZXJFeGVjKDUwMCwgZGVsYXllZFRhc2spOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgTW9kaWZ5RXZlbnQgZGVsYXllZEV2ZW50ID0gZGVsYXllZFRhc2suZ2V0RXZlbnQoKTsKLQotICAgICAgaWYgKGUud2lkZ2V0ID09IGRlbGF5ZWRFdmVudC53aWRnZXQpCi0gICAgICB7Ci0gICAgICAgIC8vIHNhbWUgZXZlbnQsIGp1c3QgZGlmZmVyZW50IGRhdGEsIGRlbGF5IG5ldyBldmVudAotICAgICAgICBkZWxheWVkVGFzay5zZXRFdmVudChudWxsKTsKLSAgICAgIH0KLSAgICAgIGRlbGF5ZWRUYXNrID0gbmV3IERlbGF5ZWRFdmVudCgpOwotICAgICAgZGVsYXllZFRhc2suc2V0RXZlbnQoZSk7Ci0gICAgICBEaXNwbGF5LmdldERlZmF1bHQoKS50aW1lckV4ZWMoNTAwLCBkZWxheWVkVGFzayk7Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgRGVsYXllZEV2ZW50IGltcGxlbWVudHMgUnVubmFibGUKLSAgewotICAgIHByb3RlY3RlZCBNb2RpZnlFdmVudCBldmVudDsKLQotICAgIC8qCi0gICAgICogQHNlZSBSdW5uYWJsZSNydW4oKQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgaWYgKGV2ZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7Ci0gICAgICAgIGV2ZW50ID0gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgTW9kaWZ5RXZlbnQgZ2V0RXZlbnQoKQotICAgIHsKLSAgICAgIHJldHVybiBldmVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFdmVudChNb2RpZnlFdmVudCBldmVudCkKLSAgICB7Ci0gICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkgIGlmIChlLndpZGdldCA9PSBjcmVhdGVTa2VsZXRvbkNoZWNrQm94KSB7Ci0gIAkgCWlmIChjcmVhdGVTa2VsZXRvbkNoZWNrQm94LmdldFNlbGVjdGlvbigpKSB7Ci0gIAkgCQl3c2RsU2tlbGV0b25Hcm91cC5zZXRWaXNpYmxlKHRydWUpOwotICAJIAkJcHJvdG9jb2xQYWdlQm9vay5zZXRWaXNpYmxlKHRydWUpOwotICAJIAl9Ci0gIAkgCWVsc2UgewotICAJIAkJd3NkbFNrZWxldG9uR3JvdXAuc2V0VmlzaWJsZShmYWxzZSk7Ci0gIAkgCQlwcm90b2NvbFBhZ2VCb29rLnNldFZpc2libGUoZmFsc2UpOwotICAJIAl9Ci0gIAkgCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7Ci0gIAkgfQotICB9Ci0KLSAgQ29tcG9zaXRlIHdzZGxTa2VsZXRvbkdyb3VwOwotCi0gIEJ1dHRvbiBjcmVhdGVTa2VsZXRvbkNoZWNrQm94OwotCi0gIHByaXZhdGUgTGFiZWwgY3JlYXRlTGFiZWwoQ29tcG9zaXRlIGNvbXAsIFN0cmluZyBsYWJlbFN0cmluZykgewotICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbXAsIFNXVC5MRUZUKTsKLSAgICBsYWJlbC5zZXRUZXh0KGxhYmVsU3RyaW5nKTsKLSAgICBHcmlkRGF0YSBuc0RhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBuc0RhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgbGFiZWwuc2V0TGF5b3V0RGF0YShuc0RhdGEpOwotICAgIAotICAgIHJldHVybiBsYWJlbDsKLSAgfQotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0TmFtZXNwYWNlSW5mbygpIHsKLQkJVmVjdG9yIG5hbWVzcGFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gIAkJCi0gIAkJLy8gQWRkIERlZmF1bHQgTmFtZXNwYWNlcwotCQlOYW1lc3BhY2VJbmZvIGluZm8xID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLQkJaW5mbzEucHJlZml4ID0gIndzZGwiOyAvLyROT04tTkxTLTEkCi0JCWluZm8xLnVyaSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI7IC8vJE5PTi1OTFMtMSQKLQkJbmFtZXNwYWNlcy5hZGRFbGVtZW50KGluZm8xKTsKLQkJCi0JCU5hbWVzcGFjZUluZm8gaW5mbzggPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotCQlpbmZvOC5wcmVmaXggPSAieHNkIjsgLy8kTk9OLU5MUy0xJAotCQlpbmZvOC51cmkgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0JCW5hbWVzcGFjZXMuYWRkRWxlbWVudChpbmZvOCk7Ci0KLQkJcmV0dXJuIG5hbWVzcGFjZXM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRDcmVhdGVTa2VsZXRvbkJvb2xlYW4oKSB7Ci0gIAlyZXR1cm4gY3JlYXRlU2tlbGV0b25DaGVja0JveC5nZXRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKSB7Ci0gIAlyZXR1cm4gcHJvdG9jb2xDb21iby5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1NvYXBEb2NMaXRlcmFsUHJvdG9jb2woKSB7Ci0JICAvLyBXZSBuZWVkIHRvIHJldmlzaXQgdGhpcy4uLi4gIENhbiB3ZSBtYWtlIHRoaXMgY29kZSBtb3JlIGdlbmVyaWMuLi4KLQkgIC8vIFdlZSBuZWVkIHRoaXMgbWV0aG9kIGJlY2F1c2UgdGhlIE5ld1dTRExXaXphcmQgbmVlZHMgdG8ga25vdyBpZiBpdCBzaG91bGQgY3JlYXRlIHRoZSBuZXcKLQkgIC8vIFdTREwgd2l0aCBhIGRvYy1saXRlcmFsIHBhdHRlcm4gKEEgV1NETCBQYXJ0IHJlZmVyZW5jaW5nIGFuIFhTRCBFbGVtZW50KQotCSAgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIG9wdGlvbnNQYWdlID0gKENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSkgcGFnZU1hcC5nZXQoZ2V0UHJvdG9jb2woKSk7Ci0JICBpZiAob3B0aW9uc1BhZ2UgaW5zdGFuY2VvZiBJU29hcFN0eWxlSW5mbykgewotCQkgIHJldHVybiAoKElTb2FwU3R5bGVJbmZvKSBvcHRpb25zUGFnZSkuaXNEb2N1bWVudExpdGVyYWxQYXR0ZXJuKCk7Ci0JICB9Ci0KLQkgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwcm9qZWN0IHRoZSBjdXJyZW50IGNvbnRhaW5pbmcgcHJvamVjdAotICAgKiAKLSAgICogQHJldHVybiBJUHJvamVjdCBvYmplY3QuIElmIHBhdGggaXMgPGNvZGU+bnVsbDwvY29kZT4gdGhlIHJldHVybiB2YWx1ZSBpcwotICAgKiAgICAgICAgIGFsc28gPGNvZGU+bnVsbDwvY29kZT4uCi0gICAqLwotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICBJUGF0aCBwYXRoID0gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRDb250YWluZXJGdWxsUGF0aCgpOwotICAgIElXb3Jrc3BhY2Ugd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotICAgIElQcm9qZWN0IHByb2plY3QgPSBudWxsOwotCi0gICAgaWYgKHBhdGggIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAod29ya3NwYWNlLnZhbGlkYXRlUGF0aChwYXRoLnRvU3RyaW5nKCksIElSZXNvdXJjZS5QUk9KRUNUKS5pc09LKCkpCi0gICAgICB7Ci0gICAgICAgIHByb2plY3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpLmdldFByb2plY3QocGF0aC50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdCA9IHdvcmtzcGFjZS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKS5nZXRQcm9qZWN0KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHByb2plY3Q7Ci0gIH0KLQotICBwdWJsaWMgSVNlcnZpY2VQb2xpY3kgZ2V0U2VydmljZVBvbGljeSgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlU2VydmljZVBvbGljeTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9XU0RMTmV3RmlsZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9XU0RMTmV3RmlsZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI1ZmIwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvV1NETE5ld0ZpbGVQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgV1NETE5ld0ZpbGVQYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZQotewotICBwdWJsaWMgV1NETE5ld0ZpbGVQYWdlKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgCi0gIHsKLSAgICBzdXBlcihNZXNzYWdlcy5fVUlfVElUTEVfTkVXX1dTRExfRklMRSwgc2VsZWN0aW9uKTsgLy8kTk9OLU5MUy0xJAotICAgIHNldFRpdGxlKE1lc3NhZ2VzLl9VSV9USVRMRV9ORVdfV1NETF9GSUxFKTsgLy8kTk9OLU5MUy0xJAotICAgIHNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLl9VSV9MQUJFTF9DUkVBVEVfTkVXX1dTRExfRklMRSk7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgCi0gIHsKLSAgICAvLyBpbmhlcml0IGRlZmF1bHQgY29udGFpbmVyIGFuZCBuYW1lIHNwZWNpZmljYXRpb24gd2lkZ2V0cwotICAgIHN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKLSAgICB0aGlzLnNldEZpbGVOYW1lKGNvbXB1dGVEZWZhdWx0RmlsZU5hbWUoKSk7Ci0KLSAgICBzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKQotICB7Ci0gICAgUGF0aCBuZXdOYW1lID0gbmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSk7Ci0gICAgU3RyaW5nIGZ1bGxGaWxlTmFtZSA9IGdldEZpbGVOYW1lKCk7Ci0gICAgU3RyaW5nIGV4dGVuc2lvbiA9IG5ld05hbWUuZ2V0RmlsZUV4dGVuc2lvbigpOwotICAgIGlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhZXh0ZW5zaW9uLmVxdWFsc0lnbm9yZUNhc2UoIndzZGwiKSkgIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuX1VJX0VSUk9SX0ZJTEVfTVVTVF9FTkRfV0lUSF9XU0RMKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgIHNldEVycm9yTWVzc2FnZShudWxsKTsKLSAgICB9Ci0KLSAgICAvLyBjaGVjayBmb3IgZmlsZSBzaG91bGQgYmUgY2FzZSBpbnNlbnNpdGl2ZQotICAgIFN0cmluZyBzYW1lTmFtZSA9IGV4aXN0c0ZpbGVBbnlDYXNlKGZ1bGxGaWxlTmFtZSk7Ci0gICAgaWYgKHNhbWVOYW1lICE9IG51bGwpIAotICAgIHsKLS8vICAgICAgIFN0cmluZyBxdWFsaWZpZWRGaWxlTmFtZSA9IGdldENvbnRhaW5lckZ1bGxQYXRoKCkudG9TdHJpbmcoKSArICcvJyArIGZ1bGxGaWxlTmFtZTsKLSAgICAgICBzZXRFcnJvck1lc3NhZ2UoTkxTLmJpbmQoTWVzc2FnZXMuX1VJX0VSUk9SX0ZJTEVfQUxSRUFEWV9FWElTVFMsIHNhbWVOYW1lKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgCi0gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlUGFnZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBkZWZhdWx0TmFtZSA9ICJOZXdXU0RMRmlsZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIFN0cmluZyBkZWZhdWx0RmlsZUV4dGVuc2lvbiA9ICIud3NkbCI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIFN0cmluZ1tdIGZpbHRlckV4dGVuc2lvbnMgPSB7ICIqLndzZGwifTsgLy8kTk9OLU5MUy0xJAotCi0KLSAgcHJvdGVjdGVkIFN0cmluZyBjb21wdXRlRGVmYXVsdEZpbGVOYW1lKCkKLSAgewotICAgIGludCBjb3VudCA9IDA7Ci0gICAgU3RyaW5nIGZpbGVOYW1lID0gZGVmYXVsdE5hbWUgKyBkZWZhdWx0RmlsZUV4dGVuc2lvbjsKLSAgICBJUGF0aCBjb250YWluZXJGdWxsUGF0aCA9IGdldENvbnRhaW5lckZ1bGxQYXRoKCk7Ci0gICAgaWYgKGNvbnRhaW5lckZ1bGxQYXRoICE9IG51bGwpCi0gICAgewotICAgICAgd2hpbGUgKHRydWUpCi0gICAgICB7Ci0gICAgICAgIElQYXRoIHBhdGggPSBjb250YWluZXJGdWxsUGF0aC5hcHBlbmQoZmlsZU5hbWUpOwotICAgICAgICAvLyBpZiAoV29ya2JlbmNoVXRpbGl0eS5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZXhpc3RzKHBhdGgpKQotICAgICAgICBpZiAoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5leGlzdHMocGF0aCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgIGZpbGVOYW1lID0gZGVmYXVsdE5hbWUgKyBjb3VudCArIGRlZmF1bHRGaWxlRXh0ZW5zaW9uOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmaWxlTmFtZTsKLSAgfQotCi0gIC8vIHJldHVybnMgdHJ1ZSBpZiBmaWxlIG9mIHNwZWNpZmllZCBuYW1lIGV4aXN0cyBpbiBhbnkgY2FzZSBmb3Igc2VsZWN0ZWQgY29udGFpbmVyCi0gIHByb3RlY3RlZCBTdHJpbmcgZXhpc3RzRmlsZUFueUNhc2UoU3RyaW5nIGZpbGVOYW1lKQotICB7Ci0gICAgaWYgKCAoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKSAhPSBudWxsKSAmJiAoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5pc0VtcHR5KCkgPT0gZmFsc2UpCi0gICAgICAgICAgJiYgKGZpbGVOYW1lLmNvbXBhcmVUbygiIikgIT0gMCkpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICAvL2xvb2sgdGhyb3VnaCBhbGwgcmVzb3VyY2VzIGF0IHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIC0gY29tcGFyZSBpbiB1cHBlciBjYXNlCi0gICAgICBJUmVzb3VyY2UgcGFyZW50ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKGdldENvbnRhaW5lckZ1bGxQYXRoKCkpOwotICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIElDb250YWluZXIpCi0gICAgICB7Ci0gICAgICAgIElDb250YWluZXIgY29udGFpbmVyID0gKElDb250YWluZXIpIHBhcmVudDsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBJUmVzb3VyY2VbXSBtZW1iZXJzID0gY29udGFpbmVyLm1lbWJlcnMoKTsKLSAgICAgICAgICBTdHJpbmcgZW50ZXJlZEZpbGVVcHBlciA9IGZpbGVOYW1lLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG1lbWJlcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHJlc291cmNlVXBwZXJOYW1lID0gbWVtYmVyc1tpXS5nZXROYW1lKCkudG9VcHBlckNhc2UoKTsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZVVwcGVyTmFtZS5lcXVhbHMoZW50ZXJlZEZpbGVVcHBlcikpCi0gICAgICAgICAgICB7ICAKLSAgICAgICAgICAgICAgcmV0dXJuIG1lbWJlcnNbaV0uZ2V0TmFtZSgpOyAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwveHNkL1hTRE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3hzZC9YU0ROb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2IwNTkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwveHNkL1hTRE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnhzZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JTm9kZUFzc29jaWF0aW9uUHJvdmlkZXI7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWRhcHRlcnMuQ2F0ZWdvcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFhTRE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIGltcGxlbWVudHMgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyCi17ICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIE9iamVjdCBnZXRNb2RlbE9iamVjdChPYmplY3QgcGFyZW50TW9kZWxPYmplY3QsIEVsZW1lbnRbXSBlbGVtZW50Q2hhaW4sIGludCBzdGFydCwgaW50W10gZW5kKQotICB7ICAgCi0gICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKHBhcmVudE1vZGVsT2JqZWN0IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgewotICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpcGFyZW50TW9kZWxPYmplY3Q7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0U2NoZW1hKCk7Ci0gICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICB7ICAgICAgICAgIAotICAgICAgICBFbGVtZW50IHRhcmdldEVsZW1lbnQgPSBlbGVtZW50Q2hhaW5bZWxlbWVudENoYWluLmxlbmd0aCAtIDFdOwotICAgICAgICByZXN1bHQgPSBzY2hlbWEuZ2V0Q29ycmVzcG9uZGluZ0NvbXBvbmVudCh0YXJnZXRFbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAocGFyZW50TW9kZWxPYmplY3QgaW5zdGFuY2VvZiBDYXRlZ29yeUFkYXB0ZXIpCi0gICAgewotICAgICAgcmVzdWx0ID0gKChDYXRlZ29yeUFkYXB0ZXIpcGFyZW50TW9kZWxPYmplY3QpLmdldFhTRFNjaGVtYSgpOwotICAgIH0KLS8vICAgIGVsc2UgaWYgKHBhcmVudE1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQ2F0ZWdvcnkpCi0vLyAgICB7Ci0vLyAgICAgIHJlc3VsdCA9ICgoQ2F0ZWdvcnkpcGFyZW50TW9kZWxPYmplY3QpLmdldFhTRFNjaGVtYSgpOwotLy8gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBOb2RlIGdldE5vZGUoT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7ICAgICAgICAKLSAgICBOb2RlIG5vZGUgPSBudWxsOwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsgICAgICAgICAgIAotICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpbW9kZWxPYmplY3Q7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0U2NoZW1hKCk7Ci0gICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG5vZGUgPSBzY2hlbWEuZ2V0RWxlbWVudCgpOwotICAgICAgfQotICAgIH0gICAgICAgIAotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpCi0gICAgewotICAgICAgbm9kZSA9ICgoWFNEQ29uY3JldGVDb21wb25lbnQpbW9kZWxPYmplY3QpLmdldEVsZW1lbnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBDYXRlZ29yeUFkYXB0ZXIpCi0gICAgewotICAgICAgbm9kZSA9ICgoQ2F0ZWdvcnlBZGFwdGVyKW1vZGVsT2JqZWN0KS5nZXRYU0RTY2hlbWEoKS5nZXRFbGVtZW50KCk7Ci0gICAgfQotLy8gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBDYXRlZ29yeSkKLS8vICAgIHsKLS8vICAgICAgbm9kZSA9ICgoQ2F0ZWdvcnkpbW9kZWxPYmplY3QpLmdldFhTRFNjaGVtYSgpLmdldEVsZW1lbnQoKTsKLS8vICAgIH0KLSAgICAKLSAgICByZXR1cm4gbm9kZTsKLSAgfSAgICAgIAotfSAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNERWRpdG9yQ1NIZWxwSWRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTREVkaXRvckNTSGVscElkcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTMzMGUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNERWRpdG9yQ1NIZWxwSWRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZDsKLQotcHVibGljIGNsYXNzIEFTREVkaXRvckNTSGVscElkcyB7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHBsdWdpbklkID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLiI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlOZXcgV1NETCBXaXphcmQgLSBPcHRpb25zIHBhZ2U6Ci0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX1ROU19URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDAwIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfV0laQVJEX09QVElPTlNfUEFHRV9QUkVGSVhfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDAwMSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfQ1JFQVRFX1NLRUxFVE9OX0NIRUNLQk9YID0gcGx1Z2luSWQgKyAid3NkbHUwMDAyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfV0laQVJEX09QVElPTlNfUEFHRV9QUk9UT0NPTF9DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDAwMyI7IC8vJE5PTi1OTFMtMSQKLQotLy8JU29hcCBCaW5kaW5nIE9wdGlvbnMKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBET0NfTElUX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMDEwIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJQQ19MSVRfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAwMTEiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUlBDX0VOQ09ERURfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAwMTIiOyAvLyROT04tTkxTLTEkCi0KLS8vCUhUVFAgQmluZGluZyBPcHRpb25zCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSFRUUF9HRVRfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAwMTMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSFRUUF9QT1NUX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMDE0IjsgLy8kTk9OLU5MUy0xJAotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIERlc2lnbiBWaWV3Ci0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9ERVNJR05fVklFV19TRVJWSUNFX09CSkVDVCA9IHBsdWdpbklkICsgIndzZGx1MDAyMCI7ICAgLy8gIFNlcnZpY2UgT2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+IHdzZGx1MDAyMCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9ERVNJR05fVklFV19CSU5ESU5HX09CSkVDVCA9IHBsdWdpbklkICsgIndzZGx1MDAyMSI7ICAgLy8gIEJpbmRpbmcgT2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+IHdzZGx1MDAyMSAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9ERVNJR05fVklFV19QT1JUVFlQRV9PQkpFQ1QgPSBwbHVnaW5JZCArICJ3c2RsdTAwMjIiOyAgIC8vICBQb3J0VHlwZSBPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiB3c2RsdTAwMjIgLy8kTk9OLU5MUy0xJAotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIE91dGxpbmUgVmlldwotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfT1VUTElORV9WSUVXX0dST1VQID0gcGx1Z2luSWQgKyAid3NkbHUwMDIzIjsgICAvLyAgSW1wb3J0cywgVHlwZXMsIFNlcnZpY2VzLCBCaW5kaW5ncywgUG9ydCBUeXBlcywgTWVzc2FnZXMgKGdyb3VwZWQgdG9nZXRoZXIpICAgICAgICAgICAgIC0tPiB3c2RsdTAwMjMgLy8kTk9OLU5MUy0xJAotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIFBvcnQgV2l6YXJkCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUE9SVF9XSVpBUkQgPSBwbHVnaW5JZCArICJ3c2RsdTAwMzAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUE9SVF9XSVpBUkRfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDMxIjsgICAvLyAgbm90IHVzZWQgLSBkdXAgYmVsb3cgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBPUlRfV0laQVJEX0JJTkRJTkdfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAwMzIiOyAgIC8vICBub3QgdXNlZCAtIGR1cCBiZWxvdyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUE9SVF9XSVpBUkRfUFJPVE9DT0xfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAwMzMiOyAgIC8vICBub3QgdXNlZCAtIGR1cCBiZWxvdyAvLyROT04tTkxTLTEkCi0KLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gR2VuZXJhdGUgQmluZGluZyBXaXphcmQKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCSU5ESU5HX1dJWkFSRCA9IHBsdWdpbklkICsgIndzZGx1MDA0MCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9UT0NPTF9DT01QT05FTlRfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDQxIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1RPQ09MX0NPTVBPTkVOVF9SRUZfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAwNDIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPVE9DT0xfQ09NUE9ORU5UX1BST1RPQ09MX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMDQzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHBST1RPQ09MX0NPTVBPTkVOVF9PVkVSV1JJVEVfQ0hFQ0tCT1ggPSBwbHVnaW5JZCArICJ3c2RsdTAwNDQiOyAvLyROT04tTkxTLTEkCi0KLQkKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIEVkaXQgTmFtZXNwYWNlcyBEaWFsb2cgLS0tIGNvbW1vbi51aQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVESVRfTlNfRElBTE9HID0gcGx1Z2luSWQgKyAid3NkbHUwMDUwIjsgICAvLyAgRWRpdCBOYW1lc3BhY2VzIERpYWxvZyAgICAgICAgICAgICAgICAgICJkaWFsb2ciICAgICAgICAtLT4gd3NkbHUwMDUwIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFRElUX05TX0RJQUxPR19UTlNfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDA1MSI7ICAgLy8gIFRhcmdldCBOYW1lc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAidGV4dCIgICAgICAgICAgLS0+IHdzZGx1MDA1MSAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRURJVF9OU19ESUFMT0dfREVDTEFSQVRJT05TX1RBQkxFID0gcGx1Z2luSWQgKyAid3NkbHUwMDUyIjsgICAvLyAgTmFtZXNwYWNlIERlY2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICJ0YWJsZSIgICAgICAgICAtLT4gd3NkbHUwMDUyIC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVESVRfTlNfRElBTE9HX0FERF9CVVRUT04gPSBwbHVnaW5JZCArICJ3c2RsdTAwNTMiOyAgIC8vICBBZGQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggYnV0dG9uIiAgIC0tPiB3c2RsdTAwNTMgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVESVRfTlNfRElBTE9HX0VESVRfQlVUVE9OID0gcGx1Z2luSWQgKyAid3NkbHUwMDU0IjsgICAvLyAgRWRpdC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoIGJ1dHRvbiIgICAtLT4gd3NkbHUwMDU0IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFRElUX05TX0RJQUxPR19ERUxFVEVfQlVUVE9OID0gcGx1Z2luSWQgKyAid3NkbHUwMDU1IjsgICAvLyAgRGVsZXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoIGJ1dHRvbiIgICAtLT4gd3NkbHUwMDU1IC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBBZGQgTmFtZXNwYWNlIERlY2xhcmF0aW9ucyBEaWFsb2cgLS0tIGNvbW1vbi51aQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERF9OU19ERUNMID0gcGx1Z2luSWQgKyAid3NkbHUwMDYwIjsgICAvLyAgQWRkIE5hbWVzcGFjZSBEZWNsYXJhdGlvbnMgRGlhbG9nICAgICAgICJkaWFsb2ciICAgICAgICAtLT4gd3NkbHUwMDYwIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTF9TRUxFQ1RfUkVHX05TX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMDYxIjsgICAvLyAgU2VsZWN0IEZyb20gUmVnaXN0ZXJlZCBOYW1lc3BhY2VzICAgICAgICJyYWRpbyIgICAgICAgICAtLT4gd3NkbHUwMDYxIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTF9TUEVDSUZZX05FV19OU19SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDA2MiI7ICAgLy8gIFNwZWNpZnkgTmV3IE5hbWVzcGFjZSAgICAgICAgICAgICAgICAgICAicmFkaW8iICAgICAgICAgLS0+IHdzZGx1MDA2MiAvLyROT04tTkxTLTEkCi0KLQkvLyBSZWdpc3RlcmVkIE5hbWVzcGFjZXM6Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUREX05TX0RFQ0xfU0VMRUNUX05TX1RPX0FERF9UQUJMRSA9IHBsdWdpbklkICsgIndzZGx1MDA2MyI7ICAgLy8gIFNlbGVjdCB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyB0byBhZGQgInRhYmxlIiAgICAgICAgLS0+IHdzZGx1MDA2MyAvLyROT04tTkxTLTEkCi0KLQkvLyBOZXcgTmFtZXNwYWNlOgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERF9OU19ERUNMX1BSRUZJWF9URVhUID0gcGx1Z2luSWQgKyAiIjsgICAvLyAgUHJlZml4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiAgICAgICAgICAtLT4oQ09NTU9OKSB3c2RsdTAwNjQgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERF9OU19ERUNMX05BTUVTUEFDRV9OQU1FX1RFWFQgPSBwbHVnaW5JZCArICIiOyAgIC8vICBOYW1lc3BhY2UgTmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgInRleHQiICAgICAgICAgIC0tPihDT01NT04pIHdzZGx1MDA2NSAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUREX05TX0RFQ0xfTE9DQVRJT05fSElOVF9URVhUID0gcGx1Z2luSWQgKyAiIjsgICAvLyAgTG9jYXRpb24gSGludDogICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiAgICAgICAgICAtLT4oQ09NTU9OKSB3c2RsdTAwNjYgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERF9OU19ERUNMX0JST1dTRV9CVVRUT04gPSBwbHVnaW5JZCArICIiOyAgIC8vICBCcm93c2UuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggYnV0dG9uIiAgIC0tPihDT01NT04pIHdzZGx1MDA2NyAvLyROT04tTkxTLTEkCi0JCi0JCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBOZXcgTmFtZXNwYWNlIEluZm9ybWF0aW9uIERpYWxvZyAtLS0gY29tbW9uLnVpCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkVXX05BTUVTUEFDRV9JTkZPX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA2OCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5BTUVTUEFDRV9OQU1FID0gcGx1Z2luSWQgKyAid3NkbHUwMDY1IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZJWCA9ICAgICAgICAgcGx1Z2luSWQgKyAid3NkbHUwMDY0IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExPQ0FUSU9OX0hJTlQgPSAgcGx1Z2luSWQgKyAid3NkbHUwMDY2IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJST1dTRSA9ICAgICAgICAgcGx1Z2luSWQgKyAid3NkbHUwMDY3IjsgLy8kTk9OLU5MUy0xJAotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIE5ldyBNZXNzYWdlIERpYWxvZwotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19NRVNTQUdFX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA4MCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfTUVTU0FHRV9ESUFMT0dfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDgxIjsgIC8vIG5vdCB1c2VkIC0tIHRleHQgd2lsbCB1c2UgImRpYWxvZyIgY29udGV4dCBJZCAvLyROT04tTkxTLTEkCi0KLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gU3BlY2lmeSBNZXNzYWdlIERpYWxvZyAtLS0gY29tbW9uLnVpCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1BFQ0lGWV9NRVNTQUdFX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA4MiI7IC8vICAgICAgICAgICAgICAgICJkaWFsb2ciICAgICAgICAtLT4gd3NkbHUwMDgyIC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNQRUNJRllfRElBTE9HX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDA3MCI7IC8vICAgTmFtZSAoPyA9IGNoYXJhY3RlciwgKiA9IGFueSBzdHJpbmcpOiAgICJ0ZXh0IiAgICAgICAgICAtLT4oQ09NTU9OKSB3c2RsdTAwNzAgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNQRUNJRllfRElBTE9HX0NPTVBPTkVOVFNfTElTVCA9IHBsdWdpbklkICsgIndzZGx1MDA3MSI7ICAvLyAgQ29tcG9uZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0IiAgICAgICAgICAtLT4oQ09NTU9OKSB3c2RsdTAwNzEgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1BFQ0lGWV9ESUFMT0dfU0VBUkNIX1NDT1BFID0gcGx1Z2luSWQgKyAid3NkbHUwMDcyIjsgLy8gIFNlYXJjaCBTY29wZTogLy8kTk9OLU5MUy0xJAotCS8vV29ya3NwYWNlLCBFbmNsb3NpbmcgUHJvamVjdCwgQ3VycmVudCBSZXNvdXJjZSwgV29ya2luZyBTZXRzIChHcm91cGVkKSAgICAgICAgICAicmFkaW8iICAgICAgICAgLS0+KENPTU1PTikgd3NkbHUwMDcyCi0KLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gTmV3IEJpbmRpbmcgRGlhbG9nCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkVXX0JJTkRJTkdfRElBTE9HID0gcGx1Z2luSWQgKyAid3NkbHUwMDgzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19CSU5ESU5HX0RJQUxPR19OQU1FX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwODQiOyAvLyBub3QgdXNlZCAtLSB0ZXh0IHdpbGwgdXNlICJkaWFsb2ciIGNvbnRleHQgSWQgLy8kTk9OLU5MUy0xJAotCi0JCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBTcGVjaWZ5IEJpbmRpbmcgRGlhbG9nIC0tLSBjb21tb24udWkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTUEVDSUZZX0JJTkRJTkdfRElBTE9HID0gcGx1Z2luSWQgKyAid3NkbHUwMDg1IjsgIC8vICBTcGVjaWZ5IEJpbmRpbmcgRGlhbG9nICAgICAgICAgICAgICAgICAgImRpYWxvZyIgICAgICAgIC0tPiB3c2RsdTAwODUgLy8kTk9OLU5MUy0xJAotCi0JCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBOZXcgUG9ydFR5cGUgRGlhbG9nIAotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19QT1JUVFlQRV9ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwODYiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkVXX1BPUlRUWVBFX0RJQUxPR19OQU1FX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwODciOyAvLyBub3QgdXNlZCAtLSB0ZXh0IHdpbGwgdXNlICJkaWFsb2ciIGNvbnRleHQgSWQgLy8kTk9OLU5MUy0xJAotCi0JCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBTcGVjaWZ5IFBvcnQgVHlwZSBEaWFsb2cgLS0tIGNvbW1vbi51aQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNQRUNJRllfUE9SVFRZUEVfRElBTE9HID0gcGx1Z2luSWQgKyAid3NkbHUwMDg4IjsgLy8gIFNwZWNpZnkgUG9ydCBUeXBlIERpYWxvZyAgICAgICAgICAgICAgICAiZGlhbG9nIiAgICAgICAgLS0+IHdzZGx1MDA4OCAvLyROT04tTkxTLTEkCi0KLQkKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIFByb3BlcnRpZXMKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQkvL0RlZmluaXRpb246Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19OQU1FX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAxMDAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19ERUZfUFJFRklYX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAxMDEiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19ERUZfVE5TX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAxMDIiOyAvLyROT04tTkxTLTEkCi0KLQkvL1BvcnQ6Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QT1JUX0JJTkRJTkdfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMDMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19QT1JUX0FERFJFU1NfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDEwNCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX1BPUlRfUFJPVE9DT0xfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDEwNSI7IC8vJE5PTi1OTFMtMSQKLQotCS8vQmluZGluZzoKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0JJTkRJTkdfUE9SVFRZUEVfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAxMDYiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19CSU5ESU5HX1BST1RPQ09MX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAxMDciOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19CSU5ESU5HX0dFTl9CSU5ESU5HX0JVVFRPTiA9IHBsdWdpbklkICsgIndzZGx1MDEwOCI7IC8vJE5PTi1OTFMtMSQKLQotCS8vSW5wdXQvT3V0cHV0L0ZhdWx0OgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfTUVTU0FHRV9SRUZfTUVTU0FHRV9DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDEwOSI7IC8vJE5PTi1OTFMtMSQKLQotCS8vUGFydDoKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX1BBUlRfRUxFTUVOVF9DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDExMCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX1BBUlRfVFlQRV9DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDExMSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX1BBUlRfVFlQRV9SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDExMiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX1BBUlRfRUxFTUVOVF9SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDExMyI7IC8vJE5PTi1OTFMtMSQKLQkKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfRE9DVU1FTlRBVElPTl9UQUIgPSBwbHVnaW5JZCArICJ3c2RsdTAxMTQiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1dJWkFSRF9PUFRJT05TX1BBR0UgPSBwbHVnaW5JZCArICJ3c2RsdTAxMjAiOyAgLy8gTmV3IFdTREwgV2l6YXJkIC0gb3B0aW9ucyBwYWdlIAktLT4gd3NkbHUwMTIwIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0RFU0lHTl9WSUVXID0gcGx1Z2luSWQgKyAid3NkbHUwMTIxIjsgLy8gIERlc2lnbiBWaWV3IAkJCQktLT4gd3NkbHUwMTIxIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX09VVExJTkVfVklFVyA9IHBsdWdpbklkICsgIndzZGx1MDEyMiI7ICAvLyBPdXRsaW5lIFZpZXcgCQkJCS0tPiB3c2RsdTAxMjIgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUFJPUEVSVElFU19WSUVXID0gcGx1Z2luSWQgKyAid3NkbHUwMTIzIjsgLy8gIFByb3BlcnRpZXMgVmlldwkJCQktLT4gd3NkbHUwMTIzIC8vJE5PTi1OTFMtMSQKLQotLy8JV1NETCBQcmVmZXJlbmNlIFBhZ2U6Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QUkVGX0RFRkFVTFRfVE5TID0gcGx1Z2luSWQgKyAid3NkbHUwMjAwIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUFJFRl9SRUdFTl9PTl9TQVZFID0gcGx1Z2luSWQgKyAid3NkbHUwMjAxIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUFJFRl9QUk9NUFRfUkVHRU5fT05fU0FWRSA9IHBsdWdpbklkICsgIndzZGx1MDIwMiI7IC8vJE5PTi1OTFMtMSQKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNERWRpdG9yUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTREVkaXRvclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2FjMGJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNERWRpdG9yUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLQotcHVibGljIGNsYXNzIEFTREVkaXRvclBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCXB1YmxpYyBzdGF0aWMgaW50IERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1JFTE9BRCA9IDI7Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBBU0RFZGl0b3JQbHVnaW4gaW5zdGFuY2U7Ci0JICAKLQkgIHB1YmxpYyBBU0RFZGl0b3JQbHVnaW4oKSB7CQkgIAotCSAgfQotCSAgCi0vLwkvKioKLS8vCSAqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgotLy8JICovCi0vLwlwdWJsaWMgc3RhdGljIEFTREVkaXRvclBsdWdpbiBnZXRJbnN0YW5jZSgpCi0vLwl7Ci0vLwkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLS8vCQkJaW5zdGFuY2UgPSBuZXcgQVNERWRpdG9yUGx1Z2luKCk7Ci0vLwkJfQotLy8JCXJldHVybiBpbnN0YW5jZTsKLS8vCX0KLS8vCQotLy8JcHVibGljIEltYWdlIGdldEltYWdlKFN0cmluZyBpY29uTmFtZSkKLS8vCXsKLS8vCQlJbWFnZVJlZ2lzdHJ5IGltYWdlUmVnaXN0cnkgPSBnZXRJbWFnZVJlZ2lzdHJ5KCk7Ci0vLwkJCi0vLwkJaWYgKGltYWdlUmVnaXN0cnkuZ2V0KGljb25OYW1lKSAhPSBudWxsKQotLy8JCXsKLS8vCQkJcmV0dXJuIGltYWdlUmVnaXN0cnkuZ2V0KGljb25OYW1lKTsKLS8vCQl9Ci0vLwkJZWxzZQotLy8JCXsKLS8vCQkJaW1hZ2VSZWdpc3RyeS5wdXQoaWNvbk5hbWUsIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShnZXRDbGFzcygpLCBpY29uTmFtZSkpOwotLy8JCQlyZXR1cm4gaW1hZ2VSZWdpc3RyeS5nZXQoaWNvbk5hbWUpOwotLy8JCX0KLS8vCX0KLQkKLQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHBhdGgpIHsKLQkJLy8gV2Ugc2hvdWxkIG5vdCBrbm93IGFib3V0IFdTRExFZGl0b3JQbHVnaW4uamF2YS4gIEV2ZW50dWFsbHksIHdlIHNob3VsZCBtb3ZlIHRoZXNlCi0JCS8vICdnZW5lcmljJywgJ3RvcC1sZXZlbCcgaWNvbnMgdG8gdGhlIEFTRCBsZXZlbC4uLi4uCi0JCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcihwYXRoKTsKLQl9Ci0JCi0gIHB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oU3RyaW5nIHBhdGgpIHsKLSAgICAvLyBXZSBzaG91bGQgbm90IGtub3cgYWJvdXQgV1NETEVkaXRvclBsdWdpbi5qYXZhLiAgRXZlbnR1YWxseSwgd2Ugc2hvdWxkIG1vdmUgdGhlc2UKLSAgICAvLyAnZ2VuZXJpYycsICd0b3AtbGV2ZWwnIGljb25zIHRvIHRoZSBBU0QgbGV2ZWwuLi4uLgotICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4ocGF0aCk7Ci0gIH0KLQotCXB1YmxpYyBzdGF0aWMgSUVkaXRvclBhcnQgZ2V0QWN0aXZlRWRpdG9yKCkgewotCQlyZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RMYWJlbFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRExhYmVsUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI4Y2EyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRExhYmVsUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuRmlsZVN0b3JlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuRWRpdG9yTW9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlciB7Ci0JLyoqCi0JICogCi0JICovCi0JcHVibGljIEFTRExhYmVsUHJvdmlkZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCQotICAgIHByaXZhdGUgSUxhYmVsUHJvdmlkZXIgZ2V0RGVsZWdhdGUoKQotICAgIHsKLSAgICAgIElMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXIgPSBudWxsOyAgIAotICAgICAgSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICBFZGl0b3JNb2RlTWFuYWdlciBtYW5hZ2VyID0gKEVkaXRvck1vZGVNYW5hZ2VyKSBlZGl0b3IuZ2V0QWRhcHRlcihFZGl0b3JNb2RlTWFuYWdlci5jbGFzcyk7Ci0gICAgICBpZiAobWFuYWdlciAhPSBudWxsKQotICAgICAgewotICAgICAgICBsYWJlbFByb3ZpZGVyID0gKElMYWJlbFByb3ZpZGVyKSBtYW5hZ2VyLmdldEN1cnJlbnRNb2RlKCkuZ2V0QWRhcHRlcihJTGFiZWxQcm92aWRlci5jbGFzcyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbGFiZWxQcm92aWRlcjsKLSAgICB9Ci0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCi0JICovCi0JcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCA9PSBudWxsIHx8IG9iamVjdC5lcXVhbHMoU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSkpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCUltYWdlIHJlc3VsdCA9IG51bGw7ICAgICAgICAgICAKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCU9iamVjdCBzZWxlY3RlZCA9ICgoU3RydWN0dXJlZFNlbGVjdGlvbilvYmplY3QpLmdldEZpcnN0RWxlbWVudCgpOwotCQkgICAgSUxhYmVsUHJvdmlkZXIgZGVsZWdhdGUgPSBnZXREZWxlZ2F0ZSgpOwotICAgICAgICAgICAgaWYgKGRlbGVnYXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gZGVsZWdhdGUuZ2V0SW1hZ2Uoc2VsZWN0ZWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoc2VsZWN0ZWQgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLQkJCQlyZXN1bHQgPSAoKElUcmVlRWxlbWVudCkgc2VsZWN0ZWQpLmdldEltYWdlKCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCA9PSBudWxsIHx8IG9iamVjdC5lcXVhbHMoU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSkpIHsKLQkJCXJldHVybiAiTm8gaXRlbXMgc2VsZWN0ZWQiOy8vJE5PTi1OTFMtMSQKLQkJfQotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJT2JqZWN0IHNlbGVjdGVkID0gbnVsbDsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCXNlbGVjdGVkID0gKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBvYmplY3QpLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCi0gICAgICBJTGFiZWxQcm92aWRlciBkZWxlZ2F0ZSA9IGdldERlbGVnYXRlKCk7Ci0gICAgICBpZiAoZGVsZWdhdGUgIT0gbnVsbCkgewotICAgICAgICByZXN1bHQgPSBkZWxlZ2F0ZS5nZXRUZXh0KHNlbGVjdGVkKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbGVjdGVkIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0gICAgICAgICAgcmVzdWx0ID0gKChJVHJlZUVsZW1lbnQpIHNlbGVjdGVkKS5nZXRUZXh0KCk7Ci0gICAgICB9Ci0KLSAgICAgIGJvb2xlYW4gaXNGaWxlUmVhZE9ubHkgPSBmYWxzZTsKLSAgICAgIElXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLSAgICAgIGlmICh3b3JrYmVuY2ggIT0gbnVsbCkgewotICAgICAgICBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICAgICAgaWYgKHdpbmRvdyAhPSBudWxsKSB7Ci0gICAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCkgewotICAgICAgICAgICAgSUVkaXRvclBhcnQgZWRpdG9yID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgICAgIGlmIChlZGl0b3IgIT0gbnVsbCkgewotICAgICAgICAgICAgICBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSBlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgICAgaWYgKCEoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0IHx8IGVkaXRvcklucHV0IGluc3RhbmNlb2YgRmlsZVN0b3JlRWRpdG9ySW5wdXQpKSB7Ci0gICAgICAgICAgICAgICAgaXNGaWxlUmVhZE9ubHkgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLQkJCWlmIChzZWxlY3RlZCBpbnN0YW5jZW9mIElBU0RPYmplY3QgJiYgKChJQVNET2JqZWN0KSBzZWxlY3RlZCkuaXNSZWFkT25seSgpIHx8IGlzRmlsZVJlYWRPbmx5KSB7Ci0JCQkJcmVzdWx0ICA9IHJlc3VsdCArICIgKCIgKyBNZXNzYWdlcy5fVUlfTEFCRUxfUkVBRF9PTkxZICsgIikiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNETXVsdGlQYWdlRWRpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRE11bHRpUGFnZUVkaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzEwM2FkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNETXVsdGlQYWdlRWRpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuWm9vbU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuQWN0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLnBhcnRzLlNjcm9sbGluZ0dyYXBoaWNhbFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3RhY2tMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5GaWxlU3RvcmVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkQmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRFbmRQb2ludEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRGYXVsdEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRJbXBvcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW5wdXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE9wZXJhdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRPdXRwdXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkUGFyYW1ldGVyQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZFNjaGVtYUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRTZXJ2aWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNET3BlblNjaGVtYUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3QmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXROZXdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5TaG93UHJvcGVydGllc1ZpZXdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkRpcmVjdEVkaXRTZWxlY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkFTREVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5BU0RDb250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkNvbW1vbk11bHRpUGFnZUVkaXRvcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFTRE11bHRpUGFnZUVkaXRvciBleHRlbmRzIENvbW1vbk11bHRpUGFnZUVkaXRvcgotewotICAvLyBUT0RPOiBtb3ZlIHRvIGRlc2lnbiB2aWV3ZXIKLSAgcHJvdGVjdGVkIERlc2lnblZpZXdDb250ZXh0TWVudVByb3ZpZGVyIG1lbnVQcm92aWRlcjsKLSAgcHJvdGVjdGVkIElEZXNjcmlwdGlvbiBtb2RlbDsKLSAgcHJpdmF0ZSBpbnQgY3VycmVudFBhZ2UgPSAtMTsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbXVsdGktcGFnZSBlZGl0b3IgZXhhbXBsZS4KLSAgICovCi0gIHB1YmxpYyBBU0RNdWx0aVBhZ2VFZGl0b3IoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgIAotICAgIGdldEVkaXREb21haW4oKS5zZXRBY3RpdmVUb29sKG5ldyBEaXJlY3RFZGl0U2VsZWN0aW9uVG9vbCgpKTsKLSAgICBnZXRFZGl0RG9tYWluKCkuc2V0RGVmYXVsdFRvb2wobmV3IERpcmVjdEVkaXRTZWxlY3Rpb25Ub29sKCkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb250cmlidXRvcklkKCkKLSAgewotICAgIHJldHVybiAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvciI7IC8vJE5PTi1OTFMtMSQKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBJbnRlcm5hbExheW91dCBleHRlbmRzIFN0YWNrTGF5b3V0Ci0gIHsKLSAgICBwdWJsaWMgSW50ZXJuYWxMYXlvdXQoKSB7Ci0gICAgICBzdXBlcigpOyAgCi0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGxheW91dChDb21wb3NpdGUgY29tcG9zaXRlLCBib29sZWFuIGZsdXNoQ2FjaGUpIHsKLSAgICAgIENvbnRyb2wgY2hpbGRyZW5bXSA9IGNvbXBvc2l0ZS5nZXRDaGlsZHJlbigpOwotICAgICAgUmVjdGFuZ2xlIHJlY3QgPSBjb21wb3NpdGUuZ2V0Q2xpZW50QXJlYSgpOwotICAgICAgcmVjdC54ICs9IG1hcmdpbldpZHRoOwotICAgICAgcmVjdC55ICs9IG1hcmdpbkhlaWdodDsKLSAgICAgIHJlY3Qud2lkdGggLT0gMiAqIG1hcmdpbldpZHRoOwotICAgICAgcmVjdC5oZWlnaHQgLT0gMiAqIG1hcmdpbkhlaWdodDsKLSAgICAgIAotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoaSA9PSAwICYmIG1vZGVDb21ibyAhPSBudWxsKSB7IC8vIEZvciB0aGUgZHJvcCBkb3duIHRvb2xiYXIKLSAgICAgICAgICBjaGlsZHJlbltpXS5zZXRCb3VuZHMocmVjdC54ICsgcmVjdC53aWR0aCAtIDkwIC0gbWF4TGVuZ3RoLCByZWN0LnkgKyAxMCwgbWF4TGVuZ3RoICsgNjAsIDI2KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsvLyBGb3IgdGhlIG1haW4gZ3JhcGggdmlld2VyCi0gICAgICAgICAgY2hpbGRyZW5baV0uc2V0Qm91bmRzKHJlY3QpOyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfSAgICAgICAKLSAgICB9ICAgICAgICAgICAgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlR3JhcGhQYWdlQ29tcG9zaXRlKCkgeyAgICAKLSAgICBDb21wb3NpdGUgcGFyZW50ID0gbmV3IENvbXBvc2l0ZShnZXRDb250YWluZXIoKSwgU1dULkZMQVQpOwotICAgIHBhcmVudC5zZXRMYXlvdXQobmV3IEludGVybmFsTGF5b3V0KCkpOwotICAgIGNyZWF0ZVZpZXdNb2RlVG9vbGJhcihwYXJlbnQpOwotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICAKLSAgcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgewotCSAgaWYgKChmT3V0bGluZVBhZ2UgPT0gbnVsbCkgfHwgZk91dGxpbmVQYWdlLmdldENvbnRyb2woKSA9PSBudWxsIHx8IChmT3V0bGluZVBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkpIHsKLQkJICBJQ29udGVudFByb3ZpZGVyICBwcm92aWRlciA9IGdldEVkaXRvck1vZGVNYW5hZ2VyKCkuZ2V0Q3VycmVudE1vZGUoKS5nZXRPdXRsaW5lUHJvdmlkZXIoKTsKLSAgICAgICAgICAKLSAgICAgIEFTRENvbnRlbnRPdXRsaW5lUGFnZSBvdXRsaW5lUGFnZSA9IG5ldyBBU0RDb250ZW50T3V0bGluZVBhZ2UodGhpcywgbWVudVByb3ZpZGVyKTsKLQkJICBvdXRsaW5lUGFnZS5zZXRDb250ZW50UHJvdmlkZXIoKElUcmVlQ29udGVudFByb3ZpZGVyKXByb3ZpZGVyKTsKLQkJICBvdXRsaW5lUGFnZS5zZXRMYWJlbFByb3ZpZGVyKChJTGFiZWxQcm92aWRlcilwcm92aWRlcik7Ci0JCSAgb3V0bGluZVBhZ2Uuc2V0TW9kZWwoZ2V0TW9kZWwoKSk7Ci0JCSAgb3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICBnZXRTZWxlY3Rpb25NYW5hZ2VyKCkuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG91dGxpbmVQYWdlKTsKLSAgICAgIAotICAgICAgZk91dGxpbmVQYWdlID0gb3V0bGluZVBhZ2U7Ci0JICB9Ci0JICByZXR1cm4gZk91dGxpbmVQYWdlOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgcGFnZXMgb2YgdGhlIG11bHRpLXBhZ2UgZWRpdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUGFnZXMoKQotICB7Ci0gICAgc2VsZWN0aW9uUHJvdmlkZXIgPSBnZXRTZWxlY3Rpb25NYW5hZ2VyKCk7Ci0gICAgZ2V0RWRpdG9yU2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKHNlbGVjdGlvblByb3ZpZGVyKTsKLQotICAgIGNyZWF0ZUdyYXBoUGFnZSgpOwotICAgIGNyZWF0ZVNvdXJjZVBhZ2UoKTsKLQotICAgIGJ1aWxkQW5kU2V0TW9kZWwoKTsKLSAgICBpbml0aWFsaXplR3JhcGhpY2FsVmlld2VyKCk7Ci0gICAgc2V0QWN0aXZlUGFnZShnZXREZWZhdWx0UGFnZVR5cGVJbmRleCgpKTsKLSAgICAKLSAgICBnZXRTZWxlY3Rpb25NYW5hZ2VyKCkuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGdldE1vZGVsKCkpKTsKLSAgICAKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGdyYXBoaWNhbFZpZXdlci5nZXRDb250cm9sKCksIEFTREVkaXRvckNTSGVscElkcy5XU0RMX0RFU0lHTl9WSUVXKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGludCBnZXREZWZhdWx0UGFnZVR5cGVJbmRleCgpIHsKLQkgIGludCBwYWdlSW5kZXggPSBTT1VSQ0VfUEFHRV9JTkRFWDsKLQkgIGlmIChXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGVmYXVsdFBhZ2UoKS5lcXVhbHMoV1NETEVkaXRvclBsdWdpbi5ERVNJR05fUEFHRSkpIHsKLQkJICBwYWdlSW5kZXggPSBERVNJR05fUEFHRV9JTkRFWDsKLQkgIH0KLQotCSAgcmV0dXJuIHBhZ2VJbmRleDsKLQkgIH0KLSAgCi0gIHByb3RlY3RlZCBTY3JvbGxpbmdHcmFwaGljYWxWaWV3ZXIgZ2V0R3JhcGhpY2FsVmlld2VyKCkKLSAgewotICAgIHJldHVybiBuZXcgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcih0aGlzLCBnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBidWlsZEFuZFNldE1vZGVsKCkgewotCSAgbW9kZWwgPSBidWlsZE1vZGVsKGdldEVkaXRvcklucHV0KCkpOwotICB9Ci0KLSAgYWJzdHJhY3QgcHVibGljIElEZXNjcmlwdGlvbiBidWlsZE1vZGVsKElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCk7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0ZpbGVSZWFkT25seSgpIHsKLSAgICBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSBnZXRFZGl0b3JJbnB1dCgpOwotICAgIHJldHVybiAhKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCB8fCBlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIEZpbGVTdG9yZUVkaXRvcklucHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUFjdGlvbnMoKQotICB7Ci0gICAgQWN0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRBY3Rpb25SZWdpc3RyeSgpOwotICAgIEJhc2VTZWxlY3Rpb25BY3Rpb24gYWN0aW9uOwotICAgIGlmICghaXNGaWxlUmVhZE9ubHkoKSkKLSAgICB7Ci0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkU2VydmljZUFjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTREFkZEJpbmRpbmdBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRJbnRlcmZhY2VBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRFbmRQb2ludEFjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTREFkZE9wZXJhdGlvbkFjdGlvbih0aGlzKTsKLSAgICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgICAgYWN0aW9uID0gbmV3IEFTREFkZElucHV0QWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkT3V0cHV0QWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEQWRkRmF1bHRBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0REZWxldGVBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RTZXROZXdCaW5kaW5nQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uKHRoaXMpOwotICAgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0gICAgICBhY3Rpb24gPSBuZXcgQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRJbXBvcnRBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRQYXJhbWV0ZXJBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLSAgICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRTY2hlbWFBY3Rpb24odGhpcyk7Ci0gICAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0gICAgfQotCi0gICAgYWN0aW9uID0gbmV3IEFTRE9wZW5TY2hlbWFBY3Rpb24odGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLSAgICAKLSAgICBhY3Rpb24gPSBuZXcgU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgSURlc2NyaXB0aW9uIGdldE1vZGVsKCkKLSAgewotICAgIHJldHVybiBtb2RlbDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyB0eXBlKQotICB7Ci0gICAgaWYgKHR5cGUgPT0gWm9vbU1hbmFnZXIuY2xhc3MpCi0gICAgICByZXR1cm4gZ3JhcGhpY2FsVmlld2VyLmdldFByb3BlcnR5KFpvb21NYW5hZ2VyLmNsYXNzLnRvU3RyaW5nKCkpOwotCi0gICAgaWYgKHR5cGUgPT0gb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpCi0gICAgewotICAgIAlBU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZSBwYWdlID0gbmV3IEFTRFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlKHRoaXMpOwotICAgIAlyZXR1cm4gcGFnZTsKLSAgICB9Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhpY2FsVmlld2VyLmNsYXNzKQotICAgICAgcmV0dXJuIGdyYXBoaWNhbFZpZXdlcjsKLSAgICBpZiAodHlwZSA9PSBFZGl0UGFydC5jbGFzcyAmJiBncmFwaGljYWxWaWV3ZXIgIT0gbnVsbCkKLSAgICAgIHJldHVybiBncmFwaGljYWxWaWV3ZXIuZ2V0Um9vdEVkaXRQYXJ0KCk7Ci0gICAgaWYgKHR5cGUgPT0gSUZpZ3VyZS5jbGFzcyAmJiBncmFwaGljYWxWaWV3ZXIgIT0gbnVsbCkKLSAgICAgIHJldHVybiAoKEdyYXBoaWNhbEVkaXRQYXJ0KSBncmFwaGljYWxWaWV3ZXIuZ2V0Um9vdEVkaXRQYXJ0KCkpLmdldEZpZ3VyZSgpOwotICAgIAotICAgIGlmIChJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzLmVxdWFscyh0eXBlKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0Q29udGVudE91dGxpbmVQYWdlKCk7Ci0gICAgfQotICAgIAotICAgIGlmICh0eXBlID09IElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcykKLSAgICB7Ci0gICAgICAgcmV0dXJuIGdldFNlbGVjdGlvbk1hbmFnZXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIodHlwZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRWRpdFBhcnRGYWN0b3J5IGdldEVkaXRQYXJ0RmFjdG9yeSgpIHsKLSAgICByZXR1cm4gbmV3IEFTREVkaXRQYXJ0RmFjdG9yeSgpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBzZXRFZGl0UGFydEZhY3RvcnkoRWRpdFBhcnRGYWN0b3J5IGZhY3RvcnkpIHsKLQkgIGdyYXBoaWNhbFZpZXdlci5zZXRFZGl0UGFydEZhY3RvcnkoZmFjdG9yeSk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVHcmFwaGljYWxWaWV3ZXIoKQotICB7Ci0gICAgZ3JhcGhpY2FsVmlld2VyLnNldENvbnRlbnRzKG1vZGVsKTsKLSAgICBtZW51UHJvdmlkZXIgPSBuZXcgRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXIoZ3JhcGhpY2FsVmlld2VyLCBnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBuZXdQYWdlSW5kZXgpIHsKLSAgICBjdXJyZW50UGFnZSA9IG5ld1BhZ2VJbmRleDsKLSAgICBzdXBlci5wYWdlQ2hhbmdlKG5ld1BhZ2VJbmRleCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JICBpZiAoY3VycmVudFBhZ2UgPT0gU09VUkNFX1BBR0VfSU5ERVgpIHsKLQkJICBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuc2V0RGVmYXVsdFBhZ2UoV1NETEVkaXRvclBsdWdpbi5TT1VSQ0VfUEFHRSk7Ci0JICB9Ci0JICBlbHNlIHsKLQkJICBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuc2V0RGVmYXVsdFBhZ2UoV1NETEVkaXRvclBsdWdpbi5ERVNJR05fUEFHRSk7Ci0JICB9Ci0KLQkgIHN1cGVyLmRpc3Bvc2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RTZWxlY3Rpb25NYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRFNlbGVjdGlvbk1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M3YWM4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRFNlbGVjdGlvbk1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZVNlbGVjdGlvblByb3ZpZGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEU2VsZWN0aW9uTWFuYWdlciBleHRlbmRzIE11bHRpUGFnZVNlbGVjdGlvblByb3ZpZGVyIGltcGxlbWVudHMgSVNlbGVjdGlvblByb3ZpZGVyLCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCi17Ci0JcHJvdGVjdGVkIExpc3QgbGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCXByb3RlY3RlZCBJU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247Ci0JcHJvdGVjdGVkIGJvb2xlYW4gZW5hYmxlTm90aWZ5ID0gdHJ1ZTsKLQkKLQlwdWJsaWMgQVNEU2VsZWN0aW9uTWFuYWdlcihNdWx0aVBhZ2VFZGl0b3JQYXJ0IG11bHRpUGFnZUVkaXRvcikKLQl7Ci0JCXN1cGVyKG11bHRpUGFnZUVkaXRvcik7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI2FkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpCi0JICovCi0JcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpCi0JewotCQlsaXN0ZW5lckxpc3QuYWRkKGxpc3RlbmVyKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIjZ2V0U2VsZWN0aW9uKCkKLQkgKi8KLQlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKQotCXsKLQkJcmV0dXJuIGN1cnJlbnRTZWxlY3Rpb247Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3JlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpCi0JewotCQlsaXN0ZW5lckxpc3QucmVtb3ZlKGxpc3RlbmVyKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIjc2V0U2VsZWN0aW9uKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB0aGlzKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZW5hYmxlTm90aWZ5KQotCQl7Ci0JCQlzZXRTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCksIGV2ZW50LmdldFNlbGVjdGlvblByb3ZpZGVyKCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbiwgSVNlbGVjdGlvblByb3ZpZGVyIHNvdXJjZSkKLQl7ICAKLQkJaWYgKGVuYWJsZU5vdGlmeSkKLQkJewotCQkJY3VycmVudFNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQkJCWVuYWJsZU5vdGlmeSA9IGZhbHNlOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gbmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzb3VyY2UsIHNlbGVjdGlvbik7Ci0JCQkJTGlzdCBjb3B5T2ZMaXN0ZW5lckxpc3QgPSBuZXcgQXJyYXlMaXN0KGxpc3RlbmVyTGlzdCk7Ci0JCQkJZm9yIChJdGVyYXRvciBpID0gY29weU9mTGlzdGVuZXJMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0JCQkJewotCQkJCQlJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyID0gKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpaS5uZXh0KCk7Ci0JCQkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOwotCQkJCX0KLQkJCX0KLQkJCWZpbmFsbHkKLQkJCXsKLQkJCQllbmFibGVOb3RpZnkgPSB0cnVlOwotCQkJfQotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIwMzcyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZDsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBNZXNzYWdlcy5jbGFzcyk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JICAKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoQlVORExFX05BTUUpOwotCi0JcHJpdmF0ZSBNZXNzYWdlcygpIHsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXRyeSB7Ci0JCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuICchJyArIGtleSArICchJzsKLQkJfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVEFCX0dSQVBIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9UQUJfU09VUkNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9CVVRUT05fTkVXOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9SRUFEX09OTFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05BTUVTUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUE9SVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0xPQ0FUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9BRERSRVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9QUkVGSVg7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfU0VSVklDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX09QRVJBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfT1VUUFVUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX0ZBVUxUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1BPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfUE9SVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9ERUxFVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0JVVFRPTl9CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9ORVdfUE9SVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9ORVdfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0VYSVNUSU5HX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9HRU5FUkFURV9CSU5ESU5HX0NPTlRFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FWElTVElOR19CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9UQVJHRVRfTkFNRVNQQUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfU0NIRU1BOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX0lOUFVUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9TRUNUSU9OX0FEVkFOQ0VEX0FUVFJJQlVURVM7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0VESVRfTkFNRVNQQUNFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX09QRU5fU0NIRU1BOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9UT09MVElQX1JFTkFNRV9SRUZBQ1RPUjsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9SSUdIVF9DTElDS19UT19JTlNFUlRfQ09OVEVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1NIT1dfUFJPUEVSVElFUzsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRCaW5kaW5nQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkQmluZGluZ0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWE1NDQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRCaW5kaW5nQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRCaW5kaW5nQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkQmluZGluZ0FjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZEJpbmRpbmdBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0JJTkRJTkcpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9iaW5kaW5nX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSUNhdGVnb3J5QWRhcHRlcikgewotCQkJCW8gPSAoKElDYXRlZ29yeUFkYXB0ZXIpIG8pLmdldE93bmVyRGVzY3JpcHRpb24oKTsKLQkJCX0KLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElEZXNjcmlwdGlvbikgbykuZ2V0QWRkQmluZGluZ0NvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3Qgb2JqZWN0ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlwZXJmb3JtU2VsZWN0aW9uKG9iamVjdCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEVuZFBvaW50QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkRW5kUG9pbnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZhN2UzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkRW5kUG9pbnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JU2VydmljZTsKLQotcHVibGljIGNsYXNzIEFTREFkZEVuZFBvaW50QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZEVuZFBvaW50QWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkRW5kUG9pbnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1BPUlQpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9wb3J0X29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQlJU2VydmljZSBzZXJ2aWNlID0gbnVsbDsKLQkJCQotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBJU2VydmljZSkgewotICAgICAgICAgICAgCXNlcnZpY2UgPSAoSVNlcnZpY2UpIG87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgSUVuZFBvaW50KSB7Ci0gICAgICAgICAgICAJc2VydmljZSA9ICgoSUVuZFBvaW50KSBvKS5nZXRPd25lclNlcnZpY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIENvbW1hbmQgY29tbWFuZCA9IHNlcnZpY2UuZ2V0QWRkRW5kUG9pbnRDb21tYW5kKCk7Ci0gICAgICAgICAgICAgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLSAgICAgICAgICAgICAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotICAgICAgICAgICAgICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IGVsZW1lbnQgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXNlbGVjdEFuZERpcmVjdEVkaXQoZWxlbWVudCk7Ci0JCQkgICAgfQotICAgICAgICAgICAgfQotCQl9ICAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEZhdWx0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkRmF1bHRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMxODgzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkRmF1bHRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRGYXVsdEFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZEZhdWx0QWN0aW9ubiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZEZhdWx0QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9GQVVMVCk7ICAgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvZmF1bHRfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCUlPcGVyYXRpb24gaU9wZXJhdGlvbiA9IG51bGw7Ci0JCQlPYmplY3QgcG9zc2libGVGYXVsdCA9IG51bGw7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSU9wZXJhdGlvbikgewotCQkJCWlPcGVyYXRpb24gPSAoSU9wZXJhdGlvbikgbzsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJCWlPcGVyYXRpb24gPSAoKElNZXNzYWdlUmVmZXJlbmNlKSBvKS5nZXRPd25lck9wZXJhdGlvbigpOwotCQkJCXBvc3NpYmxlRmF1bHQgPSAoKFcxMU1lc3NhZ2VSZWZlcmVuY2UpIG8pLmdldFRhcmdldCgpOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCQlpT3BlcmF0aW9uID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgKChJUGFyYW1ldGVyKSBvKS5nZXRPd25lcigpKS5nZXRPd25lck9wZXJhdGlvbigpOwotCQkJCXBvc3NpYmxlRmF1bHQgPSAoKFcxMU1lc3NhZ2VSZWZlcmVuY2UpICgoSVBhcmFtZXRlcikgbykuZ2V0T3duZXIoKSkuZ2V0VGFyZ2V0KCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChpT3BlcmF0aW9uICE9IG51bGwpIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSBpT3BlcmF0aW9uLmdldEFkZEZhdWx0Q29tbWFuZChwb3NzaWJsZUZhdWx0KTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3Qgb2JqZWN0ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlwZXJmb3JtU2VsZWN0aW9uKG9iamVjdCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEltcG9ydEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEltcG9ydEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGNlMGJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbXBvcnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZEltcG9ydEFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZEltcG9ydEFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZEltcG9ydEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfSU1QT1JUKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvaW1wb3J0X29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSUNhdGVnb3J5QWRhcHRlcikgewotCQkJCW8gPSAoKElDYXRlZ29yeUFkYXB0ZXIpIG8pLmdldE93bmVyRGVzY3JpcHRpb24oKTsKLQkJCX0KLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElEZXNjcmlwdGlvbikgbykuZ2V0QWRkSW1wb3J0Q29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBvYmplY3QgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXBlcmZvcm1TZWxlY3Rpb24ob2JqZWN0KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW5wdXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbnB1dEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjVmOWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbnB1dEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRJbnB1dEFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRJbnB1dEFjdGlvbm4iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRJbnB1dEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfSU5QVVQpOyAgIC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2lucHV0X29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQlJT3BlcmF0aW9uIGlPcGVyYXRpb24gPSBudWxsOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElPcGVyYXRpb24pIHsKLQkJCQlpT3BlcmF0aW9uID0gKElPcGVyYXRpb24pIG87Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQlpT3BlcmF0aW9uID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgbykuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JCQkJaU9wZXJhdGlvbiA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpICgoSVBhcmFtZXRlcikgbykuZ2V0T3duZXIoKSkuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQkJCX0KLQkJCQotCQkJaWYgKGlPcGVyYXRpb24gIT0gbnVsbCkgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9IGlPcGVyYXRpb24uZ2V0QWRkSW5wdXRDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJcGVyZm9ybVNlbGVjdGlvbihvYmplY3QpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbnRlcmZhY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbnRlcmZhY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRmMTJmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW50ZXJmYWNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRJbnRlcmZhY2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkSW50ZXJmYWNlQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkSW50ZXJmYWNlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9QT1JUVFlQRSk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3BvcnR0eXBlX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0KLQkJCWlmIChvIGluc3RhbmNlb2YgSUNhdGVnb3J5QWRhcHRlcikgewotCQkJCW8gPSAoKElDYXRlZ29yeUFkYXB0ZXIpIG8pLmdldE93bmVyRGVzY3JpcHRpb24oKTsKLQkJCX0KLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElEZXNjcmlwdGlvbikgbykuZ2V0QWRkSW50ZXJmYWNlQ29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBlbGVtZW50ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlzZWxlY3RBbmREaXJlY3RFZGl0KGVsZW1lbnQpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE1lc3NhZ2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRNZXNzYWdlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZDA3YTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE1lc3NhZ2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZE1lc3NhZ2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRNZXNzYWdlQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkTWVzc2FnZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfTUVTU0FHRSk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL21lc3NhZ2Vfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQkJbyA9ICgoSUNhdGVnb3J5QWRhcHRlcikgbykuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQkJfQotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSURlc2NyaXB0aW9uKSBvKS5nZXRBZGRNZXNzYWdlQ29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBvYmplY3QgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXBlcmZvcm1TZWxlY3Rpb24ob2JqZWN0KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkT3BlcmF0aW9uQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkT3BlcmF0aW9uQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMTkzOWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE9wZXJhdGlvbkFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkT3BlcmF0aW9uQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZE9wZXJhdGlvbkFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZE9wZXJhdGlvbkFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfT1BFUkFUSU9OKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvb3BlcmF0aW9uX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQlJSW50ZXJmYWNlIHRoZUludGVyZmFjZSA9IG51bGw7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSUludGVyZmFjZSkgewotCQkJCXRoZUludGVyZmFjZSA9IChJSW50ZXJmYWNlKSBvOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElPcGVyYXRpb24pIHsKLQkJCQl0aGVJbnRlcmZhY2UgPSAoKElPcGVyYXRpb24pIG8pLmdldE93bmVySW50ZXJmYWNlKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQl0aGVJbnRlcmZhY2UgPSAoKElNZXNzYWdlUmVmZXJlbmNlKSBvKS5nZXRPd25lck9wZXJhdGlvbigpLmdldE93bmVySW50ZXJmYWNlKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCQkJCXRoZUludGVyZmFjZSA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpICgoSVBhcmFtZXRlcikgbykuZ2V0T3duZXIoKSkuZ2V0T3duZXJPcGVyYXRpb24oKS5nZXRPd25lckludGVyZmFjZSgpOwotCQkJfQotCQkJCi0JCQlpZiAodGhlSW50ZXJmYWNlICE9IG51bGwpIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSB0aGVJbnRlcmZhY2UuZ2V0QWRkT3BlcmF0aW9uQ29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBlbGVtZW50ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlzZWxlY3RBbmREaXJlY3RFZGl0KGVsZW1lbnQpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE91dHB1dEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE91dHB1dEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTM2YWJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRPdXRwdXRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkT3V0cHV0QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZE91dHB1dEFjdGlvbm4iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRPdXRwdXRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX09VVFBVVCk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL291dHB1dF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJSU9wZXJhdGlvbiBpT3BlcmF0aW9uID0gbnVsbDsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJT3BlcmF0aW9uKSB7Ci0JCQkJaU9wZXJhdGlvbiA9IChJT3BlcmF0aW9uKSBvOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJaU9wZXJhdGlvbiA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIG8pLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCQkJCWlPcGVyYXRpb24gPSAoKElNZXNzYWdlUmVmZXJlbmNlKSAoKElQYXJhbWV0ZXIpIG8pLmdldE93bmVyKCkpLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChpT3BlcmF0aW9uICE9IG51bGwpIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSBpT3BlcmF0aW9uLmdldEFkZE91dHB1dENvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3Qgb2JqZWN0ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlwZXJmb3JtU2VsZWN0aW9uKG9iamVjdCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFBhcmFtZXRlckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFBhcmFtZXRlckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTk3MGE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRQYXJhbWV0ZXJBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkUGFyYW1ldGVyQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7IAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZFBhcmFtZXRlckFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgcHVibGljIEFTREFkZFBhcmFtZXRlckFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KSAgIHsKLSAgICAgICAgc3VwZXIocGFydCk7Ci0gICAgICAgIHNldElkKElEKTsKLSAgICAgICAgc2V0VGV4dCgiQWRkIFBhcmFtZXRlciIpOyAgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2lucHV0X29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0gICAgICAgICAgICBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlID0gbnVsbDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWVzc2FnZVJlZmVyZW5jZSA9IChJTWVzc2FnZVJlZmVyZW5jZSlvOwotICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotICAgICAgICAgICAgICAgIG1lc3NhZ2VSZWZlcmVuY2UgPSAoKElNZXNzYWdlUmVmZXJlbmNlKSAoKElQYXJhbWV0ZXIpIG8pLmdldE93bmVyKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobWVzc2FnZVJlZmVyZW5jZSBpbnN0YW5jZW9mIFcxMU1lc3NhZ2VSZWZlcmVuY2UpIHsKLSAgICAgICAgICAgICAgICBXMTFNZXNzYWdlUmVmZXJlbmNlIHcxMU1lc3NhZ2VSZWZlcmVuY2UgPSAoVzExTWVzc2FnZVJlZmVyZW5jZSltZXNzYWdlUmVmZXJlbmNlOyAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ29tbWFuZCBjb21tYW5kID0gdzExTWVzc2FnZVJlZmVyZW5jZS5nZXRBZGRQYXJhbXRlckNvbW1hbmQoKTsKLSAgICAgICAgICAgICAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotICAgICAgICAgICAgICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0gICAgICAgICAgICAgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3Qgb2JqZWN0ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlzZWxlY3RBbmREaXJlY3RFZGl0KG9iamVjdCk7Ci0JCQkgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9ICAKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkU2NoZW1hQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkU2NoZW1hQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MDRiMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFNjaGVtYUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkU2NoZW1hQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkU2NoZW1hQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkU2NoZW1hQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9TQ0hFTUEpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy94c2Rfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQkJbyA9ICgoSUNhdGVnb3J5QWRhcHRlcikgbykuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQkJfQotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSURlc2NyaXB0aW9uKSBvKS5nZXRBZGRTY2hlbWFDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJcGVyZm9ybVNlbGVjdGlvbihvYmplY3QpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRTZXJ2aWNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkU2VydmljZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzYzNjhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRTZXJ2aWNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5TZXJ2aWNlRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZFNlcnZpY2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkU2VydmljZUFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZFNlcnZpY2VBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1NFUlZJQ0UpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9zZXJ2aWNlX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSUNhdGVnb3J5QWRhcHRlcikgewotCQkJCW8gPSAoKElDYXRlZ29yeUFkYXB0ZXIpIG8pLmdldE93bmVyRGVzY3JpcHRpb24oKTsKLQkJCX0KLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElEZXNjcmlwdGlvbikgbykuZ2V0QWRkU2VydmljZUNvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3QgZWxlbWVudCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJc2VsZWN0QW5kRGlyZWN0RWRpdChlbGVtZW50KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBkb0RpcmVjdEVkaXQoRWRpdFBhcnQgZXApIHsKLQkJaWYgKGVwIGluc3RhbmNlb2YgU2VydmljZUVkaXRQYXJ0KSB7Ci0JCQkoKFNlcnZpY2VFZGl0UGFydCkgZXApLnBlcmZvcm1EaXJlY3RFZGl0KG51bGwpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RDYXB0dXJlU2NyZWVuQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQ2FwdHVyZVNjcmVlbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTg5NDI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RDYXB0dXJlU2NyZWVuQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5hY3Rpb25zLkNhcHR1cmVTY3JlZW5BY3Rpb247Ci0KLQotLyoqCi0gKiBPdXIgc2FtcGxlIGFjdGlvbiBpbXBsZW1lbnRzIHdvcmtiZW5jaCBhY3Rpb24gZGVsZWdhdGUuCi0gKiBUaGUgYWN0aW9uIHByb3h5IHdpbGwgYmUgY3JlYXRlZCBieSB0aGUgd29ya2JlbmNoIGFuZAotICogc2hvd24gaW4gdGhlIFVJLiBXaGVuIHRoZSB1c2VyIHRyaWVzIHRvIHVzZSB0aGUgYWN0aW9uLAotICogdGhpcyBkZWxlZ2F0ZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIGV4ZWN1dGlvbiB3aWxsIGJlIAotICogZGVsZWdhdGVkIHRvIGl0LgotICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUKLSAqLwotcHVibGljIGNsYXNzIEFTRENhcHR1cmVTY3JlZW5BY3Rpb24gIGV4dGVuZHMgQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJRWRpdG9yQWN0aW9uRGVsZWdhdGUgewotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgQVNEQ2FwdHVyZVNjcmVlbkFjdGlvbigpIHsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgYWN0aW9uIGhhcyBiZWVuIGFjdGl2YXRlZC4gVGhlIGFyZ3VtZW50IG9mIHRoZQotCSAqIG1ldGhvZCByZXByZXNlbnRzIHRoZSAncmVhbCcgYWN0aW9uIHNpdHRpbmcKLQkgKiBpbiB0aGUgd29ya2JlbmNoIFVJLgotCSAqIEBzZWUgSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlI3J1bgotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgewotCQlDYXB0dXJlU2NyZWVuQWN0aW9uIGNhcHR1cmVTY3JlZW5BY3Rpb24gPSBuZXcgQ2FwdHVyZVNjcmVlbkFjdGlvbigpOwotCQljYXB0dXJlU2NyZWVuQWN0aW9uLnJ1bigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUFjdGlvbiBhY3Rpb24sIElFZGl0b3JQYXJ0IHRhcmdldEVkaXRvcikgewotICAgIAotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERlbGV0ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERlbGV0ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWRmMTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REZWxldGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLQotcHVibGljIGNsYXNzIEFTRERlbGV0ZUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRERlbGV0ZUFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTRERlbGV0ZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9ERUxFVEUpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9kZWxldGVfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCUl0ZXJhdG9yIGl0ID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IG9iamVjdCA9IGl0Lm5leHQoKTsKLQkJCUNvbW1hbmQgY29tbWFuZCA9IG51bGw7Ci0JCQkKLQkJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBJQVNET2JqZWN0KSB7Ci0JCQkJY29tbWFuZCA9ICgoSUFTRE9iamVjdCkgb2JqZWN0KS5nZXREZWxldGVDb21tYW5kKCk7Ci0JCQl9Ci0KLQkJCWlmIChjb21tYW5kICE9IG51bGwpIHsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0KLQkJCSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQkgICAgCU9iamVjdCB0YXJnZXQgPSAoKFdTRExCYXNlQWRhcHRlcikgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCSAgICAJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkgICAgCQlwZXJmb3JtU2VsZWN0aW9uKCgoV1NETEVsZW1lbnQpIHRhcmdldCkuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJCSAgICAJfQotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERpcmVjdEVkaXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REaXJlY3RFZGl0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZDViZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERpcmVjdEVkaXRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuRGlyZWN0RWRpdEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci0KLXB1YmxpYyBjbGFzcyBBU0REaXJlY3RFZGl0QWN0aW9uIGV4dGVuZHMgRGlyZWN0RWRpdEFjdGlvbiB7Ci0JcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlcjsKLQkKLQkvKioKLQkgKiBTYW1lIGFzIHtAbGluayAjRGlyZWN0RWRpdEFjdGlvbihJV29ya2JlbmNoUGFydCl9LgotCSAqIEBwYXJhbSBlZGl0b3IgdGhlIGVkaXRvcgotCSAqLwotCXB1YmxpYyBBU0REaXJlY3RFZGl0QWN0aW9uKElFZGl0b3JQYXJ0IGVkaXRvcikgewotCQlzdXBlcigoSVdvcmtiZW5jaFBhcnQpZWRpdG9yKTsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGEgRGlyZWN0RWRpdEFjdGlvbiB1c2luZyB0aGUgc3BlY2lmaWVkIHBhcnQuCi0JICogQHBhcmFtIHBhcnQgdGhlIHdvcmtiZW5jaCBwYXJ0Ci0JICovCi0JcHVibGljIEFTRERpcmVjdEVkaXRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlzdXBlcihwYXJ0KTsKLQl9Ci0JCi0JICAvKiAobm9uLUphdmFkb2MpCi0JICAgKiBAc2VlIG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLlNlbGVjdGlvbkFjdGlvbiNnZXRTZWxlY3Rpb24oKQotCSAgICovCi0JICBwcm90ZWN0ZWQgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKQotCSAgewotCQkgIC8vIElmIHdlJ3JlIGluIHRoaXMgYWN0aW9uLCB3ZSBhc3N1bWUgdGhlIGFjdGlvbiB3YXMgaW5pdGlhdGVkIHZpYSB0aGUgZ3JhcGhpY2FsIHZpZXdlci4KLQkJICAvLyBXZSB1c2UgdGhlIGdyYXBoaWNhbCB2aWV3IHRvIG9idGFpbiB0aGUgc2VsZWN0ZWQgZWRpdCBwYXJ0IGJlY2F1c2UgZm9yIHVzLCBvbmUgbW9kZWwKLQkJICAvLyBtYXkgZHJpdmUgbW9yZSB0aGFuIG9uZSBlZGl0IHBhcnQuICBTbyB3ZSBuZWVkIHRvIGZpbmQgdGhlIGV4YWN0IGVkaXQgcGFydCB3ZSB3aXNoIHRvCi0JCSAgLy8gZGlyZWN0IGVkaXQuICBUaGUgcHJlZmVycmVkIG1ldGhvZCBvZiBkZXRlcm1pbmluZyB0aGUgZWRpdCBwYXJ0IHdvdWxkIGhhdmUgYmVlbiB0byBnbwotCQkgIC8vIHRocm91Z2ggdGhlIHNlbGVjdGlvbiBtYW5hZ2VyLCB0aGVuIHRocm91Z2ggdGhlIGVkaXQgcGFydCByZWdpc3RyeS4gIEhvd2V2ZXIsIHRoZSBzZWxlY3Rpb24KLQkJICAvLyBtYW5hZ2VyIG9ubHkgcmV0dXJucyB0aGUgbW9kZWwgb2JqZWN0IChub3QgdGhlIGVkaXQgcGFydCkuLi4uIGFuZCBzaW5jZSB0aGUgbW9kZWwgb2JqZWN0Ci0JCSAgLy8gbWF5IGRyaXZlIG1vcmUgdGhhbiBvbmUgZWRpdCBwYXJ0LCB0aGUgZWRpdCBwYXJ0IHJlZ2lzdHJ5IG1heSByZXR1cm4gdGhlICJ3cm9uZyIgZWRpdAotCQkgIC8vIHBhcnQgZm9yIGRpcmVjdCBlZGl0aW5nLiAgVGh1cyB3ZSBsb29rIGNhbGwgR3JhcGhpY2FsVmlld2VyLmdldEZvY3VzRWRpdFBhcnQoKS4KLQkJICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJICBPYmplY3Qgb2JqZWN0ID0gZWRpdG9yLmdldEFkYXB0ZXIoR3JhcGhpY2FsVmlld2VyLmNsYXNzKTsKLQkJICBpZiAob2JqZWN0IGluc3RhbmNlb2YgR3JhcGhpY2FsVmlld2VyKSB7Ci0JCQkgIE9iamVjdCBzZWxlY3Rpb24gPSAoKEdyYXBoaWNhbFZpZXdlcikgb2JqZWN0KS5nZXRGb2N1c0VkaXRQYXJ0KCk7Ci0JCQkgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb24pOwotCQkgIH0KLQkgICAgCi0JICAgIHJldHVybiBzdXBlci5nZXRTZWxlY3Rpb24oKTsKLQkgIH0KLQkgIAotCSAgLyogKG5vbi1KYXZhZG9jKQotCSAgICogQHNlZSBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5TZWxlY3Rpb25BY3Rpb24jc2V0U2VsZWN0aW9uUHJvdmlkZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIpCi0JICAgKi8KLQkgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblByb3ZpZGVyKElTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlcikKLQkgIHsKLQkgICAgc3VwZXIuc2V0U2VsZWN0aW9uUHJvdmlkZXIocHJvdmlkZXIpOwotCSAgICB0aGlzLnByb3ZpZGVyID0gcHJvdmlkZXI7Ci0JICB9Ci0JICAKLQkgIHByb3RlY3RlZCBib29sZWFuIGNhbGN1bGF0ZUVuYWJsZWQoKSB7Ci0JCSAgT2JqZWN0IHNlbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFNlbGVjdGlvbigpKS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJICAKLQkJICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkJICByZXR1cm4gICEoKElBU0RPYmplY3QpIHNlbGVjdGlvbikuaXNSZWFkT25seSgpOwotCQkgIH0KLQkJICAKLQkJICByZXR1cm4gdHJ1ZTsKLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REcmFnQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERHJhZ0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTNjODNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REcmFnQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQVNERHJhZ0FjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXByb3RlY3RlZCBHcmFwaGljYWxFZGl0UGFydCBtb3ZpbmdDaGlsZEVkaXRQYXJ0OwotCXByb3RlY3RlZCBQb2ludCBwb2ludGVyTG9jYXRpb247Ci0JCi0JcHVibGljIEFTRERyYWdBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlzdXBlcihwYXJ0KTsKLQl9Ci0JCi0JLyoKLQkgKiBTdWItY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCi0JICovCi0JcHVibGljIGJvb2xlYW4gY2FuRXhlY3V0ZSgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQlydW4oKTsKLQl9Ci0JCi0JLyoKLQkgKiBTdWItY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRVbmRvRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQkvKgotCSAqIFN1Yi1jbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KLQkgKi8KLQlwdWJsaWMgSUZpZ3VyZSBnZXRGZWVkYmFja0ZpZ3VyZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERyYWdSZW9yZGVyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERHJhZ1Jlb3JkZXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM1YTNlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERHJhZ1Jlb3JkZXJBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUG9seWxpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0REcmFnUmVvcmRlckFjdGlvbiBleHRlbmRzIEFTRERyYWdBY3Rpb24gewotCSAgcHJvdGVjdGVkIElBU0RPYmplY3QgbW92aW5nQ2hpbGQ7Ci0JICBwcm90ZWN0ZWQgSUFTRE9iamVjdCBuZXdQYXJlbnQ7Ci0JICBwcm90ZWN0ZWQgR3JhcGhpY2FsRWRpdFBhcnQgbGVmdFNpYmxpbmdFZGl0UGFydDsKLQkgIHByb3RlY3RlZCBHcmFwaGljYWxFZGl0UGFydCByaWdodFNpYmxpbmdFZGl0UGFydDsKLQkgIHByb3RlY3RlZCBJQVNET2JqZWN0IGxlZnRTaWJFbGVtZW50OwotCSAgcHJvdGVjdGVkIElBU0RPYmplY3QgcmlnaHRTaWJFbGVtZW50OwotCSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FuTmV2ZXJFeGVjdXRlID0gZmFsc2U7Ci0JICAKLQkgIHB1YmxpYyBBU0REcmFnUmVvcmRlckFjdGlvbihHcmFwaGljYWxFZGl0UGFydCBtb3ZpbmdDaGlsZEVkaXRQYXJ0LCBFZGl0UGFydCBwb2ludGVyRWRpdFBhcnQsIFBvaW50IHBvaW50ZXJMb2NhdGlvbikgewotCQkgIHN1cGVyKG51bGwpOwotCSAgCXRoaXMubW92aW5nQ2hpbGRFZGl0UGFydCA9IG1vdmluZ0NoaWxkRWRpdFBhcnQ7Ci0JICAJdGhpcy5wb2ludGVyTG9jYXRpb24gPSBwb2ludGVyTG9jYXRpb247Ci0KLQkJRWRpdFBhcnQgcG9zc2libGVQYXJlbnQgPSBnZXRQYXJlbnRFZGl0UGFydChwb2ludGVyRWRpdFBhcnQpOwotCQkKLQkJaWYgKCEocG9zc2libGVQYXJlbnQgaW5zdGFuY2VvZiBHcmFwaGljYWxFZGl0UGFydCkpIHsKLQkJCWNhbk5ldmVyRXhlY3V0ZSA9IHRydWU7Ci0JCQlyZXR1cm47Ci0JCX0KLQkgIAkKLQkJR3JhcGhpY2FsRWRpdFBhcnQgdGFyZ2V0UGFyZW50RWRpdFBhcnQgPSAoR3JhcGhpY2FsRWRpdFBhcnQpIHBvc3NpYmxlUGFyZW50OwotCQkKLQkJaWYgKHBvaW50ZXJFZGl0UGFydC5nZXRQYXJlbnQoKSAhPSBudWxsKSB7Ci0JCQkvLyBTb3J0IHRoZSBzaWJsaW5ncyAoYW5kIGl0c2VsZikKLQkJCUxpc3QgdGFyZ2V0RWRpdFBhcnRTaWJsaW5ncyA9IHBvaW50ZXJFZGl0UGFydC5nZXRQYXJlbnQoKS5nZXRDaGlsZHJlbigpOwotCQkJQ29sbGVjdGlvbnMuc29ydCh0YXJnZXRFZGl0UGFydFNpYmxpbmdzLCBuZXcgVmVydGljYWxFZGl0UGFydENvbXBhcmF0b3IoKSk7Ci0JICAKLQkJCS8vIEdldCAnbGVmdCcgYW5kICdyaWdodCcgc2libGluZ3MKLQkJCWxlZnRTaWJsaW5nRWRpdFBhcnQgPSBnZXRWZXJ0aWNhbExlZnRTaWJsaW5nKHRhcmdldEVkaXRQYXJ0U2libGluZ3MsIG1vdmluZ0NoaWxkRWRpdFBhcnQsIHBvaW50ZXJMb2NhdGlvbik7Ci0JCQlyaWdodFNpYmxpbmdFZGl0UGFydCA9IGdldFZlcnRpY2FsUmlnaHRTaWJsaW5nKHRhcmdldEVkaXRQYXJ0U2libGluZ3MsIG1vdmluZ0NoaWxkRWRpdFBhcnQsIHBvaW50ZXJMb2NhdGlvbik7ICAgICAgICAgICAJCi0KLQkJCWlmIChtb3ZpbmdDaGlsZEVkaXRQYXJ0ICE9IG51bGwpCi0JCQkJbW92aW5nQ2hpbGQgPSAoSUFTRE9iamVjdCkgbW92aW5nQ2hpbGRFZGl0UGFydC5nZXRNb2RlbCgpOwotCQkJaWYgKGxlZnRTaWJsaW5nRWRpdFBhcnQgIT0gbnVsbCkKLQkJCQlsZWZ0U2liRWxlbWVudCA9IChJQVNET2JqZWN0KSBsZWZ0U2libGluZ0VkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JCQlpZiAocmlnaHRTaWJsaW5nRWRpdFBhcnQgIT0gbnVsbCkKLQkJCQlyaWdodFNpYkVsZW1lbnQgPSAoSUFTRE9iamVjdCkgcmlnaHRTaWJsaW5nRWRpdFBhcnQuZ2V0TW9kZWwoKTsKLQkJCQotCQkJbmV3UGFyZW50ID0gKElBU0RPYmplY3QpIHRhcmdldFBhcmVudEVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQluZXdQYXJlbnQgPSAoSUFTRE9iamVjdCkgdGFyZ2V0UGFyZW50RWRpdFBhcnQuZ2V0TW9kZWwoKTsKLQkJCWxlZnRTaWJFbGVtZW50ID0gbnVsbDsKLQkJCXJpZ2h0U2liRWxlbWVudD0gbnVsbDsKLQkJfQotCSAgfQotCSAgICAgICAgICAgIAotCSAgcHVibGljIGJvb2xlYW4gY2FuRXhlY3V0ZSgpCi0JICB7Ci0JICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JICAgIAotCSAgICBpZiAoY2FuTmV2ZXJFeGVjdXRlIHx8IG5ld1BhcmVudCA9PSBudWxsIHx8IG1vdmluZ0NoaWxkID09IG51bGwpIHsKLQkgICAgCXJldHVybiBmYWxzZTsKLQkgICAgfQotCSAgICAKLQkgICAgaWYgKG1vdmluZ0NoaWxkIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkgICAgCUlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIG1vdmluZ0NoaWxkOwotCSAgICAJaWYgKG1lc3NhZ2VSZWYuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQgfHwgbWVzc2FnZVJlZi5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpIHsKLQkgICAgCQlJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2liTWVzc2FnZVJlZiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbGVmdFNpYkVsZW1lbnQ7Ci0KLQkgICAgCQlyZXN1bHQgPSB0cnVlOwotCSAgICAJCWlmIChsZWZ0U2liTWVzc2FnZVJlZiAhPSBudWxsKSB7Ci0JICAgIAkJCWlmIChsZWZ0U2liTWVzc2FnZVJlZi5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9GQVVMVCkgewotCSAgICAJCQkJcmVzdWx0ID0gZmFsc2U7Ci0JICAgIAkJCX0KLQkgICAgCQl9Ci0JICAgIAkJaWYgKCEocmVzdWx0ICYmIG5ld1BhcmVudC5lcXVhbHMobWVzc2FnZVJlZi5nZXRPd25lck9wZXJhdGlvbigpKSkpIHsKLQkgICAgCQkJcmVzdWx0ID0gZmFsc2U7Ci0JICAgIAkJfQotCSAgICAJfQotCSAgICB9Ci0JICAgIGVsc2UgaWYgKG1vdmluZ0NoaWxkIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCSAgICAJaWYgKG5ld1BhcmVudCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlICYmIG5ld1BhcmVudC5lcXVhbHMoKChJUGFyYW1ldGVyKSBtb3ZpbmdDaGlsZCkuZ2V0T3duZXIoKSkpIHsKLQkgICAgCQlyZXN1bHQgPSB0cnVlOwotCSAgICAJfQotCSAgICB9Ci0JICAgIAotCSAgICByZXR1cm4gcmVzdWx0OwotCSAgfSAgICAgICAgICAgCi0KLQkgIC8qCi0JICAgKiBAc2VlIElBY3Rpb24jcnVuKCkKLQkgICAqLwotCSAgcHVibGljIHZvaWQgcnVuKCkKLQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0vLwkgICAgYmVnaW5SZWNvcmRpbmcoKTsKLQkgIAlpZiAoY2FuRXhlY3V0ZSgpKSB7Ci0JICAJCWlmIChtb3ZpbmdDaGlsZCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JICAJCQlPYmplY3QgbWVzc2FnZVJlZk93bmVyID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgbW92aW5nQ2hpbGQpLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JICAJCQlpZiAobWVzc2FnZVJlZk93bmVyIGluc3RhbmNlb2YgSU9wZXJhdGlvbikgewotCSAgCQkJCUlNZXNzYWdlUmVmZXJlbmNlIGxlZnRTaWIgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIGxlZnRTaWJFbGVtZW50OwotCSAgCQkJCUlNZXNzYWdlUmVmZXJlbmNlIHJpZ2h0U2liID0gKElNZXNzYWdlUmVmZXJlbmNlKSByaWdodFNpYkVsZW1lbnQ7Ci0JICAJCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbW92aW5nU2liID0gKElNZXNzYWdlUmVmZXJlbmNlKSBtb3ZpbmdDaGlsZDsKLQkgIAkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElPcGVyYXRpb24pIG1lc3NhZ2VSZWZPd25lcikuZ2V0UmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZChsZWZ0U2liLCByaWdodFNpYiwgbW92aW5nU2liKTsKLQkgIAkJCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkgIAkJCX0KLQkgIAkJfQotCSAgCQllbHNlIGlmIChtb3ZpbmdDaGlsZCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkgIAkJCU9iamVjdCBwYXJhbU93bmVyID0gKChJUGFyYW1ldGVyKSBtb3ZpbmdDaGlsZCkuZ2V0T3duZXIoKTsKLQkgIAkJCWlmIChwYXJhbU93bmVyIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkgIAkJCQlJUGFyYW1ldGVyIGxlZnRTaWIgPSAoSVBhcmFtZXRlcikgbGVmdFNpYkVsZW1lbnQ7Ci0JICAJCQkJSVBhcmFtZXRlciByaWdodFNpYiA9IChJUGFyYW1ldGVyKSByaWdodFNpYkVsZW1lbnQ7Ci0JICAJCQkJSVBhcmFtZXRlciBtb3ZpbmdTaWIgPSAoSVBhcmFtZXRlcikgbW92aW5nQ2hpbGQ7Ci0JICAJCQkJQ29tbWFuZCBjb21tYW5kID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgcGFyYW1Pd25lcikuZ2V0UmVvcmRlclBhcmFtZXRlcnNDb21tYW5kKGxlZnRTaWIsIHJpZ2h0U2liLCBtb3ZpbmdTaWIpOwotCSAgCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotCSAgCQkJfQotCSAgCQl9Ci0vLwkgIAkJd3NkbEVkaXRvci5nZXRTZWxlY3Rpb25NYW5hZ2VyKCkuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vdmluZ0NoaWxkKSk7Ci0JICAJfQotLy8JICAgIGVuZFJlY29yZGluZygpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgSUZpZ3VyZSBnZXRGZWVkYmFja0ZpZ3VyZSgpIHsKLQkgIAlJRmlndXJlIGZlZWRiYWNrRmlndXJlID0gbnVsbDsKLQkgICAgaWYgKGZlZWRiYWNrRmlndXJlID09IG51bGwgJiYgbW92aW5nQ2hpbGRFZGl0UGFydCBpbnN0YW5jZW9mIEdyYXBoaWNhbEVkaXRQYXJ0KQotCSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAgICAgZmVlZGJhY2tGaWd1cmUgPSBuZXcgUG9seWxpbmUoKTsKLQkgICAgICAoKFBvbHlsaW5lKWZlZWRiYWNrRmlndXJlKS5zZXRMaW5lV2lkdGgoMik7CQotCSAgICAgIGRyYXdMaW5lcygoUG9seWxpbmUpIGZlZWRiYWNrRmlndXJlKTsKLQkgICAgfQotCSAgICAKLQkgIAlyZXR1cm4gZmVlZGJhY2tGaWd1cmU7Ci0JICB9Ci0KLQkgIC8qIFJldHVybiBhIFBvaW50TGlzdCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gYWRkIGEgZmVlZGJhY2sgZmlndXJlLiAgVGhlIGZlZWRiYWNrIGZpZ3VyZSB3aWxsIGJlIGEKLQkgICAqIFBvbHlsaW5lIGNvbXBvc2VkIG9mIHRoZSBQb2ludHMgaW4gdGhlIFBvaW50TGlzdAotCSAgICovCi0JICBwcml2YXRlIFBvaW50TGlzdCBkcmF3TGluZXMoUG9seWxpbmUgcG9seUxpbmUpIHsKLQkgICAgUG9pbnRMaXN0IHBvaW50TGlzdCA9IG5ldyBQb2ludExpc3QoKTsgCi0JICAgIAotCSAgICBpZiAobGVmdFNpYmxpbmdFZGl0UGFydCAhPSBudWxsKSB7Ci0JICAgIAlSZWN0YW5nbGUgbGVmdFJlY3RhbmdsZSA9IGxlZnRTaWJsaW5nRWRpdFBhcnQuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCk7Ci0JCSAgIAlpbnQgeENvb3JkID0gbGVmdFJlY3RhbmdsZS54OwotCQkgIAlpbnQgeUNvb3JkID0gbGVmdFJlY3RhbmdsZS55OwotCQkgICAJaW50IGhlaWdodCA9IGxlZnRSZWN0YW5nbGUuaGVpZ2h0OwotCQkgICAJaW50IHdpZHRoID0gbGVmdFJlY3RhbmdsZS53aWR0aDsKLQotCQkgICAJLy8gRHJhdyBsZWZ0IGVuZCBsaW5lCi0JCSAgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkLCB5Q29vcmQgKyBoZWlnaHQgKyAzLCB4Q29vcmQsIHlDb29yZCArIGhlaWdodCAtIDMpOwotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCwgeUNvb3JkICsgaGVpZ2h0IC0gMywgeENvb3JkLCB5Q29vcmQgKyBoZWlnaHQpOwotCQkgICAJCi0JCSAgIAkvLyBEcmF3IGhvcml6b250YWwgbGluZQotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCwgeUNvb3JkICsgaGVpZ2h0LCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkICsgaGVpZ2h0KTsKLQkJICAgCQotCQkgICAJLy8gRHJhdyByaWdodCBlbmQgbGluZQotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQgKyBoZWlnaHQsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQgKyBoZWlnaHQgLSAzKTsKLQkJICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQgKyBoZWlnaHQsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQgKyBoZWlnaHQgKyAzKTsgICAJCi0JICAgIH0KLQkgICAgZWxzZSBpZiAocmlnaHRTaWJsaW5nRWRpdFBhcnQgIT0gbnVsbCkgewotCSAgICAJUmVjdGFuZ2xlIHJpZ2h0UmVjdGFuZ2xlID0gcmlnaHRTaWJsaW5nRWRpdFBhcnQuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCk7Ci0JICAgIAlpbnQgeENvb3JkID0gcmlnaHRSZWN0YW5nbGUueDsKLQkgICAgCWludCB5Q29vcmQgPSByaWdodFJlY3RhbmdsZS55OwotCSAgIAkJaW50IHdpZHRoID0gcmlnaHRSZWN0YW5nbGUud2lkdGg7CQotCi0JICAgCQkvLyBEcmF3IGxlZnQgZW5kIGxpbmUKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQsIHlDb29yZCArIDMsIHhDb29yZCwgeUNvb3JkIC0gMyk7Ci0JCSAgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkLCB5Q29vcmQgLSAzLCB4Q29vcmQsIHlDb29yZCk7Ci0JCSAgIAkKLQkJICAgCS8vIERyYXcgaG9yaXpvbnRhbCBsaW5lCi0JCSAgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkLCB5Q29vcmQsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQpOwotCQkgICAJCi0JCSAgIAkvLyBEcmF3IHJpZ2h0IGVuZCBsaW5lCi0JCSAgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkICsgd2lkdGgsIHlDb29yZCwgeENvb3JkICsgd2lkdGgsIHlDb29yZCAtIDMpOwotCQkgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkICsgd2lkdGgsIHlDb29yZCwgeENvb3JkICsgd2lkdGgsIHlDb29yZCArIDMpOyAgIAotCSAgICB9Ci0KLQkgICAgcmV0dXJuIHBvaW50TGlzdDsKLQkgIH0gICAgICAgICAgICAgICAgICAgIAotCSAgCi0JICBwcm90ZWN0ZWQgUG9seWxpbmUgYWRkTGluZVRvUG9seWxpbmUoUG9seWxpbmUgcG9seWxpbmUsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikgewotCQlwb2x5bGluZS5hZGRQb2ludChuZXcgUG9pbnQoeDEsIHkxKSk7Ci0JCXBvbHlsaW5lLmFkZFBvaW50KG5ldyBQb2ludCh4MiwgeTIpKTsKLQotCQlyZXR1cm4gcG9seWxpbmU7Ci0JICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAKLQkgIC8qCi0JICAgKiBQcmUtY29uZGl0aW9uOiBUaGUgTGlzdCBzaWJsaW5ncyBzaG91bGQgYmUgc29ydGVkIGJ5IGl0J3MgeS1jb29yZGluYXRlIAotCSAgICovCi0JICBwcml2YXRlIEdyYXBoaWNhbEVkaXRQYXJ0IGdldFZlcnRpY2FsUmlnaHRTaWJsaW5nKExpc3Qgc2libGluZ3MsIEdyYXBoaWNhbEVkaXRQYXJ0IG1vdmluZ0VkaXRQYXJ0LCBQb2ludCBwb2ludGVyTG9jYXRpb24pIHsKLQkgIAlHcmFwaGljYWxFZGl0UGFydCByaWdodFNpYmxpbmcgPSBudWxsOwotCSAgCWludCBwb2ludGVyWUxvY2F0aW9uID0gcG9pbnRlckxvY2F0aW9uLnk7Ci0KLQkgIAlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2libGluZ3Muc2l6ZSgpOyBpbmRleCsrKSB7Ci0JICAJCUdyYXBoaWNhbEVkaXRQYXJ0IHNpYmxpbmcgPSAoR3JhcGhpY2FsRWRpdFBhcnQpIHNpYmxpbmdzLmdldChpbmRleCk7Ci0JICAJCWludCBzaWJsaW5nWUxvY2F0aW9uID0gc2libGluZy5nZXRGaWd1cmUoKS5nZXRCb3VuZHMoKS5nZXRDZW50ZXIoKS55OwotCi0JICAJCWlmIChzaWJsaW5nWUxvY2F0aW9uID4gcG9pbnRlcllMb2NhdGlvbikgewotCSAgCQkJcmlnaHRTaWJsaW5nID0gc2libGluZzsKLQkgIAkJCWJyZWFrOwotCSAgCQl9Ci0JICAJfQotCSAgCQotCSAgCXJldHVybiByaWdodFNpYmxpbmc7Ci0JICB9Ci0KLQkgIC8qCi0JICAgKiBQcmUtY29uZGl0aW9uOiBUaGUgTGlzdCBzaWJsaW5ncyBzaG91bGQgYmUgc29ydGVkIGJ5IGl0J3MgeS1jb29yZGluYXRlIAotCSAgICovCi0JICBwcml2YXRlIEdyYXBoaWNhbEVkaXRQYXJ0IGdldFZlcnRpY2FsTGVmdFNpYmxpbmcoTGlzdCBzaWJsaW5ncywgR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nRWRpdFBhcnQsIFBvaW50IHBvaW50ZXJMb2NhdGlvbikgewotCSAgCUdyYXBoaWNhbEVkaXRQYXJ0IGxlZnRTaWJsaW5nID0gbnVsbDsKLQkgIAlpbnQgcG9pbnRlcllMb2NhdGlvbiA9IHBvaW50ZXJMb2NhdGlvbi55OwotCi0JICAJaW50IGluZGV4OwotCSAgCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNpYmxpbmdzLnNpemUoKTsgaW5kZXgrKykgewotCSAgCQlHcmFwaGljYWxFZGl0UGFydCBzaWJsaW5nID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBzaWJsaW5ncy5nZXQoaW5kZXgpOwotCSAgCQlpbnQgc2libGluZ1lMb2NhdGlvbiA9IHNpYmxpbmcuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCkuZ2V0Q2VudGVyKCkueTsKLQkgIAkgIAkKLQkgIAkJaWYgKHNpYmxpbmdZTG9jYXRpb24gPiBwb2ludGVyWUxvY2F0aW9uKSB7Ci0JICAJCQlpZiAoaW5kZXggPiAwKSB7Ci0JICAJCQkJbGVmdFNpYmxpbmcgPSAoR3JhcGhpY2FsRWRpdFBhcnQpIHNpYmxpbmdzLmdldChpbmRleCAtIDEpOwotCSAgCQkJfQotCi0JICAJCQlicmVhazsKLQkgIAkJfQotCSAgCX0KLQotCSAgCWlmIChpbmRleCA9PSBzaWJsaW5ncy5zaXplKCkpIHsKLQkgIAkJbGVmdFNpYmxpbmcgPSAoR3JhcGhpY2FsRWRpdFBhcnQpIHNpYmxpbmdzLmdldChpbmRleCAtIDEpOwotCSAgCX0KLQotCSAgCXJldHVybiBsZWZ0U2libGluZzsKLQkgIH0KLQkgIAotCSAgcHJvdGVjdGVkIEVkaXRQYXJ0IGdldFBhcmVudEVkaXRQYXJ0KEVkaXRQYXJ0IHRhcmdldCkKLQkgIHsKLQkgIAlyZXR1cm4gdGFyZ2V0LmdldFBhcmVudCgpOwotCSAgfQotCi0JICBwcml2YXRlIGNsYXNzIFZlcnRpY2FsRWRpdFBhcnRDb21wYXJhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvciB7Ci0JICAJCi0JICAJcHVibGljIFZlcnRpY2FsRWRpdFBhcnRDb21wYXJhdG9yKCkgewotCSAgCX0KLQkgIAkKLQkgIAlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IHBhcnQxLCBPYmplY3QgcGFydDIpIHsKLQkgIAkJaW50IGNvbXBhcmVWYWx1ZSA9IDA7Ci0KLQkgIAkJaWYgKHBhcnQxIGluc3RhbmNlb2YgR3JhcGhpY2FsRWRpdFBhcnQgJiYgcGFydDIgaW5zdGFuY2VvZiBHcmFwaGljYWxFZGl0UGFydCkgewotCSAgCQkJR3JhcGhpY2FsRWRpdFBhcnQgZWRpdFBhcnQxID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBwYXJ0MTsKLQkgIAkJCUdyYXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0MiA9IChHcmFwaGljYWxFZGl0UGFydCkgcGFydDI7Ci0JICAJCQkKLQkgIAkJCWludCBlZGl0UGFydDFZID0gZWRpdFBhcnQxLmdldEZpZ3VyZSgpLmdldEJvdW5kcygpLmdldENlbnRlcigpLnk7Ci0JICAJCQlpbnQgZWRpdFBhcnQyWSA9IGVkaXRQYXJ0Mi5nZXRGaWd1cmUoKS5nZXRCb3VuZHMoKS5nZXRDZW50ZXIoKS55OwotCSAgCQkJCi0JICAJCQlJbnRlZ2VyIGludGVnZXJQYXJ0MSA9IG5ldyBJbnRlZ2VyKGVkaXRQYXJ0MVkpOwotCSAgCQkJSW50ZWdlciBpbnRlZ2VyUGFydDIgPSBuZXcgSW50ZWdlcihlZGl0UGFydDJZKTsKLQkgIAkJCQotCSAgCQkJY29tcGFyZVZhbHVlID0gaW50ZWdlclBhcnQxLmNvbXBhcmVUbyhpbnRlZ2VyUGFydDIpOwotCSAgCQl9Ci0KLQkgIAkJcmV0dXJuIGNvbXBhcmVWYWx1ZTsKLQkgIAl9Ci0JICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREVkaXROYW1lc3BhY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERWRpdE5hbWVzcGFjZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjViNzI3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERWRpdE5hbWVzcGFjZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuRWRpdE5hbWVzcGFjZXNEaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBBU0RFZGl0TmFtZXNwYWNlc0FjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREVkaXROYW1lc3BhY2VzQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKLQkKLQlwdWJsaWMgQVNERWRpdE5hbWVzcGFjZXNBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCwgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCVN0cmluZyB0ZXh0ID0gTWVzc2FnZXMuX1VJX0VESVRfTkFNRVNQQUNFUzsgLy8kTk9OLU5MUy0xJAotCQlzZXRUZXh0KHRleHQpOwotCQkKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCU9iamVjdCBvID0gZGVzY3JpcHRpb247Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkvLyBUT0RPOiBUaGUgY29kZSBiZWxvdyBpcyBub3QgZ2VuZXJpYy4gIFdlIG5lZWQgdG8gcmV2aXNpdCB0aGlzIHRvIGVuc3VyZSBpdCBpcwotCQkJLy8gZ2VuZXJpYy4gIElEZXNjcmlwdGlvbiBuZWVkcyBhIGdldE5hbWVzcGFjZXNJbmZvKCkgYW5kIGdldEVkaXROYW1lc3BhY2VzQ29tbWFuZCgpLi4uCi0JCQlJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBvOwotCQkJVzExRGVzY3JpcHRpb24gdzExRGVzY3JpcHRpb24gPSAoVzExRGVzY3JpcHRpb24pIG87Ci0JCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgdzExRGVzY3JpcHRpb24uZ2V0VGFyZ2V0KCk7Ci0JCQkKLQkJCUlQYXRoIHBhdGggPSBuZXcgUGF0aChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLQkJCUxpc3QgbmFtZXNwYWNlSW5mb0xpc3QgPSB3MTFEZXNjcmlwdGlvbi5nZXROYW1lc3BhY2VzSW5mbygpOwotCQkJU3RyaW5nIHRucyA9IGRlc2NyaXB0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJRWRpdE5hbWVzcGFjZXNEaWFsb2cgZGlhbG9nID0gbmV3IEVkaXROYW1lc3BhY2VzRGlhbG9nKFdTRExFZGl0b3JQbHVnaW4uZ2V0U2hlbGwoKSwgcGF0aCwgTWVzc2FnZXMuX1VJX0VESVRfTkFNRVNQQUNFU19ESUFMT0dfVElUTEUsIHRucywgbmFtZXNwYWNlSW5mb0xpc3QpOyAvLyROT04tTkxTLTEkCi0JCQlpbnQgcmMgPSBkaWFsb2cuY3JlYXRlQW5kT3BlbigpOwotCQkJaWYgKHJjID09IElEaWFsb2dDb25zdGFudHMuT0tfSUQpIHsKLQkJCQlMaXN0IG5ld0luZm9MaXN0ID0gZGlhbG9nLmdldE5hbWVzcGFjZUluZm9MaXN0KCk7Ci0JCQkJVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kIGNvbW1hbmQgPSAoVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kKSB3MTFEZXNjcmlwdGlvbi5nZXRFZGl0TmFtZXNwYWNlc0NvbW1hbmQoKTsKLQkJCQljb21tYW5kLnNldE5hbWVzcGFjZXNJbmZvKG5ld0luZm9MaXN0KTsKLQkJCQljb21tYW5kLnNldFRhcmdldE5hbWVzcGFjZShkaWFsb2cuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCQkJCUNvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJICAgIH0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhMzU5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci0KLXB1YmxpYyBjbGFzcyBBU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb25uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfR0VORVJBVEVfQklORElOR19DT05URU5UKTsgICAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9pbnB1dF9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0gCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSUJpbmRpbmcpIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElCaW5kaW5nKSBvKS5nZXRHZW5lcmF0ZUJpbmRpbmdDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJfQotCQkJCi0JCQlwZXJmb3JtU2VsZWN0aW9uKG8pOwotCQl9ICAKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNET3BlblNjaGVtYUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRE9wZW5TY2hlbWFBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk1MWUxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNET3BlblNjaGVtYUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QudXRpbC5JT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyOwotCi1wdWJsaWMgY2xhc3MgQVNET3BlblNjaGVtYUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRE9wZW5TY2hlbWFBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RPcGVuU2NoZW1hQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX09QRU5fU0NIRU1BKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9iaW5kaW5nX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0KLQkJCWlmIChvIGluc3RhbmNlb2YgSVR5cGUpIHsKLQkJCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQlPYmplY3QgaGVscGVyID0gZWRpdG9yLmdldEFkYXB0ZXIoSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlci5jbGFzcyk7Ci0JCQkJaWYgKGhlbHBlciBpbnN0YW5jZW9mIElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIpIHsKLQkJCQkJKChJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKSBoZWxwZXIpLnNldE1vZGVsKG8pOwotCQkJCQkoKElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIpIGhlbHBlcikub3BlbkV4dGVybmFsRWRpdG9yKCk7Ci0JCQkJfQotCQkJfQotCQl9ICAKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1Nzg1MjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBBU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIElFbmRQb2ludCBlbmRQb2ludDsKLQkKLQlwdWJsaWMgQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0VYSVNUSU5HX0JJTkRJTkcpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9zZXJ2aWNlX29iai5naWYiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldElFbmRQb2ludChJRW5kUG9pbnQgZW5kUG9pbnQpIHsKLQkJdGhpcy5lbmRQb2ludCA9IGVuZFBvaW50OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7CQkKLQkJaWYgKGVuZFBvaW50ID09IG51bGwpIHsKLQkJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBJRW5kUG9pbnQpIHsKLQkJCQkJZW5kUG9pbnQgPSAoSUVuZFBvaW50KSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcihlbmRQb2ludCk7Ci0JCWlmIChlbmRQb2ludCAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoZW5kUG9pbnQsIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQllbmRQb2ludCA9IG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYwNWNhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBBU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJQmluZGluZyBiaW5kaW5nOwotCQotCXB1YmxpYyBBU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9FWElTVElOR19QT1JUVFlQRSk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3NlcnZpY2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SUJpbmRpbmcoSUJpbmRpbmcgYmluZGluZykgewotCQl0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7CQkKLQkJaWYgKGJpbmRpbmcgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElCaW5kaW5nKSB7Ci0JCQkJCWJpbmRpbmcgPSAoSUJpbmRpbmcpIG87Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0SW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIoYmluZGluZyk7Ci0gICAgICAgIGlmIChiaW5kaW5nICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShiaW5kaW5nLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJYmluZGluZyA9IG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldE5ld0JpbmRpbmdBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXROZXdCaW5kaW5nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZGE5OGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldE5ld0JpbmRpbmdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgQVNEU2V0TmV3QmluZGluZ0FjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRFNldE5ld0JpbmRpbmdBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIElFbmRQb2ludCBlbmRQb2ludDsKLQkKLQlwdWJsaWMgQVNEU2V0TmV3QmluZGluZ0FjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9ORVdfQklORElORyk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3NlcnZpY2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SUVuZFBvaW50KElFbmRQb2ludCBlbmRQb2ludCkgewotCQl0aGlzLmVuZFBvaW50ID0gZW5kUG9pbnQ7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsJCQotCQlpZiAoZW5kUG9pbnQgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElFbmRQb2ludCkgewotCQkJCQllbmRQb2ludCA9IChJRW5kUG9pbnQpIG87Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0QmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKGVuZFBvaW50KTsKLSAgICAgICAgaWYgKGVuZFBvaW50ICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShlbmRQb2ludCwgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWVuZFBvaW50ID0gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYWVjNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldE5ld0ludGVyZmFjZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIEFTRFNldE5ld0ludGVyZmFjZUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRFNldE5ld0ludGVyZmFjZUFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgSUJpbmRpbmcgYmluZGluZzsKLQkKLQlwdWJsaWMgQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX05FV19QT1JUVFlQRSk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3NlcnZpY2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SUJpbmRpbmcoSUJpbmRpbmcgYmluZGluZykgewotCQl0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7CQkKLQkJaWYgKGJpbmRpbmcgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElCaW5kaW5nKSB7Ci0JCQkJCWJpbmRpbmcgPSAoSUJpbmRpbmcpIG87Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0SW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIoYmluZGluZyk7Ci0JCWlmIChiaW5kaW5nICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShiaW5kaW5nLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJYmluZGluZyA9IG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0Jhc2VTZWxlY3Rpb25BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9CYXNlU2VsZWN0aW9uQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YmMxYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0Jhc2VTZWxlY3Rpb25BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLlNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkucGFydHMuQWJzdHJhY3RFZGl0UGFydFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VTZWxlY3Rpb25BY3Rpb24gZXh0ZW5kcyBTZWxlY3Rpb25BY3Rpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUVOVV9TVEFSVF9JRCA9ICJTVUJNRU5VX1NUQVJUX0lEOiAiOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1FTlVfRU5EX0lEID0gIlNVQk1FTlVfRU5EX0lEOiAiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyOwotICAKLSAgcHVibGljIEJhc2VTZWxlY3Rpb25BY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkKLSAgewotICAgIHN1cGVyKHBhcnQpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuU2VsZWN0aW9uQWN0aW9uI2dldFNlbGVjdGlvbigpCi0gICAqLwotICBwcm90ZWN0ZWQgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKQotICB7Ci0gICAgLy8gYWx3YXlzIGdldCBzZWxlY3Rpb24gZnJvbSBzZWxlY3Rpb24gcHJvdmlkZXIgZmlyc3QKLSAgICBpZiAocHJvdmlkZXIhPW51bGwpCi0gICAgICByZXR1cm4gcHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgCi0gICAgcmV0dXJuIHN1cGVyLmdldFNlbGVjdGlvbigpOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5TZWxlY3Rpb25BY3Rpb24jc2V0U2VsZWN0aW9uUHJvdmlkZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Qcm92aWRlcihJU2VsZWN0aW9uUHJvdmlkZXIgcHJvdmlkZXIpCi0gIHsKLSAgICBzdXBlci5zZXRTZWxlY3Rpb25Qcm92aWRlcihwcm92aWRlcik7Ci0gICAgdGhpcy5wcm92aWRlciA9IHByb3ZpZGVyOwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRTZWxlY3RlZE9iamVjdHMoKQotICB7Ci0JICBMaXN0IHByb2Nlc3NlZE9iamVjdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBMaXN0IG9iamVjdHMgPSBzdXBlci5nZXRTZWxlY3RlZE9iamVjdHMoKTsKLQkgIEl0ZXJhdG9yIGl0ID0gb2JqZWN0cy5pdGVyYXRvcigpOwotCSAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkgIE9iamVjdCBpdGVtID0gaXQubmV4dCgpOwotCQkgIGlmIChpdGVtIGluc3RhbmNlb2YgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pIHsKLQkJCSAgcHJvY2Vzc2VkT2JqZWN0cy5hZGQoKChBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikgaXRlbSkuZ2V0TW9kZWwoKSk7Ci0JCSAgfQotCQkgIGVsc2UgewotCQkJICBwcm9jZXNzZWRPYmplY3RzLmFkZChpdGVtKTsKLQkJICB9Ci0JICB9Ci0JICAKLQkgIHJldHVybiBwcm9jZXNzZWRPYmplY3RzOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBjYWxjdWxhdGVFbmFibGVkKCkgewotCSAgT2JqZWN0IHNlbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFNlbGVjdGlvbigpKS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkgIAotCSAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElBU0RPYmplY3QpIHsKLQkJICByZXR1cm4gICEoKElBU0RPYmplY3QpIHNlbGVjdGlvbikuaXNSZWFkT25seSgpOwotCSAgfQotCSAgCi0JICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgc2VsZWN0QW5kRGlyZWN0RWRpdChmaW5hbCBPYmplY3QgbykgewotCSAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7Ci0JCSAgcHVibGljIHZvaWQgcnVuKCkgewotCQkJICBpZiAobyBpbnN0YW5jZW9mIE5vdGlmaWVyKSB7Ci0JCQkJICBwZXJmb3JtU2VsZWN0aW9uKG8pOwotCQkJCSAgYWN0aXZhdGVEaXJlY3RFZGl0KCk7Ci0JCQkgIH0KLQkJICB9fTsKLQkJICBEaXNwbGF5LmdldEN1cnJlbnQoKS5hc3luY0V4ZWMocnVubmFibGUpOwotICB9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhY3RpdmF0ZURpcmVjdEVkaXQoKSB7Ci0JCUlXb3JrYmVuY2hQYXJ0IHBhcnQgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCk7Ci0JCWlmICghKHBhcnQgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkpIHsKLQkJCUlFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJT2JqZWN0IGdyYXBoaWNhbFZpZXdlciA9IGVkaXRvci5nZXRBZGFwdGVyKEdyYXBoaWNhbFZpZXdlci5jbGFzcyk7Ci0JCQlpZiAoZ3JhcGhpY2FsVmlld2VyIGluc3RhbmNlb2YgQWJzdHJhY3RFZGl0UGFydFZpZXdlcikgewotCQkJCUFic3RyYWN0RWRpdFBhcnRWaWV3ZXIgdmlld2VyID0gKEFic3RyYWN0RWRpdFBhcnRWaWV3ZXIpIGdyYXBoaWNhbFZpZXdlcjsKLQkJCQlPYmplY3Qgb2JqID0gdmlld2VyLmdldFNlbGVjdGVkRWRpdFBhcnRzKCkuZ2V0KDApOwotCQkJCS8vIHRvZG86IHJtYWg6IHdlIG5lZWQgdG8gY29tcGxldGVseSByZW1vdmUgYWxsIGltcGxlbWVudGF0aW9ucyBvZiBkb0RpcmVjdEVkaXQoKS4KLQkJCQkvLyBVc2UgcGVyZm9ybVJlcXVlc3QoKSBpbnN0ZWFkLgotLy8JCQkJZG9EaXJlY3RFZGl0KChFZGl0UGFydCkgb2JqKTsKLQkJCQlSZXF1ZXN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCgpOwotCQkJCXJlcXVlc3Quc2V0VHlwZShSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCk7Ci0JCQkJKChFZGl0UGFydCkgb2JqKS5wZXJmb3JtUmVxdWVzdChyZXF1ZXN0KTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBkb0RpcmVjdEVkaXQoRWRpdFBhcnQgZXApIHsKLQkJUmVxdWVzdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoKTsKLQkJcmVxdWVzdC5zZXRUeXBlKFJlcXVlc3RDb25zdGFudHMuUkVRX0RJUkVDVF9FRElUKTsKLQkJZXAucGVyZm9ybVJlcXVlc3QocmVxdWVzdCk7Ci0JfQotCQotICAgIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1TZWxlY3Rpb24oT2JqZWN0IG9iamVjdCkgewotICAgIAlPYmplY3QgYWRhcHRlZCA9IG51bGw7Ci0gICAgCQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgTm90aWZpZXIpIHsKLQkJCU5vdGlmaWVyIGVsZW1lbnQgPSAoTm90aWZpZXIpIG9iamVjdDsKLQkJCS8vIFRPRE86IFdlIHNob3VsZG4ndCBrbm93IGFib3V0IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlciBoZXJlLi4uLgotCQkJYWRhcHRlZCA9IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQpOwkJCQotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElBU0RPYmplY3QpIHsKLQkJCWFkYXB0ZWQgPSBvYmplY3Q7Ci0JCX0KLQotCQlpZiAoYWRhcHRlZCAhPSBudWxsKSB7Ci0JICAgIAl0cnkgewotCQkgICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkgICAgICAgIGlmIChlZGl0b3IgIT0gbnVsbCAmJiBlZGl0b3IuZ2V0QWRhcHRlcihJU2VsZWN0aW9uUHJvdmlkZXIuY2xhc3MpICE9IG51bGwpIHsKLQkJICAgICAgICAJSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yLmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLQkJICAgICAgICAJaWYgKHByb3ZpZGVyICE9IG51bGwpIHsKLQkJICAgICAgICAJCXByb3ZpZGVyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihhZGFwdGVkKSk7Ci0JCSAgICAgICAgCX0KLQkJICAgICAgICB9Ci0JICAgIAl9Ci0JICAgIAljYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JCX0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvSUFTREFkZENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9JQVNEQWRkQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTJlZTBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9JQVNEQWRkQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1wdWJsaWMgaW50ZXJmYWNlIElBU0RBZGRDb21tYW5kIHsKLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9TaG93UHJvcGVydGllc1ZpZXdBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9TaG93UHJvcGVydGllc1ZpZXdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY0NDdhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci0KLQotLyoqCi0gKiBTaG93IHRoZSBwcm9wZXJ0aWVzIHZpZXcgaW4gdGhlIGN1cnJlbnQgcGVyc3BlY3RpdmUuCi0gKi8KLXB1YmxpYyBjbGFzcyBTaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRJRVNfVklFV19JRCA9ICJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0IjsgLy8kTk9OLU5MUy0xJAotCQotICBwcm90ZWN0ZWQgc3RhdGljIEltYWdlRGVzY3JpcHRvciBlbmFibGVkSW1hZ2UsIGRpc2FibGVkSW1hZ2U7Ci0KLQlwdWJsaWMgU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0gIHsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX1NIT1dfUFJPUEVSVElFUyk7Ci0JCXNldFRvb2xUaXBUZXh0KGdldFRleHQoKSk7Ci0gICAgc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKCJpY29ucy9lbGNsMTYvc2hvd3Byb3BlcnRpZXNfb2JqLmdpZiIpICk7IC8vJE5PTi1OTFMtMSQKLQkgIHNldERpc2FibGVkSW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKCJpY29ucy9kbGNsMTYvc2hvd3Byb3BlcnRpZXNfb2JqLmdpZiIpICk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBjYWxjdWxhdGVFbmFibGVkKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZ2V0V29ya2JlbmNoUGFydCgpLmdldFNpdGUoKS5nZXRQYWdlKCkuc2hvd1ZpZXcoUFJPUEVSVElFU19WSUVXX0lEKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIHBpZSkKLSAgICB7Ci0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWRhcHRlcmZhY3RvcnkvZXh0ZW5zaW9uL0FkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FkYXB0ZXJmYWN0b3J5L2V4dGVuc2lvbi9BZGFwdGVyRmFjdG9yeUV4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjkxOGYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWRhcHRlcmZhY3RvcnkvZXh0ZW5zaW9uL0FkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hZGFwdGVyZmFjdG9yeS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIEFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uIHsKLQlwcml2YXRlIFN0cmluZyBuYW1lc3BhY2U7Ci0JcHJpdmF0ZSBTdHJpbmcgYWRhcHRlckZhY3RvcnlDbGFzc05hbWU7Ci0JcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcjsKLQkKLQlwdWJsaWMgQWRhcHRlckZhY3RvcnlFeHRlbnNpb24oU3RyaW5nIG5hbWVzcGFjZSkgewotCQl0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0QWRhcHRlckZhY3RvcnlDbGFzc05hbWUoU3RyaW5nIGZhY3RvcnlDbGFzc05hbWUpIHsKLQkJYWRhcHRlckZhY3RvcnlDbGFzc05hbWUgPSBmYWN0b3J5Q2xhc3NOYW1lOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRDbGFzc0xvYWRlcihDbGFzc0xvYWRlciBjbGFzc0xvYWRlcil7Ci0JICAgIHRoaXMuY2xhc3NMb2FkZXIgPSBjbGFzc0xvYWRlcjsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKSB7Ci0JCXJldHVybiBuYW1lc3BhY2U7Ci0JfQotCQotCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKLQkJQWRhcHRlckZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCWlmIChhZGFwdGVyRmFjdG9yeUNsYXNzTmFtZSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCUNsYXNzIHRoZUNsYXNzID0gY2xhc3NMb2FkZXIgIT0gbnVsbCA/IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyhhZGFwdGVyRmFjdG9yeUNsYXNzTmFtZSkgOiBDbGFzcy5mb3JOYW1lKGFkYXB0ZXJGYWN0b3J5Q2xhc3NOYW1lKTsKLQkJCQlmYWN0b3J5ID0gKEFkYXB0ZXJGYWN0b3J5KSB0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZmFjdG9yeTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FkYXB0ZXJmYWN0b3J5L2V4dGVuc2lvbi9BZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FkYXB0ZXJmYWN0b3J5L2V4dGVuc2lvbi9BZGFwdGVyRmFjdG9yeUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0Yjk5YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hZGFwdGVyZmFjdG9yeS9leHRlbnNpb24vQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hZGFwdGVyZmFjdG9yeS5leHRlbnNpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotCi1wdWJsaWMgY2xhc3MgQWRhcHRlckZhY3RvcnlFeHRlbnNpb25SZWdpc3RyeSB7Ci0JcHJvdGVjdGVkIExpc3QgcmVnaXN0ZXJlZEFkYXB0ZXJGYWN0b3JpZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgdm9pZCBhZGQoQWRhcHRlckZhY3RvcnlFeHRlbnNpb24gZmFjdG9yeSkgewotCQlyZWdpc3RlcmVkQWRhcHRlckZhY3Rvcmllcy5hZGQoZmFjdG9yeSk7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldEFkYXB0ZXJGYWN0b3J5TmFtZXNwYWNlcygpIHsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSByZWdpc3RlcmVkQWRhcHRlckZhY3Rvcmllcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFkYXB0ZXJGYWN0b3J5RXh0ZW5zaW9uIGV4dGVuc2lvbiA9IChBZGFwdGVyRmFjdG9yeUV4dGVuc2lvbikgaS5uZXh0KCk7Ci0JCQlsaXN0LmFkZChleHRlbnNpb24uZ2V0TmFtZXNwYWNlKCkpOwotCQl9Ci0JCXJldHVybiBsaXN0OwotCX0KLQkKLQlwdWJsaWMgQWRhcHRlckZhY3RvcnlFeHRlbnNpb24gZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpIHsKLQkJQWRhcHRlckZhY3RvcnlFeHRlbnNpb24gcmVzdWx0ID0gbnVsbDsKLQkJaWYgKG5hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSByZWdpc3RlcmVkQWRhcHRlckZhY3Rvcmllcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlBZGFwdGVyRmFjdG9yeUV4dGVuc2lvbiBleHRlbnNpb24gPSAoQWRhcHRlckZhY3RvcnlFeHRlbnNpb24pIGkubmV4dCgpOwotCQkJCWlmIChuYW1lc3BhY2UuZXF1YWxzKGV4dGVuc2lvbi5nZXROYW1lc3BhY2UoKSkpIHsKLQkJCQkJcmVzdWx0ID0gZXh0ZW5zaW9uOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2NvbnRlbnRnZW5lcmF0b3IvdWkvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9jb250ZW50Z2VuZXJhdG9yL3VpL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI1ODA0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2NvbnRlbnRnZW5lcmF0b3IvdWkvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlOwotCi1wdWJsaWMgY2xhc3MgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIHsKLQlwcml2YXRlIFN0cmluZyBuYW1lOwotCXByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZTsKLQlwcml2YXRlIFN0cmluZyBsYWJlbDsKLQlwcml2YXRlIFN0cmluZyBiaW5kaW5nT3B0aW9uc1BhZ2VDbGFzc05hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgcG9ydE9wdGlvbnNQYWdlQ2xhc3NOYW1lOwotCQotCXByaXZhdGUgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXI7Ci0JCi0JcHVibGljIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWVzcGFjZSkgewotCQl0aGlzLm5hbWUgPSBuYW1lOwotCQl0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRCaW5kaW5nT3B0aW9uc1BhZ2VDbGFzc05hbWUoU3RyaW5nIGJpbmRpbmdDbGFzc05hbWUpIHsKLQkJYmluZGluZ09wdGlvbnNQYWdlQ2xhc3NOYW1lID0gYmluZGluZ0NsYXNzTmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQb3J0T3B0aW9uc1BhZ2VDbGFzc05hbWUoU3RyaW5nIHBvcnRDbGFzc05hbWUpIHsKLQkJcG9ydE9wdGlvbnNQYWdlQ2xhc3NOYW1lID0gcG9ydENsYXNzTmFtZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0Q2xhc3NMb2FkZXIoQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpewotCSAgICB0aGlzLmNsYXNzTG9hZGVyID0gY2xhc3NMb2FkZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkgewotCQlyZXR1cm4gbmFtZXNwYWNlOwotCX0KLQkKLQlwdWJsaWMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGdldEJpbmRpbmdDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoKSB7Ci0JCUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSByZXN1bHQgPSBudWxsOwotCQlpZiAoYmluZGluZ09wdGlvbnNQYWdlQ2xhc3NOYW1lICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJQ2xhc3MgdGhlQ2xhc3MgPSBjbGFzc0xvYWRlciAhPSBudWxsID8gY2xhc3NMb2FkZXIubG9hZENsYXNzKGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzTmFtZSkgOiBDbGFzcy5mb3JOYW1lKGJpbmRpbmdPcHRpb25zUGFnZUNsYXNzTmFtZSk7Ci0JCQkJcmVzdWx0ID0gKENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSkgdGhlQ2xhc3MubmV3SW5zdGFuY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JCi0JcHVibGljIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBnZXRQb3J0Q29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlKCkgewotCQlDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgcmVzdWx0ID0gbnVsbDsKLQkJaWYgKHBvcnRPcHRpb25zUGFnZUNsYXNzTmFtZSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCUNsYXNzIHRoZUNsYXNzID0gY2xhc3NMb2FkZXIgIT0gbnVsbCA/IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyhwb3J0T3B0aW9uc1BhZ2VDbGFzc05hbWUpIDogQ2xhc3MuZm9yTmFtZShwb3J0T3B0aW9uc1BhZ2VDbGFzc05hbWUpOwotCQkJCXJlc3VsdCA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKSB7Ci0JICByZXR1cm4gbGFiZWw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldExhYmVsKFN0cmluZyBsYWJlbCkgewotCSAgdGhpcy5sYWJlbCA9IGxhYmVsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2NvbnRlbnRnZW5lcmF0b3IvdWkvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2NvbnRlbnRnZW5lcmF0b3IvdWkvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiODUzZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9jb250ZW50Z2VuZXJhdG9yL3VpL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgY2xhc3MgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uUmVnaXN0cnkgewotCXByb3RlY3RlZCBMaXN0IHJlZ2lzdGVyZWRDb250ZW50R2VuZXJhdG9yVUlMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0JcHVibGljIHZvaWQgYWRkKENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHRlbnNpb24pIHsKLQkJcmVnaXN0ZXJlZENvbnRlbnRHZW5lcmF0b3JVSUxpc3QuYWRkKGV4dGVuc2lvbik7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0QmluZGluZ0V4dGVuc2lvbk5hbWVzKCkgewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJlZ2lzdGVyZWRDb250ZW50R2VuZXJhdG9yVUlMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IChDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24pIGkubmV4dCgpOwotCQkJbGlzdC5hZGQoZXh0ZW5zaW9uLmdldE5hbWUoKSk7Ci0JCX0KLQkJcmV0dXJuIGxpc3Q7Ci0JfQotCi0JcHVibGljIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBnZXRFeHRlbnNpb25Gb3JOYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkgewotCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gcmVzdWx0ID0gbnVsbDsKLQkJaWYgKG5hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSByZWdpc3RlcmVkQ29udGVudEdlbmVyYXRvclVJTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ZW5zaW9uID0gKENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbikgaS5uZXh0KCk7Ci0JCQkJaWYgKG5hbWVzcGFjZS5lcXVhbHMoZXh0ZW5zaW9uLmdldE5hbWVzcGFjZSgpKSkgewotCQkJCQlyZXN1bHQgPSBleHRlbnNpb247Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBnZXRFeHRlbnNpb25Gb3JOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiByZXN1bHQgPSBudWxsOwotCQlpZiAobmFtZSAhPSBudWxsKSB7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSByZWdpc3RlcmVkQ29udGVudEdlbmVyYXRvclVJTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ZW5zaW9uID0gKENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbikgaS5uZXh0KCk7Ci0JCQkJaWYgKG5hbWUuZXF1YWxzKGV4dGVuc2lvbi5nZXROYW1lKCkpKSB7Ci0JCQkJCXJlc3VsdCA9IGV4dGVuc2lvbjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0gIAotICBwdWJsaWMgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGdldEV4dGVuc2lvbkZvckxhYmVsKFN0cmluZyBsYWJlbCkKLSAgewotICAgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiByZXN1bHQgPSBudWxsOwotICAgIGlmIChsYWJlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlZ2lzdGVyZWRDb250ZW50R2VuZXJhdG9yVUlMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IChDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24pIGkubmV4dCgpOwotICAgICAgICBpZiAobGFiZWwuZXF1YWxzKGV4dGVuc2lvbi5nZXRMYWJlbCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGV4dGVuc2lvbjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0Rlc2lnblZpZXdDb250ZXh0TWVudVByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9EZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTBkMjJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0Rlc2lnblZpZXdDb250ZXh0TWVudVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuQ29udGV4dE1lbnVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuQWN0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLlNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5Db2x1bW5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5JQWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkNvbnRleHRNZW51UGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkVkaXRvck1vZGVNYW5hZ2VyOwotCi0KLXB1YmxpYyBjbGFzcyBEZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlciBleHRlbmRzIENvbnRleHRNZW51UHJvdmlkZXIKLXsKLSAgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgR3JhcGhDb250ZXh0TWVudVByb3ZpZGVyLgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGlvblByb3ZpZGVyCi0gICAqIEBwYXJhbSBlZGl0b3IKLSAgICovCi0gIHB1YmxpYyBEZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlcihFZGl0UGFydFZpZXdlciB2aWV3ZXIsIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcikKLSAgewotICAgIHN1cGVyKHZpZXdlcik7Ci0gICAgdGhpcy5zZWxlY3Rpb25Qcm92aWRlciA9IHNlbGVjdGlvblByb3ZpZGVyOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgT2JqZWN0IGdldEFwcHJvcHJpYXRlU2VsZWN0aW9uKE9iamVjdCBzZWxlY3Rpb24pIHsKLQkgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBDb2x1bW5FZGl0UGFydCkgewotCQkgIHJldHVybiAoKEVkaXRQYXJ0KSBzZWxlY3Rpb24pLmdldFBhcmVudCgpOwotCSAgfQotCSAgCi0JICByZXR1cm4gc2VsZWN0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnVpLnBhcnRzLkNvbnRleHRNZW51UHJvdmlkZXIjYnVpbGRDb250ZXh0TWVudShvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyLAotICAgKiAgICAgIG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydFZpZXdlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGJ1aWxkQ29udGV4dE1lbnUoSU1lbnVNYW5hZ2VyIG1lbnUpCi0gIHsKLQlJTWVudU1hbmFnZXIgY3VycmVudE1lbnUgPSBtZW51OwotICAgIAotICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCUVkaXRvck1vZGVNYW5hZ2VyIG1hbmFnZXIgPSAoRWRpdG9yTW9kZU1hbmFnZXIpZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCUNvbnRleHRNZW51UGFydGljaXBhbnQgY29udGV4dE1lbnVQYXJ0aWNpcGFudCA9IG1hbmFnZXIgIT0gbnVsbCA/IG1hbmFnZXIuZ2V0Q3VycmVudE1vZGUoKS5nZXRDb250ZXh0TWVudVBhcnRpY2lwYW50KCkgOiBudWxsOwotCi0gICAgICAgIAotICAgIGN1cnJlbnRNZW51LmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7Ci0gICAgQWN0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRFZGl0b3JBY3Rpb25SZWdpc3RyeSgpOwotICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgCi0gICAgT2JqZWN0IGFjdGl2ZVBhcnQgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCk7Ci0gICAgCi0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIE9iamVjdCBzZWxlY3RlZE9iamVjdCA9ICgoU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIHNlbGVjdGVkT2JqZWN0ID0gZ2V0QXBwcm9wcmlhdGVTZWxlY3Rpb24oc2VsZWN0ZWRPYmplY3QpOwotCi0gICAgICBpZiAoY29udGV4dE1lbnVQYXJ0aWNpcGFudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBDb252ZXJ0IGVkaXRwYXJ0cyB0byBtb2RlbCBvYmplY3RzIGFzIHNlbGVjdGlvbnMKLSAgICAgICAgT2JqZWN0IG8gPSBzZWxlY3RlZE9iamVjdDsKLSAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBFZGl0UGFydCkKLSAgICAgICAgewotICAgICAgICAgIG8gPSAoKEVkaXRQYXJ0KXNlbGVjdGVkT2JqZWN0KS5nZXRNb2RlbCgpOwotICAgICAgICB9ICAgICAgICAgICAgICAgICAgIAotICAgICAgICBjb250ZXh0TWVudVBhcnRpY2lwYW50LmNvbnRyaWJ1dGVBY3Rpb25zKG8sIG1lbnUpOwotICAgICAgfSAgCi0gICAgICAKLSAgICAgIGlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIElBY3Rpb25Qcm92aWRlcikKLSAgICAgIHsKLSAgICAgICAgSUFjdGlvblByb3ZpZGVyIGFjdGlvblByb3ZpZGVyID0gKElBY3Rpb25Qcm92aWRlcikgc2VsZWN0ZWRPYmplY3Q7Ci0gICAgICAgIFN0cmluZ1tdIGFjdGlvbnMgPSBhY3Rpb25Qcm92aWRlci5nZXRBY3Rpb25zKGFjdGl2ZVBhcnQpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgaWQgPSBhY3Rpb25zW2ldOyAgICAgICAgICAKLSAgICAgICAgICBpZiAoY29udGV4dE1lbnVQYXJ0aWNpcGFudCA9PSBudWxsIHx8IGNvbnRleHRNZW51UGFydGljaXBhbnQuaXNBcHBsaWNhYmxlKHNlbGVjdGVkT2JqZWN0LCBpZCkpCi0gICAgICAgICAgeyAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpZC5zdGFydHNXaXRoKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCkpIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBpZC5zdWJzdHJpbmcoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lELmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgSU1lbnVNYW5hZ2VyIHN1Yk1lbnUgPSBuZXcgTWVudU1hbmFnZXIodGV4dCk7Ci0gICAgICAgICAgICAgIGN1cnJlbnRNZW51LmFkZChzdWJNZW51KTsKLSAgICAgICAgICAgICAgY3VycmVudE1lbnUgPSBzdWJNZW51OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoaWQuc3RhcnRzV2l0aChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKSkgewotICAgICAgICAgICAgICBjdXJyZW50TWVudSA9IGdldFBhcmVudE1lbnUobWVudSwgY3VycmVudE1lbnUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSUFjdGlvbiBhY3Rpb24gPSByZWdpc3RyeS5nZXRBY3Rpb24oaWQpOwotICAgICAgICAgICAgICBpZiAoYWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBhY3Rpb24uaXNFbmFibGVkKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudE1lbnUuYWRkKGFjdGlvbik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAKLSAgICAgICAgfSAgICAgCi0gICAgICAgIAotICAgICAgICBtZW51LmFkZChyZWdpc3RyeS5nZXRBY3Rpb24oU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uLklEKSk7Ci0gICAgICAgIG1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7ICAgICAgIAotICAgICAgICBtZW51LmFkZChuZXcgU2VwYXJhdG9yKCJyZWZhY3RvcmluZy1zbG90LXRlbXAiKSk7ICAvLyROT04tTkxTLTEkCi0gICAgICAgIG1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7ICAgICAgIAotICAgICAgICBtZW51LmFkZChuZXcgU2VwYXJhdG9yKCJzZWFyY2hfc2xvdF90ZW1wIikpOyAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgICAgICBtZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOwotICAgICAgfQotICAgIH0gICAgCi0gICAgbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBJTWVudU1hbmFnZXIgZ2V0UGFyZW50TWVudShJTWVudU1hbmFnZXIgcm9vdCwgSU1lbnVNYW5hZ2VyIGNoaWxkKSB7Ci0JICBJTWVudU1hbmFnZXIgcGFyZW50ID0gbnVsbDsKLQkgIAotCSAgSUNvbnRyaWJ1dGlvbkl0ZW1bXSBraWRzID0gcm9vdC5nZXRJdGVtcygpOwotCSAgaW50IGluZGV4ID0gMDsKLQkgIHdoaWxlIChpbmRleCA8IGtpZHMubGVuZ3RoICYmIHBhcmVudCA9PSBudWxsKSB7Ci0JCSAgSUNvbnRyaWJ1dGlvbkl0ZW0gaXRlbSA9IGtpZHNbaW5kZXhdOwotCQkgIGlmIChpdGVtLmVxdWFscyhjaGlsZCkpIHsKLQkJCSAgcGFyZW50ID0gcm9vdDsKLQkJICB9Ci0JCSAgZWxzZSB7Ci0JCQkgIGlmIChpdGVtIGluc3RhbmNlb2YgSU1lbnVNYW5hZ2VyKSB7Ci0JCQkJICBwYXJlbnQgPSBnZXRQYXJlbnRNZW51KChJTWVudU1hbmFnZXIpIGl0ZW0sIGNoaWxkKTsKLQkJCSAgfQotCQkgIH0KLQkJICBpbmRleCsrOwotCSAgfQotCSAgCi0JICByZXR1cm4gcGFyZW50OwotICB9Ci0gIAotICBwcm90ZWN0ZWQgQWN0aW9uUmVnaXN0cnkgZ2V0RWRpdG9yQWN0aW9uUmVnaXN0cnkoKQotICB7Ci0gICAgcmV0dXJuIChBY3Rpb25SZWdpc3RyeSkgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQWN0aW9uUmVnaXN0cnkuY2xhc3MpOwotICB9Ci0gIHByb3RlY3RlZCBDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrOwotCi0gIHByb3RlY3RlZCBDb21tYW5kU3RhY2sgZ2V0Q29tbWFuZFN0YWNrKCkKLSAgewotICAgIGlmIChjb21tYW5kU3RhY2sgPT0gbnVsbCkKLSAgICAgIGNvbW1hbmRTdGFjayA9IGdldFZpZXdlcigpLmdldEVkaXREb21haW4oKS5nZXRDb21tYW5kU3RhY2soKTsKLSAgICByZXR1cm4gY29tbWFuZFN0YWNrOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9EZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9EZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YmNjY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5wYXJ0cy5TY3JvbGxpbmdHcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5kZXNpZ24uQmFzZUdyYXBoaWNhbFZpZXdlcktleUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkNvbW1vblNlbGVjdGlvbk1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBEZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyIGV4dGVuZHMgU2Nyb2xsaW5nR3JhcGhpY2FsVmlld2VyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgotewotICBwcm90ZWN0ZWQgQVNEU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGludGVybmFsU2VsZWN0aW9uUHJvdmlkZXIgPSBuZXcgQVNEU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCk7Ci0vL1RPRE8gTWFrZSB0aGlzIGdlbmVyaWMKLQkgIHB1YmxpYyBEZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyKElFZGl0b3JQYXJ0IGVkaXRvciwgQ29tbW9uU2VsZWN0aW9uTWFuYWdlciBtYW5hZ2VyKQotCSAgewotCSAgICBzdXBlcigpOwotCi0JICAgIHNldENvbnRleHRNZW51KG5ldyBEZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlcih0aGlzLCB0aGlzKSk7Ci0JICAgIAotLy8JICAgIE1lbnVNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoIiNwb3B1cCIpOwotLy8JICAgIG1hbmFnZXIuYWRkTWVudUxpc3RlbmVyKG1lbnVQcm92aWRlcik7Ci0vLwkgICAgbWFuYWdlci5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7Ci0vLwkgICAgTWVudSBtZW51ID0gbWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShnZXRDb250cm9sKCkpOwotLy8JICAgIGdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOyAgCi0KLQkgICAgZWRpdG9yLmdldEVkaXRvclNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KCJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5wb3B1cC5ncmFwaCIsIGdldENvbnRleHRNZW51KCksIGludGVybmFsU2VsZWN0aW9uUHJvdmlkZXIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAotCi0JICAgIC8vIG1ha2UgdGhlIGludGVybmFsU2VsZWN0aW9uUHJvdmlkZXIgbGlzdGVuIHRvIGdyYXBoIHZpZXcgc2VsZWN0aW9uIGNoYW5nZXMKLQkgICAgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGludGVybmFsU2VsZWN0aW9uUHJvdmlkZXIpOyAgICAKLQkgICAgaW50ZXJuYWxTZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobWFuYWdlcik7Ci0JICAgIG1hbmFnZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOyAgCi0gICAgICAgIAotCSAgICBzZXRLZXlIYW5kbGVyKG5ldyBCYXNlR3JhcGhpY2FsVmlld2VyS2V5SGFuZGxlcih0aGlzKSk7Ci0JICB9Ci0JICAKLQkgIC8vIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzIGluIHRoZSBzZWxlY3Rpb24gbWFuYWdlcgotCSAgLy8gKGUuZy4gYSBzZWxlY3Rpb24gb2NjdXJlZCBmcm9tIGFub3RoZXIgdmlldykKLQkgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCSAgewotCSAgICBPYmplY3Qgc2VsZWN0ZWRPYmplY3QgPSAoKFN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpKS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkgICAgaWYgKGV2ZW50LmdldFNvdXJjZSgpICE9IGludGVybmFsU2VsZWN0aW9uUHJvdmlkZXIpCi0JICAgIHsKLQkgICAgCUVkaXRQYXJ0IGVkaXRQYXJ0ID0gZ2V0RWRpdFBhcnQoZ2V0Um9vdEVkaXRQYXJ0KCksIHNlbGVjdGVkT2JqZWN0KTsKLQkgICAgCWlmIChlZGl0UGFydCAhPSBudWxsKQotCSAgICAJewotCSAgICAJCXNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0UGFydCkpOwotCSAgICAJfSAgIAotCSAgICB9Ci0JICB9Ci0JICAKLQkgIHByb3RlY3RlZCBFZGl0UGFydCBnZXRFZGl0UGFydChFZGl0UGFydCBlZGl0UGFydCwgT2JqZWN0IG1vZGVsKSAgCi0JICB7ICAgICAgICAgICAgICAgICAgICAgCi0JICAgIEVkaXRQYXJ0IHJlc3VsdCA9IG51bGw7Ci0JICAgIGlmIChlZGl0UGFydC5nZXRNb2RlbCgpID09IG1vZGVsKQotCSAgICB7Ci0JICAgICAgcmVzdWx0ID0gZWRpdFBhcnQ7ICAgICAgCi0JICAgIH0gICAgICAgICAgICAgICAgICAgCi0JICAgIGVsc2UKLQkgICAgewotCSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGVkaXRQYXJ0LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLQkgICAgICB7Ci0JICAgICAgICByZXN1bHQgPSBnZXRFZGl0UGFydCgoRWRpdFBhcnQpaS5uZXh0KCksIG1vZGVsKTsKLQkgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgYnJlYWs7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIHJldHVybiByZXN1bHQ7Ci0JICB9Ci0JICAKLQotICAgICAgLyoKLQkgICAqIFdlIG5lZWQgdG8gY29udmVydCBmcm9tIGVkaXQgcGFydCBzZWxlY3Rpb25zIHRvIG1vZGVsIG9iamVjdCBzZWxlY3Rpb25zCi0JICAgKi8KLQkgIGNsYXNzIEFTRFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25Qcm92aWRlciwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgotCSAgewotCSAgICBwcm90ZWN0ZWQgTGlzdCBsaXN0ZW5lckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIHByb3RlY3RlZCBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKCk7Ci0KLQkgICAgcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpCi0JICAgIHsKLQkgICAgICBsaXN0ZW5lckxpc3QuYWRkKGxpc3RlbmVyKTsKLQkgICAgfQotCi0JICAgIHB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCSAgICB7Ci0JICAgICAgbGlzdGVuZXJMaXN0LnJlbW92ZShsaXN0ZW5lcik7Ci0JICAgIH0KLQotCSAgICBwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKQotCSAgICB7Ci0JICAgICAgcmV0dXJuIHNlbGVjdGlvbjsKLQkgICAgfQotCi0JICAgIHByb3RlY3RlZCB2b2lkIG5vdGlmeUxpc3RlbmVycyhTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JICAgIHsKLQkgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0ZW5lckxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCSAgICAgIHsKLQkgICAgICAgIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgPSAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcikgaS5uZXh0KCk7Ci0JICAgICAgICBsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKGV2ZW50KTsKLQkgICAgICB9Ci0JICAgIH0KLQotCSAgICBwdWJsaWMgU3RydWN0dXJlZFNlbGVjdGlvbiBjb252ZXJ0U2VsZWN0aW9uRnJvbUVkaXRQYXJ0VG9Nb2RlbChJU2VsZWN0aW9uIGVkaXRQYXJ0U2VsZWN0aW9uKQotCSAgICB7Ci0JICAgICAgTGlzdCBzZWxlY3RlZE1vZGVsT2JqZWN0TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgICBpZiAoZWRpdFBhcnRTZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLQkgICAgICB7Ci0JICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBlZGl0UGFydFNlbGVjdGlvbikuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCSAgICAgICAgewotCSAgICAgICAgICBPYmplY3Qgb2JqID0gaS5uZXh0KCk7Ci0JICAgICAgICAgIE9iamVjdCBtb2RlbCA9IG51bGw7Ci0JICAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBFZGl0UGFydCkKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIEVkaXRQYXJ0IGVkaXRQYXJ0ID0gKEVkaXRQYXJ0KSBvYmo7Ci0JICAgICAgICAgICAgbW9kZWwgPSBlZGl0UGFydC5nZXRNb2RlbCgpOyAgICAgICAgICAKLQkgICAgICAgICAgfQotCSAgICAgICAgICBpZiAobW9kZWwgIT0gbnVsbCkKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIHNlbGVjdGVkTW9kZWxPYmplY3RMaXN0LmFkZChtb2RlbCk7Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGVkTW9kZWxPYmplY3RMaXN0KTsKLQkgICAgfQotCi0JICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikKLQkgICAgewotCSAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCSAgICB9Ci0KLQkgICAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JICAgIHsKLQkgICAgICBJU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IGNvbnZlcnRTZWxlY3Rpb25Gcm9tRWRpdFBhcnRUb01vZGVsKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKLQkgICAgICB0aGlzLnNlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKLQkgICAgICBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgbmV3RXZlbnQgPSBuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIG5ld1NlbGVjdGlvbik7Ci0JICAgICAgbm90aWZ5TGlzdGVuZXJzKG5ld0V2ZW50KTsKLQkgICAgfQotCSAgfSAKLX0gICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRlOGI0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Gb250OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci0KLS8qKgotICogQSBjb2xsZWN0aW9uIG9mIGNvbG9yIGFuZCBmb250IHJlbGF0ZWQgY29uc3RhbnRzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cyAKLXsgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgZmluYWwgc3RhdGljIERpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciBncm91cEJvcmRlckNvbG9yICAgICAgICA9IG5ldyBDb2xvcihudWxsLCAxMTgsIDEzNCwgMTY0KTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciBncm91cEhlYWRlckNvbG9yICAgICAgICA9IG5ldyBDb2xvcihudWxsLCAyMzIsIDI0MCwgMjQ4KTsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIGVsZW1lbnRCb3JkZXJDb2xvciAgICAgID0gbmV3IENvbG9yKG51bGwsIDEyMCwgMTUyLCAxODQpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIGVsZW1lbnRCYWNrZ3JvdW5kQ29sb3IgID0gbmV3IENvbG9yKG51bGwsIDIzMiwgMjQwLCAyNDgpOyAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgZWxlbWVudExhYmVsQ29sb3IgICAgICAgPSBuZXcgQ29sb3IobnVsbCwgIDgwLCAxMDIsIDE0NCk7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgcmVhZE9ubHlCb3JkZXJDb2xvciAgICAgPSBuZXcgQ29sb3IobnVsbCwgMTY0LCAxNjQsIDE2NCk7IAotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHJlZCAgICAgICAgICAgICAgICAgICAgID0gbmV3IENvbG9yKG51bGwsIDI1NSwgICAwLCAgIDApOyAKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHRhYmxlT3BlcmF0aW9uSGVhZGluZ0NvbG9yID0gbmV3IENvbG9yKG51bGwsIDIyNCwgMjMzLCAyNDYpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHRhYmxlTWVzc2FnZUhlYWRpbmdDb2xvciA9IG5ldyBDb2xvcihudWxsLCAyMzAsIDI0MCwgMjQ1KTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciB0YWJsZUNlbGxTZWxlY3Rpb25Db2xvciA9IG5ldyBDb2xvcihudWxsLCAyMzgsIDIzMiwgMTcwKTsgLy9uZXcgQ29sb3IobnVsbCwgMjQwLCAyMzAsIDE0MCk7IC8vMSwgMTUsIDQyKTsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHJlYWRPbmx5VGFibGVPcGVyYXRpb25IZWFkaW5nQ29sb3IgPSBuZXcgQ29sb3IobnVsbCwgMjM5LCAyNDMsIDI1NSk7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgcmVhZE9ubHlNZXNzYWdlUmVmSGVhZGluZ0NvbG9yID0gbmV3IENvbG9yKG51bGwsIDI0NSwgMjQ1LCAyNDUpOwotICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciByZWFkT25seUJhY2tncm91bmRDb2xvciA9IENvbG9yQ29uc3RhbnRzLndoaXRlOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHJlYWRPbmx5TGFiZWxDb2xvciA9IENvbG9yQ29uc3RhbnRzLmdyYXk7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgbGFiZWxDb2xvciA9IENvbG9yQ29uc3RhbnRzLmJsYWNrOwotCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgRm9udCAgc21hbGxCb2xkRm9udCAgICAgICAgICAgPSBuZXcgRm9udChEaXNwbGF5LmdldEN1cnJlbnQoKSwgIlRhaG9tYSIsIDgsIFNXVC5CT0xEKTsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgZmluYWwgc3RhdGljIEZvbnQgIG1lZGl1bUZvbnQgICAgICAgICAgICAgID0gbmV3IEZvbnQoRGlzcGxheS5nZXRDdXJyZW50KCksICJUYWhvbWEiLCAxMCwgU1dULk5PTkUpOyAvLyROT04tTkxTLTEkCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgRm9udCAgbWVkaXVtQm9sZEZvbnQgICAgICAgICAgPSBuZXcgRm9udChEaXNwbGF5LmdldEN1cnJlbnQoKSwgIlRhaG9tYSIsIDEwLCBTV1QuQk9MRCk7ICAvLyROT04tTkxTLTEkCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vS2V5Ym9hcmREcmFnSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vS2V5Ym9hcmREcmFnSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODRhZGYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0tleWJvYXJkRHJhZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZGVzaWduLklLZXlib2FyZERyYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZGVzaWduLmVkaXRwb2xpY2llcy5LZXlCb2FyZEFjY2Vzc2liaWxpdHlFZGl0UG9saWN5OwotCi1wdWJsaWMgY2xhc3MgS2V5Ym9hcmREcmFnSW1wbCBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gaW1wbGVtZW50cyBJS2V5Ym9hcmREcmFnIHsKLQotCXB1YmxpYyBLZXlib2FyZERyYWdJbXBsKCkgewotCQlzdXBlcihudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcGVyZm9ybUtleWJvYXJkRHJhZyhHcmFwaGljYWxFZGl0UGFydCBtb3ZpbmdFbGVtZW50LCBpbnQgZGlyZWN0aW9uKSB7Ci0KLQkJS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeSBwb2xpY3kgPSAoS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeSltb3ZpbmdFbGVtZW50LmdldEVkaXRQb2xpY3koS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeS5LRVkpOwotCQkKLQkJRWRpdFBhcnQgcmlnaHRFbGVtZW50ID0gcG9saWN5LmdldFJlbGF0aXZlRWRpdFBhcnQobW92aW5nRWxlbWVudCwgZGlyZWN0aW9uKTsKLQkJcG9saWN5ID0gKEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kpcmlnaHRFbGVtZW50LmdldEVkaXRQb2xpY3koS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeS5LRVkpOwotCQlFZGl0UGFydCBsZWZ0RWxlbWVudCA9IChwb2xpY3kgIT0gbnVsbCk/IHBvbGljeS5nZXRSZWxhdGl2ZUVkaXRQYXJ0KHJpZ2h0RWxlbWVudCwgZGlyZWN0aW9uKTogbnVsbDsKLQkJICAKLQkJT2JqZWN0IGxlZnRTaWJFbGVtZW50ID0gKGxlZnRFbGVtZW50ICE9IG51bGwpPyBsZWZ0RWxlbWVudC5nZXRNb2RlbCgpIDogbnVsbDsKLQkJT2JqZWN0IHJpZ2h0U2liRWxlbWVudCA9IChyaWdodEVsZW1lbnQgIT0gbnVsbCk/IHJpZ2h0RWxlbWVudC5nZXRNb2RlbCgpIDogbnVsbDsKLQkJaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5TT1VUSCkgewotCQkJbGVmdFNpYkVsZW1lbnQgPSByaWdodFNpYkVsZW1lbnQ7Ci0JCQlyaWdodFNpYkVsZW1lbnQgPSBsZWZ0U2liRWxlbWVudDsKLQkJfSBlbHNlIGlmIChkaXJlY3Rpb24gIT0gUG9zaXRpb25Db25zdGFudHMuTk9SVEgpIHJldHVybjsKLQkJCi0JCU9iamVjdCBzb3VyY2UgPSBtb3ZpbmdFbGVtZW50LmdldE1vZGVsKCk7Ci0KLQkJaWYgKHNvdXJjZSBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0gIAkJCQotCQkJaWYoIShsZWZ0U2liRWxlbWVudCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSkgbGVmdFNpYkVsZW1lbnQgPSBudWxsOwotCQkJaWYoIShyaWdodFNpYkVsZW1lbnQgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkpIHJpZ2h0U2liRWxlbWVudCA9IG51bGw7Ci0JCQkKLQkJCU9iamVjdCBtZXNzYWdlUmVmT3duZXIgPSAoKElNZXNzYWdlUmVmZXJlbmNlKSBzb3VyY2UpLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0gIAkJCWlmIChtZXNzYWdlUmVmT3duZXIgaW5zdGFuY2VvZiBJT3BlcmF0aW9uKSB7Ci0gIAkJCQlJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2liID0gKElNZXNzYWdlUmVmZXJlbmNlKSBsZWZ0U2liRWxlbWVudDsKLSAgCQkJCUlNZXNzYWdlUmVmZXJlbmNlIHJpZ2h0U2liID0gKElNZXNzYWdlUmVmZXJlbmNlKSByaWdodFNpYkVsZW1lbnQ7Ci0gIAkJCQlJTWVzc2FnZVJlZmVyZW5jZSBtb3ZpbmdTaWIgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIHNvdXJjZTsKLSAgCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSU9wZXJhdGlvbikgbWVzc2FnZVJlZk93bmVyKS5nZXRSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kKGxlZnRTaWIsIHJpZ2h0U2liLCBtb3ZpbmdTaWIpOwotICAJCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0gIAkJCQlwZXJmb3JtU2VsZWN0aW9uKHNvdXJjZSk7Ci0gIAkJCX0KLSAgCQl9Ci0gIAkJZWxzZSBpZiAoc291cmNlIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotICAJCQkKLSAgCQkJaWYoIShsZWZ0U2liRWxlbWVudCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpKSBsZWZ0U2liRWxlbWVudCA9IG51bGw7Ci0JCQlpZighKHJpZ2h0U2liRWxlbWVudCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpKSByaWdodFNpYkVsZW1lbnQgPSBudWxsOwotCQkJCi0gIAkJCU9iamVjdCBwYXJhbU93bmVyID0gKChJUGFyYW1ldGVyKSBzb3VyY2UpLmdldE93bmVyKCk7Ci0gIAkJCWlmIChwYXJhbU93bmVyIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLSAgCQkJCUlQYXJhbWV0ZXIgbGVmdFNpYiA9IChJUGFyYW1ldGVyKSBsZWZ0U2liRWxlbWVudDsKLSAgCQkJCUlQYXJhbWV0ZXIgcmlnaHRTaWIgPSAoSVBhcmFtZXRlcikgcmlnaHRTaWJFbGVtZW50OwotICAJCQkJSVBhcmFtZXRlciBtb3ZpbmdTaWIgPSAoSVBhcmFtZXRlcikgc291cmNlOwotICAJCQkJQ29tbWFuZCBjb21tYW5kID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgcGFyYW1Pd25lcikuZ2V0UmVvcmRlclBhcmFtZXRlcnNDb21tYW5kKGxlZnRTaWIsIHJpZ2h0U2liLCBtb3ZpbmdTaWIpOwotICAJCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0gIAkJCQlwZXJmb3JtU2VsZWN0aW9uKHNvdXJjZSk7Ci0gIAkJCX0KLSAgCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9jb25uZWN0aW9ucy9DZW50ZXJlZENvbm5lY3Rpb25BbmNob3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjOWMyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9jb25uZWN0aW9ucy9DZW50ZXJlZENvbm5lY3Rpb25BbmNob3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmNvbm5lY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkFic3RyYWN0Q29ubmVjdGlvbkFuY2hvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLQotcHVibGljIGNsYXNzIENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdGlvbkFuY2hvcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUT1AgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCT1RUT00gPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRUZUID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUklHSFQgPSAzOwotICAKLSAgLy8gVGhlc2UgdHdvIGFyZSBjdXN0b20gZm9yIHJlY3RhbmdsZXMgd2l0aCBoZWFkZXIgYmxvY2tzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhFQURFUl9MRUZUID0gNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEVBREVSX1JJR0hUID0gNTsKLQotICBwcml2YXRlIGludCBsb2NhdGlvbjsKLSAgcHJpdmF0ZSBpbnQgaW5zZXQ7Ci0gIHByaXZhdGUgaW50IG9mZnNldCA9IDA7Ci0gIAotICBwdWJsaWMgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKElGaWd1cmUgb3duZXIsIGludCBsb2NhdGlvbiwgaW50IGluc2V0KSB7Ci0gICAgc3VwZXIob3duZXIpOwotICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICB0aGlzLmluc2V0ID0gaW5zZXQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IoSUZpZ3VyZSBvd25lciwgaW50IGxvY2F0aW9uLCBpbnQgaW5zZXQsIGludCBvZmZzZXQpIHsKLSAgICB0aGlzKG93bmVyLCBsb2NhdGlvbiwgaW5zZXQpOwotICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0OwotICB9Ci0gIAotICBwdWJsaWMgUG9pbnQgZ2V0TG9jYXRpb24oUG9pbnQgcmVmZXJlbmNlKSB7Ci0gICAgUmVjdGFuZ2xlIHIgPSBnZXRPd25lcigpLmdldEJvdW5kcygpOwotICAgIGludCB4LCB5OwotICAgIHN3aXRjaCAobG9jYXRpb24pIHsKLSAgICAgIGNhc2UgVE9QOgotICAgICAgICB4ID0gci5yaWdodCgpIC0gci53aWR0aCAvIDIgKyBvZmZzZXQ7Ci0gICAgICAgIHkgPSByLnkgKyBpbnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEJPVFRPTToKLSAgICAgICAgeCA9IHIucmlnaHQoKSAtIHIud2lkdGggLyAyICsgb2Zmc2V0OwotICAgICAgICB5ID0gci5ib3R0b20oKSAtIGluc2V0OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgTEVGVDoKLSAgICAgICAgeCA9IHIueCArIGluc2V0OwotICAgICAgICB5ID0gci5ib3R0b20oKSAtIHIuaGVpZ2h0IC8gMiArIG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFJJR0hUOgotICAgICAgICB4ID0gci5yaWdodCgpIC0gaW5zZXQ7Ci0gICAgICAgIHkgPSByLmJvdHRvbSgpIC0gci5oZWlnaHQgLyAyICsgb2Zmc2V0OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSEVBREVSX0xFRlQ6Ci0gICAgICAgIHggPSByLnggKyBpbnNldDsKLSAgICAgICAgeSA9IHIueSArIG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEhFQURFUl9SSUdIVDoKLSAgICAgICAgeCA9IHIucmlnaHQoKSAtIGluc2V0OwotICAgICAgICB5ID0gci55ICsgb2Zmc2V0OwotICAgICAgICBicmVhazsgICAgICAgIAotICAgICAgICAKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nLiBBdHRhY2ggdGhlIGFuY2hvciB0byB0aGUgbWlkZGxlCi0gICAgICAgIHggPSByLnJpZ2h0KCkgLSByLndpZHRoIC8gMjsKLSAgICAgICAgeSA9IHIuYm90dG9tKCkgLSByLmhlaWdodCAvIDI7Ci0gICAgfQotICAgIFBvaW50IHAgPSBuZXcgUG9pbnQoeCx5KTsKLQotICAgIGdldE93bmVyKCkudHJhbnNsYXRlVG9BYnNvbHV0ZShwKTsKLSAgICByZXR1cm4gcDsKLSAgfQotICAKLSAgcHVibGljIFBvaW50IGdldFJlZmVyZW5jZVBvaW50KCkgewotICAgIHJldHVybiBnZXRMb2NhdGlvbihudWxsKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9jb25uZWN0aW9ucy9Ub3BMZWZ0Q29ubmVjdGlvbkFuY2hvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvVG9wTGVmdENvbm5lY3Rpb25BbmNob3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQwYmRhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9jb25uZWN0aW9ucy9Ub3BMZWZ0Q29ubmVjdGlvbkFuY2hvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uY29ubmVjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQWJzdHJhY3RDb25uZWN0aW9uQW5jaG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLQotcHVibGljIGNsYXNzIFRvcExlZnRDb25uZWN0aW9uQW5jaG9yIGV4dGVuZHMgQWJzdHJhY3RDb25uZWN0aW9uQW5jaG9yCi17IAotICBJRmlndXJlIGxhYmVsOwotICBwdWJsaWMgVG9wTGVmdENvbm5lY3Rpb25BbmNob3IoSUZpZ3VyZSBvd25lciwgSUZpZ3VyZSBsYWJlbCkgewotICAgIHN1cGVyKG93bmVyKTsKLSAgICB0aGlzLmxhYmVsID0gbGFiZWw7Ci0gIH0KLSAgcHVibGljIFBvaW50IGdldExvY2F0aW9uKFBvaW50IHJlZmVyZW5jZSkgewotICAgIGludCB4ID0gZ2V0T3duZXIoKS5nZXRCb3VuZHMoKS54OwotICAgIGludCB5ID0gbGFiZWwuZ2V0Qm91bmRzKCkueSArIGxhYmVsLmdldEJvdW5kcygpLmhlaWdodCAvIDI7Ci0gICAgUG9pbnQgcCA9IG5ldyBQb2ludCh4LHkpOwotICAgIGdldE93bmVyKCkudHJhbnNsYXRlVG9BYnNvbHV0ZShwKTsKLSAgICByZXR1cm4gcDsKLSAgfQotICAKLSAgcHVibGljIFBvaW50IGdldFJlZmVyZW5jZVBvaW50KCkgewotICAgIHJldHVybiBnZXRMb2NhdGlvbihudWxsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDQ29tYm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ0NvbWJvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOWIzNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDQ29tYm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQUNDOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVDb250cm9sQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQ29udHJvbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlVGV4dEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZVRleHRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Gb250OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHlwZWRMaXN0ZW5lcjsKLQotLyoKLSAqIHJtYWg6Ci0gKiBUaGlzIGNsYXNzIGlzIGEgY29weSBvZiBDQ29tYm8uICBXZSBjb3B5IGl0IGJlY2F1c2Ugd2Ugd2lzaCB0byBhbGlnbgotICogdGhlIFRleHQgb2YgdGhlIENvbWJvIGluIG91ciBvd24gc3BlY2lhbCB3YXkuICBIb3dldmVyIHRoZXJlIGlzIG5vCi0gKiB3YXkgdG8gYWNjZXNzIHRoZSBUZXh0IG9iamVjdCB3aXRoaW4gQ0NvbWJvLi4uLi4KLSAqIEJ1ZyBmb3IgdGhpcyBpc3N1ZSB0byBiZSBvcGVuZWQKLSAqLwotCi0vKioKLSAqIFRoZSBDQ29tYm8gY2xhc3MgcmVwcmVzZW50cyBhIHNlbGVjdGFibGUgdXNlciBpbnRlcmZhY2Ugb2JqZWN0Ci0gKiB0aGF0IGNvbWJpbmVzIGEgdGV4dCBmaWVsZCBhbmQgYSBsaXN0IGFuZCBpc3N1ZXMgbm90aWZpY2F0aW9uCi0gKiB3aGVuIGFuIGl0ZW0gaXMgc2VsZWN0ZWQgZnJvbSB0aGUgbGlzdC4KLSAqIDxwPgotICogTm90ZSB0aGF0IGFsdGhvdWdoIHRoaXMgY2xhc3MgaXMgYSBzdWJjbGFzcyBvZiA8Y29kZT5Db21wb3NpdGU8L2NvZGU+LAotICogaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBhZGQgY2hpbGRyZW4gdG8gaXQsIG9yIHNldCBhIGxheW91dCBvbiBpdC4KLSAqIDwvcD4KLSAqIDxkbD4KLSAqIDxkdD48Yj5TdHlsZXM6PC9iPgotICogPGRkPkJPUkRFUiwgUkVBRF9PTkxZLCBGTEFUPC9kZD4KLSAqIDxkdD48Yj5FdmVudHM6PC9iPgotICogPGRkPlNlbGVjdGlvbjwvZGQ+Ci0gKiA8L2RsPgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQVNEQ0NvbWJvIGV4dGVuZHMgQ29tcG9zaXRlIHsKLQotCVRleHQgdGV4dDsKLQlMaXN0IGxpc3Q7Ci0JaW50IHZpc2libGVJdGVtQ291bnQgPSA1OwotCVNoZWxsIHBvcHVwOwotCUJ1dHRvbiBhcnJvdzsKLQlib29sZWFuIGhhc0ZvY3VzOwotCUxpc3RlbmVyIGxpc3RlbmVyLCBmaWx0ZXI7Ci0JQ29sb3IgZm9yZWdyb3VuZCwgYmFja2dyb3VuZDsKLQlGb250IGZvbnQ7Ci0JcHJpdmF0ZSBpbnQgdGV4dEluZGVudCA9IDU7Ci0JCi0vKioKLSAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBnaXZlbiBpdHMgcGFyZW50Ci0gKiBhbmQgYSBzdHlsZSB2YWx1ZSBkZXNjcmliaW5nIGl0cyBiZWhhdmlvciBhbmQgYXBwZWFyYW5jZS4KLSAqIDxwPgotICogVGhlIHN0eWxlIHZhbHVlIGlzIGVpdGhlciBvbmUgb2YgdGhlIHN0eWxlIGNvbnN0YW50cyBkZWZpbmVkIGluCi0gKiBjbGFzcyA8Y29kZT5TV1Q8L2NvZGU+IHdoaWNoIGlzIGFwcGxpY2FibGUgdG8gaW5zdGFuY2VzIG9mIHRoaXMKLSAqIGNsYXNzLCBvciBtdXN0IGJlIGJ1aWx0IGJ5IDxlbT5iaXR3aXNlIE9SPC9lbT4naW5nIHRvZ2V0aGVyIAotICogKHRoYXQgaXMsIHVzaW5nIHRoZSA8Y29kZT5pbnQ8L2NvZGU+ICJ8IiBvcGVyYXRvcikgdHdvIG9yIG1vcmUKLSAqIG9mIHRob3NlIDxjb2RlPlNXVDwvY29kZT4gc3R5bGUgY29uc3RhbnRzLiBUaGUgY2xhc3MgZGVzY3JpcHRpb24KLSAqIGxpc3RzIHRoZSBzdHlsZSBjb25zdGFudHMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgY2xhc3MuCi0gKiBTdHlsZSBiaXRzIGFyZSBhbHNvIGluaGVyaXRlZCBmcm9tIHN1cGVyY2xhc3Nlcy4KLSAqIDwvcD4KLSAqCi0gKiBAcGFyYW0gcGFyZW50IGEgd2lkZ2V0IHdoaWNoIHdpbGwgYmUgdGhlIHBhcmVudCBvZiB0aGUgbmV3IGluc3RhbmNlIChjYW5ub3QgYmUgbnVsbCkKLSAqIEBwYXJhbSBzdHlsZSB0aGUgc3R5bGUgb2Ygd2lkZ2V0IHRvIGNvbnN0cnVjdAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHBhcmVudCBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcGFyZW50PC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSBTV1QjQk9SREVSCi0gKiBAc2VlIFNXVCNSRUFEX09OTFkKLSAqIEBzZWUgU1dUI0ZMQVQKLSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0I2dldFN0eWxlKCkKLSAqLwotcHVibGljIEFTRENDb21ibyAoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlKSB7Ci0Jc3VwZXIgKHBhcmVudCwgc3R5bGUgPSBjaGVja1N0eWxlIChzdHlsZSkpOwotCQotCWludCB0ZXh0U3R5bGUgPSBTV1QuU0lOR0xFOwotCWlmICgoc3R5bGUgJiBTV1QuUkVBRF9PTkxZKSAhPSAwKSB0ZXh0U3R5bGUgfD0gU1dULlJFQURfT05MWTsKLQlpZiAoKHN0eWxlICYgU1dULkZMQVQpICE9IDApIHRleHRTdHlsZSB8PSBTV1QuRkxBVDsKLQl0ZXh0ID0gbmV3IFRleHQgKHRoaXMsIHRleHRTdHlsZSk7Ci0JaW50IGFycm93U3R5bGUgPSBTV1QuQVJST1cgfCBTV1QuRE9XTjsKLQlpZiAoKHN0eWxlICYgU1dULkZMQVQpICE9IDApIGFycm93U3R5bGUgfD0gU1dULkZMQVQ7Ci0JYXJyb3cgPSBuZXcgQnV0dG9uICh0aGlzLCBhcnJvd1N0eWxlKTsKLQotCWxpc3RlbmVyID0gbmV3IExpc3RlbmVyICgpIHsKLQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQgKEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAocG9wdXAgPT0gZXZlbnQud2lkZ2V0KSB7Ci0JCQkJcG9wdXBFdmVudCAoZXZlbnQpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWlmICh0ZXh0ID09IGV2ZW50LndpZGdldCkgewotCQkJCXRleHRFdmVudCAoZXZlbnQpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWlmIChsaXN0ID09IGV2ZW50LndpZGdldCkgewotCQkJCWxpc3RFdmVudCAoZXZlbnQpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWlmIChhcnJvdyA9PSBldmVudC53aWRnZXQpIHsKLQkJCQlhcnJvd0V2ZW50IChldmVudCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaWYgKEFTRENDb21iby50aGlzID09IGV2ZW50LndpZGdldCkgewotCQkJCWNvbWJvRXZlbnQgKGV2ZW50KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAoZ2V0U2hlbGwgKCkgPT0gZXZlbnQud2lkZ2V0KSB7Ci0JCQkJaGFuZGxlRm9jdXMgKFNXVC5Gb2N1c091dCk7Ci0JCQl9Ci0JCX0KLQl9OwotCWZpbHRlciA9IG5ldyBMaXN0ZW5lcigpIHsKLQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKLQkJCVNoZWxsIHNoZWxsID0gKChDb250cm9sKWV2ZW50LndpZGdldCkuZ2V0U2hlbGwgKCk7Ci0JCQlpZiAoc2hlbGwgPT0gQVNEQ0NvbWJvLnRoaXMuZ2V0U2hlbGwgKCkpIHsKLQkJCQloYW5kbGVGb2N1cyAoU1dULkZvY3VzT3V0KTsKLQkJCX0KLQkJfQotCX07Ci0JCi0JaW50IFtdIGNvbWJvRXZlbnRzID0ge1NXVC5EaXNwb3NlLCBTV1QuTW92ZSwgU1dULlJlc2l6ZX07Ci0JZm9yIChpbnQgaT0wOyBpPGNvbWJvRXZlbnRzLmxlbmd0aDsgaSsrKSB0aGlzLmFkZExpc3RlbmVyIChjb21ib0V2ZW50cyBbaV0sIGxpc3RlbmVyKTsKLQkKLQlpbnQgW10gdGV4dEV2ZW50cyA9IHtTV1QuS2V5RG93biwgU1dULktleVVwLCBTV1QuTWVudURldGVjdCwgU1dULk1vZGlmeSwgU1dULk1vdXNlRG93biwgU1dULk1vdXNlVXAsIFNXVC5UcmF2ZXJzZSwgU1dULkZvY3VzSW59OwotCWZvciAoaW50IGk9MDsgaTx0ZXh0RXZlbnRzLmxlbmd0aDsgaSsrKSB0ZXh0LmFkZExpc3RlbmVyICh0ZXh0RXZlbnRzIFtpXSwgbGlzdGVuZXIpOwotCQotCWludCBbXSBhcnJvd0V2ZW50cyA9IHtTV1QuU2VsZWN0aW9uLCBTV1QuRm9jdXNJbn07Ci0JZm9yIChpbnQgaT0wOyBpPGFycm93RXZlbnRzLmxlbmd0aDsgaSsrKSBhcnJvdy5hZGRMaXN0ZW5lciAoYXJyb3dFdmVudHMgW2ldLCBsaXN0ZW5lcik7Ci0JCi0JY3JlYXRlUG9wdXAobnVsbCwgLTEpOwotCWluaXRBY2Nlc3NpYmxlKCk7Ci19Ci1zdGF0aWMgaW50IGNoZWNrU3R5bGUgKGludCBzdHlsZSkgewotCWludCBtYXNrID0gU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkgfCBTV1QuRkxBVCB8IFNXVC5MRUZUX1RPX1JJR0hUIHwgU1dULlJJR0hUX1RPX0xFRlQ7Ci0JcmV0dXJuIHN0eWxlICYgbWFzazsKLX0KLS8qKgotICogQWRkcyB0aGUgYXJndW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcmVjZWl2ZXIncyBsaXN0LgotICoKLSAqIEBwYXJhbSBzdHJpbmcgdGhlIG5ldyBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSAjYWRkKFN0cmluZyxpbnQpCi0gKi8KLXB1YmxpYyB2b2lkIGFkZCAoU3RyaW5nIHN0cmluZykgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKHN0cmluZyA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlsaXN0LmFkZCAoc3RyaW5nKTsKLX0KLS8qKgotICogQWRkcyB0aGUgYXJndW1lbnQgdG8gdGhlIHJlY2VpdmVyJ3MgbGlzdCBhdCB0aGUgZ2l2ZW4KLSAqIHplcm8tcmVsYXRpdmUgaW5kZXguCi0gKiA8cD4KLSAqIE5vdGU6IFRvIGFkZCBhbiBpdGVtIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QsIHVzZSB0aGUKLSAqIHJlc3VsdCBvZiBjYWxsaW5nIDxjb2RlPmdldEl0ZW1Db3VudCgpPC9jb2RlPiBhcyB0aGUKLSAqIGluZGV4IG9yIHVzZSA8Y29kZT5hZGQoU3RyaW5nKTwvY29kZT4uCi0gKiA8L3A+Ci0gKgotICogQHBhcmFtIHN0cmluZyB0aGUgbmV3IGl0ZW0KLSAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggZm9yIHRoZSBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG51bGw8L2xpPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfUkFOR0UgLSBpZiB0aGUgaW5kZXggaXMgbm90IGJldHdlZW4gMCBhbmQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCAoaW5jbHVzaXZlKTwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlICNhZGQoU3RyaW5nKQotICovCi1wdWJsaWMgdm9pZCBhZGQgKFN0cmluZyBzdHJpbmcsIGludCBpbmRleCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKHN0cmluZyA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlsaXN0LmFkZCAoc3RyaW5nLCBpbmRleCk7Ci19Ci0vKioKLSAqIEFkZHMgdGhlIGxpc3RlbmVyIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGxpc3RlbmVycyB3aG8gd2lsbAotICogYmUgbm90aWZpZWQgd2hlbiB0aGUgcmVjZWl2ZXIncyB0ZXh0IGlzIG1vZGlmaWVkLCBieSBzZW5kaW5nCi0gKiBpdCBvbmUgb2YgdGhlIG1lc3NhZ2VzIGRlZmluZWQgaW4gdGhlIDxjb2RlPk1vZGlmeUxpc3RlbmVyPC9jb2RlPgotICogaW50ZXJmYWNlLgotICoKLSAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgd2hpY2ggc2hvdWxkIGJlIG5vdGlmaWVkCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgbGlzdGVuZXIgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlIE1vZGlmeUxpc3RlbmVyCi0gKiBAc2VlICNyZW1vdmVNb2RpZnlMaXN0ZW5lcgotICovCi1wdWJsaWMgdm9pZCBhZGRNb2RpZnlMaXN0ZW5lciAoTW9kaWZ5TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChsaXN0ZW5lciA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlUeXBlZExpc3RlbmVyIHR5cGVkTGlzdGVuZXIgPSBuZXcgVHlwZWRMaXN0ZW5lciAobGlzdGVuZXIpOwotCWFkZExpc3RlbmVyIChTV1QuTW9kaWZ5LCB0eXBlZExpc3RlbmVyKTsKLX0KLS8qKgotICogQWRkcyB0aGUgbGlzdGVuZXIgdG8gdGhlIGNvbGxlY3Rpb24gb2YgbGlzdGVuZXJzIHdobyB3aWxsCi0gKiBiZSBub3RpZmllZCB3aGVuIHRoZSByZWNlaXZlcidzIHNlbGVjdGlvbiBjaGFuZ2VzLCBieSBzZW5kaW5nCi0gKiBpdCBvbmUgb2YgdGhlIG1lc3NhZ2VzIGRlZmluZWQgaW4gdGhlIDxjb2RlPlNlbGVjdGlvbkxpc3RlbmVyPC9jb2RlPgotICogaW50ZXJmYWNlLgotICogPHA+Ci0gKiA8Y29kZT53aWRnZXRTZWxlY3RlZDwvY29kZT4gaXMgY2FsbGVkIHdoZW4gdGhlIGNvbWJvJ3MgbGlzdCBzZWxlY3Rpb24gY2hhbmdlcy4KLSAqIDxjb2RlPndpZGdldERlZmF1bHRTZWxlY3RlZDwvY29kZT4gaXMgdHlwaWNhbGx5IGNhbGxlZCB3aGVuIEVOVEVSIGlzIHByZXNzZWQgdGhlIGNvbWJvJ3MgdGV4dCBhcmVhLgotICogPC9wPgotICoKLSAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgd2hpY2ggc2hvdWxkIGJlIG5vdGlmaWVkCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgbGlzdGVuZXIgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlIFNlbGVjdGlvbkxpc3RlbmVyCi0gKiBAc2VlICNyZW1vdmVTZWxlY3Rpb25MaXN0ZW5lcgotICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50Ci0gKi8KLXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkxpc3RlbmVyKFNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAobGlzdGVuZXIgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JVHlwZWRMaXN0ZW5lciB0eXBlZExpc3RlbmVyID0gbmV3IFR5cGVkTGlzdGVuZXIgKGxpc3RlbmVyKTsKLQlhZGRMaXN0ZW5lciAoU1dULlNlbGVjdGlvbix0eXBlZExpc3RlbmVyKTsKLQlhZGRMaXN0ZW5lciAoU1dULkRlZmF1bHRTZWxlY3Rpb24sdHlwZWRMaXN0ZW5lcik7Ci19Ci12b2lkIGFycm93RXZlbnQgKEV2ZW50IGV2ZW50KSB7Ci0Jc3dpdGNoIChldmVudC50eXBlKSB7Ci0JCWNhc2UgU1dULkZvY3VzSW46IHsKLQkJCWhhbmRsZUZvY3VzIChTV1QuRm9jdXNJbik7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5TZWxlY3Rpb246IHsKLQkJCWRyb3BEb3duICghaXNEcm9wcGVkICgpKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotLyoqCi0gKiBTZXRzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZCB0byBhbiBlbXB0eQotICogc2VsZWN0aW9uIHN0YXJ0aW5nIGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIElmIHRoZQotICogdGV4dCBmaWVsZCBpcyBlZGl0YWJsZSwgdGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBwbGFjaW5nIHRoZQotICogaS1iZWFtIGF0IHRoZSBzdGFydCBvZiB0aGUgdGV4dC4KLSAqIDxwPgotICogTm90ZTogVG8gY2xlYXIgdGhlIHNlbGVjdGVkIGl0ZW1zIGluIHRoZSByZWNlaXZlcidzIGxpc3QsIAotICogdXNlIDxjb2RlPmRlc2VsZWN0QWxsKCk8L2NvZGU+LgotICogPC9wPgotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSAjZGVzZWxlY3RBbGwKLSAqLwotcHVibGljIHZvaWQgY2xlYXJTZWxlY3Rpb24gKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXRleHQuY2xlYXJTZWxlY3Rpb24gKCk7Ci0JbGlzdC5kZXNlbGVjdEFsbCAoKTsKLX0KLXZvaWQgY29tYm9FdmVudCAoRXZlbnQgZXZlbnQpIHsKLQlzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKLQkJY2FzZSBTV1QuRGlzcG9zZToKLQkJCWlmIChwb3B1cCAhPSBudWxsICYmICFwb3B1cC5pc0Rpc3Bvc2VkICgpKSB7Ci0JCQkJbGlzdC5yZW1vdmVMaXN0ZW5lciAoU1dULkRpc3Bvc2UsIGxpc3RlbmVyKTsKLQkJCQlwb3B1cC5kaXNwb3NlICgpOwotCQkJfQotCQkJU2hlbGwgc2hlbGwgPSBnZXRTaGVsbCAoKTsKLQkJCXNoZWxsLnJlbW92ZUxpc3RlbmVyIChTV1QuRGVhY3RpdmF0ZSwgbGlzdGVuZXIpOwotCQkJRGlzcGxheSBkaXNwbGF5ID0gZ2V0RGlzcGxheSAoKTsKLQkJCWRpc3BsYXkucmVtb3ZlRmlsdGVyIChTV1QuRm9jdXNJbiwgZmlsdGVyKTsKLQkJCXBvcHVwID0gbnVsbDsgIAotCQkJdGV4dCA9IG51bGw7ICAKLQkJCWxpc3QgPSBudWxsOyAgCi0JCQlhcnJvdyA9IG51bGw7Ci0JCQlicmVhazsKLQkJY2FzZSBTV1QuTW92ZToKLQkJCWRyb3BEb3duIChmYWxzZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTV1QuUmVzaXplOgotCQkJaW50ZXJuYWxMYXlvdXQgKGZhbHNlKTsKLQkJCWJyZWFrOwotCX0KLX0KLQotcHVibGljIFBvaW50IGNvbXB1dGVTaXplIChpbnQgd0hpbnQsIGludCBoSGludCwgYm9vbGVhbiBjaGFuZ2VkKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLQlTdHJpbmdbXSBpdGVtcyA9IGxpc3QuZ2V0SXRlbXMgKCk7Ci0JaW50IHRleHRXaWR0aCA9IDA7Ci0JR0MgZ2MgPSBuZXcgR0MgKHRleHQpOwotCWludCBzcGFjZXIgPSBnYy5zdHJpbmdFeHRlbnQgKCIgIikueDsgLy8kTk9OLU5MUy0xJAotCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKLQkJdGV4dFdpZHRoID0gTWF0aC5tYXggKGdjLnN0cmluZ0V4dGVudCAoaXRlbXNbaV0pLngsIHRleHRXaWR0aCk7Ci0JfQotCWdjLmRpc3Bvc2UoKTsKLQlQb2ludCB0ZXh0U2l6ZSA9IHRleHQuY29tcHV0ZVNpemUgKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCwgY2hhbmdlZCk7Ci0JUG9pbnQgYXJyb3dTaXplID0gYXJyb3cuY29tcHV0ZVNpemUgKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCwgY2hhbmdlZCk7Ci0JUG9pbnQgbGlzdFNpemUgPSBsaXN0LmNvbXB1dGVTaXplIChTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQsIGNoYW5nZWQpOwotCWludCBib3JkZXJXaWR0aCA9IGdldEJvcmRlcldpZHRoICgpOwotCQotCWhlaWdodCA9IE1hdGgubWF4ICh0ZXh0U2l6ZS55LCBhcnJvd1NpemUueSk7Ci0Jd2lkdGggPSBNYXRoLm1heCAodGV4dFdpZHRoICsgMipzcGFjZXIgKyBhcnJvd1NpemUueCArIDIqYm9yZGVyV2lkdGgsIGxpc3RTaXplLngpOwotCWlmICh3SGludCAhPSBTV1QuREVGQVVMVCkgd2lkdGggPSB3SGludDsKLQlpZiAoaEhpbnQgIT0gU1dULkRFRkFVTFQpIGhlaWdodCA9IGhIaW50OwotCXJldHVybiBuZXcgUG9pbnQgKHdpZHRoICsgMipib3JkZXJXaWR0aCwgaGVpZ2h0ICsgMipib3JkZXJXaWR0aCk7Ci19Ci12b2lkIGNyZWF0ZVBvcHVwKFN0cmluZ1tdIGl0ZW1zLCBpbnQgc2VsZWN0aW9uSW5kZXgpIHsJCQotCQkvLyBjcmVhdGUgc2hlbGwgYW5kIGxpc3QKLQkJcG9wdXAgPSBuZXcgU2hlbGwgKGdldFNoZWxsICgpLCBTV1QuTk9fVFJJTSB8IFNXVC5PTl9UT1ApOwotCQlpbnQgc3R5bGUgPSBnZXRTdHlsZSAoKTsKLQkJaW50IGxpc3RTdHlsZSA9IFNXVC5TSU5HTEUgfCBTV1QuVl9TQ1JPTEw7Ci0JCWlmICgoc3R5bGUgJiBTV1QuRkxBVCkgIT0gMCkgbGlzdFN0eWxlIHw9IFNXVC5GTEFUOwotCQlpZiAoKHN0eWxlICYgU1dULlJJR0hUX1RPX0xFRlQpICE9IDApIGxpc3RTdHlsZSB8PSBTV1QuUklHSFRfVE9fTEVGVDsKLQkJaWYgKChzdHlsZSAmIFNXVC5MRUZUX1RPX1JJR0hUKSAhPSAwKSBsaXN0U3R5bGUgfD0gU1dULkxFRlRfVE9fUklHSFQ7Ci0JCWxpc3QgPSBuZXcgTGlzdCAocG9wdXAsIGxpc3RTdHlsZSk7Ci0JCWlmIChmb250ICE9IG51bGwpIGxpc3Quc2V0Rm9udCAoZm9udCk7Ci0JCWlmIChmb3JlZ3JvdW5kICE9IG51bGwpIGxpc3Quc2V0Rm9yZWdyb3VuZCAoZm9yZWdyb3VuZCk7Ci0JCWlmIChiYWNrZ3JvdW5kICE9IG51bGwpIGxpc3Quc2V0QmFja2dyb3VuZCAoYmFja2dyb3VuZCk7Ci0JCQotCQlpbnQgW10gcG9wdXBFdmVudHMgPSB7U1dULkNsb3NlLCBTV1QuUGFpbnQsIFNXVC5EZWFjdGl2YXRlfTsKLQkJZm9yIChpbnQgaT0wOyBpPHBvcHVwRXZlbnRzLmxlbmd0aDsgaSsrKSBwb3B1cC5hZGRMaXN0ZW5lciAocG9wdXBFdmVudHMgW2ldLCBsaXN0ZW5lcik7Ci0JCWludCBbXSBsaXN0RXZlbnRzID0ge1NXVC5Nb3VzZVVwLCBTV1QuU2VsZWN0aW9uLCBTV1QuVHJhdmVyc2UsIFNXVC5LZXlEb3duLCBTV1QuS2V5VXAsIFNXVC5Gb2N1c0luLCBTV1QuRGlzcG9zZX07Ci0JCWZvciAoaW50IGk9MDsgaTxsaXN0RXZlbnRzLmxlbmd0aDsgaSsrKSBsaXN0LmFkZExpc3RlbmVyIChsaXN0RXZlbnRzIFtpXSwgbGlzdGVuZXIpOwotCQkKLQkJaWYgKGl0ZW1zICE9IG51bGwpIGxpc3Quc2V0SXRlbXMgKGl0ZW1zKTsKLQkJaWYgKHNlbGVjdGlvbkluZGV4ICE9IC0xKSBsaXN0LnNldFNlbGVjdGlvbiAoc2VsZWN0aW9uSW5kZXgpOwotfQotLyoqCi0gKiBEZXNlbGVjdHMgdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIHplcm8tcmVsYXRpdmUgaW5kZXggaW4gdGhlIHJlY2VpdmVyJ3MgCi0gKiBsaXN0LiAgSWYgdGhlIGl0ZW0gYXQgdGhlIGluZGV4IHdhcyBhbHJlYWR5IGRlc2VsZWN0ZWQsIGl0IHJlbWFpbnMKLSAqIGRlc2VsZWN0ZWQuIEluZGljZXMgdGhhdCBhcmUgb3V0IG9mIHJhbmdlIGFyZSBpZ25vcmVkLgotICoKLSAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gZGVzZWxlY3QKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBkZXNlbGVjdCAoaW50IGluZGV4KSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JbGlzdC5kZXNlbGVjdCAoaW5kZXgpOwotfQotLyoqCi0gKiBEZXNlbGVjdHMgYWxsIHNlbGVjdGVkIGl0ZW1zIGluIHRoZSByZWNlaXZlcidzIGxpc3QuCi0gKiA8cD4KLSAqIE5vdGU6IFRvIGNsZWFyIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZCwKLSAqIHVzZSA8Y29kZT5jbGVhclNlbGVjdGlvbigpPC9jb2RlPi4KLSAqIDwvcD4KLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgI2NsZWFyU2VsZWN0aW9uCi0gKi8KLXB1YmxpYyB2b2lkIGRlc2VsZWN0QWxsICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlsaXN0LmRlc2VsZWN0QWxsICgpOwotfQotdm9pZCBkcm9wRG93biAoYm9vbGVhbiBkcm9wKSB7Ci0JaWYgKGRyb3AgPT0gaXNEcm9wcGVkICgpKSByZXR1cm47Ci0JaWYgKCFkcm9wKSB7Ci0JCXBvcHVwLnNldFZpc2libGUgKGZhbHNlKTsKLQkJdGV4dC5zZWxlY3RBbGwoKTsKLQkJaWYgKCFpc0Rpc3Bvc2VkICgpJiYgYXJyb3cuaXNGb2N1c0NvbnRyb2woKSkgewotCQkJdGV4dC5zZXRGb2N1cygpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoZ2V0U2hlbGwoKSAhPSBwb3B1cC5nZXRQYXJlbnQgKCkpIHsKLQkJU3RyaW5nW10gaXRlbXMgPSBsaXN0LmdldEl0ZW1zICgpOwotCQlpbnQgc2VsZWN0aW9uSW5kZXggPSBsaXN0LmdldFNlbGVjdGlvbkluZGV4ICgpOwotCQlsaXN0LnJlbW92ZUxpc3RlbmVyIChTV1QuRGlzcG9zZSwgbGlzdGVuZXIpOwotCQlwb3B1cC5kaXNwb3NlKCk7Ci0JCXBvcHVwID0gbnVsbDsKLQkJbGlzdCA9IG51bGw7Ci0JCWNyZWF0ZVBvcHVwIChpdGVtcywgc2VsZWN0aW9uSW5kZXgpOwotCX0KLQkKLQlQb2ludCBzaXplID0gZ2V0U2l6ZSAoKTsKLQlpbnQgaXRlbUNvdW50ID0gbGlzdC5nZXRJdGVtQ291bnQgKCk7Ci0JaXRlbUNvdW50ID0gKGl0ZW1Db3VudCA9PSAwKSA/IHZpc2libGVJdGVtQ291bnQgOiBNYXRoLm1pbih2aXNpYmxlSXRlbUNvdW50LCBpdGVtQ291bnQpOwotCWludCBpdGVtSGVpZ2h0ID0gbGlzdC5nZXRJdGVtSGVpZ2h0ICgpICogaXRlbUNvdW50OwotCVBvaW50IGxpc3RTaXplID0gbGlzdC5jb21wdXRlU2l6ZSAoU1dULkRFRkFVTFQsIGl0ZW1IZWlnaHQsIGZhbHNlKTsKLQlsaXN0LnNldEJvdW5kcyAoMSwgMSwgTWF0aC5tYXggKHNpemUueCAtIDIsIGxpc3RTaXplLngpLCBsaXN0U2l6ZS55KTsKLQkKLQlpbnQgaW5kZXggPSBsaXN0LmdldFNlbGVjdGlvbkluZGV4ICgpOwotCWlmIChpbmRleCAhPSAtMSkgbGlzdC5zZXRUb3BJbmRleCAoaW5kZXgpOwotCURpc3BsYXkgZGlzcGxheSA9IGdldERpc3BsYXkgKCk7Ci0JUmVjdGFuZ2xlIGxpc3RSZWN0ID0gbGlzdC5nZXRCb3VuZHMgKCk7Ci0JUmVjdGFuZ2xlIHBhcmVudFJlY3QgPSBkaXNwbGF5Lm1hcCAoZ2V0UGFyZW50ICgpLCBudWxsLCBnZXRCb3VuZHMgKCkpOwotCVBvaW50IGNvbWJvU2l6ZSA9IGdldFNpemUgKCk7Ci0JUmVjdGFuZ2xlIGRpc3BsYXlSZWN0ID0gZ2V0TW9uaXRvciAoKS5nZXRDbGllbnRBcmVhICgpOwotCWludCB3aWR0aCA9IE1hdGgubWF4IChjb21ib1NpemUueCwgbGlzdFJlY3Qud2lkdGggKyAyKTsKLQlpbnQgaGVpZ2h0ID0gbGlzdFJlY3QuaGVpZ2h0ICsgMjsKLQlpbnQgeCA9IHBhcmVudFJlY3QueDsKLQlpbnQgeSA9IHBhcmVudFJlY3QueSArIGNvbWJvU2l6ZS55OwotCWlmICh5ICsgaGVpZ2h0ID4gZGlzcGxheVJlY3QueSArIGRpc3BsYXlSZWN0LmhlaWdodCkgeSA9IHBhcmVudFJlY3QueSAtIGhlaWdodDsKLQlpZiAoeCArIHdpZHRoID4gZGlzcGxheVJlY3QueCArIGRpc3BsYXlSZWN0LndpZHRoKSB4ID0gZGlzcGxheVJlY3QueCArIGRpc3BsYXlSZWN0LndpZHRoIC0gbGlzdFJlY3Qud2lkdGg7Ci0JcG9wdXAuc2V0Qm91bmRzICh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLQlwb3B1cC5zZXRWaXNpYmxlICh0cnVlKTsKLQlsaXN0LnNldEZvY3VzICgpOwotfQotLyoKLSAqIFJldHVybiB0aGUgbG93ZXJjYXNlIG9mIHRoZSBmaXJzdCBub24tJyYnIGNoYXJhY3RlciBmb2xsb3dpbmcKLSAqIGFuICcmJyBjaGFyYWN0ZXIgaW4gdGhlIGdpdmVuIHN0cmluZy4gSWYgdGhlcmUgYXJlIG5vICcmJwotICogY2hhcmFjdGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLCByZXR1cm4gJ1wwJy4KLSAqLwotY2hhciBfZmluZE1uZW1vbmljIChTdHJpbmcgc3RyaW5nKSB7Ci0JaWYgKHN0cmluZyA9PSBudWxsKSByZXR1cm4gJ1wwJzsKLQlpbnQgaW5kZXggPSAwOwotCWludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoICgpOwotCWRvIHsKLQkJd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIHN0cmluZy5jaGFyQXQgKGluZGV4KSAhPSAnJicpIGluZGV4Kys7Ci0JCWlmICgrK2luZGV4ID49IGxlbmd0aCkgcmV0dXJuICdcMCc7Ci0JCWlmIChzdHJpbmcuY2hhckF0IChpbmRleCkgIT0gJyYnKSByZXR1cm4gQ2hhcmFjdGVyLnRvTG93ZXJDYXNlIChzdHJpbmcuY2hhckF0IChpbmRleCkpOwotCQlpbmRleCsrOwotCX0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTsKLSAJcmV0dXJuICdcMCc7Ci19Ci0vKiAKLSAqIFJldHVybiB0aGUgTGFiZWwgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSByZWNlaXZlciBpbiB0aGUgei1vcmRlciwgCi0gKiBvciBudWxsIGlmIG5vbmUuIAotICovCi1MYWJlbCBnZXRBc3NvY2lhdGVkTGFiZWwgKCkgewotCUNvbnRyb2xbXSBzaWJsaW5ncyA9IGdldFBhcmVudCAoKS5nZXRDaGlsZHJlbiAoKTsKLQlmb3IgKGludCBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKSB7Ci0JCWlmIChzaWJsaW5ncyBbaV0gPT0gdGhpcykgewotCQkJaWYgKGkgPiAwICYmIHNpYmxpbmdzIFtpLTFdIGluc3RhbmNlb2YgTGFiZWwpIHsKLQkJCQlyZXR1cm4gKExhYmVsKSBzaWJsaW5ncyBbaS0xXTsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gbnVsbDsKLX0KLXB1YmxpYyBDb250cm9sIFtdIGdldENoaWxkcmVuICgpIHsKLQljaGVja1dpZGdldCgpOwotCXJldHVybiBuZXcgQ29udHJvbCBbMF07Ci19Ci0vKioKLSAqIEdldHMgdGhlIGVkaXRhYmxlIHN0YXRlLgotICoKLSAqIEByZXR1cm4gd2hldGhlciBvciBub3QgdGhlIHJlY2VpdmVyIGlzIGVkaXRhYmxlCi0gKiAKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKiAKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGJvb2xlYW4gZ2V0RWRpdGFibGUgKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiB0ZXh0LmdldEVkaXRhYmxlKCk7Ci19Ci0vKioKLSAqIFJldHVybnMgdGhlIGl0ZW0gYXQgdGhlIGdpdmVuLCB6ZXJvLXJlbGF0aXZlIGluZGV4IGluIHRoZQotICogcmVjZWl2ZXIncyBsaXN0LiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBpbmRleCBpcyBvdXQKLSAqIG9mIHJhbmdlLgotICoKLSAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gcmV0dXJuCi0gKiBAcmV0dXJuIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBpbmRleAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9JTlZBTElEX1JBTkdFIC0gaWYgdGhlIGluZGV4IGlzIG5vdCBiZXR3ZWVuIDAgYW5kIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QgbWludXMgMSAoaW5jbHVzaXZlKTwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIFN0cmluZyBnZXRJdGVtIChpbnQgaW5kZXgpIHsKLQljaGVja1dpZGdldCgpOwotCXJldHVybiBsaXN0LmdldEl0ZW0gKGluZGV4KTsKLX0KLS8qKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGNvbnRhaW5lZCBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0LgotICoKLSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcwotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50ICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gbGlzdC5nZXRJdGVtQ291bnQgKCk7Ci19Ci0vKioKLSAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgYXJlYSB3aGljaCB3b3VsZCBiZSB1c2VkIHRvCi0gKiBkaXNwbGF5IDxlbT5vbmU8L2VtPiBvZiB0aGUgaXRlbXMgaW4gdGhlIHJlY2VpdmVyJ3MgbGlzdC4KLSAqCi0gKiBAcmV0dXJuIHRoZSBoZWlnaHQgb2Ygb25lIGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgaW50IGdldEl0ZW1IZWlnaHQgKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiBsaXN0LmdldEl0ZW1IZWlnaHQgKCk7Ci19Ci0vKioKLSAqIFJldHVybnMgYW4gYXJyYXkgb2YgPGNvZGU+U3RyaW5nPC9jb2RlPnMgd2hpY2ggYXJlIHRoZSBpdGVtcwotICogaW4gdGhlIHJlY2VpdmVyJ3MgbGlzdC4gCi0gKiA8cD4KLSAqIE5vdGU6IFRoaXMgaXMgbm90IHRoZSBhY3R1YWwgc3RydWN0dXJlIHVzZWQgYnkgdGhlIHJlY2VpdmVyCi0gKiB0byBtYWludGFpbiBpdHMgbGlzdCBvZiBpdGVtcywgc28gbW9kaWZ5aW5nIHRoZSBhcnJheSB3aWxsCi0gKiBub3QgYWZmZWN0IHRoZSByZWNlaXZlci4gCi0gKiA8L3A+Ci0gKgotICogQHJldHVybiB0aGUgaXRlbXMgaW4gdGhlIHJlY2VpdmVyJ3MgbGlzdAotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBTdHJpbmcgW10gZ2V0SXRlbXMgKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiBsaXN0LmdldEl0ZW1zICgpOwotfQotcHVibGljIE1lbnUgZ2V0TWVudSgpIHsKLQlyZXR1cm4gdGV4dC5nZXRNZW51KCk7Ci19Ci0vKioKLSAqIFJldHVybnMgYSA8Y29kZT5Qb2ludDwvY29kZT4gd2hvc2UgeCBjb29yZGluYXRlIGlzIHRoZSBzdGFydAotICogb2YgdGhlIHNlbGVjdGlvbiBpbiB0aGUgcmVjZWl2ZXIncyB0ZXh0IGZpZWxkLCBhbmQgd2hvc2UgeQotICogY29vcmRpbmF0ZSBpcyB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24uIFRoZSByZXR1cm5lZCB2YWx1ZXMKLSAqIGFyZSB6ZXJvLXJlbGF0aXZlLiBBbiAiZW1wdHkiIHNlbGVjdGlvbiBhcyBpbmRpY2F0ZWQgYnkKLSAqIHRoZSB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBoYXZpbmcgdGhlIHNhbWUgdmFsdWUuCi0gKgotICogQHJldHVybiBhIHBvaW50IHJlcHJlc2VudGluZyB0aGUgc2VsZWN0aW9uIHN0YXJ0IGFuZCBlbmQKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgUG9pbnQgZ2V0U2VsZWN0aW9uICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gdGV4dC5nZXRTZWxlY3Rpb24gKCk7Ci19Ci0vKioKLSAqIFJldHVybnMgdGhlIHplcm8tcmVsYXRpdmUgaW5kZXggb2YgdGhlIGl0ZW0gd2hpY2ggaXMgY3VycmVudGx5Ci0gKiBzZWxlY3RlZCBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0LCBvciAtMSBpZiBubyBpdGVtIGlzIHNlbGVjdGVkLgotICoKLSAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGludCBnZXRTZWxlY3Rpb25JbmRleCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIGxpc3QuZ2V0U2VsZWN0aW9uSW5kZXggKCk7Ci19Ci1wdWJsaWMgaW50IGdldFN0eWxlICgpIHsKLQlpbnQgc3R5bGUgPSBzdXBlci5nZXRTdHlsZSAoKTsKLQlzdHlsZSAmPSB+U1dULlJFQURfT05MWTsKLQlpZiAoIXRleHQuZ2V0RWRpdGFibGUoKSkgc3R5bGUgfD0gU1dULlJFQURfT05MWTsgCi0JcmV0dXJuIHN0eWxlOwotfQotLyoqCi0gKiBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0aGUKLSAqIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZC4KLSAqCi0gKiBAcmV0dXJuIHRoZSByZWNlaXZlcidzIHRleHQKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgU3RyaW5nIGdldFRleHQgKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiB0ZXh0LmdldFRleHQgKCk7Ci19Ci0vKioKLSAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgcmVjZWl2ZXJzJ3MgdGV4dCBmaWVsZC4KLSAqCi0gKiBAcmV0dXJuIHRoZSB0ZXh0IGhlaWdodAotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBpbnQgZ2V0VGV4dEhlaWdodCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIHRleHQuZ2V0TGluZUhlaWdodCAoKTsKLX0KLS8qKgotICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHRoZSByZWNlaXZlcidzCi0gKiB0ZXh0IGZpZWxkIGlzIGNhcGFibGUgb2YgaG9sZGluZy4gSWYgdGhpcyBoYXMgbm90IGJlZW4gY2hhbmdlZAotICogYnkgPGNvZGU+c2V0VGV4dExpbWl0KCk8L2NvZGU+LCBpdCB3aWxsIGJlIHRoZSBjb25zdGFudAotICogPGNvZGU+Q29tYm8uTElNSVQ8L2NvZGU+LgotICogCi0gKiBAcmV0dXJuIHRoZSB0ZXh0IGxpbWl0Ci0gKiAKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBpbnQgZ2V0VGV4dExpbWl0ICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gdGV4dC5nZXRUZXh0TGltaXQgKCk7Ci19Ci0vKioKLSAqIEdldHMgdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGFyZSB2aXNpYmxlIGluIHRoZSBkcm9wCi0gKiBkb3duIHBvcnRpb24gb2YgdGhlIHJlY2VpdmVyJ3MgbGlzdC4KLSAqCi0gKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgdmlzaWJsZQotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKiAKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGludCBnZXRWaXNpYmxlSXRlbUNvdW50ICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gdmlzaWJsZUl0ZW1Db3VudDsKLX0KLXZvaWQgaGFuZGxlRm9jdXMgKGludCB0eXBlKSB7Ci0JaWYgKGlzRGlzcG9zZWQgKCkpIHJldHVybjsKLQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBTV1QuRm9jdXNJbjogewotCQkJaWYgKGhhc0ZvY3VzKSByZXR1cm47Ci0vLwkJCWlmIChnZXRFZGl0YWJsZSAoKSkgdGV4dC5zZWxlY3RBbGwgKCk7Ci0JCQloYXNGb2N1cyA9IHRydWU7Ci0JCQlTaGVsbCBzaGVsbCA9IGdldFNoZWxsICgpOwotCQkJc2hlbGwucmVtb3ZlTGlzdGVuZXIgKFNXVC5EZWFjdGl2YXRlLCBsaXN0ZW5lcik7Ci0JCQlzaGVsbC5hZGRMaXN0ZW5lciAoU1dULkRlYWN0aXZhdGUsIGxpc3RlbmVyKTsKLQkJCURpc3BsYXkgZGlzcGxheSA9IGdldERpc3BsYXkgKCk7Ci0JCQlkaXNwbGF5LnJlbW92ZUZpbHRlciAoU1dULkZvY3VzSW4sIGZpbHRlcik7Ci0JCQlkaXNwbGF5LmFkZEZpbHRlciAoU1dULkZvY3VzSW4sIGZpbHRlcik7Ci0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuRm9jdXNJbiwgZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5Gb2N1c091dDogewotCQkJaWYgKCFoYXNGb2N1cykgcmV0dXJuOwotCQkJQ29udHJvbCBmb2N1c0NvbnRyb2wgPSBnZXREaXNwbGF5ICgpLmdldEZvY3VzQ29udHJvbCAoKTsKLQkJCWlmIChmb2N1c0NvbnRyb2wgPT0gYXJyb3cgfHwgZm9jdXNDb250cm9sID09IGxpc3QgfHwgZm9jdXNDb250cm9sID09IHRleHQpIHJldHVybjsKLQkJCWhhc0ZvY3VzID0gZmFsc2U7Ci0JCQlTaGVsbCBzaGVsbCA9IGdldFNoZWxsICgpOwotCQkJc2hlbGwucmVtb3ZlTGlzdGVuZXIoU1dULkRlYWN0aXZhdGUsIGxpc3RlbmVyKTsKLQkJCURpc3BsYXkgZGlzcGxheSA9IGdldERpc3BsYXkgKCk7Ci0JCQlkaXNwbGF5LnJlbW92ZUZpbHRlciAoU1dULkZvY3VzSW4sIGZpbHRlcik7Ci0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuRm9jdXNPdXQsIGUpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0vKioKLSAqIFNlYXJjaGVzIHRoZSByZWNlaXZlcidzIGxpc3Qgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGl0ZW0KLSAqIChpbmRleCAwKSB1bnRpbCBhbiBpdGVtIGlzIGZvdW5kIHRoYXQgaXMgZXF1YWwgdG8gdGhlIAotICogYXJndW1lbnQsIGFuZCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGF0IGl0ZW0uIElmIG5vIGl0ZW0KLSAqIGlzIGZvdW5kLCByZXR1cm5zIC0xLgotICoKLSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNlYXJjaCBpdGVtCi0gKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgaXRlbQotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgaW50IGluZGV4T2YgKFN0cmluZyBzdHJpbmcpIHsKLQljaGVja1dpZGdldCAoKTsKLQlpZiAoc3RyaW5nID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCXJldHVybiBsaXN0LmluZGV4T2YgKHN0cmluZyk7Ci19Ci0vKioKLSAqIFNlYXJjaGVzIHRoZSByZWNlaXZlcidzIGxpc3Qgc3RhcnRpbmcgYXQgdGhlIGdpdmVuLCAKLSAqIHplcm8tcmVsYXRpdmUgaW5kZXggdW50aWwgYW4gaXRlbSBpcyBmb3VuZCB0aGF0IGlzIGVxdWFsCi0gKiB0byB0aGUgYXJndW1lbnQsIGFuZCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGF0IGl0ZW0uIElmCi0gKiBubyBpdGVtIGlzIGZvdW5kIG9yIHRoZSBzdGFydGluZyBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsCi0gKiByZXR1cm5zIC0xLgotICoKLSAqIEBwYXJhbSBzdHJpbmcgdGhlIHNlYXJjaCBpdGVtCi0gKiBAcGFyYW0gc3RhcnQgdGhlIHplcm8tcmVsYXRpdmUgaW5kZXggYXQgd2hpY2ggdG8gYmVnaW4gdGhlIHNlYXJjaAotICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBzdHJpbmcgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGludCBpbmRleE9mIChTdHJpbmcgc3RyaW5nLCBpbnQgc3RhcnQpIHsKLQljaGVja1dpZGdldCAoKTsKLQlpZiAoc3RyaW5nID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCXJldHVybiBsaXN0LmluZGV4T2YgKHN0cmluZywgc3RhcnQpOwotfQotCi12b2lkIGluaXRBY2Nlc3NpYmxlKCkgewotCUFjY2Vzc2libGVBZGFwdGVyIGFjY2Vzc2libGVBZGFwdGVyID0gbmV3IEFjY2Vzc2libGVBZGFwdGVyICgpIHsKLQkJcHVibGljIHZvaWQgZ2V0TmFtZSAoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCVN0cmluZyBuYW1lID0gbnVsbDsKLQkJCUxhYmVsIGxhYmVsID0gZ2V0QXNzb2NpYXRlZExhYmVsICgpOwotCQkJaWYgKGxhYmVsICE9IG51bGwpIHsKLQkJCQluYW1lID0gc3RyaXBNbmVtb25pYyAobGFiZWwuZ2V0VGV4dCgpKTsKLQkJCX0KLQkJCWUucmVzdWx0ID0gbmFtZTsKLQkJfQotCQlwdWJsaWMgdm9pZCBnZXRLZXlib2FyZFNob3J0Y3V0KEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQlTdHJpbmcgc2hvcnRjdXQgPSBudWxsOwotCQkJTGFiZWwgbGFiZWwgPSBnZXRBc3NvY2lhdGVkTGFiZWwgKCk7Ci0JCQlpZiAobGFiZWwgIT0gbnVsbCkgewotCQkJCVN0cmluZyB0ZXh0ID0gbGFiZWwuZ2V0VGV4dCAoKTsKLQkJCQlpZiAodGV4dCAhPSBudWxsKSB7Ci0JCQkJCWNoYXIgbW5lbW9uaWMgPSBfZmluZE1uZW1vbmljICh0ZXh0KTsKLQkJCQkJaWYgKG1uZW1vbmljICE9ICdcMCcpIHsKLQkJCQkJCXNob3J0Y3V0ID0gIkFsdCsiK21uZW1vbmljOyAvLyROT04tTkxTLTEkCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllLnJlc3VsdCA9IHNob3J0Y3V0OwotCQl9Ci0JCXB1YmxpYyB2b2lkIGdldEhlbHAgKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQllLnJlc3VsdCA9IGdldFRvb2xUaXBUZXh0ICgpOwotCQl9Ci0JfTsKLQlnZXRBY2Nlc3NpYmxlICgpLmFkZEFjY2Vzc2libGVMaXN0ZW5lciAoYWNjZXNzaWJsZUFkYXB0ZXIpOwotCXRleHQuZ2V0QWNjZXNzaWJsZSAoKS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIgKGFjY2Vzc2libGVBZGFwdGVyKTsKLQlsaXN0LmdldEFjY2Vzc2libGUgKCkuYWRkQWNjZXNzaWJsZUxpc3RlbmVyIChhY2Nlc3NpYmxlQWRhcHRlcik7Ci0JCi0JYXJyb3cuZ2V0QWNjZXNzaWJsZSAoKS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIgKG5ldyBBY2Nlc3NpYmxlQWRhcHRlcigpIHsKLQkJcHVibGljIHZvaWQgZ2V0TmFtZSAoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCWUucmVzdWx0ID0gaXNEcm9wcGVkICgpID8gU1dULmdldE1lc3NhZ2UgKCJTV1RfQ2xvc2UiKSA6IFNXVC5nZXRNZXNzYWdlICgiU1dUX09wZW4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCX0KLQkJcHVibGljIHZvaWQgZ2V0S2V5Ym9hcmRTaG9ydGN1dCAoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCWUucmVzdWx0ID0gIkFsdCtEb3duIEFycm93IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXB1YmxpYyB2b2lkIGdldEhlbHAgKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQllLnJlc3VsdCA9IGdldFRvb2xUaXBUZXh0ICgpOwotCQl9Ci0JfSk7Ci0KLQlnZXRBY2Nlc3NpYmxlKCkuYWRkQWNjZXNzaWJsZVRleHRMaXN0ZW5lciAobmV3IEFjY2Vzc2libGVUZXh0QWRhcHRlcigpIHsKLQkJcHVibGljIHZvaWQgZ2V0Q2FyZXRPZmZzZXQgKEFjY2Vzc2libGVUZXh0RXZlbnQgZSkgewotCQkJZS5vZmZzZXQgPSB0ZXh0LmdldENhcmV0UG9zaXRpb24gKCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgZ2V0U2VsZWN0aW9uUmFuZ2UoQWNjZXNzaWJsZVRleHRFdmVudCBlKSB7Ci0JCQlQb2ludCBzZWwgPSB0ZXh0LmdldFNlbGVjdGlvbigpOwotCQkJZS5vZmZzZXQgPSBzZWwueDsKLQkJCWUubGVuZ3RoID0gc2VsLnkgLSBzZWwueDsKLQkJfQotCX0pOwotCQotCWdldEFjY2Vzc2libGUoKS5hZGRBY2Nlc3NpYmxlQ29udHJvbExpc3RlbmVyIChuZXcgQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyKCkgewotCQlwdWJsaWMgdm9pZCBnZXRDaGlsZEF0UG9pbnQgKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJUG9pbnQgdGVzdFBvaW50ID0gdG9Db250cm9sIChlLngsIGUueSk7Ci0JCQlpZiAoZ2V0Qm91bmRzICgpLmNvbnRhaW5zICh0ZXN0UG9pbnQpKSB7Ci0JCQkJZS5jaGlsZElEID0gQUNDLkNISUxESURfU0VMRjsKLQkJCX0KLQkJfQotCQkKLQkJcHVibGljIHZvaWQgZ2V0TG9jYXRpb24gKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJUmVjdGFuZ2xlIGxvY2F0aW9uID0gZ2V0Qm91bmRzICgpOwotCQkJUG9pbnQgcHQgPSB0b0Rpc3BsYXkgKGxvY2F0aW9uLngsIGxvY2F0aW9uLnkpOwotCQkJZS54ID0gcHQueDsKLQkJCWUueSA9IHB0Lnk7Ci0JCQllLndpZHRoID0gbG9jYXRpb24ud2lkdGg7Ci0JCQllLmhlaWdodCA9IGxvY2F0aW9uLmhlaWdodDsKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgZ2V0Q2hpbGRDb3VudCAoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQllLmRldGFpbCA9IDA7Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIGdldFJvbGUgKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJZS5kZXRhaWwgPSBBQ0MuUk9MRV9DT01CT0JPWDsKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgZ2V0U3RhdGUgKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJZS5kZXRhaWwgPSBBQ0MuU1RBVEVfTk9STUFMOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgZ2V0VmFsdWUgKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJZS5yZXN1bHQgPSBnZXRUZXh0ICgpOwotCQl9Ci0JfSk7Ci0KLQl0ZXh0LmdldEFjY2Vzc2libGUgKCkuYWRkQWNjZXNzaWJsZUNvbnRyb2xMaXN0ZW5lciAobmV3IEFjY2Vzc2libGVDb250cm9sQWRhcHRlciAoKSB7Ci0JCXB1YmxpYyB2b2lkIGdldFJvbGUgKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJZS5kZXRhaWwgPSB0ZXh0LmdldEVkaXRhYmxlICgpID8gQUNDLlJPTEVfVEVYVCA6IEFDQy5ST0xFX0xBQkVMOwotCQl9Ci0JfSk7Ci0KLQlhcnJvdy5nZXRBY2Nlc3NpYmxlICgpLmFkZEFjY2Vzc2libGVDb250cm9sTGlzdGVuZXIgKG5ldyBBY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIGdldERlZmF1bHRBY3Rpb24gKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJZS5yZXN1bHQgPSBpc0Ryb3BwZWQgKCkgPyBTV1QuZ2V0TWVzc2FnZSAoIlNXVF9DbG9zZSIpIDogU1dULmdldE1lc3NhZ2UgKCJTV1RfT3BlbiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJfQotCX0pOwotfQotYm9vbGVhbiBpc0Ryb3BwZWQgKCkgewotCXJldHVybiBwb3B1cC5nZXRWaXNpYmxlICgpOwotfQotcHVibGljIGJvb2xlYW4gaXNGb2N1c0NvbnRyb2wgKCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKHRleHQuaXNGb2N1c0NvbnRyb2wgKCkgfHwgYXJyb3cuaXNGb2N1c0NvbnRyb2wgKCkgfHwgbGlzdC5pc0ZvY3VzQ29udHJvbCAoKSB8fCBwb3B1cC5pc0ZvY3VzQ29udHJvbCAoKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9IAotCXJldHVybiBzdXBlci5pc0ZvY3VzQ29udHJvbCAoKTsKLX0KLQotcHVibGljIHZvaWQgc2V0VGV4dEluZGVudChpbnQgaW5kZW50KSB7Ci0JdGV4dEluZGVudCA9IGluZGVudDsKLX0KLQotdm9pZCBpbnRlcm5hbExheW91dCAoYm9vbGVhbiBjaGFuZ2VkKSB7Ci0JaWYgKGlzRHJvcHBlZCAoKSkgZHJvcERvd24gKGZhbHNlKTsKLQlSZWN0YW5nbGUgcmVjdCA9IGdldENsaWVudEFyZWEgKCk7Ci0JaW50IHdpZHRoID0gcmVjdC53aWR0aDsKLQlpbnQgaGVpZ2h0ID0gcmVjdC5oZWlnaHQ7Ci0JUG9pbnQgYXJyb3dTaXplID0gYXJyb3cuY29tcHV0ZVNpemUgKFNXVC5ERUZBVUxULCBoZWlnaHQsIGNoYW5nZWQpOwotCi0JdGV4dC5wYWNrKCk7Ci0JaW50IHRleHRIZWlnaHQgPSB0ZXh0LmdldEJvdW5kcygpLmhlaWdodDsKLQlpbnQgdGV4dFggPSB0ZXh0SW5kZW50OwotCWludCB0ZXh0WSA9IChoZWlnaHQgLSB0ZXh0SGVpZ2h0KSAvIDI7Ci0JdGV4dC5zZXRMb2NhdGlvbih0ZXh0WCwgdGV4dFkpOwotCQotCWFycm93LnNldEJvdW5kcyAod2lkdGggLSBhcnJvd1NpemUueCwgMCwgYXJyb3dTaXplLngsIGFycm93U2l6ZS55KTsKLX0KLXZvaWQgbGlzdEV2ZW50IChFdmVudCBldmVudCkgewotCXN3aXRjaCAoZXZlbnQudHlwZSkgewotCQljYXNlIFNXVC5EaXNwb3NlOgotCQkJaWYgKGdldFNoZWxsICgpICE9IHBvcHVwLmdldFBhcmVudCAoKSkgewotCQkJCVN0cmluZ1tdIGl0ZW1zID0gbGlzdC5nZXRJdGVtcyAoKTsKLQkJCQlpbnQgc2VsZWN0aW9uSW5kZXggPSBsaXN0LmdldFNlbGVjdGlvbkluZGV4ICgpOwotCQkJCXBvcHVwID0gbnVsbDsKLQkJCQlsaXN0ID0gbnVsbDsKLQkJCQljcmVhdGVQb3B1cCAoaXRlbXMsIHNlbGVjdGlvbkluZGV4KTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNXVC5Gb2N1c0luOiB7Ci0JCQloYW5kbGVGb2N1cyAoU1dULkZvY3VzSW4pOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuTW91c2VVcDogewotCQkJaWYgKGV2ZW50LmJ1dHRvbiAhPSAxKSByZXR1cm47Ci0JCQlkcm9wRG93biAoZmFsc2UpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuU2VsZWN0aW9uOiB7Ci0JCQlpbnQgaW5kZXggPSBsaXN0LmdldFNlbGVjdGlvbkluZGV4ICgpOwotCQkJaWYgKGluZGV4ID09IC0xKSByZXR1cm47Ci0JCQl0ZXh0LnNldFRleHQgKGxpc3QuZ2V0SXRlbSAoaW5kZXgpKTsKLS8vCQkJdGV4dC5zZWxlY3RBbGwgKCk7Ci0JCQlsaXN0LnNldFNlbGVjdGlvbiAoaW5kZXgpOwotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQllLnN0YXRlTWFzayA9IGV2ZW50LnN0YXRlTWFzazsKLQkJCWUuZG9pdCA9IGV2ZW50LmRvaXQ7Ci0JCQlpZiAoIWlzRHJvcHBlZCgpKSB7Ci0JCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuU2VsZWN0aW9uLCBlKTsKLQkJCX0KLQkJCWV2ZW50LmRvaXQgPSBlLmRvaXQ7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5UcmF2ZXJzZTogewotCQkJc3dpdGNoIChldmVudC5kZXRhaWwpIHsKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9SRVRVUk46Ci0JCQkJY2FzZSBTV1QuVFJBVkVSU0VfRVNDQVBFOgotCQkJCWNhc2UgU1dULlRSQVZFUlNFX0FSUk9XX1BSRVZJT1VTOgotCQkJCWNhc2UgU1dULlRSQVZFUlNFX0FSUk9XX05FWFQ6Ci0JCQkJCWV2ZW50LmRvaXQgPSBmYWxzZTsKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuZGV0YWlsID0gZXZlbnQuZGV0YWlsOwotCQkJZS5kb2l0ID0gZXZlbnQuZG9pdDsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULlRyYXZlcnNlLCBlKTsKLQkJCWV2ZW50LmRvaXQgPSBlLmRvaXQ7Ci0JCQlldmVudC5kZXRhaWwgPSBlLmRldGFpbDsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULktleVVwOiB7CQkKLQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJZS5jaGFyYWN0ZXIgPSBldmVudC5jaGFyYWN0ZXI7Ci0JCQllLmtleUNvZGUgPSBldmVudC5rZXlDb2RlOwotCQkJZS5zdGF0ZU1hc2sgPSBldmVudC5zdGF0ZU1hc2s7Ci0JCQkKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULktleVVwLCBlKTsKLQkJCQotCQkJCi0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5LZXlEb3duOiB7Ci0JCQlpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5FU0MpIHsgCi0JCQkJLy8gRXNjYXBlIGtleSBjYW5jZWxzIHBvcHVwIGxpc3QKLQkJCQlkcm9wRG93biAoZmFsc2UpOwotCQkJfQotCQkJaWYgKChldmVudC5zdGF0ZU1hc2sgJiBTV1QuQUxUKSAhPSAwICYmIChldmVudC5rZXlDb2RlID09IFNXVC5BUlJPV19VUCB8fCBldmVudC5rZXlDb2RlID09IFNXVC5BUlJPV19ET1dOKSkgewotCQkJCWRyb3BEb3duIChmYWxzZSk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChldmVudC5jaGFyYWN0ZXIgPT0gU1dULkNSKSB7Ci0JCQkJLy8gRW50ZXIgY2F1c2VzIGRlZmF1bHQgc2VsZWN0aW9uCi0JCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQkJZS5zdGF0ZU1hc2sgPSBldmVudC5zdGF0ZU1hc2s7Ci0JCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuRGVmYXVsdFNlbGVjdGlvbiwgZSk7Ci0JCQl9Ci0JCQkvLyBBdCB0aGlzIHBvaW50IHRoZSB3aWRnZXQgbWF5IGhhdmUgYmVlbiBkaXNwb3NlZC4KLQkJCS8vIElmIHNvLCBkbyBub3QgY29udGludWUuCi0JCQlpZiAoaXNEaXNwb3NlZCAoKSkgYnJlYWs7Ci0JCQlFdmVudCBlID0gbmV3IEV2ZW50KCk7Ci0JCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJZS5jaGFyYWN0ZXIgPSBldmVudC5jaGFyYWN0ZXI7Ci0JCQllLmtleUNvZGUgPSBldmVudC5rZXlDb2RlOwotCQkJZS5zdGF0ZU1hc2sgPSBldmVudC5zdGF0ZU1hc2s7Ci0JCQlub3RpZnlMaXN0ZW5lcnMoU1dULktleURvd24sIGUpOwotCQkJYnJlYWs7Ci0JCQkKLQkJfQotCX0KLX0KLQotdm9pZCBwb3B1cEV2ZW50KEV2ZW50IGV2ZW50KSB7Ci0Jc3dpdGNoIChldmVudC50eXBlKSB7Ci0JCWNhc2UgU1dULlBhaW50OgotCQkJLy8gZHJhdyBibGFjayByZWN0YW5nbGUgYXJvdW5kIGxpc3QKLQkJCVJlY3RhbmdsZSBsaXN0UmVjdCA9IGxpc3QuZ2V0Qm91bmRzKCk7Ci0JCQlDb2xvciBibGFjayA9IGdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfQkxBQ0spOwotCQkJZXZlbnQuZ2Muc2V0Rm9yZWdyb3VuZChibGFjayk7Ci0JCQlldmVudC5nYy5kcmF3UmVjdGFuZ2xlKDAsIDAsIGxpc3RSZWN0LndpZHRoICsgMSwgbGlzdFJlY3QuaGVpZ2h0ICsgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTV1QuQ2xvc2U6Ci0JCQlldmVudC5kb2l0ID0gZmFsc2U7Ci0JCQlkcm9wRG93biAoZmFsc2UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1dULkRlYWN0aXZhdGU6Ci0JCQlkcm9wRG93biAoZmFsc2UpOwotCQkJYnJlYWs7Ci0JfQotfQotcHVibGljIHZvaWQgcmVkcmF3ICgpIHsKLQlzdXBlci5yZWRyYXcoKTsKLQl0ZXh0LnJlZHJhdygpOwotCWFycm93LnJlZHJhdygpOwotCWlmIChwb3B1cC5pc1Zpc2libGUoKSkgbGlzdC5yZWRyYXcoKTsKLX0KLXB1YmxpYyB2b2lkIHJlZHJhdyAoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2xlYW4gYWxsKSB7Ci0Jc3VwZXIucmVkcmF3KHgsIHksIHdpZHRoLCBoZWlnaHQsIHRydWUpOwotfQotCi0vKioKLSAqIFJlbW92ZXMgdGhlIGl0ZW0gZnJvbSB0aGUgcmVjZWl2ZXIncyBsaXN0IGF0IHRoZSBnaXZlbgotICogemVyby1yZWxhdGl2ZSBpbmRleC4KLSAqCi0gKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IGZvciB0aGUgaXRlbQotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9JTlZBTElEX1JBTkdFIC0gaWYgdGhlIGluZGV4IGlzIG5vdCBiZXR3ZWVuIDAgYW5kIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QgbWludXMgMSAoaW5jbHVzaXZlKTwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgcmVtb3ZlIChpbnQgaW5kZXgpIHsKLQljaGVja1dpZGdldCgpOwotCWxpc3QucmVtb3ZlIChpbmRleCk7Ci19Ci0vKioKLSAqIFJlbW92ZXMgdGhlIGl0ZW1zIGZyb20gdGhlIHJlY2VpdmVyJ3MgbGlzdCB3aGljaCBhcmUKLSAqIGJldHdlZW4gdGhlIGdpdmVuIHplcm8tcmVsYXRpdmUgc3RhcnQgYW5kIGVuZCAKLSAqIGluZGljZXMgKGluY2x1c2l2ZSkuCi0gKgotICogQHBhcmFtIHN0YXJ0IHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UKLSAqIEBwYXJhbSBlbmQgdGhlIGVuZCBvZiB0aGUgcmFuZ2UKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfSU5WQUxJRF9SQU5HRSAtIGlmIGVpdGhlciB0aGUgc3RhcnQgb3IgZW5kIGFyZSBub3QgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IG1pbnVzIDEgKGluY2x1c2l2ZSk8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyB2b2lkIHJlbW92ZSAoaW50IHN0YXJ0LCBpbnQgZW5kKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlsaXN0LnJlbW92ZSAoc3RhcnQsIGVuZCk7Ci19Ci0vKioKLSAqIFNlYXJjaGVzIHRoZSByZWNlaXZlcidzIGxpc3Qgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGl0ZW0KLSAqIHVudGlsIGFuIGl0ZW0gaXMgZm91bmQgdGhhdCBpcyBlcXVhbCB0byB0aGUgYXJndW1lbnQsIAotICogYW5kIHJlbW92ZXMgdGhhdCBpdGVtIGZyb20gdGhlIGxpc3QuCi0gKgotICogQHBhcmFtIHN0cmluZyB0aGUgaXRlbSB0byByZW1vdmUKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBzdHJpbmcgaXMgbnVsbDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfSU5WQUxJRF9BUkdVTUVOVCAtIGlmIHRoZSBzdHJpbmcgaXMgbm90IGZvdW5kIGluIHRoZSBsaXN0PC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCByZW1vdmUgKFN0cmluZyBzdHJpbmcpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChzdHJpbmcgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JbGlzdC5yZW1vdmUgKHN0cmluZyk7Ci19Ci0vKioKLSAqIFJlbW92ZXMgYWxsIG9mIHRoZSBpdGVtcyBmcm9tIHRoZSByZWNlaXZlcidzIGxpc3QgYW5kIGNsZWFyIHRoZQotICogY29udGVudHMgb2YgcmVjZWl2ZXIncyB0ZXh0IGZpZWxkLgotICogPHA+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCByZW1vdmVBbGwgKCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JdGV4dC5zZXRUZXh0ICgiIik7IC8vJE5PTi1OTFMtMSQKLQlsaXN0LnJlbW92ZUFsbCAoKTsKLX0KLS8qKgotICogUmVtb3ZlcyB0aGUgbGlzdGVuZXIgZnJvbSB0aGUgY29sbGVjdGlvbiBvZiBsaXN0ZW5lcnMgd2hvIHdpbGwKLSAqIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHJlY2VpdmVyJ3MgdGV4dCBpcyBtb2RpZmllZC4KLSAqCi0gKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHdoaWNoIHNob3VsZCBubyBsb25nZXIgYmUgbm90aWZpZWQKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBsaXN0ZW5lciBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgTW9kaWZ5TGlzdGVuZXIKLSAqIEBzZWUgI2FkZE1vZGlmeUxpc3RlbmVyCi0gKi8KLXB1YmxpYyB2b2lkIHJlbW92ZU1vZGlmeUxpc3RlbmVyIChNb2RpZnlMaXN0ZW5lciBsaXN0ZW5lcikgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKGxpc3RlbmVyID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCXJlbW92ZUxpc3RlbmVyKFNXVC5Nb2RpZnksIGxpc3RlbmVyKTsJCi19Ci0vKioKLSAqIFJlbW92ZXMgdGhlIGxpc3RlbmVyIGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgbGlzdGVuZXJzIHdobyB3aWxsCi0gKiBiZSBub3RpZmllZCB3aGVuIHRoZSByZWNlaXZlcidzIHNlbGVjdGlvbiBjaGFuZ2VzLgotICoKLSAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgd2hpY2ggc2hvdWxkIG5vIGxvbmdlciBiZSBub3RpZmllZAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIGxpc3RlbmVyIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSBTZWxlY3Rpb25MaXN0ZW5lcgotICogQHNlZSAjYWRkU2VsZWN0aW9uTGlzdGVuZXIKLSAqLwotcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uTGlzdGVuZXIgKFNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAobGlzdGVuZXIgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JcmVtb3ZlTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXIpOwotCXJlbW92ZUxpc3RlbmVyKFNXVC5EZWZhdWx0U2VsZWN0aW9uLGxpc3RlbmVyKTsJCi19Ci0vKioKLSAqIFNlbGVjdHMgdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIHplcm8tcmVsYXRpdmUgaW5kZXggaW4gdGhlIHJlY2VpdmVyJ3MgCi0gKiBsaXN0LiAgSWYgdGhlIGl0ZW0gYXQgdGhlIGluZGV4IHdhcyBhbHJlYWR5IHNlbGVjdGVkLCBpdCByZW1haW5zCi0gKiBzZWxlY3RlZC4gSW5kaWNlcyB0aGF0IGFyZSBvdXQgb2YgcmFuZ2UgYXJlIGlnbm9yZWQuCi0gKgotICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byBzZWxlY3QKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZWxlY3QgKGludCBpbmRleCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKGluZGV4ID09IC0xKSB7Ci0JCWxpc3QuZGVzZWxlY3RBbGwgKCk7Ci0JCXRleHQuc2V0VGV4dCAoIiIpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybjsKLQl9Ci0JaWYgKDAgPD0gaW5kZXggJiYgaW5kZXggPCBsaXN0LmdldEl0ZW1Db3VudCgpKSB7Ci0JCWlmIChpbmRleCAhPSBnZXRTZWxlY3Rpb25JbmRleCgpKSB7Ci0JCQl0ZXh0LnNldFRleHQgKGxpc3QuZ2V0SXRlbSAoaW5kZXgpKTsKLS8vCQkJdGV4dC5zZWxlY3RBbGwgKCk7Ci0JCQlsaXN0LnNlbGVjdCAoaW5kZXgpOwotCQkJbGlzdC5zaG93U2VsZWN0aW9uICgpOwotCQl9Ci0JfQotfQotcHVibGljIHZvaWQgc2V0QmFja2dyb3VuZCAoQ29sb3IgY29sb3IpIHsKLQlzdXBlci5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLQliYWNrZ3JvdW5kID0gY29sb3I7Ci0JaWYgKHRleHQgIT0gbnVsbCkgdGV4dC5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLQlpZiAobGlzdCAhPSBudWxsKSBsaXN0LnNldEJhY2tncm91bmQoY29sb3IpOwotCWlmIChhcnJvdyAhPSBudWxsKSBhcnJvdy5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLX0KLS8qKgotICogU2V0cyB0aGUgZWRpdGFibGUgc3RhdGUuCi0gKgotICogQHBhcmFtIGVkaXRhYmxlIHRoZSBuZXcgZWRpdGFibGUgc3RhdGUKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICogCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyB2b2lkIHNldEVkaXRhYmxlIChib29sZWFuIGVkaXRhYmxlKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JdGV4dC5zZXRFZGl0YWJsZShlZGl0YWJsZSk7Ci19Ci1wdWJsaWMgdm9pZCBzZXRFbmFibGVkIChib29sZWFuIGVuYWJsZWQpIHsKLQlzdXBlci5zZXRFbmFibGVkKGVuYWJsZWQpOwotCWlmIChwb3B1cCAhPSBudWxsKSBwb3B1cC5zZXRWaXNpYmxlIChmYWxzZSk7Ci0JaWYgKHRleHQgIT0gbnVsbCkgdGV4dC5zZXRFbmFibGVkKGVuYWJsZWQpOwotCWlmIChhcnJvdyAhPSBudWxsKSBhcnJvdy5zZXRFbmFibGVkKGVuYWJsZWQpOwotfQotcHVibGljIGJvb2xlYW4gc2V0Rm9jdXMgKCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JcmV0dXJuIHRleHQuc2V0Rm9jdXMgKCk7Ci19Ci1wdWJsaWMgdm9pZCBzZXRGb250IChGb250IGZvbnQpIHsKLQlzdXBlci5zZXRGb250IChmb250KTsKLQl0aGlzLmZvbnQgPSBmb250OwotCXRleHQuc2V0Rm9udCAoZm9udCk7Ci0JbGlzdC5zZXRGb250IChmb250KTsKLQlpbnRlcm5hbExheW91dCAodHJ1ZSk7Ci19Ci1wdWJsaWMgdm9pZCBzZXRGb3JlZ3JvdW5kIChDb2xvciBjb2xvcikgewotCXN1cGVyLnNldEZvcmVncm91bmQoY29sb3IpOwotCWZvcmVncm91bmQgPSBjb2xvcjsKLQlpZiAodGV4dCAhPSBudWxsKSB0ZXh0LnNldEZvcmVncm91bmQoY29sb3IpOwotCWlmIChsaXN0ICE9IG51bGwpIGxpc3Quc2V0Rm9yZWdyb3VuZChjb2xvcik7Ci0JaWYgKGFycm93ICE9IG51bGwpIGFycm93LnNldEZvcmVncm91bmQoY29sb3IpOwotfQotLyoqCi0gKiBTZXRzIHRoZSB0ZXh0IG9mIHRoZSBpdGVtIGluIHRoZSByZWNlaXZlcidzIGxpc3QgYXQgdGhlIGdpdmVuCi0gKiB6ZXJvLXJlbGF0aXZlIGluZGV4IHRvIHRoZSBzdHJpbmcgYXJndW1lbnQuIFRoaXMgaXMgZXF1aXZhbGVudAotICogdG8gPGNvZGU+cmVtb3ZlPC9jb2RlPidpbmcgdGhlIG9sZCBpdGVtIGF0IHRoZSBpbmRleCwgYW5kIHRoZW4KLSAqIDxjb2RlPmFkZDwvY29kZT4naW5nIHRoZSBuZXcgaXRlbSBhdCB0aGF0IGluZGV4LgotICoKLSAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggZm9yIHRoZSBpdGVtCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBuZXcgdGV4dCBmb3IgdGhlIGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfSU5WQUxJRF9SQU5HRSAtIGlmIHRoZSBpbmRleCBpcyBub3QgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IG1pbnVzIDEgKGluY2x1c2l2ZSk8L2xpPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyB2b2lkIHNldEl0ZW0gKGludCBpbmRleCwgU3RyaW5nIHN0cmluZykgewotCWNoZWNrV2lkZ2V0KCk7Ci0JbGlzdC5zZXRJdGVtIChpbmRleCwgc3RyaW5nKTsKLX0KLS8qKgotICogU2V0cyB0aGUgcmVjZWl2ZXIncyBsaXN0IHRvIGJlIHRoZSBnaXZlbiBhcnJheSBvZiBpdGVtcy4KLSAqCi0gKiBAcGFyYW0gaXRlbXMgdGhlIGFycmF5IG9mIGl0ZW1zCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgaXRlbXMgYXJyYXkgaXMgbnVsbDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfSU5WQUxJRF9BUkdVTUVOVCAtIGlmIGFuIGl0ZW0gaW4gdGhlIGl0ZW1zIGFycmF5IGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyB2b2lkIHNldEl0ZW1zIChTdHJpbmcgW10gaXRlbXMpIHsKLQljaGVja1dpZGdldCAoKTsKLQlsaXN0LnNldEl0ZW1zIChpdGVtcyk7Ci0JaWYgKCF0ZXh0LmdldEVkaXRhYmxlICgpKSB0ZXh0LnNldFRleHQgKCIiKTsgLy8kTk9OLU5MUy0xJAotfQotLyoqCi0gKiBTZXRzIHRoZSBsYXlvdXQgd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWNlaXZlciB0byBiZQotICogdGhlIGFyZ3VtZW50IHdoaWNoIG1heSBiZSBudWxsLgotICogPHA+Ci0gKiBOb3RlOiBObyBMYXlvdXQgY2FuIGJlIHNldCBvbiB0aGlzIENvbnRyb2wgYmVjYXVzZSBpdCBhbHJlYWR5Ci0gKiBtYW5hZ2VzIHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiBpdHMgY2hpbGRyZW4uCi0gKiA8L3A+Ci0gKgotICogQHBhcmFtIGxheW91dCB0aGUgcmVjZWl2ZXIncyBuZXcgbGF5b3V0IG9yIG51bGwKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRMYXlvdXQgKExheW91dCBsYXlvdXQpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm47Ci19Ci1wdWJsaWMgdm9pZCBzZXRNZW51KE1lbnUgbWVudSkgewotCXRleHQuc2V0TWVudShtZW51KTsKLX0KLS8qKgotICogU2V0cyB0aGUgc2VsZWN0aW9uIGluIHRoZSByZWNlaXZlcidzIHRleHQgZmllbGQgdG8gdGhlCi0gKiByYW5nZSBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50IHdob3NlIHggY29vcmRpbmF0ZSBpcyB0aGUKLSAqIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24gYW5kIHdob3NlIHkgY29vcmRpbmF0ZSBpcyB0aGUgZW5kCi0gKiBvZiB0aGUgc2VsZWN0aW9uLiAKLSAqCi0gKiBAcGFyYW0gc2VsZWN0aW9uIGEgcG9pbnQgcmVwcmVzZW50aW5nIHRoZSBuZXcgc2VsZWN0aW9uIHN0YXJ0IGFuZCBlbmQKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBwb2ludCBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24gKFBvaW50IHNlbGVjdGlvbikgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKHNlbGVjdGlvbiA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQl0ZXh0LnNldFNlbGVjdGlvbiAoc2VsZWN0aW9uLngsIHNlbGVjdGlvbi55KTsKLX0KLQotLyoqCi0gKiBTZXRzIHRoZSBjb250ZW50cyBvZiB0aGUgcmVjZWl2ZXIncyB0ZXh0IGZpZWxkIHRvIHRoZQotICogZ2l2ZW4gc3RyaW5nLgotICogPHA+Ci0gKiBOb3RlOiBUaGUgdGV4dCBmaWVsZCBpbiBhIDxjb2RlPkNvbWJvPC9jb2RlPiBpcyB0eXBpY2FsbHkKLSAqIG9ubHkgY2FwYWJsZSBvZiBkaXNwbGF5aW5nIGEgc2luZ2xlIGxpbmUgb2YgdGV4dC4gVGh1cywKLSAqIHNldHRpbmcgdGhlIHRleHQgdG8gYSBzdHJpbmcgY29udGFpbmluZyBsaW5lIGJyZWFrcyBvcgotICogb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzIHdpbGwgcHJvYmFibHkgY2F1c2UgaXQgdG8gCi0gKiBkaXNwbGF5IGluY29ycmVjdGx5LgotICogPC9wPgotICoKLSAqIEBwYXJhbSBzdHJpbmcgdGhlIG5ldyB0ZXh0Ci0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyB2b2lkIHNldFRleHQgKFN0cmluZyBzdHJpbmcpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChzdHJpbmcgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JaW50IGluZGV4ID0gbGlzdC5pbmRleE9mIChzdHJpbmcpOwotCWlmIChpbmRleCA9PSAtMSkgewotCQlsaXN0LmRlc2VsZWN0QWxsICgpOwotCQl0ZXh0LnNldFRleHQgKHN0cmluZyk7Ci0JCXJldHVybjsKLQl9Ci0JdGV4dC5zZXRUZXh0IChzdHJpbmcpOwotLy8JdGV4dC5zZWxlY3RBbGwgKCk7Ci0JbGlzdC5zZXRTZWxlY3Rpb24gKGluZGV4KTsKLQlsaXN0LnNob3dTZWxlY3Rpb24gKCk7Ci19Ci0vKioKLSAqIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB0aGUgcmVjZWl2ZXIncwotICogdGV4dCBmaWVsZCBpcyBjYXBhYmxlIG9mIGhvbGRpbmcgdG8gYmUgdGhlIGFyZ3VtZW50LgotICoKLSAqIEBwYXJhbSBsaW1pdCBuZXcgdGV4dCBsaW1pdAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9DQU5OT1RfQkVfWkVSTyAtIGlmIHRoZSBsaW1pdCBpcyB6ZXJvPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRUZXh0TGltaXQgKGludCBsaW1pdCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JdGV4dC5zZXRUZXh0TGltaXQgKGxpbWl0KTsKLX0KLQotcHVibGljIHZvaWQgc2V0VG9vbFRpcFRleHQgKFN0cmluZyBzdHJpbmcpIHsKLQljaGVja1dpZGdldCgpOwotCXN1cGVyLnNldFRvb2xUaXBUZXh0KHN0cmluZyk7Ci0JYXJyb3cuc2V0VG9vbFRpcFRleHQgKHN0cmluZyk7Ci0JdGV4dC5zZXRUb29sVGlwVGV4dCAoc3RyaW5nKTsJCQotfQotCi1wdWJsaWMgdm9pZCBzZXRWaXNpYmxlIChib29sZWFuIHZpc2libGUpIHsKLQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOwotCWlmICghdmlzaWJsZSkgcG9wdXAuc2V0VmlzaWJsZShmYWxzZSk7Ci19Ci0vKioKLSAqIFNldHMgdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGFyZSB2aXNpYmxlIGluIHRoZSBkcm9wCi0gKiBkb3duIHBvcnRpb24gb2YgdGhlIHJlY2VpdmVyJ3MgbGlzdC4KLSAqCi0gKiBAcGFyYW0gY291bnQgdGhlIG5ldyBudW1iZXIgb2YgaXRlbXMgdG8gYmUgdmlzaWJsZQotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKiAKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIHZvaWQgc2V0VmlzaWJsZUl0ZW1Db3VudCAoaW50IGNvdW50KSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JaWYgKGNvdW50IDwgMCkgcmV0dXJuOwotCXZpc2libGVJdGVtQ291bnQgPSBjb3VudDsKLX0KLVN0cmluZyBzdHJpcE1uZW1vbmljIChTdHJpbmcgc3RyaW5nKSB7Ci0JaW50IGluZGV4ID0gMDsKLQlpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCAoKTsKLQlkbyB7Ci0JCXdoaWxlICgoaW5kZXggPCBsZW5ndGgpICYmIChzdHJpbmcuY2hhckF0IChpbmRleCkgIT0gJyYnKSkgaW5kZXgrKzsKLQkJaWYgKCsraW5kZXggPj0gbGVuZ3RoKSByZXR1cm4gc3RyaW5nOwotCQlpZiAoc3RyaW5nLmNoYXJBdCAoaW5kZXgpICE9ICcmJykgewotCQkJcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgtMSkgKyBzdHJpbmcuc3Vic3RyaW5nKGluZGV4LCBsZW5ndGgpOwotCQl9Ci0JCWluZGV4Kys7Ci0JfSB3aGlsZSAoaW5kZXggPCBsZW5ndGgpOwotIAlyZXR1cm4gc3RyaW5nOwotfQotdm9pZCB0ZXh0RXZlbnQgKEV2ZW50IGV2ZW50KSB7Ci0Jc3dpdGNoIChldmVudC50eXBlKSB7Ci0JCWNhc2UgU1dULkZvY3VzSW46IHsKLQkJCWhhbmRsZUZvY3VzIChTV1QuRm9jdXNJbik7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5LZXlEb3duOiB7Ci0JCQlpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5DUikgewotCQkJCWRyb3BEb3duIChmYWxzZSk7Ci0JCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULkRlZmF1bHRTZWxlY3Rpb24sIGUpOwotCQkJfQotCQkJLy9BdCB0aGlzIHBvaW50IHRoZSB3aWRnZXQgbWF5IGhhdmUgYmVlbiBkaXNwb3NlZC4KLQkJCS8vIElmIHNvLCBkbyBub3QgY29udGludWUuCi0JCQlpZiAoaXNEaXNwb3NlZCAoKSkgYnJlYWs7Ci0JCQkKLQkJCWlmIChldmVudC5rZXlDb2RlID09IFNXVC5BUlJPV19VUCB8fCBldmVudC5rZXlDb2RlID09IFNXVC5BUlJPV19ET1dOKSB7Ci0JCQkJZXZlbnQuZG9pdCA9IGZhbHNlOwotCQkJCWlmICgoZXZlbnQuc3RhdGVNYXNrICYgU1dULkFMVCkgIT0gMCkgewotCQkJCQlib29sZWFuIGRyb3BwZWQgPSBpc0Ryb3BwZWQgKCk7Ci0vLwkJCQkJdGV4dC5zZWxlY3RBbGwgKCk7Ci0JCQkJCWlmICghZHJvcHBlZCkgc2V0Rm9jdXMgKCk7Ci0JCQkJCWRyb3BEb3duICghZHJvcHBlZCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWludCBvbGRJbmRleCA9IGdldFNlbGVjdGlvbkluZGV4ICgpOwotCQkJCWlmIChldmVudC5rZXlDb2RlID09IFNXVC5BUlJPV19VUCkgewotCQkJCQlzZWxlY3QgKE1hdGgubWF4IChvbGRJbmRleCAtIDEsIDApKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzZWxlY3QgKE1hdGgubWluIChvbGRJbmRleCArIDEsIGdldEl0ZW1Db3VudCAoKSAtIDEpKTsKLQkJCQl9Ci0JCQkJaWYgKG9sZEluZGV4ICE9IGdldFNlbGVjdGlvbkluZGV4ICgpKSB7Ci0JCQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQoKTsKLQkJCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCQkJZS5zdGF0ZU1hc2sgPSBldmVudC5zdGF0ZU1hc2s7Ci0JCQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULlNlbGVjdGlvbiwgZSk7Ci0JCQkJfQotCQkJCS8vQXQgdGhpcyBwb2ludCB0aGUgd2lkZ2V0IG1heSBoYXZlIGJlZW4gZGlzcG9zZWQuCi0JCQkJLy8gSWYgc28sIGRvIG5vdCBjb250aW51ZS4KLQkJCQlpZiAoaXNEaXNwb3NlZCAoKSkgYnJlYWs7Ci0JCQl9Ci0JCQkKLQkJCS8vIEZ1cnRoZXIgd29yayA6IE5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIGluY3JlbWVudGFsIHNlYXJjaCBpbiAKLQkJCS8vIHBvcCB1cCBsaXN0IGFzIGNoYXJhY3RlcnMgdHlwZWQgaW4gdGV4dCB3aWRnZXQKLQkJCQotCi0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJLy9ub3RpZnlMaXN0ZW5lcnMgKFNXVC5LZXlEb3duLCBlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULktleVVwOiB7Ci0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuS2V5VXAsIGUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuTWVudURldGVjdDogewotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5NZW51RGV0ZWN0LCBlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULk1vZGlmeTogewotCQkJbGlzdC5kZXNlbGVjdEFsbCAoKTsKLQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuTW9kaWZ5LCBlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULk1vdXNlRG93bjogewotCQkJaWYgKGV2ZW50LmJ1dHRvbiAhPSAxKSByZXR1cm47Ci0JCQlpZiAodGV4dC5nZXRFZGl0YWJsZSAoKSkgcmV0dXJuOwotCQkJYm9vbGVhbiBkcm9wcGVkID0gaXNEcm9wcGVkICgpOwotLy8JCQl0ZXh0LnNlbGVjdEFsbCAoKTsKLQkJCWlmICghZHJvcHBlZCkgc2V0Rm9jdXMgKCk7Ci0JCQlkcm9wRG93biAoIWRyb3BwZWQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuTW91c2VVcDogewotCQkJaWYgKGV2ZW50LmJ1dHRvbiAhPSAxKSByZXR1cm47Ci0JCQlpZiAodGV4dC5nZXRFZGl0YWJsZSAoKSkgcmV0dXJuOwotLy8JCQl0ZXh0LnNlbGVjdEFsbCAoKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULlRyYXZlcnNlOiB7CQkKLQkJCXN3aXRjaCAoZXZlbnQuZGV0YWlsKSB7Ci0JCQkJY2FzZSBTV1QuVFJBVkVSU0VfUkVUVVJOOgotCQkJCWNhc2UgU1dULlRSQVZFUlNFX0FSUk9XX1BSRVZJT1VTOgotCQkJCWNhc2UgU1dULlRSQVZFUlNFX0FSUk9XX05FWFQ6Ci0JCQkJCS8vIFRoZSBlbnRlciBjYXVzZXMgZGVmYXVsdCBzZWxlY3Rpb24gYW5kCi0JCQkJCS8vIHRoZSBhcnJvdyBrZXlzIGFyZSB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIGxpc3QgY29udGVudHMgc28KLQkJCQkJLy8gZG8gbm90IHVzZSB0aGVtIGZvciB0cmF2ZXJzYWwuCi0JCQkJCWV2ZW50LmRvaXQgPSBmYWxzZTsKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQkKLQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJZS5kZXRhaWwgPSBldmVudC5kZXRhaWw7Ci0JCQllLmRvaXQgPSBldmVudC5kb2l0OwotCQkJZS5jaGFyYWN0ZXIgPSBldmVudC5jaGFyYWN0ZXI7Ci0JCQllLmtleUNvZGUgPSBldmVudC5rZXlDb2RlOwotCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuVHJhdmVyc2UsIGUpOwotCQkJZXZlbnQuZG9pdCA9IGUuZG9pdDsKLQkJCWV2ZW50LmRldGFpbCA9IGUuZGV0YWlsOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0FTRENvbWJvQm94Q2VsbEVkaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDb21ib0JveENlbGxFZGl0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjZjVhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0FTRENvbWJvQm94Q2VsbEVkaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkZvY3VzQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkZvY3VzRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5UcmF2ZXJzZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuVHJhdmVyc2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi0vKgotICogVGhpcyBpcyBhIGNvcHkgb2YgQ29tYm9Cb3hDZWxsRWRpdG9yLgotICogV2UgbmVlZCB0byBhcHBseSBhbmQgZGVhY3RpdmF0ZSB0aGUgY29tYm8gb24gYSBzaW5nbGUgY2xpY2sgKG5vdCBvbiBhIGRvdWJsZSBjbGljayBsaWtlCi0gKiB0aGUgQ29tYm9Cb3hDZWxsRWRpdG9yKS4KLSAqLwotcHVibGljIGNsYXNzIEFTRENvbWJvQm94Q2VsbEVkaXRvciBleHRlbmRzIENlbGxFZGl0b3IgewotCi0gICAgLyoqCi0gICAgICogVGhlIGxpc3Qgb2YgaXRlbXMgdG8gcHJlc2VudCBpbiB0aGUgY29tYm8gYm94LgotICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nW10gaXRlbXM7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbS4KLSAgICAgKi8KLSAgICBpbnQgc2VsZWN0aW9uOwotCi0gICAgLyoqCi0gICAgICogVGhlIGN1c3RvbSBjb21ibyBib3ggY29udHJvbC4KLSAgICAgKi8KLSAgICBBU0RDQ29tYm8gY29tYm9Cb3g7Ci0gICAgcHJpdmF0ZSBPYmplY3Qgc2VsZWN0ZWRWYWx1ZTsKLSAgICBwcml2YXRlIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotICAgIHByaXZhdGUgaW50IHRleHRJbmRlbnQgPSA1OwotCi0gICAgLyoqCi0gICAgICogRGVmYXVsdCBDb21ib0JveENlbGxFZGl0b3Igc3R5bGUKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZGVmYXVsdFN0eWxlID0gU1dULk5PTkU7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGNlbGwgZWRpdG9yIHdpdGggYSBjb21ibyBjb250YWluaW5nIHRoZSBnaXZlbiAKLSAgICAgKiBsaXN0IG9mIGNob2ljZXMgYW5kIHBhcmVudGVkIHVuZGVyIHRoZSBnaXZlbiBjb250cm9sLiBUaGUgY2VsbAotICAgICAqIGVkaXRvciB2YWx1ZSBpcyB0aGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbS4KLSAgICAgKiBJbml0aWFsbHksIHRoZSBjZWxsIGVkaXRvciBoYXMgbm8gY2VsbCB2YWxpZGF0b3IgYW5kCi0gICAgICogdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QgaXMgc2VsZWN0ZWQuIAotICAgICAqCi0gICAgICogQHBhcmFtIHBhcmVudCB0aGUgcGFyZW50IGNvbnRyb2wKLSAgICAgKiBAcGFyYW0gaXRlbXMgdGhlIGxpc3Qgb2Ygc3RyaW5ncyBmb3IgdGhlIGNvbWJvIGJveAotICAgICAqLwotICAgIHB1YmxpYyBBU0RDb21ib0JveENlbGxFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nW10gaXRlbXMsIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyKSB7Ci0gICAgICAgIHN1cGVyKHBhcmVudCwgZGVmYXVsdFN0eWxlKTsKLSAgICAgICAgc2V0SXRlbXMoaXRlbXMpOwotICAgICAgICBjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciA9IGVkaXRNYW5hZ2VyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2hvaWNlcyBmb3IgdGhlIGNvbWJvIGJveAotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgbGlzdCBvZiBjaG9pY2VzIGZvciB0aGUgY29tYm8gYm94Ci0gICAgICovCi0gICAgcHVibGljIFN0cmluZ1tdIGdldEl0ZW1zKCkgewotICAgICAgICByZXR1cm4gdGhpcy5pdGVtczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBsaXN0IG9mIGNob2ljZXMgZm9yIHRoZSBjb21ibyBib3gKLSAgICAgKgotICAgICAqIEBwYXJhbSBpdGVtcyB0aGUgbGlzdCBvZiBjaG9pY2VzIGZvciB0aGUgY29tYm8gYm94Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SXRlbXMoU3RyaW5nW10gaXRlbXMpIHsKLSAgICAgICAgQXNzZXJ0LmlzTm90TnVsbChpdGVtcyk7Ci0gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtczsKLSAgICAgICAgcG9wdWxhdGVDb21ib0JveEl0ZW1zKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldFRleHRJbmRlbnQoaW50IGluZGVudCkgewotICAgIAl0ZXh0SW5kZW50ID0gaW5kZW50OwotICAgIAljb21ib0JveC5zZXRUZXh0SW5kZW50KGluZGVudCk7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIE1ldGhvZCBkZWNsYXJlZCBvbiBDZWxsRWRpdG9yLgotICAgICAqLwotICAgIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotICAgICAgICBjb21ib0JveCA9IG5ldyBBU0RDQ29tYm8ocGFyZW50LCBnZXRTdHlsZSgpKTsKLSAgICAgICAgY29tYm9Cb3guc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLSAgICAgICAgY29tYm9Cb3guc2V0VGV4dEluZGVudCh0ZXh0SW5kZW50KTsKLSAgICAgICAgCi0gICAgICAgIGNvbWJvQm94LmFkZEtleUxpc3RlbmVyKG5ldyBLZXlBZGFwdGVyKCkgewotICAgICAgICAgICAgLy8gaG9vayBrZXkgcHJlc3NlZCAtIHNlZSBQUiAxNDIwMSAgCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBrZXlQcmVzc2VkKEtleUV2ZW50IGUpIHsKLSAgICAgICAgICAgICAgICBrZXlSZWxlYXNlT2NjdXJlZChlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29tYm9Cb3guYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb25NYWRlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAJc2VsZWN0aW9uTWFkZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBjb21ib0JveC5hZGRUcmF2ZXJzZUxpc3RlbmVyKG5ldyBUcmF2ZXJzZUxpc3RlbmVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQga2V5VHJhdmVyc2VkKFRyYXZlcnNlRXZlbnQgZSkgewotICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbCA9PSBTV1QuVFJBVkVSU0VfRVNDQVBFCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBlLmRldGFpbCA9PSBTV1QuVFJBVkVSU0VfUkVUVVJOKSB7Ci0gICAgICAgICAgICAgICAgICAgIGUuZG9pdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29tYm9Cb3guYWRkRm9jdXNMaXN0ZW5lcihuZXcgRm9jdXNBZGFwdGVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgZm9jdXNMb3N0KEZvY3VzRXZlbnQgZSkgewotICAgICAgICAgICAgICAgIEFTRENvbWJvQm94Q2VsbEVkaXRvci50aGlzLmZvY3VzTG9zdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIGNvbWJvQm94OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIE9iamVjdCBpbnZva2VEaWFsb2coSUNvbXBvbmVudERpYWxvZyBkaWFsb2cpIHsKLSAgCSAgT2JqZWN0IG5ld1ZhbHVlID0gbnVsbDsKLSAgCSAgCi0gIAkgIGlmIChkaWFsb2cgPT0gbnVsbCkgewotICAJCSAgcmV0dXJuIG51bGw7Ci0gIAkgIH0KLSAgCSAgCi0gIAkgIGlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotICAJCSAgbmV3VmFsdWUgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLSAgCSAgfQotCi0gIAkgIHJldHVybiBuZXdWYWx1ZTsKLSAgICB9ICAKLQotICAgIC8qKgotICAgICAqIFRoZSA8Y29kZT5Db21ib0JveENlbGxFZGl0b3I8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mCi0gICAgICogdGhpcyA8Y29kZT5DZWxsRWRpdG9yPC9jb2RlPiBmcmFtZXdvcmsgbWV0aG9kIHJldHVybnMKLSAgICAgKiB0aGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3cmFwcGVkCi0gICAgICogIGFzIGFuIDxjb2RlPkludGVnZXI8L2NvZGU+Ci0gICAgICovCi0gICAgcHJvdGVjdGVkIE9iamVjdCBkb0dldFZhbHVlKCkgewotICAgICAgICByZXR1cm4gbmV3IEludGVnZXIoc2VsZWN0aW9uKTsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogTWV0aG9kIGRlY2xhcmVkIG9uIENlbGxFZGl0b3IuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgZG9TZXRGb2N1cygpIHsKLSAgICAgICAgY29tYm9Cb3guc2V0Rm9jdXMoKTsKLSAgICAgICAgY29tYm9Cb3guZHJvcERvd24odHJ1ZSk7Ci0vLyAgICAgICAgU3RyaW5nIGNvbWJvVGV4dCA9IGNvbWJvQm94LmdldFRleHQoKTsKLS8vICAgICAgICBjb21ib0JveC5zZXRUZXh0KCIgICAgICAgICAiICsgY29tYm9UZXh0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgPGNvZGU+Q29tYm9Cb3hDZWxsRWRpdG9yPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAqIHRoaXMgPGNvZGU+Q2VsbEVkaXRvcjwvY29kZT4gZnJhbWV3b3JrIG1ldGhvZCBzZXRzIHRoZSAKLSAgICAgKiBtaW5pbXVtIHdpZHRoIG9mIHRoZSBjZWxsLiAgVGhlIG1pbmltdW0gd2lkdGggaXMgMTAgY2hhcmFjdGVycwotICAgICAqIGlmIDxjb2RlPmNvbWJvQm94PC9jb2RlPiBpcyBub3QgPGNvZGU+bnVsbDwvY29kZT4gb3IgPGNvZGU+ZGlzcG9zZWQ8L2NvZGU+Ci0gICAgICogZWxlcyBpdCBpcyA2MCBwaXhlbHMgdG8gbWFrZSBzdXJlIHRoZSBhcnJvdyBidXR0b24gYW5kIHNvbWUgdGV4dCBpcyB2aXNpYmxlLgotICAgICAqIFRoZSBsaXN0IG9mIENDb21ibyB3aWxsIGJlIHdpZGUgZW5vdWdoIHRvIHNob3cgaXRzIGxvbmdlc3QgaXRlbS4KLSAgICAgKi8KLSAgICBwdWJsaWMgTGF5b3V0RGF0YSBnZXRMYXlvdXREYXRhKCkgewotICAgICAgICBMYXlvdXREYXRhIGxheW91dERhdGEgPSBzdXBlci5nZXRMYXlvdXREYXRhKCk7Ci0gICAgICAgIGlmICgoY29tYm9Cb3ggPT0gbnVsbCkgfHwgY29tYm9Cb3guaXNEaXNwb3NlZCgpKQotICAgICAgICAgICAgbGF5b3V0RGF0YS5taW5pbXVtV2lkdGggPSA2MDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBtYWtlIHRoZSBjb21ib0JveCAxMCBjaGFyYWN0ZXJzIHdpZGUKLSAgICAgICAgICAgIEdDIGdjID0gbmV3IEdDKGNvbWJvQm94KTsKLSAgICAgICAgICAgIGxheW91dERhdGEubWluaW11bVdpZHRoID0gKGdjLmdldEZvbnRNZXRyaWNzKCkKLSAgICAgICAgICAgICAgICAgICAgLmdldEF2ZXJhZ2VDaGFyV2lkdGgoKSAqIDEwKSArIDEwOwotICAgICAgICAgICAgZ2MuZGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsYXlvdXREYXRhOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSA8Y29kZT5Db21ib0JveENlbGxFZGl0b3I8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mCi0gICAgICogdGhpcyA8Y29kZT5DZWxsRWRpdG9yPC9jb2RlPiBmcmFtZXdvcmsgbWV0aG9kCi0gICAgICogYWNjZXB0cyBhIHplcm8tYmFzZWQgaW5kZXggb2YgYSBzZWxlY3Rpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHNlbGVjdGlvbiB3cmFwcGVkCi0gICAgICogICBhcyBhbiA8Y29kZT5JbnRlZ2VyPC9jb2RlPgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGRvU2V0VmFsdWUoT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIEFzc2VydC5pc1RydWUoY29tYm9Cb3ggIT0gbnVsbCAmJiAodmFsdWUgaW5zdGFuY2VvZiBJbnRlZ2VyKSk7Ci0gICAgICAgIHNlbGVjdGlvbiA9ICgoSW50ZWdlcikgdmFsdWUpLmludFZhbHVlKCk7Ci0gICAgICAgIGNvbWJvQm94LnNlbGVjdChzZWxlY3Rpb24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVwZGF0ZXMgdGhlIGxpc3Qgb2YgY2hvaWNlcyBmb3IgdGhlIGNvbWJvIGJveCBmb3IgdGhlIGN1cnJlbnQgY29udHJvbC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcG9wdWxhdGVDb21ib0JveEl0ZW1zKCkgewotICAgICAgICBpZiAoY29tYm9Cb3ggIT0gbnVsbCAmJiBpdGVtcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjb21ib0JveC5yZW1vdmVBbGwoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgY29tYm9Cb3guYWRkKGl0ZW1zW2ldLCBpKTsKLQotICAgICAgICAgICAgc2V0VmFsdWVWYWxpZCh0cnVlKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbiA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBcHBsaWVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmFsdWUgYW5kIGRlYWN0aWF2YXRlcyB0aGUgY2VsbCBlZGl0b3IKLSAgICAgKi8KLSAgICB2b2lkIGFwcGx5RWRpdG9yVmFsdWVBbmREZWFjdGl2YXRlKCkgewotICAgICAgICAvLwltdXN0IHNldCB0aGUgc2VsZWN0aW9uIGJlZm9yZSBnZXR0aW5nIHZhbHVlCi0gICAgICAgIHNlbGVjdGlvbiA9IGNvbWJvQm94LmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICAgIE9iamVjdCBuZXdWYWx1ZSA9IGRvR2V0VmFsdWUoKTsKLSAgICAgICAgbWFya0RpcnR5KCk7Ci0gICAgICAgIGJvb2xlYW4gaXNWYWxpZCA9IGlzQ29ycmVjdChuZXdWYWx1ZSk7Ci0gICAgICAgIHNldFZhbHVlVmFsaWQoaXNWYWxpZCk7Ci0gICAgICAgIGlmICghaXNWYWxpZCkgewotICAgICAgICAgICAgLy8gdHJ5IHRvIGluc2VydCB0aGUgY3VycmVudCB2YWx1ZSBpbnRvIHRoZSBlcnJvciBtZXNzYWdlLgotICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldEVycm9yTWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyBpdGVtc1tzZWxlY3Rpb25dIH0pKTsKLSAgICAgICAgfQotICAgICAgICBmaXJlQXBwbHlFZGl0b3JWYWx1ZSgpOwotICAgICAgICBkZWFjdGl2YXRlKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiAgKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yI2ZvY3VzTG9zdCgpCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgZm9jdXNMb3N0KCkgewotICAgICAgICBpZiAoaXNBY3RpdmF0ZWQoKSkgewotICAgICAgICAgICAgYXBwbHlFZGl0b3JWYWx1ZUFuZERlYWN0aXZhdGUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvciNrZXlSZWxlYXNlT2NjdXJlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50KQotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGtleVJlbGVhc2VPY2N1cmVkKEtleUV2ZW50IGtleUV2ZW50KSB7Ci0gICAgICAgIGlmIChrZXlFdmVudC5jaGFyYWN0ZXIgPT0gJ1x1MDAxYicpIHsgLy8gRXNjYXBlIGNoYXJhY3RlcgotICAgICAgICAgICAgZmlyZUNhbmNlbEVkaXRvcigpOwotICAgICAgICB9IGVsc2UgaWYgKGtleUV2ZW50LmNoYXJhY3RlciA9PSAnXHQnKSB7IC8vIHRhYiBrZXkKLSAgICAgICAgICAgIGFwcGx5RWRpdG9yVmFsdWVBbmREZWFjdGl2YXRlKCk7Ci0gICAgICAgIH0gCi0gICAgfQotICAgIAotICAgIHB1YmxpYyBPYmplY3QgZ2V0U2VsZWN0ZWRWYWx1ZSgpIHsKLSAgICAJcmV0dXJuIHNlbGVjdGVkVmFsdWU7Ci0gICAgfQotICAgIAotICAgIAotICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbk1hZGUoKSB7Ci0gICAgCU9iamVjdCBuZXdWYWx1ZSA9IG51bGw7Ci0gICAgCXNlbGVjdGlvbiA9IGNvbWJvQm94LmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgCVN0cmluZyBzdHJpbmdTZWxlY3Rpb24gPSBpdGVtc1tzZWxlY3Rpb25dOwotICAgIAkKLSAgICAJaWYgKHN0cmluZ1NlbGVjdGlvbi5lcXVhbHMoTWVzc2FnZXMuX1VJX0JVVFRPTl9CUk9XU0UpKSB7IC8vJE5PTi1OTFMtMSQKLSAgICAJCW5ld1ZhbHVlID0gaW52b2tlRGlhbG9nKGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpKTsKLSAgICAJfQotICAgIAllbHNlIGlmIChzdHJpbmdTZWxlY3Rpb24uZXF1YWxzKE1lc3NhZ2VzLl9VSV9CVVRUT05fTkVXKSkgeyAvLyROT04tTkxTLTEkCi0gICAgCQluZXdWYWx1ZSA9IGludm9rZURpYWxvZyhjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5nZXROZXdEaWFsb2coKSk7Ci0gICAgCX0KLQotICAgIAlpZiAobmV3VmFsdWUgPT0gbnVsbCkgewotICAgIAkJaW50IGluZGV4ID0gY29tYm9Cb3guZ2V0U2VsZWN0aW9uSW5kZXgoKTsgICAgICAgICAgICAgIAotICAgIAkJaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgCQkJc2VsZWN0ZWRWYWx1ZSA9IGNvbWJvQm94LmdldEl0ZW0oaW5kZXgpOwotICAgIAkJfQotICAgIAl9Ci0gICAgCWVsc2UgewotICAgIAkJc2VsZWN0ZWRWYWx1ZSA9IG5ld1ZhbHVlOwotICAgIAl9Ci0gICAJCWFwcGx5RWRpdG9yVmFsdWVBbmREZWFjdGl2YXRlKCk7Ci0gICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0NvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQ29tYm9Cb3hDZWxsRWRpdG9yTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDlhYzZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQ29tYm9Cb3hDZWxsRWRpdG9yTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkNlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db21ib0JveENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ2VsbEVkaXRvckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29tYm9Cb3hDZWxsRWRpdG9yTWFuYWdlciBleHRlbmRzIERpcmVjdEVkaXRNYW5hZ2VyCi17Ci0gIHByb3RlY3RlZCBMYWJlbCBsYWJlbDsKLQotICBwdWJsaWMgQ29tYm9Cb3hDZWxsRWRpdG9yTWFuYWdlcihHcmFwaGljYWxFZGl0UGFydCBzb3VyY2UsIExhYmVsIGxhYmVsKQotICB7Ci0JICBzdXBlcihzb3VyY2UsIENvbWJvQm94Q2VsbEVkaXRvci5jbGFzcywgbmV3IEludGVybmFsQ2VsbEVkaXRvckxvY2F0b3IobGFiZWwpKTsKLSAgICB0aGlzLmxhYmVsID0gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBpbml0Q2VsbEVkaXRvcigpIAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIAlTdHJpbmcgaW5pdGlhbExhYmVsVGV4dCA9IGxhYmVsLmdldFRleHQoKTsgICAKLQotICAgIEFTRENDb21ibyBjb21ibyA9IChBU0RDQ29tYm8pZ2V0Q2VsbEVkaXRvcigpLmdldENvbnRyb2woKTsKLSAgIAljb21iby5zZXRGb250KGxhYmVsLmdldEZvbnQoKSk7Ci0gICAgY29tYm8uc2V0Rm9yZWdyb3VuZChsYWJlbC5nZXRGb3JlZ3JvdW5kQ29sb3IoKSk7Ci0gICAgY29tYm8uc2V0QmFja2dyb3VuZChsYWJlbC5nZXRCYWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAgY29tYm8uc2V0VmlzaWJsZUl0ZW1Db3VudCgyMCk7Ci0gICAgY29tYm8uc2V0RWRpdGFibGUoZmFsc2UpOwotCi0gIElDZWxsRWRpdG9yTGlzdGVuZXIgY2VsbEVkaXRvckxpc3RlbmVyID0gbmV3IElDZWxsRWRpdG9yTGlzdGVuZXIoKQotICB7Ci0gICAgcHVibGljIHZvaWQgY2FuY2VsRWRpdG9yKCkKLSAgICB7Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIGFwcGx5RWRpdG9yVmFsdWUoKQotICAgIHsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgZWRpdG9yVmFsdWVDaGFuZ2VkKGJvb2xlYW4gb2xkLCBib29sZWFuIG5ld1N0YXRlKQotICAgIHsKLSAgICB9Ci0gIH07Ci0gIGdldENlbGxFZGl0b3IoKS5hZGRMaXN0ZW5lcihjZWxsRWRpdG9yTGlzdGVuZXIpOwotCi0gICAgU3RyaW5nW10gaXRlbSA9IGNvbWJvLmdldEl0ZW1zKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChpdGVtW2ldLmVxdWFscyhpbml0aWFsTGFiZWxUZXh0KSkKLSAgICAgIHsKLQkgICAgICBnZXRDZWxsRWRpdG9yKCkuc2V0VmFsdWUobmV3IEludGVnZXIoaSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9IAkKLSAgfQkgCi0gICAgICAgICAKLSAgLy8gaGFjay4uLiBmb3Igc29tZSByZWFzb24gdGhlIENvbWJvQm94Q2VsbEVkaXRvciBkb2VzJ3QgZmlyZSBhbiBlZGl0b3JWYWx1ZUNoYW5nZWQgdG8gc2V0IHRoZSBkaXJ0eSBmbGFnCi0gIC8vIHVubGVzcyB3ZSBvdmVyaWRlIHRoaXMgbWV0aG9kIHRvIHJldHVybiB0cnVlLCB0aGUgbWFuYWdlciBpcyBub3Qgbm90aWZpZWQgb2YgY2hhbmdlcyBtYWRlIGluIHRoZSBjZWxsIGVkaXRvcgotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0RpcnR5KCkKLSAgewotCSAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ2VsbEVkaXRvciBjcmVhdGVDZWxsRWRpdG9yT24oQ29tcG9zaXRlIGNvbXBvc2l0ZSkKLSAgeyAKLSAgICBib29sZWFuIGlzTGFiZWxUZXh0SW5MaXN0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgTGlzdCBsaXN0ID0gY29tcHV0ZUNvbWJvQ29udGVudCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyaW5nID0gKFN0cmluZylpLm5leHQoKTsKLSAgICAgIGlmIChzdHJpbmcuZXF1YWxzKGxhYmVsLmdldFRleHQoKSkpCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgaXNMYWJlbFRleHRJbkxpc3QgPSB0cnVlOwotICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSAKLSAgICAgICAgIAotICAgIGlmICghaXNMYWJlbFRleHRJbkxpc3QpCi0gICAgewotICAgICAgbGlzdC5hZGQobGFiZWwuZ2V0VGV4dCgpKTsKLSAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIExpc3Qgc29ydGVkTGlzdCA9IGNvbXB1dGVTb3J0ZWRMaXN0KGxpc3QpOwotICAgIFN0cmluZ1tdIHN0cmluZ0FycmF5ID0gbmV3IFN0cmluZ1tzb3J0ZWRMaXN0LnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJpbmdBcnJheS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBzdHJpbmdBcnJheVtpXSA9IChTdHJpbmcpc29ydGVkTGlzdC5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBjcmVhdGVDZWxsRWRpdG9yKGNvbXBvc2l0ZSwgc3RyaW5nQXJyYXkpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgQ2VsbEVkaXRvciBjcmVhdGVDZWxsRWRpdG9yKENvbXBvc2l0ZSBjb21wb3NpdGUsIFN0cmluZ1tdIHN0cmluZ0FycmF5KQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21ib0JveENlbGxFZGl0b3IoY29tcG9zaXRlLCBzdHJpbmdBcnJheSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgY29tcHV0ZVNvcnRlZExpc3QoTGlzdCBsaXN0KQotICB7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgTGlzdCBjb21wdXRlQ29tYm9Db250ZW50KCk7IAotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHBlcmZvcm1Nb2RpZnkoT2JqZWN0IHZhbHVlKTsKLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIEludGVybmFsQ2VsbEVkaXRvckxvY2F0b3IgaW1wbGVtZW50cyBDZWxsRWRpdG9yTG9jYXRvcgotICB7Ci0gICAgcHJvdGVjdGVkIExhYmVsIGxhYmVsOwotCi0gICAgcHVibGljIEludGVybmFsQ2VsbEVkaXRvckxvY2F0b3IoTGFiZWwgbGFiZWwpCi0gICAgewotICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOwotICAgIH0gICAgICAgICAgICAgICAgICAgCi0KLSAgICBwdWJsaWMgdm9pZCByZWxvY2F0ZShDZWxsRWRpdG9yIGNlbGxlZGl0b3IpIAotICAgIHsKLSAgICAgICAgQVNEQ0NvbWJvIGNvbWJvID0gKEFTRENDb21ibyljZWxsZWRpdG9yLmdldENvbnRyb2woKTsgIAotCSAgICBSZWN0YW5nbGUgbGFiZWxQYXJlbnRCb3VuZHMgPSBsYWJlbC5nZXRQYXJlbnQoKS5nZXRCb3VuZHMoKS5nZXRDb3B5KCk7Ci0JICAgIGxhYmVsLnRyYW5zbGF0ZVRvQWJzb2x1dGUobGFiZWxQYXJlbnRCb3VuZHMpOwotCSAgICAKLQkgICAgaW50IHggPSBsYWJlbFBhcmVudEJvdW5kcy54OwotCSAgICBpbnQgeSA9IGxhYmVsUGFyZW50Qm91bmRzLnk7Ci0JICAgIGludCB3aWR0aEsgPSBsYWJlbFBhcmVudEJvdW5kcy53aWR0aDsKLQkgICAgaW50IGhlaWdodCA9IGxhYmVsUGFyZW50Qm91bmRzLmhlaWdodDsKLQkgICAgY29tYm8uc2V0Qm91bmRzKHgsIHkgKyAxLCB3aWR0aEssIGhlaWdodCAtIDIpOwotICAgIH0KLSAgfSAKLSAgIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtRWRpdChDZWxsRWRpdG9yIGNlbGxFZGl0b3IpCi0gIHsKLQkgIEFTRENvbWJvQm94Q2VsbEVkaXRvciBjb21ib0NlbGxFZGl0b3IgPSAoQVNEQ29tYm9Cb3hDZWxsRWRpdG9yKSBjZWxsRWRpdG9yOwotCSAgQVNEQ0NvbWJvIGNvbWJvID0gKEFTRENDb21ibylnZXRDZWxsRWRpdG9yKCkuZ2V0Q29udHJvbCgpOwotCSAgaW50IGluZGV4ID0gY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsgICAgICAgICAgICAgIAotCSAgaWYgKGluZGV4ICE9IC0xKQotCSAgewotCQkgIE9iamVjdCB2YWx1ZSA9IGNvbWJvLmdldEl0ZW0oaW5kZXgpOwotCQkgIGlmIChjb21ib0NlbGxFZGl0b3IuZ2V0U2VsZWN0ZWRWYWx1ZSgpICE9IG51bGwpIHsKLQkJCSAgdmFsdWUgPSBjb21ib0NlbGxFZGl0b3IuZ2V0U2VsZWN0ZWRWYWx1ZSgpOwotCQkgIH0KLQkJICAKLQkJICBwZXJmb3JtTW9kaWZ5KHZhbHVlKTsKLQkgIH0KLQkgIGVsc2UKLQkgIHsKLQkJICBTdHJpbmcgdHlwZWRWYWx1ZSA9IGNvbWJvLmdldFRleHQoKTsJCi0JCSAgaWYgKGNvbWJvLmluZGV4T2YodHlwZWRWYWx1ZSkgIT0gLTEpCi0JCSAgewkgICAgICAKLQkJCSAgcGVyZm9ybU1vZGlmeSh0eXBlZFZhbHVlKTsKLQkJICB9ICAgICAgCQotCQkgIGVsc2UKLQkJICB7Ci0JCQkgIFN0cmluZyBjbG9zZU1hdGNoID0gZ2V0Q2xvc2VNYXRjaCh0eXBlZFZhbHVlLCBjb21iby5nZXRJdGVtcygpKTsKLQkJCSAgaWYgKGNsb3NlTWF0Y2ggIT0gbnVsbCkKLQkJCSAgewotCQkJCSAgcGVyZm9ybU1vZGlmeShjbG9zZU1hdGNoKTsgICAgICAJCi0JCQkgIH0KLQkJCSAgZWxzZQotCQkJICB7ICAgICAgCQotCQkJCSAgRGlzcGxheS5nZXRDdXJyZW50KCkuYmVlcCgpOwotCQkJICB9Ci0JCSAgfQotCSAgfSAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0Q2xvc2VNYXRjaChTdHJpbmcgdmFsdWUsIFN0cmluZ1tdIGl0ZW1zKQotICB7Ci0gICAgaW50IG1hdGNoSW5kZXggPSAtMTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgIAlTdHJpbmcgaXRlbSA9IGl0ZW1zW2ldOwotICAgIAlTdHJpbmcgYSA9IGdldExvY2FsTmFtZSh2YWx1ZSk7Ci0gICAgCVN0cmluZyBiID0gZ2V0TG9jYWxOYW1lKGl0ZW0pOwotCQkgIGlmIChhLmVxdWFsc0lnbm9yZUNhc2UoYikpCi0JCSAgeyAKLQkJCSAgbWF0Y2hJbmRleCA9IGk7Ci0JCQkgIGJyZWFrOwkJCQkKLQkJICB9CSAgICAJICAgICAKLSAgICB9ICAKLSAgICByZXR1cm4gbWF0Y2hJbmRleCAhPSAtMSA/IGl0ZW1zW21hdGNoSW5kZXhdIDogbnVsbDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRMb2NhbE5hbWUoU3RyaW5nIHN0cmluZykKLSAgewotCQlpbnQgaW5kZXggPSBzdHJpbmcuaW5kZXhPZigiOiIpOyAvLyROT04tTkxTLTEkCi0JICByZXR1cm4gKGluZGV4ICE9IC0xKSA/IHN0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKSA6IHN0cmluZzsgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0RpcmVjdEVkaXRTZWxlY3Rpb25Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0RpcmVjdEVkaXRTZWxlY3Rpb25Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYjQ5YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9EaXJlY3RFZGl0U2VsZWN0aW9uVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmVDYW52YXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuU2VsZWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5JTmFtZWRFZGl0UGFydDsKLQotLyoqCi0gKiBFeHRlbmRzIHRoZSBkZWZhdWx0IEdFRiBzZWxlY3Rpb24gdG9vbHMgdG8gc2VuZCB0aGUKLSAqIG1vdXNlIGV2ZW50cwotICovCi1wdWJsaWMgY2xhc3MgRGlyZWN0RWRpdFNlbGVjdGlvblRvb2wgZXh0ZW5kcyBTZWxlY3Rpb25Ub29sIHsKLQkKLQlwcm90ZWN0ZWQgSU5hbWVkRWRpdFBhcnQgZ2V0U2VsZWN0ZWRQYXJ0KCkgewotCQlpZihnZXRDdXJyZW50Vmlld2VyKCkgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlFZGl0UGFydCBlcCA9IGdldEN1cnJlbnRWaWV3ZXIoKS5nZXRGb2N1c0VkaXRQYXJ0KCk7Ci0JCWlmKGVwIGluc3RhbmNlb2YgSU5hbWVkRWRpdFBhcnQgJiYgZXAuaXNBY3RpdmUoKSkKLQkJCXJldHVybiAoSU5hbWVkRWRpdFBhcnQpZXA7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVCdXR0b25Eb3duKGludCBidXR0b24pIHsKLQkJc3VwZXIuaGFuZGxlQnV0dG9uRG93bihidXR0b24pOwotCQlJTmFtZWRFZGl0UGFydCBzZWxlY3RlZFBhcnQgPSBnZXRTZWxlY3RlZFBhcnQoKTsKLQkJCi0JCWlmKHNlbGVjdGVkUGFydCAhPSBudWxsICYmIGJ1dHRvbiA9PSAxKSB7Ci0JCQlJbnB1dCBpID0gZ2V0Q3VycmVudElucHV0KCk7Ci0JCQlQb2ludCBsID0gdHJhbnNsYXRlTG9jYXRpb24oaS5nZXRNb3VzZUxvY2F0aW9uKCkpOwotCQkJCi0JCQlJRmlndXJlIGYgPSAoKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIHNlbGVjdGVkUGFydCkuZ2V0RmlndXJlKCk7Ci0JCQlSZWN0YW5nbGUgYm91bmRzID0gZi5nZXRCb3VuZHMoKTsKLQkJCWlmKGJvdW5kcy5jb250YWlucyhsLngsbC55KSkgewotCQkJCXNlbGVjdGVkUGFydC5wZXJmb3JtRGlyZWN0RWRpdCh0cmFuc2xhdGVMb2NhdGlvbihuZXcgUG9pbnQobC54LCBsLnkpKSk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCXByb3RlY3RlZCBQb2ludCB0cmFuc2xhdGVMb2NhdGlvbihQb2ludCBtb3VzZUxvY2F0aW9uKSB7Ci0JCUZpZ3VyZUNhbnZhcyBjYW52YXMgPSAoRmlndXJlQ2FudmFzKWdldEN1cnJlbnRWaWV3ZXIoKS5nZXRDb250cm9sKCk7Ci0JCVBvaW50IHZpZXdMb2NhdGlvbiA9IGNhbnZhcy5nZXRWaWV3cG9ydCgpLmdldFZpZXdMb2NhdGlvbigpOwotCQlyZXR1cm4gbmV3IFBvaW50KG1vdXNlTG9jYXRpb24ueCArIHZpZXdMb2NhdGlvbi54LG1vdXNlTG9jYXRpb24ueSArIHZpZXdMb2NhdGlvbi55KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9MYWJlbENlbGxFZGl0b3JMb2NhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0xhYmVsQ2VsbEVkaXRvckxvY2F0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5MTY0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0xhYmVsQ2VsbEVkaXRvckxvY2F0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkNlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLklOYW1lZEVkaXRQYXJ0OwotCi1wdWJsaWMgY2xhc3MgTGFiZWxDZWxsRWRpdG9yTG9jYXRvciBpbXBsZW1lbnRzIENlbGxFZGl0b3JMb2NhdG9yIHsKLQlwcml2YXRlIElOYW1lZEVkaXRQYXJ0IG5hbWVkRWRpdFBhcnQ7Ci0JcHJpdmF0ZSBQb2ludCBjdXJzb3JMb2NhdGlvbjsKLQotCXB1YmxpYyBMYWJlbENlbGxFZGl0b3JMb2NhdG9yKElOYW1lZEVkaXRQYXJ0IG5hbWVkRWRpdFBhcnQsIFBvaW50IGN1cnNvckxvY2F0aW9uKSB7Ci0JCXRoaXMubmFtZWRFZGl0UGFydCA9IG5hbWVkRWRpdFBhcnQ7Ci0JCXRoaXMuY3Vyc29yTG9jYXRpb24gPSBjdXJzb3JMb2NhdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVsb2NhdGUoQ2VsbEVkaXRvciBjZWxsZWRpdG9yKSB7Ci0JCVRleHQgdGV4dCA9IChUZXh0KWNlbGxlZGl0b3IuZ2V0Q29udHJvbCgpOwotCQlpZiAodGV4dC5nZXRCb3VuZHMoKS54IDw9IDAgJiYgbmFtZWRFZGl0UGFydC5nZXRMYWJlbEZpZ3VyZSgpICE9IG51bGwpIHsKLQkJCUxhYmVsIGxhYmVsID0gbmFtZWRFZGl0UGFydC5nZXRMYWJlbEZpZ3VyZSgpOwotCQkJUmVjdGFuZ2xlIGJvdW5kaW5nUmVjdCA9IGxhYmVsLmdldFRleHRCb3VuZHMoKTsKLQotCQkJLy8gUmVkdWNlIHRoZSB3aWR0aCBieSB0aGUgYW1vdW50IHdlIHNoaWZ0ZWQgYWxvbmcgdGhlIHgtYXhpcwotCQkJaW50IGRlbHRhID0gTWF0aC5hYnMoYm91bmRpbmdSZWN0LnggLSBsYWJlbC5nZXRQYXJlbnQoKS5nZXRCb3VuZHMoKS54KTsKLS8vCQkJYm91bmRpbmdSZWN0LndpZHRoID0gdGFibGVDZWxsRmlndXJlLmdldFByZWZlcnJlZFNpemUoKS53aWR0aCAtIGRlbHRhOwotCQkJCi0JCQlsYWJlbC5nZXRQYXJlbnQoKS50cmFuc2xhdGVUb0Fic29sdXRlKGJvdW5kaW5nUmVjdCk7Ci0JCQlvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIHRyaW0gPSB0ZXh0LmNvbXB1dGVUcmltKDAsIDAsIDAsIDApOwotCQkJYm91bmRpbmdSZWN0LnRyYW5zbGF0ZSh0cmltLngsIHRyaW0ueSk7Ci0vLwkJCWJvdW5kaW5nUmVjdC53aWR0aCA9IGJvdW5kaW5nUmVjdC53aWR0aCAtIHRyaW0ueDsKLQkJCWJvdW5kaW5nUmVjdC5oZWlnaHQgPSBib3VuZGluZ1JlY3QuaGVpZ2h0IC0gdHJpbS55OwotCQkJCi0JCQlib3VuZGluZ1JlY3Qud2lkdGggPSBsYWJlbC5nZXRQYXJlbnQoKS5nZXRCb3VuZHMoKS53aWR0aCAtIGRlbHRhOwotCQkJdGV4dC5zZXRCb3VuZHMoYm91bmRpbmdSZWN0LngsIGJvdW5kaW5nUmVjdC55LCBib3VuZGluZ1JlY3Qud2lkdGgsIGJvdW5kaW5nUmVjdC5oZWlnaHQpOwotCQkJCi0JCQlpZiAoY3Vyc29yTG9jYXRpb24gIT0gbnVsbCkgewotCQkJCS8vIFRyYW5zbGF0ZSBwb2ludAotCQkJCVBvaW50IHRyYW5zbGF0ZWRQb2ludCA9IG5ldyBQb2ludChjdXJzb3JMb2NhdGlvbi54IC0gYm91bmRpbmdSZWN0LngsY3Vyc29yTG9jYXRpb24ueSAtIGJvdW5kaW5nUmVjdC55KTsKLQotCQkJCS8vIENhbGN1bGF0ZSB0ZXh0IG9mZnNldCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0cmFuc2xhdGVkIHBvaW50Ci0JCQkJdGV4dC5zZXRTZWxlY3Rpb24oMCwgMCk7Ci0JCQkJaW50IHhDYXJldCA9IHRleHQuZ2V0Q2FyZXRMb2NhdGlvbigpLng7Ci0JCQkJaW50IG9mZnNldCA9IHRleHQuZ2V0Q2FyZXRQb3NpdGlvbigpOwotCQkJCXdoaWxlICh4Q2FyZXQgPCB0cmFuc2xhdGVkUG9pbnQueCkgewotCQkJCQl0ZXh0LnNldFNlbGVjdGlvbihvZmZzZXQgKyAxLCBvZmZzZXQgKyAxKTsJCQkKLQkJCQkJeENhcmV0ID0gdGV4dC5nZXRDYXJldExvY2F0aW9uKCkueDsKLQkJCQkJaW50IG5ld09mZnNldCA9IHRleHQuZ2V0Q2FyZXRQb3NpdGlvbigpOwotCQkJCQlpZiAobmV3T2Zmc2V0ID09IG9mZnNldCkgewotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJb2Zmc2V0Kys7Ci0JCQkJfQotCQkJCXRleHQuc2V0U2VsZWN0aW9uKG9mZnNldCwgb2Zmc2V0KTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvTGFiZWxFZGl0TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9MYWJlbEVkaXRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMDNhZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9MYWJlbEVkaXRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkNlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UZXh0Q2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25GYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuQ2VsbEVkaXRvckFjdGlvbkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5JTmFtZWRFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIExhYmVsRWRpdE1hbmFnZXIgZXh0ZW5kcyBEaXJlY3RFZGl0TWFuYWdlciB7Ci0KLQlwcml2YXRlIElBY3Rpb25CYXJzIGFjdGlvbkJhcnM7Ci0JcHJpdmF0ZSBDZWxsRWRpdG9yQWN0aW9uSGFuZGxlciBhY3Rpb25IYW5kbGVyOwotCXByaXZhdGUgSUFjdGlvbiBjb3B5LCBjdXQsIHBhc3RlLCB1bmRvLCByZWRvLCBmaW5kLCBzZWxlY3RBbGwsIGRlbGV0ZTsKLQlwcml2YXRlIEZvbnQgc2NhbGVkRm9udDsKLQotCXB1YmxpYyBMYWJlbEVkaXRNYW5hZ2VyKEdyYXBoaWNhbEVkaXRQYXJ0IHNvdXJjZSwgQ2VsbEVkaXRvckxvY2F0b3IgbG9jYXRvcikgewotCQlzdXBlcihzb3VyY2UsIG51bGwsIGxvY2F0b3IpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRpcmVjdEVkaXRNYW5hZ2VyI2JyaW5nRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgYnJpbmdEb3duKCkgewotCQlpZiAoYWN0aW9uSGFuZGxlciAhPSBudWxsKSB7Ci0JCQlhY3Rpb25IYW5kbGVyLmRpc3Bvc2UoKTsKLQkJCWFjdGlvbkhhbmRsZXIgPSBudWxsOwotCQl9Ci0JCWlmIChhY3Rpb25CYXJzICE9IG51bGwpIHsKLQkJCXJlc3RvcmVTYXZlZEFjdGlvbnMoYWN0aW9uQmFycyk7Ci0JCQlhY3Rpb25CYXJzLnVwZGF0ZUFjdGlvbkJhcnMoKTsKLQkJCWFjdGlvbkJhcnMgPSBudWxsOwotCQl9Ci0KLQkJRm9udCBkaXNwb3NlRm9udCA9IHNjYWxlZEZvbnQ7Ci0JCXNjYWxlZEZvbnQgPSBudWxsOwotCQlzdXBlci5icmluZ0Rvd24oKTsKLQkJaWYgKGRpc3Bvc2VGb250ICE9IG51bGwpCi0JCQlkaXNwb3NlRm9udC5kaXNwb3NlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNob3dGZWVkYmFjaygpIHsKLQkJZ2V0RWRpdFBhcnQoKS5zaG93U291cmNlRmVlZGJhY2soZ2V0RGlyZWN0RWRpdFJlcXVlc3QoKSk7Ci0JfQotCi0JcHJvdGVjdGVkIENlbGxFZGl0b3IgY3JlYXRlQ2VsbEVkaXRvck9uKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKLQkJcmV0dXJuIG5ldyBUZXh0Q2VsbEVkaXRvcihjb21wb3NpdGUsIFNXVC5TSU5HTEUgfCBTV1QuV1JBUCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgaW5pdENlbGxFZGl0b3IoKSB7Ci0JCVRleHQgdGV4dCA9IChUZXh0KWdldENlbGxFZGl0b3IoKS5nZXRDb250cm9sKCk7Ci0JCUxhYmVsIGxhYmVsID0gKChJTmFtZWRFZGl0UGFydCkgZ2V0RWRpdFBhcnQoKSkuZ2V0TGFiZWxGaWd1cmUoKTsKLQkJCi0JCWlmIChsYWJlbCAhPSBudWxsKSB7Ci0JCQlzY2FsZWRGb250ID0gbGFiZWwuZ2V0Rm9udCgpOwotCQkJCi0JCQkvLyBUT0RPOiBybWFoOiAgaGFjayBoZXJlIHRvIHNldCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUKLQkJCS8vIGRpcmVjdCBlZGl0IFRleHQuICBTb2x1dGlvbiBpcyB0byBtYWtlIHRoZSBUZXh0IHRyYW5zcGFyZW50Li4uCi0JCQlDb2xvciBjb2xvciA9IGxhYmVsLmdldEJhY2tncm91bmRDb2xvcigpOwotCQkJaWYgKGNvbG9yLmVxdWFscyhEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpKSB7Ci0JCQkJdGV4dC5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLQkJCX0KLQkJCWVsc2UgewotLy8JCQkJdGV4dC5zZXRCYWNrZ3JvdW5kKENvbG9yQ29uc3RhbnRzLmxpZ2h0Qmx1ZSk7Ci0JCQkgICAgdGV4dC5zZXRCYWNrZ3JvdW5kKENvbG9yQ29uc3RhbnRzLndoaXRlKTsKLQkJCX0KLQkJCQotCQkJU3RyaW5nIGluaXRpYWxMYWJlbFRleHQgPSBsYWJlbC5nZXRUZXh0KCk7Ci0JCQlnZXRDZWxsRWRpdG9yKCkuc2V0VmFsdWUoaW5pdGlhbExhYmVsVGV4dCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzY2FsZWRGb250ID0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Rm9udCgpOwotCQkJdGV4dC5zZXRCYWNrZ3JvdW5kKGxhYmVsLmdldFBhcmVudCgpLmdldEJhY2tncm91bmRDb2xvcigpKTsKLQkJfQotCQkKLQkJRm9udERhdGEgZGF0YSA9IHNjYWxlZEZvbnQuZ2V0Rm9udERhdGEoKVswXTsKLQkJRGltZW5zaW9uIGZvbnRTaXplID0gbmV3IERpbWVuc2lvbigwLCBkYXRhLmdldEhlaWdodCgpKTsKLQkJbGFiZWwuZ2V0UGFyZW50KCkudHJhbnNsYXRlVG9BYnNvbHV0ZShmb250U2l6ZSk7Ci0JCWRhdGEuc2V0SGVpZ2h0KGZvbnRTaXplLmhlaWdodCk7Ci0JCXNjYWxlZEZvbnQgPSBuZXcgRm9udChudWxsLCBkYXRhKTsKLQkJCi0JCXRleHQuc2V0Rm9udChzY2FsZWRGb250KTsKLS8vCQl0ZXh0LnNlbGVjdEFsbCgpOwotCi0JCS8vIEhvb2sgdGhlIGNlbGwgZWRpdG9yJ3MgY29weS9wYXN0ZSBhY3Rpb25zIHRvIHRoZSBhY3Rpb25CYXJzIHNvIHRoYXQgdGhleSBjYW4KLQkJLy8gYmUgaW52b2tlZCB2aWEga2V5Ym9hcmQgc2hvcnRjdXRzLgotCQlhY3Rpb25CYXJzID0gQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJzKCk7Ci0JCXNhdmVDdXJyZW50QWN0aW9ucyhhY3Rpb25CYXJzKTsKLQkJYWN0aW9uSGFuZGxlciA9IG5ldyBDZWxsRWRpdG9yQWN0aW9uSGFuZGxlcihhY3Rpb25CYXJzKTsKLQkJYWN0aW9uSGFuZGxlci5hZGRDZWxsRWRpdG9yKGdldENlbGxFZGl0b3IoKSk7Ci0JCWFjdGlvbkJhcnMudXBkYXRlQWN0aW9uQmFycygpOwotCX0KLQotCXByaXZhdGUgdm9pZCByZXN0b3JlU2F2ZWRBY3Rpb25zKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpewotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5DT1BZLmdldElkKCksIGNvcHkpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5QQVNURS5nZXRJZCgpLCBwYXN0ZSk7Ci0JCWFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LkRFTEVURS5nZXRJZCgpLCBkZWxldGUpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5TRUxFQ1RfQUxMLmdldElkKCksIHNlbGVjdEFsbCk7Ci0JCWFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LkNVVC5nZXRJZCgpLCBjdXQpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5GSU5ELmdldElkKCksIGZpbmQpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5VTkRPLmdldElkKCksIHVuZG8pOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5SRURPLmdldElkKCksIHJlZG8pOwotCX0KLQotCXByaXZhdGUgdm9pZCBzYXZlQ3VycmVudEFjdGlvbnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgewotCQljb3B5ID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuQ09QWS5nZXRJZCgpKTsKLQkJcGFzdGUgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5QQVNURS5nZXRJZCgpKTsKLQkJZGVsZXRlID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuREVMRVRFLmdldElkKCkpOwotCQlzZWxlY3RBbGwgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5TRUxFQ1RfQUxMLmdldElkKCkpOwotCQljdXQgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5DVVQuZ2V0SWQoKSk7Ci0JCWZpbmQgPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5GSU5ELmdldElkKCkpOwotCQl1bmRvID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuVU5ETy5nZXRJZCgpKTsKLQkJcmVkbyA9IGFjdGlvbkJhcnMuZ2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LlJFRE8uZ2V0SWQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9UeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZmE5OTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9UeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5QYXJhbWV0ZXJUeXBlRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlciBleHRlbmRzIENvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIKLXsKLSAgcHJvdGVjdGVkIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZWRpdFBhcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHByb3RlY3RlZCBJUGFyYW1ldGVyIHNldE9iamVjdDsKLSAgCi0gIHB1YmxpYyBUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIoSVBhcmFtZXRlciBwYXJhbWV0ZXIsIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgc291cmNlLCBMYWJlbCBsYWJlbCkKLSAgewotICAgIHN1cGVyKHNvdXJjZSwgbGFiZWwpOwotICAgIGVkaXRQYXJ0ID0gc291cmNlOwotICAgIHNldE9iamVjdCA9IHBhcmFtZXRlcjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIENlbGxFZGl0b3IgY3JlYXRlQ2VsbEVkaXRvck9uKENvbXBvc2l0ZSBjb21wb3NpdGUpCi0gIHsKLQkgIHJldHVybiBzdXBlci5jcmVhdGVDZWxsRWRpdG9yT24oY29tcG9zaXRlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGNvbXB1dGVDb21ib0NvbnRlbnQoKQotICB7Ci0JICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCSAgICBpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkKLQkgICAgewotCSAgICAgICBsaXN0LmFkZChNZXNzYWdlcy5fVUlfQlVUVE9OX0JST1dTRSk7IC8vJE5PTi1OTFMtMSQKLQkgICAgICAgbGlzdC5hZGQoTWVzc2FnZXMuX1VJX0JVVFRPTl9ORVcpOyAvLyROT04tTkxTLTEkCi0JICAgICAgIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBxdWlja1BpY2tzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCSAgICAgICBpZiAocXVpY2tQaWNrcyAhPSBudWxsKQotCSAgICAgICB7Ci0JICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgcXVpY2tQaWNrcy5sZW5ndGg7IGkrKykKLQkgICAgICAgICB7Ci0JICAgICAgICAgICBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBxdWlja1BpY2tzW2ldOwotCSAgICAgICAgICAgbGlzdC5hZGQoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpOwotCSAgICAgICAgIH0gIAotCSAgICAgICB9Ci0JICAgICAgIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBoaXN0b3J5ID0gZWRpdE1hbmFnZXIuZ2V0SGlzdG9yeSgpOwotCSAgICAgICBpZiAoaGlzdG9yeSAhPSBudWxsKQotCSAgICAgICB7Ci0JICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgaGlzdG9yeS5sZW5ndGg7IGkrKykKLQkgICAgICAgICB7Ci0JICAgICAgICAgICBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBoaXN0b3J5W2ldOwotCSAgICAgICAgICAgbGlzdC5hZGQoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpOwotCSAgICAgICAgIH0gIAotCSAgICAgICB9Ci0JICAgIH0gCi0JICAgIHJldHVybiBsaXN0OyAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1Nb2RpZnkoT2JqZWN0IHZhbHVlKQotICB7Ci0JICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkgICAgaWYgKGVkaXRNYW5hZ2VyID09IG51bGwpCi0JICAgIHsKLQkgICAgICByZXR1cm47Ci0JICAgIH0KLQkgICAgCi0JICAgIC8vIG91ciBjcnVkZSBjb21ibyBib3ggY2FuIG9ubHkgd29yayB3aXRoICdTdHJpbmcnIG9iamVjdHMKLQkgICAgLy8gaWYgd2UgZ2V0IGEgU3RyaW5nIGJhY2sgd2UgbmVlZCB0byBkbyBzb21lIGNsZXZlciBtYXBwaW5nIHRvIGdldCB0aGUgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiAKLQkgICAgLy8gICAgCi0JICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykKLQkgICAgewotCSAgICAgIHZhbHVlID0gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKChTdHJpbmcpdmFsdWUpOyAgICAgCi0JICAgIH0gIAotCSAgICAvLyB3ZSBhc3N1bWUgdGhlIHNlbGVjdGVkIHZhbHVlIGlzIGFsd2F5cyBvZiB0aGUgZm9ybSBvZiBhIENvbXBvbmVudFNwZWNpZmljYXRpb24KLQkgICAgLy8gCi0JICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pICAgICAgCi0JICAgIHsKLQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShnZXRFZGl0UGFydCgpLmdldE1vZGVsKCksIChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB2YWx1ZSk7Ci0JICAgIH0KLSAgfSAKLQotICBwcm90ZWN0ZWQgTGlzdCBjb21wdXRlU29ydGVkTGlzdChMaXN0IGxpc3QpCi0gIHsKLS8vICAgIHJldHVybiBUeXBlc0hlbHBlci5zb3J0TGlzdChsaXN0KTsKLQkgIHJldHVybiBsaXN0OwotICB9Ci0gIAotICBwcml2YXRlIGludCBnZXRUZXh0SW5kZW50KCkgewotCSAgaWYgKGVkaXRQYXJ0IGluc3RhbmNlb2YgUGFyYW1ldGVyVHlwZUVkaXRQYXJ0KSB7Ci0JCSAgUmVjdGFuZ2xlIGJvdW5kcyA9ICgoUGFyYW1ldGVyVHlwZUVkaXRQYXJ0KSBlZGl0UGFydCkuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCk7Ci0JCSAgaW50IHRleHRYID0gKChQYXJhbWV0ZXJUeXBlRWRpdFBhcnQpIGVkaXRQYXJ0KS5nZXRMYWJlbEZpZ3VyZSgpLmdldFRleHRCb3VuZHMoKS54OyAKLQkJICByZXR1cm4gdGV4dFggLSBib3VuZHMueDsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIDU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBDZWxsRWRpdG9yIGNyZWF0ZUNlbGxFZGl0b3IoQ29tcG9zaXRlIGNvbXBvc2l0ZSwgU3RyaW5nW10gc3RyaW5nQXJyYXkpCi0gIHsKLSAgICBBU0RDb21ib0JveENlbGxFZGl0b3IgY2VsbEVkaXRvciA9IG5ldyBBU0RDb21ib0JveENlbGxFZGl0b3IoY29tcG9zaXRlLCBzdHJpbmdBcnJheSwgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSk7Ci0gICAgY2VsbEVkaXRvci5zZXRUZXh0SW5kZW50KGdldFRleHRJbmRlbnQoKSk7Ci0gICAgLy8oKEFEVENvbWJvQm94Q2VsbEVkaXRvcikgY2VsbEVkaXRvcikuc2V0T2JqZWN0VG9Nb2RpZnkoc2V0T2JqZWN0KTsKLSAgICAKLSAgICByZXR1cm4gY2VsbEVkaXRvcjsKLSAgfQotCi0JcHVibGljIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkgewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IG51bGw7Ci0JCWJvb2xlYW4gaXNUeXBlID0gdHJ1ZTsKLQkJCi0JCS8vIFRPRE86IFdlJ3JlIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbmQgdXNpbmcgV1NETDExIEltcGwgY2xhc3Nlcy4uLi4gV2Ugc2hvdWxkCi0JCS8vIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gc2VlIGlmIHdlIGNhbiBhdm9pZCBrbm93aW5nIGFib3V0IFdTREwxMSBJbXBsIGNsYXNzZXMuCi0JCWlmIChzZXRPYmplY3QgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQlpc1R5cGUgPSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIHNldE9iamVjdCkuaXNUeXBlKCk7Ci0JCX0KLQkJCi0JCWlmIChpc1R5cGUpIHsgCi0JCQllZGl0TWFuYWdlciA9IChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKHNldE9iamVjdCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQllZGl0TWFuYWdlciA9IChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKHNldE9iamVjdCk7Ci0JCX0KLQotCQlyZXR1cm4gZWRpdE1hbmFnZXI7IAotCX0KLQkKLQkvLyBUT0RPOiBybWFoOiBUaGlzIGNvZGUgc2hvdWxkIGxpdmUgaW4gYSBjb21tb24gcGxhY2UuLi4uLiBUaGlzIGNvZGUgaXMgYWxzbyB1c2VkIGluIG90aGVyIFVJIHNjZW5hcmlvcyB3aGVuCi0JLy8gYSBzaW1pbGFyIGNvbWJvIGJveCBpcyB1c2VkLiAgRm9yIGV4YW1wbGUgaW4gdGhlIHByb3BlcnRpZXMuLi4oUGFyYW1ldGVyU2VjdGlvbikgIEFsc28gdXNlZCBpbiB0aGUgWFNERWRpdG9yLi4uCi0JcHJvdGVjdGVkIENvbXBvbmVudFNwZWNpZmljYXRpb24gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKFN0cmluZyB2YWx1ZSkKLQl7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJaWYgKGVkaXRNYW5hZ2VyICE9IG51bGwpCi0JCXsgIAotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHF1aWNrUGlja3MgPSBlZGl0TWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0JCQlpZiAocXVpY2tQaWNrcyAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaSA8IHF1aWNrUGlja3MubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBxdWlja1BpY2tzW2ldOwotCQkJCQlpZiAodmFsdWUuZXF1YWxzKGNvbXBvbmVudFNwZWNpZmljYXRpb24uZ2V0TmFtZSgpKSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIGNvbXBvbmVudFNwZWNpZmljYXRpb247Ci0JCQkJCX0gICAgICAgICAgICAgICAgCi0JCQkJfSAgCi0JCQl9Ci0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gaGlzdG9yeSA9IGVkaXRNYW5hZ2VyLmdldEhpc3RvcnkoKTsKLQkJCWlmIChoaXN0b3J5ICE9IG51bGwpCi0JCQl7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgaGlzdG9yeS5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbiA9IGhpc3RvcnlbaV07Ci0JCQkJCWlmICh2YWx1ZS5lcXVhbHMoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpKQotCQkJCQl7ICAKLQkJCQkJCXJldHVybiBjb21wb25lbnRTcGVjaWZpY2F0aW9uOwotCQkJCQl9Ci0JCQkJfSAgCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTREVkaXRQYXJ0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTREVkaXRQYXJ0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjY2YjkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BU0RFZGl0UGFydEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQmluZGluZ0NvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBBU0RFZGl0UGFydEZhY3RvcnkgaW1wbGVtZW50cyBFZGl0UGFydEZhY3RvcnkKLXsKLSAgcHVibGljIEVkaXRQYXJ0IGNyZWF0ZUVkaXRQYXJ0KEVkaXRQYXJ0IGNvbnRleHQsIE9iamVjdCBtb2RlbCkKLSAgewotICAgIEVkaXRQYXJ0IGNoaWxkID0gbnVsbDsKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgRGVmaW5pdGlvbnNFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKQotICAgIHsKLSAgICAgIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIGNvbGxlY3Rpb24gPSAoQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pbW9kZWw7Ci0gICAgICBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIEJpbmRpbmdDb2x1bW4pCi0gICAgICB7Ci0gICAgICAgIGNoaWxkID0gbmV3IEJpbmRpbmdDb2x1bW5FZGl0UGFydCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAgCi0gICAgICAgIGNoaWxkID0gbmV3IENvbHVtbkVkaXRQYXJ0KCk7Ci0gICAgICB9ICAKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJRW5kUG9pbnQpCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgRW5kUG9pbnRFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElTZXJ2aWNlKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IFNlcnZpY2VFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IEJpbmRpbmdFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nT3BlcmF0aW9uIHx8Ci0gICAgICAgICAgICAgbW9kZWwgaW5zdGFuY2VvZiBJQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UgfHwKLSAgICAgICAgICAgICBtb2RlbCBpbnN0YW5jZW9mIEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIpCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgQmluZGluZ0NvbnRlbnRFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElJbnRlcmZhY2UpCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgSW50ZXJmYWNlRWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICBjaGlsZCA9IG5ldyBNZXNzYWdlUmVmZXJlbmNlRWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IE9wZXJhdGlvbkVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlciAmJiBjb250ZXh0IGluc3RhbmNlb2YgUGFyYW1ldGVyRWRpdFBhcnQpIHsKLSAgICAJY2hpbGQgPSBuZXcgUGFyYW1ldGVyVHlwZUVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlciAmJiBjb250ZXh0IGluc3RhbmNlb2YgTWVzc2FnZVJlZmVyZW5jZUVkaXRQYXJ0KQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IFBhcmFtZXRlckVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGlmIChjaGlsZCA9PSBudWxsKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5Db3VsZCBub3QgY3JlYXRlIGVkaXRwYXJ0IGZvciBtb2RlbDogIiArIG1vZGVsKTsgLy8kTk9OLU5MUy0xJAotICAgICAgVGhyZWFkLmR1bXBTdGFjaygpOwotICAgIH0KLSAgICBBc3NlcnQuaXNOb3ROdWxsKGNoaWxkKTsKLSAgICBjaGlsZC5zZXRNb2RlbChtb2RlbCk7Ci0gICAgcmV0dXJuIGNoaWxkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQVNEUm9vdEVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQVNEUm9vdEVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiOTQzYTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTRFJvb3RFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkJlbmRwb2ludENvbm5lY3Rpb25Sb3V0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbm5lY3Rpb25MYXllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuTGF5ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5TY2FsYWJsZVJvb3RFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIEFTRFJvb3RFZGl0UGFydCBleHRlbmRzIFNjYWxhYmxlUm9vdEVkaXRQYXJ0IGltcGxlbWVudHMgb3JnLmVjbGlwc2UuZ2VmLlJvb3RFZGl0UGFydAoteyAgCi0gIHB1YmxpYyB2b2lkIGFjdGl2YXRlKCkKLSAgewotICAgIHN1cGVyLmFjdGl2YXRlKCk7Ci0gICAgLy8gU2V0IHVwIENvbm5lY3Rpb24gbGF5ZXIgd2l0aCBhIHJvdXRlciwgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGhhdmUgb25lCi0gICAgQ29ubmVjdGlvbkxheWVyIGNvbm5lY3Rpb25MYXllciA9IChDb25uZWN0aW9uTGF5ZXIpIGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpOwotICAgIGlmIChjb25uZWN0aW9uTGF5ZXIgIT0gbnVsbCkKLSAgICB7ICAKLS8vICAgICAgY29ubmVjdGlvbkxheWVyLnNldENvbm5lY3Rpb25Sb3V0ZXIobmV3IE1hbmhhdHRhbkNvbm5lY3Rpb25Sb3V0ZXIoKSk7Ci0gICAgICBjb25uZWN0aW9uTGF5ZXIuc2V0Q29ubmVjdGlvblJvdXRlcihuZXcgQmVuZHBvaW50Q29ubmVjdGlvblJvdXRlcigpKTsKLSAgICB9Ci0gICAgcmVmcmVzaCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQWJzdHJhY3RCb3h0RWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BYnN0cmFjdEJveHRFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2RjMTgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BYnN0cmFjdEJveHRFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxpbmVCb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5yZXF1ZXN0cy5EaXJlY3RFZGl0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbENlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRExhYmVsRGlyZWN0RWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RTZWxlY3Rpb25FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Cb3hDb21wb25lbnRGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLkNvbHVtbkRhdGE7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEJveHRFZGl0UGFydCBleHRlbmRzIEJhc2VFZGl0UGFydCBpbXBsZW1lbnRzIElOYW1lZEVkaXRQYXJ0Ci17Ci0gIHByb3RlY3RlZCBDb2x1bW5EYXRhIGNvbHVtbkRhdGEgPSBuZXcgQ29sdW1uRGF0YSgpOwotICBwcm90ZWN0ZWQgQm94Q29tcG9uZW50RmlndXJlIGZpZ3VyZTsKLSAgCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLSAgICBmaWd1cmUgPSBuZXcgQm94Q29tcG9uZW50RmlndXJlKCk7Ci0gICAgZmlndXJlLnNldEJvcmRlcihuZXcgTGluZUJvcmRlcigxKSk7Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoKTsKLSAgICB0b29sYmFyTGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0gICAgLy8gdG9vbGJhckxheW91dC5zZXRNaW5vckFsaWdubWVudChUb29sYmFyTGF5b3V0LkFMSUdOX0JPVFRPTVJJR0hUKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0KTsKLSAgICAvLyBpZihpc1Njcm9sbGFibGUoKSkKLSAgICAvLyBmaWd1cmUuc2V0U2Nyb2xsaW5nQWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotCi0gIHB1YmxpYyBJRmlndXJlIGdldENvbnRlbnRQYW5lKCkKLSAgewotICAgIHJldHVybiBmaWd1cmUuZ2V0Q29udGVudFBhbmUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0gIHsKLSAgICAgIHN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5ESVJFQ1RfRURJVF9ST0xFLCBuZXcgQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5KCkpOwotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKSk7Ci0gIH0KLQotICBwcml2YXRlIERpcmVjdEVkaXRNYW5hZ2VyIG1hbmFnZXI7Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtRGlyZWN0RWRpdChQb2ludCBjdXJzb3JMb2NhdGlvbil7Ci0JICBpZiAoIWlzRmlsZVJlYWRPbmx5KCkgJiYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgIGhpdFRlc3RGaWd1cmUoZmlndXJlLmdldEhlYWRpbmdGaWd1cmUoKSwgY3Vyc29yTG9jYXRpb24pICYmICFpc1JlYWRPbmx5KCkpKSB7Ci0JCSAgbWFuYWdlciA9IG5ldyBMYWJlbEVkaXRNYW5hZ2VyKHRoaXMsIG5ldyBMYWJlbENlbGxFZGl0b3JMb2NhdG9yKHRoaXMsIGN1cnNvckxvY2F0aW9uKSk7Ci0JCSAgbWFuYWdlci5zaG93KCk7Ci0JICB9Ci0gICAgZWxzZSBpZiAoKGhpdFRlc3QoZmlndXJlLmdldExhYmVsKCksIGN1cnNvckxvY2F0aW9uKSB8fAotICAgICAgICBoaXRUZXN0RmlndXJlKGZpZ3VyZS5nZXRIZWFkaW5nRmlndXJlKCksIGN1cnNvckxvY2F0aW9uKSkgJiYgaXNSZWFkT25seSgpKSB7Ci0gICAgICBkb09wZW5OZXdFZGl0b3IoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1SZXF1ZXN0KFJlcXVlc3QgcmVxKSB7Ci0JICBpZiAocmVxLmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpKSB7Ci0JCSAgUG9pbnQgbG9jYXRpb24gPSBudWxsOwotCQkgIGlmIChyZXEgaW5zdGFuY2VvZiBEaXJlY3RFZGl0UmVxdWVzdCkgewotCQkJICBsb2NhdGlvbiA9ICgoRGlyZWN0RWRpdFJlcXVlc3QpIHJlcSkuZ2V0TG9jYXRpb24oKTsJCQkgIAotCQkgIH0KLQkJICBwZXJmb3JtRGlyZWN0RWRpdChsb2NhdGlvbik7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBMYWJlbCBnZXRMYWJlbEZpZ3VyZSgpIHsKLQkgIHJldHVybiBmaWd1cmUuZ2V0TGFiZWwoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hDaGlsZHJlbigpCi0gIHsKLSAgICBzdXBlci5yZWZyZXNoQ2hpbGRyZW4oKTsKLSAgICAvLyBnZXRGaWd1cmUoKS5pbnZhbGlkYXRlVHJlZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7Ci0gICAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsKLSAgICBXU0RMQmFzZUFkYXB0ZXIgYm94ID0gKFdTRExCYXNlQWRhcHRlcikgZ2V0TW9kZWwoKTsKLSAgICBmaWd1cmUuaGVhZGluZ0ZpZ3VyZS5zZXRJc1JlYWRPbmx5KGJveC5pc1JlYWRPbmx5KCkpOwotICAgIGZpZ3VyZS5nZXRMYWJlbCgpLnNldFRleHQoYm94LmdldE5hbWUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpCi0gIHsKLQkgIExpbmVCb3JkZXIgYm94RmlndXJlTGluZUJvcmRlciA9IChMaW5lQm9yZGVyKSBmaWd1cmUuZ2V0Qm9yZGVyKCk7Ci0JICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldFdpZHRoKDIpOwotLy8JICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmRhcmtCbHVlKTsKLQkgIGZpZ3VyZS5zZXRTZWxlY3RlZCh0cnVlKTsKLQkgIGZpZ3VyZS5yZXBhaW50KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpCi0gIHsKLQkgIExpbmVCb3JkZXIgYm94RmlndXJlTGluZUJvcmRlciA9IChMaW5lQm9yZGVyKSBmaWd1cmUuZ2V0Qm9yZGVyKCk7Ci0JICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldFdpZHRoKDEpOwotCSAgYm94RmlndXJlTGluZUJvcmRlci5zZXRDb2xvcihDb2xvckNvbnN0YW50cy5ibGFjayk7Ci0JICBmaWd1cmUuc2V0U2VsZWN0ZWQoZmFsc2UpOwotCSAgZmlndXJlLnJlcGFpbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBDb2x1bW5EYXRhIGdldENvbHVtbkRhdGEoKQotICB7Ci0gICAgcmV0dXJuIGNvbHVtbkRhdGE7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CYXNlRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CYXNlRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAzYmQ3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmFzZUVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5BY3Rpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuRmlsZVN0b3JlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuSUFjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5kZXNpZ24uZWRpdHBvbGljaWVzLktleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3k7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlRWRpdFBhcnQgZXh0ZW5kcyBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGltcGxlbWVudHMgSUFjdGlvblByb3ZpZGVyLCBJQVNET2JqZWN0TGlzdGVuZXIsIElGZWVkYmFja0hhbmRsZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFTVBUWV9BQ1RJT05fQVJSQVkgPSB7fTsKLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIElBY3Rpb25Qcm92aWRlcikKLSAgICB7Ci0gICAgICByZXR1cm4gKChJQWN0aW9uUHJvdmlkZXIpbW9kZWwpLmdldEFjdGlvbnMob2JqZWN0KTsKLSAgICB9ICAKLSAgICByZXR1cm4gRU1QVFlfQUNUSU9OX0FSUkFZOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zVG9MaXN0KExpc3QgbGlzdCwgU3RyaW5nW10gYWN0aW9ucykKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBsaXN0LmFkZChhY3Rpb25zW2ldKTsKLSAgICB9ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWN0aXZhdGUoKQotICB7Ci0gICAgc3VwZXIuYWN0aXZhdGUoKTsKLSAgICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOyAgICAKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgIHsKLSAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpbW9kZWw7Ci0gICAgICBvYmplY3QucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAgICB9ICAgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRlYWN0aXZhdGUoKQotICB7Ci0gICAgT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgIHsKLSAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpbW9kZWw7Ci0gICAgICBvYmplY3QudW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotICAgIH0gICAKLSAgICBzdXBlci5kZWFjdGl2YXRlKCk7Ci0gIH0gIAotICAKLSAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkKLSAgewotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJwcm9wZXJ0eUNoYW5nZWQgIiArIHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgIHJlZnJlc2goKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVmcmVzaENvbm5lY3Rpb25zKCkgewotCSAgSXRlcmF0b3Iga2lkcyA9IGdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkgIHdoaWxlIChraWRzLmhhc05leHQoKSkgewotCQkgIE9iamVjdCBpdGVtID0ga2lkcy5uZXh0KCk7Ci0JCSAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCYXNlRWRpdFBhcnQpIHsKLQkJCSAgKChCYXNlRWRpdFBhcnQpIGl0ZW0pLnJlZnJlc2hDb25uZWN0aW9ucygpOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICAKLSAgfQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBoaXRUZXN0KFJlY3RhbmdsZSByZWN0YW5nbGUsIFBvaW50IGxvY2F0aW9uKSB7Ci0JICByZXR1cm4gcmVjdGFuZ2xlLmNvbnRhaW5zKGxvY2F0aW9uKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaGl0VGVzdChMYWJlbCB0YXJnZXQsIFBvaW50IGxvY2F0aW9uKSB7Ci0JICBSZWN0YW5nbGUgb3JpZ0IgPSB0YXJnZXQuZ2V0VGV4dEJvdW5kcygpLmdldENvcHkoKTsKLQkgIFJlY3RhbmdsZSB0cmFuc0IgPSB0YXJnZXQuZ2V0VGV4dEJvdW5kcygpLmdldENvcHkoKTsKLQotCSAgdGFyZ2V0LnRyYW5zbGF0ZVRvQWJzb2x1dGUodHJhbnNCKTsKLQotCSAgaW50IG5ld1ggPSBvcmlnQi54ICsgTWF0aC5hYnModHJhbnNCLnggLSBvcmlnQi54KTsKLQkgIGludCBuZXdZID0gb3JpZ0IueSArIE1hdGguYWJzKHRyYW5zQi55IC0gb3JpZ0IueSk7CSAgCi0JICBSZWN0YW5nbGUgZmluYWxCID0gbmV3IFJlY3RhbmdsZShuZXdYLCBuZXdZLCBvcmlnQi53aWR0aCwgb3JpZ0IuaGVpZ2h0KTsKLQotCSAgcmV0dXJuIGZpbmFsQi5jb250YWlucyhsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGhpdFRlc3RGaWd1cmUoRmlndXJlIHRhcmdldCwgUG9pbnQgbG9jYXRpb24pIHsKLSAgICBSZWN0YW5nbGUgb3JpZ0IgPSB0YXJnZXQuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotICAgIFJlY3RhbmdsZSB0cmFuc0IgPSB0YXJnZXQuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotCi0gICAgdGFyZ2V0LnRyYW5zbGF0ZVRvQWJzb2x1dGUodHJhbnNCKTsKLQotICAgIGludCBuZXdYID0gb3JpZ0IueCArIE1hdGguYWJzKHRyYW5zQi54IC0gb3JpZ0IueCk7Ci0gICAgaW50IG5ld1kgPSBvcmlnQi55ICsgTWF0aC5hYnModHJhbnNCLnkgLSBvcmlnQi55KTsgICAgCi0gICAgUmVjdGFuZ2xlIGZpbmFsQiA9IG5ldyBSZWN0YW5nbGUobmV3WCwgbmV3WSwgb3JpZ0Iud2lkdGgsIG9yaWdCLmhlaWdodCk7Ci0KLSAgICByZXR1cm4gZmluYWxCLmNvbnRhaW5zKGxvY2F0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB7Ci0JICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotCSAgaWYgKG1vZGVsIGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkgIHJldHVybiAoKElBU0RPYmplY3QpIG1vZGVsKS5pc1JlYWRPbmx5KCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgZG9PcGVuTmV3RWRpdG9yKCkKLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICBBY3Rpb25SZWdpc3RyeSByZWdpc3RyeSA9IChBY3Rpb25SZWdpc3RyeSkgZWRpdG9yUGFydC5nZXRBZGFwdGVyKEFjdGlvblJlZ2lzdHJ5LmNsYXNzKTsKLSAgICBpZiAocmVnaXN0cnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJQWN0aW9uIGFjdGlvbiA9IHJlZ2lzdHJ5LmdldEFjdGlvbihPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgICAgYWN0aW9uLnJ1bigpOwotICAgIH0KLSAgfQotIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7ICAgICAgCi0gICAgS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeSBuYXZpZ2F0aW9uRWRpdFBvbGljeSA9IG5ldyBLZXlCb2FyZEFjY2Vzc2liaWxpdHlFZGl0UG9saWN5KCkKLSAgICB7ICAgICAgICAgICAKLSAgICAgIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KEVkaXRQYXJ0IGVkaXRQYXJ0LCBpbnQgZGlyZWN0aW9uKQotICAgICAgeyAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIEJhc2VFZGl0UGFydC50aGlzLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsgICAgICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9OwotICAgIGluc3RhbGxFZGl0UG9saWN5KEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kuS0VZLCBuYXZpZ2F0aW9uRWRpdFBvbGljeSk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7Ci0gICAgcmV0dXJuIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldFJlbGF0aXZlRWRpdFBhcnQodGhpcywgZGlyZWN0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzRmlsZVJlYWRPbmx5KCkKLSAgewotICAgIElXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLSAgICBpZiAod29ya2JlbmNoICE9IG51bGwpCi0gICAgewotICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgICBpZiAod29ya2JlbmNoV2luZG93ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSUVkaXRvclBhcnQgZWRpdG9yID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgICBpZiAoZWRpdG9yICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZWRpdG9yLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoIShlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgfHwgZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlU3RvcmVFZGl0b3JJbnB1dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29sdW1uRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29sdW1uRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZkZDczZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0NvbHVtbkVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGF5b3V0QW5pbWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0cy5CaW5kaW5nQ29sdW1uTGF5b3V0OwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ0NvbHVtbkVkaXRQYXJ0IGV4dGVuZHMgQ29sdW1uRWRpdFBhcnQKLXsKLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIEZpZ3VyZSBmaWd1cmUgPSBuZXcgRmlndXJlKCk7Ci0gICAgLy9maWd1cmUuc2V0T3BhcXVlKHRydWUpOwotICAgIC8vZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy55ZWxsb3cpOwotICAgIC8vIGN1c3RvbSBsYXlvdXQgdGhhdCBjYW4gZG8gYW5pbWF0aW9uCi0gICAgLy8KLSAgICBCaW5kaW5nQ29sdW1uTGF5b3V0IGxheW91dCA9IG5ldyBCaW5kaW5nQ29sdW1uTGF5b3V0KHRoaXMpOwotICAgIGZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKGxheW91dCk7Ci0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfSAgCi0gCi0gIAotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVnaXN0ZXIoKQotICB7Ci0gICAgc3VwZXIucmVnaXN0ZXIoKTsKLSAgICBnZXRGaWd1cmUoKS5hZGRMYXlvdXRMaXN0ZW5lcihMYXlvdXRBbmltYXRvci5nZXREZWZhdWx0KCkpOyAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgdW5yZWdpc3RlcigpCi0gIHsKLSAgICBnZXRGaWd1cmUoKS5yZW1vdmVMYXlvdXRMaXN0ZW5lcihMYXlvdXRBbmltYXRvci5nZXREZWZhdWx0KCkpOyAgIAotICAgIHN1cGVyLnVucmVnaXN0ZXIoKTsKLSAgfQotICAKLSAgLy8gdGhpcyBtZXRob2Qgd2lsbCBleHBhbmQgdGhlIGJpbmRpbmcgZWRpdCBwYXJ0Ci0gIC8vIGFuZCBjb2xsYXBzZSBhbnkgb3RoZXIgYmluZGluZ3MgYXMgYXBwcm9wcmlhdGUKLSAgLy9wdWJsaWMgdm9pZCBleHBhbmQoQmlkaW5nRWRpdFBhcnQgYmluZGluZ0VkaXRQYXJ0KQotICAvL3sgICAgCi0gIC8vfQotICAKLSAgcHVibGljIHZvaWQgcmVmcmVzaEJpbmRpbmdFZGl0UGFydHMoKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIEVkaXRQYXJ0IGVkaXRQYXJ0ID0gKEVkaXRQYXJ0KWkubmV4dCgpOwotICAgICAgZWRpdFBhcnQucmVmcmVzaCgpOyAgICAgICAKLSAgICB9Ci0gICAgZ2V0RmlndXJlKCkuaW52YWxpZGF0ZVRyZWUoKTsgICAgICAgICAgIAotICAgIGdldEZpZ3VyZSgpLnJldmFsaWRhdGUoKTsgICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0NvbnRlbnRFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdDb250ZW50RWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdkNjFjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0NvbnRlbnRFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLS8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByZXByZXNlbnQgYSBCaW5kaW5nT3BlcmF0aW9uLCBCaW5kaW5nSW5wdXQsIEJpbmRpbmdPdXRwdXQgYW5kIEJpbmRpbmdGYXVsdAotLy8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29udGVudEVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0Ci17ICAKLSAgTGFiZWwgbGFiZWw7Ci0gIHByb3RlY3RlZCBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5ID0gbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKTsKLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIEZpZ3VyZSBmaWd1cmUgPSBuZXcgRmlndXJlKCk7Ci0gICAgZmlndXJlLnNldE9wYXF1ZSh0cnVlKTsKLSAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnRvb2x0aXBCYWNrZ3JvdW5kKTsKLSAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCh0cnVlKTsKLSAgICB0b29sYmFyTGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0gICAgbGFiZWwgPSBuZXcgTGFiZWwoKTsKLSAgICBsYWJlbC5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcig1LCA1LCAyLCAyKSk7Ci0gICAgZmlndXJlLmFkZChsYWJlbCk7Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotICAKLSAgCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gIH0gIAotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7Ci0JICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElCaW5kaW5nT3BlcmF0aW9uKQotCSAgeyAgCi0JCSAgSUJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChJQmluZGluZ09wZXJhdGlvbikgZ2V0TW9kZWwoKTsKLQotCQkgIGlmIChiaW5kaW5nT3BlcmF0aW9uIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQkgIGxhYmVsLnNldEljb24oKChJVHJlZUVsZW1lbnQpIGJpbmRpbmdPcGVyYXRpb24pLmdldEltYWdlKCkpOwotCQkgIH0KLS8vCQkgIGxhYmVsLnNldFRleHQoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkpOwotCSAgfQotCSAgZWxzZSBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSkKLQkgIHsKLQkJICBsYWJlbC5zZXRJY29uKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYmluZF9hc2N0X3ZhbF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0vLwkJICBsYWJlbC5zZXRJY29uKG1lc3NhZ2VSZWYuZ2V0SW1hZ2UoKSk7Ci0vLwkJICBsYWJlbC5zZXRUZXh0KG1lc3NhZ2VSZWYuZ2V0TmFtZSgpKTsKLQkgIH0KLQkgIGVsc2UgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKSB7Ci0JCSAgbGFiZWwuc2V0SWNvbihXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2JpbmRfYXNjdF92YWxfbm90X29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQotCSAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsgICAgCi0gIH0gIAotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkgewotCSAgbGFiZWwuZ2V0UGFyZW50KCkuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZUNlbGxTZWxlY3Rpb25Db2xvcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIGxhYmVsLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy50b29sdGlwQmFja2dyb3VuZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM4ZGU1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0VkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxheW91dE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxpbmVCb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUG9zaXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5MYXllckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uY29ubmVjdGlvbnMuQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkJveENvbXBvbmVudEZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuQmluZGluZ0NvbHVtbkxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuQmluZGluZ0NvbnRlbnRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLkJpbmRpbmdMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQKLXsKLSAgcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24gY29ubmVjdGlvbkZpZ3VyZTsKLSAgcHJvdGVjdGVkIEJveENvbXBvbmVudEZpZ3VyZSBmaWd1cmU7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzRXhwYW5kZWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBMYWJlbCBob3ZlckhlbHBMYWJlbCA9IG5ldyBMYWJlbCgiIik7IC8vJE5PTi1OTFMtMSQKLQotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgZmlndXJlID0gbmV3IEJveENvbXBvbmVudEZpZ3VyZSgpOwotICAgIGZpZ3VyZS5nZXRMYWJlbCgpLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDIsIDIsIDEsIDIpKTsKLSAgICBmaWd1cmUuc2V0Qm9yZGVyKG5ldyBMaW5lQm9yZGVyKDApKTsKLSAgICBmaWd1cmUuZ2V0Q29udGVudFBhbmUoKS5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBCaW5kaW5nQ29udGVudExheW91dCh0aGlzKSk7Ci0gICAgZmlndXJlLmdldENvbnRlbnRQYW5lKCkuc2V0T3BhcXVlKHRydWUpOwotICAgIGZpZ3VyZS5nZXRDb250ZW50UGFuZSgpLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy55ZWxsb3cpOwotICAgIGZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBCaW5kaW5nTGF5b3V0KHRoaXMpKTsKLSAgICAvLyBpZihpc1Njcm9sbGFibGUoKSkKLSAgICAvLyBmaWd1cmUuc2V0U2Nyb2xsaW5nQWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotCi0gIHB1YmxpYyBJRmlndXJlIGdldENvbnRlbnRQYW5lKCkKLSAgewotICAgIHJldHVybiBmaWd1cmUuZ2V0Q29udGVudFBhbmUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0gICAgSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZykgZ2V0TW9kZWwoKTsgIAotICAgIHJldHVybiBpc0V4cGFuZGVkID8gYmluZGluZy5nZXRCaW5kaW5nQ29udGVudExpc3QoKSA6IENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpCi0gIHsKLSAgICBzdXBlci5hY3RpdmF0ZSgpOwotICAgIGFjdGl2YXRlQ29ubmVjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGVhY3RpdmF0ZSgpCi0gIHsKLSAgICBzdXBlci5kZWFjdGl2YXRlKCk7Ci0gICAgZGVhY3RpdmF0ZUNvbm5lY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkKLSAgewotICAgIHN1cGVyLmFkZEZlZWRiYWNrKCk7Ci0gICAgTGluZUJvcmRlciBib3hGaWd1cmVMaW5lQm9yZGVyID0gKExpbmVCb3JkZXIpIGZpZ3VyZS5nZXRCb3JkZXIoKTsKLSAgICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldFdpZHRoKDIpOwotLy8gICAgYm94RmlndXJlTGluZUJvcmRlci5zZXRDb2xvcihDb2xvckNvbnN0YW50cy5kYXJrQmx1ZSk7Ci0gICAgZmlndXJlLnNldFNlbGVjdGVkKHRydWUpOwotICAgIGZpZ3VyZS5yZXBhaW50KCk7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodCh0cnVlKTsKLSAgICAgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkZFRURCQUNLX0xBWUVSKS5hZGQoY29ubmVjdGlvbkZpZ3VyZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKQotICB7Ci0gICAgc3VwZXIucmVtb3ZlRmVlZGJhY2soKTsKLSAgICBMaW5lQm9yZGVyIGJveEZpZ3VyZUxpbmVCb3JkZXIgPSAoTGluZUJvcmRlcikgZmlndXJlLmdldEJvcmRlcigpOwotICAgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMSk7Ci0gICAgYm94RmlndXJlTGluZUJvcmRlci5zZXRDb2xvcihDb2xvckNvbnN0YW50cy5ibGFjayk7Ci0gICAgZmlndXJlLnNldFNlbGVjdGVkKGZhbHNlKTsKLSAgICBmaWd1cmUucmVwYWludCgpOwotICAgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpCi0gICAgewotICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRIaWdobGlnaHQoZmFsc2UpOwotICAgICAgZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuQ09OTkVDVElPTl9MQVlFUikuYWRkKGNvbm5lY3Rpb25GaWd1cmUpOwotICAgIH0KLSAgfQotCi0KLSAgcHJvdGVjdGVkIHZvaWQgYWN0aXZhdGVDb25uZWN0aW9uKCkKLSAgewotICAgIC8vIElmIGFwcHJvcHJpYXRlLCBjcmVhdGUgb3VyIGNvbm5lY3Rpb25GaWd1cmUgYW5kIGFkZCBpdCB0byB0aGUgYXBwcm9wcmlhdGUKLSAgICAvLyBsYXllcgotICAgIGlmIChjcmVhdGVDb25uZWN0aW9uRmlndXJlKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBBZGQgb3VyIGVkaXRwb2xpY3kgYXMgYSBsaXN0ZW5lciBvbiB0aGUgY29ubmVjdGlvbiwgc28gaXQgY2FuIHN0YXkgaW4KLSAgICAgIC8vIHN5bmNoCi0gICAgICAvLyBjb25uZWN0aW9uRmlndXJlLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKEF0dHJpYnV0ZVNlbGVjdGlvbkZlZWRiYWNrUG9saWN5KQotICAgICAgLy8gZ2V0RWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFKSk7Ci0gICAgICAvLyBjb25uZWN0aW9uRmlndXJlLmFkZE1vdXNlTGlzdGVuZXIodGhpcyk7Ci0gICAgICBnZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKS5hZGQoY29ubmVjdGlvbkZpZ3VyZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgZGVhY3RpdmF0ZUNvbm5lY3Rpb24oKQotICB7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKLSAgICAgIHJlbW92ZWQgPSByZW1vdmVDb25uZWN0aW9uRmlndXJlKGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpKTsKLSAgICAgIGlmICghcmVtb3ZlZCkKLSAgICAgIHsKLSAgICAgICAgcmVtb3ZlQ29ubmVjdGlvbkZpZ3VyZShnZXRMYXllcihMYXllckNvbnN0YW50cy5GRUVEQkFDS19MQVlFUikpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLQotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlQ29ubmVjdGlvbkZpZ3VyZShJRmlndXJlIHBhcmVudCkKLSAgewotICAgIGJvb2xlYW4gY29udGFpbnMgPSBmYWxzZTsKLSAgICBJdGVyYXRvciBpdCA9IHBhcmVudC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJRmlndXJlIGZpZyA9IChJRmlndXJlKSBpdC5uZXh0KCk7Ci0gICAgICBpZiAoZmlnLmVxdWFscyhjb25uZWN0aW9uRmlndXJlKSkKLSAgICAgIHsKLSAgICAgICAgY29udGFpbnMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGNvbnRhaW5zKQotICAgIHsKLSAgICAgIHBhcmVudC5yZW1vdmUoY29ubmVjdGlvbkZpZ3VyZSk7Ci0gICAgfQotICAgIHJldHVybiBjb250YWluczsKLSAgfQotCi0gIHB1YmxpYyBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uIGNyZWF0ZUNvbm5lY3Rpb25GaWd1cmUoKQotICB7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgPT0gbnVsbCAmJiBzaG91bGREcmF3Q29ubmVjdGlvbigpKQotICAgIHsKLSAgICAgIElCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGdldE1vZGVsKCk7Ci0gICAgICBPYmplY3QgdHlwZUJlaW5nUmVmID0gYmluZGluZy5nZXRJbnRlcmZhY2UoKTsKLSAgICAgIGlmICh0eXBlQmVpbmdSZWYgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCByZWZlcmVuY2VUeXBlUGFydCA9IChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KSBnZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KHR5cGVCZWluZ1JlZik7Ci0gICAgICAgIGlmIChyZWZlcmVuY2VUeXBlUGFydCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgY29ubmVjdGlvbkZpZ3VyZSA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgcmVmcmVzaENvbm5lY3Rpb25zKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb25GaWd1cmU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGREcmF3Q29ubmVjdGlvbigpCi0gIHsKLSAgICBpZiAoaXNFeHBhbmRlZCkKLSAgICB7ICAKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9ICAKLSAgICBJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKSBnZXRNb2RlbCgpOwotICAgIE9iamVjdCB0eXBlQmVpbmdSZWYgPSBiaW5kaW5nLmdldEludGVyZmFjZSgpOwotICAgIGlmICh0eXBlQmVpbmdSZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLSAgICAgIGlmIChyZWZlcmVuY2VUeXBlUGFydCAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7Ci0gICAgcmVmcmVzaENvbm5lY3Rpb25zKCk7Ci0gICAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJQmluZGluZykKLSAgICB7ICAKLSAgICAgIElCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGdldE1vZGVsKCk7Ci0gICAgICAoKEJveENvbXBvbmVudEZpZ3VyZSkgZ2V0RmlndXJlKCkpLmhlYWRpbmdGaWd1cmUuc2V0SXNSZWFkT25seSgoKElCaW5kaW5nKSBnZXRNb2RlbCgpKS5pc1JlYWRPbmx5KCkpOwotICAgICAgCi0gICAgICBpZiAoYmluZGluZyBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotICAgIAkgIGZpZ3VyZS5nZXRMYWJlbCgpLnNldEljb24oKChJVHJlZUVsZW1lbnQpIGJpbmRpbmcpLmdldEltYWdlKCkpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBTaG93IHRoZSBuYW1lIG9mIHRoZSBJQmluZGluZyB3aXRoIGhvdmVyIGhlbHAKLSAgICAgIFN0cmluZyBwcmVwZW5kU3RyaW5nID0gTWVzc2FnZXMuX1VJX0xBQkVMX0JJTkRJTkc7Ci0gICAgICBob3ZlckhlbHBMYWJlbC5zZXRUZXh0KCIgIiArIHByZXBlbmRTdHJpbmcgKyAiIDogIiArIGJpbmRpbmcuZ2V0TmFtZSgpICsgIiAiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgIGZpZ3VyZS5zZXRUb29sVGlwKGhvdmVySGVscExhYmVsKTsKLSAgICB9Ci0KLSAgICAvL2dldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5wdXQoTGF5LmNsYXNzLCBjb250cm9sbGVyKTsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOyAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZ2V0Q29ubmVjdGlvblRhcmdldEVkaXRQYXJ0KCkKLSAgewotICAgIElCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGdldE1vZGVsKCk7Ci0gICAgT2JqZWN0IHR5cGVCZWluZ1JlZiA9IGJpbmRpbmcuZ2V0SW50ZXJmYWNlKCk7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLSAgICAgIHJldHVybiByZWZlcmVuY2VUeXBlUGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2hDb25uZWN0aW9ucygpCi0gIHsKLSAgICBpZiAoc2hvdWxkRHJhd0Nvbm5lY3Rpb24oKSkKLSAgICB7Ci0gICAgICBJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKSBnZXRNb2RlbCgpOwotICAgICAgT2JqZWN0IHR5cGVCZWluZ1JlZiA9IGJpbmRpbmcuZ2V0SW50ZXJmYWNlKCk7Ci0gICAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLSAgICAgICAgSUZpZ3VyZSByZWZGaWd1cmU9IHJlZmVyZW5jZVR5cGVQYXJ0LmdldEZpZ3VyZSgpOwotICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFNvdXJjZUFuY2hvcihuZXcgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKGdldEZpZ3VyZSgpLCBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IuUklHSFQsIDApKTsKLSAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRUYXJnZXRBbmNob3IobmV3IENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvcihyZWZGaWd1cmUsIENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvci5IRUFERVJfTEVGVCwgMCwgMTEpKTsKLSAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRIaWdobGlnaHQoZmFsc2UpOwotICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFZpc2libGUodHJ1ZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGFjdGl2YXRlQ29ubmVjdGlvbigpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpCi0gICAgewotICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgIHN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOyAgICAKLSAgICAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0V4cGFuZGVkKCkKLSAgewotICAgIHJldHVybiBpc0V4cGFuZGVkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RXhwYW5kZWQoYm9vbGVhbiBpc0V4cGFuZGVkKQotICB7Ci0gICAgdGhpcy5pc0V4cGFuZGVkID0gaXNFeHBhbmRlZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybVJlcXVlc3QoUmVxdWVzdCByZXF1ZXN0KQotICB7ICAKLSAgICBpZiAocmVxdWVzdC5nZXRUeXBlKCkgPT0gUmVxdWVzdENvbnN0YW50cy5SRVFfT1BFTikKLSAgICB7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgIExheW91dE1hbmFnZXIgbGF5b3V0TWFuYWdlciA9IGdldEZpZ3VyZSgpLmdldFBhcmVudCgpLmdldExheW91dE1hbmFnZXIoKTsKLSAgICAgIGlmIChsYXlvdXRNYW5hZ2VyIGluc3RhbmNlb2YgQmluZGluZ0NvbHVtbkxheW91dCkKLSAgICAgIHsgICAgICAgICAgICAgCi0gICAgICAgIEJpbmRpbmdDb2x1bW5MYXlvdXQgYmluZGluZ0NvbHVtbkxheW91dCA9IChCaW5kaW5nQ29sdW1uTGF5b3V0KWxheW91dE1hbmFnZXI7Ci0gICAgICAgIGJpbmRpbmdDb2x1bW5MYXlvdXQuc2V0RXhwYW5kZWQodGhpcywgIWlzRXhwYW5kZWQpOwotICAgICAgICAoKEJpbmRpbmdDb2x1bW5FZGl0UGFydClnZXRQYXJlbnQoKSkucmVmcmVzaEJpbmRpbmdFZGl0UGFydHMoKTsKLSAgICAgIH0gIAotICAgIH0KLSAgfSAKLSAgCi0gIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KGludCBkaXJlY3Rpb24pCi0gIHsKLSAgICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLkVBU1QpCi0gICAgewotICAgICAgLy8gbmF2aWdhdGUgZm9yd2FyZCBhbG9uZyB0aGUgY29ubmVjdGlvbiAodG8gdGhlIHJpZ2h0KQotICAgICAgcmV0dXJuIGdldENvbm5lY3Rpb25UYXJnZXRFZGl0UGFydCgpOwotICAgIH0gIAotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5XRVNUKQotICAgIHsKLSAgICAgIC8vIG5hdmlnYXRlIGJhY2t3YXJkIGFsb25nIHRoZSBjb25uZWN0aW9uICh0byB0aGUgbGVmdCkKLSAgICAgIHJldHVybiBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXRTb3VyY2VDb25uZWN0aW9uRWRpdFBhcnQodGhpcyk7Ci0gICAgfSAgICAgIAotICAgIHJldHVybiBzdXBlci5nZXRSZWxhdGl2ZUVkaXRQYXJ0KGRpcmVjdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9Db2x1bW5FZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0NvbHVtbkVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNGJmM2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0NvbHVtbkVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLQotcHVibGljIGNsYXNzIENvbHVtbkVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0Ci17ICAgCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLSAgICBGaWd1cmUgZmlndXJlID0gbmV3IEZpZ3VyZSgpOwotICAgIFRvb2xiYXJMYXlvdXQgbGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIGxheW91dC5zZXRTdHJldGNoTWlub3JBeGlzKGZhbHNlKTsKLSAgICBsYXlvdXQuc2V0U3BhY2luZygyMCk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIobGF5b3V0KTsKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0gIAotICBwdWJsaWMgSURlc2NyaXB0aW9uIGdldERlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiAoSURlc2NyaXB0aW9uKWdldE1vZGVsKCk7ICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCXN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLSAgeyAKLSAgICBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiBjb2xsZWN0aW9uID0gKEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKWdldE1vZGVsKCk7Ci0gICAgT2JqZWN0IGNoaWxkcmVuW10gPSBjb2xsZWN0aW9uLmdldENoaWxkcmVuKCk7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHsKLSAgICAJbGlzdC5hZGQoY2hpbGRyZW5baW5kZXhdKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkgewotCSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkgewotCSAgCi0gIH0KLX0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9EZWZpbml0aW9uc0VkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRGVmaW5pdGlvbnNFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzIyN2MzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9EZWZpbml0aW9uc0VkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxheW91dExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBhbmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkJpbmRpbmdDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuSW50ZXJmYWNlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLlNlcnZpY2VDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBEZWZpbml0aW9uc0VkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IHsKLQkgIExpc3QgY29sbGVjdGlvbnMgPSBudWxsOwotCSAgRmlndXJlIGNvbnRlbnRQYW5lOwotICAgICAgTGFiZWwgbWVzc2FnZUxhYmVsOyAKLSAgICAgIEludGVybmFsTGF5b3V0TGlzdGVuZXIgaW50ZXJuYWxMYXlvdXRMaXN0ZW5lciA9IG5ldyBJbnRlcm5hbExheW91dExpc3RlbmVyKCk7Ci0JICAKLQkgIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0JICB7ICAgIAotCSAgICBQYW5lbCBwYW5lbCA9IG5ldyBQYW5lbCgpOyAgICAKLSAgICAgICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQodHJ1ZSk7Ci0gICAgICAgIHBhbmVsLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0gICAgICAgIHBhbmVsLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDYwLCAzMCwgMzAsIDMwKSk7Ci0JICAgIGNvbnRlbnRQYW5lID0gbmV3IEZpZ3VyZSgpOwotCSAgICBwYW5lbC5hZGQoY29udGVudFBhbmUpOwotCi0gICAgICAgIG1lc3NhZ2VMYWJlbCA9IG5ldyBMYWJlbCgiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgY29udGVudFBhbmUuYWRkKG1lc3NhZ2VMYWJlbCk7Ci0gICAgICAKLQkgICAgVG9vbGJhckxheW91dCBsYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCh0cnVlKTsKLQkgICAgbGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0JICAgIGxheW91dC5zZXRTcGFjaW5nKDApOwotCSAgICBjb250ZW50UGFuZS5zZXRMYXlvdXRNYW5hZ2VyKGxheW91dCk7Ci0JICAgIHJldHVybiBwYW5lbDsKLQkgIH0KLQkgIAotICAgICAgcHVibGljIHZvaWQgYWN0aXZhdGUoKQotICAgICAgewotICAgICAgICBzdXBlci5hY3RpdmF0ZSgpOwotICAgICAgICAKLSAgICAgICAgLy8gaGVyZSB3ZSB3YW50IHRvIGVuc3VyZSB0aGUgYmluZGluZyBjb2x1bW4gaXMgbGlzdGVuaW5nCi0gICAgICAgIC8vIHRvIHRoZSBpbnRlcmZhY2UgY29sdW1uIHNvIHRoYXQgaXQgY2FuIHJlLWxheW91dCB3aGVuIAotICAgICAgICAvLyB0aGUgaW50ZXJmYWNlIGNoYW5nZXMKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBjaGlsZCA9IChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KWkubmV4dCgpOwotICAgICAgICAgIGlmIChjaGlsZC5nZXRNb2RlbCgpIGluc3RhbmNlb2YgSW50ZXJmYWNlQ29sdW1uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNoaWxkLmdldEZpZ3VyZSgpLmFkZExheW91dExpc3RlbmVyKGludGVybmFsTGF5b3V0TGlzdGVuZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSAgCi0gICAgICAgIH0gICAgICAgICAgIAotICAgICAgfQotICAgICAgICAgICAgICAgIAotCSAgcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKLQkJICBzdXBlci5yZWZyZXNoKCk7Ci0JCSAgCi0JCSAgLy8gUmVmcmVzaCB0aGUgY29ubmVjdGluZyBsaW5lcwotCQkgIHJlZnJlc2hDb25uZWN0aW9ucygpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgSUZpZ3VyZSBnZXRDb250ZW50UGFuZSgpCi0JICB7Ci0JICAgIHJldHVybiBjb250ZW50UGFuZTsKLQkgIH0KLQkgIAotCi0JICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotCSAgewotCSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotCSAgfQotCSAgCi0gICAgICBwdWJsaWMgdm9pZCBzZXRNb2RlbENoaWxkcmVuKExpc3QgbGlzdCkKLSAgICAgIHsKLSAgICAgICAgY29sbGVjdGlvbnMgPSBsaXN0OwotICAgICAgfQotICAgICAgCi0JICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLQkgIHsgCi0JICAgIGlmIChjb2xsZWN0aW9ucyA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgY29sbGVjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgICAgCi0JICAgICAgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgZ2V0TW9kZWwoKTsKLQkgICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkKLQkgICAgICB7ICAKLQkgICAgICAgIGNvbGxlY3Rpb25zLmFkZChuZXcgU2VydmljZUNvbHVtbihkZXNjcmlwdGlvbikpOwotCSAgICAgICAgY29sbGVjdGlvbnMuYWRkKG5ldyBCaW5kaW5nQ29sdW1uKGRlc2NyaXB0aW9uKSk7Ci0JICAgICAgICBjb2xsZWN0aW9ucy5hZGQobmV3IEludGVyZmFjZUNvbHVtbihkZXNjcmlwdGlvbikpOwotCSAgICAgIH0KLQkgICAgfQotICAgICAgCi0gICAgICBib29sZWFuIGhhc0NoaWxkcmVuID0gZmFsc2U7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBjb2xsZWN0aW9ucy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiBjb2x1bW4gPSAoQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24paS5uZXh0KCk7Ci0gICAgICAgIGlmIChjb2x1bW4uaGFzQ2hpbGRyZW4oKSkKLSAgICAgICAgewotICAgICAgICAgIGhhc0NoaWxkcmVuID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoaGFzQ2hpbGRyZW4pCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VMYWJlbC5zZXRUZXh0KCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBpZiAoY29udGVudFBhbmUuZ2V0Q2hpbGRyZW4oKS5jb250YWlucyhtZXNzYWdlTGFiZWwpKQotICAgICAgICAgIGNvbnRlbnRQYW5lLnJlbW92ZShtZXNzYWdlTGFiZWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBtZXNzYWdlTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfUklHSFRfQ0xJQ0tfVE9fSU5TRVJUX0NPTlRFTlQpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmICghY29udGVudFBhbmUuZ2V0Q2hpbGRyZW4oKS5jb250YWlucyhtZXNzYWdlTGFiZWwpKQotICAgICAgICAgIGNvbnRlbnRQYW5lLmFkZChtZXNzYWdlTGFiZWwpOwotICAgICAgfQotICAgICAgCi0KLQkgICAgcmV0dXJuIGNvbGxlY3Rpb25zOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRJbnB1dChPYmplY3Qgb2JqZWN0KQotCSAgeyAgICAKLQkgIH0JIAotICAgICAgCi0gICAgICBwcml2YXRlIGNsYXNzIEludGVybmFsTGF5b3V0TGlzdGVuZXIgZXh0ZW5kcyBMYXlvdXRMaXN0ZW5lci5TdHViCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHBvc3RMYXlvdXQoSUZpZ3VyZSBjb250YWluZXIpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgewotICAgICAgICAgICAgRWRpdFBhcnQgY2hpbGQgPSAoRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBCaW5kaW5nQ29sdW1uRWRpdFBhcnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICgoQmluZGluZ0NvbHVtbkVkaXRQYXJ0KWNoaWxkKS5yZWZyZXNoQmluZGluZ0VkaXRQYXJ0cygpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICB9ICAgCi0gICAgICB9ICAgICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9FZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwZWJkZGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29ubmVjdGlvbkFuY2hvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuTGF5ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuTGF5ZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uOwotCi0KLWNsYXNzIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsCi17Ci0gIHN0YXRpYyBHcmFwaGljYWxFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KEdyYXBoaWNhbEVkaXRQYXJ0IGZvY3VzRWRpdFBhcnQsIGludCBkaXJlY3Rpb24pCi0gIHsKLSAgICAvLyB0aGVzZSAnZGVsdGEnIHZhbHVlcyBuZWVkIHRvIGJlIHNldCB0byBzb21lIHZhbHVlIHRoYXQncyBsYXJnZSBlbm91Z2ggdG8gY3Jvc3MgdGhlIGdhcAotICAgIC8vIGJldHdlZW4gYWRqYWNlbnQgZWRpdCBwYXJ0cyAoc2luY2Ugc29tZSBsYXlvdXRzIG1heSBzcGFjZSB0aGUgZWRpdCBwYXJ0cyBvdXQgYSBiaXQpCi0gICAgaW50IGR4ID0gNTsKLSAgICBpbnQgZHkgPSA1OwotICAgICAgICAKLSAgICBJRmlndXJlIGNvbnRlbnRQYW5lID0gZm9jdXNFZGl0UGFydC5nZXRDb250ZW50UGFuZSgpOwotICAgIAotICAgIC8vIHdlIGF0dGVtcHQgdG8gY29tcHV0ZSBhIHJlY3RhbmdsZSB0aGF0IHJlcHJlc2VudHMgb3VyIGN1cnJlbnQgbG9jYXRpb24KLSAgICBSZWN0YW5nbGUgciA9IGZvY3VzRWRpdFBhcnQuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotICAgIGZvY3VzRWRpdFBhcnQuZ2V0RmlndXJlKCkudHJhbnNsYXRlVG9BYnNvbHV0ZShyKTsKLSAgICBpZiAoY29udGVudFBhbmUgIT0gZm9jdXNFZGl0UGFydC5nZXRGaWd1cmUoKSkKLSAgICB7Ci0gICAgICAvLyBpZiB0aGUgRWRpdFBhcnQgaGFzIGEgY29udGVudFBhbmUgKHRoYXQncyBubyB0aGUgZmlndXJlKSB0aGVuIHdlIGFzc3VtZQotICAgICAgLy8gZWZmZWN0aXZlIHJlY3RhbmdsZSBpcyBvbmx5IHRoZSBoZWFkZXIgcG9ydGlvbiBvZiB0aGUgZmlndXJlCi0gICAgICAvLwotICAgICAgUmVjdGFuZ2xlIGNvbnRlbnRQYW5lQm91bmRzID0gY29udGVudFBhbmUuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotICAgICAgY29udGVudFBhbmUudHJhbnNsYXRlVG9BYnNvbHV0ZShjb250ZW50UGFuZUJvdW5kcyk7Ci0gICAgICAKLSAgICAgIC8vIHdlIGFzc3VtZSB0aGF0IHdoZW4gdGhlIGVkaXRwYXJ0J3MgZmlndXJlIGFuZCBjb250ZW50UGFuZSBhcmUgZGlmZmVyZW50Ci0gICAgICAvLyB0aGF0IHBvcnRpb24gb2YgdGhlICdoaXR0YWJsZScgcG9ydGlvbiBvZiBlZGl0cGFydCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIGNvbnRlbnRQYW5lCi0gICAgICBpZiAoY29udGVudFBhbmVCb3VuZHMueSA+IHIueSkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgdGhlIGNvbnRlbnRQYW5lIGlzIGxvd2VyIHRoYW4gdGhlIGZpZ3VyZSB3ZSBvbmx5IHdhbnQgdGhlIHJlY3RhbmdsZQotICAgICAgICAvLyBhYm92ZSB0aGUgY29udGVudFBhbmUKLSAgICAgICAgci5oZWlnaHQgPSBjb250ZW50UGFuZUJvdW5kcy55IC0gci55OwotICAgICAgICAvLyB3ZSBhZGp1c3QgdGhlIHJlY3RhbmdsZSB0aGUgcmlnaHQgc2xpZ2h0bHkgc2luY2UgdGhlIGNvbnRlbnQgaXMgbmVzdGVkIGEgYml0ICAgICAKLSAgICAgICAgci54ID0gY29udGVudFBhbmVCb3VuZHMueDsKLSAgICAgIH0KLSAgICAgIGlmIChjb250ZW50UGFuZUJvdW5kcy54ID4gci54KQotICAgICAgewotICAgICAgICAvLyBpZiB0aGUgY29udGVudFBhbmUgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBmaWd1cmUgd2Ugb25seSB3YW50IHRoZSByZWN0YW5nbGUKLSAgICAgICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGNvbnRlbnQgcGFuZQotICAgICAgICByLndpZHRoID0gY29udGVudFBhbmVCb3VuZHMueCAtIHIueDsKLSAgICAgIH0KLSAgICB9Ci0gICAgUG9pbnQgcCA9IG51bGw7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5OT1JUSCkKLSAgICB7Ci0gICAgICBwID0gci5nZXRUb3BMZWZ0KCk7Ci0gICAgICBwLnkgLT0gZHk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5TT1VUSCkKLSAgICB7Ci0gICAgICBwID0gci5nZXRCb3R0b21MZWZ0KCk7Ci0gICAgICBwLnggKz0gZHg7Ci0gICAgICBwLnkgKz0gZHk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5FQVNUKQotICAgIHsKLSAgICAgIHAgPSByLmdldFRvcFJpZ2h0KCk7Ci0gICAgICBwLnggKz0gZHg7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5XRVNUKQotICAgIHsKLSAgICAgIHAgPSByLmdldExlZnQoKTsKLSAgICAgIHAueCAtPSBkeDsKLSAgICB9ICAKLSAgICBFZGl0UGFydCB0ID0gZm9jdXNFZGl0UGFydC5nZXRWaWV3ZXIoKS5maW5kT2JqZWN0QXQocCk7Ci0gICAgICAgIAotICAgIGlmICh0IGluc3RhbmNlb2YgQ29sdW1uRWRpdFBhcnQgfHwgdCBpbnN0YW5jZW9mIERlZmluaXRpb25zRWRpdFBhcnQpCi0gICAgewotICAgICAgdCA9IGZvY3VzRWRpdFBhcnQ7Ci0gICAgICB3aGlsZSAoKHQgaW5zdGFuY2VvZiBDb2x1bW5FZGl0UGFydCB8fCB0IGluc3RhbmNlb2YgRGVmaW5pdGlvbnNFZGl0UGFydCkgJiYgdC5nZXRDaGlsZHJlbigpLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgCSAgdCA9IChFZGl0UGFydCkgdC5nZXRDaGlsZHJlbigpLmdldCgwKTsKLSAgICAgIH0KLSAgICB9ICAgICAgCi0gICAgcmV0dXJuIChHcmFwaGljYWxFZGl0UGFydCl0OwotICB9Ci0gIAotICBzdGF0aWMgRWRpdFBhcnQgZ2V0TmV4dFNpYmxpbmcoRWRpdFBhcnQgZWRpdFBhcnQpCi0gIHsgICAgCi0gICAgRWRpdFBhcnQgcmVzdWx0ID0gbnVsbDsgICAgCi0gICAgRWRpdFBhcnQgcGFyZW50ID0gZWRpdFBhcnQuZ2V0UGFyZW50KCk7Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsgIAotICAgICAgTGlzdCBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZHJlbigpOwotICAgICAgaW50IGluZGV4ID0gY2hpbGRyZW4uaW5kZXhPZihlZGl0UGFydCk7Ci0gICAgICBpZiAoaW5kZXggKyAxIDwgY2hpbGRyZW4uc2l6ZSgpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSAoRWRpdFBhcnQpY2hpbGRyZW4uZ2V0KGluZGV4ICsgMSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHN0YXRpYyBFZGl0UGFydCBnZXRQcmV2U2libGluZyhFZGl0UGFydCBlZGl0UGFydCkKLSAgeyAgICAKLSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotICAgIEVkaXRQYXJ0IHBhcmVudCA9IGVkaXRQYXJ0LmdldFBhcmVudCgpOwotICAgIGlmIChwYXJlbnQgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIExpc3QgY2hpbGRyZW4gPSBwYXJlbnQuZ2V0Q2hpbGRyZW4oKTsKLSAgICAgIGludCBpbmRleCA9IGNoaWxkcmVuLmluZGV4T2YoZWRpdFBhcnQpOwotICAgICAgaWYgKGluZGV4IC0gMSA+PSAwKQotICAgICAgewotICAgICAgICAvLyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjaGlsZAotICAgICAgICAvLyAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IChFZGl0UGFydCljaGlsZHJlbi5nZXQoaW5kZXggLSAxKTsKLSAgICAgIH0gCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gCi0gIAotICBzdGF0aWMgRWRpdFBhcnQgZ2V0TmV4dEludGVyZmFjZShFZGl0UGFydCBlZGl0UGFydCkKLSAgeyAKLSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotICAgIGZvciAoRWRpdFBhcnQgZSA9IGVkaXRQYXJ0OyBlICE9IG51bGw7IGUgPSBlLmdldFBhcmVudCgpKQotICAgIHsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgSW50ZXJmYWNlRWRpdFBhcnQpCi0gICAgICB7Ci0gICAgICAgIEludGVyZmFjZUVkaXRQYXJ0IGllID0gKEludGVyZmFjZUVkaXRQYXJ0KWU7Ci0gICAgICAgIHJlc3VsdCA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRTaWJsaW5nKGllKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9ICAKLSAgICB9ICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9ICAgICAgICAgIAotICAKLSAgc3RhdGljIEVkaXRQYXJ0IGdldE5leHRTZXJ2aWNlKEVkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgRWRpdFBhcnQgcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEVkaXRQYXJ0IGUgPSBlZGl0UGFydDsgZSAhPSBudWxsOyBlID0gZS5nZXRQYXJlbnQoKSkKLSAgICB7Ci0gICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlcnZpY2VFZGl0UGFydCkKLSAgICAgIHsKLSAgICAgICAgU2VydmljZUVkaXRQYXJ0IGllID0gKFNlcnZpY2VFZGl0UGFydCllOwotICAgICAgICByZXN1bHQgPSBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXROZXh0U2libGluZyhpZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfSAgCi0gICAgfSAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgc3RhdGljIEVkaXRQYXJ0IGdldFNvdXJjZUNvbm5lY3Rpb25FZGl0UGFydChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgLy8gZmluZCB0aGUgZmlyc3QgY29ubmVjdGlvbiB0aGF0IHRhcmdldHMgdGhpcyBlZGl0UGFydAotICAgIC8vIG5hdmlnYXRlIGJhY2t3YXJkIGFsb25nIHRoZSBjb25uZWN0aW9uICh0byB0aGUgbGVmdCkgdG8gZmluZCB0aGUgc291cmMgZWRpdCBwYXJ0Ci0gICAgRWRpdFBhcnQgcmVzdWx0ID0gbnVsbDsKLSAgICBFZGl0UGFydFZpZXdlciB2aWV3ZXIgPSBlZGl0UGFydC5nZXRWaWV3ZXIoKTsKLSAgICBMYXllck1hbmFnZXIgbWFuYWdlciA9IChMYXllck1hbmFnZXIpZWRpdFBhcnQuZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLmdldChMYXllck1hbmFnZXIuSUQpOwotICAgIElGaWd1cmUgbGF5ZXIgPSBtYW5hZ2VyLmdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpOyAgICAKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsYXllci5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgRmlndXJlIGZpZ3VyZSA9IChGaWd1cmUpaS5uZXh0KCk7Ci0gICAgICBpZiAoZmlndXJlIGluc3RhbmNlb2YgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbikKLSAgICAgIHsKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBjb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uID0gKENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24pZmlndXJlOwotICAgICAgICBDb25uZWN0aW9uQW5jaG9yIHRhcmdldEFuY2hvciA9IGNvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24uZ2V0VGFyZ2V0QW5jaG9yKCk7Ci0gICAgICAgIGlmICh0YXJnZXRBbmNob3IuZ2V0T3duZXIoKSA9PSBlZGl0UGFydC5nZXRGaWd1cmUoKSkKLSAgICAgICAgeyAgCi0gICAgICAgICAgQ29ubmVjdGlvbkFuY2hvciBzb3VyY2VBbmNob3IgPSBjb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uLmdldFNvdXJjZUFuY2hvcigpOwotICAgICAgICAgIElGaWd1cmUgc291cmNlRmlndXJlID0gc291cmNlQW5jaG9yLmdldE93bmVyKCk7ICAgICAgICAgIAotICAgICAgICAgIEVkaXRQYXJ0IHBhcnQgPSBudWxsOwotICAgICAgICAgIHdoaWxlIChwYXJ0ID09IG51bGwgJiYgc291cmNlRmlndXJlICE9IG51bGwpIAotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnQgPSAoRWRpdFBhcnQpdmlld2VyLmdldFZpc3VhbFBhcnRNYXAoKS5nZXQoc291cmNlRmlndXJlKTsKLSAgICAgICAgICAgIHNvdXJjZUZpZ3VyZSA9IHNvdXJjZUZpZ3VyZS5nZXRQYXJlbnQoKTsKLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICAgIHJlc3VsdCA9IHBhcnQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gIAotICAgICAgfSAgICAgICAgICAgICAgICAKLSAgICB9ICAgIAotICAgIHJldHVybiByZXN1bHQ7ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRW5kUG9pbnRFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VuZFBvaW50RWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkYzMyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRW5kUG9pbnRFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmVDYW52YXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBhbmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUmVjdGFuZ2xlRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5MYXllckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRpcmVjdEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTRE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmNvbm5lY3Rpb25zLkNlbnRlcmVkQ29ubmVjdGlvbkFuY2hvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQuTGFiZWxDZWxsRWRpdG9yTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQuTGFiZWxFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBFbmRQb2ludEVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IGltcGxlbWVudHMgSUZlZWRiYWNrSGFuZGxlciwgSU5hbWVkRWRpdFBhcnQKLXsKLSAgcHJvdGVjdGVkIExhYmVsIG5hbWVMYWJlbDsKLSAgcHJvdGVjdGVkIExhYmVsIGFkZHJlc3NMYWJlbDsKLSAgcHJpdmF0ZSBMYWJlbCBob3ZlckhlbHBMYWJlbCA9IG5ldyBMYWJlbCgiIik7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIEZpZ3VyZSBhZGRyZXNzQm94RmlndXJlOwotICBwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBjb25uZWN0aW9uRmlndXJlOwotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIGludCBNQVhfQUREUkVTU19XSURUSCA9IDE1MDsKLQotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgZmlndXJlID0gbmV3IFBhbmVsKCk7Ci0gICAgZmlndXJlLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDQpKTsKLSAgICBUb29sYmFyTGF5b3V0IGxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICAvLyBsYXlvdXQuc2V0TWlub3JBbGlnbm1lbnQoVG9vbGJhckxheW91dC5BTElHTl9UT1BMRUZUKTsKLSAgICBsYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihsYXlvdXQpOwotICAgIG5hbWVMYWJlbCA9IG5ldyBMYWJlbCgpOwotCi0gICAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLSAgICAJbmFtZUxhYmVsLnNldEljb24oKChJVHJlZUVsZW1lbnQpIGdldE1vZGVsKCkpLmdldEltYWdlKCkpOwotICAgIH0KLSAgICAKLSAgICBuYW1lTGFiZWwuc2V0TGFiZWxBbGlnbm1lbnQoTGFiZWwuTEVGVCk7Ci0gICAgLy8gbmFtZUxhYmVsLnNldFRleHRQbGFjZW1lbnQoUG9zaXRpb25Db25zdGFudHMuV0VTVCk7Ci0gICAgZmlndXJlLmFkZChuYW1lTGFiZWwpOwotICAgIEZpZ3VyZSBmMSA9IG5ldyBGaWd1cmUoKTsKLSAgICBmMS5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcigwLCAyMCwgMCwgMCkpOwotICAgIGYxLnNldExheW91dE1hbmFnZXIobmV3IFRvb2xiYXJMYXlvdXQoKSk7Ci0gICAgZmlndXJlLmFkZChmMSk7Ci0gICAgYWRkcmVzc0JveEZpZ3VyZSA9IG5ldyBSZWN0YW5nbGVGaWd1cmUoKTsKLSAgICBhZGRyZXNzQm94RmlndXJlLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotICAgIGFkZHJlc3NCb3hGaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihuZXcgVG9vbGJhckxheW91dCgpCi0gICAgewotICAgICAgLy8gaGVyZScgd2UgdHdlYWsgdGhlIGxheW91dCBzbyB0aGF0IGFkZHJlc3MgbGFiZWxzIGFyZW4ndCBzaXplZCB0b28gd2lkZQotICAgICAgLy8gdGhlIExhYmVsIGNsYXNzIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0aGUgYWRkaXRpb24gb2YgdGhlICcuLi4nIAotICAgICAgLy8KLSAgICAgIHByb3RlY3RlZCBEaW1lbnNpb24gY2FsY3VsYXRlUHJlZmVycmVkU2l6ZShJRmlndXJlIGNvbnRhaW5lciwgaW50IHdIaW50LCBpbnQgaEhpbnQpCi0gICAgICB7Ci0gICAgICAgIERpbWVuc2lvbiBkID0gc3VwZXIuY2FsY3VsYXRlUHJlZmVycmVkU2l6ZShjb250YWluZXIsIHdIaW50LCBoSGludCk7Ci0gICAgICAgIGQud2lkdGggPSBNYXRoLm1pbihkLndpZHRoLCBNQVhfQUREUkVTU19XSURUSCk7Ci0gICAgICAgIHJldHVybiBkOwotICAgICAgfQotICAgIH0pOwotICAgIGYxLmFkZChhZGRyZXNzQm94RmlndXJlKTsKLSAgICBhZGRyZXNzTGFiZWwgPSBuZXcgTGFiZWwoKTsKLQotICAgIGFkZHJlc3NMYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuYmxhY2spOwotICAgIGFkZHJlc3NMYWJlbC5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcigyLCA2LCAyLCA2KSk7Ci0gICAgYWRkcmVzc0xhYmVsLnNldExhYmVsQWxpZ25tZW50KExhYmVsLkxFRlQpOwotICAgIGFkZHJlc3NCb3hGaWd1cmUuYWRkKGFkZHJlc3NMYWJlbCk7Ci0gICAgCi0gICAgLy8gcm1haDogVGhlIGJsb2NrIG9mIGNvZGUgYmVsb3cgaGFzIGJlZW4gbW92ZWQgZnJvbSByZWZyZXNoVmlzdWFscygpLiAgV2UncmUKLSAgICAvLyBhc3N1bWluZyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBFZGl0UGFydCB3aWxsIG5ldmVyIGNoYW5nZSBvbmNlIHRoZQotICAgIC8vIEVkaXRQYXJ0IGhhcyBiZWVuIGNyZWF0ZWQuCi0gICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICB7ICAKLSAgICAgIG5hbWVMYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0gICAgICBhZGRyZXNzTGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgIG5hbWVMYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmxhYmVsQ29sb3IpOwotICAgICAgYWRkcmVzc0xhYmVsLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMubGFiZWxDb2xvcik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaWd1cmU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0gICAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5ESVJFQ1RfRURJVF9ST0xFLCBuZXcgQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5KCkpOwotICAgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUsIG5ldyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5KCkpOwotICB9Ci0gIHByaXZhdGUgRGlyZWN0RWRpdE1hbmFnZXIgbWFuYWdlcjsKLSAgcHJpdmF0ZSBQb2ludCBjdXJzb3JMb2NhdGlvbjsKLQotICBwdWJsaWMgdm9pZCBwZXJmb3JtRGlyZWN0RWRpdChQb2ludCBjdXJzb3JMb2NhdGlvbikKLSAgewotICAgIHRoaXMuY3Vyc29yTG9jYXRpb24gPSBjdXJzb3JMb2NhdGlvbjsKLSAgICBpZiAoIWlzUmVhZE9ubHkoKSAmJiAhaXNGaWxlUmVhZE9ubHkoKSAmJiAoY3Vyc29yTG9jYXRpb24gPT0gbnVsbCB8fCBoaXRUZXN0KGdldExhYmVsRmlndXJlKCksIGN1cnNvckxvY2F0aW9uKSkpIHsKLSAgICAJbWFuYWdlciA9IG5ldyBMYWJlbEVkaXRNYW5hZ2VyKHRoaXMsIG5ldyBMYWJlbENlbGxFZGl0b3JMb2NhdG9yKHRoaXMsIGN1cnNvckxvY2F0aW9uKSk7Ci0gICAgCW1hbmFnZXIuc2hvdygpOwotICAgIH0KLSAgICBlbHNlIGlmIChoaXRUZXN0KGdldEZpZ3VyZSgpLmdldEJvdW5kcygpLCBjdXJzb3JMb2NhdGlvbikgJiYgaXNSZWFkT25seSgpKSB7Ci0gICAgICBkb09wZW5OZXdFZGl0b3IoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1SZXF1ZXN0KFJlcXVlc3QgcmVxKSB7Ci0JICBpZiAocmVxLmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpKSB7Ci0JCSAgcGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JICB9Ci0gIH0KLQotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKQotICB7Ci0gICAgaWYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgdHJhbnNsYXRlQm91bmRzKG5hbWVMYWJlbC5nZXRCb3VuZHMoKSkuY29udGFpbnMoY3Vyc29yTG9jYXRpb24pKQotICAgIHsKLSAgICAgIHJldHVybiBuYW1lTGFiZWw7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRyYW5zbGF0ZUJvdW5kcyhhZGRyZXNzTGFiZWwuZ2V0Qm91bmRzKCkpLmNvbnRhaW5zKGN1cnNvckxvY2F0aW9uKSkKLSAgICB7Ci0gICAgICByZXR1cm4gYWRkcmVzc0xhYmVsOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFJlY3RhbmdsZSB0cmFuc2xhdGVCb3VuZHMoUmVjdGFuZ2xlIGJvdW5kcykgewotCSAgCi0JCUFTRE11bHRpUGFnZUVkaXRvciBlZGl0b3IgPSAoQVNETXVsdGlQYWdlRWRpdG9yKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCUZpZ3VyZUNhbnZhcyBjYW52YXMgPSAoRmlndXJlQ2FudmFzKSAoKEVkaXRQYXJ0Vmlld2VyKSBlZGl0b3IuZ2V0QWRhcHRlcihHcmFwaGljYWxWaWV3ZXIuY2xhc3MpKS5nZXRDb250cm9sKCk7Ci0JCVBvaW50IHZpZXdMb2NhdGlvbiA9IGNhbnZhcy5nZXRWaWV3cG9ydCgpLmdldFZpZXdMb2NhdGlvbigpOwotCQkKLQkJcmV0dXJuIG5ldyBSZWN0YW5nbGUoYm91bmRzLnggKyB2aWV3TG9jYXRpb24ueCwgYm91bmRzLnkgKyB2aWV3TG9jYXRpb24ueSwgYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTsKLSAgfQotCi0gIHByb3RlY3RlZCBPYmplY3QgZ2V0UmVmZXJlbmNlZE1vZGVsKCkKLSAgewotICAgIElFbmRQb2ludCBlbmRQb2ludCA9IChJRW5kUG9pbnQpIGdldE1vZGVsKCk7Ci0gICAgcmV0dXJuIGVuZFBvaW50LmdldEJpbmRpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLSAgewotICAgIElFbmRQb2ludCBlbmRQb2ludCA9IChJRW5kUG9pbnQpIGdldE1vZGVsKCk7Ci0gICAgbmFtZUxhYmVsLnNldFRleHQoZW5kUG9pbnQuZ2V0TmFtZSgpKTsKLSAgICBhZGRyZXNzTGFiZWwuc2V0VGV4dChlbmRQb2ludC5nZXRBZGRyZXNzKCkpOwotICAgIAotICAgIFJlY3RhbmdsZSB0ZXh0Qm91bmRzID0gYWRkcmVzc0xhYmVsLmdldFRleHRCb3VuZHMoKTsKLSAgICBSZWN0YW5nbGUgYm91bmRzID0gYWRkcmVzc0xhYmVsLmdldEJvdW5kcygpOwotICAgIGludCB0ZXh0UGxhY2VtZW50ID0gYWRkcmVzc0xhYmVsLmdldFRleHRQbGFjZW1lbnQoKTsKLSAgICBpbnQgeERlbHRhID0gdGV4dEJvdW5kcy54IC0gYm91bmRzLng7Ci0gICAgaW50IHhUZXh0SW5jcmVhc2UgPSB0ZXh0UGxhY2VtZW50IC0geERlbHRhOwotICAgIGludCB0ZXh0U2l6ZSA9IHRleHRCb3VuZHMud2lkdGggKyB4VGV4dEluY3JlYXNlOwotICAgIGludCBib3VuZFNpemUgPSBib3VuZHMud2lkdGg7Ci0KLSAgICBpZiAodGV4dFNpemUgPiBib3VuZFNpemUpIHsKLSAgICAJaG92ZXJIZWxwTGFiZWwuc2V0VGV4dCgiICIgKyBlbmRQb2ludC5nZXRBZGRyZXNzKCkgICsgIiAiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIGFkZHJlc3NMYWJlbC5zZXRUb29sVGlwKGhvdmVySGVscExhYmVsKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGFkZHJlc3NMYWJlbC5zZXRUb29sVGlwKG51bGwpOwotICAgIH0KLQotICAgIHJlZnJlc2hDb25uZWN0aW9ucygpOwotICAgIHN1cGVyLnJlZnJlc2hWaXN1YWxzKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpCi0gIHsKLSAgICBzdXBlci5hY3RpdmF0ZSgpOwotICAgIGFjdGl2YXRlQ29ubmVjdGlvbigpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkZWFjdGl2YXRlKCkKLSAgewotCSAgc3VwZXIuZGVhY3RpdmF0ZSgpOwotCSAgZGVhY3RpdmF0ZUNvbm5lY3Rpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFjdGl2YXRlQ29ubmVjdGlvbigpCi0gIHsKLSAgICBpZiAoY3JlYXRlQ29ubmVjdGlvbkZpZ3VyZSgpICE9IG51bGwpCi0gICAgewotICAgICAgZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuQ09OTkVDVElPTl9MQVlFUikuYWRkKGNvbm5lY3Rpb25GaWd1cmUpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGRlYWN0aXZhdGVDb25uZWN0aW9uKCkKLSAgewotICAgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpCi0gICAgewotICAgICAgYm9vbGVhbiByZW1vdmVkID0gZmFsc2U7Ci0gICAgICByZW1vdmVkID0gcmVtb3ZlQ29ubmVjdGlvbkZpZ3VyZShnZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKSk7Ci0gICAgICAKLSAgICAgIGlmICghcmVtb3ZlZCkgewotICAgIAkgIHJlbW92ZUNvbm5lY3Rpb25GaWd1cmUoZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuRkVFREJBQ0tfTEFZRVIpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiByZW1vdmVDb25uZWN0aW9uRmlndXJlKElGaWd1cmUgcGFyZW50KSB7Ci0JICBib29sZWFuIGNvbnRhaW5zID0gZmFsc2U7Ci0JICBJdGVyYXRvciBpdCA9IHBhcmVudC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7Ci0JICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCSAgSUZpZ3VyZSBmaWcgPSAoSUZpZ3VyZSkgaXQubmV4dCgpOwotCQkgIGlmIChmaWcuZXF1YWxzKGNvbm5lY3Rpb25GaWd1cmUpKSB7Ci0JCQkgIGNvbnRhaW5zID0gdHJ1ZTsKLQkJCSAgYnJlYWs7Ci0JCSAgfQotCSAgfQotCSAgCi0JICBpZiAoY29udGFpbnMpIHsKLQkJICBwYXJlbnQucmVtb3ZlKGNvbm5lY3Rpb25GaWd1cmUpOwotCSAgfQotCSAgCi0JICByZXR1cm4gY29udGFpbnM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGREcmF3Q29ubmVjdGlvbigpCi0gIHsKLQkgIE9iamVjdCB0eXBlQmVpbmdSZWYgPSBnZXRSZWZlcmVuY2VkTW9kZWwoKTsKLSAgICAgIGlmICh0eXBlQmVpbmdSZWYgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCByZWZlcmVuY2VUeXBlUGFydCA9IChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KSBnZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KHR5cGVCZWluZ1JlZik7Ci0gICAgICAgIGlmIChyZWZlcmVuY2VUeXBlUGFydCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgIAlyZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0KLSAgcHVibGljIENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24gY3JlYXRlQ29ubmVjdGlvbkZpZ3VyZSgpCi0gIHsKLQkgIGlmIChjb25uZWN0aW9uRmlndXJlID09IG51bGwgJiYgc2hvdWxkRHJhd0Nvbm5lY3Rpb24oKSkKLQkgICAgewotCSAgICAgIE9iamVjdCB0eXBlQmVpbmdSZWYgPSBnZXRSZWZlcmVuY2VkTW9kZWwoKTsKLQkgICAgICBpZiAodHlwZUJlaW5nUmVmICE9IG51bGwpCi0JICAgICAgewotCSAgICAgICAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCByZWZlcmVuY2VUeXBlUGFydCA9IChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KSBnZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KHR5cGVCZWluZ1JlZik7Ci0JICAgICAgICBpZiAocmVmZXJlbmNlVHlwZVBhcnQgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgLy8gV2UgZG8gcmVmZXJlbmNlIGFub3RoZXIgVHlwZS4gQnVpbGQgYSBjb25uZWN0aW9uLiBXZSBjYW4gbWFrZQotCSAgICAgICAgICAvLyBhc3N1bXB0aW9ucyBhYm91dCBhbmNob3IgcG9zaXRpb25pbmcgc2luY2UgYW4gYXR0cmlidXRlIGNhbiBvbmx5Ci0JICAgICAgICAgIC8vIGhhdmUgYSAicmVmZXJlbmNlIiByZWxhdGlvbnNoaXAsIG5vICJpbmhlcml0YW5jZSIsIG5vCi0JICAgICAgICAgIC8vICJpcy1yZWZlcmVuY2VkLWJ5IgotCSAgICAgICAgICBjb25uZWN0aW9uRmlndXJlID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24oKTsKLQkgICAgICAgICAgcmVmcmVzaENvbm5lY3Rpb25zKCk7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIHJldHVybiBjb25uZWN0aW9uRmlndXJlOwotICB9Ci0KLSAgRWRpdFBhcnQgZ2V0Q29ubmVjdGlvblRhcmdldEVkaXRQYXJ0KCkKLSAgewotICAgIE9iamVjdCB0eXBlQmVpbmdSZWYgPSBnZXRSZWZlcmVuY2VkTW9kZWwoKTsKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKSB7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLSAgICAgIHJldHVybiByZWZlcmVuY2VUeXBlUGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2hDb25uZWN0aW9ucygpIHsKLQkgIGlmIChzaG91bGREcmF3Q29ubmVjdGlvbigpKSB7Ci0JCSAgT2JqZWN0IHR5cGVCZWluZ1JlZiA9IGdldFJlZmVyZW5jZWRNb2RlbCgpOwotCQkgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpIHsKLQkJCSAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCByZWZlcmVuY2VUeXBlUGFydCA9IChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KSBnZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KHR5cGVCZWluZ1JlZik7Ci0JICAgICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0U291cmNlQW5jaG9yKG5ldyBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IoYWRkcmVzc0JveEZpZ3VyZSwgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLlJJR0hULCAwLCAwKSk7Ci0JICAgICAgICAgIElGaWd1cmUgdGFyZ2V0RmlndXJlID0gcmVmZXJlbmNlVHlwZVBhcnQuZ2V0RmlndXJlKCk7Ci0JICAgICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0VGFyZ2V0QW5jaG9yKG5ldyBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IodGFyZ2V0RmlndXJlLCBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IuSEVBREVSX0xFRlQsIDAsIDEwKSk7Ci0JICAgICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0SGlnaGxpZ2h0KGZhbHNlKTsKLQkgICAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRWaXNpYmxlKHRydWUpOwotCQkgIH0KLQkJICBlbHNlIHsKLQkJCSAgYWN0aXZhdGVDb25uZWN0aW9uKCk7Ci0JCSAgfQotCSAgfQotCSAgZWxzZSBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKXsKLQkJICBjb25uZWN0aW9uRmlndXJlLnNldFZpc2libGUoZmFsc2UpOwotCSAgfQotICB9Ci0KLSAgcHJpdmF0ZSBJRmlndXJlIGdldEZpZ3VyZUZvckZlZWRiYWNrKCkKLSAgewotICAgIHJldHVybiBmaWd1cmU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpCi0gIHsKLSAgICBJRmlndXJlIGZpZ3VyZSA9IGdldEZpZ3VyZUZvckZlZWRiYWNrKCk7Ci0gICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpOwotICAgIAotICAgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpIHsKLSAgICAJY29ubmVjdGlvbkZpZ3VyZS5zZXRIaWdobGlnaHQodHJ1ZSk7Ci0gICAgCWdldExheWVyKExheWVyQ29uc3RhbnRzLkZFRURCQUNLX0xBWUVSKS5hZGQoY29ubmVjdGlvbkZpZ3VyZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKQotICB7Ci0gICAgSUZpZ3VyZSBmaWd1cmUgPSBnZXRGaWd1cmVGb3JGZWVkYmFjaygpOwotICAgIGZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoZmlndXJlLmdldFBhcmVudCgpLmdldEJhY2tncm91bmRDb2xvcigpKTsKLSAgICAKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKSB7Ci0gICAgCWNvbm5lY3Rpb25GaWd1cmUuc2V0SGlnaGxpZ2h0KGZhbHNlKTsKLSAgICAJZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuQ09OTkVDVElPTl9MQVlFUikuYWRkKGNvbm5lY3Rpb25GaWd1cmUpOwotICAgIH0KLSAgfQotCi0gIC8vIFRPRE86IHJtYWg6IFZFUlkgVUdMWSBIQUNLLi4uLiBJIGRvbid0IHNlZSBhbnkgb3RoZXIgd2F5IHRvIHNvbHZlIHRoaXMKLSAgLy8gaXNzdWUgYXQgdGhpcyB0aW1lLgotICAvLyBFbmRQb2ludEVkaXRQYXJ0IGNvbnRhaW5zIHR3byBsYWJlbHMgd2hpY2ggY2FuIGJlIGRpcmVjdCBlZGl0ZWQuIFRoZSBmYWNhZGUKLSAgLy8gZHJpdmluZyBFbmRQb2ludEVkaXRQYXJ0Ci0gIC8vIGNvbnRhaW5zIGEgZ2V0U2V0TmFtZUNvbW1hbmQoKSBhbmQgYSBnZXRTZXRBZGRyZXNzQ29tbWFuZCgpLi4uIGhvd2V2ZXIsCi0gIC8vIHRoaXMgY2xhc3MgKExhYmVsRGlyZWN0RWRpdFBvbGljeSkKLSAgLy8gb25seSBrbm93cyBhYm91dCBnZXRTZXROYW1lQ29tbWFuZCgpLi4uLi4gVGhpcyBpcyB0aGUgcHJvYmxlbSB3ZSBmYWNlIHdoZW4KLSAgLy8gY29tYmluaW5nIHR3byBsYWJlbHMgaW50bwotICAvLyBvbmUgRWRpdFBhcnQuLi4uLgotICAvLyBTZWUgTGFiZWxEaXJlY3RFZGl0UG9saWN5LmdldERpcmVjdEVkaXRDb21tYW5kKERpcmVjdEVkaXRSZXF1ZXN0KQotICBwdWJsaWMgQ29tbWFuZCBnZXRTZXRQcm9wZXJMYWJlbENvbW1hbmQoU3RyaW5nIG5ld1ZhbHVlKQotICB7Ci0gICAgLy8gVE9ETzogcm1haDogV2UgbmVlZCB0byB0cmFuc2xhdGUgdGhlIHBvaW50Li4uCi0gICAgaWYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgdHJhbnNsYXRlQm91bmRzKG5hbWVMYWJlbC5nZXRCb3VuZHMoKSkuY29udGFpbnMoY3Vyc29yTG9jYXRpb24pKQotICAgIHsKLSAgICAgIHJldHVybiAoKElFbmRQb2ludCkgZ2V0TW9kZWwoKSkuZ2V0U2V0TmFtZUNvbW1hbmQobmV3VmFsdWUpOwotICAgIH0KLSAgICBlbHNlIGlmICh0cmFuc2xhdGVCb3VuZHMoYWRkcmVzc0xhYmVsLmdldEJvdW5kcygpKS5jb250YWlucyhjdXJzb3JMb2NhdGlvbikpCi0gICAgewotICAgICAgcmV0dXJuICgoSUVuZFBvaW50KSBnZXRNb2RlbCgpKS5nZXRTZXRBZGRyZXNzQ29tbWFuZChuZXdWYWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5FQVNUKQotICAgIHsgICAgICAKLSAgICAgIC8vIG5hdmlnYXRlIGZvcndhcmQgYWxvbmcgdGhlIGNvbm5lY3Rpb24gKHRvIHRoZSByaWdodCkKLSAgICAgIHJldHVybiBnZXRDb25uZWN0aW9uVGFyZ2V0RWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5TT1VUSCkKLSAgICB7Ci0gICAgCXJldHVybiBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXROZXh0U2VydmljZSh0aGlzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VwZXIuZ2V0UmVsYXRpdmVFZGl0UGFydChkaXJlY3Rpb24pOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JRmVlZGJhY2tIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSUZlZWRiYWNrSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzA1MzYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JRmVlZGJhY2tIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZlZWRiYWNrSGFuZGxlciB7Ci0JcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKTsKLQlwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0lOYW1lZEVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSU5hbWVkRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY2ZGUzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSU5hbWVkRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU5hbWVkRWRpdFBhcnQgewotCXB1YmxpYyBMYWJlbCBnZXRMYWJlbEZpZ3VyZSgpOwotCXB1YmxpYyB2b2lkIHBlcmZvcm1EaXJlY3RFZGl0KFBvaW50IGN1cnNvckxvY2F0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JbnRlcmZhY2VFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0ludGVyZmFjZUVkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNTk1ZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0ludGVyZmFjZUVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxpbmVCb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5SZWN0YW5nbGVGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkJveENvbXBvbmVudEZpZ3VyZTsKLS8vaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5CYXNlTGlua0ljb25GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLlJvd0xheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSW50ZXJmYWNlRWRpdFBhcnQgZXh0ZW5kcyBBYnN0cmFjdEJveHRFZGl0UGFydCBpbXBsZW1lbnRzIElGZWVkYmFja0hhbmRsZXIKLXsKLQlwcml2YXRlIFJlY3RhbmdsZUZpZ3VyZSBsaW5rSWNvbkNvbHVtbjsKLQlwcm90ZWN0ZWQgQm94Q29tcG9uZW50RmlndXJlIGJveEZpZ3VyZTsKLSAgcHVibGljIEludGVyZmFjZUVkaXRQYXJ0KCkKLSAgewotICAgIGNvbHVtbkRhdGEuc2V0Q29sdW1uV2VpZ2h0KCJNZXNzYWdlTGFiZWwiLCAwKTsgLy8kTk9OLU5MUy0xJAotICAgIGNvbHVtbkRhdGEuc2V0Q29sdW1uV2VpZ2h0KCJNZXNzYWdlQ29udGVudFBhbmUiLCAxMDApOyAvLyROT04tTkxTLTEkCi0gICAgY29sdW1uRGF0YS5zZXRDb2x1bW5XZWlnaHQoInBhcmFtZXRlck5hbWUiLCA1MCk7IC8vJE5PTi1OTFMtMSQKLSAgICBjb2x1bW5EYXRhLnNldENvbHVtbldlaWdodCgicGFyYW1ldGVyVHlwZSIsIDUwKTsgICAgICAgICAvLyROT04tTkxTLTEkCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLQkJSUZpZ3VyZSBvdXRlciA9IG5ldyBGaWd1cmUoKSB7Ci0JCQlwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHsKLQkJCQlzdXBlci52YWxpZGF0ZSgpOwotCQkJCS8vIElmIHdlIGRvbid0IGxheW91dCBvdXIgTGluayBJY29uIENvbHVtbiBhdCB0aGlzIHBvaW50LCB0aGUgbGluayBpY29ucwotCQkJCS8vIHdpbGwgbm90IGJlIHByb3Blcmx5IHVwZGF0ZWQgaW4gdGhlIHNjZW5hcmlvIHdoZXJlIGEgcG9ydHR5cGUgaXMgYWRkZWQKLQkJCQkvLyBvciByZW1vdmVkLiAgVGhlIGxpbmsgaWNvbnMgb2YgdGhlIGV4aXN0aW5nIHBvcnR0eXBlcyB3aWxsIG5vdCBiZSB1cGRhdGVkLgotCQkJCWdldExpbmtJY29uQ29sdW1uKCkuZ2V0TGF5b3V0TWFuYWdlcigpLmxheW91dChnZXRMaW5rSWNvbkNvbHVtbigpKTsKLQkJCX0KLQkJfTsKLQkJCi0JCW91dGVyLnNldExheW91dE1hbmFnZXIobmV3IFRvb2xiYXJMYXlvdXQodHJ1ZSkpOwotCSAgICBib3hGaWd1cmUgPSAoQm94Q29tcG9uZW50RmlndXJlKSBzdXBlci5jcmVhdGVGaWd1cmUoKTsKLQkgICAgCi0JICAgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JICAgIAlib3hGaWd1cmUuZ2V0TGFiZWwoKS5zZXRJY29uKCgoSVRyZWVFbGVtZW50KSBnZXRNb2RlbCgpKS5nZXRJbWFnZSgpKTsJCi0JICAgIH0KLQkgICAgCi0JICAgIGJveEZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMub3JhbmdlKTsKLQkgICAgYm94RmlndXJlLnNldEJvcmRlcihuZXcgTGluZUJvcmRlcigxKSk7Ci0JICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLQkgICAgdG9vbGJhckxheW91dC5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOwotCSAgICBib3hGaWd1cmUuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0KTsKLQkgICAgb3V0ZXIuYWRkKGJveEZpZ3VyZSk7Ci0JICAgIGxpbmtJY29uQ29sdW1uID0gbmV3IFJlY3RhbmdsZUZpZ3VyZSgpOwotCSAgICBsaW5rSWNvbkNvbHVtbi5zZXRPdXRsaW5lKGZhbHNlKTsKLQkgICAgbGlua0ljb25Db2x1bW4uc2V0TGF5b3V0TWFuYWdlcihuZXcgVG9vbGJhckxheW91dCgpIHsKLQkJCXB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIHBhcmVudCkgewotCQkJCXN1cGVyLmxheW91dChwYXJlbnQpOwotCQkJCQotCQkJCS8vIFdlIG5lZWQgdG8gbGF5b3V0IG9uIHRoZSB5LWF4aXMKLQkJCQlJdGVyYXRvciBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGNoaWxkcmVuLmhhc05leHQoKSkgewotCQkJCQlPYmplY3QgaXRlbSA9IGNoaWxkcmVuLm5leHQoKTsKLQkJCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBJRmlndXJlKSB7Ci0JCQkJCQlJRmlndXJlIGZpZ3VyZSA9IChJRmlndXJlKSBpdGVtOwotCQkJCQkJZmlndXJlLmdldExheW91dE1hbmFnZXIoKS5sYXlvdXQoZmlndXJlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCQotCQkJcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkgewotCQkJCURpbWVuc2lvbiBkaW1lbnNpb24gPSBzdXBlci5jYWxjdWxhdGVQcmVmZXJyZWRTaXplKGNvbnRhaW5lciwgd0hpbnQsIGhIaW50KTsKLQkJCQkKLQkJCQkvLyBDYWxjdWxhdGUgdGhlIGhlaWdodAotCQkJCUl0ZXJhdG9yIGl0ID0gY29udGFpbmVyLmdldFBhcmVudCgpLmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJCU9iamVjdCBpdGVtID0gaXQubmV4dCgpOwotCQkJCQlpZiAoaXRlbSBpbnN0YW5jZW9mIEJveENvbXBvbmVudEZpZ3VyZSkgewotCQkJCQkJZGltZW5zaW9uLmhlaWdodCA9ICgoSUZpZ3VyZSkgaXRlbSkuZ2V0UHJlZmVycmVkU2l6ZSgpLmhlaWdodDsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJcmV0dXJuIGRpbWVuc2lvbjsKLQkJCX0KLQkgICAgfSk7Ci0JICAgIAotCSAgICBvdXRlci5hZGQobGlua0ljb25Db2x1bW4pOwotCSAgICAKLQkgICAgLy8gcm1haDogVGhlIGJsb2NrIG9mIGNvZGUgYmVsb3cgaGFzIGJlZW4gbW92ZWQgZnJvbSByZWZyZXNoVmlzdWFscygpLiAgV2UncmUKLQkgICAgLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLQkgICAgLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLQkgICAgaWYgKGlzUmVhZE9ubHkoKSkgCi0JICAgIHsKLQkgICAgCWZpZ3VyZS5nZXRMYWJlbCgpLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgCWZpZ3VyZS5nZXRMYWJlbCgpLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5ibGFjayk7Ci0JICAgIH0KLQkgICAgCi0JICAgIHJldHVybiBvdXRlcjsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIGF0dGFjaFRvSW50ZXJmYWNlRWRpdFBhcnQoRWRpdFBhcnQgZWRpdFBhcnQsIFJvd0xheW91dCByb3dMYXlvdXQpCi0gIHsKLSAgICBmb3IgKEVkaXRQYXJ0IHBhcmVudCA9IGVkaXRQYXJ0LmdldFBhcmVudCgpOyBwYXJlbnQgIT0gbnVsbDsgcGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpKQotICAgIHsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkKLSAgICAgIHsKLSAgICAgICAgSW50ZXJmYWNlRWRpdFBhcnQgaW50ZXJmYWNlRWRpdFBhcnQgPSAoSW50ZXJmYWNlRWRpdFBhcnQpcGFyZW50OwotICAgICAgICByb3dMYXlvdXQuc2V0Q29sdW1uRGF0YShpbnRlcmZhY2VFZGl0UGFydC5jb2x1bW5EYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9ICAKLSAgICB9ICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoQ2hpbGRyZW4oKQotICB7Ci0gICAgc3VwZXIucmVmcmVzaENoaWxkcmVuKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLSAgewotICAgIHN1cGVyLnJlZnJlc2hWaXN1YWxzKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLSAgewotICAgIElJbnRlcmZhY2UgdGhlSW50ZXJmYWNlID0gKElJbnRlcmZhY2UpZ2V0TW9kZWwoKTsKLSAgICByZXR1cm4gdGhlSW50ZXJmYWNlLmdldE9wZXJhdGlvbnMoKTsgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICBzdXBlci5hZGRGZWVkYmFjaygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0JICBzdXBlci5yZW1vdmVGZWVkYmFjaygpOwotICB9Ci0KLSAgcHVibGljIEVkaXRQYXJ0IGdldFJlbGF0aXZlRWRpdFBhcnQoaW50IGRpcmVjdGlvbikKLSAgewotICAgIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuV0VTVCkKLSAgICB7Ci0gICAgICByZXR1cm4gRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuZ2V0U291cmNlQ29ubmVjdGlvbkVkaXRQYXJ0KHRoaXMpOyAgICAgCi0gICAgfSAgCi0gICAgcmV0dXJuIHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLSAgfQotICAKLSAgcHVibGljIElGaWd1cmUgZ2V0TGlua0ljb25Db2x1bW4oKSB7Ci0JICByZXR1cm4gbGlua0ljb25Db2x1bW47Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9NZXNzYWdlUmVmZXJlbmNlRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9NZXNzYWdlUmVmZXJlbmNlRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg2ZWI4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvTWVzc2FnZVJlZmVyZW5jZUVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTWFyZ2luQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkRyYWdUcmFja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTREdyYXBoTm9kZURyYWdUcmFja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkxpc3RGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLk1vZGVsRGlhZ25vc3RpY0luZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLlJvd0xheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydCBleHRlbmRzIEJhc2VFZGl0UGFydCBpbXBsZW1lbnRzIElGZWVkYmFja0hhbmRsZXIKLXsgICAKLSAgcHJvdGVjdGVkIEZpZ3VyZSBjb250ZW50UGFuZTsgIAotICBwcm90ZWN0ZWQgTGFiZWwgbGFiZWw7Ci0gIHByb3RlY3RlZCBSb3dMYXlvdXQgcm93TGF5b3V0OwotICAKLSAgcHJpdmF0ZSBGaWd1cmUgbWVzc2FnZUxhYmVsV3JhcHBlcjsKLSAgcHJpdmF0ZSBMYWJlbCBtZXNzYWdlTGFiZWw7Ci0gIAotICBwcm90ZWN0ZWQgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSA9IG5ldyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5KCk7Ci0gIAotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgTGlzdEZpZ3VyZSBmaWd1cmUgPSBuZXcgTGlzdEZpZ3VyZSh0cnVlKTsKLSAgICBmaWd1cmUuc2V0T3BhcXVlKHRydWUpOwotICAgIGZpZ3VyZS5zZXRQYWludEZpcnN0TGluZShmYWxzZSk7Ci0gICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy50b29sdGlwQmFja2dyb3VuZCk7Ci0KLSAgICByb3dMYXlvdXQgPSBuZXcgUm93TGF5b3V0KCk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIocm93TGF5b3V0KTsgCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoKTsKLSAgICBsYWJlbC5zZXRMYWJlbEFsaWdubWVudChMYWJlbC5MRUZUKTsKLSAgICAvL2xhYmVsLnNldEZvbnQoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLm1lZGl1bUZvbnQpOyAKLSAgICBsYWJlbC5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcigyLCAxNiwgMiAsMTApKTsKLSAgICBmaWd1cmUuYWRkKGxhYmVsKTsgIAotICAgIAotICAgIGNvbnRlbnRQYW5lID0gbmV3IExpc3RGaWd1cmUoKTsKLSAgICAoKExpc3RGaWd1cmUpY29udGVudFBhbmUpLnNldE9wYXF1ZSh0cnVlKTsKLSAgICBjb250ZW50UGFuZS5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlzdEJhY2tncm91bmQpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICAKLSAgICAvKgotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKQotICAgIHsKLSAgICAgICAvLyBUT0RPIChjcykgY29uc2lkZXIgbWlub3IgdHdlYWsgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgcm93IGZpbGxzIHVwIHRoZSBhdmFpbGFibGUgc3BhY2UgICAgICAgICAgICAgCi0gICAgICAgLy8gdmVydGljYWxseS4uLiB3aXRob3V0IHRoaXMgYSBiaXQgb2YgdHJpbSBpcyB2aXNpYmxlIGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QKLSAgICAgICAvLyB3aGVuIHRoZSBwYXJhbSBsYWJlbHMgYXJlIGdpdmVuIGEgbWFyZ2luIHdpZHRoIHRvcCBhbmQgYm90dG9tIDwgICc0JyAKLSAgICAgICBwdWJsaWMgdm9pZCBsYXlvdXQoSUZpZ3VyZSBwYXJlbnQpCi0gICAgICAgewotICAgICAgICAgc3VwZXIubGF5b3V0KHBhcmVudCk7Ci0gICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBGaWd1cmUgY2hpbGQgPSAoRmlndXJlKWNoaWxkcmVuLmdldCgwKTsKLSAgICAgICAgICAgIC8vY2hpbGQuZ2V0Qm91bmRzKCkuaGVpZ2h0ID0gcGFyZW50LmdldENsaWVudEFyZWEoKS5oZWlnaHQ7Ci0gICAgICAgICB9ICAKLSAgICAgICB9Ci0gICAgfTsgICAgIAotICAgICAqLwotICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICBjb250ZW50UGFuZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotICAgIGZpZ3VyZS5hZGQoY29udGVudFBhbmUpOwotICAgIAotICAgIHJvd0xheW91dC5zZXRDb25zdHJhaW50KGxhYmVsLCAiTWVzc2FnZUxhYmVsIik7IC8vJE5PTi1OTFMtMSQKLSAgICByb3dMYXlvdXQuc2V0Q29uc3RyYWludChjb250ZW50UGFuZSwgIk1lc3NhZ2VDb250ZW50UGFuZSIpOyAvLyROT04tTkxTLTEkCi0gICAKLSAgICAvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotICAgIC8vIGFzc3VtaW5nIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIEVkaXRQYXJ0IHdpbGwgbmV2ZXIgY2hhbmdlIG9uY2UgdGhlCi0gICAgLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICBpZiAoaXNSZWFkT25seSgpKSAKLSAgICB7Ci0gICAgICBsYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0gICAgICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TWVzc2FnZVJlZkhlYWRpbmdDb2xvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBsYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuYmxhY2spOwotICAgICAgbGFiZWwuZ2V0UGFyZW50KCkuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnRvb2x0aXBCYWNrZ3JvdW5kKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7ICAKLQkgIGlmICghaXNSZWFkT25seSgpICYmICFpc0ZpbGVSZWFkT25seSgpKSB7Ci0JCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5QUklNQVJZX0RSQUdfUk9MRSwgbmV3IEFTRERyYWdBbmREcm9wRWRpdFBvbGljeShnZXRWaWV3ZXIoKSwgc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kpKTsKLQkgIH0KLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUsIHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5KTsKLSAgfQotICAKLSAgcHVibGljIERyYWdUcmFja2VyIGdldERyYWdUcmFja2VyKFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiBuZXcgQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXIoKEVkaXRQYXJ0KXRoaXMpOwotICB9Ci0gIAotICBwdWJsaWMgSUZpZ3VyZSBnZXRDb250ZW50UGFuZSgpCi0gIHsKLSAgICByZXR1cm4gY29udGVudFBhbmU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLSAgeyAgIAotICAgIHN1cGVyLnJlZnJlc2hWaXN1YWxzKCk7Ci0gICAgSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZSA9IChJTWVzc2FnZVJlZmVyZW5jZSlnZXRNb2RlbCgpOwotICAgIAotICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0gICAgCWxhYmVsLnNldFRleHQoKChJVHJlZUVsZW1lbnQpIG1lc3NhZ2UpLmdldFRleHQoKSk7Ci0gICAgCWxhYmVsLnNldEljb24oKChJVHJlZUVsZW1lbnQpIG1lc3NhZ2UpLmdldEltYWdlKCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXNpemUgY29sdW1uIHdpZHRocy4gIFNpemVzIG1heSBoYXZlIHNocnVuay4KLSAgICByb3dMYXlvdXQuZ2V0Q29sdW1uRGF0YSgpLmNsZWFyQ29sdW1uV2lkdGhzKCk7Ci0gICAgZm9yIChFZGl0UGFydCBwYXJlbnQgPSBnZXRQYXJlbnQoKTsgcGFyZW50ICE9IG51bGw7IHBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKSkKLSAgICB7Ci0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSW50ZXJmYWNlRWRpdFBhcnQpCi0gICAgICB7IAotICAgICAgICAoKEdyYXBoaWNhbEVkaXRQYXJ0KXBhcmVudCkuZ2V0RmlndXJlKCkuaW52YWxpZGF0ZVRyZWUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoQ2hpbGRyZW4oKSB7Ci0JICBzdXBlci5yZWZyZXNoQ2hpbGRyZW4oKTsKLSAgICAgIHJlZnJlc2hNZXNzYWdlKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hNZXNzYWdlKCkgewotCSAgaWYgKGdldE1vZGVsQ2hpbGRyZW4oKS5zaXplKCkgPiAwKSB7Ci0JCSAgaWYgKG1lc3NhZ2VMYWJlbFdyYXBwZXIgIT0gbnVsbCkgewotCQkJICBjb250ZW50UGFuZS5yZW1vdmUobWVzc2FnZUxhYmVsV3JhcHBlcik7Ci0JCQkgIG1lc3NhZ2VMYWJlbFdyYXBwZXIgPSBudWxsOwotCQkgIH0KLQkgIH0KLQkgIGVsc2UgewotCQkgIGlmIChtZXNzYWdlTGFiZWxXcmFwcGVyID09IG51bGwpIHsKLQkJCSAgbWVzc2FnZUxhYmVsV3JhcHBlciA9IG5ldyBGaWd1cmUoKTsKLQkJCSAgbWVzc2FnZUxhYmVsID0gbmV3IExhYmVsKCk7Ci0JCQkgIAotCQkJICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSkKLQkJCSAgICB7Ci0JCQkJICAvLyBXZSB3YW50IHRvIGNlbnRlciB0aGUgdGV4dAotCQkJICAgICAgIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIHBhcmVudCkKLQkJCSAgICAgICB7Ci0JCQkgICAgICAgICBzdXBlci5sYXlvdXQocGFyZW50KTsKLQotCQkJICAgICAgICAgaWYgKHBhcmVudC5nZXRDaGlsZHJlbigpLnNpemUoKSA9PSAxICYmIHBhcmVudC5nZXRDaGlsZHJlbigpLmdldCgwKSBpbnN0YW5jZW9mIExhYmVsKQotCQkJICAgICAgICAgewotCQkJICAgICAgICAgICAgcGFyZW50LnNldFNpemUocGFyZW50LmdldFNpemUoKS53aWR0aCwgcGFyZW50LmdldFNpemUoKS5oZWlnaHQgKyAzKTsKLQkJCSAgICAgICAgICAgIExhYmVsIGNoaWxkID0gKExhYmVsKSBwYXJlbnQuZ2V0Q2hpbGRyZW4oKS5nZXQoMCk7Ci0JCQkgICAgICAgICAgICBpbnQgbmV3WEFtb3VudCA9IChwYXJlbnQuZ2V0U2l6ZSgpLndpZHRoIC0gY2hpbGQuZ2V0U2l6ZSgpLndpZHRoKSAvIDI7Ci0JCQkgICAgICAgICAgICBQb2ludCBwID0gY2hpbGQuZ2V0TG9jYXRpb24oKTsKLQkJCSAgICAgICAgICAgIGNoaWxkLnNldExvY2F0aW9uKG5ldyBQb2ludChwLnggKyBuZXdYQW1vdW50LCBwLnkgKyAzKSk7Ci0JCQkgICAgICAgICB9ICAKLQkJCSAgICAgICB9Ci0JCQkgICAgfTsgICAgIAotCi0JCQkgIG1lc3NhZ2VMYWJlbFdyYXBwZXIuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0KTsKLQkJCSAgbWVzc2FnZUxhYmVsV3JhcHBlci5hZGQobWVzc2FnZUxhYmVsKTsKLQkJCSAgY29udGVudFBhbmUuYWRkKG1lc3NhZ2VMYWJlbFdyYXBwZXIpOwotCQkgIH0KLQkJICAKLQkJICBMaXN0IGVycm9yTGlzdCA9IGdldEVycm9ycygpOwotCQkgIExpc3Qgd2Fybkxpc3QgPSBnZXRXYXJuaW5ncygpOwotCi0JCSAgaWYgKGVycm9yTGlzdC5zaXplKCkgPiAwKSB7Ci0JCQkgIE1vZGVsRGlhZ25vc3RpY0luZm8gaW5mbyA9IChNb2RlbERpYWdub3N0aWNJbmZvKSBlcnJvckxpc3QuZ2V0KDApOwotCQkJICBtZXNzYWdlTGFiZWwuc2V0VGV4dCgiICAiICsgaW5mby5nZXREZXNjcmlwdGlvblRleHQoKSArICIgICIpOyAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkgIG1lc3NhZ2VMYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoaW5mby5nZXREZXNjcmlwdGlvblRleHRDb2xvcigpKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAod2Fybkxpc3Quc2l6ZSgpID4gMCl7Ci0JCQkgIE1vZGVsRGlhZ25vc3RpY0luZm8gaW5mbyA9IChNb2RlbERpYWdub3N0aWNJbmZvKSB3YXJuTGlzdC5nZXQoMCk7Ci0JCQkgIG1lc3NhZ2VMYWJlbC5zZXRUZXh0KCIgICIgKyBpbmZvLmdldERlc2NyaXB0aW9uVGV4dCgpICsgIiAgIik7ICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCSAgbWVzc2FnZUxhYmVsLnNldEZvcmVncm91bmRDb2xvcihpbmZvLmdldERlc2NyaXB0aW9uVGV4dENvbG9yKCkpOwotCQkgIH0KLQkJICBlbHNlIHsKLQkJCSAgbWVzc2FnZUxhYmVsLnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCQkgIG1lc3NhZ2VMYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuYmxhY2spOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIExpc3QgZ2V0RXJyb3JzKCkgewotCSAgSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgZ2V0TW9kZWwoKTsKLQkgIHJldHVybiBnZXREaWFnbm9zdGljTWVzc2FnZVR5cGUobWVzc2FnZVJlZi5nZXREaWFnbm9zdGljTWVzc2FnZXMoKSwgTW9kZWxEaWFnbm9zdGljSW5mby5FUlJPUl9UWVBFKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIExpc3QgZ2V0V2FybmluZ3MoKSB7Ci0JICBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKElNZXNzYWdlUmVmZXJlbmNlKSBnZXRNb2RlbCgpOwotCSAgcmV0dXJuIGdldERpYWdub3N0aWNNZXNzYWdlVHlwZShtZXNzYWdlUmVmLmdldERpYWdub3N0aWNNZXNzYWdlcygpLCBNb2RlbERpYWdub3N0aWNJbmZvLldBUk5JTkdfVFlQRSk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlVHlwZShMaXN0IGRpYWdub3N0aWNJbmZvLCBpbnQgdHlwZSkgewotCSAgTGlzdCBsaXN0VHlwZSA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBkaWFnbm9zdGljSW5mby5zaXplKCk7IGluZGV4KyspIHsKLQkJICBNb2RlbERpYWdub3N0aWNJbmZvIGluZm8gPSAoTW9kZWxEaWFnbm9zdGljSW5mbykgZGlhZ25vc3RpY0luZm8uZ2V0KGluZGV4KTsKLQkJICBpZiAoaW5mby5nZXRUeXBlKCkgPT0gdHlwZSkgewotCQkJICBsaXN0VHlwZS5hZGQoaW5mbyk7Ci0JCSAgfQotCSAgfQotCSAgCi0JICByZXR1cm4gbGlzdFR5cGU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLSAgewotICAgIElNZXNzYWdlUmVmZXJlbmNlIHRoZU1lc3NhZ2UgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpZ2V0TW9kZWwoKTsKLSAgICByZXR1cm4gdGhlTWVzc2FnZS5nZXRQYXJhbWV0ZXJzKCk7ICAgCi0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGROb3RpZnkoKQotICB7Ci0gICAgSW50ZXJmYWNlRWRpdFBhcnQuYXR0YWNoVG9JbnRlcmZhY2VFZGl0UGFydCh0aGlzLCByb3dMYXlvdXQpOwotICAgIHN1cGVyLmFkZE5vdGlmeSgpOyAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkgewotCSAgaWYgKGlzUmVhZE9ubHkoKSkgewotCSAgICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TWVzc2FnZVJlZkhlYWRpbmdDb2xvcik7Ci0JICB9Ci0JICBlbHNlIHsKLQkJICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMudG9vbHRpcEJhY2tncm91bmQpOwotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7ICAKLSAgICBFZGl0UGFydCBlZGl0UGFydCA9IHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLSAgICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLlNPVVRIICYmIGVkaXRQYXJ0ID09IG51bGwpCi0gICAgewotICAgICAgZWRpdFBhcnQgPSBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXROZXh0SW50ZXJmYWNlKHRoaXMpOwotICAgIH0gICAgICAgIAotICAgIHJldHVybiBlZGl0UGFydDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL09wZXJhdGlvbkVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvT3BlcmF0aW9uRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRkYTk1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvT3BlcmF0aW9uRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTWFyZ2luQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5QYW5lbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbENlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRExhYmVsRGlyZWN0RWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RTZWxlY3Rpb25FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5MaXN0RmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIE9wZXJhdGlvbkVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IGltcGxlbWVudHMgSU5hbWVkRWRpdFBhcnQKLXsgCi0gIHByb3RlY3RlZCBGaWd1cmUgY29udGVudFBhbmU7Ci0gIHByb3RlY3RlZCBMYWJlbCBsYWJlbDsKLSAgcHJpdmF0ZSBDb2xvciB1bnNlbGVjdGVkQ29sb3I7Ci0gIHByaXZhdGUgRmlndXJlIGxhYmVsSG9sZGVyOwotICAKLSAgcHVibGljIE9wZXJhdGlvbkVkaXRQYXJ0KCkKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIEZpZ3VyZSBmaWd1cmUgPSBuZXcgRmlndXJlKCk7Ci0gICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVPcGVyYXRpb25IZWFkaW5nQ29sb3IpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsgICAKLSAgICB0b29sYmFyTGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7ICAgCi0gICAgdG9vbGJhckxheW91dC5zZXRNaW5vckFsaWdubWVudChUb29sYmFyTGF5b3V0LkFMSUdOX1RPUExFRlQpOwotICAgIGZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotICAgIAotICAgIGxhYmVsSG9sZGVyID0gbmV3IFBhbmVsKCk7Ci0gICAgbGFiZWxIb2xkZXIuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvcik7Ci0gICAgbGFiZWxIb2xkZXIuc2V0TGF5b3V0TWFuYWdlcihuZXcgVG9vbGJhckxheW91dCh0cnVlKSk7Ci0gICAgZmlndXJlLmFkZChsYWJlbEhvbGRlcik7Ci0gICAgCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoIk9wZXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0vLyAgICBsYWJlbC5zZXRGb250KERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5zbWFsbEJvbGRGb250KTsKLSAgICBsYWJlbC5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcigyLCAyLDIsMikpOwotICAgIGxhYmVsLnNldFRleHRBbGlnbm1lbnQoTGFiZWwuTEVGVCk7ICAKLSAgICBsYWJlbEhvbGRlci5hZGQobGFiZWwpOwotICAgIAotICAgIAotICAgIGNvbnRlbnRQYW5lID0gbmV3IExpc3RGaWd1cmUoKTsgIAotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dDIgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7Ci0gICAgdG9vbGJhckxheW91dDIuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICBjb250ZW50UGFuZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQyKTsKLSAgICBmaWd1cmUuYWRkKGNvbnRlbnRQYW5lKTsKLSAKLSAgICAvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotICAgIC8vIGFzc3VtaW5nIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIEVkaXRQYXJ0IHdpbGwgbmV2ZXIgY2hhbmdlIG9uY2UgdGhlCi0gICAgLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0gICAgCWxhYmVsLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLSAgIAkgICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlUYWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvcik7Ci0gICAJICAgIGxhYmVsSG9sZGVyLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlUYWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvcik7Ci0gICAgfQotICAgIGVsc2UgewotICAgIAlsYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuYmxhY2spOwotIAkgICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVPcGVyYXRpb25IZWFkaW5nQ29sb3IpOwotICAgCSAgICBsYWJlbEhvbGRlci5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlT3BlcmF0aW9uSGVhZGluZ0NvbG9yKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRWRpdFBvbGljaWVzKCkKLSAgewotICAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LkRJUkVDVF9FRElUX1JPTEUsIG5ldyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3koKSk7Ci0JICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBEaXJlY3RFZGl0TWFuYWdlciBtYW5hZ2VyOwotICBwdWJsaWMgdm9pZCBwZXJmb3JtRGlyZWN0RWRpdChQb2ludCBjdXJzb3JMb2NhdGlvbil7Ci0JICBSZWN0YW5nbGUgdGV4dEFyZWEgPSBnZXRMYWJlbEZpZ3VyZSgpLmdldEJvdW5kcygpOwotCSAgdGV4dEFyZWEud2lkdGggPSBnZXRGaWd1cmUoKS5nZXRCb3VuZHMoKS53aWR0aDsKLQkgIGlmICghaXNGaWxlUmVhZE9ubHkoKSAmJiAoY3Vyc29yTG9jYXRpb24gPT0gbnVsbCB8fCBoaXRUZXN0KHRleHRBcmVhLCBjdXJzb3JMb2NhdGlvbikgJiYgIWlzUmVhZE9ubHkoKSkpIHsKLQkJICBtYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLQkJICBtYW5hZ2VyLnNob3coKTsKLQkgIH0KLSAgICBlbHNlIGlmIChnZXRGaWd1cmUoKSBpbnN0YW5jZW9mIEZpZ3VyZSAmJiBoaXRUZXN0RmlndXJlKChGaWd1cmUpIGdldEZpZ3VyZSgpLCBjdXJzb3JMb2NhdGlvbikgJiYgaXNSZWFkT25seSgpKSB7Ci0gICAgICBkb09wZW5OZXdFZGl0b3IoKTsgICAgCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCSAgaWYgKHJlcS5nZXRUeXBlKCkuZXF1YWxzKFJlcXVlc3RDb25zdGFudHMuUkVRX0RJUkVDVF9FRElUKSkgewotCQkgIHBlcmZvcm1EaXJlY3RFZGl0KG51bGwpOwotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKSB7Ci0JICByZXR1cm4gbGFiZWw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLSAgeyAgIAotICAgIHN1cGVyLnJlZnJlc2hWaXN1YWxzKCk7Ci0gICAgSU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoSU9wZXJhdGlvbilnZXRNb2RlbCgpOwotICAgIGxhYmVsLnNldFRleHQob3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgCi0gICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotICAgIAlsYWJlbC5zZXRJY29uKCgoSVRyZWVFbGVtZW50KSBvcGVyYXRpb24pLmdldEltYWdlKCkpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRlbnRQYW5lOwotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kZWxDaGlsZHJlbigpCi0gIHsKLSAgICBJT3BlcmF0aW9uIHRoZU9wZXJhdGlvbiA9IChJT3BlcmF0aW9uKWdldE1vZGVsKCk7Ci0gICAgcmV0dXJuIHRoZU9wZXJhdGlvbi5nZXRNZXNzYWdlcygpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsKLQkgIHVuc2VsZWN0ZWRDb2xvciA9IGxhYmVsSG9sZGVyLmdldEJhY2tncm91bmRDb2xvcigpOwotLy8JICBnZXRGaWd1cmUoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLQkgIGxhYmVsSG9sZGVyLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIGlmICh1bnNlbGVjdGVkQ29sb3IgIT0gbnVsbCkgewotCQkgIGxhYmVsSG9sZGVyLnNldEJhY2tncm91bmRDb2xvcih1bnNlbGVjdGVkQ29sb3IpOwotCSAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvUGFyYW1ldGVyRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9QYXJhbWV0ZXJFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzhlYWVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9QYXJhbWV0ZXJFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBhbmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRHJhZ1RyYWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbENlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRERyYWdBbmREcm9wRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RHcmFwaE5vZGVEcmFnVHJhY2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuUm93TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJFZGl0UGFydCBleHRlbmRzIEJhc2VFZGl0UGFydCBpbXBsZW1lbnRzIElGZWVkYmFja0hhbmRsZXIsIElOYW1lZEVkaXRQYXJ0Ci17ICAgCi0gIHByb3RlY3RlZCBGaWd1cmUgY29udGVudFBhbmU7Ci0gIHByb3RlY3RlZCBMYWJlbCBwYXJhbWV0ZXJOYW1lOwotICBwcm90ZWN0ZWQgUm93TGF5b3V0IHJvd0xheW91dCA9IG5ldyBSb3dMYXlvdXQoKTsKLSAgcHJvdGVjdGVkIEltYWdlIGxhYmVsSW1hZ2U7Ci0gIAotICBwcm90ZWN0ZWQgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSA9IG5ldyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5KCk7Ci0KLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIElGaWd1cmUgZmlndXJlID0gbmV3IEZpZ3VyZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLSAgICAgICAgZ3JhcGhpY3MucHVzaFN0YXRlKCk7Ci0gICAgICAgIC8vIHRoaXMgYml0IG9mIGNvZGUgaXMgdXNlZCB0byBkcmF3IHRoZSBkaXZpZGluZyBsaW5lIGJldHdlZW4KLSAgICAgICAgLy8gdGhlIHBhcmFtZXRlciBuYW1lIGFuZCB0aGUgcGFyYW1ldGVyIHR5cGUKLSAgICAgICAgLy8gd2UgbWlnaHQgd2FudCB0byBjb25zaWRlciBtb3ZpbmcgdGhpcyBsaW5lIGRyYXdpbmcgaW50byB0aGUgCi0gICAgICAgIC8vIG1lc3NhZ2UgcmVmZXJlbmNlJ3MgZmlndXJlIHdoZXJlIHRoZSBob3Jpem9udGFsIGxpbmVzIGFyZSBkb3duJ3MKLSAgICAgICAgUmVjdGFuZ2xlIHIgPSBwYXJhbWV0ZXJOYW1lLmdldEJvdW5kcygpOwotICAgICAgICBpbnQgeD0gci54ICsgIHIud2lkdGggLTE7Ci0gICAgICAgIGdyYXBoaWNzLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotICAgICAgICBncmFwaGljcy5kcmF3TGluZSh4LCByLnksIHgsIHIueSArIHIuaGVpZ2h0KTsKLSAgICAgICAgZ3JhcGhpY3MucG9wU3RhdGUoKTsKLSAgICAgIH0KLSAgICB9OyAgICAgICAgCi0gICAgLy90b29sYmFyTGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fQ0VOVEVSKTsKLSAgICBmaWd1cmUuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihyb3dMYXlvdXQpOyAKLSAgICAvKgotICAgIFN0cmluZyB4ID0gIiI7Ci0gICAgaW50IHNpemUgPSAoaW50KShNYXRoLnJhbmRvbSgpKjUwKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICB7Ci0gICAgICB4ICs9ICJ4IjsKLSAgICB9ICAKLSAgICBTdHJpbmcgeSA9ICIiOwotICAgIGludCBzaXpleSA9IChpbnQpKE1hdGgucmFuZG9tKCkqNTApOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZXk7IGkrKykKLSAgICB7Ci0gICAgICB5ICs9ICJ5IjsKLSAgICB9ICovCi0gICAgCi0gICAgY29udGVudFBhbmUgPSBuZXcgRmlndXJlKCk7Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0MiA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICB0b29sYmFyTGF5b3V0Mi5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOyAgIAotICAgIGNvbnRlbnRQYW5lLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dDIpOwotCi0gICAgSUZpZ3VyZSBwYXJhbWV0ZXJOYW1lUGFuZSA9IG5ldyBQYW5lbCgpOwotICAgIHRvb2xiYXJMYXlvdXQyID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOyAgCi0gICAgdG9vbGJhckxheW91dDIuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsgICAKLSAgICBwYXJhbWV0ZXJOYW1lUGFuZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQyKTsKLSAgICAKLSAgICBwYXJhbWV0ZXJOYW1lID0gbmV3IExhYmVsKCk7Ci0gICAgcGFyYW1ldGVyTmFtZS5zZXRMYWJlbEFsaWdubWVudChMYWJlbC5MRUZUKTsKLSAgICBwYXJhbWV0ZXJOYW1lLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDQsMTAsNCwxMCkpOwotICAgIAotICAgIHBhcmFtZXRlck5hbWVQYW5lLmFkZChwYXJhbWV0ZXJOYW1lKTsKLSAgICBmaWd1cmUuYWRkKHBhcmFtZXRlck5hbWVQYW5lKTsKLSAgICBmaWd1cmUuYWRkKGNvbnRlbnRQYW5lKTsKLSAgICByb3dMYXlvdXQuc2V0Q29uc3RyYWludChwYXJhbWV0ZXJOYW1lUGFuZSwgInBhcmFtZXRlck5hbWUiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJvd0xheW91dC5zZXRDb25zdHJhaW50KGNvbnRlbnRQYW5lLCAicGFyYW1ldGVyVHlwZSIpOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLSAgICAJbGFiZWxJbWFnZSA9ICgoSVRyZWVFbGVtZW50KSBnZXRNb2RlbCgpKS5nZXRJbWFnZSgpOwotICAgIH0KLSAgICAKLSAgICAvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotICAgIC8vIGFzc3VtaW5nIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIEVkaXRQYXJ0IHdpbGwgbmV2ZXIgY2hhbmdlIG9uY2UgdGhlCi0gICAgLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICBpZiAoaXNSZWFkT25seSgpKSAKLSAgICB7Ci0gICAgICBwYXJhbWV0ZXJOYW1lLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHBhcmFtZXRlck5hbWUuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkTm90aWZ5KCkKLSAgewotICAgIEludGVyZmFjZUVkaXRQYXJ0LmF0dGFjaFRvSW50ZXJmYWNlRWRpdFBhcnQodGhpcywgcm93TGF5b3V0KTsKLSAgICBzdXBlci5hZGROb3RpZnkoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBEaXJlY3RFZGl0TWFuYWdlciBtYW5hZ2VyOwotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pewotCSAgaWYgKCFpc0ZpbGVSZWFkT25seSgpICYmICFpc1JlYWRPbmx5KCkgJiYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgaGl0VGVzdChnZXRMYWJlbEZpZ3VyZSgpLmdldEJvdW5kcygpLCBjdXJzb3JMb2NhdGlvbikpKSB7Ci0JCW1hbmFnZXIgPSBuZXcgTGFiZWxFZGl0TWFuYWdlcih0aGlzLCBuZXcgTGFiZWxDZWxsRWRpdG9yTG9jYXRvcih0aGlzLCBjdXJzb3JMb2NhdGlvbikpOwotCQltYW5hZ2VyLnNob3coKTsKLQkgIH0KLSAgICBlbHNlIGlmIChnZXRGaWd1cmUoKSBpbnN0YW5jZW9mIEZpZ3VyZSAmJiBoaXRUZXN0RmlndXJlKChGaWd1cmUpIGdldEZpZ3VyZSgpLCBjdXJzb3JMb2NhdGlvbikgJiYgaXNSZWFkT25seSgpKSB7Ci0gICAgICBkb09wZW5OZXdFZGl0b3IoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1SZXF1ZXN0KFJlcXVlc3QgcmVxKSB7Ci0JICBpZiAocmVxLmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpKSB7Ci0JCSAgcGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0gIHsKLSAgICAgIHN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5ESVJFQ1RfRURJVF9ST0xFLCBuZXcgQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5KCkpOwotCSAgaWYgKCFpc1JlYWRPbmx5KCkgJiYgIWlzRmlsZVJlYWRPbmx5KCkpIHsKLQkJICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlBSSU1BUllfRFJBR19ST0xFLCBuZXcgQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5KGdldFZpZXdlcigpLCBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSkpOwotCSAgfQotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kpOwotICB9Ci0gIAotICBwdWJsaWMgRHJhZ1RyYWNrZXIgZ2V0RHJhZ1RyYWNrZXIoUmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIG5ldyBBU0RHcmFwaE5vZGVEcmFnVHJhY2tlcigoRWRpdFBhcnQpdGhpcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMYWJlbCBnZXRMYWJlbEZpZ3VyZSgpIHsKLQkgIHJldHVybiBwYXJhbWV0ZXJOYW1lOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsgICAKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOwotICAgIElQYXJhbWV0ZXIgcGFyYW1ldGVyID0gKElQYXJhbWV0ZXIpZ2V0TW9kZWwoKTsKLSAgICBwYXJhbWV0ZXJOYW1lLnNldFRleHQocGFyYW1ldGVyLmdldE5hbWUoKSk7Ci0gICAgaWYgKGxhYmVsSW1hZ2UgIT0gbnVsbCkgewotICAgIAlwYXJhbWV0ZXJOYW1lLnNldEljb24obGFiZWxJbWFnZSk7Ci0gICAgfQotICAgIAotICAgIC8vIFJlc2l6ZSBjb2x1bW4gd2lkdGhzLiAgU2l6ZXMgbWF5IGhhdmUgc2hydW5rLgotICAgIHJvd0xheW91dC5nZXRDb2x1bW5EYXRhKCkuY2xlYXJDb2x1bW5XaWR0aHMoKTsKLSAgICBmb3IgKEVkaXRQYXJ0IHBhcmVudCA9IGdldFBhcmVudCgpOyBwYXJlbnQgIT0gbnVsbDsgcGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpKQotICAgIHsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkKLSAgICAgIHsgCi0gICAgICAgICgoR3JhcGhpY2FsRWRpdFBhcnQpcGFyZW50KS5nZXRGaWd1cmUoKS5pbnZhbGlkYXRlVHJlZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0JICAvLyBPbiB0aGUgZmFjYWRlIGxldmVsLCBvbmUgSVBhcmFtZXRlciB3aWxsIGhhdmUgdHdvIGVkaXRhYmxlIHZhbHVlcy4KLQkgIC8vIEEgbmFtZSBhbmQgYSB0eXBlIHJlZmVyZW5jZS4gIFRvIG1ha2UgZGlyZWN0IGVkaXRpbmcgYW5kIHNlbGVjdGlvbgotCSAgLy8gZmVlZGJhY2sgZWFzaWVyLCB3ZSBzaG93IHRoaXMgb25lIGZhY2FkZSBvYmplY3QgYXMgdHdvIGVkaXQgcGFydHMuCi0JICAvLyBUaGUgYXBwcm9hY2ggaXMgdG8gdGhlIHNhbWUgZmFjYWRlIG1vZGVsLCB0byBkcml2ZSB0aGUgc2Vjb25kIChjaGlsZAotCSAgLy8gRWRpdFBhcnQuCi0KLSAgICAgIC8vIFRPRE8gKGNzKSBSaWNoIGNvbnNpZGVyIGNyZWF0aW5nIDIgaGFyZCBjb2RlIGVkaXQgcGFydHMKLSAgICAgIC8vIHRoZSBmaXJzdCBmb3IgdGhlIHBhcmFtZXRlciBuYW1lCi0gICAgICAvLyB0aGUgc2Vjb25kIGZvciB0aGUgcGFyYW10ZXIgdHlwZQotCSAgTGlzdCBraWRzID0gbmV3IEFycmF5TGlzdCgpOwotCSAga2lkcy5hZGQoZ2V0TW9kZWwoKSk7Ci0JICByZXR1cm4ga2lkczsKLSAgfQotICAKLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRlbnRQYW5lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsJCi0JICBwYXJhbWV0ZXJOYW1lLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0gICAgICBwYXJhbWV0ZXJOYW1lLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihmaWd1cmUuZ2V0QmFja2dyb3VuZENvbG9yKCkpOwotICB9Ci0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7ICAKLSAgICBFZGl0UGFydCBlZGl0UGFydCA9IHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLSAgICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLlNPVVRIICYmIGVkaXRQYXJ0ID09IG51bGwpCi0gICAgewotICAgICAgZWRpdFBhcnQgPSBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXROZXh0SW50ZXJmYWNlKHRoaXMpOyAgICAgICAgICAgCi0gICAgfSAgICAgICAKLSAgICByZXR1cm4gZWRpdFBhcnQ7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1BhcmFtZXRlclR5cGVFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1BhcmFtZXRlclR5cGVFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjY5ZDFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9QYXJhbWV0ZXJUeXBlRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTW91c2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTW91c2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUGFuZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuTGF5ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwb2xpY2llcy5EaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5yZXF1ZXN0cy5EaXJlY3RFZGl0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQuVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkJhc2VMaW5rSWNvbkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuTW9kZWxEaWFnbm9zdGljSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuUm93TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwuSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Nb3VzZU1vdGlvbkxpc3RlbmVyLlN0dWI7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJUeXBlRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgaW1wbGVtZW50cyBJRmVlZGJhY2tIYW5kbGVyLCBJTmFtZWRFZGl0UGFydAoteyAgIAotCXByb3RlY3RlZCBTaW1wbGVEaXJlY3RFZGl0UG9saWN5IHNpbXBsZURpcmVjdEVkaXRQb2xpY3kgPSBuZXcgU2ltcGxlRGlyZWN0RWRpdFBvbGljeSgpOwotCXByb3RlY3RlZCBMYWJlbCBwYXJhbWV0ZXJUeXBlOwotCXByb3RlY3RlZCBSb3dMYXlvdXQgcm93TGF5b3V0ID0gbmV3IFJvd0xheW91dCgpOwotCi0JICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCQkgIGlmIChyZXEuZ2V0VHlwZSgpLmVxdWFscyhSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCkpIHsKLQkJCSAgcGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JCSAgfQotCSAgfQotCSAgCi0JcHJvdGVjdGVkIE15TW91c2VFdmVudExpc3RlbmVyIG1vdXNlRXZlbnRMaXN0ZW5lcjsKLQlwcml2YXRlIEJhc2VMaW5rSWNvbkZpZ3VyZSBsaW5rSWNvbkZpZ3VyZTsKLQotCXByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0JewotCQlJRmlndXJlIGZpZ3VyZSA9IG5ldyBQYW5lbCgpOwotCQlmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihyb3dMYXlvdXQpOyAKLQotCQlwYXJhbWV0ZXJUeXBlID0gbmV3IExhYmVsKCk7Ci0JCXBhcmFtZXRlclR5cGUuc2V0TGFiZWxBbGlnbm1lbnQoTGFiZWwuTEVGVCk7Ci0JCXBhcmFtZXRlclR5cGUuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoNCwxMiw0LDIwKSk7Ci0JCWZpZ3VyZS5hZGQocGFyYW1ldGVyVHlwZSk7Ci0KLQkJLy8gcm1haDogVGhlIGJsb2NrIG9mIGNvZGUgYmVsb3cgaGFzIGJlZW4gbW92ZWQgZnJvbSByZWZyZXNoVmlzdWFscygpLiAgV2UncmUKLQkJLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLQkJLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLQkJaWYgKGlzUmVhZE9ubHkoKSkgCi0JCXsKLQkJCXBhcmFtZXRlclR5cGUuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcGFyYW1ldGVyVHlwZS5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuYmxhY2spOwotCQl9Ci0KLQkJcmV0dXJuIGZpZ3VyZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0JeyAgIAotCQlzdXBlci5yZWZyZXNoVmlzdWFscygpOwotCQlJUGFyYW1ldGVyIHBhcmFtID0gKElQYXJhbWV0ZXIpIGdldE1vZGVsKCk7Ci0JCVN0cmluZyBuYW1lID0gcGFyYW0uZ2V0Q29tcG9uZW50TmFtZSgpOwotCQlwYXJhbWV0ZXJUeXBlLnNldFRleHQobmFtZSk7Ci0KLQkJSW1hZ2UgaW1hZ2UgPSAoKElUcmVlRWxlbWVudClnZXRNb2RlbCgpKS5nZXRTZWNvbmRhcnlJbWFnZSgpOwotCQlpZiAoaW1hZ2UgIT0gbnVsbCkKLQkJewotCQkJcGFyYW1ldGVyVHlwZS5zZXRJY29uKGltYWdlKTsKLQkJfQotCi0JCXBhcmFtZXRlclR5cGUuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLQotCQlMaXN0IGRpYWdub3N0aWNNZXNzYWdlcyA9IHBhcmFtLmdldERpYWdub3N0aWNNZXNzYWdlcygpOwotCQlJdGVyYXRvciBpdCA9IGRpYWdub3N0aWNNZXNzYWdlcy5pdGVyYXRvcigpOwotCQlNb2RlbERpYWdub3N0aWNJbmZvIGVycm9ySW5mbyA9IG51bGw7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkgJiYgZXJyb3JJbmZvID09IG51bGwpIHsKLQkJCU1vZGVsRGlhZ25vc3RpY0luZm8gdGVtcCA9IChNb2RlbERpYWdub3N0aWNJbmZvKSBpdC5uZXh0KCk7Ci0JCQlpZiAodGVtcC5nZXRUeXBlKCkgPT0gTW9kZWxEaWFnbm9zdGljSW5mby5FUlJPUl9UWVBFKSB7Ci0JCQkJZXJyb3JJbmZvID0gdGVtcDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChlcnJvckluZm8gIT0gbnVsbCkgewotCQkJcGFyYW1ldGVyVHlwZS5zZXRUZXh0KGVycm9ySW5mby5nZXREZXNjcmlwdGlvblRleHQoKSk7Ci0JCQlwYXJhbWV0ZXJUeXBlLnNldEZvcmVncm91bmRDb2xvcihlcnJvckluZm8uZ2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoKSk7Ci0JCQlwYXJhbWV0ZXJUeXBlLnNldEljb24obnVsbCk7Ci0JCX0KLQotCQkvLyBGb3JjZSB0aGUgTGlua0ljb25Db2x1bW4gdG8gcmVzaXplIGFuZCByZWxheW91dCBpdHNlbGYuCi0JCWlmIChnZXRJbnRlcmZhY2VFZGl0UGFydCgpICE9IG51bGwpIHsKLQkJCSgoRmlndXJlKSBnZXRJbnRlcmZhY2VFZGl0UGFydCgpLmdldExpbmtJY29uQ29sdW1uKCkpLmludmFsaWRhdGUoKTsKLQkJCXJlZnJlc2hMaW5rRmlndXJlKG5ldyBQb2ludCgtMSwgLTEpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSW50ZXJmYWNlRWRpdFBhcnQgZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKSB7Ci0JCUVkaXRQYXJ0IGVwID0gZ2V0UGFyZW50KCk7Ci0JCXdoaWxlIChlcCAhPSBudWxsICYmICEoZXAgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkpIHsKLQkJCWVwID0gZXAuZ2V0UGFyZW50KCk7Ci0JCX0KLQotCQlpZiAoZXAgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkgewotCQkJcmV0dXJuIChJbnRlcmZhY2VFZGl0UGFydCkgZXA7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsJIAkJICAgICAgICAgIAotCQlmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZUNlbGxTZWxlY3Rpb25Db2xvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0JCWZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoZmlndXJlLmdldFBhcmVudCgpLmdldEJhY2tncm91bmRDb2xvcigpKTsKLQl9Ci0KLQlwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKSB7Ci0JCXJldHVybiBwYXJhbWV0ZXJUeXBlOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0JewotCQlzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsKLQkJaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKSk7Ci0JCWluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuRElSRUNUX0VESVRfUk9MRSwgc2ltcGxlRGlyZWN0RWRpdFBvbGljeSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pIHsKLQkJaWYgKCFpc0ZpbGVSZWFkT25seSgpICYmIChjdXJzb3JMb2NhdGlvbiA9PSBudWxsIHx8IChoaXRUZXN0KHBhcmFtZXRlclR5cGUsIGN1cnNvckxvY2F0aW9uKSAmJiAhaXNSZWFkT25seSgpKSkpIHsgCi0JCQlJUGFyYW1ldGVyIHBhcmFtID0gKElQYXJhbWV0ZXIpIGdldE1vZGVsKCk7Ci0KLQkJCVR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlciBtYW5hZ2VyID0gbmV3IFR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlcihwYXJhbSwgdGhpcywgcGFyYW1ldGVyVHlwZSk7ICAgCi0JCQlzaW1wbGVEaXJlY3RFZGl0UG9saWN5LnNldERlbGVnYXRlKG1hbmFnZXIpOwotCQkJbWFuYWdlci5zaG93KCk7Ci0KLQotCQl9Ci0JCWVsc2UgaWYgKHBhcmFtZXRlclR5cGUuZ2V0UGFyZW50KCkgaW5zdGFuY2VvZiBGaWd1cmUgJiYKLQkJCQkgaGl0VGVzdEZpZ3VyZSgoRmlndXJlKSBwYXJhbWV0ZXJUeXBlLmdldFBhcmVudCgpLCBjdXJzb3JMb2NhdGlvbikgJiYgaXNSZWFkT25seSgpKSB7Ci0JCQlkb09wZW5OZXdFZGl0b3IoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGFjdGl2YXRlKCkgewotCQlzdXBlci5hY3RpdmF0ZSgpOwotCi0JCUlGaWd1cmUgcHJpbWFyeUxheWVyID0gZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuUFJJTUFSWV9MQVlFUik7Ci0JCW1vdXNlRXZlbnRMaXN0ZW5lciA9IG5ldyBNeU1vdXNlRXZlbnRMaXN0ZW5lcigpOwotCQlwcmltYXJ5TGF5ZXIuYWRkTW91c2VNb3Rpb25MaXN0ZW5lcihtb3VzZUV2ZW50TGlzdGVuZXIpOwotCQlwcmltYXJ5TGF5ZXIuYWRkTW91c2VMaXN0ZW5lcihtb3VzZUV2ZW50TGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRlYWN0aXZhdGUoKSB7Ci0JCWlmIChtb3VzZUV2ZW50TGlzdGVuZXIgIT0gbnVsbCkgewotCQkJSUZpZ3VyZSBwcmltYXJ5TGF5ZXIgPSBnZXRMYXllcihMYXllckNvbnN0YW50cy5QUklNQVJZX0xBWUVSKTsKLQkJCXByaW1hcnlMYXllci5yZW1vdmVNb3VzZU1vdGlvbkxpc3RlbmVyKG1vdXNlRXZlbnRMaXN0ZW5lcik7Ci0JCQlwcmltYXJ5TGF5ZXIucmVtb3ZlTW91c2VMaXN0ZW5lcihtb3VzZUV2ZW50TGlzdGVuZXIpOwotCQl9Ci0KLQkJSW50ZXJmYWNlRWRpdFBhcnQgZXAgPSBnZXRJbnRlcmZhY2VFZGl0UGFydCgpOwotCQlpZiAoZXAgIT0gbnVsbCAmJiBsaW5rSWNvbkZpZ3VyZSAhPSBudWxsKSB7Ci0JCQlJRmlndXJlIGZpZyA9IGVwLmdldExpbmtJY29uQ29sdW1uKCk7Ci0JCQlpZiAoZmlnLmdldENoaWxkcmVuKCkuY29udGFpbnMobGlua0ljb25GaWd1cmUpKSB7Ci0JCQkJZXAuZ2V0TGlua0ljb25Db2x1bW4oKS5yZW1vdmUobGlua0ljb25GaWd1cmUpOwotCQkJfQotCQl9Ci0JfQotCi0KLQlwcml2YXRlIGNsYXNzIFNpbXBsZURpcmVjdEVkaXRQb2xpY3kgZXh0ZW5kcyBEaXJlY3RFZGl0UG9saWN5IAotCXsKLQkJcHJvdGVjdGVkIFR5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlciBkZWxlZ2F0ZTsKLQotCQlwdWJsaWMgdm9pZCBzZXREZWxlZ2F0ZShUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIgZGVsZWdhdGUpCi0JCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQl0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQgZ2V0RGlyZWN0RWRpdENvbW1hbmQoZmluYWwgRGlyZWN0RWRpdFJlcXVlc3QgcmVxdWVzdCkgCi0JCXsgCi0JCQlyZXR1cm4gbmV3IENvbW1hbmQoKSAvL0Fic3RyYWN0Q29tbWFuZCgpCi0JCQl7Ci0JCQkJcHVibGljIHZvaWQgZXhlY3V0ZSgpCi0JCQkJeyAgICAgICAgICAgICAgICAgICAgICAgCi0JCQkJCWlmIChkZWxlZ2F0ZSAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlkZWxlZ2F0ZS5wZXJmb3JtRWRpdChyZXF1ZXN0LmdldENlbGxFZGl0b3IoKSk7Ci0JCQkJCX0gIAotCQkJCX0gICAgIAotCi0JCQkJcHVibGljIHZvaWQgcmVkbygpCi0JCQkJewotCQkJCX0gIAotCi0JCQkJcHVibGljIHZvaWQgdW5kbygpCi0JCQkJewotCQkJCX0gICAgIAotCi0JCQkJcHVibGljIGJvb2xlYW4gY2FuRXhlY3V0ZSgpCi0JCQkJewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9OwotCQl9Ci0KLQkJcHJvdGVjdGVkIHZvaWQgc2hvd0N1cnJlbnRFZGl0VmFsdWUoRGlyZWN0RWRpdFJlcXVlc3QgcmVxdWVzdCkgCi0JCXsgICAgICAKLQkJCS8vaGFjayB0byBwcmV2ZW50IGFzeW5jIGxheW91dCBmcm9tIHBsYWNpbmcgdGhlIGNlbGwgZWRpdG9yIHR3aWNlLgotCQkJZ2V0SG9zdEZpZ3VyZSgpLmdldFVwZGF0ZU1hbmFnZXIoKS5wZXJmb3JtVXBkYXRlKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotCXsgICAgICAgICAKLQkJRWRpdFBhcnQgZWRpdFBhcnQgPSBzdXBlci5nZXRSZWxhdGl2ZUVkaXRQYXJ0KGRpcmVjdGlvbik7Ci0JCWlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEggJiYgZWRpdFBhcnQgPT0gbnVsbCkKLQkJewotCQkJZWRpdFBhcnQgPSBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXROZXh0SW50ZXJmYWNlKHRoaXMpOwotCQl9ICAgCi0JCXJldHVybiBlZGl0UGFydDsKLQl9Ci0KLQlwcml2YXRlIGNsYXNzIE15TW91c2VFdmVudExpc3RlbmVyIGV4dGVuZHMgU3R1YiBpbXBsZW1lbnRzIE1vdXNlTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBtb3VzZVJlbGVhc2VkKE1vdXNlRXZlbnQgbWUpIHsgfQotCQlwdWJsaWMgdm9pZCBtb3VzZURvdWJsZUNsaWNrZWQoTW91c2VFdmVudCBtZSkgeyB9Ci0KLQkJcHVibGljIHZvaWQgbW91c2VNb3ZlZChNb3VzZUV2ZW50IG1lKSB7Ci0JCQlQb2ludCBwb2ludGVyID0gbWUuZ2V0TG9jYXRpb24oKTsKLQkJCXJlZnJlc2hMaW5rRmlndXJlKHBvaW50ZXIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbW91c2VQcmVzc2VkKE1vdXNlRXZlbnQgbWUpIHsKLQkJCVBvaW50IHBvaW50ZXIgPSBtZS5nZXRMb2NhdGlvbigpOwotCQkJb3BlbkV4dGVybmFsRWRpdG9yKHBvaW50ZXIpOwotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCBtb3VzZUhvdmVyKE1vdXNlRXZlbnQgbWUpIHsKLQkJCVBvaW50IHBvaW50ZXIgPSBtZS5nZXRMb2NhdGlvbigpOwotCQkJc2hvd1ByZXZpZXdEaWFsb2cocG9pbnRlcik7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNob3dQcmV2aWV3RGlhbG9nKFBvaW50IHBvaW50KSB7Ci0JCVJlY3RhbmdsZSBsaW5rRmlnQm91bmRzID0gZ2V0TGlua0ZpZ3VyZUJvdW5kcygpOwotCQlpZiAobGlua0ZpZ0JvdW5kcyA9PSBudWxsKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlSZWN0YW5nbGUgdGVzdGJvdW5kcyA9IG5ldyBSZWN0YW5nbGUobGlua0ZpZ0JvdW5kcy54LCBsaW5rRmlnQm91bmRzLnksIDAsIGxpbmtGaWdCb3VuZHMuaGVpZ2h0KTsKLQotCQlpZiAocG9pbnRlckluUmFuZ2UodGVzdGJvdW5kcywgcG9pbnQpKSB7Ci0JCQlJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyIGhlbHBlciA9IGdldEV4dGVybmFsRWRpdG9yT3BlbmVyKCk7Ci0JCQloZWxwZXIuc2hvd1ByZXZpZXcoKTsKLQkJfQotCX0KLQotCS8vIE1ldGhvZHMgYmVsb3cgaGFuZGxlIHRoZSBMaW5rIEZpZ3VyZS4uLi4uCi0JcHJpdmF0ZSB2b2lkIGVtcGhhc2l6ZUxpbmtGaWd1cmUoKSB7Ci0JCWxpbmtJY29uRmlndXJlLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmJsdWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCB1bmVtcGhhc2l6ZUxpbmtGaWd1cmUoKSB7Ci0JCWxpbmtJY29uRmlndXJlLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIHBvaW50ZXJJblJhbmdlKFJlY3RhbmdsZSBmaWdCb3VuZHMsIFBvaW50IHBvaW50ZXIpIHsKLQkJUmVjdGFuZ2xlIGxpbmtCb3VuZHMgPSBnZXRMaW5rRmlndXJlQm91bmRzKCk7Ci0KLQkJaW50IGVudGlyZVggPSBmaWdCb3VuZHMueDsKLQkJaW50IGVudGlyZVkgPSBmaWdCb3VuZHMueTsKLQkJaW50IGVudGlyZVdpZHRoID0gZmlnQm91bmRzLndpZHRoICsgbGlua0JvdW5kcy53aWR0aDsKLQkJaW50IGVudGlyZUhlaWdodCA9IGZpZ0JvdW5kcy5oZWlnaHQ7Ci0JCVJlY3RhbmdsZSBlbnRpcmVCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlKGVudGlyZVgsIGVudGlyZVksIGVudGlyZVdpZHRoLCBlbnRpcmVIZWlnaHQpOwotCi0JCXJldHVybiBlbnRpcmVCb3VuZHMuY29udGFpbnMocG9pbnRlcik7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zTGlua0ZpZ3VyZSgpIHsKLQkJSXRlcmF0b3IgaXQgPSBnZXRJbnRlcmZhY2VFZGl0UGFydCgpLmdldExpbmtJY29uQ29sdW1uKCkuZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3QgaXRlbSA9IGl0Lm5leHQoKTsKLQkJCWlmIChpdGVtLmVxdWFscyhsaW5rSWNvbkZpZ3VyZSkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcml2YXRlIFJlY3RhbmdsZSBnZXRMaW5rRmlndXJlQm91bmRzKCkgewotCQlpZiAoY29udGFpbnNMaW5rRmlndXJlKCkpIHsKLQkJCXJldHVybiBsaW5rSWNvbkZpZ3VyZS5nZXRCb3VuZHMoKTsKLQkJfQotCQllbHNlIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotIAotCXByaXZhdGUgSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciBnZXRFeHRlcm5hbEVkaXRvck9wZW5lcigpIHsKLQkJSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciBvcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIgPSBudWxsOwotCQkJaWYgKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpICE9IG51bGwpIHsKLQkJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkgIT0gbnVsbCkgewotCQkJCQlPYmplY3QgYWRhcHRlZCA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmNsYXNzKTsKLQkJCQkJaWYgKGFkYXB0ZWQgaW5zdGFuY2VvZiBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKSB7Ci0JCQkJCQlvcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIgPSAoSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcikgYWRhcHRlZDsKLQkJCQkJCW9wZW5FeHRlcm5hbEVkaXRvckhlbHBlci5zZXRNb2RlbChnZXRNb2RlbCgpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQlyZXR1cm4gb3BlbkV4dGVybmFsRWRpdG9ySGVscGVyOwotCX0KLQotCXByaXZhdGUgdm9pZCByZWZyZXNoTGlua0ZpZ3VyZShQb2ludCBwb2ludCkgewotCQlSZWN0YW5nbGUgZmlnQm91bmRzID0gZ2V0RmlndXJlKCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0Qm91bmRzKCk7Ci0KLQkJSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciBvcGVuSGVscGVyID0gZ2V0RXh0ZXJuYWxFZGl0b3JPcGVuZXIoKTsKLQkJaWYgKG9wZW5IZWxwZXIgIT0gbnVsbCAmJiBvcGVuSGVscGVyLmxpbmtBcHBsaWNhYmxlKCkpIHsKLQkJCWlmICghZmlndXJlQ29udGFpbnNMaW5rRmlndXJlKGdldEludGVyZmFjZUVkaXRQYXJ0KCkuZ2V0TGlua0ljb25Db2x1bW4oKSkpIHsKLQkJCQlsaW5rSWNvbkZpZ3VyZSA9IG5ldyBCYXNlTGlua0ljb25GaWd1cmUodGhpcyk7Ci0JCQkJZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKS5nZXRMaW5rSWNvbkNvbHVtbigpLmFkZChsaW5rSWNvbkZpZ3VyZSk7Ci0JCQl9Ci0KLQkJCWlmIChvcGVuSGVscGVyLmlzVmFsaWQoKSkgewotCQkJCWxpbmtJY29uRmlndXJlLnNldExpbmtJY29uU3R5bGUoQmFzZUxpbmtJY29uRmlndXJlLlZBTElEX1NDSEVNQV9MSU5LX1NUWUxFKTsKLQotCQkJCWlmIChwb2ludGVySW5SYW5nZShmaWdCb3VuZHMsIHBvaW50KSkgewotCQkJCQllbXBoYXNpemVMaW5rRmlndXJlKCk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQl1bmVtcGhhc2l6ZUxpbmtGaWd1cmUoKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlsaW5rSWNvbkZpZ3VyZS5zZXRMaW5rSWNvblN0eWxlKEJhc2VMaW5rSWNvbkZpZ3VyZS5JTlZBTElEX1NDSEVNQV9MSU5LX1NUWUxFKTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWlmIChjb250YWluc0xpbmtGaWd1cmUoKSkgewotCQkJCWdldEludGVyZmFjZUVkaXRQYXJ0KCkuZ2V0TGlua0ljb25Db2x1bW4oKS5yZW1vdmUobGlua0ljb25GaWd1cmUpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGZpZ3VyZUNvbnRhaW5zTGlua0ZpZ3VyZShJRmlndXJlIHBhcmVudCkgewotCQlJdGVyYXRvciBpdCA9IHBhcmVudC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCWlmIChpdC5uZXh0KCkuZXF1YWxzKGxpbmtJY29uRmlndXJlKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgdm9pZCBvcGVuRXh0ZXJuYWxFZGl0b3IoUG9pbnQgcG9pbnQpIHsKLQkJUmVjdGFuZ2xlIGxpbmtGaWdCb3VuZHMgPSBnZXRMaW5rRmlndXJlQm91bmRzKCk7Ci0JCWlmIChsaW5rRmlnQm91bmRzID09IG51bGwgfHwgZ2V0RXh0ZXJuYWxFZGl0b3JPcGVuZXIoKSA9PSBudWxsKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlSZWN0YW5nbGUgdGVzdGJvdW5kcyA9IG5ldyBSZWN0YW5nbGUobGlua0ZpZ0JvdW5kcy54LCBsaW5rRmlnQm91bmRzLnksIDAsIGxpbmtGaWdCb3VuZHMuaGVpZ2h0KTsKLQotCQlpZiAoZ2V0RXh0ZXJuYWxFZGl0b3JPcGVuZXIoKS5saW5rQXBwbGljYWJsZSgpICYmIHBvaW50ZXJJblJhbmdlKHRlc3Rib3VuZHMsIHBvaW50KSkgewotCQkJLy8gT3BlbiBpbiBYU0QgRWRpdG9yCi0JCQlnZXRFeHRlcm5hbEVkaXRvck9wZW5lcigpLm9wZW5FeHRlcm5hbEVkaXRvcigpOwkJCQkgIAotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1NlcnZpY2VFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1NlcnZpY2VFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjcyNjVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9TZXJ2aWNlRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MaW5lQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQuTGFiZWxDZWxsRWRpdG9yTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQuTGFiZWxFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuSGVhZGluZ0ZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VFZGl0UGFydCBleHRlbmRzIEJhc2VFZGl0UGFydCBpbXBsZW1lbnRzIElOYW1lZEVkaXRQYXJ0Ci17Ci0gIElGaWd1cmUgY29udGVudFBhbmU7Ci0gIEhlYWRpbmdGaWd1cmUgaGVhZGluZ0ZpZ3VyZTsKLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkKLSAgewotCSAgTGluZUJvcmRlciBib3hGaWd1cmVMaW5lQm9yZGVyID0gKExpbmVCb3JkZXIpIGZpZ3VyZS5nZXRCb3JkZXIoKTsKLQkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMik7Ci0vLwkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0Q29sb3IoQ29sb3JDb25zdGFudHMuZGFya0JsdWUpOwotCSAgaGVhZGluZ0ZpZ3VyZS5zZXRTZWxlY3RlZCh0cnVlKTsJICAKLQkgIGZpZ3VyZS5yZXBhaW50KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkKLSAgewotCSAgTGluZUJvcmRlciBib3hGaWd1cmVMaW5lQm9yZGVyID0gKExpbmVCb3JkZXIpIGZpZ3VyZS5nZXRCb3JkZXIoKTsKLQkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMSk7Ci0JICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLQkgIGhlYWRpbmdGaWd1cmUuc2V0U2VsZWN0ZWQoZmFsc2UpOwotCSAgZmlndXJlLnJlcGFpbnQoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLSAgICBGaWd1cmUgZmlndXJlID0gbmV3IEZpZ3VyZSgpOwotICAgIGZpZ3VyZS5zZXRCb3JkZXIobmV3IExpbmVCb3JkZXIoMSkpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICB0b29sYmFyTGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7ICAgIAotICAgIGhlYWRpbmdGaWd1cmUgPSBuZXcgSGVhZGluZ0ZpZ3VyZSgpOwotICAgIAotICAgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0gICAgCWhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKS5zZXRJY29uKCgoSVRyZWVFbGVtZW50KSBnZXRNb2RlbCgpKS5nZXRJbWFnZSgpKTsJCi0gICAgfQotICAgCQotICAgCWZpZ3VyZS5hZGQoaGVhZGluZ0ZpZ3VyZSk7Ci0gICAgICAgIAotICAgIGNvbnRlbnRQYW5lID0gbmV3IEZpZ3VyZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpIAotICAgICAgewotICAgICAgICBzdXBlci5wYWludChncmFwaGljcyk7Ci0gICAgICBib29sZWFuIGlzRmlyc3QgPSBmYWxzZTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgIHsKLSAgICAgICAgRmlndXJlIGZpZ3VyZSA9IChGaWd1cmUpaS5uZXh0KCk7ICAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzRmlyc3QpCi0gICAgICAgIHsKLSAgICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7Ci0gICAgICAgIH0gIAotICAgICAgICBlbHNlCi0gICAgICAgIHsgIAotICAgICAgICAgIFJlY3RhbmdsZSByID0gZmlndXJlLmdldEJvdW5kcygpOyAgICAgICAgICAgICAgCi0gICAgICAgICAgZ3JhcGhpY3MuZHJhd0xpbmUoci54LCByLnkgKzEsIHIueCArIHIud2lkdGgsIHIueSArIDEpOwotICAgICAgICB9ICAKLSAgICAgIH0KLSAgICAgIH0KLSAgICB9OwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dDIgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7Ci0gICAgdG9vbGJhckxheW91dDIuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsgICAKLSAgICBjb250ZW50UGFuZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQyKTsKLSAgICBmaWd1cmUuYWRkKGNvbnRlbnRQYW5lKTsKLSAgICAKLSAgICAvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotICAgIC8vIGFzc3VtaW5nIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIEVkaXRQYXJ0IHdpbGwgbmV2ZXIgY2hhbmdlIG9uY2UgdGhlCi0gICAgLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICBpZiAoaXNSZWFkT25seSgpKSAKLSAgICB7Ci0gICAgICBoZWFkaW5nRmlndXJlLmdldExhYmVsKCkuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaGVhZGluZ0ZpZ3VyZS5nZXRMYWJlbCgpLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5ibGFjayk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaWd1cmU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRmlndXJlIGdldENvbnRlbnRQYW5lKCkKLSAgewotICAgIHJldHVybiBjb250ZW50UGFuZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0gIHsKLSAgICAgIHN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5ESVJFQ1RfRURJVF9ST0xFLCBuZXcgQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5KCkpOwotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgRGlyZWN0RWRpdE1hbmFnZXIgbWFuYWdlcjsKLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1EaXJlY3RFZGl0KFBvaW50IGN1cnNvckxvY2F0aW9uKXsKLQkgIGlmICghaXNGaWxlUmVhZE9ubHkoKSAmJiAoY3Vyc29yTG9jYXRpb24gPT0gbnVsbCB8fCBoaXRUZXN0KGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKSwgY3Vyc29yTG9jYXRpb24pICYmICFpc1JlYWRPbmx5KCkpKSB7Ci0JCSAgbWFuYWdlciA9IG5ldyBMYWJlbEVkaXRNYW5hZ2VyKHRoaXMsIG5ldyBMYWJlbENlbGxFZGl0b3JMb2NhdG9yKHRoaXMsIGN1cnNvckxvY2F0aW9uKSk7Ci0JCSAgbWFuYWdlci5zaG93KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKChoaXRUZXN0KGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKSwgY3Vyc29yTG9jYXRpb24pIHx8Ci0gICAgICAgICAgICAgIGhpdFRlc3RGaWd1cmUoaGVhZGluZ0ZpZ3VyZSwgY3Vyc29yTG9jYXRpb24pKSAmJiBpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGRvT3Blbk5ld0VkaXRvcigpOwotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCSAgaWYgKHJlcS5nZXRUeXBlKCkuZXF1YWxzKFJlcXVlc3RDb25zdGFudHMuUkVRX0RJUkVDVF9FRElUKSkgewotCQkgIHBlcmZvcm1EaXJlY3RFZGl0KG51bGwpOwotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKSB7Ci0JICByZXR1cm4gaGVhZGluZ0ZpZ3VyZS5nZXRMYWJlbCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kZWxDaGlsZHJlbigpCi0gIHsKLSAgICBJU2VydmljZSBzZXJ2aWNlID0gKElTZXJ2aWNlKWdldE1vZGVsKCk7Ci0gICAgcmV0dXJuIHNlcnZpY2UuZ2V0RW5kUG9pbnRzKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLSAgeyAKLSAgICBJU2VydmljZSBzZXJ2aWNlID0gKElTZXJ2aWNlKWdldE1vZGVsKCk7Ci0gICAgaGVhZGluZ0ZpZ3VyZS5zZXRJc1JlYWRPbmx5KHNlcnZpY2UuaXNSZWFkT25seSgpKTsKLSAgICBoZWFkaW5nRmlndXJlLmdldExhYmVsKCkuc2V0VGV4dChzZXJ2aWNlLmdldE5hbWUoKSk7Ci0gICAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWEzZThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24gaW1wbGVtZW50cyBJQVNET2JqZWN0LCBJVHJlZUVsZW1lbnQKLXsKLSAgSUFTRE9iamVjdCBtb2RlbDsKLSAgU3RyaW5nIGtpbmQ7Ci0gIAotICBwdWJsaWMgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24oSUFTRE9iamVjdCBtb2RlbCwgU3RyaW5nIGtpbmQpCi0gIHsKLSAgICB0aGlzLm1vZGVsID0gbW9kZWw7Ci0gICAgdGhpcy5raW5kID0ga2luZDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWwoKQotICB7Ci0gICAgcmV0dXJuIG1vZGVsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TW9kZWwoSUFTRE9iamVjdCBtb2RlbCkKLSAgewotICAgIHRoaXMubW9kZWwgPSBtb2RlbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0S2luZCgpCi0gIHsKLSAgICByZXR1cm4ga2luZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEtpbmQoU3RyaW5nIGtpbmQpCi0gIHsKLSAgICB0aGlzLmtpbmQgPSBraW5kOwotICB9Ci0KLSAgcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCSAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0U2Vjb25kYXJ5SW1hZ2UoKSB7Ci0JICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHsKLQkgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJMaXN0ZW5lcihJQVNET2JqZWN0TGlzdGVuZXIgbGlzdGVuZXIpCi0gIHsKLSAgICBtb2RlbC5yZWdpc3Rlckxpc3RlbmVyKGxpc3RlbmVyKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdW5yZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcikKLSAgewotICAgIG1vZGVsLnVucmVnaXN0ZXJMaXN0ZW5lcihsaXN0ZW5lcik7Ci0gIH0KLQotICBwdWJsaWMgQ29tbWFuZCBnZXREZWxldGVDb21tYW5kKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXREaWFnbm9zdGljTWVzc2FnZXMoKSB7Ci0JcmV0dXJuIG5ldyBBcnJheUxpc3QoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb2x1bW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9CaW5kaW5nQ29sdW1uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYTlmZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb2x1bW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU5hbWVkT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEJpbmRpbmdDb2x1bW4gZXh0ZW5kcyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiB7Ci0JICBwdWJsaWMgQmluZGluZ0NvbHVtbihJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkgICAgc3VwZXIoZGVzY3JpcHRpb24sICJCaW5kaW5nQ29sdW1uIik7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQkgIAotCSAgcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQkJTGlzdCBiaW5kaW5ncyA9ICgoSURlc2NyaXB0aW9uKW1vZGVsKS5nZXRCaW5kaW5ncygpOwotCQkJQ29sbGVjdGlvbnMuc29ydChiaW5kaW5ncywgbmV3IEJpbmRpbmdDb21wYXJhdG9yKCkpOwotCQkJT2JqZWN0IGFycmF5W10gPSBiaW5kaW5ncy50b0FycmF5KCk7Ci0JCQkKLQkJCUlUcmVlRWxlbWVudCB0cmVlRWxlbWVudFtdID0gbmV3IElUcmVlRWxlbWVudFthcnJheS5sZW5ndGhdOwotCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykgewotCQkJCXRyZWVFbGVtZW50W2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIGFycmF5W2luZGV4XTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIHRyZWVFbGVtZW50OwotCSAgfQotCi0JICBwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJICBJVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnRbXSA9IGdldENoaWxkcmVuKCk7Ci0JCSAgaWYgKHRyZWVFbGVtZW50Lmxlbmd0aCA+IDApIHsKLQkJCSAgcmV0dXJuIHRydWU7Ci0JCSAgfQotCQkgIAotCQkgIHJldHVybiBmYWxzZTsKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkgIHJldHVybiAiZGVmaW5pdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQkgIAotCSAgcHJpdmF0ZSBjbGFzcyBCaW5kaW5nQ29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3IgewotCQkJcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7Ci0JCQkJaWYgKG8xIGluc3RhbmNlb2YgSUJpbmRpbmcgJiYgbzIgaW5zdGFuY2VvZiBJQmluZGluZykgewotCQkJCQlJSW50ZXJmYWNlIGludGVyZmFjZTEgPSAoKElCaW5kaW5nKSBvMSkuZ2V0SW50ZXJmYWNlKCk7Ci0JCQkJCUlJbnRlcmZhY2UgaW50ZXJmYWNlMiA9ICgoSUJpbmRpbmcpIG8yKS5nZXRJbnRlcmZhY2UoKTsKLQkJCQkJCi0JCQkJCWlmIChpbnRlcmZhY2UxICE9IG51bGwgJiYgaW50ZXJmYWNlMiAhPSBudWxsKSB7Ci0JCQkJCQlTdHJpbmcgbmFtZTEgPSAoKElOYW1lZE9iamVjdCkgaW50ZXJmYWNlMSkuZ2V0TmFtZSgpOwotCQkJCQkJU3RyaW5nIG5hbWUyID0gKChJTmFtZWRPYmplY3QpIGludGVyZmFjZTIpLmdldE5hbWUoKTsKLQkJCQkJCXJldHVybiBuYW1lMS5jb21wYXJlVG8obmFtZTIpOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKGludGVyZmFjZTEgIT0gbnVsbCAmJiBpbnRlcmZhY2UyID09IG51bGwpIHsKLQkJCQkJCXJldHVybiAtMTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChpbnRlcmZhY2UxID09IG51bGwgJiYgaW50ZXJmYWNlMiAhPSBudWxsKSB7Ci0JCQkJCQlyZXR1cm4gMTsKLQkJCQkJfQotCQkJCX0KLQkJCQkKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTYzZDI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyIHsKLQlwcml2YXRlIE9iamVjdCBtb2RlbDsKLQkKLQlwdWJsaWMgQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlcihPYmplY3QgbW9kZWwpIHsKLQkJdGhpcy5tb2RlbCA9IG1vZGVsOwotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE1vZGVsKCkgewotCQlyZXR1cm4gbW9kZWw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0lBY3Rpb25Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0lBY3Rpb25Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTM3MTVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9JQWN0aW9uUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbDsKLQotcHVibGljIGludGVyZmFjZSBJQWN0aW9uUHJvdmlkZXIKLXsKLSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSW50ZXJmYWNlQ29sdW1uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSW50ZXJmYWNlQ29sdW1uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZDBmMTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0ludGVyZmFjZUNvbHVtbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTmFtZWRPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSW50ZXJmYWNlQ29sdW1uIGV4dGVuZHMgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24gewotCXB1YmxpYyBJbnRlcmZhY2VDb2x1bW4oSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCXN1cGVyKGRlc2NyaXB0aW9uLCAiSW50ZXJmYWNlQ29sdW1uIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlMaXN0IGludGVyZmFjZXMgPSAoKElEZXNjcmlwdGlvbiltb2RlbCkuZ2V0SW50ZXJmYWNlcygpOwkJCi0JCUNvbXBhcmF0b3IgY29tcGFyZSA9IG5ldyBOYW1lZE9iamVjdENvbXBhcmF0b3IoKTsKLQkJQ29sbGVjdGlvbnMuc29ydChpbnRlcmZhY2VzLCBjb21wYXJlKTsKLQkJT2JqZWN0IGFycmF5W10gPSBpbnRlcmZhY2VzLnRvQXJyYXkoKTsKLQkJCi0JCUlUcmVlRWxlbWVudCB0cmVlRWxlbWVudFtdID0gbmV3IElUcmVlRWxlbWVudFthcnJheS5sZW5ndGhdOwotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudFtpbmRleF0gPSAoSVRyZWVFbGVtZW50KSBhcnJheVtpbmRleF07Ci0JCX0KLQkJCi0JCXJldHVybiB0cmVlRWxlbWVudDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBnZXRDaGlsZHJlbigpOwotCQlpZiAodHJlZUVsZW1lbnQubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gImRlZmluaXRpb24iOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXByaXZhdGUgY2xhc3MgTmFtZWRPYmplY3RDb21wYXJhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvcnsKLQkJcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7Ci0JCQlpZiAobzEgaW5zdGFuY2VvZiBJTmFtZWRPYmplY3QgJiYgbzIgaW5zdGFuY2VvZiBJTmFtZWRPYmplY3QpIHsKLQkJCQlTdHJpbmcgbmFtZTEgPSAoKElOYW1lZE9iamVjdCkgbzEpLmdldE5hbWUoKTsKLQkJCQlTdHJpbmcgbmFtZTIgPSAoKElOYW1lZE9iamVjdCkgbzIpLmdldE5hbWUoKTsKLQkJCQlyZXR1cm4gbmFtZTEuY29tcGFyZVRvKG5hbWUyKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL1NlcnZpY2VDb2x1bW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9TZXJ2aWNlQ29sdW1uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNjU5N2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL1NlcnZpY2VDb2x1bW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QudXRpbC5FbmRQb2ludENvbXBhcmF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlQ29sdW1uIGV4dGVuZHMgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24gewotCXB1YmxpYyBTZXJ2aWNlQ29sdW1uKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQlzdXBlcihkZXNjcmlwdGlvbiwgIlNlcnZpY2VDb2x1bW4iKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCUxpc3Qgc2VydmljZXMgPSAoKElEZXNjcmlwdGlvbiltb2RlbCkuZ2V0U2VydmljZXMoKTsKLQkJQ29sbGVjdGlvbnMuc29ydChzZXJ2aWNlcywgbmV3IFNlcnZpY2VDb21wYXJhdG9yKCkpOwotCQlPYmplY3QgYXJyYXlbXSA9IHNlcnZpY2VzLnRvQXJyYXkoKTsKLQkJCi0JCUlUcmVlRWxlbWVudCB0cmVlRWxlbWVudFtdID0gbmV3IElUcmVlRWxlbWVudFthcnJheS5sZW5ndGhdOwotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudFtpbmRleF0gPSAoSVRyZWVFbGVtZW50KSBhcnJheVtpbmRleF07Ci0JCX0KLQkJCi0JCXJldHVybiB0cmVlRWxlbWVudDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCUlUcmVlRWxlbWVudCB0cmVlRWxlbWVudFtdID0gZ2V0Q2hpbGRyZW4oKTsKLQkJaWYgKHRyZWVFbGVtZW50Lmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJkZWZpbml0aW9uIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwcml2YXRlIGNsYXNzIFNlcnZpY2VDb21wYXJhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvciB7Ci0JCXB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgbzEsIE9iamVjdCBvMikgewotCQkJaWYgKG8xIGluc3RhbmNlb2YgSVNlcnZpY2UgJiYgbzIgaW5zdGFuY2VvZiBJU2VydmljZSkgewotCQkJCUlFbmRQb2ludCBlbmRQb2ludDEgPSBnZXRGaXJzdEFzc29jaWF0ZWRFbmRQb2ludCgoSVNlcnZpY2UpIG8xKTsKLQkJCQlJRW5kUG9pbnQgZW5kUG9pbnQyID0gZ2V0Rmlyc3RBc3NvY2lhdGVkRW5kUG9pbnQoKElTZXJ2aWNlKSBvMik7Ci0JCQkJCi0JCQkJRW5kUG9pbnRDb21wYXJhdG9yIGNvbXBhcmF0b3IgPSBuZXcgRW5kUG9pbnRDb21wYXJhdG9yKCk7Ci0JCQkJcmV0dXJuIGNvbXBhcmF0b3IuY29tcGFyZShlbmRQb2ludDEsIGVuZFBvaW50Mik7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiAwOwotCQl9Ci0JCQotCQlwcml2YXRlIElFbmRQb2ludCBnZXRGaXJzdEFzc29jaWF0ZWRFbmRQb2ludChJU2VydmljZSBzZXJ2aWNlKSB7Ci0JCQlJdGVyYXRvciBlbmRQb2ludHM9IHNlcnZpY2UuZ2V0RW5kUG9pbnRzKCkuaXRlcmF0b3IoKTsKLQkJCQotCQkJd2hpbGUgKGVuZFBvaW50cy5oYXNOZXh0KCkpIHsKLQkJCQlJRW5kUG9pbnQgdGVtcEVuZFBvaW50ID0gKElFbmRQb2ludCkgZW5kUG9pbnRzLm5leHQoKTsKLQkJCQlpZiAodGVtcEVuZFBvaW50LmdldEJpbmRpbmcoKSAhPSBudWxsKSB7Ci0JCQkJCXJldHVybiB0ZW1wRW5kUG9pbnQ7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlyZXR1cm4gbnVsbDsKLQkJfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MzAxZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRERyYWdBbmREcm9wQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZUNhbnZhczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkNoYW5nZUJvdW5kc1JlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERHJhZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REcmFnUmVvcmRlckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5NZXNzYWdlUmVmZXJlbmNlRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuUGFyYW1ldGVyRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0REcmFnQW5kRHJvcENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHsKLQkgIHByb3RlY3RlZCBFZGl0UGFydFZpZXdlciB2aWV3ZXI7ICAgIAotCSAgcHJvdGVjdGVkIENoYW5nZUJvdW5kc1JlcXVlc3QgcmVxdWVzdDsKLQkgIHByb3RlY3RlZCBQb2ludCBsb2NhdGlvbjsKLQkgIHByb3RlY3RlZCBBU0REcmFnQWN0aW9uIGRyYWdBY3Rpb247ICAgIAotCSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FuRXhlY3V0ZSA9IGZhbHNlOwotCi0JICBwdWJsaWMgQVNERHJhZ0FuZERyb3BDb21tYW5kKEVkaXRQYXJ0Vmlld2VyIHZpZXdlciwgQ2hhbmdlQm91bmRzUmVxdWVzdCByZXF1ZXN0KQotCSAgewotCSAgICB0aGlzLnZpZXdlciA9IHZpZXdlcjsKLQkgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDsKLQotCSAgICBsb2NhdGlvbiA9IHJlcXVlc3QuZ2V0TG9jYXRpb24oKTsgICAKLQkgICAgRWRpdFBhcnQgdGFyZ2V0RWRpdFBhcnQgPSB2aWV3ZXIuZmluZE9iamVjdEF0KGxvY2F0aW9uKTsgCi0KLQkgICAgaWYgKHRhcmdldEVkaXRQYXJ0IGluc3RhbmNlb2YgUGFyYW1ldGVyRWRpdFBhcnQgfHwgdGFyZ2V0RWRpdFBhcnQgaW5zdGFuY2VvZiBNZXNzYWdlUmVmZXJlbmNlRWRpdFBhcnQpIHsKLQkgICAgCSgoR3JhcGhpY2FsRWRpdFBhcnQpdmlld2VyLmdldFJvb3RFZGl0UGFydCgpKS5nZXRGaWd1cmUoKS50cmFuc2xhdGVUb1JlbGF0aXZlKGxvY2F0aW9uKTsKLQkgICAgCUdyYXBoaWNhbEVkaXRQYXJ0IG1vdmluZ0NoaWxkRWRpdFBhcnQ7Ci0JICAgIAlWZWN0b3IgZHJhZ0FjdGlvbnMgPSBuZXcgVmVjdG9yKCk7Ci0JICAgIAlpZiAocmVxdWVzdC5nZXRUeXBlKCkuZXF1YWxzKFJlcXVlc3RDb25zdGFudHMuUkVRX0FERCkpIHsgLy8gVGhpcyByZWFsbHkgc2hvdWxkbid0IGJlIFJFUV9BREQuLi4uCi0JICAgIAkJTGlzdCBsaXN0ID0gcmVxdWVzdC5nZXRFZGl0UGFydHMoKTsKLQkgICAgCQlpZiAobGlzdC5zaXplKCkgPD0gMCkgewotCSAgICAJCQljYW5FeGVjdXRlID0gZmFsc2U7Ci0JICAgIAkJCXJldHVybjsKLQkgICAgCQl9Ci0JICAgIAkJCi0JICAgIAkJLy8gR3JhYmJpbmcgdGhlIGZpc3Qgc2VsZWN0aW9uCi0JICAgIAkJbW92aW5nQ2hpbGRFZGl0UGFydCA9IChHcmFwaGljYWxFZGl0UGFydCkgbGlzdC5nZXQoMCk7Ci0JICAgIAkJT2JqZWN0IG1vZGVsID0gbW92aW5nQ2hpbGRFZGl0UGFydC5nZXRNb2RlbCgpOwotCSAgICAJCUVkaXRQYXJ0IHBvaW50ZXJFZGl0UGFydCA9IHZpZXdlci5maW5kT2JqZWN0QXQobG9jYXRpb24pOwotCSAgICAJCQotCSAgICAJCWlmIChtb2RlbCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkgICAgCQkJZHJhZ0FjdGlvbnMuYWRkKG5ldyBBU0REcmFnUmVvcmRlckFjdGlvbihtb3ZpbmdDaGlsZEVkaXRQYXJ0LCBwb2ludGVyRWRpdFBhcnQsIGdldFBvaW50ZXJMb2NhdGlvbihsb2NhdGlvbikpKTsKLQkgICAgCQl9Ci0JICAgIAkJZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCSAgICAJCQlJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKElNZXNzYWdlUmVmZXJlbmNlKSBtb2RlbDsKLQkgICAgCQkJaWYgKG1lc3NhZ2VSZWYuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQgfHwgbWVzc2FnZVJlZi5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpIHsKLQkgICAgCQkJCWRyYWdBY3Rpb25zLmFkZChuZXcgQVNERHJhZ1Jlb3JkZXJBY3Rpb24obW92aW5nQ2hpbGRFZGl0UGFydCwgcG9pbnRlckVkaXRQYXJ0LCBnZXRQb2ludGVyTG9jYXRpb24obG9jYXRpb24pKSk7Ci0vLwkgICAgCQkJCWRyYWdBY3Rpb25zLmFkZChuZXcgV1NETERyYWdTZXRNZXNzYWdlQWN0aW9uKG1vdmluZ0NoaWxkRWRpdFBhcnQsIHBvaW50ZXJFZGl0UGFydCwgbG9jYXRpb24pKTsKLQkgICAgCQkJfQotCSAgICAJCX0KLQkgICAgCQkKLS8vCSAgICAJCWVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgRmF1bHQpIHsKLS8vCSAgICAJCWRyYWdBY3Rpb25zLmFkZChuZXcgV1NETERyYWdTZXRNZXNzYWdlQWN0aW9uKG1vdmluZ0NoaWxkRWRpdFBhcnQsIHBvaW50ZXJFZGl0UGFydCwgbG9jYXRpb24pKTsKLS8vCSAgICAJCX0gICAgICAgICAgICAKLQkgICAgCX0KLS8vCSAgICAJZWxzZSBpZiAocmVxdWVzdC5nZXRUeXBlKCkuZXF1YWxzKFJlcXVlc3RDb25zdGFudHMuUkVRX0NMT05FKSkgewotLy8JICAgIAlMaXN0IGxpc3QgPSByZXF1ZXN0LmdldEVkaXRQYXJ0cygpOwotLy8JICAgIAlpZiAobGlzdC5zaXplKCkgPiAwKQotLy8JICAgIAl7Ci0vLwkgICAgCS8vIEdyYWJiaW5nIHRoZSBmaXN0IHNlbGVjdGlvbgotLy8JICAgIAltb3ZpbmdDaGlsZEVkaXRQYXJ0ID0gKFdTRExUcmVlTm9kZUVkaXRQYXJ0KSBsaXN0LmdldCgwKTsKLS8vCSAgICAJCi0vLwkgICAgCWRyYWdBY3Rpb25zLmFkZChuZXcgQ29weVdTRExFbGVtZW50QWN0aW9uKHZpZXdlciwKLS8vCSAgICAJKFdTRExFbGVtZW50KSBtb3ZpbmdDaGlsZEVkaXRQYXJ0LmdldE1vZGVsKCksCi0vLwkgICAgCShXU0RMRWxlbWVudCkgdGFyZ2V0RWRpdFBhcnQuZ2V0TW9kZWwoKSwKLS8vCSAgICAJbnVsbCkpOwotLy8JICAgIAl9Ci0vLwkgICAgCX0KLQkgICAgCQotCSAgICAJSXRlcmF0b3IgaXQgPSBkcmFnQWN0aW9ucy5pdGVyYXRvcigpOwotCSAgICAJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCSAgICAJCWRyYWdBY3Rpb24gPSAoQVNERHJhZ0FjdGlvbikgaXQubmV4dCgpOwotCSAgICAJCWNhbkV4ZWN1dGUgPSBkcmFnQWN0aW9uLmNhbkV4ZWN1dGUoKTsKLQkgICAgCQlpZiAoY2FuRXhlY3V0ZSkKLQkgICAgCQkJYnJlYWs7Ci0JICAgIAl9Ci0JICAgIH0KLQkgIH0KLQkgIAotCSAgcHVibGljIGJvb2xlYW4gY2FuRXhlY3V0ZSgpCi0JICB7IAotCSAgICByZXR1cm4gY2FuRXhlY3V0ZTsKLQkgIH0gICAgIAotCSAgCi0JICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCSAgICBpZiAoY2FuRXhlY3V0ZSkKLQkgICAgeyAKLQkgICAgICBkcmFnQWN0aW9uLnJ1bigpOyAKLQkgICAgfQotCSAgfQotCSAgCi0JICBwdWJsaWMgSUZpZ3VyZSBnZXRGZWVkYmFja0ZpZ3VyZSgpIHsKLQkgIAlpZiAoZHJhZ0FjdGlvbiAhPSBudWxsKSB7Ci0JICAJCXJldHVybiBkcmFnQWN0aW9uLmdldEZlZWRiYWNrRmlndXJlKCk7Ci0JICAJfQotCSAgCWVsc2UgewotCSAgCQlyZXR1cm4gbnVsbDsKLQkgIAl9Ci0JICB9Ci0JICAKLQkgIC8qCi0JICAgKiBUaGlzIG1ldGhvZCBjb21wZW5zYXRlcyBmb3IgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uCi0JICAgKi8KLQkgIHByaXZhdGUgUG9pbnQgZ2V0UG9pbnRlckxvY2F0aW9uKFBvaW50IG9yaWdQb2ludGVyTG9jYXRpb24pIHsKLQkgIAkgUG9pbnQgY29tcGVuc2F0ZWRMb2NhdGlvbiA9IG9yaWdQb2ludGVyTG9jYXRpb247Ci0JICAJIEZpZ3VyZUNhbnZhcyBmaWd1cmVDYW52YXMgPSAoRmlndXJlQ2FudmFzKSB2aWV3ZXIuZ2V0Q29udHJvbCgpOwotCSAgICAgaW50IHlPZmZzZXQgPSBmaWd1cmVDYW52YXMuZ2V0Vmlld3BvcnQoKS5nZXRWZXJ0aWNhbFJhbmdlTW9kZWwoKS5nZXRWYWx1ZSgpOwotCSAgICAgY29tcGVuc2F0ZWRMb2NhdGlvbi55ID0gY29tcGVuc2F0ZWRMb2NhdGlvbi55ICsgeU9mZnNldDsKLQkgICAgIAotCSAgICAgcmV0dXJuIGNvbXBlbnNhdGVkTG9jYXRpb247Ci0JICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRERyYWdBbmREcm9wRWRpdFBvbGljeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRERyYWdBbmREcm9wRWRpdFBvbGljeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzIzZWYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0REcmFnQW5kRHJvcEVkaXRQb2xpY3kuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYucmVxdWVzdHMuQ2hhbmdlQm91bmRzUmVxdWVzdDsKLQotcHVibGljIGNsYXNzIEFTRERyYWdBbmREcm9wRWRpdFBvbGljeSBleHRlbmRzIG9yZy5lY2xpcHNlLmdlZi5lZGl0cG9saWNpZXMuR3JhcGhpY2FsRWRpdFBvbGljeSB7Ci0JcHJvdGVjdGVkIEVkaXRQYXJ0Vmlld2VyIHZpZXdlcjsKLQlwcm90ZWN0ZWQgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeTsKLQkKLQlwdWJsaWMgQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5KEVkaXRQYXJ0Vmlld2VyIHZpZXdlciwgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSkgewotCQl0aGlzLnZpZXdlciA9IHZpZXdlcjsKLQkJdGhpcy5zZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSA9IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5OwotCX0KLQotCXB1YmxpYyBib29sZWFuIHVuZGVyc3RhbmRzUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLQlwdWJsaWMgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQgZ2V0Q29tbWFuZChSZXF1ZXN0IHJlcXVlc3QpIHsgICAgICAgICAgICAgCi0JCUFTRERyYWdBbmREcm9wQ29tbWFuZCBjb21tYW5kID0gbnVsbDsKLQkJaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBDaGFuZ2VCb3VuZHNSZXF1ZXN0KSB7Ci0JCQljb21tYW5kID0gbmV3IEFTRERyYWdBbmREcm9wQ29tbWFuZCh2aWV3ZXIsIChDaGFuZ2VCb3VuZHNSZXF1ZXN0KXJlcXVlc3QpOwotCQkJc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kuc2V0RHJhZ0FuZERyb3BDb21tYW5kKGNvbW1hbmQpOwotCQl9IAotCQlyZXR1cm4gY29tbWFuZDsgICAgICAgICAgICAgCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTREdyYXBoTm9kZURyYWdUcmFja2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU5ZjZjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRHJhZ0VkaXRQYXJ0c1RyYWNrZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RHcmFwaE5vZGVEcmFnVHJhY2tlciBleHRlbmRzIERyYWdFZGl0UGFydHNUcmFja2VyICB7Ci0JcHJvdGVjdGVkIEVkaXRQYXJ0IGVkaXRQYXJ0OyAKLQkKLQlwdWJsaWMgQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXIoRWRpdFBhcnQgZWRpdFBhcnQpIHsKLQkJc3VwZXIoZWRpdFBhcnQpOwotCQl0aGlzLmVkaXRQYXJ0ID0gZWRpdFBhcnQ7Ci0JfSAKLQkKLQlwcm90ZWN0ZWQgQ29tbWFuZCBnZXRDb21tYW5kKCkgeyAKLQkJUmVxdWVzdCByZXF1ZXN0ID0gZ2V0VGFyZ2V0UmVxdWVzdCgpOwotCQlyZXR1cm4gZWRpdFBhcnQuZ2V0Q29tbWFuZChyZXF1ZXN0KTsgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3kuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3kuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU0YjZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwb2xpY2llcy5EaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5yZXF1ZXN0cy5EaXJlY3RFZGl0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5FbmRQb2ludEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU5hbWVkT2JqZWN0OwotCi1wdWJsaWMgY2xhc3MgQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5IGV4dGVuZHMgRGlyZWN0RWRpdFBvbGljeSB7Ci0JcHJvdGVjdGVkIENvbW1hbmQgZ2V0RGlyZWN0RWRpdENvbW1hbmQoRGlyZWN0RWRpdFJlcXVlc3QgcmVxdWVzdCkgewotCQlDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotCQlTdHJpbmcgbGFiZWxUZXh0ID0gKFN0cmluZykgcmVxdWVzdC5nZXRDZWxsRWRpdG9yKCkuZ2V0VmFsdWUoKTsKLQkJRWRpdFBhcnQgZWRpdFBhcnQ9IGdldEhvc3QoKTsKLQotCQkvLyBUT0RPOiBybWFoOiAgU3RhcnQgVkVSWSBVR0xZIEhBQ0suLi4uICBJIGRvbid0IHNlZSBhbnkgb3RoZXIgd2F5IHRvIHNvbHZlIHRoaXMgaXNzdWUgYXQgdGhpcyB0aW1lLgotCQkvLyBFbmRQb2ludEVkaXRQYXJ0IGNvbnRhaW5zIHR3byBsYWJlbHMgd2hpY2ggY2FuIGJlIGRpcmVjdCBlZGl0ZWQuICBUaGUgZmFjYWRlIGRyaXZpbmcgRW5kUG9pbnRFZGl0UGFydAotCQkvLyBjb250YWlucyBhIGdldFNldE5hbWVDb21tYW5kKCkgYW5kIGEgZ2V0U2V0QWRkcmVzc0NvbW1hbmQoKS4uLiBob3dldmVyLCB0aGlzIGNsYXNzIChMYWJlbERpcmVjdEVkaXRQb2xpY3kpCi0JCS8vIG9ubHkga25vd3MgYWJvdXQgZ2V0U2V0TmFtZUNvbW1hbmQoKS4uLi4uICBUaGlzIGlzIHRoZSBwcm9ibGVtIHdlIGZhY2Ugd2hlbiBjb21iaW5pbmcgdHdvIGxhYmVscyBpbnRvCi0JCS8vIG9uZSBFZGl0UGFydC4uLi4uCi0JCWlmIChlZGl0UGFydCBpbnN0YW5jZW9mIEVuZFBvaW50RWRpdFBhcnQpIHsKLQkJCWNvbW1hbmQgPSAoKEVuZFBvaW50RWRpdFBhcnQpIGVkaXRQYXJ0KS5nZXRTZXRQcm9wZXJMYWJlbENvbW1hbmQobGFiZWxUZXh0KTsKLQkJfQotCQkvLyBFbmQgVkVSWSBVR0xZIEhBQ0sKLQkJZWxzZSBpZiAoZWRpdFBhcnQuZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCkgewotCQkJY29tbWFuZCA9ICgoSU5hbWVkT2JqZWN0KSBlZGl0UGFydC5nZXRNb2RlbCgpKS5nZXRTZXROYW1lQ29tbWFuZChsYWJlbFRleHQpOwotCQl9Ci0KLQkJcmV0dXJuIGNvbW1hbmQ7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2hvd0N1cnJlbnRFZGl0VmFsdWUoRGlyZWN0RWRpdFJlcXVlc3QgcmVxdWVzdCkgewotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNEU2VsZWN0aW9uRWRpdFBvbGljeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRFNlbGVjdGlvbkVkaXRQb2xpY3kuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNhZmZmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNEU2VsZWN0aW9uRWRpdFBvbGljeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwb2xpY2llcy5TZWxlY3Rpb25FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5yZXF1ZXN0cy5DaGFuZ2VCb3VuZHNSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLklGZWVkYmFja0hhbmRsZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IGV4dGVuZHMgU2VsZWN0aW9uRWRpdFBvbGljeSB7Ci0JcHJvdGVjdGVkIEFTRERyYWdBbmREcm9wQ29tbWFuZCBkcmFnQW5kRHJvcENvbW1hbmQ7Ci0JcHJvdGVjdGVkIElGaWd1cmUgZmVlZGJhY2s7Ci0KLQkgIHB1YmxpYyB2b2lkIHNldERyYWdBbmREcm9wQ29tbWFuZChBU0REcmFnQW5kRHJvcENvbW1hbmQgZHJhZ0FuZERyb3BDb21tYW5kKSB7Ci0JICAgIHRoaXMuZHJhZ0FuZERyb3BDb21tYW5kID0gZHJhZ0FuZERyb3BDb21tYW5kOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzaG93U291cmNlRmVlZGJhY2soUmVxdWVzdCByZXF1ZXN0KQotCSAgewotCSAgCWVyYXNlQ2hhbmdlQm91bmRzRmVlZGJhY2sobnVsbCk7Ci0JICAJCi0JICAJaWYgKGRyYWdBbmREcm9wQ29tbWFuZCAhPSBudWxsICYmIGRyYWdBbmREcm9wQ29tbWFuZC5jYW5FeGVjdXRlKCkpIHsKLQkJICBpZiAoUkVRX01PVkUuZXF1YWxzKHJlcXVlc3QuZ2V0VHlwZSgpKSB8fCBSRVFfQURELmVxdWFscyhyZXF1ZXN0LmdldFR5cGUoKSkpIHsKLQkJCSAgc2hvd01vdmVDaGFuZ2VCb3VuZHNGZWVkYmFjaygoQ2hhbmdlQm91bmRzUmVxdWVzdCkgcmVxdWVzdCk7Ci0JCSAgfQotLy8JCSAgZWxzZSBpZiAoUkVRX0NMT05FLmVxdWFscyhyZXF1ZXN0LmdldFR5cGUoKSkpIHsKLS8vCQkgIAkgIHNob3dDb3B5Q2hhbmdlQm91bmRzRmVlZGJhY2soKENoYW5nZUJvdW5kc1JlcXVlc3QpIHJlcXVlc3QpOwotLy8JCSAgfQotCSAgCX0KLQkgIH0KLQkgIAotCSAgLyoqCi0JICAgKiBFcmFzZSBmZWVkYmFjayBpbmRpY2F0aW5nIHRoYXQgdGhlIHJlY2VpdmVyIG9iamVjdCBpcyAKLQkgICAqIGJlaW5nIGRyYWdnZWQuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhIGRyYWcgaXMKLQkgICAqIGNvbXBsZXRlZCBvciBjYW5jZWxsZWQgb24gdGhlIHJlY2VpdmVyIG9iamVjdC4KLQkgICAqIEBwYXJhbSBkcmFnVHJhY2tlciBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRHJhZ1RyYWNrZXIgVGhlIGRyYWcgdHJhY2tlciBvZiB0aGUgdG9vbCBwZXJmb3JtaW5nIHRoZSBkcmFnLgotCSAgICovCi0JICBwdWJsaWMgdm9pZCBlcmFzZVNvdXJjZUZlZWRiYWNrKFJlcXVlc3QgcmVxdWVzdCkgCi0JICB7Ci0JICAgIGlmIChSRVFfTU9WRS5lcXVhbHMocmVxdWVzdC5nZXRUeXBlKCkpIHx8ICBSRVFfQURELmVxdWFscyhyZXF1ZXN0LmdldFR5cGUoKSkpCi0JICAgIHsKLQkJCSAgZXJhc2VDaGFuZ2VCb3VuZHNGZWVkYmFjaygoQ2hhbmdlQm91bmRzUmVxdWVzdClyZXF1ZXN0KTsKLQkgICAgfQotCSAgfQotCSAgCi0JICAvKioKLQkgICAqIEVyYXNlIGZlZWRiYWNrIGluZGljYXRpbmcgdGhhdCB0aGUgcmVjZWl2ZXIgb2JqZWN0IGlzIAotCSAgICogYmVpbmcgZHJhZ2dlZC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGEgZHJhZyBpcwotCSAgICogY29tcGxldGVkIG9yIGNhbmNlbGxlZCBvbiB0aGUgcmVjZWl2ZXIgb2JqZWN0LgotCSAgICogQHBhcmFtIGRyYWdUcmFja2VyIG9yZy5lY2xpcHNlLmdlZi50b29scy5EcmFnVHJhY2tlciBUaGUgZHJhZyB0cmFja2VyIG9mIHRoZSB0b29sIHBlcmZvcm1pbmcgdGhlIGRyYWcuCi0JICAgKi8KLQkgIHByb3RlY3RlZCB2b2lkIGVyYXNlQ2hhbmdlQm91bmRzRmVlZGJhY2soQ2hhbmdlQm91bmRzUmVxdWVzdCByZXF1ZXN0KSAKLQkgIHsKLQkJICBpZiAoZmVlZGJhY2sgIT0gbnVsbCkgCi0JICAgIHsJCSAgICAgIAotCQkJICByZW1vdmVGZWVkYmFjayhmZWVkYmFjayk7Ci0JCSAgfQotCQkgIGZlZWRiYWNrID0gbnVsbDsKLQkgIH0KLQkgIAotCSAgcHJvdGVjdGVkIHZvaWQgc2hvd01vdmVDaGFuZ2VCb3VuZHNGZWVkYmFjayhDaGFuZ2VCb3VuZHNSZXF1ZXN0IHJlcXVlc3QpCi0JICB7Ci0JICAJaWYgKGRyYWdBbmREcm9wQ29tbWFuZCAhPSBudWxsICYmIGRyYWdBbmREcm9wQ29tbWFuZC5nZXRGZWVkYmFja0ZpZ3VyZSgpICE9IG51bGwpIHsKLQkgIAkJZmVlZGJhY2sgPSBkcmFnQW5kRHJvcENvbW1hbmQuZ2V0RmVlZGJhY2tGaWd1cmUoKTsKLQkgIAkJYWRkRmVlZGJhY2soZmVlZGJhY2spOwotCSAgCX0KLQkgIH0gCi0JICAKLQlwcm90ZWN0ZWQgdm9pZCBoaWRlU2VsZWN0aW9uKCkgewotCQlpZiAoZ2V0SG9zdCgpIGluc3RhbmNlb2YgSUZlZWRiYWNrSGFuZGxlcikgewotCQkJCSgoSUZlZWRiYWNrSGFuZGxlcikgZ2V0SG9zdCgpKS5yZW1vdmVGZWVkYmFjaygpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2hvd1NlbGVjdGlvbigpIHsKLQkJaWYgKGdldEhvc3QoKSBpbnN0YW5jZW9mIElGZWVkYmFja0hhbmRsZXIpIHsKLQkJCSgoSUZlZWRiYWNrSGFuZGxlcikgZ2V0SG9zdCgpKS5hZGRGZWVkYmFjaygpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQmFzZUxpbmtJY29uRmlndXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0Jhc2VMaW5rSWNvbkZpZ3VyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTUzZTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQmFzZUxpbmtJY29uRmlndXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50TGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci0KLXB1YmxpYyBjbGFzcyBCYXNlTGlua0ljb25GaWd1cmUgZXh0ZW5kcyBGaWd1cmUgewotCXB1YmxpYyBzdGF0aWMgaW50IFZBTElEX1NDSEVNQV9MSU5LX1NUWUxFID0gMTsKLQlwdWJsaWMgc3RhdGljIGludCBJTlZBTElEX1NDSEVNQV9MSU5LX1NUWUxFID0gMjsKLQotCXByaXZhdGUgaW50IGxpbmtJY29uU3R5bGUgPSBWQUxJRF9TQ0hFTUFfTElOS19TVFlMRTsJCi0JcHJpdmF0ZSBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0OwotCXByaXZhdGUgTGlzdCBjaGlsZEZpZ3VyZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JcHVibGljIGludCBmaWd1cmVTcGFjaW5nID0gNzsKLQotCXB1YmxpYyBCYXNlTGlua0ljb25GaWd1cmUoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBlcCkgewotCQllZGl0UGFydCA9IGVwOwotCi0JCVRvb2xiYXJMYXlvdXQgbGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQodHJ1ZSkgewotCQkJcHVibGljIHZvaWQgbGF5b3V0KElGaWd1cmUgcGFyZW50KSB7Ci0JCQkJc3VwZXIubGF5b3V0KHBhcmVudCk7Ci0KLQkJCQlBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVwID0gZ2V0QXNzb2NpYXRlZEVkaXRQYXJ0KCk7Ci0JCQkJSUZpZ3VyZSBhc3NvY2lhdGVkRmlndXJlID0gZXAuZ2V0RmlndXJlKCk7Ci0JCQkJaWYgKGFzc29jaWF0ZWRGaWd1cmUgIT0gbnVsbCkgewotCQkJCQkvLyBVcGRhdGUgdGhlIGJvdW5kcwotCQkJCQlSZWN0YW5nbGUgYXNzb2NpYXRlZEJvdW5kcyA9IGFzc29jaWF0ZWRGaWd1cmUuZ2V0Qm91bmRzKCk7Ci0JCQkJCWludCB4ID0gYXNzb2NpYXRlZEJvdW5kcy54ICsgYXNzb2NpYXRlZEJvdW5kcy53aWR0aDsKLQkJCQkJaW50IHkgPSBhc3NvY2lhdGVkQm91bmRzLnk7Ci0JCQkJCWludCB3aWR0aCA9IGdldFNpemUoKS53aWR0aDsKLQkJCQkJaW50IGhlaWdodCA9IGFzc29jaWF0ZWRCb3VuZHMuaGVpZ2h0OwotCi0JCQkJCVJlY3RhbmdsZSBuZXdGaWdCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCQkJCQkvLyBTZXQgbXkgYm91bmRzIGJhc2VkIG9uIG15IGFzc29jaWF0ZWQgZWRpdHBhcnQKLQkJCQkJc2V0Qm91bmRzKG5ld0ZpZ0JvdW5kcyk7Ci0KLQkJCQkJLy8gTGF5b3V0IHRoZSBjaGlsZHJlbgotCQkJCQlJdGVyYXRvciBpdCA9IHBhcmVudC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7Ci0JCQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQkJCUlGaWd1cmUgZmlnID0gKElGaWd1cmUpIGl0Lm5leHQoKTsKLQkJCQkJCVBvaW50IG5ld1BvaW50ID0gbmV3IFBvaW50KHgsIHkpOwotCi0JCQkJCQkvLyBJbmRlbnQgdGhlIGZpZ3VyZSB0byB0aGUgcmlnaHQgdG8gc2hvdyB0aGUgImJyb2tlbiIgc2NoZW1hIGxpbmsgZmlndXJlCi0JCQkJCQlpZiAoZmlnIGluc3RhbmNlb2YgUmlnaHRJbnZhbGlkSWNvbkZpZ3VyZSkgewotCQkJCQkJCW5ld1BvaW50LnggPSBuZXdQb2ludC54ICsgZmlndXJlU3BhY2luZzsKLQkJCQkJCX0KLQotCQkJCQkJZmlnLnNldExvY2F0aW9uKG5ld1BvaW50KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfTsKLQkJc2V0TGF5b3V0TWFuYWdlcihsYXlvdXQpOwotCi0JCS8vIERlZmF1bHQgdG8gYSBWYWxpZExpbmtJY29uRmlndXJlCi0JCWxpbmtJY29uU3R5bGUgPSBWQUxJRF9TQ0hFTUFfTElOS19TVFlMRTsKLQkJYWRkQ2hpbGRGaWd1cmUobmV3IFZhbGlkTGlua0ljb25GaWd1cmUoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlbW92ZUNoaWxkRmlndXJlcygpIHsKLQkJSXRlcmF0b3IgaXQgPSBjaGlsZEZpZ3VyZXMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJcmVtb3ZlKChJRmlndXJlKSBpdC5uZXh0KCkpOwotCQl9Ci0KLQkJY2hpbGRGaWd1cmVzLmNsZWFyKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZENoaWxkRmlndXJlKElGaWd1cmUgZmlnKSB7Ci0JCWNoaWxkRmlndXJlcy5hZGQoZmlnKTsKLQkJYWRkKGZpZyk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TGlua0ljb25TdHlsZShpbnQgc3R5bGUpIHsKLQkJaWYgKHN0eWxlID09IFZBTElEX1NDSEVNQV9MSU5LX1NUWUxFICYmIGxpbmtJY29uU3R5bGUgIT0gVkFMSURfU0NIRU1BX0xJTktfU1RZTEUpIHsKLQkJCXJlbW92ZUNoaWxkRmlndXJlcygpOwotCQkJYWRkQ2hpbGRGaWd1cmUobmV3IFZhbGlkTGlua0ljb25GaWd1cmUoKSk7Ci0JCX0KLQkJZWxzZSBpZiAoc3R5bGUgPT0gSU5WQUxJRF9TQ0hFTUFfTElOS19TVFlMRSAmJiBsaW5rSWNvblN0eWxlICE9IElOVkFMSURfU0NIRU1BX0xJTktfU1RZTEUpIHsKLQkJCXJlbW92ZUNoaWxkRmlndXJlcygpOwotCQkJYWRkQ2hpbGRGaWd1cmUobmV3IExlZnRJbnZhbGlkSWNvbkZpZ3VyZSgpKTsKLQkJCWFkZENoaWxkRmlndXJlKG5ldyBSaWdodEludmFsaWRJY29uRmlndXJlKCkpOwotCQl9Ci0KLQkJbGlua0ljb25TdHlsZSA9IHN0eWxlOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0TGlua0ljb25TdHlsZSgpIHsKLQkJcmV0dXJuIGxpbmtJY29uU3R5bGU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q29sb3IoQ29sb3IgY29sb3IpIHsKLQkJSXRlcmF0b3IgaXQgPSBjaGlsZEZpZ3VyZXMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJSUZpZ3VyZSBmaWcgPSAoSUZpZ3VyZSkgaXQubmV4dCgpOwotCQkJZmlnLnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7Ci0JCQlmaWcuc2V0Rm9yZWdyb3VuZENvbG9yKGNvbG9yKTsKLQkJfQotCX0KLQotCXB1YmxpYyBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGdldEFzc29jaWF0ZWRFZGl0UGFydCgpIHsKLQkJcmV0dXJuIGVkaXRQYXJ0OwotCX0KLQotCXByaXZhdGUgY2xhc3MgTGVmdEludmFsaWRJY29uRmlndXJlIGV4dGVuZHMgTGlua0ljb25GaWd1cmUgewotCQlwdWJsaWMgTGVmdEludmFsaWRJY29uRmlndXJlKCkgewotCQkJc3VwZXIobnVsbCk7Ci0JCQlQb2ludExpc3QgcG9pbnRzID0gbmV3IFBvaW50TGlzdCgpOwotCQkJCi0JCQkvLyBEcmF3IHRoZSBhcnJvdwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA1LCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNywgMCArIHZlcnRpY2FsQnVmZmVyKSk7CS8vIHRvcCBzbGFzaAotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAyLCAxMCArIHZlcnRpY2FsQnVmZmVyKSk7CS8vIGJvdHRvbSBzbGFzaAotCi0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA0LCA2ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDAsIDYgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0KLQkJCXNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotCQkJc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRGaWxsKHRydWUpOwotCQkJc2V0UG9pbnRzKHBvaW50cyk7Ci0JCX0KLQotCQkvLyBXZSBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgd2lkdGggYmVjYXVzZSB3ZSBpbmRlbnQgdGhlIGZpZ3VyZSB0b3dhcmRzIHRoZSByaWdodC4KLQkJLy8gU28gd2UgaW5kZW50IGJ5IHRoYXQgc2FtZSBhbW91bnQgc3RvcmVkIGluIGhvcml6b250YWxCdWZmZXIKLQkJcHVibGljIERpbWVuc2lvbiBnZXRQcmVmZXJyZWRTaXplKGludCB3SGludCwgaW50IGhIaW50KSB7Ci0JCQlEaW1lbnNpb24gZGltZW5zaW9uID0gc3VwZXIuZ2V0UHJlZmVycmVkU2l6ZSh3SGludCwgaEhpbnQpOwotCQkJZGltZW5zaW9uLndpZHRoID0gZGltZW5zaW9uLndpZHRoICsgaG9yaXpvbnRhbEJ1ZmZlcjsKLQotCQkJcmV0dXJuIGRpbWVuc2lvbjsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFBvaW50IHBvaW50KSB7Ci0JCQlzdXBlci5zZXRMb2NhdGlvbihwb2ludCk7Ci0JCQkvLyBVcGRhdGUgdGhlIHBvaW50cyB3aXRoIHRoZSBmb2xsb3dpbmcgbWV0aG9kIGNhbGwKLQkJCXNldEZpZ3VyZUxvY2F0aW9uKHBvaW50KTsKLQkJfQotCX0KLQotCXByaXZhdGUgY2xhc3MgUmlnaHRJbnZhbGlkSWNvbkZpZ3VyZSBleHRlbmRzIExpbmtJY29uRmlndXJlIHsKLQkJcHVibGljIFJpZ2h0SW52YWxpZEljb25GaWd1cmUoKSB7Ci0JCQlzdXBlcihudWxsKTsKLQkJCVBvaW50TGlzdCBwb2ludHMgPSBuZXcgUG9pbnRMaXN0KCk7Ci0KLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDUsIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNywgMCArIHZlcnRpY2FsQnVmZmVyKSk7CS8vIHRvcCBzbGFzaAotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0KLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDEwLCAwICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDE1LCA1ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDEwLCAxMCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxMCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0KLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDQsIDYgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMiwgMTAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwkvLyBib3R0b20gc2xhc2gKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDUsIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCi0JCQlzZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLQkJCXNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotCQkJc2V0RmlsbCh0cnVlKTsKLQkJCXNldFBvaW50cyhwb2ludHMpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0TG9jYXRpb24oUG9pbnQgcG9pbnQpIHsKLQkJCXN1cGVyLnNldExvY2F0aW9uKHBvaW50KTsKLQkJCXNldEZpZ3VyZUxvY2F0aW9uKHBvaW50KTsKLQkJfQotCX0KLQotCXByaXZhdGUgY2xhc3MgVmFsaWRMaW5rSWNvbkZpZ3VyZSBleHRlbmRzIExlZnRJbnZhbGlkSWNvbkZpZ3VyZSB7Ci0JCXB1YmxpYyBWYWxpZExpbmtJY29uRmlndXJlKCkgewotCQkJUG9pbnRMaXN0IHBvaW50cyA9IG5ldyBQb2ludExpc3QoKTsKLQotCQkJLy8gRHJhdyB0aGUgYXJyb3cKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDAsIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTUsIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTUsIDAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMjAsIDUgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTUsIDEwICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDE1LCA2ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDAsIDYgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0KLQkJCXNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotCQkJc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRGaWxsKHRydWUpOwotCQkJc2V0UG9pbnRzKHBvaW50cyk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0JveENvbXBvbmVudEZpZ3VyZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9Cb3hDb21wb25lbnRGaWd1cmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNkYmMyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0JveENvbXBvbmVudEZpZ3VyZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotCi1wdWJsaWMgY2xhc3MgQm94Q29tcG9uZW50RmlndXJlIGV4dGVuZHMgRmlndXJlCi17Ci0gIHB1YmxpYyBIZWFkaW5nRmlndXJlIGhlYWRpbmdGaWd1cmU7Ci0gIEZpZ3VyZSBjb250ZW50UGFuZTsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNTZWxlY3RlZCA9IGZhbHNlOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1JlYWRPbmx5ID0gZmFsc2U7Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbGVhbiBpc1NlbGVjdGVkKQotICB7Ci0gICAgaGVhZGluZ0ZpZ3VyZS5zZXRTZWxlY3RlZChpc1NlbGVjdGVkKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElzUmVhZE9ubHkoYm9vbGVhbiBpc1JlYWRPbmx5KQotICB7Ci0gICAgdGhpcy5pc1JlYWRPbmx5ID0gaXNSZWFkT25seTsKLSAgfQotCi0gIHB1YmxpYyBCb3hDb21wb25lbnRGaWd1cmUoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBoZWFkaW5nRmlndXJlID0gbmV3IEhlYWRpbmdGaWd1cmUoKTsKLSAgICBhZGQoaGVhZGluZ0ZpZ3VyZSk7Ci0gICAgY29udGVudFBhbmUgPSBuZXcgTGlzdEZpZ3VyZSgpOwotICAgIGNvbnRlbnRQYW5lLnNldExheW91dE1hbmFnZXIobmV3IFRvb2xiYXJMYXlvdXQoKSk7Ci0gICAgYWRkKGNvbnRlbnRQYW5lKTsKLSAgfQotCi0gIHB1YmxpYyBGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRlbnRQYW5lOwotICB9Ci0KLSAgcHVibGljIExhYmVsIGdldExhYmVsKCkKLSAgewotICAgIHJldHVybiBoZWFkaW5nRmlndXJlLmdldExhYmVsKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBGaWd1cmUgZ2V0SGVhZGluZ0ZpZ3VyZSgpCi0gIHsKLSAgICByZXR1cm4gaGVhZGluZ0ZpZ3VyZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjAyYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db25uZWN0aW9uUm91dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb2x5Z29uRGVjb3JhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUG9seWxpbmVDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLQotcHVibGljIGNsYXNzIENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24gZXh0ZW5kcyBQb2x5bGluZUNvbm5lY3Rpb24KLXsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaGlnaGxpZ2h0ID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29sb3IgYWN0aXZlQ29ubmVjdGlvbiA9IENvbG9yQ29uc3RhbnRzLmJsYWNrOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIENvbG9yIGluYWN0aXZlQ29ubmVjdGlvbiA9IG5ldyBDb2xvcihudWxsLCAxOTgsIDE5NSwgMTk4KTsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBzZXRUYXJnZXREZWNvcmF0aW9uKG5ldyBQb2x5Z29uRGVjb3JhdGlvbigpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25Sb3V0ZXIoQ29ubmVjdGlvblJvdXRlciBjcikKLSAgewotICAgIGlmIChjciAhPSBudWxsICYmIGdldENvbm5lY3Rpb25Sb3V0ZXIoKSAhPSBudWxsKS8vIFRPRE86Li4uLiAmJiAhKGdldENvbm5lY3Rpb25Sb3V0ZXIoKSBpbnN0YW5jZW9mIEJPTWFuaGF0dGFuQ29ubmVjdGlvblJvdXRlcikpCi0gICAgICBzdXBlci5zZXRDb25uZWN0aW9uUm91dGVyKGNyKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgaGlnaGxpZ2h0IHN0YXR1cy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzSGlnaGxpZ2h0ZWQoKQotICB7Ci0gICAgcmV0dXJuIGhpZ2hsaWdodDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gaGlnaGxpZ2h0Ci0gICAqICAgICAgICAgIFRoZSBoaWdobGlnaHQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SGlnaGxpZ2h0KGJvb2xlYW4gaGlnaGxpZ2h0KQotICB7Ci0gICAgdGhpcy5oaWdobGlnaHQgPSBoaWdobGlnaHQ7Ci0gICAgc2V0Rm9yZWdyb3VuZENvbG9yKGhpZ2hsaWdodCA/IGFjdGl2ZUNvbm5lY3Rpb24gOiBpbmFjdGl2ZUNvbm5lY3Rpb24pOwotICAgIHNldE9wYXF1ZShoaWdobGlnaHQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0hlYWRpbmdGaWd1cmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvSGVhZGluZ0ZpZ3VyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGQ1YmE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvSGVhZGluZ0ZpZ3VyZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5HcmFwaGljczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLQotcHVibGljIGNsYXNzIEhlYWRpbmdGaWd1cmUgZXh0ZW5kcyBGaWd1cmUKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBDb2xvciBoZWFkZXJDb2xvciA9IG5ldyBDb2xvcihudWxsLCAyMjQsIDIzMywgMjQ2KTsKLSAgTGFiZWwgbGFiZWw7Ci0gIHByb3RlY3RlZCBDb2xvcltdIGdyYWRpZW50Q29sb3IgPSB7Q29sb3JDb25zdGFudHMud2hpdGUsICAKLSAgICAgICAgICAgIENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSwKLSAgICAgICAgICAgIENvbG9yQ29uc3RhbnRzLmxpZ2h0Qmx1ZSwKLSAgICAgICAgICAgIENvbG9yQ29uc3RhbnRzLmdyYXl9OwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1NlbGVjdGVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzUmVhZE9ubHkgPSBmYWxzZTsKLSAgCi0gIHB1YmxpYyBIZWFkaW5nRmlndXJlKCkKLSAgewotICAgIGxhYmVsID0gbmV3IExhYmVsKCk7Ci0gICAgbGFiZWwuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoMikpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICB0b29sYmFyTGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fQ0VOVEVSKTsKLSAgICBzZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotICAgIGFkZChsYWJlbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkKGJvb2xlYW4gaXNTZWxlY3RlZCkKLSAgewotICAgIHRoaXMuaXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzUmVhZE9ubHkoYm9vbGVhbiBpc1JlYWRPbmx5KQotICB7Ci0gICAgdGhpcy5pc1JlYWRPbmx5ID0gaXNSZWFkT25seTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpCi0gIHsKLSAgICBzdXBlci5wYWludChncmFwaGljcyk7Ci0vLyAgICBDb2xvciBvbGRGb3JlZ3JvdW5kID0gIGdyYXBoaWNzLmdldEZvcmVncm91bmRDb2xvcigpOwotICAgIC8vIEZpbGwgZm9yIHRoZSBoZWFkZXIgc2VjdGlvbgotICAgIC8vCi0gICAgUmVjdGFuZ2xlIHIgPSBnZXRCb3VuZHMoKS5nZXRDb3B5KCk7Ci0gICAgZ3JhcGhpY3Muc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0gICAgLy9ncmFwaGljcy5maWxsUmVjdGFuZ2xlKHIueCsxLCByLnkrMSwgci53aWR0aC0xLCBiYXJZY29vcmRpbmF0ZSAtIHIueSAtIDEpOwotICAgIENvbG9yIGdyYWRpZW50MSA9IGlzUmVhZE9ubHkgPyBncmFkaWVudENvbG9yWzFdIDogaGVhZGVyQ29sb3I7Ci0gICAgaWYgKGlzU2VsZWN0ZWQgJiYgaXNSZWFkT25seSkgZ3JhZGllbnQxID0gZ3JhZGllbnRDb2xvclszXTsKLSAgICBlbHNlIGlmIChpc1NlbGVjdGVkICYmICFpc1JlYWRPbmx5KSBncmFkaWVudDEgPSBncmFkaWVudENvbG9yWzJdOwotICAgIENvbG9yIGdyYWRpZW50MiA9IGdyYWRpZW50Q29sb3JbMF07Ci0gICAgZ3JhcGhpY3Muc2V0Rm9yZWdyb3VuZENvbG9yKGdyYWRpZW50MSk7Ci0gICAgZ3JhcGhpY3Muc2V0QmFja2dyb3VuZENvbG9yKGdyYWRpZW50Mik7Ci0gICAgUmVjdGFuZ2xlIGxhYmVsQm91bmRzID0gbGFiZWwuZ2V0Qm91bmRzKCk7Ci0gICAgZ3JhcGhpY3MuZmlsbEdyYWRpZW50KHIueCsxLCByLnkrMSwgci53aWR0aC0yLCBsYWJlbEJvdW5kcy5oZWlnaHQgLCB0cnVlKTsKLSAgICBncmFwaGljcy5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuZGFya0dyYXkpOwotICAgIGxhYmVsLnBhaW50KGdyYXBoaWNzKTsgICAgCi0gICAgZ3JhcGhpY3Muc2V0Rm9yZWdyb3VuZENvbG9yKGlzU2VsZWN0ZWQgPyBncmFkaWVudENvbG9yWzFdIDogZ3JhZGllbnRDb2xvclszXSk7Ci0gICAgLy9ncmFwaGljcy5kcmF3TGluZShyLngrMSwgci55ICsgMTUsIHIueCArIHIud2lkdGgsIHIueSArIDE1KTsKLSAgICAvL2dyYXBoaWNzLmRyYXdMaW5lKHIueCsxLCByLnkgKyBsYWJlbEJvdW5kcy5oZWlnaHQsIHIueCArIHIud2lkdGgsIHIueSArIGxhYmVsQm91bmRzLmhlaWdodCk7Ci0gIH0KLQotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIGxhYmVsOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTGlua0ljb25GaWd1cmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTGlua0ljb25GaWd1cmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEwN2EzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0xpbmtJY29uRmlndXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb2x5Z29uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIExpbmtJY29uRmlndXJlIGV4dGVuZHMgUG9seWdvbiB7Ci0JcHJpdmF0ZSBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0OwotCXByaXZhdGUgUG9pbnQgZmlnTG9jYXRpb247Ci0JICBwcml2YXRlIFBvaW50TGlzdCBwb2ludHMgPSBuZXcgUG9pbnRMaXN0KCk7Ci0JICBwdWJsaWMgaW50IGhvcml6b250YWxCdWZmZXIgPSA1OwotCSAgcHVibGljIGludCB2ZXJ0aWNhbEJ1ZmZlciA9IDc7Ci0KLQkgIHB1YmxpYyBMaW5rSWNvbkZpZ3VyZShBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVwKSB7Ci0JCSAgZWRpdFBhcnQgPSBlcDsKLQkJICAKLQkJICAvLyBEcmF3IHRoZSBhcnJvdwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDAsIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDksIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDksIDAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDE0LCA1ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJICBwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA5LCAxMCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgOSwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgCi0JCSAgc2V0RmlsbCh0cnVlKTsJICAKLQkJICBzZXRQb2ludHMocG9pbnRzKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgcGFpbnRGaWd1cmUoR3JhcGhpY3MgZ3JhcGhpY3MpIHsKLQkJICBzdXBlci5wYWludEZpZ3VyZShncmFwaGljcyk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldEZpZ3VyZUxvY2F0aW9uKFBvaW50IG5ld1N0YXJ0aW5nTG9jYXRpb24pIHsKLQkJICBpbnQgZHkgPSBuZXdTdGFydGluZ0xvY2F0aW9uLnk7Ci0KLQkJICBpZiAoZmlnTG9jYXRpb24gIT0gbnVsbCkgewotCQkJICBkeSA9IG5ld1N0YXJ0aW5nTG9jYXRpb24ueSAtIGZpZ0xvY2F0aW9uLnk7Ci0JCSAgfQotCi0JCSAgLy8gVXBkYXRlIHRoZSBwb2ludHMKLQkJICBQb2ludExpc3QgbmV3UG9pbnRzID0gbmV3IFBvaW50TGlzdCgpOwotCQkgIFBvaW50TGlzdCBwTGlzdCA9IGdldFBvaW50cygpOwotCQkgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBwTGlzdC5zaXplKCk7IGluZGV4KyspIHsKLQkJCSAgUG9pbnQgcG9pbnQgPSBwTGlzdC5nZXRQb2ludChpbmRleCk7Ci0JCQkgIC8vIEFkZCA1IGZvciB0aGUgcGFkZGluZwotCQkJICBQb2ludCBuZXdQb2ludCA9IG5ldyBQb2ludChwb2ludC54ICsgaG9yaXpvbnRhbEJ1ZmZlciwgcG9pbnQueSArIGR5KTsKLQkJCSAgbmV3UG9pbnRzLmFkZFBvaW50KG5ld1BvaW50KTsKLQkJICB9Ci0JCSAgc2V0UG9pbnRzKG5ld1BvaW50cyk7Ci0KLQkJICBmaWdMb2NhdGlvbiA9IG5ld1N0YXJ0aW5nTG9jYXRpb247Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHByaW1UcmFuc2xhdGUoaW50IGR4LCBpbnQgZHkpIHsKLQkJCWJvdW5kcy54ICs9IGR4OwotCQkJYm91bmRzLnkgKz0gZHk7Ci0JCQkKLQkJCVBvaW50TGlzdCBwTGlzdCA9IGdldFBvaW50cygpOwotCQkJUG9pbnRMaXN0IG5ld0xpc3QgPSBuZXcgUG9pbnRMaXN0KCk7Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgcExpc3Quc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQkJUG9pbnQgcG9pbnQgPSBwTGlzdC5nZXRQb2ludChpbmRleCk7Ci0JCQkJUG9pbnQgbmV3UG9pbnQgPSBuZXcgUG9pbnQocG9pbnQueCArIGR4LCBwb2ludC55KTsKLQkJCQluZXdMaXN0LmFkZFBvaW50KG5ld1BvaW50KTsKLQkJCX0KLQkJCXNldFBvaW50cyhuZXdMaXN0KTsKLQkJCQotCQkJaWYgKHVzZUxvY2FsQ29vcmRpbmF0ZXMoKSkgewotCQkJCWZpcmVDb29yZGluYXRlU3lzdGVtQ2hhbmdlZCgpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCSAgCi0JICBwdWJsaWMgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBnZXRBc3NvY2lhdGVkRWRpdFBhcnQoKSB7Ci0JCSAgcmV0dXJuIGVkaXRQYXJ0OwotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9MaXN0RmlndXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0xpc3RGaWd1cmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI4NTYzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0xpc3RGaWd1cmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLQotcHVibGljIGNsYXNzIExpc3RGaWd1cmUgZXh0ZW5kcyBGaWd1cmUKLXsKLSAgYm9vbGVhbiBpc09wYXF1ZSA9IGZhbHNlOwotICBib29sZWFuIGlzSG9yaXpvbnRhbCA9IGZhbHNlOwotICBib29sZWFuIHBhaW50Rmlyc3RMaW5lID0gdHJ1ZTsKLSAgCi0gIHB1YmxpYyBMaXN0RmlndXJlKGJvb2xlYW4gaXNIb3Jpem9udGFsKQotICB7Ci0gICAgdGhpcy5pc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7IAotICB9Ci0gIAotICBwdWJsaWMgTGlzdEZpZ3VyZSgpCi0gIHsKLSAgICB0aGlzKGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGdyYXBoaWNzKQotICB7Ci0gICAgc3VwZXIucGFpbnQoZ3JhcGhpY3MpOwotICAgIGJvb2xlYW4gaXNGaXJzdCA9IHRydWU7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRmlndXJlIGZpZ3VyZSA9IChGaWd1cmUpIGkubmV4dCgpOwotICAgICAgaWYgKGlzRmlyc3QgJiYgIXBhaW50Rmlyc3RMaW5lKQotICAgICAgewotICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFJlY3RhbmdsZSByID0gZmlndXJlLmdldEJvdW5kcygpOwotICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICB7ICAKLSAgICAgICAgICBncmFwaGljcy5kcmF3TGluZShyLngsIHIueSwgci54LCByLnkgKyByLmhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7ICAKLSAgICAgICAgICBncmFwaGljcy5kcmF3TGluZShyLngsIHIueSwgci54ICsgci53aWR0aCwgci55KTsKLSAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzT3BhcXVlKCkKLSAgewotICAgIHJldHVybiBpc09wYXF1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE9wYXF1ZShib29sZWFuIGlzT3BhcXVlKQotICB7Ci0gICAgdGhpcy5pc09wYXF1ZSA9IGlzT3BhcXVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQYWludEZpcnN0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gcGFpbnRGaXJzdExpbmU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYWludEZpcnN0TGluZShib29sZWFuIHBhaW50Rmlyc3RMaW5lKQotICB7Ci0gICAgdGhpcy5wYWludEZpcnN0TGluZSA9IHBhaW50Rmlyc3RMaW5lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL01vZGVsRGlhZ25vc3RpY0luZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTW9kZWxEaWFnbm9zdGljSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmRkOGFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTW9kZWxEaWFnbm9zdGljSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci0KLS8qCi0gKiBBIE1vZGVsRGlhZ25vc3RpY0luZm8gb2JqZWN0IGNvbnRhaW5zICJhZGRpdGlvbmFsIiBpbmZvcm1hdGlvbiBhYm91dCBhIG1vZGVsIG9iamVjdC4KLSAqIEl0IGlzIHBhc3NlZCBmcm9tIGEgbW9kZWwgKGZhY2FkZSkgb2JqZWN0IHRvIGFuIEVkaXRQYXJ0LiAgVGhlIEVkaXRQYXJ0IHVzZXMgdGhlIE1vZGVsRGlhZ25vc3RpY0luZm8KLSAqIG9iamVjdCB0byBkaXNwbGF5IGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSAoZm9yIGV4YW1wbGUsIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgbW9kZWwKLSAqIG9iamVjdCBpcyBpbiBzb21lIHdheSBpbnZhbGlkLgotICovCi1wdWJsaWMgY2xhc3MgTW9kZWxEaWFnbm9zdGljSW5mbyB7Ci0JcHVibGljIHN0YXRpYyBpbnQgSU5GT1JNQVRJT05BTF9UWVBFID0gMDsKLQlwdWJsaWMgc3RhdGljIGludCBFUlJPUl9UWVBFID0gMTsKLQlwdWJsaWMgc3RhdGljIGludCBXQVJOSU5HX1RZUEUgPSAyOwotCQotCXByaXZhdGUgaW50IHR5cGUgPSAxOwotCXByaXZhdGUgU3RyaW5nIHRleHQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgQ29sb3IgdGV4dENvbG9yOwotCQotCXB1YmxpYyBNb2RlbERpYWdub3N0aWNJbmZvKFN0cmluZyB0eHQsIGludCBpbmZvVHlwZSwgQ29sb3IgY29sb3IpIHsKLQkJdGV4dCA9IHR4dDsKLQkJdHlwZSA9IGluZm9UeXBlOwotCQl0ZXh0Q29sb3IgPSBjb2xvcjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb25UZXh0KFN0cmluZyB0eHQpIHsKLQkJdGV4dCA9IHR4dDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoQ29sb3IgY29sb3IpIHsKLQkJdGV4dENvbG9yID0gY29sb3I7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFR5cGUoaW50IGluZm9UeXBlKSB7Ci0JCXR5cGUgPSBpbmZvVHlwZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvblRleHQoKSB7Ci0JCXJldHVybiB0ZXh0OwotCX0KLQkKLQlwdWJsaWMgaW50IGdldFR5cGUoKSB7Ci0JCXJldHVybiB0eXBlOwotCX0KLQkKLQlwdWJsaWMgQ29sb3IgZ2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoKSB7Ci0JCWlmICh0ZXh0Q29sb3IgIT0gbnVsbCkgewotCQkJcmV0dXJuIHRleHRDb2xvcjsKLQkJfQotCQkKLQkJaWYgKHR5cGUgPT0gRVJST1JfVFlQRSkgewotCQkJcmV0dXJuIENvbG9yQ29uc3RhbnRzLnJlZDsKLQkJfQotCQllbHNlIGlmICh0eXBlID09IFdBUk5JTkdfVFlQRSkgewotCQkJcmV0dXJuIENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheTsKLQkJfQotCQkKLQkJcmV0dXJuIENvbG9yQ29uc3RhbnRzLmJsYWNrOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQmluZGluZ0NvbHVtbkxheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29sdW1uTGF5b3V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MGFjNzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29sdW1uTGF5b3V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQWJzdHJhY3RMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5CaW5kaW5nRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29sdW1uTGF5b3V0IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQKLXsKLSAgRWRpdFBhcnQgYmluZGluZ0NvbHVtbkVkaXRQYXJ0OwotICAKLSAgcHVibGljIEJpbmRpbmdDb2x1bW5MYXlvdXQoRWRpdFBhcnQgYmluZGluZ0NvbHVtbkVkaXRQYXJ0KQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmJpbmRpbmdDb2x1bW5FZGl0UGFydCA9IGJpbmRpbmdDb2x1bW5FZGl0UGFydDsKLSAgfQotCi0gIHByb3RlY3RlZCBEaW1lbnNpb24gY2FsY3VsYXRlUHJlZmVycmVkU2l6ZShJRmlndXJlIGNvbnRhaW5lciwgaW50IHdIaW50LCBpbnQgaEhpbnQpCi0gIHsKLSAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgRGltZW5zaW9uIGQgPSBjYWxjdWxhdGVDaGlsZHJlblNpemUoY29udGFpbmVyLmdldENoaWxkcmVuKCksIHdIaW50LCBoSGludCk7Ci0gICAgZC5oZWlnaHQgPSBNYXRoLm1heChkLmhlaWdodCwgY2xpZW50QXJlYS5oZWlnaHQpOwotICAgIHJldHVybiBkOwotICB9Ci0KLSAgcHJpdmF0ZSBEaW1lbnNpb24gY2FsY3VsYXRlQ2hpbGRyZW5TaXplKExpc3QgY2hpbGRyZW4sIGludCB3SGludCwgaW50IGhIaW50KQotICB7Ci0gICAgRGltZW5zaW9uIGNoaWxkU2l6ZTsKLSAgICBJRmlndXJlIGNoaWxkOwotICAgIGludCBoZWlnaHQgPSAwLCB3aWR0aCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7Ci0gICAgICBjaGlsZFNpemUgPSBjaGlsZC5nZXRQcmVmZXJyZWRTaXplKHdIaW50LCBoSGludCk7Ci0gICAgICBoZWlnaHQgKz0gY2hpbGRTaXplLmhlaWdodDsKLSAgICAgIGhlaWdodCArPSA4MDsKLSAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGNoaWxkU2l6ZS53aWR0aCk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgRGltZW5zaW9uKE1hdGgubWF4KHdpZHRoLCAxNTApLCBoZWlnaHQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbGF5b3V0KElGaWd1cmUgY29udGFpbmVyKQotICB7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkJpbmRpbmdDb2x1bW5MYXlvdXQubGF5b3V0KCkiICsgY29udGFpbmVyLmdldENoaWxkcmVuKCkuc2l6ZSgpKTsKLSAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgUmVjdGFuZ2xlIHIgPSBuZXcgUmVjdGFuZ2xlKCk7Ci0gICAgci54ID0gY2xpZW50QXJlYS54ICsgNTA7Ci0gICAgci55ID0gY2xpZW50QXJlYS55OwotICAgIGludCB1c2VkID0gMDsKLQotICAgIGZvciAoSXRlcmF0b3IgaSA9IGNvbnRhaW5lci5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBGaWd1cmUgY2hpbGQgPSAoRmlndXJlKSBpLm5leHQoKTsKLSAgICAgIERpbWVuc2lvbiBkID0gY2hpbGQuZ2V0UHJlZmVycmVkU2l6ZSgtMSwgLTEpOwotICAgICAgci53aWR0aCA9IGQud2lkdGg7Ci0gICAgICByLmhlaWdodCA9IGQuaGVpZ2h0OwotICAgICAgCi0gICAgICBjaGlsZC5zZXRCb3VuZHMocik7Ci0gICAgICB1c2VkICs9IDMwOwotICAgICAgdXNlZCArPSByLmhlaWdodDsKLSAgICAgIAotICAgICAgSUZpZ3VyZSBpbnRlZmFjZUZpZ3VyZSA9IGdldEludGVyZmFjZUZpZ3VyZUZvckV4cGFuZGVkRWRpdFBhcnRGaWd1cmUoY2hpbGQpOwotICAgICAgaWYgKGludGVmYWNlRmlndXJlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFJlY3RhbmdsZSBiID0gaW50ZWZhY2VGaWd1cmUuZ2V0Qm91bmRzKCk7Ci0gICAgICAgIGludCB3aWR0aCA9IDMwOwotICAgICAgICBjaGlsZC5zZXRCb3VuZHMobmV3IFJlY3RhbmdsZShiLnggLSB3aWR0aCwgYi55LCB3aWR0aCwgYi5oZWlnaHQpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgci55ICs9IGQuaGVpZ2h0OwotICAgICAgci55ICs9IDgwOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RXhwYW5kZWQoQmluZGluZ0VkaXRQYXJ0IGJpbmRpbmdFZGl0UGFydCwgYm9vbGVhbiBpc0V4cGFuZGVkKQotICB7Ci0gICAgLy8gRmlyc3QgcnVuIHRocm91Z2ggYWxsIG9mIHRoZSBiaW5kaW5ncyBhcmUgYXJlIGV4cGFuZGVkCi0gICAgLy8gdG8gZW5zdXJlIGF0IG1vc3Qgb25lIGJpbmRpbmcgaXMgZXhwYW5kZWQgZm9yIGVhY2ggaW50ZXJmYWNlIHNpbmNlCi0gICAgLy8gd2UgbWF5IG5lZWQgdG8gY29sbGFwc2UgYSBiaW5kaW5nIGluIG9yZGVyIHRvIGV4cGFuZCB0aGlzIG9uZS4KLSAgICAvLwotICAgIElJbnRlcmZhY2UgaW50ZXJmYXplID0gZ2V0SW50ZXJmYWNlKGJpbmRpbmdFZGl0UGFydCk7ICAgIAotICAgIGlmIChpbnRlcmZhemUgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGJpbmRpbmdFZGl0UGFydC5zZXRFeHBhbmRlZChpc0V4cGFuZGVkKTsKLSAgICAgIGlmIChpc0V4cGFuZGVkKQotICAgICAgeyAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdDb2x1bW5FZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICBCaW5kaW5nRWRpdFBhcnQgb3RoZXJCaW5kaW5nRWRpdFBhcnQgPSAoQmluZGluZ0VkaXRQYXJ0KWkubmV4dCgpOwotICAgICAgICAgIGlmIChvdGhlckJpbmRpbmdFZGl0UGFydCAhPSBiaW5kaW5nRWRpdFBhcnQgJiYKLSAgICAgICAgICAgICAgaW50ZXJmYXplID09IGdldEludGVyZmFjZShvdGhlckJpbmRpbmdFZGl0UGFydCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3RoZXJCaW5kaW5nRWRpdFBhcnQuc2V0RXhwYW5kZWQoZmFsc2UpOwotICAgICAgICAgIH0gIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSUZpZ3VyZSBnZXRJbnRlcmZhY2VGaWd1cmVGb3JFeHBhbmRlZEVkaXRQYXJ0RmlndXJlKEZpZ3VyZSBlZGl0UGFydEZpZ3VyZSkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdDb2x1bW5FZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgQmluZGluZ0VkaXRQYXJ0IGJpbmRpbmdFZGl0UGFydCA9IChCaW5kaW5nRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICBpZiAoYmluZGluZ0VkaXRQYXJ0LmlzRXhwYW5kZWQoKSAmJiBiaW5kaW5nRWRpdFBhcnQuZ2V0RmlndXJlKCkgPT0gZWRpdFBhcnRGaWd1cmUpCi0gICAgICB7Ci0gICAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgaW50ZXJmYWNlRWRpdFBhcnQgPSBnZXRNYXRjaGluZ0VkaXRQYXJ0KGdldEludGVyZmFjZShiaW5kaW5nRWRpdFBhcnQpKTsKLSAgICAgICAgaWYgKGludGVyZmFjZUVkaXRQYXJ0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gaW50ZXJmYWNlRWRpdFBhcnQuZ2V0RmlndXJlKCk7Ci0gICAgICAgIH0gICAgICAgICAgCi0gICAgICB9ICAKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSUludGVyZmFjZSBnZXRJbnRlcmZhY2UoQmluZGluZ0VkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZyllZGl0UGFydC5nZXRNb2RlbCgpOwotICAgIHJldHVybiBiaW5kaW5nLmdldEludGVyZmFjZSgpOwotICB9Ci0gIAotICBwcml2YXRlIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZ2V0TWF0Y2hpbmdFZGl0UGFydChJSW50ZXJmYWNlIGludGVyZmF6ZSkKLSAgewotICAgIHJldHVybihBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KWJpbmRpbmdDb2x1bW5FZGl0UGFydC5nZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KGludGVyZmF6ZSk7ICAgIAotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29udGVudExheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29udGVudExheW91dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDFiMzhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQmluZGluZ0NvbnRlbnRMYXlvdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkFic3RyYWN0TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkJpbmRpbmdFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5JTmFtZWRFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGxheW91dCB0aGUgY29udGVudHMgb2YgdGhlIGJpbmRpbmcgJ3J1bGVyJyBkaXNwbGF5ZWQKLSAqIHRvIHRoZSBsZWZ0IHNpZGUgb2YgYW4gaW50ZXJmYWNlLiBUaGUgY29udGVudHMgYXJlIGFsaWduZWQgd2l0aCB0aGUgaW50ZXJmYWNlCi0gKiBmaWd1cmVzIHNvIHRoYXQgY29ycmVzcG9kaW5nIGJpbmRpbmcgYW5kIGludGVyZmFjZSBjb25zdHJ1Y3RzIGFyZSBzaWRlIGJ5IHNpZGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29udGVudExheW91dCBleHRlbmRzIEFic3RyYWN0TGF5b3V0Ci17Ci0gIEJpbmRpbmdFZGl0UGFydCBiaW5kaW5nRWRpdFBhcnQ7Ci0gIAotICBwdWJsaWMgQmluZGluZ0NvbnRlbnRMYXlvdXQoQmluZGluZ0VkaXRQYXJ0IGJpbmRpbmdFZGl0UGFydCkKLSAgewotICAgIHRoaXMuYmluZGluZ0VkaXRQYXJ0ID0gYmluZGluZ0VkaXRQYXJ0OwotICB9Ci0KLSAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgewotICAgIGlmIChiaW5kaW5nRWRpdFBhcnQuaXNFeHBhbmRlZCgpKQotICAgIHsgIAotICAgICAgUmVjdGFuZ2xlIGNsaWVudEFyZWEgPSBjb250YWluZXIuZ2V0Q2xpZW50QXJlYSgpOwotICAgICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oY2xpZW50QXJlYS53aWR0aCwgY2xpZW50QXJlYS5oZWlnaHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwwKTsKLSAgICB9ICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIGNvbnRhaW5lcikKLSAgeyAgICAgCi0gICAgUmVjdGFuZ2xlIGNsaWVudEFyZWEgPSBjb250YWluZXIuZ2V0Q2xpZW50QXJlYSgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGJpbmRpbmdFZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGNoaWxkRWRpdFBhcnQgPSAoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgaS5uZXh0KCk7Ci0gICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGNvcnJlc3BvbmRpbmdFZGl0UGFydCA9IG51bGw7Ci0gICAgICBPYmplY3QgbW9kZWwgPSBjaGlsZEVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0gICAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQmluZGluZ09wZXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgSU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoKElCaW5kaW5nT3BlcmF0aW9uKW1vZGVsKS5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgY29ycmVzcG9uZGluZ0VkaXRQYXJ0ID0gZ2V0RWRpdFBhcnQob3BlcmF0aW9uKTsgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSkKLSAgICAgIHsKLSAgICAgICAgSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSA9ICgoSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKW1vZGVsKS5nZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0gICAgICAgIGNvcnJlc3BvbmRpbmdFZGl0UGFydCA9IGdldEVkaXRQYXJ0KG1lc3NhZ2VSZWZlcmVuY2UpOyAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlcikgewotICAgIAkgIE9iamVjdCBjb3JyZXNwb25kaW5nTW9kZWwgPSAoKEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIpIG1vZGVsKS5nZXRNb2RlbCgpOwotICAgIAkgIGNvcnJlc3BvbmRpbmdFZGl0UGFydCA9IGdldEVkaXRQYXJ0KGNvcnJlc3BvbmRpbmdNb2RlbCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChjb3JyZXNwb25kaW5nRWRpdFBhcnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSUZpZ3VyZSBmaWd1cmUgPSBjb3JyZXNwb25kaW5nRWRpdFBhcnQuZ2V0RmlndXJlKCk7ICAgICAgIAotICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0VkaXRQYXJ0IGluc3RhbmNlb2YgSU5hbWVkRWRpdFBhcnQpCi0gICAgICAgIHsKLSAgICAgICAgICBmaWd1cmUgPSAoKElOYW1lZEVkaXRQYXJ0KWNvcnJlc3BvbmRpbmdFZGl0UGFydCkuZ2V0TGFiZWxGaWd1cmUoKTsgICAgICAgICAgICAKLSAgICAgICAgfSAgCi0gICAgICAgIFJlY3RhbmdsZSBib3VuZHMgPSBmaWd1cmUuZ2V0Qm91bmRzKCk7Ci0gICAgICAgIFJlY3RhbmdsZSBuZXdCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlKGNsaWVudEFyZWEueCwgYm91bmRzLnksIGNsaWVudEFyZWEud2lkdGgsIGJvdW5kcy5oZWlnaHQpOwotICAgICAgICBjaGlsZEVkaXRQYXJ0LmdldEZpZ3VyZSgpLnNldEJvdW5kcyhuZXdCb3VuZHMpOwotICAgICAgfSAgCi0gICAgfQotICB9ICAKLSAgCi0gIHByb3RlY3RlZCBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGdldEVkaXRQYXJ0KE9iamVjdCBtb2RlbCkKLSAgewotICAgIGlmIChtb2RlbCAhPSBudWxsKQotICAgIHsgIAotICAgICAgRWRpdFBhcnQgZWRpdFBhcnQgPSAoRWRpdFBhcnQpYmluZGluZ0VkaXRQYXJ0LmdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQobW9kZWwpOwotICAgICAgaWYgKGVkaXRQYXJ0IGluc3RhbmNlb2YgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KWVkaXRQYXJ0OyAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQmluZGluZ0xheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nTGF5b3V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDhlNDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nTGF5b3V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuQmluZGluZ0VkaXRQYXJ0OwotCi0vLyBqdXN0IGEgdG9vbGJhciBsYXlvdXQgd2l0aCBhIG1pbm9yIHR3ZWFrIHRvIGVuc3VyZSB0aGUgbGFzdCBmaWd1cmUgZmlsbHMKLS8vIHRoZSBlbnRpcmUgYXZhaWxhYmxlIHNwYWNlCi1wdWJsaWMgY2xhc3MgQmluZGluZ0xheW91dCBleHRlbmRzIFRvb2xiYXJMYXlvdXQKLXsKLSAgQmluZGluZ0VkaXRQYXJ0IGVkaXRQYXJ0OwotICAKLSAgcHVibGljIEJpbmRpbmdMYXlvdXQoQmluZGluZ0VkaXRQYXJ0IGVkaXRQYXJ0KQotICB7Ci0gICAgdGhpcy5lZGl0UGFydCA9IGVkaXRQYXJ0OyAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgewotICAgIERpbWVuc2lvbiBkID0gc3VwZXIuY2FsY3VsYXRlUHJlZmVycmVkU2l6ZShjb250YWluZXIsIHdIaW50LCBoSGludCk7Ci0gICAgLy9SZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgLy9kLndpZHRoID0gTWF0aC5tYXgoZC53aWR0aCwgY2xpZW50QXJlYS53aWR0aCk7Ci0gICAgLy9kLmhlaWdodCA9IE1hdGgubWF4KGQuaGVpZ2h0LCBjbGllbnRBcmVhLmhlaWdodCk7Ci0gICAgcmV0dXJuIGQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIGNvbnRhaW5lcikKLSAgewotICAgIHN1cGVyLmxheW91dChjb250YWluZXIpOwotICAgIGlmIChlZGl0UGFydC5pc0V4cGFuZGVkKCkpCi0gICAgeyAgCi0gICAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7ICAgIAotICAgICAgTGlzdCBjaGlsZHJlbiA9IGNvbnRhaW5lci5nZXRDaGlsZHJlbigpOwotICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA+IDEpCi0gICAgICB7Ci0gICAgICAgIEZpZ3VyZSBoZWFkZXIgPSAoRmlndXJlKWNoaWxkcmVuLmdldCgwKTsgICAgICAgIAotICAgICAgICBGaWd1cmUgY29udGVudFBhbmUgPSAoRmlndXJlKWNoaWxkcmVuLmdldChjaGlsZHJlbi5zaXplKCkgLSAxKTsKLSAgICAgICAgaWYgKGNvbnRlbnRQYW5lLmdldENoaWxkcmVuKCkuc2l6ZSgpID4gMCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgUmVjdGFuZ2xlIGJvdW5kcyA9IGNvbnRlbnRQYW5lLmdldEJvdW5kcygpOwotICAgICAgICAgIGJvdW5kcy5oZWlnaHQgPSBjbGllbnRBcmVhLmhlaWdodCAtIGhlYWRlci5nZXRCb3VuZHMoKS5oZWlnaHQ7Ci0gICAgICAgIH0gIAotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9Db2x1bW5EYXRhLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0NvbHVtbkRhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJhNTg4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0NvbHVtbkRhdGEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDb2x1bW5EYXRhCi17Ci0gIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgCi0gIGNsYXNzIEVudHJ5Ci0gIHsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCB3ZWlnaHQgPSAxOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjbGVhckNvbHVtbldpZHRocygpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KWkubmV4dCgpOwotICAgICAgZW50cnkud2lkdGggPSAwOwotICAgIH0gIAotICB9ICAKLSAgCi0gIHByaXZhdGUgRW50cnkgbG9va3VwT3JDcmVhdGVDb2x1bW5FbnRyeShTdHJpbmcgaWRlbnRpZmllcikKLSAgewotICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KW1hcC5nZXQoaWRlbnRpZmllcik7Ci0gICAgaWYgKGVudHJ5ID09IG51bGwpCi0gICAgewotICAgICAgZW50cnkgPSBuZXcgRW50cnkoKTsKLSAgICAgIG1hcC5wdXQoaWRlbnRpZmllciwgZW50cnkpOwotICAgIH0gIAotICAgcmV0dXJuIGVudHJ5OyAKLSAgfSAgCi0gIAotICB2b2lkIHN0cmV0Y2hDb2x1bW5XaWR0aElmTmVlZGVkKFN0cmluZyBpZGVudGlmaWVyLCBpbnQgd2lkdGgpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IGxvb2t1cE9yQ3JlYXRlQ29sdW1uRW50cnkoaWRlbnRpZmllcik7Ci0gICAgZW50cnkud2lkdGggPSBNYXRoLm1heChlbnRyeS53aWR0aCwgd2lkdGgpOwotICB9Ci0gIAotICBpbnQgZ2V0Q29sdW1uV2lkdGgoU3RyaW5nIGlkZW50aWZpZXIpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSltYXAuZ2V0KGlkZW50aWZpZXIpOwotICAgIGlmIChlbnRyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBlbnRyeS53aWR0aDsKLSAgICB9ICAKLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIDA7Ly9obW0gc2hvdWxkIHdlIHJldHVybiAtMSA/Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGludCBnZXRDb2x1bW5XZWlnaHQoU3RyaW5nIGlkZW50aWZpZXIpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSltYXAuZ2V0KGlkZW50aWZpZXIpOwotICAgIGlmIChlbnRyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBlbnRyeS53ZWlnaHQ7Ci0gICAgfSAgCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0gIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb2x1bW5XZWlnaHQoU3RyaW5nIGlkZW50aWZpZXIsIGludCB3ZWlnaHQpCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IGxvb2t1cE9yQ3JlYXRlQ29sdW1uRW50cnkoaWRlbnRpZmllcik7Ci0gICAgZW50cnkud2VpZ2h0ID0gd2VpZ2h0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL1Jvd0xheW91dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9Sb3dMYXlvdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjNzQwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL1Jvd0xheW91dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQWJzdHJhY3RMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotCi1wdWJsaWMgY2xhc3MgUm93TGF5b3V0IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQKLXsKLSAgLy8gbGF5b3V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcmVudCBjb250ZXh0Ci0gIC8vIGFueSBsYXlvdXQgbWFuYWdlciB1bmRlciB0aGUgcGFyZW50IGNvbnRleHQgaXMgY29ubmVjdGVkCi0gIC8vIGNvbHVtbiByb3dzIGFyZSBtYWludGFpbmVkIGFjY3Jvc3MgY29udGFpbmVyIGJvdW5kYXJpZXMgIAotICBwcm90ZWN0ZWQgQ29sdW1uRGF0YSBjb2x1bW5EYXRhOwotICBwcm90ZWN0ZWQgSGFzaE1hcCBmaWd1cmVUb0NvbnRzdHJhaW50TWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgCi0gIHB1YmxpYyBSb3dMYXlvdXQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotICAKLQotICAvLyB0aGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgbWluaW11bSBzaXplIHJlcXVpcmVkIHRvIGRpc3BsYXkgdGhlIGZpZ3VyZXMKLSAgLy8KLSAgcHJpdmF0ZSBEaW1lbnNpb24gY2FsY3VsYXRlQ2hpbGRyZW5TaXplKElGaWd1cmUgY29udGFpbmVyLCBMaXN0IGNoaWxkcmVuLCBpbnQgd0hpbnQsIGludCBoSGludCwgYm9vbGVhbiBwcmVmZXJyZWQpCi0gIHsKLSAgICBEaW1lbnNpb24gY2hpbGRTaXplOwotICAgIElGaWd1cmUgY2hpbGQ7Ci0gICAgaW50IGhlaWdodCA9IDA7Ci0gICAgaW50IHdpZHRoID0gMDsKLSAgICAKLSAgICAvL0lSb3dGaWd1cmUgZmlndXJlID0gKElSb3dGaWd1cmUpY29udGFpbmVyOwotICAgIAotICAgIC8vIGZvciBlYWNoIGNlbGwgaW4gdGhlIHJvdwotICAgIC8vCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7Ci0gICAgICBTdHJpbmcgY29sdW1uSWRlbmlmaWVyID0gKFN0cmluZylnZXRDb25zdHJhaW50KGNoaWxkKTsKLSAgICAgICAgICAgICAKLSAgICAgIC8vIGZpcnN0IHdlIGNvbXB1dGUgdGhlIGNoaWxkIHNpemUgd2l0aG91dCByZWdhcmQgZm9yIGNvbHVtbkRhdGEKLSAgICAgIC8vCi0gICAgICBjaGlsZFNpemUgPSBjaGlsZC5nZXRQcmVmZXJyZWRTaXplKHdIaW50LCBoSGludCk7Ly8gOiBjaGlsZC5nZXRNaW5pbXVtU2l6ZSh3SGludCwgaEhpbnQpOwotICAgICAgICAKLSAgICAgIC8vIG5vdyB0aGF0IHRoZSBjb2x1bW5EYXRhIGhhcyBiZWVuIHBvcHVsYXRlZCB3ZSBjYW4gY29uc2lkZXIgaWYgdGhlIHJvdyBuZWVkcyB0byBiZSBsYXJnZXIKLSAgICAgIC8vCi0gICAgICBpbnQgZWZmZWN0aXZlV2lkdGggPSBjaGlsZFNpemUud2lkdGg7Ci0gICAgICBpZiAoY29sdW1uSWRlbmlmaWVyICE9IG51bGwpCi0gICAgICB7ICAKLSAgICAgICAgY29sdW1uRGF0YS5zdHJldGNoQ29sdW1uV2lkdGhJZk5lZWRlZChjb2x1bW5JZGVuaWZpZXIsIGNoaWxkU2l6ZS53aWR0aCk7Ci0gICAgICAgIGVmZmVjdGl2ZVdpZHRoID0gY29sdW1uRGF0YS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JZGVuaWZpZXIpOwotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBoZWlnaHQgPSBNYXRoLm1heChjaGlsZFNpemUuaGVpZ2h0LCBoZWlnaHQpOwotICAgICAgd2lkdGggKz0gZWZmZWN0aXZlV2lkdGg7Ci0gICAgfSAgCi0gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24od2lkdGgsIGhlaWdodCk7Ci0gIH0KLSAgCi0gIAotICAKLSAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgeyAgICAKLSAgICBMaXN0IGNoaWxkcmVuID0gY29udGFpbmVyLmdldENoaWxkcmVuKCk7Ci0gICAgRGltZW5zaW9uIHByZWZTaXplID0gY2FsY3VsYXRlQ2hpbGRyZW5TaXplKGNvbnRhaW5lciwgY2hpbGRyZW4sIHdIaW50LCBoSGludCwgdHJ1ZSk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oInByZWZlcnJlZFNpemU9IiArIHByZWZTaXplKTsKLSAgICByZXR1cm4gcHJlZlNpemU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsYXlvdXQoSUZpZ3VyZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBsYXlvdXQgYSB0YWJsZSB3aXRoIHRoZSBjb2x1bW5zIGFsaWduZWQgICAgICAKLSAgICAvL0lSb3dGaWd1cmUgcm93RmlndXJlID0gKElSb3dGaWd1cmUpcGFyZW50OyAgICAKLSAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IHBhcmVudC5nZXRDbGllbnRBcmVhKCk7ICAgCi0gICAgTGlzdCBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZHJlbigpOwotICAgIFJlY3RhbmdsZSByID0gbmV3IFJlY3RhbmdsZSgpOwotICAgIHIueCA9IGNsaWVudEFyZWEueDsKLSAgICByLnkgPSBjbGllbnRBcmVhLnk7Ci0gICAgci5oZWlnaHQgPSBjbGllbnRBcmVhLmhlaWdodDsKLSAgICAKLSAgICBpbnQgY2hpbGRyZW5TaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIFJlY3RhbmdsZVtdIGJvdW5kcyA9IG5ldyBSZWN0YW5nbGVbY2hpbGRyZW5TaXplXTsKLSAgICAKLSAgICAvLyBmb3IgZWFjaCBjZWxsIGluIHRoZSByb3cKLSAgICAvLwotICAgIGludCByZXF1aXJlZFdpZHRoID0gMDsKLSAgICBpbnQgdG90YWxDb2x1bW5XZWlnaHQgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyBpKyspCi0gICAgewotICAgICAgSUZpZ3VyZSBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7Ci0gICAgICAvL1N0cmluZyBjb2x1bW5JZGVuaWZpZXIgPSBmaWd1cmUuZ2V0Q29sdW1uSWRlbnRpZmllcihjaGlsZCk7ICAgICAgICAgICAgIAotICAgICAgLy8gZmlyc3Qgd2UgY29tcHV0ZSB0aGUgY2hpbGQgc2l6ZSB3aXRob3V0IHJlZ2FyZCBmb3IgY29sdW1uRGF0YQotICAgICAgLy8KLSAgICAgIERpbWVuc2lvbiBjaGlsZFNpemUgPSBjaGlsZC5nZXRQcmVmZXJyZWRTaXplKC0xLCAtMSk7Ci0gICAgICAKLSAgICAgIGludCBjb2x1bW5XaWR0aCA9IC0xOwotICAgICAgLy9TdHJpbmcgY29sdW1uSWRlbnRpZmllciA9IHJvd0ZpZ3VyZS5nZXRDb2x1bW5JZGVudGlmaWVyKGNoaWxkKTsKLSAgICAgIFN0cmluZyBjb2x1bW5JZGVudGlmaWVyID0gKFN0cmluZylnZXRDb25zdHJhaW50KGNoaWxkKTsKLSAgICAgIGlmIChjb2x1bW5JZGVudGlmaWVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vY29sdW1uRGF0YS5zdHJldGNoQ29sdW1uV2lkdGhJZk5lZWRlZChjb2x1bW5JZGVudGlmaWVyLCBjaGlsZFNpemUud2lkdGgpOyAgICAgICAgCi0gICAgICAgIGNvbHVtbldpZHRoID0gY29sdW1uRGF0YS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JZGVudGlmaWVyKTsKLSAgICAgICAgdG90YWxDb2x1bW5XZWlnaHQgKz0gY29sdW1uRGF0YS5nZXRDb2x1bW5XZWlnaHQoY29sdW1uSWRlbnRpZmllcik7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJjb2x1bW5XaWR0aCgiICsgY29sdW1uSWRlbnRpZmllciArICIpPSIgKyBjb2x1bW5XaWR0aCk7ICAgICAgICAKLSAgICAgIH0gIAotICAgICAgci53aWR0aCA9IE1hdGgubWF4KGNoaWxkU2l6ZS53aWR0aCwgY29sdW1uV2lkdGgpOwotICAgICAgcmVxdWlyZWRXaWR0aCArPSByLndpZHRoOwotICAgICAgYm91bmRzW2ldID0gbmV3IFJlY3RhbmdsZShyKTsgICAgICAKLSAgICAgIHIueCArPSByLndpZHRoOwotICAgIH0gICAgICAgICAgCi0gICAgaWYgKHRvdGFsQ29sdW1uV2VpZ2h0IDwgMSkKLSAgICB7Ci0gICAgICB0b3RhbENvbHVtbldlaWdodCA9IDE7Ci0gICAgfQotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJjbGllbnRBcmVhLndpZHRoPSIgKyBjbGllbnRBcmVhLndpZHRoICsgIiwgIiArIHIueCk7Ci0gICAgaW50IGV4dHJhV2lkdGggPSBNYXRoLm1heChjbGllbnRBcmVhLndpZHRoIC0gcmVxdWlyZWRXaWR0aCwgMCk7ICAgIAotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleHRyYVdpZHRoPSIgKyBleHRyYVdpZHRoICsgIiB0b3RhbENvbHVtbldlaWdodD0iICsgdG90YWxDb2x1bW5XZWlnaHQpOyAgCi0gICAgaW50IGV4dHJhV2lkdGhBbGxvY2F0ZWQgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5TaXplOyBpKyspCi0gICAgewotICAgICAgSUZpZ3VyZSBjaGlsZCA9IChJRmlndXJlKSBjaGlsZHJlbi5nZXQoaSk7ICAgICAgCi0gICAgICBSZWN0YW5nbGUgYiA9IGJvdW5kc1tpXTsgICAgCi0gICAgICBpZiAoZXh0cmFXaWR0aCA+IDApCi0gICAgICB7ICAKLSAgICAgICAgU3RyaW5nIGNvbHVtbklkZW50aWZpZXIgPSAoU3RyaW5nKWdldENvbnN0cmFpbnQoY2hpbGQpOwotICAgICAgICBpZiAoY29sdW1uSWRlbnRpZmllciAhPSBudWxsKQotICAgICAgICB7ICAgICAgICAKLSAgICAgICAgICBpbnQgd2VpZ2h0ID0gY29sdW1uRGF0YS5nZXRDb2x1bW5XZWlnaHQoY29sdW1uSWRlbnRpZmllcik7Ci0gICAgICAgICAgZmxvYXQgZnJhY3Rpb24gPSAoZmxvYXQpd2VpZ2h0IC8gKGZsb2F0KXRvdGFsQ29sdW1uV2VpZ2h0OwotICAgICAgICAgIGludCBleHRyYVdpZHRoRm9yQ2hpbGQgPSAoaW50KShleHRyYVdpZHRoICogZnJhY3Rpb24pOwotICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleHRyYVdpZHRoRm9yQ2hpbGQoIiArIGZyYWN0aW9uICsgIik9IiArIGV4dHJhV2lkdGhGb3JDaGlsZCk7ICAgICAgICAKLSAgICAgICAgICBiLndpZHRoICs9IGV4dHJhV2lkdGhGb3JDaGlsZDsgICAgICAgIAotICAgICAgICAgIGIueCArPSBleHRyYVdpZHRoQWxsb2NhdGVkOwotICAgICAgICAgIGV4dHJhV2lkdGhBbGxvY2F0ZWQgKz0gZXh0cmFXaWR0aEZvckNoaWxkOwotICAgICAgICB9ICAKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYi54ICs9IGV4dHJhV2lkdGhBbGxvY2F0ZWQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNoaWxkLnNldEJvdW5kcyhuZXcgUmVjdGFuZ2xlKGIpKTsgIAotICAgIH0gIAotICB9Ci0KLSAgcHVibGljIENvbHVtbkRhdGEgZ2V0Q29sdW1uRGF0YSgpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uRGF0YTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbHVtbkRhdGEoQ29sdW1uRGF0YSBjb2x1bW5EYXRhKQotICB7Ci0gICAgdGhpcy5jb2x1bW5EYXRhID0gY29sdW1uRGF0YTsKLSAgfSAgICAKLSAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0Q29uc3RyYWludChJRmlndXJlIGNoaWxkKQotICB7Ci0gICAgcmV0dXJuIGZpZ3VyZVRvQ29udHN0cmFpbnRNYXAuZ2V0KGNoaWxkKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29uc3RyYWludChJRmlndXJlIGNoaWxkLCBPYmplY3QgY29uc3RyYWludCkKLSAgewotICAgIGZpZ3VyZVRvQ29udHN0cmFpbnRNYXAucHV0KGNoaWxkLCBjb25zdHJhaW50KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpCi0gIHsKLSAgICAvL2ZpZ3VyZVRvQ29udHN0cmFpbnRNYXAuY2xlYXIoKTsKLSAgICAvL3RoaXMuY29sdW1uRGF0YS5jbGVhckNvbHVtbldpZHRocygpOwotICAgIHN1cGVyLmludmFsaWRhdGUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiaW52YWxpZGF0ZSIpOyAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWEzZjg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lBU0RPYmplY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElBU0RPYmplY3QKLXsKLSAgICBwdWJsaWMgdm9pZCByZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcik7Ci0gICAgcHVibGljIHZvaWQgdW5yZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcik7Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpOwotICAgIHB1YmxpYyBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlcygpOwotCXB1YmxpYyBDb21tYW5kIGdldERlbGV0ZUNvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lBU0RPYmplY3RMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MjhjMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotcHVibGljIGludGVyZmFjZSBJQVNET2JqZWN0TGlzdGVuZXIgewotCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChPYmplY3Qgb2JqZWN0LCBTdHJpbmcgcHJvcGVydHkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZmNiYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotcHVibGljIGludGVyZmFjZSBJQmluZGluZyBleHRlbmRzIElOYW1lZE9iamVjdAotewotCXB1YmxpYyBJSW50ZXJmYWNlIGdldEludGVyZmFjZSgpOwotCXB1YmxpYyBMaXN0IGdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0JcHVibGljIExpc3QgZ2V0QmluZGluZ0NvbnRlbnRMaXN0KCk7Ci0JcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJsaXR5T2JqZWN0cygpOwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKTsgIAotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotICAKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRJbnRlcmZhY2VDb21tYW5kKElJbnRlcmZhY2UgbmV3SW50ZXJmYWNlKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRHZW5lcmF0ZUJpbmRpbmdDb21tYW5kKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGJjOTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGludGVyZmFjZSBJQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UgZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsKLQlwdWJsaWMgSU1lc3NhZ2VSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCXB1YmxpYyBMaXN0IGdldEV4dGVuc2libGl0eU9iamVjdHMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQmluZGluZ09wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDhiOTlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNlIElCaW5kaW5nT3BlcmF0aW9uIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17Ci0JcHVibGljIElPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCk7Ci0JcHVibGljIExpc3QgZ2V0QmluZGluZ01lc3NhZ2VzKCk7Ci0JcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJsaXR5T2JqZWN0cygpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JRGVzY3JpcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lEZXNjcmlwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGY3YzU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lEZXNjcmlwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgSURlc2NyaXB0aW9uIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17Ci0JcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2UoKTsKLQlwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZVByZWZpeCgpOwotLy8JcHVibGljIExpc3QgZ2V0TmFtZXNwYWNlc0luZm8oKTsJLy8gVE9ETzogQWRkIHRoaXMgbWV0aG9kIGluIHRoZSBmdXR1cmUKLQkKLQlwdWJsaWMgTGlzdCBnZXRJbXBvcnRzKCk7Ci0JcHVibGljIExpc3QgZ2V0VHlwZXMoKTsKLQlwdWJsaWMgTGlzdCBnZXRTZXJ2aWNlcygpOwotCXB1YmxpYyBMaXN0IGdldEJpbmRpbmdzKCk7Ci0JcHVibGljIExpc3QgZ2V0SW50ZXJmYWNlcygpOwotCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCk7Ci0gIAotCXB1YmxpYyBDb21tYW5kIGdldEFkZEltcG9ydENvbW1hbmQoKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRTY2hlbWFDb21tYW5kKCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0QWRkU2VydmljZUNvbW1hbmQoKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRCaW5kaW5nQ29tbWFuZCgpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZEludGVyZmFjZUNvbW1hbmQoKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRNZXNzYWdlQ29tbWFuZCgpOwotLy8JcHVibGljIENvbW1hbmQgZ2V0RWRpdE5hbWVzcGFjZXNDb21tYW5kKCk7CS8vIFRPRE86IEFkZCB0aGlzIG1ldGhvZCBpbiB0aGUgZnV0dXJlCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JRW5kUG9pbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lFbmRQb2ludC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjhmYjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lFbmRQb2ludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotcHVibGljIGludGVyZmFjZSBJRW5kUG9pbnQgZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsKLQlwdWJsaWMgSVNlcnZpY2UgZ2V0T3duZXJTZXJ2aWNlKCk7Ci0JcHVibGljIFN0cmluZyBnZXRBZGRyZXNzKCk7Ci0JcHVibGljIElCaW5kaW5nIGdldEJpbmRpbmcoKTsKLQlwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCk7Ci0gIAotCXB1YmxpYyBDb21tYW5kIGdldFNldEJpbmRpbmdDb21tYW5kKElCaW5kaW5nIGJpbmRpbmcpOwotCXB1YmxpYyBDb21tYW5kIGdldFNldEFkZHJlc3NDb21tYW5kKFN0cmluZyBuZXdBZGRyZXNzKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lJbXBvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lJbXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJmZDM1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JSW1wb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotcHVibGljIGludGVyZmFjZSBJSW1wb3J0IGV4dGVuZHMgSU5hbWVkT2JqZWN0IHsKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpOwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlUHJlZml4KCk7Ci0JcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpOwotCQotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUludGVyZmFjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmY0ZGVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUludGVyZmFjZSBleHRlbmRzIElOYW1lZE9iamVjdCB7Ci0gIHB1YmxpYyBMaXN0IGdldE9wZXJhdGlvbnMoKTsKLSAgLyoKLSAgICogQGRlcHJlY2F0ZWQuICBUaGUgbWV0aG9kIGdldEltYWdlKCkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZQotICAgKi8KLSAgcHVibGljIEltYWdlIGdldEltYWdlKCk7Ci0gIHB1YmxpYyBDb21tYW5kIGdldEFkZE9wZXJhdGlvbkNvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lNZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTWVzc2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDg2YzVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lNZXNzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU1lc3NhZ2UgZXh0ZW5kcyBJTmFtZWRPYmplY3QgewotCSAgcHVibGljIExpc3QgZ2V0UGFydHMoKTsKLQkgIAotCSAgcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JICAKLQkgIHB1YmxpYyBDb21tYW5kIGdldEFkZFBhcnRDb21tYW5kKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTWVzc2FnZVJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU1lc3NhZ2VSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0MGU5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTWVzc2FnZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi0vLyB0aGlzIGlzIGEgc2ltcGxpZmljYXRpb24gb2YgYW4gaW5wdXQsIG91dHB1dCBvciBmYXVsdCBvYmplY3QKLS8vIChvciBhbnkgb3RoZXIga2luZCBvZiBvYmplY3QgZnV0dXJlIHNwZWNzIG1pZ2h0IGNvb2sgdXApCi1wdWJsaWMgaW50ZXJmYWNlIElNZXNzYWdlUmVmZXJlbmNlIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17ICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgS0lORF9JTlBVVCAgPSAxOwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBLSU5EX09VVFBVVCA9IDI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEtJTkRfRkFVTFQgPSAzOwotICAKLSAgcHVibGljIGludCBnZXRLaW5kKCk7Ci0gIHB1YmxpYyBMaXN0IGdldFBhcmFtZXRlcnMoKTsgICAKLSAgcHVibGljIElPcGVyYXRpb24gZ2V0T3duZXJPcGVyYXRpb24oKTsKLSAgCi0gIHB1YmxpYyBDb21tYW5kIGdldFJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChJUGFyYW1ldGVyIGxlZnRTaWJsaW5nLCBJUGFyYW1ldGVyIHJpZ2h0U2libGluZywgSVBhcmFtZXRlciBtb3ZpbmdQYXJhbWV0ZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU5hbWVkT2JqZWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTmFtZWRPYmplY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhkMzczYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTmFtZWRPYmplY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU5hbWVkT2JqZWN0IGV4dGVuZHMgSUFTRE9iamVjdAoteyAgCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIAotCXB1YmxpYyBDb21tYW5kIGdldFNldE5hbWVDb21tYW5kKFN0cmluZyBuZXdOYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzMjhjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU9wZXJhdGlvbiBleHRlbmRzIElOYW1lZE9iamVjdAotewotCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCk7Ci0JcHVibGljIElJbnRlcmZhY2UgZ2V0T3duZXJJbnRlcmZhY2UoKTsKLSAgCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkSW5wdXRDb21tYW5kKCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0QWRkT3V0cHV0Q29tbWFuZCgpOwotICAvLyBUT0RPOiBybWFoOiBXZSBuZWVkIHRvIHJldmlzaXQgdGhpcyAoU2VuZGluZyBpbiBhbiBleGlzdGluZyBGYXVsdEltcGwgd2hlbiB3ZSB3YW50IHRvCi0gIC8vIGFkZCBhIEZhdWx0IFBhcmFtZXRlci4gIFdoYXQgZG8gd2UgcmVhbGx5IHdhbnQgdG8gZG8gd2hlbiB3ZSBhZGQgYQotICAvLyAnbmV3IEZhdWx0Jy4uLi4gVGhpcyBhbHNvIHJlbGF0ZXMgdG8gd2hhdCB3ZSByZWFsbHkgd2FudCB0byBkbyB3aGVuIHdlIGRlbGV0ZSBhIEZhdWx0Li4uCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkRmF1bHRDb21tYW5kKE9iamVjdCBmYXVsdCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0UmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZChJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2libGluZywgSU1lc3NhZ2VSZWZlcmVuY2UgcmlnaHRTaWJsaW5nLCBJTWVzc2FnZVJlZmVyZW5jZSBtb3ZpbmdNZXNzYWdlUmVmKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lQYXJhbWV0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lQYXJhbWV0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBjZThhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JUGFyYW1ldGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi0KLS8vIHRoaXMgY2xhc3MgaXMgdXNlZCB0byBkZXNjcmliZSBpbiBzaW1wbGlmaWVkIGRlc2NyaXRwaW9uIG9mIHRoZSBpbnB1dC9vdXRwdXQvZmF1bHQgc3RydWN0dXJlCi0vLyBpbiB0aGUgZmFtaWxpYXIgc3R5bGUgb2YgYSB0eXBpY2FsIHByb2dyYW1taW5nIGxhbmd1YWdlIHBhcmFtZXRlciBlLmcuICJTdHJpbmdbXSBmb28iCi0vLyAKLS8vIG9mdGVuIHRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbXBsaWZpY2F0aW9uIG9mIGEgbW9yZSBjb21wbGV4IHNlcnZpY2UgZGVzY3JpcHRpb24gb3Igc2NoZW1hCi0vLyB0aGlzIGNsYXNzIHNlcnZlcyBjb21tb24gZGVub21pbmF0b3IgdG8gZHJpdmUgYSBzaW1wbGUgdmlldyBvZiBhbiBvcGVyYXRpb24ncyBtZXNzYWdlIHN0cnVjdHVyZQotLy8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZWRpdG9ycyBjYW4gY2hvb3NlIHRvIHByb3ZpZGUgJ2FkdmFuY2VkJyB2aWV3cyB0aGF0IGRlbHZlIGludG8gYWRkaXRpb24gZGV0YWlscwotLy8gb2YgYSBNZXNzYWdlIHN0cnVjdHVyZQotcHVibGljIGludGVyZmFjZSBJUGFyYW1ldGVyIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17Ci0JcHVibGljIE9iamVjdCBnZXRPd25lcigpOwotLy8gIFN0cmluZyBnZXRLaW5kKCk7Ci0JcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCk7Ci0JcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lUXVhbGlmaWVyKCk7Ci0JCi0JLy8gVE9ETzogcm1haDogRG8gdGhlc2Ugc3RyaW5ncyBiZWxvbmcgaGVyZT8/PwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVF9ORVdfQUNUSU9OX0lEID0gIlNldFR5cGVBY3Rpb25fQWRkVHlwZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRUxFQ1RfRVhJU1RJTkdfQUNUSU9OX0lEID0gIlNldFR5cGVBY3Rpb25fRXhpc3RpbmdUeXBlIjsgLy8kTk9OLU5MUy0xJAotICAKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRUeXBlQ29tbWFuZChTdHJpbmcgYWN0aW9uSWQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNDg3ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNlcnZpY2UgZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsgIAotCXB1YmxpYyBMaXN0IGdldEVuZFBvaW50cygpOwotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZEVuZFBvaW50Q29tbWFuZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OTczMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVR5cGUgZXh0ZW5kcyBJTmFtZWRPYmplY3QgewotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCXB1YmxpYyBDb21tYW5kIGdldERlbGV0ZUNvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvbWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiNWU4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1fVUlfVEFCX0dSQVBIPURlc2lnbgotX1VJX1RBQl9TT1VSQ0U9U291cmNlCi1fVUlfQlVUVE9OX05FVz1OZXcuLi4KLV9VSV9MQUJFTF9SRUFEX09OTFk9cmVhZC1vbmx5Ci1fVUlfTEFCRUxfTkFNRVNQQUNFPU5hbWVzcGFjZQotX1VJX0xBQkVMX1BPUlRUWVBFPVBvcnRUeXBlCi1fVUlfTEFCRUxfTE9DQVRJT049TG9jYXRpb24KLV9VSV9MQUJFTF9BRERSRVNTPUFkZHJlc3MKLV9VSV9MQUJFTF9CSU5ESU5HPUJpbmRpbmcKLV9VSV9MQUJFTF9QUkVGSVg9UHJlZml4Ci1fVUlfTEFCRUxfTkFNRT1OYW1lCi1fVUlfTEFCRUxfVFlQRT1UeXBlCi1fVUlfQUNUSU9OX0FERF9TRVJWSUNFPUFkZCBTZXJ2aWNlCi1fVUlfQUNUSU9OX0FERF9NRVNTQUdFPUFkZCBNZXNzYWdlCi1fVUlfQUNUSU9OX0FERF9PUEVSQVRJT049QWRkIE9wZXJhdGlvbgotX1VJX0FDVElPTl9BRERfSU1QT1JUPUFkZCBJbXBvcnQKLV9VSV9BQ1RJT05fQUREX09VVFBVVD1BZGQgT3V0cHV0Ci1fVUlfQUNUSU9OX0FERF9GQVVMVD1BZGQgRmF1bHQKLV9VSV9BQ1RJT05fQUREX1BPUlQ9QWRkIFBvcnQKLV9VSV9BQ1RJT05fQUREX1BPUlRUWVBFPUFkZCBQb3J0VHlwZQotX1VJX0FDVElPTl9ERUxFVEU9RGVsZXRlCi1fVUlfQlVUVE9OX0JST1dTRT1Ccm93c2UuLi4KLV9VSV9BQ1RJT05fTkVXX1BPUlRUWVBFPU5ldyBQb3J0VHlwZS4uLgotX1VJX0FDVElPTl9ORVdfQklORElORz1OZXcgQmluZGluZy4uLgotX1VJX0FDVElPTl9FWElTVElOR19QT1JUVFlQRT1FeGlzdGluZyBQb3J0VHlwZS4uLgotX1VJX0dFTkVSQVRFX0JJTkRJTkdfQ09OVEVOVD1HZW5lcmF0ZSBCaW5kaW5nIENvbnRlbnQuLi4KLV9VSV9BQ1RJT05fRVhJU1RJTkdfQklORElORz1FeGlzdGluZyBCaW5kaW5nLi4uCi1fVUlfTEFCRUxfQklORElOR19QUk9UT0NPTD1Qcm90b2NvbAotX1VJX0xBQkVMX1RBUkdFVF9OQU1FU1BBQ0U9VGFyZ2V0IG5hbWVzcGFjZQotX1VJX0FDVElPTl9BRERfQklORElORz1BZGQgQmluZGluZwotX1VJX0FDVElPTl9BRERfU0NIRU1BPUFkZCBTY2hlbWEKLV9VSV9BQ1RJT05fQUREX0lOUFVUPUFkZCBJbnB1dAotX1VJX1NFQ1RJT05fQURWQU5DRURfQVRUUklCVVRFUz1BZHZhbmNlZAotCi1fVUlfQUNUSU9OX0VESVRfTkFNRVNQQUNFUyA9IEVkaXQgTmFtZXNwYWNlcy4uLgotX1VJX0FDVElPTl9PUEVOX1NDSEVNQT1PcGVuIFNjaGVtYQotX1VJX1RPT0xUSVBfUkVOQU1FX1JFRkFDVE9SPUNsaWNrIGhlcmUgdG8gaW52b2tlIHRoZSBSZW5hbWUgcmVmYWN0b3JpbmcuCi0KLV9VSV9MQUJFTF9SSUdIVF9DTElDS19UT19JTlNFUlRfQ09OVEVOVD1SaWdodCBtb3VzZSBjbGljayBoZXJlIHRvIGluc2VydCBjb250ZW50Ci1fVUlfQUNUSU9OX1NIT1dfUFJPUEVSVElFUz1TaG93IHByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9BU0RDb250ZW50T3V0bGluZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9BU0RDb250ZW50T3V0bGluZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1NTAwYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvQVNEQ29udGVudE91dGxpbmVQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNETXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgQVNEQ29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKLQlwcm90ZWN0ZWQgQVNETXVsdGlQYWdlRWRpdG9yIHdzZGxFZGl0b3I7Ci0JcHJvdGVjdGVkIElEZXNjcmlwdGlvbiBtb2RlbDsKLQlwcm90ZWN0ZWQgSVRyZWVDb250ZW50UHJvdmlkZXIgY29udGVudFByb3ZpZGVyOwotCXByb3RlY3RlZCBJTGFiZWxQcm92aWRlciBsYWJlbFByb3ZpZGVyOwotCXByb3RlY3RlZCBJTWVudUxpc3RlbmVyIG1lbnVMaXN0ZW5lcjsKLQkKLQlwdWJsaWMgQVNEQ29udGVudE91dGxpbmVQYWdlKEFTRE11bHRpUGFnZUVkaXRvciBlZGl0b3IsIElNZW51TGlzdGVuZXIgbWVudUxpc3RlbmVyKSB7Ci0JCXdzZGxFZGl0b3IgPSBlZGl0b3I7Ci0JCXRoaXMubWVudUxpc3RlbmVyID0gbWVudUxpc3RlbmVyOwotCX0KLQkKLQlwdWJsaWMgVHJlZVZpZXdlciBnZXRUcmVlVmlld2VyKCkgewotCQlyZXR1cm4gc3VwZXIuZ2V0VHJlZVZpZXdlcigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRDb250ZW50UHJvdmlkZXIoSVRyZWVDb250ZW50UHJvdmlkZXIgY29udGVudFByb3ZpZGVyKSB7Ci0JCXRoaXMuY29udGVudFByb3ZpZGVyID0gY29udGVudFByb3ZpZGVyOwotCX0JCi0JCi0JcHVibGljIHZvaWQgc2V0TGFiZWxQcm92aWRlcihJTGFiZWxQcm92aWRlciBsYWJlbFByb3ZpZGVyKSB7Ci0JCXRoaXMubGFiZWxQcm92aWRlciA9IGxhYmVsUHJvdmlkZXI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldE1vZGVsKElEZXNjcmlwdGlvbiBtb2RlbCkgewotCQl0aGlzLm1vZGVsID0gbW9kZWw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOyAgICAgICAgICAgICAgICAgCi0JCQotCQlnZXRUcmVlVmlld2VyKCkuc2V0Q29udGVudFByb3ZpZGVyKGNvbnRlbnRQcm92aWRlcik7Ci0JCWdldFRyZWVWaWV3ZXIoKS5zZXRMYWJlbFByb3ZpZGVyKGxhYmVsUHJvdmlkZXIpOwotCQlnZXRUcmVlVmlld2VyKCkuc2V0SW5wdXQobW9kZWwpOwotCQlnZXRUcmVlVmlld2VyKCkuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQkKLQkJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoIiNwb3B1cCIpOy8vJE5PTi1OTFMtMSQKLQkJbWVudU1hbmFnZXIuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOwotCQlNZW51IG1lbnUgPSBtZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShnZXRUcmVlVmlld2VyKCkuZ2V0Q29udHJvbCgpKTsKLQkJZ2V0VHJlZVZpZXdlcigpLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOwotCQltZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIobWVudUxpc3RlbmVyKTsKLQkJCi0JICAgIGdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KCJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5wb3B1cC5vdXRsaW5lIiwgbWVudU1hbmFnZXIsIHdzZGxFZGl0b3IuZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsgLy8kTk9OLU5MUy0xJAotCQkgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ2V0Q29udHJvbCgpLEFTREVkaXRvckNTSGVscElkcy5XU0RMX09VVExJTkVfVklFVyk7IAotCX0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzaW5nU2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7Ci0JCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJaWYgKCFwcm9jZXNzaW5nU2VsZWN0aW9uQ2hhbmdlKSB7Ci0JCQlwcm9jZXNzaW5nU2VsZWN0aW9uQ2hhbmdlID0gdHJ1ZTsKLQkJCXN1cGVyLnNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOwotCQkJT2JqZWN0IHNlbGVjdGlvbiA9IG51bGw7Ci0JCQkKLQkJCWlmICgoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCkgaW5zdGFuY2VvZiBFZGl0UGFydCl7Ci0JCQkJRWRpdFBhcnQgbmV3RWRpdFBhcnQgPSAoRWRpdFBhcnQpICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpKS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlzZWxlY3Rpb24gPSBuZXdFZGl0UGFydC5nZXRNb2RlbCgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2VsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpOwotCQkJfQotCQotCQkJaWYgKHNlbGVjdGlvbiAhPSBudWxsKSB7Ci0JCQkJc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbikpOwotCQkJfQotCQkJcHJvY2Vzc2luZ1NlbGVjdGlvbkNoYW5nZSA9IGZhbHNlOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9BU0RDb250ZW50T3V0bGluZVByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvQVNEQ29udGVudE91dGxpbmVQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2Q5MzBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9BU0RDb250ZW50T3V0bGluZVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU5hbWVkT2JqZWN0OwotCi1wdWJsaWMgY2xhc3MgQVNEQ29udGVudE91dGxpbmVQcm92aWRlciBpbXBsZW1lbnRzIElUcmVlQ29udGVudFByb3ZpZGVyLCBJTGFiZWxQcm92aWRlciwgSUFTRE9iamVjdExpc3RlbmVyIHsKLQlwcm90ZWN0ZWQgVmlld2VyIHZpZXdlcjsKLSAgICAKLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZAotICAgICAqLwotCXByb3RlY3RlZCBBU0RNdWx0aVBhZ2VFZGl0b3IgZWRpdG9yOwotCXByb3RlY3RlZCBMaXN0IGxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZAotICAgICAqLyAgICAKLQlwcm90ZWN0ZWQgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwotCi0gICAgcHVibGljIEFTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXIoKQotICAgIHsgICAgICAKLSAgICB9Ci0gICAgCi0JcHVibGljIEFTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXIoQVNETXVsdGlQYWdlRWRpdG9yIGVkaXRvciwgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKLSAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQl9Ci0JCi0JcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKE9iamVjdCBwYXJlbnRFbGVtZW50KSB7Ci0JCWlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQlJVHJlZUVsZW1lbnRbXSBraWRzID0gKChJVHJlZUVsZW1lbnQpIHBhcmVudEVsZW1lbnQpLmdldENoaWxkcmVuKCk7Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwga2lkcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQlhdHRhY2hMaXN0ZW5lcihraWRzW2luZGV4XSk7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBraWRzOwotCQl9Ci0KLQkJcmV0dXJuIG5ldyBPYmplY3RbMF07IAotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQlyZXR1cm4gKChJVHJlZUVsZW1lbnQpIGVsZW1lbnQpLmdldFBhcmVudCgpOwotCQl9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3QgZWxlbWVudCkgewotCQlpZiAoZ2V0Q2hpbGRyZW4oZWxlbWVudCkubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKLQkJcmV0dXJuIGdldENoaWxkcmVuKGlucHV0RWxlbWVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJdW5hdHRhY2hBbGxMaXN0ZW5lcnMoKTsKLQkJdmlld2VyID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpIHsKLQkJdGhpcy52aWV3ZXIgPSB2aWV3ZXI7Ci0JCXVuYXR0YWNoQWxsTGlzdGVuZXJzKCk7Ci0JfQotCi0JcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQlyZXR1cm4gKChJVHJlZUVsZW1lbnQpIGVsZW1lbnQpLmdldEltYWdlKCk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0gICAgCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCVN0cmluZyB0ZXh0ID0gbnVsbDsKLSAgICAgICAgIAotICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCkgeyAKLQkJCXRleHQgPSAgKChJTmFtZWRPYmplY3QpIGVsZW1lbnQpLmdldE5hbWUoKTsKLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0JCQl0ZXh0ID0gKChJVHJlZUVsZW1lbnQpIGVsZW1lbnQpLmdldFRleHQoKTsKLQkJfQotCQllbHNlIHsKLQkJCXRleHQgPSBlbGVtZW50LnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCWlmICh0ZXh0ID09IG51bGwpIHsKLQkJCXRleHQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCQotCQlyZXR1cm4gdGV4dDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0KLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYXR0YWNoTGlzdGVuZXIoT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgSUFTRE9iamVjdCAmJiAhbGlzdGVuZXJzLmNvbnRhaW5zKG9iamVjdCkpIHsKLQkJCSgoSUFTRE9iamVjdCkgb2JqZWN0KS5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotCQkJbGlzdGVuZXJzLmFkZChvYmplY3QpOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHVuYXR0YWNoQWxsTGlzdGVuZXJzKCkgewotCQlJdGVyYXRvciBpdCA9IGxpc3RlbmVycy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3QgaXRlbSA9IGl0Lm5leHQoKTsKLQkJCSgoSUFTRE9iamVjdCkgaXRlbSkudW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkgeyAgICAgICAgICAgICAKLQkJaWYgKHZpZXdlciBpbnN0YW5jZW9mIFRyZWVWaWV3ZXIpIHsKLQkJCVRyZWVWaWV3ZXIgdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKSB2aWV3ZXI7Ci0JCQl0cmVlVmlld2VyLnJlZnJlc2gob2JqZWN0KTsKLQkJCXRyZWVWaWV3ZXIucmV2ZWFsKG9iamVjdCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0lDYXRlZ29yeUFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9JQ2F0ZWdvcnlBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwM2Q4MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0lDYXRlZ29yeUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotCi1wdWJsaWMgaW50ZXJmYWNlIElDYXRlZ29yeUFkYXB0ZXIgewotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0lUcmVlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0lUcmVlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWEyZDczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9JVHJlZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLQotcHVibGljIGludGVyZmFjZSBJVHJlZUVsZW1lbnQgewotICBwdWJsaWMgZmluYWwgc3RhdGljIElUcmVlRWxlbWVudFtdIEVNUFRZX0xJU1QgPSB7fTsKLSAgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKTsKLSAgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpOwotICBib29sZWFuIGhhc0NoaWxkcmVuKCk7Ci0gIFN0cmluZyBnZXRUZXh0KCk7Ci0gIEltYWdlIGdldEltYWdlKCk7Ci0gIEltYWdlIGdldFNlY29uZGFyeUltYWdlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQVNEQWJzdHJhY3RTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQVNEQWJzdHJhY3RTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YTc3NmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0FTREFic3RyYWN0U2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5GaWxlU3RvcmVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklTZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLQotcHVibGljIGNsYXNzIEFTREFic3RyYWN0U2VjdGlvbiBpbXBsZW1lbnRzIElTZWN0aW9uLCBJQVNET2JqZWN0TGlzdGVuZXIsIExpc3RlbmVyLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotCXByaXZhdGUgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeTsKLQlwcml2YXRlIE9iamVjdCBlbGVtZW50TW9kZWw7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gaXNSZWFkT25seSA9IGZhbHNlOwotCXByb3RlY3RlZCBDb21wb3NpdGUgY29tcG9zaXRlOwotCXByb3RlY3RlZCBpbnQgcmlnaHRNYXJnaW5TcGFjZTsKLQlwcm90ZWN0ZWQgaW50IHRhYmxlTWluaW11bVdpZHRoID0gNTA7Ci0JcHJvdGVjdGVkIEN1c3RvbUxpc3RlbmVyIGN1c3RvbUxpc3RlbmVyID0gbmV3IEN1c3RvbUxpc3RlbmVyKCk7Ci0JCi0JcHJvdGVjdGVkIExpc3QgbGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlIHRhYmJlZFByb3BlcnR5U2hlZXRQYWdlKQotCXsKLQkJY3JlYXRlQ29udHJvbHMocGFyZW50LCB0YWJiZWRQcm9wZXJ0eVNoZWV0UGFnZS5nZXRXaWRnZXRGYWN0b3J5KCkpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgYUZhY3RvcnkpCi0JewotCQl0aGlzLmZhY3RvcnkgPSBhRmFjdG9yeTsKLQkJR0MgZ2MgPSBuZXcgR0MocGFyZW50KTsKLQkJUG9pbnQgZXh0ZW50ID0gZ2MudGV4dEV4dGVudCgiICAuLi4gICIpOyAvLyROT04tTkxTLTEkCi0JCXJpZ2h0TWFyZ2luU3BhY2UgPSBleHRlbnQueDsKLQkJZ2MuZGlzcG9zZSgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jc2V0SW5wdXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQsIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJbnB1dChJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCUFzc2VydC5pc1RydWUoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pOwotCQlPYmplY3QgaW5wdXQgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCWVsZW1lbnRNb2RlbCA9IGlucHV0OwotCQlhdHRhY2hMaXN0ZW5lcihlbGVtZW50TW9kZWwpOwotCQkKLQkJaWYgKGlucHV0IGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkJaXNSZWFkT25seSA9ICgoSUFTRE9iamVjdCkgaW5wdXQpLmlzUmVhZE9ubHkoKTsKLQkJfQotCi0JCUlFZGl0b3JQYXJ0IG93bmluZ0VkaXRvciA9IG51bGw7Ci0gICAgaWYgKHBhcnQhPW51bGwpIHsKLSAgICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgSUVkaXRvclBhcnQpIHsKLSAgICAgICAgb3duaW5nRWRpdG9yID0gKElFZGl0b3JQYXJ0KXBhcnQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0gICAgICAgIGlmICh3b3JrYmVuY2ggIT0gbnVsbCkgewotICAgICAgICAgIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgICAgICAgIGlmICh3aW5kb3cgIT0gbnVsbCkgewotICAgICAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgICAgICBpZiAocGFnZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgIG93bmluZ0VkaXRvciA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChvd25pbmdFZGl0b3IgIT0gbnVsbCkgewotICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gb3duaW5nRWRpdG9yLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICBpZiAoIShlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgfHwgZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlU3RvcmVFZGl0b3JJbnB1dCkpIHsKLSAgICAgICAgaXNSZWFkT25seSA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotCQlyZWZyZXNoKCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JU2VjdGlvbiNhYm91dFRvQmVTaG93bigpCi0JICovCi0JcHVibGljIHZvaWQgYWJvdXRUb0JlU2hvd24oKQotCXsKLQkJcmVmcmVzaCgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jYWJvdXRUb0JlSGlkZGVuKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhYm91dFRvQmVIaWRkZW4oKQotCXsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklTZWN0aW9uI2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQkJdW5hdHRhY2hBbGxMaXN0ZW5lcnMoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklTZWN0aW9uI2dldE1pbmltdW1IZWlnaHQoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0TWluaW11bUhlaWdodCgpCi0JewotCQlyZXR1cm4gU1dULkRFRkFVTFQ7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JU2VjdGlvbiNzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQl7Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jcmVmcmVzaCgpCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpCi0JewotCQlpZiAoIWNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpCi0JCXsKLQkJCWlmIChpc1JlYWRPbmx5KQotCQkJewotCQkJCWNvbXBvc2l0ZS5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQljb21wb3NpdGUuc2V0RW5hYmxlZCh0cnVlKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHdpZGdldCBmYWN0b3J5LgotCSAqIEByZXR1cm4gdGhlIHdpZGdldCBmYWN0b3J5LgotCSAqLwotCXB1YmxpYyBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBnZXRXaWRnZXRGYWN0b3J5KCkgewotCQlyZXR1cm4gZmFjdG9yeTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkKLQl7Ci0JCXJlZnJlc2goKTsKLQl9Ci0JCi0JCi0JcHVibGljIHZvaWQgZG9XaWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7fQotCQotCXB1YmxpYyB2b2lkIGRvV2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7fQotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQpCi0JICovCi0JcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJewotCQkJaXNJbkRvSGFuZGxlID0gdHJ1ZTsKLQkJCWRvV2lkZ2V0RGVmYXVsdFNlbGVjdGVkKGUpOwotCQkJaXNJbkRvSGFuZGxlID0gZmFsc2U7Ci0JCX0KLQkJCi0JfQotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCXsKLQkJaWYgKGlzTGlzdGVuZXJFbmFibGVkKCkgJiYgIWlzSW5Eb0hhbmRsZSkgCi0JCXsKLQkJCWlzSW5Eb0hhbmRsZSA9IHRydWU7Ci0JCQlkb1dpZGdldFNlbGVjdGVkKGUpOwotCQkJaXNJbkRvSGFuZGxlID0gZmFsc2U7Ci0JCX0KLQkJCi0JfQotCQotCWJvb2xlYW4gbGlzdGVuZXJFbmFibGVkID0gdHJ1ZTsKLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIGxpc3RlbmVyRW5hYmxlZC4KLQkgKiBAcmV0dXJuIHZhbHVlIG9mIGxpc3RlbmVyRW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0xpc3RlbmVyRW5hYmxlZCgpIAotCXsKLQkJcmV0dXJuIGxpc3RlbmVyRW5hYmxlZDsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgYXBwbHlUZXh0TGlzdGVuZXJzKENvbnRyb2wgY29udHJvbCkKLSAgICB7Ci0gICAgICBjb250cm9sLmFkZExpc3RlbmVyKFNXVC5Gb2N1c091dCwgY3VzdG9tTGlzdGVuZXIpOwotICAgICAgY29udHJvbC5hZGRMaXN0ZW5lcihTV1QuS2V5RG93biwgY3VzdG9tTGlzdGVuZXIpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcnMoQ29udHJvbCBjb250cm9sKQotICAgIHsKLSAgICAgIGNvbnRyb2wucmVtb3ZlTGlzdGVuZXIoU1dULkZvY3VzT3V0LCBjdXN0b21MaXN0ZW5lcik7Ci0gICAgICBjb250cm9sLnJlbW92ZUxpc3RlbmVyKFNXVC5LZXlEb3duLCBjdXN0b21MaXN0ZW5lcik7Ci0gICAgfQotCQotCS8qKgotCSAqIFNldCB0aGUgdmFsdWUgb2YgbGlzdGVuZXJFbmFibGVkLgotCSAqIEBwYXJhbSB2ICBWYWx1ZSB0byBhc3NpZ24gdG8gbGlzdGVuZXJFbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldExpc3RlbmVyRW5hYmxlZChib29sZWFuICB2KSAKLQl7Ci0JCXRoaXMubGlzdGVuZXJFbmFibGVkID0gdjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJewotCQkJaXNJbkRvSGFuZGxlID0gdHJ1ZTsKLS8vCQkJc3RhcnREZWxheWVkRXZlbnQoZXZlbnQpOwotCQkJZG9IYW5kbGVFdmVudChldmVudCk7Ci0JCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJfSAvLyBlbmQgb2YgaWYgKCkKLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9IYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCQotCX0KLQkKLQlwcm90ZWN0ZWQgRGVsYXllZEV2ZW50IGRlbGF5ZWRUYXNrOwotCQotCXByb3RlY3RlZCB2b2lkIHN0YXJ0RGVsYXllZEV2ZW50KEV2ZW50IGUpCi0JewotCQlpZiAoZGVsYXllZFRhc2sgPT0gbnVsbCB8fAotCQkJCWRlbGF5ZWRUYXNrLmdldEV2ZW50KCkgPT0gbnVsbCkKLQkJewotCQkJZGVsYXllZFRhc2sgPSBuZXcgRGVsYXllZEV2ZW50KCk7Ci0JCQlkZWxheWVkVGFzay5zZXRFdmVudChlKTsKLQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnRpbWVyRXhlYyg1MDAsZGVsYXllZFRhc2spOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJRXZlbnQgZGVsYXllZEV2ZW50ID0gZGVsYXllZFRhc2suZ2V0RXZlbnQoKTsKLQkJCQotCQkJaWYgKGUud2lkZ2V0ID09IGRlbGF5ZWRFdmVudC53aWRnZXQgJiYKLQkJCQkJZS50eXBlID09IGRlbGF5ZWRFdmVudC50eXBlKQotCQkJewotCQkJCS8vIHNhbWUgZXZlbnQsIGp1c3QgZGlmZmVyZW50IGRhdGEsIGRlbGF5IG5ldyBldmVudAotCQkJCWRlbGF5ZWRUYXNrLnNldEV2ZW50KG51bGwpOwotCQkJfQotCQkJZGVsYXllZFRhc2sgPSBuZXcgRGVsYXllZEV2ZW50KCk7Ci0JCQlkZWxheWVkVGFzay5zZXRFdmVudChlKTsKLQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnRpbWVyRXhlYyg1MDAsZGVsYXllZFRhc2spOwotCQl9Ci0JfQotCQotCWNsYXNzIERlbGF5ZWRFdmVudCBpbXBsZW1lbnRzIFJ1bm5hYmxlCi0JewotCQlwcm90ZWN0ZWQgRXZlbnQgZXZlbnQ7Ci0JCQotCQkvKgotCQkgKiBAc2VlIFJ1bm5hYmxlI3J1bigpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBydW4oKQotCQl7Ci0JCQlpZiAoZXZlbnQgIT0gbnVsbCkKLQkJCXsKLQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCWRvSGFuZGxlRXZlbnQoZXZlbnQpOwotCQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQkJCWV2ZW50ID0gbnVsbDsKLQkJCX0KLQkJfQotCQkKLQkJLyoqCi0JCSAqIEdldHMgdGhlIGV2ZW50LgotCQkgKiBAcmV0dXJuIFJldHVybnMgYSBFdmVudAotCQkgKi8KLQkJcHVibGljIEV2ZW50IGdldEV2ZW50KCkKLQkJewotCQkJcmV0dXJuIGV2ZW50OwotCQl9Ci0JCQotCQkvKioKLQkJICogU2V0cyB0aGUgZXZlbnQuCi0JCSAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gc2V0Ci0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRFdmVudChFdmVudCBldmVudCkKLQkJewotCQkJdGhpcy5ldmVudCA9IGV2ZW50OwotCQl9Ci0JCQotCX0KLQkgICAKLSAgICBjbGFzcyBDdXN0b21MaXN0ZW5lciBpbXBsZW1lbnRzIExpc3RlbmVyCi0gICAgewotICAgICAgYm9vbGVhbiBpc0hhbmRsaW5nRXZlbnQgPSBmYWxzZTsKLSAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNSZWFkT25seSkgCi0gICAgICAgIHsKLSAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTV1QuS2V5RG93biA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChldmVudC5jaGFyYWN0ZXIgPT0gU1dULkNSKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0hhbmRsaW5nRXZlbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaXNIYW5kbGluZ0V2ZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIGRvSGFuZGxlRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgICAgICAgaXNIYW5kbGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTV1QuRm9jdXNPdXQgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWlzSGFuZGxpbmdFdmVudCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlzSGFuZGxpbmdFdmVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZG9IYW5kbGVFdmVudChldmVudCk7Ci0gICAgICAgICAgICAgICAgaXNIYW5kbGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzSW5Eb0hhbmRsZTsKLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIGlzSW5Eb0hhbmRsZS4KLQkgKiBAcmV0dXJuIHZhbHVlIG9mIGlzSW5Eb0hhbmRsZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0luRG9IYW5kbGUoKSAKLQl7Ci0JCXJldHVybiBpc0luRG9IYW5kbGU7Ci0JfQotCQotCXN0YXRpYyBwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGdldFN0YXR1c0xpbmVNYW5hZ2VyKElFZGl0b3JQYXJ0IGVkaXRvclBhcnQpCi0JeyAKLQkJSVN0YXR1c0xpbmVNYW5hZ2VyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeQotCQl7ICAgICAgICAgICAgICAgICAgICAgICAKLQkJCUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yIGNvbnRyaWJ1dG9yID0gKEVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yKWVkaXRvclBhcnQuZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7Ci0JCQlyZXN1bHQgPSBjb250cmlidXRvci5nZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJfSAgCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TW9kZWwoKSB7Ci0JCXJldHVybiBlbGVtZW50TW9kZWw7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGF0dGFjaExpc3RlbmVyKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElBU0RPYmplY3QgJiYgIWxpc3RlbmVycy5jb250YWlucyhvYmplY3QpKSB7Ci0JCQkoKElBU0RPYmplY3QpIG9iamVjdCkucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLQkJCWxpc3RlbmVycy5hZGQob2JqZWN0KTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCB1bmF0dGFjaEFsbExpc3RlbmVycygpIHsKLQkJSXRlcmF0b3IgaXQgPSBsaXN0ZW5lcnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCQkoKElBU0RPYmplY3QpIGl0ZW0pLnVucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKENvbnRyb2wgY29udHJvbCkgewotCQlpZiAoY29udHJvbCAhPSBudWxsKSB7Ci0JCQlpZiAoaXNSZWFkT25seSkgewotCQkJCWNvbnRyb2wuc2V0Rm9yZWdyb3VuZChEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWNvbnRyb2wuc2V0Rm9yZWdyb3VuZChEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMubGFiZWxDb2xvcik7Ci0JCQl9Ci0JCX0KLQl9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZUNvbW1hbmQoQ29tbWFuZCBjb21tYW5kKSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpICE9IG51bGwgJiYgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0gICAgICAgICAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29tbWFuZC5leGVjdXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9BU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWY2NWQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9BU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlTaGVldFBhZ2VDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZTsKLQotcHVibGljIGNsYXNzIEFTRFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlIGV4dGVuZHMgVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyLy8sIElFbGVtZW50TGlzdGVuZXIKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSB0YWJiZWRQcm9wZXJ0eVNoZWV0UGFnZUNvbnRyaWJ1dG9yCi0gICAqLwotICBwdWJsaWMgQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UoSVRhYmJlZFByb3BlcnR5U2hlZXRQYWdlQ29udHJpYnV0b3IgdGFiYmVkUHJvcGVydHlTaGVldFBhZ2VDb250cmlidXRvcikKLSAgewotICAgIHN1cGVyKHRhYmJlZFByb3BlcnR5U2hlZXRQYWdlQ29udHJpYnV0b3IpOwotLy8gICAgdGFiQ29udHJpYnV0b3IgPSB0YWJiZWRQcm9wZXJ0eVNoZWV0UGFnZUNvbnRyaWJ1dG9yOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLSAgCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKLSAgfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKCFldmVudC5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkpIHsKLQkJCXNlbGVjdGlvbkNoYW5nZWQoZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCksIGV2ZW50LmdldFNlbGVjdGlvbigpKTsKLQkJICAgIC8vc3VwZXIuc2VsZWN0aW9uQ2hhbmdlZChnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKSwgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOwotCQl9Ci0JfQotICAKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9CaW5kaW5nU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0JpbmRpbmdTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOTAwZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0JpbmRpbmdTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRFNldE5ld0ludGVyZmFjZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ1NlY3Rpb24gZXh0ZW5kcyBSZWZlcmVuY2VTZWN0aW9uIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIgewotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyOwotCXByaXZhdGUgQ0xhYmVsIHByb3RvY29sVmFsdWU7Ci0vLwlwcml2YXRlIENMYWJlbCBvcHRpb25zVmFsdWU7Ci0JcHJpdmF0ZSBCdXR0b24gcmVnZW5CaW5kaW5nQnV0dG9uOwotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpIHsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQkJY29tYm9MYWJlbC5zZXRUZXh0KG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlcy5fVUlfTEFCRUxfUE9SVFRZUEUgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCi0JCUNMYWJlbCBwcm90b2NvbExhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MKTsKLQkJcHJvdG9jb2xWYWx1ZT0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJLy8gTGF5b3V0IHByb3RvY29sTGFiZWwKLQkJRm9ybURhdGEgZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvdG9jb2xWYWx1ZSwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm90b2NvbFZhbHVlLCAwLCBTV1QuQ0VOVEVSKTsKLQkJcHJvdG9jb2xMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJLy8gTGF5b3V0IHByb3RvY29sVmFsdWUKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbWJvLCAwKTsKLS8vCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21ibywgK0lUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5WU1BBQ0UpOwotCQlwcm90b2NvbFZhbHVlLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQkvKgotCQlDTGFiZWwgb3B0aW9uc0xhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLmdldFN0cmluZygiX1VJX1RJVExFX09QVElPTlMiKSArICI6Iik7Ci0JCW9wdGlvbnNWYWx1ZSA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCAiIik7Ci0JCQotCQkvLyBMYXlvdXQgb3B0aW9uc0xhYmVsCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG9wdGlvbnNWYWx1ZSwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChvcHRpb25zVmFsdWUsIDAsIFNXVC5DRU5URVIpOwotCQlvcHRpb25zTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCS8vIExheW91dCBvcHRpb25zVmFsdWUKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3RvY29sVmFsdWUsIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLS8vCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm90b2NvbFZhbHVlLCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCW9wdGlvbnNWYWx1ZS5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJU3RyaW5nIGJ1dHRvbkxhYmVsID0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzLmdldFN0cmluZygiX1VJX0dFTkVSQVRFX0JJTkRJTkdfQ09OVEVOVCIpOwotCQlyZWdlbkJpbmRpbmdCdXR0b24gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQnV0dG9uKGNvbXBvc2l0ZSwgYnV0dG9uTGFiZWwsIFNXVC5QVVNIKTsKLQotCQkvLyBMYXlvdXQgYnV0dG9uCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotLy8JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQob3B0aW9uc1ZhbHVlLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG9wdGlvbnNMYWJlbCwgMCk7Ci0JCXJlZ2VuQmluZGluZ0J1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkqLwotCi0JCVN0cmluZyBidXR0b25MYWJlbCA9IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlcy5fVUlfR0VORVJBVEVfQklORElOR19DT05URU5UOwotCQlyZWdlbkJpbmRpbmdCdXR0b24gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQnV0dG9uKGNvbXBvc2l0ZSwgYnV0dG9uTGFiZWwsIFNXVC5QVVNIKTsKLQotCQkvLyBMYXlvdXQgYnV0dG9uCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotLy8JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQob3B0aW9uc1ZhbHVlLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3RvY29sTGFiZWwsIDApOwotCQlyZWdlbkJpbmRpbmdCdXR0b24uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQlyZWdlbkJpbmRpbmdCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCQotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByb3RvY29sVmFsdWUsIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX0JJTkRJTkdfUFJPVE9DT0xfVEVYVCk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVnZW5CaW5kaW5nQnV0dG9uLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19CSU5ESU5HX0dFTl9CSU5ESU5HX0JVVFRPTik7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX0JJTkRJTkdfUE9SVFRZUEVfQ09NQk8pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQlzdXBlci5yZWZyZXNoKCk7Ci0JCUlCaW5kaW5nIGJpbmRpbmcgPSBnZXRJQmluZGluZygpOwotCQlTdHJpbmcgcHJvdG9jb2wgPSBiaW5kaW5nLmdldFByb3RvY29sKCk7Ci0JCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCUNvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lKHByb3RvY29sKTsKLQkJaWYgKGV4dCAhPSBudWxsKSB7Ci0JCSAgcHJvdG9jb2wgPSBleHQuZ2V0TGFiZWwoKTsKLQkJfQotCi0JCWlmIChwcm90b2NvbCA9PSBudWxsIHx8IHByb3RvY29sLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJcHJvdG9jb2wgPSAiLS0tLSI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlwcm90b2NvbFZhbHVlLnNldFRleHQocHJvdG9jb2wpOwotCi0vLwkJb3B0aW9uc1ZhbHVlLnNldFRleHQoIiIpOwotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKSB7Ci0JCWlmIChyZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCXJldHVybiByZWZNYW5hZ2VyOwotCQl9Ci0KLQkJcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKChJQVNET2JqZWN0KSBnZXRNb2RlbCgpKTsKLQkJCi0JCXJldHVybiByZWZNYW5hZ2VyOwotCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldENvbWJvSXRlbXMoKSB7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIG1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkKLQkJTGlzdCBpdGVtcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJaXRlbXMuYWRkKEJST1dTRV9TVFJJTkcpOwotCQlpdGVtcy5hZGQoTkVXX1NUUklORyk7Ci0KLQkJaWYgKG1hbmFnZXIgIT0gbnVsbCkgewotICAJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBjb21ib0l0ZW1zID0gbWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgY29tYm9JdGVtcy5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIGl0ZW1zLmFkZChjb21ib0l0ZW1zW2luZGV4XSk7Ci0gICAgICB9Ci0JCX0KLQkJcmV0dXJuIGl0ZW1zOwotCX0KLQotCXByb3RlY3RlZCBPYmplY3QgZ2V0Q3VycmVudENvbWJvSXRlbSgpIHsKLQkJSUJpbmRpbmcgYmluZGluZyA9IGdldElCaW5kaW5nKCk7Ci0JCXJldHVybiBiaW5kaW5nLmdldEludGVyZmFjZSgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0Q29tYm9JdGVtTmFtZShPYmplY3QgaXRlbSkgewotCQlTdHJpbmcgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCWlmIChpdGVtIGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCQkJbmFtZSA9ICgoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgaXRlbSkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBJSW50ZXJmYWNlKSB7Ci0JCQluYW1lID0gKChJSW50ZXJmYWNlKSBpdGVtKS5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJbmFtZSA9IChTdHJpbmcpIGl0ZW07Ci0JCX0KLQkJCi0JCXJldHVybiBuYW1lOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1Db21ib1NlbGVjdGlvbihPYmplY3QgaXRlbSkgewotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBudWxsOwotCQkKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JCQlzcGVjID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGl0ZW07Ci0JCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBtYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCW1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKChJQmluZGluZykgZ2V0TW9kZWwoKSwgc3BlYyk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJaWYgKGl0ZW0uZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJCQlBU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbiBhY3Rpb24gPSBuZXcgQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24ocGFydCk7Ci0JCQkJYWN0aW9uLnNldElCaW5kaW5nKChJQmluZGluZykgZ2V0TW9kZWwoKSk7Ci0JCQkJYWN0aW9uLnJ1bigpOwotCQkJfQotCQkJZWxzZSBpZiAoaXRlbS5lcXVhbHMoTkVXX1NUUklORykpIHsKLQkJCQlJV29ya2JlbmNoUGFydCBwYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOwotCQkJCUFTRFNldE5ld0ludGVyZmFjZUFjdGlvbiBhY3Rpb24gPSBuZXcgQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uKHBhcnQpOwotCQkJCWFjdGlvbi5zZXRJQmluZGluZygoSUJpbmRpbmcpIGdldE1vZGVsKCkpOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCX0KLQkJfQotCi0JCXJlZnJlc2goKTsKLQl9Ci0KLQlwcml2YXRlIElCaW5kaW5nIGdldElCaW5kaW5nKCkgewotCQlyZXR1cm4gKElCaW5kaW5nKSBnZXRNb2RlbCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCWlmIChlLndpZGdldCA9PSByZWdlbkJpbmRpbmdCdXR0b24pIHsKLQkJCUNvbW1hbmQgY29tbWFuZCA9IGdldElCaW5kaW5nKCkuZ2V0R2VuZXJhdGVCaW5kaW5nQ29tbWFuZCgpOwotCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9XaWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9Eb2N1bWVudGF0aW9uU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0RvY3VtZW50YXRpb25TZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NjJjOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0RvY3VtZW50YXRpb25TZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFkZEVsZW1lbnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRhdGlvblNlY3Rpb24gZXh0ZW5kcyBBU0RBYnN0cmFjdFNlY3Rpb24gewotCVRleHQgZG9jVGV4dDsKLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0JCWNvbXBvc2l0ZSA9CWdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVGbGF0Rm9ybUNvbXBvc2l0ZShwYXJlbnQpOwotCi0JCWRvY1RleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiLCBTV1QuTVVMVEkgfCBTV1QuTk9ORSB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7IC8vJE5PTi1OTFMtMSQKLQkJZG9jVGV4dC5hZGRMaXN0ZW5lcihTV1QuS2V5RG93biwgdGhpcyk7Ci0JCUZvcm1EYXRhIGRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOwotCQlkb2NUZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZG9jVGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfRE9DVU1FTlRBVElPTl9UQUIpOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCS8qCi0JICogVE9ETzogdGhlIGRvSGFuZGxlRXZlbnQoKSBhbmQgcmVmcmVzaCgpIG1ldGhvZHMgYm90aCB1c2UgV1NETDExIHNwZWNpZmljCi0JICoga25vd2xlZGdlLiAgVGhpcyBjbGFzcyAoRG9jdW1lbnRhdGlvblNlY3Rpb24pIHNob3VsZCBiZSBnZW5lcmljLiAgSW4gUG9zdCAxLjUsCi0JICogd2UgbmVlZCB0byBhZGQgZG9jdW1lbnRhdGlvbiBzdXBwb3J0IG1ldGhvZHMgdG8gb3VyIGZhY2FkZSBzbyB3ZSBkb24ndCBuZWVkCi0JICogdG8ga25vdyBXU0RMIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLi4uLi4uLiAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkKLQl7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJaWYgKGRvY1RleHQuaXNGb2N1c0NvbnRyb2woKSkKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCWRvY1RleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGdldE1vZGVsKCkgIT0gbnVsbCAmJiBnZXRFbGVtZW50KCkgIT0gbnVsbCkKLQkJewotCQkJRWxlbWVudCBkb2NOb2RlID0gZ2V0RWxlbWVudCgpLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0JCQlpZiAoZG9jTm9kZSAhPSBudWxsKQotCQkJewotCQkJCU5vZGUgdGV4dE5vZGUgPSBkb2NOb2RlLmdldEZpcnN0Q2hpbGQoKTsKLQkJCQlpZiAodGV4dE5vZGUgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCVN0cmluZyBkb2NWYWx1ZSA9IHRleHROb2RlLmdldE5vZGVWYWx1ZSgpOwotCQkJCQlpZiAoZG9jVmFsdWUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJZG9jVGV4dC5zZXRUZXh0KGRvY1ZhbHVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCi0JLyoKLQkgKiBUT0RPOiB0aGUgZG9IYW5kbGVFdmVudCgpIGFuZCByZWZyZXNoKCkgbWV0aG9kcyBib3RoIHVzZSBXU0RMMTEgc3BlY2lmaWMKLQkgKiBrbm93bGVkZ2UuICBUaGlzIGNsYXNzIChEb2N1bWVudGF0aW9uU2VjdGlvbikgc2hvdWxkIGJlIGdlbmVyaWMuICBJbiBQb3N0IDEuNSwKLQkgKiB3ZSBuZWVkIHRvIGFkZCBkb2N1bWVudGF0aW9uIHN1cHBvcnQgbWV0aG9kcyB0byBvdXIgZmFjYWRlIHNvIHdlIGRvbid0IG5lZWQKLQkgKiB0byBrbm93IFdTREwgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uLi4uLi4uIAotCSAqLwotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGRvY1RleHQpCi0JCXsKLQkJCVN0cmluZyB2YWx1ZSA9IGRvY1RleHQuZ2V0VGV4dCgpOwotCQkJaWYgKGdldE1vZGVsKCkgIT0gbnVsbCAmJiBnZXRFbGVtZW50KCkgIT0gbnVsbCkKLQkJCXsKLQkJCQlFbGVtZW50IGRvY05vZGUgPSBnZXRFbGVtZW50KCkuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLQkJCQlpZiAoZG9jTm9kZSAhPSBudWxsKQotCQkJCXsKLQkJCQkJTm9kZSB0ZXh0Tm9kZSA9IGRvY05vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJCQlpZiAodGV4dE5vZGUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJdGV4dE5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVlKTsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCWlmICh2YWx1ZS5sZW5ndGgoKSA+IDApCi0JCQkJCQl7Ci0JCQkJCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBkb2NOb2RlLmdldE93bmVyRG9jdW1lbnQoKTsKLQkJCQkJCQlvcmcudzNjLmRvbS5UZXh0IG5ld1RleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpOwotCQkJCQkJCWRvY05vZGUuYXBwZW5kQ2hpbGQobmV3VGV4dE5vZGUpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCUVsZW1lbnQgZWxlbWVudCA9IGdldEVsZW1lbnQoKS5nZXRFbGVtZW50KCk7Ci0JCQkJCUFkZEVsZW1lbnRBY3Rpb24gYWN0aW9uID0gbmV3IEFkZEVsZW1lbnRBY3Rpb24oZWxlbWVudCwgZWxlbWVudC5nZXRQcmVmaXgoKSwgImRvY3VtZW50YXRpb24iLCBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJYWN0aW9uLnJ1bigpOwotCQkJCQlFbGVtZW50IG5ld0RvY3VtZW50YXRpb24gPSBhY3Rpb24uZ2V0TmV3RWxlbWVudCgpOwotCi0JCQkJCURvY3VtZW50IGRvY3VtZW50ID0gbmV3RG9jdW1lbnRhdGlvbi5nZXRPd25lckRvY3VtZW50KCk7Ci0JCQkJCW9yZy53M2MuZG9tLlRleHQgbmV3VGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSk7Ci0JCQkJCW5ld0RvY3VtZW50YXRpb24uYXBwZW5kQ2hpbGQobmV3VGV4dE5vZGUpOwotCQkJCQlnZXRFbGVtZW50KCkuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQobmV3RG9jdW1lbnRhdGlvbik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBXU0RMRWxlbWVudCBnZXRFbGVtZW50KCkgewotCQlXU0RMRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQotCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikgewotCQkJbW9kZWwgPSAoKEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKSBtb2RlbCkuZ2V0TW9kZWwoKTsKLQkJfQotCQkKLQkJLy8gVE9ETzogU2hvdWxkIHdlIGJlIGhhbmRsaW5nIHRoZSBYTUwgU2NoZW1hIGNhc2UgaGVyZSBhcyB3ZWxsPwotCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCU9iamVjdCB0YXJnZXQgPSAoKFdTRExCYXNlQWRhcHRlcikgbW9kZWwpLmdldFRhcmdldCgpOwotCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkJZWxlbWVudCA9IChXU0RMRWxlbWVudCkgdGFyZ2V0OwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9FbmRQb2ludFNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9FbmRQb2ludFNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UzNDZkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvRW5kUG9pbnRTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0NvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklUYWJiZWRQcm9wZXJ0eUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3QmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuY29udGVudGdlbmVyYXRvci51aS5leHRlbnNpb24uQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5jb250ZW50Z2VuZXJhdG9yLnVpLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBFbmRQb2ludFNlY3Rpb24gZXh0ZW5kcyBSZWZlcmVuY2VTZWN0aW9uIHsKLQlwcm90ZWN0ZWQgVGV4dCBhZGRyZXNzVGV4dDsKLQlwcm90ZWN0ZWQgQ0NvbWJvIHByb3RvY29sQ29tYm87Ci0JCi0JcHJvdGVjdGVkIExpc3QgYmluZGluZ3NJbkNvbWJvID0gbmV3IEFycmF5TGlzdCgpOwotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyOwotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0JCUZvcm1EYXRhIGRhdGE7Ci0JCQotCQkvLyBBZGRyZXNzIHJvdwotCQlDTGFiZWwgYWRkcmVzc0xhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9BRERSRVNTICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWFkZHJlc3NUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGFkZHJlc3NUZXh0LCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFkZHJlc3NUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJYWRkcmVzc0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJYWRkcmVzc1RleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChhZGRyZXNzVGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfUE9SVF9BRERSRVNTX1RFWFQpOwotCi0JCS8vIFByb3RvY29sIFJvdwotCQlDTGFiZWwgcHJvdG9jb2xMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfQklORElOR19QUk9UT0NPTCArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlwcm90b2NvbENvbWJvID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNDb21ibyhjb21wb3NpdGUpOyAvLyROT04tTkxTLTEkCi0KLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvdG9jb2xDb21ibywgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm90b2NvbENvbWJvLCAwLCBTV1QuQ0VOVEVSKTsKLQkJcHJvdG9jb2xMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFkZHJlc3NUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCXByb3RvY29sQ29tYm8uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJcHJvdG9jb2xDb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbENvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QT1JUX1BST1RPQ09MX1RFWFQpOwotCi0JCWNvbWJvTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfQklORElORyArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfUE9SVF9CSU5ESU5HX0NPTUJPKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLnZpZXcuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNyZWZyZXNoKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQlyZW1vdmVMaXN0ZW5lcnMoYWRkcmVzc1RleHQpOwotCQlwcm90b2NvbENvbWJvLnJlbW92ZUxpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCi0JCXN1cGVyLnJlZnJlc2goKTsKLQotCQlJRW5kUG9pbnQgZW5kUG9pbnQgPSAoSUVuZFBvaW50KSBnZXRNb2RlbCgpOwotCQlpZiAoZW5kUG9pbnQuZ2V0QWRkcmVzcygpICE9IG51bGwpIHsKLQkJCWlmICghZW5kUG9pbnQuZ2V0QWRkcmVzcygpLmVxdWFscyhhZGRyZXNzVGV4dC5nZXRUZXh0KCkpKSB7Ci0JCQkJYWRkcmVzc1RleHQuc2V0VGV4dChlbmRQb2ludC5nZXRBZGRyZXNzKCkpOwotCQkJfQotCQl9Ci0KLQkJcHJvdG9jb2xDb21iby5yZW1vdmVBbGwoKTsKLQkJaWYgKGVuZFBvaW50IGluc3RhbmNlb2YgVzExRW5kUG9pbnQpIHsKLQkJCVN0cmluZyBwcm90b2NvbFZhbHVlID0gKChXMTFFbmRQb2ludCkgZW5kUG9pbnQpLmdldFByb3RvY29sKCk7Ci0JCQlDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkJQ29udGVudEdlbmVyYXRvclVJRXh0ZW5zaW9uIGV4dHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JOYW1lKHByb3RvY29sVmFsdWUpOwotCQkJaWYgKGV4dHQgIT0gbnVsbCkgewotCQkJCXByb3RvY29sVmFsdWUgPSBleHR0LmdldExhYmVsKCk7Ci0JCQl9Ci0JCQlMaXN0IHByb3RvY29scyA9ICgoVzExRW5kUG9pbnQpIGdldE1vZGVsKCkpLmdldEFwcGxpY2FibGVQcm90b2NvbCgpOwotCQkJSXRlcmF0b3IgaXQgPSBwcm90b2NvbHMuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCSAgU3RyaW5nIHByb3RvY29sID0gKFN0cmluZykgaXQubmV4dCgpOwotCQkJICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb24gZXh0ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uRm9yTmFtZShwcm90b2NvbCk7Ci0JCQkgIGlmIChleHQgIT0gbnVsbCkgewotCQkJCSAgU3RyaW5nIGxhYmVsID0gZXh0LmdldExhYmVsKCk7Ci0JCQkJICBpZiAobGFiZWwgIT0gbnVsbCkgewotCQkJCQkgIHByb3RvY29sQ29tYm8uYWRkKGxhYmVsKTsKLQkJCQkgIH0KLQkJCSAgfQotCQkJfQotCQkKLQkJCXByb3RvY29sQ29tYm8uc2V0VGV4dChwcm90b2NvbFZhbHVlKTsKLQkJfQotCQkKLQkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihhZGRyZXNzVGV4dCk7Ci0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IocHJvdG9jb2xDb21ibyk7Ci0JCWFwcGx5VGV4dExpc3RlbmVycyhhZGRyZXNzVGV4dCk7Ci0JCXByb3RvY29sQ29tYm8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLQkJaWYgKHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJcmV0dXJuIHJlZk1hbmFnZXI7Ci0JCX0KLQotCQlyZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0QmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKChJQVNET2JqZWN0KSBnZXRNb2RlbCgpKTsgCi0JCQotCQlyZXR1cm4gcmVmTWFuYWdlcjsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdCBnZXRDb21ib0l0ZW1zKCkgewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBtYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCi0JCUxpc3QgaXRlbXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWl0ZW1zLmFkZChCUk9XU0VfU1RSSU5HKTsKLQkJaXRlbXMuYWRkKE5FV19TVFJJTkcpOwotCi0JCWlmIChtYW5hZ2VyICE9IG51bGwpIHsKLQkJICBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gY29tYm9JdGVtcyA9IG1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjb21ib0l0ZW1zLmxlbmd0aDsgaW5kZXgrKykgewotCQkgIAlpdGVtcy5hZGQoY29tYm9JdGVtc1tpbmRleF0pOwotCQkgIH0KLQkJfQotCQlyZXR1cm4gaXRlbXM7Ci0JfQotCQotCXByb3RlY3RlZCBPYmplY3QgZ2V0Q3VycmVudENvbWJvSXRlbSgpIHsKLQkJSUVuZFBvaW50IGVuZFBvaW50ID0gKElFbmRQb2ludCkgZ2V0TW9kZWwoKTsKLQkJcmV0dXJuIGVuZFBvaW50LmdldEJpbmRpbmcoKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRDb21ib0l0ZW1OYW1lKE9iamVjdCBpdGVtKSB7Ci0JCVN0cmluZyBuYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JCQluYW1lID0gKChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBpdGVtKS5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIElCaW5kaW5nKSB7Ci0JCQluYW1lID0gKChJQmluZGluZykgaXRlbSkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCW5hbWUgPSAoU3RyaW5nKSBpdGVtOwotCQl9Ci0JCQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUNvbWJvU2VsZWN0aW9uKE9iamVjdCBpdGVtKSB7Ci0JCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG51bGw7Ci0JCQotCQlpZiAoaXRlbSBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQkJCXNwZWMgPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgaXRlbTsKLQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIG1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJbWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoKElFbmRQb2ludCkgZ2V0TW9kZWwoKSwgc3BlYyk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJaWYgKGl0ZW0uZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJCQlBU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24gYWN0aW9uID0gbmV3IEFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbihwYXJ0KTsKLQkJCQlhY3Rpb24uc2V0SUVuZFBvaW50KChJRW5kUG9pbnQpIGdldE1vZGVsKCkpOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGl0ZW0uZXF1YWxzKE5FV19TVFJJTkcpKSB7Ci0JCQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJCQlBU0RTZXROZXdCaW5kaW5nQWN0aW9uIGFjdGlvbiA9IG5ldyBBU0RTZXROZXdCaW5kaW5nQWN0aW9uKHBhcnQpOwotCQkJCWFjdGlvbi5zZXRJRW5kUG9pbnQoKElFbmRQb2ludCkgZ2V0TW9kZWwoKSk7Ci0JCQkJYWN0aW9uLnJ1bigpOwotCQkJfQotCQl9Ci0JCQotCQlyZWZyZXNoKCk7Ci0JfQotCQotICBwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0gIHsKLQkgIGlmIChldmVudC53aWRnZXQgPT0gYWRkcmVzc1RleHQgJiYgIWFkZHJlc3NUZXh0LmlzRGlzcG9zZWQoKSkgewotCQkgIFN0cmluZyBuZXdBZGRyZXNzID0gYWRkcmVzc1RleHQuZ2V0VGV4dCgpOwotCQkgIGlmIChuZXdBZGRyZXNzID09IG51bGwpIHsKLQkJCSAgbmV3QWRkcmVzcyA9ICIiOyAvLyROT04tTkxTLTEkCi0JCSAgfQotCQkgIAotCQkgIFN0cmluZyBvbGRBZGRyZXNzID0gZ2V0T2xkQWRkcmVzcygpOwotCQkgIGlmIChvbGRBZGRyZXNzLmVxdWFscyhuZXdBZGRyZXNzKSkKLQkJCSAgcmV0dXJuOwotCQkgIAotCQkgIElFbmRQb2ludCBlbmRQb2ludCA9IChJRW5kUG9pbnQpIGdldE1vZGVsKCk7Ci0JCSAgQ29tbWFuZCBjb21tYW5kID0gZW5kUG9pbnQuZ2V0U2V0QWRkcmVzc0NvbW1hbmQobmV3QWRkcmVzcyk7Ci0JCSAgZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7Ci0JICB9Ci0JICBlbHNlIGlmIChldmVudC53aWRnZXQgPT0gcHJvdG9jb2xDb21ibyAmJiAhcHJvdG9jb2xDb21iby5pc0Rpc3Bvc2VkKCkpIHsKLQkJICBTdHJpbmcgbmV3UHJvdG9jb2wgPSBwcm90b2NvbENvbWJvLmdldFRleHQoKTsKLQkJICBDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yVUlFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkgIENvbnRlbnRHZW5lcmF0b3JVSUV4dGVuc2lvbiBleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Gb3JMYWJlbChuZXdQcm90b2NvbCk7Ci0JCSAgaWYgKGV4dCAhPSBudWxsKQotCQkgIHsKLQkJICAgIG5ld1Byb3RvY29sID0gZXh0LmdldE5hbWUoKTsKLQkJICB9Ci0JCSAgaWYgKG5ld1Byb3RvY29sICE9IG51bGwgJiYgZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFcxMUVuZFBvaW50KSB7Ci0JCSAgICBXMTFFbmRQb2ludCBlbmRQb2ludCA9IChXMTFFbmRQb2ludCkgZ2V0TW9kZWwoKTsKLQkJICAgIAotCQkgICAgLy8gRG9uJ3QgdXBkYXRlIHRoZSBwcm90b2NvbCBpZiBpdCdzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lCi0JCSAgICAKLQkJICAgIFN0cmluZyBvbGRQcm90b2NvbCA9IGdldE9sZFByb3RvY29sKGVuZFBvaW50KTsKLQkJICAgIGlmIChvbGRQcm90b2NvbC5lcXVhbHMobmV3UHJvdG9jb2wpKQotCQkgICAgCXJldHVybjsKLQotCQkgICAgZW5kUG9pbnQuc2V0UHJvdG9jb2wobmV3UHJvdG9jb2wpOwotCQkgIH0KLQkgIH0KLQkgIGVsc2UgewotCQkgIHN1cGVyLmRvSGFuZGxlRXZlbnQoZXZlbnQpOwotCSAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0T2xkQWRkcmVzcygpIHsKLQkgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0JICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFcxMUVuZFBvaW50KSB7Ci0JCSAgdmFsdWUgPSAoKFcxMUVuZFBvaW50KSBnZXRNb2RlbCgpKS5nZXRBZGRyZXNzKCk7Ci0JICB9Ci0KLQkgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0JCSAgdmFsdWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRPbGRQcm90b2NvbChXMTFFbmRQb2ludCBlbmRQb2ludCkgewotICAgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0gICAgdmFsdWUgPSBlbmRQb2ludC5nZXRQcm90b2NvbCgpOwotCi0gICAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICAgIHZhbHVlID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvSW1wb3J0U2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0ltcG9ydFNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE2OGQ1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvSW1wb3J0U2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5kaWFsb2dzLlNlbGVjdFNpbmdsZUZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSW1wb3J0U2VjdGlvbiBleHRlbmRzIEFTREFic3RyYWN0U2VjdGlvbgotewotCXByb3RlY3RlZCBUZXh0IG5hbWVzcGFjZVRleHQsIHByZWZpeFRleHQsIGxvY2F0aW9uVGV4dDsKLQlwcml2YXRlIFN0cmluZyBvbGRQcmVmaXhWYWx1ZTsKLQlCdXR0b24gYnV0dG9uOwotCS8vIFRPRE86IFJlbW92ZTogSUVkaXRvclBhcnQgZWRpdG9yUGFydAotCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQ7Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI2NyZWF0ZUNvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5KQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUZsYXRGb3JtQ29tcG9zaXRlKHBhcmVudCk7Ci0JCUZvcm1EYXRhIGRhdGE7Ci0KLQkJbmFtZXNwYWNlVGV4dCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVUZXh0KGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCW5hbWVzcGFjZVRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotLy8JCW5hbWVzcGFjZVRleHQuYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJbmFtZXNwYWNlVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCUNMYWJlbCBuYW1lc3BhY2VMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRVNQQUNFKTsgLy8kTk9OLU5MUy0xJAotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChuYW1lc3BhY2VUZXh0LCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVzcGFjZVRleHQsIDAsIFNXVC5DRU5URVIpOwotCQluYW1lc3BhY2VMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCXByZWZpeFRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotLy8JCXByZWZpeFRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotCQlhcHBseVRleHRMaXN0ZW5lcnMocHJlZml4VGV4dCk7Ci0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChuYW1lc3BhY2VUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCXByZWZpeFRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQlDTGFiZWwgcHJlZml4TGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX1BSRUZJWCk7IC8vJE5PTi1OTFMtMSQKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJlZml4VGV4dCwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcmVmaXhUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJcHJlZml4TGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQlsb2NhdGlvblRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQlsb2NhdGlvblRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotLy8JCWxvY2F0aW9uVGV4dC5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQotCQlDTGFiZWwgbG9jYXRpb25MYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfTE9DQVRJT04pOyAvLyROT04tTkxTLTEkCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGxvY2F0aW9uVGV4dCwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChsb2NhdGlvblRleHQsIDAsIFNXVC5DRU5URVIpOwotCQlsb2NhdGlvbkxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJYnV0dG9uID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUJ1dHRvbihjb21wb3NpdGUsICIiLCBTV1QuUFVTSCk7IC8vJE5PTi1OTFMtMSQKLQkJYnV0dG9uLnNldEltYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYnJvd3NlYnV0dG9uLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCi0JCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSArIDIpOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwwKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobG9jYXRpb25UZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJYnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChidXR0b24sIDApOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcmVmaXhUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCWxvY2F0aW9uVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKQotCXsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsgIAotCQlPYmplY3Qgb2JqID0gZ2V0TW9kZWwoKTsKLQkJYm9vbGVhbiByZWZyZXNoUHJlZml4VGV4dCA9IHRydWU7Ci0JCWJvb2xlYW4gcmVmcmVzaExvY2F0aW9uVGV4dCA9IHRydWU7Ci0JCWJvb2xlYW4gcmVmcmVzaE5hbWVzcGFjZVRleHQgPSB0cnVlOwotCQlpZiAocHJlZml4VGV4dC5pc0ZvY3VzQ29udHJvbCgpKQotCQl7Ci0JCQlyZWZyZXNoUHJlZml4VGV4dCA9IGZhbHNlOwotCQl9Ci0JCWlmIChsb2NhdGlvblRleHQuaXNGb2N1c0NvbnRyb2woKSkKLQkJewotCQkJcmVmcmVzaExvY2F0aW9uVGV4dCA9IGZhbHNlOwotCQl9Ci0JCWlmIChuYW1lc3BhY2VUZXh0LmlzRm9jdXNDb250cm9sKCkpCi0JCXsKLQkJCXJlZnJlc2hOYW1lc3BhY2VUZXh0ID0gZmFsc2U7Ci0JCX0KLQotCQlpZiAocmVmcmVzaFByZWZpeFRleHQpCi0JCXsKLQkJCXByZWZpeFRleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlpZiAocmVmcmVzaExvY2F0aW9uVGV4dCkKLQkJewotCQkJbG9jYXRpb25UZXh0LnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJaWYgKHJlZnJlc2hOYW1lc3BhY2VUZXh0KQotCQl7Ci0JCQluYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJaWYgKG9iaiBpbnN0YW5jZW9mIElJbXBvcnQpCi0JCXsKLQkJCUlJbXBvcnQgdGhlSW1wb3J0ID0gKElJbXBvcnQpIG9iajsKLQkJCWlmIChyZWZyZXNoTG9jYXRpb25UZXh0KQotCQkJewotCQkJCVN0cmluZyBsb2NhdGlvblZhbHVlID0gdGhlSW1wb3J0LmdldExvY2F0aW9uKCk7IAotCQkJCWxvY2F0aW9uVGV4dC5zZXRUZXh0KGxvY2F0aW9uVmFsdWUgIT0gbnVsbCA/IGxvY2F0aW9uVmFsdWUgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJU3RyaW5nIG5hbWVzcGFjZVZhbHVlID0gdGhlSW1wb3J0LmdldE5hbWVzcGFjZSgpOwotCQkJaWYgKHJlZnJlc2hOYW1lc3BhY2VUZXh0KQotCQkJewotCQkJCW5hbWVzcGFjZVRleHQuc2V0VGV4dChuYW1lc3BhY2VWYWx1ZSAhPSBudWxsID8gbmFtZXNwYWNlVmFsdWUgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJaWYgKHJlZnJlc2hQcmVmaXhUZXh0KQotCQkJewotCQkJCVN0cmluZyBwcmVmaXggPSB0aGVJbXBvcnQuZ2V0TmFtZXNwYWNlUHJlZml4KCk7Ci0JCQkJcHJlZml4VGV4dC5zZXRUZXh0KHByZWZpeCAhPSBudWxsID8gcHJlZml4IDogIiIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJb2xkUHJlZml4VmFsdWUgPSBwcmVmaXhUZXh0LmdldFRleHQoKTsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKLQkJLy8gVE9ETzogV2UgaGF2ZSBzb21lIFdTREwxMSBJbXBsIHNwZWNpZmljIGtub3dsZWRnZSBiZWxvdy4uLiBXZSBzaG91bGQgdHJ5IHRvIHJlbW92ZSB0aGlzLi4uCi0JCWlmIChldmVudC53aWRnZXQgPT0gcHJlZml4VGV4dCAmJiBsb2NhdGlvblRleHQuZ2V0VGV4dCgpLmxlbmd0aCgpID4gMCAmJiBuYW1lc3BhY2VUZXh0LmdldFRleHQoKS5sZW5ndGgoKSA+IDAgJiYgZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFcxMUltcG9ydCkgewotCQkJaWYgKG9sZFByZWZpeFZhbHVlLmVxdWFscyhwcmVmaXhUZXh0LmdldFRleHQoKSkpCi0JCQkgIHJldHVybjsKLQkJCQotCQkJVzExSW1wb3J0IHcxMUltcG9ydCA9IChXMTFJbXBvcnQpIGdldE1vZGVsKCk7Ci0JCQlJbXBvcnQgaW1wb3J0T2JqID0gKEltcG9ydCkgdzExSW1wb3J0LmdldFRhcmdldCgpOwotLy8JCQlvcmcudzNjLmRvbS5FbGVtZW50IGltcG9ydEVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoaW1wb3J0T2JqKTsKLQkJCU1hcCBuYW1lc3BhY2VzTWFwID0gaW1wb3J0T2JqLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXROYW1lc3BhY2VzKCk7Ci0KLQkJCWlmIChuYW1lc3BhY2VzTWFwLmNvbnRhaW5zS2V5KHByZWZpeFRleHQuZ2V0VGV4dCgpKSkgewotCQkJCS8vIFdlIHNob3VsZCBhZGQgZXJyb3IgbWVzc2FnZXMuLi4uLi4uLi4KLQkJCQkvLyAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKFhTREVkaXRvclBsdWdpbi5nZXRYU0RTdHJpbmcoIl9FUlJPUl9MQUJFTF9QUkVGSVhfRVhJU1RTIikpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGltcG9ydE9iai5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RWxlbWVudCgpOwotCQkJCWRlZmluaXRpb25FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgieG1sbnM6IitvbGRQcmVmaXhWYWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlkZWZpbml0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXhUZXh0LmdldFRleHQoKSwgbmFtZXNwYWNlVGV4dC5nZXRUZXh0KCkpOyAvLyROT04tTkxTLTEkCi0KLS8vCQkJCWNsZWFyRXJyb3JNZXNzYWdlKCk7Ci0JCQkJb2xkUHJlZml4VmFsdWUgPSBwcmVmaXhUZXh0LmdldFRleHQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQkvLyBUT0RPOiBXZSBoYXZlIHNvbWUgV1NETDExIEltcGwgc3BlY2lmaWMga25vd2xlZGdlIGJlbG93Li4uIFdlIHNob3VsZCB0cnkgdG8gcmVtb3ZlIHRoaXMuLi4KLQkJaWYgKGUud2lkZ2V0ID09IGJ1dHRvbiAmJiBnZXRNb2RlbCgpIGluc3RhbmNlb2YgVzExSW1wb3J0KQotCQl7Ci0JCQlXMTFJbXBvcnQgdzExSW1wb3J0ID0gKFcxMUltcG9ydCkgZ2V0TW9kZWwoKTsKLQotCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkKLSAgICAgIFNlbGVjdFNpbmdsZUZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IFNlbGVjdFNpbmdsZUZpbGVEaWFsb2coV1NETEVkaXRvclBsdWdpbi5nZXRTaGVsbCgpLCBudWxsLCB0cnVlKTsKLSAgICAgIAotICAgICAgSUZpbGUgY3VycmVudFdTRExGaWxlID0gbnVsbDsKLSAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgU3RyaW5nIFtdIGZpbHRlcnMgPSB7ICJ4c2QiLCAid3NkbCIgfTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAKLSAgICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRXU0RMRmlsZSA9ICgoSUZpbGVFZGl0b3JJbnB1dCllZGl0b3JJbnB1dCkuZ2V0RmlsZSgpOwotICAgICAgICBJRmlsZSBbXSBleGNsdWRlZEZpbGVzID0geyBjdXJyZW50V1NETEZpbGUgfTsKLSAgICAgICAgZGlhbG9nLmFkZEZpbHRlckV4dGVuc2lvbnMoZmlsdGVycywgZXhjbHVkZWRGaWxlcyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIElGaWxlIFtdIGV4Y2x1ZGVkRmlsZXMgPSB7IH07Ci0gICAgICAgIGRpYWxvZy5hZGRGaWx0ZXJFeHRlbnNpb25zKGZpbHRlcnMsIGV4Y2x1ZGVkRmlsZXMpOwotICAgICAgfQotCQkKLQkJCWRpYWxvZy5jcmVhdGUoKTsKLQkJCWRpYWxvZy5nZXRTaGVsbCgpLnNldFRleHQob3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXMuX1VJX1RJVExFX1NFTEVDVCk7IC8vJE5PTi1OTFMtMSQKLQkJCWRpYWxvZy5zZXRUaXRsZShvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlcy5fVUlfVElUTEVfU0VMRUNUX0ZJTEUpOyAvLyROT04tTkxTLTEkCi0JCQlkaWFsb2cuc2V0TWVzc2FnZShvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlcy5fVUlfREVTQ1JJUFRJT05fU0VMRUNUX1dTRExfT1JfWFNEKTsgLy8kTk9OLU5MUy0xJAotCQkJaW50IHJjID0gZGlhbG9nLm9wZW4oKTsKLQkJCWlmIChyYyA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKQotCQkJewotCQkJCUlGaWxlIHNlbGVjdGVkRmlsZSA9IGRpYWxvZy5nZXRGaWxlKCk7Ci0KLQkJCQkvL2lmIChzZWxlY3RlZEZpbGUuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkuZXF1YWxzKGN1cnJlbnRXU0RMRmlsZS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSkpCi0JCQkJLy97Ci0JCQkJLy8gIFN5c3RlbS5vdXQucHJpbnRsbigiU0FNRSBGSUxFOiIgKyBjdXJyZW50V1NETEZpbGUuZ2V0TG9jYXRpb24oKSk7Ci0JCQkJLy99Ci0KLQkJCQlTdHJpbmcgbG9jYXRpb24gPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVSZWxhdGl2ZVVSSShzZWxlY3RlZEZpbGUsIGN1cnJlbnRXU0RMRmlsZSwgdHJ1ZSk7Ci0KLQkJCQlJbXBvcnQgaW1wb3J0T2JqID0gKEltcG9ydCkgdzExSW1wb3J0LmdldFRhcmdldCgpOwotLy8JCQkJb3JnLnczYy5kb20uRWxlbWVudCBpbXBvcnRFbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGltcG9ydE9iaik7Ci0JCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gaW1wb3J0T2JqLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkJCQlvcmcudzNjLmRvbS5FbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGRlZmluaXRpb24pOwotCi0JCQkJU3RyaW5nIGltcG9ydFRhcmdldE5hbWVzcGFjZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJU3RyaW5nIHByZWZpeCA9IHByZWZpeFRleHQuZ2V0VGV4dCgpOwotCQkJCVN0cmluZyB1bmlxdWVQcmVmaXggPSAiIjsgLy8kTk9OLU5MUy0xJAotCi0JCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHNlbGVjdGVkRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpOyAgICAgIAotCi0JCQkJLy8gbm90ZSB0aGF0IHRoZSBnZXRUYXJnZXROYW1lc3BhY2VVUklGb3JTY2hlbWEgd29ya3MgZm9yIGJvdGggc2NoZW1hIGFuZCB3c2RsIGZpbGVzCi0JCQkJLy8gSSBzaG91bGQgY2hhbmdlIHRoZSBuYW1lIG9mIHRoaXMgY29udmVuaWVuY2UgbWV0aG9kCi0JCQkJaW1wb3J0VGFyZ2V0TmFtZXNwYWNlID0gIFdTRExFZGl0b3JVdGlsLmdldFRhcmdldE5hbWVzcGFjZVVSSUZvclNjaGVtYSh1cmkudG9TdHJpbmcoKSk7Ci0KLQkJCQlpZiAocHJlZml4LnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQkJewotCQkJCQl1bmlxdWVQcmVmaXggPSBnZXRVbmlxdWVQcmVmaXgoZGVmaW5pdGlvbiwgdXJpLmZpbGVFeHRlbnNpb24oKSk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXVuaXF1ZVByZWZpeCA9IHByZWZpeDsgCi0JCQkJfQotCi0KLQkJCQlpZiAoaW1wb3J0VGFyZ2V0TmFtZXNwYWNlID09IG51bGwgfHwKLQkJCQkJCShpbXBvcnRUYXJnZXROYW1lc3BhY2UgIT0gbnVsbCAmJiBpbXBvcnRUYXJnZXROYW1lc3BhY2UudHJpbSgpLmxlbmd0aCgpID09IDApKQotCQkJCXsKLQkJCQkJcmV0dXJuOyAgLy8gd2hhdCB0byBkbyB3aXRoIG5vIG5hbWVzcGFjZSBkb2NzPwotCQkJCX0KLQotCQkJCWltcG9ydE9iai5zZXRMb2NhdGlvblVSSShsb2NhdGlvbik7Ci0JCQkJaW1wb3J0T2JqLnNldE5hbWVzcGFjZVVSSShpbXBvcnRUYXJnZXROYW1lc3BhY2UpOwotCQkJCSgoSW1wb3J0SW1wbCkgaW1wb3J0T2JqKS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsKLQotCQkJCWRlZmluaXRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHVuaXF1ZVByZWZpeCwgaW1wb3J0VGFyZ2V0TmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotCi0JCQkJbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGltcG9ydFRhcmdldE5hbWVzcGFjZSk7Ci0JCQkJbG9jYXRpb25UZXh0LnNldFRleHQobG9jYXRpb24pOwotCQkJCXByZWZpeFRleHQuc2V0VGV4dCh1bmlxdWVQcmVmaXgpOwotCQkJfQotCQkJcmVmcmVzaCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0VW5pcXVlUHJlZml4KERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGluaXRQcmVmaXgpCi0JewotCQlTdHJpbmcgdW5pcXVlUHJlZml4OwotCQlNYXAgbWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0KLQkJaWYgKGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlKGluaXRQcmVmaXgpID09IG51bGwpCi0JCXsKLQkJCXVuaXF1ZVByZWZpeCA9IGluaXRQcmVmaXg7Ci0JCX0KLQkJZWxzZSAvLyBpZiB1c2VkLCB0aGVuIHRyeSB0byBjcmVhdGUgYSB1bmlxdWUgb25lCi0JCXsKLQkJCVN0cmluZyB0ZW1wUHJlZml4ID0gaW5pdFByZWZpeDsKLQkJCWludCBpID0gMTsKLQkJCXdoaWxlKG1hcC5jb250YWluc0tleSh0ZW1wUHJlZml4ICsgaSkpCi0JCQl7Ci0JCQkJaSsrOwotCQkJfQotCQkJdW5pcXVlUHJlZml4ID0gdGVtcFByZWZpeCArIGk7Ci0JCX0KLQkJcmV0dXJuIHVuaXF1ZVByZWZpeDsgICAgCi0JfQotCi0JLy8gVE9ETzogUmVtb3ZlIG1ldG9kIHNldEVkaXRvclBhcnQoKSBiZWxvdwotCXB1YmxpYyB2b2lkIHNldEVkaXRvclBhcnQoSUVkaXRvclBhcnQgZWRpdG9yUGFydCkKLQl7Ci0JCXRoaXMuZWRpdG9yUGFydCA9IGVkaXRvclBhcnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL05hbWVTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvTmFtZVNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhYTQxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvTmFtZVNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkh5cGVybGlua0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5JSHlwZXJsaW5rTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5JbWFnZUh5cGVybGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JU2VsZWN0aW9uTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklOYW1lZE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zLlJlbmFtZUNvbXBvbmVudEFjdGlvbjsKLQotcHVibGljIGNsYXNzIE5hbWVTZWN0aW9uIGV4dGVuZHMgQVNEQWJzdHJhY3RTZWN0aW9uIGltcGxlbWVudHMgSUh5cGVybGlua0xpc3RlbmVyIHsKLQlDTGFiZWwgbmFtZUxhYmVsOwotCXByb3RlY3RlZCBUZXh0IG5hbWVUZXh0OwotICAvKioKLSAgICogQ2xpY2tpbmcgb24gaXQgaW52b2tlcyB0aGUgcmVmYWN0b3ItPnJlbmFtZSBhY3Rpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2VIeXBlcmxpbmsgcmVuYW1lSHlwZXJsaW5rOwotCQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0KLQkJY29tcG9zaXRlID0JZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUZsYXRGb3JtQ29tcG9zaXRlKHBhcmVudCk7Ci0JCQotCQlGb3JtRGF0YSBkYXRhOwkJCi0gICAgCi0JCW5hbWVUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCW5hbWVUZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobmFtZVRleHQsIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX05BTUVfVEVYVCk7Ci0KLQkJbmFtZUxhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJbmFtZUxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCWFwcGx5VGV4dExpc3RlbmVycyhuYW1lVGV4dCk7Ci0JfQotCQotICBwcml2YXRlIHZvaWQgc2hvd1JlZmFjdG9yQnV0dG9uKCkgewotICAgIGlmIChpc1JlYWRPbmx5KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgICAgCi0gICAgaWYgKHJlbmFtZUh5cGVybGluayA9PSBudWxsKSB7Ci0gICAgICByZW5hbWVIeXBlcmxpbmsgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlSW1hZ2VIeXBlcmxpbmsoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0KLSAgICAgIHJlbmFtZUh5cGVybGluay5zZXRJbWFnZShXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3F1aWNrYXNzaXN0LmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcmVuYW1lSHlwZXJsaW5rLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLl9VSV9UT09MVElQX1JFTkFNRV9SRUZBQ1RPUik7Ci0gICAgICByZW5hbWVIeXBlcmxpbmsuYWRkSHlwZXJsaW5rTGlzdGVuZXIodGhpcyk7Ci0gICAgfQotCi0gICAgRm9ybURhdGEgZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotICAgIGRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSk7Ci0gICAgZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0gICAgcmVuYW1lSHlwZXJsaW5rLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgCi0gICAgZGF0YSA9IChGb3JtRGF0YSkgbmFtZVRleHQuZ2V0TGF5b3V0RGF0YSgpOyAKLSAgICBGb3JtQXR0YWNobWVudCByaWdodCA9IGRhdGEucmlnaHQ7Ci0gICAgcmlnaHQuY29udHJvbCA9IHJlbmFtZUh5cGVybGluazsKLSAgICByaWdodC5vZmZzZXQgPSAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRTsKLSAgICByaWdodC5hbGlnbm1lbnQgPSBTV1QuTEVGVDsKLSAgICBkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChyZW5hbWVIeXBlcmxpbmssIDAsIFNXVC5DRU5URVIpOwotICAgIHJlbmFtZUh5cGVybGluay5zZXRWaXNpYmxlKHRydWUpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGlkZVJlZmFjdG9yQnV0dG9uKCkgewotICAgIGlmIChpc1JlYWRPbmx5KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHJlbmFtZUh5cGVybGluayA9PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIEZvcm1EYXRhIGRhdGEgPSAoRm9ybURhdGEpIG5hbWVUZXh0LmdldExheW91dERhdGEoKTsKLSAgICBGb3JtQXR0YWNobWVudCByaWdodCA9IGRhdGEucmlnaHQ7Ci0gICAgcmlnaHQuY29udHJvbCA9IG51bGw7Ci0gICAgcmlnaHQubnVtZXJhdG9yID0gMTAwOwotICAgIHJpZ2h0Lm9mZnNldCA9IC1yaWdodE1hcmdpblNwYWNlOyAKLSAgICBkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLSAgICByZW5hbWVIeXBlcmxpbmsuc2V0VmlzaWJsZShmYWxzZSk7Ci0gIH0KLSAgCi0gIAotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJaWYgKG5hbWVUZXh0LmlzRGlzcG9zZWQoKSB8fCBuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCVN0cmluZyBuYW1lID0gbnVsbDsKLQkJaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJTmFtZWRPYmplY3QpIHsKLQkJCW5hbWUgPSAoKElOYW1lZE9iamVjdCkgZ2V0TW9kZWwoKSkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBFZGl0UGFydCkgewotCQkJT2JqZWN0IG1vZGVsID0gKChFZGl0UGFydCkgZ2V0TW9kZWwoKSkuZ2V0TW9kZWwoKTsgCi0JCQluYW1lID0gKChJTmFtZWRPYmplY3QpIG1vZGVsKS5nZXROYW1lKCk7Ci0JCX0KLQkJCi0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCW5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCQotCQluYW1lVGV4dC5zZXRUZXh0KG5hbWUpOwotCQlzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKG5hbWVUZXh0KTsKLSAgICAKLSAgICBpZiAoY2FuUmVmYWN0b3IoKSkgewotICAgICAgc2hvd1JlZmFjdG9yQnV0dG9uKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgaGlkZVJlZmFjdG9yQnV0dG9uKCk7Ci0gICAgfQotICAgIHNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gc2hvdWxkVXNlRXh0cmFTcGFjZSgpCi0JewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IG5hbWVUZXh0ICYmICFuYW1lVGV4dC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCVN0cmluZyBuZXdWYWx1ZSA9IG5hbWVUZXh0LmdldFRleHQoKTsKLQkJCU9iamVjdCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCQlJTmFtZWRPYmplY3QgbmFtZWRPYmplY3QgPSBudWxsOwotCQkJCi0JCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJTmFtZWRPYmplY3QpIHsKLQkJCQluYW1lZE9iamVjdCA9IChJTmFtZWRPYmplY3QpIG1vZGVsOwotCQkJfQotCQkJCi0JCQlpZiAobmFtZWRPYmplY3QgIT0gbnVsbCkgewotCQkJCWlmICggIW5ld1ZhbHVlLmVxdWFscyggbmFtZWRPYmplY3QuZ2V0TmFtZSgpICkgKXsKLQkJCQkgIENvbW1hbmQgY29tbWFuZCA9IG5hbWVkT2JqZWN0LmdldFNldE5hbWVDb21tYW5kKG5ld1ZhbHVlKTsKLQkJCQkgIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLSAgCi0gIHByaXZhdGUgdm9pZCBpbnZva2VSZW5hbWVSZWZhY3RvcmluZygpIHsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbillZGl0b3IuZ2V0QWRhcHRlcihEZWZpbml0aW9uLmNsYXNzKTsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKS5nZXRTZWxlY3Rpb24oKTsKLSAgICBJU2VsZWN0aW9uTWFwcGVyIG1hcHBlciA9IChJU2VsZWN0aW9uTWFwcGVyKSBlZGl0b3IuZ2V0QWRhcHRlcihJU2VsZWN0aW9uTWFwcGVyLmNsYXNzKTsKLSAgICBzZWxlY3Rpb24gPSBtYXBwZXIgIT0gbnVsbCA/IG1hcHBlci5tYXBTZWxlY3Rpb24oc2VsZWN0aW9uKSA6IHNlbGVjdGlvbjsKLSAgICBSZW5hbWVDb21wb25lbnRBY3Rpb24gYWN0aW9uID0gbmV3IFJlbmFtZUNvbXBvbmVudEFjdGlvbihzZWxlY3Rpb24sIGRlZmluaXRpb24pOwotICAgIGFjdGlvbi51cGRhdGUoc2VsZWN0aW9uKTsKLSAgICBhY3Rpb24ucnVuKCk7Ci0gIH0KLQotICBwcml2YXRlIE9iamVjdCBnZXRSZWFsTW9kZWwoKSB7Ci0gICAgT2JqZWN0IHJlYWxNb2RlbCA9IGdldE1vZGVsKCk7Ci0gICAgCi0gICAgaWYgKHJlYWxNb2RlbCBpbnN0YW5jZW9mIEVkaXRQYXJ0KSB7Ci0gICAgICByZWFsTW9kZWwgPSAoKEVkaXRQYXJ0KSBnZXRNb2RlbCgpKS5nZXRNb2RlbCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVhbE1vZGVsOwotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZXMgaWYgdGhlIG1vZGVsIG9iamVjdCdzIG5hbWUgY2FuIGJlIHJlZmFjdG9yZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbW9kZWwgb2JqZWN0IGNhbiBiZSByZWZhY3RvcmVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY2FuUmVmYWN0b3IoKSB7Ci0gICAgT2JqZWN0IG1vZGVsID0gZ2V0UmVhbE1vZGVsKCk7Ci0KLSAgICBib29sZWFuIGNhblJlZmFjdG9yID0gbW9kZWwgaW5zdGFuY2VvZiBJTWVzc2FnZSB8fCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwgaW5zdGFuY2VvZiBJQmluZGluZyB8fCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwgaW5zdGFuY2VvZiBJSW50ZXJmYWNlOwotICAgIHJldHVybiBjYW5SZWZhY3RvcjsKLSAgfQotICAKLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSUh5cGVybGlua0xpc3RlbmVyI2xpbmtBY3RpdmF0ZWQob3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkh5cGVybGlua0V2ZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKQotICB7Ci0gICAgaW52b2tlUmVuYW1lUmVmYWN0b3JpbmcoKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLklIeXBlcmxpbmtMaXN0ZW5lciNsaW5rRW50ZXJlZChvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSHlwZXJsaW5rRXZlbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsaW5rRW50ZXJlZChIeXBlcmxpbmtFdmVudCBlKQotICB7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5JSHlwZXJsaW5rTGlzdGVuZXIjbGlua0V4aXRlZChvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSHlwZXJsaW5rRXZlbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsaW5rRXhpdGVkKEh5cGVybGlua0V2ZW50IGUpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL05hbWVzcGFjZVNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9OYW1lc3BhY2VTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4M2NkODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL05hbWVzcGFjZVNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklUYWJiZWRQcm9wZXJ0eUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERWRpdE5hbWVzcGFjZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTmFtZWRPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLm5zZWRpdC5Db21tb25FZGl0TmFtZXNwYWNlc1RhcmdldEZpZWxkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwubnNlZGl0LkNvbW1vbk5hbWVzcGFjZUluZm9UYWJsZTsKLQotcHVibGljIGNsYXNzIE5hbWVzcGFjZVNlY3Rpb24gZXh0ZW5kcyBBU0RBYnN0cmFjdFNlY3Rpb24gewotCXByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlOwotCXByb3RlY3RlZCBMaXN0IG5hbWVzcGFjZUluZm9MaXN0OwotCXByb3RlY3RlZCBDb21tb25FZGl0TmFtZXNwYWNlc1RhcmdldEZpZWxkRGlhbG9nIGVkaXRXU0RMTmFtZXNwYWNlc0NvbnRyb2w7Ci0JcHJvdGVjdGVkIEJ1dHRvbiBidXR0b247Ci0JCi0JVGV4dCBuYW1lVGV4dDsKLQlUZXh0IHByZWZpeFRleHQ7Ci0JVGV4dCB0YXJnZXROYW1lc3BhY2VUZXh0OwotCXByb3RlY3RlZCBDb21tb25OYW1lc3BhY2VJbmZvVGFibGUgdGFibGVWaWV3ZXI7Ci0JcHJpdmF0ZSBib29sZWFuIGhhbmRsaW5nRXZlbnQ7Ci0JCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNjcmVhdGVDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQkJY29tcG9zaXRlID0JZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUZsYXRGb3JtQ29tcG9zaXRlKHBhcmVudCk7Ci0JCQotCQlTdHJpbmcgbmFtZVN0cmluZyA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FICsgIjoiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJU3RyaW5nIHByZWZpeFN0cmluZyA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9QUkVGSVggKyAiOiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlTdHJpbmcgbmFtZXNwYWNlU3RyaW5nID0gTWVzc2FnZXMuX1VJX0xBQkVMX1RBUkdFVF9OQU1FU1BBQ0U7IC8vJE5PTi1OTFMtMSQKLQkJR0MgZ2MgPSBuZXcgR0MocGFyZW50KTsKLQkJaW50IHhvZmZzZXQgPSBNYXRoLm1heCgxMTUsIGdjLnRleHRFeHRlbnQobmFtZVN0cmluZykueCArIDIwKTsgLy8gYWRkcyAyMCBkdWUgdG8gYm9yZGVycwotCQl4b2Zmc2V0ID0gTWF0aC5tYXgoeG9mZnNldCwgZ2MudGV4dEV4dGVudChwcmVmaXhTdHJpbmcpLnggKyAyMCk7IC8vIGFkZHMgMjAgZHVlIHRvIGJvcmRlcnMKLQkJeG9mZnNldCA9IE1hdGgubWF4KHhvZmZzZXQsIGdjLnRleHRFeHRlbnQobmFtZXNwYWNlU3RyaW5nKS54ICsgMjApOyAvLyBhZGRzIDIwIGR1ZSB0byBib3JkZXJzCi0JCWdjLmRpc3Bvc2UoKTsKLQkJCi0JCS8vIG5hbWUKLQkJQ0xhYmVsIG5hbWVMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBuYW1lU3RyaW5nKTsgLy8kTk9OLU5MUy0xJAotCQluYW1lVGV4dCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVUZXh0KGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobmFtZVRleHQsIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX05BTUVfVEVYVCk7Ci0JCQotCQkvLyBwcmVmaXgKLQkJQ0xhYmVsIHByZWZpeExhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIHByZWZpeFN0cmluZyk7IC8vJE5PTi1OTFMtMSQKLQkJcHJlZml4VGV4dCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVUZXh0KGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocHJlZml4VGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfREVGX1BSRUZJWF9URVhUKTsKLQkJCi0JCS8vIHRhcmdldG5hbWVzcGFjZQotCQlDTGFiZWwgdGFyZ2V0TmFtZXNwYWNlTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgbmFtZXNwYWNlU3RyaW5nKTsgLy8kTk9OLU5MUy0xJAotCQl0YXJnZXROYW1lc3BhY2VUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0YXJnZXROYW1lc3BhY2VUZXh0LCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19ERUZfVE5TX1RFWFQpOwotCQkKLQkJLy8gQWR2YW5jZWQgYnV0dG9uCi0JCWJ1dHRvbiA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVCdXR0b24oY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfU0VDVElPTl9BRFZBTkNFRF9BVFRSSUJVVEVTICsgIi4uLiIsIFNXVC5QVVNIKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQotCQkKLQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vIExhYmVscwotCQkvLyBuYW1lIGxheW91dAotCQlGb3JtRGF0YSBkYXRhTmFtZUxhYmVsID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGFOYW1lTGFiZWwudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJbmFtZUxhYmVsLnNldExheW91dERhdGEoZGF0YU5hbWVMYWJlbCk7Ci0JCQotCQkvLyBwcmVmaXggbGF5b3V0Ci0JCUZvcm1EYXRhIGRhdGFQcmVmaXhMYWJlbCA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhUHJlZml4TGFiZWwubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YVByZWZpeExhYmVsLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcmVmaXhUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJcHJlZml4TGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhUHJlZml4TGFiZWwpOwotCQkKLQkJLy8gdGFyZ2V0TmFtZXNwYWNlTGFiZWwgbGF5b3V0Ci0JCUZvcm1EYXRhIGRhdGF0bnNMYWJlbCA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhdG5zTGFiZWwubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YXRuc0xhYmVsLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRhcmdldE5hbWVzcGFjZVRleHQsIDApOwotCQlkYXRhdG5zTGFiZWwudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRhcmdldE5hbWVzcGFjZVRleHQsIDAsIFNXVC5DRU5URVIpOwotCQl0YXJnZXROYW1lc3BhY2VMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGF0bnNMYWJlbCk7Ci0JCQotCQkKLQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFRleHQgRmllbGRzCi0JCS8vIG5hbWUgdGV4dCBmaWVsZAotCQlGb3JtRGF0YSBkYXRhTmFtZVRleHQgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YU5hbWVUZXh0LmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgeG9mZnNldCk7Ci0JCWRhdGFOYW1lVGV4dC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGFOYW1lVGV4dC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCW5hbWVUZXh0LnNldExheW91dERhdGEoZGF0YU5hbWVUZXh0KTsKLQkJYXBwbHlUZXh0TGlzdGVuZXJzKG5hbWVUZXh0KTsKLQkJCi0JCS8vIHByZWZpeCB0ZXh0IGZpZWxkCi0JCUZvcm1EYXRhIGRhdGFQcmVmaXhUZXh0ID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGFQcmVmaXhUZXh0LmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgeG9mZnNldCk7Ci0JCWRhdGFQcmVmaXhUZXh0LnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YVByZWZpeFRleHQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCXByZWZpeFRleHQuc2V0TGF5b3V0RGF0YShkYXRhUHJlZml4VGV4dCk7Ci0JCWFwcGx5VGV4dExpc3RlbmVycyhwcmVmaXhUZXh0KTsKLQkJCi0JCS8vIHRhcmdldG5hbWVzcGFjZSB0ZXh0IGZpZWxkCi0JCUZvcm1EYXRhIGRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIHhvZmZzZXQpOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJlZml4VGV4dCwgK0lUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5WU1BBQ0UpOwotCQl0YXJnZXROYW1lc3BhY2VUZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0JCWFwcGx5VGV4dExpc3RlbmVycyh0YXJnZXROYW1lc3BhY2VUZXh0KTsKLQkJCi0JCS8vIEFkdmFuY2VkIGJ1dHRvbiBsYXlvdXQKLQkJRm9ybURhdGEgZGF0YUJ1dHRvbiA9IG5ldyBGb3JtRGF0YSgpOwotLy8JCWRhdGFCdXR0b24ubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlICsgMik7Ci0JCWRhdGFCdXR0b24ucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhQnV0dG9uLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0YXJnZXROYW1lc3BhY2VUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0vLwkJZGF0YUJ1dHRvbi50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGFyZ2V0TmFtZXNwYWNlVGV4dCwgMCwgU1dULkNFTlRFUik7Ci0JCWJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGFCdXR0b24pOwotCQlidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQloYW5kbGluZ0V2ZW50ID0gdHJ1ZTsKLQkJT2JqZWN0IG9iaiA9IGdldERlc2NyaXB0aW9uKCk7Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCUlEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIG9iajsKLQotCQkJaWYgKGV2ZW50LndpZGdldCA9PSBuYW1lVGV4dCkgewotCQkJCVN0cmluZyBuZXdOYW1lID0gbmFtZVRleHQuZ2V0VGV4dCgpOwotCQkJCWlmICghbmV3TmFtZS5lcXVhbHMoZGVzY3JpcHRpb24uZ2V0TmFtZSgpKSkgewotCQkJCQlDb21tYW5kIGNvbW1hbmQgPSBkZXNjcmlwdGlvbi5nZXRTZXROYW1lQ29tbWFuZChuZXdOYW1lKTsKLQkJCQkJZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAoZXZlbnQud2lkZ2V0ID09IHByZWZpeFRleHQgfHwgZXZlbnQud2lkZ2V0ID09IHRhcmdldE5hbWVzcGFjZVRleHQpIHsKLQkJCQlTdHJpbmcgbmV3VGFyZ2V0TlMgPSB0YXJnZXROYW1lc3BhY2VUZXh0LmdldFRleHQoKTsJCQkJCi0JCQkJU3RyaW5nIG5ld1ByZWZpeCA9IHByZWZpeFRleHQuZ2V0VGV4dCgpOwotCQkJCQotCQkJCWJvb2xlYW4gdGFyZ2V0TlNkaWZmID0gIW5ld1RhcmdldE5TLmVxdWFscyhkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCQkJYm9vbGVhbiBwcmVmaXhEaWZmID0gIW5ld1ByZWZpeC5lcXVhbHMoZGVzY3JpcHRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlUHJlZml4KCkpOwotCQkJCWlmICh0YXJnZXROU2RpZmYgfHwgcHJlZml4RGlmZiApIHsKLQkJCQkJLy8gVE9ETzogVGhlIGNvZGUgYmVsb3cgaXMgbm90IGdlbmVyaWMuICBXZSBuZWVkIHRvIHJldmlzaXQgdGhpcyB0byBlbnN1cmUgaXQgaXMKLQkJCQkJLy8gZ2VuZXJpYy4gIElEZXNjcmlwdGlvbiBuZWVkcyBhIGdldE5hbWVzcGFjZXNJbmZvKCkgYW5kIGdldEVkaXROYW1lc3BhY2VzQ29tbWFuZCgpLi4uCi0JCQkJCVcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZCBjb21tYW5kID0gCi0JCQkJCQkoVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kKSAoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbikuZ2V0RWRpdE5hbWVzcGFjZXNDb21tYW5kKCk7Ci0JCQkJCWlmICh0YXJnZXROU2RpZmYpCi0JCQkJCSAgY29tbWFuZC5zZXRUYXJnZXROYW1lc3BhY2UobmV3VGFyZ2V0TlMpOwotCQkJCQlpZiAocHJlZml4RGlmZikKLQkJCQkJICBjb21tYW5kLnNldFRhcmdldE5hbWVzcGFjZVByZWZpeChuZXdQcmVmaXgpOwotCQkJCQlleGVjdXRlQ29tbWFuZChjb21tYW5kKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQloYW5kbGluZ0V2ZW50ID0gZmFsc2U7CQkKLQl9Ci0JCi0JcHJvdGVjdGVkIE9iamVjdCBnZXREZXNjcmlwdGlvbigpIHsKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pIHsKLQkJCW1vZGVsID0gKChBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikgbW9kZWwpLmdldE1vZGVsKCk7Ci0JCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgbW9kZWw7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQlyZXR1cm4gKChJQ2F0ZWdvcnlBZGFwdGVyKSBtb2RlbCkuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQl9Ci0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLnZpZXcuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNyZWZyZXNoKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKCkKLQl7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJCi0JCS8vIFNldCBuYW1lVGV4dAotCQlpZiAobmFtZVRleHQgPT0gbnVsbCB8fCBuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJbmFtZVRleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGdldERlc2NyaXB0aW9uKCkgaW5zdGFuY2VvZiBJTmFtZWRPYmplY3QpIHsKLQkJCW5hbWVUZXh0LnNldFRleHQoKChJTmFtZWRPYmplY3QpIGdldERlc2NyaXB0aW9uKCkpLmdldE5hbWUoKSk7Ci0JCX0JCQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JCQotCQkKLQkJLy8gU2V0IHRhcmdldE5hbWVzcGFjZVRleHQgYW5kIHByZWZpeFRleHQKLQkJaWYgKHRhcmdldE5hbWVzcGFjZVRleHQgPT0gbnVsbCB8fCB0YXJnZXROYW1lc3BhY2VUZXh0LmlzRm9jdXNDb250cm9sKCkgfHwgaGFuZGxpbmdFdmVudCkKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCU9iamVjdCBvYmogPSBnZXREZXNjcmlwdGlvbigpOwotCQlpZiAob2JqIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKQotCQl7Ci0JCQlJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBvYmo7Ci0JCQlTdHJpbmcgdGFyZ2V0TlMgPSBkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCVN0cmluZyBuZXdQcmVmaXggPSBkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2VQcmVmaXgoKTsgICAgICAgICAgICAKLQkJCXByZWZpeFRleHQuc2V0VGV4dChuZXdQcmVmaXggIT0gbnVsbCA/IG5ld1ByZWZpeCA6ICIiKTsgLy8kTk9OLU5MUy0xJAotCQkJCi0JCQkvLyBzZXQgdGFyZ2V0bmFtZXNwYWNlIGZpZWxkIGFuZCBwcmVmaXggZmllbGQKLQkJCWlmICh0YXJnZXROUyAhPSBudWxsKQotCQkJewotCQkJCXRhcmdldE5hbWVzcGFjZVRleHQuc2V0VGV4dCh0YXJnZXROUyk7Ci0JCQl9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRhcmdldE5hbWVzcGFjZVRleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLQkJCWlmIChuZXdQcmVmaXggIT0gbnVsbCkKLQkJCXsKLQkJCQlwcmVmaXhUZXh0LnNldFRleHQobmV3UHJlZml4KTsKLQkJCX0KLQkJfQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCQotCQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQlpZiAoZS53aWRnZXQgPT0gYnV0dG9uKQl7Ci0JCQlPYmplY3Qgb2JqID0gZ2V0RGVzY3JpcHRpb24oKTsKLQkJCWlmIChvYmogaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlJV29ya2JlbmNoUGFydCBwYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOwotCQkJCUFTREVkaXROYW1lc3BhY2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBBU0RFZGl0TmFtZXNwYWNlc0FjdGlvbihwYXJ0LCAoSURlc2NyaXB0aW9uKSBvYmopOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCQlyZWZyZXNoKCk7Ci0JICAgICAgICB9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUGFyYW1ldGVyU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1BhcmFtZXRlclNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU4OGQ3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUGFyYW1ldGVyU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklUYWJiZWRQcm9wZXJ0eUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJTZWN0aW9uIGV4dGVuZHMgTmFtZVNlY3Rpb24gewotCXByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIE5FV19TVFJJTkcgPSBNZXNzYWdlcy5fVUlfQlVUVE9OX05FVzsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIEJST1dTRV9TVFJJTkcgPSBNZXNzYWdlcy5fVUlfQlVUVE9OX0JST1dTRTsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBDTGFiZWwgY29tYm9MYWJlbDsgCi0JcHJvdGVjdGVkIENDb21ibyBjb21ibzsKLQlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVUeXBlU2NlbmFyaW8gPSB0cnVlOwotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBwYXJhbWV0ZXJSZWZNYW5hZ2VyOwotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQljcmVhdGVDb250cm9sQXJlYSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sQXJlYSgpCi0JewotCQlGb3JtRGF0YSBkYXRhOwotCQkKLQkJY29tYm8gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0NvbWJvKGNvbXBvc2l0ZSk7Ci0JCWNvbWJvLnNldEJhY2tncm91bmQoY29tcG9zaXRlLmdldEJhY2tncm91bmQoKSk7Ci0JCWNvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCQljb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJCi0JCWNvbWJvTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX1RZUEUgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIDAsIFNXVC5DRU5URVIpOwotCQljb21ib0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotLy8JCUJ1dHRvbiBidXR0b24gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQnV0dG9uKGNvbXBvc2l0ZSwgIiIsIFNXVC5QVVNIKTsgLy8kTk9OLU5MUy0xJAotLy8JCWJ1dHRvbi5zZXRJbWFnZShJbnRlcmZhY2VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0SW1hZ2UoImljb25zL29iajE2L2Jyb3dzZWJ1dHRvbi5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLS8vCQkKLS8vCQlidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0vLwkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotLy8JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlICsgMik7Ci0vLwkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOwotLy8JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHR5cGVDb21ibywgMCwgU1dULkNFTlRFUik7Ci0vLwkJYnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotLy8JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYnV0dG9uLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCWNvbWJvLnNldExheW91dERhdGEoZGF0YSk7Ci0JfQotCQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJaWYgKG5hbWVUZXh0LmlzRm9jdXNDb250cm9sKCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQkKLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJCi0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX1BBUlRfRUxFTUVOVF9DT01CTyk7Ci0KLQkJaWYgKGhhbmRsZVR5cGVTY2VuYXJpbykgewotCQkJcmVmcmVzaENvbWJvKCk7Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QQVJUX1RZUEVfQ09NQk8pOwotCQl9Ci0JCQotCQlzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKGNvbWJvKTsKLQkJCi0JCXNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcmVmcmVzaENvbWJvKCkgewotCQlJUGFyYW1ldGVyIHBhcmFtID0gbnVsbDsKLQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJCi0JCWlmIChtb2RlbCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCXBhcmFtID0gKElQYXJhbWV0ZXIpIG1vZGVsOwotCQl9Ci0JCQotCQlTdHJpbmcgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZyB0eXBlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCWlmIChwYXJhbSAhPSBudWxsKSB7Ci0JCQluYW1lID0gcGFyYW0uZ2V0TmFtZSgpOwotCQkJdHlwZU5hbWUgPSBwYXJhbS5nZXRDb21wb25lbnROYW1lKCk7Ci0JCX0KLQkJCi0JCWlmICghbmFtZVRleHQuaXNGb2N1c0NvbnRyb2woKSkgewotCQkJbmFtZVRleHQuc2V0VGV4dChuYW1lKTsKLQkJfQotCQkKLQkJLy8gUG9wdWxhdGUgdGhlIHR5cGUgQ29tYm8KLQkJY29tYm8ucmVtb3ZlQWxsKCk7Ci0JCWNvbWJvLmFkZChCUk9XU0VfU1RSSU5HKTsKLQkJY29tYm8uYWRkKE5FV19TVFJJTkcpOwotCQkKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQlpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkgewotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHNwZWNzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNwZWNzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJCWNvbWJvLmFkZCgoU3RyaW5nKSBzcGVjc1tpbmRleF0uZ2V0TmFtZSgpKTsKLQkJCX0KLQkJCQotCQkJc3BlY3MgPSBlZGl0TWFuYWdlci5nZXRIaXN0b3J5KCk7Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc3BlY3MubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJY29tYm8uYWRkKChTdHJpbmcpIHNwZWNzW2luZGV4XS5nZXROYW1lKCkpOwotCQkJfQotCQl9CQkKLQkJCi0JCS8vIERpc3BsYXkgdGhlIHR5cGUgaW4gdGhlIENvbWJvCi0JCVN0cmluZ1tdIGl0ZW1zID0gY29tYm8uZ2V0SXRlbXMoKTsKLQkJaW50IGluZGV4OwotCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCWlmIChpdGVtc1tpbmRleF0uZXF1YWxzKHR5cGVOYW1lKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCQotCQlpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGgpIHsKLQkJCS8vIEZvdW5kIGEgbWF0Y2gKLQkJCWNvbWJvLnNlbGVjdChpbmRleCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljb21iby5zZXRUZXh0KHR5cGVOYW1lKTsKLQkJfQotCQkKLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQl7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvKSB7Ci0JCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJCXsKLQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCXN0YXJ0RGVsYXllZEV2ZW50KGV2ZW50KTsKLQkJCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCXN1cGVyLmhhbmRsZUV2ZW50KGV2ZW50KTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJc3VwZXIuZG9IYW5kbGVFdmVudChldmVudCk7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8gJiYgaGFuZGxlVHlwZVNjZW5hcmlvKSB7Ci0JCQloYW5kbGVDb21ib1NlbGVjdGlvbigpOwotCQkJcmVmcmVzaCgpOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNvbWJvU2VsZWN0aW9uKCkgewotCQlTdHJpbmcgdmFsdWUgPSBjb21iby5nZXRJdGVtKGNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOwotCQkKLQkJSVBhcmFtZXRlciBwYXJhbWV0ZXIgPSAoSVBhcmFtZXRlcikgdGhpcy5nZXRNb2RlbCgpOwotCQkKLQkJaWYgKHZhbHVlLmVxdWFscyhORVdfU1RSSU5HKSkgewotCQkJQ29tbWFuZCBjb21tYW5kID0gcGFyYW1ldGVyLmdldFNldFR5cGVDb21tYW5kKElQYXJhbWV0ZXIuU0VUX05FV19BQ1RJT05fSUQpOwotCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JCX0KLQkJZWxzZSBpZiAodmFsdWUuZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQlDb21tYW5kIGNvbW1hbmQgPSBwYXJhbWV0ZXIuZ2V0U2V0VHlwZUNvbW1hbmQoSVBhcmFtZXRlci5TRUxFQ1RfRVhJU1RJTkdfQUNUSU9OX0lEKTsKLQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotCQl9Ci0JCWVsc2UgewotCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKChTdHJpbmcpdmFsdWUpOwotCQkJaWYgKHNwZWMgIT0gbnVsbCkgewotCQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShwYXJhbWV0ZXIsIHNwZWMpOwotCQkJfQotCQl9Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLQkJaWYgKHBhcmFtZXRlclJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJcmV0dXJuIHBhcmFtZXRlclJlZk1hbmFnZXI7Ci0JCX0JCQotICAgICAgICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElBU0RPYmplY3QpCi0gICAgICAgIHsgIAotCQkgIHBhcmFtZXRlclJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKElBU0RPYmplY3QpIGdldE1vZGVsKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibW9kZWwiICsgZ2V0TW9kZWwoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfSAgCi0JCXJldHVybiBwYXJhbWV0ZXJSZWZNYW5hZ2VyOwotCX0KLQkKLQkvLyBUT0RPOiBybWFoOiBUaGlzIGNvZGUgc2hvdWxkIGxpdmUgaW4gYSBjb21tb24gcGxhY2UuLi4uLiBUaGlzIGNvZGUgaXMgYWxzbyB1c2VkIGluIG90aGVyIFVJIHNjZW5hcmlvcyB3aGVuCi0JLy8gYSBzaW1pbGFyIGNvbWJvIGJveCBpcyB1c2VkLiAgRm9yIGV4YW1wbGUgaW4gRGlyZWN0IEVkaXQuLi4oVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyKSAgQWxzbyB1c2VkIGluIHRoZSBYU0RFZGl0b3IuLi4KLQlwcm90ZWN0ZWQgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoU3RyaW5nIHZhbHVlKQotCXsKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQlpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkKLQkJeyAgCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gcXVpY2tQaWNrcyA9IGVkaXRNYW5hZ2VyLmdldFF1aWNrUGlja3MoKTsKLQkJCWlmIChxdWlja1BpY2tzICE9IG51bGwpCi0JCQl7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgcXVpY2tQaWNrcy5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbiA9IHF1aWNrUGlja3NbaV07Ci0JCQkJCWlmICh2YWx1ZS5lcXVhbHMoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gY29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLQkJCQkJfSAgICAgICAgICAgICAgICAKLQkJCQl9ICAKLQkJCX0KLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBoaXN0b3J5ID0gZWRpdE1hbmFnZXIuZ2V0SGlzdG9yeSgpOwotCQkJaWYgKGhpc3RvcnkgIT0gbnVsbCkKLQkJCXsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBoaXN0b3J5Lmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uID0gaGlzdG9yeVtpXTsKLQkJCQkJaWYgKHZhbHVlLmVxdWFscyhjb21wb25lbnRTcGVjaWZpY2F0aW9uLmdldE5hbWUoKSkpCi0JCQkJCXsgIAotCQkJCQkJcmV0dXJuIGNvbXBvbmVudFNwZWNpZmljYXRpb247Ci0JCQkJCX0KLQkJCQl9ICAKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUmVmZXJlbmNlU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1JlZmVyZW5jZVNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyMmRkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUmVmZXJlbmNlU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0NvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlZmVyZW5jZVNlY3Rpb24gZXh0ZW5kcyBOYW1lU2VjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlJPV1NFX1NUUklORyA9IE1lc3NhZ2VzLl9VSV9CVVRUT05fQlJPV1NFOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkVXX1NUUklORyA9IE1lc3NhZ2VzLl9VSV9CVVRUT05fTkVXOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIENDb21ibyBjb21ibzsKLQlwcm90ZWN0ZWQgQ0xhYmVsIGNvbWJvTGFiZWw7Ci0JCi0JcHJvdGVjdGVkIExpc3QgaXRlbXNJbkNvbWJvID0gbmV3IEFycmF5TGlzdCgpOwotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNjcmVhdGVDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQkJRm9ybURhdGEgZGF0YTsKLQkJCi0JCS8vIENyZWF0ZSBDb21ibyByb3cgb2Ygd2lkZ2V0cwotCQljb21ib0xhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsICJSZWZlcmVuY2UiKTsgLy8kTk9OLU5MUy0xJAotCQljb21ibyA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDQ29tYm8oY29tcG9zaXRlKTsKLQkJY29tYm8uc2V0QmFja2dyb3VuZChjb21wb3NpdGUuZ2V0QmFja2dyb3VuZCgpKTsKLQotCQkvLyBMYXlvdXQgQ29tYm8gTGFiZWwKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIDAsIFNXVC5DRU5URVIpOwotCQljb21ib0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQkvLyBMYXlvdXQgQ29tYm8KLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCWNvbWJvLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvKSB7Ci0JCQlpZiAoaXNMaXN0ZW5lckVuYWJsZWQoKSAmJiAhaXNJbkRvSGFuZGxlKSAKLQkJCXsKLQkJCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJCXN0YXJ0RGVsYXllZEV2ZW50KGV2ZW50KTsKLQkJCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCXN1cGVyLmhhbmRsZUV2ZW50KGV2ZW50KTsKLQkJfQotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JCWNvbWJvLnJlbW92ZUxpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCQkKLQkJc3VwZXIucmVmcmVzaCgpOwotCQkKLQkJTGlzdCBjb21ib0l0ZW1zID0gZ2V0Q29tYm9JdGVtcygpOwotCQlpZiAoY29tYm9JdGVtcy5zaXplKCkgPiAwKSB7Ci0JCQljb21iby5yZW1vdmVBbGwoKTsKLQkJCWl0ZW1zSW5Db21iby5jbGVhcigpOwotCi0JCQkvLyBXZSBuZWVkIHRvIHBvcHVsYXRlIHRoaXMgY29tYm8gd2l0aCB0aGUgYXZhaWxhYmxlIHJlZmVyZW5jZXMKLQkJCS8vIFRPRE86IHJtYWg6IFdlIHNob3VsZCBpbmNsdWRlIHRoZSBwcmVmaXggYXMgd2VsbAotCQkJU3RyaW5nIGN1cnJlbnRDb21ib0l0ZW1OYW1lID0gZ2V0Q29tYm9JdGVtTmFtZShnZXRDdXJyZW50Q29tYm9JdGVtKCkpOwotCQkJaW50IGN1cnJlbnRCaW5kaW5nSW5kZXggPSAtMTsKLQkJCQotCQkJTGlzdCBpdGVtcyA9IGdldENvbWJvSXRlbXMoKTsKLQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5zaXplKCk7IGluZGV4KyspIHsKLQkJCQlPYmplY3QgaXRlbSA9IGl0ZW1zLmdldChpbmRleCk7Ci0JCQkJU3RyaW5nIGl0ZW1OYW1lID0gZ2V0Q29tYm9JdGVtTmFtZShpdGVtKTsKLQkJCQljb21iby5hZGQoaXRlbU5hbWUpOwotCQkJCWl0ZW1zSW5Db21iby5hZGQoaXRlbSk7Ci0KLQkJCQlpZiAoaXRlbU5hbWUuZXF1YWxzKGN1cnJlbnRDb21ib0l0ZW1OYW1lKSkgewotCQkJCQljdXJyZW50QmluZGluZ0luZGV4ID0gaW5kZXg7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoY3VycmVudEJpbmRpbmdJbmRleCAhPSAtMSkgewotCQkJCWNvbWJvLnNlbGVjdChjdXJyZW50QmluZGluZ0luZGV4KTsJCi0JCQl9Ci0JCX0KLQkJCi0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoY29tYm8pOwotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIGFic3RyYWN0IExpc3QgZ2V0Q29tYm9JdGVtcygpOwotCXByb3RlY3RlZCBhYnN0cmFjdCBPYmplY3QgZ2V0Q3VycmVudENvbWJvSXRlbSgpOwotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0Q29tYm9JdGVtTmFtZShPYmplY3QgaXRlbSk7Ci0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcGVyZm9ybUNvbWJvU2VsZWN0aW9uKE9iamVjdCBpdGVtKTsKLQkKLSAgcHVibGljIGJvb2xlYW4gc2hvdWxkVXNlRXh0cmFTcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotICB7Ci0JICBzdXBlci5kb0hhbmRsZUV2ZW50KGV2ZW50KTsKLQkgIGlmIChldmVudC53aWRnZXQgPT0gY29tYm8gJiYgIWNvbWJvLmlzRGlzcG9zZWQoKSkgewotCQkgIGludCBzZWxlY3Rpb25JbmRleCA9IGNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0JCSAgcGVyZm9ybUNvbWJvU2VsZWN0aW9uKGl0ZW1zSW5Db21iby5nZXQoc2VsZWN0aW9uSW5kZXgpKTsKLQkJICByZWZyZXNoKCk7Ci0JICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9BU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9BU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg5YjU1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3V0aWwvQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkFTREVkaXRQYXJ0RmFjdG9yeTsKLQotLyoqCi0gKiBAZGVwcmFjYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyIHsKLQlwcml2YXRlIHN0YXRpYyBBU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIgaW5zdGFuY2U7Ci0JCi0JcHJpdmF0ZSBFZGl0UGFydEZhY3RvcnkgZWRpdFBhcnRGYWN0b3J5OwotCQotCXB1YmxpYyBzdGF0aWMgQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotCQkJaW5zdGFuY2UgPSBuZXcgQVNERWRpdFBhcnRGYWN0b3J5SGVscGVyKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JCi0JcHVibGljIEVkaXRQYXJ0RmFjdG9yeSBnZXRFZGl0UGFydEZhY3RvcnkoKSB7Ci0JCWlmIChlZGl0UGFydEZhY3RvcnkgPT0gbnVsbCkgewotCQkJZWRpdFBhcnRGYWN0b3J5ID0gbmV3IEFTREVkaXRQYXJ0RmFjdG9yeSgpOwotCQl9Ci0JCXJldHVybiBlZGl0UGFydEZhY3Rvcnk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEVkaXRQYXJ0RmFjdG9yeShFZGl0UGFydEZhY3RvcnkgZmFjdG9yeSkgewotCQllZGl0UGFydEZhY3RvcnkgPSBmYWN0b3J5OwotCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJT2JqZWN0IGFkYXB0ZXIgPSBlZGl0b3IuZ2V0QWRhcHRlcihHcmFwaGljYWxWaWV3ZXIuY2xhc3MpOwotCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIERlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIpIHsKLQkJCSgoRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcikgYWRhcHRlcikuc2V0RWRpdFBhcnRGYWN0b3J5KGZhY3RvcnkpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0VuZFBvaW50Q29tcGFyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0VuZFBvaW50Q29tcGFyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjlhM2FiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9FbmRQb2ludENvbXBhcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci0KLXB1YmxpYyBjbGFzcyBFbmRQb2ludENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yIHsKLQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJaWYgKG8xIGluc3RhbmNlb2YgSUVuZFBvaW50ICYmIG8yIGluc3RhbmNlb2YgSUVuZFBvaW50KSB7Ci0JCQlJQmluZGluZyBiaW5kaW5nMSA9ICgoSUVuZFBvaW50KSBvMSkuZ2V0QmluZGluZygpOwotCQkJSUJpbmRpbmcgYmluZGluZzIgPSAoKElFbmRQb2ludCkgbzIpLmdldEJpbmRpbmcoKTsKLQotCQkJaWYgKGJpbmRpbmcxICE9IG51bGwgJiYgYmluZGluZzIgIT0gbnVsbCkgewotCQkJCUlJbnRlcmZhY2UgaW50ZXJmYWNlMSA9IGJpbmRpbmcxLmdldEludGVyZmFjZSgpOwotCQkJCUlJbnRlcmZhY2UgaW50ZXJmYWNlMiA9IGJpbmRpbmcyLmdldEludGVyZmFjZSgpOwotCi0JCQkJaWYgKGludGVyZmFjZTEgIT0gbnVsbCAmJiBpbnRlcmZhY2UyICE9IG51bGwpIHsKLQkJCQkJU3RyaW5nIG5hbWUxID0gaW50ZXJmYWNlMS5nZXROYW1lKCk7Ci0JCQkJCVN0cmluZyBuYW1lMiA9IGludGVyZmFjZTIuZ2V0TmFtZSgpOwotCQkJCQlyZXR1cm4gbmFtZTEuY29tcGFyZVRvKG5hbWUyKTsKLQkJCQl9Ci0KLQkJCQlyZXR1cm4gZG9OdWxsQ29tcGFyaXNvbihpbnRlcmZhY2UxLCBpbnRlcmZhY2UyKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIGRvTnVsbENvbXBhcmlzb24oYmluZGluZzEsIGJpbmRpbmcyKTsKLQkJfQotCi0JCXJldHVybiBkb051bGxDb21wYXJpc29uKG8xLCBvMik7Ci0JfQotCQotCXByaXZhdGUgaW50IGRvTnVsbENvbXBhcmlzb24oT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJaWYgKG8xICE9IG51bGwgJiYgbzIgPT0gbnVsbCkgewotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWVsc2UgaWYgKG8xID09IG51bGwgJiYgbzIgIT0gbnVsbCkgewotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJCi0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9JT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3V0aWwvSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmEzZGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9JT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciB7Ci0JcHVibGljIHZvaWQgc2V0TW9kZWwoT2JqZWN0IG9iamVjdCk7Ci0JcHVibGljIHZvaWQgb3BlbkV4dGVybmFsRWRpdG9yKCk7Ci0JcHVibGljIGJvb2xlYW4gbGlua0FwcGxpY2FibGUoKTsKLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCk7Ci0JcHVibGljIHZvaWQgc2hvd1ByZXZpZXcoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL1dTRExDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvV1NETENvbXBvbmVudFJlbmFtZVBhcnRpY2lwYW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZmM3M2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvV1NETENvbXBvbmVudFJlbmFtZVBhcnRpY2lwYW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLnJlbmFtZS5Db21wb25lbnRSZW5hbWVBcmd1bWVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5yZW5hbWUuWE1MQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotCi0vKioKLSAqIFRoaXMgcGFydGljaXBhbnQgdGFrZXMgY2FzZSBvZiByZW5hbWluZyBtYXRjaGVzIHRoYXQgYXJlIFhTRCBjb21wb25lbnRzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQgZXh0ZW5kcyBYTUxDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudCB7Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpbml0aWFsaXplKE9iamVjdCBlbGVtZW50KSB7Ci0KLQkJaWYoZWxlbWVudCBpbnN0YW5jZW9mIFdTRExFbGVtZW50IHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBYU0ROYW1lZENvbXBvbmVudCl7Ci0JCQlpZihnZXRBcmd1bWVudHMoKSBpbnN0YW5jZW9mIENvbXBvbmVudFJlbmFtZUFyZ3VtZW50cyl7Ci0JCQkJbWF0Y2hlcyA9IChMaXN0KSgoQ29tcG9uZW50UmVuYW1lQXJndW1lbnRzKWdldEFyZ3VtZW50cygpKS5nZXRNYXRjaGVzKCkuZ2V0KElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFKTsKLQkJCX0KLQkJCWlmKG1hdGNoZXMgIT0gbnVsbCl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJCi0JCXJldHVybiAiV1NETCBjb21wb25lbnQgcmVuYW1lIHBhcnRpY2lwYW50IjsgLy8kTk9OLU5MUy0xJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvUmVuYW1lQ29tcG9uZW50QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1JlbmFtZUNvbXBvbmVudEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTM5NTI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvUmVuYW1lQ29tcG9uZW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucGFydGljaXBhbnRzLlJlbmFtZVJlZmFjdG9yaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3RvcmluZy5SZWZhY3RvcmluZ1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmcuUmVmYWN0b3JpbmdXaXphcmRPcGVuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5HbG9iYWxCdWlsZEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLmRpYWxvZ3MuU2F2ZURpcnR5RmlsZXNEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTm9kZUFzc29jaWF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5SZWZhY3RvcmluZ0NvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlJlZmFjdG9yaW5nTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5YTUxSZWZhY3RvcmluZ0NvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLnJlbmFtZS5SZW5hbWVDb21wb25lbnRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci53aXphcmQuUmVuYW1lUmVmYWN0b3JpbmdXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJlbmFtZUNvbXBvbmVudEFjdGlvbiBleHRlbmRzIFdTRExTZWxlY3Rpb25EaXNwYXRjaEFjdGlvbiB7Ci0KLQlwcml2YXRlIFJlZmFjdG9yaW5nQ29tcG9uZW50IHNlbGVjdGVkQ29tcG9uZW50OwotCi0JcHVibGljIFJlbmFtZUNvbXBvbmVudEFjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbiwKLQkJCURlZmluaXRpb24gbW9kZWwpIHsKLQkJc3VwZXIoc2VsZWN0aW9uKTsKLQkJc2V0TW9kZWwobW9kZWwpOwotCX0KLSAKLQlwcm90ZWN0ZWQgYm9vbGVhbiBkb0NhbkVuYWJsZVhTRFNlbGVjdGlvbihYU0ROYW1lZENvbXBvbmVudCBzZWxlY3RlZE9iamVjdCkgewotCi0JCXNlbGVjdGVkQ29tcG9uZW50ID0gbnVsbDsKLQkJaWYgKHNlbGVjdGVkT2JqZWN0ICE9IG51bGwpIHsKLQkJCXNlbGVjdGVkQ29tcG9uZW50ID0gbmV3IFhNTFJlZmFjdG9yaW5nQ29tcG9uZW50KAotCQkJCQlzZWxlY3RlZE9iamVjdCwKLQkJCQkJKElET01FbGVtZW50KXNlbGVjdGVkT2JqZWN0LmdldEVsZW1lbnQoKSwgCi0JCQkJCXNlbGVjdGVkT2JqZWN0LmdldE5hbWUoKSwKLQkJCQkJc2VsZWN0ZWRPYmplY3QuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCQotCQkJLy8gaWYgaXQncyBlbGVtZW50IHJlZmVyZW5jZSwgdGhlbiB0aGlzIGFjdGlvbiBpcyBub3QgYXBwcm9wcmlhdGUKLQkJCWlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgc2VsZWN0ZWRPYmplY3Q7Ci0JCQkJaWYgKGVsZW1lbnQuaXNFbGVtZW50RGVjbGFyYXRpb25SZWZlcmVuY2UoKSkgewotCQkJCQlzZWxlY3RlZENvbXBvbmVudCA9IG51bGw7Ci0JCQkJfQotCQkJfQotCQkJaWYoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbil7Ci0JCQkJWFNEVHlwZURlZmluaXRpb24gdHlwZSA9IChYU0RUeXBlRGVmaW5pdGlvbikgc2VsZWN0ZWRPYmplY3Q7Ci0JCQkJWFNEQ29uY3JldGVDb21wb25lbnQgcGFyZW50ID0gdHlwZS5nZXRDb250YWluZXIoKTsKLQkJCQlpZiAocGFyZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgcGFyZW50OwotCQkJCQlpZihlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkuZXF1YWxzKHR5cGUpKXsKLQkJCQkJCXNlbGVjdGVkQ29tcG9uZW50ID0gbnVsbDsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIGlmKHBhcmVudCBpbnN0YW5jZW9mIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKSB7Ci0JCQkJCVhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNEQXR0cmlidXRlRGVjbGFyYXRpb24pIHBhcmVudDsKLQkJCQkJaWYoZWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpLmVxdWFscyh0eXBlKSl7Ci0JCQkJCQlzZWxlY3RlZENvbXBvbmVudCA9IG51bGw7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gY2FuUnVuKCk7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGRvQ2FuRW5hYmxlV1NETFNlbGVjdGlvbihXU0RMRWxlbWVudCBzZWxlY3RlZE9iamVjdCkgewotCi0JCXNlbGVjdGVkQ29tcG9uZW50ID0gbnVsbDsKLQkJU3RyaW5nIGxvY2FsTmFtZSA9IG51bGw7Ci0JCVN0cmluZyBuYW1lc3BhY2UgPSBudWxsOyAKLQkJaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZyl7Ci0JCQlsb2NhbE5hbWUgPSAoKEJpbmRpbmcpc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQluYW1lc3BhY2UgPSAoKEJpbmRpbmcpc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCX0KLQkJZWxzZSBpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBQb3J0VHlwZSl7Ci0JCQlsb2NhbE5hbWUgPSAoKFBvcnRUeXBlKXNlbGVjdGVkT2JqZWN0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJbmFtZXNwYWNlID0gKChQb3J0VHlwZSlzZWxlY3RlZE9iamVjdCkuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJfQotCQllbHNlIGlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIE1lc3NhZ2UpewotCQkJbG9jYWxOYW1lID0gKChNZXNzYWdlKXNlbGVjdGVkT2JqZWN0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJbmFtZXNwYWNlID0gKChNZXNzYWdlKXNlbGVjdGVkT2JqZWN0KS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQl9Ci0JCWlmKGxvY2FsTmFtZSAhPSBudWxsKXsKLQkJCXNlbGVjdGVkQ29tcG9uZW50ID0gbmV3IFhNTFJlZmFjdG9yaW5nQ29tcG9uZW50KAotCQkJCQlzZWxlY3RlZE9iamVjdCwKLQkJCQkJKElET01FbGVtZW50KXNlbGVjdGVkT2JqZWN0LmdldEVsZW1lbnQoKSwgCi0JCQkJCWxvY2FsTmFtZSwKLQkJCQkJbmFtZXNwYWNlKTsKLQkJfQotCQkKLQkKLQkJcmV0dXJuIGNhblJ1bigpOwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGNhbkVuYWJsZShPYmplY3Qgc2VsZWN0ZWRPYmplY3QpIHsKLQotCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBYU0ROYW1lZENvbXBvbmVudCkgewotCQkJcmV0dXJuIGRvQ2FuRW5hYmxlWFNEU2VsZWN0aW9uKChYU0ROYW1lZENvbXBvbmVudCkgc2VsZWN0ZWRPYmplY3QpOwotCQl9IGVsc2UgaWYoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudEltcGwpewotCQkJcmV0dXJuIGRvQ2FuRW5hYmxlV1NETFNlbGVjdGlvbigoV1NETEVsZW1lbnRJbXBsKSBzZWxlY3RlZE9iamVjdCk7Ci0JCX0KLQkJaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkgewotCQkJRWxlbWVudCBub2RlID0gKEVsZW1lbnQpIHNlbGVjdGVkT2JqZWN0OwotCQkJaWYgKGdldERlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJLy8gaXNzdWUgKGViKSAgZGVwZW5kZW5jeSBvbiB1dGlsaXR5IGNsYXNzIHRvIGdldCBjb21wb25lbnQgZnJvbSB0aGUgbW9kZWwgYmFzZWQgb24gZWxlbWVudAotCQkJCU9iamVjdCBjb25jcmV0ZUNvbXBvbmVudCA9IAkobmV3IE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIoKSkuZ2V0TW9kZWxPYmplY3RGb3JOb2RlKGdldERlZmluaXRpb24oKSwgbm9kZSk7Ci0JCQkJcmV0dXJuIGNhbkVuYWJsZShjb25jcmV0ZUNvbXBvbmVudCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCi0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuUnVuKCkgewotCi0JCXJldHVybiBzZWxlY3RlZENvbXBvbmVudCAhPSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bihJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQotICAgICAgICBib29sZWFuIHJjID0gU2F2ZURpcnR5RmlsZXNEaWFsb2cuc2F2ZURpcnR5RmlsZXMoKTsKLSAgICAgICAgaWYgKCFyYykKLSAgICAgICAgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSAgCi0JCVJlbmFtZUNvbXBvbmVudFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgUmVuYW1lQ29tcG9uZW50UHJvY2Vzc29yKHNlbGVjdGVkQ29tcG9uZW50LCBzZWxlY3RlZENvbXBvbmVudC5nZXROYW1lKCkpOwotCQlSZW5hbWVSZWZhY3RvcmluZyByZWZhY3RvcmluZyA9IG5ldyBSZW5hbWVSZWZhY3RvcmluZyhwcm9jZXNzb3IpOwotCQl0cnkgewotCQkJUmVmYWN0b3JpbmdXaXphcmQgd2l6YXJkID0gbmV3IFJlbmFtZVJlZmFjdG9yaW5nV2l6YXJkKAotCQkJCQlyZWZhY3RvcmluZywKLQkJCQkJUmVmYWN0b3JpbmdNZXNzYWdlcwotCQkJCQkuZ2V0U3RyaW5nKCJSZW5hbWVDb21wb25lbnRXaXphcmQuZGVmYXVsdFBhZ2VUaXRsZSIpLCAvLyROT04tTkxTLTEkIFRPRE86IHByb3ZpZGUgY29ycmVjdCBzdHJpbmdzCi0JCQkJCVJlZmFjdG9yaW5nTWVzc2FnZXMKLQkJCQkJLmdldFN0cmluZygiUmVuYW1lQ29tcG9uZW50V2l6YXJkLmlucHV0UGFnZS5kZXNjcmlwdGlvbiIpLCAvLyROT04tTkxTLTEkCi0JCQkJCW51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJjID0gc3VwZXIucGVyZm9ybUZpbmlzaCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8oKERlZmluaXRpb25JbXBsKWdldERlZmluaXRpb24oKSkucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB9OyAgICAgICAgCi0JCQlSZWZhY3RvcmluZ1dpemFyZE9wZW5PcGVyYXRpb24gb3AgPSBuZXcgUmVmYWN0b3JpbmdXaXphcmRPcGVuT3BlcmF0aW9uKAotCQkJCQl3aXphcmQpOwotCQkJb3AucnVuKFdTRExFZGl0b3JQbHVnaW4uZ2V0U2hlbGwoKSwgd2l6YXJkCi0JCQkJCS5nZXREZWZhdWx0UGFnZVRpdGxlKCkpOwotCQkJdHJpZ2dlckJ1aWxkKCk7Ci0gICAgICAgICAgICAKLQkJCURpc3BsYXkuZ2V0Q3VycmVudCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKQotCQkJewkJCSAgCi0JCQkgIHB1YmxpYyB2b2lkIHJ1bigpCi0JCQkgIHsKLQkJCSAgICAoKERlZmluaXRpb25JbXBsKWdldERlZmluaXRpb24oKSkucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLQkJCSAgfQotCQkJfSk7ICAKLSAgICAgICAgICAgIAotCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLiBVc2VyIGFjdGlvbiBnb3QgY2FuY2VsbGVkCi0JCX0KLQkJCi0JCWlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgRGVmaW5pdGlvbkltcGwpIHsKLQkJCSgoRGVmaW5pdGlvbkltcGwpIGdldE1vZGVsKCkpLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJpZ2dlckJ1aWxkKCkgewotCQlpZiAoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldERlc2NyaXB0aW9uKCkuaXNBdXRvQnVpbGRpbmcoKSkgewotCQkJbmV3IEdsb2JhbEJ1aWxkQWN0aW9uKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKQotCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCksCi0JCQkJCUluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQpLnJ1bigpOwotCQl9Ci0JfQotCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExSZWZhY3RvckFjdGlvbkdyb3VwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExSZWZhY3RvckFjdGlvbkdyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNGE3MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvYWN0aW9ucy9XU0RMUmVmYWN0b3JBY3Rpb25Hcm91cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zLlJlbmFtZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLndpemFyZC5SZWZhY3RvckFjdGlvbkdyb3VwOwotCi1wdWJsaWMgY2xhc3MgV1NETFJlZmFjdG9yQWN0aW9uR3JvdXAgZXh0ZW5kcyBSZWZhY3RvckFjdGlvbkdyb3VwIHsKLQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTkFNRV9FTEVNRU5UID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0JCi0JcHVibGljIFdTRExSZWZhY3RvckFjdGlvbkdyb3VwKElTZWxlY3Rpb24gc2VsZWN0aW9uLAotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCQotCQlzdXBlcihzZWxlY3Rpb24pOyAKLQkgIAlpZiggZGVmaW5pdGlvbiAhPSBudWxsKXsKLQkJCWZFZGl0b3JBY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkJUmVuYW1lQ29tcG9uZW50QWN0aW9uIGFjdGlvbiA9IG5ldyBSZW5hbWVDb21wb25lbnRBY3Rpb24oc2VsZWN0aW9uLCBkZWZpbml0aW9uKTsKLQkJCWZSZW5hbWVBY3Rpb24gPSBuZXcgUmVuYW1lQWN0aW9uKHNlbGVjdGlvbik7Ci0JCQlmUmVuYW1lQWN0aW9uLnNldFJlbmFtZUNvbXBvbmVudEFjdGlvbihhY3Rpb24pOwotCQkJZlJlbmFtZUFjdGlvbi5zZXRBY3Rpb25EZWZpbml0aW9uSWQoUkVOQU1FX0VMRU1FTlQpOwotCQkJZkVkaXRvckFjdGlvbnMuYWRkKGZSZW5hbWVBY3Rpb24pOwotCQkJaW5pdEFjdGlvbihmUmVuYW1lQWN0aW9uLCBzZWxlY3Rpb24pOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJLy9kaXNwb3NlQWN0aW9uKGZSZW5hbWVBY3Rpb24sIGZTZWxlY3Rpb25Qcm92aWRlcik7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDU4MGRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydFNpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLkZpbGVTdG9yZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSVNlbGVjdGlvbk1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLndpemFyZC5SZWZhY3RvckFjdGlvbkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3Iud2l6YXJkLlJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLndpemFyZC5SZWZhY3Rvckdyb3VwU3ViTWVudTsKLQotcHVibGljIGNsYXNzIFdTRExSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUgZXh0ZW5kcyBSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHVibGljIFdTRExSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotICAvKioKLSAgICogRmlsbHMgdGhlIG1lbnUgd2l0aCBhcHBsaWNhYmxlIHJlZmFjdG9yIHN1Yi1tZW51ZXMKLSAgICogCi0gICAqIEBwYXJhbSBtZW51Ci0gICAqICAgICAgICAgIFRoZSBtZW51IHRvIGZpbGwKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGZpbGxNZW51KE1lbnUgbWVudSkKLSAgewotICAgIGlmIChmU2VsZWN0aW9uID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAod29ya2JlbmNoUGFydCAhPSBudWxsKQotICAgIHsKLSAgICAgIElXb3JrYmVuY2hQYXJ0U2l0ZSBzaXRlID0gd29ya2JlbmNoUGFydC5nZXRTaXRlKCk7Ci0gICAgICBpZiAoc2l0ZSA9PSBudWxsKQotICAgICAgICByZXR1cm47Ci0gICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBzaXRlLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgYm9vbGVhbiBzaG91bGRGaWxsTWVudSA9IGVkaXRvciAhPSBudWxsICYmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgfHwgZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlU3RvcmVFZGl0b3JJbnB1dCk7Ci0gICAgICBpZiAoc2hvdWxkRmlsbE1lbnUpCi0gICAgICB7Ci0gICAgICAgIElTZWxlY3Rpb25NYXBwZXIgbWFwcGVyID0gKElTZWxlY3Rpb25NYXBwZXIpIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25NYXBwZXIuY2xhc3MpOwotICAgICAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1hcHBlciAhPSBudWxsID8gbWFwcGVyLm1hcFNlbGVjdGlvbihmU2VsZWN0aW9uKSA6IGZTZWxlY3Rpb247Ci0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlZGl0b3IuZ2V0QWRhcHRlcihEZWZpbml0aW9uLmNsYXNzKTsKLSAgICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgUmVmYWN0b3JBY3Rpb25Hcm91cCByZWZhY3Rvck1lbnVHcm91cCA9IG5ldyBXU0RMUmVmYWN0b3JBY3Rpb25Hcm91cChzZWxlY3Rpb24sIGRlZmluaXRpb24pOwotICAgICAgICAgIFJlZmFjdG9yR3JvdXBTdWJNZW51IHN1Yk1lbnUgPSBuZXcgUmVmYWN0b3JHcm91cFN1Yk1lbnUocmVmYWN0b3JNZW51R3JvdXApOwotICAgICAgICAgIHN1Yk1lbnUuZmlsbChtZW51LCAtMSk7Ci0gICAgICAgIH0gIAotICAgICAgfQotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExTZWxlY3Rpb25EaXNwYXRjaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODBmNjM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9ucy5TZWxlY3Rpb25EaXNwYXRjaEFjdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uIGV4dGVuZHMgU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24KLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRU5BTUVfRUxFTUVOVCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBXU0RMU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQlzdXBlcihzZWxlY3Rpb24pOwotCX0KLQkKLQlwcm90ZWN0ZWQgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCl7Ci0JCU9iamVjdCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCWlmKG1vZGVsIGluc3RhbmNlb2YgRGVmaW5pdGlvbikKLQkJewotCQkJcmV0dXJuIChEZWZpbml0aW9uKSBtb2RlbDsKLQkJfQotCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL0lXU0RMU2VhcmNoQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvSVdTRExTZWFyY2hDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2YzVjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvSVdTRExTZWFyY2hDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2g7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElXU0RMU2VhcmNoQ29uc3RhbnRzIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfTkFNRVNQQUNFID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTFNDSEVNQV9OQU1FU1BBQ0UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBNRVNTQUdFX01FVEFfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKAotCQkJV1NETF9OQU1FU1BBQ0UsICJtZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBQT1JUX1RZUEVfTUVUQV9OQU1FID0gbmV3IFF1YWxpZmllZE5hbWUoCi0JCQlXU0RMX05BTUVTUEFDRSwgInBvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBCSU5ESU5HX01FVEFfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKAotCQkJV1NETF9OQU1FU1BBQ0UsICJiaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLQotCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaENvbnRyaWJ1dG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZDIzMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL1dTRExTZWFyY2hDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLkNvbXBvbmVudFNlYXJjaENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5JWFNEU2VhcmNoQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlYXJjaENvbnRyaWJ1dG9yIGV4dGVuZHMgQ29tcG9uZW50U2VhcmNoQ29udHJpYnV0b3IgewotCi0KLQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRGVjbGFyYXRpb25zKCkgewotCi0JCWRlY2xhcmF0aW9ucyA9IG5ldyBIYXNoTWFwKCk7Ci0JCVN0cmluZyBucyA9IElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFOwotCi0JCVNlYXJjaFBhdHRlcm4gcGF0dGVybiA9IG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAibWVzc2FnZSIsICJuYW1lIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlkZWNsYXJhdGlvbnMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBwYXR0ZXJuKTsKLQotCQlwYXR0ZXJuID0gbmV3IFhNTFNlYXJjaFBhdHRlcm4oIG5zLCAicG9ydFR5cGUiLCAibmFtZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZGVjbGFyYXRpb25zLnB1dChJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FLCBwYXR0ZXJuKTsKLQotCQlwYXR0ZXJuID0gbmV3IFhNTFNlYXJjaFBhdHRlcm4obnMsICJiaW5kaW5nIiwgIm5hbWUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWRlY2xhcmF0aW9ucy5wdXQoSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUsIHBhdHRlcm4pOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgIGluaXRpYWxpemVSZWZlcmVuY2VzKCkgewotCi0JCXJlZmVyZW5jZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlTdHJpbmcgbnMgPSBJV1NETFNlYXJjaENvbnN0YW50cy5XU0RMX05BTUVTUEFDRTsKLQotCQlMaXN0IHBhdHRlcm5zID0gbmV3IEFycmF5TGlzdCgpOwotCQlwYXR0ZXJucy5hZGQobmV3IFhNTFNlYXJjaFBhdHRlcm4oIG5zLCAicGFydCIsICJlbGVtZW50IikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcmVmZXJlbmNlcy5wdXQoSVhTRFNlYXJjaENvbnN0YW50cy5FTEVNRU5UX01FVEFfTkFNRSwgcGF0dGVybnMpOwotCi0JCXBhdHRlcm5zID0gbmV3IEFycmF5TGlzdCgpOwotCQlwYXR0ZXJucy5hZGQobmV3IFhNTFNlYXJjaFBhdHRlcm4obnMsICJwYXJ0IiwgInR5cGUiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlyZWZlcmVuY2VzLnB1dChJWFNEU2VhcmNoQ29uc3RhbnRzLkNPTVBMRVhfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAicGFydCIsICJ0eXBlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcmVmZXJlbmNlcy5wdXQoSVhTRFNlYXJjaENvbnN0YW50cy5TSU1QTEVfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAiaW5wdXQiLCAibWVzc2FnZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXBhdHRlcm5zLmFkZChuZXcgWE1MU2VhcmNoUGF0dGVybihucywgIm91dHB1dCIsICJtZXNzYWdlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAiZmF1bHQiLCAibWVzc2FnZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBwYXR0ZXJucyk7Ci0KLQkJcGF0dGVybnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXBhdHRlcm5zLmFkZChuZXcgWE1MU2VhcmNoUGF0dGVybihucywgImJpbmRpbmciLCAidHlwZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKCBucywgInBvcnQiLCAiYmluZGluZyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FLCBwYXR0ZXJucyk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWROYW1lc3BhY2VzKCkgewotCQluYW1lc3BhY2VzID0gbmV3IFN0cmluZ1tdeyBJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UsIElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFfTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9XU0RMU2VhcmNoUGFydGljaXBhbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9XU0RMU2VhcmNoUGFydGljaXBhbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAyNTUyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaFBhcnRpY2lwYW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guU2VhcmNoUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5TZWFyY2hQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlNlYXJjaFBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5Db21wb25lbnRTZWFyY2hDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudERlY2xhcmF0aW9uUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudFJlZmVyZW5jZVBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5YTUxDb21wb25lbnRTZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MU2VhcmNoUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5YTUxTZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLklYU0RTZWFyY2hDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VhcmNoUGFydGljaXBhbnQgZXh0ZW5kcyBYTUxTZWFyY2hQYXJ0aWNpcGFudCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnNlYXJjaC5XU0RMU2VhcmNoUGFydGljaXBhbnQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFhTRF9QQVJUSUNJUEFOTlRfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC5zZWFyY2guWFNEU2VhcmNoUGFydGljaXBhbnQiOyAvLyROT04tTkxTLTEkCi0KLQkKLQlwdWJsaWMgV1NETFNlYXJjaFBhcnRpY2lwYW50KCkKLQl7Ci0JICBzdXBlcigpOwotICAgICAgaWQgPSBJRDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldFN1cHBvcnRlZENvbnRlbnRUeXBlcygpCi0JewotCSAgU3RyaW5nW10gcmVzdWx0ID0geyAib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIgfTsgLy8kTk9OLU5MUy0xJAotCSAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNBcHBsaWNhYmxlKFNlYXJjaFBhdHRlcm4gcGF0dGVybiwgTWFwIHNlYXJjaE9wdGlvbnMpCi0JewotCQlpZihwYXR0ZXJuIGluc3RhbmNlb2YgWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVybiApewotCQkJWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVybiBjb21wb25lbnRQYXR0ZXJuID0gKFhNTENvbXBvbmVudFNlYXJjaFBhdHRlcm4pcGF0dGVybjsKLQkJCVN0cmluZyBuYW1lc3BhY2UgPSBjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkuZ2V0TmFtZXNwYWNlKCk7Ci0JCQlpZihJV1NETFNlYXJjaENvbnN0YW50cy5XU0RMX05BTUVTUEFDRS5lcXVhbHMobmFtZXNwYWNlKSB8fAotCQkJCQlJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UuZXF1YWxzKG5hbWVzcGFjZSkpewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9CQotCQotCXB1YmxpYyBDb21wb25lbnRTZWFyY2hDb250cmlidXRvciBnZXRTZWFyY2hDb250cmlidXRvcigpIHsKLQotCQlyZXR1cm4gbmV3IFdTRExTZWFyY2hDb250cmlidXRvcigpOwotCX0KLQkKLSAgcHVibGljIHZvaWQgYmVnaW5TZWFyY2hpbmcoU2VhcmNoUGF0dGVybiBwYXR0ZXJuLCBNYXAgc2VhcmNoT3B0aW9ucykgewotCQkKLQkJc3VwZXIuYmVnaW5TZWFyY2hpbmcocGF0dGVybiwgc2VhcmNoT3B0aW9ucyk7Ci0JCUxpc3QgcGF0dGVybnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmKHBhdHRlcm4gaW5zdGFuY2VvZiBYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4pewotCQkJCi0JCQlYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4gY29tcG9uZW50UGF0dGVybiA9IChYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4pcGF0dGVybjsKLQkJCWlmKElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFLmVxdWFscyhjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkuZ2V0TmFtZXNwYWNlKCkpKXsKLQkJCQlYTUxTZWFyY2hQYXR0ZXJuIGNoaWxkUGF0dGVybiA9IGdldFNlYXJjaENvbnRyaWJ1dG9yKCkuZ2V0RGVjbGFyYXRpb25QYXR0ZXJuKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQkJaWYoY2hpbGRQYXR0ZXJuICE9IG51bGwpewotCQkJCQljaGlsZFBhdHRlcm4uc2V0U2VhcmNoTmFtZShjb21wb25lbnRQYXR0ZXJuLmdldE5hbWUoKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwotCSAgICAgCQkJcGF0dGVybnMuYWRkKGNoaWxkUGF0dGVybik7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZihJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UuZXF1YWxzKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKS5nZXROYW1lc3BhY2UoKSkpewotCQkJCVNlYXJjaFBhcnRpY2lwYW50IHhzZFBhcnRpY2lwYW50ID0gU2VhcmNoUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTZWFyY2hQYXJ0aWNpcGFudChYU0RfUEFSVElDSVBBTk5UX0lEKTsKLQkJCQlpZih4c2RQYXJ0aWNpcGFudCBpbnN0YW5jZW9mIFhNTFNlYXJjaFBhcnRpY2lwYW50KXsKLQkJCQkJQ29tcG9uZW50U2VhcmNoQ29udHJpYnV0b3IgeHNkQ29udHJpYnV0b3IgPSAoKFhNTFNlYXJjaFBhcnRpY2lwYW50KXhzZFBhcnRpY2lwYW50KS5nZXRTZWFyY2hDb250cmlidXRvcigpOwotCQkJCQlpZih4c2RDb250cmlidXRvciAhPSBudWxsKXsKLQkJCQkJCVhNTFNlYXJjaFBhdHRlcm4gY2hpbGRQYXR0ZXJuID0geHNkQ29udHJpYnV0b3IuZ2V0RGVjbGFyYXRpb25QYXR0ZXJuKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQkJCQlpZihjaGlsZFBhdHRlcm4gIT0gbnVsbCl7Ci0JCQkJCQkJY2hpbGRQYXR0ZXJuLnNldFNlYXJjaE5hbWUoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TG9jYWxOYW1lKCkpOwotCQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwotCQkJICAgICAJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNvbXBvbmVudFBhdHRlcm4uc2V0Q2hpbGRyZW4oKFhNTFNlYXJjaFBhdHRlcm5bXSkgcGF0dGVybnMudG9BcnJheShuZXcgWE1MU2VhcmNoUGF0dGVybltwYXR0ZXJucy5zaXplKCldKSk7Ci0JCQkKLQkJfQotCQllbHNlIGlmKHBhdHRlcm4gaW5zdGFuY2VvZiBYTUxDb21wb25lbnRSZWZlcmVuY2VQYXR0ZXJuKXsKLQkJCVhNTENvbXBvbmVudFJlZmVyZW5jZVBhdHRlcm4gY29tcG9uZW50UGF0dGVybiA9IChYTUxDb21wb25lbnRSZWZlcmVuY2VQYXR0ZXJuKXBhdHRlcm47Ci0JCQlYTUxTZWFyY2hQYXR0ZXJuW10gY2hpbGRQYXR0ZXJucyA9IGdldFNlYXJjaENvbnRyaWJ1dG9yKCkuZ2V0UmVmZXJlbmNlc1BhdHRlcm5zKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkUGF0dGVybnMubGVuZ3RoOyBpKyspIHsKLQkJCQlYTUxTZWFyY2hQYXR0ZXJuIGNoaWxkUGF0dGVybiA9IGNoaWxkUGF0dGVybnNbaV07Ci0JCQkJY2hpbGRQYXR0ZXJuLnNldFNlYXJjaE5hbWUoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TG9jYWxOYW1lKCkpOwotCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwkKLQkJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCX0KLQkJCVNlYXJjaFBhcnRpY2lwYW50IHhzZFBhcnRpY2lwYW50ID0gU2VhcmNoUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTZWFyY2hQYXJ0aWNpcGFudChYU0RfUEFSVElDSVBBTk5UX0lEKTsKLQkJCWlmKHhzZFBhcnRpY2lwYW50IGluc3RhbmNlb2YgWE1MU2VhcmNoUGFydGljaXBhbnQpewotCQkJCUNvbXBvbmVudFNlYXJjaENvbnRyaWJ1dG9yIHhzZENvbnRyaWJ1dG9yID0gKChYTUxTZWFyY2hQYXJ0aWNpcGFudCl4c2RQYXJ0aWNpcGFudCkuZ2V0U2VhcmNoQ29udHJpYnV0b3IoKTsKLQkJCQlpZih4c2RDb250cmlidXRvciAhPSBudWxsKXsKLQkJCQkJY2hpbGRQYXR0ZXJucyA9IHhzZENvbnRyaWJ1dG9yLmdldFJlZmVyZW5jZXNQYXR0ZXJucyhjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkUGF0dGVybnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCVhNTFNlYXJjaFBhdHRlcm4gY2hpbGRQYXR0ZXJuID0gY2hpbGRQYXR0ZXJuc1tpXTsKLQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lKGNvbXBvbmVudFBhdHRlcm4uZ2V0TmFtZSgpLmdldExvY2FsTmFtZSgpKTsKLQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwkJCi0JCQkJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNvbXBvbmVudFBhdHRlcm4uc2V0Q2hpbGRyZW4oKFhNTFNlYXJjaFBhdHRlcm5bXSkgcGF0dGVybnMudG9BcnJheShuZXcgWE1MU2VhcmNoUGF0dGVybltwYXR0ZXJucy5zaXplKCldKSk7Ci0JCQkKLQkJfQotCQkKLQl9Ci0KLSAgCi0gIAotCQotCQotCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MWM3NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExGaW5kUmVmZXJlbmNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9uczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc2VhcmNoLnVpLk5ld1NlYXJjaFVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5Xb3Jrc3BhY2VTZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLklTZWxlY3Rpb25NYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guWFNEU2VhcmNoUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9ucy5GaW5kQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotCXByaXZhdGUgV1NETEJhc2VBZGFwdGVyIGNvbXBvbmVudDsKLQlwcml2YXRlIElGaWxlIGZpbGU7Ci0JcHJpdmF0ZSBRdWFsaWZpZWROYW1lW10gbmFtZXM7Ci0KLSAgcHVibGljIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbihJRWRpdG9yUGFydCBlZGl0b3IpCi0gIHsKLSAgICBzdXBlcihlZGl0b3IpOwotICAgIGluaXQoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXQoKSB7Ci0JY29tcG9uZW50ID0gZ2V0V1NETE5hbWVkQ29tcG9uZW50KCk7Ci0JZmlsZSA9IGdldEN1cnJlbnRGaWxlKCk7Ci0JbmFtZXMgPSBkZXRlcm1pbmVNZXRhQW5kUXVhbGlmaWVkTmFtZShjb21wb25lbnQpOwotCWlmIChmaWxlID09IG51bGwgfHwgY29tcG9uZW50ID09IG51bGwgfHwgbmFtZXMgPT0gbnVsbCkKLQkgIHNldEVuYWJsZWQoZmFsc2UpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25EZWZpbml0aW9uSWQoU3RyaW5nIHN0cmluZykKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFRvIGJlIHVzZWQgYnkgc3ViY2xhc3MgaW4gaXRzIHJ1bigpIFJldHVybnMgdGhlIGZpbGUgd2hlcmUgdGhlIHNlbGVjdGlvbiBvZgotICAgKiBhIGNvbXBvbmVudCAoZnJvbSB0aGUgdXNlcikgb2NjdXJzIGllLiBSZXR1cm5zIHRoZSBmaWxlIHRoYXQgdGhlIHVzZXIgaXMKLSAgICogY3VycmVudGx5IHdvcmtpbmcgb24uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBJRmlsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCB3b3JraW5nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgSUZpbGUgZ2V0Q3VycmVudEZpbGUoKQotICB7Ci0gICAgaWYgKGVkaXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgSUZpbGVFZGl0b3JJbnB1dCBmaWxlRWRpdG9ySW5wdXQgPSAoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQ7Ci0gICAgICAgIHJldHVybiBmaWxlRWRpdG9ySW5wdXQuZ2V0RmlsZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBUbyBiZSB1c2VkIGJ5IHN1YmNsYXNzIGluIGl0cyBydW4oKS4uIERldGVybWluZXMgdGhlIG1ldGFOYW1lIG9mIHRoZSBXU0RMCi0gICAqIGNvbXBvbmVudCBnaXZlbiB0byB0aGlzIG1ldGhvZC4KLSAgICogCi0gICAqIEBwYXJhbSBjb21wb25lbnQKLSAgICogICAgICAgICAgVGhlIGNvbXBvbmVudCBvZiB3aGljaCB3ZSB3YW50IHRvIGRldGVybWluZSB0aGUgbmFtZQotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIGZpcnN0IG9uZSBpcyBmb3IgTWV0YU5hbWUvVHlwZSwgc2Vjb25kIGZvciBFbGVtZW50UXVhbGlmaWVkTmFtZQotICAgKi8KLSAgcHJvdGVjdGVkIFF1YWxpZmllZE5hbWVbXSBkZXRlcm1pbmVNZXRhQW5kUXVhbGlmaWVkTmFtZShXU0RMQmFzZUFkYXB0ZXIgY29tcG9uZW50KQotICB7Ci0gICAgUXVhbGlmaWVkTmFtZSBuYW1lc1tdID0gbnVsbDsKLSAgICBRTmFtZSBxTmFtZTsKLQlpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgVzExTWVzc2FnZSApCi0gICAgewotCQluYW1lcyA9IG5ldyBRdWFsaWZpZWROYW1lWzJdOwotICAgIAluYW1lc1swXSA9IElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FOwotICAgIAlxTmFtZSA9ICgoTWVzc2FnZSkgY29tcG9uZW50LmdldFRhcmdldCgpKS5nZXRRTmFtZSgpOwotICAgIAluYW1lc1sxXSA9IG5ldyBRdWFsaWZpZWROYW1lKHFOYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBxTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFcxMUludGVyZmFjZSkKLSAgICB7Ci0gICAgCW5hbWVzID0gbmV3IFF1YWxpZmllZE5hbWVbMl07Ci0gICAgCW5hbWVzWzBdID0gSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRTsKLSAgICAJcU5hbWUgPSAoKFBvcnRUeXBlKSBjb21wb25lbnQuZ2V0VGFyZ2V0KCkpLmdldFFOYW1lKCk7Ci0gICAgCW5hbWVzWzFdID0gbmV3IFF1YWxpZmllZE5hbWUocU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgVzExQmluZGluZykKLSAgICB7Ci0gICAgCW5hbWVzID0gbmV3IFF1YWxpZmllZE5hbWVbMl07Ci0gICAgCW5hbWVzWzBdID0gSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUU7Ci0gICAgCXFOYW1lID0gKChCaW5kaW5nKSBjb21wb25lbnQuZ2V0VGFyZ2V0KCkpLmdldFFOYW1lKCk7Ci0gICAgCW5hbWVzWzFdID0gbmV3IFF1YWxpZmllZE5hbWUocU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLQotICAgIH0KLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIGdldFdTRExOYW1lZENvbXBvbmVudCgpCi0gIHsKLSAgICBpZiAoZWRpdG9yICE9IG51bGwpCi0gICAgewotICAgICAgSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yLmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLSAgICAgIElTZWxlY3Rpb25NYXBwZXIgbWFwcGVyID0gKElTZWxlY3Rpb25NYXBwZXIpIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25NYXBwZXIuY2xhc3MpOwotICAgICAgaWYgKHByb3ZpZGVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gcHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChtYXBwZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlbGVjdGlvbiA9IG1hcHBlci5tYXBTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0gICAgICAgICAgT2JqZWN0IG8gPSBzLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgICAgIGlmIChvICE9IG51bGwgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFdTRExCYXNlQWRhcHRlcikgbzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gVGhlIGV4cGVjdGVkIGNvbXBvbmVudCB3ZSBnZXQgZnJvbSB0aGUgZWRpdG9yIGRvZXMgbm90IG1lZXQKLSAgICAvLyBvdXIgZXhwZWN0YXRpb24KLSAgICByZXR1cm4gbnVsbDsKLSAgfSAgCi0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIFN0cmluZyBwYXR0ZXJuID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICBpZiAoZmlsZSAhPSBudWxsICYmIGNvbXBvbmVudCAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgU2VhcmNoU2NvcGUgc2NvcGUgPSBuZXcgV29ya3NwYWNlU2VhcmNoU2NvcGUoKTsKLSAgICAgIFN0cmluZyBzY29wZURlc2NyaXB0aW9uID0gIldvcmtzcGFjZSI7Ci0gICAgICBYU0RTZWFyY2hRdWVyeSBzZWFyY2hRdWVyeSA9IG5ldyBYU0RTZWFyY2hRdWVyeShwYXR0ZXJuLCBmaWxlLCBuYW1lc1sxXSwgCi0gICAgCQkgIG5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7Ci0gICAgICBOZXdTZWFyY2hVSS5hY3RpdmF0ZVNlYXJjaFJlc3VsdFZpZXcoKTsKLSAgICAgIE5ld1NlYXJjaFVJLnJ1blF1ZXJ5SW5CYWNrZ3JvdW5kKHNlYXJjaFF1ZXJ5KTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ4NDBmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc2VhcmNoLnVpLk5ld1NlYXJjaFVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuUHJvamVjdFNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5YU0RTZWFyY2hRdWVyeTsKLQotcHVibGljIGNsYXNzIFdTRExGaW5kUmVmZXJlbmNlc0luUHJvamVjdEFjdGlvbiBleHRlbmRzIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbnsKLQlwdWJsaWMgV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uKElFZGl0b3JQYXJ0IGVkaXRvcikKLQl7Ci0JCXN1cGVyKGVkaXRvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKCkKLQl7Ci0JCVN0cmluZyBwYXR0ZXJuID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJV1NETEJhc2VBZGFwdGVyIGNvbXBvbmVudCA9IGdldFdTRExOYW1lZENvbXBvbmVudCgpOwotCQlJRmlsZSBmaWxlID0gZ2V0Q3VycmVudEZpbGUoKTsKLQkJUXVhbGlmaWVkTmFtZVtdIG5hbWVzID0gZGV0ZXJtaW5lTWV0YUFuZFF1YWxpZmllZE5hbWUoY29tcG9uZW50KTsKLQkJaWYgKGZpbGUgIT0gbnVsbCAmJiBjb21wb25lbnQgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotCQl7Ci0JCQlJUGF0aCBmdWxsUGF0aCA9IGZpbGUuZ2V0RnVsbFBhdGgoKTsKLQkJCVByb2plY3RTZWFyY2hTY29wZSBzY29wZSA9IG5ldyBQcm9qZWN0U2VhcmNoU2NvcGUoZnVsbFBhdGgpOwotCQkJU3RyaW5nIHNjb3BlRGVzY3JpcHRpb24gPSAiUHJvamVjdCI7Ci0JCQlYU0RTZWFyY2hRdWVyeSBzZWFyY2hRdWVyeSA9IG5ldyBYU0RTZWFyY2hRdWVyeShwYXR0ZXJuLCBmaWxlLCBuYW1lc1sxXSwgCi0JCQkJCW5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7Ci0JCQlOZXdTZWFyY2hVSS5hY3RpdmF0ZVNlYXJjaFJlc3VsdFZpZXcoKTsKLQkJCU5ld1NlYXJjaFVJLnJ1blF1ZXJ5SW5CYWNrZ3JvdW5kKHNlYXJjaFF1ZXJ5KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5M2Q3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnNlYXJjaC51aS5OZXdTZWFyY2hVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2luZ1NldDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSVdvcmtpbmdTZXRTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5Xb3JraW5nU2V0U2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5YU0RTZWFyY2hRdWVyeTsKLQotcHVibGljIGNsYXNzIFdTRExGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbiBleHRlbmRzIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbnsKLQkKLQlwdWJsaWMgV1NETEZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uKElFZGl0b3JQYXJ0IGVkaXRvcikgewotCQlzdXBlcihlZGl0b3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKXsKLQkJSVdvcmtpbmdTZXRbXSB3b3JraW5nU2V0cyA9IHF1ZXJ5V29ya2luZ1NldHMoKTsKLQkJaWYgKCB3b3JraW5nU2V0cyA9PSBudWxsIHx8IHdvcmtpbmdTZXRzLmxlbmd0aCA9PSAwKQotCQkJLy8gVGhlIHVzZXIgY2hvb3NlcyBub3RoaW5nLCBubyBwb2ludCB0byBjb250aW51ZS4KLQkJCXJldHVybjsKLQkJU3RyaW5nIHBhdHRlcm4gPSAiIjsgLy8kTk9OLU5MUy0xJAotCi0JCVdTRExCYXNlQWRhcHRlciBjb21wb25lbnQgPSBnZXRXU0RMTmFtZWRDb21wb25lbnQoKTsKLQkJSUZpbGUgZmlsZSA9IGdldEN1cnJlbnRGaWxlKCk7Ci0JCVF1YWxpZmllZE5hbWVbXSBuYW1lcyA9IGRldGVybWluZU1ldGFBbmRRdWFsaWZpZWROYW1lKGNvbXBvbmVudCk7Ci0JCWlmICggZmlsZSAhPSBudWxsICYmIGNvbXBvbmVudCAhPSBudWxsKXsKLQkJCS8vIENyZWF0ZSBhIHNjb3BlIGZyb20gdGhlIHNlbGVjdGVkIHdvcmtpbmcgc2V0cwotCQkJV29ya2luZ1NldFNlYXJjaFNjb3BlIHNjb3BlID0gbmV3IFdvcmtpbmdTZXRTZWFyY2hTY29wZSgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB3b3JraW5nU2V0cy5sZW5ndGg7IGkrKyl7Ci0JCQkJSUFkYXB0YWJsZVtdIGVsZW1lbnRzID0gd29ya2luZ1NldHNbaV0uZ2V0RWxlbWVudHMoKTsKLQkJCQlzY29wZS5hZGRBV29ya2luZ1NldFRvU2NvcGUoZWxlbWVudHMpOwotCQkJfQotCi0JCQlTdHJpbmcgc2NvcGVEZXNjcmlwdGlvbiA9ICJXb3JraW5nIFNldCI7ICAgIAotCQkJWFNEU2VhcmNoUXVlcnkgc2VhcmNoUXVlcnkgPSAKLQkJCQluZXcgWFNEU2VhcmNoUXVlcnkocGF0dGVybiwgZmlsZSwgbmFtZXNbMV0sIG5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7ICAgIAotCQkJTmV3U2VhcmNoVUkuYWN0aXZhdGVTZWFyY2hSZXN1bHRWaWV3KCk7Ci0JCQlOZXdTZWFyY2hVSS5ydW5RdWVyeUluQmFja2dyb3VuZChzZWFyY2hRdWVyeSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyBhIGRpYWxvZyBhc2tpbmcgdGhlIHVzZXIgdG8gY2hvb3NlIHRoZSB3b3JraW5nIFNldHMgaGUgd2FudHMKLQkgKiB0byBkbyB0aGUgc2VhcmNoIG9uCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtpbmdTZXRbXSBxdWVyeVdvcmtpbmdTZXRzKCl7Ci0JCVNoZWxsIHNoZWxsPSBYU0RFZGl0b3JQbHVnaW4uZ2V0U2hlbGwoKTsKLQkJaWYgKHNoZWxsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJSVdvcmtpbmdTZXRTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0KLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0V29ya2luZ1NldE1hbmFnZXIoKS5jcmVhdGVXb3JraW5nU2V0U2VsZWN0aW9uRGlhbG9nKHNoZWxsLCB0cnVlKTsKLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQlJV29ya2luZ1NldFtdIHdvcmtpbmdTZXRzPSBkaWFsb2cuZ2V0U2VsZWN0aW9uKCk7Ci0JCQlpZiAod29ya2luZ1NldHMubGVuZ3RoID4gMCkKLQkJCQlyZXR1cm4gd29ya2luZ1NldHM7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExSZWZlcmVuY2VzU2VhcmNoR3JvdXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMUmVmZXJlbmNlc1NlYXJjaEdyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZjZmZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExSZWZlcmVuY2VzU2VhcmNoR3JvdXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLlNlYXJjaE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuUmVmZXJlbmNlc1NlYXJjaEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cCBleHRlbmRzIFJlZmVyZW5jZXNTZWFyY2hHcm91cCAgewotICAgIC8qKgotICAgICAqIE5vdGU6IFRoaXMgY29uc3RydWN0b3IgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBDbGllbnRzIHNob3VsZCBub3QgY2FsbCB0aGlzIGNvbnN0cnVjdG9yLgotICAgICAqIEBwYXJhbSBlZGl0b3IKLSAgICAgKi8KLSAgICBwdWJsaWMgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cChJRWRpdG9yUGFydCBlZGl0b3IpIHsKLSAgICAJc3VwZXIoZWRpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLS8vICAgICAgZkdyb3VwSWQ9IElUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzLkdST1VQX0ZJTkQ7Ci0gICAgCQotICAgIAlmRmluZFJlZmVyZW5jZXNBY3Rpb249IG5ldyBXU0RMRmluZFJlZmVyZW5jZXNBY3Rpb24oZkVkaXRvcik7Ci0gICAgICAgIGZGaW5kUmVmZXJlbmNlc0FjdGlvbi5zZXRUZXh0KFNlYXJjaE1lc3NhZ2VzLlNlYXJjaF9GaW5kRGVjbGFyYXRpb25BY3Rpb25fbGFiZWwpOwotICAgICAgICBmRmluZFJlZmVyZW5jZXNBY3Rpb24uc2V0QWN0aW9uRGVmaW5pdGlvbklkKCJTRUFSQ0hfUkVGRVJFTkNFU19JTl9XT1JLU1BBQ0UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAvL2ZFZGl0b3Iuc2V0QWN0aW9uKCJTZWFyY2hSZWZlcmVuY2VzSW5Xb3Jrc3BhY2UiLCBmRmluZFJlZmVyZW5jZXNBY3Rpb24pOyAvLyROT04tTkxTLTEkCi0KLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uPSBuZXcgV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uKGZFZGl0b3IpOwotICAgICAgICBmRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uc2V0VGV4dChTZWFyY2hNZXNzYWdlcy5TZWFyY2hfRmluZERlY2xhcmF0aW9uc0luUHJvamVjdEFjdGlvbl9sYWJlbCk7ICAgICAgICAKLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uLnNldEFjdGlvbkRlZmluaXRpb25JZCgiU0VBUkNIX1JFRkVSRU5DRVNfSU5fUFJPSkVDVCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIC8vZkVkaXRvci5zZXRBY3Rpb24oIlNlYXJjaFJlZmVyZW5jZXNJblByb2plY3QiLCBmRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24pOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgICAgIGZGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbj0gbmV3IFdTRExGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbihmRWRpdG9yKTsKLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uLnNldFRleHQoU2VhcmNoTWVzc2FnZXMuU2VhcmNoX0ZpbmREZWNsYXJhdGlvbnNJbldvcmtpbmdTZXRBY3Rpb25fbGFiZWwpOyAgICAgICAgIAotICAgICAgICBmRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uc2V0QWN0aW9uRGVmaW5pdGlvbklkKCIuU0VBUkNIX1JFRkVSRU5DRVNfSU5fV09SS0lOR19TRVQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAvL2ZFZGl0b3Iuc2V0QWN0aW9uKCJTZWFyY2hSZWZlcmVuY2VzSW5Xb3JraW5nU2V0IiwgZkZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMU2VhcmNoUmVmZXJlbmNlc0dyb3VwQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMU2VhcmNoUmVmZXJlbmNlc0dyb3VwQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmYzIwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5hY3Rpb25zLkJhc2VHcm91cEFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuWFNEU2VhcmNoR3JvdXBTdWJNZW51OwotCi1wdWJsaWMgY2xhc3MgV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlIGV4dGVuZHMgQmFzZUdyb3VwQWN0aW9uRGVsZWdhdGUKLXsKLSAgICBwcm90ZWN0ZWQgdm9pZCBmaWxsTWVudShNZW51IG1lbnUpIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZiAoZlNlbGVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdvcmtiZW5jaFBhcnQgIT0gbnVsbCkKLSAgICAgICAgewotCQkgIElXb3JrYmVuY2hQYXJ0U2l0ZSBzaXRlID0gd29ya2JlbmNoUGFydC5nZXRTaXRlKCk7Ci0JCQlpZiAoc2l0ZSA9PSBudWxsKQotCQkJICByZXR1cm47Ci0JCi0JCSAgSUVkaXRvclBhcnQgZWRpdG9yID0gc2l0ZS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgICAgaWYgKCBlZGl0b3IgIT0gbnVsbCApewotICAgICAgICAgICAgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cCByZWZlcmVuY2VzR3JvdXAgPSBuZXcgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cChlZGl0b3IpOwotICAgICAgICAgICAgWFNEU2VhcmNoR3JvdXBTdWJNZW51IHN1Yk1lbnUgPSBuZXcgWFNEU2VhcmNoR3JvdXBTdWJNZW51KHJlZmVyZW5jZXNHcm91cCk7Ci0gICAgICAgICAgICBzdWJNZW51LmZpbGwobWVudSwgLTEpOwotICAgICAgICAgIH0KLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzFjMjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNvYXAuY3VzdG9taXphdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLmN1c3RvbWl6YXRpb25zLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgVUlfU1BFQ0lGWV9QQVJUU19ESUFMT0dfVElUTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVUlfUEFSVFNfQlVUVE9OOwotCi0Jc3RhdGljIHsKLQkJLy8gbG9hZCBtZXNzYWdlIHZhbHVlcyBmcm9tIGJ1bmRsZSBmaWxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCQkvLyBjYW5ub3QgY3JlYXRlIG5ldyBpbnN0YW5jZQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQTm9kZUVkaXRvclByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvU09BUE5vZGVFZGl0b3JQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY2OTEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQTm9kZUVkaXRvclByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTm9kZUFzc29jaWF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uY3VzdG9tLkRpYWxvZ05vZGVFZGl0b3JDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuYXBwaW5mby5jdXN0b20uTm9kZUVkaXRvckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLmN1c3RvbS5Ob2RlRWRpdG9yUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgYSBOb2RlRWRpdG9yUHJvdmlkZXIgY2FuIHV0aWxpemUgdGhlIFdTREwgbW9kZWwgaWYgcmVxdWlyZWQKLSAqIChhbmQgaXMgbm90IGxpbWl0ZWQgdG8gdGhlIERPTSBtb2RlbCkuICBJdCdzIGhvcGUgdGhhdCBwb3RlbnRpYWwgYWRvcHRlcnMgY2FuIHByb3ZpZGUgZmVlZGJhY2sgYW5kIG9wZW4KLSAqIGJ1Z3Mgd2hlcmUgdGhleSBmaW5kIHN1cHBvcnQgaXMgbGFja2luZyBvciBpbmNvbnZlbmllbnQuIAotICovCi1wdWJsaWMgY2xhc3MgU09BUE5vZGVFZGl0b3JQcm92aWRlciBleHRlbmRzIE5vZGVFZGl0b3JQcm92aWRlcgotewotICBwdWJsaWMgTm9kZUVkaXRvckNvbmZpZ3VyYXRpb24gZ2V0Tm9kZUVkaXRvckNvbmZpZ3VyYXRpb24oU3RyaW5nIHBhcmVudE5hbWUsIFN0cmluZyBub2RlTmFtZSkKLSAgewotICAgIC8vIFRPRE8gKGNzKSB0aGlzIGV4dGVuc2lvbiBpcyBvbmx5IGRlc2lnbmVkIHRvIHdvcmsgd2hlbiB1c2VkIHZpYSB0aGUgV1NETCBFZGl0b3IgY29udGV4dC4KLSAgICAvLyBSZXVzZSBmcm9tIG90aGVyIGNvbnRleHQgaXMgcG9zc2libGUgdG9vIGlmIHRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGFwcHJvcHJpYXRlICdnZXRBZGFwdGVyJyBiZWhhdmlvdXIuCi0gICAgLy8gV2UgbmVlZCB0byByZXZpc2l0IHRoaXMgYW5kIGdldCBtb3JlIGZlZWRiYWNrIGZyb20gYWRvcHRlcnMgdG8gc2VlIGlmIGRpZmZlcmVudCBhcHByb2FjaCBpcyByZXF1aXJlZCAKLSAgICAvLyBpbiBvcmRlciB0byBvYnRhaW4gYSBXU0RMIG1vZGVsLgotLy8gICAgLwotICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgIGZpbmFsIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWVkaXRvci5nZXRBZGFwdGVyKERlZmluaXRpb24uY2xhc3MpOwotICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBpZiAocGFyZW50TmFtZS5lcXVhbHMoImJvZHkiKSAmJiBub2RlTmFtZS5lcXVhbHMoInBhcnRzIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgewotICAgICAgICAvLyBnZWUuLi4gdGhpcyBjYXNlIHNvdW5kcyBzb3J0YSBtb3JiaWQgZWg/Ci0gICAgICAgIC8vCi0gICAgICAgIHJldHVybiBuZXcgRGlhbG9nTm9kZUVkaXRvckNvbmZpZ3VyYXRpb24oKQotICAgICAgICB7ICAgICAgICAgICAgICAgIAotICAgICAgICAgIHB1YmxpYyB2b2lkIGludm9rZURpYWxvZygpCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICAgIHsgICAgICAgICAgIAotICAgICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudClnZXRQYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAvLyBUT0RPIChjcykgSSB0aGluayB3ZSBzaG91bGQgcHVzaCB0aGlzIGZ1bmN0aW9uIGRvd24gdG8gdGhlIFdTREwgbW9kZWwgKGFsYSBYU0QgbW9kZWwpCi0gICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgIE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgbm9kZUFzc29jaWF0aW9uTWFuYWdlciA9IG5ldyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCk7Ci0gICAgICAgICAgICAgIE9iamVjdCBvID0gbm9kZUFzc29jaWF0aW9uTWFuYWdlci5nZXRNb2RlbE9iamVjdEZvck5vZGUoZGVmaW5pdGlvbiwgZWxlbWVudCk7Ci0gICAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICAgIFNPQVBTZWxlY3RQYXJ0c0RpYWxvZyBkaWFsb2cgPSBuZXcgU09BUFNlbGVjdFBhcnRzRGlhbG9nKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCksIGRlZmluaXRpb24sIChTT0FQQm9keSlvKTsKLSAgICAgICAgICAgICAgICBkaWFsb2cuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgZGlhbG9nLmdldFNoZWxsKCkuc2V0VGV4dChNZXNzYWdlcy5VSV9TUEVDSUZZX1BBUlRTX0RJQUxPR19USVRMRSk7ICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgaW50IHJjID0gZGlhbG9nLm9wZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAocmMgPT0gRGlhbG9nLk9LKQotICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgICBQYXJ0W10gcGFydHMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRQYXJ0cygpOwotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICAgICAgICBQYXJ0IHBhcnQgPSBwYXJ0c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gcGFydC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICIgIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIC8vIFRPRE8gKGNzKSB3ZSBuZWVkIHRvIHByb3ZpZGUgJ2NvbW1hbmQnIHN1cHBvcnQgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIHVuZG8gcHJvcGVybHkKLSAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInBhcnRzIiwgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgfSAgICAgICAgCi0gICAgICAgICAgcHVibGljIFN0cmluZyBnZXRCdXRvblRleHQoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBNZXNzYWdlcy5VSV9QQVJUU19CVVRUT047IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAgCi0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL1NPQVBTZWxlY3RQYXJ0c0RpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL1NPQVBTZWxlY3RQYXJ0c0RpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWRlMGUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQU2VsZWN0UGFydHNEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNoZWNrYm94VHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLQotcHVibGljIGNsYXNzIFNPQVBTZWxlY3RQYXJ0c0RpYWxvZyBleHRlbmRzIERpYWxvZwoteyAgCi0gIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgU09BUEJvZHkgYm9keTsKLSAgQ2hlY2tib3hUcmVlVmlld2VyIGNoZWNrTGlzdDsKLSAgUGFydFtdIHNlbGVjdGVkUGFydHMgPSB7fTsKLSAgCi0gIHB1YmxpYyBTT0FQU2VsZWN0UGFydHNEaWFsb2coU2hlbGwgcGFyZW50U2hlbGwsIERlZmluaXRpb24gZGVmaW5pdGlvbiwgU09BUEJvZHkgYm9keSkKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsKTsgIAotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKXN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICBjaGVja0xpc3QgPSBuZXcgQ2hlY2tib3hUcmVlVmlld2VyKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIEdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0gICAgZ3JpZERhdGEuaGVpZ2h0SGludCA9IDEwMDsKLSAgICBncmlkRGF0YS53aWR0aEhpbnQgPSAyMDA7Ci0gICAgY2hlY2tMaXN0LmdldENvbnRyb2woKS5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKLSAgICBjaGVja0xpc3Quc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJbnRlcm5hbFRyZWVDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgY2hlY2tMaXN0LnNldExhYmVsUHJvdmlkZXIobmV3IEludGVybmFsTGFiZWxQcm92aWRlcigpKTsKLSAgICBjaGVja0xpc3Quc2V0SW5wdXQoIiIpOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgTGlzdCBsaXN0ID0gYm9keS5nZXRQYXJ0cygpOwotICAgIGNoZWNrTGlzdC5zZXRDaGVja2VkRWxlbWVudHMobGlzdC50b0FycmF5KCkpOyAgICAgCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkKLSAgewotICAgIE9iamVjdFtdIGNoZWNrZWQgPSBjaGVja0xpc3QuZ2V0Q2hlY2tlZEVsZW1lbnRzKCk7Ci0gICAgc2VsZWN0ZWRQYXJ0cyA9IG5ldyBQYXJ0W2NoZWNrZWQubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoZWNrZWQubGVuZ3RoOyBpKyspCi0gICAgeyAgCi0gICAgICBzZWxlY3RlZFBhcnRzW2ldID0gKFBhcnQpY2hlY2tlZFtpXTsKLSAgICB9IAotICAgIHN1cGVyLm9rUHJlc3NlZCgpOyAgICAKLSAgfQotICAKLSAKLSAgY2xhc3MgSW50ZXJuYWxMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWVsZW1lbnQ7Ci0gICAgICByZXR1cm4gcGFydC5nZXROYW1lKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wYXJ0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgY2xhc3MgSW50ZXJuYWxUcmVlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIKLSAgeyAgCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0gICAgeyAgICAKLSAgICAgIEVPYmplY3QgY29udGFpbmVyID0gYm9keS5lQ29udGFpbmVyKCk7Ci0gICAgICBNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UgPSBudWxsOwotICAgICAgaWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVJlZmVyZW5jZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZUlucHV0KChCaW5kaW5nSW5wdXQpY29udGFpbmVyKTsgCi0gICAgICB9IAotICAgICAgZWxzZSBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVJlZmVyZW5jZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZU91dHB1dCgoQmluZGluZ091dHB1dCljb250YWluZXIpOyAgICAgICAgIAotICAgICAgfSAgCi0gICAgICBpZiAobWVzc2FnZVJlZmVyZW5jZSAhPSBudWxsICYmIG1lc3NhZ2VSZWZlcmVuY2UuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gbWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLnRvQXJyYXkoKTsKLSAgICAgIH0gIAotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QudG9BcnJheSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVC50b0FycmF5KCk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsgICAgICAKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0gICAgewotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBQYXJ0W10gZ2V0U2VsZWN0ZWRQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWRQYXJ0czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzZmE4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLVVJX1NQRUNJRllfUEFSVFNfRElBTE9HX1RJVExFPVNwZWNpZnkgUGFydHMKLVVJX1BBUlRTX0JVVFRPTj0uLi4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlODdhZGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkgZXhjbHVkaW5nPSJ3c2RsdmFsaWRhdGV1aS98d3NkbHZhbGlkYXRlLyIga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvdmFsaWRhdGlvbi9pbnRlcm5hbC9kZWxlZ2F0ZXMvRGVsZWdhdGluZ1ZhbGlkYXRvciIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MDMyZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzZGx2YWxpZGF0ZS5qYXIKLXdzZGx2YWxpZGF0ZXVpLmphcgotd3NkbHZhbGlkYXRlc3JjLnppcAotd3NkbHZhbGlkYXRldWlzcmMuemlwCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOTBjMzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiZmNhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6MzA6MjkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1Y2VjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6MzA6MjkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTkwNTcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVfUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb247IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4zMDEucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuVmFsaWRhdGVXU0RMUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlX1BST1ZJREVSX05BTUUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZzt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWU7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5zb2FwO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuYXBhY2hlLmFudDtidW5kbGUtdmVyc2lvbj0iWzEuNi41LDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjIuMCwxLjMuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5hcGFjaGUueGVyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMi44LjAsMy4wLjApIjt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYjI0YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZXhzZC8KLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9leHNkL2V4dHZhbGlkYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2QvZXh0dmFsaWRhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZThkZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2QvZXh0dmFsaWRhdG9yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgaWQ9ImV4dHZhbGlkYXRvciIgbmFtZT0iV1NETCBFeHRlbnNpb24gVmFsaWRhdG9yIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBXU0RMIEV4dGVuc2lvbiBWYWxpZGF0b3IgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIGNvbnRyaWJ1dGUgYSB2YWxpZGF0b3IgdGhhdCBwcm92aWRlcyBjdXN0b20gdmFsaWRhdGlvbiBsb2dpYyBmb3IgV1NETCAxLjEgZG9jdW1lbnRzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJleHR2YWxpZGF0b3IiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHR2YWxpZGF0b3IiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JV1NETFZhbGlkYXRvciIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgV1NETCBuYW1lc3BhY2UgZm9yIHdoaWNoIHRoaXMgdmFsaWRhdG9yIHNob3VsZCBydW4uIEN1cnJlbnRseSB0aGUgb25seSBhY2NlcHRlZCB2YWx1ZSBpcyBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIFdTREwgRXh0ZW5zaW9uIFZhbGlkYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgaWQ9JnF1b3Q7d3NkbFdTSVZhbGlkYXRvciZxdW90OwotICAgICAgICAgbmFtZT0mcXVvdDtXU0RMIFdTLUkgVmFsaWRhdG9yJnF1b3Q7Ci0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmV4dHZhbGlkYXRvciZxdW90OyZndDsKLSAgICAgICZsdDtleHR2YWxpZGF0b3IKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyZxdW90OwotICAgICAgICAgICAgY2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC52YWxpZGF0ZS53c2RsLldTRExWYWxpZGF0b3ImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7L2V4dHZhbGlkYXRvciZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7Y29kZSZndDsKLW9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwudmFsaWRhdGUud3NkbC5XU0RMVmFsaWRhdG9yCi0mbHQ7L2NvZGUmZ3Q7Ci1Db250cmlidXRlcyBXUy1JIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBuYW1lc3BhY2UgaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8uCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9leHNkL3dzZGwxMXZhbGlkYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YjYwZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgaWQ9IndzZGwxMXZhbGlkYXRvciIgbmFtZT0iV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gY29udHJpYnV0ZSBhIHZhbGlkYXRvciBmb3IgYSBzcGVjaWZpYyBuYW1lc3BhY2UgdG8gV1NETCAxLjEgdmFsaWRhdGlvbi4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0idmFsaWRhdG9yIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0idmFsaWRhdG9yIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIHZhbGlkYXRvciB3aWxsIHZhbGlkYXRlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi53c2RsMTF2YWxpZGF0b3ImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7dmFsaWRhdG9yCi0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5odHRwLkhUVFBWYWxpZGF0b3ImcXVvdDsKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvJnF1b3Q7LyZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRvciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtjb2RlJmd0Owotb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cC5IVFRQVmFsZGlhdG9yCi0mbHQ7L2NvZGUmZ3Q7Ci1Db250cmlidXRlcyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgbmFtZXNwYWNlIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8uCi0mbHQ7Y29kZSZndDsKLW9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWUuTUlNRVZhbGRpYXRvcgotJmx0Oy9jb2RlJmd0OwotQ29udHJpYnV0ZXMgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIG5hbWVzcGFjZSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvLgotJmx0O2NvZGUmZ3Q7Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5zb2FwLlNPQVBWYWxkaWF0b3IKLSZsdDsvY29kZSZndDsKLUNvbnRyaWJ1dGVzIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBuYW1lc3BhY2UgaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2xpYi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2xpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzkyZjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSouamFyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NWEzOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24KLSEtLSBUb29sIE5hbWUKLQotX1BMVUdJTl9OQU1FICAgICAgID0gV1NETCBWYWxpZGF0b3IKLV9QUk9WSURFUl9OQU1FICAgICA9IEVjbGlwc2Uub3JnCi0KLV9VSV9XU0RMNEpfVkFMSURBVE9SX0RFTEVHQVRFID0gV1NETDRKLWJhc2VkIFdTREwgVmFsaWRhdG9yCi1fVUlfV1NETF9WQUxJREFUT1IgPSBXU0RMIFZhbGlkYXRvcgotX1VJX1dTRExfVkFMSURBVE9SX01BUktFUiA9IFdTREwgUHJvYmxlbQotCi0hLS0gRXh0ZW5zaW9uIHBvaW50cwotX1dTRExfRVhURU5TSU9OX1ZBTElEQVRPUl9OQU1FICAgPSBXU0RMIEV4dGVuc2lvbiBWYWxpZGF0b3IKLV9XU0RMMTFfVkFMSURBVE9SX05BTUUgPSBXU0RMIDEuMSBWYWxpZGF0b3IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTExNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iZXh0dmFsaWRhdG9yIiBuYW1lPSIlX1dTRExfRVhURU5TSU9OX1ZBTElEQVRPUl9OQU1FIiBzY2hlbWE9ImV4c2QvZXh0dmFsaWRhdG9yLmV4c2QiLz4KLSAgIAotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NkbDExdmFsaWRhdG9yIiBuYW1lPSIlV1NETDExX1ZBTElEQVRPUl9OQU1FIiBzY2hlbWE9ImV4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QiLz4KLSAgIAotCTxleHRlbnNpb24KLSAgICAJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRvckRlbGVnYXRlcyI+Ci0gICAgICAgIDxkZWxlZ2F0ZQotICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLlZhbGlkYXRvciIKLSAgICAgICAgICAgICAgbmFtZT0iJV9VSV9XU0RMNEpfVkFMSURBVE9SX0RFTEVHQVRFIgotICAgICAgICAgICAgICB0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMRGVsZWdhdGluZ1ZhbGlkYXRvciIvPgotICAgICA8L2V4dGVuc2lvbj4JCi0KLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPCEtLSBBbiBleHRlbnNpb24gZm9yIGFkZGluZyB0aGUgV1NETCB2YWxpZGF0b3IgdG8gdGhlICAgICAgLS0+Ci0gICA8IS0tIHZhbGlkYXRpb24gZnJhbWV3b3JrLiAJCQkJCQkgICAgICAgICAgIC0tPgkJCQkJCQkJCQkgICAtLT4KLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPCEtLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9IndzZGxWYWxpZGF0b3IiCi0gICAgICAgICBuYW1lPSIlX1VJX1dTRExfVkFMSURBVE9SIgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRvciI+Ci0gICAgICA8dmFsaWRhdG9yPgotICAgICAgICAgPGZpbHRlcgotICAgICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZT0iZmFsc2UiCi0gICAgICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiPgotICAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgICA8aGVscGVyCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5IZWxwZXIiPgotICAgICAgICAgPC9oZWxwZXI+Ci0gICAgICAgICA8cnVuCi0gICAgICAgICAgICAgICBhc3luYz0idHJ1ZSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETERlbGVnYXRpbmdWYWxpZGF0b3IiCi0gICAgICAgICAgICAgICBlbmFibGVkPSJ0cnVlIgotICAgICAgICAgICAgICAgZnVsbEJ1aWxkPSJ0cnVlIgotICAgICAgICAgICAgICAgaW5jcmVtZW50YWw9InRydWUiPgotICAgICAgICAgPC9ydW4+Ci0gICAgICAgICA8bWFya2VySWQgbWFya2VySWRWYWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi52YWxpZGF0aW9uTWFya2VyIi8+Ci0gICAgICA8L3ZhbGlkYXRvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgLS0+Ci0gICAKLSAgIDxleHRlbnNpb24gaWQ9IndzZGwiIG5hbWU9IiVfVUlfV1NETF9WQUxJREFUT1IiIHBvaW50PSJvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0b3JWMiI+Ci0gICAgICA8dmFsaWRhdG9yCi0gICAgICAgICAgICBidWlsZD0idHJ1ZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETERlbGVnYXRpbmdWYWxpZGF0b3IiCi0gICAgICAgICAgICBtYW51YWw9InRydWUiCi0gICAgICAgICAgICBzb3VyY2VpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCIKLSAgICAgICAgICAgIHZlcnNpb249IjIiCi0gICAgICAgICAgICBtYXJrZXJJZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi52YWxpZGF0aW9uTWFya2VyIj4KLSAgICAgICAgIDxpbmNsdWRlPgotICAgICAgICAgICAgPHJ1bGVzPgotICAgICAgICAgICAgICAgPGZpbGVleHQgY2FzZVNlbnNpdGl2ZT0iZmFsc2UiIGV4dD0id3NkbCI+PC9maWxlZXh0PgotICAgICAgICAgICAgPC9ydWxlcz4KLSAgICAgICAgIDwvaW5jbHVkZT4KLSAgICAgIDwvdmFsaWRhdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJ2YWxpZGF0aW9uTWFya2VyIgotICAgICAgICAgbmFtZT0iJV9VSV9XU0RMX1ZBTElEQVRPUl9NQVJLRVIiCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubWFya2VycyI+Ci0gICAgICA8c3VwZXIgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJvYmxlbW1hcmtlciIvPgotICAgICAgPHBlcnNpc3RlbnQgdmFsdWU9InRydWUiLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvQ2xhc3Nsb2FkZXJXU0RMVmFsaWRhdG9yRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdjYTk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLQotCi0KLS8qKgotICogQSBkZWxlZ2F0ZSBob2xkcyBhIHZhbGlkYXRvcidzIGluZm9ybWF0aW9uIGFuZCBjYW4gaW5zdGFudGlhdGUgaXQKLSAqIHdoZW4gcmVxdWVzdGVkIHRvLgotICovCi1wdWJsaWMgY2xhc3MgQ2xhc3Nsb2FkZXJXU0RMVmFsaWRhdG9yRGVsZWdhdGUgZXh0ZW5kcyBXU0RMVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGRlbGVnYXRlIGZvciBhIHZhbGlkYXRvciBieSBpdHMgY2xhc3MgbmFtZS4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0b3JDbGFzc25hbWUgVGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvciBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZShTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lKQotICB7Ci0gICAgdGhpcy52YWxpZGF0b3JDbGFzc25hbWUgPSB2YWxpZGF0b3JDbGFzc25hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lIGFuZCAKLSAgICogYSBjbGFzcyBsb2FkZXIgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKiBAcGFyYW0gY2xhc3NMb2FkZXIgVGhlIGNsYXNzIGxvYWRlciB0byB1c2UgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlKFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKQotICB7Ci0gICAgdGhpcyh2YWxpZGF0b3JDbGFzc25hbWUpOwotICAgIHRoaXMuY2xhc3NMb2FkZXIgPSBjbGFzc0xvYWRlcjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0b3JEZWxlZ2F0ZSNsb2FkVmFsaWRhdG9yKCkKLSAgICovCi0gIHByb3RlY3RlZCBJV1NETFZhbGlkYXRvciBsb2FkVmFsaWRhdG9yKCkKLSAgewotCUlXU0RMVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7Ci0gICAgaWYoY2xhc3NMb2FkZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICB9Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQ2xhc3MgdmFsaWRhdG9yQ2xhc3MgPQotICAgICAgY2xhc3NMb2FkZXIgIT0gbnVsbCA/IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyh2YWxpZGF0b3JDbGFzc25hbWUpIDogQ2xhc3MuZm9yTmFtZSh2YWxpZGF0b3JDbGFzc25hbWUpOwotCi0gICAgICB2YWxpZGF0b3IgPSAoSVdTRExWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICB9Ci0gICAgY2F0Y2goVGhyb3dhYmxlIHQpCi0gICAgewotICAgIAlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJVbmFibGUgdG8gbG9hZCB2YWxpZGF0b3IgIiArIHZhbGlkYXRvckNsYXNzbmFtZSwgSUxvZ2dlci5TRVZfRVJST1IsIHQpOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yRGVsZWdhdGUjZ2V0VmFsaWRhdG9yTmFtZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRvck5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHZhbGlkYXRvckNsYXNzbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjYzZjJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9Db25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi0vKioKLSAqIFNldCBjb25zdGFudHMgdGhhdCB0aGUgdmFsaWRhdG9yIG1ha2VzIHVzZSBvZi4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb25zdGFudHMKLXsKLSAgLyoqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSB2YWxpZGF0b3IgcHJvcGVydGllcyBmaWxlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9WQUxJREFUT1JfUFJPUEVSVElFU19GSUxFID0gInZhbGlkYXRld3NkbCI7Ci0KLSAgLyoqCi0gICAqIFRoZSBTT0FQIDEuMSBuYW1lc3BhY2UuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19TT0FQMTEgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI7Ci0KLSAgLyoqCi0gICAqIFRoZSBIVFRQIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX0hUVFAgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyI7Ci0KLSAgLyoqCi0gICAqIFRoZSBNSU1FIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX01JTUUgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyI7Ci0gIAotICAvKioKLSAgICogVGhlIFdTREwgc2NoZW1hIGNhY2hlIGF0dHJpYnV0ZSBhbGxvd3MgYW4gWE1MR3JhbW1hclBvb2wgb2JqZWN0IHRvIGJlIHNldCBmb3IgdXNlIGluIAotICAgKiBpbmxpbmUgc2NoZW1hIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBYTUxTQ0hFTUFfQ0FDSEVfQVRUUklCVVRFID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3NkbC9zY2hlbWFjYWNoZSI7Ci0gIAotICAvKioKLSAgICogVGhlIFdTREwgc2NoZW1hIGNhY2hlIGF0dHJpYnV0ZSBhbGxvd3MgYW4gWE1MR3JhbW1hclBvb2wgb2JqZWN0IHRvIGJlIHNldCBmb3IgdXNlIGluIAotICAgKiBYTUwgY29uZm9ybWFuY2UgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFhNTF9DQUNIRV9BVFRSSUJVVEUgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c2RsL3htbGNhY2hlIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9Db250cm9sbGVyVmFsaWRhdGlvbkluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9Db250cm9sbGVyVmFsaWRhdGlvbkluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzMGE4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvQ29udHJvbGxlclZhbGlkYXRpb25JbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgdGhlIHZhbGlkYXRpb24gaW5mbyB0aGF0IGFsbG93cyBmb3Igc3RhcnRpbmcgYW5kCi0gKiBjb21wbGV0aW5nIFdTREwgYW5kIFdTLUkgdmFsaWRhdGlvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb250cm9sbGVyVmFsaWRhdGlvbkluZm8gZXh0ZW5kcyBJVmFsaWRhdGlvbkluZm8KLXsKLSAgCi0gIC8qKgotICAgKiBQZXJmb3JtIHRoZSBuZWNlc3Nhcnkgc3RlcHMgdG8gY29tcGxldGUgV1NETCB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgY29tcGxldGVXU0RMVmFsaWRhdGlvbigpOwotICAKLS8vICAvKioKLS8vICAgKiBQZXJmb3JtIHRoZSBuZWNlc3Nhcnkgc3RlcHMgdG8gY29tcGxldGUgV1MtSSBXU0RMIHZhbGlkYXRpb24uCi0vLyAgICovCi0vLyAgcHVibGljIHZvaWQgY29tcGxldGVXU0lWYWxpZGF0aW9uKCk7Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjk0ZTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvbkluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotCi0vKioKLSAqIEFuIGludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAqIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBtZWFudCB0byBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElWYWxpZGF0aW9uSW5mbyBleHRlbmRzIElWYWxpZGF0aW9uUmVwb3J0Ci17Ci0gIAotICAvKioKLSAgICogQWRkIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgZmlsZS4gKFVzZXMgdGhlIFVSSSBmcm9tIHRoaXMgdmFsaWRhdGlvbiBpbmZvIG9iamVjdC4pCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBmb3IgdGhlIGVycm9yLgotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgZXJyb3IgaW4gdGhlIGZpbGUuCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pOwotICAKLSAgLyoqCi0gICAqIEFkZCBhbiBlcnJvciBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgZm9yIHRoZSBlcnJvci4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVycm9yIGluIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVycm9yIGluIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXJyb3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpOwotICAKLSAgLyoqCi0gICAqIEFkZCBhIHdhcm5pbmcgbWVzc2FnZSBmb3IgdGhpcyBmaWxlLiAoVXNlcyB0aGUgVVJJIGZyb20gdGhpcyB2YWxpZGF0aW9uIGluZm8gb2JqZWN0LikKLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIGZvciB0aGUgd2FybmluZy4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgd2FybmluZyBpbiB0aGUgZmlsZS4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uKTsKLSAgCi0gIC8qKgotICAgKiBBZGQgYSB3YXJuaW5nIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBmb3IgdGhlIHdhcm5pbmcuCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIGxvY2F0aW9uIG9mIHRoZSB3YXJuaW5nIGluIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSB1cmkgVGhlIFVSSSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBlcnJvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKTsKLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciBpbiB1c2UgZm9yIHRoaXMgdmFsaWRhdGlvbi4gVGhlIFVSSSByZXNvbHZlcgotICAgKiByZXR1cm5lZCBpcyBhY3R1YWxseSBhIFVSSSByZXNvbHZlciBoYW5kbGVyIHRoYXQgd2lsbCAKLSAgICogaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgcmVnaXN0ZXJlZCBVUkkgcmVzb2x2ZXJzLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIGhhbmRsZXIuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKTsKLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiBJZiB0aGUgYXR0cmlidXRlCi0gICAqIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCByZXR1cm4gbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgcmVxdWVzdGVkLgotICAgKiBAcmV0dXJuIFRoZSBhdHRyaWJ1dGUgdmFsdWUgaWYgdGhlIGF0dHJpYnV0ZSBoYXMgYmVlbiByZWdpc3RlcmVkLCBudWxsIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0QXR0cmlidXRlKFN0cmluZyBuYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvbk1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvbk1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmY2M0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25NZXNzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBhIHZhbGlkYXRpb24gbWVzc2FnZS4gQSB2YWxpZGF0aW9uIG1lc3NhZ2UgY29udGFpbnMgaW5mb3JtYXRpb24KLSAqIGZvciB0aGUgbWVzc2FnZSwgaXRzIHNldmVyaXR5IGFuZCB3aGVyZSBpdCdzIGxvY2F0ZWQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVZhbGlkYXRpb25NZXNzYWdlCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBFUlJPUl9NRVNTQUdFX01BUF9RVUFMSUZJRURfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKCJvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlIiwgImVycm9yTWVzc2FnZU1hcCIpOwotICAvKioKLSAgICogU2V2ZXJpdHkgZXJyb3IuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVZfRVJST1IgPSAwOwotICAvKioKLSAgICogU2V2ZXJpdHkgd2FybmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFVl9XQVJOSU5HID0gMTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBVUkkgZm9yIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSBmb3IgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIG1lc3NhZ2UgZm9yIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbWVzc2FnZSBmb3IgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIHNldmVyaXR5IG9mIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgc2V2ZXJpdHkgb2YgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgaW50IGdldFNldmVyaXR5KCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRoZSBsaW5lIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsaW5lIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqLwotICBwdWJsaWMgaW50IGdldExpbmUoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGNvbHVtbiB3aGVyZSB0aGlzIHZhbGlkYXRpb24gbWVzc2FnZSBpcyBsb2NhdGVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY29sdW1uIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbigpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbGlzdCBvZiBuZXN0ZWQgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmVzdGVkIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXROZXN0ZWRNZXNzYWdlcygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uUmVwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25SZXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3Mjk5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25SZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBhIFdTREwgdmFsaWRhdGlvbiByZXBvcnQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVZhbGlkYXRpb25SZXBvcnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFVSSSBmb3IgdGhlIGZpbGUgdGhlIHJlcG9ydCByZWZlcnMgdG8uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgZm9yIHRoZSBmaWxlIHRoZSByZXBvcnQgcmVmZXJzIHRvLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaWxlVVJJKCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBmaWxlIGlzIHZhbGlkIGFjY29yZGluZyB0byB0aGUgV1NETCBzcGVjaWZpY2F0aW9uLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIFdTREwgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzV1NETFZhbGlkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICogCi0gICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICovCi0gIHB1YmxpYyBJVmFsaWRhdGlvbk1lc3NhZ2VbXSBnZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGVycm9ycywgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGFyZSBlcnJvcnMsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0Vycm9ycygpOwotICAKLSAgcHVibGljIEhhc2hNYXAgZ2V0TmVzdGVkTWVzc2FnZXMoKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lXU0RMVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVdTRExWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc5MDJlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVdTRExWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5leGNlcHRpb24uVmFsaWRhdGVXU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgYSBXU0RMIHZhbGlkYXRvci4gVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciBhIHRvcCBsZXZlbCB2YWxpZGF0b3IgCi0gKiBjb21wb25lbnQgc3VjaCBhcyBhIFdTREwgMS4xIHZhbGlkYXRvciwgV1NETCAxLjIgdmFsaWRhdG9yIG9yIFdTLUkgQmFzaWMgUHJvZmlsZSB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVdTRExWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBmaWxlIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gICAqIAotICAgKiBAcGFyYW0gZG9tTW9kZWwgQSBET00gbW9kZWwgb2YgdGhlIGZpbGUgdG8gYmUgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgaW5mb3JtYXRpb24gZm9yIHRoZSB2YWxpZGF0aW9uIHRoYXQgaXMgYmVpbmcgcGVyZm9ybWVkLgotICAgKiBAdGhyb3dzIFZhbGlkYXRlV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoRG9jdW1lbnQgZG9tTW9kZWwsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKSB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25Db250cm9sbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEwZGZmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuWE1MRXJyb3JSZXBvcnRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLkRPTVBhcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlN0YW5kYXJkUGFyc2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbi5WYWxpZGF0ZVdTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5BYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5EZWZhdWx0WE1MVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLklYTUxWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuTGluZU51bWJlckRPTVBhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi0vKioKLSAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnlwb2ludCB0byB0aGUgV1NETCBWYWxpZGF0b3IuIFRoZSBjb250cm9sbGVyIGlzCi0gKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGUgcmVhZGVyLCB0aGUgWE1MIGNvbmZvcm1hbmNlIGNoZWNrLCB0aGUgV1NETAotICogdmFsaWRhdGlvbiBhbmQgdGhlIFdTLUkgdmFsaWRhdGlvbiBpZiBzZWxlY3RlZC4gVGhlIGNvbnRyb2xsZXIgY29udGFpbnMgYW55Ci0gKiBlcnJvcnMgYW5kIHdhcm5pbmdzIGdlbmVyYXRlZCBhcyB3ZWxsLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbkNvbnRyb2xsZXIKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVJST1JfUFJPQkxFTV9XU0RMX1ZBTElEQVRPUiA9ICJfRVJST1JfUFJPQkxFTV9XU0RMX1ZBTElEQVRPUiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX1dTRExfVkFMSURBVE9SID0gIl9FUlJPUl9OT19XU0RMX1ZBTElEQVRPUiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VSUk9SX1BST0JMRU1fRVhUX1ZBTElEQVRPUiA9ICJfRVJST1JfUFJPQkxFTV9FWFRfVkFMSURBVE9SIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVJST1JfRE9DVU1FTlRfTE9DQVRJT04gPSAiX0VSUk9SX0RPQ1VNRU5UX0xPQ0FUSU9OIjsKLQotICBwcm90ZWN0ZWQgVmFsaWRhdG9yUmVnaXN0cnkgdmVyOwotICBwcm90ZWN0ZWQgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VidW5kbGU7Ci0gIHByb3RlY3RlZCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIHByb3RlY3RlZCBVUklSZXNvbHZlciB1cmlSZXNvbHZlcjsKLQotICAvL3Byb3RlY3RlZCBTdHJpbmcgd3NkbE5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBSZXNvdXJjZUJ1bmRsZSBuZWVkcyB0byBiZSBzZXQgc28gaXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgcmVhZGVyLgotICAgKiAKLSAgICogQHBhcmFtIHJiCi0gICAqICAgICAgICAgICAgVGhlIHJlc291cmNlIGJ1bmRsZSBmb3IgdGhpcyB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbkNvbnRyb2xsZXIoUmVzb3VyY2VCdW5kbGUgcmIsIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gICAgcmVzb3VyY2VidW5kbGUgPSByYjsKLSAgICBtZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmVzb3VyY2VidW5kbGUpOwotICAgIHRoaXMudXJpUmVzb2x2ZXIgPSB1cmlSZXNvbHZlcjsKLQotICAgIHZlciA9IFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBmaWxlIHdpdGggdGhlIHN0cmVhbS4gVGhpcyBtZXRob2Qgd2lsbCBydW4gdGhlIGNoZWNrIG9mIHRoZSAKLSAgICogV1NETCBkb2N1bWVudC4gVGhlIHZhbGlkYXRpb24gaXMgYnJva2VuIHVwIGludG8gdGhyZWUgc3RhZ2VzOiBYTUwgY29uZm9ybWFuY2UsCi0gICAqIFdTREwgc2VtYW50aWMsIGFuZCBwb3N0IHZhbGlkYXRpb24uCi0gICAqIAotICogQHBhcmFtIHVyaSAKLSAqIAkJCVRoZSBVUkkgb2YgdGhlIFdTREwgZG9jdW1lbnQgdG8gYmUgdmFsaWRhdGVkLgotICogQHBhcmFtIGlucHV0U3RyZWFtIAotICogCQkJVGhlIGNvbnRlbnRzIG9mIHRoZSBXU0RMIGRvY3VtZW50IHRvIGJlIHZhbGlkYXRlZC4KLSAqIEBwYXJhbSBjb25maWd1cmF0aW9uCi0gKiAJCQlUaGUgV1NETCB2YWxpZGF0aW9uIGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZCB3aGlsZSB2YWxpZGF0aW5nIHRoaXMgVVJJLgotICogQHJldHVybiBBIHZhbGlkYXRpb24gcmVwb3J0IHdpdGggdGhlIHZhbGlkYXRpb24gaW5mbyBmb3IgdGhlIGZpbGUuCi0gKi8KLSAgcHVibGljIElWYWxpZGF0aW9uUmVwb3J0IHZhbGlkYXRlKFN0cmluZyB1cmksIElucHV0U3RyZWFtIGlucHV0U3RyZWFtLCBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgewotICAgIAotICAgIElucHV0U3RyZWFtIHhtbFZhbGlkYXRlU3RyZWFtID0gbnVsbDsKLSAgICBJbnB1dFN0cmVhbSB3c2RsVmFsaWRhdGVTdHJlYW0gPSBudWxsOwotICAgIGlmIChpbnB1dFN0cmVhbSAhPSBudWxsKQotICAgIHsgLy9jb3B5IHRoZSBpbnB1dFN0cmVhbSBzbyB3ZSBjYW4gdXNlIGl0IG1vcmUgdGhhbiBvbmNlCi0gICAgICBTdHJpbmcgY29udGVudHMgPSBjcmVhdGVTdHJpbmdGb3JJbnB1dFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0gICAgICB4bWxWYWxpZGF0ZVN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygpKTsKLSAgICAgIHdzZGxWYWxpZGF0ZVN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygpKTsKLSAgICB9Ci0gICAgCi0gICAgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8gPSBuZXcgVmFsaWRhdGlvbkluZm9JbXBsKHVyaSwgbWVzc2FnZWdlbmVyYXRvcik7Ci0gICAgKChWYWxpZGF0aW9uSW5mb0ltcGwpdmFsSW5mbykuc2V0VVJJUmVzb2x2ZXIodXJpUmVzb2x2ZXIpOwotICAgICgoVmFsaWRhdGlvbkluZm9JbXBsKXZhbEluZm8pLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Ci0KLSAgICBpZiAodmFsaWRhdGVYTUwodmFsSW5mbywgeG1sVmFsaWRhdGVTdHJlYW0pKQotICAgIHsKLSAgICAgIERvY3VtZW50IHdzZGxkb2MgPSBnZXREb2N1bWVudCh1cmksIHdzZGxWYWxpZGF0ZVN0cmVhbSwgdmFsSW5mbyk7Ci0KLSAgICAgIGlmKCF2YWxJbmZvLmhhc0Vycm9ycygpKQotICAgICAgewotICAgICAgICBTdHJpbmcgd3NkbG5zID0gZ2V0V1NETE5hbWVzcGFjZSh3c2RsZG9jKTsKLSAgICAgICAgaWYod3NkbG5zICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAodmFsaWRhdGVXU0RMKHdzZGxkb2MsIHZhbEluZm8sIHdzZGxucykpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpb25WYWxpZGF0b3JzKHdzZGxkb2MsIHZhbEluZm8sIHdzZGxucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWxJbmZvOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBmaWxlIGZvciBYTUwgY29uZm9ybWFuY2UuCi0JICogQHBhcmFtIHZhbEluZm8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhbGlkYXRpb24KLSAgICogQHBhcmFtIGlucHV0U3RyZWFtIHRoZSBpbnB1dFN0cmVhbSB0byB2YWxpZGF0ZQotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgaXMgY29uZm9ybWFudCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVYTUwoQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8sIElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQotICB7Ci0gICAgSVhNTFZhbGlkYXRvciB4bWxWYWxpZGF0b3IgPSBBYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldFhNTFZhbGlkYXRvcigpOwotICAgIHhtbFZhbGlkYXRvci5zZXRVUklSZXNvbHZlcih1cmlSZXNvbHZlcik7Ci0gICAgeG1sVmFsaWRhdG9yLnNldEZpbGUodmFsSW5mby5nZXRGaWxlVVJJKCkpOwotICAgIGlmICh4bWxWYWxpZGF0b3IgaW5zdGFuY2VvZiBEZWZhdWx0WE1MVmFsaWRhdG9yKQotICAgIHsKLSAgICAgICAgKChEZWZhdWx0WE1MVmFsaWRhdG9yKXhtbFZhbGlkYXRvcikuc2V0SW5wdXRTdHJlYW0oaW5wdXRTdHJlYW0pOwotICAgICAgICBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCA9IChYTUxHcmFtbWFyUG9vbCl2YWxJbmZvLmdldEF0dHJpYnV0ZShDb25zdGFudHMuWE1MX0NBQ0hFX0FUVFJJQlVURSk7Ci0gICAgICAgIGlmKGdyYW1tYXJQb29sICE9IG51bGwpCi0gICAgICAgICAgKChEZWZhdWx0WE1MVmFsaWRhdG9yKXhtbFZhbGlkYXRvcikuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wpOwotICAgIH0KLSAgICAvL3htbFZhbGlkYXRvci5zZXRWYWxpZGF0aW9uSW5mbyh2YWxJbmZvKTsKLSAgICB4bWxWYWxpZGF0b3IucnVuKCk7Ci0gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHhtbCBjb25mb3JtYW5jZSBwcm9ibGVtcyBnbyBvbiB0byBjaGVjayB0aGUgd3NkbCBzdHVmZgotICAgIGlmICh4bWxWYWxpZGF0b3IuaGFzRXJyb3JzKCkpCi0gICAgewotICAgICAgLy8gdGVtcCBoYW5kbGluZyBvZiBYTUwgZXJyb3JzIHVudGlsIHZhbGlkYXRvciBpcyB1cGRhdGVkLgotICAgICAgTGlzdCBlcnJvcnMgPSB4bWxWYWxpZGF0b3IuZ2V0RXJyb3JzKCk7Ci0gICAgICBJdGVyYXRvciBlcnJvcnNJdGVyID0gZXJyb3JzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXJyb3JzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElWYWxpZGF0aW9uTWVzc2FnZSB2YWxNZXMgPSAoSVZhbGlkYXRpb25NZXNzYWdlKWVycm9yc0l0ZXIubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHZhbE1lcyBpbnN0YW5jZW9mIFZhbGlkYXRpb25NZXNzYWdlSW1wbCAmJiB2YWxJbmZvIGluc3RhbmNlb2YgVmFsaWRhdGlvbkluZm9JbXBsKQotICAgICAgICB7ICAgU3RyaW5nIGVycm9yS2V5ID0gKChWYWxpZGF0aW9uTWVzc2FnZUltcGwpdmFsTWVzKS5nZXRFcnJvcktleSgpOwotICAgICAgICAgICAgT2JqZWN0W10gbWVzc2FnZUFyZ3MgPSAoKFZhbGlkYXRpb25NZXNzYWdlSW1wbCl2YWxNZXMpLmdldE1lc3NhZ2VBcmd1bWVudHMoKTsKLSAgICAgICAgICAgICgoVmFsaWRhdGlvbkluZm9JbXBsKXZhbEluZm8pLmFkZEVycm9yKHZhbE1lcy5nZXRNZXNzYWdlKCksIHZhbE1lcy5nZXRMaW5lKCksIHZhbE1lcy5nZXRDb2x1bW4oKSwgdmFsTWVzLmdldFVSSSgpLCBlcnJvcktleSwgbWVzc2FnZUFyZ3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcih2YWxNZXMuZ2V0TWVzc2FnZSgpLCB2YWxNZXMuZ2V0TGluZSgpLCB2YWxNZXMuZ2V0Q29sdW1uKCksIHZhbE1lcy5nZXRVUkkoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy93c2RsTmFtZXNwYWNlID0geG1sVmFsaWRhdG9yLmdldFdTRExOYW1lc3BhY2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBmaWxlIGZvciBYTUwgY29uZm9ybWFuY2UuCi0JICogQHBhcmFtIHZhbEluZm8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhbGlkYXRpb24KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIGNvbmZvcm1hbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlWE1MKENvbnRyb2xsZXJWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7IHJldHVybiB2YWxpZGF0ZVhNTCh2YWxJbmZvLCBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBmaWxlLiBTZXQgdGhlIGVycm9ycyBhbmQgd2FybmluZyBhcHByb3ByaWF0ZWx5LgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxkb2MgQSBXM0MgZG9jdW1lbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBjdXJyZW50IHZhbGlkYXRpb24gaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsTmFtZXNwYWNlIFRoZSBXU0RMIG5hbWVzcGFjZSB0byB2YWxpZGF0ZS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVdTREwoRG9jdW1lbnQgd3NkbGRvYywgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8sIFN0cmluZyB3c2RsTmFtZXNwYWNlKQotICB7Ci0gICAgV1NETFZhbGlkYXRvckRlbGVnYXRlW10gd3NkbFZhbHMgPSB2ZXIucXVlcnlWYWxpZGF0b3JSZWdpc3RyeSh3c2RsTmFtZXNwYWNlLCBWYWxpZGF0b3JSZWdpc3RyeS5XU0RMX1ZBTElEQVRPUik7Ci0gICAgaWYgKHdzZGxWYWxzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsVmFscy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETFZhbGlkYXRvckRlbGVnYXRlIHdzZGx2YWxkZWwgPSB3c2RsVmFsc1tpXTsKLSAgICAgICAgSVdTRExWYWxpZGF0b3Igd3NkbFZhbCA9IHdzZGx2YWxkZWwuZ2V0VmFsaWRhdG9yKCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGwgdmFsaWRhdG9yIGlzbid0IG51bGwsIHZhbGlkYXRlLgotICAgICAgICBpZiAod3NkbFZhbCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgd3NkbFZhbC52YWxpZGF0ZSh3c2RsZG9jLCB2YWxJbmZvKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFZhbGlkYXRlV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX1BST0JMRU1fV1NETF9WQUxJREFUT1IsIHdzZGxOYW1lc3BhY2UpLCAxLCAxLCB2YWxJbmZvLmdldEZpbGVVUkkoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSB2YWxpZGF0b3IgaXMgbnVsbCBhbmQgdGhlIG5hbWVzcGFjZSBpc24ndCBjcmVhdGUgYW4gZXJyb3IuCi0gICAgICAgIC8vIElmIHRoZSBuYW1lc3BhY2UgaXMgbnVsbCB0aGUgZmlsZSBpcyBlbXB0eSAoYW5kIHRoZSBYTUwgdmFsaWRhdG9yCi0gICAgICAgIC8vIGhhcyBsZXQgaXQgZ28pCi0gICAgICAgIC8vIHNvIGl0IGlzIHZhbGlkIGJ1dCBkb2VzIG5vdCBuZWVkIHRvIGJlIHZhbGlkYXRlZC4KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19XU0RMX1ZBTElEQVRPUiwgd3NkbE5hbWVzcGFjZSksCi0gICAgICAgICAgICAxLAotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBObyB2YWxpZGF0b3JzIHJlZ2lzdGVyZWQuCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1dTRExfVkFMSURBVE9SLCB3c2RsTmFtZXNwYWNlKSwgMSwgMSwgdmFsSW5mby5nZXRGaWxlVVJJKCkpOwotICAgIH0KLSAgICB2YWxJbmZvLmNvbXBsZXRlV1NETFZhbGlkYXRpb24oKTsKLQotICAgIHJldHVybiB2YWxJbmZvLmlzV1NETFZhbGlkKCk7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIFdTREwgZmlsZSB3aXRoIHRoZSBleHRlbnNpb24gdmFsaWRhdG9yLiBTZXQgdGhlIGVycm9ycyBhbmQgd2FybmluZyBhcHByb3ByaWF0ZWx5LgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxkb2MgQSBXM0MgZG9jdW1lbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBjdXJyZW50IHZhbGlkYXRpb24gaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsTmFtZXNwYWNlIFRoZSBXU0RMIG5hbWVzcGFjZSB0byB2YWxpZGF0ZS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUV4dGVuc2lvblZhbGlkYXRvcnMoRG9jdW1lbnQgd3NkbGRvYywgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8sIFN0cmluZyB3c2RsTmFtZXNwYWNlKQotICB7Ci0gICAgV1NETFZhbGlkYXRvckRlbGVnYXRlW10gZXh0VmFscyA9IHZlci5xdWVyeVZhbGlkYXRvclJlZ2lzdHJ5KHdzZGxOYW1lc3BhY2UsIFZhbGlkYXRvclJlZ2lzdHJ5LkVYVF9WQUxJREFUT1IpOwotICAgIGlmKGV4dFZhbHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgbnVtdmFscyA9IGV4dFZhbHMubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bXZhbHM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETFZhbGlkYXRvckRlbGVnYXRlIGV4dHZhbGRlbCA9IGV4dFZhbHNbaV07Ci0gICAgICAgIElXU0RMVmFsaWRhdG9yIGV4dHZhbCA9IGV4dHZhbGRlbC5nZXRWYWxpZGF0b3IoKTsKLSAgICAgICAgaWYoZXh0dmFsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgZXh0dmFsLnZhbGlkYXRlKHdzZGxkb2MsIHZhbEluZm8pOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaChUaHJvd2FibGUgIHQpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmFsSW5mby5hZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9QUk9CTEVNX0VYVF9WQUxJREFUT1IsICBleHR2YWxkZWwuZ2V0VmFsaWRhdG9yTmFtZSgpLCB3c2RsTmFtZXNwYWNlKSwgMSwgMSwgdmFsSW5mby5nZXRGaWxlVVJJKCkpOwotICAgICAgICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZyhtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfUFJPQkxFTV9FWFRfVkFMSURBVE9SLCAgZXh0dmFsZGVsLmdldFZhbGlkYXRvck5hbWUoKSwgd3NkbE5hbWVzcGFjZSksIElMb2dnZXIuU0VWX0VSUk9SLCB0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBSZXNvdXJjZUJ1bmRsZSBmb3IgdGhpcyBWYWxpZGF0b3JNYW5hZ2VyLgotICAgKiAKLSAgICogQHBhcmFtIHJiCi0gICAqICAgICAgICAgICAgVGhlIHJlc291cmNlIGJ1bmRsZSB0byBzZXQuCi0gICAqIEBzZWUgI2dldFJlc291cmNlQnVuZGxlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUJ1bmRsZShSZXNvdXJjZUJ1bmRsZSByYikKLSAgewotICAgIHJlc291cmNlYnVuZGxlID0gcmI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBSZXNvdXJjZUJ1bmRsZSBmb3IgdGhpcyBWYWxpZGF0aW9uQ29udHJvbGxlci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHJlc291cmNlIGJ1bmRsZSBzZXQgZm9yIHRoaXMgVmFsaWRhdGlvbkNvbnRyb2xsZXIuCi0gICAqIEBzZWUgI3NldFJlc291cmNlQnVuZGxlCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKQotICB7Ci0gICAgcmV0dXJuIHJlc291cmNlYnVuZGxlOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgRE9NIGRvY3VtZW50IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHVyaSAKLSAgICogCQlUaGUgdXJpIG9mIHRoZSBmaWxlIHRvIHJlYWQKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtCi0gICAqIAkJQW4gb3B0aW9uYWwgSW5wdXRTdHJlYW0gdG8gcmVhZCB0aGUgZG9jdW1lbnQgZnJvbS4KLSAgICogQHBhcmFtIHZhbGluZm8KLSAgICogCQlBIHZhbGlkYXRpb24gaW5mbyBvYmplY3QgdXNlZCBmb3IgcmVwb3J0aW5nIG1lc3NhZ2VzLgotICAgKiBAcmV0dXJuIFRoZSBET00gbW9kZWwgb2YgdGhlIFdTREwgZG9jdW1lbnQgb3IgbnVsbCBpZiB0aGUgZG9jdW1lbnQgY2FuJ3QgYmUgcmVhZC4KLSAgICovCi0gIHByaXZhdGUgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIHVyaSwgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIENvbnRyb2xsZXJWYWxpZGF0aW9uSW5mbyB2YWxpbmZvKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ2F0Y2ggYSBwcmVtYXR1cmUgRU9GIGVycm9yIHRvIGFsbG93IGVtcHR5IFdTREwgZmlsZXMgdG8gYmUgY29uc2lkZXJlZCB2YWxpZC4KLSAgICAgIFN0YW5kYXJkUGFyc2VyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IFN0YW5kYXJkUGFyc2VyQ29uZmlndXJhdGlvbigpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCBYTUxFcnJvclJlcG9ydGVyIGNyZWF0ZUVycm9yUmVwb3J0ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBYTUxFcnJvclJlcG9ydGVyKCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihTdHJpbmcgZG9tYWluLCBTdHJpbmcga2V5LCBPYmplY3RbXSBhcmd1bWVudHMsIHNob3J0IHNldmVyaXR5KSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJvb2xlYW4gcmVwb3J0RXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICBpZiAoa2V5LmVxdWFscygiUHJlbWF0dXJlRU9GIikpCi0gICAgICAgICAgICAgIHsgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXBvcnRFcnJvciA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYgKHJlcG9ydEVycm9yKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIucmVwb3J0RXJyb3IoZG9tYWluLCBrZXksIGFyZ3VtZW50cywgc2V2ZXJpdHkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIAotICAgICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBudWxsOwotICAgICAgaWYgKGlucHV0U3RyZWFtICE9IG51bGwpCi0gICAgICB7IC8vdGhlbiB3ZSB3YW50IHRvIGNyZWF0ZSBhIERPTSBmcm9tIHRoZSBpbnB1dHN0cmVhbQotICAgICAgICBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShpbnB1dFN0cmVhbSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7IGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHVyaSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIERPTVBhcnNlciBidWlsZGVyID0gbmV3IExpbmVOdW1iZXJET01QYXJzZXIoY29uZmlndXJhdGlvbik7Ci0gICAgICBidWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLSAgICAgIERvY3VtZW50IGRvYyA9IGJ1aWxkZXIuZ2V0RG9jdW1lbnQoKTsKLQotICAgICAgcmV0dXJuIGRvYzsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgdmFsaWRhdG9yIHdpbGwgZmFpbCB3aXRoIGFuIHVuZXhwbGFpbmVkIGVycm9yIG1lc3NhZ2UKLSAgICAgIC8vIGFib3V0IGEgbnVsbCBXU0RMIG5hbWVzcGFjZS4gVGhpcyBlcnJvciBzaG91bGQgYmUgYWRkcmVzc2VkIGFzIHdlbGwuCi0gICAgIHZhbGluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0RPQ1VNRU5UX0xPQ0FUSU9OLCB1cmkpLCAwLCAwLCB1cmkpOwotICAgICAgCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRXU0RMTmFtZXNwYWNlKERvY3VtZW50IGRvYykKLSAgewotICAgIFN0cmluZyB3c2RsbnMgPSBudWxsOwotICAgIGlmKGRvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdGRvYyA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIGlmKHJvb3Rkb2MgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgd3NkbG5zID0gcm9vdGRvYy5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxuczsKLSAgfQotICAKLSAgCi0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBjcmVhdGVTdHJpbmdGb3JJbnB1dFN0cmVhbShJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkKLSAgewotICAgIC8vIEhlcmUgd2UgYXJlIHJlYWRpbmcgdGhlIGZpbGUgYW5kIHN0b3JpbmcgdG8gYSBzdHJpbmdidWZmZXIuCi0gICAgU3RyaW5nQnVmZmVyIGZpbGVTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgaW5wdXRSZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRTdHJlYW0pOwotICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGlucHV0UmVhZGVyKTsKLSAgICAgIGNoYXJbXSBjaGFycyA9IG5ldyBjaGFyWzEwMjRdOwotICAgICAgaW50IG51bWJlclJlYWQgPSByZWFkZXIucmVhZChjaGFycyk7Ci0gICAgICB3aGlsZSAobnVtYmVyUmVhZCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgZmlsZVN0cmluZy5hcHBlbmQoY2hhcnMsIDAsIG51bWJlclJlYWQpOwotICAgICAgICBudW1iZXJSZWFkID0gcmVhZGVyLnJlYWQoY2hhcnMpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy9UT0RPOiBsb2cgZXJyb3IgbWVzc2FnZQotICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZVN0cmluZy50b1N0cmluZygpOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25JbmZvSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25JbmZvSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWNkMjc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9WYWxpZGF0aW9uSW5mb0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHZhbGlkYXRpb24gaW5mbyBpbnRlcmZhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uSW5mb0ltcGwgaW1wbGVtZW50cyBJVmFsaWRhdGlvblJlcG9ydCwgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBXUkFQUEVSX0VSUk9SX1NVUFBPUlRfRU5BQkxFRCA9IHRydWU7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9XQVJOX05PX1ZBTERJQVRPUiA9ICJfV0FSTl9OT19WQUxESUFUT1IiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSA9ICJfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSI7Ci0gIHByaXZhdGUgU3RyaW5nIHZhbGlkYXRpbmdfZmlsZV91cmkgPSBudWxsOwotICBwcml2YXRlIFVSTCB2YWxpZGF0aW5nX2ZpbGVfdXJsID0gbnVsbDsKLSAgcHJpdmF0ZSBib29sZWFuIHdzZGxWYWxpZCA9IGZhbHNlOwotICBwcml2YXRlIExpc3QgbWVzc2FnZXMgPSBuZXcgVmVjdG9yKCk7Ci0gIC8vcHJpdmF0ZSBMaXN0IHNjaGVtYXMgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgTGlzdCBuc05vVmFscyA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IgPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gaGFzZXJyb3JzID0gZmFsc2U7Ci0gIHByaXZhdGUgSGFzaE1hcCBuZXN0ZWRNZXNzYWdlcyA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByaXZhdGUgVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIgPSBudWxsOwotICBwcml2YXRlIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkKLSAgICogICAgICAgICAgICBUaGUgVVJJIG9mIHRoZSBmaWxlIGZvciB0aGUgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uSW5mb0ltcGwoU3RyaW5nIHVyaSwgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yKQotICB7Ci0gICAgdGhpcy52YWxpZGF0aW5nX2ZpbGVfdXJpID0gdXJpOwotICAgIGlmKHVyaSAhPSBudWxsKQotICAgIHsKLSAgICAgIHVyaSA9IHVyaS5yZXBsYWNlQWxsKCIlMjAiLCIgIik7Ci0gICAgICB0aGlzLnZhbGlkYXRpbmdfZmlsZV91cmkgPSB1cmk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdGhpcy52YWxpZGF0aW5nX2ZpbGVfdXJsID0gbmV3IFVSTCh1cmkpOwotICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHRoaXMubWVzc2FnZWdlbmVyYXRvciA9IG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydCNnZXRGaWxlVVJJKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmlsZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gdmFsaWRhdGluZ19maWxlX3VyaTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQjaXNXU0RMVmFsaWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNXU0RMVmFsaWQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxWYWxpZDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZEVycm9yKGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgaW50LCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pCi0gIHsKLSAgICBhZGRFcnJvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHZhbGlkYXRpbmdfZmlsZV91cmkpOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uSW5mbyNhZGRFcnJvcihqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGludCwgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgaWYoYWRkTWVzc2FnZShtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLlNFVl9FUlJPUikpCi0gICAgewotICAgICAgaGFzZXJyb3JzID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmksIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gbWVzc2FnZUFyZ3VtZW50cykKLSAgewotICAgIGlmKGFkZE1lc3NhZ2UobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmksIFZhbGlkYXRpb25NZXNzYWdlSW1wbC5TRVZfRVJST1IsIGVycm9yS2V5LCBtZXNzYWdlQXJndW1lbnRzKSkKLSAgICB7Ci0gICAgICBoYXNlcnJvcnMgPSB0cnVlOwotICAgIH0KLSAgfQotICAKLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZFdhcm5pbmcoamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uKQotICB7Ci0gICAgYWRkV2FybmluZyhtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHZhbGlkYXRpbmdfZmlsZV91cmkpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZFdhcm5pbmcoamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgYWRkTWVzc2FnZShtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLlNFVl9XQVJOSU5HKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIG1lc3NhZ2UgdG8gdGhlIGxpc3QuIEEgbWVzc2FnZSBtYXkgbm90IGJlIGFkZGVkIHRvIHRoZSBsaXN0IGluIAotICAgKiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB3aGVuIHRoZSBVUkkgaXMgaW52YWxpZCBvciB0aGUgbWVzc2FnZSAKLSAgICogaXMgbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFkZC4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgbWVzc2FnZSB3YXMgYWJsZSB0byBiZSBhZGRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkZE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpLCBpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICAgIHJldHVybiB0aGlzLmFkZE1lc3NhZ2UobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmksIHNldmVyaXR5LCBudWxsLCBudWxsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIG1lc3NhZ2UgdG8gdGhlIGxpc3QuIEEgbWVzc2FnZSBtYXkgbm90IGJlIGFkZGVkIHRvIHRoZSBsaXN0IGluIAotICAgKiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB3aGVuIHRoZSBVUkkgaXMgaW52YWxpZCBvciB0aGUgbWVzc2FnZSAKLSAgICogaXMgbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFkZC4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBlcnJvcktleSBUaGUgWGVyY2VzIEVycm9yIEtleQotICAgKiBAcGFyYW0gbWVzc2FnZUFyZ3VtZW50cyBUaGUgWGVyY2VzIGFyZ3VtZW50cyB1c2VkIHRvIGNyZWF0ZSB0aGUgZXJyb3IgbWVzc2FnZQotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIG1lc3NhZ2Ugd2FzIGFibGUgdG8gYmUgYWRkZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGRNZXNzYWdlKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSwgaW50IHNldmVyaXR5LCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIG1lc3NhZ2VBcmd1bWVudHMpCi0gIHsKLSAgICBib29sZWFuIHN1Y2Nlc3NmdWxseUFkZGVkID0gZmFsc2U7Ci0gICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbnVsbCB0aGVyZSBpcyBub3RoaW5nIHRvIHJlcG9ydC4KLSAgICBpZihtZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHN1Y2Nlc3NmdWxseUFkZGVkOwotICAgIH0KLSAgICBTdHJpbmcgZXJyb3JVUkkgPSB1cmk7Ci0gICAgVVJMIGVycm9yVVJMID0gbnVsbDsKLSAgICBpZiAoZXJyb3JVUkkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JVUkkgPSBlcnJvclVSSS5yZXBsYWNlQWxsKCIlMjAiLCAiICIpOwotICAgICAgICBlcnJvclVSTCA9IG5ldyBVUkwoZXJyb3JVUkkpOwotICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICAvL2Vycm9yVVJJID0gbm9ybWFsaXplVVJJKGVycm9yVVJJKTsKLSAgICB9Ci0vLyAgICBlbHNlCi0vLyAgICB7Ci0vLyAgICAgIGVycm9yVVJJID0gdmFsaWRhdGluZ19maWxlX3VyaTsKLS8vICAgICAgZXJyb3JVUkwgPSB2YWxpZGF0aW5nX2ZpbGVfdXJsOwotLy8gICAgfQotICAgIC8vYm9vbGVhbiBkb0RpYWxvZyA9IHRydWU7Ci0gICAgaWYgKGVycm9yVVJMICE9IG51bGwpCi0gICAgewotICAgICAgc3VjY2Vzc2Z1bGx5QWRkZWQgPSB0cnVlOwotICAgICAgLy8gQWRkIHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0IGlmIG5lc3RlZCBlcnJvciBzdXBwb3J0IGlzIG9mZiBvcgotICAgICAgLy8gdGhpcyBtZXNzYWdlIGlzIGZvciB0aGUgY3VycmVudCBmaWxlLgotICAgICAgaWYgKCFXUkFQUEVSX0VSUk9SX1NVUFBPUlRfRU5BQkxFRCB8fCB2YWxpZGF0aW5nX2ZpbGVfdXJsLnNhbWVGaWxlKGVycm9yVVJMKSkKLSAgICAgIHsKLQotICAgICAgICBWYWxpZGF0aW9uTWVzc2FnZUltcGwgdmFsbWVzID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbChtZXNzYWdlLCBsaW5lLAotICAgICAgICAgICAgY29sdW1uLCBzZXZlcml0eSwgdXJpLCBlcnJvcktleSwgbWVzc2FnZUFyZ3VtZW50cyk7Ci0gICAgICAgIG1lc3NhZ2VzLmFkZCh2YWxtZXMpOwotICAgICAgfQotICAgICAgLy8gSWYgbmVzdGVkIGVycm9yIHN1cHBvcnQgaXMgZW5hYmxlZCBjcmVhdGUgYSBuZXN0ZWQgZXJyb3IuCi0gICAgICBlbHNlIGlmIChXUkFQUEVSX0VSUk9SX1NVUFBPUlRfRU5BQkxFRCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5lc3RlZHVyaSA9IGVycm9yVVJMLnRvRXh0ZXJuYWxGb3JtKCk7Ci0gICAgICAgIFZhbGlkYXRpb25NZXNzYWdlSW1wbCBuZXN0ZWRtZXNzID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbChtZXNzYWdlLCBsaW5lLAotICAgICAgICAgICAgY29sdW1uLCBzZXZlcml0eSwgbmVzdGVkdXJpKTsKLQotICAgICAgICBWYWxpZGF0aW9uTWVzc2FnZUltcGwgY29udGFpbmVyID0gKFZhbGlkYXRpb25NZXNzYWdlSW1wbCkgbmVzdGVkTWVzc2FnZXMuZ2V0KG5lc3RlZHVyaSk7Ci0gICAgICAgIGlmKGNvbnRhaW5lciA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSW5pdGlhbGx5IHNldCB0aGUgbmVzdGVkIGVycm9yIHRvIGEgd2FybmluZy4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY2hhbmdlZAotICAgICAgICAgIC8vIHRvIGFuIGVycm9yIGlmIGEgbmVzdGVkIG1lc3NhZ2UgaGFzIGEgc2V2ZXJpdHkgb2YgZXJyb3IuCi0gICAgICAgICAgY29udGFpbmVyID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbChtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSwgbmVzdGVkdXJpKSwgMSwgMCwgSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HLCBuZXN0ZWR1cmkpOwotICAgICAgICAgIG5lc3RlZE1lc3NhZ2VzLnB1dChuZXN0ZWR1cmksIGNvbnRhaW5lcik7Ci0gICAgICAgICAgbWVzc2FnZXMuYWRkKGNvbnRhaW5lcik7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGFpbmVyLmFkZE5lc3RlZE1lc3NhZ2UobmVzdGVkbWVzcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1Y2Nlc3NmdWxseUFkZGVkOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydCNnZXRWYWxpZGF0aW9uTWVzc2FnZXMoKQotICAgKi8KLSAgcHVibGljIElWYWxpZGF0aW9uTWVzc2FnZVtdIGdldFZhbGlkYXRpb25NZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gKElWYWxpZGF0aW9uTWVzc2FnZVtdKW1lc3NhZ2VzLnRvQXJyYXkobmV3IElWYWxpZGF0aW9uTWVzc2FnZVttZXNzYWdlcy5zaXplKCldKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZE5hbWVzcGFjZVdpdGhOb1ZhbGlkYXRvcihqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTmFtZXNwYWNlV2l0aE5vVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICAvLyBJZiB0aGUgbGlzdCBkb2Vzbid0IGFscmVhZHkgY29udGFpbiB0aGlzIG5hbWVzcGFjZSwgYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgLy8gYW5kIGNyZWF0ZSBhIHdhcm5pbmcgbWVzc2FnZS4KLSAgICBpZiAoIW5zTm9WYWxzLmNvbnRhaW5zKG5hbWVzcGFjZSkpCi0gICAgewotICAgICAgbnNOb1ZhbHMuYWRkKG5hbWVzcGFjZSk7Ci0gICAgICBhZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9XQVJOX05PX1ZBTERJQVRPUiwgbmFtZXNwYWNlKSwgMSwgMCk7Ci0KLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29udHJvbGxlclZhbGlkYXRpb25JbmZvI2NvbXBsZXRlV1NETFZhbGlkYXRpb24oKQotICAgKi8KLSAgcHVibGljIHZvaWQgY29tcGxldGVXU0RMVmFsaWRhdGlvbigpCi0gIHsKLSAgICBpZiAoaGFzZXJyb3JzKQotICAgIHsKLSAgICAgIHdzZGxWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NkbFZhbGlkID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0I2hhc0Vycm9ycygpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBoYXNFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGhhc2Vycm9yczsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuVmFsaWRhdGlvblJlcG9ydCNnZXROZXN0ZWRNZXNzYWdlcygpCi0gICAqLwotICBwdWJsaWMgSGFzaE1hcCBnZXROZXN0ZWRNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gbmVzdGVkTWVzc2FnZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFVSSVJlc29sdmVyKFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gIAl0aGlzLnVyaVJlc29sdmVyID0gdXJpUmVzb2x2ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpCi0gIHsKLSAgCXJldHVybiB1cmlSZXNvbHZlcjsKLSAgfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5WYWxpZGF0aW9uSW5mbyNnZXRBdHRyaWJ1dGUoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldEF0dHJpYnV0ZShTdHJpbmcgbmFtZSkgCi0JewotCQlpZihjb25maWd1cmF0aW9uID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCXJldHVybiBjb25maWd1cmF0aW9uLmdldFByb3BlcnR5KG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRDb25maWd1cmF0aW9uKFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCXsKLQkJdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsKLQl9Ci0JcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKLQkJcmV0dXJuICFoYXNFcnJvcnMoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZmQ2NGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25NZXNzYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLQotLyoqCi0gKiBBIHZhbGlkYXRpb24gbWVzc2FnZSBpcyBjcmVhdGVkIHdoZW4gdGhlcmUgaXMgaW5mb3JtYXRpb24gdG8gcmVwb3J0IGZyb20KLSAqIHZhbGlkYXRpbmcgYSBXU0RMIGRvY3VtZW50LgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsIGltcGxlbWVudHMgSVZhbGlkYXRpb25NZXNzYWdlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZTsKLSAgcHJvdGVjdGVkIGludCBsaW5lTnVtYmVyOwotICBwcm90ZWN0ZWQgaW50IGNvbHVtbk51bWJlcjsKLSAgcHJvdGVjdGVkIFN0cmluZyB1cmk7Ci0gIHByb3RlY3RlZCBpbnQgc2V2ZXJpdHkgPSBTRVZfRVJST1I7Ci0gIHByb3RlY3RlZCBMaXN0IG5lc3RlZEVycm9yczsKLSAgcHJvdGVjdGVkIFN0cmluZyBlcnJvcktleSA9IG51bGw7Ci0gIHByb3RlY3RlZCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiBAcGFyYW0gbGluZU51bWJlciBUaGUgbGluZSB3aGVyZSB0aGUgbWVzc2FnZSBzaG91bGQgYmUgZGlzcGxheWVkLgotICAgKiBAcGFyYW0gY29sdW1uTnVtYmVyIFRoZSBjb2x1bW4gd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQGRlcHJlY2F0ZWQgVXNlIGNvbnRydWN0b3Igd2l0aCBVUkkgcGFyYW1ldGVyLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25NZXNzYWdlSW1wbChTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGludCBzZXZlcml0eSkKLSAgewotICAgIHRoaXMobWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzZXZlcml0eSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEFsbG93cyBzcGVjaWZ5aW5nIGEgdXJpIGZvciB0aGUgcmVmZXJlbmNlIHRoYXQgdGhlIG1lc3NhZ2UgcmVmZXJzIHRvLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogQHBhcmFtIGxpbmVOdW1iZXIgVGhlIGxpbmUgd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQHBhcmFtIGNvbHVtbk51bWJlciBUaGUgY29sdW1uIHdoZXJlIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQuCi0gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBvZiB0aGUgcmVmZXJlbmNlIGZpbGUgZm9yIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25NZXNzYWdlSW1wbChTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGludCBzZXZlcml0eSwgU3RyaW5nIHVyaSkKLSAgewotICAgICAgdGhpcyhtZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNldmVyaXR5LCB1cmksIG51bGwsIG51bGwpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEFsbG93cyBzcGVjaWZ5aW5nIGEgdXJpIGZvciB0aGUgcmVmZXJlbmNlIHRoYXQgdGhlIG1lc3NhZ2UgcmVmZXJzIHRvLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogQHBhcmFtIGxpbmVOdW1iZXIgVGhlIGxpbmUgd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQHBhcmFtIGNvbHVtbk51bWJlciBUaGUgY29sdW1uIHdoZXJlIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQuCi0gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBvZiB0aGUgcmVmZXJlbmNlIGZpbGUgZm9yIHRoZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZXJyb3JLZXkgVGhlIFhlcmNlcyBFcnJvciBrZXkKLSAgICogQHBhcmFtIG1lc3NhZ2VBcmd1bWVudHMgVGhlIHZhbHVlcyB1c2VkIHRvICJmaWxsIGluIHRoZSBibGFua3MiIG9mIGEgWGVyY2VzIGVycm9yIE1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBpbnQgc2V2ZXJpdHksIFN0cmluZyB1cmksIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gbWVzc2FnZUFyZ3VtZW50cykKLSAgewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICB0aGlzLmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKLSAgICB0aGlzLnNldmVyaXR5ID0gc2V2ZXJpdHk7Ci0gICAgdGhpcy51cmkgPSB1cmk7Ci0gICAgdGhpcy5lcnJvcktleSA9IGVycm9yS2V5OwotICAgIHRoaXMubWVzc2FnZUFyZ3VtZW50cyA9IG1lc3NhZ2VBcmd1bWVudHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNvbHVtbiBudW1iZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBjb2x1bW4gbnVtYmVyIHdoZXJlIHRoZSBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbigpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uTnVtYmVyOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpbmUgbnVtYmVyLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gbGluZU51bWJlcjsKLSAgfQotCi0gIC8qKgotICAgKiByZXR1cm5zIHRoZSB1cmkgb2YgdGhlIHJlZmVyZW5jZSBmaWxlIGZvciB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdXJpIG9mIHRoZSByZXNvdXJjZSB0aGF0IHRoZSBtZXNzYWdlIHJlZmVycyB0by4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkKLSAgewotICAgIHJldHVybiB1cmk7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2UjZ2V0U2V2ZXJpdHkoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRTZXZlcml0eSgpCi0gIHsKLSAgICByZXR1cm4gc2V2ZXJpdHk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldmVyaXR5KGludCBzZXZlcml0eSkKLSAgewotICAgIGlmKHNldmVyaXR5ID09IFNFVl9FUlJPUiB8fCBzZXZlcml0eSA9PSBTRVZfV0FSTklORykKLSAgICB7Ci0gICAgICB0aGlzLnNldmVyaXR5ID0gc2V2ZXJpdHk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGEgbmVzdGVkIHZhbGlkYXRpb24gbWVzc2FnZSB0byB0aGlzIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0aW9uTWVzc2FnZSBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlIHRvIGFkZCBhcyBhIG5lc3RlZCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTmVzdGVkTWVzc2FnZShJVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UpCi0gIHsKLSAgICBpZiAobmVzdGVkRXJyb3JzID09IG51bGwpCi0gICAgewotICAgICAgbmVzdGVkRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIH0KLSAgICBuZXN0ZWRFcnJvcnMuYWRkKHZhbGlkYXRpb25NZXNzYWdlKTsKLSAgICBpbnQgdmFsaWRhaXRvbm1lc3NhZ2VTZXZlcml0eSA9IHZhbGlkYXRpb25NZXNzYWdlLmdldFNldmVyaXR5KCk7Ci0gICAgaWYodmFsaWRhaXRvbm1lc3NhZ2VTZXZlcml0eSA9PSBTRVZfRVJST1IpCi0gICAgewotICAgICAgc2V0U2V2ZXJpdHkoU0VWX0VSUk9SKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBsaXN0IG9mIG5lc3RlZCB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBuZXN0ZWQgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldE5lc3RlZE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBuZXN0ZWRFcnJvcnMgIT0gbnVsbCA/IG5lc3RlZEVycm9ycyA6IENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gdGhlIGVycm9yIGtleQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFcnJvcktleSgpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JLZXk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gZXJyb3JLZXkgdGhlIGVycm9yIGtleSB0byBzZXQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVycm9yS2V5KFN0cmluZyBlcnJvcktleSkKLSAgewotICAgIHRoaXMuZXJyb3JLZXkgPSBlcnJvcktleTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiB0aGUgWGVyY2VzIG1lc3NhZ2UgYXJndW1lbnRzIHVzZWQgdG8gImZpbGwgaW4gdGhlIGJsYW5rcyIgb2YgdGhlIG1lc3NhZ2VzCi0gICAqLwotICBwdWJsaWMgT2JqZWN0W10gZ2V0TWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZUFyZ3VtZW50czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRvclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdG9yUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIzMDVlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdG9yUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotCi0vKioKLSAqIEEgcmVnaXN0cnkgb2YgSVdTRExWYWxpZGF0b3IgdmFsaWRhdG9ycy4gVGhpcyBob2xkcyB0aGUgdG9wIGxldmVsIFdTREwgYW5kIFdTLUkgdmFsaWRhdG9ycy4KLSAqIFZhbGlkYXRvcnMgYXJlIHJlZ2lzdGVyZWQgYnkgdGhlIG5hbWVzcGFjZSB0aGV5IHZhbGlkYXRlLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yUmVnaXN0cnkKLXsKLSAgLyoqCi0gICAqIFRoZSBXU0RMIHZhbGlkYXRvciB0eXBlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBJbnRlZ2VyIFdTRExfVkFMSURBVE9SID0gbmV3IEludGVnZXIoMCk7Ci0gIC8qKgotICAgKiBUaGUgV1MtSSB2YWxpZGF0b3IgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgSW50ZWdlciBFWFRfVkFMSURBVE9SID0gbmV3IEludGVnZXIoMSk7Ci0gIHByb3RlY3RlZCBzdGF0aWMgVmFsaWRhdG9yUmVnaXN0cnkgdmVySW5zdGFuY2U7Ci0gIC8qCi0gICAgVGhpcyBpcyBhIE1hcCBvZiBNYXBzLiBUaGUgdG9wLWxldmVsIE1hcCBpcyBrZXllZCBieSAoQ2xhc3MpcGFyZW50VHlwZSwKLSAgICBhbmQgdGhlIGlubmVyIE1hcHMgYXJlIGtleWVkIGJ5IChRTmFtZSllbGVtZW50VHlwZS4KLSAgICBUaGlzIGlkZWEgaXMgdGhlIHNhbWUgYXMgaXMgZG9uZSBpbiBXU0RMNEoKLSAgKi8KLSAgcHJvdGVjdGVkIE1hcCB2YWxpZGF0b3JSZWcgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgcHJvdGVjdGVkIEl0ZXJhdG9yIGRlZmF1bHRWYWxpZGF0b3JJdGVyYXRvcjsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdG9yUmVnaXN0cnkoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhlIHJlZ2lzdHJ5LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHJlZ2lzdHJ5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBWYWxpZGF0b3JSZWdpc3RyeSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAodmVySW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB2ZXJJbnN0YW5jZSA9IG5ldyBWYWxpZGF0b3JSZWdpc3RyeSgpOwotICAgIH0KLSAgICByZXR1cm4gdmVySW5zdGFuY2U7Ci0gIH0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIHRoaXMgdmFsaWRhdG9yIG9mIHRoZSBnaXZlbiB0eXBlIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0aGUgdmFsaWRhdG9yIHZhbGlkYXRlcy4KLSAgICogQHBhcmFtIHZhbERlbGVnYXRlIFRoZSB2YWxpZGF0b3IgZGVsZWdhdGUgdG8gcmVnaXN0ZXIuCi0gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UsIFdTRExWYWxpZGF0b3JEZWxlZ2F0ZSB2YWxEZWxlZ2F0ZSwgSW50ZWdlciB0eXBlKQotICB7Ci0gICAgLy8gYWxsb3cgdGhlIG51bGwgbmFtZXNwYWNlIGJ1dCBtYWtlIGl0IHRoZSBlbXB0eSBzdHJpbmcKLSAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgewotICAgICAgbmFtZXNwYWNlID0gIiI7Ci0gICAgfQotCi0gICAgLy8gZ2V0IHRoZSBoYXN0YWJsZSBmb3IgdGhlIHR5cGUgb2YgdmFsaWRhdG9yIHdlIHdhbnQKLSAgICBIYXNodGFibGUgdHlwZVZhbGlkYXRvclJlZyA9IChIYXNodGFibGUpdmFsaWRhdG9yUmVnLmdldCh0eXBlKTsKLSAgICAvLyBpZiBpdCdzIG51bGwgaWYgbWVhbnMgd2UgaGF2ZW4ndCBkZWZpbmVkIHRoaXMgdHlwZSBvZiB2YWxpZGF0b3IgeWV0Ci0gICAgaWYgKHR5cGVWYWxpZGF0b3JSZWcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0eXBlVmFsaWRhdG9yUmVnID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgdmFsaWRhdG9yUmVnLnB1dCh0eXBlLCB0eXBlVmFsaWRhdG9yUmVnKTsKLSAgICB9Ci0gICAgCi0gICAgICBMaXN0IG5hbWVzcGFjZXZhbHMgPSAoTGlzdCl0eXBlVmFsaWRhdG9yUmVnLmdldChuYW1lc3BhY2UpOwotICAgICAgaWYobmFtZXNwYWNldmFscyA9PSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lc3BhY2V2YWxzID0gbmV3IFZlY3RvcigpOwotICAgICAgICB0eXBlVmFsaWRhdG9yUmVnLnB1dChuYW1lc3BhY2UsIG5hbWVzcGFjZXZhbHMpOwotICAgICAgfQotICAgICAgbmFtZXNwYWNldmFscy5hZGQodmFsRGVsZWdhdGUpOwotCi0gIH0KLSAgLyoqCi0gICAqIEFzayBmb3IgdGhlIHZhbGlkYXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBuYW1lc3BhY2UuIElmIG5vbmUgaXMgZm91bmQKLSAgICogcmV0dXJuIG51bGwuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSB2YWxpZGF0b3IgdGhhdCBpcyBiZWluZyByZXF1ZXN0ZWQuCi0gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHZhbGlkYXRvciB0aGF0IGlzIGJlaW5nIHJlcXVlc3RlZC4KLSAgICogQHJldHVybiBBbiBhcnJheSBvZiB2YWxpZGF0b3IgZGVsZWdhdGVzIGlmIGF0IGxlYXN0IG9uZSBpcyByZWdpc3RlcmVkLCBudWxsIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMVmFsaWRhdG9yRGVsZWdhdGVbXSBxdWVyeVZhbGlkYXRvclJlZ2lzdHJ5KFN0cmluZyBuYW1lc3BhY2UsIEludGVnZXIgdHlwZSkKLSAgewotICAgIC8vIGlmIHRoZSBuYW1lc3BhY2UgaXMgbnVsbCBhbGxvdyBpdCBhbmQgdHJlYXQgaXQgYXMgdGhlIGVtcHR5IHN0cmluZwotICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICB9Ci0gICAgSGFzaHRhYmxlIHR5cGVWYWxpZGF0b3JSZWcgPSAoSGFzaHRhYmxlKXZhbGlkYXRvclJlZy5nZXQodHlwZSk7Ci0gICAgaWYgKHR5cGVWYWxpZGF0b3JSZWcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIH0KLQotICAgIExpc3QgdmFsZGVscyA9IChMaXN0KXR5cGVWYWxpZGF0b3JSZWcuZ2V0KG5hbWVzcGFjZSk7Ci0gICAgaWYodmFsZGVscyAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoV1NETFZhbGlkYXRvckRlbGVnYXRlW10pdmFsZGVscy50b0FycmF5KG5ldyBXU0RMVmFsaWRhdG9yRGVsZWdhdGVbdmFsZGVscy5zaXplKCldKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSB2YWxpZGF0b3IgcmVnaXN0ZXJlZCBvZiB0aGUgZ2l2ZW4gdHlwZSB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHZhbGlkYXRvci4KLSAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIHZhbGlkYXRvci4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGlzIGEgdmFsaWRhdG9yIHJlZ2lzdGVyZWQgZm9yIHRoZSBuYW1lc3BhY2UsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc1JlZ2lzdGVyZWRWYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSwgSW50ZWdlciB0eXBlKQotICB7Ci0gICAgaWYgKHF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkobmFtZXNwYWNlLCB0eXBlKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JiODAyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi0vKioKLSAqIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHZhbGlkYXRpb24gb2YgYSBzcGVjaWZpYwotICogZmlsZS4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiAKLXsKLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAKLSAgLyoqCi0gICAqIFNldCBhbiBhdHRyaWJ1dGUgb24gdGhlIHZhbGlkYXRvci4gQW4gYXR0cmlidXRlIGlzCi0gICAqIGRlZmluZWQgYnkgYSBuYW1lIGFuZCBhIHZhbHVlIHBhaXIuIEFuIGF0dHJpYnV0ZSBtYXkKLSAgICogYmUgZGVmaW5lZCBmb3IgYW55IHZhbGlkYXRvciwgYnVpbHQgaW4gb3IgYW4gZXh0ZW5zaW9uLgotICAgKiBFeHRlbnNpb24gdmFsaWRhdG9ycyBjYW4gcHJvYmUgdGhlIGF0dHJpYnV0ZXMgc2V0IG9uCi0gICAqIHRoZSBXU0RMIHZhbGlkYXRvciB0byBjdXN0b21pemUgdGhlIHdheSBpbiB3aGljaCB0aGV5Ci0gICAqIHZhbGlkYXRlLiBBIG51bGwgdmFsdWUgd2lsbCB1bnNldCBhbiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIGlkZW50aWZpZXIuCi0gICAqIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIGl0c2VsZi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpCi0gIHsKLQlpZih2YWx1ZSA9PSBudWxsKQotCXsKLQkgIHByb3BlcnRpZXMucmVtb3ZlKG5hbWUpOwotCX0KLQllbHNlCi0JewotICAJICBwcm9wZXJ0aWVzLnB1dChuYW1lLCB2YWx1ZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB2YWx1ZSBzZXQgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG9yIG51bGwgaWYgdGhlIHByb3BlcnR5IGhhcyBub3QgYmVlbiBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5KFN0cmluZyBuYW1lKQotICB7Ci0JaWYobmFtZSAhPSBudWxsKQotCSAgcmV0dXJuIHByb3BlcnRpZXMuZ2V0KG5hbWUpOwotCXJldHVybiBudWxsOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvV1NETFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDMyYjFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSUV4dGVuc2libGVVUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLkNsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETDExQmFzaWNWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETDExVmFsaWRhdG9yQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5odHRwLkhUVFBWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEubWltZS5NSU1FVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnNvYXAuU09BUFZhbGlkYXRvcjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0KLS8qKgotICogQW4gbWFpbiBXU0RMIHZhbGlkYXRvciBjbGFzcy4gVGhlIFdTREwgdmFsaWRhdG9yIHZhbGlkYXRlcyBXU0RMIGRvY3VtZW50cy4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFZBTElEQVRPUl9SRVNPVVJDRV9CVU5ETEUgPSAidmFsaWRhdGV3c2RsIjsKLSAgcHJpdmF0ZSBWYWxpZGF0aW9uQ29udHJvbGxlciB2YWxpZGF0aW9uQ29udHJvbGxlcjsKLSAgcHJvdGVjdGVkIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3IoKQotICB7Ci0gICAgUmVzb3VyY2VCdW5kbGUgcmIgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoVkFMSURBVE9SX1JFU09VUkNFX0JVTkRMRSk7Ci0gICAgdXJpUmVzb2x2ZXIgPSBuZXcgVVJJUmVzb2x2ZXIoKTsKLSAgICB2YWxpZGF0aW9uQ29udHJvbGxlciA9IG5ldyBWYWxpZGF0aW9uQ29udHJvbGxlcihyYiwgdXJpUmVzb2x2ZXIpOwotICAgIAotICAgIC8vUmVnaXN0ZXIgdGhlIGRlZmF1bHQgdmFsaWRhdG9ycy4KLSAgICBWYWxpZGF0b3JSZWdpc3RyeSByZWdpc3RyeSA9IFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgLy8gUmVnaXN0ZXIgdGhlIFdTREwgMS4xIHZhbGlkYXRvciBjb250cm9sbGVyIGFuZCB2YWxpZGF0b3JzLgotICAgIFdTRExWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZShXU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyLmNsYXNzLmdldE5hbWUoKSwgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlclZhbGlkYXRvcihDb25zdGFudHMuTlNfVVJJX1dTREwsIGRlbGVnYXRlLCBWYWxpZGF0b3JSZWdpc3RyeS5XU0RMX1ZBTElEQVRPUik7Ci0gICAgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUxID0gbmV3IENsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUoV1NETDExQmFzaWNWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKENvbnN0YW50cy5OU19VUklfV1NETCwgZGVsZWdhdGUxKTsKLSAgICBkZWxlZ2F0ZTEgPSBuZXcgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShIVFRQVmFsaWRhdG9yLmNsYXNzLmdldE5hbWUoKSwgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICByZWdpc3RlcldTREwxMVZhbGlkYXRvcihvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50cy5OU19IVFRQLCBkZWxlZ2F0ZTEpOwotICAgIGRlbGVnYXRlMSA9IG5ldyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKFNPQVBWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzLk5TX1NPQVAxMSwgZGVsZWdhdGUxKTsKLSAgICBkZWxlZ2F0ZTEgPSBuZXcgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShNSU1FVmFsaWRhdG9yLmNsYXNzLmdldE5hbWUoKSwgZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICByZWdpc3RlcldTREwxMVZhbGlkYXRvcihvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50cy5OU19NSU1FLCBkZWxlZ2F0ZTEpOwotICAgCi0gICAgLy8gVGhlIFdTREwgMS4xIHNjaGVtYSB2YWxpZGF0b3IgaXMgYSBzcGVjaWFsIGNhc2UgYXMgaXQgaXMgcmVnaXN0ZXJlZCBmb3IgdGhyZWUgbmFtZXNwYWNlcy4KLS8vICAgIGRlbGVnYXRlMSA9IG5ldyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShJbmxpbmVTY2hlbWFWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBWQUxJREFUT1JfUkVTT1VSQ0VfQlVORExFLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotLy8gICAgcmVnaXN0ZXJXU0RMMTFWYWxpZGF0b3IoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSwgZGVsZWdhdGUxKTsKLS8vICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDAsIGRlbGVnYXRlMSk7Ci0vLyAgICByZWdpc3RlcldTREwxMVZhbGlkYXRvcihDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCBkZWxlZ2F0ZTEpOwotICB9Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIFdTREwgZmlsZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gdXJpIFRoZSBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlIHRvIHZhbGlkYXRlLgotICAgKiBAcmV0dXJuIEEgdmFsaWRhdGlvbiByZXBvcnQgc3VtbWFyaXppbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgSVZhbGlkYXRpb25SZXBvcnQgdmFsaWRhdGUoU3RyaW5nIHVyaSkKLSAgewotICAgcmV0dXJuIHZhbGlkYXRlKHVyaSwgbnVsbCwgbmV3IFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBWYWxpZGF0ZSB0aGUgaW5wdXRTdHJlYW0KLSAgICogQHBhcmFtIHVyaSBUaGUgbG9jYXRpb24gb2YgdGhlIFdTREwgZmlsZSBiZWluZyB2YWxpZGF0ZWQKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtIFRoZSBzdHJlYW0gdG8gdmFsaWRhdGUKLSAgICogQHJldHVybiBBIFZhbGlkYXRpb24gcmVwb3J0IHN1bW1hcml6aW5nIHRoZSByZXN1bHRzIG9mIHRoZSB2YWxpZGF0aW9uCi0gICAqLwotICBwdWJsaWMgSVZhbGlkYXRpb25SZXBvcnQgdmFsaWRhdGUoU3RyaW5nIHVyaSwgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICB7Ci0gICAgaWYodXJpID09IG51bGwpIAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgaWYoY29uZmlndXJhdGlvbiA9PSBudWxsKQotICAgICAgY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbkNvbnRyb2xsZXIudmFsaWRhdGUodXJpLCBpbnB1dFN0cmVhbSwgY29uZmlndXJhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBVUkkgcmVzb2x2ZXIgdG8gdGhlIFdTREwgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHVyaVJlc29sdmVyIFRoZSBVUkkgcmVzb2x2ZXIgdG8gYWRkIHRvIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFVSSVJlc29sdmVyKElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIpCi0gIHsKLSAgCXRoaXMudXJpUmVzb2x2ZXIuYWRkVVJJUmVzb2x2ZXIodXJpUmVzb2x2ZXIpOwotICB9Ci0gIAotICAvKioKLSAgICogUmVnaXN0ZXIgYW4gZXh0ZW5zaW9uIFdTREwgdmFsaWRhdG9yIGRlbGVnYXRlIHdpdGggdGhpcyB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdGhlIHZhbGlkYXRvciB2YWxpZGF0ZXMgZm9yLiBUaGlzIGlzIHRoZSBXU0RMIG5hbWVzcGFjZS4KLSAgICogQHBhcmFtIGRlbGVnYXRlIFRoZSBkZWxlZ2F0ZSB0aGF0IGhvbGRzIHRoZSB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldTRExFeHRlbnNpb25WYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSwgV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlKQotICB7Ci0gICAgVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5yZWdpc3RlclZhbGlkYXRvcihuYW1lc3BhY2UsIGRlbGVnYXRlLCBWYWxpZGF0b3JSZWdpc3RyeS5FWFRfVkFMSURBVE9SKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlZ2lzdGVyIGEgV1NETCAxLjEgdmFsaWRhdG9yIGRlbGVnYXRlIHdpdGggdGhpcyB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdGhlIHZhbGlkYXRvciB2YWxpZGF0ZXMgZm9yLgotICAgKiBAcGFyYW0gZGVsZWdhdGUgVGhlIGRlbGVnYXRlIHRoYXQgaG9sZHMgdGhlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UsIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlKQotICB7Ci0gICAgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5yZWdpc3RlclZhbGlkYXRvcihuYW1lc3BhY2UsIGRlbGVnYXRlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmFlMDI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi0vKioKLSAqIEEgV1NETFZhbGlkYXRvckRlbGVnYXRlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgV1NETCB2YWxpZGF0b3IuCi0gKiBBIGRlbGVnYXRlIGlzIHVzZWQgdG8gbGF6eSBsb2FkIGV4dGVuc2lvbiB2YWxpZGF0b3JzLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETFZhbGlkYXRvckRlbGVnYXRlIAotewotICBwcml2YXRlIElXU0RMVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB2YWxpZGF0b3Igc3BlY2lmaWVkIGluIHRoaXMgZGVsZWdhdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBXU0RMIHZhbGlkYXRvciBzcGVjaWZpZWQgYnkgdGhpcyBkZWxlZ2F0ZS4KLSAgICovCi0gIHB1YmxpYyBJV1NETFZhbGlkYXRvciBnZXRWYWxpZGF0b3IoKQotICB7Ci0gICAgaWYgKHZhbGlkYXRvciA9PSBudWxsKQotICAgIHsKLSAgICAgIHZhbGlkYXRvciA9IGxvYWRWYWxpZGF0b3IoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRvcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIExvYWQgdGhlIHZhbGlkYXRvciBzcGVjaWZpZWQgaW4gdGhpcyBkZWxlZ2F0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFdTREwgdmFsaWRhdG9yIHNwZWNpZmllZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0IElXU0RMVmFsaWRhdG9yIGxvYWRWYWxpZGF0b3IoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHZhbGlkYXRvciBuYW1lLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRWYWxpZGF0b3JOYW1lKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkODJmNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZUxvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIEEgbG9nZ2VyIHRoYXQgd2lsbCBsb2cgdG8gdGhlIGxvZyBmaWxlIGluIHRoZSBFY2xpcHNlIG1ldGFkYXRhIGRpcmVjdG9yeS4KLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyCi17Ci0KLQkKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSkgCi0gIHsKLSAgICBsb2cobWVzc2FnZSwgc2V2ZXJpdHksIG51bGwpOwkKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuVGhyb3dhYmxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHksIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLQkvLyBEb24ndCBsb2cgdmVyYm9zZSBpbmZvcm1hdGlvbiBpbiB0aGUgRWNsaXBzZSBsb2cuCi0JaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfVkVSQk9TRSkKLQl7Ci0JICByZXR1cm47Ci0JfQotCWludCBzdGF0dXMgPSBJU3RhdHVzLklORk87Ci0JaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLQl7Ci0JICBzdGF0dXMgPSBJU3RhdHVzLldBUk5JTkc7Ci0JfQotCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfRVJST1IpCi0JewotCSAgc3RhdHVzID0gSVN0YXR1cy5FUlJPUjsKLQl9Ci0gICAgVmFsaWRhdGVXU0RMUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TG9nKCkubG9nKG5ldyBTdGF0dXMoc3RhdHVzLCBWYWxpZGF0ZVdTRExQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgSVN0YXR1cy5PSywgbWVzc2FnZSwgdGhyb3dhYmxlKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL0VjbGlwc2VXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZVdTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YWI2YjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZVdTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgRWNsaXBzZVdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGV4dGVuZHMgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBCdW5kbGUgYnVuZGxlID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lIGFuZCAKLSAgICogYSBjbGFzcyBsb2FkZXIgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKiBAcGFyYW0gYnVuZGxlIFRoZSBidW5kbGUgdG8gdXNlIHRvIGxvYWQgdGhlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBFY2xpcHNlV1NETDExVmFsaWRhdG9yRGVsZWdhdGUoU3RyaW5nIHZhbGlkYXRvckNsYXNzbmFtZSwgQnVuZGxlIGJ1bmRsZSkKLSAgewotCXRoaXMudmFsaWRhdG9yQ2xhc3NuYW1lID0gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETDExVmFsaWRhdG9yRGVsZWdhdGUjbG9hZFZhbGlkYXRvcigpCi0gICAqLwotICBwcm90ZWN0ZWQgSVdTREwxMVZhbGlkYXRvciBsb2FkVmFsaWRhdG9yKCkKLSAgewotCUlXU0RMMTFWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLQlpZihidW5kbGUgIT0gbnVsbCkKLQl7Ci0JICB0cnkKLQkgIHsKLSAgICAgICAgQ2xhc3MgdmFsaWRhdG9yQ2xhc3MgPSBidW5kbGUubG9hZENsYXNzKHZhbGlkYXRvckNsYXNzbmFtZSk7Ci0KLSAgICAgICAgdmFsaWRhdG9yID0gKElXU0RMMTFWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgIAotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgIAlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJVbmFibGUgdG8gbG9hZCB2YWxpZGF0b3IgIiArIHZhbGlkYXRvckNsYXNzbmFtZSwgSUxvZ2dlci5TRVZfRVJST1IsIHQpOwotICAgICAgfQotCX0KLQlyZXR1cm4gdmFsaWRhdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZTE4MWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZVdTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotCi0vKioKLSAqIEEgZGVsZWdhdGUgaG9sZHMgYSB2YWxpZGF0b3IncyBpbmZvcm1hdGlvbiBhbmQgY2FuIGluc3RhbnRpYXRlIGl0Ci0gKiB3aGVuIHJlcXVlc3RlZCB0by4KLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUgZXh0ZW5kcyBXU0RMVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBCdW5kbGUgYnVuZGxlID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lIGFuZCAKLSAgICogYW4gT1NHSSBidW5kbGUgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKiBAcGFyYW0gYnVuZGxlIFRoZSBPU0dJIGJ1bmRsZSB0byB1c2UgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIEVjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUoU3RyaW5nIHZhbGlkYXRvckNsYXNzbmFtZSwgQnVuZGxlIGJ1bmRsZSkKLSAgewotCXRoaXMudmFsaWRhdG9yQ2xhc3NuYW1lID0gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQWJzdHJhY3RXU0RMVmFsaWRhdG9yRGVsZWdhdGUjbG9hZFZhbGlkYXRvcigpCi0gICAqLwotICBwcm90ZWN0ZWQgSVdTRExWYWxpZGF0b3IgbG9hZFZhbGlkYXRvcigpCi0gIHsKLQlJV1NETFZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotICAgIGlmKGJ1bmRsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgIAlDbGFzcyB2YWxpZGF0b3JDbGFzcyA9IGJ1bmRsZS5sb2FkQ2xhc3ModmFsaWRhdG9yQ2xhc3NuYW1lKTsKLQotICAgICAgICB2YWxpZGF0b3IgPSAoSVdTRExWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKFRocm93YWJsZSB0KQotICAgICAgewotICAgIAlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJVbmFibGUgdG8gbG9hZCB2YWxpZGF0b3IgIiArIHZhbGlkYXRvckNsYXNzbmFtZSwgSUxvZ2dlci5TRVZfRVJST1IsIHQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5BYnN0cmFjdFdTRExWYWxpZGF0b3JEZWxlZ2F0ZSNnZXRWYWxpZGF0b3JOYW1lKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdG9yTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9JbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA4OWJiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9JbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MR3JhbW1hclBvb2xJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5HcmFtbWFyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyRGVzY3JpcHRpb247Ci0KLS8qKgotICogQSBncmFtbWFyIHBvb2wgZm9yIGlubGluZSBzY2hlbWFzLiBUaGlzIGdyYW1tYXIgcG9vbCByZXN0cmljdHMgaW5saW5lIHNjaGVtYXMKLSAqIGZyb20gYmVpbmcgY2FjaGVkLgotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwgZXh0ZW5kcyBYTUxHcmFtbWFyUG9vbEltcGwgCi17Ci0gIHB1YmxpYyB2b2lkIHB1dEdyYW1tYXIoR3JhbW1hciBncmFtbWFyKSAKLSAgewotCWlmIChncmFtbWFyID09IG51bGwpCi0JICByZXR1cm47Ci0JLy8gd2Ugb3ZlcmlkZSB0aGlzIG1ldGhvZCB0byBwZXJmb3JtICdzZWxlY3RpdmUnIGNhY2hpbmcgb2Ygc2NoZW1hcwotCVhNTEdyYW1tYXJEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IGdyYW1tYXIuZ2V0R3JhbW1hckRlc2NyaXB0aW9uKCk7Ci0JaWYgKCFmUG9vbElzTG9ja2VkICYmICFjb250YWluc0dyYW1tYXIoZ3JhbW1hci5nZXRHcmFtbWFyRGVzY3JpcHRpb24oKSkpIAotCXsKLQkgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGNhY2hpbmcgdGhlIGlubGluZSBzY2hlbWFzCi0JICAvLyB3ZSBlbnN1cmUgdGhlIGxpdGVyYWwgc3lzdGVtIGlkIGRvZXMgbm90IGVuZCB3aXRoIHdzZGwKLQkgIC8vIGJlZm9yZSB3ZSBhdHRlbXB0IHRvICdwdXQnIHRoZSBncmFtbWFyCi0JICBTdHJpbmcgbGl0U3lzSWQgPSBkZXNjcmlwdGlvbi5nZXRMaXRlcmFsU3lzdGVtSWQoKTsKLQkgIFN0cmluZyBiYXNTeXNJZCA9IGRlc2NyaXB0aW9uLmdldEJhc2VTeXN0ZW1JZCgpOwotCSAgaWYgKGxpdFN5c0lkICE9IG51bGwgJiYgbGl0U3lzSWQuZW5kc1dpdGgoInhzZCIpCi0JCQkmJiBiYXNTeXNJZCAhPSBudWxsICYmIGJhc1N5c0lkLmVuZHNXaXRoKCJ3c2RsIikpIAotCSAgewotCQkJCS8qCi0JCQkJICogU3lzdGVtLm91dC5wcmludGxuKCJwdXRHcmFtYW1yIDogIiArCi0JCQkJICogc2NoZW1hRGVzY3JpcHRpb24uZ2V0TmFtZXNwYWNlKCkgKyAiLCAiICsKLQkJCQkgKiBzY2hlbWFEZXNjcmlwdGlvbi5nZXRFeHBhbmRlZFN5c3RlbUlkKCkgKyAiLCAiICsKLQkJCQkgKiBzY2hlbWFEZXNjcmlwdGlvbi5nZXRCYXNlU3lzdGVtSWQoKSk7Ci0JCQkJICovCi0JICAgIHN1cGVyLnB1dEdyYW1tYXIoZ3JhbW1hcik7Ci0JICB9Ci0JfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVVJJUmVzb2x2ZXJXcmFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9VUklSZXNvbHZlcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhNmJiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9VUklSZXNvbHZlcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSUV4dGVuc2libGVVUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklVUklSZXNvbHV0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFuIHdyYXBwZXIgVVJJIHJlc29sdmVyIHRoYXQgd3JhcHMgdGhlIFdlYiBTdGFuZGFyZCBUb29scyBVUkkgcmVzb2x2ZXIKLSAqIGluIGEgV1NETCB2YWxpZGF0b3IgVVJJIHJlc29sdmVyLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXJXcmFwcGVyIGltcGxlbWVudHMgSUV4dGVuc2libGVVUklSZXNvbHZlcgotewotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXJXcmFwcGVyKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JRXh0ZW5zaWJsZVVSSVJlc29sdmVyI3Jlc29sdmUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JVVJJUmVzb2x1dGlvblJlc3VsdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc29sdmUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQsIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc3VsdCkKLSAgewotICAgIFVSSVJlc29sdmVyIHJlc29sdmVyID0gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKTsKLSAgICBTdHJpbmcgcmVzb2x2ZWRTeXN0ZW1JZCA9IHJlc29sdmVQbGF0Zm9ybVVSTChzeXN0ZW1JZCk7Ci0gICAgU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLSAgICBpZiAocHVibGljSWQgIT0gbnVsbCB8fCByZXNvbHZlZFN5c3RlbUlkICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBsb2NhdGlvbiA9IHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBwdWJsaWNJZCwgcmVzb2x2ZWRTeXN0ZW1JZCk7Ci0gICAgfSAgCi0gICAgCi0gICAgaWYgKGxvY2F0aW9uICE9IG51bGwpCi0gICAgeyAgICAgICAKLSAgICAgIHJlc3VsdC5zZXRMb2dpY2FsTG9jYXRpb24obG9jYXRpb24pOwotICAgICAgU3RyaW5nIHBoeXNpY2FsID0gcmVzb2x2ZXIucmVzb2x2ZVBoeXNpY2FsTG9jYXRpb24oYmFzZUxvY2F0aW9uLCBwdWJsaWNJZCwgbG9jYXRpb24pOwotICAgICAgaWYocGh5c2ljYWwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0LnNldFBoeXNpY2FsTG9jYXRpb24ocGh5c2ljYWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQuc2V0UGh5c2ljYWxMb2NhdGlvbihsb2NhdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogUmVzb2x2ZSBwbGF0Zm9ybSBVUkxzIHRvIHN0YW5kYXJkIFVSTHMuIFRoaXMgbWV0aG9kIGhhcyB0aGUKLSAgICogcHJhY3RpY2FsIGVmZmVjdCBvZiB0cmFuc2Zvcm1pbmcgYSBVUkwgc3VjaCBhcwotICAgKiBwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdC90ZXN0LndzZGwKLSAgICogaW50bwotICAgKiBmaWxlOi9jOi93dHAvd29ya3NwYWNlL3Rlc3QvdGVzdC53c2RsCi0gICAqIAotICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdGhhdCBtYXkgY29udGFpbiB0aGUgcGxhdGZvcm0gc2NoZW1lLgotICAgKiBAcmV0dXJuIEEgcmVzb2x2ZWQgVVJMIHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgcGxhdGZvcm0gc2NoZW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyByZXNvbHZlUGxhdGZvcm1VUkwoU3RyaW5nIHVybCkKLSAgewotCSAgU3RyaW5nIHJlc3VsdCA9IHVybDsKLQkgIGlmKHVybCAhPSBudWxsICYmIHVybC5zdGFydHNXaXRoKCJwbGF0Zm9ybToiKSkKLSAgICAgIHsKLSAgICAJICB0cnkKLSAgICAJICB7Ci0gICAgCQkgIFVSTCBmaWxlVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKG5ldyBVUkwodXJsKSk7Ci0gICAgCQkgIHJlc3VsdCA9IGZpbGVVUkwudG9FeHRlcm5hbEZvcm0oKTsKLSAgICAJICB9Ci0gICAgCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgCSAgewotICAgIAkJICAvLyBDYW4ndCByZXNvbHZlIHVzaW5nIHRoZSBGaWxlTG9jYXRvciBpbiB0aGlzCi0gICAgCQkgIC8vIGNhc2Ugc28gZG8gbm90aGluZy4KLSAgICAJICB9Ci0gICAgICB9Ci0JICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0ZVdTRExQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRlV1NETFBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmNkMWNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRlV1NETFBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHJlcXVpcmVkIGZvciBlY2xpcHNlLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgUFJPUEVSVElFU19GSUxFID0gInZhbGlkYXRld3NkbHVpIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBWYWxpZGF0ZVdTRExQbHVnaW4gaW5zdGFuY2U7Ci0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZWJ1bmRsZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSB3c2RsVmFsaWRhdG9yUmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0ZVdTRExQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdGFydChjb250ZXh0KTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gICAgd3NkbFZhbGlkYXRvclJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKENvbnN0YW50cy5XU0RMX1ZBTElEQVRPUl9QUk9QRVJUSUVTX0ZJTEUpOwotICAgIHJlc291cmNlYnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFBST1BFUlRJRVNfRklMRSk7Ci0gICAgCi0gICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihuZXcgRWNsaXBzZUxvZ2dlcigpKTsKLQotICAgIG5ldyBXU0RMVmFsaWRhdG9yUGx1Z2luUmVnaXN0cnlSZWFkZXIoCi0gICAgICAiZXh0dmFsaWRhdG9yIiwKLSAgICAgICJleHR2YWxpZGF0b3IiLAotICAgICAgV1NETFZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyLkVYVF9WQUxJREFUT1IpCi0gICAgICAucmVhZFJlZ2lzdHJ5KCk7Ci0KLSAgICAvLyByZWdpc3RlciBhbnkgV1NETCAxLjEgdmFsaWRhdG9ycyBkZWZpbmVkCi0gICAgbmV3IFdTREwxMVZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyKCJ3c2RsMTF2YWxpZGF0b3IiLCAidmFsaWRhdG9yIikucmVhZFJlZ2lzdHJ5KCk7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdG9wKGNvbnRleHQpOwotICAgIFhNTENhdGFsb2cucmVzZXQoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4gb2JqZWN0LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4gb2JqZWN0Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFZhbGlkYXRlV1NETFBsdWdpbiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUoZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKiBSZXNvdXJjZUJ1bmRsZSBoZWxwZXIgbWV0aG9kcwotICAgKiAKLSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBidW5kbGUgZm9yIHRoaXMgcGx1Z2luLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgcmVzb3VyY2UgYnVuZGxlIGZvciB0aGlzIHBsdWdpbgotICAgKi8KLSAgcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkKLSAgewotICAgIHJldHVybiByZXNvdXJjZWJ1bmRsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBidW5kbGUgZm9yIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHJlc291cmNlIGJ1bmRsZSBmb3IgdGhlIFdTREwgdmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0V1NETFZhbGlkYXRvclJlc291cmNlQnVuZGxlKCkKLSAgewotICAgIHJldHVybiB3c2RsVmFsaWRhdG9yUmVzb3VyY2VCdW5kbGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gaWQuCi0gICAqIAotICAgKiBAcGFyYW0gc3RyaW5nSUQgLSB0aGUgaWQgZm9yIHRoZSBzdHJpbmcKLSAgICogQHJldHVybiB0aGUgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gaWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBzdHJpbmdJRCkKLSAgewotICAgIHJldHVybiBnZXRSZXNvdXJjZUJ1bmRsZSgpLmdldFN0cmluZyhzdHJpbmdJRCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlYWRzIHRoZSBwbHVnaW4gbWFuaWZlc3RzIGFuZCByZWdpc3RlcnMgZWFjaCBXU0RMRXh0ZW5zaW9uVmFsaWRhdG9yCi0gKi8KLWNsYXNzIFdTRExWYWxpZGF0b3JQbHVnaW5SZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgV1NETF9WQUxJREFUT1IgPSAwOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBFWFRfVkFMSURBVE9SID0gMTsKLSAgcHJvdGVjdGVkIFN0cmluZyBleHRlbnNpb25Qb2ludElkOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhZ05hbWU7Ci0gIHByb3RlY3RlZCBpbnQgdmFsaWRhdG9yVHlwZTsKLQotICAvKioKLSAgICogCi0gICAqLwotICBwdWJsaWMgV1NETFZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyKFN0cmluZyBleHRlbnNpb25Qb2ludElkLCBTdHJpbmcgdGFnTmFtZSwgaW50IHZhbGlkYXRvclR5cGUpCi0gIHsKLSAgICB0aGlzLmV4dGVuc2lvblBvaW50SWQgPSBleHRlbnNpb25Qb2ludElkOwotICAgIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7Ci0gICAgdGhpcy52YWxpZGF0b3JUeXBlID0gdmFsaWRhdG9yVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiByZWFkIGZyb20gcGx1Z2luIHJlZ2lzdHJ5IGFuZCBwYXJzZSBpdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeSgpCi0gIHsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcGx1Z2luUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElFeHRlbnNpb25Qb2ludCBwb2ludCA9IHBsdWdpblJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFBMVUdJTl9JRCwgZXh0ZW5zaW9uUG9pbnRJZCk7Ci0gICAgaWYgKHBvaW50ICE9IG51bGwpCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBwb2ludC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHJlYWRFbGVtZW50KGVsZW1lbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogcmVhZEVsZW1lbnQoKSAtIHBhcnNlIGFuZCBkZWFsIHdpdGggYW4gZXh0ZW5zaW9uIGxpa2U6Ci0gICAqCi0gICAqIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnZhbGlkYXRlLndzZGwuV1NETEV4dGVuc2lvblZhbGlkYXRvciIKLSAgICogICAgICAgICAgICBpZD0ic29hcFZhbGlkYXRvciIKLSAgICogICAgICAgICAgICBuYW1lPSJTT0FQIFZhbGlkYXRvciI+PgotICAgKiAgIDx2YWxpZGF0b3I+Ci0gICAqICAgICAgICA8cnVuIGNsYXNzPSIgb3JnLmVjbGlwc2UudmFsaWRhdGUud3NkbC5zb2FwLlNPQVBWYWxpZGF0b3IiLz4KLSAgICogICA8L3ZhbGlkYXRvcj4KLSAgICogICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iLz4KLSAgICogPC9leHRlbnNpb24+Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgewotICAgICAgU3RyaW5nIHZhbGlkYXRvckNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRVNQQUNFKTsKLQotICAgICAgaWYgKHZhbGlkYXRvckNsYXNzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gICAgICAgICAgQ2xhc3NMb2FkZXIgcGx1Z2luTG9hZGVyID0KLSAgICAgICAgICAvLyAgICAgICAgICAgIGVsZW1lbnQuZ2V0RGVjbGFyaW5nRXh0ZW5zaW9uKCkuZ2V0RGVjbGFyaW5nUGx1Z2luRGVzY3JpcHRvcigpLmdldFBsdWdpbigpLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICAgICAgICAvLwkJCQltb2RpZmllZCB0byByZXNvbHZlIGNlcnRhaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgcGx1Z2luIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZAotCi0gICAgICAgICAgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAodmFsaWRhdG9yVHlwZSA9PSBFWFRfVkFMSURBVE9SKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICBFY2xpcHNlV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IEVjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUodmFsaWRhdG9yQ2xhc3MsIHBsdWdpbkJ1bmRsZSk7Ci0gICAgICAgICAgICBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCkucmVnaXN0ZXJXU0RMRXh0ZW5zaW9uVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0vKioKLSAqIFJlYWQgV1NEbCAxLjEgZXh0ZW5zaW9uIHZhbGlkYXRvcnMuCi0gKiAKLSAqICA8ZXh0ZW5zaW9uCi0gKiAgICAgcG9pbnQ9ImNvbS5pYm0uZXRvb2xzLnZhbGlkYXRpb24udmFsaWRhdG9yIgotICogICAgIGlkPSJ3c2RsVmFsaWRhdG9yIgotICogICAgIG5hbWU9IiVfVUlfV1NETF9WQUxJREFUT1IiPgotICogICAgPHdzZGwxMXZhbGlkYXRvcgotICogICAgICAgbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotICogICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuc29hcC53c2RsMTEuU09BUFZhbGlkYXRvciIKLSAqICAgICAgIHJlc291cmNlYnVuZGxlPSJ2YWxpZGF0ZXdzZGxzb2FwIi8+Ci0gKiAgIDwvZXh0ZW5zaW9uPgotICogIAotICovCi1jbGFzcyBXU0RMMTFWYWxpZGF0b3JQbHVnaW5SZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBleHRlbnNpb25Qb2ludElkOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhZ05hbWU7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGV4dGVuc2lvblBvaW50SWQgLSB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludAotICAgKiBAcGFyYW0gdGFnTmFtZSAtIHRoZSB0YWcgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50Ci0gICAqLwotICBwdWJsaWMgV1NETDExVmFsaWRhdG9yUGx1Z2luUmVnaXN0cnlSZWFkZXIoU3RyaW5nIGV4dGVuc2lvblBvaW50SWQsIFN0cmluZyB0YWdOYW1lKQotICB7Ci0gICAgdGhpcy5leHRlbnNpb25Qb2ludElkID0gZXh0ZW5zaW9uUG9pbnRJZDsKLSAgICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIGhhbmRsZSB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50cyB0aGF0IG1hdGNoCi0gICAqIHRoZSBzcGVkaWZpZWQgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoKQotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHBsdWdpblJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJRXh0ZW5zaW9uUG9pbnQgcG9pbnQgPSBwbHVnaW5SZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChQTFVHSU5fSUQsIGV4dGVuc2lvblBvaW50SWQpOwotICAgIGlmIChwb2ludCAhPSBudWxsKQotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gcG9pbnQuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICByZWFkRWxlbWVudChlbGVtZW50c1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGFuZCBkZWFsIHdpdGggdGhlIGV4dGVuc2lvbiBwb2ludHMuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZXh0ZW5zaW9uIHBvaW50IGVsZW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgewotICAgICAgU3RyaW5nIHZhbGlkYXRvckNsYXNzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRVNQQUNFKTsKLQotICAgICAgaWYgKHZhbGlkYXRvckNsYXNzICE9IG51bGwgJiYgbmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpLmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBFY2xpcHNlV1NETDExVmFsaWRhdG9yRGVsZWdhdGUodmFsaWRhdG9yQ2xhc3MsIHBsdWdpbkJ1bmRsZSk7Ci0gICAgICAgICAgV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpLnJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NDU3NTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MR3JhbW1hclBvb2xJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotCi0vKioKLSAqIEEgV1NETCB2YWxpZGF0b3IgdG8gY29udHJpYnV0ZSB0byB0aGUgV1RQIHZhbGlkYXRpb24gZnJhbWV3b3JrLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yIGV4dGVuZHMgQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3IgCi17Ci0gIHByb3RlY3RlZCBIYXNoTWFwIHhzZEdyYW1tYXJQb29scyA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByb3RlY3RlZCBIYXNoTWFwIHhtbEdyYW1tYXJQb29scyA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgLyoqIAotICAgKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgdHdvIGdyYW1tYXIgcG9vbHMgZm9yIHRoaXMgV1NETCB2YWxpZGF0aW9uIGNvbnRleHQuCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3Ijc2V0dXBWYWxpZGF0aW9uKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldHVwVmFsaWRhdGlvbihOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0Jc3VwZXIuc2V0dXBWYWxpZGF0aW9uKGNvbnRleHQpOwotICAgIAotCVhNTEdyYW1tYXJQb29sIHhzZEdyYW1tYXJQb29sID0gbmV3IElubGluZVNjaGVtYU1vZGVsR3JhbW1hclBvb2xJbXBsKCk7Ci0JWE1MR3JhbW1hclBvb2wgeG1sR3JhbW1hclBvb2wgPSBuZXcgWE1MR3JhbW1hclBvb2xJbXBsKCk7Ci0JCi0JeHNkR3JhbW1hclBvb2xzLnB1dChjb250ZXh0LCB4c2RHcmFtbWFyUG9vbCk7Ci0JeG1sR3JhbW1hclBvb2xzLnB1dChjb250ZXh0LCB4bWxHcmFtbWFyUG9vbCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIHR3byBncmFtbWFyIHBvb2xzIGZvciB0aGlzIFdTREwgdmFsaWRhdGlvbiBjb250ZXh0LgotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLkFic3RyYWN0TmVzdGVkVmFsaWRhdG9yI3RlYXJkb3duVmFsaWRhdGlvbihvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyZG93blZhbGlkYXRpb24oTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotICAgIFhNTEdyYW1tYXJQb29sIHhzZEdyYW1tYXJQb29sID0gKFhNTEdyYW1tYXJQb29sKXhzZEdyYW1tYXJQb29scy5yZW1vdmUoY29udGV4dCk7Ci0gICAgaWYoeHNkR3JhbW1hclBvb2wgIT0gbnVsbCkKLSAgICAgIHhzZEdyYW1tYXJQb29sLmNsZWFyKCk7Ci0gICAgWE1MR3JhbW1hclBvb2wgeG1sR3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpeG1sR3JhbW1hclBvb2xzLnJlbW92ZShjb250ZXh0KTsKLSAgICBpZih4bWxHcmFtbWFyUG9vbCAhPSBudWxsKQotICAgICAgeG1sR3JhbW1hclBvb2wuY2xlYXIoKTsKLSAgICAKLSAgICBzdXBlci50ZWFyZG93blZhbGlkYXRpb24oY29udGV4dCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5BYnN0cmFjdE5lc3RlZFZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvblJlcG9ydCB2YWxpZGF0ZShTdHJpbmcgdXJpLCBJbnB1dFN0cmVhbSBpbnB1dHN0cmVhbSwgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotCVhNTEdyYW1tYXJQb29sIHhzZEdyYW1tYXJQb29sID0gKFhNTEdyYW1tYXJQb29sKXhzZEdyYW1tYXJQb29scy5nZXQoY29udGV4dCk7Ci0JWE1MR3JhbW1hclBvb2wgeG1sR3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpeG1sR3JhbW1hclBvb2xzLmdldChjb250ZXh0KTsKLQkKLQlXU0RMVmFsaWRhdG9yIHZhbGlkYXRvciA9IFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLQkKLQlXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLQljb25maWd1cmF0aW9uLnNldFByb3BlcnR5KENvbnN0YW50cy5YTUxTQ0hFTUFfQ0FDSEVfQVRUUklCVVRFLCB4c2RHcmFtbWFyUG9vbCk7Ci0gICAgY29uZmlndXJhdGlvbi5zZXRQcm9wZXJ0eShDb25zdGFudHMuWE1MX0NBQ0hFX0FUVFJJQlVURSwgeG1sR3JhbW1hclBvb2wpOwotCi0JSVZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gbnVsbDsKLQlpZiAoaW5wdXRzdHJlYW0gIT0gbnVsbCkKLQl7Ci0JICB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBpbnB1dHN0cmVhbSwgY29uZmlndXJhdGlvbik7Ci0JfQotCWVsc2UKLQl7Ci0JICB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLQl9Ci0JCQkgICAgICAgIAotCXJldHVybiBjb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQodmFscmVwb3J0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnZlcnQgYSBXU0RMIElWYWxpZGF0aW9uUmVwb3J0IHRvIGFuIFhNTCBWYWxpZGF0aW9uIFJlcG9ydC4KLSAgICogCi0gICAqIEBwYXJhbSByZXBvcnQgCi0gICAqIAkJVGhlIFdTREwgSVZhbGlkYXRpb25SZXBvcnQgdG8gY29udmVydC4KLSAgICogQHJldHVybiAKLSAgICogCQlBbiBYTUwgVmFsaWRhdGlvbiBSZXBvcnQgcmVwcmVzZW50aW5nIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIElWYWxpZGF0aW9uUmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25SZXBvcnQgY29udmVydFJlcG9ydFRvWE1MUmVwb3J0KElWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCkKLSAgewotCVZhbGlkYXRpb25JbmZvIGNvbnZlcnRlZFJlcG9ydCA9IG5ldyBWYWxpZGF0aW9uSW5mbyhyZXBvcnQuZ2V0RmlsZVVSSSgpKTsKLQlJVmFsaWRhdGlvbk1lc3NhZ2VbXSBtZXNzYWdlcyA9IHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLQlpbnQgbnVtTWVzc2FnZXMgPSBtZXNzYWdlcy5sZW5ndGg7Ci0JZm9yKGludCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzOyBpKyspCi0JewotCSAgY29udmVydE1lc3NhZ2UobWVzc2FnZXNbaV0sIGNvbnZlcnRlZFJlcG9ydCk7Ci0JfQotCi0JcmV0dXJuIGNvbnZlcnRlZFJlcG9ydDsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnZlcnQgYSBXU0RMIElWYWxpZGF0aW9uTWVzc2FnZSBieSByZXBvcnRpbmcgaXQgaW4gdGhlIFZhbGlkYXRpb25JbmZvIG9iamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqIAkJVGhlIElWYWxpZGF0aW9uTWVzc2FnZSB0byBjb252ZXJ0LgotICAgKiBAcGFyYW0gY29udmVydGVkUmVwb3J0Ci0gICAqIAkJVGhlIFZhbGlkYXRpb25JbmZvIG9iamVjdCByZXByZXN0aW5nIHRoZSBjb252ZXJ0ZWQgcmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29udmVydE1lc3NhZ2UoSVZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UsIFZhbGlkYXRpb25JbmZvIGNvbnZlcnRlZFJlcG9ydCkKLSAgewotCUxpc3QgbmVzdGVkTWVzc2FnZXMgPSBtZXNzYWdlLmdldE5lc3RlZE1lc3NhZ2VzKCk7Ci0JaWYobmVzdGVkTWVzc2FnZXMgIT0gbnVsbCAmJiBuZXN0ZWRNZXNzYWdlcy5zaXplKCkgPiAwKQotCXsKLQkgIEl0ZXJhdG9yIG1lc3NhZ2VJdGVyID0gbmVzdGVkTWVzc2FnZXMuaXRlcmF0b3IoKTsKLQkgIHdoaWxlKG1lc3NhZ2VJdGVyLmhhc05leHQoKSkKLQkgIHsKLQkJY29udmVydE1lc3NhZ2UoKElWYWxpZGF0aW9uTWVzc2FnZSltZXNzYWdlSXRlci5uZXh0KCksIGNvbnZlcnRlZFJlcG9ydCk7Ci0JICB9Ci0JfQotCWVsc2UKLQl7Ci0JICBpZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotCSAgICBjb252ZXJ0ZWRSZXBvcnQuYWRkV2FybmluZyhtZXNzYWdlLmdldE1lc3NhZ2UoKSwgbWVzc2FnZS5nZXRMaW5lKCksIG1lc3NhZ2UuZ2V0Q29sdW1uKCksIG1lc3NhZ2UuZ2V0VVJJKCkpOwotCSAgZWxzZQotCQljb252ZXJ0ZWRSZXBvcnQuYWRkRXJyb3IobWVzc2FnZS5nZXRNZXNzYWdlKCksIG1lc3NhZ2UuZ2V0TGluZSgpLCBtZXNzYWdlLmdldENvbHVtbigpLCBtZXNzYWdlLmdldFVSSSgpKTsKLQl9Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5BYnN0cmFjdE5lc3RlZFZhbGlkYXRvciNnZXRWYWxpZGF0b3JJRCgpCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFZhbGlkYXRvcklEKCkKLSAgewotICAgIC8vIEJlY2F1c2UgdGhpcyBjbGFzcyBpcyB1c2VkIGFzIGEgZGVsZWdhdGUsIHJldHVybiB0aGUgaWQgb2YgdGhlIHZhbGlkYXRvcgotICAgIC8vIHdoaWNoIGRlbGVnYXRlcyB0byB0aGlzIGNsYXNzLgotIAotICAgIHJldHVybiBXU0RMRGVsZWdhdGluZ1ZhbGlkYXRvci5jbGFzcy5nZXROYW1lKCk7IC8vJE5PTi1OTFMtMSQKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETERlbGVnYXRpbmdWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExEZWxlZ2F0aW5nVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMjBkNGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETERlbGVnYXRpbmdWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuZGVsZWdhdGVzLkRlbGVnYXRpbmdWYWxpZGF0b3I7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHVuaXF1ZSBuYW1lIChjbGFzcyBuYW1lKSB3aGljaCB0aGUgdmFsaWRhdGlvbiBmcmFtZXdvcmsKLSAqIHdpbGwgdXNlIHRvIGlkZW50aWZ5IHRoZSBXU0RMIHZhbGlkYXRvci4gVGhlIGFjdHVhbCBkZWxlZ2F0aW5nIHZhbGlkYXRvcgotICogZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZCBieSB0aGUgYmFzZSBjbGFzcy4gVGhlIGFjdHVhbCB2YWxpZGF0aW9uCi0gKiBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IHRoZSBkZWxlZ2F0ZXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgY2xhc3MgYXMKLSAqIHRoZWlyIHRhcmdldC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExEZWxlZ2F0aW5nVmFsaWRhdG9yIGV4dGVuZHMgRGVsZWdhdGluZ1ZhbGlkYXRvcgotewotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMRGVsZWdhdGluZ1ZhbGlkYXRvcigpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTM1YjZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLQotCi0vKioKLSAqIEFuIEVjbGlwc2UgV1NETCB2YWxpZGF0b3IuIFRoaXMgdmFsaWRhdG9yIGlzIHRoZSBkZWZhdWx0IHZhbGlkYXRvcgotICogdXNlZCBpbiB0aGUgdmFsaWRhdGlvbiBmcmFtZXdvcmsuIFRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgaW5zdGFuY2Ugb2YKLSAqIHRoaXMgdmFsaWRhdG9yLiBXaGVuIGNyZWF0ZWQsIHRoaXMgdmFsaWRhdG9yIHJlZ2lzdGVycyBhbGwgZXh0ZW5zaW9uCi0gKiBVUkkgcmVzb2x2ZXJzLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRvciBleHRlbmRzIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvcgotewotCXByaXZhdGUgc3RhdGljIFdTRExWYWxpZGF0b3IgaW5zdGFuY2UgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yIHJlZ2lzdGVycyBhbGwgb2YgdGhlIFVSSSByZXNvbHZlcnMgZGVmaW5lZCB2aWEgdGhlCi0JICogV1NETCBVUkkgcmVzb2x2ZXIgZXh0ZW5zaW9uIHBvaW50IHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLiAKLQkgKiAKLQkgKi8KLQlwcm90ZWN0ZWQgV1NETFZhbGlkYXRvcigpCi0JewotICAgICAgc3VwZXIoKTsKLSAgICAgIFVSSVJlc29sdmVyV3JhcHBlciByZXNvbHZlciA9IG5ldyBVUklSZXNvbHZlcldyYXBwZXIoKTsKLSAgICAgIGFkZFVSSVJlc29sdmVyKHJlc29sdmVyKTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBvbmUgYW5kIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyBFY2xpcHNlIFdTREwgdmFsaWRhdG9yLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG9uZSBhbmQgb25seSBpbnN0YW5jZSBvZiB0aGlzIEVjbGlwc2UgV1NETCB2YWxpZGF0b3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBXU0RMVmFsaWRhdG9yIGdldEluc3RhbmNlKCkKLQl7Ci0JCWlmKGluc3RhbmNlID09IG51bGwpCi0JCXsKLQkJCWluc3RhbmNlID0gbmV3IFdTRExWYWxpZGF0b3IoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZXhjZXB0aW9uL1ZhbGlkYXRlV1NETEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2V4Y2VwdGlvbi9WYWxpZGF0ZVdTRExFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkMWI0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZXhjZXB0aW9uL1ZhbGlkYXRlV1NETEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5leGNlcHRpb247Ci0KLS8qKgotICogQ3VzdG9tIGV4Y2VwdGlvbiBmb3IgV1NETCB2YWxpZGF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0JLyoqCi0gICAqIFJlcXVpcmVkIHNlcmlhbCB2ZXJzaW9uIHVpZC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBleGNlcHRpb24gbWVzc2FnZQotICAgKi8KLSAgcHVibGljIFZhbGlkYXRlV1NETEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkKLQl7Ci0JICBzdXBlcihtZXNzYWdlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9JTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9JTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YWU4OTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvSUxvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmc7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgYSBzdGFuZGFyZCBsb2dnZXIgZm9yIHRoZSBXU0RMIHZhbGlkYXRvci4gCi0gKiBBbGxvd3MgZm9yIGxvZ2dpbmcgZXJyb3JzIGFuZCB3YXJuaW5ncy4KLSAqLwotcHVibGljIGludGVyZmFjZSBJTG9nZ2VyCi17Ci0gIC8qKgotICAgKiBTZXZlcml0eSBlcnJvciBmb3IgbG9nZ2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IFNFVl9FUlJPUiA9IDA7Ci0gIAotICAvKioKLSAgICogU2V2ZXJpdHkgd2FybmluZyBmb3IgbG9nZ2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IFNFVl9XQVJOSU5HID0gMTsKLSAgCi0gIC8qKgotICAgKiBTZXZlcml0eSBpbmZvIGZvciBsb2dnaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgU0VWX0lORk8gPSAyOwotICAKLSAgLyoqCi0gICAqIFNldmVyaXR5IHZlcmJvc2UgZm9yIGxvZ2dpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBTRVZfVkVSQk9TRSA9IDM7Ci0gIAotICAvKioKLSAgICogTG9nIGEgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIAotICAgKiAJCVRoZSBtZXNzYWdlIHRvIGxvZy4KLSAgICogQHBhcmFtIHNldmVyaXR5Ci0gICAqIAkJVGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlIHRvIGxvZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KTsKLSAgCi0gIC8qKgotICAgKiBMb2cgYSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgCi0gICAqIAkJVGhlIG1lc3NhZ2UgdG8gbG9nLgotICAgKiBAcGFyYW0gc2V2ZXJpdHkKLSAgICogCQlUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UgdG8gbG9nLgotICAgKiBAcGFyYW0gdGhyb3dhYmxlIAotICAgKiAJCVRoZSBleGNlcHRpb24gdG8gbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHksIFRocm93YWJsZSB0aHJvd2FibGUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvTG9nZ2VyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvTG9nZ2VyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2E5ZDVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL0xvZ2dlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nOwotCi0vKioKLSAqIFRoZSBsb2dnZXIgZmFjdG9yeSBhbGxvd3MgZm9yIHNpbXBsZSB1c2Ugb2Ygd2hhdGV2ZXIgbG9nZ2luZyBtZWNoYW5pc20gaXMgaW4KLSAqIHBsYWNlLiBUaGUgdG9vbCBjYW4gc3BlY2lmeSBhIGN1c3RvbSBJTG9nZ2VyLiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCByZXF1ZXN0IHRoZQotICogbG9nZ2VyIGZyb20gdGhpcyBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlckZhY3RvcnkKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLSAgcHJpdmF0ZSBJTG9nZ2VyIGxvZ2dlciAgPSBudWxsOwotCi0gIC8qKgotICAgKiBHZXQgdGhlIG9uZSBhbmQgb25seSBpbnN0YW5jZSBvZiB0aGUgbG9nZ2VyIGZhY3RvcnkuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBvbmUgYW5kIG9ubHkgaW5zdGFuY2Ugb2YgdGhlIGxvZ2dlci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTG9nZ2VyRmFjdG9yeSBnZXRJbnN0YW5jZSgpCi0gIHsKLQlpZihmYWN0b3J5ID09IG51bGwpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBMb2dnZXJGYWN0b3J5KCk7Ci0JfQotCXJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBsb2dnZXIgaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZC4KLSAgICogCi0gICAqIEBwYXJhbSBsb2dnZXIKLSAgICogICAgICAgICAgICBUaGUgSUxvZ2dlciB0byB1c2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dnZXIoSUxvZ2dlciBsb2dnZXIpCi0gIHsKLSAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbG9nZ2VyLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBsb2dnZXIuCi0gICAqLwotICBwdWJsaWMgSUxvZ2dlciBnZXRMb2dnZXIoKQotICB7Ci0JaWYobG9nZ2VyID09IG51bGwpCi0JewotCSAgbG9nZ2VyID0gbmV3IFN0YW5kYXJkTG9nZ2VyKCk7Ci0JfQotCXJldHVybiBsb2dnZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL1N0YW5kYXJkTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9TdGFuZGFyZExvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGMxYjIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL1N0YW5kYXJkTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nOwotCi1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLQotLyoqCi0gKiBBIGxvZ2dlciB0aGF0IHdpbGwgcHJpbnQgbG9nIGluZm8gdG8gc3RhbmRhcmQgc3lzdGVtIG91dHB1dHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGFuZGFyZExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIKLXsgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHkpIAotICB7ICAKLQlQcmludFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBTeXN0ZW0ub3V0OwotCWlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0VSUk9SKQotCXsKLQkgIG91dHB1dFN0cmVhbSA9IFN5c3RlbS5lcnI7Ci0JfQotICAgIG91dHB1dFN0cmVhbS5wcmludGxuKG1lc3NhZ2UpOwotICB9Ci0KLS8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuVGhyb3dhYmxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBlcnJvciwgaW50IHNldmVyaXR5LCBUaHJvd2FibGUgdGhyb3dhYmxlKQotICB7Ci0JbG9nKGVycm9yLCBzZXZlcml0eSk7Ci0JbG9nKHRocm93YWJsZS50b1N0cmluZygpLCBzZXZlcml0eSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JRXh0ZW5zaWJsZVVSSVJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvSUV4dGVuc2libGVVUklSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjlmZGY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JRXh0ZW5zaWJsZVVSSVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlcjsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgZm9yIHRoZSBXU0RMIHZhbGlkYXRvcidzIFVSSSByZXNvbHZlciBtZWNoYW5pc20uIFRoZSBVUkkgcmVzb2x2ZXIKLSAqIGlzIHVzZWQgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgYW4gZW50aXR5LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIKLXsKLSAvKioKLSAgKiBSZXNvbHZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZW50aXR5IGRlc2NyaWJlZCBieSB0aGUgcHVibGljSWQgYW5kIHN5c3RlbUlkLgotICAqIAotICAqIEBwYXJhbSBiYXNlTG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSByZXNvdXJjZSB0aGF0IGNvbnRhaW5zIHRoZSB1cmkuCi0gICogQHBhcmFtIHB1YmxpY0lkIEFuIG9wdGlvbmFsIHB1YmxpYyBpZGVudGlmaWVyIChpLmUuIG5hbWVzcGFjZSBuYW1lKSwgb3IgbnVsbCBpZiBub25lLgotICAqIEBwYXJhbSBzeXN0ZW1JZCBBbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkksIG9yIG51bGwgaWYgbm9uZS4KLSAgKiBAcGFyYW0gcmVzdWx0IFRoZSByZXN1bHQgb2YgdGhlIHJlc29sdXRpb24uCi0gICovCi0gIHB1YmxpYyB2b2lkIHJlc29sdmUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQsIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc3VsdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvSVVSSVJlc29sdXRpb25SZXN1bHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmJmODZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyOwotCi0vKioKLSAqIFRoZSByZXByZXNlbnRhdGlvbiBvZiBhIFVSSSByZXNvbHV0aW9uIHJlc3VsdC4gVGhpcyBpbnRlcmZhY2UgaXMgbm90IG1lYW50IHRvCi0gKiBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBJVVJJUmVzb2x1dGlvblJlc3VsdCAKLXsKLSAgLyoqCi0gICAqIEdldCB0aGUgbG9naWNhbCBsb2NhdGlvbiBvZiB0aGUgcmVzb2x1dGlvbiByZXN1bHQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsb2dpY2FsIGxvY2F0aW9uIG9mIHRoZSByZXNvbHV0aW9uIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9naWNhbExvY2F0aW9uKCk7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBsb2dpY2FsIGxvY2F0aW9uIG9mIHRoZSByZXNvbHV0aW9uIHJlc3VsdC4KLSAgICogCi0gICAqIEBwYXJhbSBsb2dpY2FsTG9jYXRpb24gVGhlIGxvZ2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9naWNhbExvY2F0aW9uKFN0cmluZyBsb2dpY2FsTG9jYXRpb24pOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQaHlzaWNhbExvY2F0aW9uKCk7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBwaHlzaWNhbCBsb2NhdGlvbiBvZiB0aGUgcmVzb2x1dGlvbiByZXN1bHQuCi0gICAqIAotICAgKiBAcGFyYW0gcGh5c2ljYWxMb2NhdGlvbiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGh5c2ljYWxMb2NhdGlvbihTdHJpbmcgcGh5c2ljYWxMb2NhdGlvbik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdXRpb25SZXN1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk4ODk0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaG9sZHMgdGhlIFVSSSByZXNvbHV0aW9uIHJlc3VsdHMuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x1dGlvblJlc3VsdCBpbXBsZW1lbnRzIElVUklSZXNvbHV0aW9uUmVzdWx0Ci17Ci0gIHByaXZhdGUgU3RyaW5nIGxvZ2ljYWxMb2NhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIHBoeXNpY2FsTG9jYXRpb24gPSBudWxsOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFVSSVJlc29sdXRpb25SZXN1bHQoKQotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQjZ2V0TG9naWNhbExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9naWNhbExvY2F0aW9uKCkKLSAgewotCXJldHVybiBsb2dpY2FsTG9jYXRpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQjc2V0TG9naWNhbExvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dpY2FsTG9jYXRpb24oU3RyaW5nIGxvZ2ljYWxMb2NhdGlvbikKLSAgewotCXRoaXMubG9naWNhbExvY2F0aW9uID0gbG9naWNhbExvY2F0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklVUklSZXNvbHV0aW9uUmVzdWx0I2dldFBoeXNpY2FsTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQaHlzaWNhbExvY2F0aW9uKCkKLSAgewotCXJldHVybiBwaHlzaWNhbExvY2F0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklVUklSZXNvbHV0aW9uUmVzdWx0I3NldFBoeXNpY2FsTG9jYXRpb24oamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBoeXNpY2FsTG9jYXRpb24oU3RyaW5nIHBoeXNpY2FsTG9jYXRpb24pCi0gIHsKLQl0aGlzLnBoeXNpY2FsTG9jYXRpb24gPSBwaHlzaWNhbExvY2F0aW9uOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZjM2MzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTGF6eVVSTElucHV0U3RyZWFtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2c7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgbWFpbiBVUkkgcmVzb2x2ZXIgdGhhdCBjYWxscyBvdXQgdG8gYWxsIG9mIHRoZSByZWdpc3RlcmVkCi0gKiBleHRlcm5hbCBVUkkgcmVzb2x2ZXJzIHRvIGxvY2F0ZSBhbiBlbnRpdHkuIElmIG5vbmUgb2YgdGhlIGV4dGVybmFsIHJlc29sdmVycwotICogY2FuIGxvY2F0ZSB0aGUgZW50aXR5IHRoZSByZXNvbHZlciB3aWxsIGFzayB0aGUgaW50ZXJuYWwgV1NETCB2YWxpZGF0b3IgWE1MCi0gKiBjYXRhbG9nIHRvIHJlc29sdmUgdGhlIGxvY2F0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXIgaW1wbGVtZW50cyBJRXh0ZW5zaWJsZVVSSVJlc29sdmVyLCBYTUxFbnRpdHlSZXNvbHZlcgotewotICBwcml2YXRlIExpc3QgZXh0VVJJUmVzb2x2ZXJzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuIAotICAgKi8KLSAgcHVibGljIFVSSVJlc29sdmVyKCkKLSAgewotICB9Ci0KLQotICAvKioKLSAgICogQWRkIGFuIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpUmVzb2x2ZXIKLSAgICogICAgICAgICAgVGhlIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRVUklSZXNvbHZlcihJRXh0ZW5zaWJsZVVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gICAgZXh0VVJJUmVzb2x2ZXJzTGlzdC5hZGQodXJpUmVzb2x2ZXIpOwotICB9Ci0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSUV4dGVuc2libGVVUklSZXNvbHZlciNyZXNvbHZlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXNvbHZlKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkLCBJVVJJUmVzb2x1dGlvblJlc3VsdCByZXN1bHQpCi0gIHsKLSAgICBJdGVyYXRvciByZXNvbHZlckl0ZXIgPSBleHRVUklSZXNvbHZlcnNMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUocmVzb2x2ZXJJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJRXh0ZW5zaWJsZVVSSVJlc29sdmVyIHJlc29sdmVyID0gKElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIpcmVzb2x2ZXJJdGVyLm5leHQoKTsKLSAgICAgIGlmIChyZXNvbHZlciA9PSBudWxsKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBwdWJsaWNJZCwgc3lzdGVtSWQsIHJlc3VsdCk7Ci0gICAgICBpZiAocmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpICE9IG51bGwgJiYgIXJlc3VsdC5nZXRQaHlzaWNhbExvY2F0aW9uKCkuZXF1YWxzKHN5c3RlbUlkKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZW4ndCBiZWVuIGFibGUgdG8gbG9jYXRlIHRoZSByZXN1bHQgeWV0IGFzayB0aGUgaW50ZXJuYWwgWE1MCi0gICAgLy8gY2F0YWxvZy4KLSAgICBpZiAocmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpID09IG51bGwgJiYgKHB1YmxpY0lkICE9IG51bGwgfHwgc3lzdGVtSWQgIT0gbnVsbCkpCi0gICAgewotICAgICAgU3RyaW5nIHRlbXByZXN1bHQgPSBYTUxDYXRhbG9nLmdldEluc3RhbmNlKCkucmVzb2x2ZUVudGl0eUxvY2F0aW9uKHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgICBpZih0ZW1wcmVzdWx0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgCXJlc3VsdC5zZXRMb2dpY2FsTG9jYXRpb24odGVtcHJlc3VsdCk7Ci0gICAgCXJlc3VsdC5zZXRQaHlzaWNhbExvY2F0aW9uKHRlbXByZXN1bHQpOwotICAgICAgfQotICAgIH0KLSAgICBpZihyZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQuc2V0TG9naWNhbExvY2F0aW9uKG5vcm1hbGl6ZShiYXNlTG9jYXRpb24sIHN5c3RlbUlkKSk7Ci0gICAgICByZXN1bHQuc2V0UGh5c2ljYWxMb2NhdGlvbihyZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc29sdmUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLQlJVVJJUmVzb2x1dGlvblJlc3VsdCByZXN1bHQ9IG5ldyBVUklSZXNvbHV0aW9uUmVzdWx0KCk7Ci0JcmVzb2x2ZShiYXNlTG9jYXRpb24sIHB1YmxpY0lkLCBzeXN0ZW1JZCwgcmVzdWx0KTsKLQlyZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyI3Jlc29sdmVFbnRpdHkob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcikKLSAgICovCi0gIHB1YmxpYyBYTUxJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFhNTFJlc291cmNlSWRlbnRpZmllciByZXNvdXJjZUlkZW50aWZpZXIpIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcHVibGljSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0UHVibGljSWQoKTsKLSAgICBTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0TGl0ZXJhbFN5c3RlbUlkKCk7Ci0gICAgaWYgKHB1YmxpY0lkID09IG51bGwgfHwgcHVibGljSWQuZXF1YWxzKCIiKSkKLSAgICB7Ci0gICAgICBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgSVVSSVJlc29sdXRpb25SZXN1bHQgcmVzdWx0ID0gcmVzb2x2ZShyZXNvdXJjZUlkZW50aWZpZXIuZ2V0QmFzZVN5c3RlbUlkKCksIHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgWE1MSW5wdXRTb3VyY2UgeG1sSW5wdXRTb3VyY2UgPSBudWxsOwotICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMYXp5VVJMSW5wdXRTdHJlYW0gaXMgPSBuZXcgTGF6eVVSTElucHV0U3RyZWFtKHJlc3VsdC5nZXRQaHlzaWNhbExvY2F0aW9uKCkpOwotICAgICAgeG1sSW5wdXRTb3VyY2UgPSBuZXcgWE1MSW5wdXRTb3VyY2UocHVibGljSWQsIHJlc3VsdC5nZXRMb2dpY2FsTG9jYXRpb24oKSwgcmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpLCBpcywgbnVsbCk7Ci0gICAgfQotICAgIHJldHVybiB4bWxJbnB1dFNvdXJjZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE5vcm1hbGl6ZSB0aGUgc3lzdGVtSWQuIE1ha2UgaXQgYWJzb2x1dGUgd2l0aCByZXNwZWN0IHRvIHRoZQotICAgKiBiYXNlTG9jYXRpb24gaWYgbmVjZXNzYXJ5LgotICAgKiAKLSAgICogQHBhcmFtIGJhc2VMb2NhdGlvbiBUaGUgYmFzZSBsb2NhdGlvbiBvZiB0aGUgZmlsZS4KLSAgICogQHBhcmFtIHN5c3RlbUlkIFRoZSBzeXN0ZW0gaWQgb2YgdGhlIGZpbGUuCi0gICAqIEByZXR1cm4gQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHN5c3RlbSBpZC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotICAJaWYoc3lzdGVtSWQgPT0gbnVsbCkKLSAgCXsKLSAgCSAgcmV0dXJuIHN5c3RlbUlkOwotICAJfQotICAJLy8gVHJ5IHRvIGZpbmQgYSBzY2hlbWUgaW4gdGhlIHN5c3RlbUlkLgotICAJaW50IHNjaGVtYUxvYyA9IHN5c3RlbUlkLmluZGV4T2YoJzonKTsKLSAgCWlmKHNjaGVtYUxvYyAhPSAtMSAmJiBzeXN0ZW1JZC5jaGFyQXQoc2NoZW1hTG9jKzEpID09ICcvJykKLSAgCXsKLSAgCSAgLy8gQSBzY2hlbWUgaGFzIGJlZW4gZm91bmQuIFRoZSBzeXN0ZW1JZCBpcyBhbgotICAJICAvLyBhYnNvbHV0ZSBsb2NhdGlvbiBzbyByZXR1cm4gaXQuCi0gIAkgIHJldHVybiBzeXN0ZW1JZDsKLSAgCX0KLSAgCWlmKGJhc2VMb2NhdGlvbiA9PSBudWxsKQotICAJewotICAJICByZXR1cm4gYmFzZUxvY2F0aW9uOwotICAJfQotICAJCi0gIAlTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gIAkKLSAgCS8vIEVuc3VyZSBhbGwgc2xhc2hlcyBpbiB0aGUgbG9jYXRpb25zIGFyZSAvLgotICAJYmFzZUxvY2F0aW9uID0gYmFzZUxvY2F0aW9uLnJlcGxhY2UoJ1xcJywnLycpOwotICAJc3lzdGVtSWQgPSBzeXN0ZW1JZC5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgCQotICAJLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBzZWN0aW9uIG9mIHRoZSBiYXNlTG9jYXRpb24uCi0JaW50IGxhc3RTbGFzaCA9IGJhc2VMb2NhdGlvbi5sYXN0SW5kZXhPZignLycpOwotICAJU3RyaW5nIHRlbXByZXN1bHQgPSBiYXNlTG9jYXRpb24uc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCsxKTsKLSAgCQotICAJaWYoc3lzdGVtSWQuc3RhcnRzV2l0aCgiLyIpKQotICAJewotICAJICBzeXN0ZW1JZCA9IHN5c3RlbUlkLnN1YnN0cmluZygxKTsKLSAgCX0KLSAgCQotICAJLy8gSm9pbiB0aGUgYmFzZSBsb2NhdGlvbiB3aXRoIHRoZSBzeXN0ZW1pZAotICAJdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQgKyBzeXN0ZW1JZDsKLSAgCQotICAJLy8gV2hpbGUgdGhlIHJlbGF0aXZlIGxvY2F0aW9uIHN0YXJ0cyB3aXRoIGEgLi4vIG9yIC4vIGNoYW5nZQotICAJLy8gdGhlIHJlc3VsdCBhbmQgdGhlIHJlbGF0aXZlIGxvY2F0aW9uLgotICAJaW50IGxvYzsKLSAgCXdoaWxlKChsb2MgPSB0ZW1wcmVzdWx0Lmxhc3RJbmRleE9mKCIuLyIpKSAhPSAtMSkKLSAgCXsKLSAgCSAgcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcobG9jICsgMikgKyByZXN1bHQ7Ci0gIAkgIGlmKHRlbXByZXN1bHQuY2hhckF0KGxvYyAtIDEpID09ICcuJykKLSAgCSAgewotICAJICAJaWYodGVtcHJlc3VsdC5jaGFyQXQobG9jIC0gMikgPT0gJy8nKQotICAJICAJewotICAJICAJICBTdHJpbmcgdGVtcCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIGxvYyAtIDIpOwotICAJICAJICBpbnQgbG9jMiA9IHRlbXAubGFzdEluZGV4T2YoJy8nKTsKLSAgCSAgCSAgaWYobG9jMiA9PSAtMSkKLSAgCSAgCSAgewotICAJICAJICAJLy8gSWYgdGhlcmUgaXMgbm8gb3RoZXIgLyBiZWZvcmUgdGhpcyB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBzY2hlbWU6Ly4uLwotICAJICAJICAJcmVzdWx0ID0gIi4uLyIgKyByZXN1bHQ7Ci0gIAkgIAkgIAl0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jIC0gMSk7Ci0gIAkgIAkgIH0KLSAgCSAgCSAgZWxzZQotICAJICAJICB7Ci0gIAkgIAkgIAkvLyBSZW1vdmUgdGhlIHNlY3Rpb24gdGhhdCBjb21lcyBiZWZvcmUgdGhpcyBvbmUgZnJvbSB0ZW1wcmVzdWx0IHVubGVzcyBpdCdzIC4uLy4KLSAgCSAgCSAgICB0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jIC0gMSk7Ci0gIAkgIAkgICAgaW50IG51bVNlY3RzVG9SZW1vdmUgPSAxOwotICAJICAJICAgIAotICAJICAJICAgIHdoaWxlKHRlbXByZXN1bHQuZW5kc1dpdGgoIi4vIikpCi0gIAkgIAkgICAgewotICAJICAJICAgICAgaW50IHRlbXByZXNsZW4gPSB0ZW1wcmVzdWx0Lmxlbmd0aCgpOwotICAJICAJICAgICAgaWYodGVtcHJlc2xlbiA+IDIgJiYgdGVtcHJlc3VsdC5jaGFyQXQodGVtcHJlc2xlbiAtMykgPT0gJy4nKQotICAJICAJICAgICAgewotICAJICAJICAgICAgCWlmKHRlbXByZXNsZW4gPiAzICYmIHRlbXByZXN1bHQuY2hhckF0KHRlbXByZXNsZW4gLSA0KSA9PSAnLycpCi0gIAkgIAkgICAgICAJewotICAJICAJICAgICAgCSAgbnVtU2VjdHNUb1JlbW92ZSsrOwotICAJICAJICAgICAgCSAgdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIHRlbXByZXN1bHQubGVuZ3RoKCkgLTMpOwotICAJICAJICAgICAgICB9Ci0gIAkgIAkgICAgICAJZWxzZQotICAJICAJICAgICAgCXsKLSAgCSAgCSAgICAgIAkgIGJyZWFrOwotICAJICAJICAgICAgCX0KLSAgCSAgCSAgICAgIH0KLSAgCSAgCSAgICAgIGVsc2UKLSAgCSAgCSAgICAgIHsKLSAgCSAgCSAgICAgIAlpZih0ZW1wcmVzdWx0LmNoYXJBdCh0ZW1wcmVzdWx0Lmxlbmd0aCgpIC0yKSA9PSAnLycpCi0gIAkgIAkgICAgICAJewotICAJICAJICAgICAgCSAgdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIHRlbXByZXN1bHQubGVuZ3RoKCkgLTIpOwotICAJICAJICAgICAgCX0KLSAgCSAgCSAgICAgIAllbHNlCi0gIAkgIAkgICAgICAJewotICAJICAJICAgICAgCSAgYnJlYWs7Ci0gIAkgIAkgICAgICAJfQotICAJICAJICAgICAgfQotICAJICAJICAgIH0KLSAgCSAgCSAgICAvLyBSZW1vdmUgdGhlIHNlY3Rpb25zLgotICAJICAJICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1TZWN0c1RvUmVtb3ZlOyBpKyspCi0gIAkgIAkgICAgewotICAJICAJICAgICAgU3RyaW5nIHRlbXAyID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCx0ZW1wcmVzdWx0Lmxlbmd0aCgpLTEpOwotICAJICAJICAgICAgaW50IGxvYzMgPSB0ZW1wMi5sYXN0SW5kZXhPZignLycpOwotICAJICAJICAgICAgaWYobG9jMyA9PSAtMSkKLSAgCSAgCSAgICAgIHsKLSAgCSAgCSAgICAgIAlicmVhazsKLSAgCSAgCSAgICAgIH0KLSAgCSAgCSAgICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MzKzEpOwotICAJICAJICAgIH0KLSAgCSAgCSAgfSAKLSAgCSAgCX0KLSAgCSAgCWVsc2UKLSAgCSAgCXsKLSAgCSAgCSAgLy8gVGhlIFVSSSBpcyBvZiB0aGUgZm9ybSBmaWxlOi8vc29tZWRpci4uLyBzbyBjb3B5IGl0IGFzIGlzCi0gIAkgIAkgIFN0cmluZyB0ZW1wID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jIC0gMSk7Ci0JICAJICBpbnQgbG9jMiA9IHRlbXAubGFzdEluZGV4T2YoJy8nKTsKLQkgIAkgIGlmKGxvYzIgPT0gLTEpCi0JICAJICB7Ci0JICAJICAJLy8gVGhlIFVSSSBtdXN0IGxvb2sgbGlrZSBmaWxlOi4uLyBvciAuLi8gc28gY29weSBvdmVyIHRoZSB3aG9sZSB0ZW1wcmVzdWx0LgotCSAgCSAgCXJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsbG9jKzIpICsgcmVzdWx0OwotCSAgCSAgCXRlbXByZXN1bHQgPSAiIjsKLQkgIAkgIH0KLQkgIAkgIGVsc2UKLQkgIAkgIHsKLQkgIAkgIAkvLyBDb3B5IG92ZXIgdGhlIHdob2xlIHNvbWVkaXIuLi8KLQkgIAkgIAlyZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZyhsb2MyICsgMSwgdGVtcHJlc3VsdC5sZW5ndGgoKSk7Ci0JICAJICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MyKzEpOwotCSAgCSAgfQotICAJICAJfQotICAJICB9Ci0gIAkgIGVsc2UKLSAgCSAgewotICAJICAgIGlmKHRlbXByZXN1bHQuY2hhckF0KGxvYyAtMSApID09ICcvJykKLQkgIAl7Ci0gIAkgIAkgIC8vIFJlc3VsdCBpcyBvZiB0aGUgZm9ybSBmaWxlOi8vc29tZXRoaW5nLy4vc29tZXRoaW5nIHNvIHJlbW92ZSB0aGUgLi8KLSAgCSAgICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLGxvYyk7Ci0JICAJfQotICAJICAgIGVsc2UKLSAgCSAgICB7Ci0gIAkgICAgICAvLyBSZXN1bHQgVVJJIGlzIG9mIGZvcm0gZmlsZTovL3NvbWVkaXIuLyBzbyBjb3B5IG92ZXIgdGhlIHdob2xlIHNlY3Rpb24uCi0gICAgCSAgU3RyaW5nIHRlbXAgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MgLSAxKTsKLSAgCSAgCSAgaW50IGxvYzIgPSB0ZW1wLmxhc3RJbmRleE9mKCcvJyk7Ci0gIAkgIAkgIGlmKGxvYzIgPT0gLTEpCi0gIAkgIAkgIHsKLSAgCSAgCSAgCS8vIFRoZSBVUkkgbXVzdCBsb29rIGxpa2UgZmlsZTouLyBvciAuLyBzbyBjb3B5IG92ZXIgdGhlIHdob2xlIHRlbXByZXN1bHQuCi0gIAkgIAkgIAlyZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MpICsgcmVzdWx0OwotICAJICAJICAJdGVtcHJlc3VsdCA9ICIiOwotICAJICAJICB9Ci0gIAkgIAkgIGVsc2UKLSAgCSAgCSAgewotICAJICAJICAJLy8gQ29weSBvdmVyIHRoZSB3aG9sZSBzb21lZGlyLi8KLSAgCSAgCSAgCXJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKGxvYzIgKyAxLCB0ZW1wcmVzdWx0Lmxlbmd0aCgpKTsKLSAgCSAgCSAgICB0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jMisxKTsKLSAgCSAgCSAgfQotICAJICAgIH0KLSAgCSAgfQotICAJfQotICAJcmVzdWx0ID0gdGVtcHJlc3VsdCArIHJlc3VsdDsKLSAgCXJldHVybiByZXN1bHQ7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMjY2YzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyOwotCi0KLS8qKgotICogQSBkZWxlZ2F0ZSB0byBob2xkIGluZm9ybWF0aW9uIGFib3V0IGFuIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBVUklSZXNvbHZlckRlbGVnYXRlCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNsYXNzbmFtZTsKLSAgcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcjsKLSAgcHJpdmF0ZSBJRXh0ZW5zaWJsZVVSSVJlc29sdmVyIHJlc29sdmVyID0gbnVsbDsKLSAgCi0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gY2xhc3NuYW1lIFRoZSBjbGFzcyBuYW1lIG9mIHRoZSBVUkkgcmVzb2x2ZXIuCi0gICAqIEBwYXJhbSBjbGFzc2xvYWRlciBUaGUgY2xhc3MgbG9hZGVyIHRvIHVzZSB0byBsb2FkIHRoZSBVUkkgcmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXJEZWxlZ2F0ZShTdHJpbmcgY2xhc3NuYW1lLCBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcikKLSAgewotICAgIHRoaXMuY2xhc3NuYW1lID0gY2xhc3NuYW1lOwotICAgIHRoaXMuY2xhc3Nsb2FkZXIgPSBjbGFzc2xvYWRlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIGRlc2NyaWJlZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIGRlc2NyaWJlZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKi8KLSAgcHVibGljIElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKQotICB7Ci0gICAgaWYocmVzb2x2ZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcmVzb2x2ZXIgPSAoSUV4dGVuc2libGVVUklSZXNvbHZlciljbGFzc2xvYWRlci5sb2FkQ2xhc3MoY2xhc3NuYW1lKS5uZXdJbnN0YW5jZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcmVzb2x2ZXIgPSAoSUV4dGVuc2libGVVUklSZXNvbHZlcilnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKGNsYXNzbmFtZSkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaChFeGNlcHRpb24gZTIpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzb2x2ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvQW50TG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODRmN2M2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvQW50TG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIEEgbG9nZ2VyIHRoYXQgbG9ncyB1c2luZyBBbnQncyBsb2cgbWV0aG9kLgotICovCi1wdWJsaWMgY2xhc3MgQW50TG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciAKLXsKLSAgcHJpdmF0ZSBUYXNrIHRhc2sgPSBudWxsOwotCQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gYW50VGFzawotICAgKiAJCVRoZSBBbnQgdGFzayB0aGlzIGxvZ2dlciB3aWxsIGFjdCBmb3IuCi0gICAqLwotICBwdWJsaWMgQW50TG9nZ2VyKFRhc2sgYW50VGFzaykKLSAgewotICAgIHRhc2sgPSBhbnRUYXNrOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLSAgewotICAgIGludCBtc2dMZXZlbCA9IFByb2plY3QuTVNHX0VSUjsKLSAgICBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9XQVJOSU5HKQotICAgIHsKLSAgICAgIG1zZ0xldmVsID0gUHJvamVjdC5NU0dfV0FSTjsKLSAgICB9Ci0gICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9JTkZPKQotICAgIHsKLSAgICAgIG1zZ0xldmVsID0gUHJvamVjdC5NU0dfSU5GTzsKLSAgICB9Ci0gICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9WRVJCT1NFKQotICAgIHsKLSAgICAgIG1zZ0xldmVsID0gUHJvamVjdC5NU0dfVkVSQk9TRTsKLSAgICB9Ci0gICAgdGFzay5sb2cobWVzc2FnZSwgbXNnTGV2ZWwpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkgCi0gIHsKLQlsb2cobWVzc2FnZSwgc2V2ZXJpdHkpOwotCWxvZyh0aHJvd2FibGUudG9TdHJpbmcoKSwgc2V2ZXJpdHkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvRXh0ZW5zaW9uVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0V4dGVuc2lvblZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ5NDQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvRXh0ZW5zaW9uVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLS8qKgotICogQW4gZXh0ZW5zaW9uIEFudCBXU0RMIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIEV4dGVuc2lvblZhbGlkYXRvcgotewotICBwcml2YXRlIFN0cmluZyBjbGFzc25hbWUgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xhc3MoU3RyaW5nIGNsYXNzbmFtZSkKLSAgewotICAgIHRoaXMuY2xhc3NuYW1lID0gY2xhc3NuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5jbGFzc25hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9Qcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9Qcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjA2NTQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHByb3BlcnR5IHNldCBvbiB0aGUgV1NETCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eSBleHRlbmRzIFRhc2sgCi17Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWUgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lCi0gICAqIAkJVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQkgIAotICAvKioKLSAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQkgIAotICAvKioKLSAgICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogCQlUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkKLSAgewotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9VUklSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9VUklSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTQ0YTdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvVVJJUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci0KLS8qKgotICogVGhlIFVSSVJlc29sdmVyIHRhc2sgYWxsb3dzIHNwZWNpZnlpbmcgYW4gZXh0ZW5zaW9uIFVSSSByZXNvbHZlciB3aXRoCi0gKiB0aGUgV1NETFZhbGlkYXRlIEFudCB0YXNrLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXIgZXh0ZW5kcyBUYXNrCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNsYXp6ID0gbnVsbDsKLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXp6KQotICB7Ci0gICAgdGhpcy5jbGF6eiA9IGNsYXp6OwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBleHRlbnNpb24gVVJJIHJlc29sdmVyLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIFVSSSByZXNvbHZlci4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkKLSAgewotICAgIHJldHVybiBjbGF6ejsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvV1NETFZhbGlkYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NGY3NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuRGlyZWN0b3J5U2Nhbm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuRFRETG9jYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuRmlsZVNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5QYXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLlhNTENhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLQotLyoqCi0gKiBBbiBBbnQgdGFzayB0byBydW4gV1NETCB2YWxpZGF0aW9uIG9uIGEgZmlsZSBvciBhIHNldCBvZiBmaWxlcy4KLSAqIAotICogT3B0aW9ucwotICogLSBmaWxlIC0gdGhlIGZpbGUgdG8gcnVuIHZhbGlkYXRpb24gb24gKG9wdGlvbmFsIGlmIGZpbGVzZXQgaXMgdXNlZCkKLSAqIC0gZmFpbG9uZXJyb3IgLSBmYWlsIHRoZSBidWlsZCBwcm9jZXNzIG9uIHRoZSBmaXJzdCBmaWxlIHdpdGggYW4gZXJyb3IKLSAqIAotICogU3VwcG9ydGVkIE5lc3RlZCBFbGVtZW50cwotICogLSB4bWxjYXRhbG9nIC0gYW4geG1sIGNhdGFsb2cKLSAqIC0gZHRkICAgICAgICAtIGEgZHRkIHNwZWNpZmljYXRpb24gYXMgd291bGQgYXBwZWFyIGluIGFuIHhtbGNhdGFsb2cKLSAqIC0gc2NoZW1hICAgICAtIGEgc2NoZW1hIHNwZWNpZmljYXRpb24gYXMgd291bGQgYXBwZWFyIGluIGFuIHhtbGNhdGFsb2cKLSAqIC0gZW50aXR5ICAgICAtIGFuIGVudGl0eSBzcGVjaWZpY2F0aW9uIGFzIHdvdWxkIGFwcGVhciBpbiBhbiB4bWxjYXRhbG9nCi0gKiAtIGZpbGVzZXQgICAgLSBhIHNldCBvZiBmaWxlcyB0byB2YWxpZGF0ZQotICogLSB3c2RsMTF2YWxpZGF0b3IgLSBhbiBleHRlbnNpb24gV1NETCAxLjEgdmFsaWRhdG9yCi0gKiAtIHVyaXJlc29sdmVyIC0gYW4gZXh0ZW5zaW9uIFVSSSByZXNvbHZlcgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGUgZXh0ZW5kcyBUYXNrCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVUlfUFJPUEVSVElFUyA9ICJ2YWxpZGF0ZXdzZGx1aSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVkFMSURBVE9SX1BST1BFUlRJRVMgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50cy5XU0RMX1ZBTElEQVRPUl9QUk9QRVJUSUVTX0ZJTEU7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX0ZJTEVfU1BFQ0lGSUVEID0gIl9FUlJPUl9OT19GSUxFX1NQRUNJRklFRCI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiA9ICJfVUlfSU5GT1JNQVRJT05fREVMSU1JVEVSIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfQUNUSU9OX1ZBTElEQVRJTkdfRklMRSA9ICJfVUlfQUNUSU9OX1ZBTElEQVRJTkdfRklMRSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX1VJX0VSUk9SX01BUktFUiA9ICJfVUlfRVJST1JfTUFSS0VSIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfV0FSTklOR19NQVJLRVIgPSAiX1VJX1dBUk5JTkdfTUFSS0VSIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfVkFMSUQgPSAiX1VJX1ZBTElEIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfSU5WQUxJRCA9ICJfVUlfSU5WQUxJRCI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfRklMRSA9ICJfRVhDX1VOQUJMRV9UT19WQUxJREFURV9GSUxFIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVhDX1dTRExfRkFJTF9PTl9FUlJPUiA9ICJfRVhDX1dTRExfRkFJTF9PTl9FUlJPUiI7Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOwotCi0gIC8vIEdsb2JhbCBWYXJzCi0gIHByb3RlY3RlZCBMaXN0IGZpbGVzZXRzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZpbGUgPSBudWxsOwotICBwcm90ZWN0ZWQgUGF0aCBjbGFzc3BhdGg7Ci0gIHByb3RlY3RlZCBTdHJpbmcgeHNkRGlyZWN0b3J5ID0gbnVsbDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gZmFpbE9uRXJyb3IgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIFhNTENhdGFsb2cgZ2xvYmFsWE1MQ2F0YWxvZyA9IG5ldyBYTUxDYXRhbG9nKCk7Ci0gIHByb3RlY3RlZCBMaXN0IHdzZGwxMXZhbGlkYXRvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IGV4dHZhbGlkYXRvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IGV4dFVSSVJlc29sdmVycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIExpc3QgcHJvcGVydGllcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogQ29uc3R1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMVmFsaWRhdGUoKQotICB7Ci0JTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihuZXcgQW50TG9nZ2VyKHRoaXMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZWxscyB0aGUgV1NETCB2YWxpZGF0ZSB0YXNrIHRvIGZhaWwgdGhlIGJ1aWxkIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLgotICAgKiAKLSAgICogQHBhcmFtIGZhaWxPbkVycm9yIFdoZXRoZXIgdG8gZmFpbCBvbiBlcnJvciBvciBub3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsT25FcnJvcihib29sZWFuIGZhaWxPbkVycm9yKQotICB7Ci0gICAgdGhpcy5mYWlsT25FcnJvciA9IGZhaWxPbkVycm9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBiYXNlIHNjaGVtYSBmaWxlcyBmb3IgdGhlIGNhdGFsb2cgYXJlIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZGlyIC0gdGhlIGRpcmVjdG9yeSBvZiB0aGUgYmFzZSBzY2hlbWEgZmlsZXMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNjaGVtYURpcihTdHJpbmcgZGlyKQotICB7Ci0gICAgeHNkRGlyZWN0b3J5ID0gZGlyOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBhIGZpbGUgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbi4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlIC0gYSBmaWxlIHRvIHJ1biB2YWxpZGF0aW9uIG9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGaWxlKFN0cmluZyBmaWxlKQotICB7Ci0gICAgdGhpcy5maWxlID0gZmlsZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBzZXQgb2YgZmlsZXMgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIEZpbGVTZXQgb2YgZmlsZXMgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbgotICAgKi8KLSAgcHVibGljIEZpbGVTZXQgY3JlYXRlRmlsZXNldCgpCi0gIHsKLSAgICBGaWxlU2V0IGZpbGVzZXQgPSBuZXcgRmlsZVNldCgpOwotICAgIGZpbGVzZXRzLmFkZChmaWxlc2V0KTsKLSAgICByZXR1cm4gZmlsZXNldDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gWE1MIGNhdGFsb2cgdG8gdGhlIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEBwYXJhbSBjYXRhbG9nIC0gdGhlIGNhdGFsb2cgdG8gYWRkIHRvIHRoZSB2YWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmZpZ3VyZWRYTUxDYXRhbG9nKFhNTENhdGFsb2cgY2F0YWxvZykKLSAgewotICAgIGdsb2JhbFhNTENhdGFsb2cuYWRkQ29uZmlndXJlZFhNTENhdGFsb2coY2F0YWxvZyk7Ci0gIH0KLSAgLyoqCi0gICAqIEFkZCBhbiBleHRlbnNpb24gdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGV4dFZhbCBUaGUgZXh0ZW5zaW9uIHZhbGlkYXRvciB0byBhZGQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRDb25maWd1cmVkRXh0ZW5zaW9uVmFsaWRhdG9yKEV4dGVuc2lvblZhbGlkYXRvciBleHRWYWwpCi0gIHsKLSAgICBleHR2YWxpZGF0b3JzLmFkZChleHRWYWwpOwotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGFuIGV4dGVuc2lvbiBXU0RMIDEuMSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gZXh0VmFsIFRoZSBleHRlbnNpb24gV1NETCAxLjEgdmFsaWRhdG9yIHRvIGFkZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmZpZ3VyZWRXU0RMMTFWYWxpZGF0b3IoRXh0ZW5zaW9uVmFsaWRhdG9yIGV4dFZhbCkKLSAgewotICAgIHdzZGwxMXZhbGlkYXRvcnMuYWRkKGV4dFZhbCk7Ci0gIH0KLQotICAvKioKLSAgICogQWxsb3cgc3BlY2lmaWNhdGlvbiBvZiBhbiBlbnRpdHkgb3V0c2lkZSBvZiBhbiBYTUxDYXRhbG9nLgotICAgKiAKLSAgICogQHJldHVybiBhIERURExvY2F0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBlbnRpdHkKLSAgICoqLwotICBwdWJsaWMgRFRETG9jYXRpb24gY3JlYXRlRW50aXR5KCkKLSAgewotICAgIERURExvY2F0aW9uIGR0ZExvYyA9IG5ldyBEVERMb2NhdGlvbigpOwotICAgIGdsb2JhbFhNTENhdGFsb2cuYWRkRW50aXR5KGR0ZExvYyk7Ci0gICAgcmV0dXJuIGR0ZExvYzsKLSAgfQotCi0gIC8qKgotICAgKiBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIGEgRFREIG91dHNpZGUgb2YgYW4gWE1MQ2F0YWxvZy4KLSAgICogCi0gICAqIEByZXR1cm4gYSBEVERMb2NhdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgRFRECi0gICAqKi8KLSAgcHVibGljIERURExvY2F0aW9uIGNyZWF0ZURURCgpCi0gIHsKLSAgICBEVERMb2NhdGlvbiBkdGRMb2MgPSBuZXcgRFRETG9jYXRpb24oKTsKLSAgICBnbG9iYWxYTUxDYXRhbG9nLmFkZEVudGl0eShkdGRMb2MpOwotICAgIHJldHVybiBkdGRMb2M7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBVUklSZXNvbHZlciBleHRlbnNpb24uCi0gICAqIAotICAgKiBAcmV0dXJuIEEgVVJJUmVzb2x2ZXIuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgY3JlYXRlVVJJUmVzb2x2ZXIoKQotICB7Ci0gICAgVVJJUmVzb2x2ZXIgdXJpcmVzID0gbmV3IFVSSVJlc29sdmVyKCk7Ci0gICAgZXh0VVJJUmVzb2x2ZXJzLmFkZCh1cmlyZXMuZ2V0Q2xhc3NOYW1lKCkpOwotICAgIHJldHVybiB1cmlyZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgV1NETCB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gcHJvcGVydHkgCi0gICAqIAkJVGhlIHByb3BlcnR5IHRvIGFkZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmZpZ3VyZWRQcm9wZXJ0eShQcm9wZXJ0eSBwcm9wZXJ0eSkKLSAgewotICAgIHByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgdG8gcnVuIFdTREwgdmFsaWRhdGlvbiBvbi4gVGFrZXMgdGhlIGZpbGUgYW5kIGZpbGVzZXQKLSAgICogYW5kIGNyZWF0ZXMgdGhlIGxpc3QuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGJlIHZhbGlkYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgZ2V0RmlsZUxpc3QoKQotICB7Ci0gICAgTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIC8vIGlmIGEgc3BlY2lmaWMgZmlsZSB3YXMgc3BlY2lmaWVkIGFkZCBpdCB0byB0aGUgbGlzdAotICAgIGlmIChmaWxlICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKGZpbGUpOwotICAgICAgICBmaWxlcy5hZGQodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOwotICAgICAgfQotICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIEZpbGUgdGhlRmlsZSA9IG5ldyBGaWxlKGZpbGUpOwotICAgICAgICBpZighdGhlRmlsZS5pc0Fic29sdXRlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICB0aGVGaWxlID0gbmV3IEZpbGUoZ2V0UHJvamVjdCgpLmdldEJhc2VEaXIoKSwgZmlsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGFic0ZpbGUgPSB0aGVGaWxlLnRvU3RyaW5nKCk7IAotICAgICAgICBpZighYWJzRmlsZS5zdGFydHNXaXRoKCJmaWxlOiIpKQotICAgICAgICB7Ci0gICAgICAgICAgYWJzRmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBhYnNGaWxlOwotICAgICAgICB9Ci0gICAgICAgIGFic0ZpbGUgPSBhYnNGaWxlLnJlcGxhY2UoJ1xcJywnLycpOwotICAgICAgICBmaWxlcy5hZGQoYWJzRmlsZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gZ28gdGhyb3VnaCBhbGwgZmlsZXNldHMgc3BlY2lmaWVkIGFuZCBhZGQgYWxsIHRoZSBmaWxlcyB0byB0aGUgbGlzdAotICAgIEl0ZXJhdG9yIGZzSXRlciA9IGZpbGVzZXRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGZzSXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRmlsZVNldCBmaWxlc2V0ID0gKEZpbGVTZXQpZnNJdGVyLm5leHQoKTsKLSAgICAgIERpcmVjdG9yeVNjYW5uZXIgZHMgPSBmaWxlc2V0LmdldERpcmVjdG9yeVNjYW5uZXIoZmlsZXNldC5nZXRQcm9qZWN0KCkpOwotICAgICAgU3RyaW5nIGJhc2VkaXIgPSBkcy5nZXRCYXNlZGlyKCkudG9TdHJpbmcoKSArIEZpbGUuc2VwYXJhdG9yOwotCi0gICAgICBTdHJpbmdbXSBmaWxlbGlzdCA9IGRzLmdldEluY2x1ZGVkRmlsZXMoKTsKLSAgICAgIGludCBudW1GaWxlcyA9IGZpbGVsaXN0Lmxlbmd0aDsKLSAgICAgIGlmIChmaWxlcyAhPSBudWxsICYmIG51bUZpbGVzID4gMCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1GaWxlczsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGFic0ZpbGUgPSBGSUxFX1BST1RPQ09MICsgYmFzZWRpciArIGZpbGVsaXN0W2ldOwotICAgICAgICAgIGFic0ZpbGUgPSBhYnNGaWxlLnJlcGxhY2UoJ1xcJywnLycpOwotICAgICAgICAgIGZpbGVzLmFkZChhYnNGaWxlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmlsZXM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzayNleGVjdXRlKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB0aHJvd3MgQnVpbGRFeGNlcHRpb24KLSAgewotICAgIC8vIHRoZSByZXNvdXJjZSBidW5kbGVzIGZvciB0aGUgdWkgYW5kIHZhbGlkYXRvciBhcmUgbmVlZGVkCi0gICAgTWVzc2FnZUdlbmVyYXRvciBtZXNzR2VuID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBSZXNvdXJjZUJ1bmRsZSB1aVJCID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFVJX1BST1BFUlRJRVMpOwotICAgICAgbWVzc0dlbiA9IG5ldyBNZXNzYWdlR2VuZXJhdG9yKHVpUkIpOwotICAgIH0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gaWYgdGhlIHJlc291cmNlIGJ1bmRsZXMgY2FuJ3QgYmUgb3BlbmVkIHdlIGNhbid0IHJlcG9ydCBlcnJvciBzbyB0aHJvdyBhbiBleGNlcHRpb24KLSAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbigiVW5hYmxlIHRvIG9wZW4gcmVzb3VyY2UgYnVuZGxlLiAiICsgZSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBYTUwgY2F0YWxvZy4KLSAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nLnNldEV4dGVuc2lvblhNTENhdGFsb2coWE1MQ2F0YWxvZ0ltcGwuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIFhNTENhdGFsb2dJbXBsIHhtbENhdGFsb2cgPSAoWE1MQ2F0YWxvZ0ltcGwpb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZy5nZXRFeHRlbnNpb25DYXRhbG9nSW5zdGFuY2UoKTsKLSAgICB4bWxDYXRhbG9nLmFkZFhNTENhdGFsb2coZ2xvYmFsWE1MQ2F0YWxvZyk7Ci0gICAgCi0gICAgV1NETFZhbGlkYXRvciB3c2RsVmFsaWRhdG9yID0gbmV3IFdTRExWYWxpZGF0b3IoKTsKLSAgICAKLSAgICBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLSAgICAvLyBTZXQgdGhlIHByb3BlcnRpZXMuCi0gICAgSXRlcmF0b3IgcHJvcGVydHlJdGVyID0gcHJvcGVydGllcy5pdGVyYXRvcigpOwotICAgIHdoaWxlKHByb3BlcnR5SXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUHJvcGVydHkgcHJvcGVydHkgPSAoUHJvcGVydHkpcHJvcGVydHlJdGVyLm5leHQoKTsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0UHJvcGVydHkocHJvcGVydHkuZ2V0TmFtZSgpLCBwcm9wZXJ0eS5nZXRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgCQotICAgIC8vIFNldCB0aGUgZXh0ZW5zaW9uIFVSSVJlc29sdmVycy4KLSAgICBJdGVyYXRvciByZXNvbHZlcnNJdGVyID0gZXh0VVJJUmVzb2x2ZXJzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUocmVzb2x2ZXJzSXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgU3RyaW5nIHJlc29sdmVyQ2xhc3MgPSAoU3RyaW5nKXJlc29sdmVyc0l0ZXIubmV4dCgpOwotICAgICAgd3NkbFZhbGlkYXRvci5hZGRVUklSZXNvbHZlcihuZXcgVVJJUmVzb2x2ZXJEZWxlZ2F0ZShyZXNvbHZlckNsYXNzLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpLmdldFVSSVJlc29sdmVyKCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gdmFsaWRhdGUuCi0gICAgTGlzdCBmaWxlcyA9IGdldEZpbGVMaXN0KCk7Ci0gICAgCi0gICAgLy8gUmVnaXN0ZXIgdGhlIFdTREwgMS4xIGV4dGVuc2lvbiB2YWxpZGF0b3JzLgotICAgIEl0ZXJhdG9yIHdzZGwxMWV4dEl0ZXIgPSB3c2RsMTF2YWxpZGF0b3JzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUod3NkbDExZXh0SXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaW9uVmFsaWRhdG9yIGV4dFZhbCA9IChFeHRlbnNpb25WYWxpZGF0b3Ipd3NkbDExZXh0SXRlci5uZXh0KCk7Ci0gICAgICBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKGV4dFZhbC5nZXRDbGFzc05hbWUoKSk7Ci0gICAgICB3c2RsVmFsaWRhdG9yLnJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKGV4dFZhbC5nZXROYW1lc3BhY2UoKSwgZGVsZWdhdGUpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZWdpc3RlciB0aGUgZXh0ZW5zaW9uIHZhbGlkYXRvcnMuCi0gICAgSXRlcmF0b3IgZXh0SXRlciA9IGV4dHZhbGlkYXRvcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZShleHRJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpb25WYWxpZGF0b3IgZXh0VmFsID0gKEV4dGVuc2lvblZhbGlkYXRvcilleHRJdGVyLm5leHQoKTsKLSAgICAgIENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlKGV4dFZhbC5nZXRDbGFzc05hbWUoKSk7Ci0gICAgICB3c2RsVmFsaWRhdG9yLnJlZ2lzdGVyV1NETEV4dGVuc2lvblZhbGlkYXRvcihleHRWYWwuZ2V0TmFtZXNwYWNlKCksIGRlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhbnkgZmlsZXMgdG8gdmFsaWRhdGUuCi0gICAgaWYgKGZpbGVzID09IG51bGwgfHwgZmlsZXMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIGxvZyhtZXNzR2VuLmdldFN0cmluZyhfRVJST1JfTk9fRklMRV9TUEVDSUZJRUQpLCBQcm9qZWN0Lk1TR19FUlIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh4c2REaXJlY3RvcnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nLmFkZFNjaGVtYURpcih4c2REaXJlY3RvcnkpOwotICAgIH0KLQotICAgIC8vIFZhbGlkYXRlIGFsbCB0aGUgZmlsZXMgc3BlY2lmaWVkLgotICAgIEl0ZXJhdG9yIGlGaWxlcyA9IGZpbGVzLml0ZXJhdG9yKCk7Ci0KLSAgICAvLyBDb21tb24gc3RyaW5ncyBuZWVkZWQgaW4gdmFsaWRhdGlvbiBvdXRwdXQuCi0gICAgU3RyaW5nIGluZm9EZWxpbSA9IG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIpOwotICAgIFN0cmluZyB2YWxpZCA9IG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9WQUxJRCk7Ci0gICAgU3RyaW5nIGludmFsaWQgPSBtZXNzR2VuLmdldFN0cmluZyhfVUlfSU5WQUxJRCk7Ci0gICAgU3RyaW5nIGVycm9ybWFya2VyID0gbWVzc0dlbi5nZXRTdHJpbmcoX1VJX0VSUk9SX01BUktFUik7Ci0gICAgU3RyaW5nIHdhcm5pbmdtYXJrZXIgPSBtZXNzR2VuLmdldFN0cmluZyhfVUlfV0FSTklOR19NQVJLRVIpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG51bGw7Ci0gICAgYm9vbGVhbiBub3R2YWxpZCA9IHRydWU7Ci0gICAgd2hpbGUgKGlGaWxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgbm90dmFsaWQgPSBmYWxzZTsKLSAgICAgIFN0cmluZyBmaWxlbmFtZSA9IChTdHJpbmcpaUZpbGVzLm5leHQoKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICByZXN1bHQuYXBwZW5kKGluZm9EZWxpbSkuYXBwZW5kKCJcbiIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9BQ1RJT05fVkFMSURBVElOR19GSUxFLCBmaWxlbmFtZSkpLmFwcGVuZCgiIC0gIik7Ci0KLSAgICAgICAgSVZhbGlkYXRpb25SZXBvcnQgdmFsUmVwb3J0ID0gd3NkbFZhbGlkYXRvci52YWxpZGF0ZShmaWxlbmFtZSwgbnVsbCwgY29uZmlndXJhdGlvbik7Ci0KLSAgICAgICAgSVZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMgPSB2YWxSZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0KLSAgICAgICAgaWYgKCF2YWxSZXBvcnQuaGFzRXJyb3JzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQuYXBwZW5kKHZhbGlkKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQuYXBwZW5kKGludmFsaWQpOwotICAgICAgICAgIG5vdHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKCJcbiIpLmFwcGVuZChpbmZvRGVsaW0pLmFwcGVuZCgiXG4iKTsKLQotICAgICAgICByZXN1bHQuYXBwZW5kKHJlcG9ydE1lc3NhZ2VzKG1lc3NhZ2VzLCBlcnJvcm1hcmtlciwgd2FybmluZ21hcmtlcikpOwotCi0gICAgICAgIGlmKG5vdHZhbGlkKQotICAgICAgICB7Ci0gICAgICAgICAgbG9nKHJlc3VsdC50b1N0cmluZygpLCBQcm9qZWN0Lk1TR19FUlIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGxvZyhyZXN1bHQudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgbG9nKG1lc3NHZW4uZ2V0U3RyaW5nKF9FWENfVU5BQkxFX1RPX1ZBTElEQVRFX0ZJTEUsIGZpbGVuYW1lLCBlKSwgUHJvamVjdC5NU0dfRVJSKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKG5vdHZhbGlkICYmIGZhaWxPbkVycm9yKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gVG8gZmFpbCBvbiBlcnJvciwgdGhyb3cgYSBidWlsZCBleGNlcHRpb24uCi0gICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKG1lc3NHZW4uZ2V0U3RyaW5nKF9FWENfV1NETF9GQUlMX09OX0VSUk9SKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nLnJlc2V0KCk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBzdHJpbmcgd2l0aCBmb3JtYXR0ZWQgb3V0cHV0IGZvciB0aGUgbWVzc2FnZXMuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2VzIHRvIHJlcG9ydC4KLSAgICogQHBhcmFtIGVycm9ybWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciBlcnJvciBtZXNzYWdlcy4KLSAgICogQHBhcmFtIHdhcm5pbmdtYXJrZXIgVGhlIG1hcmtlciB0byB1c2UgZm9yIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgd2l0aCB0aGUgZm9ybWF0dGVkIG91dHB1dC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcmVwb3J0TWVzc2FnZXMoSVZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMsIFN0cmluZyBlcnJvcm1hcmtlciwgU3RyaW5nIHdhcm5pbmdtYXJrZXIpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgcmV0dXJuQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgaWYgKG1lc3NhZ2VzID09IG51bGwpCi0gICAgICByZXR1cm4gcmV0dXJuQnVmZmVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsKLSAgICBpbnQgbnVtTWVzc2FnZXMgPSBtZXNzYWdlcy5sZW5ndGg7Ci0gICAgZm9yKGludCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzOyBpKyspCi0gICAgewotICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTsKLQotICAgICAgaWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSBlcnJvcm1hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IHdhcm5pbmdtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSAiIjsKLSAgICAgIH1pZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUikKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IGVycm9ybWFya2VyOwotICAgICAgfQotICAgICAgZWxzZSBpZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gd2FybmluZ21hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9ICIiOwotICAgICAgfWlmKG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SKQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gZXJyb3JtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSB3YXJuaW5nbWFya2VyOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gIiI7Ci0gICAgICB9aWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSBlcnJvcm1hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IHdhcm5pbmdtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSAiIjsKLSAgICAgIH0KLSAgICAgIHJldHVybkJ1ZmZlcgotICAgICAgICAuYXBwZW5kKHByZWZpeCkKLSAgICAgICAgLmFwcGVuZCgiICIpCi0gICAgICAgIC5hcHBlbmQobWVzc2FnZS5nZXRMaW5lKCkpCi0gICAgICAgIC5hcHBlbmQoIjoiKQotICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0Q29sdW1uKCkpCi0gICAgICAgIC5hcHBlbmQoIjoiKQotICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0TWVzc2FnZSgpKQotICAgICAgICAuYXBwZW5kKCJcbiIpOwotICAgIH0KLSAgICByZXR1cm4gcmV0dXJuQnVmZmVyLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1hNTENhdGFsb2dJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1hNTENhdGFsb2dJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmY2JkZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9YTUxDYXRhbG9nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuRFRETG9jYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuWE1MQ2F0YWxvZzsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV1NETCBWYWxpZGF0b3IncyBYTUwgQ2F0YWxvZyB0aGF0IHVzZXMgdGhlIFhNTCBDYXRhbG9nCi0gKiBmcm9tIGFudC4KLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dJbXBsIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZwotewotICBwcm90ZWN0ZWQgWE1MQ2F0YWxvZyB4bWxDYXRhbG9nID0gbmV3IFhNTENhdGFsb2coKTsKLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nI2FkZEVudHJ5VG9DYXRhbG9nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFbnRyeVRvQ2F0YWxvZyhTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotICAgIERURExvY2F0aW9uIHJlc0xvYyA9IG5ldyBEVERMb2NhdGlvbigpOwotICAgIHJlc0xvYy5zZXRMb2NhdGlvbihzeXN0ZW1JZCk7Ci0gICAgcmVzTG9jLnNldFB1YmxpY0lkKHB1YmxpY0lkKTsKLSAgICB4bWxDYXRhbG9nLmFkZEVudGl0eShyZXNMb2MpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZyNyZXNvbHZlRW50aXR5TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgU3RyaW5nIHJlc29sdmVkSWQgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgSW5wdXRTb3VyY2UgaXMgPSB4bWxDYXRhbG9nLnJlc29sdmVFbnRpdHkocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgICAgIGlmIChpcyAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXNvbHZlZElkID0gaXMuZ2V0U3lzdGVtSWQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIHJlc291cmNlIGNhbid0IGJlIHJlc29sdmVkLgotICAgIH0KLSAgICAvLyBuZWVkcyB0byByZXR1cm4gbnVsbCBpZiBpdCBjYW4ndCByZXNvbHZlIHRoZSBpZAotICAgIGlmIChyZXNvbHZlZElkICE9IG51bGwgJiYgcmVzb2x2ZWRJZC5lcXVhbHMoIiIpKQotICAgIHsKLSAgICAgIHJlc29sdmVkSWQgPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gcmVzb2x2ZWRJZDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYSBjb25maWd1cmVkIFhNTCBDYXRhbG9nIHRvIHRoaXMgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBjYXRhbG9nIEEgY29uZmlndXJlZCBYTUwgY2F0YWxvZyB0byBhZGQgdG8gdGhpcyBjYXRhbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkWE1MQ2F0YWxvZyhYTUxDYXRhbG9nIGNhdGFsb2cpCi0gIHsKLSAgICB4bWxDYXRhbG9nLmFkZENvbmZpZ3VyZWRYTUxDYXRhbG9nKGNhdGFsb2cpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L0xvZzRqTG9nZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9Mb2c0akxvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGEyMjRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L0xvZzRqTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIEEgY3VzdG9tIFdTREwgdmFsaWRhdG9yIGxvZ2dlciB0aGF0IHBhc3NlcyBsb2dnaW5nIGV2ZW50cyB0byBsb2c0ai4KLSAqLwotcHVibGljIGNsYXNzIExvZzRqTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciAKLXsKLSAgLy8gVGhpcyBjbGFzcyBpcyBpbXBsZW1lbnRlZCB1c2luZyByZWZsZWN0aW9uIHRvIGF2b2lkIGEgY29taWxhdGlvbiBkZXBlbmRlbmN5Ci0gIC8vIG9uIGxvZzRqLgotICBwcm90ZWN0ZWQgT2JqZWN0IGxvZ2dlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgZXJyb3IxID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1ldGhvZCB3YXJuMSA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgaW5mbzEgPSBudWxsOwotICBwcm90ZWN0ZWQgTWV0aG9kIGRlYnVnMSA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgZXJyb3IyID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1ldGhvZCB3YXJuMiA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgaW5mbzIgPSBudWxsOwotICBwcm90ZWN0ZWQgTWV0aG9kIGRlYnVnMiA9IG51bGw7Ci0gIAotICBwdWJsaWMgTG9nNGpMb2dnZXIoKQotICB7Ci0JdHJ5Ci0gICAgewotCSAgQ2xhc3MgbG9nZ2VyQ2xhc3MgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKCJvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlciIpOwotCSAgQ2xhc3MgY2F0ZWdvcnlDbGFzcyA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoIm9yZy5hcGFjaGUubG9nNGouQ2F0ZWdvcnkiKTsKLQkgIE1ldGhvZCBnZXRMb2dnZXIgPSBsb2dnZXJDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZ2V0TG9nZ2VyIiAsIG5ldyBDbGFzc1tde0NsYXNzLmNsYXNzfSk7Ci0JICBsb2dnZXIgPSBnZXRMb2dnZXIuaW52b2tlKGxvZ2dlckNsYXNzLCBuZXcgT2JqZWN0W117V1NETFZhbGlkYXRlLmNsYXNzfSk7Ci0JICBlcnJvcjEgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJlcnJvciIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3N9KTsKLQkgIHdhcm4xID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgid2FybiIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3N9KTsKLQkgIGluZm8xID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiaW5mbyIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3N9KTsKLQkgIGRlYnVnMSA9IGNhdGVnb3J5Q2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImRlYnVnIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzc30pOwotCSAgZXJyb3IyID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZXJyb3IiICwgbmV3IENsYXNzW117T2JqZWN0LmNsYXNzLCBUaHJvd2FibGUuY2xhc3N9KTsKLQkgIHdhcm4yID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgid2FybiIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3MsIFRocm93YWJsZS5jbGFzc30pOwotCSAgaW5mbzIgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJpbmZvIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzcywgVGhyb3dhYmxlLmNsYXNzfSk7Ci0JICBkZWJ1ZzIgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJkZWJ1ZyIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3MsIFRocm93YWJsZS5jbGFzc30pOwotCX0KLQljYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpCi0JewotCSAgU3lzdGVtLmVyci5wcmludGxuKCJVbmFibGUgdG8gY3JlYXRlIExvZzRqIExvZ2dlci4gRW5zdXJlIExvZzRKIGlzIG9uIHRoZSBjbGFzc3BhdGguIik7IAotCX0KLQljYXRjaChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkKLQl7Ci0JCQotCX0KLQljYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpCi0JewotCQkKLQl9Ci0JY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotCXsKLQkJCi0JfQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLSAgewotCWlmKGxvZ2dlciAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIGVycm9yMS5pbnZva2UobG9nZ2VyLCBuZXcgT2JqZWN0W117bWVzc2FnZX0pOwotCQl9Ci0gICAgICAgIGVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLSAgICAgICAgewotICAgICAgICAgIHdhcm4xLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlfSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9JTkZPKQotICAgICAgICB7Ci0gICAgICAgICAgaW5mbzEuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2V9KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX1ZFUkJPU0UpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWJ1ZzEuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2V9KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgICAgfQotICAgICAgY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBEbyBub3RoaW5nLiAgCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkgCi0gIHsKLQlpZihsb2dnZXIgIT0gbnVsbCkKLQl7Ci0JICB0cnkKLQkgIHsKLQkgICAgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfRVJST1IpCi0JICAgIHsKLQkJICBlcnJvcjIuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2UsIHRocm93YWJsZX0pOwotCSAgICB9Ci0JICAgIGVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLQkgICAgewotCQkgIHdhcm4yLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlLCB0aHJvd2FibGV9KTsKLQkgICAgfQotCSAgICBlbHNlIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0lORk8pCi0JICAgIHsKLQkJICBpbmZvMi5pbnZva2UobG9nZ2VyLCBuZXcgT2JqZWN0W117bWVzc2FnZSwgdGhyb3dhYmxlfSk7Ci0JICAgIH0KLQkgICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9WRVJCT1NFKQotCSAgICB7Ci0JICAgICAgZGVidWcyLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlLCB0aHJvd2FibGV9KTsKLQkgICAgfQotCSAgfQotCSAgY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotCSAgewotCQkvLyBEbyBub3RoaW5nLgotCSAgfQotCSAgY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKQotCSAgewotCQkvLyBEbyBub3RoaW5nLiAgCi0JICB9Ci0JfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTU3YmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2dFbnRpdHlIb2xkZXI7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC5TdHJpbmdVdGlsczsKLQotLyoqCi0gKiBBIGNvbW1hbmRlIGxpbmUgdG9vbCB0byBydW4gV1NETCBWYWxpZGF0aW9uIG9uIGEgc2luZ2xlIG9yIG11bHRpcGxlIGZpbGVzLgotICogCi0gKiBPcHRpb25zCi0gKiAtc2NoZW1hRGlyIGRpcmVjdG9yeSAgICAgICA6IGEgZGlyZWN0b3J5IG9mIHNjaGVtYXMgdG8gbG9hZCBpbnRvIHRoZSBjYXRhbG9nCi0gKiAtc2NoZW1hIG5hbWVzcGFjZSBsb2NhdGlvbiA6IGEgc2NoZW1hIHRvIGxvYWQgaW50byB0aGUgcmVnaXN0cnkKLSAqIC13c2RsMTF2IGNsYXNzbmFtZSBuYW1lc3BhY2UgcmVzb3VyY2VidW5kbGUgOiByZWdpc3RlciBhIFdTREwgMS4xIGV4dGVuc2lvbiB2YWxpZGF0b3IKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gbG9hZCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZSB3aXRoIHRoZSBnaXZlbiByZXNvdXJjZWJ1bmRsZQotICogLXdzaXYgdmFsaWRhdG9yQ2xhc3MgbmFtZXNwYWNlIHByb3BlcnRpZXNmaWxlIDogcmVnaXN0ZXIgYSBXUy1JIHZhbGlkYXRvcgotICogLXVyaXJlc29sdmVyIFVSSVJlc29sdmVyQ2xhc3MgOiByZWdpc3RlciBhbiBleHRlbnNpb24gVVJJIHJlc29sdmVyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGUKLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRklMRV9QUkVGSVggPSAiZmlsZTovLy8iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVE9SX1BST1BFUlRJRVMgPQotICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzLldTRExfVkFMSURBVE9SX1BST1BFUlRJRVNfRklMRTsKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1dTREwxMVZBTCA9ICItd3NkbDExdiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX0VYVFZBTCA9ICItZXh0diI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1NDSEVNQURJUiA9ICItc2NoZW1hRGlyIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fU0NIRU1BID0gIi1zY2hlbWEiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJBTV9VUklSRVNPTFZFUiA9ICItdXJpcmVzb2x2ZXIiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJBTV9MT0dHRVIgPSAiLWxvZ2dlciI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1BST1BFUlRZID0gIi1EIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fVkVSQk9TRSA9ICItdmVyYm9zZSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1ZFUkJPU0VfU0hPUlQgPSAiLXYiOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUUklOR19FTVBUWSA9ICIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX1NQQUNFID0gIiAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX0RBU0ggPSAiLSI7Ci0gIAotICBTdHJpbmcgd29ya2luZ2RpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKTsKLSAgCi0gIC8vcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0gIHByb3RlY3RlZCBXU0RMVmFsaWRhdG9yIHdzZGxWYWxpZGF0b3IgPSBudWxsOwotICBwcm90ZWN0ZWQgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCB3c2RsRmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHZhbGlkYXRvclJCID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3R1Y3Rvci4KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMVmFsaWRhdGUoKQotICB7Ci0gIAl3c2RsVmFsaWRhdG9yID0gbmV3IFdTRExWYWxpZGF0b3IoKTsKLSAgCWNvbmZpZ3VyYXRpb24gPSBuZXcgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gIAkKLSAgICB0cnkKLSAgICB7Ci0gICAgICB2YWxpZGF0b3JSQiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShWQUxJREFUT1JfUFJPUEVSVElFUyk7Ci0gICAgfQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJWYWxpZGF0aW9uIGZhaWxlZDogVW5hYmxlIHRvIGxvYWQgdGhlIFdTREwgdmFsaWRhdG9yIHByb3BlcnRpZXMgZmlsZS4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIGZpbGVzIHNwZWNpZmllZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlKCkKLSAgewotCUlMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpOwotCQotCWludCBudW1JbnZhbGlkID0gMDsKLQotCUl0ZXJhdG9yIGZpbGVzSXRlciA9IHdzZGxGaWxlcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChmaWxlc0l0ZXIuaGFzTmV4dCgpKQotCXsKLQkgIFN0cmluZyB3c2RsRmlsZSA9IChTdHJpbmcpZmlsZXNJdGVyLm5leHQoKTsKLQkgIElWYWxpZGF0aW9uUmVwb3J0IHZhbFJlcG9ydCA9IHZhbGlkYXRlRmlsZSh3c2RsRmlsZSk7Ci0KLQkgIGlmKHZhbFJlcG9ydC5oYXNFcnJvcnMoKSkKLQkgIHsKLQkgICAgbnVtSW52YWxpZCsrOwotCSAgICBsb2dnZXIubG9nKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9GSUxFX0lOVkFMSUQsIG5ldyBPYmplY3RbXXt3c2RsRmlsZX0pLCBJTG9nZ2VyLlNFVl9JTkZPKTsKLQkgICAgLy9sb2dnZXIubG9nKFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIsIElMb2dnZXIuU0VWX0VSUk9SKTsKLQkgICAgbG9nZ2VyLmxvZyhnZXRNZXNzYWdlcyh2YWxSZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkpLCBJTG9nZ2VyLlNFVl9JTkZPKTsKLQkgIH0KLQkgIGVsc2UgaWYodmVyYm9zZSkKLQkgIHsKLQkgICAgbG9nZ2VyLmxvZyhNZXNzYWdlRm9ybWF0LmZvcm1hdChXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfRklMRV9WQUxJRCwgbmV3IE9iamVjdFtde3dzZGxGaWxlfSksIElMb2dnZXIuU0VWX1ZFUkJPU0UpOwotCSAgfQotCX0KLSAgICAKLSAgICAvLyBMb2cgdGhlIHN1bW1hcnkuCi0gICAgbG9nZ2VyLmxvZyhNZXNzYWdlRm9ybWF0LmZvcm1hdChXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfVkFMSURBVElPTl9TVU1NQVJZLCBuZXcgT2JqZWN0W117bmV3IEludGVnZXIod3NkbEZpbGVzLnNpemUoKSksIG5ldyBJbnRlZ2VyKG51bUludmFsaWQpfSksIElMb2dnZXIuU0VWX0lORk8pOwotICB9Ci0KLSAgLyoqCi0gICAqIFJ1biBXU0RMIHZhbGlkYXRpb24gb24gYSBnaXZlbiBmaWxlLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVuYW1lIAotICAgKiAJCVRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHZhbGlkYXRlLgotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIElWYWxpZGF0aW9uUmVwb3J0IHZhbGlkYXRlRmlsZShTdHJpbmcgZmlsZW5hbWUpCi0gIHsJCi0gICAgLy8gUmVzb2x2ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUuCi0gICAgU3RyaW5nIGZpbGVsb2NhdGlvbiA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVVJMIGZpbGVVUkwgPSBTdHJpbmdVdGlscy5nZXRVUkwobmV3IFVSTChGSUxFX1BSRUZJWCArIHdvcmtpbmdkaXIgKyAiLyIpLCBmaWxlbmFtZSk7Ci0gICAgICBmaWxlbG9jYXRpb24gPSBmaWxlVVJMLnRvRXh0ZXJuYWxGb3JtKCk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBEbyBub3RoaW5nLiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCBoYW5kbGUgdGhlIGVycm9yLgotICAgICAgLy9Mb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9FUlJPUl9VTkFCTEVfVE9fUkVBRF9GSUxFLCBuZXcgT2JqZWN0W117ZmlsZW5hbWV9KSwgSUxvZ2dlci5TRVZfRVJST1IpOwotICAgIH0KLSAgICAKLSAgICAvLyBSdW4gdmFsaWRhdGlvbiBvbiB0aGUgZmlsZS4KLSAgICBJVmFsaWRhdGlvblJlcG9ydCB2YWxSZXBvcnQgPSB3c2RsVmFsaWRhdG9yLnZhbGlkYXRlKGZpbGVsb2NhdGlvbiwgbnVsbCwgY29uZmlndXJhdGlvbik7Ci0gICAgcmV0dXJuIHZhbFJlcG9ydDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgU3RyaW5nIHdpdGggZm9ybWF0dGVkIG91dHB1dCBmb3IgYSBsaXN0IG9mIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2VzIAotICAgKiAJCVRoZSBtZXNzYWdlcyB0byBnZXQuCi0gICAqIEByZXR1cm4gCi0gICAqIAkJQSBzdHJpbmcgd2l0aCBhIGZvcm1hdHRlZCBsaXN0IG9mIHRoZSBtZXNzYWdlcy4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0TWVzc2FnZXMoSVZhbGlkYXRpb25NZXNzYWdlW10gbWVzc2FnZXMpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgb3V0cHV0QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChtZXNzYWdlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIGNyZWF0ZSBhIGxpc3Qgb2YgbWVzc2FnZXMgdGhhdCBsb29rcyBsaWtlCi0gICAgICAvLyBFUlJPUiAxOjEgRXJyb3IgbWVzc2FnZSBjb250ZW50Ci0gICAgICBpbnQgbnVtTWVzc2FnZXMgPSBtZXNzYWdlcy5sZW5ndGg7Ci0gICAgICBTdHJpbmcgbWFya2VyID0gbnVsbDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTWVzc2FnZXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTsKLSAgICAgICAgaW50IHNldmVyaXR5ID0gbWVzc2FnZS5nZXRTZXZlcml0eSgpOwotICAgICAgICBpZiAoc2V2ZXJpdHkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIG1hcmtlciA9IFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9FUlJPUl9NQVJLRVI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2V2ZXJpdHkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotICAgICAgICB7Ci0gICAgICAgICAgbWFya2VyID0gV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG1hcmtlciA9IFNUUklOR19FTVBUWTsKLSAgICAgICAgfQotICAgICAgICBvdXRwdXRCdWZmZXIKLSAgICAgICAgICAuYXBwZW5kKG1hcmtlcikKLSAgICAgICAgICAuYXBwZW5kKFNUUklOR19TUEFDRSkKLSAgICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0TGluZSgpKQotICAgICAgICAgIC5hcHBlbmQoIjoiKQotICAgICAgICAgIC5hcHBlbmQobWVzc2FnZS5nZXRDb2x1bW4oKSkKLSAgICAgICAgICAuYXBwZW5kKFNUUklOR19TUEFDRSkKLSAgICAgICAgICAuYXBwZW5kKG1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgaWYoaSAhPSBudW1NZXNzYWdlcyAtMSkKLSAgICAgICAgewotICAgICAgICAgIG91dHB1dEJ1ZmZlci5hcHBlbmQoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG91dHB1dEJ1ZmZlci50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtYWluIGVudHJ5IHBvaW50IGludG8gdGhlIGNvbW1hbmQgbGluZSB0b29sLiAKLSAgICogQ2hlY2tzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCByZWdpc3RlcnMgdGhlIGRlZmF1bHQgdmFsaWRhdG9ycyBhbmQgcnVucyB2YWxpZGF0aW9uIG9uIHRoZQotICAgKiBsaXN0IG9mIGZpbGVzLgotICAgKiAKLSAgICogQHBhcmFtIGFyZ3MgLSB0aGUgYXJndW1lbnRzIHRvIHRoZSB2YWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICAvLyBObyBhcmd1bWVudHMgc3BlY2lmaWVkLiBQcmludCB1c2FnZS4KLQlpZiAoYXJncy5sZW5ndGggPCAxKQotICAgIHsKLQkgIFN5c3RlbS5lcnIucHJpbnRsbihXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fRVJST1JfV1JPTkdfQVJHVU1FTlRTKTsKLQkgIFN5c3RlbS5leGl0KDApOwotCX0KLQkKLQlXU0RMVmFsaWRhdGUgd3NkbFZhbGlkYXRlID0gbmV3IFdTRExWYWxpZGF0ZSgpOwotCXdzZGxWYWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzKTsKLQl3c2RsVmFsaWRhdGUudmFsaWRhdGUoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBhcmd1bWVudHMgc3BlY2lmaWVkIGZvciB0aGlzIFdTRExWYWxpZGF0ZSB0YXNrIGFuZAotICAgKiBjb25maWd1cmUgdmFsaWRhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBhcmdzCi0gICAqIAkJVGhlIGFyZ3VtZW50cyBzcGVjaWZpZWQgZm9yIHRoaXMgdGFzay4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBhcnNlQXJndW1lbnRzKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLQlpbnQgbnVtYXJncyA9IGFyZ3MubGVuZ3RoOwotCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBudW1hcmdzOyBpKyspCi0JewotCSAgU3RyaW5nIHBhcmFtID0gYXJnc1tpXTsKLQotCSAgLy8gUmVnaXN0ZXJpbmcgYW4gZXh0ZW5zaW9uIHZhbGlkYXRvciBvciBXU0RMIDEuMSBleHRlbnNpb24gdmFsaWRhdG9yLgotCSAgaWYgKHBhcmFtLmVxdWFscyhXU0RMVmFsaWRhdGUuUEFSQU1fV1NETDExVkFMKSAKLQkJCSAgfHwgcGFyYW0uZXF1YWxzKFdTRExWYWxpZGF0ZS5QQVJBTV9FWFRWQUwpKQotCSAgewotCSAgICBTdHJpbmcgbmFtZXNwYWNlID0gYXJnc1srK2ldOwotCSAgICBpZiAoIW5hbWVzcGFjZS5zdGFydHNXaXRoKFdTRExWYWxpZGF0ZS5TVFJJTkdfREFTSCkpCi0JICAgIHsKLQkgICAgICBTdHJpbmcgdmFsaWRhdG9yQ2xhc3MgPSBhcmdzWysraV07Ci0KLQkgICAgICBpZiAoIXZhbGlkYXRvckNsYXNzLnN0YXJ0c1dpdGgoV1NETFZhbGlkYXRlLlNUUklOR19EQVNIKSkKLQkgICAgICB7Ci0JICAgICAgICBpZihwYXJhbS5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0ZS5QQVJBTV9XU0RMMTFWQUwpKQotCSAgICAgICAgeyAgCi0JICAgICAgICAgIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IENsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUodmFsaWRhdG9yQ2xhc3MpOwotCSAgICAgICAgICB3c2RsVmFsaWRhdG9yLnJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZSBpZihwYXJhbS5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0ZS5QQVJBTV9FWFRWQUwpKQotCSAgICAgICAgewotCSAgICAgICAgICBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZSh2YWxpZGF0b3JDbGFzcyk7Ci0JICAgICAgICAgIHdzZGxWYWxpZGF0b3IucmVnaXN0ZXJXU0RMRXh0ZW5zaW9uVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgICBlbHNlCi0JICAgICAgewotCSAgICAgICAgaS0tOwotCSAgICAgIH0KLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgICBpLS07Ci0JICAgIH0gIAotCSAgfQotCSAgLy8gUmVnaXN0ZXIgYSBkaXJlY3Rvcnkgd2l0aCBzY2hlbWFzLgotCSAgZWxzZSBpZiAocGFyYW0uZXF1YWxzSWdub3JlQ2FzZShXU0RMVmFsaWRhdGUuUEFSQU1fU0NIRU1BRElSKSkKLQkgIHsKLQkgICAgU3RyaW5nIHhzZERpciA9IGFyZ3NbKytpXTsKLQkgICAgWE1MQ2F0YWxvZy5hZGRTY2hlbWFEaXIoeHNkRGlyKTsKLQkgIH0KLQkgIC8vIFJlZ2lzdGVyIGEgc2NoZW1hLgotCSAgLy8gVE9ETzogUmVwbGFjZSB0aGlzIHdpdGggYW4gWE1MIGNhdGFsb2cuCi0JICBlbHNlIGlmIChwYXJhbS5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0ZS5QQVJBTV9TQ0hFTUEpKQotCSAgewotCSAgICBTdHJpbmcgcHVibGljaWQgPSBhcmdzWysraV07Ci0JICAgIFN0cmluZyBzeXN0ZW1pZCA9IGFyZ3NbKytpXTsKLQkgICAgWE1MQ2F0YWxvZy5hZGRFbnRpdHkobmV3IFhNTENhdGFsb2dFbnRpdHlIb2xkZXIocHVibGljaWQsIHN5c3RlbWlkKSk7Ci0JICB9Ci0JICAvLyBSZWdpc3RlciBhIFVSSSByZXNvbHZlci4gCi0JICAvLyBUT0RPOiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHRleHQgVUkuCi0JICBlbHNlIGlmKHBhcmFtLmVxdWFsc0lnbm9yZUNhc2UoUEFSQU1fVVJJUkVTT0xWRVIpKQotCSAgewotCSAgICBTdHJpbmcgcmVzb2x2ZXJDbGFzcyA9IGFyZ3NbKytpXTsKLQkgICAgd3NkbFZhbGlkYXRvci5hZGRVUklSZXNvbHZlcihuZXcgVVJJUmVzb2x2ZXJEZWxlZ2F0ZShyZXNvbHZlckNsYXNzLCBudWxsKS5nZXRVUklSZXNvbHZlcigpKTsKLQkgIH0KLQkgIC8vIENvbmZpZ3VyZSB0aGUgbG9nZ2VyLgotCSAgZWxzZSBpZihwYXJhbS5lcXVhbHMoUEFSQU1fTE9HR0VSKSkKLQkgIHsKLQkgICAgU3RyaW5nIGxvZ2dlckNsYXNzU3RyaW5nID0gYXJnc1srK2ldOwotCSAgICB0cnkKLQkgICAgewotCSAgICAgIENsYXNzIGxvZ2dlckNsYXNzID0gV1NETFZhbGlkYXRlLmNsYXNzLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKGxvZ2dlckNsYXNzU3RyaW5nKTsKLQkgICAgICBJTG9nZ2VyIGxvZ2dlciA9IChJTG9nZ2VyKWxvZ2dlckNsYXNzLm5ld0luc3RhbmNlKCk7Ci0JICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihsb2dnZXIpOwotCSAgICB9Ci0JICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgICB7Ci0JICAgICAgU3lzdGVtLmVyci5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9FUlJPUl9MT0FESU5HX0xPR0dFUiwgbmV3IE9iamVjdFtde2xvZ2dlckNsYXNzU3RyaW5nfSkpOwotCSAgICB9Ci0JICB9Ci0JICAvLyBTZXQgcHJvcGVydGllcy4KLQkgIGVsc2UgaWYocGFyYW0uc3RhcnRzV2l0aChQQVJBTV9QUk9QRVJUWSkpCi0JICB7Ci0JICAgIGludCBzZXBhcmF0b3IgPSBwYXJhbS5pbmRleE9mKCc9Jyk7Ci0JICAgIFN0cmluZyBuYW1lID0gcGFyYW0uc3Vic3RyaW5nKDIsIHNlcGFyYXRvcik7Ci0JICAgIFN0cmluZyB2YWx1ZSA9IHBhcmFtLnN1YnN0cmluZyhzZXBhcmF0b3IrMSk7Ci0JICAgIGNvbmZpZ3VyYXRpb24uc2V0UHJvcGVydHkobmFtZSwgdmFsdWUpOwotCSAgfQotCSAgLy8gU2V0IHZlcmJvc2U7Ci0JICBlbHNlIGlmKHBhcmFtLmVxdWFscyhQQVJBTV9WRVJCT1NFKSB8fCBwYXJhbS5lcXVhbHMoIFBBUkFNX1ZFUkJPU0VfU0hPUlQpKQotCSAgewotCQl2ZXJib3NlID0gdHJ1ZTsKLQkgIH0KLQkgIC8vIGEgZmlsZSB0byB2YWxpZGF0ZQotCSAgZWxzZQotCSAgewotCSAgICBpZighcGFyYW0uc3RhcnRzV2l0aChXU0RMVmFsaWRhdGUuU1RSSU5HX0RBU0gpKQotCSAgICB7ICAKLQkgICAgICB3c2RsRmlsZXMuYWRkKHBhcmFtKTsKLQkgICAgfQotCSAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YWM4ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLS8qKgotICogU3RyaW5ncyB1c2VkIGJ5IHRoZSBXU0RMVmFsaWRhdGUgdGV4dCBVSS4KLSAqIFRoaXMgY2xhc3MgbWltaWNzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIE9TR0kgTkxTIGNsYXNzIGZvciBjb252ZW5pZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dC53c2RsdmFsaWRhdGV0ZXh0dWkiOy8vJE5PTi1OTFMtMSQKLQotCS8vIEVycm9yIG1lc3NhZ2VzLgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9FUlJPUl9XUk9OR19BUkdVTUVOVFMgPSAiX0VSUk9SX1dST05HX0FSR1VNRU5UUyI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX0VSUk9SX0xPQURJTkdfTE9HR0VSID0gIl9FUlJPUl9MT0FESU5HX0xPR0dFUiI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX0VSUk9SX1VOQUJMRV9UT19SRUFEX0ZJTEUgPSAiX0VSUk9SX1VOQUJMRV9UT19SRUFEX0ZJTEUiOwotCQotCS8vIFZhbGlkYXRpb24gbWVzc2FnZXMuCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiA9ICJfVUlfSU5GT1JNQVRJT05fREVMSU1JVEVSIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRklMRV9WQUxJRCA9ICJfVUlfRklMRV9WQUxJRCI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZJTEVfSU5WQUxJRCA9ICJfVUlfRklMRV9JTlZBTElEIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRVJST1JfTUFSS0VSID0gIl9VSV9FUlJPUl9NQVJLRVIiOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9XQVJOSU5HX01BUktFUiA9ICJfVUlfV0FSTklOR19NQVJLRVIiOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9WQUxJREFUSU9OX1NVTU1BUlkgPSAiX1VJX1ZBTElEQVRJT05fU1VNTUFSWSI7Ci0KLQlzdGF0aWMgCi0JewotCQkvLyBsb2FkIG1lc3NhZ2UgdmFsdWVzIGZyb20gYnVuZGxlIGZpbGUKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQkJX0VSUk9SX1dST05HX0FSR1VNRU5UUyA9IGJ1bmRsZS5nZXRTdHJpbmcoU3RyaW5nLnZhbHVlT2YoX0VSUk9SX1dST05HX0FSR1VNRU5UUykpOwotCQlfRVJST1JfTE9BRElOR19MT0dHRVIgPSBidW5kbGUuZ2V0U3RyaW5nKF9FUlJPUl9MT0FESU5HX0xPR0dFUik7Ci0JCV9FUlJPUl9VTkFCTEVfVE9fUkVBRF9GSUxFID0gYnVuZGxlLmdldFN0cmluZyhfRVJST1JfVU5BQkxFX1RPX1JFQURfRklMRSk7Ci0JCV9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIgPSBidW5kbGUuZ2V0U3RyaW5nKF9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIpOwotCQlfVUlfRklMRV9WQUxJRCA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX0ZJTEVfVkFMSUQpOwotCQlfVUlfRklMRV9JTlZBTElEID0gYnVuZGxlLmdldFN0cmluZyhfVUlfRklMRV9JTlZBTElEKTsKLQkJX1VJX0VSUk9SX01BUktFUiA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX0VSUk9SX01BUktFUik7Ci0JCV9VSV9XQVJOSU5HX01BUktFUiA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX1dBUk5JTkdfTUFSS0VSKTsKLQkJX1VJX1ZBTElEQVRJT05fU1VNTUFSWSA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX1ZBTElEQVRJT05fU1VNTUFSWSk7Ci0JfQotCi0JcHJpdmF0ZSBXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcygpIAotCXsKLQkJLy8gY2Fubm90IGNyZWF0ZSBuZXcgaW5zdGFuY2UKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC93c2RsdmFsaWRhdGV0ZXh0dWkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L3dzZGx2YWxpZGF0ZXRleHR1aS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGVkODJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L3dzZGx2YWxpZGF0ZXRleHR1aS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBNZXNzYWdlcyBmb3IgdGhlIFdTRExWYWxpZGF0ZSB0ZXh0IFVJIGludGVyZmFjZS4KLQotIyBFcnJvciBtZXNzYWdlcwotX0VSUk9SX1dST05HX0FSR1VNRU5UUyAgICAgPSBVc2FnZTogV1NETFZhbGlkYXRlIFstd3NkbDExdiBuYW1lc3BhY2UgY2xhc3NuYW1lXSBbLWV4dHYgbmFtZXNwYWNlIGNsYXNzbmFtZV0gWy1EbmFtZT12YWx1ZV0gZmlsZW5hbWVcblwKLVwgIC13c2RsMTF2XHRSZWdpc3RlciB0aGUgV1NETCAxLjEgdmFsaWRhdG9yIHNwZWNpZmllZCBieSBjbGFzc25hbWVcblwKLVx0XHRmb3IgbmFtZXNwYWNlLlxuXAotXCAgLWV4dHZcdFx0UmVnaXN0ZXIgdGhlIFdTREwgZXh0ZW5zaW9uIHZhbGlkYXRvciBzcGVjaWZpZWQgYnlcblwKLVx0XHRjbGFzc25hbWUgZm9yIG5hbWVzcGFjZS5cblwKLVwgIC12ZXJib3NlLCAtdlx0UHJpbnQgb3V0IHZlcmJvc2UgaW5mb3JtYXRpb24uXG5cCi1cICAtbG9nZ2VyXHRTcGVjaWZ5IGFuIGFsdGVybmF0ZSBsb2dnZXIgdGhhdCBpbXBsZW1lbnRzXG5cCi1cdFx0b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXJcblwKLVwgIC1EXHRcdFNwZWNpZnkgYSBwcm9wZXJ0eSB3aXRoIG5hbWUgYW5kIHZhbHVlLiAgCi1fRVJST1JfTE9BRElOR19MT0dHRVIgICAgICA9IFVuYWJsZSB0byBsb2FkIGxvZ2dlciBjbGFzcyB7MH0uCi1fRVJST1JfVU5BQkxFX1RPX1JFQURfRklMRSA9IFVuYWJsZSB0byByZWFkIGZpbGUgezB9LgotCi0jIFZhbGlkYXRpb24gbWVzc2FnZXMKLV9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIgID0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1fVUlfRklMRV9JTlZBTElEICAgICAgICAgICA9IHswfSAtIE5vdCB2YWxpZAotX1VJX0ZJTEVfVkFMSUQgICAgICAgICAgICAgPSB7MH0gLSBWYWxpZAotX1VJX0VSUk9SX01BUktFUiAgICAgICAgICAgPSBFUlJPUgotX1VJX1dBUk5JTkdfTUFSS0VSICAgICAgICAgPSBXQVJOSU5HCi1fVUlfVkFMSURBVElPTl9TVU1NQVJZICAgICA9IHswfSBmaWxlcyB2YWxpZGF0ZWQuIHsxfSBmaWxlcyByZXBvcnRlZCBlcnJvcnMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3V0aWwvRXJyb3JNZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9FcnJvck1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhMTRiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9FcnJvck1lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsOwotCi0vKioKLSAqIEEgY2xhc3MgdG8gaG9sZCB2YWxpZGF0aW9uIG1lc3NhZ2VzLiBJbiB0aGlzIGNhc2UgYW4gZXJyb3IgbWVzc2FnZSBpcyBhIGdlbmVyaWMKLSAqIHRlcm0gZm9yIGFueSBraW5kIG9mIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yTWVzc2FnZQotewotICBwcml2YXRlIGludCBlcnJvckxpbmUsIGVycm9yQ29sdW1uLCBzZXZlcml0eTsKLSAgcHJpdmF0ZSBTdHJpbmcgZXJyb3JTdHJpbmcsIHVyaTsKLSAgcHJpdmF0ZSBpbnQgc3RhcnRPZmZzZXQgPSAtMTsKLSAgcHJpdmF0ZSBpbnQgZW5kT2Zmc2V0ID0gLTE7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIEVycm9yTWVzc2FnZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIGVycm9yIFRoZSBtZXNzYWdlIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0RXJyb3JNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nIGVycm9yKQotICB7Ci0gICAgZXJyb3JTdHJpbmcgPSBlcnJvcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBzZWUgI2dldFNldmVyaXR5Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXZlcml0eShpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICB0aGlzLnNldmVyaXR5ID0gc2V2ZXJpdHk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UgdXNpbmcgc3RyaW5nIG5hbWVzIGZvciB0aGUgc2V2ZXJpdHkuCi0gICAqIAotICAgKiBAcGFyYW0gc2V2ZXJpdHkgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2V2ZXJpdHkuCi0gICAqIEBzZWUgI2dldFNldmVyaXR5Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXZlcml0eShTdHJpbmcgc2V2ZXJpdHkpCi0gIHsKLSAgICBpZiAoc2V2ZXJpdHkuZXF1YWxzKCJ3YXJuaW5nIikpCi0gICAgewotICAgICAgdGhpcy5zZXZlcml0eSA9IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNldmVyaXR5LmVxdWFscygiZXJyb3IiKSkKLSAgICB7Ci0gICAgICB0aGlzLnNldmVyaXR5ID0gMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2V2ZXJpdHkuZXF1YWxzKCJmYXRhbCIpKQotICAgIHsKLSAgICAgIHRoaXMuc2V2ZXJpdHkgPSAyOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBsaW5lIHdoZXJlIHRoZSBlcnJvciBpcyBsb2NhdGVkLgotICAgKiAKLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIGlzIGxvY2F0ZWQuCi0gICAqIEBzZWUgI2dldEVycm9yTGluZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXJyb3JMaW5lKGludCBsaW5lKQotICB7Ci0gICAgZXJyb3JMaW5lID0gbGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIGlzIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIGlzIGxvY2F0ZWQuCi0gICAqIEBzZWUgI2dldEVycm9yQ29sdW1uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvckNvbHVtbihpbnQgY29sdW1uKQotICB7Ci0gICAgZXJyb3JDb2x1bW4gPSBjb2x1bW47Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIEBzZWUgI3NldEVycm9yTWVzc2FnZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yU3RyaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNldmVyaXR5IG9mIHRoZSBlcnJvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHNldmVyaXR5IG9mIHRoZSBlcnJvci4KLSAgICogQHNlZSAjc2V0U2V2ZXJpdHkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0U2V2ZXJpdHkoKQotICB7Ci0gICAgcmV0dXJuIHNldmVyaXR5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuCi0gICAqIEBzZWUgI3NldEVycm9yTGluZQotICAgKi8KLSAgcHVibGljIGludCBnZXRFcnJvckxpbmUoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yTGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY29sdW1uIGxvY2F0aW9uIG9mIHRoZSBlcnJvci4KLSAgICogQHNlZSAjc2V0RXJyb3JDb2x1bW4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RXJyb3JDb2x1bW4oKQotICB7Ci0gICAgcmV0dXJuIGVycm9yQ29sdW1uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHN0YXJ0IG9mZnNldC4KLSAgICogCi0gICAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgb2Zmc2V0LgotICAgKiBAc2VlICNnZXRFcnJvclN0YXJ0T2Zmc2V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvclN0YXJ0T2Zmc2V0KGludCBzdGFydCkKLSAgewotICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3Igc3RhcnQgb2Zmc2V0LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZXJyb3Igc3RhcnQgb2Zmc2V0LgotICAgKiBAc2VlICNzZXRFcnJvclN0YXJ0T2Zmc2V0Ci0gICAqLwotICBwdWJsaWMgaW50IGdldEVycm9yU3RhcnRPZmZzZXQoKQotICB7Ci0gICAgcmV0dXJuIHN0YXJ0T2Zmc2V0OwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGVuZCBvZmZzZXQuCi0gICAqIAotICAgKiBAcGFyYW0gZW5kIFRoZSBlbmQgb2Zmc2V0LgotICAgKiBAc2VlICNnZXRFcnJvckVuZE9mZnNldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXJyb3JFbmRPZmZzZXQoaW50IGVuZCkKLSAgewotICAgIGVuZE9mZnNldCA9IGVuZDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlcnJvciBlbmQgb2Zmc2V0LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZXJyb3IgZW5kIG9mZnNldC4KLSAgICogQHNlZSAjc2V0RXJyb3JFbmRPZmZzZXQKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RXJyb3JFbmRPZmZzZXQoKQotICB7Ci0gICAgcmV0dXJuIGVuZE9mZnNldDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGEgbmV3IGxpbmUgb3QgdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmV3TGluZSBUaGUgbmV3IGxpbmUgdG8gYWRkIHRvIHRoZSBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTmV3RXJyb3JNZXNzYWdlTGluZShTdHJpbmcgbmV3TGluZSkKLSAgewotICAgIGVycm9yU3RyaW5nICs9ICJcbiIgKyBuZXdMaW5lOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBVUkkgb2YgdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgdG8gc2V0LgotICAgKi8KLSAKLSAgcHVibGljIHZvaWQgc2V0VVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICB0aGlzLnVyaSA9IHVyaTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIG9mIHRoZSBlcnJvciBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIG9mIHRoZSBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKQotICB7Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3V0aWwvTGF6eVVSTElucHV0U3RyZWFtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2MGFmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgYWxsb3dzIElucHV0U3RyZWFtcyB0byBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZCB0byB4ZXJjZXMgd2l0aG91dAotICogYWN0dWFsbHkgb3BlbmluZyBmaWxlIGhhbmRsZXMgb3IgbmV0d29yayBjb25uZWN0aW9ucyB1bnRpbCBpdCBpcyBhYnNvbHV0ZWx5Ci0gKiBuZWNjZXNzYXJ5LgotICovCi1wdWJsaWMgY2xhc3MgTGF6eVVSTElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0KLXsgIAotICBwcml2YXRlIHN0YXRpYyBpbnQgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCA9IDA7IAotICBwcm90ZWN0ZWQgSW5wdXRTdHJlYW0gaW5uZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdXJsOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBlcnJvcjsKLSAgYm9vbGVhbiBoYXNNYXJrczsKLSAgYm9vbGVhbiBwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuOwotCi0gIHB1YmxpYyBMYXp5VVJMSW5wdXRTdHJlYW0oU3RyaW5nIHVybCkKLSAgewotICAgIHRoaXMudXJsID0gdXJsOwotCWlubmVyID0gbnVsbDsKLQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoaW5uZXIgPT0gbnVsbCAmJiAhZXJyb3IpCi0gICAgewotICAgICAgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCsrOwotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHN0cmVhbSAoIiArIGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQgKyAiKS0tICIgKyB1cmwpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlubmVyID0gbmV3IFVSTCh1cmwpLm9wZW5TdHJlYW0oKTsKLQkJcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IGZhbHNlOwotCQloYXNNYXJrcyA9IGZhbHNlOwotICAgICAgfQotICAgICAgZmluYWxseSAKLSAgICAgIHsKLSAgICAgICAgaWYgKGlubmVyID09IG51bGwpCi0gICAgICAgIHsgIAotICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0JcHJvdGVjdGVkIHZvaWQgY2xvc2VTdHJlYW0oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAoaW5uZXIgIT0gbnVsbCAmJiAhcHJldGVuZEZpbGVJc1N0aWxsT3BlbikgewotCQkJaW5uZXIuY2xvc2UoKTsKLQkJCXByZXRlbmRGaWxlSXNTdGlsbE9wZW4gPSB0cnVlOwotCQl9Ci0gIAl9Ci0KLSAgcHVibGljIGludCBhdmFpbGFibGUoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm4gMDsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCXJldHVybiBpbm5lci5hdmFpbGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgewotCQkvLyBTdG9wIGJlaGF2aW5nIGFzIGlmIHRoZSBzdHJlYW0gd2VyZSBzdGlsbCBvcGVuLgotCQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJaWYgKGlubmVyICE9IG51bGwpIHsKLQkJCWRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQtLTsKLQkJICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNsb3Npbmcgc3RyZWFtICgiICsgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCArICIpIC0tICIgKyB1cmwpOwotCQkJaW5uZXIuY2xvc2UoKTsKLQkJfQotCX0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1hcmsoaW50IHJlYWRsaW1pdCkKLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm47Ci0JaGFzTWFya3MgPSB0cnVlOwotCXRyeSB7Ci0JCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCQlpbm5lci5tYXJrKHJlYWRsaW1pdCk7Ci0JfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCSAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZygiVGhlIGZvbGxvd2luZyBJT0V4Y2VwdGlvbiBvY2N1cnJlZCBpbiB0aGUgV1NETCB2YWxpZGF0b3IncyBMYXp5VVJMSW5wdXRTdHJlYW0uIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotCX0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKQotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiBmYWxzZTsKLQl0cnkgewotCQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQkJaWYgKGlubmVyID09IG51bGwpIHJldHVybiBmYWxzZTsKLQkJcmV0dXJuIGlubmVyLm1hcmtTdXBwb3J0ZWQoKTsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJUaGUgZm9sbG93aW5nIElPRXhjZXB0aW9uIG9jY3VycmVkIGluIHRoZSBXU0RMIHZhbGlkYXRvcidzIExhenlVUkxJbnB1dFN0cmVhbS4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0JfQotCXJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKCk7Ci0JaWYgKGJ5dGVzUmVhZCA9PSAtMSAmJiAhaGFzTWFya3MpIGNsb3NlU3RyZWFtKCk7Ci0JcmV0dXJuIGJ5dGVzUmVhZDsKLSAgfQotCi0KLQlwdWJsaWMgaW50IHJlYWQoYnl0ZVtdIGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm4gLTE7Ci0JCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCQlpbnQgYnl0ZXNSZWFkID0gaW5uZXIucmVhZChiKTsKLQkJaWYgKGJ5dGVzUmVhZCA9PSAtMSAmJiAhaGFzTWFya3MpIGNsb3NlU3RyZWFtKCk7Ci0JCXJldHVybiBieXRlc1JlYWQ7Ci0JfQotCi0gIHB1YmxpYyBpbnQgcmVhZChieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsgICAgCi0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKGIsIG9mZiwgbGVuKTsKLQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQlyZXR1cm4gYnl0ZXNSZWFkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSByZXR1cm47Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlpbm5lci5yZXNldCgpOwotICB9Ci0KLSAgcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbgotICB7ICAgCi0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAwOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JcmV0dXJuIGlubmVyLnNraXAobik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL01lc3NhZ2VHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL01lc3NhZ2VHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyMzQ3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9NZXNzYWdlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotCi0vKioKLSAqIEEgY29udmVuaWVuY2UgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCByZXNvdXJjZXMgaW4gYSByZXNvdXJjZSBidW5kbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlR2VuZXJhdG9yCi17Ci0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZWJ1bmRsZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gcmIgVGhlIHJlc291cmNlIGJ1bmRsZSB0byB3b3JrIHdpdGguCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUdlbmVyYXRvcihSZXNvdXJjZUJ1bmRsZSByYikKLSAgewotICAgIHJlc291cmNlYnVuZGxlID0gcmI7Ci0gIH0KLQotICAvKioKLSAgKiBTZXQgdGhlIHJlc291cmNlYnVuZGxlIHRvIHRoZSBvbmUgc3BlY2lmaWVkLgotICAqIAotICAqIEBwYXJhbSByYiBUaGUgcmVzb3VyY2UgYnVuZGxlIHRvIHNldC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0UmVzb3VyY2VCdW5kbGUoUmVzb3VyY2VCdW5kbGUgcmIpCi0gIHsKLSAgICByZXNvdXJjZWJ1bmRsZSA9IHJiOwotICB9Ci0KLSAgLyoqCi0gICogR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5LgotICAqIAotICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHJlc291cmNlLgotICAqIEByZXR1cm4gVGhlIHN0cmluZyBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpCi0gIHsKLSAgICByZXR1cm4gcmVzb3VyY2VidW5kbGUuZ2V0U3RyaW5nKGtleSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkb2VzIG9uZSBzdWJzdGl0dXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSByZXNvdXJjZS4KLSAgICogQHBhcmFtIHMxIFRoZSBzdWJzdGl0dXRpb24gdG8gcGVyZm9ybS4KLSAgICogQHJldHVybiBUaGUgc3RyaW5nIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkKLSAgewotICAgIHJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRTdHJpbmcoa2V5KSwgbmV3IE9iamVjdFtdIHsgczEgfSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkb2VzIHR3byBzdWJzdGl0dXRpb25zLgotICAgKiAKLSAgICogQHBhcmFtIGtleSBUaGUga2V5IGZvciB0aGUgcmVzb3VyY2UuCi0gICAqIEBwYXJhbSBzMSBUaGUgZmlyc3Qgc3Vic3RpdHV0aW9uIHRvIHBlcmZvcm0uCi0gICAqIEBwYXJhbSBzMiBUaGUgc2Vjb25kIHN1YnN0aXR1dGlvbiB0byBwZXJmb3JtLgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxLCBPYmplY3QgczIpCi0gIHsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0U3RyaW5nKGtleSksIG5ldyBPYmplY3RbXSB7IHMxLCBzMiB9KTsKLSAgfQotCi0gIC8qKgotICAgKiAgR2V0cyB0aGUgc3RyaW5nIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCBkb2VzIHRocmVlIHN1YnN0aXR1dGlvbnMuCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSByZXNvdXJjZS4KLSAgICogQHBhcmFtIHMxIFRoZSBmaXJzdCBzdWJzdGl0dXRpb24gdG8gcGVyZm9ybS4KLSAgICogQHBhcmFtIHMyIFRoZSBzZWNvbmQgc3Vic3RpdHV0aW9uIHRvIHBlcmZvcm0uCi0gICAqIEBwYXJhbSBzMyBUaGUgdGhpcmQgc3Vic3RpdHV0aW9uIHRvIHBlcmZvcm0uCi0gICAqIEByZXR1cm4gVGhlIHN0cmluZyBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEsIE9iamVjdCBzMiwgT2JqZWN0IHMzKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldFN0cmluZyhrZXkpLCBuZXcgT2JqZWN0W10geyBzMSwgczIsIHMzIH0pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0NsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmI3ZjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlIGV4dGVuZHMgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lID0gbnVsbDsKLSAgcHJpdmF0ZSBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGRlbGVnYXRlIGZvciBhIHZhbGlkYXRvciBieSBpdHMgY2xhc3MgbmFtZS4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0b3JDbGFzc25hbWUgVGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvciBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUpCi0gIHsKLQl0aGlzLnZhbGlkYXRvckNsYXNzbmFtZSA9IHZhbGlkYXRvckNsYXNzbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBkZWxlZ2F0ZSBmb3IgYSB2YWxpZGF0b3IgYnkgaXRzIGNsYXNzIG5hbWUgYW5kIAotICAgKiBhIGNsYXNzIGxvYWRlciB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsaWRhdG9yQ2xhc3NuYW1lIFRoZSBuYW1lIG9mIHRoZSB2YWxpZGF0b3IgY2xhc3MuCi0gICAqIEBwYXJhbSBjbGFzc0xvYWRlciBUaGUgY2xhc3MgbG9hZGVyIHRvIHVzZSB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikKLSAgewotICAgIHRoaXModmFsaWRhdG9yQ2xhc3NuYW1lKTsKLSAgICB0aGlzLmNsYXNzTG9hZGVyID0gY2xhc3NMb2FkZXI7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSNsb2FkVmFsaWRhdG9yKCkKLSAgICovCi0gIHByb3RlY3RlZCBJV1NETDExVmFsaWRhdG9yIGxvYWRWYWxpZGF0b3IoKQotICB7Ci0JSVdTREwxMVZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotCWlmKGNsYXNzTG9hZGVyID09IG51bGwpCi0JewotCSAgY2xhc3NMb2FkZXIgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7Ci0JfQotCXRyeQotCXsKLSAgICAgIENsYXNzIHZhbGlkYXRvckNsYXNzID0KLSAgICAgIGNsYXNzTG9hZGVyICE9IG51bGwgPyBjbGFzc0xvYWRlci5sb2FkQ2xhc3ModmFsaWRhdG9yQ2xhc3NuYW1lKSA6IENsYXNzLmZvck5hbWUodmFsaWRhdG9yQ2xhc3NuYW1lKTsKLQotICAgICAgdmFsaWRhdG9yID0gKElXU0RMMTFWYWxpZGF0b3IpdmFsaWRhdG9yQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIlVuYWJsZSB0byBsb2FkIHZhbGlkYXRvciAiICsgdmFsaWRhdG9yQ2xhc3NuYW1lLCBJTG9nZ2VyLlNFVl9FUlJPUiwgdCk7Ci0gICAgfQotCXJldHVybiB2YWxpZGF0b3I7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSVdTREwxMVZhbGlkYXRpb25JbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0lXU0RMMTFWYWxpZGF0aW9uSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGE2OTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSVdTREwxMVZhbGlkYXRpb25JbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBXU0RMIDEuMSB2YWxpZGF0aW9uIGluZm9ybWF0aW9uLiBVc2VzIGFuIGV4aXN0aW5nCi0gKiB2YWxpZGF0aW9uIGluZm8gb2JqZWN0IGFuZCBwcm92aWRlcyBtZXRob2RzIHRvIHNldCBhbmQgcmV0cmlldmUKLSAqIHNjaGVtYXMgYW5kIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIHNldHRpbmcgZXJyb3JzIHdpdGggb2JqZWN0cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBJV1NETDExVmFsaWRhdGlvbkluZm8KLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFVSSSBvZiB0aGUgZmlsZSBiZWluZyB2YWxpZGF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgb2YgdGhlIGZpbGUgYmVpbmcgdmFsaWRhdGVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaWxlVVJJKCk7Ci0gIAotICAvKioKLSAgICogQWRkIGEgc2NoZW1hIHRvIHRoZSBsaXN0IG9mIHNjaGVtYXMgYXZhaWxhYmxlIGZvciB0aGlzIFdTREwgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0geHNNb2RlbCBUaGUgc2NoZW1hIHRvIGFkZCB0byB0aGUgbGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFNjaGVtYShYU01vZGVsIHhzTW9kZWwpOwotICAKLSAgLyoqCi0gICAqIEdldCBhbiBhcnJheSBvZiBhbGwgdGhlIHNjaGVtYXMgYXZhaWxhYmxlIGZvciB0aGlzIFdTREwgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGFsbCB0aGUgc2NoZW1hcyBhdmFpbGFibGUgZm9yIHRoaXMgV1NETCBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBYU01vZGVsW10gZ2V0U2NoZW1hcygpOwotICAKLSAgLyoqCi0gICAqIENsZWFyIGFsbCB0aGUgc3RvcmVkIHNjaGVtYXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhclNjaGVtYXMoKTsKLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGVsZW1lbnQgbG9jYXRpb25zIGhhc2h0YWJsZS4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50TG9jYXRpb25zIFRoZSBoYXNodGFibGUgdG8gc2V0IHdpdGggdGhlIGVsZW1lbnQgbG9jYXRpb25zLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9ucyhIYXNodGFibGUgZWxlbWVudExvY2F0aW9ucyk7Ci0gIAotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIGVycm9yIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIHRvIGFkZC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIG9iamVjdCB0byBhZGQgdGhlIGVycm9yIGZvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCk7Ci0gIAotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIGVycm9yIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIHRvIGFkZC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIG9iamVjdCB0byBhZGQgdGhlIGVycm9yIGZvci4KLSAgICogQHBhcmFtIGVycm9yS2V5IFRoZSBlcnJvciBrZXkgZm9yIHRoaXMgbWVzc2FnZQotICAgKiBAcGFyYW0gbWVzc2FnZUFyZ3VtZW50cyBUaGUgc3RyaW5ncyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCwgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzKTsKLSAgCi0gIC8qKgotICAgKiBBZGQgYW4gZXJyb3IgbWVzc2FnZSBhdCB0aGUgZ2l2ZW4gbGluZSBhbmQgY29sdW1uLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIHRvIGFkZC4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiBAcGFyYW0gdXJpIFRoZSB1cmkgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgZXJyb3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpOwotICAKLSAgLyoqCi0gICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZXh0ZW5zaWJseSB2YWxpZGF0b3JzIHRvIGFkZCB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHdhcm5pbmcgdG8gYWRkLgotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgd2FybmluZyBmb3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRXYXJuaW5nKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCk7Ci0gIAotICAvKioKLSAgICogQWRkIGEgd2FybmluZyBtZXNzYWdlIGF0IHRoZSBnaXZlbiBsaW5lIGFuZCBjb2x1bW4uCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgd2FybmluZyB0byBhZGQuCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIGxvY2F0aW9uIG9mIHRoZSB3YXJuaW5nLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcuCi0gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSB3YXJuaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkV2FybmluZyhTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIGluIHVzZSBmb3IgdGhpcyB2YWxpZGF0aW9uLiBUaGUgVVJJIHJlc29sdmVyCi0gICAqIHJldHVybmVkIGlzIGFjdHVhbGx5IGEgVVJJIHJlc29sdmVyIGhhbmRsZXIgdGhhdCB3aWxsIAotICAgKiBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSByZWdpc3RlcmVkIFVSSSByZXNvbHZlcnMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgcmVzb2x2ZXIgaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgc2NoZW1hIGNhY2hlIGlmIG9uZSBpcyBzcGVjaWZpZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBzY2hlbWEgY2FjaGUgaWYgb25lIGlzIHNwZWNpZmllZCwgbnVsbCBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgWE1MR3JhbW1hclBvb2wgZ2V0U2NoZW1hQ2FjaGUoKTsKLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFhNTCBjYWNoZSBpZiBvbmUgaXMgc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgWE1MIGNhY2hlIGlmIG9uZSBpcyBzcGVjaWZpZWQsIG51bGwgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIFhNTEdyYW1tYXJQb29sIGdldFhNTENhY2hlKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSVdTREwxMVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JV1NETDExVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYWJjZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JV1NETDExVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZm9yIGEgdmFsaWRhdG9yIHBsdWdnZWQgaW50byB0aGUgV1NETCAxLjEgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBnaXZlbiBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoaXMgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSW1wb3J0SG9sZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0ltcG9ydEhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTNhZjJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSW1wb3J0SG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLkVycm9yTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuWFNEVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLkFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLkRlZmF1bHRYTUxWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5RTmFtZVV0aWxzOwotCi0vKioKLSAqIEEgY2xhc3MgdG8gaG9sZCBhbmQgcGFyc2UgYW4gaW1wb3J0IGVsZW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbXBvcnRIb2xkZXIgaW1wbGVtZW50cyBDb21wYXJhYmxlCi17Ci0gIHByaXZhdGUgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotICAKLSAgcHJpdmF0ZSBXU0RMRG9jdW1lbnQgaW1wb3J0aW5nV1NETERvYyA9IG51bGw7Ci0gIHByaXZhdGUgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCA9IG51bGw7Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBpbXBvcnRpbmdEZWYgPSBudWxsOwotICBwcml2YXRlIEVsZW1lbnQgaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xhc3NwYXRoVVJJID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgY29udGV4dFVSSSA9IG51bGw7Ci0gIHByaXZhdGUgaW50IGRlcHRoOwotICBwcml2YXRlIEVsZW1lbnQgZWxlbWVudCA9IG51bGw7Ci0gIHByaXZhdGUgTGlzdCBzY2hlbWFzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcml2YXRlIGJvb2xlYW4gaXNXU0RMRmlsZUltcG9ydCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRJbnZhbGlkID0gZmFsc2U7Ci0gIHByaXZhdGUgSW1wb3J0IGltcG9ydERlZiA9IG51bGw7Ci0gIHByaXZhdGUgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbGluZm87Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIGltcG9ydC4KLSAgICogQHBhcmFtIGxvY2F0aW9uIFRoZSBsb2NhdGlvbiBvZiB0aGUgaW1wb3J0LgotICAgKiBAcGFyYW0gY29udGV4dFVSSSBUaGUgY29udGV4dCBVUkkgZm9yIHJlc29sdmluZyB0aGUgaW1wb3J0IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gd3NkbERvYyBUaGUgV1NETERvY3VtZW50IHRoYXQgY29udGFpbnMgdGhlIGltcG9ydC4KLSAgICogQHBhcmFtIGRlcHRoIFRoZSBkZXB0aCBvZiB0aGUgaW1wb3J0LgotICAgKiBAcGFyYW0gaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCBUaGUgZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGltcG9ydCBpbiB0aGUgZW5jYXBzdWxhdGluZyBXU0RMRG9jdW1lbnQuCi0gICAqIEBwYXJhbSBtZXNzYWdlZ2VuZXJhdG9yIEEgbWVzc2FnZWdlbmVyYXRvciBmb3Igb2J0YWluaW5nIHN0cmluZ3MuCi0gICAqIEBwYXJhbSB2YWxpbmZvIFRoZSBXU0RMMTFWYWxpZGF0aW9uSW5mbyBmb3IgcmVwb3J0aW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHVibGljIEltcG9ydEhvbGRlcihTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24sIFN0cmluZyBjb250ZXh0VVJJLCBXU0RMRG9jdW1lbnQgaW1wb3J0aW5nV1NETERvYywgaW50IGRlcHRoLCBFbGVtZW50IGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQsIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvciwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbGluZm8pCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VnZW5lcmF0b3IgPSBtZXNzYWdlZ2VuZXJhdG9yOwotICAgIHRoaXMudmFsaW5mbyA9IHZhbGluZm87Ci0gICAgdGhpcy5pbXBvcnRpbmdXU0RMRG9jID0gaW1wb3J0aW5nV1NETERvYzsKLSAgICBpZihpbXBvcnRpbmdXU0RMRG9jICE9IG51bGwpCi0gICAgewotICAgICAgdGhpcy5pbXBvcnRpbmdEZWYgPSBpbXBvcnRpbmdXU0RMRG9jLmdldERlZmluaXRpb24oKTsKLSAgICB9Ci0gICAgdGhpcy5pbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50ID0gaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudDsKLSAgICB0aGlzLmRlcHRoID0gZGVwdGg7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgIAotICAgIC8vICBBbGxvdyBXU0RMIGltcG9ydHMgdG8gaGF2ZSBubyBsb2NhdGlvbiBhdHRyaWJ1dGUgZXZlbiB0aG91Z2ggaXQgaXMgcmVxdWlyZWQuCi0gICAgLy8gU2NoZW1hIHdpbGwgbm9ybWFsbHkgY2F0Y2ggdGhlIHByb2JsZW0gYnV0IHRoaXMgYWxsb3dzIHVzZXJzIHRvIG92ZXJyaWRlIHRoZQotICAgIC8vIHNjaGVtYSBhbmQgaGF2ZSB0aGUgdmFsaWRhdG9yIHJ1bi4KLSAgICBpZiAodGhpcy5sb2NhdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIHRoaXMubG9jYXRpb24gPSBuYW1lc3BhY2U7Ci0gICAgfQotICAgIHRoaXMuY29udGV4dFVSSSA9IGNvbnRleHRVUkk7Ci0gICAgCi0gICAgdGhpcy5sb2NhdGlvbiA9IHRoaXMubG9jYXRpb24ucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgSVVSSVJlc29sdXRpb25SZXN1bHQgY2xhc3NwYXRoVVJJID0gdmFsaW5mby5nZXRVUklSZXNvbHZlcigpLnJlc29sdmUodGhpcy5jb250ZXh0VVJJLCB0aGlzLm5hbWVzcGFjZSwgdGhpcy5sb2NhdGlvbik7Ci0gICAgaWYoY2xhc3NwYXRoVVJJLmdldExvZ2ljYWxMb2NhdGlvbigpICE9IG51bGwpCi0gICAgewotICAgICAgdGhpcy5sb2NhdGlvbiA9IGNsYXNzcGF0aFVSSS5nZXRMb2dpY2FsTG9jYXRpb24oKTsKLSAgICB9Ci0gICAgaWYoY2xhc3NwYXRoVVJJLmdldFBoeXNpY2FsTG9jYXRpb24oKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRoaXMuY2xhc3NwYXRoVVJJID0gY2xhc3NwYXRoVVJJLmdldFBoeXNpY2FsTG9jYXRpb24oKTsKLSAgICAgIHRoaXMuY29udGV4dFVSSSA9IG51bGw7Ci0gICAgfSAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpCi0gIHsKLSAgICBFbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIH0KLSAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBpZihkb2N1bWVudEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gIAkgIC8vIEhhbmRsZSBXU0RMIGltcG9ydHMuCi0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fREVGSU5JVElPTlMsIGRvY3VtZW50RWxlbWVudCkpCi0gICAgICB7Ci0gICAgICAgIGlmKGlzWE1MVmFsaWQodGhpcy5jbGFzc3BhdGhVUkkpKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgd3NkbERvY3VtZW50ID0gbmV3IFdTRExEb2N1bWVudCh0aGlzLmxvY2F0aW9uLCBkb2N1bWVudEVsZW1lbnQsIHRoaXMuZGVwdGgsIHRoaXMubWVzc2FnZWdlbmVyYXRvciwgdGhpcy52YWxpbmZvKTsKLSAgICAgICAgICAgIGNyZWF0ZVdTRExJbXBvcnQod3NkbERvY3VtZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbGluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9VTkFCTEVfVE9fSU1QT1JUX0JBRF9MT0NBVElPTiIsICInIiArIGltcG9ydERlZi5nZXRMb2NhdGlvblVSSSgpICsgIiciKSwgaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBIYW5kbGUgc2NoZW1hIGltcG9ydHMuCi0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9YU0RfMjAwMSwgZG9jdW1lbnRFbGVtZW50KSkKLSAgICAgIHsKLSAgICAgICAgY3JlYXRlWFNESW1wb3J0KCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1hNTFZhbGlkKFN0cmluZyB1cmkpCi0gIHsKLSAgICBJWE1MVmFsaWRhdG9yIHhtbFZhbGlkYXRvciA9IEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0WE1MVmFsaWRhdG9yKCk7Ci0gICAgeG1sVmFsaWRhdG9yLnNldEZpbGUodXJpKTsKLSAgICB4bWxWYWxpZGF0b3Iuc2V0VVJJUmVzb2x2ZXIodmFsaW5mby5nZXRVUklSZXNvbHZlcigpKTsKLSAgICAvL3htbFZhbGlkYXRvci5zZXRWYWxpZGF0aW9uSW5mbyh2YWxJbmZvKTsKLSAgICBpZih4bWxWYWxpZGF0b3IgaW5zdGFuY2VvZiBEZWZhdWx0WE1MVmFsaWRhdG9yKQotICAgIHsKLSAgICAJWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wgPSB2YWxpbmZvLmdldFhNTENhY2hlKCk7Ci0gICAgICAgIGlmKGdyYW1tYXJQb29sICE9IG51bGwpCi0gICAgICAgICAgKChEZWZhdWx0WE1MVmFsaWRhdG9yKXhtbFZhbGlkYXRvcikuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wpOwotICAgIH0KLSAgICB4bWxWYWxpZGF0b3IucnVuKCk7Ci0gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHhtbCBjb25mb3JtYW5jZSBwcm9ibGVtcyBnbyBvbiB0byBjaGVjayB0aGUgd3NkbCBzdHVmZgotICAgIGlmICh4bWxWYWxpZGF0b3IuaGFzRXJyb3JzKCkpCi0gICAgewotICAgICAgLy8gdGVtcCBoYW5kbGluZyBvZiBYTUwgZXJyb3JzIHVudGlsIHZhbGlkYXRvciBpcyB1cGRhdGVkLgotICAgICAgTGlzdCBlcnJvcnMgPSB4bWxWYWxpZGF0b3IuZ2V0RXJyb3JzKCk7Ci0gICAgICBJdGVyYXRvciBlcnJvcnNJdGVyID0gZXJyb3JzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXJyb3JzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElWYWxpZGF0aW9uTWVzc2FnZSB2YWxNZXMgPSAoSVZhbGlkYXRpb25NZXNzYWdlKWVycm9yc0l0ZXIubmV4dCgpOwotICAgICAgICB2YWxpbmZvLmFkZEVycm9yKHZhbE1lcy5nZXRNZXNzYWdlKCksIHZhbE1lcy5nZXRMaW5lKCksIHZhbE1lcy5nZXRDb2x1bW4oKSwgdmFsTWVzLmdldFVSSSgpKTsKLSAgICAgIH0KLSAgICAgIGltcG9ydEludmFsaWQgPSB0cnVlOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgaW1wb3J0aW5nIFdTRExEb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGltcG9ydGluZyBXU0RMRG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50IGdldEltcG9ydGluZ0RvY3VtZW50KCkKLSAgewotICAgIHJldHVybiBpbXBvcnRpbmdXU0RMRG9jOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBXU0RMIGRvY3VtZW50IHRoaXMgaW1wb3J0IHJlcHJlc2VudHMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBXU0RMIGRvY3VtZW50IHRoaXMgaW1wb3J0IHJlcHJlc2VudHMuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50IGdldFdTRExEb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gd3NkbERvY3VtZW50OwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBuYW1lc3BhY2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuYW1lc3BhY2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBsb2NhdGlvbi4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbG9jYXRpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbnRleHQgVVJJLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY29udGV4dCBVUkkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHRVUkkoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHRVUkk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGRlcHRoIGluIHRoZSBXU0RMIHRyZWUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBkZXB0aCBpbiB0aGUgV1NETCB0cmVlLgotICAgKi8KLSAgcHVibGljIGludCBnZXREZXB0aCgpCi0gIHsKLSAgICByZXR1cm4gZGVwdGg7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbnRhaW5pbmcgZGVmaW50aW9ucyBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgY29udGFpbmluZyBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0SW1wb3J0aW5nRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0aW5nRGVmOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBlbGVtZW50IGZvciB0aGlzIGltcG9ydC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVsZW1lbnQgZm9yIHRoaXMgaW1wb3J0LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgaWYoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0KLSAgICAKLSAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSBsb2NhdGlvbjsKLSAgICAvL0ltcG9ydCBpbXBvcnREZWYgPSBpbXBvcnRpbmdEZWYuY3JlYXRlSW1wb3J0KCk7Ci0gICAgCi0gICAgLy8gIEFsbG93IGxvY2F0aW5nIFdTREwgZG9jdW1lbnRzIHVzaW5nIGFueSByZWdpc3RlcmVkIFVSSSByZXNvbHZlci4KLSAgICAvL1N0cmluZyBjbGFzc3BhdGhVUkkgPSBVUklSZXNvbHZlci5nZXRJbnN0YW5jZSgpLnJlc29sdmUoY29udGV4dFVSSSwgbmFtZXNwYWNlVVJJLCBsb2NhdGlvblVSSSk7Ci0vLyAgICBpZiAoIWNsYXNzcGF0aFVSSS5lcXVhbHMobG9jYXRpb25VUkkpKQotLy8gICAgewotLy8gICAgICBsb2NhdGlvblVSSSA9IGNsYXNzcGF0aFVSSTsKLS8vICAgICAgY29udGV4dFVSSSA9IG51bGw7Ci0vLyAgICB9Ci0gICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgaWYgKGxvY2F0aW9uVVJJICE9IG51bGwpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIC8vU3RyaW5nIGNvbnRleHRVUkkgPSBkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgICAgICAgLy9EZWZpbml0aW9uIGltcG9ydGVkRGVmID0gbnVsbDsKLSAgICAgICAgICAKLSAgICAgICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG51bGw7Ci0gICAgICAgICAgVVJMIHVybCA9IG51bGw7Ci0KLSAgICAgICAgICAKLSAgICAgICAgICAgIFVSTCBjb250ZXh0VVJMID0gKGNvbnRleHRVUkkgIT0gbnVsbCkgPyBTdHJpbmdVdGlscy5nZXRVUkwobnVsbCwgY29udGV4dFVSSSkgOiBudWxsOwotCi0gICAgICAgICAgICB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwoY29udGV4dFVSTCwgbG9jYXRpb25VUkkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBIYW5kbGUgZmlsZTovLyB1cmxzLiBUaGUgY29ycmVjdCBmb3JtYXQgc2hvdWxkIGJlIGZpbGU6Ly8vIG9yIGZpbGU6Ly4KLSAgICAgICAgICAgIFN0cmluZyB1cmxBdXRob3JpdHkgPSB1cmwuZ2V0QXV0aG9yaXR5KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTsKLSAgICAgICAgICAgIGlmKHVybEF1dGhvcml0eSAhPW51bGwgJiYgdXJsUHJvdG9jb2wuZXF1YWxzSWdub3JlQ2FzZSgiZmlsZSIpICYmICF1cmxBdXRob3JpdHkuZXF1YWxzKCIiKSkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHVybCA9IG5ldyBVUkwodXJsUHJvdG9jb2wsIiIsIi8iICsgdXJsQXV0aG9yaXR5ICsgdXJsLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1cmwudG9TdHJpbmcoKTsKLQkJCS8vIFRlc3QgZm9yIGNhc2Ugc2Vuc2l0aXZpdHkgb24gbG9jYWwgZmlsZXMuCi0JCQlpZih1cmxTdHJpbmcuc3RhcnRzV2l0aCgiZmlsZToiKSkKLQkJCXsKLQkJCSAgRmlsZSB0ZXN0ZmlsZSA9IG5ldyBGaWxlKHVybC5nZXRGaWxlKCkpOwotCQkJICBTdHJpbmcgdGVzdGZpbGVTdHJpbmcgPSB0ZXN0ZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJCSAgU3RyaW5nIGNhbm9uaWNhbGZpbGVTdHJpbmcgPSB0ZXN0ZmlsZS5nZXRDYW5vbmljYWxQYXRoKCk7Ci0KLSAgICAgICAgICAgICAgaWYgKCF0ZXN0ZmlsZVN0cmluZy5lcXVhbHMoY2Fub25pY2FsZmlsZVN0cmluZykpCi0gICAgICAgICAgICAgIHsKLQkJCQlpZiAoIVN0cmluZy52YWx1ZU9mKHRlc3RmaWxlU3RyaW5nLmNoYXJBdCgwKSkuZXF1YWxzSWdub3JlQ2FzZQotCQkJCSAgICAoU3RyaW5nLnZhbHVlT2YoY2Fub25pY2FsZmlsZVN0cmluZy5jaGFyQXQoMCkpKQotCQkJCSAgICB8fCAhdGVzdGZpbGVTdHJpbmcuc3Vic3RyaW5nKDEsdGVzdGZpbGVTdHJpbmcubGVuZ3RoKCkpLmVxdWFscwotCQkJCQkoY2Fub25pY2FsZmlsZVN0cmluZy5zdWJzdHJpbmcoMSxjYW5vbmljYWxmaWxlU3RyaW5nLmxlbmd0aCgpKSkpCi0JCQkJewotICAgICAgICAgICAgICAgICAgdXJsU3RyaW5nID0gIiI7Ci0gICAgICAgICAgICAgICAgICB1cmwgPSBudWxsOwotCQkJCX0KLSAgICAgICAgICAgICAgfQotCQkJfQotCQkJaWYodXJsICE9IG51bGwpCi0JCQl7Ci0JCQkgIHRyeQotCQkJICB7Ci0gICAgICAgICAgICAgICAgcmVhZGVyID0gU3RyaW5nVXRpbHMuZ2V0Q29udGVudEFzUmVhZGVyKHVybCk7Ci0JCQkgIH0KLQkJCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJCSAgewotCQkJICAgIC8vIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4gVGhlIGVycm9yIHdpbGwgYmUgaGFuZGxlZCBiZWxvdy4KLQkJCSAgfQotCQkJfQotICAgICAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShyZWFkZXIpOwotICAgICAgICAgICAgICBpZihjbGFzc3BhdGhVUkkgIT0gbnVsbCAmJiAhY2xhc3NwYXRoVVJJLmVxdWFscyhsb2NhdGlvbikpCi0gIAkJCSAgewotICAJCQkgICAgaW5wdXRTb3VyY2Uuc2V0Qnl0ZVN0cmVhbShuZXcgVVJMKGNsYXNzcGF0aFVSSSkub3BlblN0cmVhbSgpKTsKLSAgCQkJICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dFNvdXJjZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFjdHVhbCBsb2NhdGlvbiBmcm9tIHRoZSBlbGVtZW50LgotICAgICAgICAgICAgICBTdHJpbmcgYWN0dWFsTG9jYXRpb24gPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCwgQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04pOwotICAgICAgICAgICAgICBpZihhY3R1YWxMb2NhdGlvbiA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIAlhY3R1YWxMb2NhdGlvbiA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50LCAic2NoZW1hTG9jYXRpb24iKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZihhY3R1YWxMb2NhdGlvbiA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIAlhY3R1YWxMb2NhdGlvbiA9IG5hbWVzcGFjZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpbXBvcnRpbmdXU0RMRG9jLmFkZFJlYWRlcldhcm5pbmcoCi0gICAgICAgICAgICAgICAgICBpbXBvcnRpbmdEZWYsCi0gICAgICAgICAgICAgICAgICBpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50LAotICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9VTkFCTEVfVE9fSU1QT1JUX0JBRF9MT0NBVElPTiIsICInIiArIGFjdHVhbExvY2F0aW9uICsgIiciKSk7Ci0gICAgICAgICAgICAgIGltcG9ydEludmFsaWQgPSB0cnVlOwotICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIC8vIFRPRE86IG1vZGlmeSB0aGUgcmVhZGVyIGVycm9yIHRvIHNob3cgaW4gYWxsIHRoZSBjb3JyZWN0IGxvY2F0aW9ucy4KLSAgICAgICAgICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiwKLSAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGxvY2F0ZSBpbXBvcnRlZCBkb2N1bWVudCAiCi0gICAgICAgICAgICAgICAgICArICJhdCAnIgotICAgICAgICAgICAgICAgICAgKyBsb2NhdGlvblVSSQotICAgICAgICAgICAgICAgICAgKyAiJyIKLSAgICAgICAgICAgICAgICAgICsgKGNvbnRleHRVUkkgPT0gbnVsbCA/ICIuIiA6ICIsIHJlbGF0aXZlIHRvICciICsgY29udGV4dFVSSSArICInLiIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IG51bGw7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZG9jID0gV1NETFJlYWRlckltcGwuZ2V0RG9jdW1lbnQoaW5wdXRTb3VyY2UsIGxvY2F0aW9uVVJJKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gVGhlIEZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHJlYWQuIAotICAgICAgICAgICAgICAvLyBQZXJmb3JtIFhNTCB2YWxpZGF0aW9uLgotICAgICAgICAgICAgICBpc1hNTFZhbGlkKGxvY2F0aW9uVVJJKTsKLS8vICAgICAgICAgICAgICBpbXBvcnRpbmdXU0RMRG9jLmFkZFJlYWRlckVycm9yKAotLy8gICAgICAgICAgICAgICAgICBpbXBvcnRpbmdEZWYsCi0vLyAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQsCi0vLyAgICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfVU5BQkxFX1RPX0lNUE9SVF9JTlZBTElEIiwgIiciICsgbG9jYXRpb24gKyAiJyIpKTsKLSAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsZW1lbnQgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZighUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fREVGSU5JVElPTlMsIGVsZW1lbnQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpc1dTRExGaWxlSW1wb3J0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQgaGFzIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgaW1wb3J0IGVsZW1lbnQgc3RhdGVzLgotICAgICAgICAgICAgU3RyaW5nIGltcG9ydFRhcmdldE5TID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSk7Ci0gICAgICAgICAgICBpZighaW1wb3J0VGFyZ2V0TlMuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGltcG9ydGluZ1dTRExEb2MuYWRkUmVhZGVyV2FybmluZygKLSAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RlZiwKLSAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygiX1dBUk5fV1JPTkdfTlNfT05fSU1QT1JUIiwgIiciICsgbmFtZXNwYWNlICsgIiciLCAiJyIgKyBpbXBvcnRUYXJnZXROUyArICInIikpOwotICAgICAgICAgICAgICBlbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgaW1wb3J0SW52YWxpZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZihyZWFkZXIgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAge30KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbXBvcnQgZWxlbWVudCBmb3IgYSBXU0RMIGltcG9ydCBvZiBhIFdTREwgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IFRoZSBkb2N1bWVudCBvZiB0aGUgaW1wb3J0LgotICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIGltcG9ydCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIEltcG9ydCBjcmVhdGVXU0RMSW1wb3J0KFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gIHsKLSAgICBpZihpbXBvcnREZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW1wb3J0RGVmOwotICAgIH0KLSAgICBpbXBvcnREZWYgPSBnZXROZXdJbXBvcnQoKTsKLSAgCi0gICAgaWYgKGltcG9ydERlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIGltcG9ydERlZi5zZXREZWZpbml0aW9uKHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9uKCkpOwotICAgICAgc2NoZW1hcy5hZGRBbGwod3NkbERvY3VtZW50LmdldFNjaGVtYXMoKSk7Ci0gICAgICBpbXBvcnRpbmdXU0RMRG9jLmFkZFNjaGVtYXMoc2NoZW1hcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltcG9ydERlZjsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbXBvcnQgZWxlbWVudCBmb3IgYSBXU0RMIGltcG9ydCBvZiBhIHNjaGVtYSBpbXBvcnQgb2YgYSBzY2hlbWEgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIGltcG9ydCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIEltcG9ydCBjcmVhdGVYU0RJbXBvcnQoKQotICB7Ci0gICAgaWYoaW1wb3J0RGVmICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGltcG9ydERlZjsKLSAgICB9Ci0gICAgaW1wb3J0RGVmID0gZ2V0TmV3SW1wb3J0KCk7Ci0gICAgWFNEVmFsaWRhdG9yIHhzZHZhbGlkYXRvciA9IG5ldyBYU0RWYWxpZGF0b3IoKTsKLQotICAgIHhzZHZhbGlkYXRvci52YWxpZGF0ZShsb2NhdGlvbiwgWE1MQ2F0YWxvZ1Jlc29sdmVyLmdldEluc3RhbmNlKCksIHZhbGluZm8uZ2V0U2NoZW1hQ2FjaGUoKSk7Ci0gICAgaWYgKHhzZHZhbGlkYXRvci5pc1ZhbGlkKCkpCi0gICAgewotICAgICAgWFNNb2RlbCBzY2hlbWEgPSB4c2R2YWxpZGF0b3IuZ2V0WFNNb2RlbCgpOwotICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgewotICAgICAgICBzY2hlbWFzLmFkZChzY2hlbWEpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAvLyBhZGRSZWFkZXJXYXJuaW5nKAotLy8gICAgICAgIGRlZiwKLS8vICAgICAgICBpbXBvcnREZWYsCi0vLyAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9VTkFCTEVfVE9fSU1QT1JUX0lOVkFMSUQiLCAiJyIgKyBpbXBvcnREZWYuZ2V0TG9jYXRpb25VUkkoKSArICInIikpOwotICAgICAgSXRlcmF0b3IgZXJyb3JzID0geHNkdmFsaWRhdG9yLmdldEVycm9ycygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXJyb3JzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXJyb3JNZXNzYWdlIGVyciA9IChFcnJvck1lc3NhZ2UpIGVycm9ycy5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyB1cmkgPSBlcnIuZ2V0VVJJKCk7Ci0gICAgICAgIGludCBsaW5lID0gZXJyLmdldEVycm9yTGluZSgpOwotICAgICAgICBTdHJpbmcgZXJybWVzcyA9IGVyci5nZXRFcnJvck1lc3NhZ2UoKTsKLSAgICAgICAgdmFsaW5mby5hZGRFcnJvcihlcnJtZXNzLCBsaW5lLCBlcnIuZ2V0RXJyb3JDb2x1bW4oKSwgdXJpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaW1wb3J0aW5nV1NETERvYy5hZGRTY2hlbWFzKHNjaGVtYXMpOwotICAgIHJldHVybiBpbXBvcnREZWY7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGltcG9ydCBlbGVtZW50IGlmIGl0IGhhcyBiZWVuIGNyZWF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBpbXBvcnQgZWxlbWVudCBpZiBpdCBoYXMgYmVlbiBjcmVhdGVkIG9yIG51bGwuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGdldEltcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0RGVmOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgbmV3IGltcG9ydCBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiBBIG5ldyBpbXBvcnQgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgSW1wb3J0IGdldE5ld0ltcG9ydCgpCi0gIHsKLSAgICBpZihpbXBvcnRJbnZhbGlkKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBJbXBvcnQgaW1wb3J0RGVmID0gaW1wb3J0aW5nRGVmLmNyZWF0ZUltcG9ydCgpOyAKLSAgICAKLSAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgewotICAgICAgaW1wb3J0RGVmLnNldE5hbWVzcGFjZVVSSShuYW1lc3BhY2UpOwotICAgIH0KLQotICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIGltcG9ydERlZi5zZXRMb2NhdGlvblVSSShsb2NhdGlvbik7Ci0gICAgfQotICAgIAotICAgIGlmKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotCi0gICAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgICB7Ci0gICAgICAgICAgaW1wb3J0RGVmLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW1wb3J0RGVmOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBzY2hlbWFzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBpbXBvcnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBzY2hlbWFzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBpbXBvcnQuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTY2hlbWFzKCkKLSAgewotICAgIHJldHVybiBzY2hlbWFzOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgaW1wb3J0IGltcG9ydHMgYSBXU0RMIGRvY3VtZW50LCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBpbXBvcnQgaW1wb3J0cyBhIFdTREwgZG9jdW1lbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzV1NETEZpbGVJbXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIGlzV1NETEZpbGVJbXBvcnQ7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCi0gIHsKLSAgICBpZihvYmouZ2V0Q2xhc3MoKSA9PSBJbXBvcnRIb2xkZXIuY2xhc3MpCi0gICAgewotICAgICAgSW1wb3J0SG9sZGVyIG90aGVySW1wb3J0ID0gKEltcG9ydEhvbGRlcilvYmo7Ci0gICAgICAKLSAgICAgIGlmKGdldE5hbWVzcGFjZSgpLmVxdWFscyhvdGhlckltcG9ydC5nZXROYW1lc3BhY2UoKSkgJiYgZ2V0TG9jYXRpb24oKS5lcXVhbHMob3RoZXJJbXBvcnQuZ2V0TG9jYXRpb24oKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZSNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyBpbnQgY29tcGFyZVRvKE9iamVjdCBvYmopCi0gIHsKLSAgICBpZihvYmogPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgSW1wb3J0SG9sZGVyIG90aGVySW1wb3J0ID0gKEltcG9ydEhvbGRlcilvYmo7Ci0gICAgICAKLSAgICByZXR1cm4gKGdldE5hbWVzcGFjZSgpK2dldExvY2F0aW9uKCkpLmNvbXBhcmVUbygob3RoZXJJbXBvcnQuZ2V0TmFtZXNwYWNlKCkrb3RoZXJJbXBvcnQuZ2V0TG9jYXRpb24oKSkpOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBtZXNzYWdlZ2VuZXJhdG9yIGZvciB0aGUgaW1wb3J0IGhvbGRlci4KLSAgICogCi0gICAqIEBwYXJhbSBtZyBUaGUgbWVzc2FnZSBnZW5lcmF0b3IgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZUdlbmVyYXRvcihNZXNzYWdlR2VuZXJhdG9yIG1nKQotICB7Ci0gICAgbWVzc2FnZWdlbmVyYXRvciA9IG1nOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgdGhlIGltcG9ydCBpcyBpbnZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGltcG9ydCBpcyBpbnZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ltcG9ydEludmFsaWQoKQotICB7Ci0gICAgcmV0dXJuIGltcG9ydEludmFsaWQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvTG9jYXRpb25Ib2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvTG9jYXRpb25Ib2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZlY2NjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0xvY2F0aW9uSG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLS8qKgotICogSG9sZHMgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciBhbiBlbGVtZW50IGluIGEgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2NhdGlvbkhvbGRlcgotewotICBwcml2YXRlIGludCBsaW5lOwotICBwcml2YXRlIGludCBjb2x1bW47Ci0gIHByaXZhdGUgU3RyaW5nIHVyaTsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIG51bWJlci4KLSAgICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIG51bWJlci4KLSAgICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBMb2NhdGlvbkhvbGRlcihpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSkKLSAgewotICAgIHRoaXMubGluZSA9IGxpbmU7Ci0gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47Ci0gICAgdGhpcy51cmkgPSB1cmk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGxpbmUgbnVtYmVyLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGluZSBudW1iZXIuCi0gICAqLwotICBwdWJsaWMgaW50IGdldExpbmUoKQotICB7Ci0gICAgcmV0dXJuIGxpbmU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbHVtbiBudW1iZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBjb2x1bW4gbnVtYmVyLgotICAgKi8KLSAgcHVibGljIGludCBnZXRDb2x1bW4oKQotICB7Ci0gICAgcmV0dXJuIGNvbHVtbjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgZmlsZSBVUkkuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBmaWxlIFVSSS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkKLSAgewotICAgIHJldHVybiB1cmk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvUmVhZGVyRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvUmVhZGVyRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmZTc4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1JlYWRlckVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLS8qKgotICogSG9sZHMgYW4gZXJyb3IgY3JlYXRlZCB3aGVuIHJlYWRpbmcgYSBXU0RMIGRvY3VtZW50LgotICovCi1wdWJsaWMgY2xhc3MgUmVhZGVyRXJyb3IKLXsKLSAgcHJvdGVjdGVkIE9iamVjdCBwYXJlbnRPYmplY3Q7IC8vIHRoZSBvYmplY3Qgb2YgdGhlIHBhcmVudCBvZiB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yCi0gIHByb3RlY3RlZCBPYmplY3Qgb2JqZWN0OyAvLyB0aGUgb2JqZWN0IHRoZSBlcnJvciBpcyBhc3NvY2lhdGVkIHdpdGgKLSAgcHJvdGVjdGVkIFN0cmluZyBlcnJvcjsgLy8gdGhlIGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0IAotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRPYmplY3QgdGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvcgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IKLSAgICogQHBhcmFtIGVycm9yIHRoZSBlcnJvcgotICAgKi8KLSAgcHVibGljIFJlYWRlckVycm9yKE9iamVjdCBwYXJlbnRPYmplY3QsIE9iamVjdCBvYmplY3QsIFN0cmluZyBlcnJvcikKLSAgewotICAgIHRoaXMucGFyZW50T2JqZWN0ID0gcGFyZW50T2JqZWN0OwotICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0OwotICAgIHRoaXMuZXJyb3IgPSBlcnJvcjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0UGFyZW50T2JqZWN0KCkKLSAgewotICAgIHJldHVybiBwYXJlbnRPYmplY3Q7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldE9iamVjdCgpCi0gIHsKLSAgICByZXR1cm4gb2JqZWN0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVycm9yKCkKLSAgewotICAgIHJldHVybiBlcnJvcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9WYWxpZGF0b3JSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9WYWxpZGF0b3JSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGM2Y2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvVmFsaWRhdG9yUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0KLS8qKgotICogQSByZWdpc3RyeSB0byBob2xkIGFsbCB0aGUgV1NETCAxLjEgdmFsaWRhdG9ycy4KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvclJlZ2lzdHJ5Ci17Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBWYWxpZGF0b3JSZWdpc3RyeSB2ZXJJbnN0YW5jZTsKLQotICBwcm90ZWN0ZWQgTWFwIHZhbGlkYXRvclJlZyA9IG5ldyBIYXNodGFibGUoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdG9yUmVnaXN0cnkoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhpcyByZWdpc3RyeS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGluc3RhbmNlIG9mIHRoaXMgcmVnaXN0cnkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFZhbGlkYXRvclJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmICh2ZXJJbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHZlckluc3RhbmNlID0gbmV3IFZhbGlkYXRvclJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIHJldHVybiB2ZXJJbnN0YW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWdpc3RlciB0aGlzIHZhbGlkYXRvciBkZWxlZ2F0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdGhlIHZhbGlkYXRvciBpcyBhc3NvY2lhdGVkIHdpdGguCi0gICAqIEBwYXJhbSB2YWxEZWxlZ2F0ZSBUaGUgdmFsaWRhdG9yIGRlbGVnYXRlIHRvIHJlZ2lzdGVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJWYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSwgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgdmFsRGVsZWdhdGUpCi0gIHsKLSAgICAvLyBhbGxvdyB0aGUgbnVsbCBuYW1lc3BhY2UgYnV0IG1ha2UgaXQgdGhlIGVtcHR5IHN0cmluZwotICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIHZhbGlkYXRvciB0byB0aGUgaGFzaHRhYmxlCi0gICAgaWYoIXZhbGlkYXRvclJlZy5jb250YWluc0tleShuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIHZhbGlkYXRvclJlZy5wdXQobmFtZXNwYWNlLCBuZXcgV1NETDExVmFsaWRhdG9yRGVsZWdhdGVDb250YWluZXIoKSk7Ci0gICAgfQotICAgICgoV1NETDExVmFsaWRhdG9yRGVsZWdhdGVDb250YWluZXIpdmFsaWRhdG9yUmVnLmdldChuYW1lc3BhY2UpKS5hZGRWYWxpZGF0b3IodmFsRGVsZWdhdGUpOwotICAgIC8vdmFsaWRhdG9yUmVnLnB1dChuYW1lc3BhY2UsIHZhbERlbGVnYXRlKTsKLSAgfQotCi0gIC8qKgotICAgKiBBc2sgZm9yIHRoZSB2YWxpZGF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmFtZXNwYWNlLiBJZiBub25lIGlzIGZvdW5kCi0gICAqIHJldHVybiBudWxsLgotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIG9mIHRoZSB2YWxpZGF0b3IuCi0gICAqIEByZXR1cm4gVGhlIFdTREwgMS4xIHZhbGlkYXRvciBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBJV1NETDExVmFsaWRhdG9yIHF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIC8vIGlmIHRoZSBuYW1lc3BhY2UgaXMgbnVsbCBhbGxvdyBpdCBhbmQgdHJlYXQgaXQgYXMgdGhlIGVtcHR5IHN0cmluZwotICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICB9Ci0gICAgcmV0dXJuIChJV1NETDExVmFsaWRhdG9yKXZhbGlkYXRvclJlZy5nZXQobmFtZXNwYWNlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdGhhdCB0ZWxscyB3aGV0aGVyIGEgdmFsaWRhdG9yIGZvciBhIGdpdmVuIG5hbWVzcGFjZSBpcyByZWdpc3RlcmVkLgotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHRvIGNoZWNrLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlcmUgaXMgYSB2YWxpZGF0b3IgcmVnaXN0ZXJlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzUmVnaXN0ZXJlZFZhbGlkYXRvcihTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgaWYgKHF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkobmFtZXNwYWNlKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBjbGFzcyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZUNvbnRhaW5lciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLSAgewotCXByaXZhdGUgTGlzdCB2YWxpZGF0b3JEZWxlZ2F0ZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCi0JcHVibGljIHZvaWQgYWRkVmFsaWRhdG9yKFdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlKQotCXsKLQkgIHZhbGlkYXRvckRlbGVnYXRlcy5hZGQoZGVsZWdhdGUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFJlc291cmNlQnVuZGxlKFJlc291cmNlQnVuZGxlIHJiKSB7Ci0JCS8vTm90aGluZyB0byBkbwotCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZShPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykgewotCQlJdGVyYXRvciB2YWxEZWxJdGVyID0gdmFsaWRhdG9yRGVsZWdhdGVzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlKHZhbERlbEl0ZXIuaGFzTmV4dCgpKQotCQl7Ci0JCSAgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUgPSAoV1NETDExVmFsaWRhdG9yRGVsZWdhdGUpdmFsRGVsSXRlci5uZXh0KCk7Ci0JCSAgZGVsZWdhdGUuZ2V0VmFsaWRhdG9yKCkudmFsaWRhdGUoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0JCX0KLQkJCi0JfQotCSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExQmFzaWNWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExQmFzaWNWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUzY2UxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMUJhc2ljVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2ODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuU2NoZW1hQXR0cmlidXRlVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLlhTRFZhbGlkYXRvcjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0vKioKLSAqIFZhbGlkYXRlIHRoZSBlbGVtZW50cyBkZWZpbmVkIGluIGEgV1NETCAxLjEgRG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMMTFCYXNpY1ZhbGlkYXRvciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFZBTElEQVRPUl9SRVNPVVJDRV9CVU5ETEVfTkFNRSA9ICJ2YWxpZGF0ZXdzZGwiOwotCQotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIE5BTUVTUEFDRVNfRkVBVFVSRV9JRCA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVkFMSURBVElPTl9GRUFUVVJFX0lEID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFX0lEID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0NIRU1BX0ZVTExfQ0hFQ0tJTkdfRkVBVFVSRV9JRCA9Ci0gICAgImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYS1mdWxsLWNoZWNraW5nIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBDT05USU5VRV9BRlRFUl9GQVRBTF9FUlJPUl9JRCA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvY29udGludWUtYWZ0ZXItZmF0YWwtZXJyb3IiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNPQVBfRU5DT0RJTkdfVVJJID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsKLSAgCi0gIC8vIEVycm9yIGFuZCBXYXJuaW5nIEtleXMKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1BPUlRfTkFNRV9OT1RfVU5JUVVFID0gIl9QT1JUX05BTUVfTk9UX1VOSVFVRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9OT19CSU5ESU5HX0ZPUl9QT1JUID0gIl9OT19CSU5ESU5HX0ZPUl9QT1JUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX05PX0FERFJFU1NfUE9SVCA9ICJfTk9fQUREUkVTU19QT1JUIjsKLS8vICBwcml2YXRlIGZpbmFsIFN0cmluZyBfTU9SRV9USEVOX09ORV9BRERSRVNTX1BPUlQgPSAiX01PUkVfVEhFTl9PTkVfQUREUkVTU19QT1JUIjsgLy9UT0RPIHNob3VsZCBiZSBfTU9SRV9USEFOX09ORV9BRERSRVNTX1BPUlQsIG5vdCBUSEVOCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9QT1JUVFlQRV9VTkRFRklORURfRk9SX0JJTkRJTkcgPSAiX1BPUlRUWVBFX1VOREVGSU5FRF9GT1JfQklORElORyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9PUEVSQVRJT05fVU5ERUZJTkVEX0ZPUl9QT1JUVFlQRSA9ICJfT1BFUkFUSU9OX1VOREVGSU5FRF9GT1JfUE9SVFRZUEUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfT1BFUkFUSU9OX05PX0lOUFVUX09SX09VVFBVVCA9ICJfT1BFUkFUSU9OX05PX0lOUFVUX09SX09VVFBVVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9JTlBVVF9OQU1FX05PVF9VTklRVUUgPSAiX0lOUFVUX05BTUVfTk9UX1VOSVFVRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfSU5QVVQgPSAiX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9PVVRQVVRfTkFNRV9OT1RfVU5JUVVFID0gIl9PVVRQVVRfTkFNRV9OT1RfVU5JUVVFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9PVVRQVVQgPSAiX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9PVVRQVVQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfTUVTU0FHRV9VTkRFRklORURfRk9SX0ZBVUxUID0gIl9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUEFSVF9OT19FTEVNRU5UX09SX1RZUEUgPSAiX1BBUlRfTk9fRUxFTUVOVF9PUl9UWVBFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1BBUlRfQk9USF9FTEVNRU5UX0FORF9UWVBFID0gIl9QQVJUX0JPVEhfRUxFTUVOVF9BTkRfVFlQRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9QQVJUX0lOVkFMSURfRUxFTUVOVCA9ICJfUEFSVF9JTlZBTElEX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUEFSVF9JTlZBTElEX1RZUEUgPSAiX1BBUlRfSU5WQUxJRF9UWVBFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9QQVJUID0gIl9XQVJOX1NPQVBFTkNfSU1QT1JURURfUEFSVCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBpbnQgRUxFTUVOVCA9IDA7Ci0gIHByaXZhdGUgZmluYWwgaW50IFRZUEUgPSAxOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUkVRVUVTVCA9ICJSZXF1ZXN0IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUkVTUE9OU0UgPSAiUmVzcG9uc2UiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBRVU9URSA9ICInIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU1QVFlfU1RSSU5HID0gIiI7Ci0gIAotCi0gIC8vcHJvdGVjdGVkIFdTREwxMVZhbGlkYXRvckNvbnRyb2xsZXIgdmFsaWRhdG9yY29udHJvbGxlcjsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLQotICBwdWJsaWMgV1NETDExQmFzaWNWYWxpZGF0b3IoKQotICB7Ci0JUmVzb3VyY2VCdW5kbGUgcmIgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoVkFMSURBVE9SX1JFU09VUkNFX0JVTkRMRV9OQU1FLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLSAgICBtZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmIpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgLy90aGlzLnZhbGlkYXRvcmNvbnRyb2xsZXIgPSB2YWxpZGF0b3Jjb250cm9sbGVyOwotICAgIC8vc2V0RGVmYXVsdFJlc291cmNlQnVuZGxlSWZOZWVkZWQodmFsaWRhdG9yY29udHJvbGxlcik7Ci0gICAgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWVsZW1lbnQ7Ci0gICAgdmFsaWRhdGVUeXBlcyh3c2RsRGVmaW5pdGlvbiwgdmFsSW5mbyk7Ci0gICAgdmFsaWRhdGVTZXJ2aWNlcyh3c2RsRGVmaW5pdGlvbiwgdmFsSW5mbyk7Ci0gICAgdmFsaWRhdGVCaW5kaW5ncyh3c2RsRGVmaW5pdGlvbiwgdmFsSW5mbyk7Ci0gICAgdmFsaWRhdGVQb3J0VHlwZXMod3NkbERlZmluaXRpb24sIHZhbEluZm8pOwotICAgIHZhbGlkYXRlTWVzc2FnZXMod3NkbERlZmluaXRpb24sIHZhbEluZm8pOwotCi0gIH0KLQotICAvKioKLSAgICogVGFrZXMgYSBsaXN0IG9mIEV4dGVuc2liaWxpdHlFbGVtZW50cyBhbmQgY2hlY2tzIGlmIHRoZXJlJ3MgYSB2YWxpZGF0b3IgCi0gICAqIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGVsZW1lbnQgYW5kIGlmIHNvIGNhbGxzIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50cyBUaGUgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBlbGVtZW50cy4KLSAgICogQHBhcmFtIGV4dGVuc2liaWxpdHlFbGVtZW50cyBUaGUgbGlzdCBvZiBlbGVtZW50cyB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIHZhbGlkYXRvcmNvbnRyb2xsZXIgVGhlIHZhbGlkYXRvciBjb250cm9sbGVyLgotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIGRlZm5pbnRpb25zIGVsZW1lbnQgZm9yIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdCgKLSAgICBMaXN0IHBhcmVudHMsCi0gICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMsCi0gICAgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBWYWxpZGF0b3JSZWdpc3RyeSB2ZXIgPSBWYWxpZGF0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgIEl0ZXJhdG9yIGV4dEVsZW1zID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGV4dEVsZW1zLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1zLm5leHQoKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBJV1NETDExVmFsaWRhdG9yIHZhbCA9IHZlci5xdWVyeVZhbGlkYXRvclJlZ2lzdHJ5KG5hbWVzcGFjZSk7Ci0gICAgICBpZiAodmFsICE9IG51bGwpCi0gICAgICAgewotICAgICAgICB2YWwudmFsaWRhdGUoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0vLyAgICAgIGVsc2UKLS8vICAgICAgIHsKLS8vICAgICAgICB2YWxJbmZvLmFkZE5hbWVzcGFjZVdpdGhOb1ZhbGlkYXRvcihuYW1lc3BhY2UpOwotLy8gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGF0IHRoZSBUeXBlcyBlbGVtZW50IGlzIGNvcnJlY3QuIAotICAgKiAKLSAgICogQHBhcmFtIHdzZGxEZWZpbml0aW9uIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50IGZyb20gdGhlIGN1cnJlbnQgZG9jdW1lbnQuCi0gICAqLwotCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlVHlwZXMoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBUeXBlcyB0eXBlcyA9IHdzZGxEZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0gICAgLy8gZW5zdXJlIHRoYXQgdHlwZXMgaXMgZGVmaW5lZAotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgcGFyZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHBhcmVudHMuYWRkKHdzZGxEZWZpbml0aW9uKTsKLSAgICAgIHBhcmVudHMuYWRkKDAsIHR5cGVzKTsKLSAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCB2YWxJbmZvKTsKLSAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgYWxsIG9mIHRoZSBkZWNsYXJlZCBzZXJ2aWNlcyBmb3IgdGhlIGRlZmluaXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlU2VydmljZXMoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBpZiAod3NkbERlZmluaXRpb24uZ2V0U2VydmljZXMoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE9iamVjdCBzZXJ2aWNlc1tdID0gd3NkbERlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS50b0FycmF5KCk7Ci0gICAgTGlzdCBwYXJlbnRzID0gbmV3IFZlY3RvcigpOwotICAgIHBhcmVudHMuYWRkKHdzZGxEZWZpbml0aW9uKTsKLSAgICBIYXNodGFibGUgYWxsUG9ydHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICAvL1RPRE86IGNoZWNrIHRoYXQgcG9ydHMgaW4gb3RoZXIgaW1wb3J0ZWQgZmlsZXMgZG9uJ3QgY29uZmxpY3Qgd2l0aCBwb3J0cyBpbiB0aGlzIG9uZQotICAgIC8vICAgIC8vIHJlZ2lzdGVyIGFsbCBvZiB0aGUgaW1wb3J0ZWQgcG9ydHMKLSAgICAvLyAgICBJdGVyYXRvciBpbXBvcnRzID0gd3NkbERlZmluaXRpb24uZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgLy8gICAgd2hpbGUoaW1wb3J0cy5oYXNOZXh0KCkpCi0gICAgLy8gICAgewotICAgIC8vICAgICAgSXRlcmF0b3IgaW1wc2VydmljZXMgPSAoKEltcG9ydClpbXBvcnRzLm5leHQoKSkuZ2V0RGVmaW5pdGlvbigpLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAvLyAgICAgIHdoaWxlKGltcHNlcnZpY2VzLmhhc05leHQoKSkKLSAgICAvLyAgICAgIHsKLSAgICAvLyAgICAgICAgSXRlcmF0b3IgaW1wcG9ydHMgPSAoKFNlcnZpY2UpaW1wc2VydmljZXMubmV4dCgpKS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgLy8gICAgICAgIHdoaWxlKGltcHBvcnRzLmhhc05leHQoKSkKLSAgICAvLyAgICAgICAgewotICAgIC8vICAgICAgICAgIFBvcnQgdGVtcFAgPSAoUG9ydClpbXBwb3J0cy5uZXh0KCk7Ci0gICAgLy8gICAgICAgICAgYWxsUG9ydHMucHV0KHRlbXBQLmdldE5hbWUoKSx0ZW1wUCk7CQotICAgIC8vICAgICAgICB9Ci0gICAgLy8gICAgICB9Ci0gICAgLy8gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU2VydmljZSBzID0gKFNlcnZpY2Upc2VydmljZXNbaV07Ci0gICAgICBwYXJlbnRzLmFkZCgwLCBzKTsKLSAgICAgIE9iamVjdCBwb3J0c1tdID0gcy5nZXRQb3J0cygpLnZhbHVlcygpLnRvQXJyYXkoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcG9ydHMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcCA9IChQb3J0KXBvcnRzW2pdOwotICAgICAgICBwYXJlbnRzLmFkZCgwLCBwKTsKLSAgICAgICAgLy8gYSBQb3J0IG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgV0RTTCBkb2N1bWVudAotICAgICAgICBpZiAoYWxsUG9ydHMuY29udGFpbnMocC5nZXROYW1lKCkpKQotICAgICAgICB7ICBTdHJpbmdbXSBhcmdzID0ge3AuZ2V0TmFtZSgpfTsKLSAgICAgICAgICAKLSAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9QT1JUX05BTUVfTk9UX1VOSVFVRSwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIF9QT1JUX05BTUVfTk9UX1VOSVFVRSwgYXJncyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYWxsUG9ydHMucHV0KHAuZ2V0TmFtZSgpLCBwKTsKLQotICAgICAgICAgIC8vIGdldCB0aGUgYmluZGluZyBmb3IgdGhpcyBwb3J0IGFuZCBzZWUgaWYgdGhlIFBvcnRUeXBlIGZvciB0aGUgYmluZGluZwotICAgICAgICAgIC8vIGlzIGRlZmluZWQKLSAgICAgICAgICBpZiAocC5nZXRCaW5kaW5nKCkgPT0gbnVsbCB8fCBwLmdldEJpbmRpbmcoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9IEVNUFRZX1NUUklORzsKLSAgICAgICAgICAgIGlmIChwLmdldEJpbmRpbmcoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBiaW5kaW5nTmFtZSA9IHAuZ2V0QmluZGluZygpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgYXJnc1tdID0ge3AuZ2V0TmFtZSgpfTsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9OT19CSU5ESU5HX0ZPUl9QT1JULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSwgUVVPVEUgKyBiaW5kaW5nTmFtZSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgcCwgX05PX0JJTkRJTkdfRk9SX1BPUlQsIGFyZ3MpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgdGhhdCB0aGUgb3V0cHV0IG9mIG9uZSBwb3J0IGlzbid0IHRoZSBpbnB1dCBvZiBhbm90aGVyIGFuZCB2aWNlIHZlcnNhCi0gICAgICAgICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHRoZSBwb3J0Ci0gICAgICAgICAgICAvLyB0aGVyZSBjYW4gb25seSBiZSBvbmUgYW5kIG11c3QgYmUgb25lIGV4dGVuc2liaWxpdHkgZWxlbWVudCBkZWZpbmVkIGZvciBhIHBvcnQKLSAgICAgICAgICAgIC8vIFRPRE86IFJldmlzaXQuIFRoZXJlIGlzIG5vIHN0YW5kYXJkIHdheSB0byBkZXRlcm1pbmUgd2hpY2ggZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICAgICAgICAgICAvLyBzcGVjaWZpZXMgdGhlIGFkZHJlc3MuIEV2ZW4gd2hlbiB0aGUgcG9ydCBoYXMgYXQgbGVhc3Qgb25lIGV4dGVuc2liaWxpdHkgZWxlbWVudCwKLSAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIHdheSB0byBlbnN1cmUgdGhhdCBpcyAidGhlIiBhZGRyZXNzIG9uZS4KLSAgICAgICAgICAgIExpc3QgZXh0ZWxlbXMgPSBwLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgaWYgKGV4dGVsZW1zLnNpemUoKSA8IDEpCi0gICAgICAgICAgICB7IFN0cmluZyBhcmdzW109IHtwLmdldE5hbWUoKX07Ci0gICAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX05PX0FERFJFU1NfUE9SVCwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgICAgcCwgX05PX0FERFJFU1NfUE9SVCwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0vLyBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3Mzg1NCAgICAgICAgICAgIAotLy8gVGhlIFdTLUkgYmFzaWMgcHJvZmlsZSBoYXMgcmVsYXhlZCB0aGUgbnVtYmVyIG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgYWxsb3dlZCBmb3IgcG9ydHMuCi0vLyBBIG51bWJlciBvZiBXUyBzcGVjaWZpY2F0aW9ucyBsaWtlIEpBWC1XUyBhbmQgV1MgUG9saWN5IGRlZmluZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBwb3J0cy4KLS8vIFRoaXMgY29kZSBpcyBjb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgaXMgdG9vIHJlc3RyaWN0aXZlIGFuZCBnZW5lcmF0ZXMgZXJyb3JzIHRoYXQgYXBwZWFyIGludmFsaWQuICAgICAgICAgICAgCi0vLyAgICAgICAgICAgIGVsc2UgaWYgKGV4dGVsZW1zLnNpemUoKSA+IDEpCi0vLyAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICBmb3IgKGludCBrID0gMTsgayA8IGV4dGVsZW1zLnNpemUoKTsgaysrKQotLy8gICAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSB7cC5nZXROYW1lKCl9OwotLy8gICAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLS8vICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX01PUkVfVEhFTl9PTkVfQUREUkVTU19QT1JULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0vLyAgICAgICAgICAgICAgICAgIGV4dGVsZW1zLmdldChrKSwgX01PUkVfVEhFTl9PTkVfQUREUkVTU19QT1JULCBhcmdzKTsKLS8vICAgICAgICAgICAgICB9Ci0vLyAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIHAuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHZhbEluZm8pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgICAgfQotICAgICAgLy8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgdGhlIHNlcnZpY2UKLSAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIHMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHZhbEluZm8pOwotICAgICAgcGFyZW50cy5yZW1vdmUoMCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB0aGF0IHRoZSBiaW5kaW5ncyByZWZlciB0byB2YWxpZCBQb3J0VHlwZXMgYW5kIGFsbCBvZiB0aGUgb3BlcmF0aW9ucwotICAvLyBpbiBhIGdpdmVuIGJpbmRpbmcgcmVmZXIgdG8gYSBkZWZpbmVkIG9wZXJhdGlvbiB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcKLSAgLy8gUG9ydFR5cGUuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlQmluZGluZ3MoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBpZiAod3NkbERlZmluaXRpb24uZ2V0QmluZGluZ3MoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE9iamVjdCBiaW5kaW5nc1tdID0gd3NkbERlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS50b0FycmF5KCk7Ci0gICAgTGlzdCBwYXJlbnRzID0gbmV3IFZlY3RvcigpOwotICAgIHBhcmVudHMuYWRkKHdzZGxEZWZpbml0aW9uKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJpbmRpbmdzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIEJpbmRpbmcgYiA9IChCaW5kaW5nKWJpbmRpbmdzW2ldOwotICAgICAgcGFyZW50cy5hZGQoMCwgYik7Ci0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGIuZ2V0UG9ydFR5cGUoKTsKLQotICAgICAgaWYgKHBvcnRUeXBlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgLy8gdGhlIFBvcnRUeXBlIGlzIG5vdCBkZWZpbmVkIHNvIGRvbid0IGJvdGhlciBjaGVja2luZyB0aGUgb3BlcmF0aW9ucwotICAgICAgaWYgKHBvcnRUeXBlLmlzVW5kZWZpbmVkKCkpCi0gICAgICB7IFN0cmluZ1tdIGFyZ3MgPSB7cG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgYi5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpfTsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9QT1JUVFlQRV9VTkRFRklORURfRk9SX0JJTkRJTkcsCi0gICAgICAgICAgICBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSwKLSAgICAgICAgICAgIFFVT1RFICsgYXJnc1sxXSArIFFVT1RFKSwKLSAgICAgICAgICBiLCBfUE9SVFRZUEVfVU5ERUZJTkVEX0ZPUl9CSU5ESU5HLCBhcmdzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gdGhlIFBvcnRUeXBlIGlzIGRlZmluZWQgc28gbm93IHdlIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZAotICAgICAgICBPYmplY3QgYmluZGluZ09wZXJhdGlvbnNbXSA9IGIuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS50b0FycmF5KCk7Ci0KLSAgICAgICAgLy8gY2hlY2sgaWYgdGhlIG9wZXJhdGlvbiBpcyBkZWZpbmVkIGZvciBlYWNoIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBiaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGg7IGsrKykKLSAgICAgICAgewotICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYm8gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nT3BlcmF0aW9uc1trXTsKLSAgICAgICAgICBwYXJlbnRzLmFkZCgwLCBibyk7Ci0gICAgICAgICAgaWYgKGJvLmdldE9wZXJhdGlvbigpID09IG51bGwgfHwgYm8uZ2V0T3BlcmF0aW9uKCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBhcmdzID0ge2IuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKX07Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICBfT1BFUkFUSU9OX1VOREVGSU5FRF9GT1JfUE9SVFRZUEUsCi0gICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUsCi0gICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzFdICsgUVVPVEUpLAotICAgICAgICAgICAgICBibywgX09QRVJBVElPTl9VTkRFRklORURfRk9SX1BPUlRUWVBFLCBhcmdzKTsKLSAgICAgICAgICAgIC8vIG5pY2UgaWRlYSB0byBhZGQgc3VnZ2VzdGlvbnMgdG8gb3RoZXIgZWxlbWVudHMgdG8gZml4IHRoZSBlcnJvcgotICAgICAgICAgICAgLy8gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpcGUgZmlsZXMgbGlrZSB0aGlzCi0gICAgICAgICAgICAvL2FkZFZhbGlkYXRpb25NZXNzYWdlKHdhcm5pbmdMaXN0LHBvcnRUeXBlLHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiRGVmaW5lIGFuIG9wZXJhdGlvbiBoZXJlIHRvIGNvcnJlc3BvbmQgd2l0aCB0aGUgb3BlcmF0aW9uIGluOiAiICsgYm8uZ2V0TmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gdGFrZSBjYXJlIG9mIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBpbiB0aGUgYmluZGluZyBvcGVyYXRpb24sIGJpbmRpbmcgaW5wdXRzLCBvdXRwdXRzIGFuZCBmYXVsdHMKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ0lucHV0IGJpbnB1dCA9IGJvLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGJpbnB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwYXJlbnRzLmFkZCgwLCBiaW5wdXQpOwotICAgICAgICAgICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBiaW5kaW5nIG9wZXJhdGlvbiBpbnB1dAotICAgICAgICAgICAgICB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdCgKLSAgICAgICAgICAgICAgICBwYXJlbnRzLAotICAgICAgICAgICAgICAgIGJvLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLAotICAgICAgICAgICAgICAgIHZhbEluZm8pOwotICAgICAgICAgICAgICBwYXJlbnRzLnJlbW92ZSgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEJpbmRpbmdPdXRwdXQgYm91dHB1dCA9IGJvLmdldEJpbmRpbmdPdXRwdXQoKTsKLSAgICAgICAgICAgIGlmIChib3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHBhcmVudHMuYWRkKDAsIGJvdXRwdXQpOwotICAgICAgICAgICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBiaW5kaW5nIG9wZXJhdGlvbiBvdXRwdXQKLSAgICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QoCi0gICAgICAgICAgICAgICAgcGFyZW50cywKLSAgICAgICAgICAgICAgICBiby5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksCi0gICAgICAgICAgICAgICAgdmFsSW5mbyk7Ci0gICAgICAgICAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gbm8gaW5wdXQgb3Igb3V0cHV0IGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoZSBvcGVyYXRpb24KLSAgICAgICAgICAgIGlmIChiaW5wdXQgPT0gbnVsbCAmJiBib3V0cHV0ID09IG51bGwpCi0gICAgICAgICAgICB7IFN0cmluZ1tdIGFyZ3MgPSB7IGJvLmdldE5hbWUoKSB9OwotICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9PUEVSQVRJT05fTk9fSU5QVVRfT1JfT1VUUFVULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgYm8sIF9PUEVSQVRJT05fTk9fSU5QVVRfT1JfT1VUUFVULCBhcmdzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgZm9yIGVhY2ggYmluZGluZyBvcGVyYXRpb24gZmF1bHQKLSAgICAgICAgICAgIEl0ZXJhdG9yIGZhdWx0cyA9IGJvLmdldEJpbmRpbmdGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGZhdWx0cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEJpbmRpbmdGYXVsdCBiZiA9IChCaW5kaW5nRmF1bHQpZmF1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgcGFyZW50cy5hZGQoMCwgYmYpOwotICAgICAgICAgICAgICB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdChwYXJlbnRzLCBiZi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgdmFsSW5mbyk7Ci0gICAgICAgICAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBiaW5kaW5nIG9wZXJhdGlvbgotICAgICAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIGJvLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCB2YWxJbmZvKTsKLSAgICAgICAgICBwYXJlbnRzLnJlbW92ZSgwKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgdGhlIGJpbmRpbmcKLSAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIGIuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHZhbEluZm8pOwotICAgICAgcGFyZW50cy5yZW1vdmUoMCk7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhhdCBhbGwgb2YgdGhlIFBvcnRUeXBlcyBoYXZlIHZhbGlkIG1lc3NhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGVpcgotICAvLyBvcGVyYXRpb24gaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgdHlwZXMuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlUG9ydFR5cGVzKERlZmluaXRpb24gd3NkbERlZmluaXRpb24sIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgaWYgKHdzZGxEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgT2JqZWN0IHBvcnR0eXBlc1tdID0gd3NkbERlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkudG9BcnJheSgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0dHlwZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgUG9ydFR5cGUgcCA9IChQb3J0VHlwZSlwb3J0dHlwZXNbaV07Ci0gICAgICBPYmplY3Qgb3BlcmF0aW9uc1tdID0gcC5nZXRPcGVyYXRpb25zKCkudG9BcnJheSgpOwotICAgICAgTGlzdCBpbkFuZE91dE5hbWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBvcGVyYXRpb25zLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBPcGVyYXRpb24gbyA9IChPcGVyYXRpb24pb3BlcmF0aW9uc1tqXTsKLSAgICAgICAgaWYgKG8gPT0gbnVsbCB8fCBvLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIG1lc3NhZ2VzIGFyZSBkZWZpbmVkIGZvciB0aGUgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHRzCi0gICAgICAgIE1lc3NhZ2UgbTsKLSAgICAgICAgSW5wdXQgaW5wdXQgPSBvLmdldElucHV0KCk7Ci0gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGlucHV0TmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAvLyBpZiB0aGUgbmFtZSBpc24ndCBkZWZpbmVkIGl0IGRlZmF1bHRzIHRvIHRoaXMKLSAgICAgICAgICBpZiAoaW5wdXROYW1lID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXROYW1lID0gby5nZXROYW1lKCkgKyBSRVFVRVNUOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaW5BbmRPdXROYW1lcy5jb250YWlucyhpbnB1dE5hbWUpKQotICAgICAgICAgIHsgU3RyaW5nW10gYXJncyA9IHtpbnB1dE5hbWUsIHAuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSB9OwotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgX0lOUFVUX05BTUVfTk9UX1VOSVFVRSwKLSAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSwKLSAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMV0gKyBRVU9URSksCi0gICAgICAgICAgICAgIGlucHV0LCBfSU5QVVRfTkFNRV9OT1RfVU5JUVVFLCBhcmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGluQW5kT3V0TmFtZXMuYWRkKGlucHV0TmFtZSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgbSA9IGlucHV0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICBpZiAobSAhPSBudWxsICYmIG0uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc05hbWUgPSBFTVBUWV9TVFJJTkc7Ci0gICAgICAgICAgICBRTmFtZSBtZXNzUU5hbWUgPSBtLmdldFFOYW1lKCk7Ci0gICAgICAgICAgICBpZiAobWVzc1FOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1lc3NOYW1lID0gbWVzc1FOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nW10gYXJncyA9IHttZXNzTmFtZX07Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfSU5QVVQsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICBpbnB1dCwgX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCwgYXJncyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIE91dHB1dCBvdXRwdXQgPSBvLmdldE91dHB1dCgpOwotICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgb3V0cHV0TmFtZSA9IG91dHB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgLy8gaWYgdGhlIG5hbWUgaXNuJ3QgZGVmaW5lZCBpdCBkZWZhdWx0cyB0byB0aGlzCi0gICAgICAgICAgaWYgKG91dHB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXROYW1lID0gby5nZXROYW1lKCkgKyBSRVNQT05TRTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoaW5BbmRPdXROYW1lcy5jb250YWlucyhvdXRwdXROYW1lKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBhcmdzID0ge291dHB1dE5hbWUsIHAuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKX07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIF9PVVRQVVRfTkFNRV9OT1RfVU5JUVVFLAotICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1swXSArIFFVT1RFLAotICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1sxXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgb3V0cHV0LCBfT1VUUFVUX05BTUVfTk9UX1VOSVFVRSwgYXJncyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbkFuZE91dE5hbWVzLmFkZChvdXRwdXROYW1lKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBtID0gb3V0cHV0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICBpZiAobSAhPSBudWxsICYmIG0uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc05hbWUgPSBFTVBUWV9TVFJJTkc7Ci0gICAgICAgICAgICBRTmFtZSBtZXNzUU5hbWUgPSBtLmdldFFOYW1lKCk7Ci0gICAgICAgICAgICBpZiAobWVzc1FOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1lc3NOYW1lID0gbWVzc1FOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nW10gYXJncyA9IHttZXNzTmFtZX07Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfT1VUUFVULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgb3V0cHV0LCBfTUVTU0FHRV9VTkRFRklORURfRk9SX09VVFBVVCwgYXJncyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgT2JqZWN0IGZhdWx0c1tdID0gby5nZXRGYXVsdHMoKS52YWx1ZXMoKS50b0FycmF5KCk7Ci0KLSAgICAgICAgLy9MaXN0IGZhdWx0TmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgZmF1bHRzLmxlbmd0aDsgaysrKQotICAgICAgICB7Ci0gICAgICAgICAgRmF1bHQgZiA9IChGYXVsdClmYXVsdHNba107Ci0gICAgICAgICAgbSA9IGYuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgIGlmIChtICE9IG51bGwgJiYgbS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzTmFtZSA9IEVNUFRZX1NUUklORzsKLSAgICAgICAgICAgIFFOYW1lIG1lc3NRTmFtZSA9IG0uZ2V0UU5hbWUoKTsKLSAgICAgICAgICAgIGlmIChtZXNzUU5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWVzc05hbWUgPSBtZXNzUU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgYXJnc1tdID0ge21lc3NOYW1lfTsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9GQVVMVCwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgIGYsIF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQsIGFyZ3MpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgbWVzc2FnZXMgZGVmaW5lZCBpbiB0aGUgV1NETCBkb2N1bWVudCBhcmUgdmFsaWQuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlTWVzc2FnZXMoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBpZiAod3NkbERlZmluaXRpb24uZ2V0TWVzc2FnZXMoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIEl0ZXJhdG9yIG1lc3NhZ2VzID0gd3NkbERlZmluaXRpb24uZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKG1lc3NhZ2VzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBNZXNzYWdlIG0gPSAoTWVzc2FnZSltZXNzYWdlcy5uZXh0KCk7Ci0gICAgICBpZiAoIW0uaXNVbmRlZmluZWQoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgdGhlIG1lc3NhZ2UgaGFzIGEgcGFydCAoYW5kIGl0IGRvZXNuJ3QgaGF2ZSB0bykKLSAgICAgICAgLy8gZW5zdXJlIGVhY2ggbWVzc2FnZSBwYXJ0IGhhcyBlaXRoZXIgYW4gZWxlbWVudCBvciBhIHR5cGUKLSAgICAgICAgaWYgKCFtLmdldFBhcnRzKCkuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgcGFydHMgPSBtLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAocGFydHMuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFBhcnQgcCA9IChQYXJ0KXBhcnRzLm5leHQoKTsKLSAgICAgICAgICAgIFFOYW1lIGVsZW1lbnROYW1lID0gcC5nZXRFbGVtZW50TmFtZSgpOwotICAgICAgICAgICAgUU5hbWUgdHlwZU5hbWUgPSBwLmdldFR5cGVOYW1lKCk7Ci0gICAgICAgICAgICBNYXAgZXh0QXR0cyA9IHAuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlcygpOwotICAgICAgICAgICAgLy8gVE9ETzpUaGlzIHdpbGwgaGF2ZSB0byBiZSBleHRlbmRlZCBhcyBwYXJ0cyBjYW4gaGF2ZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgICAgICAvL2Vuc3VyZSB0aGUgcGFydCBoYXMgYSB0eXBlIG9yIGFuIGVsZW1lbnQgZGVmaW5lZAotICAgICAgICAgICAgaWYgKGVsZW1lbnROYW1lID09IG51bGwgJiYgdHlwZU5hbWUgPT0gbnVsbCAmJiAoZXh0QXR0cyA9PSBudWxsIHx8IGV4dEF0dHMuaXNFbXB0eSgpKSkKLSAgICAgICAgICAgIHsgU3RyaW5nW10gYXJncyA9IHsgcC5nZXROYW1lKCl9OwotICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9QQVJUX05PX0VMRU1FTlRfT1JfVFlQRSwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgICAgcCwgX1BBUlRfTk9fRUxFTUVOVF9PUl9UWVBFLCBhcmdzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vaGVyZSB0aGUgcGFydCBoYXMgYm90aCB0aGUgZWxlbWVudCBhbmQgdHlwZSBkZWZpbmVkIGFuZCBpdCBjYW4gb25seSBoYXZlIG9uZSBkZWZpbmVkCQotICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudE5hbWUgIT0gbnVsbCAmJiB0eXBlTmFtZSAhPSBudWxsKQotICAgICAgICAgICAgeyBTdHJpbmdbXSBhcmdzID0ge3AuZ2V0TmFtZSgpfTsKLSAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfUEFSVF9CT1RIX0VMRU1FTlRfQU5EX1RZUEUsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICAgIHAsIF9QQVJUX0JPVEhfRUxFTUVOVF9BTkRfVFlQRSwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWNoZWNrUGFydENvbnN0aXR1ZW50KGVsZW1lbnROYW1lLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lLmdldExvY2FsUGFydCgpLAotICAgICAgICAgICAgICAgIEVMRU1FTlQsCi0gICAgICAgICAgICAgICAgcCwKLSAgICAgICAgICAgICAgICB2YWxJbmZvKSkKLSAgICAgICAgICAgICAgeyBTdHJpbmdbXSBhcmdzID0ge3AuZ2V0TmFtZSgpLCBlbGVtZW50TmFtZS5nZXRMb2NhbFBhcnQoKX07Ci0gICAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICBfUEFSVF9JTlZBTElEX0VMRU1FTlQsCi0gICAgICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1swXSArIFFVT1RFLAotICAgICAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMV0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgICBwLCBfUEFSVF9JTlZBTElEX0VMRU1FTlQsIGFyZ3MpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBlTmFtZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBjaGVjayB0aGF0IHRoZSB0eXBlIGl0c2VsZiBpcyBkZWZpbmVkIHByb3Blcmx5Ci0gICAgICAgICAgICAgIGlmICghY2hlY2tQYXJ0Q29uc3RpdHVlbnQodHlwZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHR5cGVOYW1lLmdldExvY2FsUGFydCgpLCBUWVBFLCBwLCB2YWxJbmZvKSkKLSAgICAgICAgICAgICAgeyBTdHJpbmdbXSBhcmdzID0ge3AuZ2V0TmFtZSgpLCB0eXBlTmFtZS5nZXRMb2NhbFBhcnQoKSB9OyAKLSAgICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIF9QQVJUX0lOVkFMSURfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUsCi0gICAgICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1sxXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICAgIHAsIF9QQVJUX0lOVkFMSURfVFlQRSwgYXJncyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWUgaXMgZGVmaW5lZCBpbiB0aGUgbmFtZXNwYWNlIGZvciB0aGUgcGFydC4gIEEgcGFydCBpcyBhbgotICAgKiBFTEVNRU5UIG9yIGEgVFlQRS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0byBjaGVjay4KLSAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gY2hlY2suCi0gICAqIEBwYXJhbSBwYXJ0IFRoZSBwYXJ0IHRvIGNoZWNrLCBlaXRoZXIgRUxFTUVOVCBvciBUWVBFLgotICAgKiBAcGFyYW0gcGFydE9iamVjdCBUaGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gcGFydC4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBwYXJ0IGVsZW1lbnQgb2YgdHlwZSBpcyBkZWZpbmVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja1BhcnRDb25zdGl0dWVudCgKLSAgICBTdHJpbmcgbmFtZXNwYWNlLAotICAgIFN0cmluZyBuYW1lLAotICAgIGludCBwYXJ0LAotICAgIFBhcnQgcGFydE9iamVjdCwKLSAgICBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotCi0gICAgYm9vbGVhbiBwYXJ0dmFsaWQgPSBmYWxzZTsKLSAgICAvLyBGaXJzdCB0YWtlIGNhcmUgb2YgdGhlIHNpdHVhdGlvbiB3aGVyZSBpdCdzIGZyb20gdGhlIHNjaGVtYSBuYW1lc3BhY2UuCi0gICAgLy8gVGhlIDE5OTksIDIwMDAgYW5kIDIwMDEgc2NoZW1hIG5hbWVzcGFjZXMgYXJlIGFsbCBhY2NlcHRlZC4KLSAgICBpZiAobmFtZXNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKQotICAgICAgfHwgbmFtZXNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KQotICAgICAgfHwgbmFtZXNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICB7Ci0gICAgICBTY2hlbWFBdHRyaWJ1dGVUYWJsZSB4c2RUYWJsZSA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVUYWJsZSgpOwotICAgICAgaWYgKHhzZFRhYmxlLmNvbnRhaW5zU3ltYm9sKG5hbWUpKQotICAgICAgewotICAgICAgICBwYXJ0dmFsaWQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICAvLyBjaGVjayBpbmxpbmUgYW5kIGltcG9ydGVkIHNjaGVtYQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBYU01vZGVsW10gc2NoZW1hcyA9IHZhbEluZm8uZ2V0U2NoZW1hcygpOwotICAgICAgaW50IG51bVNjaGVtYXMgPSBzY2hlbWFzLmxlbmd0aDsKLSAgICAgIC8vSXRlcmF0b3Igc2NoZW1hc0l0ZXIgPSBzY2hlbWFzLml0ZXJhdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVNjaGVtYXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgWFNNb2RlbCBzY2hlbWEgPSBzY2hlbWFzW2ldOwotICAgICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocGFydCA9PSBFTEVNRU5UICYmIHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb24obmFtZSwgbmFtZXNwYWNlKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnR2YWxpZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocGFydCA9PSBUWVBFICYmIHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbihuYW1lLCBuYW1lc3BhY2UpICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBJZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgaGFzbid0IGJlZW4gZXhwbGljaXRseSBpbXBvcnRlZCBkbyBzbwotCS8vIG5vdy4KLSAgICAvLyBBbGxvdyB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgdG8gYmUgYXV0b21hdGljYWxseSBpbXBvcnRlZCBidXQgbWFyawotCS8vIGl0IGFzIGEgd2FybmluZy4KLSAgICBpZiAoIXBhcnR2YWxpZCAmJiBuYW1lc3BhY2UuZXF1YWxzKFNPQVBfRU5DT0RJTkdfVVJJKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgWFNEVmFsaWRhdG9yIHhzZFZhbCA9IG5ldyBYU0RWYWxpZGF0b3IoKTsKLSAgICAgICAgU3RyaW5nIHNvYXBFbmMgPSB2YWxJbmZvLmdldFVSSVJlc29sdmVyKCkucmVzb2x2ZSgiIiwgU09BUF9FTkNPRElOR19VUkksIG51bGwpLmdldFBoeXNpY2FsTG9jYXRpb24oKTsKLSAgICAgICAgaWYoc29hcEVuYyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgeHNkVmFsLnZhbGlkYXRlKHNvYXBFbmMsIG51bGwsIHZhbEluZm8uZ2V0U2NoZW1hQ2FjaGUoKSk7Ci0gICAgICAgICAgLy8gc2FuaXR5IGNoZWNrIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcKLSAgICAgICAgICBpZiAoeHNkVmFsLmlzVmFsaWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBYU01vZGVsIHhzTW9kZWwgPSB4c2RWYWwuZ2V0WFNNb2RlbCgpOwotCi0gICAgICAgICAgICBpZiAocGFydCA9PSBFTEVNRU5UICYmIHhzTW9kZWwuZ2V0RWxlbWVudERlY2xhcmF0aW9uKG5hbWUsIG5hbWVzcGFjZSkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcGFydHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHBhcnQgPT0gVFlQRSAmJiB4c01vZGVsLmdldFR5cGVEZWZpbml0aW9uKG5hbWUsIG5hbWVzcGFjZSkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcGFydHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhbEluZm8uYWRkV2FybmluZyhtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfV0FSTl9TT0FQRU5DX0lNUE9SVEVEX1BBUlQsIFFVT1RFICsgbmFtZSArIFFVT1RFKSwgcGFydE9iamVjdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgCUxvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIkFuIGV4Y2VwdGlvbiBvY2N1cnJlZCB3aGlsZSBwZXJmb3JtaW5nIFdTREwgdmFsaWRhdGlvbiBvZiBhIHBhcnQgd2l0aCB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UuIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFydHZhbGlkOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdGlvbkluZm9JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRpb25JbmZvSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTM0YTQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdGlvbkluZm9JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJQb29sOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uSW5mb0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbmF0aW9uIG9mIFdTREwxMVZhbGlkYXRpb25JbmZvLgotICovCi1wdWJsaWMgY2xhc3MgV1NETDExVmFsaWRhdGlvbkluZm9JbXBsIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRpb25JbmZvCi17Ci0gIHByaXZhdGUgSVZhbGlkYXRpb25JbmZvIHZhbGluZm8gPSBudWxsOwotICBwcml2YXRlIEhhc2h0YWJsZSBlbGVtZW50bG9jYXRpb25zID0gbnVsbDsKLSAgcHJpdmF0ZSBMaXN0IHNjaGVtYXMgPSBuZXcgVmVjdG9yKCk7Ci0gIAotICBwdWJsaWMgV1NETDExVmFsaWRhdGlvbkluZm9JbXBsKElWYWxpZGF0aW9uSW5mbyB2YWxpbmZvKQotICB7Ci0gICAgdGhpcy52YWxpbmZvID0gdmFsaW5mbzsKLSAgfQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jZ2V0RmlsZVVSSSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZpbGVVUkkoKQotICB7Ci0gICAgcmV0dXJuIHZhbGluZm8uZ2V0RmlsZVVSSSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2FkZFNjaGVtYShvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkU2NoZW1hKFhTTW9kZWwgeHNNb2RlbCkKLSAgewotICAgIGlmICh4c01vZGVsICE9IG51bGwpCi0gICAgewotICAgICAgc2NoZW1hcy5hZGQoeHNNb2RlbCk7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jZ2V0U2NoZW1hcygpCi0gICAqLwotICBwdWJsaWMgWFNNb2RlbFtdIGdldFNjaGVtYXMoKQotICB7Ci0gICAgcmV0dXJuIChYU01vZGVsW10pc2NoZW1hcy50b0FycmF5KG5ldyBYU01vZGVsW3NjaGVtYXMuc2l6ZSgpXSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuV1NETDExVmFsaWRhdGlvbkluZm8jY2xlYXJkU2NoZW1hcygpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhclNjaGVtYXMoKQotICB7Ci0gICAgc2NoZW1hcy5jbGVhcigpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNzZXRFbGVtZW50TG9jYXRpb25zKGphdmEudXRpbC5IYXNodGFibGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50TG9jYXRpb25zKEhhc2h0YWJsZSBlbGVtZW50TG9jYXRpb25zKQotICB7Ci0gICAgdGhpcy5lbGVtZW50bG9jYXRpb25zID0gZWxlbWVudExvY2F0aW9uczsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNhZGRFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBlbGVtZW50KQotICB7Ci0gICAgYWRkRXJyb3IobWVzc2FnZSwgZWxlbWVudCwgbnVsbCwgbnVsbCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNhZGRFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0W10pCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gbWVzc2FnZUFyZ3VtZW50cykKLSAgewotICAgIExvY2F0aW9uSG9sZGVyIGxvY2F0aW9uOwotICAgIGlmIChlbGVtZW50bG9jYXRpb25zLmNvbnRhaW5zS2V5KGVsZW1lbnQpKQotICAgIHsKLSAgICAgIGxvY2F0aW9uID0gKExvY2F0aW9uSG9sZGVyKWVsZW1lbnRsb2NhdGlvbnMuZ2V0KGVsZW1lbnQpOwotICAgICAgYWRkRXJyb3IobWVzc2FnZSwgbG9jYXRpb24uZ2V0TGluZSgpLCBsb2NhdGlvbi5nZXRDb2x1bW4oKSwgbG9jYXRpb24uZ2V0VVJJKCksIGVycm9yS2V5LCBtZXNzYWdlQXJndW1lbnRzKTsKLSAgICB9Ci0gICAgLy8gaWYgd2UgZ2l2ZSBpdCBhbiBlbGVtZW50IHRoYXQgaGFzbid0IGJlZW4gZGVmaW5lZCB3ZSdsbCBzZXQgdGhlIGxvY2F0aW9uCi0gICAgLy8gYXQgKDAsMCkgc28gdGhlIGVycm9yIHNob3dzIHVwIGJ1dCBubyBsaW5lIG1hcmtlciBpbiB0aGUgZWRpdG9yCi0gICAgZWxzZQotICAgIHsKLSAgICAgIGFkZEVycm9yKG1lc3NhZ2UsIDAsIDEsIGdldEZpbGVVUkkoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2FkZFdhcm5pbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBlbGVtZW50KQotICB7Ci0gICAgTG9jYXRpb25Ib2xkZXIgbG9jYXRpb247Ci0gICAgaWYgKGVsZW1lbnRsb2NhdGlvbnMuY29udGFpbnNLZXkoZWxlbWVudCkpCi0gICAgewotICAgICAgbG9jYXRpb24gPSAoTG9jYXRpb25Ib2xkZXIpZWxlbWVudGxvY2F0aW9ucy5nZXQoZWxlbWVudCk7Ci0gICAgICBhZGRXYXJuaW5nKG1lc3NhZ2UsIGxvY2F0aW9uLmdldExpbmUoKSwgbG9jYXRpb24uZ2V0Q29sdW1uKCksIGxvY2F0aW9uLmdldFVSSSgpKTsKLSAgICB9Ci0gICAgLy8gaWYgd2UgZ2l2ZSBpdCBhbiBlbGVtZW50IHRoYXQgaGFzbid0IGJlZW4gZGVmaW5lZCB3ZSdsbCBzZXQgdGhlIGxvY2F0aW9uCi0gICAgLy8gYXQgKDAsMCkgc28gdGhlIGVycm9yIHNob3dzIHVwIGJ1dCBubyBsaW5lIG1hcmtlciBpbiB0aGUgZWRpdG9yCi0gICAgZWxzZQotICAgIHsKLSAgICAgIGFkZFdhcm5pbmcobWVzc2FnZSwgMCwgMSwgZ2V0RmlsZVVSSSgpKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLldTREwxMVZhbGlkYXRpb25JbmZvI2FkZE5hbWVzcGFjZVdpdGhOb1ZhbGlkYXRvcihqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLS8vICBwdWJsaWMgdm9pZCBhZGROYW1lc3BhY2VXaXRoTm9WYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSkKLS8vICB7Ci0vLyAgICB2YWxpbmZvLmFkZE5hbWVzcGFjZVdpdGhOb1ZhbGlkYXRvcihuYW1lc3BhY2UpOwotLy8KLS8vICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2FkZEVycm9yKGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgYWRkRXJyb3IobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmksIG51bGwsIG51bGwpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpLCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIG1lc3NhZ2VBcmd1bWVudHMpCi0gIHsgCi0gICAgdHJ5Ci0gICAgeyAoKFZhbGlkYXRpb25JbmZvSW1wbCl2YWxpbmZvKS5hZGRFcnJvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgZXJyb3JLZXksIG1lc3NhZ2VBcmd1bWVudHMpOwotICAgIH0KLSAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdmFsaW5mby5hZGRFcnJvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jYWRkV2FybmluZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgdmFsaW5mby5hZGRXYXJuaW5nKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgdXJpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLndzZGwxMS5XU0RMMTFWYWxpZGF0aW9uSW5mbyNnZXRVUklSZXNvbHZlcigpCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKSAKLSAgewotCXJldHVybiB2YWxpbmZvLmdldFVSSVJlc29sdmVyKCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jZ2V0U2NoZW1hQ2FjaGUoKQotICAgKi8KLSAgcHVibGljIFhNTEdyYW1tYXJQb29sIGdldFNjaGVtYUNhY2hlKCkgCi0gIHsKLQlYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCA9IChYTUxHcmFtbWFyUG9vbCl2YWxpbmZvLmdldEF0dHJpYnV0ZShDb25zdGFudHMuWE1MU0NIRU1BX0NBQ0hFX0FUVFJJQlVURSk7Ci0JcmV0dXJuIGdyYW1tYXJQb29sOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2dldFhNTENhY2hlKCkKLSAgICovCi0gIHB1YmxpYyBYTUxHcmFtbWFyUG9vbCBnZXRYTUxDYWNoZSgpIAotICB7Ci0JWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpdmFsaW5mby5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLlhNTF9DQUNIRV9BVFRSSUJVVEUpOwotCXJldHVybiBncmFtbWFyUG9vbDsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdG9yQ29udHJvbGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4OTcxOWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklXU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZXhjZXB0aW9uLlZhbGlkYXRlV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0KLS8qKgotICogVGhlIHZhbGlkYXRvciBjb250cm9sbGVyIGlzIHRoZSBoZWFkIG9mIHZhbGlkYXRpb24uIAotICovCi1wdWJsaWMgY2xhc3MgV1NETDExVmFsaWRhdG9yQ29udHJvbGxlciBpbXBsZW1lbnRzIElXU0RMVmFsaWRhdG9yCi17Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBWQUxJREFUT1JfUkVTT1VSQ0VfQlVORExFX05BTUUgPSAidmFsaWRhdGV3c2RsIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfV0FSTl9OT19WQUxESUFUT1IgPSAiX1dBUk5fTk9fVkFMRElBVE9SIjsKLS8vICBwcm90ZWN0ZWQgZmluYWwgaW50IEVSUk9SX01FU1NBR0UgPSAwOwotLy8gIHByb3RlY3RlZCBmaW5hbCBpbnQgV0FSTklOR19NRVNTQUdFID0gMTsKLS8vICBwcm90ZWN0ZWQgU3RyaW5nIGZpbGVVUkk7Ci0vLyAgcHJvdGVjdGVkIExpc3Qgc2NoZW1hcyA9IG5ldyBWZWN0b3IoKTsKLS8vICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbjsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvciA9IG51bGw7Ci0gIC8vcHJvdGVjdGVkIFZhbGlkYXRpb25Db250cm9sbGVyIHZhbGlkYXRpb25Db250cm9sbGVyOwotICBwcm90ZWN0ZWQgVmFsaWRhdG9yUmVnaXN0cnkgdmVyID0gVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NETDExVmFsaWRhdG9yQ29udHJvbGxlcigpCi0gIHsKLSAgICBSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShWQUxJREFUT1JfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCW1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLklXU0RMVmFsaWRhdG9yI3ZhbGlkYXRlKG9yZy53M2MuZG9tLkRvY3VtZW50LCBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLlZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoRG9jdW1lbnQgZG9tTW9kZWwsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKSB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICAvLyByZXNldCB0aGUgdmFyaWFibGVzCi0vLyAgICByZXNldCgpOwotLy8gICAgZmlsZVVSSSA9IHZhbEluZm8uZ2V0RmlsZVVSSSgpOwotICAgIC8vdGhpcy52YWxpZGF0aW9uQ29udHJvbGxlciA9IHZhbGlkYXRpb25jb250cm9sbGVyOwotCi0gICAgSVdTREwxMVZhbGlkYXRpb25JbmZvIHdzZGx2YWxpbmZvID0gbmV3IFdTREwxMVZhbGlkYXRpb25JbmZvSW1wbCh2YWxJbmZvKTsKLSAgICBXU0RMRG9jdW1lbnRbXSB3c2RsRG9jcyA9IHJlYWRXU0RMRG9jdW1lbnQoZG9tTW9kZWwsIHZhbEluZm8uZ2V0RmlsZVVSSSgpLCBnZXRNZXNzYWdlR2VuZXJhdG9yKCksIHdzZGx2YWxpbmZvKTsKLSAgICAvLyBEb24ndCB2YWxpZGF0ZSBhbiBudWxsIGRlZmluaXRpb25zIGVsZW1lbnQuIEVpdGhlciB0aGUgZmlsZSBpcyBlbXRweSBhbmQgdmFsaWQgb3IKLSAgICAvLyBoYWQgYW4gZXJyb3Igd2hlbiByZWFkaW5nLgotICAgIGlmKHdzZGxEb2NzICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBpbnQgbnVtV1NETERvY3MgPSB3c2RsRG9jcy5sZW5ndGg7Ci0gICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtV1NETERvY3M7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETERvY3VtZW50IHRlbXBEb2MgPSB3c2RsRG9jc1tpXTsKLSAgICAgICAgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiA9IHRlbXBEb2MuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgICAvLyBSZWdpc3RlciB0aGUgc2NoZW1hcy4KLSAgICAgICAgTGlzdCB4c2RMaXN0ID0gdGVtcERvYy5nZXRTY2hlbWFzKCk7Ci0gICAgICAgIEl0ZXJhdG9yIHhzZEl0ZXIgPSB4c2RMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlICh4c2RJdGVyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGx2YWxpbmZvLmFkZFNjaGVtYSgoWFNNb2RlbCl4c2RJdGVyLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2V0IHRoZSBlbGVtZW50IGxvY2F0aW9ucyB0YWJsZS4KLSAgICAgICAgd3NkbHZhbGluZm8uc2V0RWxlbWVudExvY2F0aW9ucyh0ZW1wRG9jLmdldEVsZW1lbnRMb2NhdGlvbnMoKSk7Ci0gICAgICAgIC8vIFNldCBhbnkgcmVhZGVyIGVycm9ycy4gVGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHRoZSBlbGVtZW50IGxvY2F0aW9ucyB0YWJsZSBpcyBzZXQuCi0gICAgICAgIExpc3QgcmVhZGVyRXJyb3JzID0gdGVtcERvYy5nZXRSZWFkZXJFcnJvcnMoKTsKLSAgICAgICAgaWYgKHJlYWRlckVycm9ycyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgcmVhZGVyRXJyb3JzSSA9IHJlYWRlckVycm9ycy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChyZWFkZXJFcnJvcnNJLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBSZWFkZXJFcnJvciByZSA9IChSZWFkZXJFcnJvcilyZWFkZXJFcnJvcnNJLm5leHQoKTsKLSAgICAgICAgICAgIHdzZGx2YWxpbmZvLmFkZEVycm9yKHJlLmdldEVycm9yKCksIHJlLmdldE9iamVjdCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgTGlzdCByZWFkZXJXYXJuaW5ncyA9IHRlbXBEb2MuZ2V0UmVhZGVyV2FybmluZ3MoKTsKLSAgICAgICAgaWYgKHJlYWRlcldhcm5pbmdzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJdGVyYXRvciByZWFkZXJXYXJuaW5nc0kgPSByZWFkZXJXYXJuaW5ncy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChyZWFkZXJXYXJuaW5nc0kuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFJlYWRlckVycm9yIHJlID0gKFJlYWRlckVycm9yKXJlYWRlcldhcm5pbmdzSS5uZXh0KCk7Ci0gICAgICAgICAgICB3c2RsdmFsaW5mby5hZGRXYXJuaW5nKHJlLmdldEVycm9yKCksIHJlLmdldE9iamVjdCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdmFsaWRhdGVXU0RMRWxlbWVudChDb25zdGFudHMuTlNfVVJJX1dTREwsIHdzZGxEZWZpbml0aW9uLCBuZXcgVmVjdG9yKCksIHdzZGx2YWxpbmZvKTsKLSAgICAgICAgd3NkbHZhbGluZm8uY2xlYXJTY2hlbWFzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmVhZCBpbiB0aGUgV1NETCBkb2N1bWVudCBhbmQgc2V0IHRoZSBtb2RlbCBhbmQgaW1wb3J0ZWQgc2NoZW1hcy4KLSAgICogCi0gICAqIEBwYXJhbSBkb21Nb2RlbCBBIERPTSBtb2RlbCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgcmVhZC4KLSAgICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gcmVhZC4KLSAgICogQHBhcmFtIG1lc3NhZ2VnZW5lcmF0b3IgVGhlIG1lc3NhZ2VnZW5lcmF0b3IgdGhlIHJlYWRlciBzaG91bGQgdXNlIGZvciBhbnkgbWVzc2FnZXMgcHJvZHVjZWQuCi0gICAqIEBwYXJhbSB3c2RsdmFsaW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgdmFsaWRhdGlvbi4KLSAgICogQHJldHVybiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudCBmb3IgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETERvY3VtZW50W10gcmVhZFdTRExEb2N1bWVudChEb2N1bWVudCBkb21Nb2RlbCwgU3RyaW5nIGZpbGUsIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvciwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHdzZGx2YWxpbmZvKSB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBXU0RMRG9jdW1lbnRbXSB3c2RsRG9jcyA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotCi0gICAgICBXU0RMUmVhZGVySW1wbCB3c2RsUmVhZGVyID0gbmV3IFdTRExSZWFkZXJJbXBsKHdzZGx2YWxpbmZvKTsKLSAgICAgIHdzZGxSZWFkZXIuc2V0TWVzc2FnZUdlbmVyYXRvcihtZXNzYWdlZ2VuZXJhdG9yKTsKLSAgICAgIGlmKGRvbU1vZGVsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHdzZGxEb2NzID0gd3NkbFJlYWRlci5yZWFkV1NETChmaWxlLCBkb21Nb2RlbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7ICAKLSAgICAgICAgd3NkbERvY3MgPSB3c2RsUmVhZGVyLnJlYWRXU0RMKGZpbGUpOwotICAgICAgfQotICAgICAgLy93c2RsdmFsaW5mby5zZXRFbGVtZW50TG9jYXRpb25zKHdzZGxSZWFkZXIuZ2V0RWxlbWVudExvY2F0aW9uc0hhc2h0YWJsZSgpKTsKLS8vICAgICAgTGlzdCByZWFkZXJFcnJvcnMgPSB3c2RsUmVhZGVyLmdldFJlYWRlckVycm9ycygpOwotLy8gICAgICBpZiAocmVhZGVyRXJyb3JzICE9IG51bGwpCi0vLyAgICAgICB7Ci0vLyAgICAgICAgSXRlcmF0b3IgcmVhZGVyRXJyb3JzSSA9IHJlYWRlckVycm9ycy5pdGVyYXRvcigpOwotLy8gICAgICAgIHdoaWxlIChyZWFkZXJFcnJvcnNJLmhhc05leHQoKSkKLS8vICAgICAgICAgewotLy8gICAgICAgICAgUmVhZGVyRXJyb3IgcmUgPSAoUmVhZGVyRXJyb3IpcmVhZGVyRXJyb3JzSS5uZXh0KCk7Ci0vLyAgICAgICAgICB3c2RsdmFsaW5mby5hZGRFcnJvcihyZS5nZXRFcnJvcigpLCByZS5nZXRPYmplY3QoKSk7Ci0vLyAgICAgICAgfQotLy8gICAgICB9Ci0vLyAgICAgIGlmICh3c2RsUmVhZGVyLmhhc0ltcG9ydFNjaGVtYXMoKSkKLS8vICAgICAgewotLy8gICAgICAgIExpc3QgeHNkTGlzdCA9IHdzZGxSZWFkZXIuZ2V0SW1wb3J0U2NoZW1hcygpOwotLy8gICAgICAgIEl0ZXJhdG9yIHhzZEl0ZXIgPSB4c2RMaXN0Lml0ZXJhdG9yKCk7Ci0vLyAgICAgICAgd2hpbGUgKHhzZEl0ZXIuaGFzTmV4dCgpKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIHdzZGx2YWxpbmZvLmFkZFNjaGVtYSgoWFNNb2RlbCl4c2RJdGVyLm5leHQoKSk7Ci0vLyAgICAgICAgfQotLy8KLS8vICAgICAgfQotCi0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFZhbGlkYXRlV1NETEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSArICIgIiArIGUuZ2V0RmF1bHRDb2RlKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgVmFsaWRhdGVXU0RMRXhjZXB0aW9uKCJ1bmFibGUgdG8gcmVhZCBmaWxlIiArIGUuZ2V0TWVzc2FnZSgpICsgIiAiICsgZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxEb2NzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdpdmVuIGEgV1NETCBlbGVtZW50LCBjYWxsIFZhbGlkYXRlRWxlbWVudCBmb3IgaXQuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKiBAcGFyYW0gcGFyZW50cyBUaGUgbGlzdCBvZiBwYXJlbnRzIGZvciB0aGlzIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVdTRExFbGVtZW50KFN0cmluZyBuYW1lc3BhY2UsIE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB3c2RsdmFsaW5mbykKLSAgewotICAgIElXU0RMMTFWYWxpZGF0b3IgdmFsID0gdmVyLnF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkobmFtZXNwYWNlKTsKLSAgICBpZiAodmFsICE9IG51bGwpCi0gICAgewotICAgICAgdmFsLnZhbGlkYXRlKGVsZW1lbnQsIHBhcmVudHMsIHdzZGx2YWxpbmZvKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQkgIC8vVE9ETzogQWRkIHRoaXMgYXMgYSBwcmVmZXJlbmNlLgotICAgICAgLy93c2RsdmFsaW5mby5hZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9XQVJOX05PX1ZBTERJQVRPUiwgbmFtZXNwYWNlKSwgZWxlbWVudCk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBtZXNzYWdlIGdlbmVyYXRvciBmb3IgdGhpcyBjb250cm9sbGVyLgotICAgKiAKLSAgICogQHBhcmFtIG1lc2dlbiBUaGUgbWVzc2FnZSBnZW5lcmF0b3IgdG8gc2V0IGZvciB0aGlzIGNvbnRyb2xsZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlR2VuZXJhdG9yKE1lc3NhZ2VHZW5lcmF0b3IgbWVzZ2VuKQotICB7Ci0gICAgbWVzc2FnZWdlbmVyYXRvciA9IG1lc2dlbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIHJlZ2lzdGVyZWQgZm9yIHRoaXMgY29udHJvbGxlci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIHJlZ2lzdGVyZWQgZm9yIHRoaXMgY29udHJvbGxlci4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlR2VuZXJhdG9yIGdldE1lc3NhZ2VHZW5lcmF0b3IoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBmaWxlbmFtZSBmb3IgdGhlIGZpbGUgY3VycmVudGx5IGJlaW5nIHZhbGlkYXRlZC4gU29tZSB2YWxpZGF0b3JzIHJlcXVpcmUgdGhpcy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGZpbGVuYW1lIGZvciB0aGUgZmlsZSBiZWluZyB2YWxpZGF0ZWQuCi0gICAqLwotLy8gIHB1YmxpYyBTdHJpbmcgZ2V0RmlsZW5hbWUoKQotLy8gIHsKLS8vICAgIHJldHVybiBmaWxlVVJJOwotLy8gIH0KLQotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIGVycm9yIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgZXJyb3IgZm9yLgotICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIHRvIGFkZC4KLSAgICovCi0vLyAgcHVibGljIHZvaWQgYWRkRXJyb3JNZXNzYWdlKE9iamVjdCBvYmplY3QsIFN0cmluZyBlcnJvcikKLS8vICB7Ci0vLyAgICBhZGRWYWxpZGF0aW9uTWVzc2FnZShFUlJPUl9NRVNTQUdFLCBvYmplY3QsIGVycm9yKTsKLS8vICAgIGVycm9ycyA9IHRydWU7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZm9yIGV4dGVuc2libHkgdmFsaWRhdG9ycyB0byBhZGQgZXJyb3IgbWVzc2FnZXMgd2hlbiB0aGV5IGtub3cKLSAgICogbGluZSBhbmQgY29sdW1uIG51bWJlcnMuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSB3aGVyZSB0aGUgZXJyb3IgbWVzc2FnZSBpcyBsb2NhdGVkLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciBtZXNzYWdlLgotICAgKi8KLS8vICBwdWJsaWMgdm9pZCBhZGRFcnJvck1lc3NhZ2UoaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyBlcnJvcikKLS8vICB7Ci0vLyAgICBhZGRWYWxpZGF0aW9uTWVzc2FnZShFUlJPUl9NRVNTQUdFLCBsaW5lLCBjb2x1bW4sIGVycm9yKTsKLS8vICAgIGVycm9ycyA9IHRydWU7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGV4dGVuc2libHkgdmFsaWRhdG9ycyB0byBhZGQgd2FybmluZyBtZXNzYWdlcy4KLSAgICogCi0gICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBhZGQgdGhlIHdhcm5pbmcgbWVzc2FnZS4KLSAgICogQHBhcmFtIHdhcm5pbmcgVGhlIHdhcm5pbmcgbWVzc2FnZS4KLSAgICovCi0vLyAgcHVibGljIHZvaWQgYWRkV2FybmluZ01lc3NhZ2UoT2JqZWN0IG9iamVjdCwgU3RyaW5nIHdhcm5pbmcpCi0vLyAgewotLy8gICAgYWRkVmFsaWRhdGlvbk1lc3NhZ2UoV0FSTklOR19NRVNTQUdFLCBvYmplY3QsIHdhcm5pbmcpOwotLy8gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIHdhcm5pbmcgbWVzc2FnZXMgd2hlbiB0aGV5IGtub3cKLSAgICogbGluZSBhbmQgY29sdW1uIG51bWJlcnMuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSB3aGVyZSB0aGUgZXJyb3IgbWVzc2FnZSBpcyBsb2NhdGVkLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICogQHBhcmFtIHdhcm5pbmcgVGhlIHdhcm5pbmcgbWVzc2FnZS4KLSAgICovCi0vLyAgcHVibGljIHZvaWQgYWRkV2FybmluZ01lc3NhZ2UoaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB3YXJuaW5nKQotLy8gIHsKLS8vICAgIGFkZFZhbGlkYXRpb25NZXNzYWdlKFdBUk5JTkdfTUVTU0FHRSwgbGluZSwgY29sdW1uLCB3YXJuaW5nKTsKLS8vICB9Ci0KLSAgLyoqCi0gICAqIElmIHlvdSBoYXZlIGFuIG9iamVjdCByZWFkIGluIGJ5IHRoZSByZWFkZXIgZm9yIHRoaXMKLSAgICogdmFsaWRhdG9yY29udHJvbGxlciB0aGUgb2JqZWN0IGNhbiBiZSBwYXNzZWQgaW4gaGVyZSBhbmQgdGhlIGxpbmUgYW5kIGNvbHVtbgotICAgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIGFic3RyYWN0ZWQgZnJvbSBpdC4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIG1lc3NhZ2UgdG8gYWRkLgotICAgKiBAcGFyYW0gbyBUaGUgb2JqZWN0IHRoYXQgaGFzIHRoZSBlcnJvciAodXNlZCB0byBnZXQgdGhlIGxvY2F0aW9uKS4KLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYWRkLgotICAgKi8KLS8vICBwcm90ZWN0ZWQgdm9pZCBhZGRWYWxpZGF0aW9uTWVzc2FnZShpbnQgdHlwZSwgT2JqZWN0IG8sIFN0cmluZyBtZXNzYWdlKQotLy8gIHsKLS8vICAgIGludFtdIGxvY2F0aW9uOwotLy8gICAgaWYgKGVsZW1lbnRMb2NhdGlvbnMuY29udGFpbnNLZXkobykpCi0vLyAgICB7Ci0vLyAgICAgIGxvY2F0aW9uID0gKGludFtdKWVsZW1lbnRMb2NhdGlvbnMuZ2V0KG8pOwotLy8gICAgfQotLy8gICAgLy8gaWYgd2UgZ2l2ZSBpdCBhbiBlbGVtZW50IHRoYXQgaGFzbid0IGJlZW4gZGVmaW5lZCB3ZSdsbCBzZXQgdGhlIGxvY2F0aW9uCi0vLyAgICAvLyBhdCAoMCwwKSBzbyB0aGUgZXJyb3Igc2hvd3MgdXAgYnV0IG5vIGxpbmUgbWFya2VyIGluIHRoZSBlZGl0b3IKLS8vICAgIGVsc2UKLS8vICAgIHsKLS8vICAgICAgbG9jYXRpb24gPSBuZXcgaW50W10geyAwLCAwIH07Ci0vLyAgICB9Ci0vLyAgICBhZGRWYWxpZGF0aW9uTWVzc2FnZSh0eXBlLCBsb2NhdGlvblswXSwgbG9jYXRpb25bMV0sIG1lc3NhZ2UpOwotLy8gIH0KLQotICAvKioKLSAgICAqIENyZWF0ZXMgYSB2YWxpZGF0aW9uIG1lc3NhZ2Ugb2YgdGhlIHNwZWNpZmllZCB0eXBlLgotICAgICogCi0gIAkqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHZhbGlkYXRpb24gbWVzc2FnZSB0byBhZGQuCi0gIAkqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIHdoZXJlIHRoZSBlcnJvciBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gIAkqIEBwYXJhbSBjb2x1bW4gVGhlIGxpbmUgd2hlcmUgdGhlIGNvbHVtbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gIAkqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGFkZC4KLSAgCSovCi0vLyAgcHJvdGVjdGVkIHZvaWQgYWRkVmFsaWRhdGlvbk1lc3NhZ2UoaW50IHR5cGUsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgbWVzc2FnZSkKLS8vICB7Ci0vLyAgICBpZiAobWVzc2FnZSAhPSBudWxsKQotLy8gICAgewotLy8gICAgICBpZiAodHlwZSA9PSBFUlJPUl9NRVNTQUdFKQotLy8gICAgICB7Ci0vLyAgICAgICAgdmFsaWRhdGlvbkNvbnRyb2xsZXIuYWRkRXJyb3JNZXNzYWdlKGxpbmUsIGNvbHVtbiwgbWVzc2FnZSk7Ci0vLyAgICAgIH0KLS8vICAgICAgZWxzZSBpZiAodHlwZSA9PSBXQVJOSU5HX01FU1NBR0UpCi0vLyAgICAgIHsKLS8vICAgICAgICB2YWxpZGF0aW9uQ29udHJvbGxlci5hZGRXYXJuaW5nTWVzc2FnZShsaW5lLCBjb2x1bW4sIG1lc3NhZ2UpOwotLy8gICAgICB9Ci0vLyAgICB9Ci0vLyAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuY29udHJvbGxlci5JV1NETFZhbGlkYXRvciNpc1ZhbGlkKCkKLSAgICovCi0vLyAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0vLyAgewotLy8gICAgcmV0dXJuICFlcnJvcnM7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBSZXNldCB0aGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIuCi0gICAqLwotLy8gIHByb3RlY3RlZCB2b2lkIHJlc2V0KCkKLS8vICB7Ci0vLyAgICBzY2hlbWFzID0gbmV3IFZlY3RvcigpOwotLy8gICAgZmlsZVVSSSA9ICIiOwotLy8gICAgd3NkbERlZmluaXRpb24gPSBudWxsOwotLy8gICAgZWxlbWVudExvY2F0aW9ucyA9IG51bGw7Ci0vLyAgICByZXNvdXJjZWJ1bmRsZSA9IG51bGw7Ci0vLyAgICAvL3ZhbGlkYXRpb25Db250cm9sbGVyID0gbnVsbDsKLS8vICAgIGVycm9ycyA9IGZhbHNlOwotLy8gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdG9yRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdG9yRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxMzVlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLS8qKgotICogVGhlIFdTREwgMS4xIHZhbGlkYXRvciBkZWxlZ2F0ZSBob2xkcyBhIHJlZmVyZW5jZSB0byBhIHZhbGlkYXRvciB0byBiZSBpbnN0YW50aWF0ZWQgYXQKLSAqIGEgbGF0ZXIgcG9pbnQuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZQotewotICBwcml2YXRlIElXU0RMMTFWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLQotCi0gIC8qKgotICAgKiBHZXQgdGhlIHZhbGlkYXRvciBzcGVjaWZpZWQgaW4gdGhpcyBkZWxlZ2F0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFdTREwgMS4xIHZhbGlkYXRvciBzcGVjaWZpZWQgYnkgdGhpcyBkZWxlZ2F0ZS4KLSAgICovCi0gIHB1YmxpYyBJV1NETDExVmFsaWRhdG9yIGdldFZhbGlkYXRvcigpCi0gIHsKLSAgICBpZiAodmFsaWRhdG9yID09IG51bGwpCi0gICAgewotICAgICAgdmFsaWRhdG9yID0gbG9hZFZhbGlkYXRvcigpOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYWJzdHJhY3QgSVdTREwxMVZhbGlkYXRvciBsb2FkVmFsaWRhdG9yKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExEb2N1bWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMRG9jdW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdhODEwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExEb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvbkRlc2VyaWFsaXplcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmRvbS5FbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRWxlbWVudE5TSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuRWxlbWVudExvY2F0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5RTmFtZVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5YUGF0aFV0aWxzOwotCi0vKioKLSAqIEEgV1NETCBkb2N1bWVudCB0aGF0IGtub3dzIGhvdyB0byBwYXJzZSBpdHNlbGYuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMRG9jdW1lbnQKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdCBTVFlMRV9PTkVfV0FZID0gQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10geyBDb25zdGFudHMuRUxFTV9JTlBVVCB9KTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdCBTVFlMRV9SRVFVRVNUX1JFU1BPTlNFID0KLSAgICBBcnJheXMuYXNMaXN0KG5ldyBTdHJpbmdbXSB7IENvbnN0YW50cy5FTEVNX0lOUFVULCBDb25zdGFudHMuRUxFTV9PVVRQVVQgfSk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3QgU1RZTEVfU09MSUNJVF9SRVNQT05TRSA9Ci0gICAgQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10geyBDb25zdGFudHMuRUxFTV9PVVRQVVQsIENvbnN0YW50cy5FTEVNX0lOUFVUIH0pOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0IFNUWUxFX05PVElGSUNBVElPTiA9IEFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsgQ29uc3RhbnRzLkVMRU1fT1VUUFVUIH0pOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIF9FUlJPUl9NVUxUSVBMRV9UWVBFU19ERUZJTkVEID0gIl9FUlJPUl9NVUxUSVBMRV9UWVBFU19ERUZJTkVEIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIF9VTkFCTEVfVE9fSU1QT1JUX05PX0xPQ0FUSU9OID0gIl9VTkFCTEVfVE9fSU1QT1JUX05PX0xPQ0FUSU9OIjsKLQotICBwcm90ZWN0ZWQgRXh0ZW5zaW9uUmVnaXN0cnkgZXh0UmVnID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyBmYWN0b3J5SW1wbE5hbWUgPSBudWxsOwotCi0gIC8vIHN0b3JlIHRoZSBlbGVtZW50IGxvY2F0aW9ucyB3aXRoaW4gdGhlIGZpbGUgLSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycwotICAvLyB0aGUgbG9jYXRpb24gaW5mbyBpcyBzdG9yZWQgYXMgYW4gaW50IGFycmF5IG9mIGxlbmd0aCAyIHtsaW5lbnVtYmVyLCBjb2xudW1iZXJ9Ci0gIHByb3RlY3RlZCBIYXNodGFibGUgZWxlbWVudExvY2F0aW9ucyA9IG5ldyBIYXNodGFibGUoKTsKLSAgCi0gIC8vIGhvbGQgdGhlIHJlYWRlciBlcnJvcnMKLSAgcHJvdGVjdGVkIExpc3QgcmVhZGVyRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgTGlzdCByZWFkZXJXYXJuaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLSAgCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWYgPSBudWxsOwotICBwcml2YXRlIFNldCBpbXBvcnRlZERlZnMgPSBuZXcgVHJlZVNldCgpOwotICBwcml2YXRlIEVsZW1lbnQgdHlwZXNFbCA9IG51bGw7Ci0gIHByaXZhdGUgTGlzdCBtZXNzYWdlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBMaXN0IHBvcnR0eXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBMaXN0IGJpbmRpbmdzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcml2YXRlIExpc3Qgc2VydmljZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgTGlzdCBleHRlbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBpbnQgZGVwdGg7Ci0gIC8vIEhvbGQgdGhlIHNjaGVtYXMgdGhhdCBhcmUgaW1wb3J0ZWQgb3IgZGVjbGFyZWQgaW5saW5lIGluIHRoaXMgd3NkbCBkb2N1bWVudC4KLSAgcHJpdmF0ZSBMaXN0IHNjaGVtYXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbGluZm87Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuIFBlcmZvcm1zIGEgcHJlcGFyc2Ugb2YgdGhlIGRvY3VtZW50IGFuZCBoYW5kbGVzIGltcG9ydHMgYW5kIHR5cGVzLgotICAgKiAKLSAgICogQHBhcmFtIGRvY3VtZW50QmFzZVVSSSBUaGUgVVJJIG9mIHRoaXMgV1NETCBkb2N1bWVudC4KLSAgICogQHBhcmFtIGRlZkVsIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVwdGggVGhlIGRlcHRoIG9mIHRoaXMgZG9jdW1lbnQgaW4gYSBkb2N1bWVudCB0cmVlLgotICAgKiBAcGFyYW0gbWVzc2FnZWdlbmVyYXRvciBBIG1lc3NhZ2VnZW5lcmF0b3IgdXNlZCBmb3IgcmV0cmlldmluZyBzdHJpbmdzLgotICAgKiBAcGFyYW0gdmFsaW5mbyBBIFdTREwxMVZhbGlkYXRpb25JbmZvIG9iamVjdCBmb3IgcmVwb3J0aW5nIG1lc3NhZ2VzLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgRWxlbWVudCBkZWZFbCwgaW50IGRlcHRoLCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxpbmZvKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgdGhpcy5tZXNzYWdlZ2VuZXJhdG9yID0gbWVzc2FnZWdlbmVyYXRvcjsKLSAgICB0aGlzLnZhbGluZm8gPSB2YWxpbmZvOwotICAgIHRoaXMuZGVwdGggPSBkZXB0aDsKLSAgICAKLSAgICBjaGVja0VsZW1lbnROYW1lKGRlZkVsLCBDb25zdGFudHMuUV9FTEVNX0RFRklOSVRJT05TKTsKLSAgICAKLSAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgIChmYWN0b3J5SW1wbE5hbWUgIT0gbnVsbCkgPyBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZShmYWN0b3J5SW1wbE5hbWUpIDogV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICBkZWYgPSBmYWN0b3J5Lm5ld0RlZmluaXRpb24oKTsKLSAgICAvLyBGaXggZm9yIFdTREw0SiBhZGRpbmcgZGVmYXVsdCBXU0RMIG5hbWVzcGFjZSB3aGVuIG5vIGRlZmF1bHQKLSAgICAvLyBuYW1lc3BhY2UgaGFzIGJlZW4gZGVjbGFyZWQuCi0gICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgZml4IG9uY2UgZml4ZWQgaW4gV1NETDRKLgotICAgIGlmKGRlZi5nZXROYW1lc3BhY2UoIiIpICE9IG51bGwpCi0gICAgCWRlZi5nZXROYW1lc3BhY2VzKCkucmVtb3ZlKCIiKTsKLQotICAgIGlmIChleHRSZWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWYuc2V0RXh0ZW5zaW9uUmVnaXN0cnkoZXh0UmVnKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShkZWZFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShkZWZFbCwgQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSk7Ci0gICAgTmFtZWROb2RlTWFwIGF0dHJzID0gZGVmRWwuZ2V0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGRvY3VtZW50QmFzZVVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIGRlZi5zZXREb2N1bWVudEJhc2VVUkkoZG9jdW1lbnRCYXNlVVJJKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGRlZi5zZXRRTmFtZShuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCBuYW1lKSk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGRlZi5zZXRUYXJnZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlKTsKLSAgICB9Ci0KLSAgICBpbnQgc2l6ZSA9IGF0dHJzLmdldExlbmd0aCgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgQXR0ciBhdHRyID0gKEF0dHIpYXR0cnMuaXRlbShpKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBhdHRyLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgU3RyaW5nIGxvY2FsUGFydCA9IGF0dHIuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICBTdHJpbmcgdmFsdWUgPSBhdHRyLmdldFZhbHVlKCk7Ci0KLSAgICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbCAmJiBuYW1lc3BhY2VVUkkuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWE1MTlMpKQotICAgICAgewotICAgICAgICBpZiAobG9jYWxQYXJ0ICE9IG51bGwgJiYgIWxvY2FsUGFydC5lcXVhbHMoQ29uc3RhbnRzLkFUVFJfWE1MTlMpKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmLmFkZE5hbWVzcGFjZShsb2NhbFBhcnQsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBkZWYuYWRkTmFtZXNwYWNlKG51bGwsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZXJlIGFyZSBwcm9ibGVtcyB3aGVuIHRoZSBtb2RlbCBpcyBjcmVhdGVkIGFuZCB0aGUgb3JkZXIgb2YgZWxlbWVudHMgaXMgbm90Ci0gICAgLy8gSW1wb3J0IC0gVHlwZXMgLSBNZXNzYWdlIC0gUG9ydFR5cGUgLSBCaW5kaW5nIC0gU2VydmljZSBzbyB3ZSBuZWVkIHRvIHJlYWQgdGhlbQotICAgIC8vIGludG8gdGhlIG1vZGVsIGluIHRoYXQgb3JkZXIKLSAgICAvLyBQZXJmb3JtYW5jZSB3aXNlIHRoaXMgc2hvdWxkIGJlIG1vZGlmaWVkIGFzIHdlIGhhdmUgdG8gbWFrZSA1IGV4dHJhIGxvb3BzIHRocm91Z2gKLSAgICAvLyBhbGwgb2YgdGhlIGVsZW1lbnRzIGFzIGEgcmVzdWx0Ci0KLSAgICAvLyB0YWtlIGNhcmUgb2YgSW1wb3J0cywgVHlwZXMsIERvY3VtZW50YXRpb24gYW5kIGV4dGVuc2libGVlbGVtZW50cyB0b2dldGhlciAtIHNhdmVzIGEgcGFzcyBmb3IgRG9jdW1lbnRhdGlvbiAKLSAgICAvLyBsYXRlciBhbmQgRG9jcyBkb24ndCBlZmZlY3QgYW55dGhpbmcgZWxzZSAtIEltcG9ydHMgYW5kIFR5cGVzIGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSB0aGluZwotICAgIC8vIG5vIHByZWNvbmNlaXZlZCBpZGVhcyBhYm91dCBleHRlbnNpYmxlIGVsZW1lbnRzCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChkZWZFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotCi0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fSU1QT1JULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHRlbXBFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRVNQQUNFKTsKLSAgICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHRlbXBFbCwgQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04pOwotICAgICAgICBpZihsb2NhdGlvblVSSSA9PSBudWxsIHx8IGxvY2F0aW9uVVJJLmVxdWFscygiIikpCi0gICAgICAgIHsKLSAgICAgICAgICBhZGRSZWFkZXJFcnJvcihkZWYsIHRlbXBFbCwgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1VOQUJMRV9UT19JTVBPUlRfTk9fTE9DQVRJT04pKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBJbXBvcnRIb2xkZXIgaWggPSBuZXcgSW1wb3J0SG9sZGVyKG5hbWVzcGFjZVVSSSwgbG9jYXRpb25VUkksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSwgdGhpcywgZGVwdGgrMSwgdGVtcEVsLCBtZXNzYWdlZ2VuZXJhdG9yLCB2YWxpbmZvKTsKLSAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgaW1wb3J0IHRvIHRoZSBsaXN0IGlmIGl0IGlzIG5vdCBhbiBpbXBvcnQgZm9yIHRoaXMgZG9jdW1lbnQuCi0gICAgICAgICAgaWYoIWRvY3VtZW50QmFzZVVSSS5lcXVhbHMoaWguZ2V0TG9jYXRpb24oKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW1wb3J0ZWREZWZzLmFkZChpaCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNldExvY2F0aW9uKHRlbXBFbCwgdGVtcEVsKTsKLS8vICAgICAgICBpZiAoaW1wb3J0ZWREZWZzID09IG51bGwpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgaW1wb3J0ZWREZWZzID0gbmV3IEhhc2h0YWJsZSgpOwotLy8gICAgICAgIH0KLS8vICAgICAgICBpZiAoZG9jdW1lbnRCYXNlVVJJICE9IG51bGwpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgaW1wb3J0ZWREZWZzLnB1dChkb2N1bWVudEJhc2VVUkksIGRlZik7Ci0vLyAgICAgICAgfQotLy8gICAgICAgIGRlZi5hZGRJbXBvcnQocGFyc2VJbXBvcnQodGVtcEVsLCBkZWYsIGltcG9ydGVkRGVmcykpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgZGVmLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9UWVBFUywgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgaWYodHlwZXNFbCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0TG9jYXRpb24odGVtcEVsLCB0ZW1wRWwpOwotICAgICAgICAgIGFkZFJlYWRlckVycm9yKGRlZiwgdGVtcEVsLCBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfTVVMVElQTEVfVFlQRVNfREVGSU5FRCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHR5cGVzRWwgPSB0ZW1wRWw7Ci0gICAgICAgICAgcGFyc2VUeXBlcygpOwotICAgICAgICB9Ci0vLyAgICAgICAgZGVmLnNldFR5cGVzKHBhcnNlVHlwZXModGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX01FU1NBR0UsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VzLmFkZCh0ZW1wRWwpOwotICAgICAgICAvL2RlZi5hZGRNZXNzYWdlKHBhcnNlTWVzc2FnZSh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fUE9SVF9UWVBFLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBwb3J0dHlwZXMuYWRkKHRlbXBFbCk7Ci0gICAgICAgIC8vICAgICAgICAgICAgIFBvcnRUeXBlIHB0ID0gcGFyc2VQb3J0VHlwZSh0ZW1wRWwsIGRlZik7Ci0gICAgICAgIC8vICAgICAgICAgICAgIGlmKHB0ICE9IG51bGwpCi0gICAgICAgIC8vICAgICAgICAgICAgIHsKLSAgICAgICAgLy8gICAgICAgICAgZGVmLmFkZFBvcnRUeXBlKHB0KTsKLSAgICAgICAgLy8gICAgICAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fQklORElORywgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ3MuYWRkKHRlbXBFbCk7Ci0gICAgICAgIC8vZGVmLmFkZEJpbmRpbmcocGFyc2VCaW5kaW5nKHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9TRVJWSUNFLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBzZXJ2aWNlcy5hZGQodGVtcEVsKTsKLSAgICAgICAgLy9kZWYuYWRkU2VydmljZShwYXJzZVNlcnZpY2UodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZXh0ZWxlbWVudHMuYWRkKHRlbXBFbCk7Ci0gICAgICAgIC8vICAgICAgICBkZWYuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoCi0gICAgICAgIC8vICAgICAgICAgIHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRGVmaW5pdGlvbi5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBkZWZpbml0aW9ucyBlbGVtZW50IGZvciB0aGlzIGRvY3VtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudCBmb3IgdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGRlZjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCBhIHNldCBvZiB0aGUgaW1wb3J0cyBpbiB0aGlzIGRvY3VtZW50LgotICAgKiAKLSAgICogQHJldHVybiBBIHNldCBvZiB0aGUgaW1wb3J0cyBpbiB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFNldCBnZXRJbXBvcnRzKCkKLSAgewotICAgIHJldHVybiBpbXBvcnRlZERlZnM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGRlZgotICAgKiBAcGFyYW0gZG9jCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UKLSAgICogQHBhcmFtIGxvY2F0aW9uCi0gICAqLwotLy8gIHB1YmxpYyB2b2lkIHNldEltcG9ydChEZWZpbml0aW9uIGRlZiwgRWxlbWVudCBkb2MsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhdGlvbikKLS8vICB7Ci0vLyAgICBpZihsb2NhdGlvbiA9PSBudWxsIHx8IGxvY2F0aW9uLmVxdWFscygiIikpCi0vLyAgICB7Ci0vLyAgICAgIHZhbGluZm8uYWRkRXJyb3IoKV9VTkFCTEVfVE9fSU1QT1JUX05PX0xPQ0FUSU9OIAotLy8gICAgfQotLy8gICAgSW1wb3J0IGltcCA9IGRlZi5jcmVhdGVJbXBvcnQoKTsKLS8vICAgIGltcC5zZXREZWZpbml0aW9uKGRlZik7Ci0vLyAgICBpbXAuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZG9jKTsKLS8vICAgIGltcC5zZXROYW1lc3BhY2VVUkkobmFtZXNwYWNlKTsKLS8vICAgIGltcC5zZXRMb2NhdGlvblVSSShsb2NhdGlvbik7Ci0vLyAgICBkZWYuYWRkSW1wb3J0KGltcCk7Ci0vLyAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSB0eXBlcyBpbiB0aGUgV1NETCBkb2N1bWVudC4gSGFuZGxlcyBkb2N1bWVudGF0aW9uLCBpbXBvcnQgYW5kIHNjaGVtYQotICAgKiBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlVHlwZXMoKQotICB7Ci0gICAgVHlwZXMgdHlwZXMgPSBkZWYuY3JlYXRlVHlwZXMoKTsKLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQodHlwZXNFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHR5cGVzLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0ZW1wRWwuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgiaW1wb3J0IikpCi0gICAgICAgIC8vZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fSU1QT1JULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICAvLyB0aGlzIHNob3VsZG4ndCByZWFsbHkgYmUgdXNlZCBoZXJlIGJ1dCBhIGxpdHRsZSBoYWNrIHdpbGwgbWFrZQotICAgICAgICAvLyBsaWZlIGVhc2llcgotICAgICAgICAvL3BhcnNlSW1wb3J0KHRlbXBFbCwgZGVmLCAoTWFwKW5ldyBIYXNodGFibGUoKSk7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUodGVtcEVsLCBDb25zdGFudHMuQVRUUl9OQU1FU1BBQ0UpOwotICAgICAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUodGVtcEVsLCAic2NoZW1hTG9jYXRpb24iKTsKLSAgICAgICAgaW1wb3J0ZWREZWZzLmFkZChuZXcgSW1wb3J0SG9sZGVyKG5hbWVzcGFjZVVSSSwgbG9jYXRpb25VUkksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSwgdGhpcywgZGVwdGgrMSwgdGVtcEVsLCBtZXNzYWdlZ2VuZXJhdG9yLCB2YWxpbmZvKSk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgdHlwZXMuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChUeXBlcy5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSBwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KFR5cGVzLmNsYXNzLCB0ZW1wRWwsIGRlZik7Ci0gICAgICAgICAgdHlwZXMuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotICAgIGRlZi5zZXRUeXBlcyh0eXBlcyk7Ci0gICAgCi0gICAgdmFsaW5mby5zZXRFbGVtZW50TG9jYXRpb25zKGVsZW1lbnRMb2NhdGlvbnMpOwotICAgIExpc3QgdHlwZXNFbGVtcyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlmKHR5cGVzRWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciB0eXBlc0VsZW1zSXRlciA9IHR5cGVzRWxlbXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKHR5cGVzRWxlbXNJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgdHlwZUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpdHlwZXNFbGVtc0l0ZXIubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgSW5saW5lU2NoZW1hVmFsaWRhdG9yIHhzZFZhbCA9IG5ldyBJbmxpbmVTY2hlbWFWYWxpZGF0b3IoKTsKLSAgICAgICAgeHNkVmFsLnNldE1lc3NhZ2VHZW5lcmF0b3IobWVzc2FnZWdlbmVyYXRvcik7Ci0gICAgCi0gICAgICAgIExpc3QgcGFyZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgcGFyZW50cy5hZGQoZGVmKTsKLSAgICAgICAgcGFyZW50cy5hZGQoMCx0eXBlcyk7Ci0gICAgICAgIHhzZFZhbC52YWxpZGF0ZSh0eXBlRWxlbWVudCwgcGFyZW50cyx2YWxpbmZvKTsKLSAgICAgICAgWFNNb2RlbFtdIHR5cGVzU2NoZW1hcyA9IHZhbGluZm8uZ2V0U2NoZW1hcygpOwotICAgICAgICBMaXN0IHR5cGVzU2NoZW1hTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHR5cGVzU2NoZW1hcy5sZW5ndGg7IGkrKykKLSAgICAgICAgeyAgCi0gICAgICAgICAgdHlwZXNTY2hlbWFMaXN0LmFkZCh0eXBlc1NjaGVtYXNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIHNjaGVtYXMuYWRkQWxsKHR5cGVzU2NoZW1hTGlzdCk7Ci0gICAgICAgIHZhbGluZm8uY2xlYXJTY2hlbWFzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHZhbGluZm8uc2V0RWxlbWVudExvY2F0aW9ucyhudWxsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBtZXNzYWdlcyBpbiB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VNZXNzYWdlcygpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2VzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkZWYuYWRkTWVzc2FnZShwYXJzZU1lc3NhZ2UoKEVsZW1lbnQpbWVzc2FnZXMuZ2V0KGkpLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgIHt9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgdGhlIHBvcnRUeXBlcyBpbiB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VQb3J0dHlwZXMoKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0dHlwZXMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFBvcnRUeXBlIHB0ID0gcGFyc2VQb3J0VHlwZSgoRWxlbWVudClwb3J0dHlwZXMuZ2V0KGkpLCBkZWYpOwotICAgICAgICBpZiAocHQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGRlZi5hZGRQb3J0VHlwZShwdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgIHt9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgdGhlIGJpbmRpbmdzIGluIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUJpbmRpbmdzKCkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ3Muc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRlZi5hZGRCaW5kaW5nKHBhcnNlQmluZGluZygoRWxlbWVudCliaW5kaW5ncy5nZXQoaSksIGRlZikpOwotICAgICAgfQotICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAge30KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgc2VydmljZXMgaW4gdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlU2VydmljZXMoKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZGVmLmFkZFNlcnZpY2UocGFyc2VTZXJ2aWNlKChFbGVtZW50KXNlcnZpY2VzLmdldChpKSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICB7fQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGluIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVsZW1lbnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkZWYuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChEZWZpbml0aW9uLmNsYXNzLCAoRWxlbWVudClleHRlbGVtZW50cy5nZXQoaSksIGRlZikpOwotICAgICAgfQotICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAge30KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgdGhlIGdpdmVuIGxpc3Qgb2Ygc2NoZW1hcyB0byB0aGUgc2NoZW1hcyBmb3IgdGhpcyBkb2N1bWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWFzIFRoZSBsaXN0IG9mIHNjaGVtYXMgdG8gYWRkIHRvIHRoaXMgZG9jdW1lbnQncyBzY2hlbWFzLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkU2NoZW1hcyhMaXN0IHNjaGVtYXMpCi0gIHsKLSAgICB0aGlzLnNjaGVtYXMuYWRkQWxsKHNjaGVtYXMpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBzY2hlbWFzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRvY3VtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXMoKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgc3BlY2lmaWVkIGJpbmRpbmcuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0VsIFRoZSBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGJpbmRpbmcgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZyBwYXJzZUJpbmRpbmcoRWxlbWVudCBiaW5kaW5nRWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gbnVsbDsKLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShiaW5kaW5nRWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIHBvcnRUeXBlTmFtZTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBwb3J0VHlwZU5hbWUgPSBET01VdGlscy5nZXRRdWFsaWZpZWRBdHRyaWJ1dGVWYWx1ZShiaW5kaW5nRWwsIENvbnN0YW50cy5BVFRSX1RZUEUsIENvbnN0YW50cy5FTEVNX0JJTkRJTkcsIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIG1lc3NhZ2UgbmFtZQotICAgICAgcG9ydFR5cGVOYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShiaW5kaW5nRWwsICJ0eXBlIikpOwotICAgIH0KLQotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gbnVsbDsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgUU5hbWUgYmluZGluZ05hbWUgPSBuZXcgUU5hbWUoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lKTsKLQotICAgICAgYmluZGluZyA9IGRlZi5nZXRCaW5kaW5nKGJpbmRpbmdOYW1lKTsKLQotICAgICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZyA9IGRlZi5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgICAgIGJpbmRpbmcuc2V0UU5hbWUoYmluZGluZ05hbWUpOwotICAgICAgfQotICAgICAgLy8gcmVwb3J0IGFuIGVycm9yIGlmIGEgYmluZGluZyB3aXRoIHRoaXMgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQKLSAgICAgIGVsc2UgaWYgKCFiaW5kaW5nLmlzVW5kZWZpbmVkKCkpCi0gICAgICB7Ci0gICAgICAgIC8vYWRkUmVhZGVyRXJyb3IoZGVmLGJpbmRpbmdFbCwgIl9CSU5ESU5HX05BTUVfQUxSRUFEWV9ERUZJTkVEIik7ICAgICAgIAotICAgICAgICBhZGRSZWFkZXJFcnJvcigKLSAgICAgICAgICBkZWYsCi0gICAgICAgICAgYmluZGluZ0VsLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfQklORElOR19OQU1FX0FMUkVBRFlfREVGSU5FRCIsICInIiArIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSArICInIikpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYmluZGluZyA9IGRlZi5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgfQotCi0gICAgLy8gV2hldGhlciBpdCB3YXMgcmV0cmlldmVkIG9yIGNyZWF0ZWQsIHRoZSBkZWZpbml0aW9uIGhhcyBiZWVuIGZvdW5kLgotICAgIGJpbmRpbmcuc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIGlmIChwb3J0VHlwZU5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwb3J0VHlwZSA9IGRlZi5nZXRQb3J0VHlwZShwb3J0VHlwZU5hbWUpOwotCi0gICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcG9ydFR5cGUgPSBkZWYuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICAgICAgcG9ydFR5cGUuc2V0UU5hbWUocG9ydFR5cGVOYW1lKTsKLSAgICAgICAgZGVmLmFkZFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgIH0KLQotICAgICAgYmluZGluZy5zZXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChiaW5kaW5nRWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9PUEVSQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcuYWRkQmluZGluZ09wZXJhdGlvbihwYXJzZUJpbmRpbmdPcGVyYXRpb24odGVtcEVsLCBwb3J0VHlwZSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChCaW5kaW5nLmNsYXNzLCB0ZW1wRWwsIGRlZikpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKGJpbmRpbmcsIGJpbmRpbmdFbCk7Ci0KLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmdPcGVyYXRpb25FbCBUaGUgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHBhcmFtIHBvcnRUeXBlIFRoZSBwb3J0VHlwZSB0aGUgYmluZGluZyByZWZlcmVuY2VzLgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nT3BlcmF0aW9uIHBhcnNlQmluZGluZ09wZXJhdGlvbihFbGVtZW50IGJpbmRpbmdPcGVyYXRpb25FbCwgUG9ydFR5cGUgcG9ydFR5cGUsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBkZWYuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdPcGVyYXRpb25FbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGJpbmRpbmdPcGVyYXRpb25FbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0lOUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChwYXJzZUJpbmRpbmdJbnB1dCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fT1VUUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQocGFyc2VCaW5kaW5nT3V0cHV0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9GQVVMVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRCaW5kaW5nRmF1bHQocGFyc2VCaW5kaW5nRmF1bHQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAvL1N0cmluZyBpbnB1dE5hbWUgPSAoYmluZGluZ0lucHV0ICE9IG51bGwgPyBiaW5kaW5nSW5wdXQuZ2V0TmFtZSgpIDogbnVsbCk7Ci0gICAgICAvL1N0cmluZyBvdXRwdXROYW1lID0gKGJpbmRpbmdPdXRwdXQgIT0gbnVsbCA/IGJpbmRpbmdPdXRwdXQuZ2V0TmFtZSgpIDogbnVsbCk7Ci0KLSAgICAgIC8vIGhhY2sgY29kZSB0byBnZXQgYXQgb3BlcmF0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIHdpdGggdGhlIHNhbWUgbmFtZSBidXQgZGlmZmVyZW50Ci0gICAgICAvLyBpbnB1dHMgYW5kIG91dHB1dHMgCi0gICAgICBPcGVyYXRpb24gb3AgPSBudWxsOwotICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgLy8gZ2V0IGEgbGlzdCBvZiBhbGwgb3BlcmF0aW9ucyB3aXRoIG1hdGNoaW5nIG5hbWVzCi0gICAgICBMaXN0IG1hdGNoaW5nT3BlcmF0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEl0ZXJhdG9yIGlPcGVyYXRpb25zID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGlPcGVyYXRpb25zLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wZXIgPSAoT3BlcmF0aW9uKWlPcGVyYXRpb25zLm5leHQoKTsKLSAgICAgICAgaWYgKG9wZXIuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgbWF0Y2hpbmdPcGVyYXRpb25zLmFkZChvcGVyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAobWF0Y2hpbmdPcGVyYXRpb25zICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlJ3Mgb25seSBvbmUgbWF0Y2hpbmcgb3BlcmF0aW9uIHRoaXMgaXMgd2hhdCB3ZSdyZSByZWZlcnJpbmcgdG8uCi0gICAgICAgIC8vIE9ubHkgbWF0Y2hpbmcgaWYgYmluZGluZyBvcGVyYXRpb24gaW5wdXQgbmFtZSBhbmQgb3V0cHV0IG5hbWUgYXJlCi0gICAgICAgIC8vIGJvdGggbnVsbCBvciB0aGUgc2FtZSBhcyB0aGUgcG9ydFR5cGUgb3BlcmF0aW9uIGlucHV0IGFuZCBvdXRwdXQgbmFtZXMuCi0gICAgICAgIC8vIHRoZSBwb3J0VHlwZSBvcGVyYXRpb24gbmFtZQotICAgICAgICBpZiAobWF0Y2hpbmdPcGVyYXRpb25zLnNpemUoKSA9PSAxKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gb25seSBzYXkgdGhlIHNpbmdsZSBvcGVyYXRpb24gaXMgdGhlIG9uZSB3ZSdyZSBsb29raW5nIGZvciBpZiB0aGUgbmFtZXMKLSAgICAgICAgICAvLyBvZiB0aGUgYmluZGluZyBpbnB1dCBhbmQgb3V0cHV0IGFyZSBub3Qgc3BlY2lmaWVkCi0gICAgICAgICAgT3BlcmF0aW9uIHRlbXBPcCA9IChPcGVyYXRpb24pbWF0Y2hpbmdPcGVyYXRpb25zLmdldCgwKTsKLSAgICAgICAgICBib29sZWFuIGlucHV0T0sgPSBmYWxzZTsKLSAgICAgICAgICBib29sZWFuIG91dHB1dE9LID0gZmFsc2U7Ci0gICAgICAgICAgSW5wdXQgdGVtcElucHV0ID0gdGVtcE9wLmdldElucHV0KCk7Ci0gICAgICAgICAgT3V0cHV0IHRlbXBPdXRwdXQgPSB0ZW1wT3AuZ2V0T3V0cHV0KCk7Ci0KLSAgICAgICAgICAvLyBvcmRlciBpcyBpbXBvcnRhbnQgaW4gdGhlc2UgY29uZGl0aW9ucy4gY29uZGl0aW9uIDIgbXVzdCBmYWlsIGZvciAzIHRvIHdvcmsKLSAgICAgICAgICAvLyBjaGVjayB0aGUgaW5wdXQKLSAgICAgICAgICBpZiAodGVtcElucHV0ID09IG51bGwgJiYgYmluZGluZ0lucHV0ID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRPSyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGJpbmRpbmdJbnB1dCA9PSBudWxsIHx8IGJpbmRpbmdJbnB1dC5nZXROYW1lKCkgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dE9LID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodGVtcElucHV0ICE9IG51bGwgJiYgYmluZGluZ0lucHV0LmdldE5hbWUoKS5lcXVhbHModGVtcElucHV0LmdldE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRPSyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGNoZWNrIHRoZSBvdXRwdXQKLSAgICAgICAgICBpZiAodGVtcE91dHB1dCA9PSBudWxsICYmIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRPSyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGJpbmRpbmdPdXRwdXQgPT0gbnVsbCB8fCBiaW5kaW5nT3V0cHV0LmdldE5hbWUoKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dE9LID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodGVtcE91dHB1dCAhPSBudWxsICYmIGJpbmRpbmdPdXRwdXQuZ2V0TmFtZSgpLmVxdWFscyh0ZW1wT3V0cHV0LmdldE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3V0cHV0T0sgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaW5wdXRPSyAmJiBvdXRwdXRPSykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvcCA9IHRlbXBPcDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gICAgICAgICAgb3AgPSAoT3BlcmF0aW9uKSBtYXRjaGluZ09wZXJhdGlvbnMuZ2V0KDApOwotICAgICAgICB9Ci0gICAgICAgIC8vIG90aGVyd2lzZSBmaW5kIHRoZSBvcGVyYXRpb24gd2l0aCB0aGUgc2FtZSBuYW1lLCBpbnB1dG5hbWUsIG91dHB1dG5hbWUgc2lnbmF0dXJlCi0gICAgICAgIGlmIChtYXRjaGluZ09wZXJhdGlvbnMgIT0gbnVsbCAmJiBvcCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaU1hdGNoaW5nT3BlcmF0aW9ucyA9IG1hdGNoaW5nT3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpTWF0Y2hpbmdPcGVyYXRpb25zLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gaW5wdXROYW1lc0VxdWFsID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sZWFuIG91dHB1dE5hbWVzRXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyID0gKE9wZXJhdGlvbilpTWF0Y2hpbmdPcGVyYXRpb25zLm5leHQoKTsKLSAgICAgICAgICAgIC8vICAgICAgICAgIGlmIChvcGVyLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIC8vICAgICAgICAgIHsKLSAgICAgICAgICAgIElucHV0IG9wSW5wdXQgPSBvcGVyLmdldElucHV0KCk7Ci0gICAgICAgICAgICBpZiAob3BJbnB1dCAhPSBudWxsICYmIGJpbmRpbmdJbnB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgb3BJbnB1dE5hbWUgPSBvcElucHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGJpbmRpbmdJbnB1dE5hbWUgPSBiaW5kaW5nSW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICBpZiAob3BJbnB1dE5hbWUgIT0gbnVsbCAmJiBvcElucHV0TmFtZS5lcXVhbHNJZ25vcmVDYXNlKGJpbmRpbmdJbnB1dE5hbWUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmIChvcElucHV0TmFtZSA9PSBudWxsICYmIGJpbmRpbmdJbnB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlucHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG9wSW5wdXQgPT0gbnVsbCAmJiBiaW5kaW5nSW5wdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE91dHB1dCBvcE91dHB1dCA9IG9wZXIuZ2V0T3V0cHV0KCk7Ci0gICAgICAgICAgICBpZiAob3BPdXRwdXQgIT0gbnVsbCAmJiBiaW5kaW5nT3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBvcE91dHB1dE5hbWUgPSBvcE91dHB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBiaW5kaW5nT3V0cHV0TmFtZSA9IGJpbmRpbmdPdXRwdXQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICBpZiAob3BPdXRwdXROYW1lICE9IG51bGwgJiYgb3BPdXRwdXROYW1lLmVxdWFsc0lnbm9yZUNhc2UoYmluZGluZ091dHB1dE5hbWUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAob3BPdXRwdXROYW1lID09IG51bGwgJiYgYmluZGluZ091dHB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChvcE91dHB1dCA9PSBudWxsICYmIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5wdXROYW1lc0VxdWFsICYmIG91dHB1dE5hbWVzRXF1YWwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG9wID0gb3BlcjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvL30KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vT3BlcmF0aW9uIG9wID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9uKG5hbWUsIGlucHV0TmFtZSwgb3V0cHV0TmFtZSk7Ci0KLSAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgewotICAgICAgICBvcCA9IGRlZi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgICAgb3Auc2V0TmFtZShuYW1lKTsKLSAgICAgICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wKTsKLSAgICAgIH0KLQotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24ob3ApOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYmluZGluZ09wZXJhdGlvbiwgYmluZGluZ09wZXJhdGlvbkVsKTsKLQotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBiaW5kaW5nIGlucHV0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0lucHV0RWwgVGhlIGJpbmRpbmcgaW5wdXQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgYmluZGluZyBpbnB1dCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nSW5wdXQgcGFyc2VCaW5kaW5nSW5wdXQoRWxlbWVudCBiaW5kaW5nSW5wdXRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gZGVmLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdJbnB1dEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ0lucHV0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChiaW5kaW5nSW5wdXRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdJbnB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChCaW5kaW5nSW5wdXQuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYmluZGluZ0lucHV0LCBiaW5kaW5nSW5wdXRFbCk7Ci0KLSAgICByZXR1cm4gYmluZGluZ0lucHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgYmluZGluZyBvdXRwdXQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nT3V0cHV0RWwgVGhlIGJpbmRpbmcgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGJpbmRpbmcgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPdXRwdXQgcGFyc2VCaW5kaW5nT3V0cHV0KEVsZW1lbnQgYmluZGluZ091dHB1dEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGRlZi5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoYmluZGluZ091dHB1dEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ091dHB1dC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoYmluZGluZ091dHB1dEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ091dHB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nT3V0cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoQmluZGluZ091dHB1dC5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihiaW5kaW5nT3V0cHV0LCBiaW5kaW5nT3V0cHV0RWwpOwotCi0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBiaW5kaW5nIGZhdWx0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0ZhdWx0RWwgVGhlIGJpbmRpbmcgZmF1bHQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgYmluZGluZyBmYXVsdCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nRmF1bHQgcGFyc2VCaW5kaW5nRmF1bHQoRWxlbWVudCBiaW5kaW5nRmF1bHRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gZGVmLmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdGYXVsdEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ0ZhdWx0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChiaW5kaW5nRmF1bHRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdGYXVsdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nRmF1bHQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChCaW5kaW5nRmF1bHQuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYmluZGluZ0ZhdWx0LCBiaW5kaW5nRmF1bHRFbCk7Ci0KLSAgICByZXR1cm4gYmluZGluZ0ZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgbWVzc2FnZSBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIG1zZ0VsIFRoZSBtZXNzYWdlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIG1lc3NhZ2UgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZSBwYXJzZU1lc3NhZ2UoRWxlbWVudCBtc2dFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBNZXNzYWdlIG1zZyA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUobXNnRWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBRTmFtZSBtZXNzYWdlTmFtZSA9IG5ldyBRTmFtZShkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUpOwotCi0gICAgICBtc2cgPSBkZWYuZ2V0TWVzc2FnZShtZXNzYWdlTmFtZSk7Ci0KLSAgICAgIGlmIChtc2cgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbXNnID0gZGVmLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgbXNnLnNldFFOYW1lKG1lc3NhZ2VOYW1lKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFtc2cuaXNVbmRlZmluZWQoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlIGFzIGEgbWVzc2FnZSB3aXRoIHRoaXMgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQKLSAgICAgICAgYWRkUmVhZGVyRXJyb3IoCi0gICAgICAgICAgZGVmLAotICAgICAgICAgIG1zZ0VsLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfTUVTU0FHRV9OQU1FX0FMUkVBRFlfREVGSU5FRCIsICInIiArIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgIiciKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBtc2cgPSBkZWYuY3JlYXRlTWVzc2FnZSgpOwotICAgIH0KLQotICAgIC8vIFdoZXRoZXIgaXQgd2FzIHJldHJpZXZlZCBvciBjcmVhdGVkLCB0aGUgZGVmaW5pdGlvbiBoYXMgYmVlbiBmb3VuZC4KLSAgICBtc2cuc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQobXNnRWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBtc2cuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX1BBUlQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIG1zZy5hZGRQYXJ0KHBhcnNlUGFydCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBYTUwgVmFsaWRhdGlvbiB3aWxsIGNhdGNoIHRoaXMKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKHRlbXBFbCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24obXNnLCBtc2dFbCk7Ci0KLSAgICByZXR1cm4gbXNnOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgcGFydCBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHBhcnRFbCBUaGUgcGFydCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBwYXJ0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFBhcnQgcGFyc2VQYXJ0KEVsZW1lbnQgcGFydEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFBhcnQgcGFydCA9IGRlZi5jcmVhdGVQYXJ0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUocGFydEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIFFOYW1lIGVsZW1lbnROYW1lOwotICAgIHRyeQotICAgIHsKLSAgICAgIGVsZW1lbnROYW1lID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUocGFydEVsLCBDb25zdGFudHMuQVRUUl9FTEVNRU5ULCBDb25zdGFudHMuRUxFTV9NRVNTQUdFLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBlbGVtZW50IG5hbWUKLSAgICAgIGVsZW1lbnROYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShwYXJ0RWwsIENvbnN0YW50cy5BVFRSX0VMRU1FTlQpKTsKLSAgICB9Ci0KLSAgICBRTmFtZSB0eXBlTmFtZTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICB0eXBlTmFtZSA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfVFlQRSwKLSAgICAgICAgLy8gQ29ycmVjdGVkIC0gd2FzIEFUVFJfRUxFTUVOVAotICBDb25zdGFudHMuRUxFTV9NRVNTQUdFLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBlbGVtZW50IGF0dHJpYnV0ZQotICAgICAgdHlwZU5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfVFlQRSkpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcGFydC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0RWxlbWVudE5hbWUoZWxlbWVudE5hbWUpOwotICAgIH0KLQotICAgIGlmICh0eXBlTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0VHlwZU5hbWUodHlwZU5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocGFydEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgcGFydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBYTUwgVmFsaWRhdGlvbiB3aWxsIGNhdGNoIHRoaXMKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKHRlbXBFbCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIE1hcCBleHRlbnNpb25BdHRyaWJ1dGVzID0gcGFydC5nZXRFeHRlbnNpb25BdHRyaWJ1dGVzKCk7Ci0KLSAgICBleHRlbnNpb25BdHRyaWJ1dGVzLnB1dEFsbChnZXRQYXJ0QXR0cmlidXRlcyhwYXJ0RWwsIGRlZikpOwotCi0gICAgLy8gTmVlZCB0byBkbyBzb21ldGhpbmcgaGVyZSB0byBsb2NhdGUgcGFydCBkZWZpbml0aW9uLgotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihwYXJ0LCBwYXJ0RWwpOwotCi0gICAgcmV0dXJuIHBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEgbWFwIG9mIHRoZSBwYXJ0IGF0dHJpYnV0ZXMuCi0gICAqIAotICAgKiBAcGFyYW0gZWwgVGhlIHBhcnQgYXR0cmlidXRlcyBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbnRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBtYXAgY29udGFpbmluZyB0aGUgcGFydCBhdHRyaWJ1dGVzLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBNYXAgZ2V0UGFydEF0dHJpYnV0ZXMoRWxlbWVudCBlbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBNYXAgYXR0cmlidXRlcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBlbC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGF0dHMgPSBub2RlTWFwLmdldExlbmd0aCgpOwotCi0gICAgZm9yIChpbnQgYSA9IDA7IGEgPCBhdHRzOyBhKyspCi0gICAgewotICAgICAgQXR0ciBhdHRyaWJ1dGUgPSAoQXR0cilub2RlTWFwLml0ZW0oYSk7Ci0gICAgICBTdHJpbmcgbE5hbWUgPSBhdHRyaWJ1dGUuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICBTdHJpbmcgblNwYWNlID0gYXR0cmlidXRlLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgU3RyaW5nIHByZWZpeCA9IGF0dHJpYnV0ZS5nZXRQcmVmaXgoKTsKLSAgICAgIFFOYW1lIG5hbWUgPSBuZXcgUU5hbWUoblNwYWNlLCBsTmFtZSk7Ci0KLSAgICAgIGlmIChuU3BhY2UgIT0gbnVsbCAmJiAhblNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1dTREwpKQotICAgICAgewotICAgICAgICBpZiAoIW5TcGFjZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YTUxOUykpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgc3RyVmFsdWUgPSBhdHRyaWJ1dGUuZ2V0VmFsdWUoKTsKLSAgICAgICAgICBRTmFtZSBxVmFsdWUgPSBudWxsOwotCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcVZhbHVlID0gRE9NVXRpbHMuZ2V0UU5hbWUoc3RyVmFsdWUsIGVsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBxVmFsdWUgPSBuZXcgUU5hbWUoc3RyVmFsdWUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGF0dHJpYnV0ZXMucHV0KG5hbWUsIHFWYWx1ZSk7Ci0KLSAgICAgICAgICBTdHJpbmcgdGVtcE5TVXJpID0gZGVmLmdldE5hbWVzcGFjZShwcmVmaXgpOwotCi0gICAgICAgICAgd2hpbGUgKHRlbXBOU1VyaSAhPSBudWxsICYmICF0ZW1wTlNVcmkuZXF1YWxzKG5TcGFjZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJlZml4ICs9ICJfIjsKLSAgICAgICAgICAgIHRlbXBOU1VyaSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBkZWYuYWRkTmFtZXNwYWNlKHByZWZpeCwgblNwYWNlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgICFsTmFtZS5lcXVhbHMoQ29uc3RhbnRzLkFUVFJfTkFNRSkKLSAgICAgICAgICAmJiAhbE5hbWUuZXF1YWxzKENvbnN0YW50cy5BVFRSX0VMRU1FTlQpCi0gICAgICAgICAgJiYgIWxOYW1lLmVxdWFscyhDb25zdGFudHMuQVRUUl9UWVBFKSkKLSAgICAgIHsKLSAgICAgICAgV1NETEV4Y2VwdGlvbiB3c2RsRXhjID0KLSAgICAgICAgICBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgICAgIFdTRExFeGNlcHRpb24uSU5WQUxJRF9XU0RMLAotICAgICAgICAgICAgIkVuY291bnRlcmVkIGlsbGVnYWwgIgotICAgICAgICAgICAgICArICJwYXJ0IGV4dGVuc2lvbiAiCi0gICAgICAgICAgICAgICsgImF0dHJpYnV0ZSAnIgotICAgICAgICAgICAgICArIG5hbWUKLSAgICAgICAgICAgICAgKyAiJy4gRXh0ZW5zaW9uICIKLSAgICAgICAgICAgICAgKyAiYXR0cmlidXRlcyBtdXN0IGJlIGluICIKLSAgICAgICAgICAgICAgKyAiYSBuYW1lc3BhY2Ugb3RoZXIgdGhhbiAiCi0gICAgICAgICAgICAgICsgIldTREwncy4iKTsKLQotICAgICAgICB3c2RsRXhjLnNldExvY2F0aW9uKFhQYXRoVXRpbHMuZ2V0WFBhdGhFeHByRnJvbU5vZGUoZWwpKTsKLSAgICAgICAgLy90aHJvdyB3c2RsRXhjOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYXR0cmlidXRlcywgZWwpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBwb3J0VHlwZSBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHBvcnRUeXBlRWwgVGhlIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgcG9ydFR5cGUgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgUG9ydFR5cGUgcGFyc2VQb3J0VHlwZShFbGVtZW50IHBvcnRUeXBlRWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0KLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUocG9ydFR5cGVFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFFOYW1lIHBvcnRUeXBlTmFtZSA9IG5ldyBRTmFtZShkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUpOwotCi0gICAgICBwb3J0VHlwZSA9IGRlZi5nZXRQb3J0VHlwZShwb3J0VHlwZU5hbWUpOwotCi0gICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcG9ydFR5cGUgPSBkZWYuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICAgICAgcG9ydFR5cGUuc2V0UU5hbWUocG9ydFR5cGVOYW1lKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKQotICAgICAgewotICAgICAgICAvLyBpZiB0aGUgUG9ydFR5cGUgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIHByb2R1Y2UgYW4gZXJyb3IgYW5kIHJldHVybiBudWxsCi0gICAgICAgIGFkZFJlYWRlckVycm9yKAotICAgICAgICAgIGRlZiwKLSAgICAgICAgICBwb3J0VHlwZUVsLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfUE9SVFRZUEVfTkFNRV9BTFJFQURZX0RFRklORUQiLCAiJyIgKyBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgIiciKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcG9ydFR5cGUgPSBkZWYuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICB9Ci0KLSAgICAvLyBXaGV0aGVyIGl0IHdhcyByZXRyaWV2ZWQgb3IgY3JlYXRlZCwgdGhlIGRlZmluaXRpb24gaGFzIGJlZW4gZm91bmQuCi0gICAgcG9ydFR5cGUuc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocG9ydFR5cGVFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHBvcnRUeXBlLnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9PUEVSQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIC8vIG1vZGlmaWVkIHNvIGR1cGxpY2F0ZSBvcGVyYXRpb25zIHdpbGwgbm90IGJlIGFkZGVkIHRvIHBvcnR0eXBlIAotICAgICAgICBPcGVyYXRpb24gb3AgPSBwYXJzZU9wZXJhdGlvbih0ZW1wRWwsIHBvcnRUeXBlLCBkZWYpOwotICAgICAgICBpZiAob3AgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy9wb3J0VHlwZS5hZGRPcGVyYXRpb24ocGFyc2VPcGVyYXRpb24odGVtcEVsLCBwb3J0VHlwZSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIHNvbWV0aGluZyBlbHNlIHRoYXQgc2hvdWxkbid0IGJlIGhlcmUKLSAgICAgICAgLy8gTkVFRCBUTyBBREQgVE8gRVJST1IgTElTVAotICAgICAgICAvL0RPTVV0aWxzLnRocm93V1NETEV4Y2VwdGlvbih0ZW1wRWwpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKHBvcnRUeXBlLCBwb3J0VHlwZUVsKTsKLQotICAgIHJldHVybiBwb3J0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIG9wRWwgVGhlIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgVGhlIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBPcGVyYXRpb24gcGFyc2VPcGVyYXRpb24oRWxlbWVudCBvcEVsLCBQb3J0VHlwZSBwb3J0VHlwZSwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBPcGVyYXRpb24gb3AgPSBudWxsOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKG9wRWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFN0cmluZyBwYXJhbWV0ZXJPcmRlclN0ciA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShvcEVsLCBDb25zdGFudHMuQVRUUl9QQVJBTUVURVJfT1JERVIpOwotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQob3BFbCk7Ci0gICAgTGlzdCBtZXNzYWdlT3JkZXIgPSBuZXcgVmVjdG9yKCk7Ci0gICAgRWxlbWVudCBkb2NFbCA9IG51bGw7Ci0gICAgSW5wdXQgaW5wdXQgPSBudWxsOwotICAgIE91dHB1dCBvdXRwdXQgPSBudWxsOwotICAgIExpc3QgZmF1bHRzID0gbmV3IFZlY3RvcigpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBkb2NFbCA9IHRlbXBFbDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0lOUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBpbnB1dCA9IHBhcnNlSW5wdXQodGVtcEVsLCBkZWYpOwotICAgICAgICBtZXNzYWdlT3JkZXIuYWRkKENvbnN0YW50cy5FTEVNX0lOUFVUKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX09VVFBVVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgb3V0cHV0ID0gcGFyc2VPdXRwdXQodGVtcEVsLCBkZWYpOwotICAgICAgICBtZXNzYWdlT3JkZXIuYWRkKENvbnN0YW50cy5FTEVNX09VVFBVVCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9GQVVMVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgZmF1bHRzLmFkZChwYXJzZUZhdWx0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGludmFsaWQgZWxlbWVudCBpbiB0aGUgb3BlcmF0aW9uCi0gICAgICAgIC8vIFhNTCBjaGVjayB3aWxsIGNhdGNoIHRoaXMKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKHRlbXBFbCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGlucHV0TmFtZSA9IChpbnB1dCAhPSBudWxsID8gaW5wdXQuZ2V0TmFtZSgpIDogbnVsbCk7Ci0gICAgICBTdHJpbmcgb3V0cHV0TmFtZSA9IChvdXRwdXQgIT0gbnVsbCA/IG91dHB1dC5nZXROYW1lKCkgOiBudWxsKTsKLQotICAgICAgYm9vbGVhbiBvcERlZmluZWQgPSBmYWxzZTsKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0KLSAgICAgICAgLy9vcCA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbihuYW1lLCBpbnB1dE5hbWUsIG91dHB1dE5hbWUpOwotCi0gICAgICAgIC8vT3BlcmF0aW9uIG9wID0gbnVsbDsKLSAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgICBpZiAob3BlcmF0aW9ucyAhPSBudWxsKQotICAgICAgICB7Ci0KLSAgICAgICAgICBJdGVyYXRvciBpT3BlcmF0aW9ucyA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaU9wZXJhdGlvbnMuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xlYW4gaW5wdXROYW1lc0VxdWFsID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sZWFuIG91dHB1dE5hbWVzRXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyID0gKE9wZXJhdGlvbilpT3BlcmF0aW9ucy5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAob3Blci5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnB1dCBvcElucHV0ID0gb3Blci5nZXRJbnB1dCgpOwotICAgICAgICAgICAgICBpZiAob3BJbnB1dCAhPSBudWxsICYmIGlucHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgb3BJbnB1dE5hbWUgPSBvcElucHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAob3BJbnB1dE5hbWUgIT0gbnVsbCAmJiBpbnB1dE5hbWUgIT0gbnVsbCAmJiBvcElucHV0TmFtZS5lcXVhbHMoaW5wdXROYW1lKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpbnB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvcElucHV0TmFtZSA9PSBudWxsICYmIGlucHV0TmFtZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlucHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKG9wSW5wdXQgPT0gbnVsbCAmJiBpbnB1dCA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBPdXRwdXQgb3BPdXRwdXQgPSBvcGVyLmdldE91dHB1dCgpOwotICAgICAgICAgICAgICBpZiAob3BPdXRwdXQgIT0gbnVsbCAmJiBvdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBvcE91dHB1dE5hbWUgPSBvcE91dHB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wT3V0cHV0TmFtZSAhPSBudWxsICYmIG91dHB1dE5hbWUgIT0gbnVsbCAmJiBvcE91dHB1dE5hbWUuZXF1YWxzKG91dHB1dE5hbWUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG91dHB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvcE91dHB1dE5hbWUgPT0gbnVsbCAmJiBvdXRwdXROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKG9wT3V0cHV0ID09IG51bGwgJiYgb3V0cHV0ID09IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoaW5wdXROYW1lc0VxdWFsICYmIG91dHB1dE5hbWVzRXF1YWwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvcCA9IG9wZXI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgb3BEZWZpbmVkID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwgLyomJiAhb3AuaXNVbmRlZmluZWQoKSovCi0gICAgICAgICkKLSAgICAgIHsKLSAgICAgICAgLy9vcCA9IG51bGw7Ci0gICAgICAgIG9wRGVmaW5lZCA9IHRydWU7Ci0KLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwgJiYgIW9wRGVmaW5lZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGlucHV0TmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSW5wdXQgdGVtcEluID0gb3AuZ2V0SW5wdXQoKTsKLQotICAgICAgICAgIGlmICh0ZW1wSW4gIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGVtcEluLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL29wID0gbnVsbDsKLSAgICAgICAgICAgICAgb3BEZWZpbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwgJiYgIW9wRGVmaW5lZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKG91dHB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIE91dHB1dCB0ZW1wT3V0ID0gb3AuZ2V0T3V0cHV0KCk7Ci0KLSAgICAgICAgICBpZiAodGVtcE91dCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0ZW1wT3V0LmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL29wID0gbnVsbDsKLSAgICAgICAgICAgICAgb3BEZWZpbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKG9wRGVmaW5lZCkKLSAgICAgIHsKLSAgICAgICAgLy8gaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUgd2l0aCB0aGUgc2FtZSBuYW1lIHdlJ3JlIGdvaW5nIHRvIHJldHVybiBudWxsLgotICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIFdTREwgMS4yIHdvcmtpbmcgZHJhZnQgb3BlcmF0aW9uIG92ZXJsb2FkaW5nIGlzIG5vIGxvbmdlciBhbGxvd2VkLgotICAgICAgICAvLyBHb2luZyB0byB1c2UgdGhhdCBoZXJlIHRvIHNhdmUgYSBsb3Qgb2Ygd29yawotICAgICAgICBzZXRMb2NhdGlvbihvcCwgb3BFbCk7Ci0gICAgICAgIGFkZFJlYWRlckVycm9yKAotICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgIG9wLAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgIl9EVVBMSUNBVEVfT1BFUkFUSU9OX0ZPUl9QT1JUVFlQRSIsCi0gICAgICAgICAgICAiJyIgKyBvcC5nZXROYW1lKCkgKyAiJyIsCi0gICAgICAgICAgICAiJyIgKyBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgIiciKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgaWYgKG9wID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG9wID0gZGVmLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgICAgICBvcC5zZXROYW1lKG5hbWUpOwotCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBvcCA9IGRlZi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICB9Ci0KLSAgICAvLyBXaGV0aGVyIGl0IHdhcyByZXRyaWV2ZWQgb3IgY3JlYXRlZCwgdGhlIGRlZmluaXRpb24gaGFzIGJlZW4gZm91bmQuCi0gICAgb3Auc2V0VW5kZWZpbmVkKGZhbHNlKTsKLQotICAgIGlmIChwYXJhbWV0ZXJPcmRlclN0ciAhPSBudWxsKQotICAgIHsKLSAgICAgIG9wLnNldFBhcmFtZXRlck9yZGVyaW5nKFN0cmluZ1V0aWxzLnBhcnNlTk1Ub2tlbnMocGFyYW1ldGVyT3JkZXJTdHIpKTsKLSAgICB9Ci0KLSAgICBpZiAoZG9jRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChkb2NFbCk7Ci0gICAgfQotCi0gICAgaWYgKGlucHV0ICE9IG51bGwpCi0gICAgewotICAgICAgb3Auc2V0SW5wdXQoaW5wdXQpOwotICAgIH0KLQotICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcC5zZXRPdXRwdXQob3V0cHV0KTsKLSAgICB9Ci0KLSAgICBpZiAoZmF1bHRzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgSXRlcmF0b3IgZmF1bHRJdGVyYXRvciA9IGZhdWx0cy5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAoZmF1bHRJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEZhdWx0IGYgPSAoRmF1bHQpZmF1bHRJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIC8vIGlmIHRoZSBmYXVsdCBpc24ndCBkZWZpbmVkIHlldAotICAgICAgICBpZiAob3AuZ2V0RmF1bHQoZi5nZXROYW1lKCkpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBvcC5hZGRGYXVsdChmKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBhZGRSZWFkZXJFcnJvcigKLSAgICAgICAgICAgIG9wLAotICAgICAgICAgICAgZiwKLSAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfRFVQTElDQVRFX0ZBVUxUX05BTUUiLCAiJyIgKyBmLmdldE5hbWUoKSArICInIiwgIiciICsgb3AuZ2V0TmFtZSgpICsgIiciKSk7Ci0gICAgICAgICAgLy9mYXVsdEVycm9ycy5hZGQobmV3IE9iamVjdFtde2YsIkR1cGxpY2F0ZSBOYW1lIixvcH0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgT3BlcmF0aW9uVHlwZSBzdHlsZSA9IG51bGw7Ci0KLSAgICBpZiAobWVzc2FnZU9yZGVyLmVxdWFscyhTVFlMRV9PTkVfV0FZKSkKLSAgICB7Ci0gICAgICBzdHlsZSA9IE9wZXJhdGlvblR5cGUuT05FX1dBWTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc2FnZU9yZGVyLmVxdWFscyhTVFlMRV9SRVFVRVNUX1JFU1BPTlNFKSkKLSAgICB7Ci0gICAgICBzdHlsZSA9IE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc2FnZU9yZGVyLmVxdWFscyhTVFlMRV9TT0xJQ0lUX1JFU1BPTlNFKSkKLSAgICB7Ci0gICAgICBzdHlsZSA9IE9wZXJhdGlvblR5cGUuU09MSUNJVF9SRVNQT05TRTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc2FnZU9yZGVyLmVxdWFscyhTVFlMRV9OT1RJRklDQVRJT04pKQotICAgIHsKLSAgICAgIHN0eWxlID0gT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT047Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlICE9IG51bGwpCi0gICAgewotICAgICAgb3Auc2V0U3R5bGUoc3R5bGUpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24ob3AsIG9wRWwpOwotCi0gICAgLy8gbW9kaWZpZWQgdG8gcmVtb3ZlIGR1cGxpY2F0ZSBvcGVyYXRpb25zCi0gICAgLy8gICAgaWYob3BEZWZpbmVkKQotICAgIC8vICAgIHsKLSAgICAvLyAgICAgIGFkZFJlYWRlckVycm9yKHBvcnRUeXBlLG9wLFZhbGlkYXRlV1NETFBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFN0cmluZygiX0RVUExJQ0FURV9PUEVSQVRJT05fRk9SX1BPUlRUWVBFIiwiJyIrb3AuZ2V0TmFtZSgpKyInIiwiJyIrcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSsiJyIpKTsKLSAgICAvLyAgICAgIHJldHVybiBudWxsOwotICAgIC8vICAgIH0KLSAgICByZXR1cm4gb3A7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBzZXJ2aWNlIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gc2VydmljZUVsIFRoZSBzZXJ2aWNlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgc2VydmljZSBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBTZXJ2aWNlIHBhcnNlU2VydmljZShFbGVtZW50IHNlcnZpY2VFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBkZWYuY3JlYXRlU2VydmljZSgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHNlcnZpY2VFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHNlcnZpY2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbmFtZSkpOwotICAgIH0KLSAgICBTZXJ2aWNlIHM7Ci0gICAgLy8gYSBzZXJ2aWNlIHdpdGggdGhpcyBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZAotICAgIGlmICgocyA9IGRlZi5nZXRTZXJ2aWNlKHNlcnZpY2UuZ2V0UU5hbWUoKSkpICE9IG51bGwpCi0gICAgewotICAgICAgYWRkUmVhZGVyRXJyb3IoCi0gICAgICAgIGRlZiwKLSAgICAgICAgc2VydmljZUVsLAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygiX1NFUlZJQ0VfTkFNRV9BTFJFQURZX0RFRklORUQiLCAiJyIgKyBzLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiJyIpKTsKLSAgICAgIHJldHVybiBzOwotICAgIH0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KHNlcnZpY2VFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHNlcnZpY2Uuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX1BPUlQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHNlcnZpY2UuYWRkUG9ydChwYXJzZVBvcnQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2VydmljZS5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KFNlcnZpY2UuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oc2VydmljZSwgc2VydmljZUVsKTsKLQotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBwb3J0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcG9ydEVsIFRoZSBwb3J0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIHBvcnQgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgUG9ydCBwYXJzZVBvcnQoRWxlbWVudCBwb3J0RWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgUG9ydCBwb3J0ID0gZGVmLmNyZWF0ZVBvcnQoKTsKLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShwb3J0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIGJpbmRpbmdTdHI7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYmluZGluZ1N0ciA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKHBvcnRFbCwgQ29uc3RhbnRzLkFUVFJfQklORElORywgQ29uc3RhbnRzLkVMRU1fUE9SVCwgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy90aGUgY2FsbCBhYm92ZSBmYWlscyBpZiB0aGVyZSBpcyBubyBxdWFsaWZpZWQgbmFtZXNwYWNlIGZvciB0aGUgbWVzc2FnZSBuYW1lCi0gICAgICBiaW5kaW5nU3RyID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShwb3J0RWwsICJiaW5kaW5nIikpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcG9ydC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChiaW5kaW5nU3RyICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gZGVmLmdldEJpbmRpbmcoYmluZGluZ1N0cik7Ci0KLSAgICAgIGlmIChiaW5kaW5nID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcgPSBkZWYuY3JlYXRlQmluZGluZygpOwotICAgICAgICBiaW5kaW5nLnNldFFOYW1lKGJpbmRpbmdTdHIpOwotICAgICAgICBkZWYuYWRkQmluZGluZyhiaW5kaW5nKTsKLSAgICAgIH0KLQotICAgICAgcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocG9ydEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgcG9ydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwb3J0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoUG9ydC5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihwb3J0LCBwb3J0RWwpOwotCi0gICAgcmV0dXJuIHBvcnQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50VHlwZSBUaGUgcGFyZW50IHR5cGUgb2YgdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLSAgICogQHBhcmFtIGVsIFRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgcGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChDbGFzcyBwYXJlbnRUeXBlLCBFbGVtZW50IGVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgUU5hbWUgZWxlbWVudFR5cGUgPSBRTmFtZVV0aWxzLm5ld1FOYW1lKGVsKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5IGV4dFJlZyA9IGRlZi5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCi0gICAgICBpZiAoZXh0UmVnID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKAotICAgICAgICAgIFdTRExFeGNlcHRpb24uQ09ORklHVVJBVElPTl9FUlJPUiwKLSAgICAgICAgICAiTm8gRXh0ZW5zaW9uUmVnaXN0cnkgc2V0IGZvciB0aGlzICIKLSAgICAgICAgICAgICsgIkRlZmluaXRpb24sIHNvIHVuYWJsZSB0byBkZXNlcmlhbGl6ZSAiCi0gICAgICAgICAgICArICJhICciCi0gICAgICAgICAgICArIGVsZW1lbnRUeXBlCi0gICAgICAgICAgICArICInIGVsZW1lbnQgaW4gdGhlICIKLSAgICAgICAgICAgICsgImNvbnRleHQgb2YgYSAnIgotICAgICAgICAgICAgKyBwYXJlbnRUeXBlLmdldE5hbWUoKQotICAgICAgICAgICAgKyAiJy4iKTsKLSAgICAgIH0KLQotICAgICAgRXh0ZW5zaW9uRGVzZXJpYWxpemVyIGV4dERTID0gZXh0UmVnLnF1ZXJ5RGVzZXJpYWxpemVyKHBhcmVudFR5cGUsIGVsZW1lbnRUeXBlKTsKLQotICAgICAgLy8gYXNpZ24gdGhlIEV4dGVuc2liaWxpdHlFbGVtZW50IHRvIGEgdmFyIHNvIHdlIGNhbiBhZGQgaXQgdG8gdGhlIGxvY2F0aW9ucwotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IGV4dERTLnVubWFyc2hhbGwocGFyZW50VHlwZSwgZWxlbWVudFR5cGUsIGVsLCBkZWYsIGV4dFJlZyk7Ci0gICAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgICAgLy8gdGhpcyBtaWdodCBub3Qgd29yayBwcm9wZXJseQotICAgICAgc2V0TG9jYXRpb24oZXh0RWxlbSwgZWwpOwotCi0gICAgICAvLyByZWdpc3RlciBhbGwgb2YgdGhlIGNoaWxkIEVsZW1lbnRzIHNvIHdlIGNhbiBmaW5kIHRoZW0gbGF0ZXIKLSAgICAgIC8vIHVzZWQgZm9yIGlubGluZSBzY2hlbWEgdmFsaWRhdGlvbgotICAgICAgcmVnaXN0ZXJDaGlsZEVsZW1lbnRzKGV4dEVsZW0pOwotCi0gICAgICByZXR1cm4gZXh0RWxlbTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBpZiAoZS5nZXRMb2NhdGlvbigpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGUuc2V0TG9jYXRpb24oWFBhdGhVdGlscy5nZXRYUGF0aEV4cHJGcm9tTm9kZShlbCkpOwotICAgICAgfQotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBpbnB1dCBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGlucHV0RWwgVGhlIGlucHV0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgaW5wdXQgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgSW5wdXQgcGFyc2VJbnB1dChFbGVtZW50IGlucHV0RWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0KLSAgICBJbnB1dCBpbnB1dCA9IGRlZi5jcmVhdGVJbnB1dCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGlucHV0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIG1lc3NhZ2VOYW1lID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtZXNzYWdlTmFtZSA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKGlucHV0RWwsIENvbnN0YW50cy5BVFRSX01FU1NBR0UsIENvbnN0YW50cy5FTEVNX0lOUFVULCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBtZXNzYWdlIG5hbWUKLSAgICAgIG1lc3NhZ2VOYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShpbnB1dEVsLCAibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlucHV0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZGVmLmdldE1lc3NhZ2UobWVzc2FnZU5hbWUpOwotCi0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZGVmLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgbWVzc2FnZS5zZXRRTmFtZShtZXNzYWdlTmFtZSk7Ci0gICAgICAgIGRlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgfQotCi0gICAgICBpbnB1dC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoaW5wdXRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFhNTCBWYWxpZGF0aW9uIHdpbGwgY2F0Y2ggdGhpcwotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihpbnB1dCwgaW5wdXRFbCk7Ci0KLSAgICByZXR1cm4gaW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBvdXRwdXQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBvdXRwdXRFbCBUaGUgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgb3V0cHV0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIE91dHB1dCBwYXJzZU91dHB1dChFbGVtZW50IG91dHB1dEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIE91dHB1dCBvdXRwdXQgPSBkZWYuY3JlYXRlT3V0cHV0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUob3V0cHV0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIG1lc3NhZ2VOYW1lID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtZXNzYWdlTmFtZSA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKG91dHB1dEVsLCBDb25zdGFudHMuQVRUUl9NRVNTQUdFLCBDb25zdGFudHMuRUxFTV9PVVRQVVQsIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIG1lc3NhZ2UgbmFtZQotICAgICAgbWVzc2FnZU5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKG91dHB1dEVsLCAibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIG91dHB1dC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChtZXNzYWdlTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGRlZi5nZXRNZXNzYWdlKG1lc3NhZ2VOYW1lKTsKLQotICAgICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IGRlZi5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZU5hbWUpOwotICAgICAgICBkZWYuYWRkTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgIH0KLQotICAgICAgb3V0cHV0LnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChvdXRwdXRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIG91dHB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBYTUwgVmFsaWRhdGlvbiB3aWxsIGNhdGNoIHRoaXMKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKHRlbXBFbCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24ob3V0cHV0LCBvdXRwdXRFbCk7Ci0KLSAgICByZXR1cm4gb3V0cHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgZmF1bHQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBmYXVsdEVsIFRoZSBmYXVsdCBlbGVtZW50IHRvIHBhcnNlLgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBmYXVsdCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBGYXVsdCBwYXJzZUZhdWx0KEVsZW1lbnQgZmF1bHRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBGYXVsdCBmYXVsdCA9IGRlZi5jcmVhdGVGYXVsdCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGZhdWx0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotICAgIFFOYW1lIG1lc3NhZ2VOYW1lID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtZXNzYWdlTmFtZSA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKGZhdWx0RWwsIENvbnN0YW50cy5BVFRSX01FU1NBR0UsIENvbnN0YW50cy5FTEVNX0lOUFVULCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBtZXNzYWdlIG5hbWUKLSAgICAgIG1lc3NhZ2VOYW1lID0gbmV3IFFOYW1lKG51bGwsIERPTVV0aWxzLmdldEF0dHJpYnV0ZShmYXVsdEVsLCAibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZhdWx0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZGVmLmdldE1lc3NhZ2UobWVzc2FnZU5hbWUpOwotCi0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZGVmLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgbWVzc2FnZS5zZXRRTmFtZShtZXNzYWdlTmFtZSk7Ci0gICAgICAgIGRlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgfQotCi0gICAgICBmYXVsdC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoZmF1bHRFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGZhdWx0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFhNTCBWYWxpZGF0aW9uIHdpbGwgY2F0Y2ggdGhpcwotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihmYXVsdCwgZmF1bHRFbCk7Ci0KLSAgICByZXR1cm4gZmF1bHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIG1lc3NhZ2VnZW5lcmF0b3IgZm9yIHRoZSByZWFkZXIuCi0gICAqIAotICAgKiBAcGFyYW0gbWcgVGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VHZW5lcmF0b3IoTWVzc2FnZUdlbmVyYXRvciBtZykKLSAgewotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBtZzsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdGhlIHJlZk9iamVjdCB0byB0aGUgZWxlbWVudExvY2F0aW9uIGhhc2h0YWJsZSB3aXRoIHRoZSBsb2NhdGlvbiBkZWZpbmVkIGluIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcmVmT2JqZWN0IFRoZSBvYmplY3QgdG8gYWRkLgotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldExvY2F0aW9uKE9iamVjdCByZWZPYmplY3QsIEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIEVsZW1lbnRJbXBsIGVsZW1lbnRJbXBsID0gKEVsZW1lbnRJbXBsKWVsZW1lbnQ7Ci0gICAgICBFbGVtZW50TG9jYXRpb24gZWxlbWVudExvY2F0aW9uID0gKEVsZW1lbnRMb2NhdGlvbillbGVtZW50SW1wbC5nZXRVc2VyRGF0YSgpOwotICAgICAgaWYgKGVsZW1lbnRMb2NhdGlvbiAhPSBudWxsKQotICAgICAgewotCi0gICAgICAgIGVsZW1lbnRMb2NhdGlvbnMucHV0KAotICAgICAgICAgIHJlZk9iamVjdCwKLSAgICAgICAgICBuZXcgTG9jYXRpb25Ib2xkZXIoZWxlbWVudExvY2F0aW9uLmdldExpbmVOdW1iZXIoKSwgZWxlbWVudExvY2F0aW9uLmdldENvbHVtbk51bWJlcigpLCBkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gIH0KLSAgLyoqCi0gICAqIEFkZCBhIHJlYWRlciBlcnJvciB0byB0aGUgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvci4KLSAgICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHdpdGggdGhlIGVycm9yLgotICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBhZGRSZWFkZXJFcnJvcihPYmplY3QgcGFyZW50b2JqZWN0LCBPYmplY3Qgb2JqZWN0LCBTdHJpbmcgZXJyb3IpCi0gIHsKLSAgICByZWFkZXJFcnJvcnMuYWRkKG5ldyBSZWFkZXJFcnJvcihwYXJlbnRvYmplY3QsIG9iamVjdCwgZXJyb3IpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIHJlYWRlciB3YXJuaW5nIHRvIHRoZSBsaXN0LgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yLgotICAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IuCi0gICAqIEBwYXJhbSB3YXJuaW5nIFRoZSB3YXJuaW5nIG1lc3NhZ2UuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBhZGRSZWFkZXJXYXJuaW5nKE9iamVjdCBwYXJlbnRvYmplY3QsIE9iamVjdCBvYmplY3QsIFN0cmluZyB3YXJuaW5nKQotICB7Ci0gICAgcmVhZGVyV2FybmluZ3MuYWRkKG5ldyBSZWFkZXJFcnJvcihwYXJlbnRvYmplY3QsIG9iamVjdCwgd2FybmluZykpOwotICB9Ci0gIAotICAvKioKLSAgICogUmVnaXN0ZXIgYWxsIG9mIHRoZSBsb2NhdGlvbnMgb2YgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBleHRlbnNpYmlsaXR5Ci0gICAqIGVsZW1lbnQgZ2l2ZW4uCi0gICAqIAotICAgKiBAcGFyYW0gZXh0RWxlbSBUaGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHdob3NlIGNoaWxkIGVsZW1lbnRzIHdpbGwgYmUgcmVnaXN0ZXJlZC4KLSAgICovCi0KLSAgcHJvdGVjdGVkIHZvaWQgcmVnaXN0ZXJDaGlsZEVsZW1lbnRzKEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0pCi0gIHsKLSAgICAvLyBvbmx5IGFkZCB0aG9zZSB0aGF0IGFyZSBvZiB0eXBlIHVua25vd24uIGlmIHRoZXkncmUga25vd24gdGhleSAKLSAgICAvLyB3aWxsIHRha2UgY2FyZSBvZiB0aGVtc2VsdmVzCi0gICAgaWYgKGV4dEVsZW0gaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtID0gKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbSkuZ2V0RWxlbWVudCgpOwotICAgICAgcmVnaXN0ZXJDaGlsZEVsZW1lbnRzUmVjdXJzaXZlbHkoZWxlbSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIHRoZSBsb2NhdGlvbiBvZiBhbGwgb2YgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIGVsZW0uCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgZWxlbWVudCB3aG9zZSBjaGlsZCBlbGVtZW50cyB3aWxsIGJlIHJlZ2lzdGVyZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWdpc3RlckNoaWxkRWxlbWVudHNSZWN1cnNpdmVseShFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBpZiAoZWxlbSBpbnN0YW5jZW9mIEVsZW1lbnROU0ltcGwpCi0gICAgewotICAgICAgc2V0TG9jYXRpb24oZWxlbSwgZWxlbSk7Ci0KLSAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgICBOb2RlTGlzdCBjaGlsZE5vZGVzID0gZWxlbS5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKSB8fCBpIDwgNTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgICByZWdpc3RlckNoaWxkRWxlbWVudHNSZWN1cnNpdmVseShjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLyoqCi0gICAqIENoZWNrIHRoYXQgYW4gZWxlbWVudCBuYW1lIG1hdGNoZXMgdGhlIGV4cGVjdGVkIG5hbWUuCi0gICAqIAotICAgKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgd2l0aCB0aGUgbmFtZSB0byBjaGVjay4KLSAgICogQHBhcmFtIHFuYW1lIFRoZSBuYW1lIHRvIGNoZWNrIGFnYWluc3QuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja0VsZW1lbnROYW1lKEVsZW1lbnQgZWwsIFFOYW1lIHFuYW1lKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKCFRTmFtZVV0aWxzLm1hdGNoZXMocW5hbWUsIGVsKSkKLSAgICB7Ci0gICAgICBXU0RMRXhjZXB0aW9uIHdzZGxFeGMgPSBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLklOVkFMSURfV1NETCwgIkV4cGVjdGVkIGVsZW1lbnQgJyIgKyBxbmFtZSArICInLiIpOwotCi0gICAgICB3c2RsRXhjLnNldExvY2F0aW9uKFhQYXRoVXRpbHMuZ2V0WFBhdGhFeHByRnJvbU5vZGUoZWwpKTsKLQotICAgICAgdGhyb3cgd3NkbEV4YzsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgbG9jYXRpb25zIGhhc2h0YWJsZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVsZW1lbnQgbG9jYXRpb25zIGhhc2h0YWJsZS4KLSAgICovCi0gIHB1YmxpYyBIYXNodGFibGUgZ2V0RWxlbWVudExvY2F0aW9ucygpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudExvY2F0aW9uczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgcmVhZGVyIGVycm9ycy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHJlYWRlciBlcnJvcnMuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRSZWFkZXJFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIHJlYWRlckVycm9yczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCByZWFkZXIgd2FybmluZ3MuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSByZWFkZXIgd2FybmluZ3MuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRSZWFkZXJXYXJuaW5ncygpCi0gIHsKLSAgICByZXR1cm4gcmVhZGVyV2FybmluZ3M7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzlhM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU29ydGVkU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotCi1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5YTUxFcnJvclJlcG9ydGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuTGluZU51bWJlckRPTVBhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LkVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci0KLS8qKgotICogQSBXU0RMIHJlYWRlciB0aGF0IHN1cHBvcnRzIGN5Y2xpYyBXU0RMIGltcG9ydHMsIHNjaGVtYSBpbXBvcnRzIGFuZCBpbmxpbmUgc2NoZW1hcy4KLSAqIFRoaXMgcmVhZGVyIGlzIGJhc2VkIG9uIHRoZSBXU0RMUmVhZGVySW1wbCBmcm9tIFdTREw0Si4gCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMUmVhZGVySW1wbAotewotICBwcm90ZWN0ZWQgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotICBwcm90ZWN0ZWQgSVdTREwxMVZhbGlkYXRpb25JbmZvIHdzZGx2YWxpbmZvOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHdzZGx2YWxpbmZvIFRoZSBXU0RMIDEuMSB2YWxpZGF0aW9uIGluZm8gb2JqZWN0IHRvIHVzZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMUmVhZGVySW1wbChJV1NETDExVmFsaWRhdGlvbkluZm8gd3NkbHZhbGluZm8pCi0gIHsKLSAgICB0aGlzLndzZGx2YWxpbmZvID0gd3NkbHZhbGluZm87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgcm9vdCBkb2N1bWVudC4gVGhpcyBtZXRob2Qgd2lsbCBmaW5kIGFsbCBpbXBvcnRzIGFuZCBwYXJzZSB0aGVtIGFzIAotICAgKiB3ZWxsIGNyZWF0aW5nIGEgV1NETERvY3VtZW50IGZvciBlYWNoIHVuaXF1ZSBXU0RMIGZpbGUuIFRoaXMgbWV0aG9kIHN1cHBvcnRzCi0gICAqIGN5Y2xpYyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzIHN1Y2ggdGhhdCBmaWxlIEEgY2FuIGltcG9ydCBmaWxlIEIgYW5kIGZpbGUgQgotICAgKiBjYW4gaW1wb3J0IGZpbGUgQS4KLSAgICogCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgVGhlIGJhc2UgVVJJIG9mIHRoZSByb290IGRvY3VtZW50LgotICAgKiBAcGFyYW0gZGVmRWwgVGhlIGRlZmluaXRpb24gZWxlbWVudCBvZiB0aGUgcm9vdCBkb2N1bWVudC4KLSAgICogQHJldHVybiBBbiBhcnJheSBvZiBXU0RMRG9jdW1lbnRzIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSB1bmlxdWUgZmlsZXMgaW4gdGhlIGRlc2NyaXB0aW9uLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMRG9jdW1lbnRbXSBwYXJzZURvY3VtZW50KFN0cmluZyBkb2N1bWVudEJhc2VVUkksIEVsZW1lbnQgZGVmRWwpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBpbnQgaW5pdGlhbEltcG9ydEFycmF5U2l6ZSA9IDIwOwotICAgIExpc3RbXSBmaWxlc0F0RGVwdGggPSBuZXcgQXJyYXlMaXN0W2luaXRpYWxJbXBvcnRBcnJheVNpemVdOwotICAgIE1hcCBmaWxlc0ltcG9ydGluZyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBTb3J0ZWRTZXQgcGFyc2VkSW1wb3J0cyA9IG5ldyBUcmVlU2V0KCk7Ci0gICAgU29ydGVkU2V0IGltcG9ydHNUb1BhcnNlID0gbmV3IFRyZWVTZXQoKTsKLSAgICBpbnQgbWF4ZGVwdGggPSAwOwotCi0gICAgV1NETERvY3VtZW50IHJvb3Rkb2MgPSBuZXcgV1NETERvY3VtZW50KGRvY3VtZW50QmFzZVVSSSwgZGVmRWwsIDAsIG1lc3NhZ2VnZW5lcmF0b3IsIHdzZGx2YWxpbmZvKTsKLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gcm9vdGRvYy5nZXREZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgSW1wb3J0SG9sZGVyIHJvb3RJbXBvcnQgPSBuZXcgSW1wb3J0SG9sZGVyKHRhcmdldE5hbWVzcGFjZSwgZG9jdW1lbnRCYXNlVVJJLCBkb2N1bWVudEJhc2VVUkksIHJvb3Rkb2MsIDAsIG51bGwsIG1lc3NhZ2VnZW5lcmF0b3IsIHdzZGx2YWxpbmZvKTsKLSAgICByb290SW1wb3J0LmNyZWF0ZVdTRExJbXBvcnQocm9vdGRvYyk7Ci0gICAgcGFyc2VkSW1wb3J0cy5hZGQocm9vdEltcG9ydCk7Ci0gICAgTGlzdCByb290TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmaWxlc0ltcG9ydGluZy5wdXQocm9vdEltcG9ydC5nZXRMb2NhdGlvbigpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgIHJvb3RMaXN0LmFkZChyb290ZG9jKTsKLSAgICBmaWxlc0F0RGVwdGhbMF0gPSByb290TGlzdDsKLSAgICBpbXBvcnRzVG9QYXJzZS5hZGRBbGwocm9vdGRvYy5nZXRJbXBvcnRzKCkpOwotICAgIFNldCBpbXBzID0gcm9vdGRvYy5nZXRJbXBvcnRzKCk7Ci0gICAgSXRlcmF0b3IgaW1wSXRlciA9IGltcHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZShpbXBJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJbXBvcnRIb2xkZXIgaW1wID0gKEltcG9ydEhvbGRlcilpbXBJdGVyLm5leHQoKTsKLSAgICAgIExpc3QgdGVtcExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICB0ZW1wTGlzdC5hZGQoaW1wLmdldEltcG9ydGluZ0RvY3VtZW50KCkpOwotICAgICAgZmlsZXNJbXBvcnRpbmcucHV0KGltcC5nZXRMb2NhdGlvbigpLCB0ZW1wTGlzdCk7Ci0gICAgfQotICAgIAotICAgIHdoaWxlKCFpbXBvcnRzVG9QYXJzZS5pc0VtcHR5KCkpCi0gICAgewotICAgICAgSW1wb3J0SG9sZGVyIGltcCA9IChJbXBvcnRIb2xkZXIpaW1wb3J0c1RvUGFyc2UuZmlyc3QoKTsKLSAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGluaXRpYWxpemUgdGhlIGltcG9ydCBoZXJlIHNvIGVhY2ggaW1wb3J0Ci0gICAgICAvLyBpcyBvbmx5IGNyZWF0ZWQgb25jZS4gSW4gdGhlIGNhc2Ugb2YgcmVjaXByaWNhbCBpbXBvcnRzIHRoaXMKLSAgICAgIC8vIGF2b2lkcyBhbiBpbmZpbml0ZSBsb29wLgotICAgICAgaW1wLmluaXRpYWxpemUoKTsKLSAgICAgIFdTRExEb2N1bWVudCBpbXBEb2MgPSBpbXAuZ2V0V1NETERvY3VtZW50KCk7Ci0gICAgICAKLSAgICAgIGltcG9ydHNUb1BhcnNlLnJlbW92ZShpbXApOwotICAgICAgCi0gICAgICBwYXJzZWRJbXBvcnRzLmFkZChpbXApOwotICAgICAgCi0gICAgICAvLyBBZGQgbmV3IGltcG9ydHMgdG8gdGhlIGxpc3Qgb2YgaW1wb3J0cyB0byBwYXJzZS4KLSAgICAgIC8vIFJlbW92ZSBhbGwgdGhlIGltcG9ydHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwYXJzZWQuCi0gICAgICBpZihpbXBEb2MgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gSW5jcmVhdGUgaW1wb3J0IGFycmF5IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYoaW1wLmdldERlcHRoKCkgPj0gaW5pdGlhbEltcG9ydEFycmF5U2l6ZSkKLSAgICAgICAgewotICAgICAgICAgIExpc3RbXSB0ZW1wQXJyYXkgPSBuZXcgTGlzdFtmaWxlc0F0RGVwdGgubGVuZ3RoICsgaW5pdGlhbEltcG9ydEFycmF5U2l6ZV07Ci0gICAgICAgICAgU3lzdGVtLmFycmF5Y29weShmaWxlc0F0RGVwdGgsIDAsIHRlbXBBcnJheSwgMCwgZmlsZXNBdERlcHRoLmxlbmd0aCk7Ci0gICAgICAgICAgZmlsZXNBdERlcHRoID0gdGVtcEFycmF5OwotICAgICAgICB9Ci0gICAgICAgIC8vIENyZWF0ZSB0aGUgbGlzdCBmb3IgdGhlIGRlcHRoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaW50IGltcERlcHRoID0gaW1wLmdldERlcHRoKCk7Ci0gICAgICAgIGlmKGZpbGVzQXREZXB0aFtpbXBEZXB0aF0gPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmKG1heGRlcHRoIDwgaW1wRGVwdGgpCi0gICAgICAgICAgewotICAgICAgICAgICAgbWF4ZGVwdGggPSBpbXBEZXB0aDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZmlsZXNBdERlcHRoW2ltcERlcHRoXSA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgfQotICAgICAgICBmaWxlc0F0RGVwdGhbaW1wLmdldERlcHRoKCldLmFkZChpbXBEb2MpOwotICAgICAgICAKLSAgICAgICAgU2V0IGltcG9ydHMgPSBpbXBEb2MuZ2V0SW1wb3J0cygpOwotICAgICAgICBJbXBvcnRIb2xkZXJbXSBpbXBvcnRzQXJyYXkgPSAoSW1wb3J0SG9sZGVyW10paW1wb3J0cy50b0FycmF5KG5ldyBJbXBvcnRIb2xkZXJbaW1wb3J0cy5zaXplKCldKTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGltcG9ydHNBcnJheS5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIEltcG9ydEhvbGRlciBpaCA9IGltcG9ydHNBcnJheVtpXTsKLSAgICAgICAgICAvLyBJZiBhbHJlYWR5IHBhcnNlZCwgYWRkIHRoZSBkZWZpbml0aW9uIGltcG9ydGluZyB0aGlzIGZpbGUgdG8gdGhlIGxpc3QuCi0gICAgICAgICAgaWYoZmlsZXNJbXBvcnRpbmcuY29udGFpbnNLZXkoaWguZ2V0TG9jYXRpb24oKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgKChMaXN0KWZpbGVzSW1wb3J0aW5nLmdldChpaC5nZXRMb2NhdGlvbigpKSkuYWRkKGloLmdldEltcG9ydGluZ0RvY3VtZW50KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGl0IHRvIHRoZSBsaXN0IHRvIHBhcnNlLgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhpcyBpbXBvcnQgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgaW1wb3J0aW5nIGxpc3QuCi0gICAgICAgICAgICBMaXN0IHRlbXBMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgdGVtcExpc3QuYWRkKGloLmdldEltcG9ydGluZ0RvY3VtZW50KCkpOwotICAgICAgICAgICAgZmlsZXNJbXBvcnRpbmcucHV0KGloLmdldExvY2F0aW9uKCksIHRlbXBMaXN0KTsKLSAgICAgICAgICAgIGltcG9ydHNUb1BhcnNlLmFkZChpaCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBhbGwgb2YgdGhlIGltcG9ydHMgdG8gdGhlIHJlc3BlY3RpdmUgZG9jdW1lbnRzLgotICAgIEl0ZXJhdG9yIGltcG9ydEVsZW1lbnRzSXRlciA9IHBhcnNlZEltcG9ydHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZShpbXBvcnRFbGVtZW50c0l0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEltcG9ydEhvbGRlciBpbXAgPSAoSW1wb3J0SG9sZGVyKWltcG9ydEVsZW1lbnRzSXRlci5uZXh0KCk7Ci0gICAgICBMaXN0IGZpbGVzID0gKExpc3QpZmlsZXNJbXBvcnRpbmcuZ2V0KGltcC5nZXRMb2NhdGlvbigpKTsKLSAgICAgIEl0ZXJhdG9yIGZpbGVzSXRlciA9IGZpbGVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShmaWxlc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClmaWxlc0l0ZXIubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgRGVmaW5pdGlvbkltcGwgZGVmID0gKERlZmluaXRpb25JbXBsKWRvYy5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgIEltcG9ydCBpbXBFbGVtID0gaW1wLmdldEltcG9ydCgpOwotICAgICAgICBpZihpbXBFbGVtICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWYuYWRkSW1wb3J0KGltcEVsZW0pOwotICAgICAgICAgIGlmKCFpbXAuaXNXU0RMRmlsZUltcG9ydCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGRvYy5hZGRTY2hlbWFzKGltcC5nZXRTY2hlbWFzKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gUGFyc2UgdGhlIFdTREwgZG9jdW1lbnRzLgotICAgIC8vIFBhcnNlIHRoZSBNZXNzYWdlcy4KLSAgICBmb3IoaW50IGkgPSBtYXhkZXB0aDsgaSA+PTA7IGktLSkKLSAgICB7Ci0gICAgICBMaXN0IGRvY3MgPSBmaWxlc0F0RGVwdGhbaV07Ci0gICAgICBJdGVyYXRvciBkb2NzSXRlciA9IGRvY3MuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKGRvY3NJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgV1NETERvY3VtZW50IGRvYyA9IChXU0RMRG9jdW1lbnQpZG9jc0l0ZXIubmV4dCgpOwotICAgICAgICBkb2MucGFyc2VNZXNzYWdlcygpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBQYXJzZSB0aGUgUG9ydHR5cGVzLgotICAgIGZvcihpbnQgaSA9IG1heGRlcHRoOyBpID49MDsgaS0tKQotICAgIHsKLSAgICAgIExpc3QgZG9jcyA9IGZpbGVzQXREZXB0aFtpXTsKLSAgICAgIEl0ZXJhdG9yIGRvY3NJdGVyID0gZG9jcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoZG9jc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClkb2NzSXRlci5uZXh0KCk7Ci0gICAgICAgIGRvYy5wYXJzZVBvcnR0eXBlcygpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBQYXJzZSB0aGUgQmluZGluZ3MuCi0gICAgZm9yKGludCBpID0gbWF4ZGVwdGg7IGkgPj0wOyBpLS0pCi0gICAgewotICAgICAgTGlzdCBkb2NzID0gZmlsZXNBdERlcHRoW2ldOwotICAgICAgSXRlcmF0b3IgZG9jc0l0ZXIgPSBkb2NzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShkb2NzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWRvY3NJdGVyLm5leHQoKTsKLSAgICAgICAgZG9jLnBhcnNlQmluZGluZ3MoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUGFyc2UgdGhlIFNlcnZpY2VzLgotICAgIGZvcihpbnQgaSA9IG1heGRlcHRoOyBpID49MDsgaS0tKQotICAgIHsKLSAgICAgIExpc3QgZG9jcyA9IGZpbGVzQXREZXB0aFtpXTsKLSAgICAgIEl0ZXJhdG9yIGRvY3NJdGVyID0gZG9jcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoZG9jc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClkb2NzSXRlci5uZXh0KCk7Ci0gICAgICAgIGRvYy5wYXJzZVNlcnZpY2VzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFBhcnNlIHRoZSBFeHRlbnNpYmlsaXR5IEVsZW1lbnRzLgotICAgIGZvcihpbnQgaSA9IG1heGRlcHRoOyBpID49MDsgaS0tKQotICAgIHsKLSAgICAgIExpc3QgZG9jcyA9IGZpbGVzQXREZXB0aFtpXTsKLSAgICAgIEl0ZXJhdG9yIGRvY3NJdGVyID0gZG9jcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoZG9jc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClkb2NzSXRlci5uZXh0KCk7Ci0gICAgICAgIGRvYy5wYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBMaXN0IHdzZGxEb2NzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvcihpbnQgaSA9IG1heGRlcHRoOyBpID49MDsgaS0tKQotICAgIHsKLSAgICAgIExpc3QgZG9jcyA9IGZpbGVzQXREZXB0aFtpXTsKLSAgICAgIEl0ZXJhdG9yIGRvY3NJdGVyID0gZG9jcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoZG9jc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClkb2NzSXRlci5uZXh0KCk7Ci0gICAgICAgIHdzZGxEb2NzLmFkZChkb2MpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFdTRExEb2N1bWVudFtdKXdzZGxEb2NzLnRvQXJyYXkobmV3IFdTRExEb2N1bWVudFt3c2RsRG9jcy5zaXplKCldKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSBUaGUgc291cmNlIG9mIHRoZSBkb2N1bWVudCBiZWluZyByZXRyaWV2ZWQuCi0gICAqIEBwYXJhbSBkZXNjIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgcmV0cmlldmVkLgotICAgKiBAcmV0dXJuIFRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsIFN0cmluZyBkZXNjKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBuZXcgU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uKCkKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIFhNTEVycm9yUmVwb3J0ZXIgY3JlYXRlRXJyb3JSZXBvcnRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbmV3IFhNTEVycm9yUmVwb3J0ZXIoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlcG9ydEVycm9yKFN0cmluZyBkb21haW4sIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3VtZW50cywgc2hvcnQgc2V2ZXJpdHkpIHRocm93cyBYTklFeGNlcHRpb24KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYm9vbGVhbiByZXBvcnRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgIGlmIChrZXkuZXF1YWxzKCJQcmVtYXR1cmVFT0YiKSkKLSAgICAgICAgICAgICAgIHsgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXBvcnRFcnJvciA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYgKHJlcG9ydEVycm9yKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN1cGVyLnJlcG9ydEVycm9yKGRvbWFpbiwga2V5LCBhcmd1bWVudHMsIHNldmVyaXR5KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICAKLSAgICAgIEVycm9ySGFuZGxlciBlcnJvckhhbmRsZXIgPSBuZXcgRXJyb3JIYW5kbGVyKCkKLSAgICAgIHsKLSAgICAgICAgICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgICAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkVycm9ySGFuZGxlciNlcnJvcihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgICAgICAgKi8KLSAgICAgICAgICBwdWJsaWMgdm9pZCBlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgICAqIEBzZWUgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyI2ZhdGFsRXJyb3Iob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24pCi0gICAgICAgICAgICovCi0gICAgICAgICAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgICAqIEBzZWUgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyI3dhcm5pbmcob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24pCi0gICAgICAgICAgICovCi0gICAgICAgICAgcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgICB9Ci0gICAgICB9OwotCi0gICAgICBET01QYXJzZXIgYnVpbGRlciA9IG5ldyBMaW5lTnVtYmVyRE9NUGFyc2VyKGNvbmZpZ3VyYXRpb24pOwotICAgICAgYnVpbGRlci5zZXRFcnJvckhhbmRsZXIoZXJyb3JIYW5kbGVyKTsKLSAgICAgIGJ1aWxkZXIucGFyc2UoaW5wdXRTb3VyY2UpOwotICAgICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5nZXREb2N1bWVudCgpOwotCi0gICAgICByZXR1cm4gZG9jOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5QQVJTRVJfRVJST1IsICJQcm9ibGVtIHBhcnNpbmcgJyIgKyBkZXNjICsgIicuIiwgdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgYSBXU0RMIGRvY3VtZW50IHVzaW5nIGEgY29udGV4dCBVUkkgYW5kIGZpbGUgVVJJLgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRleHRVUkkgVGhlIGNvbnRleHQgVVJJIHRvIHVzZS4KLSAgICogQHBhcmFtIHdzZGxVUkkgVGhlIFdTREwgVVJJIHRvIHVzZS4KLSAgICogQHJldHVybiBBbiBhcnJheSBvZiBXU0RMRG9jdW1lbnRzLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnRbXSByZWFkV1NETChTdHJpbmcgY29udGV4dFVSSSwgU3RyaW5nIHdzZGxVUkkpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgY29udGV4dFVSTCA9IChjb250ZXh0VVJJICE9IG51bGwpID8gU3RyaW5nVXRpbHMuZ2V0VVJMKG51bGwsIGNvbnRleHRVUkkpIDogbnVsbDsKLSAgICAgIFVSTCB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwoY29udGV4dFVSTCwgd3NkbFVSSSk7Ci0gICAgICBSZWFkZXIgcmVhZGVyID0gU3RyaW5nVXRpbHMuZ2V0Q29udGVudEFzUmVhZGVyKHVybCk7Ci0gICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShyZWFkZXIpOwotICAgICAgRG9jdW1lbnQgZG9jID0gZ2V0RG9jdW1lbnQoaW5wdXRTb3VyY2UsIHdzZGxVUkkpOwotICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICBXU0RMRG9jdW1lbnRbXSB3c2RsRG9jcyA9IG51bGw7Ci0gICAgICAvLyBvbmx5IHBhcnNlIHRoZSBkb2N1bWVudCBpZiBpdCBpc24ndCBlbXB0eQotICAgICAgaWYoZG9jLmdldERvY3VtZW50RWxlbWVudCgpICE9IG51bGwpCi0gICAgICAgeyAgICAgIAotICAgICAgICB3c2RsRG9jcyA9IHJlYWRXU0RMKHVybC50b1N0cmluZygpLCBkb2MpOwotICAgICAgfQotICAgICAgcmV0dXJuIHdzZGxEb2NzOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IGU7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiwKLSAgICAgICAgIlVuYWJsZSB0byByZXNvbHZlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciICsgd3NkbFVSSSArICInLiIsCi0gICAgICAgIHQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIG1lc3NhZ2VnZW5lcmF0b3IgZm9yIHRoZSByZWFkZXIuCi0gICAqIAotICAgKiBAcGFyYW0gbWcgVGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VHZW5lcmF0b3IoTWVzc2FnZUdlbmVyYXRvciBtZykKLSAgewotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBtZzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJlYWQgdGhlIFdTREwgZG9jdW1lbnQgYWNjZXNzaWJsZSB2aWEgdGhlIHNwZWNpZmllZAotICAgKiBVUkkgaW50byBhIFdTREwgZGVmaW5pdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIHdzZGxVUkkgQSBVUkkgcG9pbnRpbmcgdG8gYSBXU0RMIGZpbGUuCi0gICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgV1NETERvY3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnRbXSByZWFkV1NETChTdHJpbmcgd3NkbFVSSSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkV1NETChudWxsLCB3c2RsVVJJKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBXU0RMIGRvY3VtZW50IGRlc2NyaWJlZCBieSBhIFVSSSBhbmQgaXRzIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZG9jdW1lbnRCYXNlVVJJIFRoZSBVUkkgb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uc0VsZW1lbnQgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQgZm9yIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFdTRExEb2N1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudFtdIHJlYWRXU0RMKFN0cmluZyBkb2N1bWVudEJhc2VVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgZGVmaW5pdGlvbnNFbGVtZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcGFyc2VEb2N1bWVudChkb2N1bWVudEJhc2VVUkksIGRlZmluaXRpb25zRWxlbWVudCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCB0aGUgc3BlY2lmaWVkIFdTREwgZG9jdW1lbnQuCi0gICAqCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgVGhlIGRvY3VtZW50IGJhc2UgVVJJLgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IFRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFdTRExEb2N1bWVudHMuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50W10gcmVhZFdTREwoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gcmVhZFdTREwoZG9jdW1lbnRCYXNlVVJJLCB3c2RsRG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOwotICB9Ci0gIAotICAKLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvaHR0cC9IVFRQVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL2h0dHAvSFRUUFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTM0ZTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvaHR0cC9IVFRQVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLmh0dHA7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nSW5wdXRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nT3BlcmF0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuUG9ydEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzc0ltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZ0ltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudEltcGw7Ci0KLS8qKgotICogVGhlIEhUVFAgdmFsaWRhdG9yIGlzIGFuIGV4dGVuc2lvbiBXU0RMIHZhbGlkYXRvciB0aGF0IHZhbGlkYXRlcyBhbGwgZWxlbWVudHMgaW4gdGhlIEhUVFAKLSAqIG5hbWVzcGFjZS4KLSAqLwotcHVibGljIGNsYXNzIEhUVFBWYWxpZGF0b3IgaW1wbGVtZW50cyBJV1NETDExVmFsaWRhdG9yCi17Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBIVFRQX1JFU09VUkNFX0JVTkRMRV9OQU1FID0gInZhbGlkYXRld3NkbGh0dHAiOwotCQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9QT1JUX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfQklORElOR19PUEVSQVRJT05fRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfSU5QVVRfRUxFTUVOVCA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0lOUFVUX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9IVFRQX0VMRU1FTlRfRk9SX0xPQ0FUSU9OID0gIl9FUlJPUl9JTlZBTElEX0hUVFBfRUxFTUVOVF9GT1JfTE9DQVRJT04iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fTE9DQVRJT05fRk9SX0FERFJFU1MgPSAiX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9BRERSRVNTID0gIl9FUlJPUl9OT19IVFRQQklORElOR19GT1JfQUREUkVTUyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVkVSQiA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX1ZFUkIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9MT0NBVElPTl9VUkkgPSAiX0VSUk9SX0lOVkFMSURfTE9DQVRJT05fVVJJIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04gPSAiX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9UX09OTFlfRUxFTUVOVF9ERUZJTkVEID0gIl9FUlJPUl9OT1RfT05MWV9FTEVNRU5UX0RFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fSFRUUE9QRVJBVElPTl9GT1JfVVJMID0gIl9FUlJPUl9OT19IVFRQT1BFUkFUSU9OX0ZPUl9VUkwiOwotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEdFVCA9ICJHRVQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQT1NUID0gIlBPU1QiOwotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKLQotICBwcml2YXRlIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBIVFRQVmFsaWRhdG9yKCkKLSAgewotCVJlc291cmNlQnVuZGxlIHJiID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEhUVFBfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCW1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgLy8gUG9ydCBIVFRQIGRlZmluaXRpb24KLSAgICAvLyBtYWtlIHN1cmUgZXZlcnkgcG9ydCBoYXMgb25seSBvbmUgYWRkcmVzcyBlbGVtZW50IGRlZmluZWQKLSAgICAvLyBpZiBpdCBpcyBhbiBhZGRyZXNzIGVsZW1lbnQsIHZhbGlkYXRlIGl0Ci0gICAgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gUG9ydEltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQQWRkcmVzc0ltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlQWRkcmVzcyhlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCwgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksCi0gICAgICAgICAgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQmluZGluZyBIVFRQIGRlZmluaXRpb24KLSAgICAvLyBBIEhUVFAgQmluZGluZyBtdXN0IGhhdmUgYSB2ZXJiIG9mIEdFVCBvciBQT1NUCi0gICAgZWxzZSBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IEhUVFBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVCaW5kaW5nKGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwKLSAgICAgICAgICBlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQmluZGluZyBPcGVyYXRpb24gSFRUUCBkZWZpbml0aW9uCi0gICAgLy8gQSBIVFRQIE9wZXJhdGlvbiBoYXMgYSBsb2NhdGlvbiB1cmkgZGVmaW5lZAotICAgIGVsc2UgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gQmluZGluZ09wZXJhdGlvbkltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQT3BlcmF0aW9uSW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVPcGVyYXRpb24oZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQsCi0gICAgICAgICAgICBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwKLSAgICAgICAgICBlbGVtZW50KTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbnB1dEltcGwuY2xhc3MpCi0gICAgewotICAgICAgLy8gdmFsaWRhdGUgdGhlIEhUVFAgdXJsRW5jb2RlZCBhbmQgdXJsUmVwbGFjZW1lbnQKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gSFRUUFVybEVuY29kZWRJbXBsLmNsYXNzIHx8IGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQVXJsUmVwbGFjZW1lbnRJbXBsLmNsYXNzKQotICAgICAgewotICAgICAgICB2YWxpZGF0ZUh0dHBVcmwoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0lOUFVUX0VMRU1FTlQsIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLAotICAgICAgICAgIGVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIGluIHRoaXMgY2FzZSB0aGVyZSBoYXMgYmVlbiBhIEhUVFAgZWxlbWVudCBkZWZpbmVkIHRoYXQgaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgcG9pbnQgaW4gdGhlIEhUVFAgbmFtZXNwYWNlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgIF9FUlJPUl9JTlZBTElEX0hUVFBfRUxFTUVOVF9GT1JfTE9DQVRJT04sCi0gICAgICAgICAgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksCi0gICAgICAgIGVsZW1lbnQpOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGF0IHRoZSBIVFRQIGFkZHJlc3MgaGFzIGEgdmFsdWUgc3BlY2lmaWVkIGZvciBpdCdzIHVyaSBhbmQgdGhhdCB0aGVyZSBpcyBhIEhUVFAgQmluZGluZyBkZWZpbmVkCi0gICAqIGZvciB0aGUgQmluZGluZyBzcGVjaWZpZWQgaW4gdGhlIHBvcnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgSFRUUCBhZGRyZXNzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIEhUVFAgYWRkcmVzcyBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUFkZHJlc3MoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBIVFRQQWRkcmVzc0ltcGwgaGEgPSAoSFRUUEFkZHJlc3NJbXBsKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgdXJpID0gaGEuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICBpZiAodXJpID09IG51bGwgfHwgdXJpLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19MT0NBVElPTl9GT1JfQUREUkVTUyksIGhhKTsKLSAgICB9Ci0KLSAgICBQb3J0IHBvcnQgPSAoUG9ydClwYXJlbnRzLmdldCgwKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotCi0gICAgaWYgKCFoYXNIdHRwQmluZGluZyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICBfRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX0FERFJFU1MsCi0gICAgICAgICAgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSwKLSAgICAgICAgICBRVU9URSArIHBvcnQuZ2V0TmFtZSgpICsgUVVPVEUpLAotICAgICAgICBoYSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGUgSFRUUCBCaW5kaW5nIGRlZmluZWQgaXMgdmFsaWQuIEEgSFRUUCBCaW5kaW5nIG11c3QgaGF2ZSBhIHZlcmIgb2YgR0VUIG9yIFBPU1QuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgSFRUUCBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIEhUVFAgYmluZGluZyBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUJpbmRpbmcoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBIVFRQQmluZGluZ0ltcGwgaGIgPSAoSFRUUEJpbmRpbmdJbXBsKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgdmVyYiA9IGhiLmdldFZlcmIoKTsKLQotICAgIGlmICh2ZXJiICE9IG51bGwgJiYgIXZlcmIuZXF1YWxzKEdFVCkgJiYgIXZlcmIuZXF1YWxzKFBPU1QpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQklORElOR19WRVJCLCBRVU9URSArIHZlcmIgKyBRVU9URSksIGVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBbiBvcGVyYXRpb24gbXVzdCBoYXZlIGEgbG9jYXRpb24gZGVmaW5lZC4gQSBIVFRQIEJpbmRpbmcgbXVzdCBiZSBzcGVjaWZpZWQgdG8gdXNlIGFuIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBIVFRQIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gcGFyZW50cyBUaGUgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBIVFRQIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZU9wZXJhdGlvbihPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIEhUVFBPcGVyYXRpb24gaG8gPSAoSFRUUE9wZXJhdGlvbillbGVtZW50OwotCi0gICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gaG8uZ2V0TG9jYXRpb25VUkkoKTsKLQotICAgIGlmIChsb2NhdGlvblVSSSAhPSBudWxsICYmIGxvY2F0aW9uVVJJLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0xPQ0FUSU9OX1VSSSksIGVsZW1lbnQpOwotICAgIH0KLQotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXBhcmVudHMuZ2V0KDEpOwotICAgIGlmICghaGFzSHR0cEJpbmRpbmcoYmluZGluZykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04sIFFVT1RFICsgYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLAotICAgICAgICBobyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBIVFRQIHVybFJlcGxhY2VtZW50IG9yIHVybEVuY29kZWQuIEVuc3VyZSB0aGUgSFRUUCBvcGVyYXRpb24gaGFzIGJlZW4gZGVmaW5lZC4gCi0gICAqIEVuc3VyZSB0aGF0IGVpdGhlciBlbGVtZW50IGlzIHRoZSBvbmx5IGVsZW1lbnQgc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIEhUVFAgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgVGhlIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgSFRUUCBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaW4gY2hhcmdlIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUh0dHBVcmwoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKXBhcmVudHMuZ2V0KDEpOwotCi0gICAgU3RyaW5nIGVsZW1lbnROYW1lOwotICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gSFRUUFVybEVuY29kZWRJbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGVsZW1lbnROYW1lID0gInVybEVuY29kZWQiOwotICAgIH0KLSAgICBlbHNlIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gSFRUUFVybFJlcGxhY2VtZW50SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBlbGVtZW50TmFtZSA9ICJ1cmxSZXBsYWNlbWVudCI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlbGVtZW50TmFtZSA9IEVNUFRZX1NUUklORzsKLSAgICB9Ci0KLSAgICBCaW5kaW5nSW5wdXQgaW5wdXQgPSAoQmluZGluZ0lucHV0KXBhcmVudHMuZ2V0KDApOwotICAgIGlmIChpbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCkgIT0gMSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT1RfT05MWV9FTEVNRU5UX0RFRklORUQsIGVsZW1lbnROYW1lKSwgZWxlbWVudCk7Ci0gICAgfQotCi0gICAgaWYgKCFoYXNIdHRwT3BlcmF0aW9uKG9wZXJhdGlvbikpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX0hUVFBPUEVSQVRJT05fRk9SX1VSTCwgUVVPVEUgKyBvcGVyYXRpb24uZ2V0TmFtZSgpICsgUVVPVEUsIGVsZW1lbnROYW1lKSwKLSAgICAgICAgZWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEdpdmVuIGEgQmluZGluZ09wZXJhdGlvbiB0ZWxscyB3aGV0aGVyIGl0IGhhcyBhIEhUVFAgb3BlcmF0aW9uIGRlZmluZWQgZm9yIGl0LgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmcgVGhlIEhUVFAgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGlzIGFuIEhUVFAgb3BlcmF0aW9uIGRlZmluZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGhhc0h0dHBPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBleHRlbGVtcyA9IG9wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGlmIChleHRlbGVtcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpZXh0ZWxlbXMgPSBleHRlbGVtcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaWV4dGVsZW1zLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChpZXh0ZWxlbXMubmV4dCgpLmdldENsYXNzKCkgPT0gSFRUUE9wZXJhdGlvbkltcGwuY2xhc3MpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHaXZlbiBhIGJpbmRpbmcgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBhIEhUVFAgYmluZGluZyBkZWZpbmVkLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmcgVGhlIGJpbmRpbmcgdG8gY2hlY2suCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGVyZSBpcyBhbiBIVFRQIGJpbmRpbmcgZGVmaW5lZC4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGhhc0h0dHBCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBleHRlbGVtcyA9IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZXh0ZWxlbXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgaWV4dGVsZW1zID0gZXh0ZWxlbXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGlleHRlbGVtcy5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaWV4dGVsZW1zLm5leHQoKS5nZXRDbGFzcygpID09IEhUVFBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL21pbWUvTUlNRVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9taW1lL01JTUVWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEyYTNiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL21pbWUvTUlNRVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvOwotCi0vKioKLSAqIFRoZSBNSU1FIHZhbGlkYXRvciBwbHVncyBpbnRvIHRoZSBXU0RMIHZhbGlkYXRvciB0byBwcm92aWRlCi0gKiB2YWxpZGF0aW9uIGZvciBhbGwgZWxlbWVudHMgaW4gYSBXU0RMIGRvY3VtZW50IHdpdGhpbiB0aGUgTUlNRSBuYW1lc3BhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FVmFsaWRhdG9yIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRvcgotewotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgTUlNRV9SRVNPVVJDRV9CVU5ETEVfTkFNRSA9ICJ2YWxpZGF0ZXdzZGxtaW1lIjsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLQotICBwdWJsaWMgTUlNRVZhbGlkYXRvcigpCi0gIHsKLQlSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShNSU1FX1JFU09VUkNFX0JVTkRMRV9OQU1FLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLQltZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmIpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9zb2FwL1NPQVBWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvc29hcC9TT0FQVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3Zjg1NzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9zb2FwL1NPQVBWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuc29hcDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdGYXVsdEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nSW5wdXRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nT3BlcmF0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuQmluZGluZ091dHB1dEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLlBvcnRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3NJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmdJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHlJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0SW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVySW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb25JbXBsOwotCi0vKioKLSAqIFRoZSBTT0FQIHZhbGlkYXRvciBwbHVncyBpbnRvIHRoZSBXU0RMIHZhbGlkYXRvciB0byBwcm92aWRlCi0gKiB2YWxpZGF0aW9uIGZvciBhbGwgZWxlbWVudHMgaW4gYSBXU0RMIGRvY3VtZW50IHdpdGhpbiB0aGUgU09BUCBuYW1lc3BhY2UuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU09BUFZhbGlkYXRvciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFNPQVBfUkVTT1VSQ0VfQlVORExFX05BTUUgPSAidmFsaWRhdGV3c2Rsc29hcCI7Ci0JICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfRUxFTUVOVCA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9CSU5ESU5HX09QRVJBVElPTl9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9IRUFERVJfQk9EWV9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0hFQURFUl9CT0RZX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9GQVVMVF9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0ZBVUxUX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9TT0FQX0VMRU1FTlRfRk9SX0xPQ0FUSU9OID0gIl9FUlJPUl9JTlZBTElEX1NPQVBfRUxFTUVOVF9GT1JfTE9DQVRJT04iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fTE9DQVRJT05fRk9SX0FERFJFU1MgPSAiX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9BRERSRVNTID0gIl9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQUREUkVTUyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfU1RZTEUgPSAiX0VSUk9SX0lOVkFMSURfQklORElOR19TVFlMRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVVJJID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVVJJIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OX1NUWUxFID0gIl9FUlJPUl9JTlZBTElEX09QRVJBVElPTl9TVFlMRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfT1BFUkFUSU9OID0gIl9FUlJPUl9OT19TT0FQQklORElOR19GT1JfT1BFUkFUSU9OIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQk9EWV9FTkNPRElOR19TVFlMRSA9ICJfRVJST1JfSU5WQUxJRF9CT0RZX0VOQ09ESU5HX1NUWUxFIjsKLSAgLy9wcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9CT0RZX05BTUVTUEFDRV9GT1JfRU5DT0RFRCA9ICJfRVJST1JfSU5WQUxJRF9CT0RZX05BTUVTUEFDRV9GT1JfRU5DT0RFRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JPRFlfVVNFID0gIl9FUlJPUl9JTlZBTElEX0JPRFlfVVNFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX05PVF9UWVBFID0gIl9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9OT1RfVFlQRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9VTkRFRklORUQgPSAiX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQk9EWSA9ICJfRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX0JPRFkiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX01FU1NBR0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJfTUVTU0FHRV9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX1BBUlRfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJfUEFSVF9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX1VTRV9VTkRFRklORUQgPSAiX0VSUk9SX0hFQURFUl9VU0VfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUl9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSX0VOQ09ESU5HU1RZTEVfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUl9OQU1FU1BBQ0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJfTkFNRVNQQUNFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfSEVBREVSID0gIl9FUlJPUl9OT19TT0FQQklORElOR19GT1JfSEVBREVSIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUkZBVUxUX01FU1NBR0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJGQVVMVF9NRVNTQUdFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJGQVVMVF9QQVJUX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfUEFSVF9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSRkFVTFRfVVNFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfVVNFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJGQVVMVF9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfRU5DT0RJTkdTVFlMRV9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0ZBVUxUX05BTUUgPSAiX0VSUk9SX0lOVkFMSURfRkFVTFRfTkFNRSI7Ci0gIC8vcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfRkFVTFRfRU5DT0RJTkdfU1RZTEUgPSAiX0VSUk9SX0lOVkFMSURfRkFVTFRfRU5DT0RJTkdfU1RZTEUiOwotICAvL3ByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0ZBVUxUX05BTUVTUEFDRV9GT1JfRU5DT0RFRCA9ICJfRVJST1JfSU5WQUxJRF9GQVVMVF9OQU1FU1BBQ0VfRk9SX0VOQ09ERUQiOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU5DT0RFRCA9ICJlbmNvZGVkIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTElURVJBTCA9ICJsaXRlcmFsIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlBDID0gInJwYyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERPQ1VNRU5UID0gImRvY3VtZW50IjsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKLQotICBwcm90ZWN0ZWQgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotIAotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBTT0FQVmFsaWRhdG9yKCkKLSAgewotCVJlc291cmNlQnVuZGxlIHJiID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFNPQVBfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCW1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IjdmFsaWRhdGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS51dGlsLkxpc3QsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgLy8gUG9ydCBTT0FQIGRlZmluaXRpb24KLSAgICAvLyBtYWtlIHN1cmUgZXZlcnkgcG9ydCBoYXMgb25seSBvbmUgYWRkcmVzcyBlbGVtZW50IGRlZmluZWQKLSAgICAvLyBpZiBpdCBpcyBhbiBhZGRyZXNzIGVsZW1lbnQsIHZhbGlkYXRlIGl0Ci0gICAgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gUG9ydEltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBTT0FQQWRkcmVzc0ltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlQWRkcmVzcyhlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCwgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIGVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEJpbmRpbmcgU09BUCBkZWZpbml0aW9uCi0gICAgLy8gQSBTT0FQIEJpbmRpbmcgbXVzdCBoYXZlIGEgc3R5bGUgb3IgcnBjIG9yIGRvY3VtZW50IG9yIG5vIHN0eWxlIGRlZmluZWQgLSBkZWZhdWx0cyB0byBkb2N1bWVudAotICAgIC8vIE11c3QgaGF2ZSBhIHRyYW5zcG9ydCB1cmkgZGVmaW5lZCAtIGNoZWNrIGlmIHRoZSB1cmkgaXMgZW1wdHkKLSAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gU09BUEJpbmRpbmdJbXBsLmNsYXNzKQotICAgICAgewotICAgICAgICB2YWxpZGF0ZUJpbmRpbmcoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0VMRU1FTlQsIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQmluZGluZyBPcGVyYXRpb24gU09BUCBkZWZpbml0aW9uCi0gICAgLy8gQSBTT0FQIE9wZXJhdGlvbiBtYXkgaGF2ZSBhIHN0eWxlIGRlZmluZWQgaW4gd2hpY2ggY2FzZSBpdCBtdXN0IGJlIGRvY3VtZW50IG9yIHJwYwotICAgIC8vIGFuZCBtYXkgaGF2ZSBhIHNvYXBBY3Rpb24gdXJpIGRlZmluZWQKLSAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdPcGVyYXRpb25JbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gU09BUE9wZXJhdGlvbkltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlT3BlcmF0aW9uKGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQsCi0gICAgICAgICAgICBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgZWxzZSBpZiAoCi0gICAgICBwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbnB1dEltcGwuY2xhc3MgfHwgcGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nT3V0cHV0SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICAvLyB2YWxpZGF0ZSB0aGUgU09BUCBib2R5Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IFNPQVBCb2R5SW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVCb2R5KGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgLy8gdmFsaWF0ZSB0aGUgU09BUCBoZWFkZXIKLSAgICAgIGVsc2UgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBTT0FQSGVhZGVySW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVIZWFkZXIoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9IRUFERVJfQk9EWV9FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gQmluZGluZ0ZhdWx0SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IFNPQVBGYXVsdEltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlRmF1bHQoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9GQVVMVF9FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGluIHRoaXMgY2FzZSB0aGVyZSBoYXMgYmVlbiBhIFNPQVAgZWxlbWVudCBkZWZpbmVkIHRoYXQgaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgcG9pbnQgaW4gdGhlIFNPQVAgbmFtZXNwYWNlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgIF9FUlJPUl9JTlZBTElEX1NPQVBfRUxFTUVOVF9GT1JfTE9DQVRJT04sCi0gICAgICAgICAgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIGVsZW1lbnQpOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGF0IHRoZSBTT0FQIGFkZHJlc3MgaGFzIGEgdmFsdWUgc3BlY2lmaWVkIGZvciBpdCdzIHVyaSBhbmQgdGhhdCB0aGUgYmluZGluZyBoYXMgYSBTT0FQCi0gICAqIEJpbmRpbmcgZGVmaW5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBTT0FQIGFkZHJlc3MgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIFNPQVAgYWRkcmVzcyBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUFkZHJlc3MoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBTT0FQQWRkcmVzc0ltcGwgc2EgPSAoU09BUEFkZHJlc3NJbXBsKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgdXJpID0gc2EuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICBpZiAodXJpID09IG51bGwgfHwgdXJpLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19MT0NBVElPTl9GT1JfQUREUkVTUyksIHNhKTsKLSAgICB9Ci0KLSAgICBQb3J0IHBvcnQgPSAoUG9ydClwYXJlbnRzLmdldCgwKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotCi0gICAgaWYgKCFoYXNTb2FwQmluZGluZyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICBfRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX0FERFJFU1MsCi0gICAgICAgICAgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSwKLSAgICAgICAgICBRVU9URSArIHBvcnQuZ2V0TmFtZSgpICsgUVVPVEUpLCBzYSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZSB0aGUgU09BUCBCaW5kaW5nIGRlZmluZWQgaXMgdmFsaWQuIEEgU09BUCBCaW5kaW5nIG11c3QgaGF2ZSBhIHN0eWxlIG9mIHJwYyBvciBkb2N1bWVudAotICAgKiBvciBubyBzdHlsZSBkZWZpbmVkIChkZWZhdWx0cyB0byBkb2N1bWVudC4pICBBIHZhbGlkIChub24gZW1wdHkpIFVSSSBtdXN0IGFsc28gYmUgc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgYmluZGluZyBlbGVtZW50LgotICAgKiBAcGFyYW0gcGFyZW50cyBBIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgU09BUCBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSB2YWxpZGF0aW9uIGluZm8gZm9yIHRoaXMgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlQmluZGluZyhPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBCaW5kaW5nSW1wbCBzYiA9IChTT0FQQmluZGluZ0ltcGwpZWxlbWVudDsKLQotICAgIFN0cmluZyBzdHlsZSA9IHNiLmdldFN0eWxlKCk7Ci0gICAgU3RyaW5nIHVyaSA9IHNiLmdldFRyYW5zcG9ydFVSSSgpOwotCi0gICAgaWYgKHN0eWxlICE9IG51bGwgJiYgIXN0eWxlLmVxdWFsc0lnbm9yZUNhc2UoUlBDKSAmJiAhc3R5bGUuZXF1YWxzSWdub3JlQ2FzZShET0NVTUVOVCkpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQklORElOR19TVFlMRSwgUVVPVEUgKyBzYi5nZXRTdHlsZSgpICsgUVVPVEUpLCBlbGVtZW50KTsKLSAgICB9Ci0gICAgaWYgKHVyaS5lcXVhbHNJZ25vcmVDYXNlKEVNUFRZX1NUUklORykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX1VSSSksIGVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBbiBvcGVyYXRpb24gbWF5IGhhdmUgYSBzdHlsZSBkZWZpbmVkLiBJZiBpdCBpcyBkZWZpbmVkIGl0IG11c3QgYmUgcnBjIG9yIGRvY3VtZW50LiBJdCBtYXkgYWxzbyBoYXZlIGEKLSAgICogdXJpIGRlZmluZWQgd2hpY2ggbXVzdCBiZSBub24gZW1wdHkuICBJdCBtYXkgaGF2ZSBhIHNvYXBBY3Rpb24gZGVmaW5lZCBhcyB3ZWxsLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZU9wZXJhdGlvbihPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBPcGVyYXRpb24gc28gPSAoU09BUE9wZXJhdGlvbillbGVtZW50OwotCi0gICAgU3RyaW5nIHNvYXBTdHlsZSA9IHNvLmdldFN0eWxlKCk7Ci0KLSAgICBpZiAoc29hcFN0eWxlICE9IG51bGwgJiYgIXNvYXBTdHlsZS5lcXVhbHNJZ25vcmVDYXNlKFJQQykgJiYgIXNvYXBTdHlsZS5lcXVhbHNJZ25vcmVDYXNlKERPQ1VNRU5UKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX09QRVJBVElPTl9TVFlMRSksIGVsZW1lbnQpOwotICAgIH0KLQotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXBhcmVudHMuZ2V0KDEpOwotICAgIGlmICghaGFzU29hcEJpbmRpbmcoYmluZGluZykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9PUEVSQVRJT04sIFFVT1RFICsgYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzbyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBTT0FQIGJvZHkuIElmIGVuY29kZWQgYSBib2R5IG11c3QgaGF2ZSBhbiBlbmNvZGluZ1N0eWxlLiBBbHNvLAotICAgKiBpZiBzcGVjaWZpZWQsIGFsbCBvZiB0aGUgcGFydHMgbGlzdGVkIG11c3QgYmUgZGVmaW5lZCBwYXJ0cyBhbmQgaW4gdGhlIGVuY29kaW5nIHVzZSBjYXNlLCB0aGUgcGFydHMKLSAgICogbXVzdCBoYXZlIHR5cGVzIGRlZmluZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgU09BUCBib2R5IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIGJvZHkgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIHZhbGlkYXRpb24gaW5mbyBmb3IgdGhpcyB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVCb2R5KE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgU09BUEJvZHlJbXBsIHNiID0gKFNPQVBCb2R5SW1wbCllbGVtZW50OwotCi0gICAgU3RyaW5nIHVzZSA9IHNiLmdldFVzZSgpOwotCi0gICAgLy8gaWYgdGhlIHVzZSA9IGVuY29kZWQgdGhlbiB0aGVyZSBtdXN0IGJlIGVuY29kaW5nU3R5bGVzLgotICAgIGlmICh1c2UgIT0gbnVsbCAmJiB1c2UuZXF1YWxzSWdub3JlQ2FzZShFTkNPREVEKSkKLSAgICB7Ci0gICAgICBMaXN0IGVuY29kaW5nU3R5bGVzID0gc2IuZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgIGlmIChlbmNvZGluZ1N0eWxlcyA9PSBudWxsIHx8IGVuY29kaW5nU3R5bGVzLnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JPRFlfRU5DT0RJTkdfU1RZTEUpLCBzYik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHVzZSAhPSBudWxsICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShMSVRFUkFMKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JPRFlfVVNFLCBRVU9URSArIHVzZSArIFFVT1RFKSwgc2IpOwotICAgIH0KLQotICAgIC8vQ2hlY2sgdGhhdCB0aGUgcGFydHMgYXJlIHZhbGlkCi0gICAgLy8gcGFydHMgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBtZXNzYWdlIHNwZWNpZmllZCBmb3IgdGhlIG9wZXJhdGlvbgotICAgIExpc3QgcGFydHMgPSBzYi5nZXRQYXJ0cygpOwotCi0gICAgaWYgKHBhcnRzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgcGFydHNJdGVyYXRvciA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAocGFydHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwYXJ0ID0gKFN0cmluZylwYXJ0c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBibyA9IChCaW5kaW5nT3BlcmF0aW9uKXBhcmVudHMuZ2V0KDEpOwotICAgICAgICBPcGVyYXRpb24gbyA9IGJvLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAgIGlmIChvICE9IG51bGwgJiYgIW8uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBpbnB1dCBvciBvdXRwdXQgaWYgaXQgZXhpc3RzCi0gICAgICAgICAgTWVzc2FnZSBtZXNzID0gbnVsbDsKLSAgICAgICAgICBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nSW5wdXRJbXBsLmNsYXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElucHV0IGlucHV0ID0gby5nZXRJbnB1dCgpOwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWVzcyA9IGlucHV0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nT3V0cHV0SW1wbC5jbGFzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPdXRwdXQgb3V0cHV0ID0gby5nZXRPdXRwdXQoKTsKLQotICAgICAgICAgICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzID0gb3V0cHV0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAobWVzcyAhPSBudWxsICYmICFtZXNzLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgUGFydCBwID0gbWVzcy5nZXRQYXJ0KHBhcnQpOwotCi0gICAgICAgICAgICBpZiAocCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBpZiB0aGUgdXNlIGlzIGVuY29kZWQgdGhlIHBhcnRzIG11c3QgYWxsIGhhdmUgYSB0eXBlIGRlZmluZWQKLSAgICAgICAgICAgICAgaWYgKHVzZSAhPSBudWxsICYmIHVzZS5lcXVhbHNJZ25vcmVDYXNlKEVOQ09ERUQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHAuZ2V0VHlwZU5hbWUoKSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIHBhcnQgZXJyb3IgLSBwYXJ0IG5lZWRzIHRvIGJlIHR5cGUgYW5kIGlzbid0CQotICAgICAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX05PVF9UWVBFLCBRVU9URSArIHBhcnQgKyBRVU9URSksIHNiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9wYXJ0IGVycm9yIC0gcGFydCBpc24ndCBkZWZpbmVkCQotICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9VTkRFRklORUQsIFFVT1RFICsgcGFydCArIFFVT1RFKSwgc2IpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9wYXJ0IGVycm9yIC0gaW5wdXQgaXNuJ3QgZGVmaW5lZAotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCwgUVVPVEUgKyBwYXJ0ICsgUVVPVEUpLCBzYik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIHBhcnRzIGVycm9yIC0gb3BlcmF0aW9uIGlzbid0IGRlZmluZWQKLSAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCwgUVVPVEUgKyBwYXJ0ICsgUVVPVEUpLCBzYik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylwYXJlbnRzLmdldCgyKTsKLSAgICBpZiAoIWhhc1NvYXBCaW5kaW5nKGJpbmRpbmcpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQk9EWSwgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIHNiKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQSBTT0FQIGhlYWRlciBtdXN0IGhhdmUgYSBtZXNzYWdlLCBwYXJ0IGFuZCB1c2UgZGVmaW5lZC4gSWYgdGhlIHVzZSBpcyBlbmNvZGVkLCBtdXN0Ci0gICAqIGFsc28gaGF2ZSBhIG5vbi1lbXB0eSBlbmNvZGluZ1N0eWxlIGFuZCBuYW1lc3BhY2UgZGVmaW5lZC4KLSAgICogQSBTT0FQIGhlYWRlciBtYXkgaGF2ZSBoZWFkZXJmYXVsdHMgZGVmaW5lZCBhcyB3ZWxsLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgaGVhZGVyIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIGhlYWRlciBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUhlYWRlcihPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBIZWFkZXJJbXBsIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlckltcGwpZWxlbWVudDsKLQotICAgIFFOYW1lIG1lc3NhZ2VRTmFtZSA9IHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9ICgoRGVmaW5pdGlvbilwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpKS5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBtZXNzYWdlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUl9NRVNTQUdFX1VOREVGSU5FRCwgUVVPVEUgKyBtZXNzYWdlUU5hbWUuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIHNvYXBIZWFkZXIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIHBhcnRuYW1lID0gc29hcEhlYWRlci5nZXRQYXJ0KCk7Ci0gICAgICBQYXJ0IHBhcnQgPSBtZXNzYWdlLmdldFBhcnQocGFydG5hbWUpOwotICAgICAgaWYgKHBhcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gcGFydCB1bmRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9FUlJPUl9IRUFERVJfUEFSVF9VTkRFRklORUQsCi0gICAgICAgICAgICBRVU9URSArIHBhcnRuYW1lICsgUVVPVEUsCi0gICAgICAgICAgICBRVU9URSArIG1lc3NhZ2VRTmFtZS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgc29hcEhlYWRlcik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIHVzZSA9IHNvYXBIZWFkZXIuZ2V0VXNlKCk7Ci0gICAgaWYgKHVzZSAhPSBudWxsICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShMSVRFUkFMKSAmJiAhdXNlLmVxdWFsc0lnbm9yZUNhc2UoRU5DT0RFRCkpCi0gICAgewotICAgICAgLy8gdXNlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUl9VU0VfVU5ERUZJTkVELCBRVU9URSArIHVzZSArIFFVT1RFKSwgc29hcEhlYWRlcik7Ci0gICAgfQotCi0gICAgaWYgKHVzZS5lcXVhbHNJZ25vcmVDYXNlKEVOQ09ERUQpKQotICAgIHsKLSAgICAgIExpc3QgZW5jb2RpbmdTdHlsZXMgPSBzb2FwSGVhZGVyLmdldEVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICBpZiAoZW5jb2RpbmdTdHlsZXMgPT0gbnVsbCB8fCBlbmNvZGluZ1N0eWxlcy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIGVuY29kaW5nU3R5bGUgZGVmaW5lZAotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9IRUFERVJfRU5DT0RJTkdTVFlMRV9VTkRFRklORUQpLCBzb2FwSGVhZGVyKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHNvYXBIZWFkZXIuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gbmFtZXNwYWNlIGRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSEVBREVSX05BTUVTUEFDRV9VTkRFRklORUQpLCBzb2FwSGVhZGVyKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBMaXN0IGhlYWRlckZhdWx0cyA9IHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgIGlmIChoZWFkZXJGYXVsdHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpaGVhZGVyRmF1bHRzID0gaGVhZGVyRmF1bHRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaWhlYWRlckZhdWx0cy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlSGVhZGVyRmF1bHQoaWhlYWRlckZhdWx0cy5uZXh0KCksIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgIH0KLQotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXBhcmVudHMuZ2V0KDIpOwotICAgIGlmICghaGFzU29hcEJpbmRpbmcoYmluZGluZykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9IRUFERVIsIFFVT1RFICsgYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzb2FwSGVhZGVyKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBIFNPQVAgaGVhZGVyZmF1bHQgbXVzdCBoYXZlIGEgbWVzc2FnZSwgcGFydCBhbmQgdXNlIGRlZmluZWQuIElmIHRoZSB1c2UgaXMgZW5jb2RlZCwgbXVzdAotICAgKiBhbHNvIGhhdmUgYSBub24tZW1wdHkgZW5jb2RpbmdTdHlsZSBhbmQgbmFtZXNwYWNlIGRlZmluZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgU09BUCBoZWFkZXIgZmF1bHQgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIFNPQVAgaGVhZGVyIGZhdWx0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSB2YWxpZGF0aW9uIGluZm8gZm9yIHRoaXMgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlSGVhZGVyRmF1bHQoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBTT0FQSGVhZGVyRmF1bHRJbXBsIHNvYXBIZWFkZXJGYXVsdCA9IChTT0FQSGVhZGVyRmF1bHRJbXBsKWVsZW1lbnQ7Ci0KLSAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBzb2FwSGVhZGVyRmF1bHQuZ2V0TWVzc2FnZSgpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9ICgoRGVmaW5pdGlvbilwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpKS5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBtZXNzYWdlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUkZBVUxUX01FU1NBR0VfVU5ERUZJTkVELCBRVU9URSArIG1lc3NhZ2VRTmFtZS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgc29hcEhlYWRlckZhdWx0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0bmFtZSA9IHNvYXBIZWFkZXJGYXVsdC5nZXRQYXJ0KCk7Ci0gICAgICBQYXJ0IHBhcnQgPSBtZXNzYWdlLmdldFBhcnQocGFydG5hbWUpOwotICAgICAgaWYgKHBhcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gcGFydCB1bmRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgIF9FUlJPUl9IRUFERVJGQVVMVF9QQVJUX1VOREVGSU5FRCwKLSAgICAgICAgICAgIFFVT1RFICsgcGFydG5hbWUgKyBRVU9URSwKLSAgICAgICAgICAgIFFVT1RFICsgbWVzc2FnZVFOYW1lLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzb2FwSGVhZGVyRmF1bHQpOwotICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZyB1c2UgPSBzb2FwSGVhZGVyRmF1bHQuZ2V0VXNlKCk7Ci0gICAgaWYgKHVzZSAhPSBudWxsICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShMSVRFUkFMKSAmJiAhdXNlLmVxdWFsc0lnbm9yZUNhc2UoRU5DT0RFRCkpCi0gICAgewotICAgICAgLy8gdXNlIHVuZGVmaW5lZAotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUkZBVUxUX1VTRV9VTkRFRklORUQsIFFVT1RFICsgdXNlICsgUVVPVEUpLCBzb2FwSGVhZGVyRmF1bHQpOwotICAgIH0KLQotICAgIGlmICh1c2UuZXF1YWxzSWdub3JlQ2FzZShFTkNPREVEKSkKLSAgICB7Ci0gICAgICBMaXN0IGVuY29kaW5nU3R5bGVzID0gc29hcEhlYWRlckZhdWx0LmdldEVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICBpZiAoZW5jb2RpbmdTdHlsZXMgPT0gbnVsbCB8fCBlbmNvZGluZ1N0eWxlcy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIGVuY29kaW5nU3R5bGUgZGVmaW5lZAotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9IRUFERVJGQVVMVF9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCksIHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICB9Ci0KLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBzb2FwSGVhZGVyRmF1bHQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gbmFtZXNwYWNlIGRlZmluZWQKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCksIHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogVmFsaWRhdGUgdGhlIFNPQVAgZmF1bHQuIEEgU09BUCBmYXVsdCBtdXN0IGhhdmUgYSBuYW1lIGRlZmluZWQgdGhhdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBuYW1lCi0gICogc3BlY2lmaWVkIGluIHRoZSBwb3J0VHlwZS4gIElmIGVuY29kZWQgYSBmYXVsdCBtdXN0IGhhdmUgYW4gZW5jb2RpbmdTdHlsZSBhbmQgYSBuYW1lc3BhY2VVUkkuIAotICAqIAotICAqIEBwYXJhbSBlbGVtZW50IFRoZSBTT0FQIGZhdWx0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIGZhdWx0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxpZGF0aW9uSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlRmF1bHQoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBTT0FQRmF1bHRJbXBsIGZhdWx0ID0gKFNPQVBGYXVsdEltcGwpZWxlbWVudDsKLQotICAgIFN0cmluZyBuYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotCi0gICAgU3RyaW5nIHBhcmVudE5hbWUgPSAoKEJpbmRpbmdGYXVsdClwYXJlbnRzLmdldCgwKSkuZ2V0TmFtZSgpOwotCi0gICAgaWYgKCFuYW1lLmVxdWFscyhwYXJlbnROYW1lKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9GQVVMVF9OQU1FLCBRVU9URSArIG5hbWUgKyBRVU9URSwgUVVPVEUgKyBwYXJlbnROYW1lICsgUVVPVEUpLCBmYXVsdCk7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGhhc1NvYXBCaW5kaW5nLiAtIGhlbHBlciBNZXRob2QKLSAgICogR2l2ZW4gYSBiaW5kaW5nIHJldHVybnMgdHJ1ZSBpZiBpdCBoYXMgYSBTT0FQIGJpbmRpbmcgZGVmaW5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nIC0gdGhlIFNPQVAgYmluZGluZyB0byBjaGVjawotICAgKiBAcmV0dXJuIHRydWUgaWYgYSBiaW5kaW5nIGhhcyBhIFNPQVAgYmluZGluZyBkZWZpbmVkLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGhhc1NvYXBCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBleHRlbGVtcyA9IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZXh0ZWxlbXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgaWV4dGVsZW1zID0gZXh0ZWxlbXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGlleHRlbGVtcy5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaWV4dGVsZW1zLm5leHQoKS5nZXRDbGFzcygpID09IFNPQVBCaW5kaW5nSW1wbC5jbGFzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9ET01FcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvRE9NRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5YjExMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9ET01FcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIHNpZ25pZnkgZXJyb3IgbGV2ZWxzIHRoYXQgYXJlIHRoZSByZXN1bHQgb2YKLSAqIFhNTFBhcnNlRXhjZXB0aW9uLiBUaGV5IGNvbmNlcHR1YWxseSBjb3JyZXNwb25kIHRvIG9yZy53M2MuZG9tLkRPTUVycm9yIGJ1dAotICogd2UgdXNlIG91ciBvd24gaW50ZXJmYWNlLCBzaW5jZSBET01FcnJvciBpcyBub3QgaW4gSmF2YSAxLjQsIGFuZCBpdHMKLSAqIHBhY2thZ2UgY2hhbmdlcyBmcm9tIFhlcmNlcyAyLjYuMiBhbmQgWGVyY2VzIDIuNy4wLgotICovCi0KLXB1YmxpYyBpbnRlcmZhY2UgRE9NRXJyb3IgewotCWludCBTRVZFUklUWV9XQVJOSU5HID0gMTsKLQlpbnQgU0VWRVJJVFlfRVJST1IgPSAyOwotCWludCBTRVZFUklUWV9GQVRBTF9FUlJPUiA9IDM7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9GaWxlRW50aXR5UmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjUzOTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLkxhenlVUkxJbnB1dFN0cmVhbTsKLQotLyoqCi0gKiBFbnRpdHkgcmVzb2x2ZSB0byByZXNvbHZlIGZpbGUgZW50aXRpZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlRW50aXR5UmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2UuZ2V0UHVibGljSWQoKTsKLSAgICBTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IHJlc291cmNlLmdldE5hbWVzcGFjZSgpOwotICAgIFN0cmluZyB1cmwgPSBudWxsOwotICAgIGlmKHN5c3RlbUlkICE9IG51bGwpCi0gICAgewotICAgICAgdXJsID0gc3lzdGVtSWQ7Ci0gICAgfQotICAgIGVsc2UgaWYocHVibGljSWQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSBwdWJsaWNJZDsKLSAgICB9Ci0gICAgZWxzZSBpZihuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSBuYW1lc3BhY2U7Ci0gICAgfQotICAgIGlmKHVybCAhPSBudWxsKQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gbmV3IExhenlVUkxJbnB1dFN0cmVhbSh1cmwpOwotICAgICAgcmV0dXJuIG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgcmVzb3VyY2UuZ2V0RXhwYW5kZWRTeXN0ZW1JZCgpLCByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCksIGlzLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIxNWU0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0KLS8qKgotICogR2VuZXJhdGUgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzY2hlbWEgZm9yIGFuIGlubGluZSBzY2hlbWEuIFdpbGwgYWRkIGltcG9ydHMgZm9yIHVucmVzb2x2ZWQKLSAqIG5hbWVzcGFjZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IKLXsKLSAgLyoqCi0gICAqIEdlbmVyYXRpbmcgaW1wb3J0IHN0YXRlbWVudHMgZm9yIGlubGluZSBzY2hlbWEgcmVmZXJlbmNlcyBpcyAKLSAgICogaW52YWxpZCBhY2NvcmRpbmcgdG8gdGhlIFdTREwgc3BlYy4gQXMgc29tZSBvbGRlciBjbGllbnRzIChXU1ZUKSBtYXkKLSAgICogZGVwZW5kIG9uIHRoaXMgZnVuY3Rpb25hbGl0eSB0aGUgb3B0aW9uIHRvIGFsbG93IHRoaXMgaXMgbGVmdAotICAgKiBpbi4gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBwb3N0IDEuNS4KLSAgICogVE9ETzogUmV2aWV3IHJlbW92aW5nIHRoaXMgcHJlZmVyZW5jZS4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBHRU5FUkFURV9JTkxJTkVfSU1QT1JUUyA9IGZhbHNlOwotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTkNPRElOR19VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BSRUZJWCA9ICJmaWxlOi8vLyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTE5TID0gInhtbG5zIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUTkFNRVNQQUNFID0gInRhcmdldE5hbWVzcGFjZSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJTVBPUlQgPSAiaW1wb3J0IjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5DTFVERSA9ICJpbmNsdWRlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BID0gInNjaGVtYSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQUxPQ0FUSU9OID0gInNjaGVtYUxvY2F0aW9uIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRSA9ICJ0eXBlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJuYW1lIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBpZ25vcmVOYW1lc3BhY2VzID0KLSAgICB7IENvbnN0YW50cy5OU19VUklfWFNEXzE5OTksIENvbnN0YW50cy5OU19VUklfWFNEXzIwMDAsIENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEgfTsKLQotICBwcm90ZWN0ZWQgc3RhdGljIElubGluZVNjaGVtYUdlbmVyYXRvciBpbnN0YW5jZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIElubGluZVNjaGVtYUdlbmVyYXRvcigpCi0gIHsKLQlTdHJpbmcgZ2VuSW5saW5lSW1wb3J0cyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgid3NkbC5yZXF1aXJlLmlubGluZS5pbXBvcnRzIik7Ci0JaWYoZ2VuSW5saW5lSW1wb3J0cyAhPSBudWxsICYmIGdlbklubGluZUltcG9ydHMuZXF1YWxzKCJmYWxzZSIpKQotCXsKLQkgIEdFTkVSQVRFX0lOTElORV9JTVBPUlRTID0gdHJ1ZTsKLQl9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YW5jZSBvZiB0aGUgSW5saW5lU2NoZW1hR2VuZXJhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGlubGluZSBzY2hlbWEgZ2VuZXJhdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2UgPSBuZXcgSW5saW5lU2NoZW1hR2VuZXJhdG9yKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNjaGVtYSBmcm9tIHRoZSBlbGVtZW50IHByb3ZpZGVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZWxlbWVudHMgQSBsaXN0IG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc2NoZW1hIGluIG9yZGVyLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSBVUkkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gdmFsaWRJbXBvcnROU3MgQSBzZXQgb2YgbmFtZXNwYWNlcyBmb3Igd2hpY2ggaXQncyB2YWxpZCB0byBjcmVhdGUgaW1wb3J0IHN0YXRlbWVudHMuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVYU0RTdHJpbmcoRWxlbWVudCBlbGVtZW50LCBMaXN0IGVsZW1lbnRzLCBTdHJpbmcgZmlsZWxvY2F0aW9uLCBTZXQgdmFsaWRJbXBvcnROU3MpCi0gIHsKLQkgIHJldHVybiBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuY3JlYXRlWFNEU3RyaW5nKGVsZW1lbnQsIGVsZW1lbnRzLCBmaWxlbG9jYXRpb24sIG5ldyBIYXNodGFibGUoKSwgdmFsaWRJbXBvcnROU3MpOwotICB9Ci0gIAotICAvKioKLSAgCSogQ3JlYXRlcyBhIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNjaGVtYSBtb2RlbCB3aXRoIHRoZSByb290IGVsZW1lbnQgb2YKLSAgCSogZXh0RWxlbS4gQ2FsbHMgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkgdG8gdGFrZSBjYXJlIG9mIGJ1aWxkaW5nIHRoZSBTdHJpbmcKLSAgCSogYWZ0ZXIgaXQgb2J0YWlucyB0aGUgRWxlbWVudCBmcm9tIHRoZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuCi0gIAkqIAotICAJKiBAcGFyYW0gZWxlbWVudCBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gIAkqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3QgdG8gY29udGFpbiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgCSogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhlIHNjaGVtYSBpcyBsb2NhdGVkIGluLgotICAJKiBAcGFyYW0gcGFyZW50TlNzIEEgaGFzaHRhYmxlIG9mIHBhcmVudCBuYW1lc3BhY2VzIHRvIHVzZWQgdG8gcmVzb2x2ZSBwcmVmaXhlcy4KLSAgCSogQHBhcmFtIHZhbGlkSW1wb3J0TlNzIEEgc2V0IG9mIG5hbWVzcGFjZXMgZm9yIHdoaWNoIGl0J3MgdmFsaWQgdG8gY3JlYXRlIGltcG9ydCBzdGF0ZW1lbnRzLgotICAJKiBAcmV0dXJuIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzY2hlbWEgd2l0aCB0aGUgcm9vdCBlbGVtZW50ICdlbGVtZW50Jy4KLSAgCSovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZyhFbGVtZW50IGVsZW1lbnQsIExpc3QgZWxlbWVudHMsIFN0cmluZyBmaWxlbG9jYXRpb24sIEhhc2h0YWJsZSBwYXJlbnROU3MsIFNldCB2YWxpZEltcG9ydE5TcykKLSAgewotCVNldCBpbXBvcnROU3MgPSBuZXcgVHJlZVNldCgpOyAKLSAgICBpbXBvcnROU3MuYWRkQWxsKHZhbGlkSW1wb3J0TlNzKTsgCi0gICAgaW1wb3J0TlNzLmFkZChTT0FQX0VOQ09ESU5HX1VSSSk7IAotCi0gICAgSW5saW5lU2NoZW1hR2VuZXJhdG9yIHNjaGVtYUdlbmVyYXRvciA9IElubGluZVNjaGVtYUdlbmVyYXRvci5nZXRJbnN0YW5jZSgpOwotICAgIEhhc2h0YWJsZSBuc1Jlc29sdmVyID0gc2NoZW1hR2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIoZWxlbWVudCk7Ci0gICAgTGlzdCByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5nZXROYW1lc3BhY2VQcmVmaXhlcyhlbGVtZW50KTsKLSAgICBIYXNodGFibGUgcmVxTlNEZWNsID0gc2NoZW1hR2VuZXJhdG9yLnJlc29sdmVOYW1lc3BhY2VzKHJlcW5zLCBuc1Jlc29sdmVyLCBwYXJlbnROU3MpOwotICAgIC8vSGFzaHRhYmxlIHJlcU5TRGVjbCA9IHNjaGVtYUdlbmVyYXRvci5nZXRSZXF1aXJlZE5TRGVjbGFyYXRpb25zKHJlcW5zLCBuc1Jlc29sdmVyLCBwYXJlbnROU3MpOwotICAgIGlmKEdFTkVSQVRFX0lOTElORV9JTVBPUlRTKQotICAgIHsKLSAgICAgIExpc3QgaW1wb3J0TlMgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0SW1wb3J0TmFtZXNwYWNlcyhlbGVtZW50KTsKLSAgICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUltcG9ydHMocmVxbnMsIGltcG9ydE5TKTsKLSAgICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUxvY2FsTmFtZXNwYWNlcyhyZXFucywgZWxlbWVudCk7Ci0JICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZXN0cmljdEltcG9ydHMocmVxbnMsIHZhbGlkSW1wb3J0TlNzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlcW5zLmNsZWFyKCk7Ci0gICAgfQotICAgIHJldHVybiBzY2hlbWFHZW5lcmF0b3IuY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoZWxlbWVudCwgZWxlbWVudHMsIHJlcW5zLCByZXFOU0RlY2wsIGZpbGVsb2NhdGlvbik7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgaXMgcmVxdWlyZWQgYnV0IG5vdCBpbXBvcnRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gcGFyZW50TlNzIEEgaGFzaHRhYmxlIG9mIHRoZSBwYXJlbnQgbmFtZXNwYWNlcy4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzb2FwIGVuY29kaW5nIG5hbWVzcGFjZSBpcyByZXF1aXJlZCBidXQgbm90IGltcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc29hcEVuY29kaW5nUmVxdWlyZWROb3RJbXBvcnRlZChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBmaWxlbG9jYXRpb24sIEhhc2h0YWJsZSBwYXJlbnROU3MpCi0gIHsKLSAgICBJbmxpbmVTY2hlbWFHZW5lcmF0b3Igc2NoZW1hR2VuZXJhdG9yID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmdldEluc3RhbmNlKCk7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0TlNSZXNvbHZlcihlbGVtZW50KTsKLSAgICBMaXN0IHJlcW5zID0gbnVsbDsKLQotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKGVsZW1lbnQpOwotICAgIHNjaGVtYUdlbmVyYXRvci5yZXNvbHZlTmFtZXNwYWNlcyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICAvL3NjaGVtYUdlbmVyYXRvci5yZXNvbHZlVW5kZWNsYXJlZE5hbWVzcGFjZXMocmVxbnMsIHBhcmVudE5Tcyk7Ci0gICAgTGlzdCBpbXBvcnROUyA9IHNjaGVtYUdlbmVyYXRvci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUltcG9ydHMocmVxbnMsIGltcG9ydE5TKTsKLSAgICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZW1vdmVMb2NhbE5hbWVzcGFjZXMocmVxbnMsIGVsZW1lbnQpOwotICAgIHJldHVybiBzY2hlbWFHZW5lcmF0b3IuY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChyZXFucyk7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIHVuZGVjbGFyZWQgbmFtZXNwYWNlcy4KLSAgICogCi0gICAqIEBwYXJhbSB1bnJlc29sdmVkTlNzIEEgbGlzdCBvZiB1bnJlc29sdmVkIG5hbWVzcGFjZXMuCi0gICAqIEBwYXJhbSBuc1Jlc29sdmVyIFRoZSBuYW1lc3BhY2UgcmVzb2x2ZXIgdG8gdXNlLgotICAgKiBAcmV0dXJuIEEgaGFzaHRhYmxlIG9mIHByZWZpeGVzIGFuZCBuYW1lc3BhY2VzLgotICAgKi8KLS8vICBwcm90ZWN0ZWQgSGFzaHRhYmxlIHJlc29sdmVVbmRlY2xhcmVkTmFtZXNwYWNlcyhMaXN0IHVucmVzb2x2ZWROU3MsIEhhc2h0YWJsZSBuc1Jlc29sdmVyKQotLy8gIHsKLS8vICAgIEhhc2h0YWJsZSBuYW1lc3BhY2VzID0gbmV3IEhhc2h0YWJsZSgpOwotLy8gICAgaWYgKHVucmVzb2x2ZWROU3MgIT0gbnVsbCAmJiAhdW5yZXNvbHZlZE5Tcy5pc0VtcHR5KCkgJiYgbnNSZXNvbHZlciAhPSBudWxsKQotLy8gICAgewotLy8gICAgICBmb3IgKGludCBpID0gdW5yZXNvbHZlZE5Tcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkKLS8vICAgICAgewotLy8gICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpdW5yZXNvbHZlZE5Tcy5nZXQoaSk7Ci0vLyAgICAgICAgaWYgKG5zLmVxdWFscygiIikpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgbnMgPSBYTUxOUzsKLS8vICAgICAgICB9Ci0vLyAgICAgICAgZWxzZQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIG5zID0gWE1MTlMgKyAiOiIgKyBuczsKLS8vICAgICAgICB9Ci0vLyAgICAgICAgaWYgKG5zUmVzb2x2ZXIuY29udGFpbnNLZXkobnMpKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIC8vbmFtZXNwYWNlcy5yZW1vdmUoaSk7Ci0vLyAgICAgICAgICAvL25hbWVzcGFjZXMuYWRkKGksIG5zUmVzb2x2ZXIuZ2V0KG5zKSk7Ci0vLyAgICAgICAgICBuYW1lc3BhY2VzLnB1dChucywgbnNSZXNvbHZlci5nZXQobnMpKTsKLS8vICAgICAgICAgIHVucmVzb2x2ZWROU3MucmVtb3ZlKGkpOwotLy8gICAgICAgICAgdW5yZXNvbHZlZE5Tcy5hZGQoaSwgbnNSZXNvbHZlci5nZXQobnMpKTsKLS8vICAgICAgICB9Ci0vLyAgICAgIH0KLS8vICAgIH0KLS8vICAgIHJldHVybiBuYW1lc3BhY2VzOwotLy8gIH0KLQotICAvKioKLSAgICogVGhpcyByZWN1cnNpdmUgbWV0aG9kIGNyZWF0ZXMgdGhlIHNjaGVtYSBTdHJpbmcgZnJvbSB0aGUgcm9vdCBFbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZWxlbWVudHMgQSBsaXN0IHRvIGJlIGNyZWF0ZWQgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzY2hlbWEgaW4gb3JkZXIuCi0gICAqIEBwYXJhbSByZXF1aXJlZE5hbWVzcGFjZXMgQSBsaXN0IG9mIHJlcXVpcmVkIG5hbWVzcGFjZXMuCi0gICAqIEBwYXJhbSByZXFOU0RlY2wgQSBoYXNodGFibGUgb2YgcmVxdWlyZWQgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucy4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzY2hlbWEuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KAotICAgIEVsZW1lbnQgZWxlbSwKLSAgICBMaXN0IGVsZW1lbnRzLAotICAgIExpc3QgcmVxdWlyZWROYW1lc3BhY2VzLAotICAgIEhhc2h0YWJsZSByZXFOU0RlY2wsCi0gICAgU3RyaW5nIGZpbGVsb2NhdGlvbikKLSAgewotICAgIGlmIChlbGVtID09IG51bGwpCi0gICAgICByZXR1cm4gIiI7IC8vIGp1c3QgaW4gY2FzZQotCi0gICAgZWxlbWVudHMuYWRkKGVsZW0pOwotCi0gICAgU3RyaW5nQnVmZmVyIHhzZFN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmcgZWxlbWVudE5hbWUgPSBlbGVtLmdldFRhZ05hbWUoKTsKLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI8IikuYXBwZW5kKGVsZW1lbnROYW1lKTsKLQotICAgIFN0cmluZyBuYW1lUHJlZml4ID0gIiI7IC8vIHRoZSB4bWxucyBwcmVmaXggdXNlZCBmb3IgdGhlIGVsZW1lbnRzCi0gICAgLy8gR2V0IGFsbCBvZiB0aGUgYXR0cmlidXRlcyBmb3IgdGhpcyBlbGVtZW50IGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgeHNkU3RyaW5nCi0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0gICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKG4uZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKTsKLSAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgIGlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKFNDSEVNQUxPQ0FUSU9OKSAmJiBmaWxlbG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbGF0aXZlUGF0aCA9IG4uZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQocmVsYXRpdmVQYXRoKS5hcHBlbmQoIlwiIik7ICAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAvLyBnZXQgdGhlIG5hbWUgcHJlZml4IGZvciB0aGlzIHNjaGVtYSB0byB1c2UgaW4gZ2VuZXJhdGluZyBpbXBvcnQgc3RhdGVtZW50cwotICAgICAgICBpZiAobm9kZU5hbWUuaW5kZXhPZihYTUxOUykgIT0gLTEpCi0gICAgICAgIHsKLQotICAgICAgICAgIGlmIChub2RlVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShlbGVtLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lUHJlZml4ID0gbm9kZU5hbWU7Ci0gICAgICAgICAgICBpZiAobmFtZVByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKFhNTE5TKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmFtZVByZWZpeCA9ICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zdWJzdHJpbmcoNikgKyAiOiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFJlcGxhY2Ugb2xkIHNjaGVtYSBuYW1lc3BhY2VzIHdpdGggdGhlIG5ldyBzY2hlbWEgbmFtZXNwYWNlLgotICAgICAgICBpZihub2RlVmFsdWUuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpIHx8IG5vZGVWYWx1ZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpCi0gICAgICAgICB7Ci0gICAgICAgICAgbm9kZVZhbHVlID0gQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMTsKLSAgICAgICAgfQotICAgICAgICB4c2RTdHJpbmcuYXBwZW5kKG5vZGVWYWx1ZSkuYXBwZW5kKCJcIiIpOwotICAgICAgfQotICAgIH0KLS8vICAgIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJpbXBvcnQiKSAmJiAhZm91bmRTY2hlbWFMb2NhdGlvbikKLS8vICAgIHsKLS8vICAgICAgeHNkU3RyaW5nLmFwcGVuZCgiICIpLmFwcGVuZChTQ0hFTUFMT0NBVElPTikuYXBwZW5kKCI9XCIiKS5hcHBlbmQobmFtZXNwYWNlKS5hcHBlbmQoIlwiIik7Ci0vLyAgICB9Ci0gICAgLy8gYWRkIGluIGFueSByZXF1aXJlZCBOUyBkZWNsYXJhdGlvbnMgZnJvbSBwYXJlbnQgZWxlbWVudHMKLSAgICBpZiAocmVxTlNEZWNsICE9IG51bGwpCi0gICAgewotICAgICAgRW51bWVyYXRpb24ga2V5cyA9IHJlcU5TRGVjbC5rZXlzKCk7Ci0gICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICBTdHJpbmcgZGVjbE5TID0gKFN0cmluZylyZXFOU0RlY2wuZ2V0KGtleSk7Ci0gICAgICAgIGlmKGRlY2xOUy5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgZGVjbE5TLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICAgICAgIHsKLSAgICAgICAgICBkZWNsTlMgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotICAgICAgICB9Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQoIiAiKS5hcHBlbmQoa2V5KS5hcHBlbmQoIj1cIiIpLmFwcGVuZChkZWNsTlMpLmFwcGVuZCgiXCIiKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI+Iik7Ci0gICAgaWYgKHJlcXVpcmVkTmFtZXNwYWNlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGlSZXF1aXJlZE5hbWVzcGFjZXMgPSByZXF1aXJlZE5hbWVzcGFjZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpUmVxdWlyZWROYW1lc3BhY2VzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZylpUmVxdWlyZWROYW1lc3BhY2VzLm5leHQoKTsKLQotICAgICAgICB4c2RTdHJpbmcKLSAgICAgICAgICAuYXBwZW5kKCI8IikKLSAgICAgICAgICAuYXBwZW5kKG5hbWVQcmVmaXgpCi0gICAgICAgICAgLmFwcGVuZChJTVBPUlQpCi0gICAgICAgICAgLmFwcGVuZCgiICIpCi0gICAgICAgICAgLmFwcGVuZChOQU1FU1BBQ0UpCi0gICAgICAgICAgLmFwcGVuZCgiPVwiIikKLSAgICAgICAgICAuYXBwZW5kKG5zKQotICAgICAgICAgIC5hcHBlbmQoIlwiICIpCi0gICAgICAgICAgLmFwcGVuZChTQ0hFTUFMT0NBVElPTikKLSAgICAgICAgICAuYXBwZW5kKCI9XCIiKQotICAgICAgICAgIC5hcHBlbmQobnMpCi0gICAgICAgICAgLmFwcGVuZCgiXCIvPiIpOwotICAgICAgfQotCi0gICAgfQotICAgIHhzZFN0cmluZy5hcHBlbmQoIlxuIik7Ci0KLSAgICAvLyBjYWxsIHRoZSBtZXRob2QgcmVjdXJzaXZlbHkgZm9yIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKSB8fCBpIDwgNTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLSAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgeHNkU3RyaW5nLmFwcGVuZChjcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseShjaGlsZCwgZWxlbWVudHMsIG51bGwsIG51bGwsIGZpbGVsb2NhdGlvbikpOwotICAgICAgfQotICAgIH0KLQotICAgIHhzZFN0cmluZy5hcHBlbmQoIjwvIikuYXBwZW5kKGVsZW0uZ2V0VGFnTmFtZSgpKS5hcHBlbmQoIj4iKTsKLQotICAgIHJldHVybiB4c2RTdHJpbmcudG9TdHJpbmcoKTsKLQotICB9Ci0gIC8qKgotICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgbmFtZXNwYWNlIHByZWZpeGVzIHRoYXQgYXJlIHVzZWQgZm9yIGVsZW1lbnRzIG9yIHR5cGVzIGluIHRoZSBzY2hlbWEuCi0gICAqICAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hIHRvIGNoZWNrIGZvciBuYW1lc3BhY2UgcHJlZml4ZXMuCi0gICAqIEByZXR1cm4gQSBsaXN0IG9mIG5hbWVzcGFjZSBwcmVmaXhlcyBmb3IgdGhlIGVsZW1lbnQgYW5kIGFsbCBpdHMgY2hpbGRyZW4uCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXROYW1lc3BhY2VQcmVmaXhlcyhFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBMaXN0IG5hbWVzcGFjZSA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgLy8gcmVnaXN0ZXIgYWxsIHRoZSBjaGlsZCB0eXBlcyBmaXJzdAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVzLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAvLyB3ZSBvbmx5IHdhbnQgbm9kZXMgdGhhdCBhcmUgRWxlbWVudHMKLSAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9IChFbGVtZW50KW47Ci0gICAgICAgIExpc3QgY2hpbGRucyA9IGdldE5hbWVzcGFjZVByZWZpeGVzKGNoaWxkKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IGNoaWxkbnMuc2l6ZSgpIC0gMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWNoaWxkbnMuZ2V0KGopOwotICAgICAgICAgIAotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5zKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQWRkIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGN1cnJlbnQgZWxlbWVudAotICAgIFN0cmluZyBlbGVtTlMgPSBlbGVtLmdldFByZWZpeCgpOwotICAgIC8vIGlmIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSBwcmVmaXggc2V0IGl0IHRvIHRoZSBlbXB0eSBwcmVmaXguCi0gICAgaWYoZWxlbU5TID09IG51bGwpCi0gICAgewotICAgICAgZWxlbU5TID0gIiI7Ci0gICAgfQotICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKGVsZW1OUykpCi0gICAgIHsKLSAgICAgIG5hbWVzcGFjZS5hZGQoZWxlbU5TKTsKLSAgICB9Ci0gICAgLy8gbm93IGFkZCBhbGwgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCdzIG5hbWVzcGFjZXMKLSAgICAvLyBkb24ndCBpbmNsdWRlIGltcG9ydCBhbmQgc2NoZW1hIGVsZW1lbnRzCi0gICAgU3RyaW5nIGxvY2FsbmFtZSA9IGVsZW0uZ2V0TG9jYWxOYW1lKCk7Ci0gICAgaWYgKCFsb2NhbG5hbWUuZXF1YWxzKElNUE9SVCkgJiYgIWxvY2FsbmFtZS5lcXVhbHMoSU5DTFVERSkgJiYgIWxvY2FsbmFtZS5lcXVhbHMoU0NIRU1BKSkKLSAgICB7Ci0gICAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLQotICAgICAgICBTdHJpbmcgbm9kZU5hbWUgPSBuLmdldE5vZGVOYW1lKCk7Ci0gICAgICAgIC8vIHJlbW92ZWQgcmVzdHJpY3Rpb24gdGhhdCB3ZSdyZSBvbmx5IGxvb2tpbmcgYXQgdHlwZXMKLSAgICAgICAgLy8JCWlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKFRZUEUpKQotICAgICAgICAvLwkJewotICAgICAgICAvLyBkb24ndCB0YWtlIG5hbWVzcGFjZSBpbmZvIGZyb20gYXR0cmlidXRlcyBkZWZpbmluZyBuYW1lc3BhY2VzLgotICAgICAgICAvLyB0aGF0IGluY2x1ZGVzIHhtbG5zLCB0YXJnZXROYW1lc3BhY2UKLSAgICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xIHx8IG5vZGVOYW1lLmVxdWFscyhUQVJHRVROQU1FU1BBQ0UpIHx8IG5vZGVOYW1lLmVxdWFscyhOQU1FKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIEdyYWIgbmFtZXNwYWNlIHByZWZpeGVzIGZyb20gYXR0cmlidXRlcy4KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaW50IGNvbG9uSW5kZXggPSBub2RlTmFtZS5pbmRleE9mKCI6Iik7Ci0gICAgICAgICAgaWYoY29sb25JbmRleCAhPSAtMSAmJiAoY29sb25JbmRleCArIDEgPCBub2RlTmFtZS5sZW5ndGgoKSAmJiBub2RlTmFtZS5jaGFyQXQoY29sb25JbmRleCArIDEpICE9ICcvJykpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IG5vZGVOYW1lLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KTsKLSAgICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKHByZWZpeCkpCi0gICAgICAgICAgICB7Ci0KLSAgICAgICAgICAgICAgbmFtZXNwYWNlLmFkZChwcmVmaXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBpbnQgY29sb25JbmRleCA9IG5vZGVWYWx1ZS5pbmRleE9mKCI6Iik7Ci0gICAgICAgIC8vIERvbid0IHRha2UgbmFtZXNwYWNlIGluZm8gZnJvbSBhdHRyaWJ1dGVzIHdpdGggdGhlIGRlZmF1bHQgbmFtZXNwYWNlLCB0aGF0IGlzIGF0dHJpYnV0ZXMKLSAgICAgICAgLy8gdGhhdCBhcmUgbm90IHByZWZpeGVkLiAoY29sb25JbmRleCA9PSAtMSkKLSAgICAgICAgLy8gSWYgdGhlIGNvbG9uSW5kZXggaXMgZm9sbG93ZWQgYnkgYSAvIHRoZW4gaXQgaXMgYSBVUkkgYW5kIG5vdAotICAgICAgICAvLyBuYW1lc3BhY2UgcXVhbGlmaWVkLgotCQlpZiAoY29sb25JbmRleCA9PSAtMSB8fCAoY29sb25JbmRleCArIDEgPCBub2RlVmFsdWUubGVuZ3RoKCkgJiYgbm9kZVZhbHVlLmNoYXJBdChjb2xvbkluZGV4ICsgMSkgPT0gJy8nKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIGhlcmUgd2UgaGF2ZSBmb3VuZCBhIGNvbG9uIGRlbGltaXRlciBzbyB3ZSBuZWVkIHRoZSBuYW1lc3BhY2UgZGVmaW5lZCBoZXJlCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG5vZGVWYWx1ZSA9IG5vZGVWYWx1ZS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMobm9kZVZhbHVlKSkKLSAgICAgICAgewotCi0gICAgICAgICAgbmFtZXNwYWNlLmFkZChub2RlVmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2VzIHRoYXQgaGF2ZSBhbiBpbXBvcnQgc3RhdGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBhbGwgdGhlIG5hbWVzcGFjZXMgdGhhdCBhcmUgaW1wb3J0ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRJbXBvcnROYW1lc3BhY2VzKEVsZW1lbnQgZWxlbSkKLSAgewotICAgIExpc3QgbmFtZXNwYWNlID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gY2FsbCB0aGUgbWV0aG9kIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICAvLyByZWdpc3RlciBhbGwgdGhlIGNoaWxkIHR5cGVzIGZpcnN0Ci0gICAgTm9kZUxpc3QgY2hpbGROb2RlcyA9IGVsZW0uZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmdldExlbmd0aCgpIHx8IGkgPCA1OyBpKyspCi0gICAgewotICAgICAgTm9kZSBuID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgLy8gd2Ugb25seSB3YW50IG5vZGVzIHRoYXQgYXJlIEVsZW1lbnRzCi0gICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGQgPSAoRWxlbWVudCluOwotICAgICAgICBMaXN0IGNoaWxkbnMgPSBnZXRJbXBvcnROYW1lc3BhY2VzKGNoaWxkKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IGNoaWxkbnMuc2l6ZSgpIC0gMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWNoaWxkbnMuZ2V0KGopOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5zKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gaWYgdGhpcyBpcyBhbiBpbXBvcnQgZWxlbWVudCBnZXQgdGhlIG5hbWVzcGFjZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgaWYgKGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShJTVBPUlQpKQotICAgIHsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBuID0gYXR0cy5pdGVtKGkpOwotCi0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoTkFNRVNQQUNFKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5vZGVWYWx1ZSkpCi0gICAgICAgICAgewotCi0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5vZGVWYWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIEhhc2h0YWJsZSB3aXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcyBrZXlzIGZyb20gdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCBuYW1lc3BhY2UgcHJlZml4ZXMgbWFwcGVkIHRvIG5hbWVzcGFjZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGdldE5TUmVzb2x2ZXIoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLQotICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xKQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgU3RyaW5nIG5hbWVQcmVmaXggPSBub2RlTmFtZTsKLQotICAgICAgICBpZiAobmFtZVByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKFhNTE5TKSkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVQcmVmaXggPSAiIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zdWJzdHJpbmcoNik7Ci0gICAgICAgIH0KLSAgICAgICAgbnNSZXNvbHZlci5wdXQobmFtZVByZWZpeCwgbm9kZVZhbHVlKTsKLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNSZXNvbHZlcjsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIG5hbWVzcGFjZXMgaW4gdGhlIGdpdmVuIG5hbWVzcGFjZXMgbGlzdCB3aXRoIHRoZSB0d28gbmFtZXNwYWNlCi0gICAqIHJlc29sdmVyIGhhc2h0YWJsZXMgcHJvdmlkZWQuIFJldHVybiBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2UgdGhhdCBuZWVkCi0gICAqIHRvIGJlIGRlY2xhcmVkLgotICAgKiBGaXJzdCByZXNvbHZlIGFnYWluc3QgdGhlIGxvY2FsIG5hbWVzcGFjZXMgd2l0aCBuc1Jlc29sdmVyLgotICAgKiBOZXh0IHJlc29sdmUgYWdhaW5zdCB0aGUgcGFyZW50IG5hbWVzcGFjZSB3aXRoIHBhcmVudE5TUmVzb2x2ZXIuCi0gICAqIEEgc2lkZSBhZmZlY3Qgb2YgdGhpcyBtZXRob2QgaXMgdGhlIG5hbWVzcGFjZXMgbGlzdCBpcyBsZWZ0IHdpdGggb25seSB0aG9zZSAKLSAgICogbmFtZXNwYWNlcyB0aGF0IGFyZSByZXNvbHZlZCBhbmQgdGhlIHJlc29sdmVkIGVudGl0aWVzIGFyZSBwbGFjZWQgaW4gdGhlIAotICAgKiBsaXN0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGVudHJpZXMuCi0gICAqIEZvciBleC4gSWYgeW91IHByb3ZpZGUgYSBsaXN0IHN1Y2ggYXMge3hzZCwgaW50Zn0gYW5kIG9ubHkgeHNkIGNhbiBiZSByZXNvbHZlZAotICAgKiB5b3Ugd2lsbCBlbmQgdXAgd2l0aCB0aGUgbGlzdCB7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWF9Ci0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIHJlc29sdmUuCi0gICAqIEBwYXJhbSBuc1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgbG9jYWwgcmVzb2x2ZXIuCi0gICAqIEBwYXJhbSBwYXJlbnROU1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgcGFyZW50IG5hbWVzcGFjZSByZXNvbHZlci4KLSAgICogQHJldHVybiBBIEhhc2h0YWJsZSBvZiBuYW1lc3BhY2VzIHRoYXQgbXVzdCBiZSBkZWNsYXJlZC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNodGFibGUgcmVzb2x2ZU5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBIYXNodGFibGUgbnNSZXNvbHZlciwgSGFzaHRhYmxlIHBhcmVudE5TUmVzb2x2ZXIpCi0gIHsKLSAgCUhhc2h0YWJsZSByZXFOU0RlY2wgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhbmFtZXNwYWNlcy5pc0VtcHR5KCkgJiYgbnNSZXNvbHZlciAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSBuYW1lc3BhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgewotICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKW5hbWVzcGFjZXMuZ2V0KGkpOwotICAgICAgICAvLyBSZW1vdmUgdGhlIG5hbWVzcGFjZSBmcm9tIHRoZSBsaXN0LgotICAgICAgICBuYW1lc3BhY2VzLnJlbW92ZShpKTsKLSAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHJlc29sdmUgYWdhaW5zdCB0aGUgbG9jYWwgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBpZiAobnNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3QgcmVzb2x2ZWROUyA9IG5zUmVzb2x2ZXIuZ2V0KG5zKTsKLSAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgaWYoIW5hbWVzcGFjZXMuY29udGFpbnMocmVzb2x2ZWROUykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgbnNSZXNvbHZlci5nZXQobnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTmV4dCB0cnkgdG8gcmVzb2x2ZSBhZ2FpbnN0IHRoZSBwYXJlbnQgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCWlmIChucy5lcXVhbHMoIiIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TICsgIjoiICsgbnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFyZW50TlNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE9iamVjdCByZXNvbHZlZE5TID0gcGFyZW50TlNSZXNvbHZlci5nZXQobnMpOwotICAgICAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgICAgIGlmKCFuYW1lc3BhY2VzLmNvbnRhaW5zKHJlc29sdmVkTlMpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgcmVzb2x2ZWROUyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gU3RpbGwgbmVlZCB0byBkZWNsYXJlIHRoZSBuYW1lc3BhY2UgdGhvdWdoLgotICAgICAgICAgICAgICByZXFOU0RlY2wucHV0KG5zLCByZXNvbHZlZE5TKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXFOU0RlY2w7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIGFueSBuYW1lc3BhY2UgZnJvbSB0aGUgbmFtZXNwYWNlcyBsaXN0IGlmIGl0IGlzIGluIHRoZSBpbXBvcnQgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VzIFRoZSBuYW1lc3BhY2VzIGxpc3QuCi0gICAqIEBwYXJhbSBpbXBvcnRlZE5hbWVzcGFjZXMgQSBsaXN0IG9mIGltcG9ydGVkIG5hbWVzcGFjZXMuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRob3V0IHRoZSBpbXBvcnRlZCBuYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgcmVtb3ZlSW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIExpc3QgaW1wb3J0ZWROYW1lc3BhY2VzKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiBpbXBvcnRlZE5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhaW1wb3J0ZWROYW1lc3BhY2VzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpSW1wb3J0ZWROUyA9IGltcG9ydGVkTmFtZXNwYWNlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGlJbXBvcnRlZE5TLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlOUyA9IChTdHJpbmcpaUltcG9ydGVkTlMubmV4dCgpOwotCi0gICAgICAgIG5hbWVzcGFjZXMucmVtb3ZlKGlOUyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lc3BhY2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZSB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgc2NoZW1hIGFuZCB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhlIGlnbm9yZU5hbWVzcGFjZXMKLSAgICogbGlzdCBmcm9tIHRoZSBuYW1lc3BhY2VzIGxpc3QgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBsb2NhbCBuYW1lc3BhY2VzLgotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRoIHRoZSBsb2NhbCBuYW1lc3BhY2VzIHJlbW92ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCByZW1vdmVMb2NhbE5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlcyAhPSBudWxsICYmIGVsZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnMgPSBlbGVtLmdldEF0dHJpYnV0ZShUQVJHRVROQU1FU1BBQ0UpOwotICAgICAgbmFtZXNwYWNlcy5yZW1vdmUobnMpOwotCi0gICAgICBmb3IgKGludCBpID0gaWdub3JlTmFtZXNwYWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgLy8ga2VlcCByZW1vdmluZyB0aGUgbmFtZXNwYWNlIHVudGlsIGl0IGlzIG5vdCBpbiB0aGUgbGlzdAotICAgICAgICBpZiAobmFtZXNwYWNlcy5yZW1vdmUoaWdub3JlTmFtZXNwYWNlc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzcGFjZXM7Ci0gIH0KLSAgCi0gIC8qKiAKLSAgICogUmVtb3ZlIGFsbCB0aGUgbmFtZXNwYWNlcyBpbiB0aGUgbmFtZXNwYWNlcyBsaXN0IHRoYXQgYXJlbid0IGNvbnRhaW5lZCBpbiB0aGUgCi0gICAqIHZhbGlkSW1wb3J0TlNzIHNldC4gCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBBIGxpc3Qgb2YgbmFtZXNwYWNlcy4gCi0gICAqIEBwYXJhbSB2YWxpZEltcG9ydE5TcyBBIHNldCBvZiB2YWxpZCBuYW1lc3BhY2VzLiAKLSAgICogQHJldHVybiBBIGxpc3Qgb2YgbmFtZXNwYWNlcyB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IG1lbWJlcnMgd2hpY2ggYXJlbid0IGluIHRoZSB2YWxpZEltcG9ydE5TcyBzZXQuIAotICAgKi8gCi0gIHByb3RlY3RlZCBMaXN0IHJlc3RyaWN0SW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIFNldCB2YWxpZEltcG9ydE5TcykgCi0gIHsgCi0gICAgICAgIEl0ZXJhdG9yIG5zSXRlciA9IG5hbWVzcGFjZXMuaXRlcmF0b3IoKTsgCi0gICAgICAgIHdoaWxlKG5zSXRlci5oYXNOZXh0KCkpIAotICAgICAgICB7IAotICAgICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpbnNJdGVyLm5leHQoKTsgCi0gICAgICAgICAgaWYoIXZhbGlkSW1wb3J0TlNzLmNvbnRhaW5zKG5zKSkgCi0gICAgICAgICAgeyAKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLnJlbW92ZShucyk7IAotCQkJCW5zSXRlciA9IG5hbWVzcGFjZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICB9IAotICAgICAgICB9IAotICAgICAgICByZXR1cm4gbmFtZXNwYWNlczsgCi0gIH0gCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgaXMgaW4gdGhlIGxpc3Qgb2YgcmVxdWlyZWQgbmFtZXNwYWNlcywKLSAgICogZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHBhcmFtIHJlcW5zIFRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgdG8gY2hlY2sgZm9yIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZXMgaXMgaW4gdGhlIGxpc3QsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQoTGlzdCByZXFucykKLSAgewotICAgIGlmIChyZXFucy5jb250YWlucyhTT0FQX0VOQ09ESU5HX1VSSSkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY2N2RlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5FcnJvck1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0KLS8qKgotICogUGx1Z2luIHZhbGlkYXRvciBmb3IgdGhlIFdTREwgVmFsaWRhdGlvbiBmcmFtZXdvcmsuIFZhbGlkYXRlcyBpbmxpbmUgc2NoZW1hIGZvdW5kIGluIGEgV1NETCBkb2N1bWVudC4KLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYVZhbGlkYXRvciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFByb3BlcnR5IHRvIGFsbG93IHRoZSBXU0RMIHZhbGlkYXRvciB0byB1c2UgdGhlIHRhcmdldCBuYW1lc3BhY2UKLSAgICogZGVmaW5lZCBvbiB0aGUgV1NETCBkb2N1bWVudCBmb3Igc2NoZW1hcyB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuCi0gICAqIFRoaXMgcHJvcGVydHkgd2lsbCBhbGxvdyBjbGllbnRzIHdobyBkZXBlbmQgb24gdGhpcyBmdW5jdGlvbmFsaXR5Ci0gICAqIHRvIGNvbnRpbnVlIHRvIHVzZSBpdCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgcG9zdCAxLjUuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gVVNFX1dTRExfVEFSR0VUTkFNRVNQQUNFID0gZmFsc2U7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfV0FSTl9PTERfU0NIRU1BX05BTUVTUEFDRSA9ICJfV0FSTl9PTERfU0NIRU1BX05BTUVTUEFDRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9XQVJOX1NPQVBFTkNfSU1QT1JURURfU0NIRU1BID0gIl9XQVJOX1NPQVBFTkNfSU1QT1JURURfU0NIRU1BIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU1QVFlfU1RSSU5HID0gIiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IgPSBudWxsOwotICAKLSAgcHVibGljIElubGluZVNjaGVtYVZhbGlkYXRvcigpCi0gIHsKLQlTdHJpbmcgdXNlTlMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZS53c2RsLnRhcmdldG5hbWVzcGFjZSIpOwotCWlmKHVzZU5TICE9IG51bGwgJiYgdXNlTlMuZXF1YWxzKCJ0cnVlIikpCi0JewotCSAgVVNFX1dTRExfVEFSR0VUTkFNRVNQQUNFID0gdHJ1ZTsKLQl9Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLnV0aWwuTGlzdCwgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuV1NETDExVmFsaWRhdGlvbkluZm8pCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAJTGlzdCBlbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbSA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1lbnQ7Ci0gICAgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpOwotICAgIFN0cmluZyBiYXNlTG9jYXRpb24gPSB3c2RsRGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKTsKLSAgICAvLyBBZGQgaW4gdGhlIG5hbWVzcGFjZXMgZGVmaW5lZCBpbiB0aGUgZG9jIGFscmVhZHkgdGhhdCBhcmVuJ3QgZGVmaW5lZCBsb2NhbGx5IGluIHRoaXMgc2NoZW1hLgotICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIG5hbWVzcGFjZXMgb3RoZXIgdGhlbiBpbiB0aGUgZGVmaW50aW9ucyBhbmQgdHlwZXMgZWxlbWVudHMgYXMKLSAgICAvLyBpbmxpbmUgc2NoZW1hIGNhbiBub3QgaGF2ZSBhbnkgb3RoZXIgcGFyZW50cyBhbmQgbXVzdCBoYXZlIHRoZXJlIHR3byBwYXJlbnRzLgotICAgIC8vIEZpcnN0IHRha2UgY2FyZSBvZiB0aGUgZGVmaW5pdGlvbnMgZWxlbWVudAotICAgIAotICAgIC8vIGNyZWF0ZSB0aGUgaW5saW5lIHNjaGVtYSBzdHJpbmcKLQlFbGVtZW50IHczY2VsZW1lbnQgPSBlbGVtLmdldEVsZW1lbnQoKTsKLQlIYXNodGFibGUgcGFyZW50bmFtZXNwYWNlcyA9IGdldE5hbWVzcGFjZURlY2xhcmF0aW9uc0Zyb21QYXJlbnRzKHdzZGxEZWZpbml0aW9uLHczY2VsZW1lbnQpOwotCVN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSB3M2NlbGVtZW50LmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLQkvLyBpZiB0aGUgdGFyZ2V0TmFtZXNwYWNlIGhhc24ndCBiZWVuIGRlZmluZWQgZm9yIHRoZSBzY2hlbWEgdXNlIHRoZSAKLQkvLyB0YXJnZXROYW1lc3BhY2Ugb2YgdGhlIGRlZmluaXRpb25zIGVsZW1lbnQKLQlpZihVU0VfV1NETF9UQVJHRVROQU1FU1BBQ0UgJiYgKHRhcmdldE5hbWVzcGFjZSA9PSBudWxsIHx8IHRhcmdldE5hbWVzcGFjZS5lcXVhbHMoRU1QVFlfU1RSSU5HKSkpCi0JIHsKLQkgIHRhcmdldE5hbWVzcGFjZSA9IHdzZGxEZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCSAgdzNjZWxlbWVudC5zZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSx0YXJnZXROYW1lc3BhY2UpOwotCX0KLQkKLSAgICAvLyBJZiB0aGUgbmFtZXNwYWNlIGdpdmVuIGlzIG9uZSBvZiB0aGUgb2xkIHNjaGVtYSBuYW1lc3BhY2VzIHByb2R1Y2UgYSB3YXJuaW5nLgotCVN0cmluZyBuYW1lc3BhY2UgPSB3M2NlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpOwotCWlmKG5hbWVzcGFjZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgbmFtZXNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLQkgewotCSAgdmFsSW5mby5hZGRXYXJuaW5nKAotCSAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9XQVJOX09MRF9TQ0hFTUFfTkFNRVNQQUNFLCBRVU9URSArIENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEgKyBRVU9URSksIGVsZW1lbnQpOwotCX0KLQkKLSAgICAvLyBub3cgY3JlYXRlIGFuZCBjYWxsIHRoZSB2YWxpZGF0b3IgZm9yIHRoZSBpbmxpbmUgc2NoZW1hCi0gICAgWFNEVmFsaWRhdG9yIHNjaGVtYXYgPSBuZXcgWFNEVmFsaWRhdG9yKCk7Ci0gICAgCi0gICAgLy9TdHJpbmcgZmlsZUxvY2F0aW9uID0gbmV3IFVSTCh2YWxpZGF0b3JtYW5hZ2VyLmdldEZpbGVuYW1lKCkpLmdldFBhdGgoKTsKLSAgICBJbmxpbmVYU0RSZXNvbHZlciBpbmxpbmVFbnRpdHlSZXNvbHZlciA9Ci0gICAgICBnZXRFbnRpdHlSZXNvbHZlcih3c2RsRGVmaW5pdGlvbiwgKFR5cGVzKSBwYXJlbnRzLmdldCgwKSwgYmFzZUxvY2F0aW9uLCB0YXJnZXROYW1lc3BhY2UpOwotICAgIC8vCWFkZCBpbiB0aGUgZXh0ZXJuYWwgWFNEIENhdGFsb2cgdG8gcmVzb2x2ZSBzY2hlbWFzIG9mZmxpbmUKLSAgICBYTUxFbnRpdHlSZXNvbHZlckNoYWluIGVudGl0eVJlc29sdmVyQ2hhaW4gPSBuZXcgWE1MRW50aXR5UmVzb2x2ZXJDaGFpbigpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIoaW5saW5lRW50aXR5UmVzb2x2ZXIpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIodmFsSW5mby5nZXRVUklSZXNvbHZlcigpKTsKLSAgICAvL2VudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIoWE1MQ2F0YWxvZ1Jlc29sdmVyLmdldEluc3RhbmNlKCkpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIobmV3IEZpbGVFbnRpdHlSZXNvbHZlcigpKTsKLQkKLSAgICAvLwkgQ3JlYXRlIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlubGluZSBzY2hlbWEuIAotICAgIFN0cmluZyB4c2QgPSBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuY3JlYXRlWFNEU3RyaW5nKHczY2VsZW1lbnQsIGVsZW1lbnRzLCBiYXNlTG9jYXRpb24sIHBhcmVudG5hbWVzcGFjZXMsIGlubGluZUVudGl0eVJlc29sdmVyLmdldElubGluZVNjaGVtYU5TcygpKTsgCi0KLQkKLSAgICBzY2hlbWF2LnZhbGlkYXRlSW5saW5lU2NoZW1hKHhzZCwgdGFyZ2V0TmFtZXNwYWNlLCBiYXNlTG9jYXRpb24sIGVudGl0eVJlc29sdmVyQ2hhaW4sIGlubGluZUVudGl0eVJlc29sdmVyLCB2YWxJbmZvLmdldFNjaGVtYUNhY2hlKCkpOwotICAgIAotLy8JY2hlY2sgaWYgdGhlIFNPQVAgRW5jb2RpbmcgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIGJ1dCBub3QgaW1wb3J0ZWQKLQkJIGlmIChJbmxpbmVTY2hlbWFHZW5lcmF0b3Iuc29hcEVuY29kaW5nUmVxdWlyZWROb3RJbXBvcnRlZChlbGVtLmdldEVsZW1lbnQoKSwgYmFzZUxvY2F0aW9uLCBwYXJlbnRuYW1lc3BhY2VzKSkKLQkJIHsKLQkJICAgdmFsSW5mby5hZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9XQVJOX1NPQVBFTkNfSU1QT1JURURfU0NIRU1BKSwgZWxlbWVudCk7Ci0JCSB9Ci0KLSAgICAvLyBJZiB0aGUgc2NoZW1hIGlzbid0IHZhbGlkIGFkZCB0aGUgZXJyb3IgbWVzc2FnZXMgcHJvZHVjZWQgdG8gdmFsaW5mby4KLSAgICAvLyBEb24ndCBhZGQgdGhlIGVycm9ycyBpZiB0aGV5IGFyZSBsb2NhdGVkIG9uIGFub3RoZXIgaW5saW5lIHNjaGVtYS4gVGhlc2UKLQkvLyB3aWxsIGJlIHJlcG9ydGVkIHdoZW4gdGhlIG90aGVyIHNjaGVtYSBpcyB2YWxpZGF0ZWQuCi0JCSAKLSAgICBpZiAoIXNjaGVtYXYuaXNWYWxpZCgpKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGVycm9ycyA9IHNjaGVtYXYuZ2V0RXJyb3JzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChlcnJvcnMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFcnJvck1lc3NhZ2UgZXJyID0gKEVycm9yTWVzc2FnZSkgZXJyb3JzLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIHVyaSA9IGVyci5nZXRVUkkoKTsKLSAgICAgICAgaW50IGxpbmUgPSBlcnIuZ2V0RXJyb3JMaW5lKCk7Ci0gICAgICAgIFN0cmluZyBlcnJtZXNzID0gZXJyLmdldEVycm9yTWVzc2FnZSgpOwotICAgICAgICBlcnJtZXNzID0gcmVwbGFjZU5hbWVzcGFjZShlcnJtZXNzLCBuYW1lc3BhY2UpOwotICAgICAgICBpZihsaW5lID4gMCkKLSAgICAgICAgewotICAgICAgICAgIGlmKHVyaSA9PSBudWxsIHx8IHVyaS5lcXVhbHModmFsSW5mby5nZXRGaWxlVVJJKCkpKQotICAgICAgICAgIHsKLQkJCXZhbEluZm8uYWRkRXJyb3IoZXJybWVzcywgZ2V0T2JqZWN0QXRMaW5lKGxpbmUgLSAxLCBlbGVtZW50cykpOwotICAgICAgICAgIH0KLQkJICBlbHNlIGlmKCFpbmxpbmVFbnRpdHlSZXNvbHZlci5pc0lubGluZVNjaGVtYSh1cmkpICYmICF1cmkuZXF1YWxzKHZhbEluZm8uZ2V0RmlsZVVSSSgpICsgSW5saW5lWFNEUmVzb2x2ZXIuSU5MSU5FX1NDSEVNQV9JRCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihlcnJtZXNzLCBsaW5lLCBlcnIuZ2V0RXJyb3JDb2x1bW4oKSwgdXJpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQkJZWxzZSBpZih1cmkgIT0gbnVsbCAmJiAhaW5saW5lRW50aXR5UmVzb2x2ZXIuaXNJbmxpbmVTY2hlbWEodXJpKSAmJiAhdXJpLmVxdWFscyh2YWxJbmZvLmdldEZpbGVVUkkoKSArIElubGluZVhTRFJlc29sdmVyLklOTElORV9TQ0hFTUFfSUQpKQotICAgICAgICB7Ci0JICAgICAgdmFsSW5mby5hZGRFcnJvcihlcnJtZXNzLCAwLDAsIHVyaSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gSWYgdGhlIHBhcnNlciB3YXMgYWJsZSB0byBjcmVhdGUgYSBzY2hlbWEgbW9kZWwgYXNzaWduIGl0IGZvciB1c2UuIAotICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgaW52YWxpZCB3ZSBzdGlsbCB3YW50IHRvIG1ha2UgdXNlIG9mIHRoZSBtb2RlbAotICAgIC8vIHdoZXJlIHBvc3NpYmxlIHRvIGF2b2lkIGNhc2NhZGluZyBlcnJvciBtZXNzYWdlcyB0byBtZXNzYWdlIHBhcnRzLgotICAgIFhTTW9kZWwgeHNNb2RlbCA9IHNjaGVtYXYuZ2V0WFNNb2RlbCgpOwotICAgIGlmKHhzTW9kZWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZFNjaGVtYSh4c01vZGVsKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFuIGVudGl0eSByZXNvbHZlciB0aGF0IHdpbGwgcmVzb2x2ZSBpbmxpbmUgc2NoZW1hcy4gIEV2ZXJ5IGlubGluZSBzY2hlbWEgaXMgcHJlcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHRoZSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcGFyYW0gdHlwZXMgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSByZWZlcmVuY2VMb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHNjaGVtYS4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0TmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQW4gZW50aXR5IHJlc29sdmVyIHRoYXQgY2FuIHJlc29sdmUgaW5saW5lIHNjaGVtYXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSW5saW5lWFNEUmVzb2x2ZXIgZ2V0RW50aXR5UmVzb2x2ZXIoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgVHlwZXMgdHlwZXMsIFN0cmluZyByZWZlcmVuY2VMb2NhdGlvbiwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIElubGluZVhTRFJlc29sdmVyIGVudGl0eVJlc29sdmVyID0gbmV3IElubGluZVhTRFJlc29sdmVyKCk7Ci0vLyAgICBlbnRpdHlSZXNvbHZlci5zZXRSZWZlcmVuY2VMb2NhdGlvbihyZWZlcmVuY2VMb2NhdGlvbik7Ci0gICAgTGlzdCBzY2hlbWFzID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKHNjaGVtYXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpU2NoZW1hcyA9IHNjaGVtYXMuaXRlcmF0b3IoKTsKLQkgIFNldCBuYW1lc3BhY2VzID0gbmV3IFRyZWVTZXQoKTsgCi0gICAgICB3aGlsZSAoaVNjaGVtYXMuaGFzTmV4dCgpKSAKLSAgICAgIHsgCi0gICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgaVNjaGVtYXMubmV4dCgpOyAKLSAgICAgICAgU3RyaW5nIHRoaXNOYW1lc3BhY2UgPSBleHRFbGVtLmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSk7IAotICAgICAgICBpZih0aGlzTmFtZXNwYWNlICE9IG51bGwpIAotICAgICAgICB7IAotICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMuYWRkKHRoaXNOYW1lc3BhY2UpOyAKLSAgICAgICAgfSAKLSAgICAgIH0gCi0gICAgICBpU2NoZW1hcyA9IHNjaGVtYXMuaXRlcmF0b3IoKTsgCi0KLSAgICAgIHdoaWxlIChpU2NoZW1hcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgaVNjaGVtYXMubmV4dCgpOwotICAgICAgICBTdHJpbmcgdGhpc05hbWVzcGFjZSA9IGV4dEVsZW0uZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgICAgaWYgKHRoaXNOYW1lc3BhY2UgIT0gbnVsbCAmJiAhdGhpc05hbWVzcGFjZS5lcXVhbHNJZ25vcmVDYXNlKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgCQotICAgICAgICAJRWxlbWVudCBlbGVtZW50ID0gZXh0RWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkKLS8vCQkJY3JlYXRlIHRoZSBpbmxpbmUgc2NoZW1hIHN0cmluZwotCQkJIC8vRWxlbWVudCB3M2NlbGVtZW50ID0gZWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkgSGFzaHRhYmxlIHBhcmVudG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbixlbGVtZW50KTsKLQkJCSBTdHJpbmcgeHNkID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyhlbGVtZW50LCBuZXcgQXJyYXlMaXN0KCksIHJlZmVyZW5jZUxvY2F0aW9uLCBwYXJlbnRuYW1lc3BhY2VzLCBuYW1lc3BhY2VzKTsKLSAgICAgICAgCS8vYWRkTmFtZXNwYWNlRGVjbGFyYXRpb25zRnJvbVBhcmVudHMod3NkbERlZmluaXRpb24sZWxlbWVudCk7Ci0gICAgICAgICAgZW50aXR5UmVzb2x2ZXIuYWRkKHRoaXNOYW1lc3BhY2UsIHhzZCk7Ci0gICAgICAgIH0KLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZW50aXR5UmVzb2x2ZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnZhbGlkYXRvci5JV1NETDExVmFsaWRhdG9yI3NldFJlc291cmNlQnVuZGxlKGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQnVuZGxlKFJlc291cmNlQnVuZGxlIHJiKQotICB7Ci0gIAltZXNzYWdlZ2VuZXJhdG9yID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmIpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlR2VuZXJhdG9yKE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2dlbikKLSAgewotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBtZXNzZ2VuOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBhcyBpbiB0aGUgZm9ybSAKLSAgICogeG1sbnM9InNvbWVuYW1lc3BhY2UiCi0gICAqIGZyb20gdGhlIGRlZmluaXRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhbmQgYWRkIHRoZW0gdG8gdGhlIHNjaGVtYSBlbGVtZW50IHNvIHRoZSBzY2hlbWEgCi0gICAqIHZhbGlkYXRvciB3aWxsIGhhdmUgYWNjZXNzIHRvIHRoZW0uCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCB0aGUgbmFtZXNwYWNlIGVsZW1lbnRzIGZyb20gdGhlIGVsZW1lbnRzIHByb3ZpZGVkLgotICAgKi8KLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgCUhhc2h0YWJsZSBuc3MgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgSXRlcmF0b3IgbmFtZVNwYWNlcyA9IHdzZGxEZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotCi0gICAgU3RyaW5nIFhNTE5TID0gQ29uc3RhbnRzLkFUVFJfWE1MTlM7Ci0gICAgCi0gICAgd2hpbGUgKG5hbWVTcGFjZXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBuc3ByZWZpeCA9IFhNTE5TOwotICAgICAgU3RyaW5nIG5zID0gKFN0cmluZykgbmFtZVNwYWNlcy5uZXh0KCk7Ci0gICAgICBpZiAoIW5zLmVxdWFsc0lnbm9yZUNhc2UoIiIpKQotICAgICAgewotICAgICAgICBuc3ByZWZpeCArPSAiOiI7Ci0gICAgICB9Ci0gICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKG5zcHJlZml4ICsgbnMpKQotICAgICAgewotICAgICAgCW5zcy5wdXQobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0vLyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgLy8gTmV4dCBoYW5kbGUgdGhlIHBhcmVudCB0eXBlcyBlbGVtZW50Ci0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGF0dHNsZW5ndGggPSBhdHRzLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0c2xlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgdGVtcG5vZGUgPSBhdHRzLml0ZW0oaSk7Ci0gICAgICBTdHJpbmcgbm9kZW5hbWUgPSB0ZW1wbm9kZS5nZXROb2RlTmFtZSgpOwotICAgICAgLy8gaWYgdGhpcyBpcyBhIG5hbWVzcGFjZSBhdHRyaWJ1dGUKLSAgICAgIGlmIChub2RlbmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgIHsKLQkJbnNzLnB1dChub2RlbmFtZSwgIHRlbXBub2RlLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgLy9lbGVtZW50LnNldEF0dHJpYnV0ZShub2RlbmFtZSwgdGVtcG5vZGUuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNzOwotICB9Ci0gIAotICAvKioKLSAgICogR2l2ZW4gYSBsaW5lIG51bWJlciBmb3IgdGhlIHNjaGVtYSByZXR1cm5zIHRoZSBlbGVtZW50IGZvdW5kIG9uIHRoYXQgbGluZS4gCi0gICAqIFVzZWZ1bCBmb3Igb2J0YWluaW5nIGVsZW1lbnRzIGZyb20gc2NoZW1hIFN0cmluZ3MuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBudW1iZXIgZm9yIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbGVtZW50cyBUaGUgbGlzdCBvZiBlbGVtZW50cyB0byBjaGVjay4KLSAgICogQHJldHVybiBUaGUgb2JqZWN0IGxvY2F0ZWQgYXQgdGhlIGxpbmUgb3IgYXQgbGluZSAwIGlmIHRoZSBsaW5lIGlzIGludmFsaWQuCi0gICAqLwotICAgcHJvdGVjdGVkIE9iamVjdCBnZXRPYmplY3RBdExpbmUoaW50IGxpbmUsIExpc3QgZWxlbWVudHMpCi0gICB7Ci0gICAJaWYobGluZSA8IDAgfHwgbGluZSA+PSBlbGVtZW50cy5zaXplKCkpCi0gICAJewotICAgCSAgbGluZSA9IDA7Ci0gICAJfQotCXJldHVybiBlbGVtZW50cy5nZXQobGluZSk7Ci0gICB9Ci0gICAKLSAgLyoqCi0gICAqIFJlcGxhY2UgYW55IGluc3RhbmNlIG9mIHRoZSAyMDAxIHNjaGVtYSBuYW1lc3BhY2UgaW4gdGhlIGdpdmVuIG1lc3NhZ2Ugd2l0aAotICAgKiB0aGUgZ2l2ZW4gbmFtZXNwYWNlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gcmVwbGFjZSB0aGUgbmFtZXNwYWNlIGluLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdXNlZCBmb3IgcmVwbGFjZW1lbnQuCi0gICAqIEByZXR1cm4gVGhlIG1lc3NhZ2Ugd2l0aCB0aGUgMjAwMSBzY2hlbWEgbmFtZXNwYWNlIHJlcGxhY2VkIGJ5IHRoZSBnaXZlbiBuYW1lc3BhY2UuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyByZXBsYWNlTmFtZXNwYWNlKFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgbmFtZXNwYWNlKQotICAgewotICAgICBTdHJpbmcgeHNkMjAwMSA9IENvbnN0YW50cy5OU19VUklfWFNEXzIwMDE7Ci0gICAgIGludCBzdGFydCA9IG1lc3NhZ2UuaW5kZXhPZih4c2QyMDAxKTsKLSAgICAgaW50IGVuZCA9IHN0YXJ0ICsgeHNkMjAwMS5sZW5ndGgoKTsKLSAgICAgaWYoc3RhcnQgPCAwKQotICAgICB7Ci0gICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gICAgIH0KLSAgICAgU3RyaW5nIHN0YXJ0U3RyaW5nID0gbWVzc2FnZS5zdWJzdHJpbmcoMCxzdGFydCk7Ci0gICAgIFN0cmluZyBlbmRTdHJpbmcgPSBtZXNzYWdlLnN1YnN0cmluZyhlbmQsbWVzc2FnZS5sZW5ndGgoKSk7Ci0gICAgIHJldHVybiBzdGFydFN0cmluZyArIG5hbWVzcGFjZSArIGVuZFN0cmluZzsKLSAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVYU0RSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Q1MzY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBBbiBYTUxFbnRpdHlSZXNvbHZlciB0aGF0IGFsbG93cyBpbmxpbmUgc2NoZW1hcyB0byByZXNvbHZlIGVhY2ggb3RoZXIgdGhyb3VnaCBpbXBvcnRzLgotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lWFNEUmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTkxJTkVfU0NIRU1BX0lEID0gIiNpbmxpbmVzY2hlbWEiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEZJTEVfUFJFRklYID0gImZpbGU6IjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBYTUxOUyA9ICJ4bWxucyI7Ci0gIHByb3RlY3RlZCBIYXNodGFibGUgZW50aXRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0vLyAgcHJvdGVjdGVkIFN0cmluZyByZWZMb2NhdGlvbiA9IG51bGw7Ci0gIHByb3RlY3RlZCBYTUxFbnRpdHlSZXNvbHZlciBleHRlcm5hbFJlc29sdmVyID0gbnVsbDsKLSAgcHJvdGVjdGVkIFhNTElucHV0U291cmNlIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWZlcnJpbmdTY2hlbWFOYW1lc3BhY2UgPSBudWxsOwotICAKLSAgLyoqCi0gICAqIENvbnN0dWN0b3IuCi0gICAqLwotICBwdWJsaWMgSW5saW5lWFNEUmVzb2x2ZXIoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKQotCQkgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCVN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7CSAKLQlTdHJpbmcgcHVibGljSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0UHVibGljSWQoKTsJCi0JU3RyaW5nIG5hbWVzcGFjZSA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLQlYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0JU3RyaW5nIHNjaGVtYSA9IG51bGw7Ci0JaWYgKHN5c3RlbUlkID09IG51bGwpCi0JewotCSAgaWYocHVibGljSWQgPT0gbnVsbCkKLQkgIHsKLQkgIAlpZihuYW1lc3BhY2UgPT0gbnVsbCkKLQkgIAl7CQotCSAgICAgIHJldHVybiBudWxsOwotCSAgCX0KLQkgIAllbHNlCi0JICAJewotCSAgCQlzeXN0ZW1JZCA9IG5hbWVzcGFjZTsKLQkgIAl9Ci0JICB9Ci0JICBlbHNlCi0JICB7CQotCSAgICBzeXN0ZW1JZCA9IHB1YmxpY0lkOwotCSAgfQotCX0KLQkgIAotCWlmKHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSAhPSBudWxsICYmIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZS5lcXVhbHMoc3lzdGVtSWQpKQotCXsKLQkJaWYocmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UhPW51bGwpCi0JCXsKLQkJCXJldHVybiByZWZlcnJpbmdTY2hlbWFJbnB1dFNvdXJjZTsKLQkJfQotCX0KLQllbHNlIGlmICgoc2NoZW1hID0gKFN0cmluZykgZW50aXRpZXMuZ2V0KHN5c3RlbUlkKSkgIT0gbnVsbCAmJiAhc2NoZW1hLmVxdWFscygiIikpCi0JewotCQlpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgcmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UuZ2V0U3lzdGVtSWQoKSArIElOTElORV9TQ0hFTUFfSUQsIG51bGwsIG5ldyBTdHJpbmdSZWFkZXIoc2NoZW1hKSxudWxsKTsKLQl9Ci0JCi0gICAgLy9pZihpcyA9PSBudWxsKQotICAgIC8vewotICAgIC8vCXRocm93IG5ldyBJT0V4Y2VwdGlvbigpOwotICAgIC8vfQotCXJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gaW5saW5lIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgLSB0aGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hCi0gICAqIEBwYXJhbSBzY2hlbWEgLSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NoZW1hCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgU3RyaW5nIHNjaGVtYSkKLSAgewotICAgIGVudGl0aWVzLnB1dCh0YXJnZXROYW1lc3BhY2UsIHNjaGVtYSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgdGhlIHJlZmVycmluZyBpbmxpbmUgc2NoZW1hLiAKLSAgICogCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSAtIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICogQHBhcmFtIG5hbWVzcGFjZSAtIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFJlZmVycmluZ1NjaGVtYShYTUxJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlID0gaW5wdXRTb3VyY2U7Ci0gICAgcmVmZXJyaW5nU2NoZW1hTmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgdGhlIG5hbWVzcGFjZSBjb3JyZXNwb25kcyB0byBhbiBpbmxpbmUgc2NoZW1hLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBuYW1lc3BhY2UgY29ycmVzcG9uZHMgdG8gYW4gaW5saW5lIHNjaGVtYSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNJbmxpbmVTY2hlbWEoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJldHVybiBlbnRpdGllcy5jb250YWluc0tleShuYW1lc3BhY2UpOwotICB9Ci0gIAotICAvKiogCi0gICAqIEdldCB0aGUgc2V0IG9mIHRoZSBpbmxpbmUgc2NoZW1hIG5hbWVzcGFjZXMuIAotICAgKiAKLSAgICogQHJldHVybiBUaGUgc2V0IG9mIHRoZSBpbmxpbmUgc2NoZW1hIG5hbWVzcGFjZXMuIAotICAgKi8gCi0gIHB1YmxpYyBTZXQgZ2V0SW5saW5lU2NoZW1hTlNzKCkgCi0gIHsgCi0gICAgICAgIHJldHVybiBlbnRpdGllcy5rZXlTZXQoKTsgCi0gIH0gCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9TY2hlbWFBdHRyaWJ1dGVUYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODgxMTM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwueHMuU2NoZW1hU3ltYm9sczsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlN5bWJvbFRhYmxlOwotLyoqCi0gKiBUaGlzIGNsYXNzIHdpbGwgYWxsb3cgdGhlIGNhbGxpbmcgY29kZSB0byBzZWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGluIHNjaGVtYS4KLSAqIFRoaXMgc2VydmVzIGFzIHNjaGVtYSBmb3Igc2NoZW1hLgotICovCi1wdWJsaWMgY2xhc3MgU2NoZW1hQXR0cmlidXRlVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZQotewotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBTY2hlbWFBdHRyaWJ1dGVUYWJsZSgpCi0gIHsKLSAgICAvLyBhZGQgYWxsIG9mIHRoZSBzeWJvbHMgdG8gdGhlIHRhYmxlLiBTY2hlbWFTeW1ib2xzIHByb2JhYmx5IHNob3VsZCBoYXZlCi0gICAgLy8gYSBTeW1ib2xUYWJsZSBmb3IgdGhlc2UgYnV0IGl0IGRvZXNuJ3QKLQotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VOREFOWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RXT1BPVU5ETE9DQUwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VORE9USEVSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRUQVJHRVROUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1BPVU5EQUxMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRkFMU0VfMCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RSVUVfMSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0FOWVNJTVBMRVRZUEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9BTllUWVBFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQU5ZVVJJKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQkFTRTY0QklOQVJZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQk9PTEVBTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0JZVEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9DT0xMQVBTRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RBVEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EQVRFVElNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RBWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RFQ0lNQUwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ET1VCTEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EVVJBVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0VOVElUWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0VOVElUSUVTKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRVhURU5TSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRkFMU0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9GTE9BVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0hFWEJJTkFSWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSURSRUYpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JRFJFRlMpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JTlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTEFOR1VBR0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9MQVgpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9MSVNUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTE9ORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05BTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ORUdBVElWRUlOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9NT05USCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX01PTlRIREFZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTkNOQU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk1UT0tFTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05NVE9LRU5TKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9OTkVHQVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9OUE9TSVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9STUFMSVpFRFNUUklORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PVEFUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfT1BUSU9OQUwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QT1NJVElWRUlOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QUkVTRVJWRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1BST0hJQklURUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9RTkFNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1FVQUxJRklFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1JFUExBQ0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9SRVFVSVJFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1JFU1RSSUNUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU0hPUlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TS0lQKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU1RSSUNUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU1RSSU5HKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU1VCU1RJVFVUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVElNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RPS0VOKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFJVRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOQk9VTkRFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5RVUFMSUZJRUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FREJZVEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FRElOVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOU0lHTkVETE9ORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOU0lHTkVEU0hPUlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ZRUFSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfWUVBUk1PTlRIKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvVmFsaWRhdGVFcnJvckhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1ZhbGlkYXRlRXJyb3JIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MmRjNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvVmFsaWRhdGVFcnJvckhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5FcnJvck1lc3NhZ2U7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgWE1MRXJyb3JIYW5kbGVyIHRoYXQgY2FwdHVyZXMgZXJyb3IgZnJvbSBYZXJjZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZUVycm9ySGFuZGxlciBpbXBsZW1lbnRzIFhNTEVycm9ySGFuZGxlcgotewotICBBcnJheUxpc3QgZXJyb3JMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIAotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgZXJyb3IgbWVzc2FnZXMgY3JlYXRlZCBieSBYZXJjZXMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBlcnJvcnMgbGlzdC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVycm9yTWVzc2FnZXMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSB2YWxpZGF0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgZXhjZXB0aW9uIGFuZCBzZXZlcml0eS4KLSAgICogCi0gICAqIEBwYXJhbSBrZXkgVGhlIFhlcmNlcyBlcnJvciBrZXkuCi0gICAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IuCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkuCi0gICAqIEByZXR1cm4gQW4gZXJyb3IgbWVzc2FnZS4KLSAgICovCi0gIHByb3RlY3RlZCBFcnJvck1lc3NhZ2UgY3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oU3RyaW5nIGtleSwgWE1MUGFyc2VFeGNlcHRpb24gZXJyb3IsIGludCBzZXZlcml0eSkKLSAgewotICAgIFN0cmluZyB1cmkgPSBlcnJvci5nZXRMaXRlcmFsU3lzdGVtSWQoKTsKLSAgICBpZih1cmkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmkgPSBlcnJvci5nZXRQdWJsaWNJZCgpOwotICAgIH0KLSAgICBFcnJvck1lc3NhZ2UgZXJyb3JNZXNzYWdlID0gbmV3IEVycm9yTWVzc2FnZSgpOwotICAgIGVycm9yTWVzc2FnZS5zZXRFcnJvckxpbmUoZXJyb3IuZ2V0TGluZU51bWJlcigpKTsKLSAgICBlcnJvck1lc3NhZ2Uuc2V0RXJyb3JNZXNzYWdlKGVycm9yLmdldE1lc3NhZ2UoKSk7Ci0gICAgZXJyb3JNZXNzYWdlLnNldEVycm9yQ29sdW1uKGVycm9yLmdldENvbHVtbk51bWJlcigpKTsKLSAgICBlcnJvck1lc3NhZ2Uuc2V0VVJJKHVyaSk7Ci0gICAgZXJyb3JNZXNzYWdlLnNldFNldmVyaXR5KHNldmVyaXR5KTsKLSAgICByZXR1cm4gZXJyb3JNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjZXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVycm9yKFN0cmluZyBkb21haW4sIFN0cmluZyBrZXksIFhNTFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgZXJyb3JMaXN0LmFkZChjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbihrZXksIGV4Y2VwdGlvbiwgRE9NRXJyb3IuU0VWRVJJVFlfRVJST1IpKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRXJyb3JIYW5kbGVyI2ZhdGFsRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU3RyaW5nIGRvbWFpbiwgU3RyaW5nIGtleSwgWE1MUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBlcnJvckxpc3QuYWRkKGNyZWF0ZVZhbGlkYXRpb25NZXNzYWdlRm9yRXhjZXB0aW9uKGtleSwgZXhjZXB0aW9uLCBET01FcnJvci5TRVZFUklUWV9GQVRBTF9FUlJPUikpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjd2FybmluZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgd2FybmluZyhTdHJpbmcgZG9tYWluLCBTdHJpbmcga2V5LCBYTUxQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIGVycm9yTGlzdC5hZGQoY3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oa2V5LCBleGNlcHRpb24sIERPTUVycm9yLlNFVkVSSVRZX1dBUk5JTkcpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWViODU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1hNTEVudGl0eVJlc29sdmVyQ2hhaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBIYW5kbGUgYSBjaGFpbiBvZiBlbnRpdHkgcmVzb2x2ZXJzLgotICovCi1wdWJsaWMgY2xhc3MgWE1MRW50aXR5UmVzb2x2ZXJDaGFpbiBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyCi17Ci0gIHByaXZhdGUgTGlzdCBlbnRpdHlSZXNvbHZlcnMgPSBuZXcgVmVjdG9yKCk7Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyI3Jlc29sdmVFbnRpdHkob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcikKLSAgICovCi0gIHB1YmxpYyBYTUxJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFhNTFJlc291cmNlSWRlbnRpZmllciB4bWxSZXNvdXJjZUlkZW50aWZpZXIpIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0gICAgCi0gICAgLy8gVE9ETzogVGhpcyBmaXggc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGlzIHByb2JsZW0gaXMgZml4ZWQgaW4gWGVyY2VzLgotICAgIC8vIFhlcmNlcyBjdXJyZW50bHkgKHZlcnNpb24gMi43KSBoYXMgYSBwcm9ibGVtIHdoZW4gdGhlIGhvbm91ciBhbGwgc2NoZW1hIGxvY2F0aW9ucwotICAgIC8vIHByb3BlcnR5IGlzIHNldCBhbmQgdGhlIHNhbWUgc2NoZW1hIGlzIGltcG9ydGVkIGJ5IHR3byBkaWZmZXJlbnQgZmlsZXMgYW5kIG9uZQotICAgIC8vIG9mIHRoZSBpbXBvcnRzIHVzZXMgXCBhbmQgYW5vdGhlciB1c2VzIC8gaW4gcGFydCBvZiB0aGUgbG9jYXRpb24uCi0gICAgaWYoeG1sUmVzb3VyY2VJZGVudGlmaWVyLmdldExpdGVyYWxTeXN0ZW1JZCgpICE9IG51bGwpCi0gICAgCXhtbFJlc291cmNlSWRlbnRpZmllci5zZXRMaXRlcmFsU3lzdGVtSWQoeG1sUmVzb3VyY2VJZGVudGlmaWVyLmdldExpdGVyYWxTeXN0ZW1JZCgpLnJlcGxhY2UoJ1xcJywnLycpKTsKLSAgICAKLSAgICBJdGVyYXRvciBlbnRpdHlSZXNvbHZlckl0ZXIgPSBlbnRpdHlSZXNvbHZlcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZW50aXR5UmVzb2x2ZXJJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IChYTUxFbnRpdHlSZXNvbHZlcillbnRpdHlSZXNvbHZlckl0ZXIubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlzID0gZW50aXR5UmVzb2x2ZXIucmVzb2x2ZUVudGl0eSh4bWxSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFhOSUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBpZiAoaXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFRocm93IGFuZCBJT0V4Y2VwdGlvbiBpZiB0aGUgZmlsZSBpc24ndCBmb3VuZAotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiVW5hYmxlIHRvIGxvY2F0ZSBmaWxlIik7Ci0gICAgfQotICAgIHJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gZW50aXR5IHJlc29sdmVyIHRvIHRoaXMgY2hhaW4uCi0gICAqIAotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgVGhlIHJlc29sdmVyIHRvIGFkZCB0byB0aGUgY2hhaW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFbnRpdHlSZXNvbHZlcihYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIGVudGl0eVJlc29sdmVycy5hZGQoZW50aXR5UmVzb2x2ZXIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9YU0RWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1hTRFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjcwYTNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1hTRFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC54cy5YU0REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlhNTEdyYW1tYXJQcmVwYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLkdyYW1tYXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhTR3JhbW1hcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuU3RyaW5nTGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotCi0KLS8qKgotICogVmFsaWRhdGUgc2NoZW1hcyBmcm9tIGZpbGVzIG9yIFN0cmluZy4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRvcgotewotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OU19GRUFUVVJFX0lEID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9ob25vdXItYWxsLXNjaGVtYUxvY2F0aW9ucyI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgRklMRV9QUkVGSVggPSAiZmlsZToiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFhNTE5TID0gInhtbG5zIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBUQVJHRVROQU1FU1BBQ0UgPSAidGFyZ2V0TmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBJTVBPUlQgPSAiaW1wb3J0IjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTQ0hFTUFMT0NBVElPTiA9ICJzY2hlbWFMb2NhdGlvbiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgVFlQRSA9ICJ0eXBlIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZ1tdIGlnbm9yZU5hbWVzcGFjZXMgPQotICAgIHsgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIiB9OwotCi0gIHByb3RlY3RlZCBYU01vZGVsIHhzTW9kZWw7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzVmFsaWRYU0Q7Ci0gIHByb3RlY3RlZCBMaXN0IGVycm9yczsKLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlbG9jYXRpb247Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFhTRFZhbGlkYXRvcigpCi0gIHsKLSAgICB4c01vZGVsID0gbnVsbDsKLSAgICBpc1ZhbGlkWFNEID0gZmFsc2U7Ci0gICAgZXJyb3JzID0gbnVsbDsKLSAgfQotICAvKioKLSAgICogVmFsaWRhdGUgYW4gaW5saW5lIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWEgQSBzY2hlbWEgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgVGhlIHRhcmdldCBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGZpbGVsb2MgVGhlIHVyaSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUlubGluZVNjaGVtYShTdHJpbmcgc2NoZW1hLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBTdHJpbmcgZmlsZWxvYykKLSAgewotICAgIHZhbGlkYXRlSW5saW5lU2NoZW1hKHNjaGVtYSwgdGFyZ2V0TmFtZXNwYWNlLCBmaWxlbG9jLCBudWxsLCBudWxsLCBudWxsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIGFuIGlubGluZSBzY2hlbWEgYW5kIHNwZWNpZnkgYW4gZW50aXR5IHJlc29sdmVyLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBUaGlzIHNjaGVtYSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvYyBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlckNoYWluIFRoZSBlbnRpdHkgcmVzb2x2ZXIgY2hhaW4uCi0gICAqIEBwYXJhbSBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciBBbiBpbmxpbmUgc2NoZW1hIHJlc29sdmVyIGZvciB0aGlzIHNjaGVtYS4KLSAgICogQHBhcmFtIGdyYW1tYXJQb29sIEEgWGVyY2VzIFhNTEdyYW1tYXJQb29sIHRoYXQgaG9sZHMgcHJlY2FjaGVkIHNjaGVtYXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUlubGluZVNjaGVtYSgKLSAgICBTdHJpbmcgc2NoZW1hLAotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsCi0gICAgU3RyaW5nIGZpbGVsb2MsCi0gICAgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXJDaGFpbiwKLSAgICBYTUxFbnRpdHlSZXNvbHZlciBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciwKLSAgICBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCkKLSAgewotICAgIGZpbGVsb2NhdGlvbiA9IGZpbGVsb2M7Ci0gICAgCi0gICAgdmFsaWRhdGVYU0Qoc2NoZW1hLCB0cnVlLCBlbnRpdHlSZXNvbHZlckNoYWluLHRhcmdldE5hbWVzcGFjZSwgaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIsIGdyYW1tYXJQb29sKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgZmlsZSBsb2NhdGVkIGF0IHRoZSB1cmkgc3BlY2lmaWVkIHdpdGggdGhlIGdpdmVuIGVudGl0eSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgQW4gYWJzb2x1dGUgdXJpIGZvciB0aGUgc2NoZW1hIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgQW4gZW50aXR5IHJlc29sdmVyIHRvIGJlIHVzZWQuCi0gICAqIEBwYXJhbSBncmFtbWFyUG9vbCBBIFhlcmNlcyBYTUxHcmFtbWFyUG9vbCB0aGF0IGhvbGRzIHByZWNhY2hlZCBzY2hlbWFzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoU3RyaW5nIHVyaSwgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIsIFhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sKQotICB7Ci0gICAgdmFsaWRhdGVYU0QodXJpLCBmYWxzZSwgZW50aXR5UmVzb2x2ZXIsIG51bGwsIG51bGwsIGdyYW1tYXJQb29sKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBzY2hlbWEuCi0gICAqIAotICAgKiBAcGFyYW0gc2NoZW1hIFRoZSBzY2hlbWEgb3IgaXQncyBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGlubGluZVhTRCBUcnVlIGlmIGFuIGlubGluZSBzY2hlbWEsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogQHBhcmFtIGVudGl0eVJlc29sdmVyIEFuIGVudGl0eSByZXNvbHZlciB0byB1c2UuCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgVGhlIHRhcmdldCBuYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYSBiZWluZyB2YWxpZGF0ZWQuCi0gICAqIEBwYXJhbSBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciBBbiBpbmxpbmUgc2NoZW1hIGVudGl0eSByZXNvbHZlci4KLSAgICogQHBhcmFtIGdyYW1tYXJQb29sIEEgWGVyY2VzIFhNTEdyYW1tYXJQb29sIHRoYXQgaG9sZHMgcHJlY2FjaGVkIHNjaGVtYXMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVhTRChTdHJpbmcgc2NoZW1hLCBib29sZWFuIGlubGluZVhTRCwgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFhNTEVudGl0eVJlc29sdmVyIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyLCBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCkKLSAgewotCVZhbGlkYXRlRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlciA9IG5ldyBWYWxpZGF0ZUVycm9ySGFuZGxlcigpOwotCS8vZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZXMoKS5jbGVhcigpOwotCXRyeQotCXsKLQkgIFhNTEdyYW1tYXJQcmVwYXJzZXIgZ3JhbW1hclByZXBhcnNlciA9IG5ldyBYTUxHcmFtbWFyUHJlcGFyc2VyKCk7Ci0JICBncmFtbWFyUHJlcGFyc2VyLnJlZ2lzdGVyUHJlcGFyc2VyKFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BLG51bGwvKnNjaGVtYUxvYWRlciovKTsKLQkJCi0JICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5DT05USU5VRV9BRlRFUl9GQVRBTF9FUlJPUl9GRUFUVVJFLCBmYWxzZSk7Ci0gICAgICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5OQU1FU1BBQ0VTX0ZFQVRVUkUsIHRydWUpOwotICAgICAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuTkFNRVNQQUNFX1BSRUZJWEVTX0ZFQVRVUkUsIHRydWUpOwotCSAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuVkFMSURBVElPTl9GRUFUVVJFLCB0cnVlKTsKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RmVhdHVyZShDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLlNDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkUsIHRydWUpOwotICAgICAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuU0NIRU1BX0ZVTExfQ0hFQ0tJTkcsIGZhbHNlKTsKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RmVhdHVyZShDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLkVYVEVSTkFMX0dFTkVSQUxfRU5USVRJRVNfRkVBVFVSRSwgdHJ1ZSk7Ci0JICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5FWFRFUk5BTF9QQVJBTUVURVJfRU5USVRJRVNfRkVBVFVSRSwgdHJ1ZSk7Ci0JICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5XQVJOX09OX0RVUExJQ0FURV9BVFRERUZfRkVBVFVSRSwgdHJ1ZSk7Ci0JICAgICAgCi0JICB0cnkKLQkgIHsKLQkJZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OU19GRUFUVVJFX0lELCB0cnVlKTsKLQkgIH0KLQkgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkgIHsKLQkgICAgLy8gQ2F0Y2ggdGhlIGV4Y2VwdGlvbiBhbmQgaWdub3JlIGlmIHdlIGNhbid0IHNldCB0aGlzIGZlYXR1cmUuCi0JICB9Ci0KLQkgIC8vIGNzIDogdG9nZ2xlIHRoZSBjb21tZW50cyBvbiB0aGVzZSAyIGxpbmVzIHRvIGVhc2lseSBkaXNhYmxlIGNhY2hpbmcKLSAgICAgIC8vIGdyYW1tYXJQcmVwYXJzZXIuc2V0R3JhbW1hclBvb2wobmV3IFhNTEdyYW1tYXJQb29sSW1wbCgpKTsgCQkKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wgIT0gbnVsbCA/IGdyYW1tYXJQb29sIDogbmV3IFhNTEdyYW1tYXJQb29sSW1wbCgpKTsgCi0JICBncmFtbWFyUHJlcGFyc2VyLnNldEVycm9ySGFuZGxlcihlcnJvckhhbmRsZXIpOwotCSAgaWYgKGVudGl0eVJlc29sdmVyICE9IG51bGwpCi0JICB7Ci0JICAgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RW50aXR5UmVzb2x2ZXIoZW50aXR5UmVzb2x2ZXIpOwotCSAgfQotCi0JICB0cnkKLQkgIHsKLQkgICAgWE1MSW5wdXRTb3VyY2UgaXMgPSBudWxsOwotCSAgICBMaXN0IG9sZEdyYW1tYXJzID0gbnVsbDsKLQkgICAgWE1MR3JhbW1hclBvb2xJbXBsIHBvb2wgPSBudWxsOwotCSAgICAvLyBUaGlzIGFsbG93cyBzdXBwb3J0IGZvciB0aGUgaW5saW5lIHNjaGVtYSBpbiBXU0RMIGRvY3VtZW50cy4KLQkgICAgaWYgKGlubGluZVhTRCkKLQkgICAgeyAgICAgICAKLQkgICAgICBSZWFkZXIgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzY2hlbWEpOwotCQkgIGlzID0gbmV3IFhNTElucHV0U291cmNlKG51bGwsZmlsZWxvY2F0aW9uLGZpbGVsb2NhdGlvbixyZWFkZXIsbnVsbCk7Ci0JCQkJCi0JCSAgKChJbmxpbmVYU0RSZXNvbHZlcilpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlcikuYWRkUmVmZXJyaW5nU2NoZW1hKGlzLHRhcmdldE5hbWVzcGFjZSk7Ci0JCSAgLy8gSW4gdGhlIGNhc2UgdGhhdCAnc2hhcmVkJyBncmFtbWFyIHBvb2wgaXMgdXNlZCB3ZSBuZWVkIHRvIGNvbnNpZGVyCi0JCSAgLy8gdGhhdCB3ZSBtaWdodCBoYXZlIGFscmVhZHkgYWRkZWQgYSBzY2hlbWEgdG8gdGhlIHBvb2wgd2l0aCB0aGUgc2FtZSB0YXJnZXQgbmFtZXNwYWNlCi0JCSAgLy8gYXMgdGhlIGlubGluZSBzY2hlbWEgd2UncmUgaG9waW5nIHRvIGNvbnN0cnVjdC4gIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIHJlbW92ZQotCQkgIC8vIHRoZSBzY2hlbWEgZnJvbSB0aGUgcG9vbCBiZWZvcmUgY29uc3RydWN0aW5nIG91ciBpbmxpbmUgc2NoZW1hLiAgV2UgY2FuIGFkZCBpdCAKLQkJICAvLyBiYWNrIHdoZW4gd2UncmUgYWxsIGRvbmUuCi0JCSAgcG9vbCA9IChYTUxHcmFtbWFyUG9vbEltcGwpZ3JhbW1hclByZXBhcnNlci5nZXRHcmFtbWFyUG9vbCgpOyAgICAgICAgCSAgICAgIAotCQkgIG9sZEdyYW1tYXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQkgIC8vIFJlbW92ZSB0aGUgaW5saW5lIHNjaGVtYSBuYW1lc3BhY2UgaWYgaXQgaXMgbGlzdGVkIGRpcmVjdGx5Ci0JCSAgLy8gaW4gdGhlIHBvb2wuIElmIGl0IGlzIGluZGlyZWN0bHkgbGlzdGVkIGFzIGFuIGltcG9ydCBvZiBhIGdyYW1tYXIgbGlzdGVkCi0JCSAgLy8gZGlyZWN0bHkgaW4gdGhlIHBvb2wgaGlkZSB0aGUgZ3JhbW1hciB0byBjb250aW51ZSB0byBnZXQgY2FjaGluZyBiZW5lZml0cwotCQkgIC8vIGZyb20gdGhlIGNhY2hlZCBncmFtbWFyLgotCQkgIEdyYW1tYXJbXSBncmFtbWFycyA9IHBvb2wucmV0cmlldmVJbml0aWFsR3JhbW1hclNldChYTUxHcmFtbWFyRGVzY3JpcHRpb24uWE1MX1NDSEVNQSk7Ci0JCSAgaW50IG51bUdyYW1tYXJzID0gZ3JhbW1hcnMubGVuZ3RoOwotCQkgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1HcmFtbWFyczsgaSsrKQotCQkgIHsKLQkJICAgIFhNTEdyYW1tYXJEZXNjcmlwdGlvbiBkZXNjID0gZ3JhbW1hcnNbaV0uZ2V0R3JhbW1hckRlc2NyaXB0aW9uKCk7Ci0JCSAgICBpZih0YXJnZXROYW1lc3BhY2UuZXF1YWxzKGRlc2MuZ2V0TmFtZXNwYWNlKCkpKQotCQkgICAgewotCQkgICAgICBvbGRHcmFtbWFycy5hZGQocG9vbC5yZW1vdmVHcmFtbWFyKGRlc2MpKTsKLQkJICAgIH0KLQkJICAgIGVsc2UKLQkJICAgIHsKLQkJICAgICAgaWYoZ3JhbW1hcnNbaV0gaW5zdGFuY2VvZiBYU0dyYW1tYXIpCi0JCSAgICAgIHsKLQkJICAgIAlYU0dyYW1tYXIgZ3JhbW1hciA9IChYU0dyYW1tYXIpZ3JhbW1hcnNbaV07Ci0JCSAgICAJICAJICAKLQkJICAgIAlTdHJpbmdMaXN0IG5hbWVzcGFjZXMgPSBncmFtbWFyLnRvWFNNb2RlbCgpLmdldE5hbWVzcGFjZXMoKTsKLQkJICAgIAlpZihuYW1lc3BhY2VzLmNvbnRhaW5zKHRhcmdldE5hbWVzcGFjZSkpCi0JCSAgICAJewotCQkgICAgCSAgb2xkR3JhbW1hcnMuYWRkKHBvb2wucmVtb3ZlR3JhbW1hcihkZXNjKSk7Ci0JCSAgICAJICAJICAgIC8vcG9vbC5wdXRHcmFtbWFyKG5ldyBYU0dyYW1tYXJIaWRlcihncmFtbWFyLCB0YXJnZXROYW1lc3BhY2UpKTsKLQkJICAgIAl9Ci0JCSAgICAgIH0KLQkJICAgIH0KLQkJICB9Ci0JCSAgICAJCi0JCSAgU2V0IGlubGluZU5TcyA9ICgoSW5saW5lWFNEUmVzb2x2ZXIpaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIpLmdldElubGluZVNjaGVtYU5TcygpOwotCQkgIEl0ZXJhdG9yIG5zaXRlciA9IGlubGluZU5Tcy5pdGVyYXRvcigpOwotCQkgIHdoaWxlKG5zaXRlci5oYXNOZXh0KCkpCi0JCSAgewotCQkgICAgWFNERGVzY3JpcHRpb24gZGVzYyA9IG5ldyBYU0REZXNjcmlwdGlvbigpOwotCQkgICAgZGVzYy5zZXROYW1lc3BhY2UoKFN0cmluZyluc2l0ZXIubmV4dCgpKTsgICAgICAKLQkJICAgIEdyYW1tYXIgb2xkR3JhbW1hciA9IHBvb2wucmVtb3ZlR3JhbW1hcihkZXNjKTsKLQkJICAgIGlmKG9sZEdyYW1tYXIgIT0gbnVsbCkKLQkJICAgICAgb2xkR3JhbW1hcnMuYWRkKG9sZEdyYW1tYXIpOwotCQkgIH0KLQotCSAgICB9Ci0JICAgIC8vIGdldCB0aGUgaW5wdXQgc291cmNlIGZvciBhbiBleHRlcm5hbCBzY2hlbWEgZmlsZQotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgICBpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShudWxsLHNjaGVtYSxzY2hlbWEpOwotCSAgICB9Ci0KLQkgICAgWFNHcmFtbWFyIGdyYW1tYXIgPSAoWFNHcmFtbWFyKWdyYW1tYXJQcmVwYXJzZXIucHJlcGFyc2VHcmFtbWFyKFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BLGlzKTsKLQkgICAgeHNNb2RlbCA9IGdyYW1tYXIudG9YU01vZGVsKCk7Ci0JCQkKLQkgICAgLy8gSGVyZSB3ZSBhZGQgdGhlIHRlbXBvcmlsaXkgcmVtb3ZlZCBzY2hlbWEgYmFjay4KLQkJaWYgKGlubGluZVhTRCAmJiBvbGRHcmFtbWFycyAhPSBudWxsKQotCQl7Ci0JCSAgWFNERGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBuZXcgWFNERGVzY3JpcHRpb24oKTsKLQkJICBkZXNjcmlwdGlvbi5zZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlKTsgCi0JCSAgcG9vbC5yZW1vdmVHcmFtbWFyKGRlc2NyaXB0aW9uKTsKLQkJCQkKLQkJICBTZXQgaW5saW5lTlNzID0gKChJbmxpbmVYU0RSZXNvbHZlcilpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlcikuZ2V0SW5saW5lU2NoZW1hTlNzKCk7Ci0JCSAgSXRlcmF0b3IgbnNpdGVyID0gaW5saW5lTlNzLml0ZXJhdG9yKCk7Ci0JCSAgd2hpbGUobnNpdGVyLmhhc05leHQoKSkKLQkJICB7Ci0JCQlYU0REZXNjcmlwdGlvbiBkZXNjID0gbmV3IFhTRERlc2NyaXB0aW9uKCk7Ci0JCSAgICBkZXNjLnNldE5hbWVzcGFjZSgoU3RyaW5nKW5zaXRlci5uZXh0KCkpOyAgIAotCQkgICAgcG9vbC5yZW1vdmVHcmFtbWFyKGRlc2MpOwotCQkgIH0KLQkJICAKLQkJICBJdGVyYXRvciBvbGRHSXRlciA9IG9sZEdyYW1tYXJzLml0ZXJhdG9yKCk7Ci0JICAgICAgd2hpbGUob2xkR0l0ZXIuaGFzTmV4dCgpKQotCQkgIHsKLQkJCSBHcmFtbWFyIG9sZEdyYW1tYXIgPSAoR3JhbW1hcilvbGRHSXRlci5uZXh0KCk7Ci0JCQkgaWYob2xkR3JhbW1hciAhPSBudWxsKQotCQkJICAgcG9vbC5wdXRHcmFtbWFyKG9sZEdyYW1tYXIpOwotCQkgIH0KLQkJfSAgCi0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JICB7Ci0JICAgICAgICAvLyBQYXJzZXIgd2lsbCByZXR1cm4gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbiBpZiB0aGUgZG9jdW1lbnQgaXMgc3RydWN0dXJhbGx5IGludmFsaWQuCi0JICAgICAgCS8vIEluIHRoaXMgY2FzZSB3ZSBzaW1wbHkgaWdub3JlIHRoZSBlcnJvci4KLQkgICAgICAJLy9TeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JICB9Ci0JICBlcnJvcnMgPSBlcnJvckhhbmRsZXIuZ2V0RXJyb3JNZXNzYWdlcygpOwotCX0KLQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JewotCSAgU3lzdGVtLm91dC5wcmludGxuKGUpOwotCX0KLQlpZiAoZXJyb3JzLmlzRW1wdHkoKSkKLQl7Ci0JICBpc1ZhbGlkWFNEID0gdHJ1ZTsKLQl9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKi8KLQotICBwdWJsaWMgWFNNb2RlbCBnZXRYU01vZGVsKCkKLSAgewotICAJcmV0dXJuIHhzTW9kZWw7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2NoZW1hIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNjaGVtYSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0gIHsKLSAgICByZXR1cm4gaXNWYWxpZFhTRDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGVycm9yIGxpc3QuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBlcnJvciBmcm9tIHRoZSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9BYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9BYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTk5ZWNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotLyoqCi0gKiBGYWN0b3J5IGZvciBnZW5lcmF0aW5nIG9iamVjdHMgbmVlZGVkIGZvciBYTUwgQ29uZm9ybWFuY2UgdmFsaWRhdGlvbi4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5Ci17Ci0gIHByb3RlY3RlZCBzdGF0aWMgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkgaW5zdGFuY2U7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBmYWN0b3J5LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBmYWN0b3J5Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IERlZmF1bHRYTUxDb25mb3JtYW5jZUZhY3RvcnkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBmYWN0b3J5IHRvIHVzZS4KLSAgICogCi0gICAqIEBwYXJhbSBmYWN0b3J5IC0gdGhlIGltcGxlbWVudGF0aW9uIHRoaXMgZmFjdG9yeSB3aWxsIHVzZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldEltcGxlbWVudGF0aW9uKEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5IGZhY3RvcnkpCi0gIHsKLSAgICBpbnN0YW5jZSA9IGZhY3Rvcnk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gYW4gWE1MIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gYW4gWE1MIHZhbGlkYXRvcgotICAgKi8KLSAgYWJzdHJhY3QgcHVibGljIElYTUxWYWxpZGF0b3IgZ2V0WE1MVmFsaWRhdG9yKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0RlZmF1bHRYTUxDb25mb3JtYW5jZUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjgwZmI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi0KLS8qKgotICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkuCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0WE1MQ29uZm9ybWFuY2VGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkKLXsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLkFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5I2dldFhNTFZhbGlkYXRvcigpCi0gICAqLwotICBwdWJsaWMgSVhNTFZhbGlkYXRvciBnZXRYTUxWYWxpZGF0b3IoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBEZWZhdWx0WE1MVmFsaWRhdG9yKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9EZWZhdWx0WE1MVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0RlZmF1bHRYTUxWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY1MzMwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0RlZmF1bHRYTUxWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5YTUxFcnJvclJlcG9ydGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvbk1lc3NhZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuWFNEVmFsaWRhdG9yOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguTG9jYXRvcjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElYTUxWYWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0WE1MVmFsaWRhdG9yIGltcGxlbWVudHMgSVhNTFZhbGlkYXRvcgotewotICBwcm90ZWN0ZWQgU3RyaW5nIHVyaTsKLSAgcHJvdGVjdGVkIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyID0gbnVsbDsKLSAgcHJvdGVjdGVkIExpc3QgZXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAvL3Byb3RlY3RlZCBTdHJpbmdCdWZmZXIgc2NoZW1hTG9jYXRpb25TdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gIHByb3RlY3RlZCBMaXN0IGlnbm9yZWROYW1lc3BhY2VMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAKLSAgcHJvdGVjdGVkIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgY3VycmVudEVycm9yS2V5ID0gbnVsbDsKLSAgcHJvdGVjdGVkIE9iamVjdFtdIGN1cnJlbnRNZXNzYWdlQXJndW1lbnRzID0gbnVsbDsKLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGlzQ2hpbGRPZkRvYyA9IGZhbHNlOwotICBwcm90ZWN0ZWQgWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wgPSBudWxsOyAKLSAgCi0gIC8qKgotICAgKiBBIHN0YWNrIG9mIHN0YXJ0IHRhZyBsb2NhdGlvbnMsIHVzZWQgdG8gbW92ZSBlcnJvcnMKLSAgICogcmVwb3J0ZWQgYXQgdGhlIGNsb3NlIHRhZyB0byBiZSByZXBvcnRlZCBhdCB0aGUgc3RhcnQgdGFnLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0YWNrIHN0YXJ0RWxlbWVudExvY2F0aW9ucyA9IG5ldyBTdGFjaygpOwotICBwcm90ZWN0ZWQgU2V0IGFkanVzdExvY2F0aW9uRXJyb3JLZXlTZXQgPSBuZXcgVHJlZVNldCgpOwotCi0vKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgRGVmYXVsdFhNTFZhbGlkYXRvcigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIAotICAgIGlnbm9yZWROYW1lc3BhY2VMaXN0LmFkZChDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KTsKLSAgICBpZ25vcmVkTmFtZXNwYWNlTGlzdC5hZGQoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCk7Ci0gICAgaWdub3JlZE5hbWVzcGFjZUxpc3QuYWRkKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpOwotICAgIAotICAgIGFkanVzdExvY2F0aW9uRXJyb3JLZXlTZXQuYWRkKCJjdmMtY29tcGxleC10eXBlLjIuNC5iIik7Ci0gICAgYWRqdXN0TG9jYXRpb25FcnJvcktleVNldC5hZGQoImN2Yy1jb21wbGV4LXR5cGUuMi4zIik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvciNzZXRGaWxlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGaWxlKFN0cmluZyB1cmkpCi0gIHsKLSAgICB0aGlzLnVyaSA9IHVyaTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLklYTUxWYWxpZGF0b3Ijc2V0VVJJUmVzb2x2ZXIob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVSSVJlc29sdmVyKFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICB7Ci0gIAl0aGlzLnVyaVJlc29sdmVyID0gdXJpUmVzb2x2ZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gZ3JhbW1hclBvb2wKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEdyYW1tYXJQb29sKFhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sKQotICB7Ci0JdGhpcy5ncmFtbWFyUG9vbCA9IGdyYW1tYXJQb29sOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLklYTUxWYWxpZGF0b3IjcnVuKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICAvLyBWYWxpZGF0ZSB0aGUgWE1MIGZpbGUuCi0gICAgdHJ5Ci0gICAgewotICAgICAgUmVhZGVyIHJlYWRlcjEgPSBudWxsOyAvLyBVc2VkIGZvciB2YWxpZGF0aW9uIHBhcnNlLgotICAgICAgCi0gICAgICBJbnB1dFNvdXJjZSB2YWxpZGF0ZUlucHV0U291cmNlOyAKLSAgICAgCi0gICAgICB2YWxpZGF0ZUlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHVyaSk7Ci0gICAgICBpZiAodGhpcy5pbnB1dFN0cmVhbSAhPSBudWxsKQotICAgICAgeyAgICAKLSAgICAgICAgU3RyaW5nIHN0cmluZyA9IGNyZWF0ZVN0cmluZ0ZvcklucHV0U3RyZWFtKGlucHV0U3RyZWFtKTsKLSAgICAgICAgcmVhZGVyMSA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nKTsKLSAgICAgICAgICAKLSAgICAgICAgdmFsaWRhdGVJbnB1dFNvdXJjZS5zZXRCeXRlU3RyZWFtKGlucHV0U3RyZWFtKTsKLSAgICAgICAgdmFsaWRhdGVJbnB1dFNvdXJjZS5zZXRDaGFyYWN0ZXJTdHJlYW0ocmVhZGVyMSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFhNTFJlYWRlciByZWFkZXIgPSBjcmVhdGVYTUxSZWFkZXIoKTsKLSAgICAgIHJlYWRlci5wYXJzZSh2YWxpZGF0ZUlucHV0U291cmNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gTm8gbmVlZCB0byBhZGQgYW4gZXJyb3IgaGVyZS4gU0FYUGFyc2VFeGNlcHRpb25zIGFyZSByZXBvcnRlZCBieSB0aGUgZXJyb3IgcmVwb3J0ZXIuCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIE5vIG5lZWQgdG8gbG9nIHRoaXMgZXJyb3IuIFRoZSBXU0RMIHZhbGlkYXRvciB3aWxsIGNhdGNoIHRoaXMgZXJyb3Igd2hlbiBjcmVhdGluZyB0aGUgZG9tIG1vZGVsLgotICAgICAgLy9Mb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJUaGUgV1NETCB2YWxpZGF0b3Igd2FzIHVuYWJsZSB0byByZWFkIGZpbGUgIiArIHVyaSArICIuIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZygiQW4gZXhjZXB0aW9uIG9jY3VycmVkIHdoaWxlIHBlcmZvcm1pbmcgV1NETCBYTUwgY29uZm9ybWFuY2UgdmFsaWRhdGlvbiBmb3IgZmlsZSAiICsgdXJpICsgIi4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtCi0gICAqIEByZXR1cm4KLSAgICovCi0gIGZpbmFsIFN0cmluZyBjcmVhdGVTdHJpbmdGb3JJbnB1dFN0cmVhbShJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkKLSAgewotICAgIC8vIEhlcmUgd2UgYXJlIHJlYWRpbmcgdGhlIGZpbGUgYW5kIHN0b3JpbmcgdG8gYSBzdHJpbmdidWZmZXIuCi0gICAgU3RyaW5nQnVmZmVyIGZpbGVTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgaW5wdXRSZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRTdHJlYW0pOwotICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGlucHV0UmVhZGVyKTsKLSAgICAgIGNoYXJbXSBjaGFycyA9IG5ldyBjaGFyWzEwMjRdOwotICAgICAgaW50IG51bWJlclJlYWQgPSByZWFkZXIucmVhZChjaGFycyk7Ci0gICAgICB3aGlsZSAobnVtYmVyUmVhZCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgZmlsZVN0cmluZy5hcHBlbmQoY2hhcnMsIDAsIG51bWJlclJlYWQpOwotICAgICAgICBudW1iZXJSZWFkID0gcmVhZGVyLnJlYWQoY2hhcnMpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZygiVGhlIFdTREwgdmFsZGlhdG9yIHdhcyB1bmFibGUgdG8gY3JlYXRlIHRvIGNyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnB1dCBzdHJlYW0uIFdTREwgWE1MIHZhbGlkYXRpb24gbWF5IG5vdCBoYXZlIHJ1biBjb3JyZWN0bHkuIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZVN0cmluZy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLklYTUxWYWxpZGF0b3IjaGFzRXJyb3JzKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0Vycm9ycygpCi0gIHsKLSAgICByZXR1cm4gIWVycm9ycy5pc0VtcHR5KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvciNnZXRFcnJvcnMoKQotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXJyb3JzKCkKLSAgewotICAgIHJldHVybiBlcnJvcnM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiBAcGFyYW0gbGluZQotICAgKiBAcGFyYW0gY29sdW1uCi0gICAqIEBwYXJhbSB1cmkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSkKLSAgewotCS8vIEZvciB0aGUgZm9sbG93aW5nIGVycm9ycyB0aGUgbGluZSBudW1iZXIgd2lsbCBiZSBtb2RpZmllZCB0byB1c2UgdGhhdCBvZiB0aGUgc3RhcnQKLSAgCS8vIHRhZyBpbnN0ZWFkIG9mIHRoZSBlbmQgdGFnLgotICAJaWYgKGN1cnJlbnRFcnJvcktleSAhPSBudWxsICYmIGFkanVzdExvY2F0aW9uRXJyb3JLZXlTZXQuY29udGFpbnMoY3VycmVudEVycm9yS2V5KSkgIAotICAJewotICAJICBMb2NhdGlvbkNvb3JkaW5hdGUgYWRqdXN0ZWRDb29yZGluYXRlcyA9IChMb2NhdGlvbkNvb3JkaW5hdGUpc3RhcnRFbGVtZW50TG9jYXRpb25zLnBlZWsoKTsKLSAgCSAgbGluZSA9IGFkanVzdGVkQ29vcmRpbmF0ZXMuZ2V0TGluZU51bWJlcigpOwotICAJICBjb2x1bW4gPSBhZGp1c3RlZENvb3JkaW5hdGVzLmdldENvbHVtbk51bW5lcigpOwotICAJfQotICAJCi0JZXJyb3JzLmFkZChuZXcgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLlNFVl9XQVJOSU5HLCB1cmksIGN1cnJlbnRFcnJvcktleSwgY3VycmVudE1lc3NhZ2VBcmd1bWVudHMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgaGFuZGxlciBmb3IgdGhlIFNBWCBwYXJzZXIuIFRoaXMgaGFuZGxlciB3aWxsIG9idGFpbiB0aGUgV1NETAotICAgKiBuYW1lc3BhY2UsIGhhbmRsZSBlcnJvcnMgYW5kIHJlc29sdmUgZW50aXRpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgWE1MQ29uZm9ybWFuY2VEZWZhdWx0SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi0gIHsKLQlwcml2YXRlIExvY2F0b3IgbG9jYXRvciA9IG51bGw7Ci0JCi0gICAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRMb2NhdG9yKExvY2F0b3IgbG9jYXRvcikgCi0gICAgewotCQl0aGlzLmxvY2F0b3IgPSBsb2NhdG9yOwotCQlzdXBlci5zZXREb2N1bWVudExvY2F0b3IobG9jYXRvcik7Ci0JfQotCi0JLyoqCi0gICAgICogQHNlZSBvcmcueG1sLnNheC5FcnJvckhhbmRsZXIjZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24pCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gYXJnMCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgU3RyaW5nIHRlbXBVUkkgPSBhcmcwLmdldFN5c3RlbUlkKCk7Ci0gICAgIGlmIChpbnB1dFN0cmVhbSE9IG51bGwgJiYgYXJnMC5nZXRTeXN0ZW1JZCgpID09IG51bGwpCi0gICAgIHsKLSAgICAgICAvL21oOiBJbiB0aGlzIGNhc2Ugd2UgYXJlIHZhbGlkYXRpbmcgYSBzdHJlYW0gc28gdGhlIFVSSSBtYXkgYmUgbnVsbCBpbiB0aGlzIGV4Y2VwdGlvbgotICAgICAgIHRlbXBVUkkgPSB1cmk7ICAgICAgIAotICAgICB9Ci0gICAgIGFkZEVycm9yKGFyZzAuZ2V0TWVzc2FnZSgpLCBhcmcwLmdldExpbmVOdW1iZXIoKSwgYXJnMC5nZXRDb2x1bW5OdW1iZXIoKSwgdGVtcFVSSSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcueG1sLnNheC5FcnJvckhhbmRsZXIjZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGFyZzApIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICB7Ci0gICAgICBhZGRFcnJvcihhcmcwLmdldE1lc3NhZ2UoKSwgYXJnMC5nZXRMaW5lTnVtYmVyKCksIGFyZzAuZ2V0Q29sdW1uTnVtYmVyKCksIGFyZzAuZ2V0U3lzdGVtSWQoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcueG1sLnNheC5FcnJvckhhbmRsZXIjd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGFyZzApIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICB7Ci0gICAgICBhZGRFcnJvcihhcmcwLmdldE1lc3NhZ2UoKSwgYXJnMC5nZXRMaW5lTnVtYmVyKCksIGFyZzAuZ2V0Q29sdW1uTnVtYmVyKCksIGFyZzAuZ2V0U3lzdGVtSWQoKSk7Ci0gICAgfQotCQotCS8qKgotCSAqIEBzZWUgb3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIjZW5kRWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lKQotCQkJdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCWlmKGxvY2FsTmFtZS5lcXVhbHMoImRvY3VtZW50YXRpb24iKSAmJiAodXJpLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1dTREwpIHx8IHVyaS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSl8fCB1cmkuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpIHx8IHVyaS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpKQotCQl7Ci0JCSAgaXNDaGlsZE9mRG9jID0gZmFsc2U7Ci0JCX0KLQkJc3VwZXIuZW5kRWxlbWVudCh1cmksIGxvY2FsTmFtZSwgcU5hbWUpOwotCQlzdGFydEVsZW1lbnRMb2NhdGlvbnMucG9wKCk7Ci0JfQotCS8qKgotCSAqIEBzZWUgb3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIjc3RhcnRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwKLQkJCUF0dHJpYnV0ZXMgYXR0cykgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCXN0YXJ0RWxlbWVudExvY2F0aW9ucy5wdXNoKG5ldyBMb2NhdGlvbkNvb3JkaW5hdGUobG9jYXRvci5nZXRMaW5lTnVtYmVyKCksIGxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyKCkpKTsKLQkJaWYobG9jYWxOYW1lLmVxdWFscygiZG9jdW1lbnRhdGlvbiIpICYmICh1cmkuZXF1YWxzKENvbnN0YW50cy5OU19VUklfV1NETCkgfHwgdXJpLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKXx8IHVyaS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgdXJpLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkpCi0JCXsKLQkJICBpc0NoaWxkT2ZEb2MgPSB0cnVlOwotCQl9Ci0JCXN1cGVyLnN0YXJ0RWxlbWVudCh1cmksIGxvY2FsTmFtZSwgcU5hbWUsIGF0dHMpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBpbnB1dFN0cmVhbSAtIHNldCB0aGUgaW5wdXRTdHJlYW0gdG8gdmFsaWRhdGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElucHV0U3RyZWFtKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQotICB7Ci0gICAgICB0aGlzLmlucHV0U3RyZWFtID0gaW5wdXRTdHJlYW07Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBjbGFzcyBYTUxWYWxpZGF0b3JQYXJzZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uCi0gIHsKLQkvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLkRURENvbmZpZ3VyYXRpb24jY3JlYXRlRXJyb3JSZXBvcnRlcigpCi0gICAgICovCi0gICAgcHJvdGVjdGVkIFhNTEVycm9yUmVwb3J0ZXIgY3JlYXRlRXJyb3JSZXBvcnRlcigpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBYTUxFcnJvclJlcG9ydGVyKCkKLSAgICAgIHsKLSAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuWE1MRXJyb3JSZXBvcnRlciNyZXBvcnRFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0W10sIHNob3J0KQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgcmVwb3J0RXJyb3IoU3RyaW5nIGRvbWFpbiwgU3RyaW5nIGtleSwgT2JqZWN0W10gYXJndW1lbnRzLAotICAgICAgICAgICAgc2hvcnQgc2V2ZXJpdHkpIHRocm93cyBYTklFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIGN1cnJlbnRFcnJvcktleSA9IGtleTsKLSAgICAgICAgICBjdXJyZW50TWVzc2FnZUFyZ3VtZW50cyA9IGFyZ3VtZW50czsKLSAgICAgICAgICBzdXBlci5yZXBvcnRFcnJvcihkb21haW4sIGtleSwgYXJndW1lbnRzLCBzZXZlcml0eSk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGFuIFhNTCBSZWFkZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIFhNTCByZWFkZXIgb3IgbnVsbCBpZiB1bnN1Y2Nlc3NmdWwuCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MUmVhZGVyIGNyZWF0ZVhNTFJlYWRlcigpIHRocm93cyBFeGNlcHRpb24KLSAgeyAgICAgCi0gICAgU0FYUGFyc2VyIHJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmVhZGVyID0gbmV3IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyKG5ldyBYTUxWYWxpZGF0b3JQYXJzZXJDb25maWd1cmF0aW9uKCkpOwotICAgICAgCi0gICAgICBYTUxDb25mb3JtYW5jZURlZmF1bHRIYW5kbGVyIGNvbmZvcm1hbmNlRGVmYXVsdEhhbmRsZXIgPSBuZXcgWE1MQ29uZm9ybWFuY2VEZWZhdWx0SGFuZGxlcigpOwotICAgICAgcmVhZGVyLnNldEVycm9ySGFuZGxlcihjb25mb3JtYW5jZURlZmF1bHRIYW5kbGVyKTsKLSAgICAgIHJlYWRlci5zZXRDb250ZW50SGFuZGxlcihjb25mb3JtYW5jZURlZmF1bHRIYW5kbGVyKTsKLSAgICAgIAotICAgICAgLy8gT2xkZXIgWGVyY2VzIHZlcnNpb25zIHdpbGwgdGhyb3duIGEgTlBFIGlmIGEgbnVsbCBncmFtbWFyIHBvb2wgaXMgc2V0LgotICAgICAgaWYoZ3JhbW1hclBvb2wgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVhZGVyLnNldFByb3BlcnR5KG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlhFUkNFU19QUk9QRVJUWV9QUkVGSVggKyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5YTUxHUkFNTUFSX1BPT0xfUFJPUEVSVFksIGdyYW1tYXJQb29sKTsKLSAgICAgIH0KLSAgICAgIHJlYWRlci5zZXRQcm9wZXJ0eShvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5YRVJDRVNfUFJPUEVSVFlfUFJFRklYICsgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuRU5USVRZX1JFU09MVkVSX1BST1BFUlRZLCBuZXcgTXlFbnRpdHlSZXNvbHZlcih1cmlSZXNvbHZlcikpOwotICAgICAgcmVhZGVyLnNldEZlYXR1cmUob3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuQ09OVElOVUVfQUZURVJfRkFUQUxfRVJST1JfRkVBVFVSRSwgZmFsc2UpOwotICAgICAgcmVhZGVyLnNldEZlYXR1cmUob3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuTkFNRVNQQUNFU19GRUFUVVJFLCB0cnVlKTsKLSAgICAgIHJlYWRlci5zZXRGZWF0dXJlKG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlNBWF9GRUFUVVJFX1BSRUZJWCArIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLk5BTUVTUEFDRV9QUkVGSVhFU19GRUFUVVJFLCB0cnVlKTsKLQkgIHJlYWRlci5zZXRGZWF0dXJlKG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlNBWF9GRUFUVVJFX1BSRUZJWCArIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlZBTElEQVRJT05fRkVBVFVSRSwgdHJ1ZSk7Ci0JICByZWFkZXIuc2V0RmVhdHVyZShvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5TQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFLCB0cnVlKTsKLSAgICB9IAotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHsgCi0gICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJFcnJvciBjcmVhdGluZyBYTUwgcmVhZGVyIGZvciBXU0RMIFhNTCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uLiIsIElMb2dnZXIuU0VWX0VSUk9SLCBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlYWRlcjsKLSAgfSAKLSAgCi0gIC8qKgotICAgKiBBIGN1c3RvbSBlbnRpdHkgcmVzb2x2ZXIgdGhhdCB1c2VzIHRoZSBVUkkgcmVzb2x2ZXIgc3BlY2lmaWVkIHRvIHJlc29sdmUgZW50aXRpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgTXlFbnRpdHlSZXNvbHZlciBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyIAotICB7Ci0gICAgcHJpdmF0ZSBVUklSZXNvbHZlciB1cmlSZXNvbHZlcjsKLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3Rvci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gdXJpUmVzb2x2ZXIgVGhlIFVSSSByZXNvbHZlciB0byB1c2Ugd2l0aCB0aGlzIGVudGl0eSByZXNvbHZlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgTXlFbnRpdHlSZXNvbHZlcihVUklSZXNvbHZlciB1cmlSZXNvbHZlcikKLSAgICB7Ci0gICAgICB0aGlzLnVyaVJlc29sdmVyID0gdXJpUmVzb2x2ZXI7Ci0gICAgfQotICAgIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgICAqLwotICAgIHB1YmxpYyBYTUxJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFhNTFJlc291cmNlSWRlbnRpZmllciByaWQpIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgLy8gSWYgd2UncmUgY3VycmVudGx5IGV4YW1pbmluZyBhIHN1YmVsZW1lbnQgb2YgdGhlIAotCSAgLy8gV1NETCBvciBzY2hlbWEgZG9jdW1lbnRhdGlvbiBlbGVtZW50IHdlIGRvbid0IHdhbnQgdG8gcmVzb2x2ZSBpdAotCSAgLy8gYXMgYW55dGhpbmcgaXMgYWxsb3dlZCBhcyBhIGNoaWxkIG9mIGRvY3VtZW50YXRpb24uCi0JICBpZihpc0NoaWxkT2ZEb2MpCi0JICB7Ci0JICAgIHJldHVybiBuZXcgWE1MSW5wdXRTb3VyY2UocmlkKTsKLQkgIH0KLQkgIAotCSAgYm9vbGVhbiBuc1VzZWQgPSBmYWxzZTsKLQkgIAotCSAgU3RyaW5nIG5zID0gcmlkLmdldE5hbWVzcGFjZSgpOwotCSAgaWYobnMgIT0gbnVsbCAmJiBpZ25vcmVkTmFtZXNwYWNlTGlzdC5jb250YWlucyhucykpCi0JICB7Ci0JCXJldHVybiBuZXcgWE1MSW5wdXRTb3VyY2UocmlkKTsKLQkgIH0KLQkgIAotCSAgU3RyaW5nIHN5c3RlbUlkID0gcmlkLmdldExpdGVyYWxTeXN0ZW1JZCgpOwotCSAgaWYoc3lzdGVtSWQgPT0gbnVsbCkKLQkgIHsKLQkJc3lzdGVtSWQgPSBuczsKLQkJbnNVc2VkID0gdHJ1ZTsKLQkgIH0KLQkgIFN0cmluZyBwdWJsaWNJZCA9IHJpZC5nZXRQdWJsaWNJZCgpOwotICAgICAgaWYocHVibGljSWQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljSWQgPSBzeXN0ZW1JZDsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gWGVyY2VzIHRlbmRzIHRvIHRyeSB0byByZXNvbHZlIGxvY2F0aW9ucyB3aXRoIG5vIGluZm9ybWF0aW9uLgotICAgICAgLy8gTm8gbmVlZCB0byBkbyBhbnkgcHJvY2Vzc2luZyBpZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgotICAgICAgaWYocHVibGljSWQgIT0gbnVsbCB8fCBzeXN0ZW1JZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBJVVJJUmVzb2x1dGlvblJlc3VsdCByZXN1bHQgPSB1cmlSZXNvbHZlci5yZXNvbHZlKCIiLCBwdWJsaWNJZCwgc3lzdGVtSWQpOwotICAgICAgICBTdHJpbmcgdXJpID0gcmVzdWx0LmdldFBoeXNpY2FsTG9jYXRpb24oKTsKLSAgICAgICAgaWYgKHVyaSAhPSBudWxsICYmICF1cmkuZXF1YWxzKCIiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIElmIHRoZSBuYW1lc3BhY2Ugd2FzIHVzZWQgdG8gcmVzb2x2ZSB0aGlzIHJlZmVyZW5jZSBlbnN1cmUgYSBzY2hlbWEKLSAgICAgICAgICAvLyBoYXMgYmVlbiByZXR1cm5lZC4gTmFtZXNwYWNlcyB0ZW5kIHRvIHBvaW50IHRvIFdlYiByZXNvdXJjZXMgdGhhdAotICAgICAgICAgIC8vIG1heSBvciBtYXkgbm90IGJlIHNjaGVtYXMuCi0gICAgICAgICAgYm9vbGVhbiBjcmVhdGVFbnRpdHlSZXN1bHQgPSB0cnVlOwotICAgICAgICAgIGlmKG5zVXNlZCkKLSAgICAgICAgICB7Ci0gICAgICAgIAlYU0RWYWxpZGF0b3IgeHNkVmFsID0gbmV3IFhTRFZhbGlkYXRvcigpOwotICAgICAgICAJeHNkVmFsLnZhbGlkYXRlKHVyaSwgdXJpUmVzb2x2ZXIsIG51bGwpOwotICAgICAgICAJaWYoIXhzZFZhbC5pc1ZhbGlkKCkpCi0gICAgICAgIAkgIGNyZWF0ZUVudGl0eVJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBpZihjcmVhdGVFbnRpdHlSZXN1bHQpCi0gICAgICAgICAgewotCSAgICAgICAgdHJ5Ci0JICAgICAgICB7Ci0JCSAgICAgIFVSTCBlbnRpdHlVUkwgPSBuZXcgVVJMKHVyaSk7Ci0gICAgICAgICAgICAgIFhNTElucHV0U291cmNlIGlzID0gbmV3IFhNTElucHV0U291cmNlKHJpZC5nZXRQdWJsaWNJZCgpLCBzeXN0ZW1JZCwgcmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLQkJICAgICAgaXMuc2V0Qnl0ZVN0cmVhbShlbnRpdHlVUkwub3BlblN0cmVhbSgpKTsKLSAgICAgICAgICAgICAgaWYgKGlzICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXM7Ci0gICAgICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgICAgICAgewotCQkgICAgICAvLyBObyBuZWVkIHRvIHJlcG9ydCB0aGlzIGVycm9yLiBTaW1wbHkgY29udGludWUgYmVsb3cuCi0JICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0gIAotICAKLSAgLyoqIAotICAgKiBBIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIgY29vcmRpbmF0ZS4KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBMb2NhdGlvbkNvb3JkaW5hdGUKLSAgewkKLQlwcml2YXRlIGludCBsaW5lTm8gPSAtMTsKLSAgICBwcml2YXRlIGludCBjb2x1bW5ObyA9IC0xOwotICAgIAotICAgIHB1YmxpYyBMb2NhdGlvbkNvb3JkaW5hdGUoaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCi0gICAgewotICAgICAgdGhpcy5saW5lTm8gPSBsaW5lTnVtYmVyOwotICAgICAgdGhpcy5jb2x1bW5ObyA9IGNvbHVtbk51bWJlcjsKLSAgICB9Ci0gICAgCQotICAgIHB1YmxpYyBpbnQgZ2V0TGluZU51bWJlcigpCi0gICAgeyAKLSAgICAgIHJldHVybiB0aGlzLmxpbmVObzsKLSAgICB9Ci0gICAgCQotICAgIHB1YmxpYyBpbnQgZ2V0Q29sdW1uTnVtbmVyKCkKLSAgICB7IAotICAgICAgcmV0dXJuIHRoaXMuY29sdW1uTm87Ci0gICAgfSAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9FbGVtZW50TG9jYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRWxlbWVudExvY2F0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiOTM5NDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9FbGVtZW50TG9jYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotLyoqCi0gKiBIb2xkcyB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQgaW4gdGhlIG1vZGVsLgotICovCi1wdWJsaWMgY2xhc3MgRWxlbWVudExvY2F0aW9uCi17ICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAibG9jYXRpb24iOwotICBwcm90ZWN0ZWQgaW50IGxpbmU7Ci0gIHByb3RlY3RlZCBpbnQgY29sdW1uOwotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSAtIHRoZSBsaW5lIGxvY2F0aW9uIG9mIHRoZSBlbGVtZW50Ci0gICAqIEBwYXJhbSBjb2x1bW4gLSB0aGUgY29sdW1uIGxvY2F0aW9uIG9mIHRoZSBlbGVtZW50Ci0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uKGludCBsaW5lLCBpbnQgY29sdW1uKQotICB7Ci0gICAgdGhpcy5saW5lID0gbGluZTsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbGluZSBudW1iZXIgZm9yIHRoaXMgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGxpbmUgbnVtYmVyIGZvciB0aGlzIGVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZU51bWJlcigpCi0gIHsKLSAgCXJldHVybiBsaW5lOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIGZvciB0aGlzIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIGZvciB0aGlzIGVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Q29sdW1uTnVtYmVyKCkKLSAgewotICAJcmV0dXJuIGNvbHVtbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MQ2F0YWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MQ2F0YWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGNiZjgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvSVhNTENhdGFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgZm9yIGFuIFhNTCBjYXRhbG9nLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElYTUxDYXRhbG9nCi17Ci0KLSAgLyoqCi0gICAqIEFkZCBhIHB1YmxpYyBpZCBhbmQgYSBsb2NhdGlvbiB0byB0aGUgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBwdWJsaWNJZCAtCi0gICAqICAgICAgICAgIHRoZSBwdWJsaWMgaWQgb2YgdGhlIGVudHJ5Ci0gICAqIEBwYXJhbSBzeXN0ZW1JZCAtCi0gICAqICAgICAgICAgIHRoZSBzeXN0ZW0gaWQgb2YgdGhlIGVudHJ5Ci0gICAqLwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhZGRFbnRyeVRvQ2F0YWxvZyhTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCk7Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIGxvY2F0aW9uIG9mIGFuIGVudGl0eSBnaXZlbiBwdWJsaWMgYW5kIHN5c3RlbSBpZHMuCi0gICAqIAotICAgKiBAcGFyYW0gcHVibGljSWQgLQotICAgKiAgICAgICAgICB0aGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkgdG8gYmUgcmVzb2x2ZWQKLSAgICogQHBhcmFtIHN5c3RlbUlkIC0KLSAgICogICAgICAgICAgdGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50aXR5IHRvIGJlIHJlc29sdmVkCi0gICAqIEByZXR1cm4gdGhlIGxvY2F0aW9uIG9mIHRoZSBlbnRpdHkKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvSVhNTFZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MDQxNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBhbiBYTUwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElYTUxWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFNldCB0aGUgZmlsZSB0byBiZSB2YWxpZGF0ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpIC0gdGhlIHVyaSBvZiB0aGUgZmlsZSB0byBiZSB2YWxpZGF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZpbGUoU3RyaW5nIHVyaSk7Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIGZpbGUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdlcmUgdmFsaWRhdGlvbiBlcnJvcnMsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSB3ZXJlIHZhbGlkYXRpb24gZXJyb3JzLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0Vycm9ycygpOwotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgZXJyb3JzLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBlcnJvcnMKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVycm9ycygpOwotICAKLSAgLyoqCi0gICAqIFNldCB0aGUgVVJJIHJlc29sdmVyIHRvIHVzZS4KLSAgICogCi0gICAqIEBwYXJhbSB1cmlSZXNvbHZlciBUaGUgVVJJIHJlc29sdmVyIHRvIHVzZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVSSVJlc29sdmVyKFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvTGluZU51bWJlckRPTVBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9MaW5lTnVtYmVyRE9NUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3OTdmMTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9MaW5lTnVtYmVyRE9NUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuU3ltYm9sVGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxMb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJQb29sOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MUGFyc2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkNvbnN0YW50czsKLQotLyoqCi0gKiBBIERPTSBwYXJzZXIgdGhhdCB3aWxsIHJlZ2lzdGVyIGxvY2F0aW9uIGluZm9ybWF0aW9uIHdpdGggdGhlIGVsZW1lbnRzIGluIHRoZSBtb2RlbC4KLSAqLwotcHVibGljIGNsYXNzIExpbmVOdW1iZXJET01QYXJzZXIgZXh0ZW5kcyBET01QYXJzZXIKLXsKLSAgWE1MTG9jYXRvciBsb2NhdG9yID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgTGluZU51bWJlckRPTVBhcnNlcigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIHNldEZlYXR1cmUoREVGRVJfTk9ERV9FWFBBTlNJT04sIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0dWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gYXJnMCBUaGUgcGFyc2VyIGNvbmZpZ3VyYXRpb24uCi0gICAqLwotICBwdWJsaWMgTGluZU51bWJlckRPTVBhcnNlcihYTUxQYXJzZXJDb25maWd1cmF0aW9uIGFyZzApCi0gIHsKLSAgICBzdXBlcihhcmcwKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzZXRGZWF0dXJlKERFRkVSX05PREVfRVhQQU5TSU9OLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBhcmcwIEEgc3ltYm9sIHRhYmxlIGZvciB0aGUgcGFyc2VyLgotICAgKi8KLSAgcHVibGljIExpbmVOdW1iZXJET01QYXJzZXIoU3ltYm9sVGFibGUgYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGFyZzAgQSBzeW1ib2wgdGFibGUgZm9yIHRoZSBwYXJzZXIuCi0gICAqIEBwYXJhbSBhcmcxIEEgZ3JhbW1hciBwb29sIGZvciB0aGUgcGFyc2VyLgotICAgKi8KLSAgcHVibGljIExpbmVOdW1iZXJET01QYXJzZXIoU3ltYm9sVGFibGUgYXJnMCwgWE1MR3JhbW1hclBvb2wgYXJnMSkKLSAgewotICAgIHN1cGVyKGFyZzAsIGFyZzEpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTERvY3VtZW50SGFuZGxlciNzdGFydEVsZW1lbnQob3JnLmFwYWNoZS54ZXJjZXMueG5pLlFOYW1lLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MQXR0cmlidXRlcywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnMpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoUU5hbWUgYXJnMCwgWE1MQXR0cmlidXRlcyBhcmcxLCBBdWdtZW50YXRpb25zIGFyZzIpIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIEVsZW1lbnQgZWxlbWVudDsKLSAgICAvLyBGb3IgZWxlbWVudHMgZnJvbSB0aGUgU2NoZW1hIG5hbWVzcGFjZSB3ZSB3YW50IHRvIHByZXNlcnZlIHRoZW0KLSAgICAvLyB0aGUgd2F5IHRoZXkgd2VyZSBlbnRlcmVkLiBSZXZlcnQgdGhlIHZhbHVlcyB0byB0aGUgbm9uLW5vcm1hbGl6ZWQgdmFsdWVzLgotICAgIFN0cmluZyBucyA9IGFyZzAudXJpOwotICAgIGlmKG5zICE9IG51bGwgJiYgKG5zLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKSB8fCBucy5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgbnMuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDApKSkKLSAgICB7Ci0gICAgICBpbnQgbnVtYXR0cyA9IGFyZzEuZ2V0TGVuZ3RoKCk7Ci0gICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtYXR0czsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9uTm9ybWFsaXplZFZhbHVlID0gYXJnMS5nZXROb25Ob3JtYWxpemVkVmFsdWUoaSk7Ci0gICAgICAgIGFyZzEuc2V0VmFsdWUoaSwgbm9uTm9ybWFsaXplZFZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIuc3RhcnRFbGVtZW50KGFyZzAsIGFyZzEsIGFyZzIpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGVsZW1lbnQgPSAoRWxlbWVudClnZXRQcm9wZXJ0eShDVVJSRU5UX0VMRU1FTlRfTk9ERSk7Ci0gICAgICBFbGVtZW50SW1wbCBlbGVtZW50SW1wbCA9IChFbGVtZW50SW1wbCllbGVtZW50OwotICAgICAgLy8gU2V0dGluZyB0aGUgdXNlciBkYXRhIHdpdGggYW4gaWRlbnRpZmllciBzdWNoIGFzIEVsZW1lbnRMb2NhdGlvbi5LRVlfTkFNRQotICAgICAgLy8gbWF5IGJlIGEgbG9uZyB0ZXJtIGdvb2QgaWRlYS4gVGhlIHNldFVzZXJEYXRhIG1ldGhvZCB3aXRoIG5vIGlkIGlzIHVzZWQgCi0gICAgICAvLyB0byBzdXBwb3J0IEpWTXMgd2l0aCBhbHRlcm5hdGUgdmVyc2lvbnMgb2YgWGVyY2VzLgotICAgICAgZWxlbWVudEltcGwuc2V0VXNlckRhdGEobmV3IEVsZW1lbnRMb2NhdGlvbihsb2NhdG9yLmdldExpbmVOdW1iZXIoKSwgbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKSkpOwotICAgIH0KLSAgICAvLyBjYXRjaCBTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIGFuZCBTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gaWYgY2FuJ3QgZ2V0IGVsZW1lbnQKLSAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MRG9jdW1lbnRIYW5kbGVyI3N0YXJ0RG9jdW1lbnQob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTExvY2F0b3IsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5OYW1lc3BhY2VDb250ZXh0LCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuQXVnbWVudGF0aW9ucykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoWE1MTG9jYXRvciBhcmcwLCBTdHJpbmcgYXJnMSwgTmFtZXNwYWNlQ29udGV4dCBhcmcyLCBBdWdtZW50YXRpb25zIGFyZzMpCi0gICAgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgbG9jYXRvciA9IGFyZzA7Ci0gICAgc3VwZXIuc3RhcnREb2N1bWVudChhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTljNjMxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5GYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5qYXhwLlNBWFBhcnNlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLS8qKgotICogWE1MQ2F0YWxvZyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHJlZ2lzdGVyLCBvYnRhaW4gYW5kIGRlbGV0ZSBhbiBpbnN0YW5jZQotICogb2YgYW4gWE1MIGNhdGFsb2cuIE1ldGhvZCBkZWZpbml0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIHRoZSBjYXRhbG9nIHRvIHNldCBhCi0gKiBsb2NhdGlvbiBpbiB0aGUgY2F0YWxvZyBhbmQgcmVzb2x2ZSBhbiBlbnRpdHkgZnJvbSB0aGUgY2F0YWxvZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2cgaW1wbGVtZW50cyBJWE1MQ2F0YWxvZwotewotICAvL3ByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBfQVBBQ0hFX0ZFQVRVUkVfQ09OVElOVUVfQUZURVJfRkFUQUxfRVJST1IgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL2NvbnRpbnVlLWFmdGVyLWZhdGFsLWVycm9yIjsKLQotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgX0FQQUNIRV9GRUFUVVJFX05BTUVTUEFDRV9QUkVGSVhFUyA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlLXByZWZpeGVzIjsKLQotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgX0FQQUNIRV9GRUFUVVJFX05BTUVTUEFDRVMgPSAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZXMiOwotCi0gIC8vcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIF9BUEFDSEVfRkVBVFVSRV9WQUxJREFUSU9OID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIjsKLQotICAvL3ByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBfQVBBQ0hFX0ZFQVRVUkVfVkFMSURBVElPTl9TQ0hFTUEgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hIjsKLSAgCi0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsKLQotICBwcml2YXRlIHN0YXRpYyBJWE1MQ2F0YWxvZyBpbnN0YW5jZSA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGV4dHhtbGNhdGFsb2djbGFzcyA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3NMb2FkZXIgZXh0Y2xhc3NMb2FkZXIgPSBudWxsOwotCi0gIHByaXZhdGUgc3RhdGljIElYTUxDYXRhbG9nIGV4dFhNTENhdGFsb2dJbnN0YW5jZSA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdCBzY2hlbWFkaXJzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIHByaXZhdGUgc3RhdGljIExpc3QgZW50aXRpZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEEgaGFzaHRhYmxlIHRvIGhvbGQgdGhlIFhNTCBjYXRhbG9nIGVudHJpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgTWFwIGNhdGFsb2cgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhbiBpbnN0YW5jZSBvZiB0aGUgWE1MIGNhdGFsb2cuIEFzc2lnbnMgYWxsIHJlZ2lzdGVyZWQgc2NoZW1hcyB0bwotICAgKiB0aGUgWE1MIGNhdGFsb2cuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBpbnN0YW5jZSBvZiB0aGUgWE1MIGNhdGFsb2cuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElYTUxDYXRhbG9nIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IFhNTENhdGFsb2coKTsKLQotICAgICAgLy8gQWRkIHRoZSByZWdpc3RlcmVkIGVudGl0aWVzIHRvIHRoZSBjYXRhbG9nLgotICAgICAgSXRlcmF0b3IgZW50aXR5SXRlciA9IGVudGl0aWVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZW50aXR5SXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFhNTENhdGFsb2dFbnRpdHlIb2xkZXIgZW50aXR5ID0gKFhNTENhdGFsb2dFbnRpdHlIb2xkZXIpIGVudGl0eUl0ZXIubmV4dCgpOwotICAgICAgICBpbnN0YW5jZS5hZGRFbnRyeVRvQ2F0YWxvZyhlbnRpdHkuZ2V0UHVibGljSWQoKSwgZW50aXR5LmdldFN5c3RlbUlkKCkpOwotICAgICAgfQotCi0gICAgICAvLyBBZGQgdGhlIHNjaGVtYXMgaW4gdGhlIHNjaGVtYSBkaXJlY3RvcmllcyB0byB0aGUgY2F0YWxvZy4KLSAgICAgIGlmIChzY2hlbWFkaXJzLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFNBWFBhcnNlciBzYXhQYXJzZXIgPSBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFNBWFBhcnNlckZhY3RvcnkgcGFyc2VyZmFjdG9yeSA9IG5ldyBTQVhQYXJzZXJGYWN0b3J5SW1wbCgpOwotICAgICAgICAgIHBhcnNlcmZhY3Rvcnkuc2V0RmVhdHVyZShfQVBBQ0hFX0ZFQVRVUkVfTkFNRVNQQUNFX1BSRUZJWEVTLCB0cnVlKTsKLSAgICAgICAgICBwYXJzZXJmYWN0b3J5LnNldEZlYXR1cmUoX0FQQUNIRV9GRUFUVVJFX05BTUVTUEFDRVMsIHRydWUpOwotICAgICAgICAgIHNheFBhcnNlciA9IHBhcnNlcmZhY3RvcnkubmV3U0FYUGFyc2VyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgSXRlcmF0b3Igc2NoZW1hZGlySXRlciA9IHNjaGVtYWRpcnMuaXRlcmF0b3IoKTsKLSAgICAgICAgU2NoZW1hTmFtZXNwYWNlSGFuZGxlciBoYW5kbGVyID0gKChYTUxDYXRhbG9nKSBpbnN0YW5jZSkubmV3IFNjaGVtYU5hbWVzcGFjZUhhbmRsZXIoKTsKLSAgICAgICAgd2hpbGUgKHNjaGVtYWRpckl0ZXIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHNjaGVtYWRpciA9IChTdHJpbmcpIHNjaGVtYWRpckl0ZXIubmV4dCgpOwotICAgICAgICAgIHJlZ2lzdGVyU2NoZW1hc0ZvckRpcihpbnN0YW5jZSwgc2NoZW1hZGlyLCBzYXhQYXJzZXIsIGhhbmRsZXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWdpc3RlciB0aGUgc2NoZW1hcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGFuZCBhbGwgc3ViZGlyZWN0b3JpZXMgd2l0aCB0aGUKLSAgICogWE1MIGNhdGFsb2cuCi0gICAqIAotICAgKiBAcGFyYW0gY2F0YWxvZwotICAgKiAgICAgICAgICBUaGUgY2F0YWxvZyB0byByZWdpc3RlciB0aGUgc2NoZW1hcyB3aXRoLgotICAgKiBAcGFyYW0gc2NoZW1hZGlyCi0gICAqICAgICAgICAgIFRoZSBzY2hlbWEgZGlyZWN0b3J5IHRvIHNlYXJjaCBmb3Igc2NoZW1hIGZpbGVzLgotICAgKiBAcGFyYW0gcGFyc2VyCi0gICAqICAgICAgICAgIFRoZSBTQVhQYXJzZXIgdG8gdXNlIHRvIHBhcnNlIHRoZSBzY2hlbWFzIGZvciB0aGVpcgotICAgKiAgICAgICAgICB0YXJnZXROYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBoYW5kbGVyCi0gICAqICAgICAgICAgIFRoZSBoYW5kbGVyIHRvIHVzZSB0byBnZXQgdGhlIHRhcmdldE5hbWVzcGFjZS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgcmVnaXN0ZXJTY2hlbWFzRm9yRGlyKElYTUxDYXRhbG9nIGNhdGFsb2csIFN0cmluZyBzY2hlbWFkaXIsIFNBWFBhcnNlciBwYXJzZXIsCi0gICAgICBTY2hlbWFOYW1lc3BhY2VIYW5kbGVyIGhhbmRsZXIpCi0gIHsKLSAgICAvLyBSZW1vdmUgZmlsZTogYW5kIGZpbGU6LyBmcm9tIGJlZ2lubmluZyBvZiBmaWxlIGxvY2F0aW9uIGlmIHRoZXkgYXJlIHByZXNlbnQuCi0gICAgaWYoc2NoZW1hZGlyLnN0YXJ0c1dpdGgoImZpbGU6IikpCi0gICAgewotICAgICAgc2NoZW1hZGlyID0gc2NoZW1hZGlyLnN1YnN0cmluZyg1KTsKLSAgICB9Ci0gICAgd2hpbGUoc2NoZW1hZGlyLnN0YXJ0c1dpdGgoIi8vIikpCi0gICAgewotICAgICAgc2NoZW1hZGlyID0gc2NoZW1hZGlyLnN1YnN0cmluZygxKTsKLSAgICB9Ci0gICAgCi0gICAgRmlsZSBkaXIgPSBuZXcgRmlsZShzY2hlbWFkaXIpOwotICAgIGlmIChkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBGaWxlW10gZmlsZXMgPSBkaXIubGlzdEZpbGVzKCk7Ci0gICAgICBpbnQgbnVtZmlsZXMgPSBmaWxlcy5sZW5ndGg7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWZpbGVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEZpbGUgdGVtcGZpbGUgPSBmaWxlc1tpXTsKLSAgICAgICAgU3RyaW5nIHRlbXBmaWxlcGF0aCA9IHRlbXBmaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgICB0ZW1wZmlsZXBhdGggPSB0ZW1wZmlsZXBhdGgucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgICAgIHdoaWxlKHRlbXBmaWxlcGF0aC5zdGFydHNXaXRoKCIvIikpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZW1wZmlsZXBhdGggPSB0ZW1wZmlsZXBhdGguc3Vic3RyaW5nKDEpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBmaWxlcGF0aCA9IEZJTEVfUFJPVE9DT0wgKyB0ZW1wZmlsZXBhdGg7Ci0gICAgICAgIGlmICh0ZW1wZmlsZS5pc0RpcmVjdG9yeSgpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVnaXN0ZXJTY2hlbWFzRm9yRGlyKGNhdGFsb2csIHRlbXBmaWxlcGF0aCwgcGFyc2VyLCBoYW5kbGVyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVyLnJlc2V0KCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcGFyc2VyLnBhcnNlKHRlbXBmaWxlcGF0aCwgaGFuZGxlcik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBsb2cgZXJyb3IuCi0gICAgICAgICAgfQotICAgICAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBoYW5kbGVyLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgIGlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXRhbG9nLmFkZEVudHJ5VG9DYXRhbG9nKHRhcmdldE5hbWVzcGFjZSwgdGVtcGZpbGVwYXRoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YW5jZSBvZiB0aGUgZXh0ZW5zaW9uIFhNTCBjYXRhbG9nLiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBpZiBvbmUKLSAgICogaXMgcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIGNyZWF0ZWQsIG51bGwgb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGV4dGVuc2lvbiBYTUwgY2F0YWxvZyBpZiBvbmUgaXMgcmVnaXN0ZXJlZCwKLSAgICogICAgICAgICBudWxsIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVhNTENhdGFsb2cgZ2V0RXh0ZW5zaW9uQ2F0YWxvZ0luc3RhbmNlKCkKLSAgewotICAgIGlmIChleHRYTUxDYXRhbG9nSW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZXh0eG1sY2F0YWxvZ2NsYXNzICE9IG51bGwgJiYgZXh0Y2xhc3NMb2FkZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBDbGFzcyBjYXRhbG9nQ2xhc3MgPSBleHRjbGFzc0xvYWRlciAhPSBudWxsID8gZXh0Y2xhc3NMb2FkZXIubG9hZENsYXNzKGV4dHhtbGNhdGFsb2djbGFzcykgOiBDbGFzcwotICAgICAgICAgICAgICAuZm9yTmFtZShleHR4bWxjYXRhbG9nY2xhc3MpOwotICAgICAgICAgIGV4dFhNTENhdGFsb2dJbnN0YW5jZSA9IChJWE1MQ2F0YWxvZykgY2F0YWxvZ0NsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgLy9UT0RPOiBMb2cgZXJyb3IKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZXh0WE1MQ2F0YWxvZ0luc3RhbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgY2xhc3Mgb2YgdGhlIFhNTCBjYXRhbG9nIHRvIGJlIHVzZWQuCi0gICAqIAotICAgKiBAcGFyYW0geG1sY2F0YWxvZwotICAgKiAgICAgICAgICBUaGUgY2xhc3Mgb2YgdGhlIFhNTCBjYXRhbG9nIHRvIGJlIHVzZWQuCi0gICAqIEBwYXJhbSBjbGFzc2xvYWRlcgotICAgKiAgICAgICAgICBUaGUgY2xhc3Nsb2FkZXIgdG8gdXNlIHRvIGxvYWQgdGhlIGNhdGFsb2cuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RXh0ZW5zaW9uWE1MQ2F0YWxvZyhTdHJpbmcgeG1sY2F0YWxvZywgQ2xhc3NMb2FkZXIgY2xhc3Nsb2FkZXIpCi0gIHsKLSAgICBleHR4bWxjYXRhbG9nY2xhc3MgPSB4bWxjYXRhbG9nOwotICAgIGV4dGNsYXNzTG9hZGVyID0gY2xhc3Nsb2FkZXI7Ci0gIH0KLQotICAvKioKLSAgICogUmVzZXRzIHRoZSBpbnN0YW5jZSBvZiB0aGUgWE1MIGNhdGFsb2cgdG8gbnVsbC4gRm9yIGRlbGV0aW5nIHRoZSBjYXRhbG9nIGlmCi0gICAqIG5lY2Vzc2FyeS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNldCgpCi0gIHsKLSAgICBpbnN0YW5jZSA9IG51bGw7Ci0gICAgZXh0eG1sY2F0YWxvZ2NsYXNzID0gbnVsbDsKLSAgICBleHRjbGFzc0xvYWRlciA9IG51bGw7Ci0gICAgZXh0WE1MQ2F0YWxvZ0luc3RhbmNlID0gbnVsbDsKLSAgICBlbnRpdGllcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBzY2hlbWFkaXJzID0gbmV3IEFycmF5TGlzdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhIHNjaGVtYSBkaXJlY3RvcnkgdG8gYmUgY2hlY2tlZCBmb3Igc2NoZW1hcyB0byByZWdpc3RlciBpbiB0aGUKLSAgICogY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWFkaXIKLSAgICogICAgICAgICAgVGhlIGRpcmVjdG9yeSB0byBjaGVjayBmb3Igc2NoZW1hcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRTY2hlbWFEaXIoU3RyaW5nIHNjaGVtYWRpcikKLSAgewotICAgIHNjaGVtYWRpcnMuYWRkKHNjaGVtYWRpcik7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGFuIGVudGl0eSB0byB0aGUgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBlbnRpdHkKLSAgICogICAgICAgICAgVGhlIGVudGl0eSB0byBhZGQgdG8gdGhlIGNhdGFsb2cuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkRW50aXR5KFhNTENhdGFsb2dFbnRpdHlIb2xkZXIgZW50aXR5KQotICB7Ci0gICAgZW50aXRpZXMuYWRkKGVudGl0eSk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuaW50ZXJuYWwueG1sLklYTUxDYXRhbG9nI2FkZEVudHJ5VG9DYXRhbG9nKGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVudHJ5VG9DYXRhbG9nKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgY2F0YWxvZy5wdXQocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5pbnRlcm5hbC54bWwuSVhNTENhdGFsb2cjcmVzb2x2ZUVudGl0eUxvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgU3RyaW5nIHJlc29sdmVkbG9jYXRpb24gPSBudWxsOwotICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIHVzaW5nIHRoZSBleHQgY2F0YWxvZy4KLSAgICBJWE1MQ2F0YWxvZyBleHRjYXRhbG9nID0gZ2V0RXh0ZW5zaW9uQ2F0YWxvZ0luc3RhbmNlKCk7Ci0gICAgaWYgKGV4dGNhdGFsb2cgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXNvbHZlZGxvY2F0aW9uID0gZXh0Y2F0YWxvZy5yZXNvbHZlRW50aXR5TG9jYXRpb24ocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgICB9Ci0gICAgaWYgKHJlc29sdmVkbG9jYXRpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBpZiB0aGVyZSdzIG5vIHN5c3RlbSBpZCB1c2UgdGhlIHB1YmxpYyBpZAotICAgICAgaWYgKHN5c3RlbUlkID09IG51bGwgfHwgc3lzdGVtSWQuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgc3lzdGVtSWQgPSBwdWJsaWNJZDsKLSAgICAgIH0KLSAgICAgIHJlc29sdmVkbG9jYXRpb24gPSAoU3RyaW5nKSBjYXRhbG9nLmdldChzeXN0ZW1JZCk7Ci0gICAgfQotICAgIHJldHVybiByZXNvbHZlZGxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEEgaGFuZGxlciB1c2VkIGluIHBhcnNpbmcgdG8gZ2V0IHRoZSB0YXJnZXROYW1lc3BhY2Ugc3RyaW5nIG9mIGEgc2NoZW1hLgotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIFNjaGVtYU5hbWVzcGFjZUhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotICB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEFSR0VUX05BTUVTUEFDRSA9ICJ0YXJnZXROYW1lc3BhY2UiOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0NIRU1BID0gInNjaGVtYSI7Ci0KLSAgICBwcml2YXRlIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNzdGFydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywKLSAgICAgKiAgICAgIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbG5hbWUsIFN0cmluZyBhcmcyLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICB7Ci0gICAgICBpZiAobG9jYWxuYW1lLmVxdWFscyhTQ0hFTUEpKQotICAgICAgewotCi0gICAgICAgIGludCBudW1BdHRzID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdHRzOyBpKyspCi0gICAgICAgIHsKLQotICAgICAgICAgIFN0cmluZyBhdHRuYW1lID0gYXR0cmlidXRlcy5nZXRRTmFtZShpKTsKLSAgICAgICAgICBpZiAoYXR0bmFtZS5lcXVhbHMoVEFSR0VUX05BTUVTUEFDRSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gYXR0cmlidXRlcy5nZXRWYWx1ZShpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgfQotICAgICAgc3VwZXIuc3RhcnRFbGVtZW50KHVyaSwgbG9jYWxuYW1lLCBhcmcyLCBhdHRyaWJ1dGVzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIHRhcmdldE5hbWVzcGFjZSBmb3VuZCBieSBwYXJzaW5nIHRoZSBmaWxlLgotICAgICAqIAotICAgICAqIEByZXR1cm4gVGhlIHRhcmdldE5hbWVzcGFjZSBmb3VuZCBieSBwYXJzaW5nIHRoZSBmaWxlLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gdGFyZ2V0TmFtZXNwYWNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgaGFuZGxlciBzbyBpdCBjYW4gYmUgcmV1c2VkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkKLSAgICB7Ci0gICAgICB0YXJnZXROYW1lc3BhY2UgPSBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nRW50aXR5SG9sZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dFbnRpdHlIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVmOTZkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dFbnRpdHlIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotLyoqCi0gKiBBIGNvbnRhaW5lciB0byBob2xkIHRoZSBlbnRpdHkgaW5mb3JtYXRpb24gdW50aWwgYW4gWE1MIGNhdGFsb2cgaXMKLSAqIHRvIGJlIGluaXRpYWxpemVkLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZ0VudGl0eUhvbGRlcgotewotICBwcml2YXRlIFN0cmluZyBwdWJsaWNJZDsKLSAgcHJpdmF0ZSBTdHJpbmcgc3lzdGVtSWQ7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gcHVibGljSWQgVGhlIHB1YmxpYyBpZCBvZiB0aGUgZW50aXR5LgotICAgKiBAcGFyYW0gc3lzdGVtSWQgVGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50aXR5LgotICAgKi8KLSAgcHVibGljIFhNTENhdGFsb2dFbnRpdHlIb2xkZXIoU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgICB0aGlzLnB1YmxpY0lkID0gcHVibGljSWQ7Ci0gICAgdGhpcy5zeXN0ZW1JZCA9IHN5c3RlbUlkOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkuCi0gICAqIEByZXR1cm4gVGhlIHB1YmxpYyBpZCBvZiB0aGUgZW50aXR5LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaWNJZCgpCi0gIHsKLSAgICByZXR1cm4gcHVibGljSWQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzeXN0ZW0gaWQgb2YgdGhlIGVudGl0eS4KLSAgICogQHJldHVybiBUaGUgc3lzdGVtIGlkIG9mIHRoZSBlbnRpdHkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN5c3RlbUlkKCkKLSAgewotICAgIHJldHVybiBzeXN0ZW1JZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZ1Jlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZDBlNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5MYXp5VVJMSW5wdXRTdHJlYW07Ci0KLS8qKgotICogQSByZXNvbHZlciB0byByZXNvbHZlciBlbnRpdGllcyBmcm9tIHRoZSBYTUwgY2F0YWxvZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dSZXNvbHZlciBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgWE1MQ2F0YWxvZ1Jlc29sdmVyIHhtbENhdGFsb2c7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIFhNTENhdGFsb2dSZXNvbHZlcigpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbmNlIG9mIHRoaXMgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGlzIHJlc29sdmVyCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFhNTENhdGFsb2dSZXNvbHZlciBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoeG1sQ2F0YWxvZyA9PSBudWxsKQotICAgIHsKLSAgICAgIHhtbENhdGFsb2cgPSBuZXcgWE1MQ2F0YWxvZ1Jlc29sdmVyKCk7Ci0gICAgfQotICAgIHJldHVybiB4bWxDYXRhbG9nOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlSWRlbnRpZmllcikgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRQdWJsaWNJZCgpOwotICAgIGlmKHB1YmxpY0lkID09IG51bGwpCi0gICAgewotICAgICAgcHVibGljSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgfQotICAgIFN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRMaXRlcmFsU3lzdGVtSWQoKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBYTUxDYXRhbG9nLmdldEluc3RhbmNlKCkucmVzb2x2ZUVudGl0eUxvY2F0aW9uKHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgaWYgKGxvY2F0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgTGF6eVVSTElucHV0U3RyZWFtIGlzID0gbmV3IExhenlVUkxJbnB1dFN0cmVhbShsb2NhdGlvbik7Ci0gICAgICBYTUxJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgc3lzdGVtSWQsIHN5c3RlbUlkLCBpcywgbnVsbCk7Ci0gICAgICByZXR1cm4gaW5wdXRTb3VyY2U7Ci0gICAgfQotICAgIC8vIG90aGVyd2lzZSByZXR1cm4gbnVsbCB0byB0ZWxsIHRoZSBwYXJzZXIgdG8gbG9jYXRlIHRoZSBzeXN0ZW1JZCBhcyBhIFVSSQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTE1lc3NhZ2VJbmZvSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTE1lc3NhZ2VJbmZvSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0M2FiODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxNZXNzYWdlSW5mb0hlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotcHVibGljIGNsYXNzIFhNTE1lc3NhZ2VJbmZvSGVscGVyCi17Ci0gIAotICAvL3NlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnJlY29uY2lsZS5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFMTF9BVFRSSUJVVEVTID0gIkFMTF9BVFRSSUJVVEVTIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX05BTUUgPSJBVFRSSUJVVEVfTkFNRSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9WQUxVRSA9ICJBVFRSSUJVVEVfVkFMVUUiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFSVF9UQUcgPSAiU1RBUlRfVEFHIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVYVCA9ICJURVhUIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklSU1RfTk9OX1dISVRFU1BBQ0VfVEVYVCA9ICJGSVJTVF9OT05fV0hJVEVTUEFDRV9URVhUIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVYVF9FTlRJVFlfUkVGRVJFTkNFID0gIlRFWFRfRU5USVRZX1JFRkVSRU5DRSI7IAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9PRl9BVFRSSUJVVEVfV0lUSF9HSVZFTl9WQUxVRSA9ICJWQUxVRV9PRl9BVFRSSUJVVEVfV0lUSF9HSVZFTl9WQUxVRSI7Ci0gIAotICAKLSAgcHVibGljIFhNTE1lc3NhZ2VJbmZvSGVscGVyKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHNob3VsZCBiZSB1bmRlcmxpbmVkIHdpdGggdGhlIHJlZCAic3F1aWdnbGVzIgotICAgKiAgdXNpbmcgdGhlIGVycm9yS2V5LCBhbmQgdGhlIG1lc3NhZ2VBcmd1bWVudHMKLSAgICogIDxicj5Qb3NpdGlvbiAwIG9mIHRoZSBhcnJheSByZXR1cm5lZCBjb250YWlucyB0aGUgc2VsZWN0aW9uIFN0cmF0ZWd5LG9yIHdoYXQgRE9NIEVsZW1lbnQgdG8gdW5kZXJsaW5lLiAgCi0gICAqICBGb3IgZXhhbXBsZSAiQVRUUklCVVRFX05BTUUiICAKLSAgICogIDxicj5Qb3NpdGlvbiAxIGNvbnRhaW5zIHRoZSBuYW1lIG9yIHZhbHVlIHRvIHNxdWlnZ2xlLgotICAgKiAgPHA+Rm9yIGV4YW1wbGUsIGlmIHdlIHdhbnRlZCB0byBzcXVpZ2dsZSB0aGUgYXR0cmlidXRlIG5hbWUgb2YgYW4gYXR0cmlidXRlIG5hbWUKLSAgICogIGZvbyB0aGlzIG1ldGhvZCB3b3VsZCByZXR1cm4geyJBVFRSSUJVVEVfTkFNRSIsICJmb28ifQotICAgKiAgPC9wPgotICAgKiAgQHBhcmFtIGVycm9yS2V5IHRoZSBlcnJvciBrZXkgZ2l2ZW4gYnkgdGhlIFhlcmNlcyBwYXJzZXIKLSAgICogIEBwYXJhbSBtZXNzYWdlQXJndW1lbnRzIHRoZSBhcmd1bWVudHMgdXNlZCBieSBYZXJjZXMgdG8gImZpbGwgaW4gdGhlIGJsYW5rcyIgb2YgdGhlaXIgbWVzc2FnZXMKLSAgICogIEByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgc3F1aWdnbGUgaW5mb3JtYXRpb24KLSAgICogIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5yZWNvbmNpbGUuRGVsZWdhdGluZ1JlY29uY2lsZVZhbGlkYXRvcgotICAgKiAgCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gY3JlYXRlTWVzc2FnZUluZm8oU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzKQotICB7IAotICAgIFN0cmluZyBzZWxlY3Rpb25TdHJhdGVneSA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWVPclZhbHVlID0gbnVsbDsKLQotICAgIC8vWE1MIEVycm9ycwotICAgIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuMi40LmEiKSB8fCBlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuMi40LmQiKSB8fCBlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuMi40LmIiKSB8fCBlcnJvcktleS5lcXVhbHMoIk1TR19DT05URU5UX0lOVkFMSUQiKQotICAgICAgICB8IGVycm9yS2V5LmVxdWFscygiTVNHX0NPTlRFTlRfSU5DT01QTEVURSIpIHx8IGVycm9yS2V5LmVxdWFscygiTVNHX1JFUVVJUkVEX0FUVFJJQlVURV9OT1RfU1BFQ0lGSUVEIikgfHwgZXJyb3JLZXkuZXF1YWxzKCJjdmMtY29tcGxleC10eXBlLjQiKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneSA9IFNUQVJUX1RBRzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtdHlwZS4zLjEuMyIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5ID0gVEVYVDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtY29tcGxleC10eXBlLjIuMyIpKQotICAgIHsKLSAgICAJc2VsZWN0aW9uU3RyYXRlZ3kgPSBGSVJTVF9OT05fV0hJVEVTUEFDRV9URVhUOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy10eXBlLjMuMS4xIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3kgPSBBTExfQVRUUklCVVRFUzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtY29tcGxleC10eXBlLjMuMi4yIikgfHwgZXJyb3JLZXkuZXF1YWxzKCJNU0dfQVRUUklCVVRFX05PVF9ERUNMQVJFRCIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5ID0gQVRUUklCVVRFX05BTUU7Ci0JICAvL2luIHRoaXMgY2FzZSB3ZSBuZWVkIG5hbWVPclZhbHVlIHRvIGJlIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gdW5kZXJsaW5lCi0JICBuYW1lT3JWYWx1ZSA9IChTdHJpbmcpbWVzc2FnZUFyZ3VtZW50c1sxXTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtYXR0cmlidXRlLjMiKSB8fCBlcnJvcktleS5lcXVhbHMoIk1TR19BVFRSSUJVVEVfVkFMVUVfTk9UX0lOX0xJU1QiKSkKLSAgICB7CQotICAgIAlzZWxlY3Rpb25TdHJhdGVneSA9IEFUVFJJQlVURV9WQUxVRTsgIAotCQkvL2luIHRoaXMgY2FzZSB3ZSBuZWVkIG5hbWVPclZhbHVlIHRvIGJlIHRoZSBuYW1lIG9mIHRoZSBBdHRyaWJ1dGUKLSAgICAJaWYgKGVycm9yS2V5LmVxdWFscygiY3ZjLWF0dHJpYnV0ZS4zIikpCi0gICAgCXsgbmFtZU9yVmFsdWUgPSAoU3RyaW5nKW1lc3NhZ2VBcmd1bWVudHNbMV07Ci0gICAgCX0KLSAgICAJZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJNU0dfQVRUUklCVVRFX1ZBTFVFX05PVF9JTl9MSVNUIikpCi0gICAgCXsJbmFtZU9yVmFsdWUgPSAoU3RyaW5nKW1lc3NhZ2VBcmd1bWVudHNbMF07Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtZWx0LjQuMiIpKQotICAgIHsJc2VsZWN0aW9uU3RyYXRlZ3k9VkFMVUVfT0ZfQVRUUklCVVRFX1dJVEhfR0lWRU5fVkFMVUU7Ci0JCS8vaW4gdGhpcyBjYXNlIHdlIG5lZWQgbmFtZU9yVmFsdWUgdG8gYmUgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgd2Ugd2FudCB0byB1bmVybGluZQotICAgIAluYW1lT3JWYWx1ZSA9IChTdHJpbmcpbWVzc2FnZUFyZ3VtZW50c1sxXTsJCi0gICAgfQotICAgIGVsc2UgaWYgKGVycm9yS2V5LmVxdWFscygiRW50aXR5Tm90RGVjbGFyZWQiKSkKLSAgICB7ICAJc2VsZWN0aW9uU3RyYXRlZ3k9VEVYVF9FTlRJVFlfUkVGRVJFTkNFOwotICAgIH0KLSAgICAKLSAgICAKLSAgICAvL1dTREwgRXJyb3JzCi0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJfTUVTU0FHRV9VTkRFRklORURfRk9SX09VVFBVVCIpIHx8Ci0gICAgICAgICAgICAgICBlcnJvcktleS5lcXVhbHMoIl9NRVNTQUdFX1VOREVGSU5FRF9GT1JfSU5QVVQiKSB8fAotICAgICAgICAgICAgICAgZXJyb3JLZXkuZXF1YWxzKCJfTUVTU0FHRV9VTkRFRklORURfRk9SX0ZBVUxUIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3k9QVRUUklCVVRFX1ZBTFVFOwotICAgICAgbmFtZU9yVmFsdWU9ICJtZXNzYWdlIjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJfUE9SVFRZUEVfVU5ERUZJTkVEX0ZPUl9CSU5ESU5HIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3k9QVRUUklCVVRFX1ZBTFVFOwotICAgICAgbmFtZU9yVmFsdWU9InR5cGUiOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoIl9PUEVSQVRJT05fVU5ERUZJTkVEX0ZPUl9QT1JUVFlQRSIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5PUFUVFJJQlVURV9WQUxVRTsKLSAgICAgIG5hbWVPclZhbHVlPSJuYW1lIjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJfUEFSVF9JTlZBTElEX0VMRU1FTlQiKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneT1BVFRSSUJVVEVfVkFMVUU7Ci0gICAgICBuYW1lT3JWYWx1ZT0iZWxlbWVudCI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVycm9yS2V5LmVxdWFscygiX05PX0JJTkRJTkdfRk9SX1BPUlQiKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneT1BVFRSSUJVVEVfVkFMVUU7Ci0gICAgICBuYW1lT3JWYWx1ZT0iYmluZGluZyI7Ci0gICAgfQotICAgIAotICAgIFN0cmluZyBtZXNzYWdlSW5mb1tdID0gbmV3IFN0cmluZ1syXTsKLSAgICBtZXNzYWdlSW5mb1swXSA9IHNlbGVjdGlvblN0cmF0ZWd5OwotICAgIG1lc3NhZ2VJbmZvWzFdID0gbmFtZU9yVmFsdWU7Ci0gICAgcmV0dXJuIG1lc3NhZ2VJbmZvOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGwucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhY2EyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBDb25zdGFudHMgZm9yIHN0cmluZ3MgIAotCi0hLS0gRXJyb3Igd2l0aCBkb2N1bWVudCBsb2NhdGlvbgotX0VSUk9SX0RPQ1VNRU5UX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgID0gVGhlIFdTREwgZG9jdW1lbnQgezB9IGNvdWxkIG5vdCBiZSByZWFkLgotIS0tIFdhcm5pbmcgTWVzc2FnZXMKLV9XQVJOX05PX1ZBTERJQVRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IFRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGZvciB0aGUgbmFtZXNwYWNlIHswfS4KLQotX0VSUk9SX1BST0JMRU1fV1NETF9WQUxJREFUT1IgICAgICAgICAgICAgID0gQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHJ1bm5pbmcgdGhlIFdTREwgdmFsaWRhdG9yIGZvciBuYW1lc3BhY2UgezB9LgotX0VSUk9SX05PX1dTRExfVkFMSURBVE9SICAgICAgICAgICAgICAgICAgID0gVGhlIG5hbWVzcGFjZSB7MH0gc3BlY2lmaWVkIGlzIG5vdCBhIHZhbGlkIFdTREwgbmFtZXNwYWNlLgotX0VSUk9SX1BST0JMRU1fRVhUX1ZBTElEQVRPUiAgICAgICAgICAgICAgID0gQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHJ1bm5pbmcgdGhlIEV4dGVuc2lvbiB2YWxpZGF0b3IgezB9IGZvciBuYW1lc3BhY2UgezF9LgotCi0hLS0gU3RyaW5ncyBmb3IgV1NETCAxLjEgdmFsaWRhdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1fVU5BQkxFX1RPX0lNUE9SVF9CQURfTE9DQVRJT04gICAgICAgICAgICAgPSBUaGUgezB9IGRvY3VtZW50IGNvdWxkIG5vdCBiZSBpbXBvcnRlZC4gQ2hlY2sgdGhhdCB0aGUgZG9jdW1lbnQgZXhpc3RzIGFuZCB0aGF0IHRoZSBsb2NhdGlvbiBpcyBjb3JyZWN0LgotX1VOQUJMRV9UT19JTVBPUlRfTk9fTE9DQVRJT04gICAgICAgICAgICAgID0gVGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSBpcyBlbXB0eS4gQSBsb2NhdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBmb3IgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZS4KLV9VTkFCTEVfVE9fSU1QT1JUX0lOVkFMSUQgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gZG9jdW1lbnQgY291bGQgbm90IGJlIGltcG9ydGVkIGJlY2F1c2UgaXQgaXMgbm90IHZhbGlkLiBUaGUgZG9jdW1lbnQgbXVzdCBiZSBjb3JyZWN0ZWQgYmVmb3JlIGl0IGNhbiBiZSBpbXBvcnRlZC4KLV9OT19CSU5ESU5HX0ZPUl9QT1JUICAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gcG9ydCBoYXMgYW4gaW52YWxpZCBiaW5kaW5nIC0gezF9LiBDaGVjayB0aGF0IHRoZSB7MX0gYmluZGluZyBpcyBkZWZpbmVkLgotX1BPUlRUWVBFX1VOREVGSU5FRF9GT1JfQklORElORyAgICAgICAgICAgID0gVGhlIHswfSBwb3J0IHR5cGUgc3BlY2lmaWVkIGZvciB0aGUgezF9IGJpbmRpbmcgaXMgdW5kZWZpbmVkLiBDaGVjayB0aGUgezB9IHBvcnQgdHlwZSBuYW1lIGFuZCBlbnN1cmUgaXQgaXMgZGVmaW5lZC4KLV9PUEVSQVRJT05fVU5ERUZJTkVEX0ZPUl9QT1JUVFlQRSAgICAgICAgICA9IFRoZSBvcGVyYXRpb24gc3BlY2lmaWVkIGZvciB0aGUgezB9IGJpbmRpbmcgaXMgbm90IGRlZmluZWQgZm9yIHBvcnQgdHlwZSB7MX0uIEFsbCBvcGVyYXRpb25zIHNwZWNpZmllZCBpbiB0aGlzIGJpbmRpbmcgbXVzdCBiZSBkZWZpbmVkIGluIHBvcnQgdHlwZSB7MX0uCi1fSU5QVVRfTkFNRV9OT1RfVU5JUVVFICAgICAgICAgICAgICAgICAgICAgPSBUaGUgbmFtZSB7MH0gc3BlY2lmaWVkIGZvciB0aGlzIGlucHV0IGVsZW1lbnQgaXMgbm90IHVuaXF1ZS4gVGhlIG5hbWUgb2YgYW4gaW5wdXQgZWxlbWVudCBtdXN0IGJlIHVuaXF1ZSBmcm9tIHRoZSBuYW1lcyBvZiBhbGwgb3RoZXIgaW5wdXQgYW5kIG91dHB1dCBlbGVtZW50cyBkZWZpbmVkIGluIHRoZSB7MX0gcG9ydCB0eXBlLgotX09VVFBVVF9OQU1FX05PVF9VTklRVUUgICAgICAgICAgICAgICAgICAgID0gVGhlIG5hbWUgezB9IHNwZWNpZmllZCBmb3IgdGhpcyBvdXRwdXQgZWxlbWVudCBpcyBub3QgdW5pcXVlLiBUaGUgbmFtZSBvZiBhbiBvdXRwdXQgZWxlbWVudCBtdXN0IGJlIHVuaXF1ZSBmcm9tIHRoZSBuYW1lcyBvZiBhbGwgb3RoZXIgaW5wdXRzIGFuZCBvdXRwdXQgZWxlbWVudHMgZGVmaW5lZCBpbiB0aGUgezF9IHBvcnQgdHlwZS4KLV9NRVNTQUdFX1VOREVGSU5FRF9GT1JfSU5QVVQgICAgICAgICAgICAgICA9IFRoZSBpbnB1dCBlbGVtZW50IGlzIHJlZmVyZW5jaW5nIGFuIHVuZGVmaW5lZCBtZXNzYWdlIHswfS4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVmaW5lZC4KLV9NRVNTQUdFX1VOREVGSU5FRF9GT1JfT1VUUFVUICAgICAgICAgICAgICA9IFRoZSBvdXRwdXQgZWxlbWVudCBpcyByZWZlcmVuY2luZyBhbiB1bmRlZmluZWQgbWVzc2FnZSB7MH0uIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2UgbmFtZSBhbmQgbmFtZXNwYWNlIGFyZSBjb3JyZWN0IGFuZCB0aGF0IHRoZSBtZXNzYWdlIGhhcyBiZWVuIGRlZmluZWQuCi1fTUVTU0FHRV9VTkRFRklORURfRk9SX0ZBVUxUICAgICAgICAgICAgICAgPSBUaGUgZmF1bHQgZWxlbWVudCBpcyByZWZlcmVuY2luZyBhbiB1bmRlZmluZWQgbWVzc2FnZSB7MH0uIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2UgbmFtZSBhbmQgbmFtZXNwYWNlIGFyZSBjb3JyZWN0IGFuZCB0aGF0IHRoZSBtZXNzYWdlIGhhcyBiZWVuIGRlZmluZWQuCi1fRFVQTElDQVRFX0ZBVUxUX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBBIGZhdWx0IHdpdGggdGhlIG5hbWUgezB9IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBmb3IgdGhlIHsxfSAwcGVyYXRpb24uIENoZWNrIHRoYXQgZXZlcnkgZmF1bHQgZGVmaW5lZCBmb3IgdGhpcyBvcGVyYXRpb24gaGFzIGEgdW5pcXVlIG5hbWUuCi1fUEFSVF9OT19FTEVNRU5UX09SX1RZUEUgICAgICAgICAgICAgICAgICAgPSBUaGUgcGFydCB7MH0gZG9lcyBub3QgaGF2ZSBhIHR5cGUgZGVmaW5lZC4gRXZlcnkgcGFydCBtdXN0IHNwZWNpZnkgYSB0eXBlIGZyb20gc29tZSB0eXBlIHN5c3RlbS4gVGhlIHR5cGUgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgYnVpbHQgaW4gImVsZW1lbnQiIG9yICJ0eXBlIiBhdHRyaWJ1dGVzIG9yIG1heSBiZSBzcGVjaWZpZWQgdXNpbmcgYW4gZXh0ZW5zaW9uIGF0dHJpYnV0ZS4KLV9QQVJUX0JPVEhfRUxFTUVOVF9BTkRfVFlQRSAgICAgICAgICAgICAgICA9IFRoZSBwYXJ0IHswfSBoYXMgYm90aCBhbiBlbGVtZW50IGFuZCBhIHR5cGUgZGVmaW5lZC4gRXZlcnkgcGFydCBtdXN0IG9ubHkgaGF2ZSBhbiBlbGVtZW50IG9yIGEgdHlwZSBkZWZpbmVkLgotX1BBUlRfSU5WQUxJRF9FTEVNRU5UICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHBhcnQgezB9IGhhcyBhbiBpbnZhbGlkIHZhbHVlIHsxfSBkZWZpbmVkIGZvciBpdHMgZWxlbWVudC4gRWxlbWVudCBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4KLV9QQVJUX0lOVkFMSURfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICA9IFRoZSBwYXJ0IHswfSBoYXMgYW4gaW52YWxpZCB2YWx1ZSB7MX0gZGVmaW5lZCBmb3IgaXRzIHR5cGUuIFR5cGUgZGVjbGFyYXRpb25zIG11c3QgcmVmZXIgdG8gdmFsaWQgdmFsdWVzIGRlZmluZWQgaW4gYSBzY2hlbWEuCi1fRFVQTElDQVRFX09QRVJBVElPTl9GT1JfUE9SVFRZUEUgICAgICAgICAgPSBBbiBvcGVyYXRpb24gd2l0aCB0aGUgbmFtZSB7MH0gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGZvciB0aGUgezF9IHBvcnQgdHlwZS4gRXZlcnkgb3BlcmF0aW9uIGRlZmluZWQgZm9yIGEgcG9ydCB0eXBlIG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lLiAKLV9TRVJWSUNFX05BTUVfQUxSRUFEWV9ERUZJTkVEICAgICAgICAgICAgICA9IEEgU2VydmljZSB3aXRoIHRoZSBuYW1lIHswfSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIEV2ZXJ5IHNlcnZpY2UgaW4gdGhlIFdTREwgZG9jdW1lbnQgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuCi1fQklORElOR19OQU1FX0FMUkVBRFlfREVGSU5FRCAgICAgICAgICAgICAgPSBBIGJpbmRpbmcgd2l0aCB0aGUgbmFtZSB7MH0gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiBFdmVyeSBiaW5kaW5nIGluIHRoZSBXU0RMIGRvY3VtZW50IG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lLgotX01FU1NBR0VfTkFNRV9BTFJFQURZX0RFRklORUQgICAgICAgICAgICAgID0gQSBtZXNzYWdlIHdpdGggdGhlIG5hbWUgezB9IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gRXZlcnkgbWVzc2FnZSBpbiB0aGUgV1NETCBkb2N1bWVudCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4KLV9QT1JUVFlQRV9OQU1FX0FMUkVBRFlfREVGSU5FRCAgICAgICAgICAgICA9IEEgcG9ydCB0eXBlIHdpdGggdGhlIG5hbWUgezB9IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gRXZlcnkgcG9ydCB0eXBlIGluIHRoZSBXU0RMIGRvY3VtZW50IG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lLgotX01PUkVfVEhFTl9PTkVfQUREUkVTU19QT1JUICAgICAgICAgICAgICAgID0gQW4gYWRkcmVzcyBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgZm9yIHBvcnQgezB9LiBFYWNoIHBvcnQgY2FuIGhhdmUgb25seSBvbmUgYWRkcmVzcyBkZWZpbmVkLgotX05PX0FERFJFU1NfUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHBvcnQgezB9IGhhcyBubyBhZGRyZXNzIGRlZmluZWQuIEVhY2ggcG9ydCBtdXN0IGRlZmluZSBvbmUgYWRkcmVzcy4KLV9QT1JUX05BTUVfTk9UX1VOSVFVRSAgICAgICAgICAgICAgICAgICAgICA9IEEgcG9ydCB3aXRoIHRoZSBuYW1lIHswfSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIEV2ZXJ5IHBvcnQgaW4gdGhlIFdTREwgZG9jdW1lbnQgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuCi1fT1BFUkFUSU9OX05PX0lOUFVUX09SX09VVFBVVCAgICAgICAgICAgICAgPSBObyBpbnB1dCBvciBvdXRwdXQgZWxlbWVudCBoYXMgYmVlbiBkZWZpbmVkIGZvciB0aGUgezB9IG9wZXJhdGlvbi4gQW4gaW5wdXQgZWxlbWVudCwgYW4gb3V0cHV0IGVsZW1lbnQsIG9yIGJvdGggbXVzdCBiZSBkZWZpbmVkIGZvciBldmVyeSBvcGVyYXRpb24uCi1fV0FSTl9TT0FQRU5DX0lNUE9SVEVEX1BBUlQgICAgICAgICAgICAgICAgPSBUaGUgcGFydCB7MH0gdXNlcyBhbiBlbGVtZW50IG9yIHR5cGUgZnJvbSB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgYnV0IHRoZSBuYW1lc3BhY2UgaGFzIG5vdCBiZWVuIGltcG9ydGVkLiBUaGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2Ugc2hvdWxkIGJlIGltcG9ydGVkIHdpdGggYW4gaW1wb3J0IHN0YXRlbWVudCBiZWZvcmUgaXQgaXMgdXNlZC4KLV9XQVJOX1NPQVBFTkNfSU1QT1JURURfU0NIRU1BICAgICAgICAgICAgICA9IFRoZSBpbmxpbmUgc2NoZW1hIHVzZXMgYW4gZWxlbWVudCBvciB0eXBlIGZyb20gdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlIGJ1dCB0aGUgbmFtZXNwYWNlIGhhcyBub3QgYmVlbiBpbXBvcnRlZC4gVGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlIHNob3VsZCBiZSBpbXBvcnRlZCB3aXRoIGFuIGltcG9ydCBzdGF0ZW1lbnQgYmVmb3JlIGl0IGlzIHVzZWQuCi1fUkVGRVJFTkNFRF9GSUxFX0NPTlRBSU5TX0VSUk9SUyAgICAgICAgICAgPSBSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh7MH0pLgotX1dBUk5fT0xEX1NDSEVNQV9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgID0gQW4gb2xkIHZlcnNpb24gb2YgdGhlIHNjaGVtYSBuYW1lc3BhY2UgaGFzIGJlZW4gc3BlY2lmaWVkLiB7MH0gaXMgdGhlIHNjaGVtYSBuYW1lc3BhY2UgdGhhdCBzaG91bGQgYmUgdXNlZC4KLV9FUlJPUl9NVUxUSVBMRV9UWVBFU19ERUZJTkVEICAgICAgICAgICAgICA9IEEgdHlwZXMgc2VjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIE9ubHkgb25lIHR5cGVzIGVsZW1lbnQgaXMgYWxsb3dlZC4KLV9XQVJOX1dST05HX05TX09OX0lNUE9SVCAgICAgICAgICAgICAgICAgICA9IFRoZSBmaWxlIGNhbm5vdCBiZSBpbXBvcnRlZCBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgezB9IGRvZXMgbm90IG1hdGNoIHRoZSB0YXJnZXQgbmFtZXNwYWNlIHsxfSBvZiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQuCi0hLS0gUmVmZXJlbmNlZCBmaWxlIGVycm9yCi0hLS0gTm90ZSB0byB0cmFuc2xhdG9yIC0gX1JFRl9GSUxFX0VSUk9SX01FU1NBR0UgbmVlZHMgYSB0cmFpbGluZyBzcGFjZSBhcyBhbm90aGVyIG1lc3NhZ2UgbWF5IGZvbGxvdy4KLV9SRUZfRklMRV9FUlJPUl9NRVNTQUdFICAgICAgICAgID0gUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAoezB9KS4gCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGxodHRwLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbGh0dHAucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5MzkwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbGh0dHAucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLV9FUlJPUl9OT19MT0NBVElPTl9GT1JfQUREUkVTUyAgICAgICAgICAgICAgICAgICA9IE5vIGxvY2F0aW9uIGhhcyBiZWVuIHNwZWNpZmllZCBmb3IgdGhpcyBhZGRyZXNzLiBFdmVyeSBhZGRyZXNzIG11c3QgaGF2ZSBhIHZhbGlkIGxvY2F0aW9uIHNwZWNpZmllZC4KLV9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gZWxlbWVudCBkZWZpbmVkIGhlcmUgaXMgdW5kZWZpbmVkIGZvciB0aGUgSFRUUCBuYW1lc3BhY2UuIFRoZSBvbmx5IHZhbGlkIGVsZW1lbnQgaXMgImFkZHJlc3MiLgotX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5UICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBIVFRQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAiYmluZGluZyIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX09QRVJBVElPTl9FTEVNRU5UICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgZGVmaW5lZCBoZXJlIGlzIHVuZGVmaW5lZCBmb3IgdGhlIEhUVFAgbmFtZXNwYWNlLiBUaGUgb25seSB2YWxpZCBlbGVtZW50IGlzICJvcGVyYXRpb24iLgotX0VSUk9SX0lOVkFMSURfQklORElOR19JTlBVVF9FTEVNRU5UICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBIVFRQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudHMgYXJlICJ1cmxSZXBsYWNlbWVudCIgYW5kICJ1cmxFbmNvZGVkIi4KLV9FUlJPUl9JTlZBTElEX0hUVFBfRUxFTUVOVF9GT1JfTE9DQVRJT04gICAgICAgICA9IFRoZSB7MH0gZWxlbWVudCBjYW5ub3QgYmUgc3BlY2lmaWVkIGhlcmUuIFRoaXMgZWxlbWVudCBpcyBub3QgZGVmaW5lZCBpbiB0aGUgSFRUUCBuYW1lc3BhY2UgZm9yIHVzZSBhdCB0aGlzIHBvaW50LgotX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9BRERSRVNTICAgICAgICAgICAgICAgID0gQW4gSFRUUCBhZGRyZXNzIGNhbm5vdCBiZSBzcGVjaWZpZWQgaGVyZSBhcyB0aGUgezB9IGJpbmRpbmcgdGhhdCB0aGUgezF9IHBvcnQgcmVmZXJzIHRvIGRvZXMgbm90IGhhdmUgYW4gSFRUUCBiaW5kaW5nIGVsZW1lbnQgZGVmaW5lZC4gVGhlcmUgbXVzdCBiZSBhbiBIVFRQIGJpbmRpbmcgZWxlbWVudCBkZWZpbmVkIGluIG9yZGVyIHRvIHNwZWNpZnkgYW4gSFRUUCBhZGRyZXNzIGZvciBhIGJpbmRpbmcuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX1ZFUkIgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IHZlcmIgZGVmaW5lZCBmb3IgdGhlIEhUVFAgYmluZGluZyBpcyBpbnZhbGlkLiBUaGUgSFRUUCBiaW5kaW5nIHZlcmIgbXVzdCBiZSAiR0VUIiBvciAiUE9TVCIgYW5kIGlzIGNhc2Ugc2Vuc2l0aXZlLgotX0VSUk9SX0lOVkFMSURfTE9DQVRJT05fVVJJICAgICAgICAgICAgICAgICAgICAgID0gVGhlIGxvY2F0aW9uIFVSSSBpcyBpbnZhbGlkIGZvciB0aGUgSFRUUCBvcGVyYXRpb24uIFlvdSBtdXN0IHNwZWNpZnkgYSB2YWxpZCBsb2NhdGlvbiBVUkkgZm9yIGV2ZXJ5IEhUVFAgT3BlcmF0aW9uLgotX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9PUEVSQVRJT04gICAgICAgICAgICAgID0gVGhlIHswfSBiaW5kaW5nIHRoYXQgdGhlIEhUVFAgb3BlcmF0aW9uIGlzIHNwZWNpZmllZCBmb3IgZG9lcyBub3QgaGF2ZSBhbiBIVFRQIGJpbmRpbmcgZGVmaW5lZC4gQW4gSFRUUCBiaW5kaW5nIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBkZWZpbmUgYW4gSFRUUCBvcGVyYXRpb24gaGVyZS4KLV9FUlJPUl9OT19IVFRQT1BFUkFUSU9OX0ZPUl9VUkwgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gb3BlcmF0aW9uIHRoYXQgdGhlIHsxfSBIVFRQIGVsZW1lbnQgaXMgc3BlY2lmaWVkIGZvciBkb2VzIG5vdCBoYXZlIGFuIEhUVFAgb3BlcmF0aW9uIGRlZmluZWQuIEEgSFRUUCBvcGVyYXRpb24gbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGRlZmluZSBhIHsxfSBIVFRQIGVsZW1lbnQgaGVyZS4KLV9FUlJPUl9OT1RfT05MWV9FTEVNRU5UX0RFRklORUQgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gSFRUUCBlbGVtZW50IGRlZmluZWQgaXMgbm90IHRoZSBvbmx5IGVsZW1lbnQgZGVmaW5lZCBmb3IgdGhlIGlucHV0IGVsZW1lbnQuIFdoZW4gezB9IGlzIGRlZmluZWQgaXQgbXVzdCBiZSB0aGUgb25seSBjaGlsZCBlbGVtZW50IGRlZmluZWQgZm9yIHRoZSBpbnB1dCBlbGVtZW50LgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGxtaW1lLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbG1pbWUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMzZTdiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbG1pbWUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGxzb2FwLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbHNvYXAucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmMDNkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbHNvYXAucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTICAgICAgICAgICAgICAgICAgID0gTm8gbG9jYXRpb24gaGFzIGJlZW4gc3BlY2lmaWVkIGZvciB0aGlzIGFkZHJlc3MuIEV2ZXJ5IGFkZHJlc3MgbXVzdCBoYXZlIGEgdmFsaWQgbG9jYXRpb24gc3BlY2lmaWVkLgotX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UICAgICAgICAgICAgICAgICAgICAgID0gVGhlICB7MH0gZWxlbWVudCBkZWZpbmVkIGhlcmUgaXMgdW5kZWZpbmVkIGZvciB0aGUgU09BUCBuYW1lc3BhY2UuIFRoZSBvbmx5IHZhbGlkIGVsZW1lbnQgaXMgImFkZHJlc3MiLgotX0VSUk9SX0lOVkFMSURfQklORElOR19TVFlMRSAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBzdHlsZSBkZWZpbmVkIGZvciB0aGUgU09BUCBiaW5kaW5nIGluIGludmFsaWQuIFRoZSBTT0FQIGJpbmRpbmcgc3R5bGUgbXVzdCBiZSAicnBjIiBvciAiZG9jdW1lbnQiLgotX0VSUk9SX0lOVkFMSURfQklORElOR19VUkkgICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHRyYW5zcG9ydCBVUkkgaGFzIG5vdCBiZWVuIGRlZmluZWQgZm9yIHRoZSBTT0FQIGJpbmRpbmcuIFlvdSBtdXN0IHNwZWNpZnkgYSB0cmFuc3BvcnQgVVJJIGZvciBldmVyeSBTT0FQIGJpbmRpbmcuCi1fRVJST1JfSU5WQUxJRF9PUEVSQVRJT05fU1RZTEUgICAgICAgICAgICAgICAgICAgPSBUaGUgc3R5bGUgc3BlY2lmaWVkIGZvciB0aGUgU09BUCBvcGVyYXRpb24gaXMgaW52YWxpZC4gVGhlIFNPQVAgb3BlcmF0aW9uIHN0eWxlIG11c3QgYmUgInJwYyIgb3IgImRvY3VtZW50Ii4KLV9FUlJPUl9JTlZBTElEX0JJTkRJTkdfRUxFTUVOVCAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gZWxlbWVudCBkZWZpbmVkIGhlcmUgaXMgdW5kZWZpbmVkIGZvciB0aGUgU09BUCBuYW1lc3BhY2UuIFRoZSBvbmx5IHZhbGlkIGVsZW1lbnQgaXMgImJpbmRpbmciLgotX0VSUk9SX0lOVkFMSURfQklORElOR19PUEVSQVRJT05fRUxFTUVOVCAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBTT0FQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAib3BlcmF0aW9uIi4KLV9FUlJPUl9JTlZBTElEX0hFQURFUl9CT0RZX0VMRU1FTlQgICAgICAgICAgICAgICA9IFRoZSB7MH0gZWxlbWVudCBkZWZpbmVkIGhlcmUgaXMgdW5kZWZpbmVkIGZvciB0aGUgU09BUCBuYW1lc3BhY2UuIFRoZSBvbmx5IHZhbGlkIGVsZW1lbnRzIGFyZSAiYm9keSIsICJoZWFkZXIiIGFuZCAiaGVhZGVyZmF1bHQiLgotX0VSUk9SX0lOVkFMSURfRkFVTFRfRUxFTUVOVCAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBTT0FQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAiZmF1bHQiLgotCi0hLS0gQSBTT0FQIGJvZHkgZWxlbWVudCBpbiBhIFdTREwgZG9jdW1lbnQgY2FuIGhhdmUgYW4gYXR0cmlidXRlICJ1c2UiIGRlZmluZWQgdG8gYmUgZWl0aGVyIGxpdGVyYWwgb3IgZW5jb2RlZC4gLS0KLSEtLSBUaGlzIHN0cmluZyBpcyB1c2VkIGluIGFuIGVycm9yIHRhc2sgaW4gV1NBRCBpZiB0aGUgZG9jdW1lbnQgc3BlY2lmaWVzIGEgdXNlIG90aGVyIHRoZW4gbGl0ZXJhbCBvciBlbmNvZGVkLiAtLSAKLSEtLSBGb3IgZXhhbXBsZSwgaWYgdGhlIGRvY3VtZW50IHNwZWNpZmllcyB0aGUgdXNlIG9mIHRoZSBTT0FQIGJvZHkgYXMgInNpbXBsZSIgdGhlIG91dHB1dCBzdHJpbmcgc2hvdWxkIGJlOiAgICAtLQotIS0tIFRoZSAnc2ltcGxlJyB1c2Ugc3BlY2lmaWVkIGZvciB0aGUgU09BUCBib2R5IGlzIGludmFsaWQuIFRoZSB1c2UgbXVzdCBiZSBsaXRlcmFsIG9yIGVuY29kZWQuICAgICAgICAgICAgICAgIC0tCi1fRVJST1JfSU5WQUxJRF9CT0RZX1VTRSAgICAgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IHVzZSBzcGVjaWZpZWQgZm9yIHRoZSBTT0FQIGJvZHkgaXMgaW52YWxpZC4gVGhlIHVzZSBtdXN0IGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4KLV9FUlJPUl9JTlZBTElEX0JPRFlfRU5DT0RJTkdfU1RZTEUgICAgICAgICAgICAgICA9IFRoZXJlIGlzIG5vIGVuY29kaW5nIHN0eWxlIFVSSSBkZWZpbmVkIGZvciB0aGUgU09BUCBib2R5LiBZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBVUkkgZm9yIHRoZSBlbmNvZGluZyBzdHlsZSB3aGVuIHRoZSB1c2UgaXMgZW5jb2RlZC4KLV9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9VTkRFRklORUQgICAgICAgICAgICAgICA9IFRoZSB7MH0gcGFydCBzcGVjaWZpZWQgYXMgYSBwYXJ0IGZvciB0aGUgU09BUCBib2R5IGlzIHVuZGVmaW5lZC4gIFlvdSBjYW4gb25seSBzcGVjaWZ5IGRlZmluZWQgcGFydHMuCi1fRVJST1JfSU5WQUxJRF9CT0RZX1BBUlRfTk9UX1RZUEUgICAgICAgICAgICAgICAgPSBUaGUgezB9IHBhcnQgZG9lcyBub3QgaGF2ZSBhIHR5cGUgZGVmaW5lZCBhbmQgaGFzIGJlZW4gc3BlY2lmaWVkIGZvciBhIFNPQVAgYm9keSB3aXRoIGl0cyB1c2UgZW5jb2RlZC4gV2hlbiB1c2UgaXMgZW5jb2RlZCBvbiBhIFNPQVAgYm9keSwgYWxsIHBhcnRzIGRlZmluZWQgbXVzdCBvbmx5IGNvbnRhaW4gYSB2YWxpZCB0eXBlLgotX0VSUk9SX0lOVkFMSURfU09BUF9FTEVNRU5UX0ZPUl9MT0NBVElPTiAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGNhbm5vdCBiZSBzcGVjaWZpZWQgaGVyZS4gVGhpcyBlbGVtZW50IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBTT0FQIG5hbWVzcGFjZSBmb3IgdXNlIGF0IHRoaXMgcG9pbnQuCi1fRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX0FERFJFU1MgICAgICAgICAgICAgICAgPSBBIFNPQVAgYWRkcmVzcyBjYW5ub3QgYmUgc3BlY2lmaWVkIGhlcmUgYXMgdGhlIHswfSBiaW5kaW5nIHRoYXQgdGhlIHsxfSBwb3J0IHJlZmVycyB0byBkb2VzIG5vdCBoYXZlIGEgU09BUCBiaW5kaW5nIGVsZW1lbnQgZGVmaW5lZC4gVGhlcmUgbXVzdCBiZSBhIFNPQVAgYmluZGluZyBlbGVtZW50IGRlZmluZWQgaW4gb3JkZXIgdG8gc3BlY2lmeSBhIFNPQVAgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLgotX0VSUk9SX0hFQURFUl9NRVNTQUdFX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBtZXNzYWdlIHNwZWNpZmllZCBmb3IgdGhlIFNPQVAgaGVhZGVyIGlzIHVuZGVmaW5lZC4gVGhlIG1lc3NhZ2Ugc3BlY2lmaWVkIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgV1NETCBkb2N1bWVudC4KLV9FUlJPUl9IRUFERVJfUEFSVF9VTkRFRklORUQgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gcGFydCBzcGVjaWZpZWQgaW4gbWVzc2FnZSB7MX0gZm9yIHRoZSBTT0FQIGhlYWRlciBpcyB1bmRlZmluZWQuIEVuc3VyZSB0aGUgcGFydCBpcyBkZWZpbmVkIGluIHRoZSB7MX0gbWVzc2FnZS4KLV9FUlJPUl9IRUFERVJfVVNFX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gdXNlIHNwZWNpZmllZCBmb3IgdGhlIFNPQVAgaGVhZGVyIGlzIGludmFsaWQuIFRoZSB1c2UgbXVzdCBiZSBzcGVjaWZpZWQgYXMgbGl0ZXJhbCBvciBlbmNvZGVkLgotX0VSUk9SX0hFQURFUl9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCAgICAgICAgICAgID0gVGhlIGVuY29kaW5nIHN0eWxlIGZvciB0aGUgU09BUCBoZWFkZXIgaXMgbm90IHNwZWNpZmllZC4gV2hlbiB0aGUgdXNlIGlzIGVuY29kZWQgdGhlIGVuY29kaW5nIHN0eWxlIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgVVJJLgotX0VSUk9SX0hFQURFUl9OQU1FU1BBQ0VfVU5ERUZJTkVEICAgICAgICAgICAgICAgID0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIFNPQVAgaGVhZGVyIGlzIG5vdCBzcGVjaWZpZWQuIFdoZW4gdGhlIHVzZSBpcyBlbmNvZGVkIGEgbmFtZXNwYWNlIFVSSSBtdXN0IGJlIGRlZmluZWQuCi1fRVJST1JfSEVBREVSRkFVTFRfTUVTU0FHRV9VTkRFRklORUQgICAgICAgICAgICAgPSBUaGUgezB9IG1lc3NhZ2Ugc3BlY2lmaWVkIGZvciB0aGUgU09BUCBoZWFkZXIgZmF1bHQgaXMgdW5kZWZpbmVkLiBUaGUgbWVzc2FnZSBzcGVjaWZpZWQgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LgotX0VSUk9SX0hFQURFUkZBVUxUX1BBUlRfVU5ERUZJTkVEICAgICAgICAgICAgICAgID0gVGhlIHswfSBwYXJ0IHNwZWNpZmllZCBpbiBtZXNzYWdlIHsxfSBmb3IgdGhlIFNPQVAgaGVhZGVyIGZhdWx0IGlzIHVuZGVmaW5lZC4gRW5zdXJlIHRoZSBwYXJ0IGlzIGRlZmluZWQgaW4gdGhlIHsxfSBtZXNzYWdlLiAKLV9FUlJPUl9IRUFERVJGQVVMVF9VU0VfVU5ERUZJTkVEICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gdXNlIHNwZWNpZmllZCBmb3IgdGhlIFNPQVAgaGVhZGVyIGZhdWx0IGlzIGludmFsaWQuIFRoZSB1c2UgbXVzdCBiZSBzcGVjaWZpZWQgYXMgbGl0ZXJhbCBvciBlbmNvZGVkLgotX0VSUk9SX0hFQURFUkZBVUxUX0VOQ09ESU5HU1RZTEVfVU5ERUZJTkVEICAgICAgID0gVGhlIGVuY29kaW5nIHN0eWxlIGZvciB0aGUgU09BUCBoZWFkZXIgZmF1bHQgaXMgbm90IHNwZWNpZmllZC4gV2hlbiB0aGUgdXNlIGlzIGVuY29kZWQgdGhlIGVuY29kaW5nIHN0eWxlIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgVVJJLgotX0VSUk9SX0hFQURFUkZBVUxUX05BTUVTUEFDRV9VTkRFRklORUQgICAgICAgICAgID0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIFNPQVAgaGVhZGVyIGZhdWx0IGlzIG5vdCBzcGVjaWZpZWQuIFdoZW4gdGhlIHVzZSBpcyBlbmNvZGVkIGEgbmFtZXNwYWNlIFVSSSBtdXN0IGJlIGRlZmluZWQuCi1fRVJST1JfSU5WQUxJRF9GQVVMVF9OQU1FICAgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IG5hbWUgc3BlY2lmaWVkIGZvciB0aGUgU09BUCBmYXVsdCBpcyBpbnZhbGlkLiBUaGUgbmFtZSBzcGVjaWZpZWQgbXVzdCBiZSB7MX0sIHRoZSBuYW1lIGZyb20gdGhlIGZhdWx0IHBhcmVudCBlbGVtZW50LgotX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9PUEVSQVRJT04gICAgICAgICAgICAgID0gVGhlIHswfSBiaW5kaW5nIHRoYXQgdGhlIFNPQVAgb3BlcmF0aW9uIGlzIHNwZWNpZmllZCBmb3IgZG9lcyBub3QgaGF2ZSBhIFNPQVAgYmluZGluZyBkZWZpbmVkLiBBIFNPQVAgYmluZGluZyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZGVmaW5lIGEgU09BUCBvcGVyYXRpb24gaGVyZS4KLV9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQk9EWSAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gYmluZGluZyB0aGF0IHRoZSBTT0FQIGJvZHkgaXMgc3BlY2lmaWVkIGZvciBkb2VzIG5vdCBoYXZlIGEgU09BUCBiaW5kaW5nIGRlZmluZWQuIEEgU09BUCBiaW5kaW5nIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBkZWZpbmUgYSBTT0FQIGJvZHkgaGVyZS4KLV9FUlJPUl9OT19TT0FQQklORElOR19GT1JfSEVBREVSICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gYmluZGluZyB0aGF0IHRoZSBTT0FQIGhlYWRlciBpcyBzcGVjaWZpZWQgZm9yIGRvZXMgbm90IGhhdmUgYSBTT0FQIGJpbmRpbmcgZGVmaW5lZC4gQSBTT0FQIGJpbmRpbmcgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGRlZmluZSBhIFNPQVAgaGVhZGVyIGhlcmUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGx1aS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGx1aS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjIyMzc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsdWkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSEtLSBBbnQgVUkKLV9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIgICAgICAgICAgICAgICAgICA9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotX1VJX0VSUk9SX01BUktFUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRVJST1IgIAotX1VJX1dBUk5JTkdfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAgID0gV0FSTklORwotX1VJX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gVkFMSUQKLV9VSV9JTlZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IElOVkFMSUQKLV9VSV9BQ1RJT05fVkFMSURBVElOR19GSUxFICAgICAgICAgICAgICAgICA9IFZhbGlkYXRpbmcgezB9Ci0KLV9FUlJPUl9OT19GSUxFX1NQRUNJRklFRCAgICAgICAgICAgICAgICAgICA9IFVuYWJsZSB0byBydW4gV1NETCBWYWxpZGF0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBmaWxlLgotCi1fRVhDX1VOQUJMRV9UT19WQUxJREFURV9GSUxFICAgICAgICAgICAgICAgPSBVbmFibGUgdG8gdmFsaWRhdGUgdGhlIFdTREwgZmlsZSB7MH0uIHsxfQotX0VYQ19XU0RMX0ZBSUxfT05fRVJST1IgICAgICAgICAgICAgICAgICAgID0gVGhlIFdTREwgZmlsZSBpcyBub3QgdmFsaWQuIChGYWlsIE9uIEVycm9yIGlzIGVuYWJsZWQuKQotCi1fRVJST1JfVU5BQkxFX1RPX0xPQURfRVhUX1ZBTElEQVRPUiAgICAgICAgPSBVbmFibGUgdG8gbG9hZCB0aGUgdmFsaWRhdG9yIGZvciBuYW1lc3BhY2UgezB9LiB7MX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZiMDVkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtaHR0cCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1taW1lIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLXNvYXAiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtd3NkbCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvdzNjL2RvbS8qKiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0iamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZSIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNmMjk4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLWJpbgotd3NkbC5qYXIKLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLW9yZy5lY2xpcHNlLndzdC53c2RsXzEuMC4wLmphcgotb3JnLmVjbGlwc2Uud3N0LndzZGwucGF0Y2gKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmM1M2I2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGVlNjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMzEwICswLDAgQEAKLSNNb24gTWFyIDA1IDA4OjU3OjE5IEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWduX3R5cGVfbWVtYmVyc19vbl9jb2x1bW5zPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZW51bV9jb25zdGFudD0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2V4cGxpY2l0X2NvbnN0cnVjdG9yX2NhbGw9NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9tZXRob2RfaW52b2NhdGlvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX3F1YWxpZmllZF9hbGxvY2F0aW9uX2V4cHJlc3Npb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2Fzc2lnbm1lbnQ9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYmluYXJ5X2V4cHJlc3Npb249MjAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbXBhY3RfaWY9MjAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbmRpdGlvbmFsX2V4cHJlc3Npb249MzYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2VudW1fY29uc3RhbnRzPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2V4cHJlc3Npb25zX2luX2FycmF5X2luaXRpYWxpemVyPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tdWx0aXBsZV9maWVsZHM9MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3BhcmFtZXRlcnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3BhcmFtZXRlcnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zZWxlY3Rvcl9pbl9tZXRob2RfaW52b2NhdGlvbj0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmNsYXNzX2luX3R5cGVfZGVjbGFyYXRpb249MzYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fdHlwZV9kZWNsYXJhdGlvbj02OAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj04NAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249ODQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9pbXBvcnRzPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9wYWNrYWdlPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmllbGQ9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maXJzdF9jbGFzc19ib2R5X2RlY2xhcmF0aW9uPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfaW1wb3J0cz0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21lbWJlcl90eXBlPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWV0aG9kPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbmV3X2NodW5rPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfcGFja2FnZT0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl9pbXBvcnRfZ3JvdXBzPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX3R5cGVfZGVjbGFyYXRpb25zPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1uZXh0X2xpbmVfc2hpZnRlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj1lbmRfb2ZfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9jaz1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2tfaW5fY2FzZT1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfY29uc3RydWN0b3JfZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fY29uc3RhbnQ9bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX21ldGhvZF9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3Jfc3dpdGNoPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl90eXBlX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5fYmxvY2tfY29tbWVudD1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5famF2YWRvY19jb21tZW50PWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfYmxvY2tfY29tbWVudHM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9oZWFkZXI9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9odG1sPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfamF2YWRvY19jb21tZW50cz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2xpbmVfY29tbWVudHM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9zb3VyY2VfY29kZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5kZW50X3BhcmFtZXRlcl9kZXNjcmlwdGlvbj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcm9vdF90YWdzPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9iZWZvcmVfcm9vdF90YWdzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2Zvcl9wYXJhbWV0ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5saW5lX2xlbmd0aD04MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbXBhY3RfZWxzZV9pZj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfZ3VhcmRpYW5fY2xhdXNlX29uX29uZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fYW5ub3RhdGlvbl9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fY29uc3RhbnRfaGVhZGVyPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fdHlwZV9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9icmVha3NfY29tcGFyZV90b19jYXNlcz10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2VtcHR5X2xpbmVzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ibG9jaz10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ib2R5PXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX2Nhc2VzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N3aXRjaHN0YXRlbWVudHNfY29tcGFyZV90b19zd2l0Y2g9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudGF0aW9uLnNpemU9NAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYXRfZW5kX29mX2ZpbGVfaWZfbWlzc2luZz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jYXRjaF9pbl90cnlfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9lbHNlX2luX2lmX3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2ZpbmFsbHlfaW5fdHJ5X3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3doaWxlX2luX2RvX3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5ub3RhdGlvbl9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Jsb2NrPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2NvbnN0YW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9tZXRob2RfYm9keT1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYmluYXJ5X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY2FzZT1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Zvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYW5ub3RhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5pdHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2VsbGlwc2lzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fd2lsZGNhcmQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9zZW1pY29sb25faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYmluYXJ5X29wZXJhdG9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fYXNzZXJ0PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY2FzZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2RlZmF1bHQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbml0cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9lbGxpcHNpcz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2NvbnN0YW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9tZXRob2RfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3N3aXRjaD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Zvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5faWY9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3JldHVybj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl90aHJvdz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fd2lsZGNhcmQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbl9pbl9mb3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfdW5hcnlfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2JyYWNrZXRzX2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9icmFjZXNfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNrZXRzX2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbHNlX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2VtcHR5X2FycmF5X2luaXRpYWxpemVyX29uX29uZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9pbXBsZV9pZl9vbl9vbmVfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfdGhlbl9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubGluZVNwbGl0PTE0MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9ibGFua19saW5lc19hdF9iZWdpbm5pbmdfb2ZfbWV0aG9kX2JvZHk9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9lbXB0eV9saW5lc190b19wcmVzZXJ2ZT0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIucHV0X2VtcHR5X3N0YXRlbWVudF9vbl9uZXdfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uY2hhcj1zcGFjZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uc2l6ZT0yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX3RhYnNfb25seV9mb3JfbGVhZGluZ19pbmRlbnRhdGlvbnM9ZmFsc2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU0NmQ3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gTWFyIDA1IDA4OjU3OjIwIEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZm9ybWF0dGVyX3Byb2ZpbGU9X0VNRkNvZGVGb3JtYXR0ZXIucHJvZmlsZQotZm9ybWF0dGVyX3NldHRpbmdzX3ZlcnNpb249MTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjgyY2FkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGw7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4yMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuZ2VuZXJhdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3I7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZXh0ZW5zaWJpbGl0eTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5leHRlbnNpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGo7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNS4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuYXBhY2hlLnhlcmNlcztidW5kbGUtdmVyc2lvbj0iWzIuOC4wLDMuMC4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZDAwZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIG1vZGVsLwotamFycy5jb21waWxlLm9yZGVyID0gLgotc291cmNlLi4gPSBzcmMtaHR0cC8sXAotICAgICAgICAgICAgICAgICAgc3JjLW1pbWUvLFwKLSAgICAgICAgICAgICAgICAgIHNyYy1zb2FwLyxcCi0gICAgICAgICAgICAgICAgICBzcmMtd3NkbC8KLW91dHB1dC4uID0gYmluLwotc3JjLmluY2x1ZGVzID0gY29tcG9uZW50LnhtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9jb21wb25lbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9jb21wb25lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDYxOWM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvY29tcG9uZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y29tcG9uZW50IHhtbG5zPSJodHRwOi8vZWNsaXBzZS5vcmcvd3RwL3JlbGVuZy90b29scy9jb21wb25lbnQtbW9kZWwiCi0JbmFtZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiPgotCTxjb21wb25lbnQtZGVwZW5kcyB1bnJlc3RyaWN0ZWQ9InRydWUiPjwvY29tcG9uZW50LWRlcGVuZHM+Ci0JPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIGZyYWdtZW50PSJmYWxzZSIgLz4KLQk8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIgZnJhZ21lbnQ9ImZhbHNlIiAvPgotCTxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24iIGZyYWdtZW50PSJmYWxzZSIgLz4KLQk8cGx1Z2luIGlkPSJvcmcud3NkbDRqIiBmcmFnbWVudD0iZmFsc2UiIC8+Ci0JPHBhY2thZ2UgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIGFwaT0iZmFsc2UiPgotCQk8dHlwZSBuYW1lPSJCaW5kaW5nIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCi0JCTx0eXBlIG5hbWU9IkJpbmRpbmdGYXVsdCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IkJpbmRpbmdJbnB1dCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IkJpbmRpbmdPcGVyYXRpb24iICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkJCi0JCTx0eXBlIG5hbWU9IkJpbmRpbmdPdXRwdXQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotCQk8dHlwZSBuYW1lPSJEZWZpbml0aW9uIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLSAgICAJPHR5cGUgbmFtZT0iRXh0ZW5zaWJpbGl0eUVsZW1lbnQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotCQk8dHlwZSBuYW1lPSJFeHRlbnNpYmxlRWxlbWVudCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IkZhdWx0IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iSW1wb3J0IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCQkKLQkJPHR5cGUgbmFtZT0iSW5wdXQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkJCQotCQk8dHlwZSBuYW1lPSJNZXNzYWdlIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iTWVzc2FnZVJlZmVyZW5jZSIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+CQkKLQkJPHR5cGUgbmFtZT0iTmFtZXNwYWNlIiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCQotCQk8dHlwZSBuYW1lPSJPcGVyYXRpb24iICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkKLSAgICAJPHR5cGUgbmFtZT0iT3V0cHV0IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCQkKLSAgICAgCTx0eXBlIG5hbWU9IlBhcnQiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkJCQotCQk8dHlwZSBuYW1lPSJQb3J0IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCQotCQk8dHlwZSBuYW1lPSJQb3J0VHlwZSIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IlNlcnZpY2UiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotCQk8dHlwZSBuYW1lPSJUeXBlcyIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+Ci0JCTx0eXBlIG5hbWU9IldTRExFbGVtZW50IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4KLQkJPHR5cGUgbmFtZT0iV1NETEZhY3RvcnkiICBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgkKLTwhLS0JPHR5cGUgbmFtZT0iV1NETFBsdWdpbiIgIGltcGxlbWVudD0iZmFsc2UiIHN1YmNsYXNzPSJmYWxzZSIgaW5zdGFudGlhdGU9ImZhbHNlIi8+LS0+Ci0JCTx0eXBlIG5hbWU9IlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IiAgaW1wbGVtZW50PSJmYWxzZSIgc3ViY2xhc3M9ImZhbHNlIiBpbnN0YW50aWF0ZT0iZmFsc2UiLz4JCi0JPC9wYWNrYWdlPgotCTxwYWNrYWdlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwiIGFwaT0iZmFsc2UiPgotCQk8dHlwZSBuYW1lPSJXU0RMQ29uc3RhbnRzIiBpbXBsZW1lbnQ9ImZhbHNlIiBzdWJjbGFzcz0iZmFsc2UiIGluc3RhbnRpYXRlPSJmYWxzZSIvPgotPCEtLQk8dHlwZSBuYW1lPSJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkiIC8+IC0tPgkJCi08IS0tCTx0eXBlIG5hbWU9IkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5IiAvPi0tPgkKLTwhLS0JPHR5cGUgbmFtZT0iV1NETFJlc291cmNlSW1wbCIgc3ViY2xhc3M9ImZhbHNlIi8+LS0+Ci0JPC9wYWNrYWdlPgotCQotPCEtLSB0aGVzZSBwbHVnaW4ncyB0byBiZSBwcm92aWRlZCB3aXRoIG5vbiBBUEkgZGlzY2xhaW1lcnMgLS0+Ci08IS0tCQotCTxwYWNrYWdlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcCIgYXBpPSJmYWxzZSI+Ci0JCTx0eXBlIG5hbWU9IlNPQVBCb2R5IiAvPgotCQk8dHlwZSBuYW1lPSJTT0FQSGVhZGVyRmF1bHQiIC8+Ci0JCTx0eXBlIG5hbWU9IlNPQVBBZGRyZXNzIiAvPgotCQk8dHlwZSBuYW1lPSJTT0FQRmFjdG9yeSIgLz4KLQkJPHR5cGUgbmFtZT0iU09BUEhlYWRlciIgLz4KLQkJPHR5cGUgbmFtZT0iU09BUEJpbmRpbmciIC8+Ci0JCTx0eXBlIG5hbWU9IlNPQVBIZWFkZXJCYXNlIiAvPgotCQk8dHlwZSBuYW1lPSJTT0FQRmF1bHQiIC8+Ci0JCTx0eXBlIG5hbWU9IlNPQVBPcGVyYXRpb24iIC8+Ci0JPC9wYWNrYWdlPgotCi0JPHBhY2thZ2UgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lIj4KLQkJPHR5cGUgbmFtZT0iTUlNRUNvbnRlbnQiIC8+Ci0JCTx0eXBlIG5hbWU9Ik1JTUVQYWNrYWdlIiAvPgotCQk8dHlwZSBuYW1lPSJNSU1FTXVsdGlwYXJ0UmVsYXRlZCIgLz4KLQkJPHR5cGUgbmFtZT0iTUlNRVBhcnQiIC8+Ci0JCTx0eXBlIG5hbWU9Ik1JTUVNaW1lWG1sIiAvPgotCQk8dHlwZSBuYW1lPSJNSU1FRmFjdG9yeSIgLz4KLQk8L3BhY2thZ2U+Ci0KLQk8cGFja2FnZSBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAiPgotCQk8dHlwZSBuYW1lPSJIVFRQRmFjdG9yeSIgLz4KLQkJPHR5cGUgbmFtZT0iSFRUUE9wZXJhdGlvbiIgLz4KLQkJPHR5cGUgbmFtZT0iSFRUUFVybEVuY29kZWQiIC8+Ci0JCTx0eXBlIG5hbWU9IkhUVFBQYWNrYWdlIiAvPgotCQk8dHlwZSBuYW1lPSJIVFRQQWRkcmVzcyIgLz4KLQkJPHR5cGUgbmFtZT0iSFRUUFVybFJlcGxhY2VtZW50IiAvPgotCQk8dHlwZSBuYW1lPSJIVFRQQmluZGluZyIgLz4KLQk8L3BhY2thZ2U+Ci0tLT4KLTwvY29tcG9uZW50PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9ncmFiamFycy54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2dyYWJqYXJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2ZWRiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2dyYWJqYXJzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxwcm9qZWN0IGRlZmF1bHQ9ImNvcHlKYXJzIiBiYXNlZGlyPSIuIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW5OYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwiLz4KLQk8cHJvcGVydHkgbmFtZT0idmVyc2lvbiIgdmFsdWU9IiIvPgotCi0JPHRhcmdldCBuYW1lPSJjb3B5SmFycyIgaWY9ImRvd25sb2FkUGF0aCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29weUphcnMyIi8+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJjb3B5SmFyczIiIGlmPSJwbHVnaW5zUGF0aCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29weUphcnMzIi8+Ci0JPC90YXJnZXQ+Ci0KLQk8dGFyZ2V0IG5hbWU9ImNvcHlKYXJzMyIgaWY9InBsdWdpbk5hbWUiPgotCQk8Y29weSB0b2Rpcj0iJHtwbHVnaW5zUGF0aH0vJHtwbHVnaW5OYW1lfSR7dmVyc2lvbn0vbGliIiBvdmVyd3JpdGU9InRydWUiPgotCQkJPGZpbGVzZXQgZGlyPSIke2Rvd25sb2FkUGF0aH0vJHtwbHVnaW5OYW1lfSR7dmVyc2lvbn0iPgotCQkJCTxmaWxlbmFtZSBuYW1lPSIqLmphciIvPgotCQkJPC9maWxlc2V0PgotCQk8L2NvcHk+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJjbGVhbnVwSmFycyIgaWY9InBsdWdpbnNQYXRoIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbnVwSmFyczIiLz4KLQk8L3RhcmdldD4KLQotCTx0YXJnZXQgbmFtZT0iY2xlYW51cEphcnMyIiBpZj0icGx1Z2luTmFtZSI+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7cGx1Z2luc1BhdGh9LyR7cGx1Z2luTmFtZX0ke3ZlcnNpb259L2xpYiI+Ci0JCQkJPGZpbGVuYW1lIG5hbWU9IiouamFyIi8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2xpYi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9saWIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5MmYwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL2xpYi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotKi5qYXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvSFRUUC5lY29yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvSFRUUC5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVjNGFiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL0hUVFAuZWNvcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJodHRwIgotICAgIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9IVFRQIiBuc1ByZWZpeD0iaHR0cCI+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSFRUUEJpbmRpbmciIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSUhUVFBCaW5kaW5nIj4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVyYiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJIVFRQT3BlcmF0aW9uIiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lIVFRQT3BlcmF0aW9uIj4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb25VUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSFRUUFVybFJlcGxhY2VtZW50IiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lIVFRQVXJsUmVwbGFjZW1lbnQiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJIVFRQVXJsRW5jb2RlZCIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JSFRUUFVybEVuY29kZWQiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJIVFRQQWRkcmVzcyIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JSFRUUEFkZHJlc3MiPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsb2NhdGlvblVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJSFRUUEFkZHJlc3MiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJSFRUUEJpbmRpbmciIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZyIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJSFRUUE9wZXJhdGlvbiIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24iCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUhUVFBVcmxFbmNvZGVkIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUhUVFBVcmxSZXBsYWNlbWVudCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL0hUVFAuZ2VubW9kZWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL0hUVFAuZ2VubW9kZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMjZmOWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9IVFRQLmdlbm1vZGVsCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCi0gICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAiCi0gICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjIgotICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsIiBtb2RlbE5hbWU9IkhUVFAiIGVkaXRQbHVnaW5DbGFzcz0iIiBlZGl0b3JQbHVnaW5DbGFzcz0iIgotICAgIG5vbk5MU01hcmtlcnM9InRydWUiIGNvZGVGb3JtYXR0aW5nPSJ0cnVlIiBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIucm9zZSIKLSAgICB1c2VkR2VuUGFja2FnZXM9IldTREwuZ2VubW9kZWwjLy93c2RsIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL21vZGVsL1hTRC5nZW5tb2RlbCMvL3hzZCI+Ci0gIDxmb3JlaWduTW9kZWw+SFRUUC5tZGw8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5WQUJBU0VfUExVR0lOU19QQVRIPC9mb3JlaWduTW9kZWw+Ci0gIDxmb3JlaWduTW9kZWw+Li4vLi4vLi48L2ZvcmVpZ25Nb2RlbD4KLSAgPGdlblBhY2thZ2VzIHByZWZpeD0iSFRUUCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmciIGNsYXNzUGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwuaW1wbCIKLSAgICAgIHV0aWxpdHlQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC51dGlsIiBlY29yZVBhY2thZ2U9IkhUVFAuZWNvcmUjLyI+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0hUVFBCaW5kaW5nIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBIVFRQLmVjb3JlIy8vSFRUUEJpbmRpbmcvdmVyYiIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJIVFRQLmVjb3JlIy8vSFRUUE9wZXJhdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgSFRUUC5lY29yZSMvL0hUVFBPcGVyYXRpb24vbG9jYXRpb25VUkkiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0hUVFBVcmxSZXBsYWNlbWVudCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkhUVFAuZWNvcmUjLy9IVFRQVXJsRW5jb2RlZCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkhUVFAuZWNvcmUjLy9IVFRQQWRkcmVzcyI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgSFRUUC5lY29yZSMvL0hUVFBBZGRyZXNzL2xvY2F0aW9uVVJJIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkhUVFAuZWNvcmUjLy9JSFRUUEFkZHJlc3MiLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJIVFRQLmVjb3JlIy8vSUhUVFBCaW5kaW5nIi8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0lIVFRQT3BlcmF0aW9uIi8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iSFRUUC5lY29yZSMvL0lIVFRQVXJsRW5jb2RlZCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IkhUVFAuZWNvcmUjLy9JSFRUUFVybFJlcGxhY2VtZW50Ii8+Ci0gIDwvZ2VuUGFja2FnZXM+Ci08L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9IVFRQLm1kbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvSFRUUC5tZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNjMwZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9IVFRQLm1kbAorKysgL2Rldi9udWxsCkBAIC0xLDU0NzEgKzAsMCBAQAotCi0ob2JqZWN0IFBldGFsCi0gICAgdmVyc2lvbiAgICAJNDIKLSAgICBfd3JpdHRlbiAgIAkiUm9zZSA0LjUuODE2My4zIgotICAgIGNoYXJTZXQgICAgCTApCi0KLShvYmplY3QgRGVzaWduICJMb2dpY2FsIFZpZXciCi0gICAgaXNfdW5pdCAgICAJVFJVRQotICAgIGlzX2xvYWRlZCAgCVRSVUUKLSAgICBkZWZhdWx0cyAgIAkob2JqZWN0IGRlZmF1bHRzCi0JcmlnaHRNYXJnaW4gCTAuMjUwMDAwCi0JbGVmdE1hcmdpbiAJMC4yNTAwMDAKLQl0b3BNYXJnaW4gIAkwLjI1MDAwMAotCWJvdHRvbU1hcmdpbiAJMC41MDAwMDAKLQlwYWdlT3ZlcmxhcCAJMC4yNTAwMDAKLQljbGlwSWNvbkxhYmVscyAJVFJVRQotCWF1dG9SZXNpemUgCVRSVUUKLQlzbmFwVG9HcmlkIAlUUlVFCi0JZ3JpZFggICAgICAJMTYKLQlncmlkWSAgICAgIAkxNgotCWRlZmF1bHRGb250IAkob2JqZWN0IEZvbnQKLQkgICAgc2l6ZSAgICAgICAJMTAKLQkgICAgZmFjZSAgICAgICAJIkFyaWFsIgotCSAgICBib2xkICAgICAgIAlGQUxTRQotCSAgICBpdGFsaWNzICAgIAlGQUxTRQotCSAgICB1bmRlcmxpbmUgIAlGQUxTRQotCSAgICBzdHJpa2UgICAgIAlGQUxTRQotCSAgICBjb2xvciAgICAgIAkwCi0JICAgIGRlZmF1bHRfY29sb3IgCVRSVUUpCi0Jc2hvd01lc3NhZ2VOdW0gCTEKLQlzaG93Q2xhc3NPZk9iamVjdCAJVFJVRQotCW5vdGF0aW9uICAgCSJVbmlmaWVkIikKLSAgICByb290X3VzZWNhc2VfcGFja2FnZSAJKG9iamVjdCBDbGFzc19DYXRlZ29yeSAiVXNlIENhc2UgVmlldyIKLQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMTUxIgotCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JZ2xvYmFsICAgICAJVFJVRQotCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0KQotCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IFVzZUNhc2VEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMThDIgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICByb290X2NhdGVnb3J5IAkob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJMb2dpY2FsIFZpZXciCi0JcXVpZCAgICAgICAJIjNBQkZEOUE3MDE1MCIKLQlleHBvcnRDb250cm9sIAkiUHVibGljIgotCWdsb2JhbCAgICAgCVRSVUUKLQlzdWJzeXN0ZW0gIAkiQ29tcG9uZW50IFZpZXciCi0JcXVpZHUgICAgICAJIjNBQkZEOUE3MDE1MiIKLQlsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJodHRwIgotCQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJImh0dHAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1VSSSIKLQkJCXZhbHVlICAgICAgCSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9IVFRQIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYmFzZVBhY2thZ2UiCi0JCQl2YWx1ZSAgICAgIAkib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJIVFRQIikpCi0JCXF1aWQgICAgICAgCSIzQUJGRDlBRDAxRjgiCi0JCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JCSAgICAob2JqZWN0IENsYXNzICJIVFRQQmluZGluZyIKLQkJCXF1aWQgICAgICAgCSIzQUJGRTU3QzAxMzYiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFNUZGMUQwMDE5IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwOTg0M0YxMDNDMCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjpodHRwOjpJSFRUUEJpbmRpbmciCi0JCQkJcXVpZHUgICAgICAJIjQwOTg0M0E3MDJFQiIpKQotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJ2ZXJiIgotCQkJCXF1aWQgICAgICAgCSIzQUJGRTYwRDAwREIiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSFRUUE9wZXJhdGlvbiIKLQkJCXF1aWQgICAgICAgCSIzQUJGRTZBRTAwNTAiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFNUZGNEIwMzdDIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwOTg0NDQ2MDJDQyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjpodHRwOjpJSFRUUE9wZXJhdGlvbiIKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQzRkYwMkJCIikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImxvY2F0aW9uVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQUJGRTcwRDAxNDciCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSFRUUFVybFJlcGxhY2VtZW50IgotCQkJcXVpZCAgICAgICAJIjNBQkZFQTFBMDE3QyIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUU3MjhCODAyQzMiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDA5ODQ0RDIwMkM1IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQVXJsUmVwbGFjZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjQwOTg0NDk2MDBEOCIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSFRUUFVybEVuY29kZWQiCi0JCQlxdWlkICAgICAgIAkiM0FCRkVBNkQwMjk0IgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTcyOEQ1MDA5NCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0MDk4NDQ5MTAwMDkiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6aHR0cDo6SUhUVFBVcmxFbmNvZGVkIgotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDQ1NzAwNjMiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIkhUVFBBZGRyZXNzIgotCQkJcXVpZCAgICAgICAJIjNBQzNCRjI1MDBGNSIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUU1RkVBOTAxQjciCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDA5ODQwRDgwMEM0IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQQWRkcmVzcyIKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQwODkwMUExIikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImxvY2F0aW9uVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQUMzQkZBNzAxMkUiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSUhUVFBBZGRyZXNzIgotCQkJcXVpZCAgICAgICAJIjQwOTg0MDg5MDFBMSIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIgotCQkJCXF1aWQgICAgICAgCSI0MDk4NDBBNDAxM0EiCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSUhUVFBCaW5kaW5nIgotCQkJcXVpZCAgICAgICAJIjQwOTg0M0E3MDJFQiIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIgotCQkJCXF1aWQgICAgICAgCSI0MDk4NDNDQTAxNzciCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiSUhUVFBPcGVyYXRpb24iCi0JCQlxdWlkICAgICAgIAkiNDA5ODQzRkYwMkJCIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbiIKLQkJCQlxdWlkICAgICAgIAkiNDA5ODQ0MTMwMjA0IgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklIVFRQVXJsRW5jb2RlZCIKLQkJCXF1aWQgICAgICAgCSI0MDk4NDQ1NzAwNjMiCi0JCQlzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCQkJY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCIKLQkJCQlxdWlkICAgICAgIAkiNDA5ODQ0NkQwMjFDIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklIVFRQVXJsUmVwbGFjZW1lbnQiCi0JCQlxdWlkICAgICAgIAkiNDA5ODQ0OTYwMEQ4IgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IgotCQkJCXF1aWQgICAgICAgCSI0MDk4NDRBQzAxQUIiCi0JCQkJc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKSkKLQkJbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiUG9ydCIKLQkJCXF1aWQgICAgICAgCSIzQUMxMUU1MjAxRkIiCi0JCQl0aXRsZSAgICAgIAkiUG9ydCIKLQkJCXpvb20gICAgICAgCTEwMAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUEFkZHJlc3MiIEAxCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg2NzIsIDc4NCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDEKLQkJCQkgICAgbG9jYXRpb24gICAJKDQ3MSwgNzAzKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQwMgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJIVFRQQWRkcmVzcyIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQzNCRjI1MDBGNSIKLQkJCQl3aWR0aCAgICAgIAk0MjAKLQkJCQloZWlnaHQgICAgIAkxODYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQQWRkcmVzcyIgQDIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDY3MiwgMjg4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTM4LCAyMjkpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTA2OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJSFRUUEFkZHJlc3MiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTM4LCAxNzkpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTA2OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQwODkwMUExIgotCQkJCXdpZHRoICAgICAgCTEwODYKLQkJCQloZWlnaHQgICAgIAkyNDIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQwRDgwMEM0IgotCQkJCWNsaWVudCAgICAgCUAxCi0JCQkJc3VwcGxpZXIgICAJQDIKLQkJCQlsaW5lX3N0eWxlIAkwKSkpCi0JCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiRXh0ZW5zaWJpbGl0eSIKLQkJCXF1aWQgICAgICAgCSIzQUU1RkUzQjAzN0IiCi0JCQl0aXRsZSAgICAgIAkiRXh0ZW5zaWJpbGl0eSIKLQkJCXpvb20gICAgICAgCTEwMAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEA0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgyNzIsIDEyOCkKLQkJCQlmb250ICAgICAgIAkob2JqZWN0IEZvbnQKLQkJCQkgICAgaXRhbGljcyAgICAJVFJVRSkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQKLQkJCQkgICAgbG9jYXRpb24gICAJKDcwLCA1MykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MDQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCQkJd2lkdGggICAgICAJNDIyCi0JCQkJaGVpZ2h0ICAgICAJMTc0Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpIVFRQQWRkcmVzcyIgQDUKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMjcyLCA0ODApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMjgsIDQyOCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyODgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUEFkZHJlc3MiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUMzQkYyNTAwRjUiCi0JCQkJd2lkdGggICAgICAJMzA2Ci0JCQkJaGVpZ2h0ICAgICAJMTI4Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpIVFRQQmluZGluZyIgQDYKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNDgwLCA2NDApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA2Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgzNDQsIDU4OCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyNzIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUEJpbmRpbmciKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUJGRTU3QzAxMzYiCi0JCQkJd2lkdGggICAgICAJMjkwCi0JCQkJaGVpZ2h0ICAgICAJMTI4Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VHJlZVZpZXcgIiIgQDcKLQkJCQlsb2NhdGlvbiAgIAkoMjcyLCAzMDUpCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJc3VwcGxpZXIgICAJQDQKLQkJCQl2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkgICAgKDI3MiwgMzA1KQotCQkJCSAgICAoMjcyLCAyMTUpKSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA4Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFNUZFQTkwMUI3IgotCQkJCWNsaWVudCAgICAgCUA1Ci0JCQkJc3VwcGxpZXIgICAJQDQKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgyNzIsIDQxNikKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjcyLCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANykKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA5Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFNUZGMUQwMDE5IgotCQkJCWNsaWVudCAgICAgCUA2Ci0JCQkJc3VwcGxpZXIgICAJQDQKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSg0NzUsIDU3NikKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoNDc1LCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANykKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBPcGVyYXRpb24iIEAxMAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg2NzIsIDgxNikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDEwCi0JCQkJICAgIGxvY2F0aW9uICAgCSg1MTgsIDc2NCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMDgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUE9wZXJhdGlvbiIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFNkFFMDA1MCIKLQkJCQl3aWR0aCAgICAgIAkzMjYKLQkJCQloZWlnaHQgICAgIAkxMjgKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAxMQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTVGRjRCMDM3QyIKLQkJCQljbGllbnQgICAgIAlAMTAKLQkJCQlzdXBwbGllciAgIAlANAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDY1NiwgNzUyKQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSg2NTYsIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA3KQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUFVybFJlcGxhY2VtZW50IiBAMTIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoODE2LCA5OTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjA1LCA5NDEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDIyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkhUVFBVcmxSZXBsYWNlbWVudCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFQTFBMDE3QyIKLQkJCQl3aWR0aCAgICAgIAk0NDAKLQkJCQloZWlnaHQgICAgIAkxMjYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAxMwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTcyOEI4MDJDMyIKLQkJCQljbGllbnQgICAgIAlAMTIKLQkJCQlzdXBwbGllciAgIAlANAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDg2OSwgOTI5KQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4NjksIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA3KQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SFRUUFVybEVuY29kZWQiIEAxNAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxMDcyLCAxMTY4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTQKLQkJCQkgICAgbG9jYXRpb24gICAJKDkwMCwgMTExNykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzNDQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUFVybEVuY29kZWQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUJGRUE2RDAyOTQiCi0JCQkJd2lkdGggICAgICAJMzYyCi0JCQkJaGVpZ2h0ICAgICAJMTI2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMTUKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUU3MjhENTAwOTQiCi0JCQkJY2xpZW50ICAgICAJQDE0Ci0JCQkJc3VwcGxpZXIgICAJQDQKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgxMTAzLCAxMTA1KQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTAzLCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANykpKQotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIkJpbmRpbmciCi0JCQlxdWlkICAgICAgIAkiM0FFNzJBNzAwMEE5IgotCQkJdGl0bGUgICAgICAJIkJpbmRpbmciCi0JCQl6b29tICAgICAgIAkxMDAKLQkJCW1heF9oZWlnaHQgCTI4MzUwCi0JCQltYXhfd2lkdGggIAkyMTYwMAotCQkJb3JpZ2luX3ggICAJMAotCQkJb3JpZ2luX3kgICAJMAotCQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBCaW5kaW5nIiBAMTYKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDU3NiwgNTkyKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTYKLQkJCQkgICAgbG9jYXRpb24gICAJKDQ0MCwgNTQwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI3MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJIVFRQQmluZGluZyIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFNTdDMDEzNiIKLQkJCQl3aWR0aCAgICAgIAkyOTAKLQkJCQloZWlnaHQgICAgIAkxMjgKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBPcGVyYXRpb24iIEAxNwotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTY5NiwgNjA4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTcKLQkJCQkgICAgbG9jYXRpb24gICAJKDE0OTUsIDUyNykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MDIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSFRUUE9wZXJhdGlvbiIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFNkFFMDA1MCIKLQkJCQl3aWR0aCAgICAgIAk0MjAKLQkJCQloZWlnaHQgICAgIAkxODYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBVcmxSZXBsYWNlbWVudCIgQDE4Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNjE2LCAxODA4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTgKLQkJCQkgICAgbG9jYXRpb24gICAJKDE0MDUsIDE3NTcpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDIyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkhUVFBVcmxSZXBsYWNlbWVudCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQkZFQTFBMDE3QyIKLQkJCQl3aWR0aCAgICAgIAk0NDAKLQkJCQloZWlnaHQgICAgIAkxMjYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OkhUVFBVcmxFbmNvZGVkIiBAMTkKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDYwOCwgMTUyMCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDE5Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg0MzYsIDE0NjkpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzQ0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkhUVFBVcmxFbmNvZGVkIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FCRkVBNkQwMjk0IgotCQkJCXdpZHRoICAgICAgCTM2MgotCQkJCWhlaWdodCAgICAgCTEyNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SUhUVFBCaW5kaW5nIiBAMjAKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDU3NiwgMTYwKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjAKLQkJCQkgICAgbG9jYXRpb24gICAJKDUwLCAxMDEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTA1MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJSFRUUEJpbmRpbmciKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjAKLQkJCQkgICAgbG9jYXRpb24gICAJKDUwLCA1MSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMDUyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDNBNzAyRUIiCi0JCQkJd2lkdGggICAgICAJMTA3MAotCQkJCWhlaWdodCAgICAgCTI0MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDIxCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQzRjEwM0MwIgotCQkJCWNsaWVudCAgICAgCUAxNgotCQkJCXN1cHBsaWVyICAgCUAyMAotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjpodHRwOjpJSFRUUE9wZXJhdGlvbiIgQDIyCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNjk2LCAxNjApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTE1MCwgMTAxKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEwOTIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSUhUVFBPcGVyYXRpb24iKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjIKLQkJCQkgICAgbG9jYXRpb24gICAJKDExNTAsIDUxKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEwOTIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQwOTg0M0ZGMDJCQiIKLQkJCQl3aWR0aCAgICAgIAkxMTEwCi0JCQkJaGVpZ2h0ICAgICAJMjQyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjMKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDQ0NjAyQ0MiCi0JCQkJY2xpZW50ICAgICAJQDE3Ci0JCQkJc3VwcGxpZXIgICAJQDIyCi0JCQkJbGluZV9zdHlsZSAJMCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Omh0dHA6OklIVFRQVXJsRW5jb2RlZCIgQDI0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg2MDgsIDExMDQpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNDQsIDEwNDUpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTEyOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJSFRUUFVybEVuY29kZWQiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjQKLQkJCQkgICAgbG9jYXRpb24gICAJKDQ0LCA5OTUpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTEyOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQ0NTcwMDYzIgotCQkJCXdpZHRoICAgICAgCTExNDYKLQkJCQloZWlnaHQgICAgIAkyNDIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQwOTg0NDkxMDAwOSIKLQkJCQljbGllbnQgICAgIAlAMTkKLQkJCQlzdXBwbGllciAgIAlAMjQKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6aHR0cDo6SUhUVFBVcmxSZXBsYWNlbWVudCIgQDI2Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNTg0LCAxMzc2KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjYKLQkJCQkgICAgbG9jYXRpb24gICAJKDk4MSwgMTMxNykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMjA2Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklIVFRQVXJsUmVwbGFjZW1lbnQiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjYKLQkJCQkgICAgbG9jYXRpb24gICAJKDk4MSwgMTI2NykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMjA2Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0MDk4NDQ5NjAwRDgiCi0JCQkJd2lkdGggICAgICAJMTIyNAotCQkJCWhlaWdodCAgICAgCTI0MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDA5ODQ0RDIwMkM1IgotCQkJCWNsaWVudCAgICAgCUAxOAotCQkJCXN1cHBsaWVyICAgCUAyNgotCQkJCWxpbmVfc3R5bGUgCTApKSkpKQotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ3c2RsIgotCQlpc191bml0ICAgIAlUUlVFCi0JCWlzX2xvYWRlZCAgCUZBTFNFCi0JCWZpbGVfbmFtZSAgCSIkVkFCQVNFX1BMVUdJTlNfUEFUSFxcb3JnLmVjbGlwc2Uud3N0LndzZGxcXG1vZGVsXFxvcmcuZWNsaXBzZS53c3QuV1NETC5jYXQiCi0JCXF1aWQgICAgICAgCSIzQURGQjhFNTAyMUUiKQotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJ4c2QiCi0JCWlzX3VuaXQgICAgCVRSVUUKLQkJaXNfbG9hZGVkICAJRkFMU0UKLQkJZmlsZV9uYW1lICAJIiRWQUJBU0VfUExVR0lOU19QQVRIXFxvcmcuZWNsaXBzZS54c2RcXG1vZGVsXFxvcmcuZWNsaXBzZS5YU0QuY2F0IgotCQlxdWlkICAgICAgIAkiMzlBQkRDNkYwMUFBIikpCi0JbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgQ2xhc3NEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMTYzIgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkgICAgKG9iamVjdCBDYXRlZ29yeVZpZXcgIkxvZ2ljYWwgVmlldzo6aHR0cCIgQDI4Ci0JCQlsb2NhdGlvbiAgIAkoMzM2LCAyMjQpCi0JCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJICAgIFBhcmVudF9WaWV3IAlAMjgKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTkyLCAxNDApCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJodHRwIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzQUJGRDlBRDAxRjgiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6OndzZGwiIEAyOQotCQkJbG9jYXRpb24gICAJKDc4NCwgMjI0KQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDI5Ci0JCQkgICAgbG9jYXRpb24gICAJKDY0MCwgMTQwKQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkid3NkbCIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiM0FERkI4RTUwMjFFIgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApCi0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojp4c2QiIEAzMAotCQkJbG9jYXRpb24gICAJKDEyMzIsIDIyNCkKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzMAotCQkJICAgIGxvY2F0aW9uICAgCSgxMDg4LCAxNDApCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJ4c2QiKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJcXVpZHUgICAgICAJIjM5QUJEQzZGMDFBQSIKLQkJCXdpZHRoICAgICAgCTMwMAotCQkJaGVpZ2h0ICAgICAJMTgwKSkpKSkKLSAgICByb290X3N1YnN5c3RlbSAJKG9iamVjdCBTdWJTeXN0ZW0gIkNvbXBvbmVudCBWaWV3IgotCXF1aWQgICAgICAgCSIzQUJGRDlBNzAxNTIiCi0JcGh5c2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0KQotCXBoeXNpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBNb2R1bGVfRGlhZ3JhbSAiTWFpbiIKLQkJcXVpZCAgICAgICAJIjNBQkZEOUE3MDE4QiIKLQkJdGl0bGUgICAgICAJIk1haW4iCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QpKSkpCi0gICAgcHJvY2Vzc19zdHJ1Y3R1cmUgCShvYmplY3QgUHJvY2Vzc2VzCi0JcXVpZCAgICAgICAJIjNBQkZEOUE3MDE1MyIKLQlQcm9jc05EZXZzIAkobGlzdAotCSAgICAob2JqZWN0IFByb2Nlc3NfRGlhZ3JhbSAiRGVwbG95bWVudCBWaWV3IgotCQlxdWlkICAgICAgIAkiM0FCRkQ5QTcwMTU1IgotCQl0aXRsZSAgICAgIAkiRGVwbG95bWVudCBWaWV3IgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHByb3BlcnRpZXMgCShvYmplY3QgUHJvcGVydGllcwotCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGF0YUJhc2UiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFCYXNlU2V0IiA4MDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRGF0YUJhc2VTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJBTlNJIgotCQkJCXZhbHVlICAgICAgCTgwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIk9yYWNsZSIKLQkJCQl2YWx1ZSAgICAgIAk4MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJTUUxTZXJ2ZXIiCi0JCQkJdmFsdWUgICAgICAJODAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiU3liYXNlIgotCQkJCXZhbHVlICAgICAgCTgwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIldhdGNvbSIKLQkJCQl2YWx1ZSAgICAgIAk4MDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5OYW1lIgotCQkJdmFsdWUgICAgICAJIklkIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIk5VTUJFUig1KSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZSIKLQkJCXZhbHVlICAgICAgCSJWXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJUYWJsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiVF8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiSW5oZXJpdFN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSJfViIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJEcm9wQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJCYXNlVmlld3MiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRETFNjcmlwdEZpbGVuYW1lIgotCQkJdmFsdWUgICAgICAJIkRETDEuU1FMIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIlZBUkNIQVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJOdWxsc09LIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIlVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ29tcG9zaXRlVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRERMIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJmcmFtZXdvcmsiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJlc2VydmVSZWdpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExFbGVtZW50IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklETFNwZWNpZmljYXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJJRExTcGVjU2V0IiAyMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExTcGVjU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCXZhbHVlICAgICAgCTIyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiVHlwZWRlZiIKLQkJCQl2YWx1ZSAgICAgIAk1NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkVudW1lcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAk3MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkV4Y2VwdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk2MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlN0cnVjdCIKLQkJCQl2YWx1ZSAgICAgIAk1MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlVuaW9uIgotCQkJCXZhbHVlICAgICAgCTgxKSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLmJpbmRpbmcuaHR0cC9zcmMvcm9zZS9odHRwYmluZGluZ01kbC5tZGwsIGN0YywgaWJtY3RjIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSURMTW9kdWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLmh0dHAvc3JjL3Jvc2UvaHR0cGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIlJhaXNlcyIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJIYXNSZWxUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBc3NvY1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1VzZXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlUHJlZml4ZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbnN0YW5jZVZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJIm1fIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbGFzc1ZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJInNfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0QXR0cmlidXRlRGF0YVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiaW50IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0T3BlcmF0aW9uUmV0dXJuVHlwZSIKLQkJCXZhbHVlICAgICAgCSJ2b2lkIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSb290RGlyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQXV0b1N5bmMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTaG93Q29kZWdlbkRsZyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0QXV0aG9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY0RlZmF1bHRWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY0RlZmF1bHRTaW5jZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NOdW1Bc3Rlcmlza3MiCi0JCQl2YWx1ZSAgICAgIAkwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1heE51bUNoYXJzIgotCQkJdmFsdWUgICAgICAJODApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yIgotCQkJdmFsdWUgICAgICAJKCJFZGl0b3JUeXBlIiAxMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZNIgotCQkJdmFsdWUgICAgICAJKCJWTVR5cGUiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ2xhc3NQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCdWlsdEluIgotCQkJCXZhbHVlICAgICAgCTEwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJXaW5kb3dzU2hlbGwiCi0JCQkJdmFsdWUgICAgICAJMTAxKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVk1UeXBlIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN1biIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiTWljcm9zb2Z0IgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJJQk0iCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTm9DbGFzc0N1c3RvbURsZyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdsb2JhbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiT3BlbkJyYWNlQ2xhc3NTdHlsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiT3BlbkJyYWNlTWV0aG9kU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlVzZVRhYnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJVc2VTcGFjZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNwYWNpbmdJdGVtcyIKLQkJCXZhbHVlICAgICAgCTMpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUm9zZURlZmF1bHRDb21tZW50U3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFzdGVyaXNrQ29tbWVudFN0eWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YUNvbW1lbnRTdHlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NBdXRob3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jU2luY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jVmVyc2lvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvcklzIgotCQkJdmFsdWUgICAgICAJKCJDdG9yX1NldCIgNjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkN0b3JfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk2MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNjMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk2NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmluYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdGF0aWNJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zdGFuY2VJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29kZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzYWJsZUF1dG9TeW5jIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGV4dFJlZiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzU2luZ2xlVGhyZWFkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldElzU2VjdXJlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJJbmNsdWRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckZvcndhcmQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0U2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRnZXRJbmZvIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdEF0dHJpYnV0ZXNOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RBdHRyaWJ1dGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yUmVxdWVzdFBhcmFtZXRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SGVhZGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9ySGVhZGVycyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbnRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0RGF0ZUhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb29raWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JDb29raWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGVudFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUhUTUwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZV9YTUxfREQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNtcEZpZWxkIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCRW52aXJvbm1lbnRQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ254RmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZmVyZW5jZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCTmFtZUluSkFSIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlNlc3Npb25UeXBlX1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWxlc3MiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlZnVsIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIgMjExKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiIDIyMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjIwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMjIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWVudHJhbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCTVBfRXh0ZW5kX0NNUCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW1wb3J0cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJOYXRpdmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTeW5jaHJvbml6ZWQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJUcmFuc2llbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlByb3BlcnR5VHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQmVhblByb3BlcnR5X1NldCIgNzEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkJlYW5Qcm9wZXJ0eV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiTm90IEEgUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTcyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJvdW5kIgotCQkJCXZhbHVlICAgICAgCTczKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0cmFpbmVkIgotCQkJCXZhbHVlICAgICAgCTc0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5kaXZpZHVhbENoYW5nZU1ndCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGUiCi0JCQl2YWx1ZSAgICAgIAkoIlJlYWQvV3JpdGVfU2V0IiA4MSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUmVhZC9Xcml0ZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUmVhZCAmIFdyaXRlIgotCQkJCXZhbHVlICAgICAgCTgxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJXcml0ZSBPbmx5IgotCQkJCXZhbHVlICAgICAgCTgzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGdWxseVF1YWxpZmllZFR5cGVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkJlYW5Qcm9wZXJ0eV9TZXQiIDcxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCZWFuUHJvcGVydHlfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk5vdCBBIFByb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTcxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAk3MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCb3VuZCIKLQkJCQl2YWx1ZSAgICAgIAk3MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJhaW5lZCIKLQkJCQl2YWx1ZSAgICAgIAk3NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluZGl2aWR1YWxDaGFuZ2VNZ3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlIgotCQkJdmFsdWUgICAgICAJKCJSZWFkL1dyaXRlX1NldCIgODEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgJiBXcml0ZSIKLQkJCQl2YWx1ZSAgICAgIAk4MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV3JpdGUgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRnVsbHlRdWFsaWZpZWRUeXBlcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzTmF2aWdhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSIzNjAwMDAwMDIiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5OYW1lIgotCQkJdmFsdWUgICAgICAJIl9JRCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiTlVNQkVSKDUsMCkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjaGVtYU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2hlbWFOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHlwZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUeXBlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWYXJyYXlOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmFycmF5TmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk5lc3RlZFRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk5lc3RlZFRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9iamVjdFRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9iamVjdFRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1NjaGVtYSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJXaGVyZUNsYXVzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVQcmVjaXNpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZVNjYWxlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbk9mUkVGUyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kS2luZCIKLQkJCXZhbHVlICAgICAgCSgiTWV0aG9kS2luZFNldCIgMTkwMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3ZlcmxvYWRJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkTm9EYXRhU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWROb1Byb2Nlc3NTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzV3JpdGVOb0RhdGFTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzV3JpdGVOb1Byb2Nlc3NTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzU2VsZmlzaCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyVHlwZVNldCIgMTgwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckV2ZW50IgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyRXZlbnRTZXQiIDE2MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclJlZmVyZW5jaW5nTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRm9yRWFjaCIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlckZvckVhY2hTZXQiIDE3MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJXaGVuQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJNYXBNZXRob2QiCi0JCQkJdmFsdWUgICAgICAJMTkwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJPcmRlck1ldGhvZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkZ1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTE5MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiUHJvY2VkdXJlIgotCQkJCXZhbHVlICAgICAgCTE5MDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiT3BlcmF0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA2KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyIgotCQkJCXZhbHVlICAgICAgCTE5MDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQ2FsY3VsYXRlZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTA5KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQUZURVIiCi0JCQkJdmFsdWUgICAgICAJMTgwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJCRUZPUkUiCi0JCQkJdmFsdWUgICAgICAJMTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNURUFEIE9GIgotCQkJCXZhbHVlICAgICAgCTE4MDMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRm9yRWFjaFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJST1ciCi0JCQkJdmFsdWUgICAgICAJMTcwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJTVEFURU1FTlQiCi0JCQkJdmFsdWUgICAgICAJMTcwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJFdmVudFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQiCi0JCQkJdmFsdWUgICAgICAJMTYwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJVUERBVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgVVBEQVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlVQREFURSBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgVVBEQVRFIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOdWxsc0FsbG93ZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByZWNpc2lvbiIKLQkJCXZhbHVlICAgICAgCSIyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2FsZSIKLQkJCXZhbHVlICAgICAgCSI2IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc0luZGV4IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29tcG9zaXRlVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVXNlTVNWQyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImgiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlQmFja3VwRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImh+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZVRlbXBvcmFyeUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJoIyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlQmFja3VwRXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwfiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVGaWxlVGVtcG9yYXJ5RXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImNwIyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVycm9yTGltaXQiCi0JCQl2YWx1ZSAgICAgIAkzMCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIiRST1NFQ1BQX1NPVVJDRSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlBhdGhTZXBhcmF0b3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWVGb3JtYXQiCi0JCQl2YWx1ZSAgICAgIAkiMTI4dnhfYiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvb2xlYW5UeXBlIgotCQkJdmFsdWUgICAgICAJImludCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93VGVtcGxhdGVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHBsaWNpdEluc3RhbnRpYXRpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dQcm90ZWN0ZWRJbmhlcml0YW5jZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbW1lbnRXaWR0aCIKLQkJCXZhbHVlICAgICAgCTYwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPbmVCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9uZUJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3B0aW9uYWxCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIk9wdGlvbmFsQnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3B0aW9uYWxCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpeGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3NbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEZpeGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3NbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpeGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICpbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEZpeGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICpbJGxpbWl0XSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRMaXN0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRTZXRCeVZhbHVlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRMaXN0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRCb3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZFNldEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5ib3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRMaXN0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkVW5ib3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRTZXRCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbmJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRMaXN0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFVuYm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZFNldEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkFzc29jaWF0aW9uQnlWYWx1ZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRRdWFsaWZpZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkRpY3Rpb25hcnlCeVZhbHVlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkFzc29jaWF0aW9uQnlSZWZlcmVuY2U8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkUXVhbGlmaWVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiRGljdGlvbmFyeUJ5UmVmZXJlbmNlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJlc2VydmVSZWdpb25zIgotCQkJdmFsdWUgICAgICAJVFJVRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2xhc3NLZXkiCi0JCQl2YWx1ZSAgICAgIAkiY2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlB1dEJvZGllc0luU3BlYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRDb25zdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4cGxpY2l0RGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weUNvbnN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhwbGljaXRDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZXN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvcktpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVzdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc2lnbm1lbnRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NpZ25tZW50VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NpZ25tZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NpZ25tZW50T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXF1YWxpdHlPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXF1YWxpdHlWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVxdWFsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCSgiRnJpZW5kS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRXF1YWxpdHlPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUmVsYXRpb25hbE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmVsYXRpb25hbFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmVsYXRpb25hbEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZyaWVuZEtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVJlbGF0aW9uYWxPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RvcmFnZU1nbXRPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0b3JhZ2VNZ210VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdG9yYWdlTWdtdE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdWJzY3JpcHRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdFJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3Vic2NyaXB0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVyZWZlcmVuY2VPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZVJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lRGVyZWZlcmVuY2VPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmRpcmVjdGlvbk9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvblZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25LaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uUmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVJbmRpcmVjdGlvbk9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0cmVhbU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RyZWFtVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdHJlYW1PcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlRocmVlS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZyaWVuZEtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRlY2xhcmVBbmREZWZpbmUiCi0JCQkJdmFsdWUgICAgICAJMTk5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEZWNsYXJlT25seSIKLQkJCQl2YWx1ZSAgICAgIAkyMDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRvTm90RGVjbGFyZSIKLQkJCQl2YWx1ZSAgICAgIAkyMDYpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLmh0dHAvc3JjL3Jvc2UvaHR0cGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4dGVuc2lvbmxlc3NGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlRm9ybWF0IgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgCi18Ly8gJHBhY2thZ2UKLXwjaW5jbHVkZSAiJGZpbGUiCi18Ci0JCQkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLmh0dHAvc3JjL3Jvc2UvaHR0cGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4dGVuc2lvbmxlc3NGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlRm9ybWF0IgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgCi18Ly8gJHBhY2thZ2UKLXwjaW5jbHVkZSAiJGZpbGUiCi18Ci0JCQkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVPcmRlciIKLQkJCXZhbHVlICAgICAgCSJBTUlSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmluZ1N0eWxlIgotCQkJdmFsdWUgICAgICAJKCJJbmxpbmluZ1N0eWxlU2V0IiAyMDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmluZ1N0eWxlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbkNsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGb2xsb3dpbmdDbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwNykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJUeXBlc0RlZmluZWQiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVDbG9zdXJlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25LaW5kIgotCQkJdmFsdWUgICAgICAJKCJPcGVyYXRpb25LaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25LaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNFeHBsaWNpdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRW50cnlDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeGl0Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb2R5QW5ub3RhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGV4dCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJSYWlzZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3JkZXJlZCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckNsYXNzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNlbGVjdG9yTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZWxlY3RvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRm9yd2FyZFJlZmVyZW5jZU9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEhhc1JlbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkhhc1JlbFR5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGFzUmVsVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXNzb2NpYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kdGFyZ2V0Q2xhc3MiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0luaGVyaXQiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5zdGFuY2VBcmd1bWVudHMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHRhcmdldENsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJHZXQiCi0JCQl2YWx1ZSAgICAgIAkiJGRhdGEuZ2V0KCRrZXlzKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lclNldCIKLQkJCXZhbHVlICAgICAgCSIkZGF0YS5zZXQoJGtleXMsJHZhbHVlKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZENvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiRzdXBwbGllciAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0luaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3RTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCSgiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2VTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRTZXRCeVJlZmVyZW5jZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0dldFNldEJ5UmVmZXJlbmNlIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVRdWFsaWZpZWRHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVRdWFsaWZpZWRHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVF1YWxpZmllZFNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZFNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUXVhbGlmaWVkU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NvY0NsYXNzRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdFJlbGF0aW9uc2hpcFZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjEwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlcklzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NvY0NsYXNzR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzb2NDbGFzc0dldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc1NldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc1NldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVBc3NvY0NsYXNzU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0ZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZFJvbGVUeXBlIgotCQkJdmFsdWUgICAgICAJKCJBc3NvY1R5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIgMTQpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTQ1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNDQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uIgotCQkJCXZhbHVlICAgICAgCTE0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBdEF0dHJpYnV0ZVZpc2liaWxpdHkiCi0JCQkJdmFsdWUgICAgICAJMjExKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnJlc3RyaWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTXV0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb25zdCIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJGaWVsZFNpemUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3RTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEJ5UmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUdldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldFJldHVybnNWYWx1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvZHlSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1N1YnN5c3RlbSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeUlzT25TZWFyY2hMaXN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlByZWNvbXBpbGVkSGVhZGVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2F0ZWdvcnkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSXNOYW1lc3BhY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kZW50IgotCQkJdmFsdWUgICAgICAJMikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlZlcnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiNS4wIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ0NsYXNzVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0NsYXNzVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJJbnRlcmZhY2VfUGFydCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkNvbm5lY3Rpb25fUGFydCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkNsYXNzX0ZhY3RvcnkiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPYmplY3RGdW5jdGlvbmFsaXR5IgotCQkJdmFsdWUgICAgICAJKCJDT2JqZWN0RnVuY3Rpb25hbGl0eVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ09iamVjdEZ1bmN0aW9uYWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkR5bmFtaWMiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEeW5jcmVhdGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTZXJpYWwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlT3ZlcnJpZGVHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YUdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RBVEFfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpZWxkR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRklFTERfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1lc3NhZ2VHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTWVzc2FnZU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9NU0dfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUVTU0FHRV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVGYWN0b3J5IgotCQkJdmFsdWUgICAgICAJKCJPTEVGYWN0b3J5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVGYWN0b3J5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJCdWlsdF9pbiIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkxpY2Vuc2VkIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ2xhc3NJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlT0xFQ3RsVHlwZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUN0bFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU9MRVR5cGVMaWIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliTWFqb3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVUeXBlTGliTWlub3IiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByb3BQYWdlSURzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFUHJvcFBhZ2VJRHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEaXNwYXRjaE1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnRpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tGdW5jdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hEZWZWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGlzcElkRW51bSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQX0lEX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnRlcmZhY2VNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJJTlRFUkZBQ0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSW5pdEludGVyZmFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXZlbnRNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFdmVudFNpbmtNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRTSU5LX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiUHJvcE5vdGlmeVNpbmtzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQ29ubmVjdGlvbk1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTk5FQ1RJT05fTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ29ubmVjdGlvblBvaW50SUlEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSW5oZXJpdGFuY2VUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDb21tYW5kcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRkNEZWNsYXJlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRkNJbXBsZW1lbnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFUTF9EZWNsYXJlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNPTU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvbm5lY3Rpb25Qb2ludE1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPTk5FQ1RJT05fUE9JTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNc2dNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU0dfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcm9wZXJ0eU1hcCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBST1BFUlRZX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiTVNWQ09wZXJhdGlvblR5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNPcGVyYXRpb25UeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vcm1hbCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWxfT3ZlcnJpZGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZXNzYWdlX0hhbmRsZXIiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaF9IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRXZlbnRfRmlyaW5nX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRXZlbnRfU2lua19IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RkX09MRV9NZXRob2QiCi0JCQkJdmFsdWUgICAgICAJNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDb21tYW5kX1BhcnNlciIKLQkJCQl2YWx1ZSAgICAgIAk3KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X0dldF9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X1NldF9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlByb3BlcnR5X05vdGlmeV9GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNYWNyb19HZW5lcmF0ZWRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTEpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1FU1NBR0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0RJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRJU1BBVENIX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDYWxsVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQm9keUltYWdlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNBdHRyaWJ1dGVUeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDQXR0cmlidXRlVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJNZW1iZXJfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJHZXRfU2V0X1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlhbG9nX0RhdGEiCi0JCQkJdmFsdWUgICAgICAJMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJGaWVsZF9EYXRhIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU3RvY2tfUHJvcGVydHkiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlBvaW50ZXJCYXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJTdG9ja1Byb3BlcnR5SW1wbGVtZW50YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmNsdWRlc0dyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0lOQ0xVREVTX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnNlcnRMb2NhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJNU1ZDIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluY2x1ZGVzR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfSU5DTFVERVNfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc2VydExvY2F0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJTQ0MiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlR5cGVMaWJJbXBvcnRlciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjc4MzYwNjM3OCIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRhYmxlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyMjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWNOb3RDcmVhdGFibGUiCi0JCQkJdmFsdWUgICAgICAJMjEzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiU2luZ2xlVXNlIgotCQkJCXZhbHVlICAgICAgCTIxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIkdsb2JhbFNpbmdsZVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJNdWx0aVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTkpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJHbG9iYWxNdWx0aVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMjApKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbkJhc2UiCi0JCQl2YWx1ZSAgICAgIAkiMCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25FeHBsaWNpdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25Db21wYXJlIgotCQkJdmFsdWUgICAgICAJKCJDb21wYXJlU2V0IiAyMDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRhYmxlIgotCQkJdmFsdWUgICAgICAJKCJDcmVhdGFibGVTZXQiIDIyMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluaXRpYWxpemF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVRlcm1pbmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiQ29sbGVjdGlvbiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJDb21wYXJlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJCaW5hcnkiCi0JCQkJdmFsdWUgICAgICAJMjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiVGV4dCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25OYW1lIgotCQkJdmFsdWUgICAgICAJIiRvcGVyYXRpb24iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTGlicmFyeU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkFsaWFzTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSXNTdGF0aWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkVudHJ5Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkV4aXRDb2RlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5ldyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiV2l0aEV2ZW50cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVMZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmV3IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJXaXRoRXZlbnRzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGUkc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUxldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Jbmhlcml0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRzRGVsZWdhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJQcm9qZWN0RmlsZSIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbFN0dWRpbyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJFZGl0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkVkaXRvclR5cGUiIDEwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRJbiIKLQkJCQl2YWx1ZSAgICAgIAkxMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIldpbmRvd3NTaGVsbCIKLQkJCQl2YWx1ZSAgICAgIAkxMDEpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBcnJheURpbWVuc2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgJVElICVaJSAlVyUiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAlUSUgJVolICVXJSIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkluY2x1c2lvblByb3RlY3Rpb25TeW1ib2wiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fT3BlcmF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJPcmRlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQm91bmRlZFJvbGVUeXBlIgotCQkJdmFsdWUgICAgICAJKCJBc3NvY1R5cGVTZXQiIDQ3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkRlZmF1bHRfU2VydmxldF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0TmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb250ZXh0UmVmIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSXNTaW5nbGVUaHJlYWQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbml0UGFyYW1ldGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SXNTZWN1cmUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJQYXRoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckluY2x1ZGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaGVyRm9yd2FyZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldGdldEluZm8iCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb25zdHJ1Y3RvcklzIgotCQkJdmFsdWUgICAgICAJKCJDdG9yX1NldCIgNjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkN0b3JfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk2MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcm90ZWN0ZWQiCi0JCQkJdmFsdWUgICAgICAJNjMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk2NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRmluYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdGF0aWNJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zdGFuY2VJbml0aWFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiSHR0cF9TZXJ2bGV0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGVzTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0QXR0cmlidXRlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RQYXJhbWV0ZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckhlYWRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW50SGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldERhdGVIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29va2llIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yQ29va2llIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRlbnRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVIVE1MIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkRlZmF1bHRfRUpCX19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlX1hNTF9ERCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ21wRmllbGQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJFbnZpcm9ubWVudFByb3BlcnRpZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJDbnhGYWN0b3J5IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUmVmZXJlbmNlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlY3VyaXR5Um9sZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJOYW1lSW5KQVIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCU2Vzc2lvblR5cGVfU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlc3Npb25UeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlbGVzcyIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3RhdGVmdWwiCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCVHJhbnNhY3Rpb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IiAyMTEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29udGFpbmVyIgotCQkJCXZhbHVlICAgICAgCTIxMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCZWFuIgotCQkJCXZhbHVlICAgICAgCTIxMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlBlcnNpc3RlbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIgMjIwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIiIKLQkJCQl2YWx1ZSAgICAgIAkyMjApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29udGFpbmVyIgotCQkJCXZhbHVlICAgICAgCTIyMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZW50cmFudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkJNUF9FeHRlbmRfQ01QIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUjJFZGl0b3IiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJvc2UgTW9kZWwgSW50ZWdyYXRvciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUm9zZSBXZWIgUHVibGlzaGVyIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWZXJzaW9uIENvbnRyb2wiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJlcG9zaXRvcnkiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2OSIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInBhY2thZ2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zVVJJIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImJhc2VQYWNrYWdlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY2xhc3NpZmllck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY29uc3RyYWludHMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiQ29udGVudEtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiRW1wdHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIk1peGVkIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnRPbmx5IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJvcGVyYXRpb25OYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhdHRyaWJ1dGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNJRCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJyZWZlcmVuY2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzUmVzb2x2ZVByb3hpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkpCi0JcXVpZCAgICAgICAJIjNBQkZEOUE3MDE1NCIpKQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTIxN2JkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvTUlNRS5lY29yZQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9Im1pbWUiCi0gICAgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL01JTUUiIG5zUHJlZml4PSJtaW1lIj4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNSU1FQ29udGVudCIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JTUlNRUNvbnRlbnQiPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRQYXJ0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwYXJ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0UGFydCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0eXBlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQYXJ0IiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9QYXJ0Ii8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1JTUVQYXJ0IiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lNSU1FUGFydCI+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZEV4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJleHRlbnNpYmlsaXR5RWxlbWVudCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vSUV4dGVuc2liaWxpdHlFbGVtZW50Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzIiBlVHlwZT0iIy8vTGlzdCIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1JTUVNdWx0aXBhcnRSZWxhdGVkIiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lNSU1FTXVsdGlwYXJ0UmVsYXRlZCI+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZE1JTUVQYXJ0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJtaW1lUGFydCIgZVR5cGU9IiMvL0lNSU1FUGFydCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE1JTUVQYXJ0cyIgZVR5cGU9IiMvL0xpc3QiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZU1JTUVQYXJ0IiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL01JTUVQYXJ0IiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNSU1FTWltZVhtbCIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JTUlNRU1pbWVYbWwiPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRQYXJ0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwYXJ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0UGFydCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlUGFydCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vUGFydCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJTUlNRVBhcnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJTUlNRU11bHRpcGFydFJlbGF0ZWQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJTUlNRUNvbnRlbnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJTUlNRU1pbWVYbWwiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJMaXN0IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLkxpc3QiLz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL01JTUUuZ2VubW9kZWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL01JTUUuZ2VubW9kZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YmNlMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLmdlbm1vZGVsCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCi0gICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUiCi0gICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjIgotICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsIiBtb2RlbE5hbWU9Ik1JTUUiIGVkaXRQbHVnaW5DbGFzcz0iIiBlZGl0b3JQbHVnaW5DbGFzcz0iIgotICAgIG5vbk5MU01hcmtlcnM9InRydWUiIGNvZGVGb3JtYXR0aW5nPSJ0cnVlIiBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIucm9zZSIKLSAgICB1c2VkR2VuUGFja2FnZXM9IldTREwuZ2VubW9kZWwjLy93c2RsIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL21vZGVsL1hTRC5nZW5tb2RlbCMvL3hzZCI+Ci0gIDxmb3JlaWduTW9kZWw+TUlNRS5tZGw8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5WQUJBU0VfUExVR0lOU19QQVRIPC9mb3JlaWduTW9kZWw+Ci0gIDxmb3JlaWduTW9kZWw+Li4vLi4vLi48L2ZvcmVpZ25Nb2RlbD4KLSAgPGdlblBhY2thZ2VzIHByZWZpeD0iTUlNRSIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmciIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCi0gICAgICBjbGFzc1BhY2thZ2VTdWZmaXg9ImludGVybmFsLmltcGwiIHV0aWxpdHlQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC51dGlsIiBlY29yZVBhY2thZ2U9Ik1JTUUuZWNvcmUjLyI+Ci0gICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJNSU1FLmVjb3JlIy8vTGlzdCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Ik1JTUUuZWNvcmUjLy9NSU1FQ29udGVudCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgTUlNRS5lY29yZSMvL01JTUVDb250ZW50L3R5cGUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBNSU1FLmVjb3JlIy8vTUlNRUNvbnRlbnQvZVBhcnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJNSU1FLmVjb3JlIy8vTUlNRUNvbnRlbnQvc2V0UGFydCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJNSU1FLmVjb3JlIy8vTUlNRUNvbnRlbnQvc2V0UGFydC9wYXJ0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iTUlNRS5lY29yZSMvL01JTUVDb250ZW50L2dldFBhcnQiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iTUlNRS5lY29yZSMvL01JTUVQYXJ0Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgTUlNRS5lY29yZSMvL01JTUVQYXJ0L2VFeHRlbnNpYmlsaXR5RWxlbWVudHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJNSU1FLmVjb3JlIy8vTUlNRVBhcnQvYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iTUlNRS5lY29yZSMvL01JTUVQYXJ0L2FkZEV4dGVuc2liaWxpdHlFbGVtZW50L2V4dGVuc2liaWxpdHlFbGVtZW50Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iTUlNRS5lY29yZSMvL01JTUVQYXJ0L2dldEV4dGVuc2liaWxpdHlFbGVtZW50cyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vTUlNRU11bHRpcGFydFJlbGF0ZWQiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBNSU1FLmVjb3JlIy8vTUlNRU11bHRpcGFydFJlbGF0ZWQvZU1JTUVQYXJ0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iTUlNRS5lY29yZSMvL01JTUVNdWx0aXBhcnRSZWxhdGVkL2FkZE1JTUVQYXJ0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Ik1JTUUuZWNvcmUjLy9NSU1FTXVsdGlwYXJ0UmVsYXRlZC9hZGRNSU1FUGFydC9taW1lUGFydCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Ik1JTUUuZWNvcmUjLy9NSU1FTXVsdGlwYXJ0UmVsYXRlZC9nZXRNSU1FUGFydHMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iTUlNRS5lY29yZSMvL01JTUVNaW1lWG1sIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBNSU1FLmVjb3JlIy8vTUlNRU1pbWVYbWwvZVBhcnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJNSU1FLmVjb3JlIy8vTUlNRU1pbWVYbWwvc2V0UGFydCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJNSU1FLmVjb3JlIy8vTUlNRU1pbWVYbWwvc2V0UGFydC9wYXJ0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iTUlNRS5lY29yZSMvL01JTUVNaW1lWG1sL2dldFBhcnQiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vSU1JTUVQYXJ0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vSU1JTUVNdWx0aXBhcnRSZWxhdGVkIi8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vSU1JTUVDb250ZW50Ii8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJNSU1FLmVjb3JlIy8vSU1JTUVNaW1lWG1sIi8+Ci0gIDwvZ2VuUGFja2FnZXM+Ci08L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLm1kbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvTUlNRS5tZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZTg1MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9NSU1FLm1kbAorKysgL2Rldi9udWxsCkBAIC0xLDU4MTggKzAsMCBAQAotCi0ob2JqZWN0IFBldGFsCi0gICAgdmVyc2lvbiAgICAJNDIKLSAgICBfd3JpdHRlbiAgIAkiUm9zZSA0LjUuODE2My4zIgotICAgIGNoYXJTZXQgICAgCTApCi0KLShvYmplY3QgRGVzaWduICJMb2dpY2FsIFZpZXciCi0gICAgaXNfdW5pdCAgICAJVFJVRQotICAgIGlzX2xvYWRlZCAgCVRSVUUKLSAgICBkZWZhdWx0cyAgIAkob2JqZWN0IGRlZmF1bHRzCi0JcmlnaHRNYXJnaW4gCTAuMjUwMDAwCi0JbGVmdE1hcmdpbiAJMC4yNTAwMDAKLQl0b3BNYXJnaW4gIAkwLjI1MDAwMAotCWJvdHRvbU1hcmdpbiAJMC41MDAwMDAKLQlwYWdlT3ZlcmxhcCAJMC4yNTAwMDAKLQljbGlwSWNvbkxhYmVscyAJVFJVRQotCWF1dG9SZXNpemUgCVRSVUUKLQlzbmFwVG9HcmlkIAlUUlVFCi0JZ3JpZFggICAgICAJMTYKLQlncmlkWSAgICAgIAkxNgotCWRlZmF1bHRGb250IAkob2JqZWN0IEZvbnQKLQkgICAgc2l6ZSAgICAgICAJMTAKLQkgICAgZmFjZSAgICAgICAJIkFyaWFsIgotCSAgICBib2xkICAgICAgIAlGQUxTRQotCSAgICBpdGFsaWNzICAgIAlGQUxTRQotCSAgICB1bmRlcmxpbmUgIAlGQUxTRQotCSAgICBzdHJpa2UgICAgIAlGQUxTRQotCSAgICBjb2xvciAgICAgIAkwCi0JICAgIGRlZmF1bHRfY29sb3IgCVRSVUUpCi0Jc2hvd01lc3NhZ2VOdW0gCTEKLQlzaG93Q2xhc3NPZk9iamVjdCAJVFJVRQotCW5vdGF0aW9uICAgCSJVbmlmaWVkIikKLSAgICByb290X3VzZWNhc2VfcGFja2FnZSAJKG9iamVjdCBDbGFzc19DYXRlZ29yeSAiVXNlIENhc2UgVmlldyIKLQlxdWlkICAgICAgIAkiM0FDOTEwNTEwMzFFIgotCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JZ2xvYmFsICAgICAJVFJVRQotCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0KQotCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IFVzZUNhc2VEaWFncmFtICJNYWluIgotCQlxdWlkICAgICAgIAkiM0FDOTEwNTIwMDFCIgotCQl0aXRsZSAgICAgIAkiTWFpbiIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICByb290X2NhdGVnb3J5IAkob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJMb2dpY2FsIFZpZXciCi0JcXVpZCAgICAgICAJIjNBQzkxMDUxMDMxRCIKLQlleHBvcnRDb250cm9sIAkiUHVibGljIgotCWdsb2JhbCAgICAgCVRSVUUKLQlzdWJzeXN0ZW0gIAkiQ29tcG9uZW50IFZpZXciCi0JcXVpZHUgICAgICAJIjNBQzkxMDUxMDMxRiIKLQlsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJtaW1lIgotCQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJIm1pbWUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1VSSSIKLQkJCXZhbHVlICAgICAgCSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9NSU1FIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYmFzZVBhY2thZ2UiCi0JCQl2YWx1ZSAgICAgIAkib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJNSU1FIikpCi0JCXF1aWQgICAgICAgCSIzQUM5MTI3QzAyNjYiCi0JCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JCSAgICAob2JqZWN0IENsYXNzICJNSU1FQ29udGVudCIKLQkJCXF1aWQgICAgICAgCSIzQUM5MTM1QjAzQTciCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFRjExQ0EwMzhFIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNkEzMDE2OCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpJTUlNRUNvbnRlbnQiCi0JCQkJcXVpZHUgICAgICAJIjQwQTEwNUUwMDFDQyIpKQotCQkJb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJzZXRQYXJ0IgotCQkJCXF1aWQgICAgICAgCSI0MEExMDY2RjAwMjMiCi0JCQkJcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJCSAgICAob2JqZWN0IFBhcmFtZXRlciAicGFydCIKLQkJCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJCXJlc3VsdCAgICAgCSJ2b2lkIgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UGFydCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA2N0QwMkNDIgotCQkJCXJlc3VsdCAgICAgCSJTdHJpbmciCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidHlwZSIKLQkJCQlxdWlkICAgICAgIAkiM0FDOTE5NzEwMzZCIgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIk1JTUVQYXJ0IgotCQkJcXVpZCAgICAgICAJIjNBQzkxM0VFMDBFQiIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0MEEwRkRFRjAzMjIiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDBBMTAyQ0QwMTc1IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Om1pbWU6OklNSU1FUGFydCIKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTAyNUQwMUE2IikpCi0JCQlvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImFkZEV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWQgICAgICAgCSI0MEExMDQ2NDAxQTIiCi0JCQkJcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJCSAgICAob2JqZWN0IFBhcmFtZXRlciAiZXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJCXR5cGUgICAgICAgCSJJRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKSkKLQkJCQlyZXN1bHQgICAgIAkidm9pZCIKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImdldEV4dGVuc2liaWxpdHlFbGVtZW50cyIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA0ODQwMjdCIgotCQkJCXJlc3VsdCAgICAgCSJMaXN0IgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJNSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLQkJCXF1aWQgICAgICAgCSIzQUM5MTNGQTAyNUIiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFRjExRDUwMzMwIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwM0FEMDMxQyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpJTUlNRU11bHRpcGFydFJlbGF0ZWQiCi0JCQkJcXVpZHUgICAgICAJIjQwQTEwMzNCMDBERCIpKQotCQkJb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJhZGRNSU1FUGFydCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTAzRjYwMTcyIgotCQkJCXBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCQkgICAgKG9iamVjdCBQYXJhbWV0ZXIgIm1pbWVQYXJ0IgotCQkJCQl0eXBlICAgICAgIAkiSU1JTUVQYXJ0IikpCi0JCQkJcmVzdWx0ICAgICAJInZvaWQiCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKQotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJnZXRNSU1FUGFydHMiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNDAzMDM4RCIKLQkJCQlyZXN1bHQgICAgIAkiTGlzdCIKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiTUlNRU1pbWVYbWwiCi0JCQlxdWlkICAgICAgIAkiM0FDOTE0NUEwMUZGIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRUYxMUREMDM4QiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0MEExMDc0NzAzNEUiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6bWltZTo6SU1JTUVNaW1lWG1sIgotCQkJCXF1aWR1ICAgICAgCSI0MEExMDZFRjAwOEIiKSkKLQkJCW9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAic2V0UGFydCIKLQkJCQlxdWlkICAgICAgIAkiNDBBMTA2RDQwMUVCIgotCQkJCXBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCQkgICAgKG9iamVjdCBQYXJhbWV0ZXIgInBhcnQiCi0JCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJCQlyZXN1bHQgICAgIAkidm9pZCIKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImdldFBhcnQiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNkUxMDA5NSIKLQkJCQlyZXN1bHQgICAgIAkiU3RyaW5nIgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJTUlNRVBhcnQiCi0JCQlxdWlkICAgICAgIAkiNDBBMTAyNUQwMUE2IgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwMjlEMDNEOSIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJTUlNRU11bHRpcGFydFJlbGF0ZWQiCi0JCQlxdWlkICAgICAgIAkiNDBBMTAzM0IwMEREIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwMzc4MDE4RiIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJTUlNRUNvbnRlbnQiCi0JCQlxdWlkICAgICAgIAkiNDBBMTA1RTAwMUNDIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNUY1MDIyNiIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJTUlNRU1pbWVYbWwiCi0JCQlxdWlkICAgICAgIAkiNDBBMTA2RUYwMDhCIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwNzFFMDNCNCIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJMaXN0IgotCQkJcXVpZCAgICAgICAJIjQwQTEwQkZBMDEwOSIKLQkJCXN0ZXJlb3R5cGUgCSJkYXRhdHlwZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YS51dGlsLkxpc3QiCi0JCQkJcXVpZCAgICAgICAJIjQwQTEwQzA5MDJBNiIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQwIgotCQkJcXVpZCAgICAgICAJIjNBRTczQjNDMDM1NiIKLQkJCXJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkJICAgIChvYmplY3QgUm9sZSAiJFVOTkFNRUQkMSIKLQkJCQlxdWlkICAgICAgIAkiM0FFNzNCM0QwMDkwIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVDb250ZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTM1QjAzQTciKQotCQkJICAgIChvYmplY3QgUm9sZSAiZVBhcnQiCi0JCQkJcXVpZCAgICAgICAJIjNBRTczQjNEMDA5QSIKLQkJCQlsYWJlbCAgICAgIAkiZVBhcnQiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkJCWNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi4xIikKLQkJCQlpc19uYXZpZ2FibGUgCVRSVUUpKSkKLQkJICAgIChvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDIiCi0JCQlxdWlkICAgICAgIAkiM0FFNzNCQjkwMEQ1IgotCQkJcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCQkgICAgKG9iamVjdCBSb2xlICJlUGFydCIKLQkJCQlxdWlkICAgICAgIAkiM0FFNzNCQjkwM0NFIgotCQkJCWxhYmVsICAgICAgCSJlUGFydCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCQkJY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkJCWlzX25hdmlnYWJsZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDMiCi0JCQkJcXVpZCAgICAgICAJIjNBRTczQkI5MDNFMiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FTWltZVhtbCIKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTE0NUEwMUZGIikpKQotCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNCIKLQkJCXF1aWQgICAgICAgCSIzQUVGMTJGRTAzODciCi0JCQlyb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDUiCi0JCQkJcXVpZCAgICAgICAJIjNBRUYxMzAwMDBENyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzRkEwMjVCIgotCQkJCWlzX2FnZ3JlZ2F0ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IFJvbGUgImVNSU1FUGFydCIKLQkJCQlxdWlkICAgICAgIAkiM0FFRjEzMDAwMEUxIgotCQkJCWxhYmVsICAgICAgCSJlTUlNRVBhcnQiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRVBhcnQiCi0JCQkJcXVpZHUgICAgICAJIjNBQzkxM0VFMDBFQiIKLQkJCQljbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCQkJQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkJCUNvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCQkJaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JCSAgICAob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ2IgotCQkJcXVpZCAgICAgICAJIjQ2ODczNzlBMDA4QyIKLQkJCXJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkJICAgIChvYmplY3QgUm9sZSAiZUV4dGVuc2liaWxpdHlFbGVtZW50cyIKLQkJCQlxdWlkICAgICAgIAkiNDY4NzM3OUIwMjgwIgotCQkJCWxhYmVsICAgICAgCSJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCQkJY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkJCUNvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJCQlDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkJCWlzX25hdmlnYWJsZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDciCi0JCQkJcXVpZCAgICAgICAJIjQ2ODczNzlCMDI5MCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FUGFydCIKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzRUUwMEVCIgotCQkJCWNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJCQlpc19hZ2dyZWdhdGUgCVRSVUUpKSkpCi0JCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIkJpbmRpbmdzIgotCQkJcXVpZCAgICAgICAJIjNBQzkxMjhCMDFGOSIKLQkJCXRpdGxlICAgICAgCSJCaW5kaW5ncyIKLQkJCXpvb20gICAgICAgCTEwMAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRUNvbnRlbnQiIEAxCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNjMyLCA4NDgpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNDkwLCA3MTcpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjg0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVDb250ZW50IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzNUIwM0E3IgotCQkJCXdpZHRoICAgICAgCTMwMgotCQkJCWhlaWdodCAgICAgCTI4NgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIgQDIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCQkJU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE2MzIsIDEyMDApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNTUxLCAxMTUwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTE2MgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJQYXJ0IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkJCWhlaWdodCAgICAgCTEyNAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQwIiBAMwotCQkJCWxvY2F0aW9uICAgCSgxNjMyLCAxMDY0KQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTczQjNDMDM1NiIKLQkJCQlyb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMSIgQDQKLQkJCQkJUGFyZW50X1ZpZXcgCUAzCi0JCQkJCWxvY2F0aW9uICAgCSgtNDE2LCAtMTY4KQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRTczQjNEMDA5MCIKLQkJCQkJY2xpZW50ICAgICAJQDMKLQkJCQkJc3VwcGxpZXIgICAJQDEKLQkJCQkJbGluZV9zdHlsZSAJMCkKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiZVBhcnQiIEA1Ci0JCQkJCVBhcmVudF9WaWV3IAlAMwotCQkJCQlsb2NhdGlvbiAgIAkoLTQxNiwgLTE2OCkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANgotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMTUxNSwgMTEwMikKLQkJCQkJICAgIGFuY2hvciAgICAgCTEKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTEyMAotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIitlUGFydCIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNTM5MzI2Ci0JCQkJCSAgICBoZWlnaHQgICAgIAkxMTgKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkxKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRTczQjNEMDA5QSIKLQkJCQkJY2xpZW50ICAgICAJQDMKLQkJCQkJc3VwcGxpZXIgICAJQDIKLQkJCQkJbGluZV9zdHlsZSAJMAotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA3Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDUKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgxNjgxLCAxMDk3KQotCQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTUKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIwLi4xIgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC40NDkxMDMKLQkJCQkJICAgIGhlaWdodCAgICAgCTQ5Ci0JCQkJCSAgICBvcmllbnRhdGlvbiAJMCkpKSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVNaW1lWG1sIiBAOAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTYzMiwgMTUwNCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDgKLQkJCQkgICAgbG9jYXRpb24gICAJKDE0NzgsIDEzOTgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzA4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVNaW1lWG1sIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTE0NUEwMUZGIgotCQkJCXdpZHRoICAgICAgCTMyNgotCQkJCWhlaWdodCAgICAgCTIzNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQyIiBAOQotCQkJCWxvY2F0aW9uICAgCSgxNjMyLCAxMzIzKQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTczQkI5MDBENSIKLQkJCQlyb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiZVBhcnQiIEAxMAotCQkJCQlQYXJlbnRfVmlldyAJQDkKLQkJCQkJbG9jYXRpb24gICAJKDE0NCwgLTMyNSkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTEKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMTAKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgxNTA2LCAxMjkzKQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTIwCi0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiK2VQYXJ0IgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC40ODk1ODMKLQkJCQkJICAgIGhlaWdodCAgICAgCTEyNwotCQkJCQkgICAgb3JpZW50YXRpb24gCTApCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FFNzNCQjkwM0NFIgotCQkJCQljbGllbnQgICAgIAlAOQotCQkJCQlzdXBwbGllciAgIAlAMgotCQkJCQlsaW5lX3N0eWxlIAkwCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEyCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDEwCi0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMTcwOCwgMTI4NCkKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNjUyMjcwCi0JCQkJCSAgICBoZWlnaHQgICAgIAk3NgotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzIiBAMTMKLQkJCQkJUGFyZW50X1ZpZXcgCUA5Ci0JCQkJCWxvY2F0aW9uICAgCSgxNDQsIC0zMjUpCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FFNzNCQjkwM0UyIgotCQkJCQljbGllbnQgICAgIAlAOQotCQkJCQlzdXBwbGllciAgIAlAOAotCQkJCQlsaW5lX3N0eWxlIAkwKSkpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FTXVsdGlwYXJ0UmVsYXRlZCIgQDE0Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg1NjAsIDU5MikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDE0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgzNDEsIDQ4NikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MzgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiTUlNRU11bHRpcGFydFJlbGF0ZWQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUM5MTNGQTAyNUIiCi0JCQkJd2lkdGggICAgICAJNDU2Ci0JCQkJaGVpZ2h0ICAgICAJMjM2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FUGFydCIgQDE1Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg1NjAsIDEwNDApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxNQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMjk2LCA5MzQpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNTI4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVQYXJ0IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTEzRUUwMEVCIgotCQkJCWNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTUKLQkJCQkgICAgbG9jYXRpb24gICAJKDI5NiwgOTk0KQotCQkJCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQkgICAgZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCSAgICBubGluZXMgICAgIAkzCi0JCQkJICAgIG1heF93aWR0aCAgCTApCi0JCQkJd2lkdGggICAgICAJNTQ2Ci0JCQkJaGVpZ2h0ICAgICAJMjM2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDQiIEAxNgotCQkJCWxvY2F0aW9uICAgCSg1NjAsIDgxNSkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUVGMTJGRTAzODciCi0JCQkJcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDUiIEAxNwotCQkJCQlQYXJlbnRfVmlldyAJQDE2Ci0JCQkJCWxvY2F0aW9uICAgCSgzMiwgMTExKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRUYxMzAwMDBENyIKLQkJCQkJY2xpZW50ICAgICAJQDE2Ci0JCQkJCXN1cHBsaWVyICAgCUAxNAotCQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJlTUlNRVBhcnQiIEAxOAotCQkJCQlQYXJlbnRfVmlldyAJQDE2Ci0JCQkJCWxvY2F0aW9uICAgCSgzMiwgMTExKQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOQotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxOAotCQkJCQkgICAgbG9jYXRpb24gICAJKDc0NCwgODkwKQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMjI4Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiK2VNSU1FUGFydCIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNzA5NDAyCi0JCQkJCSAgICBoZWlnaHQgICAgIAkxODQKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRUYxMzAwMDBFMSIKLQkJCQkJY2xpZW50ICAgICAJQDE2Ci0JCQkJCXN1cHBsaWVyICAgCUAxNQotCQkJCQlsaW5lX3N0eWxlIAkwCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDE4Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoNTAzLCA4OTgpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjAuLioiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjc5NDExOAotCQkJCQkgICAgaGVpZ2h0ICAgICAJNTgKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkxKQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMQotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxOAotCQkJCQkgICAgbG9jYXRpb24gICAJKDM2NCwgODkwKQotCQkJCQkgICAgYW5jaG9yICAgICAJMwotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTU5Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC43MDk0MDIKLQkJCQkJICAgIGhlaWdodCAgICAgCTE5NwotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpKSkpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpJTUlNRVBhcnQiIEAyMgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg3MjAsIDE0NTYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMjA1LCAxNDIyKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEwMzAKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSU1JTUVQYXJ0IikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDIyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgyMDUsIDEzNzIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTAzMAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTAyNUQwMUE2IgotCQkJCXdpZHRoICAgICAgCTEwNDgKLQkJCQloZWlnaHQgICAgIAkxOTIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyMwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwMkNEMDE3NSIKLQkJCQljbGllbnQgICAgIAlAMTUKLQkJCQlzdXBwbGllciAgIAlAMjIKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6SU1JTUVNdWx0aXBhcnRSZWxhdGVkIiBAMjQKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNzY4LCAxNzYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTQzLCAxNDIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTI1MAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJTUlNRU11bHRpcGFydFJlbGF0ZWQiKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjQKLQkJCQkgICAgbG9jYXRpb24gICAJKDE0MywgOTIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMTI1MAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMTAzM0IwMEREIgotCQkJCXdpZHRoICAgICAgCTEyNjgKLQkJCQloZWlnaHQgICAgIAkxOTIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwM0FEMDMxQyIKLQkJCQljbGllbnQgICAgIAlAMTQKLQkJCQlzdXBwbGllciAgIAlAMjQKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6SU1JTUVDb250ZW50IiBAMjYKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTYzMiwgNDMyKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjYKLQkJCQkgICAgbG9jYXRpb24gICAJKDEwODQsIDM5OCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkxMDk2Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklNSU1FQ29udGVudCIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyNgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTA4NCwgMzQ4KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTEwOTYKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwNUUwMDFDQyIKLQkJCQl3aWR0aCAgICAgIAkxMTE0Ci0JCQkJaGVpZ2h0ICAgICAJMTkyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjcKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0MEExMDZBMzAxNjgiCi0JCQkJY2xpZW50ICAgICAJQDEKLQkJCQlzdXBwbGllciAgIAlAMjYKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6SU1JTUVNaW1lWG1sIiBAMjgKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTYxNiwgMTkwNCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDI4Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMDU1LCAxODcwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTExMjIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSU1JTUVNaW1lWG1sIikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDI4Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMDU1LCAxODIwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTExMjIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwNkVGMDA4QiIKLQkJCQl3aWR0aCAgICAgIAkxMTQwCi0JCQkJaGVpZ2h0ICAgICAJMTkyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0MEExMDc0NzAzNEUiCi0JCQkJY2xpZW50ICAgICAJQDgKLQkJCQlzdXBwbGllciAgIAlAMjgKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6TGlzdCIgQDMwCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg0NDgsIDE3NjApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzMAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTc2LCAxNzAxKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTU0NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJMaXN0IikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMwCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNzYsIDE2NTEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNTQ0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8ZGF0YXR5cGU+PiIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQwQTEwQkZBMDEwOSIKLQkJCQl3aWR0aCAgICAgIAk1NjIKLQkJCQloZWlnaHQgICAgIAkyNDIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkpKQotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIkV4dGVuc2liaWxpdHkiCi0JCQlxdWlkICAgICAgIAkiM0FFNzNBQTMwMzJFIgotCQkJdGl0bGUgICAgICAJIkV4dGVuc2liaWxpdHkiCi0JCQl6b29tICAgICAgIAkxMDAKLQkJCW1heF9oZWlnaHQgCTI4MzUwCi0JCQltYXhfd2lkdGggIAkyMTYwMAotCQkJb3JpZ2luX3ggICAJMAotCQkJb3JpZ2luX3kgICAJMAotCQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6Om1pbWU6Ok1JTUVNaW1lWG1sIiBAMzEKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDEzMjgsIDc1MikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMxCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxMTc0LCA2NDYpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzA4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIk1JTUVNaW1lWG1sIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FDOTE0NUEwMUZGIgotCQkJCWNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzEKLQkJCQkgICAgbG9jYXRpb24gICAJKDExNzQsIDcwNikKLQkJCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJICAgIGZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkgICAgbmxpbmVzICAgICAJMwotCQkJCSAgICBtYXhfd2lkdGggIAkyMTUpCi0JCQkJd2lkdGggICAgICAJMzI2Ci0JCQkJaGVpZ2h0ICAgICAJMjM2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3OjptaW1lOjpNSU1FTXVsdGlwYXJ0UmVsYXRlZCIgQDMyCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg3NTIsIDExMzYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoNTMzLCAxMDMwKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQzOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJNSU1FTXVsdGlwYXJ0UmVsYXRlZCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQzkxM0ZBMDI1QiIKLQkJCQljb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMyCi0JCQkJICAgIGxvY2F0aW9uICAgCSg1MzMsIDEwOTApCi0JCQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkJCSAgICBmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJICAgIG5saW5lcyAgICAgCTMKLQkJCQkgICAgbWF4X3dpZHRoICAJMzQzKQotCQkJCXdpZHRoICAgICAgCTQ1NgotCQkJCWhlaWdodCAgICAgCTIzNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRUNvbnRlbnQiIEAzMwotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNzkyLCA3NTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzMwotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTY1MCwgNjQ2KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI4NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJNSU1FQ29udGVudCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQzkxMzVCMDNBNyIKLQkJCQljb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMzCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxNjUwLCA3MDYpCi0JCQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkJCSAgICBmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJICAgIG5saW5lcyAgICAgCTMKLQkJCQkgICAgbWF4X3dpZHRoICAJMjE1KQotCQkJCXdpZHRoICAgICAgCTMwMgotCQkJCWhlaWdodCAgICAgCTIzNgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6bWltZTo6TUlNRVBhcnQiIEAzNAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgzMDQsIDc2OCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg0MCwgNjYyKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTUyOAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJNSU1FUGFydCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBQzkxM0VFMDBFQiIKLQkJCQljb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg0MCwgNzIyKQotCQkJCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQkgICAgZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCQkgICAgYW5jaG9yICAgICAJMgotCQkJCSAgICBubGluZXMgICAgIAkzCi0JCQkJICAgIG1heF93aWR0aCAgCTUzNCkKLQkJCQl3aWR0aCAgICAgIAk1NDYKLQkJCQloZWlnaHQgICAgIAkyMzYKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IiBAMzUKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoOTc2LCAxOTIpCi0JCQkJZm9udCAgICAgICAJKG9iamVjdCBGb250Ci0JCQkJICAgIGl0YWxpY3MgICAgCVRSVUUpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzNQotCQkJCSAgICBsb2NhdGlvbiAgIAkoNzQ3LCA4NykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0NTgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCQkJY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzNQotCQkJCSAgICBsb2NhdGlvbiAgIAkoNzQ3LCAxOTUpCi0JCQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkJCSAgICBmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJICAgIG5saW5lcyAgICAgCTIKLQkJCQkgICAgbWF4X3dpZHRoICAJNDY1KQotCQkJCXdpZHRoICAgICAgCTQ3NgotCQkJCWhlaWdodCAgICAgCTIzNAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEAzNgotCQkJCWxvY2F0aW9uICAgCSg5NzYsIDUyNikKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlzdXBwbGllciAgIAlAMzUKLQkJCQl2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkgICAgKDk3NiwgNTI2KQotCQkJCSAgICAoOTc2LCAzMDkpKSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzNwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRUYxMUREMDM4QiIKLQkJCQljbGllbnQgICAgIAlAMzEKLQkJCQlzdXBwbGllciAgIAlAMzUKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzU2LCA2MzQpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDEzNTYsIDUyNikKLQkJCQlkcmF3U3VwcGxpZXIgCUAzNikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzOAotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRUYxMUQ1MDMzMCIKLQkJCQljbGllbnQgICAgIAlAMzIKLQkJCQlzdXBwbGllciAgIAlAMzUKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSg4NDQsIDEwMTgpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDg0NCwgNTI2KQotCQkJCWRyYXdTdXBwbGllciAJQDM2KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM5Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFRjExQ0EwMzhFIgotCQkJCWNsaWVudCAgICAgCUAzMwotCQkJCXN1cHBsaWVyICAgCUAzNQotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDE3NzgsIDYzNCkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTc3OCwgNTI2KQotCQkJCWRyYXdTdXBwbGllciAJQDM2KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQwCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDBBMEZERUYwMzIyIgotCQkJCWNsaWVudCAgICAgCUAzNAotCQkJCXN1cHBsaWVyICAgCUAzNQotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDI1NiwgNjUwKQotCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNTYsIDUyNikKLQkJCQlkcmF3U3VwcGxpZXIgCUAzNikKLQkJCSAgICAob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNiIgQDQxCi0JCQkJbG9jYXRpb24gICAJKDMwMywgMjUxKQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ2ODczNzlBMDA4QyIKLQkJCQlyb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiZUV4dGVuc2liaWxpdHlFbGVtZW50cyIgQDQyCi0JCQkJCVBhcmVudF9WaWV3IAlANDEKLQkJCQkJbG9jYXRpb24gICAJKC0xLCAtNTE3KQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA0MwotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0MgotCQkJCQkgICAgbG9jYXRpb24gICAJKDQ2MiwgMTMxKQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJNDQ0Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiK2VFeHRlbnNpYmlsaXR5RWxlbWVudHMiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjQ0MzMyMAotCQkJCQkgICAgaGVpZ2h0ICAgICAJNjAKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjQ2ODczNzlCMDI4MCIKLQkJCQkJY2xpZW50ICAgICAJQDQxCi0JCQkJCXN1cHBsaWVyICAgCUAzNQotCQkJCQl2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkJICAgICgzMDMsIDI1MSkKLQkJCQkJICAgICgzMDMsIDE5MSkKLQkJCQkJICAgICg3MzcsIDE5MSkpCi0JCQkJCWxpbmVfc3R5bGUgCTAKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANDQKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlANDIKLQkJCQkJICAgIGxvY2F0aW9uICAgCSg2MjIsIDIyOCkKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNzY3MjA2Ci0JCQkJCSAgICBoZWlnaHQgICAgIAkzNwotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDQ1Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDQyCi0JCQkJCSAgICBsb2NhdGlvbiAgIAkoNTc1LCAyODQpCi0JCQkJCSAgICBhbmNob3IgICAgIAkzCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNTkKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjY3MjA2NQotCQkJCQkgICAgaGVpZ2h0ICAgICAJOTMKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkxKSkKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNyIgQDQ2Ci0JCQkJCVBhcmVudF9WaWV3IAlANDEKLQkJCQkJbG9jYXRpb24gICAJKC0xLCAtNTE3KQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjQ2ODczNzlCMDI5MCIKLQkJCQkJY2xpZW50ICAgICAJQDQxCi0JCQkJCXN1cHBsaWVyICAgCUAzNAotCQkJCQlsaW5lX3N0eWxlIAkwCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDQ3Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDQ2Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMzU3LCA2MDkpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCQkgICAgaGVpZ2h0ICAgICAJNTQKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKSkpKSkpKSkKLQkgICAgKG9iamVjdCBDbGFzc19DYXRlZ29yeSAid3NkbCIKLQkJaXNfdW5pdCAgICAJVFJVRQotCQlpc19sb2FkZWQgIAlGQUxTRQotCQlmaWxlX25hbWUgIAkiJFZBQkFTRV9QTFVHSU5TX1BBVEhcXG9yZy5lY2xpcHNlLndzdC53c2RsXFxtb2RlbFxcb3JnLmVjbGlwc2Uud3N0LldTREwuY2F0IgotCQlxdWlkICAgICAgIAkiM0FERkI4RTUwMjFFIikKLQkgICAgKG9iamVjdCBDbGFzc19DYXRlZ29yeSAieHNkIgotCQlpc191bml0ICAgIAlUUlVFCi0JCWlzX2xvYWRlZCAgCUZBTFNFCi0JCWZpbGVfbmFtZSAgCSIkVkFCQVNFX1BMVUdJTlNfUEFUSFxcb3JnLmVjbGlwc2UueHNkXFxtb2RlbFxcb3JnLmVjbGlwc2UuWFNELmNhdCIKLQkJcXVpZCAgICAgICAJIjM5QUJEQzZGMDFBQSIpKQotCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiTWFpbiIKLQkJcXVpZCAgICAgICAJIjNBQzkxMDUxMDNCMiIKLQkJdGl0bGUgICAgICAJIk1haW4iCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6Om1pbWUiIEA0OAotCQkJbG9jYXRpb24gICAJKDQwMCwgMjQwKQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDQ4Ci0JCQkgICAgbG9jYXRpb24gICAJKDI1NiwgMTU2KQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkibWltZSIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiM0FDOTEyN0MwMjY2IgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApCi0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojp3c2RsIiBANDkKLQkJCWxvY2F0aW9uICAgCSg4ODAsIDI0MCkKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA0OQotCQkJICAgIGxvY2F0aW9uICAgCSg3MzYsIDE1NikKLQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJICAgIG5saW5lcyAgICAgCTIKLQkJCSAgICBtYXhfd2lkdGggIAkyODgKLQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkgICAgbGFiZWwgICAgICAJIndzZGwiKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJcXVpZHUgICAgICAJIjNBREZCOEU1MDIxRSIKLQkJCXdpZHRoICAgICAgCTMwMAotCQkJaGVpZ2h0ICAgICAJMTgwKQotCQkgICAgKG9iamVjdCBDYXRlZ29yeVZpZXcgIkxvZ2ljYWwgVmlldzo6eHNkIiBANTAKLQkJCWxvY2F0aW9uICAgCSgxMzc2LCAyNDApCi0JCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJICAgIFBhcmVudF9WaWV3IAlANTAKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTIzMiwgMTU2KQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkieHNkIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzOUFCREM2RjAxQUEiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkpKSkpCi0gICAgcm9vdF9zdWJzeXN0ZW0gCShvYmplY3QgU3ViU3lzdGVtICJDb21wb25lbnQgVmlldyIKLQlxdWlkICAgICAgIAkiM0FDOTEwNTEwMzFGIgotCXBoeXNpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdCkKLQlwaHlzaWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgTW9kdWxlX0RpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzQUM5MTA1MjAwMUEiCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHByb2Nlc3Nfc3RydWN0dXJlIAkob2JqZWN0IFByb2Nlc3NlcwotCXF1aWQgICAgICAgCSIzQUM5MTA1MTAzMjYiCi0JUHJvY3NORGV2cyAJKGxpc3QKLQkgICAgKG9iamVjdCBQcm9jZXNzX0RpYWdyYW0gIkRlcGxveW1lbnQgVmlldyIKLQkJcXVpZCAgICAgICAJIjNBQzkxMDUxMDMyOCIKLQkJdGl0bGUgICAgICAJIkRlcGxveW1lbnQgVmlldyIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICBwcm9wZXJ0aWVzIAkob2JqZWN0IFByb3BlcnRpZXMKLQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlIgotCQkJdmFsdWUgICAgICAJKCJEYXRhQmFzZVNldCIgODAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiQU5TSSIKLQkJCQl2YWx1ZSAgICAgIAk4MDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJPcmFjbGUiCi0JCQkJdmFsdWUgICAgICAJODAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiU1FMU2VydmVyIgotCQkJCXZhbHVlICAgICAgCTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIlN5YmFzZSIKLQkJCQl2YWx1ZSAgICAgIAk4MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJXYXRjb20iCi0JCQkJdmFsdWUgICAgICAJODA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uTmFtZSIKLQkJCXZhbHVlICAgICAgCSJJZCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJOVU1CRVIoNSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiVl8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lIgotCQkJdmFsdWUgICAgICAJIlRfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiX1YiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQmFzZVZpZXdzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJWQVJDSEFSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiTnVsbHNPSyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkNvbXBvc2l0ZVVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiZnJhbWV3b3JrIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByZXNlcnZlUmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMRWxlbWVudCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExTcGVjaWZpY2F0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSURMU3BlY1NldCIgMjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMU3BlY1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkludGVyZmFjZSIKLQkJCQl2YWx1ZSAgICAgIAkyMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlR5cGVkZWYiCi0JCQkJdmFsdWUgICAgICAJNTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFbnVtZXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFeGNlcHRpb24iCi0JCQkJdmFsdWUgICAgICAJNjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTdHJ1Y3QiCi0JCQkJdmFsdWUgICAgICAJNTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJVbmlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4MSkpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLm1pbWUvc3JjL3Jvc2UvbWltZWJpbmRpbmdNREwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUlETE1vZHVsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVCeVNpbXBsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5taW1lL3NyYy9yb3NlL21pbWViaW5kaW5nTURMLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJSYWlzZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkSGFzUmVsVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSGFzUmVsVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSGFzUmVsVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkUm9sZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkFzc29jVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fU3Vic3lzdGVtIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlVzZVByZWZpeGVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5zdGFuY2VWYXJpYWJsZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJtXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ2xhc3NWYXJpYWJsZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJzXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdEF0dHJpYnV0ZURhdGFUeXBlIgotCQkJdmFsdWUgICAgICAJImludCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdE9wZXJhdGlvblJldHVyblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkidm9pZCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUm9vdERpciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkF1dG9TeW5jIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2hvd0NvZGVnZW5EbGciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jRGVmYXVsdEF1dGhvciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0VmVyc2lvbiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0U2luY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jTnVtQXN0ZXJpc2tzIgotCQkJdmFsdWUgICAgICAJMCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNYXhOdW1DaGFycyIKLQkJCXZhbHVlICAgICAgCTgwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVkaXRvciIKLQkJCXZhbHVlICAgICAgCSgiRWRpdG9yVHlwZSIgMTAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWTSIKLQkJCXZhbHVlICAgICAgCSgiVk1UeXBlIiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNsYXNzUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVkaXRvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRJbiIKLQkJCQl2YWx1ZSAgICAgIAkxMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV2luZG93c1NoZWxsIgotCQkJCXZhbHVlICAgICAgCTEwMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZNVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdW4iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk1pY3Jvc29mdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiSUJNIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk5vQ2xhc3NDdXN0b21EbGciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHbG9iYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk9wZW5CcmFjZUNsYXNzU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk9wZW5CcmFjZU1ldGhvZFN0eWxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJVc2VUYWJzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlU3BhY2VzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTcGFjaW5nSXRlbXMiCi0JCQl2YWx1ZSAgICAgIAkzKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJvc2VEZWZhdWx0Q29tbWVudFN0eWxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBc3Rlcmlza0NvbW1lbnRTdHlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFDb21tZW50U3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jQXV0aG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY1NpbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY1ZlcnNpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvZGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc2FibGVBdXRvU3luYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXROYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRleHRSZWYiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJc1NpbmdsZVRocmVhZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbml0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJc1NlY3VyZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclBhdGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaGVySW5jbHVkZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJGb3J3YXJkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFNlY3VyaXR5Um9sZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Z2V0SW5mbyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGVzTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0QXR0cmlidXRlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RQYXJhbWV0ZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckhlYWRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW50SGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldERhdGVIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29va2llIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yQ29va2llIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRlbnRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVIVE1MIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVfWE1MX0REIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJDbXBGaWVsZCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkVudmlyb25tZW50UHJvcGVydGllcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNueEZhY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWZlcmVuY2VzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQk5hbWVJbkpBUiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlc3Npb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJTZXNzaW9uVHlwZV9TZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3RhdGVsZXNzIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWZ1bCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlRyYW5zYWN0aW9uVHlwZV9TZXQiIDIxMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb250YWluZXIiCi0JCQkJdmFsdWUgICAgICAJMjExKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjEyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJQZXJzaXN0ZW5jZVR5cGVfU2V0IiAyMjApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIyMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCZWFuIgotCQkJCXZhbHVlICAgICAgCTIyMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb250YWluZXIiCi0JCQkJdmFsdWUgICAgICAJMjIyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUmVlbnRyYW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQk1QX0V4dGVuZF9DTVAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTmF0aXZlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3luY2hyb25pemVkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkJlYW5Qcm9wZXJ0eV9TZXQiIDcxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCZWFuUHJvcGVydHlfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk5vdCBBIFByb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTcxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAk3MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCb3VuZCIKLQkJCQl2YWx1ZSAgICAgIAk3MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJhaW5lZCIKLQkJCQl2YWx1ZSAgICAgIAk3NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluZGl2aWR1YWxDaGFuZ2VNZ3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlIgotCQkJdmFsdWUgICAgICAJKCJSZWFkL1dyaXRlX1NldCIgODEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgJiBXcml0ZSIKLQkJCQl2YWx1ZSAgICAgIAk4MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV3JpdGUgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRnVsbHlRdWFsaWZpZWRUeXBlcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlRyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUHJvcGVydHlUeXBlIgotCQkJdmFsdWUgICAgICAJKCJCZWFuUHJvcGVydHlfU2V0IiA3MSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQmVhblByb3BlcnR5X1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJOb3QgQSBQcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk3MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJNzIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQm91bmQiCi0JCQkJdmFsdWUgICAgICAJNzMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29uc3RyYWluZWQiCi0JCQkJdmFsdWUgICAgICAJNzQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbmRpdmlkdWFsQ2hhbmdlTWd0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUmVhZC9Xcml0ZSIKLQkJCXZhbHVlICAgICAgCSgiUmVhZC9Xcml0ZV9TZXQiIDgxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkICYgV3JpdGUiCi0JCQkJdmFsdWUgICAgICAJODEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUmVhZCBPbmx5IgotCQkJCXZhbHVlICAgICAgCTgyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIldyaXRlIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZ1bGx5UXVhbGlmaWVkVHlwZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJc05hdmlnYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiMzYwMDAwMDAyIikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiRERMU2NyaXB0RmlsZW5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiRERMMS5TUUwiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkRyb3BDbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uTmFtZSIKLQkJCXZhbHVlICAgICAgCSJfSUQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIk5VTUJFUig1LDApIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2hlbWFOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NoZW1hTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlR5cGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHlwZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmFycmF5TmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZhcnJheU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOZXN0ZWRUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOZXN0ZWRUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPYmplY3RUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPYmplY3RUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNTY2hlbWEiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT0lEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiV2hlcmVDbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZUxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlUHJlY2lzaW9uIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVTY2FsZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25PZlJFRlMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIk1ldGhvZEtpbmRTZXQiIDE5MDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk92ZXJsb2FkSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUmVhZE5vRGF0YVN0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkTm9Qcm9jZXNzU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1dyaXRlTm9EYXRhU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1dyaXRlTm9Qcm9jZXNzU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1NlbGZpc2giCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlclR5cGVTZXQiIDE4MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJFdmVudCIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlckV2ZW50U2V0IiAxNjAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVGV4dCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJSZWZlcmVuY2luZ05hbWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckZvckVhY2giCi0JCQl2YWx1ZSAgICAgIAkoIlRyaWdnZXJGb3JFYWNoU2V0IiAxNzAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyV2hlbkNsYXVzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiTWFwTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTE5MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiT3JkZXJNZXRob2QiCi0JCQkJdmFsdWUgICAgICAJMTkwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJGdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxOTAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlByb2NlZHVyZSIKLQkJCQl2YWx1ZSAgICAgIAkxOTA0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIk9wZXJhdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJEZXN0cnVjdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDcpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVHJpZ2dlciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkNhbGN1bGF0ZWQiCi0JCQkJdmFsdWUgICAgICAJMTkwOSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkFGVEVSIgotCQkJCXZhbHVlICAgICAgCTE4MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQkVGT1JFIgotCQkJCXZhbHVlICAgICAgCTE4MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TVEVBRCBPRiIKLQkJCQl2YWx1ZSAgICAgIAkxODAzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckZvckVhY2hTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiUk9XIgotCQkJCXZhbHVlICAgICAgCTE3MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiU1RBVEVNRU5UIgotCQkJCXZhbHVlICAgICAgCTE3MDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRXZlbnRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIgotCQkJCXZhbHVlICAgICAgCTE2MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVVBEQVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIFVQREFURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJVUERBVEUgT1IgREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIFVQREFURSBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTnVsbHNBbGxvd2VkIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJMZW5ndGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmVjaXNpb24iCi0JCQl2YWx1ZSAgICAgIAkiMiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NhbGUiCi0JCQl2YWx1ZSAgICAgIAkiNiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNJbmRleCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUHJpbWFyeUtleSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbXBvc2l0ZVVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVzZU1TVkMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJoIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZUJhY2t1cEV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJofiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhlYWRlckZpbGVUZW1wb3JhcnlFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiaCMiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcHAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZUJhY2t1cEV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcH4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZVRlbXBvcmFyeUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcCMiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcnJvckxpbWl0IgotCQkJdmFsdWUgICAgICAJMzApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIkUk9TRUNQUF9TT1VSQ0UiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQYXRoU2VwYXJhdG9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lRm9ybWF0IgotCQkJdmFsdWUgICAgICAJIjEyOHZ4X2IiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb29sZWFuVHlwZSIKLQkJCXZhbHVlICAgICAgCSJpbnQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd1RlbXBsYXRlcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93RXhwbGljaXRJbnN0YW50aWF0aW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93UHJvdGVjdGVkSW5oZXJpdGFuY2UiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb21tZW50V2lkdGgiCi0JCQl2YWx1ZSAgICAgIAk2MCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT25lQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPbmVCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbmFsQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJPcHRpb25hbEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbmFsQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICoiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaXhlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRGaXhlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaXhlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRGaXhlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkTGlzdEJ5VmFsdWU8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRCb3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkU2V0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkTGlzdEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkQm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRTZXRCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVuYm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkTGlzdEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFVuYm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkU2V0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5ib3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkTGlzdEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRVbmJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRTZXRCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJBc3NvY2lhdGlvbkJ5VmFsdWU8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkUXVhbGlmaWVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJEaWN0aW9uYXJ5QnlWYWx1ZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJBc3NvY2lhdGlvbkJ5UmVmZXJlbmNlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFF1YWxpZmllZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkRpY3Rpb25hcnlCeVJlZmVyZW5jZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByZXNlcnZlUmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNsYXNzS2V5IgotCQkJdmFsdWUgICAgICAJImNsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQdXRCb2RpZXNJblNwZWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0Q29uc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeHBsaWNpdERlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvcHlDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvcHlDb25zdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQ29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4cGxpY2l0Q29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVzdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3JLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NpZ25tZW50T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzaWdubWVudFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzaWdubWVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzaWdubWVudE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVxdWFsaXR5T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVxdWFsaXR5VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcXVhbGl0eUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZyaWVuZEtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUVxdWFsaXR5T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVJlbGF0aW9uYWxPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlJlbGF0aW9uYWxWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlJlbGF0aW9uYWxLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGcmllbmRLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVSZWxhdGlvbmFsT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0b3JhZ2VNZ210T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdG9yYWdlTWdtdFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3RvcmFnZU1nbXRPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3Vic2NyaXB0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0S2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRSZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVN1YnNjcmlwdE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlcmVmZXJlbmNlT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VSZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlcmVmZXJlbmNlT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5kaXJlY3Rpb25PcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25WaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvblJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lSW5kaXJlY3Rpb25PcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdHJlYW1PcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0cmVhbVZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3RyZWFtT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJUaHJlZUtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGcmllbmRLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEZWNsYXJlQW5kRGVmaW5lIgotCQkJCXZhbHVlICAgICAgCTE5OSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRGVjbGFyZU9ubHkiCi0JCQkJdmFsdWUgICAgICAJMjA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEb05vdERlY2xhcmUiCi0JCQkJdmFsdWUgICAgICAJMjA2KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5taW1lL3NyYy9yb3NlL21pbWViaW5kaW5nTURMLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZU9yZGVyIgotCQkJdmFsdWUgICAgICAJIkFNSVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAkoIklubGluaW5nU3R5bGVTZXQiIDIwNykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkluQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZvbGxvd2luZ0NsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA3KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlR5cGVzRGVmaW5lZCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUNsb3N1cmUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5taW1lL3NyYy9yb3NlL21pbWViaW5kaW5nTURMLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZCIKLQkJCXZhbHVlICAgICAgCSgiT3BlcmF0aW9uS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVudHJ5Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhpdENvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9keUFubm90YXRpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmFpc2VzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9yZGVyZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZWxlY3Rvck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2VsZWN0b3JUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhhc1JlbFR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0Fzc29jaWF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHRhcmdldENsYXNzIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Jbmhlcml0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluc3RhbmNlQXJndW1lbnRzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyR2V0IgotCQkJdmFsdWUgICAgICAJIiRkYXRhLmdldCgka2V5cykiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJTZXQiCi0JCQl2YWx1ZSAgICAgIAkiJGRhdGEuc2V0KCRrZXlzLCR2YWx1ZSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0NvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkc3VwcGxpZXIgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAkoIlF1YWxpZmllZEdldFNldEJ5UmVmZXJlbmNlU2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2VTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19HZXRTZXRCeVJlZmVyZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUXVhbGlmaWVkR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUXVhbGlmaWVkR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVRdWFsaWZpZWRTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVF1YWxpZmllZFNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0RhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0dldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc29jQ2xhc3NHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc29jQ2xhc3NTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzb2NDbGFzc1NldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRBdHRyaWJ1dGVWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2FzZVNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb2R5UmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnlJc09uU2VhcmNoTGlzdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGVudCIKLQkJCXZhbHVlICAgICAgCTIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJIjUuMCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNDbGFzc1R5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNDbGFzc1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiSW50ZXJmYWNlX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDb25uZWN0aW9uX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDbGFzc19GYWN0b3J5IgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT2JqZWN0RnVuY3Rpb25hbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiQ09iamVjdEZ1bmN0aW9uYWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPYmplY3RGdW5jdGlvbmFsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEeW5hbWljIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRHluY3JlYXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU2VyaWFsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU92ZXJyaWRlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9EQVRBX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaWVsZEdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0ZJRUxEX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNZXNzYWdlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1lc3NhZ2VNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1FU1NBR0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSgiT0xFRmFjdG9yeVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRfaW4iCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJMaWNlbnNlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUNsYXNzSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU9MRUN0bFR5cGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDdGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVPTEVUeXBlTGliIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYklEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1ham9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1pbm9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcm9wUGFnZUlEcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVByb3BQYWdlSURzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGlzcGF0Y2hNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRnVuY3Rpb25zIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoRGVmVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURpc3BJZEVudW0iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUF9JRF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW50ZXJmYWNlTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSU5URVJGQUNFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaXRJbnRlcmZhY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUV2ZW50TWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRXZlbnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXZlbnRTaW5rTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlByb3BOb3RpZnlTaW5rcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvbm5lY3Rpb25NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNvbm5lY3Rpb25Qb2ludElJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRhbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ29tbWFuZHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDSW1wbGVtZW50cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBVExfRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDT01NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT01fTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb25uZWN0aW9uUG9pbnRNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX1BPSU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTXNnTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJvcGVydHlNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQUk9QRVJUWV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNPcGVyYXRpb25UeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDT3BlcmF0aW9uVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsX092ZXJyaWRlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVzc2FnZV9IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlzcGF0Y2hfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X0ZpcmluZ19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X1NpbmtfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAk1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0ZF9PTEVfTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQ29tbWFuZF9QYXJzZXIiCi0JCQkJdmFsdWUgICAgICAJNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9HZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9TZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9Ob3RpZnlfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWFjcm9fR2VuZXJhdGVkX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTExKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX01TR19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRVNTQUdFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkJvZHlJbWFnZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5jbHVkZXNHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9JTkNMVURFU19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zZXJ0TG9jYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmNsdWRlc0dyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0lOQ0xVREVTX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnNlcnRMb2NhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiU0NDIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJUeXBlTGliSW1wb3J0ZXIiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI3ODM2MDYzNzgiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljTm90Q3JlYXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTIxMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlNpbmdsZVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJHbG9iYWxTaW5nbGVVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiR2xvYmFsTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjIwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25CYXNlIgotCQkJdmFsdWUgICAgICAJIjAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uQ29tcGFyZSIKLQkJCXZhbHVlICAgICAgCSgiQ29tcGFyZVNldCIgMjAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZSIKLQkJCXZhbHVlICAgICAgCSgiQ3JlYXRhYmxlU2V0IiAyMjEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbml0aWFsaXphdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVUZXJtaW5hdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbkNsYXNzIgotCQkJdmFsdWUgICAgICAJIkNvbGxlY3Rpb24iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29tcGFyZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiQmluYXJ5IgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlRleHQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkb3BlcmF0aW9uIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkxpYnJhcnlOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJBbGlhc05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIklzU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFbnRyeUNvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFeGl0Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOZXciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIldpdGhFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZSRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTGV0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5ldyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiV2l0aEV2ZW50cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVMZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSW5oZXJpdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50c0RlbGVnYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiUHJvamVjdEZpbGUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWxTdHVkaW8iCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yIgotCQkJdmFsdWUgICAgICAJKCJFZGl0b3JUeXBlIiAxMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkVkaXRvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIkJ1aWx0SW4iCi0JCQkJdmFsdWUgICAgICAJMTAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJCW5hbWUgICAgICAgCSJXaW5kb3dzU2hlbGwiCi0JCQkJdmFsdWUgICAgICAJMTAxKSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICVRJSAlWiUgJVclIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgJVElICVaJSAlVyUiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFycmF5RGltZW5zaW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFycmF5RGltZW5zaW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIk9yZGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJEZWZhdWx0X1NlcnZsZXRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGV4dFJlZiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzU2luZ2xlVGhyZWFkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldElzU2VjdXJlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJJbmNsdWRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckZvcndhcmQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0U2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRnZXRJbmZvIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkh0dHBfU2VydmxldF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdEF0dHJpYnV0ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlc05hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yUmVxdWVzdEF0dHJpYnV0ZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdFBhcmFtZXRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0UGFyYW1ldGVycyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SGVhZGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JIZWFkZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEludEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXREYXRlSGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvb2tpZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckNvb2tpZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb250ZW50VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSFRNTCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJEZWZhdWx0X0VKQl9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZV9YTUxfREQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNtcEZpZWxkIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCRW52aXJvbm1lbnRQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ254RmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZmVyZW5jZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCTmFtZUluSkFSIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlNlc3Npb25UeXBlX1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWxlc3MiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlZnVsIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIgMjExKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiIDIyMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjIwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMjIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWVudHJhbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCTVBfRXh0ZW5kX0NNUCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlIyRWRpdG9yIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJSb3NlIE1vZGVsIEludGVncmF0b3IiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJvc2UgV2ViIFB1Ymxpc2hlciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmVyc2lvbiBDb250cm9sIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJSZXBvc2l0b3J5IgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjkiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DYXRlZ29yeSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwYWNrYWdlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1ByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1VSSSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJiYXNlUGFja2FnZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImNsYXNzaWZpZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImNvbnN0cmFpbnRzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sQ29udGVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkNvbnRlbnRLaW5kIiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiQ29udGVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlVuc3BlY2lmaWVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVtcHR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJNaXhlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50T25seSIKLQkJCQl2YWx1ZSAgICAgIAk0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkib3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYXR0cmlidXRlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzQ2hhbmdlYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5zZXR0YWJsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzSUQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRmVhdHVyZUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkF0dHJpYnV0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkicmVmZXJlbmNlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzQ2hhbmdlYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5zZXR0YWJsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1Jlc29sdmVQcm94aWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRmVhdHVyZUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkF0dHJpYnV0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpKQotCXF1aWQgICAgICAgCSIzQUM5MTA1MTAzMjciKSkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5lY29yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYyMWFhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1NPQVAuZWNvcmUKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJzb2FwIgotICAgIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9TT0FQIiBuc1ByZWZpeD0ic29hcCI+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUEJpbmRpbmciIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSVNPQVBCaW5kaW5nIj4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idHJhbnNwb3J0VVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InN0eWxlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNPQVBCb2R5IiBlU3VwZXJUeXBlcz0iV1NETC5lY29yZSMvL0V4dGVuc2liaWxpdHlFbGVtZW50ICMvL0lTT0FQQm9keSI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lc3BhY2VVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZUVuY29kaW5nU3R5bGVzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL0lTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVBhcnRzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vUGFydCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTT0FQSGVhZGVyQmFzZSIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCI+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEVuY29kaW5nU3R5bGVzIiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9JTGlzdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRFbmNvZGluZ1N0eWxlcyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZW5jb2RpbmdTdHlsZXMiIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL0lMaXN0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlRW5jb2RpbmdTdHlsZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vSVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtZXNzYWdlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIFdTREwuZWNvcmUjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwYXJ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVNZXNzYWdlIiBsb3dlckJvdW5kPSIxIgotICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9NZXNzYWdlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQYXJ0IiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9QYXJ0Ii8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNPQVBGYXVsdCIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JU09BUEZhdWx0Ij4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlRW5jb2RpbmdTdHlsZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vSVN0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ic3VwcHJlc3NlZEdldFZpc2liaWxpdHkiIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUE9wZXJhdGlvbiIgZVN1cGVyVHlwZXM9IldTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCAjLy9JU09BUE9wZXJhdGlvbiI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNvYXBBY3Rpb25VUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3R5bGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUEFkZHJlc3MiIGVTdXBlclR5cGVzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQgIy8vSVNPQVBBZGRyZXNzIj4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb25VUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU09BUEhlYWRlckZhdWx0IiBlU3VwZXJUeXBlcz0iIy8vU09BUEhlYWRlckJhc2UgIy8vSVNPQVBIZWFkZXJGYXVsdCIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNPQVBIZWFkZXIiIGVTdXBlclR5cGVzPSIjLy9TT0FQSGVhZGVyQmFzZSAjLy9JU09BUEhlYWRlciI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImhlYWRlckZhdWx0cyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9TT0FQSGVhZGVyRmF1bHQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IklTdHJpbmciIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLmxhbmcuU3RyaW5nIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBCaW5kaW5nIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmciCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBBZGRyZXNzIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBCb2R5IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RW5jb2RpbmdTdHlsZXMiIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL0lMaXN0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldEVuY29kaW5nU3R5bGVzIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJlbmNvZGluZ1N0eWxlcyIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vSUxpc3QiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQYXJ0cyIgZVR5cGU9ImVjb3JlOkVDbGFzcyBXU0RMLmVjb3JlIy8vSUxpc3QiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0UGFydHMiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBhcnRzIiBlVHlwZT0iZWNvcmU6RUNsYXNzIFdTREwuZWNvcmUjLy9JTGlzdCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklTT0FQRmF1bHQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBPcGVyYXRpb24iIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklTT0FQSGVhZGVyRmF1bHQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVNPQVBIZWFkZXIiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFNPQVBIZWFkZXJGYXVsdHMiIGVUeXBlPSJlY29yZTpFQ2xhc3MgV1NETC5lY29yZSMvL0lMaXN0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFNPQVBIZWFkZXJGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ic29hcEhlYWRlckZhdWx0IiBlVHlwZT0iIy8vSVNPQVBIZWFkZXJGYXVsdCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5nZW5tb2RlbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5nZW5tb2RlbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg2MjNlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1NPQVAuZ2VubW9kZWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKLSAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcCIKLSAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMiCi0gICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIG1vZGVsTmFtZT0iU09BUCIgZWRpdFBsdWdpbkNsYXNzPSIiIGVkaXRvclBsdWdpbkNsYXNzPSIiCi0gICAgbm9uTkxTTWFya2Vycz0idHJ1ZSIgY29kZUZvcm1hdHRpbmc9InRydWUiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5yb3NlIgotICAgIHVzZWRHZW5QYWNrYWdlcz0iV1NETC5nZW5tb2RlbCMvL3dzZGwgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmdlbm1vZGVsIy8veHNkIj4KLSAgPGZvcmVpZ25Nb2RlbD5TT0FQLm1kbDwvZm9yZWlnbk1vZGVsPgotICA8Zm9yZWlnbk1vZGVsPlZBQkFTRV9QTFVHSU5TX1BBVEg8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD4uLi8uLi8uLjwvZm9yZWlnbk1vZGVsPgotICA8Z2VuUGFja2FnZXMgcHJlZml4PSJTT0FQIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKLSAgICAgIGNsYXNzUGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwuaW1wbCIgdXRpbGl0eVBhY2thZ2VTdWZmaXg9ImludGVybmFsLnV0aWwiIGVjb3JlUGFja2FnZT0iU09BUC5lY29yZSMvIj4KLSAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9IlNPQVAuZWNvcmUjLy9JU3RyaW5nIi8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL1NPQVBCaW5kaW5nIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEJpbmRpbmcvdHJhbnNwb3J0VVJJIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBCaW5kaW5nL3N0eWxlIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQQm9keSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBCb2R5L3VzZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQQm9keS9uYW1lc3BhY2VVUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEJvZHkvZUVuY29kaW5nU3R5bGVzIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgU09BUC5lY29yZSMvL1NPQVBCb2R5L2VQYXJ0cyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyQmFzZS91c2UiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UvbmFtZXNwYWNlVVJJIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBIZWFkZXJCYXNlL2VFbmNvZGluZ1N0eWxlcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyQmFzZS9tZXNzYWdlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBIZWFkZXJCYXNlL3BhcnQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UvZU1lc3NhZ2UiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UvZVBhcnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2UvZ2V0RW5jb2RpbmdTdHlsZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vU09BUEhlYWRlckJhc2Uvc2V0RW5jb2RpbmdTdHlsZXMiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iU09BUC5lY29yZSMvL1NPQVBIZWFkZXJCYXNlL3NldEVuY29kaW5nU3R5bGVzL2VuY29kaW5nU3R5bGVzIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQRmF1bHQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQRmF1bHQvdXNlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBGYXVsdC9uYW1lc3BhY2VVUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBTT0FQLmVjb3JlIy8vU09BUEZhdWx0L2VFbmNvZGluZ1N0eWxlcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQRmF1bHQvbmFtZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJTT0FQLmVjb3JlIy8vU09BUE9wZXJhdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBPcGVyYXRpb24vc29hcEFjdGlvblVSSSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFNPQVAuZWNvcmUjLy9TT0FQT3BlcmF0aW9uL3N0eWxlIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQQWRkcmVzcyI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgU09BUC5lY29yZSMvL1NPQVBBZGRyZXNzL2xvY2F0aW9uVVJJIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyRmF1bHQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJTT0FQLmVjb3JlIy8vU09BUEhlYWRlciI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFNPQVAuZWNvcmUjLy9TT0FQSGVhZGVyL2hlYWRlckZhdWx0cyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9JU09BUEJpbmRpbmciLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9JU09BUEFkZHJlc3MiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9JU09BUEJvZHkiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IlNPQVAuZWNvcmUjLy9JU09BUEJvZHkvZ2V0RW5jb2RpbmdTdHlsZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vSVNPQVBCb2R5L3NldEVuY29kaW5nU3R5bGVzIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IlNPQVAuZWNvcmUjLy9JU09BUEJvZHkvc2V0RW5jb2RpbmdTdHlsZXMvZW5jb2RpbmdTdHlsZXMiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vSVNPQVBCb2R5L2dldFBhcnRzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iU09BUC5lY29yZSMvL0lTT0FQQm9keS9zZXRQYXJ0cyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJTT0FQLmVjb3JlIy8vSVNPQVBCb2R5L3NldFBhcnRzL3BhcnRzIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL0lTT0FQRmF1bHQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9JU09BUE9wZXJhdGlvbiIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iU09BUC5lY29yZSMvL0lTT0FQSGVhZGVyRmF1bHQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IlNPQVAuZWNvcmUjLy9JU09BUEhlYWRlciI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iU09BUC5lY29yZSMvL0lTT0FQSGVhZGVyL2dldFNPQVBIZWFkZXJGYXVsdHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJTT0FQLmVjb3JlIy8vSVNPQVBIZWFkZXIvYWRkU09BUEhlYWRlckZhdWx0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IlNPQVAuZWNvcmUjLy9JU09BUEhlYWRlci9hZGRTT0FQSGVhZGVyRmF1bHQvc29hcEhlYWRlckZhdWx0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICA8L2dlblBhY2thZ2VzPgotPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5tZGwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1NPQVAubWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzIwZjMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvU09BUC5tZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2MjMzICswLDAgQEAKLQotKG9iamVjdCBQZXRhbAotICAgIHZlcnNpb24gICAgCTQyCi0gICAgX3dyaXR0ZW4gICAJIlJvc2UgNC41LjgxNjMuMyIKLSAgICBjaGFyU2V0ICAgIAkwKQotCi0ob2JqZWN0IERlc2lnbiAiTG9naWNhbCBWaWV3IgotICAgIGlzX3VuaXQgICAgCVRSVUUKLSAgICBpc19sb2FkZWQgIAlUUlVFCi0gICAgZGVmYXVsdHMgICAJKG9iamVjdCBkZWZhdWx0cwotCXJpZ2h0TWFyZ2luIAkwLjI1MDAwMAotCWxlZnRNYXJnaW4gCTAuMjUwMDAwCi0JdG9wTWFyZ2luICAJMC4yNTAwMDAKLQlib3R0b21NYXJnaW4gCTAuNTAwMDAwCi0JcGFnZU92ZXJsYXAgCTAuMjUwMDAwCi0JY2xpcEljb25MYWJlbHMgCVRSVUUKLQlhdXRvUmVzaXplIAlUUlVFCi0Jc25hcFRvR3JpZCAJVFJVRQotCWdyaWRYICAgICAgCTE2Ci0JZ3JpZFkgICAgICAJMTYKLQlkZWZhdWx0Rm9udCAJKG9iamVjdCBGb250Ci0JICAgIHNpemUgICAgICAgCTEwCi0JICAgIGZhY2UgICAgICAgCSJBcmlhbCIKLQkgICAgYm9sZCAgICAgICAJRkFMU0UKLQkgICAgaXRhbGljcyAgICAJRkFMU0UKLQkgICAgdW5kZXJsaW5lICAJRkFMU0UKLQkgICAgc3RyaWtlICAgICAJRkFMU0UKLQkgICAgY29sb3IgICAgICAJMAotCSAgICBkZWZhdWx0X2NvbG9yIAlUUlVFKQotCXNob3dNZXNzYWdlTnVtIAkxCi0Jc2hvd0NsYXNzT2ZPYmplY3QgCVRSVUUKLQlub3RhdGlvbiAgIAkiVW5pZmllZCIpCi0gICAgcm9vdF91c2VjYXNlX3BhY2thZ2UgCShvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIlVzZSBDYXNlIFZpZXciCi0JcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2NCIKLQlleHBvcnRDb250cm9sIAkiUHVibGljIgotCWdsb2JhbCAgICAgCVRSVUUKLQlsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdCkKLQlsb2dpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBVc2VDYXNlRGlhZ3JhbSAiTWFpbiIKLQkJcXVpZCAgICAgICAJIjM5RTI3RjA4MDA3OCIKLQkJdGl0bGUgICAgICAJIk1haW4iCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QpKSkpCi0gICAgcm9vdF9jYXRlZ29yeSAJKG9iamVjdCBDbGFzc19DYXRlZ29yeSAiTG9naWNhbCBWaWV3IgotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjMiCi0JZXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQlnbG9iYWwgICAgIAlUUlVFCi0Jc3Vic3lzdGVtICAJIkNvbXBvbmVudCBWaWV3IgotCXF1aWR1ICAgICAgCSIzOUUyN0YwODAwNjUiCi0JbG9naWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBDbGFzc19DYXRlZ29yeSAid3NkbCIKLQkJaXNfdW5pdCAgICAJVFJVRQotCQlpc19sb2FkZWQgIAlGQUxTRQotCQlmaWxlX25hbWUgIAkiJFZBQkFTRV9QTFVHSU5TX1BBVEhcXG9yZy5lY2xpcHNlLndzdC53c2RsXFxtb2RlbFxcb3JnLmVjbGlwc2Uud3N0LldTREwuY2F0IgotCQlxdWlkICAgICAgIAkiM0FERkI4RTUwMjFFIikKLQkgICAgKG9iamVjdCBDbGFzc19DYXRlZ29yeSAic29hcCIKLQkJYXR0cmlidXRlcyAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1ByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJzb2FwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkibnNVUkkiCi0JCQl2YWx1ZSAgICAgIAkiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvU09BUCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImJhc2VQYWNrYWdlIgotCQkJdmFsdWUgICAgICAJIm9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmciKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiU09BUCIpKQotCQlxdWlkICAgICAgIAkiM0EwMUNGMEMwMUEyIgotCQlleHBvcnRDb250cm9sIAkiUHVibGljIgotCQlsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEJpbmRpbmciCi0JCQlxdWlkICAgICAgIAkiM0EwMUQzQjkwMUFEIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTA5QTM4MDFBQiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0NUU0ODk1NTAyQkYiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBCaW5kaW5nIgotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODVBMjAwMUYiKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidHJhbnNwb3J0VVJJIgotCQkJCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQpCi0JCQkJcXVpZCAgICAgICAJIjNBMDFEM0RGMDFFNCIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJzdHlsZSIKLQkJCQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0KQotCQkJCXF1aWQgICAgICAgCSIzQTAxRDNGMTAyOUUiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEJvZHkiCi0JCQlxdWlkICAgICAgIAkiM0EwMURFRDUwMzFGIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTA5QTQ1MDA0MSIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0NUU0OEE1QjAwQkIiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBCb2R5IgotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODg0QjAxMTkiKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidXNlIgotCQkJCXF1aWQgICAgICAgCSIzQTAxRTJENTAxQTUiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZXNwYWNlVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQTkzNDc3QzAxQjIiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZUVuY29kaW5nU3R5bGVzIgotCQkJCWF0dHJpYnV0ZXMgCShsaXN0IEF0dHJpYnV0ZV9TZXQpCi0JCQkJcXVpZCAgICAgICAJIjQ1RUM5OEE2MDI3MSIKLQkJCQlzdGVyZW90eXBlIAkiMC4uKiIKLQkJCQl0eXBlICAgICAgIAkiSVN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEhlYWRlckJhc2UiCi0JCQlxdWlkICAgICAgIAkiM0EwMURFRTcwMzREIgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTA5QTNFMDMyNiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikpCi0JCQlvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImdldEVuY29kaW5nU3R5bGVzIgotCQkJCXF1aWQgICAgICAgCSI0NUVEMDRDMjAwRUEiCi0JCQkJcmVzdWx0ICAgICAJIklMaXN0IgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAic2V0RW5jb2RpbmdTdHlsZXMiCi0JCQkJcXVpZCAgICAgICAJIjQ1RUQwNTczMDIyMiIKLQkJCQlwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkJICAgIChvYmplY3QgUGFyYW1ldGVyICJlbmNvZGluZ1N0eWxlcyIKLQkJCQkJdHlwZSAgICAgICAJIklMaXN0IikpCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidXNlIgotCQkJCXF1aWQgICAgICAgCSIzQUQ2MkU5QzAwNTYiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZXNwYWNlVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQUQ2MkVBMjAyNUQiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZUVuY29kaW5nU3R5bGVzIgotCQkJCXF1aWQgICAgICAgCSIzRUU0QTU4RjAxQUUiCi0JCQkJc3RlcmVvdHlwZSAJIjAuLioiCi0JCQkJdHlwZSAgICAgICAJIklTdHJpbmciKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm1lc3NhZ2UiCi0JCQkJcXVpZCAgICAgICAJIjQ1RjA2RTM2MDE4NiIKLQkJCQl0eXBlICAgICAgIAkiUU5hbWUiKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInBhcnQiCi0JCQkJcXVpZCAgICAgICAJIjQ1RjA2RTZDMDE5NiIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJTT0FQRmF1bHQiCi0JCQlxdWlkICAgICAgIAkiM0EwNkQ5RkEwMEY3IgotCQkJc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjNBRTA5QTRBMDAyMCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IikKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSI0NUU0OEEwODAzMkMiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBGYXVsdCIKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4ODcwMTE5IikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInVzZSIKLQkJCQlxdWlkICAgICAgIAkiM0EwOTgyMUEwMTJCIgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm5hbWVzcGFjZVVSSSIKLQkJCQlxdWlkICAgICAgIAkiM0FENjIwNDgwM0FFIgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImVFbmNvZGluZ1N0eWxlcyIKLQkJCQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQkJbmFtZSAgICAgICAJInZpc2liaWxpdHkiCi0JCQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDEpKSkKLQkJCQlxdWlkICAgICAgIAkiM0VFNEE1NjMwM0FGIgotCQkJCXN0ZXJlb3R5cGUgCSIwLi4qIgotCQkJCXR5cGUgICAgICAgCSJJU3RyaW5nIikKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkJCXF1aWQgICAgICAgCSI0NUYwNzlEMTAzOTkiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUE9wZXJhdGlvbiIKLQkJCXF1aWQgICAgICAgCSIzQTBBRDQ1NTAwRTgiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FFMDlBNEUwMzFGIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4OTdGMDA3RCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUE9wZXJhdGlvbiIKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4QTUwMTI4IikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInNvYXBBY3Rpb25VUkkiCi0JCQkJcXVpZCAgICAgICAJIjNBMEFENDY0MDA0QSIKLQkJCQl0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCSAgICAob2JqZWN0IENsYXNzQXR0cmlidXRlICJzdHlsZSIKLQkJCQlxdWlkICAgICAgIAkiM0EwQUQ0NkMwMThDIgotCQkJCXR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIlNPQVBBZGRyZXNzIgotCQkJcXVpZCAgICAgICAJIjNBRDFGRjc1MDI4NyIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUUwOTUzNTAwOTgiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDVFNDhBN0UwMTA5IgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQQWRkcmVzcyIKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg3RTcwMEVBIikpCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImxvY2F0aW9uVVJJIgotCQkJCXF1aWQgICAgICAgCSIzQUQyMTFDOTAyNUMiCi0JCQkJdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEhlYWRlckZhdWx0IgotCQkJcXVpZCAgICAgICAJIjNBRDYzMkI4MDNERCIKLQkJCXN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJCSAgICAob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkJCXF1aWQgICAgICAgCSIzQUQ2MzMzNDAwMzgiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEhlYWRlckJhc2UiCi0JCQkJcXVpZHUgICAgICAJIjNBMDFERUU3MDM0RCIpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiNDVFRDA3OEMwMkZEIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQSGVhZGVyRmF1bHQiCi0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OEJEMDNBOSIpKQotCQkJbGFuZ3VhZ2UgICAJIkphdmEiKQotCQkgICAgKG9iamVjdCBDbGFzcyAiU09BUEhlYWRlciIKLQkJCXF1aWQgICAgICAgCSIzQUQ2MzMwOTAxNkQiCi0JCQlzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCQkgICAgKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJCQlxdWlkICAgICAgIAkiM0FENjMzMzAwMTdEIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBIZWFkZXJCYXNlIgotCQkJCXF1aWR1ICAgICAgCSIzQTAxREVFNzAzNEQiKQotCQkJICAgIChvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4OUJDMDMxQyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEhlYWRlciIKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4RTcwMDhDIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU3RyaW5nIgotCQkJcXVpZCAgICAgICAJIjNCOEREOTBDMDIyMCIKLQkJCXN0ZXJlb3R5cGUgCSJkYXRhdHlwZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YS5sYW5nLlN0cmluZyIKLQkJCQlxdWlkICAgICAgIAkiM0I4REQ5MzIwMzgzIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU09BUEJpbmRpbmciCi0JCQlxdWlkICAgICAgIAkiNDVFNDg1QTIwMDFGIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmciCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4NjM3MDFENCIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU09BUEFkZHJlc3MiCi0JCQlxdWlkICAgICAgIAkiNDVFNDg3RTcwMEVBIgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MiCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4N0Y2MDMzQyIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIgotCQkJCXR5cGUgICAgICAgCSJ0eXBlIgotCQkJCWluaXR2ICAgICAgCSJpbml0dmFsIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU09BUEJvZHkiCi0JCQlxdWlkICAgICAgIAkiNDVFNDg4NEIwMTE5IgotCQkJc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkJCW9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RW5jb2RpbmdTdHlsZXMiCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4RThEMDIyMiIKLQkJCQlyZXN1bHQgICAgIAkiSUxpc3QiCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKQotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJzZXRFbmNvZGluZ1N0eWxlcyIKLQkJCQlxdWlkICAgICAgIAkiNDVGNkQ2ODIwMjAzIgotCQkJCXBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCQkgICAgKG9iamVjdCBQYXJhbWV0ZXIgImVuY29kaW5nU3R5bGVzIgotCQkJCQl0eXBlICAgICAgIAkiSUxpc3QiKSkKLQkJCQljb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCQkJb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkJCXVpZCAgICAgICAgCTApCi0JCQkJKG9iamVjdCBPcGVyYXRpb24gImdldFBhcnRzIgotCQkJCXF1aWQgICAgICAgCSI0NUVDNThBMzAzMUMiCi0JCQkJcmVzdWx0ICAgICAJIklMaXN0IgotCQkJCWNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJCQlvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCQkJdWlkICAgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IE9wZXJhdGlvbiAic2V0UGFydHMiCi0JCQkJcXVpZCAgICAgICAJIjQ1RjZENjVBMDIwMyIKLQkJCQlwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkJICAgIChvYmplY3QgUGFyYW1ldGVyICJwYXJ0cyIKLQkJCQkJdHlwZSAgICAgICAJIklMaXN0IikpCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkiCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4ODU2MDIxMyIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIgotCQkJCXR5cGUgICAgICAgCSJ0eXBlIgotCQkJCWluaXR2ICAgICAgCSJpbml0dmFsIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU09BUEZhdWx0IgotCQkJcXVpZCAgICAgICAJIjQ1RTQ4ODg3MDExOSIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg4OTcwM0E5IgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiCi0JCQkJdHlwZSAgICAgICAJInR5cGUiCi0JCQkJaW5pdHYgICAgICAJImluaXR2YWwiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklTT0FQT3BlcmF0aW9uIgotCQkJcXVpZCAgICAgICAJIjQ1RTQ4OEE1MDEyOCIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24iCi0JCQkJcXVpZCAgICAgICAJIjQ1RTQ4OEFGMDBBQiIKLQkJCQlzdGVyZW90eXBlIAkiamF2YWNsYXNzIgotCQkJCXR5cGUgICAgICAgCSJ0eXBlIgotCQkJCWluaXR2ICAgICAgCSJpbml0dmFsIikpCi0JCQlsYW5ndWFnZSAgIAkiSmF2YSIpCi0JCSAgICAob2JqZWN0IENsYXNzICJJU09BUEhlYWRlckZhdWx0IgotCQkJcXVpZCAgICAgICAJIjQ1RTQ4OEJEMDNBOSIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQljbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg4Q0UwMjlGIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiCi0JCQkJdHlwZSAgICAgICAJInR5cGUiCi0JCQkJaW5pdHYgICAgICAJImluaXR2YWwiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQ2xhc3MgIklTT0FQSGVhZGVyIgotCQkJcXVpZCAgICAgICAJIjQ1RTQ4OEU3MDA4QyIKLQkJCXN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JCQlvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCQkgICAgKG9iamVjdCBPcGVyYXRpb24gImdldFNPQVBIZWFkZXJGYXVsdHMiCi0JCQkJcXVpZCAgICAgICAJIjQ1RUQwMzAyMDA4QyIKLQkJCQlyZXN1bHQgICAgIAkiSUxpc3QiCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKQotCQkJICAgIChvYmplY3QgT3BlcmF0aW9uICJhZGRTT0FQSGVhZGVyRmF1bHQiCi0JCQkJcXVpZCAgICAgICAJIjQ1RUQwMzk3MDJCRiIKLQkJCQlwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkJICAgIChvYmplY3QgUGFyYW1ldGVyICJzb2FwSGVhZGVyRmF1bHQiCi0JCQkJCXR5cGUgICAgICAgCSJJU09BUEhlYWRlckZhdWx0IikpCi0JCQkJY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkJCW9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJCQl1aWQgICAgICAgIAkwKSkKLQkJCWNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCQkgICAgKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciIKLQkJCQlxdWlkICAgICAgIAkiNDVFNDg4RjEwMEJCIgotCQkJCXN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiCi0JCQkJdHlwZSAgICAgICAJInR5cGUiCi0JCQkJaW5pdHYgICAgICAJImluaXR2YWwiKSkKLQkJCWxhbmd1YWdlICAgCSJKYXZhIikKLQkJICAgIChvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDAiCi0JCQlxdWlkICAgICAgIAkiM0EwNkUwQjUwMDM2IgotCQkJcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCQkgICAgKG9iamVjdCBSb2xlICIkVU5OQU1FRCQxIgotCQkJCXF1aWQgICAgICAgCSIzQTA2RTBCNjAwQzQiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEJvZHkiCi0JCQkJcXVpZHUgICAgICAJIjNBMDFERUQ1MDMxRiIpCi0JCQkgICAgKG9iamVjdCBSb2xlICJlUGFydHMiCi0JCQkJcXVpZCAgICAgICAJIjNBMDZFMEI2MDBDNSIKLQkJCQlsYWJlbCAgICAgIAkiZVBhcnRzIgotCQkJCXN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJCQljbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCQkJQ29udGFpbm1lbnQgCSJCeSBSZWZlcmVuY2UiCi0JCQkJaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JCSAgICAob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQyIgotCQkJcXVpZCAgICAgICAJIjNBRDYyREU2MDEzMCIKLQkJCXJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkJICAgIChvYmplY3QgUm9sZSAiZU1lc3NhZ2UiCi0JCQkJcXVpZCAgICAgICAJIjNBRDYyREU3MDA0QiIKLQkJCQlsYWJlbCAgICAgIAkiZU1lc3NhZ2UiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIKLQkJCQlxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkJCWNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJCQlpc19uYXZpZ2FibGUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBSb2xlICIkVU5OQU1FRCQzIgotCQkJCXF1aWQgICAgICAgCSIzQUQ2MkRFNzAwNTUiCi0JCQkJc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEhlYWRlckJhc2UiCi0JCQkJcXVpZHUgICAgICAJIjNBMDFERUU3MDM0RCIpKSkKLQkJICAgIChvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDQiCi0JCQlxdWlkICAgICAgIAkiM0FENjJERjgwMkQxIgotCQkJcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCQkgICAgKG9iamVjdCBSb2xlICJlUGFydCIKLQkJCQlxdWlkICAgICAgIAkiM0FENjJERkEwMDAyIgotCQkJCWxhYmVsICAgICAgCSJlUGFydCIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IgotCQkJCXF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCQkJY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkJCWlzX25hdmlnYWJsZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDUiCi0JCQkJcXVpZCAgICAgICAJIjNBRDYyREZBMDAwMyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyQmFzZSIKLQkJCQlxdWlkdSAgICAgIAkiM0EwMURFRTcwMzREIikpKQotCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNiIKLQkJCXF1aWQgICAgICAgCSIzQUQ2MzMzNzAxQ0QiCi0JCQlyb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJCSAgICAob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDciCi0JCQkJcXVpZCAgICAgICAJIjNBRDYzMzM3MDM3MiIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyIgotCQkJCXF1aWR1ICAgICAgCSIzQUQ2MzMwOTAxNkQiCi0JCQkJaXNfYWdncmVnYXRlIAlUUlVFKQotCQkJICAgIChvYmplY3QgUm9sZSAiaGVhZGVyRmF1bHRzIgotCQkJCXF1aWQgICAgICAgCSIzQUQ2MzMzNzAzNzMiCi0JCQkJbGFiZWwgICAgICAJImhlYWRlckZhdWx0cyIKLQkJCQlzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyRmF1bHQiCi0JCQkJcXVpZHUgICAgICAJIjNBRDYzMkI4MDNERCIKLQkJCQljbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCQkJQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkJCUNvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCQkJaXNfbmF2aWdhYmxlIAlUUlVFKSkpKQotCQlsb2dpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkJICAgIChvYmplY3QgQ2xhc3NEaWFncmFtICJCaW5kaW5nIgotCQkJcXVpZCAgICAgICAJIjNBMDFDRjIzMDI5RiIKLQkJCXRpdGxlICAgICAgCSJCaW5kaW5nIgotCQkJem9vbSAgICAgICAJODcKLQkJCW1heF9oZWlnaHQgCTI4MzUwCi0JCQltYXhfd2lkdGggIAkyMTYwMAotCQkJb3JpZ2luX3ggICAJMAotCQkJb3JpZ2luX3kgICAJMAotCQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBCaW5kaW5nIiBAMQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNzA0LCA0ODApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxCi0JCQkJICAgIGxvY2F0aW9uICAgCSg0ODcsIDM3MikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0MzQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEJpbmRpbmciKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTAxRDNCOTAxQUQiCi0JCQkJd2lkdGggICAgICAJNDUyCi0JCQkJaGVpZ2h0ICAgICAJMjQwCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQT3BlcmF0aW9uIiBAMgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTQ3MiwgNDgwKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTIzNSwgMzcyKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTQ3NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQT3BlcmF0aW9uIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0EwQUQ0NTUwMEU4IgotCQkJCXdpZHRoICAgICAgCTQ5MgotCQkJCWhlaWdodCAgICAgCTI0MAotCQkJCWFubm90YXRpb24gCTgpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQSGVhZGVyIiBAMwotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNzUyLCAxNTUyKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMwotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjEyLCAxNTA0KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI4MAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQSGVhZGVyIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FENjMzMDkwMTZEIgotCQkJCXdpZHRoICAgICAgCTI5OAotCQkJCWhlaWdodCAgICAgCTEyMAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEhlYWRlckZhdWx0IiBANAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTk4NCwgMTUyMCkKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQKLQkJCQkgICAgbG9jYXRpb24gICAJKDE3OTcsIDE0NzIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzc0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBIZWFkZXJGYXVsdCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBRDYzMkI4MDNERCIKLQkJCQl3aWR0aCAgICAgIAkzOTIKLQkJCQloZWlnaHQgICAgIAkxMjAKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNiIgQDUKLQkJCQlsb2NhdGlvbiAgIAkoMTM0NCwgMTU1OSkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ2MzMzNzAxQ0QiCi0JCQkJcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDciIEA2Ci0JCQkJCVBhcmVudF9WaWV3IAlANQotCQkJCQlsb2NhdGlvbiAgIAkoNjg4LCA1NSkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQUQ2MzMzNzAzNzIiCi0JCQkJCWNsaWVudCAgICAgCUA1Ci0JCQkJCXN1cHBsaWVyICAgCUAzCi0JCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzQ0LCAxNTU5KQotCQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoOTAxLCAxNTU5KSkKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiaGVhZGVyRmF1bHRzIiBANwotCQkJCQlQYXJlbnRfVmlldyAJQDUKLQkJCQkJbG9jYXRpb24gICAJKDY4OCwgNTUpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDgKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlANwotCQkJCQkgICAgbG9jYXRpb24gICAJKDEzMzEsIDE1MTkpCi0JCQkJCSAgICBhbmNob3IgICAgIAkxCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkzNDYKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIraGVhZGVyRmF1bHRzIgotCQkJCQkgICAgcGN0RGlzdCAgICAJLTAuMDMwNzAyCi0JCQkJCSAgICBoZWlnaHQgICAgIAk0MQotCQkJCQkgICAgb3JpZW50YXRpb24gCTApCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FENjMzMzcwMzczIgotCQkJCQljbGllbnQgICAgIAlANQotCQkJCQlzdXBwbGllciAgIAlANAotCQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTM0NCwgMTU1OSkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDE3ODgsIDE1NTkpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDkKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlANwotCQkJCQkgICAgbG9jYXRpb24gICAJKDE2NzEsIDE1MjIpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjAuLioiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjczNjg0MgotCQkJCQkgICAgaGVpZ2h0ICAgICAJMzgKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMAotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUA3Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMTYxNywgMTU5NykKLQkJCQkJICAgIGFuY2hvciAgICAgCTMKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1MQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuNjE0MDM1Ci0JCQkJCSAgICBoZWlnaHQgICAgIAkzOAotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpKSkpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIiBAMTEKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgyNzM2LCA3ODQpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxMQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMjYxMywgNzA3KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI0NgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJNZXNzYWdlIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkJCXdpZHRoICAgICAgCTI2NAotCQkJCWhlaWdodCAgICAgCTE3OAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEhlYWRlckJhc2UiIEAxMgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTQ3MiwgOTI4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMTIKLQkJCQkgICAgbG9jYXRpb24gICAJKDExNTEsIDY2NSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk2NDIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEhlYWRlckJhc2UiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTAxREVFNzAzNEQiCi0JCQkJd2lkdGggICAgICAJNjYwCi0JCQkJaGVpZ2h0ICAgICAJNTUwCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDIiIEAxMwotCQkJCWxvY2F0aW9uICAgCSgyMjAzLCA4NTgpCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FENjJERTYwMTMwIgotCQkJCXJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJlTWVzc2FnZSIgQDE0Ci0JCQkJCVBhcmVudF9WaWV3IAlAMTMKLQkJCQkJbG9jYXRpb24gICAJKDEwNTEsIC0zMTApCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE1Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDE0Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMjM2NywgODg4KQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMjE2Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiK2VNZXNzYWdlIgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC40MTIzMjIKLQkJCQkJICAgIGhlaWdodCAgICAgCTMwCi0JCQkJCSAgICBvcmllbnRhdGlvbiAJMSkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQUQ2MkRFNzAwNEIiCi0JCQkJCWNsaWVudCAgICAgCUAxMwotCQkJCQlzdXBwbGllciAgIAlAMTEKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDIyMDMsIDg1OCkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDI2MDQsIDg1OCkKLQkJCQkJbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTYKLQkJCQkJICAgIFBhcmVudF9WaWV3IAlAMTQKLQkJCQkJICAgIGxvY2F0aW9uICAgCSgyNDc5LCA4MjEpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjY4NzIwNAotCQkJCQkgICAgaGVpZ2h0ICAgICAJMzgKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKSkKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMyIgQDE3Ci0JCQkJCVBhcmVudF9WaWV3IAlAMTMKLQkJCQkJbG9jYXRpb24gICAJKDEwNTEsIC0zMTApCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE4Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDE3Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMjA1NSwgODk4KQotCQkJCQkgICAgaGlkZGVuICAgICAJVFJVRQotCQkJCQkgICAgYW5jaG9yICAgICAJMQotCQkJCQkgICAgYW5jaG9yX2xvYyAJMQotCQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCQkgICAgbWF4X3dpZHRoICAJMTkyCi0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiIgotCQkJCQkgICAgcGN0RGlzdCAgICAJMC4zNzIyNTQKLQkJCQkJICAgIGhlaWdodCAgICAgCTQwCi0JCQkJCSAgICBvcmllbnRhdGlvbiAJMCkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQUQ2MkRFNzAwNTUiCi0JCQkJCWNsaWVudCAgICAgCUAxMwotCQkJCQlzdXBwbGllciAgIAlAMTIKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDIyMDMsIDg1OCkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDE4MDIsIDg1OCkpKSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBCb2R5IiBAMTkKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE0NzIsIDIyNDApCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxOQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTIyNiwgMjEzMikKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAk0OTIKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEJvZHkiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTAxREVENTAzMUYiCi0JCQkJY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAxOQotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTIyNiwgMjE5MikKLQkJCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJICAgIGZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkgICAgbmxpbmVzICAgICAJNAotCQkJCSAgICBtYXhfd2lkdGggIAkwKQotCQkJCXdpZHRoICAgICAgCTUxMAotCQkJCWhlaWdodCAgICAgCTI0MAotCQkJCWFubm90YXRpb24gCTgpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IiBAMjAKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgyMzUyLCAyMDgwKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMjAKLQkJCQkgICAgbG9jYXRpb24gICAJKDIyMzYsIDE4NjYpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjMzCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlBhcnQiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCQkJd2lkdGggICAgICAJMjUxCi0JCQkJaGVpZ2h0ICAgICAJNDUyCi0JCQkJYW5ub3RhdGlvbiAJOCkKLQkJCSAgICAob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNCIgQDIxCi0JCQkJbG9jYXRpb24gICAJKDIyOTAsIDEyMzApCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FENjJERjgwMkQxIgotCQkJCXJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICJlUGFydCIgQDIyCi0JCQkJCVBhcmVudF9WaWV3IAlAMjEKLQkJCQkJbG9jYXRpb24gICAJKDExMzgsIDYyKQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMwotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyMgotCQkJCQkgICAgbG9jYXRpb24gICAJKDIzODAsIDE3NzkpCi0JCQkJCSAgICBhbmNob3IgICAgIAkxCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxMjAKLQkJCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkJICAgIGxhYmVsICAgICAgCSIrZVBhcnQiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjg4MTQ2NQotCQkJCQkgICAgaGVpZ2h0ICAgICAJOTAKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKQotCQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQkJcXVpZHUgICAgICAJIjNBRDYyREZBMDAwMiIKLQkJCQkJY2xpZW50ICAgICAJQDIxCi0JCQkJCXN1cHBsaWVyICAgCUAyMAotCQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMjI5MCwgMTIzMCkKLQkJCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDIyOTAsIDE4NTQpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI0Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDIyCi0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMjIzNywgMTc3OSkKLQkJCQkJICAgIGFuY2hvciAgICAgCTIKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE1Ci0JCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJCSAgICBsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuODgxNDY1Ci0JCQkJCSAgICBoZWlnaHQgICAgIAk1NAotCQkJCQkgICAgb3JpZW50YXRpb24gCTEpKQotCQkJCSAgICAob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ1IiBAMjUKLQkJCQkJUGFyZW50X1ZpZXcgCUAyMQotCQkJCQlsb2NhdGlvbiAgIAkoMTEzOCwgNjIpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI2Ci0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDI1Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMTkyOCwgMTEzNykKLQkJCQkJICAgIGhpZGRlbiAgICAgCVRSVUUKLQkJCQkJICAgIGFuY2hvciAgICAgCTEKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTEyMAotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIiIKLQkJCQkJICAgIHBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJCSAgICBoZWlnaHQgICAgIAk0MgotCQkJCQkgICAgb3JpZW50YXRpb24gCTApCi0JCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCQlxdWlkdSAgICAgIAkiM0FENjJERkEwMDAzIgotCQkJCQljbGllbnQgICAgIAlAMjEKLQkJCQkJc3VwcGxpZXIgICAJQDEyCi0JCQkJCXZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCQkgICAgKDIyOTAsIDEyMzApCi0JCQkJCSAgICAoMjI5MCwgMTA5NSkKLQkJCQkJICAgICgxODAyLCAxMDk1KSkKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDIyOTAsIDEyMzApCi0JCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxODAyLCAxMDk1KSkpKQotCQkJICAgIChvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQwIiBAMjcKLQkJCQlsb2NhdGlvbiAgIAkoMTk3NywgMjI5MSkKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQTA2RTBCNTAwMzYiCi0JCQkJcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkJICAgIChvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDEiIEAyOAotCQkJCQlQYXJlbnRfVmlldyAJQDI3Ci0JCQkJCWxvY2F0aW9uICAgCSg3NDUsIC0xMykKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQTA2RTBCNjAwQzQiCi0JCQkJCWNsaWVudCAgICAgCUAyNwotCQkJCQlzdXBwbGllciAgIAlAMTkKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDE5NzcsIDIyOTEpCi0JCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNzI3LCAyMjkxKSkKLQkJCQkgICAgKG9iamVjdCBSb2xlVmlldyAiZVBhcnRzIiBAMjkKLQkJCQkJUGFyZW50X1ZpZXcgCUAyNwotCQkJCQlsb2NhdGlvbiAgIAkoNzQ1LCAtMTMpCi0JCQkJCWxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMwCi0JCQkJCSAgICBQYXJlbnRfVmlldyAJQDI5Ci0JCQkJCSAgICBsb2NhdGlvbiAgIAkoMjE4NSwgMjM5NSkKLQkJCQkJICAgIGFuY2hvciAgICAgCTEKLQkJCQkJICAgIGFuY2hvcl9sb2MgCTEKLQkJCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkJICAgIG1heF93aWR0aCAgCTE0NAotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIitlUGFydHMiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjgzMzg1NgotCQkJCQkgICAgaGVpZ2h0ICAgICAJMTA0Ci0JCQkJCSAgICBvcmllbnRhdGlvbiAJMSkKLQkJCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJCXF1aWR1ICAgICAgCSIzQTA2RTBCNjAwQzUiCi0JCQkJCWNsaWVudCAgICAgCUAyNwotCQkJCQlzdXBwbGllciAgIAlAMjAKLQkJCQkJbGluZV9zdHlsZSAJMwotCQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDE5NzcsIDIyOTEpCi0JCQkJCXRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyMjI3LCAyMjkxKQotCQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMQotCQkJCQkgICAgUGFyZW50X1ZpZXcgCUAyOQotCQkJCQkgICAgbG9jYXRpb24gICAJKDIxODUsIDIyNDUpCi0JCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJCSAgICBhbmNob3JfbG9jIAkxCi0JCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJCSAgICBtYXhfd2lkdGggIAkxNQotCQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCQkgICAgbGFiZWwgICAgICAJIjAuLioiCi0JCQkJCSAgICBwY3REaXN0ICAgIAkwLjgzMzg1NgotCQkJCQkgICAgaGVpZ2h0ICAgICAJNDcKLQkJCQkJICAgIG9yaWVudGF0aW9uIAkwKSkpKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEZhdWx0IiBAMzIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDU5MiwgMjI1NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMyCi0JCQkJICAgIGxvY2F0aW9uICAgCSgzNDYsIDIxNDgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDkyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBGYXVsdCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBMDZEOUZBMDBGNyIKLQkJCQl3aWR0aCAgICAgIAk1MTAKLQkJCQloZWlnaHQgICAgIAkyNDAKLQkJCQlhbm5vdGF0aW9uIAk4KQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6SVN0cmluZyIgQDMzCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDI4OCwgMTM3NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDMzCi0JCQkJICAgIGxvY2F0aW9uICAgCSgxMTQsIDEzNDgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzQ4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklTdHJpbmciKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzMKLQkJCQkgICAgbG9jYXRpb24gICAJKDExNCwgMTI5OCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzNDgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxkYXRhdHlwZT4+IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0I4REQ5MEMwMjIwIgotCQkJCXdpZHRoICAgICAgCTM2NgotCQkJCWhlaWdodCAgICAgCTE4MAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEAzNAotCQkJCWxvY2F0aW9uICAgCSgxNDcyLCAxNDE4KQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXN1cHBsaWVyICAgCUAxMgotCQkJCXZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSAgICAoMTQ3MiwgMTQxOCkKLQkJCQkgICAgKDE0NzIsIDEyMDMpKSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzNQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRDYzMzMwMDE3RCIKLQkJCQljbGllbnQgICAgIAlAMwotCQkJCXN1cHBsaWVyICAgCUAxMgotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDgzNiwgMTQ5MikKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoODM2LCAxNDE4KQotCQkJCWRyYXdTdXBwbGllciAJQDM0KQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBCaW5kaW5nIiBAMzYKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNzA0LCA5NikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM2Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg1NTcsIDcyKQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI5NAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJU09BUEJpbmRpbmciKQotCQkJCXN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlAMzYKLQkJCQkgICAgbG9jYXRpb24gICAJKDU1NywgMjIpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjk0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODVBMjAwMUYiCi0JCQkJd2lkdGggICAgICAJMzEyCi0JCQkJaGVpZ2h0ICAgICAJMTcyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzcKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODk1NTAyQkYiCi0JCQkJY2xpZW50ICAgICAJQDEKLQkJCQlzdXBwbGllciAgIAlAMzYKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBPcGVyYXRpb24iIEAzOAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNDcyLCAxMTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUAzOAotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTMwMywgODgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzM4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklTT0FQT3BlcmF0aW9uIikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDM4Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMzAzLCAzOCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMzgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OEE1MDEyOCIKLQkJCQl3aWR0aCAgICAgIAkzNTYKLQkJCQloZWlnaHQgICAgIAkxNzIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzOQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OTdGMDA3RCIKLQkJCQljbGllbnQgICAgIAlAMgotCQkJCXN1cHBsaWVyICAgCUAzOAotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEhlYWRlciIgQDQwCi0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoNzUyLCA4NjQpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0MAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjEwLCA4NDApCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjg0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklTT0FQSGVhZGVyIikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQwCi0JCQkJICAgIGxvY2F0aW9uICAgCSg2MTAsIDc5MCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgYW5jaG9yICAgICAJMTAKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyODQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCQkJaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJCQlpY29uX3N0eWxlIAkiTGFiZWwiCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OEU3MDA4QyIKLQkJCQl3aWR0aCAgICAgIAkzMDIKLQkJCQloZWlnaHQgICAgIAkxNzIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA0MQotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4OUJDMDMxQyIKLQkJCQljbGllbnQgICAgIAlAMwotCQkJCXN1cHBsaWVyICAgCUA0MAotCQkJCWxpbmVfc3R5bGUgCTApCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpJU09BUEhlYWRlckZhdWx0IiBANDIKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMTk4NCwgMzY4KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANDIKLQkJCQkgICAgbG9jYXRpb24gICAJKDE3OTUsIDM0NCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzNzgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSVNPQVBIZWFkZXJGYXVsdCIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0MgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTc5NSwgMjk0KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTM3OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4QkQwM0E5IgotCQkJCXdpZHRoICAgICAgCTM5NgotCQkJCWhlaWdodCAgICAgCTE3MgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQzCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FENjMzMzQwMDM4IgotCQkJCWNsaWVudCAgICAgCUA0Ci0JCQkJc3VwcGxpZXIgICAJQDEyCi0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTkyMSwgMTQ2MCkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTkyMSwgMTQxOCkKLQkJCQlkcmF3U3VwcGxpZXIgCUAzNCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQRmF1bHQiIEA0NAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg1OTIsIDE3OTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0NAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNDY5LCAxNzY4KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI0NgotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJJU09BUEZhdWx0IikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQ0Ci0JCQkJICAgIGxvY2F0aW9uICAgCSg0NjksIDE3MTgpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjQ2Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODg4NzAxMTkiCi0JCQkJd2lkdGggICAgICAJMjY0Ci0JCQkJaGVpZ2h0ICAgICAJMTcyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANDUKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0OEEwODAzMkMiCi0JCQkJY2xpZW50ICAgICAJQDMyCi0JCQkJc3VwcGxpZXIgICAJQDQ0Ci0JCQkJbGluZV9zdHlsZSAJMCkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OklTT0FQQm9keSIgQDQ2Ci0JCQkJU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJCQlTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJCQlJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDE0NzIsIDE3NzYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0NgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTI3MywgMTcyNCkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzOTgKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiSVNPQVBCb2R5IikKLQkJCQlzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDQ2Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgxMjczLCAxNjc0KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBhbmNob3IgICAgIAkxMAotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTM5OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJCQlpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkJCWljb25fc3R5bGUgCSJMYWJlbCIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiNDVFNDg4NEIwMTE5IgotCQkJCWNvbXBhcnRtZW50IAkob2JqZWN0IENvbXBhcnRtZW50Ci0JCQkJICAgIFBhcmVudF9WaWV3IAlANDYKLQkJCQkgICAgbG9jYXRpb24gICAJKDEyNzMsIDE3ODQpCi0JCQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkJCSAgICBmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJCSAgICBhbmNob3IgICAgIAkyCi0JCQkJICAgIG5saW5lcyAgICAgCTQKLQkJCQkgICAgbWF4X3dpZHRoICAJMCkKLQkJCQl3aWR0aCAgICAgIAk0MTYKLQkJCQloZWlnaHQgICAgIAkyMjgKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA0NwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjQ1RTQ4QTVCMDBCQiIKLQkJCQljbGllbnQgICAgIAlAMTkKLQkJCQlzdXBwbGllciAgIAlANDYKLQkJCQlsaW5lX3N0eWxlIAkwKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDQ4Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiNDVFRDA3OEMwMkZEIgotCQkJCWNsaWVudCAgICAgCUA0Ci0JCQkJc3VwcGxpZXIgICAJQDQyCi0JCQkJbGluZV9zdHlsZSAJMCkpKQotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIlBvcnQiCi0JCQlxdWlkICAgICAgIAkiM0EwODVFMzAwMzVDIgotCQkJdGl0bGUgICAgICAJIlBvcnQiCi0JCQl6b29tICAgICAgIAk5MAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEFkZHJlc3MiIEA0OQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoODQ4LCA4MzIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA0OQotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjQ3LCA3NTEpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDAyCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBBZGRyZXNzIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FEMUZGNzUwMjg3IgotCQkJCXdpZHRoICAgICAgCTQyMAotCQkJCWhlaWdodCAgICAgCTE4NgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6SVNPQVBBZGRyZXNzIiBANTAKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCVN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCQkJSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoODQ4LCAyNTYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1MAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjk2LCAyMzUpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzA0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIklTT0FQQWRkcmVzcyIpCi0JCQkJc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1MAotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjk2LCAxODUpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIGFuY2hvciAgICAgCTEwCi0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzA0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkJCWljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCQkJaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0ODdFNzAwRUEiCi0JCQkJd2lkdGggICAgICAJMzIyCi0JCQkJaGVpZ2h0ICAgICAJMTY2Ci0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANTEKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSI0NUU0OEE3RTAxMDkiCi0JCQkJY2xpZW50ICAgICAJQDQ5Ci0JCQkJc3VwcGxpZXIgICAJQDUwCi0JCQkJbGluZV9zdHlsZSAJMCkpKQotCQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIkV4dGVuc2liaWxpdHkiCi0JCQlxdWlkICAgICAgIAkiM0FFMDk5QjEwMTYxIgotCQkJdGl0bGUgICAgICAJIkV4dGVuc2liaWxpdHkiCi0JCQl6b29tICAgICAgIAk5MAotCQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJCW1heF93aWR0aCAgCTIxNjAwCi0JCQlvcmlnaW5feCAgIAkwCi0JCQlvcmlnaW5feSAgIAkwCi0JCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEFkZHJlc3MiIEA1MgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxNTIwLCA1NzYpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1MgotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTM3MSwgNTI3KQotCQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCSAgICBubGluZXMgICAgIAkxCi0JCQkJICAgIG1heF93aWR0aCAgCTI5OAotCQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkJICAgIGxhYmVsICAgICAgCSJTT0FQQWRkcmVzcyIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBRDFGRjc1MDI4NyIKLQkJCQl3aWR0aCAgICAgIAkzMTYKLQkJCQloZWlnaHQgICAgIAkxMjIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBCaW5kaW5nIiBANTMKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoMzA0LCA1OTIpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1MwotCQkJCSAgICBsb2NhdGlvbiAgIAkoMTYyLCA1NDMpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjg0Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBCaW5kaW5nIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0EwMUQzQjkwMUFEIgotCQkJCXdpZHRoICAgICAgCTMwMgotCQkJCWhlaWdodCAgICAgCTEyMgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6c29hcDo6U09BUEJvZHkiIEA1NAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxMDcyLCAxMTA0KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANTQKLQkJCQkgICAgbG9jYXRpb24gICAJKDk1MCwgMTA1NSkKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkyNDQKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUEJvZHkiKQotCQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJCXF1aWR1ICAgICAgCSIzQTAxREVENTAzMUYiCi0JCQkJd2lkdGggICAgICAJMjYyCi0JCQkJaGVpZ2h0ICAgICAJMTIyCi0JCQkJYW5ub3RhdGlvbiAJOAotCQkJCWF1dG9SZXNpemUgCVRSVUUpCi0JCQkgICAgKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojpzb2FwOjpTT0FQRmF1bHQiIEA1NQotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSgxMjMyLCAxMjY0KQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANTUKLQkJCQkgICAgbG9jYXRpb24gICAJKDExMTIsIDEyMTUpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMjQwCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBGYXVsdCIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBMDZEOUZBMDBGNyIKLQkJCQl3aWR0aCAgICAgIAkyNTgKLQkJCQloZWlnaHQgICAgIAkxMjIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBPcGVyYXRpb24iIEA1NgotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkJCWxvY2F0aW9uICAgCSg1MTIsIDc1MikKLQkJCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJCSAgICBQYXJlbnRfVmlldyAJQDU2Ci0JCQkJICAgIGxvY2F0aW9uICAgCSgzNDQsIDcwMykKLQkJCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQkgICAgbmxpbmVzICAgICAJMQotCQkJCSAgICBtYXhfd2lkdGggIAkzMzYKLQkJCQkgICAganVzdGlmeSAgICAJMAotCQkJCSAgICBsYWJlbCAgICAgIAkiU09BUE9wZXJhdGlvbiIpCi0JCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJcXVpZHUgICAgICAJIjNBMEFENDU1MDBFOCIKLQkJCQl3aWR0aCAgICAgIAkzNTQKLQkJCQloZWlnaHQgICAgIAkxMjIKLQkJCQlhbm5vdGF0aW9uIAk4Ci0JCQkJYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJCSAgICAob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnNvYXA6OlNPQVBIZWFkZXJCYXNlIiBANTcKLQkJCQlTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkJCUluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJCQlsb2NhdGlvbiAgIAkoODE2LCA5MjgpCi0JCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCQkgICAgUGFyZW50X1ZpZXcgCUA1NwotCQkJCSAgICBsb2NhdGlvbiAgIAkoNjI3LCA4NzkpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJMzc4Ci0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIlNPQVBIZWFkZXJCYXNlIikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0EwMURFRTcwMzREIgotCQkJCXdpZHRoICAgICAgCTM5NgotCQkJCWhlaWdodCAgICAgCTEyMgotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEA1OAotCQkJCVNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCQkJbG9jYXRpb24gICAJKDYwOCwgMTI4KQotCQkJCWZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJCSAgICBpdGFsaWNzICAgIAlUUlVFKQotCQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkJICAgIFBhcmVudF9WaWV3IAlANTgKLQkJCQkgICAgbG9jYXRpb24gICAJKDQwOCwgNTMpCi0JCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkJICAgIG5saW5lcyAgICAgCTEKLQkJCQkgICAgbWF4X3dpZHRoICAJNDAwCi0JCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCQkgICAgbGFiZWwgICAgICAJIkV4dGVuc2liaWxpdHlFbGVtZW50IikKLQkJCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlxdWlkdSAgICAgIAkiM0FENURCQjYwMkE5IgotCQkJCXdpZHRoICAgICAgCTQxOAotCQkJCWhlaWdodCAgICAgCTE3NAotCQkJCWFubm90YXRpb24gCTgKLQkJCQlhdXRvUmVzaXplIAlUUlVFKQotCQkJICAgIChvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEA1OQotCQkJCWxvY2F0aW9uICAgCSg2MDgsIDMwNSkKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCQlzdXBwbGllciAgIAlANTgKLQkJCQl2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkgICAgKDYwOCwgMzA1KQotCQkJCSAgICAoNjA4LCAyMTUpKSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA2MAotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTA5QTM4MDFBQiIKLQkJCQljbGllbnQgICAgIAlANTMKLQkJCQlzdXBwbGllciAgIAlANTgKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSgzNDQsIDUzMSkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzQ0LCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANTkpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANjEKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUUwOUEzRTAzMjYiCi0JCQkJY2xpZW50ICAgICAJQDU3Ci0JCQkJc3VwcGxpZXIgICAJQDU4Ci0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoODE1LCA4NjcpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDgxNSwgMzA1KQotCQkJCWRyYXdTdXBwbGllciAJQDU5KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDYyCi0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFMDlBNDUwMDQxIgotCQkJCWNsaWVudCAgICAgCUA1NAotCQkJCXN1cHBsaWVyICAgCUA1OAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDEwNjgsIDEwNDMpCi0JCQkJdGVybWluYWxfYXR0YWNobWVudCAJKDEwNjgsIDMwNSkKLQkJCQlkcmF3U3VwcGxpZXIgCUA1OSkKLQkJCSAgICAob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA2MwotCQkJCXN0ZXJlb3R5cGUgCVRSVUUKLQkJCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkJcXVpZHUgICAgICAJIjNBRTA5QTRFMDMxRiIKLQkJCQljbGllbnQgICAgIAlANTYKLQkJCQlzdXBwbGllciAgIAlANTgKLQkJCQlsaW5lX3N0eWxlIAkzCi0JCQkJb3JpZ2luX2F0dGFjaG1lbnQgCSg1MDYsIDY5MSkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoNTA2LCAzMDUpCi0JCQkJZHJhd1N1cHBsaWVyIAlANTkpCi0JCQkgICAgKG9iamVjdCBJbmhlcml0VmlldyAiIiBANjQKLQkJCQlzdGVyZW90eXBlIAlUUlVFCi0JCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJCXF1aWR1ICAgICAgCSIzQUUwOUE0QTAwMjAiCi0JCQkJY2xpZW50ICAgICAJQDU1Ci0JCQkJc3VwcGxpZXIgICAJQDU4Ci0JCQkJbGluZV9zdHlsZSAJMwotCQkJCW9yaWdpbl9hdHRhY2htZW50IAkoMTIzMSwgMTIwMykKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTIzMSwgMzA1KQotCQkJCWRyYXdTdXBwbGllciAJQDU5KQotCQkJICAgIChvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDY1Ci0JCQkJc3RlcmVvdHlwZSAJVFJVRQotCQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCQlxdWlkdSAgICAgIAkiM0FFMDk1MzUwMDk4IgotCQkJCWNsaWVudCAgICAgCUA1MgotCQkJCXN1cHBsaWVyICAgCUA1OAotCQkJCWxpbmVfc3R5bGUgCTMKLQkJCQlvcmlnaW5fYXR0YWNobWVudCAJKDE1MjAsIDUxNSkKLQkJCQl0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTUyMCwgMzA1KQotCQkJCWRyYXdTdXBwbGllciAJQDU5KSkpKSkKLQkgICAgKG9iamVjdCBDbGFzc19DYXRlZ29yeSAieHNkIgotCQlpc191bml0ICAgIAlUUlVFCi0JCWlzX2xvYWRlZCAgCUZBTFNFCi0JCWZpbGVfbmFtZSAgCSIkVkFCQVNFX1BMVUdJTlNfUEFUSFxcb3JnLmVjbGlwc2UueHNkXFxtb2RlbFxcb3JnLmVjbGlwc2UuWFNELmNhdCIKLQkJcXVpZCAgICAgICAJIjM5QUJEQzZGMDFBQSIpKQotCWxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCSAgICAob2JqZWN0IENsYXNzRGlhZ3JhbSAiTWFpbiIKLQkJcXVpZCAgICAgICAJIjM5RTI3RjA4MDA3NiIKLQkJdGl0bGUgICAgICAJIk1haW4iCi0JCXpvb20gICAgICAgCTEwMAotCQltYXhfaGVpZ2h0IAkyODM1MAotCQltYXhfd2lkdGggIAkyMTYwMAotCQlvcmlnaW5feCAgIAkwCi0JCW9yaWdpbl95ICAgCTAKLQkJaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6OndzZGwiIEA2NgotCQkJbG9jYXRpb24gICAJKDI3MiwgMjU2KQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDY2Ci0JCQkgICAgbG9jYXRpb24gICAJKDEyOCwgMTcyKQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkid3NkbCIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlxdWlkdSAgICAgIAkiM0FERkI4RTUwMjFFIgotCQkJd2lkdGggICAgICAJMzAwCi0JCQloZWlnaHQgICAgIAkxODApCi0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojpzb2FwIiBANjcKLQkJCWxvY2F0aW9uICAgCSg3MDQsIDI1NikKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA2NwotCQkJICAgIGxvY2F0aW9uICAgCSg1NjAsIDE3MikKLQkJCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJICAgIG5saW5lcyAgICAgCTIKLQkJCSAgICBtYXhfd2lkdGggIAkyODgKLQkJCSAgICBqdXN0aWZ5ICAgIAkwCi0JCQkgICAgbGFiZWwgICAgICAJInNvYXAiKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJcXVpZHUgICAgICAJIjNBMDFDRjBDMDFBMiIKLQkJCXdpZHRoICAgICAgCTMwMAotCQkJaGVpZ2h0ICAgICAJMTgwKQotCQkgICAgKG9iamVjdCBDYXRlZ29yeVZpZXcgIkxvZ2ljYWwgVmlldzo6eHNkIiBANjgKLQkJCWxvY2F0aW9uICAgCSgxMTUyLCAyNTYpCi0JCQlsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJICAgIFBhcmVudF9WaWV3IAlANjgKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTAwOCwgMTcyKQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkieHNkIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzOUFCREM2RjAxQUEiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkpKSkpCi0gICAgcm9vdF9zdWJzeXN0ZW0gCShvYmplY3QgU3ViU3lzdGVtICJDb21wb25lbnQgVmlldyIKLQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDY1IgotCXBoeXNpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdCkKLQlwaHlzaWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgTW9kdWxlX0RpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNzciCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHByb2Nlc3Nfc3RydWN0dXJlIAkob2JqZWN0IFByb2Nlc3NlcwotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjYiCi0JUHJvY3NORGV2cyAJKGxpc3QKLQkgICAgKG9iamVjdCBQcm9jZXNzX0RpYWdyYW0gIkRlcGxveW1lbnQgVmlldyIKLQkJcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2OCIKLQkJdGl0bGUgICAgICAJIkRlcGxveW1lbnQgVmlldyIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICBwcm9wZXJ0aWVzIAkob2JqZWN0IFByb3BlcnRpZXMKLQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlIgotCQkJdmFsdWUgICAgICAJKCJEYXRhQmFzZVNldCIgODAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiQU5TSSIKLQkJCQl2YWx1ZSAgICAgIAk4MDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJPcmFjbGUiCi0JCQkJdmFsdWUgICAgICAJODAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiU1FMU2VydmVyIgotCQkJCXZhbHVlICAgICAgCTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIlN5YmFzZSIKLQkJCQl2YWx1ZSAgICAgIAk4MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJXYXRjb20iCi0JCQkJdmFsdWUgICAgICAJODA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uTmFtZSIKLQkJCXZhbHVlICAgICAgCSJJZCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJOVU1CRVIoNSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiVl8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lIgotCQkJdmFsdWUgICAgICAJIlRfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiX1YiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQmFzZVZpZXdzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJWQVJDSEFSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiTnVsbHNPSyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkNvbXBvc2l0ZVVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiZnJhbWV3b3JrIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByZXNlcnZlUmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMRWxlbWVudCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExTcGVjaWZpY2F0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSURMU3BlY1NldCIgMjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMU3BlY1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkludGVyZmFjZSIKLQkJCQl2YWx1ZSAgICAgIAkyMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlR5cGVkZWYiCi0JCQkJdmFsdWUgICAgICAJNTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFbnVtZXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFeGNlcHRpb24iCi0JCQkJdmFsdWUgICAgICAJNjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTdHJ1Y3QiCi0JCQkJdmFsdWUgICAgICAJNTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJVbmlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4MSkpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5iaW5kaW5nLnNvYXAvc3JjL3Jvc2Uvc29hcGJpbmRpbmdNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUlETE1vZHVsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVCeVNpbXBsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5zb2FwL3NyYy9yb3NlL3NvYXBiaW5kaW5nTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJSYWlzZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0hhcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkSGFzUmVsVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSGFzUmVsVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSGFzUmVsVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiU2VxdWVuY2UiCi0JCQkJdmFsdWUgICAgICAJNDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZV8kc3VwcGxpZXIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEYXRhTWVtYmVyIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGb3J3YXJkUmVmZXJlbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkUm9sZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkFzc29jVHlwZVNldCIgNDcpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQXNzb2NUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Vc2VzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fU3Vic3lzdGVtIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0b3BPbkVycm9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlVzZVByZWZpeGVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5zdGFuY2VWYXJpYWJsZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJtXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ2xhc3NWYXJpYWJsZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSJzXyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdEF0dHJpYnV0ZURhdGFUeXBlIgotCQkJdmFsdWUgICAgICAJImludCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdE9wZXJhdGlvblJldHVyblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkidm9pZCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUm9vdERpciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkF1dG9TeW5jIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2hvd0NvZGVnZW5EbGciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jRGVmYXVsdEF1dGhvciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0VmVyc2lvbiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFkb2NEZWZhdWx0U2luY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jTnVtQXN0ZXJpc2tzIgotCQkJdmFsdWUgICAgICAJMCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNYXhOdW1DaGFycyIKLQkJCXZhbHVlICAgICAgCTgwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVkaXRvciIKLQkJCXZhbHVlICAgICAgCSgiRWRpdG9yVHlwZSIgMTAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWTSIKLQkJCXZhbHVlICAgICAgCSgiVk1UeXBlIiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNsYXNzUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVkaXRvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRJbiIKLQkJCQl2YWx1ZSAgICAgIAkxMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV2luZG93c1NoZWxsIgotCQkJCXZhbHVlICAgICAgCTEwMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZNVHlwZSIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdW4iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk1pY3Jvc29mdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiSUJNIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk5vQ2xhc3NDdXN0b21EbGciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHbG9iYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk9wZW5CcmFjZUNsYXNzU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk9wZW5CcmFjZU1ldGhvZFN0eWxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJVc2VUYWJzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlU3BhY2VzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTcGFjaW5nSXRlbXMiCi0JCQl2YWx1ZSAgICAgIAkzKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJvc2VEZWZhdWx0Q29tbWVudFN0eWxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBc3Rlcmlza0NvbW1lbnRTdHlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkphdmFDb21tZW50U3R5bGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJKYXZhZG9jQXV0aG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY1NpbmNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSmF2YWRvY1ZlcnNpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTdGF0aWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvZGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc2FibGVBdXRvU3luYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXROYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRleHRSZWYiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJc1NpbmdsZVRocmVhZCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJbml0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRJc1NlY3VyZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclBhdGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXNwYXRjaGVySW5jbHVkZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJGb3J3YXJkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFNlY3VyaXR5Um9sZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Z2V0SW5mbyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RBdHRyaWJ1dGVzTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0QXR0cmlidXRlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3RQYXJhbWV0ZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvclJlcXVlc3RQYXJhbWV0ZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXJOYW1lcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckhlYWRlcnMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW50SGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldERhdGVIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29va2llIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yQ29va2llIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvbnRlbnRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVIVE1MIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVfWE1MX0REIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJDbXBGaWVsZCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkVudmlyb25tZW50UHJvcGVydGllcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNueEZhY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWZlcmVuY2VzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQk5hbWVJbkpBUiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlNlc3Npb25UeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJTZXNzaW9uVHlwZV9TZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiU3RhdGVsZXNzIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWZ1bCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlRyYW5zYWN0aW9uVHlwZV9TZXQiIDIxMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb250YWluZXIiCi0JCQkJdmFsdWUgICAgICAJMjExKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjEyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlIgotCQkJdmFsdWUgICAgICAJKCJFSkJQZXJzaXN0ZW5jZVR5cGVfU2V0IiAyMjApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIyMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCZWFuIgotCQkJCXZhbHVlICAgICAgCTIyMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb250YWluZXIiCi0JCQkJdmFsdWUgICAgICAJMjIyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUmVlbnRyYW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQk1QX0V4dGVuZF9DTVAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTmF0aXZlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3luY2hyb25pemVkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkJlYW5Qcm9wZXJ0eV9TZXQiIDcxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCZWFuUHJvcGVydHlfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIk5vdCBBIFByb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTcxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAk3MikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJCb3VuZCIKLQkJCQl2YWx1ZSAgICAgIAk3MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJDb25zdHJhaW5lZCIKLQkJCQl2YWx1ZSAgICAgIAk3NCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkluZGl2aWR1YWxDaGFuZ2VNZ3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlIgotCQkJdmFsdWUgICAgICAJKCJSZWFkL1dyaXRlX1NldCIgODEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlJlYWQvV3JpdGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQgJiBXcml0ZSIKLQkJCQl2YWx1ZSAgICAgIAk4MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiV3JpdGUgT25seSIKLQkJCQl2YWx1ZSAgICAgIAk4MykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRnVsbHlRdWFsaWZpZWRUeXBlcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJGaW5hbCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlRyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUHJvcGVydHlUeXBlIgotCQkJdmFsdWUgICAgICAJKCJCZWFuUHJvcGVydHlfU2V0IiA3MSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQmVhblByb3BlcnR5X1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJOb3QgQSBQcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAk3MSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJNzIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQm91bmQiCi0JCQkJdmFsdWUgICAgICAJNzMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQ29uc3RyYWluZWQiCi0JCQkJdmFsdWUgICAgICAJNzQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbmRpdmlkdWFsQ2hhbmdlTWd0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiUmVhZC9Xcml0ZSIKLQkJCXZhbHVlICAgICAgCSgiUmVhZC9Xcml0ZV9TZXQiIDgxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJSZWFkL1dyaXRlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJSZWFkICYgV3JpdGUiCi0JCQkJdmFsdWUgICAgICAJODEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUmVhZCBPbmx5IgotCQkJCXZhbHVlICAgICAgCTgyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIldyaXRlIE9ubHkiCi0JCQkJdmFsdWUgICAgICAJODMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZ1bGx5UXVhbGlmaWVkVHlwZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJc05hdmlnYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiMzYwMDAwMDAyIikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiRERMU2NyaXB0RmlsZW5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiRERMMS5TUUwiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkRyb3BDbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uTmFtZSIKLQkJCXZhbHVlICAgICAgCSJfSUQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlByaW1hcnlLZXlDb2x1bW5UeXBlIgotCQkJdmFsdWUgICAgICAJIk5VTUJFUig1LDApIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJTY2hlbWFOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NoZW1hTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRhYmxlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRhYmxlTmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlR5cGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHlwZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZpZXdOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmFycmF5TmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZhcnJheU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOZXN0ZWRUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJOZXN0ZWRUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPYmplY3RUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPYmplY3RUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNTY2hlbWEiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT0lEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiV2hlcmVDbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZUxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlUHJlY2lzaW9uIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVTY2FsZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25PZlJFRlMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIk1ldGhvZEtpbmRTZXQiIDE5MDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk92ZXJsb2FkSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUmVhZE5vRGF0YVN0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNSZWFkTm9Qcm9jZXNzU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1dyaXRlTm9EYXRhU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1dyaXRlTm9Qcm9jZXNzU3RhdGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1NlbGZpc2giCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlclR5cGVTZXQiIDE4MDEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJFdmVudCIKLQkJCXZhbHVlICAgICAgCSgiVHJpZ2dlckV2ZW50U2V0IiAxNjAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVGV4dCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJSZWZlcmVuY2luZ05hbWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckZvckVhY2giCi0JCQl2YWx1ZSAgICAgIAkoIlRyaWdnZXJGb3JFYWNoU2V0IiAxNzAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyV2hlbkNsYXVzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiTWFwTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTE5MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiT3JkZXJNZXRob2QiCi0JCQkJdmFsdWUgICAgICAJMTkwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJGdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxOTAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlByb2NlZHVyZSIKLQkJCQl2YWx1ZSAgICAgIAkxOTA0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIk9wZXJhdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3IiCi0JCQkJdmFsdWUgICAgICAJMTkwNikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJEZXN0cnVjdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDcpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVHJpZ2dlciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkNhbGN1bGF0ZWQiCi0JCQkJdmFsdWUgICAgICAJMTkwOSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkFGVEVSIgotCQkJCXZhbHVlICAgICAgCTE4MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiQkVGT1JFIgotCQkJCXZhbHVlICAgICAgCTE4MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TVEVBRCBPRiIKLQkJCQl2YWx1ZSAgICAgIAkxODAzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckZvckVhY2hTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiUk9XIgotCQkJCXZhbHVlICAgICAgCTE3MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiU1RBVEVNRU5UIgotCQkJCXZhbHVlICAgICAgCTE3MDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRXZlbnRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIgotCQkJCXZhbHVlICAgICAgCTE2MDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVVBEQVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIFVQREFURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJVUERBVEUgT1IgREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiSU5TRVJUIE9SIFVQREFURSBPUiBERUxFVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9yZGVyTnVtYmVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTnVsbHNBbGxvd2VkIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJMZW5ndGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmVjaXNpb24iCi0JCQl2YWx1ZSAgICAgIAkiMiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NhbGUiCi0JCQl2YWx1ZSAgICAgIAkiNiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNJbmRleCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUHJpbWFyeUtleSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbXBvc2l0ZVVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNoZWNrQ29uc3RyYWludCIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJSZXBvc2l0b3J5IgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Qcm9qZWN0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVzZU1TVkMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJoIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSGVhZGVyRmlsZUJhY2t1cEV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJofiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhlYWRlckZpbGVUZW1wb3JhcnlFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiaCMiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcHAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZUJhY2t1cEV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcH4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlRmlsZVRlbXBvcmFyeUV4dGVuc2lvbiIKLQkJCXZhbHVlICAgICAgCSJjcCMiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDcmVhdGVNaXNzaW5nRGlyZWN0b3JpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcnJvckxpbWl0IgotCQkJdmFsdWUgICAgICAJMzApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIkUk9TRUNQUF9TT1VSQ0UiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQYXRoU2VwYXJhdG9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lRm9ybWF0IgotCQkJdmFsdWUgICAgICAJIjEyOHZ4X2IiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb29sZWFuVHlwZSIKLQkJCXZhbHVlICAgICAgCSJpbnQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd1RlbXBsYXRlcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93RXhwbGljaXRJbnN0YW50aWF0aW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFsbG93UHJvdGVjdGVkSW5oZXJpdGFuY2UiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb21tZW50V2lkdGgiCi0JCQl2YWx1ZSAgICAgIAk2MCkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT25lQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPbmVCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbmFsQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJPcHRpb25hbEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wdGlvbmFsQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICoiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaXhlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRGaXhlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaXhlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRGaXhlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqWyRsaW1pdF0iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkTGlzdEJ5VmFsdWU8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRCb3VuZGVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkU2V0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkTGlzdEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkQm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkJvdW5kZWRTZXRCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVuYm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkTGlzdEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFVuYm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkU2V0QnlWYWx1ZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5ib3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkTGlzdEJ5UmVmZXJlbmNlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRVbmJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJVbmJvdW5kZWRTZXRCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJBc3NvY2lhdGlvbkJ5VmFsdWU8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkUXVhbGlmaWVkQnlWYWx1ZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJEaWN0aW9uYXJ5QnlWYWx1ZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJBc3NvY2lhdGlvbkJ5UmVmZXJlbmNlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFF1YWxpZmllZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIkRpY3Rpb25hcnlCeVJlZmVyZW5jZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByZXNlcnZlUmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNsYXNzS2V5IgotCQkJdmFsdWUgICAgICAJImNsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQdXRCb2RpZXNJblNwZWMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0Q29uc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeHBsaWNpdERlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvcHlDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvcHlDb25zdHJ1Y3RvclZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQ29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkV4cGxpY2l0Q29weUNvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVzdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlc3RydWN0b3JLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVBc3NpZ25tZW50T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzaWdubWVudFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzaWdubWVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzaWdubWVudE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVxdWFsaXR5T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVxdWFsaXR5VmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcXVhbGl0eUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkZyaWVuZEtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUVxdWFsaXR5T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVJlbGF0aW9uYWxPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlJlbGF0aW9uYWxWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlJlbGF0aW9uYWxLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGcmllbmRLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVSZWxhdGlvbmFsT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0b3JhZ2VNZ210T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdG9yYWdlTWdtdFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3RvcmFnZU1nbXRPcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3Vic2NyaXB0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdFZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0S2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRSZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVN1YnNjcmlwdE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlcmVmZXJlbmNlT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZUtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VSZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZURlcmVmZXJlbmNlT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5kaXJlY3Rpb25PcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25WaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvblJlc3VsdFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lSW5kaXJlY3Rpb25PcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdHJlYW1PcGVyYXRpb25zIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN0cmVhbVZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU3RyZWFtT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJUaHJlZUtpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGcmllbmRLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGcmllbmQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEZWNsYXJlQW5kRGVmaW5lIgotCQkJCXZhbHVlICAgICAgCTE5OSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRGVjbGFyZU9ubHkiCi0JCQkJdmFsdWUgICAgICAJMjA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJEb05vdERlY2xhcmUiCi0JCQkJdmFsdWUgICAgICAJMjA2KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb25zdFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0U3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5zb2FwL3NyYy9yb3NlL3NvYXBiaW5kaW5nTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZU9yZGVyIgotCQkJdmFsdWUgICAgICAJIkFNSVIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGUiCi0JCQl2YWx1ZSAgICAgIAkoIklubGluaW5nU3R5bGVTZXQiIDIwNykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluaW5nU3R5bGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkluQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDgpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZvbGxvd2luZ0NsYXNzRGVjbGFyYXRpb24iCi0JCQkJdmFsdWUgICAgICAJMjA3KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlR5cGVzRGVmaW5lZCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUNsb3N1cmUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIgMykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucHJlc2VydmVkIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFsbCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgIEAoIykgcGx1Z2lucy9jb20uaWJtLmV0b29scy5jdGMuYmluZGluZy5zb2FwL3NyYy9yb3NlL3NvYXBiaW5kaW5nTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZCIKLQkJCXZhbHVlICAgICAgCSgiT3BlcmF0aW9uS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVudHJ5Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhpdENvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9keUFubm90YXRpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmFpc2VzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9yZGVyZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZWxlY3Rvck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2VsZWN0b3JUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhhc1JlbFR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0Fzc29jaWF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHRhcmdldENsYXNzIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Jbmhlcml0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluc3RhbmNlQXJndW1lbnRzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyR2V0IgotCQkJdmFsdWUgICAgICAJIiRkYXRhLmdldCgka2V5cykiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJTZXQiCi0JCQl2YWx1ZSAgICAgIAkiJGRhdGEuc2V0KCRrZXlzLCR2YWx1ZSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0NvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkc3VwcGxpZXIgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAkoIlF1YWxpZmllZEdldFNldEJ5UmVmZXJlbmNlU2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2VTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19HZXRTZXRCeVJlZmVyZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUXVhbGlmaWVkR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUXVhbGlmaWVkR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVRdWFsaWZpZWRTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVF1YWxpZmllZFNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0RhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0dldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc29jQ2xhc3NHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc29jQ2xhc3NTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzb2NDbGFzc1NldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRBdHRyaWJ1dGVWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2FzZVNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb2R5UmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnlJc09uU2VhcmNoTGlzdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGVudCIKLQkJCXZhbHVlICAgICAgCTIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJIjUuMCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNDbGFzc1R5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNDbGFzc1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiSW50ZXJmYWNlX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDb25uZWN0aW9uX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDbGFzc19GYWN0b3J5IgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT2JqZWN0RnVuY3Rpb25hbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiQ09iamVjdEZ1bmN0aW9uYWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPYmplY3RGdW5jdGlvbmFsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEeW5hbWljIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRHluY3JlYXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU2VyaWFsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU92ZXJyaWRlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9EQVRBX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaWVsZEdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0ZJRUxEX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNZXNzYWdlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1lc3NhZ2VNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1FU1NBR0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSgiT0xFRmFjdG9yeVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRfaW4iCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJMaWNlbnNlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUNsYXNzSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU9MRUN0bFR5cGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDdGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVPTEVUeXBlTGliIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYklEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1ham9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1pbm9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcm9wUGFnZUlEcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVByb3BQYWdlSURzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGlzcGF0Y2hNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRnVuY3Rpb25zIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoRGVmVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURpc3BJZEVudW0iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUF9JRF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW50ZXJmYWNlTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSU5URVJGQUNFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaXRJbnRlcmZhY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUV2ZW50TWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRXZlbnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXZlbnRTaW5rTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlByb3BOb3RpZnlTaW5rcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvbm5lY3Rpb25NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNvbm5lY3Rpb25Qb2ludElJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRhbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ29tbWFuZHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDSW1wbGVtZW50cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBVExfRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDT01NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT01fTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb25uZWN0aW9uUG9pbnRNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX1BPSU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTXNnTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJvcGVydHlNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQUk9QRVJUWV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNPcGVyYXRpb25UeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDT3BlcmF0aW9uVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsX092ZXJyaWRlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVzc2FnZV9IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlzcGF0Y2hfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X0ZpcmluZ19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X1NpbmtfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAk1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0ZF9PTEVfTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQ29tbWFuZF9QYXJzZXIiCi0JCQkJdmFsdWUgICAgICAJNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9HZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9TZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9Ob3RpZnlfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWFjcm9fR2VuZXJhdGVkX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTExKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX01TR19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRVNTQUdFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkJvZHlJbWFnZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5jbHVkZXNHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9JTkNMVURFU19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zZXJ0TG9jYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmNsdWRlc0dyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0lOQ0xVREVTX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnNlcnRMb2NhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiU0NDIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJUeXBlTGliSW1wb3J0ZXIiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI3ODM2MDYzNzgiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljTm90Q3JlYXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTIxMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlNpbmdsZVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJHbG9iYWxTaW5nbGVVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiR2xvYmFsTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjIwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25CYXNlIgotCQkJdmFsdWUgICAgICAJIjAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uQ29tcGFyZSIKLQkJCXZhbHVlICAgICAgCSgiQ29tcGFyZVNldCIgMjAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZSIKLQkJCXZhbHVlICAgICAgCSgiQ3JlYXRhYmxlU2V0IiAyMjEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbml0aWFsaXphdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVUZXJtaW5hdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbkNsYXNzIgotCQkJdmFsdWUgICAgICAJIkNvbGxlY3Rpb24iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29tcGFyZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiQmluYXJ5IgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlRleHQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkb3BlcmF0aW9uIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkxpYnJhcnlOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJBbGlhc05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIklzU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFbnRyeUNvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFeGl0Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOZXciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIldpdGhFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZSRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTGV0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5ldyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiV2l0aEV2ZW50cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVMZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSW5oZXJpdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50c0RlbGVnYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiUHJvamVjdEZpbGUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWxTdHVkaW8iCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiRWRpdG9yIgotCQkJdmFsdWUgICAgICAJKCJFZGl0b3JUeXBlIiAxMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkVkaXRvclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIkJ1aWx0SW4iCi0JCQkJdmFsdWUgICAgICAJMTAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJCW5hbWUgICAgICAgCSJXaW5kb3dzU2hlbGwiCi0JCQkJdmFsdWUgICAgICAJMTAxKSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQXJyYXlEaW1lbnNpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb25UeXBlIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLVNwZWMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEluY2x1ZGVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICVRJSAlWiUgJVclIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiSW5jbHVzaW9uUHJvdGVjdGlvblN5bWJvbCIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiICAlWCUgJVElICVaJSAlVyUiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDb250ZXh0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFycmF5RGltZW5zaW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQluYW1lICAgICAgIAkiT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFycmF5RGltZW5zaW9ucyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJDYXNlU3BlY2lmaWVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIk9yZGVyIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkNPUkJBIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJDT1JCQSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiQ09SQkEiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJEZWZhdWx0X1NlcnZsZXRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0Q29udGV4dFJlZiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIklzU2luZ2xlVGhyZWFkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEluaXRQYXJhbWV0ZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SW5pdFBhcmFtZXRlck5hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldElzU2VjdXJlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldFJlcXVlc3REaXNwYXRjaGVyUGF0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoZXJJbmNsdWRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRGlzcGF0Y2hlckZvcndhcmQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0U2VjdXJpdHlSb2xlcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRnZXRJbmZvIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJIkh0dHBfU2VydmxldF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdEF0dHJpYnV0ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0QXR0cmlidXRlc05hbWVzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTWV0aG9kRm9yUmVxdWVzdEF0dHJpYnV0ZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0UmVxdWVzdFBhcmFtZXRlciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRSZXF1ZXN0UGFyYW1ldGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JSZXF1ZXN0UGFyYW1ldGVycyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJTZXJ2bGV0SGVhZGVyTmFtZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RGb3JIZWFkZXJzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldEludEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXREYXRlSGVhZGVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU2VydmxldENvb2tpZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIk1ldGhvZEZvckNvb2tpZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlNlcnZsZXRDb250ZW50VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSFRNTCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJEZWZhdWx0X0VKQl9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZV9YTUxfREQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQkNtcEZpZWxkIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCRW52aXJvbm1lbnRQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCQ254RmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlJlZmVyZW5jZXMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZWN1cml0eVJvbGVzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCTmFtZUluSkFSIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCU2Vzc2lvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlNlc3Npb25UeXBlX1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJTZXNzaW9uVHlwZV9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJTdGF0ZWxlc3MiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlN0YXRlZnVsIgotCQkJCXZhbHVlICAgICAgCTIwMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkVKQlRyYW5zYWN0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiRUpCVHJhbnNhY3Rpb25UeXBlX1NldCIgMjExKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJUcmFuc2FjdGlvblR5cGVfU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiQmVhbiIKLQkJCQl2YWx1ZSAgICAgIAkyMTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJQZXJzaXN0ZW5jZVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIkVKQlBlcnNpc3RlbmNlVHlwZV9TZXQiIDIyMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRUpCUGVyc2lzdGVuY2VUeXBlX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSIiCi0JCQkJdmFsdWUgICAgICAJMjIwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkJlYW4iCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lciIKLQkJCQl2YWx1ZSAgICAgIAkyMjIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJFSkJSZWVudHJhbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJCTVBfRXh0ZW5kX0NNUCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9ySXMiCi0JCQl2YWx1ZSAgICAgIAkoIkN0b3JfU2V0IiA2MikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ3Rvcl9TZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHVibGljIgotCQkJCXZhbHVlICAgICAgCTYyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk2MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTY0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaW5hbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN0YXRpY0luaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnN0YW5jZUluaXRpYWxpemVyIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlIyRWRpdG9yIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJSb3NlIE1vZGVsIEludGVncmF0b3IiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlJvc2UgV2ViIFB1Ymxpc2hlciIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmVyc2lvbiBDb250cm9sIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjkiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DYXRlZ29yeSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwYWNrYWdlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1ByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJuc1VSSSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJiYXNlUGFja2FnZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJwcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImNsYXNzaWZpZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImNvbnN0cmFpbnRzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sQ29udGVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIkNvbnRlbnRLaW5kIiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiQ29udGVudEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlVuc3BlY2lmaWVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVtcHR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlNpbXBsZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJNaXhlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50T25seSIKLQkJCQl2YWx1ZSAgICAgIAk0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkib3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImFubm90YXRpb24iCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYXR0cmlidXRlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzQ2hhbmdlYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5zZXR0YWJsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzSUQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRmVhdHVyZUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkF0dHJpYnV0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkicmVmZXJlbmNlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1RyYW5zaWVudCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzQ2hhbmdlYWJsZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5zZXR0YWJsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJpc1Jlc29sdmVQcm94aWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkidmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiUmVhZC13cml0ZSIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLW9ubHkgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIHVuc2V0dGFibGUiCi0JCQkJdmFsdWUgICAgICAJNSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWVzcGFjZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRmVhdHVyZUtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJGZWF0dXJlS2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkF0dHJpYnV0ZSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJFbGVtZW50IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpKQotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjciKSkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvV1NETC5lY29yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvbW9kZWwvV1NETC5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI0OTNkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwuZWNvcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1OTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0id3NkbCIKLSAgICBuc1VSST0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvV1NETCIgbnNQcmVmaXg9IndzZGwiPgotICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhlIFdTREwgbW9kZWwgY29udGFpbnMgY2xhc3NlcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkuJiN4RDsmI3hBOyYjeEQ7JiN4QTtXU0RMIGRlc2NyaWJlcyBuZXR3b3JrIHNlcnZpY2VzIGFzIHNldHMgb2YgZW5kcG9pbnRzIG9wZXJhdGluZyBvbiBtZXNzYWdlcy4gVGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGFyZSBkZXNjcmliZWQgYWJzdHJhY3RseSwgYW5kIHRoZW4gYm91bmQgdG8gYSBjb25jcmV0ZSBuZXR3b3JrIHByb3RvY29sIGFuZCBtZXNzYWdlIGZvcm1hdCB0byBkZWZpbmUgYW4gZW5kcG9pbnQuJiN4RDsmI3hBOyYjeEQ7JiN4QTtXU0RMIGRlc2NyaWJlcyB0aGUgZm9ybWF0cyBvZiB0aGUgbWVzc2FnZXMgZXhjaGFuZ2VkIGJ5IHRoZSBzZXJ2aWNlcywgYW5kIHN1cHBvcnRzIHRoZSBYTUwgU2NoZW1hcyBzcGVjaWZpY2F0aW9uIGFzIGl0cyBjYW5vbmljYWwgdHlwZSBzeXN0ZW0uIFRoaXMgcGFja2FnZSB1c2VzIGFuIFhNTCBTY2hlbWEgSW5mb3NldCBtb2RlbCBwYWNrYWdlIChzZWUgdGhlIFhTRCBwYWNrYWdlKSB0byBkZXNjcmliZSB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXRzLiYjeEQ7JiN4QTsmI3hEOyYjeEE7VGhlIG1vZGVsIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbXMsIG5hbWVkIGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nIGNoYXB0ZXJzIGluIHRoZSBXU0RMIDEuMSBzcGVjaWZpY2F0aW9uIChodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL05PVEUtd3NkbC0yMDAxMDMxNSkmI3hEOyYjeEE7LSAyLjEgRGVmaW5pdGlvbiwgc2hvd3MgdGhlIFdTREwgZGVmaW5pdGlvbiBlbGVtZW50IGFuZCB0aGUgV1NETCBkb2N1bWVudCBzdHJ1Y3R1cmUmI3hEOyYjeEE7LSAyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmcsIHNob3dzIHRoZSBuYW1lc3BhY2UgYW5kIGltcG9ydCBtZWNoYW5pc20mI3hEOyYjeEE7LSAyLjEuMyBFeHRlbnNpYmlsaXR5LCBzaG93cyB0aGUgV1NETCBleHRlbnNpYmlsaXR5IG1lY2hhbmlzbSYjeEQ7JiN4QTstIDIuMiBUeXBlcywgc2hvd3MgdGhlIHVzZSBvZiBYTUwgU2NoZW1hIHR5cGVzIGluIFdTREwmI3hEOyYjeEE7LSAyLjMgTWVzc2FnZXMsIDIuNCBQb3J0VHlwZXMsIDIuNSBCaW5kaW5ncyBhbmQgMi43IFNlcnZpY2VzLCBzaG93IHRoZSBtYWpvciBXU0RMIGVsZW1lbnRzIGFuZCB0aGVpciByZWxhdGlvbnMuJiN4RDsmI3hBOyYjeEQ7JiN4QTtUaGUgV1NETCBjbGFzc2VzIGV4dGVuZCB0aGUgamF2YXgud3NkbCBpbnRlcmZhY2VzIGRlZmluZWQgYnkgSlNSIDExMC4gQ2xhc3NlcyB3aXRoIGludGVyZmFjZSBhbmQgZGF0YXR5cGUgc3RlcmVvdHlwZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZXNlIG5vbi1NT0YgaW50ZXJmYWNlcy4iLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iV1NETEVsZW1lbnQiIGFic3RyYWN0PSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGxhbmd1YWdlIGVsZW1lbnQuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEVuY2xvc2luZ0RlZmluaXRpb24iIGVUeXBlPSIjLy9EZWZpbml0aW9uIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldEVuY2xvc2luZ0RlZmluaXRpb24iPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImRlZmluaXRpb24iIGVUeXBlPSIjLy9EZWZpbml0aW9uIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZG9jdW1lbnRhdGlvbkVsZW1lbnQiIGVUeXBlPSIjLy9ET01FbGVtZW50Ii8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVsZW1lbnQiIGVUeXBlPSIjLy9ET01FbGVtZW50IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUG9ydFR5cGUiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JUG9ydFR5cGUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9ydFR5cGUgZWxlbWVudCBvZiB0aGUgV1NETCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gMS4xIGFuZCBhbiBJbnRlcmZhY2UgY29tcG9uZW50IG9mIHRoZSBXU0RMIHNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjIuIEEgcG9ydCB0eXBlIG9yIEludGVyZmFjZSBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZCB0aGUgYWJzdHJhY3QgbWVzc2FnZXMgaW52b2x2ZWQuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InFOYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idW5kZWZpbmVkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlT3BlcmF0aW9ucyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9PcGVyYXRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik9wZXJhdGlvbiIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lPcGVyYXRpb24iPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3BlcmF0aW9uIGVsZW1lbnQuIEEgV1NETCBvcGVyYXRpb24gaXMgYW4gYWJzdHJhY3QgZGVzY3JpcHRpb24gb2YgYW4gYWN0aW9uIHN1cHBvcnRlZCBieSBhIHNlcnZpY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InN0eWxlIiBlVHlwZT0iIy8vT3BlcmF0aW9uVHlwZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVuZGVmaW5lZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUlucHV0IiBlVHlwZT0iIy8vSW5wdXQiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVPdXRwdXQiIGVUeXBlPSIjLy9PdXRwdXQiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVGYXVsdHMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vRmF1bHQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQYXJhbWV0ZXJPcmRlcmluZyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9QYXJ0Ii8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1lc3NhZ2UiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JTWVzc2FnZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBtZXNzYWdlIGVsZW1lbnQuIEEgV1NETCBtZXNzYWdlIGlzIGFuIGFic3RyYWN0LCB0eXBlZCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIGNvbW11bmljYXRlZC4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icU5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1bmRlZmluZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQYXJ0cyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9QYXJ0IiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQYXJ0IiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSVBhcnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcGFydCBlbGVtZW50LiBQYXJ0cyBkZXNjcmliZSB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gRWFjaCBwYXJ0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHR5cGUgZnJvbSBzb21lIHR5cGUgc3lzdGVtLiAiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlbGVtZW50TmFtZSIgZVR5cGU9IiMvL1FOYW1lIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InR5cGVOYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idHlwZURlZmluaXRpb24iIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmVjb3JlIy8vWFNEVHlwZURlZmluaXRpb24iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZWxlbWVudERlY2xhcmF0aW9uIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL21vZGVsL1hTRC5lY29yZSMvL1hTREVsZW1lbnREZWNsYXJhdGlvbiIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlTWVzc2FnZSIgZVR5cGU9IiMvL01lc3NhZ2UiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQmluZGluZyIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lCaW5kaW5nIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGJpbmRpbmcgZWxlbWVudC4gQSBiaW5kaW5nIGRlZmluZXMgbWVzc2FnZSBmb3JtYXQgYW5kIHByb3RvY29sIGRldGFpbHMgZm9yIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnRUeXBlLiBUaGVyZSBtYXkgYmUgYW55IG51bWJlciBvZiBiaW5kaW5ncyBmb3IgYSBnaXZlbiBwb3J0VHlwZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icU5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1bmRlZmluZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQb3J0VHlwZSIgbG93ZXJCb3VuZD0iMSIKLSAgICAgICAgZVR5cGU9IiMvL1BvcnRUeXBlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVCaW5kaW5nT3BlcmF0aW9ucyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9CaW5kaW5nT3BlcmF0aW9uIiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJCaW5kaW5nT3BlcmF0aW9uIiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSUJpbmRpbmdPcGVyYXRpb24iPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3BlcmF0aW9uIGVsZW1lbnQgd2l0aGluIGEgYmluZGluZy4gQW4gb3BlcmF0aW9uIGVsZW1lbnQgd2l0aGluIGEgYmluZGluZyBzcGVjaWZpZXMgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgd2l0aGluIHRoZSBiaW5kaW5nJ3MgcG9ydFR5cGUuICIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVPcGVyYXRpb24iIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9PcGVyYXRpb24iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUJpbmRpbmdJbnB1dCIgZVR5cGU9IiMvL0JpbmRpbmdJbnB1dCIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUJpbmRpbmdPdXRwdXQiIGVUeXBlPSIjLy9CaW5kaW5nT3V0cHV0IgotICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlQmluZGluZ0ZhdWx0cyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9CaW5kaW5nRmF1bHQiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNlcnZpY2UiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JU2VydmljZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBzZXJ2aWNlIGVsZW1lbnQuIEEgc2VydmljZSBncm91cHMgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cyB0b2dldGhlci4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icU5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1bmRlZmluZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQb3J0cyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9Qb3J0IiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQb3J0IiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSVBvcnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9ydCBlbGVtZW50LiBBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUJpbmRpbmciIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9CaW5kaW5nIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkV4dGVuc2liaWxpdHlFbGVtZW50IiBlU3VwZXJUeXBlcz0iIy8vV1NETEVsZW1lbnQgIy8vSUV4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudC4gV1NETCBhbGxvd3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0ZWNobm9sb2d5IHVuZGVyIHZhcmlvdXMgZWxlbWVudHMgZGVmaW5lZCBieSBXU0RMLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyZXF1aXJlZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZWxlbWVudFR5cGUiIGVUeXBlPSIjLy9RTmFtZSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRlZmluaXRpb24iIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JRGVmaW5pdGlvbiI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50IGlzIHRoZSByb290IGVsZW1lbnQgb2YgYSBXU0RMIGRvY3VtZW50LiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXREb2N1bWVudCIgZVR5cGU9IiMvL0RPTURvY3VtZW50Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldERvY3VtZW50Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJkb2N1bWVudCIgZVR5cGU9IiMvL0RPTURvY3VtZW50Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGFyZ2V0TmFtZXNwYWNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxvY2F0aW9uIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InFOYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZW5jb2RpbmciIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUltcG9ydHMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vSW1wb3J0IiBjb250YWlubWVudD0idHJ1ZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlVHlwZXMiIGVUeXBlPSIjLy9UeXBlcyIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZU1lc3NhZ2VzIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL01lc3NhZ2UiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVQb3J0VHlwZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vUG9ydFR5cGUiIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVCaW5kaW5ncyIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9CaW5kaW5nIiBjb250YWlubWVudD0idHJ1ZSIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlU2VydmljZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vU2VydmljZSIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZU5hbWVzcGFjZXMiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vTmFtZXNwYWNlIiBjb250YWlubWVudD0idHJ1ZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbXBvcnQiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JSW1wb3J0Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgV1NETCBpbXBvcnQgZWxlbWVudC4gV1NETCBhbGxvd3MgYXNzb2NpYXRpbmcgYSBuYW1lc3BhY2Ugd2l0aCBhIGRvY3VtZW50IGxvY2F0aW9uIHVzaW5nIGFuIGltcG9ydCBlbGVtZW50LiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRTY2hlbWEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmVjb3JlIy8vWFNEU2NoZW1hIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldFNjaGVtYSI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ic2NoZW1hIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL21vZGVsL1hTRC5lY29yZSMvL1hTRFNjaGVtYSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsb2NhdGlvblVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlRGVmaW5pdGlvbiIgZVR5cGU9IiMvL0RlZmluaXRpb24iLz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVNjaGVtYSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9tb2RlbC9YU0QuZWNvcmUjLy9YU0RTY2hlbWEiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRXh0ZW5zaWJsZUVsZW1lbnQiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vV1NETEVsZW1lbnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiBXU0RMIGFsbG93cyBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0ZWNobm9sb2d5IChyZWZlcnJlZCB0byBoZXJlIGFzIGV4dGVuc2liaWxpdHkgZWxlbWVudHMpIHVuZGVyIHZhcmlvdXMgZWxlbWVudHMgZGVmaW5lZCBieSBXU0RMLiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBvaW50IG9mIGV4dGVuc2liaWxpdHkuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEV4dGVuc2liaWxpdHlFbGVtZW50cyIgZVR5cGU9IiMvL0lMaXN0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZEV4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJleHRFbGVtZW50IiBlVHlwZT0iIy8vSUV4dGVuc2liaWxpdHlFbGVtZW50Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZUV4dGVuc2liaWxpdHlFbGVtZW50cyIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW5wdXQiIGVTdXBlclR5cGVzPSIjLy9NZXNzYWdlUmVmZXJlbmNlICMvL0lJbnB1dCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBpbnB1dCBlbGVtZW50LiBBbiBpbnB1dCBlbGVtZW50IHNwZWNpZmllcyB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIHRoZSBpbnB1dCBvZiB0aGUgb3BlcmF0aW9uLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJPdXRwdXQiIGVTdXBlclR5cGVzPSIjLy9NZXNzYWdlUmVmZXJlbmNlICMvL0lPdXRwdXQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3V0cHV0IGVsZW1lbnQuIEFuIG91dHB1dCBlbGVtZW50IHNwZWNpZmllcyB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRmF1bHQiIGVTdXBlclR5cGVzPSIjLy9NZXNzYWdlUmVmZXJlbmNlICMvL0lGYXVsdCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBmYXVsdCBlbGVtZW50LiBGYXVsdCBlbGVtZW50cyBzcGVjaWZ5IHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgYW55IGVycm9yIG1lc3NhZ2VzIHRoYXQgbWF5IGJlIG91dHB1dCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkJpbmRpbmdJbnB1dCIgZVN1cGVyVHlwZXM9IiMvL0V4dGVuc2libGVFbGVtZW50ICMvL0lCaW5kaW5nSW5wdXQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgaW5wdXQgZWxlbWVudCB3aXRoaW4gYSBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZy4gQW4gaW5wdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnB1dCBvZiB0aGUgb3BlcmF0aW9uLiAiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0SW5wdXQiIGVUeXBlPSIjLy9JSW5wdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0SW5wdXQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImlucHV0IiBlVHlwZT0iIy8vSUlucHV0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlSW5wdXQiIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9JbnB1dCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJCaW5kaW5nT3V0cHV0IiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSUJpbmRpbmdPdXRwdXQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3V0cHV0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEFuIG91dHB1dCBlbGVtZW50IHdpdGhpbiBhbiBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZyBzcGVjaWZpZXMgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG91dHB1dCBvZiB0aGUgb3BlcmF0aW9uLiAiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0T3V0cHV0IiBlVHlwZT0iIy8vSU91dHB1dCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRPdXRwdXQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im91dHB1dCIgZVR5cGU9IiMvL0lPdXRwdXQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVPdXRwdXQiIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9PdXRwdXQiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQmluZGluZ0ZhdWx0IiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQgIy8vSUJpbmRpbmdGYXVsdCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBmYXVsdCBlbGVtZW50IHdpdGhpbiBhIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nLiBBIGZhdWx0IGVsZW1lbnQgd2l0aGluIGFuIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nIHNwZWNpZmllcyBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgZmF1bHQgd2l0aCB0aGUgc2FtZSBuYW1lLiAiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RmF1bHQiIGVUeXBlPSIjLy9JRmF1bHQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0RmF1bHQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImZhdWx0IiBlVHlwZT0iIy8vSUZhdWx0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlRmF1bHQiIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIGVUeXBlPSIjLy9GYXVsdCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJRTmFtZSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5RTmFtZSBjbGFzcy4gQSBRTmFtZSBpcyBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOYW1lc3BhY2UiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIG5hbWVzcGFjZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbmFtZXNwYWNlIHByZWZpeCB1c2VkIGluIGEgV1NETCBkb2N1bWVudC4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJPcGVyYXRpb25UeXBlIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5PcGVyYXRpb25UeXBlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJPTkVfV0FZPTEmI3hEOyYjeEE7UkVRVUVTVF9SRVNQT05TRT0yJiN4RDsmI3hBO1NPTElDSVRfUkVTUE9OU0U9MyYjeEQ7JiN4QTtOT1RJRklDQVRJT049NCIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJUG9ydFR5cGUiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLlBvcnRUeXBlIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlBvcnRUeXBlIG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRPcGVyYXRpb24iPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im9wZXJhdGlvbiIgZVR5cGU9IiMvL0lPcGVyYXRpb24iLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRPcGVyYXRpb24iIGVUeXBlPSIjLy9JT3BlcmF0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iaW5wdXROYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ib3V0cHV0TmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE9wZXJhdGlvbnMiIGVUeXBlPSIjLy9JTGlzdCIvPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJT3BlcmF0aW9uIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5PcGVyYXRpb24iCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuT3BlcmF0aW9uIG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZmF1bHQiIGVUeXBlPSIjLy9JRmF1bHQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRGYXVsdCIgZVR5cGU9IiMvL0lGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEZhdWx0cyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0UGFyYW1ldGVyT3JkZXJpbmciIGVUeXBlPSIjLy9JTGlzdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRQYXJhbWV0ZXJPcmRlcmluZyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0icGFyYW1ldGVyT3JkZXIiIGVUeXBlPSIjLy9JTGlzdCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldElucHV0IiBlVHlwZT0iIy8vSUlucHV0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldElucHV0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJpbnB1dCIgZVR5cGU9IiMvL0lJbnB1dCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE91dHB1dCIgZVR5cGU9IiMvL0lPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0T3V0cHV0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvdXRwdXQiIGVUeXBlPSIjLy9JT3V0cHV0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUlucHV0IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5JbnB1dCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5JbnB1dCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0TWVzc2FnZSIgZVR5cGU9IiMvL0lNZXNzYWdlIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldE1lc3NhZ2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im1lc3NhZ2UiIGVUeXBlPSIjLy9JTWVzc2FnZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklPdXRwdXQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLk91dHB1dCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5PdXRwdXQgbm9uLU1PRiBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE1lc3NhZ2UiIGVUeXBlPSIjLy9JTWVzc2FnZSIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRNZXNzYWdlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJtZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJRmF1bHQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkZhdWx0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkZhdWx0IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibWVzc2FnZSIgZVR5cGU9IiMvL0lNZXNzYWdlIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSU1lc3NhZ2UiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLk1lc3NhZ2UiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuTWVzc2FnZSBub24tTU9GIGludGVyZmFjZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRQYXJ0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwYXJ0IiBlVHlwZT0iIy8vSVBhcnQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQYXJ0IiBlVHlwZT0iIy8vSVBhcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQYXJ0cyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0T3JkZXJlZFBhcnRzIiBlVHlwZT0iIy8vSUxpc3QiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBhcnRPcmRlciIgZVR5cGU9IiMvL0lMaXN0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVBhcnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLlBhcnQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuUGFydCBub24tTU9GIGludGVyZmFjZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRFeHRlbnNpb25BdHRyaWJ1dGUiIGVFeGNlcHRpb25zPSIjLy9XU0RMRXhjZXB0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL1FOYW1lIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RXh0ZW5zaW9uQXR0cmlidXRlTmFtZXMiIGVUeXBlPSIjLy9JSXRlcmF0b3IiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RXh0ZW5zaW9uQXR0cmlidXRlIiBlVHlwZT0iIy8vUU5hbWUiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklTZXJ2aWNlIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5TZXJ2aWNlIgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlNlcnZpY2Ugbm9uLU1PRiBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFBvcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBvcnQiIGVUeXBlPSIjLy9JUG9ydCIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFBvcnRzIiBlVHlwZT0iIy8vSU1hcCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQb3J0IiBlVHlwZT0iIy8vSVBvcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJUG9ydCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuUG9ydCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5Qb3J0IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRCaW5kaW5nIiBlVHlwZT0iIy8vSUJpbmRpbmciLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0QmluZGluZyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iYmluZGluZyIgZVR5cGU9IiMvL0lCaW5kaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmciIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkJpbmRpbmciCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZyBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkQmluZGluZ09wZXJhdGlvbiI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iYmluZGluZ09wZXJhdGlvbiIgZVR5cGU9IiMvL0lCaW5kaW5nT3BlcmF0aW9uIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZ09wZXJhdGlvbiIgZVR5cGU9IiMvL0lCaW5kaW5nT3BlcmF0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iaW5wdXROYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ib3V0cHV0TmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEJpbmRpbmdPcGVyYXRpb25zIiBlVHlwZT0iIy8vSUxpc3QiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0UG9ydFR5cGUiIGVUeXBlPSIjLy9JUG9ydFR5cGUiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0UG9ydFR5cGUiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBvcnRUeXBlIiBlVHlwZT0iIy8vSVBvcnRUeXBlIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdPcGVyYXRpb24iIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24iCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkQmluZGluZ0ZhdWx0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJiaW5kaW5nRmF1bHQiIGVUeXBlPSIjLy9JQmluZGluZ0ZhdWx0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZ0ZhdWx0IiBlVHlwZT0iIy8vSUJpbmRpbmdGYXVsdCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEJpbmRpbmdGYXVsdHMiIGVUeXBlPSIjLy9JTWFwIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE9wZXJhdGlvbiIgZVR5cGU9IiMvL0lPcGVyYXRpb24iLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0T3BlcmF0aW9uIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvcGVyYXRpb24iIGVUeXBlPSIjLy9JT3BlcmF0aW9uIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZ0lucHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdJbnB1dCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzZXRCaW5kaW5nSW5wdXQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImJpbmRpbmdJbnB1dCIgZVR5cGU9IiMvL0lCaW5kaW5nSW5wdXQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRCaW5kaW5nT3V0cHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0QmluZGluZ091dHB1dCI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iYmluZGluZ091dHB1dCIgZVR5cGU9IiMvL0lCaW5kaW5nT3V0cHV0Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdJbnB1dCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuQmluZGluZ0lucHV0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdPdXRwdXQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuQmluZGluZ091dHB1dCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUJpbmRpbmdGYXVsdCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuQmluZGluZ0ZhdWx0IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iRE9NRWxlbWVudCIgaW5zdGFuY2VDbGFzc05hbWU9Im9yZy53M2MuZG9tLkVsZW1lbnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgb3JnLnczYy5kb20uRWxlbWVudCBub24tTU9GIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSUV4dGVuc2liaWxpdHlFbGVtZW50IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IgotICAgICAgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJRGVmaW5pdGlvbiIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuRGVmaW5pdGlvbiIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5EZWZpbml0aW9uIG5vbi1NT0YgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRCaW5kaW5nIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJiaW5kaW5nIiBlVHlwZT0iIy8vSUJpbmRpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRJbXBvcnQiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImltcG9ydERlZiIgZVR5cGU9IiMvL0lJbXBvcnQiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGRNZXNzYWdlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJtZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhZGROYW1lc3BhY2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWVzcGFjZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFBvcnRUeXBlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwb3J0VHlwZSIgZVR5cGU9IiMvL0lQb3J0VHlwZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZFNlcnZpY2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InNlcnZpY2UiIGVUeXBlPSIjLy9JU2VydmljZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZUJpbmRpbmdGYXVsdCIgZVR5cGU9IiMvL0lCaW5kaW5nRmF1bHQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlQmluZGluZ0lucHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdJbnB1dCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVCaW5kaW5nT3V0cHV0IiBlVHlwZT0iIy8vSUJpbmRpbmdPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlQmluZGluZ09wZXJhdGlvbiIgZVR5cGU9IiMvL0lCaW5kaW5nT3BlcmF0aW9uIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZUJpbmRpbmciIGVUeXBlPSIjLy9JQmluZGluZyIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVGYXVsdCIgZVR5cGU9IiMvL0lGYXVsdCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVJbXBvcnQiIGVUeXBlPSIjLy9JSW1wb3J0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZUlucHV0IiBlVHlwZT0iIy8vSUlucHV0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZU1lc3NhZ2UiIGVUeXBlPSIjLy9JTWVzc2FnZSIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVPcGVyYXRpb24iIGVUeXBlPSIjLy9JT3BlcmF0aW9uIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZU91dHB1dCIgZVR5cGU9IiMvL0lPdXRwdXQiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlUGFydCIgZVR5cGU9IiMvL0lQYXJ0Ii8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImNyZWF0ZVBvcnQiIGVUeXBlPSIjLy9JUG9ydCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVQb3J0VHlwZSIgZVR5cGU9IiMvL0lQb3J0VHlwZSIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVTZXJ2aWNlIiBlVHlwZT0iIy8vSVNlcnZpY2UiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QmluZGluZyIgZVR5cGU9IiMvL0lCaW5kaW5nIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRCaW5kaW5ncyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0SW1wb3J0cyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0SW1wb3J0cyIgZVR5cGU9IiMvL0lMaXN0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lc3BhY2VVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE1lc3NhZ2VzIiBlVHlwZT0iIy8vSU1hcCIvPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXROYW1lc3BhY2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE5hbWVzcGFjZXMiIGVUeXBlPSIjLy9JTWFwIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFBvcnRUeXBlIiBlVHlwZT0iIy8vSVBvcnRUeXBlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRQb3J0VHlwZXMiIGVUeXBlPSIjLy9JTWFwIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFByZWZpeCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibmFtZXNwYWNlVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0U2VydmljZSIgZVR5cGU9IiMvL0lTZXJ2aWNlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRTZXJ2aWNlcyIgZVR5cGU9IiMvL0lNYXAiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RXh0ZW5zaW9uUmVnaXN0cnkiIGVUeXBlPSIjLy9JRXh0ZW5zaW9uUmVnaXN0cnkiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0RXh0ZW5zaW9uUmVnaXN0cnkiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImV4dGVuc2lvblJlZ2lzdHJ5IiBlVHlwZT0iIy8vSUV4dGVuc2lvblJlZ2lzdHJ5Ii8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0RG9jdW1lbnRCYXNlVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldERvY3VtZW50QmFzZVVSSSI+Ci0gICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZG9jdW1lbnRCYXNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPC9lT3BlcmF0aW9ucz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlVHlwZXMiIGVUeXBlPSIjLy9JVHlwZXMiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icmVtb3ZlU2VydmljZSIgZVR5cGU9IiMvL0lTZXJ2aWNlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZW1vdmVCaW5kaW5nIiBlVHlwZT0iIy8vSUJpbmRpbmciPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InJlbW92ZVBvcnRUeXBlIiBlVHlwZT0iIy8vSVBvcnRUeXBlIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lIiBlVHlwZT0iIy8vUU5hbWUiLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZW1vdmVNZXNzYWdlIiBlVHlwZT0iIy8vSU1lc3NhZ2UiPgotICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5hbWUiIGVUeXBlPSIjLy9RTmFtZSIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldFR5cGVzIiBlVHlwZT0iIy8vSVR5cGVzIi8+Ci0gICAgPGVPcGVyYXRpb25zIG5hbWU9InNldFR5cGVzIj4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0eXBlcyIgZVR5cGU9IiMvL0lUeXBlcyIvPgotICAgIDwvZU9wZXJhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklJbXBvcnQiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLkltcG9ydCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5JbXBvcnQgbm9uLU1PRiBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklMaXN0IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLkxpc3QiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YS51dGlsLkxpc3QgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJTWFwIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLk1hcCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLnV0aWwuTWFwIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVVSTCIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEubmV0LlVSTCIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLm5ldC5VUkwgaW50ZXJmYWNlLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJRXh0ZW5zaW9uUmVnaXN0cnkiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5IGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVHlwZXMiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmxlRWxlbWVudCAjLy9JVHlwZXMiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgdHlwZXMgZWxlbWVudC4gVGhlIHR5cGVzIGVsZW1lbnQgZW5jbG9zZXMgZGF0YSB0eXBlIGRlZmluaXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGZvciB0aGUgZXhjaGFuZ2VkIG1lc3NhZ2VzLiIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRTY2hlbWFzIiBlVHlwZT0iIy8vSUxpc3QiLz4KLSAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0U2NoZW1hcyIgZVR5cGU9IiMvL0lMaXN0Ij4KLSAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJuYW1lc3BhY2VVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KLSAgICA8L2VPcGVyYXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJSXRlcmF0b3IiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLnV0aWwuSXRlcmF0b3IiCi0gICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCI+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YS51dGlsLkl0ZXJhdG9yIGludGVyZmFjZS4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iV1NETEV4Y2VwdGlvbiIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmF4LndzZGwuV1NETEV4Y2VwdGlvbiI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkV4Y2VwdGlvbiBjbGFzcy4iLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSVR5cGVzIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YXgud3NkbC5UeXBlcyIKLSAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5UeXBlcyBub24tTU9GIGludGVyZmFjZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImNoaWxkcmVuIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9IiMvL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIgY29udGFpbm1lbnQ9InRydWUiLz4KLSAgPC9lQ2xhc3NpZmllcnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGVTdXBlclR5cGVzPSIjLy9FeHRlbnNpYmlsaXR5RWxlbWVudCI+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InNjaGVtYSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9tb2RlbC9YU0QuZWNvcmUjLy9YU0RTY2hlbWEiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IkRPTURvY3VtZW50IiBpbnN0YW5jZUNsYXNzTmFtZT0ib3JnLnczYy5kb20uRG9jdW1lbnQiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KLSAgICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgb3JnLnczYy5kb20uRG9jdW1lbnQgbm9uLU1PRiBpbnRlcmZhY2UuIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1lc3NhZ2VSZWZlcmVuY2UiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vRXh0ZW5zaWJsZUVsZW1lbnQiPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVNZXNzYWdlIiBsb3dlckJvdW5kPSIxIgotICAgICAgICBlVHlwZT0iIy8vTWVzc2FnZSIvPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwuZ2VubW9kZWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwuZ2VubW9kZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOTYxZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9XU0RMLmdlbm1vZGVsCisrKyAvZGV2L251bGwKQEAgLTEsMzg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgotICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsIgotICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS53c3Qud3NkbC5lZGl0L3NyYyIgZWRpdG9yRGlyZWN0b3J5PSJvcmcuZWNsaXBzZS53c3Qud3NkbC5lZGl0b3Ivc3JjIgotICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsIiBtb2RlbE5hbWU9IldTREwiIG1vZGVsUGx1Z2luQ2xhc3M9IiIgZWRpdFBsdWdpbkNsYXNzPSIiCi0gICAgZWRpdG9yUGx1Z2luQ2xhc3M9IiIgbm9uTkxTTWFya2Vycz0idHJ1ZSIgY29kZUZvcm1hdHRpbmc9InRydWUiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5yb3NlIgotICAgIHVzZWRHZW5QYWNrYWdlcz0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvbW9kZWwvWFNELmdlbm1vZGVsIy8veHNkIj4KLSAgPGZvcmVpZ25Nb2RlbD5XU0RMLm1kbDwvZm9yZWlnbk1vZGVsPgotICA8Zm9yZWlnbk1vZGVsPlZBQkFTRV9QTFVHSU5TX1BBVEg8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD4uLi8uLjwvZm9yZWlnbk1vZGVsPgotICA8Z2VuUGFja2FnZXMgcHJlZml4PSJXU0RMIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0IiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgotICAgICAgY2xhc3NQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC5pbXBsIiB1dGlsaXR5UGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwudXRpbCIgZWNvcmVQYWNrYWdlPSJXU0RMLmVjb3JlIy8iPgotICAgIDxnZW5EYXRhVHlwZXMgZWNvcmVEYXRhVHlwZT0iV1NETC5lY29yZSMvL1FOYW1lIi8+Ci0gICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJXU0RMLmVjb3JlIy8vT3BlcmF0aW9uVHlwZSIvPgotICAgIDxnZW5EYXRhVHlwZXMgZWNvcmVEYXRhVHlwZT0iV1NETC5lY29yZSMvL0RPTUVsZW1lbnQiLz4KLSAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9IldTREwuZWNvcmUjLy9XU0RMRXhjZXB0aW9uIi8+Ci0gICAgPGdlbkRhdGFUeXBlcyBlY29yZURhdGFUeXBlPSJXU0RMLmVjb3JlIy8vRE9NRG9jdW1lbnQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9XU0RMRWxlbWVudCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL1dTRExFbGVtZW50L2RvY3VtZW50YXRpb25FbGVtZW50Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL1dTRExFbGVtZW50L2VsZW1lbnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vV1NETEVsZW1lbnQvZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbiIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9XU0RMRWxlbWVudC9zZXRFbmNsb3NpbmdEZWZpbml0aW9uIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9XU0RMRWxlbWVudC9zZXRFbmNsb3NpbmdEZWZpbml0aW9uL2RlZmluaXRpb24iLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1BvcnRUeXBlIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vUG9ydFR5cGUvcU5hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vUG9ydFR5cGUvdW5kZWZpbmVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9Qb3J0VHlwZS9lT3BlcmF0aW9ucyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vT3BlcmF0aW9uIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vT3BlcmF0aW9uL3N0eWxlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL09wZXJhdGlvbi9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL09wZXJhdGlvbi91bmRlZmluZWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL09wZXJhdGlvbi9lSW5wdXQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL09wZXJhdGlvbi9lT3V0cHV0Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9PcGVyYXRpb24vZUZhdWx0cyIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9PcGVyYXRpb24vZVBhcmFtZXRlck9yZGVyaW5nIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9NZXNzYWdlIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vTWVzc2FnZS9xTmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9NZXNzYWdlL3VuZGVmaW5lZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vTWVzc2FnZS9lUGFydHMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1BhcnQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9QYXJ0L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vUGFydC9lbGVtZW50TmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9QYXJ0L3R5cGVOYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL1BhcnQvdHlwZURlZmluaXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vUGFydC9lbGVtZW50RGVjbGFyYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vUGFydC9lTWVzc2FnZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vQmluZGluZyI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0JpbmRpbmcvcU5hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vQmluZGluZy91bmRlZmluZWQiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vQmluZGluZy9lUG9ydFR5cGUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0JpbmRpbmcvZUJpbmRpbmdPcGVyYXRpb25zIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9CaW5kaW5nT3BlcmF0aW9uIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vQmluZGluZ09wZXJhdGlvbi9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0JpbmRpbmdPcGVyYXRpb24vZU9wZXJhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vQmluZGluZ09wZXJhdGlvbi9lQmluZGluZ0lucHV0Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nT3BlcmF0aW9uL2VCaW5kaW5nT3V0cHV0Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nT3BlcmF0aW9uL2VCaW5kaW5nRmF1bHRzIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9TZXJ2aWNlIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vU2VydmljZS9xTmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9TZXJ2aWNlL3VuZGVmaW5lZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vU2VydmljZS9lUG9ydHMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL1BvcnQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9Qb3J0L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vUG9ydC9lQmluZGluZyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudC9yZXF1aXJlZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9FeHRlbnNpYmlsaXR5RWxlbWVudC9lbGVtZW50VHlwZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0RlZmluaXRpb24vdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0RlZmluaXRpb24vbG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9xTmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VuY29kaW5nIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VJbXBvcnRzIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VUeXBlcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9lTWVzc2FnZXMiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0RlZmluaXRpb24vZVBvcnRUeXBlcyIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9lQmluZGluZ3MiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0RlZmluaXRpb24vZVNlcnZpY2VzIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9EZWZpbml0aW9uL2VOYW1lc3BhY2VzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0RlZmluaXRpb24vZ2V0RG9jdW1lbnQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9zZXREb2N1bWVudCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vRGVmaW5pdGlvbi9zZXREb2N1bWVudC9kb2N1bWVudCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSW1wb3J0Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vSW1wb3J0L25hbWVzcGFjZVVSSSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9JbXBvcnQvbG9jYXRpb25VUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vSW1wb3J0L2VEZWZpbml0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL0ltcG9ydC9lU2NoZW1hIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0ltcG9ydC9nZXRTY2hlbWEiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSW1wb3J0L3NldFNjaGVtYSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSW1wb3J0L3NldFNjaGVtYS9zY2hlbWEiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJsZUVsZW1lbnQiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vRXh0ZW5zaWJsZUVsZW1lbnQvZUV4dGVuc2liaWxpdHlFbGVtZW50cyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9FeHRlbnNpYmxlRWxlbWVudC9nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vRXh0ZW5zaWJsZUVsZW1lbnQvYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0V4dGVuc2libGVFbGVtZW50L2FkZEV4dGVuc2liaWxpdHlFbGVtZW50L2V4dEVsZW1lbnQiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lucHV0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL091dHB1dCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9GYXVsdCIvPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9CaW5kaW5nSW5wdXQiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9CaW5kaW5nSW5wdXQvbmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nSW5wdXQvZUlucHV0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0JpbmRpbmdJbnB1dC9nZXRJbnB1dCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9CaW5kaW5nSW5wdXQvc2V0SW5wdXQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0JpbmRpbmdJbnB1dC9zZXRJbnB1dC9pbnB1dCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vQmluZGluZ091dHB1dCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL0JpbmRpbmdPdXRwdXQvbmFtZSIvPgotICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIFdTREwuZWNvcmUjLy9CaW5kaW5nT3V0cHV0L2VPdXRwdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vQmluZGluZ091dHB1dC9nZXRPdXRwdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vQmluZGluZ091dHB1dC9zZXRPdXRwdXQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0JpbmRpbmdPdXRwdXQvc2V0T3V0cHV0L291dHB1dCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vQmluZGluZ0ZhdWx0Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vQmluZGluZ0ZhdWx0L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vQmluZGluZ0ZhdWx0L2VGYXVsdCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9CaW5kaW5nRmF1bHQvZ2V0RmF1bHQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vQmluZGluZ0ZhdWx0L3NldEZhdWx0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9CaW5kaW5nRmF1bHQvc2V0RmF1bHQvZmF1bHQiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL05hbWVzcGFjZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgV1NETC5lY29yZSMvL05hbWVzcGFjZS9VUkkiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBXU0RMLmVjb3JlIy8vTmFtZXNwYWNlL3ByZWZpeCIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JUG9ydFR5cGUiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvYWRkT3BlcmF0aW9uIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvYWRkT3BlcmF0aW9uL29wZXJhdGlvbiIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvZ2V0T3BlcmF0aW9uIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvZ2V0T3BlcmF0aW9uL25hbWUiLz4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvZ2V0T3BlcmF0aW9uL2lucHV0TmFtZSIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lQb3J0VHlwZS9nZXRPcGVyYXRpb24vb3V0cHV0TmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUG9ydFR5cGUvZ2V0T3BlcmF0aW9ucyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uIj4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9hZGRGYXVsdCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9hZGRGYXVsdC9mYXVsdCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL2dldEZhdWx0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL2dldEZhdWx0L25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9nZXRGYXVsdHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9nZXRQYXJhbWV0ZXJPcmRlcmluZyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL3NldFBhcmFtZXRlck9yZGVyaW5nIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL3NldFBhcmFtZXRlck9yZGVyaW5nL3BhcmFtZXRlck9yZGVyIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lPcGVyYXRpb24vZ2V0SW5wdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9zZXRJbnB1dCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9zZXRJbnB1dC9pbnB1dCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL2dldE91dHB1dCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3BlcmF0aW9uL3NldE91dHB1dCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSU9wZXJhdGlvbi9zZXRPdXRwdXQvb3V0cHV0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lJbnB1dCI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lJbnB1dC9nZXRNZXNzYWdlIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lJbnB1dC9zZXRNZXNzYWdlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JSW5wdXQvc2V0TWVzc2FnZS9tZXNzYWdlIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lPdXRwdXQiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JT3V0cHV0L2dldE1lc3NhZ2UiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU91dHB1dC9zZXRNZXNzYWdlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JT3V0cHV0L3NldE1lc3NhZ2UvbWVzc2FnZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JRmF1bHQiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRmF1bHQvZ2V0TWVzc2FnZSIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRmF1bHQvc2V0TWVzc2FnZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUZhdWx0L3NldE1lc3NhZ2UvbWVzc2FnZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JTWVzc2FnZSI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lNZXNzYWdlL2FkZFBhcnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lNZXNzYWdlL2FkZFBhcnQvcGFydCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JTWVzc2FnZS9nZXRQYXJ0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JTWVzc2FnZS9nZXRQYXJ0L25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU1lc3NhZ2UvZ2V0UGFydHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSU1lc3NhZ2UvZ2V0T3JkZXJlZFBhcnRzIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JTWVzc2FnZS9nZXRPcmRlcmVkUGFydHMvcGFydE9yZGVyIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lQYXJ0Ij4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSVBhcnQvc2V0RXh0ZW5zaW9uQXR0cmlidXRlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JUGFydC9zZXRFeHRlbnNpb25BdHRyaWJ1dGUvbmFtZSIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lQYXJ0L3NldEV4dGVuc2lvbkF0dHJpYnV0ZS92YWx1ZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUGFydC9nZXRFeHRlbnNpb25BdHRyaWJ1dGVOYW1lcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JUGFydC9nZXRFeHRlbnNpb25BdHRyaWJ1dGUiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lQYXJ0L2dldEV4dGVuc2lvbkF0dHJpYnV0ZS9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lTZXJ2aWNlIj4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSVNlcnZpY2UvYWRkUG9ydCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSVNlcnZpY2UvYWRkUG9ydC9wb3J0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lTZXJ2aWNlL2dldFBvcnRzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lTZXJ2aWNlL2dldFBvcnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lTZXJ2aWNlL2dldFBvcnQvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JUG9ydCI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lQb3J0L2dldEJpbmRpbmciLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSVBvcnQvc2V0QmluZGluZyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSVBvcnQvc2V0QmluZGluZy9iaW5kaW5nIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lCaW5kaW5nIj4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmcvYWRkQmluZGluZ09wZXJhdGlvbiI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmcvYWRkQmluZGluZ09wZXJhdGlvbi9iaW5kaW5nT3BlcmF0aW9uIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldEJpbmRpbmdPcGVyYXRpb24iPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldEJpbmRpbmdPcGVyYXRpb24vbmFtZSIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldEJpbmRpbmdPcGVyYXRpb24vaW5wdXROYW1lIi8+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmcvZ2V0QmluZGluZ09wZXJhdGlvbi9vdXRwdXROYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldEJpbmRpbmdPcGVyYXRpb25zIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL2dldFBvcnRUeXBlIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nL3NldFBvcnRUeXBlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JQmluZGluZy9zZXRQb3J0VHlwZS9wb3J0VHlwZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbiI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL2FkZEJpbmRpbmdGYXVsdCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vYWRkQmluZGluZ0ZhdWx0L2JpbmRpbmdGYXVsdCIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9nZXRCaW5kaW5nRmF1bHQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL2dldEJpbmRpbmdGYXVsdC9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL2dldEJpbmRpbmdGYXVsdHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vZ2V0T3BlcmF0aW9uIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL3NldE9wZXJhdGlvbiI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vc2V0T3BlcmF0aW9uL29wZXJhdGlvbiIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9nZXRCaW5kaW5nSW5wdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vc2V0QmluZGluZ0lucHV0Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JQmluZGluZ09wZXJhdGlvbi9zZXRCaW5kaW5nSW5wdXQvYmluZGluZ0lucHV0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lCaW5kaW5nT3BlcmF0aW9uL2dldEJpbmRpbmdPdXRwdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vc2V0QmluZGluZ091dHB1dCI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSUJpbmRpbmdPcGVyYXRpb24vc2V0QmluZGluZ091dHB1dC9iaW5kaW5nT3V0cHV0Ii8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lCaW5kaW5nSW5wdXQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JQmluZGluZ091dHB1dCIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lCaW5kaW5nRmF1bHQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JRXh0ZW5zaWJpbGl0eUVsZW1lbnQiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbiI+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZEJpbmRpbmciPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZEJpbmRpbmcvYmluZGluZyIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9hZGRJbXBvcnQiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZEltcG9ydC9pbXBvcnREZWYiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vYWRkTWVzc2FnZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vYWRkTWVzc2FnZS9tZXNzYWdlIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZE5hbWVzcGFjZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vYWRkTmFtZXNwYWNlL3ByZWZpeCIvPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZE5hbWVzcGFjZS9uYW1lc3BhY2VVUkkiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vYWRkUG9ydFR5cGUiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZFBvcnRUeXBlL3BvcnRUeXBlIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZFNlcnZpY2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2FkZFNlcnZpY2Uvc2VydmljZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVCaW5kaW5nRmF1bHQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlQmluZGluZ0lucHV0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZUJpbmRpbmdPdXRwdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlQmluZGluZ09wZXJhdGlvbiIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVCaW5kaW5nIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZUZhdWx0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZUltcG9ydCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVJbnB1dCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVNZXNzYWdlIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZU9wZXJhdGlvbiIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVPdXRwdXQiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vY3JlYXRlUGFydCIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVQb3J0Ii8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZVBvcnRUeXBlIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2NyZWF0ZVNlcnZpY2UiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0QmluZGluZyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0QmluZGluZy9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldEJpbmRpbmdzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldEltcG9ydHMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0SW1wb3J0cy4xIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRJbXBvcnRzLjEvbmFtZXNwYWNlVVJJIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldE1lc3NhZ2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldE1lc3NhZ2UvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRNZXNzYWdlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXROYW1lc3BhY2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldE5hbWVzcGFjZS9wcmVmaXgiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0TmFtZXNwYWNlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRQb3J0VHlwZSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0UG9ydFR5cGUvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRQb3J0VHlwZXMiLz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0UHJlZml4Ij4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRQcmVmaXgvbmFtZXNwYWNlVVJJIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldFNlcnZpY2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL2dldFNlcnZpY2UvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRTZXJ2aWNlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRFeHRlbnNpb25SZWdpc3RyeSIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9zZXRFeHRlbnNpb25SZWdpc3RyeSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vc2V0RXh0ZW5zaW9uUmVnaXN0cnkvZXh0ZW5zaW9uUmVnaXN0cnkiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vZ2V0RG9jdW1lbnRCYXNlVVJJIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3NldERvY3VtZW50QmFzZVVSSSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vc2V0RG9jdW1lbnRCYXNlVVJJL2RvY3VtZW50QmFzZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9jcmVhdGVUeXBlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9yZW1vdmVTZXJ2aWNlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9yZW1vdmVTZXJ2aWNlL25hbWUiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vcmVtb3ZlQmluZGluZyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vcmVtb3ZlQmluZGluZy9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3JlbW92ZVBvcnRUeXBlIj4KLSAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9yZW1vdmVQb3J0VHlwZS9uYW1lIi8+Ci0gICAgICA8L2dlbk9wZXJhdGlvbnM+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3JlbW92ZU1lc3NhZ2UiPgotICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iV1NETC5lY29yZSMvL0lEZWZpbml0aW9uL3JlbW92ZU1lc3NhZ2UvbmFtZSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9nZXRUeXBlcyIvPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9JRGVmaW5pdGlvbi9zZXRUeXBlcyI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vSURlZmluaXRpb24vc2V0VHlwZXMvdHlwZXMiLz4KLSAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSUltcG9ydCIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lMaXN0Ii8+Ci0gICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vSU1hcCIvPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL0lVUkwiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JRXh0ZW5zaW9uUmVnaXN0cnkiLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vVHlwZXMiPgotICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249IldTREwuZWNvcmUjLy9UeXBlcy9nZXRTY2hlbWFzIi8+Ci0gICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iV1NETC5lY29yZSMvL1R5cGVzL2dldFNjaGVtYXMuMSI+Ci0gICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJXU0RMLmVjb3JlIy8vVHlwZXMvZ2V0U2NoZW1hcy4xL25hbWVzcGFjZVVSSSIvPgotICAgICAgPC9nZW5PcGVyYXRpb25zPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JSXRlcmF0b3IiLz4KLSAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9IldTREwuZWNvcmUjLy9JVHlwZXMiLz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgV1NETC5lY29yZSMvL1Vua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC9jaGlsZHJlbiIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJXU0RMLmVjb3JlIy8vWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQvc2NoZW1hIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iV1NETC5lY29yZSMvL01lc3NhZ2VSZWZlcmVuY2UiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIFdTREwuZWNvcmUjLy9NZXNzYWdlUmVmZXJlbmNlL25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBXU0RMLmVjb3JlIy8vTWVzc2FnZVJlZmVyZW5jZS9lTWVzc2FnZSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgPC9nZW5QYWNrYWdlcz4KLTwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwubWRsIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9XU0RMLm1kbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU2ZjA3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL1dTREwubWRsCisrKyAvZGV2L251bGwKQEAgLTEsMzg1MCArMCwwIEBACi0KLShvYmplY3QgUGV0YWwKLSAgICB2ZXJzaW9uICAgIAk0MgotICAgIF93cml0dGVuICAgCSJSb3NlIDQuNS44MTYzLjMiCi0gICAgY2hhclNldCAgICAJMCkKLQotKG9iamVjdCBEZXNpZ24gIkxvZ2ljYWwgVmlldyIKLSAgICBpc191bml0ICAgIAlUUlVFCi0gICAgaXNfbG9hZGVkICAJVFJVRQotICAgIGRlZmF1bHRzICAgCShvYmplY3QgZGVmYXVsdHMKLQlyaWdodE1hcmdpbiAJMC4yNTAwMDAKLQlsZWZ0TWFyZ2luIAkwLjI1MDAwMAotCXRvcE1hcmdpbiAgCTAuMjUwMDAwCi0JYm90dG9tTWFyZ2luIAkwLjUwMDAwMAotCXBhZ2VPdmVybGFwIAkwLjI1MDAwMAotCWNsaXBJY29uTGFiZWxzIAlUUlVFCi0JYXV0b1Jlc2l6ZSAJVFJVRQotCXNuYXBUb0dyaWQgCVRSVUUKLQlncmlkWCAgICAgIAkxNgotCWdyaWRZICAgICAgCTE2Ci0JZGVmYXVsdEZvbnQgCShvYmplY3QgRm9udAotCSAgICBzaXplICAgICAgIAkxMAotCSAgICBmYWNlICAgICAgIAkiQXJpYWwiCi0JICAgIGJvbGQgICAgICAgCUZBTFNFCi0JICAgIGl0YWxpY3MgICAgCUZBTFNFCi0JICAgIHVuZGVybGluZSAgCUZBTFNFCi0JICAgIHN0cmlrZSAgICAgCUZBTFNFCi0JICAgIGNvbG9yICAgICAgCTAKLQkgICAgZGVmYXVsdF9jb2xvciAJVFJVRSkKLQlzaG93TWVzc2FnZU51bSAJMQotCXNob3dDbGFzc09mT2JqZWN0IAlUUlVFCi0Jbm90YXRpb24gICAJIlVuaWZpZWQiKQotICAgIHJvb3RfdXNlY2FzZV9wYWNrYWdlIAkob2JqZWN0IENsYXNzX0NhdGVnb3J5ICJVc2UgQ2FzZSBWaWV3IgotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjQiCi0JZXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQlnbG9iYWwgICAgIAlUUlVFCi0JbG9naWNhbF9tb2RlbHMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QpCi0JbG9naWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgVXNlQ2FzZURpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNzgiCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHJvb3RfY2F0ZWdvcnkgCShvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIkxvZ2ljYWwgVmlldyIKLQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDYzIgotCWV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JZ2xvYmFsICAgICAJVFJVRQotCXN1YnN5c3RlbSAgCSJDb21wb25lbnQgVmlldyIKLQlxdWlkdSAgICAgIAkiMzlFMjdGMDgwMDY1IgotCWxvZ2ljYWxfbW9kZWxzIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIndzZGwiCi0JCWlzX3VuaXQgICAgCVRSVUUKLQkJaXNfbG9hZGVkICAJRkFMU0UKLQkJZmlsZV9uYW1lICAJIiRWQUJBU0VfUExVR0lOU19QQVRIXFxvcmcuZWNsaXBzZS53c3Qud3NkbFxcbW9kZWxcXG9yZy5lY2xpcHNlLndzdC5XU0RMLmNhdCIKLQkJcXVpZCAgICAgICAJIjNBREZCOEU1MDIxRSIpCi0JICAgIChvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgInhzZCIKLQkJaXNfdW5pdCAgICAJVFJVRQotCQlpc19sb2FkZWQgIAlGQUxTRQotCQlmaWxlX25hbWUgIAkiJFZBQkFTRV9QTFVHSU5TX1BBVEhcXG9yZy5lY2xpcHNlLnhzZFxcbW9kZWxcXG9yZy5lY2xpcHNlLlhTRC5jYXQiCi0JCXF1aWQgICAgICAgCSIzOUFCREM2RjAxQUEiKSkKLQlsb2dpY2FsX3ByZXNlbnRhdGlvbnMgCShsaXN0IHVuaXRfcmVmZXJlbmNlX2xpc3QKLQkgICAgKG9iamVjdCBDbGFzc0RpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNzYiCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0Ci0JCSAgICAob2JqZWN0IENhdGVnb3J5VmlldyAiTG9naWNhbCBWaWV3Ojp3c2RsIiBAMQotCQkJbG9jYXRpb24gICAJKDI3MiwgMjU2KQotCQkJbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCSAgICBQYXJlbnRfVmlldyAJQDEKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTI4LCAxNzIpCi0JCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCSAgICBubGluZXMgICAgIAkyCi0JCQkgICAgbWF4X3dpZHRoICAJMjg4Ci0JCQkgICAganVzdGlmeSAgICAJMAotCQkJICAgIGxhYmVsICAgICAgCSJ3c2RsIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzQURGQjhFNTAyMUUiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkKLQkJICAgIChvYmplY3QgQ2F0ZWdvcnlWaWV3ICJMb2dpY2FsIFZpZXc6OnhzZCIgQDIKLQkJCWxvY2F0aW9uICAgCSgyNzIsIDU3NikKLQkJCWxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAyCi0JCQkgICAgbG9jYXRpb24gICAJKDEyOCwgNDkyKQotCQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQkgICAgbmxpbmVzICAgICAJMgotCQkJICAgIG1heF93aWR0aCAgCTI4OAotCQkJICAgIGp1c3RpZnkgICAgCTAKLQkJCSAgICBsYWJlbCAgICAgIAkieHNkIikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCXF1aWR1ICAgICAgCSIzOUFCREM2RjAxQUEiCi0JCQl3aWR0aCAgICAgIAkzMDAKLQkJCWhlaWdodCAgICAgCTE4MCkpKSkpCi0gICAgcm9vdF9zdWJzeXN0ZW0gCShvYmplY3QgU3ViU3lzdGVtICJDb21wb25lbnQgVmlldyIKLQlxdWlkICAgICAgIAkiMzlFMjdGMDgwMDY1IgotCXBoeXNpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdCkKLQlwaHlzaWNhbF9wcmVzZW50YXRpb25zIAkobGlzdCB1bml0X3JlZmVyZW5jZV9saXN0Ci0JICAgIChvYmplY3QgTW9kdWxlX0RpYWdyYW0gIk1haW4iCi0JCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNzciCi0JCXRpdGxlICAgICAgCSJNYWluIgotCQl6b29tICAgICAgIAkxMDAKLQkJbWF4X2hlaWdodCAJMjgzNTAKLQkJbWF4X3dpZHRoICAJMjE2MDAKLQkJb3JpZ2luX3ggICAJMAotCQlvcmlnaW5feSAgIAkwCi0JCWl0ZW1zICAgICAgCShsaXN0IGRpYWdyYW1faXRlbV9saXN0KSkpKQotICAgIHByb2Nlc3Nfc3RydWN0dXJlIAkob2JqZWN0IFByb2Nlc3NlcwotCXF1aWQgICAgICAgCSIzOUUyN0YwODAwNjYiCi0JUHJvY3NORGV2cyAJKGxpc3QKLQkgICAgKG9iamVjdCBQcm9jZXNzX0RpYWdyYW0gIkRlcGxveW1lbnQgVmlldyIKLQkJcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2OCIKLQkJdGl0bGUgICAgICAJIkRlcGxveW1lbnQgVmlldyIKLQkJem9vbSAgICAgICAJMTAwCi0JCW1heF9oZWlnaHQgCTI4MzUwCi0JCW1heF93aWR0aCAgCTIxNjAwCi0JCW9yaWdpbl94ICAgCTAKLQkJb3JpZ2luX3kgICAJMAotCQlpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdCkpKSkKLSAgICBwcm9wZXJ0aWVzIAkob2JqZWN0IFByb3BlcnRpZXMKLQlhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJEREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlIgotCQkJdmFsdWUgICAgICAJKCJEYXRhQmFzZVNldCIgODAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkRhdGFCYXNlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiQU5TSSIKLQkJCQl2YWx1ZSAgICAgIAk4MDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJPcmFjbGUiCi0JCQkJdmFsdWUgICAgICAJODAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCQluYW1lICAgICAgIAkiU1FMU2VydmVyIgotCQkJCXZhbHVlICAgICAgCTgwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQkJbmFtZSAgICAgICAJIlN5YmFzZSIKLQkJCQl2YWx1ZSAgICAgIAk4MDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRERMIgotCQkJCW5hbWUgICAgICAgCSJXYXRjb20iCi0JCQkJdmFsdWUgICAgICAJODA0KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uTmFtZSIKLQkJCXZhbHVlICAgICAgCSJJZCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJOVU1CRVIoNSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiVl8iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiVGFibGVOYW1lIgotCQkJdmFsdWUgICAgICAJIlRfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiX1YiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiRHJvcENsYXVzZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQmFzZVZpZXdzIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJERExTY3JpcHRGaWxlbmFtZSIKLQkJCXZhbHVlICAgICAgCSJEREwxLlNRTCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJWQVJDSEFSIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkxlbmd0aCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiTnVsbHNPSyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkRETCIKLQkJCW5hbWUgICAgICAgCSJVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRERMIgotCQkJbmFtZSAgICAgICAJIkNvbXBvc2l0ZVVuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJEREwiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkRETCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiZnJhbWV3b3JrIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJTdG9wT25FcnJvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVByZXNlcnZlUmVnaW9ucyIKLQkJCXZhbHVlICAgICAgCVRSVUUpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMRWxlbWVudCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJRExTcGVjaWZpY2F0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiSURMU3BlY1NldCIgMjIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiSURMU3BlY1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIkludGVyZmFjZSIKLQkJCQl2YWx1ZSAgICAgIAkyMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlR5cGVkZWYiCi0JCQkJdmFsdWUgICAgICAJNTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFbnVtZXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJNzEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJFeGNlcHRpb24iCi0JCQkJdmFsdWUgICAgICAJNjEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTdHJ1Y3QiCi0JCQkJdmFsdWUgICAgICAJNTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJVbmlvbiIKLQkJCQl2YWx1ZSAgICAgIAk4MSkpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5zZXJ2aWNlcy9zcmMvcm9zZS93c2RsTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvcHlyaWdodE5vdGljZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJRExNb2R1bGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkluY2x1c2lvblByb3RlY3Rpb25TeW1ib2wiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLnNlcnZpY2VzL3NyYy9yb3NlL3dzZGxNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBZGRpdGlvbmFsSW5jbHVkZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uSXNPbmVXYXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIlJhaXNlcyIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNhc2VTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkNvbnN0VmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJIYXNSZWxUeXBlU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIklETCIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Sb2xlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIklzUmVhZE9ubHkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIklETCIKLQkJCW5hbWUgICAgICAgCSJBc3NvY1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSURMIgotCQkJCW5hbWUgICAgICAgCSJBcnJheSIKLQkJCQl2YWx1ZSAgICAgIAkyNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJJREwiCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIklETCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1VzZXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJJREwiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSURMIgotCQkJbmFtZSAgICAgICAJIkRpcmVjdG9yeSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSURMIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2NiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNyZWF0ZU1pc3NpbmdEaXJlY3RvcmllcyIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiQVVUTyBHRU5FUkFURSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVXNlUHJlZml4ZXMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJJbnN0YW5jZVZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJIm1fIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDbGFzc1ZhcmlhYmxlUHJlZml4IgotCQkJdmFsdWUgICAgICAJInNfIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0QXR0cmlidXRlRGF0YVR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiaW50IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJEZWZhdWx0T3BlcmF0aW9uUmV0dXJuVHlwZSIKLQkJCXZhbHVlICAgICAgCSJ2b2lkIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29uc3RydWN0b3JJcyIKLQkJCXZhbHVlICAgICAgCSgiQ3Rvcl9TZXQiIDYyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDdG9yX1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNjIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTYzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJNjQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZpbmFsaXplciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RhdGljSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluc3RhbmNlSW5pdGlhbGl6ZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGUiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNtSWRlbnRpZmljYXRpb24iCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbXBvcnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fTW9kdWxlLUJvZHkiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiQWRkaXRpb25hbEltcG9ydHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiTmF0aXZlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiU3luY2hyb25pemVkIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkphdmEiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkZpbmFsIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiSmF2YSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJKYXZhIgotCQkJbmFtZSAgICAgICAJIkNvbnRhaW5lckNsYXNzIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiSW5pdGlhbFZhbHVlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkphdmEiCi0JCQluYW1lICAgICAgIAkiRmluYWwiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJUcmFuc2llbnQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiSmF2YSIKLQkJCW5hbWUgICAgICAgCSJWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJKYXZhIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjM2MDAwMDAwMiIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkRETFNjcmlwdEZpbGVuYW1lIgotCQkJdmFsdWUgICAgICAJIkRETDEuU1FMIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJEcm9wQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJpbWFyeUtleUNvbHVtbk5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiX0lEIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJQcmltYXJ5S2V5Q29sdW1uVHlwZSIKLQkJCXZhbHVlICAgICAgCSJOVU1CRVIoNSwwKSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiU2NoZW1hTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjaGVtYU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUYWJsZU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUYWJsZU5hbWVTdWZmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUeXBlTmFtZVByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlR5cGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVmlld05hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWaWV3TmFtZVN1ZmZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlZhcnJheU5hbWVQcmVmaXgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJWYXJyYXlOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTmVzdGVkVGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTmVzdGVkVGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT2JqZWN0VGFibGVOYW1lUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT2JqZWN0VGFibGVOYW1lU3VmZml4IgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzU2NoZW1hIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk9JRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIldoZXJlQ2xhdXNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ2hlY2tDb25zdHJhaW50IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvblR5cGVMZW5ndGgiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uVHlwZVByZWNpc2lvbiIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIkNvbGxlY3Rpb25UeXBlU2NhbGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb2xsZWN0aW9uT2ZSRUZTIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RLaW5kIgotCQkJdmFsdWUgICAgICAJKCJNZXRob2RLaW5kU2V0IiAxOTAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPdmVybG9hZElEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWROb0RhdGFTdGF0ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzUmVhZE5vUHJvY2Vzc1N0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNXcml0ZU5vRGF0YVN0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNXcml0ZU5vUHJvY2Vzc1N0YXRlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiSXNTZWxmaXNoIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIlRyaWdnZXJUeXBlU2V0IiAxODAxKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyRXZlbnQiCi0JCQl2YWx1ZSAgICAgIAkoIlRyaWdnZXJFdmVudFNldCIgMTYwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlclRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyUmVmZXJlbmNpbmdOYW1lcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJGb3JFYWNoIgotCQkJdmFsdWUgICAgICAJKCJUcmlnZ2VyRm9yRWFjaFNldCIgMTcwMSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlcldoZW5DbGF1c2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJNZXRob2RLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIk1hcE1ldGhvZCIKLQkJCQl2YWx1ZSAgICAgIAkxOTAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIk9yZGVyTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTE5MDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTkwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJQcm9jZWR1cmUiCi0JCQkJdmFsdWUgICAgICAJMTkwNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJPcGVyYXRvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0cnVjdG9yIgotCQkJCXZhbHVlICAgICAgCTE5MDYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiRGVzdHJ1Y3RvciIKLQkJCQl2YWx1ZSAgICAgIAkxOTA3KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlRyaWdnZXIiCi0JCQkJdmFsdWUgICAgICAJMTkwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJDYWxjdWxhdGVkIgotCQkJCXZhbHVlICAgICAgCTE5MDkpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJUcmlnZ2VyVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJBRlRFUiIKLQkJCQl2YWx1ZSAgICAgIAkxODAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkJFRk9SRSIKLQkJCQl2YWx1ZSAgICAgIAkxODAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU1RFQUQgT0YiCi0JCQkJdmFsdWUgICAgICAJMTgwMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlRyaWdnZXJGb3JFYWNoU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlJPVyIKLQkJCQl2YWx1ZSAgICAgIAkxNzAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlNUQVRFTUVOVCIKLQkJCQl2YWx1ZSAgICAgIAkxNzAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiVHJpZ2dlckV2ZW50U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCIKLQkJCQl2YWx1ZSAgICAgIAkxNjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIlVQREFURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIkRFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjAzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCBPUiBVUERBVEUiCi0JCQkJdmFsdWUgICAgICAJMTYwNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJCW5hbWUgICAgICAgCSJJTlNFUlQgT1IgREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCQluYW1lICAgICAgIAkiVVBEQVRFIE9SIERFTEVURSIKLQkJCQl2YWx1ZSAgICAgIAkxNjA2KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQkJbmFtZSAgICAgICAJIklOU0VSVCBPUiBVUERBVEUgT1IgREVMRVRFIgotCQkJCXZhbHVlICAgICAgCTE2MDcpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJPcmRlck51bWJlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiT3JkZXJOdW1iZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1VuaXF1ZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIk51bGxzQWxsb3dlZCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiTGVuZ3RoIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk9yYWNsZTgiCi0JCQluYW1lICAgICAgIAkiUHJlY2lzaW9uIgotCQkJdmFsdWUgICAgICAJIjIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIlNjYWxlIgotCQkJdmFsdWUgICAgICAJIjYiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJPcmFjbGU4IgotCQkJbmFtZSAgICAgICAJIklzSW5kZXgiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJJc1ByaW1hcnlLZXkiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDb21wb3NpdGVVbmlxdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJCW5hbWUgICAgICAgCSJDaGVja0NvbnN0cmFpbnQiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiT3JhY2xlOCIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiUmVwb3NpdG9yeSIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJwcm9wZXJ0eUlkIgotCQl2YWx1ZSAgICAgIAkiODA5MTM1OTY2IikKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUHJvamVjdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVc2VNU1ZDIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhlYWRlckZpbGVFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiaCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhlYWRlckZpbGVCYWNrdXBFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiaH4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJIZWFkZXJGaWxlVGVtcG9yYXJ5RXh0ZW5zaW9uIgotCQkJdmFsdWUgICAgICAJImgjIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZUZpbGVFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiY3BwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZUZpbGVCYWNrdXBFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiY3B+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZUZpbGVUZW1wb3JhcnlFeHRlbnNpb24iCi0JCQl2YWx1ZSAgICAgIAkiY3AjIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ3JlYXRlTWlzc2luZ0RpcmVjdG9yaWVzIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RvcE9uRXJyb3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXJyb3JMaW1pdCIKLQkJCXZhbHVlICAgICAgCTMwKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnkiCi0JCQl2YWx1ZSAgICAgIAkiJFJPU0VDUFBfU09VUkNFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUGF0aFNlcGFyYXRvciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSIxMjh2eF9iIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9vbGVhblR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiaW50IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dUZW1wbGF0ZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4cGxpY2l0SW5zdGFudGlhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd1Byb3RlY3RlZEluaGVyaXRhbmNlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29tbWVudFdpZHRoIgotCQkJdmFsdWUgICAgICAJNjApCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9uZUJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT25lQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldENsYXNzICoiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25hbEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiT3B0aW9uYWxCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25hbEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzcyAqIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRml4ZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzc1skbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkRml4ZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXRDbGFzc1skbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRml4ZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKlskbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkRml4ZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkdGFyZ2V0Q2xhc3MgKlskbGltaXRdIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZExpc3RCeVZhbHVlPCR0YXJnZXRDbGFzcywkbGltaXQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkQm91bmRlZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZFNldEJ5VmFsdWU8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQm91bmRlZExpc3RCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3MsJGxpbWl0PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZEJvdW5kZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJCb3VuZGVkU2V0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzLCRsaW1pdD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbmJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZExpc3RCeVZhbHVlPCR0YXJnZXRDbGFzcz4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRVbmJvdW5kZWRCeVZhbHVlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZFNldEJ5VmFsdWU8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVuYm91bmRlZEJ5UmVmZXJlbmNlQ29udGFpbmVyIgotCQkJdmFsdWUgICAgICAJIlVuYm91bmRlZExpc3RCeVJlZmVyZW5jZTwkdGFyZ2V0Q2xhc3M+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVW5vcmRlcmVkVW5ib3VuZGVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiVW5ib3VuZGVkU2V0QnlSZWZlcmVuY2U8JHRhcmdldENsYXNzPiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQXNzb2NpYXRpb25CeVZhbHVlPCRxdWFsdHlwZSwgJHF1YWxjb250PiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlVub3JkZXJlZFF1YWxpZmllZEJ5VmFsdWVDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiRGljdGlvbmFyeUJ5VmFsdWU8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkQnlSZWZlcmVuY2VDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiQXNzb2NpYXRpb25CeVJlZmVyZW5jZTwkcXVhbHR5cGUsICRxdWFsY29udD4iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJVbm9yZGVyZWRRdWFsaWZpZWRCeVJlZmVyZW5jZUNvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSJEaWN0aW9uYXJ5QnlSZWZlcmVuY2U8JHF1YWx0eXBlLCAkcXVhbGNvbnQ+IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcmVzZXJ2ZVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NsYXNzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkltcGxlbWVudGF0aW9uVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDbGFzc0tleSIKLQkJCXZhbHVlICAgICAgCSJjbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUHV0Qm9kaWVzSW5TcGVjIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZVNldCIgMTk5KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdENvbnN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVEZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhwbGljaXREZWZhdWx0Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb3B5Q29uc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5Q29uc3RydWN0b3JWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUNvcHlDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFeHBsaWNpdENvcHlDb25zdHJ1Y3RvciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlc3RydWN0b3IiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXN0cnVjdG9yVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXN0cnVjdG9yS2luZCIKLQkJCXZhbHVlICAgICAgCSgiVGhyZWVLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVEZXN0cnVjdG9yIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzaWdubWVudE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCSgiR2VuZXJhdGVTZXQiIDE5OSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc2lnbm1lbnRWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc2lnbm1lbnRLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc2lnbm1lbnRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFcXVhbGl0eU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlU2V0IiAxOTkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJFcXVhbGl0eVZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXF1YWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGcmllbmRLaW5kU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVFcXVhbGl0eU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVSZWxhdGlvbmFsT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJSZWxhdGlvbmFsVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJSZWxhdGlvbmFsS2luZCIKLQkJCXZhbHVlICAgICAgCSgiRnJpZW5kS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUmVsYXRpb25hbE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTdG9yYWdlTWdtdE9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3RvcmFnZU1nbXRWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVN0b3JhZ2VNZ210T3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVN1YnNjcmlwdE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdWJzY3JpcHRWaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdEtpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0UmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVTdWJzY3JpcHRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVEZXJlZmVyZW5jZU9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEZXJlZmVyZW5jZVZpc2liaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIlZpc2liaWxpdHlTZXQiIDQ1KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVyZWZlcmVuY2VLaW5kIgotCQkJdmFsdWUgICAgICAJKCJUaHJlZUtpbmRTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRlcmVmZXJlbmNlUmVzdWx0VHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVEZXJlZmVyZW5jZU9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUluZGlyZWN0aW9uT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGlyZWN0aW9uVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiVmlzaWJpbGl0eVNldCIgNDUpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmRpcmVjdGlvbktpbmQiCi0JCQl2YWx1ZSAgICAgIAkoIlRocmVlS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5kaXJlY3Rpb25SZXN1bHRUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUluZGlyZWN0aW9uT3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlU3RyZWFtT3BlcmF0aW9ucyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTdHJlYW1WaXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5U2V0IiA0NSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVN0cmVhbU9wZXJhdGlvbnMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVGhyZWVLaW5kU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJDb21tb24iCi0JCQkJdmFsdWUgICAgICAJMjAwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsIgotCQkJCXZhbHVlICAgICAgCTIwMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWJzdHJhY3QiCi0JCQkJdmFsdWUgICAgICAJMjAyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIktpbmRTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRnJpZW5kS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRGVjbGFyZUFuZERlZmluZSIKLQkJCQl2YWx1ZSAgICAgIAkxOTkpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkRlY2xhcmVPbmx5IgotCQkJCXZhbHVlICAgICAgCTIwNSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRG9Ob3REZWNsYXJlIgotCQkJCXZhbHVlICAgICAgCTIwNikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJWaXNpYmlsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQdWJsaWMiCi0JCQkJdmFsdWUgICAgICAJNDUpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByb3RlY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAk0NCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJpdmF0ZSIKLQkJCQl2YWx1ZSAgICAgIAk0MykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW1wbGVtZW50YXRpb24iCi0JCQkJdmFsdWUgICAgICAJMTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29uc3RWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURlZmF1bHRTcGVjaWZpZXIiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGVmYXVsdFNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1TcGVjIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvbnMiCi0JCQl2YWx1ZSAgICAgIAkoIkdlbmVyYXRlRW1wdHlSZWdpb25TZXQiIDMpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJVbnByZXNlcnZlZCIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBbGwiCi0JCQkJdmFsdWUgICAgICAJMykpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDbUlkZW50aWZpY2F0aW9uIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiAgJVglICBAKCMpIHBsdWdpbnMvY29tLmlibS5ldG9vbHMuY3RjLnNlcnZpY2VzL3NyYy9yb3NlL3dzZGxNZGwubWRsLCBjdGMsIGlibWN0YyIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb3B5cmlnaHROb3RpY2UiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZpbGVOYW1lIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBbGxvd0V4dGVuc2lvbmxlc3NGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdXNpb25Qcm90ZWN0aW9uU3ltYm9sIgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlRm9ybWF0IgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgCi18Ly8gJHBhY2thZ2UKLXwjaW5jbHVkZSAiJGZpbGUiCi18Ci0JCQkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQnlTaW1wbGVOYW1lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluY2x1ZGVQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtQm9keSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ21JZGVudGlmaWNhdGlvbiIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIgICVYJSAgQCgjKSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLmN0Yy5zZXJ2aWNlcy9zcmMvcm9zZS93c2RsTWRsLm1kbCwgY3RjLCBpYm1jdGMiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29weXJpZ2h0Tm90aWNlIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGaWxlTmFtZSIKLQkJCXZhbHVlICAgICAgCSJBVVRPIEdFTkVSQVRFIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQWxsb3dFeHRlbnNpb25sZXNzRmlsZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUZvcm1hdCIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0IAotfC8vICRwYWNrYWdlCi18I2luY2x1ZGUgIiRmaWxlIgotfAotCQkJKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5jbHVkZUJ5U2ltcGxlTmFtZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlUHJlY29tcGlsZWRIZWFkZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlT3JkZXIiCi0JCQl2YWx1ZSAgICAgIAkiQU1JUiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFkZGl0aW9uYWxJbmNsdWRlcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZSIKLQkJCXZhbHVlICAgICAgCSgiSW5saW5pbmdTdHlsZVNldCIgMjA3KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5pbmdTdHlsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiSW5DbGFzc0RlY2xhcmF0aW9uIgotCQkJCXZhbHVlICAgICAgCTIwOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRm9sbG93aW5nQ2xhc3NEZWNsYXJhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDcpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiVHlwZXNEZWZpbmVkIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmNsdWRlQ2xvc3VyZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19PcGVyYXRpb24iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29kZU5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZCIKLQkJCXZhbHVlICAgICAgCSgiT3BlcmF0aW9uS2luZFNldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uS2luZFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJPcGVyYXRpb25Jc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkVudHJ5Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRXhpdENvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQm9keUFubm90YXRpb25zIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9wZXJhdGlvbklzT25lV2F5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvbnRleHQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUmFpc2VzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSGFzIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk9yZGVyZWQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiZ2V0XyRyZWxhdGlvbnNoaXAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHMiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFNldEtpbmRzU2V0IiAyMDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRLaW5kc1NldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29tbW9uIgotCQkJCXZhbHVlICAgICAgCTIwMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVmlydHVhbCIKLQkJCQl2YWx1ZSAgICAgIAkyMDEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFic3RyYWN0IgotCQkJCXZhbHVlICAgICAgCTIwMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU3RhdGljIgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRnJpZW5kIgotCQkJCXZhbHVlICAgICAgCTIwNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJDbGFzcyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZWxlY3Rvck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2VsZWN0b3JUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0UmVzdWx0SXNDb25zdFNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiRmFsc2UiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVHJ1ZSIKLQkJCQl2YWx1ZSAgICAgIAkxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTYW1lX0FzX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkZvcndhcmRSZWZlcmVuY2VPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRIYXNSZWxUeXBlIgotCQkJdmFsdWUgICAgICAJKCJIYXNSZWxUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkhhc1JlbFR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkFycmF5IgotCQkJCXZhbHVlICAgICAgCTI0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJTZXF1ZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAk0NykpKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0Fzc29jaWF0aW9uIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIk5hbWVJZlVubGFiZWxlZCIKLQkJCXZhbHVlICAgICAgCSJ0aGVfJHRhcmdldENsYXNzIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Jbmhlcml0IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluc3RhbmNlQXJndW1lbnRzIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb2RlTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlXyR0YXJnZXRDbGFzcyIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluaXRpYWxWYWx1ZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyQ2xhc3MiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ29udGFpbmVyR2V0IgotCQkJdmFsdWUgICAgICAJIiRkYXRhLmdldCgka2V5cykiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJDb250YWluZXJTZXQiCi0JCQl2YWx1ZSAgICAgIAkiJGRhdGEuc2V0KCRrZXlzLCR2YWx1ZSkiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRDb250YWluZXIiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0NvbnRhaW5lciIKLQkJCXZhbHVlICAgICAgCSIkc3VwcGxpZXIgKiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NJbml0aWFsVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVHZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlNldE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkic2V0XyR0YXJnZXQiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAkoIlF1YWxpZmllZEdldFNldEJ5UmVmZXJlbmNlU2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0U2V0QnlSZWZlcmVuY2VTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZhbHNlIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlRydWUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiU2FtZV9Bc19HZXRTZXRCeVJlZmVyZW5jZSIKLQkJCQl2YWx1ZSAgICAgIAkyKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUXVhbGlmaWVkR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkR2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJnZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIlF1YWxpZmllZEdldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRHZXRSZXN1bHRJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJKCJHZXRSZXN1bHRJc0NvbnN0U2V0IiAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lUXVhbGlmaWVkR2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVRdWFsaWZpZWRTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJRdWFsaWZpZWRTZXROYW1lIgotCQkJdmFsdWUgICAgICAJInNldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiUXVhbGlmaWVkU2V0UmV0dXJuc1ZhbHVlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZVF1YWxpZmllZFNldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0RhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRSZWxhdGlvbnNoaXBWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzRGF0YU1lbWJlck11dGFiaWxpdHkiCi0JCQl2YWx1ZSAgICAgIAkoIkRhdGFNZW1iZXJNdXRhYmlsaXR5U2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlVucmVzdHJpY3RlZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJNdXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbnN0IgotCQkJCXZhbHVlICAgICAgCTIpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0RhdGFNZW1iZXJJc1ZvbGF0aWxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXRTZXRLaW5kcyIKLQkJCXZhbHVlICAgICAgCSgiR2V0U2V0S2luZHNTZXQiIDIwMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlQXNzb2NDbGFzc0dldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kdGFyZ2V0IikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQXNzb2NDbGFzc0dldElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzR2V0UmVzdWx0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCSgiR2V0UmVzdWx0SXNDb25zdFNldCIgMikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklubGluZUFzc29jQ2xhc3NHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUFzc29jQ2xhc3NTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJBc3NvY0NsYXNzU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJHRhcmdldCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lQXNzb2NDbGFzc1NldCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jQ2xhc3NGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRm9yd2FyZFJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkJvdW5kZWRSb2xlVHlwZSIKLQkJCXZhbHVlICAgICAgCSgiQXNzb2NUeXBlU2V0IiA0NykpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkFzc29jVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXJyYXkiCi0JCQkJdmFsdWUgICAgICAJMjQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNlcXVlbmNlIgotCQkJCXZhbHVlICAgICAgCTQ3KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkRhdGFNZW1iZXJOYW1lIgotCQkJdmFsdWUgICAgICAJIiRhdHRyaWJ1dGUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyVmlzaWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiIDE0KSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlclZpc2liaWxpdHlTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlB1YmxpYyIKLQkJCQl2YWx1ZSAgICAgIAk0NSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiUHJvdGVjdGVkIgotCQkJCXZhbHVlICAgICAgCTQ0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcml2YXRlIgotCQkJCXZhbHVlICAgICAgCTQzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJJbXBsZW1lbnRhdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAkxNCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQXRBdHRyaWJ1dGVWaXNpYmlsaXR5IgotCQkJCXZhbHVlICAgICAgCTIxMSkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiRGF0YU1lbWJlck11dGFiaWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTXV0YWJpbGl0eVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5yZXN0cmljdGVkIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIk11dGFibGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQ29uc3QiCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVySXNWb2xhdGlsZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyRmllbGRTaXplIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXROYW1lIgotCQkJdmFsdWUgICAgICAJImdldF8kYXR0cmlidXRlIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiU2V0TmFtZSIKLQkJCXZhbHVlICAgICAgCSJzZXRfJGF0dHJpYnV0ZSIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFNldEtpbmRzIgotCQkJdmFsdWUgICAgICAJKCJHZXRTZXRLaW5kc1NldCIgMjAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0U2V0S2luZHNTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkNvbW1vbiIKLQkJCQl2YWx1ZSAgICAgIAkyMDApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlZpcnR1YWwiCi0JCQkJdmFsdWUgICAgICAJMjAxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJBYnN0cmFjdCIKLQkJCQl2YWx1ZSAgICAgIAkyMDIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlN0YXRpYyIKLQkJCQl2YWx1ZSAgICAgIAkyMDMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIkZyaWVuZCIKLQkJCQl2YWx1ZSAgICAgIAkyMDQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2V0SXNDb25zdCIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdldFJlc3VsdElzQ29uc3QiCi0JCQl2YWx1ZSAgICAgIAkoIkdldFJlc3VsdElzQ29uc3RTZXQiIDIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRSZXN1bHRJc0NvbnN0U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJGYWxzZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJUcnVlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiY2ciCi0JCQkJbmFtZSAgICAgICAJIlNhbWVfQXNfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMikpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZXRTZXRCeVJlZmVyZW5jZSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJbmxpbmVHZXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJTZXRSZXR1cm5zVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiSW5saW5lU2V0IgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiQ2FzZVNwZWNpZmllciIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJJc1JlYWRPbmx5IgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJImNnIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fVXNlcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJGb3J3YXJkUmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJCb2R5UmVmZXJlbmNlT25seSIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUZvcndhcmRSZWZlcmVuY2UiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiY2ciCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19TdWJzeXN0ZW0iCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiRGlyZWN0b3J5IgotCQkJdmFsdWUgICAgICAJIkFVVE8gR0VORVJBVEUiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJEaXJlY3RvcnlJc09uU2VhcmNoTGlzdCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCW5hbWUgICAgICAgCSJQcmVjb21waWxlZEhlYWRlciIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIklzTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkluZGVudCIKLQkJCXZhbHVlICAgICAgCTIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkNvZGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJImNnIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRW1wdHlSZWdpb25zIgotCQkJdmFsdWUgICAgICAJKCJHZW5lcmF0ZUVtcHR5UmVnaW9uU2V0IiAzKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiY2ciCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVFbXB0eVJlZ2lvblNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiTm9uZSIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJImNnIgotCQkJCW5hbWUgICAgICAgCSJQcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiVW5wcmVzZXJ2ZWQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJjZyIKLQkJCQluYW1lICAgICAgIAkiQWxsIgotCQkJCXZhbHVlICAgICAgCTMpKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI4MDkxMzU5NjYiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1Byb2plY3QiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJWZXJzaW9uIgotCQkJdmFsdWUgICAgICAJIjUuMCIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19DbGFzcyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNDbGFzc1R5cGVTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1TVkNDbGFzc1R5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiSW50ZXJmYWNlX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDb25uZWN0aW9uX1BhcnQiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJDbGFzc19GYWN0b3J5IgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT2JqZWN0RnVuY3Rpb25hbGl0eSIKLQkJCXZhbHVlICAgICAgCSgiQ09iamVjdEZ1bmN0aW9uYWxpdHlTZXQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNPYmplY3RGdW5jdGlvbmFsaXR5U2V0IgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJEeW5hbWljIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRHluY3JlYXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiU2VyaWFsIgotCQkJCXZhbHVlICAgICAgCTMpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU92ZXJyaWRlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9EQVRBX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVGaWVsZEdyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0ZJRUxEX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVNZXNzYWdlR3JvdXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU1lc3NhZ2VNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk1FU1NBR0VfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeSIKLQkJCXZhbHVlICAgICAgCSgiT0xFRmFjdG9yeVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFRmFjdG9yeVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQnVpbHRfaW4iCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMikKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJMaWNlbnNlZCIKLQkJCQl2YWx1ZSAgICAgIAkzKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRUNsYXNzSUQiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZU9MRUN0bFR5cGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJPTEVDdGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVPTEVUeXBlTGliIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYklEIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1ham9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFVHlwZUxpYk1pbm9yIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVQcm9wUGFnZUlEcyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIk9MRVByb3BQYWdlSURzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGlzcGF0Y2hNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0aWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRnVuY3Rpb25zIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRpc3BhdGNoRGVmVmFsdWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURpc3BJZEVudW0iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUF9JRF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW50ZXJmYWNlTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiSU5URVJGQUNFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaXRJbnRlcmZhY2UiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUV2ZW50TWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkVWRU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlN0b2NrRXZlbnRzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRXZlbnRTaW5rTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9FVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRTSU5LX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlByb3BOb3RpZnlTaW5rcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUNvbm5lY3Rpb25NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNvbm5lY3Rpb25Qb2ludElJRCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkluaGVyaXRhbmNlVHlwZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkRlY2xTcGVjIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiT0xFQ29tbWFuZHMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTUZDSW1wbGVtZW50cyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBVExfRGVjbGFyZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDT01NYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT01fTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVDb25uZWN0aW9uUG9pbnRNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJDT05ORUNUSU9OX1BPSU5UX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTXNnTWFwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNHX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlUHJvcGVydHlNYXAiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQUk9QRVJUWV9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIlR5cGUiCi0JCQl2YWx1ZSAgICAgIAkoIk1TVkNPcGVyYXRpb25UeXBlU2V0IiAwKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNU1ZDT3BlcmF0aW9uVHlwZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJOb3JtYWwiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJWaXJ0dWFsX092ZXJyaWRlIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVzc2FnZV9IYW5kbGVyIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRGlzcGF0Y2hfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAkzKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X0ZpcmluZ19GdW5jdGlvbiIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkV2ZW50X1NpbmtfSGFuZGxlciIKLQkJCQl2YWx1ZSAgICAgIAk1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0ZF9PTEVfTWV0aG9kIgotCQkJCXZhbHVlICAgICAgCTYpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiQ29tbWFuZF9QYXJzZXIiCi0JCQkJdmFsdWUgICAgICAJNykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9HZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9TZXRfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJOSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJCW5hbWUgICAgICAgCSJQcm9wZXJ0eV9Ob3RpZnlfRnVuY3Rpb24iCi0JCQkJdmFsdWUgICAgICAJMTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWFjcm9fR2VuZXJhdGVkX0Z1bmN0aW9uIgotCQkJCXZhbHVlICAgICAgCTExKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX01TR19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJNRVNTQUdFX01BUF9FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9ESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJESVNQQVRDSF9NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRVZFTlRfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0VWRU5UU0lOS19NQVBfRW50cmllcyIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJFVkVOVFNJTktfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQ2FsbFR5cGUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJEZWNsU3BlYyIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkJvZHlJbWFnZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19IYXMiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19BdHRyaWJ1dGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJUeXBlIgotCQkJdmFsdWUgICAgICAJKCJNU1ZDQXR0cmlidXRlVHlwZVNldCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiTVNWQ0F0dHJpYnV0ZVR5cGVTZXQiCi0JCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTm9ybWFsIgotCQkJCXZhbHVlICAgICAgCTApCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiTWVtYmVyX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiR2V0X1NldF9Qcm9wZXJ0eSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIkRpYWxvZ19EYXRhIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCQluYW1lICAgICAgIAkiRmllbGRfRGF0YSIKLQkJCQl2YWx1ZSAgICAgIAk0KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQkJbmFtZSAgICAgICAJIlN0b2NrX1Byb3BlcnR5IgotCQkJCXZhbHVlICAgICAgCTUpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJBRlhfRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRElTUEFUQ0hfTUFQX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiRGVjbFNwZWMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiTVNWQyIKLQkJCW5hbWUgICAgICAgCSJQb2ludGVyQmFzZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkNhbGxUeXBlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiU3RvY2tQcm9wZXJ0eUltcGxlbWVudGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5jbHVkZXNHcm91cCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkFGWF9JTkNMVURFU19FbnRyaWVzIgotCQkJdmFsdWUgICAgICAJKHZhbHVlIFRleHQgIiIpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJNU1ZDIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlSW5zZXJ0TG9jYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiTVNWQyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX01vZHVsZS1Cb2R5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbmNsdWRlc0dyb3VwIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiQUZYX0lOQ0xVREVTX0VudHJpZXMiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIk1TVkMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbnNlcnRMb2NhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJjZyIKLQkJbmFtZSAgICAgICAJIkhpZGRlblRvb2wiCi0JCXZhbHVlICAgICAgCUZBTFNFKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiU0NDIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJUeXBlTGliSW1wb3J0ZXIiCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJInByb3BlcnR5SWQiCi0JCXZhbHVlICAgICAgCSI3ODM2MDYzNzgiKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlByaXZhdGUiCi0JCQkJdmFsdWUgICAgICAJMjIxKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiUHVibGljTm90Q3JlYXRhYmxlIgotCQkJCXZhbHVlICAgICAgCTIxMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlNpbmdsZVVzZSIKLQkJCQl2YWx1ZSAgICAgIAkyMTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJCW5hbWUgICAgICAgCSJHbG9iYWxTaW5nbGVVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE1KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjE5KQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiR2xvYmFsTXVsdGlVc2UiCi0JCQkJdmFsdWUgICAgICAJMjIwKSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJPcHRpb25CYXNlIgotCQkJdmFsdWUgICAgICAJIjAiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uRXhwbGljaXQiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3B0aW9uQ29tcGFyZSIKLQkJCXZhbHVlICAgICAgCSgiQ29tcGFyZVNldCIgMjAyKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkNyZWF0YWJsZSIKLQkJCXZhbHVlICAgICAgCSgiQ3JlYXRhYmxlU2V0IiAyMjEpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVJbml0aWFsaXphdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVUZXJtaW5hdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29sbGVjdGlvbkNsYXNzIgotCQkJdmFsdWUgICAgICAJIkNvbGxlY3Rpb24iKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiQ29tcGFyZVNldCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIk5vbmUiCi0JCQkJdmFsdWUgICAgICAJMjAyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCQluYW1lICAgICAgIAkiQmluYXJ5IgotCQkJCXZhbHVlICAgICAgCTIwMykKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQkJbmFtZSAgICAgICAJIlRleHQiCi0JCQkJdmFsdWUgICAgICAJMjA0KSkpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiT3BlcmF0aW9uTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkb3BlcmF0aW9uIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkxpYnJhcnlOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJBbGlhc05hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIklzU3RhdGljIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFbnRyeUNvZGUiCi0JCQl2YWx1ZSAgICAgIAkodmFsdWUgVGV4dCAiIikpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJFeGl0Q29kZSIKLQkJCXZhbHVlICAgICAgCSh2YWx1ZSBUZXh0ICIiKSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQXR0cmlidXRlIgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJJc0NvbnN0IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOZXciCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIldpdGhFdmVudHMiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIlN1YnNjcmlwdCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiTmFtZUlmVW5sYWJlbGVkIgotCQkJdmFsdWUgICAgICAJInRoZSRzdXBwbGllciIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZURhdGFNZW1iZXIiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiRGF0YU1lbWJlck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiJHJlbGF0aW9uc2hpcCIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZUdldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVTZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlTGV0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX1JvbGUiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIk5ldyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiV2l0aEV2ZW50cyIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiU3Vic2NyaXB0IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJOYW1lSWZVbmxhYmVsZWQiCi0JCQl2YWx1ZSAgICAgIAkidGhlJHN1cHBsaWVyIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlRGF0YU1lbWJlciIKLQkJCXZhbHVlICAgICAgCVRSVUUpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJEYXRhTWVtYmVyTmFtZSIKLQkJCXZhbHVlICAgICAgCSIkcmVsYXRpb25zaGlwIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQkJbmFtZSAgICAgICAJIkdlbmVyYXRlR2V0T3BlcmF0aW9uIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIlZpc3VhbCBCYXNpYyIKLQkJCW5hbWUgICAgICAgCSJHZW5lcmF0ZVNldE9wZXJhdGlvbiIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiR2VuZXJhdGVMZXRPcGVyYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fSW5oZXJpdCIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiSW1wbGVtZW50c0RlbGVnYXRpb24iCi0JCQl2YWx1ZSAgICAgIAlUUlVFKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCW5hbWUgICAgICAgCSJkZWZhdWx0X19Nb2R1bGUtU3BlYyIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJWaXN1YWwgQmFzaWMiCi0JCQluYW1lICAgICAgIAkiUHJvamVjdEZpbGUiCi0JCQl2YWx1ZSAgICAgIAkiIikpKQotCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQl0b29sICAgICAgIAkiVmlzdWFsIEJhc2ljIgotCQluYW1lICAgICAgIAkiSGlkZGVuVG9vbCIKLQkJdmFsdWUgICAgICAJRkFMU0UpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJWaXN1YWxTdHVkaW8iCi0JCW5hbWUgICAgICAgCSJIaWRkZW5Ub29sIgotCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkicHJvcGVydHlJZCIKLQkJdmFsdWUgICAgICAJIjgwOTEzNTk2OSIpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0NhdGVnb3J5IgotCQl2YWx1ZSAgICAgIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInBhY2thZ2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zUHJlZml4IgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIm5zVVJJIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImJhc2VQYWNrYWdlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInByZWZpeCIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fQ2xhc3MiCi0JCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY2xhc3NpZmllck5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiY29uc3RyYWludHMiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZSIKLQkJCXZhbHVlICAgICAgCSIiKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ4bWxDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCSgiQ29udGVudEtpbmQiIDApKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJDb250ZW50S2luZCIKLQkJCXZhbHVlICAgICAgCShsaXN0IEF0dHJpYnV0ZV9TZXQKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiVW5zcGVjaWZpZWQiCi0JCQkJdmFsdWUgICAgICAJMCkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiRW1wdHkiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiU2ltcGxlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIk1peGVkIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnRPbmx5IgotCQkJCXZhbHVlICAgICAgCTQpKSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX09wZXJhdGlvbiIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJvcGVyYXRpb25OYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiYW5ub3RhdGlvbiIKLQkJCXZhbHVlICAgICAgCSIiKSkpCi0JICAgIChvYmplY3QgQXR0cmlidXRlCi0JCXRvb2wgICAgICAgCSJFY29yZSIKLQkJbmFtZSAgICAgICAJImRlZmF1bHRfX0F0dHJpYnV0ZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhdHRyaWJ1dGVOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVW5pcXVlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNJRCIKLQkJCXZhbHVlICAgICAgCUZBTFNFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkKLQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQluYW1lICAgICAgIAkiZGVmYXVsdF9fUm9sZSIKLQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJyZWZlcmVuY2VOYW1lIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzVm9sYXRpbGUiCi0JCQl2YWx1ZSAgICAgIAlGQUxTRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNDaGFuZ2VhYmxlIgotCQkJdmFsdWUgICAgICAJVFJVRSkKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkiaXNVbnNldHRhYmxlIgotCQkJdmFsdWUgICAgICAJRkFMU0UpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJImlzUmVzb2x2ZVByb3hpZXMiCi0JCQl2YWx1ZSAgICAgIAlUUlVFKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJ2aXNpYmlsaXR5IgotCQkJdmFsdWUgICAgICAJKCJWaXNpYmlsaXR5S2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIlZpc2liaWxpdHlLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJOb25lIgotCQkJCXZhbHVlICAgICAgCTEpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSIKLQkJCQl2YWx1ZSAgICAgIAkyKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJSZWFkLXdyaXRlIgotCQkJCXZhbHVlICAgICAgCTMpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtb25seSB1bnNldHRhYmxlIgotCQkJCXZhbHVlICAgICAgCTQpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIlJlYWQtd3JpdGUgdW5zZXR0YWJsZSIKLQkJCQl2YWx1ZSAgICAgIAk1KSkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbE5hbWUiCi0JCQl2YWx1ZSAgICAgIAkiIikKLQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQluYW1lICAgICAgIAkieG1sTmFtZXNwYWNlIgotCQkJdmFsdWUgICAgICAJIiIpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJInhtbEZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKCJGZWF0dXJlS2luZCIgMCkpCi0JCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJbmFtZSAgICAgICAJIkZlYXR1cmVLaW5kIgotCQkJdmFsdWUgICAgICAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJVbnNwZWNpZmllZCIKLQkJCQl2YWx1ZSAgICAgIAkwKQotCQkJICAgIChvYmplY3QgQXR0cmlidXRlCi0JCQkJdG9vbCAgICAgICAJIkVjb3JlIgotCQkJCW5hbWUgICAgICAgCSJTaW1wbGUiCi0JCQkJdmFsdWUgICAgICAJMSkKLQkJCSAgICAob2JqZWN0IEF0dHJpYnV0ZQotCQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCQluYW1lICAgICAgIAkiQXR0cmlidXRlIgotCQkJCXZhbHVlICAgICAgCTIpCi0JCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCQl0b29sICAgICAgIAkiRWNvcmUiCi0JCQkJbmFtZSAgICAgICAJIkVsZW1lbnQiCi0JCQkJdmFsdWUgICAgICAJNCkpKQotCQkgICAgKG9iamVjdCBBdHRyaWJ1dGUKLQkJCXRvb2wgICAgICAgCSJFY29yZSIKLQkJCW5hbWUgICAgICAgCSJhbm5vdGF0aW9uIgotCQkJdmFsdWUgICAgICAJIiIpKSkpCi0JcXVpZCAgICAgICAJIjM5RTI3RjA4MDA2NyIpKQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9tb2RlbC9vcmcuZWNsaXBzZS53c3QuV1NETC5jYXQgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL29yZy5lY2xpcHNlLndzdC5XU0RMLmNhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAwODQ0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL21vZGVsL29yZy5lY2xpcHNlLndzdC5XU0RMLmNhdAorKysgL2Rldi9udWxsCkBAIC0xLDcyOTUgKzAsMCBAQAotCi0ob2JqZWN0IFBldGFsCi0gICAgdmVyc2lvbiAgICAJNDIKLSAgICBfd3JpdHRlbiAgIAkiUm9zZSA0LjUuODE2My4zIgotICAgIGNoYXJTZXQgICAgCTApCi0KLShvYmplY3QgQ2xhc3NfQ2F0ZWdvcnkgIndzZGwiCi0gICAgaXNfdW5pdCAgICAJVFJVRQotICAgIGlzX2xvYWRlZCAgCVRSVUUKLSAgICBhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JKG9iamVjdCBBdHRyaWJ1dGUKLQkgICAgdG9vbCAgICAgICAJIkVjb3JlIgotCSAgICBuYW1lICAgICAgIAkibnNQcmVmaXgiCi0JICAgIHZhbHVlICAgICAgCSJ3c2RsIikKLQkob2JqZWN0IEF0dHJpYnV0ZQotCSAgICB0b29sICAgICAgIAkiRWNvcmUiCi0JICAgIG5hbWUgICAgICAgCSJuc1VSSSIKLQkgICAgdmFsdWUgICAgICAJImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1dTREwiKQotCShvYmplY3QgQXR0cmlidXRlCi0JICAgIHRvb2wgICAgICAgCSJFY29yZSIKLQkgICAgbmFtZSAgICAgICAJImJhc2VQYWNrYWdlIgotCSAgICB2YWx1ZSAgICAgIAkib3JnLmVjbGlwc2Uud3N0IikKLQkob2JqZWN0IEF0dHJpYnV0ZQotCSAgICB0b29sICAgICAgIAkiRWNvcmUiCi0JICAgIG5hbWUgICAgICAgCSJwcmVmaXgiCi0JICAgIHZhbHVlICAgICAgCSJXU0RMIikpCi0gICAgcXVpZCAgICAgICAJIjNBREZCOEU1MDIxRSIKLSAgICBkb2N1bWVudGF0aW9uIAkKLXxUaGUgV1NETCBtb2RlbCBjb250YWlucyBjbGFzc2VzIGZvciB0aGUgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKS4KLXwKLXxXU0RMIGRlc2NyaWJlcyBuZXR3b3JrIHNlcnZpY2VzIGFzIHNldHMgb2YgZW5kcG9pbnRzIG9wZXJhdGluZyBvbiBtZXNzYWdlcy4gVGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGFyZSBkZXNjcmliZWQgYWJzdHJhY3RseSwgYW5kIHRoZW4gYm91bmQgdG8gYSBjb25jcmV0ZSBuZXR3b3JrIHByb3RvY29sIGFuZCBtZXNzYWdlIGZvcm1hdCB0byBkZWZpbmUgYW4gZW5kcG9pbnQuCi18Ci18V1NETCBkZXNjcmliZXMgdGhlIGZvcm1hdHMgb2YgdGhlIG1lc3NhZ2VzIGV4Y2hhbmdlZCBieSB0aGUgc2VydmljZXMsIGFuZCBzdXBwb3J0cyB0aGUgWE1MIFNjaGVtYXMgc3BlY2lmaWNhdGlvbiBhcyBpdHMgY2Fub25pY2FsIHR5cGUgc3lzdGVtLiBUaGlzIHBhY2thZ2UgdXNlcyBhbiBYTUwgU2NoZW1hIEluZm9zZXQgbW9kZWwgcGFja2FnZSAoc2VlIHRoZSBYU0QgcGFja2FnZSkgdG8gZGVzY3JpYmUgdGhlIGFic3RyYWN0IG1lc3NhZ2UgZm9ybWF0cy4KLXwKLXxUaGUgbW9kZWwgY29udGFpbnMgdGhlIGZvbGxvd2luZyBkaWFncmFtcywgbmFtZWQgYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgY2hhcHRlcnMgaW4gdGhlIFdTREwgMS4xIHNwZWNpZmljYXRpb24gKGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvTk9URS13c2RsLTIwMDEwMzE1KQotfC0gMi4xIERlZmluaXRpb24sIHNob3dzIHRoZSBXU0RMIGRlZmluaXRpb24gZWxlbWVudCBhbmQgdGhlIFdTREwgZG9jdW1lbnQgc3RydWN0dXJlCi18LSAyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmcsIHNob3dzIHRoZSBuYW1lc3BhY2UgYW5kIGltcG9ydCBtZWNoYW5pc20KLXwtIDIuMS4zIEV4dGVuc2liaWxpdHksIHNob3dzIHRoZSBXU0RMIGV4dGVuc2liaWxpdHkgbWVjaGFuaXNtCi18LSAyLjIgVHlwZXMsIHNob3dzIHRoZSB1c2Ugb2YgWE1MIFNjaGVtYSB0eXBlcyBpbiBXU0RMCi18LSAyLjMgTWVzc2FnZXMsIDIuNCBQb3J0VHlwZXMsIDIuNSBCaW5kaW5ncyBhbmQgMi43IFNlcnZpY2VzLCBzaG93IHRoZSBtYWpvciBXU0RMIGVsZW1lbnRzIGFuZCB0aGVpciByZWxhdGlvbnMuCi18Ci18VGhlIFdTREwgY2xhc3NlcyBleHRlbmQgdGhlIGphdmF4LndzZGwgaW50ZXJmYWNlcyBkZWZpbmVkIGJ5IEpTUiAxMTAuIENsYXNzZXMgd2l0aCBpbnRlcmZhY2UgYW5kIGRhdGF0eXBlIHN0ZXJlb3R5cGVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCB0aGVzZSBub24tTU9GIGludGVyZmFjZXMuCi0gICAgCi0gICAgZXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLSAgICBsb2dpY2FsX21vZGVscyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCShvYmplY3QgQ2xhc3MgIldTRExFbGVtZW50IgotCSAgICBxdWlkICAgICAgIAkiM0FENUM2QTMwMkREIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBsYW5ndWFnZSBlbGVtZW50LiIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0QxNTI5NjAwQzgiCi0JCSAgICByZXN1bHQgICAgIAkiRGVmaW5pdGlvbiIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRFbmNsb3NpbmdEZWZpbml0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNDRDE1MkI4MDM0NyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJkZWZpbml0aW9uIgotCQkJICAgIHR5cGUgICAgICAgCSJEZWZpbml0aW9uIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZG9jdW1lbnRhdGlvbkVsZW1lbnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0NDRTQ0MzYwMkEzIgotCQkgICAgdHlwZSAgICAgICAJIkRPTUVsZW1lbnQiKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJlbGVtZW50IgotCQkgICAgYXR0cmlidXRlcyAJKGxpc3QgQXR0cmlidXRlX1NldAotCQkJKG9iamVjdCBBdHRyaWJ1dGUKLQkJCSAgICB0b29sICAgICAgIAkiRWNvcmUiCi0JCQkgICAgbmFtZSAgICAgICAJImlzVHJhbnNpZW50IgotCQkJICAgIHZhbHVlICAgICAgCVRSVUUpKQotCQkgICAgcXVpZCAgICAgICAJIjNGOTdEQkQzMDIwNyIKLQkJICAgIHR5cGUgICAgICAgCSJET01FbGVtZW50IikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIgotCSAgICBhYnN0cmFjdCAgIAlUUlVFKQotCShvYmplY3QgQ2xhc3MgIlBvcnRUeXBlIgotCSAgICBxdWlkICAgICAgIAkiM0FENUM3RjAwMUE1IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBwb3J0VHlwZSBlbGVtZW50IG9mIHRoZSBXU0RMIHNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjEgYW5kIGFuIEludGVyZmFjZSBjb21wb25lbnQgb2YgdGhlIFdTREwgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDEuMi4gQSBwb3J0IHR5cGUgb3IgSW50ZXJmYWNlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1QzlCNzAxNTAiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYxRkQ4MDE5RiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklQb3J0VHlwZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTVCRTAzMzEiKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAicU5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQjQ4OEUwMDIzIgotCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidW5kZWZpbmVkIgotCQkgICAgcXVpZCAgICAgICAJIjNCRERGMUUzMDFFNSIKLQkJICAgIHR5cGUgICAgICAgCSJib29sZWFuIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJPcGVyYXRpb24iCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1QzgwRDAzQ0UiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG9wZXJhdGlvbiBlbGVtZW50LiBBIFdTREwgb3BlcmF0aW9uIGlzIGFuIGFic3RyYWN0IGRlc2NyaXB0aW9uIG9mIGFuIGFjdGlvbiBzdXBwb3J0ZWQgYnkgYSBzZXJ2aWNlLiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRTlERTk4MDAzQyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2RjFGRTIwMTcxIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SU9wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTc3NjAwRDEiKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAic3R5bGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQjQ3MjYwMUFDIgotCQkgICAgdHlwZSAgICAgICAJIk9wZXJhdGlvblR5cGUiKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNCREQ5NjQzMDA0QyIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJ1bmRlZmluZWQiCi0JCSAgICBxdWlkICAgICAgIAkiM0JEREYyMzUwMDNFIgotCQkgICAgdHlwZSAgICAgICAJImJvb2xlYW4iKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIk1lc3NhZ2UiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1Qzk1OTAwNzgiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG1lc3NhZ2UgZWxlbWVudC4gQSBXU0RMIG1lc3NhZ2UgaXMgYW4gYWJzdHJhY3QsIHR5cGVkIGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgY29tbXVuaWNhdGVkLiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRDVEMDU1MDFDNCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEE4RDEwMkJBIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SU1lc3NhZ2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE4QUYwMDRGIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInFOYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUI0ODdDMDFGRSIKLQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInVuZGVmaW5lZCIKLQkJICAgIHF1aWQgICAgICAgCSIzQkRERjFEMjAyMjYiCi0JCSAgICB0eXBlICAgICAgIAkiYm9vbGVhbiIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiUGFydCIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcGFydCBlbGVtZW50LiBQYXJ0cyBkZXNjcmliZSB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gRWFjaCBwYXJ0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHR5cGUgZnJvbSBzb21lIHR5cGUgc3lzdGVtLiAiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTk2RDAyRjEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJUGFydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTkzRjAxQkUiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCODk3RTIzMDIzNyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNCQ0U3MEI3MDNDOCIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJlbGVtZW50TmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QjA4NzAzREIiCi0JCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJ0eXBlTmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQkNFNzBDMzAzQzUiCi0JCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkJpbmRpbmciCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDI4NjAyNjEiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGJpbmRpbmcgZWxlbWVudC4gQSBiaW5kaW5nIGRlZmluZXMgbWVzc2FnZSBmb3JtYXQgYW5kIHByb3RvY29sIGRldGFpbHMgZm9yIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnRUeXBlLiBUaGVyZSBtYXkgYmUgYW55IG51bWJlciBvZiBiaW5kaW5ncyBmb3IgYSBnaXZlbiBwb3J0VHlwZS4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RkEwRjAyRjAiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCODU5NTQxMDEyOSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nIgotCQkgICAgcXVpZHUgICAgICAJIjNCODRBQkM2MDIxOSIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJxTmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQUVCNDg5OTAxNEIiCi0JCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJ1bmRlZmluZWQiCi0JCSAgICBxdWlkICAgICAgIAkiM0JEREYxRjQwMUEzIgotCQkgICAgdHlwZSAgICAgICAJImJvb2xlYW4iKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkJpbmRpbmdPcGVyYXRpb24iCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG9wZXJhdGlvbiBlbGVtZW50IHdpdGhpbiBhIGJpbmRpbmcuIEFuIG9wZXJhdGlvbiBlbGVtZW50IHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gd2l0aCB0aGUgc2FtZSBuYW1lIHdpdGhpbiB0aGUgYmluZGluZydzIHBvcnRUeXBlLiAiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ2MDA5MjAyRjciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCODRBREU0MDFEQyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNCODRBREMwMDA3MiIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNCODlDNENCMDE5OSIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIlNlcnZpY2UiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDhGMDAyRjgiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHNlcnZpY2UgZWxlbWVudC4gQSBzZXJ2aWNlIGdyb3VwcyBhIHNldCBvZiByZWxhdGVkIHBvcnRzIHRvZ2V0aGVyLiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRDVGQTIwMDI1RSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NTk1NEUwMUI0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SVNlcnZpY2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFCNDkwMjg3IikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInFOYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUI0OEE0MDE1MSIKLQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInVuZGVmaW5lZCIKLQkJICAgIHF1aWQgICAgICAgCSIzQkRERjIwRDAyMDMiCi0JCSAgICB0eXBlICAgICAgIAkiYm9vbGVhbiIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiUG9ydCIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVEOTE3MDI4NiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9ydCBlbGVtZW50LiBBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0FENjAwQ0IwMEFBIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1OTU0NTAyQzkiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJUG9ydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUI4MDAzMjYiKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDlBMDAzOTEiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVEQkI2MDJBOSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LiBXU0RMIGFsbG93cyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHRlY2hub2xvZ3kgdW5kZXIgdmFyaW91cyBlbGVtZW50cyBkZWZpbmVkIGJ5IFdTREwuIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEIxNDkwM0QwIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMTI0MDJBQiIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0JEREY1MzUwMkMzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6V1NETEVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM2QTMwMkREIikpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInJlcXVpcmVkIgotCQkgICAgcXVpZCAgICAgICAJIjNBRjk1NDNDMDA3MyIKLQkJICAgIHR5cGUgICAgICAgCSJib29sZWFuIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZWxlbWVudFR5cGUiCi0JCSAgICBhdHRyaWJ1dGVzIAkobGlzdCBBdHRyaWJ1dGVfU2V0Ci0JCQkob2JqZWN0IEF0dHJpYnV0ZQotCQkJICAgIHRvb2wgICAgICAgCSJFY29yZSIKLQkJCSAgICBuYW1lICAgICAgIAkiaXNUcmFuc2llbnQiCi0JCQkgICAgdmFsdWUgICAgICAJVFJVRSkpCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUIyMUEwMjcxIgotCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJEZWZpbml0aW9uIgotCSAgICBxdWlkICAgICAgIAkiM0FENUU0M0YwMDhFIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50IGlzIHRoZSByb290IGVsZW1lbnQgb2YgYSBXU0RMIGRvY3VtZW50LiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRDVGREI4MDNENCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEIxRjgwMzgyIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SURlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEIxRDkwMTQyIikpCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldERvY3VtZW50IgotCQkgICAgcXVpZCAgICAgICAJIjNDRDE0RkMyMDEyQiIKLQkJICAgIHJlc3VsdCAgICAgCSJET01Eb2N1bWVudCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXREb2N1bWVudCIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0QxNTBERTAxRTciCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZG9jdW1lbnQiCi0JCQkgICAgdHlwZSAgICAgICAJIkRPTURvY3VtZW50IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAidGFyZ2V0TmFtZXNwYWNlIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNDc0MDA0RSIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJsb2NhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSI0MDM1MkI3QzAzOTYiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAicU5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQjQ4NTcwMkY1IgotCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiZW5jb2RpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwMEQwMDBEIgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiSW1wb3J0IgotCSAgICBxdWlkICAgICAgIAkiM0FENUU0RjkwM0RFIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIFdTREwgaW1wb3J0IGVsZW1lbnQuIFdTREwgYWxsb3dzIGFzc29jaWF0aW5nIGEgbmFtZXNwYWNlIHdpdGggYSBkb2N1bWVudCBsb2NhdGlvbiB1c2luZyBhbiBpbXBvcnQgZWxlbWVudC4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RUU1ODAzN0EiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYyMDBEMDM0MCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklJbXBvcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEIyMDIwMTE5IikpCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFNjaGVtYSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NzJDMTAzNzkiCi0JCSAgICByZXN1bHQgICAgIAkiWFNEU2NoZW1hIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldFNjaGVtYSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NzJDMTAzOTciCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAic2NoZW1hIgotCQkJICAgIHR5cGUgICAgICAgCSJYU0RTY2hlbWEiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lc3BhY2VVUkkiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUU1MEEwMDM2IgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImxvY2F0aW9uVVJJIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNTE0MDIxMSIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkV4dGVuc2libGVFbGVtZW50IgotCSAgICBxdWlkICAgICAgIAkiM0FENUZDRkEwMzNBIgotCSAgICBkb2N1bWVudGF0aW9uIAkiIFdTREwgYWxsb3dzIGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHRlY2hub2xvZ3kgKHJlZmVycmVkIHRvIGhlcmUgYXMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cykgdW5kZXIgdmFyaW91cyBlbGVtZW50cyBkZWZpbmVkIGJ5IFdTREwuIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgcG9pbnQgb2YgZXh0ZW5zaWJpbGl0eS4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RkUzQzAzRDQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpXU0RMRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzZBMzAyREQiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODVDMTJDMDNDRCIKLQkJICAgIHJlc3VsdCAgICAgCSJJTGlzdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1QzE0NzAyOTUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZXh0RWxlbWVudCIKLQkJCSAgICB0eXBlICAgICAgIAkiSUV4dGVuc2liaWxpdHlFbGVtZW50IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiCi0JICAgIGFic3RyYWN0ICAgCVRSVUUpCi0JKG9iamVjdCBDbGFzcyAiSW5wdXQiCi0JICAgIHF1aWQgICAgICAgCSIzQUUwNzg5RjAwNTkiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGlucHV0IGVsZW1lbnQuIEFuIGlucHV0IGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgdGhlIGlucHV0IG9mIHRoZSBvcGVyYXRpb24uIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2NzcyMjgwMkU3IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzFEQjAyREMiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYxRkVFMDMxRCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklJbnB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTdFRTAwMTUiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIk91dHB1dCIKLQkgICAgcXVpZCAgICAgICAJIjNBRTA3OEI2MDIzMiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3V0cHV0IGVsZW1lbnQuIEFuIG91dHB1dCBlbGVtZW50IHNwZWNpZmllcyB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4iCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzRjY3NzIzNTAwREQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlUmVmZXJlbmNlIgotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MURCMDJEQyIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2RjFGRjgwMUNEIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SU91dHB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTgyOTAyN0QiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkZhdWx0IgotCSAgICBxdWlkICAgICAgIAkiM0FFMDc4QkUwMTA4IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBmYXVsdCBlbGVtZW50LiBGYXVsdCBlbGVtZW50cyBzcGVjaWZ5IHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgYW55IGVycm9yIG1lc3NhZ2VzIHRoYXQgbWF5IGJlIG91dHB1dCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0Y2NzcyM0QwMzE5IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzFEQjAyREMiKQotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNkYyMDAyMDAyRCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTg2MTAzMUQiKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkJpbmRpbmdJbnB1dCIKLQkgICAgcXVpZCAgICAgICAJIjNBRTA4QTgyMDJENCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgaW5wdXQgZWxlbWVudCB3aXRoaW4gYSBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZy4gQW4gaW5wdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnB1dCBvZiB0aGUgb3BlcmF0aW9uLiAiCi0JICAgIHN1cGVyY2xhc3NlcyAJKGxpc3QgaW5oZXJpdGFuY2VfcmVsYXRpb25zaGlwX2xpc3QKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUUxQjAxMTMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZ0lucHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNCODRBREVCMDEwMCIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUI1OUIwMDcyIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZDRkEwMzNBIikpCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldElucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1M0E0MDIwMyIKLQkJICAgIHJlc3VsdCAgICAgCSJJSW5wdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0SW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjUzQjUwM0EyIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImlucHV0IgotCQkJICAgIHR5cGUgICAgICAgCSJJSW5wdXQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNCODVDMUVBMDIwRSIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkgICAgbGFuZ3VhZ2UgICAJIkphdmEiKQotCShvYmplY3QgQ2xhc3MgIkJpbmRpbmdPdXRwdXQiCi0JICAgIHF1aWQgICAgICAgCSIzQUUwOEE4RjAyOEMiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG91dHB1dCBlbGVtZW50IHdpdGhpbiBhIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nLiBBbiBvdXRwdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4gIgotCSAgICBzdXBlcmNsYXNzZXMgCShsaXN0IGluaGVyaXRhbmNlX3JlbGF0aW9uc2hpcF9saXN0Ci0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFFNDMwMkFCIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFFMjEwMTExIikKLQkJKG9iamVjdCBJbmhlcml0YW5jZV9SZWxhdGlvbnNoaXAKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1QjVBNDAyN0UiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmxlRWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0T3V0cHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1M0Q5MDBGMSIKLQkJICAgIHJlc3VsdCAgICAgCSJJT3V0cHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldE91dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTNGMTAzMjYiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAib3V0cHV0IgotCQkJICAgIHR5cGUgICAgICAgCSJJT3V0cHV0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAibmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1QzIwMjAwQkUiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJCaW5kaW5nRmF1bHQiCi0JICAgIHF1aWQgICAgICAgCSIzQUUwOEE5RTAzQTYiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIGZhdWx0IGVsZW1lbnQgd2l0aGluIGEgb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcuIEEgZmF1bHQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBmYXVsdCB3aXRoIHRoZSBzYW1lIG5hbWUuICIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNBRTA5Mzg2MDJDOSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFFNzEwMzMzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUU0RjAwQkQiKSkKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0RmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjU0MTMwMzdGIgotCQkgICAgcmVzdWx0ICAgICAJIklGYXVsdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTQyMTAxMDkiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiZmF1bHQiCi0JCQkgICAgdHlwZSAgICAgICAJIklGYXVsdCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm5hbWUiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUJGOUUwMTRBIgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiUU5hbWUiCi0JICAgIHF1aWQgICAgICAgCSIzQUU4RUQyMjAxNDAiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuUU5hbWUgY2xhc3MuIEEgUU5hbWUgaXMgYSBmdWxseSBxdWFsaWZpZWQgbmFtZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJkYXRhdHlwZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0OURBOTAwM0QiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJOYW1lc3BhY2UiCi0JICAgIHF1aWQgICAgICAgCSIzQUVBM0NEMzAwMzAiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBuYW1lc3BhY2UgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG5hbWVzcGFjZSBwcmVmaXggdXNlZCBpbiBhIFdTREwgZG9jdW1lbnQuIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJVUkkiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNEMjkwMUIxIgotCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgInByZWZpeCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUVBM0QzMjAyMzYiCi0JCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIikKLQkob2JqZWN0IENsYXNzICJPcGVyYXRpb25UeXBlIgotCSAgICBxdWlkICAgICAgIAkiM0FFQjQ3ODIwMjRGIgotCSAgICBkb2N1bWVudGF0aW9uIAkKLXxPTkVfV0FZPTEKLXxSRVFVRVNUX1JFU1BPTlNFPTIKLXxTT0xJQ0lUX1JFU1BPTlNFPTMKLXxOT1RJRklDQVRJT049NAotCSAgICAKLQkgICAgc3RlcmVvdHlwZSAJImRhdGF0eXBlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLk9wZXJhdGlvblR5cGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NUMzNTMwM0UzIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKQotCSAgICBsYW5ndWFnZSAgIAkiSmF2YSIpCi0JKG9iamVjdCBDbGFzcyAiSVBvcnRUeXBlIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEE1QkUwMzMxIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLlBvcnRUeXBlIG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkT3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2QUMxMDFDQSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJvcGVyYXRpb24iCi0JCQkgICAgdHlwZSAgICAgICAJIklPcGVyYXRpb24iKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTZCQUYwMUE0IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiaW5wdXROYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm91dHB1dE5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIklPcGVyYXRpb24iCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0T3BlcmF0aW9ucyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkJGNzAzMUEiCi0JCSAgICByZXN1bHQgICAgIAkiSUxpc3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5Qb3J0VHlwZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTYzMjAwMEQiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklPcGVyYXRpb24iCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QTc3NjAwRDEiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuT3BlcmF0aW9uIG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkRmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTZDNDIwMDY1IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImZhdWx0IgotCQkJICAgIHR5cGUgICAgICAgCSJJRmF1bHQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkM1OTAyOEYiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICByZXN1bHQgICAgIAkiSUZhdWx0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEZhdWx0cyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkM3MTAyQjEiCi0JCSAgICByZXN1bHQgICAgIAkiSU1hcCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQYXJhbWV0ZXJPcmRlcmluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NkM4MTAxQjAiCi0JCSAgICByZXN1bHQgICAgIAkiSUxpc3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0UGFyYW1ldGVyT3JkZXJpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTZDOTkwMzFEIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgInBhcmFtZXRlck9yZGVyIgotCQkJICAgIHR5cGUgICAgICAgCSJJTGlzdCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldElucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY1NEU1MDE4RCIKLQkJICAgIHJlc3VsdCAgICAgCSJJSW5wdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0SW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjYyQzQwMTA3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImlucHV0IgotCQkJICAgIHR5cGUgICAgICAgCSJJSW5wdXQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjYyRTQwMDk0IgotCQkgICAgcmVzdWx0ICAgICAJIklPdXRwdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0T3V0cHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNDODY2MkYwMDFEMiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJvdXRwdXQiCi0JCQkgICAgdHlwZSAgICAgICAJIklPdXRwdXQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLk9wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTc5OTAxMkIiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklJbnB1dCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBN0VFMDAxNSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5JbnB1dCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjYzMzEwMEVGIgotCQkgICAgcmVzdWx0ICAgICAJIklNZXNzYWdlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldE1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjYzNDcwMjc3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm1lc3NhZ2UiCi0JCQkgICAgdHlwZSAgICAgICAJIklNZXNzYWdlIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5JbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTgwMDAwMzkiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklPdXRwdXQiCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QTgyOTAyN0QiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuT3V0cHV0IG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0TWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NjQzQTAzNUQiCi0JCSAgICByZXN1bHQgICAgIAkiSU1lc3NhZ2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0TWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NjQ0NTAxQzgiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibWVzc2FnZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSU1lc3NhZ2UiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLk91dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTgzOTAxRDUiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklGYXVsdCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBODYxMDMxRCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5GYXVsdCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjY0NkEwMEJEIgotCQkgICAgcmVzdWx0ICAgICAJIklNZXNzYWdlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldE1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjY0NzUwMTMxIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm1lc3NhZ2UiCi0JCQkgICAgdHlwZSAgICAgICAJIklNZXNzYWdlIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5GYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QTg3MTAyMDgiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklNZXNzYWdlIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEE4QUYwMDRGIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLk1lc3NhZ2Ugbm9uLU1PRiBpbnRlcmZhY2UiCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIG9wZXJhdGlvbnMgCShsaXN0IE9wZXJhdGlvbnMKLQkJKG9iamVjdCBPcGVyYXRpb24gImFkZFBhcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTcyMjQwMjczIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgInBhcnQiCi0JCQkgICAgdHlwZSAgICAgICAJIklQYXJ0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UGFydCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NzIzRDAyMzMiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICByZXN1bHQgICAgIAkiSVBhcnQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UGFydHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTcyNTQwMjVFIgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0T3JkZXJlZFBhcnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk3MjYxMDIwRCIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJwYXJ0T3JkZXIiCi0JCQkgICAgdHlwZSAgICAgICAJIklMaXN0IikpCi0JCSAgICByZXN1bHQgICAgIAkiSUxpc3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5NZXNzYWdlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBOEJDMDI2MCIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSVBhcnQiCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QTkzRjAxQkUiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuUGFydCBub24tTU9GIGludGVyZmFjZSIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0RXh0ZW5zaW9uQXR0cmlidXRlIgotCQkgICAgcXVpZCAgICAgICAJIjNDNDY4ODQ1MDA1MiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpCi0JCQkob2JqZWN0IFBhcmFtZXRlciAidmFsdWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICBleGNlcHRpb25zIAkiV1NETEV4Y2VwdGlvbiIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRFeHRlbnNpb25BdHRyaWJ1dGVOYW1lcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQzQ2OEEwMTAxQzMiCi0JCSAgICByZXN1bHQgICAgIAkiSUl0ZXJhdG9yIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEV4dGVuc2lvbkF0dHJpYnV0ZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzQ2OEEyRDAyRDUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiUU5hbWUiKSkKLQkJICAgIHJlc3VsdCAgICAgCSJRTmFtZSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLlBhcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEE5NTAwMjMxIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJU2VydmljZSIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBQjQ5MDI4NyIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5TZXJ2aWNlIG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkUG9ydCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NUQ1NjAxRDEiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAicG9ydCIKLQkJCSAgICB0eXBlICAgICAgIAkiSVBvcnQiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQb3J0cyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NURBMjAwMzYiCi0JCSAgICByZXN1bHQgICAgIAkiSU1hcCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQb3J0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk1REIwMDFCQyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJUG9ydCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLlNlcnZpY2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFCNUIwMDNFIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJUG9ydCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBQjgwMDMyNiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5Qb3J0IG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0QmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTFGMzAyQjUiCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmciCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0QmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTI2MzAyRjIiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiYmluZGluZyIKLQkJCSAgICB0eXBlICAgICAgIAkiSUJpbmRpbmciKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLlBvcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFCOEMwMDE2IgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJQmluZGluZyIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBQkM2MDIxOSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5CaW5kaW5nIG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgb3BlcmF0aW9ucyAJKGxpc3QgT3BlcmF0aW9ucwotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkQmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NUYxNjAxNTMiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiYmluZGluZ09wZXJhdGlvbiIKLQkJCSAgICB0eXBlICAgICAgIAkiSUJpbmRpbmdPcGVyYXRpb24iKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk1RjUwMDA2NiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKQotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImlucHV0TmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCShvYmplY3QgUGFyYW1ldGVyICJvdXRwdXROYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciKSkKLQkJICAgIHJlc3VsdCAgICAgCSJJQmluZGluZ09wZXJhdGlvbiIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRCaW5kaW5nT3BlcmF0aW9ucyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NUZBNDAxQzUiCi0JCSAgICByZXN1bHQgICAgIAkiSUxpc3QiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UG9ydFR5cGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjUyQTkwMjg0IgotCQkgICAgcmVzdWx0ICAgICAJIklQb3J0VHlwZSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRQb3J0VHlwZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTJCRTAxQTgiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAicG9ydFR5cGUiCi0JCQkgICAgdHlwZSAgICAgICAJIklQb3J0VHlwZSIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuQmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUJDRjAzMDIiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklCaW5kaW5nT3BlcmF0aW9uIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFEQzAwMDcyIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRCaW5kaW5nRmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTYwQkMwMDQxIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImJpbmRpbmdGYXVsdCIKLQkJCSAgICB0eXBlICAgICAgIAkiSUJpbmRpbmdGYXVsdCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmdGYXVsdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5NjBEOTAwOUQiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibmFtZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmdGYXVsdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRCaW5kaW5nRmF1bHRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2MEZDMDA2MSIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWFwIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE9wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTMyRDAwMTciCi0JCSAgICByZXN1bHQgICAgIAkiSU9wZXJhdGlvbiIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjUzM0YwMzdCIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm9wZXJhdGlvbiIKLQkJCSAgICB0eXBlICAgICAgIAkiSU9wZXJhdGlvbiIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmdJbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NTUwOTAwREEiCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmdJbnB1dCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRCaW5kaW5nSW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjU1MUQwMDdGIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImJpbmRpbmdJbnB1dCIKLQkJCSAgICB0eXBlICAgICAgIAkiSUJpbmRpbmdJbnB1dCIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjU1MzQwMzQ5IgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nT3V0cHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInNldEJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjU1NDcwMkE2IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImJpbmRpbmdPdXRwdXQiCi0JCQkgICAgdHlwZSAgICAgICAJIklCaW5kaW5nT3V0cHV0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKSkKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBRENCMDIxQyIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSUJpbmRpbmdJbnB1dCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBREVCMDEwMCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQgbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLkJpbmRpbmdJbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QURGRTAwMEQiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklCaW5kaW5nT3V0cHV0IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFFMjEwMTExIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFFMkQwMDUwIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJQmluZGluZ0ZhdWx0IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFFNEYwMEJEIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkJpbmRpbmdGYXVsdCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuQmluZGluZ0ZhdWx0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBRTVGMDAyQSIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiRE9NRWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRBRjMyMDNEQiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgb3JnLnczYy5kb20uRWxlbWVudCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJkYXRhdHlwZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAib3JnLnczYy5kb20uRWxlbWVudCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUY1NjAyOTIiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNCODRCMTI0MDJBQiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBub24tTU9GIGludGVyZmFjZS4iCi0JICAgIHN0ZXJlb3R5cGUgCSJJbnRlcmZhY2UiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QjEzNTAzRDEiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklEZWZpbml0aW9uIgotCSAgICBxdWlkICAgICAgIAkiM0I4NEIxRDkwMTQyIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBqYXZheC53c2RsLkRlZmluaXRpb24gbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGRCaW5kaW5nIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4OEYxMDM5RCIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJiaW5kaW5nIgotCQkJICAgIHR5cGUgICAgICAgCSJJQmluZGluZyIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImFkZEltcG9ydCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5ODk0OTAyNTkiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAiaW1wb3J0RGVmIgotCQkJICAgIHR5cGUgICAgICAgCSJJSW1wb3J0IikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkTWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5ODk2RTAwNUUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAibWVzc2FnZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSU1lc3NhZ2UiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJhZGROYW1lc3BhY2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTg5ODQwMDRCIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgInByZWZpeCIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lc3BhY2VVUkkiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImFkZFBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4OUM1MDA0NSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJwb3J0VHlwZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSVBvcnRUeXBlIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiYWRkU2VydmljZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5ODlFNDAxRUUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAic2VydmljZSIKLQkJCSAgICB0eXBlICAgICAgIAkiSVNlcnZpY2UiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVCaW5kaW5nRmF1bHQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBMTcwMzhDIgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nRmF1bHQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlQmluZGluZ0lucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QTMyMDI4NiIKLQkJICAgIHJlc3VsdCAgICAgCSJJQmluZGluZ0lucHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBNDYwMTNCIgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nT3V0cHV0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUJpbmRpbmdPcGVyYXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThBNUMwMEIwIgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUJpbmRpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OTg5RkUwMzdDIgotCQkgICAgcmVzdWx0ICAgICAJIklCaW5kaW5nIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUZhdWx0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QTc1MDJFNyIKLQkJICAgIHJlc3VsdCAgICAgCSJJRmF1bHQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlSW1wb3J0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QTgzMDE0QyIKLQkJICAgIHJlc3VsdCAgICAgCSJJSW1wb3J0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZUlucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QTlEMDMzRSIKLQkJICAgIHJlc3VsdCAgICAgCSJJSW5wdXQiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlTWVzc2FnZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEFBRjAyNTQiCi0JCSAgICByZXN1bHQgICAgIAkiSU1lc3NhZ2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlT3BlcmF0aW9uIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QUMyMDNDNCIKLQkJICAgIHJlc3VsdCAgICAgCSJJT3BlcmF0aW9uIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZU91dHB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEFFODAwRUQiCi0JCSAgICByZXN1bHQgICAgIAkiSU91dHB1dCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVQYXJ0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QUY4MDI2RCIKLQkJICAgIHJlc3VsdCAgICAgCSJJUGFydCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVQb3J0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QjA4MDFEQSIKLQkJICAgIHJlc3VsdCAgICAgCSJJUG9ydCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJjcmVhdGVQb3J0VHlwZSIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEIxNTAzOUIiCi0JCSAgICByZXN1bHQgICAgIAkiSVBvcnRUeXBlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImNyZWF0ZVNlcnZpY2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThCMzIwMTNBIgotCQkgICAgcmVzdWx0ICAgICAJIklTZXJ2aWNlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEJpbmRpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThCNDIwMDc1IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmciCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0QmluZGluZ3MiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThCOTIwMzQxIgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0SW1wb3J0cyIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg5OEJDRDAwNjAiCi0JCSAgICByZXN1bHQgICAgIAkiSU1hcCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRJbXBvcnRzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QkU3MDE0NCIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lc3BhY2VVUkkiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIklMaXN0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldE1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThDMTcwMTA3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSU1lc3NhZ2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0TWVzc2FnZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThDM0UwMDFEIgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0TmFtZXNwYWNlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4QzYyMDE0QiIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJwcmVmaXgiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIlN0cmluZyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXROYW1lc3BhY2VzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4Qzc0MDExNSIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWFwIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4Q0JFMDA3MSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpKQotCQkgICAgcmVzdWx0ICAgICAJIklQb3J0VHlwZSIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRQb3J0VHlwZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OThDREEwMUM2IgotCQkgICAgcmVzdWx0ICAgICAJIklNYXAiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0UHJlZml4IgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4Q0ZEMDAxNyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lc3BhY2VVUkkiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIlN0cmluZyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRTZXJ2aWNlIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4RDIzMDBBOCIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpKQotCQkgICAgcmVzdWx0ICAgICAJIklTZXJ2aWNlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldFNlcnZpY2VzIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk4RDNCMDNDRSIKLQkJICAgIHJlc3VsdCAgICAgCSJJTWFwIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gImdldEV4dGVuc2lvblJlZ2lzdHJ5IgotCQkgICAgcXVpZCAgICAgICAJIjNCODlENUI4MDEyQiIKLQkJICAgIHJlc3VsdCAgICAgCSJJRXh0ZW5zaW9uUmVnaXN0cnkiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAic2V0RXh0ZW5zaW9uUmVnaXN0cnkiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OUQ1RDcwM0JCIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImV4dGVuc2lvblJlZ2lzdHJ5IgotCQkJICAgIHR5cGUgICAgICAgCSJJRXh0ZW5zaW9uUmVnaXN0cnkiKSkKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXREb2N1bWVudEJhc2VVUkkiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OUQ1RkUwMjA4IgotCQkgICAgcmVzdWx0ICAgICAJIlN0cmluZyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXREb2N1bWVudEJhc2VVUkkiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OUQ2MTgwMzI4IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgImRvY3VtZW50QmFzZSIKLQkJCSAgICB0eXBlICAgICAgIAkiU3RyaW5nIikpCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiY3JlYXRlVHlwZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwNTYwMDgwIgotCQkgICAgcmVzdWx0ICAgICAJIklUeXBlcyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJyZW1vdmVTZXJ2aWNlIgotCQkgICAgcXVpZCAgICAgICAJIjNDQUREMDdFMDA0QyIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lIgotCQkJICAgIHR5cGUgICAgICAgCSJRTmFtZSIpKQotCQkgICAgcmVzdWx0ICAgICAJIklTZXJ2aWNlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInJlbW92ZUJpbmRpbmciCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwQkEwMzU1IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSUJpbmRpbmciCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAicmVtb3ZlUG9ydFR5cGUiCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwRDgwMjlBIgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSVBvcnRUeXBlIgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkKLQkJKG9iamVjdCBPcGVyYXRpb24gInJlbW92ZU1lc3NhZ2UiCi0JCSAgICBxdWlkICAgICAgIAkiM0NBREQwRkEwMzA3IgotCQkgICAgcGFyYW1ldGVycyAJKGxpc3QgUGFyYW1ldGVycwotCQkJKG9iamVjdCBQYXJhbWV0ZXIgIm5hbWUiCi0JCQkgICAgdHlwZSAgICAgICAJIlFOYW1lIikpCi0JCSAgICByZXN1bHQgICAgIAkiSU1lc3NhZ2UiCi0JCSAgICBjb25jdXJyZW5jeSAJIlNlcXVlbnRpYWwiCi0JCSAgICBvcEV4cG9ydENvbnRyb2wgCSJQdWJsaWMiCi0JCSAgICB1aWQgICAgICAgIAkwKQotCQkob2JqZWN0IE9wZXJhdGlvbiAiZ2V0VHlwZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjcwNkYwMzFCIgotCQkgICAgcmVzdWx0ICAgICAJIklUeXBlcyIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJzZXRUeXBlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQzg2NzA5NTAwRUUiCi0JCSAgICBwYXJhbWV0ZXJzIAkobGlzdCBQYXJhbWV0ZXJzCi0JCQkob2JqZWN0IFBhcmFtZXRlciAidHlwZXMiCi0JCQkgICAgdHlwZSAgICAgICAJIklUeXBlcyIpKQotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuRGVmaW5pdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QjFFNzAyQTEiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklJbXBvcnQiCi0JICAgIHF1aWQgICAgICAgCSIzQjg0QjIwMjAxMTkiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGphdmF4LndzZGwuSW1wb3J0IG5vbi1NT0YgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5JbXBvcnQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEIyMEMwMkVBIgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJJTGlzdCIKLQkgICAgcXVpZCAgICAgICAJIjNCODVDMEEyMDNDNSIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLnV0aWwuTGlzdCBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZhLnV0aWwuTGlzdCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg1QzBBRjAyOTciCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklNYXAiCi0JICAgIHF1aWQgICAgICAgCSIzQjg5NkIwMzAwRDQiCi0JICAgIGRvY3VtZW50YXRpb24gCSJUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG5vbi1NT0YgamF2YS51dGlsLk1hcCBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZhLnV0aWwuTWFwIgotCQkgICAgcXVpZCAgICAgICAJIjNCODk2QjExMDJCNSIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSVVSTCIKLQkgICAgcXVpZCAgICAgICAJIjNCODlENTYzMDI3NCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLm5ldC5VUkwgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YS5uZXQuVVJMIgotCQkgICAgcXVpZCAgICAgICAJIjNCODlENTZFMDNFMiIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiSUV4dGVuc2lvblJlZ2lzdHJ5IgotCSAgICBxdWlkICAgICAgIAkiM0I4OUQ1OTMwMkE1IgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBub24tTU9GIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeSBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiSW50ZXJmYWNlIgotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4OUQ1OUYwMkU4IgotCQkgICAgc3RlcmVvdHlwZSAJImphdmFjbGFzcyIpKSkKLQkob2JqZWN0IENsYXNzICJUeXBlcyIKLQkgICAgcXVpZCAgICAgICAJIjNCOEJFOUE2MDNBOCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgdHlwZXMgZWxlbWVudC4gVGhlIHR5cGVzIGVsZW1lbnQgZW5jbG9zZXMgZGF0YSB0eXBlIGRlZmluaXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGZvciB0aGUgZXhjaGFuZ2VkIG1lc3NhZ2VzLiIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNCOEJFQjAxMDMxMSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpCi0JCShvYmplY3QgSW5oZXJpdGFuY2VfUmVsYXRpb25zaGlwCi0JCSAgICBxdWlkICAgICAgIAkiM0NBRENEM0IwMzgwIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SVR5cGVzIgotCQkgICAgcXVpZHUgICAgICAJIjNDQURDQkIyMDA1MCIpKQotCSAgICBvcGVyYXRpb25zIAkobGlzdCBPcGVyYXRpb25zCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRTY2hlbWFzIgotCQkgICAgcXVpZCAgICAgICAJIjNDQURDRjM4MDNFNiIKLQkJICAgIHJlc3VsdCAgICAgCSJJTGlzdCIKLQkJICAgIGNvbmN1cnJlbmN5IAkiU2VxdWVudGlhbCIKLQkJICAgIG9wRXhwb3J0Q29udHJvbCAJIlB1YmxpYyIKLQkJICAgIHVpZCAgICAgICAgCTApCi0JCShvYmplY3QgT3BlcmF0aW9uICJnZXRTY2hlbWFzIgotCQkgICAgcXVpZCAgICAgICAJIjNDQURDRjdFMDMwMSIKLQkJICAgIHBhcmFtZXRlcnMgCShsaXN0IFBhcmFtZXRlcnMKLQkJCShvYmplY3QgUGFyYW1ldGVyICJuYW1lc3BhY2VVUkkiCi0JCQkgICAgdHlwZSAgICAgICAJIlN0cmluZyIpKQotCQkgICAgcmVzdWx0ICAgICAJIklMaXN0IgotCQkgICAgY29uY3VycmVuY3kgCSJTZXF1ZW50aWFsIgotCQkgICAgb3BFeHBvcnRDb250cm9sIAkiUHVibGljIgotCQkgICAgdWlkICAgICAgICAJMCkpKQotCShvYmplY3QgQ2xhc3MgIklJdGVyYXRvciIKLQkgICAgcXVpZCAgICAgICAJIjNDNDY4N0RBMDE2NyIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgbm9uLU1PRiBqYXZhLnV0aWwuSXRlcmF0b3IgaW50ZXJmYWNlLiIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YS51dGlsLkl0ZXJhdG9yIgotCQkgICAgcXVpZCAgICAgICAJIjNDNDY4ODA4MDBCOSIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiV1NETEV4Y2VwdGlvbiIKLQkgICAgcXVpZCAgICAgICAJIjNDNDY4OTY1MDMxMyIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5FeGNlcHRpb24gY2xhc3MuIgotCSAgICBzdGVyZW90eXBlIAkiZGF0YXR5cGUiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgImphdmF4LndzZGwuV1NETEV4Y2VwdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQzQ2ODk3NDAzMTUiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIklUeXBlcyIKLQkgICAgcXVpZCAgICAgICAJIjNDQURDQkIyMDA1MCIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgamF2YXgud3NkbC5UeXBlcyBub24tTU9GIGludGVyZmFjZSIKLQkgICAgc3RlcmVvdHlwZSAJIkludGVyZmFjZSIKLQkgICAgY2xhc3NfYXR0cmlidXRlcyAJKGxpc3QgY2xhc3NfYXR0cmlidXRlX2xpc3QKLQkJKG9iamVjdCBDbGFzc0F0dHJpYnV0ZSAiamF2YXgud3NkbC5UeXBlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0FEQ0JGMTAxNzMiCi0JCSAgICBzdGVyZW90eXBlIAkiamF2YWNsYXNzIikpKQotCShvYmplY3QgQ2xhc3MgIlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNDQjI0QUMwMDJBRSIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNDQjI0QUVDMDFDQiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpKSkKLQkob2JqZWN0IENsYXNzICJYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNDQzM2MEQ3MDM5QyIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNDQzM2MjdGMDBCNyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2liaWxpdHlFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIpKSkKLQkob2JqZWN0IENsYXNzICJET01Eb2N1bWVudCIKLQkgICAgcXVpZCAgICAgICAJIjNDRDE1MDJDMDIzQiIKLQkgICAgZG9jdW1lbnRhdGlvbiAJIlRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgb3JnLnczYy5kb20uRG9jdW1lbnQgbm9uLU1PRiBpbnRlcmZhY2UuIgotCSAgICBzdGVyZW90eXBlIAkiZGF0YXR5cGUiCi0JICAgIGNsYXNzX2F0dHJpYnV0ZXMgCShsaXN0IGNsYXNzX2F0dHJpYnV0ZV9saXN0Ci0JCShvYmplY3QgQ2xhc3NBdHRyaWJ1dGUgIm9yZy53M2MuZG9tLkRvY3VtZW50IgotCQkgICAgcXVpZCAgICAgICAJIjNDRDE1MDYwMDE4MiIKLQkJICAgIHN0ZXJlb3R5cGUgCSJqYXZhY2xhc3MiKSkpCi0JKG9iamVjdCBDbGFzcyAiTWVzc2FnZVJlZmVyZW5jZSIKLQkgICAgcXVpZCAgICAgICAJIjNGNjc3MURCMDJEQyIKLQkgICAgc3VwZXJjbGFzc2VzIAkobGlzdCBpbmhlcml0YW5jZV9yZWxhdGlvbnNoaXBfbGlzdAotCQkob2JqZWN0IEluaGVyaXRhbmNlX1JlbGF0aW9uc2hpcAotCQkgICAgcXVpZCAgICAgICAJIjNGNzYyQTZBMDMwOCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIpKQotCSAgICBjbGFzc19hdHRyaWJ1dGVzIAkobGlzdCBjbGFzc19hdHRyaWJ1dGVfbGlzdAotCQkob2JqZWN0IENsYXNzQXR0cmlidXRlICJuYW1lIgotCQkgICAgcXVpZCAgICAgICAJIjNGNjc4MEEwMDFBQiIKLQkJICAgIHR5cGUgICAgICAgCSJTdHJpbmciCi0JCSAgICBleHBvcnRDb250cm9sIAkiUHJvdGVjdGVkIikpCi0JICAgIGxhbmd1YWdlICAgCSJKYXZhIgotCSAgICBhYnN0cmFjdCAgIAlUUlVFKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDAiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1QzgyNDAxOEMiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgInBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVDODI3MDFDMyIKLQkJICAgIGxhYmVsICAgICAgCSJwb3J0VHlwZSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBvcnRUeXBlIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDN0YwMDFBNSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiZU9wZXJhdGlvbnMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUM4MjcwMUNEIgotCQkgICAgbGFiZWwgICAgICAJImVPcGVyYXRpb25zIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3BlcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDODBEMDNDRSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQxIgotCSAgICBxdWlkICAgICAgIAkiM0FENUNFQkUwMEUyIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQyIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVDRUJGMDA1NyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVQYXJ0cyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1Q0VCRjAwNjEiCi0JCSAgICBsYWJlbCAgICAgIAkiZVBhcnRzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMyIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVEMzUyMDEwRiIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZVBvcnRUeXBlIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVEMzU0MDE3NiIKLQkJICAgIGxhYmVsICAgICAgCSJlUG9ydFR5cGUiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0VHlwZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDM1NDAxODAiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMjg2MDI2MSIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ1IgotCSAgICBxdWlkICAgICAgIAkiM0FENUQzRTEwMTc5IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ2IgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVEM0UyMDIyNSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmciCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQyODYwMjYxIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVCaW5kaW5nT3BlcmF0aW9ucyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDNFMjAyMzkiCi0JCSAgICBsYWJlbCAgICAgIAkiZUJpbmRpbmdPcGVyYXRpb25zIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNyIKLQkgICAgcXVpZCAgICAgICAJIjNBRDVENDI1MDM4QSIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZU9wZXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDQyNjAyRjUiCi0JCSAgICBsYWJlbCAgICAgIAkiZU9wZXJhdGlvbiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok9wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgwRDAzQ0UiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkOCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDQyNjAyRkYiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nT3BlcmF0aW9uIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEM0NCMDE0NSIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ5IgotCSAgICBxdWlkICAgICAgIAkiM0FENUQ5NDAwMzkzIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlUG9ydHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUQ5NDEwMzFDIgotCQkgICAgbGFiZWwgICAgICAJImVQb3J0cyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBvcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5MTcwMjg2IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLm4iKQotCQkgICAgQ29uc3RyYWludHMgCSJvcmRlcmVkIgotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQxMCIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDk0MTAzMUQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpTZXJ2aWNlIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOEYwMDJGOCIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDExIgotCSAgICBxdWlkICAgICAgIAkiM0FENUQ5QjgwMTFGIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlQmluZGluZyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDlCOTAyNEQiCi0JCSAgICBsYWJlbCAgICAgIAkiZUJpbmRpbmciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMjg2MDI2MSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQxMiIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RDlCOTAyNjEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOTE3MDI4NiIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQxMyIKLQkgICAgcXVpZCAgICAgICAJIjNDODY0REZGMDJFQyIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUltcG9ydHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjRERkYwMkVEIgotCQkgICAgbGFiZWwgICAgICAJImVJbXBvcnRzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW1wb3J0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNEY5MDNERSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMTQiCi0JCSAgICBxdWlkICAgICAgIAkiM0M4NjRERkYwMkVFIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RGVmaW5pdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQxNSIKLQkgICAgcXVpZCAgICAgICAJIjNCOEJFQTI3MDI5RiIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMTYiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4QkVBMjkwMzU2IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RGVmaW5pdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiZVR5cGVzIgotCQkgICAgcXVpZCAgICAgICAJIjNCOEJFQTI5MDM2QSIKLQkJICAgIGxhYmVsICAgICAgCSJlVHlwZXMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpUeXBlcyIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRTlBNjAzQTgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMTciCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RTYwMzAxRTIiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDE4IgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNjA0MDBCNyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVNZXNzYWdlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTYwNDAwQzEiCi0JCSAgICBsYWJlbCAgICAgIAkiZU1lc3NhZ2VzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Qzk1OTAwNzgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMTkiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3MTAxMDQiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDIwIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNjcyMDM0QSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVQb3J0VHlwZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUU2NzIwMzU0IgotCQkgICAgbGFiZWwgICAgICAJImVQb3J0VHlwZXMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0VHlwZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMjEiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3NzAwOTUiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDIyIgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNjc4MDM3MSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVCaW5kaW5ncyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3ODAzN0IiCi0JCSAgICBsYWJlbCAgICAgIAkiZUJpbmRpbmdzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZyIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDI4NjAyNjEiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMjMiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3QjAzMTEiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDI0IgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVFNjdEMDA3RiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImVTZXJ2aWNlcyIKLQkJICAgIHF1aWQgICAgICAgCSIzQUQ1RTY3RDAwODkiCi0JCSAgICBsYWJlbCAgICAgIAkiZVNlcnZpY2VzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6U2VydmljZSIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDhGMDAyRjgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMjUiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RkQxMzAwNzkiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FENUZEMTQwMTlEIgotCQkgICAgbGFiZWwgICAgICAJImVFeHRlbnNpYmlsaXR5RWxlbWVudHMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDI2IgotCQkgICAgcXVpZCAgICAgICAJIjNBRDVGRDE0MDE5RSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX2FnZ3JlZ2F0ZSAJVFJVRSkpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDI3IgotCSAgICBxdWlkICAgICAgIAkiM0FERjJFNjQwMUY1IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlQmluZGluZ0lucHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNBREYyRTY1MDI1MSIKLQkJICAgIGxhYmVsICAgICAgCSJlQmluZGluZ0lucHV0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ0lucHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTgyMDJENCIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi4xIikKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMjgiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjJFNjUwMjUyIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQyOSIKLQkgICAgcXVpZCAgICAgICAJIjNBREYyRUIzMDE2MyIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUJpbmRpbmdPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjJFQjQwMTNDIgotCQkgICAgbGFiZWwgICAgICAJImVCaW5kaW5nT3V0cHV0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ091dHB1dCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE4RjAyOEMiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDMwIgotCQkgICAgcXVpZCAgICAgICAJIjNBREYyRUI0MDEzRCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQzQ0IwMTQ1IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMzEiCi0JICAgIHF1aWQgICAgICAgCSIzQURGMkY5NDAyNEQiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVJbnB1dCIKLQkJICAgIHF1aWQgICAgICAgCSIzQURGMkY5NTAxOTAiCi0JCSAgICBsYWJlbCAgICAgIAkiZUlucHV0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW5wdXQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4OUYwMDU5IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQzMiIKLQkJICAgIHF1aWQgICAgICAgCSIzQURGMkY5NTAxOUEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMzMiCi0JICAgIHF1aWQgICAgICAgCSIzQURGMkZCODAyRjkiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVPdXRwdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjJGQjkwMjBBIgotCQkgICAgbGFiZWwgICAgICAJImVPdXRwdXQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpPdXRwdXQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4QjYwMjMyIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgQ29udGFpbm1lbnQgCSJCeSBWYWx1ZSIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQzNCIKLQkJICAgIHF1aWQgICAgICAgCSIzQURGMkZCOTAyMEIiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEuLjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkMzUiCi0JICAgIHF1aWQgICAgICAgCSIzQURGMzMxNjAxQTQiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVGYXVsdHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjMzMTgwMzg3IgotCQkgICAgbGFiZWwgICAgICAJImVGYXVsdHMiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCRTAxMDgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb25zdHJhaW50cyAJIm9yZGVyZWQiCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDM2IgotCQkgICAgcXVpZCAgICAgICAJIjNBREYzMzE4MDM4OCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok9wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgwRDAzQ0UiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQzNyIKLQkgICAgcXVpZCAgICAgICAJIjNBREYzNDAwMDNFNSIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUJpbmRpbmdGYXVsdHMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjM0MDEwM0FBIgotCQkgICAgbGFiZWwgICAgICAJImVCaW5kaW5nRmF1bHRzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ0ZhdWx0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTlFMDNBNiIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkMzgiCi0JCSAgICBxdWlkICAgICAgIAkiM0FERjM0MDEwM0FCIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ09wZXJhdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQzOSIKLQkgICAgcXVpZCAgICAgICAJIjNBRTA5MUY0MDJGMyIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZUZhdWx0IgotCQkgICAgcXVpZCAgICAgICAJIjNBRTA5MUY4MDFGRSIKLQkJICAgIGxhYmVsICAgICAgCSJlRmF1bHQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpGYXVsdCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCRTAxMDgiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNDAiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFMDkxRjgwMUZGIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ0ZhdWx0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTlFMDNBNiIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ0MSIKLQkgICAgcXVpZCAgICAgICAJIjNBRUEzRDU1MDAyRCIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNDIiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNENTYwMzI4IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RGVmaW5pdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiZU5hbWVzcGFjZXMiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNENTYwMzMyIgotCQkgICAgbGFiZWwgICAgICAJImVOYW1lc3BhY2VzIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6TmFtZXNwYWNlIgotCQkgICAgcXVpZHUgICAgICAJIjNBRUEzQ0QzMDAzMCIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIENvbnRhaW5tZW50IAkiQnkgVmFsdWUiCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ0MyIKLQkgICAgcXVpZCAgICAgICAJIjNBRUEzRTNBMDAyRCIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZURlZmluaXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNFM0MwMUU4IgotCQkgICAgbGFiZWwgICAgICAJImVEZWZpbml0aW9uIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6RGVmaW5pdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNDQiCi0JCSAgICBxdWlkICAgICAgIAkiM0FFQTNFM0MwMUYyIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW1wb3J0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNEY5MDNERSIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ0NSIKLQkgICAgcXVpZCAgICAgICAJIjNBRUE0MTJGMDAzNSIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAiZVBhcmFtZXRlck9yZGVyaW5nIgotCQkgICAgcXVpZCAgICAgICAJIjNBRUE0MTMxMDI1NSIKLQkJICAgIGxhYmVsICAgICAgCSJlUGFyYW1ldGVyT3JkZXJpbmciCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIwLi5uIikKLQkJICAgIENvbnN0cmFpbnRzIAkib3JkZXJlZCIKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ0NiIKLQkJICAgIHF1aWQgICAgICAgCSIzQUVBNDEzMTAyNUYiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDQ3IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFEMjQwMEJEIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlSW5wdXQiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4NEFEMjUwMDgzIgotCQkgICAgbGFiZWwgICAgICAJImVJbnB1dCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OklucHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3ODlGMDA1OSIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ0OCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUQyNTAwODQiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nSW5wdXQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDhBODIwMkQ0IikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDQ5IgotCSAgICBxdWlkICAgICAgIAkiM0I4NEFENzkwMEYyIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlT3V0cHV0IgotCQkgICAgcXVpZCAgICAgICAJIjNCODRBRDdBMDE0RCIKLQkJICAgIGxhYmVsICAgICAgCSJlT3V0cHV0IgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3V0cHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3OEI2MDIzMiIKLQkJICAgIGNsaWVudF9jYXJkaW5hbGl0eSAJKHZhbHVlIGNhcmRpbmFsaXR5ICIxLi4xIikKLQkJICAgIGlzX25hdmlnYWJsZSAJVFJVRSkKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ1MCIKLQkJICAgIHF1aWQgICAgICAgCSIzQjg0QUQ3QTAxNEUiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nT3V0cHV0IgotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QThGMDI4QyIpKSkKLQkob2JqZWN0IEFzc29jaWF0aW9uICIkVU5OQU1FRCQ1MSIKLQkgICAgcXVpZCAgICAgICAJIjNCOEIxQkU5MDBDNCIKLQkgICAgcm9sZXMgICAgICAJKGxpc3Qgcm9sZV9saXN0Ci0JCShvYmplY3QgUm9sZSAidHlwZURlZmluaXRpb24iCi0JCSAgICBxdWlkICAgICAgIAkiM0I4QjFCRTkwMzI3IgotCQkgICAgbGFiZWwgICAgICAJInR5cGVEZWZpbml0aW9uIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6eHNkOjpYU0RUeXBlRGVmaW5pdGlvbiIKLQkJICAgIHF1aWR1ICAgICAgCSIzQjY2RUNEMzAyQTkiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBpc19uYXZpZ2FibGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAiJFVOTkFNRUQkNTIiCi0JCSAgICBxdWlkICAgICAgIAkiM0I4QjFCRTkwMzMxIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6d3NkbDo6UGFydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNTMiCi0JICAgIHF1aWQgICAgICAgCSIzQjhCMUMxMjAzQjIiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVsZW1lbnREZWNsYXJhdGlvbiIKLQkJICAgIHF1aWQgICAgICAgCSIzQjhCMUMxNDAwMUMiCi0JCSAgICBsYWJlbCAgICAgIAkiZWxlbWVudERlY2xhcmF0aW9uIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6eHNkOjpYU0RFbGVtZW50RGVjbGFyYXRpb24iCi0JCSAgICBxdWlkdSAgICAgIAkiM0I2NkVENTgwMjE0IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDU0IgotCQkgICAgcXVpZCAgICAgICAJIjNCOEIxQzE0MDAyNiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDU1IgotCSAgICBxdWlkICAgICAgIAkiM0I4QjFEQ0MwMkU1IgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICJlU2NoZW1hIgotCQkgICAgcXVpZCAgICAgICAJIjNCOEIxRENFMDI3MCIKLQkJICAgIGxhYmVsICAgICAgCSJlU2NoZW1hIgotCQkgICAgc3VwcGxpZXIgICAJIkxvZ2ljYWwgVmlldzo6eHNkOjpYU0RTY2hlbWEiCi0JCSAgICBxdWlkdSAgICAgIAkiMzc0QjE4MjUwMEJCIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDU2IgotCQkgICAgcXVpZCAgICAgICAJIjNCOEIxRENFMDI3QSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OkltcG9ydCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTRGOTAzREUiKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNTciCi0JICAgIHF1aWQgICAgICAgCSIzQzQ2ODI5MzAzRTUiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVNZXNzYWdlIgotCQkgICAgcXVpZCAgICAgICAJIjNDNDY4Mjk2MDEwRSIKLQkJICAgIGxhYmVsICAgICAgCSJlTWVzc2FnZSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjAuLjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDU4IgotCQkgICAgcXVpZCAgICAgICAJIjNDNDY4Mjk2MDExOCIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDU5IgotCSAgICBxdWlkICAgICAgIAkiM0NDMzYxNDUwMEYyIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ2MCIKLQkJICAgIHF1aWQgICAgICAgCSIzQ0MzNjE0NjAyM0QiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0MzNjBENzAzOUMiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMS4uMSIpCi0JCSAgICBpc19hZ2dyZWdhdGUgCVRSVUUpCi0JCShvYmplY3QgUm9sZSAic2NoZW1hIgotCQkgICAgcXVpZCAgICAgICAJIjNDQzM2MTQ2MDIzRSIKLQkJICAgIGxhYmVsICAgICAgCSJzY2hlbWEiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp4c2Q6OlhTRFNjaGVtYSIKLQkJICAgIHF1aWR1ICAgICAgCSIzNzRCMTgyNTAwQkIiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4uMSIpCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpCi0JKG9iamVjdCBBc3NvY2lhdGlvbiAiJFVOTkFNRUQkNjEiCi0JICAgIHF1aWQgICAgICAgCSIzRjc0RTc4NDAxQjEiCi0JICAgIHJvbGVzICAgICAgCShsaXN0IHJvbGVfbGlzdAotCQkob2JqZWN0IFJvbGUgImVNZXNzYWdlIgotCQkgICAgcXVpZCAgICAgICAJIjNGNzRFNzg2MDAwRiIKLQkJICAgIGxhYmVsICAgICAgCSJlTWVzc2FnZSIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEiKQotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgIiRVTk5BTUVEJDYyIgotCQkgICAgcXVpZCAgICAgICAJIjNGNzRFNzg2MDAyMyIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2VSZWZlcmVuY2UiCi0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcxREIwMkRDIikpKQotCShvYmplY3QgQXNzb2NpYXRpb24gIiRVTk5BTUVEJDYzIgotCSAgICBxdWlkICAgICAgIAkiM0Y3ODk2QTIwMjZFIgotCSAgICByb2xlcyAgICAgIAkobGlzdCByb2xlX2xpc3QKLQkJKG9iamVjdCBSb2xlICIkVU5OQU1FRCQ2NCIKLQkJICAgIHF1aWQgICAgICAgCSIzRjc4OTZBNzAxMkIiCi0JCSAgICBzdXBwbGllciAgIAkiTG9naWNhbCBWaWV3Ojp3c2RsOjpVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0JCSAgICBxdWlkdSAgICAgIAkiM0NCMjRBQzAwMkFFIgotCQkgICAgY2xpZW50X2NhcmRpbmFsaXR5IAkodmFsdWUgY2FyZGluYWxpdHkgIjEiKQotCQkgICAgaXNfYWdncmVnYXRlIAlUUlVFKQotCQkob2JqZWN0IFJvbGUgImNoaWxkcmVuIgotCQkgICAgcXVpZCAgICAgICAJIjNGNzg5NkE3MDEyQyIKLQkJICAgIGxhYmVsICAgICAgCSJjaGlsZHJlbiIKLQkJICAgIHN1cHBsaWVyICAgCSJMb2dpY2FsIFZpZXc6OndzZGw6OlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0IyNEFDMDAyQUUiCi0JCSAgICBjbGllbnRfY2FyZGluYWxpdHkgCSh2YWx1ZSBjYXJkaW5hbGl0eSAiMC4ubiIpCi0JCSAgICBDb250YWlubWVudCAJIkJ5IFZhbHVlIgotCQkgICAgaXNfbmF2aWdhYmxlIAlUUlVFKSkpKQotICAgIGxvZ2ljYWxfcHJlc2VudGF0aW9ucyAJKGxpc3QgdW5pdF9yZWZlcmVuY2VfbGlzdAotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjcgU2VydmljZXMiCi0JICAgIHF1aWQgICAgICAgCSIzOUFEM0VGNjAxMjciCi0JICAgIHRpdGxlICAgICAgCSIyLjcgU2VydmljZXMiCi0JICAgIHpvb20gICAgICAgCTkwCi0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nIiBAMQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTQyNCwgODAwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMQotCQkJbG9jYXRpb24gICAJKDExNzMsIDY2MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1MDIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQmluZGluZyIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxCi0JCQlsb2NhdGlvbiAgIAkoMTE3MywgNjEwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1MDIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBQkM2MDIxOSIKLQkJICAgIHdpZHRoICAgICAgCTUyMAotCQkgICAgaGVpZ2h0ICAgICAJNDA0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklQb3J0IiBAMgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoODE2LCA1MjgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyCi0JCQlsb2NhdGlvbiAgIAkoNjg2LCA0ODEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjYwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSVBvcnQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMgotCQkJbG9jYXRpb24gICAJKDY4NiwgNDMxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNjAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBQjgwMDMyNiIKLQkJICAgIHdpZHRoICAgICAgCTI3OAotCQkgICAgaGVpZ2h0ICAgICAJMjE4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklTZXJ2aWNlIiBAMwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjQwLCAxNjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzCi0JCQlsb2NhdGlvbiAgIAkoMTI2LCA5MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyMjgKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJU2VydmljZSIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzCi0JCQlsb2NhdGlvbiAgIAkoMTI2LCA0MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjI4Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUI0OTAyODciCi0JCSAgICB3aWR0aCAgICAgIAkyNDYKLQkJICAgIGhlaWdodCAgICAgCTI2NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpTZXJ2aWNlIiBANAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyNDAsIDUyOCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQKLQkJCWxvY2F0aW9uICAgCSg0NCwgNDMzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM5MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlNlcnZpY2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOEYwMDJGOCIKLQkJICAgIHdpZHRoICAgICAgCTQxMAotCQkgICAgaGVpZ2h0ICAgICAJMjE0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA1Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NTk1NEUwMUI0IgotCQkgICAgY2xpZW50ICAgICAJQDQKLQkJICAgIHN1cHBsaWVyICAgCUAzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI0MCwgNDIxKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDI0MCwgMjkyKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIiBANgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNDQwLCAxMjY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANgotCQkJbG9jYXRpb24gICAJKDEyNDQsIDExNjkpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMzkyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiQmluZGluZyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQyODYwMjYxIgotCQkgICAgd2lkdGggICAgICAJNDEwCi0JCSAgICBoZWlnaHQgICAgIAkyMTQKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDcKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg1OTU0MTAxMjkiCi0JCSAgICBjbGllbnQgICAgIAlANgotCQkgICAgc3VwcGxpZXIgICAJQDEKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQzMCwgMTE1NykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDMwLCAxMDAyKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0IiBAOAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg4MTYsIDkxMikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDgKLQkJCWxvY2F0aW9uICAgCSg2NzUsIDg0MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyODIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJQb3J0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDkxNzAyODYiCi0JCSAgICB3aWR0aCAgICAgIAkzMDAKLQkJICAgIGhlaWdodCAgICAgCTE2OAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAOQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODU5NTQ1MDJDOSIKLQkJICAgIGNsaWVudCAgICAgCUA4Ci0JCSAgICBzdXBwbGllciAgIAlAMgotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg4MDksIDgyOCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4MDksIDYzNykpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ5IiBAMTAKLQkJICAgIGxvY2F0aW9uICAgCSgzMjEsIDkxNikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDk0MDAzOTMiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVQb3J0cyIgQDExCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAxMAotCQkJICAgIGxvY2F0aW9uICAgCSgtMTQzLCA2NDQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTIKLQkJCQlQYXJlbnRfVmlldyAJQDExCi0JCQkJbG9jYXRpb24gICAJKDM5NywgOTQ1KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE5MgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VQb3J0cyIKLQkJCQlwY3REaXN0ICAgIAkwLjIxODk3OAotCQkJCWhlaWdodCAgICAgCTI5Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5NDEwMzFDIgotCQkJICAgIGNsaWVudCAgICAgCUAxMAotCQkJICAgIHN1cHBsaWVyICAgCUA4Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzIxLCA5MTYpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDY2NiwgOTE2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEzCi0JCQkJUGFyZW50X1ZpZXcgCUAxMQotCQkJCWxvY2F0aW9uICAgCSg1MzAsIDg4MCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC42MDgwMDAKLQkJCQloZWlnaHQgICAgIAkzNwotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE0Ci0JCQkJUGFyZW50X1ZpZXcgCUAxMQotCQkJCWxvY2F0aW9uICAgCSg0MzMsIDk5MCkKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNDYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjMyODQ2NwotCQkJCWhlaWdodCAgICAgCTc0Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTAiIEAxNQotCQkJICAgIFBhcmVudF9WaWV3IAlAMTAKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTE0MywgNjQ0KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE2Ci0JCQkJUGFyZW50X1ZpZXcgCUAxNQotCQkJCWxvY2F0aW9uICAgCSgyMTYsIDcwNCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5NDEwMzFEIgotCQkJICAgIGNsaWVudCAgICAgCUAxMAotCQkJICAgIHN1cHBsaWVyICAgCUA0Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDMyMSwgOTE2KQotCQkJCSgyNTcsIDkxNikKLQkJCQkoMjU3LCA2MzUpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDMyMSwgOTE2KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNTcsIDYzNSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNwotCQkJCVBhcmVudF9WaWV3IAlAMTUKLQkJCQlsb2NhdGlvbiAgIAkoMzAxLCA3NjApCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC42MzcwOTcKLQkJCQloZWlnaHQgICAgIAk0NAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMTEiIEAxOAotCQkgICAgbG9jYXRpb24gICAJKDg4NiwgMTI3MCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDlCODAxMUYiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVCaW5kaW5nIiBAMTkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE4Ci0JCQkgICAgbG9jYXRpb24gICAJKDM4LCA0MjIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjAKLQkJCQlQYXJlbnRfVmlldyAJQDE5Ci0JCQkJbG9jYXRpb24gICAJKDExMTIsIDEyMzUpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTgwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUJpbmRpbmciCi0JCQkJcGN0RGlzdCAgICAJMC42NDg1NzEKLQkJCQloZWlnaHQgICAgIAkzNgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOUI5MDI0RCIKLQkJCSAgICBjbGllbnQgICAgIAlAMTgKLQkJCSAgICBzdXBwbGllciAgIAlANgotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDg4NiwgMTI3MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTIzNSwgMTI3MCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMQotCQkJCVBhcmVudF9WaWV3IAlAMTkKLQkJCQlsb2NhdGlvbiAgIAkoMTE3MCwgMTMxMykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjgxNDI4NgotCQkJCWhlaWdodCAgICAgCTQzCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTIiIEAyMgotCQkJICAgIFBhcmVudF9WaWV3IAlAMTgKLQkJCSAgICBsb2NhdGlvbiAgIAkoMzgsIDQyMikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMwotCQkJCVBhcmVudF9WaWV3IAlAMjIKLQkJCQlsb2NhdGlvbiAgIAkoODUyLCAxMTA2KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNTYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjY4Nzk0MwotCQkJCWhlaWdodCAgICAgCTQwCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ5QjkwMjYxIgotCQkJICAgIGNsaWVudCAgICAgCUAxOAotCQkJICAgIHN1cHBsaWVyICAgCUA4Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDg4NiwgMTI3MCkKLQkJCQkoODEyLCAxMjcwKQotCQkJCSg4MTIsIDk5NikpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoODg2LCAxMjcwKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4MTIsIDk5NikpKSkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjUgQmluZGluZ3MiCi0JICAgIHF1aWQgICAgICAgCSIzOUFENTEyNzAyNTIiCi0JICAgIHRpdGxlICAgICAgCSIyLjUgQmluZGluZ3MiCi0JICAgIHpvb20gICAgICAgCTg1Ci0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nIiBAMjQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDMwNCwgMjQwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjQKLQkJCWxvY2F0aW9uICAgCSg3MywgMTE0KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQ2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklCaW5kaW5nIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI0Ci0JCQlsb2NhdGlvbiAgIAkoNzMsIDY0KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0NjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBQkM2MDIxOSIKLQkJICAgIHdpZHRoICAgICAgCTQ4MAotCQkgICAgaGVpZ2h0ICAgICAJMzc2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklCaW5kaW5nT3BlcmF0aW9uIiBAMjUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDk3NiwgMzUyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjUKLQkJCWxvY2F0aW9uICAgCSg3ODAsIDEzMCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzOTIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJQmluZGluZ09wZXJhdGlvbiIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNQotCQkJbG9jYXRpb24gICAJKDc4MCwgODApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM5MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFEQzAwMDcyIgotCQkgICAgd2lkdGggICAgICAJNDEwCi0JCSAgICBoZWlnaHQgICAgIAk1NjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdJbnB1dCIgQDI2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxOTIsIDEzNjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNgotCQkJbG9jYXRpb24gICAJKDYyLCAxMzM0KQotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI2MAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklCaW5kaW5nSW5wdXQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjYKLQkJCWxvY2F0aW9uICAgCSg2MiwgMTI4NCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjYwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QURFQjAxMDAiCi0JCSAgICB3aWR0aCAgICAgIAkyNzgKLQkJICAgIGhlaWdodCAgICAgCTE3NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJQmluZGluZ091dHB1dCIgQDI3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMDgsIDE2NjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNwotCQkJbG9jYXRpb24gICAJKDYxLCAxNjM4KQotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI5NAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklCaW5kaW5nT3V0cHV0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI3Ci0JCQlsb2NhdGlvbiAgIAkoNjEsIDE1ODgpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI5NAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFFMjEwMTExIgotCQkgICAgd2lkdGggICAgICAJMzEyCi0JCSAgICBoZWlnaHQgICAgIAkxNzYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SUJpbmRpbmdGYXVsdCIgQDI4Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMDgsIDE5ODQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyOAotCQkJbG9jYXRpb24gICAJKDcyLCAxOTU4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI3MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklCaW5kaW5nRmF1bHQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjgKLQkJCWxvY2F0aW9uICAgCSg3MiwgMTkwOCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjcyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUU0RjAwQkQiCi0JCSAgICB3aWR0aCAgICAgIAkyOTAKLQkJICAgIGhlaWdodCAgICAgCTE3NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0VHlwZSIgQDI5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE5MDQsIDYyNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI5Ci0JCQlsb2NhdGlvbiAgIAkoMTY5NywgNTIyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQxNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBvcnRUeXBlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICB3aWR0aCAgICAgIAk0MzIKLQkJICAgIGhlaWdodCAgICAgCTIyOAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJbnB1dCIgQDMwCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE5MDQsIDEzNjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMAotCQkJbG9jYXRpb24gICAJKDE3NTYsIDEyODMpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjk2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSW5wdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3ODlGMDA1OSIKLQkJICAgIHdpZHRoICAgICAgCTMxNAotCQkgICAgaGVpZ2h0ICAgICAJMTc4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok91dHB1dCIgQDMxCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE5MDQsIDE2NjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMQotCQkJbG9jYXRpb24gICAJKDE3NTYsIDE1ODcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjk2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiT3V0cHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCNjAyMzIiCi0JCSAgICB3aWR0aCAgICAgIAkzMTQKLQkJICAgIGhlaWdodCAgICAgCTE3OAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nIiBAMzIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzA0LCA2ODgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMgotCQkJbG9jYXRpb24gICAJKDk3LCA1ODYpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDE0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiQmluZGluZyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQyODYwMjYxIgotCQkgICAgd2lkdGggICAgICAJNDMyCi0JCSAgICBoZWlnaHQgICAgIAkyMjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDMzCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NTk1NDEwMTI5IgotCQkgICAgY2xpZW50ICAgICAJQDMyCi0JCSAgICBzdXBwbGllciAgIAlAMjQKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjc5LCA1NzQpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjc5LCA0MjgpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMyIgQDM0Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTEwNCwgNzQyKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMzUyMDEwRiIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZVBvcnRUeXBlIiBAMzUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDM0Ci0JCQkgICAgbG9jYXRpb24gICAJKDY0MCwgNTk4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM2Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNQotCQkJCWxvY2F0aW9uICAgCSgxNTY1LCA3ODEpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjE2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVBvcnRUeXBlIgotCQkJCXBjdERpc3QgICAgCTAuNzg5MjkyCi0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDM1NDAxNzYiCi0JCQkgICAgY2xpZW50ICAgICAJQDM0Ci0JCQkgICAgc3VwcGxpZXIgICAJQDI5Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTEwNCwgNzQyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNjg4LCA3NDIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzcKLQkJCQlQYXJlbnRfVmlldyAJQDM1Ci0JCQkJbG9jYXRpb24gICAJKDE2MTMsIDcxNikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjg3MjE5MwotCQkJCWhlaWdodCAgICAgCTI3Ci0JCQkJb3JpZW50YXRpb24gCTApKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNCIgQDM4Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNAotCQkJICAgIGxvY2F0aW9uICAgCSg2NDAsIDU5OCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzOQotCQkJCVBhcmVudF9WaWV3IAlAMzgKLQkJCQlsb2NhdGlvbiAgIAkoODA2LCA2OTcpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTEwOAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuNTA5NDQ5Ci0JCQkJaGVpZ2h0ICAgICAJNDYKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDM1NDAxODAiCi0JCQkgICAgY2xpZW50ICAgICAJQDM0Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMyCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTEwNCwgNzQyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg1MjAsIDc0MikpKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iIEA0MAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxODg4LCAxMDI0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlANDAKLQkJCWxvY2F0aW9uICAgCSgxNjcyLCA4OTgpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDMyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiT3BlcmF0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgwRDAzQ0UiCi0JCSAgICB3aWR0aCAgICAgIAk0NTAKLQkJICAgIGhlaWdodCAgICAgCTI3NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpCaW5kaW5nSW5wdXQiIEA0MQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg2MjQsIDE0MDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA0MQotCQkJbG9jYXRpb24gICAJKDQ3NiwgMTI4MykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyOTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nSW5wdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTgyMDJENCIKLQkJICAgIHdpZHRoICAgICAgCTMxNAotCQkgICAgaGVpZ2h0ICAgICAJMjc0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNDciIEA0MgotCQkgICAgbG9jYXRpb24gICAJKDEyNjQsIDEzNTkpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFEMjQwMEJEIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlSW5wdXQiIEA0MwotCQkJICAgIFBhcmVudF9WaWV3IAlANDIKLQkJCSAgICBsb2NhdGlvbiAgIAkoOTYsIDI4NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA0NAotCQkJCVBhcmVudF9WaWV3IAlANDMKLQkJCQlsb2NhdGlvbiAgIAkoMTYzNywgMTMxNikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxMzIKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlSW5wdXQiCi0JCQkJcGN0RGlzdCAgICAJMC43NzUxNDgKLQkJCQloZWlnaHQgICAgIAk0NAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCODRBRDI1MDA4MyIKLQkJCSAgICBjbGllbnQgICAgIAlANDIKLQkJCSAgICBzdXBwbGllciAgIAlAMzAKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMjY0LCAxMzU5KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNzQ3LCAxMzU5KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDQ1Ci0JCQkJUGFyZW50X1ZpZXcgCUA0MwotCQkJCWxvY2F0aW9uICAgCSgxNjk0LCAxMzk4KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODg5NTQ2Ci0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ0OCIgQDQ2Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA0MgotCQkJICAgIGxvY2F0aW9uICAgCSg5NiwgMjg3KQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCODRBRDI1MDA4NCIKLQkJCSAgICBjbGllbnQgICAgIAlANDIKLQkJCSAgICBzdXBwbGllciAgIAlANDEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMjY0LCAxMzU5KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg3ODEsIDEzNTkpKSkpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ091dHB1dCIgQDQ3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDk2MCwgMTY2NCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDQ3Ci0JCQlsb2NhdGlvbiAgIAkoODEyLCAxNTM5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTI5NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmdPdXRwdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QThGMDI4QyIKLQkJICAgIHdpZHRoICAgICAgCTMxNAotCQkgICAgaGVpZ2h0ICAgICAJMjc0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNDkiIEA0OAotCQkgICAgbG9jYXRpb24gICAJKDE0MzIsIDE2NTQpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFENzkwMEYyIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlT3V0cHV0IiBANDkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDQ4Ci0JCQkgICAgbG9jYXRpb24gICAJKC0xMjAsIDM3NCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA1MAotCQkJCVBhcmVudF9WaWV3IAlANDkKLQkJCQlsb2NhdGlvbiAgIAkoMTY0NSwgMTYxMikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlT3V0cHV0IgotCQkJCXBjdERpc3QgICAgCTAuNjc0NzcyCi0JCQkJaGVpZ2h0ICAgICAJNDMKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUQ3QTAxNEQiCi0JCQkgICAgY2xpZW50ICAgICAJQDQ4Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMxCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQzMiwgMTY1NCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTc0NywgMTY1NCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA1MQotCQkJCVBhcmVudF9WaWV3IAlANDkKLQkJCQlsb2NhdGlvbiAgIAkoMTY4MSwgMTY5NykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjc5MDI3NAotCQkJCWhlaWdodCAgICAgCTQzCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNTAiIEA1MgotCQkJICAgIFBhcmVudF9WaWV3IAlANDgKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTEyMCwgMzc0KQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCODRBRDdBMDE0RSIKLQkJCSAgICBjbGllbnQgICAgIAlANDgKLQkJCSAgICBzdXBwbGllciAgIAlANDcKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNDMyLCAxNjU0KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTE3LCAxNjU0KSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdPcGVyYXRpb24iIEA1MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg5OTIsIDEwMDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA1MwotCQkJbG9jYXRpb24gICAJKDgxOSwgOTMxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM0NgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmdPcGVyYXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEM0NCMDE0NSIKLQkJICAgIHdpZHRoICAgICAgCTM2NAotCQkgICAgaGVpZ2h0ICAgICAJMTc4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEA1NAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBREU0MDFEQyIKLQkJICAgIGNsaWVudCAgICAgCUA1MwotCQkgICAgc3VwcGxpZXIgICAJQDI1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDk2NiwgOTE5KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDk2NiwgNjM2KSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDUiIEA1NQotCQkgICAgbG9jYXRpb24gICAJKDQzMywgMTAyMikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNFMTAxNzkiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDYiIEA1NgotCQkJICAgIFBhcmVudF9WaWV3IAlANTUKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTEzNDMsIDQ5NCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA1NwotCQkJCVBhcmVudF9WaWV3IAlANTYKLQkJCQlsb2NhdGlvbiAgIAkoMjM1LCA4NzcpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVEM0UyMDIyNSIKLQkJCSAgICBjbGllbnQgICAgIAlANTUKLQkJCSAgICBzdXBwbGllciAgIAlAMzIKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoNDMzLCAxMDIyKQotCQkJCSgyNzYsIDEwMjIpCi0JCQkJKDI3NiwgODAyKSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg0MzMsIDEwMjIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDI3NiwgODAyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDU4Ci0JCQkJUGFyZW50X1ZpZXcgCUA1NgotCQkJCWxvY2F0aW9uICAgCSgzMzAsIDg0MSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZUJpbmRpbmdPcGVyYXRpb25zIiBANTkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDU1Ci0JCQkgICAgbG9jYXRpb24gICAJKC0xMzQzLCA0OTQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANjAKLQkJCQlQYXJlbnRfVmlldyAJQDU5Ci0JCQkJbG9jYXRpb24gICAJKDUxMywgOTc3KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTM4NAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VCaW5kaW5nT3BlcmF0aW9ucyIKLQkJCQlwY3REaXN0ICAgIAkwLjIxMTY5OQotCQkJCWhlaWdodCAgICAgCTQ2Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQzRTIwMjM5IgotCQkJICAgIGNsaWVudCAgICAgCUA1NQotCQkJICAgIHN1cHBsaWVyICAgCUA1MwotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDQzMywgMTAyMikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoODEwLCAxMDIyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDYxCi0JCQkJUGFyZW50X1ZpZXcgCUA1OQotCQkJCWxvY2F0aW9uICAgCSg3NjYsIDk4MCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjg4NDk1NgotCQkJCWhlaWdodCAgICAgCTQzCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANjIKLQkJCQlQYXJlbnRfVmlldyAJQDU5Ci0JCQkJbG9jYXRpb24gICAJKDcwNiwgMTA2NykKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNTQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjcyNzU2NAotCQkJCWhlaWdodCAgICAgCTQ1Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ3IiBANjMKLQkJICAgIGxvY2F0aW9uICAgCSgxNDE4LCAxMDQwKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVENDI1MDM4QSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZU9wZXJhdGlvbiIgQDY0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA2MwotCQkJICAgIGxvY2F0aW9uICAgCSgtMzU4LCA0NjQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANjUKLQkJCQlQYXJlbnRfVmlldyAJQDY0Ci0JCQkJbG9jYXRpb24gICAJKDE1MjAsIDEwNzkpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjI4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZU9wZXJhdGlvbiIKLQkJCQlwY3REaXN0ICAgIAkwLjQyMDYwMQotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ0MjYwMkY1IgotCQkJICAgIGNsaWVudCAgICAgCUA2MwotCQkJICAgIHN1cHBsaWVyICAgCUA0MAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE0MTgsIDEwNDApCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE2NjMsIDEwNDApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANjYKLQkJCQlQYXJlbnRfVmlldyAJQDY0Ci0JCQkJbG9jYXRpb24gICAJKDE1ODksIDEwMDUpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC42OTY3MjEKLQkJCQloZWlnaHQgICAgIAkzNgotCQkJCW9yaWVudGF0aW9uIAkwKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDgiIEA2NwotCQkJICAgIFBhcmVudF9WaWV3IAlANjMKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTM1OCwgNDY0KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDY4Ci0JCQkJUGFyZW50X1ZpZXcgCUA2NwotCQkJCWxvY2F0aW9uICAgCSgxMjczLCAxMDcwKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxOTIKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjU5NTQyMAotCQkJCWhlaWdodCAgICAgCTMwCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUQ0MjYwMkZGIgotCQkJICAgIGNsaWVudCAgICAgCUA2MwotCQkJICAgIHN1cHBsaWVyICAgCUA1MwotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE0MTgsIDEwNDApCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDExNzQsIDEwNDApKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQyNyIgQDY5Ci0JCSAgICBsb2NhdGlvbiAgIAkoNzg3LCAxMTkwKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBREYyRTY0MDFGNSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZUJpbmRpbmdJbnB1dCIgQDcwCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA2OQotCQkJICAgIGxvY2F0aW9uICAgCSgtMzgxLCA0NTQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANzEKLQkJCQlQYXJlbnRfVmlldyAJQDcwCi0JCQkJbG9jYXRpb24gICAJKDY2OSwgMTE1MikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyNzYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlQmluZGluZ0lucHV0IgotCQkJCXBjdERpc3QgICAgCTAuNTExOTA1Ci0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkU2NTAyNTEiCi0JCQkgICAgY2xpZW50ICAgICAJQDY5Ci0JCQkgICAgc3VwcGxpZXIgICAJQDQxCi0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDc4NywgMTE5MCkKLQkJCQkoNjM2LCAxMTkwKQotCQkJCSg2MzYsIDEyNzEpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDc4NywgMTE5MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNjM2LCAxMjcxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDcyCi0JCQkJUGFyZW50X1ZpZXcgCUA3MAotCQkJCWxvY2F0aW9uICAgCSg2ODUsIDEyMjIpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC40NDA0NzYKLQkJCQloZWlnaHQgICAgIAkzMgotCQkJCW9yaWVudGF0aW9uIAkwKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDI4IiBANzMKLQkJCSAgICBQYXJlbnRfVmlldyAJQDY5Ci0JCQkgICAgbG9jYXRpb24gICAJKC0zODEsIDQ1NCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA3NAotCQkJCVBhcmVudF9WaWV3IAlANzMKLQkJCQlsb2NhdGlvbiAgIAkoODg1LCAxMTQ0KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkU2NTAyNTIiCi0JCQkgICAgY2xpZW50ICAgICAJQDY5Ci0JCQkgICAgc3VwcGxpZXIgICAJQDUzCi0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDc4NywgMTE5MCkKLQkJCQkoOTI2LCAxMTkwKQotCQkJCSg5MjYsIDEwOTcpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDc4NywgMTE5MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoOTI2LCAxMDk3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDc1Ci0JCQkJUGFyZW50X1ZpZXcgCUA3MwotCQkJCWxvY2F0aW9uICAgCSg4NzEsIDExMzYpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44Mzc3NTgKLQkJCQloZWlnaHQgICAgIAk1NgotCQkJCW9yaWVudGF0aW9uIAkwKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMjkiIEA3NgotCQkgICAgbG9jYXRpb24gICAJKDEwMjQsIDEzMTIpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FERjJFQjMwMTYzIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlQmluZGluZ091dHB1dCIgQDc3Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA3NgotCQkJICAgIGxvY2F0aW9uICAgCSgtMTUwLCA1NzgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBANzgKLQkJCQlQYXJlbnRfVmlldyAJQDc3Ci0JCQkJbG9jYXRpb24gICAJKDEwMTIsIDE0MjkpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMzA2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUJpbmRpbmdPdXRwdXQiCi0JCQkJcGN0RGlzdCAgICAJMC41NDUwODIKLQkJCQloZWlnaHQgICAgIAkxMwotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBREYyRUI0MDEzQyIKLQkJCSAgICBjbGllbnQgICAgIAlANzYKLQkJCSAgICBzdXBwbGllciAgIAlANDcKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMDI0LCAxMzEyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMDI0LCAxNTI3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDc5Ci0JCQkJUGFyZW50X1ZpZXcgCUA3NwotCQkJCWxvY2F0aW9uICAgCSg5NjcsIDE0NzkpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC43NzQ1OTAKLQkJCQloZWlnaHQgICAgIAk1OAotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDMwIiBAODAKLQkJCSAgICBQYXJlbnRfVmlldyAJQDc2Ci0JCQkgICAgbG9jYXRpb24gICAJKC0xNTAsIDU3OCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA4MQotCQkJCVBhcmVudF9WaWV3IAlAODAKLQkJCQlsb2NhdGlvbiAgIAkoOTgzLCAxMTQwKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkVCNDAxM0QiCi0JCQkgICAgY2xpZW50ICAgICAJQDc2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDUzCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTAyNCwgMTMxMikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTAyNCwgMTA5NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA4MgotCQkJCVBhcmVudF9WaWV3IAlAODAKLQkJCQlsb2NhdGlvbiAgIAkoMTAzMSwgMTE4NikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjU5MDE2NAotCQkJCWhlaWdodCAgICAgCTcKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpGYXVsdCIgQDgzCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE5MjAsIDE5ODQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA4MwotCQkJbG9jYXRpb24gICAJKDE3NzIsIDE5MDcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjk2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiRmF1bHQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3OEJFMDEwOCIKLQkJICAgIHdpZHRoICAgICAgCTMxNAotCQkgICAgaGVpZ2h0ICAgICAJMTc4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdGYXVsdCIgQDg0Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEzNjAsIDE5ODQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUA4NAotCQkJbG9jYXRpb24gICAJKDEyMTIsIDE4NTkpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjk2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiQmluZGluZ0ZhdWx0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE5RTAzQTYiCi0JCSAgICB3aWR0aCAgICAgIAkzMTQKLQkJICAgIGhlaWdodCAgICAgCTI3NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAODUKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QUU3MTAzMzMiCi0JCSAgICBjbGllbnQgICAgIAlAODQKLQkJICAgIHN1cHBsaWVyICAgCUAyOAotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMjAzLCAyMDA3KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM1MywgMjAwNykpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQzNyIgQDg2Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTM1NiwgMTM1MikKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMzQwMDAzRTUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVCaW5kaW5nRmF1bHRzIiBAODcKLQkJCSAgICBQYXJlbnRfVmlldyAJQDg2Ci0JCQkgICAgbG9jYXRpb24gICAJKDE4OCwgNjE2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDg4Ci0JCQkJUGFyZW50X1ZpZXcgCUA4NwotCQkJCWxvY2F0aW9uICAgCSgxMzgyLCAxNzUwKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTMwMAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VCaW5kaW5nRmF1bHRzIgotCQkJCXBjdERpc3QgICAgCTAuODAzMTUwCi0JCQkJaGVpZ2h0ICAgICAJMjYKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMzQwMTAzQUEiCi0JCQkgICAgY2xpZW50ICAgICAJQDg2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDg0Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTM1NiwgMTM1MikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTM1NiwgMTg0NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA4OQotCQkJCVBhcmVudF9WaWV3IAlAODcKLQkJCQlsb2NhdGlvbiAgIAkoMTQwOSwgMTc5NykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjg5OTE5NAotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAOTAKLQkJCQlQYXJlbnRfVmlldyAJQDg3Ci0JCQkJbG9jYXRpb24gICAJKDEyNTYsIDE4MDYpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC45MTkyOTEKLQkJCQloZWlnaHQgICAgIAkxMDEKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzOCIgQDkxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUA4NgotCQkJICAgIGxvY2F0aW9uICAgCSgxODgsIDYxNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA5MgotCQkJCVBhcmVudF9WaWV3IAlAOTEKLQkJCQlsb2NhdGlvbiAgIAkoMTA3NiwgMTE5NykKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjM0MDEwM0FCIgotCQkJICAgIGNsaWVudCAgICAgCUA4NgotCQkJICAgIHN1cHBsaWVyICAgCUA1MwotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMzU2LCAxMzUyKQotCQkJCSgxMzU2LCAxMjE3KQotCQkJCSgxMTE3LCAxMjE3KQotCQkJCSgxMTE3LCAxMDk3KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzU2LCAxMzUyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTE3LCAxMDk3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDkzCi0JCQkJUGFyZW50X1ZpZXcgCUA5MQotCQkJCWxvY2F0aW9uICAgCSgxMTUyLCAxMTY0KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjg3MDA4Ci0JCQkJaGVpZ2h0ICAgICAJNTQKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDM5IiBAOTQKLQkJICAgIGxvY2F0aW9uICAgCSgxNjQwLCAxOTcwKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA5MUY0MDJGMyIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZUZhdWx0IiBAOTUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDk0Ci0JCQkgICAgbG9jYXRpb24gICAJKC0zNDQsIDgxOCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEA5NgotCQkJCVBhcmVudF9WaWV3IAlAOTUKLQkJCQlsb2NhdGlvbiAgIAkoMTY3NCwgMTkxNSkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRmF1bHQiCi0JCQkJcGN0RGlzdCAgICAJMC4yNzY0MjMKLQkJCQloZWlnaHQgICAgIAk1NgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRTA5MUY4MDFGRSIKLQkJCSAgICBjbGllbnQgICAgIAlAOTQKLQkJCSAgICBzdXBwbGllciAgIAlAODMKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNjQwLCAxOTcwKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNzYzLCAxOTcwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDk3Ci0JCQkJUGFyZW50X1ZpZXcgCUA5NQotCQkJCWxvY2F0aW9uICAgCSgxNzE4LCAyMDEyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjQyMjc2Ci0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ0MCIgQDk4Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUA5NAotCQkJICAgIGxvY2F0aW9uICAgCSgtMzQ0LCA4MTgpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FFMDkxRjgwMUZGIgotCQkJICAgIGNsaWVudCAgICAgCUA5NAotCQkJICAgIHN1cHBsaWVyICAgCUA4NAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE2NDAsIDE5NzApCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE1MTcsIDE5NzApKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDk5Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEFFNDMwMkFCIgotCQkgICAgY2xpZW50ICAgICAJQDQ3Ci0JCSAgICBzdXBwbGllciAgIAlAMjcKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoODAzLCAxNjU2KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM2NCwgMTY1NikpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDEwMAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBRTFCMDExMyIKLQkJICAgIGNsaWVudCAgICAgCUA0MQotCQkgICAgc3VwcGxpZXIgICAJQDI2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDQ2NywgMTM4NSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzMzEsIDEzODUpKSkpCi0JKG9iamVjdCBDbGFzc0RpYWdyYW0gIjIuNCBQb3J0VHlwZXMiCi0JICAgIHF1aWQgICAgICAgCSIzQUQ1RDFDNDAzNjYiCi0JICAgIHRpdGxlICAgICAgCSIyLjQgUG9ydFR5cGVzIgotCSAgICBkb2N1bWVudGF0aW9uIAkiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBub24tTU9GIGphdmEudXRpbC5JdGVyYXRvciBpbnRlcmZhY2UuIgotCSAgICB6b29tICAgICAgIAk4MAotCSAgICBtYXhfaGVpZ2h0IAkyODM1MAotCSAgICBtYXhfd2lkdGggIAkyMTYwMAotCSAgICBvcmlnaW5feCAgIAkwCi0JICAgIG9yaWdpbl95ICAgCTAKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJUG9ydFR5cGUiIEAxMDEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDQ5NiwgMjA4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTAxCi0JCQlsb2NhdGlvbiAgIAkoMTQ2LCAxNzIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNzAwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSVBvcnRUeXBlIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwMQotCQkJbG9jYXRpb24gICAJKDE0NiwgMTIyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3MDAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBNUJFMDMzMSIKLQkJICAgIHdpZHRoICAgICAgCTcxOAotCQkgICAgaGVpZ2h0ICAgICAJMTk2Ci0JCSAgICBhbm5vdGF0aW9uIAk4KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklPcGVyYXRpb24iIEAxMDIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE1NTIsIDIwOCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwMgotCQkJbG9jYXRpb24gICAJKDExMTYsIDE3NikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk4NzMKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJT3BlcmF0aW9uIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwMgotCQkJbG9jYXRpb24gICAJKDExMTYsIDEyNikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJODczCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTc3NjAwRDEiCi0JCSAgICB3aWR0aCAgICAgIAk4OTEKLQkJICAgIGhlaWdodCAgICAgCTE4OAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJSW5wdXQiIEAxMDMKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDM2OCwgMTQ3MikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwMwotCQkJbG9jYXRpb24gICAJKDU1LCAxNDM3KQotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTYyNgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklJbnB1dCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDMKLQkJCWxvY2F0aW9uICAgCSg1NSwgMTM4NykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjI2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTdFRTAwMTUiCi0JCSAgICB3aWR0aCAgICAgIAk2NDQKLQkJICAgIGhlaWdodCAgICAgCTE5NAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJT3V0cHV0IiBAMTA0Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgzODQsIDE3OTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDQKLQkJCWxvY2F0aW9uICAgCSg1NiwgMTc1NykKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJT3V0cHV0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNAotCQkJbG9jYXRpb24gICAJKDU2LCAxNzA3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBODI5MDI3RCIKLQkJICAgIHdpZHRoICAgICAgCTY3NAotCQkgICAgaGVpZ2h0ICAgICAJMTk0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklGYXVsdCIgQDEwNQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzY4LCAyMTEyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTA1Ci0JCQlsb2NhdGlvbiAgIAkoNTUsIDIwNzYpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjI2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSUZhdWx0IikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNQotCQkJbG9jYXRpb24gICAJKDU1LCAyMDI2KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2MjYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBODYxMDMxRCIKLQkJICAgIHdpZHRoICAgICAgCTY0NAotCQkgICAgaGVpZ2h0ICAgICAJMTk2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlBvcnRUeXBlIiBAMTA2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg0OTYsIDgwMCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDEwNgotCQkJbG9jYXRpb24gICAJKDE1OCwgNjcyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY3NwotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBvcnRUeXBlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzdGMDAxQTUiCi0JCSAgICB3aWR0aCAgICAgIAk2OTUKLQkJICAgIGhlaWdodCAgICAgCTI4MQotCQkgICAgYW5ub3RhdGlvbiAJOCkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IiBAMTA3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyNTc2LCA4MDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDcKLQkJCWxvY2F0aW9uICAgCSgyMzI1LCA2OTIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTAyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiUGFydCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUNFMUMwMzJFIgotCQkgICAgd2lkdGggICAgICAJNTIwCi0JCSAgICBoZWlnaHQgICAgIAkyNDAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RmF1bHQiIEAxMDgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE3MjgsIDIxMTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDgKLQkJCWxvY2F0aW9uICAgCSgxNjQ3LCAyMDYwKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkZhdWx0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCRTAxMDgiCi0JCSAgICBoZWlnaHQgICAgIAkxMjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW5wdXQiIEAxMDkKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEwNTYsIDE0NzIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxMDkKLQkJCWxvY2F0aW9uICAgCSg4NzAsIDE0MjIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMzcyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSW5wdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA3ODlGMDA1OSIKLQkJICAgIHdpZHRoICAgICAgCTM5MAotCQkgICAgaGVpZ2h0ICAgICAJMTI1Ci0JCSAgICBhbm5vdGF0aW9uIAk4KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok91dHB1dCIgQDExMAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTM2MCwgMTc5MikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDExMAotCQkJbG9jYXRpb24gICAJKDEyMzIsIDE3NDIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjU2Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiT3V0cHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCNjAyMzIiCi0JCSAgICB3aWR0aCAgICAgIAkyNzQKLQkJICAgIGhlaWdodCAgICAgCTEyNQotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpPcGVyYXRpb24iIEAxMTEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE1NTIsIDc4NCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDExMQotCQkJbG9jYXRpb24gICAJKDEyMTQsIDYyMCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NzcKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJPcGVyYXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDODBEMDNDRSIKLQkJICAgIHdpZHRoICAgICAgCTY5NQotCQkgICAgaGVpZ2h0ICAgICAJMzUyCi0JCSAgICBhbm5vdGF0aW9uIAk4KQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMCIgQDExMgotCQkgICAgbG9jYXRpb24gICAJKDEwMjQsIDc5NykKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgyNDAxOEMiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVPcGVyYXRpb25zIiBAMTEzCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAxMTIKLQkJCSAgICBsb2NhdGlvbiAgIAkoNTkyLCAyNjkpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTE0Ci0JCQkJUGFyZW50X1ZpZXcgCUAxMTMKLQkJCQlsb2NhdGlvbiAgIAkoMTA4OCwgNzQ4KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTI0OQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VPcGVyYXRpb25zIgotCQkJCXBjdERpc3QgICAgCTAuMzU5NjQ5Ci0JCQkJaGVpZ2h0ICAgICAJNTAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1QzgyNzAxQ0QiCi0JCQkgICAgY2xpZW50ICAgICAJQDExMgotCQkJICAgIHN1cHBsaWVyICAgCUAxMTEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMDI0LCA3OTcpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEyMDUsIDc5NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMTUKLQkJCQlQYXJlbnRfVmlldyAJQDExMwotCQkJCWxvY2F0aW9uICAgCSgxMTc2LCA4NjEpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC44NDAzOTEKLQkJCQloZWlnaHQgICAgIAk2NAotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDExNgotCQkJCVBhcmVudF9WaWV3IAlAMTEzCi0JCQkJbG9jYXRpb24gICAJKDEwNzQsIDkyMykKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjI3NjI0MwotCQkJCWhlaWdodCAgICAgCTEyNgotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgInBvcnRUeXBlIiBAMTE3Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAxMTIKLQkJCSAgICBsb2NhdGlvbiAgIAkoNTkyLCAyNjkpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MjcwMUMzIgotCQkJICAgIGNsaWVudCAgICAgCUAxMTIKLQkJCSAgICBzdXBwbGllciAgIAlAMTA2Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTAyNCwgNzk3KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4NDMsIDc5NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMTgKLQkJCQlQYXJlbnRfVmlldyAJQDExNwotCQkJCWxvY2F0aW9uICAgCSg4ODgsIDc1NykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjc1MzQ4OAotCQkJCWhlaWdodCAgICAgCTQxCi0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ0NSIgQDExOQotCQkgICAgbG9jYXRpb24gICAJKDIxMDcsIDc3MykKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUVBNDEyRjAwMzUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVQYXJhbWV0ZXJPcmRlcmluZyIgQDEyMAotCQkJICAgIFBhcmVudF9WaWV3IAlAMTE5Ci0JCQkgICAgbG9jYXRpb24gICAJKDE4MTksIDEwMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjEKLQkJCQlQYXJlbnRfVmlldyAJQDEyMAotCQkJCWxvY2F0aW9uICAgCSgyMTQ1LCA2NDcpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMzk2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVBhcmFtZXRlck9yZGVyaW5nIgotCQkJCXBjdERpc3QgICAgCTAuMTgzMzMzCi0JCQkJaGVpZ2h0ICAgICAJMTI3Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FFQTQxMzEwMjU1IgotCQkJICAgIGNsaWVudCAgICAgCUAxMTkKLQkJCSAgICBzdXBwbGllciAgIAlAMTA3Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjEwNywgNzczKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyMzE2LCA3NzMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTIyCi0JCQkJUGFyZW50X1ZpZXcgCUAxMjAKLQkJCQlsb2NhdGlvbiAgIAkoMjI3MiwgODIyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuNzk2NjEwCi0JCQkJaGVpZ2h0ICAgICAJNDkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjMKLQkJCQlQYXJlbnRfVmlldyAJQDEyMAotCQkJCWxvY2F0aW9uICAgCSgyMTcxLCA4ODgpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTY0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC4zMDYyMjAKLQkJCQloZWlnaHQgICAgIAkxMTUKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ0NiIgQDEyNAotCQkJICAgIFBhcmVudF9WaWV3IAlAMTE5Ci0JCQkgICAgbG9jYXRpb24gICAJKDE4MTksIDEwMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUVBNDEzMTAyNUYiCi0JCQkgICAgY2xpZW50ICAgICAJQDExOQotCQkJICAgIHN1cHBsaWVyICAgCUAxMTEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMTA3LCA3NzMpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE4OTksIDc3MykpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDM1IiBAMTI1Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTcwMiwgMTUwNCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMzMxNjAxQTQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVGYXVsdHMiIEAxMjYKLQkJCSAgICBQYXJlbnRfVmlldyAJQDEyNQotCQkJICAgIGxvY2F0aW9uICAgCSgxNDE0LCA4MzIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTI3Ci0JCQkJUGFyZW50X1ZpZXcgCUAxMjYKLQkJCQlsb2NhdGlvbiAgIAkoMTgxNSwgMTk4MikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRmF1bHRzIgotCQkJCXBjdERpc3QgICAgCTAuODc4OTkyCi0JCQkJaGVpZ2h0ICAgICAJMTEzCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjMzMTgwMzg3IgotCQkJICAgIGNsaWVudCAgICAgCUAxMjUKLQkJCSAgICBzdXBwbGllciAgIAlAMTA4Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTcwMiwgMTUwNCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTcwMiwgMjA0OCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjgKLQkJCQlQYXJlbnRfVmlldyAJQDEyNgotCQkJCWxvY2F0aW9uICAgCSgxNjQ0LCAyMDIwKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuOTQ5NTgwCi0JCQkJaGVpZ2h0ICAgICAJNTkKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMjkKLQkJCQlQYXJlbnRfVmlldyAJQDEyNgotCQkJCWxvY2F0aW9uICAgCSgxNTkzLCAxOTYzKQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE2NAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuODQ1Mzc4Ci0JCQkJaGVpZ2h0ICAgICAJMTEwCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMzYiIEAxMzAKLQkJCSAgICBQYXJlbnRfVmlldyAJQDEyNQotCQkJICAgIGxvY2F0aW9uICAgCSgxNDE0LCA4MzIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTMxCi0JCQkJUGFyZW50X1ZpZXcgCUAxMzAKLQkJCQlsb2NhdGlvbiAgIAkoMTY2MSwgMTA2OSkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjMzMTgwMzg4IgotCQkJICAgIGNsaWVudCAgICAgCUAxMjUKLQkJCSAgICBzdXBwbGllciAgIAlAMTExCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTcwMiwgMTUwNCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTcwMiwgOTYwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEzMgotCQkJCVBhcmVudF9WaWV3IAlAMTMwCi0JCQkJbG9jYXRpb24gICAJKDE4MjEsIDEwMzkpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44NTczNjIKLQkJCQloZWlnaHQgICAgIAkxMTkKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDMxIiBAMTMzCi0JCSAgICBsb2NhdGlvbiAgIAkoMTE3OCwgMTIzNCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkY5NDAyNEQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVJbnB1dCIgQDEzNAotCQkJICAgIFBhcmVudF9WaWV3IAlAMTMzCi0JCQkgICAgbG9jYXRpb24gICAJKDg5MCwgNTYyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEzNQotCQkJCVBhcmVudF9WaWV3IAlAMTM0Ci0JCQkJbG9jYXRpb24gICAJKDg3OCwgMTM0MykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxMzIKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlSW5wdXQiCi0JCQkJcGN0RGlzdCAgICAJMC44MTk4MjAKLQkJCQloZWlnaHQgICAgIAkxMDMKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkY5NTAxOTAiCi0JCQkgICAgY2xpZW50ICAgICAJQDEzMwotCQkJICAgIHN1cHBsaWVyICAgCUAxMDkKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTE3OCwgMTIzNCkKLQkJCQkoOTgwLCAxMjM0KQotCQkJCSg5ODAsIDE0MTApKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExNzgsIDEyMzQpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDk4MCwgMTQxMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMzYKLQkJCQlQYXJlbnRfVmlldyAJQDEzNAotCQkJCWxvY2F0aW9uICAgCSgxMDQ2LCAxMzY0KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODc3NjYwCi0JCQkJaGVpZ2h0ICAgICAJNjYKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzMiIgQDEzNwotCQkJICAgIFBhcmVudF9WaWV3IAlAMTMzCi0JCQkgICAgbG9jYXRpb24gICAJKDg5MCwgNTYyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDEzOAotCQkJCVBhcmVudF9WaWV3IAlAMTM3Ci0JCQkJbG9jYXRpb24gICAJKDEyMzYsIDEwMzYpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBREYyRjk1MDE5QSIKLQkJCSAgICBjbGllbnQgICAgIAlAMTMzCi0JCQkgICAgc3VwcGxpZXIgICAJQDExMQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMTc4LCAxMjM0KQotCQkJCSgxMjc3LCAxMjM0KQotCQkJCSgxMjc3LCA5NjApKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExNzgsIDEyMzQpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEyNzcsIDk2MCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxMzkKLQkJCQlQYXJlbnRfVmlldyAJQDEzNwotCQkJCWxvY2F0aW9uICAgCSgxMTk3LCAxMDU4KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNzM2NDEzCi0JCQkJaGVpZ2h0ICAgICAJODEKLQkJCQlvcmllbnRhdGlvbiAJMCkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDMzIiBAMTQwCi0JCSAgICBsb2NhdGlvbiAgIAkoMTQ2OCwgMTM0NSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkZCODAyRjkiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVPdXRwdXQiIEAxNDEKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE0MAotCQkJICAgIGxvY2F0aW9uICAgCSgxMTgwLCA2NzMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTQyCi0JCQkJUGFyZW50X1ZpZXcgCUAxNDEKLQkJCQlsb2NhdGlvbiAgIAkoMTM2MiwgMTY2OSkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlT3V0cHV0IgotCQkJCXBjdERpc3QgICAgCTAuODQwOTA5Ci0JCQkJaGVpZ2h0ICAgICAJMTA3Ci0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FERjJGQjkwMjBBIgotCQkJICAgIGNsaWVudCAgICAgCUAxNDAKLQkJCSAgICBzdXBwbGllciAgIAlAMTEwCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQ2OCwgMTM0NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTQ2OCwgMTczMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNDMKLQkJCQlQYXJlbnRfVmlldyAJQDE0MQotCQkJCWxvY2F0aW9uICAgCSgxNTQ2LCAxNjc2KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODYzNjM2Ci0JCQkJaGVpZ2h0ICAgICAJNzgKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQzNCIgQDE0NAotCQkJICAgIFBhcmVudF9WaWV3IAlAMTQwCi0JCQkgICAgbG9jYXRpb24gICAJKDExODAsIDY3MykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNDUKLQkJCQlQYXJlbnRfVmlldyAJQDE0NAotCQkJCWxvY2F0aW9uICAgCSgxNDI3LCAxMDM3KQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQURGMkZCOTAyMEIiCi0JCQkgICAgY2xpZW50ICAgICAJQDE0MAotCQkJICAgIHN1cHBsaWVyICAgCUAxMTEKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNDY4LCAxMzQ1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDY4LCA5NjApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTQ2Ci0JCQkJUGFyZW50X1ZpZXcgCUAxNDQKLQkJCQlsb2NhdGlvbiAgIAkoMTUyMywgMTA4MCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjY5MDM0MQotCQkJCWhlaWdodCAgICAgCTU1Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE0NwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkQ4MDE5RiIKLQkJICAgIGNsaWVudCAgICAgCUAxMDYKLQkJICAgIHN1cHBsaWVyICAgCUAxMDEKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE0OAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkUyMDE3MSIKLQkJICAgIGNsaWVudCAgICAgCUAxMTEKLQkJICAgIHN1cHBsaWVyICAgCUAxMDIKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE0OQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkVFMDMxRCIKLQkJICAgIGNsaWVudCAgICAgCUAxMDkKLQkJICAgIHN1cHBsaWVyICAgCUAxMDMKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYxRkY4MDFDRCIKLQkJICAgIGNsaWVudCAgICAgCUAxMTAKLQkJICAgIHN1cHBsaWVyICAgCUAxMDQKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1MQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNkYyMDAyMDAyRCIKLQkJICAgIGNsaWVudCAgICAgCUAxMDgKLQkJICAgIHN1cHBsaWVyICAgCUAxMDUKLQkJICAgIGxpbmVfc3R5bGUgCTApCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZSIgQDE1MgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjIyNCwgMTQ1NikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE1MgotCQkJbG9jYXRpb24gICAJKDE5MzcsIDEzMTIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTc1Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTWVzc2FnZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgd2lkdGggICAgICAJNTkzCi0JCSAgICBoZWlnaHQgICAgIAkzMTIKLQkJICAgIGFubm90YXRpb24gCTgpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIgQDE1MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTUyMCwgMjU0NCkKLQkJICAgIGZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJaXRhbGljcyAgICAJVFJVRSkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE1MwotCQkJbG9jYXRpb24gICAJKDExOTMsIDI0NjYpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjU0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTWVzc2FnZVJlZmVyZW5jZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcxREIwMkRDIgotCQkgICAgY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCVBhcmVudF9WaWV3IAlAMTUzCi0JCQlsb2NhdGlvbiAgIAkoMTE5MywgMjUyNikKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTApCi0JCSAgICB3aWR0aCAgICAgIAk2NzIKLQkJICAgIGhlaWdodCAgICAgCTE4MAotCQkgICAgYW5ub3RhdGlvbiAJOCkKLQkJKG9iamVjdCBJbmhlcml0VHJlZVZpZXcgIiIgQDE1NAotCQkgICAgbG9jYXRpb24gICAJKDE1MjQsIDIyNzUpCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgc3VwcGxpZXIgICAJQDE1MwotCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkoMTUyNCwgMjI3NSkKLQkJCSgxNTI0LCAyNDU0KSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDE1NQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MjNEMDMxOSIKLQkJICAgIGNsaWVudCAgICAgCUAxMDgKLQkJICAgIHN1cHBsaWVyICAgCUAxNTMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTc3NiwgMjE3NikKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNzc2LCAyMjc1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMTU0KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAxNTYKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzIzNTAwREQiCi0JCSAgICBjbGllbnQgICAgIAlAMTEwCi0JCSAgICBzdXBwbGllciAgIAlAMTUzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEzNzEsIDE4NTQpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTM3MSwgMjI3NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDE1NCkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMTU3Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcyMjgwMkU3IgotCQkgICAgY2xpZW50ICAgICAJQDEwOQotCQkgICAgc3VwcGxpZXIgICAJQDE1MwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg5ODAsIDE1MzQpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoOTgwLCAyMjc1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMTU0KQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNjEiIEAxNTgKLQkJICAgIGxvY2F0aW9uICAgCSgyMjA2LCAyMjU5KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNzRFNzg0MDFCMSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZU1lc3NhZ2UiIEAxNTkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE1OAotCQkJICAgIGxvY2F0aW9uICAgCSg3MzQsIC0yODUpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTYwCi0JCQkJUGFyZW50X1ZpZXcgCUAxNTkKLQkJCQlsb2NhdGlvbiAgIAkoMjA2OCwgMTY3MCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMTYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlTWVzc2FnZSIKLQkJCQlwY3REaXN0ICAgIAkwLjkxMjIzMAotCQkJCWhlaWdodCAgICAgCTEzOQotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNGNzRFNzg2MDAwRiIKLQkJCSAgICBjbGllbnQgICAgIAlAMTU4Ci0JCQkgICAgc3VwcGxpZXIgICAJQDE1MgotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIyMDYsIDIyNTkpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDIyMDYsIDE2MTIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTYxCi0JCQkJUGFyZW50X1ZpZXcgCUAxNTkKLQkJCQlsb2NhdGlvbiAgIAkoMjI2MCwgMTY3OCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMSIKLQkJCQlwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNjIiIEAxNjIKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE1OAotCQkJICAgIGxvY2F0aW9uICAgCSg3MzQsIC0yODUpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0Y3NEU3ODYwMDIzIgotCQkJICAgIGNsaWVudCAgICAgCUAxNTgKLQkJCSAgICBzdXBwbGllciAgIAlAMTUzCi0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDIyMDYsIDIyNTkpCi0JCQkJKDIyMDYsIDI1NTYpCi0JCQkJKDE4NTYsIDI1NTYpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIyMDYsIDIyNTkpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE4NTYsIDI1NTYpKSkpKSkKLQkob2JqZWN0IENsYXNzRGlhZ3JhbSAiMi4xIERlZmluaXRpb25zIgotCSAgICBxdWlkICAgICAgIAkiM0FENUU0OEEwMjYyIgotCSAgICB0aXRsZSAgICAgIAkiMi4xIERlZmluaXRpb25zIgotCSAgICB6b29tICAgICAgIAk4MwotCSAgICBtYXhfaGVpZ2h0IAkyODM1MAotCSAgICBtYXhfd2lkdGggIAkyMTYwMAotCSAgICBvcmlnaW5feCAgIAkwCi0JICAgIG9yaWdpbl95ICAgCTAKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJRGVmaW5pdGlvbiIgQDE2MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNDMyLCAxOTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxNjMKLQkJCWxvY2F0aW9uICAgCSg4OCwgMTYxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY4OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklEZWZpbml0aW9uIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE2MwotCQkJbG9jYXRpb24gICAJKDg4LCAxMTEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY4OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEIxRDkwMTQyIgotCQkgICAgd2lkdGggICAgICAJNzA2Ci0JCSAgICBoZWlnaHQgICAgIAkxODYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6VHlwZXMiIEAxNjQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE4MjQsIDk0NCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE2NAotCQkJbG9jYXRpb24gICAJKDE2ODYsIDg5NikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNzYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJUeXBlcyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QkU5QTYwM0E4IgotCQkgICAgd2lkdGggICAgICAJMjk0Ci0JCSAgICBoZWlnaHQgICAgIAkxMjAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SW1wb3J0IiBAMTY1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMTQ0LCA2MjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxNjUKLQkJCWxvY2F0aW9uICAgCSgxOTEwLCA1NDUpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDY4Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSW1wb3J0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTRGOTAzREUiCi0JCSAgICB3aWR0aCAgICAgIAk0ODYKLQkJICAgIGhlaWdodCAgICAgCTE4MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIiBAMTY2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NPcGVyYXRpb24gCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMTEyLCAxMTg0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTY2Ci0JCQlsb2NhdGlvbiAgIAkoMTkwMCwgMTEwNSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0MjQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJNZXNzYWdlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Qzk1OTAwNzgiCi0JCSAgICB3aWR0aCAgICAgIAk0NDIKLQkJICAgIGhlaWdodCAgICAgCTE4MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0VHlwZSIgQDE2NwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIFN1cHByZXNzT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTgwOCwgMTQ4OCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDE2NwotCQkJbG9jYXRpb24gICAJKDE1OTYsIDE0MDkpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDI0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiUG9ydFR5cGUiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDN0YwMDFBNSIKLQkJICAgIHdpZHRoICAgICAgCTQ0MgotCQkgICAgaGVpZ2h0ICAgICAJMTgyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmciIEAxNjgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDIzMzYsIDE3MjgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAxNjgKLQkJCWxvY2F0aW9uICAgCSgyMTI0LCAxNjQ5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQyNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkJpbmRpbmciKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEMjg2MDI2MSIKLQkJICAgIHdpZHRoICAgICAgCTQ0MgotCQkgICAgaGVpZ2h0ICAgICAJMTgyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iIEAxNjkKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTMyOCwgMjQwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMTY5Ci0JCQlsb2NhdGlvbiAgIAkoMTA3MywgMzkpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTEwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiRGVmaW5pdGlvbiIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0M0YwMDhFIgotCQkgICAgd2lkdGggICAgICAJNTI4Ci0JCSAgICBoZWlnaHQgICAgIAk0MjYKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQxNSIgQDE3MAotCQkgICAgbG9jYXRpb24gICAJKDEzNTgsIDg2MCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUEyNzAyOUYiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDE2IiBAMTcxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAxNzAKLQkJCSAgICBsb2NhdGlvbiAgIAkoNjIsIC0zNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNzIKLQkJCQlQYXJlbnRfVmlldyAJQDE3MQotCQkJCWxvY2F0aW9uICAgCSgxMzE3LCA1MzUpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCOEJFQTI5MDM1NiIKLQkJCSAgICBjbGllbnQgICAgIAlAMTcwCi0JCQkgICAgc3VwcGxpZXIgICAJQDE2OQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEzNTgsIDg2MCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTM1OCwgNDUzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE3MwotCQkJCVBhcmVudF9WaWV3IAlAMTcxCi0JCQkJbG9jYXRpb24gICAJKDE0MDMsIDUxMSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjg1NjY0OQotCQkJCWhlaWdodCAgICAgCTQ1Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZVR5cGVzIiBAMTc0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAxNzAKLQkJCSAgICBsb2NhdGlvbiAgIAkoNjIsIC0zNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxNzUKLQkJCQlQYXJlbnRfVmlldyAJQDE3NAotCQkJCWxvY2F0aW9uICAgCSgxNTg2LCA5MDkpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVR5cGVzIgotCQkJCXBjdERpc3QgICAgCTAuNzc5MDk3Ci0JCQkJaGVpZ2h0ICAgICAJNDAKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUEyOTAzNkEiCi0JCQkgICAgY2xpZW50ICAgICAJQDE3MAotCQkJICAgIHN1cHBsaWVyICAgCUAxNjQKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTM1OCwgODYwKQotCQkJCSgxMzU4LCA5NDgpCi0JCQkJKDE2NzcsIDk0OCkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTM1OCwgODYwKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNjc3LCA5NDgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTc2Ci0JCQkJUGFyZW50X1ZpZXcgCUAxNzQKLQkJCQlsb2NhdGlvbiAgIAkoMTYzMiwgOTg3KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODkyNjU1Ci0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDEzIiBAMTc3Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTYxMiwgNTk1KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNDODY0REZGMDJFQyIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTQiIEAxNzgKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE3NwotCQkJICAgIGxvY2F0aW9uICAgCSgxMiwgMjI3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE3OQotCQkJCVBhcmVudF9WaWV3IAlAMTc4Ci0JCQkJbG9jYXRpb24gICAJKDE0MjMsIDUxMikKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0M4NjRERkYwMkVFIgotCQkJICAgIGNsaWVudCAgICAgCUAxNzcKLQkJCSAgICBzdXBwbGllciAgIAlAMTY5Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDE2MTIsIDU5NSkKLQkJCQkoMTQ2NCwgNTk1KQotCQkJCSgxNDY0LCA0NTMpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE2MTIsIDU5NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTQ2NCwgNDUzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE4MAotCQkJCVBhcmVudF9WaWV3IAlAMTc4Ci0JCQkJbG9jYXRpb24gICAJKDE1MjQsIDQ5NSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjg1ODY2NwotCQkJCWhlaWdodCAgICAgCTYwCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZUltcG9ydHMiIEAxODEKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE3NwotCQkJICAgIGxvY2F0aW9uICAgCSgxMiwgMjI3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE4MgotCQkJCVBhcmVudF9WaWV3IAlAMTgxCi0JCQkJbG9jYXRpb24gICAJKDE2OTIsIDU1NykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlSW1wb3J0cyIKLQkJCQlwY3REaXN0ICAgIAkwLjI4MDMzNQotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0M4NjRERkYwMkVEIgotCQkJICAgIGNsaWVudCAgICAgCUAxNzcKLQkJCSAgICBzdXBwbGllciAgIAlAMTY1Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTYxMiwgNTk1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxOTAxLCA1OTUpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMTgzCi0JCQkJUGFyZW50X1ZpZXcgCUAxODEKLQkJCQlsb2NhdGlvbiAgIAkoMTg1NCwgNjUyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuODQxMDA0Ci0JCQkJaGVpZ2h0ICAgICAJNTcKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxODQKLQkJCQlQYXJlbnRfVmlldyAJQDE4MQotCQkJCWxvY2F0aW9uICAgCSgxNjc2LCA2NDYpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC4yMjU5NDEKLQkJCQloZWlnaHQgICAgIAk1MQotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMTciIEAxODUKLQkJICAgIGxvY2F0aW9uICAgCSgxMjc5LCAxMTM2KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjAzMDFFMiIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTgiIEAxODYKLQkJCSAgICBQYXJlbnRfVmlldyAJQDE4NQotCQkJICAgIGxvY2F0aW9uICAgCSgyNzEsIDI3MikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxODcKLQkJCQlQYXJlbnRfVmlldyAJQDE4NgotCQkJCWxvY2F0aW9uICAgCSgxMjM4LCA1OTEpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjA0MDBCNyIKLQkJCSAgICBjbGllbnQgICAgIAlAMTg1Ci0JCQkgICAgc3VwcGxpZXIgICAJQDE2OQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEyNzksIDExMzYpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEyNzksIDQ1MykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxODgKLQkJCQlQYXJlbnRfVmlldyAJQDE4NgotCQkJCWxvY2F0aW9uICAgCSgxMzIwLCA1ODcpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44MDQ5NzQKLQkJCQloZWlnaHQgICAgIAk0MQotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgImVNZXNzYWdlcyIgQDE4OQotCQkJICAgIFBhcmVudF9WaWV3IAlAMTg1Ci0JCQkgICAgbG9jYXRpb24gICAJKDI3MSwgMjcyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE5MAotCQkJCVBhcmVudF9WaWV3IAlAMTg5Ci0JCQkJbG9jYXRpb24gICAJKDE2NDcsIDExNzEpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMjQwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZU1lc3NhZ2VzIgotCQkJCXBjdERpc3QgICAgCTAuNjQzMTM3Ci0JCQkJaGVpZ2h0ICAgICAJMzgKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTYwNDAwQzEiCi0JCQkgICAgY2xpZW50ICAgICAJQDE4NQotCQkJICAgIHN1cHBsaWVyICAgCUAxNjYKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTI3OSwgMTEzNikKLQkJCQkoMTI3OSwgMTIwOCkKLQkJCQkoMTg5MSwgMTIwOCkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTI3OSwgMTEzNikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTg5MSwgMTIwOCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOTEKLQkJCQlQYXJlbnRfVmlldyAJQDE4OQotCQkJCWxvY2F0aW9uICAgCSgxODIxLCAxMTcxKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuODk5MzQ2Ci0JCQkJaGVpZ2h0ICAgICAJMzgKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOTIKLQkJCQlQYXJlbnRfVmlldyAJQDE4OQotCQkJCWxvY2F0aW9uICAgCSgxNzk3LCAxMjQ0KQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1OAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuODY0NDA3Ci0JCQkJaGVpZ2h0ICAgICAJMzYKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDE5IiBAMTkzCi0JCSAgICBsb2NhdGlvbiAgIAkoMTIxMiwgMTE1OSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTY3MTAxMDQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDIwIiBAMTk0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAxOTMKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTMyNCwgMjE1KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE5NQotCQkJCVBhcmVudF9WaWV3IAlAMTk0Ci0JCQkJbG9jYXRpb24gICAJKDExNzEsIDU5NCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUU2NzIwMzRBIgotCQkJICAgIGNsaWVudCAgICAgCUAxOTMKLQkJCSAgICBzdXBwbGllciAgIAlAMTY5Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTIxMiwgMTE1OSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTIxMiwgNDUzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE5NgotCQkJCVBhcmVudF9WaWV3IAlAMTk0Ci0JCQkJbG9jYXRpb24gICAJKDEyNTEsIDYyNCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjc1Nzk2MgotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZVBvcnRUeXBlcyIgQDE5NwotCQkJICAgIFBhcmVudF9WaWV3IAlAMTkzCi0JCQkgICAgbG9jYXRpb24gICAJKC0zMjQsIDIxNSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAxOTgKLQkJCQlQYXJlbnRfVmlldyAJQDE5NwotCQkJCWxvY2F0aW9uICAgCSgxMzkxLCAxNDUxKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTI0MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VQb3J0VHlwZXMiCi0JCQkJcGN0RGlzdCAgICAJMC43MjM2OTgKLQkJCQloZWlnaHQgICAgIAk0MAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjcyMDM1NCIKLQkJCSAgICBjbGllbnQgICAgIAlAMTkzCi0JCQkgICAgc3VwcGxpZXIgICAJQDE2NwotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMjEyLCAxMTU5KQotCQkJCSgxMjEyLCAxNDkwKQotCQkJCSgxNTg3LCAxNDkwKSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMjEyLCAxMTU5KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNTg3LCAxNDkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDE5OQotCQkJCVBhcmVudF9WaWV3IAlAMTk3Ci0JCQkJbG9jYXRpb24gICAJKDE1MzMsIDE0NTEpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC45MjU2MTEKLQkJCQloZWlnaHQgICAgIAk0MAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwMAotCQkJCVBhcmVudF9WaWV3IAlAMTk3Ci0JCQkJbG9jYXRpb24gICAJKDE1MTIsIDE1NDApCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC44OTU4NTUKLQkJCQloZWlnaHQgICAgIAk1MAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMjEiIEAyMDEKLQkJICAgIGxvY2F0aW9uICAgCSgxMTE0LCAxNTg1KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjc3MDA5NSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMjIiIEAyMDIKLQkJCSAgICBQYXJlbnRfVmlldyAJQDIwMQotCQkJICAgIGxvY2F0aW9uICAgCSgtNDA2LCAyNDEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjAzCi0JCQkJUGFyZW50X1ZpZXcgCUAyMDIKLQkJCQlsb2NhdGlvbiAgIAkoMTA3MywgNjgwKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTY3ODAzNzEiCi0JCQkgICAgY2xpZW50ICAgICAJQDIwMQotCQkJICAgIHN1cHBsaWVyICAgCUAxNjkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMTE0LCAxNTg1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTE0LCA0NTMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjA0Ci0JCQkJUGFyZW50X1ZpZXcgCUAyMDIKLQkJCQlsb2NhdGlvbiAgIAkoMTE1NSwgNzUyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNzM2NzA0Ci0JCQkJaGVpZ2h0ICAgICAJNDEKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlQmluZGluZ3MiIEAyMDUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDIwMQotCQkJICAgIGxvY2F0aW9uICAgCSgtNDA2LCAyNDEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjA2Ci0JCQkJUGFyZW50X1ZpZXcgCUAyMDUKLQkJCQlsb2NhdGlvbiAgIAkoMTg1MSwgMTY3NCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlQmluZGluZ3MiCi0JCQkJcGN0RGlzdCAgICAJMC43NjYzNDcKLQkJCQloZWlnaHQgICAgIAk0MwotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjc4MDM3QiIKLQkJCSAgICBjbGllbnQgICAgIAlAMjAxCi0JCQkgICAgc3VwcGxpZXIgICAJQDE2OAotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMTE0LCAxNTg1KQotCQkJCSgxMTE0LCAxNzE2KQotCQkJCSgyMTE1LCAxNzE2KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMTE0LCAxNTg1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyMTE1LCAxNzE2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwNwotCQkJCVBhcmVudF9WaWV3IAlAMjA1Ci0JCQkJbG9jYXRpb24gICAJKDIwNTMsIDE2NzcpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC45NDUwNzQKLQkJCQloZWlnaHQgICAgIAk0MAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIwOAotCQkJCVBhcmVudF9WaWV3IAlAMjA1Ci0JCQkJbG9jYXRpb24gICAJKDIwMTQsIDE3NTQpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTU4Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC45MTEwNzIKLQkJCQloZWlnaHQgICAgIAkzOAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlNlcnZpY2UiIEAyMDkKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc09wZXJhdGlvbiAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE4NDAsIDIwNDgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyMDkKLQkJCWxvY2F0aW9uICAgCSgxNjI4LCAxOTY5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQyNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlNlcnZpY2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOEYwMDJGOCIKLQkJICAgIHdpZHRoICAgICAgCTQ0MgotCQkgICAgaGVpZ2h0ICAgICAJMTgyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMjMiIEAyMTAKLQkJICAgIGxvY2F0aW9uICAgCSgxMDY2LCAxNTMyKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNjdCMDMxMSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMjQiIEAyMTEKLQkJCSAgICBQYXJlbnRfVmlldyAJQDIxMAotCQkJICAgIGxvY2F0aW9uICAgCSgtNTIxLCAtMTEyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIxMgotCQkJCVBhcmVudF9WaWV3IAlAMjExCi0JCQkJbG9jYXRpb24gICAJKDEwMjUsIDY3MCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUU2N0QwMDdGIgotCQkJICAgIGNsaWVudCAgICAgCUAyMTAKLQkJCSAgICBzdXBwbGllciAgIAlAMTY5Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTA2NiwgMTUzMikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTA2NiwgNDUzKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIxMwotCQkJCVBhcmVudF9WaWV3IAlAMjExCi0JCQkJbG9jYXRpb24gICAJKDExMDksIDc1NikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjcxOTY5NwotCQkJCWhlaWdodCAgICAgCTQzCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZVNlcnZpY2VzIiBAMjE0Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAyMTAKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTUyMSwgLTExMikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMTUKLQkJCQlQYXJlbnRfVmlldyAJQDIxNAotCQkJCWxvY2F0aW9uICAgCSgxMzkzLCAyMDI4KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTIwNAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VTZXJ2aWNlcyIKLQkJCQlwY3REaXN0ICAgIAkwLjc5MTgyNAotCQkJCWhlaWdodCAgICAgCTMyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUU2N0QwMDg5IgotCQkJICAgIGNsaWVudCAgICAgCUAyMTAKLQkJCSAgICBzdXBwbGllciAgIAlAMjA5Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDEwNjYsIDE1MzIpCi0JCQkJKDEwNjYsIDIwNTkpCi0JCQkJKDE2MTksIDIwNTkpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDEwNjYsIDE1MzIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE2MTksIDIwNTkpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjE2Ci0JCQkJUGFyZW50X1ZpZXcgCUAyMTQKLQkJCQlsb2NhdGlvbiAgIAkoMTU1NCwgMjAzMSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjk0MDE5NwotCQkJCWhlaWdodCAgICAgCTI5Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjE3Ci0JCQkJUGFyZW50X1ZpZXcgCUAyMTQKLQkJCQlsb2NhdGlvbiAgIAkoMTUzMiwgMjExMykKLQkJCQlhbmNob3IgICAgIAkzCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNTgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIntvcmRlcmVkfSIKLQkJCQlwY3REaXN0ICAgIAkwLjkyMDUxNQotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTEpKSkpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDIxOAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMUY4MDM4MiIKLQkJICAgIGNsaWVudCAgICAgCUAxNjkKLQkJICAgIHN1cHBsaWVyICAgCUAxNjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTA2NCwgMjYzKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDc4NSwgMjYzKSkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjEuMyBFeHRlbnNpYmlsaXR5IgotCSAgICBxdWlkICAgICAgIAkiM0FENjBDNTEwMTkyIgotCSAgICB0aXRsZSAgICAgIAkiMi4xLjMgRXh0ZW5zaWJpbGl0eSIKLQkgICAgem9vbSAgICAgICAJODAKLQkgICAgbWF4X2hlaWdodCAJMjgzNTAKLQkgICAgbWF4X3dpZHRoICAJMjE2MDAKLQkgICAgb3JpZ2luX3ggICAJMAotCSAgICBvcmlnaW5feSAgIAk1NjQKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQb3J0IiBAMjE5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDMzNjAsIDI1MjgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyMTkKLQkJCWxvY2F0aW9uICAgCSgzMjc5LCAyNDc2KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBvcnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOTE3MDI4NiIKLQkJICAgIGhlaWdodCAgICAgCTEyOAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpTZXJ2aWNlIiBAMjIwCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDMxNjgsIDIzNTIpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyMjAKLQkJCWxvY2F0aW9uICAgCSgzMDg3LCAyMjk5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlNlcnZpY2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEOEYwMDJGOCIKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEAyMjEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDI3ODQsIDIwOCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIyMQotCQkJbG9jYXRpb24gICAJKDIzOTEsIDE4NCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3ODYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjIxCi0JCQlsb2NhdGlvbiAgIAkoMjM5MSwgMTM0KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3ODYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMTI0MDJBQiIKLQkJICAgIHdpZHRoICAgICAgCTgwNAotCQkgICAgaGVpZ2h0ICAgICAJMTcyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlR5cGVzIiBAMjIyCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDUyOCwgMjQzMikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIyMgotCQkJbG9jYXRpb24gICAJKDQ0NywgMjM4MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxNjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJUeXBlcyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QkU5QTYwM0E4IgotCQkgICAgaGVpZ2h0ICAgICAJMTI4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkV4dGVuc2libGVFbGVtZW50IiBAMjIzCi0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEwNzIsIDczNikKLQkJICAgIGZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJaXRhbGljcyAgICAJVFJVRSkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIyMwotCQkJbG9jYXRpb24gICAJKDgwMSwgNjI4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU0MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkV4dGVuc2libGVFbGVtZW50IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkNGQTAzM0EiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAyMjMKLQkJCWxvY2F0aW9uICAgCSg4MDEsIDY4OSkKLQkJCWljb25fc3R5bGUgCSJJY29uIgotCQkJZmlsbF9jb2xvciAJMTY3NzcyMTUKLQkJCWFuY2hvciAgICAgCTIKLQkJCW5saW5lcyAgICAgCTMKLQkJCW1heF93aWR0aCAgCTUzNCkKLQkJICAgIHdpZHRoICAgICAgCTU2MAotCQkgICAgaGVpZ2h0ICAgICAJMjQwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRUcmVlVmlldyAiIiBAMjI0Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTAyMiwgMjA1NikKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCSgxMDIyLCAyMDU2KQotCQkJKDEwMjIsIDg1NikpKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyMjUKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUIwMTAzMTEiCi0JCSAgICBjbGllbnQgICAgIAlAMjIyCi0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDQ3MiwgMjM2OCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg0NzIsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJpbGl0eUVsZW1lbnQiIEAyMjYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjgwMCwgNzM2KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjI2Ci0JCQlsb2NhdGlvbiAgIAkoMjUyOCwgNjMxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU0NQotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkV4dGVuc2liaWxpdHlFbGVtZW50IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1REJCNjAyQTkiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAyMjYKLQkJCWxvY2F0aW9uICAgCSgyNTI4LCA2OTIpCi0JCQlpY29uX3N0eWxlIAkiSWNvbiIKLQkJCWZpbGxfY29sb3IgCTE2Nzc3MjE1Ci0JCQlhbmNob3IgICAgIAkyCi0JCQlubGluZXMgICAgIAkzCi0JCQltYXhfd2lkdGggIAk0NjUpCi0JCSAgICB3aWR0aCAgICAgIAk1NjMKLQkJICAgIGhlaWdodCAgICAgCTIzNAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDI1IiBAMjI3Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTkzNSwgNzIwKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGRDEzMDA3OSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMjYiIEAyMjgKLQkJCSAgICBQYXJlbnRfVmlldyAJQDIyNwotCQkJICAgIGxvY2F0aW9uICAgCSg3NjcsIDYwOCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMjkKLQkJCQlQYXJlbnRfVmlldyAJQDIyOAotCQkJCWxvY2F0aW9uICAgCSgxNDY5LCA2NzkpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRDVGRDE0MDE5RSIKLQkJCSAgICBjbGllbnQgICAgIAlAMjI3Ci0JCQkgICAgc3VwcGxpZXIgICAJQDIyMwotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE5MzUsIDcyMCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTM1MiwgNzIwKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIzMAotCQkJCVBhcmVudF9WaWV3IAlAMjI4Ci0JCQkJbG9jYXRpb24gICAJKDE0NDYsIDY3NikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMS4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjgzOTY5NQotCQkJCWhlaWdodCAgICAgCTQ1Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiZUV4dGVuc2liaWxpdHlFbGVtZW50cyIgQDIzMQotCQkJICAgIFBhcmVudF9WaWV3IAlAMjI3Ci0JCQkgICAgbG9jYXRpb24gICAJKDc2NywgNjA4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDIzMgotCQkJCVBhcmVudF9WaWV3IAlAMjMxCi0JCQkJbG9jYXRpb24gICAJKDIxNTUsIDU3MCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk0NTAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkJCXBjdERpc3QgICAgCTAuMzc5MDcwCi0JCQkJaGVpZ2h0ICAgICAJMTUxCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUZEMTQwMTlEIgotCQkJICAgIGNsaWVudCAgICAgCUAyMjcKLQkJCSAgICBzdXBwbGllciAgIAlAMjI2Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTkzNSwgNzIwKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNTE5LCA3MjApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjMzCi0JCQkJUGFyZW50X1ZpZXcgCUAyMzEKLQkJCQlsb2NhdGlvbiAgIAkoMjM0OCwgNjc1KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuNzA5NDAyCi0JCQkJaGVpZ2h0ICAgICAJNDYKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyMzQKLQkJCQlQYXJlbnRfVmlldyAJQDIzMQotCQkJCWxvY2F0aW9uICAgCSgyMzAzLCA4MTIpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTY0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC42MzI0NzkKLQkJCQloZWlnaHQgICAgIAk5MgotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OldTRExFbGVtZW50IiBAMjM1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE2ODAsIDI0MCkKLQkJICAgIGZvbnQgICAgICAgCShvYmplY3QgRm9udAotCQkJaXRhbGljcyAgICAJVFJVRSkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDIzNQotCQkJbG9jYXRpb24gICAJKDEzMDIsIDEzMikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk3NTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJXU0RMRWxlbWVudCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM2QTMwMkREIgotCQkgICAgY29tcGFydG1lbnQgCShvYmplY3QgQ29tcGFydG1lbnQKLQkJCVBhcmVudF9WaWV3IAlAMjM1Ci0JCQlsb2NhdGlvbiAgIAkoMTMwMiwgMTkzKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlmaWxsX2NvbG9yIAkxNjc3NzIxNQotCQkJYW5jaG9yICAgICAJMgotCQkJbmxpbmVzICAgICAJMwotCQkJbWF4X3dpZHRoICAJNzU2KQotCQkgICAgd2lkdGggICAgICAJNzc0Ci0JCSAgICBoZWlnaHQgICAgIAkyNDAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFRyZWVWaWV3ICIiIEAyMzYKLQkJICAgIGxvY2F0aW9uICAgCSgxNjc0LCA1MTkpCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgc3VwcGxpZXIgICAJQDIzNQotCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkoMTY3NCwgNTE5KQotCQkJKDE2NzQsIDM2MCkpKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyMzcKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QjE0OTAzRDAiCi0JCSAgICBjbGllbnQgICAgIAlAMjI2Ci0JCSAgICBzdXBwbGllciAgIAlAMjIxCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI5MTEsIDYxOSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyOTExLCAyOTQpKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyMzgKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQkRERjUzNTAyQzMiCi0JCSAgICBjbGllbnQgICAgIAlAMjI2Ci0JCSAgICBzdXBwbGllciAgIAlAMjM1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI2NjMsIDYxOSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNjYzLCA1MTkpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMzYpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IiBAMjM5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDMwODgsIDE0NTYpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyMzkKLQkJCWxvY2F0aW9uICAgCSgyNjI1LCAxMzUxKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTkyNwotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0NCMjRBQzAwMkFFIgotCQkgICAgd2lkdGggICAgICAJOTQ1Ci0JCSAgICBoZWlnaHQgICAgIAkyMzUKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI0MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNDQjI0QUVDMDFDQiIKLQkJICAgIGNsaWVudCAgICAgCUAyMzkKLQkJICAgIHN1cHBsaWVyICAgCUAyMjYKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMjY5MiwgMTMzOSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNjkyLCA4NTMpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNjMiIEAyNDEKLQkJICAgIGxvY2F0aW9uICAgCSgzNTM2LCAxNzgyKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNzg5NkEyMDI2RSIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNjQiIEAyNDIKLQkJCSAgICBQYXJlbnRfVmlldyAJQDI0MQotCQkJICAgIGxvY2F0aW9uICAgCSgxNTA0LCAzOTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjQzCi0JCQkJUGFyZW50X1ZpZXcgCUAyNDIKLQkJCQlsb2NhdGlvbiAgIAkoMzY5MSwgMTQyOCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNjAKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIiIKLQkJCQlwY3REaXN0ICAgIAkwLjgwMDAwMAotCQkJCWhlaWdodCAgICAgCTQyCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0Y3ODk2QTcwMTJCIgotCQkJICAgIGNsaWVudCAgICAgCUAyNDEKLQkJCSAgICBzdXBwbGllciAgIAlAMjM5Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDM1MzYsIDE3ODIpCi0JCQkJKDM3MjAsIDE3ODIpCi0JCQkJKDM3MjAsIDE0NjkpCi0JCQkJKDM1NjAsIDE0NjkpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDM1MzYsIDE3ODIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDM1NjAsIDE0NjkpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjQ0Ci0JCQkJUGFyZW50X1ZpZXcgCUAyNDIKLQkJCQlsb2NhdGlvbiAgIAkoMzYyNywgMTUyMykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMSIKLQkJCQlwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTApKQotCQkJKG9iamVjdCBSb2xlVmlldyAiY2hpbGRyZW4iIEAyNDUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDI0MQotCQkJICAgIGxvY2F0aW9uICAgCSgxNTA0LCAzOTApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjQ2Ci0JCQkJUGFyZW50X1ZpZXcgCUAyNDUKLQkJCQlsb2NhdGlvbiAgIAkoMjk3MCwgMTcwNikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNjgKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitjaGlsZHJlbiIKLQkJCQlwY3REaXN0ICAgIAkwLjc5ODU2MQotCQkJCWhlaWdodCAgICAgCTExOAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNGNzg5NkE3MDEyQyIKLQkJCSAgICBjbGllbnQgICAgIAlAMjQxCi0JCQkgICAgc3VwcGxpZXIgICAJQDIzOQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgzNTM2LCAxNzgyKQotCQkJCSgzMDg3LCAxNzgyKQotCQkJCSgzMDg3LCAxNTczKSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzNTM2LCAxNzgyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzMDg3LCAxNTczKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI0NwotCQkJCVBhcmVudF9WaWV3IAlAMjQ1Ci0JCQkJbG9jYXRpb24gICAJKDMxNDEsIDE2MzkpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjAuLioiCi0JCQkJcGN0RGlzdCAgICAJMC45MDAwMDAKLQkJCQloZWlnaHQgICAgIAk1NAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmciIEAyNDgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMjAwMCwgMjQxNikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI0OAotCQkJbG9jYXRpb24gICAJKDE5MTgsIDIzNjMpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMTY0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiQmluZGluZyIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUQyODYwMjYxIgotCQkgICAgd2lkdGggICAgICAJMTgyCi0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI0OQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQTBGMDJGMCIKLQkJICAgIGNsaWVudCAgICAgCUAyNDgKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTk5NSwgMjM1MSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxOTk1LCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNTAKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkUzQzAzRDQiCi0JCSAgICBjbGllbnQgICAgIAlAMjIzCi0JCSAgICBzdXBwbGllciAgIAlAMjM1Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDExODUsIDYxNikKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMTg1LCA1MTkpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMzYpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6UG9ydFR5cGUiIEAyNTEKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTA4OCwgMjQzMikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI1MQotCQkJbG9jYXRpb24gICAJKDk5MCwgMjM3OSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxOTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJQb3J0VHlwZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM3RjAwMUE1IgotCQkgICAgd2lkdGggICAgICAJMjE0Ci0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ09wZXJhdGlvbiIgQDI1MgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMTEyLCAyNjg4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjUyCi0JCQlsb2NhdGlvbiAgIAkoMTkzOSwgMjYzNSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzNDYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nT3BlcmF0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDNDQjAxNDUiCi0JCSAgICB3aWR0aCAgICAgIAkzNjQKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpGYXVsdCIgQDI1MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxODcyLCAzMzYwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjUzCi0JCQlsb2NhdGlvbiAgIAkoMTc5MSwgMzMwNykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxNjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJGYXVsdCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4QkUwMTA4IgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdGYXVsdCIgQDI1NAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgzMDA4LCAyODY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjU0Ci0JCQlsb2NhdGlvbiAgIAkoMjg4MCwgMjgxMSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nRmF1bHQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTlFMDNBNiIKLQkJICAgIHdpZHRoICAgICAgCTI3NAotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNTUKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOTM4NjAyQzkiCi0JCSAgICBjbGllbnQgICAgIAlAMjU0Ci0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDMwMDgsIDI3OTkpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzAwOCwgMjA1NikKLQkJICAgIGRyYXdTdXBwbGllciAJQDIyNCkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJbXBvcnQiIEAyNTYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzIwLCAyNDMyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjU2Ci0JCQlsb2NhdGlvbiAgIAkoMjM5LCAyMzc5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkltcG9ydCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUU0RjkwM0RFIgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNTcKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RUU1ODAzN0EiCi0JCSAgICBjbGllbnQgICAgIAlAMjU2Ci0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDI2NSwgMjM2NykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgyNjUsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RGVmaW5pdGlvbiIgQDI1OAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNDQsIDIyMjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNTgKLQkJCWxvY2F0aW9uICAgCSg0MiwgMjE2MykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyMDQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJEZWZpbml0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICB3aWR0aCAgICAgIAkyMjIKLQkJICAgIGhlaWdodCAgICAgCTE0NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpJbnB1dCIgQDI1OQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNDU2LCAzMzYwKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjU5Ci0JCQlsb2NhdGlvbiAgIAkoMTM3NSwgMzMwNykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkxNjIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJbnB1dCIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFMDc4OUYwMDU5IgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkJpbmRpbmdJbnB1dCIgQDI2MAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyMzM2LCAyODY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjYwCi0JCQlsb2NhdGlvbiAgIAkoMjIwOCwgMjgxMSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyNTYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nSW5wdXQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTA4QTgyMDJENCIKLQkJICAgIHdpZHRoICAgICAgCTI3NAotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNjEKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg1QjU5QjAwNzIiCi0JCSAgICBjbGllbnQgICAgIAlAMjYwCi0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIzMzYsIDI3OTkpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjMzNiwgMjA1NikKLQkJICAgIGRyYXdTdXBwbGllciAJQDIyNCkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpPdXRwdXQiIEAyNjIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTY2NCwgMzM2MCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDI2MgotCQkJbG9jYXRpb24gICAJKDE1ODMsIDMzMDcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMTYyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiT3V0cHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwNzhCNjAyMzIiCi0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6QmluZGluZ091dHB1dCIgQDI2MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgyNjcyLCAyODY0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjYzCi0JCQlsb2NhdGlvbiAgIAkoMjUyNywgMjgxMSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkyOTAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJCaW5kaW5nT3V0cHV0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUUwOEE4RjAyOEMiCi0JCSAgICB3aWR0aCAgICAgIAkzMDgKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjY0Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NUI1QTQwMjdFIgotCQkgICAgY2xpZW50ICAgICAJQDI2MwotCQkgICAgc3VwcGxpZXIgICAJQDIyMwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyNjcyLCAyNzk5KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDI2NzIsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6T3BlcmF0aW9uIiBAMjY1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEyNjQsIDI2ODgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyNjUKLQkJCWxvY2F0aW9uICAgCSgxMTU3LCAyNjM1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTIxNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk9wZXJhdGlvbiIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM4MEQwM0NFIgotCQkgICAgd2lkdGggICAgICAJMjMyCi0JCSAgICBoZWlnaHQgICAgIAkxMzAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI2NgotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRTlERTk4MDAzQyIKLQkJICAgIGNsaWVudCAgICAgCUAyNjUKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTI2NCwgMjYyMykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMjY0LCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiIEAyNjcKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoOTEyLCAyNjg4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjY3Ci0JCQlsb2NhdGlvbiAgIAkoODMxLCAyNjM1KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBhcnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJICAgIGhlaWdodCAgICAgCTEzMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjY4Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZEQjgwM0Q0IgotCQkgICAgY2xpZW50ICAgICAJQDI1OAotCQkgICAgc3VwcGxpZXIgICAJQDIyMwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMDgsIDIxNTEpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjA4LCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNjkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg5N0UyMzAyMzciCi0JCSAgICBjbGllbnQgICAgIAlAMjY3Ci0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDkwNSwgMjYyMykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg5MDUsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDOUI3MDE1MCIKLQkJICAgIGNsaWVudCAgICAgCUAyNTEKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTA3NywgMjM2NykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMDc3LCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNzEKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ2MDA5MjAyRjciCi0JCSAgICBjbGllbnQgICAgIAlAMjUyCi0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIxMDQsIDI2MjMpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjEwNCwgMjA1NikKLQkJICAgIGRyYXdTdXBwbGllciAJQDIyNCkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjcyCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZBMjAwMjVFIgotCQkgICAgY2xpZW50ICAgICAJQDIyMAotCQkgICAgc3VwcGxpZXIgICAJQDIyMwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzMTUwLCAyMjg3KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDMxNTAsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3MwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDYwMENCMDBBQSIKLQkJICAgIGNsaWVudCAgICAgCUAyMTkKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzM0MiwgMjQ2NCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgzMzQyLCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok1lc3NhZ2UiIEAyNzQKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNzY4LCAyNDMyKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjc0Ci0JCQlsb2NhdGlvbiAgIAkoNjY5LCAyMzc5KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTE5OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk1lc3NhZ2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDOTU5MDA3OCIKLQkJICAgIHdpZHRoICAgICAgCTIxNgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyNzUKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RDA1NTAxQzQiCi0JCSAgICBjbGllbnQgICAgIAlAMjc0Ci0JCSAgICBzdXBwbGllciAgIAlAMjIzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDcxNCwgMjM2NykKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg3MTQsIDIwNTYpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyMjQpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6TWVzc2FnZVJlZmVyZW5jZSIgQDI3NgotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNjQ4LCAyODY0KQotCQkgICAgZm9udCAgICAgICAJKG9iamVjdCBGb250Ci0JCQlpdGFsaWNzICAgIAlUUlVFKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjc2Ci0JCQlsb2NhdGlvbiAgIAkoMTQ1NiwgMjc4MSkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAkzODQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJNZXNzYWdlUmVmZXJlbmNlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzFEQjAyREMiCi0JCSAgICBjb21wYXJ0bWVudCAJKG9iamVjdCBDb21wYXJ0bWVudAotCQkJUGFyZW50X1ZpZXcgCUAyNzYKLQkJCWxvY2F0aW9uICAgCSgxNDU2LCAyODQyKQotCQkJaWNvbl9zdHlsZSAJIkljb24iCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMgotCQkJbmxpbmVzICAgICAJMgotCQkJbWF4X3dpZHRoICAJMzEyKQotCQkgICAgd2lkdGggICAgICAJNDAyCi0JCSAgICBoZWlnaHQgICAgIAkxOTAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI3NwotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNzYyQTZBMDMwOCIKLQkJICAgIGNsaWVudCAgICAgCUAyNzYKLQkJICAgIHN1cHBsaWVyICAgCUAyMjMKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTYzNiwgMjc2OSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNjM2LCAyMDU2KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjI0KQotCQkob2JqZWN0IEluaGVyaXRUcmVlVmlldyAiIiBAMjc4Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTY1OSwgMzA1NSkKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBzdXBwbGllciAgIAlAMjc2Ci0JCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCSgxNjU5LCAzMDU1KQotCQkJKDE2NTksIDI5NTkpKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMjc5Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2NzcyMzUwMEREIgotCQkgICAgY2xpZW50ICAgICAJQDI2MgotCQkgICAgc3VwcGxpZXIgICAJQDI3NgotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNjgwLCAzMjk1KQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE2ODAsIDMwNTUpCi0JCSAgICBkcmF3U3VwcGxpZXIgCUAyNzgpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDI4MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNGNjc3MjI4MDJFNyIKLQkJICAgIGNsaWVudCAgICAgCUAyNTkKLQkJICAgIHN1cHBsaWVyICAgCUAyNzYKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQ3MiwgMzI5NSkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDcyLCAzMDU1KQotCQkgICAgZHJhd1N1cHBsaWVyIAlAMjc4KQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAyODEKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzRjY3NzIzRDAzMTkiCi0JCSAgICBjbGllbnQgICAgIAlAMjUzCi0JCSAgICBzdXBwbGllciAgIAlAMjc2Ci0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE4OTAsIDMyOTUpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTg5MCwgMzA1NSkKLQkJICAgIGRyYXdTdXBwbGllciAJQDI3OCkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmciCi0JICAgIHF1aWQgICAgICAgCSIzQUU4RUQ3MjAxQkQiCi0JICAgIHRpdGxlICAgICAgCSIyLjEuMSBOYW1pbmcgYW5kIExpbmtpbmciCi0JICAgIHpvb20gICAgICAgCTkwCi0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklJbXBvcnQiIEAyODIKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTcxMiwgMjI0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjgyCi0JCQlsb2NhdGlvbiAgIAkoMTQyMiwgMTc3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTU4MAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklJbXBvcnQiKQotCQkgICAgc3RlcmVvdHlwZSAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjgyCi0JCQlsb2NhdGlvbiAgIAkoMTQyMiwgMTI3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCWFuY2hvciAgICAgCTEwCi0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1ODAKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSI8PEludGVyZmFjZT4+IikKLQkJICAgIGljb24gICAgICAgCSJJbnRlcmZhY2UiCi0JCSAgICBpY29uX3N0eWxlIAkiTGFiZWwiCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRCMjAyMDExOSIKLQkJICAgIHdpZHRoICAgICAgCTU5OAotCQkgICAgaGVpZ2h0ICAgICAJMjE4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6Ok5hbWVzcGFjZSIgQDI4MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg0MzIsIDExMzYpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyODMKLQkJCWxvY2F0aW9uICAgCSgyMDIsIDEwNDEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDYxCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTmFtZXNwYWNlIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUVBM0NEMzAwMzAiCi0JCSAgICB3aWR0aCAgICAgIAk0NzkKLQkJICAgIGhlaWdodCAgICAgCTIxNQotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp4c2Q6OlhTRFNjaGVtYSIgQDI4NAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNjMyLCAxMjE2KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMjg0Ci0JCQlsb2NhdGlvbiAgIAkoMTI5NCwgMTE0MikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk2NzYKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJYU0RTY2hlbWEiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjM3NEIxODI1MDBCQiIKLQkJICAgIHdpZHRoICAgICAgCTY5NAotCQkgICAgaGVpZ2h0ICAgICAJMTczCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iIEAyODUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoNDAwLCAzODQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyODUKLQkJCWxvY2F0aW9uICAgCSgxNjQsIDIzNikKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0NzIKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJEZWZpbml0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTQzRjAwOEUiCi0JCSAgICB3aWR0aCAgICAgIAk0OTAKLQkJICAgIGhlaWdodCAgICAgCTMyMAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDQxIiBAMjg2Ci0JCSAgICBsb2NhdGlvbiAgIAkoMzA5LCA3ODYpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FFQTNENTUwMDJEIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlTmFtZXNwYWNlcyIgQDI4NwotCQkJICAgIFBhcmVudF9WaWV3IAlAMjg2Ci0JCQkgICAgbG9jYXRpb24gICAJKC05MSwgMjU4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDI4OAotCQkJCVBhcmVudF9WaWV3IAlAMjg3Ci0JCQkJbG9jYXRpb24gICAJKDQ2MSwgOTU2KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTI4OAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VOYW1lc3BhY2VzIgotCQkJCXBjdERpc3QgICAgCTAuNjk4ODQyCi0JCQkJaGVpZ2h0ICAgICAJMTUyCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FFQTNENTYwMzMyIgotCQkJICAgIGNsaWVudCAgICAgCUAyODYKLQkJCSAgICBzdXBwbGllciAgIAlAMjgzCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzA5LCA3ODYpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDMwOSwgMTAyOSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAyODkKLQkJCQlQYXJlbnRfVmlldyAJQDI4NwotCQkJCWxvY2F0aW9uICAgCSgyNDgsIDk3MykKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjc2ODcwNwotCQkJCWhlaWdodCAgICAgCTYyCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjkwCi0JCQkJUGFyZW50X1ZpZXcgCUAyODcKLQkJCQlsb2NhdGlvbiAgIAkoMjI4LCA5MTMpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC41MjUwOTcKLQkJCQloZWlnaHQgICAgIAk4MgotCQkJCW9yaWVudGF0aW9uIAkxKSkKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDQyIiBAMjkxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAyODYKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTkxLCAyNTgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjkyCi0JCQkJUGFyZW50X1ZpZXcgCUAyOTEKLQkJCQlsb2NhdGlvbiAgIAkoMjY4LCA1OTIpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE5MgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUVBM0Q1NjAzMjgiCi0JCQkgICAgY2xpZW50ICAgICAJQDI4NgotCQkJICAgIHN1cHBsaWVyICAgCUAyODUKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgzMDksIDc4NikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMzA5LCA1NDQpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjkzCi0JCQkJUGFyZW50X1ZpZXcgCUAyOTEKLQkJCQlsb2NhdGlvbiAgIAkoMjM5LCA1ODMpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44NDQ5NjEKLQkJCQloZWlnaHQgICAgIAk3MQotCQkJCW9yaWVudGF0aW9uIAkwKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkltcG9ydCIgQDI5NAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNDcyLCA3MjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAyOTQKLQkJCWxvY2F0aW9uICAgCSgxMjU1LCA1ODApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDM0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiSW1wb3J0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RTRGOTAzREUiCi0JCSAgICB3aWR0aCAgICAgIAk0NTIKLQkJICAgIGhlaWdodCAgICAgCTMwNAotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBBc3NvY2lhdGlvblZpZXdOZXcgIiRVTk5BTUVEJDU1IiBAMjk1Ci0JCSAgICBsb2NhdGlvbiAgIAkoMTQ4NiwgMTAwMSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCMURDQzAyRTUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVTY2hlbWEiIEAyOTYKLQkJCSAgICBQYXJlbnRfVmlldyAJQDI5NQotCQkJICAgIGxvY2F0aW9uICAgCSg1MTAsIC0xMDMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjk3Ci0JCQkJUGFyZW50X1ZpZXcgCUAyOTYKLQkJCQlsb2NhdGlvbiAgIAkoMTczNywgMTAxOCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlU2NoZW1hIgotCQkJCXBjdERpc3QgICAgCTAuNTkyNTkzCi0JCQkJaGVpZ2h0ICAgICAJMTA1Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFEQ0UwMjcwIgotCQkJICAgIGNsaWVudCAgICAgCUAyOTUKLQkJCSAgICBzdXBwbGllciAgIAlAMjg0Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDE0ODYsIDEwMDEpCi0JCQkJKDE2MzIsIDEwMDEpCi0JCQkJKDE2MzIsIDExMzApKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE0ODYsIDEwMDEpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDE2MzIsIDExMzApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMjk4Ci0JCQkJUGFyZW50X1ZpZXcgCUAyOTYKLQkJCQlsb2NhdGlvbiAgIAkoMTU2MywgMTAxOCkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjU5MjU5MwotCQkJCWhlaWdodCAgICAgCTcwCi0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNTYiIEAyOTkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDI5NQotCQkJICAgIGxvY2F0aW9uICAgCSg1MTAsIC0xMDMpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFEQ0UwMjdBIgotCQkJICAgIGNsaWVudCAgICAgCUAyOTUKLQkJCSAgICBzdXBwbGllciAgIAlAMjk0Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTQ4NiwgODcyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDg2LCA4NzIpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ0MyIgQDMwMAotCQkgICAgbG9jYXRpb24gICAJKDEwODcsIDQwMykKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUVBM0UzQTAwMkQiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDQ0IiBAMzAxCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzMDAKLQkJCSAgICBsb2NhdGlvbiAgIAkoNjg3LCAtMTI1KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMwMgotCQkJCVBhcmVudF9WaWV3IAlAMzAxCi0JCQkJbG9jYXRpb24gICAJKDE0MDYsIDQ4MCkKLQkJCQloaWRkZW4gICAgIAlUUlVFCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJNDUwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNBRUEzRTNDMDFGMiIKLQkJCSAgICBjbGllbnQgICAgIAlAMzAwCi0JCQkgICAgc3VwcGxpZXIgICAJQDI5NAotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgxMDg3LCA0MDMpCi0JCQkJKDEzNjQsIDQwMykKLQkJCQkoMTM2NCwgNTY4KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMDg3LCA0MDMpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDEzNjQsIDU2OCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlRGVmaW5pdGlvbiIgQDMwMwotCQkJICAgIFBhcmVudF9WaWV3IAlAMzAwCi0JCQkgICAgbG9jYXRpb24gICAJKDY4NywgLTEyNSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMDQKLQkJCQlQYXJlbnRfVmlldyAJQDMwMwotCQkJCWxvY2F0aW9uICAgCSg4MDUsIDM2MykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMTYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRGVmaW5pdGlvbiIKLQkJCQlwY3REaXN0ICAgIAkwLjYzNzUzMgotCQkJCWhlaWdodCAgICAgCTQxCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FFQTNFM0MwMUU4IgotCQkJICAgIGNsaWVudCAgICAgCUAzMDAKLQkJCSAgICBzdXBwbGllciAgIAlAMjg1Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTA4NywgNDAzKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg2NDUsIDQwMykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMDUKLQkJCQlQYXJlbnRfVmlldyAJQDMwMwotCQkJCWxvY2F0aW9uICAgCSg3MjcsIDQ1NikKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjgxNDkxMAotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTApKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQxMyIgQDMwNgotCQkgICAgbG9jYXRpb24gICAJKDczNywgODI2KQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNDODY0REZGMDJFQyIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTQiIEAzMDcKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMwNgotCQkJICAgIGxvY2F0aW9uICAgCSgtNjcxLCAxMDYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzA4Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMDcKLQkJCQlsb2NhdGlvbiAgIAkoNTUyLCA2NDcpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTQ1MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQzg2NERGRjAyRUUiCi0JCQkgICAgY2xpZW50ICAgICAJQDMwNgotCQkJICAgIHN1cHBsaWVyICAgCUAyODUKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoNzM3LCA4MjYpCi0JCQkJKDUxMCwgODI2KQotCQkJCSg1MTAsIDU0NCkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNzM3LCA4MjYpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDUxMCwgNTQ0KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMwOQotCQkJCVBhcmVudF9WaWV3IAlAMzA3Ci0JCQkJbG9jYXRpb24gICAJKDQ1NywgNTk1KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuOTAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNTQKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlSW1wb3J0cyIgQDMxMAotCQkJICAgIFBhcmVudF9WaWV3IAlAMzA2Ci0JCQkgICAgbG9jYXRpb24gICAJKC02NzEsIDEwNikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMTEKLQkJCQlQYXJlbnRfVmlldyAJQDMxMAotCQkJCWxvY2F0aW9uICAgCSgxMTQ0LCA3NzMpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTgwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZUltcG9ydHMiCi0JCQkJcGN0RGlzdCAgICAJMC43OTkxODkKLQkJCQloZWlnaHQgICAgIAk1NAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNDODY0REZGMDJFRCIKLQkJCSAgICBjbGllbnQgICAgIAlAMzA2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDI5NAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDczNywgODI2KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMjQ2LCA4MjYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzEyCi0JCQkJUGFyZW50X1ZpZXcgCUAzMTAKLQkJCQlsb2NhdGlvbiAgIAkoMTE4MCwgODc5KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuODcyMjExCi0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMTMKLQkJCQlQYXJlbnRfVmlldyAJQDMxMAotCQkJCWxvY2F0aW9uICAgCSgxMTYyLCA5MzMpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC44Mzc3MjgKLQkJCQloZWlnaHQgICAgIAkxMDcKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzE0Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0Y2RjIwMEQwMzQwIgotCQkgICAgY2xpZW50ICAgICAJQDI5NAotCQkgICAgc3VwcGxpZXIgICAJQDI4MgotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxNTU1LCA1NjgpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTU1NSwgMzMzKSkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjIgVHlwZXMiCi0JICAgIHF1aWQgICAgICAgCSIzQjg1QUU1OTAzN0UiCi0JICAgIHRpdGxlICAgICAgCSIyLjIgVHlwZXMiCi0JICAgIHpvb20gICAgICAgCTkwCi0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJODEKLQkgICAgaXRlbXMgICAgICAJKGxpc3QgZGlhZ3JhbV9pdGVtX2xpc3QKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp4c2Q6OlhTRFR5cGVEZWZpbml0aW9uIiBAMzE1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDExMzYsIDEyMzIpCi0JCSAgICBmb250ICAgICAgIAkob2JqZWN0IEZvbnQKLQkJCWl0YWxpY3MgICAgCVRSVUUpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMTUKLQkJCWxvY2F0aW9uICAgCSg4OTUsIDExNTcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDgyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiWFNEVHlwZURlZmluaXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCNjZFQ0QzMDJBOSIKLQkJICAgIHdpZHRoICAgICAgCTUwMAotCQkgICAgaGVpZ2h0ICAgICAJMTc0Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnhzZDo6WFNERWxlbWVudERlY2xhcmF0aW9uIiBAMzE2Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDExMzYsIDE2MDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMTYKLQkJCWxvY2F0aW9uICAgCSg5MDYsIDE1MzEpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDYwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiWFNERWxlbWVudERlY2xhcmF0aW9uIikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjY2RUQ1ODAyMTQiCi0JCSAgICB3aWR0aCAgICAgIAk0NzgKLQkJICAgIGhlaWdodCAgICAgCTE2MgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIiBAMzE3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEyODAsIDE5NjgpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMTcKLQkJCWxvY2F0aW9uICAgCSgxMDIyLCAxODI4KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTUxNwotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIk1lc3NhZ2UiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDOTU5MDA3OCIKLQkJICAgIHdpZHRoICAgICAgCTUzNQotCQkgICAgaGVpZ2h0ICAgICAJMzA1Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlBhcnQiIEAzMTgKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMzUyLCAxMTg0KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzE4Ci0JCQlsb2NhdGlvbiAgIAkoMTI4LCAxMDY3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTQ0OAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlBhcnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDRTFDMDMyRSIKLQkJICAgIHdpZHRoICAgICAgCTQ2NgotCQkgICAgaGVpZ2h0ICAgICAJMjU4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNTEiIEAzMTkKLQkJICAgIGxvY2F0aW9uICAgCSg3MzUsIDExNzIpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QjFCRTkwMEM0IgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJ0eXBlRGVmaW5pdGlvbiIgQDMyMAotCQkJICAgIFBhcmVudF9WaWV3IAlAMzE5Ci0JCQkgICAgbG9jYXRpb24gICAJKDE0MywgNjc2KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMyMQotCQkJCVBhcmVudF9WaWV3IAlAMzIwCi0JCQkJbG9jYXRpb24gICAJKDc3NSwgMTEzMykKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyNzYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIit0eXBlRGVmaW5pdGlvbiIKLQkJCQlwY3REaXN0ICAgIAkwLjI2OTAwNgotCQkJCWhlaWdodCAgICAgCTQwCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFCRTkwMzI3IgotCQkJICAgIGNsaWVudCAgICAgCUAzMTkKLQkJCSAgICBzdXBwbGllciAgIAlAMzE1Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNzM1LCAxMTcyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4ODYsIDExNzIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzIyCi0JCQkJUGFyZW50X1ZpZXcgCUAzMjAKLQkJCQlsb2NhdGlvbiAgIAkoODM5LCAxMjA3KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjg4NzA1Ci0JCQkJaGVpZ2h0ICAgICAJMzUKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ1MiIgQDMyMwotCQkJICAgIFBhcmVudF9WaWV3IAlAMzE5Ci0JCQkgICAgbG9jYXRpb24gICAJKDE0MywgNjc2KQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCOEIxQkU5MDMzMSIKLQkJCSAgICBjbGllbnQgICAgIAlAMzE5Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMxOAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDczNSwgMTE3MikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNTg1LCAxMTcyKSkpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkNTMiIEAzMjQKLQkJICAgIGxvY2F0aW9uICAgCSg1MjcsIDE1OTIpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4QjFDMTIwM0IyIgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlbGVtZW50RGVjbGFyYXRpb24iIEAzMjUKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMyNAotCQkJICAgIGxvY2F0aW9uICAgCSgtNjUsIDEwOTYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzI2Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMjUKLQkJCQlsb2NhdGlvbiAgIAkoNjY2LCAxNTU0KQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTM3MgotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK2VsZW1lbnREZWNsYXJhdGlvbiIKLQkJCQlwY3REaXN0ICAgIAkwLjM3NTM5NAotCQkJCWhlaWdodCAgICAgCTM5Ci0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0I4QjFDMTQwMDFDIgotCQkJICAgIGNsaWVudCAgICAgCUAzMjQKLQkJCSAgICBzdXBwbGllciAgIAlAMzE2Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNTI3LCAxNTkyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg4OTcsIDE1OTIpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzI3Ci0JCQkJUGFyZW50X1ZpZXcgCUAzMjUKLQkJCQlsb2NhdGlvbiAgIAkoODA3LCAxNjQ1KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNzU1ODc3Ci0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMSkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQ1NCIgQDMyOAotCQkJICAgIFBhcmVudF9WaWV3IAlAMzI0Ci0JCQkgICAgbG9jYXRpb24gICAJKC02NSwgMTA5NikKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQjhCMUMxNDAwMjYiCi0JCQkgICAgY2xpZW50ICAgICAJQDMyNAotCQkJICAgIHN1cHBsaWVyICAgCUAzMTgKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoNTI3LCAxNTkyKQotCQkJCSg0MzcsIDE1OTIpCi0JCQkJKDQzNywgMTMxMykpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNTI3LCAxNTkyKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg0MzcsIDEzMTMpKSkpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ1NyIgQDMyOQotCQkgICAgbG9jYXRpb24gICAJKDMyMiwgMTkxMSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQzQ2ODI5MzAzRTUiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVNZXNzYWdlIiBAMzMwCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzMjkKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTE0LCAxMTkxKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMzMQotCQkJCVBhcmVudF9WaWV3IAlAMzMwCi0JCQkJbG9jYXRpb24gICAJKDgzOCwgMTg3MikKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMTYKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlTWVzc2FnZSIKLQkJCQlwY3REaXN0ICAgIAkwLjc0ODU2MAotCQkJCWhlaWdodCAgICAgCTQwCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0M0NjgyOTYwMTBFIgotCQkJICAgIGNsaWVudCAgICAgCUAzMjkKLQkJCSAgICBzdXBwbGllciAgIAlAMzE3Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMzIyLCAxOTExKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMDEzLCAxOTExKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDMzMgotCQkJCVBhcmVudF9WaWV3IAlAMzMwCi0JCQkJbG9jYXRpb24gICAJKDk0MywgMTk2NSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjkwMDAwMAotCQkJCWhlaWdodCAgICAgCTU0Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkNTgiIEAzMzMKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMyOQotCQkJICAgIGxvY2F0aW9uICAgCSgtMTQsIDExOTEpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0M0NjgyOTYwMTE4IgotCQkJICAgIGNsaWVudCAgICAgCUAzMjkKLQkJCSAgICBzdXBwbGllciAgIAlAMzE4Ci0JCQkgICAgdmVydGljZXMgICAJKGxpc3QgUG9pbnRzCi0JCQkJKDMyMiwgMTkxMSkKLQkJCQkoMjI5LCAxOTExKQotCQkJCSgyMjksIDEzMTMpKQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDMyMiwgMTkxMSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMjI5LCAxMzEzKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OlR5cGVzIiBAMzM0Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDgwMCwgNjA4KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzM0Ci0JCQlsb2NhdGlvbiAgIAkoNjE1LCA1MTIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMzcxCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiVHlwZXMiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNCOEJFOUE2MDNBOCIKLQkJICAgIHdpZHRoICAgICAgCTM4OQotCQkgICAgaGVpZ2h0ICAgICAJMjE2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OkRlZmluaXRpb24iIEAzMzUKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTc2LCAxNjApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzMzUKLQkJCWxvY2F0aW9uICAgCSg3NCwgMTA3KQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTIwNAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIkRlZmluaXRpb24iKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVFNDNGMDA4RSIKLQkJICAgIHdpZHRoICAgICAgCTIyMgotCQkgICAgaGVpZ2h0ICAgICAJMTMwCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMTUiIEAzMzYKLQkJICAgIGxvY2F0aW9uICAgCSgyMzQsIDYwNCkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUEyNzAyOUYiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgImVUeXBlcyIgQDMzNwotCQkJICAgIFBhcmVudF9WaWV3IAlAMzM2Ci0JCQkgICAgbG9jYXRpb24gICAJKC0xNTAsIDM5NikKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMzgKLQkJCQlQYXJlbnRfVmlldyAJQDMzNwotCQkJCWxvY2F0aW9uICAgCSg0ODAsIDY0MCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkyMDcKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlVHlwZXMiCi0JCQkJcGN0RGlzdCAgICAJMC42NjEwMTcKLQkJCQloZWlnaHQgICAgIAkzNgotCQkJCW9yaWVudGF0aW9uIAkxKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCOEJFQTI5MDM2QSIKLQkJCSAgICBjbGllbnQgICAgIAlAMzM2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMzNAotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDIzNCwgNjA0KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg2MDYsIDYwNCkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzMzkKLQkJCQlQYXJlbnRfVmlldyAJQDMzNwotCQkJCWxvY2F0aW9uICAgCSg1MjYsIDU2OSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uMSIKLQkJCQlwY3REaXN0ICAgIAkwLjc4Mzg4MwotCQkJCWhlaWdodCAgICAgCTM2Ci0JCQkJb3JpZW50YXRpb24gCTApKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMTYiIEAzNDAKLQkJCSAgICBQYXJlbnRfVmlldyAJQDMzNgotCQkJICAgIGxvY2F0aW9uICAgCSgtMTUwLCAzOTYpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzQxCi0JCQkJUGFyZW50X1ZpZXcgCUAzNDAKLQkJCQlsb2NhdGlvbiAgIAkoMTMzLCAzMTMpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTYwCi0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIiCi0JCQkJcGN0RGlzdCAgICAJMC44MDAwMDAKLQkJCQloZWlnaHQgICAgIAk0MgotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNCOEJFQTI5MDM1NiIKLQkJCSAgICBjbGllbnQgICAgIAlAMzM2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDMzNQotCQkJICAgIHZlcnRpY2VzICAgCShsaXN0IFBvaW50cwotCQkJCSgyMzQsIDYwNCkKLQkJCQkoMTc0LCA2MDQpCi0JCQkJKDE3NCwgMjI1KSkKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgyMzQsIDYwNCkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTc0LCAyMjUpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzQyCi0JCQkJUGFyZW50X1ZpZXcgCUAzNDAKLQkJCQlsb2NhdGlvbiAgIAkoMjI4LCAyNzEpCi0JCQkJYW5jaG9yICAgICAJMgotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTUKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIjEuLjEiCi0JCQkJcGN0RGlzdCAgICAJMC44OTc3MjkKLQkJCQloZWlnaHQgICAgIAk1NAotCQkJCW9yaWVudGF0aW9uIAkxKSkpKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklUeXBlcyIgQDM0MwotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg2NDAsIDIyNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM0MwotCQkJbG9jYXRpb24gICAJKDUyNSwgMjAzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTIzMAotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklUeXBlcyIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNDMKLQkJCWxvY2F0aW9uICAgCSg1MjUsIDE1MykKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJMjMwCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0FEQ0JCMjAwNTAiCi0JCSAgICB3aWR0aCAgICAgIAkyNDgKLQkJICAgIGhlaWdodCAgICAgCTE2NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCIgQDM0NAotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxNzI4LCA4MDApCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNDQKLQkJCWxvY2F0aW9uICAgCSgxMzU5LCA3NTMpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNzM5Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNDQzM2MEQ3MDM5QyIKLQkJICAgIHdpZHRoICAgICAgCTc1NwotCQkgICAgaGVpZ2h0ICAgICAJMTE4Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OnhzZDo6WFNEU2NoZW1hIiBAMzQ1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDE4NTYsIDEyMTYpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNDUKLQkJCWxvY2F0aW9uICAgCSgxNTI5LCAxMTAzKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTY1NQotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIlhTRFNjaGVtYSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiMzc0QjE4MjUwMEJCIgotCQkgICAgd2lkdGggICAgICAJNjczCi0JCSAgICBoZWlnaHQgICAgIAkyNTAKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQXNzb2NpYXRpb25WaWV3TmV3ICIkVU5OQU1FRCQ1OSIgQDM0NgotCQkgICAgbG9jYXRpb24gICAJKDE4MjYsIDk3NSkKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQ0MzNjE0NTAwRjIiCi0JCSAgICByb2xldmlld19saXN0IAkobGlzdCBSb2xlVmlld3MKLQkJCShvYmplY3QgUm9sZVZpZXcgIiRVTk5BTUVEJDYwIiBAMzQ3Ci0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNDYKLQkJCSAgICBsb2NhdGlvbiAgIAkoMzA2LCA0NDcpCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0NDMzYxNDYwMjNEIgotCQkJICAgIGNsaWVudCAgICAgCUAzNDYKLQkJCSAgICBzdXBwbGllciAgIAlAMzQ0Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTgyNiwgOTc1KQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxODI2LCA4NTkpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzQ4Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNDcKLQkJCQlsb2NhdGlvbiAgIAkoMTc3NCwgOTAwKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjU2NDg5Ci0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJzY2hlbWEiIEAzNDkKLQkJCSAgICBQYXJlbnRfVmlldyAJQDM0NgotCQkJICAgIGxvY2F0aW9uICAgCSgzMDYsIDQ0NykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzNTAKLQkJCQlQYXJlbnRfVmlldyAJQDM0OQotCQkJCWxvY2F0aW9uICAgCSgyMDA2LCAxMDMzKQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE2OAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiK3NjaGVtYSIKLQkJCQlwY3REaXN0ICAgIAkwLjUwNzU3NgotCQkJCWhlaWdodCAgICAgCTE4MAotCQkJCW9yaWVudGF0aW9uIAkwKQotCQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCQkgICAgcXVpZHUgICAgICAJIjNDQzM2MTQ2MDIzRSIKLQkJCSAgICBjbGllbnQgICAgIAlAMzQ2Ci0JCQkgICAgc3VwcGxpZXIgICAJQDM0NQotCQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDE4MjYsIDk3NSkKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTgyNiwgMTA5MSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzNTEKLQkJCQlQYXJlbnRfVmlldyAJQDM0OQotCQkJCWxvY2F0aW9uICAgCSgxNzg4LCAxMDUwKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNjUxNTE1Ci0JCQkJaGVpZ2h0ICAgICAJMzkKLQkJCQlvcmllbnRhdGlvbiAJMSkpKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzUyCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0NBRENEM0IwMzgwIgotCQkgICAgY2xpZW50ICAgICAJQDMzNAotCQkgICAgc3VwcGxpZXIgICAJQDM0MwotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg3MDUsIDUwMCkKLQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSg3MDUsIDMwNykpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6RXh0ZW5zaWJsZUVsZW1lbnQiIEAzNTMKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBJbmNsdWRlQXR0cmlidXRlIAlUUlVFCi0JCSAgICBJbmNsdWRlT3BlcmF0aW9uIAlUUlVFCi0JCSAgICBsb2NhdGlvbiAgIAkoMTA1NiwgMjI0KQotCQkgICAgZm9udCAgICAgICAJKG9iamVjdCBGb250Ci0JCQlpdGFsaWNzICAgIAlUUlVFKQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzUzCi0JCQlsb2NhdGlvbiAgIAkoODE1LCAxMzApCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDgyCi0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiRXh0ZW5zaWJsZUVsZW1lbnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVGQ0ZBMDMzQSIKLQkJICAgIHdpZHRoICAgICAgCTUwMAotCQkgICAgaGVpZ2h0ICAgICAJMjEyCi0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEluaGVyaXRWaWV3ICIiIEAzNTQKLQkJICAgIHN0ZXJlb3R5cGUgCVRSVUUKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjhCRUIwMTAzMTEiCi0JCSAgICBjbGllbnQgICAgIAlAMzM0Ci0JCSAgICBzdXBwbGllciAgIAlAMzUzCi0JCSAgICBsaW5lX3N0eWxlIAkzCi0JCSAgICBvcmlnaW5fYXR0YWNobWVudCAJKDg1NCwgNTAwKQotCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDg1NCwgMzMwKSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpFeHRlbnNpYmlsaXR5RWxlbWVudCIgQDM1NQotCQkgICAgU2hvd0NvbXBhcnRtZW50U3RlcmVvdHlwZXMgCVRSVUUKLQkJICAgIEluY2x1ZGVBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSgxODI0LCA0NjQpCi0JCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNTUKLQkJCWxvY2F0aW9uICAgCSgxNDkwLCAzNjgpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNjY5Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKQotCQkgICAgaWNvbl9zdHlsZSAJIkljb24iCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVEQkI2MDJBOSIKLQkJICAgIHdpZHRoICAgICAgCTY4NwotCQkgICAgaGVpZ2h0ICAgICAJMjE2Ci0JCSAgICBhbm5vdGF0aW9uIAk4Ci0JCSAgICBhdXRvUmVzaXplIAlUUlVFKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMjUiIEAzNTYKLQkJICAgIGxvY2F0aW9uICAgCSgxMjA2LCA0OTMpCi0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUZEMTMwMDc5IgotCQkgICAgcm9sZXZpZXdfbGlzdCAJKGxpc3QgUm9sZVZpZXdzCi0JCQkob2JqZWN0IFJvbGVWaWV3ICIkVU5OQU1FRCQyNiIgQDM1NwotCQkJICAgIFBhcmVudF9WaWV3IAlAMzU2Ci0JCQkgICAgbG9jYXRpb24gICAJKC01ODYsIDIzNykKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzNTgKLQkJCQlQYXJlbnRfVmlldyAJQDM1NwotCQkJCWxvY2F0aW9uICAgCSgxMTM2LCAzODYpCi0JCQkJaGlkZGVuICAgICAJVFJVRQotCQkJCWFuY2hvciAgICAgCTEKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTQ1MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1RkQxNDAxOUUiCi0JCQkgICAgY2xpZW50ICAgICAJQDM1NgotCQkJICAgIHN1cHBsaWVyICAgCUAzNTMKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoMTIwNiwgNDkzKQotCQkJCSgxMDk0LCA0OTMpCi0JCQkJKDEwOTQsIDMzMCkpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTIwNiwgNDkzKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxMDk0LCAzMzApCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzU5Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNTcKLQkJCQlsb2NhdGlvbiAgIAkoMTA0MiwgMzc3KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuODI4MzI2Ci0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMCkpCi0JCQkob2JqZWN0IFJvbGVWaWV3ICJlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIiBAMzYwCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNTYKLQkJCSAgICBsb2NhdGlvbiAgIAkoLTU4NiwgMjM3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM2MQotCQkJCVBhcmVudF9WaWV3IAlAMzYwCi0JCQkJbG9jYXRpb24gICAJKDExOTYsIDQ1NCkKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk0NDQKLQkJCQlqdXN0aWZ5ICAgIAkwCi0JCQkJbGFiZWwgICAgICAJIitlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIgotCQkJCXBjdERpc3QgICAgCS0wLjAzOTcxMQotCQkJCWhlaWdodCAgICAgCTQwCi0JCQkJb3JpZW50YXRpb24gCTApCi0JCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJCSAgICBxdWlkdSAgICAgIAkiM0FENUZEMTQwMTlEIgotCQkJICAgIGNsaWVudCAgICAgCUAzNTYKLQkJCSAgICBzdXBwbGllciAgIAlAMzU1Ci0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoMTIwNiwgNDkzKQotCQkJICAgIHRlcm1pbmFsX2F0dGFjaG1lbnQgCSgxNDgxLCA0OTMpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzYyCi0JCQkJUGFyZW50X1ZpZXcgCUAzNjAKLQkJCQlsb2NhdGlvbiAgIAkoMTQxNSwgNTQ2KQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIwLi4qIgotCQkJCXBjdERpc3QgICAgCTAuNzY0OTU3Ci0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMSkKLQkJCSAgICBsYWJlbCAgICAgIAkob2JqZWN0IFNlZ0xhYmVsIEAzNjMKLQkJCQlQYXJlbnRfVmlldyAJQDM2MAotCQkJCWxvY2F0aW9uICAgCSgxMzk2LCAzOTIpCi0JCQkJYW5jaG9yICAgICAJMwotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ2Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSJ7b3JkZXJlZH0iCi0JCQkJcGN0RGlzdCAgICAJMC42OTQ5MTUKLQkJCQloZWlnaHQgICAgIAkxMDIKLQkJCQlvcmllbnRhdGlvbiAJMCkpKSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzY0Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0NDMzYyN0YwMEI3IgotCQkgICAgY2xpZW50ICAgICAJQDM0NAotCQkgICAgc3VwcGxpZXIgICAJQDM1NQotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxODEyLCA3NDEpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTgxMiwgNTcyKSkpKQotCShvYmplY3QgQ2xhc3NEaWFncmFtICIyLjMgTWVzc2FnZXMiCi0JICAgIHF1aWQgICAgICAgCSIzQkNFODUzRDAyQzgiCi0JICAgIHRpdGxlICAgICAgCSIyLjMgTWVzc2FnZXMiCi0JICAgIHpvb20gICAgICAgCTg1Ci0JICAgIG1heF9oZWlnaHQgCTI4MzUwCi0JICAgIG1heF93aWR0aCAgCTIxNjAwCi0JICAgIG9yaWdpbl94ICAgCTAKLQkgICAgb3JpZ2luX3kgICAJMAotCSAgICBpdGVtcyAgICAgIAkobGlzdCBkaWFncmFtX2l0ZW1fbGlzdAotCQkob2JqZWN0IENsYXNzVmlldyAiQ2xhc3MiICJMb2dpY2FsIFZpZXc6OndzZGw6OklNZXNzYWdlIiBAMzY1Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgU3VwcHJlc3NBdHRyaWJ1dGUgCVRSVUUKLQkJICAgIEluY2x1ZGVPcGVyYXRpb24gCVRSVUUKLQkJICAgIGxvY2F0aW9uICAgCSg0NDgsIDIyNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM2NQotCQkJbG9jYXRpb24gICAJKDI2NywgMTIyKQotCQkJZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIklNZXNzYWdlIikKLQkJICAgIHN0ZXJlb3R5cGUgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM2NQotCQkJbG9jYXRpb24gICAJKDI2NywgNzIpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJYW5jaG9yICAgICAJMTAKLQkJCW5saW5lcyAgICAgCTEKLQkJCW1heF93aWR0aCAgCTM2MgotCQkJanVzdGlmeSAgICAJMAotCQkJbGFiZWwgICAgICAJIjw8SW50ZXJmYWNlPj4iKQotCQkgICAgaWNvbiAgICAgICAJIkludGVyZmFjZSIKLQkJICAgIGljb25fc3R5bGUgCSJMYWJlbCIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE4QUYwMDRGIgotCQkgICAgd2lkdGggICAgICAJMzgwCi0JCSAgICBoZWlnaHQgICAgIAkzMjgKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgQ2xhc3NWaWV3ICJDbGFzcyIgIkxvZ2ljYWwgVmlldzo6d3NkbDo6SVBhcnQiIEAzNjYKLQkJICAgIFNob3dDb21wYXJ0bWVudFN0ZXJlb3R5cGVzIAlUUlVFCi0JCSAgICBTdXBwcmVzc0F0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEzMjgsIDIyNCkKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM2NgotCQkJbG9jYXRpb24gICAJKDEwMjksIDEyNCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk1OTkKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJJUGFydCIpCi0JCSAgICBzdGVyZW90eXBlIAkob2JqZWN0IEl0ZW1MYWJlbAotCQkJUGFyZW50X1ZpZXcgCUAzNjYKLQkJCWxvY2F0aW9uICAgCSgxMDI5LCA3NCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlhbmNob3IgICAgIAkxMAotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNTk5Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiPDxJbnRlcmZhY2U+PiIpCi0JCSAgICBpY29uICAgICAgIAkiSW50ZXJmYWNlIgotCQkgICAgaWNvbl9zdHlsZSAJIkxhYmVsIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQjg0QTkzRjAxQkUiCi0JCSAgICB3aWR0aCAgICAgIAk2MTcKLQkJICAgIGhlaWdodCAgICAgCTMyNAotCQkgICAgYW5ub3RhdGlvbiAJOCkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpQYXJ0IiBAMzY3Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDEzMTIsIDgxNikKLQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgSXRlbUxhYmVsCi0JCQlQYXJlbnRfVmlldyAJQDM2NwotCQkJbG9jYXRpb24gICAJKDEwNzUsIDY5MCkKLQkJCWZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCQlubGluZXMgICAgIAkxCi0JCQltYXhfd2lkdGggIAk0NzQKLQkJCWp1c3RpZnkgICAgCTAKLQkJCWxhYmVsICAgICAgCSJQYXJ0IikKLQkJICAgIGljb25fc3R5bGUgCSJJY29uIgotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgZmlsbF9jb2xvciAJMTM0MzQ4NzkKLQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0UxQzAzMkUiCi0JCSAgICB3aWR0aCAgICAgIAk0OTIKLQkJICAgIGhlaWdodCAgICAgCTI3NgotCQkgICAgYW5ub3RhdGlvbiAJOAotCQkgICAgYXV0b1Jlc2l6ZSAJVFJVRSkKLQkJKG9iamVjdCBJbmhlcml0VmlldyAiIiBAMzY4Ci0JCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCSAgICBsaW5lX2NvbG9yIAkzMzQyNDg5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0I4NEE5NkQwMkYxIgotCQkgICAgY2xpZW50ICAgICAJQDM2NwotCQkgICAgc3VwcGxpZXIgICAJQDM2NgotCQkgICAgbGluZV9zdHlsZSAJMwotCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSgxMzA0LCA2NzgpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTMwNCwgMzg2KSkKLQkJKG9iamVjdCBDbGFzc1ZpZXcgIkNsYXNzIiAiTG9naWNhbCBWaWV3Ojp3c2RsOjpNZXNzYWdlIiBAMzY5Ci0JCSAgICBTaG93Q29tcGFydG1lbnRTdGVyZW90eXBlcyAJVFJVRQotCQkgICAgSW5jbHVkZUF0dHJpYnV0ZSAJVFJVRQotCQkgICAgSW5jbHVkZU9wZXJhdGlvbiAJVFJVRQotCQkgICAgbG9jYXRpb24gICAJKDQ0OCwgNjU2KQotCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBJdGVtTGFiZWwKLQkJCVBhcmVudF9WaWV3IAlAMzY5Ci0JCQlsb2NhdGlvbiAgIAkoMjQxLCA1MDcpCi0JCQlmaWxsX2NvbG9yIAkxMzQzNDg3OQotCQkJbmxpbmVzICAgICAJMQotCQkJbWF4X3dpZHRoICAJNDE0Ci0JCQlqdXN0aWZ5ICAgIAkwCi0JCQlsYWJlbCAgICAgIAkiTWVzc2FnZSIpCi0JCSAgICBpY29uX3N0eWxlIAkiSWNvbiIKLQkJICAgIGxpbmVfY29sb3IgCTMzNDI0ODkKLQkJICAgIGZpbGxfY29sb3IgCTEzNDM0ODc5Ci0JCSAgICBxdWlkdSAgICAgIAkiM0FENUM5NTkwMDc4IgotCQkgICAgd2lkdGggICAgICAJNDMyCi0JCSAgICBoZWlnaHQgICAgIAkzMjIKLQkJICAgIGFubm90YXRpb24gCTgKLQkJICAgIGF1dG9SZXNpemUgCVRSVUUpCi0JCShvYmplY3QgSW5oZXJpdFZpZXcgIiIgQDM3MAotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNCODRBOEQxMDJCQSIKLQkJICAgIGNsaWVudCAgICAgCUAzNjkKLQkJICAgIHN1cHBsaWVyICAgCUAzNjUKLQkJICAgIGxpbmVfc3R5bGUgCTMKLQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNDQ1LCA0OTUpCi0JCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoNDQ1LCAzODgpKQotCQkob2JqZWN0IEFzc29jaWF0aW9uVmlld05ldyAiJFVOTkFNRUQkMSIgQDM3MQotCQkgICAgbG9jYXRpb24gICAJKDY4OCwgOTUyKQotCQkgICAgc3RlcmVvdHlwZSAJVFJVRQotCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkgICAgcXVpZHUgICAgICAJIjNBRDVDRUJFMDBFMiIKLQkJICAgIHJvbGV2aWV3X2xpc3QgCShsaXN0IFJvbGVWaWV3cwotCQkJKG9iamVjdCBSb2xlVmlldyAiZVBhcnRzIiBAMzcyCi0JCQkgICAgUGFyZW50X1ZpZXcgCUAzNzEKLQkJCSAgICBsb2NhdGlvbiAgIAkoMTc2LCAzMjgpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzczCi0JCQkJUGFyZW50X1ZpZXcgCUAzNzIKLQkJCQlsb2NhdGlvbiAgIAkoOTUyLCA4OTcpCi0JCQkJYW5jaG9yICAgICAJMQotCQkJCWFuY2hvcl9sb2MgCTEKLQkJCQlubGluZXMgICAgIAkxCi0JCQkJbWF4X3dpZHRoICAJMTQ0Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIrZVBhcnRzIgotCQkJCXBjdERpc3QgICAgCTAuNjk3NDUyCi0JCQkJaGVpZ2h0ICAgICAJNTYKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0VCRjAwNjEiCi0JCQkgICAgY2xpZW50ICAgICAJQDM3MQotCQkJICAgIHN1cHBsaWVyICAgCUAzNjcKLQkJCSAgICBsaW5lX3N0eWxlIAkzCi0JCQkgICAgb3JpZ2luX2F0dGFjaG1lbnQgCSg2ODgsIDk1MikKLQkJCSAgICB0ZXJtaW5hbF9hdHRhY2htZW50IAkoMTA2NiwgOTUyKQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM3NAotCQkJCVBhcmVudF9WaWV3IAlAMzcyCi0JCQkJbG9jYXRpb24gICAJKDk4NywgMTAwNSkKLQkJCQlhbmNob3IgICAgIAkyCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAkxNQotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiMC4uKiIKLQkJCQlwY3REaXN0ICAgIAkwLjc4OTgwOQotCQkJCWhlaWdodCAgICAgCTUzCi0JCQkJb3JpZW50YXRpb24gCTEpCi0JCQkgICAgbGFiZWwgICAgICAJKG9iamVjdCBTZWdMYWJlbCBAMzc1Ci0JCQkJUGFyZW50X1ZpZXcgCUAzNzIKLQkJCQlsb2NhdGlvbiAgIAkoOTY3LCAxMDYxKQotCQkJCWFuY2hvciAgICAgCTMKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1NAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkie29yZGVyZWR9IgotCQkJCXBjdERpc3QgICAgCTAuNzQyMDM4Ci0JCQkJaGVpZ2h0ICAgICAJMTA5Ci0JCQkJb3JpZW50YXRpb24gCTEpKQotCQkJKG9iamVjdCBSb2xlVmlldyAiJFVOTkFNRUQkMiIgQDM3NgotCQkJICAgIFBhcmVudF9WaWV3IAlAMzcxCi0JCQkgICAgbG9jYXRpb24gICAJKDE3NiwgMzI4KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM3NwotCQkJCVBhcmVudF9WaWV3IAlAMzc2Ci0JCQkJbG9jYXRpb24gICAJKDQwNCwgODkzKQotCQkJCWhpZGRlbiAgICAgCVRSVUUKLQkJCQlhbmNob3IgICAgIAkxCi0JCQkJYW5jaG9yX2xvYyAJMQotCQkJCW5saW5lcyAgICAgCTEKLQkJCQltYXhfd2lkdGggIAk2MAotCQkJCWp1c3RpZnkgICAgCTAKLQkJCQlsYWJlbCAgICAgIAkiIgotCQkJCXBjdERpc3QgICAgCTAuODAwMDAwCi0JCQkJaGVpZ2h0ICAgICAJNDIKLQkJCQlvcmllbnRhdGlvbiAJMCkKLQkJCSAgICBzdGVyZW90eXBlIAlUUlVFCi0JCQkgICAgbGluZV9jb2xvciAJMzM0MjQ4OQotCQkJICAgIHF1aWR1ICAgICAgCSIzQUQ1Q0VCRjAwNTciCi0JCQkgICAgY2xpZW50ICAgICAJQDM3MQotCQkJICAgIHN1cHBsaWVyICAgCUAzNjkKLQkJCSAgICB2ZXJ0aWNlcyAgIAkobGlzdCBQb2ludHMKLQkJCQkoNjg4LCA5NTIpCi0JCQkJKDQ0NSwgOTUyKQotCQkJCSg0NDUsIDgxNykpCi0JCQkgICAgbGluZV9zdHlsZSAJMwotCQkJICAgIG9yaWdpbl9hdHRhY2htZW50IAkoNjg4LCA5NTIpCi0JCQkgICAgdGVybWluYWxfYXR0YWNobWVudCAJKDQ0NSwgODE3KQotCQkJICAgIGxhYmVsICAgICAgCShvYmplY3QgU2VnTGFiZWwgQDM3OAotCQkJCVBhcmVudF9WaWV3IAlAMzc2Ci0JCQkJbG9jYXRpb24gICAJKDM5MywgOTEyKQotCQkJCWFuY2hvciAgICAgCTIKLQkJCQlhbmNob3JfbG9jIAkxCi0JCQkJbmxpbmVzICAgICAJMQotCQkJCW1heF93aWR0aCAgCTE1Ci0JCQkJanVzdGlmeSAgICAJMAotCQkJCWxhYmVsICAgICAgCSIxLi4xIgotCQkJCXBjdERpc3QgICAgCTAuNzQ3NjA0Ci0JCQkJaGVpZ2h0ICAgICAJNTMKLQkJCQlvcmllbnRhdGlvbiAJMCkpKSkpKSkpCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4Mzc0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIFRvIGNvZGUgZGV2ZWxvcGVyOgotIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQotIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCi0jICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCi0jICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXBsdWdpbk5hbWUgPSBXU0RMIE1vZGVsCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwotCi14cEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzID0gV1NETCBFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmFjdG9yaWVzCi14cFBvcnRBbmRCaW5kaW5nQ29udGVudEdlbmVyYXRvcnMgPSBQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycwoteHBXU0RMQ29udGVudFR5cGUgPSBXU0RMIENvbnRlbnQgVHlwZQotCi1fRVJST1JfSU5WQUxJRF9XU0RMID0gVGhlIGlucHV0IHNvdXJjZSBpcyBub3QgYSB2YWxpZCBXU0RMIGRvY3VtZW50LgotX1VJX0lPRXJyb3JfbWVzc2FnZSA9IElPOiB7MH0KLV9VSV9QYXJzZXJFcnJvcl9tZXNzYWdlID0gRE9NOiB7MH0KLQotX1VJX1Jlc291cmNlTG9hZF9wcm9ncmVzcyA9IExvYWRpbmcgV1NETCBkb2N1bWVudHMgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczN2Y3YzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbi1wb2ludAotCQlpZD0iZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMiCi0JCW5hbWU9IiV4cEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIiAKLQkJc2NoZW1hPSJzY2hlbWEvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMuZXhzZCIvPgotCTxleHRlbnNpb24tcG9pbnQKLQkJaWQ9ImNvbnRlbnRHZW5lcmF0b3JzIgotCQluYW1lPSIleHBQb3J0QW5kQmluZGluZ0NvbnRlbnRHZW5lcmF0b3JzIiAKLQkJc2NoZW1hPSJzY2hlbWEvY29udGVudEdlbmVyYXRvcnMuZXhzZCIvPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KLQkJPHBhY2thZ2UKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlIgotICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvV1NETC5nZW5tb2RlbCIKLSAgICAgICAgdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9XU0RMIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPCEtLSAKLQkJVGhpcyBleHRlbnNpb24gaXMgZHVwbGljYXRlZCBoZXJlIHRvIHByb3ZpZGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi0JCVRoZSBuYW1lc3BhY2UgVVJJIHdhcyByZW5hbWVkIGZyb20gaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9XU0RMIHRvCi0JCWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1dTREwuIAotCSAtLT4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSIKLSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL1dTREwuZ2VubW9kZWwiCi0gICAgICAgIHVyaT0iaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9XU0RMIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmV4dGVuc2lvbl9wYXJzZXIiPgotCQk8cGFyc2VyCi0JCQl0eXBlPSJ3c2RsIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGwiPgotCQk8L3BhcnNlcj4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0JCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL0hUVFAiCi0JICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvSFRUUC5nZW5tb2RlbCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UiPgotCQk8L3BhY2thZ2U+Ci0JPC9leHRlbnNpb24+Ci0KLQk8IS0tIAotCQlUaGlzIGV4dGVuc2lvbiBpcyBkdXBsaWNhdGVkIGhlcmUgdG8gcHJvdmlkZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLQkJVGhlIG5hbWVzcGFjZSBVUkkgd2FzIHJlbmFtZWQgZnJvbSBodHRwOi8vd3d3LmlibS5jb20vd3NkbC8yMDAzL0hUVFAgdG8KLQkJaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvSFRUUC4gCi0JIC0tPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KLQkJPHBhY2thZ2UKLQkJCXVyaT0iaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9IVFRQIgotCSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL0hUVFAuZ2VubW9kZWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0JCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL01JTUUiCi0JICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvTUlNRS5nZW5tb2RlbCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UiPgotCQk8L3BhY2thZ2U+Ci0JPC9leHRlbnNpb24+Ci0KLQk8IS0tIAotCQlUaGlzIGV4dGVuc2lvbiBpcyBkdXBsaWNhdGVkIGhlcmUgdG8gcHJvdmlkZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLQkJVGhlIG5hbWVzcGFjZSBVUkkgd2FzIHJlbmFtZWQgZnJvbSBodHRwOi8vd3d3LmlibS5jb20vd3NkbC8yMDAzL01JTUUgdG8KLQkJaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvTUlNRS4gCi0JIC0tPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KLQkJPHBhY2thZ2UKLQkJCXVyaT0iaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9NSU1FIgotCSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL01JTUUuZ2VubW9kZWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+Ci0JCTxwYWNrYWdlCi0JCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1NPQVAiCi0JICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvU09BUC5nZW5tb2RlbCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UiPgotCQk8L3BhY2thZ2U+Ci0JPC9leHRlbnNpb24+Ci0KLQk8IS0tIAotCQlUaGlzIGV4dGVuc2lvbiBpcyBkdXBsaWNhdGVkIGhlcmUgdG8gcHJvdmlkZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLQkJVGhlIG5hbWVzcGFjZSBVUkkgd2FzIHJlbmFtZWQgZnJvbSBodHRwOi8vd3d3LmlibS5jb20vd3NkbC8yMDAzL1NPQVAgdG8KLQkJaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c2RsLzIwMDMvU09BUC4gCi0JIC0tPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KLQkJPHBhY2thZ2UKLQkJCXVyaT0iaHR0cDovL3d3dy5pYm0uY29tL3dzZGwvMjAwMy9TT0FQIgotCSAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL1NPQVAuZ2VubW9kZWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlIj4KLQkJPC9wYWNrYWdlPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmNvbnRlbnRHZW5lcmF0b3JzIj4KLQkJPGNvbnRlbnRHZW5lcmF0b3IKLQkJCW5hbWU9IlNPQVAiCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmdlbmVyYXRvci5TT0FQQ29udGVudEdlbmVyYXRvciI+Ci0JCTwvY29udGVudEdlbmVyYXRvcj4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLmNvbnRlbnRHZW5lcmF0b3JzIj4KLQkJPGNvbnRlbnRHZW5lcmF0b3IKLQkJCW5hbWU9IkhUVFAiCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmdlbmVyYXRvci5IVFRQQ29udGVudEdlbmVyYXRvciI+Ci0JCTwvY29udGVudEdlbmVyYXRvcj4KLQk8L2V4dGVuc2lvbj4KLQotCi0KLQk8IS0tIGRlZmluZSBhIHdzZGwgY29udGVudCB0eXBlIC0tPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50VHlwZXMiPgotCQk8Y29udGVudC10eXBlCi0JCQlwcmlvcml0eT0iaGlnaCIKLQkJCW5hbWU9IiV4cFdTRExDb250ZW50VHlwZSIKLQkJCWlkPSJ3c2Rsc291cmNlIgotCQkJYmFzZS10eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIgotCQkJZGVmYXVsdC1jaGFyc2V0PSJVVEYtOCIKLQkJCWZpbGUtZXh0ZW5zaW9ucz0id3NkbCIgLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zY2hlbWEvY29udGVudEdlbmVyYXRvcnMuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc2NoZW1hL2NvbnRlbnRHZW5lcmF0b3JzLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MmE0NDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zY2hlbWEvY29udGVudEdlbmVyYXRvcnMuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NkbCI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIGlkPSJjb250ZW50R2VuZXJhdG9ycyIgbmFtZT0iUG9ydCBhbmQgQmluZGluZyBDb250ZW50IEdlbmVyYXRvcnMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIFBvcnQgYW5kIEJpbmRpbmcgQ29udGVudCBHZW5lcmF0b3JzIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBjdXN0b20gZ2VuZXJhdG9ycyBmb3IgUG9ydHMgYW5kIEJpbmRpbmdzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoZSBQb3J0IGFuZCBCaW5kaW5nIENvbnRlbnQgR2VuZXJhdG9ycyBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgY3VzdG9tIGNvbnRlbnQgZ2VuZXJhdG9ycyBmb3IgV1NETCBQb3J0cyBhbmQgQmluZGluZ3MuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImNvbnRlbnRHZW5lcmF0b3IiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImNvbnRlbnRHZW5lcmF0b3IiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE5hbWUgdXNlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZSBhcHBsaWVzIHRvLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBwbHVnaW5zLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgY29udGVudCBnZW5lcmF0b3IgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLmNvbnRlbnRHZW5lcmF0b3JzJnF1b3Q7Jmd0OwotICAgICAgJmx0O2NvbnRlbnRHZW5lcmF0b3IKLSAgICAgICAgICAgIG5hbWU9JnF1b3Q7U09BUCZxdW90OwotICAgICAgICAgICAgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8mcXVvdDsKLSAgICAgICAgICAgIGNsYXNzPSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3ImcXVvdDsvJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcmllcy5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zY2hlbWEvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3JpZXMuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0NTU3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcmllcy5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIgaWQ9ImV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yaWVzIiBuYW1lPSJXU0RMIEV4dGVuc2liaWxpdHkgRWxlbWVudCBGYWN0b3JpZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIFdTREwgRXh0ZW5zaWJpbGl0eSBFbGVtZW50IEZhY3RvcmllcyBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgZmFjdG9yaWVzIGZvciBjcmVhdGluZyBjdXN0b20gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ii8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZSBhcHBsaWVzIHRvLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkmbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGFuIGV4dGVuc2liaWxpdHkgZWxlbWVudCBmYWN0b3J5IGNvbnRyaWJ1dGlvbjoKLSZsdDtwcmUmZ3Q7Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC5leHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcmllcyZxdW90OyZndDsKLSAgICAgICZsdDtleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvJnF1b3Q7Ci0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5JnF1b3Q7LyZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Jmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBBZGRyZXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYTgyOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEFkZHJlc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFkZHJlc3M8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQQWRkcmVzcygpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBIVFRQQWRkcmVzcyBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcwotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldExvY2F0aW9uVVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2UjZ2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkkoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldExvY2F0aW9uVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzcyNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBIVFRQQWRkcmVzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YjFiZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmc8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nI2dldFZlcmIgPGVtPlZlcmI8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQQmluZGluZygpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBIVFRQQmluZGluZyBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZwotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVyYjwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVyYjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVyYjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFZlcmIoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQQmluZGluZ19WZXJiKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRWZXJiKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZyNnZXRWZXJiIDxlbT5WZXJiPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZXJiPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0VmVyYigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VmVyYihTdHJpbmcgdmFsdWUpOwotCi19IC8vIEhUVFBCaW5kaW5nCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U4MjhkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSFRUUEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeQotewotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEhUVFBGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBGYWN0b3J5SW1wbC5pbml0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUEJpbmRpbmcgY3JlYXRlSFRUUEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUE9wZXJhdGlvbiBjcmVhdGVIVFRQT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEhUVFBVcmxSZXBsYWNlbWVudCBjcmVhdGVIVFRQVXJsUmVwbGFjZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VcmwgRW5jb2RlZDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEhUVFBVcmxFbmNvZGVkIGNyZWF0ZUhUVFBVcmxFbmNvZGVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSFRUUEFkZHJlc3MgY3JlYXRlSFRUUEFkZHJlc3MoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBIVFRQUGFja2FnZSBnZXRIVFRQUGFja2FnZSgpOwotCi19IC8vSFRUUEZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgyOTVmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24jZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlI2dldEhUVFBPcGVyYXRpb24oKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSFRUUE9wZXJhdGlvbiBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TG9jYXRpb25VUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbiNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBIVFRQT3BlcmF0aW9uCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZjY2E5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQUGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAotICogPHVsPgotICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAqIDwvdWw+Ci0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5Ci0gKiBAbW9kZWwga2luZD0icGFja2FnZSIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBIVFRQUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlCi17Ci0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOQU1FID0gImh0dHAiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9IVFRQIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTlNfUFJFRklYID0gImh0dHAiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBIVFRQUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwuaW5pdCgpOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBCaW5kaW5nSW1wbCA8ZW0+QmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBCaW5kaW5nSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBIVFRQX0JJTkRJTkcgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9CSU5ESU5HX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0JJTkRJTkdfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQklORElOR19fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9CSU5ESU5HX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlcmI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0JJTkRJTkdfX1ZFUkIgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQklORElOR19GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBPcGVyYXRpb25JbXBsIDxlbT5PcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQT3BlcmF0aW9uSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEhUVFBfT1BFUkFUSU9OID0gMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX09QRVJBVElPTl9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9PUEVSQVRJT05fX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfT1BFUkFUSU9OX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5PcGVyYXRpb248L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQVXJsUmVwbGFjZW1lbnRJbXBsIDxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQVXJsUmVwbGFjZW1lbnRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBVcmxSZXBsYWNlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBIVFRQX1VSTF9SRVBMQUNFTUVOVCA9IDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX1VSTF9SRVBMQUNFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfUkVQTEFDRU1FTlRfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfVVJMX1JFUExBQ0VNRU5UX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX1VSTF9SRVBMQUNFTUVOVF9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQVXJsRW5jb2RlZEltcGwgPGVtPlVybCBFbmNvZGVkPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybEVuY29kZWRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBVcmxFbmNvZGVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEhUVFBfVVJMX0VOQ09ERUQgPSAzOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfRU5DT0RFRF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfRU5DT0RFRF9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9VUkxfRU5DT0RFRF9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5VcmwgRW5jb2RlZDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX1VSTF9FTkNPREVEX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUEFkZHJlc3NJbXBsIDxlbT5BZGRyZXNzPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUEFkZHJlc3NJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBBZGRyZXNzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEhUVFBfQUREUkVTUyA9IDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0FERFJFU1NfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQUREUkVTU19fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9BRERSRVNTX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBIVFRQX0FERFJFU1NfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BZGRyZXNzPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEhUVFBfQUREUkVTU19GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIDxlbT5JSFRUUCBBZGRyZXNzPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBBZGRyZXNzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElIVFRQX0FERFJFU1MgPSA1OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUhUVFAgQWRkcmVzczwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSFRUUF9BRERSRVNTX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIDxlbT5JSFRUUCBCaW5kaW5nPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElIVFRQX0JJTkRJTkcgPSA2OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUhUVFAgQmluZGluZzwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSFRUUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUhUVFBfT1BFUkFUSU9OID0gNzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSFRUUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQgPGVtPklIVFRQIFVybCBFbmNvZGVkPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBVcmxFbmNvZGVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElIVFRQX1VSTF9FTkNPREVEID0gODsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIFVybCBFbmNvZGVkPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElIVFRQX1VSTF9FTkNPREVEX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCA8ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQVXJsUmVwbGFjZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUhUVFBfVVJMX1JFUExBQ0VNRU5UID0gOTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklIVFRQIFVybCBSZXBsYWNlbWVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSFRUUF9VUkxfUkVQTEFDRU1FTlRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZyA8ZW0+QmluZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SFRUUEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmcjZ2V0VmVyYiA8ZW0+VmVyYjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlcmI8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nI2dldFZlcmIoKQotICAgKiBAc2VlICNnZXRIVFRQQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0SFRUUEJpbmRpbmdfVmVyYigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbiA8ZW0+T3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SFRUUE9wZXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb24jZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAc2VlICNnZXRIVFRQT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQgPGVtPlVybCBSZXBsYWNlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SFRUUFVybFJlcGxhY2VtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZCA8ZW0+VXJsIEVuY29kZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxFbmNvZGVkCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRIVFRQVXJsRW5jb2RlZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3MgPGVtPkFkZHJlc3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3MKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEhUVFBBZGRyZXNzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzI2dldExvY2F0aW9uVVJJKCkKLSAgICogQHNlZSAjZ2V0SFRUUEFkZHJlc3MoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEhUVFBBZGRyZXNzX0xvY2F0aW9uVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIDxlbT5JSFRUUCBBZGRyZXNzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklIVFRQIEFkZHJlc3M8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUhUVFBBZGRyZXNzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIDxlbT5JSFRUUCBCaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklIVFRQIEJpbmRpbmc8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUhUVFBCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb24gPGVtPklIVFRQIE9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSFRUUCBPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbgotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElIVFRQT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkIDxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJSFRUUFVybEVuY29kZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IDxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBIVFRQRmFjdG9yeSBnZXRIVFRQRmFjdG9yeSgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50Ci0gICAqIDx1bD4KLSAgICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICAgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICAgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAgICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAgICogPC91bD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludGVyZmFjZSBMaXRlcmFscwotICB7Ci0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBCaW5kaW5nSW1wbCA8ZW0+QmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBCaW5kaW5nSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBCaW5kaW5nKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEhUVFBfQklORElORyA9IGVJTlNUQU5DRS5nZXRIVFRQQmluZGluZygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlcmI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgSFRUUF9CSU5ESU5HX19WRVJCID0gZUlOU1RBTkNFLmdldEhUVFBCaW5kaW5nX1ZlcmIoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQT3BlcmF0aW9uSW1wbCA8ZW0+T3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUE9wZXJhdGlvbkltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRIVFRQT3BlcmF0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEhUVFBfT1BFUkFUSU9OID0gZUlOU1RBTkNFLmdldEhUVFBPcGVyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSSA9IGVJTlNUQU5DRS5nZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybFJlcGxhY2VtZW50SW1wbCA8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybFJlcGxhY2VtZW50SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBVcmxSZXBsYWNlbWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBIVFRQX1VSTF9SRVBMQUNFTUVOVCA9IGVJTlNUQU5DRS5nZXRIVFRQVXJsUmVwbGFjZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQVXJsRW5jb2RlZEltcGwgPGVtPlVybCBFbmNvZGVkPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFVybEVuY29kZWRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SFRUUFVybEVuY29kZWQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSFRUUF9VUkxfRU5DT0RFRCA9IGVJTlNUQU5DRS5nZXRIVFRQVXJsRW5jb2RlZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBBZGRyZXNzSW1wbCA8ZW0+QWRkcmVzczwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBBZGRyZXNzSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldEhUVFBBZGRyZXNzKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEhUVFBfQUREUkVTUyA9IGVJTlNUQU5DRS5nZXRIVFRQQWRkcmVzcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBIVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSA9IGVJTlNUQU5DRS5nZXRIVFRQQWRkcmVzc19Mb2NhdGlvblVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzIDxlbT5JSFRUUCBBZGRyZXNzPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsLkhUVFBQYWNrYWdlSW1wbCNnZXRJSFRUUEFkZHJlc3MoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUhUVFBfQUREUkVTUyA9IGVJTlNUQU5DRS5nZXRJSFRUUEFkZHJlc3MoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZyA8ZW0+SUhUVFAgQmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBCaW5kaW5nKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElIVFRQX0JJTkRJTkcgPSBlSU5TVEFOQ0UuZ2V0SUhUVFBCaW5kaW5nKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbiA8ZW0+SUhUVFAgT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUFBhY2thZ2VJbXBsI2dldElIVFRQT3BlcmF0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElIVFRQX09QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRJSFRUUE9wZXJhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkIDxlbT5JSFRUUCBVcmwgRW5jb2RlZDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBVcmxFbmNvZGVkKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElIVFRQX1VSTF9FTkNPREVEID0gZUlOU1RBTkNFLmdldElIVFRQVXJsRW5jb2RlZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCA8ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQUGFja2FnZUltcGwjZ2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJSFRUUF9VUkxfUkVQTEFDRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpOwotCi0gIH0KLQotfSAvL0hUVFBQYWNrYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvSFRUUFVybEVuY29kZWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQxZTU5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsRW5jb2RlZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VXJsIEVuY29kZWQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlI2dldEhUVFBVcmxFbmNvZGVkKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEhUVFBVcmxFbmNvZGVkIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxFbmNvZGVkCi17Ci19IC8vIEhUVFBVcmxFbmNvZGVkCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9IVFRQVXJsUmVwbGFjZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDQ1MmJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL0hUVFBVcmxSZXBsYWNlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VXJsIFJlcGxhY2VtZW50PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNnZXRIVFRQVXJsUmVwbGFjZW1lbnQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSFRUUFVybFJlcGxhY2VtZW50IGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotewotfSAvLyBIVFRQVXJsUmVwbGFjZW1lbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2dlbmVyYXRvci9IVFRQQ29udGVudEdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvZ2VuZXJhdG9yL0hUVFBDb250ZW50R2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWE1MTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvZ2VuZXJhdG9yL0hUVFBDb250ZW50R2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuZ2VuZXJhdG9yOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBIVFRQQ29udGVudEdlbmVyYXRvciBpbXBsZW1lbnRzIENvbnRlbnRHZW5lcmF0b3IKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkVSQl9QT1NUID0gMDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWRVJCX0dFVCA9IDE7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkVSQl9OT1RfU0VUID0gLTE7Ci0KLSAgcHJpdmF0ZSBpbnQgdmVyYk9wdGlvbiA9IFZFUkJfTk9UX1NFVDsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGFkZHJlc3NMb2NhdGlvbiA9IENvbnRlbnRHZW5lcmF0b3IuQUREUkVTU19MT0NBVElPTjsKLQotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZ1tdIHJlcXVpcmVkTmFtZXNwYWNlcyA9IHsgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgfTsKLQotICBwdWJsaWMgdm9pZCBzZXRWZXJiKGludCB2ZXJiKQotICB7Ci0gICAgdmVyYk9wdGlvbiA9IHZlcmI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBZGRyZXNzTG9jYXRpb24oU3RyaW5nIGFkZHJlc3NMb2NhdGlvbikKLSAgewotICAgIHRoaXMuYWRkcmVzc0xvY2F0aW9uID0gYWRkcmVzc0xvY2F0aW9uOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldFJlcXVpcmVkTmFtZXNwYWNlcygpCi0gIHsKLSAgICByZXR1cm4gcmVxdWlyZWROYW1lc3BhY2VzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcmVmZXJyZWROYW1lc3BhY2VQcmVmaXgoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIGlmIChuYW1lc3BhY2UuZXF1YWxzKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIikpCi0gICAgewotICAgICAgcmV0dXJuICJtaW1lIjsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZXNwYWNlLmVxdWFscygiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIpKQotICAgIHsKLSAgICAgIHJldHVybiAiaHR0cCI7Ci0gICAgfQotCi0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVQb3J0Q29udGVudChQb3J0IHBvcnQpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QocG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJlbW92ZUV4dGVuc2ViaWxpdHlFbGVtZW50cyhwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgcmVtb3ZlTGlzdCk7Ci0KLSAgICBIVFRQQWRkcmVzcyBodHRwQWRkcmVzcyA9IEhUVFBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVIVFRQQWRkcmVzcygpOwotICAgIGh0dHBBZGRyZXNzLnNldExvY2F0aW9uVVJJKGFkZHJlc3NMb2NhdGlvbik7Ci0gICAgcG9ydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwQWRkcmVzcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdDb250ZW50KEJpbmRpbmcgYmluZGluZywgUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJlbW92ZUV4dGVuc2ViaWxpdHlFbGVtZW50cyhiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgcmVtb3ZlTGlzdCk7Ci0KLSAgICBIVFRQQmluZGluZyBodHRwQmluZGluZyA9IEhUVFBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVIVFRQQmluZGluZygpOwotICAgIGh0dHBCaW5kaW5nLnNldFZlcmIoZ2V0VmVyYk9wdGlvbihiaW5kaW5nKSA9PSBWRVJCX1BPU1QgPyAiUE9TVCIgOiAiR0VUIik7Ci0KLSAgICBiaW5kaW5nLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBCaW5kaW5nKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbkNvbnRlbnQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uLCBPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgLy8gV2UgYmxvdyBhd2F5IGFueSBleGlzdGluZyBFeHRlbnNpYmlsaXR5RWxlbWVudHMvY29udGVudCBiZWZvcmUgd2UgZ2VuZXJhdGUgaXQKLSAgICAvLyBJcyBpdCB3b3J0aCBiZWluZyBzbWFydGVyPyAgTG9vayBmb3IgbWF0Y2hpbmcgY29udGVudCBmaXJzdCBhbmQgY3JlYXRlIHRob3NlIHdoaWNoIGFyZW4ndCBmb3VuZD8/Pz8KLSAgICBMaXN0IHJlbW92ZUxpc3QgPSBuZXcgQXJyYXlMaXN0KGJpbmRpbmdPcGVyYXRpb24uZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZ09wZXJhdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgSFRUUE9wZXJhdGlvbiBodHRwT3BlcmF0aW9uID0gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBPcGVyYXRpb24oKTsKLSAgICBodHRwT3BlcmF0aW9uLnNldExvY2F0aW9uVVJJKCIvIiArIG9wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cE9wZXJhdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdJbnB1dENvbnRlbnQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCwgSW5wdXQgaW5wdXQpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZ0lucHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAvLyBoYWNrOiB3ZSdyZSBiZWluZyBzbmVha3kgaGVyZS4gU2V0IHRoZSAndmVyYicgb3B0aW9ucyBub3cuCi0gICAgaW50IG9wdGlvbiA9IGdldFZlcmJPcHRpb24oYmluZGluZ0lucHV0KTsKLSAgICByZW1vdmVFeHRlbnNlYmlsaXR5RWxlbWVudHMoYmluZGluZ0lucHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgcmVtb3ZlTGlzdCk7Ci0KLSAgICBpZiAob3B0aW9uID09IFZFUkJfUE9TVCkKLSAgICB7Ci0gICAgICAvLyBUT0RPOiBJcyB0aGVyZSBhbiBlcXVpdmFsZW50IEhUVFAgTW9kZWwgT2JqZWN0IGZvciB0aGlzPy4uLi4KLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoYmluZGluZ0lucHV0LmdldEVsZW1lbnQoKSwgIm1pbWUiLCAiY29udGVudCIpOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBIVFRQVXJsRW5jb2RlZCB1cmxFbmNvZGVkID0gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBVcmxFbmNvZGVkKCk7Ci0gICAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQodXJsRW5jb2RlZCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nT3V0cHV0Q29udGVudChCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQsIE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZ091dHB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotCi0gICAgLy8gaGFjazogd2UncmUgYmVpbmcgc25lYWt5IGhlcmUuIFNldCB0aGUgJ3ZlcmInIG9wdGlvbnMgbm93LgotICAgIGdldFZlcmJPcHRpb24oYmluZGluZ091dHB1dCk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdPdXRwdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIC8vIFRPRE86IElzIHRoZXJlIGFuIGVxdWl2YWxlbnQgSFRUUCBNb2RlbCBPYmplY3QgZm9yIHRoaXM/Li4uLgotICAgIEVsZW1lbnQgYmluZGluZ091dHB1dEVsZW1lbnQgPSBiaW5kaW5nT3V0cHV0LmdldEVsZW1lbnQoKTsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KGJpbmRpbmdPdXRwdXRFbGVtZW50LCAibWltZSIsICJjb250ZW50Iik7Ci0gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dC94bWwiKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ0ZhdWx0Q29udGVudChCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0LCBGYXVsdCBmYXVsdCkKLSAgewotICAgIC8vVE9ETyEhCi0gIH0KLQotICBwcm90ZWN0ZWQgRWxlbWVudCBjcmVhdGVFbGVtZW50KEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIHByZWZpeCwgU3RyaW5nIGVsZW1lbnROYW1lKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBwcmVmaXggIT0gbnVsbCA/IChwcmVmaXggKyAiOiIgKyBlbGVtZW50TmFtZSkgOiBlbGVtZW50TmFtZTsKLSAgICBFbGVtZW50IHJlc3VsdCA9IHBhcmVudEVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQobmFtZSk7Ci0gICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUocmVzdWx0LCBwYXJlbnRFbGVtZW50LmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgLy8gICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8gIAotICBwcml2YXRlIGludCBnZXRWZXJiT3B0aW9uKE9iamVjdCBnZW5lcmljQmluZGluZ09iamVjdCkKLSAgewotICAgIGlmICh2ZXJiT3B0aW9uID09IFZFUkJfTk9UX1NFVCAmJiBnZW5lcmljQmluZGluZ09iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIGluaXQoKSB3YXMgbmV2ZXIgY2FsbGVkLCB0cnkgdG8gZGV0ZXJtaW5lIHRoZSAndmVyYicgYmFzZWQgb24gd2hhdCB3ZSBoYXZlL2tub3cKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IGdldEJpbmRpbmdPYmplY3QoZ2VuZXJpY0JpbmRpbmdPYmplY3QpOwotCi0gICAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSB2ZXJiIGZyb20gdGhlIEJpbmRpbmcgT2JqZWN0Ci0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IGxpc3QgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgSXRlcmF0b3IgdmFsdWVzSXQgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGxpc3QsICJ2ZXJiIikuaXRlcmF0b3IoKTsKLQotICAgICAgICB3aGlsZSAodmFsdWVzSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHZlcmIgPSAoU3RyaW5nKXZhbHVlc0l0Lm5leHQoKTsKLQotICAgICAgICAgIGlmICh2ZXJiLmVxdWFscygiUE9TVCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHZlcmJPcHRpb24gPSBWRVJCX1BPU1Q7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKHZlcmIuZXF1YWxzKCJHRVQiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJiT3B0aW9uID0gVkVSQl9HRVQ7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKHZlcmJPcHRpb24gIT0gVkVSQl9OT1RfU0VUKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGlmICh2ZXJiT3B0aW9uID09IFZFUkJfTk9UX1NFVCkKLSAgICB7Ci0gICAgICB2ZXJiT3B0aW9uID0gVkVSQl9HRVQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcmJPcHRpb247Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShMaXN0IGVlTGlzdCwgU3RyaW5nIGF0dHJpYnV0ZUtleSkKLSAgewotICAgIExpc3QgdmFsdWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGVlRWxlbWVudHNJdCA9IGVlTGlzdC5pdGVyYXRvcigpOwotCi0gICAgd2hpbGUgKGVlRWxlbWVudHNJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWVFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVlRWxlbWVudHNJdC5uZXh0KCk7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBlZUVsZW1lbnQuZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVLZXkpOwotICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlICE9IG51bGwgJiYgIWF0dHJpYnV0ZVZhbHVlLmVxdWFscygiIikpCi0gICAgICB7Ci0gICAgICAgIHZhbHVlcy5hZGQoYXR0cmlidXRlVmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZXM7Ci0gIH0KLQotICBwcml2YXRlIEJpbmRpbmcgZ2V0QmluZGluZ09iamVjdChPYmplY3QgZ2VuZXJpY0JpbmRpbmdPYmplY3QpCi0gIHsKLSAgICBPYmplY3QgcGFyZW50ID0gZ2VuZXJpY0JpbmRpbmdPYmplY3Q7Ci0KLSAgICBpbnQgaW5kZXggPSAwOwotICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCAmJiBpbmRleCA8IDUpCi0gICAgewotICAgICAgcGFyZW50ID0gZ2V0R2VuZXJpY0JpbmRpbmdPYmplY3RQYXJlbnQocGFyZW50KTsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGluZGV4Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nKSA/IChCaW5kaW5nKXBhcmVudCA6IG51bGw7Ci0gIH0KLQotICBwcml2YXRlIE9iamVjdCBnZXRHZW5lcmljQmluZGluZ09iamVjdFBhcmVudChPYmplY3QgZ2VuZXJpY0JpbmRpbmdPYmplY3QpCi0gIHsKLSAgICBPYmplY3QgcGFyZW50ID0gbnVsbDsKLQotICAgIGlmIChnZW5lcmljQmluZGluZ09iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHBhcmVudCA9ICgoQmluZGluZ09wZXJhdGlvbilnZW5lcmljQmluZGluZ09iamVjdCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgcGFyZW50ID0gKChCaW5kaW5nSW5wdXQpZ2VuZXJpY0JpbmRpbmdPYmplY3QpLmdldENvbnRhaW5lcigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZ2VuZXJpY0JpbmRpbmdPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotICAgICAgewotICAgICAgICBwYXJlbnQgPSAoKEJpbmRpbmdPdXRwdXQpZ2VuZXJpY0JpbmRpbmdPYmplY3QpLmdldENvbnRhaW5lcigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZ2VuZXJpY0JpbmRpbmdPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgICB7Ci0gICAgICAgIHBhcmVudCA9ICgoQmluZGluZ0ZhdWx0KWdlbmVyaWNCaW5kaW5nT2JqZWN0KS5nZXRDb250YWluZXIoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZUV4dGVuc2ViaWxpdHlFbGVtZW50cyhMaXN0IG9yaWdpbmFsTGlzdCwgTGlzdCByZW1vdmVMaXN0KQotICB7Ci0gICAgSXRlcmF0b3IgcmVtb3ZlSXQgPSByZW1vdmVMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKHJlbW92ZUl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBvcmlnaW5hbExpc3QucmVtb3ZlKHJlbW92ZUl0Lm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpCi0gIHsKLSAgICByZXR1cm4gIkhUVFAiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBBZGRyZXNzSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQQWRkcmVzc0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQyNGRjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBBZGRyZXNzSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZGRyZXNzPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQQWRkcmVzc0ltcGwjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEhUVFBBZGRyZXNzSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEhUVFBBZGRyZXNzCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX1VSSV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uVVJJKCkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uVVJJID0gTE9DQVRJT05fVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEhUVFBBZGRyZXNzSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9BRERSRVNTOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uVVJJKCkKLSAgewotICAgIHJldHVybiBsb2NhdGlvblVSSTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIG5ld0xvY2F0aW9uVVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZExvY2F0aW9uVVJJID0gbG9jYXRpb25VUkk7Ci0gICAgbG9jYXRpb25VUkkgPSBuZXdMb2NhdGlvblVSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBIVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSwgb2xkTG9jYXRpb25VUkksIGxvY2F0aW9uVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJOgotICAgICAgcmV0dXJuIGdldExvY2F0aW9uVVJJKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkk6Ci0gICAgICBzZXRMb2NhdGlvblVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJOgotICAgICAgc2V0TG9jYXRpb25VUkkoTE9DQVRJT05fVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSToKLSAgICAgIHJldHVybiBMT0NBVElPTl9VUklfRURFRkFVTFQgPT0gbnVsbCA/IGxvY2F0aW9uVVJJICE9IG51bGwgOiAhTE9DQVRJT05fVVJJX0VERUZBVUxULmVxdWFscyhsb2NhdGlvblVSSSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChsb2NhdGlvblVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGxvY2F0aW9uVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldExvY2F0aW9uVVJJKEhUVFBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBIVFRQQ29uc3RhbnRzLkxPQ0FUSU9OX1VSSV9BVFRSSUJVVEUpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBIVFRQUGFja2FnZS5lSU5TVEFOQ0UuZ2V0SFRUUEFkZHJlc3NfTG9jYXRpb25VUkkoKSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBIVFRQQ29uc3RhbnRzLkxPQ0FUSU9OX1VSSV9BVFRSSUJVVEUsIGdldExvY2F0aW9uVVJJKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKEhUVFBDb25zdGFudHMuSFRUUF9OQU1FU1BBQ0VfVVJJLCBIVFRQQ29uc3RhbnRzLkFERFJFU1NfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotfSAvL0hUVFBBZGRyZXNzSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQQmluZGluZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUEJpbmRpbmdJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZTMzMTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQQmluZGluZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmltcGwuSFRUUEJpbmRpbmdJbXBsI2dldFZlcmIgPGVtPlZlcmI8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQQmluZGluZ0ltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBIVFRQQmluZGluZwotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlcmIoKSA8ZW0+VmVyYjwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VmVyYigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUkJfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZXJiKCkgPGVtPlZlcmI8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFZlcmIoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHZlcmIgPSBWRVJCX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEhUVFBCaW5kaW5nSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9CSU5ESU5HOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZlcmIoKQotICB7Ci0gICAgcmV0dXJuIHZlcmI7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZlcmIoU3RyaW5nIG5ld1ZlcmIpCi0gIHsKLSAgICBTdHJpbmcgb2xkVmVyYiA9IHZlcmI7Ci0gICAgdmVyYiA9IG5ld1ZlcmI7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19WRVJCLCBvbGRWZXJiLCB2ZXJiKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQklORElOR19fVkVSQjoKLSAgICAgIHJldHVybiBnZXRWZXJiKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19WRVJCOgotICAgICAgc2V0VmVyYigoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfQklORElOR19fVkVSQjoKLSAgICAgIHNldFZlcmIoVkVSQl9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9CSU5ESU5HX19WRVJCOgotICAgICAgcmV0dXJuIFZFUkJfRURFRkFVTFQgPT0gbnVsbCA/IHZlcmIgIT0gbnVsbCA6ICFWRVJCX0VERUZBVUxULmVxdWFscyh2ZXJiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHZlcmI6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh2ZXJiKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldFZlcmIoSFRUUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIEhUVFBDb25zdGFudHMuVkVSQl9BVFRSSUJVVEUpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBIVFRQUGFja2FnZS5lSU5TVEFOQ0UuZ2V0SFRUUEJpbmRpbmdfVmVyYigpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIEhUVFBDb25zdGFudHMuVkVSQl9BVFRSSUJVVEUsIGdldFZlcmIoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoSFRUUENvbnN0YW50cy5IVFRQX05BTUVTUEFDRV9VUkksIEhUVFBDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLX0gLy9IVFRQQmluZGluZ0ltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUEZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODI3ZDM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUEZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEhUVFBGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEhUVFBGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEhUVFBGYWN0b3J5IGluaXQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSFRUUEZhY3RvcnkgdGhlSFRUUEZhY3RvcnkgPSAoSFRUUEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL0hUVFAiKTsgLy8kTk9OLU5MUy0xJCAKLSAgICAgIGlmICh0aGVIVFRQRmFjdG9yeSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gdGhlSFRUUEZhY3Rvcnk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIEVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbmV3IEhUVFBGYWN0b3J5SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUEZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKQotICB7Ci0gICAgc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX0JJTkRJTkc6Ci0gICAgICByZXR1cm4gY3JlYXRlSFRUUEJpbmRpbmcoKTsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT046Ci0gICAgICByZXR1cm4gY3JlYXRlSFRUUE9wZXJhdGlvbigpOwotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX1VSTF9SRVBMQUNFTUVOVDoKLSAgICAgIHJldHVybiBjcmVhdGVIVFRQVXJsUmVwbGFjZW1lbnQoKTsKLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9VUkxfRU5DT0RFRDoKLSAgICAgIHJldHVybiBjcmVhdGVIVFRQVXJsRW5jb2RlZCgpOwotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX0FERFJFU1M6Ci0gICAgICByZXR1cm4gY3JlYXRlSFRUUEFkZHJlc3MoKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBIVFRQQmluZGluZyBjcmVhdGVIVFRQQmluZGluZygpCi0gIHsKLSAgICBIVFRQQmluZGluZ0ltcGwgaHR0cEJpbmRpbmcgPSBuZXcgSFRUUEJpbmRpbmdJbXBsKCk7Ci0gICAgcmV0dXJuIGh0dHBCaW5kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUE9wZXJhdGlvbiBjcmVhdGVIVFRQT3BlcmF0aW9uKCkKLSAgewotICAgIEhUVFBPcGVyYXRpb25JbXBsIGh0dHBPcGVyYXRpb24gPSBuZXcgSFRUUE9wZXJhdGlvbkltcGwoKTsKLSAgICByZXR1cm4gaHR0cE9wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEhUVFBVcmxSZXBsYWNlbWVudCBjcmVhdGVIVFRQVXJsUmVwbGFjZW1lbnQoKQotICB7Ci0gICAgSFRUUFVybFJlcGxhY2VtZW50SW1wbCBodHRwVXJsUmVwbGFjZW1lbnQgPSBuZXcgSFRUUFVybFJlcGxhY2VtZW50SW1wbCgpOwotICAgIHJldHVybiBodHRwVXJsUmVwbGFjZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBIVFRQVXJsRW5jb2RlZCBjcmVhdGVIVFRQVXJsRW5jb2RlZCgpCi0gIHsKLSAgICBIVFRQVXJsRW5jb2RlZEltcGwgaHR0cFVybEVuY29kZWQgPSBuZXcgSFRUUFVybEVuY29kZWRJbXBsKCk7Ci0gICAgcmV0dXJuIGh0dHBVcmxFbmNvZGVkOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUEFkZHJlc3MgY3JlYXRlSFRUUEFkZHJlc3MoKQotICB7Ci0gICAgSFRUUEFkZHJlc3NJbXBsIGh0dHBBZGRyZXNzID0gbmV3IEhUVFBBZGRyZXNzSW1wbCgpOwotICAgIHJldHVybiBodHRwQWRkcmVzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEhUVFBQYWNrYWdlIGdldEhUVFBQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiAoSFRUUFBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBIVFRQUGFja2FnZSBnZXRQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiBIVFRQUGFja2FnZS5lSU5TVEFOQ0U7Ci0gIH0KLX0gLy9IVFRQRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUE9wZXJhdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUE9wZXJhdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhOGNhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBPcGVyYXRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3BlcmF0aW9uPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbC5IVFRQT3BlcmF0aW9uSW1wbCNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSFRUUE9wZXJhdGlvbkltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBIVFRQT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX1VSSV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uVVJJKCkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uVVJJID0gTE9DQVRJT05fVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEhUVFBPcGVyYXRpb25JbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBIVFRQUGFja2FnZS5MaXRlcmFscy5IVFRQX09QRVJBVElPTjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpCi0gIHsKLSAgICByZXR1cm4gbG9jYXRpb25VUkk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uVVJJKFN0cmluZyBuZXdMb2NhdGlvblVSSSkKLSAgewotICAgIFN0cmluZyBvbGRMb2NhdGlvblVSSSA9IGxvY2F0aW9uVVJJOwotICAgIGxvY2F0aW9uVVJJID0gbmV3TG9jYXRpb25VUkk7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSFRUUFBhY2thZ2UuSFRUUF9PUEVSQVRJT05fX0xPQ0FUSU9OX1VSSSwgb2xkTG9jYXRpb25VUkksIGxvY2F0aW9uVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OX19MT0NBVElPTl9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TG9jYXRpb25VUkkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJOgotICAgICAgc2V0TG9jYXRpb25VUkkoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJOgotICAgICAgc2V0TG9jYXRpb25VUkkoTE9DQVRJT05fVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJOgotICAgICAgcmV0dXJuIExPQ0FUSU9OX1VSSV9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb25VUkkgIT0gbnVsbCA6ICFMT0NBVElPTl9VUklfRURFRkFVTFQuZXF1YWxzKGxvY2F0aW9uVVJJKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKGxvY2F0aW9uVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobG9jYXRpb25VUkkpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0TG9jYXRpb25VUkkoSFRUUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIEhUVFBDb25zdGFudHMuTE9DQVRJT05fVVJJX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IEhUVFBQYWNrYWdlLmVJTlNUQU5DRS5nZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgSFRUUENvbnN0YW50cy5MT0NBVElPTl9VUklfQVRUUklCVVRFLCBnZXRMb2NhdGlvblVSSSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShIVFRQQ29uc3RhbnRzLkhUVFBfTkFNRVNQQUNFX1VSSSwgSFRUUENvbnN0YW50cy5PUEVSQVRJT05fRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi19IC8vSFRUUE9wZXJhdGlvbkltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUFBhY2thZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBQYWNrYWdlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmY2YTFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUFBhY2thZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYWNrYWdlOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSFRUUFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgSFRUUFBhY2thZ2UKLXsKLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBodHRwQmluZGluZ0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBodHRwT3BlcmF0aW9uRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGh0dHBVcmxSZXBsYWNlbWVudEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBodHRwVXJsRW5jb2RlZEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBodHRwQWRkcmVzc0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpaHR0cEFkZHJlc3NFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaWh0dHBCaW5kaW5nRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlodHRwT3BlcmF0aW9uRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlodHRwVXJsRW5jb2RlZEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpaHR0cFVybFJlcGxhY2VtZW50RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAotICAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQotICAgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KLSAgICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYwotICAgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcwotICAgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAotICAgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZSNlTlNfVVJJCi0gICAqIEBzZWUgI2luaXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEhUVFBQYWNrYWdlSW1wbCgpCi0gIHsKLSAgICBzdXBlcihlTlNfVVJJLCBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcwotICAgKiBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4gIFNpbXBsZQotICAgKiBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGFsbAotICAgKiBkZXBlbmRlbnQgcGFja2FnZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBUaGlzIG1ldGhvZCBkcml2ZXMKLSAgICogaW5pdGlhbGl6YXRpb24gZm9yIGludGVyZGVwZW5kZW50IHBhY2thZ2VzIGRpcmVjdGx5LCBpbiBwYXJhbGxlbAotICAgKiB3aXRoIHRoaXMgcGFja2FnZSwgaXRzZWxmLgotICAgKiA8cD5PZiB0aGlzIHBhY2thZ2UgYW5kIGl0cyBpbnRlcmRlcGVuZGVuY2llcywgYWxsIHBhY2thZ2VzIHdoaWNoCi0gICAqIGhhdmUgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlaXIgVVJJIHZhbHVlcyBhcmUgZmlyc3QgY3JlYXRlZAotICAgKiBhbmQgcmVnaXN0ZXJlZC4gIFRoZSBwYWNrYWdlcyBhcmUgdGhlbiBpbml0aWFsaXplZCBpbiB0d28gc3RlcHM6Ci0gICAqIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgYWxsIG9mIHRoZSBwYWNrYWdlcyBhcmUgY3JlYXRlZCBiZWZvcmUgYW55Ci0gICAqIGFyZSBpbml0aWFsaXplZCwgc2luY2Ugb25lIHBhY2thZ2UncyBtZXRhLW1vZGVsIG9iamVjdHMgbWF5IHJlZmVyIHRvCi0gICAqIHRob3NlIG9mIGFub3RoZXIuCi0gICAqIDxwPkludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWZmZWN0IGFueSBwYWNrYWdlcyB0aGF0IGhhdmUKLSAgICogYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZU5TX1VSSQotICAgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotICAgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBIVFRQUGFja2FnZSBpbml0KCkKLSAgewotICAgIGlmIChpc0luaXRlZCkKLSAgICAgIHJldHVybiAoSFRUUFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoSFRUUFBhY2thZ2UuZU5TX1VSSSk7Ci0KLSAgICAvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCi0gICAgSFRUUFBhY2thZ2VJbXBsIHRoZUhUVFBQYWNrYWdlID0gKEhUVFBQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgaW5zdGFuY2VvZiBIVFRQUGFja2FnZUltcGwKLSAgICAgID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgOiBuZXcgSFRUUFBhY2thZ2VJbXBsKCkpOwotCi0gICAgaXNJbml0ZWQgPSB0cnVlOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCi0gICAgV1NETFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOwotICAgIFhTRFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOwotCi0gICAgLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLSAgICB0aGVIVFRQUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQotICAgIC8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLSAgICB0aGVIVFRQUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0KLSAgICAvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0gICAgdGhlSFRUUFBhY2thZ2UuZnJlZXplKCk7Ci0KLSAgICByZXR1cm4gdGhlSFRUUFBhY2thZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SFRUUEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCaW5kaW5nRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRIVFRQQmluZGluZ19WZXJiKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlodHRwQmluZGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEhUVFBPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGh0dHBPcGVyYXRpb25FQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEhUVFBPcGVyYXRpb25fTG9jYXRpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWh0dHBPcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRIVFRQVXJsUmVwbGFjZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBVcmxSZXBsYWNlbWVudEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRIVFRQVXJsRW5jb2RlZCgpCi0gIHsKLSAgICByZXR1cm4gaHR0cFVybEVuY29kZWRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SFRUUEFkZHJlc3MoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBBZGRyZXNzRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRIVFRQQWRkcmVzc19Mb2NhdGlvblVSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpaHR0cEFkZHJlc3NFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJSFRUUEFkZHJlc3MoKQotICB7Ci0gICAgcmV0dXJuIGlodHRwQWRkcmVzc0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJSFRUUEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGlodHRwQmluZGluZ0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJSFRUUE9wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaWh0dHBPcGVyYXRpb25FQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUhUVFBVcmxFbmNvZGVkKCkKLSAgewotICAgIHJldHVybiBpaHR0cFVybEVuY29kZWRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUhUVFBVcmxSZXBsYWNlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gaWh0dHBVcmxSZXBsYWNlbWVudEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEhUVFBGYWN0b3J5IGdldEhUVFBGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiAoSFRUUEZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcwotICAgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotICB7Ci0gICAgaWYgKGlzQ3JlYXRlZCkKLSAgICAgIHJldHVybjsKLSAgICBpc0NyZWF0ZWQgPSB0cnVlOwotCi0gICAgLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCi0gICAgaHR0cEJpbmRpbmdFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSFRUUF9CSU5ESU5HKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGh0dHBCaW5kaW5nRUNsYXNzLCBIVFRQX0JJTkRJTkdfX1ZFUkIpOwotCi0gICAgaHR0cE9wZXJhdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhIVFRQX09QRVJBVElPTik7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShodHRwT3BlcmF0aW9uRUNsYXNzLCBIVFRQX09QRVJBVElPTl9fTE9DQVRJT05fVVJJKTsKLQotICAgIGh0dHBVcmxSZXBsYWNlbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhIVFRQX1VSTF9SRVBMQUNFTUVOVCk7Ci0KLSAgICBodHRwVXJsRW5jb2RlZEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhIVFRQX1VSTF9FTkNPREVEKTsKLQotICAgIGh0dHBBZGRyZXNzRUNsYXNzID0gY3JlYXRlRUNsYXNzKEhUVFBfQUREUkVTUyk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShodHRwQWRkcmVzc0VDbGFzcywgSFRUUF9BRERSRVNTX19MT0NBVElPTl9VUkkpOwotCi0gICAgaWh0dHBBZGRyZXNzRUNsYXNzID0gY3JlYXRlRUNsYXNzKElIVFRQX0FERFJFU1MpOwotCi0gICAgaWh0dHBCaW5kaW5nRUNsYXNzID0gY3JlYXRlRUNsYXNzKElIVFRQX0JJTkRJTkcpOwotCi0gICAgaWh0dHBPcGVyYXRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUhUVFBfT1BFUkFUSU9OKTsKLQotICAgIGlodHRwVXJsRW5jb2RlZEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJSFRUUF9VUkxfRU5DT0RFRCk7Ci0KLSAgICBpaHR0cFVybFJlcGxhY2VtZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKElIVFRQX1VSTF9SRVBMQUNFTUVOVCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCi0gICAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLSAgewotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgcmV0dXJuOwotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCi0gICAgc2V0TmFtZShlTkFNRSk7Ci0gICAgc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7Ci0gICAgc2V0TnNVUkkoZU5TX1VSSSk7Ci0KLSAgICAvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCi0gICAgV1NETFBhY2thZ2UgdGhlV1NETFBhY2thZ2UgPSAoV1NETFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoV1NETFBhY2thZ2UuZU5TX1VSSSk7Ci0KLSAgICAvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0gICAgaHR0cEJpbmRpbmdFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgaHR0cEJpbmRpbmdFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJSFRUUEJpbmRpbmcoKSk7Ci0gICAgaHR0cE9wZXJhdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBodHRwT3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUhUVFBPcGVyYXRpb24oKSk7Ci0gICAgaHR0cFVybFJlcGxhY2VtZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIGh0dHBVcmxSZXBsYWNlbWVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElIVFRQVXJsUmVwbGFjZW1lbnQoKSk7Ci0gICAgaHR0cFVybEVuY29kZWRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgaHR0cFVybEVuY29kZWRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJSFRUUFVybEVuY29kZWQoKSk7Ci0gICAgaHR0cEFkZHJlc3NFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgaHR0cEFkZHJlc3NFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJSFRUUEFkZHJlc3MoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycwotICAgIGluaXRFQ2xhc3MoaHR0cEJpbmRpbmdFQ2xhc3MsIEhUVFBCaW5kaW5nLmNsYXNzLCAiSFRUUEJpbmRpbmciLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEhUVFBCaW5kaW5nX1ZlcmIoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAidmVyYiIsIG51bGwsIDAsIDEsIEhUVFBCaW5kaW5nLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGh0dHBPcGVyYXRpb25FQ2xhc3MsIEhUVFBPcGVyYXRpb24uY2xhc3MsICJIVFRQT3BlcmF0aW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRIVFRQT3BlcmF0aW9uX0xvY2F0aW9uVVJJKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgImxvY2F0aW9uVVJJIiwgbnVsbCwgMCwgMSwgSFRUUE9wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGh0dHBVcmxSZXBsYWNlbWVudEVDbGFzcywKLSAgICAgIEhUVFBVcmxSZXBsYWNlbWVudC5jbGFzcywKLSAgICAgICJIVFRQVXJsUmVwbGFjZW1lbnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaHR0cFVybEVuY29kZWRFQ2xhc3MsIEhUVFBVcmxFbmNvZGVkLmNsYXNzLCAiSFRUUFVybEVuY29kZWQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaHR0cEFkZHJlc3NFQ2xhc3MsIEhUVFBBZGRyZXNzLmNsYXNzLCAiSFRUUEFkZHJlc3MiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEhUVFBBZGRyZXNzX0xvY2F0aW9uVVJJKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgImxvY2F0aW9uVVJJIiwgbnVsbCwgMCwgMSwgSFRUUEFkZHJlc3MuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpaHR0cEFkZHJlc3NFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcy5jbGFzcywKLSAgICAgICJJSFRUUEFkZHJlc3MiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlodHRwQmluZGluZ0VDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nLmNsYXNzLAotICAgICAgIklIVFRQQmluZGluZyIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaWh0dHBPcGVyYXRpb25FQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uLmNsYXNzLAotICAgICAgIklIVFRQT3BlcmF0aW9uIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpaHR0cFVybEVuY29kZWRFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZC5jbGFzcywKLSAgICAgICJJSFRUUFVybEVuY29kZWQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlodHRwVXJsUmVwbGFjZW1lbnRFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQuY2xhc3MsCi0gICAgICAiSUhUVFBVcmxSZXBsYWNlbWVudCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBDcmVhdGUgcmVzb3VyY2UKLSAgICBjcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKLSAgfQotfSAvL0hUVFBQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQVXJsRW5jb2RlZEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL2ltcGwvSFRUUFVybEVuY29kZWRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNzc3YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQVXJsRW5jb2RlZEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VcmwgRW5jb2RlZDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEhUVFBVcmxFbmNvZGVkSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEhUVFBVcmxFbmNvZGVkCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEhUVFBVcmxFbmNvZGVkSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9VUkxfRU5DT0RFRDsKLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKEhUVFBDb25zdGFudHMuSFRUUF9OQU1FU1BBQ0VfVVJJLCBIVFRQQ29uc3RhbnRzLlVSTF9FTkNPREVEX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotfSAvL0hUVFBVcmxFbmNvZGVkSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvaW1wbC9IVFRQVXJsUmVwbGFjZW1lbnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBVcmxSZXBsYWNlbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5NjRjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC9pbXBsL0hUVFBVcmxSZXBsYWNlbWVudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VXJsIFJlcGxhY2VtZW50PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSFRUUFVybFJlcGxhY2VtZW50SW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIEhUVFBVcmxSZXBsYWNlbWVudAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBIVFRQVXJsUmVwbGFjZW1lbnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBIVFRQUGFja2FnZS5MaXRlcmFscy5IVFRQX1VSTF9SRVBMQUNFTUVOVDsKLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKEhUVFBDb25zdGFudHMuSFRUUF9OQU1FU1BBQ0VfVVJJLCBIVFRQQ29uc3RhbnRzLlVSTF9SRVBMQUNFTUVOVF9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLX0gLy9IVFRQVXJsUmVwbGFjZW1lbnRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQQWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JjMDJkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwKLXsKLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgSFRUUFBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSFRUUEFkYXB0ZXJGYWN0b3J5KCkKLSAgewotICAgIGlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBtb2RlbFBhY2thZ2UgPSBIVFRQUGFja2FnZS5lSU5TVEFOQ0U7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KQotICAgIHsKLSAgICAgIHJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEhUVFBTd2l0Y2ggbW9kZWxTd2l0Y2ggPSBuZXcgSFRUUFN3aXRjaCgpCi0gICAgewotICAgICAgcHVibGljIE9iamVjdCBjYXNlSFRUUEJpbmRpbmcoSFRUUEJpbmRpbmcgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSFRUUEJpbmRpbmdBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUhUVFBPcGVyYXRpb24oSFRUUE9wZXJhdGlvbiBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVIVFRQT3BlcmF0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQVXJsUmVwbGFjZW1lbnQoSFRUUFVybFJlcGxhY2VtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSFRUUFVybEVuY29kZWQoSFRUUFVybEVuY29kZWQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSFRUUFVybEVuY29kZWRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUhUVFBBZGRyZXNzKEhUVFBBZGRyZXNzIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUhUVFBBZGRyZXNzQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJSFRUUEFkZHJlc3MoamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3Mgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUhUVFBBZGRyZXNzQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJSFRUUEJpbmRpbmcoamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEJpbmRpbmcgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUhUVFBCaW5kaW5nQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJSFRUUE9wZXJhdGlvbihqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlIVFRQT3BlcmF0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJSFRUUFVybEVuY29kZWQoamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUhUVFBVcmxFbmNvZGVkQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJSFRUUFVybFJlcGxhY2VtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJSFRUUFVybFJlcGxhY2VtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VXU0RMRWxlbWVudChXU0RMRWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVXU0RMRWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQob3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOwotICAgICAgfQotICAgIH07Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0gICAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkKLSAgewotICAgIHJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nIDxlbT5CaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVIVFRQQmluZGluZ0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUE9wZXJhdGlvbiA8ZW0+T3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUhUVFBPcGVyYXRpb25BZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCA8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsUmVwbGFjZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSFRUUFVybFJlcGxhY2VtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZCA8ZW0+VXJsIEVuY29kZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBVcmxFbmNvZGVkCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUhUVFBVcmxFbmNvZGVkQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzcyA8ZW0+QWRkcmVzczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3MKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSFRUUEFkZHJlc3NBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MgPGVtPklIVFRQIEFkZHJlc3M8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3MKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUhUVFBBZGRyZXNzQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIDxlbT5JSFRUUCBCaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlIVFRQQmluZGluZ0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uIDxlbT5JSFRUUCBPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJSFRUUE9wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQVXJsRW5jb2RlZCA8ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUhUVFBVcmxFbmNvZGVkQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCA8ZW0+SUhUVFAgVXJsIFJlcGxhY2VtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJSFRUUFVybFJlcGxhY2VtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50IDxlbT5FbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVdTRExFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19IC8vSFRUUEFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGExZmYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUENvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC51dGlsOwotCi0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBIVFRQQ29uc3RhbnRzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFERFJFU1NfRUxFTUVOVF9UQUcgPSAiYWRkcmVzcyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0VMRU1FTlRfVEFHID0gImJpbmRpbmciOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUSU9OX0VMRU1FTlRfVEFHID0gIm9wZXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVUkxfRU5DT0RFRF9FTEVNRU5UX1RBRyA9ICJ1cmxFbmNvZGVkIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSTF9SRVBMQUNFTUVOVF9FTEVNRU5UX1RBRyA9ICJ1cmxSZXBsYWNlbWVudCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX05BTUVTUEFDRV9VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9VUklfQVRUUklCVVRFID0gImxvY2F0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUkJfQVRUUklCVVRFID0gInZlcmIiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgPyBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA6IG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLWh0dHAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9odHRwL2ludGVybmFsL3V0aWwvSFRUUEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0OTdmOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTsKLQotCi1wdWJsaWMgY2xhc3MgSFRUUEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBpbXBsZW1lbnRzIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotewotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIGlmIChIVFRQQ29uc3RhbnRzLkhUVFBfTkFNRVNQQUNFX1VSSS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICB7Ci0gICAgICBpZiAoSFRUUENvbnN0YW50cy5BRERSRVNTX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBBZGRyZXNzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChIVFRQQ29uc3RhbnRzLkJJTkRJTkdfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUEJpbmRpbmcoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKEhUVFBDb25zdGFudHMuT1BFUkFUSU9OX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBPcGVyYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKEhUVFBDb25zdGFudHMuVVJMX0VOQ09ERURfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIVFRQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSFRUUFVybEVuY29kZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKEhUVFBDb25zdGFudHMuVVJMX1JFUExBQ0VNRU5UX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiVW5oYW5kbGVkIGxvY2FsTmFtZTogIiArIGxvY2FsTmFtZSk7Ci0gICAgICAgIHJldHVybiBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiVW5oYW5kbGVkIG5hbWVzcGFjZTogIiArIG5hbWVzcGFjZSk7Ci0gICAgICByZXR1cm4gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtaHR0cC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL2h0dHAvaW50ZXJuYWwvdXRpbC9IVFRQU3dpdGNoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxZGUxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1odHRwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvaHR0cC9pbnRlcm5hbC91dGlsL0hUVFBTd2l0Y2guamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgotICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaCBkb1N3aXRjaChvYmplY3QpfQotICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAotICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAotICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQUGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSFRUUFN3aXRjaAotewotICAvKioKLSAgICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIEhUVFBQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEhUVFBTd2l0Y2goKQotICB7Ci0gICAgaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vZGVsUGFja2FnZSA9IEhUVFBQYWNrYWdlLmVJTlNUQU5DRTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkKLSAgewotICAgIHJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKQotICAgIHsKLSAgICAgIHJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgTGlzdCBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOwotICAgICAgcmV0dXJuIGVTdXBlclR5cGVzLmlzRW1wdHkoKSA/IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDogZG9Td2l0Y2goKEVDbGFzcyllU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgc3dpdGNoIChjbGFzc2lmaWVySUQpCi0gICAgewotICAgICAgY2FzZSBIVFRQUGFja2FnZS5IVFRQX0JJTkRJTkc6Ci0gICAgICB7Ci0gICAgICAgIEhUVFBCaW5kaW5nIGh0dHBCaW5kaW5nID0gKEhUVFBCaW5kaW5nKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlSFRUUEJpbmRpbmcoaHR0cEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBCaW5kaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJSFRUUEJpbmRpbmcoaHR0cEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGh0dHBCaW5kaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfT1BFUkFUSU9OOgotICAgICAgewotICAgICAgICBIVFRQT3BlcmF0aW9uIGh0dHBPcGVyYXRpb24gPSAoSFRUUE9wZXJhdGlvbil0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUhUVFBPcGVyYXRpb24oaHR0cE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUhUVFBPcGVyYXRpb24oaHR0cE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoaHR0cE9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIEhUVFBQYWNrYWdlLkhUVFBfVVJMX1JFUExBQ0VNRU5UOgotICAgICAgewotICAgICAgICBIVFRQVXJsUmVwbGFjZW1lbnQgaHR0cFVybFJlcGxhY2VtZW50ID0gKEhUVFBVcmxSZXBsYWNlbWVudCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUhUVFBVcmxSZXBsYWNlbWVudChodHRwVXJsUmVwbGFjZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBVcmxSZXBsYWNlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUhUVFBVcmxSZXBsYWNlbWVudChodHRwVXJsUmVwbGFjZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGh0dHBVcmxSZXBsYWNlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBVcmxSZXBsYWNlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9VUkxfRU5DT0RFRDoKLSAgICAgIHsKLSAgICAgICAgSFRUUFVybEVuY29kZWQgaHR0cFVybEVuY29kZWQgPSAoSFRUUFVybEVuY29kZWQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VIVFRQVXJsRW5jb2RlZChodHRwVXJsRW5jb2RlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cFVybEVuY29kZWQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlIVFRQVXJsRW5jb2RlZChodHRwVXJsRW5jb2RlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoaHR0cFVybEVuY29kZWQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwVXJsRW5jb2RlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgSFRUUFBhY2thZ2UuSFRUUF9BRERSRVNTOgotICAgICAgewotICAgICAgICBIVFRQQWRkcmVzcyBodHRwQWRkcmVzcyA9IChIVFRQQWRkcmVzcyl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUhUVFBBZGRyZXNzKGh0dHBBZGRyZXNzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwQWRkcmVzcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUhUVFBBZGRyZXNzKGh0dHBBZGRyZXNzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChodHRwQWRkcmVzcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KGh0dHBBZGRyZXNzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmc8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUhUVFBCaW5kaW5nKEhUVFBCaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSFRUUE9wZXJhdGlvbihIVFRQT3BlcmF0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VXJsIFJlcGxhY2VtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSFRUUFVybFJlcGxhY2VtZW50KEhUVFBVcmxSZXBsYWNlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VIVFRQVXJsRW5jb2RlZChIVFRQVXJsRW5jb2RlZCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QWRkcmVzczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BZGRyZXNzPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSFRUUEFkZHJlc3MoSFRUUEFkZHJlc3Mgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklIVFRQIEFkZHJlc3M8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUhUVFAgQWRkcmVzczwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlIVFRQQWRkcmVzcyhqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzcyBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUhUVFAgQmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBCaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUhUVFBCaW5kaW5nKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBPcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUhUVFAgT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUhUVFBPcGVyYXRpb24oamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUE9wZXJhdGlvbiBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUhUVFAgVXJsIEVuY29kZWQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJSFRUUFVybEVuY29kZWQoamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklIVFRQIFVybCBSZXBsYWNlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSFRUUCBVcmwgUmVwbGFjZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJSFRUUFVybFJlcGxhY2VtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBVcmxSZXBsYWNlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlV1NETEVsZW1lbnQoV1NETEVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0gLy9IVFRQU3dpdGNoCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUNvbnRlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5MDNjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FQ29udGVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q29udGVudDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQjZ2V0VHlwZSA8ZW0+VHlwZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50I2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlI2dldE1JTUVDb250ZW50KCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1JTUVDb250ZW50IGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UeXBlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VHlwZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlI2dldE1JTUVDb250ZW50X1R5cGUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFR5cGUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50I2dldFR5cGUgPGVtPlR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlR5cGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRUeXBlKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FUGFydDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFUGFydChQYXJ0KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNnZXRNSU1FQ29udGVudF9FUGFydCgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBQYXJ0IGdldEVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVQYXJ0KFBhcnQgdmFsdWUpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UGFydChTdHJpbmcgcGFydCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0UGFydCgpOwotCi19IC8vIE1JTUVDb250ZW50CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRjNGE4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTUlNRUZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeQotewotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1JTUVGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVGYWN0b3J5SW1wbC5pbml0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q29udGVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q29udGVudDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTUlNRUNvbnRlbnQgY3JlYXRlTUlNRUNvbnRlbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QYXJ0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QYXJ0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNSU1FUGFydCBjcmVhdGVNSU1FUGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTUlNRU11bHRpcGFydFJlbGF0ZWQgY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaW1lIFhtbDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWltZSBYbWw8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1JTUVNaW1lWG1sIGNyZWF0ZU1JTUVNaW1lWG1sKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTUlNRVBhY2thZ2UgZ2V0TUlNRVBhY2thZ2UoKTsKLQotfSAvL01JTUVGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU1pbWVYbWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkyZDhjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTWltZVhtbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaW1lIFhtbDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWwjZ2V0RVBhcnQgPGVtPkVQYXJ0PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UjZ2V0TUlNRU1pbWVYbWwoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTUlNRU1pbWVYbWwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FUGFydDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcnQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFUGFydChQYXJ0KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNnZXRNSU1FTWltZVhtbF9FUGFydCgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBQYXJ0IGdldEVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbCNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVQYXJ0KFBhcnQgdmFsdWUpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UGFydChTdHJpbmcgcGFydCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0UGFydCgpOwotCi19IC8vIE1JTUVNaW1lWG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRU11bHRpcGFydFJlbGF0ZWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ2NTBiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9NSU1FTXVsdGlwYXJ0UmVsYXRlZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZTsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NdWx0aXBhcnQgUmVsYXRlZDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQjZ2V0RU1JTUVQYXJ0IDxlbT5FTUlNRSBQYXJ0PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UjZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTUlNRU11bHRpcGFydFJlbGF0ZWQgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNSU1FIFBhcnQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVNSU1FIFBhcnQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU1JTUUgUGFydDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UjZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWRfRU1JTUVQYXJ0KCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydCIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVNSU1FUGFydCgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgYWRkTUlNRVBhcnQoTUlNRVBhcnQgbWltZVBhcnQpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5MaXN0IiBtYW55PSJmYWxzZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTGlzdCBnZXRNSU1FUGFydHMoKTsKLQotfSAvLyBNSU1FTXVsdGlwYXJ0UmVsYXRlZApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MzcyZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhY2thZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAotICogPHVsPgotICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAqIDwvdWw+Ci0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVGYWN0b3J5Ci0gKiBAbW9kZWwga2luZD0icGFja2FnZSIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBNSU1FUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlCi17Ci0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOQU1FID0gIm1pbWUiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9NSU1FIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTlNfUFJFRklYID0gIm1pbWUiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBNSU1FUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwuaW5pdCgpOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVDb250ZW50SW1wbCA8ZW0+Q29udGVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVDb250ZW50SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRNSU1FQ29udGVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBNSU1FX0NPTlRFTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9DT05URU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX0NPTlRFTlRfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfQ09OVEVOVF9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9DT05URU5UX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX0NPTlRFTlRfX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfQ09OVEVOVF9fRVBBUlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Db250ZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfQ09OVEVOVF9GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYXJ0SW1wbCA8ZW0+UGFydDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYXJ0SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRNSU1FUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBNSU1FX1BBUlQgPSAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9QQVJUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX1BBUlRfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1JTUVfUEFSVF9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9QQVJUX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX1BBUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwgPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IE1JTUVfTVVMVElQQVJUX1JFTEFURUQgPSAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRUxFTUVOVF9UWVBFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTUlNRSBQYXJ0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVNaW1lWG1sSW1wbCA8ZW0+TWltZSBYbWw8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FTWltZVhtbEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0TUlNRU1pbWVYbWwoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgTUlNRV9NSU1FX1hNTCA9IDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUlNRV9NSU1FX1hNTF9fRVBBUlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NaW1lIFhtbDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNSU1FX01JTUVfWE1MX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQgPGVtPklNSU1FIFBhcnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRJTUlNRVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU1JTUVfUEFSVCA9IDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBQYXJ0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNSU1FX1BBUlRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0SU1JTUVNdWx0aXBhcnRSZWxhdGVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElNSU1FX01VTFRJUEFSVF9SRUxBVEVEID0gNTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNSU1FX01VTFRJUEFSVF9SRUxBVEVEX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50IDxlbT5JTUlNRSBDb250ZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0SU1JTUVDb250ZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElNSU1FX0NPTlRFTlQgPSA2OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SU1JTUUgQ29udGVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTUlNRV9DT05URU5UX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIDxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldElNSU1FTWltZVhtbCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJTUlNRV9NSU1FX1hNTCA9IDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTUlNRV9NSU1FX1hNTF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5MaXN0PC9lbT4nIGRhdGEgdHlwZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YS51dGlsLkxpc3QKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0TGlzdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBMSVNUID0gODsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50IDxlbT5Db250ZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNvbnRlbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRNSU1FQ29udGVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VHlwZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQjZ2V0VHlwZSgpCi0gICAqIEBzZWUgI2dldE1JTUVDb250ZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRNSU1FQ29udGVudF9UeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50I2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVQYXJ0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FQ29udGVudCNnZXRFUGFydCgpCi0gICAqIEBzZWUgI2dldE1JTUVDb250ZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRNSU1FQ29udGVudF9FUGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQgPGVtPlBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldE1JTUVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cyA8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydCNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICogQHNlZSAjZ2V0TUlNRVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldE1JTUVQYXJ0X0VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIDxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQjZ2V0RU1JTUVQYXJ0IDxlbT5FTUlNRSBQYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FTUlNRSBQYXJ0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCNnZXRFTUlNRVBhcnQoKQotICAgKiBAc2VlICNnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWRfRU1JTUVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbCA8ZW0+TWltZSBYbWw8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWltZSBYbWw8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNaW1lWG1sCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRNSU1FTWltZVhtbCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbCNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FUGFydDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWwjZ2V0RVBhcnQoKQotICAgKiBAc2VlICNnZXRNSU1FTWltZVhtbCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0TUlNRU1pbWVYbWxfRVBhcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQgPGVtPklNSU1FIFBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1JTUUgUGFydDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJTUlNRVBhcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCA8ZW0+SU1JTUUgQ29udGVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JTUlNRSBDb250ZW50PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElNSU1FQ29udGVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCA8ZW0+SU1JTUUgTWltZSBYbWw8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1JTUUgTWltZSBYbWw8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SU1JTUVNaW1lWG1sKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBqYXZhLnV0aWwuTGlzdCA8ZW0+TGlzdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+TGlzdDwvZW0+Jy4KLSAgICogQHNlZSBqYXZhLnV0aWwuTGlzdAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YS51dGlsLkxpc3QiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVEYXRhVHlwZSBnZXRMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE1JTUVGYWN0b3J5IGdldE1JTUVGYWN0b3J5KCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKLSAgICogPHVsPgotICAgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gICAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gICAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICAgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICAgKiA8L3VsPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50ZXJmYWNlIExpdGVyYWxzCi0gIHsKLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRUNvbnRlbnRJbXBsIDxlbT5Db250ZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRUNvbnRlbnRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0TUlNRUNvbnRlbnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgTUlNRV9DT05URU5UID0gZUlOU1RBTkNFLmdldE1JTUVDb250ZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBNSU1FX0NPTlRFTlRfX1RZUEUgPSBlSU5TVEFOQ0UuZ2V0TUlNRUNvbnRlbnRfVHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE1JTUVfQ09OVEVOVF9fRVBBUlQgPSBlSU5TVEFOQ0UuZ2V0TUlNRUNvbnRlbnRfRVBhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFydEltcGwgPGVtPlBhcnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFydEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRNSU1FUGFydCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBNSU1FX1BBUlQgPSBlSU5TVEFOQ0UuZ2V0TUlNRVBhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBlSU5TVEFOQ0UuZ2V0TUlNRVBhcnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbCA8ZW0+TXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBNSU1FX01VTFRJUEFSVF9SRUxBVEVEID0gZUlOU1RBTkNFLmdldE1JTUVNdWx0aXBhcnRSZWxhdGVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU1JTUUgUGFydDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQgPSBlSU5TVEFOQ0UuZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWRfRU1JTUVQYXJ0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU1pbWVYbWxJbXBsIDxlbT5NaW1lIFhtbDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVNaW1lWG1sSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldE1JTUVNaW1lWG1sKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIE1JTUVfTUlNRV9YTUwgPSBlSU5TVEFOQ0UuZ2V0TUlNRU1pbWVYbWwoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBNSU1FX01JTUVfWE1MX19FUEFSVCA9IGVJTlNUQU5DRS5nZXRNSU1FTWltZVhtbF9FUGFydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0IDxlbT5JTUlNRSBQYXJ0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRJTUlNRVBhcnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU1JTUVfUEFSVCA9IGVJTlNUQU5DRS5nZXRJTUlNRVBhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCA8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhY2thZ2VJbXBsI2dldElNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCA9IGVJTlNUQU5DRS5nZXRJTUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCA8ZW0+SU1JTUUgQ29udGVudDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0SU1JTUVDb250ZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElNSU1FX0NPTlRFTlQgPSBlSU5TVEFOQ0UuZ2V0SU1JTUVDb250ZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwgPGVtPklNSU1FIE1pbWUgWG1sPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU1pbWVYbWwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVQYWNrYWdlSW1wbCNnZXRJTUlNRU1pbWVYbWwoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU1JTUVfTUlNRV9YTUwgPSBlSU5TVEFOQ0UuZ2V0SU1JTUVNaW1lWG1sKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+TGlzdDwvZW0+JyBkYXRhIHR5cGUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmEudXRpbC5MaXN0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FUGFja2FnZUltcGwjZ2V0TGlzdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVEYXRhVHlwZSBMSVNUID0gZUlOU1RBTkNFLmdldExpc3QoKTsKLQotICB9Ci0KLX0gLy9NSU1FUGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL01JTUVQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MjRhYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvTUlNRVBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWU7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0I2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2UjZ2V0TUlNRVBhcnQoKQotICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5JTUlNRVBhcnQiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTUlNRVBhcnQgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNnZXRNSU1FUGFydF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGV4dGVuc2liaWxpdHlFbGVtZW50VHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSUV4dGVuc2liaWxpdHlFbGVtZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIGFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLkxpc3QiIG1hbnk9ImZhbHNlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBMaXN0IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi19IC8vIE1JTUVQYXJ0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVDb250ZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FQ29udGVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA2OTQyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVDb250ZW50SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q29udGVudDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRUNvbnRlbnRJbXBsI2dldFR5cGUgPGVtPlR5cGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsLk1JTUVDb250ZW50SW1wbCNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FQ29udGVudEltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBNSU1FQ29udGVudAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGUoKSA8ZW0+VHlwZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlKCkgPGVtPlR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHR5cGUgPSBUWVBFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUGFydCgpIDxlbT5FUGFydDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUGFydCBlUGFydCA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgcGFydDsgLy8gVEJECi0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTUlNRUNvbnRlbnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBNSU1FUGFja2FnZS5MaXRlcmFscy5NSU1FX0NPTlRFTlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgbmV3VHlwZSkKLSAgewotICAgIFN0cmluZyBvbGRUeXBlID0gdHlwZTsKLSAgICB0eXBlID0gbmV3VHlwZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX1RZUEUsIG9sZFR5cGUsIHR5cGUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBhcnQgZ2V0RVBhcnQoKQotICB7Ci0gICAgaWYgKGVQYXJ0ICE9IG51bGwgJiYgZVBhcnQuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRVBhcnQgPSAoSW50ZXJuYWxFT2JqZWN0KWVQYXJ0OwotICAgICAgZVBhcnQgPSAoUGFydCllUmVzb2x2ZVByb3h5KG9sZEVQYXJ0KTsKLSAgICAgIGlmIChlUGFydCAhPSBvbGRFUGFydCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX0VQQVJULCBvbGRFUGFydCwgZVBhcnQpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVQYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUGFydCBiYXNpY0dldEVQYXJ0KCkKLSAgewotICAgIHJldHVybiBlUGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RVBhcnQoUGFydCBuZXdFUGFydCkKLSAgewotICAgIFBhcnQgb2xkRVBhcnQgPSBlUGFydDsKLSAgICBlUGFydCA9IG5ld0VQYXJ0OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRVBBUlQsIG9sZEVQYXJ0LCBlUGFydCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFydChTdHJpbmcgcGFydCkKLSAgewotICAgIHRoaXMucGFydCA9IHBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcnQoKQotICB7Ci0gICAgcmV0dXJuIHBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fVFlQRToKLSAgICAgIHJldHVybiBnZXRUeXBlKCk7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRVBBUlQ6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVQYXJ0KCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFUGFydCgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fVFlQRToKLSAgICAgIHNldFR5cGUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfQ09OVEVOVF9fRVBBUlQ6Ci0gICAgICBzZXRFUGFydCgoUGFydCluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX1RZUEU6Ci0gICAgICBzZXRUeXBlKFRZUEVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlRfX0VQQVJUOgotICAgICAgc2V0RVBhcnQoKFBhcnQpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19UWVBFOgotICAgICAgcmV0dXJuIFRZUEVfRURFRkFVTFQgPT0gbnVsbCA/IHR5cGUgIT0gbnVsbCA6ICFUWVBFX0VERUZBVUxULmVxdWFscyh0eXBlKTsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9DT05URU5UX19FUEFSVDoKLSAgICAgIHJldHVybiBlUGFydCAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAodHlwZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHR5cGUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0UGFydChNSU1FQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgTUlNRUNvbnN0YW50cy5QQVJUX0FUVFJJQlVURSkpOwotICAgIHNldFR5cGUoTUlNRUNvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIE1JTUVDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBNSU1FUGFja2FnZS5lSU5TVEFOQ0UuZ2V0TUlNRUNvbnRlbnRfRVBhcnQoKSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBNSU1FQ29uc3RhbnRzLlBBUlRfQVRUUklCVVRFLCBnZXRQYXJ0KCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IE1JTUVQYWNrYWdlLmVJTlNUQU5DRS5nZXRNSU1FQ29udGVudF9UeXBlKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgTUlNRUNvbnN0YW50cy5UWVBFX0FUVFJJQlVURSwgZ2V0VHlwZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgTUlNRUNvbnN0YW50cy5DT05URU5UX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotfSAvL01JTUVDb250ZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MWJjYWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIE1JTUVGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1JTUVGYWN0b3J5IGluaXQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgTUlNRUZhY3RvcnkgdGhlTUlNRUZhY3RvcnkgPSAoTUlNRUZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL01JTUUiKTsgLy8kTk9OLU5MUy0xJCAKLSAgICAgIGlmICh0aGVNSU1FRmFjdG9yeSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gdGhlTUlNRUZhY3Rvcnk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIEVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbmV3IE1JTUVGYWN0b3J5SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTUlNRUZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKQotICB7Ci0gICAgc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlTUlNRUNvbnRlbnQoKTsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9QQVJUOgotICAgICAgcmV0dXJuIGNyZWF0ZU1JTUVQYXJ0KCk7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURUQ6Ci0gICAgICByZXR1cm4gY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTDoKLSAgICAgIHJldHVybiBjcmVhdGVNSU1FTWltZVhtbCgpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjcmVhdGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLkxJU1Q6Ci0gICAgICByZXR1cm4gY3JlYXRlTGlzdEZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLkxJU1Q6Ci0gICAgICByZXR1cm4gY29udmVydExpc3RUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVDb250ZW50IGNyZWF0ZU1JTUVDb250ZW50KCkKLSAgewotICAgIE1JTUVDb250ZW50SW1wbCBtaW1lQ29udGVudCA9IG5ldyBNSU1FQ29udGVudEltcGwoKTsKLSAgICByZXR1cm4gbWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNSU1FUGFydCBjcmVhdGVNSU1FUGFydCgpCi0gIHsKLSAgICBNSU1FUGFydEltcGwgbWltZVBhcnQgPSBuZXcgTUlNRVBhcnRJbXBsKCk7Ci0gICAgcmV0dXJuIG1pbWVQYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTUlNRU11bHRpcGFydFJlbGF0ZWQgY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKQotICB7Ci0gICAgTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsIG1pbWVNdWx0aXBhcnRSZWxhdGVkID0gbmV3IE1JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbCgpOwotICAgIHJldHVybiBtaW1lTXVsdGlwYXJ0UmVsYXRlZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVNaW1lWG1sIGNyZWF0ZU1JTUVNaW1lWG1sKCkKLSAgewotICAgIE1JTUVNaW1lWG1sSW1wbCBtaW1lTWltZVhtbCA9IG5ldyBNSU1FTWltZVhtbEltcGwoKTsKLSAgICByZXR1cm4gbWltZU1pbWVYbWw7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBMaXN0IGNyZWF0ZUxpc3RGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gKExpc3Qpc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydExpc3RUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVQYWNrYWdlIGdldE1JTUVQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiAoTUlNRVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBNSU1FUGFja2FnZSBnZXRQYWNrYWdlKCkKLSAgewotICAgIHJldHVybiBNSU1FUGFja2FnZS5lSU5TVEFOQ0U7Ci0gIH0KLX0gLy9NSU1FRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRU1pbWVYbWxJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVNaW1lWG1sSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWNjZTg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRU1pbWVYbWxJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaW1lIFhtbDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRU1pbWVYbWxJbXBsI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE1JTUVNaW1lWG1sSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIE1JTUVNaW1lWG1sCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUGFydCgpIDxlbT5FUGFydDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUGFydCBlUGFydCA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgcGFydDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBNSU1FTWltZVhtbEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIE1JTUVQYWNrYWdlLkxpdGVyYWxzLk1JTUVfTUlNRV9YTUw7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQYXJ0IGdldEVQYXJ0KCkKLSAgewotICAgIGlmIChlUGFydCAhPSBudWxsICYmIGVQYXJ0LmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVQYXJ0ID0gKEludGVybmFsRU9iamVjdCllUGFydDsKLSAgICAgIGVQYXJ0ID0gKFBhcnQpZVJlc29sdmVQcm94eShvbGRFUGFydCk7Ci0gICAgICBpZiAoZVBhcnQgIT0gb2xkRVBhcnQpCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTF9fRVBBUlQsIG9sZEVQYXJ0LCBlUGFydCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZVBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQYXJ0IGJhc2ljR2V0RVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGVQYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFUGFydChQYXJ0IG5ld0VQYXJ0KQotICB7Ci0gICAgUGFydCBvbGRFUGFydCA9IGVQYXJ0OwotICAgIGVQYXJ0ID0gbmV3RVBhcnQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTF9fRVBBUlQsIG9sZEVQYXJ0LCBlUGFydCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFydChTdHJpbmcgcGFydCkKLSAgewotICAgIHRoaXMucGFydCA9IHBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcnQoKQotICB7Ci0gICAgcmV0dXJuIHBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0VQQVJUOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFUGFydCgpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RVBhcnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01JTUVfWE1MX19FUEFSVDoKLSAgICAgIHNldEVQYXJ0KChQYXJ0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTUlNRV9YTUxfX0VQQVJUOgotICAgICAgc2V0RVBhcnQoKFBhcnQpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTF9fRVBBUlQ6Ci0gICAgICByZXR1cm4gZVBhcnQgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldFBhcnQoTUlNRUNvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIE1JTUVDb25zdGFudHMuUEFSVF9BVFRSSUJVVEUpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBNSU1FUGFja2FnZS5lSU5TVEFOQ0UuZ2V0TUlNRUNvbnRlbnRfRVBhcnQoKSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBNSU1FQ29uc3RhbnRzLlBBUlRfQVRUUklCVVRFLCBnZXRQYXJ0KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLCBNSU1FQ29uc3RhbnRzLk1JTUVfWE1MX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLX0gLy9NSU1FTWltZVhtbEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODU0ZjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpcGFydCBSZWxhdGVkPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwuaW1wbC5NSU1FTXVsdGlwYXJ0UmVsYXRlZEltcGwjZ2V0RU1JTUVQYXJ0IDxlbT5FTUlNRSBQYXJ0PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgTUlNRU11bHRpcGFydFJlbGF0ZWQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVNSU1FUGFydCgpIDxlbT5FTUlNRSBQYXJ0PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVNSU1FUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlTUlNRVBhcnQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTUlNRU11bHRpcGFydFJlbGF0ZWRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBNSU1FUGFja2FnZS5MaXRlcmFscy5NSU1FX01VTFRJUEFSVF9SRUxBVEVEOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RU1JTUVQYXJ0KCkKLSAgewotICAgIGlmIChlTUlNRVBhcnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlTUlNRVBhcnQgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoTUlNRVBhcnQuY2xhc3MsIHRoaXMsIE1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQpOwotICAgIH0KLSAgICByZXR1cm4gZU1JTUVQYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTUlNRVBhcnQoamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQgbWltZVBhcnQpCi0gIHsKLSAgICBnZXRFTUlNRVBhcnQoKS5hZGQobWltZVBhcnQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0TUlNRVBhcnRzKCkKLSAgewotICAgIHJldHVybiBnZXRFTUlNRVBhcnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVDoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RU1JTUVQYXJ0KCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX01VTFRJUEFSVF9SRUxBVEVEX19FTUlNRV9QQVJUOgotICAgICAgcmV0dXJuIGdldEVNSU1FUGFydCgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQ6Ci0gICAgICBnZXRFTUlNRVBhcnQoKS5jbGVhcigpOwotICAgICAgZ2V0RU1JTUVQYXJ0KCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQ6Ci0gICAgICBnZXRFTUlNRVBhcnQoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfTVVMVElQQVJUX1JFTEFURURfX0VNSU1FX1BBUlQ6Ci0gICAgICByZXR1cm4gZU1JTUVQYXJ0ICE9IG51bGwgJiYgIWVNSU1FUGFydC5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBpZiAoTUlNRUNvbnN0YW50cy5QQVJUX0VMRU1FTlRfVEFHLmVxdWFscyhjaGlsZC5nZXRMb2NhbE5hbWUoKSkpCi0gICAgewotICAgICAgTUlNRVBhcnQgbWltZVBhcnQgPSBNSU1FRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTUlNRVBhcnQoKTsKLSAgICAgIG1pbWVQYXJ0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgIG1pbWVQYXJ0LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgYWRkTUlNRVBhcnQobWltZVBhcnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLCBNSU1FQ29uc3RhbnRzLk1VTFRJUEFSVF9SRUxBVEVEX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwjY3JlYXRlRWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IHN1cGVyLmNyZWF0ZUVsZW1lbnQoKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0TUlNRVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgTUlNRVBhcnQpCi0gICAgICB7Ci0gICAgICAgIE1JTUVQYXJ0IG1pbWVQYXJ0ID0gKE1JTUVQYXJ0KW9iajsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9ICgoTUlNRVBhcnRJbXBsKW1pbWVQYXJ0KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL01JTUVNdWx0aXBhcnRSZWxhdGVkSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FUGFja2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRVBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGFlNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvaW1wbC9NSU1FUGFja2FnZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhY2thZ2U7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBNSU1FUGFja2FnZQotewotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIG1pbWVDb250ZW50RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIG1pbWVQYXJ0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIG1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIG1pbWVNaW1lWG1sRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGltaW1lUGFydEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaW1pbWVDb250ZW50RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGltaW1lTWltZVhtbEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVEYXRhVHlwZSBsaXN0RURhdGFUeXBlID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAotICAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQotICAgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KLSAgICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYwotICAgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcwotICAgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAotICAgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZSNlTlNfVVJJCi0gICAqIEBzZWUgI2luaXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIE1JTUVQYWNrYWdlSW1wbCgpCi0gIHsKLSAgICBzdXBlcihlTlNfVVJJLCBNSU1FRmFjdG9yeS5lSU5TVEFOQ0UpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcwotICAgKiBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4gIFNpbXBsZQotICAgKiBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGFsbAotICAgKiBkZXBlbmRlbnQgcGFja2FnZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBUaGlzIG1ldGhvZCBkcml2ZXMKLSAgICogaW5pdGlhbGl6YXRpb24gZm9yIGludGVyZGVwZW5kZW50IHBhY2thZ2VzIGRpcmVjdGx5LCBpbiBwYXJhbGxlbAotICAgKiB3aXRoIHRoaXMgcGFja2FnZSwgaXRzZWxmLgotICAgKiA8cD5PZiB0aGlzIHBhY2thZ2UgYW5kIGl0cyBpbnRlcmRlcGVuZGVuY2llcywgYWxsIHBhY2thZ2VzIHdoaWNoCi0gICAqIGhhdmUgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlaXIgVVJJIHZhbHVlcyBhcmUgZmlyc3QgY3JlYXRlZAotICAgKiBhbmQgcmVnaXN0ZXJlZC4gIFRoZSBwYWNrYWdlcyBhcmUgdGhlbiBpbml0aWFsaXplZCBpbiB0d28gc3RlcHM6Ci0gICAqIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgYWxsIG9mIHRoZSBwYWNrYWdlcyBhcmUgY3JlYXRlZCBiZWZvcmUgYW55Ci0gICAqIGFyZSBpbml0aWFsaXplZCwgc2luY2Ugb25lIHBhY2thZ2UncyBtZXRhLW1vZGVsIG9iamVjdHMgbWF5IHJlZmVyIHRvCi0gICAqIHRob3NlIG9mIGFub3RoZXIuCi0gICAqIDxwPkludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWZmZWN0IGFueSBwYWNrYWdlcyB0aGF0IGhhdmUKLSAgICogYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZU5TX1VSSQotICAgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotICAgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBNSU1FUGFja2FnZSBpbml0KCkKLSAgewotICAgIGlmIChpc0luaXRlZCkKLSAgICAgIHJldHVybiAoTUlNRVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTUlNRVBhY2thZ2UuZU5TX1VSSSk7Ci0KLSAgICAvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCi0gICAgTUlNRVBhY2thZ2VJbXBsIHRoZU1JTUVQYWNrYWdlID0gKE1JTUVQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgaW5zdGFuY2VvZiBNSU1FUGFja2FnZUltcGwKLSAgICAgID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgOiBuZXcgTUlNRVBhY2thZ2VJbXBsKCkpOwotCi0gICAgaXNJbml0ZWQgPSB0cnVlOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCi0gICAgV1NETFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOwotICAgIFhTRFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOwotCi0gICAgLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLSAgICB0aGVNSU1FUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQotICAgIC8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLSAgICB0aGVNSU1FUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0KLSAgICAvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0gICAgdGhlTUlNRVBhY2thZ2UuZnJlZXplKCk7Ci0KLSAgICByZXR1cm4gdGhlTUlNRVBhY2thZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0TUlNRUNvbnRlbnQoKQotICB7Ci0gICAgcmV0dXJuIG1pbWVDb250ZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNSU1FQ29udGVudF9UeXBlKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSltaW1lQ29udGVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRNSU1FQ29udGVudF9FUGFydCgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpbWltZUNvbnRlbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRNSU1FUGFydCgpCi0gIHsKLSAgICByZXR1cm4gbWltZVBhcnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldE1JTUVQYXJ0X0VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW1pbWVQYXJ0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0TUlNRU11bHRpcGFydFJlbGF0ZWQoKQotICB7Ci0gICAgcmV0dXJuIG1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRNSU1FTXVsdGlwYXJ0UmVsYXRlZF9FTUlNRVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0TUlNRU1pbWVYbWwoKQotICB7Ci0gICAgcmV0dXJuIG1pbWVNaW1lWG1sRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRNSU1FTWltZVhtbF9FUGFydCgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpbWltZU1pbWVYbWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJTUlNRVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGltaW1lUGFydEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJTUlNRU11bHRpcGFydFJlbGF0ZWQoKQotICB7Ci0gICAgcmV0dXJuIGltaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJTUlNRUNvbnRlbnQoKQotICB7Ci0gICAgcmV0dXJuIGltaW1lQ29udGVudEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJTUlNRU1pbWVYbWwoKQotICB7Ci0gICAgcmV0dXJuIGltaW1lTWltZVhtbEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVEYXRhVHlwZSBnZXRMaXN0KCkKLSAgewotICAgIHJldHVybiBsaXN0RURhdGFUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTUlNRUZhY3RvcnkgZ2V0TUlNRUZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIChNSU1FRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCi0gICAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0gIHsKLSAgICBpZiAoaXNDcmVhdGVkKQotICAgICAgcmV0dXJuOwotICAgIGlzQ3JlYXRlZCA9IHRydWU7Ci0KLSAgICAvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLSAgICBtaW1lQ29udGVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNSU1FX0NPTlRFTlQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUobWltZUNvbnRlbnRFQ2xhc3MsIE1JTUVfQ09OVEVOVF9fVFlQRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShtaW1lQ29udGVudEVDbGFzcywgTUlNRV9DT05URU5UX19FUEFSVCk7Ci0KLSAgICBtaW1lUGFydEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNSU1FX1BBUlQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UobWltZVBhcnRFQ2xhc3MsIE1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMpOwotCi0gICAgbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTUlNRV9NVUxUSVBBUlRfUkVMQVRFRCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShtaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcywgTUlNRV9NVUxUSVBBUlRfUkVMQVRFRF9fRU1JTUVfUEFSVCk7Ci0KLSAgICBtaW1lTWltZVhtbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNSU1FX01JTUVfWE1MKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKG1pbWVNaW1lWG1sRUNsYXNzLCBNSU1FX01JTUVfWE1MX19FUEFSVCk7Ci0KLSAgICBpbWltZVBhcnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU1JTUVfUEFSVCk7Ci0KLSAgICBpbWltZU11bHRpcGFydFJlbGF0ZWRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU1JTUVfTVVMVElQQVJUX1JFTEFURUQpOwotCi0gICAgaW1pbWVDb250ZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKElNSU1FX0NPTlRFTlQpOwotCi0gICAgaW1pbWVNaW1lWG1sRUNsYXNzID0gY3JlYXRlRUNsYXNzKElNSU1FX01JTUVfWE1MKTsKLQotICAgIC8vIENyZWF0ZSBkYXRhIHR5cGVzCi0gICAgbGlzdEVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShMSVNUKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKLSAgICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotICB7Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQpCi0gICAgICByZXR1cm47Ci0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICAvLyBJbml0aWFsaXplIHBhY2thZ2UKLSAgICBzZXROYW1lKGVOQU1FKTsKLSAgICBzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKLSAgICBzZXROc1VSSShlTlNfVVJJKTsKLQotICAgIC8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLSAgICBXU0RMUGFja2FnZSB0aGVXU0RMUGFja2FnZSA9IChXU0RMUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShXU0RMUGFja2FnZS5lTlNfVVJJKTsKLQotICAgIC8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKLSAgICBtaW1lQ29udGVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBtaW1lQ29udGVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElNSU1FQ29udGVudCgpKTsKLSAgICBtaW1lUGFydEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBtaW1lUGFydEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElNSU1FUGFydCgpKTsKLSAgICBtaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBtaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpKTsKLSAgICBtaW1lTWltZVhtbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBtaW1lTWltZVhtbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElNSU1FTWltZVhtbCgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCi0gICAgaW5pdEVDbGFzcyhtaW1lQ29udGVudEVDbGFzcywgTUlNRUNvbnRlbnQuY2xhc3MsICJNSU1FQ29udGVudCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0TUlNRUNvbnRlbnRfVHlwZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJ0eXBlIiwgbnVsbCwgMCwgMSwgTUlNRUNvbnRlbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE1JTUVDb250ZW50X0VQYXJ0KCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRQYXJ0KCksCi0gICAgICBudWxsLAotICAgICAgImVQYXJ0IiwgbnVsbCwgMCwgMSwgTUlNRUNvbnRlbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIEVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKG1pbWVDb250ZW50RUNsYXNzLCBudWxsLCAic2V0UGFydCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInBhcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihtaW1lQ29udGVudEVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImdldFBhcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhtaW1lUGFydEVDbGFzcywgTUlNRVBhcnQuY2xhc3MsICJNSU1FUGFydCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0TUlNRVBhcnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpLAotICAgICAgdGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUV4dGVuc2liaWxpdHlFbGVtZW50cyIsIG51bGwsIDAsIC0xLCBNSU1FUGFydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKG1pbWVQYXJ0RUNsYXNzLCBudWxsLCAiYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoZVdTRExQYWNrYWdlLmdldElFeHRlbnNpYmlsaXR5RWxlbWVudCgpLCAiZXh0ZW5zaWJpbGl0eUVsZW1lbnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihtaW1lUGFydEVDbGFzcywgdGhpcy5nZXRMaXN0KCksICJnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIG1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzLAotICAgICAgTUlNRU11bHRpcGFydFJlbGF0ZWQuY2xhc3MsCi0gICAgICAiTUlNRU11bHRpcGFydFJlbGF0ZWQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE1JTUVNdWx0aXBhcnRSZWxhdGVkX0VNSU1FUGFydCgpLAotICAgICAgdGhpcy5nZXRNSU1FUGFydCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlTUlNRVBhcnQiLCBudWxsLCAwLCAtMSwgTUlNRU11bHRpcGFydFJlbGF0ZWQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihtaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcywgbnVsbCwgImFkZE1JTUVQYXJ0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElNSU1FUGFydCgpLCAibWltZVBhcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihtaW1lTXVsdGlwYXJ0UmVsYXRlZEVDbGFzcywgdGhpcy5nZXRMaXN0KCksICJnZXRNSU1FUGFydHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhtaW1lTWltZVhtbEVDbGFzcywgTUlNRU1pbWVYbWwuY2xhc3MsICJNSU1FTWltZVhtbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0TUlNRU1pbWVYbWxfRVBhcnQoKSwKLSAgICAgIHRoZVdTRExQYWNrYWdlLmdldFBhcnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVBhcnQiLCBudWxsLCAwLCAxLCBNSU1FTWltZVhtbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKG1pbWVNaW1lWG1sRUNsYXNzLCBudWxsLCAic2V0UGFydCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInBhcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgYWRkRU9wZXJhdGlvbihtaW1lTWltZVhtbEVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImdldFBhcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGltaW1lUGFydEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0LmNsYXNzLAotICAgICAgIklNSU1FUGFydCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaW1pbWVNdWx0aXBhcnRSZWxhdGVkRUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQuY2xhc3MsCi0gICAgICAiSU1JTUVNdWx0aXBhcnRSZWxhdGVkIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpbWltZUNvbnRlbnRFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudC5jbGFzcywKLSAgICAgICJJTUlNRUNvbnRlbnQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGltaW1lTWltZVhtbEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sLmNsYXNzLAotICAgICAgIklNSU1FTWltZVhtbCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKLSAgICBpbml0RURhdGFUeXBlKGxpc3RFRGF0YVR5cGUsIExpc3QuY2xhc3MsICJMaXN0IiwgSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gQ3JlYXRlIHJlc291cmNlCi0gICAgY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0gIH0KLX0gLy9NSU1FUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRVBhcnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC9pbXBsL01JTUVQYXJ0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmFhZmNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL2ltcGwvTUlNRVBhcnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLmltcGwuTUlNRVBhcnRJbXBsI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgTUlNRVBhcnRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgTUlNRVBhcnQKLXsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIDxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVFeHRlbnNpYmlsaXR5RWxlbWVudHM7Ci0KLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTUlNRVBhcnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBNSU1FUGFja2FnZS5MaXRlcmFscy5NSU1FX1BBUlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIGlmIChlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzID09IG51bGwpCi0gICAgewotICAgICAgZUV4dGVuc2liaWxpdHlFbGVtZW50cyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChFeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywgdGhpcywgTUlNRVBhY2thZ2UuTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyk7Ci0gICAgfQotICAgIHJldHVybiBlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gIHsKLSAgICBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5hZGQoZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIHJldHVybiBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM6Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM6Ci0gICAgICByZXR1cm4gZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM6Ci0gICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9QQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzoKLSAgICAgIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfUEFSVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM6Ci0gICAgICByZXR1cm4gZUV4dGVuc2liaWxpdHlFbGVtZW50cyAhPSBudWxsICYmICFlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxpYXRpb246IERPTSAtPiBNT0RFTAotICAvLwotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgaWYgKCFXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCksIFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKSkKLSAgICB7Ci0gICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IHVzZUV4dGVuc2lvbkZhY3RvcmllcygpCi0gICAgICAgID8gKChXU0RMRmFjdG9yeUltcGwpV1NETEZhY3RvcnkuZUlOU1RBTkNFKS5jcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChnZXROYW1lc3BhY2UoY2hpbGQpLCBnZXRMb2NhbE5hbWUoY2hpbGQpKQotICAgICAgICA6ICgoV1NETEZhY3RvcnlJbXBsKVdTRExGYWN0b3J5LmVJTlNUQU5DRSkuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB1c2VFeHRlbnNpb25GYWN0b3JpZXMoKQotICB7Ci0gICAgLy8gVXNlIGV4dGVuc2lvbiBmYWN0b3JpZXMgYnkgZGVmYXVsdC4KLSAgICByZXR1cm4gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpID09IG51bGwgPyB0cnVlIDogKChEZWZpbml0aW9uSW1wbClnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpLmdldFVzZUV4dGVuc2lvbkZhY3RvcmllcygpOwotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoTUlNRUNvbnN0YW50cy5NSU1FX05BTUVTUEFDRV9VUkksIE1JTUVDb25zdGFudHMuUEFSVF9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsI2NyZWF0ZUVsZW1lbnQoKQotICAgKi8KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBzdXBlci5jcmVhdGVFbGVtZW50KCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci19IC8vTUlNRVBhcnRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FQWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4ZTRlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwKLXsKLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgTUlNRVBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTUlNRUFkYXB0ZXJGYWN0b3J5KCkKLSAgewotICAgIGlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBtb2RlbFBhY2thZ2UgPSBNSU1FUGFja2FnZS5lSU5TVEFOQ0U7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KQotICAgIHsKLSAgICAgIHJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE1JTUVTd2l0Y2ggbW9kZWxTd2l0Y2ggPSBuZXcgTUlNRVN3aXRjaCgpCi0gICAgewotICAgICAgcHVibGljIE9iamVjdCBjYXNlTUlNRUNvbnRlbnQoTUlNRUNvbnRlbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlTUlNRUNvbnRlbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZU1JTUVQYXJ0KE1JTUVQYXJ0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU1JTUVQYXJ0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VNSU1FTXVsdGlwYXJ0UmVsYXRlZChNSU1FTXVsdGlwYXJ0UmVsYXRlZCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVNSU1FTXVsdGlwYXJ0UmVsYXRlZEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlTUlNRU1pbWVYbWwoTUlNRU1pbWVYbWwgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlTUlNRU1pbWVYbWxBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlNSU1FUGFydChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJTUlNRVBhcnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlNSU1FTXVsdGlwYXJ0UmVsYXRlZChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJTUlNRU11bHRpcGFydFJlbGF0ZWRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlNSU1FQ29udGVudChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FQ29udGVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJTUlNRUNvbnRlbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlNSU1FTWltZVhtbChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJTUlNRU1pbWVYbWxBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVdTRExFbGVtZW50KFdTRExFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVdTRExFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudChvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KLSAgICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KQotICB7Ci0gICAgcmV0dXJuIChBZGFwdGVyKW1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQgPGVtPkNvbnRlbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1JTUVDb250ZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydCA8ZW0+UGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRVBhcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlTUlNRVBhcnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIDxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNaW1lWG1sIDxlbT5NaW1lIFhtbDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlTUlNRU1pbWVYbWxBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQgPGVtPklNSU1FIFBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSU1JTUVQYXJ0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkIDxlbT5JTUlNRSBNdWx0aXBhcnQgUmVsYXRlZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJTUlNRU11bHRpcGFydFJlbGF0ZWRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQgPGVtPklNSU1FIENvbnRlbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSU1JTUVDb250ZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNaW1lWG1sIDxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJTUlNRU1pbWVYbWxBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlV1NETEVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0gLy9NSU1FQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRUNvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NjMyNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIE1JTUVDb25zdGFudHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVF9FTEVNRU5UX1RBRyA9ICJjb250ZW50IjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTUVfWE1MX0VMRU1FTlRfVEFHID0gIm1pbWVYbWwiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVVMVElQQVJUX1JFTEFURURfRUxFTUVOVF9UQUcgPSAibXVsdGlwYXJ0UmVsYXRlZCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX0VMRU1FTlRfVEFHID0gInBhcnQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9OQU1FU1BBQ0VfVVJJID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSVF9BVFRSSUJVVEUgPSAicGFydCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0FUVFJJQlVURSA9ICJ0eXBlIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEF0dHJpYnV0ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKQotICB7Ci0gICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID8gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgOiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmNiOGM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLW1pbWUvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9taW1lL2ludGVybmFsL3V0aWwvTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5pbnRlcm5hbC51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk7Ci0KLQotcHVibGljIGNsYXNzIE1JTUVFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgaW1wbGVtZW50cyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkKLXsKLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICBpZiAoTUlNRUNvbnN0YW50cy5NSU1FX05BTUVTUEFDRV9VUkkuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgewotICAgICAgaWYgKE1JTUVDb25zdGFudHMuQ09OVEVOVF9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIE1JTUVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNSU1FQ29udGVudCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoTUlNRUNvbnN0YW50cy5NSU1FX1hNTF9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIE1JTUVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNSU1FTWltZVhtbCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoTUlNRUNvbnN0YW50cy5NVUxUSVBBUlRfUkVMQVRFRF9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIE1JTUVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpOwotICAgICAgfQotICAgICAgLyogVE9ETyAtIGZpeCB0aGUgcm9zZSBtb2RlbAotICAgICAgIGVsc2UgaWYgKCJwYXJ0Ii5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgICB7Ci0gICAgICAgcmV0dXJuIE1JTUVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNSU1FUGFydCgpOwotICAgICAgIH0KLSAgICAgICAqLwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiVW5oYW5kbGVkIGxvY2FsTmFtZTogIiArIGxvY2FsTmFtZSk7Ci0gICAgICAgIHJldHVybiBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiVW5oYW5kbGVkIG5hbWVzcGFjZTogIiArIG5hbWVzcGFjZSk7Ci0gICAgICByZXR1cm4gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtbWltZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL21pbWUvaW50ZXJuYWwvdXRpbC9NSU1FU3dpdGNoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE3MThiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1taW1lL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvbWltZS9pbnRlcm5hbC91dGlsL01JTUVTd2l0Y2guamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgotICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaCBkb1N3aXRjaChvYmplY3QpfQotICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAotICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAotICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgTUlNRVN3aXRjaAotewotICAvKioKLSAgICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIE1JTUVQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1JTUVTd2l0Y2goKQotICB7Ci0gICAgaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vZGVsUGFja2FnZSA9IE1JTUVQYWNrYWdlLmVJTlNUQU5DRTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkKLSAgewotICAgIHJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKQotICAgIHsKLSAgICAgIHJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgTGlzdCBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOwotICAgICAgcmV0dXJuIGVTdXBlclR5cGVzLmlzRW1wdHkoKSA/IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDogZG9Td2l0Y2goKEVDbGFzcyllU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgc3dpdGNoIChjbGFzc2lmaWVySUQpCi0gICAgewotICAgICAgY2FzZSBNSU1FUGFja2FnZS5NSU1FX0NPTlRFTlQ6Ci0gICAgICB7Ci0gICAgICAgIE1JTUVDb250ZW50IG1pbWVDb250ZW50ID0gKE1JTUVDb250ZW50KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlTUlNRUNvbnRlbnQobWltZUNvbnRlbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVDb250ZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJTUlNRUNvbnRlbnQobWltZUNvbnRlbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KG1pbWVDb250ZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQobWltZUNvbnRlbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIE1JTUVQYWNrYWdlLk1JTUVfUEFSVDoKLSAgICAgIHsKLSAgICAgICAgTUlNRVBhcnQgbWltZVBhcnQgPSAoTUlNRVBhcnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VNSU1FUGFydChtaW1lUGFydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQobWltZVBhcnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlNSU1FUGFydChtaW1lUGFydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQobWltZVBhcnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lUGFydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NVUxUSVBBUlRfUkVMQVRFRDoKLSAgICAgIHsKLSAgICAgICAgTUlNRU11bHRpcGFydFJlbGF0ZWQgbWltZU11bHRpcGFydFJlbGF0ZWQgPSAoTUlNRU11bHRpcGFydFJlbGF0ZWQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VNSU1FTXVsdGlwYXJ0UmVsYXRlZChtaW1lTXVsdGlwYXJ0UmVsYXRlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQobWltZU11bHRpcGFydFJlbGF0ZWQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlNSU1FTXVsdGlwYXJ0UmVsYXRlZChtaW1lTXVsdGlwYXJ0UmVsYXRlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQobWltZU11bHRpcGFydFJlbGF0ZWQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lTXVsdGlwYXJ0UmVsYXRlZCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgTUlNRVBhY2thZ2UuTUlNRV9NSU1FX1hNTDoKLSAgICAgIHsKLSAgICAgICAgTUlNRU1pbWVYbWwgbWltZU1pbWVYbWwgPSAoTUlNRU1pbWVYbWwpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VNSU1FTWltZVhtbChtaW1lTWltZVhtbCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQobWltZU1pbWVYbWwpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlNSU1FTWltZVhtbChtaW1lTWltZVhtbCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQobWltZU1pbWVYbWwpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChtaW1lTWltZVhtbCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbnRlbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db250ZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlTUlNRUNvbnRlbnQoTUlNRUNvbnRlbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBhcnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VNSU1FUGFydChNSU1FUGFydCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NdWx0aXBhcnQgUmVsYXRlZDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk11bHRpcGFydCBSZWxhdGVkPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlTUlNRU11bHRpcGFydFJlbGF0ZWQoTUlNRU11bHRpcGFydFJlbGF0ZWQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWltZSBYbWw8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaW1lIFhtbDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZU1JTUVNaW1lWG1sKE1JTUVNaW1lWG1sIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNSU1FIFBhcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTUlNRSBQYXJ0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSU1JTUVQYXJ0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNSU1FIE11bHRpcGFydCBSZWxhdGVkPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1JTUUgTXVsdGlwYXJ0IFJlbGF0ZWQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJTUlNRU11bHRpcGFydFJlbGF0ZWQoamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1JTUUgQ29udGVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklNSU1FIENvbnRlbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJTUlNRUNvbnRlbnQoamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1JTUUgTWltZSBYbWw8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTUlNRSBNaW1lIFhtbDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlNSU1FTWltZVhtbChqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTWltZVhtbCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVdTRExFbGVtZW50KFdTRExFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19IC8vTUlNRVN3aXRjaApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBBZGRyZXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZWQwYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEFkZHJlc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFkZHJlc3M8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQWRkcmVzcygpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBTT0FQQWRkcmVzcyBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcwotewotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TG9jYXRpb25VUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQWRkcmVzc19Mb2NhdGlvblVSSSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TG9jYXRpb25VUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzI2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRMb2NhdGlvblVSSShTdHJpbmcgdmFsdWUpOwotCi19IC8vIFNPQVBBZGRyZXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViMzU4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmcjZ2V0VHJhbnNwb3J0VVJJIDxlbT5UcmFuc3BvcnQgVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmcjZ2V0U3R5bGUgPGVtPlN0eWxlPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEJpbmRpbmcoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU09BUEJpbmRpbmcgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcKLXsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VHJhbnNwb3J0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFRyYW5zcG9ydFVSSShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0VHJhbnNwb3J0VVJJKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRUcmFuc3BvcnRVUkkgPGVtPlRyYW5zcG9ydCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRyYW5zcG9ydCBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRUcmFuc3BvcnRVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFRyYW5zcG9ydFVSSShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlN0eWxlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0U3R5bGUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQmluZGluZ19TdHlsZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0U3R5bGUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRTdHlsZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0U3R5bGUoU3RyaW5nIHZhbHVlKTsKLX0gLy8gU09BUEJpbmRpbmcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQQm9keS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDZjMGUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBCb2R5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJvZHk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldFVzZSA8ZW0+VXNlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0RUVuY29kaW5nU3R5bGVzIDxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0RVBhcnRzIDxlbT5FUGFydHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQm9keSgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBTT0FQQm9keSBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keQotewotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VXNlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VXNlKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEJvZHlfVXNlKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRVc2UoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldFVzZSA8ZW0+VXNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRVc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFVzZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZXNwYWNlVVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5I2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZXNwYWNlVVJJKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicgYXR0cmlidXRlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBCb2R5X0VFbmNvZGluZ1N0eWxlcygpCi0gICAqIEBtb2RlbCB0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLklTdHJpbmciCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVFbmNvZGluZ1N0eWxlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydH0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FUGFydHM8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVBhcnRzPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQQm9keV9FUGFydHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RVBhcnRzKCk7Ci19IC8vIFNPQVBCb2R5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYwZTM2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTT0FQRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQRmFjdG9yeUltcGwuaW5pdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmc8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNPQVBCaW5kaW5nIGNyZWF0ZVNPQVBCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Qm9keTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Qm9keTwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEJvZHkgY3JlYXRlU09BUEJvZHkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5IZWFkZXIgQmFzZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyIEJhc2U8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNPQVBIZWFkZXJCYXNlIGNyZWF0ZVNPQVBIZWFkZXJCYXNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkZhdWx0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTT0FQRmF1bHQgY3JlYXRlU09BUEZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNPQVBPcGVyYXRpb24gY3JlYXRlU09BUE9wZXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFkZHJlc3M8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFkZHJlc3M8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNPQVBBZGRyZXNzIGNyZWF0ZVNPQVBBZGRyZXNzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5IZWFkZXIgRmF1bHQ8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNPQVBIZWFkZXJGYXVsdCBjcmVhdGVTT0FQSGVhZGVyRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5IZWFkZXI8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkhlYWRlcjwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEhlYWRlciBjcmVhdGVTT0FQSGVhZGVyKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUFBhY2thZ2UgZ2V0U09BUFBhY2thZ2UoKTsKLX0gLy9TT0FQRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEZhdWx0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM0NWY4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQRmF1bHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5GYXVsdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldFVzZSA8ZW0+VXNlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEZhdWx0KCkKLSAqIEBtb2RlbCBmZWF0dXJlcz0iZUVuY29kaW5nU3R5bGVzIiAKLSAqICAgICAgICBlRW5jb2RpbmdTdHlsZXNUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiBlRW5jb2RpbmdTdHlsZXNEYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLklTdHJpbmciIGVFbmNvZGluZ1N0eWxlc01hbnk9InRydWUiIGVFbmNvZGluZ1N0eWxlc1N1cHByZXNzZWRHZXRWaXNpYmlsaXR5PSJ0cnVlIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBGYXVsdCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQKLXsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFVzZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBGYXVsdF9Vc2UoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFVzZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldFVzZSA8ZW0+VXNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRVc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFVzZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZXNwYWNlVVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEZhdWx0X05hbWVzcGFjZVVSSSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQRmF1bHRfTmFtZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gU09BUEZhdWx0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZjFmNWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUEhlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlcjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciNnZXRIZWFkZXJGYXVsdHMgPGVtPkhlYWRlciBGYXVsdHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBIZWFkZXIgZXh0ZW5kcyBTT0FQSGVhZGVyQmFzZSwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcgotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SGVhZGVyIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhlYWRlciBGYXVsdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SGVhZGVyIEZhdWx0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEhlYWRlcl9IZWFkZXJGYXVsdHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJGYXVsdCIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEhlYWRlckZhdWx0cygpOwotCi19IC8vIFNPQVBIZWFkZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyQmFzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDczNTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJCYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXIgQmFzZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0VXNlIDxlbT5Vc2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRFRW5jb2RpbmdTdHlsZXMgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRNZXNzYWdlIDxlbT5NZXNzYWdlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0UGFydCA8ZW0+UGFydDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBIZWFkZXJCYXNlKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBIZWFkZXJCYXNlIGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVc2UoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyQmFzZV9Vc2UoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldFVzZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0VXNlIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VXNlKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lc3BhY2VVUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyQmFzZV9OYW1lc3BhY2VVUkkoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEhlYWRlckJhc2VfRUVuY29kaW5nU3R5bGVzKCkKLSAgICogQG1vZGVsIHR5cGU9ImphdmEubGFuZy5TdHJpbmciIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuSVN0cmluZyIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFTWVzc2FnZShNZXNzYWdlKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyQmFzZV9FTWVzc2FnZSgpCi0gICAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTWVzc2FnZSBnZXRFTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFTWVzc2FnZShNZXNzYWdlIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBhcnQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFydDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVQYXJ0KFBhcnQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBIZWFkZXJCYXNlX0VQYXJ0KCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBQYXJ0IGdldEVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVQYXJ0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVQYXJ0KFBhcnQgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NZXNzYWdlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TWVzc2FnZShRTmFtZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUEhlYWRlckJhc2VfTWVzc2FnZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldE1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldE1lc3NhZ2UgPGVtPk1lc3NhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1lc3NhZ2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRNZXNzYWdlKFFOYW1lIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UGFydDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UGFydDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFBhcnQoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQSGVhZGVyQmFzZV9QYXJ0KCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRQYXJ0IDxlbT5QYXJ0PC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5QYXJ0PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0UGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UGFydChTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIgbWFueT0iZmFsc2UiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIExpc3QgZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBlbmNvZGluZ1N0eWxlc01hbnk9ImZhbHNlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVuY29kaW5nU3R5bGVzKExpc3QgZW5jb2RpbmdTdHlsZXMpOwotCi19IC8vIFNPQVBIZWFkZXJCYXNlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQSGVhZGVyRmF1bHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTcyYTgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBIZWFkZXJGYXVsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXIgRmF1bHQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBIZWFkZXJGYXVsdCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBTT0FQSGVhZGVyRmF1bHQgZXh0ZW5kcyBTT0FQSGVhZGVyQmFzZSwgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0Ci17Ci19IC8vIFNPQVBIZWFkZXJGYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvU09BUE9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWE2YTU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbiNnZXRTb2FwQWN0aW9uVVJJIDxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2dldFNPQVBPcGVyYXRpb24oKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU09BUE9wZXJhdGlvbiBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uCi17Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNvYXAgQWN0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Tb2FwIEFjdGlvbiBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRTb2FwQWN0aW9uVVJJKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2UjZ2V0U09BUE9wZXJhdGlvbl9Tb2FwQWN0aW9uVVJJKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRTb2FwQWN0aW9uVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFNvYXBBY3Rpb25VUkkgPGVtPlNvYXAgQWN0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0U29hcEFjdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0U29hcEFjdGlvblVSSShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlN0eWxlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0U3R5bGUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZSNnZXRTT0FQT3BlcmF0aW9uX1N0eWxlKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRTdHlsZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbiNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlN0eWxlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0U3R5bGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFN0eWxlKFN0cmluZyB2YWx1ZSk7Ci19IC8vIFNPQVBPcGVyYXRpb24KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9TT0FQUGFja2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjczYWI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL1NPQVBQYWNrYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXA7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICogPC91bD4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhY3RvcnkKLSAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNPQVBQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UKLXsKLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5BTUUgPSAic29hcCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1NPQVAiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOU19QUkVGSVggPSAic29hcCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFNPQVBQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJpbmRpbmdJbXBsIDxlbT5CaW5kaW5nPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJpbmRpbmdJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNPQVBfQklORElORyA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQklORElOR19fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CSU5ESU5HX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JJTkRJTkdfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNwb3J0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CSU5ESU5HX19TVFlMRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmc8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CSU5ESU5HX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsIDxlbT5Cb2R5PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBCb2R5KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNPQVBfQk9EWSA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQk9EWV9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CT0RZX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CT0RZX19VU0UgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcnRzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0JPRFlfX0VQQVJUUyA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJvZHk8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9CT0RZX0ZFQVRVUkVfQ09VTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsIDxlbT5IZWFkZXIgQmFzZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJCYXNlSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQSGVhZGVyQmFzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9CQVNFID0gMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0VfX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0VfX0VMRU1FTlRfVFlQRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fVVNFID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0UgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fUEFSVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0UgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0JBU0VfX0VQQVJUID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA2OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SGVhZGVyIEJhc2U8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfQkFTRV9GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA3OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBGYXVsdEltcGwgPGVtPkZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEZhdWx0SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgU09BUF9GQVVMVCA9IDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUX19FTEVNRU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUX19SRVFVSVJFRCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfRkFVTFRfX1VTRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0ZBVUxUX19OQU1FID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAzOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RmF1bHQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9GQVVMVF9GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBPcGVyYXRpb25JbXBsIDxlbT5PcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQT3BlcmF0aW9uSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNPQVBfT1BFUkFUSU9OID0gNDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfT1BFUkFUSU9OX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX09QRVJBVElPTl9fRUxFTUVOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9PUEVSQVRJT05fX1JFUVVJUkVEID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfT1BFUkFUSU9OX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNvYXAgQWN0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkkgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfT1BFUkFUSU9OX19TVFlMRSA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBBZGRyZXNzSW1wbCA8ZW0+QWRkcmVzczwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBBZGRyZXNzSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQQWRkcmVzcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBTT0FQX0FERFJFU1MgPSA1OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9BRERSRVNTX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0FERFJFU1NfX0VMRU1FTlQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQUREUkVTU19fUkVRVUlSRUQgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9BRERSRVNTX19FTEVNRU5UX1RZUEUgPSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJID0gV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QWRkcmVzczwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCA9IFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyRmF1bHRJbXBsIDxlbT5IZWFkZXIgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyRmF1bHRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBIZWFkZXJGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVCA9IDY7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gU09BUF9IRUFERVJfQkFTRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19FTEVNRU5UID0gU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfX1JFUVVJUkVEID0gU09BUF9IRUFERVJfQkFTRV9fUkVRVUlSRUQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fRUxFTUVOVF9UWVBFID0gU09BUF9IRUFERVJfQkFTRV9fRUxFTUVOVF9UWVBFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfX1VTRSA9IFNPQVBfSEVBREVSX0JBU0VfX1VTRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fTkFNRVNQQUNFX1VSSSA9IFNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyA9IFNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfX01FU1NBR0UgPSBTT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGFydDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19QQVJUID0gU09BUF9IRUFERVJfQkFTRV9fUEFSVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkFVTFRfX0VNRVNTQUdFID0gU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX19FUEFSVCA9IFNPQVBfSEVBREVSX0JBU0VfX0VQQVJUOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX0ZBVUxUX0ZFQVRVUkVfQ09VTlQgPSBTT0FQX0hFQURFUl9CQVNFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJJbXBsIDxlbT5IZWFkZXI8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVySW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQSGVhZGVyKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSID0gNzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBTT0FQX0hFQURFUl9CQVNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX0VMRU1FTlQgPSBTT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fUkVRVUlSRUQgPSBTT0FQX0hFQURFUl9CQVNFX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19FTEVNRU5UX1RZUEUgPSBTT0FQX0hFQURFUl9CQVNFX19FTEVNRU5UX1RZUEU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fVVNFID0gU09BUF9IRUFERVJfQkFTRV9fVVNFOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19OQU1FU1BBQ0VfVVJJID0gU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNPQVBfSEVBREVSX19FRU5DT0RJTkdfU1RZTEVTID0gU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fTUVTU0FHRSA9IFNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QYXJ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX1BBUlQgPSBTT0FQX0hFQURFUl9CQVNFX19QQVJUOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fRU1FU1NBR0UgPSBTT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfX0VQQVJUID0gU09BUF9IRUFERVJfQkFTRV9fRVBBUlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5IZWFkZXIgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUyA9IFNPQVBfSEVBREVSX0JBU0VfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5IZWFkZXI8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU09BUF9IRUFERVJfRkVBVFVSRV9DT1VOVCA9IFNPQVBfSEVBREVSX0JBU0VfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcgPGVtPklTT0FQIEJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZwotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSVNPQVBfQklORElORyA9IDg7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU09BUCBCaW5kaW5nPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTT0FQX0JJTkRJTkdfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MgPGVtPklTT0FQIEFkZHJlc3M8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcwotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEFkZHJlc3MoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSVNPQVBfQUREUkVTUyA9IDk7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JU09BUCBBZGRyZXNzPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElTT0FQX0FERFJFU1NfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkgPGVtPklTT0FQIEJvZHk8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEJvZHkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSVNPQVBfQk9EWSA9IDEwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgQm9keTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJU09BUF9CT0RZX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCA8ZW0+SVNPQVAgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVNPQVBGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU09BUF9GQVVMVCA9IDExOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNPQVAgRmF1bHQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVNPQVBfRkFVTFRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiA8ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU09BUF9PUEVSQVRJT04gPSAxMjsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJU09BUF9PUEVSQVRJT05fRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IDxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVNPQVBIZWFkZXJGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU09BUF9IRUFERVJfRkFVTFQgPSAxMzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJU09BUF9IRUFERVJfRkFVTFRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciA8ZW0+SVNPQVAgSGVhZGVyPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEhlYWRlcigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU09BUF9IRUFERVIgPSAxNDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklTT0FQIEhlYWRlcjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJU09BUF9IRUFERVJfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+SVN0cmluZzwvZW0+JyBkYXRhIHR5cGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmEubGFuZy5TdHJpbmcKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVN0cmluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU1RSSU5HID0gMTU7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyA8ZW0+QmluZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0U09BUEJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmcjZ2V0VHJhbnNwb3J0VVJJIDxlbT5UcmFuc3BvcnQgVVJJPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VHJhbnNwb3J0IFVSSTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmcjZ2V0VHJhbnNwb3J0VVJJKCkKLSAgICogQHNlZSAjZ2V0U09BUEJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdHlsZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmcjZ2V0U3R5bGUoKQotICAgKiBAc2VlICNnZXRTT0FQQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEJpbmRpbmdfU3R5bGUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5IDxlbT5Cb2R5PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJvZHk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTT0FQQm9keSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRVc2UgPGVtPlVzZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0VXNlKCkKLSAgICogQHNlZSAjZ2V0U09BUEJvZHkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBCb2R5X1VzZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAc2VlICNnZXRTT0FQQm9keSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0RUVuY29kaW5nU3R5bGVzIDxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keSNnZXRFRW5jb2RpbmdTdHlsZXMoKQotICAgKiBAc2VlICNnZXRTT0FQQm9keSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U09BUEJvZHlfRUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0RVBhcnRzIDxlbT5FUGFydHM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkVQYXJ0czwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHkjZ2V0RVBhcnRzKCkKLSAgICogQHNlZSAjZ2V0U09BUEJvZHkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFNPQVBCb2R5X0VQYXJ0cygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UgPGVtPkhlYWRlciBCYXNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkhlYWRlciBCYXNlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0U09BUEhlYWRlckJhc2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0VXNlIDxlbT5Vc2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vc2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldFVzZSgpCi0gICAqIEBzZWUgI2dldFNPQVBIZWFkZXJCYXNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQSGVhZGVyQmFzZV9Vc2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX05hbWVzcGFjZVVSSSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVFbmNvZGluZ1N0eWxlcyA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RUVuY29kaW5nU3R5bGVzKCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX0VFbmNvZGluZ1N0eWxlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRNZXNzYWdlIDxlbT5NZXNzYWdlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TWVzc2FnZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0TWVzc2FnZSgpCi0gICAqIEBzZWUgI2dldFNPQVBIZWFkZXJCYXNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldFBhcnQgPGVtPlBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5QYXJ0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRQYXJ0KCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX1BhcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RU1lc3NhZ2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVNZXNzYWdlKCkKLSAgICogQHNlZSAjZ2V0U09BUEhlYWRlckJhc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFNPQVBIZWFkZXJCYXNlX0VNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlI2dldEVQYXJ0IDxlbT5FUGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVQYXJ0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZSNnZXRFUGFydCgpCi0gICAqIEBzZWUgI2dldFNPQVBIZWFkZXJCYXNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRTT0FQSGVhZGVyQmFzZV9FUGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0IDxlbT5GYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTT0FQRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldFVzZSA8ZW0+VXNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VXNlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0VXNlKCkKLSAgICogQHNlZSAjZ2V0U09BUEZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQRmF1bHRfVXNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdCNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lc3BhY2UgVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQHNlZSAjZ2V0U09BUEZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQRmF1bHRfTmFtZXNwYWNlVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0IDxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQKLSAgICogQHNlZSAjZ2V0U09BUEZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQRmF1bHRfRUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYXVsdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0I2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRTT0FQRmF1bHQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uIDxlbT5PcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTT0FQT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb24jZ2V0U29hcEFjdGlvblVSSSA8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uI2dldFNvYXBBY3Rpb25VUkkoKQotICAgKiBAc2VlICNnZXRTT0FQT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQT3BlcmF0aW9uX1NvYXBBY3Rpb25VUkkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbiNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdHlsZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbiNnZXRTdHlsZSgpCi0gICAqIEBzZWUgI2dldFNPQVBPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFNPQVBPcGVyYXRpb25fU3R5bGUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzIDxlbT5BZGRyZXNzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkFkZHJlc3M8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTT0FQQWRkcmVzcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzcyNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzcyNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBzZWUgI2dldFNPQVBBZGRyZXNzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRTT0FQQWRkcmVzc19Mb2NhdGlvblVSSSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0IDxlbT5IZWFkZXIgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFNPQVBIZWFkZXJGYXVsdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciA8ZW0+SGVhZGVyPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkhlYWRlcjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0U09BUEhlYWRlcigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXIjZ2V0SGVhZGVyRmF1bHRzIDxlbT5IZWFkZXIgRmF1bHRzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5IZWFkZXIgRmF1bHRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyI2dldEhlYWRlckZhdWx0cygpCi0gICAqIEBzZWUgI2dldFNPQVBIZWFkZXIoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFNPQVBIZWFkZXJfSGVhZGVyRmF1bHRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nIDxlbT5JU09BUCBCaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTT0FQIEJpbmRpbmc8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmcKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVNPQVBCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzIDxlbT5JU09BUCBBZGRyZXNzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTT0FQIEFkZHJlc3M8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVNPQVBBZGRyZXNzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5IDxlbT5JU09BUCBCb2R5PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTT0FQIEJvZHk8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVNPQVBCb2R5KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCA8ZW0+SVNPQVAgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVNPQVAgRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJU09BUEZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24gPGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JU09BUCBPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbgotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElTT0FQT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCA8ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTT0FQIEhlYWRlciBGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElTT0FQSGVhZGVyRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciA8ZW0+SVNPQVAgSGVhZGVyPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklTT0FQIEhlYWRlcjwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVNPQVBIZWFkZXIoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIGphdmEubGFuZy5TdHJpbmcgPGVtPklTdHJpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPklTdHJpbmc8L2VtPicuCi0gICAqIEBzZWUgamF2YS5sYW5nLlN0cmluZwotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YS5sYW5nLlN0cmluZyIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRURhdGFUeXBlIGdldElTdHJpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU09BUEZhY3RvcnkgZ2V0U09BUEZhY3RvcnkoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotICAgKiA8dWw+Ci0gICAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAgICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAgICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gICAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnRlcmZhY2UgTGl0ZXJhbHMKLSAgewotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQmluZGluZ0ltcGwgPGVtPkJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQmluZGluZ0ltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQQmluZGluZygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBTT0FQX0JJTkRJTkcgPSBlSU5TVEFOQ0UuZ2V0U09BUEJpbmRpbmcoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSA9IGVJTlNUQU5DRS5nZXRTT0FQQmluZGluZ19UcmFuc3BvcnRVUkkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0JJTkRJTkdfX1NUWUxFID0gZUlOU1RBTkNFLmdldFNPQVBCaW5kaW5nX1N0eWxlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsIDxlbT5Cb2R5PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEJvZHkoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgU09BUF9CT0RZID0gZUlOU1RBTkNFLmdldFNPQVBCb2R5KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfQk9EWV9fVVNFID0gZUlOU1RBTkNFLmdldFNPQVBCb2R5X1VzZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJID0gZUlOU1RBTkNFLmdldFNPQVBCb2R5X05hbWVzcGFjZVVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVFbmNvZGluZyBTdHlsZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVMgPSBlSU5TVEFOQ0UuZ2V0U09BUEJvZHlfRUVuY29kaW5nU3R5bGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcnRzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgU09BUF9CT0RZX19FUEFSVFMgPSBlSU5TVEFOQ0UuZ2V0U09BUEJvZHlfRVBhcnRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsIDxlbT5IZWFkZXIgQmFzZTwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJCYXNlSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBIZWFkZXJCYXNlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFNPQVBfSEVBREVSX0JBU0UgPSBlSU5TVEFOQ0UuZ2V0U09BUEhlYWRlckJhc2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Vc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9IRUFERVJfQkFTRV9fVVNFID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJCYXNlX1VzZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSSA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9OYW1lc3BhY2VVUkkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRW5jb2RpbmcgU3R5bGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUyA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9FRW5jb2RpbmdTdHlsZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NZXNzYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0UgPSBlSU5TVEFOQ0UuZ2V0U09BUEhlYWRlckJhc2VfTWVzc2FnZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9IRUFERVJfQkFTRV9fUEFSVCA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9QYXJ0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0UgPSBlSU5TVEFOQ0UuZ2V0U09BUEhlYWRlckJhc2VfRU1lc3NhZ2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBTT0FQX0hFQURFUl9CQVNFX19FUEFSVCA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9FUGFydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBGYXVsdEltcGwgPGVtPkZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEZhdWx0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBGYXVsdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBTT0FQX0ZBVUxUID0gZUlOU1RBTkNFLmdldFNPQVBGYXVsdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX0ZBVUxUX19VU0UgPSBlSU5TVEFOQ0UuZ2V0U09BUEZhdWx0X1VzZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSA9IGVJTlNUQU5DRS5nZXRTT0FQRmF1bHRfTmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUVuY29kaW5nIFN0eWxlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfRkFVTFRfX0VFTkNPRElOR19TVFlMRVMgPSBlSU5TVEFOQ0UuZ2V0U09BUEZhdWx0X0VFbmNvZGluZ1N0eWxlcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU09BUF9GQVVMVF9fTkFNRSA9IGVJTlNUQU5DRS5nZXRTT0FQRmF1bHRfTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBPcGVyYXRpb25JbXBsIDxlbT5PcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQT3BlcmF0aW9uSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBPcGVyYXRpb24oKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgU09BUF9PUEVSQVRJT04gPSBlSU5TVEFOQ0UuZ2V0U09BUE9wZXJhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNvYXAgQWN0aW9uIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBTT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJID0gZUlOU1RBTkNFLmdldFNPQVBPcGVyYXRpb25fU29hcEFjdGlvblVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfT1BFUkFUSU9OX19TVFlMRSA9IGVJTlNUQU5DRS5nZXRTT0FQT3BlcmF0aW9uX1N0eWxlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEFkZHJlc3NJbXBsIDxlbT5BZGRyZXNzPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEFkZHJlc3NJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0U09BUEFkZHJlc3MoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgU09BUF9BRERSRVNTID0gZUlOU1RBTkNFLmdldFNPQVBBZGRyZXNzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJID0gZUlOU1RBTkNFLmdldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckZhdWx0SW1wbCA8ZW0+SGVhZGVyIEZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckZhdWx0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldFNPQVBIZWFkZXJGYXVsdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBTT0FQX0hFQURFUl9GQVVMVCA9IGVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyRmF1bHQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVySW1wbCA8ZW0+SGVhZGVyPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRTT0FQSGVhZGVyKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFNPQVBfSEVBREVSID0gZUlOU1RBTkNFLmdldFNPQVBIZWFkZXIoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5IZWFkZXIgRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFMgPSBlSU5TVEFOQ0UuZ2V0U09BUEhlYWRlcl9IZWFkZXJGYXVsdHMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZyA8ZW0+SVNPQVAgQmluZGluZzwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVNPQVBCaW5kaW5nKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTT0FQX0JJTkRJTkcgPSBlSU5TVEFOQ0UuZ2V0SVNPQVBCaW5kaW5nKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MgPGVtPklTT0FQIEFkZHJlc3M8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcwotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQQWRkcmVzcygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJU09BUF9BRERSRVNTID0gZUlOU1RBTkNFLmdldElTT0FQQWRkcmVzcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5IDxlbT5JU09BUCBCb2R5PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEJvZHkoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVNPQVBfQk9EWSA9IGVJTlNUQU5DRS5nZXRJU09BUEJvZHkoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQgPGVtPklTT0FQIEZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVNPQVBGYXVsdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJU09BUF9GQVVMVCA9IGVJTlNUQU5DRS5nZXRJU09BUEZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiA8ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTT0FQT3BlcmF0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElTT0FQX09QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRJU09BUE9wZXJhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCA8ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQUGFja2FnZUltcGwjZ2V0SVNPQVBIZWFkZXJGYXVsdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJU09BUF9IRUFERVJfRkFVTFQgPSBlSU5TVEFOQ0UuZ2V0SVNPQVBIZWFkZXJGYXVsdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIgPGVtPklTT0FQIEhlYWRlcjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBQYWNrYWdlSW1wbCNnZXRJU09BUEhlYWRlcigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJU09BUF9IRUFERVIgPSBlSU5TVEFOQ0UuZ2V0SVNPQVBIZWFkZXIoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5JU3RyaW5nPC9lbT4nIGRhdGEgdHlwZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YS5sYW5nLlN0cmluZwotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUFBhY2thZ2VJbXBsI2dldElTdHJpbmcoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFRGF0YVR5cGUgSVNUUklORyA9IGVJTlNUQU5DRS5nZXRJU3RyaW5nKCk7Ci0KLSAgfQotCi19IC8vU09BUFBhY2thZ2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2dlbmVyYXRvci9TT0FQQ29udGVudEdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvZ2VuZXJhdG9yL1NPQVBDb250ZW50R2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOTE5MDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvZ2VuZXJhdG9yL1NPQVBDb250ZW50R2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuZ2VuZXJhdG9yOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5Db250ZW50R2VuZXJhdG9yOwotCi0KLXB1YmxpYyBjbGFzcyBTT0FQQ29udGVudEdlbmVyYXRvciBpbXBsZW1lbnRzIENvbnRlbnRHZW5lcmF0b3IKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BUSU9OX05PVF9TRVQgPSAtMTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9ET0NVTUVOVCA9IDE7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfUlBDID0gMjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VfTElURVJBTCA9IDE7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFX0VOQ09ERUQgPSAyOwotCi0gIHByaXZhdGUgaW50IHN0eWxlT3B0aW9uID0gT1BUSU9OX05PVF9TRVQ7Ci0KLSAgcHJpdmF0ZSBpbnQgdXNlT3B0aW9uID0gT1BUSU9OX05PVF9TRVQ7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2VWYWx1ZSA9ICIiOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgYWRkcmVzc0xvY2F0aW9uID0gQ29udGVudEdlbmVyYXRvci5BRERSRVNTX0xPQ0FUSU9OOwotCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nW10gcmVxdWlyZWROYW1lc3BhY2VzID0geyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgfTsKLQotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZ1tdIHByZWZlcnJlZE5hbWVzcGFjZVByZWZpeGVzID0geyAic29hcCIgfTsKLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0UmVxdWlyZWROYW1lc3BhY2VzKCkKLSAgewotICAgIHJldHVybiByZXF1aXJlZE5hbWVzcGFjZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByZWZlcnJlZE5hbWVzcGFjZVByZWZpeChTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZS5lcXVhbHMoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iKSkKLSAgICB7Ci0gICAgICByZXR1cm4gInNvYXAiOwotICAgIH0KLQotICAgIHJldHVybiAiIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFN0eWxlKGludCBzdHlsZSkKLSAgewotICAgIHN0eWxlT3B0aW9uID0gc3R5bGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVc2UoaW50IHVzZSkKLSAgewotICAgIHVzZU9wdGlvbiA9IHVzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFkZHJlc3NMb2NhdGlvbihTdHJpbmcgYWRkcmVzc0xvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5hZGRyZXNzTG9jYXRpb24gPSBhZGRyZXNzTG9jYXRpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVBvcnRDb250ZW50KFBvcnQgcG9ydCkKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBBZGRyZXNzKCk7Ci0gICAgc29hcEFkZHJlc3Muc2V0TG9jYXRpb25VUkkoYWRkcmVzc0xvY2F0aW9uKTsKLSAgICBwb3J0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBBZGRyZXNzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGdlbmVyYXRlQmluZGluZ0NvbnRlbnQoQmluZGluZyBiaW5kaW5nLCBQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIFNPQVBGYWN0b3J5IHNvYXBGYWN0b3J5ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFOwotICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gc29hcEZhY3RvcnkuY3JlYXRlU09BUEJpbmRpbmcoKTsKLSAgICBzb2FwQmluZGluZy5zZXRTdHlsZSgoZ2V0U3R5bGVPcHRpb24oYmluZGluZykgPT0gU1RZTEVfRE9DVU1FTlQpID8gImRvY3VtZW50IiA6ICJycGMiKTsKLSAgICBzb2FwQmluZGluZy5zZXRUcmFuc3BvcnRVUkkoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIpOwotCi0gICAgYmluZGluZy5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQmluZGluZyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb25Db250ZW50KEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIC8vIFdlIGJsb3cgYXdheSBhbnkgZXhpc3RpbmcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzL2NvbnRlbnQgYmVmb3JlIHdlIGdlbmVyYXRlIGl0Ci0gICAgLy8gSXMgaXQgd29ydGggYmVpbmcgc21hcnRlcj8gIExvb2sgZm9yIG1hdGNoaW5nIGNvbnRlbnQgZmlyc3QgYW5kIGNyZWF0ZSB0aG9zZSB3aGljaCBhcmVuJ3QgZm91bmQ/Pz8/Ci0gICAgTGlzdCByZW1vdmVMaXN0ID0gbmV3IEFycmF5TGlzdChiaW5kaW5nT3BlcmF0aW9uLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQT3BlcmF0aW9uKCk7Ci0KLSAgICBTdHJpbmcgc29hcEFjdGlvblZhbHVlID0gZ2V0TmFtZXNwYWNlKGJpbmRpbmdPcGVyYXRpb24pOwotICAgIGlmICghc29hcEFjdGlvblZhbHVlLmVuZHNXaXRoKCIvIikpCi0gICAgewotICAgICAgc29hcEFjdGlvblZhbHVlICs9ICIvIjsKLSAgICB9Ci0gICAgc29hcEFjdGlvblZhbHVlICs9IG9wZXJhdGlvbi5nZXROYW1lKCk7Ci0KLSAgICBzb2FwT3BlcmF0aW9uLnNldFNvYXBBY3Rpb25VUkkoc29hcEFjdGlvblZhbHVlKTsKLQotICAgIGJpbmRpbmdPcGVyYXRpb24uYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcE9wZXJhdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdJbnB1dENvbnRlbnQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCwgSW5wdXQgaW5wdXQpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZ0lucHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdJbnB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHJlbW92ZUxpc3QpOwotCi0gICAgU09BUEZhY3Rvcnkgc29hcEZhY3RvcnkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0U7Ci0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBzb2FwRmFjdG9yeS5jcmVhdGVTT0FQQm9keSgpOwotICAgIHNvYXBCb2R5LnNldFVzZSgoZ2V0VXNlT3B0aW9uKG51bGwpID09IFVTRV9FTkNPREVEKSA/ICJlbmNvZGVkIiA6ICJsaXRlcmFsIik7Ci0gICAgaWYgKGdldFVzZU9wdGlvbihiaW5kaW5nSW5wdXQpID09IFVTRV9FTkNPREVEICYmIGdldFN0eWxlT3B0aW9uKGJpbmRpbmdJbnB1dCkgPT0gU1RZTEVfUlBDKQotICAgIHsKLSAgICAgIExpc3QgZW5jb2RpbmdMaXN0ID0gbmV3IEJhc2ljRUxpc3QoKTsKLSAgICAgIGVuY29kaW5nTGlzdC5hZGQoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIik7Ci0gICAgICBzb2FwQm9keS5zZXRFbmNvZGluZ1N0eWxlcyhlbmNvZGluZ0xpc3QpOwotICAgICAgc29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKGdldE5hbWVzcGFjZShiaW5kaW5nSW5wdXQpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZ2V0VXNlT3B0aW9uKGJpbmRpbmdJbnB1dCkgPT0gVVNFX0xJVEVSQUwgJiYgZ2V0U3R5bGVPcHRpb24oYmluZGluZ0lucHV0KSA9PSBTVFlMRV9SUEMpCi0gICAgewotICAgICAgc29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKGdldE5hbWVzcGFjZShiaW5kaW5nSW5wdXQpKTsKLSAgICB9Ci0KLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJvZHkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nT3V0cHV0Q29udGVudChCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQsIE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICAvLyBXZSBibG93IGF3YXkgYW55IGV4aXN0aW5nIEV4dGVuc2liaWxpdHlFbGVtZW50cy9jb250ZW50IGJlZm9yZSB3ZSBnZW5lcmF0ZSBpdAotICAgIC8vIElzIGl0IHdvcnRoIGJlaW5nIHNtYXJ0ZXI/ICBMb29rIGZvciBtYXRjaGluZyBjb250ZW50IGZpcnN0IGFuZCBjcmVhdGUgdGhvc2Ugd2hpY2ggYXJlbid0IGZvdW5kPz8/PwotICAgIExpc3QgcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3QoYmluZGluZ091dHB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJlbW92ZUV4dGVuc2ViaWxpdHlFbGVtZW50cyhiaW5kaW5nT3V0cHV0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgcmVtb3ZlTGlzdCk7Ci0KLSAgICBTT0FQRmFjdG9yeSBzb2FwRmFjdG9yeSA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRTsKLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IHNvYXBGYWN0b3J5LmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgc29hcEJvZHkuc2V0VXNlKChnZXRVc2VPcHRpb24oYmluZGluZ091dHB1dCkgPT0gVVNFX0VOQ09ERUQpID8gImVuY29kZWQiIDogImxpdGVyYWwiKTsKLSAgICBpZiAoZ2V0VXNlT3B0aW9uKGJpbmRpbmdPdXRwdXQpID09IFVTRV9FTkNPREVEICYmIGdldFN0eWxlT3B0aW9uKGJpbmRpbmdPdXRwdXQpID09IFNUWUxFX1JQQykKLSAgICB7Ci0gICAgICBMaXN0IGVuY29kaW5nTGlzdCA9IG5ldyBCYXNpY0VMaXN0KCk7Ci0gICAgICBlbmNvZGluZ0xpc3QuYWRkKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIpOwotICAgICAgc29hcEJvZHkuc2V0RW5jb2RpbmdTdHlsZXMoZW5jb2RpbmdMaXN0KTsKLSAgICAgIHNvYXBCb2R5LnNldE5hbWVzcGFjZVVSSShnZXROYW1lc3BhY2UoYmluZGluZ091dHB1dCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChnZXRVc2VPcHRpb24oYmluZGluZ091dHB1dCkgPT0gVVNFX0xJVEVSQUwgJiYgZ2V0U3R5bGVPcHRpb24oYmluZGluZ091dHB1dCkgPT0gU1RZTEVfUlBDKQotICAgIHsKLSAgICAgIHNvYXBCb2R5LnNldE5hbWVzcGFjZVVSSShnZXROYW1lc3BhY2UoYmluZGluZ091dHB1dCkpOwotICAgIH0KLQotICAgIGJpbmRpbmdPdXRwdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJvZHkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nRmF1bHRDb250ZW50KEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQsIEZhdWx0IGZhdWx0KQotICB7Ci0gICAgLy8gV2UgYmxvdyBhd2F5IGFueSBleGlzdGluZyBFeHRlbnNpYmlsaXR5RWxlbWVudHMvY29udGVudCBiZWZvcmUgd2UgZ2VuZXJhdGUgaXQKLSAgICAvLyBJcyBpdCB3b3J0aCBiZWluZyBzbWFydGVyPyAgTG9vayBmb3IgbWF0Y2hpbmcgY29udGVudCBmaXJzdCBhbmQgY3JlYXRlIHRob3NlIHdoaWNoIGFyZW4ndCBmb3VuZD8/Pz8KLSAgICBMaXN0IHJlbW92ZUxpc3QgPSBuZXcgQXJyYXlMaXN0KGJpbmRpbmdGYXVsdC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJlbW92ZUV4dGVuc2ViaWxpdHlFbGVtZW50cyhiaW5kaW5nRmF1bHQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLCByZW1vdmVMaXN0KTsKLQotICAgIFNPQVBGYWN0b3J5IHNvYXBGYWN0b3J5ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFOwotICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSBzb2FwRmFjdG9yeS5jcmVhdGVTT0FQRmF1bHQoKTsKLSAgICBzb2FwRmF1bHQuc2V0VXNlKChnZXRVc2VPcHRpb24oYmluZGluZ0ZhdWx0KSA9PSBVU0VfRU5DT0RFRCkgPyAiZW5jb2RlZCIgOiAibGl0ZXJhbCIpOwotICAgIHNvYXBGYXVsdC5zZXROYW1lKGZhdWx0LmdldE5hbWUoKSk7Ci0gICAgLy8Jc29hcEZhdWx0LnNldE5hbWVzcGFjZVVSSShnZXROYW1lc3BhY2UoYmluZGluZ0ZhdWx0KSk7Ci0KLSAgICBpZiAoZ2V0VXNlT3B0aW9uKGJpbmRpbmdGYXVsdCkgPT0gVVNFX0VOQ09ERUQgJiYgZ2V0U3R5bGVPcHRpb24oYmluZGluZ0ZhdWx0KSA9PSBTVFlMRV9SUEMpCi0gICAgewotICAgICAgTGlzdCBlbmNvZGluZ0xpc3QgPSBuZXcgQmFzaWNFTGlzdCgpOwotICAgICAgZW5jb2RpbmdMaXN0LmFkZCgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKTsKLSAgICAgIHNvYXBGYXVsdC5zZXRFbmNvZGluZ1N0eWxlcyhlbmNvZGluZ0xpc3QpOwotICAgIH0KLQotICAgIGJpbmRpbmdGYXVsdC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwRmF1bHQpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZXNwYWNlKFdTRExFbGVtZW50IHdzZGxFbGVtZW50KQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZVZhbHVlLmVxdWFscygiIikgJiYgd3NkbEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2VWYWx1ZSA9IHdzZGxFbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgaWYgKG5hbWVzcGFjZVZhbHVlID09IG51bGwpCi0gICAgewotICAgICAgbmFtZXNwYWNlVmFsdWUgPSAiIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZXNwYWNlVmFsdWU7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVtb3ZlRXh0ZW5zZWJpbGl0eUVsZW1lbnRzKExpc3Qgb3JpZ2luYWxMaXN0LCBMaXN0IHJlbW92ZUxpc3QpCi0gIHsKLSAgICBJdGVyYXRvciByZW1vdmVJdCA9IHJlbW92ZUxpc3QuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAocmVtb3ZlSXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIG9yaWdpbmFsTGlzdC5yZW1vdmUocmVtb3ZlSXQubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIEJpbmRpbmcgZ2V0QmluZGluZ09iamVjdChPYmplY3QgZ2VuZXJpY0JpbmRpbmdPYmplY3QpCi0gIHsKLSAgICBPYmplY3QgcGFyZW50ID0gZ2VuZXJpY0JpbmRpbmdPYmplY3Q7Ci0KLSAgICBpbnQgaW5kZXggPSAwOwotICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCAmJiBpbmRleCA8IDUpCi0gICAgewotICAgICAgcGFyZW50ID0gZ2V0R2VuZXJpY0JpbmRpbmdPYmplY3RQYXJlbnQocGFyZW50KTsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGluZGV4Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nKSA/IChCaW5kaW5nKXBhcmVudCA6IG51bGw7Ci0gIH0KLQotICBwcml2YXRlIE9iamVjdCBnZXRHZW5lcmljQmluZGluZ09iamVjdFBhcmVudChPYmplY3QgZ2VuZXJpY0JpbmRpbmdPYmplY3QpCi0gIHsKLSAgICBPYmplY3QgcGFyZW50ID0gbnVsbDsKLQotICAgIGlmIChnZW5lcmljQmluZGluZ09iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHBhcmVudCA9ICgoQmluZGluZ09wZXJhdGlvbilnZW5lcmljQmluZGluZ09iamVjdCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZW5lcmljQmluZGluZ09iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgcGFyZW50ID0gKChCaW5kaW5nSW5wdXQpZ2VuZXJpY0JpbmRpbmdPYmplY3QpLmdldENvbnRhaW5lcigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZ2VuZXJpY0JpbmRpbmdPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotICAgICAgewotICAgICAgICBwYXJlbnQgPSAoKEJpbmRpbmdPdXRwdXQpZ2VuZXJpY0JpbmRpbmdPYmplY3QpLmdldENvbnRhaW5lcigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZ2VuZXJpY0JpbmRpbmdPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgICB7Ci0gICAgICAgIHBhcmVudCA9ICgoQmluZGluZ0ZhdWx0KWdlbmVyaWNCaW5kaW5nT2JqZWN0KS5nZXRDb250YWluZXIoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0U3R5bGVPcHRpb24oT2JqZWN0IGdlbmVyaWNCaW5kaW5nT2JqZWN0KQotICB7Ci0gICAgaWYgKHN0eWxlT3B0aW9uID09IE9QVElPTl9OT1RfU0VUICYmIGdlbmVyaWNCaW5kaW5nT2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgLy8gaW5pdCgpIHdhcyBuZXZlciBjYWxsZWQsIHRyeSB0byBkZXRlcm1pbmUgdGhlICdzdHlsZScgYmFzZWQgb24gd2hhdCB3ZSBoYXZlL2tub3cKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IGdldEJpbmRpbmdPYmplY3QoZ2VuZXJpY0JpbmRpbmdPYmplY3QpOwotCi0gICAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBzdHlsZSBmcm9tIHRoZSBCaW5kaW5nIE9iamVjdAotICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIEl0ZXJhdG9yIHZhbHVlc0l0ID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShsaXN0LCAic3R5bGUiKS5pdGVyYXRvcigpOwotCi0gICAgICAgIHdoaWxlICh2YWx1ZXNJdC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgc3R5bGUgPSAoU3RyaW5nKXZhbHVlc0l0Lm5leHQoKTsKLQotICAgICAgICAgIGlmIChzdHlsZS5lcXVhbHMoImRvY3VtZW50IikpCi0gICAgICAgICAgewotICAgICAgICAgICAgc3R5bGVPcHRpb24gPSBTVFlMRV9ET0NVTUVOVDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoc3R5bGUuZXF1YWxzKCJycGMiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzdHlsZU9wdGlvbiA9IFNUWUxFX1JQQzsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoc3R5bGVPcHRpb24gIT0gT1BUSU9OX05PVF9TRVQpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlT3B0aW9uID09IE9QVElPTl9OT1RfU0VUKQotICAgIHsKLSAgICAgIHN0eWxlT3B0aW9uID0gU1RZTEVfRE9DVU1FTlQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0eWxlT3B0aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0VXNlT3B0aW9uKE9iamVjdCBnZW5lcmljQmluZGluZ09iamVjdCkKLSAgewotICAgIGlmICh1c2VPcHRpb24gPT0gT1BUSU9OX05PVF9TRVQpCi0gICAgewotICAgICAgLy8gaW5pdCgpIHdhcyBuZXZlciBjYWxsZWQsIHRyeSB0byBkZXRlcm1pbmUgdGhlICd1c2UnIGJhc2VkIG9uIHdoYXQgd2UgaGF2ZS9rbm93Ci0gICAgICBJdGVyYXRvciBtZXNzYWdlUmVmSXQgPSBnZXRNZXNzYWdlUmVmZXJlbmNlQmluZGluZ09iamVjdHMoZ2VuZXJpY0JpbmRpbmdPYmplY3QpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHVzZSBmcm9tIHRoZSBsaXN0IG9mIEJpbmRpbmdJbnB1dHMsIEJpbmRpbmdPdXRwdXRzLCBhbmQgQmluZGluZ0ZhdWx0cwotICAgICAgd2hpbGUgKG1lc3NhZ2VSZWZJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBtZXNzYWdlUmVmID0gbWVzc2FnZVJlZkl0Lm5leHQoKTsKLSAgICAgICAgTGlzdCB2YWx1ZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgICAgaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0IGxpc3QgPSAoKEJpbmRpbmdJbnB1dCltZXNzYWdlUmVmKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgdmFsdWVzID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShsaXN0LCAidXNlIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0IGxpc3QgPSAoKEJpbmRpbmdPdXRwdXQpbWVzc2FnZVJlZikuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIHZhbHVlcyA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50QXR0cmlidXRlVmFsdWUobGlzdCwgInVzZSIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0IGxpc3QgPSAoKEJpbmRpbmdGYXVsdCltZXNzYWdlUmVmKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgdmFsdWVzID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShsaXN0LCAidXNlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBJdGVyYXRvciB2YWx1ZXNJdCA9IHZhbHVlcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAodmFsdWVzSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHVzZSA9IChTdHJpbmcpdmFsdWVzSXQubmV4dCgpOwotCi0gICAgICAgICAgaWYgKHVzZS5lcXVhbHMoImxpdGVyYWwiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB1c2VPcHRpb24gPSBVU0VfTElURVJBTDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAodXNlLmVxdWFscygiZW5jb2RlZCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVzZU9wdGlvbiA9IFVTRV9FTkNPREVEOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1c2VPcHRpb24gIT0gT1BUSU9OX05PVF9TRVQpCi0gICAgICAgIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGlmICh1c2VPcHRpb24gPT0gT1BUSU9OX05PVF9TRVQpCi0gICAgewotICAgICAgdXNlT3B0aW9uID0gVVNFX0xJVEVSQUw7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVzZU9wdGlvbjsKLSAgfQotCi0gIHByaXZhdGUgTGlzdCBnZXRNZXNzYWdlUmVmZXJlbmNlQmluZGluZ09iamVjdHMoT2JqZWN0IGdlbmVyaWNCaW5kaW5nT2JqZWN0KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEJpbmRpbmcgYmluZGluZyA9IGdldEJpbmRpbmdPYmplY3QoZ2VuZXJpY0JpbmRpbmdPYmplY3QpOwotCi0gICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBvcGVyYXRpb25zSXQgPSBiaW5kaW5nLmdldEVCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChvcGVyYXRpb25zSXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIG9wID0gKEJpbmRpbmdPcGVyYXRpb24pb3BlcmF0aW9uc0l0Lm5leHQoKTsKLSAgICAgICAgbGlzdC5hZGQob3AuZ2V0RUJpbmRpbmdJbnB1dCgpKTsKLSAgICAgICAgbGlzdC5hZGQob3AuZ2V0RUJpbmRpbmdPdXRwdXQoKSk7Ci0gICAgICAgIGxpc3QuYWRkQWxsKG9wLmdldEVCaW5kaW5nRmF1bHRzKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldEV4dGVuc2liaWxpdHlFbGVtZW50QXR0cmlidXRlVmFsdWUoTGlzdCBlZUxpc3QsIFN0cmluZyBhdHRyaWJ1dGVLZXkpCi0gIHsKLSAgICBMaXN0IHZhbHVlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBlZUVsZW1lbnRzSXQgPSBlZUxpc3QuaXRlcmF0b3IoKTsKLQotICAgIHdoaWxlIChlZUVsZW1lbnRzSXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlRWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllZUVsZW1lbnRzSXQubmV4dCgpOwotICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZWVFbGVtZW50LmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlS2V5KTsKLSAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZSAhPSBudWxsICYmICFhdHRyaWJ1dGVWYWx1ZS5lcXVhbHMoIiIpKQotICAgICAgewotICAgICAgICB2YWx1ZXMuYWRkKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWVzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpCi0gIHsKLSAgICByZXR1cm4gIlNPQVAiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBBZGRyZXNzSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQQWRkcmVzc0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUyNTg5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBBZGRyZXNzSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZGRyZXNzPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQWRkcmVzc0ltcGwjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBBZGRyZXNzSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFNPQVBBZGRyZXNzCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX1VSSV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uVVJJKCkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uVVJJID0gTE9DQVRJT05fVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBBZGRyZXNzSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9BRERSRVNTOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uVVJJKCkKLSAgewotICAgIHJldHVybiBsb2NhdGlvblVSSTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIG5ld0xvY2F0aW9uVVJJKQotICB7Ci0gICAgU3RyaW5nIG9sZExvY2F0aW9uVVJJID0gbG9jYXRpb25VUkk7Ci0gICAgbG9jYXRpb25VUkkgPSBuZXdMb2NhdGlvblVSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSwgb2xkTG9jYXRpb25VUkksIGxvY2F0aW9uVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJOgotICAgICAgcmV0dXJuIGdldExvY2F0aW9uVVJJKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9BRERSRVNTX19MT0NBVElPTl9VUkk6Ci0gICAgICBzZXRMb2NhdGlvblVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJOgotICAgICAgc2V0TG9jYXRpb25VUkkoTE9DQVRJT05fVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSToKLSAgICAgIHJldHVybiBMT0NBVElPTl9VUklfRURFRkFVTFQgPT0gbnVsbCA/IGxvY2F0aW9uVVJJICE9IG51bGwgOiAhTE9DQVRJT05fVVJJX0VERUZBVUxULmVxdWFscyhsb2NhdGlvblVSSSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChsb2NhdGlvblVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGxvY2F0aW9uVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldExvY2F0aW9uVVJJKFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLkxPQ0FUSU9OX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLmVJTlNUQU5DRS5nZXRTT0FQQWRkcmVzc19Mb2NhdGlvblVSSSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuTE9DQVRJT05fQVRUUklCVVRFLCBnZXRMb2NhdGlvblVSSSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgU09BUENvbnN0YW50cy5BRERSRVNTX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLX0gLy9TT0FQQWRkcmVzc0ltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEJpbmRpbmdJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBCaW5kaW5nSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGFiY2I0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEJpbmRpbmdJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmc8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCaW5kaW5nSW1wbCNnZXRUcmFuc3BvcnRVUkkgPGVtPlRyYW5zcG9ydCBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCaW5kaW5nSW1wbCNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQQmluZGluZ0ltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBTT0FQQmluZGluZwotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRyYW5zcG9ydFVSSSgpIDxlbT5UcmFuc3BvcnQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRUcmFuc3BvcnRVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFOU1BPUlRfVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNwb3J0VVJJKCkgPGVtPlRyYW5zcG9ydCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFRyYW5zcG9ydFVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdHJhbnNwb3J0VVJJID0gVFJBTlNQT1JUX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0eWxlKCkgPGVtPlN0eWxlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRTdHlsZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3R5bGUoKSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBzdHlsZSA9IFNUWUxFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBCaW5kaW5nSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CSU5ESU5HOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRyYW5zcG9ydFVSSSgpCi0gIHsKLSAgICByZXR1cm4gdHJhbnNwb3J0VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUcmFuc3BvcnRVUkkoU3RyaW5nIG5ld1RyYW5zcG9ydFVSSSkKLSAgewotICAgIFN0cmluZyBvbGRUcmFuc3BvcnRVUkkgPSB0cmFuc3BvcnRVUkk7Ci0gICAgdHJhbnNwb3J0VVJJID0gbmV3VHJhbnNwb3J0VVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSwgb2xkVHJhbnNwb3J0VVJJLCB0cmFuc3BvcnRVUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gc3R5bGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0eWxlKFN0cmluZyBuZXdTdHlsZSkKLSAgewotICAgIFN0cmluZyBvbGRTdHlsZSA9IHN0eWxlOwotICAgIHN0eWxlID0gbmV3U3R5bGU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19TVFlMRSwgb2xkU3R5bGUsIHN0eWxlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSToKLSAgICAgIHJldHVybiBnZXRUcmFuc3BvcnRVUkkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19TVFlMRToKLSAgICAgIHJldHVybiBnZXRTdHlsZSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSToKLSAgICAgIHNldFRyYW5zcG9ydFVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19TVFlMRToKLSAgICAgIHNldFN0eWxlKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HX19UUkFOU1BPUlRfVVJJOgotICAgICAgc2V0VHJhbnNwb3J0VVJJKFRSQU5TUE9SVF9VUklfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfX1NUWUxFOgotICAgICAgc2V0U3R5bGUoU1RZTEVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSToKLSAgICAgIHJldHVybiBUUkFOU1BPUlRfVVJJX0VERUZBVUxUID09IG51bGwgPyB0cmFuc3BvcnRVUkkgIT0gbnVsbCA6ICFUUkFOU1BPUlRfVVJJX0VERUZBVUxULmVxdWFscyh0cmFuc3BvcnRVUkkpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkdfX1NUWUxFOgotICAgICAgcmV0dXJuIFNUWUxFX0VERUZBVUxUID09IG51bGwgPyBzdHlsZSAhPSBudWxsIDogIVNUWUxFX0VERUZBVUxULmVxdWFscyhzdHlsZSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiICh0cmFuc3BvcnRVUkk6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh0cmFuc3BvcnRVUkkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgc3R5bGU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChzdHlsZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0U3R5bGUoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuU1RZTEVfQVRUUklCVVRFKSk7Ci0gICAgc2V0VHJhbnNwb3J0VVJJKFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlRSQU5TUE9SVF9BVFRSSUJVVEUpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U09BUEJpbmRpbmdfU3R5bGUoKSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlNUWUxFX0FUVFJJQlVURSwgZ2V0U3R5bGUoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuZUlOU1RBTkNFLmdldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuVFJBTlNQT1JUX0FUVFJJQlVURSwgZ2V0VHJhbnNwb3J0VVJJKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLkJJTkRJTkdfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotfSAvL1NPQVBCaW5kaW5nSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQQm9keUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEJvZHlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZDY1ODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQQm9keUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRURhdGFUeXBlVW5pcXVlRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Qm9keTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEJvZHlJbXBsI2dldFVzZSA8ZW0+VXNlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwjZ2V0RUVuY29kaW5nU3R5bGVzIDxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQQm9keUltcGwjZ2V0RVBhcnRzIDxlbT5FUGFydHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQQm9keUltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBTT0FQQm9keQotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVzZSgpIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVzZSgpIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdXNlID0gVVNFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lc3BhY2VVUkkoKSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFRW5jb2RpbmdTdHlsZXMoKSA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fScgYXR0cmlidXRlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFRW5jb2RpbmdTdHlsZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUVuY29kaW5nU3R5bGVzID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RVBhcnRzKCkgPGVtPkVQYXJ0czwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUGFydHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZVBhcnRzID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UGFydHMoKSA8ZW0+UGFydHM8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UGFydHMoKQotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgcGFydHMgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBCb2R5SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CT0RZOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVzZSgpCi0gIHsKLSAgICByZXR1cm4gdXNlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRVc2UoU3RyaW5nIG5ld1VzZSkKLSAgewotICAgIFN0cmluZyBvbGRVc2UgPSB1c2U7Ci0gICAgdXNlID0gbmV3VXNlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fVVNFLCBvbGRVc2UsIHVzZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIG5ld05hbWVzcGFjZVVSSSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7Ci0gICAgbmFtZXNwYWNlVVJJID0gbmV3TmFtZXNwYWNlVVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSSwgb2xkTmFtZXNwYWNlVVJJLCBuYW1lc3BhY2VVUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVFbmNvZGluZ1N0eWxlcygpCi0gIHsKLSAgICBpZiAoZUVuY29kaW5nU3R5bGVzID09IG51bGwpCi0gICAgewotICAgICAgZUVuY29kaW5nU3R5bGVzID0gbmV3IEVEYXRhVHlwZVVuaXF1ZUVMaXN0KFN0cmluZy5jbGFzcywgdGhpcywgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVFbmNvZGluZ1N0eWxlczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVQYXJ0cygpCi0gIHsKLSAgICBpZiAoZVBhcnRzID09IG51bGwpCi0gICAgewotICAgICAgZVBhcnRzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdChQYXJ0LmNsYXNzLCB0aGlzLCBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX0VQQVJUUyk7Ci0gICAgfQotICAgIHJldHVybiBlUGFydHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmNvZGluZ1N0eWxlcyhMaXN0IGxpc3QpCi0gIHsKLSAgICBlRW5jb2RpbmdTdHlsZXMgPSAoRUxpc3QpbGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVuY29kaW5nU3R5bGVzKCkKLSAgewotICAgIHJldHVybiBnZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcnRzKExpc3QgbGlzdCkKLSAgewotICAgIHBhcnRzID0gbGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFBhcnRzKCkKLSAgewotICAgIGlmIChwYXJ0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIHBhcnRzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdChQYXJ0LmNsYXNzLCB0aGlzLCBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX0VQQVJUUyk7Ci0gICAgICByZXR1cm4gZ2V0SW1wbGljaXRQYXJ0cygpOwotICAgIH0KLQotICAgIGlmIChwYXJ0cy5zaXplKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0SW1wbGljaXRQYXJ0cygpOwotICAgIH0KLQotICAgIHJldHVybiBwYXJ0czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19VU0U6Ci0gICAgICByZXR1cm4gZ2V0VXNlKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHJldHVybiBnZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgcmV0dXJuIGdldEVFbmNvZGluZ1N0eWxlcygpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX0VQQVJUUzoKLSAgICAgIHJldHVybiBnZXRFUGFydHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX1VTRToKLSAgICAgIHNldFVzZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19OQU1FU1BBQ0VfVVJJOgotICAgICAgc2V0TmFtZXNwYWNlVVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX0VFTkNPRElOR19TVFlMRVM6Ci0gICAgICBnZXRFRW5jb2RpbmdTdHlsZXMoKS5jbGVhcigpOwotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFM6Ci0gICAgICBnZXRFUGFydHMoKS5jbGVhcigpOwotICAgICAgZ2V0RVBhcnRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fVVNFOgotICAgICAgc2V0VXNlKFVTRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHNldE5hbWVzcGFjZVVSSShOQU1FU1BBQ0VfVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FUEFSVFM6Ci0gICAgICBnZXRFUGFydHMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWV9fVVNFOgotICAgICAgcmV0dXJuIFVTRV9FREVGQVVMVCA9PSBudWxsID8gdXNlICE9IG51bGwgOiAhVVNFX0VERUZBVUxULmVxdWFscyh1c2UpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gTkFNRVNQQUNFX1VSSV9FREVGQVVMVCA9PSBudWxsID8gbmFtZXNwYWNlVVJJICE9IG51bGwgOiAhTkFNRVNQQUNFX1VSSV9FREVGQVVMVC5lcXVhbHMobmFtZXNwYWNlVVJJKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CT0RZX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgcmV0dXJuIGVFbmNvZGluZ1N0eWxlcyAhPSBudWxsICYmICFlRW5jb2RpbmdTdHlsZXMuaXNFbXB0eSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JPRFlfX0VQQVJUUzoKLSAgICAgIHJldHVybiBlUGFydHMgIT0gbnVsbCAmJiAhZVBhcnRzLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHVzZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHVzZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBuYW1lc3BhY2VVUkk6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lc3BhY2VVUkkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgZUVuY29kaW5nU3R5bGVzOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoZUVuY29kaW5nU3R5bGVzKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXRVc2UoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuVVNFX0FUVFJJQlVURSkpOwotICAgIHNldE5hbWVzcGFjZVVSSShTT0FQQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgU09BUENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFKSk7Ci0gICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLkVOQ09ESU5HX1NUWUxFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgU3RyaW5nIGVuY29kaW5nU3R5bGVzID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFNPQVBDb25zdGFudHMuRU5DT0RJTkdfU1RZTEVfQVRUUklCVVRFKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGVuY29kaW5nU3R5bGVzKTsKLSAgICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgICBnZXRFbmNvZGluZ1N0eWxlcygpLmFkZCh0b2tlbml6ZXIubmV4dFRva2VuKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZ2V0RW5jb2RpbmdTdHlsZXMoKS5jbGVhcigpOwotICAgIH0KLQotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlUmVmZXJlbmNlcyhib29sZWFuIGRlZXApCi0gIHsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlKFNPQVBDb25zdGFudHMuUEFSVFNfQVRUUklCVVRFKSkKLSAgICAvLyBTeW5jaHJvbml6ZSAncGFydHMnIHZhcmlhYmxlIGZyb20gZWxlbWVudCdzIGF0dHJpYnV0ZS4KLSAgICB7Ci0gICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBnZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIFN0cmluZyBwYXJ0TmFtZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLlBBUlRTX0FUVFJJQlVURSk7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgcGFyc2VyID0gbmV3IFN0cmluZ1Rva2VuaXplcihwYXJ0TmFtZXMsICIgIik7Ci0gICAgICBTdHJpbmcgcGFydE5hbWUgPSBudWxsOwotICAgICAgUGFydCBuZXdQYXJ0ID0gbnVsbDsKLSAgICAgIGdldFBhcnRzKCkuY2xlYXIoKTsKLSAgICAgIHdoaWxlIChwYXJzZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgewotICAgICAgICBwYXJ0TmFtZSA9IHBhcnNlci5uZXh0VG9rZW4oKTsKLSAgICAgICAgbmV3UGFydCA9IChtZXNzYWdlICE9IG51bGwpID8gKFBhcnQpbWVzc2FnZS5nZXRQYXJ0KHBhcnROYW1lKSA6IG51bGw7Ci0gICAgICAgIGlmIChuZXdQYXJ0ICE9IG51bGwpCi0gICAgICAgICAgLy8gRG8gbm90IHVzZSBnZXRQYXJ0cygpIGhlcmUgc2luY2UgaXQgd2lsbCByZXR1cm4gYSBsaXN0IG9mCi0gICAgICAgICAgLy8gaW1wbGljaXRseSBjb2xsZWN0ZWQgcGFydHMuCi0gICAgICAgICAgcGFydHMuYWRkKG5ld1BhcnQpOwotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLmVJTlNUQU5DRS5nZXRTT0FQQm9keV9Vc2UoKSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUsIGdldFVzZSgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFLCBnZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuZUlOU1RBTkNFLmdldFNPQVBCb2R5X0VFbmNvZGluZ1N0eWxlcygpKQotICAgICAgewotICAgICAgICBMaXN0IGVuY29kaW5nU3R5bGVMaXN0ID0gZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgICAgU3RyaW5nIGVuY29kaW5nU3R5bGVzID0gIiI7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZW5jb2RpbmdTdHlsZUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChlbmNvZGluZ1N0eWxlcy5lcXVhbHMoIiIpKSAvLyBmaXJzdCBpdGVyYXRpb24KLSAgICAgICAgICAgIGVuY29kaW5nU3R5bGVzICs9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVuY29kaW5nU3R5bGVzICs9ICIgIiArIChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZW5jb2RpbmdTdHlsZXMuZXF1YWxzKCIiKSkKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuRU5DT0RJTkdfU1RZTEVfQVRUUklCVVRFLCBlbmNvZGluZ1N0eWxlcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgIC8vCi0gICAgLy8gVXBkYXRlIHRoZSBlbGVtZW50J3MgInBhcnRzIiBhdHRyaWJ1dGUgdmFsdWUuCi0gICAgLy8KLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBudWxsIHx8IGVSZWZlcmVuY2UgPT0gU09BUFBhY2thZ2UuZUlOU1RBTkNFLmdldFNPQVBCb2R5X0VQYXJ0cygpKQotICAgICAgewotICAgICAgICAvLyBVc2VkIHRvIGJlIEJ1Z3ppbGxhIDEwODE3Niwgbm93IGl0IGlzIEJ1Z3ppbGxhIDEzNzk5MAotCi0gICAgICAgIFN0cmluZyBwYXJ0c0F0dHJpYnV0ZVZhbHVlID0gbnVsbDsKLQotICAgICAgICAvLyBEbyBub3QgdXNlIGdldFBhcnRzKCkgYXMgaXQgd2lsbCByZXR1cm4gdGhlIGxpc3Qgb2YgaW1wbGljaXQgbWVzc2FnZQotICAgICAgICAvLyBwYXJ0cy4KLQotICAgICAgICBpZiAocGFydHMgIT0gbnVsbCAmJiAhcGFydHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIHBhcnROYW1lc0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotCi0gICAgICAgICAgICBwYXJ0TmFtZXNCdWZmZXIuYXBwZW5kKHBhcnROYW1lKTsKLQotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcGFydE5hbWVzQnVmZmVyLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcGFydHNBdHRyaWJ1dGVWYWx1ZSA9IHBhcnROYW1lc0J1ZmZlci50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlBBUlRTX0FUVFJJQlVURSwgcGFydHNBdHRyaWJ1dGVWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIFNPQVBDb25zdGFudHMuQk9EWV9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldEltcGxpY2l0UGFydHMoKQotICB7Ci0gICAgTGlzdCBpbXBsaWNpdFBhcnRzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBnZXRNZXNzYWdlKCk7Ci0gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCAmJiBtZXNzYWdlLmdldEVQYXJ0cygpLnNpemUoKSA+IDApCi0gICAgewotICAgICAgaW1wbGljaXRQYXJ0cy5hZGRBbGwobWVzc2FnZS5nZXRFUGFydHMoKSk7Ci0gICAgfQotICAgIHJldHVybiBpbXBsaWNpdFBhcnRzOwotICB9Ci0KLSAgcHJpdmF0ZSBNZXNzYWdlIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKLQotICAgIGlmIChlQ29udGFpbmVyKCkgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgaWYgKCgoQmluZGluZ0lucHV0KWVDb250YWluZXIoKSkuZ2V0RUlucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgbWVzc2FnZSA9ICgoQmluZGluZ0lucHV0KWVDb250YWluZXIoKSkuZ2V0RUlucHV0KCkuZ2V0RU1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgaWYgKGVDb250YWluZXIoKSBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgaWYgKCgoQmluZGluZ091dHB1dCllQ29udGFpbmVyKCkpLmdldEVPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICBtZXNzYWdlID0gKChCaW5kaW5nT3V0cHV0KWVDb250YWluZXIoKSkuZ2V0RU91dHB1dCgpLmdldEVNZXNzYWdlKCk7Ci0gICAgfQotICAgIGlmIChlQ29udGFpbmVyKCkgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgaWYgKCgoQmluZGluZ0ZhdWx0KWVDb250YWluZXIoKSkuZ2V0RUZhdWx0KCkgIT0gbnVsbCkKLSAgICAgICAgbWVzc2FnZSA9ICgoQmluZGluZ0ZhdWx0KWVDb250YWluZXIoKSkuZ2V0RUZhdWx0KCkuZ2V0RU1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotfSAvL1NPQVBCb2R5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5YTJlOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLio7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBTT0FQRmFjdG9yeQotewotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQRmFjdG9yeSBpbml0KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFNPQVBGYWN0b3J5IHRoZVNPQVBGYWN0b3J5ID0gKFNPQVBGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dzZGwvMjAwMy9TT0FQIik7IC8vJE5PTi1OTFMtMSQgCi0gICAgICBpZiAodGhlU09BUEZhY3RvcnkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRoZVNPQVBGYWN0b3J5OwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBTT0FQRmFjdG9yeUltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBGYWN0b3J5SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykKLSAgewotICAgIHN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9CSU5ESU5HOgotICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBCaW5kaW5nKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWToKLSAgICAgIHJldHVybiBjcmVhdGVTT0FQQm9keSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFOgotICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBIZWFkZXJCYXNlKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFQ6Ci0gICAgICByZXR1cm4gY3JlYXRlU09BUEZhdWx0KCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OOgotICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBPcGVyYXRpb24oKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9BRERSRVNTOgotICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBBZGRyZXNzKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUOgotICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUjoKLSAgICAgIHJldHVybiBjcmVhdGVTT0FQSGVhZGVyKCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuSVNUUklORzoKLSAgICAgIHJldHVybiBjcmVhdGVJU3RyaW5nRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGNvbnZlcnRUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuSVNUUklORzoKLSAgICAgIHJldHVybiBjb252ZXJ0SVN0cmluZ1RvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEJpbmRpbmcgY3JlYXRlU09BUEJpbmRpbmcoKQotICB7Ci0gICAgU09BUEJpbmRpbmdJbXBsIHNvYXBCaW5kaW5nID0gbmV3IFNPQVBCaW5kaW5nSW1wbCgpOwotICAgIHJldHVybiBzb2FwQmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBCb2R5IGNyZWF0ZVNPQVBCb2R5KCkKLSAgewotICAgIFNPQVBCb2R5SW1wbCBzb2FwQm9keSA9IG5ldyBTT0FQQm9keUltcGwoKTsKLSAgICByZXR1cm4gc29hcEJvZHk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQSGVhZGVyQmFzZSBjcmVhdGVTT0FQSGVhZGVyQmFzZSgpCi0gIHsKLSAgICBTT0FQSGVhZGVyQmFzZUltcGwgc29hcEhlYWRlckJhc2UgPSBuZXcgU09BUEhlYWRlckJhc2VJbXBsKCk7Ci0gICAgcmV0dXJuIHNvYXBIZWFkZXJCYXNlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEZhdWx0IGNyZWF0ZVNPQVBGYXVsdCgpCi0gIHsKLSAgICBTT0FQRmF1bHRJbXBsIHNvYXBGYXVsdCA9IG5ldyBTT0FQRmF1bHRJbXBsKCk7Ci0gICAgcmV0dXJuIHNvYXBGYXVsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBPcGVyYXRpb24gY3JlYXRlU09BUE9wZXJhdGlvbigpCi0gIHsKLSAgICBTT0FQT3BlcmF0aW9uSW1wbCBzb2FwT3BlcmF0aW9uID0gbmV3IFNPQVBPcGVyYXRpb25JbXBsKCk7Ci0gICAgcmV0dXJuIHNvYXBPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQQWRkcmVzcyBjcmVhdGVTT0FQQWRkcmVzcygpCi0gIHsKLSAgICBTT0FQQWRkcmVzc0ltcGwgc29hcEFkZHJlc3MgPSBuZXcgU09BUEFkZHJlc3NJbXBsKCk7Ci0gICAgcmV0dXJuIHNvYXBBZGRyZXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEhlYWRlckZhdWx0IGNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICBTT0FQSGVhZGVyRmF1bHRJbXBsIHNvYXBIZWFkZXJGYXVsdCA9IG5ldyBTT0FQSGVhZGVyRmF1bHRJbXBsKCk7Ci0gICAgcmV0dXJuIHNvYXBIZWFkZXJGYXVsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBIZWFkZXIgY3JlYXRlU09BUEhlYWRlcigpCi0gIHsKLSAgICBTT0FQSGVhZGVySW1wbCBzb2FwSGVhZGVyID0gbmV3IFNPQVBIZWFkZXJJbXBsKCk7Ci0gICAgcmV0dXJuIHNvYXBIZWFkZXI7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSVN0cmluZ0Zyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKXN1cGVyLmNyZWF0ZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGNvbnZlcnRJU3RyaW5nVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gc3VwZXIuY29udmVydFRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTT0FQUGFja2FnZSBnZXRTT0FQUGFja2FnZSgpCi0gIHsKLSAgICByZXR1cm4gKFNPQVBQYWNrYWdlKWdldEVQYWNrYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBkZXByZWNhdGVkCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU09BUFBhY2thZ2UgZ2V0UGFja2FnZSgpCi0gIHsKLSAgICByZXR1cm4gU09BUFBhY2thZ2UuZUlOU1RBTkNFOwotICB9Ci19IC8vU09BUEZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBGYXVsdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEZhdWx0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzM2ZjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEZhdWx0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FRGF0YVR5cGVVbmlxdWVFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhdWx0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQRmF1bHRJbXBsI2dldFVzZSA8ZW0+VXNlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQRmF1bHRJbXBsI2dldE5hbWVzcGFjZVVSSSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEZhdWx0SW1wbCNnZXRFRW5jb2RpbmdTdHlsZXMgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBGYXVsdEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBGYXVsdEltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBTT0FQRmF1bHQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVc2UoKSA8ZW0+VXNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRVc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVc2UoKSA8ZW0+VXNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRVc2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHVzZSA9IFVTRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWVzcGFjZVVSSSgpIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlVVJJID0gTkFNRVNQQUNFX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUVuY29kaW5nU3R5bGVzKCkgPGVtPkVFbmNvZGluZyBTdHlsZXM8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUVuY29kaW5nU3R5bGVzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVFbmNvZGluZ1N0eWxlcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBTT0FQRmF1bHRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0ZBVUxUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVzZSgpCi0gIHsKLSAgICByZXR1cm4gdXNlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRVc2UoU3RyaW5nIG5ld1VzZSkKLSAgewotICAgIFN0cmluZyBvbGRVc2UgPSB1c2U7Ci0gICAgdXNlID0gbmV3VXNlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX1VTRSwgb2xkVXNlLCB1c2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZVVSSTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlVVJJKFN0cmluZyBuZXdOYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOwotICAgIG5hbWVzcGFjZVVSSSA9IG5ld05hbWVzcGFjZVVSSTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJLCBvbGROYW1lc3BhY2VVUkksIG5hbWVzcGFjZVVSSSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RUVuY29kaW5nU3R5bGVzKCkKLSAgewotICAgIGlmIChlRW5jb2RpbmdTdHlsZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlRW5jb2RpbmdTdHlsZXMgPSBuZXcgRURhdGFUeXBlVW5pcXVlRUxpc3QoU3RyaW5nLmNsYXNzLCB0aGlzLCBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVFbmNvZGluZ1N0eWxlczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotICAgIG5hbWUgPSBuZXdOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQjZ2V0RW5jb2RpbmdTdHlsZXMoKQotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RW5jb2RpbmdTdHlsZXMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVFbmNvZGluZ1N0eWxlcygpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19VU0U6Ci0gICAgICByZXR1cm4gZ2V0VXNlKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX0VFTkNPRElOR19TVFlMRVM6Ci0gICAgICByZXR1cm4gZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX1VTRToKLSAgICAgIHNldFVzZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHNldE5hbWVzcGFjZVVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmNsZWFyKCk7Ci0gICAgICBnZXRFRW5jb2RpbmdTdHlsZXMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX1VTRToKLSAgICAgIHNldFVzZShVU0VfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJOgotICAgICAgc2V0TmFtZXNwYWNlVVJJKE5BTUVTUEFDRV9VUklfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fTkFNRToKLSAgICAgIHNldE5hbWUoTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9GQVVMVF9fVVNFOgotICAgICAgcmV0dXJuIFVTRV9FREVGQVVMVCA9PSBudWxsID8gdXNlICE9IG51bGwgOiAhVVNFX0VERUZBVUxULmVxdWFscyh1c2UpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJOgotICAgICAgcmV0dXJuIE5BTUVTUEFDRV9VUklfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWVzcGFjZVVSSSAhPSBudWxsIDogIU5BTUVTUEFDRV9VUklfRURFRkFVTFQuZXF1YWxzKG5hbWVzcGFjZVVSSSk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX0VFTkNPRElOR19TVFlMRVM6Ci0gICAgICByZXR1cm4gZUVuY29kaW5nU3R5bGVzICE9IG51bGwgJiYgIWVFbmNvZGluZ1N0eWxlcy5pc0VtcHR5KCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFRfX05BTUU6Ci0gICAgICByZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbmNvZGluZ1N0eWxlcyhMaXN0IGxpc3QpCi0gIHsKLSAgICBlRW5jb2RpbmdTdHlsZXMgPSAoRUxpc3QpbGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiICh1c2U6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1c2UpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbmFtZXNwYWNlVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobmFtZXNwYWNlVVJJKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIGVFbmNvZGluZ1N0eWxlczogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGVFbmNvZGluZ1N0eWxlcyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBuYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQobmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzOiBET00gLT4gTW9kZWwKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXROYW1lKFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKSk7Ci0gICAgc2V0TmFtZXNwYWNlVVJJKFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLk5BTUVTUEFDRV9BVFRSSUJVVEUpKTsKLSAgICBzZXRVc2UoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuVVNFX0FUVFJJQlVURSkpOwotCi0gICAgLy8gVEJEIC0gaGFuZGxlIGVuY29kaW5nU3R5bGVzCi0KLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U09BUEZhdWx0X05hbWVzcGFjZVVSSSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRVNQQUNFX0FUVFJJQlVURSwgZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLmVJTlNUQU5DRS5nZXRTT0FQRmF1bHRfVXNlKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5VU0VfQVRUUklCVVRFLCBnZXRVc2UoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuZUlOU1RBTkNFLmdldFNPQVBGYXVsdF9FRW5jb2RpbmdTdHlsZXMoKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBlbmNvZGluZ1N0eWxlTGlzdCA9IGdldEVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICAgIFN0cmluZyBlbmNvZGluZ1N0eWxlcyA9ICIiOwotICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGVuY29kaW5nU3R5bGVMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoZW5jb2RpbmdTdHlsZXMuZXF1YWxzKCIiKSkgLy8gZmlyc3QgaXRlcmF0aW9uCi0gICAgICAgICAgICBlbmNvZGluZ1N0eWxlcyArPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbmNvZGluZ1N0eWxlcyArPSAiICIgKyAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWVuY29kaW5nU3R5bGVzLmVxdWFscygiIikpCi0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBTT0FQQ29uc3RhbnRzLkVOQ09ESU5HX1NUWUxFX0FUVFJJQlVURSwgZW5jb2RpbmdTdHlsZXMpOwotICAgICAgfSAvLyBUQkQgLSBJcyB0aGlzIHRoZSBwcm9wZXIgd2F5IHRvIGhhbmRsZSBlbmNvZGluZ1N0eWxlcwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLmVJTlNUQU5DRS5nZXRTT0FQRmF1bHRfTmFtZSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIFNPQVBDb25zdGFudHMuRkFVTFRfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi19IC8vU09BUEZhdWx0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVyQmFzZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEhlYWRlckJhc2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NDNkOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQSGVhZGVyQmFzZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FRGF0YVR5cGVVbmlxdWVFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXIgQmFzZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsI2dldFVzZSA8ZW0+VXNlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwjZ2V0RUVuY29kaW5nU3R5bGVzIDxlbT5FRW5jb2RpbmcgU3R5bGVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQSGVhZGVyQmFzZUltcGwjZ2V0TWVzc2FnZSA8ZW0+TWVzc2FnZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckJhc2VJbXBsI2dldFBhcnQgPGVtPlBhcnQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJCYXNlSW1wbCNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBIZWFkZXJCYXNlSW1wbCNnZXRFUGFydCA8ZW0+RVBhcnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQSGVhZGVyQmFzZUltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBTT0FQSGVhZGVyQmFzZQotewotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVzZSgpIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVzZSgpIDxlbT5Vc2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVzZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdXNlID0gVVNFX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lc3BhY2VVUkkoKSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFRW5jb2RpbmdTdHlsZXMoKSA8ZW0+RUVuY29kaW5nIFN0eWxlczwvZW0+fScgYXR0cmlidXRlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFRW5jb2RpbmdTdHlsZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUVuY29kaW5nU3R5bGVzID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1lc3NhZ2UoKSA8ZW0+TWVzc2FnZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgTUVTU0FHRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1lc3NhZ2UoKSA8ZW0+TWVzc2FnZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBRTmFtZSBtZXNzYWdlID0gTUVTU0FHRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBhcnQoKSA8ZW0+UGFydDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlRfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQYXJ0KCkgPGVtPlBhcnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcnQgPSBQQVJUX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFTWVzc2FnZSgpIDxlbT5FTWVzc2FnZTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZSBlTWVzc2FnZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVQYXJ0KCkgPGVtPkVQYXJ0PC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBQYXJ0IGVQYXJ0ID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBTT0FQSGVhZGVyQmFzZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfSEVBREVSX0JBU0U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VXNlKCkKLSAgewotICAgIHJldHVybiB1c2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVzZShTdHJpbmcgbmV3VXNlKQotICB7Ci0gICAgU3RyaW5nIG9sZFVzZSA9IHVzZTsKLSAgICB1c2UgPSBuZXdVc2U7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fVVNFLCBvbGRVc2UsIHVzZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIG5ld05hbWVzcGFjZVVSSSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7Ci0gICAgbmFtZXNwYWNlVVJJID0gbmV3TmFtZXNwYWNlVVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkksIG9sZE5hbWVzcGFjZVVSSSwgbmFtZXNwYWNlVVJJKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFRW5jb2RpbmdTdHlsZXMoKQotICB7Ci0gICAgaWYgKGVFbmNvZGluZ1N0eWxlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVFbmNvZGluZ1N0eWxlcyA9IG5ldyBFRGF0YVR5cGVVbmlxdWVFTGlzdChTdHJpbmcuY2xhc3MsIHRoaXMsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVMpOwotICAgIH0KLSAgICByZXR1cm4gZUVuY29kaW5nU3R5bGVzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZSBnZXRFTWVzc2FnZSgpCi0gIHsKLSAgICBpZiAoZU1lc3NhZ2UgIT0gbnVsbCAmJiBlTWVzc2FnZS5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFTWVzc2FnZSA9IChJbnRlcm5hbEVPYmplY3QpZU1lc3NhZ2U7Ci0gICAgICBlTWVzc2FnZSA9IChNZXNzYWdlKWVSZXNvbHZlUHJveHkob2xkRU1lc3NhZ2UpOwotICAgICAgaWYgKGVNZXNzYWdlICE9IG9sZEVNZXNzYWdlKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZSBiYXNpY0dldEVNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBlTWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RU1lc3NhZ2UoTWVzc2FnZSBuZXdFTWVzc2FnZSkKLSAgewotICAgIE1lc3NhZ2Ugb2xkRU1lc3NhZ2UgPSBlTWVzc2FnZTsKLSAgICBlTWVzc2FnZSA9IG5ld0VNZXNzYWdlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBhcnQgZ2V0RVBhcnQoKQotICB7Ci0gICAgaWYgKGVQYXJ0ICE9IG51bGwgJiYgZVBhcnQuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRVBhcnQgPSAoSW50ZXJuYWxFT2JqZWN0KWVQYXJ0OwotICAgICAgZVBhcnQgPSAoUGFydCllUmVzb2x2ZVByb3h5KG9sZEVQYXJ0KTsKLSAgICAgIGlmIChlUGFydCAhPSBvbGRFUGFydCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVCwgb2xkRVBhcnQsIGVQYXJ0KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlUGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBhcnQgYmFzaWNHZXRFUGFydCgpCi0gIHsKLSAgICByZXR1cm4gZVBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVQYXJ0KFBhcnQgbmV3RVBhcnQpCi0gIHsKLSAgICBQYXJ0IG9sZEVQYXJ0ID0gZVBhcnQ7Ci0gICAgZVBhcnQgPSBuZXdFUGFydDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVCwgb2xkRVBhcnQsIGVQYXJ0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKFFOYW1lIG5ld01lc3NhZ2UpCi0gIHsKLSAgICBRTmFtZSBvbGRNZXNzYWdlID0gbWVzc2FnZTsKLSAgICBtZXNzYWdlID0gbmV3TWVzc2FnZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFLCBvbGRNZXNzYWdlLCBtZXNzYWdlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFydCgpCi0gIHsKLSAgICByZXR1cm4gcGFydDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFydChTdHJpbmcgbmV3UGFydCkKLSAgewotICAgIFN0cmluZyBvbGRQYXJ0ID0gcGFydDsKLSAgICBwYXJ0ID0gbmV3UGFydDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19QQVJULCBvbGRQYXJ0LCBwYXJ0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFbmNvZGluZ1N0eWxlcygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmNvZGluZ1N0eWxlcyhMaXN0IGVuY29kaW5nU3R5bGVzKQotICB7Ci0gICAgZUVuY29kaW5nU3R5bGVzID0gKEVMaXN0KWVuY29kaW5nU3R5bGVzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19VU0U6Ci0gICAgICByZXR1cm4gZ2V0VXNlKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX0VFTkNPRElOR19TVFlMRVM6Ci0gICAgICByZXR1cm4gZ2V0RUVuY29kaW5nU3R5bGVzKCk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U6Ci0gICAgICByZXR1cm4gZ2V0TWVzc2FnZSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19QQVJUOgotICAgICAgcmV0dXJuIGdldFBhcnQoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0U6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFTWVzc2FnZSgpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVDoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RVBhcnQoKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVQYXJ0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fVVNFOgotICAgICAgc2V0VXNlKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJOgotICAgICAgc2V0TmFtZXNwYWNlVVJJKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTOgotICAgICAgZ2V0RUVuY29kaW5nU3R5bGVzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U6Ci0gICAgICBzZXRNZXNzYWdlKChRTmFtZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1BBUlQ6Ci0gICAgICBzZXRQYXJ0KChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRToKLSAgICAgIHNldEVNZXNzYWdlKChNZXNzYWdlKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRVBBUlQ6Ci0gICAgICBzZXRFUGFydCgoUGFydCluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19VU0U6Ci0gICAgICBzZXRVc2UoVVNFX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHNldE5hbWVzcGFjZVVSSShOQU1FU1BBQ0VfVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX01FU1NBR0U6Ci0gICAgICBzZXRNZXNzYWdlKE1FU1NBR0VfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19QQVJUOgotICAgICAgc2V0UGFydChQQVJUX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRU1FU1NBR0U6Ci0gICAgICBzZXRFTWVzc2FnZSgoTWVzc2FnZSludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRVBBUlQ6Ci0gICAgICBzZXRFUGFydCgoUGFydCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19VU0U6Ci0gICAgICByZXR1cm4gVVNFX0VERUZBVUxUID09IG51bGwgPyB1c2UgIT0gbnVsbCA6ICFVU0VfRURFRkFVTFQuZXF1YWxzKHVzZSk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gTkFNRVNQQUNFX1VSSV9FREVGQVVMVCA9PSBudWxsID8gbmFtZXNwYWNlVVJJICE9IG51bGwgOiAhTkFNRVNQQUNFX1VSSV9FREVGQVVMVC5lcXVhbHMobmFtZXNwYWNlVVJJKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fRUVOQ09ESU5HX1NUWUxFUzoKLSAgICAgIHJldHVybiBlRW5jb2RpbmdTdHlsZXMgIT0gbnVsbCAmJiAhZUVuY29kaW5nU3R5bGVzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRV9fTUVTU0FHRToKLSAgICAgIHJldHVybiBNRVNTQUdFX0VERUZBVUxUID09IG51bGwgPyBtZXNzYWdlICE9IG51bGwgOiAhTUVTU0FHRV9FREVGQVVMVC5lcXVhbHMobWVzc2FnZSk7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0JBU0VfX1BBUlQ6Ci0gICAgICByZXR1cm4gUEFSVF9FREVGQVVMVCA9PSBudWxsID8gcGFydCAhPSBudWxsIDogIVBBUlRfRURFRkFVTFQuZXF1YWxzKHBhcnQpOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRToKLSAgICAgIHJldHVybiBlTWVzc2FnZSAhPSBudWxsOwotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9CQVNFX19FUEFSVDoKLSAgICAgIHJldHVybiBlUGFydCAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAodXNlOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodXNlKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIG5hbWVzcGFjZVVSSTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWVzcGFjZVVSSSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBlRW5jb2RpbmdTdHlsZXM6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChlRW5jb2RpbmdTdHlsZXMpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbWVzc2FnZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG1lc3NhZ2UpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgcGFydDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHBhcnQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kczogRE9NIC0+IE1vZGVsCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0VXNlKFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUpKTsKLSAgICBzZXROYW1lc3BhY2VVUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRVNQQUNFX0FUVFJJQlVURSkpOwotICAgIGlmIChjaGFuZ2VkRWxlbWVudC5oYXNBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgUU5hbWUgbWVzc2FnZVFOYW1lID0gY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFNPQVBDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUpLCBjaGFuZ2VkRWxlbWVudCk7Ci0gICAgICBzZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRNZXNzYWdlKG51bGwpOwotICAgIH0KLSAgICBzZXRQYXJ0KFNPQVBDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBTT0FQQ29uc3RhbnRzLlBBUlRfQVRUUklCVVRFKSk7Ci0gICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLkVOQ09ESU5HX1NUWUxFX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgU3RyaW5nIGVuY29kaW5nU3R5bGVzID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFNPQVBDb25zdGFudHMuRU5DT0RJTkdfU1RZTEVfQVRUUklCVVRFKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGVuY29kaW5nU3R5bGVzKTsKLSAgICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgICBnZXRFRW5jb2RpbmdTdHlsZXMoKS5hZGQodG9rZW5pemVyLm5leHRUb2tlbigpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGdldEVFbmNvZGluZ1N0eWxlcygpLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKHRoaXMubWVzc2FnZSAhPSBudWxsKSA/IChNZXNzYWdlKWRlZmluaXRpb24uZ2V0TWVzc2FnZSh0aGlzLm1lc3NhZ2UpIDogbnVsbDsKLSAgICAgIGlmIChtZXNzYWdlICE9IG51bGwgJiYgbWVzc2FnZSAhPSBnZXRFTWVzc2FnZSgpKQotICAgICAgewotICAgICAgICBzZXRFTWVzc2FnZShtZXNzYWdlKTsKLQotICAgICAgICBQYXJ0IG5ld1BhcnQgPSAoUGFydCltZXNzYWdlLmdldFBhcnQocGFydCk7Ci0gICAgICAgIGlmIChuZXdQYXJ0ICE9IG51bGwgJiYgbmV3UGFydCAhPSBnZXRFUGFydCgpKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0RVBhcnQobmV3UGFydCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U09BUEhlYWRlckJhc2VfVXNlKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5VU0VfQVRUUklCVVRFLCBnZXRVc2UoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuZUlOU1RBTkNFLmdldFNPQVBIZWFkZXJCYXNlX05hbWVzcGFjZVVSSSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuTkFNRVNQQUNFX0FUVFJJQlVURSwgZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLmVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9QYXJ0KCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5QQVJUX0FUVFJJQlVURSwgZ2V0UGFydCgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBTT0FQUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U09BUEhlYWRlckJhc2VfTWVzc2FnZSgpKQotICAgICAgewotICAgICAgICBTdHJpbmcgdXJpTGlzdCA9IG1lc3NhZ2UgIT0gbnVsbCA/IG1lc3NhZ2UuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiIyIgKyBtZXNzYWdlLmdldExvY2FsUGFydCgpIDogbnVsbDsKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUsIHVyaUxpc3QpOwotICAgICAgfQotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLmVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9FRW5jb2RpbmdTdHlsZXMoKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBlbmNvZGluZ1N0eWxlTGlzdCA9IGdldEVFbmNvZGluZ1N0eWxlcygpOwotICAgICAgICBTdHJpbmcgZW5jb2RpbmdTdHlsZXMgPSAiIjsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBlbmNvZGluZ1N0eWxlTGlzdC5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGVuY29kaW5nU3R5bGVzLmVxdWFscygiIikpIC8vIGZpcnN0IGl0ZXJhdGlvbgotICAgICAgICAgICAgZW5jb2RpbmdTdHlsZXMgKz0gKFN0cmluZylpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZW5jb2RpbmdTdHlsZXMgKz0gIiAiICsgKFN0cmluZylpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFlbmNvZGluZ1N0eWxlcy5lcXVhbHMoIiIpKQotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5FTkNPRElOR19TVFlMRV9BVFRSSUJVVEUsIGVuY29kaW5nU3R5bGVzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VSZWZlcmVuY2UoRVJlZmVyZW5jZSBlUmVmZXJlbmNlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VSZWZlcmVuY2UoZVJlZmVyZW5jZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVSZWZlcmVuY2UgPT0gbnVsbCB8fCBlUmVmZXJlbmNlID09IFNPQVBQYWNrYWdlLmVJTlNUQU5DRS5nZXRTT0FQSGVhZGVyQmFzZV9FTWVzc2FnZSgpKQotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBnZXRFTWVzc2FnZSgpOwotICAgICAgICBpZiAobWVzc2FnZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgUU5hbWUgcU5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCk7Ci0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUsIHFOYW1lLmdldE5hbWVzcGFjZVVSSSgpICsgIiMiICsgcU5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgfHwgZVJlZmVyZW5jZSA9PSBTT0FQUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U09BUEhlYWRlckJhc2VfRVBhcnQoKSkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwYXJ0ID0gZ2V0RVBhcnQoKTsKLSAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5QQVJUX0FUVFJJQlVURSwgcGFydE5hbWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19IC8vU09BUEhlYWRlckJhc2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBIZWFkZXJGYXVsdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEhlYWRlckZhdWx0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjQ0ODMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEhlYWRlckZhdWx0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5IZWFkZXIgRmF1bHQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQSGVhZGVyRmF1bHRJbXBsIGV4dGVuZHMgU09BUEhlYWRlckJhc2VJbXBsIGltcGxlbWVudHMgU09BUEhlYWRlckZhdWx0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBIZWFkZXJGYXVsdEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfSEVBREVSX0ZBVUxUOwotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldEVsZW1lbnRUeXBlKCkKLSAgewotICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIFNPQVBDb25zdGFudHMuSEVBREVSX0ZBVUxUX0VMRU1FTlRfVEFHKTsKLSAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gIH0KLQotfSAvL1NPQVBIZWFkZXJGYXVsdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEhlYWRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUEhlYWRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5OTVmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBIZWFkZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkhlYWRlcjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUEhlYWRlckltcGwjZ2V0SGVhZGVyRmF1bHRzIDxlbT5IZWFkZXIgRmF1bHRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUEhlYWRlckltcGwgZXh0ZW5kcyBTT0FQSGVhZGVyQmFzZUltcGwgaW1wbGVtZW50cyBTT0FQSGVhZGVyCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIZWFkZXJGYXVsdHMoKSA8ZW0+SGVhZGVyIEZhdWx0czwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRIZWFkZXJGYXVsdHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgaGVhZGVyRmF1bHRzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBTT0FQSGVhZGVySW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVI7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRIZWFkZXJGYXVsdHMoKQotICB7Ci0gICAgaWYgKGhlYWRlckZhdWx0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGhlYWRlckZhdWx0cyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChTT0FQSGVhZGVyRmF1bHQuY2xhc3MsIHRoaXMsIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhlYWRlckZhdWx0czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNPQVBIZWFkZXJGYXVsdHMoKQotICB7Ci0gICAgcmV0dXJuIGdldEhlYWRlckZhdWx0cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkU09BUEhlYWRlckZhdWx0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdCBzb2FwSGVhZGVyRmF1bHQpCi0gIHsKLSAgICBFTGlzdCBoZWFkZXJGYXVsdHMgPSBnZXRIZWFkZXJGYXVsdHMoKTsKLSAgICBoZWFkZXJGYXVsdHMuYWRkKHNvYXBIZWFkZXJGYXVsdCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRIZWFkZXJGYXVsdHMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTOgotICAgICAgcmV0dXJuIGdldEhlYWRlckZhdWx0cygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTOgotICAgICAgZ2V0SGVhZGVyRmF1bHRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEhlYWRlckZhdWx0cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUl9fSEVBREVSX0ZBVUxUUzoKLSAgICAgIGdldEhlYWRlckZhdWx0cygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfX0hFQURFUl9GQVVMVFM6Ci0gICAgICByZXR1cm4gaGVhZGVyRmF1bHRzICE9IG51bGwgJiYgIWhlYWRlckZhdWx0cy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBpZiAoU09BUENvbnN0YW50cy5IRUFERVJfRkFVTFRfRUxFTUVOVF9UQUcuZXF1YWxzKGNoaWxkLmdldExvY2FsTmFtZSgpKSkKLSAgICB7Ci0gICAgICBTT0FQSGVhZGVyRmF1bHQgZmF1bHQgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEhlYWRlckZhdWx0KCk7Ci0gICAgICBmYXVsdC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICBmYXVsdC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgIGdldEhlYWRlckZhdWx0cygpLmFkZChmYXVsdCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZSh0aGlzLCBpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIFNPQVBIZWFkZXIgaGVhZGVyID0gKFNPQVBIZWFkZXIpY29tcG9uZW50OwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFNPQVBIZWFkZXJGYXVsdCkKLSAgICB7Ci0gICAgICBoZWFkZXIuZ2V0SGVhZGVyRmF1bHRzKCkucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgU09BUENvbnN0YW50cy5IRUFERVJfRUxFTUVOVF9UQUcpOwotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotfSAvL1NPQVBIZWFkZXJJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBPcGVyYXRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC9pbXBsL1NPQVBPcGVyYXRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YmM1YjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQT3BlcmF0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk9wZXJhdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGwuU09BUE9wZXJhdGlvbkltcGwjZ2V0U29hcEFjdGlvblVSSSA8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuaW1wbC5TT0FQT3BlcmF0aW9uSW1wbCNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQT3BlcmF0aW9uSW1wbCBleHRlbmRzIEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFNPQVBPcGVyYXRpb24KLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTb2FwQWN0aW9uVVJJKCkgPGVtPlNvYXAgQWN0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0U29hcEFjdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfQUNUSU9OX1VSSV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNvYXBBY3Rpb25VUkkoKSA8ZW0+U29hcCBBY3Rpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRTb2FwQWN0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBzb2FwQWN0aW9uVVJJID0gU09BUF9BQ1RJT05fVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3R5bGUoKSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RZTEVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdHlsZSgpIDxlbT5TdHlsZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0U3R5bGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHN0eWxlID0gU1RZTEVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUE9wZXJhdGlvbkltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfT1BFUkFUSU9OOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNvYXBBY3Rpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBBY3Rpb25VUkk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNvYXBBY3Rpb25VUkkoU3RyaW5nIG5ld1NvYXBBY3Rpb25VUkkpCi0gIHsKLSAgICBTdHJpbmcgb2xkU29hcEFjdGlvblVSSSA9IHNvYXBBY3Rpb25VUkk7Ci0gICAgc29hcEFjdGlvblVSSSA9IG5ld1NvYXBBY3Rpb25VUkk7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NPQVBfQUNUSU9OX1VSSSwgb2xkU29hcEFjdGlvblVSSSwgc29hcEFjdGlvblVSSSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0eWxlKCkKLSAgewotICAgIHJldHVybiBzdHlsZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3R5bGUoU3RyaW5nIG5ld1N0eWxlKQotICB7Ci0gICAgU3RyaW5nIG9sZFN0eWxlID0gc3R5bGU7Ci0gICAgc3R5bGUgPSBuZXdTdHlsZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU1RZTEUsIG9sZFN0eWxlLCBzdHlsZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJOgotICAgICAgcmV0dXJuIGdldFNvYXBBY3Rpb25VUkkoKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NUWUxFOgotICAgICAgcmV0dXJuIGdldFN0eWxlKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NPQVBfQUNUSU9OX1VSSToKLSAgICAgIHNldFNvYXBBY3Rpb25VUkkoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19TVFlMRToKLSAgICAgIHNldFN0eWxlKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NPQVBfQUNUSU9OX1VSSToKLSAgICAgIHNldFNvYXBBY3Rpb25VUkkoU09BUF9BQ1RJT05fVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NUWUxFOgotICAgICAgc2V0U3R5bGUoU1RZTEVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfT1BFUkFUSU9OX19TT0FQX0FDVElPTl9VUkk6Ci0gICAgICByZXR1cm4gU09BUF9BQ1RJT05fVVJJX0VERUZBVUxUID09IG51bGwgPyBzb2FwQWN0aW9uVVJJICE9IG51bGwgOiAhU09BUF9BQ1RJT05fVVJJX0VERUZBVUxULmVxdWFscyhzb2FwQWN0aW9uVVJJKTsKLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9PUEVSQVRJT05fX1NUWUxFOgotICAgICAgcmV0dXJuIFNUWUxFX0VERUZBVUxUID09IG51bGwgPyBzdHlsZSAhPSBudWxsIDogIVNUWUxFX0VERUZBVUxULmVxdWFscyhzdHlsZSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChzb2FwQWN0aW9uVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoc29hcEFjdGlvblVSSSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBzdHlsZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHN0eWxlKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHNldFNvYXBBY3Rpb25VUkkoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuU09BUF9BQ1RJT05fQVRUUklCVVRFKSk7Ci0gICAgc2V0U3R5bGUoU09BUENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFNPQVBDb25zdGFudHMuU1RZTEVfQVRUUklCVVRFKSk7Ci0gICAgcmVjb25jaWxlUmVmZXJlbmNlcyhmYWxzZSk7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gU09BUFBhY2thZ2UuZUlOU1RBTkNFLmdldFNPQVBPcGVyYXRpb25fU29hcEFjdGlvblVSSSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFNPQVBDb25zdGFudHMuU09BUF9BQ1RJT05fQVRUUklCVVRFLCBnZXRTb2FwQWN0aW9uVVJJKCkpOwotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFNPQVBQYWNrYWdlLmVJTlNUQU5DRS5nZXRTT0FQT3BlcmF0aW9uX1N0eWxlKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUsIGdldFN0eWxlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLk9QRVJBVElPTl9FTEVNRU5UX1RBRyk7Ci0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLX0gLy9TT0FQT3BlcmF0aW9uSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQUGFja2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL2ltcGwvU09BUFBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNmZiNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvaW1wbC9TT0FQUGFja2FnZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFja2FnZTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNPQVBQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFNPQVBQYWNrYWdlCi17Ci0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEJpbmRpbmdFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEJvZHlFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEhlYWRlckJhc2VFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHNvYXBPcGVyYXRpb25FQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEFkZHJlc3NFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3Mgc29hcEhlYWRlckZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHNvYXBIZWFkZXJFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaXNvYXBCaW5kaW5nRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlzb2FwQWRkcmVzc0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpc29hcEJvZHlFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaXNvYXBGYXVsdEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpc29hcE9wZXJhdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpc29hcEhlYWRlckZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlzb2FwSGVhZGVyRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRURhdGFUeXBlIGlTdHJpbmdFRGF0YVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0gICAqIHBhY2thZ2UgVVJJIHZhbHVlLgotICAgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0gICAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0gICAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0gICAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlI2VOU19VUkkKLSAgICogQHNlZSAjaW5pdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgU09BUFBhY2thZ2VJbXBsKCkKLSAgewotICAgIHN1cGVyKGVOU19VUkksIFNPQVBGYWN0b3J5LmVJTlNUQU5DRSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCi0gICAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCi0gICAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsCi0gICAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcwotICAgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCi0gICAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuCi0gICAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKLSAgICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCi0gICAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoKLSAgICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKLSAgICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KLSAgICogdGhvc2Ugb2YgYW5vdGhlci4KLSAgICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQotICAgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNlTlNfVVJJCi0gICAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0gICAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNPQVBQYWNrYWdlIGluaXQoKQotICB7Ci0gICAgaWYgKGlzSW5pdGVkKQotICAgICAgcmV0dXJuIChTT0FQUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTT0FQUGFja2FnZS5lTlNfVVJJKTsKLQotICAgIC8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKLSAgICBTT0FQUGFja2FnZUltcGwgdGhlU09BUFBhY2thZ2UgPSAoU09BUFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIFNPQVBQYWNrYWdlSW1wbAotICAgICAgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBTT0FQUGFja2FnZUltcGwoKSk7Ci0KLSAgICBpc0luaXRlZCA9IHRydWU7Ci0KLSAgICAvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKLSAgICBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7Ci0gICAgWFNEUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7Ci0KLSAgICAvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cwotICAgIHRoZVNPQVBQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQotICAgIHRoZVNPQVBQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotICAgIC8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKLSAgICB0aGVTT0FQUGFja2FnZS5mcmVlemUoKTsKLQotICAgIHJldHVybiB0aGVTT0FQUGFja2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTT0FQQmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gc29hcEJpbmRpbmdFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBCaW5kaW5nX1RyYW5zcG9ydFVSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEJpbmRpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEJpbmRpbmdfU3R5bGUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBCaW5kaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEJvZHkoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBCb2R5RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQQm9keV9Vc2UoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBCb2R5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBCb2R5X05hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEJvZHlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEJvZHlfRUVuY29kaW5nU3R5bGVzKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwQm9keUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRTT0FQQm9keV9FUGFydHMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXNvYXBCb2R5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEhlYWRlckJhc2UoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBIZWFkZXJCYXNlRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQSGVhZGVyQmFzZV9Vc2UoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBIZWFkZXJCYXNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBIZWFkZXJCYXNlX05hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEhlYWRlckJhc2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEhlYWRlckJhc2VfRUVuY29kaW5nU3R5bGVzKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwSGVhZGVyQmFzZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwSGVhZGVyQmFzZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQSGVhZGVyQmFzZV9QYXJ0KCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwSGVhZGVyQmFzZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRTT0FQSGVhZGVyQmFzZV9FTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2Upc29hcEhlYWRlckJhc2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0U09BUEhlYWRlckJhc2VfRVBhcnQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXNvYXBIZWFkZXJCYXNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEZhdWx0KCkKLSAgewotICAgIHJldHVybiBzb2FwRmF1bHRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9Vc2UoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBGYXVsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQRmF1bHRfTmFtZXNwYWNlVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwRmF1bHRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEZhdWx0X0VFbmNvZGluZ1N0eWxlcygpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcEZhdWx0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNPQVBGYXVsdF9OYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlzb2FwRmF1bHRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBzb2FwT3BlcmF0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTT0FQT3BlcmF0aW9uX1NvYXBBY3Rpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBPcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUE9wZXJhdGlvbl9TdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpc29hcE9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFNPQVBBZGRyZXNzKCkKLSAgewotICAgIHJldHVybiBzb2FwQWRkcmVzc0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U09BUEFkZHJlc3NfTG9jYXRpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNvYXBBZGRyZXNzRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAgewotICAgIHJldHVybiBzb2FwSGVhZGVyRmF1bHRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0U09BUEhlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gc29hcEhlYWRlckVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0U09BUEhlYWRlcl9IZWFkZXJGYXVsdHMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXNvYXBIZWFkZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU09BUEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGlzb2FwQmluZGluZ0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU09BUEFkZHJlc3MoKQotICB7Ci0gICAgcmV0dXJuIGlzb2FwQWRkcmVzc0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU09BUEJvZHkoKQotICB7Ci0gICAgcmV0dXJuIGlzb2FwQm9keUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU09BUEZhdWx0KCkKLSAgewotICAgIHJldHVybiBpc29hcEZhdWx0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBpc29hcE9wZXJhdGlvbkVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJU09BUEhlYWRlckZhdWx0KCkKLSAgewotICAgIHJldHVybiBpc29hcEhlYWRlckZhdWx0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElTT0FQSGVhZGVyKCkKLSAgewotICAgIHJldHVybiBpc29hcEhlYWRlckVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVEYXRhVHlwZSBnZXRJU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBpU3RyaW5nRURhdGFUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU09BUEZhY3RvcnkgZ2V0U09BUEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIChTT0FQRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCi0gICAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0gIHsKLSAgICBpZiAoaXNDcmVhdGVkKQotICAgICAgcmV0dXJuOwotICAgIGlzQ3JlYXRlZCA9IHRydWU7Ci0KLSAgICAvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLSAgICBzb2FwQmluZGluZ0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX0JJTkRJTkcpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEJpbmRpbmdFQ2xhc3MsIFNPQVBfQklORElOR19fVFJBTlNQT1JUX1VSSSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwQmluZGluZ0VDbGFzcywgU09BUF9CSU5ESU5HX19TVFlMRSk7Ci0KLSAgICBzb2FwQm9keUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX0JPRFkpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEJvZHlFQ2xhc3MsIFNPQVBfQk9EWV9fVVNFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBCb2R5RUNsYXNzLCBTT0FQX0JPRFlfX05BTUVTUEFDRV9VUkkpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEJvZHlFQ2xhc3MsIFNPQVBfQk9EWV9fRUVOQ09ESU5HX1NUWUxFUyk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShzb2FwQm9keUVDbGFzcywgU09BUF9CT0RZX19FUEFSVFMpOwotCi0gICAgc29hcEhlYWRlckJhc2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU09BUF9IRUFERVJfQkFTRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwSGVhZGVyQmFzZUVDbGFzcywgU09BUF9IRUFERVJfQkFTRV9fVVNFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19OQU1FU1BBQ0VfVVJJKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19FRU5DT0RJTkdfU1RZTEVTKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19NRVNTQUdFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19QQVJUKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBTT0FQX0hFQURFUl9CQVNFX19FTUVTU0FHRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShzb2FwSGVhZGVyQmFzZUVDbGFzcywgU09BUF9IRUFERVJfQkFTRV9fRVBBUlQpOwotCi0gICAgc29hcEZhdWx0RUNsYXNzID0gY3JlYXRlRUNsYXNzKFNPQVBfRkFVTFQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEZhdWx0RUNsYXNzLCBTT0FQX0ZBVUxUX19VU0UpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEZhdWx0RUNsYXNzLCBTT0FQX0ZBVUxUX19OQU1FU1BBQ0VfVVJJKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBGYXVsdEVDbGFzcywgU09BUF9GQVVMVF9fRUVOQ09ESU5HX1NUWUxFUyk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwRmF1bHRFQ2xhc3MsIFNPQVBfRkFVTFRfX05BTUUpOwotCi0gICAgc29hcE9wZXJhdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX09QRVJBVElPTik7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShzb2FwT3BlcmF0aW9uRUNsYXNzLCBTT0FQX09QRVJBVElPTl9fU09BUF9BQ1RJT05fVVJJKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNvYXBPcGVyYXRpb25FQ2xhc3MsIFNPQVBfT1BFUkFUSU9OX19TVFlMRSk7Ci0KLSAgICBzb2FwQWRkcmVzc0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX0FERFJFU1MpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoc29hcEFkZHJlc3NFQ2xhc3MsIFNPQVBfQUREUkVTU19fTE9DQVRJT05fVVJJKTsKLQotICAgIHNvYXBIZWFkZXJGYXVsdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTT0FQX0hFQURFUl9GQVVMVCk7Ci0KLSAgICBzb2FwSGVhZGVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNPQVBfSEVBREVSKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKHNvYXBIZWFkZXJFQ2xhc3MsIFNPQVBfSEVBREVSX19IRUFERVJfRkFVTFRTKTsKLQotICAgIGlzb2FwQmluZGluZ0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJU09BUF9CSU5ESU5HKTsKLQotICAgIGlzb2FwQWRkcmVzc0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJU09BUF9BRERSRVNTKTsKLQotICAgIGlzb2FwQm9keUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJU09BUF9CT0RZKTsKLQotICAgIGlzb2FwRmF1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVNPQVBfRkFVTFQpOwotCi0gICAgaXNvYXBPcGVyYXRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVNPQVBfT1BFUkFUSU9OKTsKLQotICAgIGlzb2FwSGVhZGVyRmF1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVNPQVBfSEVBREVSX0ZBVUxUKTsKLQotICAgIGlzb2FwSGVhZGVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKElTT0FQX0hFQURFUik7Ci0KLSAgICAvLyBDcmVhdGUgZGF0YSB0eXBlcwotICAgIGlTdHJpbmdFRGF0YVR5cGUgPSBjcmVhdGVFRGF0YVR5cGUoSVNUUklORyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCi0gICAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLSAgewotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgcmV0dXJuOwotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCi0gICAgc2V0TmFtZShlTkFNRSk7Ci0gICAgc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7Ci0gICAgc2V0TnNVUkkoZU5TX1VSSSk7Ci0KLSAgICAvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCi0gICAgV1NETFBhY2thZ2UgdGhlV1NETFBhY2thZ2UgPSAoV1NETFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoV1NETFBhY2thZ2UuZU5TX1VSSSk7Ci0KLSAgICAvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0gICAgc29hcEJpbmRpbmdFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgc29hcEJpbmRpbmdFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJU09BUEJpbmRpbmcoKSk7Ci0gICAgc29hcEJvZHlFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgc29hcEJvZHlFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJU09BUEJvZHkoKSk7Ci0gICAgc29hcEhlYWRlckJhc2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgc29hcEZhdWx0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVdTRExQYWNrYWdlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIHNvYXBGYXVsdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElTT0FQRmF1bHQoKSk7Ci0gICAgc29hcE9wZXJhdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVXU0RMUGFja2FnZS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBzb2FwT3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SVNPQVBPcGVyYXRpb24oKSk7Ci0gICAgc29hcEFkZHJlc3NFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlV1NETFBhY2thZ2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgc29hcEFkZHJlc3NFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJU09BUEFkZHJlc3MoKSk7Ci0gICAgc29hcEhlYWRlckZhdWx0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U09BUEhlYWRlckJhc2UoKSk7Ci0gICAgc29hcEhlYWRlckZhdWx0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SVNPQVBIZWFkZXJGYXVsdCgpKTsKLSAgICBzb2FwSGVhZGVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U09BUEhlYWRlckJhc2UoKSk7Ci0gICAgc29hcEhlYWRlckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElTT0FQSGVhZGVyKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKLSAgICBpbml0RUNsYXNzKHNvYXBCaW5kaW5nRUNsYXNzLCBTT0FQQmluZGluZy5jbGFzcywgIlNPQVBCaW5kaW5nIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQQmluZGluZ19UcmFuc3BvcnRVUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAidHJhbnNwb3J0VVJJIiwgbnVsbCwgMCwgMSwgU09BUEJpbmRpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBCaW5kaW5nX1N0eWxlKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInN0eWxlIiwgbnVsbCwgMCwgMSwgU09BUEJpbmRpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Moc29hcEJvZHlFQ2xhc3MsIFNPQVBCb2R5LmNsYXNzLCAiU09BUEJvZHkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBCb2R5X1VzZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJ1c2UiLCBudWxsLCAwLCAxLCBTT0FQQm9keS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEJvZHlfTmFtZXNwYWNlVVJJKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWVzcGFjZVVSSSIsIG51bGwsIDAsIDEsIFNPQVBCb2R5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQQm9keV9FRW5jb2RpbmdTdHlsZXMoKSwKLSAgICAgIHRoaXMuZ2V0SVN0cmluZygpLAotICAgICAgImVFbmNvZGluZ1N0eWxlcyIsIG51bGwsIDAsIC0xLCBTT0FQQm9keS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0U09BUEJvZHlfRVBhcnRzKCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRQYXJ0KCksCi0gICAgICBudWxsLAotICAgICAgImVQYXJ0cyIsIG51bGwsIDAsIC0xLCBTT0FQQm9keS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhzb2FwSGVhZGVyQmFzZUVDbGFzcywgU09BUEhlYWRlckJhc2UuY2xhc3MsICJTT0FQSGVhZGVyQmFzZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEhlYWRlckJhc2VfVXNlKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInVzZSIsIG51bGwsIDAsIDEsIFNPQVBIZWFkZXJCYXNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQSGVhZGVyQmFzZV9OYW1lc3BhY2VVUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZXNwYWNlVVJJIiwgbnVsbCwgMCwgMSwgU09BUEhlYWRlckJhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBIZWFkZXJCYXNlX0VFbmNvZGluZ1N0eWxlcygpLAotICAgICAgdGhpcy5nZXRJU3RyaW5nKCksCi0gICAgICAiZUVuY29kaW5nU3R5bGVzIiwgbnVsbCwgMCwgLTEsIFNPQVBIZWFkZXJCYXNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQSGVhZGVyQmFzZV9NZXNzYWdlKCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRRTmFtZSgpLAotICAgICAgIm1lc3NhZ2UiLCBudWxsLCAwLCAxLCBTT0FQSGVhZGVyQmFzZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEhlYWRlckJhc2VfUGFydCgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJwYXJ0IiwgbnVsbCwgMCwgMSwgU09BUEhlYWRlckJhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFNPQVBIZWFkZXJCYXNlX0VNZXNzYWdlKCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRNZXNzYWdlKCksCi0gICAgICBudWxsLAotICAgICAgImVNZXNzYWdlIiwgbnVsbCwgMSwgMSwgU09BUEhlYWRlckJhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFNPQVBIZWFkZXJCYXNlX0VQYXJ0KCksCi0gICAgICB0aGVXU0RMUGFja2FnZS5nZXRQYXJ0KCksCi0gICAgICBudWxsLAotICAgICAgImVQYXJ0IiwgbnVsbCwgMSwgMSwgU09BUEhlYWRlckJhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIEVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCB0aGVXU0RMUGFja2FnZS5nZXRJTGlzdCgpLCAiZ2V0RW5jb2RpbmdTdHlsZXMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKHNvYXBIZWFkZXJCYXNlRUNsYXNzLCBudWxsLCAic2V0RW5jb2RpbmdTdHlsZXMiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoZVdTRExQYWNrYWdlLmdldElMaXN0KCksICJlbmNvZGluZ1N0eWxlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKHNvYXBGYXVsdEVDbGFzcywgU09BUEZhdWx0LmNsYXNzLCAiU09BUEZhdWx0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRTT0FQRmF1bHRfVXNlKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInVzZSIsIG51bGwsIDAsIDEsIFNPQVBGYXVsdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUEZhdWx0X05hbWVzcGFjZVVSSSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lc3BhY2VVUkkiLCBudWxsLCAwLCAxLCBTT0FQRmF1bHQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBGYXVsdF9FRW5jb2RpbmdTdHlsZXMoKSwKLSAgICAgIHRoaXMuZ2V0SVN0cmluZygpLAotICAgICAgImVFbmNvZGluZ1N0eWxlcyIsIG51bGwsIDAsIC0xLCBTT0FQRmF1bHQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBGYXVsdF9OYW1lKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWUiLCBudWxsLCAwLCAxLCBTT0FQRmF1bHQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Moc29hcE9wZXJhdGlvbkVDbGFzcywgU09BUE9wZXJhdGlvbi5jbGFzcywgIlNPQVBPcGVyYXRpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBPcGVyYXRpb25fU29hcEFjdGlvblVSSSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJzb2FwQWN0aW9uVVJJIiwgbnVsbCwgMCwgMSwgU09BUE9wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0U09BUE9wZXJhdGlvbl9TdHlsZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJzdHlsZSIsIG51bGwsIDAsIDEsIFNPQVBPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Moc29hcEFkZHJlc3NFQ2xhc3MsIFNPQVBBZGRyZXNzLmNsYXNzLCAiU09BUEFkZHJlc3MiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNPQVBBZGRyZXNzX0xvY2F0aW9uVVJJKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgImxvY2F0aW9uVVJJIiwgbnVsbCwgMCwgMSwgU09BUEFkZHJlc3MuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Moc29hcEhlYWRlckZhdWx0RUNsYXNzLCBTT0FQSGVhZGVyRmF1bHQuY2xhc3MsICJTT0FQSGVhZGVyRmF1bHQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Moc29hcEhlYWRlckVDbGFzcywgU09BUEhlYWRlci5jbGFzcywgIlNPQVBIZWFkZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFNPQVBIZWFkZXJfSGVhZGVyRmF1bHRzKCksCi0gICAgICB0aGlzLmdldFNPQVBIZWFkZXJGYXVsdCgpLAotICAgICAgbnVsbCwKLSAgICAgICJoZWFkZXJGYXVsdHMiLCBudWxsLCAwLCAtMSwgU09BUEhlYWRlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlzb2FwQmluZGluZ0VDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nLmNsYXNzLAotICAgICAgIklTT0FQQmluZGluZyIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaXNvYXBBZGRyZXNzRUNsYXNzLAotICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3MuY2xhc3MsCi0gICAgICAiSVNPQVBBZGRyZXNzIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpc29hcEJvZHlFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keS5jbGFzcywKLSAgICAgICJJU09BUEJvZHkiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlzb2FwQm9keUVDbGFzcywgdGhlV1NETFBhY2thZ2UuZ2V0SUxpc3QoKSwgImdldEVuY29kaW5nU3R5bGVzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpc29hcEJvZHlFQ2xhc3MsIG51bGwsICJzZXRFbmNvZGluZ1N0eWxlcyIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhlV1NETFBhY2thZ2UuZ2V0SUxpc3QoKSwgImVuY29kaW5nU3R5bGVzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpc29hcEJvZHlFQ2xhc3MsIHRoZVdTRExQYWNrYWdlLmdldElMaXN0KCksICJnZXRQYXJ0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaXNvYXBCb2R5RUNsYXNzLCBudWxsLCAic2V0UGFydHMiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoZVdTRExQYWNrYWdlLmdldElMaXN0KCksICJwYXJ0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaXNvYXBGYXVsdEVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdC5jbGFzcywKLSAgICAgICJJU09BUEZhdWx0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpc29hcE9wZXJhdGlvbkVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24uY2xhc3MsCi0gICAgICAiSVNPQVBPcGVyYXRpb24iLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlzb2FwSGVhZGVyRmF1bHRFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQuY2xhc3MsCi0gICAgICAiSVNPQVBIZWFkZXJGYXVsdCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgaXNvYXBIZWFkZXJFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyLmNsYXNzLAotICAgICAgIklTT0FQSGVhZGVyIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpc29hcEhlYWRlckVDbGFzcywgdGhlV1NETFBhY2thZ2UuZ2V0SUxpc3QoKSwgImdldFNPQVBIZWFkZXJGYXVsdHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlzb2FwSGVhZGVyRUNsYXNzLCBudWxsLCAiYWRkU09BUEhlYWRlckZhdWx0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElTT0FQSGVhZGVyRmF1bHQoKSwgInNvYXBIZWFkZXJGYXVsdCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKLSAgICBpbml0RURhdGFUeXBlKGlTdHJpbmdFRGF0YVR5cGUsIFN0cmluZy5jbGFzcywgIklTdHJpbmciLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBDcmVhdGUgcmVzb3VyY2UKLSAgICBjcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKLSAgfQotfSAvL1NPQVBQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQQWRhcHRlckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL3V0aWwvU09BUEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YWI4NjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLio7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFNPQVBQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBBZGFwdGVyRmFjdG9yeSgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gU09BUFBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkKLSAgewotICAgIGlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkKLSAgICB7Ci0gICAgICByZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgc3dpdGNoIHRoZSBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBTT0FQU3dpdGNoIG1vZGVsU3dpdGNoID0gbmV3IFNPQVBTd2l0Y2goKQotICAgIHsKLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBCaW5kaW5nKFNPQVBCaW5kaW5nIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVNPQVBCaW5kaW5nQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQQm9keShTT0FQQm9keSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVTT0FQQm9keUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlU09BUEhlYWRlckJhc2UoU09BUEhlYWRlckJhc2Ugb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlU09BUEhlYWRlckJhc2VBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBGYXVsdChTT0FQRmF1bHQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlU09BUEZhdWx0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQT3BlcmF0aW9uKFNPQVBPcGVyYXRpb24gb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlU09BUE9wZXJhdGlvbkFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlU09BUEFkZHJlc3MoU09BUEFkZHJlc3Mgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlU09BUEFkZHJlc3NBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBIZWFkZXJGYXVsdChTT0FQSGVhZGVyRmF1bHQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlU09BUEhlYWRlckZhdWx0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQSGVhZGVyKFNPQVBIZWFkZXIgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlU09BUEhlYWRlckFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBCaW5kaW5nKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlTT0FQQmluZGluZ0FkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBBZGRyZXNzKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlTT0FQQWRkcmVzc0FkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBCb2R5KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlTT0FQQm9keUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBGYXVsdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVNPQVBGYXVsdEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBPcGVyYXRpb24oamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJU09BUE9wZXJhdGlvbkFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBIZWFkZXJGYXVsdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVNPQVBIZWFkZXJGYXVsdEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBIZWFkZXIoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJU09BUEhlYWRlckFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlV1NETEVsZW1lbnQoV1NETEVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlV1NETEVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLSAgICAgIH0KLSAgICB9OwotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgotICAgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpCi0gIHsKLSAgICByZXR1cm4gKEFkYXB0ZXIpbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZyA8ZW0+QmluZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmcKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlU09BUEJpbmRpbmdBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5IDxlbT5Cb2R5PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVTT0FQQm9keUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckJhc2UgPGVtPkhlYWRlciBCYXNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyQmFzZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVTT0FQSGVhZGVyQmFzZUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0IDxlbT5GYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbiA8ZW0+T3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNPQVBPcGVyYXRpb25BZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzIDxlbT5BZGRyZXNzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzcwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVTT0FQQWRkcmVzc0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlckZhdWx0IDxlbT5IZWFkZXIgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJGYXVsdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVTT0FQSGVhZGVyRmF1bHRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXIgPGVtPkhlYWRlcjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVTT0FQSGVhZGVyQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nIDxlbT5JU09BUCBCaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlTT0FQQmluZGluZ0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcyA8ZW0+SVNPQVAgQWRkcmVzczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzcwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJU09BUEFkZHJlc3NBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkgPGVtPklTT0FQIEJvZHk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNPQVBCb2R5QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCA8ZW0+SVNPQVAgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlTT0FQRmF1bHRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiA8ZW0+SVNPQVAgT3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNPQVBPcGVyYXRpb25BZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0IDxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlTT0FQSGVhZGVyRmF1bHRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciA8ZW0+SVNPQVAgSGVhZGVyPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVNPQVBIZWFkZXJBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlV1NETEVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0gLy9TT0FQQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL3V0aWwvU09BUENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NmFhNTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIFNPQVBDb25zdGFudHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUREUkVTU19FTEVNRU5UX1RBRyA9ICJhZGRyZXNzIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkdfRUxFTUVOVF9UQUcgPSAiYmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCT0RZX0VMRU1FTlRfVEFHID0gImJvZHkiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkFVTFRfRUxFTUVOVF9UQUcgPSAiZmF1bHQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0VMRU1FTlRfVEFHID0gImhlYWRlciI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRkFVTFRfRUxFTUVOVF9UQUcgPSAiaGVhZGVyZmF1bHQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUSU9OX0VMRU1FTlRfVEFHID0gIm9wZXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX05BTUVTUEFDRV9VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0FDVElPTl9BVFRSSUJVVEUgPSAic29hcEFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9BVFRSSUJVVEUgPSAic3R5bGUiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fQVRUUklCVVRFID0gImxvY2F0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQU5TUE9SVF9BVFRSSUJVVEUgPSAidHJhbnNwb3J0IjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9BVFRSSUJVVEUgPSAidXNlIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9BVFRSSUJVVEUgPSAibmFtZXNwYWNlIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VUklfQVRUUklCVVRFID0gIm5hbWVzcGFjZVVSSSI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FUVFJJQlVURSA9ICJuYW1lIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVOQ09ESU5HX1NUWUxFX0FUVFJJQlVURSA9ICJlbmNvZGluZ1N0eWxlIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfQVRUUklCVVRFID0gIm1lc3NhZ2UiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSVF9BVFRSSUJVVEUgPSAicGFydCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUU19BVFRSSUJVVEUgPSAicGFydHMiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgPyBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA6IG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL2ludGVybmFsL3V0aWwvU09BUEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNDJiMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTsKLQotCi1wdWJsaWMgY2xhc3MgU09BUEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBpbXBsZW1lbnRzIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeQotewotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIGlmIChTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICB7Ci0gICAgICBpZiAoU09BUENvbnN0YW50cy5BRERSRVNTX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBBZGRyZXNzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChTT0FQQ29uc3RhbnRzLkJJTkRJTkdfRUxFTUVOVF9UQUcuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEJpbmRpbmcoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFNPQVBDb25zdGFudHMuQk9EWV9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQm9keSgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU09BUENvbnN0YW50cy5GQVVMVF9FTEVNRU5UX1RBRy5lcXVhbHMobG9jYWxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQRmF1bHQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFNPQVBDb25zdGFudHMuT1BFUkFUSU9OX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBPcGVyYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFNPQVBDb25zdGFudHMuSEVBREVSX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBIZWFkZXIoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFNPQVBDb25zdGFudHMuSEVBREVSX0ZBVUxUX0VMRU1FTlRfVEFHLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiVW5oYW5kbGVkIGxvY2FsTmFtZTogIiArIGxvY2FsTmFtZSk7Ci0gICAgICAgIHJldHVybiBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiVW5oYW5kbGVkIG5hbWVzcGFjZTogIiArIG5hbWVzcGFjZSk7Ci0gICAgICByZXR1cm4gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvaW50ZXJuYWwvdXRpbC9TT0FQU3dpdGNoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU0ODc0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9pbnRlcm5hbC91dGlsL1NPQVBTd2l0Y2guamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuKjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgotICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaCBkb1N3aXRjaChvYmplY3QpfQotICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAotICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAotICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQUGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgU09BUFN3aXRjaAotewotICAvKioKLSAgICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFNPQVBQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNPQVBTd2l0Y2goKQotICB7Ci0gICAgaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vZGVsUGFja2FnZSA9IFNPQVBQYWNrYWdlLmVJTlNUQU5DRTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkKLSAgewotICAgIHJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKQotICAgIHsKLSAgICAgIHJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgTGlzdCBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOwotICAgICAgcmV0dXJuIGVTdXBlclR5cGVzLmlzRW1wdHkoKSA/IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDogZG9Td2l0Y2goKEVDbGFzcyllU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KQotICB7Ci0gICAgc3dpdGNoIChjbGFzc2lmaWVySUQpCi0gICAgewotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0JJTkRJTkc6Ci0gICAgICB7Ci0gICAgICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gKFNPQVBCaW5kaW5nKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlU09BUEJpbmRpbmcoc29hcEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCaW5kaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJU09BUEJpbmRpbmcoc29hcEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHNvYXBCaW5kaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJpbmRpbmcpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfQk9EWToKLSAgICAgIHsKLSAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSAoU09BUEJvZHkpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VTT0FQQm9keShzb2FwQm9keSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJvZHkpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlTT0FQQm9keShzb2FwQm9keSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEJvZHkpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgU09BUFBhY2thZ2UuU09BUF9IRUFERVJfQkFTRToKLSAgICAgIHsKLSAgICAgICAgU09BUEhlYWRlckJhc2Ugc29hcEhlYWRlckJhc2UgPSAoU09BUEhlYWRlckJhc2UpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VTT0FQSGVhZGVyQmFzZShzb2FwSGVhZGVyQmFzZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEhlYWRlckJhc2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHNvYXBIZWFkZXJCYXNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEhlYWRlckJhc2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfRkFVTFQ6Ci0gICAgICB7Ci0gICAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSAoU09BUEZhdWx0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlU09BUEZhdWx0KHNvYXBGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJU09BUEZhdWx0KHNvYXBGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX09QRVJBVElPTjoKLSAgICAgIHsKLSAgICAgICAgU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uID0gKFNPQVBPcGVyYXRpb24pdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VTT0FQT3BlcmF0aW9uKHNvYXBPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlTT0FQT3BlcmF0aW9uKHNvYXBPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHNvYXBPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwT3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0FERFJFU1M6Ci0gICAgICB7Ci0gICAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlU09BUEFkZHJlc3Moc29hcEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBBZGRyZXNzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJU09BUEFkZHJlc3Moc29hcEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHNvYXBBZGRyZXNzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEFkZHJlc3MpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFNPQVBQYWNrYWdlLlNPQVBfSEVBREVSX0ZBVUxUOgotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0ID0gKFNPQVBIZWFkZXJGYXVsdCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVNPQVBIZWFkZXJGYXVsdChzb2FwSGVhZGVyRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVNPQVBIZWFkZXJCYXNlKHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVNPQVBIZWFkZXJGYXVsdChzb2FwSGVhZGVyRmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoc29hcEhlYWRlckZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEhlYWRlckZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBTT0FQUGFja2FnZS5TT0FQX0hFQURFUjoKLSAgICAgIHsKLSAgICAgICAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gKFNPQVBIZWFkZXIpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VTT0FQSGVhZGVyKHNvYXBIZWFkZXIpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVNPQVBIZWFkZXJCYXNlKHNvYXBIZWFkZXIpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlTT0FQSGVhZGVyKHNvYXBIZWFkZXIpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBIZWFkZXIpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHNvYXBIZWFkZXIpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwSGVhZGVyKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmc8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBCaW5kaW5nKFNPQVBCaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Cb2R5PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJvZHk8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQQm9keShTT0FQQm9keSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SGVhZGVyIEJhc2U8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SGVhZGVyIEJhc2U8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQSGVhZGVyQmFzZShTT0FQSGVhZGVyQmFzZSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQRmF1bHQoU09BUEZhdWx0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlU09BUE9wZXJhdGlvbihTT0FQT3BlcmF0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BZGRyZXNzPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkFkZHJlc3M8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SGVhZGVyIEZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkhlYWRlciBGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVNPQVBIZWFkZXJGYXVsdChTT0FQSGVhZGVyRmF1bHQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkhlYWRlcjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5IZWFkZXI8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VTT0FQSGVhZGVyKFNPQVBIZWFkZXIgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEJpbmRpbmc8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNPQVAgQmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlTT0FQQmluZGluZyhqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZyBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNPQVAgQWRkcmVzczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBBZGRyZXNzPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBBZGRyZXNzKGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBCb2R5PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEJvZHk8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEJvZHkoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHkgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEZhdWx0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBGYXVsdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUE9wZXJhdGlvbihqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBIZWFkZXIgRmF1bHQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVNPQVAgSGVhZGVyIEZhdWx0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVNPQVBIZWFkZXJGYXVsdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklTT0FQIEhlYWRlcjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU09BUCBIZWFkZXI8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJU09BUEhlYWRlcihqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VXU0RMRWxlbWVudChXU0RMRWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQob3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfSAvL1NPQVBTd2l0Y2gKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvYmluZGluZy9zb2FwL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1NDM0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uLy9hcGlzdHlsZXMuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08dGl0bGU+V1NETCBNb2RlbCBTT0FQIEJpbmRpbmcgRXh0ZW5zaW9uIEFQSSBPdmVydmlldzwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0JCTwvcD4KLTx0YWJsZSB3aWR0aD0iNTAwIj4KLTx0cj4KLTx0ZD4KLTxwPlRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPgotPC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9iaW5kaW5nL3NvYXAvcGFja2FnZS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJjYjkyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL2JpbmRpbmcvc29hcC9wYWNrYWdlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08aHRtbD4KLQk8aGVhZD4KLQkJPG1ldGEKLQkJCW5hbWU9InJvb3QiCi0JCi0JCQljb250ZW50PSIuLi8uLi8uLi8uLi8uLi8uLi8iIC8+Ci0JCTx0aXRsZT5XU0RMIE1vZGVsIFNPQVAgQmluZGluZyBFeHRlbnNpb24gQVBJIE92ZXJ2aWV3PC90aXRsZT4KLQk8L2hlYWQ+Ci0KLQk8Ym9keT4KLQkJPGFic3RyYWN0PgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0JCTwvYWJzdHJhY3Q+Ci0JCTxwPlRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPiAKLQk8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjVlMjI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBiaW5kaW5nIGVsZW1lbnQuIEEgYmluZGluZyBkZWZpbmVzIG1lc3NhZ2UgZm9ybWF0IGFuZCBwcm90b2NvbCBkZXRhaWxzIGZvciBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0VHlwZS4gVGhlcmUgbWF5IGJlIGFueSBudW1iZXIgb2YgYmluZGluZ3MgZm9yIGEgZ2l2ZW4gcG9ydFR5cGUuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRFUG9ydFR5cGUgPGVtPkVQb3J0IFR5cGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjZ2V0RUJpbmRpbmdPcGVyYXRpb25zIDxlbT5FQmluZGluZyBPcGVyYXRpb25zPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nKCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJpbmRpbmcgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5CaW5kaW5nCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0UU5hbWUoUU5hbWUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ19RTmFtZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldFFOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRRTmFtZShRTmFtZSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVbmRlZmluZWQoYm9vbGVhbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nX1VuZGVmaW5lZCgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBib29sZWFuIGlzVW5kZWZpbmVkKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFVuZGVmaW5lZChib29sZWFuIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVBvcnQgVHlwZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBvcnQgVHlwZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVBvcnQgVHlwZTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVQb3J0VHlwZShQb3J0VHlwZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nX0VQb3J0VHlwZSgpCi0gICAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUG9ydFR5cGUgZ2V0RVBvcnRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjZ2V0RVBvcnRUeXBlIDxlbT5FUG9ydCBUeXBlPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FUG9ydCBUeXBlPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RVBvcnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFUG9ydFR5cGUoUG9ydFR5cGUgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FQmluZGluZyBPcGVyYXRpb25zPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb259LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZyBPcGVyYXRpb25zPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdfRUJpbmRpbmdPcGVyYXRpb25zKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFQmluZGluZ09wZXJhdGlvbnMoKTsKLQotfSAvLyBCaW5kaW5nCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nRmF1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU1NmI1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdGYXVsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIEZhdWx0PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBmYXVsdCBlbGVtZW50IHdpdGhpbiBhIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nLiBBIGZhdWx0IGVsZW1lbnQgd2l0aGluIGFuIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nIHNwZWNpZmllcyBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgZmF1bHQgd2l0aCB0aGUgc2FtZSBuYW1lLiAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0I2dldEVGYXVsdCA8ZW0+RUZhdWx0PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nRmF1bHQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQmluZGluZ0ZhdWx0IGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ0ZhdWx0X05hbWUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVGYXVsdDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUZhdWx0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FRmF1bHQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFRmF1bHQoRmF1bHQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ0ZhdWx0X0VGYXVsdCgpCi0gICAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRmF1bHQgZ2V0RUZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCNnZXRFRmF1bHQgPGVtPkVGYXVsdDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RUZhdWx0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RUZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFRmF1bHQoRmF1bHQgdmFsdWUpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIGdldEVGYXVsdCgpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLSAgICogQHNlZSAjZ2V0RUZhdWx0KCkKLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUZhdWx0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQGlnbm9yZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgamF2YXgud3NkbC5GYXVsdCBnZXRGYXVsdCgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVGYXVsdChGYXVsdCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotICAgKiBAc2VlICNzZXRFRmF1bHQoRmF1bHQpCi0gICAqIEBwYXJhbSBmYXVsdCB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVGYXVsdDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEZhdWx0KGphdmF4LndzZGwuRmF1bHQgZmF1bHQpOwotCi19IC8vIEJpbmRpbmdGYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvQmluZGluZ0lucHV0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjY2NkNjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nSW5wdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBJbnB1dDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgaW5wdXQgZWxlbWVudCB3aXRoaW4gYSBvcGVyYXRpb24gd2l0aGluIGEgYmluZGluZy4gQW4gaW5wdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnB1dCBvZiB0aGUgb3BlcmF0aW9uLiAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0I2dldEVJbnB1dCA8ZW0+RUlucHV0PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nSW5wdXQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQmluZGluZ0lucHV0IGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuQmluZGluZ0lucHV0Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ0lucHV0X05hbWUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUlucHV0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FSW5wdXQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFSW5wdXQoSW5wdXQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ0lucHV0X0VJbnB1dCgpCi0gICAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSW5wdXQgZ2V0RUlucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCNnZXRFSW5wdXQgPGVtPkVJbnB1dDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RUlucHV0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RUlucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFSW5wdXQoSW5wdXQgdmFsdWUpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIGdldEVJbnB1dCgpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLSAgICogQHNlZSAjZ2V0RUlucHV0KCkKLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RUlucHV0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQGlnbm9yZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgamF2YXgud3NkbC5JbnB1dCBnZXRJbnB1dCgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIHNldEVJbnB1dChJbnB1dCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotICAgKiBAc2VlICNzZXRFSW5wdXQoSW5wdXQpCi0gICAqIEBwYXJhbSBpbnB1dCB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldElucHV0KGphdmF4LndzZGwuSW5wdXQgaW5wdXQpOwotCi19IC8vIEJpbmRpbmdJbnB1dApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMyM2I1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIE9wZXJhdGlvbjwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3BlcmF0aW9uIGVsZW1lbnQgd2l0aGluIGEgYmluZGluZy4gQW4gb3BlcmF0aW9uIGVsZW1lbnQgd2l0aGluIGEgYmluZGluZyBzcGVjaWZpZXMgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgd2l0aGluIHRoZSBiaW5kaW5nJ3MgcG9ydFR5cGUuIAotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFT3BlcmF0aW9uIDxlbT5FT3BlcmF0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nSW5wdXQgPGVtPkVCaW5kaW5nIElucHV0PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nT3V0cHV0IDxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RUJpbmRpbmdGYXVsdHMgPGVtPkVCaW5kaW5nIEZhdWx0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBCaW5kaW5nT3BlcmF0aW9uIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbgotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdPcGVyYXRpb25fTmFtZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVPcGVyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVPcGVyYXRpb248L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVPcGVyYXRpb248L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFT3BlcmF0aW9uKE9wZXJhdGlvbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nT3BlcmF0aW9uX0VPcGVyYXRpb24oKQotICAgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE9wZXJhdGlvbiBnZXRFT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RU9wZXJhdGlvbiA8ZW0+RU9wZXJhdGlvbjwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RU9wZXJhdGlvbjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVPcGVyYXRpb24oT3BlcmF0aW9uIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmcgSW5wdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVCaW5kaW5nIElucHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZyBJbnB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdJbnB1dCgpCi0gICAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgQmluZGluZ0lucHV0IGdldEVCaW5kaW5nSW5wdXQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ0lucHV0IDxlbT5FQmluZGluZyBJbnB1dDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFQmluZGluZ0lucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFQmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUJpbmRpbmcgT3V0cHV0PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFQmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdPdXRwdXQoKQotICAgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEJpbmRpbmdPdXRwdXQgZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ091dHB1dCA8ZW0+RUJpbmRpbmcgT3V0cHV0PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFQmluZGluZ091dHB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RUJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVCaW5kaW5nIEZhdWx0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nRmF1bHRzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVCaW5kaW5nRmF1bHRzKCk7Ci0KLX0gLy8gQmluZGluZ09wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9CaW5kaW5nT3V0cHV0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyNDVmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0JpbmRpbmdPdXRwdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBPdXRwdXQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIG91dHB1dCBlbGVtZW50IHdpdGhpbiBhIG9wZXJhdGlvbiB3aXRoaW4gYSBiaW5kaW5nLiBBbiBvdXRwdXQgZWxlbWVudCB3aXRoaW4gYW4gb3BlcmF0aW9uIHdpdGhpbiBhIGJpbmRpbmcgc3BlY2lmaWVzIGJpbmRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4gCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0I2dldEVPdXRwdXQgPGVtPkVPdXRwdXQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEJpbmRpbmdPdXRwdXQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQmluZGluZ091dHB1dCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRCaW5kaW5nT3V0cHV0X05hbWUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FT3V0cHV0PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FT3V0cHV0PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RU91dHB1dChPdXRwdXQpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0QmluZGluZ091dHB1dF9FT3V0cHV0KCkKLSAgICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBPdXRwdXQgZ2V0RU91dHB1dCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0I2dldEVPdXRwdXQgPGVtPkVPdXRwdXQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFT3V0cHV0KE91dHB1dCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgZ2V0RU91dHB1dCgpIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIEpXU0RMIEFQSS4KLSAgICogQHNlZSAjZ2V0RU91dHB1dCgpCi0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBqYXZheC53c2RsLk91dHB1dCBnZXRPdXRwdXQoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBtZXRob2QgaXMgc2FtZSBhcyBzZXRFT3V0cHV0KE91dHB1dCkgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgSldTREwgQVBJLgotICAgKiBAc2VlICNzZXRFT3V0cHV0KE91dHB1dCkKLSAgICogQHBhcmFtIG91dHB1dCB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRPdXRwdXQoamF2YXgud3NkbC5PdXRwdXQgb3V0cHV0KTsKLQotfSAvLyBCaW5kaW5nT3V0cHV0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0RlZmluaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDIzYzJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRGVmaW5pdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZWZpbml0aW9uPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50IGlzIHRoZSByb290IGVsZW1lbnQgb2YgYSBXU0RMIGRvY3VtZW50LgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0VGFyZ2V0TmFtZXNwYWNlIDxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RW5jb2RpbmcgPGVtPkVuY29kaW5nPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVJbXBvcnRzIDxlbT5FSW1wb3J0czwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFVHlwZXMgPGVtPkVUeXBlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFTWVzc2FnZXMgPGVtPkVNZXNzYWdlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFUG9ydFR5cGVzIDxlbT5FUG9ydCBUeXBlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFQmluZGluZ3MgPGVtPkVCaW5kaW5nczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFU2VydmljZXMgPGVtPkVTZXJ2aWNlczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFTmFtZXNwYWNlcyA8ZW0+RU5hbWVzcGFjZXM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb24oKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRGVmaW5pdGlvbiBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24KLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRhcmdldCBOYW1lc3BhY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRUYXJnZXROYW1lc3BhY2UoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fVGFyZ2V0TmFtZXNwYWNlKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2UoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRUYXJnZXROYW1lc3BhY2UgPGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRUYXJnZXROYW1lc3BhY2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFRhcmdldE5hbWVzcGFjZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TG9jYXRpb24oU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fTG9jYXRpb24oKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldExvY2F0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0UU5hbWUoUU5hbWUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9RTmFtZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldFFOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRRTmFtZShRTmFtZSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVuY29kaW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FbmNvZGluZzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RW5jb2Rpbmc8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRFbmNvZGluZyhTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9FbmNvZGluZygpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0RW5jb2RpbmcoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFbmNvZGluZyA8ZW0+RW5jb2Rpbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVuY29kaW5nPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0RW5jb2RpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVuY29kaW5nKFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNZXNzYWdlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlfS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVNZXNzYWdlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FTWVzc2FnZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9FTWVzc2FnZXMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVNZXNzYWdlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUG9ydCBUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZX0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FUG9ydCBUeXBlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUG9ydCBUeXBlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX0VQb3J0VHlwZXMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFUG9ydFR5cGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVCaW5kaW5nczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nfS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVCaW5kaW5nczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZ3M8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVCaW5kaW5ncygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FU2VydmljZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZX0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FU2VydmljZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVNlcnZpY2VzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fRVNlcnZpY2VzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRFU2VydmljZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU5hbWVzcGFjZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlfS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVOYW1lc3BhY2VzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVOYW1lc3BhY2VzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fRU5hbWVzcGFjZXMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RU5hbWVzcGFjZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVR5cGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FVHlwZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVUeXBlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVUeXBlcyhUeXBlcykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXREZWZpbml0aW9uX0VUeXBlcygpCi0gICAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgVHlwZXMgZ2V0RVR5cGVzKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RVR5cGVzIDxlbT5FVHlwZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVUeXBlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVUeXBlcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RVR5cGVzKFR5cGVzIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUltcG9ydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVJbXBvcnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVJbXBvcnRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldERlZmluaXRpb25fRUltcG9ydHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUltcG9ydHMoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogUmV0dXJucyBhIFczQyBET00gRG9jdW1lbnQgYnVpbHQgZnJvbSB0aGUgaW5wdXQgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiBXM0MgRE9NIERvY3VtZW50LgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRE9NRG9jdW1lbnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIERvY3VtZW50IGdldERvY3VtZW50KCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFNldHMgYSBXM0MgRE9NIERvY3VtZW50IHRvIGJlIHVzZWQgd2hlbiBidWlsZGluZyB1cCBhIERPTSBFbGVtZW50IHRyZWUgZm9yIHRoZSBXU0RMIG1vZGVsLgotICAgKiBAcGFyYW0gZG9jdW1lbnQgVzNDIERPTSBEb2N1bWVudC4KLSAgICogQGlnbm9yZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGRvY3VtZW50RGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkRPTURvY3VtZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldERvY3VtZW50KERvY3VtZW50IGRvY3VtZW50KTsKLQotfSAvLyBEZWZpbml0aW9uCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2liaWxpdHlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4N2I0MTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9FeHRlbnNpYmlsaXR5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LiBXU0RMIGFsbG93cyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHRlY2hub2xvZ3kgdW5kZXIgdmFyaW91cyBlbGVtZW50cyBkZWZpbmVkIGJ5IFdTREwuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQjaXNSZXF1aXJlZCA8ZW0+UmVxdWlyZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50I2dldEVsZW1lbnRUeXBlIDxlbT5FbGVtZW50IFR5cGU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuZHMgV1NETEVsZW1lbnQsIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlcXVpcmVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZXF1aXJlZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFJlcXVpcmVkKGJvb2xlYW4pCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRfUmVxdWlyZWQoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgYm9vbGVhbiBpc1JlcXVpcmVkKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50I2lzUmVxdWlyZWQgPGVtPlJlcXVpcmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZXF1aXJlZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2lzUmVxdWlyZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFJlcXVpcmVkKGJvb2xlYW4gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVsZW1lbnQgVHlwZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RWxlbWVudCBUeXBlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0RWxlbWVudFR5cGUoUU5hbWUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRfRWxlbWVudFR5cGUoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlFOYW1lIiB0cmFuc2llbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldEVsZW1lbnRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50I2dldEVsZW1lbnRUeXBlIDxlbT5FbGVtZW50IFR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQgVHlwZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFbGVtZW50VHlwZShRTmFtZSB2YWx1ZSk7Ci0KLX0gLy8gRXh0ZW5zaWJpbGl0eUVsZW1lbnQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvRXh0ZW5zaWJsZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczZjJmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0V4dGVuc2libGVFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4dGVuc2libGUgRWxlbWVudDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqICBXU0RMIGFsbG93cyBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0ZWNobm9sb2d5IChyZWZlcnJlZCB0byBoZXJlIGFzIGV4dGVuc2liaWxpdHkgZWxlbWVudHMpIHVuZGVyIHZhcmlvdXMgZWxlbWVudHMgZGVmaW5lZCBieSBXU0RMLiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBvaW50IG9mIGV4dGVuc2liaWxpdHkuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cyA8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEV4dGVuc2libGVFbGVtZW50KCkKLSAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBFeHRlbnNpYmxlRWxlbWVudCBleHRlbmRzIFdTRExFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudH0uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBKV1NETCBBUEkuCi0gICAqIEBzZWUgI2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FRmF1bHQ8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIiBtYW55PSJmYWxzZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTGlzdCBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkcyBhbiBFeHRlbnNpYmlsaXR5RWxlbWVudCB0byB0aGUgJzxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogQHBhcmFtIGV4dEVsZW1lbnQgQW4gRXh0ZW5zaWJpbGl0eUVsZW1lbnQgdG8gYmUgYWRkZWQuCi0gICAqIEBpZ25vcmUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIGFkZEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQpOwotCi19IC8vIEV4dGVuc2libGVFbGVtZW50CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0ZhdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjAxOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9GYXVsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhdWx0PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBmYXVsdCBlbGVtZW50LiBGYXVsdCBlbGVtZW50cyBzcGVjaWZ5IHRoZSBhYnN0cmFjdCBtZXNzYWdlIGZvcm1hdCBmb3IgYW55IGVycm9yIG1lc3NhZ2VzIHRoYXQgbWF5IGJlIG91dHB1dCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0RmF1bHQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRmF1bHQgZXh0ZW5kcyBNZXNzYWdlUmVmZXJlbmNlLCBqYXZheC53c2RsLkZhdWx0Ci17Ci19IC8vIEZhdWx0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmViNzBkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0ltcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbXBvcnQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgV1NETCBpbXBvcnQgZWxlbWVudC4gV1NETCBhbGxvd3MgYXNzb2NpYXRpbmcgYSBuYW1lc3BhY2Ugd2l0aCBhIGRvY3VtZW50IGxvY2F0aW9uIHVzaW5nIGFuIGltcG9ydCBlbGVtZW50LgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRMb2NhdGlvblVSSSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0RURlZmluaXRpb24gPGVtPkVEZWZpbml0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0RVNjaGVtYSA8ZW0+RVNjaGVtYTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0SW1wb3J0KCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEltcG9ydCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLkltcG9ydAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZXNwYWNlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldE5hbWVzcGFjZVVSSShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0SW1wb3J0X05hbWVzcGFjZVVSSSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXROYW1lc3BhY2VVUkkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWVzcGFjZSBVUkk8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXROYW1lc3BhY2VVUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWVzcGFjZVVSSShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb24gVVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TG9jYXRpb25VUkkoU3RyaW5nKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEltcG9ydF9Mb2NhdGlvblVSSSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TG9jYXRpb25VUkkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uIFVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldExvY2F0aW9uVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRMb2NhdGlvblVSSShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RURlZmluaXRpb248L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVEZWZpbml0aW9uPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0RURlZmluaXRpb24oRGVmaW5pdGlvbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRJbXBvcnRfRURlZmluaXRpb24oKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRGVmaW5pdGlvbiBnZXRFRGVmaW5pdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0RURlZmluaXRpb24gPGVtPkVEZWZpbml0aW9uPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FRGVmaW5pdGlvbjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVEZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFRGVmaW5pdGlvbihEZWZpbml0aW9uIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RVNjaGVtYTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVNjaGVtYTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RVNjaGVtYTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVTY2hlbWEoWFNEU2NoZW1hKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldEltcG9ydF9FU2NoZW1hKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFhTRFNjaGVtYSBnZXRFU2NoZW1hKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydCNnZXRFU2NoZW1hIDxlbT5FU2NoZW1hPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FU2NoZW1hPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0RVNjaGVtYSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RVNjaGVtYShYU0RTY2hlbWEgdmFsdWUpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIG1ldGhvZCBpcyBzYW1lIGFzIGdldEVTY2hlbWEoKS4KLSAgICogQHNlZSAjZ2V0RVNjaGVtYSgpCi0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVTY2hlbWE8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwga2luZD0ib3BlcmF0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBYU0RTY2hlbWEgZ2V0U2NoZW1hKCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgbWV0aG9kIGlzIHNhbWUgYXMgc2V0RVNjaGVtYShYU0RTY2hlbWEpLgotICAgKiBAc2VlICNzZXRFU2NoZW1hKFhTRFNjaGVtYSkKLSAgICogQHBhcmFtIHNjaGVtYSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVTY2hlbWE8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRTY2hlbWEoWFNEU2NoZW1hIHNjaGVtYSk7Ci0KLX0gLy8gSW1wb3J0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL0lucHV0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OWFkNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9JbnB1dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklucHV0PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBpbnB1dCBlbGVtZW50LiBBbiBpbnB1dCBlbGVtZW50IHNwZWNpZmllcyB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIHRoZSBpbnB1dCBvZiB0aGUgb3BlcmF0aW9uLgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldElucHV0KCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElucHV0IGV4dGVuZHMgTWVzc2FnZVJlZmVyZW5jZSwgamF2YXgud3NkbC5JbnB1dAotewotfSAvLyBJbnB1dApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU2OTJlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL01lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWVzc2FnZTwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgbWVzc2FnZSBlbGVtZW50LiBBIFdTREwgbWVzc2FnZSBpcyBhbiBhYnN0cmFjdCwgdHlwZWQgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZyBjb21tdW5pY2F0ZWQuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNnZXRFUGFydHMgPGVtPkVQYXJ0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TWVzc2FnZSgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBNZXNzYWdlIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuTWVzc2FnZQotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFFOYW1lKFFOYW1lKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE1lc3NhZ2VfUU5hbWUoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlFOYW1lIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBRTmFtZSBnZXRRTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UU5hbWUoUU5hbWUgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VW5kZWZpbmVkKGJvb2xlYW4pCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TWVzc2FnZV9VbmRlZmluZWQoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgYm9vbGVhbiBpc1VuZGVmaW5lZCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRVbmRlZmluZWQoYm9vbGVhbiB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQYXJ0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFydHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TWVzc2FnZV9FUGFydHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVQYXJ0cygpOwotCi19IC8vIE1lc3NhZ2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTWVzc2FnZVJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ODAwYjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9NZXNzYWdlUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWVzc2FnZSBSZWZlcmVuY2U8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlI2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZVJlZmVyZW5jZSBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TWVzc2FnZVJlZmVyZW5jZV9OYW1lKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVNZXNzYWdlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVNZXNzYWdlKE1lc3NhZ2UpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TWVzc2FnZVJlZmVyZW5jZV9FTWVzc2FnZSgpCi0gICAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTWVzc2FnZSBnZXRFTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlI2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFTWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RU1lc3NhZ2UoTWVzc2FnZSB2YWx1ZSk7Ci0KLX0gLy8gTWVzc2FnZVJlZmVyZW5jZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvTmFtZXNwYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYmJhYjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9OYW1lc3BhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZXNwYWNlPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgbmFtZXNwYWNlIGFuZCB0aGUgY29ycmVzcG9uZGluZyBuYW1lc3BhY2UgcHJlZml4IHVzZWQgaW4gYSBXU0RMIGRvY3VtZW50LgotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSNnZXRVUkkgPGVtPlVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlI2dldFByZWZpeCA8ZW0+UHJlZml4PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXROYW1lc3BhY2UoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTmFtZXNwYWNlIGV4dGVuZHMgRU9iamVjdAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5VUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVSSTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFVSSShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TmFtZXNwYWNlX1VSSSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0VVJJKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSNnZXRVUkkgPGVtPlVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VVJJPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0VVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRVUkkoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UHJlZml4PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QcmVmaXg8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlByZWZpeDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFByZWZpeChTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0TmFtZXNwYWNlX1ByZWZpeCgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0UHJlZml4KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSNnZXRQcmVmaXggPGVtPlByZWZpeDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHJlZml4PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0UHJlZml4KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRQcmVmaXgoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBOYW1lc3BhY2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL09wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTJkNzJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3BlcmF0aW9uPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBvcGVyYXRpb24gZWxlbWVudC4gQSBXU0RMIG9wZXJhdGlvbiBpcyBhbiBhYnN0cmFjdCBkZXNjcmlwdGlvbiBvZiBhbiBhY3Rpb24gc3VwcG9ydGVkIGJ5IGEgc2VydmljZS4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0U3R5bGUgPGVtPlN0eWxlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFSW5wdXQgPGVtPkVJbnB1dDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVPdXRwdXQgPGVtPkVPdXRwdXQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFRmF1bHRzIDxlbT5FRmF1bHRzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RVBhcmFtZXRlck9yZGVyaW5nIDxlbT5FUGFyYW1ldGVyIE9yZGVyaW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRPcGVyYXRpb24oKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgT3BlcmF0aW9uIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TdHlsZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlN0eWxlPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0U3R5bGUoT3BlcmF0aW9uVHlwZSkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRPcGVyYXRpb25fU3R5bGUoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvblR5cGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE9wZXJhdGlvblR5cGUgZ2V0U3R5bGUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldFN0eWxlIDxlbT5TdHlsZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3R5bGU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRTdHlsZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0U3R5bGUoT3BlcmF0aW9uVHlwZSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRPcGVyYXRpb25fTmFtZSgpCi0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFVuZGVmaW5lZChib29sZWFuKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE9wZXJhdGlvbl9VbmRlZmluZWQoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgYm9vbGVhbiBpc1VuZGVmaW5lZCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFVuZGVmaW5lZChib29sZWFuIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FSW5wdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVJbnB1dDwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVJbnB1dChJbnB1dCkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRPcGVyYXRpb25fRUlucHV0KCkKLSAgICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBJbnB1dCBnZXRFSW5wdXQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVJbnB1dCA8ZW0+RUlucHV0PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FSW5wdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVJbnB1dChJbnB1dCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVPdXRwdXQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFT3V0cHV0KE91dHB1dCkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRPcGVyYXRpb25fRU91dHB1dCgpCi0gICAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgT3V0cHV0IGdldEVPdXRwdXQoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVPdXRwdXQgPGVtPkVPdXRwdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVPdXRwdXQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFT3V0cHV0KE91dHB1dCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RUZhdWx0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FRmF1bHRzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE9wZXJhdGlvbl9FRmF1bHRzKCkKLSAgICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0IiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RUZhdWx0cygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FUGFyYW1ldGVyIE9yZGVyaW5nPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KLSAgICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnR9LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUGFyYW1ldGVyIE9yZGVyaW5nPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldE9wZXJhdGlvbl9FUGFyYW1ldGVyT3JkZXJpbmcoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCk7Ci0KLX0gLy8gT3BlcmF0aW9uCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9PdXRwdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIwOWVlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL091dHB1dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk91dHB1dDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgb3V0cHV0IGVsZW1lbnQuIEFuIG91dHB1dCBlbGVtZW50IHNwZWNpZmllcyB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgb2YgdGhlIG9wZXJhdGlvbi4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRPdXRwdXQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgT3V0cHV0IGV4dGVuZHMgTWVzc2FnZVJlZmVyZW5jZSwgamF2YXgud3NkbC5PdXRwdXQKLXsKLX0gLy8gT3V0cHV0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1BhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWY1YWY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nLgotICogQHNpbmNlIDEuMAotICogQGlnbm9yZQotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXU0RMIHBhcnQgZWxlbWVudC4gUGFydHMgZGVzY3JpYmUgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIEVhY2ggcGFydCBpcyBhc3NvY2lhdGVkIHdpdGggYSB0eXBlIGZyb20gc29tZSB0eXBlIHN5c3RlbS4gCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVsZW1lbnROYW1lIDxlbT5FbGVtZW50IE5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0VHlwZU5hbWUgPGVtPlR5cGUgTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlRGVmaW5pdGlvbiA8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVsZW1lbnREZWNsYXJhdGlvbiA8ZW0+RWxlbWVudCBEZWNsYXJhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBhcnQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUGFydCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50LCBqYXZheC53c2RsLlBhcnQKLXsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQYXJ0X05hbWUoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0TmFtZShTdHJpbmcgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbGVtZW50IE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVsZW1lbnQgTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RWxlbWVudCBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0RWxlbWVudE5hbWUoUU5hbWUpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UGFydF9FbGVtZW50TmFtZSgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFFOYW1lIGdldEVsZW1lbnROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0RWxlbWVudE5hbWUgPGVtPkVsZW1lbnQgTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RWxlbWVudCBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjZ2V0RWxlbWVudE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVsZW1lbnROYW1lKFFOYW1lIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VHlwZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UeXBlIE5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlR5cGUgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFR5cGVOYW1lKFFOYW1lKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBhcnRfVHlwZU5hbWUoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlFOYW1lIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBRTmFtZSBnZXRUeXBlTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldFR5cGVOYW1lIDxlbT5UeXBlIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlR5cGUgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFR5cGVOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRUeXBlTmFtZShRTmFtZSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlR5cGUgRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlIERlZmluaXRpb248L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQYXJ0X1R5cGVEZWZpbml0aW9uKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFhTRFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0VHlwZURlZmluaXRpb24gPGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT4nIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0VHlwZURlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RWxlbWVudCBEZWNsYXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RWxlbWVudCBEZWNsYXJhdGlvbjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RWxlbWVudCBEZWNsYXJhdGlvbjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UGFydF9FbGVtZW50RGVjbGFyYXRpb24oKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgWFNERWxlbWVudERlY2xhcmF0aW9uIGdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVsZW1lbnREZWNsYXJhdGlvbiA8ZW0+RWxlbWVudCBEZWNsYXJhdGlvbjwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RWxlbWVudCBEZWNsYXJhdGlvbjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldEVsZW1lbnREZWNsYXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RWxlbWVudERlY2xhcmF0aW9uKFhTREVsZW1lbnREZWNsYXJhdGlvbiB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FTWVzc2FnZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRFTWVzc2FnZShNZXNzYWdlKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBhcnRfRU1lc3NhZ2UoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTWVzc2FnZSBnZXRFTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RU1lc3NhZ2U8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFTWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RU1lc3NhZ2UoTWVzc2FnZSB2YWx1ZSk7Ci0KLX0gLy8gUGFydApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkNWI3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1BvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3J0PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBwb3J0IGVsZW1lbnQuIEEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQgYnkgc3BlY2lmeWluZyBhIHNpbmdsZSBhZGRyZXNzIGZvciBhIGJpbmRpbmcKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQjZ2V0RUJpbmRpbmcgPGVtPkVCaW5kaW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQb3J0KCkKLSAqIEBtb2RlbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFBvcnQgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5Qb3J0Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0TmFtZShTdHJpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UG9ydF9OYW1lKCkKLSAgICogQG1vZGVsCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RUJpbmRpbmc8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVCaW5kaW5nPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FQmluZGluZzwvZW0+JyByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldEVCaW5kaW5nKEJpbmRpbmcpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UG9ydF9FQmluZGluZygpCi0gICAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgQmluZGluZyBnZXRFQmluZGluZygpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0I2dldEVCaW5kaW5nIDxlbT5FQmluZGluZzwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RUJpbmRpbmc8L2VtPicgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRFQmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RUJpbmRpbmcoQmluZGluZyB2YWx1ZSk7Ci0KLX0gLy8gUG9ydApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Qb3J0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWMyMDQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvUG9ydFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9ydCBUeXBlPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCBwb3J0VHlwZSBlbGVtZW50IG9mIHRoZSBXU0RMIHNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjEgYW5kIGFuIEludGVyZmFjZSBjb21wb25lbnQgb2YgdGhlIFdTREwgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDEuMi4gQSBwb3J0IHR5cGUgb3IgSW50ZXJmYWNlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2dldEVPcGVyYXRpb25zIDxlbT5FT3BlcmF0aW9uczwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UG9ydFR5cGUoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUG9ydFR5cGUgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5Qb3J0VHlwZQotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFFOYW1lKFFOYW1lKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFBvcnRUeXBlX1FOYW1lKCkKLSAgICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5RTmFtZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUU5hbWUgZ2V0UU5hbWUoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRRTmFtZShRTmFtZSB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNzZXRVbmRlZmluZWQoYm9vbGVhbikKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRQb3J0VHlwZV9VbmRlZmluZWQoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgYm9vbGVhbiBpc1VuZGVmaW5lZCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VbmRlZmluZWQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb259LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8cD4KLSAgICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RU9wZXJhdGlvbnM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RU9wZXJhdGlvbnM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0UG9ydFR5cGVfRU9wZXJhdGlvbnMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUxpc3QgZ2V0RU9wZXJhdGlvbnMoKTsKLQotfSAvLyBQb3J0VHlwZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9TZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ5ZmYzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1NlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2VydmljZTwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgc2VydmljZSBlbGVtZW50LiBBIHNlcnZpY2UgZ3JvdXBzIGEgc2V0IG9mIHJlbGF0ZWQgcG9ydHMgdG9nZXRoZXIuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSNnZXRFUG9ydHMgPGVtPkVQb3J0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0U2VydmljZSgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBTZXJ2aWNlIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnQsIGphdmF4LndzZGwuU2VydmljZQotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5RTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI3NldFFOYW1lKFFOYW1lKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFNlcnZpY2VfUU5hbWUoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLlFOYW1lIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBRTmFtZSBnZXRRTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UU5hbWU8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0UU5hbWUoUU5hbWUgdmFsdWUpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VW5kZWZpbmVkPC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0VW5kZWZpbmVkKGJvb2xlYW4pCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0U2VydmljZV9VbmRlZmluZWQoKQotICAgKiBAbW9kZWwKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgYm9vbGVhbiBpc1VuZGVmaW5lZCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVuZGVmaW5lZDwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRVbmRlZmluZWQoYm9vbGVhbiB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVQb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVQb3J0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLSAgICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FUG9ydHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0U2VydmljZV9FUG9ydHMoKQotICAgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCIgY29udGFpbm1lbnQ9InRydWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVMaXN0IGdldEVQb3J0cygpOwotCi19IC8vIFNlcnZpY2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVlMDk3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1R5cGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlR5cGVzPC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV1NETCB0eXBlcyBlbGVtZW50LiBUaGUgdHlwZXMgZWxlbWVudCBlbmNsb3NlcyBkYXRhIHR5cGUgZGVmaW5pdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIHRoZSBleGNoYW5nZWQgbWVzc2FnZXMuCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0VHlwZXMoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVHlwZXMgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudCwgamF2YXgud3NkbC5UeXBlcwotewotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogUmV0dXJucyBhIExpc3Qgb2YgaW5saW5lIFhTRFNjaGVtYSBpbnN0YW5jZXMgaW4gdGhpcyBUeXBlcy4gCi0gICAqIEByZXR1cm4gTGlzdCBvZiBYU0RTY2hlbWEgaW5zdGFuY2VzLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWEKLSAgICogQGlnbm9yZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIgbWFueT0iZmFsc2UiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIExpc3QgZ2V0U2NoZW1hcygpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBSZXR1cm5zIGEgTGlzdCBvZiBpbmxpbmUgWFNEU2NoZW1hIGluc3RhbmNlcyBpbiB0aGlzIFR5cGVzLiBUaGUgdGFyZ2V0TmFtZXNwYWNlIG9mCi0gICAqIHRoZSBzY2hlbWFzIGFyZSB0aGUgc2FtZSBhcyBuYW1lc3BhY2VVUkkgYXJndW1lbnQgdmFsdWUuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkgdGFyZ2V0TmFtZXNwYWNlIG9mIHRoZSBzY2hlbWFzIHRvIGJlIHNlYXJjaGVkIGZvci4KLSAgICogQHJldHVybiBMaXN0IG9mIFhTRFNjaGVtYSBpbnN0YW5jZXMuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYQotICAgKiBAaWdub3JlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAbW9kZWwgbWFueT0iZmFsc2UiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIExpc3QgZ2V0U2NoZW1hcyhTdHJpbmcgbmFtZXNwYWNlVVJJKTsKLQotfSAvLyBUeXBlcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNDQ4NjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9iPjwvZW0+Jy4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCNnZXRDaGlsZHJlbiA8ZW0+Q2hpbGRyZW48L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gKiBAbW9kZWwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q2hpbGRyZW48L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50fS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkNoaWxkcmVuPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNoaWxkcmVuPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudF9DaGlsZHJlbigpCi0gICAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFTGlzdCBnZXRDaGlsZHJlbigpOwotCi19IC8vIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmEzZGQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdTREwgbGFuZ3VhZ2UgZWxlbWVudC4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCA8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCNnZXRFbGVtZW50IDxlbT5FbGVtZW50PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRXU0RMRWxlbWVudCgpCi0gKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NETEVsZW1lbnQgZXh0ZW5kcyBFT2JqZWN0Ci17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRvY3VtZW50YXRpb24gRWxlbWVudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0gICAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLSAgICogPC9wPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoRWxlbWVudCkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNnZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gICAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuRE9NRWxlbWVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRWxlbWVudCBnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCNnZXREb2N1bWVudGF0aW9uRWxlbWVudCA8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHZvaWQgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoRWxlbWVudCB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPHA+Ci0gICAqIFRoaXMgaXMgdGhlIHVuZGVybHlpbmcgRE9NIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcG9uZW50LCAKLSAgICogaS5lLiwgdGhlIHtAbGluayAjdXBkYXRlRWxlbWVudCgpIHNlcmlhbGl6YXRpb259IG9mIHRoaXMgY29tcG9uZW50LgotICAgKiA8L3A+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FbGVtZW50PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogQHNlZSAjc2V0RWxlbWVudChFbGVtZW50KQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlI2dldFdTRExFbGVtZW50X0VsZW1lbnQoKQotICAgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLkRPTUVsZW1lbnQiIHRyYW5zaWVudD0idHJ1ZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRWxlbWVudCBnZXRFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50I2dldEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVsZW1lbnQ8L2VtPicgYXR0cmlidXRlLgotICAgKiBAc2VlICNnZXRFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgdm9pZCBzZXRFbGVtZW50KEVsZW1lbnQgdmFsdWUpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBSZXR1cm5zIHRoZSBEZWZpbml0aW9uIHRoYXQgY29udGFpbnMgdGhpcyBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIERlZmluaXRpb24gdGhhdCBjb250YWlucyB0aGlzIFdTREwgZWxlbWVudC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIERlZmluaXRpb24gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXRzIHRoZSBlbmNsb3NpbmcgZGVmaW5pdGlvbiBvZiB0aGlzIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZmluaXRpb24gdGhlIERlZmluaXRpb24gdGhhdCBjb250YWlucyB0aGlzIFdTREwgZWxlbWVudC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBtb2RlbAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldEVuY2xvc2luZ0RlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKTsKLQotICAvKioKLSAgICogRW5zdXJlcyB0aGF0IHRoZSB1bmRlcmx5aW5nIERPTSB7QGxpbmsgI2dldEVsZW1lbnQgZWxlbWVudH0gYm90aCBleGlzdHMgYW5kIGlzIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBtb2RlbCwKLSAgICogaS5lLiwgaXQgc2VyaWFsaXplcyB0aGUgY29tcG9uZW50IGFuZCBtYWludGFpbnMgYW4gYXNzb2NpYXRpb24gd2l0aCB0aGF0IHNlcmlhbGl6YXRpb24uCi0gICAqIEBzZWUgI3VwZGF0ZUVsZW1lbnQoYm9vbGVhbikKLSAgICogQHNlZSAjZ2V0RWxlbWVudAotICAgKi8KLSAgdm9pZCB1cGRhdGVFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIEVuc3VyZXMgdGhhdCB0aGUgdW5kZXJseWluZyBET00ge0BsaW5rICNnZXRFbGVtZW50IGVsZW1lbnR9IGJvdGggZXhpc3RzIGFuZCBpcyB1cC10by1kYXRlIHdpdGggcmVzcGVjdCB0byB0aGUgbW9kZWwsCi0gICAqIGkuZS4sIGl0IHNlcmlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhbmQgbWFpbnRhaW5zIGFuIGFzc29jaWF0aW9uIHdpdGggdGhhdCBzZXJpYWxpemF0aW9uLgotICAgKiBGb3IgPGNvZGU+ZGVlcCA9PSB0cnVlPC9jb2RlPiwgCi0gICAqIG9yIHdoZW4gPGNvZGU+e0BsaW5rICNnZXRFbGVtZW50IGdldEVsZW1lbnQoKX0gPT0gbnVsbDwvY29kZT4sIAotICAgKiB0aGlzIGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMge0BsaW5rICN1cGRhdGVFbGVtZW50KCl9OwotICAgKiBvdGhlcndpc2UsIGl0IHVwZGF0ZXMganVzdCB0aGUgRE9NIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcG9uZW50IHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUuCi0gICAqIEBzZWUgI3VwZGF0ZUVsZW1lbnQoKQotICAgKiBAc2VlICNnZXRFbGVtZW50Ci0gICAqLwotICB2b2lkIHVwZGF0ZUVsZW1lbnQoYm9vbGVhbiBkZWVwKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q29udGFpbmVyPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIFRoaXMgcmVwcmVzZW50cyB0aGUgY29uY3JldGUgY29udGFpbmVyIG9mIHRoaXMgY29tcG9uZW50LCAKLSAgICogaS5lLiwgdGhlIGludmVyc2Ugb2YgdGhlIGJsYWNrIGRpYW1vbmQgcmVsYXRpb25zIGluIHRoZSBVTUwgbW9kZWwuCi0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNvbnRhaW5lcjwvZW0+JyByZWZlcmVuY2UuCi0gICAqLwotICBXU0RMRWxlbWVudCBnZXRDb250YWluZXIoKTsKLQotICAvKioKLSAgICogQ2FsbGVkIHRvIGluZGljYXRlIHRoYXQgdGhlIGdpdmVuIGVsZW1lbnQgaGFzIGNoYW5nZWQ7Ci0gICAqIHRoZSBlbGVtZW50IHNob3VsZCB0eXBpY2FsbHkgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSByZXR1cm5lZCB7QGxpbmsgI2dldEVsZW1lbnR9LgotICAgKiBJdCBpcyBleHBlY3RlZCB0aGF0IGNsaWVudHMgd2lsbCBub3QgY2FsbCB0aGlzIHRoZW1zZWx2ZXMgCi0gICAqIHNpbmNlIHRoZSBET00gZXZlbnQgbGlzdGVuZXJzIGF0dGFjaGVkIHRvIHRoZSB1bmRlcmx5aW5nIERPTSB3aWxsIGludm9rZSB0aGVzZSBhdXRvbWF0aWNhbGx5LgotICAgKiBAcGFyYW0gY2hhbmdlZEVsZW1lbnQgdGhlIERPTSBlbGVtZW50IGNoYW5nZWQgZm9yIHRoaXMgaW5zdGFuY2UuCi0gICAqLwotICB2b2lkIGVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpOwotCi19IC8vIFdTRExFbGVtZW50CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOGUwNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgV1NETEZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRmFjdG9yeUltcGwuaW5pdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcnQgVHlwZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9ydCBUeXBlPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBQb3J0VHlwZSBjcmVhdGVQb3J0VHlwZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3BlcmF0aW9uPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBPcGVyYXRpb24gY3JlYXRlT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWVzc2FnZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWVzc2FnZTwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgTWVzc2FnZSBjcmVhdGVNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgUGFydCBjcmVhdGVQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgQmluZGluZyBjcmVhdGVCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nT3BlcmF0aW9uIGNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TZXJ2aWNlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TZXJ2aWNlPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTZXJ2aWNlIGNyZWF0ZVNlcnZpY2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3J0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3J0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBQb3J0IGNyZWF0ZVBvcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZWZpbml0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZWZpbml0aW9uPC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBEZWZpbml0aW9uIGNyZWF0ZURlZmluaXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbXBvcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkltcG9ydDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSW1wb3J0IGNyZWF0ZUltcG9ydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPklucHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnB1dDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgSW5wdXQgY3JlYXRlSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PdXRwdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk91dHB1dDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgT3V0cHV0IGNyZWF0ZU91dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRmF1bHQgY3JlYXRlRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nSW5wdXQgY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nT3V0cHV0IGNyZWF0ZUJpbmRpbmdPdXRwdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBCaW5kaW5nRmF1bHQgY3JlYXRlQmluZGluZ0ZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZXNwYWNlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lc3BhY2U8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIE5hbWVzcGFjZSBjcmVhdGVOYW1lc3BhY2UoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UeXBlczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VHlwZXM8L2VtPicuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFR5cGVzIGNyZWF0ZVR5cGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+WFNEIFNjaGVtYSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFdTRExQYWNrYWdlIGdldFdTRExQYWNrYWdlKCk7Ci0KLSAgLyoKLSAgICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgLy9XU0RMUGFja2FnZSBnZXRXU0RMUGFja2FnZSgpOwotfSAvL1dTRExGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NjMyODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDU5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICogPC91bD4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiBUaGUgV1NETCBtb2RlbCBjb250YWlucyBjbGFzc2VzIGZvciB0aGUgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKS4KLSAqIAotICogV1NETCBkZXNjcmliZXMgbmV0d29yayBzZXJ2aWNlcyBhcyBzZXRzIG9mIGVuZHBvaW50cyBvcGVyYXRpbmcgb24gbWVzc2FnZXMuIFRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBhcmUgZGVzY3JpYmVkIGFic3RyYWN0bHksIGFuZCB0aGVuIGJvdW5kIHRvIGEgY29uY3JldGUgbmV0d29yayBwcm90b2NvbCBhbmQgbWVzc2FnZSBmb3JtYXQgdG8gZGVmaW5lIGFuIGVuZHBvaW50LgotICogCi0gKiBXU0RMIGRlc2NyaWJlcyB0aGUgZm9ybWF0cyBvZiB0aGUgbWVzc2FnZXMgZXhjaGFuZ2VkIGJ5IHRoZSBzZXJ2aWNlcywgYW5kIHN1cHBvcnRzIHRoZSBYTUwgU2NoZW1hcyBzcGVjaWZpY2F0aW9uIGFzIGl0cyBjYW5vbmljYWwgdHlwZSBzeXN0ZW0uIFRoaXMgcGFja2FnZSB1c2VzIGFuIFhNTCBTY2hlbWEgSW5mb3NldCBtb2RlbCBwYWNrYWdlIChzZWUgdGhlIFhTRCBwYWNrYWdlKSB0byBkZXNjcmliZSB0aGUgYWJzdHJhY3QgbWVzc2FnZSBmb3JtYXRzLgotICogCi0gKiBUaGUgbW9kZWwgY29udGFpbnMgdGhlIGZvbGxvd2luZyBkaWFncmFtcywgbmFtZWQgYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgY2hhcHRlcnMgaW4gdGhlIFdTREwgMS4xIHNwZWNpZmljYXRpb24gKGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvTk9URS13c2RsLTIwMDEwMzE1KQotICogLSAyLjEgRGVmaW5pdGlvbiwgc2hvd3MgdGhlIFdTREwgZGVmaW5pdGlvbiBlbGVtZW50IGFuZCB0aGUgV1NETCBkb2N1bWVudCBzdHJ1Y3R1cmUKLSAqIC0gMi4xLjEgTmFtaW5nIGFuZCBMaW5raW5nLCBzaG93cyB0aGUgbmFtZXNwYWNlIGFuZCBpbXBvcnQgbWVjaGFuaXNtCi0gKiAtIDIuMS4zIEV4dGVuc2liaWxpdHksIHNob3dzIHRoZSBXU0RMIGV4dGVuc2liaWxpdHkgbWVjaGFuaXNtCi0gKiAtIDIuMiBUeXBlcywgc2hvd3MgdGhlIHVzZSBvZiBYTUwgU2NoZW1hIHR5cGVzIGluIFdTREwKLSAqIC0gMi4zIE1lc3NhZ2VzLCAyLjQgUG9ydFR5cGVzLCAyLjUgQmluZGluZ3MgYW5kIDIuNyBTZXJ2aWNlcywgc2hvdyB0aGUgbWFqb3IgV1NETCBlbGVtZW50cyBhbmQgdGhlaXIgcmVsYXRpb25zLgotICogCi0gKiBUaGUgV1NETCBjbGFzc2VzIGV4dGVuZCB0aGUgamF2YXgud3NkbCBpbnRlcmZhY2VzIGRlZmluZWQgYnkgSlNSIDExMC4gQ2xhc3NlcyB3aXRoIGludGVyZmFjZSBhbmQgZGF0YXR5cGUgc3RlcmVvdHlwZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZXNlIG5vbi1NT0YgaW50ZXJmYWNlcy4KLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3RvcnkKLSAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UKLXsKLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBTdHJpbmcgZU5BTUUgPSAid3NkbCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1dTREwiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgU3RyaW5nIGVOU19QUkVGSVggPSAid3NkbCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIFdTRExQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsLmluaXQoKTsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbCA8ZW0+RWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0V1NETEVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgV1NETF9FTEVNRU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFdTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBXU0RMX0VMRU1FTlRfX0VMRU1FTlQgPSAxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWxlbWVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBXU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmxlRWxlbWVudEltcGwgPGVtPkV4dGVuc2libGUgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJsZUVsZW1lbnRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgRVhURU5TSUJMRV9FTEVNRU5UID0gMTI7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQkxFX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IFdTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVCA9IFdTRExfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gV1NETF9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RXh0ZW5zaWJsZSBFbGVtZW50PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UID0gV1NETF9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydFR5cGVJbXBsIDxlbT5Qb3J0IFR5cGU8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFBvcnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFBPUlRfVFlQRSA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX1RZUEVfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfVFlQRV9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX1RZUEVfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9UWVBFX19RTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfVFlQRV9fVU5ERUZJTkVEID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfVFlQRV9fRU9QRVJBVElPTlMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3J0IFR5cGU8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9UWVBFX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsIDxlbT5PcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OID0gMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3R5bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBPUEVSQVRJT05fX1NUWUxFID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9fVU5ERUZJTkVEID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUlucHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FSU5QVVQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FT1VUUFVUID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FRkFVTFRTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA1OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBhcmFtZXRlciBPcmRlcmluZzwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA2OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3BlcmF0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA3OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZUltcGwgPGVtPk1lc3NhZ2U8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0TWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBNRVNTQUdFID0gMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNRVNTQUdFX19RTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfX1VOREVGSU5FRCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQYXJ0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9fRVBBUlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWVzc2FnZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBNRVNTQUdFX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbCA8ZW0+UGFydDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFBBUlQgPSA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQQVJUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBBUlRfX0VMRU1FTlRfTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBBUlRfX1RZUEVfTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgRGVmaW5pdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBBUlRfX1RZUEVfREVGSU5JVElPTiA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgRGVjbGFyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQQVJUX19FTUVTU0FHRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBhcnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUEFSVF9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA2OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ltcGwgPGVtPkJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBCSU5ESU5HID0gNTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX19RTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfX1VOREVGSU5FRCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQb3J0IFR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX19FUE9SVF9UWVBFID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmc8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA0OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwgPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3BlcmF0aW9uSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT04gPSA2OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX05BTUUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FT3BlcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT04gPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIE91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBGYXVsdHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09QRVJBVElPTl9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA1OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGwgPGVtPlNlcnZpY2U8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0U2VydmljZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBTRVJWSUNFID0gNzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNFUlZJQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNFUlZJQ0VfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU0VSVklDRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTRVJWSUNFX19RTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFNFUlZJQ0VfX1VOREVGSU5FRCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVQb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgU0VSVklDRV9fRVBPUlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2VydmljZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBTRVJWSUNFX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0SW1wbCA8ZW0+UG9ydDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRQb3J0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFBPUlQgPSA4OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBQT1JUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgUE9SVF9fRUJJTkRJTkcgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3J0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFBPUlRfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCA8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBFWFRFTlNJQklMSVRZX0VMRU1FTlQgPSA5OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBXU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlQgPSBXU0RMX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZXF1aXJlZDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQgPSBXU0RMX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSA9IFdTRExfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCA9IFdTRExfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsIDxlbT5EZWZpbml0aW9uPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTiA9IDEwOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgTmFtZXNwYWNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fTE9DQVRJT04gPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX1FOQU1FID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAyOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5jb2Rpbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FTkNPRElORyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVJbXBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FSU1QT1JUUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVUeXBlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VUWVBFUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgNTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgREVGSU5JVElPTl9fRU1FU1NBR0VTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA2OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVBvcnQgVHlwZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VQT1JUX1RZUEVTID0gRVhURU5TSUJMRV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyA3OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmdzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FQklORElOR1MgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDg7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU2VydmljZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fX0VTRVJWSUNFUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgOTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVOYW1lc3BhY2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBERUZJTklUSU9OX19FTkFNRVNQQUNFUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EZWZpbml0aW9uPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IERFRklOSVRJT05fRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTE7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsIDxlbT5JbXBvcnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJbXBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSU1QT1JUID0gMTE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNUE9SVF9fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWVzcGFjZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX05BTUVTUEFDRV9VUkkgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbiBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX0xPQ0FUSU9OX1VSSSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU1QT1JUX19FREVGSU5JVElPTiA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTY2hlbWE8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTVBPUlRfX0VTQ0hFTUEgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbXBvcnQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU1QT1JUX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlUmVmZXJlbmNlSW1wbCA8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VSZWZlcmVuY2VJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBNRVNTQUdFX1JFRkVSRU5DRSA9IDQ2OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1lc3NhZ2UgUmVmZXJlbmNlPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE1FU1NBR0VfUkVGRVJFTkNFX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbnB1dEltcGwgPGVtPklucHV0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbnB1dEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJbnB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJTlBVVCA9IDEzOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU5QVVRfX0VMRU1FTlQgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTlBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU5QVVRfX05BTUUgPSBNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVNZXNzYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU5QVVRfX0VNRVNTQUdFID0gTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW5wdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU5QVVRfRkVBVFVSRV9DT1VOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX0ZFQVRVUkVfQ09VTlQgKyAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3V0cHV0SW1wbCA8ZW0+T3V0cHV0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PdXRwdXRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0T3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IE9VVFBVVCA9IDE0OwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1VUUFVUX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9VVFBVVF9fRUxFTUVOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9VVFBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1VUUFVUX19OQU1FID0gTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE9VVFBVVF9fRU1FU1NBR0UgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5PdXRwdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgT1VUUFVUX0ZFQVRVUkVfQ09VTlQgPSBNRVNTQUdFX1JFRkVSRU5DRV9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkZhdWx0SW1wbCA8ZW0+RmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkZhdWx0SW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEZBVUxUID0gMTU7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBGQVVMVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gTUVTU0FHRV9SRUZFUkVOQ0VfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBGQVVMVF9fRUxFTUVOVCA9IE1FU1NBR0VfUkVGRVJFTkNFX19FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEZBVUxUX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IE1FU1NBR0VfUkVGRVJFTkNFX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBGQVVMVF9fTkFNRSA9IE1FU1NBR0VfUkVGRVJFTkNFX19OQU1FOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBGQVVMVF9fRU1FU1NBR0UgPSBNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5GYXVsdDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBGQVVMVF9GRUFUVVJFX0NPVU5UID0gTUVTU0FHRV9SRUZFUkVOQ0VfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsIDxlbT5CaW5kaW5nIElucHV0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZ0lucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVQgPSAxNjsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVRfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19JTlBVVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVRfX05BTUUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX0lOUFVUX19FSU5QVVQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfSU5QVVRfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPdXRwdXRJbXBsIDxlbT5CaW5kaW5nIE91dHB1dDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ091dHB1dEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRCaW5kaW5nT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1VUUFVUID0gMTc7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09VVFBVVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PVVRQVVRfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19PVVRQVVRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09VVFBVVF9fTkFNRSA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVPdXRwdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX09VVFBVVF9fRU9VVFBVVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfT1VUUFVUX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nRmF1bHRJbXBsIDxlbT5CaW5kaW5nIEZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nRmF1bHRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0QmluZGluZ0ZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFQgPSAxODsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFRfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgQklORElOR19GQVVMVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOwotCi0gIC8qKgotICAgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFRfX05BTUUgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRmF1bHQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBCSU5ESU5HX0ZBVUxUX19FRkFVTFQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IEJJTkRJTkdfRkFVTFRfRkVBVFVSRV9DT1VOVCA9IEVYVEVOU0lCTEVfRUxFTUVOVF9GRUFUVVJFX0NPVU5UICsgMjsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk5hbWVzcGFjZUltcGwgPGVtPk5hbWVzcGFjZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTmFtZXNwYWNlSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldE5hbWVzcGFjZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBOQU1FU1BBQ0UgPSAxOTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE5BTUVTUEFDRV9fVVJJID0gMDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByZWZpeDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IE5BTUVTUEFDRV9fUFJFRklYID0gMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk5hbWVzcGFjZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBOQU1FU1BBQ0VfRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5Qb3J0VHlwZSA8ZW0+SVBvcnQgVHlwZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuUG9ydFR5cGUKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJUG9ydFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSVBPUlRfVFlQRSA9IDIwOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVBvcnQgVHlwZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJUE9SVF9UWVBFX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuT3BlcmF0aW9uIDxlbT5JT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5PcGVyYXRpb24KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElPUEVSQVRJT04gPSAyMTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklPcGVyYXRpb248L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSU9QRVJBVElPTl9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLklucHV0IDxlbT5JSW5wdXQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLklucHV0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUlucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElJTlBVVCA9IDIyOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUlucHV0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElJTlBVVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLk91dHB1dCA8ZW0+SU91dHB1dDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuT3V0cHV0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SU91dHB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJT1VUUFVUID0gMjM7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JT3V0cHV0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElPVVRQVVRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5GYXVsdCA8ZW0+SUZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5GYXVsdAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJRkFVTFQgPSAyNDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklGYXVsdDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJRkFVTFRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5NZXNzYWdlIDxlbT5JTWVzc2FnZTwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuTWVzc2FnZQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElNRVNTQUdFID0gMjU7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTWVzc2FnZTwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJTUVTU0FHRV9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLlBhcnQgPGVtPklQYXJ0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5QYXJ0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVBhcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSVBBUlQgPSAyNjsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklQYXJ0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElQQVJUX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuU2VydmljZSA8ZW0+SVNlcnZpY2U8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLlNlcnZpY2UKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJU2VydmljZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJU0VSVklDRSA9IDI3OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SVNlcnZpY2U8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVNFUlZJQ0VfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5Qb3J0IDxlbT5JUG9ydDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuUG9ydAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElQb3J0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElQT1JUID0gMjg7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JUG9ydDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJUE9SVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmcgPGVtPklCaW5kaW5nPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUJpbmRpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUJJTkRJTkcgPSAyOTsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklCaW5kaW5nPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElCSU5ESU5HX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiA8ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUJJTkRJTkdfT1BFUkFUSU9OID0gMzA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUJJTkRJTkdfT1BFUkFUSU9OX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ0lucHV0IDxlbT5JQmluZGluZyBJbnB1dDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ0lucHV0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUJpbmRpbmdJbnB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJQklORElOR19JTlBVVCA9IDMxOwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUJJTkRJTkdfSU5QVVRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IDxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJQmluZGluZ091dHB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJQklORElOR19PVVRQVVQgPSAzMjsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklCaW5kaW5nIE91dHB1dDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJQklORElOR19PVVRQVVRfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQgPGVtPklCaW5kaW5nIEZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJQmluZGluZ0ZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElCSU5ESU5HX0ZBVUxUID0gMzM7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JQmluZGluZyBGYXVsdDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJQklORElOR19GQVVMVF9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUVYVEVOU0lCSUxJVFlfRUxFTUVOVCA9IDM0OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuRGVmaW5pdGlvbiA8ZW0+SURlZmluaXRpb248L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLkRlZmluaXRpb24KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJRGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJREVGSU5JVElPTiA9IDM1OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SURlZmluaXRpb248L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSURFRklOSVRJT05fRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5JbXBvcnQgPGVtPklJbXBvcnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLkltcG9ydAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElJbXBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUlNUE9SVCA9IDM2OwotCi0gIC8qKgotICAgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SUltcG9ydDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBJSU1QT1JUX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmEudXRpbC5MaXN0IDxlbT5JTGlzdDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmEudXRpbC5MaXN0Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUxpc3QoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUxJU1QgPSAzNzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklMaXN0PC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElMSVNUX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmEudXRpbC5NYXAgPGVtPklNYXA8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZhLnV0aWwuTWFwCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SU1hcCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJTUFQID0gMzg7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JTWFwPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElNQVBfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YS5uZXQuVVJMIDxlbT5JVVJMPC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YS5uZXQuVVJMCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVVSTCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBJVVJMID0gMzk7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JVVJMPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IElVUkxfRkVBVFVSRV9DT1VOVCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5IDxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT59JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IElFWFRFTlNJT05fUkVHSVNUUlkgPSA0MDsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUVYVEVOU0lPTl9SRUdJU1RSWV9GRUFUVVJFX0NPVU5UID0gMDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlR5cGVzSW1wbCA8ZW0+VHlwZXM8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlR5cGVzSW1wbAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFR5cGVzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFRZUEVTID0gNDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBUWVBFU19fRE9DVU1FTlRBVElPTl9FTEVNRU5UID0gRVhURU5TSUJMRV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgVFlQRVNfX0VMRU1FTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgVFlQRVNfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTID0gRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUzsKLQotICAvKioKLSAgICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlR5cGVzPC9lbT4nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFRZUEVTX0ZFQVRVUkVfQ09VTlQgPSBFWFRFTlNJQkxFX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YS51dGlsLkl0ZXJhdG9yIDxlbT5JSXRlcmF0b3I8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZhLnV0aWwuSXRlcmF0b3IKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJSXRlcmF0b3IoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSUlURVJBVE9SID0gNDI7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JSXRlcmF0b3I8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSUlURVJBVE9SX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuVHlwZXMgPGVtPklUeXBlczwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuVHlwZXMKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJVHlwZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgSVRZUEVTID0gNDM7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JVHlwZXM8L2VtPicgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgSVRZUEVTX0ZFQVRVUkVfQ09VTlQgPSAwOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCA8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nIGNsYXNzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlQgPSA0NDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVCA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEID0gRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoaWxkcmVuPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU4gPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIDxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQgPSA0NTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRvY3VtZW50YXRpb24gRWxlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVCA9IEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBpbnQgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEID0gRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVsZW1lbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRTsKLQotICAvKioKLSAgICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNjaGVtYTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgaW50IFhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEgPSBFWFRFTlNJQklMSVRZX0VMRU1FTlRfRkVBVFVSRV9DT1VOVCArIDA7Ci0KLSAgLyoqCi0gICAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+JyBjbGFzcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIGludCBYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9GRUFUVVJFX0NPVU5UID0gRVhURU5TSUJJTElUWV9FTEVNRU5UX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGRhdGEgdHlwZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IFFOQU1FID0gNDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+T3BlcmF0aW9uIFR5cGU8L2VtPicgZGF0YSB0eXBlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBqYXZheC53c2RsLk9wZXJhdGlvblR5cGUKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRPcGVyYXRpb25UeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IE9QRVJBVElPTl9UWVBFID0gNDg7Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+RE9NIEVsZW1lbnQ8L2VtPicgZGF0YSB0eXBlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcudzNjLmRvbS5FbGVtZW50Ci0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RE9NRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIGludCBET01fRUxFTUVOVCA9IDQ5OwotCi0gIC8qKgotICAgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPkV4Y2VwdGlvbjwvZW0+JyBkYXRhIHR5cGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlIGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFdTRExFeGNlcHRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnQgV1NETF9FWENFUFRJT04gPSA1MDsKLQotICAvKioKLSAgICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5ET00gRG9jdW1lbnQ8L2VtPicgZGF0YSB0eXBlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcudzNjLmRvbS5Eb2N1bWVudAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldERPTURvY3VtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgaW50IERPTV9ET0NVTUVOVCA9IDUxOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCA8ZW0+RWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRXU0RMRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50I2dldERvY3VtZW50YXRpb25FbGVtZW50IDxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKQotICAgKiBAc2VlICNnZXRXU0RMRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0V1NETEVsZW1lbnRfRG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCNnZXRFbGVtZW50IDxlbT5FbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCNnZXRFbGVtZW50KCkKLSAgICogQHNlZSAjZ2V0V1NETEVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFdTRExFbGVtZW50X0VsZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUgPGVtPlBvcnQgVHlwZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qb3J0IFR5cGU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFBvcnRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UU5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjZ2V0UU5hbWUoKQotICAgKiBAc2VlICNnZXRQb3J0VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0UG9ydFR5cGVfUU5hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNpc1VuZGVmaW5lZCA8ZW0+VW5kZWZpbmVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VW5kZWZpbmVkPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlI2lzVW5kZWZpbmVkKCkKLSAgICogQHNlZSAjZ2V0UG9ydFR5cGUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldFBvcnRUeXBlX1VuZGVmaW5lZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGUjZ2V0RU9wZXJhdGlvbnMgPGVtPkVPcGVyYXRpb25zPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FT3BlcmF0aW9uczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSNnZXRFT3BlcmF0aW9ucygpCi0gICAqIEBzZWUgI2dldFBvcnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRQb3J0VHlwZV9FT3BlcmF0aW9ucygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24gPGVtPk9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5PcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0U3R5bGUgPGVtPlN0eWxlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3R5bGU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldFN0eWxlKCkKLSAgICogQHNlZSAjZ2V0T3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRPcGVyYXRpb25fU3R5bGUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE9wZXJhdGlvbl9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5VbmRlZmluZWQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2lzVW5kZWZpbmVkKCkKLSAgICogQHNlZSAjZ2V0T3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRPcGVyYXRpb25fVW5kZWZpbmVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVJbnB1dCA8ZW0+RUlucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+RUlucHV0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFSW5wdXQoKQotICAgKiBAc2VlICNnZXRPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldE9wZXJhdGlvbl9FSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RU91dHB1dCA8ZW0+RU91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkVPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVPdXRwdXQoKQotICAgKiBAc2VlICNnZXRPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldE9wZXJhdGlvbl9FT3V0cHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RUZhdWx0cyA8ZW0+RUZhdWx0czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RUZhdWx0czwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb24jZ2V0RUZhdWx0cygpCi0gICAqIEBzZWUgI2dldE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0T3BlcmF0aW9uX0VGYXVsdHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiNnZXRFUGFyYW1ldGVyT3JkZXJpbmcgPGVtPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uI2dldEVQYXJhbWV0ZXJPcmRlcmluZygpCi0gICAqIEBzZWUgI2dldE9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0T3BlcmF0aW9uX0VQYXJhbWV0ZXJPcmRlcmluZygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlIDxlbT5NZXNzYWdlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1lc3NhZ2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0TWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2UjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UU5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNnZXRRTmFtZSgpCi0gICAqIEBzZWUgI2dldE1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE1lc3NhZ2VfUU5hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5VbmRlZmluZWQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNpc1VuZGVmaW5lZCgpCi0gICAqIEBzZWUgI2dldE1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE1lc3NhZ2VfVW5kZWZpbmVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlI2dldEVQYXJ0cyA8ZW0+RVBhcnRzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FUGFydHM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSNnZXRFUGFydHMoKQotICAgKiBAc2VlICNnZXRNZXNzYWdlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRNZXNzYWdlX0VQYXJ0cygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0IDxlbT5QYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBhcnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0UGFydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXROYW1lKCkKLSAgICogQHNlZSAjZ2V0UGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0UGFydF9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFbGVtZW50TmFtZSA8ZW0+RWxlbWVudCBOYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RWxlbWVudCBOYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0RWxlbWVudE5hbWUoKQotICAgKiBAc2VlICNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRQYXJ0X0VsZW1lbnROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlTmFtZSA8ZW0+VHlwZSBOYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VHlwZSBOYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0VHlwZU5hbWUoKQotICAgKiBAc2VlICNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRQYXJ0X1R5cGVOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRUeXBlRGVmaW5pdGlvbiA8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0VHlwZURlZmluaXRpb24oKQotICAgKiBAc2VlICNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRQYXJ0X1R5cGVEZWZpbml0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCNnZXRFbGVtZW50RGVjbGFyYXRpb24gPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkKLSAgICogQHNlZSAjZ2V0UGFydCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0UGFydF9FbGVtZW50RGVjbGFyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0I2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVNZXNzYWdlPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQjZ2V0RU1lc3NhZ2UoKQotICAgKiBAc2VlICNnZXRQYXJ0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRQYXJ0X0VNZXNzYWdlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcgPGVtPkJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QmluZGluZzwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5RTmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldFFOYW1lKCkKLSAgICogQHNlZSAjZ2V0QmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0QmluZGluZ19RTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVuZGVmaW5lZDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2lzVW5kZWZpbmVkKCkKLSAgICogQHNlZSAjZ2V0QmluZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0QmluZGluZ19VbmRlZmluZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nI2dldEVQb3J0VHlwZSA8ZW0+RVBvcnQgVHlwZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVQb3J0IFR5cGU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRFUG9ydFR5cGUoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRCaW5kaW5nX0VQb3J0VHlwZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRFQmluZGluZ09wZXJhdGlvbnMgPGVtPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVCaW5kaW5nIE9wZXJhdGlvbnM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyNnZXRFQmluZGluZ09wZXJhdGlvbnMoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRCaW5kaW5nX0VCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uIDxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nT3BlcmF0aW9uX05hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVPcGVyYXRpb24gPGVtPkVPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RU9wZXJhdGlvbigpCi0gICAqIEBzZWUgI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRU9wZXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RUJpbmRpbmdJbnB1dCA8ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5FQmluZGluZyBJbnB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nSW5wdXQoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uI2dldEVCaW5kaW5nT3V0cHV0IDxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiNnZXRFQmluZGluZ091dHB1dCgpCi0gICAqIEBzZWUgI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdPdXRwdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RUJpbmRpbmdGYXVsdHMgPGVtPkVCaW5kaW5nIEZhdWx0czwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb24jZ2V0RUJpbmRpbmdGYXVsdHMoKQotICAgKiBAc2VlICNnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRCaW5kaW5nT3BlcmF0aW9uX0VCaW5kaW5nRmF1bHRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UgPGVtPlNlcnZpY2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U2VydmljZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRTZXJ2aWNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5RTmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlI2dldFFOYW1lKCkKLSAgICogQHNlZSAjZ2V0U2VydmljZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U2VydmljZV9RTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVuZGVmaW5lZDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlI2lzVW5kZWZpbmVkKCkKLSAgICogQHNlZSAjZ2V0U2VydmljZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0U2VydmljZV9VbmRlZmluZWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UjZ2V0RVBvcnRzIDxlbT5FUG9ydHM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVQb3J0czwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlI2dldEVQb3J0cygpCi0gICAqIEBzZWUgI2dldFNlcnZpY2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldFNlcnZpY2VfRVBvcnRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQgPGVtPlBvcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9ydDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRQb3J0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydCNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0I2dldE5hbWUoKQotICAgKiBAc2VlICNnZXRQb3J0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRQb3J0X05hbWUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0I2dldEVCaW5kaW5nIDxlbT5FQmluZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVCaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQjZ2V0RUJpbmRpbmcoKQotICAgKiBAc2VlICNnZXRQb3J0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRQb3J0X0VCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50I2lzUmVxdWlyZWQgPGVtPlJlcXVpcmVkPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVxdWlyZWQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQjaXNSZXF1aXJlZCgpCi0gICAqIEBzZWUgI2dldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9SZXF1aXJlZCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50I2dldEVsZW1lbnRUeXBlIDxlbT5FbGVtZW50IFR5cGU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FbGVtZW50IFR5cGU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQjZ2V0RWxlbWVudFR5cGUoKQotICAgKiBAc2VlICNnZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRfRWxlbWVudFR5cGUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiA8ZW0+RGVmaW5pdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZWZpbml0aW9uPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldERlZmluaXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldFRhcmdldE5hbWVzcGFjZSA8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRUYXJnZXROYW1lc3BhY2UoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXREZWZpbml0aW9uX1RhcmdldE5hbWVzcGFjZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9jYXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRMb2NhdGlvbigpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldERlZmluaXRpb25fTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlFOYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0UU5hbWUoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXREZWZpbml0aW9uX1FOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFbmNvZGluZyA8ZW0+RW5jb2Rpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FbmNvZGluZzwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVuY29kaW5nKCkKLSAgICogQHNlZSAjZ2V0RGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0RGVmaW5pdGlvbl9FbmNvZGluZygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFSW1wb3J0cyA8ZW0+RUltcG9ydHM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVJbXBvcnRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RUltcG9ydHMoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VJbXBvcnRzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFVHlwZXMgPGVtPkVUeXBlczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkVUeXBlczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVUeXBlcygpCi0gICAqIEBzZWUgI2dldERlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldERlZmluaXRpb25fRVR5cGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVNZXNzYWdlcyA8ZW0+RU1lc3NhZ2VzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FTWVzc2FnZXM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFTWVzc2FnZXMoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VNZXNzYWdlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFUG9ydFR5cGVzIDxlbT5FUG9ydCBUeXBlczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RVBvcnQgVHlwZXM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFUG9ydFR5cGVzKCkKLSAgICogQHNlZSAjZ2V0RGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FUG9ydFR5cGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVCaW5kaW5ncyA8ZW0+RUJpbmRpbmdzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FQmluZGluZ3M8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFQmluZGluZ3MoKQotICAgKiBAc2VlICNnZXREZWZpbml0aW9uKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VCaW5kaW5ncygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiNnZXRFU2VydmljZXMgPGVtPkVTZXJ2aWNlczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RVNlcnZpY2VzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RVNlcnZpY2VzKCkKLSAgICogQHNlZSAjZ2V0RGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FU2VydmljZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24jZ2V0RU5hbWVzcGFjZXMgPGVtPkVOYW1lc3BhY2VzPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5FTmFtZXNwYWNlczwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uI2dldEVOYW1lc3BhY2VzKCkKLSAgICogQHNlZSAjZ2V0RGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0RGVmaW5pdGlvbl9FTmFtZXNwYWNlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQgPGVtPkltcG9ydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbXBvcnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJbXBvcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQHNlZSAjZ2V0SW1wb3J0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldExvY2F0aW9uVVJJIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbiBVUkk8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldExvY2F0aW9uVVJJKCkKLSAgICogQHNlZSAjZ2V0SW1wb3J0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRJbXBvcnRfTG9jYXRpb25VUkkoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0RURlZmluaXRpb24gPGVtPkVEZWZpbml0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RURlZmluaXRpb248L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldEVEZWZpbml0aW9uKCkKLSAgICogQHNlZSAjZ2V0SW1wb3J0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRJbXBvcnRfRURlZmluaXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQjZ2V0RVNjaGVtYSA8ZW0+RVNjaGVtYTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVTY2hlbWE8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0I2dldEVTY2hlbWEoKQotICAgKiBAc2VlICNnZXRJbXBvcnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFUmVmZXJlbmNlIGdldEltcG9ydF9FU2NoZW1hKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50IDxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RXh0ZW5zaWJsZSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRFeHRlbnNpYmxlRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cyA8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50I2dldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgKiBAc2VlICNnZXRFeHRlbnNpYmxlRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0RXh0ZW5zaWJsZUVsZW1lbnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dCA8ZW0+SW5wdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW5wdXQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dCA8ZW0+T3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk91dHB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldE91dHB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdCA8ZW0+RmF1bHQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCA8ZW0+QmluZGluZyBJbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0QmluZGluZ0lucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCNnZXROYW1lKCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ0lucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nSW5wdXRfTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dCNnZXRFSW5wdXQgPGVtPkVJbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVJbnB1dDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQjZ2V0RUlucHV0KCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ0lucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRCaW5kaW5nSW5wdXRfRUlucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQgPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJpbmRpbmcgT3V0cHV0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQjZ2V0TmFtZSgpCi0gICAqIEBzZWUgI2dldEJpbmRpbmdPdXRwdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldEJpbmRpbmdPdXRwdXRfTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQjZ2V0RU91dHB1dCA8ZW0+RU91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dCNnZXRFT3V0cHV0KCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ091dHB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0QmluZGluZ091dHB1dF9FT3V0cHV0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCA8ZW0+QmluZGluZyBGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0QmluZGluZ0ZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCNnZXROYW1lKCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ0ZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nRmF1bHRfTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdCNnZXRFRmF1bHQgPGVtPkVGYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQjZ2V0RUZhdWx0KCkKLSAgICogQHNlZSAjZ2V0QmluZGluZ0ZhdWx0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRCaW5kaW5nRmF1bHRfRUZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSA8ZW0+TmFtZXNwYWNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk5hbWVzcGFjZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldE5hbWVzcGFjZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSNnZXRVUkkgPGVtPlVSSTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVSSTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2UjZ2V0VVJJKCkKLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUF0dHJpYnV0ZSBnZXROYW1lc3BhY2VfVVJJKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlI2dldFByZWZpeCA8ZW0+UHJlZml4PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UHJlZml4PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZSNnZXRQcmVmaXgoKQotICAgKiBAc2VlICNnZXROYW1lc3BhY2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQXR0cmlidXRlIGdldE5hbWVzcGFjZV9QcmVmaXgoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5Qb3J0VHlwZSA8ZW0+SVBvcnQgVHlwZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JUG9ydCBUeXBlPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuUG9ydFR5cGUKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuUG9ydFR5cGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJUG9ydFR5cGUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5PcGVyYXRpb24gPGVtPklPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLk9wZXJhdGlvbgotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5PcGVyYXRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuSW5wdXQgPGVtPklJbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JSW5wdXQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5JbnB1dAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5JbnB1dCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElJbnB1dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLk91dHB1dCA8ZW0+SU91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JT3V0cHV0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuT3V0cHV0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLk91dHB1dCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElPdXRwdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5GYXVsdCA8ZW0+SUZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklGYXVsdDwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLkZhdWx0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLkZhdWx0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUZhdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuTWVzc2FnZSA8ZW0+SU1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SU1lc3NhZ2U8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5NZXNzYWdlCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLk1lc3NhZ2UiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlBhcnQgPGVtPklQYXJ0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklQYXJ0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuUGFydAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5QYXJ0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVBhcnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5TZXJ2aWNlIDxlbT5JU2VydmljZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JU2VydmljZTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLlNlcnZpY2UKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuU2VydmljZSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElTZXJ2aWNlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuUG9ydCA8ZW0+SVBvcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVBvcnQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5Qb3J0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLlBvcnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJUG9ydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmcgPGVtPklCaW5kaW5nPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklCaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZwotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5CaW5kaW5nIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUJpbmRpbmcoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIDxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbgotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUJpbmRpbmdPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQgPGVtPklCaW5kaW5nIElucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklCaW5kaW5nIElucHV0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ0lucHV0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLkJpbmRpbmdJbnB1dCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElCaW5kaW5nSW5wdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IDxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUJpbmRpbmcgT3V0cHV0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ091dHB1dAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUJpbmRpbmdPdXRwdXQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQgPGVtPklCaW5kaW5nIEZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklCaW5kaW5nIEZhdWx0PC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLkJpbmRpbmdGYXVsdCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElCaW5kaW5nRmF1bHQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5EZWZpbml0aW9uIDxlbT5JRGVmaW5pdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JRGVmaW5pdGlvbjwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLkRlZmluaXRpb24KLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuRGVmaW5pdGlvbiIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElEZWZpbml0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuSW1wb3J0IDxlbT5JSW1wb3J0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklJbXBvcnQ8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5JbXBvcnQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuSW1wb3J0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUltcG9ydCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuTGlzdCA8ZW0+SUxpc3Q8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUxpc3Q8L2VtPicuCi0gICAqIEBzZWUgamF2YS51dGlsLkxpc3QKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmEudXRpbC5MaXN0IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SUxpc3QoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLk1hcCA8ZW0+SU1hcDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JTWFwPC9lbT4nLgotICAgKiBAc2VlIGphdmEudXRpbC5NYXAKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmEudXRpbC5NYXAiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJTWFwKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmEubmV0LlVSTCA8ZW0+SVVSTDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JVVJMPC9lbT4nLgotICAgKiBAc2VlIGphdmEubmV0LlVSTAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YS5uZXQuVVJMIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0SVVSTCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkgPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SUV4dGVuc2lvbiBSZWdpc3RyeTwvZW0+Jy4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeSIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElFeHRlbnNpb25SZWdpc3RyeSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcyA8ZW0+VHlwZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VHlwZXM8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXMKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFR5cGVzKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5JdGVyYXRvciA8ZW0+SUl0ZXJhdG9yPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklJdGVyYXRvcjwvZW0+Jy4KLSAgICogQHNlZSBqYXZhLnV0aWwuSXRlcmF0b3IKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmEudXRpbC5JdGVyYXRvciIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldElJdGVyYXRvcigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlR5cGVzIDxlbT5JVHlwZXM8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SVR5cGVzPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LndzZGwuVHlwZXMKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LndzZGwuVHlwZXMiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRJVHlwZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRUNsYXNzIGdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50I2dldENoaWxkcmVuIDxlbT5DaGlsZHJlbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+Q2hpbGRyZW48L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50I2dldENoaWxkcmVuKCkKLSAgICogQHNlZSAjZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRfQ2hpbGRyZW4oKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVDbGFzcyBnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50I2dldFNjaGVtYSA8ZW0+U2NoZW1hPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+U2NoZW1hPC9lbT4nLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50I2dldFNjaGVtYSgpCi0gICAqIEBzZWUgI2dldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRVJlZmVyZW5jZSBnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWEoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSA8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWVzc2FnZSBSZWZlcmVuY2U8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFQ2xhc3MgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSNnZXROYW1lKCkKLSAgICogQHNlZSAjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZVJlZmVyZW5jZV9OYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZSNnZXRFTWVzc2FnZSA8ZW0+RU1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FTWVzc2FnZTwvZW0+Jy4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlI2dldEVNZXNzYWdlKCkKLSAgICogQHNlZSAjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZV9FTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSA8ZW0+UU5hbWU8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPlFOYW1lPC9lbT4nLgotICAgKiBAc2VlIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVEYXRhVHlwZSBnZXRRTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlIDxlbT5PcGVyYXRpb24gVHlwZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+T3BlcmF0aW9uIFR5cGU8L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLk9wZXJhdGlvblR5cGUiCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVEYXRhVHlwZSBnZXRPcGVyYXRpb25UeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBvcmcudzNjLmRvbS5FbGVtZW50IDxlbT5ET00gRWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+RE9NIEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLnczYy5kb20uRWxlbWVudAotICAgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0ib3JnLnczYy5kb20uRWxlbWVudCIKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgRURhdGFUeXBlIGdldERPTUVsZW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbiA8ZW0+RXhjZXB0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5FeGNlcHRpb248L2VtPicuCi0gICAqIEBzZWUgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uCi0gICAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZheC53c2RsLldTRExFeGNlcHRpb24iCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIEVEYXRhVHlwZSBnZXRXU0RMRXhjZXB0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBvcmcudzNjLmRvbS5Eb2N1bWVudCA8ZW0+RE9NIERvY3VtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJzxlbT5ET00gRG9jdW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgb3JnLnczYy5kb20uRG9jdW1lbnQKLSAgICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9Im9yZy53M2MuZG9tLkRvY3VtZW50IgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBFRGF0YVR5cGUgZ2V0RE9NRG9jdW1lbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgV1NETEZhY3RvcnkgZ2V0V1NETEZhY3RvcnkoKTsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotICAgKiA8dWw+Ci0gICAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAgICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAgICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gICAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBpbnRlcmZhY2UgTGl0ZXJhbHMKLSAgewotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbCA8ZW0+RWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRXU0RMRWxlbWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBXU0RMX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0V1NETEVsZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0V1NETEVsZW1lbnRfRG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFdTRExfRUxFTUVOVF9fRUxFTUVOVCA9IGVJTlNUQU5DRS5nZXRXU0RMRWxlbWVudF9FbGVtZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0VHlwZUltcGwgPGVtPlBvcnQgVHlwZTwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydFR5cGVJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRQb3J0VHlwZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBQT1JUX1RZUEUgPSBlSU5TVEFOQ0UuZ2V0UG9ydFR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5RTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBQT1JUX1RZUEVfX1FOQU1FID0gZUlOU1RBTkNFLmdldFBvcnRUeXBlX1FOYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VW5kZWZpbmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFBPUlRfVFlQRV9fVU5ERUZJTkVEID0gZUlOU1RBTkNFLmdldFBvcnRUeXBlX1VuZGVmaW5lZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVPcGVyYXRpb25zPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgUE9SVF9UWVBFX19FT1BFUkFUSU9OUyA9IGVJTlNUQU5DRS5nZXRQb3J0VHlwZV9FT3BlcmF0aW9ucygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbCA8ZW0+T3BlcmF0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRPcGVyYXRpb24oKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgT1BFUkFUSU9OID0gZUlOU1RBTkNFLmdldE9wZXJhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0eWxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIE9QRVJBVElPTl9fU1RZTEUgPSBlSU5TVEFOQ0UuZ2V0T3BlcmF0aW9uX1N0eWxlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBPUEVSQVRJT05fX05BTUUgPSBlSU5TVEFOQ0UuZ2V0T3BlcmF0aW9uX05hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgT1BFUkFUSU9OX19VTkRFRklORUQgPSBlSU5TVEFOQ0UuZ2V0T3BlcmF0aW9uX1VuZGVmaW5lZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBPUEVSQVRJT05fX0VJTlBVVCA9IGVJTlNUQU5DRS5nZXRPcGVyYXRpb25fRUlucHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBPUEVSQVRJT05fX0VPVVRQVVQgPSBlSU5TVEFOQ0UuZ2V0T3BlcmF0aW9uX0VPdXRwdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FRmF1bHRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgT1BFUkFUSU9OX19FRkFVTFRTID0gZUlOU1RBTkNFLmdldE9wZXJhdGlvbl9FRmF1bHRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBhcmFtZXRlciBPcmRlcmluZzwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIE9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORyA9IGVJTlNUQU5DRS5nZXRPcGVyYXRpb25fRVBhcmFtZXRlck9yZGVyaW5nKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlSW1wbCA8ZW0+TWVzc2FnZTwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZUltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldE1lc3NhZ2UoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgTUVTU0FHRSA9IGVJTlNUQU5DRS5nZXRNZXNzYWdlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgTUVTU0FHRV9fUU5BTUUgPSBlSU5TVEFOQ0UuZ2V0TWVzc2FnZV9RTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVuZGVmaW5lZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBNRVNTQUdFX19VTkRFRklORUQgPSBlSU5TVEFOQ0UuZ2V0TWVzc2FnZV9VbmRlZmluZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FUGFydHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBNRVNTQUdFX19FUEFSVFMgPSBlSU5TVEFOQ0UuZ2V0TWVzc2FnZV9FUGFydHMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBhcnRJbXBsIDxlbT5QYXJ0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0UGFydCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBQQVJUID0gZUlOU1RBTkNFLmdldFBhcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFBBUlRfX05BTUUgPSBlSU5TVEFOQ0UuZ2V0UGFydF9OYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFBBUlRfX0VMRU1FTlRfTkFNRSA9IGVJTlNUQU5DRS5nZXRQYXJ0X0VsZW1lbnROYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFBBUlRfX1RZUEVfTkFNRSA9IGVJTlNUQU5DRS5nZXRQYXJ0X1R5cGVOYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFBBUlRfX1RZUEVfREVGSU5JVElPTiA9IGVJTlNUQU5DRS5nZXRQYXJ0X1R5cGVEZWZpbml0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWxlbWVudCBEZWNsYXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBQQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OID0gZUlOU1RBTkNFLmdldFBhcnRfRWxlbWVudERlY2xhcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgUEFSVF9fRU1FU1NBR0UgPSBlSU5TVEFOQ0UuZ2V0UGFydF9FTWVzc2FnZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ltcGwgPGVtPkJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRCaW5kaW5nKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEJJTkRJTkcgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIEJJTkRJTkdfX1FOQU1FID0gZUlOU1RBTkNFLmdldEJpbmRpbmdfUU5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgQklORElOR19fVU5ERUZJTkVEID0gZUlOU1RBTkNFLmdldEJpbmRpbmdfVW5kZWZpbmVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBvcnQgVHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBCSU5ESU5HX19FUE9SVF9UWVBFID0gZUlOU1RBTkNFLmdldEJpbmRpbmdfRVBvcnRUeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3BlcmF0aW9uczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIEJJTkRJTkdfX0VCSU5ESU5HX09QRVJBVElPTlMgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ19FQmluZGluZ09wZXJhdGlvbnMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPcGVyYXRpb25JbXBsIDxlbT5CaW5kaW5nIE9wZXJhdGlvbjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEJpbmRpbmdPcGVyYXRpb24oKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgQklORElOR19PUEVSQVRJT04gPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ09wZXJhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgQklORElOR19PUEVSQVRJT05fX05BTUUgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ09wZXJhdGlvbl9OYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU9wZXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBCSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nT3BlcmF0aW9uX0VPcGVyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZyBJbnB1dDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBCSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0lucHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RUJpbmRpbmcgT3V0cHV0PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ091dHB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nIEZhdWx0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFMgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0ZhdWx0cygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGwgPGVtPlNlcnZpY2U8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRTZXJ2aWNlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFNFUlZJQ0UgPSBlSU5TVEFOQ0UuZ2V0U2VydmljZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlFOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIFNFUlZJQ0VfX1FOQU1FID0gZUlOU1RBTkNFLmdldFNlcnZpY2VfUU5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbmRlZmluZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgU0VSVklDRV9fVU5ERUZJTkVEID0gZUlOU1RBTkNFLmdldFNlcnZpY2VfVW5kZWZpbmVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBvcnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgU0VSVklDRV9fRVBPUlRTID0gZUlOU1RBTkNFLmdldFNlcnZpY2VfRVBvcnRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0SW1wbCA8ZW0+UG9ydDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFBvcnQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgUE9SVCA9IGVJTlNUQU5DRS5nZXRQb3J0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBQT1JUX19OQU1FID0gZUlOU1RBTkNFLmdldFBvcnRfTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVCaW5kaW5nPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIFBPUlRfX0VCSU5ESU5HID0gZUlOU1RBTkNFLmdldFBvcnRfRUJpbmRpbmcoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCA8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEVYVEVOU0lCSUxJVFlfRUxFTUVOVCA9IGVJTlNUQU5DRS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIEVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fUkVRVUlSRUQgPSBlSU5TVEFOQ0UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRfUmVxdWlyZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbGVtZW50IFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUgPSBlSU5TVEFOQ0UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRfRWxlbWVudFR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsIDxlbT5EZWZpbml0aW9uPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0RGVmaW5pdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBERUZJTklUSU9OID0gZUlOU1RBTkNFLmdldERlZmluaXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgTmFtZXNwYWNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIERFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0UgPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9UYXJnZXROYW1lc3BhY2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBERUZJTklUSU9OX19MT0NBVElPTiA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0xvY2F0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UU5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgREVGSU5JVElPTl9fUU5BTUUgPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9RTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVuY29kaW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIERFRklOSVRJT05fX0VOQ09ESU5HID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fRW5jb2RpbmcoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FSW1wb3J0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIERFRklOSVRJT05fX0VJTVBPUlRTID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fRUltcG9ydHMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FVHlwZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgREVGSU5JVElPTl9fRVRZUEVTID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fRVR5cGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU1lc3NhZ2VzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgREVGSU5JVElPTl9fRU1FU1NBR0VTID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fRU1lc3NhZ2VzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVBvcnQgVHlwZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBERUZJTklUSU9OX19FUE9SVF9UWVBFUyA9IGVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VQb3J0VHlwZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FQmluZGluZ3M8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBERUZJTklUSU9OX19FQklORElOR1MgPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FU2VydmljZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBERUZJTklUSU9OX19FU0VSVklDRVMgPSBlSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FU2VydmljZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTmFtZXNwYWNlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIERFRklOSVRJT05fX0VOQU1FU1BBQ0VTID0gZUlOU1RBTkNFLmdldERlZmluaXRpb25fRU5hbWVzcGFjZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGwgPGVtPkltcG9ydDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SW1wb3J0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElNUE9SVCA9IGVJTlNUQU5DRS5nZXRJbXBvcnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lc3BhY2UgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIElNUE9SVF9fTkFNRVNQQUNFX1VSSSA9IGVJTlNUQU5DRS5nZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb24gVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIElNUE9SVF9fTE9DQVRJT05fVVJJID0gZUlOU1RBTkNFLmdldEltcG9ydF9Mb2NhdGlvblVSSSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVEZWZpbml0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFUmVmZXJlbmNlIElNUE9SVF9fRURFRklOSVRJT04gPSBlSU5TVEFOQ0UuZ2V0SW1wb3J0X0VEZWZpbml0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RVNjaGVtYTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBJTVBPUlRfX0VTQ0hFTUEgPSBlSU5TVEFOQ0UuZ2V0SW1wb3J0X0VTY2hlbWEoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkV4dGVuc2libGVFbGVtZW50SW1wbCA8ZW0+RXh0ZW5zaWJsZSBFbGVtZW50PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmxlRWxlbWVudEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEV4dGVuc2libGVFbGVtZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEVYVEVOU0lCTEVfRUxFTUVOVCA9IGVJTlNUQU5DRS5nZXRFeHRlbnNpYmxlRWxlbWVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVFeHRlbnNpYmlsaXR5IEVsZW1lbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgRVhURU5TSUJMRV9FTEVNRU5UX19FRVhURU5TSUJJTElUWV9FTEVNRU5UUyA9IGVJTlNUQU5DRS5nZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbnB1dEltcGwgPGVtPklucHV0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbnB1dEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElucHV0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElOUFVUID0gZUlOU1RBTkNFLmdldElucHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PdXRwdXRJbXBsIDxlbT5PdXRwdXQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk91dHB1dEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldE91dHB1dCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBPVVRQVVQgPSBlSU5TVEFOQ0UuZ2V0T3V0cHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5GYXVsdEltcGwgPGVtPkZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5GYXVsdEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIEZBVUxUID0gZUlOU1RBTkNFLmdldEZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsIDxlbT5CaW5kaW5nIElucHV0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRCaW5kaW5nSW5wdXQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgQklORElOR19JTlBVVCA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nSW5wdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIEJJTkRJTkdfSU5QVVRfX05BTUUgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ0lucHV0X05hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FSW5wdXQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgQklORElOR19JTlBVVF9fRUlOUFVUID0gZUlOU1RBTkNFLmdldEJpbmRpbmdJbnB1dF9FSW5wdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPdXRwdXRJbXBsIDxlbT5CaW5kaW5nIE91dHB1dDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ091dHB1dEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEJpbmRpbmdPdXRwdXQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgQklORElOR19PVVRQVVQgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ091dHB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgQklORElOR19PVVRQVVRfX05BTUUgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ091dHB1dF9OYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RU91dHB1dDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBCSU5ESU5HX09VVFBVVF9fRU9VVFBVVCA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nT3V0cHV0X0VPdXRwdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdGYXVsdEltcGwgPGVtPkJpbmRpbmcgRmF1bHQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdGYXVsdEltcGwKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldEJpbmRpbmdGYXVsdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBCSU5ESU5HX0ZBVUxUID0gZUlOU1RBTkNFLmdldEJpbmRpbmdGYXVsdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVBdHRyaWJ1dGUgQklORElOR19GQVVMVF9fTkFNRSA9IGVJTlNUQU5DRS5nZXRCaW5kaW5nRmF1bHRfTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVGYXVsdDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBCSU5ESU5HX0ZBVUxUX19FRkFVTFQgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ0ZhdWx0X0VGYXVsdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTmFtZXNwYWNlSW1wbCA8ZW0+TmFtZXNwYWNlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5OYW1lc3BhY2VJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXROYW1lc3BhY2UoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgTkFNRVNQQUNFID0gZUlOU1RBTkNFLmdldE5hbWVzcGFjZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBOQU1FU1BBQ0VfX1VSSSA9IGVJTlNUQU5DRS5nZXROYW1lc3BhY2VfVVJJKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UHJlZml4PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQXR0cmlidXRlIE5BTUVTUEFDRV9fUFJFRklYID0gZUlOU1RBTkNFLmdldE5hbWVzcGFjZV9QcmVmaXgoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLlBvcnRUeXBlIDxlbT5JUG9ydCBUeXBlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5Qb3J0VHlwZQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVBvcnRUeXBlKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElQT1JUX1RZUEUgPSBlSU5TVEFOQ0UuZ2V0SVBvcnRUeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5PcGVyYXRpb24gPGVtPklPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLk9wZXJhdGlvbgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SU9wZXJhdGlvbigpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJT1BFUkFUSU9OID0gZUlOU1RBTkNFLmdldElPcGVyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLklucHV0IDxlbT5JSW5wdXQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLklucHV0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJSW5wdXQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUlOUFVUID0gZUlOU1RBTkNFLmdldElJbnB1dCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuT3V0cHV0IDxlbT5JT3V0cHV0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5PdXRwdXQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElPdXRwdXQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSU9VVFBVVCA9IGVJTlNUQU5DRS5nZXRJT3V0cHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5GYXVsdCA8ZW0+SUZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5GYXVsdAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUZhdWx0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElGQVVMVCA9IGVJTlNUQU5DRS5nZXRJRmF1bHQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLk1lc3NhZ2UgPGVtPklNZXNzYWdlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5NZXNzYWdlCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJTWVzc2FnZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJTUVTU0FHRSA9IGVJTlNUQU5DRS5nZXRJTWVzc2FnZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuUGFydCA8ZW0+SVBhcnQ8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLlBhcnQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElQYXJ0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElQQVJUID0gZUlOU1RBTkNFLmdldElQYXJ0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5TZXJ2aWNlIDxlbT5JU2VydmljZTwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuU2VydmljZQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVNlcnZpY2UoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSVNFUlZJQ0UgPSBlSU5TVEFOQ0UuZ2V0SVNlcnZpY2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLlBvcnQgPGVtPklQb3J0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5Qb3J0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJUG9ydCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJUE9SVCA9IGVJTlNUQU5DRS5nZXRJUG9ydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZyA8ZW0+SUJpbmRpbmc8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmcKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElCaW5kaW5nKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElCSU5ESU5HID0gZUlOU1RBTkNFLmdldElCaW5kaW5nKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIDxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElCaW5kaW5nT3BlcmF0aW9uKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElCSU5ESU5HX09QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRJQmluZGluZ09wZXJhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ0lucHV0IDxlbT5JQmluZGluZyBJbnB1dDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ0lucHV0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJQmluZGluZ0lucHV0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElCSU5ESU5HX0lOUFVUID0gZUlOU1RBTkNFLmdldElCaW5kaW5nSW5wdXQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgPGVtPklCaW5kaW5nIE91dHB1dDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ091dHB1dAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUJpbmRpbmdPdXRwdXQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUJJTkRJTkdfT1VUUFVUID0gZUlOU1RBTkNFLmdldElCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQgPGVtPklCaW5kaW5nIEZhdWx0PC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElCaW5kaW5nRmF1bHQoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUJJTkRJTkdfRkFVTFQgPSBlSU5TVEFOQ0UuZ2V0SUJpbmRpbmdGYXVsdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCA8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElFWFRFTlNJQklMSVRZX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YXgud3NkbC5EZWZpbml0aW9uIDxlbT5JRGVmaW5pdGlvbjwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuRGVmaW5pdGlvbgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SURlZmluaXRpb24oKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSURFRklOSVRJT04gPSBlSU5TVEFOQ0UuZ2V0SURlZmluaXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLkltcG9ydCA8ZW0+SUltcG9ydDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuSW1wb3J0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJSW1wb3J0KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElJTVBPUlQgPSBlSU5TVEFOQ0UuZ2V0SUltcG9ydCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmEudXRpbC5MaXN0IDxlbT5JTGlzdDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmEudXRpbC5MaXN0Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJTGlzdCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJTElTVCA9IGVJTlNUQU5DRS5nZXRJTGlzdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmEudXRpbC5NYXAgPGVtPklNYXA8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZhLnV0aWwuTWFwCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJTWFwKCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIElNQVAgPSBlSU5TVEFOQ0UuZ2V0SU1hcCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmEubmV0LlVSTCA8ZW0+SVVSTDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmEubmV0LlVSTAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0SVVSTCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJVVJMID0gZUlOU1RBTkNFLmdldElVUkwoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkgPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPn0nIGNsYXNzLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElFeHRlbnNpb25SZWdpc3RyeSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJRVhURU5TSU9OX1JFR0lTVFJZID0gZUlOU1RBTkNFLmdldElFeHRlbnNpb25SZWdpc3RyeSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVHlwZXNJbXBsIDxlbT5UeXBlczwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVHlwZXNJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRUeXBlcygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBUWVBFUyA9IGVJTlNUQU5DRS5nZXRUeXBlcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmEudXRpbC5JdGVyYXRvciA8ZW0+SUl0ZXJhdG9yPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YS51dGlsLkl0ZXJhdG9yCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRJSXRlcmF0b3IoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFQ2xhc3MgSUlURVJBVE9SID0gZUlOU1RBTkNFLmdldElJdGVyYXRvcigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIGphdmF4LndzZGwuVHlwZXMgPGVtPklUeXBlczwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuVHlwZXMKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldElUeXBlcygpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBJVFlQRVMgPSBlSU5TVEFOQ0UuZ2V0SVR5cGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIDxlbT5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUNsYXNzIFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UID0gZUlOU1RBTkNFLmdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNoaWxkcmVuPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVSZWZlcmVuY2UgVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOID0gZUlOU1RBTkNFLmdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudF9DaGlsZHJlbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIDxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+fScgY2xhc3MuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVCA9IGVJTlNUQU5DRS5nZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNjaGVtYTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BID0gZUlOU1RBTkNFLmdldFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50X1NjaGVtYSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZVJlZmVyZW5jZUltcGwgPGVtPk1lc3NhZ2UgUmVmZXJlbmNlPC9lbT59JyBjbGFzcy4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlUmVmZXJlbmNlSW1wbAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVDbGFzcyBNRVNTQUdFX1JFRkVSRU5DRSA9IGVJTlNUQU5DRS5nZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRUF0dHJpYnV0ZSBNRVNTQUdFX1JFRkVSRU5DRV9fTkFNRSA9IGVJTlNUQU5DRS5nZXRNZXNzYWdlUmVmZXJlbmNlX05hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FTWVzc2FnZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRVJlZmVyZW5jZSBNRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UgPSBlSU5TVEFOQ0UuZ2V0TWVzc2FnZVJlZmVyZW5jZV9FTWVzc2FnZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPlFOYW1lPC9lbT4nIGRhdGEgdHlwZS4KLSAgICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgICAqIEBzZWUgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0UU5hbWUoKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFRGF0YVR5cGUgUU5BTUUgPSBlSU5TVEFOQ0UuZ2V0UU5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5PcGVyYXRpb24gVHlwZTwvZW0+JyBkYXRhIHR5cGUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMUGFja2FnZUltcGwjZ2V0T3BlcmF0aW9uVHlwZSgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVEYXRhVHlwZSBPUEVSQVRJT05fVFlQRSA9IGVJTlNUQU5DRS5nZXRPcGVyYXRpb25UeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+RE9NIEVsZW1lbnQ8L2VtPicgZGF0YSB0eXBlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBvcmcudzNjLmRvbS5FbGVtZW50Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRET01FbGVtZW50KCkKLSAgICAgKiBAZ2VuZXJhdGVkCi0gICAgICovCi0gICAgRURhdGFUeXBlIERPTV9FTEVNRU5UID0gZUlOU1RBTkNFLmdldERPTUVsZW1lbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5FeGNlcHRpb248L2VtPicgZGF0YSB0eXBlLgotICAgICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAgICogQHNlZSBqYXZheC53c2RsLldTRExFeGNlcHRpb24KLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETFBhY2thZ2VJbXBsI2dldFdTRExFeGNlcHRpb24oKQotICAgICAqIEBnZW5lcmF0ZWQKLSAgICAgKi8KLSAgICBFRGF0YVR5cGUgV1NETF9FWENFUFRJT04gPSBlSU5TVEFOQ0UuZ2V0V1NETEV4Y2VwdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPkRPTSBEb2N1bWVudDwvZW0+JyBkYXRhIHR5cGUuCi0gICAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICAgKiBAc2VlIG9yZy53M2MuZG9tLkRvY3VtZW50Ci0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbCNnZXRET01Eb2N1bWVudCgpCi0gICAgICogQGdlbmVyYXRlZAotICAgICAqLwotICAgIEVEYXRhVHlwZSBET01fRE9DVU1FTlQgPSBlSU5TVEFOQ0UuZ2V0RE9NRG9jdW1lbnQoKTsKLQotICB9Ci0KLX0gLy9XU0RMUGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFmNzY1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL1dTRExQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZXh0ZW5zaWJpbGl0eS5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZXh0ZW5zaWJpbGl0eS5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeVJlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeTsKLQotCi0vKioKLSAqIFRoZSA8Yj5QbHVnaW48L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBUaGUgV1NETCBtb2RlbCBuZWVkcyB0byBiZSBhYmxlIHRvIHJ1biB3aXRoaW4gYW4gRWNsaXBzZSB3b3JrYmVuY2gsCi0gKiB3aXRoaW4gYSBoZWFkbGVzcyBFY2xpcHNlIHdvcmtzcGFjZSwgb3IganVzdCBzdGFuZC1hbG9uZSBhcyBwYXJ0IAotICogb2Ygc29tZSBvdGhlciBhcHBsaWNhdGlvbi4KLSAqIFRvIHN1cHBvcnQgdGhpcywgYWxsIGFjY2VzcyBpcyBkaXJlY3RlZCB0byB0aGUgc3RhdGljIG1ldGhvZHMsCi0gKiB3aGljaCBjYW4gcmVkaXJlY3QgdGhlIHNlcnZpY2UgYXMgYXBwb3ByaWF0ZSB0byB0aGUgcnVudGltZS4KLSAqIER1cmluZyBzdGFuZC1hbG9uZSBpbnZvY2F0aW9uIG5vIHBsdWdpbiBpbml0aWFsaXphdGlvbiB0YWtlcyBwbGFjZS4KLSAqIEluIHRoaXMgY2FzZSB5b3Ugd2lsbCBuZWVkIHRoZSByZXNvdXJjZXMgamFyIG9uIHRoZSBjbGFzcyBwYXRoLgotICogQHNlZSAjZ2V0QmFzZVVSTAotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0bwotICogY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbgotICogKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFdTRExQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4KLXsKLSAgLyoqCi0gICAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBsdWdpbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV1NETFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBXU0RMUGx1Z2luKCk7Ci0KLSAgLyoqCi0gICAqIFRoZSBvbmUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgICovCi0gIHN0YXRpYyBXU0RMUGx1Z2luSW1wbGVtZW50YXRpb24gcGx1Z2luOwotCi0gIHByaXZhdGUgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlJbXBsIGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5OwotCi0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCi0gICAqLwotICBwcml2YXRlIFdTRExQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIobmV3IFJlc291cmNlTG9jYXRvciBbXXt9KTsKLSAgfQotCi0gIC8qCi0gICAqIEphdmFkb2MgY29waWVkIGZyb20gYmFzZSBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkKLSAgewotICAgIHJldHVybiBwbHVnaW47Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KLSAgICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMUGx1Z2luSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkKLSAgewotICAgIHJldHVybiBwbHVnaW47Ci0gIH0KLQotICBwcml2YXRlIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5SW1wbCBpbnRlcm5hbEdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCkKLSAgewotICAgIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSA9PSBudWxsKQotICAgIHsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5ID0gbmV3IEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5SW1wbCgpOwotICAgICAgaWYgKHBsdWdpbiAhPSBudWxsKQotICAgICAgewotICAgICAgICBuZXcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlSZWFkZXIoZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkpLnJlYWRSZWdpc3RyeSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk7Ci0gIH0KLQotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgcmV0dXJuIGludGVybmFsR2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkobmFtZXNwYWNlKTsKLSAgfQotCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gaW50ZXJuYWxHZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpOwotICB9Ci0KLSAgcHVibGljIFdTRExGYWN0b3J5IGNyZWF0ZVdTREw0SkZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvV1NETFBsdWdpbkltcGxlbWVudGF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYjZlYjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9XU0RMUGx1Z2luSW1wbGVtZW50YXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW4uRWNsaXBzZVBsdWdpbjsKLQotCi0vKioKLSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KLSAqIDxwPgotICogPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSAqIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4KLSAqIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMUGx1Z2luSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luCi17Ci0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgotICAgKi8KLSAgcHVibGljIFdTRExQbHVnaW5JbXBsZW1lbnRhdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotCi0gICAgLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KLSAgICAvLwotICAgIFdTRExQbHVnaW4ucGx1Z2luID0gdGhpczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2ZjMTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuCi0gKiBAc2luY2UgMS4wCi0gKiBAaWdub3JlCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCNnZXRTY2hlbWEgPGVtPlNjaGVtYTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICogQG1vZGVsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2NoZW1hPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDxwPgotICAgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TY2hlbWE8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotICAgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0gICAqIDwvcD4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNjaGVtYTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFNjaGVtYShYU0RTY2hlbWEpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UjZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfU2NoZW1hKCkKLSAgICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBYU0RTY2hlbWEgZ2V0U2NoZW1hKCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50I2dldFNjaGVtYSA8ZW0+U2NoZW1hPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TY2hlbWE8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRTY2hlbWEoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICB2b2lkIHNldFNjaGVtYShYU0RTY2hlbWEgdmFsdWUpOwotCi19IC8vIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2V4dGVuc2liaWxpdHkvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9leHRlbnNpYmlsaXR5L0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk3Mjk4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2V4dGVuc2liaWxpdHkvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5leHRlbnNpYmlsaXR5OwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLkV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0KLXB1YmxpYyBjbGFzcyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yCi17Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBDTEFTU19MT0FESU5HX0VSUk9SID0gIkNMQVNTX0xPQURJTkdfRVJST1IiOwotCi0gIHByb3RlY3RlZCBCdW5kbGUgYnVuZGxlOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgY2xhc3NOYW1lOwotCi0gIHByb3RlY3RlZCBPYmplY3QgZmFjdG9yeTsKLQotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvcihTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBCdW5kbGUgYnVuZGxlKQotICB7Ci0gICAgdGhpcy5idW5kbGUgPSBidW5kbGU7Ci0gICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIH0KLQotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGdldEV4dGVuc2libGl0eUVsZW1lbnRGYWN0b3J5KCkKLSAgewotICAgIGlmIChmYWN0b3J5ID09IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIENsYXNzIHRoZUNsYXNzID0gYnVuZGxlLmxvYWRDbGFzcyhjbGFzc05hbWUpOwotICAgICAgICBmYWN0b3J5ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSl0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBmYWN0b3J5ID0gQ0xBU1NfTE9BRElOR19FUlJPUjsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhY3RvcnkgIT0gQ0xBU1NfTE9BRElOR19FUlJPUiA/IChFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkpZmFjdG9yeSA6IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFeHRlbnNpYmxpdHlFbGVtZW50RmFjdG9yeShFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgZmFjdG9yeSkKLSAgewotICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZXh0ZW5zaWJpbGl0eS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZXh0ZW5zaWJpbGl0eS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI2M2ZiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2V4dGVuc2liaWxpdHkvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmV4dGVuc2liaWxpdHk7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeTsKLQotCi1wdWJsaWMgY2xhc3MgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlJbXBsIGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkKLXsKLSAgcHJvdGVjdGVkIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLQotICBwdWJsaWMgdm9pZCBwdXQoU3RyaW5nIG5hbWVzcGFjZSwgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICB7Ci0gICAgbWFwLnB1dChuYW1lc3BhY2UsIGRlc2NyaXB0b3IpOwotICB9Ci0KLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSByZXN1bHQgPSBudWxsOwotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IChFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yKW1hcC5nZXQobmFtZXNwYWNlKTsKLSAgICBpZiAoZGVzY3JpcHRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGRlc2NyaXB0b3IuZ2V0RXh0ZW5zaWJsaXR5RWxlbWVudEZhY3RvcnkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRmFjdG9yeShTdHJpbmcgbmFtZXNwYWNlLCBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgZmFjdG9yeSkKLSAgewotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IG5ldyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yKG51bGwsIG5hbWVzcGFjZSwgbnVsbCk7Ci0gICAgZGVzY3JpcHRvci5zZXRFeHRlbnNpYmxpdHlFbGVtZW50RmFjdG9yeShmYWN0b3J5KTsKLSAgICBtYXAucHV0KG5hbWVzcGFjZSwgZGVzY3JpcHRvcik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZXh0ZW5zaWJpbGl0eS9FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeVJlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9leHRlbnNpYmlsaXR5L0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkOGI0ZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9leHRlbnNpYmlsaXR5L0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5UmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmV4dGVuc2liaWxpdHk7Ci0KLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0KLXB1YmxpYyBjbGFzcyBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSBXU0RMUGx1Z2luLmdldFBsdWdpbigpLmdldFN5bWJvbGljTmFtZSgpOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVEVOU0lPTl9QT0lOVF9JRCA9ICJleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcmllcyI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9OQU1FID0gImV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0KLSAgcHJvdGVjdGVkIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5SW1wbCBleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeTsKLQotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlSZWFkZXIoRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnlJbXBsIGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5leHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSA9IGV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIHJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIHBhcnNlIGl0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZFJlZ2lzdHJ5KCkKLSAgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSBwbHVnaW5SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUV4dGVuc2lvblBvaW50IHBvaW50ID0gcGx1Z2luUmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoUExVR0lOX0lELCBFWFRFTlNJT05fUE9JTlRfSUQpOwotICAgIGlmIChwb2ludCAhPSBudWxsKQotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gcG9pbnQuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICByZWFkRWxlbWVudChlbGVtZW50c1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyByZXNvbHZlKFVSTCBwbGF0Zm9ybVVSTCwgU3RyaW5nIHJlbGF0aXZlUGF0aCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgVVJMIHJlc29sdmVkVVJMID0gRmlsZUxvY2F0b3IucmVzb2x2ZShwbGF0Zm9ybVVSTCk7Ci0gICAgcmV0dXJuIHJlc29sdmVkVVJMLnRvU3RyaW5nKCkgKyByZWxhdGl2ZVBhdGg7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMoRUxFTUVOVF9OQU1FKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNoaWxkRWxlbWVudCA9IChJQ29uZmlndXJhdGlvbkVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGNoaWxkRWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX05BTUVTUEFDRSk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEJ1bmRsZSBwbHVnaW5CdW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoZWxlbWVudC5nZXREZWNsYXJpbmdFeHRlbnNpb24oKS5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGNoaWxkRWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBuZXcgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5RGVzY3JpcHRvcihjbGFzc05hbWUsIG5hbWVzcGFjZSwgcGx1Z2luQnVuZGxlKTsKLSAgICAgICAgICBleHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeS5wdXQobmFtZXNwYWNlLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvQmFzZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvQmFzZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGM2ZmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL0Jhc2VHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotCi0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlR2VuZXJhdG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgcmVmTmFtZTsKLQotICBwcml2YXRlIGJvb2xlYW4gb3ZlcndyaXRlOwotCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0KLSAgcHJvdGVjdGVkIENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvcjsKLQotICBwdWJsaWMgdm9pZCBzZXRDb250ZW50R2VuZXJhdG9yKENvbnRlbnRHZW5lcmF0b3IgZ2VuZXJhdG9yKQotICB7Ci0gICAgY29udGVudEdlbmVyYXRvciA9IGdlbmVyYXRvcjsKLSAgfQotCi0gIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yIGdldENvbnRlbnRHZW5lcmF0b3IoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRlbnRHZW5lcmF0b3I7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRPdmVyd3JpdGUoYm9vbGVhbiBvdmVyd3JpdGUpCi0gIHsKLSAgICB0aGlzLm92ZXJ3cml0ZSA9IG92ZXJ3cml0ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldE92ZXJ3cml0ZSgpCi0gIHsKLSAgICByZXR1cm4gb3ZlcndyaXRlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSZWZOYW1lKFN0cmluZyByZWZOYW1lKQotICB7Ci0gICAgdGhpcy5yZWZOYW1lID0gcmVmTmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcmVmTmFtZTsKLSAgfQotCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkKLSAgewotICAgIGlmIChjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRlbnRHZW5lcmF0b3IuZ2V0UHJvdG9jb2woKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvQmluZGluZ0dlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvQmluZGluZ0dlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTVmODAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL0JpbmRpbmdHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvcjsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5OwotCi0KLS8qCi0gKiBDbGFzcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBCaW5kaW5nIGFuZCBpdCdzIGNvbnRlbnQuICBXZSBsb29rIGluIHRoZSByZWdpc3RyeSBmb3IKLSAqIGFwcHJvcHJpYXRlIENvbnRlbnRHZW5lcmF0b3IgY2xhc3NlcyBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgQmluZGluZyBDb250ZW50J3MgbmFtZXNwYWNlLgotICogQWx0ZXJuYXRpdmVseSwgdXNlcnMgY2FuIHBhc3MgaW4gYSBuYW1lc3BhY2UgdGhyb3VnaCB0aGUgY29uc3RydWN0b3IgdG8gc3BlY2lmeSB3aGljaAotICogbmFtZXNwYWNlIHRvIHVzZSB3aGVuIHNlYXJjaGluZyB0aGUgcmVnaXN0cnkuCi0gKiAKLSAqIFRoZSBDb250ZW50R2VuZXJhdG9yIG1heSBhbHNvIGJlIHNldCBtYW51YWxseSBieSBjYWxsaW5nCi0gKiBzZXRDb250ZW50R2VuZXJhdG9yKENvbnRlbnRHZW5lcmF0b3IpLgotICovCi1wdWJsaWMgY2xhc3MgQmluZGluZ0dlbmVyYXRvciBleHRlbmRzIEJhc2VHZW5lcmF0b3IKLXsKLSAgcHJpdmF0ZSBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFOwotCi0gIHByaXZhdGUgQmluZGluZyBiaW5kaW5nOwotCi0gIC8qCi0gICAqIFdoZW4gdGhlIGNvbnN0cnVjdG9yIGlzIHVzZWQsIGF1dG9tYXRpY2FsbHkgYXR0ZW1wdCB0byByZXRyaWV2ZSBhIHByb3BlcgotICAgKiBDb250ZW50R2VuZXJhdG9yIGJhc2VkIG9uIHRoZSBCaW5kaW5nIGdpdmVuLiAgVGhlIENvbnRlbnRHZW5lcmF0b3IgbWF5Ci0gICAqIGJlIHJlcGxhY2VkIGJ5IGNhbGxpbmcgc2V0Q29udGVudEdlbmVyYXRvcihDb250ZW50R2VuZXJhdG9yKS4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nR2VuZXJhdG9yKERlZmluaXRpb24gZGVmaW5pdGlvbiwgQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotICAgIGNvbnRlbnRHZW5lcmF0b3IgPSBnZXRDb250ZW50R2VuZXJhdG9yKGJpbmRpbmcpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKSB7Ci0gICAgdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLSAgfQotCi0gIC8qCi0gICAqIFdoZW4gdGhlIGNvbnN0cnVjdG9yIGlzIHVzZWQsIGF1dG9tYXRpY2FsbHkgYXR0ZW1wdCB0byByZXRyaWV2ZSBhIHByb3BlcgotICAgKiBDb250ZW50R2VuZXJhdG9yIGJhc2VkIG9uIHRoZSBuYW1lc3BhY2UgZ2l2ZW4uICBUaGUgQ29udGVudEdlbmVyYXRvciBtYXkKLSAgICogYmUgcmVwbGFjZWQgYnkgY2FsbGluZyBzZXRDb250ZW50R2VuZXJhdG9yKENvbnRlbnRHZW5lcmF0b3IpLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdHZW5lcmF0b3IoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcsIFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0gICAgY29udGVudEdlbmVyYXRvciA9IGdldENvbnRlbnRHZW5lcmF0b3IobmFtZXNwYWNlKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgQ29udGVudEdlbmVyYXRvciBnZXRDb250ZW50R2VuZXJhdG9yKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGlmIChiaW5kaW5nID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgKiBGaW5kIHRoZSByZWdlaXN0ZXJlZCBDb250ZW50IEdlbmVyYXRvciBmb3IgdGhlIEJpbmRpbmcKLSAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8vIEdldCBCaW5kaW5nQ29udGVudCBuYW1lc3BhY2UKLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLSAgICBMaXN0IGVlTGlzdCA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlmIChlZUxpc3Quc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllZUxpc3QuZ2V0KDApOwotICAgICAgLy8gVE9ETzogUU5hbWUgcU5hbWUgPSBlZS5nZXRFbGVtZW50VHlwZSgpOyBnbyBnZXQgdGhlIG5hbWVzcGFjZSBpbnN0ZWFkPwotICAgICAgbmFtZXNwYWNlID0gZWUuZ2V0RWxlbWVudCgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgcmV0dXJuIGdldENvbnRlbnRHZW5lcmF0b3IobmFtZXNwYWNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgQ29udGVudEdlbmVyYXRvciBnZXRDb250ZW50R2VuZXJhdG9yKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBDb250ZW50R2VuZXJhdG9yIGNvbnRlbnRHZW4gPSBudWxsOwotICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGZhY3RvcnlSZWdpc3RyeSA9IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgIGNvbnRlbnRHZW4gPSBmYWN0b3J5UmVnaXN0cnkuZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbnRlbnRHZW47Ci0gIH0KLQotICBwcml2YXRlIEJpbmRpbmcgY3JlYXRlRW1wdHlCaW5kaW5nKFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICBCaW5kaW5nIG5ld0JpbmRpbmcgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZygpOwotICAgIG5ld0JpbmRpbmcuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGxvY2FsTmFtZSkpOwotICAgIG5ld0JpbmRpbmcuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICBkZWZpbml0aW9uLmFkZEJpbmRpbmcobmV3QmluZGluZyk7Ci0KLSAgICByZXR1cm4gbmV3QmluZGluZzsKLSAgfQotCi0gIC8qCi0gICAqIFRPRE86IFNjZW5hcmlvOgotICAgKiAxKW92ZXJ3cml0ZSA9PSBmYWxzZQotICAgKiAyKUJpbmRpbmdPcGVyYXRpb24gd2l0aCAxIGlucHV0Ci0gICAqIDMpQ29ycmVzcG9uZGluZyBPcGVyYXRpb24gKHdpdGggc2FtZSBuYW1lKSB3aXRoIDEgaW5wdXQgYW5kIDEgb3V0cHV0Ci0gICAqIElmIHdlIGdlbmVyYXRlIHdpdGggb3ZlcndyaXRlID09IGZhbHNlLCBub3RoaW5nIGlzIGRvbmUuICBUaHVzLCAgYW4KLSAgICogb3V0cHV0IGlzIG5vdCBnZW5lcmF0ZWQgb24gdGhlIEJpbmRpbmdPcGVyYXRpb24uICBUaGlzIGlzIGJlY2F1c2Ugd2UKLSAgICogc2VhcmNoIGZvciBleGlzdGluZyBFbGVtZW50cyBvbmx5IGF0IHRoZSBsZXZlbCBvZiBCaW5kaW5nT3BlcmF0aW9ucy4KLSAgICogRm9yIGV4YW1wbGUsIGlmIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBCaW5kaW5nT3BlcmF0aW9uIHdpdGggdGhlIHNhbWUKLSAgICogbmFtZSBhcyBvdXIgT3BlcmF0aW9uLCBsZWF2ZSBpdCBhbG9uZS4uLi4gYnV0IHNpbmNlIHRoZXJlIGlzIGFscmVhZHkKLSAgICogYSBCaW5kaW5nT3BlcmF0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSwgd2UgZG9uJ3QgY3JlYXRlIGEgbmV3IEJpbmRpbmdPcGVyYXRpb24uCi0gICAqIAotICAgKiBUaGUgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBpcyByZWR1Y2UgdGhpcyBncmFudWxhcml0eSB0byB0aGUgTWVzc2FnZVJlZmVyZW5jZQotICAgKiBsZXZlbC4gIFRoZSBjb2RlIGlzIGFsbW9zdCB0aGVyZSBleGNlcHQgZm9yIGhvdyB3ZSBnZW5lcmF0ZSB0aGUgQmluZGluZyBlbGVtZW50Ci0gICAqIGNvbnRlbnQuICBMb29rIGF0IEJpbmRpbmdHZW5yYXRvci5nZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb24oKSBhbmQKLSAgICogU09BUENvbnRlbnRHZW5lcmF0b3IuamF2YSBhbmQgaXQncyBjb250ZW50IGdlbmVyYXRpb24gbWV0aG9kCi0gICAqIGZvciBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuCi0gICAqIAotICAgKiBGb3Igd3RwIFJDMSwgV2Ugc2hhbGwgb25seSBsb29rIGF0IHRoZSBPcGVyYXRpb24gbGV2ZWwgKGFzIHdlIGRvIGluIHRoZSBwcmV2aW91cwotICAgKiB2ZXJzaW9uKS4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nIGdlbmVyYXRlQmluZGluZygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBJZiBCaW5kaW5nIGlzIG51bGwgKE5vIEJpbmRpbmcgd2FzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciksIHdlIGNyZWF0ZSBhbiBlbXB0eSBCaW5kaW5nIGZpcnN0LgotICAgICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZyA9IGNyZWF0ZUVtcHR5QmluZGluZyhnZXROYW1lKCkpOwotICAgICAgfQotICAgICAgaWYgKGdldE5hbWUoKSAhPSBudWxsICYmICFiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcuc2V0UU5hbWUobmV3IFFOYW1lKGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSwgZ2V0TmFtZSgpKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZ2V0UmVmTmFtZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gZ2V0UG9ydFR5cGUoKTsKLSAgICAgICAgYmluZGluZy5zZXRFUG9ydFR5cGUocG9ydFR5cGUpOwotICAgICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vVGhlIG1vZGVsIGRvZXNuJ3QgcmVjb25pbGUgd2l0aCBpdCdzIEVsZW1lbnQgcHJvcGVybHkgd2hlbiB3ZSdyZSBzZXR0aW5nIGEgbnVsbCBmb3IgaXQncyBQb3J0VHlwZQotICAgICAgICAgIGJpbmRpbmcuZ2V0RWxlbWVudCgpLnNldEF0dHJpYnV0ZSgidHlwZSIsICIiKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBMaXN0IGJpbmRpbmdPcGVyYXRpb25zID0gYmluZGluZy5nZXRFQmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gYmluZGluZy5nZXRFUG9ydFR5cGUoKTsKLQotICAgICAgaWYgKCFnZXRPdmVyd3JpdGUoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gRG9uJ3QgT3ZlcndyaXRlCi0gICAgICAgIGlmIChwb3J0VHlwZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGJpbmRpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpOwotCi0gICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICAgICAgKiBEZXRlcm1pbmUgd2hpY2ggT3BlcmF0aW9ucyByZXF1aXJlIG5ldyBhIG5ldyBjb3JyZXNwb25kaW5nIEJpbmRpbmdPcGVyYXRpb25zCi0gICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAgTGlzdCBuZXdCaW5kaW5nT3BzTmVlZGVkID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYXRpb25zLnNpemUoKTsgaW5kZXgrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilvcGVyYXRpb25zLmdldChpbmRleCk7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gZm91bmRNYXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgSXRlcmF0b3IgYmluZGluZ09wZXJhdGlvbnNJdCA9IGJpbmRpbmdPcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoYmluZGluZ09wZXJhdGlvbnNJdC5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWJpbmRpbmdPcGVyYXRpb25zSXQubmV4dCgpOwotCi0gICAgICAgICAgICAgIGlmIChuYW1lc0VxdWFsKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpLCBvcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZm91bmRNYXRjaCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmV3QmluZGluZ09wc05lZWRlZC5hZGQob3BlcmF0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gbmV3QmluZGluZ09wc05lZWRlZCBpcyB0aGUgTGlzdCBvZiBPcGVyYXRpb25zIG5lZWRpbmcgbmV3IGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAvLyBCaW5kaW5nT3BlcmF0aW9uJ3MKLSAgICAgICAgICBMaXN0IG5ld0JpbmRpbmdPcHMgPSBjcmVhdGVOZXdCaW5kaW5nT3BlcmF0aW9ucyhuZXdCaW5kaW5nT3BzTmVlZGVkKTsKLQotICAgICAgICAgIC8vIGRvbid0IGFkZCByZXF1aXJlZCBuYW1lc3BhY2UgaWYgbm90aGluZyBpcyByZWFsbHkgYmVpbmcgYWRkZWQKLSAgICAgICAgICBpZiAoIW5ld0JpbmRpbmdPcHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhZGRSZXF1aXJlZE5hbWVzcGFjZXMoYmluZGluZyk7ICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IEJpbmRpbmdPcGVyYXRpb24ncwotICAgICAgICAgIEl0ZXJhdG9yIG5ld0JpbmRpbmdPcHNJdCA9IG5ld0JpbmRpbmdPcHMuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAobmV3QmluZGluZ09wc0l0Lmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIG5ld0JpbmRpbmdPcCA9IChCaW5kaW5nT3BlcmF0aW9uKW5ld0JpbmRpbmdPcHNJdC5uZXh0KCk7Ci0gICAgICAgICAgICBnZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb24obmV3QmluZGluZ09wKTsKLSAgICAgICAgICAgIGdlbmVyYXRlQmluZGluZ09wZXJhdGlvbkNvbnRlbnQobmV3QmluZGluZ09wKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBnZW5lcmF0ZUJpbmRpbmdDb250ZW50KGJpbmRpbmcpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBPdmVyd3JpdGUKLSAgICAgICAgaWYgKHBvcnRUeXBlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBXZSBuZWVkIHRvIGJsb3cgYXdheSBldmVyeXRoaW5nIHVuZGVyIHRoZSBCaW5kaW5nLiAgTm8gUG9ydFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQmluZGluZwotICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb25zLmNsZWFyKCk7Ci0gICAgICAgICAgcmV0dXJuIGJpbmRpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYWRkUmVxdWlyZWROYW1lc3BhY2VzKGJpbmRpbmcpOwotICAgICAgICAgIExpc3Qgb3BlcmF0aW9ucyA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKTsKLQotICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICAgICAgKiBDb21wYXJlIHRoZSBPcGVyYXRpb25zCi0gICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICAvLyBSZW1vdmUgYW55IEJpbmRpbmdPcGVyYXRpb25zIHdoaWNoIGFyZSBubyBsb25nZXIgdXNlZAotICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBiaW5kaW5nT3BlcmF0aW9ucy5zaXplKCk7IGluZGV4KyspCi0gICAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnMuZ2V0KGluZGV4KTsKLQotICAgICAgICAgICAgYm9vbGVhbiBmb3VuZE1hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBJdGVyYXRvciBvcGVyYXRpb25zSXQgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAob3BlcmF0aW9uc0l0Lmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pb3BlcmF0aW9uc0l0Lm5leHQoKTsKLQotICAgICAgICAgICAgICBpZiAobmFtZXNFcXVhbChiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSwgb3BlcmF0aW9uLmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3VuZE1hdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWZvdW5kTWF0Y2gpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVtb3ZlIHRoaXMgQmluZGluZ0ZhdWx0IGZyb20gdGhlIGJpbmRpbmdGYXVsdHMgTGlzdAotICAgICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9ucy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgICAgICBpbmRleC0tOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIFJlbW92ZSBhbnkgT3BlcmF0aW9ucyB3aGljaCBhbHJlYWR5IGV4aXN0cyBpbiBiaW5kaW5nT3BlcmF0aW9ucy4gIFdoYXQgd2UKLSAgICAgICAgICAvLyBoYXZlIGxlZnQgYXJlIHRoZSBPcGVyYXRpb25zIHdoaWNoIG5lZWRzIG5ld2x5IGNyZWF0ZWQgQmluZGluZ09wZXJhdGlvbnMKLSAgICAgICAgICBMaXN0IGJpbmRpbmdPcGVyYXRpb25zTmVlZGVkID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYXRpb25zLnNpemUoKTsgaW5kZXgrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilvcGVyYXRpb25zLmdldChpbmRleCk7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gZm91bmRNYXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgSXRlcmF0b3IgYmluZGluZ09wZXJhdGlvbnNJdCA9IGJpbmRpbmdPcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoYmluZGluZ09wZXJhdGlvbnNJdC5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWJpbmRpbmdPcGVyYXRpb25zSXQubmV4dCgpOwotCi0gICAgICAgICAgICAgIGlmIChuYW1lc0VxdWFsKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpLCBvcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZm91bmRNYXRjaCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhpcyBCaW5kaW5nRmF1bHQgZnJvbSB0aGUgYmluZGluZ0ZhdWx0cyBMaXN0Ci0gICAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb25zTmVlZGVkLmFkZChvcGVyYXRpb24pOyAvLyBTdG9yZSB0aGUgYWN0dWFsIE9wZXJhdGlvbgotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIENyZWF0ZSByZXF1aXJlZCBCaW5kaW5nT3BlcmF0aW9ucwotICAgICAgICAgIGNyZWF0ZU5ld0JpbmRpbmdPcGVyYXRpb25zKGJpbmRpbmdPcGVyYXRpb25zTmVlZGVkKTsKLQotICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICAgICAgKiBQcm9jZXNzIHRoZSBjb250ZW50cyBvZiB0aGUgT3BlcmF0aW9ucwotICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAgSXRlcmF0b3IgYmluZGluZ09wZXJhdGlvbnNJdCA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoYmluZGluZ09wZXJhdGlvbnNJdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZ2VuZXJhdGVCaW5kaW5nT3BlcmF0aW9uKChCaW5kaW5nT3BlcmF0aW9uKWJpbmRpbmdPcGVyYXRpb25zSXQubmV4dCgpKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBnZW5lcmF0ZUJpbmRpbmdDb250ZW50KGJpbmRpbmcpOwotCi0gICAgICAgICAgcmV0dXJuIGJpbmRpbmc7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGNyZWF0ZU5ld0JpbmRpbmdPcGVyYXRpb25zKExpc3Qgb3BlcmF0aW9ucykKLSAgewotICAgIExpc3QgbmV3QmluZGluZ09wcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIEl0ZXJhdG9yIG5lZWRlZEJpbmRpbmdPcGVyYXRpb25zSXQgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKG5lZWRlZEJpbmRpbmdPcGVyYXRpb25zSXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW5lZWRlZEJpbmRpbmdPcGVyYXRpb25zSXQubmV4dCgpOwotICAgICAgQmluZGluZ09wZXJhdGlvbiBuZXdCaW5kaW5nT3BlcmF0aW9uID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICBuZXdCaW5kaW5nT3BlcmF0aW9uLnNldEVPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICAgIG5ld0JpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShvcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICAgIGJpbmRpbmcuYWRkQmluZGluZ09wZXJhdGlvbihuZXdCaW5kaW5nT3BlcmF0aW9uKTsKLQotICAgICAgbmV3QmluZGluZ09wcy5hZGQobmV3QmluZGluZ09wZXJhdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0JpbmRpbmdPcHM7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZ2VuZXJhdGVCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLSAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgTGlzdCBiaW5kaW5nRmF1bHRzID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpOwotCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RU9wZXJhdGlvbigpOwotICAgIElucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotICAgIE91dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotICAgIExpc3QgZmF1bHRzID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKTsKLQotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgKiBDb21wYXJlIHRoZSBPcGVyYXRpb24gbmFtZXMKLSAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIGlmICghbmFtZXNFcXVhbChiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSwgb3BlcmF0aW9uLmdldE5hbWUoKSkpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXROYW1lKG9wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgIH0KLQotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgKiBDb21wYXJlIHRoZSBPdXRwdXQKLSAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIGlmIChvdXRwdXQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQobnVsbCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBDcmVhdGUgQmluZGluZ091dHB1dCBpZiBuZWNlc3NhcnkKLSAgICAgIGlmIChiaW5kaW5nT3V0cHV0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPdXRwdXQgbmV3QmluZGluZ091dHB1dCA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ091dHB1dCgpOwotICAgICAgICBuZXdCaW5kaW5nT3V0cHV0LnNldEVPdXRwdXQob3V0cHV0KTsKLSAgICAgICAgbmV3QmluZGluZ091dHB1dC5zZXROYW1lKG91dHB1dC5nZXROYW1lKCkpOwotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQobmV3QmluZGluZ091dHB1dCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIENvbXBhcmUgdGhlIE91dHB1dCBuYW1lcwotICAgICAgICBpZiAoIW5hbWVzRXF1YWwoYmluZGluZ091dHB1dC5nZXROYW1lKCksIG91dHB1dC5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgYmluZGluZ091dHB1dC5zZXROYW1lKG91dHB1dC5nZXROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdlbmVyYXRlQmluZGluZ091dHB1dENvbnRlbnQoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpKTsKLQotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgKiBDb21wYXJlIHRoZSBJbnB1dAotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgaWYgKGlucHV0ID09IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nSW5wdXQobnVsbCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBDcmVhdGUgQmluZGluZ0lucHV0IGlmIG5lY2Vzc2FyeQotICAgICAgaWYgKGJpbmRpbmdJbnB1dCA9PSBudWxsKQotICAgICAgewotICAgICAgICBCaW5kaW5nSW5wdXQgbmV3QmluZGluZ0lucHV0ID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgbmV3QmluZGluZ0lucHV0LnNldEVJbnB1dChpbnB1dCk7Ci0gICAgICAgIG5ld0JpbmRpbmdJbnB1dC5zZXROYW1lKGlucHV0LmdldE5hbWUoKSk7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ0lucHV0KG5ld0JpbmRpbmdJbnB1dCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIENvbXBhcmUgdGhlIElucHV0IG5hbWVzCi0gICAgICAgIGlmICghbmFtZXNFcXVhbChiaW5kaW5nSW5wdXQuZ2V0TmFtZSgpLCBpbnB1dC5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgYmluZGluZ0lucHV0LnNldE5hbWUoaW5wdXQuZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBnZW5lcmF0ZUJpbmRpbmdJbnB1dENvbnRlbnQoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkpOwotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIENvbXBhcmUgdGhlIEZhdWx0cwotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLy8gUmVtb3ZlIGFueSBCaW5kaW5nRmF1bHRzIHdoaWNoIGFyZSBubyBsb25nZXIgdXNlZAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBiaW5kaW5nRmF1bHRzLnNpemUoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdCliaW5kaW5nRmF1bHRzLmdldChpbmRleCk7Ci0KLSAgICAgIGJvb2xlYW4gZm91bmRNYXRjaCA9IGZhbHNlOwotICAgICAgSXRlcmF0b3IgZmF1bHRzSXQgPSBmYXVsdHMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChmYXVsdHNJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KWZhdWx0c0l0Lm5leHQoKTsKLSAgICAgICAgaWYgKG5hbWVzRXF1YWwoYmluZGluZ0ZhdWx0LmdldE5hbWUoKSwgZmF1bHQuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZm91bmRNYXRjaCkKLSAgICAgIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhpcyBCaW5kaW5nRmF1bHQgZnJvbSB0aGUgYmluZGluZ0ZhdWx0cyBMaXN0Ci0gICAgICAgIGJpbmRpbmdGYXVsdHMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgaW5kZXgtLTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgYW55IEZhdWx0cyB3aGljaCBhbHJlYWR5IGV4aXN0cyBpbiBiaW5kaW5nRmF1bHRzLiAgV2hhdCB3ZQotICAgIC8vIGhhdmUgbGVmdCBhcmUgdGhlIEZhdWx0cyB3aGljaCBuZWVkcyBuZXdseSBjcmVhdGVkIEJpbmRpbmdGYXVsdHMKLSAgICBMaXN0IGJpbmRpbmdGYXVsdHNOZWVkZWQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGZhdWx0cy5zaXplKCk7IGluZGV4KyspCi0gICAgewotICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpZmF1bHRzLmdldChpbmRleCk7Ci0KLSAgICAgIGJvb2xlYW4gZm91bmRNYXRjaCA9IGZhbHNlOwotICAgICAgSXRlcmF0b3IgYmluZGluZ0ZhdWx0c0l0ID0gYmluZGluZ0ZhdWx0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGJpbmRpbmdGYXVsdHNJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdGYXVsdHNJdC5uZXh0KCk7Ci0gICAgICAgIGlmIChuYW1lc0VxdWFsKGJpbmRpbmdGYXVsdC5nZXROYW1lKCksIGZhdWx0LmdldE5hbWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3VuZE1hdGNoID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoIWZvdW5kTWF0Y2gpCi0gICAgICB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gcmVtb3ZlIHRoaXMgQmluZGluZ0ZhdWx0IGZyb20gdGhlIGJpbmRpbmdGYXVsdHMgTGlzdAotICAgICAgICBiaW5kaW5nRmF1bHRzTmVlZGVkLmFkZChmYXVsdCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gYmluZGluZ0ZhdWx0c05lZWRlZCBjb250YWlucyB0aGUgbmVlZGVkIEJpbmRpbmdGYXVsdCdzIHdlIG5lZWQgdG8gY3JlYXRlCi0gICAgSXRlcmF0b3IgbmVlZGVkQmluZGluZ0ZhdWx0c0l0ID0gYmluZGluZ0ZhdWx0c05lZWRlZC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChuZWVkZWRCaW5kaW5nRmF1bHRzSXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KW5lZWRlZEJpbmRpbmdGYXVsdHNJdC5uZXh0KCk7Ci0gICAgICBCaW5kaW5nRmF1bHQgbmV3QmluZGluZ0ZhdWx0ID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nRmF1bHQoKTsKLSAgICAgIG5ld0JpbmRpbmdGYXVsdC5zZXRFRmF1bHQoZmF1bHQpOwotICAgICAgbmV3QmluZGluZ0ZhdWx0LnNldE5hbWUoZmF1bHQuZ2V0TmFtZSgpKTsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uYWRkQmluZGluZ0ZhdWx0KG5ld0JpbmRpbmdGYXVsdCk7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIHRoZSBjb250ZW50cyBmb3IgZWFjaCBCaW5kaW5nRmF1bHQKLSAgICBJdGVyYXRvciBmYXVsdENvbnRlbnRJdCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChmYXVsdENvbnRlbnRJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpZmF1bHRDb250ZW50SXQubmV4dCgpOwotICAgICAgZ2VuZXJhdGVCaW5kaW5nRmF1bHRDb250ZW50KGJpbmRpbmdGYXVsdCk7Ci0gICAgfQotCi0gICAgZ2VuZXJhdGVCaW5kaW5nT3BlcmF0aW9uQ29udGVudChiaW5kaW5nT3BlcmF0aW9uKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBuYW1lc0VxdWFsKFN0cmluZyBuYW1lMSwgU3RyaW5nIG5hbWUyKQotICB7Ci0gICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotCi0gICAgaWYgKG5hbWUxICE9IG51bGwgXiBuYW1lMiAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIG9uZSBpcyBudWxsCi0gICAgICBtYXRjaCA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lMSAhPSBudWxsICYmIG5hbWUyICE9IG51bGwpCi0gICAgewotICAgICAgLy8gbmVpdGhlciBpcyBudWxsCi0gICAgICBtYXRjaCA9IG5hbWUxLmVxdWFscyhuYW1lMik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBib3RoIGFyZSBudWxsCi0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgZ2VuZXJhdGVCaW5kaW5nQ29udGVudChCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBpZiAoY29udGVudEdlbmVyYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChnZXRPdmVyd3JpdGUoKSB8fCBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCkgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmdDb250ZW50KGJpbmRpbmcsIChQb3J0VHlwZSliaW5kaW5nLmdldEVQb3J0VHlwZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZUV4dGVuc2liaWxpdHlFbGVtZW50cyhiaW5kaW5nKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBnZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb25Db250ZW50KEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uICE9IG51bGwgJiYgY29udGVudEdlbmVyYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3IuZ2VuZXJhdGVCaW5kaW5nT3BlcmF0aW9uQ29udGVudChiaW5kaW5nT3BlcmF0aW9uLCBiaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW1vdmVFeHRlbnNpYmlsaXR5RWxlbWVudHMoYmluZGluZ09wZXJhdGlvbik7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgZ2VuZXJhdGVCaW5kaW5nSW5wdXRDb250ZW50KEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQpCi0gIHsKLSAgICBpZiAoYmluZGluZ0lucHV0ICE9IG51bGwgJiYgY29udGVudEdlbmVyYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3IuZ2VuZXJhdGVCaW5kaW5nSW5wdXRDb250ZW50KGJpbmRpbmdJbnB1dCwgYmluZGluZ0lucHV0LmdldEVJbnB1dCgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZUV4dGVuc2liaWxpdHlFbGVtZW50cyhiaW5kaW5nSW5wdXQpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGdlbmVyYXRlQmluZGluZ091dHB1dENvbnRlbnQoQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0KQotICB7Ci0gICAgaWYgKGJpbmRpbmdPdXRwdXQgIT0gbnVsbCAmJiBjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmdPdXRwdXRDb250ZW50KGJpbmRpbmdPdXRwdXQsIGJpbmRpbmdPdXRwdXQuZ2V0RU91dHB1dCgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZUV4dGVuc2liaWxpdHlFbGVtZW50cyhiaW5kaW5nT3V0cHV0KTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBnZW5lcmF0ZUJpbmRpbmdGYXVsdENvbnRlbnQoQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCkKLSAgewotICAgIGlmIChiaW5kaW5nRmF1bHQgIT0gbnVsbCAmJiBjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmdGYXVsdENvbnRlbnQoYmluZGluZ0ZhdWx0LCBiaW5kaW5nRmF1bHQuZ2V0RUZhdWx0KCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKGJpbmRpbmdGYXVsdCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZUV4dGVuc2liaWxpdHlFbGVtZW50cyhFeHRlbnNpYmxlRWxlbWVudCBlZSkKLSAgewotICAgIGlmIChlZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGVlLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5jbGVhcigpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIEdlbmVyYXRlIFBvcnQgQ29udGVudCBmb3IgYWxsIFBvcnRzIHdpdGggYSByZWZlcmVuY2UgdG8gdGhlIEJpbmRpbmcKLSAgICogd2hpY2ggd2FzIHBhc3NlZCBpbiB0aHJvdWdoIHRoZSBjb25zdHJ1Y3RvciAob3IgYSByZWZlcmVuY2UgdG8gdGhlCi0gICAqIG5ld2x5IGNyZWF0ZWQgQmluZGluZykuCi0gICAqLwotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVBvcnRDb250ZW50KCkKLSAgewotICAgIGlmIChiaW5kaW5nICE9IG51bGwgJiYgY29udGVudEdlbmVyYXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgcG9ydHNUb1VwZGF0ZSA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgICAgSXRlcmF0b3Igc2VydmljZXNJdCA9IGJpbmRpbmcuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVTZXJ2aWNlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoc2VydmljZXNJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKXNlcnZpY2VzSXQubmV4dCgpOwotICAgICAgICBJdGVyYXRvciBwb3J0c0l0ID0gc2VydmljZS5nZXRFUG9ydHMoKS5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAocG9ydHNJdC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydClwb3J0c0l0Lm5leHQoKTsKLSAgICAgICAgICBpZiAoYmluZGluZy5lcXVhbHMocG9ydC5nZXRFQmluZGluZygpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGb3VuZCBhIG1hdGNoCi0gICAgICAgICAgICBwb3J0c1RvVXBkYXRlLmFkZChwb3J0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgSXRlcmF0b3IgcG9ydHNUb1VwZGF0ZUl0ID0gcG9ydHNUb1VwZGF0ZS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKHBvcnRzVG9VcGRhdGVJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIGNvbnRlbnRHZW5lcmF0b3IuZ2VuZXJhdGVQb3J0Q29udGVudCgoUG9ydClwb3J0c1RvVXBkYXRlSXQubmV4dCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBtZXRob2RzIGFkZFJlcXVpcmVkTmFtZXNwYWNlcygpIGFuZCBjb21wdXRlVW5pcXVlUHJlZml4KCkgYXJlIHVzZWQgdG8gYWRkIG5lY2Vzc2FyeQotICAgKiBuYW1lc3BhY2VzIAotICAgKiAKLSAgICogVE9ETzoKLSAgICogRG9lcyB0aGlzIGJlbG9uZyBoZXJlPyAgVGhpcyBpcyBjb3BpZWQgZnJvbSB3c2RsLnVpLiAgQ2FuIHdlIHN5bmMgdXAgaW4gc29tZSB3YXk/Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBhZGRSZXF1aXJlZE5hbWVzcGFjZXMoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdbXSBuYW1lc3BhY2VOYW1lcyA9IGNvbnRlbnRHZW5lcmF0b3IuZ2V0UmVxdWlyZWROYW1lc3BhY2VzKCk7Ci0gICAgICBTdHJpbmdbXSBwcmVmZXJyZWRQcmVmaXhlcyA9IG5ldyBTdHJpbmcgW25hbWVzcGFjZU5hbWVzLmxlbmd0aF07Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbmFtZXNwYWNlTmFtZXMubGVuZ3RoOyBpbmRleCsrKQotICAgICAgewotICAgICAgICBwcmVmZXJyZWRQcmVmaXhlc1tpbmRleF0gPSBjb250ZW50R2VuZXJhdG9yLmdldFByZWZlcnJlZE5hbWVzcGFjZVByZWZpeChuYW1lc3BhY2VOYW1lc1tpbmRleF0pOwotICAgICAgfQotCi0gICAgICBNYXAgbWFwID0gYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0TmFtZXNwYWNlcygpOwotCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzcGFjZU5hbWVzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gbmFtZXNwYWNlTmFtZXNbaV07Ci0gICAgICAgIGlmICghbWFwLmNvbnRhaW5zVmFsdWUobmFtZXNwYWNlKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAoaSA8IHByZWZlcnJlZFByZWZpeGVzLmxlbmd0aCkgPyBwcmVmZXJyZWRQcmVmaXhlc1tpXSA6ICJwMCI7Ci0gICAgICAgICAgaWYgKG1hcC5jb250YWluc0tleShwcmVmaXgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHByZWZpeCA9IGNvbXB1dGVVbmlxdWVQcmVmaXgoInAiLCBtYXApOwotICAgICAgICAgIH0KLSAgICAgICAgICBiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5hZGROYW1lc3BhY2UocHJlZml4LCBuYW1lc3BhY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZVVuaXF1ZVByZWZpeChTdHJpbmcgYmFzZSwgTWFwIHRhYmxlKQotICB7Ci0gICAgaW50IGkgPSAwOwotICAgIFN0cmluZyBwcmVmaXggPSBiYXNlOwotICAgIHdoaWxlICh0cnVlKQotICAgIHsKLSAgICAgIGlmICghdGFibGUuY29udGFpbnNLZXkocHJlZml4KSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByZWZpeCA9IGJhc2UgKyBpOwotICAgICAgICBpKys7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmVmaXg7Ci0gIH0KLQotICBwcml2YXRlIFBvcnRUeXBlIGdldFBvcnRUeXBlKCkKLSAgewotICAgIGlmIChnZXRSZWZOYW1lKCkuZXF1YWxzKCIiKSkKLSAgICB7Ci0gICAgICAvLyBNZWFucyB3ZSBzaG91bGQgc2V0IHRoZSBQb3J0VHlwZSB0byBVbnNwZWNpZmllZAotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgaWYgKGdldFJlZk5hbWUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIHBvcnRUeXBlSXQgPSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKS5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAocG9ydFR5cGVJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBvcnRUeXBlIHB0ID0gKFBvcnRUeXBlKXBvcnRUeXBlSXQubmV4dCgpOwotICAgICAgICBMaXN0IHByZWZpeGVkTmFtZXMgPSBnZXRQcmVmaXhlZE5hbWVzKHB0KTsKLSAgICAgICAgaWYgKHByZWZpeGVkTmFtZXMuY29udGFpbnMoZ2V0UmVmTmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBwdDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBiaW5kaW5nLmdldEVQb3J0VHlwZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldFByZWZpeGVkTmFtZXMoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBMaXN0IHByZWZpeGVkTmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgU3RyaW5nIGN1cnJlbnRQb3J0VHlwZU5hbWUgPSBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgIFN0cmluZyBjdXJyZW50TmFtZXNwYWNlID0gcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIE1hcCBuYW1lc3BhY2VNYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLSAgICBJdGVyYXRvciBrZXlzID0gbmFtZXNwYWNlTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGtleXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBrZXkgPSBrZXlzLm5leHQoKTsKLSAgICAgIE9iamVjdCB2YWx1ZSA9IG5hbWVzcGFjZU1hcC5nZXQoa2V5KTsKLQotICAgICAgaWYgKGN1cnJlbnROYW1lc3BhY2UuZXF1YWxzKHZhbHVlKSkKLSAgICAgIHsKLSAgICAgICAgLy8gRm91bmQgYSBtYXRjaC4gIEFkZCB0byBvdXIgbGlzdAotICAgICAgICBwcmVmaXhlZE5hbWVzLmFkZChrZXkgKyAiOiIgKyBjdXJyZW50UG9ydFR5cGVOYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcHJlZml4ZWROYW1lczsKLQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9Db250ZW50R2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9Db250ZW50R2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YjkzMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvQ29udGVudEdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3I7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgQ29udGVudEdlbmVyYXRvcgotewotICBwdWJsaWMgc3RhdGljIFN0cmluZyBBRERSRVNTX0xPQ0FUSU9OID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIjsKLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0UmVxdWlyZWROYW1lc3BhY2VzKCk7Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcmVmZXJyZWROYW1lc3BhY2VQcmVmaXgoU3RyaW5nIG5hbWVzcGFjZSk7Ci0KLSAgLy8gZ2VuZXJhdGVzIHRoZSAnYWRkcmVzcycgZXh0ZW5zaWJsaXR5IGVsZW1lbnQgZm9yIGEgcG9ydAotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVBvcnRDb250ZW50KFBvcnQgcG9ydCk7Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nQ29udGVudChCaW5kaW5nIGJpbmRpbmcsIFBvcnRUeXBlIHBvcnRUeXBlKTsKLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdPcGVyYXRpb25Db250ZW50KEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uIG9wZXJhdGlvbik7Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nSW5wdXRDb250ZW50KEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQsIElucHV0IGlucHV0KTsKLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUJpbmRpbmdPdXRwdXRDb250ZW50KEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCwgT3V0cHV0IG91dHB1dCk7Ci0KLSAgcHVibGljIHZvaWQgZ2VuZXJhdGVCaW5kaW5nRmF1bHRDb250ZW50KEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQsIEZhdWx0IGZhdWx0KTsKLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCk7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBZGRyZXNzTG9jYXRpb24oU3RyaW5nIGFkZHJlc3NMb2NhdGlvbik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9Qb3J0R2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9Qb3J0R2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYjg1ODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvUG9ydEdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLQotcHVibGljIGNsYXNzIFBvcnRHZW5lcmF0b3IgZXh0ZW5kcyBCYXNlR2VuZXJhdG9yCi17Ci0gIHByaXZhdGUgU2VydmljZSBzZXJ2aWNlOwotICBwcml2YXRlIFN0cmluZyBhZGRyZXNzTG9jYXRpb24gPSBDb250ZW50R2VuZXJhdG9yLkFERFJFU1NfTE9DQVRJT047Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBwb3J0IGdlbmVyYXRvciBnaXZlbiB0aGUgdGFyZ2V0IHNlcnZpY2UuCi0gICAqIEBwYXJhbSBzZXJ2aWNlIHRoZSB0YXJnZXQgU2VydmljZSwgbXVzdCBub3QgYmUgbnVsbC4KLSAgICovCi0gIHB1YmxpYyBQb3J0R2VuZXJhdG9yKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7Ci0gICAgZGVmaW5pdGlvbiA9IHNlcnZpY2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBZGRyZXNzTG9jYXRpb24oU3RyaW5nIGxvY2F0aW9uKSB7Ci0gICAgYWRkcmVzc0xvY2F0aW9uID0gbG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2VuZXJhdGVzIGEgc2VydmljZSBwb3J0IGdpdmVuIGl0J3MgbmFtZSBhbmQgYmluZGluZyBuYW1lLgotICAgKiBUaGUgcG9ydCBpcyB0aGVuIGFkZGVkIHRvIHRoZSBzZXJ2aWNlIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3IuCi0gICAqIEByZXR1cm4gdGhlIFBvcnQgaW5zdGFuY2UKLSAgICovCi0gIHB1YmxpYyBQb3J0IGdlbmVyYXRlUG9ydCgpCi0gIHsKLSAgICBTdHJpbmcgcG9ydE5hbWUgPSBnZXROYW1lKCk7Ci0gICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gZ2V0UmVmTmFtZSgpOwotCi0gICAgQmluZGluZyBiaW5kaW5nID0gZ2V0QmluZGluZyhiaW5kaW5nTmFtZSk7Ci0KLSAgICBQb3J0IHBvcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydCgpOwotICAgIHBvcnQuc2V0TmFtZShwb3J0TmFtZSk7Ci0gICAgcG9ydC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIHBvcnQuc2V0QmluZGluZyhiaW5kaW5nKTsKLQotICAgIHNlcnZpY2UuYWRkUG9ydChwb3J0KTsKLQotICAgIENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IGdldENvbnRlbnRHZW5lcmF0b3IoKTsKLQotICAgIGlmIChjb250ZW50R2VuZXJhdG9yICE9IG51bGwpCi0gICAgewotICAgICAgLy93dHAgYnVnIDIyMTAyNCAtIG5hbWVzcGFjZSBhbmQgcHJlZml4ZXMgYXJlIG5vdCBhZGRlZCB3aGVuIGFkZCBuZXcgcG9ydAotICAgICAgYWRkUmVxdWlyZWROYW1lc3BhY2VzKHNlcnZpY2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKGFkZHJlc3NMb2NhdGlvbik7Ci0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlUG9ydENvbnRlbnQocG9ydCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBvcnQ7Ci0gIH0KLQotICAvKgotICAgKiBtZXRob2RzIGFkZFJlcXVpcmVkTmFtZXNwYWNlcygpIGFuZCBjb21wdXRlVW5pcXVlUHJlZml4KCkgYXJlIHVzZWQgdG8gYWRkIG5lY2Vzc2FyeQotICAgKiBuYW1lc3BhY2VzIAotICAgKiAKLSAgICogVE9ETzoKLSAgICogRG9lcyB0aGlzIGJlbG9uZyBoZXJlPyAgVGhpcyBpcyBjb3BpZWQgZnJvbSB3c2RsLnVpLiAgQ2FuIHdlIHN5bmMgdXAgaW4gc29tZSB3YXk/Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBhZGRSZXF1aXJlZE5hbWVzcGFjZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgaWYgKGNvbnRlbnRHZW5lcmF0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdbXSBuYW1lc3BhY2VOYW1lcyA9IGNvbnRlbnRHZW5lcmF0b3IuZ2V0UmVxdWlyZWROYW1lc3BhY2VzKCk7Ci0gICAgICBTdHJpbmdbXSBwcmVmZXJyZWRQcmVmaXhlcyA9IG5ldyBTdHJpbmcgW25hbWVzcGFjZU5hbWVzLmxlbmd0aF07Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbmFtZXNwYWNlTmFtZXMubGVuZ3RoOyBpbmRleCsrKQotICAgICAgewotICAgICAgICBwcmVmZXJyZWRQcmVmaXhlc1tpbmRleF0gPSBjb250ZW50R2VuZXJhdG9yLmdldFByZWZlcnJlZE5hbWVzcGFjZVByZWZpeChuYW1lc3BhY2VOYW1lc1tpbmRleF0pOwotICAgICAgfQotCi0gICAgICBNYXAgbWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlTmFtZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBuYW1lc3BhY2VOYW1lc1tpXTsKLSAgICAgICAgaWYgKCFtYXAuY29udGFpbnNWYWx1ZShuYW1lc3BhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChpIDwgcHJlZmVycmVkUHJlZml4ZXMubGVuZ3RoKSA/IHByZWZlcnJlZFByZWZpeGVzW2ldIDogInAwIjsKLSAgICAgICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KHByZWZpeCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJlZml4ID0gY29tcHV0ZVVuaXF1ZVByZWZpeCgicCIsIG1hcCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKHByZWZpeCwgbmFtZXNwYWNlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGNvbXB1dGVVbmlxdWVQcmVmaXgoU3RyaW5nIGJhc2UsIE1hcCB0YWJsZSkKLSAgewotICAgIGludCBpID0gMDsKLSAgICBTdHJpbmcgcHJlZml4ID0gYmFzZTsKLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBpZiAoIXRhYmxlLmNvbnRhaW5zS2V5KHByZWZpeCkpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwcmVmaXggPSBiYXNlICsgaTsKLSAgICAgICAgaSsrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJlZml4OwotICB9Ci0KLSAgLyoqCi0gICAqIExvY2F0ZXMgYSBiaW5kaW5nIGdpdmVuIGl0cyBwcmVmaXhlZCBuYW1lIChzb21lTlNQcmVmaXg6c29tZUJpbmRpbmdOYW1lKS4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nTmFtZSB0aGUgcW5hbWUgb2YgdGhlIGRlc2lyZWQgYmluZGluZy4KLSAgICogQHJldHVybiBhIEJpbmRpbmcgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgb3IgbnVsbCBpZiBvbmUgaXMgbm90IGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBCaW5kaW5nIGdldEJpbmRpbmcoU3RyaW5nIGJpbmRpbmdOYW1lKQotICB7Ci0gICAgTGlzdCBhbGxCaW5kaW5ncyA9IGdldEFsbEJpbmRpbmdzKCk7Ci0gICAgSXRlcmF0b3IgYmluZGluZ0l0ZXJhdG9yID0gYWxsQmluZGluZ3MuaXRlcmF0b3IoKTsKLQotICAgIHdoaWxlIChiaW5kaW5nSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWJpbmRpbmdJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgIExpc3QgcHJlZml4ZWROYW1lcyA9IGdldFByZWZpeGVkTmFtZXMoYmluZGluZyk7Ci0KLSAgICAgIGlmIChwcmVmaXhlZE5hbWVzLmNvbnRhaW5zKGJpbmRpbmdOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGJpbmRpbmc7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogTG9jYXRlcyBhbGwgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB0aGlzIGRlZmluaXRpb24gYW5kIGFsbCBpdHMKLSAgICogaW1wb3J0ZWQgZGVmaW5pdGlvbnMuCi0gICAqIAotICAgKiBAcmV0dXJuIGEgTGlzdCB3aXRoIGFsbCBhdmFpbGFibGUgYmluZGluZ3MuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRBbGxCaW5kaW5ncygpCi0gIHsKLSAgICBMaXN0IGFsbEJpbmRpbmdzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIExpc3QgYWxsRGVmaW5pdGlvbnMgPSBnZXRBbGxEZWZpbml0aW9ucygpOwotCi0gICAgSXRlcmF0b3IgZGVmc0l0ZXJhdG9yID0gYWxsRGVmaW5pdGlvbnMuaXRlcmF0b3IoKTsKLQotICAgIHdoaWxlIChkZWZzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWRlZnNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBNYXAgYmluZGluZ3MgPSBkZWZpbml0aW9uLmdldEJpbmRpbmdzKCk7Ci0KLSAgICAgIC8vIElTU1VFIEEgcG9zc2libGUgcHJvYmxlbSBoZXJlIGlmIHNvbWVob3cgYSBiaW5kaW5nIGlzIGR1cGxpY2F0ZWQgaW4gb25lIG9mIHRoZSBpbXBvcnRzPwotICAgICAgLy8gSW4gdGhhdCBjYXNlIHdlIHNob3VsZCBpdGVyYXRlIG92ZXIgYW5kIGNoZWNrIHRoZW0gb25lIGJ5IG9uZS4KLQotICAgICAgYWxsQmluZGluZ3MuYWRkQWxsKGJpbmRpbmdzLnZhbHVlcygpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWxsQmluZGluZ3M7Ci0gIH0KLQotICAvKioKLSAgICogQXR0ZW1wdHMgdG8gbG9jYXRlIGFuZCBhZGQgdG8gdGhlIGxpc3QgYWxsIHRoZSBkZWZpbml0aW9ucyBpbXBvcnRlZCBieSB0aGUKLSAgICogZGVmaW5pdGlvbiBwYXNzZWQgaW4uIFJlY3Vyc2l2ZWx5IHRyaWVzIHRvIGxvY2F0ZSBhbGwgZGVmaW5pdGlvbnMuCi0gICAqIAotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiB0aGUgc3RhcnQgRGVmaW5pdGlvbi4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHBhcmFtIGxpc3QgdXNlZCB0byBjb2xsZWN0IGFsbCB0aGUgaW1wb3J0ZWQgZGVmaW5pdGlvbnMuIE11c3Qgbm90IGJlIG51bGwuCi0gICAqLwotICBwcml2YXRlIHZvaWQgYWRkRGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24sIExpc3QgbGlzdCkKLSAgewotICAgIGxpc3QuYWRkKGRlZmluaXRpb24pOwotICAgIExpc3QgaW1wb3J0cyA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKTsKLSAgICBJdGVyYXRvciBpbXBvcnRzSXRlcmF0b3IgPSBpbXBvcnRzLml0ZXJhdG9yKCk7Ci0KLSAgICB3aGlsZSAoaW1wb3J0c0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydClpbXBvcnRzSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICBTdHJpbmcgaW1wb3J0TG9jYXRpb25VUkkgPSB0aGVJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgIGlmIChpbXBvcnRMb2NhdGlvblVSSSAhPSBudWxsICYmCi0gICAgICAvLyBJU1NVRSBUaGlzIGFzc3VtcHRpb24gc2VlbXMgYSBiaXQgd2Vhay4KLSAgICAgICAgaW1wb3J0TG9jYXRpb25VUkkuZW5kc1dpdGgoIndzZGwiKSkKLSAgICAgIHsKLSAgICAgICAgRGVmaW5pdGlvbiBpbXBvcnRlZERlZmluaXRpb24gPSB0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLQotICAgICAgICBpZiAoaW1wb3J0ZWREZWZpbml0aW9uICE9IG51bGwgJiYgIWxpc3QuY29udGFpbnMoaW1wb3J0ZWREZWZpbml0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHRyeSB0byBsb2NhdGUgYWxsIGRlZmluaXRpb25zLgotCi0gICAgICAgICAgYWRkRGVmaW5pdGlvbihpbXBvcnRlZERlZmluaXRpb24sIGxpc3QpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEF0dGVtcHRzIHRvIGxvY2F0ZSBhbGwgZGVmaW5pdGlvbnMgaW1wb3J0ZWQgYnkgdGhlIGN1cnJlbnQgZGVmaW5pdGlvbiBhbmQKLSAgICogYWxsIHRoZWlyIGltcG9ydHMgaW4gdHVybi4gCi0gICAqIAotICAgKiBAcmV0dXJuIGEgTGlzdCB3aXRoIGFsbCBkZWZpbml0aW9ucyBpbXBvcnRlZCBieSB0aGUgY3VycmVudCBkZWZpbml0aW9uLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldEFsbERlZmluaXRpb25zKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBhZGREZWZpbml0aW9uKGRlZmluaXRpb24sIGxpc3QpOwotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldFByZWZpeGVkTmFtZXMoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgTGlzdCBwcmVmaXhlZE5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZyBjdXJyZW50QmluZGluZ05hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgU3RyaW5nIGN1cnJlbnROYW1lc3BhY2UgPSBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICBNYXAgbmFtZXNwYWNlTWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgSXRlcmF0b3Iga2V5cyA9IG5hbWVzcGFjZU1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChrZXlzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qga2V5ID0ga2V5cy5uZXh0KCk7Ci0gICAgICBPYmplY3QgdmFsdWUgPSBuYW1lc3BhY2VNYXAuZ2V0KGtleSk7Ci0KLSAgICAgIGlmIChjdXJyZW50TmFtZXNwYWNlLmVxdWFscyh2YWx1ZSkpCi0gICAgICB7Ci0gICAgICAgIC8vIEZvdW5kIGEgbWF0Y2guICBBZGQgdG8gb3VyIGxpc3QKLSAgICAgICAgcHJlZml4ZWROYW1lcy5hZGQoa2V5ICsgIjoiICsgY3VycmVudEJpbmRpbmdOYW1lKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwcmVmaXhlZE5hbWVzOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgZ2V0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25EZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkRlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQxYmZmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkRlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLmV4dGVuc2lvbjsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotCi0vKgotICogQ2xhc3Mgd2hpY2ggYWN0cyBhcyBhIGNvbnRhaW5lciB0byBob2xkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBleHRlbnNpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvcgotewotICBwcm90ZWN0ZWQgQnVuZGxlIGJ1bmRsZTsKLQotICBwcm90ZWN0ZWQgQ29udGVudEdlbmVyYXRvciBjb250ZW50R2VuZXJhdG9yOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGNsYXNzTmFtZTsKLQotICBwdWJsaWMgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkRlc2NyaXB0b3IoQnVuZGxlIGJ1bmRsZSwgU3RyaW5nIGNsYXNzU3RyaW5nLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlOwotICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc1N0cmluZzsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZ2V0Q29udGVudEdlbmVyYXRvcigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBDbGFzcyB0aGVDbGFzcyA9IGJ1bmRsZS5sb2FkQ2xhc3MoY2xhc3NOYW1lKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3IgPSAoQ29udGVudEdlbmVyYXRvcil0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29udGVudEdlbmVyYXRvcjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2U7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2dlbmVyYXRvci9leHRlbnNpb24vQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDVjMTIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3I7Ci0KLQotcHVibGljIGNsYXNzIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkKLXsKLSAgcHJvdGVjdGVkIE1hcCBtYXA7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGluc3RhbmNlOwotCi0gIHB1YmxpYyBzdGF0aWMgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnN0YW5jZSA9IG5ldyBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5KCk7Ci0KLSAgICAgIC8vIFRPRE8uLi4gZG9uJ3QgcmVhZCB0aGUgcmVnaXN0cnkgdW50aWwgYW4gJ2dldCdvY2N1cnMKLSAgICAgIC8vCi0gICAgICBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIgcmVhZGVyID0gbmV3IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihpbnN0YW5jZSk7Ci0gICAgICByZWFkZXIucmVhZFJlZ2lzdHJ5KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkoKQotICB7Ci0gICAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHB1dChTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSwgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkRlc2NyaXB0b3IgZGVzY3JpcHRvcikKLSAgewotICAgIC8vIENoZWNrIGlmIHRoaXMgbmFtZXNwYWNlL25hbWUga2V5IGlzIGFscmVhZHkgaW4gdGhlIE1hcAotICAgIExpc3QgZm91bmRLZXkgPSBmaW5kRXhpc3RpbmdLZXkobmFtZXNwYWNlLCBuYW1lKTsKLQotICAgIC8vIERpZCB3ZSBmaW5kIGFuIGV4aXN0aW5nIGtleSB3aXRoIHRoZSBzYW1lIG5hbWVzcGFjZS9rZXkgcGFpcmluZz8KLSAgICBpZiAoZm91bmRLZXkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBTaW1wbHkgYWRkIHRoZSBkZXNjcmlwdG9yIHRvIHRoZSBsaXN0IG9mIGRlc2NyaXB0b3JzIGFzc29jaWF0ZWQKLSAgICAgIC8vIHdpdGggdGhpcyBuYW1lc3BhY2UvbmFtZSBrZXkKLSAgICAgIExpc3QgZGVzY3JpcHRvckxpc3QgPSAoTGlzdCltYXAuZ2V0KGZvdW5kS2V5KTsKLSAgICAgIGRlc2NyaXB0b3JMaXN0LmFkZChkZXNjcmlwdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGVudHJ5IGluIHRoZSBNYXAgZm9yIHRoaXMgbmFtZXNwYWNlL25hbWUga2V5Ci0gICAgICBMaXN0IG5ld0tleSA9IG5ldyBBcnJheUxpc3QoMik7Ci0gICAgICBuZXdLZXkuYWRkKG5hbWVzcGFjZSk7Ci0gICAgICBuZXdLZXkuYWRkKG5hbWUpOwotCi0gICAgICBMaXN0IG5ld0Rlc2NyaXB0b3JMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgbmV3RGVzY3JpcHRvckxpc3QuYWRkKGRlc2NyaXB0b3IpOwotCi0gICAgICBtYXAucHV0KG5ld0tleSwgbmV3RGVzY3JpcHRvckxpc3QpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIFJldHVybnMgdGhlICduYW1lJyBhdHRyaWJ1dGUgZm9yIHRoaXMgZXh0ZW5zaW9uLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ0V4dGVuc2lvbk5hbWVzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIEl0ZXJhdG9yIGtleUl0ID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgTGlzdCBrZXkgPSBudWxsOwotICAgIHdoaWxlIChrZXlJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAga2V5ID0gKExpc3Qpa2V5SXQubmV4dCgpOwotICAgICAgbGlzdC5hZGQoa2V5LmdldCgxKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvKgotICAgKiBSZXR1cm4gdGhlIGNsYXNzIHNwZWNpZmllZCBmb3IgdGhpcyBleHRlbnNpb24gYmFzZWQgb24gdGhlIG5hbWVzcGFjZQotICAgKiBhdHRyaWJ1dGUuCi0gICAqLwotICBwdWJsaWMgQ29udGVudEdlbmVyYXRvciBnZXRHZW5lcmF0b3JDbGFzc0Zyb21OYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIENvbnRlbnRHZW5lcmF0b3IgZ2VuZXJhdG9yQ2xhc3MgPSBudWxsOwotICAgIExpc3Qga2V5ID0gZmluZEV4aXN0aW5nS2V5RnJvbU5hbWVzcGFjZShuYW1lc3BhY2UpOwotCi0gICAgaWYgKGtleSAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgZGVzY3JpcHRvcnMgPSAoTGlzdCltYXAuZ2V0KGtleSk7Ci0KLSAgICAgIC8vIEdyYWIgdGhlIGZpcnN0IGRlc2NyaXB0b3IgYXZhaWxhYmxlCi0gICAgICBpZiAoZGVzY3JpcHRvcnMuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkRlc2NyaXB0b3IgZXh0ZW5zaW9uRGVzY3JpcHRvciA9IChDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvcilkZXNjcmlwdG9ycy5nZXQoMCk7Ci0gICAgICAgIGdlbmVyYXRvckNsYXNzID0gKENvbnRlbnRHZW5lcmF0b3IpZXh0ZW5zaW9uRGVzY3JpcHRvci5nZXRDb250ZW50R2VuZXJhdG9yKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGdlbmVyYXRvckNsYXNzOwotICB9Ci0KLSAgLyoKLSAgICogUmV0dXJuIHRoZSBjbGFzcyBzcGVjaWZpZWQgZm9yIHRoaXMgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBuYW1lCi0gICAqIGF0dHJpYnV0ZS4KLSAgICovCi0gIHB1YmxpYyBDb250ZW50R2VuZXJhdG9yIGdldEdlbmVyYXRvckNsYXNzRnJvbU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBDb250ZW50R2VuZXJhdG9yIGdlbmVyYXRvckNsYXNzID0gbnVsbDsKLSAgICBMaXN0IGtleSA9IGZpbmRFeGlzdGluZ0tleUZyb21OYW1lKG5hbWUpOwotCi0gICAgaWYgKGtleSAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgZGVzY3JpcHRvcnMgPSAoTGlzdCltYXAuZ2V0KGtleSk7Ci0KLSAgICAgIC8vIEdyYWIgdGhlIGZpcnN0IGRlc2NyaXB0b3IgYXZhaWxhYmxlCi0gICAgICBpZiAoZGVzY3JpcHRvcnMuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkRlc2NyaXB0b3IgZXh0ZW5zaW9uRGVzY3JpcHRvciA9IChDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvcilkZXNjcmlwdG9ycy5nZXQoMCk7Ci0gICAgICAgIGdlbmVyYXRvckNsYXNzID0gKENvbnRlbnRHZW5lcmF0b3IpZXh0ZW5zaW9uRGVzY3JpcHRvci5nZXRDb250ZW50R2VuZXJhdG9yKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGdlbmVyYXRvckNsYXNzOwotICB9Ci0KLSAgLy8gVE9ETzogV2UgbmVlZCB0byBjb21tb24gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIHVwLi4uLi4uLgotICBwcml2YXRlIExpc3QgZmluZEV4aXN0aW5nS2V5RnJvbU5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgSXRlcmF0b3Iga2V5SXQgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBMaXN0IGZvdW5kS2V5ID0gbnVsbDsKLSAgICB3aGlsZSAoa2V5SXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGZvdW5kS2V5ID0gKExpc3Qpa2V5SXQubmV4dCgpOwotICAgICAgaWYgKG5hbWVzcGFjZS5lcXVhbHMoZm91bmRLZXkuZ2V0KDApKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBmb3VuZEtleSA9IG51bGw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvdW5kS2V5OwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGZpbmRFeGlzdGluZ0tleUZyb21OYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgSXRlcmF0b3Iga2V5SXQgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBMaXN0IGZvdW5kS2V5ID0gbnVsbDsKLSAgICB3aGlsZSAoa2V5SXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGZvdW5kS2V5ID0gKExpc3Qpa2V5SXQubmV4dCgpOwotICAgICAgaWYgKG5hbWUuZXF1YWxzKGZvdW5kS2V5LmdldCgxKSkpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZm91bmRLZXkgPSBudWxsOwotICAgIH0KLQotICAgIHJldHVybiBmb3VuZEtleTsKLSAgfQotCi0gIHByaXZhdGUgTGlzdCBmaW5kRXhpc3RpbmdLZXkoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBJdGVyYXRvciBrZXlJdCA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIExpc3QgZm91bmRLZXkgPSBudWxsOwotICAgIHdoaWxlIChrZXlJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgZm91bmRLZXkgPSAoTGlzdClrZXlJdC5uZXh0KCk7Ci0gICAgICBpZiAobmFtZXNwYWNlLmVxdWFscyhmb3VuZEtleS5nZXQoMCkpICYmIG5hbWUuZXF1YWxzKGZvdW5kS2V5LmdldCgxKSkpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZm91bmRLZXkgPSBudWxsOwotICAgIH0KLQotICAgIHJldHVybiBmb3VuZEtleTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25SZWdpc3RyeVJlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9nZW5lcmF0b3IvZXh0ZW5zaW9uL0NvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25SZWdpc3RyeVJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjMwMmE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvZ2VuZXJhdG9yL2V4dGVuc2lvbi9Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLmV4dGVuc2lvbjsKLQotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLQotcHVibGljIGNsYXNzIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25SZWdpc3RyeVJlYWRlcgotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSBXU0RMUGx1Z2luLmdldFBsdWdpbigpLmdldFN5bWJvbGljTmFtZSgpOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVEVOU0lPTl9QT0lOVF9JRCA9ICJjb250ZW50R2VuZXJhdG9ycyI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9OQU1FID0gImNvbnRlbnRHZW5lcmF0b3IiOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLQotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfTkFNRSA9ICJuYW1lIjsKLQotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQ0xBU1MgPSAiY2xhc3MiOwotCi0gIHByb3RlY3RlZCBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci0KLSAgcHVibGljIENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5IGdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeSkKLSAgewotICAgIHRoaXMuY29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeSA9IGdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgKiByZWFkIGZyb20gcGx1Z2luIHJlZ2lzdHJ5IGFuZCBwYXJzZSBpdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeSgpCi0gIHsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcGx1Z2luUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElFeHRlbnNpb25Qb2ludCBwb2ludCA9IHBsdWdpblJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFBMVUdJTl9JRCwgRVhURU5TSU9OX1BPSU5UX0lEKTsKLSAgICBpZiAocG9pbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IHBvaW50LmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgcmVhZEVsZW1lbnQoZWxlbWVudHNbaV0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZShVUkwgcGxhdGZvcm1VUkwsIFN0cmluZyByZWxhdGl2ZVBhdGgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIFVSTCByZXNvbHZlZFVSTCA9IEZpbGVMb2NhdG9yLnJlc29sdmUocGxhdGZvcm1VUkwpOwotICAgIHJldHVybiByZXNvbHZlZFVSTC50b1N0cmluZygpICsgcmVsYXRpdmVQYXRoOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKEVMRU1FTlRfTkFNRSkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBjaGlsZEVsZW1lbnQgPSAoSUNvbmZpZ3VyYXRpb25FbGVtZW50KWVsZW1lbnQ7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRSk7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBjaGlsZEVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9OQU1FU1BBQ0UpOwotCi0gICAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEJ1bmRsZSBwbHVnaW5CdW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoZWxlbWVudC5nZXREZWNsYXJpbmdFeHRlbnNpb24oKS5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGNoaWxkRWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLSAgICAgICAgICBDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbmV3IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25EZXNjcmlwdG9yKHBsdWdpbkJ1bmRsZSwgY2xhc3NOYW1lLCBuYW1lc3BhY2UsIG5hbWUpOwotICAgICAgICAgIGNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkucHV0KG5hbWVzcGFjZSwgbmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nRmF1bHRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ0ZhdWx0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjExY2I0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nRmF1bHRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgRmF1bHQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ZhdWx0SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdGYXVsdEltcGwjZ2V0RUZhdWx0IDxlbT5FRmF1bHQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nRmF1bHRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgQmluZGluZ0ZhdWx0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVGYXVsdCgpIDxlbT5FRmF1bHQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVGYXVsdCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBGYXVsdCBlRmF1bHQgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdGYXVsdEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLkJJTkRJTkdfRkFVTFQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lID0gbmFtZTsKLSAgICBuYW1lID0gbmV3TmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBGYXVsdCBnZXRFRmF1bHQoKQotICB7Ci0gICAgaWYgKGVGYXVsdCAhPSBudWxsICYmIGVGYXVsdC5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFRmF1bHQgPSAoSW50ZXJuYWxFT2JqZWN0KWVGYXVsdDsKLSAgICAgIGVGYXVsdCA9IChGYXVsdCllUmVzb2x2ZVByb3h5KG9sZEVGYXVsdCk7Ci0gICAgICBpZiAoZUZhdWx0ICE9IG9sZEVGYXVsdCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19FRkFVTFQsIG9sZEVGYXVsdCwgZUZhdWx0KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlRmF1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBGYXVsdCBiYXNpY0dldEVGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZUZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFRmF1bHQoRmF1bHQgbmV3RUZhdWx0KQotICB7Ci0gICAgRmF1bHQgb2xkRUZhdWx0ID0gZUZhdWx0OwotICAgIGVGYXVsdCA9IG5ld0VGYXVsdDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19FRkFVTFQsIG9sZEVGYXVsdCwgZUZhdWx0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5GYXVsdCBnZXRGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUZhdWx0KCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYXVsdChqYXZheC53c2RsLkZhdWx0IGZhdWx0KQotICB7Ci0gICAgc2V0RUZhdWx0KChGYXVsdClmYXVsdCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUX19FRkFVTFQ6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVGYXVsdCgpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RUZhdWx0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fTkFNRToKLSAgICAgIHNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX0VGQVVMVDoKLSAgICAgIHNldEVGYXVsdCgoRmF1bHQpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fTkFNRToKLSAgICAgIHNldE5hbWUoTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX0VGQVVMVDoKLSAgICAgIHNldEVGYXVsdCgoRmF1bHQpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19GQVVMVF9fTkFNRToKLSAgICAgIHJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFRfX0VGQVVMVDoKLSAgICAgIHJldHVybiBlRmF1bHQgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKG5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkucmVtb3ZlKGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KWNvbXBvbmVudDsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgbGlzdC5hZGRBbGwoYmluZGluZ0ZhdWx0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldEJpbmRpbmdGYXVsdF9OYW1lKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5GQVVMVCk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClleHRlbnNpYmlsaXR5RWxlbWVudCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLQotICAvLyBSZXNvbHZlIHRoZSByZWZlcmVuY2UgdG8gRmF1bHQKLSAgcHVibGljIHZvaWQgcmVjb25jaWxlUmVmZXJlbmNlcyhib29sZWFuIGRlZXApCi0gIHsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWdldENvbnRhaW5lcigpOwotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RU9wZXJhdGlvbigpOwotICAgICAgU3RyaW5nIGZhdWx0TmFtZSA9IGdldE5hbWUoKTsKLQotICAgICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsICYmIGZhdWx0TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBqYXZheC53c2RsLkZhdWx0IGZhdWx0ID0gb3BlcmF0aW9uLmdldEZhdWx0KGZhdWx0TmFtZSk7Ci0KLSAgICAgICAgaWYgKGZhdWx0ICE9IGdldEZhdWx0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRGYXVsdChmYXVsdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotfSAvL0JpbmRpbmdGYXVsdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MThlOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZzwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW1wbCNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ltcGwjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW1wbCNnZXRFUG9ydFR5cGUgPGVtPkVQb3J0IFR5cGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ltcGwjZ2V0RUJpbmRpbmdPcGVyYXRpb25zIDxlbT5FQmluZGluZyBPcGVyYXRpb25zPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQmluZGluZ0ltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBCaW5kaW5nCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UU5hbWUoKSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFFOYW1lKCkgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBRTmFtZSBxTmFtZSA9IFFOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVbmRlZmluZWQoKSA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBVTkRFRklORURfRURFRkFVTFQgPSBmYWxzZTsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVbmRlZmluZWQoKSA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHVuZGVmaW5lZCA9IFVOREVGSU5FRF9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RVBvcnRUeXBlKCkgPGVtPkVQb3J0IFR5cGU8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVQb3J0VHlwZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBQb3J0VHlwZSBlUG9ydFR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFQmluZGluZ09wZXJhdGlvbnMoKSA8ZW0+RUJpbmRpbmcgT3BlcmF0aW9uczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFQmluZGluZ09wZXJhdGlvbnMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUJpbmRpbmdPcGVyYXRpb25zID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElORzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFFOYW1lKCkKLSAgewotICAgIHJldHVybiBxTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UU5hbWUoUU5hbWUgbmV3UU5hbWUpCi0gIHsKLSAgICBRTmFtZSBvbGRRTmFtZSA9IHFOYW1lOwotICAgIHFOYW1lID0gbmV3UU5hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuQklORElOR19fUU5BTUUsIG9sZFFOYW1lLCBxTmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VuZGVmaW5lZCgpCi0gIHsKLSAgICByZXR1cm4gdW5kZWZpbmVkOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRVbmRlZmluZWQoYm9vbGVhbiBuZXdVbmRlZmluZWQpCi0gIHsKLSAgICBib29sZWFuIG9sZFVuZGVmaW5lZCA9IHVuZGVmaW5lZDsKLSAgICB1bmRlZmluZWQgPSBuZXdVbmRlZmluZWQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuQklORElOR19fVU5ERUZJTkVELCBvbGRVbmRlZmluZWQsIHVuZGVmaW5lZCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUG9ydFR5cGUgZ2V0RVBvcnRUeXBlKCkKLSAgewotICAgIGlmIChlUG9ydFR5cGUgIT0gbnVsbCAmJiBlUG9ydFR5cGUuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRVBvcnRUeXBlID0gKEludGVybmFsRU9iamVjdCllUG9ydFR5cGU7Ci0gICAgICBlUG9ydFR5cGUgPSAoUG9ydFR5cGUpZVJlc29sdmVQcm94eShvbGRFUG9ydFR5cGUpOwotICAgICAgaWYgKGVQb3J0VHlwZSAhPSBvbGRFUG9ydFR5cGUpCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV1NETFBhY2thZ2UuQklORElOR19fRVBPUlRfVFlQRSwgb2xkRVBvcnRUeXBlLCBlUG9ydFR5cGUpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVQb3J0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlIGJhc2ljR2V0RVBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBlUG9ydFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVQb3J0VHlwZShQb3J0VHlwZSBuZXdFUG9ydFR5cGUpCi0gIHsKLSAgICBQb3J0VHlwZSBvbGRFUG9ydFR5cGUgPSBlUG9ydFR5cGU7Ci0gICAgZVBvcnRUeXBlID0gbmV3RVBvcnRUeXBlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfX0VQT1JUX1RZUEUsIG9sZEVQb3J0VHlwZSwgZVBvcnRUeXBlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFQmluZGluZ09wZXJhdGlvbnMoKQotICB7Ci0gICAgaWYgKGVCaW5kaW5nT3BlcmF0aW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVCaW5kaW5nT3BlcmF0aW9ucyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVCaW5kaW5nT3BlcmF0aW9uczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYW4gb3BlcmF0aW9uIGJpbmRpbmcgdG8gYmluZGluZy4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRCaW5kaW5nT3BlcmF0aW9uKGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5hZGQoYmluZGluZ09wZXJhdGlvbik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGJpbmRpbmcuIE5vdGUgdGhhdCBvcGVyYXRpb24gbmFtZXMgY2FuCi0gICAqIGJlIG92ZXJsb2FkZWQgd2l0aGluIGEgUG9ydFR5cGUuIEluIGNhc2Ugb2Ygb3ZlcmxvYWRpbmcsIHRoZQotICAgKiBuYW1lcyBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBtZXNzYWdlcyBjYW4gYmUgdXNlZCB0byBmdXJ0aGVyCi0gICAqIHJlZmluZSB0aGUgc2VhcmNoLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBvcGVyYXRpb24gYmluZGluZy4KLSAgICogQHBhcmFtIGlucHV0TmFtZSB0aGUgbmFtZSBvZiB0aGUgaW5wdXQgbWVzc2FnZTsgaWYgdGhpcyBpcyBudWxsCi0gICAqIGl0IHdpbGwgYmUgaWdub3JlZC4KLSAgICogQHBhcmFtIG91dHB1dE5hbWUgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBtZXNzYWdlOyBpZiB0aGlzIGlzIG51bGwKLSAgICogaXQgd2lsbCBiZSBpZ25vcmVkLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBiaW5kaW5nLCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgb3BlcmF0aW9uIGJpbmRpbmcKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIGdldEJpbmRpbmdPcGVyYXRpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBpbnB1dE5hbWUsIFN0cmluZyBvdXRwdXROYW1lKQotICB7Ci0gICAgSXRlcmF0b3Igb3BCaW5kaW5nSXRlcmF0b3IgPSBnZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKG9wQmluZGluZ0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gb3AgPSAoamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uKW9wQmluZGluZ0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgU3RyaW5nIG9wTmFtZSA9IG9wLmdldE5hbWUoKTsKLSAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgb3BOYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmICghbmFtZS5lcXVhbHMob3BOYW1lKSkKLSAgICAgICAgICBvcCA9IG51bGw7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChuYW1lICE9IG51bGwgfHwgb3BOYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG9wID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwgJiYgaW5wdXROYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGphdmF4LndzZGwuQmluZGluZ0lucHV0IGlucHV0ID0gb3AuZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG9wSW5wdXROYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgIGlmIChvcElucHV0TmFtZSA9PSBudWxsIHx8ICFvcElucHV0TmFtZS5lcXVhbHMoaW5wdXROYW1lKSkKLSAgICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgb3AgPSBudWxsOwotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCAmJiBvdXRwdXROYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGphdmF4LndzZGwuQmluZGluZ091dHB1dCBvdXRwdXQgPSBvcC5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBvcE91dHB1dE5hbWUgPSBvdXRwdXQuZ2V0TmFtZSgpOwotICAgICAgICAgIGlmIChvcE91dHB1dE5hbWUgPT0gbnVsbCB8fCAhb3BPdXRwdXROYW1lLmVxdWFscyhvdXRwdXROYW1lKSkKLSAgICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgb3AgPSBudWxsOwotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIG9wOwotICAgIH0gLy8gZW5kIHdoaWxlCi0gICAgcmV0dXJuIG51bGw7IC8vIGJpbmRpbmcgb3BlcmF0aW9uIG5vdCBmb3VuZAotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIG9wZXJhdGlvbiBiaW5kaW5ncyBkZWZpbmVkIGhlcmUuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ09wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVCaW5kaW5nT3BlcmF0aW9ucygpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuUG9ydFR5cGUgZ2V0UG9ydFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldEVQb3J0VHlwZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UG9ydFR5cGUoamF2YXgud3NkbC5Qb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIHNldEVQb3J0VHlwZSgoUG9ydFR5cGUpcG9ydFR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFQmluZGluZ09wZXJhdGlvbnMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX1FOQU1FOgotICAgICAgcmV0dXJuIGdldFFOYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX1VOREVGSU5FRDoKLSAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRVBPUlRfVFlQRToKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RVBvcnRUeXBlKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFUG9ydFR5cGUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUzoKLSAgICAgIHJldHVybiBnZXRFQmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19RTkFNRToKLSAgICAgIHNldFFOYW1lKChRTmFtZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX1VOREVGSU5FRDoKLSAgICAgIHNldFVuZGVmaW5lZCgoKEJvb2xlYW4pbmV3VmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRVBPUlRfVFlQRToKLSAgICAgIHNldEVQb3J0VHlwZSgoUG9ydFR5cGUpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TOgotICAgICAgZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuY2xlYXIoKTsKLSAgICAgIGdldEVCaW5kaW5nT3BlcmF0aW9ucygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19RTkFNRToKLSAgICAgIHNldFFOYW1lKFFOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fVU5ERUZJTkVEOgotICAgICAgc2V0VW5kZWZpbmVkKFVOREVGSU5FRF9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfX0VQT1JUX1RZUEU6Ci0gICAgICBzZXRFUG9ydFR5cGUoKFBvcnRUeXBlKW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19FQklORElOR19PUEVSQVRJT05TOgotICAgICAgZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19RTkFNRToKLSAgICAgIHJldHVybiBRTkFNRV9FREVGQVVMVCA9PSBudWxsID8gcU5hbWUgIT0gbnVsbCA6ICFRTkFNRV9FREVGQVVMVC5lcXVhbHMocU5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkICE9IFVOREVGSU5FRF9FREVGQVVMVDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRVBPUlRfVFlQRToKLSAgICAgIHJldHVybiBlUG9ydFR5cGUgIT0gbnVsbDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUzoKLSAgICAgIHJldHVybiBlQmluZGluZ09wZXJhdGlvbnMgIT0gbnVsbCAmJiAhZUJpbmRpbmdPcGVyYXRpb25zLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHFOYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQocU5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgdW5kZWZpbmVkOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodW5kZWZpbmVkKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSk7Ci0gICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbmFtZSA9PSBudWxsID8gIiIgOiBuYW1lKTsgLy8kTk9OLU5MUy0xJAotICAgIHNldFFOYW1lKHFuYW1lKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpY29tcG9uZW50OwotCi0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGxpc3QuYWRkQWxsKGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkpOwotICAgIGxpc3QuYWRkQWxsKGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzd2l0Y2ggKFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoY2hpbGQpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5PUEVSQVRJT046Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICBvcGVyYXRpb24uc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgb3BlcmF0aW9uLnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgYWRkQmluZGluZ09wZXJhdGlvbihvcGVyYXRpb24pOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgcmVtb3ZlKHRoaXMsIGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gZ2V0TGlzdChjb21wb25lbnQsIG1vZGVsT2JqZWN0KTsKLSAgICBpZiAobGlzdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpc3QucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0TGlzdChPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBMaXN0IHJlc3VsdCA9IG51bGw7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpY29tcG9uZW50OwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24pCi0gICAgewotICAgICAgcmVzdWx0ID0gYmluZGluZy5nZXRFQmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0QmluZGluZ19RTmFtZSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZVJlZmVyZW5jZShFUmVmZXJlbmNlIGVSZWZlcmVuY2UpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZVJlZmVyZW5jZShlUmVmZXJlbmNlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBudWxsIHx8IGVSZWZlcmVuY2UgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldEJpbmRpbmdfRVBvcnRUeXBlKCkpCi0gICAgICB7Ci0gICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gZ2V0RVBvcnRUeXBlKCk7Ci0gICAgICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgUU5hbWUgcU5hbWUgPSBwb3J0VHlwZS5nZXRRTmFtZSgpOwotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFLCBxTmFtZS5nZXROYW1lc3BhY2VVUkkoKSArICIjIiArIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLkJJTkRJTkcpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIGl0ZXJhdG9yID0gZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gb3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24paXRlcmF0b3IubmV4dCgpOwotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoQmluZGluZ09wZXJhdGlvbkltcGwpb3BlcmF0aW9uKS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbilnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBwb3J0VHlwZVFOYW1lID0gY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5UWVBFX0FUVFJJQlVURSksIGVsZW1lbnQpOwotICAgICAgUG9ydFR5cGUgbmV3UG9ydFR5cGUgPSBwb3J0VHlwZVFOYW1lICE9IG51bGwgPyAoUG9ydFR5cGUpZGVmaW5pdGlvbi5nZXRQb3J0VHlwZShwb3J0VHlwZVFOYW1lKSA6IG51bGw7Ci0gICAgICBpZiAobmV3UG9ydFR5cGUgIT0gZ2V0RVBvcnRUeXBlKCkpCi0gICAgICB7Ci0gICAgICAgIHNldEVQb3J0VHlwZShuZXdQb3J0VHlwZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHN1cGVyLnJlY29uY2lsZVJlZmVyZW5jZXMoZGVlcCk7Ci0gIH0KLX0gLy9CaW5kaW5nSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdJbnB1dEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nSW5wdXRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZmRlM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdJbnB1dEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QmluZGluZyBJbnB1dDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0lucHV0SW1wbCNnZXRFSW5wdXQgPGVtPkVJbnB1dDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEJpbmRpbmdJbnB1dEltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBCaW5kaW5nSW5wdXQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUlucHV0KCkgPGVtPkVJbnB1dDwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUlucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIElucHV0IGVJbnB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0lucHV0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuQklORElOR19JTlBVVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotICAgIG5hbWUgPSBuZXdOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIElucHV0IGdldEVJbnB1dCgpCi0gIHsKLSAgICBpZiAoZUlucHV0ICE9IG51bGwgJiYgZUlucHV0LmVJc1Byb3h5KCkpCi0gICAgewotICAgICAgSW50ZXJuYWxFT2JqZWN0IG9sZEVJbnB1dCA9IChJbnRlcm5hbEVPYmplY3QpZUlucHV0OwotICAgICAgZUlucHV0ID0gKElucHV0KWVSZXNvbHZlUHJveHkob2xkRUlucHV0KTsKLSAgICAgIGlmIChlSW5wdXQgIT0gb2xkRUlucHV0KQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VJTlBVVCwgb2xkRUlucHV0LCBlSW5wdXQpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVJbnB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIElucHV0IGJhc2ljR2V0RUlucHV0KCkKLSAgewotICAgIHJldHVybiBlSW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVJbnB1dChJbnB1dCBuZXdFSW5wdXQpCi0gIHsKLSAgICBJbnB1dCBvbGRFSW5wdXQgPSBlSW5wdXQ7Ci0gICAgZUlucHV0ID0gbmV3RUlucHV0OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VJTlBVVCwgb2xkRUlucHV0LCBlSW5wdXQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLklucHV0IGdldElucHV0KCkKLSAgewotICAgIHJldHVybiBnZXRFSW5wdXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElucHV0KGphdmF4LndzZGwuSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBzZXRFSW5wdXQoKElucHV0KWlucHV0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fTkFNRToKLSAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVRfX0VJTlBVVDoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RUlucHV0KCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFSW5wdXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fRUlOUFVUOgotICAgICAgc2V0RUlucHV0KChJbnB1dCluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fRUlOUFVUOgotICAgICAgc2V0RUlucHV0KChJbnB1dCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0lOUFVUX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVF9fRUlOUFVUOgotICAgICAgcmV0dXJuIGVJbnB1dCAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGlhdGlvbiBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIik7Ci0gICAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZXROYW1lKG5hbWUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5yZW1vdmUoaS5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IChCaW5kaW5nSW5wdXQpY29tcG9uZW50OwotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBsaXN0LmFkZEFsbChiaW5kaW5nSW5wdXQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0QmluZGluZ0lucHV0X05hbWUoKSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCBnZXROYW1lKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLklOUFVUKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dGVuc2liaWxpdHlFbGVtZW50KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIC8vIFJlc29sdmUgdGhlIHJlZmVyZW5jZSB0byBJbnB1dAotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBib3AgPSAoQmluZGluZ09wZXJhdGlvbilnZXRDb250YWluZXIoKTsKLSAgICAgIE9wZXJhdGlvbiBvcCA9IGJvcC5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgICBpZiAob3AgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2V0SW5wdXQob3AuZ2V0RUlucHV0KCkpOwotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci19IC8vQmluZGluZ0lucHV0SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0JpbmRpbmdPcGVyYXRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ09wZXJhdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2NDg5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ09wZXJhdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5CaW5kaW5nIE9wZXJhdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3BlcmF0aW9uSW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPcGVyYXRpb25JbXBsI2dldEVPcGVyYXRpb24gPGVtPkVPcGVyYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwjZ2V0RUJpbmRpbmdJbnB1dCA8ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwjZ2V0RUJpbmRpbmdPdXRwdXQgPGVtPkVCaW5kaW5nIE91dHB1dDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nT3BlcmF0aW9uSW1wbCNnZXRFQmluZGluZ0ZhdWx0cyA8ZW0+RUJpbmRpbmcgRmF1bHRzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQmluZGluZ09wZXJhdGlvbkltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBCaW5kaW5nT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVPcGVyYXRpb24oKSA8ZW0+RU9wZXJhdGlvbjwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU9wZXJhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBPcGVyYXRpb24gZU9wZXJhdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVCaW5kaW5nSW5wdXQoKSA8ZW0+RUJpbmRpbmcgSW5wdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVCaW5kaW5nSW5wdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0lucHV0IGVCaW5kaW5nSW5wdXQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFQmluZGluZ091dHB1dCgpIDxlbT5FQmluZGluZyBPdXRwdXQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVCaW5kaW5nT3V0cHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPdXRwdXQgZUJpbmRpbmdPdXRwdXQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFQmluZGluZ0ZhdWx0cygpIDxlbT5FQmluZGluZyBGYXVsdHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUJpbmRpbmdGYXVsdHMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZUJpbmRpbmdGYXVsdHMgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPcGVyYXRpb25JbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5CSU5ESU5HX09QRVJBVElPTjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotICAgIG5hbWUgPSBuZXdOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb24gZ2V0RU9wZXJhdGlvbigpCi0gIHsKLSAgICBpZiAoZU9wZXJhdGlvbiAhPSBudWxsICYmIGVPcGVyYXRpb24uZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRU9wZXJhdGlvbiA9IChJbnRlcm5hbEVPYmplY3QpZU9wZXJhdGlvbjsKLSAgICAgIGVPcGVyYXRpb24gPSAoT3BlcmF0aW9uKWVSZXNvbHZlUHJveHkob2xkRU9wZXJhdGlvbik7Ci0gICAgICBpZiAoZU9wZXJhdGlvbiAhPSBvbGRFT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OLCBvbGRFT3BlcmF0aW9uLCBlT3BlcmF0aW9uKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlT3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uIGJhc2ljR2V0RU9wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZU9wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RU9wZXJhdGlvbihPcGVyYXRpb24gbmV3RU9wZXJhdGlvbikKLSAgewotICAgIE9wZXJhdGlvbiBvbGRFT3BlcmF0aW9uID0gZU9wZXJhdGlvbjsKLSAgICBlT3BlcmF0aW9uID0gbmV3RU9wZXJhdGlvbjsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTiwgb2xkRU9wZXJhdGlvbiwgZU9wZXJhdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEVCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIGVCaW5kaW5nSW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IG5ld0VCaW5kaW5nSW5wdXQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgb2xkRUJpbmRpbmdJbnB1dCA9IGVCaW5kaW5nSW5wdXQ7Ci0gICAgZUJpbmRpbmdJbnB1dCA9IG5ld0VCaW5kaW5nSW5wdXQ7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgIHsKLSAgICAgIEVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCgKLSAgICAgICAgdGhpcywKLSAgICAgICAgTm90aWZpY2F0aW9uLlNFVCwKLSAgICAgICAgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVULAotICAgICAgICBvbGRFQmluZGluZ0lucHV0LAotICAgICAgICBuZXdFQmluZGluZ0lucHV0KTsKLSAgICAgIGlmIChtc2dzID09IG51bGwpCi0gICAgICAgIG1zZ3MgPSBub3RpZmljYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBtc2dzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFQmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBuZXdFQmluZGluZ0lucHV0KQotICB7Ci0gICAgaWYgKG5ld0VCaW5kaW5nSW5wdXQgIT0gZUJpbmRpbmdJbnB1dCkKLSAgICB7Ci0gICAgICBOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKLSAgICAgIGlmIChlQmluZGluZ0lucHV0ICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCllQmluZGluZ0lucHV0KS5lSW52ZXJzZVJlbW92ZSgKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBtc2dzKTsKLSAgICAgIGlmIChuZXdFQmluZGluZ0lucHV0ICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdFQmluZGluZ0lucHV0KS5lSW52ZXJzZUFkZCgKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBtc2dzKTsKLSAgICAgIG1zZ3MgPSBiYXNpY1NldEVCaW5kaW5nSW5wdXQobmV3RUJpbmRpbmdJbnB1dCwgbXNncyk7Ci0gICAgICBpZiAobXNncyAhPSBudWxsKQotICAgICAgICBtc2dzLmRpc3BhdGNoKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwoCi0gICAgICAgIHRoaXMsCi0gICAgICAgIE5vdGlmaWNhdGlvbi5TRVQsCi0gICAgICAgIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCwKLSAgICAgICAgbmV3RUJpbmRpbmdJbnB1dCwKLSAgICAgICAgbmV3RUJpbmRpbmdJbnB1dCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZ091dHB1dCBnZXRFQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gZUJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgbmV3RUJpbmRpbmdPdXRwdXQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBCaW5kaW5nT3V0cHV0IG9sZEVCaW5kaW5nT3V0cHV0ID0gZUJpbmRpbmdPdXRwdXQ7Ci0gICAgZUJpbmRpbmdPdXRwdXQgPSBuZXdFQmluZGluZ091dHB1dDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgewotICAgICAgRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVULAotICAgICAgICBvbGRFQmluZGluZ091dHB1dCwKLSAgICAgICAgbmV3RUJpbmRpbmdPdXRwdXQpOwotICAgICAgaWYgKG1zZ3MgPT0gbnVsbCkKLSAgICAgICAgbXNncyA9IG5vdGlmaWNhdGlvbjsKLSAgICAgIGVsc2UKLSAgICAgICAgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1zZ3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgbmV3RUJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICBpZiAobmV3RUJpbmRpbmdPdXRwdXQgIT0gZUJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7Ci0gICAgICBpZiAoZUJpbmRpbmdPdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWVCaW5kaW5nT3V0cHV0KS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFCi0gICAgICAgICAgLSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVULCBudWxsLCBtc2dzKTsKLSAgICAgIGlmIChuZXdFQmluZGluZ091dHB1dCAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3RUJpbmRpbmdPdXRwdXQpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UKLSAgICAgICAgICAtIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19PVVRQVVQsIG51bGwsIG1zZ3MpOwotICAgICAgbXNncyA9IGJhc2ljU2V0RUJpbmRpbmdPdXRwdXQobmV3RUJpbmRpbmdPdXRwdXQsIG1zZ3MpOwotICAgICAgaWYgKG1zZ3MgIT0gbnVsbCkKLSAgICAgICAgbXNncy5kaXNwYXRjaCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVULAotICAgICAgICBuZXdFQmluZGluZ091dHB1dCwKLSAgICAgICAgbmV3RUJpbmRpbmdPdXRwdXQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVCaW5kaW5nRmF1bHRzKCkKLSAgewotICAgIGlmIChlQmluZGluZ0ZhdWx0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVCaW5kaW5nRmF1bHRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KEJpbmRpbmdGYXVsdC5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUyk7Ci0gICAgfQotICAgIHJldHVybiBlQmluZGluZ0ZhdWx0czsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYSBmYXVsdCBiaW5kaW5nLgotICAgKiBAcGFyYW0gZmF1bHQgdGhlIG5ldyBmYXVsdCBiaW5kaW5nCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQmluZGluZ0ZhdWx0KGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCkKLSAgewotICAgIGdldEVCaW5kaW5nRmF1bHRzKCkuYWRkKChCaW5kaW5nRmF1bHQpYmluZGluZ0ZhdWx0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBmYXVsdCBiaW5kaW5nLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBmYXVsdCBiaW5kaW5nLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGZhdWx0IGJpbmRpbmcsIG9yIG51bGwgaWYgdGhlcmUgd2Fzbid0Ci0gICAqIGFueSBtYXRjaGluZyBmYXVsdCBiaW5kaW5nCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IGdldEJpbmRpbmdGYXVsdChTdHJpbmcgbmFtZSkKLSAgewotICAgIEJpbmRpbmdGYXVsdCByZXN1bHQgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVCaW5kaW5nRmF1bHRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEJpbmRpbmdGYXVsdCBmYXVsdCA9IChCaW5kaW5nRmF1bHQpaS5uZXh0KCk7Ci0gICAgICBpZiAobmFtZS5lcXVhbHMoZmF1bHQuZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZmF1bHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIGZhdWx0IGJpbmRpbmdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wZXJhdGlvbiBiaW5kaW5nLgotICAgKiBAcmV0dXJuIG5hbWVzIG9mIGZhdWx0IGJpbmRpbmdzCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRCaW5kaW5nRmF1bHRzKCkKLSAgewotICAgIEhhc2hNYXAgaGFzaE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RUJpbmRpbmdGYXVsdHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpaS5uZXh0KCk7Ci0gICAgICBoYXNoTWFwLnB1dChiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpLCBiaW5kaW5nRmF1bHQpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaE1hcDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk9wZXJhdGlvbiBnZXRPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldEVPcGVyYXRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE9wZXJhdGlvbihqYXZheC53c2RsLk9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBzZXRFT3BlcmF0aW9uKChPcGVyYXRpb24pb3BlcmF0aW9uKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBnZXRCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIGdldEVCaW5kaW5nSW5wdXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXQgdGhlIGlucHV0IG9mIHRoaXMgb3BlcmF0aW9uIGJpbmRpbmcuCi0gICAqIEBwYXJhbSBpbnB1dCB0aGUgZGVzaXJlZCBpbnB1dAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdJbnB1dChqYXZheC53c2RsLkJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQpCi0gIHsKLSAgICBzZXRFQmluZGluZ0lucHV0KChCaW5kaW5nSW5wdXQpYmluZGluZ0lucHV0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgZ2V0QmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXQgdGhlIG91dHB1dCBvZiB0aGlzIG9wZXJhdGlvbiBiaW5kaW5nLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdPdXRwdXQoamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICBzZXRFQmluZGluZ091dHB1dCgoQmluZGluZ091dHB1dCliaW5kaW5nT3V0cHV0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUOgotICAgICAgcmV0dXJuIGJhc2ljU2V0RUJpbmRpbmdJbnB1dChudWxsLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDoKLSAgICAgIHJldHVybiBiYXNpY1NldEVCaW5kaW5nT3V0cHV0KG51bGwsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFQmluZGluZ0ZhdWx0cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRU9QRVJBVElPTjoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RU9wZXJhdGlvbigpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RU9wZXJhdGlvbigpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQ6Ci0gICAgICByZXR1cm4gZ2V0RUJpbmRpbmdJbnB1dCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUOgotICAgICAgcmV0dXJuIGdldEVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFM6Ci0gICAgICByZXR1cm4gZ2V0RUJpbmRpbmdGYXVsdHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fTkFNRToKLSAgICAgIHNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OOgotICAgICAgc2V0RU9wZXJhdGlvbigoT3BlcmF0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0lOUFVUOgotICAgICAgc2V0RUJpbmRpbmdJbnB1dCgoQmluZGluZ0lucHV0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDoKLSAgICAgIHNldEVCaW5kaW5nT3V0cHV0KChCaW5kaW5nT3V0cHV0KW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX0ZBVUxUUzoKLSAgICAgIGdldEVCaW5kaW5nRmF1bHRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVCaW5kaW5nRmF1bHRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT046Ci0gICAgICBzZXRFT3BlcmF0aW9uKChPcGVyYXRpb24pbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVDoKLSAgICAgIHNldEVCaW5kaW5nSW5wdXQoKEJpbmRpbmdJbnB1dCludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VCSU5ESU5HX09VVFBVVDoKLSAgICAgIHNldEVCaW5kaW5nT3V0cHV0KChCaW5kaW5nT3V0cHV0KW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfRkFVTFRTOgotICAgICAgZ2V0RUJpbmRpbmdGYXVsdHMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PUEVSQVRJT05fX0VPUEVSQVRJT046Ci0gICAgICByZXR1cm4gZU9wZXJhdGlvbiAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfSU5QVVQ6Ci0gICAgICByZXR1cm4gZUJpbmRpbmdJbnB1dCAhPSBudWxsOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUOgotICAgICAgcmV0dXJuIGVCaW5kaW5nT3V0cHV0ICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFM6Ci0gICAgICByZXR1cm4gZUJpbmRpbmdGYXVsdHMgIT0gbnVsbCAmJiAhZUJpbmRpbmdGYXVsdHMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIik7Ci0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXROYW1lKG5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0KLSAgICBzd2l0Y2ggKFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoY2hpbGQpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5JTlBVVDoKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ0lucHV0IGlucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgICAgICBpbnB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBpbnB1dC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgc2V0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuT1VUUFVUOgotICAgICAgewotICAgICAgICBCaW5kaW5nT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgIG91dHB1dC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgICAgICBvdXRwdXQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIHNldEJpbmRpbmdPdXRwdXQob3V0cHV0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuRkFVTFQ6Ci0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdGYXVsdCBmYXVsdCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nRmF1bHQoKTsKLSAgICAgICAgZmF1bHQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICAgICAgZmF1bHQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGFkZEJpbmRpbmdGYXVsdChmYXVsdCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZSh0aGlzLCBpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKWNvbXBvbmVudDsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRFQmluZGluZ0lucHV0KG51bGwpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRFQmluZGluZ091dHB1dChudWxsKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5yZW1vdmUobW9kZWxPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pY29tcG9uZW50OwotCi0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkpOwotICAgIH0KLQotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkpOwotICAgIH0KLQotICAgIGxpc3QuYWRkQWxsKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKSk7Ci0gICAgbGlzdC5hZGRBbGwoYmluZGluZ09wZXJhdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldEJpbmRpbmdPcGVyYXRpb25fTmFtZSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuT1BFUkFUSU9OKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKWV4dGVuc2liaWxpdHlFbGVtZW50KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICBCaW5kaW5nSW5wdXQgaW5wdXQgPSBnZXRFQmluZGluZ0lucHV0KCk7Ci0gICAgaWYgKGlucHV0ICE9IG51bGwpCi0gICAgewotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoQmluZGluZ0lucHV0SW1wbClpbnB1dCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgQmluZGluZ091dHB1dCBvdXRwdXQgPSBnZXRFQmluZGluZ091dHB1dCgpOwotICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChCaW5kaW5nT3V0cHV0SW1wbClvdXRwdXQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIGl0ZXJhdG9yID0gZ2V0RUJpbmRpbmdGYXVsdHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgQmluZGluZ0ZhdWx0IGZhdWx0ID0gKEJpbmRpbmdGYXVsdClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChCaW5kaW5nRmF1bHRJbXBsKWZhdWx0KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIC8vIFJlc29sdmUgdGhlIHJlZmVyZW5jZSB0byBPcGVyYXRpb24KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlUmVmZXJlbmNlcyhib29sZWFuIGRlZXApCi0gIHsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWdldENvbnRhaW5lcigpOwotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBiaW5kaW5nLmdldEVQb3J0VHlwZSgpOwotICAgICAgaWYgKHBvcnRUeXBlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdJbnB1dCBpbnB1dCA9IGdldEVCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBvdXRwdXQgPSBnZXRFQmluZGluZ091dHB1dCgpOwotCi0gICAgICAgIFN0cmluZyBpbnB1dE5hbWUgPSBpbnB1dCAhPSBudWxsID8gaW5wdXQuZ2V0TmFtZSgpIDogbnVsbDsKLSAgICAgICAgU3RyaW5nIG91dHB1dE5hbWUgPSBvdXRwdXQgIT0gbnVsbCA/IG91dHB1dC5nZXROYW1lKCkgOiBudWxsOwotCi0gICAgICAgIHNldE9wZXJhdGlvbihwb3J0VHlwZS5nZXRPcGVyYXRpb24oZ2V0TmFtZSgpLCBpbnB1dE5hbWUsIG91dHB1dE5hbWUpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotfSAvL0JpbmRpbmdPcGVyYXRpb25JbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvQmluZGluZ091dHB1dEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nT3V0cHV0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODM5M2YxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9CaW5kaW5nT3V0cHV0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkJpbmRpbmcgT3V0cHV0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPdXRwdXRJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ091dHB1dEltcGwjZ2V0RU91dHB1dCA8ZW0+RU91dHB1dDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIEJpbmRpbmdPdXRwdXRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgQmluZGluZ091dHB1dAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFT3V0cHV0KCkgPGVtPkVPdXRwdXQ8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVPdXRwdXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgT3V0cHV0IGVPdXRwdXQgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPdXRwdXRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5CSU5ESU5HX09VVFBVVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotICAgIG5hbWUgPSBuZXdOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPdXRwdXQgZ2V0RU91dHB1dCgpCi0gIHsKLSAgICBpZiAoZU91dHB1dCAhPSBudWxsICYmIGVPdXRwdXQuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRU91dHB1dCA9IChJbnRlcm5hbEVPYmplY3QpZU91dHB1dDsKLSAgICAgIGVPdXRwdXQgPSAoT3V0cHV0KWVSZXNvbHZlUHJveHkob2xkRU91dHB1dCk7Ci0gICAgICBpZiAoZU91dHB1dCAhPSBvbGRFT3V0cHV0KQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19FT1VUUFVULCBvbGRFT3V0cHV0LCBlT3V0cHV0KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlT3V0cHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT3V0cHV0IGJhc2ljR2V0RU91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gZU91dHB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RU91dHB1dChPdXRwdXQgbmV3RU91dHB1dCkKLSAgewotICAgIE91dHB1dCBvbGRFT3V0cHV0ID0gZU91dHB1dDsKLSAgICBlT3V0cHV0ID0gbmV3RU91dHB1dDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fRU9VVFBVVCwgb2xkRU91dHB1dCwgZU91dHB1dCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuT3V0cHV0IGdldE91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RU91dHB1dCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0T3V0cHV0KGphdmF4LndzZGwuT3V0cHV0IG91dHB1dCkKLSAgewotICAgIHNldEVPdXRwdXQoKE91dHB1dClvdXRwdXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fTkFNRToKLSAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19FT1VUUFVUOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFT3V0cHV0KCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFT3V0cHV0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX05BTUU6Ci0gICAgICBzZXROYW1lKChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fRU9VVFBVVDoKLSAgICAgIHNldEVPdXRwdXQoKE91dHB1dCluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVF9fTkFNRToKLSAgICAgIHNldE5hbWUoTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19FT1VUUFVUOgotICAgICAgc2V0RU91dHB1dCgoT3V0cHV0KW51bGwpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfT1VUUFVUX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVRfX0VPVVRQVVQ6Ci0gICAgICByZXR1cm4gZU91dHB1dCAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIGlmIChjaGFuZ2VkRWxlbWVudC5oYXNBdHRyaWJ1dGUoIm5hbWUiKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2V0TmFtZShuYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkucmVtb3ZlKGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IChCaW5kaW5nT3V0cHV0KWNvbXBvbmVudDsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgbGlzdC5hZGRBbGwoYmluZGluZ091dHB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXRCaW5kaW5nT3V0cHV0X05hbWUoKSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCBnZXROYW1lKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLk9VVFBVVCk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClleHRlbnNpYmlsaXR5RWxlbWVudCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLQotICAvLyBSZXNvbHZlIHRoZSByZWZlcmVuY2UgdG8gT3V0cHV0Ci0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvcCA9IChCaW5kaW5nT3BlcmF0aW9uKWdldENvbnRhaW5lcigpOwotICAgICAgT3BlcmF0aW9uIG9wID0gYm9wLmdldEVPcGVyYXRpb24oKTsKLSAgICAgIGlmIChvcCAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZXRPdXRwdXQob3AuZ2V0RU91dHB1dCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotfSAvL0JpbmRpbmdPdXRwdXRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRGVmaW5pdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9EZWZpbml0aW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzg3MzUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9EZWZpbml0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RJbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNESW1wb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RTY2hlbWFJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uZXZlbnRzLkV2ZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLmV2ZW50cy5FdmVudExpc3RlbmVyOwotaW1wb3J0IG9yZy53M2MuZG9tLmV2ZW50cy5FdmVudFRhcmdldDsKLWltcG9ydCBvcmcudzNjLmRvbS5ldmVudHMuTXV0YXRpb25FdmVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVmaW5pdGlvbjwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRUYXJnZXROYW1lc3BhY2UgPGVtPlRhcmdldCBOYW1lc3BhY2U8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldFFOYW1lIDxlbT5RTmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5EZWZpbml0aW9uSW1wbCNnZXRFbmNvZGluZyA8ZW0+RW5jb2Rpbmc8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwjZ2V0RUltcG9ydHMgPGVtPkVJbXBvcnRzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldEVUeXBlcyA8ZW0+RVR5cGVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldEVNZXNzYWdlcyA8ZW0+RU1lc3NhZ2VzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldEVQb3J0VHlwZXMgPGVtPkVQb3J0IFR5cGVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldEVCaW5kaW5ncyA8ZW0+RUJpbmRpbmdzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldEVTZXJ2aWNlcyA8ZW0+RVNlcnZpY2VzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsI2dldEVOYW1lc3BhY2VzIDxlbT5FTmFtZXNwYWNlczwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIERlZmluaXRpb25JbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgRGVmaW5pdGlvbgotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MTlMgPSAieG1sbnMiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXROYW1lc3BhY2UoKSA8ZW0+VGFyZ2V0IE5hbWVzcGFjZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX05BTUVTUEFDRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldE5hbWVzcGFjZSgpIDxlbT5UYXJnZXQgTmFtZXNwYWNlPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRUYXJnZXROYW1lc3BhY2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IFRBUkdFVF9OQU1FU1BBQ0VfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uKCkgPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRMb2NhdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb24gPSBMT0NBVElPTl9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFFOYW1lKCkgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgcU5hbWUgPSBRTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVuY29kaW5nKCkgPGVtPkVuY29kaW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFbmNvZGluZygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEVOQ09ESU5HX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RW5jb2RpbmcoKSA8ZW0+RW5jb2Rpbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVuY29kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBlbmNvZGluZyA9IEVOQ09ESU5HX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFSW1wb3J0cygpIDxlbT5FSW1wb3J0czwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFSW1wb3J0cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlSW1wb3J0cyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVUeXBlcygpIDxlbT5FVHlwZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVUeXBlcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBUeXBlcyBlVHlwZXMgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFTWVzc2FnZXMoKSA8ZW0+RU1lc3NhZ2VzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVNZXNzYWdlcygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlTWVzc2FnZXMgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUG9ydFR5cGVzKCkgPGVtPkVQb3J0IFR5cGVzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVQb3J0VHlwZXMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZVBvcnRUeXBlcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVCaW5kaW5ncygpIDxlbT5FQmluZGluZ3M8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUJpbmRpbmdzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVCaW5kaW5ncyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVTZXJ2aWNlcygpIDxlbT5FU2VydmljZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVNlcnZpY2VzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVTZXJ2aWNlcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVOYW1lc3BhY2VzKCkgPGVtPkVOYW1lc3BhY2VzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVOYW1lc3BhY2VzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVOYW1lc3BhY2VzID0gbnVsbDsKLQotICBwcml2YXRlIEV4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5OwotCi0gIHByaXZhdGUgRG9jdW1lbnQgZG9jdW1lbnQ7Ci0KLSAgcHJpdmF0ZSBIYXNoTWFwIG5hbWVzcGFjZXMgPSBuZXcgSGFzaE1hcCgpOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIERlZmluaXRpb25JbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5ERUZJTklUSU9OOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gdGFyZ2V0TmFtZXNwYWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUYXJnZXROYW1lc3BhY2UoU3RyaW5nIG5ld1RhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIFN0cmluZyBvbGRUYXJnZXROYW1lc3BhY2UgPSB0YXJnZXROYW1lc3BhY2U7Ci0gICAgdGFyZ2V0TmFtZXNwYWNlID0gbmV3VGFyZ2V0TmFtZXNwYWNlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0UsIG9sZFRhcmdldE5hbWVzcGFjZSwgdGFyZ2V0TmFtZXNwYWNlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgbmV3TG9jYXRpb24pCi0gIHsKLSAgICBTdHJpbmcgb2xkTG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICBsb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0xPQ0FUSU9OLCBvbGRMb2NhdGlvbiwgbG9jYXRpb24pKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFFOYW1lKCkKLSAgewotICAgIHJldHVybiBxTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UU5hbWUoUU5hbWUgbmV3UU5hbWUpCi0gIHsKLSAgICBRTmFtZSBvbGRRTmFtZSA9IHFOYW1lOwotICAgIHFOYW1lID0gbmV3UU5hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fUU5BTUUsIG9sZFFOYW1lLCBxTmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkKLSAgewotICAgIHJldHVybiBlbmNvZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5jb2RpbmcoU3RyaW5nIG5ld0VuY29kaW5nKQotICB7Ci0gICAgU3RyaW5nIG9sZEVuY29kaW5nID0gZW5jb2Rpbmc7Ci0gICAgZW5jb2RpbmcgPSBuZXdFbmNvZGluZzsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTkNPRElORywgb2xkRW5jb2RpbmcsIGVuY29kaW5nKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFTWVzc2FnZXMoKQotICB7Ci0gICAgaWYgKGVNZXNzYWdlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVNZXNzYWdlcyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChNZXNzYWdlLmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTUVTU0FHRVMpOwotICAgIH0KLSAgICByZXR1cm4gZU1lc3NhZ2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RVBvcnRUeXBlcygpCi0gIHsKLSAgICBpZiAoZVBvcnRUeXBlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVQb3J0VHlwZXMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoUG9ydFR5cGUuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VQT1JUX1RZUEVTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVQb3J0VHlwZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFQmluZGluZ3MoKQotICB7Ci0gICAgaWYgKGVCaW5kaW5ncyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVCaW5kaW5ncyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChCaW5kaW5nLmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FQklORElOR1MpOwotICAgIH0KLSAgICByZXR1cm4gZUJpbmRpbmdzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RVNlcnZpY2VzKCkKLSAgewotICAgIGlmIChlU2VydmljZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlU2VydmljZXMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoU2VydmljZS5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVNFUlZJQ0VTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVTZXJ2aWNlczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBAZGVwcmVjYXRlZAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVOYW1lc3BhY2VzKCkKLSAgewotICAgIGlmIChlTmFtZXNwYWNlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVOYW1lc3BhY2VzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KE5hbWVzcGFjZS5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5BTUVTUEFDRVMpOwotICAgIH0KLSAgICByZXR1cm4gZU5hbWVzcGFjZXM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBUeXBlcyBnZXRFVHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIGVUeXBlczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0RVR5cGVzKFR5cGVzIG5ld0VUeXBlcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIFR5cGVzIG9sZEVUeXBlcyA9IGVUeXBlczsKLSAgICBlVHlwZXMgPSBuZXdFVHlwZXM7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgIHsKLSAgICAgIEVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FVFlQRVMsIG9sZEVUeXBlcywgbmV3RVR5cGVzKTsKLSAgICAgIGlmIChtc2dzID09IG51bGwpCi0gICAgICAgIG1zZ3MgPSBub3RpZmljYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBtc2dzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFVHlwZXMoVHlwZXMgbmV3RVR5cGVzKQotICB7Ci0gICAgaWYgKG5ld0VUeXBlcyAhPSBlVHlwZXMpCi0gICAgewotICAgICAgTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7Ci0gICAgICBpZiAoZVR5cGVzICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCllVHlwZXMpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FVFlQRVMsIG51bGwsIG1zZ3MpOwotICAgICAgaWYgKG5ld0VUeXBlcyAhPSBudWxsKQotICAgICAgICBtc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3RVR5cGVzKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVRZUEVTLCBudWxsLCBtc2dzKTsKLSAgICAgIG1zZ3MgPSBiYXNpY1NldEVUeXBlcyhuZXdFVHlwZXMsIG1zZ3MpOwotICAgICAgaWYgKG1zZ3MgIT0gbnVsbCkKLSAgICAgICAgbXNncy5kaXNwYXRjaCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUywgbmV3RVR5cGVzLCBuZXdFVHlwZXMpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVOb3RpZnkoTm90aWZpY2F0aW9uIG1zZykKLSAgewotICAgIHN1cGVyLmVOb3RpZnkobXNnKTsKLQotICAgIC8vIGNzLi4gaWYgd2UndmUgYWRkZWQgYSBUeXBlcyBlbGVtZW50LCBhbmQgdGhpcyBkZWZpbml0aW9uIGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYSByZXNvdXJjZQotICAgIC8vIHdlIG5lZWQgdG8gc2V0IHRoZSBzY2hlbWFMb2NhdGlvbnMgZm9yIGFueSBpbmxpbmUgc2NoZW1hTG9jYXRpb25zLgotICAgIC8vIElmIG5vdCB5ZXQgYXR0YWNoZWQgdG8gYSByZXNvdXJjZSwgdGhlIHNjaGVtYUxvY2F0aW9uJ3Mgd2lsbCBiZSBzZXQgdmlhIFdTRExSZXNvdXJjZUltcGwuYXR0YWNoZWQoRU9iamVjdCBvKQotICAgIC8vCi0gICAgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRVR5cGVzKCkgJiYgbXNnLmdldEV2ZW50VHlwZSgpID09IE5vdGlmaWNhdGlvbi5TRVQpCi0gICAgewotICAgICAgaWYgKGVSZXNvdXJjZSgpIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCAmJiBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2V0SW5saW5lU2NoZW1hTG9jYXRpb25zKGVSZXNvdXJjZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFSW1wb3J0cygpCi0gIHsKLSAgICBpZiAoZUltcG9ydHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlSW1wb3J0cyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChJbXBvcnQuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VJTVBPUlRTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVJbXBvcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEFkZCBhIGJpbmRpbmcgdG8gdGhpcyBXU0RMIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gYmluZGluZyB0aGUgYmluZGluZyB0byBiZSBhZGRlZAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEJpbmRpbmcoamF2YXgud3NkbC5CaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBnZXRFQmluZGluZ3MoKS5hZGQoKEJpbmRpbmcpYmluZGluZyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGFuIGltcG9ydCB0byB0aGlzIFdTREwgZGVzY3JpcHRpb24uCi0gICAqIEBwYXJhbSBpbXBvcnREZWYgdGhlIGltcG9ydCB0byBiZSBhZGRlZAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEltcG9ydChqYXZheC53c2RsLkltcG9ydCBpbXBvcnREZWYpCi0gIHsKLSAgICBnZXRFSW1wb3J0cygpLmFkZCgoSW1wb3J0KWltcG9ydERlZik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGEgbWVzc2FnZSB0byB0aGlzIFdTREwgZGVzY3JpcHRpb24uCi0gICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIHRvIGJlIGFkZGVkCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTWVzc2FnZShqYXZheC53c2RsLk1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIGdldEVNZXNzYWdlcygpLmFkZCgoTWVzc2FnZSltZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGlzIGEgd2F5IHRvIGFkZCBhIG5hbWVzcGFjZSBhc3NvY2lhdGlvbiB0byBhIGRlZmluaXRpb24uCi0gICAqIEl0IGlzIHNpbWlsYXIgdG8gYWRkaW5nIGEgbmFtZXNwYWNlIHByZWZpeCBkZWNsYXJhdGlvbiB0byB0aGUKLSAgICogdG9wIG9mIGEgJmx0O3dzZGw6ZGVmaW5pdGlvbiZndDsgZWxlbWVudC4gVGhpcyBoYXMgbm90aGluZyB0byBkbwotICAgKiB3aXRoIHRoZSAmbHQ7d3NkbDppbXBvcnQmZ3Q7IGVsZW1lbnQ7IHRoZXJlIGFyZSBzZXBhcmF0ZSBtZXRob2RzIGZvcgotICAgKiBkZWFsaW5nIHdpdGggaW5mb3JtYXRpb24gZGVzY3JpYmVkIGJ5ICZsdDt3c2RsOmltcG9ydCZndDsgZWxlbWVudHMuCi0gICAqIFRoZXJlIGlzIGEgZGVmYXVsdCBuYW1lc3BhY2UgYXNzb2NpYXRpb24gKHdoaWNoIGNhbiBiZQotICAgKiBvdmVycmlkZGVuKSBiZXR3ZWVuIHRoZSBudWxsIHByZWZpeCBhbmQKLSAgICogaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8uCi0gICAqIEBwYXJhbSBwcmVmaXggdGhlIHByZWZpeCB0byB1c2UgZm9yIHRoaXMgbmFtZXNwYWNlICh3aGVuCi0gICAqIHJlbmRlcmluZyB0aGlzIGluZm9ybWF0aW9uIGFzIFhNTCkuIFVzZSBudWxsIG9yIGFuIGVtcHR5IHN0cmluZwotICAgKiB0byBkZXNjcmliZSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgKGkuZS4geG1sbnM9Ii4uLiIpLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJIHRoZSBuYW1lc3BhY2UgVVJJIHRvIGFzc29jaWF0ZSB0aGUgcHJlZml4Ci0gICAqIHdpdGguIElmIHlvdSB1c2UgbnVsbCwgdGhlIG5hbWVzcGFjZSBhc3NvY2lhdGlvbiB3aWxsIGJlIHJlbW92ZWQuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTmFtZXNwYWNlKFN0cmluZyBwcmVmaXgsIFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBpZiAocHJlZml4ID09IG51bGwpCi0gICAgICBwcmVmaXggPSAiIjsKLQotICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBGaXJzdCwgY2hlY2sgaWYgdGhlcmUgaXMgdGhpcyBuYW1lc3BhY2UgYWxyZWFkeS4KLSAgICAgIFN0cmluZyBleGlzdGluZ1ByZWZpeCA9IGdldFByZWZpeChuYW1lc3BhY2VVUkkpOwotICAgICAgaWYgKGV4aXN0aW5nUHJlZml4ICE9IG51bGwpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcmVmaXggaXMgbm90IGFscmVhZHkgdXNlZCBmb3IgYSBkaWZmZXJlbnQgbmFtZXNwYWNlCi0gICAgICBNYXAgbmFtZXNwYWNlcyA9IGdldE5hbWVzcGFjZXMoKTsKLSAgICAgIFN0cmluZyBleGlzdGluZ05hbWVzcGFjZSA9IChTdHJpbmcpbmFtZXNwYWNlcy5nZXQocHJlZml4KTsKLSAgICAgIGlmIChleGlzdGluZ05hbWVzcGFjZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lc3BhY2VzLnB1dChwcmVmaXgsIG5hbWVzcGFjZVVSSSk7Ci0KLSAgICAgICAgLy8gU3VwcG9ydCBmb3IgTmFtZXNwYWNlCi0gICAgICAgIE5hbWVzcGFjZSBlbnMgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTmFtZXNwYWNlKCk7Ci0gICAgICAgIGVucy5zZXRQcmVmaXgocHJlZml4KTsKLSAgICAgICAgZW5zLnNldFVSSShuYW1lc3BhY2VVUkkpOwotICAgICAgICBnZXRFTmFtZXNwYWNlcygpLmFkZChlbnMpOwotCi0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gVGhlIHByZWZpeCBpcyB0YWtlbiBhbHJlYWR5LiBNYWtlIGEgdW5pcXVlIHByZWZpeAotICAgICAgaWYgKHByZWZpeC5lbmRzV2l0aCgiMSIpKQotICAgICAgICBwcmVmaXggPSBwcmVmaXguc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGgoKSAtIDEpOwotCi0gICAgICBmb3IgKGludCBpID0gMjs7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5ld1ByZWZpeCA9IHByZWZpeCArIGk7Ci0gICAgICAgIGlmICghbmFtZXNwYWNlcy5jb250YWluc0tleShuZXdQcmVmaXgpKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZXNwYWNlcy5wdXQobmV3UHJlZml4LCBuYW1lc3BhY2VVUkkpOwotCi0gICAgICAgICAgLy8gU3VwcG9ydCBmb3IgTmFtZXNwYWNlCi0gICAgICAgICAgTmFtZXNwYWNlIGVucyA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOYW1lc3BhY2UoKTsKLSAgICAgICAgICBlbnMuc2V0UHJlZml4KHByZWZpeCk7Ci0gICAgICAgICAgZW5zLnNldFVSSShuYW1lc3BhY2VVUkkpOwotICAgICAgICAgIGdldEVOYW1lc3BhY2VzKCkuYWRkKGVucyk7Ci0KLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IC8vIGVuZCBpZiAobmFtZXNwYWNlVVJJICE9IG51bGwpCi0gICAgZWxzZQotICAgIHsKLSAgICAgIGdldE5hbWVzcGFjZXMoKS5yZW1vdmUocHJlZml4KTsKLQotICAgICAgLy8gU3VwcG9ydCBmb3IgTmFtZXNwYWNlCi0gICAgICBnZXRFTmFtZXNwYWNlcygpLnJlbW92ZShwcmVmaXgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYSBwb3J0VHlwZSB0byB0aGlzIFdTREwgZGVzY3JpcHRpb24uCi0gICAqIEBwYXJhbSBwb3J0VHlwZSB0aGUgcG9ydFR5cGUgdG8gYmUgYWRkZWQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQb3J0VHlwZShqYXZheC53c2RsLlBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgZ2V0RVBvcnRUeXBlcygpLmFkZCgoUG9ydFR5cGUpcG9ydFR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEFkZCBhIHNlcnZpY2UgdG8gdGhpcyBXU0RMIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gc2VydmljZSB0aGUgc2VydmljZSB0byBiZSBhZGRlZAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFNlcnZpY2UoamF2YXgud3NkbC5TZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBnZXRFU2VydmljZXMoKS5hZGQoKFNlcnZpY2Upc2VydmljZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IGJpbmRpbmcgZmF1bHQuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgYmluZGluZyBmYXVsdAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nRmF1bHQgY3JlYXRlQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ0ZhdWx0KCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdGYXVsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgYmluZGluZyBpbnB1dC4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBiaW5kaW5nIGlucHV0Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIEJpbmRpbmdJbnB1dCBjcmVhdGVCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nSW5wdXQoKTsKLSAgICByZXR1cm4gYmluZGluZ0lucHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBiaW5kaW5nIG91dHB1dC4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBiaW5kaW5nIG91dHB1dAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nT3V0cHV0IGNyZWF0ZUJpbmRpbmdPdXRwdXQoKQotICB7Ci0gICAgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdPdXRwdXQoKTsKLSAgICByZXR1cm4gYmluZGluZ091dHB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgYmluZGluZyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgYmluZGluZyBvcGVyYXRpb24KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBjcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IGJpbmRpbmcuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgYmluZGluZwotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmcgY3JlYXRlQmluZGluZygpCi0gIHsKLSAgICBqYXZheC53c2RsLkJpbmRpbmcgYmluZGluZyA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZygpOwotICAgIGJpbmRpbmcuc2V0VW5kZWZpbmVkKHRydWUpOwotICAgIHJldHVybiBiaW5kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBmYXVsdC4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBmYXVsdAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBGYXVsdCBjcmVhdGVGYXVsdCgpCi0gIHsKLSAgICBqYXZheC53c2RsLkZhdWx0IGZhdWx0ID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVGYXVsdCgpOwotICAgIHJldHVybiBmYXVsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgaW1wb3J0LgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIGltcG9ydAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkltcG9ydCBjcmVhdGVJbXBvcnQoKQotICB7Ci0gICAgamF2YXgud3NkbC5JbXBvcnQgaW1wb3J0RGVmID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVJbXBvcnQoKTsKLSAgICByZXR1cm4gaW1wb3J0RGVmOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBpbnB1dC4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBpbnB1dAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBJbnB1dCBjcmVhdGVJbnB1dCgpCi0gIHsKLSAgICBqYXZheC53c2RsLklucHV0IGlucHV0ID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVJbnB1dCgpOwotICAgIHJldHVybiBpbnB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBtZXNzYWdlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuTWVzc2FnZSBjcmVhdGVNZXNzYWdlKCkKLSAgewotICAgIGphdmF4LndzZGwuTWVzc2FnZSBtZXNzYWdlID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgbWVzc2FnZS5zZXRVbmRlZmluZWQodHJ1ZSk7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IG9wZXJhdGlvbi4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBvcGVyYXRpb24KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uIGNyZWF0ZU9wZXJhdGlvbigpCi0gIHsKLSAgICBqYXZheC53c2RsLk9wZXJhdGlvbiBvcGVyYXRpb24gPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbi5zZXRVbmRlZmluZWQodHJ1ZSk7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgb3V0cHV0LgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIG91dHB1dAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBPdXRwdXQgY3JlYXRlT3V0cHV0KCkKLSAgewotICAgIGphdmF4LndzZGwuT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlT3V0cHV0KCk7Ci0gICAgcmV0dXJuIG91dHB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBDcmVhdGUgYSBuZXcgcGFydC4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBwYXJ0Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIFBhcnQgY3JlYXRlUGFydCgpCi0gIHsKLSAgICBqYXZheC53c2RsLlBhcnQgcGFydCA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHJldHVybiBwYXJ0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIENyZWF0ZSBhIG5ldyBwb3J0LgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIHBvcnQKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgUG9ydCBjcmVhdGVQb3J0KCkKLSAgewotICAgIGphdmF4LndzZGwuUG9ydCBwb3J0ID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVQb3J0KCk7Ci0gICAgcmV0dXJuIHBvcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IHBvcnQgdHlwZS4KLSAgICogQHJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBwb3J0IHR5cGUKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5Qb3J0VHlwZSBjcmVhdGVQb3J0VHlwZSgpCi0gIHsKLSAgICBqYXZheC53c2RsLlBvcnRUeXBlIHBvcnRUeXBlID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVQb3J0VHlwZSgpOwotICAgIHBvcnRUeXBlLnNldFVuZGVmaW5lZCh0cnVlKTsKLSAgICByZXR1cm4gcG9ydFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQ3JlYXRlIGEgbmV3IHNlcnZpY2UuCi0gICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgc2VydmljZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlNlcnZpY2UgY3JlYXRlU2VydmljZSgpCi0gIHsKLSAgICBqYXZheC53c2RsLlNlcnZpY2Ugc2VydmljZSA9IFdTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlU2VydmljZSgpOwotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCB0aGUgc3BlY2lmaWVkIGJpbmRpbmcuIEFsc28gY2hlY2tzIGltcG9ydGVkIGRvY3VtZW50cy4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgYmluZGluZy4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBiaW5kaW5nLCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgYmluZGluZwotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmcgZ2V0QmluZGluZyhRTmFtZSBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChqYXZheC53c2RsLkJpbmRpbmcpcmVzb2x2ZVdTRExFbGVtZW50KFdTRExDb25zdGFudHMuQklORElORywgbmFtZSwgdGhpcyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IGFsbCB0aGUgYmluZGluZ3MgZGVmaW5lZCBoZXJlLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBNYXAgZ2V0QmluZGluZ3MoKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcChXU0RMQ29uc3RhbnRzLkJJTkRJTkcsIGdldEVCaW5kaW5ncygpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYSBtYXAgb2YgbGlzdHMgY29udGFpbmluZyBhbGwgdGhlIGltcG9ydHMgZGVmaW5lZCBoZXJlLgotICAgKiBUaGUgbWFwJ3Mga2V5cyBhcmUgdGhlIG5hbWVzcGFjZVVSSXMsIGFuZCB0aGUgbWFwJ3MgdmFsdWVzCi0gICAqIGFyZSBsaXN0cy4gVGhlcmUgaXMgb25lIGxpc3QgZm9yIGVhY2ggbmFtZXNwYWNlVVJJIGZvciB3aGljaAotICAgKiBpbXBvcnRzIGhhdmUgYmVlbiBkZWZpbmVkLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBNYXAgZ2V0SW1wb3J0cygpCi0gIHsKLSAgICBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RUltcG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpaS5uZXh0KCk7Ci0gICAgICBTdHJpbmcga2V5ID0gdGhlSW1wb3J0LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKGtleSA9PSBudWxsKQotICAgICAgewotICAgICAgICBrZXkgPSAiIjsKLSAgICAgIH0KLQotICAgICAgTGlzdCBsaXN0ID0gbnVsbDsKLSAgICAgIGlmIChtYXAuY29udGFpbnNLZXkoa2V5KSkKLSAgICAgIHsKLSAgICAgICAgbGlzdCA9IChMaXN0KW1hcC5nZXQoa2V5KTsKLSAgICAgICAgbGlzdC5hZGQodGhlSW1wb3J0KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgbGlzdC5hZGQodGhlSW1wb3J0KTsKLSAgICAgIH0KLSAgICAgIG1hcC5wdXQoa2V5LCBsaXN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIGxpc3Qgb2YgaW1wb3J0cyBmb3IgdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VVUkkuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkgdGhlIG5hbWVzcGFjZVVSSSBhc3NvY2lhdGVkIHdpdGggdGhlCi0gICAqIGRlc2lyZWQgaW1wb3J0cy4KLSAgICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW1wb3J0cwotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEltcG9ydHMoU3RyaW5nIG5hbWVzcGFjZVVSSSkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydClpLm5leHQoKTsKLSAgICAgIGlmIChXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UobmFtZXNwYWNlVVJJLCB0aGVJbXBvcnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotICAgICAgICBsaXN0LmFkZCh0aGVJbXBvcnQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBtZXNzYWdlLiBBbHNvIGNoZWNrcyBpbXBvcnRlZCBkb2N1bWVudHMuCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSwgb3IgbnVsbCBpZiB0aGVyZSB3YXNuJ3QKLSAgICogYW55IG1hdGNoaW5nIG1lc3NhZ2UKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5NZXNzYWdlIGdldE1lc3NhZ2UoUU5hbWUgbmFtZSkKLSAgewotICAgIHJldHVybiAoamF2YXgud3NkbC5NZXNzYWdlKXJlc29sdmVXU0RMRWxlbWVudChXU0RMQ29uc3RhbnRzLk1FU1NBR0UsIG5hbWUsIHRoaXMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIG1lc3NhZ2VzIGRlZmluZWQgaGVyZS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTWFwIGdldE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBjcmVhdGVNYXAoV1NETENvbnN0YW50cy5NRVNTQUdFLCBnZXRFTWVzc2FnZXMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBuYW1lc3BhY2UgVVJJIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByZWZpeC4gT3IgbnVsbCBpZgotICAgKiB0aGVyZSBpcyBubyBuYW1lc3BhY2UgVVJJIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByZWZpeC4gVGhpcyBpcwotICAgKiB1bnJlbGF0ZWQgdG8gdGhlICZsdDt3c2RsOmltcG9ydCZndDsgZWxlbWVudC4KLSAgICogQHNlZSAjYWRkTmFtZXNwYWNlKFN0cmluZywgU3RyaW5nKQotICAgKiBAc2VlICNnZXRQcmVmaXgoU3RyaW5nKQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKFN0cmluZyBwcmVmaXgpCi0gIHsKLSAgICByZXR1cm4gKFN0cmluZylnZXROYW1lc3BhY2VzKCkuZ2V0KHByZWZpeCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IGFsbCBuYW1lc3BhY2UgYXNzb2NpYXRpb25zIGluIHRoaXMgZGVmaW5pdGlvbi4gVGhlIGtleXMgYXJlCi0gICAqIHRoZSBwcmVmaXhlcywgYW5kIHRoZSBuYW1lc3BhY2UgVVJJcyBhcmUgdGhlIHZhbHVlcy4gVGhpcyBpcwotICAgKiB1bnJlbGF0ZWQgdG8gdGhlICZsdDt3c2RsOmltcG9ydCZndDsgZWxlbWVudC4KLSAgICogQHNlZSAjYWRkTmFtZXNwYWNlKFN0cmluZywgU3RyaW5nKQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBNYXAgZ2V0TmFtZXNwYWNlcygpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBwb3J0VHlwZS4gQWxzbyBjaGVja3MgaW1wb3J0ZWQgZG9jdW1lbnRzLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBwb3J0VHlwZS4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBwb3J0VHlwZSwgb3IgbnVsbCBpZiB0aGVyZSB3YXNuJ3QKLSAgICogYW55IG1hdGNoaW5nIHBvcnRUeXBlCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuUG9ydFR5cGUgZ2V0UG9ydFR5cGUoUU5hbWUgbmFtZSkKLSAgewotICAgIHJldHVybiAoamF2YXgud3NkbC5Qb3J0VHlwZSlyZXNvbHZlV1NETEVsZW1lbnQoV1NETENvbnN0YW50cy5QT1JUX1RZUEUsIG5hbWUsIHRoaXMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIHBvcnRUeXBlcyBkZWZpbmVkIGhlcmUuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRQb3J0VHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcChXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRSwgZ2V0RVBvcnRUeXBlcygpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYSBwcmVmaXggYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmFtZXNwYWNlIFVSSS4gT3IgbnVsbCBpZgotICAgKiB0aGVyZSBhcmUgbm8gcHJlZml4ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmFtZXNwYWNlIFVSSS4gVGhpcyBpcwotICAgKiB1bnJlbGF0ZWQgdG8gdGhlICZsdDt3c2RsOmltcG9ydCZndDsgZWxlbWVudC4KLSAgICogQHNlZSAjYWRkTmFtZXNwYWNlKFN0cmluZywgU3RyaW5nKQotICAgKiBAc2VlICNnZXROYW1lc3BhY2UoU3RyaW5nKQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlVVJJID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIEl0ZXJhdG9yIGVudHJ5SXRlcmF0b3IgPSBnZXROYW1lc3BhY2VzKCkuZW50cnlTZXQoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChlbnRyeUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBNYXAuRW50cnkgZW50cnkgPSAoTWFwLkVudHJ5KWVudHJ5SXRlcmF0b3IubmV4dCgpOwotICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpZW50cnkuZ2V0S2V5KCk7Ci0gICAgICBTdHJpbmcgYXNzb2NOYW1lc3BhY2VVUkkgPSAoU3RyaW5nKWVudHJ5LmdldFZhbHVlKCk7Ci0KLSAgICAgIGlmIChuYW1lc3BhY2VVUkkuZXF1YWxzKGFzc29jTmFtZXNwYWNlVVJJKSAmJiBwcmVmaXggIT0gIiIpIC8vIGRlZmF1bHQgbmFtZXNwYWNlCi0gICAgICAgIHJldHVybiBwcmVmaXg7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCB0aGUgc3BlY2lmaWVkIHNlcnZpY2UuIEFsc28gY2hlY2tzIGltcG9ydGVkIGRvY3VtZW50cy4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgc2VydmljZS4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBzZXJ2aWNlLCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgc2VydmljZQotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlNlcnZpY2UgZ2V0U2VydmljZShRTmFtZSBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChqYXZheC53c2RsLlNlcnZpY2UpcmVzb2x2ZVdTRExFbGVtZW50KFdTRExDb25zdGFudHMuU0VSVklDRSwgbmFtZSwgdGhpcyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IGFsbCB0aGUgc2VydmljZXMgZGVmaW5lZCBoZXJlLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBNYXAgZ2V0U2VydmljZXMoKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcChXU0RMQ29uc3RhbnRzLlNFUlZJQ0UsIGdldEVTZXJ2aWNlcygpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIEV4dGVuc2lvblJlZ2lzdHJ5IGZvciB0aGlzIERlZmluaXRpb24uCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIEV4dGVuc2lvblJlZ2lzdHJ5IGdldEV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiBleHRlbnNpb25SZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXQgdGhlIEV4dGVuc2lvblJlZ2lzdHJ5IGZvciB0aGlzIERlZmluaXRpb24uCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXh0ZW5zaW9uUmVnaXN0cnkoRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmV4dGVuc2lvblJlZ2lzdHJ5ID0gZXh0ZW5zaW9uUmVnaXN0cnk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERvY3VtZW50QmFzZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TG9jYXRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERvY3VtZW50QmFzZVVSSShTdHJpbmcgZG9jdW1lbnRCYXNlKQotICB7Ci0gICAgc2V0TG9jYXRpb24oZG9jdW1lbnRCYXNlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlR5cGVzIGNyZWF0ZVR5cGVzKCkKLSAgewotICAgIGphdmF4LndzZGwuVHlwZXMgdHlwZXMgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZVR5cGVzKCk7Ci0gICAgcmV0dXJuIHR5cGVzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuU2VydmljZSByZW1vdmVTZXJ2aWNlKFFOYW1lIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKGphdmF4LndzZGwuU2VydmljZSlnZXRTZXJ2aWNlcygpLnJlbW92ZShuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmcgcmVtb3ZlQmluZGluZyhRTmFtZSBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChqYXZheC53c2RsLkJpbmRpbmcpZ2V0QmluZGluZ3MoKS5yZW1vdmUobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5Qb3J0VHlwZSByZW1vdmVQb3J0VHlwZShRTmFtZSBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChqYXZheC53c2RsLlBvcnRUeXBlKWdldFBvcnRUeXBlcygpLnJlbW92ZShuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLk1lc3NhZ2UgcmVtb3ZlTWVzc2FnZShRTmFtZSBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChqYXZheC53c2RsLk1lc3NhZ2UpZ2V0TWVzc2FnZXMoKS5yZW1vdmUobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5UeXBlcyBnZXRUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RVR5cGVzKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlcyhqYXZheC53c2RsLlR5cGVzIHR5cGVzKQotICB7Ci0gICAgc2V0RVR5cGVzKChUeXBlcyl0eXBlcyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VJTVBPUlRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFSW1wb3J0cygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUzoKLSAgICAgIHJldHVybiBiYXNpY1NldEVUeXBlcyhudWxsLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU1FU1NBR0VTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFTWVzc2FnZXMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FUE9SVF9UWVBFUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RVBvcnRUeXBlcygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VCSU5ESU5HUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RUJpbmRpbmdzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVNFUlZJQ0VTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFU2VydmljZXMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTkFNRVNQQUNFUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RU5hbWVzcGFjZXMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0U6Ci0gICAgICByZXR1cm4gZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0xPQ0FUSU9OOgotICAgICAgcmV0dXJuIGdldExvY2F0aW9uKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1FOQU1FOgotICAgICAgcmV0dXJuIGdldFFOYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQ09ESU5HOgotICAgICAgcmV0dXJuIGdldEVuY29kaW5nKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VJTVBPUlRTOgotICAgICAgcmV0dXJuIGdldEVJbXBvcnRzKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUzoKLSAgICAgIHJldHVybiBnZXRFVHlwZXMoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU1FU1NBR0VTOgotICAgICAgcmV0dXJuIGdldEVNZXNzYWdlcygpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FUE9SVF9UWVBFUzoKLSAgICAgIHJldHVybiBnZXRFUG9ydFR5cGVzKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VCSU5ESU5HUzoKLSAgICAgIHJldHVybiBnZXRFQmluZGluZ3MoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVNFUlZJQ0VTOgotICAgICAgcmV0dXJuIGdldEVTZXJ2aWNlcygpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTkFNRVNQQUNFUzoKLSAgICAgIHJldHVybiBnZXRFTmFtZXNwYWNlcygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0U6Ci0gICAgICBzZXRUYXJnZXROYW1lc3BhY2UoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0xPQ0FUSU9OOgotICAgICAgc2V0TG9jYXRpb24oKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1FOQU1FOgotICAgICAgc2V0UU5hbWUoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5DT0RJTkc6Ci0gICAgICBzZXRFbmNvZGluZygoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUlNUE9SVFM6Ci0gICAgICBnZXRFSW1wb3J0cygpLmNsZWFyKCk7Ci0gICAgICBnZXRFSW1wb3J0cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUzoKLSAgICAgIHNldEVUeXBlcygoVHlwZXMpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTUVTU0FHRVM6Ci0gICAgICBnZXRFTWVzc2FnZXMoKS5jbGVhcigpOwotICAgICAgZ2V0RU1lc3NhZ2VzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVBPUlRfVFlQRVM6Ci0gICAgICBnZXRFUG9ydFR5cGVzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVQb3J0VHlwZXMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FQklORElOR1M6Ci0gICAgICBnZXRFQmluZGluZ3MoKS5jbGVhcigpOwotICAgICAgZ2V0RUJpbmRpbmdzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVNFUlZJQ0VTOgotICAgICAgZ2V0RVNlcnZpY2VzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVTZXJ2aWNlcygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTOgotICAgICAgZ2V0RU5hbWVzcGFjZXMoKS5jbGVhcigpOwotICAgICAgZ2V0RU5hbWVzcGFjZXMoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRToKLSAgICAgIHNldFRhcmdldE5hbWVzcGFjZShUQVJHRVRfTkFNRVNQQUNFX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fTE9DQVRJT046Ci0gICAgICBzZXRMb2NhdGlvbihMT0NBVElPTl9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1FOQU1FOgotICAgICAgc2V0UU5hbWUoUU5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FTkNPRElORzoKLSAgICAgIHNldEVuY29kaW5nKEVOQ09ESU5HX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUlNUE9SVFM6Ci0gICAgICBnZXRFSW1wb3J0cygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VUWVBFUzoKLSAgICAgIHNldEVUeXBlcygoVHlwZXMpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VNRVNTQUdFUzoKLSAgICAgIGdldEVNZXNzYWdlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VQT1JUX1RZUEVTOgotICAgICAgZ2V0RVBvcnRUeXBlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VCSU5ESU5HUzoKLSAgICAgIGdldEVCaW5kaW5ncygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VTRVJWSUNFUzoKLSAgICAgIGdldEVTZXJ2aWNlcygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTOgotICAgICAgZ2V0RU5hbWVzcGFjZXMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX1RBUkdFVF9OQU1FU1BBQ0U6Ci0gICAgICByZXR1cm4gVEFSR0VUX05BTUVTUEFDRV9FREVGQVVMVCA9PSBudWxsID8gdGFyZ2V0TmFtZXNwYWNlICE9IG51bGwgOiAhVEFSR0VUX05BTUVTUEFDRV9FREVGQVVMVC5lcXVhbHModGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fTE9DQVRJT046Ci0gICAgICByZXR1cm4gTE9DQVRJT05fRURFRkFVTFQgPT0gbnVsbCA/IGxvY2F0aW9uICE9IG51bGwgOiAhTE9DQVRJT05fRURFRkFVTFQuZXF1YWxzKGxvY2F0aW9uKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fUU5BTUU6Ci0gICAgICByZXR1cm4gUU5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IHFOYW1lICE9IG51bGwgOiAhUU5BTUVfRURFRkFVTFQuZXF1YWxzKHFOYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRU5DT0RJTkc6Ci0gICAgICByZXR1cm4gRU5DT0RJTkdfRURFRkFVTFQgPT0gbnVsbCA/IGVuY29kaW5nICE9IG51bGwgOiAhRU5DT0RJTkdfRURFRkFVTFQuZXF1YWxzKGVuY29kaW5nKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUlNUE9SVFM6Ci0gICAgICByZXR1cm4gZUltcG9ydHMgIT0gbnVsbCAmJiAhZUltcG9ydHMuaXNFbXB0eSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FVFlQRVM6Ci0gICAgICByZXR1cm4gZVR5cGVzICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VNRVNTQUdFUzoKLSAgICAgIHJldHVybiBlTWVzc2FnZXMgIT0gbnVsbCAmJiAhZU1lc3NhZ2VzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRVBPUlRfVFlQRVM6Ci0gICAgICByZXR1cm4gZVBvcnRUeXBlcyAhPSBudWxsICYmICFlUG9ydFR5cGVzLmlzRW1wdHkoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuREVGSU5JVElPTl9fRUJJTkRJTkdTOgotICAgICAgcmV0dXJuIGVCaW5kaW5ncyAhPSBudWxsICYmICFlQmluZGluZ3MuaXNFbXB0eSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OX19FU0VSVklDRVM6Ci0gICAgICByZXR1cm4gZVNlcnZpY2VzICE9IG51bGwgJiYgIWVTZXJ2aWNlcy5pc0VtcHR5KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT05fX0VOQU1FU1BBQ0VTOgotICAgICAgcmV0dXJuIGVOYW1lc3BhY2VzICE9IG51bGwgJiYgIWVOYW1lc3BhY2VzLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KCkKLSAgewotICAgIHJldHVybiBkb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBTZXRzIHRoZSBvd25lciBkb2N1bWVudC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiICh0YXJnZXROYW1lc3BhY2U6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh0YXJnZXROYW1lc3BhY2UpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbG9jYXRpb246ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChsb2NhdGlvbik7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBxTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHFOYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIGVuY29kaW5nOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoZW5jb2RpbmcpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBIYW5kLWNvZGVkIG1ldGhvZHMKLSAgLy8KLQotICBwcm90ZWN0ZWQgc3RhdGljIFJlc291cmNlU2V0IGdsb2JhbFJlc291cmNlU2V0OwotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIFJlc291cmNlU2V0IGdldEdsb2JhbFJlc291cmNlU2V0KCkKLSAgewotICAgIGlmIChnbG9iYWxSZXNvdXJjZVNldCA9PSBudWxsKQotICAgIHsKLSAgICAgIGdsb2JhbFJlc291cmNlU2V0ID0gY3JlYXRlUmVzb3VyY2VTZXQoKTsKLSAgICAgIC8vU3RyaW5nIGJhc2VVUkwgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmdldEJhc2VVUkwoKS50b1N0cmluZygpOwotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkJhc2UgVVJMIGlzOiAiICsgYmFzZVVSTCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdsb2JhbFJlc291cmNlU2V0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBSZXNvdXJjZVNldCBjcmVhdGVSZXNvdXJjZVNldCgpCi0gIHsKLSAgICBSZXNvdXJjZVNldCByZXN1bHQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgcmVzdWx0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCJ3c2RsIiwgbmV3IFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOyAvLyROT04tTkxTLTEkCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgRGVmaW5pdGlvbiBjcmVhdGVEZWZpbml0aW9uKE5vZGUgbm9kZSkKLSAgewotICAgIHJldHVybiBjcmVhdGVEZWZpbml0aW9uKG5vZGUsIG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBEZWZpbml0aW9uIGNyZWF0ZURlZmluaXRpb24oTm9kZSBub2RlLCBTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlRGVmaW5pdGlvbihub2RlLCBsb2NhdGlvbiwgdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbihOb2RlIG5vZGUsIFN0cmluZyBsb2NhdGlvbiwgYm9vbGVhbiB1c2VFeHRlbnNpb25GYWN0b3JpZXMpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikuc2V0VXNlRXh0ZW5zaW9uRmFjdG9yaWVzKHVzZUV4dGVuc2lvbkZhY3Rvcmllcyk7Ci0gICAgZGVmaW5pdGlvbi5zZXRFbGVtZW50KChFbGVtZW50KW5vZGUpOwotICAgIGRlZmluaXRpb24uc2V0RG9jdW1lbnRCYXNlVVJJKGxvY2F0aW9uKTsKLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHByaXZhdGUgV1NETEVsZW1lbnQgcmVzb2x2ZVdTRExFbGVtZW50KGludCB0eXBlLCBMaXN0IGxpc3QsIFFOYW1lIHFuYW1lKQotICB7Ci0gICAgV1NETEVsZW1lbnQgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICAgIFFOYW1lIHRoZVFOYW1lID0gZ2V0UU5hbWVGb3JXU0RMRWxlbWVudCh0eXBlLCB3c2RsRWxlbWVudCk7Ci0gICAgICAgIGlmIChxbmFtZS5lcXVhbHModGhlUU5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gd3NkbEVsZW1lbnQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgSGFzaE1hcCBjcmVhdGVNYXAoaW50IHR5cGUsIExpc3QgbGlzdCkKLSAgewotICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClpLm5leHQoKTsKLSAgICAgIFFOYW1lIHRoZVFOYW1lID0gZ2V0UU5hbWVGb3JXU0RMRWxlbWVudCh0eXBlLCB3c2RsRWxlbWVudCk7Ci0gICAgICBpZiAodGhlUU5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWFwLnB1dCh0aGVRTmFtZSwgd3NkbEVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0KLSAgcHJpdmF0ZSBRTmFtZSBnZXRRTmFtZUZvcldTRExFbGVtZW50KGludCB0eXBlLCBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIFFOYW1lIHJlc3VsdCA9IG51bGw7Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5NRVNTQUdFOgotICAgICAgcmVzdWx0ID0gKChNZXNzYWdlKXdzZGxFbGVtZW50KS5nZXRRTmFtZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5QT1JUX1RZUEU6Ci0gICAgICByZXN1bHQgPSAoKFBvcnRUeXBlKXdzZGxFbGVtZW50KS5nZXRRTmFtZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5CSU5ESU5HOgotICAgICAgcmVzdWx0ID0gKChCaW5kaW5nKXdzZGxFbGVtZW50KS5nZXRRTmFtZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5TRVJWSUNFOgotICAgICAgcmVzdWx0ID0gKChTZXJ2aWNlKXdzZGxFbGVtZW50KS5nZXRRTmFtZSgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNvbHZlcyB0aGUgZWxlbWVudCBkZXNjcmliZWQgYnkgdHlwZSBhbmQgcW5hbWUgaW4gdGhlIGNvbnRleHQgb2YgdGhlCi0gICAqIGdpdmVuIGRlZmluaXRpb24uIFRoZSBkZWZpbml0aW9uJ3MgaW1wb3J0ZWQgZGVmaW5pdGlvbnMgYXJlIGNoZWNrZWQgYXMgd2VsbC4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlIHRoZSBlbGVtZW50IHR5cGUuCi0gICAqIEBwYXJhbSBxbmFtZSB0aGUgZWxlbWVudCdzIFFOYW1lLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiB0aGUgY29udGV4dCBkZWZpbml0aW9uLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcmV0dXJuIHRoZSByZXNvbHZlZCBXU0RMRWxlbWVudCBvciBudWxsIGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBXU0RMRWxlbWVudCByZXNvbHZlV1NETEVsZW1lbnQoaW50IHR5cGUsIFFOYW1lIHFuYW1lLCBEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uKQotICB7Ci0gICAgaWYgKHFuYW1lID09IG51bGwgfHwgcW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBMaXN0IGRlZmluaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGRlZmluaXRpb25zLmFkZChkZWZpbml0aW9uKTsKLSAgICBXU0RMRWxlbWVudCByZXN1bHQgPSByZXNvbHZlV1NETEVsZW1lbnQodHlwZSwgcW5hbWUsIGRlZmluaXRpb25zLCBuZXcgQXJyYXlMaXN0KCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNvbHZlcyB0aGUgZWxlbWVudCBkZXNjcmliZWQgYnkgdHlwZSBhbmQgcW5hbWUgaW4gdGhlIGNvbnRleHQgb2YgdGhlCi0gICAqIGdpdmVuIGRlZmluaXRpb25zLiBUaGUgZGVmaW5pdGlvbnMgaW1wb3J0ZWQgZGVmaW5pdGlvbnMgYXJlIGNoZWNrZWQgYXMgd2VsbC4KLSAgICogCi0gICAqIElNUE9SVEFOVCEgVGhpcyBtZXRob2QgaXMgcmVjdXJzaXZlLiBJdCBjaGVja3MgdGhlIGRlZmluaXRpb25zIGFuZCBhbGwgdGhlaXIKLSAgICogaW1wb3J0ZWQgZGVmaW5pdGlvbnMuIEl0IGFsc28gaXMgY29kZWQgc3VjaCB0aGF0IGl0IGF2b2lkcyBhIGN5Y2xpYyBpbXBvcnQKLSAgICogc2hvdWxkIG9uZSBiZSBlbmNvdW50ZXJlZC4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlIHRoZSBlbGVtZW50IHR5cGUuCi0gICAqIEBwYXJhbSBxbmFtZSB0aGUgZWxlbWVudCdzIHFOYW1lLgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbnMgdGhlIGNvbnRleHQgZGVmaW5pdGlvbnMKLSAgICogQHBhcmFtIHZpc2l0ZWREZWZpbml0aW9ucyBhIGxpc3Qgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWxyZWFkeSB2aXNpdGVkLgotICAgKiBAcmV0dXJuIHRoZSByZXNvbHZlZCBXU0RMRWxlbWVudCBvciBudWxsIGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBXU0RMRWxlbWVudCByZXNvbHZlV1NETEVsZW1lbnQoaW50IHR5cGUsIFFOYW1lIHFuYW1lLCBMaXN0IGRlZmluaXRpb25zLCBMaXN0IHZpc2l0ZWREZWZpbml0aW9ucykKLSAgewotICAgIFdTRExFbGVtZW50IHJlc3VsdCA9IG51bGw7Ci0KLSAgICBpZiAoZGVmaW5pdGlvbnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gSW4gb3JkZXIgdG8gcHJlc2VydmUgdGhlIG9sZCBiZWhhdmlvdXIgd2hpY2ggdXNlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbgotICAgIC8vIGFuZCBhbGwgZmlyc3QgbGV2ZWwgaW1wb3J0cywgY2hlY2sgdGhlIGVudGlyZSBsaXN0IG9mIGRlZmluaXRpb25zIHBhc3NlZAotICAgIC8vIGluIGZpcnN0LgotCi0gICAgSXRlcmF0b3IgZGVmaW5pdGlvbnNJdGVyYXRvciA9IGRlZmluaXRpb25zLml0ZXJhdG9yKCk7Ci0KLSAgICB3aGlsZSAoZGVmaW5pdGlvbnNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRGVmaW5pdGlvbkltcGwgZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uc0l0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5yZXNvbHZlV1NETEVsZW1lbnQodHlwZSwgcW5hbWUpOwotCi0gICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmUtaXRlcmF0ZSBvdmVyIHRoZSBkZWZpbml0aW9ucyBhbmQgcmVjdXJzZSBpbnRvIHRoZWlyIGltcG9ydHMuCi0KLSAgICBkZWZpbml0aW9uc0l0ZXJhdG9yID0gZGVmaW5pdGlvbnMuaXRlcmF0b3IoKTsKLQotICAgIHdoaWxlIChkZWZpbml0aW9uc0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uID0gKERlZmluaXRpb25JbXBsKWRlZmluaXRpb25zSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICBpZiAodmlzaXRlZERlZmluaXRpb25zLmNvbnRhaW5zKGRlZmluaXRpb24pKQotICAgICAgewotICAgICAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB3ZSBoYXZlIGEgY2FzZSBvZiBjeWNsaWMgaW1wb3J0cy4gU2luY2Ugd2UKLSAgICAgICAgLy8gYWxyZWFkeSBsb29rZWQgaW4gaXQsIHdlIGNhbiBhbmQgc2hvdWxkIHNraXAgaXQuCi0KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIHZpc2l0ZWREZWZpbml0aW9ucy5hZGQoZGVmaW5pdGlvbik7Ci0KLSAgICAgIExpc3QgaW1wb3J0ZWREZWZpbml0aW9ucyA9IGRlZmluaXRpb24uZ2V0SW1wb3J0ZWREZWZpbml0aW9ucyhxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLSAgICAgIHJlc3VsdCA9IHJlc29sdmVXU0RMRWxlbWVudCh0eXBlLCBxbmFtZSwgaW1wb3J0ZWREZWZpbml0aW9ucywgdmlzaXRlZERlZmluaXRpb25zKTsKLQotICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBXU0RMRWxlbWVudCByZXNvbHZlV1NETEVsZW1lbnQoaW50IHR5cGUsIFFOYW1lIHFuYW1lKQotICB7Ci0gICAgV1NETEVsZW1lbnQgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICB7Ci0gICAgICAgIGNhc2UgV1NETENvbnN0YW50cy5NRVNTQUdFOgotICAgICAgICByZXN1bHQgPSByZXNvbHZlV1NETEVsZW1lbnQodHlwZSwgZ2V0RU1lc3NhZ2VzKCksIHFuYW1lKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRToKLSAgICAgICAgcmVzdWx0ID0gcmVzb2x2ZVdTRExFbGVtZW50KHR5cGUsIGdldEVQb3J0VHlwZXMoKSwgcW5hbWUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdTRExDb25zdGFudHMuQklORElORzoKLSAgICAgICAgcmVzdWx0ID0gcmVzb2x2ZVdTRExFbGVtZW50KHR5cGUsIGdldEVCaW5kaW5ncygpLCBxbmFtZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV1NETENvbnN0YW50cy5TRVJWSUNFOgotICAgICAgICByZXN1bHQgPSByZXNvbHZlV1NETEVsZW1lbnQodHlwZSwgZ2V0RVNlcnZpY2VzKCksIHFuYW1lKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsaWF0aW9uIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIEVsZW1lbnQgb2xkRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAob2xkRWxlbWVudCBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0KQotICAgIHsKLSAgICAgIEV2ZW50VGFyZ2V0IG9sZEV2ZW50VGFyZ2V0ID0gKChFdmVudFRhcmdldClvbGRFbGVtZW50KTsKLSAgICAgIG9sZEV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsIGdldEV2ZW50TGlzdGVuZXIoKSwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIG9sZEV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU5vZGVSZW1vdmVkIiwgZ2V0RXZlbnRMaXN0ZW5lcigpLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgb2xkRXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQXR0ck1vZGlmaWVkIiwgZ2V0RXZlbnRMaXN0ZW5lcigpLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBzdXBlci5zZXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRXZlbnRUYXJnZXQpCi0gICAgewotICAgICAgRXZlbnRUYXJnZXQgZXZlbnRUYXJnZXQgPSAoKEV2ZW50VGFyZ2V0KWVsZW1lbnQpOwotICAgICAgZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVkIiwgZ2V0RXZlbnRMaXN0ZW5lcigpLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZVJlbW92ZWQiLCBnZXRFdmVudExpc3RlbmVyKCksIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICBldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJET01BdHRyTW9kaWZpZWQiLCBnZXRFdmVudExpc3RlbmVyKCksIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgZG9jdW1lbnQgPSBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzdXBlci5yZWNvbmNpbGVBdHRyaWJ1dGVzKGNoYW5nZWRFbGVtZW50KTsKLQotICAgIGlmIChjaGFuZ2VkRWxlbWVudCA9PSBnZXRFbGVtZW50KCkpCi0gICAgewotICAgICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLlRBUkdFVE5BTUVTUEFDRV9BVFRSSUJVVEUpKQotICAgICAgICBzZXRUYXJnZXROYW1lc3BhY2UoY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSkpOwotICAgICAgaWYgKGNoYW5nZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKSkKLSAgICAgICAgc2V0UU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLCBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSkpKTsKLSAgICAgIGdldEVOYW1lc3BhY2VzKCkuY2xlYXIoKTsKLSAgICAgIGdldE5hbWVzcGFjZXMoKS5jbGVhcigpOwotICAgICAgLy9nZXROYW1lc3BhY2VzKCkucHV0KCIiLCBudWxsKTsKLQotICAgICAgTmFtZWROb2RlTWFwIG1hcCA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgIGludCBtYXBMZW5ndGggPSBtYXAuZ2V0TGVuZ3RoKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcExlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBBdHRyIGF0dHIgPSAoQXR0ciltYXAuaXRlbShpKTsKLSAgICAgICAgU3RyaW5nIG5zUHJlZml4ID0gbnVsbDsKLSAgICAgICAgaWYgKFhNTE5TLmVxdWFscyhhdHRyLmdldFByZWZpeCgpKSkKLSAgICAgICAgewotICAgICAgICAgIG5zUHJlZml4ID0gYXR0ci5nZXRMb2NhbE5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChYTUxOUy5lcXVhbHMoYXR0ci5nZXROb2RlTmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIG5zUHJlZml4ID0gIiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobnNQcmVmaXggIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGdldE5hbWVzcGFjZXMoKS5wdXQobnNQcmVmaXgsIGF0dHIuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3dpdGNoIChXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKGNoaWxkKSkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuQklORElORzoKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICAgICAgYmluZGluZy5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHRoaXMpOwotICAgICAgICBiaW5kaW5nLnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBhZGRCaW5kaW5nKGJpbmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5ET0NVTUVOVEFUSU9OOgotICAgICAgewotICAgICAgICAvLyBDUzogd2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byB1bnNldCB0aGlzIGVsZW1lbnQgd2hlbiBpdHMgcmVtb3ZlZAotICAgICAgICAvL2RlZmluaXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoY2hpbGQpOyAgCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLklNUE9SVDoKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IGkgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSW1wb3J0KCk7Ci0gICAgICAgIGkuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbih0aGlzKTsKLSAgICAgICAgaS5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgYWRkSW1wb3J0KGkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5NRVNTQUdFOgotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgICAgICBtZXNzYWdlLnNldEVuY2xvc2luZ0RlZmluaXRpb24odGhpcyk7Ci0gICAgICAgIG1lc3NhZ2Uuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGFkZE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRToKLSAgICAgIHsKLSAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICAgICAgcG9ydFR5cGUuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbih0aGlzKTsKLSAgICAgICAgcG9ydFR5cGUuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGFkZFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuU0VSVklDRToKLSAgICAgIHsKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgICAgIHNlcnZpY2Uuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbih0aGlzKTsKLSAgICAgICAgc2VydmljZS5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgYWRkU2VydmljZShzZXJ2aWNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuVFlQRVM6Ci0gICAgICB7Ci0gICAgICAgIGlmIChnZXRFVHlwZXMoKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgVHlwZXMgdHlwZXMgPSBXU0RMRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZVR5cGVzKCk7Ci0gICAgICAgICAgdHlwZXMuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbih0aGlzKTsKLSAgICAgICAgICB0eXBlcy5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgICBzZXRFVHlwZXModHlwZXMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBnZXRVc2VFeHRlbnNpb25GYWN0b3JpZXMoKQotICAgICAgICAgID8gKChXU0RMRmFjdG9yeUltcGwpV1NETEZhY3RvcnkuZUlOU1RBTkNFKS5jcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChnZXROYW1lc3BhY2UoY2hpbGQpLCBnZXRMb2NhbE5hbWUoY2hpbGQpKQotICAgICAgICAgIDogKChXU0RMRmFjdG9yeUltcGwpV1NETEZhY3RvcnkuZUlOU1RBTkNFKS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAgICAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHRoaXMpOwotICAgICAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbGVtZW50KGNoaWxkKTsKLSAgICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmFkZChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZW1vdmUodGhpcywgaS5uZXh0KCkpOwotICAgIH0KLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFR5cGVzKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWNvbXBvbmVudDsKLSAgICAgIGlmIChkZWZpbml0aW9uLmdldEVUeXBlcygpID09IG1vZGVsT2JqZWN0KQotICAgICAgewotICAgICAgICBkZWZpbml0aW9uLnNldEVUeXBlcyhudWxsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIExpc3QgbGlzdCA9IGdldExpc3QoY29tcG9uZW50LCBtb2RlbE9iamVjdCk7Ci0gICAgICBpZiAobGlzdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBsaXN0LnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldExpc3QoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgTGlzdCByZXN1bHQgPSBudWxsOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWNvbXBvbmVudDsKLQotICAgIC8vIHRvZG8uLi4gdXNlIFdTRExTd2l0Y2gKLSAgICAvLwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEJpbmRpbmcpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBJbXBvcnQpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE1lc3NhZ2UpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgewotICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRNb2RlbE9iamVjdHMoT2JqZWN0IGNvbXBvbmVudCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbiljb21wb25lbnQ7Ci0gICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpKTsKLSAgICBsaXN0LmFkZChkZWZpbml0aW9uLmdldEVUeXBlcygpKTsKLSAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpKTsKLSAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKSk7Ci0gICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKSk7Ci0gICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKSk7Ci0gICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwdWJsaWMgRG9jdW1lbnQgdXBkYXRlRG9jdW1lbnQoKQotICB7Ci0gICAgZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOwotICAgIHJldHVybiBkb2N1bWVudDsKLSAgfQotCi0gIHByaXZhdGUgRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLSAgICAgIGRvY3VtZW50QnVpbGRlckZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXIgZG9jdW1lbnRCdWlsZGVyID0gZG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgIHJldHVybiBkb2N1bWVudEJ1aWxkZXIubmV3RG9jdW1lbnQoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIFdTRExQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5ERUZJTklUSU9OKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotICAgIGFkZENoaWxkRWxlbWVudHMobmV3RWxlbWVudCwgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgIGFkZENoaWxkRWxlbWVudHMobmV3RWxlbWVudCwgZ2V0RUltcG9ydHMoKSk7Ci0KLSAgICBUeXBlcyB0eXBlcyA9IGdldEVUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKFR5cGVzSW1wbCl0eXBlcykuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgYWRkQ2hpbGRFbGVtZW50cyhuZXdFbGVtZW50LCBnZXRFTWVzc2FnZXMoKSk7Ci0gICAgYWRkQ2hpbGRFbGVtZW50cyhuZXdFbGVtZW50LCBnZXRFUG9ydFR5cGVzKCkpOwotICAgIGFkZENoaWxkRWxlbWVudHMobmV3RWxlbWVudCwgZ2V0RUJpbmRpbmdzKCkpOwotICAgIGFkZENoaWxkRWxlbWVudHMobmV3RWxlbWVudCwgZ2V0RVNlcnZpY2VzKCkpOwotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRDaGlsZEVsZW1lbnRzKEVsZW1lbnQgcGFyZW50LCBMaXN0IGMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gYy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFdTRExFbGVtZW50SW1wbCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudEltcGwpaXRlcmF0b3IubmV4dCgpOwotICAgICAgRWxlbWVudCBjaGlsZCA9IHdzZGxFbGVtZW50LmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIC8vIEFkZCBuYW1lc3BhY2UgcHJlZml4IGluZm8KLSAgICAvLyBUQkQgLSBOZWVkIHRvIHJldmlzaXQuCi0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgJiYgdGhlRWxlbWVudCAhPSBudWxsKQotICAgIC8vIFdlIGFyZSB1cGRhdGluZyB0aGUgRGVmaW5pdGlvbiBlbGVtZW50LgotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0TmFtZXNwYWNlcygpLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgICAgU3RyaW5nIHVyaSA9IG51bGw7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBNYXAuRW50cnkgZW50cnkgPSAoTWFwLkVudHJ5KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgcHJlZml4ID0gKFN0cmluZyllbnRyeS5nZXRLZXkoKTsKLSAgICAgICAgdXJpID0gKFN0cmluZyllbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAocHJlZml4ICE9ICIiKQotICAgICAgICAgIHRoZUVsZW1lbnQuc2V0QXR0cmlidXRlTlMoWFNEQ29uc3RhbnRzLlhNTE5TX1VSSV8yMDAwLCAieG1sbnM6IiArIHByZWZpeCwgdXJpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBlbHNlIGlmICh1cmkgIT0gbnVsbCkKLSAgICAgICAgICAvLyBIYW5kbGUgZGVmYXVsdCBuYW1lc3BhY2UsIGUuZy4geG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotICAgICAgICAgIHRoZUVsZW1lbnQuc2V0QXR0cmlidXRlTlMoWFNEQ29uc3RhbnRzLlhNTE5TX1VSSV8yMDAwLCBYTUxOUywgdXJpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgLy9pZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRW5jb2RpbmcoKSkKLSAgICAgIC8vICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuRU5DT0RJTkdfQVRUUklCVVRFLCBnZXRFbmNvZGluZygpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9RTmFtZSgpKQotICAgICAgICBpZiAoZ2V0UU5hbWUoKSAhPSBudWxsKQotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fVGFyZ2V0TmFtZXNwYWNlKCkpCi0gICAgICAgIGlmIChnZXRUYXJnZXROYW1lc3BhY2UoKSAhPSBudWxsKQotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5UQVJHRVROQU1FU1BBQ0VfQVRUUklCVVRFLCBnZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldEltcG9ydGVkRGVmaW5pdGlvbnMoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEltcG9ydHMobmFtZXNwYWNlKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpaS5uZXh0KCk7Ci0gICAgICAoKEltcG9ydEltcGwpdGhlSW1wb3J0KS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsKLSAgICAgIERlZmluaXRpb24gaW1wb3J0ZWREZWZpbml0aW9uID0gdGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoaW1wb3J0ZWREZWZpbml0aW9uICE9IG51bGwgJiYgV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKG5hbWVzcGFjZSwgaW1wb3J0ZWREZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKSkKLSAgICAgIHsKLSAgICAgICAgbGlzdC5hZGQoaW1wb3J0ZWREZWZpbml0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvblVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgaW50IGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCIjIik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHJlc29sdmVFbGVtZW50RGVjbGFyYXRpb24odXJpLnN1YnN0cmluZygwLCBpbmRleCksIHVyaS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNDb21wb25lbnREZWZpbmVkKFhTRENvbmNyZXRlQ29tcG9uZW50IGNvbXBvbmVudCkKLSAgewotICAgIC8vIG5vdGUgdGhlIGdldENvbnRhaW5lcigpIHRlc3QgdG8gZWxpbWluYXRlICdzeW50aGV0aWMnIHR5cGVzCi0gICAgLy8gdGhhdCBhcmUgY3JlYXRlZCBieSB0aGUgWE1MU2NoZW1hIG1vZGVsIHdoZW4gcmVzb2x1dGlvbiBmYWlscyAgIAotICAgIHJldHVybiBjb21wb25lbnQgIT0gbnVsbCAmJiBjb21wb25lbnQuZ2V0Q29udGFpbmVyKCkgIT0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbihTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVzb2x2ZVNjaGVtYShuYW1lc3BhY2UpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSlpLm5leHQoKTsKLSAgICAgIHJlc3VsdCA9IHNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKG5hbWVzcGFjZSwgbG9jYWxOYW1lKTsKLSAgICAgIGlmIChpc0NvbXBvbmVudERlZmluZWQocmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvLyBDb3VsZCBub3QgcmVzb2x2ZS4gVHJ5IGFnYWluc3QgYWxsIDxpbXBvcnQ+ZWQgYW5kIGlubGluZWQgc2NoZW1hcy4KLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRJbXBvcnRlZE9ySW5saW5lZFNjaGVtYXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IChYU0RTY2hlbWEpaS5uZXh0KCk7Ci0gICAgICByZXN1bHQgPSBzY2hlbWEucmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbihuYW1lc3BhY2UsIGxvY2FsTmFtZSk7Ci0gICAgICBpZiAoaXNDb21wb25lbnREZWZpbmVkKHJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiByZXNvbHZlVHlwZURlZmluaXRpb25VUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgaW50IGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCIjIik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHJlc29sdmVUeXBlRGVmaW5pdGlvbih1cmkuc3Vic3RyaW5nKDAsIGluZGV4KSwgdXJpLnN1YnN0cmluZyhpbmRleCArIDEpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiByZXNvbHZlVHlwZURlZmluaXRpb24oU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVzb2x2ZVNjaGVtYShuYW1lc3BhY2UpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSlpLm5leHQoKTsKLSAgICAgIHJlc3VsdCA9IHNjaGVtYS5yZXNvbHZlVHlwZURlZmluaXRpb24obmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5lZChyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vIENvdWxkIG5vdCByZXNvbHZlLiBUcnkgYWdhaW5zdCBhbGwgPGltcG9ydD5lZCBhbmQgaW5saW5lZCBzY2hlbWFzLgotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEltcG9ydGVkT3JJbmxpbmVkU2NoZW1hcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSlpLm5leHQoKTsKLSAgICAgIHJlc3VsdCA9IHNjaGVtYS5yZXNvbHZlVHlwZURlZmluaXRpb24obmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5lZChyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7IC8vIEZhaWxlZCB0byByZXNvbHZlLgotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgcmV0dXJucyBzZXQgb2Ygc2NoZW1hcyB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UgYXMgaXQncyB0YXJnZXQgbmFtZXNwYWNlLgotICAgKi8KLSAgcHVibGljIENvbGxlY3Rpb24gcmVzb2x2ZVNjaGVtYShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgaWYgKCIiLmVxdWFscyhuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZSA9IG51bGw7Ci0gICAgfQotCi0gICAgaWYgKFhTRENvbnN0YW50cy5pc1NjaGVtYUZvclNjaGVtYU5hbWVzcGFjZShuYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5zaW5nbGV0b24oWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEobmFtZXNwYWNlKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKFhTRENvbnN0YW50cy5pc1NjaGVtYUluc3RhbmNlTmFtZXNwYWNlKG5hbWVzcGFjZSkpCi0gICAgewotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnNpbmdsZXRvbihYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUluc3RhbmNlKG5hbWVzcGFjZSkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIGdldEltcG9ydGVkT3JJbmxpbmVkU2NoZW1hcyhuYW1lc3BhY2UpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldEltcG9ydGVkT3JJbmxpbmVkU2NoZW1hcyhTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZSA9ICIiOwotICAgIH0KLQotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBjb2xsZWN0SW1wb3J0ZWRTY2hlbWFzKG5hbWVzcGFjZSwgbGlzdCk7Ci0gICAgY29sbGVjdElubGluZWRTY2hlbWFzKG5hbWVzcGFjZSwgbGlzdCk7Ci0gICAgY29sbGVjdElubGluZWRTY2hlbWFzT2ZJbXBvcnRlZERlZmluaXRpb25zKG5hbWVzcGFjZSwgbGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0SW1wb3J0ZWRPcklubGluZWRTY2hlbWFzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydClpLm5leHQoKTsKLSAgICAgICgoSW1wb3J0SW1wbCl0aGVJbXBvcnQpLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IHRoZUltcG9ydC5nZXRFU2NoZW1hKCk7Ci0gICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIGxpc3QuYWRkKHNjaGVtYSk7Ci0gICAgfQotCi0gICAgaWYgKGdldEVUeXBlcygpICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5hZGRBbGwoZ2V0RVR5cGVzKCkuZ2V0U2NoZW1hcygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRXZlbnRMaXN0ZW5lciBldmVudExpc3RlbmVyOwotCi0gIHByb3RlY3RlZCBOb2RlIGRlbGV0aW9uTm9kZTsKLQotICBwdWJsaWMgTm9kZSBnZXREZWxldGlvbk5vZGUoKQotICB7Ci0gICAgcmV0dXJuIGRlbGV0aW9uTm9kZTsKLSAgfQotCi0gIHByb3RlY3RlZCBFdmVudExpc3RlbmVyIGdldEV2ZW50TGlzdGVuZXIoKQotICB7Ci0gICAgaWYgKGV2ZW50TGlzdGVuZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBldmVudExpc3RlbmVyID0gbmV3IEV2ZW50TGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTXV0YXRpb25FdmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTXV0YXRpb25FdmVudCBtdXRhdGlvbkV2ZW50ID0gKE11dGF0aW9uRXZlbnQpZXZlbnQ7Ci0gICAgICAgICAgICAgIGlmIChtdXRhdGlvbkV2ZW50LmdldFRhcmdldCgpIGluc3RhbmNlb2YgTm9kZSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE5vZGUgbm9kZSA9IChOb2RlKW11dGF0aW9uRXZlbnQuZ2V0VGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbkV2ZW50LmdldEF0dHJDaGFuZ2UoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFdTRExFbGVtZW50SW1wbCBsaXN0ZW5lciA9IChXU0RMRWxlbWVudEltcGwpZ2V0Q29ycmVzcG9uZGluZ0NvbXBvbmVudChub2RlLmdldFBhcmVudE5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldFR5cGUoKS5lcXVhbHMoIkRPTU5vZGVSZW1vdmVkIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGRlbGV0aW9uTm9kZSA9IChOb2RlKWV2ZW50LmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmVsZW1lbnRDb250ZW50c0NoYW5nZWQoKEVsZW1lbnQpbm9kZS5nZXRQYXJlbnROb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBkZWxldGlvbk5vZGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgV1NETEVsZW1lbnRJbXBsIGxpc3RlbmVyID0gKFdTRExFbGVtZW50SW1wbClnZXRDb3JyZXNwb25kaW5nQ29tcG9uZW50KG5vZGUpOwotICAgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmVsZW1lbnRBdHRyaWJ1dGVzQ2hhbmdlZCgoRWxlbWVudClub2RlKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfQotICAgIHJldHVybiBldmVudExpc3RlbmVyOwotICB9Ci0KLSAgcHVibGljIFdTRExFbGVtZW50IGdldENvcnJlc3BvbmRpbmdDb21wb25lbnQoTm9kZSBub2RlKQotICB7Ci0gICAgLy8gV2UgY29uc2lkZXIgYWxsIHBhcmVudHMgc28gdGhhdCB0aGV5IGNhbiBoYW5kbGUgb3RoZXIgY29udGFpbmVkIG5vZGVzIHRoYXQgb3RoZXJ3aXNlIGRvbid0IGNvcnJlc3BvbmQgdG8gYSBjb21wb25lbnQuCi0gICAgLy8KLSAgICBMaXN0IHBhcmVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuQVRUUklCVVRFX05PREUpCi0gICAgewotICAgICAgbm9kZSA9ICgoQXR0cilub2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFNraXAgYWhlYWQgdG8gYW4gZWxlbWVudC4KLSAgICAgIC8vCi0gICAgICBmb3IgKE5vZGUgc2Nhbk5vZGUgPSBub2RlOyBzY2FuTm9kZSAhPSBudWxsOyBzY2FuTm9kZSA9IHNjYW5Ob2RlLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChzY2FuTm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICB7Ci0gICAgICAgICAgbm9kZSA9IHNjYW5Ob2RlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNraXAgYmFjayB0byBhbiBlbGVtZW50LgotICAgICAgLy8KLSAgICAgIGZvciAoTm9kZSBzY2FuTm9kZSA9IG5vZGU7IHNjYW5Ob2RlICE9IG51bGw7IHNjYW5Ob2RlID0gc2Nhbk5vZGUuZ2V0UHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChzY2FuTm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICB7Ci0gICAgICAgICAgbm9kZSA9IHNjYW5Ob2RlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gTmF2aWdhdGUgb3V0IHRocm91Z2ggdGhlIGVsZW1lbnRzLgotICAgIC8vCi0gICAgZm9yIChOb2RlIHBhcmVudCA9IG5vZGU7IHBhcmVudCAhPSBudWxsOyBwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50Tm9kZSgpKQotICAgIHsKLSAgICAgIGlmIChwYXJlbnQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgcGFyZW50cy5hZGQocGFyZW50KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBXU0RMRWxlbWVudCBiZXN0V1NETEVsZW1lbnQgPSBnZXRCZXN0V1NETEVsZW1lbnQocGFyZW50cyk7Ci0gICAgcmV0dXJuIGJlc3RXU0RMRWxlbWVudDsKLSAgfQotCi0gIC8vCi0gIC8vCi0gIC8vCi0gIHByaXZhdGUgYm9vbGVhbiB1c2VFeHRlbnNpb25GYWN0b3JpZXMgPSB0cnVlOwotCi0gIHB1YmxpYyB2b2lkIHNldFVzZUV4dGVuc2lvbkZhY3Rvcmllcyhib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdXNlRXh0ZW5zaW9uRmFjdG9yaWVzID0gdmFsdWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRVc2VFeHRlbnNpb25GYWN0b3JpZXMoKQotICB7Ci0gICAgcmV0dXJuIHVzZUV4dGVuc2lvbkZhY3RvcmllczsKLSAgfQotCi0gIC8vIFNlZSBCdWcgNTM2NgotICBwdWJsaWMgdm9pZCByZW1vdmVBbGwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICBkb2N1bWVudCA9IG51bGw7Ci0gICAgICBlbGVtZW50ID0gbnVsbDsKLSAgICAgIGdldEVTZXJ2aWNlcygpLmNsZWFyKCk7Ci0gICAgICBnZXRFQmluZGluZ3MoKS5jbGVhcigpOwotICAgICAgZ2V0RVBvcnRUeXBlcygpLmNsZWFyKCk7Ci0gICAgICBnZXRFTWVzc2FnZXMoKS5jbGVhcigpOwotICAgICAgc2V0RVR5cGVzKG51bGwpOwotICAgICAgZ2V0RUltcG9ydHMoKS5jbGVhcigpOwotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0KLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbmxpbmVTY2hlbWFMb2NhdGlvbnMoUmVzb3VyY2UgcmVzb3VyY2UpCi0gIHsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBpbmxpbmUgc2NoZW1hcyBsb2NhdGlvbiAKLSAgICBUeXBlcyB0eXBlcyA9IHRoaXMuZ2V0RVR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSB0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICBpZiAoIShleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGVsID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IGVsLmdldFNjaGVtYSgpOwotICAgICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBXZSBuZWVkIHRoaXMgdHJ5LWNhdGNoIGJsb2NrIGluIGNhc2Ugd2UgZW5jb3VudGVyIGFuIGV4Y2VwdGlvbiB3aGlsZSBhdHRlbXB0aW5nCi0gICAgICAgICAgLy8gdG8gcmVzb2x2ZSB0aGUgc2NoZW1hLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIFdTREwgRWRpdG9yLCB3ZSBnZXQgYQotICAgICAgICAgIC8vICdjYW5ub3QgY3JlYXRlIHBhcnQgZXhjZXB0aW9uJy4uLi4uLlNlZSBlY2xpcHNlIGJ1Z3ppbGxhIGJ1ZyA4OTg1NQotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNjaGVtYS5zZXRTY2hlbWFMb2NhdGlvbihyZXNvdXJjZS5nZXRVUkkoKS50b1N0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0KLSAgLyoqIAotICAgKiAgVGhpcyBtZXRob2Qgd2lsbCBjb2xsZWN0IHRoZSBzY2hlbWFzIG1hdGNoaW5nIHRoZSBuYW1lc3BhY2UKLSAgICogIHRoYXQgYXJlIGlubGluZWQgZGlyZWN0bHkgd2l0aGluIHRoaXMgZGVmaW5pdGlvbi4KLSAgICogIAotICAgKiAgQHBhcmFtIG5hbWVzcGFjZSB0aGUgbmFtZXNwYWNlIHRvIG1hdGNoLgotICAgKiAgQHBhcmFtIGxpc3QgYWxsIGlubGluZSBzY2hlbWFzIHRoYXQgbWF0Y2ggdGhlIG5hbWVzcGFjZSB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNvbGxlY3RJbmxpbmVkU2NoZW1hcyhTdHJpbmcgbmFtZXNwYWNlLCBMaXN0IGxpc3QpCi0gIHsKLSAgICBUeXBlcyB0eXBlcyA9IGdldEVUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3Qgc2NoZW1hcyA9IHR5cGVzLmdldFNjaGVtYXMoKTsKLSAgICAgIEl0ZXJhdG9yIHNjaGVtYXNJdGVyYXRvciA9IHNjaGVtYXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKHNjaGVtYXNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKXNjaGVtYXNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKG5hbWVzcGFjZSwgdGFyZ2V0TmFtZXNwYWNlKSkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKHNjaGVtYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBFTGlzdCBzY2hlbWFDb250ZW50cyA9IHNjaGVtYS5nZXRDb250ZW50cygpOwotICAgICAgICBJdGVyYXRvciBzY2hlbWFDb250ZW50c0l0ZXJhdG9yID0gc2NoZW1hQ29udGVudHMuaXRlcmF0b3IoKTsKLSAgICAgICAgCi0gICAgICAgIHdoaWxlIChzY2hlbWFDb250ZW50c0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBjb21wb25lbnQgPSBzY2hlbWFDb250ZW50c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNESW1wb3J0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFhTREltcG9ydCB0aGVJbXBvcnQgPSAoWFNESW1wb3J0KWNvbXBvbmVudDsKLSAgICAgICAgICAgIFN0cmluZyBpbXBvcnROYW1lc3BhY2UgPSB0aGVJbXBvcnQuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgICAgICBpZiAoV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKG5hbWVzcGFjZSwgaW1wb3J0TmFtZXNwYWNlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgKChYU0RJbXBvcnRJbXBsKXRoZUltcG9ydCkuaW1wb3J0U2NoZW1hKCk7Ci0gICAgICAgICAgICAgIFhTRFNjaGVtYSBpbXBvcnRlZFNjaGVtYSA9IHRoZUltcG9ydC5nZXRSZXNvbHZlZFNjaGVtYSgpOwotICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKGltcG9ydGVkU2NoZW1hKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKiAKLSAgICogIFRoaXMgbWV0aG9kIHdpbGwgY29sbGVjdCBhbnkgc2NoZW1hIG1hdGNoaW5nIHRoZSBnaXZlbiBuYW1lc3BhY2UgdGhhdCBhcmUKLSAgICogIGltcG9ydGVkIGRpcmVjdGx5IHZpYSBhIHdzZGwgaW1wb3J0IChlLmcuICZsdDt3c2RsOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iRm9vLnhzZCIuLi4pCi0gICAqICAKLSAgICogIEBwYXJhbSBuYW1lc3BhY2UgdGhlIG5hbWVzcGFjZSB0byBtYXRjaAotICAgKiAgQHBhcmFtIGxpc3QgYWxsIGltcG9ydGVkIHNjaGVtYXMgdGhhdCBtYXRjaCB0aGUgbmFtZXNwYWNlIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29sbGVjdEltcG9ydGVkU2NoZW1hcyhTdHJpbmcgbmFtZXNwYWNlLCBMaXN0IGxpc3QpCi0gIHsKLSAgICBFTGlzdCBpbXBvcnRzID0gZ2V0RUltcG9ydHMoKTsKLSAgICBJdGVyYXRvciBpbXBvcnRzSXRlcmF0b3IgPSBpbXBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGltcG9ydHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpaW1wb3J0c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIFN0cmluZyBpbXBvcnROYW1lc3BhY2VVUkkgPSB0aGVJbXBvcnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAKLSAgICAgIGlmIChXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UoaW1wb3J0TmFtZXNwYWNlVVJJLCBuYW1lc3BhY2UpKQotICAgICAgewotICAgICAgICAoKEltcG9ydEltcGwpdGhlSW1wb3J0KS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsKLSAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IHRoZUltcG9ydC5nZXRFU2NoZW1hKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2NoZW1hICE9IG51bGwgJiYgV1NETENvbnN0YW50cy5pc01hdGNoaW5nTmFtZXNwYWNlKHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbmFtZXNwYWNlKSkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKHNjaGVtYSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiogCi0gICAqICBUaGlzIG1ldGhvZCB3aWxsIHZpc2l0IGFueSBpbXBvcnRlZCB3c2RsJ3MgYW5kIGNvbGxlY3QgYW55IGNvbnRhaW5lZCBpbmxpbmVkIHNjaGVtYXMgdGhhdCBtYXRjaAotICAgKiAgdGhlIGdpdmVuIG5hbWVzcGFjZS4gCi0gICAqICAKLSAgICogIEBwYXJhbSBuYW1lc3BhY2UgdGhlIG5hbWVzcGFjZSB0byBtYXRjaAotICAgKiAgQHBhcmFtIGxpc3QgYWxsIGlubGluZWQgc2NoZW1hcyBvZiBpbXBvcnRlZCBkZWZpbml0aW9ucyB0aGF0IG1hdGNoIHRoZSBuYW1lc3BhY2Ugd2lsbCBiZSBhZGRlZCB0byB0aGlzIGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0SW5saW5lZFNjaGVtYXNPZkltcG9ydGVkRGVmaW5pdGlvbnMoU3RyaW5nIG5hbWVzcGFjZSwgTGlzdCBsaXN0KQotICB7Ci0gICAgRUxpc3QgaW1wb3J0cyA9IGdldEVJbXBvcnRzKCk7Ci0gICAgSXRlcmF0b3IgaW1wb3J0c0l0ZXJhdG9yID0gaW1wb3J0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpbXBvcnRzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KWltcG9ydHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBEZWZpbml0aW9uSW1wbCBpbXBvcnRlZERlZmluaXRpb24gPSAoRGVmaW5pdGlvbkltcGwpdGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoaW1wb3J0ZWREZWZpbml0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGltcG9ydGVkRGVmaW5pdGlvbi5jb2xsZWN0SW5saW5lZFNjaGVtYXMobmFtZXNwYWNlLCBsaXN0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gIAotICAKLX0gLy9EZWZpbml0aW9uSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0V4dGVuc2liaWxpdHlFbGVtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0V4dGVuc2liaWxpdHlFbGVtZW50SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTczZmYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS5iZWFucy5CZWFuSW5mbzsKLWltcG9ydCBqYXZhLmJlYW5zLkludHJvc3BlY3Rpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5iZWFucy5JbnRyb3NwZWN0b3I7Ci1pbXBvcnQgamF2YS5iZWFucy5Qcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwjaXNSZXF1aXJlZCA8ZW0+UmVxdWlyZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsI2dldEVsZW1lbnRUeXBlIDxlbT5FbGVtZW50IFR5cGU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgZXh0ZW5kcyBXU0RMRWxlbWVudEltcGwgaW1wbGVtZW50cyBFeHRlbnNpYmlsaXR5RWxlbWVudAotewotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzUmVxdWlyZWQoKSA8ZW0+UmVxdWlyZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2lzUmVxdWlyZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gUkVRVUlSRURfRURFRkFVTFQgPSBmYWxzZTsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNSZXF1aXJlZCgpIDxlbT5SZXF1aXJlZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNSZXF1aXJlZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHJlcXVpcmVkID0gUkVRVUlSRURfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGVtZW50VHlwZSgpIDxlbT5FbGVtZW50IFR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBRTmFtZSBFTEVNRU5UX1RZUEVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGVtZW50VHlwZSgpIDxlbT5FbGVtZW50IFR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnRUeXBlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIGVsZW1lbnRUeXBlID0gRUxFTUVOVF9UWVBFX0VERUZBVUxUOwotCi0gIHByaXZhdGUgSGFzaE1hcCBiZWFuUHJvcGVydHlEZXNjcmlwdG9yczsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLkVYVEVOU0lCSUxJVFlfRUxFTUVOVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNSZXF1aXJlZCgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWlyZWQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcXVpcmVkKGJvb2xlYW4gbmV3UmVxdWlyZWQpCi0gIHsKLSAgICBib29sZWFuIG9sZFJlcXVpcmVkID0gcmVxdWlyZWQ7Ci0gICAgcmVxdWlyZWQgPSBuZXdSZXF1aXJlZDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVELCBvbGRSZXF1aXJlZCwgcmVxdWlyZWQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50VHlwZSgpCi0gIHsKLSAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkKLSAgICAgIGVsZW1lbnRUeXBlID0gbmV3IFFOYW1lKGVDbGFzcygpLmdldEVQYWNrYWdlKCkuZ2V0TnNVUkkoKSwgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLQotICAgIHJldHVybiBlbGVtZW50VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudFR5cGUoUU5hbWUgbmV3RWxlbWVudFR5cGUpCi0gIHsKLSAgICBRTmFtZSBvbGRFbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlOwotICAgIGVsZW1lbnRUeXBlID0gbmV3RWxlbWVudFR5cGU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEUsIG9sZEVsZW1lbnRUeXBlLCBlbGVtZW50VHlwZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOgotICAgICAgcmV0dXJuIGlzUmVxdWlyZWQoKSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0U7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCSUxJVFlfRUxFTUVOVF9fRUxFTUVOVF9UWVBFOgotICAgICAgcmV0dXJuIGdldEVsZW1lbnRUeXBlKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDoKLSAgICAgIHNldFJlcXVpcmVkKCgoQm9vbGVhbiluZXdWYWx1ZSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRToKLSAgICAgIHNldEVsZW1lbnRUeXBlKChRTmFtZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEOgotICAgICAgc2V0UmVxdWlyZWQoUkVRVUlSRURfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRToKLSAgICAgIHNldEVsZW1lbnRUeXBlKEVMRU1FTlRfVFlQRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19SRVFVSVJFRDoKLSAgICAgIHJldHVybiByZXF1aXJlZCAhPSBSRVFVSVJFRF9FREVGQVVMVDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UX19FTEVNRU5UX1RZUEU6Ci0gICAgICByZXR1cm4gRUxFTUVOVF9UWVBFX0VERUZBVUxUID09IG51bGwgPyBlbGVtZW50VHlwZSAhPSBudWxsIDogIUVMRU1FTlRfVFlQRV9FREVGQVVMVC5lcXVhbHMoZWxlbWVudFR5cGUpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAocmVxdWlyZWQ6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChyZXF1aXJlZCk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCBlbGVtZW50VHlwZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGVsZW1lbnRUeXBlKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50I2dldFJlcXVpcmVkKCkKLSAgICovCi0gIHB1YmxpYyBCb29sZWFuIGdldFJlcXVpcmVkKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbihpc1JlcXVpcmVkKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50I3NldFJlcXVpcmVkKEJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZChCb29sZWFuIHJlcXVpcmVkKQotICB7Ci0gICAgc2V0UmVxdWlyZWQocmVxdWlyZWQuYm9vbGVhblZhbHVlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciBhIGdpdmVuIGNsYXNzLgotICAgKi8KLSAgcHVibGljIGphdmEudXRpbC5NYXAgZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhqYXZhLmxhbmcuQ2xhc3MgY2xhenopCi0gIHsKLSAgICAvLyBMb29rdXAgcHJvcGVydGllcyBjYWNoZQotICAgIE1hcCBwcm9wZXJ0aWVzID0gbnVsbDsKLSAgICBpZiAoYmVhblByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkKLSAgICAgIGJlYW5Qcm9wZXJ0eURlc2NyaXB0b3JzID0gbmV3IEhhc2hNYXAoKTsKLSAgICBlbHNlCi0gICAgICBwcm9wZXJ0aWVzID0gKE1hcCliZWFuUHJvcGVydHlEZXNjcmlwdG9ycy5nZXQoY2xhenopOwotCi0gICAgaWYgKHByb3BlcnRpZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJbnRyb3NwZWN0IHRoZSBiZWFuCi0gICAgICBBcnJheUxpc3QgYmluZm9zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEJlYW5JbmZvIGJpbmZvID0gSW50cm9zcGVjdG9yLmdldEJlYW5JbmZvKGNsYXp6KTsKLSAgICAgICAgaWYgKGJpbmZvICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBiaW5mb3MuYWRkKGJpbmZvKTsKLSAgICAgICAgICBCZWFuSW5mb1tdIGFiaW5mbyA9IGJpbmZvLmdldEFkZGl0aW9uYWxCZWFuSW5mbygpOwotICAgICAgICAgIGlmIChhYmluZm8gIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBiID0gMDsgYiA8IGFiaW5mby5sZW5ndGg7IGIrKykKLSAgICAgICAgICAgICAgYmluZm9zLmFkZChhYmluZm9bYl0pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEludHJvc3BlY3Rpb25FeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gVEJEIC0gaGFuZGxlIGV4Y2VwdGlvbgotICAgICAgfQotCi0gICAgICBwcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgYiA9IGJpbmZvcy5pdGVyYXRvcigpOyBiLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEJlYW5JbmZvIGJpbmZvID0gKEJlYW5JbmZvKWIubmV4dCgpOwotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3JbXSBwZGVzYyA9IGJpbmZvLmdldFByb3BlcnR5RGVzY3JpcHRvcnMoKTsKLSAgICAgICAgaWYgKHBkZXNjID09IG51bGwpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoaW50IHAgPSAwOyBwIDwgcGRlc2MubGVuZ3RoOyBwKyspCi0gICAgICAgICAgcHJvcGVydGllcy5wdXQocGRlc2NbcF0uZ2V0TmFtZSgpLCBwZGVzY1twXSk7Ci0gICAgICB9Ci0gICAgICBiZWFuUHJvcGVydHlEZXNjcmlwdG9ycy5wdXQoY2xhenosIHByb3BlcnRpZXMpOwotICAgIH0KLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudChFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudCA9PSBudWxsICYmICFpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJFeHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbGVtZW50KCk6IFByZXNlcnZpbmcgb2xkIGVsZW1lbnQiKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldEVsZW1lbnRHZW4oZWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc3VwZXIucmVjb25jaWxlQXR0cmlidXRlcyhjaGFuZ2VkRWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3VwZXIuaGFuZGxlUmVjb25jaWxpYXRpb24ocmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogRU1GIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIERvY3VtZW50IGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudCA9PSBudWxsKQotICAgICAgZG9jdW1lbnQgPSAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnVwZGF0ZURvY3VtZW50KCk7Ci0KLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBudWxsOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpIC8vIFRoaXMgaXMgYW4gb2xkIGVsZW1lbnQuCi0gICAgewotICAgICAgbmV3RWxlbWVudCA9IChFbGVtZW50KWRvY3VtZW50LmltcG9ydE5vZGUoZWxlbWVudCwgdHJ1ZSk7Ci0gICAgICBlbGVtZW50ID0gbmV3RWxlbWVudDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBnZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgU3RyaW5nIHF1YWxpZmllciA9IGRlZmluaXRpb24uZ2V0UHJlZml4KG5hbWVzcGFjZSk7Ci0gICAgICBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZSwgKHF1YWxpZmllciA9PSBudWxsID8gIiIgOiBxdWFsaWZpZXIgKyAiOiIpICsgZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICBlbGVtZW50ID0gbmV3RWxlbWVudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL0V4dGVuc2liaWxpdHlFbGVtZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0V4dGVuc2libGVFbGVtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0V4dGVuc2libGVFbGVtZW50SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzI2MDRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9FeHRlbnNpYmxlRWxlbWVudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4dGVuc2libGUgRWxlbWVudDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5FeHRlbnNpYmxlRWxlbWVudEltcGwjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cyA8ZW0+RUV4dGVuc2liaWxpdHkgRWxlbWVudHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgZXh0ZW5kcyBXU0RMRWxlbWVudEltcGwgaW1wbGVtZW50cyBFeHRlbnNpYmxlRWxlbWVudAotewotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpIDxlbT5FRXh0ZW5zaWJpbGl0eSBFbGVtZW50czwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEV4dGVuc2libGVFbGVtZW50SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuRVhURU5TSUJMRV9FTEVNRU5UOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICBpZiAoZUV4dGVuc2liaWxpdHlFbGVtZW50cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVFeHRlbnNpYmlsaXR5RWxlbWVudHMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoCi0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLAotICAgICAgICB0aGlzLAotICAgICAgICBXU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVFeHRlbnNpYmlsaXR5RWxlbWVudHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50KQotICB7Ci0gICAgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuYWRkKGV4dEVsZW1lbnQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgcmV0dXJuIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0gICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFM6Ci0gICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlRfX0VFWFRFTlNJQklMSVRZX0VMRU1FTlRTOgotICAgICAgcmV0dXJuIGVFeHRlbnNpYmlsaXR5RWxlbWVudHMgIT0gbnVsbCAmJiAhZUV4dGVuc2liaWxpdHlFbGVtZW50cy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8vCi0gIC8vCi0gIC8vCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBpZiAoIVdTRExDb25zdGFudHMuaXNNYXRjaGluZ05hbWVzcGFjZShjaGlsZC5nZXROYW1lc3BhY2VVUkkoKSwgV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gdXNlRXh0ZW5zaW9uRmFjdG9yaWVzKCkKLSAgICAgICAgPyAoKFdTRExGYWN0b3J5SW1wbClXU0RMRmFjdG9yeS5lSU5TVEFOQ0UpLmNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KGdldE5hbWVzcGFjZShjaGlsZCksIGdldExvY2FsTmFtZShjaGlsZCkpCi0gICAgICAgIDogKChXU0RMRmFjdG9yeUltcGwpV1NETEZhY3RvcnkuZUlOU1RBTkNFKS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLQotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuYWRkKGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gdXNlRXh0ZW5zaW9uRmFjdG9yaWVzKCkKLSAgewotICAgIC8vIFVzZSBleHRlbnNpb24gZmFjdG9yaWVzIGJ5IGRlZmF1bHQuCi0gICAgcmV0dXJuIGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSA9PSBudWxsID8gdHJ1ZSA6ICgoRGVmaW5pdGlvbkltcGwpZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKS5nZXRVc2VFeHRlbnNpb25GYWN0b3JpZXMoKTsKLSAgfQotCi19IC8vRXh0ZW5zaWJsZUVsZW1lbnRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRmF1bHRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvRmF1bHRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZjRlMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0ZhdWx0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhdWx0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRmF1bHRJbXBsIGV4dGVuZHMgTWVzc2FnZVJlZmVyZW5jZUltcGwgaW1wbGVtZW50cyBGYXVsdAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBGYXVsdEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLkZBVUxUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuTWVzc2FnZSBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBnZXRFTWVzc2FnZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBzZXRFTWVzc2FnZSgob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSltZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLkZBVUxUKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci19IC8vRmF1bHRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvSW1wb3J0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0ltcG9ydEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZmMDcyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvSW1wb3J0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMTW9kZWxMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW1wb3J0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGwjZ2V0TmFtZXNwYWNlVVJJIDxlbT5OYW1lc3BhY2UgVVJJPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGwjZ2V0TG9jYXRpb25VUkkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsI2dldEVEZWZpbml0aW9uIDxlbT5FRGVmaW5pdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsI2dldEVTY2hlbWEgPGVtPkVTY2hlbWE8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBJbXBvcnRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgSW1wb3J0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIHByb3RlY3RlZCBib29sZWFuIHJlc29sdmVkOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZXNwYWNlVVJJKCkgPGVtPk5hbWVzcGFjZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWVzcGFjZVVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lc3BhY2VVUkkoKSA8ZW0+TmFtZXNwYWNlIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBOQU1FU1BBQ0VfVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OX1VSSV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uVVJJKCkgPGVtPkxvY2F0aW9uIFVSSTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uVVJJID0gTE9DQVRJT05fVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFRGVmaW5pdGlvbigpIDxlbT5FRGVmaW5pdGlvbjwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RURlZmluaXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBlRGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVTY2hlbWEoKSA8ZW0+RVNjaGVtYTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVNjaGVtYSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RTY2hlbWEgZVNjaGVtYSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgSW1wb3J0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuSU1QT1JUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIG5ld05hbWVzcGFjZVVSSSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7Ci0gICAgbmFtZXNwYWNlVVJJID0gbmV3TmFtZXNwYWNlVVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLklNUE9SVF9fTkFNRVNQQUNFX1VSSSwgb2xkTmFtZXNwYWNlVVJJLCBuYW1lc3BhY2VVUkkpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpCi0gIHsKLSAgICByZXR1cm4gbG9jYXRpb25VUkk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uVVJJKFN0cmluZyBuZXdMb2NhdGlvblVSSSkKLSAgewotICAgIFN0cmluZyBvbGRMb2NhdGlvblVSSSA9IGxvY2F0aW9uVVJJOwotICAgIGxvY2F0aW9uVVJJID0gbmV3TG9jYXRpb25VUkk7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuSU1QT1JUX19MT0NBVElPTl9VUkksIG9sZExvY2F0aW9uVVJJLCBsb2NhdGlvblVSSSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXRFRGVmaW5pdGlvbigpCi0gIHsKLSAgICBpZiAoZURlZmluaXRpb24gIT0gbnVsbCAmJiBlRGVmaW5pdGlvbi5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFRGVmaW5pdGlvbiA9IChJbnRlcm5hbEVPYmplY3QpZURlZmluaXRpb247Ci0gICAgICBlRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWVSZXNvbHZlUHJveHkob2xkRURlZmluaXRpb24pOwotICAgICAgaWYgKGVEZWZpbml0aW9uICE9IG9sZEVEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLklNUE9SVF9fRURFRklOSVRJT04sIG9sZEVEZWZpbml0aW9uLCBlRGVmaW5pdGlvbikpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZURlZmluaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGJhc2ljR2V0RURlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGVEZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFRGVmaW5pdGlvbihEZWZpbml0aW9uIG5ld0VEZWZpbml0aW9uKQotICB7Ci0gICAgRGVmaW5pdGlvbiBvbGRFRGVmaW5pdGlvbiA9IGVEZWZpbml0aW9uOwotICAgIGVEZWZpbml0aW9uID0gbmV3RURlZmluaXRpb247Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuSU1QT1JUX19FREVGSU5JVElPTiwgb2xkRURlZmluaXRpb24sIGVEZWZpbml0aW9uKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBYU0RTY2hlbWEgZ2V0RVNjaGVtYSgpCi0gIHsKLSAgICBpZiAoZVNjaGVtYSAhPSBudWxsICYmIGVTY2hlbWEuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRVNjaGVtYSA9IChJbnRlcm5hbEVPYmplY3QpZVNjaGVtYTsKLSAgICAgIGVTY2hlbWEgPSAoWFNEU2NoZW1hKWVSZXNvbHZlUHJveHkob2xkRVNjaGVtYSk7Ci0gICAgICBpZiAoZVNjaGVtYSAhPSBvbGRFU2NoZW1hKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLklNUE9SVF9fRVNDSEVNQSwgb2xkRVNjaGVtYSwgZVNjaGVtYSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZVNjaGVtYTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFhTRFNjaGVtYSBiYXNpY0dldEVTY2hlbWEoKQotICB7Ci0gICAgcmV0dXJuIGVTY2hlbWE7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVTY2hlbWEoWFNEU2NoZW1hIG5ld0VTY2hlbWEpCi0gIHsKLSAgICBYU0RTY2hlbWEgb2xkRVNjaGVtYSA9IGVTY2hlbWE7Ci0gICAgZVNjaGVtYSA9IG5ld0VTY2hlbWE7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuSU1QT1JUX19FU0NIRU1BLCBvbGRFU2NoZW1hLCBlU2NoZW1hKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgWFNEU2NoZW1hIGdldFNjaGVtYSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RVNjaGVtYSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpCi0gIHsKLSAgICBzZXRFU2NoZW1hKHNjaGVtYSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHJldHVybiBnZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19MT0NBVElPTl9VUkk6Ci0gICAgICByZXR1cm4gZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19FREVGSU5JVElPTjoKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RURlZmluaXRpb24oKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVEZWZpbml0aW9uKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fRVNDSEVNQToKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RVNjaGVtYSgpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RVNjaGVtYSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHNldE5hbWVzcGFjZVVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19MT0NBVElPTl9VUkk6Ci0gICAgICBzZXRMb2NhdGlvblVSSSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19FREVGSU5JVElPTjoKLSAgICAgIHNldEVEZWZpbml0aW9uKChEZWZpbml0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19FU0NIRU1BOgotICAgICAgc2V0RVNjaGVtYSgoWFNEU2NoZW1hKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fTkFNRVNQQUNFX1VSSToKLSAgICAgIHNldE5hbWVzcGFjZVVSSShOQU1FU1BBQ0VfVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19MT0NBVElPTl9VUkk6Ci0gICAgICBzZXRMb2NhdGlvblVSSShMT0NBVElPTl9VUklfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0VERUZJTklUSU9OOgotICAgICAgc2V0RURlZmluaXRpb24oKERlZmluaXRpb24pbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fRVNDSEVNQToKLSAgICAgIHNldEVTY2hlbWEoKFhTRFNjaGVtYSludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX05BTUVTUEFDRV9VUkk6Ci0gICAgICByZXR1cm4gTkFNRVNQQUNFX1VSSV9FREVGQVVMVCA9PSBudWxsID8gbmFtZXNwYWNlVVJJICE9IG51bGwgOiAhTkFNRVNQQUNFX1VSSV9FREVGQVVMVC5lcXVhbHMobmFtZXNwYWNlVVJJKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUX19MT0NBVElPTl9VUkk6Ci0gICAgICByZXR1cm4gTE9DQVRJT05fVVJJX0VERUZBVUxUID09IG51bGwgPyBsb2NhdGlvblVSSSAhPSBudWxsIDogIUxPQ0FUSU9OX1VSSV9FREVGQVVMVC5lcXVhbHMobG9jYXRpb25VUkkpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlRfX0VERUZJTklUSU9OOgotICAgICAgcmV0dXJuIGVEZWZpbml0aW9uICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklNUE9SVF9fRVNDSEVNQToKLSAgICAgIHJldHVybiBlU2NoZW1hICE9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChuYW1lc3BhY2VVUkk6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lc3BhY2VVUkkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgbG9jYXRpb25VUkk6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChsb2NhdGlvblVSSSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIEltcG9ydCNnZXREZWZpbml0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkRlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0RURlZmluaXRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIEltcG9ydCNzZXREZWZpbml0aW9uKERlZmluaXRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZWZpbml0aW9uKGphdmF4LndzZGwuRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgc2V0RURlZmluaXRpb24oKG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb24pZGVmaW5pdGlvbik7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXROYW1lc3BhY2VVUkkoV1NETENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRVNQQUNFX0FUVFJJQlVURSkpOwotICAgIHNldExvY2F0aW9uVVJJKFdTRExDb25zdGFudHMuZ2V0QXR0cmlidXRlKGNoYW5nZWRFbGVtZW50LCBXU0RMQ29uc3RhbnRzLkxPQ0FUSU9OX0FUVFJJQlVURSkpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoaXMgYm9vbGVhbiB0byBmYWxzZSBiZWNhdXNlIHRoZSBJbXBvcnQgbWF5IHBvaW50IHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uLgotICAgIC8vIFNvIHdlIG5lZWQgd2Ugc2hvdWxkIHZpZXcgdGhpcyBpbXBvcnQgYXMgdW5yZXNvbHZlZC4KLSAgICByZXNvbHZlZCA9IGZhbHNlOwotCi0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXRJbXBvcnRfTmFtZXNwYWNlVVJJKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FU1BBQ0VfQVRUUklCVVRFLCBnZXROYW1lc3BhY2VVUkkoKSk7Ci0KLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0SW1wb3J0X0xvY2F0aW9uVVJJKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5MT0NBVElPTl9BVFRSSUJVVEUsIGdldExvY2F0aW9uVVJJKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLklNUE9SVCk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGltcG9ydERlZmluaXRpb25PclNjaGVtYSgpCi0gIHsKLSAgICByZXNvbHZlKGdldE5hbWVzcGFjZVVSSSgpLCBnZXRMb2NhdGlvblVSSSgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlc29sdmUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKQotICB7Ci0gICAgaWYgKCFyZXNvbHZlZCkKLSAgICB7Ci0gICAgICAvLyBLQjogYnVnemlsbGEgMTE4MjkzCi0gICAgICAvLyBJZiBhIHVzZXIgY2hhbmdlcyA8d3NkbDppbXBvcnQ+IGZyb20gYSBXU0RMIGZpbGUgdG8gYW4gWE1MIFNjaGVtYSBmaWxlCi0gICAgICAvLyBvciB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgd2Ugc2hvdWxkIHNldCB0aGUgdmFyaWFibGUgZm9yIHRoZSBmaXJzdAotICAgICAgLy8gPHdzZGw6aW1wb3J0PiBzb3VyY2UgdG8gbnVsbC4gSGVyZSBJIGFtIHNpbXBseSBzZXR0aW5nIGJvdGggdmFyaWFibGVzIHRvIG51bGwsCi0gICAgICAvLyB3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgZWZmZWN0LgotICAgICAgZURlZmluaXRpb24gPSBudWxsOwotICAgICAgZVNjaGVtYSA9IG51bGw7Ci0KLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwgJiYgZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IGRlZmluaXRpb24uZVJlc291cmNlKCk7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSByZXNvdXJjZS5nZXRSZXNvdXJjZVNldCgpOwotICAgICAgICAgIGlmIChyZXNvdXJjZVNldCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSByZXNvbHZlTG9jYXRpb24oZGVmaW5pdGlvbiwgbmFtZXNwYWNlLCBsb2NhdGlvbik7Ci0KLSAgICAgICAgICAgIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHJlc29sdmVkTG9jYXRpb24pOwotICAgICAgICAgICAgUmVzb3VyY2UgcmVzb2x2ZWRSZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgZmFsc2UpOwotICAgICAgICAgICAgaWYgKHJlc29sdmVkUmVzb3VyY2UgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IHJlc291cmNlU2V0LmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHVyaSk7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZWRSZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKHVyaSk7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZWRSZXNvdXJjZS5sb2FkKGlucHV0U3RyZWFtLCByZXNvdXJjZVNldC5nZXRMb2FkT3B0aW9ucygpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gSXQgaXMgZ2VuZXJhbGx5IG5vdCBhbiBlcnJvciB0byBmYWlsIHRvIHJlc29sdmUuCi0gICAgICAgICAgICAgICAgLy8gSWYgYSByZXNvdXJjZSBpcyBhY3R1YWxseSBjcmVhdGVkLCAKLSAgICAgICAgICAgICAgICAvLyB3aGljaCBoYXBwZW5zIG9ubHkgd2hlbiB3ZSBjYW4gY3JlYXRlIGFuIGlucHV0IHN0cmVhbSwKLSAgICAgICAgICAgICAgICAvLyB0aGVuIGl0J3MgYW4gZXJyb3IgaWYgaXQncyBub3QgYSBnb29kIHdzZGwgb3Igc2NoZW1hCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlc29sdmVkUmVzb3VyY2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKHJlc29sdmVkUmVzb3VyY2UgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZURlZmluaXRpb24gPSAoKFdTRExSZXNvdXJjZUltcGwpcmVzb2x2ZWRSZXNvdXJjZSkuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHJlc29sdmVkUmVzb3VyY2UgaW5zdGFuY2VvZiBYU0RSZXNvdXJjZUltcGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlU2NoZW1hID0gKChYU0RSZXNvdXJjZUltcGwpcmVzb2x2ZWRSZXNvdXJjZSkuZ2V0U2NoZW1hKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZURlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXNvbHZlZCA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyByZXNvbHZlTG9jYXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgc2NoZW1hTG9jYXRpb24pCi0gIHsKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICBXU0RMTW9kZWxMb2NhdG9yIGxvY2F0b3IgPSAoV1NETE1vZGVsTG9jYXRvcilFY29yZVV0aWwuZ2V0UmVnaXN0ZXJlZEFkYXB0ZXIoZGVmaW5pdGlvbi5lUmVzb3VyY2UoKSwgV1NETE1vZGVsTG9jYXRvci5jbGFzcyk7Ci0gICAgaWYgKGxvY2F0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBsb2NhdG9yLnJlc29sdmVVUkkoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgbmFtZXNwYWNlLCBzY2hlbWFMb2NhdGlvbik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUT0RPLi4uIHRoZXJlJ3Mgc29tZSBkZWZhdWx0IHJlc29sdmluZyB3ZSdsbCBuZWVkIHRvIGRvIGhlcmUKLSAgICAgIC8vIHNlZSBYU0RTY2hlbWFEaXJlY3RpdmUKLSAgICAgIFVSSSBiYXNlTG9jYXRpb25VUkkgPSBjcmVhdGVVUkkoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gICAgICBVUkkgbG9jYXRpb25VUkkgPSBVUkkuY3JlYXRlVVJJKHNjaGVtYUxvY2F0aW9uKTsKLSAgICAgIHJldHVybiBsb2NhdGlvblVSSS5yZXNvbHZlKGJhc2VMb2NhdGlvblVSSSkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vVE9ETy4uLiBwdXNoIGRvd24gdG8gRU1GCi0gIHByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVVUkkoU3RyaW5nIHVyaVN0cmluZykKLSAgewotICAgIGlmIChoYXNQcm90b2NvbCh1cmlTdHJpbmcpKQotICAgICAgcmV0dXJuIFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gVVJJLmNyZWF0ZUZpbGVVUkkodXJpU3RyaW5nKTsKLSAgfQotCi0gIC8vVE9ETy4uLiBwdXNoIGRvd24gdG8gRU1GICAKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNQcm90b2NvbChTdHJpbmcgdXJpKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAodXJpICE9IG51bGwpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gdXJpLmluZGV4T2YoIjoiKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSAmJiBpbmRleCA+IDIpIC8vIGFzc3VtZSBwcm90b2NvbCB3aXRoIGJlIGxlbmd0aCAzIHNvIHRoYXQgdGhlJ0MnIGluICdDOi8nIGlzIG5vdCBpbnRlcnByZXRlZCBhcyBhIHByb3RvY29sCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0gLy9JbXBvcnRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvSW5wdXRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvSW5wdXRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MTMyZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL0lucHV0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklucHV0PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSW5wdXRJbXBsIGV4dGVuZHMgTWVzc2FnZVJlZmVyZW5jZUltcGwgaW1wbGVtZW50cyBJbnB1dAotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBJbnB1dEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLklOUFVUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuTWVzc2FnZSBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBnZXRFTWVzc2FnZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBzZXRFTWVzc2FnZSgob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSltZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLklOUFVUKTsKLSAgICBzZXRFbGVtZW50KG5ld0VsZW1lbnQpOwotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci19IC8vSW5wdXRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvTWVzc2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9NZXNzYWdlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTA2Njk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9NZXNzYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1lc3NhZ2U8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZUltcGwjZ2V0UU5hbWUgPGVtPlFOYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VJbXBsI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZUltcGwjZ2V0RVBhcnRzIDxlbT5FUGFydHM8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlSW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIE1lc3NhZ2UKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UU5hbWUoKSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIHFOYW1lID0gUU5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VuZGVmaW5lZCgpIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVOREVGSU5FRF9FREVGQVVMVCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VuZGVmaW5lZCgpIDxlbT5VbmRlZmluZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2lzVW5kZWZpbmVkKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdW5kZWZpbmVkID0gVU5ERUZJTkVEX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUGFydHMoKSA8ZW0+RVBhcnRzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVQYXJ0cygpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBlUGFydHMgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2VJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5NRVNTQUdFOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHFOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRRTmFtZShRTmFtZSBuZXdRTmFtZSkKLSAgewotICAgIFFOYW1lIG9sZFFOYW1lID0gcU5hbWU7Ci0gICAgcU5hbWUgPSBuZXdRTmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5NRVNTQUdFX19RTkFNRSwgb2xkUU5hbWUsIHFOYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVW5kZWZpbmVkKCkKLSAgewotICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVuZGVmaW5lZChib29sZWFuIG5ld1VuZGVmaW5lZCkKLSAgewotICAgIGJvb2xlYW4gb2xkVW5kZWZpbmVkID0gdW5kZWZpbmVkOwotICAgIHVuZGVmaW5lZCA9IG5ld1VuZGVmaW5lZDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5NRVNTQUdFX19VTkRFRklORUQsIG9sZFVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFUGFydHMoKQotICB7Ci0gICAgaWYgKGVQYXJ0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVQYXJ0cyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChQYXJ0LmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5NRVNTQUdFX19FUEFSVFMpOwotICAgIH0KLSAgICByZXR1cm4gZVBhcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEFkZCBhIHBhcnQgdG8gdGhpcyBtZXNzYWdlLgotICAgKiBAcGFyYW0gcGFydCB0aGUgcGFydCB0byBiZSBhZGRlZAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFBhcnQoamF2YXgud3NkbC5QYXJ0IHBhcnQpCi0gIHsKLSAgICBnZXRFUGFydHMoKS5hZGQoKFBhcnQpcGFydCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgcGFydC4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgcGFydC4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBwYXJ0LCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgcGFydAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlBhcnQgZ2V0UGFydChTdHJpbmcgbmFtZSkKLSAgewotICAgIFBhcnQgcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFUGFydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaS5uZXh0KCk7Ci0gICAgICBpZiAobmFtZS5lcXVhbHMocGFydC5nZXROYW1lKCkpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBwYXJ0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBwYXJ0cyBkZWZpbmVkIGhlcmUuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRQYXJ0cygpCi0gIHsKLSAgICBIYXNoTWFwIGhhc2hNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVQYXJ0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydClpLm5leHQoKTsKLSAgICAgIGhhc2hNYXAucHV0KHBhcnQuZ2V0TmFtZSgpLCBwYXJ0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc2hNYXA7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRPcmRlcmVkUGFydHMoTGlzdCBwYXJ0T3JkZXIpCi0gIHsKLSAgICBMaXN0IG9yZGVyZWRQYXJ0cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZiAocGFydE9yZGVyID09IG51bGwpCi0gICAgewotICAgICAgb3JkZXJlZFBhcnRzLmFkZEFsbChnZXRFUGFydHMoKSk7Ci0gICAgICByZXR1cm4gb3JkZXJlZFBhcnRzOwotICAgIH0KLQotICAgIEl0ZXJhdG9yIHBhcnROYW1lSXRlcmF0b3IgPSBwYXJ0T3JkZXIuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAocGFydE5hbWVJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgU3RyaW5nIHBhcnROYW1lID0gKFN0cmluZylwYXJ0TmFtZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGphdmF4LndzZGwuUGFydCBwYXJ0ID0gZ2V0UGFydChwYXJ0TmFtZSk7Ci0gICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICBvcmRlcmVkUGFydHMuYWRkKHBhcnQpOwotICAgIH0KLQotICAgIHJldHVybiBvcmRlcmVkUGFydHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX0VQQVJUUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RVBhcnRzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19RTkFNRToKLSAgICAgIHJldHVybiBnZXRRTmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gaXNVbmRlZmluZWQoKSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0U7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX0VQQVJUUzoKLSAgICAgIHJldHVybiBnZXRFUGFydHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19RTkFNRToKLSAgICAgIHNldFFOYW1lKChRTmFtZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX1VOREVGSU5FRDoKLSAgICAgIHNldFVuZGVmaW5lZCgoKEJvb2xlYW4pbmV3VmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fRVBBUlRTOgotICAgICAgZ2V0RVBhcnRzKCkuY2xlYXIoKTsKLSAgICAgIGdldEVQYXJ0cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX19RTkFNRToKLSAgICAgIHNldFFOYW1lKFFOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fVU5ERUZJTkVEOgotICAgICAgc2V0VW5kZWZpbmVkKFVOREVGSU5FRF9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX0VQQVJUUzoKLSAgICAgIGdldEVQYXJ0cygpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fUU5BTUU6Ci0gICAgICByZXR1cm4gUU5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IHFOYW1lICE9IG51bGwgOiAhUU5BTUVfRURFRkFVTFQuZXF1YWxzKHFOYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9fVU5ERUZJTkVEOgotICAgICAgcmV0dXJuIHVuZGVmaW5lZCAhPSBVTkRFRklORURfRURFRkFVTFQ7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfX0VQQVJUUzoKLSAgICAgIHJldHVybiBlUGFydHMgIT0gbnVsbCAmJiAhZVBhcnRzLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKHFOYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQocU5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgdW5kZWZpbmVkOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQodW5kZWZpbmVkKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSk7Ci0gICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbmFtZSA9PSBudWxsID8gIiIgOiBuYW1lKTsgLy8kTk9OLU5MUy0xJAotICAgIHNldFFOYW1lKHFuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzd2l0Y2ggKFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoY2hpbGQpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5QQVJUOgotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoKFdTRExQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFdTRExQYWNrYWdlLmVOU19VUkkpKS5nZXRXU0RMRmFjdG9yeSgpLmNyZWF0ZVBhcnQoKTsKLSAgICAgICAgcGFydC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgIHBhcnQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGdldEVQYXJ0cygpLmFkZChwYXJ0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgewotICAgICAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlbWFpbmluZ01vZGVsT2JqZWN0cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgcmVtb3ZlKHRoaXMsIGkubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmUoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpY29tcG9uZW50OwotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFBhcnQpCi0gICAgewotICAgICAgbWVzc2FnZS5nZXRFUGFydHMoKS5yZW1vdmUobW9kZWxPYmplY3QpOwotICAgICAgLy8gICAgICBtZXNzYWdlLmdldEVQYXJ0cygpLmNsZWFyKCk7Ci0gICAgfQotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXRNZXNzYWdlX1FOYW1lKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuTUVTU0FHRSk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgUGFydCkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpb2JqOwotICAgICAgICBFbGVtZW50IGNoaWxkID0gKChQYXJ0SW1wbClwYXJ0KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL01lc3NhZ2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvTWVzc2FnZVJlZmVyZW5jZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9NZXNzYWdlUmVmZXJlbmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmZkM2RlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9NZXNzYWdlUmVmZXJlbmNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NZXNzYWdlIFJlZmVyZW5jZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5NZXNzYWdlUmVmZXJlbmNlSW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk1lc3NhZ2VSZWZlcmVuY2VJbXBsI2dldEVNZXNzYWdlIDxlbT5FTWVzc2FnZTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIE1lc3NhZ2VSZWZlcmVuY2VJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgTWVzc2FnZVJlZmVyZW5jZQotewotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFTWVzc2FnZSgpIDxlbT5FTWVzc2FnZTwvZW0+fScgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU1lc3NhZ2UoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZSBlTWVzc2FnZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZVJlZmVyZW5jZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLk1FU1NBR0VfUkVGRVJFTkNFOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0gICAgbmFtZSA9IG5ld05hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE1lc3NhZ2UgZ2V0RU1lc3NhZ2UoKQotICB7Ci0gICAgaWYgKGVNZXNzYWdlICE9IG51bGwgJiYgZU1lc3NhZ2UuZUlzUHJveHkoKSkKLSAgICB7Ci0gICAgICBJbnRlcm5hbEVPYmplY3Qgb2xkRU1lc3NhZ2UgPSAoSW50ZXJuYWxFT2JqZWN0KWVNZXNzYWdlOwotICAgICAgZU1lc3NhZ2UgPSAoTWVzc2FnZSllUmVzb2x2ZVByb3h5KG9sZEVNZXNzYWdlKTsKLSAgICAgIGlmIChlTWVzc2FnZSAhPSBvbGRFTWVzc2FnZSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0UsIG9sZEVNZXNzYWdlLCBlTWVzc2FnZSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZU1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlIGJhc2ljR2V0RU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFTWVzc2FnZShNZXNzYWdlIG5ld0VNZXNzYWdlKQotICB7Ci0gICAgTWVzc2FnZSBvbGRFTWVzc2FnZSA9IGVNZXNzYWdlOwotICAgIGVNZXNzYWdlID0gbmV3RU1lc3NhZ2U7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU6Ci0gICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U6Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldEVNZXNzYWdlKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRFTWVzc2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX0VNRVNTQUdFOgotICAgICAgc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTUVTU0FHRV9SRUZFUkVOQ0VfX05BTUU6Ci0gICAgICBzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fRU1FU1NBR0U6Ci0gICAgICBzZXRFTWVzc2FnZSgoTWVzc2FnZSludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRV9fTkFNRToKLSAgICAgIHJldHVybiBOQU1FX0VERUZBVUxUID09IG51bGwgPyBuYW1lICE9IG51bGwgOiAhTkFNRV9FREVGQVVMVC5lcXVhbHMobmFtZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRToKLSAgICAgIHJldHVybiBlTWVzc2FnZSAhPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAobmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGlhdGlvbiBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc2V0TmFtZShXU0RMQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSkpOwotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN1cGVyLmhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoY2hpbGQsIHJlbWFpbmluZ01vZGVsT2JqZWN0cyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXRNZXNzYWdlUmVmZXJlbmNlX05hbWUoKSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCBnZXROYW1lKCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZVJlZmVyZW5jZShFUmVmZXJlbmNlIGVSZWZlcmVuY2UpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZVJlZmVyZW5jZShlUmVmZXJlbmNlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBudWxsIHx8IGVSZWZlcmVuY2UgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldE1lc3NhZ2VSZWZlcmVuY2VfRU1lc3NhZ2UoKSkKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZ2V0RU1lc3NhZ2UoKTsKLSAgICAgICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFFOYW1lIHFOYW1lID0gbWVzc2FnZS5nZXRRTmFtZSgpOwotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFLCBxTmFtZS5nZXROYW1lc3BhY2VVUkkoKSArICIjIiArIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZVJlZmVyZW5jZXMoYm9vbGVhbiBkZWVwKQotICB7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBjcmVhdGVRTmFtZShkZWZpbml0aW9uLCBlbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKSwgZWxlbWVudCk7Ci0gICAgICBNZXNzYWdlIG5ld01lc3NhZ2UgPSBtZXNzYWdlUU5hbWUgIT0gbnVsbCA/IChNZXNzYWdlKWRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpIDogbnVsbDsKLSAgICAgIGlmIChuZXdNZXNzYWdlICE9IGdldEVNZXNzYWdlKCkpCi0gICAgICB7Ci0gICAgICAgIHNldEVNZXNzYWdlKG5ld01lc3NhZ2UpOwotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci19IC8vTWVzc2FnZVJlZmVyZW5jZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9OYW1lc3BhY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvTmFtZXNwYWNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2QzMzI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9OYW1lc3BhY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZXNwYWNlPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk5hbWVzcGFjZUltcGwjZ2V0VVJJIDxlbT5VUkk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTmFtZXNwYWNlSW1wbCNnZXRQcmVmaXggPGVtPlByZWZpeDwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE5hbWVzcGFjZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIE5hbWVzcGFjZQotewotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVSSSgpIDxlbT5VUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVSSSgpIDxlbT5VUkk8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFVSSSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdXJpID0gVVJJX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJlZml4KCkgPGVtPlByZWZpeDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UHJlZml4KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRklYX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJlZml4KCkgPGVtPlByZWZpeDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UHJlZml4KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBwcmVmaXggPSBQUkVGSVhfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTmFtZXNwYWNlSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuTkFNRVNQQUNFOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpCi0gIHsKLSAgICByZXR1cm4gdXJpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRVUkkoU3RyaW5nIG5ld1VSSSkKLSAgewotICAgIFN0cmluZyBvbGRVUkkgPSB1cmk7Ci0gICAgdXJpID0gbmV3VVJJOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fVVJJLCBvbGRVUkksIHVyaSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeCgpCi0gIHsKLSAgICByZXR1cm4gcHJlZml4OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVmaXgoU3RyaW5nIG5ld1ByZWZpeCkKLSAgewotICAgIFN0cmluZyBvbGRQcmVmaXggPSBwcmVmaXg7Ci0gICAgcHJlZml4ID0gbmV3UHJlZml4OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fUFJFRklYLCBvbGRQcmVmaXgsIHByZWZpeCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5OQU1FU1BBQ0VfX1VSSToKLSAgICAgIHJldHVybiBnZXRVUkkoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19QUkVGSVg6Ci0gICAgICByZXR1cm4gZ2V0UHJlZml4KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19VUkk6Ci0gICAgICBzZXRVUkkoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk5BTUVTUEFDRV9fUFJFRklYOgotICAgICAgc2V0UHJlZml4KChTdHJpbmcpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19VUkk6Ci0gICAgICBzZXRVUkkoVVJJX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19QUkVGSVg6Ci0gICAgICBzZXRQcmVmaXgoUFJFRklYX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5OQU1FU1BBQ0VfX1VSSToKLSAgICAgIHJldHVybiBVUklfRURFRkFVTFQgPT0gbnVsbCA/IHVyaSAhPSBudWxsIDogIVVSSV9FREVGQVVMVC5lcXVhbHModXJpKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuTkFNRVNQQUNFX19QUkVGSVg6Ci0gICAgICByZXR1cm4gUFJFRklYX0VERUZBVUxUID09IG51bGwgPyBwcmVmaXggIT0gbnVsbCA6ICFQUkVGSVhfRURFRkFVTFQuZXF1YWxzKHByZWZpeCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChVUkk6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1cmkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgcHJlZml4OiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQocHJlZml4KTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLX0gLy9OYW1lc3BhY2VJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvT3BlcmF0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL09wZXJhdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMzYTNlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvT3BlcmF0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcGVyYXRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbCNnZXRTdHlsZSA8ZW0+U3R5bGU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsI2dldEVJbnB1dCA8ZW0+RUlucHV0PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLk9wZXJhdGlvbkltcGwjZ2V0RU91dHB1dCA8ZW0+RU91dHB1dDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsI2dldEVGYXVsdHMgPGVtPkVGYXVsdHM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuT3BlcmF0aW9uSW1wbCNnZXRFUGFyYW1ldGVyT3JkZXJpbmcgPGVtPkVQYXJhbWV0ZXIgT3JkZXJpbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBPcGVyYXRpb25JbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgT3BlcmF0aW9uCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3R5bGUoKSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBPcGVyYXRpb25UeXBlIFNUWUxFX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3R5bGUoKSA8ZW0+U3R5bGU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFN0eWxlKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIE9wZXJhdGlvblR5cGUgc3R5bGUgPSBTVFlMRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVbmRlZmluZWQoKSA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBVTkRFRklORURfRURFRkFVTFQgPSBmYWxzZTsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVbmRlZmluZWQoKSA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHVuZGVmaW5lZCA9IFVOREVGSU5FRF9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUlucHV0KCkgPGVtPkVJbnB1dDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RUlucHV0KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIElucHV0IGVJbnB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVPdXRwdXQoKSA8ZW0+RU91dHB1dDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU91dHB1dCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBPdXRwdXQgZU91dHB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVGYXVsdHMoKSA8ZW0+RUZhdWx0czwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFRmF1bHRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVGYXVsdHMgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKSA8ZW0+RVBhcmFtZXRlciBPcmRlcmluZzwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZVBhcmFtZXRlck9yZGVyaW5nID0gbnVsbDsgLy8gYSBsaXN0IG9mIHBhcnRzIChFTUYpCi0KLSAgcHJpdmF0ZSBMaXN0IHBhcmFtZXRlck9yZGVyaW5nID0gbnVsbDsgLy8gYSBsaXN0IG9mIHBhcnQgbmFtZXMgKFdTREw0SikKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBPcGVyYXRpb25JbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5PUEVSQVRJT047Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uVHlwZSBnZXRTdHlsZSgpCi0gIHsKLSAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgIHN0eWxlID0gZGVkdWNlT3BlcmF0aW9uVHlwZShnZXRFbGVtZW50KCkpOwotCi0gICAgLy8gVGhlIHZhbHVlIG9mIHN0eWxlIGlzIHVwZGF0ZWQgd2hlbgotICAgIC8vIDEpIHRoZSBXU0RMIGlzIGxvYWRlZCBmb3IgdGhlIGZpcnN0IHRpbWUsCi0gICAgLy8gMikgdGhlIHNldFN0eWxlKCkgbWV0aG9kIGlzIGNhbGxlZCwgYW5kCi0gICAgLy8gMykgdGhlIGNoaWxkcmVuIG9mIHRoZSBPcGVyYXRpb24gKERPTSkgZWxlbWVudCBhcmUgbWFuaXB1bGF0ZWQuCi0gICAgcmV0dXJuIHN0eWxlOwotICB9Ci0KLSAgcHJpdmF0ZSBPcGVyYXRpb25UeXBlIGRlZHVjZU9wZXJhdGlvblR5cGUoRWxlbWVudCBvcGVyYXRpb24pCi0gIHsKLSAgICBpZiAob3BlcmF0aW9uID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIGludCBzdGF0ZSA9IDA7Ci0gICAgaW50IG1lc3NhZ2VSZWZUeXBlID0gLTE7Ci0gICAgTm9kZSBjaGlsZCA9IG51bGw7Ci0gICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBvcGVyYXRpb24uZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGNoaWxkID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgIGlmIChjaGlsZC5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgU3RyaW5nIG5zVVJJID0gY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgIGlmICghV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkuZXF1YWxzKG5zVVJJKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2tpcCBvdmVyIGFueSBub24tV1NETCBlbGVtZW50cy4gRm9yIGV4YW1wbGUsIHRvIHN1cHBvcnQgbmV3IFdTREwgCi0gICAgICAgIC8vIHVzZSBjYXNlcyB3ZSBoYXZlIHRvIHRvbGVyYXRlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgYXQgdGhlIG9wZXJhdGlvbiBsZXZlbC4KLQotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgbWVzc2FnZVJlZlR5cGUgPSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKChFbGVtZW50KWNoaWxkKTsKLQotICAgICAgc3dpdGNoIChzdGF0ZSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSAwOiAvLyBpbml0aWFsIHN0YXRlICAgICAKLSAgICAgICAgaWYgKFdTRExDb25zdGFudHMuSU5QVVQgPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSAxOwotICAgICAgICBlbHNlIGlmIChXU0RMQ29uc3RhbnRzLk9VVFBVVCA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDI7Ci0gICAgICAgIGVsc2UgaWYgKFdTRExDb25zdGFudHMuRE9DVU1FTlRBVElPTiA9PSBtZXNzYWdlUmVmVHlwZSkKLSAgICAgICAgICBzdGF0ZSA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZSA9IC0xOyAvLyBjYW5ub3QgaGFwcGVuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMTogLy8gb25lLXdheSBvciByZXF1ZXN0LXJlc3BvbnNlCi0gICAgICAgIGlmIChXU0RMQ29uc3RhbnRzLkZBVUxUID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gMTE7IC8vIG9uZS13YXkKLSAgICAgICAgZWxzZSBpZiAoV1NETENvbnN0YW50cy5PVVRQVVQgPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSAzOyAvLyByZXF1ZXN0LXJlc3BvbnNlCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZSA9IC0xOyAvLyBjYW5ub3QgaGFwcGVuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMTE6IC8vIG9uZS13YXkKLSAgICAgICAgaWYgKFdTRExDb25zdGFudHMuRkFVTFQgPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSAxMTsgLy8gb25lLXdheQotICAgICAgICBlbHNlCi0gICAgICAgICAgc3RhdGUgPSAtMTsgLy8gY2Fubm90IGhhcHBlbgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6IC8vIHNvbGljaXQtcmVzcG9uc2Ugb3Igbm90aWZpY2F0aW9uCi0gICAgICAgIGlmIChXU0RMQ29uc3RhbnRzLklOUFVUID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gNDsgLy8gc29saWNpdC1yZXNwb25zZQotICAgICAgICBlbHNlIGlmIChXU0RMQ29uc3RhbnRzLkZBVUxUID09IG1lc3NhZ2VSZWZUeXBlKQotICAgICAgICAgIHN0YXRlID0gMjE7IC8vIG5vdGlmaWNhdGlvbgotICAgICAgICBlbHNlCi0gICAgICAgICAgc3RhdGUgPSAtMTsgLy8gY2Fubm90IGhhcHBlbgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDIxOiAvLyBub3RpZmljYXRpb24KLSAgICAgICAgaWYgKFdTRExDb25zdGFudHMuRkFVTFQgPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSAyMTsgLy8gbm90aWZpY2F0aW9uCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZSA9IC0xOyAvLyBjYW5ub3QgaGFwcGVuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzogLy8gcmVxdWVzdC1yZXNwb25zZSAKLSAgICAgICAgaWYgKFdTRExDb25zdGFudHMuRkFVTFQgPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSAzOwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3RhdGUgPSAtMTsgLy8gY2Fubm90IGhhcHBlbgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6IC8vIHNvbGljaXQtcmVzcG9uc2UKLSAgICAgICAgaWYgKFdTRExDb25zdGFudHMuRkFVTFQgPT0gbWVzc2FnZVJlZlR5cGUpCi0gICAgICAgICAgc3RhdGUgPSA0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3RhdGUgPSAtMTsgLy8gY2Fubm90IGhhcHBlbgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAvLyBjYW5ub3QgaGFwcGVuICgtMSkKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgT3BlcmF0aW9uVHlwZSBvcFR5cGUgPSBudWxsOwotICBzd2l0Y2ggKHN0YXRlKQotICB7Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMTE6Ci0gICAgb3BUeXBlID0gT3BlcmF0aW9uVHlwZS5PTkVfV0FZOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgIGNhc2UgMjE6Ci0gICAgb3BUeXBlID0gT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT047Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgb3BUeXBlID0gT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgIG9wVHlwZSA9IE9wZXJhdGlvblR5cGUuU09MSUNJVF9SRVNQT05TRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6IC8vIGludmFsaWQKLSAgICBicmVhazsKLX0KLXJldHVybiBvcFR5cGU7Ci19Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdHlsZShPcGVyYXRpb25UeXBlIG5ld1N0eWxlKQotICB7Ci0gICAgT3BlcmF0aW9uVHlwZSBvbGRTdHlsZSA9IHN0eWxlOwotICAgIHN0eWxlID0gbmV3U3R5bGU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19TVFlMRSwgb2xkU3R5bGUsIHN0eWxlKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lID0gbmFtZTsKLSAgICBuYW1lID0gbmV3TmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5PUEVSQVRJT05fX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gbmV3VW5kZWZpbmVkKQotICB7Ci0gICAgYm9vbGVhbiBvbGRVbmRlZmluZWQgPSB1bmRlZmluZWQ7Ci0gICAgdW5kZWZpbmVkID0gbmV3VW5kZWZpbmVkOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fVU5ERUZJTkVELCBvbGRVbmRlZmluZWQsIHVuZGVmaW5lZCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgSW5wdXQgZ2V0RUlucHV0KCkKLSAgewotICAgIHJldHVybiBlSW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVJbnB1dChJbnB1dCBuZXdFSW5wdXQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBJbnB1dCBvbGRFSW5wdXQgPSBlSW5wdXQ7Ci0gICAgZUlucHV0ID0gbmV3RUlucHV0OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICB7Ci0gICAgICBFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FSU5QVVQsIG9sZEVJbnB1dCwgbmV3RUlucHV0KTsKLSAgICAgIGlmIChtc2dzID09IG51bGwpCi0gICAgICAgIG1zZ3MgPSBub3RpZmljYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBtc2dzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFSW5wdXQoSW5wdXQgbmV3RUlucHV0KQotICB7Ci0gICAgaWYgKG5ld0VJbnB1dCAhPSBlSW5wdXQpCi0gICAgewotICAgICAgTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7Ci0gICAgICBpZiAoZUlucHV0ICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCllSW5wdXQpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VJTlBVVCwgbnVsbCwgbXNncyk7Ci0gICAgICBpZiAobmV3RUlucHV0ICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdFSW5wdXQpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VJTlBVVCwgbnVsbCwgbXNncyk7Ci0gICAgICBtc2dzID0gYmFzaWNTZXRFSW5wdXQobmV3RUlucHV0LCBtc2dzKTsKLSAgICAgIGlmIChtc2dzICE9IG51bGwpCi0gICAgICAgIG1zZ3MuZGlzcGF0Y2goKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VJTlBVVCwgbmV3RUlucHV0LCBuZXdFSW5wdXQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE91dHB1dCBnZXRFT3V0cHV0KCkKLSAgewotICAgIHJldHVybiBlT3V0cHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRFT3V0cHV0KE91dHB1dCBuZXdFT3V0cHV0LCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgT3V0cHV0IG9sZEVPdXRwdXQgPSBlT3V0cHV0OwotICAgIGVPdXRwdXQgPSBuZXdFT3V0cHV0OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICB7Ci0gICAgICBFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FT1VUUFVULCBvbGRFT3V0cHV0LCBuZXdFT3V0cHV0KTsKLSAgICAgIGlmIChtc2dzID09IG51bGwpCi0gICAgICAgIG1zZ3MgPSBub3RpZmljYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBtc2dzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFT3V0cHV0KE91dHB1dCBuZXdFT3V0cHV0KQotICB7Ci0gICAgaWYgKG5ld0VPdXRwdXQgIT0gZU91dHB1dCkKLSAgICB7Ci0gICAgICBOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKLSAgICAgIGlmIChlT3V0cHV0ICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCllT3V0cHV0KS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FT1VUUFVULCBudWxsLCBtc2dzKTsKLSAgICAgIGlmIChuZXdFT3V0cHV0ICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdFT3V0cHV0KS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FT1VUUFVULCBudWxsLCBtc2dzKTsKLSAgICAgIG1zZ3MgPSBiYXNpY1NldEVPdXRwdXQobmV3RU91dHB1dCwgbXNncyk7Ci0gICAgICBpZiAobXNncyAhPSBudWxsKQotICAgICAgICBtc2dzLmRpc3BhdGNoKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FT1VUUFVULCBuZXdFT3V0cHV0LCBuZXdFT3V0cHV0KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFRmF1bHRzKCkKLSAgewotICAgIGlmIChlRmF1bHRzID09IG51bGwpCi0gICAgewotICAgICAgZUZhdWx0cyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChGYXVsdC5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FRkFVTFRTKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVGYXVsdHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKQotICB7Ci0gICAgaWYgKGVQYXJhbWV0ZXJPcmRlcmluZyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVQYXJhbWV0ZXJPcmRlcmluZyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3QoUGFydC5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FUEFSQU1FVEVSX09SREVSSU5HKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVQYXJhbWV0ZXJPcmRlcmluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBBZGQgYSBmYXVsdCBtZXNzYWdlIHRoYXQgbXVzdCBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgKiBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBmYXVsdCB0aGUgbmV3IGZhdWx0IG1lc3NhZ2UKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRGYXVsdChqYXZheC53c2RsLkZhdWx0IGZhdWx0KQotICB7Ci0gICAgZ2V0RUZhdWx0cygpLmFkZCgoRmF1bHQpZmF1bHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCB0aGUgc3BlY2lmaWVkIGZhdWx0IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIGZhdWx0IG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgZmF1bHQgbWVzc2FnZSwgb3IgbnVsbCBpZiB0aGVyZSB3YXNuJ3QKLSAgICogYW55IG1hdGNoaW5nIG1lc3NhZ2UKLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5GYXVsdCBnZXRGYXVsdChTdHJpbmcgbmFtZSkKLSAgewotICAgIEZhdWx0IHJlc3VsdCA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdClpLm5leHQoKTsKLSAgICAgIGlmIChuYW1lLmVxdWFscyhmYXVsdC5nZXROYW1lKCkpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBmYXVsdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IGFsbCB0aGUgZmF1bHQgbWVzc2FnZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIG5hbWVzIG9mIGZhdWx0IG1lc3NhZ2VzCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRGYXVsdHMoKQotICB7Ci0gICAgSGFzaE1hcCBoYXNoTWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KWkubmV4dCgpOwotICAgICAgaGFzaE1hcC5wdXQoZmF1bHQuZ2V0TmFtZSgpLCBmYXVsdCk7Ci0gICAgfQotICAgIHJldHVybiBoYXNoTWFwOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFJldHVybnMgYSBjb2xsZWN0aW9uIG9mIFBhcnQgbmFtZXMuIE5vdGUgdGhhdCAKLSAgICogZ2V0UGFyYW1ldGVyRU9yZGVyaW5nKCkgcmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgUGFydHMuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0UGFyYW1ldGVyT3JkZXJpbmcoKQotICB7Ci0gICAgcGFyYW1ldGVyT3JkZXJpbmcgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydClpLm5leHQoKTsKLSAgICAgICAgcGFyYW1ldGVyT3JkZXJpbmcuYWRkKHBhcnQuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gVEJEIC0gaGFuZGxlIGV4Y2VwdGlvbgotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFyYW1ldGVyT3JkZXJpbmcuaXNFbXB0eSgpID8gbnVsbCA6IHBhcmFtZXRlck9yZGVyaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyT3JkZXJpbmcoTGlzdCBwYXJhbWV0ZXJPcmRlcikKLSAgewotICAgIHBhcmFtZXRlck9yZGVyaW5nID0gcGFyYW1ldGVyT3JkZXI7Ci0gICAgZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCkuY2xlYXIoKTsKLSAgICBpZiAocGFyYW1ldGVyT3JkZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwYXJhbWV0ZXJPcmRlci5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIC8vIEtCOiBXZSBzaG91bGQgYmUgcmVzb2x2aW5nIHBhcnRzIGJhc2VkIG9uIHRoZSBwYXJ0IG5hbWVzIGluIHBhcmFtZXRlck9yZGVyLgotICAgICAgICBQYXJ0IHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgICAgICBwYXJ0LnNldE5hbWUoKFN0cmluZylpLm5leHQoKSk7Ci0gICAgICAgIGdldEVQYXJhbWV0ZXJPcmRlcmluZygpLmFkZChwYXJ0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5JbnB1dCBnZXRJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUlucHV0KCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnB1dChqYXZheC53c2RsLklucHV0IGlucHV0KQotICB7Ci0gICAgc2V0RUlucHV0KChJbnB1dClpbnB1dCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgamF2YXgud3NkbC5PdXRwdXQgZ2V0T3V0cHV0KCkKLSAgewotICAgIHJldHVybiBnZXRFT3V0cHV0KCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPdXRwdXQoamF2YXgud3NkbC5PdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgc2V0RU91dHB1dCgoT3V0cHV0KW91dHB1dCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUlOUFVUOgotICAgICAgcmV0dXJuIGJhc2ljU2V0RUlucHV0KG51bGwsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VPVVRQVVQ6Ci0gICAgICByZXR1cm4gYmFzaWNTZXRFT3V0cHV0KG51bGwsIG1zZ3MpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VGQVVMVFM6Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldEVGYXVsdHMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fU1RZTEU6Ci0gICAgICByZXR1cm4gZ2V0U3R5bGUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19OQU1FOgotICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gaXNVbmRlZmluZWQoKSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0U7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUlOUFVUOgotICAgICAgcmV0dXJuIGdldEVJbnB1dCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VPVVRQVVQ6Ci0gICAgICByZXR1cm4gZ2V0RU91dHB1dCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VGQVVMVFM6Ci0gICAgICByZXR1cm4gZ2V0RUZhdWx0cygpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkc6Ci0gICAgICByZXR1cm4gZ2V0RVBhcmFtZXRlck9yZGVyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19TVFlMRToKLSAgICAgIHNldFN0eWxlKChPcGVyYXRpb25UeXBlKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoKChCb29sZWFuKW5ld1ZhbHVlKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUlOUFVUOgotICAgICAgc2V0RUlucHV0KChJbnB1dCluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRU9VVFBVVDoKLSAgICAgIHNldEVPdXRwdXQoKE91dHB1dCluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUZBVUxUUzoKLSAgICAgIGdldEVGYXVsdHMoKS5jbGVhcigpOwotICAgICAgZ2V0RUZhdWx0cygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRVBBUkFNRVRFUl9PUkRFUklORzoKLSAgICAgIGdldEVQYXJhbWV0ZXJPcmRlcmluZygpLmNsZWFyKCk7Ci0gICAgICBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19TVFlMRToKLSAgICAgIHNldFN0eWxlKFNUWUxFX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoVU5ERUZJTkVEX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FSU5QVVQ6Ci0gICAgICBzZXRFSW5wdXQoKElucHV0KW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VPVVRQVVQ6Ci0gICAgICBzZXRFT3V0cHV0KChPdXRwdXQpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUZBVUxUUzoKLSAgICAgIGdldEVGYXVsdHMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkc6Ci0gICAgICBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fU1RZTEU6Ci0gICAgICByZXR1cm4gU1RZTEVfRURFRkFVTFQgPT0gbnVsbCA/IHN0eWxlICE9IG51bGwgOiAhU1RZTEVfRURFRkFVTFQuZXF1YWxzKHN0eWxlKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkICE9IFVOREVGSU5FRF9FREVGQVVMVDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OX19FSU5QVVQ6Ci0gICAgICByZXR1cm4gZUlucHV0ICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRU9VVFBVVDoKLSAgICAgIHJldHVybiBlT3V0cHV0ICE9IG51bGw7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9fRUZBVUxUUzoKLSAgICAgIHJldHVybiBlRmF1bHRzICE9IG51bGwgJiYgIWVGYXVsdHMuaXNFbXB0eSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkc6Ci0gICAgICByZXR1cm4gZVBhcmFtZXRlck9yZGVyaW5nICE9IG51bGwgJiYgIWVQYXJhbWV0ZXJPcmRlcmluZy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChzdHlsZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHN0eWxlKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIG5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIHVuZGVmaW5lZDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHVuZGVmaW5lZCk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vIAotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIGlmIChjaGFuZ2VkRWxlbWVudC5oYXNBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSkpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSk7Ci0gICAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZXROYW1lKG5hbWUpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChjaGFuZ2VkRWxlbWVudC5oYXNBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5QQVJBTUVURVJfT1JERVJfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcGFyYW1ldGVyT3JkZXIgPSBjaGFuZ2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5QQVJBTUVURVJfT1JERVJfQVRUUklCVVRFKTsKLSAgICAgIGlmIChwYXJhbWV0ZXJPcmRlciAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmdbXSBhcnJheSA9IHBhcmFtZXRlck9yZGVyLnNwbGl0KCIgIik7Ci0gICAgICAgIExpc3QgbCA9IEFycmF5cy5hc0xpc3QoYXJyYXkpOwotICAgICAgICBzZXRQYXJhbWV0ZXJPcmRlcmluZyhsKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzdHlsZSA9IGRlZHVjZU9wZXJhdGlvblR5cGUoY2hhbmdlZEVsZW1lbnQpOwotICAgIHN1cGVyLmVsZW1lbnRDaGFuZ2VkKGNoYW5nZWRFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0KLSAgICBzd2l0Y2ggKFdTRExVdGlsLmdldEluc3RhbmNlKCkuZ2V0V1NETFR5cGUoY2hpbGQpKQotICAgIHsKLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5JTlBVVDoKLSAgICAgIHsKLSAgICAgICAgSW5wdXQgaW5wdXQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSW5wdXQoKTsKLSAgICAgICAgaW5wdXQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICAgICAgaW5wdXQuc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIHNldElucHV0KGlucHV0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuT1VUUFVUOgotICAgICAgewotICAgICAgICBPdXRwdXQgb3V0cHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU91dHB1dCgpOwotICAgICAgICBvdXRwdXQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICAgICAgb3V0cHV0LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBzZXRPdXRwdXQob3V0cHV0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuRkFVTFQ6Ci0gICAgICB7Ci0gICAgICAgIEZhdWx0IGZhdWx0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZhdWx0KCk7Ci0gICAgICAgIGZhdWx0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgICAgIGZhdWx0LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBhZGRGYXVsdChmYXVsdCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZSh0aGlzLCBpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKWNvbXBvbmVudDsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBJbnB1dCkKLSAgICB7Ci0gICAgICBvcGVyYXRpb24uc2V0RUlucHV0KG51bGwpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE91dHB1dCkKLSAgICB7Ci0gICAgICBvcGVyYXRpb24uc2V0RU91dHB1dChudWxsKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBGYXVsdCkKLSAgICB7Ci0gICAgICBvcGVyYXRpb24uZ2V0RUZhdWx0cygpLnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0TW9kZWxPYmplY3RzKE9iamVjdCBjb21wb25lbnQpCi0gIHsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbiljb21wb25lbnQ7Ci0KLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAob3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpCi0gICAgewotICAgICAgbGlzdC5hZGQob3BlcmF0aW9uLmdldEVJbnB1dCgpKTsKLSAgICB9Ci0KLSAgICBpZiAob3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpc3QuYWRkKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkpOwotICAgIH0KLQotICAgIGxpc3QuYWRkQWxsKG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkpOwotCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldE9wZXJhdGlvbl9OYW1lKCkpCi0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5OQU1FX0FUVFJJQlVURSwgZ2V0TmFtZSgpKTsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXRPcGVyYXRpb25fU3R5bGUoKSkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uVHlwZSB0YXJnZXRUeXBlID0gZ2V0U3R5bGUoKTsKLSAgICAgICAgT3BlcmF0aW9uVHlwZSBjdXJyZW50VHlwZSA9IGRlZHVjZU9wZXJhdGlvblR5cGUodGhlRWxlbWVudCk7Ci0gICAgICAgIGlmICh0YXJnZXRUeXBlLmVxdWFscyhjdXJyZW50VHlwZSkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbHNlIGlmICgodGFyZ2V0VHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKSB8fCB0YXJnZXRUeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0UpKQotICAgICAgICAgICYmIChjdXJyZW50VHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKSB8fCBjdXJyZW50VHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFKSkpCi0gICAgICAgICAgcmVvcmRlckNoaWxkcmVuKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdHlsZSA9IGRlZHVjZU9wZXJhdGlvblR5cGUodGhlRWxlbWVudCk7IC8vIHN3aXRjaCBiYWNrLiBubyBzdXBwb3J0IGZvciB0aGUgb3RoZXIgdHlwZXMKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VSZWZlcmVuY2UoRVJlZmVyZW5jZSBlUmVmZXJlbmNlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VSZWZlcmVuY2UoZVJlZmVyZW5jZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVSZWZlcmVuY2UgPT0gbnVsbCB8fCBlUmVmZXJlbmNlID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXRPcGVyYXRpb25fRVBhcmFtZXRlck9yZGVyaW5nKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEJ1aWxkIHVwIGEgc3RyaW5nIG9mIGNvbmNhdGVuYXRlZCBwYXJ0IG5hbWVzIChwYXJhbWV0ZXJPcmRlcikgZnJvbSBlUGFyYW1ldGVyT3JkZXJpbmcuCi0KLSAgICAgICAgSXRlcmF0b3IgcGFydHMgPSBnZXRFUGFyYW1ldGVyT3JkZXJpbmcoKS5pdGVyYXRvcigpOwotICAgICAgICBQYXJ0IHBhcnQgPSBudWxsOwotICAgICAgICBTdHJpbmcgcGFydE5hbWVzID0gIiI7Ci0gICAgICAgIHdoaWxlIChwYXJ0cy5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJ0ID0gKFBhcnQpcGFydHMubmV4dCgpOwotICAgICAgICAgIHBhcnROYW1lcyA9IHBhcnROYW1lcyArIHBhcnQuZ2V0TmFtZSgpICsgIiAiOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChwYXJ0TmFtZXMgPSBwYXJ0TmFtZXMudHJpbSgpKS5sZW5ndGgoKSAhPSAwKQotICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZWxlbWVudCdzIGF0dHJ1YnV0ZQotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5QQVJBTUVURVJfT1JERVJfQVRUUklCVVRFLCBwYXJ0TmFtZXMpOwotICAgICAgfQotICAgIH0KLSAgICAvLwotICB9Ci0KLSAgLy8gU3dpdGNoIDxpbnB1dD4gYW5kIDxvdXRwdXQ+Ci0gIHByaXZhdGUgdm9pZCByZW9yZGVyQ2hpbGRyZW4oKQotICB7Ci0gICAgLy8gRmluZCBvdXQgdGhlIHBvc2l0aW9ucyBvZiA8aW5wdXQ+IGFuZCA8b3V0cHV0PgotICAgIE5vZGUgaW5wdXQgPSBudWxsOwotICAgIE5vZGUgb3V0cHV0ID0gbnVsbDsKLSAgICBOb2RlIHJlZmVyZW5jZSA9IG51bGw7Ci0gICAgZm9yIChOb2RlIGN1cnJlbnQgPSBnZXRFbGVtZW50KCkuZ2V0Rmlyc3RDaGlsZCgpOyBjdXJyZW50ICE9IG51bGw7IGN1cnJlbnQgPSBjdXJyZW50LmdldE5leHRTaWJsaW5nKCkpCi0gICAgewotICAgICAgaWYgKGN1cnJlbnQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgaWYgKFdTRExDb25zdGFudHMuSU5QVVQgPT0gV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZSgoRWxlbWVudCljdXJyZW50KSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0ID0gY3VycmVudDsKLSAgICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gY3MuLiBmb3Igc2FmZXR5IHVzZSBjdXJyZW50LmdldE5leHRTaWJsaW5nKCkgaW5zdGVhZCBvZiBub2RlTGlzdC5pdGVtKGkrMSkgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlZmVyZW5jZSA9IGN1cnJlbnQuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoV1NETENvbnN0YW50cy5PVVRQVVQgPT0gV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZSgoRWxlbWVudCljdXJyZW50KSkKLSAgICAgICAgewotICAgICAgICAgIG91dHB1dCA9IGN1cnJlbnQ7Ci0gICAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gY3MuLiBmb3Igc2FmZXR5IHVzZSBjdXJyZW50LmdldE5leHRTaWJsaW5nKCkgaW5zdGVhZCBvZiBub2RlTGlzdC5pdGVtKGkrMSkgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlZmVyZW5jZSA9IGN1cnJlbnQuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IC8vIGVuZCBmb3IKLQotICAgIGlmIChpbnB1dCAhPSBudWxsICYmIG91dHB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcGFyZW50ID0gZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKGdldFN0eWxlKCkuZXF1YWxzKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSkpCi0gICAgICB7Ci0gICAgICAgIC8vIGN1cnJlbnQgb3JkZXI6IDxvdXRwdXQ+IDxpbnB1dD4KLSAgICAgICAgc3dpdGNoQ2hpbGRyZW4ocGFyZW50LCBvdXRwdXQsIGlucHV0LCByZWZlcmVuY2UpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZ2V0U3R5bGUoKS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gY3VycmVudCBvcmRlcjogPGlucHV0PiA8b3V0cHV0PgotICAgICAgICBzd2l0Y2hDaGlsZHJlbihwYXJlbnQsIGlucHV0LCBvdXRwdXQsIHJlZmVyZW5jZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN3aXRjaENoaWxkcmVuKE5vZGUgcGFyZW50LCBOb2RlIGNoaWxkMSwgTm9kZSBjaGlsZDIsIE5vZGUgbmV4dE9mQ2hpbGQyKQotICB7Ci0gICAgLy8gY3VycmVudCBub2RlIHNlcXVlbmNlOiA8Y2hpbGQxPiA8Y2hpbGQyPiA8bmV4dE9mQ2hpbGQyPgotICAgIG5pY2VSZW1vdmVDaGlsZChwYXJlbnQsIGNoaWxkMik7Ci0gICAgbmljZUluc2VydEJlZm9yZShwYXJlbnQsIGNoaWxkMiwgY2hpbGQxKTsKLSAgICBuaWNlUmVtb3ZlQ2hpbGQocGFyZW50LCBjaGlsZDEpOwotICAgIG5pY2VJbnNlcnRCZWZvcmUocGFyZW50LCBjaGlsZDEsIG5leHRPZkNoaWxkMik7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5PUEVSQVRJT04pOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJbnB1dCBpbnB1dCA9IGdldEVJbnB1dCgpOwotICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKElucHV0SW1wbClpbnB1dCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotCi0gICAgT3V0cHV0IG91dHB1dCA9IGdldEVPdXRwdXQoKTsKLSAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgewotICAgICAgRWxlbWVudCBjaGlsZCA9ICgoT3V0cHV0SW1wbClvdXRwdXQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChGYXVsdEltcGwpZmF1bHQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLX0gLy9PcGVyYXRpb25JbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvT3V0cHV0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL091dHB1dEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBhYzgxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvT3V0cHV0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PdXRwdXQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBPdXRwdXRJbXBsIGV4dGVuZHMgTWVzc2FnZVJlZmVyZW5jZUltcGwgaW1wbGVtZW50cyBPdXRwdXQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgT3V0cHV0SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuT1VUUFVUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuTWVzc2FnZSBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBnZXRFTWVzc2FnZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBzZXRFTWVzc2FnZSgob3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSltZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLk9VVFBVVCk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL091dHB1dEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9QYXJ0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BhcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMzVmOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BhcnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsgLy8gaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbCNnZXRFbGVtZW50TmFtZSA8ZW0+RWxlbWVudCBOYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBhcnRJbXBsI2dldFR5cGVOYW1lIDxlbT5UeXBlIE5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwjZ2V0VHlwZURlZmluaXRpb24gPGVtPlR5cGUgRGVmaW5pdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbCNnZXRFbGVtZW50RGVjbGFyYXRpb24gPGVtPkVsZW1lbnQgRGVjbGFyYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUGFydEltcGwjZ2V0RU1lc3NhZ2UgPGVtPkVNZXNzYWdlPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUGFydEltcGwgZXh0ZW5kcyBFeHRlbnNpYmxlRWxlbWVudEltcGwgaW1wbGVtZW50cyBQYXJ0Ci17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0TmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZSA9IE5BTUVfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGVtZW50TmFtZSgpIDxlbT5FbGVtZW50IE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBRTmFtZSBFTEVNRU5UX05BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGVtZW50TmFtZSgpIDxlbT5FbGVtZW50IE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIGVsZW1lbnROYW1lID0gRUxFTUVOVF9OQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZU5hbWUoKSA8ZW0+VHlwZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRUeXBlTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgVFlQRV9OQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZU5hbWUoKSA8ZW0+VHlwZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRUeXBlTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBRTmFtZSB0eXBlTmFtZSA9IFRZUEVfTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZURlZmluaXRpb24oKSA8ZW0+VHlwZSBEZWZpbml0aW9uPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRUeXBlRGVmaW5pdGlvbigpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVsZW1lbnREZWNsYXJhdGlvbigpIDxlbT5FbGVtZW50IERlY2xhcmF0aW9uPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFbGVtZW50RGVjbGFyYXRpb24oKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsYXJhdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVNZXNzYWdlKCkgPGVtPkVNZXNzYWdlPC9lbT59JyByZWZlcmVuY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRFTWVzc2FnZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlIGVNZXNzYWdlID0gbnVsbDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfUEFSVF9FWFRFTlNJT05TID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvcGFydC1leHRlbnNpb25zLyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9NRVNTQUdFID0gIm1lc3NhZ2UiOwotCi0gIHByaXZhdGUgTWFwIGV4dGVuc2lvbkF0dHJpYnV0ZXMgPSBuZXcgRXh0ZW5zaW9uQXR0cmlidXRlTWFwKCk7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgUGFydEltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLlBBUlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIFN0cmluZyBvbGROYW1lID0gbmFtZTsKLSAgICBuYW1lID0gbmV3TmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5QQVJUX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRFbGVtZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnROYW1lKFFOYW1lIG5ld0VsZW1lbnROYW1lKQotICB7Ci0gICAgUU5hbWUgb2xkRWxlbWVudE5hbWUgPSBlbGVtZW50TmFtZTsKLSAgICBlbGVtZW50TmFtZSA9IG5ld0VsZW1lbnROYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfTkFNRSwgb2xkRWxlbWVudE5hbWUsIGVsZW1lbnROYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGVOYW1lKFFOYW1lIG5ld1R5cGVOYW1lKQotICB7Ci0gICAgUU5hbWUgb2xkVHlwZU5hbWUgPSB0eXBlTmFtZTsKLSAgICB0eXBlTmFtZSA9IG5ld1R5cGVOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfTkFNRSwgb2xkVHlwZU5hbWUsIHR5cGVOYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpCi0gIHsKLSAgICBpZiAodHlwZURlZmluaXRpb24gIT0gbnVsbCAmJiB0eXBlRGVmaW5pdGlvbi5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRUeXBlRGVmaW5pdGlvbiA9IChJbnRlcm5hbEVPYmplY3QpdHlwZURlZmluaXRpb247Ci0gICAgICB0eXBlRGVmaW5pdGlvbiA9IChYU0RUeXBlRGVmaW5pdGlvbillUmVzb2x2ZVByb3h5KG9sZFR5cGVEZWZpbml0aW9uKTsKLSAgICAgIGlmICh0eXBlRGVmaW5pdGlvbiAhPSBvbGRUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXU0RMUGFja2FnZS5QQVJUX19UWVBFX0RFRklOSVRJT04sIG9sZFR5cGVEZWZpbml0aW9uLCB0eXBlRGVmaW5pdGlvbikpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHlwZURlZmluaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiBiYXNpY0dldFR5cGVEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiB0eXBlRGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gbmV3VHlwZURlZmluaXRpb24pCi0gIHsKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiBvbGRUeXBlRGVmaW5pdGlvbiA9IHR5cGVEZWZpbml0aW9uOwotICAgIHR5cGVEZWZpbml0aW9uID0gbmV3VHlwZURlZmluaXRpb247Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuUEFSVF9fVFlQRV9ERUZJTklUSU9OLCBvbGRUeXBlRGVmaW5pdGlvbiwgdHlwZURlZmluaXRpb24pKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRFbGVtZW50RGVjbGFyYXRpb24oKQotICB7Ci0gICAgaWYgKGVsZW1lbnREZWNsYXJhdGlvbiAhPSBudWxsICYmIGVsZW1lbnREZWNsYXJhdGlvbi5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFbGVtZW50RGVjbGFyYXRpb24gPSAoSW50ZXJuYWxFT2JqZWN0KWVsZW1lbnREZWNsYXJhdGlvbjsKLSAgICAgIGVsZW1lbnREZWNsYXJhdGlvbiA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pZVJlc29sdmVQcm94eShvbGRFbGVtZW50RGVjbGFyYXRpb24pOwotICAgICAgaWYgKGVsZW1lbnREZWNsYXJhdGlvbiAhPSBvbGRFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCgKLSAgICAgICAgICAgIHRoaXMsCi0gICAgICAgICAgICBOb3RpZmljYXRpb24uUkVTT0xWRSwKLSAgICAgICAgICAgIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT04sCi0gICAgICAgICAgICBvbGRFbGVtZW50RGVjbGFyYXRpb24sCi0gICAgICAgICAgICBlbGVtZW50RGVjbGFyYXRpb24pKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnREZWNsYXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBiYXNpY0dldEVsZW1lbnREZWNsYXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudERlY2xhcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIG5ld0VsZW1lbnREZWNsYXJhdGlvbikKLSAgewotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBvbGRFbGVtZW50RGVjbGFyYXRpb24gPSBlbGVtZW50RGVjbGFyYXRpb247Ci0gICAgZWxlbWVudERlY2xhcmF0aW9uID0gbmV3RWxlbWVudERlY2xhcmF0aW9uOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OLAotICAgICAgICBvbGRFbGVtZW50RGVjbGFyYXRpb24sCi0gICAgICAgIGVsZW1lbnREZWNsYXJhdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZSBnZXRFTWVzc2FnZSgpCi0gIHsKLSAgICBpZiAoZU1lc3NhZ2UgIT0gbnVsbCAmJiBlTWVzc2FnZS5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFTWVzc2FnZSA9IChJbnRlcm5hbEVPYmplY3QpZU1lc3NhZ2U7Ci0gICAgICBlTWVzc2FnZSA9IChNZXNzYWdlKWVSZXNvbHZlUHJveHkob2xkRU1lc3NhZ2UpOwotICAgICAgaWYgKGVNZXNzYWdlICE9IG9sZEVNZXNzYWdlKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLlBBUlRfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZSBiYXNpY0dldEVNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBlTWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RU1lc3NhZ2UoTWVzc2FnZSBuZXdFTWVzc2FnZSkKLSAgewotICAgIE1lc3NhZ2Ugb2xkRU1lc3NhZ2UgPSBlTWVzc2FnZTsKLSAgICBlTWVzc2FnZSA9IG5ld0VNZXNzYWdlOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBBUlRfX0VNRVNTQUdFLCBvbGRFTWVzc2FnZSwgZU1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEV4dGVuc2lvbkF0dHJpYnV0ZShRTmFtZSBuYW1lLCBRTmFtZSB2YWx1ZSkKLSAgewotICAgIFN0cmluZyBsb2NhbE5hbWUgPSBuYW1lLmdldExvY2FsUGFydCgpOwotICAgIGlmIChsb2NhbE5hbWUgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLQotICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgICAgZXh0ZW5zaW9uQXR0cmlidXRlcy5yZW1vdmUobmFtZSk7Ci0gICAgZWxzZQotICAgICAgZXh0ZW5zaW9uQXR0cmlidXRlcy5wdXQobmFtZSwgdmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIEl0ZXJhdG9yIGdldEV4dGVuc2lvbkF0dHJpYnV0ZU5hbWVzKCkKLSAgewotICAgIE1hcCBtYXAgPSBuZXcgSGFzaE1hcChleHRlbnNpb25BdHRyaWJ1dGVzKTsKLQotICAgIC8vIEFkanVzdCBtZXNzYWdlTmFtZSBhdHRyaWJ1dGUKLSAgICBRTmFtZSBtZXNzYWdlTmFtZSA9IGdldE1lc3NhZ2UoKSAhPSBudWxsID8gZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCkgOiBudWxsOwotICAgIGlmIChtZXNzYWdlTmFtZSAhPSBudWxsKQotICAgICAgbWFwLnB1dChuZXcgUU5hbWUoTlNfVVJJX1BBUlRfRVhURU5TSU9OUywgQVRUUl9NRVNTQUdFKSwgbWVzc2FnZU5hbWUpOwotICAgIGVsc2UKLSAgICAgIG1hcC5yZW1vdmUobmV3IFFOYW1lKE5TX1VSSV9QQVJUX0VYVEVOU0lPTlMsIEFUVFJfTUVTU0FHRSkpOwotCi0gICAgcmV0dXJuIG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldEV4dGVuc2lvbkF0dHJpYnV0ZShRTmFtZSBuYW1lKQotICB7Ci0gICAgaWYgKG5hbWUuZXF1YWxzKG5ldyBRTmFtZShOU19VUklfUEFSVF9FWFRFTlNJT05TLCBBVFRSX01FU1NBR0UpKSkKLSAgICAgIHJldHVybiBnZXRNZXNzYWdlKCkgIT0gbnVsbCA/IGdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpIDogbnVsbDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gKFFOYW1lKWV4dGVuc2lvbkF0dHJpYnV0ZXMuZ2V0KG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19OQU1FOgotICAgICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9OQU1FOgotICAgICAgcmV0dXJuIGdldEVsZW1lbnROYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfTkFNRToKLSAgICAgIHJldHVybiBnZXRUeXBlTmFtZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19UWVBFX0RFRklOSVRJT046Ci0gICAgICBpZiAocmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgICByZXR1cm4gYmFzaWNHZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX0RFQ0xBUkFUSU9OOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTUVTU0FHRToKLSAgICAgIGlmIChyZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2V0RU1lc3NhZ2UoKTsKLSAgICAgIHJldHVybiBiYXNpY0dldEVNZXNzYWdlKCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fTkFNRToKLSAgICAgIHNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfTkFNRToKLSAgICAgIHNldEVsZW1lbnROYW1lKChRTmFtZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfTkFNRToKLSAgICAgIHNldFR5cGVOYW1lKChRTmFtZSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfREVGSU5JVElPTjoKLSAgICAgIHNldFR5cGVEZWZpbml0aW9uKChYU0RUeXBlRGVmaW5pdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfREVDTEFSQVRJT046Ci0gICAgICBzZXRFbGVtZW50RGVjbGFyYXRpb24oKFhTREVsZW1lbnREZWNsYXJhdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VNRVNTQUdFOgotICAgICAgc2V0RU1lc3NhZ2UoKE1lc3NhZ2UpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fTkFNRToKLSAgICAgIHNldE5hbWUoTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX0VMRU1FTlRfTkFNRToKLSAgICAgIHNldEVsZW1lbnROYW1lKEVMRU1FTlRfTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfTkFNRToKLSAgICAgIHNldFR5cGVOYW1lKFRZUEVfTkFNRV9FREVGQVVMVCk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX1RZUEVfREVGSU5JVElPTjoKLSAgICAgIHNldFR5cGVEZWZpbml0aW9uKChYU0RUeXBlRGVmaW5pdGlvbiludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTjoKLSAgICAgIHNldEVsZW1lbnREZWNsYXJhdGlvbigoWFNERWxlbWVudERlY2xhcmF0aW9uKW51bGwpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTUVTU0FHRToKLSAgICAgIHNldEVNZXNzYWdlKChNZXNzYWdlKW51bGwpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBBUlRfX05BTUU6Ci0gICAgICByZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19FTEVNRU5UX05BTUU6Ci0gICAgICByZXR1cm4gRUxFTUVOVF9OQU1FX0VERUZBVUxUID09IG51bGwgPyBlbGVtZW50TmFtZSAhPSBudWxsIDogIUVMRU1FTlRfTkFNRV9FREVGQVVMVC5lcXVhbHMoZWxlbWVudE5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19UWVBFX05BTUU6Ci0gICAgICByZXR1cm4gVFlQRV9OQU1FX0VERUZBVUxUID09IG51bGwgPyB0eXBlTmFtZSAhPSBudWxsIDogIVRZUEVfTkFNRV9FREVGQVVMVC5lcXVhbHModHlwZU5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QQVJUX19UWVBFX0RFRklOSVRJT046Ci0gICAgICByZXR1cm4gdHlwZURlZmluaXRpb24gIT0gbnVsbDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTjoKLSAgICAgIHJldHVybiBlbGVtZW50RGVjbGFyYXRpb24gIT0gbnVsbDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVF9fRU1FU1NBR0U6Ci0gICAgICByZXR1cm4gZU1lc3NhZ2UgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZShqYXZheC53c2RsLk1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIHNldEVNZXNzYWdlKChNZXNzYWdlKW1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuTWVzc2FnZSBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBnZXRFTWVzc2FnZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKG5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIGVsZW1lbnROYW1lOiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoZWxlbWVudE5hbWUpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgdHlwZU5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh0eXBlTmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBNYXAgZ2V0RXh0ZW5zaW9uQXR0cmlidXRlcygpCi0gIHsKLSAgICByZXR1cm4gZXh0ZW5zaW9uQXR0cmlidXRlczsKLSAgfQotCi0gIGNsYXNzIEV4dGVuc2lvbkF0dHJpYnV0ZU1hcCBleHRlbmRzIEhhc2hNYXAKLSAgewotICAgIC8qKgotICAgICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAgIEV4dGVuc2lvbkF0dHJpYnV0ZU1hcCgpCi0gICAgewotICAgICAgc3VwZXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IHB1dChPYmplY3Qga2V5LCBPYmplY3QgdmFsKQotICAgIHsKLSAgICAgIFFOYW1lIG5hbWUgPSAoUU5hbWUpa2V5OwotICAgICAgUU5hbWUgdmFsdWUgPSAoUU5hbWUpdmFsOwotICAgICAgU3RyaW5nIGxOYW1lID0gbmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgIFN0cmluZyBuU3BhY2UgPSBuYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICBpZiAoTlNfVVJJX1BBUlRfRVhURU5TSU9OUy5lcXVhbHMoblNwYWNlKSAmJiBBVFRSX01FU1NBR0UuZXF1YWxzKGxOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgamF2YXgud3NkbC5NZXNzYWdlIG1lc3NhZ2VQcm94eSA9IG5ldyBNZXNzYWdlSW1wbCgpOwotICAgICAgICBtZXNzYWdlUHJveHkuc2V0UU5hbWUodmFsdWUpOwotICAgICAgICBzZXRFTWVzc2FnZSgoTWVzc2FnZSltZXNzYWdlUHJveHkpOwotICAgICAgfQotICAgICAgcmV0dXJuIHN1cGVyLnB1dChrZXksIHZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0KLSAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZU5TKG51bGwsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZWxlbWVudEF0dHIgPSBXU0RMQ29uc3RhbnRzLmdldEF0dHJpYnV0ZShjaGFuZ2VkRWxlbWVudCwgV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSk7Ci0gICAgc2V0RWxlbWVudE5hbWUoZWxlbWVudEF0dHIgIT0gbnVsbCA/IGNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIGVsZW1lbnRBdHRyLCBlbGVtZW50LCB0cnVlKSA6IG51bGwpOwotCi0gICAgU3RyaW5nIHR5cGVBdHRyID0gV1NETENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoY2hhbmdlZEVsZW1lbnQsIFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUpOwotICAgIHNldFR5cGVOYW1lKHR5cGVBdHRyICE9IG51bGwgPyBjcmVhdGVRTmFtZShkZWZpbml0aW9uLCB0eXBlQXR0ciwgZWxlbWVudCwgdHJ1ZSkgOiBudWxsKTsKLQotICAgIHJlY29uY2lsZVJlZmVyZW5jZXMoZmFsc2UpOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICAvL3N1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFBhcnRfTmFtZSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldE5hbWUoKSk7Ci0KLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UGFydF9UeXBlTmFtZSgpKQotICAgICAgICBpZiAoZ2V0VHlwZU5hbWUoKSAhPSBudWxsKQotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFLCBnZXRUeXBlTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpICsgIiMiCi0gICAgICAgICAgICArIGdldFR5cGVOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFBhcnRfRWxlbWVudE5hbWUoKSkKLSAgICAgICAgaWYgKGdldEVsZW1lbnROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICBuaWNlU2V0QXR0cmlidXRlVVJJVmFsdWUodGhlRWxlbWVudCwgV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSwgZ2V0RWxlbWVudE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSArICIjIgotICAgICAgICAgICAgKyBnZXRFbGVtZW50TmFtZSgpLmdldExvY2FsUGFydCgpKTsKLQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZVJlZmVyZW5jZShFUmVmZXJlbmNlIGVSZWZlcmVuY2UpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZVJlZmVyZW5jZShlUmVmZXJlbmNlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZVJlZmVyZW5jZSA9PSBudWxsIHx8IGVSZWZlcmVuY2UgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFBhcnRfVHlwZURlZmluaXRpb24oKSkKLSAgICAgIHsKLSAgICAgICAgWFNEVHlwZURlZmluaXRpb24gdHlwZURlZmluaXRpb24gPSBnZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgICBpZiAodHlwZURlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIG5pY2VTZXRBdHRyaWJ1dGVVUklWYWx1ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFLCB0eXBlRGVmaW5pdGlvbi5nZXRVUkkoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgfHwgZVJlZmVyZW5jZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UGFydF9FbGVtZW50RGVjbGFyYXRpb24oKSkKLSAgICAgIHsKLSAgICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsID0gZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgICAgIGlmIChlbGVtZW50RGVjbCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUsIGVsZW1lbnREZWNsLmdldFVSSSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLlBBUlQpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBuZXdFbGVtZW50RGVjbGFyYXRpb24gPSByZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnROYW1lKTsKLSAgICBpZiAobmV3RWxlbWVudERlY2xhcmF0aW9uICE9IGVsZW1lbnREZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICBzZXRFbGVtZW50RGVjbGFyYXRpb24obmV3RWxlbWVudERlY2xhcmF0aW9uKTsKLSAgICB9Ci0KLSAgICBYU0RUeXBlRGVmaW5pdGlvbiBuZXdUeXBlRGVmaW5pdGlvbiA9IHJlc29sdmVUeXBlRGVmaW5pdGlvbih0eXBlTmFtZSk7Ci0gICAgaWYgKG5ld1R5cGVEZWZpbml0aW9uICE9IHR5cGVEZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHNldFR5cGVEZWZpbml0aW9uKG5ld1R5cGVEZWZpbml0aW9uKTsKLSAgICB9Ci0KLSAgICBzdXBlci5yZWNvbmNpbGVSZWZlcmVuY2VzKGRlZXApOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzb2x2ZUVsZW1lbnREZWNsYXJhdGlvbihRTmFtZSBxbmFtZSkKLSAgewotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiByZXN1bHQgPSBudWxsOwotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb25JbXBsIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbkltcGwpZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGVmaW5pdGlvbi5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIFhTRFR5cGVEZWZpbml0aW9uIHJlc29sdmVUeXBlRGVmaW5pdGlvbihRTmFtZSBxbmFtZSkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbkltcGwgZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uSW1wbClnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBkZWZpbml0aW9uLnJlc29sdmVUeXBlRGVmaW5pdGlvbihxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSwgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19IC8vUGFydEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9Qb3J0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BvcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMTUwZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1BvcnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydEltcGwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0SW1wbCNnZXRFQmluZGluZyA8ZW0+RUJpbmRpbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBQb3J0SW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFBvcnQKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldE5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0VERUZBVUxUID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RUJpbmRpbmcoKSA8ZW0+RUJpbmRpbmc8L2VtPn0nIHJlZmVyZW5jZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVCaW5kaW5nKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmcgZUJpbmRpbmcgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFBvcnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5QT1JUOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0gICAgbmFtZSA9IG5ld05hbWU7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuUE9SVF9fTkFNRSwgb2xkTmFtZSwgbmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZyBnZXRFQmluZGluZygpCi0gIHsKLSAgICBpZiAoZUJpbmRpbmcgIT0gbnVsbCAmJiBlQmluZGluZy5lSXNQcm94eSgpKQotICAgIHsKLSAgICAgIEludGVybmFsRU9iamVjdCBvbGRFQmluZGluZyA9IChJbnRlcm5hbEVPYmplY3QpZUJpbmRpbmc7Ci0gICAgICBlQmluZGluZyA9IChCaW5kaW5nKWVSZXNvbHZlUHJveHkob2xkRUJpbmRpbmcpOwotICAgICAgaWYgKGVCaW5kaW5nICE9IG9sZEVCaW5kaW5nKQotICAgICAgewotICAgICAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdTRExQYWNrYWdlLlBPUlRfX0VCSU5ESU5HLCBvbGRFQmluZGluZywgZUJpbmRpbmcpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVCaW5kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZyBiYXNpY0dldEVCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBlQmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RUJpbmRpbmcoQmluZGluZyBuZXdFQmluZGluZykKLSAgewotICAgIEJpbmRpbmcgb2xkRUJpbmRpbmcgPSBlQmluZGluZzsKLSAgICBlQmluZGluZyA9IG5ld0VCaW5kaW5nOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBPUlRfX0VCSU5ESU5HLCBvbGRFQmluZGluZywgZUJpbmRpbmcpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLkJpbmRpbmcgZ2V0QmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RUJpbmRpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmcoamF2YXgud3NkbC5CaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBzZXRFQmluZGluZygoQmluZGluZyliaW5kaW5nKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9fTkFNRToKLSAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfX0VCSU5ESU5HOgotICAgICAgaWYgKHJlc29sdmUpCi0gICAgICAgIHJldHVybiBnZXRFQmluZGluZygpOwotICAgICAgcmV0dXJuIGJhc2ljR2V0RUJpbmRpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX19OQU1FOgotICAgICAgc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9fRUJJTkRJTkc6Ci0gICAgICBzZXRFQmluZGluZygoQmluZGluZyluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX19OQU1FOgotICAgICAgc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9fRUJJTkRJTkc6Ci0gICAgICBzZXRFQmluZGluZygoQmluZGluZyludWxsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX19OQU1FOgotICAgICAgcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9fRUJJTkRJTkc6Ci0gICAgICByZXR1cm4gZUJpbmRpbmcgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKG5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChuYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBzZXROYW1lKGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLSAgICByZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIGdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5yZW1vdmUoaS5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgUG9ydCBwb3J0ID0gKFBvcnQpY29tcG9uZW50OwotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBsaXN0LmFkZEFsbChwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvLwotICAvLyBGb3IgcmVjb25jaWxpYXRpb246IE1vZGVsIC0+IERPTQotICAvLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIHN1cGVyLmNoYW5nZUF0dHJpYnV0ZShlQXR0cmlidXRlKTsKLSAgICBFbGVtZW50IHRoZUVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgaWYgKHRoZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZUF0dHJpYnV0ZSA9PSBudWxsIHx8IGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFBvcnRfTmFtZSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldE5hbWUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlUmVmZXJlbmNlKEVSZWZlcmVuY2UgZVJlZmVyZW5jZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlUmVmZXJlbmNlID09IG51bGwgfHwgZVJlZmVyZW5jZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UG9ydF9FQmluZGluZygpKQotICAgICAgewotICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSBnZXRFQmluZGluZygpOwotICAgICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgUU5hbWUgcU5hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCk7Ci0gICAgICAgICAgbmljZVNldEF0dHJpYnV0ZVVSSVZhbHVlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuQklORElOR19BVFRSSUJVVEUsIHFOYW1lLmdldE5hbWVzcGFjZVVSSSgpICsgIiMiICsgcU5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuUE9SVCk7Ci0gICAgc2V0RWxlbWVudChuZXdFbGVtZW50KTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClleHRlbnNpYmlsaXR5RWxlbWVudCkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgfQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlUmVmZXJlbmNlcyhib29sZWFuIGRlZXApCi0gIHsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IGNyZWF0ZVFOYW1lKGRlZmluaXRpb24sIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuQklORElOR19BVFRSSUJVVEUpLCBlbGVtZW50KTsKLSAgICAgIEJpbmRpbmcgbmV3QmluZGluZyA9IChiaW5kaW5nUU5hbWUgIT0gbnVsbCkgPyAoQmluZGluZylkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKSA6IG51bGw7Ci0gICAgICBpZiAobmV3QmluZGluZyAhPSBnZXRFQmluZGluZygpKQotICAgICAgewotICAgICAgICBzZXRFQmluZGluZyhuZXdCaW5kaW5nKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3VwZXIucmVjb25jaWxlUmVmZXJlbmNlcyhkZWVwKTsKLSAgfQotCi19IC8vUG9ydEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9Qb3J0VHlwZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9Qb3J0VHlwZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFmMmY4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvUG9ydFR5cGVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9ydCBUeXBlPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbCNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydFR5cGVJbXBsI2lzVW5kZWZpbmVkIDxlbT5VbmRlZmluZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuUG9ydFR5cGVJbXBsI2dldEVPcGVyYXRpb25zIDxlbT5FT3BlcmF0aW9uczwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFBvcnRUeXBlSW1wbCBleHRlbmRzIEV4dGVuc2libGVFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFBvcnRUeXBlCi17Ci0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBzZXJpYWxpemVkLgotICAgKiBzZXJpYWxWZXJzaW9uVUlEIGlzIGFzc2lnbmVkIHdpdGggMUwgdG8gYXZvaWQKLSAgICogY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UU5hbWUoKSA8ZW0+UU5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldFFOYW1lKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRV9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFFOYW1lKCkgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBRTmFtZSBxTmFtZSA9IFFOQU1FX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVbmRlZmluZWQoKSA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBVTkRFRklORURfRURFRkFVTFQgPSBmYWxzZTsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVbmRlZmluZWQoKSA8ZW0+VW5kZWZpbmVkPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNpc1VuZGVmaW5lZCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHVuZGVmaW5lZCA9IFVOREVGSU5FRF9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RU9wZXJhdGlvbnMoKSA8ZW0+RU9wZXJhdGlvbnM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RU9wZXJhdGlvbnMoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUxpc3QgZU9wZXJhdGlvbnMgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFBvcnRUeXBlSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuUE9SVF9UWVBFOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHFOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRRTmFtZShRTmFtZSBuZXdRTmFtZSkKLSAgewotICAgIFFOYW1lIG9sZFFOYW1lID0gcU5hbWU7Ci0gICAgcU5hbWUgPSBuZXdRTmFtZTsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1FOQU1FLCBvbGRRTmFtZSwgcU5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gbmV3VW5kZWZpbmVkKQotICB7Ci0gICAgYm9vbGVhbiBvbGRVbmRlZmluZWQgPSB1bmRlZmluZWQ7Ci0gICAgdW5kZWZpbmVkID0gbmV3VW5kZWZpbmVkOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fVU5ERUZJTkVELCBvbGRVbmRlZmluZWQsIHVuZGVmaW5lZCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUxpc3QgZ2V0RU9wZXJhdGlvbnMoKQotICB7Ci0gICAgaWYgKGVPcGVyYXRpb25zID09IG51bGwpCi0gICAgewotICAgICAgZU9wZXJhdGlvbnMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoT3BlcmF0aW9uLmNsYXNzLCB0aGlzLCBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX0VPUEVSQVRJT05TKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVPcGVyYXRpb25zOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEFkZCBhbiBvcGVyYXRpb24gdG8gdGhpcyBwb3J0IHR5cGUuCi0gICAqIEBwYXJhbSBvcGVyYXRpb24gdGhlIG9wZXJhdGlvbiB0byBiZSBhZGRlZAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZE9wZXJhdGlvbihqYXZheC53c2RsLk9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBpZiAoIW9wZXJhdGlvbi5pc1VuZGVmaW5lZCgpKQotICAgICAgZ2V0RU9wZXJhdGlvbnMoKS5hZGQob3BlcmF0aW9uKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24uIE5vdGUgdGhhdCBvcGVyYXRpb24gbmFtZXMgY2FuCi0gICAqIGJlIG92ZXJsb2FkZWQgd2l0aGluIGEgUG9ydFR5cGUuIEluIGNhc2Ugb2Ygb3ZlcmxvYWRpbmcsIHRoZQotICAgKiBuYW1lcyBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBtZXNzYWdlcyBjYW4gYmUgdXNlZCB0byBmdXJ0aGVyCi0gICAqIHJlZmluZSB0aGUgc2VhcmNoLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBpbnB1dE5hbWUgdGhlIG5hbWUgb2YgdGhlIGlucHV0IG1lc3NhZ2U7IGlmIHRoaXMgaXMgbnVsbAotICAgKiAgICAgICAgaXQgd2lsbCBiZSBpZ25vcmVkLgotICAgKiBAcGFyYW0gb3V0cHV0TmFtZSB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IG1lc3NhZ2U7IGlmIHRoaXMgaXMgbnVsbAotICAgKiAgICAgICAgaXQgd2lsbCBiZSBpZ25vcmVkLgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiwgb3IgbnVsbCBpZiB0aGVyZSB3YXNuJ3QKLSAgICogICAgICAgICBhbnkgbWF0Y2hpbmcgb3BlcmF0aW9uCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuT3BlcmF0aW9uIGdldE9wZXJhdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIGlucHV0TmFtZSwgU3RyaW5nIG91dHB1dE5hbWUpCi0gIHsKLSAgICBJdGVyYXRvciBvcEl0ZXJhdG9yID0gZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKG9wSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGphdmF4LndzZGwuT3BlcmF0aW9uIG9wID0gKGphdmF4LndzZGwuT3BlcmF0aW9uKW9wSXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYgKG9wID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICBTdHJpbmcgb3BOYW1lID0gb3AuZ2V0TmFtZSgpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBvcE5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFuYW1lLmVxdWFscyhvcE5hbWUpKQotICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG5hbWUgIT0gbnVsbCB8fCBvcE5hbWUgIT0gbnVsbCkKLSAgICAgICAgb3AgPSBudWxsOwotCi0gICAgICBpZiAob3AgIT0gbnVsbCAmJiBpbnB1dE5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF2YXgud3NkbC5JbnB1dCBpbnB1dCA9IG9wLmdldElucHV0KCk7Ci0gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG9wSW5wdXROYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgIGlmIChvcElucHV0TmFtZSA9PSBudWxsIHx8ICFvcElucHV0TmFtZS5lcXVhbHMoaW5wdXROYW1lKSkKLSAgICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgb3AgPSBudWxsOwotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCAmJiBvdXRwdXROYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGphdmF4LndzZGwuT3V0cHV0IG91dHB1dCA9IG9wLmdldE91dHB1dCgpOwotICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgb3BPdXRwdXROYW1lID0gb3V0cHV0LmdldE5hbWUoKTsKLSAgICAgICAgICBpZiAob3BPdXRwdXROYW1lID09IG51bGwgfHwgIW9wT3V0cHV0TmFtZS5lcXVhbHMob3V0cHV0TmFtZSkpCi0gICAgICAgICAgICBvcCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIG9wID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgaWYgKG9wICE9IG51bGwpCi0gICAgICAgIHJldHVybiBvcDsKLSAgICB9IC8vIGVuZCB3aGlsZQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIEdldCBhbGwgdGhlIG9wZXJhdGlvbnMgZGVmaW5lZCBoZXJlLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldE9wZXJhdGlvbnMoKQotICB7Ci0gICAgaWYgKCFpc1VuZGVmaW5lZCgpKQotICAgICAgcmV0dXJuIGdldEVPcGVyYXRpb25zKCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3QoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19FT1BFUkFUSU9OUzoKLSAgICAgIHJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RU9wZXJhdGlvbnMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fUU5BTUU6Ci0gICAgICByZXR1cm4gZ2V0UU5hbWUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gaXNVbmRlZmluZWQoKSA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0U7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fRU9QRVJBVElPTlM6Ci0gICAgICByZXR1cm4gZ2V0RU9wZXJhdGlvbnMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoKChCb29sZWFuKW5ld1ZhbHVlKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fRU9QRVJBVElPTlM6Ci0gICAgICBnZXRFT3BlcmF0aW9ucygpLmNsZWFyKCk7Ci0gICAgICBnZXRFT3BlcmF0aW9ucygpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoUU5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX1VOREVGSU5FRDoKLSAgICAgIHNldFVuZGVmaW5lZChVTkRFRklORURfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEVfX0VPUEVSQVRJT05TOgotICAgICAgZ2V0RU9wZXJhdGlvbnMoKS5jbGVhcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlBPUlRfVFlQRV9fUU5BTUU6Ci0gICAgICByZXR1cm4gUU5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IHFOYW1lICE9IG51bGwgOiAhUU5BTUVfRURFRkFVTFQuZXF1YWxzKHFOYW1lKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkICE9IFVOREVGSU5FRF9FREVGQVVMVDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUE9SVF9UWVBFX19FT1BFUkFUSU9OUzoKLSAgICAgIHJldHVybiBlT3BlcmF0aW9ucyAhPSBudWxsICYmICFlT3BlcmF0aW9ucy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBpZiAoZUlzUHJveHkoKSkKLSAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0gICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIChxTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHFOYW1lKTsKLSAgICByZXN1bHQuYXBwZW5kKCIsIHVuZGVmaW5lZDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKHVuZGVmaW5lZCk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIFN0cmluZyBuYW1lID0gY2hhbmdlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUpOwotICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUgPT0gbnVsbCA/ICIiIDogbmFtZSk7IC8vJE5PTi1OTFMtMSQKLSAgICBzZXRRTmFtZShxbmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgc3dpdGNoIChXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldFdTRExUeXBlKGNoaWxkKSkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExDb25zdGFudHMuT1BFUkFUSU9OOgotICAgICAgewotICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgICAgICBvcGVyYXRpb24uc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICBvcGVyYXRpb24uc2V0RWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGdldEVPcGVyYXRpb25zKCkuYWRkKG9wZXJhdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZSh0aGlzLCBpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlKE9iamVjdCBjb21wb25lbnQsIE9iamVjdCBtb2RlbE9iamVjdCkKLSAgewotICAgIExpc3QgbGlzdCA9IGdldExpc3QoY29tcG9uZW50LCBtb2RlbE9iamVjdCk7Ci0gICAgaWYgKGxpc3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldExpc3QoT2JqZWN0IGNvbXBvbmVudCwgT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgTGlzdCByZXN1bHQgPSBudWxsOwotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKWNvbXBvbmVudDsKLSAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBPcGVyYXRpb24pCi0gICAgewotICAgICAgcmVzdWx0ID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpY29tcG9uZW50OwotCi0gICAgTGlzdCBsaXN0ID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UG9ydFR5cGVfUU5hbWUoKSkKLSAgICAgICAgbmljZVNldEF0dHJpYnV0ZSh0aGVFbGVtZW50LCBXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCBnZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoV1NETENvbnN0YW50cy5QT1JUX1RZUEUpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKE9wZXJhdGlvbkltcGwpb3BlcmF0aW9uKS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL1BvcnRUeXBlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1NlcnZpY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvU2VydmljZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhhNzZkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvU2VydmljZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2VydmljZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbCNnZXRRTmFtZSA8ZW0+UU5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGwjaXNVbmRlZmluZWQgPGVtPlVuZGVmaW5lZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbCNnZXRFUG9ydHMgPGVtPkVQb3J0czwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgU2VydmljZQotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogc2VyaWFsVmVyc2lvblVJRCBpcyBhc3NpZ25lZCB3aXRoIDFMIHRvIGF2b2lkCi0gICAqIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFFOYW1lKCkgPGVtPlFOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXRRTmFtZSgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRRTmFtZSgpIDxlbT5RTmFtZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0UU5hbWUoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgcU5hbWUgPSBRTkFNRV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gVU5ERUZJTkVEX0VERUZBVUxUID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVW5kZWZpbmVkKCkgPGVtPlVuZGVmaW5lZDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjaXNVbmRlZmluZWQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRlZmluZWQgPSBVTkRFRklORURfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVQb3J0cygpIDxlbT5FUG9ydHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RVBvcnRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGVQb3J0cyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgU2VydmljZUltcGwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLkxpdGVyYWxzLlNFUlZJQ0U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRRTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFFOYW1lKFFOYW1lIG5ld1FOYW1lKQotICB7Ci0gICAgUU5hbWUgb2xkUU5hbWUgPSBxTmFtZTsKLSAgICBxTmFtZSA9IG5ld1FOYW1lOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FLCBvbGRRTmFtZSwgcU5hbWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5kZWZpbmVkKGJvb2xlYW4gbmV3VW5kZWZpbmVkKQotICB7Ci0gICAgYm9vbGVhbiBvbGRVbmRlZmluZWQgPSB1bmRlZmluZWQ7Ci0gICAgdW5kZWZpbmVkID0gbmV3VW5kZWZpbmVkOwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1VOREVGSU5FRCwgb2xkVW5kZWZpbmVkLCB1bmRlZmluZWQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldEVQb3J0cygpCi0gIHsKLSAgICBpZiAoZVBvcnRzID09IG51bGwpCi0gICAgewotICAgICAgZVBvcnRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFBvcnQuY2xhc3MsIHRoaXMsIFdTRExQYWNrYWdlLlNFUlZJQ0VfX0VQT1JUUyk7Ci0gICAgfQotICAgIHJldHVybiBlUG9ydHM7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogQWRkIGEgcG9ydCB0byB0aGlzIHNlcnZpY2UuCi0gICAqIEBwYXJhbSBwb3J0IHRoZSBwb3J0IHRvIGJlIGFkZGVkCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUG9ydChqYXZheC53c2RsLlBvcnQgcG9ydCkKLSAgewotICAgIGdldEVQb3J0cygpLmFkZCgoUG9ydClwb3J0KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBHZXQgYWxsIHRoZSBwb3J0cyBkZWZpbmVkIGhlcmUuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE1hcCBnZXRQb3J0cygpCi0gIHsKLSAgICBIYXNoTWFwIGhhc2hNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQb3J0IHBvcnQgPSAoUG9ydClpLm5leHQoKTsKLSAgICAgIGhhc2hNYXAucHV0KHBvcnQuZ2V0TmFtZSgpLCBwb3J0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc2hNYXA7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogR2V0IHRoZSBzcGVjaWZpZWQgcG9ydC4KLSAgICoKLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgcG9ydC4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBwb3J0LCBvciBudWxsIGlmIHRoZXJlIHdhc24ndAotICAgKiBhbnkgbWF0Y2hpbmcgcG9ydAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBqYXZheC53c2RsLlBvcnQgZ2V0UG9ydChTdHJpbmcgbmFtZSkKLSAgewotICAgIFBvcnQgcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRFUG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaS5uZXh0KCk7Ci0gICAgICBpZiAobmFtZS5lcXVhbHMocG9ydC5nZXROYW1lKCkpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBwb3J0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRFUG9ydHMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FOgotICAgICAgcmV0dXJuIGdldFFOYW1lKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1VOREVGSU5FRDoKLSAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgcmV0dXJuIGdldEVQb3J0cygpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoKFFOYW1lKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fVU5ERUZJTkVEOgotICAgICAgc2V0VW5kZWZpbmVkKCgoQm9vbGVhbiluZXdWYWx1ZSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19FUE9SVFM6Ci0gICAgICBnZXRFUG9ydHMoKS5jbGVhcigpOwotICAgICAgZ2V0RVBvcnRzKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0VfX1FOQU1FOgotICAgICAgc2V0UU5hbWUoUU5BTUVfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19VTkRFRklORUQ6Ci0gICAgICBzZXRVbmRlZmluZWQoVU5ERUZJTkVEX0VERUZBVUxUKTsKLSAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgZ2V0RVBvcnRzKCkuY2xlYXIoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19RTkFNRToKLSAgICAgIHJldHVybiBRTkFNRV9FREVGQVVMVCA9PSBudWxsID8gcU5hbWUgIT0gbnVsbCA6ICFRTkFNRV9FREVGQVVMVC5lcXVhbHMocU5hbWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5TRVJWSUNFX19VTkRFRklORUQ6Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkICE9IFVOREVGSU5FRF9FREVGQVVMVDsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuU0VSVklDRV9fRVBPUlRTOgotICAgICAgcmV0dXJuIGVQb3J0cyAhPSBudWxsICYmICFlUG9ydHMuaXNFbXB0eSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgaWYgKGVJc1Byb3h5KCkpCi0gICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoIiAocU5hbWU6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZChxTmFtZSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiLCB1bmRlZmluZWQ6ICIpOyAvLyROT04tTkxTLTEkCi0gICAgcmVzdWx0LmFwcGVuZCh1bmRlZmluZWQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGUgbWV0aG9kcwotICAvLwotCi0gIHB1YmxpYyB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBTdHJpbmcgbmFtZSA9IGNoYW5nZWRFbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFKTsKLSAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lID09IG51bGwgPyAiIiA6IG5hbWUpOyAvLyROT04tTkxTLTEkCi0gICAgc2V0UU5hbWUocW5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChFbGVtZW50IGNoaWxkLCBDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICAgIHN3aXRjaCAoV1NETFV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZShjaGlsZCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMQ29uc3RhbnRzLlBPUlQ6Ci0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSgoV1NETFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoV1NETFBhY2thZ2UuZU5TX1VSSSkpLmdldFdTRExGYWN0b3J5KCkuY3JlYXRlUG9ydCgpOwotICAgICAgICBwb3J0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgZ2V0RVBvcnRzKCkuYWRkKHBvcnQpOwotICAgICAgICBwb3J0LnNldEVsZW1lbnQoY2hpbGQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETENvbnN0YW50cy5ET0NVTUVOVEFUSU9OOgotICAgICAgewotICAgICAgICBzZXREb2N1bWVudGF0aW9uRWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgc3VwZXIuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVjb25jaWxpYXRpb24oQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHJlbW92ZShpLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZShPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBnZXRMaXN0KG1vZGVsT2JqZWN0KTsKLSAgICBpZiAobGlzdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGxpc3QucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0TGlzdChPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBMaXN0IHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgUG9ydCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRFUG9ydHMoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vCi0gIC8vIEZvciByZWNvbmNpbGlhdGlvbjogTW9kZWwgLT4gRE9NCi0gIC8vCi0KLSAgcHJvdGVjdGVkIHZvaWQgY2hhbmdlQXR0cmlidXRlKEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgICAgcmV0dXJuOwotCi0gICAgc3VwZXIuY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICBpZiAodGhlRWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlQXR0cmlidXRlID09IG51bGwgfHwgZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U2VydmljZV9RTmFtZSgpKQotICAgICAgICBuaWNlU2V0QXR0cmlidXRlKHRoZUVsZW1lbnQsIFdTRExDb25zdGFudHMuTkFNRV9BVFRSSUJVVEUsIGdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoKQotICB7Ci0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChXU0RMQ29uc3RhbnRzLlNFUlZJQ0UpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIGl0ZXJhdG9yID0gZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSAoKFBvcnRJbXBsKXBvcnQpLmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLX0gLy9TZXJ2aWNlSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1R5cGVzSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1R5cGVzSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTg0ZDU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9UeXBlc0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5ET01FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlR5cGVzPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVHlwZXNJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUVsZW1lbnRJbXBsIGltcGxlbWVudHMgVHlwZXMKLXsKLSAgLyoqCi0gICAqIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIHNlcmlhbFZlcnNpb25VSUQgaXMgYXNzaWduZWQgd2l0aCAxTCB0byBhdm9pZAotICAgKiBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgVHlwZXNJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5UWVBFUzsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXMoKQotICB7Ci0gICAgTGlzdCBhcnJheUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpLm5leHQoKTsKLSAgICAgIGlmICghKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZGVlID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgICAgIGlmICh4c2RlZS5nZXRTY2hlbWEoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBhcnJheUxpc3QuYWRkKHhzZGVlLmdldFNjaGVtYSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5TGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXMoU3RyaW5nIG5hbWVzcGFjZVVSSSkKLSAgewotICAgIExpc3Qgc2NoZW1hcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRTY2hlbWFzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKWkubmV4dCgpOwotICAgICAgaWYgKG5hbWVzcGFjZVVSSSA9PSBudWxsICYmIHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSA9PSBudWxsKQotICAgICAgewotICAgICAgICBzY2hlbWFzLmFkZChzY2hlbWEpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAobmFtZXNwYWNlVVJJICE9IG51bGwgJiYgbmFtZXNwYWNlVVJJLmVxdWFscyhzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgewotICAgICAgICBzY2hlbWFzLmFkZChzY2hlbWEpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc2NoZW1hczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVOb3RpZnkoTm90aWZpY2F0aW9uIG1zZykKLSAgewotICAgIHN1cGVyLmVOb3RpZnkobXNnKTsKLQotICAgIC8vIGNzLi4gaWYgd2UndmUgYWRkZWQgYW4gWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGFuZCB0aGUgVHlwZXMgb2JqZWN0IGlzIGFscmVhZHkgYXR0YWNoZWQgCi0gICAgLy8gdG8gYSByZXNvdXJjZSB3ZSBuZWVkIHRvIHNldCB0aGUgc2NoZW1hTG9jYXRpb24gZm9yIHRoZSBpbmxpbmUgc2NoZW1hLgotICAgIC8vIElmIG5vdCB5ZXQgYXR0YWNoZWQgdG8gYSByZXNvdXJjZSwgdGhlIHNjaGVtYUxvY2F0aW9uJ3Mgd2lsbCBiZSBzZXQgdmlhIFdTRExSZXNvdXJjZUltcGwuYXR0YWNoZWQoRU9iamVjdCBvKQotICAgIC8vICAgICAKLSAgICBpZiAobXNnLmdldEZlYXR1cmUoKSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RXh0ZW5zaWJsZUVsZW1lbnRfRUV4dGVuc2liaWxpdHlFbGVtZW50cygpICYmIG1zZy5nZXRFdmVudFR5cGUoKSA9PSBOb3RpZmljYXRpb24uQUREKQotICAgIHsKLSAgICAgIGlmIChtc2cuZ2V0TmV3VmFsdWUoKSBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCkKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGVlID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCltc2cuZ2V0TmV3VmFsdWUoKTsKLSAgICAgICAgaWYgKGVlLmdldFNjaGVtYSgpICE9IG51bGwgJiYgZWUuZ2V0U2NoZW1hKCkuZVJlc291cmNlKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGVlLmdldFNjaGVtYSgpLnNldFNjaGVtYUxvY2F0aW9uKGVlLmdldFNjaGVtYSgpLmVSZXNvdXJjZSgpLmdldFVSSSgpLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8KLSAgLy8gUmVjb25jaWxlIG1ldGhvZHMKLSAgLy8KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVBdHRyaWJ1dGVzKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVVucmVjb25jaWxlZEVsZW1lbnQoRWxlbWVudCBjaGlsZCwgQ29sbGVjdGlvbiByZW1haW5pbmdNb2RlbE9iamVjdHMpCi0gIHsKLSAgICBpZiAoWFNEQ29uc3RhbnRzLlNDSEVNQV9FTEVNRU5UX1RBRy5lcXVhbHMoY2hpbGQuZ2V0TG9jYWxOYW1lKCkpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RlZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgICAgICB4c2RlZS5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgIHhzZGVlLnNldEVsZW1lbnQoY2hpbGQpOyAvLyBjcyA6IHRoaXMgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBjcmVhdGluZyB0aGUgaW5saW5lIHNjaGVtYSAgICAgICAgICAgICAgIAotICAgICAgICBhZGRFeHRlbnNpYmlsaXR5RWxlbWVudCh4c2RlZSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzdXBlci5oYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KGNoaWxkLCByZW1haW5pbmdNb2RlbE9iamVjdHMpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZW1vdmUodGhpcywgaS5uZXh0KCkpOwotICAgIH0KLSAgICAoKERlZmluaXRpb25JbXBsKWdldEVuY2xvc2luZ0RlZmluaXRpb24oKSkucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZShPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBUeXBlcyB0eXBlcyA9IChUeXBlcyljb21wb25lbnQ7Ci0gICAgTGlzdCBsaXN0ID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGxpc3QucmVtb3ZlKG1vZGVsT2JqZWN0KTsKLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldE1vZGVsT2JqZWN0cyhPYmplY3QgY29tcG9uZW50KQotICB7Ci0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpY29tcG9uZW50OwotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBsaXN0LmFkZEFsbCh0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFdTRExDb25zdGFudHMuVFlQRVMpOwotICAgIHNldEVsZW1lbnQobmV3RWxlbWVudCk7Ci0KLSAgICAvLyBBZGQgY2hpbGRyZW4KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgaWYgKGRlZmluaXRpb24gPT0gbnVsbCkKLSAgICAgIHJldHVybiBuZXdFbGVtZW50OwotCi0gICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkZWZpbml0aW9uLmdldERvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50ID09IG51bGwpCi0gICAgICBkb2N1bWVudCA9ICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikudXBkYXRlRG9jdW1lbnQoKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXIgPSBnZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICBFbGVtZW50IGVsID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyLm5leHQoKTsKLSAgICAgIGVsID0gZXh0ZW5zaWJpbGl0eS5nZXRFbGVtZW50KCk7Ci0gICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IHJlUGFyZW50ZWQgPSAoRWxlbWVudClkb2N1bWVudC5pbXBvcnROb2RlKGVsLCB0cnVlKTsKLSAgICAgICAgICBleHRlbnNpYmlsaXR5LnNldEVsZW1lbnQocmVQYXJlbnRlZCk7IC8vIHJlcGxhY2Ugd2l0aCB0aGUgbmV3IG9uZQotICAgICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVQYXJlbnRlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKERPTUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFbGVtZW50IGNoaWxkID0gKChFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0ZW5zaWJpbGl0eSkuY3JlYXRlRWxlbWVudCgpOwotICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3RWxlbWVudDsKLSAgfQotfSAvL1R5cGVzSW1wbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTg0NDFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Vbmtub3duIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsI2dldENoaWxkcmVuIDxlbT5DaGlsZHJlbjwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENoaWxkcmVuKCkgPGVtPkNoaWxkcmVuPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldENoaWxkcmVuKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVMaXN0IGNoaWxkcmVuID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVMaXN0IGdldENoaWxkcmVuKCkKLSAgewotICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKQotICAgIHsKLSAgICAgIGNoaWxkcmVuID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywgdGhpcywgV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNoaWxkcmVuOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU46Ci0gICAgICByZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldENoaWxkcmVuKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU46Ci0gICAgICByZXR1cm4gZ2V0Q2hpbGRyZW4oKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU46Ci0gICAgICBnZXRDaGlsZHJlbigpLmNsZWFyKCk7Ci0gICAgICBnZXRDaGlsZHJlbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fQ0hJTERSRU46Ci0gICAgICBnZXRDaGlsZHJlbigpLmNsZWFyKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuVU5LTk9XTl9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX0NISUxEUkVOOgotICAgICAgcmV0dXJuIGNoaWxkcmVuICE9IG51bGwgJiYgIWNoaWxkcmVuLmlzRW1wdHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLy8gCi0gIC8vIFJlY29uY2lsZSBtZXRob2RzCi0gIC8vCi0KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudChFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudCA9PSBudWxsICYmICFpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJFeHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbGVtZW50KCk6IFByZXNlcnZpbmcgb2xkIGVsZW1lbnQiKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldEVsZW1lbnRHZW4oZWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwucmVjb25jaWxlQXR0cmlidXRlcygpIik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudCgpIik7Ci0gICAgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIGV4dGVuc2liaWxpdHlFbGVtZW50LnNldEVuY2xvc2luZ0RlZmluaXRpb24oZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbGVtZW50KGNoaWxkKTsKLQotICAgIC8vIFRPRE8uLiAgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBjaGlsZCBzaG91bGQgZ28gaW4gdGhlIGluIGN1cnJlbnQgbGlzdAotICAgIC8vIHNvIHRoYXQgaXQgZG9lc24ndCBhbHdheXMgZW5kIHVwIGdvaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgCi0gICAgLy8gKHNpbmNlIGEgbmV3IGVsZW1lbnQgbWlnaHQgYmUgYWRkZWQgYXQgdGhlIHN0YXJ0KQotICAgIGdldENoaWxkcmVuKCkuYWRkKGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlY29uY2lsaWF0aW9uKENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVtYWluaW5nTW9kZWxPYmplY3RzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZW1vdmUodGhpcywgaS5uZXh0KCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZShPYmplY3QgY29tcG9uZW50LCBPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsKLSAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgdWVlID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCljb21wb25lbnQ7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIHVlZS5nZXRDaGlsZHJlbigpLnJlbW92ZShtb2RlbE9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudCgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgaWYgKGRlZmluaXRpb24gPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkZWZpbml0aW9uLmdldERvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50ID09IG51bGwpCi0gICAgICBkb2N1bWVudCA9ICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikudXBkYXRlRG9jdW1lbnQoKTsKLQotICAgIEVsZW1lbnQgbmV3RWxlbWVudCA9IG51bGw7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkgLy8gVGhpcyBpcyBhbiBvbGQgZWxlbWVudC4KLSAgICB7Ci0gICAgICBuZXdFbGVtZW50ID0gKEVsZW1lbnQpZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50LCB0cnVlKTsKLSAgICAgIGVsZW1lbnQgPSBuZXdFbGVtZW50OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBTdHJpbmcgcXVhbGlmaWVyID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgobmFtZXNwYWNlKTsKLSAgICAgIG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlLCAocXVhbGlmaWVyID09IG51bGwgPyAiIiA6IHF1YWxpZmllciArICI6IikgKyBnZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICAgIGVsZW1lbnQgPSBuZXdFbGVtZW50OwotICAgIH0KLQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgcHJpdmF0ZSBqYXZhLnV0aWwuTWFwIHByb3BlcnRpZXMgPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKLQotICBwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGUoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgcHJvcGVydGllcy5wdXQoa2V5LCB2YWx1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VBdHRyaWJ1dGUoRUF0dHJpYnV0ZSBlQXR0cmlidXRlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICByZXR1cm47Ci0KLSAgICBzdXBlci5jaGFuZ2VBdHRyaWJ1dGUoZUF0dHJpYnV0ZSk7Ci0gICAgRWxlbWVudCB0aGVFbGVtZW50ID0gZ2V0RWxlbWVudCgpOwotICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwcm9wZXJ0aWVzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgIGphdmEudXRpbC5NYXAuRW50cnkgZW50cnkgPSBudWxsOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgZW50cnkgPSAoamF2YS51dGlsLk1hcC5FbnRyeSlpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBhdHRyaWJ1dGUgPSAoU3RyaW5nKWVudHJ5LmdldEtleSgpOwotICAgICAgICBTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKWVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICAgIG5pY2VTZXRBdHRyaWJ1dGUodGhlRWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19IC8vVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1dTRExFbGVtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1dTRExFbGVtZW50SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDdhNjBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMRWxlbWVudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRzRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5OYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVsZW1lbnQ8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsI2dldERvY3VtZW50YXRpb25FbGVtZW50IDxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsI2dldEVsZW1lbnQgPGVtPkVsZW1lbnQ8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMRWxlbWVudEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFdTRExFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSA8ZW0+RG9jdW1lbnRhdGlvbiBFbGVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAc2VlICNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgRWxlbWVudCBET0NVTUVOVEFUSU9OX0VMRU1FTlRfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpIDxlbT5Eb2N1bWVudGF0aW9uIEVsZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldERvY3VtZW50YXRpb25FbGVtZW50KCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIEVsZW1lbnQgZG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBET0NVTUVOVEFUSU9OX0VMRU1FTlRfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGVtZW50KCkgPGVtPkVsZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBzZWUgI2dldEVsZW1lbnQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqIEBvcmRlcmVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIEVsZW1lbnQgRUxFTUVOVF9FREVGQVVMVCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVsZW1lbnQoKSA8ZW0+RWxlbWVudDwvZW0+fScgYXR0cmlidXRlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0RWxlbWVudCgpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICogQG9yZGVyZWQKLSAgICovCi0gIHByb3RlY3RlZCBFbGVtZW50IGVsZW1lbnQgPSBFTEVNRU5UX0VERUZBVUxUOwotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGluZ0RPTSA9IGZhbHNlOwotCi0gIHByb3RlY3RlZCBFTGlzdCB3c2RsQ29udGVudHM7Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGVuY2xvc2luZ0RlZmluaXRpb247Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETEVsZW1lbnRJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkKLSAgewotICAgIHJldHVybiBXU0RMUGFja2FnZS5MaXRlcmFscy5XU0RMX0VMRU1FTlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGdldERvY3VtZW50YXRpb25FbGVtZW50KCkKLSAgewotICAgIHJldHVybiBkb2N1bWVudGF0aW9uRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoRWxlbWVudCBuZXdEb2N1bWVudGF0aW9uRWxlbWVudCkKLSAgewotICAgIEVsZW1lbnQgb2xkRG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBkb2N1bWVudGF0aW9uRWxlbWVudDsKLSAgICBkb2N1bWVudGF0aW9uRWxlbWVudCA9IG5ld0RvY3VtZW50YXRpb25FbGVtZW50OwotICAgIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLSAgICAgIGVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKAotICAgICAgICB0aGlzLAotICAgICAgICBOb3RpZmljYXRpb24uU0VULAotICAgICAgICBXU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0RPQ1VNRU5UQVRJT05fRUxFTUVOVCwKLSAgICAgICAgb2xkRG9jdW1lbnRhdGlvbkVsZW1lbnQsCi0gICAgICAgIGRvY3VtZW50YXRpb25FbGVtZW50KSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnRHZW4oRWxlbWVudCBuZXdFbGVtZW50KQotICB7Ci0gICAgRWxlbWVudCBvbGRFbGVtZW50ID0gZWxlbWVudDsKLSAgICBlbGVtZW50ID0gbmV3RWxlbWVudDsKLSAgICBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0gICAgICBlTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0VMRU1FTlQsIG9sZEVsZW1lbnQsIGVsZW1lbnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZCBOT1QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVuY2xvc2luZ0RlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgZW5jbG9zaW5nRGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOgotICAgICAgcmV0dXJuIGdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRUxFTUVOVDoKLSAgICAgIHJldHVybiBnZXRFbGVtZW50KCk7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ6Ci0gICAgICBzZXREb2N1bWVudGF0aW9uRWxlbWVudCgoRWxlbWVudCluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRUxFTUVOVDoKLSAgICAgIHNldEVsZW1lbnQoKEVsZW1lbnQpbmV3VmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19ET0NVTUVOVEFUSU9OX0VMRU1FTlQ6Ci0gICAgICBzZXREb2N1bWVudGF0aW9uRWxlbWVudChET0NVTUVOVEFUSU9OX0VMRU1FTlRfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5XU0RMX0VMRU1FTlRfX0VMRU1FTlQ6Ci0gICAgICBzZXRFbGVtZW50KEVMRU1FTlRfRURFRkFVTFQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLldTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UOgotICAgICAgcmV0dXJuIERPQ1VNRU5UQVRJT05fRUxFTUVOVF9FREVGQVVMVCA9PSBudWxsCi0gICAgICAgID8gZG9jdW1lbnRhdGlvbkVsZW1lbnQgIT0gbnVsbCA6ICFET0NVTUVOVEFUSU9OX0VMRU1FTlRfRURFRkFVTFQuZXF1YWxzKGRvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UX19FTEVNRU5UOgotICAgICAgcmV0dXJuIEVMRU1FTlRfRURFRkFVTFQgPT0gbnVsbCA/IGVsZW1lbnQgIT0gbnVsbCA6ICFFTEVNRU5UX0VERUZBVUxULmVxdWFscyhlbGVtZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIGlmIChlSXNQcm94eSgpKQotICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLSAgICByZXN1bHQuYXBwZW5kKCIgKGRvY3VtZW50YXRpb25FbGVtZW50OiAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRhdGlvbkVsZW1lbnQpOwotICAgIHJlc3VsdC5hcHBlbmQoIiwgZWxlbWVudDogIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXN1bHQuYXBwZW5kKGVsZW1lbnQpOwotICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvLwotICAvLyBSZWNvbmNpbGF0aW9uIG1ldGhvZHM6IERPTSAtPiBNb2RlbAotICAvLwotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgV1NETENvbnRlbnRzRUxpc3QgZXh0ZW5kcyBFQ29udGVudHNFTGlzdAotICB7Ci0gICAgV1NETENvbnRlbnRzRUxpc3QoRU9iamVjdCBlT2JqZWN0LCBFU3RydWN0dXJhbEZlYXR1cmVbXSBlU3RydWN0dXJhbEZlYXR1cmVzKQotICAgIHsKLSAgICAgIHN1cGVyKGVPYmplY3QsIGVTdHJ1Y3R1cmFsRmVhdHVyZXMpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBMaXN0SXRlcmF0b3IgbmV3TGlzdEl0ZXJhdG9yKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IEZlYXR1cmVJdGVyYXRvckltcGwoZU9iamVjdCwgZVN0cnVjdHVyYWxGZWF0dXJlcyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNJbmNsdWRlZChFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlKQotICAgIHsKLSAgICAgIEVSZWZlcmVuY2UgZVJlZmVyZW5jZSA9IChFUmVmZXJlbmNlKWVTdHJ1Y3R1cmFsRmVhdHVyZTsKLSAgICAgIHJldHVybiAhZVJlZmVyZW5jZS5pc1RyYW5zaWVudCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0IGJhc2ljTGlzdCgpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBXU0RMQ29udGVudHNFTGlzdChlT2JqZWN0LCBlU3RydWN0dXJhbEZlYXR1cmVzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSXRlcmF0b3IgYmFzaWNJdGVyYXRvcigpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBGZWF0dXJlSXRlcmF0b3JJbXBsKGVPYmplY3QsIGVTdHJ1Y3R1cmFsRmVhdHVyZXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRmVhdHVyZUl0ZXJhdG9ySW1wbCBleHRlbmRzIEVDb250ZW50c0VMaXN0LkZlYXR1cmVJdGVyYXRvckltcGwKLSAgICB7Ci0gICAgICBwdWJsaWMgRmVhdHVyZUl0ZXJhdG9ySW1wbChFT2JqZWN0IGVPYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyKGVPYmplY3QsIChFU3RydWN0dXJhbEZlYXR1cmVbXSkoKEJhc2ljRUxpc3QpZU9iamVjdC5lQ2xhc3MoKS5nZXRFQWxsUmVmZXJlbmNlcygpKS5kYXRhKCkpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgRmVhdHVyZUl0ZXJhdG9ySW1wbChFT2JqZWN0IGVPYmplY3QsIEVTdHJ1Y3R1cmFsRmVhdHVyZVtdIGVTdHJ1Y3R1cmFsRmVhdHVyZXMpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyKGVPYmplY3QsIGVTdHJ1Y3R1cmFsRmVhdHVyZXMpOwotICAgICAgfQotCi0gICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0luY2x1ZGVkKEVTdHJ1Y3R1cmFsRmVhdHVyZSBlU3RydWN0dXJhbEZlYXR1cmUpCi0gICAgICB7Ci0gICAgICAgIEVSZWZlcmVuY2UgZVJlZmVyZW5jZSA9IChFUmVmZXJlbmNlKWVTdHJ1Y3R1cmFsRmVhdHVyZTsKLSAgICAgICAgcmV0dXJuICFlUmVmZXJlbmNlLmlzVHJhbnNpZW50KCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVMaXN0IGdldFdTRExDb250ZW50cygpCi0gIHsKLSAgICBpZiAod3NkbENvbnRlbnRzID09IG51bGwpCi0gICAgewotICAgICAgd3NkbENvbnRlbnRzID0gbmV3IFdTRExDb250ZW50c0VMaXN0KHRoaXMsIChFU3RydWN0dXJhbEZlYXR1cmVbXSkoKEJhc2ljRUxpc3QpZUNsYXNzKCkuZ2V0RUFsbENvbnRhaW5tZW50cygpKS5kYXRhKCkpOwotICAgIH0KLQotICAgIHJldHVybiB3c2RsQ29udGVudHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50ID09IG51bGwpCi0gICAgewotICAgICAgaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICBzZXRFbGVtZW50R2VuKG51bGwpOwotICAgICAgZm9yIChJdGVyYXRvciBjb250ZW50cyA9IGdldFdTRExDb250ZW50cygpLml0ZXJhdG9yKCk7IGNvbnRlbnRzLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmogPSBjb250ZW50cy5uZXh0KCk7Ci0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBXU0RMRWxlbWVudEltcGwpCi0gICAgICAgIHsKLSAgICAgICAgICBXU0RMRWxlbWVudEltcGwgY29udGVudCA9IChXU0RMRWxlbWVudEltcGwpb2JqOwotICAgICAgICAgIGNvbnRlbnQuc2V0RWxlbWVudChudWxsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0RWxlbWVudEdlbihlbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBlTm90aWZpY2F0aW9uUmVxdWlyZWQoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlTm90aWZ5KE5vdGlmaWNhdGlvbiBtc2cpCi0gIHsKLSAgICBpbnQgZXZlbnRUeXBlID0gbXNnLmdldEV2ZW50VHlwZSgpOwotICAgIE9iamVjdCBmZWF0dXJlID0gbXNnLmdldEZlYXR1cmUoKTsKLSAgICBPYmplY3Qgb2xkVmFsdWUgPSBtc2cuZ2V0T2xkVmFsdWUoKTsKLSAgICBPYmplY3QgbmV3VmFsdWUgPSBtc2cuZ2V0TmV3VmFsdWUoKTsKLQotICAgIGlmIChlQ2xhc3MoKS5nZXRFQWxsUmVmZXJlbmNlcygpLmNvbnRhaW5zKGZlYXR1cmUpKQotICAgIHsKLSAgICAgIEVSZWZlcmVuY2UgZVJlZmVyZW5jZSA9IChFUmVmZXJlbmNlKWZlYXR1cmU7Ci0gICAgICBpZiAoZVJlZmVyZW5jZS5pc0NvbnRhaW5tZW50KCkgJiYgIWVSZWZlcmVuY2UuaXNUcmFuc2llbnQoKSkKLSAgICAgIHsKLSAgICAgICAgc3dpdGNoIChldmVudFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5BREQ6Ci0gICAgICAgICAgewotICAgICAgICAgICAgYWRvcHRDb250ZW50KGVSZWZlcmVuY2UsIG5ld1ZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5BRERfTUFOWToKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIG5ld1ZhbHVlcyA9ICgoQ29sbGVjdGlvbiluZXdWYWx1ZSkuaXRlcmF0b3IoKTsgbmV3VmFsdWVzLmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KW5ld1ZhbHVlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgIGFkb3B0Q29udGVudChlUmVmZXJlbmNlLCB3c2RsRWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uUkVNT1ZFOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBvcnBoYW5Db250ZW50KGVSZWZlcmVuY2UsIC8qKFdTRExFbGVtZW50KSovb2xkVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlJFTU9WRV9NQU5ZOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3Igb2xkVmFsdWVzID0gKChDb2xsZWN0aW9uKW9sZFZhbHVlKS5pdGVyYXRvcigpOyBvbGRWYWx1ZXMuaGFzTmV4dCgpOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRU9iamVjdCBvYmplY3QgPSAoRU9iamVjdClvbGRWYWx1ZXMubmV4dCgpOwotICAgICAgICAgICAgICBvcnBoYW5Db250ZW50KGVSZWZlcmVuY2UsIG9iamVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uTU9WRToKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtb3ZlQ29udGVudChlUmVmZXJlbmNlLCAoV1NETEVsZW1lbnQpbmV3VmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlNFVDoKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5VTlNFVDoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgb3JwaGFuQ29udGVudChlUmVmZXJlbmNlLCBvbGRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYWRvcHRDb250ZW50KGVSZWZlcmVuY2UsIG5ld1ZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLkFERDoKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5BRERfTUFOWToKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5SRU1PVkU6Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uUkVNT1ZFX01BTlk6Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uTU9WRToKLSAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5TRVQ6Ci0gICAgICAgICAgY2FzZSBOb3RpZmljYXRpb24uVU5TRVQ6Ci0gICAgICAgICAgewotICAgICAgICAgICAgY2hhbmdlUmVmZXJlbmNlKGVSZWZlcmVuY2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCkuY29udGFpbnMoZmVhdHVyZSkpCi0gICAgewotICAgICAgRUF0dHJpYnV0ZSBlQXR0cmlidXRlID0gKEVBdHRyaWJ1dGUpZmVhdHVyZTsKLSAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKQotICAgICAgewotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5BREQ6Ci0gICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLkFERF9NQU5ZOgotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5SRU1PVkU6Ci0gICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlJFTU9WRV9NQU5ZOgotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5NT1ZFOgotICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5TRVQ6Ci0gICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlVOU0VUOgotICAgICAgICB7Ci0gICAgICAgICAgY2hhbmdlQXR0cmlidXRlKGVBdHRyaWJ1dGUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHN1cGVyLmVOb3RpZnkobXNnKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIG9ycGhhbkNvbnRlbnQoRVJlZmVyZW5jZSBlUmVmZXJlbmNlLCBPYmplY3Qgb2JqKQotICB7Ci0gICAgaWYgKCFpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcGFyZW50ID0gZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKHBhcmVudCAhPSBudWxsICYmIG9iaiAhPSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIFdTRExFbGVtZW50KQotICAgICAgewotICAgICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClvYmo7Ci0gICAgICAgIEVsZW1lbnQgY29udGVudEVsZW1lbnQgPSB3c2RsRWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChjb250ZW50RWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIG5pY2VSZW1vdmVDaGlsZChjb250ZW50RWxlbWVudC5nZXRQYXJlbnROb2RlKCksIGNvbnRlbnRFbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgOy8vU3lzdGVtLm91dC5wcmludGxuKCJXU0RMRWxlbWVudC5vcnBoYW5Db250ZW50KCksIE9iamVjdCBpczogIiArIG9iaik7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgbmljZVJlbW92ZUNoaWxkKE5vZGUgcGFyZW50LCBOb2RlIGNoaWxkKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgewotICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGN5Y2xpYyBkb20gd3JpdGViYWNrIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGZvcmNlTmljZVJlbW92ZUNoaWxkKHBhcmVudCwgY2hpbGQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZm9yY2VOaWNlUmVtb3ZlQ2hpbGQoTm9kZSBwYXJlbnQsIE5vZGUgY2hpbGQpCi0gIHsKLSAgICB1cGRhdGluZ0RPTSA9IHRydWU7Ci0KLSAgICBib29sZWFuIGRvbmUgPSBmYWxzZTsKLQotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiPyoiKTsKLSAgICBOb2RlIHByZXZpb3VzID0gY2hpbGQuZ2V0UHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgaWYgKHByZXZpb3VzICE9IG51bGwgJiYgcHJldmlvdXMuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkKLSAgICB7Ci0gICAgICBUZXh0IHRleHQgPSAoVGV4dClwcmV2aW91czsKLSAgICAgIFN0cmluZyBkYXRhID0gdGV4dC5nZXREYXRhKCk7Ci0gICAgICBpbnQgaW5kZXggPSBkYXRhLmxhc3RJbmRleE9mKCdcbicpOwotICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgewotICAgICAgICBpZiAoaW5kZXggLSAxID4gMCAmJiBkYXRhLmNoYXJBdChpbmRleCAtIDEpID09ICdccicpCi0gICAgICAgIHsKLSAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiMSoiKTsKLSAgICAgICAgICB0ZXh0LmRlbGV0ZURhdGEoaW5kZXggLSAxLCBkYXRhLmxlbmd0aCgpIC0gaW5kZXggKyAxKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiMioiKTsKLSAgICAgICAgICB0ZXh0LmRlbGV0ZURhdGEoaW5kZXgsIGRhdGEubGVuZ3RoKCkgLSBpbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJObyByZXR1cm4gYmVmb3JlISIpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJObyB0ZXh0IG5vZGUgYmVmb3JlISIpOwotICAgIH0KLQotICAgIGlmICghZG9uZSkKLSAgICB7Ci0gICAgICBmb3IgKE5vZGUgbmV4dCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCk7IG5leHQgIT0gbnVsbDsgbmV4dCA9IG5leHQuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKG5leHQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkKLSAgICAgICAgewotICAgICAgICAgIFRleHQgdGV4dCA9IChUZXh0KW5leHQ7Ci0gICAgICAgICAgU3RyaW5nIGRhdGEgPSB0ZXh0LmdldERhdGEoKTsKLSAgICAgICAgICAvKgotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJ4eCAiICsgZGF0YS5sZW5ndGgoKSArICI6OiAiKTsKLSAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCgpOyArK2kpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKChpbnQpZGF0YS5jaGFyQXQoaSkpKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgICAgICAgKi8KLQotICAgICAgICAgIGludCBpbmRleCA9IGRhdGEuaW5kZXhPZignXG4nKTsKLSAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA8IGRhdGEubGVuZ3RoKCkgJiYgZGF0YS5jaGFyQXQoaW5kZXggKyAxKSA9PSAnXHInKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIjMqIik7Ci0gICAgICAgICAgICAgIHRleHQuZGVsZXRlRGF0YSgwLCBpbmRleCArIDIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiNCoiKTsKLSAgICAgICAgICAgICAgdGV4dC5kZWxldGVEYXRhKDAsIGluZGV4ICsgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gcmV0dXJuIGFmdGVyISIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuZXh0LmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3ZpbmcgZnJvbS0tLS0tLS0tXG4gICAgICIgKyBwYXJlbnQpOwotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3ZpbmctLS0tLS0tLVxuICAgICAiICsgY2hpbGQpOwotICAgIGlmIChwYXJlbnQgIT0gbnVsbCkKLSAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7Ci0KLSAgICB1cGRhdGluZ0RPTSA9IGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgbW92ZUNvbnRlbnQoRVJlZmVyZW5jZSBlUmVmZXJlbmNlLCBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgZG9tIHdyaXRlYmFjayBhdm9pZGVkICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigibW92aW5nICIgKyB4c2RDb25jcmV0ZUNvbXBvbmVudCk7Ci0gICAgTm9kZSBwYXJlbnQgPSBnZXRBZG9wdGlvblBhcmVudE5vZGUoZVJlZmVyZW5jZSk7Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgY2hpbGQgPSB3c2RsRWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICBpZiAoY2hpbGQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBjb250ZW50cyA9IGdldFdTRExDb250ZW50cygpOwotICAgICAgICBpbnQgaW5kZXggPSBjb250ZW50cy5pbmRleE9mKHdzZGxFbGVtZW50KTsKLSAgICAgICAgbmljZVJlbW92ZUNoaWxkKHBhcmVudCwgY2hpbGQpOwotICAgICAgICBuaWNlSW5zZXJ0QmVmb3JlKHBhcmVudCwgY2hpbGQsICsraW5kZXggPT0gY29udGVudHMuc2l6ZSgpID8gbnVsbCA6ICgoV1NETEVsZW1lbnQpY29udGVudHMuZ2V0KGluZGV4KSkuZ2V0RWxlbWVudCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIm1vdmVkICIgKyB4c2RDb25jcmV0ZUNvbXBvbmVudCk7Ci0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkb3B0Q29udGVudChFUmVmZXJlbmNlIGVSZWZlcmVuY2UsIE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpCi0gICAgewotICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpb2JqZWN0OwotICAgICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgICB7Ci0gICAgICAgIGlmICh3c2RsRWxlbWVudC5nZXRFbGVtZW50KCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICgoV1NETEVsZW1lbnRJbXBsKXdzZGxFbGVtZW50KS5lbGVtZW50Q2hhbmdlZCh3c2RsRWxlbWVudC5nZXRFbGVtZW50KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGRFbGVtZW50ID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgICBpZiAoZ2V0RWxlbWVudCgpICE9IG51bGwgJiYgKGNoaWxkRWxlbWVudCA9PSBudWxsIHx8IGNoaWxkRWxlbWVudC5nZXRQYXJlbnROb2RlKCkgPT0gbnVsbCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY2hpbGRFbGVtZW50ICE9IG51bGwgJiYgY2hpbGRFbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSAhPSBnZXRFbGVtZW50KCkuZ2V0T3duZXJEb2N1bWVudCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdzZGxFbGVtZW50LnNldEVsZW1lbnQobnVsbCk7Ci0gICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGhhbmRsZUVsZW1lbnRGb3JBZG9wdChlUmVmZXJlbmNlLCB3c2RsRWxlbWVudCk7Ci0gICAgICAgICAgKChXU0RMRWxlbWVudEltcGwpd3NkbEVsZW1lbnQpLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICAoKFdTRExFbGVtZW50SW1wbCl3c2RsRWxlbWVudCkuYWRvcHRCeShkZWZpbml0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTmFtZXNwYWNlKQotICAgIHsKLSAgICAgIC8vIEFkZCBhIG5hbWVzcGFjZSBhdHRyaWJ1dGUgdG8gdGhlIERlZmluaXRpb25zIGVsZW1lbnQuCi0gICAgICBOYW1lc3BhY2UgbnMgPSAoTmFtZXNwYWNlKW9iamVjdDsKLSAgICAgIE5vZGUgYWRvcHRpb25QYXJlbnQgPSBnZXRBZG9wdGlvblBhcmVudE5vZGUoZVJlZmVyZW5jZSk7IC8vIERlZmluaXRpb25zIG5vZGUKLSAgICAgIC8vIEtCOiBBc3N1bXB0aW9uIC0gVGhlIHByZWZpeCBpcyB1bmlxdWUgaWYgd2UgYXJlIGhlcmUgKGJ5IHRoZSBEZWZpbml0aW9ucyBtb2RlbCkuIAotICAgICAgaWYgKGFkb3B0aW9uUGFyZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgICgoRWxlbWVudClhZG9wdGlvblBhcmVudCkuc2V0QXR0cmlidXRlKCJ4bWxuczoiICsgbnMuZ2V0UHJlZml4KCksIG5zLmdldFVSSSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgTm9kZSBnZXRBZG9wdGlvblBhcmVudE5vZGUoRVJlZmVyZW5jZSBlUmVmZXJlbmNlKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnQoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZUVsZW1lbnRGb3JBZG9wdChFUmVmZXJlbmNlIGVSZWZlcmVuY2UsIFdTRExFbGVtZW50IHdzZGxFbGVtZW50KQotICB7Ci0gICAgLy8gRXN0YWJsaXNoIERPTSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwCi0KLSAgICBOb2RlIGFkb3B0aW9uUGFyZW50ID0gZ2V0QWRvcHRpb25QYXJlbnROb2RlKGVSZWZlcmVuY2UpOwotICAgIEVsZW1lbnQgY2hpbGRFbGVtZW50ID0gd3NkbEVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgIEVsZW1lbnQgcmVmZXJlbmNlZEVsZW1lbnQgPSBudWxsOwotCi0gICAgZm9yIChJdGVyYXRvciBjb250ZW50cyA9IGdldFdTRExDb250ZW50cygpLml0ZXJhdG9yKCk7IGNvbnRlbnRzLmhhc05leHQoKTspCi0gICAgewotICAgICAgaWYgKGNvbnRlbnRzLm5leHQoKSA9PSB3c2RsRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGNvbnRlbnRzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBuZXh0ID0gY29udGVudHMubmV4dCgpOwotICAgICAgICAgIGlmIChuZXh0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVmZXJlbmNlZEVsZW1lbnQgPSAoKFdTRExFbGVtZW50KW5leHQpLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgIHdoaWxlIChyZWZlcmVuY2VkRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOb2RlIHBhcmVudCA9IHJlZmVyZW5jZWRFbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVmZXJlbmNlZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmVudCA9PSBhZG9wdGlvblBhcmVudCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmVudC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVmZXJlbmNlZEVsZW1lbnQgPSAoRWxlbWVudClwYXJlbnQ7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNoaWxkRWxlbWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgICgoV1NETEVsZW1lbnRJbXBsKXdzZGxFbGVtZW50KS5pc1JlY29uY2lsaW5nID0gdHJ1ZTsKLSAgICAgIGNoaWxkRWxlbWVudCA9ICgoV1NETEVsZW1lbnRJbXBsKXdzZGxFbGVtZW50KS5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICAoKFdTRExFbGVtZW50SW1wbCl3c2RsRWxlbWVudCkuaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgICAgaWYgKGNoaWxkRWxlbWVudCA9PSBudWxsKQotICAgICAgewotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigibm90IGNyZWF0ZWQhICIgKyB3c2RsRWxlbWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sZWFuIGlzQXR0YWNoZWQgPSBmYWxzZTsKLSAgICBmb3IgKE5vZGUgcm9vdERvY3VtZW50ID0gY2hpbGRFbGVtZW50OyByb290RG9jdW1lbnQgIT0gbnVsbDsgcm9vdERvY3VtZW50ID0gcm9vdERvY3VtZW50LmdldFBhcmVudE5vZGUoKSkKLSAgICB7Ci0gICAgICBpZiAoV1NETENvbnN0YW50cy5ub2RlVHlwZShyb290RG9jdW1lbnQpID09IFdTRExDb25zdGFudHMuREVGSU5JVElPTikKLSAgICAgIHsKLSAgICAgICAgaXNBdHRhY2hlZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghaXNBdHRhY2hlZCkKLSAgICB7Ci0gICAgICAvLyBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgd2UgbmVlZCB0byBwdXQgaXQgZmlyc3QgaW4gdGhlIGxpc3QKLSAgICAgIAotICAgICAgaWYgKHJlZmVyZW5jZWRFbGVtZW50ID09IG51bGwgJiYgV1NETENvbnN0YW50cy5ub2RlVHlwZShjaGlsZEVsZW1lbnQpID09IFdTRExDb25zdGFudHMuRE9DVU1FTlRBVElPTiAmJiAhZVJlZmVyZW5jZS5pc01hbnkoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSGVyZSB3ZSBmaW5kIHRoZSBmaXJzdCBlbGVtZW50IG5vZGUgaW4gdGhlIGxpc3QsIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgbmVlZHMgdG8gZ28gYmVmb3JlIHRoaXMgZWxlbWVudAotICAgICAgICAKLSAgICAgICAgZm9yIChOb2RlIGNoaWxkID0gYWRvcHRpb25QYXJlbnQuZ2V0Rmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBudWxsOyBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY2hpbGQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZWZlcmVuY2VkRWxlbWVudCA9IChFbGVtZW50KWNoaWxkOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvL3JlZmVyZW5jZWRFbGVtZW50ID0gY29tcHV0ZVRvcExldmVsUmVmQ2hpbGQoYWRvcHRpb25QYXJlbnQsY2hpbGRFbGVtZW50KTsgICAgIAotICAgICAgbmljZUluc2VydEJlZm9yZShhZG9wdGlvblBhcmVudCwgY2hpbGRFbGVtZW50LCByZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgbmljZUluc2VydEJlZm9yZShOb2RlIHBhcmVudCwgTm9kZSBuZXdDaGlsZCwgTm9kZSByZWZlcmVuY2VDaGlsZCkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgZG9tIHdyaXRlYmFjayBhdm9pZGVkICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvcmNlTmljZUluc2VydEJlZm9yZShwYXJlbnQsIG5ld0NoaWxkLCByZWZlcmVuY2VDaGlsZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBmb3JjZU5pY2VJbnNlcnRCZWZvcmUoTm9kZSBwYXJlbnQsIE5vZGUgbmV3Q2hpbGQsIE5vZGUgcmVmZXJlbmNlQ2hpbGQpCi0gIHsKLSAgICB1cGRhdGluZ0RPTSA9IHRydWU7Ci0KLSAgICBMT09QOiBmb3IgKE5vZGUgY2hpbGQgPSByZWZlcmVuY2VDaGlsZCA9PSBudWxsID8gcGFyZW50LmdldExhc3RDaGlsZCgpIDogcmVmZXJlbmNlQ2hpbGQuZ2V0UHJldmlvdXNTaWJsaW5nKCk7IGNoaWxkICE9IG51bGw7IGNoaWxkID0gY2hpbGQuZ2V0UHJldmlvdXNTaWJsaW5nKCkpCi0gICAgewotICAgICAgc3dpdGNoIChjaGlsZC5nZXROb2RlVHlwZSgpKQotICAgICAgewotICAgICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOgotICAgICAgICB7Ci0gICAgICAgICAgVGV4dCB0ZXh0ID0gKFRleHQpY2hpbGQ7Ci0gICAgICAgICAgU3RyaW5nIGRhdGEgPSB0ZXh0LmdldERhdGEoKTsKLQotICAgICAgICAgIC8qCi0gICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoInh4ICIgKyBkYXRhLmxlbmd0aCgpICsgIjo6ICIpOwotICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoKCk7ICsraSkKLSAgICAgICAgICAgewotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiArIEludGVnZXIudG9IZXhTdHJpbmcoKGludClkYXRhLmNoYXJBdChpKSkpOwotICAgICAgICAgICB9Ci0gICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgICAgICAqLwotCi0gICAgICAgICAgaW50IGluZGV4ID0gZGF0YS5sYXN0SW5kZXhPZignXG4nKTsKLSAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJJbiBoZXJlIik7Ci0KLSAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBpbmRlbnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgICBmb3IgKE5vZGUgYW5jZXN0b3IgPSBwYXJlbnQuZ2V0UGFyZW50Tm9kZSgpOyBhbmNlc3RvciAhPSBudWxsICYmIGFuY2VzdG9yLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5ET0NVTUVOVF9OT0RFOyBhbmNlc3RvciA9IGFuY2VzdG9yLmdldFBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW5kZW50LmFwcGVuZCgiICAgICIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggKyAxIDwgZGF0YS5sZW5ndGgoKSAmJiBkYXRhLmNoYXJBdChpbmRleCArIDEpID09ICdccicpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZXh0LnJlcGxhY2VEYXRhKGluZGV4ICsgMSwgZGF0YS5sZW5ndGgoKSAtIGluZGV4IC0gMSwgaW5kZW50ICsgIiAgICAiKTsKLQotICAgICAgICAgICAgLy8gc2V0Q29ycmVjdEluZGVudGF0aW9uKGluZGVudCwgbmV3VGV4dCk7Ci0gICAgICAgICAgICBpZiAocmVmZXJlbmNlQ2hpbGQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW5kZW50LmFwcGVuZCgiICAgICIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVGV4dCBuZXdUZXh0ID0gcGFyZW50LmdldE93bmVyRG9jdW1lbnQoKS5jcmVhdGVUZXh0Tm9kZSgiXG4iICsgaW5kZW50KTsKLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiSW5zZXJ0ZWQuLi4iICsgbmV3VGV4dCk7Ci0gICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld1RleHQsIHJlZmVyZW5jZUNoaWxkKTsKLSAgICAgICAgICAgIHJlZmVyZW5jZUNoaWxkID0gbmV3VGV4dDsKLSAgICAgICAgICAgIGJyZWFrIExPT1A7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKLSAgICAgICAgewotICAgICAgICAgIGJyZWFrIExPT1A7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkluc2VydGVkLi4uIiArIG5ld0NoaWxkKTsKLSAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCByZWZlcmVuY2VDaGlsZCk7Ci0KLSAgICB1cGRhdGluZ0RPTSA9IGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnQgY29tcHV0ZVRvcExldmVsUmVmQ2hpbGQoTm9kZSBwYXJlbnROb2RlLCBOb2RlIG5vZGVUb0FkZCkKLSAgewotICAgIEVsZW1lbnQgcmVzdWx0ID0gbnVsbDsKLSAgICBpbnQgYSA9IGdldFByZWNlZGVuY2Uobm9kZVRvQWRkKTsKLQotICAgIGZvciAoTm9kZSBub2RlID0gcGFyZW50Tm9kZS5nZXRGaXJzdENoaWxkKCk7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICB7Ci0gICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgewotICAgICAgICBpbnQgYiA9IGdldFByZWNlZGVuY2Uobm9kZSk7Ci0gICAgICAgIGlmIChiID49IGEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSAoRWxlbWVudClub2RlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIEhhc2hNYXAgcHJlY2VkZW5jZU1hcCA9IGNyZWF0ZVByZWNlZGVuY2VNYXAoKTsKLQotICBwcml2YXRlIGludCBnZXRQcmVjZWRlbmNlKE5vZGUgbm9kZSkKLSAgewotICAgIGludCByZXN1bHQgPSAyOwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSBub2RlLmdldExvY2FsTmFtZSgpOwotICAgIGlmIChsb2NhbE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJbnRlZ2VyIGludGVnZXIgPSAoSW50ZWdlcilwcmVjZWRlbmNlTWFwLmdldChsb2NhbE5hbWUpOwotICAgICAgaWYgKGludGVnZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gaW50ZWdlci5pbnRWYWx1ZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBIYXNoTWFwIGNyZWF0ZVByZWNlZGVuY2VNYXAoKQotICB7Ci0gICAgSGFzaE1hcCBoYXNoTWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICBoYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDEpKTsKLSAgICBoYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLklNUE9SVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoMykpOwotICAgIGhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuVFlQRVNfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDQpKTsKLSAgICBoYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLk1FU1NBR0VfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDUpKTsKLSAgICBoYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLlBPUlRfVFlQRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoNikpOwotICAgIGhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoNykpOwotICAgIGhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuU0VSVklDRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoOCkpOwotICAgIHJldHVybiBoYXNoTWFwOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRvcHRCeShEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGNvbXBvbmVudHMgPSBnZXRXU0RMQ29udGVudHMoKS5pdGVyYXRvcigpOyBjb21wb25lbnRzLmhhc05leHQoKTspCi0gICAgewotICAgICAgT2JqZWN0IGNoaWxkID0gY29tcG9uZW50cy5uZXh0KCk7Ci0gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudEltcGwpCi0gICAgICB7Ci0gICAgICAgICgoV1NETEVsZW1lbnRJbXBsKWNoaWxkKS5hZG9wdEJ5KGRlZmluaXRpb24pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzVXBkYXRpbmdET00oKQotICB7Ci0gICAgcmV0dXJuIHVwZGF0aW5nRE9NOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZWxlbWVudENoYW5nZWQoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIGlmICghaXNVcGRhdGluZ0RPTSgpKQotICAgIHsKLSAgICAgIGlmICghaXNSZWNvbmNpbGluZykKLSAgICAgIHsKLSAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY2hhbmdlRm9yICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgICBpc1JlY29uY2lsaW5nID0gdHJ1ZTsKLSAgICAgICAgcmVjb25jaWxlKGNoYW5nZWRFbGVtZW50KTsKLQotICAgICAgICBXU0RMRWxlbWVudCB0aGVDb250YWluZXIgPSBnZXRDb250YWluZXIoKTsKLSAgICAgICAgaWYgKHRoZUNvbnRhaW5lciAhPSBudWxsICYmIHRoZUNvbnRhaW5lci5nZXRFbGVtZW50KCkgPT0gY2hhbmdlZEVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAoKFdTRExFbGVtZW50SW1wbCl0aGVDb250YWluZXIpLmVsZW1lbnRDaGFuZ2VkKGNoYW5nZWRFbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICAgICAgdHJhdmVyc2VUb1Jvb3RGb3JQYXRjaGluZygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICA7IC8vU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGN5Y2xpYyBpbnRlcm5hbCByZWNvbmNpbGUgYXZvaWRlZCAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIDsgLy9TeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIERPTSByZWNvbmNpbGUgYXZvaWRlZCAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVVbnJlY29uY2lsZWRFbGVtZW50KEVsZW1lbnQgY2hpbGQsIENvbGxlY3Rpb24gcmVtYWluaW5nTW9kZWxPYmplY3RzKQotICB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZWNvbmNpbGlhdGlvbihDb2xsZWN0aW9uIHJlbWFpbmluZ01vZGVsT2JqZWN0cykKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEBkZXByZWNhdGVkCi0gICAqIFRPRE8uLi4gcmVtb3ZlIHRoaXMgbWV0aG9kIQotICAgKi8KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0TW9kZWxPYmplY3RzKE9iamVjdCBjb21wb25lbnQpCi0gIHsKLSAgICByZXR1cm4gZ2V0V1NETENvbnRlbnRzKCk7Ci0gIH0KLQotICAvKgotICAgcHJvdGVjdGVkIEVsZW1lbnQgZ2V0RWxlbWVudEZvck1vZGVsT2JqZWN0KE9iamVjdCBtb2RlbE9iamVjdCkKLSAgIHsKLSAgIEVsZW1lbnQgcmVzdWx0ID0gbnVsbDsKLSAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICB7Ci0gICByZXN1bHQgPSAoRWxlbWVudCkgbW9kZWxPYmplY3Q7Ci0gICB9Ci0gICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KQotICAgewotICAgcmVzdWx0ID0gKChXU0RMRWxlbWVudCkgbW9kZWxPYmplY3QpLmdldEVsZW1lbnQoKTsKLSAgIH0KLSAgIHJldHVybiByZXN1bHQ7Ci0gICB9Ci0gICAqLwotCi0gIHByaXZhdGUgQ29sbGVjdGlvbiBnZXRDb250ZW50Tm9kZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIENvbGxlY3Rpb24gcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoTm9kZSBjaGlsZCA9IGNoYW5nZWRFbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gbnVsbDsgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKQotICAgIHsKLSAgICAgIGlmIChjaGlsZC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgewotICAgICAgICByZXN1bHQuYWRkKGNoaWxkKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vIFNvbWUgc3ViY2xhc3NlcyB1c2UgdGhpcyBtZXRob2QKLSAgcHJvdGVjdGVkIFFOYW1lIGNyZWF0ZVFOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHByZWZpeGVkTmFtZSkKLSAgewotICAgIC8vIERlbGVnYXRlIHRvIHRoZSBuZXcgZm9ybSB0byBwcmVzZXJ2ZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGluIGNhc2Ugc29tZW9uZQotICAgIC8vIGVsc2UgY2FsbHMgdGhpcyBtZXRob2QuCi0KLSAgICByZXR1cm4gY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgcHJlZml4ZWROYW1lLCBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgUU5hbWUgZnJvbSBhIHByZWZpeGVkIG5hbWUuIFRha2VzIGludG8gYWNjb3VudCBsb2NhbGx5IGRlZmluZWQKLSAgICogbmFtZXNwYWNlIHByZWZpeGVzLgotICAgKiAKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICogICAgICAgICAgdGhlIGVuY2xvc2luZyBkZWZpbml0aW9uLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gcHJlZml4ZWROYW1lCi0gICAqICAgICAgICAgIHRoZSBwcmVmaXhlZCBuYW1lIHRvIGNvbnZlcnQgdG8gUU5hbWUKLSAgICogQHBhcmFtIGVsZW1lbnQKLSAgICogICAgICAgICAgdGhlIGVuY2xvc2luZyBlbGVtZW50LiBNYXkgYmUgbnVsbCBpbiB3aGljaCBjYXNlIHRoZSBwcmVmaXggaXMKLSAgICogICAgICAgICAgb25seSBsb29rZWQgdXAgYW1vbmcgdGhlIG9uZXMgZGVmaW5lZCBhdCB0aGUgZGVmaW5pdGlvbiBsZXZlbC4KLSAgICogQHJldHVybiB0aGUgUU5hbWUgZXF1aXZhbGVudCBmb3IgdGhlIGdpdmVuIHByZWZpeGVkIG5hbWUsIG9yIG51bGwgaWYgYQotICAgKiAgICAgICAgIG5hbWVzcGFjZSBwcmVmaXggY2Fubm90IGJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlIFVSSSBvciBpZgotICAgKiAgICAgICAgIHRoZSBwcmVmaXhlZCBuYW1lIGlzIG51bGwuCi0gICAqLwotICBwcm90ZWN0ZWQgUU5hbWUgY3JlYXRlUU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgcHJlZml4ZWROYW1lLCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgcHJlZml4ZWROYW1lLCBlbGVtZW50LCBmYWxzZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgUU5hbWUgZnJvbSBhIHByZWZpeGVkIG5hbWUuIFRha2VzIGludG8gYWNjb3VudCBsb2NhbGx5IGRlZmluZWQKLSAgICogbmFtZXNwYWNlIHByZWZpeGVzLiBTZWxlY3RpdmVseSBhbGxvd3MgbnVsbCBuYW1lc3BhY2UgVVJJcy4KLSAgICogCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uCi0gICAqICAgICAgICAgIHRoZSBlbmNsb3NpbmcgZGVmaW5pdGlvbi4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHBhcmFtIHByZWZpeGVkTmFtZQotICAgKiAgICAgICAgICB0aGUgcHJlZml4ZWQgbmFtZSB0byBjb252ZXJ0IHRvIFFOYW1lCi0gICAqIEBwYXJhbSBlbGVtZW50Ci0gICAqICAgICAgICAgIHRoZSBlbmNsb3NpbmcgZWxlbWVudC4gTWF5IGJlIG51bGwgaW4gd2hpY2ggY2FzZSB0aGUgcHJlZml4IGlzCi0gICAqICAgICAgICAgIG9ubHkgbG9va2VkIHVwIGFtb25nIHRoZSBvbmVzIGRlZmluZWQgYXQgdGhlIGRlZmluaXRpb24gbGV2ZWwuCi0gICAqIEBwYXJhbSBhbGxvd051bGxOYW1lc3BhY2VVUkkgaWYgdHJ1ZSBhbmQgdGhlIHByZWZpeGVkIG5hbWUgZG9lcyBub3QgaGF2ZSAKLSAgICogICAgICAgICAgYSBwcmVmaXggYSBRTmFtZSBpcyBjb25zdHJ1Y3RlZCBhbmQgcmV0dXJuZWQgdXNpbmcgCi0gICAqICAgICAgICAgIHtAbGluayBYTUxDb25zdGFudHMjTlVMTF9OU19VUkl9IGZvciB0aGUgbmFtZXNwYWNlIFVSSSAgICAgICAgICAKLSAgICogQHJldHVybiB0aGUgUU5hbWUgZXF1aXZhbGVudCBmb3IgdGhlIGdpdmVuIHByZWZpeGVkIG5hbWUsIG9yIG51bGwgaWYgYQotICAgKiAgICAgICAgIG5hbWVzcGFjZSBwcmVmaXggY2Fubm90IGJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlIFVSSSBvciBpZgotICAgKiAgICAgICAgIHRoZSBwcmVmaXhlZCBuYW1lIGlzIG51bGwuIAotICAgKi8KLSAgcHJvdGVjdGVkIFFOYW1lIGNyZWF0ZVFOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHByZWZpeGVkTmFtZSwgRWxlbWVudCBlbGVtZW50LCBib29sZWFuIGFsbG93TnVsbE5hbWVzcGFjZVVSSSkKLSAgewotICAgIFFOYW1lIHFuYW1lID0gbnVsbDsKLSAgICBpZiAocHJlZml4ZWROYW1lICE9IG51bGwpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gcHJlZml4ZWROYW1lLmluZGV4T2YoIjoiKTsgLy8vLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgcHJlZml4ID0gKGluZGV4ID09IC0xKSA/ICIiIDogcHJlZml4ZWROYW1lLnN1YnN0cmluZygwLCBpbmRleCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZShwcmVmaXgpOwotCi0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgJiYgZWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBUcnkgdG8gZmluZCBhIGxvY2FsbHkgZGVmaW5lZCBuYW1lc3BhY2UgcHJlZml4LgotCi0gICAgICAgIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZVVSSUZyb21QcmVmaXgoZWxlbWVudCwgcHJlZml4KTsKLSAgICAgIH0KLQotICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsIHx8IChhbGxvd051bGxOYW1lc3BhY2VVUkkgJiYgcHJlZml4Lmxlbmd0aCgpID09IDApKQotICAgICAgewotICAgICAgICBTdHJpbmcgbG9jYWxQYXJ0ID0gcHJlZml4ZWROYW1lLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgICAgICBxbmFtZSA9IG5ldyBRTmFtZShuYW1lc3BhY2UsIGxvY2FsUGFydCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBxbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBHaXZlbiBhIHByZWZpeCBhbmQgYSBub2RlLCBmaW5kcyB0aGUgbmFtZXNwYWNlIFVSSSBwb2ludGVkIHRvIGJ5IHRoZQotICAgKiBwcmVmaXguIFdhbGtzIHRoZSBlbGVtZW50IGNvbnRhaW5tZW50IGhpZXJhcmNoeSB1bnRpbCBpdCBmaW5kcyBvbmUgb3IgaXQKLSAgICogcmVhY2hlcyB0aGUgZG9jdW1lbnQgcm9vdC4KLSAgICogCi0gICAqIEBwYXJhbSBub2RlCi0gICAqICAgICAgICAgIHRoZSBzdGFydGluZyBub2RlCi0gICAqIEBwYXJhbSBwcmVmaXgKLSAgICogICAgICAgICAgdGhlIHByZWZpeCB0byBmaW5kIGFuIHhtbG5zOnByZWZpeD11cmkgZm9yCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBuYW1lc3BhY2UgVVJJIG9yIG51bGwgaWYgbm90IGZvdW5kCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJRnJvbVByZWZpeChOb2RlIG5vZGUsIFN0cmluZyBwcmVmaXgpCi0gIHsKLSAgICBpZiAobm9kZSA9PSBudWxsIHx8IHByZWZpeCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIE5vZGUgY3VycmVudE5vZGUgPSBub2RlOwotCi0gICAgd2hpbGUgKGN1cnJlbnROb2RlICE9IG51bGwgJiYgY3VycmVudE5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gZ2V0QXR0cmlidXRlTlMoKEVsZW1lbnQpY3VycmVudE5vZGUsIFhTRENvbnN0YW50cy5YTUxOU19VUklfMjAwMCwgcHJlZml4KTsKLQotICAgICAgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmdldFBhcmVudE5vZGUoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZXMgYW4gYXR0cmlidXRlJ3MgdmFsdWUuCi0gICAqIEBwYXJhbSBlbGVtZW50IHRoZSBjb250YWluaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkgdGhlIG5hbWVzcGFjZSBVUkkuCi0gICAqIEBwYXJhbSBsb2NhbFBhcnQgdGhlIGxvY2FsIG5hbWUuCi0gICAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSdzIHZhbHVlIGlmIHByZXNlbnQsIG9yIG51bGwgaWYgbm90LiAKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGVOUyhFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbFBhcnQpCi0gIHsKLSAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBudWxsOwotICAgIEF0dHIgYXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNwYWNlVVJJLCBsb2NhbFBhcnQpOwotCi0gICAgaWYgKGF0dHJpYnV0ZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlLmdldFZhbHVlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOwotICB9Ci0KLSAgLy8KLSAgLy8gRm9yIHJlY29uY2lsaWF0aW9uOiBNb2RlbCAtPiBET00KLSAgLy8KLQotICBwdWJsaWMgdm9pZCB1cGRhdGVFbGVtZW50KGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChkZWVwIHx8IGdldEVsZW1lbnQoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHVwZGF0ZUVsZW1lbnQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNoYW5nZUF0dHJpYnV0ZShudWxsKTsKLSAgICAgIGNoYW5nZVJlZmVyZW5jZShudWxsKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB1cGRhdGVFbGVtZW50KCkKLSAgewotICAgIGlmIChnZXRFbGVtZW50KCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpc1JlY29uY2lsaW5nID0gdHJ1ZTsKLSAgICAgIGNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBjaGFuZ2VBdHRyaWJ1dGUobnVsbCk7Ci0gICAgY2hhbmdlUmVmZXJlbmNlKG51bGwpOwotCi0gICAgT2JqZWN0IG9iaiA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBjb250YWlubWVudHMgPSBlQ2xhc3MoKS5nZXRFQWxsQ29udGFpbm1lbnRzKCkuaXRlcmF0b3IoKTsgY29udGFpbm1lbnRzLmhhc05leHQoKTspCi0gICAgewotICAgICAgRVJlZmVyZW5jZSBlUmVmZXJlbmNlID0gKEVSZWZlcmVuY2UpY29udGFpbm1lbnRzLm5leHQoKTsKLSAgICAgIGlmIChlUmVmZXJlbmNlID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWEoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gVEJEIC0gVGhpcyBpcyBhbiBpbnN0YW5jZSBvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBhbmQKLSAgICAgICAgLy8gZVJlZmVybmNlIGlzIFhTRFNjaGVtYS4gV2hhdCBkbyB3ZSB3YW50IHRvIGRvIGZvciB1cGRhdGU/Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICghZVJlZmVyZW5jZS5pc1RyYW5zaWVudCgpKQotICAgICAgewotICAgICAgICBpZiAoZVJlZmVyZW5jZS5pc01hbnkoKSkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoSXRlcmF0b3Igb2JqZWN0cyA9ICgoQ29sbGVjdGlvbillR2V0KGVSZWZlcmVuY2UpKS5pdGVyYXRvcigpOyBvYmplY3RzLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgb2JqID0gb2JqZWN0cy5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgfHwgb2JqID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIFNraXAgaXQuIFByb2JhYmx5IHRoaXMgaXMgTmFtZXNwYWNlLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClvYmo7Ci0gICAgICAgICAgICAgIC8vaGFuZGxlRWxlbWVudEZvckFkb3B0KGVSZWZlcmVuY2UsIHdzZGxFbGVtZW50KTsKLSAgICAgICAgICAgICAgKChXU0RMRWxlbWVudEltcGwpd3NkbEVsZW1lbnQpLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpZUdldChlUmVmZXJlbmNlKTsKLSAgICAgICAgICBpZiAod3NkbEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL2hhbmRsZUVsZW1lbnRGb3JBZG9wdChlUmVmZXJlbmNlLCAgd3NkbEVsZW1lbnQpOwotICAgICAgICAgICAgKChXU0RMRWxlbWVudEltcGwpd3NkbEVsZW1lbnQpLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gLy8gZW5kIGVsc2UgaWYKLSAgICB9IC8vIGVuZCBmb3IKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoZUF0dHJpYnV0ZSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0V1NETEVsZW1lbnRfRWxlbWVudCgpKQotICAgIHsKLSAgICAgIEVsZW1lbnQgdGhlRWxlbWVudCA9IGdldEVsZW1lbnQoKTsKLSAgICAgIGlmICh0aGVFbGVtZW50ICE9IG51bGwgJiYgIWlzUmVjb25jaWxpbmcpCi0gICAgICB7Ci0gICAgICAgIGZvciAoTm9kZSByb290RG9jdW1lbnQgPSB0aGVFbGVtZW50LmdldFBhcmVudE5vZGUoKTsgcm9vdERvY3VtZW50ICE9IG51bGw7IHJvb3REb2N1bWVudCA9IHJvb3REb2N1bWVudC5nZXRQYXJlbnROb2RlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocm9vdERvY3VtZW50LmdldE5vZGVUeXBlKCkgPT0gTm9kZS5ET0NVTUVOVF9OT0RFKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlzUmVjb25jaWxpbmcgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGdldEVuY2xvc2luZ0RlZmluaXRpb24oKSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZWNvbmNpbGVBdHRyaWJ1dGVzKGdldEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVjb25jaWxlKGdldEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgIGlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgdHJhdmVyc2VUb1Jvb3RGb3JQYXRjaGluZygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB0cmF2ZXJzZVRvUm9vdEZvclBhdGNoaW5nKCkKLSAgewotICAgIGlmICghaXNSZWNvbmNpbGluZykKLSAgICB7Ci0gICAgICBXU0RMRWxlbWVudEltcGwgY29udGFpbmVyID0gKFdTRExFbGVtZW50SW1wbClnZXRDb250YWluZXIoKTsKLSAgICAgIGlmIChjb250YWluZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY29udGFpbmVyLnRyYXZlcnNlVG9Sb290Rm9yUGF0Y2hpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWNvbmNpbGUoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIHJlY29uY2lsZUF0dHJpYnV0ZXMoY2hhbmdlZEVsZW1lbnQpOwotICAgIHJlY29uY2lsZUNvbnRlbnRzKGNoYW5nZWRFbGVtZW50KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlY29uY2lsZUF0dHJpYnV0ZXMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlQ29udGVudHMoRWxlbWVudCBjaGFuZ2VkRWxlbWVudCkKLSAgewotICAgIExpc3QgcmVtYWluaW5nTW9kZWxPYmplY3RzID0gbmV3IEFycmF5TGlzdChnZXRXU0RMQ29udGVudHMoKSk7Ci0KLSAgICBDb2xsZWN0aW9uIGNvbnRlbnROb2RlcyA9IGdldENvbnRlbnROb2RlcyhjaGFuZ2VkRWxlbWVudCk7Ci0KLSAgICBFbGVtZW50IHRoZURvY3VtZW50YXRpb25FbGVtZW50ID0gbnVsbDsKLQotICAgIC8vIGZvciBlYWNoIGFwcGxpY2FibGUgY2hpbGQgbm9kZSBvZiBjaGFuZ2VkRWxlbWVudAotICAgIExPT1A6IGZvciAoSXRlcmF0b3IgaSA9IGNvbnRlbnROb2Rlcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRWxlbWVudCBjaGlsZCA9IChFbGVtZW50KWkubmV4dCgpOwotICAgICAgLy8gU2V0IERvY3VtZW50YXRpb24gZWxlbWVudCBpZiBleGlzdHMKLSAgICAgIGlmIChXU0RMQ29uc3RhbnRzLkRPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcuZXF1YWxzKGNoaWxkLmdldExvY2FsTmFtZSgpKQotICAgICAgICAmJiBXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCksIFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKSkKLSAgICAgIHsKLSAgICAgICAgLy8gYXNzdW1lIHRoZSBmaXJzdCAnZG9jdW1lbnRhdGlvbicgZWxlbWVudCBpcyAndGhlJyBkb2N1bWVudGF0aW9uIGVsZW1lbnQKLSAgICAgICAgLy8gJ3RoZXJlIGNhbiBiZSBvbmx5IG9uZSEnCi0gICAgICAgIGlmICh0aGVEb2N1bWVudGF0aW9uRWxlbWVudCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdGhlRG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBjaGlsZDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gZ28gdGhydSB0aGUgbW9kZWwgb2JqZWN0cyB0byBjb2xsZWN0IG1hdGNoaW5nIG9iamVjdCBmb3IgcmV1c2UKLSAgICAgIGZvciAoSXRlcmF0b3IgY29udGVudHMgPSByZW1haW5pbmdNb2RlbE9iamVjdHMuaXRlcmF0b3IoKTsgY29udGVudHMuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG1vZGVsT2JqZWN0ID0gKE9iamVjdCljb250ZW50cy5uZXh0KCk7Ci0gICAgICAgIGlmICgoKFdTRExFbGVtZW50KW1vZGVsT2JqZWN0KS5nZXRFbGVtZW50KCkgPT0gY2hpbGQpCi0gICAgICAgIHsKLSAgICAgICAgICBjb250ZW50cy5yZW1vdmUoKTsgLy8gcmVtb3ZlcyB0aGUgJ2NoaWxkJyBOb2RlIGZyb20gdGhlIHJlbWFpbmluZ01vZGVsT2JqZWN0cyBsaXN0Ci0gICAgICAgICAgY29udGludWUgTE9PUDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBpZiB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGhhcyBjaGFuZ2VkLi4uIHVwZGF0ZSBpdAotICAgICAgLy8KLSAgICAgIGlmICh0aGVEb2N1bWVudGF0aW9uRWxlbWVudCAhPSBnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKQotICAgICAgewotICAgICAgICBzZXREb2N1bWVudGF0aW9uRWxlbWVudCh0aGVEb2N1bWVudGF0aW9uRWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHdlIGhhdmVuJ3QgZm91bmQgYSBtYXRjaGluZyBtb2RlbCBvYmplY3QgZm9yIHRoZSBOb2RlLCBzZSB3ZSBtYXkgbmVlZCB0bwotICAgICAgLy8gY3JlYXRlIGEgbmV3IG1vZGVsIG9iamVjdAotICAgICAgaGFuZGxlVW5yZWNvbmNpbGVkRWxlbWVudChjaGlsZCwgcmVtYWluaW5nTW9kZWxPYmplY3RzKTsKLSAgICB9Ci0KLSAgICAvLyBub3cgd2UgY2FuIHJlbW92ZSB0aGUgcmVtYWluaW5nIG1vZGVsIG9iamVjdHMKLSAgICBoYW5kbGVSZWNvbmNpbGlhdGlvbihyZW1haW5pbmdNb2RlbE9iamVjdHMpOwotCi0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkKLSAgewotICAgIGlmIChlbmNsb3NpbmdEZWZpbml0aW9uICE9IG51bGwpCi0gICAgICByZXR1cm4gZW5jbG9zaW5nRGVmaW5pdGlvbjsKLQotICAgIC8vIFRCRCAtIFJldmlzaXQKLSAgICAvL0VPYmplY3QgYyA9IGVDb250YWllcigpOyBjICE9IG51bGw7IGMgPSBjLmVDb250YWludGVyKCkpCi0gICAgLy97Ci0KLSAgICBmb3IgKFdTRExFbGVtZW50IGNvbnRhaW5lciA9IHRoaXM7IGNvbnRhaW5lciAhPSBudWxsOyBjb250YWluZXIgPSAoKFdTRExFbGVtZW50SW1wbCljb250YWluZXIpLmdldENvbnRhaW5lcigpKQotICAgIHsKLSAgICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBlbmNsb3NpbmdEZWZpbml0aW9uID0gKERlZmluaXRpb24pY29udGFpbmVyOwotICAgICAgICByZXR1cm4gZW5jbG9zaW5nRGVmaW5pdGlvbjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qCi0gICBwdWJsaWMgRGVmaW5pdGlvbiBnZXRSb290RW5jbG9zaW5nRGVmaW5pdGlvbigpCi0gICB7Ci0gICBpZiAoZW5jbG9zaW5nRGVmaW5pdGlvbiA9PSBudWxsKQotICAgewotICAgUmVzb3VyY2UgcmVzb3VyY2UgPSBlUmVzb3VyY2UoKTsKLSAgIExpc3QgY29udGVudHMgPSByZXNvdXJjZS5nZXRDb250ZW50cygpOwotICAgaWYgKGNvbnRlbnRzLnNpemUoKSA9PSAxIAotICAgJiYgY29udGVudHMuZ2V0KDApIGluc3RhbmNlb2YgRGVmaW5pdGlvbikKLSAgIGVuY2xvc2luZ0RlZmluaXRpb24gPSAoRGVmaW5pdGlvbiljb250ZW50cy5nZXQoMCk7Ci0gICB9IAotICAgcmV0dXJuIGVuY2xvc2luZ0RlZmluaXRpb247Ci0gICB9Ci0gICAqLwotCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRDb250YWluZXIoKQotICB7Ci0gICAgcmV0dXJuIGVDb250YWluZXIoKSBpbnN0YW5jZW9mIFdTRExFbGVtZW50ID8gKFdTRExFbGVtZW50KWVDb250YWluZXIoKSA6IG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBuaWNlU2V0QXR0cmlidXRlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZSwgU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKGlzUmVjb25jaWxpbmcpCi0gICAgewotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIGRvbSBhdHRyaWJ1dGUgd3JpdGViYWNrIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlID09IG51bGwpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlTlMobnVsbCwgYXR0cmlidXRlKSkKLSAgICAgIHsKLSAgICAgICAgdXBkYXRpbmdET00gPSB0cnVlOwotICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwotICAgICAgICB1cGRhdGluZ0RPTSA9IGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVOUyhudWxsLCBhdHRyaWJ1dGUpIHx8ICFlbGVtZW50LmdldEF0dHJpYnV0ZU5TKG51bGwsIGF0dHJpYnV0ZSkuZXF1YWxzKHZhbHVlKSkKLSAgICB7Ci0gICAgICB1cGRhdGluZ0RPTSA9IHRydWU7Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIGF0dHJpYnV0ZSwgdmFsdWUpOwotICAgICAgdXBkYXRpbmdET00gPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIG5pY2VDcmVhdGVOYW1lc3BhY2VBdHRyaWJ1dGUoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgdW5pcXVlIHByZWZpeCBmb3IgIm5hbWVzcGFjZS4iCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBuaWNlU2V0QXR0cmlidXRlVVJJVmFsdWUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0cmlidXRlLCBTdHJpbmcgdXJpTGlzdCkKLSAgewotICAgIGlmIChpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgZG9tIGF0dHJpYnV0ZSB3cml0ZWJhY2sgYXZvaWRlZCAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodXJpTGlzdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHVwZGF0aW5nRE9NID0gdHJ1ZTsKLSAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7Ci0gICAgICB1cGRhdGluZ0RPTSA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih1cmlMaXN0LCAiICIpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZUVsZW1lbnRzKCk7KQotICAgICAgewotICAgICAgICBTdHJpbmcgdXJpID0gc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpOwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVyaTsKLSAgICAgICAgaW50IGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCIjIik7Ci0gICAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChpbmRleCA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlID0gdXJpLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGxvY2FsTmFtZSA9IHVyaS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgcXVhbGlmaWVyID0gWFNEQ29uc3RhbnRzLmxvb2t1cFF1YWxpZmllcihlbGVtZW50LCBuYW1lc3BhY2UpOwotICAgICAgICBpZiAocXVhbGlmaWVyID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBxdWFsaWZpZXIgPSBuaWNlQ3JlYXRlTmFtZXNwYWNlQXR0cmlidXRlKG5hbWVzcGFjZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcU5hbWUgPSBxdWFsaWZpZXIgPT0gbnVsbCB8fCBxdWFsaWZpZXIubGVuZ3RoKCkgPT0gMCA/IGxvY2FsTmFtZSA6IHF1YWxpZmllciArICI6IiArIGxvY2FsTmFtZTsKLQotICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgIHZhbHVlLmFwcGVuZCgnICcpOwotICAgICAgICB9Ci0gICAgICAgIHZhbHVlLmFwcGVuZChxTmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVOUyhudWxsLCBhdHRyaWJ1dGUpIHx8ICFlbGVtZW50LmdldEF0dHJpYnV0ZU5TKG51bGwsIGF0dHJpYnV0ZSkuZXF1YWxzKHZhbHVlLnRvU3RyaW5nKCkpKQotICAgICAgewotICAgICAgICB1cGRhdGluZ0RPTSA9IHRydWU7Ci0gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgYXR0cmlidXRlLCB2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgdXBkYXRpbmdET00gPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjaGFuZ2VSZWZlcmVuY2UoRVJlZmVyZW5jZSBlUmVmZXJlbmNlKQotICB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkgLy8gU2hvdWxkIEkgbWFrZSB0aGlzIGFic3RyYWN0PwotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgRWxlbWVudCBjcmVhdGVFbGVtZW50KGludCBub2RlVHlwZSkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBEZWZpbml0aW9uKQotICAgICAgZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKXRoaXM7Ci0gICAgZWxzZQotICAgICAgZGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQotICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIERvY3VtZW50IGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudCA9PSBudWxsKQotICAgICAgZG9jdW1lbnQgPSAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnVwZGF0ZURvY3VtZW50KCk7Ci0KLSAgICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXNwYWNlIHByZWZpeCBmb3IgdGhlIFdTREwgbmFtZXNwYWNlCi0gICAgU3RyaW5nIHdzZGxOYW1lc3BhY2UgPSBXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSTsKLSAgICBTdHJpbmcgcXVhbGlmaWVyID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgod3NkbE5hbWVzcGFjZSk7Ci0KLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMod3NkbE5hbWVzcGFjZSwgKHF1YWxpZmllciA9PSBudWxsID8gIiIgOiBxdWFsaWZpZXIgKyAiOiIpCi0gICAgICArIFdTRExDb25zdGFudHMuZ2V0RWxlbWVudFRhZyhub2RlVHlwZSkpOwotCi0gICAgaWYgKGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpID09IG51bGwpCi0gICAgICBkb2N1bWVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTsKLQotICAgIGlmIChnZXREb2N1bWVudGF0aW9uRWxlbWVudCgpICE9IG51bGwpCi0gICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmltcG9ydE5vZGUoZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgdHJ1ZSkpOwotCi0gICAgcmV0dXJuIG5ld0VsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCkKLSAgewotICAgIGlmIChkZWVwKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgY29udGVudHMgPSBnZXRXU0RMQ29udGVudHMoKS5pdGVyYXRvcigpOyBjb250ZW50cy5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3QgY29udGVudCA9IGNvbnRlbnRzLm5leHQoKTsKLSAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudEltcGwpCi0gICAgICAgIHsKLSAgICAgICAgICBXU0RMRWxlbWVudEltcGwgZWxlbWVudCA9IChXU0RMRWxlbWVudEltcGwpY29udGVudDsKLSAgICAgICAgICBlbGVtZW50LmlzUmVjb25jaWxpbmcgPSB0cnVlOwotICAgICAgICAgIGVsZW1lbnQucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLSAgICAgICAgICBlbGVtZW50LmlzUmVjb25jaWxpbmcgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRCZXN0V1NETEVsZW1lbnQoTGlzdCBlbGVtZW50UGF0aCkKLSAgewotICAgIFdTRExFbGVtZW50IHJlc3VsdCA9IHRoaXM7Ci0gICAgZm9yIChJdGVyYXRvciBjb21wb25lbnRzID0gZ2V0V1NETENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgY29tcG9uZW50cy5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBjb21wb25lbnRzLm5leHQoKTsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudEltcGwpCi0gICAgICB7Ci0gICAgICAgIFdTRExFbGVtZW50SW1wbCBjaGlsZFdTRExFbGVtZW50ID0gKFdTRExFbGVtZW50SW1wbClvYmplY3Q7Ci0KLSAgICAgICAgaWYgKGVsZW1lbnRQYXRoLmNvbnRhaW5zKGNoaWxkV1NETEVsZW1lbnQuZ2V0RWxlbWVudCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGNoaWxkV1NETEVsZW1lbnQ7Ci0gICAgICAgICAgV1NETEVsZW1lbnQgYmV0dGVyV1NETEVsZW1lbnQgPSBjaGlsZFdTRExFbGVtZW50LmdldEJlc3RXU0RMRWxlbWVudChlbGVtZW50UGF0aCk7Ci0gICAgICAgICAgaWYgKGJldHRlcldTRExFbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gYmV0dGVyV1NETEVsZW1lbnQ7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKCFjb25zaWRlckFsbENvbnRhaW5zRm9yQmVzdFdTRExFbGVtZW50KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGNvbnNpZGVyQWxsQ29udGFpbnNGb3JCZXN0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZWxlbWVudEF0dHJpYnV0ZXNDaGFuZ2VkKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBpZiAoIWlzVXBkYXRpbmdET00oKSkKLSAgICB7Ci0gICAgICBpZiAoIWlzUmVjb25jaWxpbmcpCi0gICAgICB7Ci0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjaGFuZ2VGb3IgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0KLSAgICAgICAgaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICAgIHJlY29uY2lsZUF0dHJpYnV0ZXMoY2hhbmdlZEVsZW1lbnQpOwotCi0gICAgICAgIFdTRExFbGVtZW50SW1wbCB0aGVDb250YWluZXIgPSAoV1NETEVsZW1lbnRJbXBsKWdldENvbnRhaW5lcigpOwotICAgICAgICBpZiAodGhlQ29udGFpbmVyICE9IG51bGwgJiYgdGhlQ29udGFpbmVyLmdldEVsZW1lbnQoKSA9PSBjaGFuZ2VkRWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgIHRoZUNvbnRhaW5lci5lbGVtZW50QXR0cmlidXRlc0NoYW5nZWQoY2hhbmdlZEVsZW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaXNSZWNvbmNpbGluZyA9IGZhbHNlOwotICAgICAgICB0cmF2ZXJzZVRvUm9vdEZvclBhdGNoaW5nKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgaW50ZXJuYWwgcmVjb25jaWxlIGF2b2lkZWQgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogY3ljbGljIERPTSByZWNvbmNpbGUgYXZvaWRlZCAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlbGVtZW50Q29udGVudHNDaGFuZ2VkKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBpZiAoIWlzVXBkYXRpbmdET00oKSkKLSAgICB7Ci0gICAgICBpZiAoIWlzUmVjb25jaWxpbmcpCi0gICAgICB7Ci0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjaGFuZ2VGb3IgIiArIGVDbGFzcygpLmdldE5hbWUoKSk7Ci0KLSAgICAgICAgaXNSZWNvbmNpbGluZyA9IHRydWU7Ci0gICAgICAgIHJlY29uY2lsZUNvbnRlbnRzKGNoYW5nZWRFbGVtZW50KTsKLQotICAgICAgICBXU0RMRWxlbWVudEltcGwgdGhlQ29udGFpbmVyID0gKFdTRExFbGVtZW50SW1wbClnZXRDb250YWluZXIoKTsKLSAgICAgICAgaWYgKHRoZUNvbnRhaW5lciAhPSBudWxsICYmIHRoZUNvbnRhaW5lci5nZXRFbGVtZW50KCkgPT0gY2hhbmdlZEVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICB0aGVDb250YWluZXIuZWxlbWVudENvbnRlbnRzQ2hhbmdlZChjaGFuZ2VkRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpc1JlY29uY2lsaW5nID0gZmFsc2U7Ci0gICAgICAgIHRyYXZlcnNlVG9Sb290Rm9yUGF0Y2hpbmcoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGN5Y2xpYyBpbnRlcm5hbCByZWNvbmNpbGUgYXZvaWRlZCAiICsgZUNsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjeWNsaWMgRE9NIHJlY29uY2lsZSBhdm9pZGVkICIgKyBlQ2xhc3MoKS5nZXROYW1lKCkpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHVwZGF0ZVByZWZpeChOb2RlIG5vZGUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBvbGRQcmVmaXgsIFN0cmluZyBuZXdQcmVmaXgpCi0gIHsKLSAgICBpZiAoKG5hbWVzcGFjZSA9PSBudWxsID8gbm9kZS5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsIDogbmFtZXNwYWNlLmVxdWFscyhub2RlLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICYmIChvbGRQcmVmaXggPT0gbnVsbCA/IG5vZGUuZ2V0UHJlZml4KCkgPT0gbnVsbCA6IG9sZFByZWZpeC5lcXVhbHMobm9kZS5nZXRQcmVmaXgoKSkpKQotICAgIHsKLSAgICAgIG5vZGUuc2V0UHJlZml4KG5ld1ByZWZpeCk7Ci0gICAgfQotCi0gICAgZm9yIChOb2RlIGNoaWxkID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7IGNoaWxkICE9IG51bGw7IGNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICB7Ci0gICAgICB1cGRhdGVQcmVmaXgoY2hpbGQsIG5hbWVzcGFjZSwgb2xkUHJlZml4LCBuZXdQcmVmaXgpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0TmFtZXNwYWNlKEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gZWxlbWVudC5nZXRUYWdOYW1lKCk7Ci0gICAgaW50IGluZGV4ID0gbmFtZS5pbmRleE9mKCI6Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgbnNQcmVmaXggID0gbnVsbDsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgewotICAgICAgbnNQcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBuc1ByZWZpeCA9ICJ4bWxucyI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gbnVsbDsKLQotICAgIC8vIEZpcnN0IHRyeSB0byBsb2NhdGUgdGhlIG5hbWVzcGFjZSBVUkkgaW4gdGhlIGRlZmluaXRpb24ncyBwcmVmaXggdG8gbmFtZXNwYWNlIG1hcC4KLSAgICAvLyBUaGlzIHdpbGwgcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBleGlzdGluZyBjbGllbnRzLgotICAgIAotICAgIERlZmluaXRpb24gZW5jbG9zaW5nRGVmaW5pdGlvbiA9IGdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBpZiAoZW5jbG9zaW5nRGVmaW5pdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZVVSSSA9IGVuY2xvc2luZ0RlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zUHJlZml4KTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkaWQgbm90IGZpbmQgaXQgYXQgdGhlIHRvcCBsZXZlbCwgdHJ5IHRvIGZpbmQgYSBsb2NhbGx5IGRlZmluZWQgbmFtZXNwYWNlIHByZWZpeC4KLQotICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2VVUkkgPSBnZXROYW1lc3BhY2VVUklGcm9tUHJlZml4KGVsZW1lbnQsIG5zUHJlZml4KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRMb2NhbE5hbWUoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBlbGVtZW50LmdldFRhZ05hbWUoKTsKLSAgICBpbnQgaW5kZXggPSBuYW1lLmluZGV4T2YoIjoiKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICByZXR1cm4gbmFtZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgfQotCi19IC8vV1NETEVsZW1lbnRJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvV1NETEZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvV1NETEZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNzc1NTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL1dTRExGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5FeHRlbnNpYmlsaXR5RWxlbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFdTRExGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFdTRExGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExGYWN0b3J5IGluaXQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgV1NETEZhY3RvcnkgdGhlV1NETEZhY3RvcnkgPSAoV1NETEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3NkbC8yMDAzL1dTREwiKTsgLy8kTk9OLU5MUy0xJCAKLSAgICAgIGlmICh0aGVXU0RMRmFjdG9yeSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gdGhlV1NETEZhY3Rvcnk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIEVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgV1NETEZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKQotICB7Ci0gICAgc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEU6Ci0gICAgICByZXR1cm4gY3JlYXRlUG9ydFR5cGUoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuT1BFUkFUSU9OOgotICAgICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbigpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFOgotICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVDoKLSAgICAgIHJldHVybiBjcmVhdGVQYXJ0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkc6Ci0gICAgICByZXR1cm4gY3JlYXRlQmluZGluZygpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTjoKLSAgICAgIHJldHVybiBjcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0U6Ci0gICAgICByZXR1cm4gY3JlYXRlU2VydmljZSgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUOgotICAgICAgcmV0dXJuIGNyZWF0ZVBvcnQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UOgotICAgICAgcmV0dXJuIGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRFRklOSVRJT046Ci0gICAgICByZXR1cm4gY3JlYXRlRGVmaW5pdGlvbigpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTVBPUlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlSW1wb3J0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLklOUFVUOgotICAgICAgcmV0dXJuIGNyZWF0ZUlucHV0KCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9VVFBVVDoKLSAgICAgIHJldHVybiBjcmVhdGVPdXRwdXQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRkFVTFQ6Ci0gICAgICByZXR1cm4gY3JlYXRlRmF1bHQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19JTlBVVDoKLSAgICAgIHJldHVybiBjcmVhdGVCaW5kaW5nSW5wdXQoKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuQklORElOR19PVVRQVVQ6Ci0gICAgICByZXR1cm4gY3JlYXRlQmluZGluZ091dHB1dCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX0ZBVUxUOgotICAgICAgcmV0dXJuIGNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5OQU1FU1BBQ0U6Ci0gICAgICByZXR1cm4gY3JlYXRlTmFtZXNwYWNlKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlRZUEVTOgotICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVzKCk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UOgotICAgICAgcmV0dXJuIGNyZWF0ZVVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDoKLSAgICAgIHJldHVybiBjcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjcmVhdGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlFOQU1FOgotICAgICAgcmV0dXJuIGNyZWF0ZVFOYW1lRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9UWVBFOgotICAgICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvblR5cGVGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRE9NX0VMRU1FTlQ6Ci0gICAgICByZXR1cm4gY3JlYXRlRE9NRWxlbWVudEZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5XU0RMX0VYQ0VQVElPTjoKLSAgICAgIHJldHVybiBjcmVhdGVXU0RMRXhjZXB0aW9uRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRPTV9ET0NVTUVOVDoKLSAgICAgIHJldHVybiBjcmVhdGVET01Eb2N1bWVudEZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlFOQU1FOgotICAgICAgcmV0dXJuIGNvbnZlcnRRTmFtZVRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9QRVJBVElPTl9UWVBFOgotICAgICAgcmV0dXJuIGNvbnZlcnRPcGVyYXRpb25UeXBlVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRE9NX0VMRU1FTlQ6Ci0gICAgICByZXR1cm4gY29udmVydERPTUVsZW1lbnRUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICAgICAgY2FzZSBXU0RMUGFja2FnZS5XU0RMX0VYQ0VQVElPTjoKLSAgICAgIHJldHVybiBjb252ZXJ0V1NETEV4Y2VwdGlvblRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkRPTV9ET0NVTUVOVDoKLSAgICAgIHJldHVybiBjb252ZXJ0RE9NRG9jdW1lbnRUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlIGNyZWF0ZVBvcnRUeXBlKCkKLSAgewotICAgIFBvcnRUeXBlSW1wbCBwb3J0VHlwZSA9IG5ldyBQb3J0VHlwZUltcGwoKTsKLSAgICByZXR1cm4gcG9ydFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb24gY3JlYXRlT3BlcmF0aW9uKCkKLSAgewotICAgIE9wZXJhdGlvbkltcGwgb3BlcmF0aW9uID0gbmV3IE9wZXJhdGlvbkltcGwoKTsKLSAgICByZXR1cm4gb3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZSBjcmVhdGVNZXNzYWdlKCkKLSAgewotICAgIE1lc3NhZ2VJbXBsIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZUltcGwoKTsKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFBhcnQgY3JlYXRlUGFydCgpCi0gIHsKLSAgICBQYXJ0SW1wbCBwYXJ0ID0gbmV3IFBhcnRJbXBsKCk7Ci0gICAgcmV0dXJuIHBhcnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nIGNyZWF0ZUJpbmRpbmcoKQotICB7Ci0gICAgQmluZGluZ0ltcGwgYmluZGluZyA9IG5ldyBCaW5kaW5nSW1wbCgpOwotICAgIHJldHVybiBiaW5kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBjcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb25JbXBsIGJpbmRpbmdPcGVyYXRpb24gPSBuZXcgQmluZGluZ09wZXJhdGlvbkltcGwoKTsKLSAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFNlcnZpY2UgY3JlYXRlU2VydmljZSgpCi0gIHsKLSAgICBTZXJ2aWNlSW1wbCBzZXJ2aWNlID0gbmV3IFNlcnZpY2VJbXBsKCk7Ci0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBQb3J0IGNyZWF0ZVBvcnQoKQotICB7Ci0gICAgUG9ydEltcGwgcG9ydCA9IG5ldyBQb3J0SW1wbCgpOwotICAgIHJldHVybiBwb3J0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGV4dGVuc2liaWxpdHlFbGVtZW50ID0gbmV3IEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCgpOwotICAgIHJldHVybiBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbigpCi0gIHsKLSAgICBEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25JbXBsKCk7Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBJbXBvcnQgY3JlYXRlSW1wb3J0KCkKLSAgewotICAgIEltcG9ydEltcGwgaW1wb3J0XyA9IG5ldyBJbXBvcnRJbXBsKCk7Ci0gICAgcmV0dXJuIGltcG9ydF87Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBJbnB1dCBjcmVhdGVJbnB1dCgpCi0gIHsKLSAgICBJbnB1dEltcGwgaW5wdXQgPSBuZXcgSW5wdXRJbXBsKCk7Ci0gICAgcmV0dXJuIGlucHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT3V0cHV0IGNyZWF0ZU91dHB1dCgpCi0gIHsKLSAgICBPdXRwdXRJbXBsIG91dHB1dCA9IG5ldyBPdXRwdXRJbXBsKCk7Ci0gICAgcmV0dXJuIG91dHB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEZhdWx0IGNyZWF0ZUZhdWx0KCkKLSAgewotICAgIEZhdWx0SW1wbCBmYXVsdCA9IG5ldyBGYXVsdEltcGwoKTsKLSAgICByZXR1cm4gZmF1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nSW5wdXQgY3JlYXRlQmluZGluZ0lucHV0KCkKLSAgewotICAgIEJpbmRpbmdJbnB1dEltcGwgYmluZGluZ0lucHV0ID0gbmV3IEJpbmRpbmdJbnB1dEltcGwoKTsKLSAgICByZXR1cm4gYmluZGluZ0lucHV0OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQmluZGluZ091dHB1dCBjcmVhdGVCaW5kaW5nT3V0cHV0KCkKLSAgewotICAgIEJpbmRpbmdPdXRwdXRJbXBsIGJpbmRpbmdPdXRwdXQgPSBuZXcgQmluZGluZ091dHB1dEltcGwoKTsKLSAgICByZXR1cm4gYmluZGluZ091dHB1dDsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEJpbmRpbmdGYXVsdCBjcmVhdGVCaW5kaW5nRmF1bHQoKQotICB7Ci0gICAgQmluZGluZ0ZhdWx0SW1wbCBiaW5kaW5nRmF1bHQgPSBuZXcgQmluZGluZ0ZhdWx0SW1wbCgpOwotICAgIHJldHVybiBiaW5kaW5nRmF1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOYW1lc3BhY2UgY3JlYXRlTmFtZXNwYWNlKCkKLSAgewotICAgIE5hbWVzcGFjZUltcGwgbmFtZXNwYWNlID0gbmV3IE5hbWVzcGFjZUltcGwoKTsKLSAgICByZXR1cm4gbmFtZXNwYWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgVHlwZXMgY3JlYXRlVHlwZXMoKQotICB7Ci0gICAgVHlwZXNJbXBsIHR5cGVzID0gbmV3IFR5cGVzSW1wbCgpOwotICAgIHJldHVybiB0eXBlczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCB1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBuZXcgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCgpOwotICAgIHJldHVybiB1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBuZXcgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKCk7Ci0gICAgcmV0dXJuIHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUU5hbWUgY3JlYXRlUU5hbWVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gKFFOYW1lKXN1cGVyLmNyZWF0ZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGNvbnZlcnRRTmFtZVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLmNvbnZlcnRUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIE9wZXJhdGlvblR5cGUgY3JlYXRlT3BlcmF0aW9uVHlwZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkKLSAgewotICAgIGlmICgiUkVRVUVTVF9SRVNQT05TRSIuZXF1YWxzKGluaXRpYWxWYWx1ZSkpCi0gICAgewotICAgICAgcmV0dXJuIE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoIk9ORV9XQVkiLmVxdWFscyhpbml0aWFsVmFsdWUpKQotICAgIHsKLSAgICAgIHJldHVybiBPcGVyYXRpb25UeXBlLk9ORV9XQVk7Ci0gICAgfQotICAgIGVsc2UgaWYgKCJOT1RJRklDQVRJT04iLmVxdWFscyhpbml0aWFsVmFsdWUpKQotICAgIHsKLSAgICAgIHJldHVybiBPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoIlNPTElDSVRfUkVTUE9OU0UiLmVxdWFscyhpbml0aWFsVmFsdWUpKQotICAgIHsKLSAgICAgIHJldHVybiBPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0U7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGNvbnZlcnRPcGVyYXRpb25UeXBlVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gc3VwZXIuY29udmVydFRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGNyZWF0ZURPTUVsZW1lbnRGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gKEVsZW1lbnQpc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgY29udmVydERPTUVsZW1lbnRUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkKLSAgewotICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExFeGNlcHRpb24gY3JlYXRlV1NETEV4Y2VwdGlvbkZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkKLSAgewotICAgIHJldHVybiAoV1NETEV4Y2VwdGlvbilzdXBlci5jcmVhdGVGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBjb252ZXJ0V1NETEV4Y2VwdGlvblRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLmNvbnZlcnRUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgY3JlYXRlRE9NRG9jdW1lbnRGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpCi0gIHsKLSAgICByZXR1cm4gKERvY3VtZW50KXN1cGVyLmNyZWF0ZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGNvbnZlcnRET01Eb2N1bWVudFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLmNvbnZlcnRUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgV1NETFBhY2thZ2UgZ2V0V1NETFBhY2thZ2UoKQotICB7Ci0gICAgcmV0dXJuIChXU0RMUGFja2FnZSlnZXRFUGFja2FnZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZGVwcmVjYXRlZAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExQYWNrYWdlIGdldFBhY2thZ2UoKQotICB7Ci0gICAgcmV0dXJuIFdTRExQYWNrYWdlLmVJTlNUQU5DRTsKLSAgfQotCi0gIC8vCi0gIC8vCi0gIC8vCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudCBjcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShuYW1lc3BhY2UpOwotICAgIGlmIChmYWN0b3J5ICE9IG51bGwpCi0gICAgICByZXR1cm4gZmFjdG9yeS5jcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudChuYW1lc3BhY2UsIGxvY2FsTmFtZSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICAvLyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLSAgICAgIAotICAgICAgUU5hbWUgZWxlbWVudFR5cGUgPSBuZXcgUU5hbWUobmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RWxlbWVudFR5cGUoZWxlbWVudFR5cGUpOwotICAgICAgcmV0dXJuIGV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgIH0KLSAgfQotCi0gIC8qCi0gICBwdWJsaWMgdm9pZCBzZXRBbHdheXNVc2VVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoYm9vbGVhbiB2YWx1ZSkKLSAgIHsKLSAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVwcmVjYXRlZDogV1NETEZhY3RvcnlJbXBsLnNldFVzZUV4dGVuc2lvbkZhY3RvcmllcyIpOwotICAgfQotICAgKi8KLX0gLy9XU0RMRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMUGFja2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9XU0RMUGFja2FnZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUyZjFiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvV1NETFBhY2thZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYWNrYWdlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBXU0RMUGFja2FnZQotewotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHdzZGxFbGVtZW50RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHBvcnRUeXBlRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIG9wZXJhdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBtZXNzYWdlRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHBhcnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgYmluZGluZ0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBiaW5kaW5nT3BlcmF0aW9uRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIHNlcnZpY2VFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgcG9ydEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBkZWZpbml0aW9uRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGltcG9ydEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBleHRlbnNpYmxlRWxlbWVudEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpbnB1dEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBvdXRwdXRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgZmF1bHRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgYmluZGluZ0lucHV0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGJpbmRpbmdPdXRwdXRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgYmluZGluZ0ZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIG5hbWVzcGFjZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpUG9ydFR5cGVFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaU9wZXJhdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpSW5wdXRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaU91dHB1dEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpRmF1bHRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaU1lc3NhZ2VFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaVBhcnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaVNlcnZpY2VFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaVBvcnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUJpbmRpbmdFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUJpbmRpbmdJbnB1dEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpQmluZGluZ091dHB1dEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpQmluZGluZ0ZhdWx0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpRGVmaW5pdGlvbkVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpSW1wb3J0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlMaXN0RUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlNYXBFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaXVybEVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyBpRXh0ZW5zaW9uUmVnaXN0cnlFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgdHlwZXNFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgaUl0ZXJhdG9yRUNsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRUNsYXNzIGlUeXBlc0VDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVDbGFzcyB1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFQ2xhc3MgbWVzc2FnZVJlZmVyZW5jZUVDbGFzcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVEYXRhVHlwZSBxTmFtZUVEYXRhVHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVEYXRhVHlwZSBvcGVyYXRpb25UeXBlRURhdGFUeXBlID0gbnVsbDsKLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgRURhdGFUeXBlIGRvbUVsZW1lbnRFRGF0YVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJpdmF0ZSBFRGF0YVR5cGUgd3NkbEV4Y2VwdGlvbkVEYXRhVHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIEVEYXRhVHlwZSBkb21Eb2N1bWVudEVEYXRhVHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKLSAgICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKLSAgICogcGFja2FnZSBVUkkgdmFsdWUuCi0gICAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKLSAgICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKLSAgICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKLSAgICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZSNlTlNfVVJJCi0gICAqIEBzZWUgI2luaXQoKQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIFdTRExQYWNrYWdlSW1wbCgpCi0gIHsKLSAgICBzdXBlcihlTlNfVVJJLCBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcwotICAgKiBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4gIFNpbXBsZQotICAgKiBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGFsbAotICAgKiBkZXBlbmRlbnQgcGFja2FnZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBUaGlzIG1ldGhvZCBkcml2ZXMKLSAgICogaW5pdGlhbGl6YXRpb24gZm9yIGludGVyZGVwZW5kZW50IHBhY2thZ2VzIGRpcmVjdGx5LCBpbiBwYXJhbGxlbAotICAgKiB3aXRoIHRoaXMgcGFja2FnZSwgaXRzZWxmLgotICAgKiA8cD5PZiB0aGlzIHBhY2thZ2UgYW5kIGl0cyBpbnRlcmRlcGVuZGVuY2llcywgYWxsIHBhY2thZ2VzIHdoaWNoCi0gICAqIGhhdmUgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlaXIgVVJJIHZhbHVlcyBhcmUgZmlyc3QgY3JlYXRlZAotICAgKiBhbmQgcmVnaXN0ZXJlZC4gIFRoZSBwYWNrYWdlcyBhcmUgdGhlbiBpbml0aWFsaXplZCBpbiB0d28gc3RlcHM6Ci0gICAqIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgYWxsIG9mIHRoZSBwYWNrYWdlcyBhcmUgY3JlYXRlZCBiZWZvcmUgYW55Ci0gICAqIGFyZSBpbml0aWFsaXplZCwgc2luY2Ugb25lIHBhY2thZ2UncyBtZXRhLW1vZGVsIG9iamVjdHMgbWF5IHJlZmVyIHRvCi0gICAqIHRob3NlIG9mIGFub3RoZXIuCi0gICAqIDxwPkludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWZmZWN0IGFueSBwYWNrYWdlcyB0aGF0IGhhdmUKLSAgICogYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZU5TX1VSSQotICAgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotICAgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMUGFja2FnZSBpbml0KCkKLSAgewotICAgIGlmIChpc0luaXRlZCkKLSAgICAgIHJldHVybiAoV1NETFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoV1NETFBhY2thZ2UuZU5TX1VSSSk7Ci0KLSAgICAvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCi0gICAgV1NETFBhY2thZ2VJbXBsIHRoZVdTRExQYWNrYWdlID0gKFdTRExQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgaW5zdGFuY2VvZiBXU0RMUGFja2FnZUltcGwKLSAgICAgID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgOiBuZXcgV1NETFBhY2thZ2VJbXBsKCkpOwotCi0gICAgaXNJbml0ZWQgPSB0cnVlOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCi0gICAgWFNEUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7Ci0KLSAgICAvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cwotICAgIHRoZVdTRExQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQotICAgIHRoZVdTRExQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotICAgIC8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKLSAgICB0aGVXU0RMUGFja2FnZS5mcmVlemUoKTsKLQotICAgIHJldHVybiB0aGVXU0RMUGFja2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gd3NkbEVsZW1lbnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFdTRExFbGVtZW50X0RvY3VtZW50YXRpb25FbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSl3c2RsRWxlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRXU0RMRWxlbWVudF9FbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSl3c2RsRWxlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBwb3J0VHlwZUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9ydFR5cGVfUU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXBvcnRUeXBlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFBvcnRUeXBlX1VuZGVmaW5lZCgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpcG9ydFR5cGVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0UG9ydFR5cGVfRU9wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXBvcnRUeXBlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0T3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb25FQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldE9wZXJhdGlvbl9TdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpb3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldE9wZXJhdGlvbl9OYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlvcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0T3BlcmF0aW9uX1VuZGVmaW5lZCgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpb3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldE9wZXJhdGlvbl9FSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW9wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRPcGVyYXRpb25fRU91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2Upb3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldE9wZXJhdGlvbl9FRmF1bHRzKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlvcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0T3BlcmF0aW9uX0VQYXJhbWV0ZXJPcmRlcmluZygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2Upb3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZV9RTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpbWVzc2FnZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNZXNzYWdlX1VuZGVmaW5lZCgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpbWVzc2FnZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRNZXNzYWdlX0VQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpbWVzc2FnZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFBhcnQoKQotICB7Ci0gICAgcmV0dXJuIHBhcnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFBhcnRfTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpcGFydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQYXJ0X0VsZW1lbnROYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlwYXJ0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFBhcnRfVHlwZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXBhcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0UGFydF9UeXBlRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpcGFydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRQYXJ0X0VsZW1lbnREZWNsYXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpcGFydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRQYXJ0X0VNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlwYXJ0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0QmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ0VDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0QmluZGluZ19RTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpYmluZGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nX1VuZGVmaW5lZCgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpYmluZGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRCaW5kaW5nX0VQb3J0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpYmluZGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRCaW5kaW5nX0VCaW5kaW5nT3BlcmF0aW9ucygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpYmluZGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEJpbmRpbmdPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb25FQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEJpbmRpbmdPcGVyYXRpb25fTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpYmluZGluZ09wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRCaW5kaW5nT3BlcmF0aW9uX0VPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdPcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0lucHV0KCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSliaW5kaW5nT3BlcmF0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdPcGVyYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0QmluZGluZ09wZXJhdGlvbl9FQmluZGluZ0ZhdWx0cygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpYmluZGluZ09wZXJhdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldFNlcnZpY2VfUU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNlcnZpY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VydmljZV9VbmRlZmluZWQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXNlcnZpY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0U2VydmljZV9FUG9ydHMoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXNlcnZpY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRQb3J0KCkKLSAgewotICAgIHJldHVybiBwb3J0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3J0X05hbWUoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKXBvcnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0UG9ydF9FQmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpcG9ydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRfUmVxdWlyZWQoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEV4dGVuc2liaWxpdHlFbGVtZW50X0VsZW1lbnRUeXBlKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldERlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGRlZmluaXRpb25FQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldERlZmluaXRpb25fVGFyZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlkZWZpbml0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldERlZmluaXRpb25fTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWRlZmluaXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVmaW5pdGlvbl9RTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZWZpbml0aW9uX0VuY29kaW5nKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSlkZWZpbml0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldERlZmluaXRpb25fRU1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlkZWZpbml0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldERlZmluaXRpb25fRVBvcnRUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDcpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VCaW5kaW5ncygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDgpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VTZXJ2aWNlcygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDkpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VOYW1lc3BhY2VzKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlkZWZpbml0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXREZWZpbml0aW9uX0VJbXBvcnRzKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlkZWZpbml0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SW1wb3J0KCkKLSAgewotICAgIHJldHVybiBpbXBvcnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEltcG9ydF9OYW1lc3BhY2VVUkkoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWltcG9ydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbXBvcnRfTG9jYXRpb25VUkkoKQotICB7Ci0gICAgcmV0dXJuIChFQXR0cmlidXRlKWltcG9ydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbXBvcnRfRURlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWltcG9ydEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbXBvcnRfRVNjaGVtYSgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpaW1wb3J0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGV4dGVuc2libGVFbGVtZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRFeHRlbnNpYmxlRWxlbWVudF9FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIHJldHVybiAoRVJlZmVyZW5jZSlleHRlbnNpYmxlRWxlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElucHV0KCkKLSAgewotICAgIHJldHVybiBpbnB1dEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIG91dHB1dEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZmF1bHRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0QmluZGluZ0lucHV0KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nSW5wdXRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQXR0cmlidXRlIGdldEJpbmRpbmdJbnB1dF9OYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSliaW5kaW5nSW5wdXRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVSZWZlcmVuY2UgZ2V0QmluZGluZ0lucHV0X0VJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpYmluZGluZ0lucHV0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0QmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ091dHB1dEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0QmluZGluZ091dHB1dF9OYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSliaW5kaW5nT3V0cHV0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldEJpbmRpbmdPdXRwdXRfRU91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpYmluZGluZ091dHB1dEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldEJpbmRpbmdGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ0ZhdWx0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXRCaW5kaW5nRmF1bHRfTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpYmluZGluZ0ZhdWx0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldEJpbmRpbmdGYXVsdF9FRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKWJpbmRpbmdGYXVsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUF0dHJpYnV0ZSBnZXROYW1lc3BhY2VfVVJJKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSluYW1lc3BhY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZXNwYWNlX1ByZWZpeCgpCi0gIHsKLSAgICByZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZXNwYWNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SVBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBpUG9ydFR5cGVFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SU9wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaU9wZXJhdGlvbkVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIGlJbnB1dEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJT3V0cHV0KCkKLSAgewotICAgIHJldHVybiBpT3V0cHV0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gaUZhdWx0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBpTWVzc2FnZUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJUGFydCgpCi0gIHsKLSAgICByZXR1cm4gaVBhcnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SVNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIGlTZXJ2aWNlRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElQb3J0KCkKLSAgewotICAgIHJldHVybiBpUG9ydEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJQmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gaUJpbmRpbmdFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUJpbmRpbmdPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgcmV0dXJuIGlCaW5kaW5nSW5wdXRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUJpbmRpbmdPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIGlCaW5kaW5nT3V0cHV0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElCaW5kaW5nRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGlCaW5kaW5nRmF1bHRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBpRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SURlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGlEZWZpbml0aW9uRUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElJbXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIGlJbXBvcnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUxpc3QoKQotICB7Ci0gICAgcmV0dXJuIGlMaXN0RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRUNsYXNzIGdldElNYXAoKQotICB7Ci0gICAgcmV0dXJuIGlNYXBFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SVVSTCgpCi0gIHsKLSAgICByZXR1cm4gaXVybEVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRJRXh0ZW5zaW9uUmVnaXN0cnkoKQotICB7Ci0gICAgcmV0dXJuIGlFeHRlbnNpb25SZWdpc3RyeUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVDbGFzcyBnZXRUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gdHlwZXNFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SUl0ZXJhdG9yKCkKLSAgewotICAgIHJldHVybiBpSXRlcmF0b3JFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0SVR5cGVzKCkKLSAgewotICAgIHJldHVybiBpVHlwZXNFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0VW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiB1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudF9DaGlsZHJlbigpCi0gIHsKLSAgICByZXR1cm4gKEVSZWZlcmVuY2UpdW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRVJlZmVyZW5jZSBnZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWEoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKXhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFQ2xhc3MgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZVJlZmVyZW5jZUVDbGFzczsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWVzc2FnZVJlZmVyZW5jZV9OYW1lKCkKLSAgewotICAgIHJldHVybiAoRUF0dHJpYnV0ZSltZXNzYWdlUmVmZXJlbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFUmVmZXJlbmNlIGdldE1lc3NhZ2VSZWZlcmVuY2VfRU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIChFUmVmZXJlbmNlKW1lc3NhZ2VSZWZlcmVuY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVEYXRhVHlwZSBnZXRRTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcU5hbWVFRGF0YVR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFRGF0YVR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uVHlwZUVEYXRhVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEVEYXRhVHlwZSBnZXRET01FbGVtZW50KCkKLSAgewotICAgIHJldHVybiBkb21FbGVtZW50RURhdGFUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgRURhdGFUeXBlIGdldFdTRExFeGNlcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHdzZGxFeGNlcHRpb25FRGF0YVR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBFRGF0YVR5cGUgZ2V0RE9NRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGRvbURvY3VtZW50RURhdGFUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgV1NETEZhY3RvcnkgZ2V0V1NETEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIChXU0RMRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCi0gICAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0gIHsKLSAgICBpZiAoaXNDcmVhdGVkKQotICAgICAgcmV0dXJuOwotICAgIGlzQ3JlYXRlZCA9IHRydWU7Ci0KLSAgICAvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLSAgICB3c2RsRWxlbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhXU0RMX0VMRU1FTlQpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUod3NkbEVsZW1lbnRFQ2xhc3MsIFdTRExfRUxFTUVOVF9fRE9DVU1FTlRBVElPTl9FTEVNRU5UKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHdzZGxFbGVtZW50RUNsYXNzLCBXU0RMX0VMRU1FTlRfX0VMRU1FTlQpOwotCi0gICAgcG9ydFR5cGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUE9SVF9UWVBFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHBvcnRUeXBlRUNsYXNzLCBQT1JUX1RZUEVfX1FOQU1FKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHBvcnRUeXBlRUNsYXNzLCBQT1JUX1RZUEVfX1VOREVGSU5FRCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShwb3J0VHlwZUVDbGFzcywgUE9SVF9UWVBFX19FT1BFUkFUSU9OUyk7Ci0KLSAgICBvcGVyYXRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoT1BFUkFUSU9OKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKG9wZXJhdGlvbkVDbGFzcywgT1BFUkFUSU9OX19TVFlMRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShvcGVyYXRpb25FQ2xhc3MsIE9QRVJBVElPTl9fTkFNRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShvcGVyYXRpb25FQ2xhc3MsIE9QRVJBVElPTl9fVU5ERUZJTkVEKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKG9wZXJhdGlvbkVDbGFzcywgT1BFUkFUSU9OX19FSU5QVVQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2Uob3BlcmF0aW9uRUNsYXNzLCBPUEVSQVRJT05fX0VPVVRQVVQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2Uob3BlcmF0aW9uRUNsYXNzLCBPUEVSQVRJT05fX0VGQVVMVFMpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2Uob3BlcmF0aW9uRUNsYXNzLCBPUEVSQVRJT05fX0VQQVJBTUVURVJfT1JERVJJTkcpOwotCi0gICAgbWVzc2FnZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNRVNTQUdFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKG1lc3NhZ2VFQ2xhc3MsIE1FU1NBR0VfX1FOQU1FKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKG1lc3NhZ2VFQ2xhc3MsIE1FU1NBR0VfX1VOREVGSU5FRCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShtZXNzYWdlRUNsYXNzLCBNRVNTQUdFX19FUEFSVFMpOwotCi0gICAgcGFydEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQQVJUKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHBhcnRFQ2xhc3MsIFBBUlRfX05BTUUpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUocGFydEVDbGFzcywgUEFSVF9fRUxFTUVOVF9OQU1FKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHBhcnRFQ2xhc3MsIFBBUlRfX1RZUEVfTkFNRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShwYXJ0RUNsYXNzLCBQQVJUX19UWVBFX0RFRklOSVRJT04pOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UocGFydEVDbGFzcywgUEFSVF9fRUxFTUVOVF9ERUNMQVJBVElPTik7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShwYXJ0RUNsYXNzLCBQQVJUX19FTUVTU0FHRSk7Ci0KLSAgICBiaW5kaW5nRUNsYXNzID0gY3JlYXRlRUNsYXNzKEJJTkRJTkcpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoYmluZGluZ0VDbGFzcywgQklORElOR19fUU5BTUUpOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoYmluZGluZ0VDbGFzcywgQklORElOR19fVU5ERUZJTkVEKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGJpbmRpbmdFQ2xhc3MsIEJJTkRJTkdfX0VQT1JUX1RZUEUpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoYmluZGluZ0VDbGFzcywgQklORElOR19fRUJJTkRJTkdfT1BFUkFUSU9OUyk7Ci0KLSAgICBiaW5kaW5nT3BlcmF0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKEJJTkRJTkdfT1BFUkFUSU9OKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIEJJTkRJTkdfT1BFUkFUSU9OX19OQU1FKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIEJJTkRJTkdfT1BFUkFUSU9OX19FT1BFUkFUSU9OKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19JTlBVVCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShiaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBCSU5ESU5HX09QRVJBVElPTl9fRUJJTkRJTkdfT1VUUFVUKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIEJJTkRJTkdfT1BFUkFUSU9OX19FQklORElOR19GQVVMVFMpOwotCi0gICAgc2VydmljZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTRVJWSUNFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNlcnZpY2VFQ2xhc3MsIFNFUlZJQ0VfX1FOQU1FKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHNlcnZpY2VFQ2xhc3MsIFNFUlZJQ0VfX1VOREVGSU5FRCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShzZXJ2aWNlRUNsYXNzLCBTRVJWSUNFX19FUE9SVFMpOwotCi0gICAgcG9ydEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQT1JUKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKHBvcnRFQ2xhc3MsIFBPUlRfX05BTUUpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UocG9ydEVDbGFzcywgUE9SVF9fRUJJTkRJTkcpOwotCi0gICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRVhURU5TSUJJTElUWV9FTEVNRU5UKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLCBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX1JFUVVJUkVEKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKGV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLCBFWFRFTlNJQklMSVRZX0VMRU1FTlRfX0VMRU1FTlRfVFlQRSk7Ci0KLSAgICBkZWZpbml0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFRklOSVRJT04pOwotICAgIGNyZWF0ZUVBdHRyaWJ1dGUoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fVEFSR0VUX05BTUVTUEFDRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19MT0NBVElPTik7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19RTkFNRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19FTkNPRElORyk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19FSU1QT1JUUyk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19FVFlQRVMpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fRU1FU1NBR0VTKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX0VQT1JUX1RZUEVTKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGRlZmluaXRpb25FQ2xhc3MsIERFRklOSVRJT05fX0VCSU5ESU5HUyk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShkZWZpbml0aW9uRUNsYXNzLCBERUZJTklUSU9OX19FU0VSVklDRVMpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoZGVmaW5pdGlvbkVDbGFzcywgREVGSU5JVElPTl9fRU5BTUVTUEFDRVMpOwotCi0gICAgaW1wb3J0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElNUE9SVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShpbXBvcnRFQ2xhc3MsIElNUE9SVF9fTkFNRVNQQUNFX1VSSSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShpbXBvcnRFQ2xhc3MsIElNUE9SVF9fTE9DQVRJT05fVVJJKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKGltcG9ydEVDbGFzcywgSU1QT1JUX19FREVGSU5JVElPTik7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShpbXBvcnRFQ2xhc3MsIElNUE9SVF9fRVNDSEVNQSk7Ci0KLSAgICBleHRlbnNpYmxlRWxlbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhFWFRFTlNJQkxFX0VMRU1FTlQpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoZXh0ZW5zaWJsZUVsZW1lbnRFQ2xhc3MsIEVYVEVOU0lCTEVfRUxFTUVOVF9fRUVYVEVOU0lCSUxJVFlfRUxFTUVOVFMpOwotCi0gICAgaW5wdXRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5QVVQpOwotCi0gICAgb3V0cHV0RUNsYXNzID0gY3JlYXRlRUNsYXNzKE9VVFBVVCk7Ci0KLSAgICBmYXVsdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhGQVVMVCk7Ci0KLSAgICBiaW5kaW5nSW5wdXRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQklORElOR19JTlBVVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShiaW5kaW5nSW5wdXRFQ2xhc3MsIEJJTkRJTkdfSU5QVVRfX05BTUUpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoYmluZGluZ0lucHV0RUNsYXNzLCBCSU5ESU5HX0lOUFVUX19FSU5QVVQpOwotCi0gICAgYmluZGluZ091dHB1dEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhCSU5ESU5HX09VVFBVVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShiaW5kaW5nT3V0cHV0RUNsYXNzLCBCSU5ESU5HX09VVFBVVF9fTkFNRSk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZShiaW5kaW5nT3V0cHV0RUNsYXNzLCBCSU5ESU5HX09VVFBVVF9fRU9VVFBVVCk7Ci0KLSAgICBiaW5kaW5nRmF1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQklORElOR19GQVVMVCk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShiaW5kaW5nRmF1bHRFQ2xhc3MsIEJJTkRJTkdfRkFVTFRfX05BTUUpOwotICAgIGNyZWF0ZUVSZWZlcmVuY2UoYmluZGluZ0ZhdWx0RUNsYXNzLCBCSU5ESU5HX0ZBVUxUX19FRkFVTFQpOwotCi0gICAgbmFtZXNwYWNlRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5BTUVTUEFDRSk7Ci0gICAgY3JlYXRlRUF0dHJpYnV0ZShuYW1lc3BhY2VFQ2xhc3MsIE5BTUVTUEFDRV9fVVJJKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKG5hbWVzcGFjZUVDbGFzcywgTkFNRVNQQUNFX19QUkVGSVgpOwotCi0gICAgaVBvcnRUeXBlRUNsYXNzID0gY3JlYXRlRUNsYXNzKElQT1JUX1RZUEUpOwotCi0gICAgaU9wZXJhdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJT1BFUkFUSU9OKTsKLQotICAgIGlJbnB1dEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJSU5QVVQpOwotCi0gICAgaU91dHB1dEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJT1VUUFVUKTsKLQotICAgIGlGYXVsdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJRkFVTFQpOwotCi0gICAgaU1lc3NhZ2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU1FU1NBR0UpOwotCi0gICAgaVBhcnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVBBUlQpOwotCi0gICAgaVNlcnZpY2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVNFUlZJQ0UpOwotCi0gICAgaVBvcnRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVBPUlQpOwotCi0gICAgaUJpbmRpbmdFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUJJTkRJTkcpOwotCi0gICAgaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUJJTkRJTkdfT1BFUkFUSU9OKTsKLQotICAgIGlCaW5kaW5nSW5wdXRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUJJTkRJTkdfSU5QVVQpOwotCi0gICAgaUJpbmRpbmdPdXRwdXRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUJJTkRJTkdfT1VUUFVUKTsKLQotICAgIGlCaW5kaW5nRmF1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSUJJTkRJTkdfRkFVTFQpOwotCi0gICAgaUV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKElFWFRFTlNJQklMSVRZX0VMRU1FTlQpOwotCi0gICAgaURlZmluaXRpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSURFRklOSVRJT04pOwotCi0gICAgaUltcG9ydEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJSU1QT1JUKTsKLQotICAgIGlMaXN0RUNsYXNzID0gY3JlYXRlRUNsYXNzKElMSVNUKTsKLQotICAgIGlNYXBFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU1BUCk7Ci0KLSAgICBpdXJsRUNsYXNzID0gY3JlYXRlRUNsYXNzKElVUkwpOwotCi0gICAgaUV4dGVuc2lvblJlZ2lzdHJ5RUNsYXNzID0gY3JlYXRlRUNsYXNzKElFWFRFTlNJT05fUkVHSVNUUlkpOwotCi0gICAgdHlwZXNFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVFlQRVMpOwotCi0gICAgaUl0ZXJhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKElJVEVSQVRPUik7Ci0KLSAgICBpVHlwZXNFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSVRZUEVTKTsKLQotICAgIHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhVTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZSh1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MsIFVOS05PV05fRVhURU5TSUJJTElUWV9FTEVNRU5UX19DSElMRFJFTik7Ci0KLSAgICB4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhYU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVCk7Ci0gICAgY3JlYXRlRVJlZmVyZW5jZSh4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcywgWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSk7Ci0KLSAgICBtZXNzYWdlUmVmZXJlbmNlRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1FU1NBR0VfUkVGRVJFTkNFKTsKLSAgICBjcmVhdGVFQXR0cmlidXRlKG1lc3NhZ2VSZWZlcmVuY2VFQ2xhc3MsIE1FU1NBR0VfUkVGRVJFTkNFX19OQU1FKTsKLSAgICBjcmVhdGVFUmVmZXJlbmNlKG1lc3NhZ2VSZWZlcmVuY2VFQ2xhc3MsIE1FU1NBR0VfUkVGRVJFTkNFX19FTUVTU0FHRSk7Ci0KLSAgICAvLyBDcmVhdGUgZGF0YSB0eXBlcwotICAgIHFOYW1lRURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKFFOQU1FKTsKLSAgICBvcGVyYXRpb25UeXBlRURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKE9QRVJBVElPTl9UWVBFKTsKLSAgICBkb21FbGVtZW50RURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKERPTV9FTEVNRU5UKTsKLSAgICB3c2RsRXhjZXB0aW9uRURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKFdTRExfRVhDRVBUSU9OKTsKLSAgICBkb21Eb2N1bWVudEVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShET01fRE9DVU1FTlQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcwotICAgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0gIHsKLSAgICBpZiAoaXNJbml0aWFsaXplZCkKLSAgICAgIHJldHVybjsKLSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIC8vIEluaXRpYWxpemUgcGFja2FnZQotICAgIHNldE5hbWUoZU5BTUUpOwotICAgIHNldE5zUHJlZml4KGVOU19QUkVGSVgpOwotICAgIHNldE5zVVJJKGVOU19VUkkpOwotCi0gICAgLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcwotICAgIFhTRFBhY2thZ2UgdGhlWFNEUGFja2FnZSA9IChYU0RQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFhTRFBhY2thZ2UuZU5TX1VSSSk7Ci0KLSAgICAvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0gICAgcG9ydFR5cGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBwb3J0VHlwZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElQb3J0VHlwZSgpKTsKLSAgICBvcGVyYXRpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBvcGVyYXRpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJT3BlcmF0aW9uKCkpOwotICAgIG1lc3NhZ2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBtZXNzYWdlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SU1lc3NhZ2UoKSk7Ci0gICAgcGFydEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIHBhcnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJUGFydCgpKTsKLSAgICBiaW5kaW5nRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgYmluZGluZ0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElCaW5kaW5nKCkpOwotICAgIGJpbmRpbmdPcGVyYXRpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUJpbmRpbmdPcGVyYXRpb24oKSk7Ci0gICAgc2VydmljZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIHNlcnZpY2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJU2VydmljZSgpKTsKLSAgICBwb3J0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgcG9ydEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElQb3J0KCkpOwotICAgIGV4dGVuc2liaWxpdHlFbGVtZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0V1NETEVsZW1lbnQoKSk7Ci0gICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSk7Ci0gICAgZGVmaW5pdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIGRlZmluaXRpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJRGVmaW5pdGlvbigpKTsKLSAgICBpbXBvcnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICBpbXBvcnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJSW1wb3J0KCkpOwotICAgIGV4dGVuc2libGVFbGVtZW50RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0V1NETEVsZW1lbnQoKSk7Ci0gICAgaW5wdXRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRNZXNzYWdlUmVmZXJlbmNlKCkpOwotICAgIGlucHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUlucHV0KCkpOwotICAgIG91dHB1dEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE1lc3NhZ2VSZWZlcmVuY2UoKSk7Ci0gICAgb3V0cHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SU91dHB1dCgpKTsKLSAgICBmYXVsdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE1lc3NhZ2VSZWZlcmVuY2UoKSk7Ci0gICAgZmF1bHRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJRmF1bHQoKSk7Ci0gICAgYmluZGluZ0lucHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgYmluZGluZ0lucHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SUJpbmRpbmdJbnB1dCgpKTsKLSAgICBiaW5kaW5nT3V0cHV0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoKSk7Ci0gICAgYmluZGluZ091dHB1dEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElCaW5kaW5nT3V0cHV0KCkpOwotICAgIGJpbmRpbmdGYXVsdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2libGVFbGVtZW50KCkpOwotICAgIGJpbmRpbmdGYXVsdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElCaW5kaW5nRmF1bHQoKSk7Ci0gICAgdHlwZXNFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLSAgICB0eXBlc0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElUeXBlcygpKTsKLSAgICB1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICB4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkpOwotICAgIG1lc3NhZ2VSZWZlcmVuY2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFeHRlbnNpYmxlRWxlbWVudCgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCi0gICAgaW5pdEVDbGFzcyh3c2RsRWxlbWVudEVDbGFzcywgV1NETEVsZW1lbnQuY2xhc3MsICJXU0RMRWxlbWVudCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRXU0RMRWxlbWVudF9Eb2N1bWVudGF0aW9uRWxlbWVudCgpLAotICAgICAgdGhpcy5nZXRET01FbGVtZW50KCksCi0gICAgICAiZG9jdW1lbnRhdGlvbkVsZW1lbnQiLCBudWxsLCAwLCAxLCBXU0RMRWxlbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0V1NETEVsZW1lbnRfRWxlbWVudCgpLAotICAgICAgdGhpcy5nZXRET01FbGVtZW50KCksCi0gICAgICAiZWxlbWVudCIsIG51bGwsIDAsIDEsIFdTRExFbGVtZW50LmNsYXNzLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIEVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKHdzZGxFbGVtZW50RUNsYXNzLCB0aGlzLmdldERlZmluaXRpb24oKSwgImdldEVuY2xvc2luZ0RlZmluaXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKHdzZGxFbGVtZW50RUNsYXNzLCBudWxsLCAic2V0RW5jbG9zaW5nRGVmaW5pdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXREZWZpbml0aW9uKCksICJkZWZpbml0aW9uIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MocG9ydFR5cGVFQ2xhc3MsIFBvcnRUeXBlLmNsYXNzLCAiUG9ydFR5cGUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFBvcnRUeXBlX1FOYW1lKCksCi0gICAgICB0aGlzLmdldFFOYW1lKCksCi0gICAgICAicU5hbWUiLCBudWxsLCAwLCAxLCBQb3J0VHlwZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0UG9ydFR5cGVfVW5kZWZpbmVkKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwKLSAgICAgICJ1bmRlZmluZWQiLCBudWxsLCAwLCAxLCBQb3J0VHlwZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0UG9ydFR5cGVfRU9wZXJhdGlvbnMoKSwKLSAgICAgIHRoaXMuZ2V0T3BlcmF0aW9uKCksCi0gICAgICBudWxsLAotICAgICAgImVPcGVyYXRpb25zIiwgbnVsbCwgMCwgLTEsIFBvcnRUeXBlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKG9wZXJhdGlvbkVDbGFzcywgT3BlcmF0aW9uLmNsYXNzLCAiT3BlcmF0aW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRPcGVyYXRpb25fU3R5bGUoKSwKLSAgICAgIHRoaXMuZ2V0T3BlcmF0aW9uVHlwZSgpLAotICAgICAgInN0eWxlIiwgbnVsbCwgMCwgMSwgT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRPcGVyYXRpb25fTmFtZSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJuYW1lIiwgbnVsbCwgMCwgMSwgT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRPcGVyYXRpb25fVW5kZWZpbmVkKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwKLSAgICAgICJ1bmRlZmluZWQiLCBudWxsLCAwLCAxLCBPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE9wZXJhdGlvbl9FSW5wdXQoKSwKLSAgICAgIHRoaXMuZ2V0SW5wdXQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUlucHV0IiwgbnVsbCwgMCwgMSwgT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRPcGVyYXRpb25fRU91dHB1dCgpLAotICAgICAgdGhpcy5nZXRPdXRwdXQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZU91dHB1dCIsIG51bGwsIDAsIDEsIE9wZXJhdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0T3BlcmF0aW9uX0VGYXVsdHMoKSwKLSAgICAgIHRoaXMuZ2V0RmF1bHQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUZhdWx0cyIsIG51bGwsIDAsIC0xLCBPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE9wZXJhdGlvbl9FUGFyYW1ldGVyT3JkZXJpbmcoKSwKLSAgICAgIHRoaXMuZ2V0UGFydCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlUGFyYW1ldGVyT3JkZXJpbmciLCBudWxsLCAwLCAtMSwgT3BlcmF0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKG1lc3NhZ2VFQ2xhc3MsIE1lc3NhZ2UuY2xhc3MsICJNZXNzYWdlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRNZXNzYWdlX1FOYW1lKCksCi0gICAgICB0aGlzLmdldFFOYW1lKCksCi0gICAgICAicU5hbWUiLCBudWxsLCAwLCAxLCBNZXNzYWdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRNZXNzYWdlX1VuZGVmaW5lZCgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksCi0gICAgICAidW5kZWZpbmVkIiwgbnVsbCwgMCwgMSwgTWVzc2FnZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0TWVzc2FnZV9FUGFydHMoKSwKLSAgICAgIHRoaXMuZ2V0UGFydCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlUGFydHMiLCBudWxsLCAwLCAtMSwgTWVzc2FnZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhwYXJ0RUNsYXNzLCBQYXJ0LmNsYXNzLCAiUGFydCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0UGFydF9OYW1lKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWUiLCBudWxsLCAwLCAxLCBQYXJ0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRQYXJ0X0VsZW1lbnROYW1lKCksCi0gICAgICB0aGlzLmdldFFOYW1lKCksCi0gICAgICAiZWxlbWVudE5hbWUiLCBudWxsLCAwLCAxLCBQYXJ0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRQYXJ0X1R5cGVOYW1lKCksCi0gICAgICB0aGlzLmdldFFOYW1lKCksCi0gICAgICAidHlwZU5hbWUiLCBudWxsLCAwLCAxLCBQYXJ0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRQYXJ0X1R5cGVEZWZpbml0aW9uKCksCi0gICAgICB0aGVYU0RQYWNrYWdlLmdldFhTRFR5cGVEZWZpbml0aW9uKCksCi0gICAgICBudWxsLAotICAgICAgInR5cGVEZWZpbml0aW9uIiwgbnVsbCwgMCwgMSwgUGFydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0UGFydF9FbGVtZW50RGVjbGFyYXRpb24oKSwKLSAgICAgIHRoZVhTRFBhY2thZ2UuZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCksCi0gICAgICBudWxsLAotICAgICAgImVsZW1lbnREZWNsYXJhdGlvbiIsIG51bGwsIDAsIDEsIFBhcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFBhcnRfRU1lc3NhZ2UoKSwKLSAgICAgIHRoaXMuZ2V0TWVzc2FnZSgpLAotICAgICAgbnVsbCwKLSAgICAgICJlTWVzc2FnZSIsIG51bGwsIDAsIDEsIFBhcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoYmluZGluZ0VDbGFzcywgQmluZGluZy5jbGFzcywgIkJpbmRpbmciLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEJpbmRpbmdfUU5hbWUoKSwKLSAgICAgIHRoaXMuZ2V0UU5hbWUoKSwKLSAgICAgICJxTmFtZSIsIG51bGwsIDAsIDEsIEJpbmRpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEJpbmRpbmdfVW5kZWZpbmVkKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwKLSAgICAgICJ1bmRlZmluZWQiLCBudWxsLCAwLCAxLCBCaW5kaW5nLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRCaW5kaW5nX0VQb3J0VHlwZSgpLAotICAgICAgdGhpcy5nZXRQb3J0VHlwZSgpLAotICAgICAgbnVsbCwKLSAgICAgICJlUG9ydFR5cGUiLCBudWxsLCAxLCAxLCBCaW5kaW5nLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRCaW5kaW5nX0VCaW5kaW5nT3BlcmF0aW9ucygpLAotICAgICAgdGhpcy5nZXRCaW5kaW5nT3BlcmF0aW9uKCksCi0gICAgICBudWxsLAotICAgICAgImVCaW5kaW5nT3BlcmF0aW9ucyIsIG51bGwsIDAsIC0xLCBCaW5kaW5nLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsICJCaW5kaW5nT3BlcmF0aW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRCaW5kaW5nT3BlcmF0aW9uX05hbWUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZSIsIG51bGwsIDAsIDEsIEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEJpbmRpbmdPcGVyYXRpb25fRU9wZXJhdGlvbigpLAotICAgICAgdGhpcy5nZXRPcGVyYXRpb24oKSwKLSAgICAgIG51bGwsCi0gICAgICAiZU9wZXJhdGlvbiIsIG51bGwsIDEsIDEsIEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdJbnB1dCgpLAotICAgICAgdGhpcy5nZXRCaW5kaW5nSW5wdXQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUJpbmRpbmdJbnB1dCIsIG51bGwsIDAsIDEsIEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdPdXRwdXQoKSwKLSAgICAgIHRoaXMuZ2V0QmluZGluZ091dHB1dCgpLAotICAgICAgbnVsbCwKLSAgICAgICJlQmluZGluZ091dHB1dCIsIG51bGwsIDAsIDEsIEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEJpbmRpbmdPcGVyYXRpb25fRUJpbmRpbmdGYXVsdHMoKSwKLSAgICAgIHRoaXMuZ2V0QmluZGluZ0ZhdWx0KCksCi0gICAgICBudWxsLAotICAgICAgImVCaW5kaW5nRmF1bHRzIiwgbnVsbCwgMCwgLTEsIEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Moc2VydmljZUVDbGFzcywgU2VydmljZS5jbGFzcywgIlNlcnZpY2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNlcnZpY2VfUU5hbWUoKSwKLSAgICAgIHRoaXMuZ2V0UU5hbWUoKSwKLSAgICAgICJxTmFtZSIsIG51bGwsIDAsIDEsIFNlcnZpY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldFNlcnZpY2VfVW5kZWZpbmVkKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwKLSAgICAgICJ1bmRlZmluZWQiLCBudWxsLCAwLCAxLCBTZXJ2aWNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRTZXJ2aWNlX0VQb3J0cygpLAotICAgICAgdGhpcy5nZXRQb3J0KCksCi0gICAgICBudWxsLAotICAgICAgImVQb3J0cyIsIG51bGwsIDAsIC0xLCBTZXJ2aWNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKHBvcnRFQ2xhc3MsIFBvcnQuY2xhc3MsICJQb3J0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRQb3J0X05hbWUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZSIsIG51bGwsIDAsIDEsIFBvcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFBvcnRfRUJpbmRpbmcoKSwKLSAgICAgIHRoaXMuZ2V0QmluZGluZygpLAotICAgICAgbnVsbCwKLSAgICAgICJlQmluZGluZyIsIG51bGwsIDEsIDEsIFBvcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcywKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLAotICAgICAgIkV4dGVuc2liaWxpdHlFbGVtZW50IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudF9SZXF1aXJlZCgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksCi0gICAgICAicmVxdWlyZWQiLCBudWxsLCAwLCAxLCBFeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRfRWxlbWVudFR5cGUoKSwKLSAgICAgIHRoaXMuZ2V0UU5hbWUoKSwKLSAgICAgICJlbGVtZW50VHlwZSIsIG51bGwsIDAsIDEsIEV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoZGVmaW5pdGlvbkVDbGFzcywgRGVmaW5pdGlvbi5jbGFzcywgIkRlZmluaXRpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldERlZmluaXRpb25fVGFyZ2V0TmFtZXNwYWNlKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgInRhcmdldE5hbWVzcGFjZSIsIG51bGwsIDAsIDEsIERlZmluaXRpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldERlZmluaXRpb25fTG9jYXRpb24oKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibG9jYXRpb24iLCBudWxsLCAwLCAxLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXREZWZpbml0aW9uX1FOYW1lKCksCi0gICAgICB0aGlzLmdldFFOYW1lKCksCi0gICAgICAicU5hbWUiLCBudWxsLCAwLCAxLCBEZWZpbml0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXREZWZpbml0aW9uX0VuY29kaW5nKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgImVuY29kaW5nIiwgbnVsbCwgMCwgMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9FSW1wb3J0cygpLAotICAgICAgdGhpcy5nZXRJbXBvcnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUltcG9ydHMiLCBudWxsLCAwLCAtMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9FVHlwZXMoKSwKLSAgICAgIHRoaXMuZ2V0VHlwZXMoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVR5cGVzIiwgbnVsbCwgMCwgMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9FTWVzc2FnZXMoKSwKLSAgICAgIHRoaXMuZ2V0TWVzc2FnZSgpLAotICAgICAgbnVsbCwKLSAgICAgICJlTWVzc2FnZXMiLCBudWxsLCAwLCAtMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9FUG9ydFR5cGVzKCksCi0gICAgICB0aGlzLmdldFBvcnRUeXBlKCksCi0gICAgICBudWxsLAotICAgICAgImVQb3J0VHlwZXMiLCBudWxsLCAwLCAtMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9FQmluZGluZ3MoKSwKLSAgICAgIHRoaXMuZ2V0QmluZGluZygpLAotICAgICAgbnVsbCwKLSAgICAgICJlQmluZGluZ3MiLCBudWxsLCAwLCAtMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9FU2VydmljZXMoKSwKLSAgICAgIHRoaXMuZ2V0U2VydmljZSgpLAotICAgICAgbnVsbCwKLSAgICAgICJlU2VydmljZXMiLCBudWxsLCAwLCAtMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0RGVmaW5pdGlvbl9FTmFtZXNwYWNlcygpLAotICAgICAgdGhpcy5nZXROYW1lc3BhY2UoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZU5hbWVzcGFjZXMiLCBudWxsLCAwLCAtMSwgRGVmaW5pdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGRlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0RE9NRG9jdW1lbnQoKSwgImdldERvY3VtZW50IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihkZWZpbml0aW9uRUNsYXNzLCBudWxsLCAic2V0RG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0RE9NRG9jdW1lbnQoKSwgImRvY3VtZW50IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaW1wb3J0RUNsYXNzLCBJbXBvcnQuY2xhc3MsICJJbXBvcnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEltcG9ydF9OYW1lc3BhY2VVUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZXNwYWNlVVJJIiwgbnVsbCwgMCwgMSwgSW1wb3J0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRJbXBvcnRfTG9jYXRpb25VUkkoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibG9jYXRpb25VUkkiLCBudWxsLCAwLCAxLCBJbXBvcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEltcG9ydF9FRGVmaW5pdGlvbigpLAotICAgICAgdGhpcy5nZXREZWZpbml0aW9uKCksCi0gICAgICBudWxsLAotICAgICAgImVEZWZpbml0aW9uIiwgbnVsbCwgMCwgMSwgSW1wb3J0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRJbXBvcnRfRVNjaGVtYSgpLAotICAgICAgdGhlWFNEUGFja2FnZS5nZXRYU0RTY2hlbWEoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZVNjaGVtYSIsIG51bGwsIDAsIDEsIEltcG9ydC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGltcG9ydEVDbGFzcywgdGhlWFNEUGFja2FnZS5nZXRYU0RTY2hlbWEoKSwgImdldFNjaGVtYSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaW1wb3J0RUNsYXNzLCBudWxsLCAic2V0U2NoZW1hIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGVYU0RQYWNrYWdlLmdldFhTRFNjaGVtYSgpLCAic2NoZW1hIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBleHRlbnNpYmxlRWxlbWVudEVDbGFzcywKLSAgICAgIEV4dGVuc2libGVFbGVtZW50LmNsYXNzLAotICAgICAgIkV4dGVuc2libGVFbGVtZW50IiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEV4dGVuc2libGVFbGVtZW50X0VFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgIHRoaXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUV4dGVuc2liaWxpdHlFbGVtZW50cyIsIG51bGwsIDAsIC0xLCBFeHRlbnNpYmxlRWxlbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGV4dGVuc2libGVFbGVtZW50RUNsYXNzLCB0aGlzLmdldElMaXN0KCksICJnZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGV4dGVuc2libGVFbGVtZW50RUNsYXNzLCBudWxsLCAiYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUV4dGVuc2liaWxpdHlFbGVtZW50KCksICJleHRFbGVtZW50IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaW5wdXRFQ2xhc3MsIElucHV0LmNsYXNzLCAiSW5wdXQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3Mob3V0cHV0RUNsYXNzLCBPdXRwdXQuY2xhc3MsICJPdXRwdXQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoZmF1bHRFQ2xhc3MsIEZhdWx0LmNsYXNzLCAiRmF1bHQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoYmluZGluZ0lucHV0RUNsYXNzLCBCaW5kaW5nSW5wdXQuY2xhc3MsICJCaW5kaW5nSW5wdXQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEJpbmRpbmdJbnB1dF9OYW1lKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWUiLCBudWxsLCAwLCAxLCBCaW5kaW5nSW5wdXQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEJpbmRpbmdJbnB1dF9FSW5wdXQoKSwKLSAgICAgIHRoaXMuZ2V0SW5wdXQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUlucHV0IiwgbnVsbCwgMSwgMSwgQmluZGluZ0lucHV0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oYmluZGluZ0lucHV0RUNsYXNzLCB0aGlzLmdldElJbnB1dCgpLCAiZ2V0SW5wdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGJpbmRpbmdJbnB1dEVDbGFzcywgbnVsbCwgInNldElucHV0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElJbnB1dCgpLCAiaW5wdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhiaW5kaW5nT3V0cHV0RUNsYXNzLCBCaW5kaW5nT3V0cHV0LmNsYXNzLCAiQmluZGluZ091dHB1dCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0QmluZGluZ091dHB1dF9OYW1lKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWUiLCBudWxsLCAwLCAxLCBCaW5kaW5nT3V0cHV0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVSZWZlcmVuY2UoCi0gICAgICBnZXRCaW5kaW5nT3V0cHV0X0VPdXRwdXQoKSwKLSAgICAgIHRoaXMuZ2V0T3V0cHV0KCksCi0gICAgICBudWxsLAotICAgICAgImVPdXRwdXQiLCBudWxsLCAxLCAxLCBCaW5kaW5nT3V0cHV0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oYmluZGluZ091dHB1dEVDbGFzcywgdGhpcy5nZXRJT3V0cHV0KCksICJnZXRPdXRwdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGJpbmRpbmdPdXRwdXRFQ2xhc3MsIG51bGwsICJzZXRPdXRwdXQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SU91dHB1dCgpLCAib3V0cHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoYmluZGluZ0ZhdWx0RUNsYXNzLCBCaW5kaW5nRmF1bHQuY2xhc3MsICJCaW5kaW5nRmF1bHQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldEJpbmRpbmdGYXVsdF9OYW1lKCksCi0gICAgICBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLAotICAgICAgIm5hbWUiLCBudWxsLCAwLCAxLCBCaW5kaW5nRmF1bHQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldEJpbmRpbmdGYXVsdF9FRmF1bHQoKSwKLSAgICAgIHRoaXMuZ2V0RmF1bHQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiZUZhdWx0IiwgbnVsbCwgMSwgMSwgQmluZGluZ0ZhdWx0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oYmluZGluZ0ZhdWx0RUNsYXNzLCB0aGlzLmdldElGYXVsdCgpLCAiZ2V0RmF1bHQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGJpbmRpbmdGYXVsdEVDbGFzcywgbnVsbCwgInNldEZhdWx0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElGYXVsdCgpLCAiZmF1bHQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhuYW1lc3BhY2VFQ2xhc3MsIE5hbWVzcGFjZS5jbGFzcywgIk5hbWVzcGFjZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFQXR0cmlidXRlKAotICAgICAgZ2V0TmFtZXNwYWNlX1VSSSgpLAotICAgICAgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwKLSAgICAgICJVUkkiLCBudWxsLCAwLCAxLCBOYW1lc3BhY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RUF0dHJpYnV0ZSgKLSAgICAgIGdldE5hbWVzcGFjZV9QcmVmaXgoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAicHJlZml4IiwgbnVsbCwgMCwgMSwgTmFtZXNwYWNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlQb3J0VHlwZUVDbGFzcywgamF2YXgud3NkbC5Qb3J0VHlwZS5jbGFzcywgIklQb3J0VHlwZSIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVBvcnRUeXBlRUNsYXNzLCBudWxsLCAiYWRkT3BlcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElPcGVyYXRpb24oKSwgIm9wZXJhdGlvbiIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVBvcnRUeXBlRUNsYXNzLCB0aGlzLmdldElPcGVyYXRpb24oKSwgImdldE9wZXJhdGlvbiIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJpbnB1dE5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJvdXRwdXROYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpUG9ydFR5cGVFQ2xhc3MsIHRoaXMuZ2V0SUxpc3QoKSwgImdldE9wZXJhdGlvbnMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpT3BlcmF0aW9uRUNsYXNzLCBqYXZheC53c2RsLk9wZXJhdGlvbi5jbGFzcywgIklPcGVyYXRpb24iLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlPcGVyYXRpb25FQ2xhc3MsIG51bGwsICJhZGRGYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJRmF1bHQoKSwgImZhdWx0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpT3BlcmF0aW9uRUNsYXNzLCB0aGlzLmdldElGYXVsdCgpLCAiZ2V0RmF1bHQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpT3BlcmF0aW9uRUNsYXNzLCB0aGlzLmdldElNYXAoKSwgImdldEZhdWx0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU9wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJTGlzdCgpLCAiZ2V0UGFyYW1ldGVyT3JkZXJpbmciLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlPcGVyYXRpb25FQ2xhc3MsIG51bGwsICJzZXRQYXJhbWV0ZXJPcmRlcmluZyIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJTGlzdCgpLCAicGFyYW1ldGVyT3JkZXIiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlPcGVyYXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUlucHV0KCksICJnZXRJbnB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU9wZXJhdGlvbkVDbGFzcywgbnVsbCwgInNldElucHV0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElJbnB1dCgpLCAiaW5wdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlPcGVyYXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU91dHB1dCgpLCAiZ2V0T3V0cHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpT3BlcmF0aW9uRUNsYXNzLCBudWxsLCAic2V0T3V0cHV0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElPdXRwdXQoKSwgIm91dHB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlJbnB1dEVDbGFzcywgamF2YXgud3NkbC5JbnB1dC5jbGFzcywgIklJbnB1dCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUlucHV0RUNsYXNzLCB0aGlzLmdldElNZXNzYWdlKCksICJnZXRNZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpSW5wdXRFQ2xhc3MsIG51bGwsICJzZXRNZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElNZXNzYWdlKCksICJtZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaU91dHB1dEVDbGFzcywgamF2YXgud3NkbC5PdXRwdXQuY2xhc3MsICJJT3V0cHV0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpT3V0cHV0RUNsYXNzLCB0aGlzLmdldElNZXNzYWdlKCksICJnZXRNZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpT3V0cHV0RUNsYXNzLCBudWxsLCAic2V0TWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJTWVzc2FnZSgpLCAibWVzc2FnZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlGYXVsdEVDbGFzcywgamF2YXgud3NkbC5GYXVsdC5jbGFzcywgIklGYXVsdCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUZhdWx0RUNsYXNzLCB0aGlzLmdldElNZXNzYWdlKCksICJnZXRNZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRmF1bHRFQ2xhc3MsIG51bGwsICJzZXRNZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElNZXNzYWdlKCksICJtZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaU1lc3NhZ2VFQ2xhc3MsIGphdmF4LndzZGwuTWVzc2FnZS5jbGFzcywgIklNZXNzYWdlIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpTWVzc2FnZUVDbGFzcywgbnVsbCwgImFkZFBhcnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SVBhcnQoKSwgInBhcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlNZXNzYWdlRUNsYXNzLCB0aGlzLmdldElQYXJ0KCksICJnZXRQYXJ0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaU1lc3NhZ2VFQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0UGFydHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlNZXNzYWdlRUNsYXNzLCB0aGlzLmdldElMaXN0KCksICJnZXRPcmRlcmVkUGFydHMiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUxpc3QoKSwgInBhcnRPcmRlciIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlQYXJ0RUNsYXNzLCBqYXZheC53c2RsLlBhcnQuY2xhc3MsICJJUGFydCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVBhcnRFQ2xhc3MsIG51bGwsICJzZXRFeHRlbnNpb25BdHRyaWJ1dGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgInZhbHVlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFRXhjZXB0aW9uKG9wLCB0aGlzLmdldFdTRExFeGNlcHRpb24oKSk7Ci0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVBhcnRFQ2xhc3MsIHRoaXMuZ2V0SUl0ZXJhdG9yKCksICJnZXRFeHRlbnNpb25BdHRyaWJ1dGVOYW1lcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVBhcnRFQ2xhc3MsIHRoaXMuZ2V0UU5hbWUoKSwgImdldEV4dGVuc2lvbkF0dHJpYnV0ZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRRTmFtZSgpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlTZXJ2aWNlRUNsYXNzLCBqYXZheC53c2RsLlNlcnZpY2UuY2xhc3MsICJJU2VydmljZSIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVNlcnZpY2VFQ2xhc3MsIG51bGwsICJhZGRQb3J0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElQb3J0KCksICJwb3J0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpU2VydmljZUVDbGFzcywgdGhpcy5nZXRJTWFwKCksICJnZXRQb3J0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVNlcnZpY2VFQ2xhc3MsIHRoaXMuZ2V0SVBvcnQoKSwgImdldFBvcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaVBvcnRFQ2xhc3MsIGphdmF4LndzZGwuUG9ydC5jbGFzcywgIklQb3J0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpUG9ydEVDbGFzcywgdGhpcy5nZXRJQmluZGluZygpLCAiZ2V0QmluZGluZyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaVBvcnRFQ2xhc3MsIG51bGwsICJzZXRCaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElCaW5kaW5nKCksICJiaW5kaW5nIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaUJpbmRpbmdFQ2xhc3MsIGphdmF4LndzZGwuQmluZGluZy5jbGFzcywgIklCaW5kaW5nIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpQmluZGluZ0VDbGFzcywgbnVsbCwgImFkZEJpbmRpbmdPcGVyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUJpbmRpbmdPcGVyYXRpb24oKSwgImJpbmRpbmdPcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nT3BlcmF0aW9uKCksICJnZXRCaW5kaW5nT3BlcmF0aW9uIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImlucHV0TmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm91dHB1dE5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nRUNsYXNzLCB0aGlzLmdldElMaXN0KCksICJnZXRCaW5kaW5nT3BlcmF0aW9ucyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdFQ2xhc3MsIHRoaXMuZ2V0SVBvcnRUeXBlKCksICJnZXRQb3J0VHlwZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdFQ2xhc3MsIG51bGwsICJzZXRQb3J0VHlwZSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJUG9ydFR5cGUoKSwgInBvcnRUeXBlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpQmluZGluZ09wZXJhdGlvbkVDbGFzcywKLSAgICAgIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbi5jbGFzcywKLSAgICAgICJJQmluZGluZ09wZXJhdGlvbiIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIG51bGwsICJhZGRCaW5kaW5nRmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUJpbmRpbmdGYXVsdCgpLCAiYmluZGluZ0ZhdWx0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpQmluZGluZ09wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJQmluZGluZ0ZhdWx0KCksICJnZXRCaW5kaW5nRmF1bHQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpQmluZGluZ09wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJTWFwKCksICJnZXRCaW5kaW5nRmF1bHRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpQmluZGluZ09wZXJhdGlvbkVDbGFzcywgdGhpcy5nZXRJT3BlcmF0aW9uKCksICJnZXRPcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCBudWxsLCAic2V0T3BlcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElPcGVyYXRpb24oKSwgIm9wZXJhdGlvbiIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaUJpbmRpbmdPcGVyYXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmdJbnB1dCgpLCAiZ2V0QmluZGluZ0lucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpQmluZGluZ09wZXJhdGlvbkVDbGFzcywgbnVsbCwgInNldEJpbmRpbmdJbnB1dCIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJQmluZGluZ0lucHV0KCksICJiaW5kaW5nSW5wdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlCaW5kaW5nT3BlcmF0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nT3V0cHV0KCksICJnZXRCaW5kaW5nT3V0cHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpQmluZGluZ09wZXJhdGlvbkVDbGFzcywgbnVsbCwgInNldEJpbmRpbmdPdXRwdXQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUJpbmRpbmdPdXRwdXQoKSwgImJpbmRpbmdPdXRwdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpQmluZGluZ0lucHV0RUNsYXNzLCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dC5jbGFzcywgIklCaW5kaW5nSW5wdXQiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIGlCaW5kaW5nT3V0cHV0RUNsYXNzLAotICAgICAgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0LmNsYXNzLAotICAgICAgIklCaW5kaW5nT3V0cHV0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaUJpbmRpbmdGYXVsdEVDbGFzcywgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQuY2xhc3MsICJJQmluZGluZ0ZhdWx0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MsCi0gICAgICBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQuY2xhc3MsCi0gICAgICAiSUV4dGVuc2liaWxpdHlFbGVtZW50IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaURlZmluaXRpb25FQ2xhc3MsIGphdmF4LndzZGwuRGVmaW5pdGlvbi5jbGFzcywgIklEZWZpbml0aW9uIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgbnVsbCwgImFkZEJpbmRpbmciKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SUJpbmRpbmcoKSwgImJpbmRpbmciLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCBudWxsLCAiYWRkSW1wb3J0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElJbXBvcnQoKSwgImltcG9ydERlZiIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJhZGRNZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElNZXNzYWdlKCksICJtZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgbnVsbCwgImFkZE5hbWVzcGFjZSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInByZWZpeCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWVzcGFjZVVSSSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJhZGRQb3J0VHlwZSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJUG9ydFR5cGUoKSwgInBvcnRUeXBlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgbnVsbCwgImFkZFNlcnZpY2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SVNlcnZpY2UoKSwgInNlcnZpY2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nRmF1bHQoKSwgImNyZWF0ZUJpbmRpbmdGYXVsdCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmdJbnB1dCgpLCAiY3JlYXRlQmluZGluZ0lucHV0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJQmluZGluZ091dHB1dCgpLCAiY3JlYXRlQmluZGluZ091dHB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmdPcGVyYXRpb24oKSwgImNyZWF0ZUJpbmRpbmdPcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nKCksICJjcmVhdGVCaW5kaW5nIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJRmF1bHQoKSwgImNyZWF0ZUZhdWx0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJSW1wb3J0KCksICJjcmVhdGVJbXBvcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElJbnB1dCgpLCAiY3JlYXRlSW5wdXQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNZXNzYWdlKCksICJjcmVhdGVNZXNzYWdlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJT3BlcmF0aW9uKCksICJjcmVhdGVPcGVyYXRpb24iLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElPdXRwdXQoKSwgImNyZWF0ZU91dHB1dCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVBhcnQoKSwgImNyZWF0ZVBhcnQiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElQb3J0KCksICJjcmVhdGVQb3J0IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJUG9ydFR5cGUoKSwgImNyZWF0ZVBvcnRUeXBlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJU2VydmljZSgpLCAiY3JlYXRlU2VydmljZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SUJpbmRpbmcoKSwgImdldEJpbmRpbmciLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNYXAoKSwgImdldEJpbmRpbmdzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJTWFwKCksICJnZXRJbXBvcnRzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJTGlzdCgpLCAiZ2V0SW1wb3J0cyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWVzcGFjZVVSSSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1lc3NhZ2UoKSwgImdldE1lc3NhZ2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNYXAoKSwgImdldE1lc3NhZ2VzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImdldE5hbWVzcGFjZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInByZWZpeCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0TmFtZXNwYWNlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVBvcnRUeXBlKCksICJnZXRQb3J0VHlwZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRRTmFtZSgpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SU1hcCgpLCAiZ2V0UG9ydFR5cGVzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImdldFByZWZpeCIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWVzcGFjZVVSSSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVNlcnZpY2UoKSwgImdldFNlcnZpY2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElNYXAoKSwgImdldFNlcnZpY2VzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJRXh0ZW5zaW9uUmVnaXN0cnkoKSwgImdldEV4dGVuc2lvblJlZ2lzdHJ5IiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgbnVsbCwgInNldEV4dGVuc2lvblJlZ2lzdHJ5Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldElFeHRlbnNpb25SZWdpc3RyeSgpLCAiZXh0ZW5zaW9uUmVnaXN0cnkiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZ2V0RG9jdW1lbnRCYXNlVVJJIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgbnVsbCwgInNldERvY3VtZW50QmFzZVVSSSIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImRvY3VtZW50QmFzZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVR5cGVzKCksICJjcmVhdGVUeXBlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVNlcnZpY2UoKSwgInJlbW92ZVNlcnZpY2UiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UU5hbWUoKSwgIm5hbWUiLCAwLCAxKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKGlEZWZpbml0aW9uRUNsYXNzLCB0aGlzLmdldElCaW5kaW5nKCksICJyZW1vdmVCaW5kaW5nIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJUG9ydFR5cGUoKSwgInJlbW92ZVBvcnRUeXBlIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLSAgICBhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFFOYW1lKCksICJuYW1lIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbihpRGVmaW5pdGlvbkVDbGFzcywgdGhpcy5nZXRJTWVzc2FnZSgpLCAicmVtb3ZlTWVzc2FnZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRRTmFtZSgpLCAibmFtZSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIHRoaXMuZ2V0SVR5cGVzKCksICJnZXRUeXBlcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBvcCA9IGFkZEVPcGVyYXRpb24oaURlZmluaXRpb25FQ2xhc3MsIG51bGwsICJzZXRUeXBlcyIpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJVHlwZXMoKSwgInR5cGVzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaUltcG9ydEVDbGFzcywgamF2YXgud3NkbC5JbXBvcnQuY2xhc3MsICJJSW1wb3J0IiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoaUxpc3RFQ2xhc3MsIExpc3QuY2xhc3MsICJJTGlzdCIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlNYXBFQ2xhc3MsIE1hcC5jbGFzcywgIklNYXAiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpdXJsRUNsYXNzLCBVUkwuY2xhc3MsICJJVVJMIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGluaXRFQ2xhc3MoCi0gICAgICBpRXh0ZW5zaW9uUmVnaXN0cnlFQ2xhc3MsCi0gICAgICBFeHRlbnNpb25SZWdpc3RyeS5jbGFzcywKLSAgICAgICJJRXh0ZW5zaW9uUmVnaXN0cnkiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyh0eXBlc0VDbGFzcywgVHlwZXMuY2xhc3MsICJUeXBlcyIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgb3AgPSBhZGRFT3BlcmF0aW9uKHR5cGVzRUNsYXNzLCB0aGlzLmdldElMaXN0KCksICJnZXRTY2hlbWFzIiwgMCwgMSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG9wID0gYWRkRU9wZXJhdGlvbih0eXBlc0VDbGFzcywgdGhpcy5nZXRJTGlzdCgpLCAiZ2V0U2NoZW1hcyIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0gICAgYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWVzcGFjZVVSSSIsIDAsIDEpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKGlJdGVyYXRvckVDbGFzcywgSXRlcmF0b3IuY2xhc3MsICJJSXRlcmF0b3IiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhpVHlwZXNFQ2xhc3MsIGphdmF4LndzZGwuVHlwZXMuY2xhc3MsICJJVHlwZXMiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcygKLSAgICAgIHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudEVDbGFzcywKLSAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywKLSAgICAgICJVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudF9DaGlsZHJlbigpLAotICAgICAgdGhpcy5nZXRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSwKLSAgICAgIG51bGwsCi0gICAgICAiY2hpbGRyZW4iLCBudWxsLCAwLCAtMSwgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpbml0RUNsYXNzKAotICAgICAgeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRFQ2xhc3MsCi0gICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywKLSAgICAgICJYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFUmVmZXJlbmNlKAotICAgICAgZ2V0WFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRfU2NoZW1hKCksCi0gICAgICB0aGVYU0RQYWNrYWdlLmdldFhTRFNjaGVtYSgpLAotICAgICAgbnVsbCwKLSAgICAgICJzY2hlbWEiLCBudWxsLCAwLCAxLCBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgaW5pdEVDbGFzcyhtZXNzYWdlUmVmZXJlbmNlRUNsYXNzLCBNZXNzYWdlUmVmZXJlbmNlLmNsYXNzLCAiTWVzc2FnZVJlZmVyZW5jZSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVBdHRyaWJ1dGUoCi0gICAgICBnZXRNZXNzYWdlUmVmZXJlbmNlX05hbWUoKSwKLSAgICAgIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksCi0gICAgICAibmFtZSIsIG51bGwsIDAsIDEsIE1lc3NhZ2VSZWZlcmVuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RVJlZmVyZW5jZSgKLSAgICAgIGdldE1lc3NhZ2VSZWZlcmVuY2VfRU1lc3NhZ2UoKSwKLSAgICAgIHRoaXMuZ2V0TWVzc2FnZSgpLAotICAgICAgbnVsbCwKLSAgICAgICJlTWVzc2FnZSIsIG51bGwsIDEsIDEsIE1lc3NhZ2VSZWZlcmVuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIC8vIEluaXRpYWxpemUgZGF0YSB0eXBlcwotICAgIGluaXRFRGF0YVR5cGUocU5hbWVFRGF0YVR5cGUsIFFOYW1lLmNsYXNzLCAiUU5hbWUiLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVEYXRhVHlwZShvcGVyYXRpb25UeXBlRURhdGFUeXBlLCBPcGVyYXRpb25UeXBlLmNsYXNzLCAiT3BlcmF0aW9uVHlwZSIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLSAgICBpbml0RURhdGFUeXBlKGRvbUVsZW1lbnRFRGF0YVR5cGUsIEVsZW1lbnQuY2xhc3MsICJET01FbGVtZW50IiwgSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAotICAgIGluaXRFRGF0YVR5cGUod3NkbEV4Y2VwdGlvbkVEYXRhVHlwZSwgV1NETEV4Y2VwdGlvbi5jbGFzcywgIldTRExFeGNlcHRpb24iLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCi0gICAgaW5pdEVEYXRhVHlwZShkb21Eb2N1bWVudEVEYXRhVHlwZSwgRG9jdW1lbnQuY2xhc3MsICJET01Eb2N1bWVudCIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIC8vIENyZWF0ZSByZXNvdXJjZQotICAgIGNyZWF0ZVJlc291cmNlKGVOU19VUkkpOwotICB9Ci0KLX0gLy9XU0RMUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC9YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFlZjY5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL2ltcGwvWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGw7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RTY2hlbWFJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwjZ2V0U2NoZW1hIDxlbT5TY2hlbWE8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgZXh0ZW5kcyBFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgaW1wbGVtZW50cyBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudAotewotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2NoZW1hKCkgPGVtPlNjaGVtYTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHNlZSAjZ2V0U2NoZW1hKCkKLSAgICogQGdlbmVyYXRlZAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIFhTRFNjaGVtYSBzY2hlbWEgPSBudWxsOwotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpCi0gIHsKLSAgICByZXR1cm4gV1NETFBhY2thZ2UuTGl0ZXJhbHMuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQ7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBYU0RTY2hlbWEgZ2V0U2NoZW1hKCkKLSAgewotICAgIHJldHVybiBzY2hlbWE7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFNjaGVtYShYU0RTY2hlbWEgbmV3U2NoZW1hLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKQotICB7Ci0gICAgWFNEU2NoZW1hIG9sZFNjaGVtYSA9IHNjaGVtYTsKLSAgICBzY2hlbWEgPSBuZXdTY2hlbWE7Ci0gICAgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgIHsKLSAgICAgIEVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCgKLSAgICAgICAgdGhpcywKLSAgICAgICAgTm90aWZpY2F0aW9uLlNFVCwKLSAgICAgICAgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSwKLSAgICAgICAgb2xkU2NoZW1hLAotICAgICAgICBuZXdTY2hlbWEpOwotICAgICAgaWYgKG1zZ3MgPT0gbnVsbCkKLSAgICAgICAgbXNncyA9IG5vdGlmaWNhdGlvbjsKLSAgICAgIGVsc2UKLSAgICAgICAgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1zZ3M7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNjaGVtYShYU0RTY2hlbWEgbmV3U2NoZW1hKQotICB7Ci0gICAgaWYgKG5ld1NjaGVtYSAhPSBzY2hlbWEpCi0gICAgewotICAgICAgTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7Ci0gICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIG1zZ3MgPSAoKEludGVybmFsRU9iamVjdClzY2hlbWEpLmVJbnZlcnNlUmVtb3ZlKAotICAgICAgICAgIHRoaXMsCi0gICAgICAgICAgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUEsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBtc2dzKTsKLSAgICAgIGlmIChuZXdTY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld1NjaGVtYSkuZUludmVyc2VBZGQoCi0gICAgICAgICAgdGhpcywKLSAgICAgICAgICBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSwKLSAgICAgICAgICBudWxsLAotICAgICAgICAgIG1zZ3MpOwotICAgICAgbXNncyA9IGJhc2ljU2V0U2NoZW1hKG5ld1NjaGVtYSwgbXNncyk7Ci0gICAgICBpZiAobXNncyAhPSBudWxsKQotICAgICAgICBtc2dzLmRpc3BhdGNoKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotICAgICAgZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQSwgbmV3U2NoZW1hLCBuZXdTY2hlbWEpKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQToKLSAgICAgIHJldHVybiBiYXNpY1NldFNjaGVtYShudWxsLCBtc2dzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BOgotICAgICAgcmV0dXJuIGdldFNjaGVtYSgpOwotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKGZlYXR1cmVJRCkKLSAgICB7Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlhTRF9TQ0hFTUFfRVhURU5TSUJJTElUWV9FTEVNRU5UX19TQ0hFTUE6Ci0gICAgICBzZXRTY2hlbWEoKFhTRFNjaGVtYSluZXdWYWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKQotICB7Ci0gICAgc3dpdGNoIChmZWF0dXJlSUQpCi0gICAgewotICAgICAgY2FzZSBXU0RMUGFja2FnZS5YU0RfU0NIRU1BX0VYVEVOU0lCSUxJVFlfRUxFTUVOVF9fU0NIRU1BOgotICAgICAgc2V0U2NoZW1hKChYU0RTY2hlbWEpbnVsbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkKLSAgewotICAgIHN3aXRjaCAoZmVhdHVyZUlEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlRfX1NDSEVNQToKLSAgICAgIHJldHVybiBzY2hlbWEgIT0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsI3JlY29uY2lsZShvcmcudzNjLmRvbS5FbGVtZW50KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlKEVsZW1lbnQgY2hhbmdlZEVsZW1lbnQpCi0gIHsKLSAgICBlbGVtZW50ID0gY2hhbmdlZEVsZW1lbnQ7IC8vIFRoaXMgbGluZSBtYXkgbm90IG5lZWRlZC4gICAgCi0gICAgaWYgKHNjaGVtYSA9PSBudWxsKQotICAgIHsKLSAgICAgIFhTRFNjaGVtYSBuZXdTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmNyZWF0ZVNjaGVtYShjaGFuZ2VkRWxlbWVudCk7Ci0gICAgICBzZXRTY2hlbWEobmV3U2NoZW1hKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgWFNEU2NoZW1hIGNyZWF0ZVNjaGVtYShFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoInNjaGVtYSIpICYmIFhTRENvbnN0YW50cy5pc1NjaGVtYUZvclNjaGVtYU5hbWVzcGFjZShlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICB7Ci0gICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEU2NoZW1hKCk7Ci0gICAgICB4c2RTY2hlbWEuc2V0RWxlbWVudChlbGVtZW50KTsKLSAgICAgIHJldHVybiB4c2RTY2hlbWE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkKLSAgewotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICByZXR1cm4gZWxlbWVudDsKLSAgICBlbHNlIGlmIChnZXRTY2hlbWEoKSAhPSBudWxsKQotICAgICAgZWxlbWVudCA9IGdldFNjaGVtYSgpLmdldEVsZW1lbnQoKTsKLQotICAgIHJldHVybiBlbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudChFbGVtZW50IG5ld0VsZW1lbnQpCi0gIHsKLSAgICBpZiAobmV3RWxlbWVudCA9PSBudWxsICYmICFpc1JlY29uY2lsaW5nKQotICAgIHsKLSAgICAgIGVsZW1lbnQgPSBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0RWxlbWVudEdlbihuZXdFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQgTk9UCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICB7Ci0gICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpCi0gICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsIFhTRENvbnN0YW50cy5TQ0hFTUFfRUxFTUVOVF9UQUcpOwotCi0gICAgcmV0dXJuIGVsZW1lbnRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkIE5PVAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudFR5cGUoUU5hbWUgbmV3RWxlbWVudFR5cGUpCi0gIHsKLSAgICAvLyBTaG91bGQgbm90IGRvIGFueXRoaW5nLgotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KQotICB7Ci0gICAgc3VwZXIucmVjb25jaWxlQXR0cmlidXRlcyhjaGFuZ2VkRWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBjcmVhdGVFbGVtZW50KCkKLSAgewotICAgIGlmIChzY2hlbWEgPT0gbnVsbCkgLy8ga2IgTm90ZTogVGhpcyBjYXNlIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW4uCi0gICAgewotICAgICAgLy8gY3MgLi4uIHdoeSBkbyB3ZSBkbyB0aGlzIGlmIGl0cyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuPwotICAgICAgLy8gSXMgdGhlcmUgYSBzY2VuYXJpbyB3aGVyZSB0aGlzIGlzIGEgdXNlZnVsbCBmYWxsYmFjaz8KLSAgICAgIC8vIFVuZGVyIHdoYXQgY29uZGl0aW9ucyBkb2VzIHRoaXMgY29kZSBnZXQgZXhlY3V0ZWQgKGkuZS4gd2h5IHdvdWxkIHNjaGVtYSA9PSBudWxsKT8KLSAgICAgIHNjaGVtYSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFNjaGVtYSgpOwotICAgICAgc2NoZW1hLnNldFNjaGVtYUZvclNjaGVtYVFOYW1lUHJlZml4KCJ4c2QiKTsKLSAgICAgIHNjaGVtYS5zZXRUYXJnZXROYW1lc3BhY2UoImh0dHA6Ly90ZW1wdXJpLm9yZy8iKTsKLSAgICAgIGphdmEudXRpbC5NYXAgcU5hbWVQcmVmaXhUb05hbWVzcGFjZU1hcCA9IHNjaGVtYS5nZXRRTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwKCk7Ci0gICAgICBxTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwLnB1dCgiIiwgc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICAgIHFOYW1lUHJlZml4VG9OYW1lc3BhY2VNYXAucHV0KHNjaGVtYS5nZXRTY2hlbWFGb3JTY2hlbWFRTmFtZVByZWZpeCgpLCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotICAgICAgYWRvcHQoc2NoZW1hKTsKLSAgICAgIHNjaGVtYS51cGRhdGVFbGVtZW50KHRydWUpOwotICAgICAgcmV0dXJuIHNjaGVtYS5nZXRFbGVtZW50KCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlbGVtZW50ID0gc2NoZW1hLmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChlbGVtZW50ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGFkb3B0KHNjaGVtYSk7Ci0gICAgICAgIHNjaGVtYS51cGRhdGVFbGVtZW50KHRydWUpOwotICAgICAgICBlbGVtZW50ID0gc2NoZW1hLmdldEVsZW1lbnQoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZG9wdChYU0RTY2hlbWEgeHNkU2NoZW1hKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIGRvY3VtZW50ID0gKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS51cGRhdGVEb2N1bWVudCgpOwotCi0gICAgaWYgKHhzZFNjaGVtYS5nZXREb2N1bWVudCgpICE9IG51bGwpCi0gICAgICB4c2RTY2hlbWEuc2V0RG9jdW1lbnQobnVsbCk7Ci0KLSAgICB4c2RTY2hlbWEuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotICB9Ci0KLSAgLyoKLSAgIHByaXZhdGUgRWxlbWVudCBhZG9wdChFbGVtZW50IGVsZW1lbnQpCi0gICB7Ci0gICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICBpZiAoZGVmaW5pdGlvbiA9PSBudWxsKQotICAgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgIERvY3VtZW50IGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgaWYgKGRvY3VtZW50ID09IG51bGwpCi0gICBkb2N1bWVudCA9ICgoRGVmaW5pdGlvbkltcGwpIGRlZmluaXRpb24pLnVwZGF0ZURvY3VtZW50KCk7Ci0gICAKLSAgIHJldHVybiAoRWxlbWVudClkb2N1bWVudC5pbXBvcnROb2RlKGVsZW1lbnQsdHJ1ZSk7Ci0gICB9Ci0gICAqLwotCi0gIHByb3RlY3RlZCB2b2lkIGNoYW5nZUF0dHJpYnV0ZShFQXR0cmlidXRlIGVBdHRyaWJ1dGUpCi0gIHsKLSAgICBpZiAoaXNSZWNvbmNpbGluZykKLSAgICAgIHJldHVybjsKLQotICAgIC8vIFRPRE8uLi4gcmV2aXN0IHRoaXMgYmxvY2sgb2YgY29kZQotICAgIC8vCi0gICAgaWYgKGVBdHRyaWJ1dGUgPT0gbnVsbCB8fCBlQXR0cmlidXRlID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXRYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudF9TY2hlbWEoKSkKLSAgICB7Ci0gICAgICAvLyBXZSBnb3QgYSBuZXcgc2NoZW1hIHNvIHJlLXBhcmVudCBpdC4KLSAgICAgIC8vIGNzLi4uIGFyZSB3ZSByZWFsbHkgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nIGhlcmU/ICB0aGlzIHNlZW1zIHN0cmFuZ2UKLSAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKChzY2hlbWEuZ2V0RWxlbWVudCgpID09IG51bGwgJiYgZ2V0RWxlbWVudCgpID09IG51bGwpIHx8IChzY2hlbWEuZ2V0RWxlbWVudCgpICE9IGdldEVsZW1lbnQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBzY2hlbWEuc2V0RG9jdW1lbnQobnVsbCk7Ci0gICAgICAgICAgc2NoZW1hLnNldEVsZW1lbnQobnVsbCk7Ci0gICAgICAgICAgYWRvcHQoc2NoZW1hKTsKLSAgICAgICAgICBzY2hlbWEudXBkYXRlRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGVBdHRyaWJ1dGUgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFdTRExFbGVtZW50X0VsZW1lbnQoKSkKLSAgICB7Ci0gICAgICBzZXRTY2hlbWEoY3JlYXRlU2NoZW1hKGVsZW1lbnQpKTsgLy8gZWxlbWVudCBpcyBub3QgbnVsbAotICAgIH0KLSAgfQotfSAvL1hTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETEZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MDZhNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGo7Ci0KLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFdyaXRlcjsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NETEZhY3RvcnlJbXBsIGV4dGVuZHMgV1NETEZhY3RvcnkKLXsKLQotICAvL3B1YmxpYyBzdGF0aWMgV1NETEZhY3RvcnkgbmV3SW5zdGFuY2UoKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAvL3sKLSAgLy8gIHJldHVybiBuZXcgV1NETEZhY3RvcnlJbXBsKCk7Ci0gIC8vfQotCi0gIHB1YmxpYyBXU0RMRmFjdG9yeUltcGwoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgRGVmaW5pdGlvbiBuZXdEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICB9Ci0KLSAgcHVibGljIEV4dGVuc2lvblJlZ2lzdHJ5IG5ld1BvcHVsYXRlZEV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFdTRExSZWFkZXIgbmV3V1NETFJlYWRlcigpCi0gIHsKLSAgICBXU0RMUmVhZGVyIHJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotICAgIHJlYWRlci5zZXRGYWN0b3J5SW1wbE5hbWUoZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgIHJldHVybiByZWFkZXI7Ci0gIH0KLQotICBwdWJsaWMgV1NETFdyaXRlciBuZXdXU0RMV3JpdGVyKCkKLSAgewotICAgIHJldHVybiBuZXcgV1NETFdyaXRlckltcGwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMUmVhZGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMUmVhZGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjk2M2Y2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETFJlYWRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMTG9jYXRvcjsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIFdTRExSZWFkZXJJbXBsIGltcGxlbWVudHMgV1NETFJlYWRlcgotewotICBwcml2YXRlIFN0cmluZyBmYWN0b3J5SW1wbE5hbWU7Ci0KLSAgcHJpdmF0ZSBFeHRlbnNpb25SZWdpc3RyeSBleHRSZWc7Ci0KLSAgcHVibGljIEV4dGVuc2lvblJlZ2lzdHJ5IGdldEV4dGVuc2lvblJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiBleHRSZWc7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFeHRlbnNpb25SZWdpc3RyeShFeHRlbnNpb25SZWdpc3RyeSBleHRSZWcpCi0gIHsKLSAgICB0aGlzLmV4dFJlZyA9IGV4dFJlZzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFjdG9yeUltcGxOYW1lKCkKLSAgewotICAgIHJldHVybiBmYWN0b3J5SW1wbE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRGYWN0b3J5SW1wbE5hbWUoU3RyaW5nIGZhY3RvcnlJbXBsTmFtZSkgdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzLmZhY3RvcnlJbXBsTmFtZSA9IGZhY3RvcnlJbXBsTmFtZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldEZlYXR1cmUoU3RyaW5nIG5hbWUpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEZlYXR1cmUoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk5vdCBJbXBsZW1lbnRlZCIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIFdTREwgZG9jdW1lbnQgYWNjZXNzaWJsZSB2aWEgdGhlIHNwZWNpZmllZAotICAgKiBVUkkgaW50byBhIFdTREwgZGVmaW5pdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIHdzZGxVUkkgYSBVUkkgKGNhbiBiZSBhIGZpbGVuYW1lIG9yIFVSTCkgcG9pbnRpbmcgdG8gYQotICAgKiBXU0RMIFhNTCBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBkZWZpbml0aW9uLgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gcmVhZFdTREwoU3RyaW5nIHdzZGxVUkkpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBVUkkgdXJpOwotICAgIGlmIChoYXNQcm90b2NvbCh3c2RsVVJJKSkKLSAgICAgIHVyaSA9IFVSSS5jcmVhdGVVUkkod3NkbFVSSSk7Ci0gICAgZWxzZQotICAgICAgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkod3NkbFVSSSk7Ci0KLSAgICAvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQsIGNyZWF0ZSBhIHdzZGwgcmVzb3VyY2UsIGFuZCBsb2FkIHRoZSBtYWluIHdzZGwgZmlsZSBpbnRvIGl0LgotCi0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIndzZGwiLCBuZXcgV1NETFJlc291cmNlRmFjdG9yeUltcGwoKSk7Ci0KLSAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxNYWluUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClyZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSk7Ci0gICAgd3NkbE1haW5SZXNvdXJjZS5zZXRVUkkodXJpKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gcmVzb3VyY2VTZXQuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0odXJpKTsKLSAgICAgIHdzZGxNYWluUmVzb3VyY2UubG9hZChpbnB1dFN0cmVhbSwgcmVzb3VyY2VTZXQuZ2V0TG9hZE9wdGlvbnMoKSk7Ci0gICAgICAvL3dzZGxNYWluUmVzb3VyY2UubG9hZChyZXNvdXJjZVNldC5nZXRMb2FkT3B0aW9ucygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5JTlZBTElEX1dTREwsICJXU0RMIFVSSTogIiArIHdzZGxVUkksIGUpOwotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIG1haW4gcmVzb3VyY2UuCi0gICAgcmV0dXJuIHdzZGxNYWluUmVzb3VyY2UuZ2V0RGVmaW5pdGlvbigpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGhhc1Byb3RvY29sKFN0cmluZyB1cmkpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmICh1cmkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSB1cmkuaW5kZXhPZigiOiIpOwotICAgICAgaWYgKGluZGV4ICE9IC0xICYmIGluZGV4ID4gMikgLy8gYXNzdW1lIHByb3RvY29sIHdpdGggYmUgbGVuZ3RoIDMgc28gdGhhdCB0aGUnQycgaW4gJ0M6LycgaXMgbm90IGludGVycHJldGVkIGFzIGEgcHJvdG9jb2wKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBXU0RMIGRvY3VtZW50IGFjY2Vzc2libGUgdmlhIHRoZSBzcGVjaWZpZWQKLSAgICogVVJJIGludG8gYSBXU0RMIGRlZmluaXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBjb250ZXh0VVJJIHRoZSBjb250ZXh0IGluIHdoaWNoIHRvIHJlc29sdmUgdGhlCi0gICAqIHdzZGxVUkksIGlmIHRoZSB3c2RsVVJJIGlzIHJlbGF0aXZlLiBDYW4gYmUgbnVsbCwgaW4gd2hpY2gKLSAgICogY2FzZSBpdCB3aWxsIGJlIGlnbm9yZWQuCi0gICAqIEBwYXJhbSB3c2RsVVJJIGEgVVJJIChjYW4gYmUgYSBmaWxlbmFtZSBvciBVUkwpIHBvaW50aW5nIHRvIGEKLSAgICogV1NETCBYTUwgZGVmaW5pdGlvbi4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbi4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIHJlYWRXU0RMKFN0cmluZyBjb250ZXh0VVJJLCBTdHJpbmcgd3NkbFVSSSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uT1RIRVJfRVJST1IsICJOb3QgSW1wbGVtZW50ZWQiKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBzcGVjaWZpZWQgJmx0O3dzZGw6ZGVmaW5pdGlvbnMmZ3Q7IGVsZW1lbnQgaW50byBhIFdTREwKLSAgICogZGVmaW5pdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIGRvY3VtZW50QmFzZVVSSSB0aGUgZG9jdW1lbnQgYmFzZSBVUkkgb2YgdGhlIFdTREwgZGVmaW5pdGlvbgotICAgKiBkZXNjcmliZWQgYnkgdGhlIGVsZW1lbnQuIFdpbGwgYmUgc2V0IGFzIHRoZSBkb2N1bWVudEJhc2VVUkkKLSAgICogb2YgdGhlIHJldHVybmVkIERlZmluaXRpb24uIENhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNlIGl0Ci0gICAqIHdpbGwgYmUgaWdub3JlZC4KLSAgICogQHBhcmFtIGRlZmluaXRpb25zRWxlbWVudCB0aGUgJmx0O3dzZGw6ZGVmaW5pdGlvbnMmZ3Q7IGVsZW1lbnQKLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBkZXNjcmliZWQgYnkgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiByZWFkV1NETChTdHJpbmcgZG9jdW1lbnRCYXNlVVJJLCBFbGVtZW50IGRlZmluaXRpb25zRWxlbWVudCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uT1RIRVJfRVJST1IsICJOb3QgSW1wbGVtZW50ZWQiKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBzcGVjaWZpZWQgV1NETCBkb2N1bWVudCBpbnRvIGEgV1NETCBkZWZpbml0aW9uLgotICAgKgotICAgKiBAcGFyYW0gZG9jdW1lbnRCYXNlVVJJIHRoZSBkb2N1bWVudCBiYXNlIFVSSSBvZiB0aGUgV1NETCBkZWZpbml0aW9uCi0gICAqIGRlc2NyaWJlZCBieSB0aGUgZG9jdW1lbnQuIFdpbGwgYmUgc2V0IGFzIHRoZSBkb2N1bWVudEJhc2VVUkkKLSAgICogb2YgdGhlIHJldHVybmVkIERlZmluaXRpb24uIENhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNlIGl0Ci0gICAqIHdpbGwgYmUgaWdub3JlZC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCB0aGUgV1NETCBkb2N1bWVudCwgYW4gWE1MIAotICAgKiBkb2N1bWVudCBvYmV5aW5nIHRoZSBXU0RMIHNjaGVtYS4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gcmVhZFdTREwoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgRG9jdW1lbnQgd3NkbERvY3VtZW50KSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiwgIk5vdCBJbXBsZW1lbnRlZCIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgYSBXU0RMIGRvY3VtZW50IGludG8gYSBXU0RMIGRlZmluaXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgdGhlIGRvY3VtZW50IGJhc2UgVVJJIG9mIHRoZSBXU0RMIGRlZmluaXRpb24KLSAgICogZGVzY3JpYmVkIGJ5IHRoZSBkb2N1bWVudC4gV2lsbCBiZSBzZXQgYXMgdGhlIGRvY3VtZW50QmFzZVVSSQotICAgKiBvZiB0aGUgcmV0dXJuZWQgRGVmaW5pdGlvbi4gQ2FuIGJlIG51bGwsIGluIHdoaWNoIGNhc2UgaXQKLSAgICogd2lsbCBiZSBpZ25vcmVkLgotICAgKiBAcGFyYW0gaW5wdXRTb3VyY2UgYW4gSW5wdXRTb3VyY2UgcG9pbnRpbmcgdG8gdGhlCi0gICAqIFdTREwgZG9jdW1lbnQsIGFuIFhNTCBkb2N1bWVudCBvYmV5aW5nIHRoZSBXU0RMIHNjaGVtYS4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50IHBvaW50ZWQgdG8KLSAgICogYnkgdGhlIElucHV0U291cmNlLgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gcmVhZFdTREwoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICByZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgid3NkbCIsIG5ldyBXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKLSAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxNYWluUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClyZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoZG9jdW1lbnRCYXNlVVJJICE9IG51bGwpCi0gICAgICAgIHdzZGxNYWluUmVzb3VyY2Uuc2V0VVJJKGNyZWF0ZVVSSShkb2N1bWVudEJhc2VVUkkpKTsKLSAgICAgIHJlc291cmNlU2V0LmdldExvYWRPcHRpb25zKCkucHV0KFdTRExSZXNvdXJjZUltcGwuQ09OVElOVUVfT05fTE9BRF9FUlJPUiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsKLSAgICAgIHdzZGxNYWluUmVzb3VyY2UubG9hZChpbnB1dFNvdXJjZS5nZXRCeXRlU3RyZWFtKCksIHJlc291cmNlU2V0LmdldExvYWRPcHRpb25zKCkpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uSU5WQUxJRF9XU0RMLCAiIiwgaW9lKTsKLSAgICB9Ci0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsTWFpblJlc291cmNlLmdldERlZmluaXRpb24oKTsKLSAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudEJhc2VVUkkoZG9jdW1lbnRCYXNlVVJJKTsKLQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgYSBXU0RMIGRvY3VtZW50IGludG8gYSBXU0RMIGRlZmluaXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBsb2NhdG9yIEEgV1NETExvY2F0b3Igb2JqZWN0IHVzZWQgdG8gcHJvdmlkZSBJbnB1dFNvdXJjZXMKLSAgICogcG9pbnRpbmcgdG8gdGhlIHdzZGwgZmlsZS4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50Ci0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiByZWFkV1NETChXU0RMTG9jYXRvciBsb2NhdG9yKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5PVEhFUl9FUlJPUiwgIk5vdCBJbXBsZW1lbnRlZCIpOwotICB9Ci0KLSAgcHJpdmF0ZSBVUkkgY3JlYXRlVVJJKFN0cmluZyB1cmlTdHJpbmcpCi0gIHsKLSAgICBpZiAoaGFzUHJvdG9jb2wodXJpU3RyaW5nKSkKLSAgICAgIHJldHVybiBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIFVSSS5jcmVhdGVGaWxlVVJJKHVyaVN0cmluZyk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMV3JpdGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC9pbXBsL3dzZGw0ai9XU0RMV3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjY5ZjZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvaW1wbC93c2RsNGovV1NETFdyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMV3JpdGVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXU0RMV3JpdGVySW1wbCBpbXBsZW1lbnRzIFdTRExXcml0ZXIKLXsKLSAgLyoqCi0gICAqIFNldHMgdGhlIHNwZWNpZmllZCBmZWF0dXJlIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCi0gICAqIDxwPgotICAgKiBUaGVyZSBhcmUgbm8gbWluaW11bSBmZWF0dXJlcyB0aGF0IG11c3QgYmUgc3VwcG9ydGVkLgotICAgKiA8cD4KLSAgICogQWxsIGZlYXR1cmUgbmFtZXMgbXVzdCBiZSBmdWxseS1xdWFsaWZpZWQsIEphdmEgcGFja2FnZSBzdHlsZS4gQWxsCi0gICAqIG5hbWVzIHN0YXJ0aW5nIHdpdGggamF2YXgud3NkbC4gYXJlIHJlc2VydmVkIGZvciBmZWF0dXJlcyBkZWZpbmVkCi0gICAqIGJ5IHRoZSBKV1NETCBzcGVjaWZpY2F0aW9uLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGltcGxlbWVudGF0aW9uLQotICAgKiBzcGVjaWZpYyBmZWF0dXJlcyBiZSBmdWxseS1xdWFsaWZpZWQgdG8gbWF0Y2ggdGhlIHBhY2thZ2UgbmFtZQotICAgKiBvZiB0aGF0IGltcGxlbWVudGF0aW9uLiBGb3IgZXhhbXBsZTogY29tLmFiYy5mZWF0dXJlTmFtZQotICAgKgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBiZSBzZXQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gc2V0IHRoZSBmZWF0dXJlIHRvLgotICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgZmVhdHVyZSBuYW1lIGlzIG5vdCByZWNvZ25pemVkLgotICAgKiBAc2VlICNnZXRGZWF0dXJlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZlYXR1cmUoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk5vdCBJbXBsZW1lbnRlZCIpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZmVhdHVyZS4KLSAgICoKLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gZ2V0IHRoZSB2YWx1ZSBvZi4KLSAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGZlYXR1cmUgbmFtZSBpcyBub3QgcmVjb2duaXplZC4KLSAgICogQHNlZSAjc2V0RmVhdHVyZShTdHJpbmcsIGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRGZWF0dXJlKFN0cmluZyBuYW1lKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJOb3QgSW1wbGVtZW50ZWQiKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBkb2N1bWVudCBnZW5lcmF0ZWQgZnJvbSB0aGUgc3BlY2lmaWVkIFdTREwgbW9kZWwuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoRGVmaW5pdGlvbiB3c2RsRGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuICgoRGVmaW5pdGlvbkltcGwpd3NkbERlZikuZ2V0RG9jdW1lbnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgc3BlY2lmaWVkIFdTREwgZGVmaW5pdGlvbiB0byB0aGUgc3BlY2lmaWVkIFdyaXRlci4KLSAgICoKLSAgICogQHBhcmFtIHdzZGxEZWYgdGhlIFdTREwgZGVmaW5pdGlvbiB0byBiZSB3cml0dGVuLgotICAgKiBAcGFyYW0gc2luayB0aGUgV3JpdGVyIHRvIHdyaXRlIHRoZSB4bWwgdG8uCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZVdTREwoRGVmaW5pdGlvbiB3c2RsRGVmLCBXcml0ZXIgc2luaykgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBlbmNvZGluZyA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVHJhbnNmb3JtZXJGYWN0b3J5IHRyYW5zZm9ybWVyRmFjdG9yeSA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSB0cmFuc2Zvcm1lckZhY3RvcnkubmV3VHJhbnNmb3JtZXIoKTsKLQotICAgICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLSAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuTUVUSE9ELCAieG1sIik7Ci0KLSAgICAgIC8vIFVubGVzcyBhIHdpZHRoIGlzIHNldCwgdGhlcmUgd2lsbCBiZSBvbmx5IGxpbmUgYnJlYWtzIGJ1dCBubyBpbmRlbnRhdGlvbi4KLSAgICAgIC8vIFRoZSBJQk0gSkRLIGFuZCB0aGUgU3VuIEpESyBkb24ndCBhZ3JlZSBvbiB0aGUgcHJvcGVydHkgbmFtZSwKLSAgICAgIC8vIHNvIHdlIHNldCB0aGVtIGJvdGguCi0gICAgICAvLwotICAgICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW59aW5kZW50LWFtb3VudCIsICIyIik7Ci0gICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiMiIpOwotICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsIGVuY29kaW5nKTsKLSAgICAgIH0KLQotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSAoKERlZmluaXRpb25JbXBsKXdzZGxEZWYpLmdldERvY3VtZW50KCk7Ci0gICAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgKChEZWZpbml0aW9uSW1wbCl3c2RsRGVmKS51cGRhdGVFbGVtZW50KHRydWUpOwotICAgICAgICBkb2N1bWVudCA9ICgoRGVmaW5pdGlvbkltcGwpd3NkbERlZikuZ2V0RG9jdW1lbnQoKTsKLSAgICAgIH0KLQotICAgICAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpLCBuZXcgU3RyZWFtUmVzdWx0KHNpbmspKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLk9USEVSX0VSUk9SLCAiRmFpbGVkIHRvIHNhdmUgRGVmaW5pdGlvbnMuIiwgZXhjZXB0aW9uKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgc3BlY2lmaWVkIFdTREwgZGVmaW5pdGlvbiB0byB0aGUgc3BlY2lmaWVkIE91dHB1dFN0cmVhbS4KLSAgICoKLSAgICogQHBhcmFtIHdzZGxEZWYgdGhlIFdTREwgZGVmaW5pdGlvbiB0byBiZSB3cml0dGVuLgotICAgKiBAcGFyYW0gc2luayB0aGUgT3V0cHV0U3RyZWFtIHRvIHdyaXRlIHRoZSB4bWwgdG8uCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZVdTREwoRGVmaW5pdGlvbiB3c2RsRGVmLCBPdXRwdXRTdHJlYW0gc2luaykgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotCi0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSAoKERlZmluaXRpb25JbXBsKXdzZGxEZWYpLmVSZXNvdXJjZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIHJlc291cmNlLnNhdmUoc2luaywgbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uT1RIRVJfRVJST1IsICJGYWlsZWQgdG8gc2F2ZSBEZWZpbml0aW9ucy4iLCBlKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9SZWNvbmNpbGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9SZWNvbmNpbGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3OGI2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvUmVjb25jaWxhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vLyBUT0RPLi4uIHdoeSBkbyB3ZSBuZWVkIHRoaXM/Ci0vLyAKLXB1YmxpYyBpbnRlcmZhY2UgUmVjb25jaWxhYmxlCi17Ci0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKLQotICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCk7Ci0KLSAgcHVibGljIHZvaWQgcmVjb25jaWxlQXR0cmlidXRlcyhFbGVtZW50IGNoYW5nZWRFbGVtZW50KTsKLQotICBwdWJsaWMgdm9pZCByZWNvbmNpbGVSZWZlcmVuY2VzKGJvb2xlYW4gZGVlcCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YTIwYzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgV1NETEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIC8qKgotICAgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFdTRExQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExBZGFwdGVyRmFjdG9yeSgpCi0gIHsKLSAgICBpZiAobW9kZWxQYWNrYWdlID09IG51bGwpCi0gICAgewotICAgICAgbW9kZWxQYWNrYWdlID0gV1NETFBhY2thZ2UuZUlOU1RBTkNFOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkKLSAgewotICAgIGlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkKLSAgICB7Ci0gICAgICByZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgc3dpdGNoIHRoZSBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBXU0RMU3dpdGNoIG1vZGVsU3dpdGNoID0gbmV3IFdTRExTd2l0Y2goKQotICAgIHsKLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVdTRExFbGVtZW50KFdTRExFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVdTRExFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VQb3J0VHlwZShQb3J0VHlwZSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVQb3J0VHlwZUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlT3BlcmF0aW9uKE9wZXJhdGlvbiBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb25BZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZU1lc3NhZ2UoTWVzc2FnZSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VQYXJ0KFBhcnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlUGFydEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZyhCaW5kaW5nIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpbmRpbmdBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVCaW5kaW5nT3BlcmF0aW9uQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VTZXJ2aWNlKFNlcnZpY2Ugb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlU2VydmljZUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlUG9ydChQb3J0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVBvcnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VEZWZpbml0aW9uKERlZmluaXRpb24gb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRGVmaW5pdGlvbkFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSW1wb3J0KEltcG9ydCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJbXBvcnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUV4dGVuc2libGVFbGVtZW50KEV4dGVuc2libGVFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUV4dGVuc2libGVFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJbnB1dChJbnB1dCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJbnB1dEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlT3V0cHV0KE91dHB1dCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVPdXRwdXRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUZhdWx0KEZhdWx0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZhdWx0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpbmRpbmdJbnB1dEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpbmRpbmdPdXRwdXRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUJpbmRpbmdGYXVsdChCaW5kaW5nRmF1bHQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQmluZGluZ0ZhdWx0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VOYW1lc3BhY2UoTmFtZXNwYWNlIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU5hbWVzcGFjZUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVBvcnRUeXBlKGphdmF4LndzZGwuUG9ydFR5cGUgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVBvcnRUeXBlQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJT3BlcmF0aW9uKGphdmF4LndzZGwuT3BlcmF0aW9uIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlPcGVyYXRpb25BZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlJbnB1dChqYXZheC53c2RsLklucHV0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlJbnB1dEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU91dHB1dChqYXZheC53c2RsLk91dHB1dCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJT3V0cHV0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJRmF1bHQoamF2YXgud3NkbC5GYXVsdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJRmF1bHRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlNZXNzYWdlKGphdmF4LndzZGwuTWVzc2FnZSBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJTWVzc2FnZUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVBhcnQoamF2YXgud3NkbC5QYXJ0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlQYXJ0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJU2VydmljZShqYXZheC53c2RsLlNlcnZpY2Ugb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVNlcnZpY2VBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlQb3J0KGphdmF4LndzZGwuUG9ydCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJUG9ydEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUJpbmRpbmcoamF2YXgud3NkbC5CaW5kaW5nIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlCaW5kaW5nQWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJQmluZGluZ09wZXJhdGlvbihqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUJpbmRpbmdPcGVyYXRpb25BZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nSW5wdXQoamF2YXgud3NkbC5CaW5kaW5nSW5wdXQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUJpbmRpbmdJbnB1dEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUJpbmRpbmdPdXRwdXQoamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlCaW5kaW5nT3V0cHV0QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJQmluZGluZ0ZhdWx0KGphdmF4LndzZGwuQmluZGluZ0ZhdWx0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlCaW5kaW5nRmF1bHRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlFeHRlbnNpYmlsaXR5RWxlbWVudChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VJRGVmaW5pdGlvbihqYXZheC53c2RsLkRlZmluaXRpb24gb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSURlZmluaXRpb25BZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlJbXBvcnQoamF2YXgud3NkbC5JbXBvcnQgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSUltcG9ydEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUxpc3QoTGlzdCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJTGlzdEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSU1hcChNYXAgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSU1hcEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSVVSTChVUkwgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlSVVSTEFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2lvblJlZ2lzdHJ5KEV4dGVuc2lvblJlZ2lzdHJ5IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlFeHRlbnNpb25SZWdpc3RyeUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlVHlwZXMoVHlwZXMgb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlVHlwZXNBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlJdGVyYXRvcihJdGVyYXRvciBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJSXRlcmF0b3JBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZUlUeXBlcyhqYXZheC53c2RsLlR5cGVzIG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUlUeXBlc0FkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBjYXNlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBPYmplY3QgY2FzZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgT2JqZWN0IGNhc2VNZXNzYWdlUmVmZXJlbmNlKE1lc3NhZ2VSZWZlcmVuY2Ugb2JqZWN0KQotICAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZVJlZmVyZW5jZUFkYXB0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KLSAgICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KQotICB7Ci0gICAgcmV0dXJuIChBZGFwdGVyKW1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCA8ZW0+RWxlbWVudDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVXU0RMRWxlbWVudEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZSA8ZW0+UG9ydCBUeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcnRUeXBlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbiA8ZW0+T3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVPcGVyYXRpb25BZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZSA8ZW0+TWVzc2FnZTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1lc3NhZ2VBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydCA8ZW0+UGFydDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBhcnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZyA8ZW0+QmluZGluZzwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUJpbmRpbmdBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbiA8ZW0+QmluZGluZyBPcGVyYXRpb248L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVCaW5kaW5nT3BlcmF0aW9uQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UgPGVtPlNlcnZpY2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVTZXJ2aWNlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQgPGVtPlBvcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3J0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5FeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbiA8ZW0+RGVmaW5pdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlZmluaXRpb25BZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0IDxlbT5JbXBvcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUltcG9ydEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCA8ZW0+RXh0ZW5zaWJsZSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4dGVuc2libGVFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0IDxlbT5JbnB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnB1dEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQgPGVtPk91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlT3V0cHV0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0IDxlbT5GYXVsdDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVGYXVsdEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQgPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUJpbmRpbmdJbnB1dEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0IDxlbT5CaW5kaW5nIE91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUJpbmRpbmdPdXRwdXRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0IDxlbT5CaW5kaW5nIEZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVCaW5kaW5nRmF1bHRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlIDxlbT5OYW1lc3BhY2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5hbWVzcGFjZUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLlBvcnRUeXBlIDxlbT5JUG9ydCBUeXBlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuUG9ydFR5cGUKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSVBvcnRUeXBlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuT3BlcmF0aW9uIDxlbT5JT3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuT3BlcmF0aW9uCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlPcGVyYXRpb25BZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5JbnB1dCA8ZW0+SUlucHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuSW5wdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUlucHV0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuT3V0cHV0IDxlbT5JT3V0cHV0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuT3V0cHV0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlPdXRwdXRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5GYXVsdCA8ZW0+SUZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuRmF1bHQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUZhdWx0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuTWVzc2FnZSA8ZW0+SU1lc3NhZ2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5NZXNzYWdlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlNZXNzYWdlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuUGFydCA8ZW0+SVBhcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5QYXJ0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlQYXJ0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuU2VydmljZSA8ZW0+SVNlcnZpY2U8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5TZXJ2aWNlCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlTZXJ2aWNlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuUG9ydCA8ZW0+SVBvcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5Qb3J0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlQb3J0QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZyA8ZW0+SUJpbmRpbmc8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlCaW5kaW5nQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiA8ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJQmluZGluZ09wZXJhdGlvbkFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdJbnB1dCA8ZW0+SUJpbmRpbmcgSW5wdXQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUJpbmRpbmdJbnB1dEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgPGVtPklCaW5kaW5nIE91dHB1dDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUJpbmRpbmdPdXRwdXRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQgPGVtPklCaW5kaW5nIEZhdWx0PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuQmluZGluZ0ZhdWx0Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlCaW5kaW5nRmF1bHRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50IDxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5EZWZpbml0aW9uIDxlbT5JRGVmaW5pdGlvbjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLkRlZmluaXRpb24KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSURlZmluaXRpb25BZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YXgud3NkbC5JbXBvcnQgPGVtPklJbXBvcnQ8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YXgud3NkbC5JbXBvcnQKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUltcG9ydEFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuTGlzdCA8ZW0+SUxpc3Q8L2VtPn0nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0gICAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBzZWUgamF2YS51dGlsLkxpc3QKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUxpc3RBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLk1hcCA8ZW0+SU1hcDwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZhLnV0aWwuTWFwCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlNYXBBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5uZXQuVVJMIDxlbT5JVVJMPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIGphdmEubmV0LlVSTAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVJVVJMQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeSA8ZW0+SUV4dGVuc2lvbiBSZWdpc3RyeTwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uUmVnaXN0cnkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUV4dGVuc2lvblJlZ2lzdHJ5QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzIDxlbT5UeXBlczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlcwotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVUeXBlc0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuSXRlcmF0b3IgPGVtPklJdGVyYXRvcjwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZhLnV0aWwuSXRlcmF0b3IKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlSUl0ZXJhdG9yQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmF4LndzZGwuVHlwZXMgPGVtPklUeXBlczwvZW0+fScuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLSAgICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLSAgICogQHNlZSBqYXZheC53c2RsLlR5cGVzCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlUeXBlc0FkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPlVua25vd24gRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgQWRhcHRlciBjcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPGVtPlhTRCBTY2hlbWEgRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UgPGVtPk1lc3NhZ2UgUmVmZXJlbmNlPC9lbT59Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotICAgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2UKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlTWVzc2FnZVJlZmVyZW5jZUFkYXB0ZXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0gLy9XU0RMQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMRGVmaW5pdGlvbkZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMRGVmaW5pdGlvbkZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhNWIyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETERlZmluaXRpb25GYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExQYWNrYWdlSW1wbDsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGw7Ci0KLQotcHVibGljIGNsYXNzIFdTRExEZWZpbml0aW9uRmFjdG9yeSBleHRlbmRzIGNvbS5pYm0ud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5SW1wbAotewotCi0gIHByaXZhdGUgc3RhdGljIFdTRExEZWZpbml0aW9uRmFjdG9yeSBpbnN0YW5jZSA9IG51bGw7Ci0KLSAgcHVibGljIFdTRExEZWZpbml0aW9uRmFjdG9yeSgpCi0gIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIFdTREwgcGFja2FnZSBpcyBpbml0aWFsaXplZC4KLSAgICBXU0RMUGFja2FnZUltcGwuaW5pdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBEZWZpbml0aW9uLgotICAgKi8KLSAgcHVibGljIGphdmF4LndzZGwuRGVmaW5pdGlvbiBuZXdEZWZpbml0aW9uKCkKLSAgewotICAgIGphdmF4LndzZGwuRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gV1NETEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGZhY3RvcnkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5IGdldEluc3RhbmNlKCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgICAgaW5zdGFuY2UgPSBuZXcgV1NETERlZmluaXRpb25GYWN0b3J5KCk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBXU0RMUmVhZGVyLgotICAgKi8KLSAgcHVibGljIFdTRExSZWFkZXIgbmV3V1NETFJlYWRlcigpCi0gIHsKLSAgICBXU0RMUmVhZGVyIHJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotICAgIHJlYWRlci5zZXRGYWN0b3J5SW1wbE5hbWUoZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgIHJldHVybiByZWFkZXI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExNb2RlbExvY2F0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9XU0RMTW9kZWxMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZGFhZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExNb2RlbExvY2F0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsOwotCi0KLS8qKgotICogQW4gYWRhcHRlciBpbnRlcmZhY2UgdXNlZCBieSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0SW1wbCB0byBmaW5kIHJlZmVyZW5jZWQgcmVzb3VyY2VzLgotICogV2hlbiB0aGUgcmVzb3VyY2UgcmVmZXJlbmNlZCBieSBhIHdzZGwgaW1wb3J0IG5lZWRzIHRvIGJlIGRldGVybWluZWQsIAotICogdGhlIGNvbnRhaW5pbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZX0KLSAqIHdpbGwgYmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbCNnZXRSZWdpc3RlcmVkQWRhcHRlcihvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2UsT2JqZWN0KSBpbnNwZWN0ZWR9IAotICogZm9yIGFuIGFkYXB0ZXIgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlLgotICogQXMgc3VjaCwgeW91IGNhbiByZWdpc3RlciBhbiBhZGFwdGVyIGZhY3RvcnkgbGlrZSB0aGlzIHRvIHRhaWxvciB0aGUgYWxnb3JpdGhtIHVzZWQgdG8gbG9jYXRlIHRoZSByZXNvdXJjZSA6Ci0gKjxwcmU+Ci0gKiAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gKiAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZAotICogICAgKG5ldyBBZGFwdGVyRmFjdG9yeUltcGwoKQotICogICAgIHsKLSAqICAgICAgIGNsYXNzIEN1c3RvbVVSSVJlc29sdmVyIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBXU0RMTW9kZWxMb2NhdG9yCi0gKiAgICAgICB7Ci0gKiAgICAgICAgIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pOwotICogICAgICAgICB7Ci0gKiAgICAgICAgICAgcmV0dXJuIG51bGw7ICAvLyBBZGRpdGlvbmFsIGxvZ2ljLi4uCi0gKiAgICAgICAgIH0KLSAqCi0gKiAgICAgICAgIHB1YmxpYyBib29sZWFuIGlzQWRhdHBlckZvclR5cGUoT2JqZWN0IHR5cGUpCi0gKiAgICAgICAgIHsKLSAqICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBXU0RMTW9kZWxMb2NhdG9yLmNsYXNzOwotICogICAgICAgICB9Ci0gKiAgICAgICB9Ci0gKgotICogICAgICAgcHJvdGVjdGVkIEN1c3RvbVVSSVJlc29sdmVyIGN1c3RvbVVSSVJlc29sdmVyID0gbmV3IEN1c3RvbVVSSVJlc29sdmVyKCk7Ci0gKgotICogICAgICAgcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkKLSAqICAgICAgIHsKLSAqICAgICAgICAgcmV0dXJuIHR5cGUgPT0gV1NETE1vZGVsTG9jYXRvci5jbGFzczsKLSAqICAgICAgIH0KLSAqCi0gKiAgICAgICBwdWJsaWMgQWRhcHRlciBhZGFwdE5ldyhOb3RpZmllciB0YXJnZXQsIE9iamVjdCB0eXBlKQotICogICAgICAgewotICogICAgICAgICByZXR1cm4gY3VzdG9tVVJJUmVzb2x2ZXI7Ci0gKiAgICAgICB9Ci0gKiAgICAgfSk7Ci0gKjwvcHJlPgotICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWwjZ2V0UmVnaXN0ZXJlZEFkYXB0ZXIob3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlLE9iamVjdCkKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMTW9kZWxMb2NhdG9yCi17Ci0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZiYzE4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZUZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgV1NETFJlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBSZXNvdXJjZUZhY3RvcnlJbXBsCi17Ci0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBmYWN0b3J5LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkKLSAgewotICAgIFJlc291cmNlIHJlc3VsdCA9IG5ldyBXU0RMUmVzb3VyY2VJbXBsKHVyaSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfSAvL1dTRExSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFN3aXRjaC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkzM2EwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2lvblJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC4qOwotCi0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFdTRExTd2l0Y2gKLXsKLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBXU0RMUGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBXU0RMU3dpdGNoKCkKLSAgewotICAgIGlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBtb2RlbFBhY2thZ2UgPSBXU0RMUGFja2FnZS5lSU5TVEFOQ0U7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpCi0gIHsKLSAgICByZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkKLSAgewotICAgIGlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkKLSAgICB7Ci0gICAgICByZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIExpc3QgZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKLSAgICAgIHJldHVybiBlU3VwZXJUeXBlcy5pc0VtcHR5KCkgPyBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6IGRvU3dpdGNoKChFQ2xhc3MpZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkKLSAgewotICAgIHN3aXRjaCAoY2xhc3NpZmllcklEKQotICAgIHsKLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuV1NETF9FTEVNRU5UOgotICAgICAgewotICAgICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUX1RZUEU6Ci0gICAgICB7Ci0gICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlUG9ydFR5cGUocG9ydFR5cGUpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KHBvcnRUeXBlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJUG9ydFR5cGUocG9ydFR5cGUpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHBvcnRUeXBlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5PUEVSQVRJT046Ci0gICAgICB7Ci0gICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQob3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQob3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFOgotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQobWVzc2FnZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQobWVzc2FnZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuUEFSVDoKLSAgICAgIHsKLSAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VQYXJ0KHBhcnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KHBhcnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlQYXJ0KHBhcnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHBhcnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkc6Ci0gICAgICB7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlQmluZGluZyhiaW5kaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChiaW5kaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQmluZGluZyhiaW5kaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChiaW5kaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09QRVJBVElPTjoKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGJpbmRpbmdPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGJpbmRpbmdPcGVyYXRpb24pOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLlNFUlZJQ0U6Ci0gICAgICB7Ci0gICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlU2VydmljZShzZXJ2aWNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChzZXJ2aWNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJU2VydmljZShzZXJ2aWNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChzZXJ2aWNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5QT1JUOgotICAgICAgewotICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZVBvcnQocG9ydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQocG9ydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSVBvcnQocG9ydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQocG9ydCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuRVhURU5TSUJJTElUWV9FTEVNRU5UOgotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCl0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5ERUZJTklUSU9OOgotICAgICAgewotICAgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbil0aGVFT2JqZWN0OwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gY2FzZURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoZGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoZGVmaW5pdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuSU1QT1JUOgotICAgICAgewotICAgICAgICBJbXBvcnQgaW1wb3J0XyA9IChJbXBvcnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VJbXBvcnQoaW1wb3J0Xyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoaW1wb3J0Xyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUltcG9ydChpbXBvcnRfKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudChpbXBvcnRfKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5FWFRFTlNJQkxFX0VMRU1FTlQ6Ci0gICAgICB7Ci0gICAgICAgIEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50ID0gKEV4dGVuc2libGVFbGVtZW50KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoZXh0ZW5zaWJsZUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGV4dGVuc2libGVFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5JTlBVVDoKLSAgICAgIHsKLSAgICAgICAgSW5wdXQgaW5wdXQgPSAoSW5wdXQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VJbnB1dChpbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlTWVzc2FnZVJlZmVyZW5jZShpbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUlucHV0KGlucHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChpbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoaW5wdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLk9VVFBVVDoKLSAgICAgIHsKLSAgICAgICAgT3V0cHV0IG91dHB1dCA9IChPdXRwdXQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VPdXRwdXQob3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VNZXNzYWdlUmVmZXJlbmNlKG91dHB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSU91dHB1dChvdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KG91dHB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQob3V0cHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5GQVVMVDoKLSAgICAgIHsKLSAgICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VGYXVsdChmYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlTWVzc2FnZVJlZmVyZW5jZShmYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUZhdWx0KGZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmxlRWxlbWVudChmYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoZmF1bHQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfSU5QVVQ6Ci0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSAoQmluZGluZ0lucHV0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlQmluZGluZ0lucHV0KGJpbmRpbmdJbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoYmluZGluZ0lucHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQmluZGluZ0lucHV0KGJpbmRpbmdJbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoYmluZGluZ0lucHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5CSU5ESU5HX09VVFBVVDoKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gKEJpbmRpbmdPdXRwdXQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KGJpbmRpbmdPdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUlCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KGJpbmRpbmdPdXRwdXQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIFdTRExQYWNrYWdlLkJJTkRJTkdfRkFVTFQ6Ci0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlQmluZGluZ0ZhdWx0KGJpbmRpbmdGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoYmluZGluZ0ZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJQmluZGluZ0ZhdWx0KGJpbmRpbmdGYXVsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlV1NETEVsZW1lbnQoYmluZGluZ0ZhdWx0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5OQU1FU1BBQ0U6Ci0gICAgICB7Ci0gICAgICAgIE5hbWVzcGFjZSBuYW1lc3BhY2UgPSAoTmFtZXNwYWNlKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuVFlQRVM6Ci0gICAgICB7Ci0gICAgICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlVHlwZXModHlwZXMpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KHR5cGVzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VJVHlwZXModHlwZXMpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHR5cGVzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5VTktOT1dOX0VYVEVOU0lCSUxJVFlfRUxFTUVOVDoKLSAgICAgIHsKLSAgICAgICAgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQodW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VFeHRlbnNpYmlsaXR5RWxlbWVudCh1bmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KHVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgV1NETFBhY2thZ2UuWFNEX1NDSEVNQV9FWFRFTlNJQklMSVRZX0VMRU1FTlQ6Ci0gICAgICB7Ci0gICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KXRoZUVPYmplY3Q7Ci0gICAgICAgIE9iamVjdCByZXN1bHQgPSBjYXNlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoeHNkU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGNhc2VXU0RMRWxlbWVudCh4c2RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQgPSBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KHhzZFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgICAgY2FzZSBXU0RMUGFja2FnZS5NRVNTQUdFX1JFRkVSRU5DRToKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlID0gKE1lc3NhZ2VSZWZlcmVuY2UpdGhlRU9iamVjdDsKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGNhc2VNZXNzYWdlUmVmZXJlbmNlKG1lc3NhZ2VSZWZlcmVuY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZUV4dGVuc2libGVFbGVtZW50KG1lc3NhZ2VSZWZlcmVuY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gY2FzZVdTRExFbGVtZW50KG1lc3NhZ2VSZWZlcmVuY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlV1NETEVsZW1lbnQoV1NETEVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcnQgVHlwZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3J0IFR5cGU8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VQb3J0VHlwZShQb3J0VHlwZSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3BlcmF0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9wZXJhdGlvbjwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZU9wZXJhdGlvbihPcGVyYXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1lc3NhZ2U8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWVzc2FnZTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZU1lc3NhZ2UoTWVzc2FnZSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGFydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYXJ0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlUGFydChQYXJ0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmc8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nKEJpbmRpbmcgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZXJ2aWNlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNlcnZpY2U8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VTZXJ2aWNlKFNlcnZpY2Ugb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9ydDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVBvcnQoUG9ydCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWZpbml0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlZmluaXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VEZWZpbml0aW9uKERlZmluaXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkltcG9ydDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbXBvcnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJbXBvcnQoSW1wb3J0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHRlbnNpYmxlIEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXh0ZW5zaWJsZSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlRXh0ZW5zaWJsZUVsZW1lbnQoRXh0ZW5zaWJsZUVsZW1lbnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklucHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklucHV0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSW5wdXQoSW5wdXQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk91dHB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VPdXRwdXQoT3V0cHV0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5GYXVsdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUZhdWx0KEZhdWx0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nIElucHV0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmcgSW5wdXQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nIE91dHB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nIE91dHB1dDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmluZGluZyBGYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CaW5kaW5nIEZhdWx0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZ0ZhdWx0KEJpbmRpbmdGYXVsdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFtZXNwYWNlPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWVzcGFjZTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZU5hbWVzcGFjZShOYW1lc3BhY2Ugb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklQb3J0IFR5cGU8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVBvcnQgVHlwZTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlQb3J0VHlwZShqYXZheC53c2RsLlBvcnRUeXBlIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JT3BlcmF0aW9uPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklPcGVyYXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJT3BlcmF0aW9uKGphdmF4LndzZGwuT3BlcmF0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSW5wdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUlucHV0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUlucHV0KGphdmF4LndzZGwuSW5wdXQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklPdXRwdXQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU91dHB1dDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlPdXRwdXQoamF2YXgud3NkbC5PdXRwdXQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklGYXVsdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRmF1bHQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJRmF1bHQoamF2YXgud3NkbC5GYXVsdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1lc3NhZ2U8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1lc3NhZ2U8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJTWVzc2FnZShqYXZheC53c2RsLk1lc3NhZ2Ugb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklQYXJ0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklQYXJ0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSVBhcnQoamF2YXgud3NkbC5QYXJ0IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU2VydmljZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JU2VydmljZTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlTZXJ2aWNlKGphdmF4LndzZGwuU2VydmljZSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVBvcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVBvcnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJUG9ydChqYXZheC53c2RsLlBvcnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklCaW5kaW5nPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklCaW5kaW5nPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUJpbmRpbmcoamF2YXgud3NkbC5CaW5kaW5nIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZyBPcGVyYXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUJpbmRpbmcgT3BlcmF0aW9uPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUJpbmRpbmdPcGVyYXRpb24oamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZyBJbnB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZyBJbnB1dDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlCaW5kaW5nSW5wdXQoamF2YXgud3NkbC5CaW5kaW5nSW5wdXQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklCaW5kaW5nIE91dHB1dDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JQmluZGluZyBPdXRwdXQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJQmluZGluZ091dHB1dChqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklCaW5kaW5nIEZhdWx0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklCaW5kaW5nIEZhdWx0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUJpbmRpbmdGYXVsdChqYXZheC53c2RsLkJpbmRpbmdGYXVsdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRXh0ZW5zaWJpbGl0eSBFbGVtZW50PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUV4dGVuc2liaWxpdHlFbGVtZW50KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SURlZmluaXRpb248L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SURlZmluaXRpb248L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJRGVmaW5pdGlvbihqYXZheC53c2RsLkRlZmluaXRpb24gb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklJbXBvcnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SUltcG9ydDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlJbXBvcnQoamF2YXgud3NkbC5JbXBvcnQgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklMaXN0PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklMaXN0PC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSUxpc3QoTGlzdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SU1hcDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JTWFwPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlSU1hcChNYXAgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklVUkw8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SVVSTDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlVUkwoVVJMIG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JRXh0ZW5zaW9uIFJlZ2lzdHJ5PC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklFeHRlbnNpb24gUmVnaXN0cnk8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJRXh0ZW5zaW9uUmVnaXN0cnkoRXh0ZW5zaW9uUmVnaXN0cnkgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlR5cGVzPC9lbT4nLgotICAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLSAgICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0gICAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLSAgICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlR5cGVzPC9lbT4nLgotICAgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIE9iamVjdCBjYXNlVHlwZXMoVHlwZXMgb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklJdGVyYXRvcjwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JSXRlcmF0b3I8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJSXRlcmF0b3IoSXRlcmF0b3Igb2JqZWN0KQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklUeXBlczwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JVHlwZXM8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VJVHlwZXMoamF2YXgud3NkbC5UeXBlcyBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gICAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotICAgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VW5rbm93biBFeHRlbnNpYmlsaXR5IEVsZW1lbnQ8L2VtPicuCi0gICAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotICAgKiBAZ2VuZXJhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNhc2VVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5YU0QgU2NoZW1hIEV4dGVuc2liaWxpdHkgRWxlbWVudDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IG9iamVjdCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0gICAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NZXNzYWdlIFJlZmVyZW5jZTwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2FzZU1lc3NhZ2VSZWZlcmVuY2UoTWVzc2FnZVJlZmVyZW5jZSBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0gICAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotICAgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLSAgICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCi0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19IC8vV1NETFN3aXRjaApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1dTRExVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmY2IzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvV1NETFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMVXRpbCBleHRlbmRzIFdTRExDb25zdGFudHMKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBXU0RMVXRpbCBpbnN0YW5jZTsKLQotICAvLyAgcHJvdGVjdGVkIE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgbm9kZUFzc29jaWF0aW9uTWFuYWdlciA9IG5ldyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCk7Ci0KLSAgcHJvdGVjdGVkIEhhc2hNYXAgZWxlbWVudE5hbWVUb1R5cGVNYXAgPSBuZXcgSGFzaE1hcCgpOwotCi0gIHB1YmxpYyBzdGF0aWMgV1NETFV0aWwgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2UgPSBuZXcgV1NETFV0aWwoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgcHVibGljIFdTRExVdGlsKCkKLSAgewotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChCSU5ESU5HX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihCSU5ESU5HKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KERFRklOSVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKERFRklOSVRJT04pKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoRE9DVU1FTlRBVElPTl9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoRE9DVU1FTlRBVElPTikpOwotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChGQVVMVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoRkFVTFQpKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoSU1QT1JUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihJTVBPUlQpKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoSU5QVVRfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKElOUFVUKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KE1FU1NBR0VfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKE1FU1NBR0UpKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoT1BFUkFUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihPUEVSQVRJT04pKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoT1VUUFVUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihPVVRQVVQpKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoUEFSVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoUEFSVCkpOwotICAgIGVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQT1JUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihQT1JUKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KFBPUlRfVFlQRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoUE9SVF9UWVBFKSk7Ci0gICAgZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KFNFUlZJQ0VfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFNFUlZJQ0UpKTsKLSAgICBlbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoVFlQRVNfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFRZUEVTKSk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFdTRExUeXBlKEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGludCByZXN1bHQgPSAtMTsKLQotICAgIEludGVnZXIgaW50ZWdlciA9IChJbnRlZ2VyKWVsZW1lbnROYW1lVG9UeXBlTWFwLmdldChlbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLSAgICBpZiAoaW50ZWdlciAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGludGVnZXIuaW50VmFsdWUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldFBhcmVudEVsZW1lbnRDaGFpbihFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgd2hpbGUgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZCgwLCBlbGVtZW50KTsKLSAgICAgIE5vZGUgbm9kZSA9IGVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpOwotICAgICAgZWxlbWVudCA9IChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSA/IChFbGVtZW50KW5vZGUgOiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8qCi0gICBwdWJsaWMgT2JqZWN0IGZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBFbGVtZW50IHRhcmdldEVsZW1lbnQpCi0gICB7ICAgCi0gICBPYmplY3QgbyA9IG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIuZ2V0TW9kZWxPYmplY3RGb3JOb2RlKGRlZmluaXRpb24sIHRhcmdldEVsZW1lbnQpOwotICAgcmV0dXJuIG87Ci0gICB9Ci0gICAKLSAgIAotICAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudEZvck9iamVjdChPYmplY3QgbykKLSAgIHsgICAgICAKLSAgIE5vZGUgbm9kZSA9IG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIuZ2V0Tm9kZShvKTsgIAotICAgcmV0dXJuIChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSA/IChFbGVtZW50KW5vZGUgOiBudWxsOyAgICAgICAgICAgICAgICAgIAotICAgfQotICAgCi0gICBwdWJsaWMgTm9kZSBnZXROb2RlRm9yT2JqZWN0KE9iamVjdCBvKQotICAgeyAgICAgIAotICAgcmV0dXJuIG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIuZ2V0Tm9kZShvKTsgICAgICAgICAgICAgICAgICAgICAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyBJVHlwZVN5c3RlbVByb3ZpZGVyIGdldFR5cGVTeXN0ZW1Qcm92aWRlcihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gICB7ICAgICAgCi0gICByZXR1cm4gV1NETFRvRE9NRWxlbWVudFV0aWwuZ2V0VHlwZVN5c3RlbVByb3ZpZGVyKGRlZmluaXRpb24pOyAgICAgICAgICAgICAgICAgICAgCi0gICB9Ci0gICAKLSAgIAotICAgcHVibGljIHZvaWQgc2V0VHlwZVN5c3RlbVByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbiwgSVR5cGVTeXN0ZW1Qcm92aWRlciB0eXBlU3lzdGVtUHJvdmlkZXIpCi0gICB7ICAgICAgCi0gICBXU0RMVG9ET01FbGVtZW50VXRpbC5zZXRUeXBlU3lzdGVtUHJvdmlkZXIoZGVmaW5pdGlvbiwgdHlwZVN5c3RlbVByb3ZpZGVyKTsgICAgICAgICAgICAgICAgICAgICAgCi0gICB9ICAgCi0gICAqLwotCi0gIHB1YmxpYyBzdGF0aWMgUU5hbWUgY3JlYXRlUU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgcHJlZml4ZWROYW1lKQotICB7Ci0gICAgUU5hbWUgcW5hbWUgPSBudWxsOwotICAgIGlmIChwcmVmaXhlZE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSBwcmVmaXhlZE5hbWUuaW5kZXhPZigiOiIpOwotICAgICAgU3RyaW5nIHByZWZpeCA9IChpbmRleCA9PSAtMSkgPyBudWxsIDogcHJlZml4ZWROYW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICBpZiAocHJlZml4ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZShwcmVmaXgpOwotICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbG9jYWxQYXJ0ID0gcHJlZml4ZWROYW1lLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgICAgICAgIHFuYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxQYXJ0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcW5hbWU7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmlsaXR5RWxlbWVudE5vZGVzKEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50KQotICB7Ci0gICAgTGlzdCBjaGlsZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClpLm5leHQoKTsKLSAgICAgIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGlsZExpc3QuYWRkKGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjaGlsZExpc3Q7Ci0gICAgLy9yZXR1cm4gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvWFNEU2NoZW1hTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL2ludGVybmFsL3V0aWwvWFNEU2NoZW1hTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMGFiNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1hTRFNjaGVtYUxvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEU2NoZW1hTG9jYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgWFNEU2NoZW1hTG9jYXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIHByb3RlY3RlZCBYU0RTY2hlbWFMb2NhdG9ySW1wbCBzY2hlbWFMb2NhdG9yID0gbmV3IFhTRFNjaGVtYUxvY2F0b3JJbXBsKCk7Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiB0eXBlID09IFhTRFNjaGVtYUxvY2F0b3IuY2xhc3M7Ci0gIH0KLQotICBwdWJsaWMgQWRhcHRlciBhZGFwdE5ldyhOb3RpZmllciB0YXJnZXQsIE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYUxvY2F0b3I7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvaW50ZXJuYWwvdXRpbC9YU0RTY2hlbWFMb2NhdG9ySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1hTRFNjaGVtYUxvY2F0b3JJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MDI2YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9pbnRlcm5hbC91dGlsL1hTRFNjaGVtYUxvY2F0b3JJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEU2NoZW1hTG9jYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgWFNEU2NoZW1hTG9jYXRvckltcGwgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIFhTRFNjaGVtYUxvY2F0b3IKLXsKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEU2NoZW1hTG9jYXRvciNsb2NhdGVTY2hlbWEob3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYSwKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFhTRFNjaGVtYSBsb2NhdGVTY2hlbWEoWFNEU2NoZW1hIHhzZFNjaGVtYSwgU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIHJhd1NjaGVtYUxvY2F0aW9uVVJJLCBTdHJpbmcgcmVzb2x2ZWRTY2hlbWFMb2NhdGlvblVSSSkKLSAgewotICAgIFhTRFNjaGVtYSByZXNvbHZlZFNjaGVtYSA9IG51bGw7Ci0KLSAgICAvLyBCdWd6aWxsYSAxMjI2MjQ6ICBXU0RMIG1vZGVsIGRvZXMgbm90IHJlc29sdmUgPGltcG9ydD4gb2YgaW5saW5lIHNjaGVtYSB3aXRoIG5vIG5hbWVzcGFjZS4KLSAgICAvLyBLQjogV2UgYXJlIG5vdCByZXNvbHZpbmcgPGltcG9ydD5lZCBvciA8aW5jbHVkZT5kIHNjaGVtYXMgZnJvbSB0aGUgcm9vdCBpbmxpbmUgc2NoZW1hcy4KLSAgICAvLyBJbiBvdGhlciB3b3Jkcywgc2luY2Ugd2UgYXJlIHJlc29sdmluZyBvbmx5IGJldHdlZW4gbXVsdGlwbGUgcm9vdCBpbmxpbmUgc2NoZW1hcywKLSAgICAvLyBkbyBub3QgYXR0ZW1wdCB0byByZXNvbHZlIGlmICJyYXdTY2hlbWFMb2NhdGlvblVSSSIgaXMgbm90IG51bGwuIAotICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbCAmJiByYXdTY2hlbWFMb2NhdGlvblVSSSA9PSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICAgIGZvciAoRU9iamVjdCBwYXJlbnQgPSB4c2RTY2hlbWEuZUNvbnRhaW5lcigpOyBwYXJlbnQgIT0gbnVsbDsgcGFyZW50ID0gcGFyZW50LmVDb250YWluZXIoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIERlZmluaXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZpbml0aW9uID0gKERlZmluaXRpb24pcGFyZW50OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwgJiYgZGVmaW5pdGlvbi5nZXRFVHlwZXMoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9ICgoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpbykuZ2V0U2NoZW1hKCk7Ci0gICAgICAgICAgICBpZiAoc2NoZW1hICE9IG51bGwgJiYgbmFtZXNwYWNlVVJJLmVxdWFscyhzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXNvbHZlZFNjaGVtYSA9IHNjaGVtYTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXNvbHZlZFNjaGVtYTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQWRhdHBlckZvclR5cGUoT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gdHlwZSA9PSBYU0RTY2hlbWFMb2NhdG9yLmNsYXNzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTIyZGUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi8vYXBpc3R5bGVzLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPHRpdGxlPldTREwgTW9kZWwgQVBJIE92ZXJ2aWV3PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPHA+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPgotPHRhYmxlIHdpZHRoPSI1MDAiPgotPHRyPgotPHRkPgotPHA+VGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIGxvYWQsIG1vZGlmeSwgYW5kIHNhdmUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L3A+Ci08L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC9wYWNrYWdlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhNWJhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3BhY2thZ2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxodG1sPgotCTxoZWFkPgotCQk8bWV0YQotCQkJbmFtZT0icm9vdCIKLQkKLQkJCWNvbnRlbnQ9Ii4uLy4uLy4uLy4uLy4uLy4uLyIgLz4KLQkJPHRpdGxlPldTREwgTW9kZWwgQVBJIE92ZXJ2aWV3PC90aXRsZT4KLQk8L2hlYWQ+Ci0KLQk8Ym9keT4KLQkJPGFic3RyYWN0PgotICAgICAgICBUaGUgV1NETCBtb2RlbCBBUEkgYWxsb3dzIGNsaWVudHMgdG8gd29yayB3aXRoIHRoZSBXU0RMIDEuMSBkb2N1bWVudHMuCi0JCTwvYWJzdHJhY3Q+Ci0JCTxwPlRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPiAKLQk8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMWViN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotCi0vKioKLSAqIDxwPgotICogPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSAqIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4KLSAqIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci17Ci0gIEV4dGVuc2liaWxpdHlFbGVtZW50IGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL0V4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyMGI4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbDsKLQotCi0vKioKLSAqIDxwPgotICogPGI+Tm90ZTo8L2I+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8KLSAqIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjawotICogZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4KLSAqIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiA8L3A+Ci0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnkKLXsKLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJGYWN0b3J5KFN0cmluZyBuYW1lc3BhY2UsIEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeSBmYWN0b3J5KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzY0NWE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGRlZmluZXMgY29uc3RhbnRzIGZvciBXU0RMIGVsZW1lbnQgdGFncyBhbmQgcmVsZXZhbnQgbmFtZXNwYWNlcy4KLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFdTRExDb25zdGFudHMKLXsKLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iYmluZGluZyI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCSU5ESU5HID0gMDsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJkZWZpbml0aW9ucyI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZJTklUSU9OID0gMTsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJkb2N1bWVudGF0aW9uIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPQ1VNRU5UQVRJT04gPSAyOwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImZhdWx0IjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZBVUxUID0gMzsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJpbXBvcnQiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUID0gNDsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJpbnB1dCI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlBVVCA9IDU7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ibWVzc2FnZSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRFbGVtZW50VGFnKGludCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFID0gNjsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJvcGVyYXRpb24iPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OID0gNzsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJvdXRwdXQiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1VUUFVUID0gODsKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwYXJ0IjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUlQgPSA5OwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InBvcnQiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVCA9IDEwOwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InBvcnRUeXBlIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlRfVFlQRSA9IDExOwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InNlcnZpY2UiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0RWxlbWVudFRhZyhpbnQpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVklDRSA9IDEyOwotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InR5cGVzIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRUYWcoaW50KS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVTID0gMTM7Ci0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iYmluZGluZyI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkdfRUxFTUVOVF9UQUcgPSAiYmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJkZWZpbml0aW9ucyI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRklOSVRJT05fRUxFTUVOVF9UQUcgPSAiZGVmaW5pdGlvbnMiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iZG9jdW1lbnRhdGlvbiI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcgPSAiZG9jdW1lbnRhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJmYXVsdCI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBVUxUX0VMRU1FTlRfVEFHID0gImZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+ImltcG9ydCI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNUE9SVF9FTEVNRU5UX1RBRyA9ICJpbXBvcnQiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4iaW5wdXQiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlBVVF9FTEVNRU5UX1RBRyA9ICJpbnB1dCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJtZXNzYWdlIjwvY29kZT4uCi0gICAqIEBzZWUgI25vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRV9FTEVNRU5UX1RBRyA9ICJtZXNzYWdlIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+Im9wZXJhdGlvbiI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QRVJBVElPTl9FTEVNRU5UX1RBRyA9ICJvcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ib3V0cHV0IjwvY29kZT4uCi0gICAqIEBzZWUgI25vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1VUUFVUX0VMRU1FTlRfVEFHID0gIm91dHB1dCI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJwYXJ0IjwvY29kZT4uCi0gICAqIEBzZWUgI25vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSVF9FTEVNRU5UX1RBRyA9ICJwYXJ0IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgZWxlbWVudCB0YWcgaXMgPGNvZGU+InBvcnQiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUX0VMRU1FTlRfVEFHID0gInBvcnQiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4icG9ydFR5cGUiPC9jb2RlPi4KLSAgICogQHNlZSAjbm9kZVR5cGUoU3RyaW5nIGxvY2FsTmFtZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUX1RZUEVfRUxFTUVOVF9UQUcgPSAicG9ydFR5cGUiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBlbGVtZW50IHRhZyBpcyA8Y29kZT4ic2VydmljZSI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfRUxFTUVOVF9UQUcgPSAic2VydmljZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIGVsZW1lbnQgdGFnIGlzIDxjb2RlPiJ0eXBlcyI8L2NvZGU+LgotICAgKiBAc2VlICNub2RlVHlwZShTdHJpbmcgbG9jYWxOYW1lKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVTX0VMRU1FTlRfVEFHID0gInR5cGVzIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIGNvbW1vbgotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJuYW1lIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FUVFJJQlVURSA9ICJuYW1lIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJtZXNzYWdlIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVNTQUdFX0FUVFJJQlVURSA9ICJtZXNzYWdlIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJiaW5kaW5nIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0FUVFJJQlVURSA9ICJiaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJ0eXBlIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0FUVFJJQlVURSA9ICJ0eXBlIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIGRlZmluaXRpb25zCi0KLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+ImVuY29kaW5nIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBFTkNPRElOR19BVFRSSUJVVEUgPSAiZW5jb2RpbmciOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+InRhcmdldE5hbWVzcGFjZSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFSR0VUTkFNRVNQQUNFX0FUVFJJQlVURSA9ICJ0YXJnZXROYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgLy8gYmluZGluZwotCi0gIC8qKgotICAgKiBUaGUgYXR0cmlidXRlIGlzIDxjb2RlPiJyZXNvdXJjZVVSSSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVTT1VSQ0VfVVJJX0FUVFJJQlVURSA9ICJyZXNvdXJjZVVSSSI7IC8vJE5PTi1OTFMtMSQKLQotICAvLyBwYXJ0Ci0KLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+ImVsZW1lbnQiPC9jb2RlPi4KLSAgICogQHNlZSAjZ2V0QXR0cmlidXRlKEVsZW1lbnQsU3RyaW5nKS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEVMRU1FTlRfQVRUUklCVVRFID0gImVsZW1lbnQiOyAvLyROT04tTkxTLTEkCi0KLSAgLy8gaW1wb3J0Ci0KLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+ImxvY2F0aW9uIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMT0NBVElPTl9BVFRSSUJVVEUgPSAibG9jYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLSAgLy8gb3BlcmF0aW9uCi0KLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+InBhcmFtZXRlck9yZGVyIjwvY29kZT4uCi0gICAqIEBzZWUgI2dldEF0dHJpYnV0ZShFbGVtZW50LFN0cmluZykuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQQVJBTUVURVJfT1JERVJfQVRUUklCVVRFID0gInBhcmFtZXRlck9yZGVyIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgLyoqCi0gICAqIFRoZSBhdHRyaWJ1dGUgaXMgPGNvZGU+Im5hbWVzcGFjZSI8L2NvZGU+LgotICAgKiBAc2VlICNnZXRBdHRyaWJ1dGUoRWxlbWVudCxTdHJpbmcpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX0FUVFJJQlVURSA9ICJuYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPC9jb2RlPi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfTkFNRVNQQUNFX1VSSSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHZhbHVlIDxjb2RlPiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI8L2NvZGU+LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNEX05BTUVTUEFDRV9VUkkgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSB2YWx1ZSA8Y29kZT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YTUxTY2hlbWEiPC9jb2RlPi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQV9GT1JfU0NIRU1BX1VSSV8xOTk5ID0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgdmFsdWUgPGNvZGU+Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMTAvWE1MU2NoZW1hIjwvY29kZT4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMF8xMCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIHZhbHVlIDxjb2RlPiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI8L2NvZGU+LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gRUxFTUVOVF9UQUdTID0gbmV3IFN0cmluZyBbXXsKLSAgICBCSU5ESU5HX0VMRU1FTlRfVEFHLAotICAgIERFRklOSVRJT05fRUxFTUVOVF9UQUcsCi0gICAgRE9DVU1FTlRBVElPTl9FTEVNRU5UX1RBRywKLSAgICBGQVVMVF9FTEVNRU5UX1RBRywKLSAgICBJTVBPUlRfRUxFTUVOVF9UQUcsCi0gICAgSU5QVVRfRUxFTUVOVF9UQUcsCi0gICAgTUVTU0FHRV9FTEVNRU5UX1RBRywKLSAgICBPUEVSQVRJT05fRUxFTUVOVF9UQUcsCi0gICAgT1VUUFVUX0VMRU1FTlRfVEFHLAotICAgIFBBUlRfRUxFTUVOVF9UQUcsCi0gICAgUE9SVF9FTEVNRU5UX1RBRywKLSAgICBQT1JUX1RZUEVfRUxFTUVOVF9UQUcsCi0gICAgU0VSVklDRV9FTEVNRU5UX1RBRywKLSAgICBUWVBFU19FTEVNRU5UX1RBRyB9OwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgU3RyaW5nIG5hbWUgb2YgZWxlbWVudCB0YWcgZ2l2ZW4gdGhlIG5vZGVUeXBlLgotICAgKiBAcGFyYW0gbm9kZVR5cGUgYSBjb25zdGFudCBkZWZpbmVkIGluIFdTRExDb25zdGFudHMuCi0gICAqIEByZXR1cm4gZWxlbWVudCB0YWcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRFbGVtZW50VGFnKGludCBub2RlVHlwZSkKLSAgewotICAgIHJldHVybiBFTEVNRU5UX1RBR1Nbbm9kZVR5cGVdOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBub2RlIHR5cGUgZ2l2ZW4gdGhlIFN0cmluZyBuYW1lIG9mIGVsZW1lbnQgdGFnLgotICAgKiBAcGFyYW0gbG9jYWxOYW1lIHRoZSBsb2NhbCBuYW1lIG9mIGVsZW1lbnQgdGFnLgotICAgKiBAcmV0dXJuIGEgbm9kZSB0eXBlIGRlZmluZWQgaW4gV1NETENvbnN0YW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IG5vZGVUeXBlKFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IEVMRU1FTlRfVEFHUy5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBpZiAobG9jYWxOYW1lLmVxdWFscyhFTEVNRU5UX1RBR1NbaV0pKQotICAgICAgewotICAgICAgICByZXR1cm4gaTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBub2RlIHR5cGUgZGVmaW5lZCBpbiBXU0RMQ29uc3RhbnRzIGdpdmVuIHRoZSBET00gbm9kZS4KLSAgICogQHBhcmFtIG5vZGUgYSBET00gbm9kZS4KLSAgICogQHJldHVybiBhIG5vZGUgdHlwZSBkZWZpbmVkIGluIFdTRExDb25zdGFudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBub2RlVHlwZShOb2RlIG5vZGUpCi0gIHsKLSAgICByZXR1cm4gaXNXU0RMTmFtZXNwYWNlKG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCkpID8gbm9kZVR5cGUobm9kZS5nZXRMb2NhbE5hbWUoKSkgOiAtMTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWVzcGFjZSBpcyB0aGUgV1NETCBuYW1lc3BhY2Ugb3Igbm90LgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIGEgbmFtZXNwYWNlLgotICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWVzcGFjZSBpcyB0aGUgV1NETCBuYW1lc3BhY2Ugb3Igbm90LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzV1NETE5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgcmV0dXJuIFdTRExfTkFNRVNQQUNFX1VSSS5lcXVhbHMobmFtZXNwYWNlKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgbmFtZXNwYWNlMSBlcXVhbHMgdG8gbmFtZXNwYWNlMi4KLSAgICogQHBhcmFtIG5hbWVzcGFjZTEgYSBuYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UyIGEgbmFtZXNwYWNlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgbmFtZXNwYWNlMSBlcXVhbHMgdG8gbmFtZXNwYWNlMi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc01hdGNoaW5nTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UxLCBTdHJpbmcgbmFtZXNwYWNlMikKLSAgewotICAgIHJldHVybiAobmFtZXNwYWNlMSA9PSBudWxsID8gbmFtZXNwYWNlMiA9PSBudWxsIDogbmFtZXNwYWNlMS5lcXVhbHMobmFtZXNwYWNlMikpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXR0cmlidXRlIHZhbHVlIGdpdmVuIHRoZSBhdHRyaWJ1dGVOYW1lIGluIHRoZSBlbGVtZW50LgotICAgKiBAcGFyYW0gZWxlbWVudCBhIERPTSBlbGVtZW50IHRvIHNlYXJjaCBmb3IgdGhlIGF0dHJpYnV0ZSBmcm9tLgotICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBhbiBhdHRyaWJ1dGUgdG8gZmluZCBmcm9tIHRoZSBlbGVtZW50LgotICAgKiBAcmV0dXJuIGFuIGF0dHJpYnV0ZSB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEF0dHJpYnV0ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKQotICB7Ci0gICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID8gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgOiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTNiMjA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpYy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotLyoqCi0gKiBHZW5lcmF0ZWQgYnkgdGhlIFdTREwgbW9kZWwgcGFyc2luZyBhbmQgdmFsaWRhdGlvbiBtZWNoYW5pc21zLgotICogCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcwotICogQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgYSBjYW5kaWRhdGUgdG8gYmVjb21pbmcgYSBmaXJzdCBjbGFzcyBXU0RMIG1vZGVsIG9iamVjdC4KLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMRGlhZ25vc3RpYyBleHRlbmRzIFJlc291cmNlLkRpYWdub3N0aWMKLXsKLSAgLyoqCi0gICAqIFByb3ZpZGVzIHRoaXMgZGlhZ25vc3RpYydzIHNldmVyaXR5LgotICAgKiAKLSAgICogQHJldHVybiBhbiBYU0REaWFnbm9zdGljU2V2ZXJpdHkKLSAgICovCi0gIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgZ2V0U2V2ZXJpdHkoKTsKLQotICAvKioKLSAgICogU2V0cyB0aGlzIGRpYWdub3N0aWMncyBzZXZlcml0eS4KLSAgICogCi0gICAqIEBwYXJhbSBzZXZlcml0eQotICAgKiAgICAgICAgICB0aGUgbmV3IGRpYWdub3N0aWMgc2V2ZXJpdHkuCi0gICAqLwotICB2b2lkIHNldFNldmVyaXR5KFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgc2V2ZXJpdHkpOwotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGtleS4KLSAgICogCi0gICAqIEByZXR1cm4gYSBTdHJpbmcgd2l0aCB0aGUgb3JpZ2luYWwgbWVzc2FnZSBrZXkuCi0gICAqLwotICBTdHJpbmcgZ2V0S2V5KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG9yaWdpbmFsIG1lc3NhZ2Uga2V5LgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyBtZXNzYWdlIGtleSB2YWx1ZS4KLSAgICovCi0gIHZvaWQgc2V0S2V5KFN0cmluZyB2YWx1ZSk7Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIERPTSBOb2RlIHdoZXJlIHRoZSBlcnJvciBvY2N1cnMKLSAgICogCi0gICAqIEByZXR1cm4gVGhlIERPTSBub2RlIHdoZXJlIHRoZSBlcnJvciBvY2N1cnMKLSAgICovCi0gIE5vZGUgZ2V0Tm9kZSgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBET00gTm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi0gICAqIEBwYXJhbSBub2RlCi0gICAqLwotICB2b2lkIHNldE5vZGUoTm9kZSBub2RlKTsKLQotICAvKioKLSAgICogcmV0dXJucyB0aGUgRWxlbWVudCB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi0gICAqIEByZXR1cm4gLSBPYmplY3Qgb2YgdHlwZSBYU0RDb25jcmV0ZUNvbXBvbmVudCBpZiB0aGUgZXJyb3IKLSAgICogCQkJY29tZXMgZnJvbSB0aGUgaW5saW5lIHNjaGVtYSBvZiBhIHdzZGwgZmlsZQotICAgKiAJCSAtIG9iamVjdCBvZiB0eXBlIFdTRExFbGVtZW50IGlmIHRoZSBlcnJvciBjb21lcyBmcm9tCi0gICAqIAkJCW90aGVyIHBhcnQgb2YgdGhlIHdzZGwgZmlsZQotICAgKi8KLSAgT2JqZWN0IGdldENvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBDb250YWluZXIgb2YgdGhlIGVycm9yCi0gICAqIEBwYXJhbSBjb250YWluZXIKLSAgICogCQkJYW4gT2JqZWN0IG9mIGVpdGhlciBYU0RDb25jcmV0ZUNvbXBvbmVudCBvciBXU0RMRWxlbWVudCAKLSAgICovCi0gIHZvaWQgc2V0Q29udGFpbmVyKE9iamVjdCBjb250YWluZXIpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbGlzdCB3aXRoIHRoZSBvcmlnaW5hbCBtZXNzYWdlIHBhcmFtZXRlcnMgYXMgU3RyaW5ncy4KLSAgICogQHJldHVybiAgYSBsaXN0IHdpdGggdGhlIG9yaWdpbmFsIG1lc3NhZ2UgcGFyYW1ldGVycyBhcyBTdHJpbmdzLgotICAgKi8KLSAgRUxpc3QgZ2V0U3Vic3RpdHV0aW9ucygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExEaWFnbm9zdGljSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmUwZjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERGlhZ25vc3RpYzsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERGlhZ25vc3RpY1NldmVyaXR5OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotLyoqCi0gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBXU0RMRGlhZ25vc3RpYyBpbnRlcmZhY2UuIFRoaXMgY2xhc3MgaXMgYmFzZWQKLSAqIG9uIFhTRERpYWdub3N0aWNJbXBsCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcwotICogQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIFdTRExEaWFnbm9zdGljSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgV1NETERpYWdub3N0aWMKLXsKLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb2x1bW4oKSA8ZW0+Q29sdW1uPC9lbT59JwotICAgKiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAc2VlICNnZXRDb2x1bW4oKQotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgQ09MVU1OX0VERUZBVUxUID0gMTsKLQotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExpbmUoKSA8ZW0+TGluZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiAKLSAgICogCi0gICAqIEBzZWUgI2dldExpbmUoKQotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTElORV9FREVGQVVMVCA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvblVSSSgpIDxlbT5Mb2NhdGlvbiBVUkk8L2VtPn0nCi0gICAqIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIAotICAgKiBAc2VlICNnZXRMb2NhdGlvblVSSSgpCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9VUklfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWVzc2FnZSgpIDxlbT5NZXNzYWdlPC9lbT59JwotICAgKiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAc2VlICNnZXRNZXNzYWdlKCkKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfRURFRkFVTFQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2V2ZXJpdHkoKSA8ZW0+U2V2ZXJpdHk8L2VtPn0nCi0gICAqIGF0dHJpYnV0ZS4KLSAgICogCi0gICAqIEBzZWUgI2dldFNldmVyaXR5KCkKLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgV1NETERpYWdub3N0aWNTZXZlcml0eSBTRVZFUklUWV9FREVGQVVMVCA9IFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUxfTElURVJBTDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q29sdW1uKCkgPGVtPkNvbHVtbjwvZW0+fScgYXR0cmlidXRlLgotICAgKiAKLSAgICogCi0gICAqIEBzZWUgI2dldENvbHVtbigpCi0gICAqIAotICAgKiBAb3JkZXJlZAotICAgKi8KLSAgcHJvdGVjdGVkIGludCBjb2x1bW4gPSBDT0xVTU5fRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExpbmUoKSA8ZW0+TGluZTwvZW0+fScgYXR0cmlidXRlLgotICAgKiAKLSAgICogCi0gICAqIEBzZWUgI2dldExpbmUoKQotICAgKi8KLSAgcHJvdGVjdGVkIGludCBsaW5lID0gTElORV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb25VUkkoKSA8ZW0+TG9jYXRpb24gVVJJPC9lbT59JwotICAgKiBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICAgKiAKLSAgICogQHNlZSAjZ2V0TG9jYXRpb25VUkkoKQotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvblVSSSA9IExPQ0FUSU9OX1VSSV9FREVGQVVMVDsKLQotICAvKioKLSAgICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWVzc2FnZSgpIDxlbT5NZXNzYWdlPC9lbT59JwotICAgKiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAc2VlICNnZXRNZXNzYWdlKCkKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZSA9IE1FU1NBR0VfRURFRkFVTFQ7Ci0KLSAgLyoqCi0gICAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNldmVyaXR5KCkgPGVtPlNldmVyaXR5PC9lbT59JwotICAgKiBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAc2VlICNnZXRTZXZlcml0eSgpCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETERpYWdub3N0aWNTZXZlcml0eSBzZXZlcml0eSA9IFNFVkVSSVRZX0VERUZBVUxUOwotCi0gIC8qKgotICAgKiBUaGUgb3JpZ2luYWwgbWVzc2FnZSBrZXkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGtleTsKLQotICAvKioKLSAgICogVGhlIG9yaWdpbmFsIG1lc3NhZ2UgcGFyYW1ldGVycy4KLSAgICovCi0gIHByb3RlY3RlZCBFTGlzdCBzdWJzdGl0dXRpb25zOwotCi0gIC8qKgotICAgKiBUaGUgTm9kZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJzCi0gICAqLwotICBwcm90ZWN0ZWQgTm9kZSBub2RlOwotCi0gIC8qKgotICAgKiBUaGUgV1NETEVsZW1lbnQgb3IgWFNEQ29uY3JldGVDb21wb25lbnQgb2JqZWN0IHdoZXJlIHRoZSBlcnJvciBvY2N1cnMKLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgY29udGFpbmVyOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExEaWFnbm9zdGljSW1wbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIFdyYXBzIGFuIFhTRCBkaWFnbm9zdGljIGludG8gYSBXU0RMIGRpYWdub3N0aWMuIFVzZWQgdG8gcmVwb3J0IHByb2JsZW1zIGluCi0gICAqIGlubGluZSBzY2hlbWFzLgotICAgKiAKLSAgICogQHBhcmFtIHhzZERpYWdub3N0aWMKLSAgICogICAgICAgICAgdGhlIFhTRCBkaWFnbm9zdGljIG9iamVjdCB0byB3cmFwLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKi8KLSAgcHVibGljIFdTRExEaWFnbm9zdGljSW1wbChYU0REaWFnbm9zdGljIHhzZERpYWdub3N0aWMpCi0gIHsKLSAgICB0aGlzKCk7Ci0gICAgc2V0TWVzc2FnZSh4c2REaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7Ci0gICAgc2V0U2V2ZXJpdHkoZ2V0U2V2ZXJpdHkoeHNkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpKSk7Ci0gICAgc2V0TGluZSh4c2REaWFnbm9zdGljLmdldExpbmUoKSk7Ci0gICAgc2V0Q29sdW1uKHhzZERpYWdub3N0aWMuZ2V0Q29sdW1uKCkpOwotICAgIHNldE5vZGUoeHNkRGlhZ25vc3RpYy5nZXROb2RlKCkpOwotICAgIHNldENvbnRhaW5lcih4c2REaWFnbm9zdGljLmdldENvbnRhaW5lcigpKTsKLSAgICBzZXRMb2NhdGlvbih4c2REaWFnbm9zdGljLmdldExvY2F0aW9uKCkpOwotICAgIHNldEtleSh4c2REaWFnbm9zdGljLmdldEtleSgpKTsKLSAgICBnZXRTdWJzdGl0dXRpb25zKCkuYWRkQWxsKHhzZERpYWdub3N0aWMuZ2V0U3Vic3RpdHV0aW9ucygpKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlJERpYWdub3N0aWMjZ2V0Q29sdW1uKCkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Q29sdW1uKCkKLSAgewotICAgIHJldHVybiBjb2x1bW47Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZSREaWFnbm9zdGljI2dldExpbmUoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRMaW5lKCkKLSAgewotICAgIHJldHVybiBsaW5lOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2UkRGlhZ25vc3RpYyNnZXRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBsb2NhdGlvblVSSTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlJERpYWdub3N0aWMjZ2V0TWVzc2FnZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpYyNnZXRTZXZlcml0eSgpCi0gICAqLwotICBwdWJsaWMgV1NETERpYWdub3N0aWNTZXZlcml0eSBnZXRTZXZlcml0eSgpCi0gIHsKLSAgICByZXR1cm4gc2V2ZXJpdHk7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydHMgYW4gWFNEIGRpYWdub3N0aWMgc2V2ZXJpdHkgbGV2ZWwgaW50byBhIFdTREwgZGlhZ25vc3RpYyBzZXZlcml0eQotICAgKiBsZXZlbC4KLSAgICogCi0gICAqIEBwYXJhbSB4c2REaWFnbm9zdGljU2V2ZXJpdHkKLSAgICogICAgICAgICAgdGhlIHNvdXJjZSBYU0QgZGlhZ25vc3RpYyBzZXZlcml0eS4KLSAgICogQHJldHVybiB0aGUgZXF1aXZhbGVudCBXU0RMIGRpYWdub3N0aWMgc2V2ZXJpdHkuCi0gICAqLwotICBwcml2YXRlIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgZ2V0U2V2ZXJpdHkoWFNERGlhZ25vc3RpY1NldmVyaXR5IHhzZERpYWdub3N0aWNTZXZlcml0eSkKLSAgewotICAgIHN3aXRjaCAoeHNkRGlhZ25vc3RpY1NldmVyaXR5LmdldFZhbHVlKCkpCi0gICAgewotICAgICAgY2FzZSBYU0REaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUw6Ci0gICAgICByZXR1cm4gV1NETERpYWdub3N0aWNTZXZlcml0eS5GQVRBTF9MSVRFUkFMOwotICAgICAgY2FzZSBYU0REaWFnbm9zdGljU2V2ZXJpdHkuRVJST1I6Ci0gICAgICByZXR1cm4gV1NETERpYWdub3N0aWNTZXZlcml0eS5FUlJPUl9MSVRFUkFMOwotICAgICAgY2FzZSBYU0REaWFnbm9zdGljU2V2ZXJpdHkuV0FSTklORzoKLSAgICAgIHJldHVybiBXU0RMRGlhZ25vc3RpY1NldmVyaXR5LldBUk5JTkdfTElURVJBTDsKLSAgICAgIGNhc2UgWFNERGlhZ25vc3RpY1NldmVyaXR5LklORk9STUFUSU9OOgotICAgICAgcmV0dXJuIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuSU5GT1JNQVRJT05fTElURVJBTDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gU0VWRVJJVFlfRURFRkFVTFQ7Ci19Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgY29sdW1uIGF0dHJpYnV0ZS4KLSAgICogCi0gICAqIEBwYXJhbSBuZXdDb2x1bW4KLSAgICogICAgICAgICAgdGhlIG5ldyBjb2x1bW4gdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb2x1bW4oaW50IG5ld0NvbHVtbikKLSAgewotICAgIGNvbHVtbiA9IG5ld0NvbHVtbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldExpbmUoaW50IG5ld0xpbmUpCi0gIHsKLSAgICBsaW5lID0gbmV3TGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgbG9hY3Rpb24gYXR0cmlidXRlLgotICAgKiAKLSAgICogQHBhcmFtIGxvY2F0aW9uCi0gICAqICAgICAgICAgIGEgU3RyaW5nIHdpdGggdGhlIG5ldyB2YWx1ZSBmb3IgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGxvY2F0aW9uKQotICB7Ci0gICAgbG9jYXRpb25VUkkgPSBsb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIGEgbmV3IHZhbHVlIGZvciB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUuCi0gICAqIAotICAgKiBAcGFyYW0gbmV3TWVzc2FnZQotICAgKiAgICAgICAgICBhIFN0cmluZyB3aXRoIHRoZSBuZXcgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2UoU3RyaW5nIG5ld01lc3NhZ2UpCi0gIHsKLSAgICBtZXNzYWdlID0gbmV3TWVzc2FnZTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljI3NldFNldmVyaXR5KG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWNTZXZlcml0eSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldmVyaXR5KFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgbmV3U2V2ZXJpdHkpCi0gIHsKLSAgICBzZXZlcml0eSA9IG5ld1NldmVyaXR5ID09IG51bGwgPyBTRVZFUklUWV9FREVGQVVMVCA6IG5ld1NldmVyaXR5OwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExEaWFnbm9zdGljI2dldEtleSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEtleSgpCi0gIHsKLSAgICByZXR1cm4ga2V5OwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjc2V0S2V5KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRLZXkoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAga2V5ID0gdmFsdWU7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpYyNnZXRTdWJzdGl0dXRpb25zKCkKLSAgICovCi0gIHB1YmxpYyBFTGlzdCBnZXRTdWJzdGl0dXRpb25zKCkKLSAgewotICAgIGlmIChzdWJzdGl0dXRpb25zID09IG51bGwpCi0gICAgewotICAgICAgc3Vic3RpdHV0aW9ucyA9IG5ldyBCYXNpY0VMaXN0KCk7Ci0gICAgfQotICAgIHJldHVybiBzdWJzdGl0dXRpb25zOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjZ2V0Tm9kZSgpCi0gICAqLwotICBwdWJsaWMgTm9kZSBnZXROb2RlKCkKLSAgewotICAgIHJldHVybiBub2RlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjc2V0Tm9kZShvcmcudzNjLmRvbS5Ob2RlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Tm9kZShOb2RlIG5vZGUpCi0gIHsKLSAgICB0aGlzLm5vZGUgPSBub2RlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETERpYWdub3N0aWMjZ2V0Q29udGFpbmVyKCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0Q29udGFpbmVyKCkKLSAgewotICAgIHJldHVybiBjb250YWluZXI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMRGlhZ25vc3RpYyNzZXRDb250YWluZXIoamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRhaW5lcihPYmplY3QgY29udGFpbmVyKQotICB7Ci0gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETERpYWdub3N0aWNTZXZlcml0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDJmODA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMRGlhZ25vc3RpY1NldmVyaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5BYnN0cmFjdEVudW1lcmF0b3I7Ci0KLQotLyoqCi0gKiBXU0RMIGRpYWdub3N0aWMgc2V2ZXJpdHkgbGV2ZWxzIHR5cGUgc2FmZSBlbnVtZXJhdGlvbi4gVGhpcyBjbGFzcyBpcyBzaW1pbGFyCi0gKiB0byBYU0REaWFnbm9zdGljU2V2ZXJpdHkuCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcwotICogQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgZXh0ZW5kcyBBYnN0cmFjdEVudW1lcmF0b3IKLXsKLSAgLyoqCi0gICAqIFRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIHJlYWxseSBiYWQgYW5kIHRoYXQgZnVydGhlcgotICAgKiBwcm9jZXNzaW5nIGlzIGxpa2VseSBub3QgcG9zc2libGUuCi0gICAqIAotICAgKiBAc2VlICNGQVRBTF9MSVRFUkFMCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGQVRBTCA9IDA7Ci0KLSAgLyoqCi0gICAqIFRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIGJhZCBhbmQgdGhhdCB0aGUgc2NoZW1hIGlzCi0gICAqIGxpa2VseSBub3Qgc3VpdGFibGUgZm9yIHVzZS4KLSAgICogCi0gICAqIEBzZWUgI0VSUk9SX0xJVEVSQUwKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gMTsKLQotICAvKioKLSAgICogVGhpcyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2JsZW0gaXMgbm90IHRvbyBiYWQgYW5kIHRoYXQgdGhlCi0gICAqIGRlZmluaXRpb24gaXMgbGlrZWx5IHN1aXRhYmxlIGZvciB1c2UuCi0gICAqIAotICAgKiBAc2VlICNXQVJOSU5HX0xJVEVSQUwKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSAyOwotCi0gIC8qKgotICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvYmxlbSBpcyBvbmx5IHBvdGVudGlhbCBhbmQgdGhhdCB0aGUKLSAgICogZGVmaW5pdGlvbiBpcyB2ZXJ5IGxpa2VseSBzdWl0YWJsZSBmb3IgdXNlLgotICAgKiAKLSAgICogQHNlZSAjSU5GT1JNQVRJT05fTElURVJBTAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT1JNQVRJT04gPSAzOwotCi0gIC8qKgotICAgKiBUaGUgJzxlbT48Yj5GYXRhbDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi0gICAqIAotICAgKiBAc2VlICNGQVRBTAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IEZBVEFMX0xJVEVSQUwgPSBuZXcgV1NETERpYWdub3N0aWNTZXZlcml0eShGQVRBTCwgImZhdGFsIiwgImZhdGFsIik7Ci0KLSAgLyoqCi0gICAqIFRoZSAnPGVtPjxiPkVycm9yPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KLSAgICogCi0gICAqIEBzZWUgI0VSUk9SCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgRVJST1JfTElURVJBTCA9IG5ldyBXU0RMRGlhZ25vc3RpY1NldmVyaXR5KEVSUk9SLCAiZXJyb3IiLCAiZXJyb3IiKTsKLQotICAvKioKLSAgICogVGhlICc8ZW0+PGI+V2FybmluZzwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi0gICAqIAotICAgKiBAc2VlICNXQVJOSU5HCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkgV0FSTklOR19MSVRFUkFMID0gbmV3IFdTRExEaWFnbm9zdGljU2V2ZXJpdHkoV0FSTklORywgIndhcm5pbmciLCAid2FybmluZyIpOwotCi0gIC8qKgotICAgKiBUaGUgJzxlbT48Yj5JbmZvcm1hdGlvbjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCi0gICAqIAotICAgKiBAc2VlICNJTkZPUk1BVElPTgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IElORk9STUFUSU9OX0xJVEVSQUwgPSBuZXcgV1NETERpYWdub3N0aWNTZXZlcml0eShJTkZPUk1BVElPTiwgImluZm9ybWF0aW9uIiwgImluZm9ybWF0aW9uIik7Ci0KLSAgLyoqCi0gICAqIEFuIGFycmF5IG9mIGFsbCB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JyBlbnVtZXJhdG9ycy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFdTRExEaWFnbm9zdGljU2V2ZXJpdHlbXSBWQUxVRVNfQVJSQVkgPSBuZXcgV1NETERpYWdub3N0aWNTZXZlcml0eSBbXXsKLSAgICBGQVRBTF9MSVRFUkFMLAotICAgIEVSUk9SX0xJVEVSQUwsCi0gICAgV0FSTklOR19MSVRFUkFMLAotICAgIElORk9STUFUSU9OX0xJVEVSQUwsIH07Ci0KLSAgLyoqCi0gICAqIEEgcHVibGljIHJlYWQtb25seSBsaXN0IG9mIGFsbCB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JwotICAgKiBlbnVtZXJhdG9ycy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdCBWQUxVRVMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVkFMVUVTX0FSUkFZKSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZQotICAgKiBzcGVjaWZpZWQgbGl0ZXJhbCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NETERpYWdub3N0aWNTZXZlcml0eSBnZXQoU3RyaW5nIGxpdGVyYWwpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKLSAgICAgIGlmIChyZXN1bHQudG9TdHJpbmcoKS5lcXVhbHMobGl0ZXJhbCkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlICc8ZW0+PGI+RGlhZ25vc3RpYyBTZXZlcml0eTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZQotICAgKiBzcGVjaWZpZWQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NETERpYWdub3N0aWNTZXZlcml0eSBnZXRCeU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKLSAgICAgIGlmIChyZXN1bHQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgJzxlbT48Yj5EaWFnbm9zdGljIFNldmVyaXR5PC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlCi0gICAqIHNwZWNpZmllZCBpbnRlZ2VyIHZhbHVlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMRGlhZ25vc3RpY1NldmVyaXR5IGdldChpbnQgdmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKHZhbHVlKQotICAgIHsKLSAgICAgIGNhc2UgRkFUQUw6Ci0gICAgICByZXR1cm4gRkFUQUxfTElURVJBTDsKLSAgICAgIGNhc2UgRVJST1I6Ci0gICAgICByZXR1cm4gRVJST1JfTElURVJBTDsKLSAgICAgIGNhc2UgV0FSTklORzoKLSAgICAgIHJldHVybiBXQVJOSU5HX0xJVEVSQUw7Ci0gICAgICBjYXNlIElORk9STUFUSU9OOgotICAgICAgcmV0dXJuIElORk9STUFUSU9OX0xJVEVSQUw7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIE9ubHkgdGhpcyBjbGFzcyBjYW4gY29uc3RydWN0IGluc3RhbmNlcy4KLSAgICovCi0gIHByaXZhdGUgV1NETERpYWdub3N0aWNTZXZlcml0eShpbnQgdmFsdWUsIFN0cmluZyBuYW1lLCBTdHJpbmcgbGl0ZXJhbCkKLSAgewotICAgIHN1cGVyKHZhbHVlLCBuYW1lLCBsaXRlcmFsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYWE5YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL1dTRExQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLWltcG9ydCBqYXZhLnV0aWwuV2Vha0hhc2hNYXA7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RQYXJzZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ29tbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLWltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LkxvY2F0b3I7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi0KLS8qKgotICogVGhlIDxiPlNBWCBQYXJzZXI8L2I+IGZvciB0aGUgV1NETCBtb2RlbC4gVGhpcyBjbGFzcycgbWFpbiByZXNwb25zaWJpbGl0eSBpcwotICogdG8gY29tcHV0ZSBsaW5lL2NvbHVtbiBpbmZvcm1hdGlvbiBmb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBzb3VyY2UgWE1MCi0gKiBkb2N1bWVudC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gYSBtYXAgb2YgZWFjaCBub2RlIHRvIGl0cyB1c2VyIGRhdGEuCi0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcwotICogQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqIAotICogW0lTU1VFXSBNb3N0IG9mIHRoaXMgY2xhc3MnIGltcGxlbWVudGF0aW9uIGlzIGEgY2xvbmUgb2YgWFNEUGFyc2VyLiBUaGVyZSBhcmUKLSAqIHBsYW5zIHRvIHdvcmsgb24gY2xvc2VseSBpbnRlZ3JhdGluZyB0aGlzIGNsYXNzIGFuZCBYU0RQYXJzZXIgdG8gcHJvdmlkZSBmb3IKLSAqIHRoZSBtb3N0IGVmZmljaWVudCBwcm9jZXNzaW5nIG9mIGlubGluZSBzY2hlbWFzLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFBhcnNlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIGltcGxlbWVudHMgTGV4aWNhbEhhbmRsZXIKLXsKLSAgLyoqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGRhdGEgcGFydCBob2xkaW5nIGVuZCBjb2x1bW4gbG9jYXRpb24gb2YgYW4gZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkRfQ09MVU1OID0gImVuZENvbHVtbiI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogVGhlIG5hbWUgb2YgdGhlIHVzZXIgZGF0YSBwYXJ0IGhvbGRpbmcgZW5kIGxpbmUgbG9jYXRpb24gb2YgYW4gZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkRfTElORSA9ICJlbmRMaW5lIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBUaGUgbmFtZSBvZiB0aGUgdXNlciBkYXRhIHBhcnQgaG9sZGluZyBzdGFydCBjb2x1bW4gbG9jYXRpb24gb2YgYW4gZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFSVF9DT0xVTU4gPSAic3RhcnRDb2x1bW4iOyAvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGRhdGEgcGFydCBob2xkaW5nIHN0YXJ0IGxpbmUgbG9jYXRpb24gb2YgYW4gZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFSVF9MSU5FID0gInN0YXJ0TGluZSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogSG9sZHMgcGFpcnMgTm9kZSAtPiBNYXAgd2l0aCB1c2VyIGRhdGEuCi0gICAqIAotICAgKiBAc2VlICNFTkRfQ09MVU1OCi0gICAqIEBzZWUgI0VORF9MSU5FCi0gICAqIEBzZWUgI1NUQVJUX0NPTFVNTgotICAgKiBAc2VlICNTVEFSVF9MSU5FCi0gICAqIAotICAgKiBBIFdlYWtIYXNoTWFwIGlzIHVzZWQgaW4gb3JkZXIgdG8gc2ltcGxpZnkgdGhpcyBtYXAncyBtYWludGVuYW5jZS4gQXMgbm9kZXMKLSAgICogYXJlIGdhcmJhZ2UgY29sbGVjdGVkIHdoZW4gbm90IG5lZWRlZCBhbnltb3JlLCB0aGUgSlZNIHdpbGwgdGFrZSBjYXJlIG9mCi0gICAqIHJlbW92aW5nIGVudHJpZXMgZnJvbSB0aGlzIG1hcC4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgTWFwIHVzZXJEYXRhTWFwID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKG5ldyBXZWFrSGFzaE1hcCgpKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY29sdW1uIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIGVuZHMuCi0gICAqIAotICAgKiBAcGFyYW0gbm9kZQotICAgKiAgICAgICAgICB0aGUgbm9kZSB0byBxdWVyeS4KLSAgICogQHJldHVybiB0aGUgY29sdW1uIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIGVuZHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRFbmRDb2x1bW4oTm9kZSBub2RlKQotICB7Ci0gICAgSW50ZWdlciByZXN1bHQgPSAoSW50ZWdlcilnZXRVc2VyRGF0YShub2RlKS5nZXQoRU5EX0NPTFVNTik7Ci0gICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gMSA6IHJlc3VsdC5pbnRWYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxpbmUgYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgZW5kcy4KLSAgICogCi0gICAqIEBwYXJhbSBub2RlCi0gICAqICAgICAgICAgIHRoZSBub2RlIHRvIHF1ZXJ5LgotICAgKiBAcmV0dXJuIHRoZSBsaW5lIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIGVuZHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRFbmRMaW5lKE5vZGUgbm9kZSkKLSAgewotICAgIEludGVnZXIgcmVzdWx0ID0gKEludGVnZXIpZ2V0VXNlckRhdGEobm9kZSkuZ2V0KEVORF9MSU5FKTsKLSAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyAxIDogcmVzdWx0LmludFZhbHVlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY29sdW1uIGF0IHdoaWNoIHRoZSBnaXZlbiBub2RlIHN0YXJ0cy4KLSAgICogCi0gICAqIEBwYXJhbSBub2RlCi0gICAqICAgICAgICAgIHRoZSBub2RlIHRvIHF1ZXJ5LgotICAgKiBAcmV0dXJuIHRoZSBjb2x1bW4gYXQgd2hpY2ggdGhlIGdpdmVuIG5vZGUgc3RhcnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0U3RhcnRDb2x1bW4oTm9kZSBub2RlKQotICB7Ci0gICAgSW50ZWdlciByZXN1bHQgPSAoSW50ZWdlcilnZXRVc2VyRGF0YShub2RlKS5nZXQoU1RBUlRfQ09MVU1OKTsKLSAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyAxIDogcmVzdWx0LmludFZhbHVlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGluZSBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBzdGFydHMuCi0gICAqIAotICAgKiBAcGFyYW0gbm9kZQotICAgKiAgICAgICAgICB0aGUgbm9kZSB0byBxdWVyeS4KLSAgICogQHJldHVybiB0aGUgbGluZSBhdCB3aGljaCB0aGUgZ2l2ZW4gbm9kZSBzdGFydHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRTdGFydExpbmUoTm9kZSBub2RlKQotICB7Ci0gICAgSW50ZWdlciByZXN1bHQgPSAoSW50ZWdlcilnZXRVc2VyRGF0YShub2RlKS5nZXQoU1RBUlRfTElORSk7Ci0gICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gMSA6IHJlc3VsdC5pbnRWYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHVzZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUuIElmIHRoZSBub2RlIGhhcyBubyB1c2VyCi0gICAqIGRhdGEsIGEgbmV3IGVtcHR5IG1hcCBpcyBjcmVhdGVkLgotICAgKiAKLSAgICogQHBhcmFtIG5vZGUKLSAgICogICAgICAgICAgdGhlIG5vZGUgdG8gcXVlcnkuCi0gICAqIEByZXR1cm4gdGhlIHVzZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1hcCBnZXRVc2VyRGF0YShOb2RlIG5vZGUpCi0gIHsKLSAgICBNYXAgcmVzdWx0ID0gKE1hcCl1c2VyRGF0YU1hcC5nZXQobm9kZSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICB1c2VyRGF0YU1hcC5wdXQobm9kZSwgcmVzdWx0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByb3RlY3RlZCBpbnQgY29sdW1uOwotCi0gIExpc3QgZGlhZ25vc3RpY3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgcHJvdGVjdGVkIERvY3VtZW50IGRvY3VtZW50OwotCi0gIHByb3RlY3RlZCBFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBlbmNvZGluZzsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpblNjaGVtYTsKLQotICBwcm90ZWN0ZWQgaW50IGxpbmU7Ci0KLSAgcHJvdGVjdGVkIExvY2F0b3IgbG9jYXRvcjsKLQotICBwcm90ZWN0ZWQgU0FYUGFyc2VyIHNheFBhcnNlcjsKLQotICBwcm90ZWN0ZWQgU3RhY2sgc3RhY2sgPSBuZXcgU3RhY2soKTsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMUGFyc2VyKCkKLSAgewotICAgIHNheFBhcnNlciA9IGNyZWF0ZVNBWFBhcnNlcigpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyI2NoYXJhY3RlcnMoY2hhcltdLCBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhcltdIGNoYXJhY3RlcnMsIGludCBzdGFydCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgVGV4dCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ldyBTdHJpbmcoY2hhcmFjdGVycywgc3RhcnQsIGxlbmd0aCkpOwotICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGV4dE5vZGUpOwotICAgIHNhdmVMb2NhdGlvbigpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIjY29tbWVudChjaGFyW10sIGludCwgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgY29tbWVudChjaGFyW10gY2hhcmFjdGVycywgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgICBDb21tZW50IGNvbW1lbnROb2RlID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChuZXcgU3RyaW5nKGNoYXJhY3RlcnMsIHN0YXJ0LCBsZW5ndGgpKTsKLSAgICBpZiAoZWxlbWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIGRvY3VtZW50LmFwcGVuZENoaWxkKGNvbW1lbnROb2RlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29tbWVudE5vZGUpOwotICAgIH0KLSAgICBzYXZlTG9jYXRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGVtcHR5IERPTSBEb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gYW4gZW1wdHkgRE9NIERvY3VtZW50IG9yIG51bGwgaXMgYSBKQVhQIG1pc2NvbmZpZ3VyYXRpb24gZXJyb3IKLSAgICogICAgICAgICBvY2N1cnMuCi0gICAqLwotICBwcml2YXRlIERvY3VtZW50IGNyZWF0ZURvY3VtZW50KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgIGRvY3VtZW50QnVpbGRlckZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0gICAgICBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotICAgICAgRG9jdW1lbnRCdWlsZGVyIGRvY3VtZW50QnVpbGRlciA9IGRvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgICByZXR1cm4gZG9jdW1lbnRCdWlsZGVyLm5ld0RvY3VtZW50KCk7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBXU0RMUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgdGhlIFNBWFBhcnNlciBpbnN0YW5jZSB1c2VkIGZvciBwYXJzaW5nIHRoZSBzb3VyY2UgV1NETCBYTUwKLSAgICogZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIGEgY29uZmlndXJlZCBTQVhQYXJzZXIgaW5zdGFuY2Ugb3IgbnVsbCBpZiBhbiBleGNlcHRpb24gb2NjdXJzLgotICAgKiAgICAgICAgIFByb2JsZW1zIGFyZSByZXBvcnRlZCB0aHJvdWdoIHRoZSBkaWFnbm9zdGljcyBjb2xsZWN0aW9uLgotICAgKi8KLSAgcHJpdmF0ZSBTQVhQYXJzZXIgY3JlYXRlU0FYUGFyc2VyKCkKLSAgewotICAgIFNBWFBhcnNlciBzYXhQYXJzZXIgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIFNBWFBhcnNlckZhY3Rvcnkgc2F4UGFyc2VyRmFjdG9yeSA9IFNBWFBhcnNlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgIHNheFBhcnNlckZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0gICAgICBzYXhQYXJzZXJGYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCi0gICAgICBzYXhQYXJzZXJGYWN0b3J5LnNldEZlYXR1cmUoImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIiwgZmFsc2UpOyAvLyROT04tTkxTLU4kCi0gICAgICBzYXhQYXJzZXJGYWN0b3J5LnNldEZlYXR1cmUoImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtTiQKLSAgICAgIHNheFBhcnNlckZhY3Rvcnkuc2V0RmVhdHVyZSgiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZS1wcmVmaXhlcyIsIHRydWUpOyAvLyROT04tTkxTLU4kCi0KLSAgICAgIHNheFBhcnNlciA9IHNheFBhcnNlckZhY3RvcnkubmV3U0FYUGFyc2VyKCk7Ci0KLSAgICAgIHNheFBhcnNlci5zZXRQcm9wZXJ0eSgiaHR0cDovL3htbC5vcmcvc2F4L3Byb3BlcnRpZXMvbGV4aWNhbC1oYW5kbGVyIiwgdGhpcyk7IC8vJE5PTi1OTFMtTiQKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgZmF0YWxFcnJvcihleGNlcHRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgZmF0YWxFcnJvcihleGNlcHRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBzYXhQYXJzZXI7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNlbmRDREFUQSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBlbmRDREFUQSgpCi0gIHsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNlbmREb2N1bWVudCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBlbmREb2N1bWVudCgpCi0gIHsKLSAgICBlbGVtZW50ID0gbnVsbDsKLSAgICBzYXZlTG9jYXRpb24oKTsKLSAgICB0aGlzLmxvY2F0b3IgPSBudWxsOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIjZW5kRFREKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZERURCgpCi0gIHsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNlbmRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgICBzYXZlTG9jYXRpb24oKTsKLQotICAgIE1hcCBleHRlbmRlZEF0dHJpYnV0ZXMgPSBudWxsOwotCi0gICAgaWYgKGluU2NoZW1hKQotICAgIHsKLSAgICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9IFhTRFBhcnNlci5nZXRVc2VyRGF0YShlbGVtZW50KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9IGdldFVzZXJEYXRhKGVsZW1lbnQpOwotICAgIH0KLQotICAgIGV4dGVuZGVkQXR0cmlidXRlcy5wdXQoRU5EX0xJTkUsIG5ldyBJbnRlZ2VyKGxpbmUpKTsKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMucHV0KEVORF9DT0xVTU4sIG5ldyBJbnRlZ2VyKGNvbHVtbikpOwotCi0gICAgaWYgKGlzU2NoZW1hRWxlbWVudCh1cmksIGxvY2FsTmFtZSkpCi0gICAgewotICAgICAgaW5TY2hlbWEgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBlbGVtZW50ID0gKEVsZW1lbnQpc3RhY2sucG9wKCk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNlbmRFbnRpdHkoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEVudGl0eShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKQotICB7Ci0gICAgV1NETERpYWdub3N0aWNJbXBsIGRpYWdub3N0aWMgPSBuZXcgV1NETERpYWdub3N0aWNJbXBsKCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5LkVSUk9SX0xJVEVSQUwpOwotICAgIGRpYWdub3N0aWMuc2V0TWVzc2FnZShXU0RMUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0lPRXJyb3JfbWVzc2FnZSIsIG5ldyBPYmplY3QgW117IGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkgfSkpOwotICAgIGRpYWdub3N0aWMuc2V0TGluZShleGNlcHRpb24uZ2V0TGluZU51bWJlcigpKTsKLSAgICBkaWFnbm9zdGljLnNldENvbHVtbihleGNlcHRpb24uZ2V0Q29sdW1uTnVtYmVyKCkpOwotICAgIGRpYWdub3N0aWNzLmFkZChkaWFnbm9zdGljKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGZhdGFsRXJyb3IoSU9FeGNlcHRpb24gZXhjZXB0aW9uKQotICB7Ci0gICAgV1NETERpYWdub3N0aWNJbXBsIGRpYWdub3N0aWMgPSBuZXcgV1NETERpYWdub3N0aWNJbXBsKCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRTZXZlcml0eShXU0RMRGlhZ25vc3RpY1NldmVyaXR5LkZBVEFMX0xJVEVSQUwpOwotICAgIGRpYWdub3N0aWMuc2V0TWVzc2FnZShXU0RMUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0lPRXJyb3JfbWVzc2FnZSIsIG5ldyBPYmplY3QgW117IGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkgfSkpOwotICAgIGRpYWdub3N0aWNzLmFkZChkaWFnbm9zdGljKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGZhdGFsRXJyb3IoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleGNlcHRpb24pCi0gIHsKLSAgICBXU0RMRGlhZ25vc3RpY0ltcGwgZGlhZ25vc3RpYyA9IG5ldyBXU0RMRGlhZ25vc3RpY0ltcGwoKTsKLSAgICBkaWFnbm9zdGljLnNldFNldmVyaXR5KFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUxfTElURVJBTCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRNZXNzYWdlKFdTRExQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUGFyc2VyRXJyb3JfbWVzc2FnZSIsIG5ldyBPYmplY3QgW117IGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkgfSkpOwotICAgIGRpYWdub3N0aWNzLmFkZChkaWFnbm9zdGljKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgewotICAgIFdTRExEaWFnbm9zdGljSW1wbCBkaWFnbm9zdGljID0gbmV3IFdTRExEaWFnbm9zdGljSW1wbCgpOwotICAgIGRpYWdub3N0aWMuc2V0U2V2ZXJpdHkoV1NETERpYWdub3N0aWNTZXZlcml0eS5GQVRBTF9MSVRFUkFMKTsKLSAgICBkaWFnbm9zdGljLnNldE1lc3NhZ2UoV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9QYXJzZXJFcnJvcl9tZXNzYWdlIiwgbmV3IE9iamVjdCBbXXsgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSB9KSk7Ci0gICAgZGlhZ25vc3RpY3MuYWRkKGRpYWdub3N0aWMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pCi0gIHsKLSAgICBXU0RMRGlhZ25vc3RpY0ltcGwgZGlhZ25vc3RpYyA9IG5ldyBXU0RMRGlhZ25vc3RpY0ltcGwoKTsKLSAgICBkaWFnbm9zdGljLnNldFNldmVyaXR5KFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUxfTElURVJBTCk7Ci0gICAgZGlhZ25vc3RpYy5zZXRNZXNzYWdlKFdTRExQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUGFyc2VyRXJyb3JfbWVzc2FnZSIsIG5ldyBPYmplY3QgW117IGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkgfSkpOwotICAgIGRpYWdub3N0aWMuc2V0TGluZShleGNlcHRpb24uZ2V0TGluZU51bWJlcigpKTsKLSAgICBkaWFnbm9zdGljLnNldENvbHVtbihleGNlcHRpb24uZ2V0Q29sdW1uTnVtYmVyKCkpOwotICAgIGRpYWdub3N0aWNzLmFkZChkaWFnbm9zdGljKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm92aWRlcyBhIGNvbGxlY3Rpb24gd2l0aCB0aGUgZGlhZ25vc3RpY3MgZ2VuZXJhdGVkIGR1cmluZyBwYXJzaW5nLgotICAgKiAKLSAgICogQHJldHVybiBhIENvbGxlY3Rpb24gb2Yge0BsaW5rIFdTRExEaWFnbm9zdGljfSBvYmplY3RzLgotICAgKi8KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0RGlhZ25vc3RpY3MoKQotICB7Ci0gICAgcmV0dXJuIGRpYWdub3N0aWNzOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb3ZpZGVzIHRoZSBET00gZG9jdW1lbnQgY3JlYXRlZCBieSBwYXJzaW5nIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgcmVzdWx0aW5nIERPTSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBnZXREb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gZG9jdW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiBhbiBlbGVtZW50IGlzIHRoZSByb290IFhNTCBzY2hlbWEgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkKLSAgICogICAgICAgICAgdGhlIFVSSSB0byB0ZXN0LgotICAgKiBAcGFyYW0gbG9jYWxOYW1lCi0gICAqICAgICAgICAgIHRoZSBlbGVtZW50J3MgbG9jYWwgbmFtZS4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBlbGVtZW50IGlzIHRoZSByb290IFhNTCBzY2hlbWEgZWxlbWVudCwgZmFsc2UKLSAgICogICAgICAgICBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNTY2hlbWFFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICBpZiAodXJpLmVxdWFscyhYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpICYmIGxvY2FsTmFtZS5lcXVhbHMoWFNEQ29uc3RhbnRzLlNDSEVNQV9FTEVNRU5UX1RBRykpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBhcnNlKElucHV0U291cmNlIGlucHV0U291cmNlKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc2F4UGFyc2VyLnBhcnNlKGlucHV0U291cmNlLCB0aGlzKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBmYXRhbEVycm9yKGV4Y2VwdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIGlmIChkaWFnbm9zdGljcy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIGZhdGFsRXJyb3IoZXhjZXB0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2VzIHRoZSBYTUwgY29udGVudCByZWFkIGZyb20gdGhlIGdpdmVuIGlucHV0IHN0cmVhbS4KLSAgICogCi0gICAqIEBwYXJhbSBpbnB1dFN0cmVhbQotICAgKiAgICAgICAgICB0aGUgc291cmNlIGlucHV0IHN0cmVhbS4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc2F4UGFyc2VyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShpbnB1dFN0cmVhbSksIHRoaXMpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIGZhdGFsRXJyb3IoZXhjZXB0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgaWYgKGRpYWdub3N0aWNzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgZmF0YWxFcnJvcihleGNlcHRpb24pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9uKFN0cmluZyB0YXJnZXQsIFN0cmluZyBkYXRhKQotICB7Ci0gICAgTm9kZSBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBkb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTsKLQotICAgIGlmIChzdGFjay5pc0VtcHR5KCkpCi0gICAgewotICAgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQocHJvY2Vzc2luZ0luc3RydWN0aW9uKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQocHJvY2Vzc2luZ0luc3RydWN0aW9uKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjcmVzb2x2ZUVudGl0eShqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2U7Ci0gICAgaWYgKCItLy9XM0MvL0RURCBYTUxTQ0hFTUEgMjAwMTAyLy9FTiIuZXF1YWxzSWdub3JlQ2FzZShwdWJsaWNJZCkpCi0gICAgewotICAgICAgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UoWFNEUGx1Z2luLklOU1RBTkNFLmdldEJhc2VVUkwoKSArICJjYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLmR0ZCIpOwotICAgICAgaW5wdXRTb3VyY2Uuc2V0UHVibGljSWQocHVibGljSWQpOwotICAgIH0KLSAgICBlbHNlIGlmIChzeXN0ZW1JZCAhPSBudWxsICYmIHN5c3RlbUlkLnN0YXJ0c1dpdGgoImZpbGU6Ly9idW5kbGVlbnRyeToiKSkKLSAgICB7Ci0gICAgICBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShzeXN0ZW1JZC5zdWJzdHJpbmcoNykpOwotICAgICAgaW5wdXRTb3VyY2Uuc2V0UHVibGljSWQocHVibGljSWQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlucHV0U291cmNlID0gc3VwZXIucmVzb2x2ZUVudGl0eShwdWJsaWNJZCwgc3lzdGVtSWQpOwotICAgICAgICBpZiAoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbihleGNlcHRpb24pOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbnB1dFNvdXJjZTsKLSAgfQotCi0gIC8qKgotICAgKiBTYXZlcyB0aGUgY3VycmVudCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNhdmVMb2NhdGlvbigpCi0gIHsKLSAgICBsaW5lID0gbG9jYXRvci5nZXRMaW5lTnVtYmVyKCk7Ci0gICAgY29sdW1uID0gbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKTsKLQotICAgIC8vIFRoZSBjcmltc29uIHBhcnNlciBzZWVtcyB0byBnaXZlIHBvb3IgY29vZGluYXRlcyBhbmQgaXMgMC1iYXNlZCBmb3IgbGluZQotICAgIC8vIGNvdW50LgotCi0gICAgaWYgKGNvbHVtbiA9PSAtMSkKLSAgICB7Ci0gICAgICBjb2x1bW4gPSAxOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNzZXREb2N1bWVudExvY2F0b3Iob3JnLnhtbC5zYXguTG9jYXRvcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERvY3VtZW50TG9jYXRvcihMb2NhdG9yIGxvY2F0b3IpCi0gIHsKLSAgICB0aGlzLmxvY2F0b3IgPSBsb2NhdG9yOwotICAgIHN1cGVyLnNldERvY3VtZW50TG9jYXRvcihsb2NhdG9yKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI3N0YXJ0Q0RBVEEoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRDREFUQSgpCi0gIHsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNzdGFydERvY3VtZW50KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoKQotICB7Ci0gICAgc2F2ZUxvY2F0aW9uKCk7Ci0gICAgZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIjc3RhcnREVEQoamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnREVEQoU3RyaW5nIG5hbWUsIFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjc3RhcnRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLnhtbC5zYXguQXR0cmlidXRlcykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKCFpblNjaGVtYSkKLSAgICB7Ci0gICAgICBpblNjaGVtYSA9IGlzU2NoZW1hRWxlbWVudCh1cmksIGxvY2FsTmFtZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHVyaSwgcU5hbWUpOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwLCBjb3VudCA9IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHJpYnV0ZVVSSSA9IGF0dHJpYnV0ZXMuZ2V0VVJJKGluZGV4KTsKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVRTmFtZSA9IGF0dHJpYnV0ZXMuZ2V0UU5hbWUoaW5kZXgpOwotICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlcy5nZXRWYWx1ZShpbmRleCk7Ci0KLSAgICAgIGlmIChhdHRyaWJ1dGVRTmFtZS5lcXVhbHMoInhtbG5zIikgfHwgYXR0cmlidXRlUU5hbWUuc3RhcnRzV2l0aCgieG1sbnM6IikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgewotICAgICAgICBhdHRyaWJ1dGVVUkkgPSBYU0RDb25zdGFudHMuWE1MTlNfVVJJXzIwMDA7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgiIi5lcXVhbHMoYXR0cmlidXRlVVJJKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBhdHRyaWJ1dGVVUkkgPSBudWxsOwotICAgICAgfQotCi0gICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZU5TKGF0dHJpYnV0ZVVSSSwgYXR0cmlidXRlUU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhY2suaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIGRvY3VtZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTsKLSAgICB9Ci0KLSAgICBzdGFjay5wdXNoKGVsZW1lbnQpOwotICAgIGVsZW1lbnQgPSBuZXdFbGVtZW50OwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGxvY2F0aW9uIGF0dHJpYnV0ZXMgZW5kIHVwIGluIHRoZSBYU0RQYXJzZXIncyB1c2VyIGRhdGEgaWYKLSAgICAvLyB3ZSBhcmUgaW5zaWRlIGFuIGlubGluZSBzY2hlbWEuIElmIG5vdCwgdGhleSBzaG91bGQgZ28gaW4gdGhlCi0gICAgLy8gV1NETFBhcnNlcidzIHVzZXIgZGF0YS4KLQotICAgIE1hcCBleHRlbmRlZEF0dHJpYnV0ZXMgPSBudWxsOwotCi0gICAgaWYgKGluU2NoZW1hKQotICAgIHsKLSAgICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9IFhTRFBhcnNlci5nZXRVc2VyRGF0YShlbGVtZW50KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9IGdldFVzZXJEYXRhKGVsZW1lbnQpOwotICAgIH0KLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMucHV0KFNUQVJUX0xJTkUsIG5ldyBJbnRlZ2VyKGxpbmUpKTsKLSAgICBleHRlbmRlZEF0dHJpYnV0ZXMucHV0KFNUQVJUX0NPTFVNTiwgbmV3IEludGVnZXIoY29sdW1uKSk7Ci0KLSAgICBzYXZlTG9jYXRpb24oKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI3N0YXJ0RW50aXR5KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydEVudGl0eShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyI3dhcm5pbmcob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgewotICAgIFdTRExEaWFnbm9zdGljSW1wbCBkaWFnbm9zdGljID0gbmV3IFdTRExEaWFnbm9zdGljSW1wbCgpOwotICAgIGRpYWdub3N0aWMuc2V0U2V2ZXJpdHkoV1NETERpYWdub3N0aWNTZXZlcml0eS5XQVJOSU5HX0xJVEVSQUwpOwotICAgIGRpYWdub3N0aWMuc2V0TWVzc2FnZSgiRE9NOiIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgICBkaWFnbm9zdGljLnNldExpbmUoZXhjZXB0aW9uLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgZGlhZ25vc3RpYy5zZXRDb2x1bW4oZXhjZXB0aW9uLmdldENvbHVtbk51bWJlcigpKTsKLSAgICBkaWFnbm9zdGljcy5hZGQoZGlhZ25vc3RpYyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMyOTUwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlLkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuWE1MUmVhZGVyRmFjdG9yeTsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGxvYWRpbmcgb2YgV1NETCBvciBYU0QgcmVzb3VyY2UgZnJvbQotICogVVJJJ3MgdGhhdCBkb24ndCBlbmQgd2l0aCAueHNkIG9yIC53c2RsIGV4dGVuc2lvbnMuCi0gKiAKLSAqIFRoZXNlIFVSSSdzIGZvaWwgRU1GJ3Mgc3RhbmRhcmQgcmVzb3VyY2UgbG9hZGluZyBtZWNoYW5pc20gd2ljaCBhc3N1bWVzIHRoYXQKLSAqIGEgcmVzb3VyY2UgdHlwZSBjYW4gYWx3YXlzIGJlIGRlZHVjZWQgZnJvbSB0aGUgZmlsZSBleHRlbnNpb24uCi0gKiAKLSAqICBDb2RlIEV4YW1wbGU6Ci0gKiAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAqICAgIFdTRExSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSByZWdpc3RyeSA9IG5ldyBXU0RMUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5JTlNUQU5DRSk7Ci0gKiAgICByZXNvdXJjZVNldC5zZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeShyZWdpc3RyeSk7Ci0gKiA8cD4KLSAqIDxiPk5vdGU6PC9iPiBUaGlzIGNsYXNzL2ludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvCi0gKiBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sKLSAqIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuCi0gKiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogPC9wPgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5IGV4dGVuZHMgUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnlJbXBsCi17Ci0gIHByb3RlY3RlZCBSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5IHBhcmVudDsKLQotICBwdWJsaWMgV1NETFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkgcGFyZW50KQotICB7Ci0gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0gIH0KLQotICBwdWJsaWMgTWFwIGdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpCi0gIHsKLSAgICByZXR1cm4gcGFyZW50LmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpOwotICB9Ci0KLSAgcHVibGljIE1hcCBnZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpCi0gIHsKLSAgICByZXR1cm4gcGFyZW50LmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCk7Ci0gIH0KLQotICBwdWJsaWMgRmFjdG9yeSBnZXRGYWN0b3J5KFVSSSB1cmkpCi0gIHsKLSAgICByZXR1cm4gZ2V0RmFjdG9yeSh1cmksIG51bGwpOwotICB9Ci0KLSAgcHVibGljIFJlc291cmNlLkZhY3RvcnkgZ2V0RmFjdG9yeShVUkkgdXJpLCBTdHJpbmcgY29udGVudFR5cGUpCi0gIHsKLSAgICBTdHJpbmcgdXJpU3RyaW5nID0gdXJpLnRvU3RyaW5nKCk7Ci0KLSAgICBGYWN0b3J5IGZhY3RvcnkgPSBwYXJlbnQuZ2V0RmFjdG9yeSh1cmksIGNvbnRlbnRUeXBlKTsKLSAgICBGYWN0b3J5IGRlZmF1bHRGYWN0b3J5ID0gKEZhY3RvcnkpSU5TVEFOQ0UuZ2V0RmFjdG9yeShVUkkuY3JlYXRlVVJJKERFRkFVTFRfRVhURU5TSU9OKSwgY29udGVudFR5cGUpOwotCi0gICAgLy8gZ2l2ZSB0aGUgcGFyZW50IHRoZSBmaXJzdCBjcmFjayBhdCBnZXR0aW5nIHRoZSBmYWN0b3J5Ci0gICAgLy8gaWYgdGhlIGZhY3RvcnkgaXMgbnVsbCBvciB0aGUga25vd24gJ2RlZmF1bHQnIGZhY3RvcnkgdGhlbiB3ZSdsbAotICAgIC8vIHRyeSB0byBjb21wdXRlIHRoZSBmYWN0b3J5IG91cnNlbHZlcwotICAgIGlmIChmYWN0b3J5ID09IG51bGwgfHwgZmFjdG9yeSA9PSBkZWZhdWx0RmFjdG9yeSkKLSAgICB7Ci0gICAgICBpZiAodXJpU3RyaW5nLmVuZHNXaXRoKCJ3c2RsIikgfHwgdXJpU3RyaW5nLmVuZHNXaXRoKCJXU0RMIikpCi0gICAgICB7Ci0gICAgICAgIC8vIGhhbmRsZSBjYXNlcyBsaWtlICJodHRwOi8veHh4L0Rpc3RhbmNlLmp3cz93c2RsIgotICAgICAgICAvLyAgICAgICAgICAJCi0gICAgICAgIGZhY3RvcnkgPSBwYXJlbnQuZ2V0RmFjdG9yeShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSwgY29udGVudFR5cGUpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodXJpU3RyaW5nLmVuZHNXaXRoKCJ4c2QiKSB8fCB1cmlTdHJpbmcuZW5kc1dpdGgoIlhTRCIpKQotICAgICAgewotICAgICAgICAvLyBoYW5kbGUgY2FzZXMgbGlrZSAiaHR0cDovL3h4eC9EaXN0YW5jZS5qd3M/eHNkIgotICAgICAgICAvLyAgICAgICAgCQotICAgICAgICBmYWN0b3J5ID0gcGFyZW50LmdldEZhY3RvcnkoVVJJLmNyZWF0ZVVSSSgiKi54c2QiKSwgY29udGVudFR5cGUpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgLy9pZiAodXJpLmZpbGVFeHRlbnNpb24oKSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBoYW5kbGUgY2FzZXMgbGlrZSAiaHR0cDovL3h4eC9leGFtcGxlP2dldFF1b3RlIgotICAgICAgICAvLyAgICAgICAgICAgICAgCQotICAgICAgICAvLyBmaW5hbGx5IHdlIG11c3QgcmVzb3J0IHRvIG9wZW5pbmcgdGhlIHVyaSdzIHN0cmVhbSBhbmQKLSAgICAgICAgLy8gcGVla2luZyBhdCB0aGUgY29udGVudCB0byBkZXRlcm1pbmUgaWYgaXRzIGFuIHhzZCBvciB3c2RsCi0gICAgICAgIC8vICAgICAgICAgCQotICAgICAgICBTdHJpbmcgcm9vdEVsZW1lbnROYW1lID0gZ2V0Um9vdEVsZW1lbnROYW1lKHVyaVN0cmluZyk7Ci0gICAgICAgIGlmIChyb290RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChyb290RWxlbWVudE5hbWUuZXF1YWxzKCJzY2hlbWEiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmYWN0b3J5ID0gcGFyZW50LmdldEZhY3RvcnkoVVJJLmNyZWF0ZVVSSSgiKi54c2QiKSwgY29udGVudFR5cGUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChyb290RWxlbWVudE5hbWUuZXF1YWxzKCJkZWZpbml0aW9ucyIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZhY3RvcnkgPSBwYXJlbnQuZ2V0RmFjdG9yeShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSwgY29udGVudFR5cGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFjdG9yeTsKLSAgfQotCi0gIC8vIHRoaXMgbWV0aG9kIHVzZXMgYSBTQVggUGFyc2VyIHRvIHBhcnNlciBhIHN0cmVhbSBhbmQgZGV0ZXJtaW5lIHRoZSByb290IGVsZW1lbnQgbmFtZQotICAvLyBvZiBhbnkgeG1sIGNvbnRlbnQKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Um9vdEVsZW1lbnROYW1lKFN0cmluZyB1cmkpCi0gIHsKLSAgICBSb290RWxlbWVudE5hbWVDb250ZW50SGFuZGxlciBoYW5kbGVyID0gbmV3IFJvb3RFbGVtZW50TmFtZUNvbnRlbnRIYW5kbGVyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgWE1MUmVhZGVyIHJlYWRlciA9IFhNTFJlYWRlckZhY3RvcnkuY3JlYXRlWE1MUmVhZGVyKCk7Ci0gICAgICByZWFkZXIuc2V0Q29udGVudEhhbmRsZXIoaGFuZGxlcik7Ci0gICAgICByZWFkZXIucGFyc2UodXJpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGFuZGxlci5yb290RWxlbWVudE5hbWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFJvb3RFbGVtZW50TmFtZUNvbnRlbnRIYW5kbGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIKLSAgewotICAgIHB1YmxpYyBTdHJpbmcgcm9vdEVsZW1lbnROYW1lOwotCi0gICAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgewotICAgICAgcm9vdEVsZW1lbnROYW1lID0gbG9jYWxOYW1lOwotCi0gICAgICAvLyBoZXJlIEkgdGhyb3cgYW4gZXhjZXB0aW9uIHRvIG1ha2UgdGhlIFNBWCBQYXJzZXIgdG8gc3RvcCBwYXJzaW5nCi0gICAgICB0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKCJTQVhQYXJzZXIgaW50ZW50b25hbGx5IHN0b3BwZWQiKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvV1NETFJlc291cmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDllOGVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9XU0RMUmVzb3VyY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlVSSUNvbnZlcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5YU0RTY2hlbWFMb2NhdG9yQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RTY2hlbWFMb2NhdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLQotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2U8L2I+IGltcGxlbWVudGF0aW9uIGZvciB0aGUgbW9kZWwuCi0gKiBUaGlzIHNwZWNpYWxpemVkIHJlc291cmNlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGl0J3Mgb3duIHdheSBvZiBtYWtpbmcga2V5cyBhbmQgCi0gKiBocmVmcywgYW5kIGl0J3Mgb3duIHNlcmlhbGl6YXRpb24uIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIGZvciBzdWJjbGFzc2luZyAKLSAqIG91dHNpZGUgb2YgdGhlIG1vZGVsIGltcGxlbWVudGF0aW9uOyBpdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGlzIHdpdGggdGhlIAotICogUmVzb3VyY2UgZnJhbWV3b3JrLgotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyBjbGFzcy9pbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0bwotICogY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrCi0gKiBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbgotICogKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIDwvcD4KLSAqIEBzaW5jZSAxLjAKLSAqIEBpZ25vcmUKLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZUZhY3RvcnlJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMUmVzb3VyY2VJbXBsIGV4dGVuZHMgUmVzb3VyY2VJbXBsCi17Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHVzZUV4dGVuc2lvbkZhY3RvcmllcyA9IHRydWU7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRpbnVlT25Mb2FkRXJyb3IgPSB0cnVlOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9FWFRFTlNJT05fRkFDVE9SSUVTID0gIlVTRV9FWFRFTlNJT05fRkFDVE9SSUVTIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRJTlVFX09OX0xPQURfRVJST1IgPSAiQ09OVElOVUVfT05fTE9BRF9FUlJPUiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0VOQ09ESU5HID0gIldTRExfRU5DT0RJTkciOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9QUk9HUkVTU19NT05JVE9SID0gIldTRExfUFJPR1JFU1NfTU9OSVRPUiI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogQWRkIHRoaXMgb3B0aW9uIHdpdGggYSB2YWx1ZSBvZiBCb29sZWFuLlRSVUUgdG8gdGhlIG9wdGlvbnMgbWFwIHdoZW4KLSAgICogbG9hZGluZyBhIHJlc291cmNlIHRvIGluc3RydWN0IHRoZSBsb2FkZXIgdG8gdHJhY2sgc291cmNlIGNvZGUgbG9jYXRpb24gZm9yCi0gICAqIGVhY2ggbm9kZSBpbiB0aGUgc291cmNlIGRvY3VtZW50LgotICAgKiAKLSAgICogQHNlZSBXU0RMUGFyc2VyI2dldFVzZXJEYXRhKG9yZy53M2MuZG9tLk5vZGUpCi0gICAqIEBzZWUgV1NETFBhcnNlciNnZXRTdGFydENvbHVtbihvcmcudzNjLmRvbS5Ob2RlKQotICAgKiBAc2VlIFdTRExQYXJzZXIjZ2V0RW5kQ29sdW1uKG9yZy53M2MuZG9tLk5vZGUpCi0gICAqIEBzZWUgV1NETFBhcnNlciNnZXRTdGFydExpbmUob3JnLnczYy5kb20uTm9kZSkKLSAgICogQHNlZSBXU0RMUGFyc2VyI2dldEVuZExpbmUob3JnLnczYy5kb20uTm9kZSkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNLX0xPQ0FUSU9OID0gIlRSQUNLX0xPQ0FUSU9OIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4gCi0gICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IAotICAgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgdGhlIFVSSSBvZiB0aGUgbmV3IHJlc291cmNlLiAKLSAgICogQGdlbmVyYXRlZAotICAgKi8KLSAgcHVibGljIFdTRExSZXNvdXJjZUltcGwoVVJJIHVyaSkKLSAgewotICAgIHN1cGVyKHVyaSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBkb1NhdmUoT3V0cHV0U3RyZWFtIG9zLCBNYXAgb3B0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKCk7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLSAgICAgIGlmIChkb2N1bWVudCA9PSBudWxsKQotICAgICAgewotICAgICAgICAoKERlZmluaXRpb25JbXBsKWRlZmluaXRpb24pLnVwZGF0ZURvY3VtZW50KCk7Ci0gICAgICAgIGRvY3VtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudCgpOwotICAgICAgfQotCi0gICAgICBpZiAoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS51cGRhdGVFbGVtZW50KCk7Ci0gICAgICB9Ci0KLSAgICAgIGRvU2VyaWFsaXplKG9zLCBkb2N1bWVudCwgb3B0aW9ucyA9PSBudWxsID8gbnVsbCA6IChTdHJpbmcpb3B0aW9ucy5nZXQoV1NETF9FTkNPRElORykpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSdzIERlZmluaXRpb24uCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRDb250ZW50cygpLnNpemUoKSA9PSAxICYmIGdldENvbnRlbnRzKCkuZ2V0KDApIGluc3RhbmNlb2YgRGVmaW5pdGlvbiA/IChEZWZpbml0aW9uKWdldENvbnRlbnRzKCkuZ2V0KDApIDogbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgZG9TZXJpYWxpemUoT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgRG9jdW1lbnQgZG9jdW1lbnQsIFN0cmluZyBlbmNvZGluZykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFRyYW5zZm9ybWVyRmFjdG9yeSB0cmFuc2Zvcm1lckZhY3RvcnkgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gdHJhbnNmb3JtZXJGYWN0b3J5Lm5ld1RyYW5zZm9ybWVyKCk7Ci0KLSAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuTUVUSE9ELCAieG1sIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgLy8gVW5sZXNzIGEgd2lkdGggaXMgc2V0LCB0aGVyZSB3aWxsIGJlIG9ubHkgbGluZSBicmVha3MgYnV0IG5vIGluZGVudGF0aW9uLgotICAgICAgLy8gVGhlIElCTSBKREsgYW5kIHRoZSBTdW4gSkRLIGRvbid0IGFncmVlIG9uIHRoZSBwcm9wZXJ0eSBuYW1lLAotICAgICAgLy8gc28gd2Ugc2V0IHRoZW0gYm90aC4KLSAgICAgIC8vCi0gICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn1pbmRlbnQtYW1vdW50IiwgIjIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiMiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIGlmIChlbmNvZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCBlbmNvZGluZyk7Ci0gICAgICB9Ci0KLSAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShuZXcgRE9NU291cmNlKGRvY3VtZW50KSwgbmV3IFN0cmVhbVJlc3VsdChvdXRwdXRTdHJlYW0pKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBXU0RMUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBMb2FkcyBhIG5ldyB7QGxpbmsgV1NETFJlc291cmNlSW1wbH0gaW50byB0aGUgcmVzb3VyY2Ugc2V0LgotICAgKiBAcGFyYW0gaW5wdXRTb3VyY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcgcmVzb3VyY2UuCi0gICAqIEBwYXJhbSBvcHRpb25zIGFueSBvcHRpb25zIHRvIGluZmx1ZW5jZSBsb2FkaW5nIGJlaGF2aW9yLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZG9Mb2FkKElucHV0U291cmNlIGlucHV0U291cmNlLCBNYXAgb3B0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBUaGlzIHBhdHRlcm4gYXZvaWRzIGxvYWRpbmcgdGhlIElQcm9ncmVzc01vbml0b3IgY2xhc3Mgd2hlbiB0aGVyZSBpcyBubyBwcm9ncmVzcyBtb25pdG9yLgotICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzdGFuZC1hbG9uZSBleGVjdXRpb24gdG8gd29yayBjb3JyZWN0bHkuCi0gICAgLy8KLSAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9IG51bGw7Ci0gICAgT2JqZWN0IG1vbml0b3IgPSBvcHRpb25zID09IG51bGwgPyBudWxsIDogb3B0aW9ucy5nZXQoV1NETF9QUk9HUkVTU19NT05JVE9SKTsKLSAgICBpZiAobW9uaXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb2dyZXNzTW9uaXRvciA9IChJUHJvZ3Jlc3NNb25pdG9yKW1vbml0b3I7Ci0gICAgICBwcm9ncmVzc01vbml0b3Iuc2V0VGFza05hbWUoV1NETFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZXNvdXJjZUxvYWRfcHJvZ3Jlc3MiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb2dyZXNzTW9uaXRvci5zdWJUYXNrKGdldFVSSSgpLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIE9iamVjdCBiaW5kaW5ncyA9IG9wdGlvbnMgPT0gbnVsbCA/IG51bGwgOiBvcHRpb25zLmdldChVU0VfRVhURU5TSU9OX0ZBQ1RPUklFUyk7Ci0gICAgaWYgKGJpbmRpbmdzICE9IG51bGwgJiYgYmluZGluZ3MgaW5zdGFuY2VvZiBCb29sZWFuKQotICAgICAgLy8gdHJ1ZSBieSBkZWZhdWx0Ci0gICAgICB1c2VFeHRlbnNpb25GYWN0b3JpZXMgPSAoKEJvb2xlYW4pYmluZGluZ3MpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgT2JqZWN0IGNvbnRpbnVlT25FcnJvciA9IG9wdGlvbnMgPT0gbnVsbCA/IG51bGwgOiBvcHRpb25zLmdldChDT05USU5VRV9PTl9MT0FEX0VSUk9SKTsKLSAgICBpZiAoY29udGludWVPbkVycm9yICE9IG51bGwgJiYgY29udGludWVPbkVycm9yIGluc3RhbmNlb2YgQm9vbGVhbikKLSAgICAgIC8vIHRydWUgYnkgZGVmYXVsdAotICAgICAgY29udGludWVPbkxvYWRFcnJvciA9ICgoQm9vbGVhbiljb250aW51ZU9uRXJyb3IpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgRG9jdW1lbnQgZG9jID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHRyYWNrTG9jYXRpb24gPSBvcHRpb25zICE9IG51bGwgJiYgQm9vbGVhbi5UUlVFLmVxdWFscyhvcHRpb25zLmdldChUUkFDS19MT0NBVElPTikpOwotCi0gICAgICBpZiAodHJhY2tMb2NhdGlvbikKLSAgICAgIHsKLSAgICAgICAgZG9jID0gZ2V0RG9jdW1lbnRVc2luZ1NBWChpbnB1dFNvdXJjZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIERPTSBkb2N1bWVudAotICAgICAgICBkb2MgPSBnZXREb2N1bWVudChpbnB1dFNvdXJjZSwgbmV3IEludGVybmFsRXJyb3JIYW5kbGVyKCkpOwotICAgICAgfQotCi0gICAgICBpZiAoZG9jICE9IG51bGwgJiYgZG9jLmdldERvY3VtZW50RWxlbWVudCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmICghZmluZERlZmluaXRpb24oZG9jLmdldERvY3VtZW50RWxlbWVudCgpKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChjb250aW51ZU9uTG9hZEVycm9yKQotICAgICAgICAgICAgaGFuZGxlRGVmaW5pdGlvbkVsZW1lbnQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oV1NETFBsdWdpbi5nZXRQbHVnaW4oKS5nZXRTdHJpbmcoIl9FUlJPUl9JTlZBTElEX1dTREwiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBoYW5kbGVEZWZpbml0aW9uRWxlbWVudChudWxsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBpZiAoY29udGludWVPbkxvYWRFcnJvcikKLSAgICAgIHsKLSAgICAgICAgV1NETFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKLSAgICAgICAgaGFuZGxlRGVmaW5pdGlvbkVsZW1lbnQobnVsbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IGV4Y2VwdGlvbjsKLSAgICB9Ci0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWkubmV4dCgpOwotCi0gICAgICAvLyBJbml0aWFsaXplIHRoZSBpbmxpbmUgc2NoZW1hcyBsb2NhdGlvbiAKLSAgICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCA9IG51bGw7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IHR5cGVzLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClqLm5leHQoKTsKLSAgICAgICAgICBpZiAoIShleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgZWwgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBlbC5nZXRTY2hlbWEoKTsKLSAgICAgICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgICAgICBzY2hlbWEuc2V0U2NoZW1hTG9jYXRpb24oZ2V0VVJJKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJvZ3Jlc3NNb25pdG9yICE9IG51bGwpCi0gICAgewotICAgICAgcHJvZ3Jlc3NNb25pdG9yLndvcmtlZCgxKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTG9hZHMgYSBuZXcge0BsaW5rIFdTRExSZXNvdXJjZUltcGx9IGludG8gdGhlIHJlc291cmNlIHNldC4KLSAgICogQHBhcmFtIGlucHV0U3RyZWFtIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IHJlc291cmNlLgotICAgKiBAcGFyYW0gb3B0aW9ucyBhbnkgb3B0aW9ucyB0byBpbmZsdWVuY2UgbG9hZGluZyBiZWhhdmlvci4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGRvTG9hZChJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSwgTWFwIG9wdGlvbnMpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBpbnB1dFN0cmVhbSBpbnN0YW5jZW9mIFVSSUNvbnZlcnRlci5SZWFkYWJsZUlucHV0U3RyZWFtID8gbmV3IElucHV0U291cmNlKAotICAgICAgKChVUklDb252ZXJ0ZXIuUmVhZGFibGVJbnB1dFN0cmVhbSlpbnB1dFN0cmVhbSkuYXNSZWFkZXIoKSkgOiBuZXcgSW5wdXRTb3VyY2UoaW5wdXRTdHJlYW0pOwotCi0gICAgaWYgKGdldFVSSSgpICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGlkID0gZ2V0VVJJKCkudG9TdHJpbmcoKTsKLSAgICAgIGlucHV0U291cmNlLnNldFB1YmxpY0lkKGlkKTsKLSAgICAgIGlucHV0U291cmNlLnNldFN5c3RlbUlkKGlkKTsKLSAgICB9Ci0gICAgZG9Mb2FkKGlucHV0U291cmNlLCBvcHRpb25zKTsKLSAgfQotCi0gIC8qKgotICAgKiBVc2UgYSBjdXN0b20gU0FYIHBhcnNlciB0byBhbGxvdyB1cyB0byB0cmFjayB0aGUgc291cmNlIGxvY2F0aW9uIG9mIAotICAgKiBlYWNoIG5vZGUgaW4gdGhlIHNvdXJjZSBYTUwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSB0aGUgcGFyc2luZyBzb3VyY2UuIE11c3Qgbm90IGJlIG51bGwuIAotICAgKiBAcmV0dXJuIHRoZSBET00gZG9jdW1lbnQgY3JlYXRlZCBieSBwYXJzaW5nIHRoZSBpbnB1dCBzdHJlYW0uIAotICAgKi8KLSAgcHJpdmF0ZSBEb2N1bWVudCBnZXREb2N1bWVudFVzaW5nU0FYKElucHV0U291cmNlIGlucHV0U291cmNlKQotICB7Ci0gICAgV1NETFBhcnNlciB3c2RsUGFyc2VyID0gbmV3IFdTRExQYXJzZXIoKTsKLSAgICB3c2RsUGFyc2VyLnBhcnNlKGlucHV0U291cmNlKTsKLQotICAgIENvbGxlY3Rpb24gZXJyb3JzID0gd3NkbFBhcnNlci5nZXREaWFnbm9zdGljcygpOwotCi0gICAgaWYgKGVycm9ycyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZXJyb3JzLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEaWFnbm9zdGljIHdzZGxEaWFnbm9zdGljID0gKFdTRExEaWFnbm9zdGljKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgc3dpdGNoICh3c2RsRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpLmdldFZhbHVlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIFdTRExEaWFnbm9zdGljU2V2ZXJpdHkuRkFUQUw6Ci0gICAgICAgICAgY2FzZSBXU0RMRGlhZ25vc3RpY1NldmVyaXR5LkVSUk9SOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdldEVycm9ycygpLmFkZCh3c2RsRGlhZ25vc3RpYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBXU0RMRGlhZ25vc3RpY1NldmVyaXR5LldBUk5JTkc6Ci0gICAgICAgICAgY2FzZSBXU0RMRGlhZ25vc3RpY1NldmVyaXR5LklORk9STUFUSU9OOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdldFdhcm5pbmdzKCkuYWRkKHdzZGxEaWFnbm9zdGljKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIERvY3VtZW50IGRvYyA9IHdzZGxQYXJzZXIuZ2V0RG9jdW1lbnQoKTsKLSAgICByZXR1cm4gZG9jOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkcyBhIGRvY3VtZW50IHVzaW5nIFhlcmNlcy4KLSAgICogQHBhcmFtIGlucHV0U291cmNlIHRoZSBjb250ZW50cyB0byBwYXJzZS4KLSAgICogQHBhcmFtIGVycm9ySGFuZGxlciB0aGUgaGFuZGxlZCB1c2VkIGJ5IHRoZSBwYXJzZXIuCi0gICAqIEByZXR1cm4gYSBkb2N1bWVudC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIERvY3VtZW50IGdldERvY3VtZW50KElucHV0U291cmNlIGlucHV0U291cmNlLCBFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIENsYXNzTG9hZGVyIHByZXZpb3VzQ2xhc3NMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwotCi0gICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRvY3VtZW50QnVpbGRlckZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotICAgICAgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIFVzaW5nIGEgZGVmZXJyZWQgRE9NIGRvY3VtZW50IGluIHRoZSBXU0RMIG1vZGVsIG1heSBjYXVzZSBhCi0gICAgICAgIC8vIHBlcmZvcm1hbmNlIHByb2JsZW0gaW4gdGVybXMgb2YgbWVtb3J5IGNvbnN1bXB0aW9uIGluIHBhcnRpY3VsYXIuCi0gICAgICAgIC8vIFdlJ3JlIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBmZWF0dXJlIHdoaWNoIGluc3RydWN0cyB0aGUgWGVyY2VzIHBhcnNlcgotICAgICAgICAvLyB0byBub3QgdXNlIGRlZmVycmVkIERPTSB0cmVlcy4KLSAgICAgICAgLy8gVE9ETyBDb252ZXJ0IHRvIHVzZSBzZXRGZWF0dXJlIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUuIFRoZSBYZXJjZXMKLSAgICAgICAgLy8gdmVyc2lvbnMgPCAyLjcuMSBkbyBub3QgZnVsbHkgc3VwcG9ydCBzZXRGZWF0dXJlLCBzbyB3ZSBoYXZlIHRvIHVzZQotICAgICAgICAvLyBzZXRBdHRyaWJ1dGUuCi0gICAgICAgIGRvY3VtZW50QnVpbGRlckZhY3Rvcnkuc2V0QXR0cmlidXRlKCJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvZG9tL2RlZmVyLW5vZGUtZXhwYW5zaW9uIiwgQm9vbGVhbi5GQUxTRSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gSWdub3JlLCBhcyB0aGUgY29kZSB3aWxsIGhhdmUgdG8gcnVuIHdpdGggcGFyc2VycyBvdGhlciB0aGFuIFhlcmNlcy4KLSAgICAgIH0KLQotICAgICAgRG9jdW1lbnRCdWlsZGVyIGRvY3VtZW50QnVpbGRlciA9IGRvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0KLSAgICAgIC8vIFRCRCAtIFJldmlzaXQKLSAgICAgIC8vRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIgPSBjcmVhdGVFbnRpdHlSZXNvbHZlcigpOwotICAgICAgLy9kb2N1bWVudEJ1aWxkZXIuc2V0RW50aXR5UmVzb2x2ZXIoZW50aXR5UmVzb2x2ZXIpOwotCi0gICAgICBkb2N1bWVudEJ1aWxkZXIuc2V0RXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlcik7Ci0KLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZG9jdW1lbnRCdWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLSAgICAgIHJldHVybiBkb2N1bWVudDsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJT1dyYXBwZWRFeGNlcHRpb24oZXhjZXB0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWEV4Y2VwdGlvbiBleGNlcHRpb24pCi0gICAgewotICAgICAgdGhyb3cgbmV3IElPV3JhcHBlZEV4Y2VwdGlvbihleGNlcHRpb24pOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIocHJldmlvdXNDbGFzc0xvYWRlcik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGZpbmREZWZpbml0aW9uKEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmIChXU0RMQ29uc3RhbnRzLm5vZGVUeXBlKGVsZW1lbnQpID09IFdTRExDb25zdGFudHMuREVGSU5JVElPTikKLSAgICB7Ci0gICAgICBoYW5kbGVEZWZpbml0aW9uRWxlbWVudChlbGVtZW50KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAgIC8qCi0gICAgICAgZm9yIChOb2RlIGNoaWxkID0gZWxlbWVudC5nZXRGaXJzdENoaWxkKCk7IGNoaWxkICE9IG51bGw7IGNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICAgICB7Ci0gICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICB7Ci0gICAgICAgaWYgKGZpbmREZWZpbml0aW9uKChFbGVtZW50KSBjaGlsZCkpCi0gICAgICAgewotICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgfQotICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgKi8KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZURlZmluaXRpb25FbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlZmluaXRpb24oKTsKLSAgICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikuc2V0VXNlRXh0ZW5zaW9uRmFjdG9yaWVzKHVzZUV4dGVuc2lvbkZhY3Rvcmllcyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkltcGwuY3JlYXRlRGVmaW5pdGlvbihlbGVtZW50LCBnZXRVUkkoKS50b1N0cmluZygpLCB1c2VFeHRlbnNpb25GYWN0b3JpZXMpOwotICAgIH0KLSAgICBnZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLSAgICAvLyBEbyB3ZSBuZWVkIHRoZSBuZXh0IGxpbmU/Ci0gICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS5yZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtLCBEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIHNlcmlhbGl6ZShvdXRwdXRTdHJlYW0sIGRvY3VtZW50LCBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemUoT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgRG9jdW1lbnQgZG9jdW1lbnQsIFN0cmluZyBlbmNvZGluZykKLSAgewotICAgIGRvU2VyaWFsaXplKG91dHB1dFN0cmVhbSwgZG9jdW1lbnQsIGVuY29kaW5nKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemUoT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgc2VyaWFsaXplKG91dHB1dFN0cmVhbSwgZWxlbWVudCwgbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2VyaWFsaXplKE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0sIEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZG9TZXJpYWxpemUob3V0cHV0U3RyZWFtLCBlbGVtZW50LCBlbmNvZGluZyk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIGV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIGRvU2VyaWFsaXplKE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0sIEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGVuY29kaW5nKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFRyYW5zZm9ybWVyRmFjdG9yeSB0cmFuc2Zvcm1lckZhY3RvcnkgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gdHJhbnNmb3JtZXJGYWN0b3J5Lm5ld1RyYW5zZm9ybWVyKCk7Ci0KLSAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuTUVUSE9ELCAieG1sIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGlmIChlbmNvZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCBlbmNvZGluZyk7Ci0gICAgICB9Ci0KLSAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShuZXcgRE9NU291cmNlKGVsZW1lbnQpLCBuZXcgU3RyZWFtUmVzdWx0KG91dHB1dFN0cmVhbSkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgIHsKLSAgICAgIFdTRExQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBJbnRlcm5hbEVycm9ySGFuZGxlciBpbXBsZW1lbnRzIEVycm9ySGFuZGxlcgotICB7Ci0gICAgcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldTREwgUEFSU0UgRVJST1I6ICIgKyBlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXU0RMIFBBUlNFIEZBVEFMIEVSUk9SOiAiICsgZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV1NETCBQQVJTRSBXQVJOSU5HOiAiICsgZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgYXR0YWNoZWQoRU9iamVjdCBlT2JqZWN0KQotICB7Ci0gICAgc3VwZXIuYXR0YWNoZWQoZU9iamVjdCk7Ci0KLSAgICAvLyB3ZSBuZWVkIHRvIGF0dGFjaCBhIFhTRFNjaGVtYUxvY2F0b3IgaW4gb3JkZXIgdG8gcmVzb2x2ZSBpbmxpbmUgc2NoZW1hIGxvY2F0aW9ucwotICAgIC8vIGlmIHRoZXJlJ3Mgbm90IGFscmVhZHkgb25lIGF0dGFjaGVkCi0gICAgWFNEU2NoZW1hTG9jYXRvciB4c2RTY2hlbWFMb2NhdG9yID0gKFhTRFNjaGVtYUxvY2F0b3IpRWNvcmVVdGlsLmdldFJlZ2lzdGVyZWRBZGFwdGVyKHRoaXMsIFhTRFNjaGVtYUxvY2F0b3IuY2xhc3MpOwotICAgIGlmICh4c2RTY2hlbWFMb2NhdG9yID09IG51bGwpCi0gICAgewotICAgICAgZ2V0UmVzb3VyY2VTZXQoKS5nZXRBZGFwdGVyRmFjdG9yaWVzKCkuYWRkKG5ldyBYU0RTY2hlbWFMb2NhdG9yQWRhcHRlckZhY3RvcnkoKSk7Ci0gICAgfQotCi0gICAgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBEZWZpbml0aW9uSW1wbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uID0gKERlZmluaXRpb25JbXBsKWVPYmplY3Q7Ci0gICAgICBkZWZpbml0aW9uLnNldElubGluZVNjaGVtYUxvY2F0aW9ucyh0aGlzKTsKLSAgICB9Ci0gIH0KLSAgLyoKLSAgIHB1YmxpYyB2b2lkIHNldElubGluZVNjaGVtYUxvY2F0aW9ucyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gICB7Ci0gICAvLyBJbml0aWFsaXplIHRoZSBpbmxpbmUgc2NoZW1hcyBsb2NhdGlvbiAKLSAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgewotICAgZm9yIChJdGVyYXRvciBqID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgIHsKLSAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGVsID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBqLm5leHQoKTsKLSAgIFhTRFNjaGVtYSBzY2hlbWEgPSBlbC5nZXRTY2hlbWEoKTsKLSAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgIHsgIAotICAgc2NoZW1hLnNldFNjaGVtYUxvY2F0aW9uKGdldFVSSSgpLnRvU3RyaW5nKCkpOwotICAgfSAgCi0gICB9ICAgICAgICAKLSAgIH0gICAgICAKLSAgIH0qLwotfSAvL1dTRExSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ0ZWI3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsL3NyYy13c2RsL29yZy9lY2xpcHNlL3dzdC93c2RsL3V0aWwvcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi8vYXBpc3R5bGVzLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPHRpdGxlPldTREwgTW9kZWwgQVBJIE92ZXJ2aWV3PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPHA+Ci0gICAgICAgIFRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byB3b3JrIHdpdGggdGhlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPgotPHRhYmxlIHdpZHRoPSI1MDAiPgotPHRyPgotPHRkPgotPHA+Ci0JCVRoZSBXU0RMIG1vZGVsIEFQSSBhbGxvd3MgY2xpZW50cyB0byBsb2FkLCBtb2RpZnksIGFuZCBzYXZlIFdTREwgMS4xIGRvY3VtZW50cy4KLQkJPC9wPgotPC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC9zcmMtd3NkbC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91dGlsL3BhY2thZ2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjVhMGU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwvc3JjLXdzZGwvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdXRpbC9wYWNrYWdlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08aHRtbD4KLQk8aGVhZD4KLQkJPG1ldGEKLQkJCW5hbWU9InJvb3QiCi0JCi0JCQljb250ZW50PSIuLi8uLi8uLi8uLi8uLi8uLi8iIC8+Ci0JCTx0aXRsZT5XU0RMIE1vZGVsIEFQSSBPdmVydmlldzwvdGl0bGU+Ci0JPC9oZWFkPgotCi0JPGJvZHk+Ci0JCTxhYnN0cmFjdD4KLSAgICAgICAgVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIHdvcmsgd2l0aCB0aGUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L2Fic3RyYWN0PgotCQk8cD4KLQkJVGhlIFdTREwgbW9kZWwgQVBJIGFsbG93cyBjbGllbnRzIHRvIGxvYWQsIG1vZGlmeSwgYW5kIHNhdmUgV1NETCAxLjEgZG9jdW1lbnRzLgotCQk8L3A+IAotCTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOTE1OTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0iamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZSIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZDUxZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLXdzaXVpLmphcgotYnVpbGQueG1sCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMTExMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzaS51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNmNGZmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI1dlZCBNYXIgMjkgMDQ6MDg6NTggRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyOWQzYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNXZWQgTWFyIDI5IDA0OjA4OjU3IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgzZDRiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlX1BMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NpLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5XU0lVSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJV9QUk9WSURFUl9OQU1FCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5pY29uczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwud2l6YXJkczt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lOyBidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7cmVzb2x1dGlvbjo9b3B0aW9uYWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzO3Jlc29sdXRpb246PW9wdGlvbmFsO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5lZGl0b3JzO3Jlc29sdXRpb246PW9wdGlvbmFsO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O3Jlc29sdXRpb246PW9wdGlvbmFsO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvcjtyZXNvbHV0aW9uOj1vcHRpb25hbDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2U7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkudmlld3M7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5lZGl0b3JzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzaTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg1NzBmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS4uID0gc3JjLwotamFycy5jb21waWxlLm9yZGVyID0gLgotb3V0cHV0Li4gPSBiaW4vCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvaWNvbnMvZnVsbC9vYmoxNi92YWxpZGF0ZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvaWNvbnMvZnVsbC9vYmoxNi92YWxpZGF0ZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZWIxMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2ljb25zL2Z1bGwvb2JqMTYvdmFsaWRhdGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL2ljb25zL3dzaV9sb2dmaWxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvaWNvbnMvd3NpX2xvZ2ZpbGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiMTExMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvaWNvbnMvd3NpX2xvZ2ZpbGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI0NDJmZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSEtLSBDb25zdGFudHMgZm9yIHN0cmluZ3MgIAotCi1fUExVR0lOX05BTUUgICAgICAgICAgICAgICAgICA9IFNvYXAgTW9uaXRvcgotX1BST1ZJREVSX05BTUUgICAgICAgICAgICAgICAgPSBFY2xpcHNlLm9yZwotX1VJX1dTSV9WQUxJREFUT1IgICAgICAgICAgICAgPSBXUy1JIE1lc3NhZ2UgVmFsaWRhdG9yCi1fVUlfQUNUSU9OX1ZBTElEQVRFICAgICAgICAgICA9IFZhbGlkYXRlIFdTLUkgTG9nIEZpbGUKLV9VSV9XSVpBUkRfVkFMSURBVEVfTE9HX1RJVExFID0gVmFsaWRhdGUgV1MtSSBNZXNzYWdlIExvZyBGaWxlCi1fVUlfTE9HX0VESVRPUiAgICAgICAgICAgICAgICA9IFhNTCBFZGl0b3IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYTljNjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0tLT4gCi0KLTxwbHVnaW4+Ci0KLSAgICAKLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gUHVycG9zZTogQWRkIHZhbGlkYXRvciBhY3Rpb24gdG8gVENQSVAgbW9uaXRvci4gICAgICAgICAtLT4KLTwhLS0gRXh0ZW5zaW9uIHBvaW50OiBvcmcuZWNsaXBzZS51aS52aWV3QWN0aW9ucyAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3QWN0aW9ucyI+Ci0gICAgICA8dmlld0NvbnRyaWJ1dGlvbgotICAgICAgICAgICAgdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnZpZXciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkuYXJ0aWNsZXMuYWN0aW9uLmNvbnRyaWJ1dGlvbi52aWV3Ij4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSJXUy1JIFByb2ZpbGUgVmFsaWRhdG9yIgotICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi92YWxpZGF0ZS5naWYiCi0gICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1dJWkFSRF9WQUxJREFURV9MT0dfVElUTEUiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlcy5WYWxpZGF0ZVdTSVByb2ZpbGVBY3Rpb25EZWxlZ2F0ZSIKLSAgICAgICAgICAgICAgIHRvb2xiYXJQYXRoPSJncm91cDEiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlcy5WYWxpZGF0ZVdTSVByb2ZpbGVBY3Rpb25EZWxlZ2F0ZSI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvdmlld0NvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFB1cnBvc2U6IFRvIHJlZ2lzdGVyIFdTLUkgbWVzc2FnZSB2YWxpZGF0b3IuICAgICAgICAgICAgLS0+Ci08IS0tIEV4dGVuc2lvbiBwb2ludDogb3JnLmVjbGlwc2UudWkudmlld0FjdGlvbnMgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJ3c2lWYWxpZGF0b3IiCi0gICAgICAgICBuYW1lPSIlX1VJX1dTSV9WQUxJREFUT1IiCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdG9yIj4KLSAgICAgIDx2YWxpZGF0b3I+Ci0gICAgICAgICA8ZmlsdGVyCi0gICAgICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlPSJmYWxzZSIKLSAgICAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NpbXNnIj4KLSAgICAgICAgIDwvZmlsdGVyPgotICAgICAgICAgPGhlbHBlciAgICAgIAotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuSGVscGVyIj4KLSAgICAgICAgIDwvaGVscGVyPgotICAgICAgICAgPHJ1bgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJTWVzc2FnZVZhbGlkYXRvciI+Ci0gICAgICAgICA8L3J1bj4KLSAgICAgIDwvdmFsaWRhdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgIDwhLS0gRXh0ZW5zaW9uIHBvaW50OiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzICAtLT4gCi0gICA8IS0tIFB1cnBvc2U6IFNwZWNpZnkgZmlsZSBhc3NvY2lhdGlvbiBmb3Igd3NpbXNnLiAgICAgICAgICAgLS0+Ci0gICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzIj4gCi0gICAgICA8ZmlsZS1hc3NvY2lhdGlvbiAKLSAgICAgICBjb250ZW50LXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0gICAgICAgZmlsZS1leHRlbnNpb25zPSJ3c2ltc2ciLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gQWRkIHZhbGlkYXRlIGFjdGlvbiAgdG8gLndzaW1zZyBmaWxlICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzaW1zZyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zb2FwLnZhbGlkYXRlLndzaS5hY3Rpb24iPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfQUNUSU9OX1ZBTElEQVRFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXMuVmFsaWRhdGVXU0lMb2dGaWxlQWN0aW9uRGVsZWdhdGUiCi0gICAgICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXMuVmFsaWRhdGVXU0lMb2dGaWxlQWN0aW9uRGVsZWdhdGUiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjEzZmQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0gCi0vKioKLSAqIFRyYW5zbGF0ZWQgbWVzc2FnZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlcyBleHRlbmRzIE5MUyAKLXsKLSAgICAvLy0tLS0tLS0tLS0tLS0tLSBWYWxpZGF0aW9uIFdpemFyZCAtLS0tLS0tLS0tLS0tLS0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBWQUxJREFUSU9OX1dJWkFSRF9USVRMRTsKLQotCS8vLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChXU0RMIHBhZ2UpIC0tLS0tLS0tLS0tLS0tLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9GSUxFX1NIRUxMX1RFWFQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX0ZJTEVfVElUTEUgOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9GSUxFX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9TRUxFQ1RfV1NETF9GSUxFTkFNRV9IRUFESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9TRUxFQ1RfV1NETF9GSUxFTkFNRV9FWFBMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9JTkNMVURFX1dTRExfQlVUVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfUEFHRV9JTkNMVURFX1dTRExfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX1ZBTElEX1dTRExfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX1dPUktCRU5DSF9CVVRUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX0JST1dTRV9CVVRUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX1NFQVJDSF9VRERJX0JVVFRPTjsKLQotCS8vLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChXU0RMIGNvbnRlbnQgcGFnZSkgLS0tLS0tLS0tLS0tLS0tCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfU0VMRUNUX0hFQURJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfU0VMRUNUX0VYUEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfR1JPVVBfVEVYVF9FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX0dST1VQX1RFWFRfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9SQURJT19QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX1JBRElPX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfUkFESU9fUE9SVF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX1JBRElPX09QRVJBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9SQURJT19NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX0xBQkVMX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfTEFCRUxfTkFNRVNQQUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX0xBQkVMX1BBUkVOVDsKLQotCS8vLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChMb2cgcGFnZSkgLS0tLS0tLS0tLS0tLS0tCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTE9HX1BBR0VfU0VMRUNUX0xPR19GSUxFTkFNRV9IRUFESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExPR19QQUdFX1NFTEVDVF9MT0dfRklMRU5BTUVfRVhQTDsKLQotCS8vIEFjdGlvbnMKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBQ1RJT05fV1NJX1ZBTElEQVRPUjsKLQotCS8vLS0tLS0tLS0tLS0tLS0tIEVycm9ycyAtLS0tLS0tLS0tLS0tLS0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFUlJPUl9VTkFCTEVfVE9fVkFMSURBVEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRVJST1JfVkFMSURBVElPTl9GQUlMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRVJST1JfVEhFX1dTSU1TR19GSUxFX0lTX05PVF9WQUxJRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFUlJPUl9QUk9CTEVNU19SRUFESU5HX1dTSU1TR19GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVSUk9SX0lOVkFMSURfTE9HX0ZJTEVfRVhURU5TSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdBUk5JTkdfVkFMSURBVElPTl9XQVJOSU5HU19ERVRFQ1RFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXQVJOSU5HX0ZJTEVfQUxSRUFEWV9FWElTVFM7Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLSBJbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIC0tLS0tLS0tLS0tLS0tLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElORk9fVkFMSURBVElPTl9TVUNFRURFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJTkZPX1RIRV9XU0lNU0dfRklMRV9JU19WQUxJRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJTkZPX05PX01FU1NBR0VTX1RPX1ZBTElEQVRFOwotCi0gIHN0YXRpYyAKLSAgewotCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoV1NJVUlQbHVnaW4uUExVR0lOX0lEICsgIi5pbnRlcm5hbC5NZXNzYWdlcyIsIE1lc3NhZ2VzLmNsYXNzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL01lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvTWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY0YjM3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvTWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLSMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgICogCi0jICAqIENvbnRyaWJ1dG9yczogCi0jICAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jIC0tLS0tLS0tLS0tLS0tLSBWYWxpZGF0aW9uIFdpemFyZCAtLS0tLS0tLS0tLS0tLS0KLVZBTElEQVRJT05fV0laQVJEX1RJVExFICAgICAgICAgICAgICAgID0gVmFsaWRhdGUgV1MtSSBNZXNzYWdlIExvZyBGaWxlCi0KLSMgLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChXU0RMIHBhZ2UpIC0tLS0tLS0tLS0tLS0tLQotV1NETF9QQUdFX0ZJTEVfU0hFTExfVEVYVCAgICAgICAgICAgICAgPSBTZWxlY3QgRmlsZQotV1NETF9QQUdFX0ZJTEVfVElUTEUgICAgICAgICAgICAgICAgICAgPSBTZWxlY3QgYSBGaWxlCi1XU0RMX1BBR0VfRklMRV9ERVNDUklQVElPTiAgICAgICAgICAgICA9IFNlbGVjdCBhIGZpbGUgZnJvbSB0aGUgd29ya2JlbmNoLgotV1NETF9QQUdFX1NFTEVDVF9XU0RMX0ZJTEVOQU1FX0hFQURJTkcgPSBJbmNsdWRlIFdTREwgRmlsZQotV1NETF9QQUdFX1NFTEVDVF9XU0RMX0ZJTEVOQU1FX0VYUEwgICAgPSBPcHRpb25hbGx5IHNlbGVjdCBhIFdTREwgZmlsZSBmb3IgdGhlIFdlYiBzZXJ2aWNlCi1XU0RMX1BBR0VfSU5DTFVERV9XU0RMX0JVVFRPTiAgICAgICAgICA9IEluY2x1ZGUgV1NETCBkb2N1bWVudCBmb3IgV2ViIHNlcnZpY2UKLVdTRExfUEFHRV9JTkNMVURFX1dTRExfTEFCRUwgICAgICAgICAgID0gRW50ZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0RMIGRvY3VtZW50IGZvciB0aGUgV2ViIHNlcnZpY2UKLVdTRExfUEFHRV9WQUxJRF9XU0RMX0xBQkVMICAgICAgICAgICAgID0gKk5vdGU6IFlvdSBjYW4gb25seSBzZWxlY3QgdGhlIE5leHQgYnV0dG9uIGlmIHRoZSBXU0RMIGRvY3VtZW50IGlzIHZhbGlkLgotV1NETF9QQUdFX1dPUktCRU5DSF9CVVRUT04gICAgICAgICAgICAgPSBXb3JrYmVuY2guLi4KLVdTRExfUEFHRV9CUk9XU0VfQlVUVE9OICAgICAgICAgICAgICAgID0gQnJvd3NlLi4uCi1XU0RMX1BBR0VfU0VBUkNIX1VERElfQlVUVE9OICAgICAgICAgICA9IFNlYXJjaCBVRERJLi4uCi0KLSMgLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChXU0RMIGNvbnRlbnQgcGFnZSkgLS0tLS0tLS0tLS0tLS0tCi1XU0RMX0NPTlRFTlRfUEFHRV9TRUxFQ1RfSEVBRElORyAgICAgICA9IFNwZWNpZnkgdGhlIFdTREwgZWxlbWVudCB0byBiZSBBbmFseXplZAotV1NETF9DT05URU5UX1BBR0VfU0VMRUNUX0VYUEwgICAgICAgICAgPSBJbmRpY2F0ZSB0aGUgbmFtZSwgdHlwZSwgYW5kIG5hbWVzcGFjZSBvZiB0aGUgV1NETCBlbGVtZW50IHRvIGJlIGFuYWx5emVkCi1XU0RMX0NPTlRFTlRfUEFHRV9HUk9VUF9URVhUX0VMRU1FTlQgICA9IFRoZSBXU0RMIGVsZW1lbnQKLVdTRExfQ09OVEVOVF9QQUdFX0dST1VQX1RFWFRfVFlQRSAgICAgID0gdHlwZQotV1NETF9DT05URU5UX1BBR0VfUkFESU9fUE9SVCAgICAgICAgICAgPSBwb3J0Ci1XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19CSU5ESU5HICAgICAgICA9IGJpbmRpbmcKLVdTRExfQ09OVEVOVF9QQUdFX1JBRElPX1BPUlRfVFlQRSAgICAgID0gcG9ydFR5cGUKLVdTRExfQ09OVEVOVF9QQUdFX1JBRElPX09QRVJBVElPTiAgICAgID0gb3BlcmF0aW9uCi1XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19NRVNTQUdFICAgICAgICA9IG1lc3NhZ2UKLVdTRExfQ09OVEVOVF9QQUdFX0xBQkVMX05BTUUgICAgICAgICAgID0gbmFtZToKLVdTRExfQ09OVEVOVF9QQUdFX0xBQkVMX05BTUVTUEFDRSAgICAgID0gbmFtZXNwYWNlOgotV1NETF9DT05URU5UX1BBR0VfTEFCRUxfUEFSRU5UICAgICAgICAgPSBwYXJlbnQ6Ci0KLSMgLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIChMb2cgcGFnZSkgLS0tLS0tLS0tLS0tLS0tCi1MT0dfUEFHRV9TRUxFQ1RfTE9HX0ZJTEVOQU1FX0hFQURJTkcgICA9IFNwZWNpZnkgdGhlIFdTLUkgTWVzc2FnZSBMb2cgRmlsZSBOYW1lCi1MT0dfUEFHRV9TRUxFQ1RfTE9HX0ZJTEVOQU1FX0VYUEwgICAgICA9IFNlbGVjdCBhIGZvbGRlciBhbmQgc3BlY2lmeSBhIG1lc3NhZ2UgbG9nIGZpbGUgbmFtZQotCi0jIEFjdGlvbnMKLUFDVElPTl9XU0lfVkFMSURBVE9SICAgICAgICAgICAgICAgICAgID0gV1MtSSBNZXNzYWdlIFZhbGlkYXRvcgotCi0jIC0tLS0tLS0tLS0tLS0tLSBFcnJvcnMgLS0tLS0tLS0tLS0tLS0tCi1FUlJPUl9VTkFCTEVfVE9fVkFMSURBVEUgICAgICAgICAgICAgICA9IFVuYWJsZSB0byBWYWxpZGF0ZQotRVJST1JfVkFMSURBVElPTl9GQUlMRUQgICAgICAgICAgICAgICAgPSBWYWxpZGF0aW9uIEZhaWxlZAotRVJST1JfVEhFX1dTSU1TR19GSUxFX0lTX05PVF9WQUxJRCAgICAgPSBUaGUgV1MtSSBNZXNzYWdlIExvZyBmaWxlIGlzIG5vdCB2YWxpZC4gIFNlZSB0aGUgUHJvYmxlbXMgdmlldyBmb3IgYSBsaXN0IG9mIHRoZSB2YWxpZGF0aW9uIGVycm9ycy4KLUVSUk9SX1BST0JMRU1TX1JFQURJTkdfV1NJTVNHX0ZJTEUgICAgID0gUHJvYmxlbXMgcmVhZGluZyB0aGUgV1MtSSBNZXNzYWdlIExvZyBmaWxlLiAgU2VlIHRoZSBQcm9ibGVtcyB2aWV3IGZvciBhIGxpc3Qgb2YgZXJyb3JzLgotRVJST1JfSU5WQUxJRF9MT0dfRklMRV9FWFRFTlNJT04gICAgICAgPSBUaGUgZmlsZSBuYW1lIGV4dGVuc2lvbiBjYW4gb25seSBiZSAiLndzaW1zZyIuCi1XQVJOSU5HX1ZBTElEQVRJT05fV0FSTklOR1NfREVURUNURUQgICA9IEhvd2V2ZXIgd2FybmluZ3MgaGF2ZSBiZWVuIGlzc3VlZC4gU2VlIHRoZSBQcm9ibGVtcyB2aWV3IGZvciBhIGxpc3Qgb2YgdGhlIHZhbGlkYXRpb24gd2FybmluZ3MuCi1XQVJOSU5HX0ZJTEVfQUxSRUFEWV9FWElTVFMgICAgICAgICAgICA9IFdhcm5pbmc6IFRoZSBmaWxlIGFscmVhZHkgZXhpc3RzIGFuZCB3aWxsIGJlIG92ZXJ3cml0dGVuLiAKLQotIyAtLS0tLS0tLS0tLS0tLS0gSW5mb3JtYXRpb25hbCBtZXNzYWdlcyAtLS0tLS0tLS0tLS0tLS0KLUlORk9fVkFMSURBVElPTl9TVUNFRURFRCAgICAgICAgICAgICAgID0gVmFsaWRhdGlvbiBTdWNjZWVkZWQKLUlORk9fVEhFX1dTSU1TR19GSUxFX0lTX1ZBTElEICAgICAgICAgID0gVGhlIFdTLUkgTWVzc2FnZSBMb2cgZmlsZSBpcyB2YWxpZC4KLUlORk9fTk9fTUVTU0FHRVNfVE9fVkFMSURBVEUgICAgICAgICAgID0gTm8gTWVzc2FnZXMgdG8gVmFsaWRhdGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9SZXNvdXJjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1Jlc291cmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YWYxYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1Jlc291cmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsOwotCi0vKioKLSAqIEdJRiBjb25zdGFudHMKLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlc291cmNlCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEQVRFX1dTSV9MT0dGSUxFX1dJWiA9ICJhY3Rpb25zL2ljb25zL3dzaV9sb2dmaWxlX3dpei5wbmciOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1Jlc291cmNlRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvUmVzb3VyY2VGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUwMjI1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvUmVzb3VyY2VGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJGaWx0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VGaWx0ZXIgZXh0ZW5kcyBWaWV3ZXJGaWx0ZXIgCi17Ci0gIHByb3RlY3RlZCBTdHJpbmdbXSBmRXh0ZW5zaW9uczsKLSAgcHJvdGVjdGVkIElGaWxlW10gZkV4Y2x1ZGVkRmlsZXM7Ci0gIHByb3RlY3RlZCBDb2xsZWN0aW9uIGZFeGNsdWRlczsKLQkKLSAgcHVibGljIFJlc291cmNlRmlsdGVyKFN0cmluZ1tdIGV4dGVuc2lvbnMsIENvbGxlY3Rpb24gZXhjbHVkZSkgCi0gIHsKLSAgICBmRXh0ZW5zaW9ucz0gZXh0ZW5zaW9uczsKLSAgICBmRXhjbHVkZXM9IGV4Y2x1ZGU7Ci0gICAgZkV4Y2x1ZGVkRmlsZXMgPSBudWxsOwotICB9Ci0KLSAgcHVibGljIFJlc291cmNlRmlsdGVyKFN0cmluZ1tdIGV4dGVuc2lvbnMsIElGaWxlW10gZXhjbHVkZWRGaWxlcywgQ29sbGVjdGlvbiBleGNsdWRlKSAKLSAgewotICAgIGZFeHRlbnNpb25zPSBleHRlbnNpb25zOwotICAgIGZFeGNsdWRlcz0gZXhjbHVkZTsKLSAgICBmRXhjbHVkZWRGaWxlcyA9IGV4Y2x1ZGVkRmlsZXM7Ci0gIH0KLQkKLSAgcHVibGljIGJvb2xlYW4gaXNGaWx0ZXJQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgT2JqZWN0IHByb3BlcnR5KSAKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCQotICBwdWJsaWMgYm9vbGVhbiBzZWxlY3QoVmlld2VyIHZpZXdlciwgT2JqZWN0IHBhcmVudCwgT2JqZWN0IGVsZW1lbnQpIAotICB7Ci0gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZSkgCi0gICAgewotICAgICAgaWYgKGZFeGNsdWRlcyAhPSBudWxsICYmIGZFeGNsdWRlcy5jb250YWlucyhlbGVtZW50KSkgCi0gICAgICB7Ci0JcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgU3RyaW5nIG5hbWU9ICgoSUZpbGUpZWxlbWVudCkuZ2V0TmFtZSgpOwotICAgICAgaWYgKGZFeGNsdWRlZEZpbGVzICE9IG51bGwpIAotICAgICAgewotICAgICAgICBmb3IgKGludCBqPSAwOyBqIDwgZkV4Y2x1ZGVkRmlsZXMubGVuZ3RoOyBqKyspIAotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCAoKElGaWxlKWVsZW1lbnQpLmdldExvY2F0aW9uKCkuCi0gICAgICAgICAgICAgICB0b1N0cmluZygpLmNvbXBhcmVUbygoKElGaWxlKWZFeGNsdWRlZEZpbGVzW2pdKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpID09IDAgKQotICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICB9Ci0gICAgICBpZiAoZkV4dGVuc2lvbnMubGVuZ3RoID09IDApIAotICAgICAgewotICAgICAgICAvLyBhc3N1bWUgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGZpbHRlciBhbnkgZmlsZXMgYmFzZWQgb24gCi0gICAgICAgIC8vIGV4dGVuc2lvbgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGk9IDA7IGkgPCBmRXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykgCi0gICAgICB7Ci0gICAgICAgIGlmIChuYW1lLmVuZHNXaXRoKGZFeHRlbnNpb25zW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9IAotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gCi0gICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElDb250YWluZXIpIAotICAgIHsgLy8gSVByb2plY3QsIElGb2xkZXIKLSAgICAgIHRyeSAKLSAgICAgIHsKLSAgICAgIAlJUmVzb3VyY2VbXSByZXNvdXJjZXM9ICgoSUNvbnRhaW5lcillbGVtZW50KS5tZW1iZXJzKCk7Ci0JZm9yIChpbnQgaT0gMDsgaSA8IHJlc291cmNlcy5sZW5ndGg7IGkrKykgCi0gICAgICAgIHsKLQkgIC8vIHJlY3Vyc2l2ZSEKLQkgIGlmIChzZWxlY3Qodmlld2VyLCBwYXJlbnQsIHJlc291cmNlc1tpXSkpIAotICAgICAgICAgIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JICB9Ci0JfQotICAgICAgfSAKLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIAotICAgICAgewotICAgICAgfQkJCQkKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJTWVzc2FnZVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSU1lc3NhZ2VWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVlYTQ0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJTWVzc2FnZVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLmNvcmUuVmFsaWRhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLldTSVZhbGlkYXRlQWN0aW9uOwotLy9pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkRlZmF1bHRSZXBvcnRlcjsKLQotLyoqCi0gKiBBIFZhbGlkYXRvciB0aGF0IHBlcmZvcm1zIHZhbGlkYXRpb24gb24gYSBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUuIAotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lNZXNzYWdlVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvcgotewotICBwcm90ZWN0ZWQgSVJlcG9ydGVyIHJlcG9ydGVyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0lfTUVTU0FHRV9WQUxJREFUT1JfSUQgPSAid3NpbWVzc2FnZXZhbGlkYXRvciIuaW50ZXJuKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnZhbGlkYXRlLklWYWxpZGF0b3IjdmFsaWRhdGUob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShJRmlsZSBmaWxlKQotICB7ICAKLSAgICBXU0lWYWxpZGF0ZUFjdGlvbiB2YWxpZGF0ZUFjdGlvbiA9IG5ldyBXU0lWYWxpZGF0ZUFjdGlvbihmaWxlLCBmYWxzZSk7Ci0gICAgdmFsaWRhdGVBY3Rpb24uc2V0VmFsaWRhdG9yKHRoaXMpOwotICAgIC8vdmFsaWRhdGVBY3Rpb24uc2V0UmVwb3J0ZXIoZ2V0UmVwb3J0ZXIoKSk7Ci0gICAgdmFsaWRhdGVBY3Rpb24ucnVuKCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS52YWxpZGF0ZS5JVmFsaWRhdG9yI3NldFJlcG9ydGVyKG9yZy5lY2xpcHNlLnZhbGlkYXRlLklSZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcG9ydGVyKElSZXBvcnRlciByZXBvcnRlcikKLSAgewotICAJdGhpcy5yZXBvcnRlciA9IHJlcG9ydGVyOwotICB9Ci0KLXB1YmxpYyB2b2lkIGNsZWFudXAoSVJlcG9ydGVyIHJlcG9ydGVyKSB7Ci0JLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQotfQotCi1wdWJsaWMgdm9pZCB2YWxpZGF0ZShJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyLCBJUmVwb3J0ZXIgcmVwb3J0ZXIpIHRocm93cyBWYWxpZGF0aW9uRXhjZXB0aW9uCi0gewotCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSVVJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhYzY4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci0KLS8qKgotICogV1NJVmFsaWRhdGVQbHVnaW4gaXMgYSBwbHVnaW4gdGhhdCBpbnRlZ3JhdGVzIHdpdGggdGhlIEVjbGlwc2UgcGxhdGZvcm0gVUkuIAotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLQotcHVibGljIGNsYXNzIFdTSVVJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbgotewotICAvKioKLSAgICogVGhlIHNpbmdsZXRvbi4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgV1NJVUlQbHVnaW4gaW5zdGFuY2U7ICAgICAgICAgICAgICAgIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzaS51aSI7Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0lVSVBsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlID0gdGhpczsKLSAgfSAgICAKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uLiAoQmFzZWQgb24gdGhlIFNpbmdsZXRvbiBQYXR0ZXJuKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NJVUlQbHVnaW4gZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIEltYWdlUmVnaXN0cnkgY3JlYXRlSW1hZ2VSZWdpc3RyeSgpIAotICB7Ci0JCUltYWdlUmVnaXN0cnkgcmVnaXN0cnkgPSBzdXBlci5jcmVhdGVJbWFnZVJlZ2lzdHJ5KCk7Ci0JCXJlZ2lzdGVySW1hZ2UocmVnaXN0cnksIFJlc291cmNlLlZBTElEQVRFX1dTSV9MT0dGSUxFX1dJWik7Ci0JCXJldHVybiByZWdpc3RyeTsKLSAgfQotCi0JLyoqCi0JICogUmVnaXN0ZXIgYW4gaW1hZ2Ugd2l0aCB0aGUgcmVnaXN0cnkuCi0JICogCi0JICogQHBhcmFtIGtleSB0aGUga2V5Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHJlZ2lzdGVySW1hZ2UoSW1hZ2VSZWdpc3RyeSByZWdpc3RyeSwgU3RyaW5nIGtleSkKLQl7Ci0gIAkgIHRyeSAKLSAgCSAgewotCQlJbWFnZURlc2NyaXB0b3IgaWQgPSBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoV1NJVUlQbHVnaW4uY2xhc3MsIGtleSk7Ci0JCXJlZ2lzdHJ5LnB1dChrZXksIGlkKTsKLQkgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSAKLQkgIHsKLSAgICAgIH0KLQl9Ci0KLSAgLyoqCi0gICAqIENvbnZpZW5jZSBBUEkuICAKLSAgICogRmluZHMgdGhlIHNwZWNpZmllZCBpbWFnZSBzdG9yZWQgaW4gdGhpcyBwbHVnLWluJ3MgaW1hZ2UgcmVnaXN0cnkuCi0gICAqIEBwYXJhbSBpY29uTmFtZTogdGhlIG5hbWUgb2YgdGhlIGltYWdlLgotICAgKiBAcmV0dXJuIHRoZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEltYWdlIGdldFJlc291cmNlSW1hZ2UoU3RyaW5nIGljb25OYW1lKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoaWNvbk5hbWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYjY0NDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1dTSVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5XU0lWYWxpZGF0ZUFjdGlvbjsKLQotLyoqCi0gKiBBIHNpbXBsZSBpbnRlcmZhY2UgdG8gdGhlIFdTLUkgbWVzc2FnZSBsb2cgdmFsaWRhdG9yLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lWYWxpZGF0b3IgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFdTSVZhbGlkYXRvcigpCi0JewotCX0KLQkKLQkvKioKLQkgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gbG9nIGZpbGUuCi0JICogCi0JICogQHBhcmFtIGZpbGUgVGhlIGxvZyBmaWxlIHRvIHZhbGlkYXRlLgotCSAqLwotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKElGaWxlIGZpbGUpCi0JewotCQlXU0lNZXNzYWdlVmFsaWRhdG9yIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgV1NJTWVzc2FnZVZhbGlkYXRvcigpOwotCQlXU0lWYWxpZGF0ZUFjdGlvbiB2YWxpZGF0ZUFjdGlvbiA9IG5ldyBXU0lWYWxpZGF0ZUFjdGlvbihmaWxlLCB0cnVlKTsKLQkJdmFsaWRhdGVBY3Rpb24uc2V0VmFsaWRhdG9yKG1lc3NhZ2VWYWxpZGF0b3IpOwotCQl2YWxpZGF0ZUFjdGlvbi5ydW4oKTsKLQl9Ci0JCi0JLyoqCi0JICogVmFsaWRhdGUgdGhlIGdpdmVuIGxvZyBmaWxlIHdpdGggYSBXU0RMIGRvY3VtZW50IHNwZWNpZmllZC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSBUaGUgbG9nIGZpbGUgdG8gdmFsaWRhdGUuCi0JICogQHBhcmFtIHdzZGxmaWxlIFRoZSBXU0RMIGZpbGUgdG8gdXNlIGZvciB2YWxpZGF0aW9uLgotCSAqIEBwYXJhbSBlbGVtZW50bmFtZSBUaGUgV1NETCBlbGVtZW50IHRvIHZhbGlkYXRlLgotCSAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUgV1NETCBlbGVtZW50IHRvIHZhbGlkYXRlLgotCSAqIEBwYXJhbSBwYXJlbnRuYW1lIFRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLQkgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLQkgKi8KLQkvKioKLQkgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gbG9nIGZpbGUuCi0JICogCi0JICogQHBhcmFtIGZpbGUgVGhlIGxvZyBmaWxlIHRvIHZhbGlkYXRlLgotCSAqLwotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKElGaWxlIGZpbGUsIFN0cmluZyB3c2RsZmlsZSwgU3RyaW5nIGVsZW1lbnRuYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgcGFyZW50bmFtZSwgU3RyaW5nIHR5cGUpCi0JewotCQlXU0lNZXNzYWdlVmFsaWRhdG9yIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgV1NJTWVzc2FnZVZhbGlkYXRvcigpOwotCQlXU0lWYWxpZGF0ZUFjdGlvbiB2YWxpZGF0ZUFjdGlvbiA9IG5ldyBXU0lWYWxpZGF0ZUFjdGlvbihmaWxlLCB0cnVlLCB3c2RsZmlsZSwgZWxlbWVudG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50bmFtZSwgdHlwZSk7Ci0JCXZhbGlkYXRlQWN0aW9uLnNldFZhbGlkYXRvcihtZXNzYWdlVmFsaWRhdG9yKTsKLQkJdmFsaWRhdGVBY3Rpb24ucnVuKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvVmFsaWRhdGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1ZhbGlkYXRlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZmNlY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvVmFsaWRhdGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuTG9jYWxpemVkTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5vcGVyYXRpb25zLldvcmtiZW5jaFJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uWE1MVmFsaWRhdGlvblVJTWVzc2FnZXM7Ci0KLS8qKgotICogQSBnZW5lcmFsIHZhbGlkYXRlIGFjdGlvbiBjbGFzcyB0aGF0IGNhbiBiZSBleHRlbmRlZCBieSB2YWxpZGF0b3JzLiBUaGlzIGNsYXNzCi0gKiBwcm92aWRlcyBtZXRob2RzIHRvIHJ1biB0aGUgYWN0aW9uLCBhZGQgbWFya2VycyB0byBhIGZpbGUgYW5kIHdpbGwgaGFuZGxlCi0gKiBzaG93aW5nIGEgZGlhbG9nIHdpdGggdGhlIHJlc3VsdHMgb2YgdmFsaWRhdGlvbiAoaWYgcmVxdWVzdGVkKSBhbmQgcHJvbXB0IHRvCi0gKiBzYXZlIGRpcnR5IGZpbGVzIChpZiByZXF1ZXN0ZWQuKQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVmFsaWRhdGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgLy8gTG9jYWxseSB1c2VkLCBub24tVUkgc3RyaW5ncy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRURfRklMRV9FUlJPUl9PUEVOID0gInJlZmVyZW5jZWRGaWxlRXJyb3IoIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRUZFUkVOQ0VEX0ZJTEVfRVJST1JfQ0xPU0UgPSAiKSI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGRVJFTkNFRF9GSUxFX0VSUk9SID0gInJlZmVyZW5jZWRGaWxlRXJyb3IiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdST1VQX05BTUUgPSAiZ3JvdXBOYW1lIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVfUFJPVE9DT0xfTk9fU0xBU0ggPSAiZmlsZToiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiY29sdW1uTnVtYmVyIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gInNxdWlnZ2xlU2VsZWN0aW9uU3RyYXRlZ3kiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gInNxdWlnZ2xlTmFtZU9yVmFsdWUiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvd0RpYWxvZyA9IHRydWU7Ci0KLSAgcHJvdGVjdGVkIElGaWxlIGZpbGUgPSBudWxsOwotCi0gIHByb3RlY3RlZCBJUmVwb3J0ZXIgcmVwb3J0ZXI7Ci0KLSAgcHJvdGVjdGVkIElWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlCi0gICAqICAgICAgICAgIFRoZSBmaWxlIHRvIHZhbGlkYXRlLgotICAgKiBAcGFyYW0gc2hvd0RpYWxvZwotICAgKiAgICAgICAgICBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgZGlhbG9nIHdoZW4gdmFsaWRhdGlvbiBpcyBjb21wbGV0ZS4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0ZUFjdGlvbihJRmlsZSBmaWxlLCBib29sZWFuIHNob3dEaWFsb2cpCi0gIHsKLSAgICB0aGlzLnNob3dEaWFsb2cgPSBzaG93RGlhbG9nOwotICAgIHRoaXMuZmlsZSA9IGZpbGU7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIHNwZWNpZmllZCBmaWxlLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGUKLSAgICogICAgICAgICAgVGhlIGZpbGUgdG8gdmFsaWRhdGUuCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB2YWxpZGF0ZShmaW5hbCBJRmlsZSBmaWxlKTsKLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRJbmZvVG9NZXNzYWdlIChWYWxpZGF0aW9uTWVzc2FnZSB2LCBJTWVzc2FnZSBtKQotICB7IC8vIFRoaXMgbWV0aG9kIGlzIG92ZXJpZGRlbiBieSBzdWJjbGFzc2VzCi0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgbWFya2VycyBmb3IgdGhlIHZhbGlhdGlvbiBtZXNzYWdlcyBnZW5lcmF0ZWQgZnJvbSB0aGUgdmFsaWRhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBpRmlsZQotICAgKiAgICAgICAgICBUaGUgcmVzb3VyY2UgdG8gY3JlYXRlIHRoZSBtYXJrZXJzIG9uLgotICAgKiBAcGFyYW0gdmFsbWVzc2FnZXMKLSAgICogICAgICAgICAgVGhlIGFycmF5IG9mIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjcmVhdGVNYXJrZXJzKElGaWxlIGlGaWxlLCBWYWxpZGF0aW9uTWVzc2FnZVtdIHZhbG1lc3NhZ2VzKQotICB7Ci0gICAgaWYgKCFmaWxlSXNPSyhpRmlsZSkpCi0gICAgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQgbnVtbWVzc2FnZXMgPSB2YWxtZXNzYWdlcy5sZW5ndGg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgIHsKLSAgICAgIFZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlID0gdmFsbWVzc2FnZXNbaV07Ci0gICAgICBTdHJpbmcgdXJpID0gdmFsaWRhdGlvbk1lc3NhZ2UuZ2V0VXJpKCk7Ci0KLSAgICAgIExvY2FsaXplZE1lc3NhZ2UgbWVzc2FnZTsKLSAgICAgIGlmICh2YWxpZGF0aW9uTWVzc2FnZS5nZXRTZXZlcml0eSgpID09IFZhbGlkYXRpb25NZXNzYWdlLlNFVl9MT1cpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBuZXcgTG9jYWxpemVkTWVzc2FnZShnZXRWYWxpZGF0aW9uRnJhbWV3b3JrU2V2ZXJpdHkoSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HKSwgdmFsaWRhdGlvbk1lc3NhZ2UKLSAgICAgICAgICAgIC5nZXRNZXNzYWdlKCksIGlGaWxlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgCi0gICAgICAgIG1lc3NhZ2UgPSBuZXcgTG9jYWxpemVkTWVzc2FnZShnZXRWYWxpZGF0aW9uRnJhbWV3b3JrU2V2ZXJpdHkoSU1hcmtlci5TRVZFUklUWV9FUlJPUiksIHZhbGlkYXRpb25NZXNzYWdlLmdldE1lc3NhZ2UoKSwgaUZpbGUpOwotICAgICAgfQotICAgICAgCi0gICAgICBtZXNzYWdlLnNldExpbmVObyh2YWxpZGF0aW9uTWVzc2FnZS5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZSwgbWVzc2FnZSk7Ci0gICAgICAKLSAgICAgIExpc3QgbmVzdGVkZXJyb3JzID0gdmFsaWRhdGlvbk1lc3NhZ2UuZ2V0TmVzdGVkTWVzc2FnZXMoKTsKLSAgICAgIGlmIChuZXN0ZWRlcnJvcnMgIT0gbnVsbCAmJiAhbmVzdGVkZXJyb3JzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZS5zZXRHcm91cE5hbWUoUkVGRVJFTkNFRF9GSUxFX0VSUk9SX09QRU4gKyB1cmkgKyBSRUZFUkVOQ0VEX0ZJTEVfRVJST1JfQ0xPU0UpOwotICAgICAgfQotCi0gICAgICBnZXRPckNyZWF0ZVJlcG9ydGVyKCkuYWRkTWVzc2FnZShnZXRWYWxpZGF0b3IoKSwgbWVzc2FnZSk7Ci0KLSAgICAgIAotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJTWFya2VyW10gbWFya2VycyA9IGlGaWxlLmZpbmRNYXJrZXJzKG51bGwsIHRydWUsIElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIElNYXJrZXIgbWFya2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgU3RyaW5nIGdyb3VwTmFtZSA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgZ3JvdXBOYW1lID0gKFN0cmluZykgbWFya2VyLmdldEF0dHJpYnV0ZShHUk9VUF9OQU1FKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChncm91cE5hbWUgIT0gbnVsbCAmJiBncm91cE5hbWUuc3RhcnRzV2l0aChSRUZFUkVOQ0VEX0ZJTEVfRVJST1IpKQotICAgICAgICB7Ci0KLSAgICAgICAgICBtYXJrZXIuc2V0QXR0cmlidXRlKElNYXJrZXIuRE9ORSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xlYXJNYXJrZXJzKElGaWxlIGlGaWxlKQotICB7Ci0gICAgaWYgKGZpbGVJc09LKGlGaWxlKSkKLSAgICB7Ci0gICAgICBnZXRPckNyZWF0ZVJlcG9ydGVyKCkucmVtb3ZlQWxsTWVzc2FnZXMoZ2V0VmFsaWRhdG9yKCksIGlGaWxlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gIAl0cnkKLSAgCXsKLSAgCQkvLyBDUy4uLiBhIHRlbXBvcmFyeSB0ZXN0IHRvIGF2b2lkIHBlcmZvcm1pbmcgdmFsaWRhdGlvbiBpbiB0aGUgYWJzZW5jZSBvZiB4ZXJjZXMgCi0gIAkJLy8KLSAgCQkvL2R3IENsYXNzIHRoZUNsYXNzID0gCi0gIAkJQ2xhc3MuZm9yTmFtZSgib3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZXJDb25maWd1cmF0aW9uIiwgdHJ1ZSwgdGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOyAvLyROT04tTkxTLTEkCi0gIAkJICAJCQotICAJCWlmIChmaWxlSXNPSyhmaWxlKSkKLSAgCQl7Ci0gIAkJCS8vIENoZWNrIGlmIHRoZSBlZGl0b3IgaXMgZGlydHkgZm9yIHRoaXMgZmlsZS4gSWYgc28sIHByb21wdCB0aGUgdXNlciB0bwotICAJCQkvLyBzYXZlIGJlZm9yZSB2YWxpZGF0aW5nLgotICAJCQlpZihzaG93RGlhbG9nKQotICAJCQl7Ci0gIAkJCQljaGVja0lmRmlsZURpcnR5KGZpbGUpOwotICAJCQl9Ci0gIAkJCXRyeQotICAJCQl7Ci0gIAkJCQl2YWxpZGF0ZShmaWxlKTsKLSAgCQkJfQotICAJCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0gIAkJCXsKLSAgCQkJCUlMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXJJbnN0YW5jZSgpOwotICAJCQkJbG9nZ2VyLmxvZ0Vycm9yKCIiLCBlKTsgLy8kTk9OLU5MUy0xJAotICAJCQkJLy8gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAJCQl9Ci0gIAkJfQotICAJfQotICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAJewkJCi0gIAl9Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCB3aGV0aGVyIHRoZSBmaWxlIGdpdmVuIGlzIE9LIHRvIHVzZS4gQSBmaWxlIGlzIE9LIHRvIHVzZSBpZiAxLiBJdCBpcwotICAgKiBub3QgbnVsbCAyLiBJdCBleGlzdHMuIDMuIFRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGZpbGUgaXMgYWNjZXNzaWJsZS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIGNoZWNrLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgaXMgT0sgdG8gdXNlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBmaWxlSXNPSyhJRmlsZSBmaWxlKQotICB7Ci0gICAgaWYgKGZpbGUgIT0gbnVsbCAmJiBmaWxlLmV4aXN0cygpICYmIGZpbGUuZ2V0UHJvamVjdCgpLmlzQWNjZXNzaWJsZSgpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdGhlIGZpbGUgaXMgZGlydHkuIEEgZmlsZSBpcyBkaXJ0eSBpZiB0aGVyZSBpcyBhbiBvcGVuIGVkaXRvciBmb3IKLSAgICogdGhlIGZpbGUgdGhhdCBjb250YWlucyBjaGFuZ2VzIHRoYXQgaGF2ZW4ndCBiZWVuIHNhdmVkLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGRpcnR5LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY2hlY2tJZkZpbGVEaXJ0eShJRmlsZSBmaWxlKQotICB7Ci0gICAgSUVkaXRvclBhcnRbXSBkaXJ0eUVkaXRvcnMgPSBXU0lVSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpCi0gICAgICAgIC5nZXRBY3RpdmVQYWdlKCkuZ2V0RGlydHlFZGl0b3JzKCk7Ci0gICAgaW50IG51bWVkaXRvcnMgPSBkaXJ0eUVkaXRvcnMubGVuZ3RoOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtZWRpdG9yczsgaSsrKQotICAgIHsKLSAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGRpcnR5RWRpdG9yc1tpXS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgRmlsZUVkaXRvcklucHV0KQotICAgICAgewotICAgICAgICBGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKEZpbGVFZGl0b3JJbnB1dCkgZWRpdG9ySW5wdXQ7Ci0gICAgICAgIGlmIChmaWxlRWRpdG9ySW5wdXQuZ2V0RmlsZSgpLmVxdWFscyhmaWxlKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gWE1MVmFsaWRhdGlvblVJTWVzc2FnZXMuX1VJX1NBVkVfRElSVFlfRklMRV9NRVNTQUdFOwotICAgICAgICAgIFN0cmluZyB0aXRsZSA9IFhNTFZhbGlkYXRpb25VSU1lc3NhZ2VzLl9VSV9TQVZFX0RJUlRZX0ZJTEVfVElUTEU7Ci0gICAgICAgICAgaWYgKE1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIHRpdGxlLCBtZXNzYWdlKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBkaXJ0eUVkaXRvcnNbaV0uZG9TYXZlKG51bGwpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBUaGVyZSBjYW4gb25seSBiZSBvbmUgb3BlbiBlZGl0b3IvZmlsZSBzbyB3ZSBjYW4gYnJlYWsuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgcmVwb3J0ZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgYSBJUmVwb3J0ZXIKLSAgICovCi0gIHB1YmxpYyBJUmVwb3J0ZXIgZ2V0UmVwb3J0ZXIoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHJlcG9ydGVyLgotICAgKiAKLSAgICogQHBhcmFtIHJlcG9ydGVyCi0gICAqICAgICAgICAgIFRoZSByZXBvcnRlciB0byBzZXQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcG9ydGVyKElSZXBvcnRlciByZXBvcnRlcikKLSAgewotICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgYSBJVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgSVZhbGlkYXRvciBnZXRWYWxpZGF0b3IoKQotICB7Ci0gICAgcmV0dXJuIHZhbGlkYXRvcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsaWRhdG9yCi0gICAqICAgICAgICAgIFRoZSB2YWxpZGF0b3IgdG8gc2V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0b3IoSVZhbGlkYXRvciB2YWxpZGF0b3IpCi0gIHsKLSAgICB0aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjsKLSAgfQotCi0gIHByb3RlY3RlZCBJUmVwb3J0ZXIgZ2V0T3JDcmVhdGVSZXBvcnRlcigpCi0gIHsKLSAgICBpZiAocmVwb3J0ZXIgPT0gbnVsbCkKLSAgICB7IAotICAgICAgcmVwb3J0ZXIgPSBuZXcgV29ya2JlbmNoUmVwb3J0ZXIoZmlsZS5nZXRQcm9qZWN0KCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVwb3J0ZXI7Ci0gIH0KLQotICAvKioKLSAgICogT3JpZ2luYWxseSBmcm9tICp2YWxpZGF0aW9uLkhlbHBlcgotICAgKiAKLSAgICogQHBhcmFtIHNldmVyaXR5Ci0gICAqICAgICAgICAgIFRoZSBzZXZlcml0eSBnaXZlbi4KLSAgICogQHJldHVybiBUaGUgdmFsaWRhdGlvbiBmcmFtZXdvcmsgc2V2ZXJpdHkgY29ycmVzcG9uZGluZyB0byB0aGUgZXJyb3IuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGdldFZhbGlkYXRpb25GcmFtZXdvcmtTZXZlcml0eShpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICBzd2l0Y2ggKHNldmVyaXR5KSB7Ci0gICAgY2FzZSBJTWFya2VyLlNFVkVSSVRZX0VSUk9SOgotICAgICAgcmV0dXJuIElNZXNzYWdlLkhJR0hfU0VWRVJJVFk7Ci0gICAgY2FzZSBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkc6Ci0gICAgICByZXR1cm4gSU1lc3NhZ2UuTk9STUFMX1NFVkVSSVRZOwotICAgIGNhc2UgSU1hcmtlci5TRVZFUklUWV9JTkZPOgotICAgICAgcmV0dXJuIElNZXNzYWdlLkxPV19TRVZFUklUWTsKLSAgICB9Ci0gICAgcmV0dXJuIElNZXNzYWdlLkxPV19TRVZFUklUWTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE9wZW4gYW4gZXJyb3IgZGlhbG9nIHdpdGggdGhlIGdpdmVuIHRpdGxlIGFuZCBtZXNzYWdlLiBTaG93IHRoZSBwcm9ibGVtcyB2aWV3Ci0gICAqIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHZpc2libGUuCi0gICAqIAotICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIG9mIHRoZSBlcnJvciBkaWFsb2cuCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIGluIHRoZSBlcnJvciBkaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBvcGVuRXJyb3JEaWFsb2coU3RyaW5nIHRpdGxlLCBTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHNob3dQcm9ibGVtc1ZpZXcoKTsKLSAgICBNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCB0aXRsZSwgbWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBPcGVuIGFuIHdhcm5pbmcgZGlhbG9nIHdpdGggdGhlIGdpdmVuIHRpdGxlIGFuZCBtZXNzYWdlLiBTaG93IHRoZSBwcm9ibGVtcyB2aWV3Ci0gICAqIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHZpc2libGUuCi0gICAqIAotICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIG9mIHRoZSB3YXJuaW5nIGRpYWxvZy4KLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgaW4gdGhlIHdhcm5pbmcgZGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgb3Blbldhcm5pbmdEaWFsb2coU3RyaW5nIHRpdGxlLCBTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHNob3dQcm9ibGVtc1ZpZXcoKTsKLSAgICBNZXNzYWdlRGlhbG9nLm9wZW5XYXJuaW5nKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIHRpdGxlLCBtZXNzYWdlKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE9wZW4gYSB2YWxpZCBkaWFsb2cgd2l0aCB0aGUgZ2l2ZW4gdGl0bGUgYW5kIG1lc3NhZ2UuIAotICAgKiAKLSAgICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgdmFsaWQgZGlhbG9nLgotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBpbiB0aGUgdmFsaWQgZGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgb3BlblZhbGlkRGlhbG9nKFN0cmluZyB0aXRsZSwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCB0aXRsZSwgbWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTaG93IHRoZSBwcm9ibGVtcyB2aWV3IGlmIGl0IGlzIG5vdCBhbHJlYWR5IHZpc2libGUuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzaG93UHJvYmxlbXNWaWV3KCkKLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgZHcgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBkdy5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChwYWdlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHBhZ2Uuc2hvd1ZpZXcoSVBhZ2VMYXlvdXQuSURfUFJPQkxFTV9WSUVXKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotICAgIH0KLSAgICBwYWdlLmFjdGl2YXRlKGFjdGl2ZVBhcnQpOwotICB9Ci0gIAotICAvKioKLSAgICogRm9ybWF0IGEgZmlsZSBuYW1lIGludG8gYSBjb3JyZWN0IFVSSS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZmlsZSBuYW1lIHRvIGZvcm1hdC4KLSAgICogQHJldHVybiBUaGUgZm9ybWF0dGVkIFVSSS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY3JlYXRlVVJJRm9yRmlsZVBhdGgoU3RyaW5nIGZpbGVuYW1lKQotICB7Ci0gIAlpZighZmlsZW5hbWUuc3RhcnRzV2l0aChGSUxFX1BST1RPQ09MX05PX1NMQVNIKSkKLSAgICB7Ci0gICAgICB3aGlsZShmaWxlbmFtZS5zdGFydHNXaXRoKCIvIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMSk7Ci0gICAgICB9Ci0gICAgICBmaWxlbmFtZSA9IEZJTEVfUFJPVE9DT0wgKyBmaWxlbmFtZTsKLSAgICB9Ci0gIAlyZXR1cm4gZmlsZW5hbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGUgdmFsaWRhdGlvbiBvdXRjb21lIGNsYXNzIGhvbGRzIHRoZSByZXN1bHRzIGZyb20gdmFsaWRhdGluZwotICAgKiBhIGZpbGUuCi0gICAqIAotICAgKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgVmFsaWRhdGlvbk91dGNvbWUKLSAgewotICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQgPSB0cnVlOwotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzTWVzc2FnZXMgPSBmYWxzZTsKLQotICAgIHB1YmxpYyBWYWxpZGF0aW9uT3V0Y29tZSgpCi0gICAgewotICAgIH0KLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9XU0lWYWxpZGF0ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvV1NJVmFsaWRhdGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZhYWI4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9XU0lWYWxpZGF0ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLmNvcmUuSU1lc3NhZ2VBY2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5NZXNzYWdlTGltaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5NZXNzYWdlQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5XU0lBbmFseXplckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0LkFzc2VydGlvbkVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBBY3Rpb24gZm9yIHJ1bm5pbmcgdGhlIHZhbGlkYXRvci4KLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgV1NJVmFsaWRhdGVBY3Rpb24gZXh0ZW5kcyBWYWxpZGF0ZUFjdGlvbgotewotICBwcm90ZWN0ZWQgSVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxmaWxlID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyBlbGVtZW50bmFtZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyBwYXJlbnRuYW1lID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyB0eXBlID0gbnVsbDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gd3NkbHNwZWNpZmllZCA9IGZhbHNlOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGNlcHRpb25DYXVnaHQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gZiBUaGUgZmlsZSB0byB2YWxpZGF0ZQotICAgKiBAcGFyYW0gc2hvd0RpYWxvZyBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgc3RhdHVzIGRpYWxvZyBhZnRlciB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHVibGljIFdTSVZhbGlkYXRlQWN0aW9uKElGaWxlIGYsIGJvb2xlYW4gc2hvd0RpYWxvZykKLSAgewotICAJc3VwZXIoZiwgc2hvd0RpYWxvZyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciB3aXRoIFdTREwgZWxlbWVudCBzcGVjaWZpZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZiBUaGUgZmlsZSB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIHNob3dEaWFsb2cgV2hldGhlciBvciBub3QgdG8gc2hvdyBhIHN0YXR1cyBkaWFsb2cgYWZ0ZXIgdmFsaWRhdGlvbi4KLSAgICogQHBhcmFtIGZpbGUgVGhlIFdTREwgZmlsZSB0byB1c2UgZm9yIHZhbGlkYXRpb24uCi0gICAqIEBwYXJhbSBlbGVtZW50bmFtZSBUaGUgbmFtZSBvZiB0aGUgV1NETCBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIFdTREwgZWxlbWVudCB0byB2YWxpZGF0ZQotICAgKiBAcGFyYW0gcGFyZW50bmFtZSBUaGUgcGFyZW50IG5hbWUgb2YgdGhlIFdTREwgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICovCi0gIHB1YmxpYyBXU0lWYWxpZGF0ZUFjdGlvbihJRmlsZSBmLCBib29sZWFuIHNob3dEaWFsb2csIFN0cmluZyBmaWxlLCBTdHJpbmcgZWxlbWVudG5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBwYXJlbnRuYW1lLCBTdHJpbmcgdHlwZSkKLSAgewotICAJdGhpcyhmLCBzaG93RGlhbG9nKTsKLSAgCWlmIChmaWxlICE9IG51bGwpCi0gIAl7Ci0gIAkgIHdzZGxmaWxlID0gZmlsZS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0gIAkgIGlmICgoIXdzZGxmaWxlLnN0YXJ0c1dpdGgoV1NJQ29uc3RhbnRzLkZJTEVfUFJFRklYKSkgJiYgCi0gIAkJICAoIXdzZGxmaWxlLnN0YXJ0c1dpdGgoV1NJQ29uc3RhbnRzLkhUVFBfUFJFRklYKSkpCi0gICAgICB7Ci0gIAkgICAgd3NkbGZpbGUgPSBXU0lDb25zdGFudHMuRklMRV9QUk9UT0NPTCArIHdzZGxmaWxlOyAgCi0gIAkgIH0KLSAgCX0KLSAgCXRoaXMuZWxlbWVudG5hbWUgPSBlbGVtZW50bmFtZTsKLSAgCXRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICAJdGhpcy5wYXJlbnRuYW1lID0gcGFyZW50bmFtZTsKLSAgCXRoaXMudHlwZSA9IHR5cGU7Ci0gIAl0aGlzLndzZGxzcGVjaWZpZWQgPSB0cnVlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnZhbGlkYXRlLlZhbGlkYXRlQWN0aW9uI3ZhbGlkYXRlKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGUoZmluYWwgSUZpbGUgZmlsZTEpCi0gIHsKLSAgCWZpbmFsIE1lc3NhZ2VBbmFseXplciBtZXNzYWdlYW5hbHl6ZXI7Ci0gIAkKLSAgCWlmKHdzZGxzcGVjaWZpZWQpCi0gIAl7Ci0gIAkgIG1lc3NhZ2VhbmFseXplciA9IG5ldyBNZXNzYWdlQW5hbHl6ZXIoV1NJQ29uc3RhbnRzLkZJTEVfUFJPVE9DT0wgKyBmaWxlMS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCksIHdzZGxmaWxlLCBlbGVtZW50bmFtZSwgbmFtZXNwYWNlLCBwYXJlbnRuYW1lLCB0eXBlKTsJCi0gIAl9Ci0gIAllbHNlCi0gIAl7CQotICAJICBtZXNzYWdlYW5hbHl6ZXIgPSBuZXcgTWVzc2FnZUFuYWx5emVyKFdTSUNvbnN0YW50cy5GSUxFX1BST1RPQ09MICsgZmlsZTEuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTsKLSAgCX0KLSAgCQotICAJSVdvcmtzcGFjZVJ1bm5hYmxlIG9wID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIAotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gCi0gICAgICB7ICAgICAgICAKLSAgICAgICAgY2xlYXJNYXJrZXJzKGZpbGUxKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlYW5hbHl6ZXIudmFsaWRhdGVDb25mb3JtYW5jZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChXU0lBbmFseXplckV4Y2VwdGlvbiBhZSkKLSAgICAgICAgewotICAgICAgICAJZXhjZXB0aW9uQ2F1Z2h0ID0gdHJ1ZTsKLSAgICAgICAgCWlmIChhZS5nZXRUYXJnZXRFeGNlcHRpb24oKSBpbnN0YW5jZW9mIFNBWFBhcnNlRXhjZXB0aW9uKQotICAgICAgICAJewotICAgICAgICAJICBjcmVhdGVNYXJrZXJzKGZpbGUxLCBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VbXXtjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbigoU0FYUGFyc2VFeGNlcHRpb24pYWUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCksIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwpfSk7Ci0gICAgICAgIAl9Ci0gICAgICAgIAllbHNlCi0gICAgICAgIAl7Ci0gICAgICAgICAJICBjcmVhdGVNYXJrZXJzKGZpbGUxLCBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VbXXtjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbihhZSwgVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX05PUk1BTCl9KTsKLSAgICAgICAgCX0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGNyZWF0ZU1hcmtlcnMoZmlsZTEsIGNvbnZlcnRWYWxpZGF0aW9uTWVzc2FnZXMobWVzc2FnZWFuYWx5emVyLmdldEFzc2VydGlvbldhcm5pbmdzKCksIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9MT1cpKTsKLSAgICAgICAgY3JlYXRlTWFya2VycyhmaWxlMSwgY29udmVydFZhbGlkYXRpb25NZXNzYWdlcyhtZXNzYWdlYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwpKTsKLSAgICAgICAgZmlsZS5zZXRTZXNzaW9uUHJvcGVydHkoVmFsaWRhdGlvbk1lc3NhZ2UuRVJST1JfTUVTU0FHRV9NQVBfUVVBTElGSUVEX05BTUUsIGdldE9yQ3JlYXRlUmVwb3J0ZXIoKS5nZXRNZXNzYWdlcygpKTsKLQkJfQotICAgIH07Ci0gICAKLSAgICAKLSAgICAgdHJ5Ci0gICAgewotICAgICAgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihvcCwgbnVsbCk7Ci0gICAgIGlmIChzaG93RGlhbG9nKQotICAgICAgewotICAgICAgICBpZiAoZXhjZXB0aW9uQ2F1Z2h0KQotICAgICAgICB7Ci0gICAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IoRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgCi0gICAgICAgICAgCQlNZXNzYWdlcy5FUlJPUl9VTkFCTEVfVE9fVkFMSURBVEUsIAotICAgICAgICAgIAkJTWVzc2FnZXMuRVJST1JfUFJPQkxFTVNfUkVBRElOR19XU0lNU0dfRklMRSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobWVzc2FnZWFuYWx5emVyLmdldEFzc2VydGlvbkVycm9ycygpLnNpemUoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IoRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgCi0gICAgICAgICAgCQlNZXNzYWdlcy5FUlJPUl9WQUxJREFUSU9OX0ZBSUxFRCwgCi0gICAgICAgICAgCQlNZXNzYWdlcy5FUlJPUl9USEVfV1NJTVNHX0ZJTEVfSVNfTk9UX1ZBTElEKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtZXNzYWdlYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uV2FybmluZ3MoKS5zaXplKCkgIT0gMCkKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgU3RyaW5nIHRpdGxlID0gTWVzc2FnZXMuSU5GT19WQUxJREFUSU9OX1NVQ0VFREVEOwotICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gTWVzc2FnZXMuV0FSTklOR19WQUxJREFUSU9OX1dBUk5JTkdTX0RFVEVDVEVEOwotICAgICAgICAgIE1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIHRpdGxlLCBtZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBNZXNzYWdlcy5JTkZPX1ZBTElEQVRJT05fU1VDRUVERUQ7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBNZXNzYWdlcy5JTkZPX1RIRV9XU0lNU0dfRklMRV9JU19WQUxJRDsKLSAgICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCB0aXRsZSwgbWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpe30KLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBmcm9tIHRoZSBleGNlcHRpb24gYW5kIHNldmVyaXR5LgotICAgKiAKLSAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvci4KLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eS4KLSAgICogQHJldHVybiBBbiBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25NZXNzYWdlIGNyZWF0ZVZhbGlkYXRpb25NZXNzYWdlRm9yRXhjZXB0aW9uKFNBWFBhcnNlRXhjZXB0aW9uIGVycm9yLCBpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICBTdHJpbmcgdXJpID0gZXJyb3IuZ2V0U3lzdGVtSWQoKTsKLSAgICBpZih1cmkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmkgPSBlcnJvci5nZXRQdWJsaWNJZCgpOwotICAgIH0KLSAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZShlcnJvci5nZXRNZXNzYWdlKCksIGVycm9yLmdldExpbmVOdW1iZXIoKSwgZXJyb3IuZ2V0Q29sdW1uTnVtYmVyKCksIHVyaSk7Ci0gICAgdmFsaWRhdGlvbk1lc3NhZ2Uuc2V0U2V2ZXJpdHkoc2V2ZXJpdHkpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBmcm9tIHRoZSBleGNlcHRpb24gYW5kIHNldmVyaXR5LgotICAgKiAKLSAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvci4KLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eS4KLSAgICogQHJldHVybiBBbiBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25NZXNzYWdlIGNyZWF0ZVZhbGlkYXRpb25NZXNzYWdlRm9yRXhjZXB0aW9uKFdTSUFuYWx5emVyRXhjZXB0aW9uIGVycm9yLCBpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZShlcnJvci5nZXRNZXNzYWdlKCksIDAsIDApOwotICAgIHZhbGlkYXRpb25NZXNzYWdlLnNldFNldmVyaXR5KHNldmVyaXR5KTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2U7Ci0gIH0KLSAKLSAgcHVibGljIFZhbGlkYXRpb25NZXNzYWdlW10gIGNvbnZlcnRWYWxpZGF0aW9uTWVzc2FnZXMoTGlzdCBsaXN0LCBpbnQgbWFya2VyKQotICB7Ci0JaWYgKGxpc3QgIT0gbnVsbCkKLQl7Ci0JICBpbnQgc2l6ZSA9IGxpc3Quc2l6ZSgpOwotCSAgVmFsaWRhdGlvbk1lc3NhZ2VbXSBtZXNzYWdlcyA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZVtzaXplXTsKLQkgCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQXNzZXJ0aW9uRXJyb3IgYXNzZXJ0aW9uRXJyb3IgPSAoQXNzZXJ0aW9uRXJyb3IpIGxpc3QuZ2V0KGkpOwotCi0gICAgICAgIGludCBuID0gYXNzZXJ0aW9uRXJyb3IuZ2V0TGluZSgpOwotICAgICAgICBpbnQgYyA9IGFzc2VydGlvbkVycm9yLmdldENvbHVtbigpOwotICAgICAgICBTdHJpbmcgbSA9IFdTSUNvbnN0YW50cy5XU0lfUFJFRklYICsgIigiICsgYXNzZXJ0aW9uRXJyb3IuZ2V0QXNzZXJ0aW9uSUQoKSsgIikgIiArIGFzc2VydGlvbkVycm9yLmdldEVycm9yTWVzc2FnZSgpOwotICAgICAgCi0gICAgICAgIFZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UobSxuLCBjKTsKLSAgICAgICAgbWVzc2FnZS5zZXRTZXZlcml0eShtYXJrZXIpOwotICAgICAgICBtZXNzYWdlc1tpXSA9IG1lc3NhZ2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbWVzc2FnZXM7Ci0gICAgfQotCXJldHVybiBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VbMF07Ci0gIH0KLQotIC8qKgotICBwcm90ZWN0ZWQgSVJlcG9ydGVyIGdldE9yQ3JlYXRlUmVwb3J0ZXIoKQotICB7Ci0gICAgaWYgKHJlcG9ydGVyID09IG51bGwpCi0gICAgeyAKLSAgICAgIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyKCk7Ci0gICAgfQotICAgIHJldHVybiByZXBvcnRlcjsKLSAgfQotICAqLwotICAvLyBNeSBJbXBsZW1lbnRhdGlvbiBvZiBJUmVwb3J0ZXIKLSAgY2xhc3MgUmVwb3J0ZXIgaW1wbGVtZW50cyBJUmVwb3J0ZXIgCi0gIHsKLQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgUmVwb3J0ZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIElNZXNzYWdlQWNjZXNzIGdldE1lc3NhZ2VBY2Nlc3MoKSB7Ci0JCXJldHVybiBudWxsOyAvLyBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGxlZCgpIHsKLQkJcmV0dXJuIGZhbHNlOyAvLyBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbiwgT2JqZWN0IG9iamVjdCkgeyAvLyBkbwotCQkJCQkJCQkJCQkJCQkJCQkJLy8gbm90Ci0JCQkJCQkJCQkJCQkJCQkJCQkvLyBuZWVkCi0JCQkJCQkJCQkJCQkJCQkJCQkvLyB0bwotCQkJCQkJCQkJCQkJCQkJCQkJLy8gaW1wbGVtZW50Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4pIHsvLyBkbyBub3QgbmVlZCB0bwotCQkJCQkJCQkJCQkJCQkvLyBpbXBsZW1lbnQKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVNZXNzYWdlU3Vic2V0KElWYWxpZGF0b3IgdmFsaWRhdG9yLCBPYmplY3Qgb2JqLCBTdHJpbmcgZ3JvdXBOYW1lKSB7Ly8gZG8KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gbm90Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCS8vIG5lZWQKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gdG8KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gaW1wbGVtZW50Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKSB7Ci0JCXJldHVybiBsaXN0OwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZE1lc3NhZ2UoSVZhbGlkYXRvciBvcmlnaW4sIElNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBNZXNzYWdlTGltaXRFeGNlcHRpb24gCi0JewotCQlsaXN0LmFkZChtZXNzYWdlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwbGF5U3VidGFzayhJVmFsaWRhdG9yIHZhbGlkYXRvciwgSU1lc3NhZ2UgbWVzc2FnZSkgCi0JewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQotCX0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvV1NJVmFsaWRhdGlvblVJTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1dTSVZhbGlkYXRpb25VSU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMWEyYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvV1NJVmFsaWRhdGlvblVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogU3RyaW5ncyB1c2VkIGJ5IFhNTCBWYWxpZGF0aW9uCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lWYWxpZGF0aW9uVUlNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy53c2l2YWxpZGF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBXU0lWYWxpZGF0aW9uVUlNZXNzYWdlcygpIHsKLQkJLy8gY2Fubm90IGNyZWF0ZSBuZXcgaW5zdGFuY2UKLQl9Ci0KLQlzdGF0aWMgewotCQkvLyBpbml0aWFsaXplIHJlc291cmNlIGJ1bmRsZQotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXU0lWYWxpZGF0aW9uVUlNZXNzYWdlcy5jbGFzcyk7Ci0JfQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9TQVZFX0RJUlRZX0ZJTEVfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfU0FWRV9ESVJUWV9GSUxFX1RJVExFOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1JlcXVlc3RIYW5kbGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1JlcXVlc3RIYW5kbGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjVmNjA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9SZXF1ZXN0SGFuZGxlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyOwotCi0vKioKLSAqIEltcGxlbWVudHMgdGhlIFJlcXVlc3RIYW5kbGVyIGludGVyZmFjZSB3aGljaCByZXByZXNlbnRzIGEgVENQL0lQCi0gKiByZXF1ZXN0IG1hZGUgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyLiBFYWNoIHJlcXVlc3QgCi0gKiByZXByZXNlbnRzIGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLCB3aGVyZSB0aGUgcmVxdWVzdCBpcyBmcm9tIAotICogY2xpZW50IC0+IHNlcnZlciwgYW5kIHRoZSByZXNwb25zZSBpcyBmcm9tIHNlcnZlciAtPiBjbGllbnQuCi0gKiAKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgUmVxdWVzdEhhbmRsZXJJbXBsIGltcGxlbWVudHMgUmVxdWVzdEhhbmRsZXIgCi17Ci0JLyoqCi0JICogVGhlIEhUVFAgaGVhZGVyIG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqLwotCXByb3RlY3RlZCBieXRlW10gcmVxdWVzdEhlYWRlcjsKLQkKLQkvKioKLQkgKiBUaGUgSFRUUCBoZWFkZXIgb2YgdGhlIHJlc3BvbnNlIHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqLwotCXByb3RlY3RlZCBieXRlW10gcmVzcG9uc2VIZWFkZXI7Ci0KLQkvKioKLQkgKiBUaGUgSFRUUCBib2R5IG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqLwotCXByb3RlY3RlZCBieXRlW10gcmVxdWVzdENvbnRlbnQ7Ci0KLQkvKioKLQkgKiBUaGUgSFRUUCBib2R5IG9mIHRoZSByZXNwb25zZSBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwcm90ZWN0ZWQgYnl0ZVtdIHJlc3BvbnNlQ29udGVudDsKLQotCS8qKgotCSAqIFRoZSB0aW1lIHRoaXMgcmVxdWVzdCB3YXMgbWFkZS4KLQkgKi8KLQlwcm90ZWN0ZWQgRGF0ZSBkYXRlID0gbnVsbDsKLQkKLQkvKioKLQkgKiBUaGUgbG9jYWwgKGNsaWVudCkgcG9ydC4KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGxvY2FsUG9ydCA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgcmVtb3RlIChzZXJ2ZXIpIHBvcnQuCi0JICovCi0JcHJvdGVjdGVkIGludCByZW1vdGVQb3J0ID0gMDsKLQkKLQkvKioKLQkgKiBUaGUgcmVtb3RlIChzZXJ2ZXIpIGhvc3QuCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyByZW1vdGVIb3N0ID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBzZXJ2ZXIncyByZXNwb25zZSB0aW1lIGluIG1pbGxpc2Vjb25kcy4gCi0JICovCi0JcHJvdGVjdGVkIGxvbmcgcmVzcG9uc2VUaW1lID0gMDsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKiBAcGFyYW0gcmVxdWVzdCBhIFRDUC9JUCByZXF1ZXN0Ci0JICovCi0JUmVxdWVzdEhhbmRsZXJJbXBsKFJlcXVlc3QgcmVxdWVzdCkKLQl7Ci0JICBpZiAocmVxdWVzdCAhPSBudWxsKQotCSAgewotCQl0aGlzLnJlcXVlc3RIZWFkZXIgPSByZXF1ZXN0LmdldFJlcXVlc3QoUmVxdWVzdC5UUkFOU1BPUlQpOwotCQl0aGlzLnJlcXVlc3RDb250ZW50ID0gcmVxdWVzdC5nZXRSZXF1ZXN0KFJlcXVlc3QuQ09OVEVOVCk7Ci0JCXRoaXMucmVzcG9uc2VIZWFkZXIgPSByZXF1ZXN0LmdldFJlc3BvbnNlKFJlcXVlc3QuVFJBTlNQT1JUKTsKLQkJdGhpcy5yZXNwb25zZUNvbnRlbnQgPSByZXF1ZXN0LmdldFJlc3BvbnNlKFJlcXVlc3QuQ09OVEVOVCk7Ci0JCXRoaXMuZGF0ZSA9IHJlcXVlc3QuZ2V0RGF0ZSgpOwotCQl0aGlzLmxvY2FsUG9ydCA9IHJlcXVlc3QuZ2V0TG9jYWxQb3J0KCk7Ci0JCXRoaXMucmVtb3RlUG9ydCA9IHJlcXVlc3QuZ2V0UmVtb3RlUG9ydCgpOwotCQl0aGlzLnJlbW90ZUhvc3QgPSByZXF1ZXN0LmdldFJlbW90ZUhvc3QoKTsKLQkJdGhpcy5yZXNwb25zZVRpbWUgPSByZXF1ZXN0LmdldFJlc3BvbnNlVGltZSgpOwotCSAgfQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldFJlcXVlc3RIZWFkZXIoKQotCSAqLwotCXB1YmxpYyBieXRlW10gZ2V0UmVxdWVzdEhlYWRlcigpIAotCXsKLQkJcmV0dXJuIHRoaXMucmVxdWVzdEhlYWRlcjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlcXVlc3RIZWFkZXIoYnl0ZVtdKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlcXVlc3RIZWFkZXIoYnl0ZVtdIHJlcXVlc3RIZWFkZXIpIAotCXsKLQkJdGhpcy5yZXF1ZXN0SGVhZGVyID0gcmVxdWVzdEhlYWRlcjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldFJlc3BvbnNlSGVhZGVyKCkKLQkgKi8KLQlwdWJsaWMgYnl0ZVtdIGdldFJlc3BvbnNlSGVhZGVyKCkgCi0JewotCQlyZXR1cm4gdGhpcy5yZXNwb25zZUhlYWRlcjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlc3BvbnNlSGVhZGVyKGJ5dGVbXSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXNwb25zZUhlYWRlcihieXRlW10gcmVzcG9uc2VIZWFkZXIpIAotCXsKLQkJdGhpcy5yZXNwb25zZUhlYWRlciA9IHJlc3BvbnNlSGVhZGVyOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0UmVxdWVzdENvbnRlbnQoKQotCSAqLwotCXB1YmxpYyBieXRlW10gZ2V0UmVxdWVzdENvbnRlbnQoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlcXVlc3RDb250ZW50OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjc2V0UmVzcG9uc2VDb250ZW50KGJ5dGVbXSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXNwb25zZUNvbnRlbnQoYnl0ZVtdIHJlc3BvbnNlQ29udGVudCkgCi0JewotCQl0aGlzLnJlc3BvbnNlQ29udGVudCA9IHJlc3BvbnNlQ29udGVudDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldFJlc3BvbnNlQ29udGVudCgpCi0JICovCi0JcHVibGljIGJ5dGVbXSBnZXRSZXNwb25zZUNvbnRlbnQoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlc3BvbnNlQ29udGVudDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlcXVlc3RDb250ZW50KGJ5dGVbXSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXF1ZXN0Q29udGVudChieXRlW10gcmVxdWVzdENvbnRlbnQpIAotCXsKLQkJdGhpcy5yZXF1ZXN0Q29udGVudCA9IHJlcXVlc3RDb250ZW50OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0RGF0ZSgpCi0JICovCi0JcHVibGljIERhdGUgZ2V0RGF0ZSgpIAotCXsKLQkJcmV0dXJuIHRoaXMuZGF0ZTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldERhdGUoamF2YS51dGlsLkRhdGUpCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGF0ZShEYXRlIGRhdGUpIAotCXsKLQkJdGhpcy5kYXRlID0gZGF0ZTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldExvY2FsUG9ydCgpCi0JICovCi0JcHVibGljIGludCBnZXRMb2NhbFBvcnQoKSAKLQl7Ci0JCXJldHVybiB0aGlzLmxvY2FsUG9ydDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldExvY2FsUG9ydChpbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0TG9jYWxQb3J0KGludCBsb2NhbFBvcnQpIAotCXsKLQkJdGhpcy5sb2NhbFBvcnQgPSBsb2NhbFBvcnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXRSZW1vdGVQb3J0KCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldFJlbW90ZVBvcnQoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlbW90ZVBvcnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXRSZW1vdGVQb3J0KGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZW1vdGVQb3J0KGludCByZW1vdGVQb3J0KSAKLQl7Ci0JCXRoaXMucmVtb3RlUG9ydCA9IHJlbW90ZVBvcnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXRSZW1vdGVIb3N0KCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFJlbW90ZUhvc3QoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlbW90ZUhvc3Q7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXRSZW1vdGVIb3N0KGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVtb3RlSG9zdChTdHJpbmcgcmVtb3RlSG9zdCkgCi0JewotCQl0aGlzLnJlbW90ZUhvc3QgPSByZW1vdGVIb3N0OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0UmVzcG9uc2VUaW1lKCkKLQkgKi8KLQlwdWJsaWMgbG9uZyBnZXRSZXNwb25zZVRpbWUoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlc3BvbnNlVGltZTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlc3BvbnNlVGltZShsb25nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlc3BvbnNlVGltZShsb25nIHJlc3BvbnNlVGltZSkgCi0JewotCQl0aGlzLnJlc3BvbnNlVGltZSA9IHJlc3BvbnNlVGltZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvVmFsaWRhdGVXU0lMb2dGaWxlQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9WYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzQxMGU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9WYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuV1NJVmFsaWRhdGVBY3Rpb247Ci0KLQotLyoqCi0gKiBBY3Rpb24gZGVsZWdhdGUgZm9yIHZhbGlkYXRpbmcgYSBXUy1JIGxvZyBmaWxlLgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIElBY3Rpb25EZWxlZ2F0ZQotewotICAvKioKLSAgICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlvbi4KLSAgICovCi0gIElTZWxlY3Rpb24gc2VsZWN0aW9uOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCAgb2JqID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICAgIHsKLSAgICAgICAgICBJRmlsZSBmaWxlID0gKElGaWxlKW9iajsKLSAgICAgICAgICBXU0lNZXNzYWdlVmFsaWRhdG9yIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgV1NJTWVzc2FnZVZhbGlkYXRvcigpOwotICAgICAgICAgIFdTSVZhbGlkYXRlQWN0aW9uIHZhbGlkYXRlQWN0aW9uID0gbmV3IFdTSVZhbGlkYXRlQWN0aW9uKGZpbGUsIHRydWUpOwotICAgICAgICAgIHZhbGlkYXRlQWN0aW9uLnNldFZhbGlkYXRvcihtZXNzYWdlVmFsaWRhdG9yKTsKLSAgICAgICAgICB2YWxpZGF0ZUFjdGlvbi5ydW4oKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1ZhbGlkYXRlV1NJUHJvZmlsZUFjdGlvbkRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFiYWU1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5Nb25pdG9yVUlDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC53aXphcmRzLlZhbGlkYXRpb25XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5XU0lWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld0FjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkNvbnRhaW5lckdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLQotLyoqCi0gKiBBY3Rpb24gZGVsZWdhdGUgZm9yIHRoZSBXUy1JIHZhbGlkYXRvci4KLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJVmlld0FjdGlvbkRlbGVnYXRlCi17Ci0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCBXUy1JIE1lc3NhZ2UgTG9nIGZpbGVuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0dfRklMRU5BTUUgPSAibG9nLndzaW1zZyI7Ci0KLSAgLyoqCi0gICAqIFRoZSBIVFRQIHByb3RvY29sLgotICAgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUCA9ICJodHRwOi8vIjsKLSAgCi0gIAotICAvKioKLSAgICogVGhlIGRlZmF1bHQgdGFnIGZvciBXU0RMIGxvY2F0aW9ucy4KLSAgICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTREwgPSAiP1dTREwiOwotICAKLSAgLyoqCi0gICAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24uCi0gICAqLwotICBJU2VsZWN0aW9uIHNlbGVjdGlvbjsKLQotICAvKioKLSAgICogVGhlIGxpc3Qgb2YgbWVzc2FnZXMgaW4gdGhlIGZvcm0gb2YgcmVxdWVzdC1yZXNwb25zZSBwYWlycy4KLSAgICovCi0gIFJlcXVlc3RbXSByZXF1ZXN0UmVzcG9uc2VzOwotCi0gIC8qKgotICAgKiBUaGUgdmlldyB0aGF0IHByb3ZpZGVzIHRoZSBjb250ZXh0IGZvciB0aGlzIGRlbGVnYXRlLgotICAgKi8KLSAgSVZpZXdQYXJ0IHZpZXc7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRlV1NJUHJvZmlsZUFjdGlvbkRlbGVnYXRlKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdBY3Rpb25EZWxlZ2F0ZSNpbml0KG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVZpZXdQYXJ0IHZpZXcpCi0gIHsKLSAgICB0aGlzLnZpZXcgPSB2aWV3OwotICB9Ci0KLSAgLyoqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikKLSAgICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlKHByb2dyZXNzTW9uaXRvcik7Ci0gICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBvcGVyYXRpb24ucnVuKG51bGwpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgdmFsaWRhdGUgYWN0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXF1ZXN0UmVzcG9uc2VzID0gTW9uaXRvclVJQ29yZS5nZXRSZXF1ZXN0cygpOwotICAgICAgU2hlbGwgc2hlbGwgPSBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpOwotICAgICAgaWYgKChyZXF1ZXN0UmVzcG9uc2VzICE9IG51bGwpICYmIChyZXF1ZXN0UmVzcG9uc2VzLmxlbmd0aCA+IDApKQotICAgICAgewotICAgICAgICBWYWxpZGF0aW9uV2l6YXJkIHZhbGlkYXRlV2l6YXJkID0gbmV3IFZhbGlkYXRpb25XaXphcmQoREVGQVVMVF9MT0dfRklMRU5BTUUpOwotICAgICAgICBMaXN0IHdzZGxsb2NzID0gbmV3IFZlY3RvcigpOwotCi0gICAgICAgCWZvciAoaW50IGk9MDsgaTxyZXF1ZXN0UmVzcG9uc2VzLmxlbmd0aDsgaSsrKQotICAgICAgCXsKLSAgICAgIAkgIFJlcXVlc3QgcmVxcmVzcCA9IHJlcXVlc3RSZXNwb25zZXNbaV07Ci0gICAgICAJICBTdHJpbmcgcmVtb3RlaG9zdCA9IHJlcXJlc3AuZ2V0UmVtb3RlSG9zdCgpOwotICAgICAgCSAgaW50IHJlbW90ZXBvcnQgPSByZXFyZXNwLmdldFJlbW90ZVBvcnQoKTsKLSAgICAgIAkgIFN0cmluZyByZW1vdGVsYWJlbCA9IHJlcXJlc3AuZ2V0TmFtZSgpOwotICAgICAgCSAgU3RyaW5nIGxvY2F0aW9uID0gSFRUUCArIHJlbW90ZWhvc3QgKyAiOiIgKyByZW1vdGVwb3J0ICsgcmVtb3RlbGFiZWwgKyBXU0RMOwotICAgICAgCSAgaWYoIXdzZGxsb2NzLmNvbnRhaW5zKGxvY2F0aW9uKSkKLSAgICAgIAkgIHsKLSAgICAgIAkgICAgd3NkbGxvY3MuYWRkKGxvY2F0aW9uKTsKLSAgICAgIAkgIH0KLSAgICAgIAl9Ci0gICAgICAKLSAgICAgICAgdmFsaWRhdGVXaXphcmQuc2V0V1NETExvY2F0aW9ucygoU3RyaW5nW10pd3NkbGxvY3MudG9BcnJheShuZXcgU3RyaW5nW3dzZGxsb2NzLnNpemUoKV0pKTsKLSAgICAgICAgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coc2hlbGwsIHZhbGlkYXRlV2l6YXJkKTsKLSAgICAgICAgd2l6YXJkRGlhbG9nLmNyZWF0ZSgpOwotCi0gICAgICAgIGludCByZXN1bHQgPSB3aXphcmREaWFsb2cub3BlbigpOwotCi0gICAgICAgIGlmICh2YWxpZGF0ZVdpemFyZC5pc1ZhbGlkKCkgJiYgKHJlc3VsdCAhPSBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93LkNBTkNFTCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiB0aGUgY29udGFpbmVyIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdCBub3cKLSAgICAgICAgICBjaGVja0FuZENyZWF0ZUNvbnRhaW5lcih2YWxpZGF0ZVdpemFyZC5nZXRDb250YWluZXJGdWxsUGF0aCgpKTsKLQotICAgICAgICAgIElGaWxlIGZpbGUgPSB2YWxpZGF0ZVdpemFyZC5nZXRGaWxlKCk7Ci0gICAgICAgICAgTG9nQnVpbGRlciBidWlsZGVyID0gbmV3IExvZ0J1aWxkZXIoZmlsZSk7Ci0gICAgICAgICAgTG9nIGxvZyA9IGJ1aWxkZXIuYnVpbGRMb2coZ2V0UmVxdWVzdEhhbmRsZXJzKHJlcXVlc3RSZXNwb25zZXMpKTsKLQotICAgICAgICAgIGJ1aWxkZXIud3JpdGVMb2cobG9nKTsKLSAgICAgICAgICBmaWxlLnJlZnJlc2hMb2NhbCgxLCBwcm9ncmVzc01vbml0b3IpOwotICAgICAgICAKLSAgICAgICAgICBXU0lWYWxpZGF0b3IgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBXU0lWYWxpZGF0b3IoKTsKLSAgICAgICAgICBpZih2YWxpZGF0ZVdpemFyZC5pbmNsdWRlV1NETEZpbGUoKSkKLSAgICAgICAgICB7CQotICAgICAgICAJU3RyaW5nIHdzZGxmaWxlID0gdmFsaWRhdGVXaXphcmQuZ2V0V1NETEZpbGUoKTsKLSAgICAgICAgCVN0cmluZyBuYW1lID0gdmFsaWRhdGVXaXphcmQuZ2V0RWxlbWVudE5hbWUoKTsKLSAgICAgICAgCVN0cmluZyBuYW1lc3BhY2UgPSB2YWxpZGF0ZVdpemFyZC5nZXROYW1lc3BhY2UoKTsKLSAgICAgICAgCVN0cmluZyBwYXJlbnRuYW1lID0gdmFsaWRhdGVXaXphcmQuZ2V0UGFyZW50TmFtZSgpOwotICAgICAgICAJU3RyaW5nIHR5cGUgPSB2YWxpZGF0ZVdpemFyZC5nZXRUeXBlKCk7Ci0gICAgICAgIAltZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlKGZpbGUsIHdzZGxmaWxlLCBuYW1lLCBuYW1lc3BhY2UsIHBhcmVudG5hbWUsIHR5cGUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewkKLSAgICAgICAgCW1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGUoZmlsZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIGF2YWlsYWJsZSBtZXNzYWdlcyB0byB2YWxpZGF0ZQotICAgIAkgIFN0cmluZyB0aXRsZSA9IE1lc3NhZ2VzLkFDVElPTl9XU0lfVkFMSURBVE9SOwotICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gTWVzc2FnZXMuSU5GT19OT19NRVNTQUdFU19UT19WQUxJREFURTsKLSAgICAJTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oc2hlbGwsIHRpdGxlLCBtZXNzYWdlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldFJlcXVlc3RIYW5kbGVycyhSZXF1ZXN0W10gcmVxdWVzdFJlc3BvbnNlcykgCi0gIHsKLQlMaXN0IHJlcXVlc3RIYW5kbGVycyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgc2l6ZSA9IHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoOwotCWZvciAoaW50IGkgPSAwOyBpPHNpemU7IGkrKykKLQl7Ci0JICBSZXF1ZXN0IHJlcXVlc3QgPSByZXF1ZXN0UmVzcG9uc2VzW2ldOwotCSAgUmVxdWVzdEhhbmRsZXIgaGFuZGxlciA9IG5ldyBSZXF1ZXN0SGFuZGxlckltcGwocmVxdWVzdCk7Ci0JICByZXF1ZXN0SGFuZGxlcnMuYWRkKGhhbmRsZXIpOwotCX0KLQlyZXR1cm4gcmVxdWVzdEhhbmRsZXJzOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24sIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0gIH0KLSAKLSAgLyoqCi0gICAqIElmIHRoZSBjb250YWluZXIgZG9lc24ndCBleGlzdCBmb3IgdGhlIHNlbGVjdGVkIElGaWxlLCBjcmVhdGUgaXQgbm93LgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRhaW5lclBhdGggVGhlIGNvbnRhaW5lciBmb3IgdGhlIHNlbGVjdGVkIElGaWxlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrQW5kQ3JlYXRlQ29udGFpbmVyKElQYXRoIGNvbnRhaW5lclBhdGgpCi0gIHsKLSAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIoY29udGFpbmVyUGF0aCk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIGNvbnRhaW5lciBkb2Vzbid0IGV4aXN0IGluIHRoZSB3b3Jrc3BhY2UsIGNyZWF0ZSBpdC4KLSAgICBpZiAocmVzb3VyY2UgPT0gbnVsbCkgCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIENvbnRhaW5lckdlbmVyYXRvciBnZW5lcmF0b3IgPSBuZXcgQ29udGFpbmVyR2VuZXJhdG9yKGNvbnRhaW5lclBhdGgpOwotICAgICAgICBnZW5lcmF0b3IuZ2VuZXJhdGVDb250YWluZXIobnVsbCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvaWNvbnMvd3NpX2xvZ2ZpbGVfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2ljb25zL3dzaV9sb2dmaWxlX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkODVmODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvaWNvbnMvd3NpX2xvZ2ZpbGVfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL3dzaXZhbGlkYXRpb24ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL3dzaXZhbGlkYXRpb24ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRmNzQ0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy93c2l2YWxpZGF0aW9uLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMjIENvbnN0YW50cyBmb3Igc3RyaW5ncyAgCi0KLSMKLSMgRGlydHkgRmlsZSBEaWFsb2cgUmVsYXRlZCBNZXNzYWdlcwotIwotX1VJX1NBVkVfRElSVFlfRklMRV9NRVNTQUdFICAgICAgICAgPSBBbiBvcGVuIGVkaXRvciBjb250YWlucyBjaGFuZ2VzIHRvIHRoaXMgZmlsZSB0aGF0IGhhdmUgbm90IGJlZW4gc2F2ZWQuIERvIHlvdSB3YW50IHRvIHNhdmUgdGhlIGZpbGUgYmVmb3JlIHJ1bm5pbmcgdmFsaWRhdGlvbj8gKElmIHlvdSBkbyBub3Qgc2F2ZSB0aGUgZmlsZSB0aGUgcHJldmlvdXNseSBzYXZlZCB2ZXJzaW9uIHdpbGwgYmUgdmFsaWRhdGVkLikKLV9VSV9TQVZFX0RJUlRZX0ZJTEVfVElUTEUgICAgICAgICAgID0gU2F2ZSBmaWxlPwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjM4YjlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLldTSVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MubmF2aWdhdG9yLlJlc291cmNlTmF2aWdhdG9yOwotCi0vKioKLSAqIFRoaXMgd2l6YXJkIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgCi0gKiBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUgZm9yIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24uCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbldpemFyZCBleHRlbmRzIFdpemFyZAotewotICAvKioKLSAgICogV2l6YXJkIHBhZ2UgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIAotICAgKiBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUgZm9yIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UgbG9nUGFnZTsKLQotICAvKioKLSAgICogV2l6YXJkIHBhZ2UgdG8gb3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBsb2NhdGlvbgotICAgKiBvZiB0aGUgV1NETCBkb2N1bWVudCBmb3IgdGhlIFdlYiBzZXJ2aWNlLgotICAgKi8KLSAgcHJvdGVjdGVkIFZhbGlkYXRpb25XaXphcmRXU0RMUGFnZSB3c2RsUGFnZTsKLQotICAvKioKLSAgICogV2l6YXJkIHBhZ2UgdG8gc3BlY2lmeSB0aGUgbmFtZSwgdHlwZSBhbmQgbmFtZXNwYWNlCi0gICAqIGZvciB0aGUgV1NETCBlbGVtZW50IHRvIGFuYWx5emUuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZSB3c2RsQ29udGVudFBhZ2U7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgV1MtSSBNZXNzYWdlIGZpbGVuYW1lIHBhc3NlZCBpbiB0aGUgQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGZpbGVuYW1lOwotCi0gIC8qKgotICAgKiBUaGUgc2VsZWN0ZWQgV1MtSSBNZXNzYWdlIExvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIElGaWxlIGZpbGU7Ci0KLSAgLyoqCi0gICAqIFRoZSBjb250YWluZXIgaG9sZGluZyB0aGUgc2VsZWN0ZWQgV1MtSSBNZXNzYWdlIExvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIElQYXRoIGNvbnRhaW5lckZ1bGxQYXRoOwotCi0gIC8qKgotICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBzZWxlY3RlZCBmaWxlIGlzIHZhbGlkLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNWYWxpZDsKLQotICAvKioKLSAgICogVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGVsZW1lbnRuYW1lOwotCi0gIC8qKgotICAgKiBUaGUgbmFtZXNwYWNlIG9mIHRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0KLSAgLyoqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudG5hbWU7Ci0KLSAgLyoqCi0gICAqIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB0eXBlOwotCi0gIC8qKgotICAgKiBUaGUgV1NETCBmaWxlIHRvIHVzZSBmb3IgdmFsaWRhdGlvbjsKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbGZpbGU7Ci0KLSAgLyoqCi0gICAqIFRydWUgaWYgYSBXU0RMIGZpbGUgaXMgaW5jbHVkZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGluY2x1ZGV3c2RsZmlsZTsKLQotICAKLSAgLyoqCi0gICAqIFRoaXMgbGlzdCBvZiBXU0RMIGxvY2F0aW9ucyB0aGUgdXNlciBjYW4gY2hvb3NlIGZyb20uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nW10gd3NkbGxvY2F0aW9ucyA9IG51bGw7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBEZWZhdWx0IG1lc3NhZ2UgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uV2l6YXJkKFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIHRoaXMuZmlsZW5hbWUgPSBmaWxlbmFtZTsKLSAgICB0aGlzLnNldFdpbmRvd1RpdGxlKE1lc3NhZ2VzLlZBTElEQVRJT05fV0laQVJEX1RJVExFKTsKLSAgICBzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcigKLSAgICAgIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShXU0lVSVBsdWdpbi5jbGFzcywgUmVzb3VyY2UuVkFMSURBVEVfV1NJX0xPR0ZJTEVfV0laKSk7Ci0gICAgc2V0TmVlZHNQcm9ncmVzc01vbml0b3IodHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZCNhZGRQYWdlcygpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYWdlcygpCi0gIHsKLSAgICBsb2dQYWdlID0gbmV3IFZhbGlkYXRpb25XaXphcmRMb2dQYWdlKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0UmVzb3VyY2VOYXZpZ2F0b3JTZWxlY3Rpb24oKSwgZmlsZW5hbWUpOwotICAgIHdzZGxQYWdlID0gbmV3IFZhbGlkYXRpb25XaXphcmRXU0RMUGFnZSgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFJlc291cmNlTmF2aWdhdG9yU2VsZWN0aW9uKCkpOwotICAgIHdzZGxDb250ZW50UGFnZSA9IG5ldyBWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0UmVzb3VyY2VOYXZpZ2F0b3JTZWxlY3Rpb24oKSk7Ci0gICAgYWRkUGFnZShsb2dQYWdlKTsKLSAgICBhZGRQYWdlKHdzZGxQYWdlKTsKLSAgICBhZGRQYWdlKHdzZGxDb250ZW50UGFnZSk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFRydWUgaWYgYSBXU0RMIGZpbGUgaXMgaW5jbHVkZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGluY2x1ZGVXU0RMRmlsZSgpCi0gIHsKLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgewotICAgICAgcmV0dXJuIHdzZGxQYWdlLmluY2x1ZGVXU0RMRmlsZSgpOwotICAgIH0KLSAgICByZXR1cm4gaW5jbHVkZXdzZGxmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZWxlbWVudCBuYW1lIHRvIHZhbGlkYXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZWxlbWVudCBuYW1lIHRvIHZhbGlkYXRlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbGVtZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZWxlbWVudG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuYW1lc3BhY2UgZm9yIHRoZSBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2U7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHBhcmVudG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETEZpbGUoKQotICB7Ci0gICAgaWYgKCFpc1ZhbGlkKQotICAgIHsKLSAgICAgIHJldHVybiB3c2RsUGFnZS5nZXRXU0RMRmlsZSgpOwotICAgIH0KLSAgICByZXR1cm4gd3NkbGZpbGU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZCNnZXROZXh0UGFnZShvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZFBhZ2UpCi0gICAqLwotICBwdWJsaWMgSVdpemFyZFBhZ2UgZ2V0TmV4dFBhZ2UoSVdpemFyZFBhZ2UgY3VycmVudFBhZ2UpCi0gIHsKLSAgICBpZiAoY3VycmVudFBhZ2UgPT0gd3NkbFBhZ2UpCi0gICAgewotICAgICAgaWYgKCF3c2RsUGFnZS5pbmNsdWRlV1NETEZpbGUoKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgV1NETEZhY3RvcnkgZmFjdG9yeSA9IFdTRExGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgV1NETFJlYWRlciByZWFkZXIgPSBmYWN0b3J5Lm5ld1dTRExSZWFkZXIoKTsKLSAgICAgICAgICByZWFkZXIucmVhZFdTREwoZ2V0V1NETEZpbGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIFdTREwgZmlsZSB0aGVyZSBpcyBubyBuZXh0IHBhZ2UuCi0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmdldE5leHRQYWdlKGN1cnJlbnRQYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlbGVjdGVkIGZpbGUgaXMgYSB2YWxpZCBXUy1JIE1lc3NhZ2UgTG9nIGZpbGVuYW1lLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzZWxlY3RlZCBmaWxlIGlzIGEgdmFsaWQgV1MtSSBNZXNzYWdlIExvZyBmaWxlbmFtZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKQotICB7Ci0gICAgcmV0dXJuIGlzVmFsaWQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZCNwZXJmb3JtRmluaXNoKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICB7Ci0gICAgZmlsZSA9IGxvZ1BhZ2UuZ2V0RmlsZSgpOwotICAgIGNvbnRhaW5lckZ1bGxQYXRoID0gbG9nUGFnZS5nZXRDb250YWluZXJGdWxsUGF0aCgpOwotICAgIGluY2x1ZGV3c2RsZmlsZSA9IHdzZGxQYWdlLmluY2x1ZGVXU0RMRmlsZSgpOwotICAgIHdzZGxmaWxlID0gd3NkbFBhZ2UuZ2V0V1NETEZpbGUoKTsKLSAgICBlbGVtZW50bmFtZSA9IHdzZGxDb250ZW50UGFnZS5nZXRFbGVtZW50TmFtZSgpOwotICAgIG5hbWVzcGFjZSA9IHdzZGxDb250ZW50UGFnZS5nZXROYW1lc3BhY2UoKTsKLSAgICBwYXJlbnRuYW1lID0gd3NkbENvbnRlbnRQYWdlLmdldFBhcmVudE5hbWUoKTsKLSAgICB0eXBlID0gd3NkbENvbnRlbnRQYWdlLmdldFR5cGUoKTsKLSAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmaWxlIHNlbGVjdGVkIGJ5IHRoZSB1c2VyIGluIHRoZSBjaG9vc2UgcGFnZS4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGZpbGUgc2VsZWN0ZWRieSB0aGUgdXNlciBpbiB0aGUgY2hvb3NlIHBhZ2UuCi0gICAqLwotICBwdWJsaWMgSUZpbGUgZ2V0RmlsZSgpCi0gIHsKLSAgICByZXR1cm4gZmlsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBJUGF0aCBjb250YWluaW5nIHRoZSBzZWxlY3RlZCBJRmlsZS4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIElQYXRoIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkIElGaWxlLgotICAgKi8KLSAgcHVibGljIElQYXRoIGdldENvbnRhaW5lckZ1bGxQYXRoKCkKLSAgewotICAgIHJldHVybiBjb250YWluZXJGdWxsUGF0aDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gaW4gdGhlIFJlc291cmNlIE5hdmlnYXRvciB2aWV3LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgc2VsZWN0aW9uIGluIHRoZSBSZXNvdXJjZSBOYXZpZ2F0b3Igdmlldy4KLSAgICovCi0gIHB1YmxpYyBJU2VsZWN0aW9uIGdldFJlc291cmNlTmF2aWdhdG9yU2VsZWN0aW9uKCkKLSAgewotICAgIElWaWV3UmVmZXJlbmNlIHZpZXdQYXJ0c1tdID0KLSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldFZpZXdSZWZlcmVuY2VzKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpZXdQYXJ0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAodmlld1BhcnRzW2ldIGluc3RhbmNlb2YgUmVzb3VyY2VOYXZpZ2F0b3IpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAoKFJlc291cmNlTmF2aWdhdG9yKSB2aWV3UGFydHNbaV0pLmdldFZpZXdTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKS5nZXRTZWxlY3Rpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBsaXN0IG9mIFdTREwgbG9jYXRpb25zIHRvIGxldCB0aGUgdXNlciBjaG9vc2UgZnJvbS4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsbG9jYXRpb25zIEEgbGlzdCBvZiBXU0RMIGRvY3VtZW50IGxvY2F0aW9ucy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExMb2NhdGlvbnMoU3RyaW5nW10gd3NkbGxvY2F0aW9ucykgCi0gIHsKLQl0aGlzLndzZGxsb2NhdGlvbnMgPSB3c2RsbG9jYXRpb25zOwotCQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBsaXN0IG9mIFdTREwgbG9jYXRpb25zIHRoZSB1c2VyIGNhbiBjaG9vc2UgZnJvbS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgV1NETCBsb2NhdGlvbnMuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0V1NETExvY2F0aW9ucygpCi0gIHsKLSAgCXJldHVybiB3c2RsbG9jYXRpb25zOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkTG9nUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4OGNhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkTG9nUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotLyoqCi0gKiBXaXphcmQgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgCi0gKiBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUgZm9yIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24uCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqLwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlCi17Ci0gIC8qKgotICAgKiBSZWNvbW1lbmRlZCBleHRlbnNpb24gZm9yIGEgV1MtSSBNZXNzYWdlIExvZyBmaWxlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NJX0xPR19FWFRFTlNJT04gPSAid3NpbXNnIjsKLSAKLSAgLyoqCi0gICAqIERlZmF1bHQgV1MtSSBNZXNzYWdlIGZpbGVuYW1lIHBhc3NlZCBpbiB0aGUgQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGZpbGVuYW1lOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGlvbjogc2VsZWN0aW9uIGluIHRoZSBSZXNvdXJjZSBOYXZpZ2F0b3Igdmlldy4KLSAgICogQHBhcmFtIGZpbGVuYW1lOiBkZWZhdWx0IG1lc3NhZ2UgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uV2l6YXJkTG9nUGFnZShJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sIFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIHN1cGVyKCJWYWxpZGF0aW9uV2l6YXJkTG9nUGFnZSIsIHNlbGVjdGlvbik7Ci0gICAgdGhpcy5maWxlbmFtZSA9IGZpbGVuYW1lOwotICAgIHRoaXMuc2V0VGl0bGUoTWVzc2FnZXMuTE9HX1BBR0VfU0VMRUNUX0xPR19GSUxFTkFNRV9IRUFESU5HKTsKLSAgICB0aGlzLnNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLkxPR19QQUdFX1NFTEVDVF9MT0dfRklMRU5BTUVfRVhQTCk7Ci0gIH0KLQotCi0gIC8qKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dQYWdlI2NyZWF0ZUNvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotICAgKi8KLSAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSAKLSAgewotICAgIHN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKLSAgICBzdXBlci5zZXRGaWxlTmFtZShmaWxlbmFtZSk7Ci0gICAgc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIGZpbGUuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBzZWxlY3RlZCBJRmlsZS4gIAotICAgKi8KLSAgcHVibGljIElGaWxlIGdldEZpbGUoKQotICB7Ci0gICAgU3RyaW5nIGZpbGVOYW1lID0gZ2V0RmlsZU5hbWUoKTsKLSAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbiA9IChuZXcgUGF0aChmaWxlTmFtZSkpLmdldEZpbGVFeHRlbnNpb24oKTsKLSAgICAKLSAgICBpZiAoZmlsZUV4dGVuc2lvbiA9PSBudWxsKQotICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5jb25jYXQoIi4iICsgV1NJX0xPR19FWFRFTlNJT04pOwotICAgICAgCi0gICAgcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChmaWxlTmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBzZWxlY3RlZCBmaWxlIGlzIGEgdmFsaWQgV1MtSSBNZXNzYWdlIExvZyBmaWxlbmFtZS4KLSAgICogCi0gICAqIFNpbmNlIHRoZSBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGRvZXMgbm90IHByb3ZpZGUgYW4gaW50ZXJmYWNlIHRvCi0gICAqIGFsbG93IHRoZSBmaWxlIHNwZWNpZmllZCB0byBhbHJlYWR5IGV4aXN0IChpdCBnaXZlcyBhbiBlcnJvciB0aGF0IHRoZQotICAgKiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgYW4gbm8gd2F5IG9mIGFsbG93aW5nIGl0IHRvIHBhc3MpLCBhbmQgd2Ugd2FudAotICAgKiB0byBhbGxvdyB0aGUgZmlsZSB0byBleGlzdCwgc28gdGhhdCB3ZSBjYW4gb3ZlcndyaXRlIGl0LCB3ZSBoYXZlIHRvCi0gICAqIG92ZXJyaWRlIHRoaXMgbWV0aG9kLCBhbmQgZG8gc29tZSBtYWdpYyB0byBhbGxvdyB0aGlzIGNhc2UgdG8gcGFzcy4KLSAgICoKLSAgICogQHJldHVybiB0cnVlIGlmIHNlbGVjdGVkIGZpbGUgaXMgYSB2YWxpZCBXUy1JIE1lc3NhZ2UgTG9nIGZpbGVuYW1lLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSN2YWxpZGF0ZVBhZ2UoKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgCi0gIHsKLSAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbiA9IChuZXcgUGF0aChnZXRGaWxlTmFtZSgpKSkuZ2V0RmlsZUV4dGVuc2lvbigpOwotICAgIGlmIChmaWxlRXh0ZW5zaW9uICE9IG51bGwpIAotICAgIHsKLSAgICAgIGlmIChmaWxlRXh0ZW5zaW9uLmNvbXBhcmVUbyhXU0lfTE9HX0VYVEVOU0lPTikgIT0gMCkKLSAgICAgIHsgICAgICAgIAotICAgICAgICBzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuRVJST1JfSU5WQUxJRF9MT0dfRklMRV9FWFRFTlNJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIEVzc2VudGlhbGx5LCB3ZSB0YWtlIHRoZSBjb250YWluZXIgYW5kIGNvbmNhdCB0aGUgZmlsZSB0byBpdCwgYW5kCi0gICAgLy8gY2hlY2sgaWYgaXRzIGluIHRoZSB3b3Jrc3BhY2UsIGlmIGl0IGlzLCB0aGVuIGl0IGV4aXN0cyBhbmQgd2UgY2FuIAotICAgIC8vIHByb2NlZWQuIE90aGVyd2lzZSwgY29udGludWUgd2l0aCB0aGUgZGVmYXVsdCB2YWxpZGF0aW5nLgotICAgIGlmICggKGdldENvbnRhaW5lckZ1bGxQYXRoKCkgIT0gbnVsbCkgJiYgKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuaXNFbXB0eSgpID09IGZhbHNlKQotICAgICAgICAgICAmJiAoZ2V0RmlsZU5hbWUoKS5jb21wYXJlVG8oIiIpICE9IDApKQotICAgIHsKLSAgICAgIFBhdGggZnVsbFBhdGg7Ci0gICAgICAgICAgICAKLSAgICAgIGlmIChmaWxlRXh0ZW5zaW9uICE9IG51bGwpCi0gICAgICAgIGZ1bGxQYXRoID0gbmV3IFBhdGgoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS50b1N0cmluZygpICsgJy8nICsgZ2V0RmlsZU5hbWUoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGZ1bGxQYXRoID0gbmV3IFBhdGgoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS50b1N0cmluZygpICsgJy8nICsgZ2V0RmlsZU5hbWUoKSArICIuIiArIFdTSV9MT0dfRVhURU5TSU9OKTsKLSAgICAgIAotICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKGZ1bGxQYXRoKTsKLSAgICAgIAotICAgICAgc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotICAgICAgaWYgKHJlc291cmNlICE9IG51bGwpCi0gICAgICAgIHNldE1lc3NhZ2UoTWVzc2FnZXMuV0FSTklOR19GSUxFX0FMUkVBRFlfRVhJU1RTKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2V0TWVzc2FnZShudWxsKTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYTA1NzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLQotLyoqCi0gKiBXaXphcmQgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgCi0gKiBXU0RMIGRvY3VtZW50IGZvciB0aGUgV2ViIHNlcnZpY2UuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotewotICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVCA9ICJwb3J0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkcgPSAiYmluZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlRUWVBFID0gInBvcnR0eXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRSA9ICJtZXNzYWdlIjsKLSAgLyoqCi0gICAqIEFjY2VzcyB0byB0aGUgaW5jbHVkZVdTREwgZmxhZy4gIAotICAgKi8KLSAgcHJvdGVjdGVkIEJ1dHRvbiB3c2RsUG9ydEJ1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiB3c2RsQmluZGluZ0J1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiB3c2RsUG9ydFR5cGVCdXR0b247Ci0gIHByb3RlY3RlZCBCdXR0b24gd3NkbE9wZXJhdGlvbkJ1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiB3c2RsTWVzc2FnZUJ1dHRvbjsKLQotICBwcm90ZWN0ZWQgQ29tYm8gbmFtZUNvbWJvOwotICBwcm90ZWN0ZWQgVGV4dCBuYW1lc3BhY2VUZXh0OwotICAvL3Byb3RlY3RlZCBDb21ibyBwYXJlbnRDb21ibzsKLSAgLy9wcm90ZWN0ZWQgVGV4dCBuYW1lVGV4dDsKLSAgcHJvdGVjdGVkIFRleHQgcGFyZW50bmFtZVRleHQ7Ci0KLSAgcHJvdGVjdGVkIExpc3QgcG9ydHMgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBvcGVyYXRpb25zID0gbnVsbDsKLSAgcHJvdGVjdGVkIExpc3QgYmluZGluZ3MgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBwb3J0dHlwZXMgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBtZXNzYWdlcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGlvbjogc2VsZWN0aW9uIGluIHRoZSBSZXNvdXJjZSBOYXZpZ2F0b3Igdmlldy4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIHN1cGVyKCJWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlIik7Ci0gICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0gICAgdGhpcy5zZXRUaXRsZShNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9TRUxFQ1RfSEVBRElORyk7Ci0gICAgdGhpcy5zZXREZXNjcmlwdGlvbihNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9TRUxFQ1RfRVhQTCk7Ci0gIH0KLQotICAvKioKLSAgICogQWx3YXlzIHJldHVybnMgdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUGFnZUNvbXBsZXRlKCkKLSAgewotICAgIGlmICgoKFZhbGlkYXRpb25XaXphcmQpIGdldFdpemFyZCgpKS5pbmNsdWRlV1NETEZpbGUoKSkKLSAgICB7Ci0gICAgICBpbnQgc2VsZWN0aW9uID0gbmFtZUNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoc2VsZWN0aW9uICE9IC0xICYmICFuYW1lQ29tYm8uZ2V0SXRlbShzZWxlY3Rpb24pLmVxdWFscygiIikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qCi0gICAqIENyZWF0ZXMgdGhlIHRvcCBsZXZlbCBjb250cm9sIGZvciB0aGlzIHBhZ2UgdW5kZXIgdGhlIGdpdmVuIAotICAgKiBwYXJlbnQgY29tcG9zaXRlLiBJbXBsZW1lbnRvcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZwotICAgKiB0aGF0IHRoZSBjcmVhdGVkIGNvbnRyb2wgY2FuIGJlIGFjY2Vzc2VkIHZpYSBnZXRDb250cm9sIAotICAgKgotICAgKiBAcGFyYW0gcGFyZW50IC0gdGhlIHBhcmVudCBjb21wb3NpdGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBiYXNlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBiYXNlLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLSAgICBHcmlkRGF0YSBkYXRhOwotCi0gICAgLy8gY3JlYXRlIGEgZ3JvdXAKLSAgICBHcm91cCB3c2RsRWxlbWVudEdyb3VwID0gbmV3IEdyb3VwKGJhc2UsIFNXVC5TSEFET1dfRVRDSEVEX0lOKTsKLSAgICB3c2RsRWxlbWVudEdyb3VwLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfR1JPVVBfVEVYVF9FTEVNRU5UKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIHdzZGxFbGVtZW50R3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHdzZGxFbGVtZW50R3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICAvLyBjcmVhdGUgYSBiYXNlIHBhbmVsIHdpdGggMiBjb2x1bW5zCi0gICAgQ29tcG9zaXRlIGJhc2VQYW5lbCA9IG5ldyBDb21wb3NpdGUod3NkbEVsZW1lbnRHcm91cCwgU1dULk5PTkUpOwotICAgIGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIGxheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSBmYWxzZTsKLSAgICBiYXNlUGFuZWwuc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBiYXNlUGFuZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIC8vIGNvbnRlbnQgZm9yIGZpcnN0IGNvbHVtbgotICAgIGNyZWF0ZVdTRExFbGVtZW50VHlwZUNvbnRlbnQoYmFzZVBhbmVsKTsKLQotICAgIC8vIGNvbnRlbnQgZm9yIHNlY29uZCBjb2x1bW4KLSAgICBjcmVhdGVXU0RMRWxlbWVudENvbnRlbnQoYmFzZVBhbmVsKTsKLQotICAgIHNldENvbnRyb2woYmFzZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgZ3JvdXAgb2YgcmFkaW8gYnV0dG9ucyBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIFdTREwgZWxlbWVudC4KLSAgICogVGhlIGZpdmUgdHBlcyBhcmU6IHBvcnQsIGJpbmRpbmcsIHBvcnRUeXBlLCBvcGVyYXRpb24gYW5kIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBjb250YWluZXIuIAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlV1NETEVsZW1lbnRUeXBlQ29udGVudChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIGEgZ3JvdXAKLSAgICBHcm91cCB3c2RsVHlwZUdyb3VwID0gbmV3IEdyb3VwKHBhcmVudCwgU1dULlNIQURPV19FVENIRURfSU4pOwotICAgIHdzZGxUeXBlR3JvdXAuc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9HUk9VUF9URVhUX1RZUEUpOwotICAgIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IGZhbHNlOwotICAgIHdzZGxUeXBlR3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHdzZGxUeXBlR3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICB3c2RsUG9ydEJ1dHRvbiA9IG5ldyBCdXR0b24od3NkbFR5cGVHcm91cCwgU1dULlJBRElPKTsKLSAgICB3c2RsUG9ydEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX1JBRElPX1BPUlQpOwotICAgIHdzZGxQb3J0QnV0dG9uLnNldERhdGEoIndzZGxQb3J0QnV0dG9uIik7Ci0gICAgd3NkbFBvcnRCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOwotICAgIHdzZGxQb3J0QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBQb3J0QnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIoKSk7Ci0KLSAgICB3c2RsQmluZGluZ0J1dHRvbiA9IG5ldyBCdXR0b24od3NkbFR5cGVHcm91cCwgU1dULlJBRElPKTsKLSAgICB3c2RsQmluZGluZ0J1dHRvbi5zZXREYXRhKCJ3c2RsQmluZGluZ0J1dHRvbiIpOwotICAgIHdzZGxCaW5kaW5nQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfUkFESU9fQklORElORyk7Ci0gICAgd3NkbEJpbmRpbmdCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICB3c2RsQmluZGluZ0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgQmluZGluZ0J1dHRvblNlbGVjdGlvbkxpc3RlbmVyKCkpOwotCi0gICAgd3NkbFBvcnRUeXBlQnV0dG9uID0gbmV3IEJ1dHRvbih3c2RsVHlwZUdyb3VwLCBTV1QuUkFESU8pOwotICAgIHdzZGxQb3J0VHlwZUJ1dHRvbi5zZXREYXRhKCJ3c2RsUG9ydFR5cGVCdXR0b24iKTsKLSAgICB3c2RsUG9ydFR5cGVCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19QT1JUX1RZUEUpOwotICAgIHdzZGxQb3J0VHlwZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHdzZGxQb3J0VHlwZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgUG9ydFR5cGVCdXR0b25TZWxlY3Rpb25MaXN0ZW5lcigpKTsKLQotICAgIHdzZGxPcGVyYXRpb25CdXR0b24gPSBuZXcgQnV0dG9uKHdzZGxUeXBlR3JvdXAsIFNXVC5SQURJTyk7Ci0gICAgd3NkbE9wZXJhdGlvbkJ1dHRvbi5zZXREYXRhKCJ3c2RsT3BlcmF0aW9uQnV0dG9uIik7Ci0gICAgd3NkbE9wZXJhdGlvbkJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX1JBRElPX09QRVJBVElPTik7Ci0gICAgd3NkbE9wZXJhdGlvbkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHdzZGxPcGVyYXRpb25CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IE9wZXJhdGlvbkJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyKCkpOwotCi0gICAgd3NkbE1lc3NhZ2VCdXR0b24gPSBuZXcgQnV0dG9uKHdzZGxUeXBlR3JvdXAsIFNXVC5SQURJTyk7Ci0gICAgd3NkbE1lc3NhZ2VCdXR0b24uc2V0RGF0YSgid3NkbE1lc3NhZ2VCdXR0b24iKTsKLSAgICB3c2RsTWVzc2FnZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX1JBRElPX01FU1NBR0UpOwotICAgIHdzZGxNZXNzYWdlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgd3NkbE1lc3NhZ2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IE1lc3NhZ2VCdXR0b25TZWxlY3Rpb25MaXN0ZW5lcigpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBwYW5lbCB0byBjYXB0dXJlIHRoZSBuYW1lLCBuYW1lc3BhY2UgYW5kIHBhcmVudCBvZiBhbgotICAgKiBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBjb250YWluZXIuIAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlV1NETEVsZW1lbnRDb250ZW50KENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBjcmVhdGUgYSBncm91cGluZyB3aXRoIDIgY29sdW1ucywgb25lIGZvciBsYWJlbHMgYW5kIHRoZW90aGVyIGZvciBmaWVsZHMKLSAgICBDb21wb3NpdGUgZmllbGRDb2x1bW4gPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgbGF5b3V0Lm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IGZhbHNlOwotICAgIGZpZWxkQ29sdW1uLnNldExheW91dChsYXlvdXQpOwotICAgIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZmllbGRDb2x1bW4uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIC8vIFRoZSBXU0RMIGVsZW1lbnQgbmFtZSBsYWJlbAotICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGZpZWxkQ29sdW1uLCBTV1QuTEVGVCk7Ci0gICAgbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9OQU1FKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgLy8gVGhlIFdTREwgZWxlbWVudCBuYW1lIGZpZWxkCi0gICAgbmFtZUNvbWJvID0gbmV3IENvbWJvKGZpZWxkQ29sdW1uLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIG5hbWVDb21iby5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIG5hbWVDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgTmFtZVNlbGVjdGlvbkxpc3RlbmVyKCkpOwotICAgIC8vbmFtZVRleHQgPSBuZXcgVGV4dChmaWVsZENvbHVtbiwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIC8vZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIC8vZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICAvL2RhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgLy9kYXRhLndpZHRoSGludCA9IDUwOwotICAgIC8vbmFtZVRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAvL25hbWVUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBUZXh0Qm94TGlzdGVuZXIoKSk7Ci0KLSAgICAvLyBUaGUgV1NETCBlbGVtZW50IG5hbWVzcGFjZSBsYWJlbAotICAgIGxhYmVsID0gbmV3IExhYmVsKGZpZWxkQ29sdW1uLCBTV1QuTEVGVCk7Ci0gICAgbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9OQU1FU1BBQ0UpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICAvLyBUaGUgV1NETCBlbGVtZW50IG5hbWVzcGFjZSBmaWVsZAotICAgIG5hbWVzcGFjZVRleHQgPSBuZXcgVGV4dChmaWVsZENvbHVtbiwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZGF0YS53aWR0aEhpbnQgPSA1MDsKLSAgICBuYW1lc3BhY2VUZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgbmFtZXNwYWNlVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgVGV4dEJveExpc3RlbmVyKCkpOwotICAgIG5hbWVzcGFjZVRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotCi0gICAgLy8gVGhlIFdTREwgZWxlbWVudCBwYXJlbnQgbGFiZWwKLSAgICBsYWJlbCA9IG5ldyBMYWJlbChmaWVsZENvbHVtbiwgU1dULkxFRlQpOwotICAgIGxhYmVsLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfTEFCRUxfUEFSRU5UKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgLy8gVGhlIFdTREwgZWxlbWVudCBwYXJlbnQgZmllbGQKLSAgICAvLyAgICBwYXJlbnRDb21ibyA9IG5ldyBDb21ibyhmaWVsZENvbHVtbiwgU1dULlJFQURfT05MWSk7Ci0gICAgLy8gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIC8vICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgLy8gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICAvLyAgICBwYXJlbnRDb21iby5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIHBhcmVudG5hbWVUZXh0ID0gbmV3IFRleHQoZmllbGRDb2x1bW4sIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGRhdGEud2lkdGhIaW50ID0gNTA7Ci0gICAgcGFyZW50bmFtZVRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBwYXJlbnRuYW1lVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgVGV4dEJveExpc3RlbmVyKCkpOwotICAgIHBhcmVudG5hbWVUZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsKLSAgfQotCi0gIC8qKgotICAgKiBBbHdheXMgcmV0dXJuIHRydWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlbnQgd2hlbiBkZWZhdWx0IHNlbGVjdGlvbiBvY2N1cnMgaW4gdGhlIGNvbnRyb2wuCi0gICAqIEBwYXJhbSBlIC0gYW4gZXZlbnQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VsZWN0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAge30KLQotICAvKioKLSAgICogSGFuZGxlcyB0aGUgaW5jbHVkZVdTREwgY2hlY2tib3guCi0gICAqIFNlbnQgd2hlbiBzZWxlY3Rpb24gb2NjdXJzIGluIHRoZSBjb250cm9sLiAKLSAgICogQHBhcmFtIGUgLSBhbiBldmVudCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZWxlY3Rpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIHt9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZWxlbWVudCBuYW1lLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbGVtZW50TmFtZSgpCi0gIHsKLSAgICBpbnQgc2VsZWN0aW9uID0gbmFtZUNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgaWYoc2VsZWN0aW9uICE9IC0xKQotICAgIHsgIAotICAgICAgcmV0dXJuIG5hbWVDb21iby5nZXRJdGVtKHNlbGVjdGlvbik7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2VUZXh0LmdldFRleHQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFyZW50TmFtZSgpCi0gIHsKLSAgICAvL3JldHVybiBwYXJlbnRDb21iby5nZXRJdGVtKHBhcmVudENvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOwotICAgIHJldHVybiBwYXJlbnRuYW1lVGV4dC5nZXRUZXh0KCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICBpZiAod3NkbEJpbmRpbmdCdXR0b24uZ2V0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgcmV0dXJuIEJJTkRJTkc7Ci0gICAgfQotICAgIGVsc2UgaWYgKHdzZGxNZXNzYWdlQnV0dG9uLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIHJldHVybiBNRVNTQUdFOwotICAgIH0KLSAgICBlbHNlIGlmICh3c2RsT3BlcmF0aW9uQnV0dG9uLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIHJldHVybiBPUEVSQVRJT047Ci0gICAgfQotICAgIGVsc2UgaWYgKHdzZGxQb3J0QnV0dG9uLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIHJldHVybiBQT1JUOwotICAgIH0KLSAgICBlbHNlIGlmICh3c2RsUG9ydFR5cGVCdXR0b24uZ2V0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgcmV0dXJuIFBPUlRUWVBFOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRWxlbWVudChTdHJpbmcgdHlwZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBwYXJlbnQpCi0gIHsKLSAgICBpZiAocG9ydHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXNldEVsZW1lbnRzKCk7Ci0gICAgfQotICAgIGlmICh0eXBlLmVxdWFscyhQT1JUKSkKLSAgICB7Ci0gICAgICBwb3J0cy5hZGQobmV3IFdTRExFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50KSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzSWdub3JlQ2FzZShPUEVSQVRJT04pKQotICAgIHsKLSAgICAgIG9wZXJhdGlvbnMuYWRkKG5ldyBXU0RMRWxlbWVudChuYW1lLCBuYW1lc3BhY2UsIHBhcmVudCkpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmVxdWFsc0lnbm9yZUNhc2UoQklORElORykpCi0gICAgewotICAgICAgYmluZGluZ3MuYWRkKG5ldyBXU0RMRWxlbWVudChuYW1lLCBuYW1lc3BhY2UsIHBhcmVudCkpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmVxdWFsc0lnbm9yZUNhc2UoUE9SVFRZUEUpKQotICAgIHsKLSAgICAgIHBvcnR0eXBlcy5hZGQobmV3IFdTRExFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50KSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzSWdub3JlQ2FzZShNRVNTQUdFKSkKLSAgICB7Ci0gICAgICBtZXNzYWdlcy5hZGQobmV3IFdTRExFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50KSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVzZXRFbGVtZW50cygpCi0gIHsKLSAgICBwb3J0cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBvcGVyYXRpb25zID0gbmV3IFZlY3RvcigpOwotICAgIGJpbmRpbmdzID0gbmV3IFZlY3RvcigpOwotICAgIHBvcnR0eXBlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBtZXNzYWdlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBuYW1lQ29tYm8uY2xlYXJTZWxlY3Rpb24oKTsKLSAgICBuYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBsaXN0IGJveAotICAgKi8KLSAgY2xhc3MgV29ya3NwYWNlQnV0dG9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGxpc3QgYm94Ci0gICAqLwotICBjbGFzcyBCcm93c2VCdXR0b25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB2YWx1ZSB0byB0aGUgbGlzdCBib3gKLSAgICovCi0gIGNsYXNzIFNlYXJjaFVERElCdXR0b25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotICB9Ci0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGZpbGUgZmllbGQuCi0gICAqLwotICBjbGFzcyBUZXh0Qm94TGlzdGVuZXIgaW1wbGVtZW50cyBNb2RpZnlMaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXIjbW9kaWZ5VGV4dChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgICB7Ci0gICAgICBnZXRDb250YWluZXIoKS51cGRhdGVCdXR0b25zKCk7Ci0KLSAgICB9Ci0KLSAgfQotICBwcml2YXRlIGNsYXNzIFdTRExFbGVtZW50Ci0gIHsKLSAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZTsKLSAgICBwcml2YXRlIFN0cmluZyBwYXJlbnQ7Ci0KLSAgICBwdWJsaWMgV1NETEVsZW1lbnQoU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBwYXJlbnQpCi0gICAgewotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpCi0gICAgewotICAgICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudE5hbWUoKQotICAgIHsKLSAgICAgIHJldHVybiBwYXJlbnQ7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dQYWdlI3NldFZpc2libGUoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKQotICB7Ci0gICAgcmVzZXRFbGVtZW50cygpOwotICAgIHN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7Ci0gICAgaWYgKHZpc2libGUpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICBXU0RMUmVhZGVyIHJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgICAgICBEZWZpbml0aW9uIGRlZkVsZW0gPSByZWFkZXIucmVhZFdTREwoKChWYWxpZGF0aW9uV2l6YXJkKSBnZXRXaXphcmQoKSkuZ2V0V1NETEZpbGUoKSk7Ci0gICAgICAgIFFOYW1lIGRlZlFOYW1lID0gZGVmRWxlbS5nZXRRTmFtZSgpOwotICAgICAgICBTdHJpbmcgZGVmbmFtZSA9ICIiOwotICAgICAgICBpZiAoZGVmUU5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGRlZm5hbWUgPSBkZWZRTmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZGVmRWxlbS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQotICAgICAgICAvLyByZWdpc3RlciB0aGUgcG9ydHMKLSAgICAgICAgTWFwIHNlcnZtYXAgPSBkZWZFbGVtLmdldFNlcnZpY2VzKCk7Ci0gICAgICAgIGlmIChzZXJ2bWFwICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBDb2xsZWN0aW9uIHNlcnZzID0gc2Vydm1hcC52YWx1ZXMoKTsKLSAgICAgICAgICBpZiAoc2VydnMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJdGVyYXRvciBzZXJ2SXRlciA9IHNlcnZzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoc2Vydkl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgc2Vydkl0ZXIubmV4dCgpOwotICAgICAgICAgICAgICBTdHJpbmcgc2Vydm5hbWUgPSBzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0KLSAgICAgICAgICAgICAgTWFwIHBvcnRtYXAgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0gICAgICAgICAgICAgIGlmIChwb3J0bWFwICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb2xsZWN0aW9uIHBvcnRzID0gcG9ydG1hcC52YWx1ZXMoKTsKLSAgICAgICAgICAgICAgICBpZiAocG9ydHMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBJdGVyYXRvciBwb3J0SXRlciA9IHBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICB3aGlsZSAocG9ydEl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgcG9ydEl0ZXIubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHBvcnQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KFZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UuUE9SVCwgbmFtZSwgbmFtZXNwYWNlLCBzZXJ2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIEJpbmRpbmdzCi0gICAgICAgIE1hcCBiaW5kaW5nbWFwID0gZGVmRWxlbS5nZXRCaW5kaW5ncygpOwotICAgICAgICBpZiAoYmluZGluZ21hcCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQ29sbGVjdGlvbiBiaW5kaW5ncyA9IGJpbmRpbmdtYXAudmFsdWVzKCk7Ci0gICAgICAgICAgaWYgKGJpbmRpbmdzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSXRlcmF0b3IgYmluZEl0ZXIgPSBiaW5kaW5ncy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGJpbmRJdGVyLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGJpbmRJdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgIGFkZEVsZW1lbnQoVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5CSU5ESU5HLCBuYW1lLCBuYW1lc3BhY2UsIGRlZm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBQb3J0VHlwZXMgYW5kIE9wZXJhdGlvbnMKLSAgICAgICAgTWFwIHBvcnR0eXBlbWFwID0gZGVmRWxlbS5nZXRQb3J0VHlwZXMoKTsKLSAgICAgICAgaWYgKHBvcnR0eXBlbWFwICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBDb2xsZWN0aW9uIHBvcnR0eXBlcyA9IHBvcnR0eXBlbWFwLnZhbHVlcygpOwotICAgICAgICAgIGlmIChwb3J0dHlwZXMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJdGVyYXRvciBwb3J0dHlwZUl0ZXIgPSBwb3J0dHlwZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChwb3J0dHlwZUl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQb3J0VHlwZSBwb3J0dHlwZSA9IChQb3J0VHlwZSkgcG9ydHR5cGVJdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIHBvcnR0eXBlbmFtZSA9IHBvcnR0eXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgIGFkZEVsZW1lbnQoVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5QT1JUVFlQRSwgcG9ydHR5cGVuYW1lLCBuYW1lc3BhY2UsIGRlZm5hbWUpOwotCi0gICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBPcGVyYXRpb25zCi0gICAgICAgICAgICAgIExpc3Qgb3BlcmF0aW9ucyA9IHBvcnR0eXBlLmdldE9wZXJhdGlvbnMoKTsKLSAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbnMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEl0ZXJhdG9yIG9wZXJJdGVyID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChvcGVySXRlci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9wZXJJdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5PUEVSQVRJT04sIG5hbWUsIG5hbWVzcGFjZSwgcG9ydHR5cGVuYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgTWFwIG1lc3NhZ2VtYXAgPSBkZWZFbGVtLmdldE1lc3NhZ2VzKCk7Ci0gICAgICAgIGlmIChtZXNzYWdlbWFwICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBDb2xsZWN0aW9uIG1lc3NhZ2VzID0gbWVzc2FnZW1hcC52YWx1ZXMoKTsKLSAgICAgICAgICBpZiAobWVzc2FnZXMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJdGVyYXRvciBtZXNzSXRlciA9IG1lc3NhZ2VzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAobWVzc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgbWVzc0l0ZXIubmV4dCgpOwotICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYWRkRWxlbWVudChWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLk1FU1NBR0UsIG5hbWUsIG5hbWVzcGFjZSwgZGVmbmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG5hbWVDb21iby5yZW1vdmVBbGwoKTsKLSAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICAgIGludCBudW1FbGVtcyA9IHBvcnRzLnNpemUoKTsKLSAgICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBwb3J0cy50b0FycmF5KG5ldyBXU0RMRWxlbWVudFtudW1FbGVtc10pOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVsZW1zOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lQ29tYm8uYWRkKGVsZW1zW2ldLmdldE5hbWUoKSwgaSk7Ci0gICAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lQ29tYm8uc2VsZWN0KDApOwotICAgICAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0UGFyZW50TmFtZSgpKTsKLQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB3c2RsUG9ydEJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgIHdzZGxCaW5kaW5nQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgIHdzZGxNZXNzYWdlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgIHdzZGxPcGVyYXRpb25CdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgd3NkbFBvcnRUeXBlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZSBXU0RMIGZpbGUgaXMgbm90IHZhbGlkLgotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzZXRFbGVtZW50cygpOwotICAgIH0KLQotICB9Ci0KLSAgY2xhc3MgUG9ydEJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGUpOwotCi0gICAgfQotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBuYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOwotICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBpbnQgbnVtRWxlbXMgPSBwb3J0cy5zaXplKCk7Ci0gICAgICBXU0RMRWxlbWVudFtdIGVsZW1zID0gKFdTRExFbGVtZW50W10pIHBvcnRzLnRvQXJyYXkobmV3IFdTRExFbGVtZW50W251bUVsZW1zXSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVsZW1zOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG5hbWVDb21iby5hZGQoZWxlbXNbaV0uZ2V0TmFtZSgpLCBpKTsKLSAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVDb21iby5zZWxlY3QoMCk7Ci0gICAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldFBhcmVudE5hbWUoKSk7Ci0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0gIGNsYXNzIEJpbmRpbmdCdXR0b25TZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICB3aWRnZXRTZWxlY3RlZChlKTsKLQotICAgIH0KLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgbmFtZUNvbWJvLnJlbW92ZUFsbCgpOwotICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoIiIpOwotICAgICAgaW50IG51bUVsZW1zID0gYmluZGluZ3Muc2l6ZSgpOwotICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBiaW5kaW5ncy50b0FycmF5KG5ldyBXU0RMRWxlbWVudFtudW1FbGVtc10pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbGVtczsgaSsrKQotICAgICAgewotICAgICAgICBuYW1lQ29tYm8uYWRkKGVsZW1zW2ldLmdldE5hbWUoKSwgaSk7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lQ29tYm8uc2VsZWN0KDApOwotICAgICAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXRQYXJlbnROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgfQotICBjbGFzcyBQb3J0VHlwZUJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGUpOwotCi0gICAgfQotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBuYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOwotICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBpbnQgbnVtRWxlbXMgPSBwb3J0dHlwZXMuc2l6ZSgpOwotICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBwb3J0dHlwZXMudG9BcnJheShuZXcgV1NETEVsZW1lbnRbbnVtRWxlbXNdKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRWxlbXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgbmFtZUNvbWJvLmFkZChlbGVtc1tpXS5nZXROYW1lKCksIGkpOwotICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZUNvbWJvLnNlbGVjdCgwKTsKLSAgICAgICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0UGFyZW50TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgfQotCi0gIH0KLSAgY2xhc3MgT3BlcmF0aW9uQnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0KLSAgICB9Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIG5hbWVDb21iby5yZW1vdmVBbGwoKTsKLSAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIGludCBudW1FbGVtcyA9IG9wZXJhdGlvbnMuc2l6ZSgpOwotICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBvcGVyYXRpb25zLnRvQXJyYXkobmV3IFdTRExFbGVtZW50W251bUVsZW1zXSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVsZW1zOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG5hbWVDb21iby5hZGQoZWxlbXNbaV0uZ2V0TmFtZSgpLCBpKTsKLSAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVDb21iby5zZWxlY3QoMCk7Ci0gICAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldFBhcmVudE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICB9Ci0gIGNsYXNzIE1lc3NhZ2VCdXR0b25TZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICB3aWRnZXRTZWxlY3RlZChlKTsKLQotICAgIH0KLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgbmFtZUNvbWJvLnJlbW92ZUFsbCgpOwotICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoIiIpOwotICAgICAgaW50IG51bUVsZW1zID0gbWVzc2FnZXMuc2l6ZSgpOwotICAgICAgV1NETEVsZW1lbnRbXSBlbGVtcyA9IChXU0RMRWxlbWVudFtdKSBtZXNzYWdlcy50b0FycmF5KG5ldyBXU0RMRWxlbWVudFtudW1FbGVtc10pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbGVtczsgaSsrKQotICAgICAgewotICAgICAgICBuYW1lQ29tYm8uYWRkKGVsZW1zW2ldLmdldE5hbWUoKSwgaSk7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lQ29tYm8uc2VsZWN0KDApOwotICAgICAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXRQYXJlbnROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgfQotCi0gIGNsYXNzIE5hbWVTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICB3aWRnZXRTZWxlY3RlZChlKTsKLQotICAgIH0KLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgaW50IHNlbGVjdGlvbiA9ICgoQ29tYm8pIGUuZ2V0U291cmNlKCkpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBTdHJpbmcgdHlwZSA9IGdldFR5cGUoKTsKLSAgICAgIFdTRExFbGVtZW50IGVsZW0gPSBudWxsOwotICAgICAgaWYgKHR5cGUuZXF1YWxzKFBPUlQpKQotICAgICAgewotICAgICAgICBlbGVtID0gKFdTRExFbGVtZW50KSBwb3J0cy5nZXQoc2VsZWN0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKEJJTkRJTkcpKQotICAgICAgewotICAgICAgICBlbGVtID0gKFdTRExFbGVtZW50KSBiaW5kaW5ncy5nZXQoc2VsZWN0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKFBPUlRUWVBFKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbSA9IChXU0RMRWxlbWVudCkgcG9ydHR5cGVzLmdldChzZWxlY3Rpb24pOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoT1BFUkFUSU9OKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbSA9IChXU0RMRWxlbWVudCkgb3BlcmF0aW9ucy5nZXQoc2VsZWN0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKE1FU1NBR0UpKQotICAgICAgewotICAgICAgICBlbGVtID0gKFdTRExFbGVtZW50KSBtZXNzYWdlcy5nZXQoc2VsZWN0aW9uKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGVsZW0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW0uZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KGVsZW0uZ2V0UGFyZW50TmFtZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZFdTRExQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA1OTMxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5kaWFsb2dzLlNlbGVjdFNpbmdsZUZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci0KLS8qKgotICogV2l6YXJkIHBhZ2UgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIAotICogV1NETCBkb2N1bWVudCBmb3IgdGhlIFdlYiBzZXJ2aWNlLgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLQotcHVibGljIGNsYXNzIFZhbGlkYXRpb25XaXphcmRXU0RMUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotewotCi0gIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB3c2RsaW52YWxpZCA9IGZhbHNlOwotICAvKioKLSAgICogQWNjZXNzIHRvIHRoZSBpbmNsdWRlV1NETCBmbGFnLiAgCi0gICAqLwotICBwcm90ZWN0ZWQgQnV0dG9uIGluY2x1ZGVXU0RMQnV0dG9uOwotCi0gIC8qKgotICAgKiBBY2Nlc3MgdG8gdGhlIHdzZGwgZG9jdW1lbnQgZ3JvdXAuCi0gICAqLwotICBwcm90ZWN0ZWQgR3JvdXAgZG9jdW1lbnRHcm91cDsKLSAgcHJvdGVjdGVkIFRleHQgZG9jdW1lbnRMb2NhdGlvblRleHQ7Ci0gIHByb3RlY3RlZCBDb21ibyBmaWxlRmllbGQ7Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3Rpb246IHNlbGVjdGlvbiBpbiB0aGUgUmVzb3VyY2UgTmF2aWdhdG9yIHZpZXcuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbldpemFyZFdTRExQYWdlKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIHN1cGVyKCJWYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2UiKTsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgICB0aGlzLnNldFRpdGxlKE1lc3NhZ2VzLldTRExfUEFHRV9TRUxFQ1RfV1NETF9GSUxFTkFNRV9IRUFESU5HKTsKLSAgICB0aGlzLnNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLldTRExfUEFHRV9TRUxFQ1RfV1NETF9GSUxFTkFNRV9FWFBMKTsKLSAgfQotCi0gIC8qKgotICAgKiBBbHdheXMgcmV0dXJucyB0cnVlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQYWdlQ29tcGxldGUoKQotICB7Ci0gICAgaWYgKGluY2x1ZGVXU0RMRmlsZSgpKQotICAgIHsKLQotICAgICAgaWYgKGZpbGVGaWVsZC5nZXRUZXh0KCkgPT0gbnVsbCB8fCBmaWxlRmllbGQuZ2V0VGV4dCgpLmVxdWFscygiIikgfHwgd3NkbGludmFsaWQpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKgotICAgKiBDcmVhdGVzIHRoZSB0b3AgbGV2ZWwgY29udHJvbCBmb3IgdGhpcyBwYWdlIHVuZGVyIHRoZSBnaXZlbiBwYXJlbnQKLSAgICogY29tcG9zaXRlLiBJbXBsZW1lbnRvcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBjcmVhdGVkCi0gICAqIGNvbnRyb2wgY2FuIGJlIGFjY2Vzc2VkIHZpYSBnZXRDb250cm9sCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50IC0gdGhlIHBhcmVudCBjb21wb3NpdGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBiYXNlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBiYXNlLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLSAgICBHcmlkRGF0YSBkYXRhOwotCi0gICAgLy8gYWRkIGluY2x1ZGVXU0RMIGZsYWcKLSAgICBpbmNsdWRlV1NETEJ1dHRvbiA9IG5ldyBCdXR0b24oYmFzZSwgU1dULkNIRUNLKTsKLSAgICBpbmNsdWRlV1NETEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfUEFHRV9JTkNMVURFX1dTRExfQlVUVE9OKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBpbmNsdWRlV1NETEJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIGluY2x1ZGVXU0RMQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIGluY2x1ZGVXU0RMQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0KLSAgICAvLyBjcmVhdGUgYSBXU0RMIGRvY3VtZW50IGdyb3VwCi0gICAgZG9jdW1lbnRHcm91cCA9IG5ldyBHcm91cChiYXNlLCBTV1QuU0hBRE9XX0VUQ0hFRF9JTik7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBkb2N1bWVudEdyb3VwLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBkb2N1bWVudEdyb3VwLnNldExheW91dChsYXlvdXQpOwotICAgIGRvY3VtZW50R3JvdXAuc2V0VmlzaWJsZShmYWxzZSk7Ci0KLSAgICBjcmVhdGVEb2N1bWVudEdyb3VwQ29udGVudHMoZG9jdW1lbnRHcm91cCk7Ci0KLSAgICBzZXRDb250cm9sKGJhc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRG9jdW1lbnRHcm91cENvbnRlbnRzKENvbXBvc2l0ZSBkb2N1bWVudEdyb3VwKQotICB7Ci0gICAgLy9yYWRpbyBidXR0b25zJyBjb250YWluZXIKLSAgICBDb21wb3NpdGUgYmFzZVBhbmVsID0gbmV3IENvbXBvc2l0ZShkb2N1bWVudEdyb3VwLCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICBsYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gZmFsc2U7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBiYXNlUGFuZWwuc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBiYXNlUGFuZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIENvbXBvc2l0ZSBncm91cDEgPSBuZXcgQ29tcG9zaXRlKGJhc2VQYW5lbCwgU1dULk5PTkUpOwotICAgIGdyb3VwMS5zZXRGb250KGdldEZvbnQoKSk7Ci0gICAgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgZ3JvdXAxLnNldExheW91dChsYXlvdXQpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGdyb3VwMS5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgTGFiZWwgZG9jdW1lbnRMYWJlbCA9IG5ldyBMYWJlbChncm91cDEsIFNXVC5MRUZUKTsKLSAgICBkb2N1bWVudExhYmVsLnNldFRleHQoTWVzc2FnZXMuV1NETF9QQUdFX0lOQ0xVREVfV1NETF9MQUJFTCk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZG9jdW1lbnRMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIC8qKgotCSAqIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGJhc2VQYW5lbCwgU1dULkxFRlQpOyBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0JICogZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsgZGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7Ci0JICogbGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkgKi8KLSAgICBmaWxlRmllbGQgPSBuZXcgQ29tYm8oZ3JvdXAxLCBTV1QuRFJPUF9ET1dOKTsKLSAgICBTdHJpbmdbXSB3c2RsbG9jYXRpb25zID0gKChWYWxpZGF0aW9uV2l6YXJkKSBnZXRXaXphcmQoKSkuZ2V0V1NETExvY2F0aW9ucygpOwotICAgIGlmKHdzZGxsb2NhdGlvbnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgbnVtbG9jcyA9IHdzZGxsb2NhdGlvbnMubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bWxvY3M7IGkrKykKLSAgICAgIHsKLSAgICAgIAlmaWxlRmllbGQuYWRkKHdzZGxsb2NhdGlvbnNbaV0pOwotICAgICAgfQotICAgIH0KLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotICAgIGRhdGEud2lkdGhIaW50ID0gMzA7Ci0gICAgZmlsZUZpZWxkLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgZmlsZUZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBGaWxlRmllbGRMaXN0ZW5lcigpKTsKLQotICAgIExhYmVsIHdzZGxMYWJlbCA9IG5ldyBMYWJlbChncm91cDEsIFNXVC5MRUZUKTsKLSAgICB3c2RsTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5XU0RMX1BBR0VfVkFMSURfV1NETF9MQUJFTCk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZG9jdW1lbnRMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgLy8gZG9jdW1lbnRMb2NhdGlvblRleHQgPSBuZXcgVGV4dChkb2N1bWVudEdyb3VwLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgLy8gZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIC8vIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgLy8gZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICAvLyBkYXRhLndpZHRoSGludCA9IDMwOwotICAgIC8vIGRvY3VtZW50TG9jYXRpb25UZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICBDb21wb3NpdGUgZ3JvdXAgPSBuZXcgQ29tcG9zaXRlKGJhc2VQYW5lbCwgU1dULk5PTkUpOwotICAgIGdyb3VwLnNldEZvbnQoZ2V0Rm9udCgpKTsKLSAgICBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBncm91cC5zZXRMYXlvdXQobGF5b3V0KTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBncm91cC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgQnV0dG9uIHdvcmtzcGFjZUJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXAsIFNXVC5QVVNIKTsKLSAgICB3b3Jrc3BhY2VCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5XU0RMX1BBR0VfV09SS0JFTkNIX0JVVFRPTik7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgd29ya3NwYWNlQnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgd29ya3NwYWNlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBXb3Jrc3BhY2VCdXR0b25MaXN0ZW5lcigpKTsKLQotICAgIEJ1dHRvbiBicm93c2VCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUFVTSCk7Ci0gICAgYnJvd3NlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuV1NETF9QQUdFX0JST1dTRV9CVVRUT04pOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGJyb3dzZUJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIGJyb3dzZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgQnJvd3NlQnV0dG9uTGlzdGVuZXIoKSk7Ci0KLSAgICAvLyBCdXR0b24gc2VhcmNoVURESUJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXAsIFNXVC5QVVNIKTsKLSAgICAvLyBzZWFyY2hVRERJQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuKCJfVUlfV0laQVJEX1ZfU0VBUkNIX1VERElfQlVUVE9OIikpOwotICAgIC8vIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICAvLyBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIC8vIHNlYXJjaFVERElCdXR0b24uc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAvLyBzZWFyY2hVRERJQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWFyY2hVRERJQnV0dG9uTGlzdGVuZXIoKSk7Ci0KLSAgICByZXR1cm4gZG9jdW1lbnRHcm91cDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGluY2x1ZGVXU0RMRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gaW5jbHVkZVdTRExCdXR0b24uZ2V0U2VsZWN0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdTRExGaWxlKCkKLSAgewotICAgIHJldHVybiBmaWxlRmllbGQuZ2V0VGV4dCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsd2F5cyByZXR1cm4gdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogU2VudCB3aGVuIGRlZmF1bHQgc2VsZWN0aW9uIG9jY3VycyBpbiB0aGUgY29udHJvbC4KLSAgICogCi0gICAqIEBwYXJhbSBlIC0KLSAgICogICAgICAgICAgICBhbiBldmVudCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZWxlY3Rpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICB7fQotCi0gIC8qKgotICAgKiBIYW5kbGVzIHRoZSBpbmNsdWRlV1NETCBjaGVja2JveC4gU2VudCB3aGVuIHNlbGVjdGlvbiBvY2N1cnMgaW4gdGhlCi0gICAqIGNvbnRyb2wuCi0gICAqIAotICAgKiBAcGFyYW0gZSAtCi0gICAqICAgICAgICAgICAgYW4gZXZlbnQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VsZWN0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICB7Ci0gICAgaWYgKGUud2lkZ2V0ID09IGluY2x1ZGVXU0RMQnV0dG9uKQotICAgIHsKLSAgICAgIGlmIChpbmNsdWRlV1NETEJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkKLSAgICAgIHsKLSAgICAgICAgZG9jdW1lbnRHcm91cC5zZXRWaXNpYmxlKHRydWUpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBkb2N1bWVudEdyb3VwLnNldFZpc2libGUoZmFsc2UpOwotICAgICAgfQotICAgICAgZ2V0Q29udGFpbmVyKCkudXBkYXRlQnV0dG9ucygpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdTRExJbnZhbGlkKCkKLSAgewotICAgIHdzZGxpbnZhbGlkID0gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGxpc3QgYm94Ci0gICAqLwotICBjbGFzcyBXb3Jrc3BhY2VCdXR0b25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBTZWxlY3RTaW5nbGVGaWxlRGlhbG9nIGRpYWxvZyA9IG5ldyBTZWxlY3RTaW5nbGVGaWxlRGlhbG9nKGdldFNoZWxsKCksIHNlbGVjdGlvbiwgZmFsc2UpOwotICAgICAgZGlhbG9nLmFkZEZpbHRlckV4dGVuc2lvbnMobmV3IFN0cmluZ1tdIHsgIi53c2RsIiB9KTsKLSAgICAgIGRpYWxvZy5jcmVhdGUoKTsKLSAgICAgIGRpYWxvZy5nZXRTaGVsbCgpLnNldFRleHQoTWVzc2FnZXMuV1NETF9QQUdFX0ZJTEVfU0hFTExfVEVYVCk7Ci0gICAgICBkaWFsb2cuc2V0VGl0bGUoTWVzc2FnZXMuV1NETF9QQUdFX0ZJTEVfVElUTEUpOwotICAgICAgZGlhbG9nLnNldE1lc3NhZ2UoTWVzc2FnZXMuV1NETF9QQUdFX0ZJTEVfREVTQ1JJUFRJT04pOwotICAgICAgZGlhbG9nLnNldFRpdGxlSW1hZ2UoV1NJVUlQbHVnaW4uZ2V0UmVzb3VyY2VJbWFnZShSZXNvdXJjZS5WQUxJREFURV9XU0lfTE9HRklMRV9XSVopKTsKLSAgICAgIAotICAgICAgaW50IHJlc3VsdCA9IGRpYWxvZy5vcGVuKCk7Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gV2luZG93Lk9LKQotICAgICAgewotICAgICAgICBJRmlsZSBjdXJyZW50SUZpbGUgPSBkaWFsb2cuZ2V0RmlsZSgpOwotICAgICAgICBpZiAoY3VycmVudElGaWxlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmaWxlRmllbGQuYWRkKGN1cnJlbnRJRmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCksIDApOwotICAgICAgICAgIGZpbGVGaWVsZC5zZWxlY3QoMCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBsaXN0IGJveAotICAgKi8KLSAgY2xhc3MgQnJvd3NlQnV0dG9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAge30KLQotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgRmlsZURpYWxvZyBkaWFsb2cgPSBuZXcgRmlsZURpYWxvZyhnZXRTaGVsbCgpKTsKLSAgICAgIGRpYWxvZy5zZXRGaWx0ZXJFeHRlbnNpb25zKG5ldyBTdHJpbmdbXSB7ICIqLndzZGwiIH0pOwotICAgICAgU3RyaW5nIHNlbGVjdGlvbiA9IGRpYWxvZy5vcGVuKCk7Ci0gICAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZpbGVGaWVsZC5hZGQoc2VsZWN0aW9uLCAwKTsKLSAgICAgICAgZmlsZUZpZWxkLnNlbGVjdCgwKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBsaXN0IGJveAotICAgKi8KLSAgLy8gY2xhc3MgU2VhcmNoVURESUJ1dHRvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgLy8gewotICAvLyAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIC8vICB7fQotICAvLwotICAvLyAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgLy8gIHsKLSAgLy8gICAgU3RyaW5nIHRpdGxlID0gIkluZm9ybWF0aW9uIjsKLSAgLy8gICAgU3RyaW5nIG1lc3NhZ2UgPSAiVGhlIGNob3NlbiBvcGVyYXRpb24gaXMgbm90IGN1cnJlbnRseSBhdmFpbGFibGUuIjsKLSAgLy8gICAgTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgdGl0bGUsIG1lc3NhZ2UpOwotICAvLyAgfQotICAvL30KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBmaWxlIGZpZWxkLgotICAgKi8KLSAgY2xhc3MgRmlsZUZpZWxkTGlzdGVuZXIgaW1wbGVtZW50cyBNb2RpZnlMaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXIjbW9kaWZ5VGV4dChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgICB7Ci0gICAgICB3c2RsaW52YWxpZCA9IGZhbHNlOwotICAgICAgZ2V0Q29udGFpbmVyKCkudXBkYXRlQnV0dG9ucygpOwotCi0gICAgfQotCi0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU0OTAyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvYXBhY2hlL3hlcmNlcy8qKiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94bWwvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49InN1bi9taXNjL0JBU0U2NERlY29kZXIiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49InN1bi9taXNjL0JBU0U2NEVuY29kZXIiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49InN1bi9taXNjL0NoYXJhY3RlckVuY29kZXIiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49InN1bi9taXNjL0NoYXJhY3RlckRlY29kZXIiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49InN1bi9uZXQvd3d3L01lc3NhZ2VIZWFkZXIiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWIxOTlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLXRlbXAuZm9sZGVyCi1idWlsZC54bWwKLXdzaS5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2MGMxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDcwMzJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jV2VkIE1hciAyOSAwNDowODoyNiBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5MGI0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1dlZCBNYXIgMjkgMDQ6MDg6MjYgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODc3N2E3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVfUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2k7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDUucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJV9QUk9WSURFUl9OQU1FCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWc7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuc2NoZW1hO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5kb2N1bWVudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC52YWxpZGF0ZS53c2RsO3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lOyBidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDIuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLnVkZGk0ajtidW5kbGUtdmVyc2lvbj0iWzIuMC40LDIuMS4wKSIsCi0gb3JnLmFwYWNoZS5heGlzO2J1bmRsZS12ZXJzaW9uPSJbMS4zLjAsMi4wLjApIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDQuMC4wKSIsCi0gb3JnLmFwYWNoZS54ZXJjZXM7YnVuZGxlLXZlcnNpb249IlsyLjguMCwzLjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2YxOTFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zb3VyY2UuLiA9IHNyYy8KLWphcnMuY29tcGlsZS5vcmRlciA9IC4KLW91dHB1dC4uID0gYmluLwotc3JjLmluY2x1ZGVzID0gY29tcG9uZW50LnhtbCxcCi0gICAgICAgICAgICAgICBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvY29tcG9uZW50LnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9jb21wb25lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGEyY2FmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9jb21wb25lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Y29tcG9uZW50ICB4bWxucz0iaHR0cDovL2VjbGlwc2Uub3JnL3d0cC9yZWxlbmcvdG9vbHMvY29tcG9uZW50LW1vZGVsIiBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3NpIj48ZGVzY3JpcHRpb24gdXJsPSIiPjwvZGVzY3JpcHRpb24+PGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+PC9jb21wb25lbnQtZGVwZW5kcz48cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpIiBmcmFnbWVudD0iZmFsc2UiLz48cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpIiBmcmFnbWVudD0iZmFsc2UiLz48L2NvbXBvbmVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMmU5NmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1fUExVR0lOX05BTUUgICA9IFdTSSBDb25mb3JtYW5jZSBUb29scwotX1BST1ZJREVSX05BTUUgPSBFY2xpcHNlLm9yZwotX1dTSV9WQUxJREFUT0VfTkFNRSA9IFdTLUkgVmFsaWRhdG9yCi1fVEVTVF9BU1NFUlRJT05fRE9DVU1FTlRTX05BTUUgPSBUZXN0IEFzc2VydGlvbiBEb2N1bWVudHMKLV9SRVBPUlRfQVJUSUZBQ1RfVFlQRVNfTkFNRSA9IFJlcG9ydCBBcnRpZmFjdCBUeXBlcwotX1VJX1dTRExfV1NJX1ZBTElEQVRPUiA9IFdTREwgV1MtSSBWYWxpZGF0b3IKLV9VSV9XU0lfRlJBTUVXT1JLX1VERElfVkFMSURBVE9SID0gV1MtSSBGcmFtZXdvcmsgVURESSBWYWxpZGF0b3IKLV9VSV9XU0lfRlJBTUVXT1JLX1dTRExfVkFMSURBVE9SID0gV1MtSSBGcmFtZXdvcmsgV1NETFZhbGlkYXRvcgotX1VJX1dTSV9GUkFNRVdPUktfTUVTU0FHRV9WQUxJREFUT1IgPSBXUy1JIEZyYW1ld29yayBNZXNzYWdlIFZhbGlkYXRvcgotX1VJX1dTSV9GUkFNRVdPUktfRU5WRUxPUEVfVkFMSURBVE9SID0gV1MtSSBGcmFtZXdvcmsgRW52ZWxvcGUgVmFsaWRhdG9yCi1fVUlfV1NJX0JQX1RBRF9WRVJTSU9OUyA9IFdTLUkgQmFzaWMgUHJvZmlsZSBUQUQgVmVyc2lvbnMKLV9VSV9XU0lfQlBfUkVQT1JUX0FSVElGQUNUUyA9IFdTLUkgQmFzaWMgUHJvZmlsZSBSZXBvcnQgQXJ0aWZhY3RzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIzZTJlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS0tPiAKLQotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9IndzaXZhbGlkYXRvciIgbmFtZT0iJV9XU0lfVkFMSURBVE9FX05BTUUiIHNjaGVtYT0ic2NoZW1hL3dzaXZhbGlkYXRvci5leHNkIi8+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJ0YWRzIiBuYW1lPSIlX1RFU1RfQVNTRVJUSU9OX0RPQ1VNRU5UU19OQU1FIiBzY2hlbWE9InNjaGVtYS90YWRzLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InJlcG9ydEFydGlmYWN0VHlwZXMiIG5hbWU9IiVfUkVQT1JUX0FSVElGQUNUX1RZUEVTX05BTUUiIHNjaGVtYT0ic2NoZW1hL3JlcG9ydEFydGlmYWN0VHlwZXMuZXhzZCIvPgotICAgICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJ3c2RsV1NJVmFsaWRhdG9yIgotICAgICAgICAgbmFtZT0iJV9VSV9XU0RMX1dTSV9WQUxJREFUT1IiCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5leHR2YWxpZGF0b3IiPgotICAgICAgPGV4dHZhbGlkYXRvcgotICAgICAgICAgICAgbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnZhbGlkYXRlLndzZGwuV1NETFZhbGlkYXRvciI+Ci0gICAgICA8L2V4dHZhbGlkYXRvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgICBpZD0idWRkaVZhbGlkYXRvciIKLSAgICAgICAgICAgbmFtZT0iJV9VSV9XU0lfRlJBTUVXT1JLX1VERElfVkFMSURBVE9SIgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzaS53c2l2YWxpZGF0b3IiPgotICAgICAgICA8d3NpdmFsaWRhdG9yCi0gICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpLlVERElWYWxpZGF0b3JJbXBsIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgICAgaWQ9IndzZGxWYWxpZGF0b3IiCi0gICAgICAgICAgIG5hbWU9IiVfVUlfV1NJX0ZSQU1FV09SS19XU0RMX1ZBTElEQVRPUiIKLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2kud3NpdmFsaWRhdG9yIj4KLSAgICAgICAgPHdzaXZhbGlkYXRvcgotICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbC5XU0RMVmFsaWRhdG9ySW1wbCIvPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIGlkPSJtZXNzYWdlVmFsaWRhdG9yIgotICAgICAgICAgICBuYW1lPSIlX1VJX1dTSV9GUkFNRVdPUktfTUVTU0FHRV9WQUxJREFUT1IiCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NpLndzaXZhbGlkYXRvciI+Ci0gICAgICAgIDx3c2l2YWxpZGF0b3IKLSAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2UuTWVzc2FnZVZhbGlkYXRvckltcGwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgICBpZD0iZW52ZWxvcGVWYWxpZGF0b3IiCi0gICAgICAgICAgIG5hbWU9IiVfVUlfV1NJX0ZSQU1FV09SS19FTlZFTE9QRV9WQUxJREFUT1IiCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NpLndzaXZhbGlkYXRvciI+Ci0gICAgICAgIDx3c2l2YWxpZGF0b3IKLSAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkVudmVsb3BlVmFsaWRhdG9ySW1wbCIvPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIGlkPSJicFRhZHMiCi0gICAgICAgICAgIG5hbWU9IiVfVUlfV1NJX0JQX1RBRFMiCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NpLnRhZHMiPgotICAgICAgICA8dGFkCi0gICAgICAgICAgIG5hbWU9IkJhc2ljIFByb2ZpbGUgVGVzdCBBc3NlcnRpb25zIgotICAgICAgICAgICB2ZXJzaW9uPSIxLjEuMCIvPgotICAgICAgICA8dGFkCi0gICAgICAgICAgIG5hbWU9IkJhc2ljIFByb2ZpbGUgMS4xIFRlc3QgQXNzZXJ0aW9ucyIKLSAgICAgICAgICAgdmVyc2lvbj0iMS4xLjAiLz4KLSAgICAgICAgPHRhZAotICAgICAgICAgICBuYW1lPSJTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUgWzEuMF0gKHdpdGggQmFzaWMgUHJvZmlsZSBbMS4xXSkgVGVzdCBBc3NlcnRpb25zIgotICAgICAgICAgICB2ZXJzaW9uPSIxLjAuMCIvPgotICAgICAgICA8dGFkCi0gICAgICAgICAgIG5hbWU9IkF0dGFjaG1lbnRzIFByb2ZpbGUgWzEuMF0gKHdpdGggQmFzaWMgUHJvZmlsZSBbMS4xXSBhbmQgU2ltcGxlIFNvYXAgQmluZGluZyBQcm9maWxlIFsxLjBdKSBUZXN0IEFzc2VydGlvbnMiCi0gICAgICAgICAgIHZlcnNpb249IjEuMC4wIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgICAgaWQ9ImJwUmVwb3J0QXJ0aWZhY3RzIgotICAgICAgICAgICBuYW1lPSIlX1VJX1dTSV9CUF9SRVBPUlRfQVJUSUZBQ1RTIgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzaS5yZXBvcnRBcnRpZmFjdFR5cGVzIj4KLSAgICAgICAgPHJlcG9ydEFydGlmYWN0VHlwZQotICAgICAgICAgICBhcnRpZmFjdFR5cGU9Im1lc3NhZ2UiLz4KLSAgIDwvZXh0ZW5zaW9uPiAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NjaGVtYS9yZXBvcnRBcnRpZmFjdFR5cGVzLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3JlcG9ydEFydGlmYWN0VHlwZXMuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JiMTI4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3JlcG9ydEFydGlmYWN0VHlwZXMuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NpIiBpZD0icmVwb3J0QXJ0aWZhY3RUeXBlcyIgbmFtZT0iUmVwb3J0IEFydGlmYWN0IFR5cGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSByZXBvcnQgYXJ0aWZhY3QgdHlwZSBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gZGVub3RlIGFydGlmYWN0IHR5cGVzIHRoYXQgc2hvdWxkIGJlIG91dHB1dCB0byB0aGUgbG9nIGZpbGUuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InJlcG9ydEFydGlmYWN0VHlwZSIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJyZXBvcnRBcnRpZmFjdFR5cGUiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJhcnRpZmFjdFR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFdUUCAyLjAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgcmVwb3J0IGFydGlmYWN0IHR5cGUgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSZsdDtleHRlbnNpb24KLSAgICAgICAgaWQ9JnF1b3Q7YnBSZXBvcnRBcnRpZmFjdHMmcXVvdDsKLSAgICAgICAgbmFtZT0mcXVvdDslX1VJX1dTSV9CUF9SRVBPUlRfQVJUSUZBQ1RTJnF1b3Q7Ci0gICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC53c2kucmVwb3J0QXJ0aWZhY3RzJnF1b3Q7Jmd0OwotICAgICAmbHQ7cmVwb3J0QXJ0aWZhY3RUeXBlCi0gICAgICAgIGFydGlmYWN0VHlwZT0mcXVvdDttZXNzYWdlJnF1b3Q7LyZndDsKLSZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgTm8gQVBJIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV4dGVuc2lvbiBwb2ludC4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgTm8gaW1wbGVtZW50YXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NjaGVtYS90YWRzLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3RhZHMuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRhYmZkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3RhZHMuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3Qud3NpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NpIiBpZD0idGFkcyIgbmFtZT0iVGVzdCBBc3NlcnRpb24gRG9jdW1lbnRzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSB0YWRzIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byBkZW5vdGUgYWRkaXRpb25hbCBUZXN0IEFzc2VydGlvbiBEb2N1bWVudHMgdGhhdCB0aGV5IGNhbiBoYW5kbGUuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgKG5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZSkKLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0idGFkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InRhZCI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgKG5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZSkKLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBXVFAgMi4wCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIFRBRCB2ZXJzaW9uIGNvbnRyaWJ1dGlvbjoKLSZsdDtwcmUmZ3Q7Ci0mbHQ7ZXh0ZW5zaW9uCi0gICAgICAgIGlkPSZxdW90O2JwVGFkVmVyc2lvbnMmcXVvdDsKLSAgICAgICAgbmFtZT0mcXVvdDslX1VJX1dTSV9CUF9UQURfVkVSU0lPTlMmcXVvdDsKLSAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzaS50YWRfdmVyc2lvbnMmcXVvdDsmZ3Q7Ci0gICAgICZsdDt0YWQKLSAgICAgICAgbmFtZT0mcXVvdDtCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyZxdW90OwotICAgICAgICB2ZXJzaW9uPSZxdW90OzEuMS4wJnF1b3Q7LyZndDsKLSZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgTm8gQVBJIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV4dGVuc2lvbiBwb2ludC4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgTm8gaW1wbGVtZW50YXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NjaGVtYS93c2l2YWxpZGF0b3IuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zY2hlbWEvd3NpdmFsaWRhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyODA1OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NjaGVtYS93c2l2YWxpZGF0b3IuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJic3Aub3JnLmVjbGlwc2Uud3N0LndzaSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0iYnNwLm9yZy5lY2xpcHNlLndzdC53c2kiIGlkPSJ3c2l2YWxpZGF0b3IiIG5hbWU9IldTLUkgVmFsaWRhdG9yIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBXUy1JIFZhbGlkYXRvciBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gY29udHJpYnV0ZSBhIHZhbGlkYXRvciB0aGF0IGNhbiB2YWxpZGF0ZSBkaWZmZXJlbnQgV1MtSSBQcm9maWxlcy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAobm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlKQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3c2l2YWxpZGF0b3IiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0id3NpdmFsaWRhdG9yIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAobm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlKQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFdUUCAyLjAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgV1MtSSBWYWxpZGF0b3IgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSZsdDtleHRlbnNpb24KLSAgICAgICAgaWQ9JnF1b3Q7bWVzc2FnZVZhbGlkYXRvciZxdW90OwotICAgICAgICBuYW1lPSZxdW90OyVfVUlfV1NJX0ZSQU1FV09SS19NRVNTQUdFX1ZBTElEQVRPUiZxdW90OwotICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NpLnZhbGlkYXRvciZxdW90OyZndDsKLSAgICAgJmx0O3dzaV92YWxpZGF0b3IKLSAgICAgICAgY2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZS5NZXNzYWdlVmFsaWRhdG9ySW1wbCZxdW90Oy8mZ3Q7Ci0mbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBzdXBwbGllZCBjbGFzcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtjb2RlJmd0Owotb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZS5NZXNzYWdlVmFsaWRhdG9ySW1wbAotJmx0Oy9jb2RlJmd0OwotQ29udHJpYnV0ZXMgV1MtSSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgQmFzaWMgUHJvZmlsZSB2YWxpZGF0aW9uIG9mIG1lc3NhZ2VzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVByZWZlcmVuY2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJUHJlZmVyZW5jZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRiOGQyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJUHJlZmVyZW5jZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWw7Ci0KLS8qKgotICogV1MtSSB0ZXN0IHRvb2xzIHByb3BlcnR5LgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBXU0lQcmVmZXJlbmNlcwotewotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXBsaWFuY2VMZXZlbCA9ICIiOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhZGZpbGUgPSAiIjsKLSAgCi0gIC8qKgotICAgKiAgQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NJUHJlZmVyZW5jZXMoKQotICB7Ci0JY29tcGxpYW5jZUxldmVsID0gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5XQVJOX05PTl9XU0k7Ci0JdGFkZmlsZSA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuREVGQVVMVF9BU1NFUlRJT05fRklMRTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFdTLUkgY29tcGxpYW5jZSBsZXZlbC4KLSAgICogQHJldHVybiB0aGUgV1MtSSBjb21wbGlhbmNlIGxldmVsLgotICAgKiBAc2VlICNzZXRDb21wbGlhbmNlTGV2ZWwKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcGxpYW5jZUxldmVsKCkKLSAgewotICAgIHJldHVybiBjb21wbGlhbmNlTGV2ZWw7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBXUy1JIGNvbXBsaWFuY2UgbGV2ZWwuCi0gICAqIEBwYXJhbSBjb21wbGlhbmNlIHRoZSBXUy1JIGNvbXBsaWFuY2UgbGV2ZWwuCi0gICAqIEBzZWUgI2dldENvbXBsaWFuY2VMZXZlbAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tcGxpYW5jZUxldmVsKFN0cmluZyBjb21wbGlhbmNlKQotICB7Ci0gICAgdGhpcy5jb21wbGlhbmNlTGV2ZWwgPSBjb21wbGlhbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyBmaWxlLgotICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgQmFzaWMgUHJvZmlsZSBUZXN0IEFzc2VydGlvbnMgZmlsZS4KLSAgICogQHNlZSAjc2V0VEFERmlsZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUQURGaWxlKCkKLSAgewotICAgIHJldHVybiB0YWRmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgbG9jYXRpb24gb2YgdGhlIEJhc2ljIFByb2ZpbGUgVGVzdCBBc3NlcnRpb25zIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlIHRoZSBsb2NhdGlvbiBvZiB0aGUgQmFzaWMgUHJvZmlsZSBUZXN0IEFzc2VydGlvbnMgZmlsZS4KLSAgICogQHNlZSAjZ2V0VEFERmlsZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VEFERmlsZShTdHJpbmcgZmlsZSkKLSAgewotICAgIHRoaXMudGFkZmlsZSA9IGZpbGU7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViY2ZmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotLyoqCi0gKiBXUy1JIHRlc3QgdG9vbCBwcm9wZXJ0aWVzIHNwZWNpZmljIGZvciBFY2xpcHNlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMgZXh0ZW5kcyBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzCi17Ci0gLyoqCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1Byb3BlcnRpZXMjY2hlY2tXU0lQcmVmZXJlbmNlcyhqYXZhLmxhbmcuU3RyaW5nKQotICAqLwotICBwdWJsaWMgc3RhdGljIFdTSVByZWZlcmVuY2VzIGNoZWNrV1NJUHJlZmVyZW5jZXMoU3RyaW5nIGZpbGV1cmkpCi0gIHsKLQkvLyBDYWNoZSB0aGUgV1MtSSB0YWRzLgotCWNhY2hlVEFERmlsZXMoKTsKLQkKLSAgICBXU0lQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG5ldyBXU0lQcmVmZXJlbmNlcygpOwotICAgIC8vIFJlbW92ZSBmaWxlOiBhbmQgYW55IHNsYXNoZXMgZnJvbSB0aGUgZmlsZXVyaS4gCi0gICAgLy8gRWNsaXBzZSdzIHJlc29sdXRpb24gbWVjaGFuaXNtIG5lZWRzIHRvIHN0YXJ0IHdpdGggdGhlIGRyaXZlLgotICAgIFN0cmluZyB1cmlTdHIgPSB0cmltVVJJKGZpbGV1cmkpOwotCi0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgQVBjb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lBUENvbnRleHQoKTsKLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCBTU0JQY29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAgICAKLSAgICBJRmlsZVtdIGZpbGVzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kRmlsZXNGb3JMb2NhdGlvbihuZXcgUGF0aCh1cmlTdHIpKTsKLSAgICBpZiAoZmlsZXMgIT0gbnVsbCAmJiBmaWxlcy5sZW5ndGggPT0gMSkKLSAgICB7Ci0gICAgICAvL2NoZWNrIHByb2plY3QgbGV2ZWwgY29ucGxpYW5jZQotICAgICAgSVByb2plY3QgcHJvamVjdCA9IGZpbGVzWzBdLmdldFByb2plY3QoKTsKLSAgICAgIAotICAgICAgaWYgKEFQY29udGV4dC5wcm9qZWN0U3RvcE5vbldTSUNvbXBsaWFuY2VzKHByb2plY3QpKQotICAgICAgewotICAgICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKEFQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0gICAgICB9IAotICAgICAgZWxzZSBpZiAoQVBjb250ZXh0LnByb2plY3RXYXJuTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoQVBfQVNTRVJUSU9OX0ZJTEUpOwotICAgICAgICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFNTQlBjb250ZXh0LnByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoU1NCUF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU1NCUGNvbnRleHQucHJvamVjdFdhcm5Ob25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoREVGQVVMVF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBJZiB3ZSBjYW4ndCBvYnRhaW4gdGhlIHByb2plY3QgcHJlZmVyZW5jZSB1c2UgdGhlIGdsb2JhbCBwcmVmZXJlbmNlLgotICAgICAgU3RyaW5nIEFQbGV2ZWwgPSBBUGNvbnRleHQuZ2V0UGVyc2lzdGVudFdTSUNvbXBsaWFuY2UoKTsKLSAgICAgIFN0cmluZyBTU0JQbGV2ZWwgPSBTU0JQY29udGV4dC5nZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSgpOwotICAgICAgaWYoQVBsZXZlbC5lcXVhbHMoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKSkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShBUF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICAgICAgfQotICAgICAgZWxzZSBpZihBUGxldmVsLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kpKQotICAgICAgewotICAgICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKEFQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0gICAgIH0KLSAgICAgaWYoU1NCUGxldmVsLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpKQotICAgICB7Ci0gICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLSAgICAgfQotICAgICBlbHNlIGlmKFNTQlBsZXZlbC5lcXVhbHMoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKSkKLSAgICAgewotICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSk7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoREVGQVVMVF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmVmZXJlbmNlczsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGNhY2hlVEFERmlsZXMoKQotICB7Ci0JICBTdHJpbmcgcmVzdWx0QVAgPSBjYWNoZUZpbGUoQVBfQVNTRVJUSU9OX0ZJTEUpOwotCSAgaWYocmVzdWx0QVAgIT0gbnVsbCkKLQkgIHsKLQkJICBBUF9BU1NFUlRJT05fRklMRSA9IHJlc3VsdEFQOwotCSAgfQotCSAgCi0JICBTdHJpbmcgcmVzdWx0U1NCUCA9IGNhY2hlRmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLQkgIGlmKHJlc3VsdFNTQlAgIT0gbnVsbCkKLQkgIHsKLQkJICBTU0JQX0FTU0VSVElPTl9GSUxFID0gcmVzdWx0U1NCUDsKLQkgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgY2FjaGVGaWxlKFN0cmluZyB1cmkpCi0gIHsKLQkgIFVSSVJlc29sdmVyIHJlc29sdmVyID0gZ2V0VVJJUmVzb2x2ZXIoKTsKLQkgIFN0cmluZyByZXNvbHZlZFVyaSA9IHJlc29sdmVyLnJlc29sdmUoIiIsIG51bGwsIHVyaSk7Ci0JICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZVBoeXNpY2FsTG9jYXRpb24oIiIsIG51bGwsIHJlc29sdmVkVXJpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIHRvIHVzZSBmb3IgV1MtSSB2YWxpZGFpdG9uLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBVUkkgcmVzb2x2ZXIgdG8gdXNlIGZvciBXUy1JIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFVSSVJlc29sdmVyIGdldFVSSVJlc29sdmVyKCkKLSAgewotCSAgcmV0dXJuIFVSSVJlc29sdmVyUGx1Z2luLmNyZWF0ZVJlc29sdmVyKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc1BsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTBkYWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotCi0vKioKLSAqIFRoZSBXUy1JIHRlc3QgdG9vbHMgcGx1Z2luLgotICogCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotCi1wdWJsaWMgY2xhc3MgV1NJVGVzdFRvb2xzUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIHByaXZhdGUgc3RhdGljIFBsdWdpbiBpbnN0YW5jZTsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBQTFVHSU5fUFJPUEVSVElFUyA9ICJ3c2l2YWxpZGF0ZSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NpIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVE9SX0VYVF9JRCA9IFBMVUdJTl9JRCArICIud3NpdmFsaWRhdG9yIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFEX1ZFUlNJT05fRVhUX0lEID0gUExVR0lOX0lEICsgIi50YWRzIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVQT1JUX0FSVElGQUNUX1RZUEVTX0VYVF9JRCA9IFBMVUdJTl9JRCArICIucmVwb3J0QXJ0aWZhY3RUeXBlcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9UQURfTkFNRSA9ICJuYW1lIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX1RBRF9WRVJTSU9OID0gInZlcnNpb24iOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQVJUSUZBQ1RfVFlQRSA9ICJhcnRpZmFjdFR5cGUiOwotCi0gIC8qIEhvbGRzIHZhbGlkYXRvcnMgcmVhZCBmcm9tIHRoZSBwbGF0Zm9ybSByZWdpc3RyeS4gIExhenkgaW5pdGlhbGl6ZWQgaW4KLSAgICogY29tcHV0ZVZhbGlkYXRvcnMoKS4gICovCi0gIHByaXZhdGUgQmFzZVZhbGlkYXRvciB2YWxpZGF0b3JzW107Ci0KLSAgLyogSG9sZHMgYXJyYXlzIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgVGVzdCBBc3NlcnRpb24gZG9jdW1lbnQgKFRBRCkKLSAgICogdmVyc2lvbnMgcmVhZCBmcm9tIHRoZSBwbGF0Zm9ybSByZWdpc3RyeS4gIEVhY2ggYXJyYXkgaGFzIHR3byBlbGVtZW50czoKLSAgICogICAwOiB0aGUgVEFEIG5hbWUKLSAgICogICAxOiB0aGUgVEFEIHZlcnNpb24gc3RyaW5nCi0gICAqIExhenkgaW5pdGlhbGl6ZWQgaW4gY29tcHV0ZVRBRFZlcnNpb25zKCkuICAqLwotICBwcml2YXRlIFN0cmluZyB0YWRWZXJzaW9uc1tdW107Ci0KLSAgLyogSG9sZHMgYXJ0aWZhY3QgdHlwZSBuYW1lcyBmb3IgcmVwb3J0aW5nIHJlYWQgZnJvbSB0aGUgcGxhdGZvcm0gcmVnaXN0cnkuCi0gICAqIExhenkgaW5pdGlhbGl6ZWQgaW4gZ2V0QWxsUmVwb3J0QXJ0aWZhY3RUeXBlcygpLiAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVwb3J0QXJ0aWZhY3RUeXBlc1tdOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3Igd3NpVGVzdFRvb2xzUGx1Z2luLgotICAgKiBAcGFyYW0gZGVzY3JpcHRvciBhbiBJUGx1Z2luRGVzY3JpcHRvciBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NJVGVzdFRvb2xzUGx1Z2luKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotCi0gICAgLy8gc2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeQotICAgV1NJVGVzdFRvb2xzUHJvcGVydGllcy5zZXRFY2xpcHNlQ29udGV4dCh0cnVlKTsKLSAgIC8vcmVzb3VyY2VidW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoUExVR0lOX1BST1BFUlRJRVMpOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRJbnN0YW5jZS4KLSAgICogQHJldHVybiBBYnN0cmFjdFVJUGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFBsdWdpbiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICAgLyoqCi0gICAqIE1ldGhvZCBnZXRQbHVnaW4uCi0gICAqIEByZXR1cm4gV1NJVG9vbHNVdGlsUGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTSVRlc3RUb29sc1BsdWdpbiBnZXRQbHVnaW4oKQotICB7Ci0gICAgcmV0dXJuIChXU0lUZXN0VG9vbHNQbHVnaW4pIGluc3RhbmNlOwotICB9Ci0KLSAgLyogQ29tcHV0ZXMgdGhlIGxpc3Qgb2YgdmFsaWRhdG9ycyBieSBzY2FubmluZyB0aGUgcGxhdGZvcm0gcmVnaXN0cnkuICovCi0gIHByaXZhdGUgQmFzZVZhbGlkYXRvcltdIGNvbXB1dGVWYWxpZGF0b3JzKCkgewotICAgICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAgIElFeHRlbnNpb25Qb2ludCBleHRlbnNpb25Qb2ludCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KAotICAgICAgICAgICAgICBWQUxJREFUT1JfRVhUX0lEKTsKLSAgICAgIElFeHRlbnNpb25bXSBleHRlbnNpb25zID0gZXh0ZW5zaW9uUG9pbnQuZ2V0RXh0ZW5zaW9ucygpOwotICAgICAgQXJyYXlMaXN0IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAvKiBPbmx5IG9uZSB2YWxpZGF0b3IgcGVyIGV4dGVuc2lvbiBwb2ludCAqLwotICAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCB2YWxpZGF0b3JFbGVtZW50ID0gZXh0ZW5zaW9uc1tpXS4KLSAgICAgICAgICAgICAgICAgIGdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpWzBdOwotICAgICAgICAgIEJhc2VWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICB2YWxpZGF0b3IgPSAoQmFzZVZhbGlkYXRvcikgdmFsaWRhdG9yRWxlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEFUVF9DTEFTUyk7Ci0gICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKLSAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVzdWx0cy5hZGQodmFsaWRhdG9yKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAoQmFzZVZhbGlkYXRvcltdKSByZXN1bHRzLnRvQXJyYXkobmV3IEJhc2VWYWxpZGF0b3JbMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEZpbmQgYWxsIHZhbGlkYXRvcnMgZm91bmQgaW4gdGhlIHBsYXRmb3JtIHJlZ2lzdHJ5IGV4dGVuc2lvbiBwb2ludHMKLSAgICogb3JnLmVjbGlwc2Uud3N0LndzaS52YWxpZGF0b3IuCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGVzZSB2YWxpZGF0b3JzCi0gICAqLwotICBwdWJsaWMgQmFzZVZhbGlkYXRvcltdIGdldEJhc2VWYWxpZGF0b3JzKCkgCi0gIHsKLQlpZiAodmFsaWRhdG9ycyA9PSBudWxsKQotCSAgdmFsaWRhdG9ycyA9IGNvbXB1dGVWYWxpZGF0b3JzKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRvcnM7ICAKLSAgfQotCi0gIC8qKgotICAgKiBTY2FuIGFsbCB2YWxpZGF0b3JzIGZvdW5kIGluIHRoZSBwbGF0Zm9ybSByZWdpc3RyeSBmb3Igc3VwcG9ydGVkIGFydGlmYWN0Ci0gICAqIHR5cGVzLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGFydGlmYWN0IHR5cGUgbmFtZXMgKFN0cmluZ3MpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0QXJ0aWZhY3RUeXBlcygpIHsKLSAgICAgIGlmICh2YWxpZGF0b3JzID09IG51bGwpCi0gICAgICAgICBnZXRCYXNlVmFsaWRhdG9ycygpOwotICAgICAgU3RyaW5nIGFydGlmYWN0VHlwZXNbXSA9IG5ldyBTdHJpbmdbdmFsaWRhdG9ycy5sZW5ndGhdOwotICAgICAgCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgYXJ0aWZhY3RUeXBlc1tpXSA9IHZhbGlkYXRvcnNbaV0uZ2V0QXJ0aWZhY3RUeXBlKCk7Ci0gICAgICByZXR1cm4gYXJ0aWZhY3RUeXBlczsKLSAgfQotICAKLSAgLyogQ29tcHV0ZXMgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIFRBRCB2ZXJzaW9ucyBieSBzY2FubmluZyB0aGUgcGxhdGZvcm0gCi0gICAqIHJlZ2lzdHJ5LiAgU2VlIGNvbW1lbnQgZm9yIHRhZFZlcnNpb25zIGluc3QgdmFyIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQotICAgKiByZXR1cm4gdHlwZS4gKi8KLSAgcHJpdmF0ZSBTdHJpbmdbXVtdIGNvbXB1dGVUQURWZXJzaW9ucygpIHsKLSAgICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgICBJRXh0ZW5zaW9uUG9pbnQgZXh0ZW5zaW9uUG9pbnQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludCgKLSAgICAgICAgICAgICAgVEFEX1ZFUlNJT05fRVhUX0lEKTsKLSAgICAgIElFeHRlbnNpb25bXSBleHRlbnNpb25zID0gZXh0ZW5zaW9uUG9pbnQuZ2V0RXh0ZW5zaW9ucygpOwotICAgICAgQXJyYXlMaXN0IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHsKLQotICAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCB2ZXJzaW9uRWxlbWVudHNbXSA9IGV4dGVuc2lvbnNbaV0uCi0gICAgICAgICAgICAgICAgICBnZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHZlcnNpb25FbGVtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgICBTdHJpbmcgbmFtZVZlcnNpb25bXSA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICAgICAgICAgIG5hbWVWZXJzaW9uWzBdID0gdmVyc2lvbkVsZW1lbnRzW2pdLmdldEF0dHJpYnV0ZShBVFRfVEFEX05BTUUpOwotICAgICAgICAgICAgICBuYW1lVmVyc2lvblsxXSA9IHZlcnNpb25FbGVtZW50c1tqXS5nZXRBdHRyaWJ1dGUoQVRUX1RBRF9WRVJTSU9OKTsKLSAgICAgICAgICAgICAgcmVzdWx0cy5hZGQobmFtZVZlcnNpb24pOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiAoU3RyaW5nW11bXSkgcmVzdWx0cy50b0FycmF5KG5ldyBTdHJpbmdbMF1bMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEZpbmQgYWxsIFRBRCB2ZXJzaW9ucyBmb3VuZCBpbiB0aGUgcGxhdGZvcm0gcmVnaXN0cnkgZXh0ZW5zaW9uIHBvaW50cwotICAgKiBvcmcuZWNsaXBzZS53c3Qud3NpLnRhZF92ZXJzaW9ucy4KLSAgICogCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgYSB0d28gZWxlbWVudCBhcnJheXMgdGhhdCBkZXNjcmliZXMKLSAgICogb25lIFRBRCB2ZXJzaW9uOgotICAgKiAgIGVsZW1lbnQgMDogdGhlIFRBRCBuYW1lCi0gICAqICAgZWxlbWVudCAxOiB0aGUgVEFEIHZlcnNpb24gc3RyaW5nCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW11bXSBnZXRBbGxUQURWZXJzaW9ucygpIAotICB7Ci0JaWYgKHRhZFZlcnNpb25zID09IG51bGwpCi0JICB0YWRWZXJzaW9ucyA9IGNvbXB1dGVUQURWZXJzaW9ucygpOwotICAgIHJldHVybiB0YWRWZXJzaW9uczsgIAotICB9Ci0gIAotICAvKiBDb21wdXRlcyB0aGUgbGlzdCBvZiBhcnRpZmFjdCB0eXBlcyBieSBzY2FubmluZyB0aGUgcGxhdGZvcm0gcmVnaXN0cnkuICovCi0gIHByaXZhdGUgU3RyaW5nW10gY29tcHV0ZVJlcG9ydEFydGlmYWN0VHlwZXMoKSAKLSAgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUV4dGVuc2lvblBvaW50IGV4dGVuc2lvblBvaW50ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoUkVQT1JUX0FSVElGQUNUX1RZUEVTX0VYVF9JRCk7Ci0gICAgSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMgPSBleHRlbnNpb25Qb2ludC5nZXRFeHRlbnNpb25zKCk7Ci0gICAgQXJyYXlMaXN0IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgcmVwb3J0QXJ0aWZhY3RFbGVtZW50c1tdID0gZXh0ZW5zaW9uc1tpXS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVwb3J0QXJ0aWZhY3RFbGVtZW50cy5sZW5ndGg7IGorKykgCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZXBvcnRBcnRpZmFjdCA9IHJlcG9ydEFydGlmYWN0RWxlbWVudHNbal0uZ2V0QXR0cmlidXRlKEFUVF9BUlRJRkFDVF9UWVBFKTsKLSAgICAgICAgcmVzdWx0cy5hZGQocmVwb3J0QXJ0aWZhY3QpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZ1tdKSByZXN1bHRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBGaW5kIGFsbCByZXBvcnQgYXJ0aWZhY3QgdHlwZXMgdGFncyBmb3VuZCBpbiB0aGUgcGxhdGZvcm0gcmVnaXN0cnkKLSAgICogZXh0ZW5zaW9uIHBvaW50cyBvcmcuZWNsaXBzZS53c3Qud3NpLnJlcG9ydEFydGlmYWN0VHlwZXMuCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGVzZSBTdHJpbmdzCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWxsUmVwb3J0QXJ0aWZhY3RUeXBlcygpIAotICB7Ci0gICAgaWYgKHJlcG9ydEFydGlmYWN0VHlwZXMgPT0gbnVsbCkKLSAgICAgICAgcmVwb3J0QXJ0aWZhY3RUeXBlcyA9IGNvbXB1dGVSZXBvcnRBcnRpZmFjdFR5cGVzKCk7Ci0gICAgcmV0dXJuIHJlcG9ydEFydGlmYWN0VHlwZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzUHJvcGVydGllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzAzMzQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnNSZWFkZXI7Ci0KLS8qKgotICogV1MtSSB0ZXN0IHRvb2xzIHByb3BlcnR5LgotICovCi1wdWJsaWMgY2xhc3MgV1NJVGVzdFRvb2xzUHJvcGVydGllcwotewotICBwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyBpbnN0YWxsVVJMID0gIiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIHRhZGZpbGUgPSAiIjsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBzY2hlbWFEaXIgPSAiY29tbW9uL3NjaGVtYXMvIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgU1NCUF9BU1NFUlRJT05fRklMRSA9ICJodHRwOi8vd3d3LndzLWkub3JnL1Rlc3RpbmcvVG9vbHMvMjAwNS8wMS9TU0JQMTBfQlAxMV9UQURfMS0wLnhtbCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEFQX0FTU0VSVElPTl9GSUxFID0gImh0dHA6Ly93d3cud3MtaS5vcmcvVGVzdGluZy9Ub29scy8yMDA0LzEyL0FQMTBfQlAxMV9TU0JQMTBfVEFELnhtbCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIERFRkFVTFRfQVNTRVJUSU9OX0ZJTEUgPSBBUF9BU1NFUlRJT05fRklMRTsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUT1BfTk9OX1dTSSA9ICIwIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0FSTl9OT05fV1NJID0gIjEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJR05PUkVfTk9OX1dTSSA9ICIyIjsKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBlY2xpcHNlQ29udGV4dCA9IGZhbHNlOwotICBwcm90ZWN0ZWQgc3RhdGljIE1hcCB1cmlUb0Fzc2VydGlvbnNNYXAgPSBuZXcgSGFzaE1hcCgpOwotICBwcm90ZWN0ZWQgc3RhdGljIERvY3VtZW50RmFjdG9yeSBkb2N1bWVudEZhY3RvcnkgPSBudWxsOwotCi0gIC8qKgotICAgKiAgQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgV1NJVGVzdFRvb2xzUHJvcGVydGllcygpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RWNsaXBzZUNvbnRleHQoYm9vbGVhbiBlY2xpcHNlQWN0aXZlKQotICB7Ci0gICAgZWNsaXBzZUNvbnRleHQgPSBlY2xpcHNlQWN0aXZlOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0RWNsaXBzZUNvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIGVjbGlwc2VDb250ZXh0OwotICB9Ci0gIAotICAvKioKLSAgICogQ2hlY2tzIHRoZSBXUy1JIHByZWZlcmVuY2VzIGZvciB0aGUgZ2l2ZW4gZmlsZSBhbmQgcmV0dXJuIHRoZW0gaW4gYQotICAgKiBXU0lQcmVmZXJlbmNlcyBvYmplY3QuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZXVyaSBUaGUgZmlsZSBVUkkgdG8gY2hlY2sgdGhlIFdTLUkgcHJlZmVyZW5jZXMgZm9yLgotICAgKiBAcmV0dXJuIEEgV1NJUHJlZmVyZW5jZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByZWZlcmVuY2UgZm9yIHRoaXMgZmlsZSBVUkkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTSVByZWZlcmVuY2VzIGNoZWNrV1NJUHJlZmVyZW5jZXMoU3RyaW5nIGZpbGV1cmkpCi0gIHsKLSAgCXJldHVybiBuZXcgV1NJUHJlZmVyZW5jZXMoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyBsb2NhdGVkIGF0IHRoZSBnaXZlbiBVUkkuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25zVVJJICB0aGUgbG9jYXRpb24gb2YgdGhlIFRBRC4KLSAgICogQHJldHVybiB0aGUgcHJvZmlsZSBhc3NlcnRpb25zIGxvY2F0ZWQgYXQgdGhlIGdpdmVuIFVSSS4KLSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBQcm9maWxlQXNzZXJ0aW9ucyBnZXRQcm9maWxlQXNzZXJ0aW9ucyhTdHJpbmcgYXNzZXJ0aW9uc1VSSSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0JIFByb2ZpbGVBc3NlcnRpb25zIHJlc3VsdCA9IG51bGw7Ci0JIGlmIChhc3NlcnRpb25zVVJJICE9IG51bGwpCi0JIHsKLQkgICB0cnkKLQkgICB7Ci0JICAgICBpZiAodXJpVG9Bc3NlcnRpb25zTWFwLmNvbnRhaW5zS2V5KGFzc2VydGlvbnNVUkkpKQotCQkgICByZXN1bHQgPSAoUHJvZmlsZUFzc2VydGlvbnMpdXJpVG9Bc3NlcnRpb25zTWFwLmdldChhc3NlcnRpb25zVVJJKTsKLQkgICAgIGVsc2UKLQkgICAgIHsKLQkgICAgICAgLy8gUmVhZCBwcm9maWxlIGFzc2VydGlvbnMKLQkgICAgICAgaWYgKGRvY3VtZW50RmFjdG9yeSA9PSBudWxsKQotCSAgICAJICAgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JICAgICAgIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVyIHByb2ZpbGVBc3NlcnRpb25zUmVhZGVyID0gZG9jdW1lbnRGYWN0b3J5Lm5ld1Byb2ZpbGVBc3NlcnRpb25zUmVhZGVyKCk7Ci0JICAgICAgIHJlc3VsdCA9IHByb2ZpbGVBc3NlcnRpb25zUmVhZGVyLnJlYWRQcm9maWxlQXNzZXJ0aW9ucyhhc3NlcnRpb25zVVJJKTsKLSAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgICAgICB7Ci0gICAgICAgIAkgdXJpVG9Bc3NlcnRpb25zTWFwLnB1dChhc3NlcnRpb25zVVJJLCByZXN1bHQpOwotICAgICAgICAgICB9Ci0JICAgICB9Ci0JICAgfQotCSAgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkgICB7Ci0JCSByZXN1bHQgPSBudWxsOwotCSAgIH0KLQkgfQotCSByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICAvKioKLSAgICogUmVtb3ZlIGZpbGU6IGFuZCBhbnkgc2xhc2hlcyBmcm9tIHRoZSBmaWxldXJpLiAKLSAgICogRWNsaXBzZSdzIHJlc29sdXRpb24gbWVjaGFuaXNtIG5lZWRzIHRvIHN0YXJ0IHdpdGggdGhlIGRyaXZlLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgdHJpbVVSSShTdHJpbmcgZmlsZXVyaSkKLSAgewotICAJU3RyaW5nIHVyaVN0ciA9IGZpbGV1cmk7Ci0gIAkKLSAgICBpZihmaWxldXJpLnN0YXJ0c1dpdGgoImZpbGU6IikpCi0gICAgewotICAgICAgdXJpU3RyID0gZmlsZXVyaS5zdWJzdHJpbmcoNSk7Ci0gICAgfQotICAgIHdoaWxlKHVyaVN0ci5zdGFydHNXaXRoKCIvIikgfHwgdXJpU3RyLnN0YXJ0c1dpdGgoIlxcIikpCi0gICAgewotICAgICAgdXJpU3RyID0gdXJpU3RyLnN1YnN0cmluZygxKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVyaVN0cjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvTWVzc2FnZUFuYWx5emVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvTWVzc2FnZUFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzBkM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL01lc3NhZ2VBbmFseXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQXNzZXJ0aW9uUmVzdWx0c09wdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETFJlZmVyZW5jZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuRmFpbHVyZURldGFpbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLlJlcG9ydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0LkFzc2VydGlvbkVycm9yOwotCi0vKioKLSAqIE1lc3NhZ2VBbmFseXplcgotICogCi0gKiBBIGNsYXNzIHRoYXQgYWxsb3dzIHNpbXBsZSBhY2Nlc3MgdG8gdGhlIFdTLUkgVGVzdCBUb29scyBpbiBvcmRlciB0byBhbmFseXplCi0gKiBtZXNzYWdlcyBpbiBhIGxvZyBmaWxlLgotICovCi0KLXB1YmxpYyBjbGFzcyBNZXNzYWdlQW5hbHl6ZXIKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy53c2kudGVzdC50b29scyI7Ci0gIAotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBUWVBFX1BPUlQgPSAicG9ydCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRZUEVfQklORElORyA9ICJiaW5kaW5nIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVFlQRV9QT1JUVFlQRSA9ICJwb3J0dHlwZSI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRZUEVfT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRZUEVfTUVTU0FHRSA9ICJtZXNzYWdlIjsKLQotICAvLyBUZXN0IHJlc3VsdCBTdHJpbmdzCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgTk9UUEFTU0VEID0gIm5vdFBhc3NlZCI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgV0FSTklORyA9ICJ3YXJuaW5nIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBGQUlMRUQgPSAiZmFpbGVkIjsKLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZmlsZW5hbWU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbGZpbGUgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIGVsZW1lbnRuYW1lID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudG5hbWUgPSBudWxsOwotICBwcm90ZWN0ZWQgYm9vbGVhbiB3c2Rsc3BlY2lmaWVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZSAgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBhc3NlcnRpb253YXJuaW5nczsKLSAgcHJvdGVjdGVkIExpc3QgYXNzZXJ0aW9uZXJyb3JzOwotICBwcm90ZWN0ZWQgV1NJUHJlZmVyZW5jZXMgd3NpUHJlZmVyZW5jZXMgPSBudWxsOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBNZXNzYWdlQW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBsb2cgZmlsZSBuYW1lLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VBbmFseXplcihTdHJpbmcgZmlsZW5hbWUpCi0gIHsKLSAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpOwotCi0gICAgYXNzZXJ0aW9ud2FybmluZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgYXNzZXJ0aW9uZXJyb3JzID0gbmV3IFZlY3RvcigpOwotICAJdGhpcy53c2lQcmVmZXJlbmNlcyA9IFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLmNoZWNrV1NJUHJlZmVyZW5jZXMoZmlsZW5hbWUpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIE1lc3NhZ2VBbmFseXplci4KLSAgICogQHBhcmFtIGZpbGVuYW1lIGxvZyBmaWxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUFuYWx5emVyKFN0cmluZyBmaWxlbmFtZSwgV1NJUHJlZmVyZW5jZXMgd3NpUHJlZmVyZW5jZXMpCi0gIHsKLSAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpOwotCi0gICAgYXNzZXJ0aW9ud2FybmluZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgYXNzZXJ0aW9uZXJyb3JzID0gbmV3IFZlY3RvcigpOwotICAJdGhpcy53c2lQcmVmZXJlbmNlcyA9IHdzaVByZWZlcmVuY2VzOwotICB9Ci0KLSAgcHVibGljIE1lc3NhZ2VBbmFseXplcihTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB3c2RsZmlsZSwgU3RyaW5nIGVsZW1lbnRuYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgcGFyZW50bmFtZSwgU3RyaW5nIHR5cGUpCi0gIHsKLSAgCXRoaXMoZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpKTsKLSAgCXdzZGxzcGVjaWZpZWQgPSB0cnVlOwotICAJCi0gIAl0aGlzLndzZGxmaWxlID0gd3NkbGZpbGUucmVwbGFjZSgnXFwnLCAnLycpOwotICAJdGhpcy5lbGVtZW50bmFtZSA9IGVsZW1lbnRuYW1lOwotICAJdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIAl0aGlzLnBhcmVudG5hbWUgPSBwYXJlbnRuYW1lOwotICAJdGhpcy50eXBlID0gdHlwZTsKLSAgfQotCi0gIHB1YmxpYyBNZXNzYWdlQW5hbHl6ZXIoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgd3NkbGZpbGUsIFN0cmluZyBlbGVtZW50bmFtZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHBhcmVudG5hbWUsIFN0cmluZyB0eXBlLCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcykKLSAgewotICAJdGhpcyhmaWxlbmFtZSwgd3NpUHJlZmVyZW5jZXMpOwotICAJd3NkbHNwZWNpZmllZCA9IHRydWU7Ci0gIAkKLSAgCXRoaXMud3NkbGZpbGUgPSB3c2RsZmlsZS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0gIAl0aGlzLmVsZW1lbnRuYW1lID0gZWxlbWVudG5hbWU7Ci0gIAl0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgCXRoaXMucGFyZW50bmFtZSA9IHBhcmVudG5hbWU7Ci0gIAl0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCB2YWxpZGF0ZUNvbmZvcm1hbmNlLgotICAgKiAKLSAgICogQ2hlY2tzIHRoZSBjb25mb3JtYW5jZSBvZiB0aGUgZ2l2ZW4gbG9nZmlsZSBhZ2FpbnN0IHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUuCi0gICAqIElmIHRoZXJlIGFyZSBjb25mb3JtYW5jZSBwcm9ibGVtcyB0aGV5IGNhbiBiZSBvYnRhaW5lZCBmcm9tIGdldEFzc2VydGlvbkVycm9ycy4KLSAgICogCi0gICAqIEB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlQ29uZm9ybWFuY2UoKSB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLQkgIGlmICh3c2lQcmVmZXJlbmNlcy5nZXRDb21wbGlhbmNlTGV2ZWwoKSAhPSBXU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllcy5JR05PUkVfTk9OX1dTSSkKLQkgIHsKLSAgICAgICAgRG9jdW1lbnRGYWN0b3J5IGRvY3VtZW50RmFjdG9yeSA9IERvY3VtZW50RmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBCYXNpY1Byb2ZpbGVBbmFseXplciB1c2luZyBhbiBhbmFseXplcmNvbmZpZyBvYmplY3QKLSAgICAgICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJjb25maWcgPSBkb2N1bWVudEZhY3RvcnkubmV3QW5hbHl6ZXJDb25maWcoKTsKLSAgICAgICAgaWYod3NkbHNwZWNpZmllZCkKLSAgICAgICAgewotICAgICAgCSAgV1NETFJlZmVyZW5jZSB3c2RscmVmID0gbmV3IFdTRExSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAJICB3c2RscmVmLnNldFdTRExMb2NhdGlvbih3c2RsZmlsZSk7Ci0gICAgICAJCi0gICAgICAJICBXU0RMRWxlbWVudCB3c2RsZWxlbSA9IG5ldyBXU0RMRWxlbWVudEltcGwoKTsKLSAgICAgIAkgIHdzZGxlbGVtLnNldE5hbWUoZWxlbWVudG5hbWUpOwotICAgICAgCSAgd3NkbGVsZW0uc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgICAJICB3c2RsZWxlbS5zZXRQYXJlbnRFbGVtZW50TmFtZShwYXJlbnRuYW1lKTsKLSAgICAgIAkgIHdzZGxlbGVtLnNldFR5cGUodHlwZSk7Ci0gICAgICAJCi0gICAgICAJICB3c2RscmVmLnNldFdTRExFbGVtZW50KHdzZGxlbGVtKTsKLSAgICAgIAkKLSAgICAgIAkgIGFuYWx5emVyY29uZmlnLnNldFdTRExSZWZlcmVuY2Uod3NkbHJlZik7Ci0gICAgICAgIH0KLQotICAgICAgICBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFybyA9IG5ldyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbCgpOwotICAgICAgICBhcm8uc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZShBc3NlcnRpb25SZXN1bHRUeXBlLm5ld0luc3RhbmNlKE5PVFBBU1NFRCkpOwotICAgICAgICBhcm8uc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKGZhbHNlKTsKLSAgICAgICAgYXJvLnNldFNob3dGYWlsdXJlRGV0YWlsKGZhbHNlKTsKLSAgICAgICAgYXJvLnNldFNob3dGYWlsdXJlTWVzc2FnZShmYWxzZSk7Ci0gICAgICAgIGFyby5zZXRTaG93TWVzc2FnZUVudHJ5KGZhbHNlKTsKLQotICAgICAgICAvLyBhbHRob3VnaCB3ZSBkb24ndCB1c2UgYSBzdHlsZXNoZWV0IGZvciBvdXIgYXBwbGljYXRpb24gaXQgaXMgcmVxdWlyZWQgb3IgdGhlIAotICAgICAgICAvLyBXUy1JIHRvb2xzIHdpbGwgZmFpbAotICAgICAgICBBZGRTdHlsZVNoZWV0IGFkZHN0eWxlc2hlZXQgPSBuZXcgQWRkU3R5bGVTaGVldEltcGwoKTsKLQotICAgICAgICBhbmFseXplcmNvbmZpZy5zZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKGFybyk7Ci0gICAgICAgIGFuYWx5emVyY29uZmlnLnNldEFkZFN0eWxlU2hlZXQoYWRkc3R5bGVzaGVldCk7Ci0gICAgICAKLSAgICAgICAgYW5hbHl6ZXJjb25maWcuc2V0Q29ycmVsYXRpb25UeXBlKCJlbmRwb2ludCIpOwotICAJICAgIHRyeQotCQl7Ci0JCSAgYW5hbHl6ZXJjb25maWcuc2V0TG9nTG9jYXRpb24oVVJJRW5jb2Rlci5lbmNvZGUoZmlsZW5hbWUsICJVVEY4IikpOwotCQkgIGFuYWx5emVyY29uZmlnLnNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbih3c2lQcmVmZXJlbmNlcy5nZXRUQURGaWxlKCkpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLQkJewotCQkgIGFuYWx5emVyY29uZmlnLnNldExvZ0xvY2F0aW9uKFVSSUVuY29kZXIuZW5jb2RlKGZpbGVuYW1lLCAiVVRGOCIpKTsKLQkgICAgICBhbmFseXplcmNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oVVJJRW5jb2Rlci5lbmNvZGUod3NpUHJlZmVyZW5jZXMuZ2V0VEFERmlsZSgpLCAiVVRGOCIpKTsKLQkJfQotICAgICAgICAvL2FuYWx5emVyY29uZmlnLnNldExvZ0xvY2F0aW9uKGZpbGVuYW1lKTsKLSAgICAgICAgLy9hbmFseXplcmNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oZ2V0QmFzaWNQcm9maWxlVGVzdEFzc2VydGlvbnNGaWxlKCkpOwotICAgICAgICBhbmFseXplcmNvbmZpZy5zZXRWZXJib3NlT3B0aW9uKGZhbHNlKTsKLSAgICAgIAotCi0gICAgICAgIExpc3QgYW5hbHl6ZXJDb25maWdzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBhbmFseXplckNvbmZpZ3MuYWRkKGFuYWx5emVyY29uZmlnKTsKLSAgICAgICAgLy8gaGVyZSdzIHdoZXJlIHRoZSB2YWxpZGF0aW9uIGFjdHVhbGx5IHN0YXJ0cyBoYXBwZW5pbmcKLSAgICAgICAgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIgYnBhbmFseXplciA9IG5ldyBXU0lCYXNpY1Byb2ZpbGVBbmFseXplcihhbmFseXplckNvbmZpZ3MpOwotCi0gICAgICAgIGJwYW5hbHl6ZXIudmFsaWRhdGVBbGwoKTsKLSAgICAgICAgUmVwb3J0SW1wbCByZXBvcnQgPSAoUmVwb3J0SW1wbCkgYnBhbmFseXplci5nZXRSZXBvcnQoKTsKLQotICAgICAgICBMaXN0IGVudHJpZXMgPSByZXBvcnQuZ2V0RW50cmllcygpOwotCi0gICAgICAgIC8vIGlmIHRoZXJlIGFyZSByZXBvcnQgZW50cmllcyB3ZSBpdGVyYXRlIHRocm91Z2ggdGhlbSBhbmQgYWRkIGFsbAotICAgICAgICAvLyBlcnJvciBhbmQgd2FybmluZyBtZXNzYWdlcyB0byB0aGUgZXJyb3IgbGlzdC4KLSAgICAgICAgaWYgKGVudHJpZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGllbnRyeSA9IGVudHJpZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaWVudHJ5Lmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSkgaWVudHJ5Lm5leHQoKTsKLSAgICAgICAgICAgIE1hcCBhc3NlcnRpb25SZXN1bHRzID0gZW50cnkuZ2V0QXNzZXJ0aW9uUmVzdWx0TGlzdCgpOwotCi0gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uUmVzdWx0cyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJdGVyYXRvciBpYXNzZXJ0aW9uUmVzdWx0cyA9IGFzc2VydGlvblJlc3VsdHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQotICAgICAgICAgICAgICB3aGlsZSAoaWFzc2VydGlvblJlc3VsdHMuaGFzTmV4dCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0IGFyID0gKEFzc2VydGlvblJlc3VsdCkgaWFzc2VydGlvblJlc3VsdHMubmV4dCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyLmdldFJlc3VsdCgpLmVxdWFsc0lnbm9yZUNhc2UoRkFJTEVEKSAmJiAKLSAgICAgICAgICAgICAgICAJd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLlNUT1BfTk9OX1dTSSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgVGVzdEFzc2VydGlvbiB0YSA9IGFyLmdldEFzc2VydGlvbigpOwotICAgICAgICAgICAgICAgICAgaWYgKHRhLmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gYXIuZ2V0RmFpbHVyZURldGFpbExpc3QoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZXJyb3JNZXNzYWdlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlRGV0YWlsSW1wbCBmZGkgPSAoRmFpbHVyZURldGFpbEltcGwpZXJyb3JNZXNzYWdlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50TG9jYXRpb24gZWwgPSBmZGkuZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZWwuZ2V0TGluZU51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gZWwuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgLy9UT0RPOiBnZXQgYXNzZXJ0aW9uIGxvY2F0aW9ucyBpbiB0aGUgbG9nIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb25lcnJvcnMuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFzc2VydGlvbkVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgdGEuZ2V0SWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJNZXNzYWdlIElEICIgKyBlbnRyeS5nZXRSZWZlcmVuY2VJRCgpICsgIjoiICsgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhci5nZXRSZXN1bHQoKS5lcXVhbHNJZ25vcmVDYXNlKEZBSUxFRCkgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAgd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLldBUk5fTk9OX1dTSSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgVGVzdEFzc2VydGlvbiB0YSA9IGFyLmdldEFzc2VydGlvbigpOwotICAgICAgICAgICAgICAgICAgaWYgKHRhLmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gYXIuZ2V0RmFpbHVyZURldGFpbExpc3QoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZXJyb3JNZXNzYWdlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlRGV0YWlsSW1wbCBmZGkgPSAoRmFpbHVyZURldGFpbEltcGwpZXJyb3JNZXNzYWdlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50TG9jYXRpb24gZWwgPSBmZGkuZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZWwuZ2V0TGluZU51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gZWwuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETzogZ2V0IGFzc2VydGlvbiBsb2NhdGlvbnMgaW4gdGhlIGxvZyBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9ud2FybmluZ3MuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFzc2VydGlvbkVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgdGEuZ2V0SWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJNZXNzYWdlIElEICIgKyBlbnRyeS5nZXRSZWZlcmVuY2VJRCgpICsgIjoiICsgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSAKLQkgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lBbmFseXplckV4Y2VwdGlvbigiVGhlIE1lc3NhZ2VBbmFseXplciB3YXMgdW5hYmxlIHRvIHZhbGlkYXRlIHRoZSBnaXZlbiBsb2dmaWxlLiIsIGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUFuYWx5emVyRXhjZXB0aW9uKCJUaGUgTWVzc2FnZUFuYWx5emVyIHdhcyB1bmFibGUgdG8gdmFsaWRhdGUgdGhlIGdpdmVuIGxvZ2ZpbGUuIik7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEFzc2VydGlvbldhcm5pbmdzLgotICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbnkgYXNzZXJ0aW9uIHdhcm5pbmdzIGdlbmVyYXRlZCBmcm9tIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gICAqIEByZXR1cm4gTGlzdAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXNzZXJ0aW9uV2FybmluZ3MoKQotICB7Ci0gICAgcmV0dXJuIGFzc2VydGlvbndhcm5pbmdzOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBc3NlcnRpb25GYWlsdXJlcy4KLSAgICogUmV0dXJucyBhIGxpc3Qgb2YgYW55IGFzc2VydGlvbiBlcnJvcnMgZ2VuZXJhdGVkIGZyb20gdmFsaWRhdGVDb25mb3JtYW5jZS4KLSAgICogQHJldHVybiBMaXN0Ci0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRBc3NlcnRpb25FcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGFzc2VydGlvbmVycm9yczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTRExBbmFseXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTRExBbmFseXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWJmMjMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9hbmFseXplci9XU0RMQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyOwotCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJRW5jb2RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5XU0RMUmVmZXJlbmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5pbXBsLkFkZFN0eWxlU2hlZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5GYWlsdXJlRGV0YWlsSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUmVwb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQuQXNzZXJ0aW9uRXJyb3I7Ci0KLS8qKgotICogV1NETEFuYWx5emVyCi0gKiBUaGUgaW50ZXJmYWNlIHRvIHRoZSBXUy1JIFRlc3QgVG9vbHMgZm9yIGFuYWx5emluZyBhIFdTREwgZmlsZS4gIEFsbG93cyBhIFdTREwgZmlsZSB0byBiZSBhbmFseXplZAotICogYXQgYW55IG9mIHRoZSBmb2xsb3dpbmcgbGV2ZWxzLgotICogIHBvcnQKLSAqICBiaW5kaW5nCi0gKiAgcG9ydFR5cGUKLSAqICBvcGVyYXRpb24KLSAqICBtZXNzYWdlCi0gKi8KLQotcHVibGljIGNsYXNzIFdTRExBbmFseXplcgotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLndzaS50ZXN0LnRvb2xzIjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlQgPSAicG9ydCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkcgPSAiYmluZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlRUWVBFID0gInBvcnRUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0UgPSAibWVzc2FnZSI7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBOT1RQQVNTRUQgPSAibm90UGFzc2VkIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBXQVJOSU5HID0gIndhcm5pbmciOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEZBSUxFRCA9ICJmYWlsZWQiOwotICAKLSAgcHJvdGVjdGVkIExpc3QgYW5hbHl6ZXJDb25maWdzOwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxVUkk7Ci0gIC8vIGFzc2VydGlvbnMgdG8gaWdub3JlIC0gdXNlZCBmb3IgYXNzZXJ0aW9ucyB0aGF0IHRoZSB0b29scyBoYXZlIG5vdCBpbXBsZW1lbnRlZCBwcm9wZXJseSB5ZXQKLSAgLy9wcm90ZWN0ZWQgU3RyaW5nW10gaWdub3JlQXNzZXJ0aW9ucyA9IHsgLyoiV1NJMjEwNSIgLCAiV1NJMjExOSIqL307Ci0gIHByb3RlY3RlZCBMaXN0IGFzc2VydGlvbmVycm9yczsKLSAgcHJvdGVjdGVkIExpc3QgYXNzZXJ0aW9ud2FybmluZ3M7Ci0gIHByb3RlY3RlZCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiBHaXZlbiB0aGUgZmlsZSBuYW1lLCBwYXJlbnQgZWxlbWVudCBuYW1lLCB0aGUgZWxlbWVudCB0byBhbmFseXplIGFuZCB0aGUgdHlwZSBvZiBlbGVtZW50Ci0gICAqIHNldHMgdXAgdGhlIFdTRExBbmFseXplciB0byBhbmFseXplIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gZmlsZU5hbWUgbG9nIGZpbGUgbmFtZS4KLSAgICogQHBhcmFtIHBhcmVudE5hbWUgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSAgYSBuYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBlbGVtZW50TmFtZSB0aGUgZWxlbWVudCB0byBhbmFseXplLgotICAgKiBAcGFyYW0gZWxlbWVudFR5cGUgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB3c2lQcmVmZXJlbmNlcyB0aGUgcHJlZmVyZW5jZXMuCi0gICAqIEB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGFkZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFdTRExBbmFseXplcihTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyBwYXJlbnROYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgZWxlbWVudE5hbWUsIFN0cmluZyBlbGVtZW50VHlwZSwgV1NJUHJlZmVyZW5jZXMgd3NpUHJlZmVyZW5jZXMpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gICAgdGhpcyhmaWxlTmFtZSwgd3NpUHJlZmVyZW5jZXMpOwotICAgIGFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QocGFyZW50TmFtZSwgbmFtZXNwYWNlLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpOwotCi0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEdpdmVuIHRoZSBmaWxlIG5hbWUsIHBhcmVudCBlbGVtZW50IG5hbWUsIHRoZSBlbGVtZW50IHRvIGFuYWx5emUgYW5kIHRoZSB0eXBlIG9mIGVsZW1lbnQKLSAgICogc2V0cyB1cCB0aGUgV1NETEFuYWx5emVyIHRvIGFuYWx5emUgdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSBsb2cgZmlsZSBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50TmFtZSBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlICBhIG5hbWVzcGFjZS4KLSAgICogQHBhcmFtIGVsZW1lbnROYW1lIHRoZSBlbGVtZW50IHRvIGFuYWx5emUuCi0gICAqIEBwYXJhbSBlbGVtZW50VHlwZSB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gYWRkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgV1NETEFuYWx5emVyKFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nIHBhcmVudE5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBlbGVtZW50TmFtZSwgU3RyaW5nIGVsZW1lbnRUeXBlKSB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24KLSAgewotICAgIHRoaXMoZmlsZU5hbWUpOwotICAgIGFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QocGFyZW50TmFtZSwgbmFtZXNwYWNlLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpOwotCi0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSAgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMQW5hbHl6ZXIoU3RyaW5nIGZpbGVOYW1lLCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcykKLSAgewotICAgIHJlc2V0KGZpbGVOYW1lKTsKLSAgICB0aGlzLndzaVByZWZlcmVuY2VzID0gd3NpUHJlZmVyZW5jZXM7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSAgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBXU0RMQW5hbHl6ZXIoU3RyaW5nIGZpbGVOYW1lKQotICB7Ci0gICAgcmVzZXQoZmlsZU5hbWUpOwotICAgIGlmKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuZ2V0RWNsaXBzZUNvbnRleHQoKSkKLSAgICB7Ci0gICAgICB0aGlzLndzaVByZWZlcmVuY2VzID0gV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuY2hlY2tXU0lQcmVmZXJlbmNlcyhmaWxlTmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gIAkgIHRoaXMud3NpUHJlZmVyZW5jZXMgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmNoZWNrV1NJUHJlZmVyZW5jZXMoZmlsZU5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBXU0lQcmVmZXJlbmNlcyBnZXRXU0lQcmVmZXJlbmNlcygpCi0gIHsKLQkgIHJldHVybiB0aGlzLndzaVByZWZlcmVuY2VzOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gICAqIFZhbGlkYXRlIHRoZSBXU0RMIGZpbGUgYXMgc2V0dXAgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgKiBAdGhyb3dzIFdTSUFuYWx5emVyRXhjZXB0aW9uIGlmIHVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgZ2l2ZW4gV1NETCBGaWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGVDb25mb3JtYW5jZSgpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotCSAgaWYgKHdzaVByZWZlcmVuY2VzLmdldENvbXBsaWFuY2VMZXZlbCgpICE9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuSUdOT1JFX05PTl9XU0kpCi0JICB7Ci0gICAgICAgIC8vIGhlcmUncyB3aGVyZSB0aGUgdmFsaWRhdGlvbiBhY3R1YWxseSBzdGFydHMgaGFwcGVuaW5nCi0gICAgICAgIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyIGJwYW5hbHl6ZXIgPSBuZXcgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIoYW5hbHl6ZXJDb25maWdzLHdzZGxVUkkpOwotICAgICAgICBicGFuYWx5emVyLnZhbGlkYXRlQWxsKCk7Ci0gICAgICAgIFJlcG9ydEltcGwgcmVwb3J0ID0gKFJlcG9ydEltcGwpIGJwYW5hbHl6ZXIuZ2V0UmVwb3J0KCk7Ci0KLSAgICAgICAgTGlzdCBlbnRyaWVzID0gcmVwb3J0LmdldEVudHJpZXMoKTsKLQotICAgICAgICAvLyBpZiB0aGVyZSBhcmUgcmVwb3J0IGVudHJpZXMgd2UgaXRlcmF0ZSB0aHJvdWdoIHRoZW0gYW5kIGFkZCBhbGwKLSAgICAgICAgLy8gZXJyb3IgYW5kIHdhcm5pbmcgbWVzc2FnZXMgdG8gdGhlIGVycm9yIGxpc3QuIAotICAgICAgICBpZiAoZW50cmllcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaWVudHJ5ID0gZW50cmllcy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpZW50cnkuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KSBpZW50cnkubmV4dCgpOwotICAgICAgICAgICAgTWFwIGFzc2VydGlvblJlc3VsdHMgPSBlbnRyeS5nZXRBc3NlcnRpb25SZXN1bHRMaXN0KCk7Ci0KLSAgICAgICAgICAgIGlmIChhc3NlcnRpb25SZXN1bHRzICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEl0ZXJhdG9yIGlhc3NlcnRpb25SZXN1bHRzID0gYXNzZXJ0aW9uUmVzdWx0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAgIHdoaWxlIChpYXNzZXJ0aW9uUmVzdWx0cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQgYXIgPSAoQXNzZXJ0aW9uUmVzdWx0KSBpYXNzZXJ0aW9uUmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgVGVzdEFzc2VydGlvbiB0YSA9IGFyLmdldEFzc2VydGlvbigpOwotICAgICAgICAgICAgICAgIC8vIGFkZCBpbiB0byBza2lwIGVycm9ycyBmb3IgYXNzZXJ0aW9ucyB0aGF0IGFyZSByZXBvcnRpbmcgaW5jb3JyZWN0IHByb2JsZW1zLgotICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG5vdCByZXBvcnQgaW5jb3JyZWN0IGVycm9ycyByZXBvcnRlZCBpbiB0aGUgdG9vbHMgd2l0aG91dCBkaXNhYmxpbmcgdGhlbQotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBTdHJpbmcgYXNzZXJ0aW9uSWQgPSB0YS5nZXRJZCgpOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBib29sZWFuIGlnbm9yZUFzc2VydGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBmb3IoaW50IGkgPSBpZ25vcmVBc3NlcnRpb25zLmxlbmd0aC0xOyBpID49MDtpLS0pCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCWlmKGlnbm9yZUFzc2VydGlvbnNbaV0uZXF1YWxzSWdub3JlQ2FzZShhc3NlcnRpb25JZCkpCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIAl7Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIAkJaWdub3JlQXNzZXJ0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCX0KLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBpZihpZ25vcmVBc3NlcnRpb24pCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCWNvbnRpbnVlOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGFyLmdldFJlc3VsdCgpLmVxdWFsc0lnbm9yZUNhc2UoRkFJTEVEKSAmJiAKLSAgICAgICAgICAgICAgICAJd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1RPUF9OT05fV1NJKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAodGEuaXNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3QgZXJyb3JNZXNzYWdlTGlzdCA9IGFyLmdldEZhaWx1cmVEZXRhaWxMaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlTGlzdC5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVycm9yTWVzc2FnZXMuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEZhaWx1cmVEZXRhaWxJbXBsIGZkaSA9IChGYWlsdXJlRGV0YWlsSW1wbCkgZXJyb3JNZXNzYWdlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudExvY2F0aW9uIGVsID0gZmRpLmdldEVsZW1lbnRMb2NhdGlvbigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciA9IGVsLmdldExpbmVOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gZWwuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbmVycm9ycy5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBc3NlcnRpb25FcnJvcih0YS5nZXRJZCgpLCB0YS5nZXRGYWlsdXJlTWVzc2FnZSgpLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGVycm9yTWVzc2FnZUxpc3QgaXMgbnVsbCBidXQgdGhlcmUgaXMgYW4gZXJyb3Igc28gYXNzaWduIGl0IHRvIGxpbmUgMCBmb3Igbm93Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbmVycm9ycy5hZGQobmV3IEFzc2VydGlvbkVycm9yKHRhLmdldElkKCksIHRhLmdldEZhaWx1cmVNZXNzYWdlKCksIDAsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhci5nZXRSZXN1bHQoKS5lcXVhbHNJZ25vcmVDYXNlKEZBSUxFRCkgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAgd3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuV0FSTl9OT05fV1NJKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAodGEuaXNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3QgZXJyb3JNZXNzYWdlTGlzdCA9IGFyLmdldEZhaWx1cmVEZXRhaWxMaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlTGlzdC5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChlcnJvck1lc3NhZ2VzLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlRGV0YWlsSW1wbCBmZGkgPSAoRmFpbHVyZURldGFpbEltcGwpIGVycm9yTWVzc2FnZXMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRMb2NhdGlvbiBlbCA9IGZkaS5nZXRFbGVtZW50TG9jYXRpb24oKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBlbC5nZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlciA9IGVsLmdldENvbHVtbk51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9ud2FybmluZ3MuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXNzZXJ0aW9uRXJyb3IodGEuZ2V0SWQoKSwgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlcnJvck1lc3NhZ2VMaXN0IGlzIG51bGwgYnV0IHRoZXJlIGlzIGFuIGVycm9yIHNvIGFzc2lnbiBpdCB0byBsaW5lIDAgZm9yIG5vdwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb253YXJuaW5ncy5hZGQobmV3IEFzc2VydGlvbkVycm9yKHRhLmdldElkKCksIHRhLmdldEZhaWx1cmVNZXNzYWdlKCksIDAsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCSAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJQW5hbHl6ZXJFeGNlcHRpb24oZSArICJUaGUgV1NETEFuYWx5emVyIHdhcyB1bmFibGUgdG8gdmFsaWRhdGUgdGhlIGdpdmVuIFdTREwgRmlsZS4iKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBBZGQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIHBhcmVudE5hbWUgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSAgYSBuYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBlbGVtZW50TmFtZSB0aGUgZWxlbWVudCB0byBhbmFseXplLgotICAgKiBAcGFyYW0gZWxlbWVudFR5cGUgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGFkZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29uZmlndXJhdGlvblRvVGVzdCgKLSAgICBTdHJpbmcgcGFyZW50TmFtZSwKLSAgICBTdHJpbmcgbmFtZXNwYWNlLAotICAgIFN0cmluZyBlbGVtZW50TmFtZSwKLSAgICBTdHJpbmcgZWxlbWVudFR5cGUpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gIAl0cnkKLSAgCXsKLSAgICAgIFdTRExSZWZlcmVuY2Ugd3NkbFJlZmVyZW5jZSA9IG5ldyBXU0RMUmVmZXJlbmNlSW1wbCgpOwotCi0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCkgbmV3IFdTRExFbGVtZW50SW1wbCgpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0VHlwZShlbGVtZW50VHlwZSk7Ci0gICAgICBpZiAocGFyZW50TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICB3c2RsRWxlbWVudC5zZXRQYXJlbnRFbGVtZW50TmFtZShwYXJlbnROYW1lKTsKLSAgICAgIH0KLSAgICAgIHdzZGxFbGVtZW50LnNldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZShlbGVtZW50TmFtZSk7Ci0gICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLQotICAgICAgd3NkbFJlZmVyZW5jZS5zZXRXU0RMTG9jYXRpb24od3NkbFVSSSk7Ci0gICAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAvLyBJbml0aWFsaXplIHRoZSBCYXNpY1Byb2ZpbGVBbmFseXplciB1c2luZyBhbiBhbmFseXplcmNvbmZpZyBvYmplY3QKLSAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyY29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld0FuYWx5emVyQ29uZmlnKCk7Ci0KLSAgICAgIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXJvID0gbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0gICAgICBhcm8uc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZShBc3NlcnRpb25SZXN1bHRUeXBlLm5ld0luc3RhbmNlKE5PVFBBU1NFRCkpOwotICAgICAgYXJvLnNldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbihmYWxzZSk7Ci0gICAgICBhcm8uc2V0U2hvd0ZhaWx1cmVEZXRhaWwoZmFsc2UpOwotICAgICAgYXJvLnNldFNob3dGYWlsdXJlTWVzc2FnZShmYWxzZSk7Ci0gICAgICBhcm8uc2V0U2hvd01lc3NhZ2VFbnRyeShmYWxzZSk7Ci0KLSAgICAgIC8vIGFsdGhvdWdoIHdlIGRvbid0IHVzZSBhIHN0eWxlc2hlZXQgZm9yIG91ciBhcHBsaWNhdGlvbiBpdCBpcyByZXF1aXJlZCBvciB0aGUgCi0gICAgICAvLyBXUy1JIHRvb2xzIHdpbGwgZmFpbAotICAgICAgQWRkU3R5bGVTaGVldCBhZGRzdHlsZXNoZWV0ID0gbmV3IEFkZFN0eWxlU2hlZXRJbXBsKCk7Ci0KLSAgICAgIGFuYWx5emVyY29uZmlnLnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oYXJvKTsKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldEFkZFN0eWxlU2hlZXQoYWRkc3R5bGVzaGVldCk7Ci0gICAgICBhbmFseXplcmNvbmZpZy5zZXRSZXBsYWNlUmVwb3J0KHRydWUpOwotICAgICAgLy9hbmFseXplcmNvbmZpZy5zZXRMb2dMb2NhdGlvbihmaWxlbmFtZSk7Ci0gICAgICBhbmFseXplcmNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24od3NpUHJlZmVyZW5jZXMuZ2V0VEFERmlsZSgpKTsKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldFZlcmJvc2VPcHRpb24oZmFsc2UpOwotCi0gICAgICAvLyBzZXQgdGhlIHdzZGxSZWZlcmVuY2UKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldFdTRExSZWZlcmVuY2Uod3NkbFJlZmVyZW5jZSk7Ci0gICAgICBhbmFseXplckNvbmZpZ3MuYWRkKGFuYWx5emVyY29uZmlnKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lBbmFseXplckV4Y2VwdGlvbigiVW5hYmxlIHRvIGFkZCBBbmFseXplckNvbmZpZyB0byBsaXN0LiAiICsgZSk7Ci0gICAgfQotICB9Ci0gIC8qKgotICAgKiBNZXRob2QgZ2V0QXNzZXJ0aW9uRmFpbHVyZXMuCi0gICAqIFJldHVybiBhIGxpc3Qgb2YgdGhlIGFzc2VydGlvbiBmYWlsdXJlcy4KLSAgICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIGFzc2VydGlvbiBmYWlsdXJlcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEFzc2VydGlvbkVycm9ycygpCi0gIHsKLSAgICByZXR1cm4gYXNzZXJ0aW9uZXJyb3JzOwotICB9Ci0KLSAgLyoqCi0gIAkgKiBNZXRob2QgZ2V0QXNzZXJ0aW9uV2FybmluZ3MuCi0gIAkgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbnkgYXNzZXJ0aW9uIHdhcm5pbmdzIGdlbmVyYXRlZCBmcm9tIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gIAkgKiBAcmV0dXJuIGEgbGlzdCBvZiBhbnkgYXNzZXJ0aW9uIHdhcm5pbmdzIGdlbmVyYXRlZCBmcm9tIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gIAkgKi8KLSAgcHVibGljIExpc3QgZ2V0QXNzZXJ0aW9uV2FybmluZ3MoKQotICB7Ci0gICAgcmV0dXJuIGFzc2VydGlvbndhcm5pbmdzOwotICB9Ci0gIAotICAvKioKLSAgICogUmVzZXQuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBsb2cgZmlsZSBuYW1lLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzZXQoU3RyaW5nIGZpbGVuYW1lKQotICB7Ci0JaWYgKGZpbGVuYW1lICE9IG51bGwpCi0JewotCSAgU3RyaW5nIHRtcCA9IGZpbGVuYW1lLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkgIGlmICgoIXRtcC5zdGFydHNXaXRoKFdTSUNvbnN0YW50cy5IVFRQX1BSRUZJWCkpICYmCi0gICAgICAgICAgKCF0bXAuc3RhcnRzV2l0aChXU0lDb25zdGFudHMuRklMRV9QUkVGSVgpKSkKLQkgIHsKLQkgICAgdG1wID0gV1NJQ29uc3RhbnRzLkZJTEVfUFJPVE9DT0wgKyB0bXA7Ci0JICB9Ci0JICB0cnkKLQkgIHsKLQkgICAgd3NkbFVSSSA9IFVSSUVuY29kZXIuZW5jb2RlKHRtcCwgIlVURjgiKTsKLQkgIH0KLQkgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLQkgIHsKLQkgIH0KLQl9Ci0gIAlhbmFseXplckNvbmZpZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gIAlhc3NlcnRpb25lcnJvcnMgPSBuZXcgVmVjdG9yKCk7Ci0gIAlhc3NlcnRpb253YXJuaW5ncyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTSUFuYWx5emVyRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQW5hbHl6ZXJFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3Nzg1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQW5hbHl6ZXJFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXI7Ci0KLS8qKgotICogQW5hbHl6ZXJFeGNlcHRpb24KLSAqIAotICogRXhjZXB0aW9uIHRvIGJlIHRocm93biBpZiBhbiBhbmFseXplciBmYWlscwotICovCi1wdWJsaWMgY2xhc3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzODM1MTU4MzUwMjE5MTk0Njc3TDsKLQkvKioKLSAgICogVGhyb3dhYmxlLgotICAgKi8KLSAgcHJvdGVjdGVkIFRocm93YWJsZSB0aHJvd2FibGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQW5hbHl6ZXJFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgV1NJQW5hbHl6ZXJFeGNlcHRpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQW5hbHl6ZXJFeGNlcHRpb24uCi0gICAqIEBwYXJhbSBzIGRldGFpbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFdTSUFuYWx5emVyRXhjZXB0aW9uKFN0cmluZyBzKQotICB7Ci0gICAgc3VwZXIocyk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGFuIGV4Y2VwdGlvbiB3aXRoIGEgbWVzc2FnZSBhbmQgcmVsYXRlZCBleGNlcHRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gbXNnICAgICAgICB0aGUgZXhjZXB0aW9uIG1lc3NhZ2UKLSAgICogQHBhcmFtIHRocm93YWJsZSAgdGhyb3dhYmxlIHRoYXQgaXMgcmVsYXRlZCB0byB0aGlzIGV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIFdTSUFuYWx5emVyRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICAvLyBFeGNlcHRpb24KLSAgICBzdXBlcihtc2cpOwotCi0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2UKLSAgICB0aGlzLnRocm93YWJsZSA9IHRocm93YWJsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QncyB2YWx1ZXMuCi0gICAqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZGV0YWlsIG1lc3NhZ2Ugb2YgdGhpcyB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoaXMgZXhjZXB0aW9uIHRvIGJlIGNyZWF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGVuY2Fwc3VsYXRlZCB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFRocm93YWJsZSBnZXRUYXJnZXRFeGNlcHRpb24oKQotICB7Ci0gICAgLy8gUmV0dXJuIHRocm93YWJsZQotICAgIHJldHVybiB0aHJvd2FibGU7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTSUJhc2ljUHJvZmlsZUFuYWx5emVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI5YjkyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5CYXNpY1Byb2ZpbGVBbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuUHJvZmlsZVZhbGlkYXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5kb2N1bWVudC5Eb2N1bWVudEZhY3RvcnlJbXBsOwotCi0vKioKLSAqIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyCi0gKiAKLSAqIEFuIGV4dGVuc2lvbiBvZiB0aGUgQmFzaWNQcm9maWxlQW5hbHl6ZXIgZnJvbSB0aGUgV1MtSSBUZXN0IFRvb2xzIHRoYXQKLSAqIGFsbG93cyBjYWxsaW5nIGNvZGUgdG8gZ2V0IHRoZSByZXBvcnQgZ2VuZXJhdGVkIGZyb20gV1MtSSB2YWxpZGF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIgZXh0ZW5kcyBCYXNpY1Byb2ZpbGVBbmFseXplcgotewotICAvKioKLSAgICogRGVmYXVsdCBkb2N1bWVudCBmYWN0b3J5IGNsYXNzIG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfRE9DVU1FTlRfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c2kudGVzdC50b29scy51dGlsLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeUltcGwiOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gd3NkbFVSSSB0aGUgbG9jYXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKi8KLSAgcHVibGljIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyKExpc3QgYW5hbHl6ZXJDb25maWcsIFN0cmluZyB3c2RsVVJJKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlcihhbmFseXplckNvbmZpZywgd3NkbFVSSSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb25maWcgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqLwotICBwdWJsaWMgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIoTGlzdCBhbmFseXplckNvbmZpZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIoYW5hbHl6ZXJDb25maWcpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbW1vbiBpbml0aWFsaXphdGlvbi4KLSAgICogQHBhcmFtIHRvb2xJbmZvIGEgVG9vbEluZm8gb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBpbml0KFRvb2xJbmZvIHRvb2xJbmZvKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzLnRvb2xJbmZvID0gdG9vbEluZm87Ci0gICAgCi0gICAgLy8gQ3JlYXRlIG1lc3NhZ2UgbGlzdAotICAgIG1lc3NhZ2VMaXN0ID0gbmV3IE1lc3NhZ2VMaXN0KFJFU09VUkNFX0JVTkRMRV9OQU1FKTsKLQotICAgIC8vIENyZWF0ZSBwcm9maWxlIHZhbGlkYXRvciBmYWN0b3J5Ci0gICAgZmFjdG9yeSA9IFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGUgZG9jdW1lbnQgZmFjdG9yeQotICAgIGRvY3VtZW50RmFjdG9yeSA9IG5ldyBEb2N1bWVudEZhY3RvcnlJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFJlcG9ydC4KLSAgICogCi0gICAqIFJldHVybiB0aGUgUmVwb3J0IGdlbmVyYXRlZCBieSB0aGUgdmFsaWRhdGlvbi4KLSAgICogQHJldHVybiB0aGUgUmVwb3J0IGdlbmVyYXRlZCBieSB0aGUgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnQgZ2V0UmVwb3J0KCkKLSAgewotICAgIHJldHVybiByZXBvcnRlci5nZXRSZXBvcnQoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9Ub29sRW52aXJvbm1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1Rvb2xFbnZpcm9ubWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGJlZTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1Rvb2xFbnZpcm9ubWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5YTUxJbmZvOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgVG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVG9vbEVudmlyb25tZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9FTlZJUk9OTUVOVDsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICAvL3B1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPSBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQ09NTU9OLCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBUb29sIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBydW50aW1lTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5ydW50aW1lLm5hbWUiKTsKLSAgcHJvdGVjdGVkIFN0cmluZyBydW50aW1lVmVyc2lvbiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5ydW50aW1lLnZlcnNpb24iKTsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIG9zTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpOwotICBwcm90ZWN0ZWQgU3RyaW5nIG9zVmVyc2lvbiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MudmVyc2lvbiIpOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgeG1sUGFyc2VyTmFtZSA9ICI/IjsKLSAgcHJvdGVjdGVkIFN0cmluZyB4bWxQYXJzZXJWZXJzaW9uID0gIj8iOwotCi0gIC8qKgotICAgKiBBZGRpdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MSW5mbyB4bWxJbmZvID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdG9vbCBydW50aW1lIGVudmlyb25tZW50LgotICAgKi8KLSAgcHVibGljIFRvb2xFbnZpcm9ubWVudCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0KLSAgICAgIC8vIEZVVFVSRTogbWFkZSBjb21wYXRpYmxlIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgWGVyY2VzIHdoZXJlIGdldFZlcnNpb24KLSAgICAgIC8vIGlzIG5vIGxvbmdlciBzdGF0aWNhbGx5IGF2YWlsYWJsZS4KLSAgICAgIC8vIHhtbFBhcnNlclZlcnNpb24gPSBuZXcgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5WZXJzaW9uKCkuZ2V0VmVyc2lvbigpOwotICAgICAgeG1sUGFyc2VyVmVyc2lvbiA9IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuVmVyc2lvbi5nZXRWZXJzaW9uKCk7Ci0KLSAgICAgIHhtbFBhcnNlck5hbWUgPSAiQXBhY2hlIFhlcmNlcyI7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEFERDogSG93IGVsc2UgY2FuIHdlIGdldCB0aGUgbmFtZSB2ZXJzaW9uIG51bWJlcgotICAgIH0KLQotICAgIGNhdGNoIChFcnJvciBlcnIpCi0gICAgewotICAgICAgLy8gQUREOiBIb3cgZWxzZSBjYW4gd2UgZ2V0IHRoZSBuYW1lIHZlcnNpb24gbnVtYmVyCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRvb2wgcnVudGltZSBlbnZpcm9ubWVudC4KLSAgICogQHBhcmFtIHhtbEluZm8gYWRkaXRpb25hbCB0b29sIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFRvb2xFbnZpcm9ubWVudChYTUxJbmZvIHhtbEluZm8pCi0gIHsKLSAgICB0aGlzLnhtbEluZm8gPSB4bWxJbmZvOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG9zTmFtZS4KLSAgICogQHJldHVybiB0aGUgb3NOYW1lLgotICAgKiBAc2VlICNzZXRPU05hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T1NOYW1lKCkKLSAgewotICAgIHJldHVybiBvc05hbWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3NWZXJzaW9uLgotICAgKiBAcmV0dXJuIHRoZSBvc1ZlcnNpb24uCi0gICAqIEBzZWUgI3NldE9TVmVyc2lvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRPU1ZlcnNpb24oKQotICB7Ci0gICAgcmV0dXJuIG9zVmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwYXJzZXJOYW1lLgotICAgKiBAcmV0dXJuIHRoZSBwYXJzZXJOYW1lLgotICAgKiBAc2VlICNzZXRYTUxQYXJzZXJOYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFhNTFBhcnNlck5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHhtbFBhcnNlck5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFyc2VyVmVyc2lvbi4KLSAgICogQHJldHVybiB0aGUgcGFyc2VyVmVyc2lvbi4KLSAgICogQHNlZSAjc2V0WE1MUGFyc2VyVmVyc2lvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRYTUxQYXJzZXJWZXJzaW9uKCkKLSAgewotICAgIHJldHVybiB4bWxQYXJzZXJWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJ1bnRpbWVOYW1lLgotICAgKiBAcmV0dXJuIHRoZSBydW50aW1lTmFtZS4KLSAgICogQHNlZSAjc2V0UnVudGltZU5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHJ1bnRpbWVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJ1bnRpbWVWZXJzaW9uLgotICAgKiBAcmV0dXJuIHRoZSBydW50aW1lVmVyc2lvbi4KLSAgICogQHNlZSAjc2V0UnVudGltZVZlcnNpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZVZlcnNpb24oKQotICB7Ci0gICAgcmV0dXJuIHJ1bnRpbWVWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG9zTmFtZS4KLSAgICogQHBhcmFtIG9zTmFtZSB0aGUgb3NOYW1lIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0T1NOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPU05hbWUoU3RyaW5nIG9zTmFtZSkKLSAgewotICAgIHRoaXMub3NOYW1lID0gb3NOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG9zVmVyc2lvbi4KLSAgICogQHBhcmFtIG9zVmVyc2lvbiB0aGUgb3NWZXJzaW9uIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0T1NWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPU1ZlcnNpb24oU3RyaW5nIG9zVmVyc2lvbikKLSAgewotICAgIHRoaXMub3NWZXJzaW9uID0gb3NWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHBhcnNlck5hbWUuCi0gICAqIEBwYXJhbSB4bWxQYXJzZXJOYW1lIHRoZSBwYXJzZXJOYW1lIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0WE1MUGFyc2VyTmFtZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0WE1MUGFyc2VyTmFtZShTdHJpbmcgeG1sUGFyc2VyTmFtZSkKLSAgewotICAgIHRoaXMueG1sUGFyc2VyTmFtZSA9IHhtbFBhcnNlck5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcGFyc2VyVmVyc2lvbi4KLSAgICogQHBhcmFtIHhtbFBhcnNlclZlcnNpb24gdGhlIHBhcnNlclZlcnNpb24gdG8gc2V0LgotICAgKiBAc2VlICNnZXRYTUxQYXJzZXJWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRYTUxQYXJzZXJWZXJzaW9uKFN0cmluZyB4bWxQYXJzZXJWZXJzaW9uKQotICB7Ci0gICAgdGhpcy54bWxQYXJzZXJWZXJzaW9uID0geG1sUGFyc2VyVmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBydW50aW1lTmFtZS4KLSAgICogQHBhcmFtIHJ1bnRpbWVOYW1lIHRoZSBydW50aW1lTmFtZSB0byBzZXQuCi0gICAqIEBzZWUgI2dldFJ1bnRpbWVOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lTmFtZShTdHJpbmcgcnVudGltZU5hbWUpCi0gIHsKLSAgICB0aGlzLnJ1bnRpbWVOYW1lID0gcnVudGltZU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcnVudGltZVZlcnNpb24uCi0gICAqIEBwYXJhbSBydW50aW1lVmVyc2lvbiB0aGUgcnVudGltZVZlcnNpb24gdG8gc2V0LgotICAgKiBAc2VlICNnZXRSdW50aW1lVmVyc2lvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UnVudGltZVZlcnNpb24oU3RyaW5nIHJ1bnRpbWVWZXJzaW9uKQotICB7Ci0gICAgdGhpcy5ydW50aW1lVmVyc2lvbiA9IHJ1bnRpbWVWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB4bWxJbmZvIGFkZGl0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxUb29sRW52aXJvbm1lbnQoWE1MSW5mbyB4bWxJbmZvKQotICB7Ci0gICAgdGhpcy54bWxJbmZvID0geG1sSW5mbzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4gCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICB0aGUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiB0aGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICghbnNOYW1lLmVxdWFscygiIikpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gU3RhcnQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SVU5USU1FICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9OQU1FICsgIj1cIiIgKyBydW50aW1lTmFtZSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX1ZFUlNJT04gKyAiPVwiIiArIHJ1bnRpbWVWZXJzaW9uICsgIlwiLz4iKTsKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9PUEVSQVRJTkdfU1lTVEVNICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9OQU1FICsgIj1cIiIgKyBvc05hbWUgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OICsgIj1cIiIgKyBvc1ZlcnNpb24gKyAiXCIvPiIpOwotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1hNTF9QQVJTRVIgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX05BTUUgKyAiPVwiIiArIHhtbFBhcnNlck5hbWUgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OICsgIj1cIiIgKyB4bWxQYXJzZXJWZXJzaW9uICsgIlwiLz4iKTsKLQotICAgIC8vIElmIGFkZHRpb25hbCBpbmZvLCB0aGVuIGdldCBpdAotICAgIGlmICh4bWxJbmZvICE9IG51bGwpCi0gICAgICBwdy5wcmludCh4bWxJbmZvLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotCi0gICAgLy8gRW5kIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9Ub29sSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvVG9vbEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5N2VmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9Ub29sSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuWE1MSW5mbzsKLQotLyoqCi0gKiBJbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyBhIGNvbmZvcm1hbmNlIHRvb2wuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVG9vbEluZm8KLXsKLSAgLyoqCi0gICAqIFRvb2wgaW5mb3JtYXRpb24gcHJvcGVydHkgbmFtZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1RPT0xfVkVSU0lPTiA9ICJ3c2kudG9vbC52ZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9UT09MX1JFTEVBU0VfREFURSA9ICJ3c2kudG9vbC5yZWxlYXNlLmRhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1RPT0xfSU1QTEVNRU5URVIgPSAid3NpLnRvb2wuaW1wbGVtZW50ZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1RPT0xfTE9DQVRJT04gPSAid3NpLnRvb2wubG9jYXRpb24iOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IHRvb2wgaW5mb3JtYXRpb24gcHJvcGVydHkgdmFsdWVzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9UT09MX1ZFUlNJT04gPSAiMS4wLjEiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1RPT0xfUkVMRUFTRV9EQVRFID0gIjIwMDQtMDEtMjIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1RPT0xfSU1QTEVNRU5URVIgPSAiRWNsaXBzZS5vcmcgT3JnYW5pemF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9UT09MX0xPQ0FUSU9OID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd3N2dCI7Ci0KLSAgLyoqCi0gICAqIFRvb2wgaW5mb3JtYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdmVyc2lvbjsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWxlYXNlRGF0ZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBpbXBsZW1lbnRlcjsKLSAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGlvbjsKLQotICAvKioKLSAgICogVG9vbCBlbnZpcm9ubWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBUb29sRW52aXJvbm1lbnQgdG9vbEVudmlyb25tZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogVG9vbCBpbmZvIHByb3BlcnRpZXMgZmlsZW5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX0ZJTEVOQU1FID0gIm9yZy53c2kudGVzdC50b29saW5mbyI7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSB0b29sIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFRvb2xJbmZvKCkKLSAgewotICAgIHRoaXMudG9vbEVudmlyb25tZW50ID0gbmV3IFRvb2xFbnZpcm9ubWVudCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSB0b29sIGluZm9ybWF0aW9uIGZyb20gaW5mb3JtYXRpb24gaW4gdGhlIHRvb2xpbmZvLnByb3BlcnRpZXMgZmlsZS4KLSAgICogQHBhcmFtIG5hbWUgIHRoZSB0b29sIG5hbWUuCi0gICAqLwotICBwdWJsaWMgVG9vbEluZm8oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotCi0gICAgZ2V0UHJvcGVydGllcygpOwotCi0gICAgdGhpcy50b29sRW52aXJvbm1lbnQgPSBuZXcgVG9vbEVudmlyb25tZW50KCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSBuYW1lICAgICAgICAgdGhlIHRvb2wgbmFtZS4KLSAgICogQHBhcmFtIHZlcnNpb24gICAgICB0aGUgdmVyc2lvbiBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIHJlbGVhc2VEYXRlICB0aGUgcmVsZWFzZSBkYXRlIG9mIHRoZSB0b29sLgotICAgKiBAcGFyYW0gaW1wbGVtZW50ZXIgIHRoZSBpbXBsZW1lbnRlciBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIGxvY2F0aW9uICAgICB0aGUgaW1wbGVtZW50ZXIgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgVG9vbEluZm8oCi0gICAgU3RyaW5nIG5hbWUsCi0gICAgU3RyaW5nIHZlcnNpb24sCi0gICAgU3RyaW5nIHJlbGVhc2VEYXRlLAotICAgIFN0cmluZyBpbXBsZW1lbnRlciwKLSAgICBTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0gICAgdGhpcy5yZWxlYXNlRGF0ZSA9IHJlbGVhc2VEYXRlOwotICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBpbXBsZW1lbnRlcjsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0KLSAgICB0aGlzLnRvb2xFbnZpcm9ubWVudCA9IG5ldyBUb29sRW52aXJvbm1lbnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgdG9vbCBpbmZvcm1hdGlvbiB3aXRoIHRvb2wgdW5pcXVlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gbmFtZSAgICAgICAgIHRoZSB0b29sIG5hbWUuCi0gICAqIEBwYXJhbSB2ZXJzaW9uICAgICAgdGhlIHZlcnNpb24gb2YgdGhlIHRvb2wuCi0gICAqIEBwYXJhbSByZWxlYXNlRGF0ZSAgdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIGltcGxlbWVudGVyICB0aGUgaW1wbGVtZW50ZXIgb2YgdGhlIHRvb2wuCi0gICAqIEBwYXJhbSBsb2NhdGlvbiAgICAgdGhlIGltcGxlbWVudGVyIGxvY2F0aW9uLgotICAgKiBAcGFyYW0geG1sSW5mbyAgICAgIGFkZGl0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyBUb29sSW5mbygKLSAgICBTdHJpbmcgbmFtZSwKLSAgICBTdHJpbmcgdmVyc2lvbiwKLSAgICBTdHJpbmcgcmVsZWFzZURhdGUsCi0gICAgU3RyaW5nIGltcGxlbWVudGVyLAotICAgIFN0cmluZyBsb2NhdGlvbiwKLSAgICBYTUxJbmZvIHhtbEluZm8pCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0gICAgdGhpcy5yZWxlYXNlRGF0ZSA9IHJlbGVhc2VEYXRlOwotICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBpbXBsZW1lbnRlcjsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0KLSAgICB0aGlzLnRvb2xFbnZpcm9ubWVudCA9IG5ldyBUb29sRW52aXJvbm1lbnQoeG1sSW5mbyk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG5hbWUuCi0gICAqIEByZXR1cm4gbmFtZS4KLSAgICogQHNlZSAjc2V0TmFtZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB2ZXJzaW9uLgotICAgKiBAcmV0dXJuIHZlcnNpb24uCi0gICAqIEBzZWUgI3NldFZlcnNpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gdmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcmVsZWFzZSBkYXRlLgotICAgKiBAcmV0dXJuIHJlbGVhc2UgZGF0ZS4KLSAgICogQHNlZSAjc2V0UmVsZWFzZURhdGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVsZWFzZURhdGUoKQotICB7Ci0gICAgcmV0dXJuIHJlbGVhc2VEYXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBpbXBsZW1lbnRlci4KLSAgICogQHJldHVybiBpbXBsZW1lbnRlci4KLSAgICogQHNlZSAjc2V0SW1wbGVtZW50ZXIKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW1wbGVtZW50ZXIoKQotICB7Ci0gICAgcmV0dXJuIGltcGxlbWVudGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBpbXBsZW1lbnRlciBsb2NhdGlvbi4KLSAgICogQHJldHVybiBpbXBsZW1lbnRlciBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHRvb2xFbnZpcm9ubWVudC4KLSAgICogQHJldHVybiBUb29sRW52aXJvbm1lbnQKLSAgICogQHNlZSAjc2V0VG9vbEVudmlyb25tZW50Ci0gICAqLwotICBwdWJsaWMgVG9vbEVudmlyb25tZW50IGdldFRvb2xFbnZpcm9ubWVudCgpCi0gIHsKLSAgICByZXR1cm4gdG9vbEVudmlyb25tZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGltcGxlbWVudGVyLgotICAgKiBAcGFyYW0gaW1wbGVtZW50ZXIgdGhlIGltcGxlbWVudGVyIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0SW1wbGVtZW50ZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEltcGxlbWVudGVyKFN0cmluZyBpbXBsZW1lbnRlcikKLSAgewotICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBpbXBsZW1lbnRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxvY2F0aW9uIHRoZSBsb2NhdGlvbiB0byBzZXQuCi0gICAqIEBzZWUgI2dldExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgbmFtZS4KLSAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgdG8gc2V0LgotICAgKiBAc2VlICNnZXROYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSByZWxlYXNlRGF0ZS4KLSAgICogQHBhcmFtIHJlbGVhc2VEYXRlIHRoZSByZWxlYXNlRGF0ZSB0byBzZXQuCi0gICAqIEBzZWUgI2dldFJlbGVhc2VEYXRlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWxlYXNlRGF0ZShTdHJpbmcgcmVsZWFzZURhdGUpCi0gIHsKLSAgICB0aGlzLnJlbGVhc2VEYXRlID0gcmVsZWFzZURhdGU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdG9vbEVudmlyb25tZW50LgotICAgKiBAcGFyYW0gdG9vbEVudmlyb25tZW50IHRoZSB0b29sRW52aXJvbm1lbnQgdG8gc2V0LgotICAgKiBAc2VlICNnZXRUb29sRW52aXJvbm1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRvb2xFbnZpcm9ubWVudChUb29sRW52aXJvbm1lbnQgdG9vbEVudmlyb25tZW50KQotICB7Ci0gICAgdGhpcy50b29sRW52aXJvbm1lbnQgPSB0b29sRW52aXJvbm1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdG9vbEVudmlyb25tZW50LgotICAgKiBAcGFyYW0geG1sSW5mbyBhZGRpdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRpdGlvbmFsVG9vbEVudmlyb25tZW50KFhNTEluZm8geG1sSW5mbykKLSAgewotICAgIHRoaXMudG9vbEVudmlyb25tZW50LnNldEFkZGl0aW9uYWxUb29sRW52aXJvbm1lbnQoeG1sSW5mbyk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgdmVyc2lvbi4KLSAgICogQHBhcmFtIHZlcnNpb24gdGhlIHZlcnNpb24gdG8gc2V0LgotICAgKiBAc2VlICNnZXRWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWZXJzaW9uKFN0cmluZyB2ZXJzaW9uKQotICB7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gc3RhcnQgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgIHRoZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIHRoZSBzdGFydCBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCFuc05hbWUuZXF1YWxzKCIiKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIGdldE5hbWUoKS50b0xvd2VyQ2FzZSgpICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OICsgIj1cIiIgKyBnZXRWZXJzaW9uKCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFTEVBU0VfREFURSArICI9XCIiICsgZ2V0UmVsZWFzZURhdGUoKSArICJcIj4iKTsKLQotICAgIHB3LnByaW50KCIgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9JTVBMRU1FTlRFUiArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSArICI9XCIiICsgZ2V0SW1wbGVtZW50ZXIoKSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OICsgIj1cIiIgKyBnZXRMb2NhdGlvbigpICsgIlwiLz4iKTsKLQotICAgIC8vIEVudmlyb25tZW50Ci0gICAgcHcucHJpbnQodG9vbEVudmlyb25tZW50LnRvWE1MU3RyaW5nKG5hbWVzcGFjZU5hbWUpKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgZW5kIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICB0aGUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiB0aGUgZW5kIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCFuc05hbWUuZXF1YWxzKCIiKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICBwdy5wcmludGxuKCIgIDwvIiArIG5zTmFtZSArIGdldE5hbWUoKS50b0xvd2VyQ2FzZSgpICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB2YWx1ZXMgZnJvbSB0aGUgdG9vbHMucHJvcGVydGllcyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZ2V0UHJvcGVydGllcygpCi0gIHsKLSAgICAvL1Byb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotICAgIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVHJ5IHRvIGxvYWQgcHJvcGVydGllcyBmcm9tIHdzaS5wcm9wZXJ0aWVzCi0gICAgICAvL0lucHV0U3RyZWFtIGlzID0gVXRpbHMuZ2V0SW5wdXRTdHJlYW0oUFJPUF9GSUxFTkFNRSk7Ci0KLSAgICAgIC8vIExvYWQgcHJvcGVydGllcyBmcm9tIGZpbGUKLSAgICAgIC8vcHJvcHMubG9hZChpcyk7Ci0KLSAgICAgIC8vIEdldCByZXNvdXJjZQotICAgICAgcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoUFJPUF9GSUxFTkFNRSk7Ci0KLSAgICAgIC8vIEdldCBwcm9wZXJ0eSB2YWx1ZXMKLSAgICAgIHRoaXMudmVyc2lvbiA9Ci0gICAgICAgIGdldFByb3BlcnR5KHJlc291cmNlQnVuZGxlLCBQUk9QX1RPT0xfVkVSU0lPTiwgREVGX1RPT0xfVkVSU0lPTik7Ci0gICAgICB0aGlzLnJlbGVhc2VEYXRlID0KLSAgICAgICAgZ2V0UHJvcGVydHkoCi0gICAgICAgICAgcmVzb3VyY2VCdW5kbGUsCi0gICAgICAgICAgUFJPUF9UT09MX1JFTEVBU0VfREFURSwKLSAgICAgICAgICBERUZfVE9PTF9SRUxFQVNFX0RBVEUpOwotICAgICAgdGhpcy5pbXBsZW1lbnRlciA9Ci0gICAgICAgIGdldFByb3BlcnR5KAotICAgICAgICAgIHJlc291cmNlQnVuZGxlLAotICAgICAgICAgIFBST1BfVE9PTF9JTVBMRU1FTlRFUiwKLSAgICAgICAgICBERUZfVE9PTF9JTVBMRU1FTlRFUik7Ci0gICAgICB0aGlzLmxvY2F0aW9uID0KLSAgICAgICAgZ2V0UHJvcGVydHkocmVzb3VyY2VCdW5kbGUsIFBST1BfVE9PTF9MT0NBVElPTiwgREVGX1RPT0xfTE9DQVRJT04pOwotICAgIH0KLQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBsb2FkaW5nIHByb3BlcnRpZXM6ICAiICsgZS50b1N0cmluZygpKTsKLQotICAgICAgLy8gU2V0IGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzCi0gICAgICB0aGlzLnZlcnNpb24gPSBERUZfVE9PTF9WRVJTSU9OOwotICAgICAgdGhpcy5yZWxlYXNlRGF0ZSA9IERFRl9UT09MX1JFTEVBU0VfREFURTsKLSAgICAgIHRoaXMuaW1wbGVtZW50ZXIgPSBERUZfVE9PTF9JTVBMRU1FTlRFUjsKLSAgICAgIHRoaXMubG9jYXRpb24gPSBERUZfVE9PTF9MT0NBVElPTjsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHByb3BlcnR5LgotICAgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgIGEgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgIGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlICAgIGEgZGVmYXVsdCB2YWx1ZS4KLSAgICogQHJldHVybiBwcm9wZXJ0eS4gSWYgbm90IGZvdW5kIHJldHVybiBkZWZhdWx0IHZhbHVlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9wZXJ0eSgKLSAgICBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZSwKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBkZWZhdWx0VmFsdWUpCi0gIHsKLSAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICBpZiAoKHZhbHVlID0gcmVzb3VyY2VCdW5kbGUuZ2V0U3RyaW5nKGtleSkpID09IG51bGwpCi0gICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLQotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgdGhlIHRvb2xzLnByb3BlcnRpZXMgZmlsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0gICAqIFRoZSBpbnB1dCBhcmd1ZW1lbnRzIGFyZToKLSAgICogPG9sPgotICAgKiA8bGk+RmlsZW5hbWUgZm9yIHRoZSBwcm9wZXJ0aWVzIGZpbGUgdG8gY3JlYXRlCi0gICAqIDxsaT5WZXJzaW9uIG51bWJlcgotICAgKiA8bGk+Ci0gICAqIDwvb2w+Ci0gICAqIEBwYXJhbSBhcmdzICB0aGUgYXJndW1lbnRzIGZvciBtYWluLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGludCBzdGF0dXNDb2RlID0gMDsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBQUk9QX0ZJTEVOQU1FOwotICAgIFN0cmluZyB2ZXJzaW9uID0gREVGX1RPT0xfVkVSU0lPTjsKLSAgICBTdHJpbmcgaW1wbGVtZW50ZXIgPSBERUZfVE9PTF9JTVBMRU1FTlRFUjsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBERUZfVE9PTF9MT0NBVElPTjsKLQotICAgIC8vIFNldCB0aGUgZmlsZSBuYW1lCi0gICAgaWYgKGFyZ3MubGVuZ3RoID49IDEpCi0gICAgICBmaWxlbmFtZSA9IGFyZ3NbMF07Ci0KLSAgICBpZiAoYXJncy5sZW5ndGggPj0gMikKLSAgICAgIHZlcnNpb24gPSBhcmdzWzFdOwotCi0gICAgaWYgKGFyZ3MubGVuZ3RoID49IDMpCi0gICAgICBpbXBsZW1lbnRlciA9IGFyZ3NbMl07Ci0KLSAgICBpZiAoYXJncy5sZW5ndGggPj0gNCkKLSAgICAgIGxvY2F0aW9uID0gYXJnc1szXTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIENyZWF0ZSBmaWxlIHdyaXRlcgotICAgICAgRmlsZVdyaXRlciBmaWxlV3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoZmlsZW5hbWUpOwotCi0gICAgICAvLyBDcmVhdGUgcHJpbnQgd3JpdGVyCi0gICAgICBQcmludFdyaXRlciBwcmludFdyaXRlciA9IG5ldyBQcmludFdyaXRlcihmaWxlV3JpdGVyKTsKLQotICAgICAgLy8gV3JpdGUgb3V0IGNvbnRlbnRzIG9mIHByb3BlcnRpZXMgZmlsZQotICAgICAgcHJpbnRXcml0ZXIucHJpbnRsbihDT01NRU5UUyk7Ci0gICAgICBwcmludFdyaXRlci5wcmludGxuKFBST1BfVE9PTF9WRVJTSU9OICsgIj0iICsgdmVyc2lvbik7Ci0gICAgICBwcmludFdyaXRlci5wcmludGxuKFBST1BfVE9PTF9SRUxFQVNFX0RBVEUgKyAiPSIgKyBVdGlscy5nZXREYXRlKCkpOwotICAgICAgcHJpbnRXcml0ZXIucHJpbnRsbihQUk9QX1RPT0xfSU1QTEVNRU5URVIgKyAiPSIgKyBpbXBsZW1lbnRlcik7Ci0gICAgICBwcmludFdyaXRlci5wcmludGxuKFBST1BfVE9PTF9MT0NBVElPTiArICI9IiArIGxvY2F0aW9uKTsKLQotICAgICAgLy8gQ2xvc2UgZmlsZSB3cml0ZXIKLSAgICAgIGZpbGVXcml0ZXIuY2xvc2UoKTsKLQotICAgICAgLy8gRG9uZQotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaWxlIFsiICsgZmlsZW5hbWUgKyAiXSBjcmVhdGVkLiIpOwotICAgIH0KLQotICAgIGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICBzdGF0dXNDb2RlID0gMTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVhDRVBUSU9OOiAiICsgaW9lLnRvU3RyaW5nKCkpOwotICAgICAgaW9lLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIC8vIEV4aXQKLSAgICBTeXN0ZW0uZXhpdChzdGF0dXNDb2RlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NRU5UUyA9ICIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjN2M0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLS8qKgotICogV1MtSSBjb25zdGFudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEBhdXRob3IgSmltIENsdW5lCi0gKiBAYXV0aG9yIEdyYWhhbSBUdXJyZWxsIChndHVycmVsbEB1ay5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTSUNvbnN0YW50cyB7Ci0KLQkvKioKLQkgKiBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9ERUNMID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiI7Ci0KLQkvKioKLQkgKiBYTUwgbmFtZXNwYWNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfWE1MTlMgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUwgPSAgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI7Ci0JLyoqCi0JICogWE1MIHNjaGVtYSBuYW1lc3BhY2UgVVJJLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCi0JLyoqCi0JICogWE1MIHNjaGVtYSBsb2NhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYU0RfU0NIRU1BX0xPQ0FUSU9OID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCI7Ci0KLQkvKioKLQkgKiBYTUwgc2NoZW1hIG5hbWVzcGFjZSBuYW1lLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfWFNEID0gInhzZCI7Ci0KLQkvKioKLQkgKiBYTUwgc2NoZW1hIGluc3RhbmNlIG5hbWVzcGFjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hTSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0KLQkvKioKLQkgKiBYTUwgc2NoZW1hIG5hbWVzcGFjZSBuYW1lLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfWFNJID0gInhzaSI7Ci0KLQotCS8qKgotCSAqIFdTLUkgbWVzc2FnZSBsb2cgbmFtZXNwYWNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0xPRyA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfV1NJX0xPRyA9ICJ3c2ktbG9nIjsKLQotCS8qKgotCSAqIFdTLUkgY29uZm9ybWFuY2UgcmVwb3J0IG5hbWVzcGFjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9SRVBPUlQgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvcmVwb3J0LyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTkFNRV9XU0lfUkVQT1JUID0gIndzaS1yZXBvcnQiOwotCi0JLyoqCi0JICogV1MtSSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBuYW1lc3BhY2UgVVJJLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9XU0lfQVNTRVJUSU9OU18yMDAzID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDAzLzAzL2Fzc2VydGlvbnMvIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0FTU0VSVElPTlMgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvYXNzZXJ0aW9ucy8iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTkFNRV9XU0lfQVNTRVJUSU9OUyA9ICJ3c2ktYXNzZXJ0aW9ucyI7Ci0KLQkvKioKLQkgKiBXUy1JIG1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlIG5hbWVzYXBjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJR18yMDAzID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDAzLzAzL21vbml0b3JDb25maWcvIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX01PTklUT1JfQ09ORklHID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIjsKLQkKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHID0gIndzaS1tb25Db25maWciOwotCi0JLyoqCi0JICogV1MtSSBhbmFseXplciBjb25maWd1cmF0aW9uIGZpbGUgbmFtZXNhcGNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0FOQUxZWkVSX0NPTkZJR18yMDAzID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDAzLzAzL2FuYWx5emVyQ29uZmlnLyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvYW5hbHl6ZXJDb25maWcvIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19OQU1FX1dTSV9BTkFMWVpFUl9DT05GSUcgPSAid3NpLWFuYWx5emVyQ29uZmlnIjsKLQotCS8qKgotCSAqIFdTLUkgY29tbW9uIG5hbWVzYXBjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9DT01NT05fMjAwMyA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwMy8wMy9jb21tb24vIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0NPTU1PTiA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9jb21tb24vIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19OQU1FX1dTSV9DT01NT04gPSAid3NpLWNvbW1vbiI7Ci0KLQkvKioKLQkgKiBTT0FQIFYxLjEgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TT0FQID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIjsKLQotCS8qKgotCSAqIFNPQVAvMS4xIGVuY29kaW5nLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TT0FQX0VOQ09ESU5HID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9TT0FQX05FWFRfQUNUT1IgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0IiA7Ci0JLyoqCi0JICogSFRUUCB0cmFuc3BvcnQuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1NPQVBfSFRUUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiOwotCi0JLyoqCi0JICogV1NETCBWMS4xIG5hbWVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfV1NETCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI7Ci0KLQkvKioKLQkgKiBXU0RMIFNPQVAgYmluZGluZyBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1dTRExfU09BUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIjsKLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfV1NETF9TT0FQMTIgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwMTIvIjsKLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19OQU1FX1dTRExfU09BUCA9ICJzb2FwIjsKLQotCS8qKgotCSAqIFdTREwgTUlNRSBiaW5kaW5nIG5hbWVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19OQU1FX1dTRExfTUlNRSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsKLQotCS8qKgotCSAqIFdTREwgSFRUUCBHRVQgJiBQT1NUIGJpbmRpbmcgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX05BTUVfV1NETF9IVFRQID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iOwotCi0JLyoqCi0JICogV1NETCBESU1FIGJpbmRpbmcgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX05BTUVfV1NETF9ESU1FID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDIvMDQvZGltZS93c2RsLyI7Ci0KLQkvKioKLQkgKiBDb25mb3JtYW5jZSBDbGFpbSBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX0NMQUlNID0gImh0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vIjsKLQotCS8qKgotCSAqIFVEREkgVjIgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9VRERJX1YyID0gInVybjp1ZGRpLW9yZzphcGlfdjIiOwotCi0JLyoqCi0JICogVGhlIFhNTCBTY2hlbWEgZm9yIHRoZSB0eXBlIHVzZWQgdG8gcmVmZXIgdG8gYXR0YWNobWVudHMgZnJvbSB0aGUgU09BUAotCSAqIGVudmVsb3BlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TV0FfUkVGID0gImh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9iYXNpYy8xLjEveHNkIjsKLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNDSEVNQV9UWVBFX1NXQV9SRUYgPSAic3dhUmVmIjsKLQotCS8qKgotCSAqIEVsZW1lbnQgbmFtZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BRERfU1RZTEVfU0hFRVQgPSAiYWRkU3R5bGVTaGVldCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FERElUSU9OQUxfRU5UUllfVFlQRV9MSVNUID0gImFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQU5BTFlaRVJfRkFJTFVSRSA9ICJhbmFseXplckZhaWx1cmUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BUlRJRkFDVCA9ICJhcnRpZmFjdCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FSVElGQUNUX1JFRkVSRU5DRSA9ICJhcnRpZmFjdFJlZmVyZW5jZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FTU0VSVElPTl9DT1ZFUkFHRSA9ICJhc3NlcnRpb25Db3ZlcmFnZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FTU0VSVElPTl9ERVNDUklQVElPTiA9ICJhc3NlcnRpb25EZXNjcmlwdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FTU0VSVElPTl9SRVNVTFQgPSAiYXNzZXJ0aW9uUmVzdWx0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQVNTRVJUSU9OX1JFU1VMVF9TVU1NQVJZID0gImFzc2VydGlvblJlc3VsdFN1bW1hcnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BU1NFUlRJT05fUkVTVUxUUyA9ICJhc3NlcnRpb25SZXN1bHRzIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQ0xFQU5VUF9USU1FT1VUX1NFQ09ORFMgPSAiY2xlYW51cFRpbWVvdXRTZWNvbmRzIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQ09ORklHID0gImNvbmZpZ3VyYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9DT01NRU5UID0gImNvbW1lbnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9DT05URVhUID0gImNvbnRleHQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9ERVRBSUwgPSAiZGV0YWlsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fREVUQUlMX0RFU0NSSVBUSU9OID0gImRldGFpbERlc2NyaXB0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9FTlZJUk9OTUVOVCA9ICJlbnZpcm9ubWVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0VOVFJZID0gImVudHJ5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fRkFJTFVSRV9ERVRBSUwgPSAiZmFpbHVyZURldGFpbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0ZBSUxVUkVfREVUQUlMX0RFU0NSSVBUSU9OID0gImZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0ZBSUxVUkVfTUVTU0FHRSA9ICJmYWlsdXJlTWVzc2FnZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0hUVFBfSEVBREVSUyA9ICJodHRwSGVhZGVycyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0lNUExFTUVOVEVSID0gImltcGxlbWVudGVyIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fSU5RVUlSWV9VUkwgPSAiaW5xdWlyeVVSTCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0xJU1RFTl9QT1JUID0gImxpc3RlblBvcnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9MT0cgPSAibG9nIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTE9HX0RVUkFUSU9OID0gImxvZ0R1cmF0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTE9HX0ZJTEUgPSAibG9nRmlsZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01BTl9JTl9USEVfTUlERExFID0gIm1hbkluVGhlTWlkZGxlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUFYX0NPTk5FQ1RJT05TID0gIm1heENvbm5lY3Rpb25zIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUVTU0FHRV9DT05URU5UID0gIm1lc3NhZ2VDb250ZW50IjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01FU1NBR0VfQ09OVEVOVF9XSVRIX0FUVEFDSE1FTlRTID0gIm1lc3NhZ2VDb250ZW50V2l0aEF0dGFjaG1lbnRzIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01FU1NBR0VfRU5UUlkgPSAibWVzc2FnZUVudHJ5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUVTU0FHRV9JTlBVVCA9ICJtZXNzYWdlSW5wdXQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9NT05JVE9SID0gIm1vbml0b3IiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9PUEVSQVRJTkdfU1lTVEVNID0gIm9wZXJhdGluZ1N5c3RlbSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1BSRVJFUV9GQUlMRURfTElTVCA9ICJwcmVyZXFGYWlsZWRMaXN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUFJFUkVRX0xJU1QgPSAicHJlcmVxTGlzdCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1BST0ZJTEUgPSAicHJvZmlsZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1BST0ZJTEVfQVNTRVJUSU9OUyA9ICJwcm9maWxlQXNzZXJ0aW9ucyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTID0gInJlYWRUaW1lb3V0U2Vjb25kcyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFQ0VJVkVSX0hPU1RfQU5EX1BPUlQgPSAicmVjZWl2ZXJIb3N0QW5kUG9ydCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFRElSRUNUID0gInJlZGlyZWN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUkVQT1JUID0gInJlcG9ydCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JFUE9SVF9GSUxFID0gInJlcG9ydEZpbGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9SVU5USU1FID0gInJ1bnRpbWUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUID0gInNjaGVtZUFuZEhvc3RQb3J0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQgPSAic2VuZGVySG9zdEFuZFBvcnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9TRVJWSUNFX0xPQ0FUSU9OID0gInNlcnZpY2VMb2NhdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1NVTU1BUlkgPSAic3VtbWFyeSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1RFU1RfQVNTRVJUSU9OID0gInRlc3RBc3NlcnRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9URVNUX0FTU0VSVElPTlNfRklMRSA9ICJ0ZXN0QXNzZXJ0aW9uc0ZpbGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9URVNUX0FTU0VSVElPTl9JRCA9ICJ0ZXN0QXNzZXJ0aW9uSUQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9URVNUX0NPVkVSQUdFID0gInRlc3RDb3ZlcmFnZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1VERElfRU5UUlkgPSAidWRkaUVudHJ5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fVURESV9LRVkgPSAidWRkaUtleSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1VERElfUkVGRVJFTkNFID0gInVkZGlSZWZlcmVuY2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9WRVJCT1NFID0gInZlcmJvc2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9XU0RMX0VMRU1FTlQgPSAid3NkbEVsZW1lbnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9XU0RMX0lOUFVUID0gIndzZGxJbnB1dCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1dTRExfUkVGRVJFTkNFID0gIndzZGxSZWZlcmVuY2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9XU0RMX1VSSSA9ICJ3c2RsVVJJIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fWE1MX1BBUlNFUiA9ICJ4bWxQYXJzZXIiOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUlNRV9QQVJUID0gIm1pbWVQYXJ0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUlNRV9IRUFERVJTID0gIm1pbWVIZWFkZXJzIjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01JTUVfQ09OVEVOVCA9ICJtaW1lQ29udGVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0JPVU5EQVJZX1NUUklORyA9ICJib3VuZGFyeVN0cmluZyI7Ci0KLQkvKioKLQkgKiBBdHRyaWJ1dGUgbmFtZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9BTFRFUk5BVEUgPSAiYWx0ZXJuYXRlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQVJSQVlfVFlQRSA9ICJhcnJheVR5cGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9BU1NFUlRJT05fREVTQ1JJUFRJT04gPSAiYXNzZXJ0aW9uRGVzY3JpcHRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9CT00gPSAiQk9NIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQ0hBUlNFVCA9ICJjaGFyc2V0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQ09ERSA9ICJjb2RlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQ09MVU1OX05VTUJFUiA9ICJjb2x1bW5OdW1iZXIiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9DT05WRVJTQVRJT05fSUQgPSAiY29udmVyc2F0aW9uSUQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9DT1JSRUxBVElPTl9UWVBFID0gImNvcnJlbGF0aW9uVHlwZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0RBVEUgPSAiZGF0ZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0VOQUJMRUQgPSAiZW5hYmxlZCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0VOVFJZX1RZUEUgPSAiZW50cnlUeXBlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRkFJTFVSRV9NRVNTQUdFID0gImZhaWx1cmVNZXNzYWdlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRkFJTFVSRV9ERVRBSUwgPSAiZmFpbHVyZURldGFpbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0hSRUYgPSAiaHJlZiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lEID0gImlkIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSURfVUMgPSAiSUQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9JTVBMRU1FTlRFUiA9ICJpbXBsZW1lbnRlciI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0xJTkVfTlVNQkVSID0gImxpbmVOdW1iZXIiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9MT0NBVElPTiA9ICJsb2NhdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX01FRElBID0gIm1lZGlhIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTUVTU0FHRV9FTlRSWSA9ICJtZXNzYWdlRW50cnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9NRVNTQUdFUyA9ICJtZXNzYWdlcyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUUgPSAibmFtZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9QQVJFTlRfRUxFTUVOVF9OQU1FID0gInBhcmVudEVsZW1lbnROYW1lIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUkVGRVJFTkNFX0lEID0gInJlZmVyZW5jZUlEIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUkVGRVJFTkNFX1RZUEUgPSAicmVmZXJlbmNlVHlwZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1JFTEVBU0VfREFURSA9ICJyZWxlYXNlRGF0ZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1JFUExBQ0UgPSAicmVwbGFjZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1JFU1VMVCA9ICJyZXN1bHQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TRVJWSUNFX05BTUUgPSAic2VydmljZU5hbWUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TUEVDSUZJQ0FUSU9OID0gInNwZWNpZmljYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9USU1FU1RBTVAgPSAidGltZXN0YW1wIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVElUTEUgPSAidGl0bGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9UWVBFID0gInR5cGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9WRVJTSU9OID0gInZlcnNpb24iOwotCi0JLyoqCi0JICogRGVmYXVsdCB2YWx1ZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9SRVBPUlRfVVJJID0gInJlcG9ydC54bWwiOwotCi0JLy8gVEVNUDogVXNlIHRoZSBmb2xsb3dpbmcgcmVwb3J0IHRpdGxlIGZvciB0aGUgZHJhZnQgcmVsZWFzZSBvbmx5LgotCS8vcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9SRVBPUlRfVElUTEUgPSAiV1MtSSBQcm9maWxlCi0JLy8gQ29uZm9ybWFuY2UgUmVwb3J0IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1JFUE9SVF9USVRMRSA9ICJXUy1JIEJhc2ljIFByb2ZpbGUgQ29uZm9ybWFuY2UgUmVwb3J0LiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1RFU1RfQVNTRVJUSU9OU19ET0NVTUVOVF9VUkkgPSAiaHR0cDovL3d3dy53cy1pLm9yZy9UZXN0aW5nL1Rvb2xzLzIwMDQvMTIvQVAxMF9CUDExX1NTQlAxMF9UQUQueG1sIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTE9HX1hTTCA9ICIuLi9jb21tb24veHNsL2xvZy54c2wiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9SRVBPUlRfWFNMID0gIi4uL2NvbW1vbi94c2wvcmVwb3J0LnhzbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1hTTF9UWVBFID0gInRleHQveHNsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfWE1MX0VOQ09ESU5HID0gIlVURi04IjsKLQotCS8qKgotCSAqIEJPTSBjb25zdGFudHMuCi0JICogIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgaW50IEJPTV9VVEYxNiA9IDB4RkZGRTsKLQotCXB1YmxpYyBzdGF0aWMgaW50IEJPTV9VVEYxNl9CSUdfRU5ESUFOID0gMHhGRUZGOwotCi0JcHVibGljIHN0YXRpYyBpbnQgQk9NX1VURjggPSAweEVGQkJCRjsKLQotCS8qKgotCSAqIFZhbGlkYXRpb24gY29uc3RhbnRzLgotCSAqICAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUID0gImxpdGVyYWwiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0VOQyA9ICJlbmNvZGVkIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQyA9ICJkb2N1bWVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMgPSAicnBjIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfQ09SUkVMQVRJT05fVFlQRV9FTkRQT0lOVCA9ICJlbmRwb2ludCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfTkFNRVNQQUNFID0gIm5hbWVzcGFjZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfT1BFUkFUSU9OID0gIm9wZXJhdGlvbiI7Ci0KLQkvKioKLQkgKiBXUy1JIGNvbnN0YW50cyAtIGF0dHJpYnV0ZXMgZm9yIGNvbmZvcm1hbmNlIGNsYWltcyAoZGlzY292ZXJ5KS4KLQkgKiAgCi0JICovCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1VERElfQ0xBSU1fS0VZVkFMVUUgPSAiaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1VERElfQ0xBSU1fVE1PREVMS0VZID0gInV1aWQ6NjU3MTkxNjgtNzJjNi0zZjI5LThjMjAtNjJkZWZiMDk2MWMwIjsKLQotCS8qKgotCSAqIFdTLUkgbmFtZXMgYW5kIHZlcnNpb25zIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50IHN1cHBvcnRlZAotCSAqIGluIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHRlc3QgdG9vbHMuCi0gICAgICovCi0JLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV9UQURfTkFNRSA9ICJCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV8xXzFfVEFEX05BTUUgPSAiQmFzaWMgUHJvZmlsZSAxLjEgVGVzdCBBc3NlcnRpb25zIjsKLSAgICAvKiogQGRlcHJlY2F0ZWQgLS0gdGhpcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgVEFEIHJlZ2lzdHJ5IG1lY2hhbmlzbS4gKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSU1QTEVfU09BUF9CSU5ESU5HU19QUk9GSUxFX1RBRF9OQU1FID0gIlNpbXBsZSBTb2FwIEJpbmRpbmcgUHJvZmlsZSBbMS4wXSAod2l0aCBCYXNpYyBQcm9maWxlIFsxLjFdKSBUZXN0IEFzc2VydGlvbnMiOwotICAgIC8qKiBAZGVwcmVjYXRlZCAtLSB0aGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBUQUQgcmVnaXN0cnkgbWVjaGFuaXNtLiAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVEFDSE1FTlRTX1BST0ZJTEVfVEFEX05BTUUgPSAiQXR0YWNobWVudHMgUHJvZmlsZSBbMS4wXSAod2l0aCBCYXNpYyBQcm9maWxlIFsxLjFdIGFuZCBTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUgWzEuMF0pIFRlc3QgQXNzZXJ0aW9ucyI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV9UQURfVkVSU0lPTiA9ICIxLjEuMCI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfUFJPRklMRV8xXzFfVEFEX1ZFUlNJT04gPSAiMS4xLjAiOwotICAgIC8qKiBAZGVwcmVjYXRlZCAtLSB0aGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBUQUQgcmVnaXN0cnkgbWVjaGFuaXNtLiAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNJTVBMRV9TT0FQX0JJTkRJTkdTX1BST0ZJTEVfVEFEX1ZFUlNJT04gPSAiMS4wLjAiOwotICAgIC8qKiBAZGVwcmVjYXRlZCAtLSB0aGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBUQUQgcmVnaXN0cnkgbWVjaGFuaXNtLiAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVEFDSE1FTlRTX1BST0ZJTEVfVEFEX1ZFUlNJT04gPSAiMS4wLjAiOwotCi0JLyoqCi0JICogU3lzdGVtIGRlcGVuZGVudCBsaW5lIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElORV9TRVBBUkFUT1IgPSBTeXN0ZW0KLQkJCS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotCS8qKgotCSAqIFN5c3RlbSBkZXBlbmRlbnQgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfU0VQQVJBVE9SID0gU3lzdGVtCi0JCQkuZ2V0UHJvcGVydHkoInBhdGguc2VwYXJhdG9yIik7Ci0KLQkvKioKLQkgKiBGaWxlIHdoaWNoIGNvbnRhaW5zIHRoZSBjb3B5cmlnaHQsIGxpY2Vuc2UgYW5kIGZlZWRiYWNrIGNvbW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1FTlRTX0ZJTEUgPSAiY29tbWVudHMueG1sIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX1RZUEVfVEVYVF9YTUwgPSAidGV4dC94bWwiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfVFlQRV9NVUxUSVBBUlQgPSAibXVsdGlwYXJ0L3JlbGF0ZWQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV9QUkVGSVggPSAiZmlsZToiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfUFJFRklYID0gImh0dHA6IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0lfUFJFRklYID0gIldTLUk6ICI7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZlOGRiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci0KLS8qKgotICogUHJpbWFyeSBXUy1JIGV4Y2VwdGlvbi4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotICAvKioKLSAgICogU3RhdGljIG5lZWRlZCBmb3Igc2VyaWFsaXphYmxlIGNsYXNzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA1NDQ2ODIzMjIyNzY3Mjk5MzA4TDsKLQotICAvKioKLSAgICogVGhyb3dhYmxlLgotICAgKi8KLSAgcHJvdGVjdGVkIFRocm93YWJsZSB0aHJvd2FibGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gZXhjZXB0aW9uIHdpdGhvdXQgYSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIFdTSUV4Y2VwdGlvbigpCi0gIHsKLSAgICAvLyBFeGNlcHRpb24KLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBleGNlcHRpb24gd2l0aCBhIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbXNnIHRoZSBleGNlcHRpb24gbWVzc2FnZQotICAgKi8KLSAgcHVibGljIFdTSUV4Y2VwdGlvbihTdHJpbmcgbXNnKQotICB7Ci0gICAgLy8gRXhjZXB0aW9uCi0gICAgc3VwZXIobXNnKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gZXhjZXB0aW9uIHdpdGggYSBtZXNzYWdlIGFuZCByZWxhdGVkIGV4Y2VwdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBtc2cgICAgICAgIHRoZSBleGNlcHRpb24gbWVzc2FnZQotICAgKiBAcGFyYW0gdGhyb3dhYmxlICB0aHJvd2FibGUgdGhhdCBpcyByZWxhdGVkIHRvIHRoaXMgZXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgV1NJRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICAvLyBFeGNlcHRpb24KLSAgICBzdXBlcihtc2cpOwotCi0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2UKLSAgICB0aGlzLnRocm93YWJsZSA9IHRocm93YWJsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QncyB2YWx1ZXMuCi0gICAqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZGV0YWlsIG1lc3NhZ2Ugb2YgdGhpcyB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRNZXNzYWdlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0J3MgdmFsdWVzLgotICAgKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGRldGFpbCBtZXNzYWdlIG9mIHRoaXMgdGhyb3dhYmxlIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgLy9TdHJpbmdXcml0ZXIgc3c7Ci0gICAgLy9QcmludFdyaXRlciBwdzsKLQotICAgIC8vIEFsd2F5cyBnZXQgbWVzc2FnZSBmcm9tIHN1cGVyIGNsYXNzCi0gICAgU3RyaW5nIG1zZyA9IHN1cGVyLmdldE1lc3NhZ2UoKTsKLQotICAgIC8vIElmIHRoaXMgZXhjZXB0aW9uIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgZXhjZXB0aW9uLAotICAgIC8vIHRoZW4gYWRkIGl0IHRvIHRoZSBtZXNzYWdlCi0gICAgaWYgKHRocm93YWJsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIG1zZyArPSAiXG4iCi0gICAgICAgICsgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgotICAgICAgICArICIgIE5lc3RlZCBleGNlcHRpb24gaXM6IFxuXG4gICIKLSAgICAgICAgKyB0aHJvd2FibGUudG9TdHJpbmcoKQotICAgICAgICArICJcbiI7Ci0KLSAgICAgIC8vIElmIHRocm93YWJsZSBpcyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24sIAotICAgICAgLy8gdGhlbiBhZGQgY2xhc3MgbmFtZSBhbmQga2V5IHRvIG91dHB1dAotICAgICAgaWYgKHRocm93YWJsZSBpbnN0YW5jZW9mIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSA9IChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24pIHRocm93YWJsZTsKLQotICAgICAgICAvLyBHZXQgY2xhc3MgbmFtZSBhbmQga2V5Ci0gICAgICAgIG1zZyArPSAiIC0gIgotICAgICAgICAgICsgbXJlLmdldEtleSgpCi0gICAgICAgICAgKyAiXG5cdCIKLSAgICAgICAgICArICJbQ2xhc3MgTmFtZTogIgotICAgICAgICAgICsgbXJlLmdldENsYXNzTmFtZSgpCi0gICAgICAgICAgKyAiXSI7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRocm93YWJsZSBpcyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCAKLSAgICAgIC8vIHRoZW4gdGFyZ2V0IG9mIGV4Y2VwdGlvbgotICAgICAgZWxzZSBpZiAodGhyb3dhYmxlIGluc3RhbmNlb2YgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbikKLSAgICAgIHsKLSAgICAgICAgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUgPSAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbikgdGhyb3dhYmxlOwotCi0gICAgICAgIC8vIEdldCB0YXJnZXQKLSAgICAgICAgbXNnICs9ICIgLSAiICsgaXRlLmdldFRhcmdldEV4Y2VwdGlvbigpLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFERDogUHJpbnQgc3RhY2sgdHJhY2UKLSAgICAgIC8vc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICAvL3B3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICAgIC8vdGhyb3dhYmxlLnByaW50U3RhY2tUcmFjZShwdyk7Ci0KLSAgICAgIC8vIEFkZCBpdCB0byB0aGUgbWVzc2FnZQotICAgICAgLy9tc2cgKz0gc3cudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gbWVzc2FnZQotICAgIHJldHVybiBtc2c7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoaXMgZXhjZXB0aW9uIHRvIGJlIGNyZWF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGVuY2Fwc3VsYXRlZCB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFRocm93YWJsZSBnZXRUYXJnZXRFeGNlcHRpb24oKQotICB7Ci0gICAgLy8gUmV0dXJuIHRocm93YWJsZQotICAgIHJldHVybiB0aHJvd2FibGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYmY1ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLS8qKgotICogU2lnbmFscyB0aGF0IGFuIGF0dGVtcHQgdG8gb3BlbiB0aGUgZmlsZSBkZW5vdGVkIGJ5IGEgc3BlY2lmaWVkIAotICogcGF0aG5hbWUgaGFzIGZhaWxlZC4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBleHRlbmRzIFdTSUV4Y2VwdGlvbgotewotCi0gIC8qKgotICAgKiBTdGF0aWMgbmVlZGVkIGZvciBzZXJpYWxpemFibGUgY2xhc3MKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xOTE2MDEwNDQ0NjAxNjY2NDAxTDsKLQotLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIG1zZyAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAKLSAgICovCi0gIHB1YmxpYyBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24oU3RyaW5nIG1zZykKLSAgewotICAgIHN1cGVyKG1zZyk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIG1zZyAgICAgICAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gdGhyb3dhYmxlICBpbml0aWFsIGV4Y2VwdGlvbiB0aHJvd24uCi0gICAqLwotICBwdWJsaWMgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICBzdXBlcihtc2csIHRocm93YWJsZSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJUnVudGltZUV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJUnVudGltZUV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWUzMGI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSVJ1bnRpbWVFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgcnVudGltZSBleGNlcHRpb25zIHRoYXQgb2NjdXIgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFdTSVJ1bnRpbWVFeGNlcHRpb24gZXh0ZW5kcyBXU0lFeGNlcHRpb24KLXsKLQotICAvKioKLSAgICogU3RhdGljIG5lZWRlZCBmb3Igc2VyaWFsaXphYmxlIGNsYXNzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA0MzA5MzIwOTgxNTE1NTEzMTcxTDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSVJ1bnRpbWVFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgV1NJUnVudGltZUV4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0lSdW50aW1lRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gbXNnICB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgV1NJUnVudGltZUV4Y2VwdGlvbihTdHJpbmcgbXNnKQotICB7Ci0gICAgc3VwZXIobXNnKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NJUnVudGltZUV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIG1zZyAgICAgICAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gdGhyb3dhYmxlICB0aGUgaW5pdGlhbCBleGNlcHRpb24gdGhyb3duLgotICAKLSAgICovCi0gIHB1YmxpYyBXU0lSdW50aW1lRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICBzdXBlcihtc2csIHRocm93YWJsZSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJVGFnLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lUYWcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZiMzQzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lUYWcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmU7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotCi0vKioKLSAqIFdTLUkgY29uc3RhbnRzLiAgCi0gKiAgCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NJVGFnIGV4dGVuZHMgWE1MVGFncwotewotICAvKioKLSAgICogUXVhbGlmaWVkIG5hbWVzIG9mIFdTREwgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfSU1QT1JUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiaW1wb3J0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9UWVBFUyA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgInR5cGVzIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9NRVNTQUdFID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAibWVzc2FnZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfRE9DVU1FTlRBVElPTiA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgImRvY3VtZW50YXRpb24iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX0RFRklOSVRJT05TID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiZGVmaW5pdGlvbnMiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX0JJTkRJTkcgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJiaW5kaW5nIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9PUEVSQVRJT04gPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJvcGVyYXRpb24iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX1BBUlQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJwYXJ0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9JTlBVVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgImlucHV0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9PVVRQVVQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJvdXRwdXQiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX0ZBVUxUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiZmF1bHQiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX1NFUlZJQ0UgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJzZXJ2aWNlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9QT1JUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAicG9ydCIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfUE9SVFRZUEUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJwb3J0VHlwZSIpOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgV1NETF9TT0FQX0JJTkRJTkcgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUCwgImJpbmRpbmciKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX1NPQVBfQk9EWSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiYm9keSIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfU09BUF9IRUFERVIgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUCwgImhlYWRlciIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfU09BUF9IRUFERVJGQVVMVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiaGVhZGVyZmF1bHQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX1NPQVBfRkFVTFQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUCwgImZhdWx0Iik7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX01JTUVfQ09OVEVOVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTRExfTUlNRSwgImNvbnRlbnQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX01JTUVfWE1MID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9NSU1FLCAibWltZVhtbCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfTUlNRV9QQVJUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9NSU1FLCAicGFydCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfTUlNRV9NVUxUSVBBUlQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfTkFNRV9XU0RMX01JTUUsICJtdWx0aXBhcnRSZWxhdGVkIik7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1dTRExfQVJSQVlUWVBFID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiYXJyYXlUeXBlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9XU0RMX05BTUVTUEFDRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgIm5hbWVzcGFjZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfV1NETF9MT0NBVElPTiA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgImxvY2F0aW9uIik7Ci0KLSAgLyoqCi0gICAqIE5hbWVzcGFjZXMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfQ0xBSU0gPQotICAgICJodHRwOi8vd3MtaS5vcmcvc2NoZW1hcy9jb25mb3JtYW5jZUNsYWltLyI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TT0FQID0KLSAgICAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfU09BUEVOQyA9Ci0gICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX0JBU0lDX1BST0ZJTEUxMCA9Ci0gICAgImh0dHA6Ly93c2kub3JnL3Byb2ZpbGVzL2Jhc2ljMS4wLyI7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBTT0FQRU5DX0FSUkFZID0gbmV3IFFOYW1lKE5TX1VSSV9TT0FQRU5DLCAiQXJyYXkiKTsKLQotICAvKioKLSAgICogUXVhbGlmaWVkIG5hbWVzIG9mIFdTLUkgY2xhaW0gZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTSV9DTEFJTSA9IG5ldyBRTmFtZShOU19VUklfQ0xBSU0sICJDbGFpbSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfQ0xBSU1fQ09ORk9STVNUTyA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9DTEFJTSwgImNvbmZvcm1zVG8iKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1NPQVBfTVVTVFVOREVSU1RBTkQgPQotICAgIG5ldyBRTmFtZShOU19VUklfU09BUCwgIm11c3RVbmRlcnN0YW5kIik7Ci0KLSAgLyoqCi0gICAqIFF1YWxpZmllZCBuYW1lcyBvZiBTT0FQIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1NPQVBfRU5WRUxPUEUgPSBuZXcgUU5hbWUoTlNfVVJJX1NPQVAsICJFbnZlbG9wZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fU09BUF9CT0RZID0gbmV3IFFOYW1lKE5TX1VSSV9TT0FQLCAiQm9keSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fU09BUF9GQVVMVCA9IG5ldyBRTmFtZShOU19VUklfU09BUCwgIkZhdWx0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9TT0FQX0hFQURFUiA9IG5ldyBRTmFtZShOU19VUklfU09BUCwgIkhlYWRlciIpOwotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OWFhMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLlRvb2xJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotCi0vKioKLSAqIFRoZSBBbmFseXplciB3aWxsIHByb2Nlc3MgYWxsIFByb2ZpbGUgY29uZm9ybWFuY2UgZnVuY3Rpb25zLgotICogVGhpcyBjbGFzcyBzaG91bGQgYmUgc3ViLWNsYXNzZWQgZm9yIGVhY2ggcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBKaW0gQ2x1bmUKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQW5hbHl6ZXIKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVTT1VSQ0VfQlVORExFX05BTUUgPQotICAgICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXIiOwotCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFVTQUdFX01FU1NBR0UgPQotICAgICJVc2FnZTogQW5hbHl6ZXIgLWNvbmZpZyA8Y29uZmlnRmlsZW5hbWU+IjsKLQotICBwcm90ZWN0ZWQgUmVwb3J0ZXIgcmVwb3J0ZXIgPSBudWxsOwotICBwcm90ZWN0ZWQgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCA9IG51bGw7Ci0gIHByb3RlY3RlZCBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZUluZm8gPSBudWxsOwotCi0gIC8qKgotICAgKiBBbmFseXplciB0b29sIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFRvb2xJbmZvIHRvb2xJbmZvID0gbnVsbDsKLQotICAvKioKLSAgICogUHJvZmlsZSB2YWxpZGF0b3IgZmFjdG9yeS4KLSAgICovCi0gIHByb3RlY3RlZCBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQotICAvKioKLSAgICogUHJvZmlsZSB2YWxpZGF0b3IgZmFjdG9yeS4KLSAgICovCi0gIHByb3RlY3RlZCBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gbnVsbDsKLQotICAvKioKLSAgICogQW5hbHl6ZXIgY29uZmlnIGZpbGUgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGFuYWx5emVyQ29uZmlnTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJvdGVjdGVkIGludCBhbmFseXplckNvbmZpZ0luZGV4ID0gMDsKLQotICAvKioKLSAgICogUHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgTG9nIGxvZyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICogQHBhcmFtIGFyZ3MgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAcGFyYW0gdG9vbEluZm8gIGFuYWx5emVyIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIGNyZWF0aW5nIHRoZSBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplcihTdHJpbmdbXSBhcmdzLCBUb29sSW5mbyB0b29sSW5mbykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW5pdCh0b29sSW5mbyk7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyBvYmplY3QgICAKLSAgICB0aGlzLmFuYWx5emVyQ29uZmlnTGlzdC5hZGQoCi0gICAgICBhbmFseXplckNvbmZpZ0luZGV4LAotICAgICAgZG9jdW1lbnRGYWN0b3J5Lm5ld0FuYWx5emVyQ29uZmlnKCkpOwotICAgIGdldEFuYWx5emVyQ29uZmlnKCkuaW5pdChtZXNzYWdlTGlzdCk7Ci0KLSAgICAvLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgZ2V0QW5hbHl6ZXJDb25maWcoKS5wYXJzZUFyZ3MoYXJncywgdHJ1ZSk7Ci0KLSAgICAvLyBEaXNwbGF5IGNvcHlyaWdodCBhbmQgb3B0aW9ucyB0aGF0IHdlcmUgc3BlY2lmaWVkCi0gICAgVGVzdFV0aWxzLnByaW50VG9vbEluZm8odG9vbEluZm8pOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXRBbmFseXplckNvbmZpZygpLnRvU3RyaW5nKCkpOwotCi0gICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgcHJpbnRNZXNzYWdlKAotICAgICAgInByb2dyZXNzMDEiLAotICAgICAgbnVsbCwKLSAgICAgICJQbGVhc2Ugd2FpdCB3aGlsZSB0aGUgc3BlY2lmaWVkIGFydGlmYWN0cyBhcmUgYW5hbHl6ZWQuLi4iKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFuYWx5emVyIHRvb2wuCi0gICAqIEBwYXJhbSBhcmdzICAgICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHBhcmFtIHRvb2xJbmZvICBhbmFseXplciB0b29sIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gdmFsaWRhdGUgIGZsYWcgZm9yIGNvbmZpZyBvcHRpb25zIHZhbGlkYXRpb24uIAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBjcmVhdGluZyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGFuYWx5emVyIHRvb2wuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXIoU3RyaW5nW10gYXJncywgVG9vbEluZm8gdG9vbEluZm8sIGJvb2xlYW4gdmFsaWRhdGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGluaXQodG9vbEluZm8pOwotCi0gICAgLy8gR2V0IG5ldyBjb25maWcgb2JqZWN0ICAgCi0gICAgdGhpcy5hbmFseXplckNvbmZpZ0xpc3QuYWRkKAotICAgICAgICBhbmFseXplckNvbmZpZ0luZGV4LAotICAgICAgICBkb2N1bWVudEZhY3RvcnkubmV3QW5hbHl6ZXJDb25maWcoKSk7Ci0gICAgZ2V0QW5hbHl6ZXJDb25maWcoKS5pbml0KG1lc3NhZ2VMaXN0KTsKLQotICAgIC8vIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLSAgICBnZXRBbmFseXplckNvbmZpZygpLnBhcnNlQXJncyhhcmdzLCB2YWxpZGF0ZSk7Ci0KLSAgICAvLyBEaXNwbGF5IGNvcHlyaWdodCBhbmQgb3B0aW9ucyB0aGF0IHdlcmUgc3BlY2lmaWVkCi0gICAgVGVzdFV0aWxzLnByaW50VG9vbEluZm8odG9vbEluZm8pOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXRBbmFseXplckNvbmZpZygpLnRvU3RyaW5nKCkpOwotCi0gICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgcHJpbnRNZXNzYWdlKAotICAgICAgICAicHJvZ3Jlc3MwMSIsCi0gICAgICAgIG51bGwsCi0gICAgIlBsZWFzZSB3YWl0IHdoaWxlIHRoZSBzcGVjaWZpZWQgYXJ0aWZhY3RzIGFyZSBhbmFseXplZC4uLiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnTGlzdCAgYW5hbHl6ZXIgY29uZmlnIGZpbGUgbGlzdC4KLSAgICogQHBhcmFtIHRvb2xJbmZvICAgICAgICAgICAgYW5hbHl6ZXIgdG9vbCBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIGluc3RhbmNlIG9mIHRoZSBhbmFseXplciB0b29sLgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyKExpc3QgYW5hbHl6ZXJDb25maWdMaXN0LCBUb29sSW5mbyB0b29sSW5mbykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpbml0KHRvb2xJbmZvKTsKLQotICAgIHRoaXMuYW5hbHl6ZXJDb25maWdMaXN0ID0gYW5hbHl6ZXJDb25maWdMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbW1vbiBpbml0aWFsaXphdGlvbi4KLSAgICogQHBhcmFtIHRvb2xJbmZvICBhbmFseXplciB0b29sIGluZm9ybWF0aW9uLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgY29tbW9uIGluaXRpYWxpemF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdChUb29sSW5mbyBpbmZvKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzLnRvb2xJbmZvID0gaW5mbzsKLQotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGxpc3QKLSAgICBtZXNzYWdlTGlzdCA9IG5ldyBNZXNzYWdlTGlzdChSRVNPVVJDRV9CVU5ETEVfTkFNRSk7Ci0KLSAgICAvLyBDcmVhdGUgcHJvZmlsZSB2YWxpZGF0b3IgZmFjdG9yeQotICAgIGZhY3RvcnkgPSBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCi0gICAgLy8gQ3JlYXRlIGRvY3VtZW50IGZhY3RvcnkKLSAgICBkb2N1bWVudEZhY3RvcnkgPSBEb2N1bWVudEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGFsbCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4KLSAgICogQHJldHVybiBzdGF0dXMgY29kZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgaW50IHZhbGlkYXRlQWxsKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW50IHN0YXR1c0NvZGUgPSAwOwotICAgIGludCB0ZW1wU3RhdHVzQ29kZTsKLQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhbmFseXplckNvbmZpZ0xpc3Quc2l6ZSgpOyBpbmRleCsrKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImluZGV4OiAiICsgaW5kZXgpOwotCi0gICAgICAvLyBTZXQgY3VycmVudCBhbmFseXplciBjb25maWcgaW5kZXggCi0gICAgICBzZXRBbmFseXplckNvbmZpZyhpbmRleCk7Ci0KLSAgICAgIGlmICgodGVtcFN0YXR1c0NvZGUgPSB2YWxpZGF0ZUNvbmZvcm1hbmNlKCkpID4gc3RhdHVzQ29kZSkKLSAgICAgICAgc3RhdHVzQ29kZSA9IHRlbXBTdGF0dXNDb2RlOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0dXNDb2RlOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgYWxsIGNvbmZvcm1hbmNlIHZhbGlkYXRpb24gZnVuY3Rpb25zLgotICAgKiBAcmV0dXJuIHN0YXR1cyBjb2RlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgY29uZm9ybWFuY2UgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBpbnQgdmFsaWRhdGVDb25mb3JtYW5jZSgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEdldCB0b29sIGluZm9ybWF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSB0b29sIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFRvb2xJbmZvIGdldFRvb2xJbmZvKCkKLSAgCi0gIHsKLSAgICByZXR1cm4gdGhpcy50b29sSW5mbzsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgY3VycmVudCBhbmFseXplciBjb25maWd1cmF0aW9uLgotICAgKiBAcGFyYW0gaW5kZXggIHVycmVudCBhbmFseXplciBjb25maWd1cmF0aW9uLgotICAgKiBAc2VlICNnZXRBbmFseXplckNvbmZpZwotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0QW5hbHl6ZXJDb25maWcoaW50IGluZGV4KQotICB7Ci0gICAgdGhpcy5hbmFseXplckNvbmZpZ0luZGV4ID0gaW5kZXg7Ci0gIH0KLQotICBwcm90ZWN0ZWQgaW50IGdldEFuYWx5emVyQ29uZmlnSW5kZXgoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuYW5hbHl6ZXJDb25maWdJbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHJldHVybiBhbmFseXplciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNzZXRBbmFseXplckNvbmZpZwotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29uZmlnIGdldEFuYWx5emVyQ29uZmlnKCkKLSAgewotICAgIHJldHVybiAoQW5hbHl6ZXJDb25maWcpIHRoaXMuYW5hbHl6ZXJDb25maWdMaXN0LmdldChhbmFseXplckNvbmZpZ0luZGV4KTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgIGEga2V5LgotICAgKiBAcGFyYW0gbWVzc2FnZURhdGEgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBtZXNzYWdlTGlzdC5wcmludE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgIGEgZGVmYXVsdCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY1ByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBNZXNzYWdlTGlzdC5wcmludE1lc3NhZ2UoCi0gICAgICBSRVNPVVJDRV9CVU5ETEVfTkFNRSwKLSAgICAgIGtleSwKLSAgICAgIG1lc3NhZ2VEYXRhLAotICAgICAgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSAgYSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIC8vIFN0YXJ0ICAgICAKLSAgICBwdy5wcmludCh0b29sSW5mby5nZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICAvLyBDb25maWcKLSAgICBwdy5wcmludCgKLSAgICAgIGdldEFuYWx5emVyQ29uZmlnKCkudG9YTUxTdHJpbmcoCi0gICAgICAgIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9BTkFMWVpFUl9DT05GSUcpKTsKLQotICAgIC8vIEVuZAotICAgIHB3LnByaW50bG4odG9vbEluZm8uZ2V0RW5kWE1MU3RyaW5nKG5hbWVzcGFjZU5hbWUpKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGEgbWVzc2FnZS4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHJpbnRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgaWYgKGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0VmVyYm9zZU9wdGlvbigpKQotICAgIHsKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplci5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDg0ODJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIC8qKgotIyAgKiA8Y29weXJpZ2h0PgotIyAgKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoKLSMgICogPC9jb3B5cmlnaHQ+Ci0jICAqLwotCi0jCi0jIEFuYWx5emVyIHJlc291cmNlIGJ1bmRsZS4KLSMKLXVzYWdlMDE9VXNhZ2U6IEFuYWx5emVyIC1jb25maWcgPGNvbmZpZ0ZpbGVuYW1lPgotY3JlYXRlZDAxPUNvbmZvcm1hbmNlIHJlcG9ydCBoYXMgYmVlbiBjcmVhdGVkLgotcHJvZ3Jlc3MwMT1QbGVhc2Ugd2FpdCB3aGlsZSB0aGUgc3BlY2lmaWVkIGFydGlmYWN0cyBhcmUgYW5hbHl6ZWQuLi4KLWVycm9yMDE9QW5hbHl6ZXIgRXJyb3I6Ci1lcnJvcjAyPUFuYWx5emVyIFN0b3BwZWQgQnkgRXhjZXB0aW9uOgotZXJyb3IwMz1UaGUgY29uZm9ybWFuY2UgdmFsaWRhdGlvbiBwcm9jZXNzIGZhaWxlZC4KLWV4Y2VwdGlvbjAxPUV4Y2VwdGlvbjoKLWNvbmZpZzAxPUFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZmlsZSB3YXMgbm90IGZvdW5kLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwMj1Db3VsZCBub3QgZmluZCBsb2cgZmlsZS4gIFNwZWNpZmllZCBmaWxlIGxvY2F0aW9uOgotY29uZmlnMDM9Q291bGQgbm90IGZpbmQgV1NETCBmaWxlLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwND1DYW4gbm90IHNwZWNpZnkgYm90aCB0aGUgV1NETCByZWZlcmVuY2UgYW5kIFVEREkgcmVmZXJlbmNlIG9wdGlvbnMuCi1jb25maWcwNT1XU0RMIGRvY3VtZW50IHdhcyBlaXRoZXIgbm90IGZvdW5kIG9yIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuCi1jb25maWcwNj1JbnZhbGlkIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZWxlbWVudDoKLWNvbmZpZzA3PUJvdGggdGhlIDx3c2RsRWxlbWVudD4gYW5kIDx3c2RsVVJJPiBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZC4KLWNvbmZpZzA4PUNvdWxkIG5vdCByZWFkIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFNwZWNpZmllZCBmaWxlIGxvY2F0aW9uOgotY29uZmlnMDk9VGhlIHBhcmVudEVsZW1lbnROYW1lIGF0dHJpYnV0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aXRoIGEgV1NETCB0eXBlIG9mIHBvcnQgb3Igb3BlcmF0aW9uLgotY29uZmlnMTA9VGhlIC13c2RsRWxlbWVudCBvcHRpb24gbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlIC13c2RsVVJJIG9yIC11ZGRpS2V5IG9wdGlvbnMuCi1jb25maWcxMT1UaGUgLXNlcnZpY2VMb2NhdGlvbiBvcHRpb24gbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlIC13c2RsVVJJIG9yIC11ZGRpS2V5IG9wdGlvbnMuCi1jb25maWcxMj1UaGUgc3BlY2lmaWVkIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkOgotY29uZmlnMTM9T3B0aW9uIGRpZCBub3QgY29udGFpbiBhIHZhbHVlLiAgU3BlY2lmaWVkIG9wdGlvbjoKLWNvbmZpZzE0PUNvdWxkIG5vdCBmaW5kIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcxNT1SZXBvcnQgZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgcmVwbGFjZSBvcHRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCi1jb25maWcxNj1UZXN0IGFzc2VydGlvbiBkb2N1bWVudCBsb2NhdGlvbiBtdXN0IGJlIHNwZWNpZmllZC4KLWNvbmZpZzE3PUNvdWxkIG5vdCBnZXQgcmVwb3J0IGZpbGUgbG9jYXRpb24uCi1jb25maWcxOD1JbnZhbGlkIGNvcnJlbGF0aW9uIHR5cGUgc3BlY2lmaWVkLgotY29uZmlnMTk9VGhlIFdTREwgZWxlbWVudCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLgotY29uZmlnMjA9VGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQgKFRBRClkb2N1bWVudCB3YXMgZWl0aGVyIG5vdCBmb3VuZCBvciBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXJDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhZDVhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplckNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHRlc3QgYXNzZXJ0aW9ucyBhY3Jvc3MgYWxsIGFydGlmYWN0cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEFuYWx5emVyQ29udGV4dAotewotICBwcm90ZWN0ZWQgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlSW5mbyA9IG51bGw7Ci0gIHByb3RlY3RlZCBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGFuYWx5emVyIGNvbnRleHQgd2l0aCBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2UgYSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbnRleHQoU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlUmVmZXJlbmNlID0gc2VydmljZVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEByZXR1cm4gc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFNlcnZpY2VSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlUmVmZXJlbmNlIGdldFNlcnZpY2VSZWZlcmVuY2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2VydmljZVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSBzZXJ2aWNlUmVmZXJlbmNlIGEgc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFNlcnZpY2VSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VSZWZlcmVuY2UoU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlUmVmZXJlbmNlID0gc2VydmljZVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjYW5kaWRhdGVJbmZvLgotICAgKiBAcmV0dXJuIENhbmRpZGF0ZUluZm8uCi0gICAqIEBzZWUgI3NldENhbmRpZGF0ZUluZm8KLSAgICovCi0gIHB1YmxpYyBDYW5kaWRhdGVJbmZvIGdldENhbmRpZGF0ZUluZm8oKQotICB7Ci0gICAgcmV0dXJuIGNhbmRpZGF0ZUluZm87Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgY2FuZGlkYXRlSW5mby4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZUluZm8gdGhlIGNhbmRpZGF0ZUluZm8gdG8gc2V0LgotICAgKiBAc2VlICNnZXRDYW5kaWRhdGVJbmZvCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDYW5kaWRhdGVJbmZvKENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlSW5mbykKLSAgewotICAgIHRoaXMuY2FuZGlkYXRlSW5mbyA9IGNhbmRpZGF0ZUluZm87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB3c2RsRG9jdW1lbnQuCi0gICAqIEByZXR1cm4gV1NETERvY3VtZW50LgotICAgKiBAc2VlICNzZXRXc2RsRG9jdW1lbnQKLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQgZ2V0V3NkbERvY3VtZW50KCkgewotICAgICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB3c2RsRG9jdW1lbnQuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgdGhlIHdzZGxEb2N1bWVudCB0byBzZXQuCi0gICAqIEBzZWUgI2dldFdzZGxEb2N1bWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbERvY3VtZW50KFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpIHsKLSAgICAgIHRoaXMud3NkbERvY3VtZW50ID0gd3NkbERvY3VtZW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25GYWlsRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25GYWlsRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZjVhMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi0vKioKLSAqIEJhc2UgRXhjZXB0aW9uIGZvciBBc3NlcnRpb24gRmFpbC4KLSAqIAotICogQGF1dGhvciBndHVycmVsbAotICogKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0KLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzMjU3MDA3NjM1NzQzMjU4OTMzTDsKLQotCS8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uRXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gYXJnMCB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihTdHJpbmcgYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQzNGE1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLS8qKgotICogRXhjZXB0aW9uIGZvciBBc3NlcnRpb24gTm90IEFwcGxpY2FibGUuCi0gKiAKLSAqIEBhdXRob3IgZ3R1cnJlbGwKLSAqLwotcHVibGljIGNsYXNzIEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDM5MDU1MjM3ODI5OTQxMTI1NjRMOwotCi0JLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIGFyZzAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oU3RyaW5nIGFyZzApCi0gIHsKLSAgICBzdXBlcihhcmcwKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25QYXNzRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25QYXNzRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NTdkNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi0vKioKLSAqIEV4Y2VwdGlvbiBmb3IgQXNzZXJ0aW9uIFBhc3MuCi0gKiAKLSAqIEBhdXRob3IgZ3R1cnJlbGwKLSAqLwotcHVibGljIGNsYXNzIEFzc2VydGlvblBhc3NFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotCS8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1NzI4NTg0MjI4MzU0MTgxMEw7Ci0KLQkvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEFzc2VydGlvblBBc3NFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25QQXNzRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gYXJnMCB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbihTdHJpbmcgYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvblJlc3VsdEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMDVhZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLS8qKgotICogRXhjZXB0aW9uIGZvciBBc3NlcnRpb24gUmVzdWx0LgotICogCi0gKiBAYXV0aG9yIGd0dXJyZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMyNTY3MjA2ODQ3MDAxNTI2MzJMOwotCXByaXZhdGUgU3RyaW5nIGRldGFpbE1lc3NhZ2U7Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9ucmVzdWx0RXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGRldGFpbE1lc3NhZ2UgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24uCi0gICAqIEBwYXJhbSBhcmcwIHRoZSBkZXRhaWwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24oU3RyaW5nIGFyZzApCi0gIHsKLSAgICBzdXBlcihhcmcwKTsKLSAgICBkZXRhaWxNZXNzYWdlID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uLgotICAgKiBAcGFyYW0gYXJnMCB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBhcmcxICBmdXJ0aGVyIGRldGFpbGVkIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICAgIGRldGFpbE1lc3NhZ2UgPSBhcmcxOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGRldGFpbE1lc3NhZ2UuCi0gICAqIEByZXR1cm4gdGhlIGRldGFpbE1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERldGFpbE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGRldGFpbE1lc3NhZ2U7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Jhc2ljUHJvZmlsZUFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlN2JhN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lGaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5EZWZhdWx0UmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuQXJ0aWZhY3RUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0lQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxEb2N1bWVudENhY2hlOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuQmluZGluZ1RlbXBsYXRlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJpbmRpbmdEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RmFjdG9yeTsKLQotCi0vKioKLSAqIEFuYWx5emVzIGxvZyBmaWxlcyB0byBjb25maXJtIGNvbmZvcm1hbmNlIHRvIGEgcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBKaW0gQ2x1bmUKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbAotICovCi1wdWJsaWMgY2xhc3MgQmFzaWNQcm9maWxlQW5hbHl6ZXIgZXh0ZW5kcyBBbmFseXplcgotewotICAvKioKLSAgICogVG9vbCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT0xfTkFNRSA9ICJBbmFseXplciI7Ci0KLSAgLyoqCi0gICAqIFdTREwgZG9jdW1lbnQgdG8gYW5hbHl6ZS4KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbnVsbDsKLSAgLy8gcHJpdmF0ZSBXU0RMVmFsaWRhdG9yIHdzZGxWYWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKi8KLSAgcHVibGljIEJhc2ljUHJvZmlsZUFuYWx5emVyKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHN1cGVyKGFyZ3MsIG5ldyBUb29sSW5mbyhUT09MX05BTUUpKTsKLSAgICBuZXcgWE1MRG9jdW1lbnRDYWNoZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEBwYXJhbSB2YWxpZGF0ZSBmbGFnIGZvciBjb21tYW5kIGxpbmUgYXJndW1lbnQgdmFsaWRhdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqLwotICBwdWJsaWMgQmFzaWNQcm9maWxlQW5hbHl6ZXIoU3RyaW5nW10gYXJncywgYm9vbGVhbiB2YWxpZGF0ZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIoYXJncywgbmV3IFRvb2xJbmZvKFRPT0xfTkFNRSksIHZhbGlkYXRlKTsKLSAgICBuZXcgWE1MRG9jdW1lbnRDYWNoZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZ0xpc3QgYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYW5hbHl6ZXIuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBCYXNpYyBwcm9maWxlIGFuYWx5emVyLgotICAgKi8KLSAgcHVibGljIEJhc2ljUHJvZmlsZUFuYWx5emVyKExpc3QgYW5hbHl6ZXJDb25maWdMaXN0KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlcihhbmFseXplckNvbmZpZ0xpc3QsIG5ldyBUb29sSW5mbyhUT09MX05BTUUpKTsKLSAgICBuZXcgWE1MRG9jdW1lbnRDYWNoZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZ0xpc3QgYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSB3c2RsVVJJIGEgd3NkbCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqLwotICBwdWJsaWMgQmFzaWNQcm9maWxlQW5hbHl6ZXIoTGlzdCBhbmFseXplckNvbmZpZ0xpc3QsIFN0cmluZyB3c2RsVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHN1cGVyKGFuYWx5emVyQ29uZmlnTGlzdCwgbmV3IFRvb2xJbmZvKFRPT0xfTkFNRSkpOwotICAgIG5ldyBYTUxEb2N1bWVudENhY2hlKCk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0IHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBpZiAod3NkbFVSSSAhPSBudWxsKQotICAgICAgICB0aGlzLndzZGxEb2N1bWVudCA9IG5ldyBXU0RMRG9jdW1lbnQod3NkbFVSSSk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gd2UpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih3ZS5nZXRNZXNzYWdlKCksIHdlKTsKLSAgICB9Ci0KLSAgfQotICAKLSAgcHJpdmF0ZSBXU0RMRG9jdW1lbnQgZ2V0V3NkbEZyb21VZGRpKCkgewotICAgICAgV1NETERvY3VtZW50IHdzZGxEb2MgPSBudWxsOwotICAgICAgdHJ5IHsKLSAgICAgICAgICBVRERJUHJveHkgdWRkaVByb3h5ID0gbmV3IFVERElQcm94eSgpOwotICAgICAgICAgIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZSA9IGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0VURESVJlZmVyZW5jZSgpOwotICAgICAgICAgIHVkZGlQcm94eS5zZXRJbnF1aXJ5VVJMKHVkZGlSZWZlcmVuY2UuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICAgICAgICBUTW9kZWwgdE1vZGVsID0gbnVsbDsKLQotICAgICAgICAgIGlmICh1ZGRpUmVmZXJlbmNlLmdldEtleVR5cGUoKS5lcXVhbHMoVURESVJlZmVyZW5jZS5CSU5ESU5HX0tFWSkpIHsKLSAgICAgICAgICAgICAgQmluZGluZ0RldGFpbCBiaW5kaW5nRGV0YWlsID0gdWRkaVByb3h5LmdldF9iaW5kaW5nRGV0YWlsKAotICAgICAgICAgICAgICAgICAgICAgIHVkZGlSZWZlcmVuY2UuZ2V0S2V5KCkpOwotICAgICAgICAgICAgICBCaW5kaW5nVGVtcGxhdGUgYmluZGluZ1RlbXBsYXRlID0gKEJpbmRpbmdUZW1wbGF0ZSkgYmluZGluZ0RldGFpbC4KLSAgICAgICAgICAgICAgICAgICAgICBnZXRCaW5kaW5nVGVtcGxhdGVWZWN0b3IoKS5lbGVtZW50QXQoMCk7Ci0gICAgICAgICAgICAgIHRNb2RlbCA9IFVERElVdGlscy5maW5kVE1vZGVsKHVkZGlQcm94eSwgYmluZGluZ1RlbXBsYXRlLCBmYWxzZSk7Ci0gICAgICAgICAgfSBlbHNlIHsgLy8gVURESVJlZmVyZW5jZS5UTU9ERUxfS0VZCi0gICAgICAgICAgICAgIFRNb2RlbERldGFpbCB0TW9kZWxEZXRhaWwgPSB1ZGRpUHJveHkuZ2V0X3RNb2RlbERldGFpbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWRkaVJlZmVyZW5jZS5nZXRLZXkoKSk7Ci0gICAgICAgICAgICAgIHRNb2RlbCA9IChUTW9kZWwpIHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKS5lbGVtZW50QXQoMCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgU3RyaW5nIG92ZXJ2aWV3VVJMID0gVURESVV0aWxzLmdldE92ZXJ2aWV3VVJMKHRNb2RlbCk7Ci0gICAgICAgICAgU3RyaW5nIHdzZGxVUkkgPSBVRERJVXRpbHMuZ2V0V1NETExvY2F0aW9uKG92ZXJ2aWV3VVJMKTsKLSAgICAgICAgICB3c2RsRG9jID0gbmV3IFdTRExEb2N1bWVudCh3c2RsVVJJKTsKLQotICAgICAgICAgIC8qIFRPRE86ICBJIHJlZmFjdG9yZWQgdGhpcyBjb2RlIGZyb20gQlNQMzAwMSBidXQgSSdtIG5vdCBzdXJlIHRoYXQKLSAgICAgICAgICAgKiBpdCdzIGNvcnJlY3QuICBUaGlzIG92ZXJyaWRlcyB0aGUgPHdzZGxFbGVtZW50PiBjaGlsZCBvZgotICAgICAgICAgICAqIDx1ZGRpUmVmZXJlbmNlPiBmcm9tIHRoZSBjb25maWcgZmlsZSwgd2hpY2ggbmV2ZXIgZ2V0cyB1c2VkLgotICAgICAgICAgICAqLwotICAgICAgICAgIC8vIElmIHRoZSB3c2RsRWxlbWVudCBkb2VzIG5vdCBleGlzdCwgdGhlbiBzZXQgaXQKLSAgICAgICAgICBpZiAoYW5hbHl6ZXJDb250ZXh0LmdldFNlcnZpY2VSZWZlcmVuY2UoKS5nZXRXU0RMRWxlbWVudCgpID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSBVRERJVXRpbHMuZ2V0QmluZGluZyhvdmVydmlld1VSTCwgd3NkbERvYyk7Ci0gICAgICAgICAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9Ci0gICAgICAgICAgICAgICAgICBiaW5kaW5nID09IG51bGwgPyBudWxsIDogYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPQotICAgICAgICAgICAgICAgICAgYmluZGluZyA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgICAgICAgICAgLy8gR2V0IFdTREwgYmluZGluZyBmcm9tIHRoZSBvdmVydmlld1VSTCBhbmQgc2V0IGluIGFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBuZXcgV1NETEVsZW1lbnRJbXBsKCk7Ci0gICAgICAgICAgICB3c2RsRWxlbWVudC5zZXROYW1lKGJpbmRpbmdOYW1lKTsKLSAgICAgICAgICAgIHdzZGxFbGVtZW50LnNldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotICAgICAgICAgICAgd3NkbEVsZW1lbnQuc2V0VHlwZShXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fQklORElORyk7Ci0gICAgICAgICAgICBhbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHdzZGxEb2M7Ci0KLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8qIElmIHRoZSB3c2RsRG9jIGlzIHNldCBhdCB0aGUgcG9pbnQgb2YgdGhlIGV4Y2VwdGlvbiwgcmV0dXJuIGl0OwotICAgICAgICAgKiBvdGhlcndpc2UgcmV0dXJuIG51bGwuICovCi0gICAgICAgIHJldHVybiB3c2RsRG9jOwotICAgIH0KLSAgfQotICAKLSAgCi0gIC8qKgotICAgKiBQcm9jZXNzIGFsbCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4KLSAgICogQHJldHVybiBzdGF0dXMgY29kZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgY29uZm9ybWFuY2UgdmFsaWRhdGlvbiBwcm9jZXNzIGZhaWxlZC4KLSAgICovCi0gIHB1YmxpYyBpbnQgdmFsaWRhdGVDb25mb3JtYW5jZSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGludCBzdGF0dXNDb2RlID0gMDsKLQotICAgIFJlcG9ydCByZXBvcnQgPSBudWxsOwotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0ID0gbnVsbDsKLQotICAgIC8vIFNldCB1cCBpbml0aWFsIGFuYWx5emVyIGNvbnRleHQgYmFzZWQgb24gZW50cmllcyBpbiB0aGUgY29uZmlnIGZpbGUKLSAgICB0aGlzLmFuYWx5emVyQ29udGV4dCA9Ci0gICAgICBuZXcgQW5hbHl6ZXJDb250ZXh0KG5ldyBTZXJ2aWNlUmVmZXJlbmNlKGdldEFuYWx5emVyQ29uZmlnKCkpKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIHRoaXMucHJvZmlsZUFzc2VydGlvbnMgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmdldFByb2ZpbGVBc3NlcnRpb25zKAotICAgICAgICAgICAgICAgIGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uKCkpOwotCi0gICAgICBpZiAodGhpcy5wcm9maWxlQXNzZXJ0aW9ucyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoImNvbmZpZzIwIiwKLSAgICAgICAJCSAgICJUaGUgV1MtSSBUZXN0IEFzc2VydGlvbiBEb2N1bWVudCAoVEFEKWRvY3VtZW50IHdhcyBlaXRoZXIgbm90IGZvdW5kIG9yIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuIikpOyAgCi0gICAgICB9CQotCi0gICAgICAvLyBDcmVhdGUgcmVwb3J0IGZyb20gZG9jdW1lbnQgZmFjdG9yeQotICAgICAgcmVwb3J0ID0gZG9jdW1lbnRGYWN0b3J5Lm5ld1JlcG9ydCgpOwotICAgICAgcmVwb3J0LnNldExvY2F0aW9uKGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0UmVwb3J0TG9jYXRpb24oKSk7Ci0KLSAgICAgIC8vIENyZWF0ZSByZXBvcnQgY29udGV4dAotICAgICAgUmVwb3J0Q29udGV4dCByZXBvcnRDb250ZXh0ID0KLSAgICAgICAgbmV3IFJlcG9ydENvbnRleHQoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1RJVExFLAotICAgICAgICAgIHByb2ZpbGVBc3NlcnRpb25zLAotICAgICAgICAgIHRoaXMpOwotICAgICAgcmVwb3J0LnNldFJlcG9ydENvbnRleHQocmVwb3J0Q29udGV4dCk7Ci0KLSAgICAgIC8vIENyZWF0ZSByZXBvcnQgd3JpdGVyCi0gICAgICBSZXBvcnRXcml0ZXIgcmVwb3J0V3JpdGVyID0gZG9jdW1lbnRGYWN0b3J5Lm5ld1JlcG9ydFdyaXRlcigpOwotICAgICAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUIAotICAgICAgLy9yZXBvcnRXcml0ZXIuc2V0V3JpdGVyKG5ldyBGaWxlV3JpdGVyKGFuYWx5emVyQ29uZmlnLmdldFJlcG9ydExvY2F0aW9uKCkpKTsKLSAgICAgIHJlcG9ydFdyaXRlci5zZXRXcml0ZXIoZ2V0QW5hbHl6ZXJDb25maWcoKS5nZXRSZXBvcnRMb2NhdGlvbigpKTsKLQotICAgICAgLy8gQ3JlYXRlIHJlcG9ydGVyCi0gICAgICB0aGlzLnJlcG9ydGVyID0gbmV3IERlZmF1bHRSZXBvcnRlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0KLSAgICAgIC8vIGZldGNoIFdTREwgaWYgbm90IHNldCBpbiBjb25zdHJ1Y3RvcgotICAgICAgLy8gRmlyc3QsIGF0dGVtcHQgdG8gZ2V0IHRoZSBXU0RMIFVSSSBmcm9tIGEgVURESSB0TW9kZWwKLSAgICAgIGlmICgod3NkbERvY3VtZW50ID09IG51bGwpICYmIChnZXRBbmFseXplckNvbmZpZygpLmlzVURESVJlZmVyZW5jZVNldCgpKSkKLSAgICAgICAgICAgICAgd3NkbERvY3VtZW50ID0gZ2V0V3NkbEZyb21VZGRpKCk7Ci0KLSAgICAgIC8qIE5leHQsIHRyeSB0byB1c2UgdGhlIFdTREwgc2V0dGluZ3MgZnJvbSB0aGUgY29uZmlnIGZpbGUuICBJZiB3ZSBjYW4ndAotICAgICAgICogZmV0Y2ggdGhhdCBXU0RMLCBhbmQgdGhlIGNvbmZpZyBmaWxlIGlzIHNldCB1cCB0byB0ZXN0IGEgV1NETCwgdGhlbiB0aGUKLSAgICAgICAqIHZhbGlkYXRvciBmYWlscyBoZXJlLiAqLwotICAgICAgaWYgKCh3c2RsRG9jdW1lbnQgPT0gbnVsbCkgJiYgKGdldEFuYWx5emVyQ29uZmlnKCkuaXNXU0RMUmVmZXJlbmNlU2V0KCkpKQotICAgICAgewotICAgICAgICAgIHdzZGxEb2N1bWVudCA9IG5ldyBXU0RMRG9jdW1lbnQoZ2V0QW5hbHl6ZXJDb25maWcoKS4KLSAgICAgICAgICAgICAgICAgIGdldFdTRExMb2NhdGlvbigpKTsKLQotICAgICAgICAgIGlmICh3c2RsRG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJjb25maWcwNSIsCi0gICAgICAgICAgICAgICAgICAgICAgIldTREwgZG9jdW1lbnQgd2FzIGVpdGhlciBub3QgZm91bmQgb3IgY291bGQgbm90IGJlICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAicHJvY2Vzc2VkLiIpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLyoKLSAgICAgICAqIE9ubHkgdmFsaWRhdGUgbWVzc2FnZXMgYWdhaW5zdCBhIHdzZGwgZG9jdW1lbnQgaWYgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICAgICAqIGRvZXMgbm90IGNvbnRhaW4gc29hcCAxLjIgYmluZGluZ3MuIAotICAgICAgICovCi0JICBpZiAoV1NETFV0aWxzLmlzU09BUDEyV1NETCh3c2RsRG9jdW1lbnQpICYmIGdldEFuYWx5emVyQ29uZmlnKCkuZ2V0TG9nTG9jYXRpb24oKSAhPSBudWxsKQotCQkgIGdldEFuYWx5emVyQ29uZmlnKCkuc2V0V1NETFJlZmVyZW5jZShudWxsKTsKLQkgIGVsc2UKLQkJICBhbmFseXplckNvbnRleHQuc2V0V3NkbERvY3VtZW50KHdzZGxEb2N1bWVudCk7ICAKLQotICAgICAgLy8gU3RhcnQgd3JpdGluZyByZXBvcnQKLSAgICAgIHRoaXMucmVwb3J0ZXIuc3RhcnRSZXBvcnQoKTsKLQotICAgICAgLy8gV2FsayB0aHJvdWdoIHRoZSBhcnRpZmFjdCBlbGVtZW50cyBmcm9tIHRoZSBUQUQsIHZhbGlkYXRpbmcgZWFjaCBvbmUKLSAgICAgIHByb2ZpbGVBc3NlcnRpb25zLmdldEFydGlmYWN0TGlzdCgpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwcm9maWxlQXNzZXJ0aW9ucy5nZXRBcnRpZmFjdExpc3QoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICBpLmhhc05leHQoKTsgKSB7Ci0gICAgICAgICAgU3RyaW5nIGFydGlmYWN0VHlwZSA9IChTdHJpbmcpIGkubmV4dCgpOwotICAgICAgICAgIC8vIFNldCBjdXJyZW50IGFydGlmYWN0Ci0gICAgICAgICAgcmVwb3J0QXJ0aWZhY3QgPSBzZXRDdXJyZW50QXJ0aWZhY3QoQXJ0aWZhY3RUeXBlLmdldEFydGlmYWN0VHlwZSgKLSAgICAgICAgICAgICAgICAgIGFydGlmYWN0VHlwZSkpOwotICAgICAgICAgIHZhbGlkYXRlKHJlcG9ydEFydGlmYWN0LCBmYWN0b3J5LmdldFZhbGlkYXRvckZvckFydGlmYWN0KAotICAgICAgICAgICAgICAgICAgYXJ0aWZhY3RUeXBlKSk7Ci0gICAgICAgICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50QXJ0aWZhY3QoKTsKLSAgICAgIH0KLQotICAgICAgLy8gRmluaXNoIHRoZSBjb25mb3JtYW5jZSByZXBvcnQKLSAgICAgIHJlcG9ydGVyLmZpbmlzaFJlcG9ydCgpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICAgIFN0cmluZyBtZXNzYWdlID0KLSAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiZXJyb3IwMyIsCi0gICAgICAgICAgIlRoZSBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIHByb2Nlc3MgZmFpbGVkLiIpOwotCi0gICAgICAvLyBGaW5pc2ggcmVwb3J0Ci0gICAgICBpZiAocmVwb3J0ZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHcucHJpbnRsbihtZXNzYWdlKTsKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJleGNlcHRpb24wMSIsICJFeGNlcHRpb246ICIpCi0gICAgICAgICAgICArIGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgICBlLnByaW50U3RhY2tUcmFjZShwdyk7Ci0gICAgICAgIHJlcG9ydGVyLmZpbmlzaFJlcG9ydFdpdGhFcnJvcihzdy50b1N0cmluZygpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGUgaW5zdGFuY2VvZiBXU0lFeGNlcHRpb24pCi0gICAgICAgIHRocm93IChXU0lFeGNlcHRpb24pIGU7Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24obWVzc2FnZSwgZSk7Ci0gICAgfQotCi0gICAgaWYgKHJlcG9ydCAhPSBudWxsKQotICAgIHsKLSAgICAgIHN0YXR1c0NvZGUgPQotICAgICAgICAocmVwb3J0LmdldFN1bW1hcnlSZXN1bHQoKS5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQpCi0gICAgICAgICAgPyAwCi0gICAgICAgICAgOiAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzQ29kZTsKLSAgfQotCi0gIC8qKgotICAgKiBSdW4gdGVzdCBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LCBCYXNlVmFsaWRhdG9yIHZhbGlkYXRvcikKLSAgICAgICAgICB0aHJvd3MgV1NJRXhjZXB0aW9uIAotICB7Ci0gICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIFdTRExWYWxpZGF0b3JJbXBsKQotCXsKLSAgICAJKChXU0RMVmFsaWRhdG9ySW1wbCl2YWxpZGF0b3IpLmluaXQoYW5hbHl6ZXJDb250ZXh0LCBwcm9maWxlQXNzZXJ0aW9ucywgcmVwb3J0QXJ0aWZhY3QsIGdldEFuYWx5emVyQ29uZmlnKCksIHJlcG9ydGVyLAotICAgIAkJCWdldEFuYWx5emVyQ29uZmlnSW5kZXgoKSA9PSAwKTsKLQl9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhbGlkYXRvci5pbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFzc2VydGlvbnMsIHJlcG9ydEFydGlmYWN0LCBnZXRBbmFseXplckNvbmZpZygpLCByZXBvcnRlcik7Ci0gICAgfQotCi0gICAgaWYgKHZhbGlkYXRvci5ydW5UZXN0cygpKSB7Ci0gICAgICAgIHZhbGlkYXRvci52YWxpZGF0ZUFydGlmYWN0KCk7Ci0gICAgICAgIHZhbGlkYXRvci5jbGVhbnVwKCk7Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIHZhbGlkYXRvci5zZXRBbGxNaXNzaW5nSW5wdXQoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ29tbWFuZCBsaW5lIGludGVyZmFjZSBmb3IgdGhlIGFuYWx5emVyIHRvb2wuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgSU8gcHJvYmxlbXMgb2NjdXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGludCBzdGF0dXNDb2RlID0gMDsKLSAgICBBbmFseXplciBhbmFseXplciA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBTZXQgZG9jdW1lbnQgYnVpbGRlciBmYWN0b3J5IGNsYXNzCi0gICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoCi0gICAgICAgIFdTSVByb3BlcnRpZXMuUFJPUF9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlksCi0gICAgICAgIFdTSVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoV1NJUHJvcGVydGllcy5QUk9QX0pBWFBfRE9DVU1FTlRfRkFDVE9SWSkpOwotCi0gICAgICAvLyBTZXQgdGhlIHN5c3RlbSBwcm9wZXJ0eSBmb3IgVURESTRKIHRyYW5zcG9ydAotICAgICAgU3lzdGVtLnNldFByb3BlcnR5KAotICAgICAgICBUcmFuc3BvcnRGYWN0b3J5LlBST1BFUlRZX05BTUUsCi0gICAgICAgIFdTSVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoVHJhbnNwb3J0RmFjdG9yeS5QUk9QRVJUWV9OQU1FKSk7Ci0KLSAgICAgIC8vIENyZWF0ZSB0aGUgYW5hbHl6ZXIgb2JqZWN0Ci0gICAgICBhbmFseXplciA9IG5ldyBCYXNpY1Byb2ZpbGVBbmFseXplcihhcmdzKTsKLQotICAgICAgLy8gSGF2ZSBpdCBwcm9jZXNzIHRoZSBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucwotICAgICAgc3RhdHVzQ29kZSA9IGFuYWx5emVyLnZhbGlkYXRlQ29uZm9ybWFuY2UoKTsKLQotICAgICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgICBhbmFseXplci5wcmludE1lc3NhZ2UoCi0gICAgICAgICJjcmVhdGVkMDEiLAotICAgICAgICBudWxsLAotICAgICAgICAiQ29uZm9ybWFuY2UgcmVwb3J0IGhhcyBiZWVuIGNyZWF0ZWQuIik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHN0YXR1c0NvZGUgPSAxOwotCi0gICAgICBTdHJpbmcgbWVzc2FnZUlEOwotICAgICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlOwotICAgICAgU3RyaW5nIG1lc3NhZ2VEYXRhOwotCi0gICAgICBpZiAoKGUgaW5zdGFuY2VvZiBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24pCi0gICAgICAgIHx8IChlIGluc3RhbmNlb2YgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgLy9wcmludFN0YWNrVHJhY2UgPSBmYWxzZTsKLSAgICAgICAgbWVzc2FnZUlEID0gImVycm9yMDEiOwotICAgICAgICBkZWZhdWx0TWVzc2FnZSA9ICJBbmFseXplciBFcnJvcjoiOwotICAgICAgICBtZXNzYWdlRGF0YSA9IGUuZ2V0TWVzc2FnZSgpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vcHJpbnRTdGFja1RyYWNlID0gdHJ1ZTsKLSAgICAgICAgbWVzc2FnZUlEID0gImVycm9yMDIiOwotICAgICAgICBkZWZhdWx0TWVzc2FnZSA9ICJBbmFseXplciBTdG9wcGVkIEJ5IEV4Y2VwdGlvbjoiOwotICAgICAgICBtZXNzYWdlRGF0YSA9IGUudG9TdHJpbmcoKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGFuYWx5emVyICE9IG51bGwpCi0gICAgICAgIGFuYWx5emVyLnByaW50TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIEFuYWx5emVyLnN0YXRpY1ByaW50TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0KLSAgICAgIGlmIChhbmFseXplciAhPSBudWxsCi0gICAgICAgICYmIGFuYWx5emVyLmdldEFuYWx5emVyQ29uZmlnKCkgIT0gbnVsbAotICAgICAgICAmJiBhbmFseXplci5nZXRBbmFseXplckNvbmZpZygpLmdldFZlcmJvc2VPcHRpb24oKSkKLSAgICAgICAgZHVtcChlKTsKLSAgICB9Ci0KLSAgICAvLyBFeGl0Ci0gICAgU3lzdGVtLmV4aXQoc3RhdHVzQ29kZSk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBhcnRpZmFjdFR5cGUgYW4gQXJ0aWZhY3RUeXBlIG9iamVjdC4KLSAgICogQHJldHVybiBhIFJlcG9ydEFydGlmYWN0IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgY3JlYXRpbmcgcmVwb3J0IGFydGlmYWN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFJlcG9ydEFydGlmYWN0IHNldEN1cnJlbnRBcnRpZmFjdChBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBhcnRpZmFjdAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0ID0gcmVwb3J0ZXIuY3JlYXRlQXJ0aWZhY3QoKTsKLSAgICByZXBvcnRBcnRpZmFjdC5zZXRUeXBlKGFydGlmYWN0VHlwZSk7Ci0KLSAgICAvLyBBZGQgYXJ0aWZhY3QgdG8gcmVwb3J0Ci0gICAgdGhpcy5yZXBvcnRlci5zZXRDdXJyZW50QXJ0aWZhY3QocmVwb3J0QXJ0aWZhY3QpOwotCi0gICAgcmV0dXJuIHJlcG9ydEFydGlmYWN0OwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIHQgYSBUaHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoVGhyb3dhYmxlIHQpCi0gIHsKLSAgICB3aGlsZSAodCBpbnN0YW5jZW9mIFdTSUV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICBUaHJvd2FibGUgbmVzdGVkID0gKChXU0lFeGNlcHRpb24pIHQpLmdldFRhcmdldEV4Y2VwdGlvbigpOwotICAgICAgaWYgKG5lc3RlZCA9PSBudWxsKQotICAgICAgICBicmVhazsKLSAgICAgIGVsc2UKLSAgICAgICAgdCA9IG5lc3RlZDsKLSAgICB9Ci0gICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQ2FuZGlkYXRlSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQ2FuZGlkYXRlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmU4MjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0NhbmRpZGF0ZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMVXRpbHM7Ci0KLS8qKgotICogUHJvdmlkZSBhIG5vcm1hbGl6ZWQgc2V0IG9mIGRhdGEgcmVsYXRpbmcgdG8gdGhlIHNlcnZpY2UgdW5kZXIgdGVzdC4KLSAqIEZvciBleGFtcGxlLCB3aXRoIGVuZHBvaW50IGNvcnJlbGF0aW9uIGFuZCB3c2RsRWxlbWVudCBvZiB0eXBlICJtZXNzYWdlIiAKLSAqIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIG1hdGNoZXMgZm9yIG1vc3QgZWxlbWVudCB0eXBlcyBpbmNsdWRpbmcgV1NETCBTZXJ2aWNlLgotICogKHRob3VnaCB0aGUgb2JqZWN0aXZlIGlzIHRvIGVuc3VyZSBmaWx0ZXJpbmcgdG8gYSBzaW5nbGUgc2VydmljZSBpZiBhdCBhbGwgcG9zc2libGUpLiAKLSAqIAotICogQGF1dGhvciBndHVycmVsbAotICovCi0KLS8vIEFERDpjb3VsZCBiZSBiZXR0ZXIgYXMgYSBzaW5nbGV0b24/Ci0KLXB1YmxpYyBjbGFzcyBDYW5kaWRhdGVJbmZvCi17Ci0KLSAgLy8gTm9ybWFsaXplZCBmaXhlZCBjb3JyZWxhdGlvbiBkYXRhIGRlcml2ZWQgZnJvbSB0aGUgYW5hbHl6ZXIgY29uZmlnIGFuZCB0aGUgd3NkbCwKLSAgLy8gcmVwcmVzZW50aW5nIHdoYXQgd2Uga25vdyBhYm91dCB0aGUgc2VydmljZSBmcm9tIHRoZXNlIHR3byBzb3VyY2VzLiAgCi0gIHByaXZhdGUgRGVmaW5pdGlvbltdIGRlZmluaXRpb25zID0gbnVsbDsKLQotICBwcml2YXRlIEltcG9ydFtdIGltcG9ydHMgPSBudWxsOwotICBwcml2YXRlIFR5cGVzW10gdHlwZXMgPSBudWxsOwotCi0gIHByaXZhdGUgTWVzc2FnZVtdIG1lc3NhZ2VzID0gbnVsbDsKLSAgcHJpdmF0ZSBPcGVyYXRpb25bXSBvcGVyYXRpb25zID0gbnVsbDsKLSAgcHJpdmF0ZSBQb3J0VHlwZVtdIHBvcnRUeXBlcyA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ1tdIGJpbmRpbmdzID0gbnVsbDsKLSAgcHJpdmF0ZSBQb3J0W10gcG9ydHMgPSBudWxsOwotCi0gIHByaXZhdGUgVVJJW10gZW5kUG9pbnRzID0gbnVsbDsgLy8gbGlzdCBvYnRhaW5hYmxlIGZyb20gYSBwb3J0Ci0KLSAgcHJpdmF0ZSBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50OyAvLyByZWZlcmVuY2UgcHJvYmFibHkgbm90IGRlc2lyYWJsZSBoZXJlCi0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBDYW5kaWRhdGVJbmZvLgotICAgKiBFeHRyYWN0IG5vcm1hbGlzZWQgZW50cnkgZGF0YSBmcm9tIHdzZGwsIGFjY29yZGluZyB0byBjb25maWcgd3NkbEVsZW1lbnQgJiBzZXJ2aWNlTG9jYXRpb24KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2UgYSBTZXJ2aWNlUmVmZXJlbmNlIG9iamVjdC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBhIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGNyZWF0aW5nIENhbmRpZGF0ZUluZm8gb2JqZWN0LgotICAgKi8KLSAgcHVibGljIENhbmRpZGF0ZUluZm8oCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBBREQ6IGNoZWNrIGZvciBudWxsIGRvY3VtZW50PwotCi0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCk7Ci0KLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IHdzZGxEb2N1bWVudDsKLQotICAgIC8qCi0gICAgICogR2VuZXJhbGlzZWQgZmllbGRzIGluZGVwZW5kZW50IG9mIHdzZGxFbGVtZW50OgotICAgICAqLwotICAgIC8vIEFERDogY2hlY2sgd2hldGhlciB0aGVzZSBuZWVkIHRvIGJlIGVpdGhlciBleHBhbmRlZCBvciBmaWx0ZXJlZCBkb3duLgotICAgIC8vIEFzc3VtZSBXU0RMNEogcHVsbHMgaW50IHRoZSBmdWxsIHRyZWUgYXQgdGhlIHJvb3QgZG9jdW1lbnQgZm9yIG5vdwkJCi0gICAgLy90aGlzLmltcG9ydHMgPSB3c2RsRG9jdW1lbnQuZ2V0SW1wb3J0cygpOwotCi0gICAgLy8gLi4uIG9yIGlmIG9ubHkgZG93biB0byBmaXJzdCBsZXZlbC4uLi4KLSAgICB0aGlzLmltcG9ydHMgPQotICAgICAgKEltcG9ydFtdKSBnZXRBbGxJbXBvcnRzKAotICAgICAgICB3c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKSkudG9BcnJheShuZXcgSW1wb3J0W10gewotICAgIH0pOwotCi0gICAgLyogRGVmaW5pdGlvbnMuIAotICAgICAqIE5vdGUgdGhhdCB0aGUgdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgaXMgZm9yIHRoZSByb290IGRvYwotICAgICAqIHdoaWNoIGNvbnRhaW5zIGFsbCBXU0RMIGVsZW1lbnRzIGluIHNjb3BlIHZpYSA8aW1wb3J0PiBkZWNsYXJhdGlvbnMsCi0gICAgICogYXMgd2VsbCBhcyB0aGUgcm9vdCBkb2N1bWVudCBpdHNlbGYuIFRoZXJlZm9yZSB0aGUgc2Vjb25kIGRlZmluaXRpb25zIAotICAgICAqIGFycmF5IGVsZW1lbnQgYW5kIGFib3ZlIGFyZSByZWR1bmRhbnQsIGJ1dCAqbWF5KiBwcm92ZSB1c2VmdWwgdG8gdGhlIGFzc2VydGlvbgotICAgICAqIGNvZGUuCi0gICAgICovCi0KLSAgICB0aGlzLmRlZmluaXRpb25zID0gbmV3IERlZmluaXRpb25baW1wb3J0cy5sZW5ndGggKyAxXTsKLSAgICAvLyBhbGxvdyByb29tIGZvciByb290IGRvYwkJCi0KLSAgICB0aGlzLmRlZmluaXRpb25zWzBdID0gd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCk7IC8vIHJvb3QgZG9jdW1lbnQgICAgCi0KLSAgICAvLyBBbGxvY2F0ZSBhcnJheSBmb3IgdHlwZXMgZWxlbWVudHMKLSAgICBUeXBlc1tdIHRlbXBUeXBlcyA9IG5ldyBUeXBlc1tkZWZpbml0aW9ucy5sZW5ndGhdOwotCi0gICAgaW50IHR5cGVzQ291bnQgPSAwOwotCi0gICAgaWYgKGRlZmluaXRpb25zWzBdLmdldFR5cGVzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0ZW1wVHlwZXNbMF0gPSB0aGlzLmRlZmluaXRpb25zWzBdLmdldFR5cGVzKCk7IC8vIHJvb3QgZG9jdW1lbnQJCi0gICAgICB0eXBlc0NvdW50Kys7Ci0gICAgfQotCi0gICAgLy8gRGVmaW5pdGlvbnMgZnJvbSBvdGhlciAoaW1wb3J0ZWQpIHdzZGxzIGNvcnJlbGF0aW5nIHRvIHRoZSBjYW5kaWRhdGUKLSAgICAvLyBPbmx5IG9uZSBsZXZlbCBkb3duIGZvciBub3cKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGltcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKCgoZGVmaW5pdGlvbnNbaSArIDFdID0gaW1wb3J0c1tpXS5nZXREZWZpbml0aW9uKCkpICE9IG51bGwpCi0gICAgICAgICYmIChkZWZpbml0aW9uc1tpICsgMV0uZ2V0VHlwZXMoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgdGVtcFR5cGVzW3R5cGVzQ291bnRdID0gZGVmaW5pdGlvbnNbaSArIDFdLmdldFR5cGVzKCk7Ci0gICAgICAgIHR5cGVzQ291bnQrKzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodHlwZXNDb3VudCA+IDApCi0gICAgewotICAgICAgdGhpcy50eXBlcyA9IG5ldyBUeXBlc1t0eXBlc0NvdW50XTsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlc0NvdW50OyBpKyspCi0gICAgICAgIHRoaXMudHlwZXNbaV0gPSB0ZW1wVHlwZXNbaV07Ci0gICAgfQotICAgIC8qIAotICAgICAqIFBvcHVsYXRlIGVsZW1lbnQgaGllcmFjaHk6Ci0gICAgICogUG9ydAotICAgICAqIEJpbmRpbmcKLSAgICAgKiBQb3J0VHlwZQotICAgICAqIG9wZXJhdGlvbihzKQotICAgICAqIG1lc3NhZ2UocykKLSAgICAgKi8KLQotICAgIGlmICh3c2RsRWxlbWVudC5pc1BvcnQoKSkKLSAgICB7Ci0KLSAgICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0KLSAgICAgIC8vIFVzZSBwYXJlbnRFbGVtZW50TmFtZSB0byBxdWFsaWZ5IHRoZSBwb3J0IHdpdGhpbiBhIHNlcnZpY2UuCQkKLSAgICAgIFFOYW1lIHNlcnZpY2VOYW1lID0gd3NkbEVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudFFOYW1lKCk7Ci0gICAgICBTZXJ2aWNlW10gcyA9IHdzZGxEb2N1bWVudC5nZXRTZXJ2aWNlcygpOwotICAgICAgU3RyaW5nIHBvcnROYW1lID0gd3NkbEVsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCAmJiBwb3J0ID09IG51bGw7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHNbaV0uZ2V0UU5hbWUoKS5lcXVhbHMoc2VydmljZU5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcG9ydCA9IHNbaV0uZ2V0UG9ydChwb3J0TmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKHBvcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAiV1NETCBQb3J0IFwnIgotICAgICAgICAgICAgKyBwb3J0TmFtZQotICAgICAgICAgICAgKyAiXCcgZm9yIFNlcnZpY2UgXCciCi0gICAgICAgICAgICArIHNlcnZpY2VOYW1lCi0gICAgICAgICAgICArICJcJyBub3QgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aGlzLnBvcnRzID0gbmV3IFBvcnRbXSB7IHBvcnQgfTsKLSAgICAgICAgLy8gQUREOiBkbyBzZXJ2aWNlTG9jYXRpb24gY2hlY2sgZm9yIHNvYXBiaW5kOmFkZHJlc3M/Ci0gICAgICAgIGRlc2NlbmRlbnRzKHBvcnQpOwotICAgICAgfQotCi0gICAgICAvLyBBREQ6IHRoZSBmb2xsb3dpbmcgY291bGQgYmUgaW5zdGFudGlhdGVkIGhlcmUgaW5zdGVhZCB0byByZWZpbmUgY29udGV4dCBpbmZvCi0gICAgICAvLyBkZWZpbml0aW9ucyAKLSAgICAgIC8vIGltcG9ydHMgCi0gICAgICAvLyB0eXBlcwotCi0gICAgfQotCi0gICAgZWxzZSBpZiAod3NkbEVsZW1lbnQuaXNCaW5kaW5nKCkpCi0gICAgewotICAgICAgaWYgKHdzZGxFbGVtZW50LmdldFFOYW1lKCkgIT0gbnVsbAotICAgICAgICAmJiB3c2RsRWxlbWVudC5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICE9IG51bGwKLSAgICAgICAgJiYgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9Ci0gICAgICAgICAgd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCkuZ2V0QmluZGluZyh3c2RsRWxlbWVudC5nZXRRTmFtZSgpKTsKLQotICAgICAgICBpZiAoYmluZGluZyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJXU0RMIEJpbmRpbmcgbmFtZWQgXCciCi0gICAgICAgICAgICAgICsgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKQotICAgICAgICAgICAgICArICJcJyBub3QgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRoaXMuYmluZGluZ3MgPSBuZXcgQmluZGluZ1tdIHsgYmluZGluZyB9OwotCi0gICAgICAgICAgLy8gdGhlIHJlc3QgLi4uIGJlbG93IGJpbmRpbmc6CQotICAgICAgICAgIC8vIHBvcnRUeXBlcyBmcm9tIGJpbmRpbmcKLSAgICAgICAgICAvLyBvcGVyYXRpb25zIGZyb20gcG9ydFR5cGVzCi0gICAgICAgICAgLy8gbWVzc2FnZXMgZnJvbSBvcGVyYXRpb25zCi0gICAgICAgICAgZGVzY2VuZGVudHMoYmluZGluZyk7Ci0KLSAgICAgICAgICAvLyBhYm92ZSBiaW5kaW5nOgotICAgICAgICAgIC8vIHBvcnRzCi0gICAgICAgICAgLy8gZGVmaW5pdGlvbnMsIGltcG9ydHMsIHR5cGVzIChmdXR1cmU/KQkJCQkKLSAgICAgICAgICAvLyBhbmNlc3RvcnMoYmluZGluZ3MpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZWxzZSBpZiAod3NkbEVsZW1lbnQuaXNQb3J0VHlwZSgpKQotICAgIHsKLQotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPQotICAgICAgICB3c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKS5nZXRQb3J0VHlwZSh3c2RsRWxlbWVudC5nZXRRTmFtZSgpKTsKLSAgICAgIHRoaXMucG9ydFR5cGVzID0gbmV3IFBvcnRUeXBlW10geyBwb3J0VHlwZSB9OwotCi0gICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAiV1NETCBQb3J0VHlwZSBuYW1lZCBcJyIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKQotICAgICAgICAgICAgKyAiXCcgbm90IGZvdW5kIGluIHNlcnZpY2UgZGVzY3JpcHRpb24iKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhpcy5wb3J0VHlwZXMgPSBuZXcgUG9ydFR5cGVbXSB7IHBvcnRUeXBlIH07Ci0gICAgICAgIC8vIHRoZSByZXN0IC4uLiBiZWxvdyBwb3J0VHlwZToJCi0gICAgICAgIGRlc2NlbmRlbnRzKHBvcnRUeXBlKTsKLQotICAgICAgICAvLyBhYm92ZSBwb3J0VHlwZToKLSAgICAgICAgLy8gcG9ydHMKLSAgICAgICAgLy8gZGVmaW5pdGlvbnMsIGltcG9ydHMsIHR5cGVzIChmdXR1cmUpID8KLSAgICAgICAgLy9hbmNlc3RvcnMocG9ydFR5cGVzKTsJCQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh3c2RsRWxlbWVudC5pc09wZXJhdGlvbigpKQotICAgIHsKLQotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0gICAgICBTdHJpbmcgY29uZmlnT3BOYW1lID0gd3NkbEVsZW1lbnQuZ2V0TmFtZSgpOwotCi0gICAgICAvLyBVc2UgcGFyZW50RWxlbWVudE5hbWUgdG8gcXVhbGlmeSB0aGUgb3BlcmF0aW9uIHdpdGhpbiBhIHBvcnRUeXBlLgotICAgICAgUU5hbWUgcG9ydFR5cGVOYW1lID0gd3NkbEVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudFFOYW1lKCk7Ci0gICAgICBQb3J0VHlwZVtdIHAgPSB3c2RsRG9jdW1lbnQuZ2V0UG9ydFR5cGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHAubGVuZ3RoICYmIG9wZXJhdGlvbiA9PSBudWxsOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChwW2ldLmdldFFOYW1lKCkuZXF1YWxzKHBvcnRUeXBlTmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3c2RsNGogYXZhaWxhYmxlIG1ldGhvZCBjYWxsIGJlbG93IGltcGxpZXMgdGhhdCBvbmx5IAotICAgICAgICAgIC8vIG5hbWUraW5wdXRuYW1lK291dHB1dG5hbWUgdW5pcXVlbHkgZGVmaW5lcyBvcGVyYXRpb24hIAotICAgICAgICAgIC8vIFNpbmNlIHdlIGRvIG5vdCBoYXZlIDxpbnB1dD4gJiA8b3V0cHV0PiBuYW1lIGluZm9ybWF0aW9uCi0gICAgICAgICAgLy8gYXZhaWxhYmxlIGluIHRoZSBjb25maWcsIHVzZSB0aGlzIGluc3RlYWQgZm9yIG5vdzogLSAKLSAgICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IG9wZXJhdGlvbiB3ZSBmaW5kOgotICAgICAgICAgIEl0ZXJhdG9yIG9wSXQgPSBwW2ldLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIE9wZXJhdGlvbiBvcCA9IG51bGw7Ci0gICAgICAgICAgd2hpbGUgKG9wSXQuaGFzTmV4dCgpICYmIG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG9wID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnT3BOYW1lLmVxdWFscyhvcC5nZXROYW1lKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJObyBXU0RMIE9wZXJhdGlvbiBuYW1lZCBcJyIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKQotICAgICAgICAgICAgKyAiXCcgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBuZXcgT3BlcmF0aW9uW10geyBvcGVyYXRpb24gfTsKLQotICAgICAgICBkZXNjZW5kZW50cyhvcGVyYXRpb24pOwotICAgICAgICAvL2FuY2VzdG9ycyhvcGVyYXRpb25zKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBlbHNlIGlmICh3c2RsRWxlbWVudC5pc01lc3NhZ2UoKSkKLSAgICB7Ci0KLSAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9Ci0gICAgICAgIHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpLmdldE1lc3NhZ2Uod3NkbEVsZW1lbnQuZ2V0UU5hbWUoKSk7Ci0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJObyBXU0RMIE1lc3NhZ2UgbmFtZWQgXCciCi0gICAgICAgICAgICArIHdzZGxFbGVtZW50LmdldFFOYW1lKCkKLSAgICAgICAgICAgICsgIlwnIGZvdW5kIGluIHNlcnZpY2UgZGVzY3JpcHRpb24iKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG5ldyBNZXNzYWdlW10geyBtZXNzYWdlIH07Ci0KLSAgICAgICAgLy9hbmNlc3RvcnMobWVzc2FnZXMpOyAKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgIlVucmVjb2duaXNlZCA8V1NETEVsZW1lbnQgdHlwZT4gaW4gY29uZmlnOiAiICsgd3NkbEVsZW1lbnQuZ2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBnZXQgaW5mbyBhYm91dCB0aGUgZWZmZWN0aXZlIHNlcnZpY2UgbG9jYXRpb24gKHMpCi0gICAgLy90aGlzLmVuZFBvaW50cyA9IGRlcml2ZUVuZHBvaW50cyhhbmFseXplckNvbmZpZywgdGhpcy5wb3J0cywgdGhpcy5kZWZpbml0aW9ucyk7Ci0gICAgdGhpcy5lbmRQb2ludHMgPQotICAgICAgZGVyaXZlRW5kcG9pbnRzKHNlcnZpY2VSZWZlcmVuY2UsIHRoaXMucG9ydHMsIHRoaXMuZGVmaW5pdGlvbnMpOwotICB9Ci0KLSAgLyoqIAotICAgICAqIGFuY2VzdG9yIGNvZGUgaXMgbm90IHVzZWQgYXQgcHJlc2VudC4KLSAgICAgKiAKLSAgICAgKi8KLSAgLyogICAKLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKFBvcnRbXSBwb3J0cykgewotICAgICAJLy8gbm8gYW5jZXN0b3JzIG9mIFBvcnQgcmVxdWlyZWQgKGZvciBub3cpCi0gICAgIH0gCSAgICAKLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKEJpbmRpbmdbXSBiaW5kaW5ncykgewkgICAgCi0gICAgCQkvLyBQb3J0cyBmcm9tIEJpbmRpbmdzICAxLTItMQotICAgICAJCi0gICAgIAkvLyAqKiogY2hlYXQgZm9yIG5vdyAtIGdldCBwb3J0cyBmcm9tIGFsbCBzZXJ2aWNlcyBpbiB0aGUgd3NkbCBkb2MKLSAgICAgCS8vIEFERDogZmluZCBjb3JyZWN0IG1hcHBpbmcgYmFzZWQgb24gdGhlIHN1cHBsaWVkIGJpbmRpbmdzCi0gICAgIAlTZXJ2aWNlW10gc2VydmljZSA9IHdzZGxEb2N1bWVudC5nZXRTZXJ2aWNlcygpOwotICAgICAJSGFzaFNldCBzZXQgPSBuZXcgSGFzaFNldCgpOwotICAJCWZvciAoaW50IGk9MDsgaT5zZXJ2aWNlLmxlbmd0aDsgaSsrKSB7Ci0gIAkJCXNldC5hZGQoc2VydmljZVtpXS5nZXRQb3J0cygpKTsgIAotICAJCX0KLSAgCQkJCi0gIAkJLy8gYXNzaWduIHRoZSBwYXJlbnQgZ3JvdXAgYW5kIHByb2Nlc3MgdGhlIGdyYW5kcGFyZW50cyBpZiBhbnkJCQkJCQkJCQotICAJCWFuY2VzdG9ycyh0aGlzLnBvcnRzID0gKFBvcnRbXSlzZXQudG9BcnJheSh0aGlzLnBvcnRzID0gbmV3IFBvcnRbMF0pKTsKLSAgICAgfQotICAgICBwcm90ZWN0ZWQgdm9pZCBhbmNlc3RvcnMoUG9ydFR5cGVbXSBwb3J0VHlwZXMpIHsJICAgIAotICAgIAkJLy8gQmluZGluZ3MgZnJvbSBQb3J0VHlwZXMgIDEtMi0xCi0gICAgIAkKLSAgICAgCS8vIGFkZCBoYXZlIHRvIHN0YXJ0IHdpdGggYWxsIGJpbmRpbmdzIGluIGRvYyBhbmQgc2VhcmNoIGZvciB0aG9zZQotICAgICAJLy8gd2l0aCB0aGUgcG9ydFR5cGUgIAotICAgICAJSGFzaFNldCBzZXQgPSBuZXcgSGFzaFNldCgpOwotICAJCWZvciAoaW50IGk9MDsgaT5wb3J0VHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgCQkvLyBzZXQuYWRkKHBvcnRUeXBlc1tpXS5nZXQoKSk7ICAKLSAgCQl9Ci0gIAkJCQotICAJCS8vIGFzc2lnbiB0aGUgcGFyZW50IGdyb3VwIGFuZCBwcm9jZXNzIHRoZSBncmFuZHBhcmVudHMgaWYgYW55CQkJCQkJCQkKLSAgCQlhbmNlc3RvcnModGhpcy5iaW5kaW5ncyA9IChCaW5kaW5nW10pc2V0LnRvQXJyYXkodGhpcy5iaW5kaW5ncyA9IG5ldyBCaW5kaW5nWzBdKSk7Ci0gICAgIH0KLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKE9wZXJhdGlvbltdIG9wZXJhdGlvbnMpIHsJICAgIAotICAgIAkJLy8gUG9ydFR5cGVzIGZyb20gT3BlcmF0aW9ucyAgMS0yLTEKLSAgICAgCSAgCi0gICAgIAlIYXNoU2V0IHNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gIAkJZm9yIChpbnQgaT0wOyBpPm9wZXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgCQkJLy8gc2V0LmFkZChvcGVyYXRpb25zW2ldLmdldCgpKTsgIAotICAJCX0KLSAgCQkJCi0gIAkJLy8gYXNzaWduIHRoZSBwYXJlbnQgZ3JvdXAgYW5kIHByb2Nlc3MgdGhlIGdyYW5kcGFyZW50cyBpZiBhbnkJCQkJCQkJCQotICAJCWFuY2VzdG9ycyh0aGlzLnBvcnRUeXBlcyA9IChQb3J0VHlwZVtdKXNldC50b0FycmF5KHRoaXMucG9ydFR5cGVzID0gbmV3IFBvcnRUeXBlWzBdKSk7Ci0gICAgIH0KLSAgICAgcHJvdGVjdGVkIHZvaWQgYW5jZXN0b3JzKE1lc3NhZ2VbXSBtZXNzYWdlcykgewkgICAgCi0gICAgCQkvLyBPcGVyYXRpb25zIGZyb20gTWVzc2FnZXMgIDEtMi0xCi0gICAgIAkvLyBBREQgZml4IGl0ISAgCi0gICAgIAlIYXNoU2V0IHNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gIAkJZm9yIChpbnQgaT0wOyBpPm1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gIAkJCS8vIHNldC5hZGQobWVzc2FnZXNbaV0uZ2V0KCkpOyAgCi0gIAkJfQotICAJCQkKLSAgCQkvLyBhc3NpZ24gdGhlIHBhcmVudCBncm91cCAJCi0gIAkJdGhpcy5wb3J0VHlwZXMgPSAoUG9ydFR5cGVbXSlzZXQudG9BcnJheSh0aGlzLnBvcnRUeXBlcyA9IG5ldyBQb3J0VHlwZVswXSk7Ci0gICAgIH0KLSAgKi8KLQotICAvKioKLSAgICogRGVzY2VuZGFudCBtZXRob2QgZm9yIGNvbXBsZXRpbmcgY2FuZGlkYXRlIHNlcnZpY2UgY29udGV4dCBjcmVhdGlvbi4KLSAgICogQHBhcmFtIHBvcnQgIGEgUG9ydCBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcG9ydCBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZGVzY2VuZGVudHMoUG9ydCBwb3J0KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBCaW5kaW5nIGZyb20gUG9ydCAgMS0yLTEKLQotICAgIGlmIChwb3J0ID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIGEgUG9ydCB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5iaW5kaW5ncyA9IG5ldyBCaW5kaW5nW10geyBwb3J0LmdldEJpbmRpbmcoKX07Ci0gICAgICBpZiAodGhpcy5iaW5kaW5nc1swXSAhPSBudWxsKQotICAgICAgewotICAgICAgICAvKiBBc3NpZ24gdGhlIGNoaWxkIGdyb3VwIGFuZCBwcm9jZXNzIHRoZSBncmFuZGNoaWxkcmVuIGlmIGFueS4KLSAgICAgICAgKiBOdWxsIGFyZ3VtZW50IHZhbHVlIHBhc3NlZCBpbnRvIHRoZSBmb2xsb3dpbmcgbWV0aG9kIHdvdWxkIAotICAgICAgICAqIHN1Z2dlc3QgYSBXU0RMIGRlZmluaXRpb24gaW5jb25zaXN0ZW5jeQotICAgICAgICAqIHdoaWNoIHdpbGwgYmUgcGlja2VkIHVwIGR1cmluZyBEZXNjcmlwdGlvbiBBcnRpZmFjdCBUQSB0ZXN0aW5nLgotICAgICAgICAqLwotICAgICAgICBkZXNjZW5kZW50cyh0aGlzLmJpbmRpbmdzWzBdKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRGVzY2VuZGFudCBtZXRob2QgZm9yIGNvbXBsZXRpbmcgY2FuZGlkYXRlIHNlcnZpY2UgY29udGV4dCBjcmVhdGlvbi4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYmluZGluZyBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZGVzY2VuZGVudHMoQmluZGluZyBiaW5kaW5nKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBwb3J0VHlwZSBmcm9tIEJpbmRpbmcgMS0yLTEKLQotICAgIGlmIChiaW5kaW5nID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIGEgQmluZGluZyB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5wb3J0VHlwZXMgPSBuZXcgUG9ydFR5cGVbXSB7IGJpbmRpbmcuZ2V0UG9ydFR5cGUoKX07Ci0gICAgICBpZiAodGhpcy5wb3J0VHlwZXNbMF0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLyogQXNzaWduIHRoZSBjaGlsZCBncm91cCBhbmQgcHJvY2VzcyB0aGUgZ3JhbmRjaGlsZHJlbiBpZiBhbnkuCi0gICAgICAgIAkqIE51bGwgYXJndW1lbnQgdmFsdWUgcGFzc2VkIGludG8gdGhlIGZvbGxvd2luZyBtZXRob2Qgd291bGQgCi0gICAgICAgIAkqIHN1Z2dlc3QgYSBXU0RMIGRlZmluaXRpb24gaW5jb25zaXN0ZW5jeQotICAgICAgICAJKiB3aGljaCB3aWxsIGJlIHBpY2tlZCB1cCBkdXJpbmcgRGVzY3JpcHRpb24gQXJ0aWZhY3QgVEEgdGVzdGluZy4KLSAgICAgICAgCSovCi0gICAgICAgIGRlc2NlbmRlbnRzKHRoaXMucG9ydFR5cGVzWzBdKTsKLQotICAgICAgICAvLyBHZXQgYW55IG1lc3NhZ2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgZnJvbSBoZWFkZXJzIGFuZCBoZWFkZXJmYXVsdHMKLQotICAgICAgICAvLyBHZXQgcmVmZXJlbmNlIHRvIGRlZmluaXRpb24KLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZGVmaW5pdGlvbnNbMF07Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1lc3NhZ2VzIGFscmVhZHksIHRoZW4gZ2V0IHRoZW0gYXMgYSBjb2xsZWN0aW9uCi0gICAgICAgIEhhc2hTZXQgbWVzc2FnZVNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIGlmIChtZXNzYWdlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtZXNzYWdlU2V0LmFkZChtZXNzYWdlc1tpXSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBtZXNzYWdlcyB0aGF0IGFyZSByZWZlcmVuY2VkIG9ubHkgYnkgYSBiaW5kaW5nIAotICAgICAgICBIYXNoU2V0IGJpbmRpbmdNZXNzYWdlcyA9IFdTRExVdGlscy5maW5kTWVzc2FnZXMoZGVmaW5pdGlvbiwgYmluZGluZyk7Ci0KLSAgICAgICAgLy8gQWRkIHRoZXNlIG1lc3NhZ2VzIHRvIHRoZSBjb21wbGV0ZSBtZXNzYWdlIGxpc3QgIAotICAgICAgICBtZXNzYWdlU2V0LmFkZEFsbChiaW5kaW5nTWVzc2FnZXMpOwotCi0gICAgICAgIC8vIENyZWF0ZSBhcnJheSBmcm9tIG1lc3NhZ2Ugc2V0Ci0gICAgICAgIHRoaXMubWVzc2FnZXMgPQotICAgICAgICAgIChNZXNzYWdlW10pIG1lc3NhZ2VTZXQudG9BcnJheSh0aGlzLm1lc3NhZ2VzID0gbmV3IE1lc3NhZ2VbMF0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBEZXNjZW5kYW50IG1ldGhvZCBmb3IgY29tcGxldGluZyBjYW5kaWRhdGUgc2VydmljZSBjb250ZXh0IGNyZWF0aW9uLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgIGEgUG9ydFR5cGUgb2JqZWN0Ci0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHBvcnRUeXBlIGlzIG51bGwuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBkZXNjZW5kZW50cyhQb3J0VHlwZSBwb3J0VHlwZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gT3BlcmF0aW9ucyBmcm9tIFBvcnRUeXBlIDEtMi1uCi0KLSAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvcjogZXhwZWN0ZWQgYSBQb3J0VHlwZSB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhpcy5vcGVyYXRpb25zID0KLSAgICAgICAgKE9wZXJhdGlvbltdKSAocG9ydFR5cGUKLSAgICAgICAgICAuZ2V0T3BlcmF0aW9ucygpCi0gICAgICAgICAgLnRvQXJyYXkodGhpcy5vcGVyYXRpb25zID0gbmV3IE9wZXJhdGlvblswXSkpOwotICAgICAgaWYgKHRoaXMub3BlcmF0aW9ucy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBkZXNjZW5kZW50cyh0aGlzLm9wZXJhdGlvbnMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgICAqIERlc2NlbmRhbnQgbWV0aG9kIGZvciBjb21wbGV0aW5nIGNhbmRpZGF0ZSBzZXJ2aWNlIGNvbnRleHQgY3JlYXRpb24uCi0gICAgICogQHBhcmFtIG9wZXJhdGlvbiAgYSBPcGVyYXRpb24gb2JqZWN0Ci0gICAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgb3BlcmF0aW9uIGlzIG51bGwuCi0gICAgICovCi0gIHByb3RlY3RlZCB2b2lkIGRlc2NlbmRlbnRzKE9wZXJhdGlvbiBvcGVyYXRpb24pIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIE1lc3NhZ2VzIGZyb20gT3BlcmF0aW9uCi0KLSAgICBpZiAob3BlcmF0aW9uID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIGFuIE9wZXJhdGlvbiB2YWx1ZSIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZGVzY2VuZGVudHMobmV3IE9wZXJhdGlvbltdIHsgb3BlcmF0aW9uIH0pOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBEZXNjZW5kYW50IG1ldGhvZCBmb3IgY29tcGxldGluZyBjYW5kaWRhdGUgc2VydmljZSBjb250ZXh0IGNyZWF0aW9uLgotICAgKiBAcGFyYW0gb3BlcmF0aW9ucyAgYW4gYXJyYXkgb2Ygb3BlcmF0aW9ucy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgb3BlcmF0aW9ucyBpcyBudWxsLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZGVzY2VuZGVudHMoT3BlcmF0aW9uW10gb3BlcmF0aW9ucykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gTWVzc2FnZXMgZnJvbSBPcGVyYXRpb25zIDEtMi1uCi0KLSAgICBpZiAob3BlcmF0aW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkludGVybmFsIGVycm9yOiBleHBlY3RlZCBhbiBPcGVyYXRpb25bXSB2YWx1ZSIpOwotICAgIH0KLQotICAgIEhhc2hTZXQgc2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG9wZXJhdGlvbnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKG9wZXJhdGlvbnNbaV0uZ2V0SW5wdXQoKSAhPSBudWxsKQotICAgICAgICBzZXQuYWRkKG9wZXJhdGlvbnNbaV0uZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkpOyAvLzEtMi0xCi0gICAgICBpZiAob3BlcmF0aW9uc1tpXS5nZXRPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICBzZXQuYWRkKG9wZXJhdGlvbnNbaV0uZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpKTsgLy8xLTItMQotCi0gICAgICAvLyBnZXQgbWVzc2FnZXMgYXNzb2NpYXRlZCB3aXRoIGZhdWx0cyBmb3IgdGhpcyBvcGVyYXRpb24gCi0gICAgICAvLyAxLTItbgotICAgICAgSXRlcmF0b3IgaXQgPSBvcGVyYXRpb25zW2ldLmdldEZhdWx0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBzZXQuYWRkKCgoRmF1bHQpIGl0Lm5leHQoKSkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhpcy5tZXNzYWdlcyA9IChNZXNzYWdlW10pIHNldC50b0FycmF5KHRoaXMubWVzc2FnZXMgPSBuZXcgTWVzc2FnZVswXSk7Ci0gICAgLy8gbm8gZGVzY2VuZGVudHMgb2YgbWVzc2FnZXMgc28gc3RvcC4KLSAgfQotCi0gIC8qKgotICAgKiBQcm92aWRlIGEgcmVjdXJzaXZlIG5vbi1yZXBlYXRpbmcgbGlzdCBvZiBpbXBvcnRzIGZvciB0aGUgc3BlY2lmaWVkCi0gICAqIFdTREwgZG9jdW1lbnQgZGVmaW5pdGlvbi4KLSAgICovCi0gIC8qICAgcHJpdmF0ZSBIYXNoU2V0IGdldEFsbEltcG9ydHMoRGVmaW5pdGlvbiByb290RGVmKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLSAgICAgCQotICAgICAJSGFzaFNldCBpbXBvcnRTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgICAJCi0gICAgIAlDb2xsZWN0aW9uIGltcG9ydExpc3QgPSAgcm9vdERlZi5nZXRJbXBvcnRzKCkudmFsdWVzKCk7Ci0gICAgIAlJdGVyYXRvciBpID0gaW1wb3J0TGlzdC5pdGVyYXRvcigpOwotICAgICAJCi0gICAgIAl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLSAgICAgCQlJbXBvcnQgbmV4dEltcG9ydCA9IChJbXBvcnQpKGkubmV4dCgpKTsKLSAgICAgCQlpZiAobmV4dEltcG9ydCAhPSBudWxsKSB7Ci0gICAgIAkJCS8vIGl0cyBhIHdzZGwgZG9jdW1lbnQKLSAgICAgCQkJaW1wb3J0U2V0LmFkZEFsbChnZXRBbGxJbXBvcnRzKG5leHRJbXBvcnQuZ2V0RGVmaW5pdGlvbigpKSk7Ci0gICAgIAkJfSAgIAkJCQotICAgICAJfQotICAgICAJCi0gICAgIAlyZXR1cm4gKGltcG9ydFNldCk7Ci0gICAgIH0KLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRBbGxJbXBvcnRzKERlZmluaXRpb24gcm9vdERlZikgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBIYXNoU2V0IGltcG9ydFNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgaW1wb3J0U2V0ID0gIGdldEFsbEltcG9ydHMobmV3IEFycmF5TGlzdCgpLCByb290RGVmKTsKLSAgICByZXR1cm4gKGltcG9ydFNldCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSGFzaFNldCBnZXRBbGxJbXBvcnRzKExpc3QgYWxyZWFkeVByb2Nlc3NlZERlZmluaXRpb25zLCBEZWZpbml0aW9uIHJvb3REZWYpIAotICB7Ci0JSGFzaFNldCBpbXBvcnRTZXQgPSBuZXcgSGFzaFNldCgpOwotCWlmICgocm9vdERlZiAhPSBudWxsKSAmJiAoIWFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucy5jb250YWlucyhyb290RGVmKSkpCi0JewotICAgICAgYWxyZWFkeVByb2Nlc3NlZERlZmluaXRpb25zLmFkZChyb290RGVmKTsJCi0JICBNYXAgaW1wb3J0TWFwID0gcm9vdERlZi5nZXRJbXBvcnRzKCk7Ci0gICAgICBJdGVyYXRvciBpID0gaW1wb3J0TWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBuZXh0SW1wb3J0TGlzdCA9IChMaXN0KSAoaS5uZXh0KCkpOwotICAgICAgICBJdGVyYXRvciBsaXN0SXQgPSBuZXh0SW1wb3J0TGlzdC5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAobGlzdEl0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEltcG9ydCBuZXh0SW1wb3J0ID0gKEltcG9ydCkgbGlzdEl0Lm5leHQoKTsKLSAgICAgICAgICBpZiAobmV4dEltcG9ydCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltcG9ydFNldC5hZGQobmV4dEltcG9ydCk7Ci0gICAgICAgICAgICBEZWZpbml0aW9uIGRlZiA9IG5leHRJbXBvcnQuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgIAkgICAgSGFzaFNldCBuZXN0ZWRJbXBvcnRzID0gZ2V0QWxsSW1wb3J0cyhhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMsIGRlZik7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGogPSBuZXN0ZWRJbXBvcnRzLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgICAgICAgICAgaW1wb3J0U2V0LmFkZChqLm5leHQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbXBvcnRTZXQ7Ci0gIH0KLQotICAvKioKLSAgICogZ2V0IGFsbCBzZXJ2aWNlIGxvY2F0aW9uIGVuZHBvaW50IHZhbHVlcwotICAgKiByZWxldmFudCB0byB0aGUgc2VydmljZSB1bmRlciB0ZXN0LgotICAgKiAKLSAgICogSWYgdGhlIHNlcnZpY2UgbG9jYXRpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBjb25maWcgd2UgdXNlCi0gICAqIGp1c3QgdGhhdC4KLSAgICogT3RoZXJ3aXNlLCBpZiB0aGUgcG9ydCBpcyBzcGVjaWZpZWQsIHdlIGdldCBhbGwgZW5kcG9pbnRzCi0gICAqIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBvcnQuCi0gICAqIElmIHdlIGhhdmUgbmVpdGhlciB0aGUgc2VydmljZSBsb2NhdGlvbiB2YWx1ZSBvciB0aGUgcG9ydCwKLSAgICogdGhlbiBhbGwgZW5kcG9pbnRzIGluIHRoZSBkZWZpbml0aW9uIGFyZSB1c2VkLgotICAgKi8KLSAgcHJpdmF0ZSBVUklbXSBkZXJpdmVFbmRwb2ludHMoCi0gIC8vQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsIAotICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsIFBvcnRbXSBwb3J0cywgRGVmaW5pdGlvbltdIGRlZmluaXRpb25zKQotICB7Ci0KLSAgICBVUklbXSBlbmRwID0gbnVsbDsKLSAgICAvL1BvcnQgcG9ydCA9IG51bGw7CQotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBzZXJ2aWNlTG9jYXRpb24gPSBudWxsOwotICAgICAgLy8gdHJ5IHNlcnZpY2UgbG9jYXRpb24uLi4KLSAgICAgIC8vaWYgKChzZXJ2aWNlTG9jYXRpb24gPSBhbmFseXplckNvbmZpZy5nZXRTZXJ2aWNlTG9jYXRpb24oKSkgIT0gbnVsbCkgeyAgICAgIAotICAgICAgaWYgKChzZXJ2aWNlTG9jYXRpb24gPSBzZXJ2aWNlUmVmZXJlbmNlLmdldFNlcnZpY2VMb2NhdGlvbigpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBlbmRwID0gbmV3IFVSSVtdIHsgbmV3IFVSSShzZXJ2aWNlTG9jYXRpb24pfTsKLSAgICAgIH0KLSAgICAgIC8vZWxzZSBpZiAoYW5hbHl6ZXJDb25maWcuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnQoKSkgewotICAgICAgZWxzZSBpZiAoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmlzUG9ydCgpKQotICAgICAgewotICAgICAgICBpZiAocG9ydHMubGVuZ3RoICE9IDEpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvciAtIGV4cGVjdGVkIDEtZWxlbWVudCBQb3J0IGFycmF5Iik7Ci0gICAgICAgIH0KLSAgICAgICAgLy9lbHNlIHsKLSAgICAgICAgLy8JcG9ydCA9IHBvcnRzWzBdOyAvLyBpZiBQb3J0IHdhcyBnaXZlbiBpbiBjb25maWcsIHRoZXJlIGlzIGp1c3Qgb25lCi0gICAgICAgIC8vfQotICAgICAgICAvL1FOYW1lIHNvYXBBZGRyZXNzID0gbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiYWRkcmVzcyIpOwotICAgICAgICBJdGVyYXRvciBpID0gcG9ydHNbMF0uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpICYmIHNlcnZpY2VMb2NhdGlvbiA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaS5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGV4dEVsZW0gaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL2lmIChleHRFbC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhzb2FwQWRkcmVzcykgewotICAgICAgICAgICAgLy8gdGhpcyBlbGVtZW50IGlzIG91ciBTT0FQQWRkcmVzcyAtIGdldCB0aGUgbG9jYXRpb24KLSAgICAgICAgICAgIHNlcnZpY2VMb2NhdGlvbiA9ICgoU09BUEFkZHJlc3MpIGV4dEVsZW0pLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgICBlbmRwID0gbmV3IFVSSVtdIHsgbmV3IFVSSShzZXJ2aWNlTG9jYXRpb24pfTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgLy8gbm8gcG9ydCBpbmZvIGZyb20gY29uZmlnLCBzbyBzdXBwbHkgYWxsIGluIGRvY3VtZW50Ci0gICAgICAgIC8vIFFOYW1lIHNvYXBBZGRyZXNzID0gbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiYWRkcmVzcyIpOwotICAgICAgICBIYXNoU2V0IGVuZHBvaW50U2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgSXRlcmF0b3IgaSA9IGRlZmluaXRpb25zWzBdLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGkubmV4dCgpOwotICAgICAgICAgIGlmIChleHRFbGVtIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9pZiAoZXh0RWwuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoc29hcEFkZHJlc3MpIHsKLSAgICAgICAgICAgIC8vIHRoaXMgZWxlbWVudCBpcyBvdXIgU09BUEFkZHJlc3MgLSBnZXQgdGhlIGxvY2F0aW9uCi0gICAgICAgICAgICBlbmRwb2ludFNldC5hZGQoKChTT0FQQWRkcmVzcykgZXh0RWxlbSkuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIENvbnZlcnQgdGhlIGRlcml2ZWQgTGlzdCB0byBhIFVSSSBhcnJheQotICAgICAgICBlbmRwID0gKFVSSVtdKSBlbmRwb2ludFNldC50b0FycmF5KGVuZHAgPSBuZXcgVVJJWzBdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIGVuZHA7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgYmluZGluZy4KLSAgICogQHJldHVybiBCaW5kaW5nCi0gICAqLwotICBwdWJsaWMgQmluZGluZ1tdIGdldEJpbmRpbmdzKCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlbmRQb2ludHMuCi0gICAqIEByZXR1cm4gVVJJW10KLSAgICovCi0gIHB1YmxpYyBVUklbXSBnZXRFbmRQb2ludHMoKQotICB7Ci0gICAgLy8gZ2V0IGxpc3Qgb2YgbWF0Y2hpbmcgZW5kcG9pbnQocykgYXNzb2NpYXRlZCB3aXRoIHNlcnZpY2UuCi0gICAgcmV0dXJuIGVuZFBvaW50czsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGVuZFBvaW50cyBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGhvc3QgYW5kIHBvcnQuCi0gICogQHBhcmFtIGhvc3RBbmRQb3J0ICBob3N0IGFuZCBwb3J0IGxvY2F0aW9uLgotICAqIEByZXR1cm4gVVJJW10gaWYgbWF0Y2hlZCwgbnVsbCBvdGhlcndpc2UuCi0gICovCi0gIHB1YmxpYyBVUklbXSBnZXRFbmRQb2ludHMoU3RyaW5nIGhvc3RBbmRQb3J0KQotICB7Ci0gICAgLy8gZ2V0IGxpc3Qgb2YgbWF0Y2hpbmcgZW5kcG9pbnRzIGFzc29jaWF0ZWQgd2l0aCBzZXJ2aWNlLAotICAgIC8vIGhhdmluZyB0aGUgc3BlY2lmaWVkIGhvc3QgYW5kIHBvcnQgY29uZmlndXJhdGlvbgotICAgIFN0cmluZyBwb3J0OwotCi0gICAgVmVjdG9yIG1hdGNoZWRFbmRwb2ludHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRQb2ludHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gUEI6IElmIHRoZSBlbmRwb2ludCBkb2VzIG5vdCBjb250YWluIGEgcG9ydCBudW1iZXIsIHRoZW4gZGVmYXVsdCBpdCB0byAiODAiCi0gICAgICBwb3J0ID0KLSAgICAgICAgKGVuZFBvaW50c1tpXS5nZXRQb3J0KCkgPT0gLTEpCi0gICAgICAgICAgPyAiODAiCi0gICAgICAgICAgOiBTdHJpbmcudmFsdWVPZihlbmRQb2ludHNbaV0uZ2V0UG9ydCgpKTsKLSAgICAgIGlmIChob3N0QW5kUG9ydC5lcXVhbHMoZW5kUG9pbnRzW2ldLmdldEhvc3QoKSArICI6IiArIHBvcnQpKQotICAgICAgewotICAgICAgICBtYXRjaGVkRW5kcG9pbnRzLmFkZChlbmRQb2ludHNbaV0pOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKFVSSVtdKSBtYXRjaGVkRW5kcG9pbnRzLnRvQXJyYXkobmV3IFVSSVswXSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIE9wZXJhdGlvbgotICAgKi8KLSAgcHVibGljIE9wZXJhdGlvbltdIGdldE9wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcG9ydFR5cGUuCi0gICAqIEByZXR1cm4gUG9ydFR5cGUKLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZVtdIGdldFBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBwb3J0VHlwZXM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBob3N0QW5kUG9ydCBtYXRjaGVzIGF0IGxlYXN0IG9uZSBjb250ZXh0IGVuZHBvaW50LgotICAgKiBAcGFyYW0gaG9zdEFuZFBvcnRTdHJpbmcgYSBob3N0IGFuZCBwb3J0IGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGhvc3RBbmRQb3J0IG1hdGNoZXMgYXQgbGVhc3Qgb25lIGNvbnRleHQgZW5kcG9pbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGdpdmVuIGhvc3RhbmRQb3J0IFN0cmluZyBkb2VzIG5vdCBjb252ZXJ0IHRvIFVSSS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0hvc3RBbmRQb3J0KFN0cmluZyBob3N0QW5kUG9ydFN0cmluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgVVJJIGhvc3RBbmRQb3J0OwotICAgIHRyeQotICAgIHsKLSAgICAgIGhvc3RBbmRQb3J0ID0gbmV3IFVSSShob3N0QW5kUG9ydFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQ291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIFVSSTogIiArIGhvc3RBbmRQb3J0U3RyaW5nKTsKLSAgICB9Ci0gICAgU3RyaW5nIGhvc3QgPSBob3N0QW5kUG9ydC5nZXRIb3N0KCk7Ci0gICAgaW50IHBvcnQgPSBob3N0QW5kUG9ydC5nZXRQb3J0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmVuZFBvaW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAodGhpcy5lbmRQb2ludHNbaV0uZ2V0SG9zdCgpLmVxdWFscyhob3N0KQotICAgICAgICAmJiB0aGlzLmVuZFBvaW50c1tpXS5nZXRQb3J0KCkgPT0gcG9ydCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsgLy8gZm9yIG5vdwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGRlZmluaXRpb25zLgotICAgKiBAcmV0dXJuIERlZmluaXRpb25bXQotICAgKi8KLSAgcHVibGljIERlZmluaXRpb25bXSBnZXREZWZpbml0aW9ucygpCi0gIHsKLSAgICByZXR1cm4gZGVmaW5pdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW1wb3J0cy4KLSAgICogQHJldHVybiBJbXBvcnRbXQotICAgKi8KLSAgcHVibGljIEltcG9ydFtdIGdldEltcG9ydHMoKQotICB7Ci0gICAgcmV0dXJuIGltcG9ydHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gTWVzc2FnZVtdCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVtdIGdldE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwb3J0cy4KLSAgICogQHJldHVybiBQb3J0W10KLSAgICovCi0gIHB1YmxpYyBQb3J0W10gZ2V0UG9ydHMoKQotICB7Ci0gICAgcmV0dXJuIHBvcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBvcnRUeXBlcy4KLSAgICogQHJldHVybiBQb3J0VHlwZVtdCi0gICAqLwotICBwdWJsaWMgUG9ydFR5cGVbXSBnZXRQb3J0VHlwZXMoKQotICB7Ci0gICAgcmV0dXJuIHBvcnRUeXBlczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB0eXBlcy4KLSAgICogQHJldHVybiBUeXBlc1tdCi0gICAqLwotICBwdWJsaWMgVHlwZXNbXSBnZXRUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gdHlwZXM7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHdzZGxEb2N1bWVudC4KLSAgICogQHJldHVybiBXU0RMRG9jdW1lbnQKLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQgZ2V0V3NkbERvY3VtZW50KCkKLSAgewotICAgIHJldHVybiB3c2RsRG9jdW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgdHlwZXMgZWxlbWVudC4KLSAgICogQHBhcmFtIHR5cGVzIGEgVHlwZXMgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgdHlwZXMgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oVHlwZXMgdHlwZXMpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgIFR5cGVzIGNoZWNrVHlwZXM7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmluaXRpb25zLmxlbmd0aCAmJiBkZWZpbml0aW9uID09IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoKChjaGVja1R5cGVzID0gZGVmaW5pdGlvbnNbaV0uZ2V0VHlwZXMoKSkgIT0gbnVsbCkKLSAgICAgICAgJiYgKGNoZWNrVHlwZXMuZXF1YWxzKHR5cGVzKSkpCi0gICAgICB7Ci0gICAgICAgIGRlZmluaXRpb24gPSBkZWZpbml0aW9uc1tpXTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBiaW5kaW5nIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBiaW5kaW5nIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmluaXRpb25zLmxlbmd0aCAmJiBkZWZpbml0aW9uID09IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZGVmaW5pdGlvbnNbaV0uZ2V0QmluZGluZyhiaW5kaW5nLmdldFFOYW1lKCkpICE9IG51bGwpCi0gICAgICAgIGRlZmluaXRpb24gPSBkZWZpbml0aW9uc1tpXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBwb3J0VHlwZSBlbGVtZW50LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgYSBQb3J0VHlwZSBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBwb3J0VHlwZSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbihQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmluaXRpb25zLmxlbmd0aCAmJiBkZWZpbml0aW9uID09IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZGVmaW5pdGlvbnNbaV0uZ2V0UG9ydFR5cGUocG9ydFR5cGUuZ2V0UU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgICAgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zW2ldOwotICAgIH0KLQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgTWVzc2FnZSBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbihNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWZpbml0aW9ucy5sZW5ndGggJiYgZGVmaW5pdGlvbiA9PSBudWxsOyBpKyspCi0gICAgewotICAgICAgaWYgKGRlZmluaXRpb25zW2ldLmdldE1lc3NhZ2UobWVzc2FnZS5nZXRRTmFtZSgpKSAhPSBudWxsKQotICAgICAgICBkZWZpbml0aW9uID0gZGVmaW5pdGlvbnNbaV07Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvRW52aXJvbm1lbnRJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9FbnZpcm9ubWVudEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZWI0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9FbnZpcm9ubWVudEluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlhNTEluZm87Ci0KLS8qKgotICogVGhpcyBjbGFzcyBtYWludGFpbnMgdGhlIEVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRW52aXJvbm1lbnRJbmZvIGltcGxlbWVudHMgWE1MSW5mbwotewotICAvKioKLSAgICogTG9nIHRpbWVzdGFtcC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9nVGltZXN0YW1wID0gbnVsbDsKLQotICAvKioKLSAgICogTW9uaXRvciBjb25maWcgY29tbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbW9uaXRvckNvbmZpZ0NvbW1lbnQgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgb2JqZWN0LgotICAgKiBAcGFyYW0gbG9nVGltZXN0YW1wIHRoZSBsb2cgdGltZXN0YW1wLgotICAgKiBAcGFyYW0gbW9uaXRvckNvbmZpZ0NvbW1lbnQgdGhlIE1vbml0b3IgY29uZmlnIGNvbW1lbnQuCi0gICAqLwotICBwdWJsaWMgRW52aXJvbm1lbnRJbmZvKFN0cmluZyBsb2dUaW1lc3RhbXAsIFN0cmluZyBtb25pdG9yQ29uZmlnQ29tbWVudCkKLSAgewotICAgIHRoaXMubG9nVGltZXN0YW1wID0gbG9nVGltZXN0YW1wOwotICAgIHRoaXMubW9uaXRvckNvbmZpZ0NvbW1lbnQgPSBtb25pdG9yQ29uZmlnQ29tbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlhNTEluZm8jdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoIW5zTmFtZS5lcXVhbHMoIiIpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIFN0YXJ0IGVsZW1lbnQKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9MT0cgKyAiICIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAgKyAiPVwiIiArIHRoaXMubG9nVGltZXN0YW1wICsgIlwiLz4iKTsKLQotICAgIHB3LnByaW50KAotICAgICAgIiAgICAgICAgPCIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTE9HCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVAotICAgICAgICArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy5tb25pdG9yQ29uZmlnQ29tbWVudCk7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgICAgICAgIDwvIgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9MT0cKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9DT01NRU5UCi0gICAgICAgICsgIj4iKTsKLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgIDwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPRyArICI+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9TZXJ2aWNlUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9TZXJ2aWNlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3M2U0ODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvU2VydmljZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gcHJvY2VzcyBkZXNjcmlwdGlvbiB0ZXN0IGFzc2VydGlvbnMuICBUaGUgaW5mcm9tYXRpb24KLSAqIGluIHRoaXMgb2JqZWN0IHdpbGwgYmUgZGVyaXZlZCBmcm9tIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIFVEREkgZW50cmllcywgb3IgdGhlIFdTREwgcG9ydCBlbGVtZW50LiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VSZWZlcmVuY2UKLXsKLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IHdzZGxFbGVtZW50OwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxMb2NhdGlvbjsKLSAgcHJvdGVjdGVkIFN0cmluZyBzZXJ2aWNlTG9jYXRpb247Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBzZXJ2aWNlIHJlZmVyZW5jZSB3aXRob3V0IHJlZmVyZW5jZXMuICBBbGwgb2YgdGhlbSB3aWxsIGJlIHNldCBsYXRlciBhcyB0ZXN0IGFzc2VydGlvbnMgYXJlIAotICAgKiBiZWluZyBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgU2VydmljZVJlZmVyZW5jZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgc2VydmljZSByZWZlcmVuY2UgZnJvbSBlbnRyaWVzIHNwZWNpZmllZCBpbiB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuICBUaGlzIGluZm9ybWF0aW9uIG1heSBpbmNsdWRlCi0gICAqIHRoZSBpbmZvcm1hdGlvbiBleHRyYWN0ZWQgZnJvbSB0aGUgd3NkbEVsZW1lbnQsIHdzZGxVUkkgYW5kIHNlcnZpY2VMb2NhdGlvbiBlbGVtZW50cy4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnIGFuIEFuYWx5emVyQ29uZmlnIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlUmVmZXJlbmNlKEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnKQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudCA9IGFuYWx5emVyQ29uZmlnLmdldFdTRExFbGVtZW50KCk7Ci0gICAgdGhpcy53c2RsTG9jYXRpb24gPSBhbmFseXplckNvbmZpZy5nZXRXU0RMTG9jYXRpb24oKTsKLSAgICB0aGlzLnNlcnZpY2VMb2NhdGlvbiA9IGFuYWx5emVyQ29uZmlnLmdldFNlcnZpY2VMb2NhdGlvbigpOwotCi0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBXU0RMIGVsZW1lbnQgd2hlcmUgYW5hbHlzaXMgc2hvdWxkIGJlZ2luLgotICAgKiBAcmV0dXJuIGhlIFdTREwgZWxlbWVudCB3aGVyZSBhbmFseXNpcyBzaG91bGQgYmVnaW4uCi0gICAqIEBzZWUgI3NldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBXU0RMIGVsZW1lbnQgd2hlcmUgYW5hbHlzaXMgc2hvdWxkIGJlZ2luLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgdGhlIFdTREwgZWxlbWVudCB3aGVyZSBhbmFseXNpcyBzaG91bGQgYmVnaW4uCi0gICAqIEBzZWUgI2dldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRXU0RMTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLndzZGxMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHdzZGxMb2NhdGlvbiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRXU0RMTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKQotICB7Ci0gICAgdGhpcy53c2RsTG9jYXRpb24gPSB3c2RsTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdlYiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdlYiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRTZXJ2aWNlTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnNlcnZpY2VMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgV2ViIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBzZXJ2aWNlTG9jYXRpb24gZWIgc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0U2VydmljZUxvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTG9jYXRpb24oU3RyaW5nIHNlcnZpY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMuc2VydmljZUxvY2F0aW9uID0gc2VydmljZUxvY2F0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQW5hbHl6ZXJDb25maWcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGEyMTk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWc7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgYW5hbHp5ZXIgY29uZmlndXJhdGlvbiBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQW5hbHl6ZXJDb25maWcgZXh0ZW5kcyBXU0lEb2N1bWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQ09ORklHOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIENvcnJlbGF0aW9uIHR5cGVzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09SUkVMQVRJT05fVFlQRV9PUEVSQVRJT04gPSAib3BlcmF0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09SUkVMQVRJT05fVFlQRV9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09SUkVMQVRJT05fVFlQRV9FTkRQT0lOVCA9ICJlbmRwb2ludCI7Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgYW5hbHl6ZXIgY29uZmlnLgotICAgKiBAcGFyYW0gbWVzc2FnZUxpc3QgYSBNZXNzYWdlTGlzdCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0KTsKLQotICAvKioKLSAgICogR2V0IG9wdGlvbmFsIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIG9wdGlvbmFsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXREZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEBzZWUgI2dldERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pOwotCi0gIC8qKgotICAgKiBHZXQgdmVyYm9zZSBvcHRpb24uCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB2ZXJib3NlLgotICAgKiBAc2VlICNzZXRWZXJib3NlT3B0aW9uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRWZXJib3NlT3B0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHBhcmFtIHZlcmJvc2UgdmVyYm9zZSBvcHRpb24uCi0gICAqIEBzZWUgI2dldFZlcmJvc2VPcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZlcmJvc2VPcHRpb24oYm9vbGVhbiB2ZXJib3NlKTsKLQotICAvKioKLSAgICogR2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHJldHVybiBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdHNPcHRpb24gIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFzc2VydGlvblJlc3VsdHNPcHRpb24pOwotCi0gIC8qKgotICAgKiBHZXQgcmVwbGFjZSByZXBvcnQgZmlsZSBvcHRpb24uCi0gICAqIEByZXR1cm4gcmVwbGFjZSByZXBvcnQgZmlsZSBvcHRpb24uCi0gICAqIEBzZWUgI3NldFJlcGxhY2VSZXBvcnQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFJlcGxhY2VSZXBvcnQoKTsKLQotICAvKioKLSAgICogU2V0IHJlcGxhY2UgcmVwb3J0IGZpbGUgb3B0aW9uLgotICAgKiBAcGFyYW0gcmVwbGFjZVJlcG9ydCAgZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0UmVwbGFjZVJlcG9ydAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVwbGFjZVJlcG9ydChib29sZWFuIHJlcGxhY2VSZXBvcnQpOwotCi0gIC8qKgotICAgKiBHZXQgcmVwb3J0IGZpbGUgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gcmVwb3J0IGZpbGUgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFJlcG9ydExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcG9ydExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHBhcmFtIHJlcG9ydFVSSSByZXBvcnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldFJlcG9ydExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRMb2NhdGlvbihTdHJpbmcgcmVwb3J0VVJJKTsKLQotICAvKioKLSAgICogR2V0IHN0eWxlIHNoZWV0LgotICAgKiBAcmV0dXJuIHN0eWxlIHNoZWV0LgotICAgKiBAc2VlICNzZXRBZGRTdHlsZVNoZWV0Ci0gICAqLwotICBwdWJsaWMgQWRkU3R5bGVTaGVldCBnZXRBZGRTdHlsZVNoZWV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBzdHlsZSBzaGVldC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYSBzdHlsZSBzaGVldC4KLSAgICogQHNlZSAjZ2V0QWRkU3R5bGVTaGVldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWRkU3R5bGVTaGVldChBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQpOwotCi0gIC8qKgotICAgKiBHZXQgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbnMgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbnMgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJIHByb2ZpbGUgdGVzdCBhc3NlcnRpb25zIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbihTdHJpbmcgdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSk7Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNhZ2UgbG9nIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIG1lc2FnZSBsb2cgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldExvZ0xvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvZ0xvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBtZXNzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxvZ1VSSSBtZXNzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0xvY2F0aW9uKFN0cmluZyBsb2dVUkkpOwotCi0gIC8qKgotICAgKiBJcyBtZXNzYWdlIGxvZyBsb2NhdGlvbiBzcGVjaWZpZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBtZXNzYWdlIGxvZyBsb2NhdGlvbiBpcyBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xvZ1NldCgpOwotCi0gIC8qKgotICAgKiBHZXQgY29ycmVsYXRpb24gdHlwZS4KLSAgICogQHJldHVybiBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAc2VlICNzZXRDb3JyZWxhdGlvblR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29ycmVsYXRpb25UeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAcGFyYW0gY29ycmVsYXRpb25UeXBlIGNvcnJlbGF0aW9uIHR5cGUuCi0gICAqIEBzZWUgI2dldENvcnJlbGF0aW9uVHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29ycmVsYXRpb25UeXBlKFN0cmluZyBjb3JyZWxhdGlvblR5cGUpOwotCi0gIC8qKgotICAgKiBJcyBXU0RMIHJlZmVyZW5jZSBzZXQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBXU0RMIHJlZmVyZW5jZSBpcyBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dTRExSZWZlcmVuY2VTZXQoKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgcmVmZXJlbmNlLgotICAgKiBAcmV0dXJuIFdTREwgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRXU0RMUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgV1NETFJlZmVyZW5jZSBnZXRXU0RMUmVmZXJlbmNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHdzZGxSZWZlcmVuY2UgV1NETCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFdTRExSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExSZWZlcmVuY2UoV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudC4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBJcyBVRERJIHJlZmVyZW5jZSBzZXQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBVRERJIHJlZmVyZW5jZSBpcyBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1VERElSZWZlcmVuY2VTZXQoKTsKLQotICAvKioKLSAgICogR2V0IFVEREkgcmVmZXJlbmNlLgotICAgKiBAcmV0dXJuIFVEREkgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRVRERJUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgVURESVJlZmVyZW5jZSBnZXRVRERJUmVmZXJlbmNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBVRERJIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHVkZGlSZWZlcmVuY2UgVURESSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFVERElSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVERElSZWZlcmVuY2UoVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlKTsKLQotICAvKioKLSAgICogUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAcGFyYW0gdmFsaWRhdGUgZmxhZyBmb3IgY29tbWFuZCBsaW5lIHZhbGlkYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIHBhcnNpbmcgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUFyZ3MoU3RyaW5nW10gYXJncywgYm9vbGVhbiB2YWxpZGF0ZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICogQHJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQW5hbHl6ZXJDb25maWdSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZ1JlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM2NGZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZ1JlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci0KLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIHRoZSBhbmFseXplciBjb25maWcgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQW5hbHl6ZXJDb25maWdSZWFkZXIgZXh0ZW5kcyBEb2N1bWVudFJlYWRlciB7Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgYW5hbHl6ZXIgY29uZmlnIHJlYWRlci4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgTWVzc2FnZUxpc3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCk7Ci0gIAotICAvKioKLSAgICogUmVhZCB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZ1VSSSB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gdGhlIEFuYWx5emVyQ29uZmlnIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHJlYWQgdGhlIGFuYWx5emVyIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29uZmlnIHJlYWRBbmFseXplckNvbmZpZyhTdHJpbmcgYW5hbHl6ZXJDb25maWdVUkkpIHRocm93cyBXU0lFeGNlcHRpb247Ci0gIAotICAvKioKLSAgICogUmVhZCB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuCi0gICAqIEBwYXJhbSByZWFkZXIgYSBSZWFkZXIgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBBbmFseXplckNvbmZpZyBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBwYXJzZSB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWcgcmVhZEFuYWx5emVyQ29uZmlnKFJlYWRlciByZWFkZXIpIHRocm93cyBXU0lFeGNlcHRpb247Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0Fzc2VydGlvblJlc3VsdFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9Bc3NlcnRpb25SZXN1bHRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMGM5ZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0Fzc2VydGlvblJlc3VsdFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogVGVzdCBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQXNzZXJ0aW9uUmVzdWx0VHlwZQotewotICAvKioKLSAgICogVGhpcyB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVzdWx0VHlwZSA9IF9BTEw7Ci0KLSAgLyoqCi0gICAqIFN0cmluZyB2ZXJzaW9uIG9mIHJlc3VsdCB0eXBlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfQUxMID0gImFsbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfTk9UX0lORk8gPSAibm90SW5mbyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfT05MWV9GQUlMRUQgPSAib25seUZhaWxlZCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfTk9UX1BBU1NFRCA9ICJub3RQYXNzZWQiOwotCi0gIC8qKgotICAgKiBSZXN1bHQgdHlwZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFzc2VydGlvblJlc3VsdFR5cGUgQUxMID0gbmV3IEFzc2VydGlvblJlc3VsdFR5cGUoX0FMTCk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXNzZXJ0aW9uUmVzdWx0VHlwZSBOT1RfSU5GTyA9IG5ldyBBc3NlcnRpb25SZXN1bHRUeXBlKF9OT1RfSU5GTyk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXNzZXJ0aW9uUmVzdWx0VHlwZSBPTkxZX0ZBSUxFRCA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdFR5cGUoX09OTFlfRkFJTEVEKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBc3NlcnRpb25SZXN1bHRUeXBlIE5PVF9QQVNTRUQgPQotICAgIG5ldyBBc3NlcnRpb25SZXN1bHRUeXBlKF9OT1RfUEFTU0VEKTsKLQotICAvKioKLSAgICogRG8gbm90IGFsbG93IHRoaXMgb2JqZWN0IHRvIGJlIGNyZWF0ZWQgd2l0aCBudWxsIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHJpdmF0ZSBBc3NlcnRpb25SZXN1bHRUeXBlKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSByZXN1bHQgdHlwZS4KLSAgICogQHBhcmFtIHJlc3VsdFR5cGUgYSByZXN1bHQgdHlwZS4KLSAgICovCi0gIHByaXZhdGUgQXNzZXJ0aW9uUmVzdWx0VHlwZShTdHJpbmcgcmVzdWx0VHlwZSkKLSAgewotICAgIHRoaXMucmVzdWx0VHlwZSA9IHJlc3VsdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogSXMgcmVzdWx0IHR5cGUgYWxsLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdCB0eXBlIGlzIGFsbC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQWxsKCkKLSAgewotICAgIHJldHVybiByZXN1bHRUeXBlLmVxdWFscyhfQUxMKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyByZXN1bHQgdHlwZSBmYWlsZWQgb25seS4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSByZXN1bHQgdHlwZSBpcyBmYWlsZWQgb25seS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRmFpbGVkT25seSgpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZS5lcXVhbHMoX09OTFlfRkFJTEVEKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyByZXN1bHQgdHlwZSBub3QgcGFzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdCB0eXBlIGlzIG5vdCBwYXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc05vdFBhc3NlZCgpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZS5lcXVhbHMoX05PVF9QQVNTRUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHJlc3VsdCB0eXBlIG5vdCBpbmZvLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdCB0eXBlIGlzIG5vdCBpbmZvLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNOb3RJbmZvKCkKLSAgewotICAgIHJldHVybiByZXN1bHRUeXBlLmVxdWFscyhfTk9UX0lORk8pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCByZXN1bHQgdHlwZS4KLSAgICogQHJldHVybiByZXN1bHQgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgbmV3IGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHBhcmFtIHJlc3VsdFR5cGUgYW4gYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAcmV0dXJuIG5ldyBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGludmFsaWQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlIHdhcyBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEFzc2VydGlvblJlc3VsdFR5cGUgbmV3SW5zdGFuY2UoU3RyaW5nIHJlc3VsdFR5cGUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgQXNzZXJ0aW9uUmVzdWx0VHlwZSBhc3NlcnRpb25SZXN1bHRUeXBlID0gbnVsbDsKLQotICAgIGlmIChyZXN1bHRUeXBlID09IG51bGwpCi0gICAgewotICAgICAgYXNzZXJ0aW9uUmVzdWx0VHlwZSA9IE5PVF9JTkZPOwotICAgIH0KLQotICAgIGVsc2UgaWYgKHJlc3VsdFR5cGUuZXF1YWxzKF9BTEwpKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdFR5cGUgPSBBTEw7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0VHlwZS5lcXVhbHMoX09OTFlfRkFJTEVEKSkKLSAgICB7Ci0gICAgICBhc3NlcnRpb25SZXN1bHRUeXBlID0gT05MWV9GQUlMRUQ7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0VHlwZS5lcXVhbHMoX05PVF9QQVNTRUQpKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdFR5cGUgPSBOT1RfUEFTU0VEOwotICAgIH0KLSAgICBlbHNlIGlmIChyZXN1bHRUeXBlLmVxdWFscyhfTk9UX0lORk8pKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdFR5cGUgPSBOT1RfSU5GTzsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgIkFuIGludmFsaWQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlIHdhcyBzcGVjaWZpZWQ6ICIgKyByZXN1bHRUeXBlICsgIi4iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXNzZXJ0aW9uUmVzdWx0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIHJlc3VsdFR5cGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9Bc3NlcnRpb25SZXN1bHRzT3B0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGVkNTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9Bc3NlcnRpb25SZXN1bHRzT3B0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgYSBkZWZpbml0aW9uIG9mIHRoZSBhc3NlcnRpb24gcmVzdWx0cyB0aGF0IAotICogc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXBvcnQuICBJdCBhbHNvIGNvbnRhaW5zIGluZm9ybWF0aW9uIAotICogdGhhdCBpbmRpY2F0ZXMgd2hpY2ggbWVzc2FnZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXBvcnQuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAcmV0dXJuIGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdFR5cGUgZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAcGFyYW0gcmVzdWx0VHlwZSBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEBzZWUgI2dldEFzc2VydGlvblJlc3VsdFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvblJlc3VsdFR5cGUoQXNzZXJ0aW9uUmVzdWx0VHlwZSByZXN1bHRUeXBlKTsKLQotICAvKioKLSAgICogR2V0IHNob3cgbWVzc2FnZSBlbnRyeSBpbmRpY2F0b3IuCi0gICAqIEByZXR1cm4gc2hvdyBtZXNzYWdlIGVudHJ5IGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd01lc3NhZ2VFbnRyeQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd01lc3NhZ2VFbnRyeSgpOwotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBtZXNzYWdlIGVudHJ5IGluZGljdG9yLgotICAgKiBAcGFyYW0gc2hvd01lc3NhZ2VFbnRyeSBzaG93IG1lc3NhZ2UgZW50cnkgaW5kaWN0b3IuCi0gICAqIEBzZWUgI2dldFNob3dNZXNzYWdlRW50cnkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNob3dNZXNzYWdlRW50cnkoYm9vbGVhbiBzaG93TWVzc2FnZUVudHJ5KTsKLQotICAvKioKLSAgICogR2V0IHNob3cgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uIGluZGljYXRvci4KLSAgICogQHJldHVybiBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY3Rvci4KLSAgICogQHBhcmFtIHNob3dBc3NlcnRpb25EZXNjcmlwdGlvbiBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY3Rvci4KLSAgICogQHNlZSAjZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24oYm9vbGVhbiBzaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24pOwotCi0gIC8qKgotICAgKiBHZXQgc2hvdyBmYWlsdXJlIG1lc3NhZ2UgaW5kaWNhdG9yLgotICAgKiBAcmV0dXJuIHNob3cgZmFpbHVyZSBtZXNzYWdlIGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd0ZhaWx1cmVNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0IHNob3cgZmFpbHVyZSBtZXNzYWdlIGluZGljYXRvci4KLSAgICogQHBhcmFtIHNob3dGYWlsdXJlTWVzc2FnZSBzaG93IGZhaWx1cmUgbWVzc2FnZSBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2dldFNob3dGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd0ZhaWx1cmVNZXNzYWdlKGJvb2xlYW4gc2hvd0ZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IHNob3cgZXJyb3IgZGV0YWlsIGluZGljYXRvci4KLSAgICogQHJldHVybiBzaG93IGVycm9yIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dGYWlsdXJlRGV0YWlsCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZURldGFpbCgpOwotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBlcnJvciBkZXRhaWwgaW5kaWNhdG9yLgotICAgKiBAcGFyYW0gc2hvd2ZhaWx1cmVEZXRhaWwgc2hvdyBlcnJvciBkZXRhaWwgaW5kaWNhdG9yLgotICAgKiBAc2VlICNnZXRTaG93RmFpbHVyZURldGFpbAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd0ZhaWx1cmVEZXRhaWwoYm9vbGVhbiBzaG93ZmFpbHVyZURldGFpbCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1VERElSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9VRERJUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhM2JjZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1VERElSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciBhIHJlZmVyZW5jZSB0byBhIGRpc2NvdmVyeSBhcnRpZmFjdC4gIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFVERElSZWZlcmVuY2UgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIEVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX1VERElfUkVGRVJFTkNFOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIFVEREkga2V5IHR5cGU6IGJpbmRpbmdLZXkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0tFWSA9ICJiaW5kaW5nS2V5IjsKLQotICAvKioKLSAgICogVURESSBrZXkgdHlwZTogdE1vZGVsS2V5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE1PREVMX0tFWSA9ICJ0TW9kZWxLZXkiOwotCi0gIC8qKgotICAgKiBHZXQgVURESSAga2V5IHR5cGUuCi0gICAqIEByZXR1cm4gVURESSAga2V5IHR5cGUuCi0gICAqIEBzZWUgI3NldEtleVR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0S2V5VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgVURESSBrZXkgdHlwZS4KLSAgICogQHBhcmFtIGtleVR5cGUgVURESSBrZXkgdHlwZS4KLSAgICogQHNlZSAjZ2V0S2V5VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0S2V5VHlwZShTdHJpbmcga2V5VHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBVRERJIGtleS4KLSAgICogQHJldHVybiBVRERJIGtleS4KLSAgICogQHNlZSAjc2V0S2V5Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEtleSgpOwotCi0gIC8qKgotICAgKiBTZXQgVURESSBrZXkuCi0gICAqIEBwYXJhbSBrZXkgVURESSBrZXkuCi0gICAqIEBzZWUgI2dldEtleQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0S2V5KFN0cmluZyBrZXkpOwotCi0gIC8qKgotICAgKiBHZXQgVURESSBpbnF1aXJ5IFVSTC4KLSAgICogQHJldHVybiBVRERJIGlucXVpcnkgVVJMLgotICAgKiBAc2VlICNzZXRJbnF1aXJ5VVJMCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKTsKLQotICAvKioKLSAgICogU2V0IFVEREkgaW5xdWlyeVVSTC4KLSAgICogQHBhcmFtIGlucXVpcnlVUkwgVURESSBpbnF1aXJ5VVJMLgotICAgKiBAc2VlICNnZXRJbnF1aXJ5VVJMCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudC4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQuCi0gICAqIEBzZWUgI3NldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKTsKLQotICAvKioKLSAgICogU2V0IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHdzZGxFbGVtZW50IFdTREwgZWxlbWVudC4KLSAgICogQHNlZSAjZ2V0V1NETEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExFbGVtZW50KFdTRExFbGVtZW50IHdzZGxFbGVtZW50KTsKLQotICAvKioKLSAgICogR2V0IHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0U2VydmljZUxvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VMb2NhdGlvbiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRTZXJ2aWNlTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VMb2NhdGlvbihTdHJpbmcgc2VydmljZUxvY2F0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9XU0RMRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1dTRExFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTMzZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1dTRExFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGJhc2UgaW50ZXJmYWNlIGZvciBXU0RMIGRlZmluaXRpb25zLiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMRWxlbWVudCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9FTEVNRU5UOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGVsZW1lbnQgdHlwZS4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQgdHlwZS4KLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGVsZW1lbnQgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgV1NETCBlbGVtZW50IHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBlbGVtZW50IG5hbWVzcGFjZS4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQgbmFtZXNwYWNlLgotICAgKiBAc2VlICNzZXROYW1lc3BhY2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGVsZW1lbnQgbmFtZXNwYWNlLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFdTREwgZWxlbWVudCBuYW1lc3BhY2UuCi0gICAqIEBzZWUgI2dldE5hbWVzcGFjZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBlbGVtZW50IG5hbWUuCi0gICAqIEByZXR1cm4gV1NETCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI3NldE5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgV1NETCBlbGVtZW50IG5hbWUuCi0gICAqIEBwYXJhbSBuYW1lIFdTREwgZWxlbWVudCBuYW1lLgotICAgKiBAc2VlICNnZXROYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudCBxdWFsaWZpZWQgbmFtZS4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQgcXVhbGlmaWVkIG5hbWUuCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWUoKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHJldHVybiBXU0RMIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI3NldFBhcmVudEVsZW1lbnROYW1lCi0gICAqIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnRFbGVtZW50TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgV1NETCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50RWxlbWVudE5hbWUgV1NETCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAc2VlICNnZXRQYXJlbnRFbGVtZW50TmFtZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFyZW50RWxlbWVudE5hbWUoU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgcGFyZW50IGVsZW1lbnQgUU5hbWUuCi0gICAqIEByZXR1cm4gV1NETCBwYXJlbnQgZWxlbWVudCBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRQYXJlbnRFbGVtZW50UU5hbWUoKTsKLQotICAvKioKLSAgICogSXMgcG9ydCBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYSBwb3J0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQb3J0KCk7Ci0KLSAgLyoqCi0gICAqIElzIGJpbmRpbmcgZWxlbWVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBsZW1lbnQgaXMgYSBiaW5kaW5nLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNCaW5kaW5nKCk7Ci0KLSAgLyoqCi0gICAqIElzIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBlbGVtZW50IGlzIGEgcG9ydCB0eXBlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQb3J0VHlwZSgpOwotCi0gIC8qKgotICAgKiBJcyBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBlbGVtZW50IGlzIGFuIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzT3BlcmF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIElzIG1lc3NhZ2UgZWxlbWVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIGVsZW1lbnQgaXMgYSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvV1NETFJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1dTRExSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM1NTBjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvV1NETFJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgYSByZWZlcmVuY2UgdG8gYSBkZXNjcmlwdGlvbiBhcnRpZmFjdC4gIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExSZWZlcmVuY2UgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIEVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX1dTRExfUkVGRVJFTkNFOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gV1NETCBlbGVtZW50LgotICAgKiBAc2VlICNzZXRXU0RMRWxlbWVudAotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBzZWUgI2dldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdTREwgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFdTRExMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IFdTREwgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsTG9jYXRpb24gV1NETCBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0V1NETExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMTG9jYXRpb24oU3RyaW5nIHdzZGxMb2NhdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFNlcnZpY2VMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBzZXJ2aWNlTG9jYXRpb24gc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0U2VydmljZUxvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTG9jYXRpb24oU3RyaW5nIHNlcnZpY2VMb2NhdGlvbik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9BbmFseXplckNvbmZpZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0FuYWx5emVyQ29uZmlnSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWVlNzRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0FuYWx5emVyQ29uZmlnSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQXNzZXJ0aW9uUmVzdWx0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGwuQWRkU3R5bGVTaGVldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBmaWxlIGludGVyZmFjZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQW5hbHl6ZXJDb25maWdJbXBsIGltcGxlbWVudHMgQW5hbHl6ZXJDb25maWcKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgbGlzdCByZWZlcmVuY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBBbmFseXplciBjb25maWd1cmF0aW9uIGZpbGUgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBjb25maWdVUkkgPSBudWxsOwotCi0gIC8qKgotICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZGVzY3JpcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBWZXJib3NlIG9wdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLQotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydCBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcmVwb3J0VVJJID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1VSSTsKLQotICAvKioKLSAgICogUmVwbGFjZSByZXBvcnQgaW5kaWNhdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcmVwbGFjZVJlcG9ydCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBBZGQgc3R5bGUgc2hlZXQuCi0gICAqLwotICBwcm90ZWN0ZWQgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0OwotCi0gIC8qKgotICAgKiBQcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSA9Ci0gICAgV1NJQ29uc3RhbnRzLkRFRkFVTFRfVEVTVF9BU1NFUlRJT05TX0RPQ1VNRU5UX1VSSTsKLQotICAvKioKLSAgICogTWVzc2FnZSBsb2cgbG9jYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvZ1VSSSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIE1lc3NhZ2UgY29ycmVsYXRpb24gdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY29ycmVsYXRpb25UeXBlID0KLSAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX09QRVJBVElPTjsKLQotICAvKioKLSAgICogV1NETCByZWZlcmVuY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlID0gbnVsbDsKLQotICAvKioKLSAgICogVURESSByZWZlcmVuY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlID0gbnVsbDsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZ0ltcGwoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3Igd2l0aCBhbGwgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIHZlcmJvc2UgICAgICAgICAgICAgICAgICAgIHRoZSB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdHNPcHRpb24gICAgIGFuIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHBhcmFtIHJlcG9ydFVSSSAgICAgICAgICAgICAgICAgIHJlcG9ydCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHJlcGxhY2VSZXBvcnQgICAgICAgICAgICAgIGEgcmVwbGFjZSByZXBvcnQgaW5kaWNhdG9yLgotICAgKiBAcGFyYW0gYWRkU3R5bGVTaGVldCAgICAgICAgICAgICAgYWRkIHN0eWxlIHNoZWV0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSAgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbnMgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBsb2dVUkkgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGNvcnJlbGF0aW9uVHlwZSAgICAgICAgICAgIG1lc3NhZ2UgY29ycmVsYXRpb24gdHlwZS4KLSAgICogQHBhcmFtIHdzZGxSZWZlcmVuY2UgICAgICAgICAgICAgIGEgV1NETCByZWZlcmVuY2UuLgotICAgKiBAcGFyYW0gdWRkaVJlZmVyZW5jZSAgICAgICAgICAgICAgYSBVVURESSByZWZlcmVuY2UuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWdJbXBsKAotICAgIFN0cmluZyBkZXNjcmlwdGlvbiwKLSAgICBib29sZWFuIHZlcmJvc2UsCi0gICAgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLAotICAgIFN0cmluZyByZXBvcnRVUkksCi0gICAgYm9vbGVhbiByZXBsYWNlUmVwb3J0LAotICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCwKLSAgICBTdHJpbmcgdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSwKLSAgICBTdHJpbmcgbG9nVVJJLAotICAgIFN0cmluZyBjb3JyZWxhdGlvblR5cGUsCi0gICAgV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlLAotICAgIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZSkKLSAgewotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlOwotICAgIHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9IGFzc2VydGlvblJlc3VsdHNPcHRpb247Ci0gICAgdGhpcy5yZXBvcnRVUkkgPSByZXBvcnRVUkk7Ci0gICAgdGhpcy5yZXBsYWNlUmVwb3J0ID0gcmVwbGFjZVJlcG9ydDsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBhZGRTdHlsZVNoZWV0OwotICAgIHRoaXMudGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSA9IHRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkk7Ci0gICAgdGhpcy5sb2dVUkkgPSBsb2dVUkk7Ci0gICAgdGhpcy5jb3JyZWxhdGlvblR5cGUgPSBjb3JyZWxhdGlvblR5cGU7Ci0gICAgdGhpcy53c2RsUmVmZXJlbmNlID0gd3NkbFJlZmVyZW5jZTsKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSB1ZGRpUmVmZXJlbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgYW5hbHl6ZXIgY29uZmlnLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCkKLSAgewotICAgIHRoaXMubWVzc2FnZUxpc3QgPSBtZXNzYWdlTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEBzZWUgI3NldERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBvcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0RGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikKLSAgewotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNzZXRWZXJib3NlT3B0aW9uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRWZXJib3NlT3B0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnZlcmJvc2U7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0VmVyYm9zZU9wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmVyYm9zZU9wdGlvbihib29sZWFuIHZlcmJvc2UpCi0gIHsKLSAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAc2VlICNnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbikKLSAgewotICAgIHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9IGFzc2VydGlvblJlc3VsdHNPcHRpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjc2V0UmVwb3J0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVwb3J0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwb3J0VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI2dldFJlcG9ydExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRMb2NhdGlvbihTdHJpbmcgcmVwb3J0VVJJKQotICB7Ci0gICAgdGhpcy5yZXBvcnRVUkkgPSByZXBvcnRVUkk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlcGxhY2UgcmVwb3J0IGZpbGUgb3B0aW9uLgotICAgKiBAc2VlICNzZXRSZXBsYWNlUmVwb3J0Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRSZXBsYWNlUmVwb3J0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlcGxhY2VSZXBvcnQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHJlcG9ydCBmaWxlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRSZXBsYWNlUmVwb3J0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBsYWNlUmVwb3J0KGJvb2xlYW4gcmVwbGFjZVJlcG9ydCkKLSAgewotICAgIHRoaXMucmVwbGFjZVJlcG9ydCA9IHJlcGxhY2VSZXBvcnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHNlZSAjc2V0QWRkU3R5bGVTaGVldAotICAgKi8KLSAgcHVibGljIEFkZFN0eWxlU2hlZXQgZ2V0QWRkU3R5bGVTaGVldCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hZGRTdHlsZVNoZWV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCByZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0QWRkU3R5bGVTaGVldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWRkU3R5bGVTaGVldChBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQpCi0gIHsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBhZGRTdHlsZVNoZWV0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldFRlc3RBc3NlcnRpb25Eb2N1bWVudExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI2dldFRlc3RBc3NlcnRpb25Eb2N1bWVudExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oU3RyaW5nIHRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkpCi0gIHsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkgPSB0ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldExvZ0xvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvZ0xvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBsb2dVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0xvY2F0aW9uKFN0cmluZyBsb2dVUkkpCi0gIHsKLSAgICB0aGlzLmxvZ1VSSSA9IGxvZ1VSSTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzTG9nU2V0KCkKLSAgewotICAgIHJldHVybiAobG9nVVJJICE9IG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAc2VlICNzZXRDb3JyZWxhdGlvblR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29ycmVsYXRpb25UeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmNvcnJlbGF0aW9uVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgY29ycmVsYXRpb24gdHlwZS4KLSAgICogQHNlZSAjZ2V0Q29ycmVsYXRpb25UeXBlCi0gICAqIAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29ycmVsYXRpb25UeXBlKFN0cmluZyBjb3JyZWxhdGlvblR5cGUpCi0gIHsKLSAgICB0aGlzLmNvcnJlbGF0aW9uVHlwZSA9IGNvcnJlbGF0aW9uVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBXU0RMIHJlZmVyZW5jZSBzZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dTRExSZWZlcmVuY2VTZXQoKQotICB7Ci0gICAgcmV0dXJuICh0aGlzLndzZGxSZWZlcmVuY2UgPT0gbnVsbCA/IGZhbHNlIDogdHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgcmVmZXJlbmNlLgotICAgKiBAc2VlICNzZXRXU0RMUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgV1NETFJlZmVyZW5jZSBnZXRXU0RMUmVmZXJlbmNlKCkKLSAgewotICAgIHJldHVybiB0aGlzLndzZGxSZWZlcmVuY2U7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IFdTREwgcmVmZXJlbmNlLgotICAgKiBAc2VlICNnZXRXU0RMUmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMUmVmZXJlbmNlKFdTRExSZWZlcmVuY2Ugd3NkbFJlZmVyZW5jZSkKLSAgewotICAgIHRoaXMud3NkbFJlZmVyZW5jZSA9IHdzZGxSZWZlcmVuY2U7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudC4KLSAgICogCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuICh0aGlzLndzZGxSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgID8gbnVsbAotICAgICAgOiB0aGlzLndzZGxSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc2VydmljZSBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiAodGhpcy53c2RsUmVmZXJlbmNlID09IG51bGwpCi0gICAgICA/IG51bGwKLSAgICAgIDogdGhpcy53c2RsUmVmZXJlbmNlLmdldFNlcnZpY2VMb2NhdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZyNnZXRXU0RMTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuICh0aGlzLndzZGxSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgID8gbnVsbAotICAgICAgOiB0aGlzLndzZGxSZWZlcmVuY2UuZ2V0V1NETExvY2F0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnI2lzVWRkaVJlZmVyZW5jZVNldCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVURESVJlZmVyZW5jZVNldCgpCi0gIHsKLSAgICByZXR1cm4gKHRoaXMudWRkaVJlZmVyZW5jZSA9PSBudWxsID8gZmFsc2UgOiB0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgVURESSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFVERElSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyBVRERJUmVmZXJlbmNlIGdldFVERElSZWZlcmVuY2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudWRkaVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgVURESSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFVERElSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFVERElSZWZlcmVuY2UoVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy51ZGRpUmVmZXJlbmNlID0gdWRkaVJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNzZXRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gY29uZmlnVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgZ2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBjb25maWdVUkkpCi0gIHsKLSAgICB0aGlzLmNvbmZpZ1VSSSA9IGNvbmZpZ1VSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5XU0lEb2N1bWVudCN0b1hNTFN0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBTdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIC8vIFZlcmJvc2Ugb3B0aW9uCi0gICAgcHcucHJpbnQoIiAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVkVSQk9TRSArICI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0VmVyYm9zZU9wdGlvbigpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9WRVJCT1NFICsgIj4iKTsKLQotICAgIC8vIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24KLSAgICBwdy5wcmludChhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotCi0gICAgLy8gcmVwb3J0IGZpbGUKLSAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1JFUE9SVF9GSUxFICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9SRVBMQUNFICsgIj1cIiIgKyBnZXRSZXBsYWNlUmVwb3J0KCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OICsgIj1cIiIgKyBnZXRSZXBvcnRMb2NhdGlvbigpICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldEFkZFN0eWxlU2hlZXQoKS50b1hNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0gICAgcHcucHJpbnRsbigiICAgICAgICA8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRVBPUlRfRklMRSArICI+Iik7Ci0KLSAgICAvLyB0ZXN0IGFzc2VydGlvbiBmaWxlCi0gICAgcHcucHJpbnQoCi0gICAgICAiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1RFU1RfQVNTRVJUSU9OU19GSUxFICsgIj4iKTsKLSAgICBwdy5wcmludChnZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05TX0ZJTEUgKyAiPiIpOwotCi0gICAgLy8gbG9nIGZpbGUKLSAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFKTsKLSAgICBwdy5wcmludCgKLSAgICAgICIgIgotICAgICAgICArIFdTSUNvbnN0YW50cy5BVFRSX0NPUlJFTEFUSU9OX1RZUEUKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIHRoaXMuY29ycmVsYXRpb25UeXBlCi0gICAgICAgICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldExvZ0xvY2F0aW9uKCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFICsgIj4iKTsKLQotICAgIC8vIFdTREwgcmVmZXJlbmNlIAotICAgIGlmICh0aGlzLndzZGxSZWZlcmVuY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChnZXRXU0RMUmVmZXJlbmNlKCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gVURESSBSZWZlcmVuY2UKLSAgICBpZiAodGhpcy51ZGRpUmVmZXJlbmNlICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnQoZ2V0VURESVJlZmVyZW5jZSgpLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgLy8gdmVyYm9zZSBvcHRpb24KLSAgICBwdy5wcmludGxuKCIgIHZlcmJvc2UgLi4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMudmVyYm9zZSk7Ci0KLSAgICAvLyBhc3NlcnRpb25SZXN1bHRzIG9wdGlvbnMKLSAgICBwdy5wcmludCh0aGlzLmFzc2VydGlvblJlc3VsdHNPcHRpb24udG9TdHJpbmcoKSk7Ci0KLSAgICAvLyByZXBvcnRGaWxlIG9wdGlvbnMKLSAgICBwdy5wcmludGxuKCIgIFJlcG9ydCBGaWxlOiIpOwotICAgIHB3LnByaW50bG4oIiAgICByZXBsYWNlIC4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5yZXBsYWNlUmVwb3J0KTsKLSAgICBwdy5wcmludGxuKCIgICAgbG9jYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMucmVwb3J0VVJJKTsKLSAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0ICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnRsbigiICAgIFN0eWxlIFNoZWV0OiIpOwotICAgICAgaWYgKHRoaXMuYWRkU3R5bGVTaGVldC5nZXRIcmVmKCkgIT0gbnVsbCkKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICAiICAgICAgaHJlZiAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0SHJlZigpKTsKLSAgICAgIGlmICh0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0VHlwZSgpICE9IG51bGwpCi0gICAgICAgIHB3LnByaW50bG4oCi0gICAgICAgICAgIiAgICAgIHR5cGUgLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5hZGRTdHlsZVNoZWV0LmdldFR5cGUoKSk7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldFRpdGxlKCkgIT0gbnVsbCkKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICAiICAgICAgdGl0bGUgLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0VGl0bGUoKSk7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldE1lZGlhKCkgIT0gbnVsbCkKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICAiICAgICAgbWVkaWEgLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0TWVkaWEoKSk7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldENoYXJzZXQoKSAhPSBudWxsKQotICAgICAgICBwdy5wcmludGxuKAotICAgICAgICAgICIgICAgICBjaGFyc2V0IC4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuYWRkU3R5bGVTaGVldC5nZXRDaGFyc2V0KCkpOwotICAgICAgaWYgKHRoaXMuYWRkU3R5bGVTaGVldC5nZXRBbHRlcm5hdGUoKSAhPSBudWxsKQotICAgICAgICBwdy5wcmludGxuKAotICAgICAgICAgICIgICAgICBhbHRlcm5hdGUgLi4uLi4uLi4uLi4uLi4gIgotICAgICAgICAgICAgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0QWx0ZXJuYXRlKCkpOwotICAgIH0KLQotICAgIC8vIHRlc3RBc3NlcnRpb25zRmlsZSBwYXJhbWV0ZXIKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgdGVzdEFzc2VydGlvbnNGaWxlIC4uLi4uLi4uLiAiICsgdGhpcy50ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJKTsKLQotICAgIC8vIGxvZ0ZpbGUgb3B0aW9ucwotICAgIGlmICh0aGlzLmxvZ1VSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4oIiAgTWVzc2FnZSBMb2cgRmlsZToiKTsKLSAgICAgIHB3LnByaW50bG4oIiAgICBsb2NhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dVUkkpOwotICAgICAgcHcucHJpbnRsbigiICAgIGNvcnJlbGF0aW9uVHlwZSAuLi4uLi4uLi4uICIgKyB0aGlzLmNvcnJlbGF0aW9uVHlwZSk7Ci0gICAgfQotCi0gICAgLy8gd3NkbFJlZmVyZW5jZSBvcHRpb25zICAgCi0gICAgaWYgKHRoaXMuaXNXU0RMUmVmZXJlbmNlU2V0KCkpCi0gICAgewotICAgICAgcHcucHJpbnQodGhpcy53c2RsUmVmZXJlbmNlLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIHVkZGlSZWZlcmVuY2Ugb3B0aW9ucwotICAgIGlmICh0aGlzLmlzVURESVJlZmVyZW5jZVNldCgpKQotICAgIHsKLSAgICAgIHB3LnByaW50KHRoaXMudWRkaVJlZmVyZW5jZS50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyBkZXNjcmlwdGlvbiBwYXJhbWV0ZXIKLSAgICBpZiAodGhpcy5kZXNjcmlwdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4oIiAgZGVzY3JpcHRpb24gLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5kZXNjcmlwdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGNvbmZpZyB2YWx1ZXMgZnJvbSBhbm90aGVyIGFuYWx5emVyIGNvbmZpZyBvYmplY3QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2V0Q29uZmlnKEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnKQotICB7Ci0gICAgdGhpcy5jb25maWdVUkkgPSBhbmFseXplckNvbmZpZy5nZXRMb2NhdGlvbigpOwotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBhbmFseXplckNvbmZpZy5nZXREZXNjcmlwdGlvbigpOwotICAgIHRoaXMudmVyYm9zZSA9IGFuYWx5emVyQ29uZmlnLmdldFZlcmJvc2VPcHRpb24oKTsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdHNPcHRpb24gPSBhbmFseXplckNvbmZpZy5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCk7Ci0gICAgdGhpcy5yZXBvcnRVUkkgPSBhbmFseXplckNvbmZpZy5nZXRSZXBvcnRMb2NhdGlvbigpOwotICAgIHRoaXMucmVwbGFjZVJlcG9ydCA9IGFuYWx5emVyQ29uZmlnLmdldFJlcGxhY2VSZXBvcnQoKTsKLSAgICB0aGlzLmxvZ1VSSSA9IGFuYWx5emVyQ29uZmlnLmdldExvZ0xvY2F0aW9uKCk7Ci0gICAgdGhpcy5jb3JyZWxhdGlvblR5cGUgPSBhbmFseXplckNvbmZpZy5nZXRDb3JyZWxhdGlvblR5cGUoKTsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkgPQotICAgICAgYW5hbHl6ZXJDb25maWcuZ2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uKCk7Ci0gICAgdGhpcy5hZGRTdHlsZVNoZWV0ID0gYW5hbHl6ZXJDb25maWcuZ2V0QWRkU3R5bGVTaGVldCgpOwotICAgIHRoaXMud3NkbFJlZmVyZW5jZSA9IGFuYWx5emVyQ29uZmlnLmdldFdTRExSZWZlcmVuY2UoKTsKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSBhbmFseXplckNvbmZpZy5nZXRVRERJUmVmZXJlbmNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlQXJncyhTdHJpbmdbXSBhcmdzLCBib29sZWFuIHZhbGlkYXRlKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBXU0RMUmVmZXJlbmNlIHdzZGxSZWZlcmVuY2UgPSBudWxsOwotICAgIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZSA9IG51bGw7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyByZWFkZXIKLSAgICBBbmFseXplckNvbmZpZ1JlYWRlciBhbmFseXplckNvbmZpZ1JlYWRlciA9IG5ldyBBbmFseXplckNvbmZpZ1JlYWRlckltcGwoKTsKLSAgICBhbmFseXplckNvbmZpZ1JlYWRlci5pbml0KHRoaXMubWVzc2FnZUxpc3QpOwotCi0gICAgLy8gQW5hbHl6ZXIgY29uZmlnIG9iamVjdCB3aGljaCB3aWxsIGJlIG1lcmdlZCBhZnRlciBhbGwgb2YgdGhlIGlucHV0IHBhcm1zIGFyZSBwcm9jZXNzZWQKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZ0Zyb21BcmdzID0gbnVsbDsKLQotICAgIC8vIEFzc2VydGlvbiByZXN1bHRzIG9wdGlvbgotICAgIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9IG51bGw7Ci0KLSAgICAvLyBJZiBubyBpbnB1dCBhcmd1bWVudHMsIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKGFyZ3MubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gQUREOiAKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoInVzYWdlMDEiLCBBbmFseXplci5VU0FHRV9NRVNTQUdFKSk7Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gbG9jYXRlIHRoZSBjb25maWcgZmlsZSBvcHRpb24gKGlmIGl0IHdhcyBzcGVjaWZpZWQpCi0gICAgZm9yIChpbnQgYXJnQ291bnQgPSAwOyBhcmdDb3VudCA8IGFyZ3MubGVuZ3RoOyBhcmdDb3VudCsrKQotICAgIHsKLSAgICAgIC8vIC1jb25maWcKLSAgICAgIGlmICgoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWNvbmZpZyIpKQotICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItYyIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncyA9Ci0gICAgICAgICAgYW5hbHl6ZXJDb25maWdSZWFkZXIucmVhZEFuYWx5emVyQ29uZmlnKAotICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiBjb25maWcgZmlsZSB3YXMgbm90IHNwZWNpZmllZCwgdGhlbiBjcmVhdGUgYW5hbHl6ZXIgY29uZmlnIG9iamVjdAotICAgIGlmIChhbmFseXplckNvbmZpZ0Zyb21BcmdzID09IG51bGwpCi0gICAgewotICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncyA9IG5ldyBBbmFseXplckNvbmZpZ0ltcGwoKTsKLSAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MuaW5pdCh0aGlzLm1lc3NhZ2VMaXN0KTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uCi0gICAgaWYgKChhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0KLSAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MuZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbigpKQotICAgICAgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0gbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0gICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oYXNzZXJ0aW9uUmVzdWx0c09wdGlvbik7Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgYWxsIG9mIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgZm9yIChpbnQgYXJnQ291bnQgPSAwOyBhcmdDb3VudCA8IGFyZ3MubGVuZ3RoOyBhcmdDb3VudCsrKQotICAgIHsKLSAgICAgIC8vIC1jb25maWcKLSAgICAgIGlmICgoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWNvbmZpZyIpKQotICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItYyIpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2tpcCB0aGlzIG9wdGlvbiBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwcm9jZXNzZWQKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgIH0KLQotICAgICAgLy8gLXZlcmJvc2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXZlcmJvc2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItdiIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5zZXRWZXJib3NlT3B0aW9uKAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWFzc2VydGlvblJlc3VsdHMKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWFzc2VydGlvblJlc3VsdHMiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItYSIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRBc3NlcnRpb25SZXN1bHRUeXBlKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdFR5cGUubmV3SW5zdGFuY2UoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1tZXNzYWdlRW50cnkKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLW1lc3NhZ2VFbnRyeSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1NIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dNZXNzYWdlRW50cnkoCi0gICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgfQotCi0gICAgICAvLyAtYXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWFzc2VydGlvbkRlc2NyaXB0aW9uIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUEiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFzc2VydGlvblJlc3VsdHNPcHRpb24uc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgfQotCi0gICAgICAvLyAtZmFpbHVyZU1lc3NhZ2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhaWx1cmVNZXNzYWdlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUYiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFzc2VydGlvblJlc3VsdHNPcHRpb24uc2V0U2hvd0ZhaWx1cmVNZXNzYWdlKAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWZhaWx1cmVEZXRhaWwKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhaWx1cmVEZXRhaWwiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItRCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93RmFpbHVyZURldGFpbCgKLSAgICAgICAgICBCb29sZWFuLnZhbHVlT2YoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1sb2dGaWxlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1sb2dGaWxlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLWwiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0TG9nTG9jYXRpb24oZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXRlc3RBc3NlcnRpb25GaWxlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi10ZXN0QXNzZXJ0aW9uRmlsZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi10IikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigKLSAgICAgICAgICBnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgfQotCi0gICAgICAvLyAtcmVwb3J0RmlsZQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItcmVwb3J0RmlsZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1yIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldFJlcG9ydExvY2F0aW9uKAotICAgICAgICAgIGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1yZXBsYWNlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1yZXBsYWNlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLVIiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0UmVwbGFjZVJlcG9ydCgKLSAgICAgICAgICBCb29sZWFuLnZhbHVlT2YoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1jb3JyZWxhdGlvblR5cGUKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWNvcnJlbGF0aW9uVHlwZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1DIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldENvcnJlbGF0aW9uVHlwZSgKLSAgICAgICAgICBnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgfQotCi0gICAgICAvLyAtd3NkbEVsZW1lbnQKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXdzZGxFbGVtZW50IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLVciKSkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBvcHRpb25OYW1lID0gYXJnc1thcmdDb3VudF07Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0KLSAgICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBuZXcgV1NETEVsZW1lbnRJbXBsKCk7Ci0gICAgICAgIHdzZGxFbGVtZW50LnNldE5hbWUoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQsIG9wdGlvbk5hbWUpKTsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgd3NkbEVsZW1lbnQuc2V0VHlwZShnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCwgb3B0aW9uTmFtZSkpOwotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQsIG9wdGlvbk5hbWUpKTsKLSAgICAgICAgaWYgKCFhcmdzW2FyZ0NvdW50XS5zdGFydHNXaXRoKCItIikpCi0gICAgICAgIHsKLSAgICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICAgIHdzZGxFbGVtZW50LnNldFBhcmVudEVsZW1lbnROYW1lKAotICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQsIG9wdGlvbk5hbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3c2RsUmVmZXJlbmNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh1ZGRpUmVmZXJlbmNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHdzZGxFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgImNvbmZpZzEwIiwKLSAgICAgICAgICAgICAgIlRoZSAtd3NkbEVsZW1lbnQgb3B0aW9uIG11c3QgYXBwZWFyIGFmdGVyIHRoZSAtd3NkbFVSSSBvciAtdWRkaUtleSBvcHRpb25zLiIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0V1NETFJlZmVyZW5jZSh3c2RsUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXNlcnZpY2VMb2NhdGlvbgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItc2VydmljZUxvY2F0aW9uIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLVMiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0KLSAgICAgICAgaWYgKHdzZGxSZWZlcmVuY2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0U2VydmljZUxvY2F0aW9uKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodWRkaVJlZmVyZW5jZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRTZXJ2aWNlTG9jYXRpb24oZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgImNvbmZpZzExIiwKLSAgICAgICAgICAgICAgIlRoZSAtc2VydmljZUxvY2F0aW9uIG9wdGlvbiBtdXN0IGFwcGVhciBhZnRlciB0aGUgLXdzZGxVUkkgb3IgLXVkZGlLZXkgb3B0aW9ucy4iKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gLXdzZGxVUkkKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXdzZGxVUkkiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItVyIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgaWYgKHdzZGxSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgICAgICB3c2RsUmVmZXJlbmNlID0gbmV3IFdTRExSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0V1NETExvY2F0aW9uKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0V1NETFJlZmVyZW5jZSh3c2RsUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXVkZGlLZXlUeXBlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi11ZGRpS2V5VHlwZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1LIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBpZiAodWRkaVJlZmVyZW5jZSA9PSBudWxsKQotICAgICAgICAgIHVkZGlSZWZlcmVuY2UgPSBuZXcgVURESVJlZmVyZW5jZUltcGwoKTsKLSAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRLZXlUeXBlKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0VURESVJlZmVyZW5jZSh1ZGRpUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXVkZGlLZXkKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXVkZGlLZXkiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItayIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgaWYgKHVkZGlSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgICAgICB1ZGRpUmVmZXJlbmNlID0gbmV3IFVERElSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0S2V5KGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0VURESVJlZmVyZW5jZSh1ZGRpUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWlucXVpcnlVUkwKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWlucXVpcnlVUkwiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItaSIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgaWYgKHVkZGlSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgICAgICB1ZGRpUmVmZXJlbmNlID0gbmV3IFVERElSZWZlcmVuY2VJbXBsKCk7Ci0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0SW5xdWlyeVVSTChnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldFVERElSZWZlcmVuY2UodWRkaVJlZmVyZW5jZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFERDogTmVlZCB0byBhZGQgc3VwcG9ydCBmb3Igb3RoZXIgb3B0aW9ucyAoLWNvbmZpZywgLWJpbmRpbmcsIGV0Yy4pCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICJjb25maWcxMiIsCi0gICAgICAgICAgICBhcmdzW2FyZ0NvdW50XSwKLSAgICAgICAgICAgICJUaGUgc3BlY2lmaWVkIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkOiIpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiBhZGRTdHlsZVNoZWV0IHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNyZWF0ZSBhIGNvbW1lbnQgdmVyc2lvbiBvZiBpdAotICAgIGlmIChhbmFseXplckNvbmZpZ0Zyb21BcmdzLmdldEFkZFN0eWxlU2hlZXQoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotICAgICAgYWRkU3R5bGVTaGVldC5zZXRIcmVmKFdTSUNvbnN0YW50cy5ERUZBVUxUX1JFUE9SVF9YU0wpOwotICAgICAgYWRkU3R5bGVTaGVldC5zZXRUeXBlKFdTSUNvbnN0YW50cy5ERUZBVUxUX1hTTF9UWVBFKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0Q29tbWVudCh0cnVlKTsKLSAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLSAgICB9Ci0KLSAgICAvLyBNZXJnZSBjb25maWcgaW5mbyBpbnRvIHRoaXMgb2JqZWN0Ci0gICAgc2V0Q29uZmlnKGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MpOwotCi0gICAgaWYgKHZhbGlkYXRlKQotICAgIHsgIAotICAgICAgLy8gVmVyaWZ5IHRoYXQgYWxsIHJlcXVpcmVkIG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgYW5kIAotICAgICAgLy8gdGhhdCB0aGUgc3BlY2lmaWVkIG9uZXMgd2VyZSBjb3JyZWN0Ci0gICAgICBjaGVja0NvbmZpZ09wdGlvbnMoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVmVyaWZ5IGNvbmZpZyBvcHRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrQ29uZmlnT3B0aW9ucygpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBmaWxlTG9jYXRpb247Ci0KLSAgICAvLyBJZiB3c2RsUmVmZXJlbmNlIGFuZCB1ZGRpUmVmZXJlbmNlIHNwZWNpZmllZCwgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoKHRoaXMuaXNXU0RMUmVmZXJlbmNlU2V0KCkpICYmICh0aGlzLmlzVURESVJlZmVyZW5jZVNldCgpKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwNCIsCi0gICAgICAgICAgIkNhbiBub3Qgc3BlY2lmeSBib3RoIHRoZSBXU0RMIHJlZmVyZW5jZSBhbmQgVURESSByZWZlcmVuY2Ugb3B0aW9ucyIpKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiB0ZXN0IGFzc2VydGlvbiBmaWxlIGV4aXN0cwotICAgIGlmICgoZmlsZUxvY2F0aW9uID0gdGhpcy5nZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxNiIsCi0gICAgICAgICAgIlRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50IGxvY2F0aW9uIG11c3QgYmUgc3BlY2lmaWVkLiIpKTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghVXRpbHMuZmlsZUV4aXN0cyhmaWxlTG9jYXRpb24pKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzE0IiwKLSAgICAgICAgICBmaWxlTG9jYXRpb24sCi0gICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246IikpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGxvZyBmaWxlIGV4aXN0cwotICAgIGlmICgoZmlsZUxvY2F0aW9uID0gdGhpcy5nZXRMb2dMb2NhdGlvbigpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmICghVXRpbHMuZmlsZUV4aXN0cyhmaWxlTG9jYXRpb24pKQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgICAiY29uZmlnMDIiLAotICAgICAgICAgICAgZmlsZUxvY2F0aW9uLAotICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIGxvZyBmaWxlOiIpKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBXU0RMIGZpbGUgZXhpc3RzCi0gICAgaWYgKCh0aGlzLmdldFdTRExSZWZlcmVuY2UoKSAhPSBudWxsKQotICAgICAgJiYgKGZpbGVMb2NhdGlvbiA9IHRoaXMuZ2V0V1NETFJlZmVyZW5jZSgpLmdldFdTRExMb2NhdGlvbigpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmICghVXRpbHMuZmlsZUV4aXN0cyhmaWxlTG9jYXRpb24pKQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgICAiY29uZmlnMDMiLAotICAgICAgICAgICAgZmlsZUxvY2F0aW9uLAotICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIFdTREwgZmlsZToiKSk7Ci0gICAgfQotCi0gICAgRmlsZSBmaWxlID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgZmlsZSBvYmplY3QgZm9yIHJlcG9ydCBmaWxlCi0gICAgICBmaWxlID0gbmV3IEZpbGUodGhpcy5nZXRSZXBvcnRMb2NhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTciLAotICAgICAgICAgICJDb3VsZCBub3QgZ2V0IHJlcG9ydCBmaWxlIGxvY2F0aW9uLiIpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiByZXBsYWNlIGZsYWcgaXMgZmFsc2UgYW5kIGZpbGUgZXhpc3RzLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmIChmaWxlLmV4aXN0cygpICYmICF0aGlzLmdldFJlcGxhY2VSZXBvcnQoKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxNSIsCi0gICAgICAgICAgIlJlcG9ydCBmaWxlIGFscmVhZHkgZXhpc3RzIGFuZCByZXBsYWNlIG9wdGlvbiB3YXMgbm90IHNwZWNpZmllZC4iKSk7Ci0gICAgfQotCi0gICAgaWYgKGNvcnJlbGF0aW9uVHlwZSAhPSBudWxsCi0gICAgICAmJiAhdGhpcy5jb3JyZWxhdGlvblR5cGUuZXF1YWxzKAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX0VORFBPSU5UKQotICAgICAgJiYgIXRoaXMuY29ycmVsYXRpb25UeXBlLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfQ09SUkVMQVRJT05fVFlQRV9OQU1FU1BBQ0UpCi0gICAgICAmJiAhdGhpcy5jb3JyZWxhdGlvblR5cGUuZXF1YWxzKAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX09QRVJBVElPTikpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTgiLAotICAgICAgICAgICJJbnZhbGlkIGNvcnJlbGF0aW9uIHR5cGUgc3BlY2lmaWVkLiIpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG9wdGlvbiB2YWx1ZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE9wdGlvblZhbHVlKFN0cmluZ1tdIGFyZ3MsIGludCBpbmRleCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGdldE9wdGlvblZhbHVlKGFyZ3MsIGluZGV4LCBhcmdzW2luZGV4IC0gMV0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBvcHRpb24gdmFsdWUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRPcHRpb25WYWx1ZShTdHJpbmdbXSBhcmdzLCBpbnQgaW5kZXgsIFN0cmluZyBvcHRpb25OYW1lKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIElmIGluZGV4IGdyZWF0ZXIgdGhhbiBhcnJheSBsZW5ndGgsIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKGluZGV4ID49IGFyZ3MubGVuZ3RoKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzEzIiwKLSAgICAgICAgICBvcHRpb25OYW1lLAotICAgICAgICAgICJPcHRpb24gZGlkIG5vdCBjb250YWluIGEgdmFsdWUuICBTcGVjaWZpZWQgb3B0aW9uOiIpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYW4gb3B0aW9uIChpLmUuIHN0YXJ0cyB3aXRoIGEgIi0iKSwgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoYXJnc1tpbmRleF0uc3RhcnRzV2l0aCgiLSIpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzEzIiwKLSAgICAgICAgICBvcHRpb25OYW1lLAotICAgICAgICAgICJPcHRpb24gZGlkIG5vdCBjb250YWluIGEgdmFsdWUuICBTcGVjaWZpZWQgb3B0aW9uOiIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKGFyZ3NbaW5kZXhdKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJRCwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UobWVzc2FnZUlELCBudWxsLCBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKAotICAgIFN0cmluZyBtZXNzYWdlSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgaWYgKG1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgZWxzZSBpZiAobWVzc2FnZURhdGEgIT0gbnVsbCkKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGEgKyAiLiI7Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQW5hbHl6ZXJDb25maWdSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9BbmFseXplckNvbmZpZ1JlYWRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE5OTFjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9BbmFseXplckNvbmZpZ1JlYWRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5pbXBsLkFkZFN0eWxlU2hlZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5XU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHJlYWQgdGhlIGFuYWx5emVyIGNvbmZpZyBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEFuYWx5emVyQ29uZmlnUmVhZGVySW1wbCBpbXBsZW1lbnRzIEFuYWx5emVyQ29uZmlnUmVhZGVyCi17Ci0gIC8qKgotICAgKiBNZXNzYWdlIGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3Q7Ci0KLSAgLyoqCi0gICAqIERvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBhbmFseXplciBjb25maWcgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCkKLSAgewotICAgIHRoaXMubWVzc2FnZUxpc3QgPSBtZXNzYWdlTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWdSZWFkZXIjcmVhZEFuYWx5emVyQ29uZmlnKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZyByZWFkQW5hbHl6ZXJDb25maWcoU3RyaW5nIGFuYWx5emVyQ29uZmlnVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIEZpbGVSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKGFuYWx5emVyQ29uZmlnVVJJKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMDEiLAotICAgICAgICAgIGFuYWx5emVyQ29uZmlnVVJJLAotICAgICAgICAgICJDb3VsZCBub3QgZmluZCBhbmFseXplciBjb25maWcgZmlsZTogIiksCi0gICAgICAgIGZuZmUpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwOCIsCi0gICAgICAgICAgYW5hbHl6ZXJDb25maWdVUkksCi0gICAgICAgICAgIkNvdWxkIG5vdCByZWFkIGFuYWx5emVyIGNvbmZpZyBmaWxlOiAiKSwKLSAgICAgICAgZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlYWRBbmFseXplckNvbmZpZyhmaWxlUmVhZGVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWdSZWFkZXIjcmVhZEFuYWx5emVyQ29uZmlnKFJlYWRlcikKLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZyByZWFkQW5hbHl6ZXJDb25maWcoUmVhZGVyIHJlYWRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcgPSBuZXcgQW5hbHl6ZXJDb25maWdJbXBsKCk7Ci0KLSAgICAvLyBQYXJzZSBYTUwKLSAgICBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChyZWFkZXIpOwotCi0gICAgLy8gUGFyc2UgZWxlbWVudHMgaW4gdGhlIGNvbmZpZyBkb2N1bWVudAotICAgIHBhcnNlQ29uZmlnRWxlbWVudChhbmFseXplckNvbmZpZywgZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLQotICAgIHJldHVybiBhbmFseXplckNvbmZpZzsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlciNnZXRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBjb25maWcgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZUNvbmZpZ0VsZW1lbnQoCi0gICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEFERDogR2V0IG5hbWUgYW5kIHZlcnNpb24KLQotICAgIC8vIEFERDogVmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgY29uZmlnIGVsZW1lbnQKLQotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBERUJVRzoKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRWxlbWVudCBuYW1lOiAiICsgbmV4dEVsZW1lbnQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8ZGVzY3JpcHRpb24+Ci0gICAgICBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9ERVNDUklQVElPTikpCi0gICAgICB7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnLnNldERlc2NyaXB0aW9uKFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHZlcmJvc2U+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1ZFUkJPU0UpKQotICAgICAgewotICAgICAgICBhbmFseXplckNvbmZpZy5zZXRWZXJib3NlT3B0aW9uKAotICAgICAgICAgIFhNTFV0aWxzLmdldEJvb2xlYW5WYWx1ZShuZXh0RWxlbWVudCwgZmFsc2UpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGFzc2VydGlvblJlc3VsdHM+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0FTU0VSVElPTl9SRVNVTFRTKSkKLSAgICAgIHsKLSAgICAgICAgLy8gQ3JlYXRlIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbiBvYmplY3QKLSAgICAgICAgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0KLSAgICAgICAgICBuZXcgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwoKTsKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihhc3NlcnRpb25SZXN1bHRzT3B0aW9uKTsKLQotICAgICAgICAvLyBTZXQgcmVzdWx0IHR5cGUKLSAgICAgICAgU3RyaW5nIHJlc3VsdFR5cGUgPQotICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuQVRUUl9UWVBFKTsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRBc3NlcnRpb25SZXN1bHRUeXBlKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdFR5cGUubmV3SW5zdGFuY2UocmVzdWx0VHlwZSkpOwotCi0gICAgICAgIC8vIFNldCBzaG93IGxvZyBlbnRyeQotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dNZXNzYWdlRW50cnkoCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKAotICAgICAgICAgICAgbmV4dEVsZW1lbnQsCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9NRVNTQUdFX0VOVFJZLAotICAgICAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5nZXRTaG93TWVzc2FnZUVudHJ5KCkpKTsKLQotICAgICAgICAvLyBTZXQgc2hvdyBmYWlsdXJlIG1lc3NhZ2UKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93RmFpbHVyZU1lc3NhZ2UoCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKAotICAgICAgICAgICAgbmV4dEVsZW1lbnQsCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9GQUlMVVJFX01FU1NBR0UsCi0gICAgICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLmdldFNob3dGYWlsdXJlTWVzc2FnZSgpKSk7Ci0KLSAgICAgICAgLy8gU2V0IHNob3cgZmFpbHVyZSBkZXRhaWwKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93RmFpbHVyZURldGFpbCgKLSAgICAgICAgICBYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUoCi0gICAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0ZBSUxVUkVfREVUQUlMLAotICAgICAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5nZXRTaG93RmFpbHVyZURldGFpbCgpKSk7Ci0KLSAgICAgICAgLy8gUkVNT1ZFOiBTZXQgc2hvdyB3YXJuaW5nIG1lc3NhZ2UKLSAgICAgICAgLy9hc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dXYXJuaW5nTWVzc2FnZShYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUobmV4dEVsZW1lbnQsIAotICAgICAgICAvLyAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1dBUk5JTkdfTUVTU0FHRSwgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5nZXRTaG93V2FybmluZ01lc3NhZ2UoKSkpOwotICAgICAgfQotCi0gICAgICAvLyA8cmVwb3J0RmlsZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fUkVQT1JUX0ZJTEUpKQotICAgICAgewotICAgICAgICBwYXJzZVJlcG9ydEZpbGVFbGVtZW50KGFuYWx5emVyQ29uZmlnLCBuZXh0RWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx0ZXN0QXNzZXJ0aW9uRmlsZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05TX0ZJTEUpKQotICAgICAgewotICAgICAgICBhbmFseXplckNvbmZpZy5zZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8bG9nRmlsZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fTE9HX0ZJTEUpKQotICAgICAgewotICAgICAgICBTdHJpbmcgY29ycmVsYXRpb25UeXBlID0KLSAgICAgICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZSgKLSAgICAgICAgICAgIG5leHRFbGVtZW50LAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfQ09SUkVMQVRJT05fVFlQRSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnLnNldENvcnJlbGF0aW9uVHlwZSgKLSAgICAgICAgICBjb3JyZWxhdGlvblR5cGUgPT0gbnVsbCA/ICJvcGVyYXRpb24iIDogY29ycmVsYXRpb25UeXBlKTsKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0TG9nTG9jYXRpb24oWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8d3NkbFJlZmVyZW5jZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9SRUZFUkVOQ0UpKQotICAgICAgewotICAgICAgICBwYXJzZVdzZGxSZWZlcmVuY2UoYW5hbHl6ZXJDb25maWcsIG5leHRFbGVtZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gPHVkZGlSZWZlcmVuY2U+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1VERElfUkVGRVJFTkNFKSkKLSAgICAgIHsKLSAgICAgICAgcGFyc2VVZGRpUmVmZXJlbmNlKGFuYWx5emVyQ29uZmlnLCBuZXh0RWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gVGhyb3cgZXhjZXB0aW9uCi0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICJjb25maWcwNiIsCi0gICAgICAgICAgICBuZXh0RWxlbWVudC5nZXRMb2NhbE5hbWUoKSwKLSAgICAgICAgICAgICJJbnZhbGlkIGFuYWx5emVyIGNvbmZpZyBlbGVtZW50OiIpKTsKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHJlcG9ydEZpbGUgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZVJlcG9ydEZpbGVFbGVtZW50KAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIEVsZW1lbnQgZWxlbWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXQgcmVwb3J0IGxvY2F0aW9uIGFuZCByZXBsYWNlIGluZGljYXRvcgotICAgIGFuYWx5emVyQ29uZmlnLnNldFJlcGxhY2VSZXBvcnQoCi0gICAgICBYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfUkVQTEFDRSwgZmFsc2UpKTsKLSAgICBhbmFseXplckNvbmZpZy5zZXRSZXBvcnRMb2NhdGlvbigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICBlbGVtZW50LAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9MT0NBVElPTiwKLSAgICAgICAgV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1VSSSkpOwotCi0gICAgLy8gQUREOiBJZiB0aGUgcmVwb3J0IGxvY2F0aW9uIHdhc24ndCBzcGVjaWZpZWQsIHRoZW4gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgLy9pZiAoYW5hbHl6ZXJDb25maWcuZ2V0UmVwb3J0TG9jYXRpb24oKSA9PSBudWxsKQotICAgIC8vICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJUaGUgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBmaWxlIG11c3QgY29udGFpbiB0aGUgcmVwb3J0IGZpbGUgbG9jYXRpb24uIik7Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8YWRkU3R5bGVTaGVldD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0FERF9TVFlMRV9TSEVFVCkpCi0gICAgICB7Ci0gICAgICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotCi0gICAgICAgIC8vIFBhcnNlIHRoZSBlbGVtZW50ICAKLSAgICAgICAgVGVzdFV0aWxzLnBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICBhZGRTdHlsZVNoZWV0LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX1JFUE9SVF9YU0wpOwotCi0gICAgICAgIC8vIFNldCBhZGQgc3R5bGUgc2hlZXQKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAgIG5leHRFbGVtZW50LmdldExvY2FsTmFtZSgpLAotICAgICAgICAgICAgIkludmFsaWQgYW5hbHl6ZXIgY29uZmlnIGVsZW1lbnQ6IikpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2Ugd3NkbCByZWZlcmVuY2UgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZVdzZGxSZWZlcmVuY2UoCi0gICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBVRERJIHJlZmVyZW5jZQotICAgIFdTRExSZWZlcmVuY2Ugd3NkbFJlZmVyZW5jZSA9IG5ldyBXU0RMUmVmZXJlbmNlSW1wbCgpOwotCi0gICAgLy8gU2V0IFdTREwgcmVmZXJlbmNlCi0gICAgYW5hbHl6ZXJDb25maWcuc2V0V1NETFJlZmVyZW5jZSh3c2RsUmVmZXJlbmNlKTsKLQotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIHdoaWxlIChuZXh0RWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIDx3c2RsVVJJPgotICAgICAgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9VUkkpKQotICAgICAgewotICAgICAgICAvLyBTZXQgV1NETCBsb2NhdGlvbgotICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExMb2NhdGlvbihYTUxVdGlscy5nZXRUZXh0KG5leHRFbGVtZW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxzZXJ2aWNlTG9jYXRpb24+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1NFUlZJQ0VfTE9DQVRJT04pKQotICAgICAgewotICAgICAgICAvLyBTZXQgc2VydmljZSBsb2NhdGlvbgotICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFNlcnZpY2VMb2NhdGlvbihYTUxVdGlscy5nZXRUZXh0KG5leHRFbGVtZW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2RsRWxlbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9FTEVNRU5UKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IFdTREwgZWxlbWVudAotICAgICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHBhcnNlV3NkbEVsZW1lbnQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAgIG5leHRFbGVtZW50LmdldExvY2FsTmFtZSgpLAotICAgICAgICAgICAgIkludmFsaWQgYW5hbHl6ZXIgY29uZmlnIGVsZW1lbnQ6IikpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0KLSAgICAvLyBJZiBXU0RMIGVsZW1lbnQgb3IgV1NMIFVSSSBub3Qgc3BlY2lmaWVkLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmICgod3NkbFJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpID09IG51bGwpCi0gICAgICB8fCAod3NkbFJlZmVyZW5jZS5nZXRXU0RMTG9jYXRpb24oKSA9PSBudWxsKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwNyIsCi0gICAgICAgICAgIkJvdGggdGhlIDx3c2RsRWxlbWVudD4gYW5kIDx3c2RsVVJJPiBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZC4iKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdHlwZSBpcyBwb3J0IG9yIG9wZXJhdGlvbiwgdGhlbiBwYXJlbnQgZWxlbWVudCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkCi0gICAgaWYgKCgod3NkbFJlZmVyZW5jZQotICAgICAgLmdldFdTRExFbGVtZW50KCkKLSAgICAgIC5nZXRUeXBlKCkKLSAgICAgIC5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9QT1JUKSkKLSAgICAgIHx8ICh3c2RsUmVmZXJlbmNlCi0gICAgICAgIC5nZXRXU0RMRWxlbWVudCgpCi0gICAgICAgIC5nZXRUeXBlKCkKLSAgICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpKQotICAgICAgJiYgKHdzZGxSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50TmFtZSgpID09IG51bGwpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA5IiwKLSAgICAgICAgICAiVGhlIHBhcmVudEVsZW1lbnROYW1lIGF0dHJpYnV0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aXRoIGEgV1NETCB0eXBlIG9mICIKLSAgICAgICAgICAgICsgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQKLSAgICAgICAgICAgICsgIiBvciAiCi0gICAgICAgICAgICArIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04KLSAgICAgICAgICAgICsgIi4iKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHVkZGkgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlVWRkaVJlZmVyZW5jZSgKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICBFbGVtZW50IGVsZW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIFVEREkgcmVmZXJlbmNlCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlID0gbmV3IFVERElSZWZlcmVuY2VJbXBsKCk7Ci0KLSAgICAvLyBTZXQgVURESSByZWZlcmVuY2UKLSAgICBhbmFseXplckNvbmZpZy5zZXRVRERJUmVmZXJlbmNlKHVkZGlSZWZlcmVuY2UpOwotCi0gICAgLy8gR2V0IGZpcnN0IGNoaWxkIGVsZW1lbnQKLSAgICBFbGVtZW50IG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgd2hpbGUgKG5leHRFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgLy8gPGlucXVpcnlVUkw+Ci0gICAgICBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9JTlFVSVJZX1VSTCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBpbnF1aXJ5IFVSTAotICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldElucXVpcnlVUkwoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8dWRkaUtleT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fVURESV9LRVkpKQotICAgICAgewotICAgICAgICAvLyBTZXQgVURESSBrZXkgYW5kIGtleSB0eXBlCi0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0S2V5KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRLZXlUeXBlKAotICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuQVRUUl9UWVBFKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2RsRWxlbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9FTEVNRU5UKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IFdTREwgZWxlbWVudAotICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldFdTRExFbGVtZW50KHBhcnNlV3NkbEVsZW1lbnQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHNlcnZpY2VMb2NhdGlvbj4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTikpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBzZXJ2aWNlIGxvY2F0aW9uCi0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0U2VydmljZUxvY2F0aW9uKFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLyogUkVNT1ZFOgotICAgICAgLy8gPHdzZGxFbGVtZW50PgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9XU0RMX0VMRU1FTlQpKSB7Ci0gICAgICAgIC8vIFNldCBzZXJ2aWNlIGxvY2F0aW9uCi0gICAgICAgIHBhcnNlV3NkbEVsZW1lbnQoYW5hbHl6ZXJDb25maWcsIG5leHRFbGVtZW50KTsKLSAgICAgICB9Ci0gICAgICAgKi8KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAgIG5leHRFbGVtZW50LmdldExvY2FsTmFtZSgpLAotICAgICAgICAgICAgIkludmFsaWQgYW5hbHl6ZXIgY29uZmlnIGVsZW1lbnQ6IikpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgV1NETCBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSBXU0RMRWxlbWVudCBwYXJzZVdzZGxFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBuZXcgV1NETEVsZW1lbnRJbXBsKCk7Ci0KLSAgICAvLyBTZXQgdHlwZSwgbmFtZXNwYWNlLCBwYXJlbnQgZWxlbWVudCBuYW1lIGFuZCBuYW1lCi0gICAgd3NkbEVsZW1lbnQuc2V0VHlwZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpKTsKLSAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UoCi0gICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBXU0lDb25zdGFudHMuQVRUUl9OQU1FU1BBQ0UpKTsKLSAgICB3c2RsRWxlbWVudC5zZXRQYXJlbnRFbGVtZW50TmFtZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICBlbGVtZW50LAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9QQVJFTlRfRUxFTUVOVF9OQU1FKSk7Ci0KLSAgICBTdHJpbmcgd3NkbEVsZW1lbnROYW1lID0gWE1MVXRpbHMuZ2V0VGV4dChlbGVtZW50KTsKLSAgICBpZiAod3NkbEVsZW1lbnROYW1lLmVxdWFscygiIikpCi0gICAgewotICAgICAgLy8gVGhyb3cgZXhjZXB0aW9uCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKCJjb25maWcxOSIsICJUaGUgV1NETCBlbGVtZW50IG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuIikpOwotICAgIH0KLSAgICB3c2RsRWxlbWVudC5zZXROYW1lKHdzZGxFbGVtZW50TmFtZSk7Ci0KLSAgICByZXR1cm4gd3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBhbmFseXplciBjb25maWcgbmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICByZXR1cm4gaXNFbGVtZW50KAotICAgICAgZWxlbWVudCwKLSAgICAgIGdldFZhbGlkV1NJQW5hbHl6ZXJDb25maWdOYW1lc3BhY2VzKCksCi0gICAgICBsb2NhbE5hbWUpOwotICB9Ci0KLSAgCi0gIHN0YXRpYyBwdWJsaWMgTGlzdCBnZXRWYWxpZFdTSUFuYWx5emVyQ29uZmlnTmFtZXNwYWNlcygpCi0gIHsKLSAgCUFycmF5TGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAJbGlzdC5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQU5BTFlaRVJfQ09ORklHXzIwMDMpOwotICAJbGlzdC5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQU5BTFlaRVJfQ09ORklHKTsKLSAgCXJldHVybiBsaXN0OwotICB9Ci0gIAotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBhbmFseXplciBjb25maWcgbmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgTGlzdCBuYW1lc3BhY2VzLAotICAgIFN0cmluZyBsb2NhbE5hbWUpCi0gIHsKLSAgICByZXR1cm4gWE1MVXRpbHMuaXNFbGVtZW50KGVsZW1lbnQsIG5hbWVzcGFjZXMsIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlSUQsIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlKG1lc3NhZ2VJRCwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNzYWdlIGZyb20gcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgbWVzc2FnZUlELAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlOwotICAgIGlmIChtZXNzYWdlTGlzdCAhPSBudWxsKQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICAgIGVsc2UKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGEgKyAiLiI7Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0Fzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZTNkMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbiBkZWZpbml0aW9uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbCBpbXBsZW1lbnRzIEFzc2VydGlvblJlc3VsdHNPcHRpb24KLXsKLSAgLyoqCi0gICAqIEFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBBc3NlcnRpb25SZXN1bHRUeXBlIHJlc3VsdFR5cGUgPSBBc3NlcnRpb25SZXN1bHRUeXBlLkFMTDsKLQotICAvKioKLSAgICogU2hvdyBtZXNzYWdlIGVudHJ5IGluZGljYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHNob3dNZXNzYWdlRW50cnkgPSB0cnVlOwotCi0gIC8qKgotICAgKiBTaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBmYWxzZTsKLQotICAvKioKLSAgICogU2hvdyBmYWlsdXJlIG1lc3NhZ2UgaW5kaWNhdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvd0ZhaWx1cmVNZXNzYWdlID0gdHJ1ZTsKLQotICAvKioKLSAgICogU2hvdyBmYWlsdXJlIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG93RmFpbHVyZURldGFpbCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdFR5cGUKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRUeXBlIGdldEFzc2VydGlvblJlc3VsdFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHJlc3VsdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZShBc3NlcnRpb25SZXN1bHRUeXBlIHJlc3VsdFR5cGUpCi0gIHsKLSAgICB0aGlzLnJlc3VsdFR5cGUgPSByZXN1bHRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzaG93IG1lc3NhZ2UgZW50cnkgaW5kaWNhdG9yLgotICAgKiBAc2VlICNzZXRTaG93TWVzc2FnZUVudHJ5Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93TWVzc2FnZUVudHJ5KCkKLSAgewotICAgIHJldHVybiB0aGlzLnNob3dNZXNzYWdlRW50cnk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHNob3cgbWVzc2FnZSBlbnRyeSBpbmRpY3Rvci4KLSAgICogQHNlZSAjZ2V0U2hvd01lc3NhZ2VFbnRyeQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd01lc3NhZ2VFbnRyeShib29sZWFuIHNob3dNZXNzYWdlRW50cnkpCi0gIHsKLSAgICB0aGlzLnNob3dNZXNzYWdlRW50cnkgPSBzaG93TWVzc2FnZUVudHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnNob3dBc3NlcnRpb25EZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBhc3NlcnRpb24gZGVzY3JpcHRpb24gaW5kaWN0b3IuCi0gICAqIEBzZWUgI2dldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKGJvb2xlYW4gc2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5zaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBzaG93QXNzZXJ0aW9uRGVzY3JpcHRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNob3cgZmFpbHVyZSBtZXNzYWdlIGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd0ZhaWx1cmVNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2hvd0ZhaWx1cmVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBzaG93IGZhaWx1cmUgbWVzYWdlIGluZGljYXRvci4KLSAgICogQHNlZSAjZ2V0U2hvd0ZhaWx1cmVNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93RmFpbHVyZU1lc3NhZ2UoYm9vbGVhbiBzaG93RmFpbHVyZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLnNob3dGYWlsdXJlTWVzc2FnZSA9IHNob3dGYWlsdXJlTWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc2hvdyBmYWlsdXJlIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dGYWlsdXJlRGV0YWlsCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93RmFpbHVyZURldGFpbCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5zaG93RmFpbHVyZURldGFpbDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBmYWlsdXJlIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2dldFNob3dGYWlsdXJlRGV0YWlsCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93RmFpbHVyZURldGFpbChib29sZWFuIHNob3dGYWlsdXJlRGV0YWlsKQotICB7Ci0gICAgdGhpcy5zaG93RmFpbHVyZURldGFpbCA9IHNob3dGYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgIEFzc2VydGlvbiBSZXN1bHRzOiIpOwotICAgIHB3LnByaW50bG4oIiAgICB0eXBlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5yZXN1bHRUeXBlKTsKLSAgICBwdy5wcmludGxuKCIgICAgbWVzc2FnZUVudHJ5IC4uLi4uLi4uLi4uLi4gIiArIHRoaXMuc2hvd01lc3NhZ2VFbnRyeSk7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24gLi4uLi4gIiArIHRoaXMuc2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKTsKLSAgICBwdy5wcmludGxuKCIgICAgZmFpbHVyZU1lc3NhZ2UgLi4uLi4uLi4uLi4gIiArIHRoaXMuc2hvd0ZhaWx1cmVNZXNzYWdlKTsKLSAgICBwdy5wcmludGxuKCIgICAgZmFpbHVyZURldGFpbCAuLi4uLi4uLi4uLi4gIiArIHRoaXMuc2hvd0ZhaWx1cmVEZXRhaWwpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0IGFzIGFuIFhNTCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDb25maWcgb3B0aW9ucwotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FTU0VSVElPTl9SRVNVTFRTICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9UWVBFICsgIj1cIiIgKyBnZXRBc3NlcnRpb25SZXN1bHRUeXBlKCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9NRVNTQUdFX0VOVFJZICsgIj1cIiIgKyBnZXRTaG93TWVzc2FnZUVudHJ5KCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9BU1NFUlRJT05fREVTQ1JJUFRJT04KLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIGdldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbigpCi0gICAgICAgICsgIlwiICIpOwotICAgIHB3LnByaW50KAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfRkFJTFVSRV9NRVNTQUdFCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBnZXRTaG93RmFpbHVyZU1lc3NhZ2UoKQotICAgICAgICArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfRkFJTFVSRV9ERVRBSUwKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIGdldFNob3dGYWlsdXJlRGV0YWlsKCkKLSAgICAgICAgKyAiXCIvPiIpOwotICAgIC8vIFJFTU9WRToKLSAgICAvL3B3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfV0FSTklOR19NRVNTQUdFICsgIj1cIiIgKyBnZXRTaG93V2FybmluZ01lc3NhZ2UoKSArICJcIi8+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvVURESVJlZmVyZW5jZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1VERElSZWZlcmVuY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYzdiNmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvVURESVJlZmVyZW5jZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGlpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgdG8gYSBkaXNjb3ZlcnkgYXJ0aWZhY3QuICAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgVURESVJlZmVyZW5jZQotewotICAvKioKLSAgICogVURESSBrZXkgdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcga2V5VHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFVEREkga2V5LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBrZXkgPSBudWxsOwotCi0gIC8qKgotICAgKiBVRERJIGlucXVpcnkgVVJMLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBpbnF1aXJ5VVJMID0gbnVsbDsKLQotICAvKioKLSAgICogV1NETCBlbGVtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogU2VydmljZSBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgc2VydmljZUxvY2F0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2UjZ2V0S2V5VHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEtleVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMua2V5VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZSNzZXRLZXlUeXBlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEtleVR5cGUoU3RyaW5nIGtleVR5cGUpCi0gIHsKLSAgICBpZiAoa2V5VHlwZS5lcXVhbHMoQklORElOR19LRVkpIHx8IGtleVR5cGUuZXF1YWxzKFRNT0RFTF9LRVkpKQotICAgICAgdGhpcy5rZXlUeXBlID0ga2V5VHlwZTsKLSAgICBlbHNlCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAiSW52YWxpZCBVRERJIGtleSB0eXBlOiBbIiArIGtleVR5cGUgKyAiXS4iKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZSNnZXRLZXkoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRLZXkoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMua2V5OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlI3NldEtleShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRLZXkoU3RyaW5nIGtleSkKLSAgewotICAgIHRoaXMua2V5ID0ga2V5OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlI2dldElucXVpcnlVUkwoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIHJldHVybiB0aGlzLmlucXVpcnlVUkw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2Ujc2V0SW5xdWlyeVVSTChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgdGhpcy5pbnF1aXJ5VVJMID0gaW5xdWlyeVVSTDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRXU0RMRWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0V1NETEVsZW1lbnQoV1NETEVsZW1lbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRTZXJ2aWNlTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2VydmljZUxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI3NldFNlcnZpY2VMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlTG9jYXRpb24oU3RyaW5nIHNlcnZpY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMuc2VydmljZUxvY2F0aW9uID0gc2VydmljZUxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgIFVEREkgUmVmZXJlbmNlOiAiKTsKLSAgICBwdy5wcmludGxuKCIgICAgVURESSBLZXk6ICIpOwotICAgIHB3LnByaW50bG4oIiAgICAgIHR5cGUgLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5rZXlUeXBlKTsKLSAgICBwdy5wcmludGxuKCIgICAgICBrZXkgLi4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMua2V5KTsKLSAgICBwdy5wcmludGxuKCIgICAgaW5xdWlyeVVSTCAuLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuaW5xdWlyeVVSTCk7Ci0gICAgaWYgKHRoaXMuc2VydmljZUxvY2F0aW9uICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKCIgICAgc2VydmljZUxvY2F0aW9uIC4uLi4uLi4uLi4gIiArIHRoaXMuc2VydmljZUxvY2F0aW9uKTsKLSAgICBpZiAodGhpcy53c2RsRWxlbWVudCAhPSBudWxsKQotICAgICAgcHcucHJpbnQodGhpcy53c2RsRWxlbWVudC50b1N0cmluZygpKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBFbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVURESV9LRVkgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiIiArIGdldEtleVR5cGUoKSArICJcIj4iKTsKLSAgICBwdy5wcmludChnZXRLZXkoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVURESV9LRVkgKyAiPiIpOwotICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fSU5RVUlSWV9VUkwgKyAiPiIpOwotICAgIHB3LnByaW50KGdldElucXVpcnlVUkwoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fSU5RVUlSWV9VUkwgKyAiPiIpOwotCi0gICAgaWYgKHRoaXMud3NkbEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KGdldFdTRExFbGVtZW50KCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICBpZiAodGhpcy5zZXJ2aWNlTG9jYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NFUlZJQ0VfTE9DQVRJT04gKyAiPiIpOwotICAgICAgcHcucHJpbnQoZ2V0U2VydmljZUxvY2F0aW9uKCkpOwotICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgIiAgICAgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTiArICI+Iik7Ci0gICAgfQotCi0gICAgcHcucHJpbnRsbigiICAgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1dTRExFbGVtZW50SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvV1NETEVsZW1lbnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzY3ZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvV1NETEVsZW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci0KLS8qKgotICogVGhlIGltcGxlbWVudGF0aW9uIGZvciBXU0RMIGRlZmluaXRpb25zLiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExFbGVtZW50SW1wbCBpbXBsZW1lbnRzIFdTRExFbGVtZW50Ci17Ci0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZTsKLQotICAvKioKLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjc2V0TmFtZXNwYWNlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5uYW1lc3BhY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldE5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5uYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI2dldE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIFFOYW1lIGdldFFOYW1lKCkKLSAgewotICAgIHJldHVybiBuZXcgUU5hbWUodGhpcy5uYW1lc3BhY2UsIHRoaXMubmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHNlZSAjc2V0UGFyZW50RWxlbWVudE5hbWUKLSAgCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudEVsZW1lbnROYW1lKCkKLSAgewotICAgIHJldHVybiB0aGlzLnBhcmVudEVsZW1lbnROYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI2dldFBhcmVudEVsZW1lbnROYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRFbGVtZW50TmFtZShTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUpCi0gIHsKLSAgICB0aGlzLnBhcmVudEVsZW1lbnROYW1lID0gcGFyZW50RWxlbWVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50I2dldFBhcmVudEVsZW1lbnRRTmFtZSgpCi0gICAqLwotICBwdWJsaWMgUU5hbWUgZ2V0UGFyZW50RWxlbWVudFFOYW1lKCkKLSAgewotICAgIHJldHVybiBuZXcgUU5hbWUodGhpcy5uYW1lc3BhY2UsIHRoaXMucGFyZW50RWxlbWVudE5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHBvcnQgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUG9ydCgpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGJpbmRpbmcgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1BvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiB0eXBlLmVxdWFscyhXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHR5cGUuZXF1YWxzKFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIG1lc3NhZ2UgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgICAgV1NETCBFbGVtZW50OiAiKTsKLSAgICBwdy5wcmludGxuKCIgICAgICB0eXBlIC4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMudHlwZSk7Ci0gICAgcHcucHJpbnRsbigiICAgICAgbmFtZXNwYWNlIC4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLm5hbWVzcGFjZSk7Ci0gICAgcHcucHJpbnRsbigiICAgICAgbmFtZSAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLm5hbWUpOwotCi0gICAgaWYgKHRoaXMucGFyZW50RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50bG4oIiAgICAgIHBhcmVudEVsZW1lbnROYW1lIC4uLi4uLiAiICsgdGhpcy5wYXJlbnRFbGVtZW50TmFtZSk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QgYXMgYW4gWE1MIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgcHcucHJpbnQoIiAgICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiIiArIGdldFR5cGUoKSArICJcIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9OQU1FU1BBQ0UgKyAiPVwiIiArIGdldE5hbWVzcGFjZSgpICsgIlwiICIpOwotICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnROYW1lICE9IG51bGwpCi0gICAgICBwdy5wcmludCgKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfUEFSRU5UX0VMRU1FTlRfTkFNRQotICAgICAgICAgICsgIj1cIiIKLSAgICAgICAgICArIGdldFBhcmVudEVsZW1lbnROYW1lKCkKLSAgICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50KCI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0TmFtZSgpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1dTRExSZWZlcmVuY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9XU0RMUmVmZXJlbmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGJmZjQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1dTRExSZWZlcmVuY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLQotLyoqCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIGEgcmVmZXJlbmNlIHRvIGEgZGVzY3JpcHRpb24gYXJ0aWZhY3QuICAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgV1NETFJlZmVyZW5jZQotewotICAvKioKLSAgICogV1NETCBlbGVtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogU2VydmljZSBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgc2VydmljZUxvY2F0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbExvY2F0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMUmVmZXJlbmNlSW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciB3aXRoIGFsbCBzZXR0aW5ncy4KLSAgICogQHBhcmFtIHdzZGxFbGVtZW50ICAgICAgYSBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB3c2RsTG9jYXRpb24gICAgIGEgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VMb2NhdGlvbiAgYSBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIFdTRExSZWZlcmVuY2VJbXBsKAotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50LAotICAgIFN0cmluZyB3c2RsTG9jYXRpb24sCi0gICAgU3RyaW5nIHNlcnZpY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgICB0aGlzLndzZGxMb2NhdGlvbiA9IHdzZGxMb2NhdGlvbjsKLSAgICB0aGlzLnNlcnZpY2VMb2NhdGlvbiA9IHNlcnZpY2VMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRXU0RMRWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbEVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0V1NETEVsZW1lbnQoV1NETEVsZW1lbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIHRoaXMud3NkbEVsZW1lbnQgPSB3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNnZXRXU0RMTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbExvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI3NldFdTRExMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXU0RMTG9jYXRpb24oU3RyaW5nIHdzZGxMb2NhdGlvbikKLSAgewotICAgIHRoaXMud3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI2dldFNlcnZpY2VMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0U2VydmljZUxvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VMb2NhdGlvbihTdHJpbmcgc2VydmljZUxvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlTG9jYXRpb24gPSBzZXJ2aWNlTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgV1NETCBSZWZlcmVuY2U6Iik7Ci0gICAgcHcucHJpbnQodGhpcy53c2RsRWxlbWVudC50b1N0cmluZygpKTsKLSAgICBwdy5wcmludGxuKCIgICAgd3NkbFVSSSAuLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMud3NkbExvY2F0aW9uKTsKLSAgICBpZiAodGhpcy5zZXJ2aWNlTG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHB3LnByaW50bG4oIiAgc2VydmljZUxvY2F0aW9uIC4uLi4uLi4uLi4gIiArIHRoaXMuc2VydmljZUxvY2F0aW9uKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBFbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotICAgIHB3LnByaW50KGdldFdTRExFbGVtZW50KCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgcHcucHJpbnQoIiAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9XU0RMX1VSSSArICI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0V1NETExvY2F0aW9uKCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1dTRExfVVJJICsgIj4iKTsKLQotICAgIGlmICh0aGlzLnNlcnZpY2VMb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTiArICI+Iik7Ci0gICAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKGdldFNlcnZpY2VMb2NhdGlvbigpKSk7Ci0gICAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9TRVJWSUNFX0xPQ0FUSU9OICsgIj4iKTsKLSAgICB9Ci0KLSAgICBwdy5wcmludGxuKCIgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL0FkZFN0eWxlU2hlZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2NvbW1vbi9BZGRTdHlsZVNoZWV0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZGY3ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL0FkZFN0eWxlU2hlZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIEFkZFN0eWxlU2hlZXQgZWxlbWVudC4gCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQWRkU3R5bGVTaGVldCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQUREX1NUWUxFX1NIRUVUOwotCi0gIC8qKgotICAgKiBHZXQgaHJlZi4KLSAgICogQHJldHVybiBocmVmLgotICAgKiBAc2VlICNzZXRIcmVmCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhyZWYoKTsKLQotICAvKioKLSAgICogU2V0IGhyZWYuCi0gICAqIEBwYXJhbSBocmVmIGEgaHJlZi4KLSAgICogQHNlZSAjZ2V0SHJlZgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SHJlZihTdHJpbmcgaHJlZik7Ci0KLSAgLyoqCi0gICAqIEdldCB0eXBlLgotICAgKiBAcmV0dXJuIHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgYSB0eXBlLgotICAgKiBAc2VlICNnZXRUeXBlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKTsKLQotICAvKioKLSAgICogR2V0IHRpdGxlLgotICAgKiBAcmV0dXJuIHRpdGxlLgotICAgKiBAc2VlICNzZXRUaXRsZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGl0bGUuCi0gICAqIEBwYXJhbSB0aXRsZSBhIHRpdGxlLgotICAgKiBAc2VlICNnZXRUaXRsZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGl0bGUoU3RyaW5nIHRpdGxlKTsKLQotICAvKioKLSAgICogR2V0IG1lZGlhLgotICAgKiBAcmV0dXJuIG1lZGlhLgotICAgKiBAc2VlICNzZXRNZWRpYQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZWRpYSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGl0bGUuCi0gICAqIEBwYXJhbSBtZWRpYSBtZWRpYS4KLSAgICogQHNlZSAjZ2V0TWVkaWEKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lZGlhKFN0cmluZyBtZWRpYSk7Ci0KLSAgLyoqCi0gICAqIEdldCBjaGFyc2V0LgotICAgKiBAcmV0dXJuIGNoYXJzZXQuCi0gICAqIEBzZWUgI3NldENoYXJzZXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2hhcnNldCgpOwotCi0gIC8qKgotICAgKiBTZXQgY2hhcnNldC4KLSAgICogQHBhcmFtIGNoYXJzZXQgY2hhcnNldC4KLSAgICogQHNlZSAjZ2V0Q2hhcnNldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2hhcnNldChTdHJpbmcgY2hhcnNldCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhbHRlcm5hdGUuCi0gICAqIEByZXR1cm4gYWx0ZXJuYXRlLgotICAgKiBAc2VlICNzZXRBbHRlcm5hdGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWx0ZXJuYXRlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhbHRlcm5hdGUuCi0gICAqIEBwYXJhbSBhbHRlcm5hdGUgYWx0ZXJuYXRlLgotICAgKiBAc2VlICNnZXRBbHRlcm5hdGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFsdGVybmF0ZShTdHJpbmcgYWx0ZXJuYXRlKTsKLQotICAvKioKLSAgICogU2V0IGlmIHRoZSBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbiBzaG91bGQgYmUgYSBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIGJvb2xlYW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KGJvb2xlYW4gY29tbWVudCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbi4KLSAgICogQHJldHVybiBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3R5bGVTaGVldFN0cmluZygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL2ltcGwvQWRkU3R5bGVTaGVldEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2NvbW1vbi9pbXBsL0FkZFN0eWxlU2hlZXRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NjVkMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL2ltcGwvQWRkU3R5bGVTaGVldEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci0KLS8qKgotICogVGhlIGltcGxlbWVudGF0aW9uIGZvciBBZGRTdHlsZVNoZWV0IGVsZW1lbnQuIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQWRkU3R5bGVTaGVldEltcGwgaW1wbGVtZW50cyBBZGRTdHlsZVNoZWV0Ci17Ci0gIC8qKgotICAgKiBBdHRyaWJ1dGUgdmFsdWVzLgotICAgKi8KLSAgcHJvdGVjdGVkIFRyZWVNYXAgYXR0cmlidXRlVmFsdWVMaXN0ID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBhdHRyaWJ1dGVzLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZ1tdIGF0dHJpYnV0ZU5hbWVMaXN0ID0KLSAgICB7Ci0gICAgICBXU0lDb25zdGFudHMuQVRUUl9IUkVGLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSwKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1RJVExFLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfTUVESUEsCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9DSEFSU0VULAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFIH07Ci0KLSAgLyoqCi0gICAqIFNldCBpZiB0aGUgc3R5bGUgc2hlZXQgZGVjbGFyYXRpb24gc2hvdWxkIGJlIGEgY29tbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGNvbW1lbnQgPSBmYWxzZTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I2dldEhyZWYoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRIcmVmKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfSFJFRik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I3NldEhyZWYoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SHJlZihTdHJpbmcgaHJlZikKLSAgewotICAgIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LnB1dChXU0lDb25zdGFudHMuQVRUUl9IUkVGLCBocmVmKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LmdldChXU0lDb25zdGFudHMuQVRUUl9UWVBFKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0VHlwZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUsIHR5cGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNnZXRUaXRsZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfVElUTEUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNzZXRUaXRsZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpCi0gIHsKLSAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5wdXQoV1NJQ29uc3RhbnRzLkFUVFJfVElUTEUsIHRpdGxlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0TWVkaWEoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZWRpYSgpCi0gIHsKLSAgICByZXR1cm4gKFN0cmluZykgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QuZ2V0KFdTSUNvbnN0YW50cy5BVFRSX01FRElBKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0TWVkaWEoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVkaWEoU3RyaW5nIG1lZGlhKQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX01FRElBLCBtZWRpYSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I2dldENoYXJzZXQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDaGFyc2V0KCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfQ0hBUlNFVCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I3NldENoYXJzZXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2hhcnNldChTdHJpbmcgY2hhcnNldCkKLSAgewotICAgIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LnB1dChXU0lDb25zdGFudHMuQVRUUl9DSEFSU0VULCBjaGFyc2V0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0QWx0ZXJuYXRlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWx0ZXJuYXRlKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0QWx0ZXJuYXRlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFsdGVybmF0ZShTdHJpbmcgYWx0ZXJuYXRlKQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX0FMVEVSTkFURSwgYWx0ZXJuYXRlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogU2V0IGlmIHRoZSBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbiBzaG91bGQgYmUgYSBjb21tZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChib29sZWFuIGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNnZXRTdHlsZVNoZWV0U3RyaW5nKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3R5bGVTaGVldFN0cmluZygpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc3R5bGVTaGVldCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgIGlmIChjb21tZW50KQotICAgICAgc3R5bGVTaGVldC5hcHBlbmQoIjwhLS0gIik7Ci0KLSAgICBzdHlsZVNoZWV0LmFwcGVuZCgiPD94bWwtc3R5bGVzaGVldCIpOwotCi0gICAgU3RyaW5nIHZhbHVlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKCh2YWx1ZSA9IChTdHJpbmcpIGF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoYXR0cmlidXRlTmFtZUxpc3RbaV0pKQotICAgICAgICAhPSBudWxsKQotICAgICAgICBzdHlsZVNoZWV0LmFwcGVuZCgiICIgKyBhdHRyaWJ1dGVOYW1lTGlzdFtpXSArICI9XCIiICsgdmFsdWUgKyAiXCIiKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHN0eWxlU2hlZXQuYXBwZW5kKCIgPz4iKTsKLQotICAgIGlmIChjb21tZW50KQotICAgICAgc3R5bGVTaGVldC5hcHBlbmQoIiAtLT4iKTsKLQotICAgIHJldHVybiBzdHlsZVNoZWV0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldFN0eWxlU2hlZXRTdHJpbmcoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgcHcucHJpbnQoIiAgICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9IUkVGICsgIj1cIiIgKyBnZXRIcmVmKCkgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgZ2V0VHlwZSgpICsgIlwiICIpOwotICAgIGlmIChnZXRUaXRsZSgpICE9IG51bGwpCi0gICAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9USVRMRSArICI9XCIiICsgZ2V0VGl0bGUoKSArICJcIiAiKTsKLSAgICBpZiAoZ2V0TWVkaWEoKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfTUVESUEgKyAiPVwiIiArIGdldE1lZGlhKCkgKyAiXCIgIik7Ci0gICAgaWYgKGdldENoYXJzZXQoKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfQ0hBUlNFVCArICI9XCIiICsgZ2V0Q2hhcnNldCgpICsgIlwiICIpOwotICAgIGlmIChnZXRBbHRlcm5hdGUoKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFICsgIj1cIiIgKyBnZXRBbHRlcm5hdGUoKSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKCIvPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2ZDI3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCBmb3IgYWxsIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIFJldHVybiBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSAgYSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4ZGUzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTSVByb3BlcnRpZXM7Ci0KLS8qKgotICogVGhpcyBhYnN0cmFjdCBjbGFzcyBkZWZpbmVzIHRoZSBmYWN0b3J5IGludGVyZmFjZSB0aGF0IGNhbiBiZSB1c2VkIHRvIAotICogcmVhZCBhbmQgd3JpdGUgYWxsIG9mIHRoZSBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEb2N1bWVudEZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIEdldCBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50RmFjdG9yeS4KLSAgICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50RmFjdG9yeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIGNyZWF0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBEb2N1bWVudEZhY3RvcnkgbmV3SW5zdGFuY2UoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBSZXR1cm4gaW5zdGFuY2Ugb2YgZmFjdG9yeQotICAgIHJldHVybiBuZXdJbnN0YW5jZShnZXRGYWN0b3J5Q2xhc3NOYW1lKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50RmFjdG9yeSB1c2luZyB0aGUgc3BlY2lmaWVkCi0gICAqIGZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICogQHBhcmFtIGZhY3RvcnlDbGFzc05hbWUgZmFjdG9yeSBjbGFzcyBuYW1lLgotICAgKiBAcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgRG9jdW1lbnRGYWN0b3J5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgY3JlYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIERvY3VtZW50RmFjdG9yeSBuZXdJbnN0YW5jZShTdHJpbmcgZmFjdG9yeUNsYXNzTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gbnVsbDsKLQotICAgIC8vIElmIGEgZmFjdG9yeSBjbGFzcyBuYW1lIHdhcyBzcGVjaWZpZWQsIHRoZW4gY3JlYXRlIG9iamVjdAotICAgIGlmIChmYWN0b3J5Q2xhc3NOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIEdldCBjbGFzcyBvYmplY3QKLSAgICAgICAgQ2xhc3MgZmFjdG9yeUNsYXNzID0gQ2xhc3MuZm9yTmFtZShmYWN0b3J5Q2xhc3NOYW1lKTsKLQotICAgICAgICAvLyBDcmVhdGUgbmV3IGZhY3RvcnkKLSAgICAgICAgZG9jdW1lbnRGYWN0b3J5ID0gKERvY3VtZW50RmFjdG9yeSkgZmFjdG9yeUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGluc3RhbnRpYXRlIGRvY3VtZW50IGZhY3RvcnkgY2xhc3M6ICIKLSAgICAgICAgICAgICsgZmFjdG9yeUNsYXNzTmFtZQotICAgICAgICAgICAgKyAiLiIsCi0gICAgICAgICAgZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJBIFdTSURvY3VtZW50RmFjdG9yeSBpbXBsZW1lbnRhdGlvbiBjbGFzcyB3YXMgbm90IGZvdW5kLiIpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBmYWN0b3J5Ci0gICAgcmV0dXJuIGRvY3VtZW50RmFjdG9yeTsKLSAgfQotCi0gIC8vIERPQ1VNRU5UIFRZUEVTCi0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgZmlsZS4KLSAgICogQHJldHVybiBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBMb2cgbmV3TG9nKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIG1vbml0b3IgY29uZmlnLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IE1vbml0b3JDb25maWcgbmV3TW9uaXRvckNvbmZpZygpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYW5hbHl6ZXIgY29uZmlnLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgYW5hbHl6ZXIgY29uZmlnLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IEFuYWx5emVyQ29uZmlnIG5ld0FuYWx5emVyQ29uZmlnKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBwcm9maWxlIGFzc2VydGlvbnMuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBwcm9maWxlIGFzc2VydGlvbnMuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgUHJvZmlsZUFzc2VydGlvbnMgbmV3UHJvZmlsZUFzc2VydGlvbnMoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIHJlcG9ydC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHJlcG9ydC4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBSZXBvcnQgbmV3UmVwb3J0KCk7Ci0KLSAgLy8gUkVBREVSUwotCi0gIC8qKgotICAgKiBDcmVhdGUgcHJvZmlsZSBhc3NlcnRpb25zIHJlYWRlci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHByb2ZpbGUgYXNzZXJ0aW9ucyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIgbmV3UHJvZmlsZUFzc2VydGlvbnNSZWFkZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIG1vbml0b3IgY29uZmlnIHJlYWRlci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIG1vbml0b3IgY29uZmlnIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBNb25pdG9yQ29uZmlnUmVhZGVyIG5ld01vbml0b3JDb25maWdSZWFkZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGFuYWx5emVyIGNvbmZpZyByZWFkZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhbmFseXplciBjb25maWcgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IEFuYWx5emVyQ29uZmlnUmVhZGVyIG5ld0FuYWx5emVyQ29uZmlnUmVhZGVyKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgcmVhZGVyLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgbG9nIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBMb2dSZWFkZXIgbmV3TG9nUmVhZGVyKCk7Ci0KLSAgLy8gQUREOiBBZGQgb3RoZXIgcmVhZGVycwotCi0gIC8vIFdSSVRFUlMKLQotICAvKioKLSAgICogQ3JlYXRlIHJlcG9ydCB3cml0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnQgd3JpdGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFJlcG9ydFdyaXRlciBuZXdSZXBvcnRXcml0ZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyB3cml0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBsb2cgd3JpdGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IExvZ1dyaXRlciBuZXdMb2dXcml0ZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgcmVwb3J0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnRlci4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBSZXBvcnRlciBuZXdSZXBvcnRlcihSZXBvcnQgcmVwb3J0LCBSZXBvcnRXcml0ZXIgcmVwb3J0V3JpdGVyKTsKLQotICAvLyBBREQ6IEFkZCBvdGhlciB3cml0ZXJzCi0KLSAgLyoqCi0gICAqIEZpbmQgdGhlIGZhY3RvcnkgY2xhc3MgbmFtZSB3aGljaCBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgSmF2YSBwcm9wZXJ0eS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRGYWN0b3J5Q2xhc3NOYW1lKCkKLSAgewotICAgIC8vIEdldCBwcm9wZXJ0eSB2YWx1ZQotICAgIHJldHVybiBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KAotICAgICAgV1NJUHJvcGVydGllcy5QUk9QX0RPQ1VNRU5UX0ZBQ1RPUlksCi0gICAgICBXU0lQcm9wZXJ0aWVzLkRFRl9ET0NVTUVOVF9GQUNUT1JZKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L0RvY3VtZW50UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4N2NlNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIHRoZSBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRSZWFkZXIKLXsKLSAgLyoqCi0gICAqIEdldCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZG9jdW1lbnRVUkkgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgZG9jdW1lbnRVUkkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRXcml0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L0RvY3VtZW50V3JpdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljODg5MjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRXcml0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIHdyaXRlIHRoZSBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIEdldCB0aGUgRG9jdW1lbnQgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIENvbmZvcm1hbmNlIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBEb2N1bWVudCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQ29uZm9ybWFuY2UgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gaWYgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFNldCB3cml0ZXIuCi0gICAqIEBwYXJhbSBkb2N1bWVudExvY2F0aW9uIHRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgZmFpbGVkIG9yIGludGVycnVwdGVkIEkvTyBvcGVyYXRpb25zLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdyaXRlcihTdHJpbmcgZG9jdW1lbnRMb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZSBvdXQgb25seSBhIHBhcnQgb2YgYSBkb2N1bWVudCB0byB0aGUgbG9jYXRpb24KLSAgICogdGhhdCB3YXMgcHJldmlvdXNseSBzZXQgdXNpbmcgdGhlIHNldExvY2F0aW9uIG1ldGhvZC4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIHRyb3VibGUgd3JpdGluZyBvdXQgdGhlIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGlzIG9wZXJhdGlvbiBoYXMgYmVlbiBpbnZva2VkIAotICAgKiAgICAgICAgIGF0IGFuIGlsbGVnYWwgb3IgaW5hcHByb3ByaWF0ZSB0aW1lLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVhZGVyIHJlYWRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZSBvdXQgb25seSBhIHBhcnQgb2YgYSBkb2N1bWVudC4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEBwYXJhbSB3cml0ZXIgYSBXcml0ZXIgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyB0cm91YmxlIHdyaXRpbmcgb3V0IHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlYWRlciByZWFkZXIsIFdyaXRlciB3cml0ZXIpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIENsb3NlIHdyaXRlci4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgdHJvdWJsZSBjbG9zaW5nIHRoZSB3cml0ZXIuCi0gICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBiZWVuIGludm9rZWQgCi0gICAqICAgICAgICAgYXQgYW4gaWxsZWdhbCBvciBpbmFwcHJvcHJpYXRlIHRpbWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBXU0lFeGNlcHRpb24sIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L1dTSURvY3VtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9XU0lEb2N1bWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGRiMGQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L1dTSURvY3VtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgZm9yIGFsbCBDb25mb3JtYW5jZSBYTUwgZG9jdW1lbnRzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NJRG9jdW1lbnQgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqIEBzZWUgI3NldExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnRVUkkgdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudC4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9pbXBsL0RvY3VtZW50RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTNmZmQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5BbmFseXplckNvbmZpZ0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLkFuYWx5emVyQ29uZmlnUmVhZGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nV3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dXcml0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsLk1vbml0b3JDb25maWdJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsLk1vbml0b3JDb25maWdSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGwuUHJvZmlsZUFzc2VydGlvbnNJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGwuUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkRlZmF1bHRSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUmVwb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUmVwb3J0V3JpdGVySW1wbDsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ29uZm9ybWFuY2UgZG9jdW1lbnQgZmFjdG9yeSB3aGljaCBwcm92aWRlcyBhY2Nlc3MgdG8KLSAqIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZG9jdW1lbnRzLCByZWFkZXJzIGFuZCB3cml0ZXJzLiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRGYWN0b3J5SW1wbCBleHRlbmRzIERvY3VtZW50RmFjdG9yeQotewotICAvKioKLSAgICogRG9jdW1lbnQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEZhY3RvcnlJbXBsKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBMb2cgbmV3TG9nKCkKLSAgewotICAgIHJldHVybiBuZXcgTG9nSW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyBNb25pdG9yQ29uZmlnIG5ld01vbml0b3JDb25maWcoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBNb25pdG9yQ29uZmlnSW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbmFseXplciBjb25maWcuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWcgbmV3QW5hbHl6ZXJDb25maWcoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbmFseXplckNvbmZpZ0ltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgcHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zIG5ld1Byb2ZpbGVBc3NlcnRpb25zKCkKLSAgewotICAgIHJldHVybiBuZXcgUHJvZmlsZUFzc2VydGlvbnNJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIHJlcG9ydC4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnQgbmV3UmVwb3J0KCkKLSAgewotICAgIHJldHVybiBuZXcgUmVwb3J0SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBtb25pdG9yIGNvbmZpZyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZ1JlYWRlciBuZXdNb25pdG9yQ29uZmlnUmVhZGVyKCkKLSAgewotICAgIHJldHVybiBuZXcgTW9uaXRvckNvbmZpZ1JlYWRlckltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW5hbHl6ZXIgY29uZmlnIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZ1JlYWRlciBuZXdBbmFseXplckNvbmZpZ1JlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFuYWx5emVyQ29uZmlnUmVhZGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBwcm9maWxlIGFzc2VydGlvbnMgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVyIG5ld1Byb2ZpbGVBc3NlcnRpb25zUmVhZGVyKCkKLSAgewotICAgIC8vIFJldHVybiBpbXBsZW1lbnRhdGlvbgotICAgIHJldHVybiBuZXcgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgTG9nUmVhZGVyIG5ld0xvZ1JlYWRlcigpCi0gIHsKLSAgICAvLyBSZXR1cm4gaW1wbGVtZW50YXRpb24KLSAgICByZXR1cm4gbmV3IExvZ1JlYWRlckltcGwoKTsKLSAgfQotCi0gIC8vIFdSSVRFUlMKLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyB3cml0ZXIuCi0gICAqLwotICBwdWJsaWMgTG9nV3JpdGVyIG5ld0xvZ1dyaXRlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IExvZ1dyaXRlckltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSBEb2N1bWVudFJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnRXcml0ZXIgbmV3UmVwb3J0V3JpdGVyKCkKLSAgewotICAgIC8vIFJldHVybiBpbXBsZW1lbnRhdGlvbgotICAgIHJldHVybiBuZXcgUmVwb3J0V3JpdGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIERlZmF1bHRSZXBvcnRlcgotICAgKi8KLSAgcHVibGljIFJlcG9ydGVyIG5ld1JlcG9ydGVyKFJlcG9ydCByZXBvcnQsIFJlcG9ydFdyaXRlciByZXBvcnRXcml0ZXIpCi0gIHsKLSAgICByZXR1cm4gbmV3IERlZmF1bHRSZXBvcnRlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCB0aGUgZmFjdG9yeSBjbGFzcyBuYW1lIHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBKYXZhIHByb3BlcnR5LgotICAgKi8KLSAgLy9wcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RmFjdG9yeUNsYXNzTmFtZSgpCi0gIC8vewotICAvLyAgLy8gR2V0IHByb3BlcnR5IHZhbHVlCi0gIC8vICByZXR1cm4gV1NJUHJvcGVydGllcy5nZXRQcm9wZXJ0eSgKLSAgLy8gICAgV1NJUHJvcGVydGllcy5QUk9QX0RPQ1VNRU5UX0ZBQ1RPUlksCi0gIC8vICAgIFdTSVByb3BlcnRpZXMuREVGX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAvL30KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRXcml0ZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9pbXBsL0RvY3VtZW50V3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjFlNmQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRXcml0ZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFdyaXRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHdyaXRlIHRoZSBDb25mb3JtYW5jZSBYTUwgCi0gKiBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIERvY3VtZW50V3JpdGVySW1wbCBpbXBsZW1lbnRzIERvY3VtZW50V3JpdGVyCi17Ci0gIC8qKgotICAgKiBEb2N1bWVudCB3cml0ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgV3JpdGVyIHdyaXRlciA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudFdyaXRlciNnZXREb2N1bWVudCgpCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24KLSAgewotICAgIC8vIEFERDoKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjc2V0V3JpdGVyKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdyaXRlcihTdHJpbmcgZG9jdW1lbnRMb2NhdGlvbikKLSAgICB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQgCi0gICAgdGhpcy53cml0ZXIgPQotICAgICAgbmV3IFByaW50V3JpdGVyKAotICAgICAgICBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKAotICAgICAgICAgIG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRvY3VtZW50TG9jYXRpb24pLAotICAgICAgICAgICJVVEYtOCIpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjd3JpdGUoUmVhZGVyKQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlKFJlYWRlciByZWFkZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBJZiB0aGUgd3JpdGVyIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRocm93IGFuIGV4Y2VwdGlvbgotICAgIGlmICh3cml0ZXIgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCB3cml0ZSBkb2N1bWVudCBzaW5jZSB3cml0ZXIgd2FzIG5vdCBzZXQuIik7Ci0KLSAgICB3cml0ZShyZWFkZXIsIHdyaXRlcik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50V3JpdGVyI3dyaXRlKFJlYWRlciwgV3JpdGVyKQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlKFJlYWRlciByZWFkZXIsIFdyaXRlciB3cml0ZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIGJ1ZmZlcmVkIHJlYWRlcgotICAgIEJ1ZmZlcmVkUmVhZGVyIGJ1ZlJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihyZWFkZXIpOwotCi0gICAgLy8gQ3JlYXRlIHByaW50IHdyaXRlcgotICAgIFByaW50V3JpdGVyIHByaW50V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKHdyaXRlcik7Ci0KLSAgICBTdHJpbmcgbmV4dExpbmUgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gUmVhZCBlYWNoIGxpbmUgZnJvbSB0aGUgcmVhZGVyCi0gICAgICB3aGlsZSAoKG5leHRMaW5lID0gYnVmUmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIFdyaXRlIHRleHQgYW5kIGZsdXNoIHN0cmVhbQotICAgICAgICBwcmludFdyaXRlci5wcmludGxuKG5leHRMaW5lKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IHdyaXRlIGRvY3VtZW50LiIsIGUpOwotICAgIH0KLQotICAgIC8vIEZsdXNoIGFuZCBjbG9zZSB0aGUgd3JpdGVyCi0gICAgcHJpbnRXcml0ZXIuZmx1c2goKTsKLSAgICAvL3ByaW50V3JpdGVyLmNsb3NlKCk7ICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIENsb3NlIHdyaXRlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBJZiB0aGUgd3JpdGVyIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRocm93IGFuIGV4Y2VwdGlvbgotICAgIGlmICh3cml0ZXIgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCB3cml0ZSBsb2cgZmlsZSBzaW5jZSB3cml0ZXIgd2FzIG5vdCBzZXQuIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBDbG9zZSB0aGUgd3JpdGVyCi0gICAgICB3cml0ZXIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oaW9lLnRvU3RyaW5nKCksIGlvZSk7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM1ODZiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LldTSURvY3VtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtZXNzYWdlIGxvZyBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9nIGV4dGVuZHMgV1NJRG9jdW1lbnQKLXsKLSAgLyoqCi0gICAqIEVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX0xPRzsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTE9HLCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBBZGQgbWVzc2FnZSB0byBsb2cgZmlsZS4gIFRoZSBtZXNzYWdlIHdpbGwgY29udGFpbiBib3RoIAotICAgKiB0cmFuc3BvcnQgYW5kIGNvbnRlbnQgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSBsb2dFbnRyeSBtZXNzYWdlIGNvbnRhaW5pbmcgYm90aCB0cmFuc3BvcnQgYW5kIGNvbnRlbnQgaW5mb3JtYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGFkZGluZyB0aGUgbWVzc2FnZSB0byBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZExvZ0VudHJ5KE1lc3NhZ2VFbnRyeSBsb2dFbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHRoZSBudW1iZXIgb2YgbG9nIGVudHJpZXMuCi0gICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBsb2cgZW50cmllcy4gCi0gICAqLwotICBwdWJsaWMgaW50IGdldEVudHJ5Q291bnQoKTsKLQotICAvKioKLSAgICogR2V0IGEgc3BlY2lmaWMgbG9nIGZpbGUgZW50cnkuIAotICAgKiBAcGFyYW0gaW5kZXggaW5kZXggaW50byBsb2cgZW50cmllcy4KLSAgICogQHJldHVybiBsb2cgZmlsZSBlbnRyeSBhdCBzcGVjaWZpZWQgaW5kZXguCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5IGdldExvZ0VudHJ5KGludCBpbmRleCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZW50cnkgbGlzdC4KLSAgICogQHJldHVybiBsaXN0IG9mIGxvZyBlbnRyaWVzLgotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRMb2dFbnRyeUxpc3QoKTsKLQotICAvKioKLSAgICogR2V0IGxhc3QgbG9nIGVudHJ5LgotICAgKiBAcmV0dXJuIGFzdCBsb2cgZW50cnkuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5IGdldExhc3RMb2dFbnRyeSgpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgbG9nIGVudHJ5IG9iamVjdC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGxvZyBlbnRyeS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgY3JlYXRlTG9nRW50cnkoKTsKLQotICAvKioKLSAgICogU2V0IHN0eWxlIHNoZWV0IHN0cmluZy4KLSAgICogQHBhcmFtIHN0eWxlU2hlZXRTdHJpbmcgYSBzdHlsZSBzaGVldCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdHlsZVNoZWV0U3RyaW5nKFN0cmluZyBzdHlsZVNoZWV0U3RyaW5nKTsKLQotICAvKioKLSAgICogR2V0IHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBhIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gc3RhcnQgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKTsKLQotICAvKioKLSAgICogR2V0IGVuZCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgYSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIGVuZCBlbGVtZW50IHN0cmluZy4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nQnVpbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL0xvZ0J1aWxkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM0Y2E3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nQnVpbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2c7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGwuQWRkU3R5bGVTaGVldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTG9nSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTG9nV3JpdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTWVzc2FnZUVudHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLmltcGwuQ29tbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLmltcGwuTWFuSW5UaGVNaWRkbGVJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVGltZVpvbmU7Ci0KLS8qKgotICogR2l2ZW4gYSBsaXN0IG9mIFJlcXVlc3RIYW5kbGVycywgdGhpcyBjbGFzcyBidWlsZHMgYSAKLSAqIFdTLUkgY29tcGxpYW50IE1lc3NhZ2UgTG9nIGZpbGUuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIExvZ0J1aWxkZXIKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgICogSURzIHRvIGlkZW50aWZ5IHJlcXVlc3RzIGFuZCBjb3JyZXNwb25kaW5nIHJlc3BvbnNlcy4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgY29udmVyc2F0aW9uSWQgPSAxOwotCi0gIC8qKgotICAgKiBJRHMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgZWFjaCBhbmQgZXZlcnkgbWVzc2FnZSB3aXRoaW4gdGhlIGxvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBpZCA9IDE7Ci0KLSAgLyoqCi0gICAqIFRoZSBhY3R1YWwgbG9nIG9iamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBMb2cgbG9nID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGxvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIElGaWxlIGlmaWxlOwotCi0gIC8qKgotICAgKiBUb29sIGluZm9ybWF0aW9uIHByb3BlcnR5IHZhbHVlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MX05BTUUgPSAiTW9uaXRvciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MX1ZFUlNJT04gPSAiMS4wIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT0xfUkVMRUFTRV9EQVRFID0gIjIwMDMtMDMtMjAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9JTVBMRU1FTlRFUiA9ICJJQk0iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9MT0NBVElPTiA9ICIiOwotCi0gIC8qKgotICAgKiBDb21tb24gdGltZXN0YW1wIGZvcm1hdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCB0aW1lc3RhbXBGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCAoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBpZmlsZTogdGhlIGZpbGUgaGFuZGxlciBmb3IgdGhlIGxvZy4KLSAgICovCi0gIHB1YmxpYyBMb2dCdWlsZGVyKElGaWxlIGlmaWxlKQotICB7Ci0gICAgdGhpcy5pZmlsZSA9IGlmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgYnVpbGRzIGFuZCB0aGVuIHJldHVybnMgYSBsb2cgYmFzZWQgb24gdGhlIGxpc3Qgb2YgcmVxdWVzdC1yZXNwb25zZSBwYWlycy4KLSAgICogQHBhcmFtIHJlcXVlc3RSZXNwb25zZXM6IGEgbGlzdCBvZiBtZXNzYWdlcyBpbiB0aGUgZm9ybSBvZiByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgotICAgKiBAcmV0dXJuIGEgbG9nIGJhc2VkIG9uIGEgbGlzdCBvZiByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgotICAgKi8KLSAgcHVibGljIExvZyBidWlsZExvZyhMaXN0IHJlcXVlc3RSZXNwb25zZXMpCi0gIHsKLSAgICBsb2cgPSBuZXcgTG9nSW1wbCgpOwotICAgIGxvZ01vbml0b3JJbmZvcm1hdGlvbigpOwotCi0gICAgLy8gbG9nIHRoZSBtZXNzYWdlcwotICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlcXVlc3RSZXNwb25zZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFJlcXVlc3RIYW5kbGVyIHJyID0gKFJlcXVlc3RIYW5kbGVyKWkubmV4dCgpOwotICAgICAgaWYgKHJyICE9IG51bGwpIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBsb2dSZXF1ZXN0UmVzcG9uc2UocnIpOwotICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgIC8qIEVtcHR5IGNhdGNoIGJsb2NrLiAgVGhpcyByZXF1ZXN0L3Jlc3BvbnNlIHBhaXIgaXMgbm90IGEgdmFsaWQgU09BUAotICAgICAgICAgICAgICAgKiBtZXNzYWdlLCBzbyBza2lwIGl0LiAqLwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxvZzsKLSAgfQotCi0gIC8qKgotICAgKiBDdXJyZW50bHkgYSBuby1vcC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZ01vbml0b3JJbmZvcm1hdGlvbigpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBMb2cgdGhlIHJlcXVlc3QtcmVzcG9uc2UgcGFpci4KLSAgICpAcGFyYW0gcnI6IGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgbG9nUmVxdWVzdFJlc3BvbnNlKFJlcXVlc3RIYW5kbGVyIHJyKQotICB7Ci0gICAgaWYgKHJyICE9IG51bGwpCi0gICAgewotICAgICAgYnl0ZVtdIHJlcXVlc3RIZWFkZXJCeXRlcyA9IHJyLmdldFJlcXVlc3RIZWFkZXIoKTsKLSAgICAgIGJ5dGVbXSByZXNwb25zZUhlYWRlckJ5dGVzID0gcnIuZ2V0UmVzcG9uc2VIZWFkZXIoKTsKLSAKLSAgICAgIGlmICgocmVxdWVzdEhlYWRlckJ5dGVzICE9IG51bGwpIHx8IChyZXNwb25zZUhlYWRlckJ5dGVzICE9IG51bGwpKQotICAgICAgewotICAgICAgICBsb25nIHRpbWVzdGFtcCA9IHJyLmdldERhdGUoKS5nZXRUaW1lKCk7Ci0gICAgICAgIFN0cmluZyBsb2NhbEhvc3RBbmRQb3J0ID0gImxvY2FsaG9zdDoiICsgcnIuZ2V0TG9jYWxQb3J0KCk7Ci0gICAgICAgIFN0cmluZyByZW1vdGVIb3N0QW5kUG9ydCA9IHJyLmdldFJlbW90ZUhvc3QoKSArICI6IiArIHJyLmdldFJlbW90ZVBvcnQoKTsKLQotICAgICAgICBpbnQgY29udmVyc2F0aW9uSWQgPSBnZXROZXh0QXZhaWxhYmxlQ29udmVyc2F0aW9uSWQoKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiAocmVxdWVzdEhlYWRlckJ5dGVzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHJlcXVlc3RIZWFkZXIgPSBuZXcgU3RyaW5nKHJlcXVlc3RIZWFkZXJCeXRlcyk7Ci0gICAgICAgICAgICBieXRlW10gdW5jaHVua2VkUmVxdWVzdEJvZHkgPSByci5nZXRSZXF1ZXN0Q29udGVudCgpOwotICAgICAgICAgICAgaW50IHJlcXVlc3RJZCAgPSBnZXROZXh0QXZhaWxhYmxlSWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeVJlcXVlc3QgPSBjcmVhdGVNZXNzYWdlRW50cnkocmVxdWVzdElkLCBjb252ZXJzYXRpb25JZCwgCi0gICAgICAgICAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCwgdGltZXN0YW1wLCBsb2NhbEhvc3RBbmRQb3J0LAotICAgICAgICAgICAgICAgIHJlbW90ZUhvc3RBbmRQb3J0LCB1bmNodW5rZWRSZXF1ZXN0Qm9keSwgcmVxdWVzdEhlYWRlcik7Ci0KLSAgICAgICAgICAgIGlmIChtZXNzYWdlRW50cnlSZXF1ZXN0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGxvZy5hZGRMb2dFbnRyeShtZXNzYWdlRW50cnlSZXF1ZXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHJlc3BvbnNlSGVhZGVyQnl0ZXMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2VIZWFkZXIgPSBuZXcgU3RyaW5nKHJlc3BvbnNlSGVhZGVyQnl0ZXMpOwotICAgICAgICAgICAgYnl0ZVtdIHVuY2h1bmtlZFJlc3BvbnNlQm9keSA9IHJyLmdldFJlc3BvbnNlQ29udGVudCgpOwotICAgICAgICAgICAgaW50IHJlc3BvbnNlSWQgPSBnZXROZXh0QXZhaWxhYmxlSWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeVJlc3BvbnNlID0gY3JlYXRlTWVzc2FnZUVudHJ5KHJlc3BvbnNlSWQsIGNvbnZlcnNhdGlvbklkLCAKLSAgICAgICAgICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSwgdGltZXN0YW1wICsgcnIuZ2V0UmVzcG9uc2VUaW1lKCksIHJlbW90ZUhvc3RBbmRQb3J0LAotICAgICAgICAgICAgICAgIGxvY2FsSG9zdEFuZFBvcnQsIHVuY2h1bmtlZFJlc3BvbnNlQm9keSwgcmVzcG9uc2VIZWFkZXIpOwotIAotICAgICAgICAgICAgaWYgKG1lc3NhZ2VFbnRyeVJlc3BvbnNlICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGxvZy5hZGRMb2dFbnRyeShtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGlnbm9yZSB0aGUgcmVxdWVzdCByZXNwb25zZSBwYWlyCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlIGhhcyBhdCBsZWFzdAotICAgKiBvbmUgbGVmdCBhbmQgb25lIHJpZ2h0IGJyYWNrZXQuCi0gICAqIEBwYXJhbSBtZXNzYWdlOiBhIG1lc3NhZ2UgY29udGVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlIGhhcyBhdCBsZWFzdAotICAgKiAgICAgICAgIG9uZSBsZWZ0IGFuZCBvbmUgcmlnaHQgYnJhY2tldC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTWVzc2FnZVdpdGhCcmFja2V0cyhTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHJldHVybiAoKG1lc3NhZ2UgIT0gbnVsbCkgJiYgCi0gICAgICAgICAgICAobWVzc2FnZS5pbmRleE9mKCI8IikhPSAtMSkgJiYgCi0gICAgICAgICAgICAobWVzc2FnZS5pbmRleE9mKCI+IikgIT0gLTEpKTsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaGVhZGVyIG9mIGEgbWVzc2FnZS4KLSAgICogQHBhcmFtIHJlcXVlc3RPclJlc3BvbnNlOiBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBoZWFkZXJMZW5ndGg6IHRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciBpbiB0aGUgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgaGVhZGVyIG9mIGEgbWVzc2FnZS4KLSAgICovIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEhlYWRlcihieXRlW10gcmVxdWVzdE9yUmVzcG9uc2UsICBpbnQgaGVhZGVyTGVuZ3RoKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgaWYgKChyZXF1ZXN0T3JSZXNwb25zZSAhPSBudWxsKSAmJiAKLSAgICAgICAgKGhlYWRlckxlbmd0aCA+IDApICYmIAotICAgICAgICAocmVxdWVzdE9yUmVzcG9uc2UubGVuZ3RoID49IGhlYWRlckxlbmd0aCkpCi0gICAgewotICAgICAgYnl0ZVtdIGhlYWRlciA9IG5ldyBieXRlW2hlYWRlckxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHJlcXVlc3RPclJlc3BvbnNlLCAwLCBoZWFkZXIsIDAsIGhlYWRlckxlbmd0aCk7Ci0gICAgICByZXN1bHQgPSBuZXcgU3RyaW5nKGhlYWRlcik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgYm9keSBvZiBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSByZXF1ZXN0T3JSZXNwb25zZTogYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gaGVhZGVyTGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBoZWFkZXIgaW4gdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlLgotICAgKi8gCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0Qm9keShieXRlW10gcmVxdWVzdE9yUmVzcG9uc2UsICBpbnQgaGVhZGVyTGVuZ3RoKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgaWYgKChyZXF1ZXN0T3JSZXNwb25zZSAhPSBudWxsKSAmJiAKLSAgICAgICAgKGhlYWRlckxlbmd0aCA+IDApICYmIAotICAgICAgICAocmVxdWVzdE9yUmVzcG9uc2UubGVuZ3RoID4gaGVhZGVyTGVuZ3RoKSkKLSAgICB7Ci0gICAgICBpbnQgYm9keUxlbmd0aCA9IHJlcXVlc3RPclJlc3BvbnNlLmxlbmd0aCAtIGhlYWRlckxlbmd0aDsKLSAgICAgIGJ5dGVbXSBib2R5ID0gbmV3IGJ5dGVbYm9keUxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHJlcXVlc3RPclJlc3BvbnNlLCBoZWFkZXJMZW5ndGgsIGJvZHksIDAsIGJvZHlMZW5ndGgpOwotICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZyhib2R5KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAgICAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBsb2cgZW50cnkuCi0gICAqIEBwYXJhbSBpZDogdW5pcXVlIG1lc3NhZ2UgaWQgd2l0aGluIHRoZSBsb2cuCi0gICAqIEBwYXJhbSBjb252ZXJzYXRpb25JZDogY29udmVyc2F0aW9uIGlkIHRvIGlkZW50aWZ5IHJlcXVlc3QtcmVzcG9uc2UgcGFpcnMuCi0gICAqIEBwYXJhbSB0eXBlOiB0eXBlIGluZGljYXRpbmcgYSByZXF1ZXN0IG9yIHJlc3BvbnNlLgotICAgKiBAcGFyYW0gdGltZXN0YW1wOiB0aGUgZGF0ZSBhbmQgdGltZSBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHNlbmRlckhvc3RBbmRQb3J0OiB0aGUgaG9zdCBhbmQgcG9ydCBvZiB0aGUgc2VuZGVyLgotICAgKiBAcGFyYW0gcmVjZWl2ZXJIb3N0QW5kUG9ydDogdGhlIGhvc3QgYW5kIHBvcnQgb2YgdGhlIHJlY2VpdmVyLgotICAgKiBAcGFyYW0gbWVzc2FnZUNvbnRlbnQ6IHRoZSBjb250ZW50IG9yIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBoZWFkZXI6IHRoZSBoZWFkZXIgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gYSBsb2cgZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IGNyZWF0ZU1lc3NhZ2VFbnRyeShpbnQgaWQsIGludCBjb252ZXJzYXRpb25JZCwgU3RyaW5nIHR5cGUsIGxvbmcgdGltZXN0YW1wLCAKLSAgICAgICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LCBTdHJpbmcgcmVjZWl2ZXJIb3N0QW5kUG9ydCwgYnl0ZVtdIG1lc3NhZ2VDb250ZW50LCBTdHJpbmcgaGVhZGVyKSAKLSAgewotIAkvLyBDcmVhdGUgbG9nIGVudHJ5Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG5ldyBNZXNzYWdlRW50cnlJbXBsKCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldElkKFN0cmluZy52YWx1ZU9mKGlkKSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldENvbnZlcnNhdGlvbklkKFN0cmluZy52YWx1ZU9mKGNvbnZlcnNhdGlvbklkKSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFR5cGUodHlwZSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFRpbWVzdGFtcChnZXRUaW1lc3RhbXAobmV3IERhdGUodGltZXN0YW1wKSkpOwotICAgIG1lc3NhZ2VFbnRyeS5zZXRTZW5kZXJIb3N0QW5kUG9ydChzZW5kZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFJlY2VpdmVySG9zdEFuZFBvcnQocmVjZWl2ZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldEVuY29kaW5nKFdTSUNvbnN0YW50cy5ERUZBVUxUX1hNTF9FTkNPRElORyk7Ci0gICAgCi0gICAgbWVzc2FnZUVudHJ5LnNldEhUVFBIZWFkZXJzKGhlYWRlcik7Ci0KLSAgICBpZiAoVXRpbHMuaXNNdWx0aXBhcnRSZWxhdGVkTWVzc2FnZShoZWFkZXIpKQotICAgIHsKLSAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IFV0aWxzLnBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UobWVzc2FnZUNvbnRlbnQsIGhlYWRlciwgV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HKTsKLSAgICAJaWYgKG1pbWVQYXJ0cyA9PSBudWxsKQotICAgIAl7Ci0gICAgCSAgLy8gcHJvYmxlbSBjcmVhdGluZyBNaW1lcGFydHMgLS0gdHJlYXQgaXQgYXMgc2ltcGxlIFNPQVAgbWVzc2FnZQotICAgIAkgIGlmIChtZXNzYWdlQ29udGVudCAhPSBudWxsKQotICAgIAkgIHsKLSAgICAJICAgIG1lc3NhZ2VFbnRyeS5zZXRNZXNzYWdlKG5ldyBTdHJpbmcobWVzc2FnZUNvbnRlbnQpKTsKLSAgICAJICB9Ci0gICAgCSAgZWxzZQotICAgIAkgIHsKLSAgICAJICAgIG1lc3NhZ2VFbnRyeS5zZXRNZXNzYWdlKCIiKTsKLSAgICAJICB9Ci0gICAgCSAgbWVzc2FnZUVudHJ5LnNldE1pbWVDb250ZW50KGZhbHNlKTsKLSAgICAJfQotICAgIAllbHNlCi0gICAgCXsKLSAgICAgICAgICBtZXNzYWdlRW50cnkuc2V0TWltZVBhcnRzKG1pbWVQYXJ0cyk7Ci0gICAgICAgICAgbWVzc2FnZUVudHJ5LnNldE1pbWVDb250ZW50KHRydWUpOwotICAgIAl9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBHZXQgdGhlIG1lc3NhZ2UgY29udGVudAotICAgICAgaWYgKG1lc3NhZ2VDb250ZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNZXNzYWdlKG5ldyBTdHJpbmcobWVzc2FnZUNvbnRlbnQpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUVudHJ5LnNldE1lc3NhZ2UoIiIpOwotICAgICAgfQotICAgICAgbWVzc2FnZUVudHJ5LnNldE1pbWVDb250ZW50KGZhbHNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1lc3NhZ2VFbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBpZCwgdGhlbiBpbmNyZW1lbnRzIHRoZSBpZCB2YWx1ZS4KLSAgICogQHJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgaWQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGdldE5leHRBdmFpbGFibGVJZCgpCi0gIHsKLSAgICByZXR1cm4gaWQrKzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBjb252ZXJzYXRpb24gaWQsIHRoZW4gaW5jcmVtZW50cyB0aGUgY29udmVyc2F0aW9uIGlkIHZhbHVlLgotICAgKiBBIGNvbnZlcnNhdGlvbiBpZCBpZGVudGZpZXMgYSByZXF1ZXN0IGFuZCBpdHMgY29ycmVzcG9uZGluZyByZXNwb25zZS4KLSAgICogQHJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgY29udmVyYXNhdGlvbmlkLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBnZXROZXh0QXZhaWxhYmxlQ29udmVyc2F0aW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnZlcnNhdGlvbklkKys7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldEhlYWRlckxlbmd0aChJbnRlZ2VyIG9iaikKLSAgewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGlmIChvYmogIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBvYmouaW50VmFsdWUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSBsb2cgb3V0IHRvIGZpbGUuCi0gICAqIEBwYXJhbSBsb2c6IGxvZyB0byBiZSB3cml0dGVuIHRvIGZpbGUuCi0gICAqLwotCi0gIHB1YmxpYyB2b2lkIHdyaXRlTG9nKExvZyBsb2cpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgbG9nIHdyaXRlcgotICAgICAgTG9nV3JpdGVyIGxvZ1dyaXRlciA9IG5ldyBMb2dXcml0ZXJJbXBsKCk7Ci0gICAgCi0gICAgICBsb2dXcml0ZXIuc2V0V3JpdGVyKGlmaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7Ci0gICAgICAKLSAgICAgIC8vIFdyaXRlIHN0YXJ0IG9mIGxvZyBmaWxlCi0gICAgICBsb2dXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihsb2cuZ2V0U3RhcnRYTUxTdHJpbmcoIiIpKSk7Ci0gICAgCi0gICAgICAvLyBXcml0ZSBtb25pdG9yIHRvb2wgaW5mb3JtYXRpb24KLSAgICAgIFN0cmluZyBtb25pdG9ySW5mbyA9IGdlbmVyYXRlTW9uaXRvclRvb2xJbmZvKCk7Ci0gICAgICBsb2dXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihtb25pdG9ySW5mbykpOwotCi0gICAgICBmb3IgKGludCBpPTA7IGk8bG9nLmdldEVudHJ5Q291bnQoKTsgaSsrKQotICAgICAgewotICAgICAgICBNZXNzYWdlRW50cnkgbWUgPSBsb2cuZ2V0TG9nRW50cnkoaSk7Ci0gICAgICAgIGxvZ1dyaXRlci53cml0ZShuZXcgU3RyaW5nUmVhZGVyKG1lLnRvWE1MU3RyaW5nKCIiKSkpOwotICAgICAgfQotICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldEVuZFhNTFN0cmluZygiIikpKTsKLSAgICAgIGxvZ1dyaXRlci5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gdGhyb3duIHdoZW4gcHJpbnRpbmcgbG9nIGZpbGUuIik7Ci0gICAgfQotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBNb25pdG9yIHRvb2wuCi0gICAqIEByZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgTW9uaXRvciB0b29sLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBnZW5lcmF0ZU1vbml0b3JUb29sSW5mbygpCi0gIHsKLQotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7IAotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVG9vbCBpbmZvcm1hdGlvbgotICAgICAgVG9vbEluZm8gdG9vbEluZm8gPSBuZXcgVG9vbEluZm8oVE9PTF9OQU1FLCBUT09MX1ZFUlNJT04sIFRPT0xfUkVMRUFTRV9EQVRFLCBUT09MX0lNUExFTUVOVEVSLCBUT09MX0xPQ0FUSU9OKTsKLQotICAgICAgRG9jdW1lbnRGYWN0b3J5IGRvY3VtZW50RmFjdG9yeSA9IERvY3VtZW50RmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgTW9uaXRvckNvbmZpZyBtb25pdG9yQ29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld01vbml0b3JDb25maWcoKTsKLSAgICAKLSAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgY29tbWVudC5zZXRUZXh0KCJDb21tZW50Iik7Ci0gICAgICBtb25pdG9yQ29uZmlnLnNldENvbW1lbnQoY29tbWVudCk7Ci0gICAgICBtb25pdG9yQ29uZmlnLnNldExvZ0xvY2F0aW9uKCJVUkwiKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0UmVwbGFjZUxvZyh0cnVlKTsKLQotICAgICAgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0ID0gbmV3IEFkZFN0eWxlU2hlZXRJbXBsKCk7Ci0gICAgICBtb25pdG9yQ29uZmlnLnNldEFkZFN0eWxlU2hlZXQoYWRkU3R5bGVTaGVldCk7Ci0KLSAgICAgIG1vbml0b3JDb25maWcuc2V0TG9nRHVyYXRpb24oNjAwKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0VGltZW91dCgzKTsKLSAgICAgCi0gICAgICBNYW5JblRoZU1pZGRsZSBtYW5JblRoZU1pZGRsZSA9IG5ldyBNYW5JblRoZU1pZGRsZUltcGwoKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0TWFuSW5UaGVNaWRkbGUobWFuSW5UaGVNaWRkbGUpOwotCi0gICAgICBtb25pdG9yQ29uZmlnLnNldExvY2F0aW9uKCJkb2N1bWVudFVSSSIpOwotICAgICAgbW9uaXRvckNvbmZpZy5zZXRWZXJib3NlT3B0aW9uKGZhbHNlKTsKLQotICAgICAgLy8gU3RhcnQgICAgIAotICAgICAgcHcucHJpbnQodG9vbEluZm8uZ2V0U3RhcnRYTUxTdHJpbmcoIiIpKTsKLSAgICAKLSAgICAgIC8vIENvbmZpZwotICAgICAgcHcucHJpbnQobW9uaXRvckNvbmZpZy50b1hNTFN0cmluZyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTU9OSVRPUl9DT05GSUcpKTsKLQotICAgICAgLy8gRW5kCi0gICAgICBwdy5wcmludGxuKHRvb2xJbmZvLmdldEVuZFhNTFN0cmluZygiIikpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGdpdmVuIGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSBkYXRlOiBhIGRhdGUgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBnaXZlbiBkYXRlIGFuZCB0aW1lIGFzIGEgdGltZXN0YW1wLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGltZXN0YW1wKERhdGUgZGF0ZSkKLSAgewotICAgIHRpbWVzdGFtcEZvcm1hdC5zZXRUaW1lWm9uZShUaW1lWm9uZS5nZXREZWZhdWx0KCkpOwotICAgIHJldHVybiB0aW1lc3RhbXBGb3JtYXQuZm9ybWF0KGRhdGUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nUmVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nUmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNjAxMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL0xvZ1JlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gcmVhZCB0aGUgTG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIE5laWwgRGVsaW1hIChuZGRlbGltYUBjYS5pYm0uY29tKQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9nUmVhZGVyIGV4dGVuZHMgRG9jdW1lbnRSZWFkZXIKLXsKLSAgLyoqCi0gICAqIFN0YXJ0IHJlYWRpbmcgbG9nIGVudHJpZXMgZnJvbSBhIHNwZWNpZmllZCBVUkkgbG9jYXRpb24gdXNpbmcgdGhlIHNwZWNpZmllZCBjYWxsYmFjay4KLSAgICogCi0gICAqIEBwYXJhbSBsb2dVUkkgdGhlIGxvY2F0aW9uIG9mIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGxvZ0VudHJ5SGFuZGxlciB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBwcm9jZXNzIGVhY2ggbG9nIGVudHJ5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIHJlYWRpbmcgbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZExvZyhTdHJpbmcgbG9nVVJJLCBNZXNzYWdlRW50cnlIYW5kbGVyIGxvZ0VudHJ5SGFuZGxlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBTdGFydCByZWFkaW5nIGxvZyBlbnRyaWVzIGZyb20gYSByZWFkZXIgdXNpbmcgdGhlIHNwZWNpZmllZCBjYWxsYmFjay4KLSAgICogCi0gICAqIEBwYXJhbSByZWFkZXIgdGhlIHNvdXJjZSBmb3IgdGhlIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gbG9nRW50cnlIYW5kbGVyIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvIHByb2Nlc3MgZWFjaCBsb2cgZW50cnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gcmVhZGluZyBsb2cuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkTG9nKFJlYWRlciByZWFkZXIsIE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nRW50cnlIYW5kbGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLy8gQUREOiBEbyB3ZSBuZWVkIHRvIGFkZCBmdW5jdGlvbnMgdGhhdCB3aWxsIHJlYWQgdGhlIGVudGlyZSBsb2cgZmlsZT8KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dXcml0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dXcml0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThlMzNlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nV3JpdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFdyaXRlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byB3cml0ZSB0aGUgTG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIE5laWwgRGVsaW1hIChuZGRlbGltYUBjYS5pYm0uY29tKQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTG9nV3JpdGVyIGV4dGVuZHMgRG9jdW1lbnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50IHVzaW5nIHRoZSBsb2NhdGlvbgotICAgKiB0aGF0IHdhcyBwcmV2aW91c2x5IHNldCB1c2luZyB0aGUgc2V0TG9jYXRpb24gbWV0aG9kLgotICAgKiBAcGFyYW0gbG9nIHRoZSBMb2cgb2JqZWN0LgotICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGlzIG9wZXJhdGlvbiBoYXMgYmVlbiBpbnZva2VkIAotICAgKiAgICAgICAgIGF0IGFuIGlsbGVnYWwgb3IgaW5hcHByb3ByaWF0ZSB0aW1lCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyB0aGUgd3JpdGluZyBvZiAKLSAgICogICAgICAgICB0aGUgbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoTG9nIGxvZykgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiwgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudC4KLSAgICogQHBhcmFtIGxvZyB0aGUgTG9nIG9iamVjdC4KLSAgICogQHBhcmFtIHdyaXRlciBhIFdyaXRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyB0aGUgd3JpdGluZyBvZiAKLSAgICogICAgICAgICB0aGUgbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoTG9nIGxvZywgV3JpdGVyIHdyaXRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NZXNzYWdlRW50cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NZXNzYWdlRW50cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1OGZmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWVzc2FnZUVudHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotCi0vKioKLSogTWVzc2FnZSBlbnRyeSBpbnRlcmZhY2UuCi0qCi0qIEB2ZXJzaW9uIDEuMC4xCi0qIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZUVudHJ5IGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gLyoqCi0gICogRWxlbWVudCBuYW1lLgotICAqLwotIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfRU5UUlk7Ci0KLSAvKioKLSAgKiBRTmFtZS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9MT0csIEVMRU1fTkFNRSk7Ci0KLSAvKioKLSAgKiBUeXBlIG9mIGxvZyBlbnRyeS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX1JFUVVFU1QgPSAicmVxdWVzdCI7Ci0gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9SRVNQT05TRSA9ICJyZXNwb25zZSI7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBpZC4KLSAgKiBAcmV0dXJuIHRoZSBpZC4KLSAgKiBAc2VlICNzZXRJZAotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKTsKLQotIC8qKgotICAqIFNldHMgdGhlIGlkLgotICAqIEBwYXJhbSBpZCB0aGUgaWRlbnRpZmllciBmb3IgdGhlIGxvZyBlbnRyeS4KLSAgKiBAc2VlICNnZXRJZAotICAqLwotIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBjb252ZXJzYXRpb24gaWQuCi0gICogQHJldHVybiB0aGUgY29udmVyc2F0aW9uIGlkLgotICAqIEBzZWUgI3NldENvbnZlcnNhdGlvbklkCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRDb252ZXJzYXRpb25JZCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgY29udmVyc2F0aW9uIGlkLgotICAqIEBwYXJhbSBjb252ZXJzYXRpb25JZCB0aGUgY29udmVyc2F0aW9uIGlkLgotICAqIEBzZWUgI2dldENvbnZlcnNhdGlvbklkCi0gICovCi0gcHVibGljIHZvaWQgc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nIGNvbnZlcnNhdGlvbklkKTsKLQotIC8qKgotICAqIEdldHMgdGhlIHRpbWVzdGFtcC4KLSAgKiBAcmV0dXJuIHRoZSB0aW1lc3RhbXAuCi0gICogQHNlZSAjc2V0VGltZXN0YW1wCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRUaW1lc3RhbXAoKTsKLQotIC8qKgotICAqIFNldHMgdGhlIHRpbWVzdGFtcC4KLSAgKiBAcGFyYW0gdGltZXN0YW1wIHRoZSB0aW1lc3RhbXAuCi0gICogQHNlZSAjZ2V0VGltZXN0YW1wCi0gICovCi0gcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApOwotCi0gLyoqCi0gICogR2V0cyB0aGUgdHlwZS4KLSAgKiBAcmV0dXJuIHRoZSB0eXBlLgotICAqIEBzZWUgI3NldFR5cGUKLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKTsKLQotIC8qKgotICAqIFNldHMgdGhlIHR5cGUuCi0gICogQHBhcmFtIHR5cGUgdGhlIHR5cGUuCi0gICogQHNlZSAjZ2V0VHlwZQotICAqLwotIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gLyoqCi0gICogR2V0cyB0aGUgc2VuZGVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHJldHVybiAgdGhlIHNlbmRlciBob3N0IGFuZCBwb3J0LgotICAqIEBzZWUgI3NldFNlbmRlckhvc3RBbmRQb3J0Ci0gICovCi0gcHVibGljIFN0cmluZyBnZXRTZW5kZXJIb3N0QW5kUG9ydCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgc2VuZGVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHBhcmFtIHNlbmRlckhvc3RBbmRQb3J0IHRoZSBzZW5kZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAc2VlICNnZXRTZW5kZXJIb3N0QW5kUG9ydAotICAqLwotIHB1YmxpYyB2b2lkIHNldFNlbmRlckhvc3RBbmRQb3J0KFN0cmluZyBzZW5kZXJIb3N0QW5kUG9ydCk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSByZWNlaXZlciBob3N0IGFuZCBwb3J0LgotICAqIEByZXR1cm4gdGhlIHJlY2VpdmVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHNlZSAjc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydAotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgcmVjZWl2ZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAcGFyYW0gcmVjZWl2ZXJIb3N0QW5kUG9ydCB0aGUgcmVjZWl2ZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAc2VlICNnZXRSZWNlaXZlckhvc3RBbmRQb3J0Ci0gICovCi0gcHVibGljIHZvaWQgc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChTdHJpbmcgcmVjZWl2ZXJIb3N0QW5kUG9ydCk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBtZXNzYWdlLgotICAqIEByZXR1cm4gdGhlIG1lc3NhZ2UuCi0gICogQHNlZSAjc2V0TWVzc2FnZQotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgbWVzc2FnZS4KLSAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZS4KLSAgKiBAc2VlICNnZXRNZXNzYWdlCi0gICovCi0gcHVibGljIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBlbmNvZGluZy4KLSAgKiBAcGFyYW0gZW5jb2RpbmcgdGhlIGVuY29kaW5nLgotICAqIEBzZWUgI2dldE1lc3NhZ2UKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgZW5jb2RpbmcpOwotCi0gLyoqCi0gICogR2V0cyB0aGUgQk9NLgotICAqIEByZXR1cm4gdGhlIEJPTS4KLSAgKiBAc2VlICNzZXRCT00KLSAgKi8KLSBwdWJsaWMgaW50IGdldEJPTSgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgQk9NLgotICAqIEBwYXJhbSBib20gdGhlIEJPTS4KLSAgKiBAc2VlICNnZXRCT00KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRCT00oaW50IGJvbSk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBIVFRQIGhlYWRlcnMuCi0gICogQHJldHVybiB0aGUgSFRUUCBoZWFkZXJzLgotICAqIEBzZWUgI3NldEhUVFBIZWFkZXJzCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRIVFRQSGVhZGVycygpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgSFRUUCBoZWFkZXJzLgotICAqIEBwYXJhbSBodHRwSGVhZGVycyB0aGUgSFRUUCBoZWFkZXJzLgotICAqIEBzZWUgI2dldEhUVFBIZWFkZXJzCi0gICovCi0gcHVibGljIHZvaWQgc2V0SFRUUEhlYWRlcnMoU3RyaW5nIGh0dHBIZWFkZXJzKTsKLQotIC8qKgotICAqIEdldHMgZWxlbWVudCBsb2NhdGlvbi4KLSAgKiBAcmV0dXJuIGVsZW1lbnQgbG9jYXRpb24uCi0gICogQHNlZSAjc2V0RWxlbWVudExvY2F0aW9uCi0gICovCi0gcHVibGljIEVsZW1lbnRMb2NhdGlvbiBnZXRFbGVtZW50TG9jYXRpb24oKTsKLQotIC8qKgotICAqIFNldHMgZWxlbWVudCBsb2NhdGlvbi4KLSAgKiBAcGFyYW0gZWxlbWVudExvY2F0aW9uIGVsZW1lbnQgbG9jYXRpb24uCi0gICogQHNlZSAjZ2V0RWxlbWVudExvY2F0aW9uCi0gICovCi0gcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pOwotIAotIC8qKgotICAqIElmIGNvbnRlbnQgaXMgTUlNRSB0eXBlIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNlICAKLSAgKiBAcmV0dXJuIGlmIGNvbnRlbnQgaXMgTUlNRSB0eXBlIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNlCi0gICovCi0gcHVibGljIGJvb2xlYW4gaXNNaW1lQ29udGVudCgpOwotIAotIC8qKgotICAqIFNldCBmbGFnIHRvIGRldGVybWluZSBpZiBjb250ZW50IGlzIE1JTUUgdHlwZS4gCi0gICogQHBhcmFtIGlzTWltZUNvbnRlbnQgYSBib29vbGVhbiB2YWx1ZQotICAqLwotIHB1YmxpYyB2b2lkIHNldE1pbWVDb250ZW50KGJvb2xlYW4gaXNNaW1lQ29udGVudCk7Ci0KLSAvKioKLSAgKiBSZXR1cm5zIGFycmF5IG9mIHRoZSBNSU1FIHBhcnRzIG9mIHRoZSBtZXNzYWdlLgotICAqIEByZXR1cm4gYXJyYXkgb2YgdGhlIE1JTUUgcGFydHMgb2YgdGhlIG1lc3NhZ2UuCi0gICogQHNlZSAjaXNNSU1FQ29udGVudCgpIAotICAqLwotIHB1YmxpYyBNaW1lUGFydHMgZ2V0TWltZVBhcnRzKCk7Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgTUlNRSBwYXJ0cyBvZiB0aGUgbWVzc2FnZS4KLSAgKiBAcGFyYW0gbWltZVBhcnRzIGhlIE1JTUUgcGFydHMgb2YgdGhlIG1lc3NhZ2UuCi0gICogQHNlZSAjZ2V0TWltZVBhcnRzCi0gICovCi0gcHVibGljIHZvaWQgc2V0TWltZVBhcnRzKE1pbWVQYXJ0cyBtaW1lUGFydHMpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWVzc2FnZUVudHJ5SGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01lc3NhZ2VFbnRyeUhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQwMWUyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWVzc2FnZUVudHJ5SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlOwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSBmb3IgdGhlIE1lc3NhZ2VFbnRyeSBoYW5kbGVyLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAYXV0aG9yIEdyYWhhbSBUdXJyZWxsIChndHVycmVsbEB1ay5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VFbnRyeUhhbmRsZXIKLXsKLSAgLyoqCi0gICAqIFByb2Nlc3MgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciB3aGlsZSBwcm9jZXNzaW5nIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByb2Nlc3NBcnRpZmFjdFJlZmVyZW5jZShBcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdFJlZmVyZW5jZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBQcm9jZXNzIGEgc2luZ2xlIGxvZyBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhIHNpbmdsZSBsb2cgZW50cnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHByb2Nlc3NpbmcgYSBzaW5nbGUgbG9nIGVudHJ5LgotICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHByb2Nlc3NMb2dFbnRyeShFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01pbWVQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU0NmRjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIEBhdXRob3IgbGF1em9uZAotICogCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0byBXaW5kb3cgLQotICogUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWltZVBhcnQgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQgewotCi0JLyoqCi0JICogR2V0cyB0aGUgY29udGVudCBmb3IgdGhlIG1pbWUgcGFydC4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtaW1lIGNvbnRlbnQuCi0JICogQHNlZSAjc2V0Q29udGVudAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgY29udGVudCBmb3IgdGhlIG1pbWUgcGFydC4KLQkgKiAKLQkgKiBAcGFyYW0gbWltZUNvbnRlbnQKLQkgKiAgICAgICAgICAgIHRoZSBtaW1lIGNvbnRlbnQuCi0JICogQHNlZSAjZ2V0Q29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHNldENvbnRlbnQoU3RyaW5nIG1pbWVDb250ZW50KTsKLQotCS8qKgotCSAqIEdldHMgdGhlIGhlYWRlcnMgZm9yIHRoZSBtaW1lIHBhcnQuCi0JICogCi0JICogQHJldHVybiB0aGUgbWltZSBoZWFkZXJzLgotCSAqIEBzZWUgI3NldE1pbWVIZWFkZXJzCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRIZWFkZXJzKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBoZWFkZXJzIGZvciB0aGUgbWltZSBwYXJ0LgotCSAqIAotCSAqIEBwYXJhbSBtaW1lSGVhZGVycwotCSAqICAgICAgICAgICAgdGhlIG1pbWUgaGVhZGVycy4KLQkgKiBAc2VlICNnZXRIZWFkZXJzCi0JICovCi0JcHVibGljIHZvaWQgc2V0SGVhZGVycyhTdHJpbmcgbWltZUhlYWRlcnMpOwotCi0JLyoqCi0JICogR2V0cyB0aGUgYm91bmRhcnkgc3RyaW5ncyBmb3IgdGhlIG1pbWUgcGFydC4gTm90ZSB0aGF0IHRoZSBsYXN0IHBhcnQgb2YgYQotCSAqIG11bHRpcGFydC8gcmVsYXRlZCBtZXNzYWdlIHdpbGwgaGF2ZSAyIGJvdW5kYXJ5IHN0cmluZ3MuIEFsbCBvdGhlciBwYXJ0cwotCSAqIHdpbGwgaGF2ZSBvbmUuCi0JICogCi0JICogQHJldHVybiB0aGUgYm91bmRhcnkgc3RyaW5ncy4KLQkgKiBAc2VlICNzZXRCb3VuZGFyeVN0cmluZ3MKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0Qm91bmRhcnlTdHJpbmdzKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBib3VuZGFyeSBzdHJpbmdzIGZvciB0aGUgbWltZSBwYXJ0LiBOb3RlIHRoYXQgdGhlIGxhc3QgcGFydCBvZiBhCi0JICogbXVsdGlwYXJ0LyByZWxhdGVkIG1lc3NhZ2Ugd2lsbCBoYXZlIDIgYm91bmRhcnkgc3RyaW5ncy4gQWxsIG90aGVyIHBhcnRzCi0JICogd2lsbCBoYXZlIG9uZS4KLQkgKiAKLQkgKiBAcGFyYW0gYm91bmRhcnlTdHJpbmdzCi0JICogICAgICAgICAgICB0aGUgYm91bmRhcnkgc3RyaW5ncy4KLQkgKiBAc2VlICNnZXRCb3VuZGFyeVN0cmluZ3MKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCb3VuZGFyeVN0cmluZ3MoU3RyaW5nW10gbWltZUhlYWRlcnMpOwotCi0JcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZTNmMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01pbWVQYXJ0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi0vKioKLSAqIE1pbWUgcGFydHMgaW50ZXJmYWNlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiAobGF1em9uZEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1pbWVQYXJ0cwotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgc3RhcnQgYXR0cmlidXRlIHZhbHVlIGZyb20gdGhlIC4KLSAgICogQHJldHVybiB0aGUgaGUgc3RhcnQgYXR0cmlidXRlIHZhbHVlLgotICAgKiBAc2VlICNzZXRSb290UGFydAotICAgKi8KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJvb3QgcGFydCwgb3RoZXJ3aXNlIG51bGwuCi0gICAqIEByZXR1cm4gdGhlIHJvb3QgcGFydC4KLSAgICogQHNlZSAjc2V0Um9vdFBhcnQKLSAgICovCi0gIHB1YmxpYyBNaW1lUGFydCBnZXRSb290UGFydCgpOwotCi0gIC8qKgotICAgKiBTZXRzIHRoZSByb290IHBhcnQuCi0gICAqIEBwYXJhbSByb290UGFydCB0aGUgcm9vdCBwYXJ0LgotICAgKiBAc2VlICNnZXRSb290UGFydAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Um9vdFBhcnQoTWltZVBhcnQgcm9vdFBhcnQpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFydHMuCi0gICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwYXJ0cy4KLSAgICovCi0gIHB1YmxpYyBpbnQgY291bnQoKTsKLQotICAvKioKLSAgICogR2V0cyB0aGUgY29udmVyc2F0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRoZSBjb252ZXJzYXRpb24gaWQuCi0gICAqIEBzZWUgI3NldENvbnZlcnNhdGlvbklkCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJ0KE1pbWVQYXJ0IHBhcnQpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBtaW1lIHBhcnRzLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBtaW1lIHBhcnRzLgotICAgKi8KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0UGFydHMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9SZXF1ZXN0SGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL1JlcXVlc3RIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOTJkZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL1JlcXVlc3RIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBUQ1AvSVAgcmVxdWVzdCBtYWRlIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci4KLSAqIEVhY2ggcmVxdWVzdCByZXByZXNlbnRzIGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLCB3aGVyZSB0aGUgcmVxdWVzdAotICogaXMgZnJvbSBjbGllbnQgLT4gc2VydmVyLCBhbmQgdGhlIHJlc3BvbnNlIGlzIGZyb20gc2VydmVyIC0+IGNsaWVudC4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLQotcHVibGljIGludGVyZmFjZSBSZXF1ZXN0SGFuZGxlciAKLXsKLQkvKioKLQkgKiBSZXR1cm5zIGp1c3QgdGhlIEhUVFAgaGVhZGVyIG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEByZXR1cm4gdGhlIGNvbnRlbnQgYnl0ZXMKLQkgKi8KLQlieXRlW10gZ2V0UmVxdWVzdEhlYWRlcigpOwotCi0JLyoqCi0JICogQWRkIHRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVxdWVzdCBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKiBAcGFyYW0gcmVxdWVzdEhlYWRlciBieXRlW10KLQkgKi8KLQl2b2lkIHNldFJlcXVlc3RIZWFkZXIoYnl0ZVtdIHJlcXVlc3RIZWFkZXIpOwotCi0JLyoqCi0JICogUmV0dXJucyBqdXN0IHRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHJldHVybiB0aGUgY29udGVudCBieXRlcwotCSAqLwotCWJ5dGVbXSBnZXRSZXNwb25zZUhlYWRlcigpOwotCi0JLyoqCi0JICogQWRkIHRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHBhcmFtIHJlc3BvbnNlSGVhZGVyIGJ5dGVbXQotCSAqLwotCXZvaWQgc2V0UmVzcG9uc2VIZWFkZXIoYnl0ZVtdIHJlc3BvbnNlSGVhZGVyKTsKLQotCS8qKgotCSAqIFJldHVybnMganVzdCB0aGUgSFRUUCBib2R5IG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEByZXR1cm4gdGhlIGNvbnRlbnQgYnl0ZXMKLQkgKi8KLQlieXRlW10gZ2V0UmVxdWVzdENvbnRlbnQoKTsKLQotCS8qKgotCSAqIEFkZCB0aGUgSFRUUCBib2R5IG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEBwYXJhbSByZXF1ZXN0Q29udGVudCBieXRlW10KLQkgKi8KLQl2b2lkIHNldFJlcXVlc3RDb250ZW50KGJ5dGVbXSByZXF1ZXN0Q29udGVudCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGp1c3QgdGhlIEhUVFAgYm9keSBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHJldHVybiB0aGUgY29udGVudCBieXRlcwotCSAqLwotCWJ5dGVbXSBnZXRSZXNwb25zZUNvbnRlbnQoKTsKLQotCS8qKgotCSAqIEFkZCB0aGUgSFRUUCBib2R5IG9mIHRoZSByZXNwb25zZSBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKiBAcGFyYW0gcmVzcG9uc2VDb250ZW50IGJ5dGVbXQotCSAqLwotCXZvaWQgc2V0UmVzcG9uc2VDb250ZW50KGJ5dGVbXSByZXNwb25zZUNvbnRlbnQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdGltZSB0aGlzIHJlcXVlc3Qgd2FzIG1hZGUuCi0JICogQHJldHVybiB0aGUgdGltZXN0YW1wCi0JICovCi0JRGF0ZSBnZXREYXRlKCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIHRpbWUgdGhpcyByZXF1ZXN0IHdhcyBtYWRlLgotCSAqIEBwYXJhbSBkYXRlIHRoZSB0aW1lCi0JICovCi0gICAgdm9pZCBzZXREYXRlKERhdGUgZGF0ZSk7Ci0KLSAgICAvKioKLQkgKiBSZXR1cm5zIHRoZSBsb2NhbCAoY2xpZW50KSBwb3J0LgotCSAqIEByZXR1cm4gdGhlIGxvY2FsIHBvcnQgbnVtYmVyCi0JICovCi0JaW50IGdldExvY2FsUG9ydCgpOwotCi0JLyoqCi0JICogQWRkIHRoZSBsb2NhbCAoY2xpZW50KSBwb3J0LgotCSAqIEBwYXJhbSBsb2NhbFBvcnQgdGhlIGxvY2FsIHBvcnQKLQkgKi8KLQl2b2lkIHNldExvY2FsUG9ydChpbnQgbG9jYWxQb3J0KTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlbW90ZSAoc2VydmVyKSBwb3J0LgotCSAqIEByZXR1cm4gdGhlIHJlbW90ZSBwb3J0IG51bWJlcgotCSAqLwotCWludCBnZXRSZW1vdGVQb3J0KCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIHRoZSByZW1vdGUgKHNlcnZlcikgcG9ydC4KLQkgKiBAcGFyYW0gcmVtb3RlUG9ydCB0aGUgcmVtb3RlIHBvcnQKLQkgKi8KLQl2b2lkIHNldFJlbW90ZVBvcnQoaW50IHJlbW90ZVBvcnQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVtb3RlIChzZXJ2ZXIpIGhvc3QuCi0gICAgICogQHJldHVybiB0aGUgcmVtb3RlIGhvc3QKLQkgKi8KLQlTdHJpbmcgZ2V0UmVtb3RlSG9zdCgpOwotCi0JLyoqCi0JICogQWRkIHRoZSByZW1vdGUgKHNlcnZlcikgaG9zdC4KLQkgKiBAcGFyYW0gcmVtb3RlSG9zdCB0aGUgcmVtb3RlIGhvc3QKLQkgKi8KLQl2b2lkIHNldFJlbW90ZUhvc3QoU3RyaW5nIHJlbW90ZUhvc3QpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgdGltZSBpbiBtaWxsaXNlY29uZHMuIAotCSAqIEByZXR1cm4gdGhlIHNlcnZlcidzIHJlc3BvbnNlIHRpbWUKLQkgKi8KLQlsb25nIGdldFJlc3BvbnNlVGltZSgpOwotCi0JLyoqCi0JICogQWRkIHRoZSB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgdGltZSBpbiBtaWxsaXNlY29uZHMuIAotCSAqIEBwYXJhbSByZXNwb25zZVRpbWUgdGhlIHJlc3BvbnNlIHRpbWUKLQkgKi8KLQl2b2lkIHNldFJlc3BvbnNlVGltZShsb25nIHJlc3BvbnNlVGltZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZDc4YWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UZXN0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBtZXNzYWdlIGxvZyBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dJbXBsIGltcGxlbWVudHMgTG9nCi17Ci0gIC8qKgotICAgKiBMb2cgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dVUkkgPSBudWxsOwotCi0gIC8qKgotICAgKiBTdGFydCB0aW1lIHN0YW1wLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBzdGFydFRpbWVzdGFtcCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIExvZyBlbnRyaWVzLgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBsb2dFbnRyeUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyoqCi0gICAqIExhc3QgbG9nIGVudHJ5LgotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2VFbnRyeSBsYXN0TG9nRW50cnkgPSBudWxsOwotCi0gIC8qKgotICAgKiBMb2cgdGl0bGUuCi0gICAqLwotICAvLyBBREQ6IFNob3VsZCB3ZSBwcm92aWRlIGEgd2F5IHRvIHNldCB0aGUgbG9nIHRpdGxlPwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvZ1RpdGxlID0gIk1lc3NhZ2UgTG9nIEZpbGUiOwotCi0gIC8qKgotICAgKiBTdHlsZSBzaGVldCBzdHJpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHN0eWxlU2hlZXRTdHJpbmcgPSBudWxsOwotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nI2FkZExvZ0VudHJ5KExvZ0VudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTG9nRW50cnkoTWVzc2FnZUVudHJ5IGxvZ0VudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBTYXZlIGxhc3QgbG9nIGVudHJ5Ci0gICAgbGFzdExvZ0VudHJ5ID0gbG9nRW50cnk7Ci0KLSAgICAvLyBBZGQgbG9nIGVudHJ5Ci0gICAgbG9nRW50cnlMaXN0LmFkZChsb2dFbnRyeSk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZyNnZXRFbnRyeUNvdW50KCkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RW50cnlDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gbG9nRW50cnlMaXN0LnNpemUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nI2dldExvZ0VudHJ5KGludCkKLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgZ2V0TG9nRW50cnkoaW50IGluZGV4KQotICB7Ci0gICAgcmV0dXJuIChNZXNzYWdlRW50cnkpIGxvZ0VudHJ5TGlzdC5lbGVtZW50QXQoaW5kZXgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2cjZ2V0TG9nRW50cnlMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0TG9nRW50cnlMaXN0KCkKLSAgewotICAgIHJldHVybiBsb2dFbnRyeUxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGxhc3QgbG9nIGVudHJ5LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRMYXN0TG9nRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIGxhc3RMb2dFbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgbG9nIGVudHJ5IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgY3JlYXRlTG9nRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBNZXNzYWdlRW50cnlJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2dVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQjc2V0TG9jYXRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGRvY3VtZW50VVJJKQotICB7Ci0gICAgdGhpcy5sb2dVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc3R5bGUgc2hlZXQgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3R5bGVTaGVldFN0cmluZyhTdHJpbmcgc3R5bGVTaGVldFN0cmluZykKLSAgewotICAgIHRoaXMuc3R5bGVTaGVldFN0cmluZyA9IHN0eWxlU2hlZXRTdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0YXJ0IGVsZW1lbnQgc3RyaW5nLiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSByZXBvcnQgZWxlbWVudCAKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5YTUxfREVDTCk7Ci0gICAgaWYgKHRoaXMuc3R5bGVTaGVldFN0cmluZyAhPSBudWxsKQotICAgICAgcHcucHJpbnRsbih0aGlzLnN0eWxlU2hlZXRTdHJpbmcpOwotCi0gICAgLy8gQWRkIFhNTCBjb21tZW50Ci0gICAgU3RyaW5nIGNvbW1lbnQ7Ci0gICAgaWYgKChjb21tZW50ID0gVGVzdFV0aWxzLmdldFhNTENvbW1lbnQoKSkgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KGNvbW1lbnQpOwotCi0gICAgLy8gTG9nCi0gICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgRUxFTV9OQU1FKTsKLQotICAgIC8vIFJFTU9WRUQ6IE5vIGxvbmdlciByZXF1aXJlZCBieSB0aGUgbW9uaXRvciBzcGVjCi0gICAgLy9wdy5wcmludCgiICIgKyBXU0lDb25zdGFudHMuQVRUUl9OQU1FICsgIj1cIiIgKyBsb2dUaXRsZSArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICIgKyBXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAgKyAiPVwiIiArIFV0aWxzLmdldFRpbWVzdGFtcCgpICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigiICAgIHhtbG5zPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0xPRyArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTU9OSVRPUl9DT05GSUcKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHCi0gICAgICAgICsgIlwiIik7Ci0gICAgLy9wdy5wcmludGxuKCIgICAgeG1sbnM6IiArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9DT01NT04gKyAiPVwiIiArIAotICAgIC8vICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQ09NTU9OICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgICAgeG1sbnM6IgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19OQU1FX1hTSQotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0kKLSAgICAgICAgKyAiXCI+Iik7Ci0KLSAgICAvLyBBZGQgIG1vbml0b3IgdG9vbCBpbmZvCi0gICAgLy9wdy5wcmludGxuKG1vbml0b3IudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBlbmQgZWxlbWVudCBzdHJpbmcuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEVuZCBsb2cgZWxlbWVudCAKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgLy8gUmV0dXJuIFhNTCBzdHJpbmcKLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIC8vIEFERDoKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YWE3NjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLlRvb2xJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbC5Db21tZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5NZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuQXJ0aWZhY3RSZWZlcmVuY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5FbnRyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguTG9jYXRvcjsKLWltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHJlYWQgdGhlIExvZyBmaWxlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBOZWlsIERlbGltYSAobmRkZWxpbWFAY2EuaWJtLmNvbSkKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIExvZ1JlYWRlckltcGwgaW1wbGVtZW50cyBMb2dSZWFkZXIKLXsKLSAgLyoqCi0gICAqIERvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZG9jdW1lbnRVUkk7Ci0KLSAgLyoqIFVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGltcGxlbWVudGVyIGlzIHRoZSBmaXJzdCBlbGVtZW50IGFmdGVyIHRoZSBsb2cgZWxlbWVudCAqKi8KLSAgcHJpdmF0ZSBpbnQgZmlyc3RMb2dFbGVtZW50ID0gMDsKLSAgcHJpdmF0ZSBpbnQgZWxlbWVudENvdW50ID0gMDsKLSAgcHJpdmF0ZSBib29sZWFuIGJNb25pdG9yRmlyc3QgPSBmYWxzZTsKLQotICBwcml2YXRlIFdTSUV4Y2VwdGlvbiB3c2lFeGNlcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyI3JlYWRMb2coU3RyaW5nLCBMb2dFbnRyeUhhbmRsZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkTG9nKFN0cmluZyBsb2dVUkksIE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nUmVhZGVyQ2FsbGJhY2spCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVhZCB0aGUgbG9nIGZpbGUgZW50cmllcwotICAgIHJlYWRMb2cobmV3IElucHV0U291cmNlKGxvZ1VSSSksIGxvZ1JlYWRlckNhbGxiYWNrKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyI3JlYWRMb2coUmVhZGVyLCBMb2dFbnRyeUhhbmRsZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkTG9nKFJlYWRlciByZWFkZXIsIE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nUmVhZGVyQ2FsbGJhY2spCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVhZCB0aGUgbG9nIGZpbGUgZW50cmllcwotICAgIHJlYWRMb2cobmV3IElucHV0U291cmNlKHJlYWRlciksIGxvZ1JlYWRlckNhbGxiYWNrKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIGFuZCBwYXJzZSB0aGUgbG9nIGZpbGUuCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSAgICAgICAgICBhbiBJbnB1dFNvdXJjZSBvYmplY3QKLSAgICogQHBhcmFtIG1lc3NhZ2VFbnRyeUhhbmRsZXIgIGEgTWVzc2FnZUVudHJ5SGFuZGxlciBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYSBwcm9ibGVtIG9jY3VycyB3aGlsZSByZWFkaW5nIHRoZSBsb2cgZmlsZS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRMb2coCi0gICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsCi0gICAgTWVzc2FnZUVudHJ5SGFuZGxlciBtZXNzYWdlRW50cnlIYW5kbGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgWE1MIHJlYWRlcgotICAgICAgWE1MUmVhZGVyIHhtbFJlYWRlciA9IFhNTFV0aWxzLmdldFhNTFJlYWRlcigpOwotCi0gICAgICAvKiogVE8gRE86ICBUaGUgTG9nRmlsZSBtdXN0IGJlIHZhbGlkIHdydCBpdHMgc2NoZW1hLiAgVGhlIHNjaGVtYUxvY2F0aW9uIHByb2JhYmx5Ci0gICAgICAgKiBuZWVkcyB0byBiZSBzZXQgaW4gc29tZSBwcm9wZXJ0aWVzIGZpbGUuCi0gICAgICAgKiBUaGVzZSB0d28gYXJlIHRvIHR1cm4gb24gdmFsaWRhdGlvbiAKLSAgICAgIHJlYWRlci5zZXRGZWF0dXJlKEZFQVRVUkVfVkFMSURBVElPTix0cnVlKTsKLSAgICAgICovCi0KLSAgICAgIC8vIFNldCB0aGUgY29udGVudCBoYW5kbGVyCi0gICAgICB4bWxSZWFkZXIuc2V0Q29udGVudEhhbmRsZXIobmV3IExvZ0ZpbGVIYW5kbGVyKG1lc3NhZ2VFbnRyeUhhbmRsZXIpKTsKLQotICAgICAgLy8gU3RhcnQgcGFyc2luZyB0aGUgZmlsZQotICAgICAgeG1sUmVhZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLQotICAgICAgLy8gQUREOiBOZWVkIHRvIGZpbmQgYSB3YXkgdG8gZGV0ZXJtaW5lIHdoZW4gdGhpcyBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biwgCi0gICAgICAvLyBzaW5jZSBieSB0aGUgdGltZSB3ZSBnZXQgaGVyZSBhbGwgb2YgdGhlIHRlc3QgYXNzZXJ0aW9ucyBoYXZlIGJlZW4gcHJvY2Vzc2VkLgotICAgICAgLy8gQWxzbywgb25seSB0aGUgbGFzdCBleGNlcHRpb24gaXMgcHJvcG9nYXRlZCBiYWNrLiAgU2hvdWxkIGFsbCBvZiB0aGUgZXhjZXB0aW9ucwotICAgICAgLy8gYmUgY2FwdHVyZWQgYW5kIHByb3BvZ2F0ZWQgYmFjaz8KLSAgICAgIGlmICh3c2lFeGNlcHRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogRm9yIG5vdywgZG9uJ3QgdGhyb3cgdGhlIGV4Y2VwdGlvbgotICAgICAgICAvL3Rocm93IHdzaUV4Y2VwdGlvbjsKLSAgICAgIH0KLQotICAgICAgLy9SZXF1aXJlbWVudCwgdGhlIG1vbml0b3IgTVVTVCBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGxvZy4KLSAgICAgIC8vUGVyaGFwcyB3ZSBuZWVkIHRvIHByZXByb2Nlc3MgdGhlIGxvZyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjb25kaXRpb24gdG8gYmUgbWV0LgotICAgICAgaWYgKCFiTW9uaXRvckZpcnN0KQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJUaGUgRWxlbWVudCBcIiIKLSAgICAgICAgICAgICsgV1NJQ29uc3RhbnRzLkVMRU1fTU9OSVRPUgotICAgICAgICAgICAgKyAiXCIgaXMgbm90IHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgRWxlbWVudCBcImxvZ1wiIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgbWVzc2FnZSBsb2cgZmlsZS4iLAotICAgICAgICBlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlciNzZXRMb2NhdGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgZG9jdW1lbnRVUkkpCi0gIHsKLSAgICB0aGlzLmRvY3VtZW50VVJJID0gZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKioKLSAgKiBQcm9jZXNzIGFuZCBoYW5kbGVzIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGUgaW4gdGhlIGxvZyBmaWxlIGFuZCBpbnZva2VzCi0gICogbWVzc2FnZSB2YWxpZGF0aW9uIGFzc2VydGlvbnMgc2VyaWFsbHkgYXMgdGhlIGZpbGUgaXMgYmVpbmcgcHJvY2Vzc2VkLAotICAqIGlmIGEgbWVzc2FnZXZhbGlkYXRvciBleGlzdHMuCi0gICovCi0gIHByaXZhdGUgY2xhc3MgTG9nRmlsZUhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotICB7Ci0KLSAgICAvKiogcHJpdmF0ZSBtZW1iZXJzIHRoYXQgcmVwcmVzZW50IGEgTWVzc2FnZUVudHJ5LiovCi0gICAgcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgY29udmVyc2F0aW9uSUQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgdHlwZTsKLSAgICBwcml2YXRlIFN0cmluZyB0aW1lc3RhbXA7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgc2VuZGVySG9zdEFuZFBvcnQgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIHJlY2VpdmVySG9zdEFuZFBvcnQgID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtZXNzYWdlQ29udGVudCAgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGh0dHBIZWFkZXJzICA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgYm91bmRhcnkgID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtaW1lSGVhZGVycyA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgbWltZUNvbnRlbnQgPSBudWxsOwotICAgIHByaXZhdGUgTWltZVBhcnRzIG1pbWVQYXJ0cyA9IG51bGw7Ci0gICAgcHJpdmF0ZSBMaXN0IGJvdW5kYXJpZXMgPSBudWxsOwotCi0gICAgcHJpdmF0ZSBpbnQgYm9tID0gMDsKLQotICAgIHByaXZhdGUgU3RyaW5nIGxvZ1RpbWVzdGFtcCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgbW9uaXRvckNvbW1lbnQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGlnbm9yZUNvbW1lbnQgPSBmYWxzZTsKLQotICAgIC8qKiBPdGhlciBwcml2YXRlIG1lbWJlcnMgKi8KLSAgICBwcml2YXRlIFN0cmluZyBjdXJyZW50RWxlbWVudDsKLQotICAgIHByaXZhdGUgRWxlbWVudExvY2F0aW9uIGVudHJ5RWxlbWVudExvY2F0aW9uID0gbnVsbDsKLQotICAgIHByaXZhdGUgVG9vbEluZm8gdG9vbEluZm8gPSBudWxsOwotCi0gICAgcHJpdmF0ZSBWZWN0b3IgbWVzc2FnZUVudHJ5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIHByaXZhdGUgTWVzc2FnZUVudHJ5SGFuZGxlciBsb2dFbnRyeUhhbmRsZXIgPSBudWxsOwotCi0gICAgcHJpdmF0ZSBMb2NhdG9yIGxvY2F0b3IgPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogTG9nIGZpbGUgaGFuZGxlci4gCi0gICAgICovCi0gICAgcHVibGljIExvZ0ZpbGVIYW5kbGVyKE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nRW50cnlIYW5kbGVyKQotICAgIHsKLSAgICAgIHRoaXMubG9nRW50cnlIYW5kbGVyID0gbG9nRW50cnlIYW5kbGVyOwotCi0gICAgICB0b29sSW5mbyA9IG5ldyBUb29sSW5mbygpOwotICAgICAgdG9vbEluZm8uc2V0VG9vbEVudmlyb25tZW50KG5ldyBUb29sRW52aXJvbm1lbnQoKSk7Ci0gICAgfQotCi0gICAgLyoqIAotICAgICAqIFN0YXJ0IGRvY3VtZW50LiAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydERvY3VtZW50KCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyoqIAotICAgICAqIFNldCBkb2N1bWVudCBsb2NhdG8uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRMb2NhdG9yKExvY2F0b3IgbG9jYXRvcikKLSAgICB7Ci0gICAgICB0aGlzLmxvY2F0b3IgPSBsb2NhdG9yOwotCi0gICAgICAvLyBERUJVRzoKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJsaW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsKLSAgICB9Ci0KLSAgICAvKiogCi0gICAgICogU3RhcnQgZWxlbWVudC4gCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KAotICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSwKLSAgICAgIFN0cmluZyBsb2NhbE5hbWUsCi0gICAgICBTdHJpbmcgcU5hbWUsCi0gICAgICBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigibG9jYWxOYW1lOiIgKyBsb2NhbE5hbWUgKyAiLCBsaW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsKLQotICAgICAgLy9SZXF1aXJlbWVudCwgdGhlIGltcGxlbWVudGVyIE1VU1QgYmUgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBsb2cgICAgICAgCi0gICAgICBpZiAoZWxlbWVudENvdW50ID09IDIpCi0gICAgICAgIGlmIChmaXJzdExvZ0VsZW1lbnQgPT0gMSkKLSAgICAgICAgICBiTW9uaXRvckZpcnN0ID0gdHJ1ZTsKLQotICAgICAgZWxlbWVudENvdW50Kys7Ci0KLSAgICAgIC8vIDxsb2c+Ci0gICAgICBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX0xPRykKLSAgICAgIHsKLSAgICAgICAgLy8gU2F2ZSB0aGUgdGltZXN0YW1wIHZhbHVlCi0gICAgICAgIHRoaXMubG9nVGltZXN0YW1wID0gYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVApOwotICAgICAgfQotCi0gICAgICAvLyA8d3NpLWNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQ09ORklHKQotICAgICAgICAgICYmIChuYW1lc3BhY2VVUkkgPT0gV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcpKQotICAgICAgewotICAgICAgICAvLyBTYXZlIGNvbW1lbnQgZWxlbWVudCBpZiBpdCBleGlzdHMKLSAgICAgICAgaWdub3JlQ29tbWVudCA9IGZhbHNlOwotICAgICAgfQotCi0gICAgICAvLyA8d3NpLWNvbmZpZzpjb21tZW50PgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkKLSAgICAgICAgICAmJiAobmFtZXNwYWNlVVJJID09IFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY29tbWVudCBlbGVtZW50IHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50LCB0aGVuIGdldCBpdHMgY29udGVudAotICAgICAgICBpZiAoIWlnbm9yZUNvbW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQ7Ci0gICAgICAgICAgbW9uaXRvckNvbW1lbnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gPHdzaS1jb25maWc6cmVkaXJlY3Q+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9SRURJUkVDVCkKLSAgICAgICAgICAmJiAobmFtZXNwYWNlVVJJID09IFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHKSkKLSAgICAgIHsKLSAgICAgICAgLy8gQWZ0ZXIgaGl0dGluZyB0aGUgZmlyc3QgcmVkaXJlY3Qgc3RhdGVtZW50LCBpZ25vcmUgYWxsIGNvbW1lbnQgZWxlbWVudHMKLSAgICAgICAgaWdub3JlQ29tbWVudCA9IHRydWU7Ci0gICAgICAgIG1vbml0b3JDb21tZW50ID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgLy8gPG1vbml0b3I+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTU9OSVRPUikKLSAgICAgIHsKLSAgICAgICAgZmlyc3RMb2dFbGVtZW50Kys7Ci0gICAgICAgIHRvb2xJbmZvLnNldE5hbWUoV1NJQ29uc3RhbnRzLkVMRU1fTU9OSVRPUik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBtb25pdG9yIHZlcnNpb24gYW5kIHJlbGVhc2UgZGF0ZQotICAgICAgICB0b29sSW5mby5zZXRWZXJzaW9uKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTikpOwotICAgICAgICB0b29sSW5mby5zZXRSZWxlYXNlRGF0ZSgKLSAgICAgICAgICBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1JFTEVBU0VfREFURSkpOwotICAgICAgfQotCi0gICAgICAvLyA8aW1wbGVtZW50ZXI+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fSU1QTEVNRU5URVIpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fSU1QTEVNRU5URVI7Ci0gICAgICAgIHRvb2xJbmZvLnNldEltcGxlbWVudGVyKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICB0b29sSW5mby5zZXRMb2NhdGlvbihhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxydW50aW1lPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX1JVTlRJTUUpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fUlVOVElNRTsKLSAgICAgICAgdG9vbEluZm8uZ2V0VG9vbEVudmlyb25tZW50KCkuc2V0UnVudGltZU5hbWUoCi0gICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9OQU1FKSk7Ci0gICAgICAgIHRvb2xJbmZvLmdldFRvb2xFbnZpcm9ubWVudCgpLnNldFJ1bnRpbWVWZXJzaW9uKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTikpOwotICAgICAgfQotCi0gICAgICAvLyA8b3BlcmF0aW5nU3lzdGVtPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX09QRVJBVElOR19TWVNURU0pCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fT1BFUkFUSU5HX1NZU1RFTTsKLSAgICAgICAgdG9vbEluZm8uZ2V0VG9vbEVudmlyb25tZW50KCkuc2V0T1NOYW1lKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRPU1ZlcnNpb24oCi0gICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx4bWxQYXJzZXI+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fWE1MX1BBUlNFUikKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9YTUxfUEFSU0VSOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRYTUxQYXJzZXJOYW1lKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRYTUxQYXJzZXJWZXJzaW9uKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTikpOwotICAgICAgfQotCi0gICAgICAvLyA8bWVzc2FnZUVudHJ5PgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfRU5UUlkpCi0gICAgICB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9FTlRSWTsKLSAgICAgICAgZW50cnlFbGVtZW50TG9jYXRpb24gPSBuZXcgRWxlbWVudExvY2F0aW9uKHRoaXMubG9jYXRvcik7Ci0gICAgICAgIHRpbWVzdGFtcCA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVElNRVNUQU1QKTsKLSAgICAgICAgY29udmVyc2F0aW9uSUQgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX0NPTlZFUlNBVElPTl9JRCk7Ci0gICAgICAgIGlkID0gYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9JRF9VQyk7Ci0gICAgICAgIHR5cGUgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpOwotICAgICAgfQotCi0gICAgICAvLyA8aHR0cEhlYWRlcnM+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTKQotICAgICAgewotICAgICAgICAvL05vdGU6IENoYXJhY3RlciBkYXRhIGNvdWxkIGJlIHNwbGl0IHVwIGFuZCByZXR1cm5lZCAKLSAgICAgICAgLy9pbiBtb3JlIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVycyBjYWxsLiAKLSAgICAgICAgaHR0cEhlYWRlcnMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTOwotICAgICAgfQotCi0gICAgICAvLyA8bWVzc2FnZUNvbnRlbnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UKQotICAgICAgewotICAgICAgICBtZXNzYWdlQ29udGVudCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgbWltZVBhcnRzID0gbnVsbDsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlQ7Ci0gICAgICAgIFN0cmluZyBib21TdHJpbmcgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX0JPTSk7Ci0gICAgICAgIGlmIChib21TdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgICBib20gPSBJbnRlZ2VyLnZhbHVlT2YoYm9tU3RyaW5nKS5pbnRWYWx1ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYm9tID0gMDsKLSAgICAgIH0KLQotICAgICAgLy8gPG1lc3NhZ2VDb250ZW50V2l0aEF0dGFjaG1lbnRzPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVF9XSVRIX0FUVEFDSE1FTlRTKQotICAgICAgewotICAgICAgICBtZXNzYWdlQ29udGVudCA9IG51bGw7Ci0gICAgICAgIG1pbWVQYXJ0cyA9IG5ldyBNaW1lUGFydHNJbXBsKCk7Ci0KLSAgICAgICAgU3RyaW5nIGJvbVN0cmluZyA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfQk9NKTsKLSAgICAgICAgaWYgKGJvbVN0cmluZyAhPSBudWxsKQotICAgICAgICAgIGJvbSA9IEludGVnZXIudmFsdWVPZihib21TdHJpbmcpLmludFZhbHVlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBib20gPSAwOwotICAgICAgfQotCi0gICAgICAvLyA8bWltZVBhcnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9QQVJUKQotICAgICAgewotICAgICAgICBpZiAoYm91bmRhcmllcyA9PSBudWxsKQotICAgICAgICAgIGJvdW5kYXJpZXMgPSBuZXcgQXJyYXlMaXN0KDIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYm91bmRhcmllcy5jbGVhcigpOwotICAgICAgfQotCi0gICAgICAvLyA8Ym91bmRhcnlTdHJpbmc+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQk9VTkRBUllfU1RSSU5HKQotICAgICAgewotICAgICAgICBib3VuZGFyeSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9CT1VOREFSWV9TVFJJTkc7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtaW1lSGVhZGVycz4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMpCi0gICAgICB7Ci0gICAgICAgIG1pbWVIZWFkZXJzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX01JTUVfSEVBREVSUzsKLSAgICAgIH0KLQotICAgICAgLy8gPG1pbWVDb250ZW50PgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX01JTUVfQ09OVEVOVCkKLSAgICAgIHsKLSAgICAgICAgbWltZUNvbnRlbnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9DT05URU5UOwotICAgICAgfQotCi0gICAgICAvLyA8c2VuZGVySG9zdEFuZFBvcnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQpCi0gICAgICB7Ci0gICAgICAgIHNlbmRlckhvc3RBbmRQb3J0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX1NFTkRFUl9IT1NUX0FORF9QT1JUOwotICAgICAgfQotCi0gICAgICAvLyA8cmVjZWl2ZXJIb3N0QW5kUG9ydD4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUKQotICAgICAgewotICAgICAgICByZWNlaXZlckhvc3RBbmRQb3J0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX1JFQ0VJVkVSX0hPU1RfQU5EX1BPUlQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqIAotICAgICogQ2hhcmFjdGVycyBjYWxsYmFjay4gCi0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjaGFyYWN0ZXJzKGNoYXIgY2hbXSwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgIC8vIElnbm9yaW5nIENSTEYgdGhhdCBhcHBlYXJzIGluIGxvZyBlbGVtZW50cwotICAgICAgaW50IGFsdFN0YXJ0ID0gc3RhcnQ7Ci0gICAgICBpbnQgYWx0TGVuZ3RoID0gbGVuZ3RoOwotICAgICAgaWYgKHN0YXJ0ID4gMCAmJiBjaFtzdGFydC0xXSA9PSAxMyAmJiBjaFtzdGFydF0gPT0gMTApCi0gICAgICB7Ci0gICAgICAgIGFsdFN0YXJ0Kys7Ci0gICAgICAgIGFsdExlbmd0aC0tOwotICAgICAgfQotCi0gICAgICAvLyA8d3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgaWYgKG1vbml0b3JDb21tZW50ICE9IG51bGwgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkKLSAgICAgIHsKLSAgICAgICAgbW9uaXRvckNvbW1lbnQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPG1lc3NhZ2VDb250ZW50PgotICAgICAgZWxzZSBpZiAobWVzc2FnZUNvbnRlbnQgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlQpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb250ZW50LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxodHRwSGVhZGVycz4KLSAgICAgIGVsc2UgaWYgKGh0dHBIZWFkZXJzICE9IG51bGwKLSAgICAgICAgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTKQotICAgICAgewotICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8Ym91bmRhcnlTdHJpbmc+Ci0gICAgICBlbHNlIGlmIChib3VuZGFyeSAhPSBudWxsCi0gICAgICAgICYmIGN1cnJlbnRFbGVtZW50ID09IFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORykKLSAgICAgIHsKLSAgICAgICAgYm91bmRhcnkuYXBwZW5kKGNoLCBhbHRTdGFydCwgYWx0TGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPG1pbWVIZWFkZXJzPgotICAgICAgZWxzZSBpZiAobWltZUhlYWRlcnMgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMpCi0gICAgICB7Ci0gICAgICAgIG1pbWVIZWFkZXJzLmFwcGVuZChjaCwgYWx0U3RhcnQsIGFsdExlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtaW1lQ29udGVudD4KLSAgICAgIGVsc2UgaWYgKG1pbWVDb250ZW50ICE9IG51bGwKLSAgICAgICAgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9DT05URU5UKQotICAgICAgewotICAgICAgICBtaW1lQ29udGVudC5hcHBlbmQoY2gsIGFsdFN0YXJ0LCBhbHRMZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8c2VuZGVySG9zdEFuZFBvcnQ+Ci0gICAgICBlbHNlIGlmIChzZW5kZXJIb3N0QW5kUG9ydCAhPSBudWxsCi0gICAgICAgICYmIGN1cnJlbnRFbGVtZW50ID09IFdTSUNvbnN0YW50cy5FTEVNX1NFTkRFUl9IT1NUX0FORF9QT1JUKQotICAgICAgewotICAgICAgICBzZW5kZXJIb3N0QW5kUG9ydC5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8cmVjZWl2ZXJIb3N0QW5kUG9ydD4KLSAgICAgIGVsc2UgaWYgKHJlY2VpdmVySG9zdEFuZFBvcnQgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUKQotICAgICAgewotICAgICAgICByZWNlaXZlckhvc3RBbmRQb3J0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqIAotICAgICAqIEVuZCBFbGVtZW50LiAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBlbmRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSkKLSAgICB7Ci0gICAgICAvLyA8d3NpLWNvbmZpZzpjb21tZW50PgotICAgICAgaWYgKAotICAgICAgICAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQpCi0gICAgICAgICAgJiYgKG5hbWVzcGFjZVVSSSA9PSBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRykpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHdlIHNhdmVkIHRoZSBjb21tZW50LCB0aGVuIHByb2Nlc3MgaXQgYW5kIHRoZSBsb2cgdGltZXN0YW1wCi0gICAgICAgIGlmICh0aGlzLm1vbml0b3JDb21tZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBBcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdFJlZmVyZW5jZSA9IG5ldyBBcnRpZmFjdFJlZmVyZW5jZUltcGwoKTsKLSAgICAgICAgICBhcnRpZmFjdFJlZmVyZW5jZS5zZXRUaW1lc3RhbXAodGhpcy5sb2dUaW1lc3RhbXApOwotICAgICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICAgIGNvbW1lbnQuc2V0VGV4dChtb25pdG9yQ29tbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgICBhcnRpZmFjdFJlZmVyZW5jZS5zZXREb2N1bWVudEVsZW1lbnQoCi0gICAgICAgICAgICBjb21tZW50LAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHKTsKLSAgICAgICAgICBwcm9jZXNzQXJ0aWZhY3RSZWZlcmVuY2UoYXJ0aWZhY3RSZWZlcmVuY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxib3VuZGFyeVN0cmluZz4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9CT1VOREFSWV9TVFJJTkcpCi0gICAgICB7Ci0gICAgICAgIC8vIEFkZGluZyBib3VuZGFyeSBzdHJpbmcgdG8gYSBsaXN0Ci0gICAgICAgIGJvdW5kYXJpZXMuYWRkKGJvdW5kYXJ5LnRvU3RyaW5nKCkpOwotICAgICAgfQotCi0gICAgICAvLyA8bWltZVBhcnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9QQVJUKQotICAgICAgewotICAgICAgICAvLyBDcmVhdGluZyBhIE1lc3NhZ2VNSU1FUGFydCBpbnN0YW5jZQotICAgICAgICBNaW1lUGFydCBwYXJ0ID0gbmV3IE1pbWVQYXJ0SW1wbCgpOwotICAgICAgICBwYXJ0LnNldEhlYWRlcnMobWltZUhlYWRlcnMudG9TdHJpbmcoKSk7Ci0gICAgICAgIHBhcnQuc2V0Q29udGVudChtaW1lQ29udGVudC50b1N0cmluZygpKTsKLSAgICAgICAgcGFydC5zZXRCb3VuZGFyeVN0cmluZ3MoKFN0cmluZ1tdKWJvdW5kYXJpZXMudG9BcnJheShuZXcgU3RyaW5nWzBdKSk7Ci0KLSAgICAgICAgbWltZVBhcnRzLmFkZFBhcnQocGFydCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtZXNzYWdlRW50cnk+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9FTlRSWSkKLSAgICAgIHsKLSAgICAgICAgLy8gQXNzdW1wdGlvbjogUmVsYXRlZCBtZXNzYWdlcyBhcmUgc2VxdWVudGlhbGx5IGF2YWlsYWJsZSBpbiB0aGUgbWVzc2FnZSBsb2cuCi0gICAgICAgIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNULmVxdWFsc0lnbm9yZUNhc2UodHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDcmVhdGUgbG9nIGVudHJ5Ci0gICAgICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeVJlcXVlc3QgPQotICAgICAgICAgICAgY3JlYXRlTWVzc2FnZUVudHJ5KAotICAgICAgICAgICAgICAgIGlkLAotICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklELAotICAgICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgIHNlbmRlckhvc3RBbmRQb3J0LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydC50b1N0cmluZygpLAotICAgICAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID09IG51bGwgPyAiIiA6IG1lc3NhZ2VDb250ZW50LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgaHR0cEhlYWRlcnMudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBtaW1lUGFydHMsCi0gICAgICAgICAgICAgICAgZW50cnlFbGVtZW50TG9jYXRpb24pOwotCi0gICAgICAgICAgLy8gQWRkIGxvZyBlbnRyeSB0byB0aGUgbGlzdAotICAgICAgICAgIG1lc3NhZ2VFbnRyeUxpc3QuYWRkKG1lc3NhZ2VFbnRyeVJlcXVlc3QpOwotICAgICAgICAgIC8vIFJlcXVlc3QgaXMgbm93IHByb2Nlc3NlZCBvbmx5IHdoZW4gdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBpZiAoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UuZXF1YWxzSWdub3JlQ2FzZSh0eXBlKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBsb2cgZW50cnkKLSAgICAgICAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVzcG9uc2UgPQotICAgICAgICAgICAgY3JlYXRlTWVzc2FnZUVudHJ5KAotICAgICAgICAgICAgICAgIGlkLAotICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklELAotICAgICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgIHNlbmRlckhvc3RBbmRQb3J0LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydC50b1N0cmluZygpLAotICAgICAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID09IG51bGwgPyAiIiA6IG1lc3NhZ2VDb250ZW50LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgaHR0cEhlYWRlcnMudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBtaW1lUGFydHMsCi0gICAgICAgICAgICAgICAgZW50cnlFbGVtZW50TG9jYXRpb24pOwotCi0gICAgICAgICAgaWYgKGxvZ0VudHJ5SGFuZGxlciAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGxvb2sgdXAgdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgICAgICAgLy8gSVNTVUUgOiBuZWVkIHRvIHRocm93ICYgY2F0Y2ggYSBudWxscG9pbnRlcmV4Y2VwdGlvbiBpbiBoZXJlLi4uCi0gICAgICAgICAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVxdWVzdCA9IGZpbmRSZWxhdGVkUmVxdWVzdChtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0KLSAgICAgICAgICAgIGlmIChtZXNzYWdlRW50cnlSZXF1ZXN0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghaXNNZXNzYWdlRW5jcnlwdGVkKG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0TWVzc2FnZSgpKSAmJgotICAgICAgICAgICAgICAgICAgIWlzTWVzc2FnZUVuY3J5cHRlZChtZXNzYWdlRW50cnlSZXNwb25zZS5nZXRNZXNzYWdlKCkpKQotICAgICAgICAgICAgICB7Ci0JICAgICAgICBpZiAoIW9taXRSZXF1ZXN0KG1lc3NhZ2VFbnRyeVJlcXVlc3QpKQotCSAgICAgICAgewotCSAgICAgICAgICAvLyBDcmVhdGUgZW50cnkgCi0JICAgICAgICAgIC8vIEFERDogTmVlZCB0byBjcmVhdGUgZW50cnkgZnJvbSByZXBvcnQKLQkgICAgICAgICAgLy9FbnRyeSBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLQkgICAgICAgICAgRW50cnkgZW50cnkgPSBuZXcgRW50cnlJbXBsKCk7Ci0JICAgICAgICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLQkgICAgICAgICAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVFVRVNUKSk7Ci0JICAgICAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0SWQoKSk7Ci0JICAgICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKG1lc3NhZ2VFbnRyeVJlcXVlc3QpOwotCQotCSAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgZm9yIHRoZSByZXF1ZXN0LXJlc3BvbnNlIHBhaXIKLQkgICAgICAgICAgRW50cnlDb250ZXh0IHJlcXVlc3RUYXJnZXRDb250ZXh0ID0KLQkgICAgICAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KAotCSAgICAgICAgICAgICAgICAgICAgZW50cnksCi0JICAgICAgICAgICAgICAgICAgICBtZXNzYWdlRW50cnlSZXF1ZXN0LAotCSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUVudHJ5UmVzcG9uc2UpOwotCSAgICAgICAgICBpZiAocmVxdWVzdFRhcmdldENvbnRleHQgIT0gbnVsbCkKLQkgICAgICAgICAgICBwcm9jZXNzTG9nRW50cnkocmVxdWVzdFRhcmdldENvbnRleHQpOwotCQotCSAgICAgICAgICAvLyBDcmVhdGUgZW50cnkgCi0JICAgICAgICAgIC8vIEFERDogTmVlZCB0byBjcmVhdGUgZW50cnkgZnJvbSByZXBvcnQKLQkgICAgICAgICAgLy9FbnRyeSBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLQkgICAgICAgICAgZW50cnkgPSBuZXcgRW50cnlJbXBsKCk7Ci0JICAgICAgICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLQkgICAgICAgICAgICBFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFU1BPTlNFKSk7Ci0JICAgICAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKG1lc3NhZ2VFbnRyeVJlc3BvbnNlLmdldElkKCkpOwotCSAgICAgICAgICBlbnRyeS5zZXRFbnRyeURldGFpbChtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0JCi0JICAgICAgICAgIEVudHJ5Q29udGV4dCByZXNwb25zZVRhcmdldENvbnRleHQgPQotCSAgICAgICAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KAotCSAgICAgICAgICAgICAgICAgIGVudHJ5LAotCSAgICAgICAgICAgICAgICAgIG1lc3NhZ2VFbnRyeVJlcXVlc3QsCi0JICAgICAgICAgICAgICAgICAgbWVzc2FnZUVudHJ5UmVzcG9uc2UpOwotCSAgICAgICAgICBpZiAocmVzcG9uc2VUYXJnZXRDb250ZXh0ICE9IG51bGwpCi0JICAgICAgICAgICAgcHJvY2Vzc0xvZ0VudHJ5KHJlc3BvbnNlVGFyZ2V0Q29udGV4dCk7Ci0JICAgICAgICB9Ci0JICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBjdXJyZW50RWxlbWVudCA9IG51bGw7Ci0gICAgfQotCi0gICAgLyoqIAotICAgICogRW5kIERvY3VtZW50LiAKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGVuZERvY3VtZW50KCkKLSAgICB7Ci0gICAgICAvL0lmIHdlIHdhbnQgdG8gc2VyaWFsbHkgcHJvY2VzcyB0aGUgbG9nIGZpbGUuICBJbnZva2UgdmFsaWRhdGVNZXNzYWdlcyB3aXRoCi0gICAgICAvL21zZ1ZhbGlkYXRvciE9bnVsbC4gIEhlcmUgd2UgaGF2ZSB0aGUgb3B0aW9uIG9mIGNsZWFyaW5nIHRoZSBsb2dFbnRyeSB2ZWN0b3IKLSAgICAgIC8vb25jZSBtZXNzYWdlIHZhbGlkYXRpb24gaXMgZG9uZS4KLSAgICAgIC8vaWYgKG1zZ1ZhbGlkYXRvciE9bnVsbCkKLSAgICAgIC8vbG9nRW50cnlMaXN0LmNsZWFyKCk7Ci0gICAgICAgIAotICAgICAgICAvKiBQcm9jZXNzIGFsbCByZW1haW5pbmcgcmVxdWVzdHMgaW4gdGhlIG1lc3NhZ2VFbnRyeUxpc3QgKi8KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlRW50cnlMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBNZXNzYWdlRW50cnkgbG9nRW50cnkgPSAoTWVzc2FnZUVudHJ5KSBtZXNzYWdlRW50cnlMaXN0LmdldChpKTsKLSAgICAgICAgICAgIGlmICghb21pdFJlcXVlc3QobG9nRW50cnkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbnRyeSBlbnRyeSA9IG5ldyBFbnRyeUltcGwoKTsKLSAgICAgICAgICAgICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoCi0gICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKTsKLSAgICAgICAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQobG9nRW50cnkuZ2V0SWQoKSk7Ci0gICAgICAgICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGxvZ0VudHJ5KTsKLSAgICAgICAgICAgICAgRW50cnlDb250ZXh0IHJlcXVlc3RUYXJnZXRDb250ZXh0ID0KLSAgICAgICAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBsb2dFbnRyeSwgbnVsbCk7Ci0gICAgICAgICAgICAgIGlmIChyZXF1ZXN0VGFyZ2V0Q29udGV4dCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHByb2Nlc3NMb2dFbnRyeShyZXF1ZXN0VGFyZ2V0Q29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcm9jZXNzIHRoZSBtZXNzYWdlIGluIHRoZSBsb2cgZW50cnkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcHJvY2Vzc0xvZ0VudHJ5KEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vQmVmb3JlIHZhbGlkYXRpbmcgYW55IG1lc3NhZ2VzIGNoZWNrIGlmIGltcGxlbWVudGVyIGlzIHRoZSBmaXJzdCBlbGVtZW50LgotICAgICAgICBsb2dFbnRyeUhhbmRsZXIucHJvY2Vzc0xvZ0VudHJ5KGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHdzaUV4Y2VwdGlvbiA9Ci0gICAgICAgICAgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIgotICAgICAgICAgICAgICArICIgdGhlIG1lc3NhZ2UgbG9nRW50cnk6ICIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SWQoKSwKLSAgICAgICAgICAgIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb2Nlc3MgdGhlIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcHJvY2Vzc0FydGlmYWN0UmVmZXJlbmNlKEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvL0JlZm9yZSB2YWxpZGF0aW5nIGFueSBtZXNzYWdlcyBjaGVjayBpZiBpbXBsZW1lbnRlciBpcyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgbG9nRW50cnlIYW5kbGVyLnByb2Nlc3NBcnRpZmFjdFJlZmVyZW5jZShhcnRpZmFjdFJlZmVyZW5jZSk7Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgd3NpRXhjZXB0aW9uID0KLSAgICAgICAgICBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICAgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmciCi0gICAgICAgICAgICAgICsgIiB0aGUgYXJ0aWZhY3QgcmVmZXJlbmNlOiAiCi0gICAgICAgICAgICAgICsgYXJ0aWZhY3RSZWZlcmVuY2UudG9TdHJpbmcoKSwKLSAgICAgICAgICAgIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAgICogRmluZCB0aGUgcmVsYXRlZCBSZXF1ZXN0IExvZ0VudHJ5LiAgVGhlIGN1cnJlbnQgcnVsZSBmb3IgcmVsYXRlZCBsb2cgZW50aXJlcyBpcwotICAgICAgICogdGhhdCBhIHJlcXVlc3Qgd2lsbCBhbHdheXMgcHJlY2VkZSBpdHMgcmVzcG9uc2UuCi0gICAgICAgKiBJU1NVRTogU2VxdWVuY2UgaW4gbG9nIGZpbGUgaXMgdGltZXN0YW1wIGRyaXZlbiAobW9uaXRvciBzcGVjKS4gCi0gICAgICAgKiBBc3NlcnRpb24gaXMgdGhhdCBmb3IgYSBnaXZlbiBjb252ZXJzYXRpb25JRCwgYSBzZWNvbmQgcmVxdWVzdCBpcyBub3Qgc2VudCAKLSAgICAgICAqIHVudGlsIGl0cyByZXNwb25zZSBpcyByZWNlaXZlZCAoY2hyb25vbG9naWNhbGx5KS4gCi0gICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGhhdmUgdG8gYmUgbW9kaWZpZWQgaWYgdGhlIHJ1bGUgY2hhbmdlcy4KLSAgICAgICAqLwotICAgIC8vIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkga2VlcGluZyBhIG11Y2ggc21hbGxlciBsaXN0IG9mIHVucmVzcG9uZGVkIHJlcXVlc3RzLi4uCi0gICAgcHVibGljIE1lc3NhZ2VFbnRyeSBmaW5kUmVsYXRlZFJlcXVlc3QoTWVzc2FnZUVudHJ5IGxvZ0VudHJ5UmVzcG9uc2UpCi0gICAgewotICAgICAgaWYgKGxvZ0VudHJ5UmVzcG9uc2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgZW50cnkgPSBtZXNzYWdlRW50cnlMaXN0LnNpemUoKSAtIDE7IGVudHJ5ID49IDA7IGVudHJ5LS0pCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIGxvZyBlbnRyeSBvZiB0aGUgbWF0Y2hpbmcgcmVxdWVzdAotICAgICAgICAgIE1lc3NhZ2VFbnRyeSBsb2dFbnRyeSA9IChNZXNzYWdlRW50cnkpIG1lc3NhZ2VFbnRyeUxpc3QuZ2V0KGVudHJ5KTsKLSAgICAgICAgICAvLyBJZ25vcmUgb3duIGVudHJ5Ci0gICAgICAgICAgaWYgKCFsb2dFbnRyeVJlc3BvbnNlLmVxdWFscyhsb2dFbnRyeSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGxvZ0VudHJ5UmVzcG9uc2UKLSAgICAgICAgICAgICAgLmdldENvbnZlcnNhdGlvbklkKCkKLSAgICAgICAgICAgICAgLmVxdWFscyhsb2dFbnRyeS5nZXRDb252ZXJzYXRpb25JZCgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gZm91bmQgdGhlIG1vc3QgcmVjZW50bHkgcmVhZCBtZXNzYWdlIHdpdGggdGhlIHNhbWUgY29udmVyc2F0aW9uSUQuCi0gICAgICAgICAgICAgIC8vIEZyb20gYWJvdmUsIHRoaXMgc2hvdWxkIGJlIHRoZSBjb3JyZXNwb25kaW5nIHJlcXVlc3QuIENoZWNrIGFzIGZhciBhcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgaWYgKGxvZ0VudHJ5LmdldFR5cGUoKS5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlRW50cnlMaXN0LnJlbW92ZShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ0VudHJ5OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBleHBlY3RlZCBhIHJlcXVlc3QuIG5lZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICAgIC8vIGNvbnZlcnNhdGlvbklEIG1hdGNoIG5vdCBmb3VuZCBhbnl3aGVyZS4gbmVlZCB0byB0aHJvdyBhbiBleGNlcHRpb24hCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGxvZyBlbnRyeS4KLSAgICAgKi8KLSAgICBwcml2YXRlIE1lc3NhZ2VFbnRyeSBjcmVhdGVNZXNzYWdlRW50cnkoCi0gICAgICBTdHJpbmcgaWQsCi0gICAgICBTdHJpbmcgY29udmVyc2F0aW9uSWQsCi0gICAgICBTdHJpbmcgdHlwZSwKLSAgICAgIFN0cmluZyB0aW1lc3RhbXAsCi0gICAgICBTdHJpbmcgc2VuZGVySVBQb3J0LAotICAgICAgU3RyaW5nIHJlY2VpdmVySVBQb3J0LAotICAgICAgU3RyaW5nIG1lc3NhZ2VDb250ZW50LAotICAgICAgU3RyaW5nIGh0dHBIZWFkZXJzLAotICAgICAgTWltZVBhcnRzIG1pbWVQYXJ0cywKLSAgICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pCi0gICAgewotICAgICAgLy8gQ3JlYXRlIGxvZyBlbnRyeQotICAgICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG5ldyBNZXNzYWdlRW50cnlJbXBsKCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0SWQoaWQpOwotICAgICAgbWVzc2FnZUVudHJ5LnNldENvbnZlcnNhdGlvbklkKGNvbnZlcnNhdGlvbklEKTsKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRUeXBlKHR5cGUpOwotICAgICAgbWVzc2FnZUVudHJ5LnNldFRpbWVzdGFtcCh0aW1lc3RhbXApOwotICAgICAgbWVzc2FnZUVudHJ5LnNldFNlbmRlckhvc3RBbmRQb3J0KHNlbmRlcklQUG9ydCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChyZWNlaXZlcklQUG9ydCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0SFRUUEhlYWRlcnMoaHR0cEhlYWRlcnMpOwotICAgICAgbWVzc2FnZUVudHJ5LnNldEJPTShib20pOwotICAgICAgbWVzc2FnZUVudHJ5LnNldEVsZW1lbnRMb2NhdGlvbihlbGVtZW50TG9jYXRpb24pOwotCi0gICAgICBTdHJpbmcgZW5jb2RpbmcgPSBudWxsOwotICAgICAgaWYgKG1pbWVQYXJ0cyA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIGVuY29kaW5nIGZvciB0aGlzIG1lc3NhZ2UgY29udGVudAotICAgICAgICBlbmNvZGluZyA9IFV0aWxzLmdldFhNTEVuY29kaW5nKG1lc3NhZ2VDb250ZW50KTsKLSAgICAgICAgbWVzc2FnZUVudHJ5LnNldE1lc3NhZ2UobWVzc2FnZUNvbnRlbnQpOwotICAgICAgIAltZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQoZmFsc2UpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgIAltZXNzYWdlRW50cnkuc2V0TWltZVBhcnRzKG1pbWVQYXJ0cyk7Ci0gICAgICAgCU1pbWVQYXJ0IHJvb3QgPSBVdGlscy5maW5kUm9vdFBhcnQoaHR0cEhlYWRlcnMsIG1pbWVQYXJ0cy5nZXRQYXJ0cygpKTsKLSAgICAgICAJaWYgKHJvb3QgIT0gbnVsbCkKLSAgICAgICAJewotICAgICAgICAgIC8vIEdldCB0aGUgZW5jb2RpbmcgZm9yIHRoaXMgbWVzc2FnZSBjb250ZW50Ci0gICAgICAgICAgZW5jb2RpbmcgPSBVdGlscy5nZXRYTUxFbmNvZGluZyhyb290LmdldENvbnRlbnQoKSk7Ci0gICAgICAgICAgbWltZVBhcnRzLnNldFJvb3RQYXJ0KHJvb3QpOwotICAgICAgIAl9Ci0gICAJCS8vIGVsc2UgZW1wdHkgYm9keQotICAgICAgIAltZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQodHJ1ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoKGVuY29kaW5nID09IG51bGwpIHx8IChlbmNvZGluZy5lcXVhbHMoIiIpKSkKLSAgICAgICAgIGVuY29kaW5nID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HOwotICAgICAgbWVzc2FnZUVudHJ5LnNldEVuY29kaW5nKGVuY29kaW5nKTsKLQotICAgICAgcmV0dXJuIG1lc3NhZ2VFbnRyeTsKLSAgICB9Ci0KLSAgfSAvL0VuZCBDb250ZW50SGFuZGxlcgotICAKLSAgLyoqCi0gICAqIENoZWNrIGZvciBIVFRQIG1lc3NhZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBsb2dnZWQuCi0gICAqIEBwYXJhbSBycjogYSByZXF1ZXN0LXJlc3BvbnNlIHBhaXIuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcmVxdWVzdC1yZXNwb25zZSBwYWlyIHNob3VsZCBiZSBvbWl0dGVkIGZyb20gdGhlIGxvZy4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBvbWl0UmVxdWVzdChNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVxdWVzdCkKLSAgewotICAgIGJvb2xlYW4gb21pdCA9IGZhbHNlOwotICAgIGlmIChtZXNzYWdlRW50cnlSZXF1ZXN0ID09IG51bGwpCi0gICAgICAgb21pdCA9IHRydWU7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyByZXF1ZXN0SGVhZGVycyA9IG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIGlmICgocmVxdWVzdEhlYWRlcnMgIT0gbnVsbCkgJiYKLSAgICAgICAgICAoKHJlcXVlc3RIZWFkZXJzLnN0YXJ0c1dpdGgoIkNPTk5FQ1QiKSkgfHwKLSAgICAgICAgICAgKHJlcXVlc3RIZWFkZXJzLnN0YXJ0c1dpdGgoIlRSQUNFIikpIHx8IAotICAgICAgICAgICAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiREVMRVRFIikpIHx8IAotICAgICAgICAgICAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiT1BUSU9OUyIpKSB8fCAKLSAgICAgICAgICAgKHJlcXVlc3RIZWFkZXJzLnN0YXJ0c1dpdGgoIkhFQUQiKSkgfHwKLSAgICAgICAgICAgKChyZXF1ZXN0SGVhZGVycy5zdGFydHNXaXRoKCJHRVQiKSkgJiYKLSAgICAgICAgCSghaXNNZXNzYWdlV2l0aEJyYWNrZXRzKG1lc3NhZ2VFbnRyeVJlcXVlc3QuZ2V0TWVzc2FnZSgpKSkpKSkKLSAgICAgIHsgCi0gICAgICAgIG9taXQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gb21pdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgaGFzIGF0IGxlYXN0Ci0gICAqIG9uZSBsZWZ0IGFuZCBvbmUgcmlnaHQgYnJhY2tldC4KLSAgICogQHBhcmFtIG1lc3NhZ2U6IGEgbWVzc2FnZSBjb250ZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgaGFzIGF0IGxlYXN0Ci0gICAqICAgICAgICAgb25lIGxlZnQgYW5kIG9uZSByaWdodCBicmFja2V0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlV2l0aEJyYWNrZXRzKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuICgobWVzc2FnZSAhPSBudWxsKSAmJiAKLSAgICAgICAgICAgIChtZXNzYWdlLmluZGV4T2YoIjwiKSE9IC0xKSAmJiAKLSAgICAgICAgICAgIChtZXNzYWdlLmluZGV4T2YoIj4iKSAhPSAtMSkpOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaXNNZXNzYWdlRW5jcnlwdGVkKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuICgobWVzc2FnZSAhPSBudWxsKSAmJiAKLQkgICAgKG1lc3NhZ2UuaW5kZXhPZigiPEVuY3J5cHRlZEtleSAiKSAhPSAtMSkpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nV3JpdGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nV3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGVlOTgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL0xvZ1dyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudFdyaXRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2dXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gdXNlZCB0byB3cml0ZSB0aGUgTG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIE5laWwgRGVsaW1hIChuZGRlbGltYUBjYS5pYm0uY29tKQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dXcml0ZXJJbXBsIGV4dGVuZHMgRG9jdW1lbnRXcml0ZXJJbXBsIGltcGxlbWVudHMgTG9nV3JpdGVyCi17Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nV3JpdGVyI3dyaXRlKExvZykKLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCB3cml0ZShMb2cgbG9nKQotICAgIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24sIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgdGhlIHdyaXRlciB3YXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aHJvdyBhbiBleGNlcHRpb24KLSAgICBpZiAod3JpdGVyID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb3VsZCBub3Qgd3JpdGUgbG9nIGZpbGUgc2luY2Ugd3JpdGVyIHdhcyBub3Qgc2V0LiIpOwotCi0gICAgLy8gV3JpdGUgbG9nIGZpbGUKLSAgICB3cml0ZShsb2csIHdyaXRlcik7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlciN3cml0ZShMb2csIFdyaXRlcikKLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCB3cml0ZShMb2cgbG9nLCBXcml0ZXIgd3JpdGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBBREQ6Ci0gICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiV3JpdGUgZW50aXJlIGxvZyBmaWxlIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgeWV0LiIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NZXNzYWdlRW50cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NZXNzYWdlRW50cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYzdhM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTWVzc2FnZUVudHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotCi0vKioKLSAqIE1lc3NhZ2UgZW50cnkgaW1wbGVtZW50YXRpb24uCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VFbnRyeUltcGwgaW1wbGVtZW50cyBNZXNzYWdlRW50cnkKLXsKLSAgLyoqCi0gICAqIExvZyBlbnRyeSBpZC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgaWQ7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBjb252ZXJzYXRpb25JZDsKLSAgcHJvdGVjdGVkIFN0cmluZyB0eXBlOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRpbWVzdGFtcDsKLSAgcHJvdGVjdGVkIFN0cmluZyBzZW5kZXJIb3N0QW5kUG9ydDsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWNlaXZlckhvc3RBbmRQb3J0OwotICBwcm90ZWN0ZWQgU3RyaW5nIG1lc3NhZ2UgPSAiIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBodHRwSGVhZGVycyA9ICIiOwotICBwcm90ZWN0ZWQgaW50IGJvbTsKLSAgcHJvdGVjdGVkIFN0cmluZyBlbmNvZGluZyA9ICIiOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc01pbWVDb250ZW50ID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBNaW1lUGFydHMgbWltZVBhcnRzID0gbmV3IE1pbWVQYXJ0c0ltcGwoKTsKLQotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEVtcHR5IGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeUltcGwoKQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I2dldElkKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuaWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNzZXRJZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRDb252ZXJzYXRpb25JZCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnZlcnNhdGlvbklkKCkKLSAgewotICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbklkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nIGNvbnZlcnNhdGlvbklkKQotICB7Ci0gICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbklkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjZ2V0VGltZXN0YW1wKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGltZXN0YW1wKCkKLSAgewotICAgIHJldHVybiB0aGlzLnRpbWVzdGFtcDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldFRpbWVzdGFtcChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lc3RhbXAoU3RyaW5nIHRpbWVzdGFtcCkKLSAgewotICAgIHRoaXMudGltZXN0YW1wID0gdGltZXN0YW1wOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldFR5cGUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRTZW5kZXJIb3N0QW5kUG9ydCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlbmRlckhvc3RBbmRQb3J0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnNlbmRlckhvc3RBbmRQb3J0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0U2VuZGVySG9zdEFuZFBvcnQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VuZGVySG9zdEFuZFBvcnQoU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0KQotICB7Ci0gICAgdGhpcy5zZW5kZXJIb3N0QW5kUG9ydCA9IHNlbmRlckhvc3RBbmRQb3J0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlY2VpdmVySG9zdEFuZFBvcnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVjZWl2ZXJIb3N0QW5kUG9ydDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldFJlY2VpdmVySG9zdEFuZFBvcnQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChTdHJpbmcgcmVjZWl2ZXJIb3N0QW5kUG9ydCkKLSAgewotICAgIHRoaXMucmVjZWl2ZXJIb3N0QW5kUG9ydCA9IHJlY2VpdmVySG9zdEFuZFBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRNZXNzYWdlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgCWlmICghdGhpcy5pc01pbWVDb250ZW50KQotICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7Ci0gIAllbHNlCi0gIAl7Ci0gIAkgICBpZiAodGhpcy5taW1lUGFydHMuZ2V0Um9vdFBhcnQoKSA9PSBudWxsKSByZXR1cm4gIiI7Ci0gIAkgICBlbHNlIHJldHVybiB0aGlzLm1pbWVQYXJ0cy5nZXRSb290UGFydCgpLmdldENvbnRlbnQoKTsKLSAgCX0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldE1lc3NhZ2UoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNzZXRFbmNvZGluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgZW5jb2RpbmcpCi0gIHsKLSAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjZ2V0Qk9NKCkKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Qk9NKCkKLSAgewotICAgIHJldHVybiBib207Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjc2V0Qk9NKGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEJPTShpbnQgYm9tKQotICB7Ci0gICAgdGhpcy5ib20gPSBib207Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRIVFRQSGVhZGVycygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhUVFBIZWFkZXJzKCkKLSAgewotICAgIHJldHVybiB0aGlzLmh0dHBIZWFkZXJzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0SFRUUEhlYWRlcnMoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SFRUUEhlYWRlcnMoU3RyaW5nIGh0dHBIZWFkZXJzKQotICB7Ci0gICAgdGhpcy5odHRwSGVhZGVycyA9IGh0dHBIZWFkZXJzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWVzc2FnZUVudHJ5I2dldEVsZW1lbnRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbGVtZW50TG9jYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjc2V0RWxlbWVudExvY2F0aW9uKG9yZy53c2kueG1sLmRvbS5FbGVtZW50TG9jYXRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50TG9jYXRpb24oRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbikKLSAgewotICAgIHRoaXMuZWxlbWVudExvY2F0aW9uID0gZWxlbWVudExvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiB0b1hNTFN0cmluZyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTE9HKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEFERDogTmVlZCB0byBhZGQgd2F5IHRvIGluZGljYXRlIFhNTCBzY2hlbWEgdHlwZSBmb3IgbG9nRW50cnkKLSAgICAvLyBBZGQgbG9nIGVudHJ5Ci0gICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiAiKTsKLSAgICBwdy5wcmludCgKLSAgICAgICJ4c2k6dHlwZT1cImh0dHBNZXNzYWdlRW50cnlcIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9JRF9VQyArICI9XCIiICsgaWQgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9DT05WRVJTQVRJT05fSUQgKyAiPVwiIiArIGNvbnZlcnNhdGlvbklkICsgIlwiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiIiArIHR5cGUgKyAiXCIgIik7Ci0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAgKyAiPVwiIiArIHRpbWVzdGFtcCArICJcIj4iKTsKLQotICAgIGlmIChpc01pbWVDb250ZW50KCkpCi0gICAgewotICAgICAgICAvLyBBZGQgbWVzc2FnZSBjb250ZW50IHdpdGggYXR0YWNobWVudHMgZWxlbWVudAotICAgICAgICBwdy5wcmludCgiPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlRfV0lUSF9BVFRBQ0hNRU5UUyk7Ci0gICAgICAgIGlmIChib20gIT0gMCkKLSAgICAgICAgICBwdy5wcmludCgiICIgKyBXU0lDb25zdGFudHMuQVRUUl9CT00gKyAiPVwiIiArIGJvbSArICJcIiIpOwotICAgICAgICBwdy5wcmludCgiPiIpOwotCi0gICAgICAgIENvbGxlY3Rpb24gcGFydExpc3QgPSBtaW1lUGFydHMuZ2V0UGFydHMoKTsKLSAgICAgICAgaWYgKCFwYXJ0TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgIAlJdGVyYXRvciBpTWltZVBhcnRzID0gcGFydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgCXdoaWxlIChpTWltZVBhcnRzLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgCSAgTWltZVBhcnQgbWltZVBhcnQgPSAoTWltZVBhcnQpaU1pbWVQYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAJICBwdy5wcmludChtaW1lUGFydC50b1hNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBZGQgZW5kIG1lc3NhZ2UgZWxlbWVudAotICAgICAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlRfV0lUSF9BVFRBQ0hNRU5UUyArICI+Iik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBBZGQgbWVzc2FnZSBjb250ZW50IGVsZW1lbnQKLSAgICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVCk7Ci0gICAgICBpZiAoYm9tICE9IDApCi0gICAgICAgIHB3LnByaW50KCIgIiArIFdTSUNvbnN0YW50cy5BVFRSX0JPTSArICI9XCIiICsgYm9tICsgIlwiIik7Ci0gICAgICBwdy5wcmludCgiPiIpOwotCi0gICAgICAvLyBBZGQgZW5jb2RlZCBtZXNzYWdlCi0gICAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKG1lc3NhZ2UpKTsKLSAgICAgIAotICAgICAgLy8gQWRkIGVuZCBtZXNzYWdlIGVsZW1lbnQKLSAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVCArICI+Iik7Ci0gICAgfQotCi0gICAgLy8gQWRkIHNlbmRlcklQUG9ydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICI8IgotICAgICAgICArIG5zTmFtZQotICAgICAgICArIFdTSUNvbnN0YW50cy5FTEVNX1NFTkRFUl9IT1NUX0FORF9QT1JUCi0gICAgICAgICsgIj4iCi0gICAgICAgICsgc2VuZGVySG9zdEFuZFBvcnQKLSAgICAgICAgKyAiPC8iCi0gICAgICAgICsgbnNOYW1lCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQKLSAgICAgICAgKyAiPiIpOwotCi0gICAgLy8gQWRkIHJlY2VpdmVySVAgZWxlbWVudAotICAgIHB3LnByaW50bG4oCi0gICAgICAiPCIKLSAgICAgICAgKyBuc05hbWUKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUCi0gICAgICAgICsgIj4iCi0gICAgICAgICsgcmVjZWl2ZXJIb3N0QW5kUG9ydAotICAgICAgICArICI8LyIKLSAgICAgICAgKyBuc05hbWUKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9SRUNFSVZFUl9IT1NUX0FORF9QT1JUCi0gICAgICAgICsgIj4iKTsKLQotICAgIC8vIEFkZCBIVFRQSGVhZGVycyBlbGVtZW50Ci0gICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTICsgIj4iKTsKLQotICAgIC8vIEFERDogRG9lcyB0aGlzIHN0cmluZyBuZWVkIHRvIGJlIFhNTCBlbmNvZGVkPwotICAgIC8vIEFkZCBIVFRQIGhlYWRlcnMKLSAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKGh0dHBIZWFkZXJzKSk7Ci0KLSAgICAvLyBFbmQgSFRUUEhlYWRlcnMgZWxlbWVudAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0hUVFBfSEVBREVSUyArICI+Iik7Ci0KLSAgICAvLyBFbmQgbG9nIGVudHJ5Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIC8vIFJldHVybiBzdHJpbmcKLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNpc01pbWVDb250ZW50KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTWltZUNvbnRlbnQoKQotICB7Ci0gICAgcmV0dXJuIGlzTWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjc2V0TWltZUNvbnRlbnQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWltZUNvbnRlbnQoYm9vbGVhbiBpc01pbWVDb250ZW50KQotICB7Ci0gICAgdGhpcy5pc01pbWVDb250ZW50ID0gaXNNaW1lQ29udGVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNnZXRNSU1FUGFydHMoKQotICAgKi8KLSAgcHVibGljIE1pbWVQYXJ0cyBnZXRNaW1lUGFydHMoKQotICB7Ci0gICAgcmV0dXJuIG1pbWVQYXJ0czsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNzZXRNaW1lUGFydHMoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWltZVBhcnRzKE1pbWVQYXJ0cyBtaW1lUGFydHMpCi0gIHsKLSAgICB0aGlzLm1pbWVQYXJ0cyA9IG1pbWVQYXJ0czsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NaW1lUGFydEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWU3ZGZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLQotLyoqCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBNaW1lUGFydEltcGwgaW1wbGVtZW50cyBNaW1lUGFydCAKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgbWltZUNvbnRlbnQ7Ci0gIHByaXZhdGUgU3RyaW5nIG1pbWVIZWFkZXJzOwotICBwcml2YXRlIFN0cmluZ1tdIGJvdW5kYXJ5U3RyaW5ncyA9IG5ldyBTdHJpbmdbMF07Ci0gIAotICBwdWJsaWMgTWltZVBhcnRJbXBsICgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnQjZ2V0Q29udGVudCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRlbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NaW1lUGFydCNzZXRDb250ZW50KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRlbnQoU3RyaW5nIG1pbWVDb250ZW50KQotICB7Ci0gIAl0aGlzLm1pbWVDb250ZW50ID0gbWltZUNvbnRlbnQ7Ci0gIH0KLQotICAvKioKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQjZ2V0SGVhZGVycygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhlYWRlcnMoKQotICB7Ci0gIAlyZXR1cm4gdGhpcy5taW1lSGVhZGVyczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0I3NldEhlYWRlcnMoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SGVhZGVycyhTdHJpbmcgbWltZUhlYWRlcnMpCi0gIHsKLSAgCXRoaXMubWltZUhlYWRlcnMgPSBtaW1lSGVhZGVyczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0I2dldEJvdW5kYXJ5U3RyaW5ncygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0Qm91bmRhcnlTdHJpbmdzKCkKLSAgewotICAJcmV0dXJuIHRoaXMuYm91bmRhcnlTdHJpbmdzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnQjc2V0Qm91bmRhcnlTdHJpbmdzKFN0cmluZ1tdKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Qm91bmRhcnlTdHJpbmdzKFN0cmluZ1tdIGJvdW5kYXJ5U3RyaW5ncykKLSAgewotICAJdGhpcy5ib3VuZGFyeVN0cmluZ3MgPSBib3VuZGFyeVN0cmluZ3M7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIHRvWE1MU3RyaW5nKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9MT0cpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQWRkIG1pbWVQYXJ0IGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfUEFSVCAgKyAiPiIpOwotICAgIAotICAgIC8vIEFkZCBib3VuZGFyeSBzdHJpbmcgZWxlbWVudAotICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJvdW5kYXJ5U3RyaW5ncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORyArICI+Iik7Ci0gICAgICAgIHB3LnByaW50KGJvdW5kYXJ5U3RyaW5nc1tpXSk7Ci0gICAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORyArICI+Iik7Ci0gICAgfQotICAgCi0gICAgLy8gQWRkIG1pbWVIZWFkZXJzIGVsZW1lbnQKLSAgICBwdy5wcmludCgiPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMgKyAiPiIpOwotICAgIHB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcobWltZUhlYWRlcnMpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0hFQURFUlMgKyAiPiIpOwotCi0gICAgLy8gQWRkIGVuY29kZWQgY29udGVudAotICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfQ09OVEVOVCArICI+Iik7Ci0gICAgaWYgKChtaW1lQ29udGVudC5pbmRleE9mKCI8IikgIT0gLTEpICB8fCAKLSAgICAgICAgKG1pbWVDb250ZW50LmluZGV4T2YoIj4iKSAhPSAtMSkgIHx8IAotCQkobWltZUNvbnRlbnQuaW5kZXhPZigiXCIiKSAhPSAtMSkgfHwKLQkJKG1pbWVDb250ZW50LmluZGV4T2YoIlwnIikgIT0gLTEpKQotICAgIAlwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKG1pbWVDb250ZW50KSk7Ci0gICAgZWxzZQotICAgICAgICBwdy5wcmludChnZXRDb250ZW50KCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfQ09OVEVOVCArICI+Iik7Ci0gCi0gICAgLy8gQWRkIGVuZCBtZXNzYWdlIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NSU1FX1BBUlQgKyAiPiIpOwotCi0gICAgLy8gUmV0dXJuIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0c0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0c0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMzOTJjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NaW1lUGFydHNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLQotLyoqCi0gKiBNaW1lUGFydHNJbXBsIGNsYXNzLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiAobGF1em9uZEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTWltZVBhcnRzSW1wbCBpbXBsZW1lbnRzIE1pbWVQYXJ0cwotewotCQotICBwcm90ZWN0ZWQgTWltZVBhcnQgcm9vdFBhcnQ7Ci0gIHByb3RlY3RlZCBDb2xsZWN0aW9uIG1pbWVQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICBwdWJsaWMgTWltZVBhcnRzSW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0cyNnZXRSb290UGFydCgpCi0gICAqLwotICBwdWJsaWMgTWltZVBhcnQgZ2V0Um9vdFBhcnQoKQotICB7Ci0JcmV0dXJuIHJvb3RQYXJ0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnRzI3NldFJvb3RQYXJ0KE1pbWVQYXJ0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Um9vdFBhcnQoTWltZVBhcnQgcm9vdFBhcnQpCi0gIHsKLSAgCXRoaXMucm9vdFBhcnQgPSByb290UGFydDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0cyNjb3VudCgpCi0gICAqLwotICBwdWJsaWMgaW50IGNvdW50KCkKLSAgewotCXJldHVybiBtaW1lUGFydHMuc2l6ZSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnRzI2FkZFBhcnQoTWltZVBhcnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJ0KE1pbWVQYXJ0IHBhcnQpCi0gIHsKLSAgCWlmIChwYXJ0ICE9IG51bGwpCi0gIAkgIG1pbWVQYXJ0cy5hZGQocGFydCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NaW1lUGFydHMjZ2V0UGFydHMoKQotICAgKi8KLSAgcHVibGljIENvbGxlY3Rpb24gZ2V0UGFydHMoKQotICB7Ci0gIAlyZXR1cm4gbWltZVBhcnRzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL0NodW5rZWREYXRhLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL0NodW5rZWREYXRhLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YjFhMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9DaHVua2VkRGF0YS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yOwotCi0vKioKLSAqIFRoaXMgY2xhc3Mgd2lsbCBwcm9jZXNzIGNodW5rZWQgZGF0YS4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIENodW5rZWREYXRhCi17Ci0gIHByb3RlY3RlZCBib29sZWFuIG1vcmVDaHVua2VkRGF0YSA9IGZhbHNlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGNodW5rZWREYXRhID0gIiI7Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHNvY2tldEhhbmRsZXIgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgQ2h1bmtlZERhdGEgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIENodW5rZWREYXRhKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBDaHVua2VkRGF0YSBvYmplY3QuCi0gICAqIEBwYXJhbSBzb2NrZXRIYW5kbGVyIHNvY2tldCBoYW5kbGVyLgotICAgKiBAcGFyYW0gbW9yZUNodW5rZWREYXRhIGNodW5rZWQgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBDaHVua2VkRGF0YShTb2NrZXRIYW5kbGVyIHNvY2tldEhhbmRsZXIsIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhKQotICB7Ci0gICAgdGhpcy5zb2NrZXRIYW5kbGVyID0gc29ja2V0SGFuZGxlcjsKLSAgICB0aGlzLm1vcmVDaHVua2VkRGF0YSA9IG1vcmVDaHVua2VkRGF0YTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgQ2h1bmtlZERhdGEgb2JqZWN0LgotICAgKiBAcGFyYW0gc29ja2V0SGFuZGxlciBzb2NrZXQgaGFuZGxlci4KLSAgICogQHBhcmFtIGNodW5rZWREYXRhIGNodW5rZWQgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBDaHVua2VkRGF0YShTb2NrZXRIYW5kbGVyIHNvY2tldEhhbmRsZXIsIFN0cmluZyBjaHVua2VkRGF0YSkKLSAgewotICAgIHRoaXMuc29ja2V0SGFuZGxlciA9IHNvY2tldEhhbmRsZXI7Ci0gICAgdGhpcy5jaHVua2VkRGF0YSA9IGNodW5rZWREYXRhOwotICAgIHRoaXMubW9yZUNodW5rZWREYXRhID0gY2hlY2tEYXRhKGNodW5rZWREYXRhKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdGhlIGNodW5rZWQgZGF0YSB0byB0aGUgYnVmZmVyLgotICAgKiBAcGFyYW0gY2h1bmtlZERhdGEgY2h1bmtlZCBkYXRhLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRGF0YShTdHJpbmcgY2h1bmtlZERhdGEpCi0gIHsKLSAgICB0aGlzLmNodW5rZWREYXRhICs9IGNodW5rZWREYXRhOwotICAgIHRoaXMubW9yZUNodW5rZWREYXRhID0gY2hlY2tEYXRhKGNodW5rZWREYXRhKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZGF0YSBidWZmZXIuCi0gICAqIEByZXR1cm4gIGRhdGEgYnVmZmVyLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREYXRhKCkKLSAgewotICAgIHJldHVybiB0aGlzLmNodW5rZWREYXRhOwotICB9Ci0KLSAgLyoqCi0gICAqIENsZWFyIGRhdGEgYnVmZmVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgY2xlYXJEYXRhKCkKLSAgewotICAgIHRoaXMuY2h1bmtlZERhdGEgPSAiIjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbW9yZSBjaHVua2VkIGRhdGEuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBtb3JlIGNodW5rZWQgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTW9yZUNodW5rZWREYXRhKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1vcmVDaHVua2VkRGF0YTsKLSAgfQotCi0gIC8qKgotICAgKiBEZWNvZGUgYW5kIGFkZCBkYXRhIHRvIHRoZSBidWZmZXIuCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyIGEgU3RyaW5nQnVmZmVyIG9iamVjdC4KLSAgICogQHJldHVybiB0cnVlIGlmIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGJ1ZmZlci4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRlY29kZUFuZEFkZERhdGFUb0J1ZmZlcihTdHJpbmdCdWZmZXIgbWVzc2FnZUJ1ZmZlcikKLSAgewotICAgIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhID0gZmFsc2U7Ci0gICAgaWYgKCF0aGlzLm1vcmVDaHVua2VkRGF0YSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKCJkZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIiLCAiY2h1bmtlZERhdGE6ICIgKyBjaHVua2VkRGF0YSk7Ci0KLSAgICAgIG1vcmVDaHVua2VkRGF0YSA9IGRlY29kZURhdGEoY2h1bmtlZERhdGEsIG1lc3NhZ2VCdWZmZXIpOwotICAgIH0KLQotICAgIHJldHVybiBtb3JlQ2h1bmtlZERhdGE7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgZGF0YS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjaGVja0RhdGEoU3RyaW5nIGNodW5rZWREYXRhKQotICB7Ci0gICAgYm9vbGVhbiBtb3JlQ2h1bmtlZERhdGEgPSBmYWxzZTsKLSAgICAvLyBMb29rIGZvciBbQ1JMRl1bMF1bQ1JMRl0gaW4gdGhlIGNodW5rZWQgZGF0YSAgICAgIAotICAgIGlmIChjaHVua2VkRGF0YS5pbmRleE9mKFNvY2tldEhhbmRsZXIuQ1JMRiArICIwIiArIFNvY2tldEhhbmRsZXIuQ1JMRikgIT0gLTEpCi0gICAgewotICAgICAgbW9yZUNodW5rZWREYXRhID0gZmFsc2U7Ci0KLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoCi0gICAgICAgICJjaGVja0RhdGEiLAotICAgICAgICAiQ2h1bmsgY29udGFpbnMgW0NSTEZdWzBdW0NSTEZdLCBzbyB0aGVyZSBpcyBubyBtb3JlIGRhdGEuIik7Ci0gICAgfQotCi0gICAgLy8gTG9vayBmb3IgWzBdW0NSTEZdIGF0IHN0YXJ0IG9mIGNodW5rZWQgZGF0YSAgICAgIAotICAgIGVsc2UgaWYgKGNodW5rZWREYXRhLnN0YXJ0c1dpdGgoIjAiICsgU29ja2V0SGFuZGxlci5DUkxGKSkKLSAgICB7Ci0gICAgICBtb3JlQ2h1bmtlZERhdGEgPSBmYWxzZTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImNoZWNrRGF0YSIsCi0gICAgICAgICJDaHVuayBkYXRhIHN0YXJ0cyB3aXRoIFswXVtDUkxGXSwgc28gdGhlcmUgaXMgbm8gbW9yZSBkYXRhLiIpOwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSBzdGVwIHRocm91Z2ggaXQgdG8gc2VlIGlmIHdlIGhhdmUgYWxsIG9mIHRoZSBkYXRhCi0gICAgZWxzZQotICAgIHsKLSAgICAgIG1vcmVDaHVua2VkRGF0YSA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vcmVDaHVua2VkRGF0YTsKLSAgfQotCi0gIC8qKgotICAgKiBEZWNvZGUgY2h1bmtlZCBkYXRhLgotICAgKiAKLSAgICogRGF0YSBmb3JtYXQ6Ci0gICAqIDxwcmU+Ci0gICAqICAgW0NodW5rIFNpemVdW0NSTEZdW0RhdGEgQ2h1bmtdW0NSTEZdW0NodW5rIFNpemVdW0NSTEZdW0RhdGEgQ2h1bmtdW0NSTEZdLi4uWzBdW0NSTEZdW09wdGlvbmFsIEZvb3Rlcl1bQ1JMRl0KLSAgICogPC9wcmU+Ci0gICAqIAotICAgKiBAcGFyYW0gY2h1bmtlZERhdGEKLSAgICogQHBhcmFtIG1lc3NhZ2VMb2dnaW5nQnVmZmVyCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gZGVjb2RlRGF0YShTdHJpbmcgY2h1bmtlZERhdGEsIFN0cmluZ0J1ZmZlciBtZXNzYWdlQnVmZmVyKQotICB7Ci0gICAgYm9vbGVhbiBlbmRPZkRhdGEgPSBmYWxzZTsKLSAgICBpbnQgbmV4dEluZGV4ID0gMDsKLSAgICBpbnQgcHJldkluZGV4ID0gMDsKLSAgICBpbnQgY2h1bmtTaXplID0gMDsKLQotICAgIFN0cmluZyBuZXh0Q2h1bmtEYXRhID0gbnVsbDsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCBjaHVuayBvZiBkYXRhCi0gICAgd2hpbGUgKCEoZW5kT2ZEYXRhKQotICAgICAgJiYgKG5leHRJbmRleCA8IGNodW5rZWREYXRhLmxlbmd0aCgpKQotICAgICAgJiYgKG5leHRJbmRleCA9IGNodW5rZWREYXRhLmluZGV4T2YoU29ja2V0SGFuZGxlci5DUkxGLCBwcmV2SW5kZXgpKSAhPSAtMSkKLSAgICB7Ci0gICAgICAvLyBHZXQgdGhlIGRhdGEgbGVuZ3RoIHdoaWNoIGlzIHJpZ2h0IGFmdGVyIHRoaXMKLSAgICAgIFN0cmluZyBoZXhDaHVua2VkU2l6ZSA9IGNodW5rZWREYXRhLnN1YnN0cmluZyhwcmV2SW5kZXgsIG5leHRJbmRleCk7Ci0KLSAgICAgIC8vIERlY29kZSBsZW5ndGgKLSAgICAgIGNodW5rU2l6ZSA9IEludGVnZXIuZGVjb2RlKCIweCIgKyBoZXhDaHVua2VkU2l6ZSkuaW50VmFsdWUoKTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygiZGVjb2RlRGF0YSIsICJjaHVua2VkU2l6ZTogIiArIGNodW5rU2l6ZSk7Ci0KLSAgICAgIC8vIElmIHNpemUgaXMgemVybywgdGhlbiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIHRoZSBjaHVua2VkIGRhdGEKLSAgICAgIGlmIChjaHVua1NpemUgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgZW5kT2ZEYXRhID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbGwgb2YgdGhlIGRhdGEgdGhlbiBzdG9wCi0gICAgICBlbHNlIGlmIChuZXh0SW5kZXggKyAyICsgY2h1bmtTaXplID4gY2h1bmtlZERhdGEubGVuZ3RoKCkpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG5leHRDaHVua0RhdGEgPQotICAgICAgICAgIGNodW5rZWREYXRhLnN1YnN0cmluZyhuZXh0SW5kZXggKyAyLCBuZXh0SW5kZXggKyAyICsgY2h1bmtTaXplKTsKLQotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoImRlY29kZURhdGEiLCAibmV4dENodW5rRGF0YTogIiArIG5leHRDaHVua0RhdGEpOwotCi0gICAgICAgIC8vIEdldCBtZXNzYWdlIGJhc2VkIG9uIGxlbmd0aAotICAgICAgICBpZiAobWVzc2FnZUJ1ZmZlciAhPSBudWxsKQotICAgICAgICAgIG1lc3NhZ2VCdWZmZXIuYXBwZW5kKG5leHRDaHVua0RhdGEpOwotICAgICAgfQotCi0gICAgICAvLyBQb2ludCBhdCB0aGUgbmV4dCBjaHVuayBzaXplCi0gICAgICBwcmV2SW5kZXggPSBuZXh0SW5kZXggKyAyICsgY2h1bmtTaXplICsgMjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW5kT2ZEYXRhOwotICB9Ci0KLSAgLyoqCi0gICAqIERlYnVnLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGRlYnVnKFN0cmluZyBtZXRob2QsIFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgdGhpcy5zb2NrZXRIYW5kbGVyLmRlYnVnKCJDaHVua2VkRGF0YSIsIG1ldGhvZCwgbWVzc2FnZSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Db25uZWN0aW9uTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvQ29ubmVjdGlvbkxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OGNlOWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Db25uZWN0aW9uTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIGZvciByZWNlaXZpbmcgY29ubmVjdGlvbiBldmVudHMuCi0gKiAKLSAqIEBhdXRob3IgU2VyZ2V5IFN1aG9ydWNoa2luCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbm5lY3Rpb25MaXN0ZW5lcgotewotICAvKioKLSAgICogSW52b2tlZCB3aGVuIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgotICAgKiBAcGFyYW0gY29ubmVjdGlvbiBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoU29ja2V0Q29ubmVjdGlvbiBjb25uZWN0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTWVzc2FnZUVudHJ5UXVldWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTWVzc2FnZUVudHJ5UXVldWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDljYzA0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL01lc3NhZ2VFbnRyeVF1ZXVlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHRoZSBxdWV1ZSB0aGF0IGlzIHVzZWQgdG8gd3JpdGUgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWVzc2FnZXMKLSAqIHRvIHRoZSBsb2cgZmlsZSBpbiB0aGUgY29ycmVjdCBvcmRlci4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlRW50cnlRdWV1ZQotewotICAvKioKLSAgICogUmVxdWVzdCB0eXBlIG1lc3NhZ2UgZW50cnkgcXVldWUuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIHJlcXVlc3RMaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBSZXNwb25zZSB0eXBlIG1lc3NhZ2UgZW50cnkgcXVldWUuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIHJlc3BvbnNlTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogTW9uaXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBNb25pdG9yIG1vbml0b3IgPSBudWxsOwotCi0gIC8qKgotICAgKiBMb2cgZmlsZS4KLSAgICovCi0gIHByb3RlY3RlZCBMb2cgbG9nID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIHdyaXRlci4KLSAgICovCi0gIHByb3RlY3RlZCBMb2dXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKLQotICAvKioKLSAgICogTGlzdCBsb2NrLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsaXN0TG9jayA9ICJsaXN0TG9jayI7Ci0KLSAgLyoqCi0gICAqIE1lc3NhZ2UgSUQgd2hpY2ggaXMgaW5jcmVtZW50ZWQgd2hlbiBhIG5ldyBsb2cgZW50cnkgaXMgYWRkZWQgdG8gdGhlIGxvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBtZXNzYWdlSWQgPSAxOwotCi0gIC8qKgotICAgKiBDcmVhdGUgbWVzc2FnZSBlbnRyeSBxdWV1ZS4KLSAgICogQHBhcmFtIG1vbml0b3IgYSBtb25pdG9yLgotICAgKiBAcGFyYW0gbG9nIHRoZSBsb2cuCi0gICAqIEBwYXJhbSBsb2dXcml0ZXIgYSBsb2cgd3JpdGVyLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeVF1ZXVlKE1vbml0b3IgbW9uaXRvciwgTG9nIGxvZywgTG9nV3JpdGVyIGxvZ1dyaXRlcikKLSAgewotICAgIC8vIFNhdmUgaW5wdXQgcmVmZXJlbmNlcwotICAgIHRoaXMubW9uaXRvciA9IG1vbml0b3I7Ci0gICAgdGhpcy5sb2cgPSBsb2c7Ci0gICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGxvZyBlbnRyeSB0byBxdWV1ZS4KLSAgICogQHBhcmFtIG1lc3NhZ2VFbnRyeSBhIG1lc3NhZ2UgZW50cnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlzIHRoZXJlIGlzIGEgcHJvYmxlbSBhZGRpbmcgdGhlIGxvZyAKLSAgICogICAgICAgICBlbnRyeSB0byB0aGUgcXVldWUuCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgYWRkTWVzc2FnZUVudHJ5KE1lc3NhZ2VFbnRyeSBtZXNzYWdlRW50cnkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3luY2hyb25pemVkIChsaXN0TG9jaykKLSAgICB7Ci0gICAgICAvLyBJZiB0aGlzIGlzIGEgcmVxdWVzdCB0eXBlIG9mIG1lc3NhZ2UgZW50cnksIHRoZW4gYWRkIHRvIHJlcXVlc3QgbGlzdAotICAgICAgaWYgKG1lc3NhZ2VFbnRyeS5nZXRUeXBlKCkuZXF1YWxzKE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpKQotICAgICAgewotICAgICAgICByZXF1ZXN0TGlzdC5hZGQobWVzc2FnZUVudHJ5KTsKLSAgICAgIH0KLQotICAgICAgLy8gT3RoZXJ3aXNlIHRoaXMgaXMgYSByZXNwb25zZSB0eXBlIG9mIG1lc3NhZ2UgZW50cnkKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzcG9uc2VMaXN0LmFkZChtZXNzYWdlRW50cnkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRlbGwgdGhlIGxvZyBlbnRyeSB3cml0ZXIgdGhyZWFkIHRvIHJ1bgotICAgIHdyaXRlRnJvbVF1ZXVlKCk7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIGFueSBsb2cgZW50cmllcyBuZWVkIHRvIGJlIHdyaXR0ZW4uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlzIHRoZXJlIGlzIGEgcHJvYmxlbSBhZGRpbmcgbG9nIGVudHJpZXMuCi0gIAotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlRnJvbVF1ZXVlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgTWVzc2FnZUVudHJ5IHJlcXVlc3RNZXNzYWdlRW50cnkgPSBudWxsOwotICAgIE1lc3NhZ2VFbnRyeSByZXNwb25zZU1lc3NhZ2VFbnRyeSA9IG51bGw7Ci0gICAgYm9vbGVhbiByZXNwb25zZUZvdW5kID0gZmFsc2U7Ci0KLSAgICAvLyBDcmVhdGUgYXJyYXkgdGhhdCB3aWxsIGNvbnRhaW4gbGlzdCBvZiBpbmRleCB0byByZW1vdmUgZnJvbSByZXF1ZXN0IGxpc3QKLSAgICBpbnRbXSByZXF1ZXN0SW5kZXhMaXN0ID0gbmV3IGludFtyZXF1ZXN0TGlzdC5zaXplKCldOwotICAgIGludCByZXFJbmRleENvdW50ID0gMDsKLQotICAgIHN5bmNocm9uaXplZCAobGlzdExvY2spCi0gICAgewotICAgICAgLy8gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhlIHJlcXVlc3QgcXVldWUsCi0gICAgICAvLyB0aGVuIHRyeSB0byBtYXRjaCB0aGVtIHdpdGggZW50cmllcyBpbiB0aGUgcmVzcG9uc2UgcXVldWUKLSAgICAgIGZvciAoaW50IHJlcUluZGV4ID0gMDsgcmVxSW5kZXggPCByZXF1ZXN0TGlzdC5zaXplKCk7IHJlcUluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCByZXF1ZXN0IGxvZyBlbnRyeQotICAgICAgICByZXF1ZXN0TWVzc2FnZUVudHJ5ID0gKE1lc3NhZ2VFbnRyeSkgcmVxdWVzdExpc3QuZWxlbWVudEF0KHJlcUluZGV4KTsKLQotICAgICAgICAvLyBDaGVjayBlYWNoIHJlc3BvbnNlIGxvZyBlbnRyeSB0byBzZWUgaWYgdGhlIGNvbnZlcnNhdGlvbklkIG1hdGNoZXMKLSAgICAgICAgcmVzcG9uc2VGb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCByZXNwSW5kZXggPSAwOwotICAgICAgICAgIHJlc3BJbmRleCA8IHJlc3BvbnNlTGlzdC5zaXplKCkgJiYgIXJlc3BvbnNlRm91bmQ7Ci0gICAgICAgICAgcmVzcEluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgcmVzcG9uc2UgbG9nIGVudHJ5Ci0gICAgICAgICAgcmVzcG9uc2VNZXNzYWdlRW50cnkgPQotICAgICAgICAgICAgKE1lc3NhZ2VFbnRyeSkgcmVzcG9uc2VMaXN0LmVsZW1lbnRBdChyZXNwSW5kZXgpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGhhdmUgdGhlIHNhbWUgY29udmVyc2F0aW9uSWQsCi0gICAgICAgICAgLy8gdGhlbiB3cml0ZSB0aGVtIG91dCB0byB0aGUgbG9nIGZpbGUKLSAgICAgICAgICBpZiAocmVxdWVzdE1lc3NhZ2VFbnRyeQotICAgICAgICAgICAgLmdldENvbnZlcnNhdGlvbklkKCkKLSAgICAgICAgICAgIC5lcXVhbHMocmVzcG9uc2VNZXNzYWdlRW50cnkuZ2V0Q29udmVyc2F0aW9uSWQoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzcG9uc2VGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIFNldCB0aGUgaWQgZm9yIHRoZSBsb2cgZW50cmllcwotICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2VFbnRyeS5zZXRJZChnZXROZXh0TWVzc2FnZUlkKCkpOwotICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlRW50cnkuc2V0SWQoZ2V0TmV4dE1lc3NhZ2VJZCgpKTsKLQotICAgICAgICAgICAgLy8gV3JpdGUgb3V0IHJlcXVlc3QgYW5kIHRoZW4gcmVzcG9uc2UKLSAgICAgICAgICAgIC8vPT09PSBTUyBzdGFydCA6IHdoYXQgdGhpcyBsaW5lIGlzIHVzZWQgZm9yPz8/IC0gY2F1c2VzIG1lbW9yeSBsZWFrLCBhcyBubyByZW1vdmVMb2dFbnRyeSBpcyBjYWxsZWQgPT09PQotICAgICAgICAgICAgLy8gICAgICAgICAgICBsb2cuYWRkTG9nRW50cnkocmVxdWVzdE1lc3NhZ2VFbnRyeSk7Ci0gICAgICAgICAgICAvLz09PT0gU1MgZW5kID09PQotICAgICAgICAgICAgU3RyaW5nUmVhZGVyIHJlcXVlc3RSZWFkZXIgPQotICAgICAgICAgICAgICBuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlRW50cnkudG9YTUxTdHJpbmcoIiIpKTsKLSAgICAgICAgICAgIGxvZ1dyaXRlci53cml0ZShyZXF1ZXN0UmVhZGVyKTsKLQotICAgICAgICAgICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgICAgICAgICBwcmludE1lc3NhZ2UocmVxdWVzdE1lc3NhZ2VFbnRyeSk7Ci0KLSAgICAgICAgICAgIC8vIFdyaXRlIG91dCByZXNwb25zZQotICAgICAgICAgICAgLy89PT09IFNTIHN0YXJ0IDogd2hhdCB0aGlzIGxpbmUgaXMgdXNlZCBmb3I/Pz8gLSBjYXVzZXMgbWVtb3J5IGxlYWssIGFzIG5vIHJlbW92ZUxvZ0VudHJ5IGlzIGNhbGxlZCA9PT09Ci0gICAgICAgICAgICAvLyAgICAgICAgICAgIGxvZy5hZGRMb2dFbnRyeShyZXNwb25zZU1lc3NhZ2VFbnRyeSk7Ci0gICAgICAgICAgICAvLz09PT0gU1MgZW5kID09PQotICAgICAgICAgICAgU3RyaW5nUmVhZGVyIHJlc3BvbnNlUmVhZGVyID0KLSAgICAgICAgICAgICAgbmV3IFN0cmluZ1JlYWRlcihyZXNwb25zZU1lc3NhZ2VFbnRyeS50b1hNTFN0cmluZygiIikpOwotICAgICAgICAgICAgbG9nV3JpdGVyLndyaXRlKHJlc3BvbnNlUmVhZGVyKTsKLQotICAgICAgICAgICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgICAgICAgICBwcmludE1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlRW50cnkpOwotCi0gICAgICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBsaXN0IHNvIHRoYXQgaXQgY2FuIGJlIHJlbW92ZWQgbGF0ZXIKLSAgICAgICAgICAgIHJlcXVlc3RJbmRleExpc3RbcmVxSW5kZXhDb3VudCsrXSA9IHJlcUluZGV4OwotCi0gICAgICAgICAgICAvLyBSZW1vdmUgbG9nIGVudHJ5IGZyb20gcmVzcG9uc2UgbGlzdAotICAgICAgICAgICAgcmVzcG9uc2VMaXN0LnJlbW92ZShyZXNwSW5kZXgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBSZW1vdmUgcmVxdWVzdHMgdGhhdCB3ZXJlIHdyaXR0ZW4gb3V0Ci0gICAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgcmVxSW5kZXhDb3VudDsgY291bnQrKykKLSAgICAgICAgcmVxdWVzdExpc3QucmVtb3ZlKHJlcXVlc3RJbmRleExpc3RbY291bnRdKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuZXh0IG1lc3NhZ2UgaWRlbnRpZmllci4KLSAgICogQHJldHVybiB0aGUgbmV4dCBtZXNzYWdlIGlkZW50aWZpZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgc3luY2hyb25pemVkIFN0cmluZyBnZXROZXh0TWVzc2FnZUlkKCkKLSAgewotICAgIHJldHVybiBTdHJpbmcudmFsdWVPZihtZXNzYWdlSWQrKyk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBtZXNzYWdlLgotICAgKiBAcGFyYW0gbWVzc2FnZUVudHJ5IGEgbWVzc2FnZSBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHByaW50TWVzc2FnZShNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5KQotICB7Ci0gICAgLy8gRGlzcGxheSBtZXNzYWdlCi0gICAgbW9uaXRvci5wcmludE1lc3NhZ2UoCi0gICAgICAibG9nMDEiLAotICAgICAgbWVzc2FnZUVudHJ5LmdldElkKCkKLSAgICAgICAgKyAiLCAiCi0gICAgICAgICsgbWVzc2FnZUVudHJ5LmdldFR5cGUoKQotICAgICAgICArICIsICIKLSAgICAgICAgKyBtZXNzYWdlRW50cnkuZ2V0U2VuZGVySG9zdEFuZFBvcnQoKSwKLSAgICAgICJMb2cgbWVzc2FnZSBlbnRyeSAtICBJRDogIgotICAgICAgICArIG1lc3NhZ2VFbnRyeS5nZXRJZCgpCi0gICAgICAgICsgIiwgVHlwZTogIgotICAgICAgICArIG1lc3NhZ2VFbnRyeS5nZXRUeXBlKCkKLSAgICAgICAgKyAiLCBTZW5kZXI6ICIKLSAgICAgICAgKyBtZXNzYWdlRW50cnkuZ2V0U2VuZGVySG9zdEFuZFBvcnQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Nb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMzFkZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Nb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lGaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLQotLyoqCi0gKiBNZXNzYWdlIE1vbml0b3IuCi0gKgotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyLnVzLmlibS5jb20pCi0gKi8KLQotcHVibGljIGNsYXNzIE1vbml0b3IKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFU09VUkNFX0JVTkRMRV9OQU1FID0KLSAgICAib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuTW9uaXRvciI7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVVNBR0VfTUVTU0FHRSA9Ci0gICAgIlVzYWdlOiBNb25pdG9yIC1jb25maWcgPGNvbmZpZ0ZpbGVuYW1lPiI7Ci0KLSAgLyoqCi0gICAqIENvbnZlcnNhdGlvbiBJRC4KLSAgICovCi0gIHByaXZhdGUgaW50IGNvbnZlcnNhdGlvbklkID0gMTsKLQotICBwcml2YXRlIExvZyBsb2cgPSBudWxsOwotICBwcml2YXRlIExvZ1dyaXRlciBsb2dXcml0ZXIgPSBudWxsOwotICBwcml2YXRlIE1vbml0b3JDb25maWcgbW9uaXRvckNvbmZpZyA9IG51bGw7Ci0KLSAgLyoqCi0gICogVG9vbCBpbmZvcm1hdGlvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9OQU1FID0gIk1vbml0b3IiOwotCi0gIHByb3RlY3RlZCBUb29sSW5mbyB0b29sSW5mbyA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIFZlY3RvciBsaXN0ZW5lckxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgcHJvdGVjdGVkIE1lc3NhZ2VFbnRyeVF1ZXVlIG1lc3NhZ2VFbnRyeVF1ZXVlID0gbnVsbDsKLQotICAvKioKLSAgICogTWVzc2FnZSBtb25pdG9yLgotICAgKiBAcGFyYW0gYXJncyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gY3JlYXRpbmcgYSBNb25pdG9yIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBNb25pdG9yKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGxpc3QKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbmV3IE1lc3NhZ2VMaXN0KFJFU09VUkNFX0JVTkRMRV9OQU1FKTsKLQotICAgIC8vIFRvb2wgaW5mb3JtYXRpb24KLSAgICB0b29sSW5mbyA9IG5ldyBUb29sSW5mbyhUT09MX05BTUUpOwotCi0gICAgLy8gQ3JlYXRlIGRvY3VtZW50IGZhY3RvcnkKLSAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyBvYmplY3QKLSAgICBtb25pdG9yQ29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld01vbml0b3JDb25maWcoKTsKLSAgICBtb25pdG9yQ29uZmlnLmluaXQodGhpcy5tZXNzYWdlTGlzdCk7Ci0KLSAgICAvLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgbW9uaXRvckNvbmZpZy5wYXJzZUFyZ3MoYXJncyk7Ci0KLSAgICBTdHJpbmcgbG9nTG9jYXRpb24gPSBtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCk7Ci0gICAgaWYgKGxvZ0xvY2F0aW9uLmluZGV4T2YoV1NJQ29uc3RhbnRzLlBBVEhfU0VQQVJBVE9SKSA+IC0xKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzExIiwKLSAgICAgICAgICBtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCksCi0gICAgICAgICAgIlRoZSBsb2cgZmlsZSBsb2NhdGlvbiB2YWx1ZSBjYW5ub3QgY29udGFpbiB0aGUgcGFzcyBzZXBhcmF0b3IgY2hhcmFjdGVyOiIpKTsKLSAgICB9Ci0KLSAgICBGaWxlIGZpbGUgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBmaWxlIG9iamVjdCBmb3IgbG9nIGZpbGUKLSAgICAgIGZpbGUgPSBuZXcgRmlsZShtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJjb25maWcwNyIsICJDb3VsZCBub3QgZ2V0IGxvZyBmaWxlIGxvY2F0aW9uLiIpLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBJZiByZXBsYWNlIGZsYWcgaXMgZmFsc2UgYW5kIGZpbGUgZXhpc3RzLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmIChmaWxlLmV4aXN0cygpICYmICFtb25pdG9yQ29uZmlnLmdldFJlcGxhY2VMb2coKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwOCIsCi0gICAgICAgICAgbW9uaXRvckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpLAotICAgICAgICAgICJMb2cgZmlsZSBhbHJlYWR5IGV4aXN0czoiKSk7Ci0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIG91dHB1dCBmaWxlCi0gICAgICBsb2cgPSBkb2N1bWVudEZhY3RvcnkubmV3TG9nKCk7Ci0KLSAgICAgIC8vIFNldCBzdHlsZSBzaGVldCBzdHJpbmcKLSAgICAgIGxvZy5zZXRTdHlsZVNoZWV0U3RyaW5nKAotICAgICAgICBtb25pdG9yQ29uZmlnLmdldEFkZFN0eWxlU2hlZXQoKS5nZXRTdHlsZVNoZWV0U3RyaW5nKCkpOwotCi0gICAgICAvLyBHZXQgbG9nIHdyaXRlcgotICAgICAgbG9nV3JpdGVyID0gZG9jdW1lbnRGYWN0b3J5Lm5ld0xvZ1dyaXRlcigpOwotICAgICAgbG9nV3JpdGVyLnNldFdyaXRlcihtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCkpOwotCi0gICAgICAvLyBXcml0ZSBzdGFydCBvZiBsb2cgZmlsZQotICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldFN0YXJ0WE1MU3RyaW5nKCIiKSkpOwotCi0gICAgICAvLyBXcml0ZSBtb25pdG9yIHRvb2wgaW5mb3JtYXRpb24KLSAgICAgIGxvZ1dyaXRlci53cml0ZShuZXcgU3RyaW5nUmVhZGVyKHRvWE1MU3RyaW5nKCIiKSkpOwotCi0gICAgICAvLyBDcmVhdGUgbG9nIGVudHJ5IHF1ZXVlCi0gICAgICBtZXNzYWdlRW50cnlRdWV1ZSA9IG5ldyBNZXNzYWdlRW50cnlRdWV1ZSh0aGlzLCBsb2csIGxvZ1dyaXRlcik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgImVycm9yMDMiLAotICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGxvZyBvciBsb2cgd3JpdGVyLiIpLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgbWFuSW5UaGVNaWRkbGUgc2V0dGluZ3MKLSAgICBNYW5JblRoZU1pZGRsZSBtYW5JblRoZU1pZGRsZSA9IG1vbml0b3JDb25maWcuZ2V0TWFuSW5UaGVNaWRkbGUoKTsKLQotICAgIC8vIEdldCBsaXN0IG9mIHJlZGlyZWN0cwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbWFuSW5UaGVNaWRkbGUuZ2V0UmVkaXJlY3RMaXN0KCkuaXRlcmF0b3IoKTsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCByZWRpcmVjdAotICAgIFJlZGlyZWN0IHJlZGlyZWN0OwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgcmVkaXJlY3QKLSAgICAgIHJlZGlyZWN0ID0gKFJlZGlyZWN0KSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgIC8vIENyZWF0ZSBzZXJ2ZXIgc29ja2V0IHNvY2tldCBsaXN0ZW5lcgotICAgICAgbGlzdGVuZXJMaXN0LmFkZChuZXcgU2VydmVyU29ja2V0TGlzdGVuZXIodGhpcywgcmVkaXJlY3QpKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgc2h1dGRvd24gaG9vawotICAgIFJ1bnRpbWUuZ2V0UnVudGltZSgpLmFkZFNodXRkb3duSG9vayhuZXcgU2h1dGRvd25Ib29rKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuZCBzdGFydCBjb25zb2xlCi0gICAgQ29uc29sZSBjb25zb2xlID0gbmV3IENvbnNvbGUoKTsKLSAgICBjb25zb2xlLnN0YXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKiBAcmV0dXJuIHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgZ2V0TW9uaXRvckNvbmZpZygpCi0gIHsKLSAgICByZXR1cm4gbW9uaXRvckNvbmZpZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGxvZyBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGxvZyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgTG9nIGdldExvZygpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2c7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBsb2cgZW50cnkgcXVldWUgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBsb2cgZW50cnkgcXVldWUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeVF1ZXVlIGdldE1lc3NhZ2VFbnRyeVF1ZXVlKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1lc3NhZ2VFbnRyeVF1ZXVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlcm1pbmF0ZSB0aGUgbW9uaXRvci4KLSAgICovCi0gIHZvaWQgZXhpdE1vbml0b3IoKQotICB7Ci0gICAgcHJpbnRNZXNzYWdlKCJzdG9wcGluZzAxIiwgIlN0b3BwaW5nIHRoZSBtb25pdG9yLi4uIik7Ci0gICAgU3lzdGVtLmV4aXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogU3RvcCB0aGUgbW9uaXRvciBiZWNhdXNlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZC4KLSAgICovCi0gIHZvaWQgZXhpdE1vbml0b3IoRXhjZXB0aW9uIGUpCi0gIHsKLSAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2UKLSAgICBwcmludE1lc3NhZ2UoCi0gICAgICAic3RvcHBpbmcwMiIsCi0gICAgICAiU3RvcHBpbmcgbW9uaXRvciBiZWNhdXNlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZC4iKTsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVYQ0VQVElPTjogIiArIGUudG9TdHJpbmcoKSk7Ci0gICAgaWYgKHRoaXMubW9uaXRvckNvbmZpZy5nZXRWZXJib3NlT3B0aW9uKCkpCi0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgLy8gRXhpdCBtb25pdG9yCi0gICAgZXhpdE1vbml0b3IoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdG9wIHRoZSBtb25pdG9yLgotICAgKi8KLSAgdm9pZCBzdG9wTW9uaXRvcigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgbGlzdCBvZiBsaXN0ZW5lcnMgdG8gc3RvcAotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0ZW5lckxpc3QuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgKChTZXJ2ZXJTb2NrZXRMaXN0ZW5lcikgaXRlcmF0b3IubmV4dCgpKS5zaHV0ZG93bigpOwotICAgICAgfQotCi0gICAgICAvLyBXYWl0IGZvciB0aGUgY2xlYW51cCB0aW1lb3V0IHNlY29uZHMKLSAgICAgIFRocmVhZC5zbGVlcChtb25pdG9yQ29uZmlnLmdldFRpbWVvdXQoKSAqIDEwMDApOwotCi0gICAgICAvLyBXcml0ZSBlbmQgb2YgbG9nIGZpbGUKLSAgICAgIGlmIChsb2dXcml0ZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldEVuZFhNTFN0cmluZygiIikpKTsKLQotICAgICAgICBsb2dXcml0ZXIuY2xvc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgZXhlY3B0aW9uIGJlIGhhbmRsZWQ/Ci0gICAgfQotCi0gICAgcHJpbnRNZXNzYWdlKCJzdG9wcGVkMDEiLCAiTW9uaXRvciBzdG9wcGVkLiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbW1hbmQgbGluZSBpbnRlcmZhY2UuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgTW9uaXRvciBtb25pdG9yID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpCi0gICAgICB7Ci0gICAgICAgIHN0YXRpY1ByaW50TWVzc2FnZSgidXNhZ2UwMSIsIFVTQUdFX01FU1NBR0UpOwotICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb25maWciKSkKLSAgICAgIHsKLSAgICAgICAgc3RhdGljUHJpbnRNZXNzYWdlKCJ1c2FnZTAxIiwgVVNBR0VfTUVTU0FHRSk7Ci0gICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgfQotCi0gICAgICAvLyBSdW4gdGhlIG1vbml0b3IKLSAgICAgIG1vbml0b3IgPSBuZXcgTW9uaXRvcihhcmdzKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgYm9vbGVhbiBwcmludFN0YWNrVHJhY2UgPSB0cnVlOwotICAgICAgU3RyaW5nIG1lc3NhZ2VJRDsKLSAgICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZTsKLSAgICAgIFN0cmluZyBtZXNzYWdlRGF0YTsKLQotICAgICAgaWYgKChlIGluc3RhbmNlb2YgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKQotICAgICAgICB8fCAoZSBpbnN0YW5jZW9mIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbikpCi0gICAgICB7Ci0gICAgICAgIHByaW50U3RhY2tUcmFjZSA9IGZhbHNlOwotICAgICAgICBtZXNzYWdlSUQgPSAiZXJyb3IwMSI7Ci0gICAgICAgIGRlZmF1bHRNZXNzYWdlID0gIk1vbml0b3IgRXJyb3I6IjsKLSAgICAgICAgbWVzc2FnZURhdGEgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwcmludFN0YWNrVHJhY2UgPSB0cnVlOwotICAgICAgICBtZXNzYWdlSUQgPSAiZXJyb3IwMiI7Ci0gICAgICAgIGRlZmF1bHRNZXNzYWdlID0gIk1vbml0b3IgU3RvcHBlZCBCeSBFeGNlcHRpb246IjsKLSAgICAgICAgbWVzc2FnZURhdGEgPSBlLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtb25pdG9yICE9IG51bGwpCi0gICAgICAgIG1vbml0b3IucHJpbnRNZXNzYWdlKG1lc3NhZ2VJRCwgbWVzc2FnZURhdGEsIGRlZmF1bHRNZXNzYWdlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgTW9uaXRvci5zdGF0aWNQcmludE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotCi0gICAgICBpZiAocHJpbnRTdGFja1RyYWNlKQotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgICAvLyBFeGl0Ci0gICAgICBpZiAobW9uaXRvciAhPSBudWxsKQotICAgICAgICBtb25pdG9yLmV4aXRNb25pdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIFN5c3RlbS5leGl0KDIpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5IGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwcmludE1lc3NhZ2UoU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcHJpbnRNZXNzYWdlKGtleSwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGEgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSBtZXNzYWdlIGRhdGEuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBtZXNzYWdlTGlzdC5wcmludE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNQcmludE1lc3NhZ2UoU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgc3RhdGljUHJpbnRNZXNzYWdlKGtleSwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSBtZXNzYWdlIGRhdGEuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljUHJpbnRNZXNzYWdlKAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIE1lc3NhZ2VMaXN0LnByaW50TWVzc2FnZSgKLSAgICAgIFJFU09VUkNFX0JVTkRMRV9OQU1FLAotICAgICAga2V5LAotICAgICAgbWVzc2FnZURhdGEsCi0gICAgICBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuZXh0IGNvbnZlcnNhdGlvbiBpZGVudGlmaWVyLgotICAgKiBAcmV0dXJuIHRoZSBuZXh0IGNvbnZlcnNhdGlvbiBpZGVudGlmaWVyLgotICAgKi8KLSAgc3luY2hyb25pemVkIGludCBnZXROZXh0Q29udmVyc2F0aW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnZlcnNhdGlvbklkKys7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgLy8gU3RhcnQKLSAgICBwdy5wcmludCh0b29sSW5mby5nZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICAvLyBDb25maWcKLSAgICBwdy5wcmludCgKLSAgICAgIG1vbml0b3JDb25maWcudG9YTUxTdHJpbmcoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHKSk7Ci0KLSAgICAvLyBFbmQKLSAgICBwdy5wcmludGxuKHRvb2xJbmZvLmdldEVuZFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTaHV0ZG93biBob29rLgotICAgKi8KLSAgY2xhc3MgU2h1dGRvd25Ib29rIGV4dGVuZHMgVGhyZWFkCi0gIHsKLSAgICAvKioKLSAgICAgKiBSdW4gc2h1dGRvd24gcHJvY2VkdXJlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgc3RvcE1vbml0b3IoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUnVuIGNvbW1hbmQgZnJvbSBjb25zb2xlLgotICAgKi8KLSAgY2xhc3MgQ29uc29sZSBleHRlbmRzIFRocmVhZAotICB7Ci0gICAgLyoqCi0gICAgICogUHJvbXB0IHVzZXIgYW5kIHdhaXQgZm9yIGlucHV0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBleGl0IHN0cmluZwotICAgICAgU3RyaW5nIGV4aXRTdHJpbmcgPSBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJleGl0MDEiLCAiZXhpdCIpOwotCi0gICAgICAvLyBEaXNwbGF5IG9wdGlvbnMgYW5kIGhvdyB0byBzdG9wIGFwcGxpY2F0aW9uCi0gICAgICBUZXN0VXRpbHMucHJpbnRUb29sSW5mbyh0b29sSW5mbyk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50KG1vbml0b3JDb25maWcudG9TdHJpbmcoKSk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAiKTsKLSAgICAgIHByaW50TWVzc2FnZSgKLSAgICAgICAgInN0YXJ0MDEiLAotICAgICAgICAiVGhlICIKLSAgICAgICAgICArIHRvb2xJbmZvLmdldE5hbWUoKQotICAgICAgICAgICsgIiB0b29sIGlzIHJlYWR5IHRvIGludGVyY2VwdCBhbmQgbG9nIHdlYiBzZXJ2aWNlIG1lc3NhZ2VzLiIpOwotICAgICAgcHJpbnRNZXNzYWdlKAotICAgICAgICAic3RhcnQwMiIsCi0gICAgICAgICJUeXBlIFwiZXhpdFwiIHRvIHN0b3AgdGhlICIgKyB0b29sSW5mby5nZXROYW1lKCkgKyAiLiIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIik7Ci0KLSAgICAgIC8vIEdldCB0aGUgdGltZSB0byBzdG9wIGFjY2VwdGluZyBjb25uZWN0aW9ucwotICAgICAgbG9uZyBzdG9wVGltZSA9Ci0gICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgKG1vbml0b3JDb25maWcuZ2V0TG9nRHVyYXRpb24oKSAqIDEwMDApOwotICAgICAgLy8gU1MKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIEdldCBzdGRpbiBhcyBhIGJ1ZmZlcmVkIHJlYWRlcgotICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPQotICAgICAgICAgIG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBpbnB1dCBmcm9tIGNvbnNvbGUKLSAgICAgICAgYm9vbGVhbiBleGl0ID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlICgoIWV4aXQpICYmIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSA8IHN0b3BUaW1lKSkKLSAgICAgICAgeyAvLyBTUwotICAgICAgICAgIC8vIFNsZWVwCi0gICAgICAgICAgVGhyZWFkLnNsZWVwKDUwMCk7Ci0KLSAgICAgICAgICAvLyBDaGVjayBmb3IgdXNlciBpbnB1dAotICAgICAgICAgIGlmIChyZWFkZXIucmVhZHkoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRMaW5lKCkuZXF1YWxzSWdub3JlQ2FzZShleGl0U3RyaW5nKSkKLSAgICAgICAgICAgICAgZXhpdCA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgYmUgaGFuZGxlZD8KLSAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGUudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEV4aXQKLSAgICAgIGV4aXRNb25pdG9yKCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL01vbml0b3IucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGQ2MDZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSMKLSMgTW9uaXRvciBtZXNzYWdlIHJlc291cmNlIGJ1bmRsZS4KLSMKLXVzYWdlMDE9VXNhZ2U6IE1vbml0b3IgLWNvbmZpZyA8Y29uZmlnRmlsZW5hbWU+Ci1zdG9wcGVkMDE9TW9uaXRvciBzdG9wcGVkLgotZXJyb3IwMT1Nb25pdG9yIEVycm9yOgotZXJyb3IwMj1Nb25pdG9yIFN0b3BwZWQgQnkgRXhjZXB0aW9uOiAKLWVycm9yMDM9Q291bGQgbm90IGNyZWF0ZSBsb2cgb3IgbG9nIHdyaXRlci4KLWVycm9yMDQ9TW9uaXRvciBjYW5ub3QgY29ubmVjdCB0byBhIHJlZGlyZWN0IGhvc3Q6Ci1zdG9wcGluZzAxPVN0b3BwaW5nIHRoZSBtb25pdG9yLi4uCi1zdG9wcGluZzAyPVN0b3BwaW5nIG1vbml0b3IgYmVjYXVzZSBhbiBleGNlcHRpb24gb2NjdXJyZWQuCi1sb2cwMT1Mb2cgbWVzc2FnZSBlbnRyeSBbSUQsIFR5cGUsIFNlbmRlcl06Ci1zdGFydDAxPVRoZSBNb25pdG9yIHRvb2wgaXMgcmVhZHkgdG8gaW50ZXJjZXB0IGFuZCBsb2cgd2ViIHNlcnZpY2UgbWVzc2FnZXMuCi1zdGFydDAyPVR5cGUgImV4aXQiIHRvIHN0b3AgdGhlIE1vbml0b3IuCi1leGl0MDE9ZXhpdAotY29uZmlnMDE9VGhlIHNwZWNpZmllZCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZDoKLWNvbmZpZzAyPU1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBub3QgZm91bmQuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzAzPUNvdWxkIG5vdCByZWFkIG1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwND1FbGVtZW50IG11c3QgY29udGFpbiBhbiBpbnRlZ2VyIHZhbHVlLiAgRWxlbWVudCBuYW1lOgotY29uZmlnMDU9TW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgZGlkIG5vdCBjb250YWluIGFueSByZWRpcmVjdCBzdGF0ZW1lbnRzLgotY29uZmlnMDY9TW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgZGlkIG5vdCBjb250YWluIHRoZSBsb2cgZmlsZSBVUkkuCi1jb25maWcwNz1Db3VsZCBub3QgZ2V0IGxvZyBmaWxlIGxvY2F0aW9uLgotY29uZmlnMDg9TG9nIGZpbGUgYWxyZWFkeSBleGlzdHMuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzA5PUVsZW1lbnQgaXMgbWlzc2luZy4gRWxlbWVudCBuYW1lOgotY29uZmlnMTA9UGFyYW1ldGVyIHZhbHVlIGNhbid0IGJlIG5lZ2F0aXZlLiBFbGVtZW50IG5hbWU6Ci1jb25maWcxMT1UaGUgbG9nIGZpbGUgbG9jYXRpb24gdmFsdWUgY2Fubm90IGNvbnRhaW4gdGhlIHBhc3Mgc2VwYXJhdG9yIGNoYXJhY3RlcjoKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9TZXJ2ZXJTb2NrZXRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9TZXJ2ZXJTb2NrZXRMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTE2YzhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU2VydmVyU29ja2V0TGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvcjsKLQotaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci0KLS8qKgotICogQSBzZXJ2ZXIgc29ja2V0IGxpc3RlbmVyLgotICoKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJTb2NrZXRMaXN0ZW5lcgotICBleHRlbmRzIFRocmVhZAotICBpbXBsZW1lbnRzIENvbm5lY3Rpb25MaXN0ZW5lciAvLyBTUwotewotICBwcm90ZWN0ZWQgTW9uaXRvciBtb25pdG9yID0gbnVsbDsKLSAgcHJvdGVjdGVkIFJlZGlyZWN0IHJlZGlyZWN0ID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgU2VydmVyU29ja2V0IHNlcnZlclNvY2tldCA9IG51bGw7Ci0gIHByb3RlY3RlZCBib29sZWFuIHN0b3BTZXJ2ZXJTb2NrZXQgPSBmYWxzZTsKLQotICBwcm90ZWN0ZWQgVmVjdG9yIGNvbm5lY3Rpb25MaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgc2VydmVyIHNvY2tldCBsaXN0ZW5lci4KLSAgICogQHBhcmFtIG1vbml0b3IgYSBNb25pdG9yIG9iamVjdC4KLSAgICogQHBhcmFtIHJlZGlyZWN0IGEgUmVkaXJlY3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFNlcnZlclNvY2tldExpc3RlbmVyKE1vbml0b3IgbW9uaXRvciwgUmVkaXJlY3QgcmVkaXJlY3QpCi0gIHsKLSAgICB0aGlzLm1vbml0b3IgPSBtb25pdG9yOwotICAgIHRoaXMucmVkaXJlY3QgPSByZWRpcmVjdDsKLQotICAgIC8vIFN0YXJ0IGxpc3RlbmluZwotICAgIHN0YXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgICogUnVuIHRoZSB0aHJlYWQgYW5kIGxpc3RlbiBmb3IgYSBjb25uZWN0aW9uIG9uIHRoZSBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIHNlcnZlciBzb2NrZXQKLSAgICAgIHNlcnZlclNvY2tldCA9Ci0gICAgICAgIG5ldyBTZXJ2ZXJTb2NrZXQoCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0TGlzdGVuUG9ydCgpLAotICAgICAgICAgIHJlZGlyZWN0LmdldE1heENvbm5lY3Rpb25zKCkpOwotICAgICAgLy8gU1MKLQotICAgICAgLy8gU2V0IHRpbWVvdXQgc28gdGhhdCBzZXJ2ZXIgc29ja2V0IHdpbGwgY29udGludWUgdG8gYWNjZXB0IGNvbm5lY3Rpb25zCi0gICAgICBzZXJ2ZXJTb2NrZXQuc2V0U29UaW1lb3V0KDApOwotCi0gICAgICAvLyBMaXN0ZW4gZm9yIGNvbm5lY3Rpb25zIHVudGlsIGludGVycnVwdGVkCi0gICAgICB3aGlsZSAoIXN0b3BTZXJ2ZXJTb2NrZXQpCi0gICAgICB7Ci0gICAgICAgIC8vIEFjY2VwdCBjb25uZWN0aW9ucwotICAgICAgICBTb2NrZXQgc29ja2V0ID0gc2VydmVyU29ja2V0LmFjY2VwdCgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgc29ja2V0IHdhcyBOT1Qgc3RvcHBlZCwgcHJvY2VzcyBjb25uZWN0aW9uCi0gICAgICAgIGlmICghc3RvcFNlcnZlclNvY2tldCkKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBuZXcgY29ubmVjdGlvbgotICAgICAgICAgIFNvY2tldENvbm5lY3Rpb24gc29ja2V0Q29ubmVjdGlvbiA9Ci0gICAgICAgICAgICBuZXcgU29ja2V0Q29ubmVjdGlvbih0aGlzLm1vbml0b3IsIHRoaXMucmVkaXJlY3QsIHNvY2tldCk7Ci0KLSAgICAgICAgICAvL3JlZ2lzdGVyIGFzIGEgbGlzdGVuZXIKLSAgICAgICAgICBzb2NrZXRDb25uZWN0aW9uLmFkZENvbm5lY3Rpb25MaXN0ZW5lcih0aGlzKTsgLy8gU1MKLQotICAgICAgICAgIC8vIEFkZCB0byBjb25uZWN0aW9uIGxpc3QKLSAgICAgICAgICBjb25uZWN0aW9uTGlzdC5hZGQoc29ja2V0Q29ubmVjdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiB3YXMgTk9UIGNhdXNlZCBieSBjbG9zaW5nIHRoZSBzb2NrZXQsIHRoZW4gc3RvcCBtb25pdG9yCi0gICAgICBpZiAoIWUuZ2V0TWVzc2FnZSgpLmVxdWFscygic29ja2V0IGNsb3NlZCIpKQotICAgICAgewotICAgICAgICBtb25pdG9yLmV4aXRNb25pdG9yKGUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTdG9wIGxpc3RlbmluZyBmb3IgYSBjb25uZWN0aW9uIG9uIHRoZSBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzaHV0ZG93bigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBTaHV0ZG93biBhbGwgYWN0aXZlIGNvbm5lY3Rpb25zCi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGNvbm5lY3Rpb25MaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAoKFNvY2tldENvbm5lY3Rpb24pIGl0ZXJhdG9yLm5leHQoKSkuc2h1dGRvd24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gVGVsbCB0aGUgc2VydmVyIHNvY2tldCBsaXN0ZW5pbmcgdGhyZWFkIHRvIHN0b3AKLSAgICAgIHRoaXMuc3RvcFNlcnZlclNvY2tldCA9IHRydWU7Ci0KLSAgICAgIC8vIFNldCB0aGUgc2VydmVyIHNvY2tldCB0aW1lb3V0IHRvIDEgbXMKLSAgICAgIHNlcnZlclNvY2tldC5zZXRTb1RpbWVvdXQoMSk7Ci0KLSAgICAgIC8vIENsb3NlIHRoZSBzZXJ2ZXIgc29ja2V0Ci0gICAgICBpZiAoc2VydmVyU29ja2V0ICE9IG51bGwpCi0gICAgICAgIHNlcnZlclNvY2tldC5jbG9zZSgpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICB9Ci0KLSAgLy8gPT09PSBTUyBzdGFydCA9PT09Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5Db25uZWN0aW9uTGlzdGVuZXIjY29ubmVjdGlvbkNsb3NlZCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFNvY2tldENvbm5lY3Rpb24gY29ubmVjdGlvbikKLSAgewotICAgIGNvbm5lY3Rpb25MaXN0LnJlbW92ZShjb25uZWN0aW9uKTsKLSAgfQotICAvLyA9PT09IFNTIGVuZCA9PT09Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL1NvY2tldENvbm5lY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0Q29ubmVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTJhMGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0Q29ubmVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yOwotCi1pbXBvcnQgamF2YS5uZXQuU29ja2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogQSBzb2NrZXQgY29ubmVjdGlvbi4KLSAqCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgU29ja2V0Q29ubmVjdGlvbiBleHRlbmRzIFRocmVhZAotewotICBwcm90ZWN0ZWQgTW9uaXRvciBtb25pdG9yOwotICBwcm90ZWN0ZWQgUmVkaXJlY3QgcmVkaXJlY3Q7Ci0gIHByb3RlY3RlZCBTb2NrZXQgaW5Tb2NrZXQ7Ci0gIHByb3RlY3RlZCBTb2NrZXQgb3V0U29ja2V0OwotCi0gIHByb3RlY3RlZCBTdHJpbmcgaHR0cFByb3h5SG9zdCA9IG51bGw7Ci0gIHByb3RlY3RlZCBpbnQgaHR0cFByb3h5UG9ydDsKLQotICBwcm90ZWN0ZWQgU29ja2V0SGFuZGxlciByZXF1ZXN0U29ja2V0SGFuZGxlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHJlc3BvbnNlU29ja2V0SGFuZGxlciA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBWZWN0b3IgbGlzdGVuZXJzID0gbmV3IFZlY3RvcigpOyAvLyBTUwotCi0gIC8qKgotICAgKiBDcmVhdGUgc29ja2V0IGNvbm5lY3Rpb24uCi0gICAqIEBwYXJhbSBtb25pdG9yICBhIE1vbml0b3Igb2JqZWN0LgotICAgKiBAcGFyYW0gcmVkaXJlY3QgYSBSZWRpcmVjdCBvYmplY3QuCi0gICAqIEBwYXJhbSBpblNvY2tldCBpbiBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgU29ja2V0Q29ubmVjdGlvbihNb25pdG9yIG1vbml0b3IsIFJlZGlyZWN0IHJlZGlyZWN0LCBTb2NrZXQgaW5Tb2NrZXQpCi0gIHsKLSAgICB0aGlzLm1vbml0b3IgPSBtb25pdG9yOwotICAgIHRoaXMucmVkaXJlY3QgPSByZWRpcmVjdDsKLSAgICB0aGlzLmluU29ja2V0ID0gaW5Tb2NrZXQ7Ci0KLSAgICAvLyBTdGFydCBwcm9jZXNzaW5nIHRoZSBjb25uZWN0aW9uCi0gICAgc3RhcnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHRoZSBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICAvLyBHZXQgdGhlIEhUVFAgcHJveHkgc2V0dGluZ3MgaWYgdGhlcmUgYXJlIGFueSBzZXQgKG5vdCB1c2VkIGN1cnJlbnRseSkKLSAgICBsb2FkSHR0cFByb3h5U2V0dGluZ3MoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIE9wZW4gdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlcgotICAgICAgdGhpcy5vdXRTb2NrZXQgPSBuZXcgU29ja2V0KHJlZGlyZWN0LmdldFRvSG9zdCgpLCByZWRpcmVjdC5nZXRUb1BvcnQoKSk7Ci0KLSAgICAgIC8vIFNldCB0aGUgcmVhZCB0aW1lb3V0IGZvciB0aGUgaW5wdXQgc29ja2V0Ci0gICAgICB0aGlzLmluU29ja2V0LnNldFNvVGltZW91dChyZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSAqIDEwMDApOwotCi0gICAgICAvLyBHZXQgdGhlIG5leHQgY29udmVyc2F0aW9uIElECi0gICAgICBpbnQgY29udmVyc2F0aW9uSWQgPSBtb25pdG9yLmdldE5leHRDb252ZXJzYXRpb25JZCgpOwotCi0gICAgICAvLyBDcmVhdGUgdGhlIHNvY2tldCBoYW5kbGVycyB3aGljaCBhcmUgdXNlZCB0byBzZW5kIHRoZSBkYXRhIGZyb20KLSAgICAgIC8vIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlcgotICAgICAgcmVxdWVzdFNvY2tldEhhbmRsZXIgPQotICAgICAgICBuZXcgU29ja2V0SGFuZGxlcigKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QsCi0gICAgICAgICAgY29udmVyc2F0aW9uSWQsCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0VG9Ib3N0KCksCi0gICAgICAgICAgdGhpcy5pblNvY2tldCwKLSAgICAgICAgICB0aGlzLm91dFNvY2tldCwKLSAgICAgICAgICByZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSk7Ci0gICAgICByZXNwb25zZVNvY2tldEhhbmRsZXIgPQotICAgICAgICBuZXcgU29ja2V0SGFuZGxlcigKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFLAotICAgICAgICAgIGNvbnZlcnNhdGlvbklkLAotICAgICAgICAgIHJlZGlyZWN0LmdldFRvSG9zdCgpLAotICAgICAgICAgIHRoaXMub3V0U29ja2V0LAotICAgICAgICAgIHRoaXMuaW5Tb2NrZXQsCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0UmVhZFRpbWVvdXRTZWNvbmRzKCkpOwotCi0gICAgICAvLyBUZWxsIGVhY2ggc29ja2V0SGFuZGxlciBhYm91dCB0aGUgb3RoZXIgb25lCi0gICAgICByZXF1ZXN0U29ja2V0SGFuZGxlci5zZXRQYWlyZWRTb2NrZXRIYW5kbGVyKHJlc3BvbnNlU29ja2V0SGFuZGxlcik7Ci0gICAgICByZXNwb25zZVNvY2tldEhhbmRsZXIuc2V0UGFpcmVkU29ja2V0SGFuZGxlcihyZXF1ZXN0U29ja2V0SGFuZGxlcik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIE1vbml0b3Iuc3RhdGljUHJpbnRNZXNzYWdlKAotICAgICAgICAiZXJyb3IwNCIsCi0gICAgICAgIHJlZGlyZWN0LmdldFRvSG9zdCgpLAotICAgICAgICAiTW9uaXRvciBjYW5ub3QgY29ubmVjdCB0byBhIHJlZGlyZWN0IGhvc3Q6Iik7Ci0KLSAgICAgIHNodXRkb3duKCk7Ci0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB0aGlzLmluU29ja2V0LmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIExvZyBtZXNzYWdlLgotICAgKiBAcGFyYW0gY29udmVyc2F0aW9uSUQgICAgICB0aGUgY292ZXJzYXRpb24gaWQuCi0gICAqIEBwYXJhbSBjb25uZWN0aW9uVHlwZSAgICAgIHRoZSBjb25uZWN0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSB0aW1lc3RhbXAgICAgICAgICAgIHRoZSB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSBzZW5kZXJIb3N0QW5kUG9ydCAgIHRoZSBzZW5kZXIgaG9zdCBhbmQgcG9ydC4KLSAgICogQHBhcmFtIHJlY2VpdmVySG9zdEFuZFBvcnQgdGhlIHJlY2VpdmVyIGhvc3QgYW5kIHBvcnQuCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyICAgICAgIHRoZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gYm9tICAgICAgICAgICAgICAgICB0aGUgQk9NLgotICAgKiBAcGFyYW0gZW5jb2RpbmcgICAgICAgICAgICB0aGUgZW5jb2RpbmcuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmICB0aGVyZSBpcyBhIHByb2JsZW0gbG9nZ2luZyBtZXNzYWdlLgotICAqLwotICBwdWJsaWMgdm9pZCBsb2dNZXNzYWdlKAotICAgIGludCBjb252ZXJzYXRpb25JRCwKLSAgICBTdHJpbmcgY29ubmVjdGlvblR5cGUsCi0gICAgU3RyaW5nIHRpbWVzdGFtcCwKLSAgICBTdHJpbmcgc2VuZGVySG9zdEFuZFBvcnQsCi0gICAgU3RyaW5nIHJlY2VpdmVySG9zdEFuZFBvcnQsCi0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXIsCi0gICAgaW50IGJvbSwKLSAgICBTdHJpbmcgZW5jb2RpbmcpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgbWVzc2FnZSBlbnRyeQotICAgIG1lc3NhZ2VFbnRyeSA9Ci0gICAgICBjcmVhdGVNZXNzYWdlRW50cnkoCi0gICAgICAgIGNvbnZlcnNhdGlvbklELAotICAgICAgICBjb25uZWN0aW9uVHlwZSwKLSAgICAgICAgdGltZXN0YW1wLAotICAgICAgICBzZW5kZXJIb3N0QW5kUG9ydCwKLSAgICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydCwKLSAgICAgICAgbWVzc2FnZUJ1ZmZlci50b1N0cmluZygpLAotICAgICAgICBib20sCi0gICAgICAgIGVuY29kaW5nKTsKLQotICAgIC8vIERFQlVHOgotICAgIC8vZGVidWcoImxvZ01lc3NhZ2UiLCAiIG1lc3NhZ2VFbnRyeTogIiArIG1lc3NhZ2VFbnRyeSk7Ci0KLSAgICAvLyBBZGQgZW50cnkgdG8gdGhlIHF1ZXVlCi0gICAgbW9uaXRvci5nZXRNZXNzYWdlRW50cnlRdWV1ZSgpLmFkZE1lc3NhZ2VFbnRyeShtZXNzYWdlRW50cnkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBlbnRyeSBmcm9tIGFsbCBvZiB0aGUgZGF0YSB0aGF0IHdhcyBnYXRoZXJlZC4KLSAgICovCi0gIHByaXZhdGUgTWVzc2FnZUVudHJ5IGNyZWF0ZU1lc3NhZ2VFbnRyeSgKLSAgICBpbnQgY29udmVyc2F0aW9uSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VUeXBlLAotICAgIFN0cmluZyB0aW1lc3RhbXAsCi0gICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LAotICAgIFN0cmluZyByZWNlaXZlckhvc3RBbmRQb3J0LAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIGludCBib20sCi0gICAgU3RyaW5nIGVuY29kaW5nKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBsb2cgZW50cnkgb2JqZWN0Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG1vbml0b3IuZ2V0TG9nKCkuY3JlYXRlTG9nRW50cnkoKTsKLQotICAgIC8vIFNldCBpbnB1dCBpbmZvcm1hdGlvbiBpbiBsb2cgZW50cnkKLSAgICAvLyBOT1RFOiAgVGhlIElEIGlzIHNldCBqdXN0IGJlZm9yZSB0aGUgbG9nIGVudHJ5IGlzIHdyaXR0ZW4gdG8gdGhlIGxvZyBmaWxlIGluIExvZ0VudHJ5UXVldWUKLSAgICAvL2xvZ0VudHJ5LnNldElkKGlkKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nLnZhbHVlT2YoY29udmVyc2F0aW9uSUQpKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0VHlwZShtZXNzYWdlVHlwZSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFRpbWVzdGFtcCh0aW1lc3RhbXApOwotICAgIG1lc3NhZ2VFbnRyeS5zZXRTZW5kZXJIb3N0QW5kUG9ydChzZW5kZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFJlY2VpdmVySG9zdEFuZFBvcnQocmVjZWl2ZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldEVuY29kaW5nKGVuY29kaW5nKTsKLQotICAgIC8vIEdldCBIVFRQIGhlYWRlcnMgZnJvbSBmdWxsIG1lc3NhZ2UKLSAgICBTdHJpbmcgaHR0cEhlYWRlcnMgPSBVdGlscy5nZXRIVFRQSGVhZGVycyhtZXNzYWdlKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0SFRUUEhlYWRlcnMoaHR0cEhlYWRlcnMpOwotCQotICAgaWYgKFV0aWxzLmlzTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoaHR0cEhlYWRlcnMpKQotICAgIHsKLSAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IFV0aWxzLnBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UobWVzc2FnZSwgaHR0cEhlYWRlcnMsIGVuY29kaW5nKTsKLSAgICAJaWYgKG1pbWVQYXJ0cyA9PSBudWxsKQotICAgIAl7Ci0gICAgCSAgLy8gcHJvYmxlbSBjcmVhdGluZyBNaW1lcGFydHMgLS0gdHJlYXQgaXQgYXMgc2ltcGxlIFNPQVAgbWVzc2FnZQotICAgIAkgIFN0cmluZyBjb250ZW50ID0gVXRpbHMuZ2V0Q29udGVudChtZXNzYWdlKTsKLSAgICAJICBtZXNzYWdlRW50cnkuc2V0TWVzc2FnZShjb250ZW50KTsKLSAgICAJICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQoZmFsc2UpOwotICAgIAl9Ci0gICAgCWVsc2UKLSAgICAJewotICAgICAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNaW1lUGFydHMobWltZVBhcnRzKTsKLSAgICAgICAgICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQodHJ1ZSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgbWVzc2FnZSBjb250ZW50Ci0gICAgICBTdHJpbmcgY29udGVudCA9IFV0aWxzLmdldENvbnRlbnQobWVzc2FnZSk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0TWVzc2FnZShjb250ZW50KTsKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNaW1lQ29udGVudChmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBCT00sIGlmIHRoZXJlIGlzIG9uZQotICAgIGlmIChib20gIT0gMCkKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRCT00oYm9tKTsKLQotICAgIHJldHVybiBtZXNzYWdlRW50cnk7Ci0gIH0KLQotICAvKioKLSAgICogTG9hZCBIVFRQIHByb3h5IHNldHRpbmdzLgotICAgKi8KLSAgcHVibGljIHZvaWQgbG9hZEh0dHBQcm94eVNldHRpbmdzKCkKLSAgewotICAgIC8vIEdldCB0aGUgSFRUUCBwcm94eSBob3N0IHNldHRpbmcKLSAgICB0aGlzLmh0dHBQcm94eUhvc3QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlIb3N0Iik7Ci0gICAgaWYgKHRoaXMuaHR0cFByb3h5SG9zdCAhPSBudWxsICYmIGh0dHBQcm94eUhvc3QuZXF1YWxzKCIiKSkKLSAgICAgIHRoaXMuaHR0cFByb3h5SG9zdCA9IG51bGw7Ci0KLSAgICAvLyBJZiB0aGVyZSB3YXMgYW4gSFRUUCBwcm94eSBob3N0IHNldHRpbmcsIHRoZW4gZ2V0IHRoZSBwb3J0Ci0gICAgaWYgKHRoaXMuaHR0cFByb3h5SG9zdCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwb3J0U3RyaW5nID0gU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5UG9ydCIpOwotCi0gICAgICAvLyBTZXQgZGVmYXVsdCB0byA4MAotICAgICAgaWYgKHBvcnRTdHJpbmcgPT0gbnVsbCB8fCBwb3J0U3RyaW5nLmVxdWFscygiIikpCi0gICAgICAgIHRoaXMuaHR0cFByb3h5UG9ydCA9IDgwOwotICAgICAgZWxzZQotICAgICAgICBodHRwUHJveHlQb3J0ID0gSW50ZWdlci5wYXJzZUludChwb3J0U3RyaW5nKTsKLSAgICB9Ci0gIH0KLQotICBNb25pdG9yIGdldE1vbml0b3IoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubW9uaXRvcjsKLSAgfQotCi0gIHN5bmNocm9uaXplZCB2b2lkIHdha2VVcCgpCi0gIHsKLSAgICBmaXJlQ29ubmVjdGlvbkNsb3NlZCgpOyAvLyBTUwotICAgIG5vdGlmeUFsbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNodXRkb3duLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2h1dGRvd24oKQotICB7Ci0gICAgaWYgKHRoaXMucmVxdWVzdFNvY2tldEhhbmRsZXIgIT0gbnVsbCkKLSAgICAgIHRoaXMucmVxdWVzdFNvY2tldEhhbmRsZXIuc2h1dGRvd24oKTsKLSAgICBpZiAodGhpcy5yZXNwb25zZVNvY2tldEhhbmRsZXIgIT0gbnVsbCkKLSAgICAgIHRoaXMucmVzcG9uc2VTb2NrZXRIYW5kbGVyLnNodXRkb3duKCk7Ci0gIH0KLQotICAvLyA9PT09IFNTIHN0YXJ0ID09PT0KLSAgLyoqCi0gICAqIEFkZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyLgotICAgKiBAcGFyYW0gbGlzdGVuZXIgZXZlbnQgbGlzdGVuZXIuCi0gICAqIEBzZWUgI3JlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkxpc3RlbmVyKENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikKLSAgewotICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotICB9Ci0gIC8qKgotICAgKiBSZW1vdmUgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lci4KLSAgICogQHBhcmFtIGxpc3RlbmVyIGV2ZW50IGxpc3RlbmVyLgotICAgKiBAc2VlICNhZGRDb25uZWN0aW9uTGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpCi0gIHsKLSAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLSAgfQotICAvKioKLSAgICogTm90aWZ5IGxpc3RlbmVycyBvbiBjb25uZWN0aW9uIGNsb3NlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGZpcmVDb25uZWN0aW9uQ2xvc2VkKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3RlbmVycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gKENvbm5lY3Rpb25MaXN0ZW5lcikgaS5uZXh0KCk7Ci0gICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwotICAgIH0KLSAgfQotICAvLyA9PT09IFNTIGVuZCA9PT09Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL1NvY2tldEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0SGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTM4YTI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIEJlYWNvbiBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IEluYy4gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEJlYWNvbklUIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnRlcnJ1cHRlZElPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogU29ja2V0IEhhbmRsZXIuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBTb2NrZXRIYW5kbGVyIGV4dGVuZHMgVGhyZWFkCi17Ci0gIHByb3RlY3RlZCBTb2NrZXRDb25uZWN0aW9uIHNvY2tldENvbm5lY3Rpb247Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHBhaXJlZFNvY2tldEhhbmRsZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgY29ubmVjdGlvblR5cGU7Ci0gIHByb3RlY3RlZCBpbnQgY29udmVyc2F0aW9uSUQ7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0SG9zdDsKLSAgcHJvdGVjdGVkIGludCByZWFkVGltZW91dFNlY29uZHM7Ci0KLSAgcHJvdGVjdGVkIFNvY2tldCBpblNvY2tldDsKLSAgcHJvdGVjdGVkIFNvY2tldCBvdXRTb2NrZXQ7Ci0gIHByb3RlY3RlZCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0gIHByb3RlY3RlZCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJib3NlID0gZmFsc2U7Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcmVhZFRpbWVkT3V0ID0gZmFsc2U7Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIHByaXZhdGUgU3RyaW5nIG1pbWVDaGFyc2V0ID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgeG1sRW5jb2RpbmcgPSBudWxsOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENSTEYgPSAiXHJcbiI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF8xMDBfQ09OVElOVUUgPQotICAgICIxMDAgQ29udGludWUiLnRvVXBwZXJDYXNlKCk7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENIVU5LRUQgPQotICAgICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIudG9VcHBlckNhc2UoKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hVTktFRF9XSVRIX1FVT1RFUyA9Ci0gICAgIlRyYW5zZmVyLUVuY29kaW5nOiBcImNodW5rZWRcIiIudG9VcHBlckNhc2UoKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVF9MRU5HVEggPQotICAgICJDb250ZW50LUxlbmd0aDoiLnRvVXBwZXJDYXNlKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBzb2NrZXQgaGFuZGxlci4KLSAgICogQHBhcmFtIHNvY2tldENvbm5lY3Rpb24gICBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICogQHBhcmFtIGNvbm5lY3Rpb25UeXBlICAgICBjb25uZWN0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBjb252ZXJzYXRpb25JRCAgICAgY29udmVyc2F0aW9uIGlkLgotICAgKiBAcGFyYW0gdGFyZ2V0SG9zdCAgICAgICAgIHRhcmdldCBob3N0LgotICAgKiBAcGFyYW0gaW5Tb2NrZXQgICAgICAgICAgIGluIHNvY2tldC4KLSAgICogQHBhcmFtIG91dFNvY2tldCAgICAgICAgICBvdXQgc29ja2V0LgotICAgKiBAcGFyYW0gcmVhZFRpbWVvdXRTZWNvbmRzIHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKi8KLSAgcHVibGljIFNvY2tldEhhbmRsZXIoCi0gICAgU29ja2V0Q29ubmVjdGlvbiBzb2NrZXRDb25uZWN0aW9uLAotICAgIFN0cmluZyBjb25uZWN0aW9uVHlwZSwKLSAgICBpbnQgY29udmVyc2F0aW9uSUQsCi0gICAgU3RyaW5nIHRhcmdldEhvc3QsCi0gICAgU29ja2V0IGluU29ja2V0LAotICAgIFNvY2tldCBvdXRTb2NrZXQsCi0gICAgaW50IHJlYWRUaW1lb3V0U2Vjb25kcykKLSAgewotICAgIHRoaXMuc29ja2V0Q29ubmVjdGlvbiA9IHNvY2tldENvbm5lY3Rpb247Ci0gICAgdGhpcy5jb25uZWN0aW9uVHlwZSA9IGNvbm5lY3Rpb25UeXBlOwotICAgIHRoaXMuY29udmVyc2F0aW9uSUQgPSBjb252ZXJzYXRpb25JRDsKLSAgICB0aGlzLnRhcmdldEhvc3QgPSB0YXJnZXRIb3N0OwotICAgIHRoaXMuaW5Tb2NrZXQgPSBpblNvY2tldDsKLSAgICB0aGlzLm91dFNvY2tldCA9IG91dFNvY2tldDsKLSAgICB0aGlzLnJlYWRUaW1lb3V0U2Vjb25kcyA9IHJlYWRUaW1lb3V0U2Vjb25kczsKLQotICAgIC8vIEFERDoKLSAgICB2ZXJib3NlID0KLSAgICAgIHNvY2tldENvbm5lY3Rpb24uZ2V0TW9uaXRvcigpLmdldE1vbml0b3JDb25maWcoKS5nZXRWZXJib3NlT3B0aW9uKCk7Ci0KLSAgICBzdGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBwYWlyZWQgc29ja2V0IGhhbmRsZXIuCi0gICAqIEBwYXJhbSBwYWlyZWRTb2NrZXRIYW5kbGVyIHBhaXJlZCBzb2NrZXQgaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhaXJlZFNvY2tldEhhbmRsZXIoU29ja2V0SGFuZGxlciBwYWlyZWRTb2NrZXRIYW5kbGVyKQotICB7Ci0gICAgdGhpcy5wYWlyZWRTb2NrZXRIYW5kbGVyID0gcGFpcmVkU29ja2V0SGFuZGxlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZW5kIHRoZSBkYXRhIGZyb20gdGhlIGlucHV0IHNvY2tldCB0byB0aGUgb3V0cHV0IHNvY2tldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBpbnQgcmVhZExlbjsKLSAgICBTdHJpbmcgcmVhZE1zZzsKLSAgICBNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgcmVhZCBidWZmZXIgICAgICAKLSAgICBieXRlW10gcmVhZEJ1ZmZlciA9IG5ldyBieXRlWzQwOTZdOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbXMKLSAgICAgIHRoaXMuaW5wdXRTdHJlYW0gPSB0aGlzLmluU29ja2V0LmdldElucHV0U3RyZWFtKCk7Ci0gICAgICB0aGlzLm91dHB1dFN0cmVhbSA9IHRoaXMub3V0U29ja2V0LmdldE91dHB1dFN0cmVhbSgpOwotCi0gICAgICAvLyBQcm9jZXNzIHdoaWxlIHRoZSBjb25uZWN0aW9uIGlzIGFjdGl2ZSAKLSAgICAgIC8vIChOT1RFOiB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gMSBtZXNzYWdlIHBlciBjb25uZWN0aW9uKQotICAgICAgYm9vbGVhbiBjb25uZWN0aW9uQWN0aXZlID0gdHJ1ZTsKLSAgICAgIHdoaWxlIChjb25uZWN0aW9uQWN0aXZlKQotICAgICAgewotICAgICAgICAvLyBSZXNldCBhbGwgZGF0YQotICAgICAgICByZWFkTGVuID0gMDsKLSAgICAgICAgbWVzc2FnZUNvbnRleHQgPSBuZXcgTWVzc2FnZUNvbnRleHQoKTsKLQotICAgICAgICAvLyBSZWFkIHVudGlsIG1lc3NhZ2UgaXMgY29tcGxldGUKLSAgICAgICAgYm9vbGVhbiBtZXNzYWdlQ29tcGxldGUgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKCFtZXNzYWdlQ29tcGxldGUpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiUmVhZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbS4iKTsKLQotICAgICAgICAgICAgLy8gUmVhZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbQotICAgICAgICAgICAgcmVhZExlbiA9IGlucHV0U3RyZWFtLnJlYWQocmVhZEJ1ZmZlciwgMCwgcmVhZEJ1ZmZlci5sZW5ndGgpOwotCi0gICAgICAgICAgICAvLyBSZXNldCByZWFkIHRpbWVvdXQgZmxhZwotICAgICAgICAgICAgcmVhZFRpbWVkT3V0ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIERFQlVHOgotICAgICAgICAgICAgZGVidWcoInJ1biIsICJyZWFkTGVuOiAiICsgcmVhZExlbik7Ci0KLSAgICAgICAgICAgIGlmIChyZWFkTGVuID09IC0xKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjb25uZWN0aW9uQWN0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIGRhdGEgd2FzIHJlYWQsIHRoZW4gY2hlY2sgZm9yIDEwMCBjb250aW51ZQotICAgICAgICAgICAgZWxzZSBpZiAocmVhZExlbiA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGRhdGEgdGhhdCB3YXMgcmVhZCwgdGhlbiBnZXQgdGhlIHRpbWVzdGFtcAotICAgICAgICAgICAgICBpZiAobWVzc2FnZUNvbnRleHQudGltZXN0YW1wID09IG51bGwpCi0gICAgICAgICAgICAgICAgbWVzc2FnZUNvbnRleHQudGltZXN0YW1wID0gVXRpbHMuZ2V0VGltZXN0YW1wKCk7Ci0KLSAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25UeXBlLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ5dGVbXSB0b0hvc3QgPQotICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgc29ja2V0Q29ubmVjdGlvbi5yZWRpcmVjdC5nZXRUb0hvc3QoKQotICAgICAgICAgICAgICAgICAgICAgICsgIjoiCi0gICAgICAgICAgICAgICAgICAgICAgKyBzb2NrZXRDb25uZWN0aW9uLnJlZGlyZWN0LmdldFRvUG9ydCgpKQotICAgICAgICAgICAgICAgICAgICAuZ2V0Qnl0ZXMoKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gbmV3IFN0cmluZyhyZWFkQnVmZmVyLCAwLCByZWFkTGVuKTsKLQotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IG1lc3NhZ2UuaW5kZXhPZihDUkxGICsgIkhvc3Q6ICIpOwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDg7Ci0gICAgICAgICAgICAgICAgICBpbnQgc2Vjb25kUGFydCA9IG1lc3NhZ2UuaW5kZXhPZihDUkxGLCBpbmRleCk7Ci0KLSAgICAgICAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGVuIGdvIGZvcm1hdCBpdAotICAgICAgICAgICAgICAgICAgd3JpdGUodGhpcy5vdXRwdXRTdHJlYW0sIHJlYWRCdWZmZXIsIDAsIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgIHdyaXRlKHRoaXMub3V0cHV0U3RyZWFtLCB0b0hvc3QsIDAsIHRvSG9zdC5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgd3JpdGUoCi0gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0U3RyZWFtLAotICAgICAgICAgICAgICAgICAgICByZWFkQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICBzZWNvbmRQYXJ0LAotICAgICAgICAgICAgICAgICAgICByZWFkTGVuIC0gc2Vjb25kUGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0aGUgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbSBhbmQgdGhlbiBnbyBmb3JtYXQgaXQKLSAgICAgICAgICAgICAgICAgIHdyaXRlKHRoaXMub3V0cHV0U3RyZWFtLCByZWFkQnVmZmVyLCAwLCByZWFkTGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZW4gZ28gZm9ybWF0IGl0Ci0gICAgICAgICAgICAgICAgd3JpdGUodGhpcy5vdXRwdXRTdHJlYW0sIHJlYWRCdWZmZXIsIDAsIHJlYWRMZW4pOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGJ1ZmZlclN0cmluZyA9IG5ldyBTdHJpbmcocmVhZEJ1ZmZlciwgMCwgcmVhZExlbik7Ci0gICAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJidWZmZXIgYXMgc3RyaW5nOiBbIiArIGJ1ZmZlclN0cmluZyArICJdIik7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlclN0cmluZy5sZW5ndGgoKSA8PSA1MCkKLSAgICAgICAgICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgICAgICAgICAicnVuIiwKLSAgICAgICAgICAgICAgICAgICAgImJ1ZmZlciBhcyBoZXhzdHJpbmc6IFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBVdGlscy50b0hleFN0cmluZyhidWZmZXJTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgKyAiXSIpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgICAgICAgICAicnVuIiwKLSAgICAgICAgICAgICAgICAgICAgImJ1ZmZlciBhcyBoZXhzdHJpbmc6IFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBVdGlscy50b0hleFN0cmluZyhidWZmZXJTdHJpbmcuc3Vic3RyaW5nKDAsIDUwKSkKLSAgICAgICAgICAgICAgICAgICAgICArICIgLi4uXSIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgcGFydCBvZiB0aGUgYnVmZmVyIGNvbnRhaW5zIHRoZSBCT00KLSAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VDb250ZXh0LmJvbSA9PSAwKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZUNvbnRleHQuYm9tID0gZ2V0Qk9NKHJlYWRCdWZmZXIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gREVCVUcKLSAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJib206ICIgKyBtZXNzYWdlQ29udGV4dC5ib20pOwotCi0gICAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZzsKLQotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoKTsKLSAgICAgICAgICAgICAgICByZWFkTXNnID0KLSAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIHJlYWRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgIHJlYWRMZW4sCi0gICAgICAgICAgICAgICAgICAgIFV0aWxzLmdldEphdmFFbmNvZGluZyhlbmNvZGluZykpOwotICAgICAgICAgICAgICAgIHNldEVuY29kaW5nKHJlYWRNc2cpOwotICAgICAgICAgICAgICAgIGlmICghZW5jb2RpbmcuZXF1YWxzKGdldEVuY29kaW5nKCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoKTsKLSAgICAgICAgICAgICAgICAgIHJlYWRNc2cgPQotICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgIHJlYWRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICByZWFkTGVuLAotICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmdldEphdmFFbmNvZGluZyhlbmNvZGluZykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiRVhDRVBUSU9OICgzKTogIiArIHVlZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbih1ZWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvLyBTZXQgZW5jb2RpbmcgaW4gdGhlIG1lc3NhZ2UgY29udGV4dAotICAgICAgICAgICAgICBtZXNzYWdlQ29udGV4dC5lbmNvZGluZyA9IGVuY29kaW5nOwotCi0gICAgICAgICAgICAgIC8vIERFQlVHCi0gICAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiZW5jb2Rpbmc6ICIgKyBtZXNzYWdlQ29udGV4dC5lbmNvZGluZyk7Ci0KLSAgICAgICAgICAgICAgLy8gUHJvY2VzcyBtZXNzYWdlCi0gICAgICAgICAgICAgIG1lc3NhZ2VDb250ZXh0ID0gcHJvY2Vzc01lc3NhZ2UocmVhZExlbiwgcmVhZE1zZywgbWVzc2FnZUNvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiBtZXNzYWdlIGlzIGNvbXBsZXRlLCB0aGVuIGxvZyBpdCBhbmQgcmVzZXQgYnVmZmVyCi0gICAgICAgICAgICBpZiAoKGlzTWVzc2FnZUNvbXBsZXRlKG1lc3NhZ2VDb250ZXh0KSkKLSAgICAgICAgICAgICAgfHwgKChyZWFkTGVuID09IC0xKSAmJiAobWVzc2FnZUNvbnRleHQubWVzc2FnZUJ1ZmZlci5sZW5ndGgoKSA+IDApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gTG9nIG1lc3NhZ2UKLSAgICAgICAgICAgICAgbG9nTWVzc2FnZShtZXNzYWdlQ29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgLy8gU2V0IG1lc3NhZ2UgY29tcGxldGUKLSAgICAgICAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbiBpZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTZXQgcmVhZCB0aW1lb3V0IGZsYWcKLSAgICAgICAgICAgIHJlYWRUaW1lZE91dCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjogIiArIGllLnRvU3RyaW5nKCkpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgcmVhZCBpcyBub3QgZG9uZSwgdGhlbiBzaHV0ZG93biAKLSAgICAgICAgICAgIGlmIChwYWlyZWRTb2NrZXRIYW5kbGVyICE9IG51bGwKLSAgICAgICAgICAgICAgJiYgcGFpcmVkU29ja2V0SGFuZGxlci5pc1JlYWRXYWl0aW5nKCkKLSAgICAgICAgICAgICAgJiYgcGFpcmVkU29ja2V0SGFuZGxlci5pc1JlYWRUaW1lZE91dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJyZWFkIHRpbWVkIG91dCBvbiBib3RoIHNvY2tldHMiKTsKLQotICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBtZXNzYWdlIGJ1ZmZlciBhbmQgaXQgaXMgY29tcGxldGUsIHRoZW4gbG9nIGl0Ci0gICAgICAgICAgICAgIGlmICgoaXNNZXNzYWdlQ29tcGxldGUobWVzc2FnZUNvbnRleHQpKQotICAgICAgICAgICAgICAgIHx8IChtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyLmxlbmd0aCgpID4gMCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMb2cgbWVzc2FnZQotICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UobWVzc2FnZUNvbnRleHQpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gU2V0IG1lc3NhZ2UgY29tcGxldGUKLSAgICAgICAgICAgICAgY29ubmVjdGlvbkFjdGl2ZSA9IGZhbHNlOwotICAgICAgICAgICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZTIpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgICAgICBkZWJ1ZygKLSAgICAgICAgICAgICAgInJ1biIsCi0gICAgICAgICAgICAgICJFWENFUFRJT04gKDIpOiAiCi0gICAgICAgICAgICAgICAgKyBlMi50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgKyAiXG4iCi0gICAgICAgICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUyKSk7Ci0gICAgICAgICAgICAvL2UyLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBtZXNzYWdlIGJ1ZmZlciBhbmQgaXQgaXMgY29tcGxldGUsIHRoZW4gbG9nIGl0Ci0gICAgICAgICAgICBpZiAoKGlzTWVzc2FnZUNvbXBsZXRlKG1lc3NhZ2VDb250ZXh0KSkKLSAgICAgICAgICAgICAgfHwgKG1lc3NhZ2VDb250ZXh0Lm1lc3NhZ2VCdWZmZXIubGVuZ3RoKCkgPiAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gTG9nIG1lc3NhZ2UKLSAgICAgICAgICAgICAgbG9nTWVzc2FnZShtZXNzYWdlQ29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNldCBtZXNzYWdlIGNvbXBsZXRlCi0gICAgICAgICAgICBjb25uZWN0aW9uQWN0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKAotICAgICAgICAicnVuIiwKLSAgICAgICAgIkVYQ0VQVElPTiAoMSk6ICIKLSAgICAgICAgICArIGUuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgKyAiXG4iCi0gICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUpKTsKLSAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXJyb3IgZXJyKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoInJ1biIsICJFUlJPUjogIiArIGVyci5nZXRNZXNzYWdlKCkpOwotICAgICAgLy9lcnIucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotCi0gICAgZmluYWxseQotICAgIHsKLSAgICAgIHNodXRkb3duKCk7Ci0gICAgICBzb2NrZXRDb25uZWN0aW9uLndha2VVcCgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHJpdmF0ZSBNZXNzYWdlQ29udGV4dCBwcm9jZXNzTWVzc2FnZSgKLSAgICBpbnQgcmVhZExlbiwKLSAgICBTdHJpbmcgcmVhZE1zZywKLSAgICBNZXNzYWdlQ29udGV4dCBpbk1lc3NhZ2VDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gY29udGludWVSZWFkID0gZmFsc2U7Ci0KLSAgICAvLyBJbml0aWFsaXplIG1lc3NhZ2UgY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIE1lc3NhZ2VDb250ZXh0IG1lc3NhZ2VDb250ZXh0ID0gaW5NZXNzYWdlQ29udGV4dDsKLQotICAgIC8vIEdldCBtZXNzYWdlIGJ1ZmZlciBhbmQgY2h1bmtlZCBkYXRhIGZyb20gbWVzc2FnZSBjb250ZXh0Ci0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXIgPSBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyOwotICAgIENodW5rZWREYXRhIGNodW5rZWREYXRhID0gbWVzc2FnZUNvbnRleHQuY2h1bmtlZERhdGE7Ci0KLSAgICAvLyBJZiBhbGwgd2UgcmVjZWl2ZWQgd2FzIHRoZSBoZWFkZXIgd2l0aCAxMDAgY29udGludWUsIHRoZW4gaWdub3JlIGl0Ci0gICAgaWYgKChyZWFkTXNnLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihIVFRQXzEwMF9DT05USU5VRSkgIT0gLTEpCi0gICAgICAmJiAocmVhZExlbiA+PSAyNSkpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygicHJvY2Vzc01lc3NhZ2UiLCAiSWdub3JlIEhUVFAgMTAwIENvbnRpbnVlLiIpOwotCi0gICAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIEhUVFAgMTAwIG1lc3NhZ2UKLSAgICAgIGludCBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYocmVhZE1zZyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgdGhlIEhUVFAgMTAwIG1lc3NhZ2UsIHRoZW4ganVzdCBpZ25vcmUgaXQKLSAgICAgIGlmIChpbmRleCA9PSByZWFkTXNnLmxlbmd0aCgpKQotICAgICAgICBjb250aW51ZVJlYWQgPSB0cnVlOwotCi0gICAgICAvLyBPdGhlcndpc2UgcmVtb3ZlIHRoZSBIVFRQIDEwMCBtZXNzYWdlIGFuZCBjb250aW51ZQotICAgICAgZWxzZQotICAgICAgICByZWFkTXNnID0gcmVhZE1zZy5zdWJzdHJpbmcoaW5kZXgpOwotICAgIH0KLQotICAgIC8vIEFERDogV2hhdCBpZiBhIGJ5cGFzc2VkIG1lc3NhZ2UgY29udGFpbnMgYW5vdGhlciBtZXNzYWdlIGFmdGVyIGl0PwotICAgIGlmICghY29udGludWVSZWFkICYmIGJ5cGFzc01lc3NhZ2UocmVhZE1zZykpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgIkRvIG5vdCBsb2cgbWVzc2FnZSBhcyBkZWZpbmVkIGluIHRoZSBtb25pdG9yIHNwZWMsIGJ1dCBpdCB3aWxsIGJlIHNlbnQuIik7Ci0KLSAgICAgIGNvbnRpbnVlUmVhZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFjb250aW51ZVJlYWQpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gMDsKLQotICAgICAgLy8gSWYgdGhlcmUgaXMgY2h1bmtlZCBkYXRhLCB0aGVuIGdldCB0aGUgbGVuZ3RoCi0gICAgICBpZiAoKHJlYWRNc2cudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRUQpICE9IC0xKQotICAgICAgICB8fCAocmVhZE1zZy50b1VwcGVyQ2FzZSgpLmluZGV4T2YoQ0hVTktFRF9XSVRIX1FVT1RFUykgIT0gLTEpKQotICAgICAgewotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoInByb2Nlc3NNZXNzYWdlIiwgIlByb2Nlc3NpbmcgY2h1bmtlZCBkYXRhLi4uIik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgQ0ZMRgotICAgICAgICBpZiAoKGluZGV4ID0gcmVhZE1zZy5pbmRleE9mKENSTEYgKyBDUkxGKSkgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIGVuZCBvZiBIVFRQIGhlYWRlci4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEluY2x1ZGUgdGhlIENSTEYrQ1JMRiBpbiB0aGUgaW5kZXgKLSAgICAgICAgaW5kZXggKz0gNDsKLQotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoCi0gICAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgICAiQWRkIGhlYWRlciBiZWZvcmUgZGVjb2RpbmcgY2h1bmtlZCBkYXRhOiBbIgotICAgICAgICAgICAgKyByZWFkTXNnLnN1YnN0cmluZygwLCBpbmRleCkKLSAgICAgICAgICAgICsgIl0iKTsKLQotICAgICAgICAvLyBBZGQgSFRUUCBoZWFkZXIgdG8gYnVmZmVyCi0gICAgICAgIG1lc3NhZ2VCdWZmZXIuYXBwZW5kKHJlYWRNc2cuc3Vic3RyaW5nKDAsIGluZGV4KSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIChpLmUuIGhlYWRlciBvbmx5KSwgdGhlbiBqdXN0IGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbW9yZSBjaHVua2VkIGRhdGEKLSAgICAgICAgaWYgKHJlYWRNc2cubGVuZ3RoKCkgPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICBjaHVua2VkRGF0YSA9IG5ldyBDaHVua2VkRGF0YSh0aGlzLCB0cnVlKTsKLQotICAgICAgICAgIC8vIERFQlVHOgotICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgICAgICJUaGVyZSBpcyBjaHVuayBkYXRhLCBidXQgbm9uZSBpbiB0aGlzIHBhcnQgb2YgdGhlIG1lc3NhZ2UuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHJlbWFpbmRlciBvZiB0aGUgZGF0YSBpcyBjb21wbGV0ZSAoaS5lLiBlbmRzIHdpdGggWzBdW0NSTEZdW09wdGlvbmFsIEZvb3Rlcl1bQ1JMRl0pCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBjaHVua2VkIGRhdGEgb2JqZWN0Ci0gICAgICAgICAgY2h1bmtlZERhdGEgPSBuZXcgQ2h1bmtlZERhdGEodGhpcywgcmVhZE1zZy5zdWJzdHJpbmcoaW5kZXgpKTsKLQotICAgICAgICAgIGlmICghY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaHVua2VkRGF0YS5kZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIobWVzc2FnZUJ1ZmZlcik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UgaWYgKGNodW5rZWREYXRhICE9IG51bGwgJiYgY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgIGRlYnVnKCJwcm9jZXNzTWVzc2FnZSIsICJQcm9jZXNzaW5nIE1PUkUgY2h1bmtlZCBkYXRhLi4uIik7Ci0KLSAgICAgICAgLy8gQWRkIGRhdGEKLSAgICAgICAgY2h1bmtlZERhdGEuYWRkRGF0YShyZWFkTXNnKTsKLQotICAgICAgICAvLyBEZWNvZGUgZGF0YQotICAgICAgICBpZiAoIWNodW5rZWREYXRhLmlzTW9yZUNodW5rZWREYXRhKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaHVua2VkRGF0YS5kZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIobWVzc2FnZUJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gRWxzZSBqdXN0IGFwcGVuZCB0aGUgZGF0YSB0byB0aGUgYnVmZmVyCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIERFQlVHOgotICAgICAgICBkZWJ1ZygKLSAgICAgICAgICAicHJvY2Vzc01lc3NhZ2UiLAotICAgICAgICAgICJBZGQgZGF0YSB0byBtZXNzYWdlIGVudHJ5IGJ1ZmZlcjogWyIgKyByZWFkTXNnICsgIl0iKTsKLQotICAgICAgICBtZXNzYWdlQnVmZmVyLmFwcGVuZChyZWFkTXNnKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgdXBkYXRlZCBtZXNzYWdlIGJ1ZmZlciBhbmQgY2h1bmtlZCBkYXRhIGluIG1lc3NhZ2UgY29udGV4dCAgICAKLSAgICBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyID0gbWVzc2FnZUJ1ZmZlcjsKLSAgICBtZXNzYWdlQ29udGV4dC5jaHVua2VkRGF0YSA9IGNodW5rZWREYXRhOwotCi0gICAgLy8gUmV0dXJuIG1lc3NhZ2UgY29udGV4dCAKLSAgICByZXR1cm4gbWVzc2FnZUNvbnRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogU2h1dGRvd24gaW5wdXQgc29ja2V0IGFuZCBjbG9zZSBpbnB1dCBzdHJlYW0uCi0gICAqIEBwYXJhbSBpblNvY2tldCBpbiBzb2NrZXQuCi0gICAqIEBwYXJhbSBpbnB1dFN0cmVhbSBpbnB1dCBzdHJlYW0uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzdG9wSW5wdXQoU29ja2V0IGluU29ja2V0LCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgaW5wdXQgc29ja2V0LCB0aGVuIHNodXRkb3duIHRoZSBpbnB1dAotICAgICAgaWYgKGluU29ja2V0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGluU29ja2V0LnNodXRkb3duSW5wdXQoKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gaW5wdXQgc3RyZWFtIHRoZW4gY2xvc2UgaXQKLSAgICAgIGlmIChpbnB1dFN0cmVhbSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpbnB1dFN0cmVhbS5jbG9zZSgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWdub3JlIHNpbmNlIHdlIGFyZSBzdG9wcGluZyBldmVyeXRoaW5nCi0gICAgfQotCi0gICAgaW5wdXRTdHJlYW0gPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFNodXRkb3duIG91dHB1dCBzb2NrZXQgYW5kIGNsb3NlIG91dHB1dCBzdHJlYW0uCi0gICAqIEBwYXJhbSBvdXRTb2NrZXQgb3V0IHNvY2tldC4KLSAgICogQHBhcmFtIG91dHB1dFN0cmVhbSBvdXRwdXQgc3RyZWFtLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc3RvcE91dHB1dChTb2NrZXQgb3V0U29ja2V0LCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gb3V0cHV0IHN0cmVhbSwgdGhlbiBmbHVzaCBpdAotICAgICAgaWYgKG91dHB1dFN0cmVhbSAhPSBudWxsKQotICAgICAgewotICAgICAgICBvdXRwdXRTdHJlYW0uZmx1c2goKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlcmUgaXMgYSBpbnB1dCBzb2NrZXQsIHRoZW4gc2h1dGRvd24gdGhlIGlucHV0Ci0gICAgICBpZiAob3V0U29ja2V0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG91dFNvY2tldC5zaHV0ZG93bk91dHB1dCgpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhbiBvdXRwdXQgc3RyZWFtIHRoZW4gY2xvc2UgaXQKLSAgICAgIGlmIChvdXRwdXRTdHJlYW0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgb3V0cHV0U3RyZWFtLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIElnbm9yZSBzaW5jZSB3ZSBhcmUgc3RvcHBpbmcgZXZlcnl0aGluZwotICAgIH0KLQotICAgIG91dHB1dFN0cmVhbSA9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogU2h1dGRvd24gaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNodXRkb3duKCkKLSAgewotICAgIC8vIFN0b3AgYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dAotICAgIHN0b3BJbnB1dCh0aGlzLmluU29ja2V0LCB0aGlzLmlucHV0U3RyZWFtKTsKLSAgICBzdG9wT3V0cHV0KHRoaXMub3V0U29ja2V0LCB0aGlzLm91dHB1dFN0cmVhbSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBkZWJ1ZyBtZXNzYWdlcy4KLSAgICovCi0gIHZvaWQgZGVidWcoU3RyaW5nIG1ldGhvZCwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBkZWJ1ZygiU29ja2V0SGFuZGxlciIsIG1ldGhvZCwgbWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBkZWJ1ZyBtZXNzYWdlcy4KLSAgICovCi0gIHZvaWQgZGVidWcoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIG1ldGhvZCwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgIHByaW50KGNsYXNzTmFtZSwgbWV0aG9kLCBtZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBEaXNwbGF5IG1lc3NhZ2VzLgotICAgKi8KLSAgdm9pZCBwcmludChTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbWV0aG9kLCBTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICJbIgotICAgICAgICArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpCi0gICAgICAgICsgIl0gWyIKLSAgICAgICAgKyBjbGFzc05hbWUKLSAgICAgICAgKyAiLiIKLSAgICAgICAgKyBtZXRob2QKLSAgICAgICAgKyAiXSBbIgotICAgICAgICArIHRoaXMuY29ubmVjdGlvblR5cGUKLSAgICAgICAgKyAiXSAiCi0gICAgICAgICsgbWVzc2FnZSk7Ci0gIH0KLQotICAvKiogCi0gICAqIFdyaXRlIGRhdGEuCi0gICAqLwotICBwcml2YXRlIHZvaWQgd3JpdGUoCi0gICAgT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwKLSAgICBieXRlW10gYnVmZmVyLAotICAgIGludCBzdGFydCwKLSAgICBpbnQgbGVuZ3RoKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKG91dHB1dFN0cmVhbSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoIndyaXRlIiwgIkNvdWxkIG5vdCB3cml0ZSBidWZmZXIgYmVjYXVzZSBvdXRwdXQgc3RyZWFtIGlzIG51bGwuIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKCJ3cml0ZSIsICJidWZmZXI6IFsiICsgbmV3IFN0cmluZyhidWZmZXIsIHN0YXJ0LCBsZW5ndGgpICsgIl0iKTsKLQotICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKGJ1ZmZlciwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIAotICAgKiBDaGVjayBpZiBtZXNzYWdlIGlzIGNvbXBsZXRlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2VDb250ZXh0Ci0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNNZXNzYWdlQ29tcGxldGUoTWVzc2FnZUNvbnRleHQgbWVzc2FnZUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW50IGluZGV4LCBpbmRleDIsIGNvbnRlbnRMZW47Ci0gICAgYm9vbGVhbiBtZXNzYWdlQ29tcGxldGUgPSBmYWxzZTsKLQotICAgIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhID0gbWVzc2FnZUNvbnRleHQuY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKTsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gbWVzc2FnZUNvbnRleHQubWVzc2FnZUJ1ZmZlci50b1N0cmluZygpOwotCi0gICAgLy8gRmluZCB0aGUgZmlyc3QgQ1JMRiArIENSTEYgd2hpY2ggbWFya3MgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXIKLSAgICBTdHJpbmcgaHR0cEhlYWRlcjsKLSAgICBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSk7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgaHR0cEhlYWRlciA9IG1lc3NhZ2U7Ci0gICAgZWxzZQotICAgICAgaHR0cEhlYWRlciA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQotICAgIC8vIElmIGNodW5rZWQgZGF0YSwgdGhlbiBjb21wbGV0ZSBvbmx5IGlmIHRoZXJlIGlzIG5vIG1vcmUgZGF0YQotICAgIGlmICgoKGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRUQpICE9IC0xKQotICAgICAgfHwgKGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRURfV0lUSF9RVU9URVMpICE9IC0xKSkKLSAgICAgICYmICghbW9yZUNodW5rZWREYXRhKSkKLSAgICB7Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzTWVzc2FnZUNvbXBsZXRlIiwKLSAgICAgICAgIkhUVFAgaGVhZGVyIGluZGljYXRlcyBjaHVua2VkIGRhdGEgYW5kIHRoZXJlIGlzIG5vIG1vcmUgY2h1bmtlZCBkYXRhIik7Ci0gICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZvciBjb250ZW50IGxlbmd0aAotICAgIGVsc2UgaWYgKChpbmRleCA9IGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENPTlRFTlRfTEVOR1RIKSkgPT0gLTEpCi0gICAgewotICAgICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgIkhUVFAgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gY29udGVudCBsZW5ndGgiKTsKLQotICAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIGNvbXBsZXRlIFBPU1QgaGVhZGVyIHdpdGhvdXQgY29udGVudCBsZW5ndGgKLSAgICAgIGlmIChodHRwSGVhZGVyLnN0YXJ0c1dpdGgoIlBPU1QiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGh0dHBIZWFkZXIuZW5kc1dpdGgoQ1JMRiArIENSTEYpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSBjb250ZW50LWxlbmd0aCBpbiBIVFRQIFBPU1QgaGVhZGVyLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBHRVQsIHNvIHNlZSBpZiB0aGUgdGhlIGNvbXBsZXRlIGhlYWRlciBoYXMgYmVlbiByZWNlaXZlZAotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIGh0dHBIZWFkZXIuc3RhcnRzV2l0aCgiR0VUIikKLSAgICAgICAgICAmJiAobWVzc2FnZS5sZW5ndGgoKSA9PSBodHRwSGVhZGVyLmxlbmd0aCgpCi0gICAgICAgICAgICAmJiBtZXNzYWdlLmVuZHNXaXRoKENSTEYgKyBDUkxGKSkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgY29udGVudCBsZW5ndGgsIHRoZW4gc2VlIGlmIHRoZSBlbnRpcmUgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZAotICAgIGVsc2UgaWYgKChpbmRleCA9IGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENPTlRFTlRfTEVOR1RIKSkgIT0gLTEpCi0gICAgewotICAgICAgLy8gRmluZCBlbmQgb2YgY29udGVudCBsZW5ndGggdmFsdWUKLSAgICAgIGluZGV4MiA9IGh0dHBIZWFkZXIuaW5kZXhPZihDUkxGLCBpbmRleCk7Ci0KLSAgICAgIGRlYnVnKCJpc01lc3NhZ2VDb21wbGV0ZSIsICJDUkxGOiAiICsgVXRpbHMudG9IZXhTdHJpbmcoQ1JMRikpOwotICAgICAgZGVidWcoCi0gICAgICAgICJpc01lc3NhZ2VDb21wbGV0ZSIsCi0gICAgICAgICJodHRwSGVhZGVyL2luZGV4OiAiICsgVXRpbHMudG9IZXhTdHJpbmcoaHR0cEhlYWRlci5zdWJzdHJpbmcoaW5kZXgpKSk7Ci0KLSAgICAgIC8vIEdldCBjb250ZW50IGxlbmd0aAotICAgICAgY29udGVudExlbiA9Ci0gICAgICAgIEludGVnZXIKLSAgICAgICAgICAuZGVjb2RlKAotICAgICAgICAgICAgaHR0cEhlYWRlci5zdWJzdHJpbmcoaW5kZXggKyBDT05URU5UX0xFTkdUSC5sZW5ndGgoKSArIDEsIGluZGV4MikpCi0gICAgICAgICAgLmludFZhbHVlKCk7Ci0KLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgImNvbnRlbnRMZW46ICIgKyBjb250ZW50TGVuKTsKLQotICAgICAgLy8gRmluZCB0aGUgZmlyc3QgQ1JMRiArIENSTEYgd2hpY2ggbWFya3MgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXIKLSAgICAgIGluZGV4ID0gVXRpbHMuZ2V0Rmlyc3RDUkxGQ1JMRihtZXNzYWdlKTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzTWVzc2FnZUNvbXBsZXRlIiwKLSAgICAgICAgImFjdHVhbCByZWNlaXZlZCBtZXNzYWdlIGxlbmd0aDogIiArIChtZXNzYWdlLmxlbmd0aCgpIC0gKGluZGV4KSkpOwotCi0gICAgICAvLyBJZiBjb250ZW50IGxlbmd0aCBpcyBlcXVhbCB0byBhY3R1YWwgbWVzc2FnZSBjb250ZW50IGxlbmd0aCwgdGhlbiBtZXNzYWdlIGlzIGNvbXBsZXRlCi0gICAgICBpZiAoY29udGVudExlbiA9PSBtZXNzYWdlLmxlbmd0aCgpIC0gaW5kZXgpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgIGRlYnVnKAotICAgICAgICAgICJpc01lc3NhZ2VDb21wbGV0ZSIsCi0gICAgICAgICAgImNvbnRlbnRMZW4gPSBhY3R1YWwgcmVjZWl2ZWQgbWVzc2FnZSBsZW5ndGguIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gTWVzc2FnZSBpcyBub3QgY29tcGxldGUKLSAgICBlbHNlCi0gICAgewotICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gREVCVUc6Ci0gICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgIm1lc3NhZ2VDb21wbGV0ZTogIiArIG1lc3NhZ2VDb21wbGV0ZSk7Ci0KLSAgICByZXR1cm4gbWVzc2FnZUNvbXBsZXRlOwotICB9Ci0KLSAgLyoqIAotICAgKiBMb2cgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyCi0gICAqLwotICBwcml2YXRlIHZvaWQgbG9nTWVzc2FnZShNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gRGV0ZXJtaW5lIHNlbmRlciBhbmQgcmVjZWl2ZXIgaG9zdC9wb3J0Ci0gICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LCByZWNlaXZlckhvc3RBbmRQb3J0OwotCi0gICAgLy8gUmVxdWVzdAotICAgIGlmIChjb25uZWN0aW9uVHlwZS5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgewotICAgICAgc2VuZGVySG9zdEFuZFBvcnQgPQotICAgICAgICBpblNvY2tldC5nZXRJbmV0QWRkcmVzcygpLmdldEhvc3RBZGRyZXNzKCkgKyAiOiIgKyBpblNvY2tldC5nZXRQb3J0KCk7Ci0gICAgICByZWNlaXZlckhvc3RBbmRQb3J0ID0gdGFyZ2V0SG9zdCArICI6IiArIG91dFNvY2tldC5nZXRQb3J0KCk7Ci0gICAgfQotCi0gICAgLy8gUmVzcG9uc2UgICAgICAKLSAgICBlbHNlCi0gICAgewotICAgICAgc2VuZGVySG9zdEFuZFBvcnQgPSB0YXJnZXRIb3N0ICsgIjoiICsgaW5Tb2NrZXQuZ2V0UG9ydCgpOwotICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydCA9Ci0gICAgICAgIG91dFNvY2tldC5nZXRJbmV0QWRkcmVzcygpLmdldEhvc3RBZGRyZXNzKCkgKyAiOiIgKyBvdXRTb2NrZXQuZ2V0UG9ydCgpOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGVudHJ5Ci0gICAgdGhpcy5zb2NrZXRDb25uZWN0aW9uLmxvZ01lc3NhZ2UoCi0gICAgICBjb252ZXJzYXRpb25JRCwKLSAgICAgIHRoaXMuY29ubmVjdGlvblR5cGUsCi0gICAgICBtZXNzYWdlQ29udGV4dC50aW1lc3RhbXAsCi0gICAgICBzZW5kZXJIb3N0QW5kUG9ydCwKLSAgICAgIHJlY2VpdmVySG9zdEFuZFBvcnQsCi0gICAgICBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyLAotICAgICAgbWVzc2FnZUNvbnRleHQuYm9tLAotICAgICAgbWVzc2FnZUNvbnRleHQuZW5jb2RpbmcpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGZvciBIVFRQIG1lc3NhZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBsb2dnZWQuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYnlwYXNzTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIGJvb2xlYW4gYnlwYXNzID0gZmFsc2U7Ci0gICAgaWYgKChtZXNzYWdlLnN0YXJ0c1dpdGgoIkNPTk5FQ1QiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIlRSQUNFIikpCi0gICAgICB8fCAobWVzc2FnZS5zdGFydHNXaXRoKCJERUxFVEUiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIk9QVElPTlMiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIkhFQUQiKSkpCi0gICAgewotICAgICAgYnlwYXNzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnlwYXNzOwotICB9Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIC8qKgotICAgKiBTZXQgRW5jb2RpbmcgUGFyYW1ldGVycwotICAgKiBAcGFyYW0gbWVzc2FnZUZyYWdtZW50IFN0cmluZyBvZiBhIEhUVFAgbWVzc2FnZSBmcmFnbWVudC4KLSAgICogQGF1dGhvciBLLk5ha2Fnb21lQEJlYWNvbklUIEphcGFuIFNJRyAKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgbWVzc2FnZUZyYWdtZW50KQotICB7Ci0gICAgaWYgKG1pbWVDaGFyc2V0ID09IG51bGwgfHwgbWltZUNoYXJzZXQubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9IFV0aWxzLmdldEhUVFBDaGFyc2V0KG1lc3NhZ2VGcmFnbWVudCk7Ci0gICAgfQotICAgIGlmICh4bWxFbmNvZGluZyA9PSBudWxsIHx8IHhtbEVuY29kaW5nLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgeG1sRW5jb2RpbmcgPSBVdGlscy5nZXRYTUxFbmNvZGluZyhtZXNzYWdlRnJhZ21lbnQpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBFbmNvZGluZyBQYXJhbWV0ZXIKLSAgICogQHJldHVybiBDaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgSFRUUCBtZXNzYWdlLgotICAgKiBAYXV0aG9yIEsuTmFrYWdvbWVAQmVhY29uSVQgSmFwYW4gU0lHIAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RW5jb2RpbmcoKQotICB7Ci0gICAgU3RyaW5nIGVuY29kaW5nID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HOwotICAgIGlmIChtaW1lQ2hhcnNldCAhPSBudWxsICYmIG1pbWVDaGFyc2V0Lmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBlbmNvZGluZyA9IG1pbWVDaGFyc2V0OwotICAgIH0KLSAgICBpZiAoeG1sRW5jb2RpbmcgIT0gbnVsbCAmJiB4bWxFbmNvZGluZy5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgZW5jb2RpbmcgPSB4bWxFbmNvZGluZzsKLSAgICB9Ci0gICAgcmV0dXJuIGVuY29kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgQnl0ZSBPcmRlciBNYXJrIGZyb20gdGhlIG1lc3NhZ2UgKGlmIHRoZXJlIGlzIG9uZSkuCi0gICAqLwotICBwcml2YXRlIGludCBnZXRCT00oYnl0ZVtdIG1lc3NhZ2UpCi0gIHsKLSAgICBpbnQgYm9tID0gMDsKLQotICAgIGJ5dGUgRkYgPSAoYnl0ZSkgMHhGRjsKLSAgICBieXRlIEZFID0gKGJ5dGUpIDB4RkU7Ci0gICAgYnl0ZSBFRiA9IChieXRlKSAweEVGOwotICAgIGJ5dGUgQkIgPSAoYnl0ZSkgMHhCQjsKLSAgICBieXRlIEJGID0gKGJ5dGUpIDB4QkY7Ci0KLSAgICAvLyBTZWFyY2ggdGhyb3VnaCB0aGUgYnl0ZSBhcnJheSBmb3IgQ1JMRitDUkxGLiAgVGhpcyB3aWxsIG1hcmsgdGhlIGVuZCBvZiB0aGUgaGVhZGVyLgotICAgIGludCBpID0gVXRpbHMuZ2V0Rmlyc3RDUkxGQ1JMRihtZXNzYWdlLCAwKTsKLSAgICBpZiAoaSAhPSAtMSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKAotICAgICAgICAiZ2V0Qk9NIiwKLSAgICAgICAgIm1lc3NhZ2VbaV06ICIKLSAgICAgICAgICArIG1lc3NhZ2VbaV0KLSAgICAgICAgICArICIsIG1lc3NhZ2VbaSsxXTogIgotICAgICAgICAgICsgbWVzc2FnZVtpKzFdKTsKLQotICAgICAgLy8gQ2hlY2sgZm9yIFVURi04IEJPTQotICAgICAgaWYgKCgoaSArIDIpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICYmIG1lc3NhZ2VbaV0gPT0gRUYKLSAgICAgICAgJiYgbWVzc2FnZVtpKzFdID09IEJCCi0gICAgICAgICYmIG1lc3NhZ2VbaSsyXSA9PSBCRikKLSAgICAgIHsKLSAgICAgICAgYm9tID0gMHhFRkJCQkY7Ci0gICAgICB9Ci0gICAgICAvLyBDaGVjayBmb3IgVVRGLTE2IGJpZy1lbmRpYW4gQk9NCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKChpKzEpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICAgJiYgbWVzc2FnZVtpXSA9PSBGRQotICAgICAgICAgICYmIG1lc3NhZ2VbaSArIDFdID09IEZGKQotICAgICAgewotICAgICAgICBib20gPSAweEZFRkY7Ci0gICAgICB9Ci0gICAgICAvLyBDaGVjayBmb3IgVVRGLTE2IGxpdHRsZS1lbmRpYW4gQk9NCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKChpKzEpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICAgJiYgbWVzc2FnZVtpXSA9PSBGRgotICAgICAgICAgICYmIG1lc3NhZ2VbaSsxXSA9PSBGRSkKLSAgICAgIHsKLSAgICAgICAgYm9tID0gMHhGRkZFOwotICAgICAgfQotICAgICAgLy8gQUREOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBCT01zCi0gICAgfQotICAgIHJldHVybiBib207Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSByZWFkIGlzIHN0aWxsIHdhaXRpbmcgZm9yIGRhdGEuCi0gICAqLwotICBib29sZWFuIGlzUmVhZFdhaXRpbmcoKQotICB7Ci0gICAgYm9vbGVhbiByZWFkV2FpdGluZyA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzUmVhZFdhaXRpbmciLAotICAgICAgICAiaW5Tb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKS5hdmFpbGFibGUoKTogIgotICAgICAgICAgICsgaW5Tb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKS5hdmFpbGFibGUoKSk7Ci0KLSAgICAgIGlmIChpblNvY2tldC5nZXRJbnB1dFN0cmVhbSgpLmF2YWlsYWJsZSgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHJlYWRXYWl0aW5nID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVhZFdhaXRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlYWQgdGltZWQgb3V0IGZsYWcuCi0gICAqLwotICBib29sZWFuIGlzUmVhZFRpbWVkT3V0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlYWRUaW1lZE91dDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXNzYWdlIGNvbnRleHQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lc3NhZ2UgdGhhdCBpcyBiZWluZyBwcm9jZXNzZWQuCi0gICAqLwotICBjbGFzcyBNZXNzYWdlQ29udGV4dAotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXI7Ci0gICAgQ2h1bmtlZERhdGEgY2h1bmtlZERhdGE7Ci0gICAgU3RyaW5nIHRpbWVzdGFtcDsKLSAgICBpbnQgYm9tOwotICAgIFN0cmluZyBlbmNvZGluZzsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBuZXcgbWVzc2FnZSBjb250ZXh0LgotICAgICAqLwotICAgIE1lc3NhZ2VDb250ZXh0KCkKLSAgICB7Ci0gICAgICBtZXNzYWdlQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgY2h1bmtlZERhdGEgPSBuZXcgQ2h1bmtlZERhdGEoKTsKLSAgICAgIHRpbWVzdGFtcCA9IG51bGw7Ci0gICAgICBib20gPSAwOwotICAgICAgZW5jb2RpbmcgPSBXU0lDb25zdGFudHMuREVGQVVMVF9YTUxfRU5DT0RJTkc7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Db21tZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Db21tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZTRhZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvQ29tbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciBtb25pdG9yIGNvbmZpZyBDb21tZW50IGVsZW1lbnQuICAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tZW50IGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9DT01NRU5UOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGNvbW1lbnQgdGV4dC4KLSAgICogQHJldHVybiBjb21tZW50IHRleHQuCi0gICAqIEBzZWUgI3NldFRleHQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpOwotCi0gIC8qKgotICAgKiBTZXQgY29tbWVudCB0ZXh0LgotICAgKiBAcGFyYW0gdGV4dCB0aGUgY29tbWVudCB0ZXh0LgotICAgKiBAc2VlICNnZXRUZXh0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01hbkluVGhlTWlkZGxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9NYW5JblRoZU1pZGRsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWMwYWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01hbkluVGhlTWlkZGxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbW9uaXRvciBjb25maWcgTWFuSW5UaGVNaWRkbGUgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1hbkluVGhlTWlkZGxlIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9NQU5fSU5fVEhFX01JRERMRTsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBjb21tZW50LgotICAgKiBAcmV0dXJuIGNvbW1lbnQuCi0gICAqIEBzZWUgI3NldENvbW1lbnQKLSAgICovCi0gIHB1YmxpYyBDb21tZW50IGdldENvbW1lbnQoKTsKLQotICAvKioKLSAgICogU2V0IGNvbW1lbnQuCi0gICAqIEBwYXJhbSBjb21tZW50IHRoZSBDb21tZW50IG9iamVjdC4KLSAgICogQHNlZSAjZ2V0Q29tbWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpOwotCi0gIC8qKgotICAgKiBHZXQgcmVkaXJlY3RzLgotICAgKiBAcmV0dXJuIHRoZSByZWRpcmlyZWN0cy4KLSAgICogQHNlZSAjc2V0UmVkaXJlY3RMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFJlZGlyZWN0TGlzdCgpOwotCi0gIC8qKgotICAgKiBBZGQgcmVkaXJlY3QuCi0gICAqIEBwYXJhbSByZWRpcmVjdCB0aGUgUmVkaXJlY3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUmVkaXJlY3QoUmVkaXJlY3QgcmVkaXJlY3QpOwotCi0gIC8qKgotICAgKiBTZXQgcmVkaXJlY3RzLgotICAgKiBAcGFyYW0gcmVkaXJlY3RMaXN0IGEgbGlzdCBvZiB0aGUgcmVkaXJlY3RzLgotICAgKiBAc2VlICNnZXRSZWRpcmVjdExpc3QgCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWRpcmVjdExpc3QoVmVjdG9yIHJlZGlyZWN0TGlzdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZGYxZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvTW9uaXRvckNvbmZpZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5XU0lEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NZXNzYWdlTGlzdDsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1vbml0b3JDb25maWcgZXh0ZW5kcyBXU0lEb2N1bWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQ09ORklHOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgbE1lc3NhZ2VMaXN0IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpOwotCi0gIC8qKgotICAgKiBHZXQgY29tbWVudC4KLSAgICogQHJldHVybiBjb21tZW50LgotICAgKiBAc2VlICNzZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIENvbW1lbnQgb2JqZWN0LgotICAgKiBAc2VlICNnZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KENvbW1lbnQgY29tbWVudCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZmlsZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiBsb2cgZmlsZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGxvZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gbG9nVVJJIGxvZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRMb2dMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nTG9jYXRpb24oU3RyaW5nIGxvZ1VSSSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZXBsYWNlIGxvZy4KLSAgICogQHJldHVybiByZXBsYWNlIGxvZy4KLSAgICogQHNlZSAjc2V0UmVwbGFjZUxvZwotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0UmVwbGFjZUxvZygpOwotCi0gIC8qKgotICAgKiBTZXQgcmVwbGFjZSBsb2cuCi0gICAqIEBwYXJhbSByZXBsYWNlTG9nIGEgcmVwbGFjZSBsb2cuCi0gICAqIEBzZWUgI2dldFJlcGxhY2VMb2cKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcGxhY2VMb2coYm9vbGVhbiByZXBsYWNlTG9nKTsKLQotICAvKioKLSAgICogR2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHJldHVybiBhZGQgc3R5bGUgc2hlZXQuCi0gICAqIEBzZWUgI3NldEFkZFN0eWxlU2hlZXQKLSAgICovCi0gIHB1YmxpYyBBZGRTdHlsZVNoZWV0IGdldEFkZFN0eWxlU2hlZXQoKTsKLQotICAvKioKLSAgICogU2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYWRkIHN0eWxlIHNoZWV0LgotICAgKiBAc2VlICNnZXRBZGRTdHlsZVNoZWV0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRTdHlsZVNoZWV0KEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZHVyYXRpb24uCi0gICAqIEByZXR1cm4gbG9nIGR1cmF0aW9uLgotICAgKiBAc2VlICNzZXRMb2dEdXJhdGlvbgotICAgKi8KLSAgcHVibGljIGludCBnZXRMb2dEdXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgbG9nIGR1cmF0aW9uLgotICAgKiBAcGFyYW0gbG9nRHVyYXRpb24gbG9nIGR1cmF0aW9uLgotICAgKiBAc2VlICNnZXRMb2dEdXJhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nRHVyYXRpb24oaW50IGxvZ0R1cmF0aW9uKTsKLQotICAvKioKLSAgICogR2V0IHRpbWVvdXQuCi0gICAqIEByZXR1cm4gdGltZW91dC4KLSAgICogQHNlZSAjc2V0VGltZW91dAotICAgKi8KLSAgcHVibGljIGludCBnZXRUaW1lb3V0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aW1lb3V0LgotICAgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0LgotICAgKiBAc2VlICNnZXRUaW1lb3V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lb3V0KGludCB0aW1lb3V0KTsKLQotICAvKioKLSAgICogR2V0IG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAcmV0dXJuIG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNzZXRNYW5JblRoZU1pZGRsZQotICAgKi8KLSAgcHVibGljIE1hbkluVGhlTWlkZGxlIGdldE1hbkluVGhlTWlkZGxlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBtYW4taW4tdGhlLW1pZGRsZSBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIG1hbkluVGhlTWlkZGxlIG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNnZXRNYW5JblRoZU1pZGRsZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWFuSW5UaGVNaWRkbGUoTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUpOwotCi0gIC8qKgotICAgKiBHZXQgdmVyYm9zZSBvcHRpb24uCi0gICAqIEByZXR1cm4gdmVyYm9zZSBvcHRpb24uCi0gICAqIEBzZWUgI3NldFZlcmJvc2VPcHRpb24KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZlcmJvc2VPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHZlcmJvc2Ugb3B0aW9uLgotICAgKiBAcGFyYW0gdmVyYm9zZSB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0VmVyYm9zZU9wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmVyYm9zZU9wdGlvbihib29sZWFuIHZlcmJvc2UpOwotCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHBhcnNpbmcgdGhlIAotICAgKiAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUFyZ3MoU3RyaW5nW10gYXJncykgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01vbml0b3JDb25maWdSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01vbml0b3JDb25maWdSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmYmQwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnUmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIHJlYWQgdGhlIG1vbml0b3IgY29uZmlnIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1vbml0b3JDb25maWdSZWFkZXIgZXh0ZW5kcyBEb2N1bWVudFJlYWRlcgotewotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgTWVzc2FnZUxpc3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIG1vbml0b3IgY29uZmlnIGZpbGUuCi0gICAqIEBwYXJhbSBtb25pdG9yQ29uZmlnVVJJIHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIGEgTW9uaXRvckNvbmZpZyBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgd2hpbGUgcmVhZGluZyBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgcmVhZE1vbml0b3JDb25maWcoU3RyaW5nIG1vbml0b3JDb25maWdVUkkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogUmVhZCB0aGUgbW9uaXRvciBjb25maWcgZmlsZS4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBNb25pdG9yQ29uZmlnIG9iamVjdAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciB3aGlsZSByZWFkaW5nIG1vbml0b3IgY29uZmlnIGZpbGUuCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZyByZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvUmVkaXJlY3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL1JlZGlyZWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMzA4MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvUmVkaXJlY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIG1vbml0b3IgY29uZmlnIFJlZGlyZWN0IGVsZW1lbnQuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZWRpcmVjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fUkVESVJFQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHLCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBHZXQgY29tbWVudC4KLSAgICogQHJldHVybiBjb21tZW50LgotICAgKiBAc2VlICNzZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIENvbW1lbnRvYmplY3QuCi0gICAqIEBzZWUgI2dldENvbW1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbW1lbnQoQ29tbWVudCBjb21tZW50KTsKLQotICAvKioKLSAgICogR2V0IGxpc3RlbiBwb3J0LgotICAgKiBAcmV0dXJuIGxpc3RlbiBwb3J0LgotICAgKiBAc2VlICNzZXRMaXN0ZW5Qb3J0Ci0gICAqLwotICBwdWJsaWMgaW50IGdldExpc3RlblBvcnQoKTsKLQotICAvKioKLSAgICogU2V0IGxpc3RlbiBwb3J0LgotICAgKiBAcGFyYW0gbGlzdGVuUG9ydCBsaXN0ZW4gcG9ydC4KLSAgICogQHNlZSAjZ2V0TGlzdGVuUG9ydAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGlzdGVuUG9ydChpbnQgbGlzdGVuUG9ydCk7Ci0KLSAgLyoqCi0gICAqIEdldCBob3N0LgotICAgKiBAcmV0dXJuIGhvc3QuCi0gICAqIEBzZWUgI3NldEhvc3QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SG9zdCgpOwotCi0gIC8qKgotICAgKiBTZXQgaG9zdC4KLSAgICogQHBhcmFtIGhvc3QgIGhvc3QuCi0gICAqIEBzZWUgI2dldEhvc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhvc3QoU3RyaW5nIGhvc3QpOwotCi0gIC8qKgotICAgKiBHZXQgc2VuZCB0byBwb3J0LgotICAgKiBAcmV0dXJuIHNlbmQgdG8gcG9ydC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0VG9Qb3J0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzZW5kIHRvIGhvc3QuCi0gICAqIEByZXR1cm4gc2VuZCB0byBob3N0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUb0hvc3QoKTsKLQotICAvKioKLSAgICogR2V0IHNlbmQgdG8gcHJvdG9jb2wuCi0gICAqIEByZXR1cm4gc2VuZCB0byBwcm90b2NvbC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Qcm90b2NvbCgpOwotCi0gIC8qKgotICAgKiBHZXQgbWF4aW11bSBjb25uZWN0aW9ucy4KLSAgICogQHJldHVybiBtYXhpbXVtIGNvbm5lY3Rpb25zLgotICAgKiBAc2VlICNzZXRNYXhDb25uZWN0aW9ucwotICAgKi8KLSAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpOwotCi0gIC8qKgotICAgKiBTZXQgbWF4aW11bSBjb25uZWN0aW9ucy4KLSAgICogQHBhcmFtIG1heENvbm5lY3Rpb25zIG1heGltdW0gY29ubmVjdGlvbnMuCi0gICAqIEBzZWUgI2dldE1heENvbm5lY3Rpb25zCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNYXhDb25uZWN0aW9ucyhpbnQgbWF4Q29ubmVjdGlvbnMpOwotCi0gIC8qKgotICAgKiBHZXQgcmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqIEByZXR1cm4gcmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqIEBzZWUgI3NldFJlYWRUaW1lb3V0U2Vjb25kcwotICAgKi8KLSAgcHVibGljIGludCBnZXRSZWFkVGltZW91dFNlY29uZHMoKTsKLQotICAvKioKLSAgICogU2V0IHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKiBAcGFyYW0gcmVhZFRpbWVvdXRTZWNvbmRzIHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKiBAc2VlICNnZXRSZWFkVGltZW91dFNlY29uZHMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlYWRUaW1lb3V0U2Vjb25kcyhpbnQgcmVhZFRpbWVvdXRTZWNvbmRzKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvQ29tbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvQ29tbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjMDliNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL0NvbW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLQotLyoqCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIG1vbml0b3IgY29uZmlnIENvbW1lbnQgZWxlbWVudC4gCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tZW50SW1wbCBpbXBsZW1lbnRzIENvbW1lbnQKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQgdGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGV4dCA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Db21tZW50I2dldFRleHQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRleHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLkNvbW1lbnQjc2V0VGV4dChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KQotICB7Ci0gICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgLy9wdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiB4bWxucz1cIiIgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRyArICJcIj4iKTsgICAgCi0gICAgcHcucHJpbnQoIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy50ZXh0KTsKLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gdGV4dDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01hbkluVGhlTWlkZGxlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9NYW5JblRoZU1pZGRsZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU4ZmE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01hbkluVGhlTWlkZGxlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Db21tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci0KLS8qKgotICogVGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbW9uaXRvciBjb25maWcgTWFuSW5UaGVNaWRkbGUgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTWFuSW5UaGVNaWRkbGVJbXBsIGltcGxlbWVudHMgTWFuSW5UaGVNaWRkbGUKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50OwotCi0gIC8qKgotICAgKiBSZWRpcmVjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciByZWRpcmVjdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNnZXRDb21tZW50KCkKLSAgICovCi0gIHB1YmxpYyBDb21tZW50IGdldENvbW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuY29tbWVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGUjc2V0Q29tbWVudChDb21tZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNnZXRSZWRpcmVjdExpc3QoKQotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRSZWRpcmVjdExpc3QoKQotICB7Ci0gICAgcmV0dXJuIHJlZGlyZWN0TGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGUjYWRkUmVkaXJlY3QoUmVkaXJlY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRSZWRpcmVjdChSZWRpcmVjdCByZWRpcmVjdCkKLSAgewotICAgIHJlZGlyZWN0TGlzdC5hZGQocmVkaXJlY3QpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNzZXRSZWRpcmVjdExpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVkaXJlY3RMaXN0KFZlY3RvciByZWRpcmVjdExpc3QpCi0gIHsKLSAgICB0aGlzLnJlZGlyZWN0TGlzdCA9IHJlZGlyZWN0TGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgbWFuLWluLXRoZS1taWRkbGUgY29tbWVudCAuLi4gIiArIHRoaXMuY29tbWVudCk7Ci0KLSAgICAvLyBSZWRpcmVjdCBsaXN0Ci0gICAgaW50IGNvdW50ID0gMTsKLSAgICBSZWRpcmVjdCByZWRpcmVjdDsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHJlZGlyZWN0TGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgcmVkaXJlY3QgZWxlbWVudAotICAgICAgcmVkaXJlY3QgPSAoUmVkaXJlY3QpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHB3LnByaW50bG4oIiAgcmVkaXJlY3QgWyIgKyBjb3VudCsrICsiXSIpOwotICAgICAgcHcucHJpbnQocmVkaXJlY3QudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBTdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgLy8gQ29tbWVudAotICAgIGlmICh0aGlzLmNvbW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludGxuKHRoaXMuY29tbWVudC50b1hNTFN0cmluZyhuc05hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBSZWRpcmVjdAotICAgIFJlZGlyZWN0IHJlZGlyZWN0OwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcmVkaXJlY3RMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgbmV4dCByZWRpcmVjdCBlbGVtZW50Ci0gICAgICByZWRpcmVjdCA9IChSZWRpcmVjdCkgaXRlcmF0b3IubmV4dCgpOwotICAgICAgcHcucHJpbnQocmVkaXJlY3QudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gRW5kIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODY5NjZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvTW9uaXRvckNvbmZpZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5Nb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Db21tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTW9uaXRvckNvbmZpZ0ltcGwgaW1wbGVtZW50cyBNb25pdG9yQ29uZmlnCi17Ci0gIC8qKgotICAgKiBNZXNzYWdlIGxpc3QgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogTW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dVUkk7Ci0KLSAgLyoqCi0gICAqIFJlcGxhY2UgbG9nIGluZGljYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHJlcGxhY2VMb2cgPSBmYWxzZTsKLQotICAvKioKLSAgICogU3R5bGUgc2hlZXQgZGVjbGFyYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0OwotCi0gIC8qKgotICAgKiBMb2cgZHVyYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGxvZ0R1cmF0aW9uID0gNjAwOwotCi0gIC8qKgotICAgKiBUaW1lb3V0LgotICAgKi8KLSAgcHJvdGVjdGVkIGludCB0aW1lb3V0ID0gMzsKLQotICAvKioKLSAgICogTWFuLWluLXRoZS1taWRkbGUgc2V0dGluZ3MuCi0gICAqLwotICBwcm90ZWN0ZWQgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBWZXJib3NlIG9wdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbWVzc2FnZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0Q29tbWVudCgpCi0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCkKLSAgewotICAgIHJldHVybiB0aGlzLmNvbW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0Q29tbWVudChDb21tZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI2dldExvZ0xvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubG9nVVJJOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI3NldExvZ0xvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0xvY2F0aW9uKFN0cmluZyBsb2dVUkkpCi0gIHsKLSAgICB0aGlzLmxvZ1VSSSA9IGxvZ1VSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRSZXBsYWNlTG9nKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFJlcGxhY2VMb2coKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwbGFjZUxvZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNzZXRSZXBsYWNlTG9nKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBsYWNlTG9nKGJvb2xlYW4gcmVwbGFjZUxvZykKLSAgewotICAgIHRoaXMucmVwbGFjZUxvZyA9IHJlcGxhY2VMb2c7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0QWRkU3R5bGVTaGVldCgpCi0gICAqLwotICBwdWJsaWMgQWRkU3R5bGVTaGVldCBnZXRBZGRTdHlsZVNoZWV0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmFkZFN0eWxlU2hlZXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0QWRkU3R5bGVTaGVldChvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRTdHlsZVNoZWV0KEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCkKLSAgewotICAgIHRoaXMuYWRkU3R5bGVTaGVldCA9IGFkZFN0eWxlU2hlZXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0TG9nRHVyYXRpb24oKQotICAgKi8KLSAgcHVibGljIGludCBnZXRMb2dEdXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbG9nRHVyYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0TG9nRHVyYXRpb24oaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nRHVyYXRpb24oaW50IGxvZ0R1cmF0aW9uKQotICB7Ci0gICAgdGhpcy5sb2dEdXJhdGlvbiA9IGxvZ0R1cmF0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI2dldFRpbWVvdXQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRUaW1lb3V0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRpbWVvdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0VGltZW91dChpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lb3V0KGludCB0aW1lb3V0KQotICB7Ci0gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRNYW5JblRoZU1pZGRsZSgpCi0gICAqLwotICBwdWJsaWMgTWFuSW5UaGVNaWRkbGUgZ2V0TWFuSW5UaGVNaWRkbGUoKQotICB7Ci0gICAgcmV0dXJuIG1hbkluVGhlTWlkZGxlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI3NldE1hbkluVGhlTWlkZGxlKE1hbkluVGhlTWlkZGxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWFuSW5UaGVNaWRkbGUoTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUpCi0gIHsKLSAgICB0aGlzLm1hbkluVGhlTWlkZGxlID0gbWFuSW5UaGVNaWRkbGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRWZXJib3NlT3B0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZlcmJvc2VPcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudmVyYm9zZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNzZXRWZXJib3NlT3B0aW9uKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWZXJib3NlT3B0aW9uKGJvb2xlYW4gdmVyYm9zZSkKLSAgewotICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDb25maWcgb3B0aW9ucwotICAgIHB3LnByaW50bG4oIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBDb21tZW50Ci0gICAgaWYgKHRoaXMuY29tbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KGNvbW1lbnQudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gTG9nIGZpbGUKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9MT0dfRklMRSArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfUkVQTEFDRSArICI9XCIiICsgdGhpcy5yZXBsYWNlTG9nICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04gKyAiPVwiIiArIHRoaXMubG9nVVJJICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldEFkZFN0eWxlU2hlZXQoKS50b1hNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0gICAgcHcucHJpbnRsbigiICAgIDwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFICsgIj4iKTsKLQotICAgIC8vIExvZyBkdXJhdGlvbgotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy5sb2dEdXJhdGlvbik7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTE9HX0RVUkFUSU9OICsgIj4iKTsKLQotICAgIC8vIFRpbWVvdXQKLSAgICBwdy5wcmludCgKLSAgICAgICIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0NMRUFOVVBfVElNRU9VVF9TRUNPTkRTICsgIj4iKTsKLSAgICBwdy5wcmludCh0aGlzLnRpbWVvdXQpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0NMRUFOVVBfVElNRU9VVF9TRUNPTkRTICsgIj4iKTsKLQotICAgIC8vIE1hbi1pbi10aGUtbWlkZGxlCi0gICAgaWYgKHRoaXMubWFuSW5UaGVNaWRkbGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChtYW5JblRoZU1pZGRsZS50b1hNTFN0cmluZyhuc05hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgY29tbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuY29tbWVudCk7Ci0gICAgcHcucHJpbnRsbigiICBsb2dVUkkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dVUkkpOwotICAgIHB3LnByaW50bG4oIiAgcmVwbGFjZUxvZyAuLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMucmVwbGFjZUxvZyk7Ci0gICAgcHcucHJpbnRsbigiICBsb2dEdXJhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dEdXJhdGlvbik7Ci0gICAgcHcucHJpbnRsbigiICB0aW1lb3V0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy50aW1lb3V0KTsKLQotICAgIC8vIGFkZFN0eWxlU2hlZXQKLSAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0ICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKAotICAgICAgICAiICBhZGRTdHlsZVNoZWV0IC4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5hZGRTdHlsZVNoZWV0LnRvU3RyaW5nKCkpOwotCi0gICAgLy8gTWFuLWluLXRoZS1taWRkbGUKLSAgICBpZiAodGhpcy5tYW5JblRoZU1pZGRsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KHRoaXMubWFuSW5UaGVNaWRkbGUudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGNvbmZpZyB2YWx1ZXMgZnJvbSBhbm90aGVyIG1vbml0b3IgY29uZmlnIG9iamVjdC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRDb25maWcoTW9uaXRvckNvbmZpZyBtb25pdG9yQ29uZmlnKQotICB7Ci0gICAgLy8gQUREOiBTaG91bGQgdGhpcyBiZSBhIGNsb25lIG9wZXJhdGlvbj8KLSAgICB0aGlzLmNvbW1lbnQgPSBtb25pdG9yQ29uZmlnLmdldENvbW1lbnQoKTsKLSAgICB0aGlzLmRvY3VtZW50VVJJID0gbW9uaXRvckNvbmZpZy5nZXRMb2NhdGlvbigpOwotICAgIHRoaXMubG9nVVJJID0gbW9uaXRvckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpOwotICAgIHRoaXMucmVwbGFjZUxvZyA9IG1vbml0b3JDb25maWcuZ2V0UmVwbGFjZUxvZygpOwotICAgIHRoaXMubG9nRHVyYXRpb24gPSBtb25pdG9yQ29uZmlnLmdldExvZ0R1cmF0aW9uKCk7Ci0gICAgdGhpcy50aW1lb3V0ID0gbW9uaXRvckNvbmZpZy5nZXRUaW1lb3V0KCk7Ci0gICAgdGhpcy5tYW5JblRoZU1pZGRsZSA9IG1vbml0b3JDb25maWcuZ2V0TWFuSW5UaGVNaWRkbGUoKTsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBtb25pdG9yQ29uZmlnLmdldEFkZFN0eWxlU2hlZXQoKTsKLSAgICB0aGlzLnZlcmJvc2UgPSBtb25pdG9yQ29uZmlnLmdldFZlcmJvc2VPcHRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBWZXJpZnkgY29uZmlnIG9wdGlvbnMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmVyaWZ5Q29uZmlnKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgbm8gcmVkaXJlY3Qgc3RhdGVtZW50cywgdGhlbiBleGl0Ci0gICAgaWYgKCh0aGlzLm1hbkluVGhlTWlkZGxlID09IG51bGwpCi0gICAgICB8fCAodGhpcy5tYW5JblRoZU1pZGRsZS5nZXRSZWRpcmVjdExpc3QoKSA9PSBudWxsKQotICAgICAgfHwgKHRoaXMubWFuSW5UaGVNaWRkbGUuZ2V0UmVkaXJlY3RMaXN0KCkuc2l6ZSgpID09IDApKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA1IiwKLSAgICAgICAgICAiTW9uaXRvciBjb25maWcgZmlsZSBkaWQgbm90IGNvbnRhaW4gYW55IHJlZGlyZWN0IHN0YXRlbWVudHMuIikpOwotICAgIH0KLQotICAgIGlmICh0aGlzLmxvZ1VSSSA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAiTW9uaXRvciBjb25maWcgZmlsZSBkaWQgbm90IGNvbnRhaW4gdGhlIGxvZyBmaWxlIFVSSS4iKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VBcmdzKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBuZXcgY29uZmlnIHJlYWRlcgotICAgIE1vbml0b3JDb25maWdSZWFkZXIgbW9uaXRvckNvbmZpZ1JlYWRlciA9IG5ldyBNb25pdG9yQ29uZmlnUmVhZGVySW1wbCgpOwotCi0gICAgLy8gTW9uaXRvciBjb25maWcgb2JqZWN0IHdoaWNoIHdpbGwgYmUgbWVyZ2VkIGFmdGVyIGFsbCBvZiB0aGUgaW5wdXQgcGFybXMgYXJlIHByb2Nlc3NlZAotICAgIE1vbml0b3JDb25maWcgbW9uaXRvckNvbmZpZ0Zyb21BcmdzID0gbnVsbDsKLQotICAgIC8vIElmIG5vIGlucHV0IGFyZ3VtZW50cywgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICAvLyBBREQ6IAotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgidXNhZ2UwMSIsIE1vbml0b3IuVVNBR0VfTUVTU0FHRSkpOwotICAgIH0KLQotICAgIC8vIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGxvY2F0ZSB0aGUgY29uZmlnIGZpbGUgb3B0aW9uIChpZiBpdCB3YXMgc3BlY2lmaWVkKQotICAgIGZvciAoaW50IGFyZ0NvdW50ID0gMDsgYXJnQ291bnQgPCBhcmdzLmxlbmd0aDsgYXJnQ291bnQrKykKLSAgICB7Ci0gICAgICAvLyAtY29uZmlnRmlsZQotICAgICAgaWYgKChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItY29uZmlnIikpCi0gICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1jIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3MgPQotICAgICAgICAgIG1vbml0b3JDb25maWdSZWFkZXIucmVhZE1vbml0b3JDb25maWcoYXJnc1thcmdDb3VudF0pOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIGNvbmZpZyBmaWxlIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNyZWF0ZSBhbmFseXplciBjb25maWcgb2JqZWN0Ci0gICAgaWYgKG1vbml0b3JDb25maWdGcm9tQXJncyA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vbml0b3JDb25maWdGcm9tQXJncyA9IG5ldyBNb25pdG9yQ29uZmlnSW1wbCgpOwotICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLmluaXQodGhpcy5tZXNzYWdlTGlzdCk7Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgYWxsIG9mIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgZm9yIChpbnQgYXJnQ291bnQgPSAwOyBhcmdDb3VudCA8IGFyZ3MubGVuZ3RoOyBhcmdDb3VudCsrKQotICAgIHsKLSAgICAgIC8vIC1jb25maWdGaWxlCi0gICAgICBpZiAoKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb25maWciKSkKLSAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLWMiKSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNraXAgdGhpcyBvcHRpb24gc2luY2UgaXQgd2FzIGFscmVhZHkgcHJvY2Vzc2VkCi0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1jb21tZW50Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb21tZW50IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUMiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoYXJnc1thcmdDb3VudF0pOwotICAgICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0Q29tbWVudChjb21tZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gLWxvZ0ZpbGUKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWxvZ0ZpbGUiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItbCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldExvZ0xvY2F0aW9uKGFyZ3NbYXJnQ291bnRdKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXJlcGxhY2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXJlcGxhY2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItciIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldFJlcGxhY2VMb2coCi0gICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGFyZ3NbYXJnQ291bnRdKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1sb2dEdXJhdGlvbgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItbG9nRHVyYXRpb24iKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItZCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldExvZ0R1cmF0aW9uKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuaW50VmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC10aW1lb3V0Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi10aW1lb3V0IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLXQiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIG1vbml0b3JDb25maWdGcm9tQXJncy5zZXRUaW1lb3V0KAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuaW50VmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1tYW5JblRoZU1pZGRsZQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItbWFuSW5UaGVNaWRkbGUiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItbSIpKSkKLSAgICAgIHsKLSAgICAgICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBudWxsOwotCi0gICAgICAgIC8vIEluY3JlbWVudCBhcmcgY291bnQKLSAgICAgICAgYXJnQ291bnQrKzsKLQotICAgICAgICAvLyBHZXQgdGhlIG1hbi1pbi10aGUtbWlkZGxlIG9iamVjdAotICAgICAgICBpZiAoKG1hbkluVGhlTWlkZGxlID0gbW9uaXRvckNvbmZpZ0Zyb21BcmdzLmdldE1hbkluVGhlTWlkZGxlKCkpCi0gICAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgICBtYW5JblRoZU1pZGRsZSA9IG5ldyBNYW5JblRoZU1pZGRsZUltcGwoKTsKLQotICAgICAgICAvLyBBREQ6IENoZWNrIGZvciBjb3JyZWN0IG51bWJlciBvZiByZW1haW5pbmcgYXJncwotCi0gICAgICAgIC8vIENyZWF0ZSByZWRpcmVjdAotICAgICAgICBSZWRpcmVjdCByZWRpcmVjdCA9IG5ldyBSZWRpcmVjdEltcGwoKTsKLQotICAgICAgICAvLyBHZXQgdGhlIHJlZGlyZWN0IHZhbHVlcyAKLSAgICAgICAgcmVkaXJlY3Quc2V0TGlzdGVuUG9ydChJbnRlZ2VyLnZhbHVlT2YoYXJnc1thcmdDb3VudCsrXSkuaW50VmFsdWUoKSk7Ci0gICAgICAgIHJlZGlyZWN0LnNldEhvc3QoYXJnc1thcmdDb3VudCsrXSk7Ci0gICAgICAgIHJlZGlyZWN0LnNldE1heENvbm5lY3Rpb25zKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50KytdKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgcmVkaXJlY3Quc2V0UmVhZFRpbWVvdXRTZWNvbmRzKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50KytdKS5pbnRWYWx1ZSgpKTsKLQotICAgICAgICAvLyBBZGQgcmVkaXJlY3QKLSAgICAgICAgbWFuSW5UaGVNaWRkbGUuYWRkUmVkaXJlY3QocmVkaXJlY3QpOwotCi0gICAgICAgIC8vIFNldCB0aGUgbWFuLWluLXRoZS1taWRkbGUKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldE1hbkluVGhlTWlkZGxlKG1hbkluVGhlTWlkZGxlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXZlcmJvc2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXZlcmJvc2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItdiIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgLy9tb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0VmVyYm9zZU9wdGlvbihCb29sZWFuLnZhbHVlT2YoYXJnc1thcmdDb3VudF0pLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldFZlcmJvc2VPcHRpb24odHJ1ZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1HVUkKLSAgICAgIGVsc2UgaWYgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1HVUkiKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSWdub3JlIC1HVUkgb3B0aW9uCi0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzAxIiwKLSAgICAgICAgICAgIGFyZ3NbYXJnQ291bnRdLAotICAgICAgICAgICAgIlRoZSBzcGVjaWZpZWQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIikpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIGFkZFN0eWxlU2hlZXQgd2FzIG5vdCBzcGVjaWZpZWQsIHRoZW4gY3JlYXRlIGEgY29tbWVudCB2ZXJzaW9uIG9mIGl0Ci0gICAgaWYgKG1vbml0b3JDb25maWdGcm9tQXJncy5nZXRBZGRTdHlsZVNoZWV0KCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQgPSBuZXcgQWRkU3R5bGVTaGVldEltcGwoKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0SHJlZihXU0lDb25zdGFudHMuREVGQVVMVF9MT0dfWFNMKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0VHlwZShXU0lDb25zdGFudHMuREVGQVVMVF9YU0xfVFlQRSk7Ci0gICAgICBhZGRTdHlsZVNoZWV0LnNldENvbW1lbnQodHJ1ZSk7Ci0gICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLSAgICB9Ci0KLSAgICAvLyBNZXJnZSBjb25maWcgaW5mbyBpbnRvIHRoaXMgb2JqZWN0Ci0gICAgc2V0Q29uZmlnKG1vbml0b3JDb25maWdGcm9tQXJncyk7Ci0KLSAgICAvLyBWZXJpZnkgY29uZmlnIG9wdGlvbnMKLSAgICB2ZXJpZnlDb25maWcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJRCwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UobWVzc2FnZUlELCBudWxsLCBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKAotICAgIFN0cmluZyBtZXNzYWdlSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgaWYgKG1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgZWxzZQotICAgICAgbWVzc2FnZSArPSAiICIgKyBtZXNzYWdlRGF0YSArICIuIjsKLQotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01vbml0b3JDb25maWdSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01vbml0b3JDb25maWdSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNGFiY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lGaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWdSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gdXNlZCB0byByZWFkIHRoZSBtb25pdG9yIGNvbmZpZyBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE1vbml0b3JDb25maWdSZWFkZXJJbXBsIGltcGxlbWVudHMgTW9uaXRvckNvbmZpZ1JlYWRlcgotewotICAvKioKLSAgICogTWVzc2FnZSBsaXN0IHJlZmVyZW5jZS4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbWVzc2FnZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWdSZWFkZXIjcmVhZE1vbml0b3JDb25maWcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgcmVhZE1vbml0b3JDb25maWcoU3RyaW5nIG1vbml0b3JDb25maWdVUkkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihtb25pdG9yQ29uZmlnVVJJKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgiY29uZmlnMDIiLCBtb25pdG9yQ29uZmlnVVJJLCAiQ291bGQgbm90IGZpbmQgZmlsZToiKSwKLSAgICAgICAgZm5mZSk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoImNvbmZpZzAzIiwgbW9uaXRvckNvbmZpZ1VSSSwgIkNvdWxkIG5vdCByZWFkIGZpbGU6IiksCi0gICAgICAgIGUpOwotICAgIH0KLQotICAgIHJldHVybiByZWFkTW9uaXRvckNvbmZpZyhmaWxlUmVhZGVyKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlciNyZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIpCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZyByZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcgPSBuZXcgTW9uaXRvckNvbmZpZ0ltcGwoKTsKLQotICAgIC8vIFBhcnNlIFhNTAotICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlYWRlcik7Ci0KLSAgICAvLyBQYXJzZSBlbGVtZW50cyBpbiB0aGUgY29uZmlnIGRvY3VtZW50Ci0gICAgcGFyc2VDb25maWdFbGVtZW50KG1vbml0b3JDb25maWcsIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0KLSAgICByZXR1cm4gbW9uaXRvckNvbmZpZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjc2V0TG9jYXRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGRvY3VtZW50VVJJKQotICB7Ci0gICAgdGhpcy5kb2N1bWVudFVSSSA9IGRvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGNvbmZpZyBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlQ29uZmlnRWxlbWVudChNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcsIEVsZW1lbnQgZWxlbWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBBREQ6IFZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgYm9vbGVhbiBpc0xvZ0R1cmF0aW9uRGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc0NsZWFudXBUaW1lb3V0U2Vjb25kc0RlZmluZSA9IGZhbHNlOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8bG9nRmlsZT4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUGFyc2UgdGhlIGxvZyBlbGVtZW50Ci0gICAgICAgIHBhcnNlTG9nRmlsZUVsZW1lbnQobW9uaXRvckNvbmZpZywgbmV4dEVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyA8bG9nRHVyYXRpb24+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTikpCi0gICAgICB7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0TG9nRHVyYXRpb24oZ2V0SW50VmFsdWUobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaWYgKG1vbml0b3JDb25maWcuZ2V0TG9nRHVyYXRpb24oKSA8IDApCi0gICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgICAgICJjb25maWcwOSIsCi0gICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiwKLSAgICAgICAgICAgICAgIlBhcmFtZXRlciB2YWx1ZSBjYW4ndCBiZSBuZWdhdGl2ZS4gRWxlbWVudCBuYW1lOiIpKTsKLSAgICAgICAgaXNMb2dEdXJhdGlvbkRlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUykpCi0gICAgICB7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0VGltZW91dChnZXRJbnRWYWx1ZShuZXh0RWxlbWVudCkpOwotICAgICAgICBpZiAobW9uaXRvckNvbmZpZy5nZXRUaW1lb3V0KCkgPCAwKQotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgICAiY29uZmlnMDkiLAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUywKLSAgICAgICAgICAgICAgIlBhcmFtZXRlciB2YWx1ZSBjYW4ndCBiZSBuZWdhdGl2ZS4gRWxlbWVudCBuYW1lOiIpKTsKLSAgICAgICAgaXNDbGVhbnVwVGltZW91dFNlY29uZHNEZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8bWFuSW5UaGVNaWRkbGU+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX01BTl9JTl9USEVfTUlERExFKSkKLSAgICAgIHsKLSAgICAgICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBuZXcgTWFuSW5UaGVNaWRkbGVJbXBsKCk7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0TWFuSW5UaGVNaWRkbGUobWFuSW5UaGVNaWRkbGUpOwotICAgICAgICBwYXJzZU1hbkluVGhlTWlkZGxlRWxlbWVudChtYW5JblRoZU1pZGRsZSwgbmV4dEVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyA8Y29tbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkpCi0gICAgICB7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgICBtb25pdG9yQ29uZmlnLnNldENvbW1lbnQoY29tbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQUREOiBoYW5kbGUgaW52YWxpZCBlbGVtZW50cwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzTG9nRHVyYXRpb25EZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiwKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotICAgIH0KLSAgICBpZiAoIWlzQ2xlYW51cFRpbWVvdXRTZWNvbmRzRGVmaW5lKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzEwIiwKLSAgICAgICAgICBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUywKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBsb2dGaWxlIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VMb2dGaWxlRWxlbWVudCgKLSAgICBNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgbG9jYXRpb24gYXR0cmlidXRlCi0gICAgbW9uaXRvckNvbmZpZy5zZXRMb2dMb2NhdGlvbigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OKSk7Ci0KLSAgICAvLyBHZXQgdGhlIHJlcGxhY2UgYXR0cmlidXRlCi0gICAgbW9uaXRvckNvbmZpZy5zZXRSZXBsYWNlTG9nKAotICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1JFUExBQ0UsIGZhbHNlKSk7Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8YWRkU3R5bGVTaGVldD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0FERF9TVFlMRV9TSEVFVCkpCi0gICAgICB7Ci0gICAgICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotCi0gICAgICAgIC8vIFBhcnNlIHRoZSBlbGVtZW50ICAKLSAgICAgICAgVGVzdFV0aWxzLnBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICBhZGRTdHlsZVNoZWV0LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX0xPR19YU0wpOwotCi0gICAgICAgIC8vIFNldCBhZGQgc3R5bGUgc2hlZXQKLSAgICAgICAgbW9uaXRvckNvbmZpZy5zZXRBZGRTdHlsZVNoZWV0KGFkZFN0eWxlU2hlZXQpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIEFERDogaGFuZGxlIGludmFsaWQgZWxlbWVudHMKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIG1hbkludGhlTWlkZGxlIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VNYW5JblRoZU1pZGRsZUVsZW1lbnQoCi0gICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIHdoaWxlIChuZXh0RWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIDxyZWRpcmVjdD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1JFRElSRUNUKSkKLSAgICAgIHsKLSAgICAgICAgUmVkaXJlY3QgcmVkaXJlY3QgPSBuZXcgUmVkaXJlY3RJbXBsKCk7Ci0gICAgICAgIG1hbkluVGhlTWlkZGxlLmFkZFJlZGlyZWN0KHJlZGlyZWN0KTsKLSAgICAgICAgcGFyc2VSZWRpcmVjdEVsZW1lbnQocmVkaXJlY3QsIG5leHRFbGVtZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gPGNvbW1lbnQ+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQpKQotICAgICAgewotICAgICAgICBDb21tZW50IGNvbW1lbnQgPSBuZXcgQ29tbWVudEltcGwoKTsKLSAgICAgICAgY29tbWVudC5zZXRUZXh0KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgbWFuSW5UaGVNaWRkbGUuc2V0Q29tbWVudChjb21tZW50KTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBBREQ6IGhhbmRsZSBpbnZhbGlkIGVsZW1lbnRzCi0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBuZXh0IGVsZW1lbnQKLSAgICAgIG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcobmV4dEVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSByZWRpcmVjdCBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlUmVkaXJlY3RFbGVtZW50KFJlZGlyZWN0IHJlZGlyZWN0LCBFbGVtZW50IGVsZW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IGZpcnN0IGNoaWxkIGVsZW1lbnQKLSAgICBFbGVtZW50IG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLQotICAgIGJvb2xlYW4gaXNMaXN0ZW5Qb3J0RGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc1NjaGVtZUFuZEhvc3RQb3J0RGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc01heENvbm5lY3Rpb25zRGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc1JlYWRUaW1lb3V0U2Vjb25kc0RlZmluZSA9IGZhbHNlOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8bGlzdGVuUG9ydD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xJU1RFTl9QT1JUKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0TGlzdGVuUG9ydChnZXRJbnRWYWx1ZShuZXh0RWxlbWVudCkpOwotICAgICAgICBpc0xpc3RlblBvcnREZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8c2NoZW1lQW5kSG9zdFBvcnQ+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1NDSEVNRV9BTkRfSE9TVFBPUlQpKQotICAgICAgewotICAgICAgICByZWRpcmVjdC5zZXRIb3N0KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaXNTY2hlbWVBbmRIb3N0UG9ydERlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtYXhDb25uZWN0aW9ucz4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0TWF4Q29ubmVjdGlvbnMoZ2V0SW50VmFsdWUobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaXNNYXhDb25uZWN0aW9uc0RlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxyZWFkVGltZW91dFNlY29uZHM+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0UmVhZFRpbWVvdXRTZWNvbmRzKGdldEludFZhbHVlKG5leHRFbGVtZW50KSk7Ci0gICAgICAgIGlmIChyZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgImNvbmZpZzA5IiwKLSAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fUkVBRF9USU1FT1VUX1NFQ09ORFMsCi0gICAgICAgICAgICAgICJQYXJhbWV0ZXIgdmFsdWUgY2FuJ3QgYmUgbmVnYXRpdmUuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaXNSZWFkVGltZW91dFNlY29uZHNEZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8Y29tbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkpCi0gICAgICB7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgICByZWRpcmVjdC5zZXRDb21tZW50KGNvbW1lbnQpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIEFERDogaGFuZGxlIGludmFsaWQgZWxlbWVudHMKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotCi0gICAgaWYgKCFpc0xpc3RlblBvcnREZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xJU1RFTl9QT1JULAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICAgIGlmICghaXNTY2hlbWVBbmRIb3N0UG9ydERlZmluZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxMCIsCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fU0NIRU1FX0FORF9IT1NUUE9SVCwKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotCi0gICAgfQotICAgIGlmICghaXNNYXhDb25uZWN0aW9uc0RlZmluZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxMCIsCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TLAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICAgIGlmICghaXNSZWFkVGltZW91dFNlY29uZHNEZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTLAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgYW5hbHl6ZXIgY29uZmlnIG5hbWVzcGFjZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0VsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgcmV0dXJuIGlzRWxlbWVudCgKLSAgICAgIGVsZW1lbnQsCi0gICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywKLSAgICAgIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBhbmFseXplciBjb25maWcgbmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgU3RyaW5nIG5hbWVzcGFjZSwKLSAgICBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgcmV0dXJuIFhNTFV0aWxzLmlzRWxlbWVudChlbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGVsZW1lbnQgdGV4dCBhcyBhbiBpbnQuCi0gICAqLwotICBwcml2YXRlIGludCBnZXRJbnRWYWx1ZShFbGVtZW50IGVsZW1lbnQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGludCByZXR1cm5WYWx1ZTsKLSAgICBTdHJpbmcgaW50VmFsdWUgPSBudWxsOwotCi0gICAgLy8gR2V0IHZhbHVlIGFzIGEgc3RyaW5nCi0gICAgaWYgKChpbnRWYWx1ZSA9IFhNTFV0aWxzLmdldFRleHQoZWxlbWVudCkpID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMDQiLAotICAgICAgICAgIGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkgKyAiRWxlbWVudCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlciB2YWx1ZToiKSk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVyblZhbHVlID0gSW50ZWdlci52YWx1ZU9mKGludFZhbHVlKS5pbnRWYWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBpbnQKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlSUQsIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlKG1lc3NhZ2VJRCwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNzYWdlIGZyb20gcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgbWVzc2FnZUlELAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlOwotICAgIGlmIChtZXNzYWdlTGlzdCAhPSBudWxsKQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICAgIGVsc2UKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGEgKyAiLiI7Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9SZWRpcmVjdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvUmVkaXJlY3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZDE2OWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9SZWRpcmVjdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLkNvbW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci0KLS8qKgotICogIFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgbW9uaXRvciBjb25maWcgUmVkaXJlY3QgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVkaXJlY3RJbXBsIGltcGxlbWVudHMgUmVkaXJlY3QKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50OwotCi0gIC8qKgotICAgKiBMaXN0ZW4gcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgbGlzdGVuUG9ydDsKLQotICAvKioKLSAgICogSG9zdC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgaG9zdDsKLQotICAvKioKLSAgICogVG8gcHJvdG9jb2wuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHRvUHJvdG9jb2w7Ci0KLSAgLyoqCi0gICAqIFRvIHBvcnQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IHRvUG9ydDsKLQotICAvKioKLSAgICogVG8gaG9zdC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdG9Ib3N0OwotCi0gIC8qKgotICAgKiBNYXhpbXVtIGNvbm5lY3Rpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBtYXhDb25uZWN0aW9uczsKLQotICAvKioKLSAgICogUmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IHJlYWRUaW1lb3V0U2Vjb25kczsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldENvbW1lbnQoKQotICAgKi8KLSAgcHVibGljIENvbW1lbnQgZ2V0Q29tbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5jb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNzZXRDb21tZW50KGNvbW1lbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KENvbW1lbnQgY29tbWVudCkKLSAgewotICAgIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldExpc3RlblBvcnQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRMaXN0ZW5Qb3J0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmxpc3RlblBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldExpc3RlblBvcnQoaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGlzdGVuUG9ydChpbnQgbGlzdGVuUG9ydCkKLSAgewotICAgIHRoaXMubGlzdGVuUG9ydCA9IGxpc3RlblBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldEhvc3QoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRIb3N0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmhvc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldEhvc3QoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SG9zdChTdHJpbmcgaG9zdCkKLSAgewotICAgIHRoaXMuaG9zdCA9IGhvc3Q7Ci0KLSAgICAvLyBQYXJzZSBsb2NhdGlvbiB0byBnZXQgcHJvdG9jb2wsIGhvc3QgYW5kIHBvcnQKLSAgICBVUkwgdXJsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHVybCA9IG5ldyBVUkwoaG9zdCk7Ci0gICAgICB0aGlzLnRvUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTsKLSAgICAgIHRoaXMudG9Ib3N0ID0gdXJsLmdldEhvc3QoKTsKLSAgICAgIHRoaXMudG9Qb3J0ID0gdXJsLmdldFBvcnQoKTsKLSAgICAgIGlmICh0aGlzLnRvUG9ydCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHRoaXMudG9Qcm90b2NvbC5lcXVhbHNJZ25vcmVDYXNlKCJodHRwIikpCi0gICAgICAgICAgdGhpcy50b1BvcnQgPSA4MDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRoaXMudG9Qb3J0ID0gODA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdWUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlRoZSAiCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUCi0gICAgICAgICAgKyAiIG9wdGlvbiBjb250YWlucyBhbiBpbnZhbGlkIHZhbHVlOiAiCi0gICAgICAgICAgKyBob3N0KTsKLSAgICB9Ci0KLSAgICBpZiAoKHVybC5nZXRQYXRoKCkgIT0gbnVsbCAmJiAhdXJsLmdldFBhdGgoKS5lcXVhbHMoIiIpKQotICAgICAgfHwgKHVybC5nZXRRdWVyeSgpICE9IG51bGwgJiYgIXVybC5nZXRRdWVyeSgpLmVxdWFscygiIikpKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlRoZSAiCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUCi0gICAgICAgICAgKyAiIG9wdGlvbiBtdXN0IGNvbnRhaW4gb25seSBhIHNjaGVtZSwgaG9zdCBhbmQgcG9ydDogIgotICAgICAgICAgICsgaG9zdCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRvIHBvcnQuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRUb1BvcnQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRUb1BvcnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudG9Qb3J0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0byBob3N0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kubW9uaXRvci5jb25maWcuUmVkaXJlY3QjZ2V0VG9Ib3N0KCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Ib3N0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRvSG9zdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdG8gcHJvdG9jb2wuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRUb1Byb3RvY29sKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Qcm90b2NvbCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50b1Byb3RvY29sOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRNYXhDb25uZWN0aW9ucygpCi0gICAqLwotICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1heENvbm5lY3Rpb25zOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNzZXRNYXhDb25uZWN0aW9ucyhpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNYXhDb25uZWN0aW9ucyhpbnQgbWF4Q29ubmVjdGlvbnMpCi0gIHsKLSAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gbWF4Q29ubmVjdGlvbnM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldFJlYWRUaW1lb3V0U2Vjb25kcygpCi0gICAqLwotICBwdWJsaWMgaW50IGdldFJlYWRUaW1lb3V0U2Vjb25kcygpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZWFkVGltZW91dFNlY29uZHM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldFJlYWRUaW1lb3V0U2Vjb25kcyhpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWFkVGltZW91dFNlY29uZHMoaW50IHJlYWRUaW1lb3V0U2Vjb25kcykKLSAgewotICAgIHRoaXMucmVhZFRpbWVvdXRTZWNvbmRzID0gcmVhZFRpbWVvdXRTZWNvbmRzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgICAgY29tbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmNvbW1lbnQpOwotICAgIHB3LnByaW50bG4oIiAgICBsaXN0ZW5Qb3J0IC4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMubGlzdGVuUG9ydCk7Ci0gICAgcHcucHJpbnRsbigiICAgIGhvc3QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgY3V0SG9zdCh0aGlzLmhvc3QpKTsKLSAgICBwdy5wcmludGxuKCIgICAgbWF4Q29ubmVjdGlvbnMgLi4uLi4uLi4uLi4uICIgKyB0aGlzLm1heENvbm5lY3Rpb25zKTsKLSAgICBwdy5wcmludGxuKCIgICAgcmVhZFRpbWVvdXRTZWNvbmRzIC4uLi4uLi4uICIgKyB0aGlzLnJlYWRUaW1lb3V0U2Vjb25kcyk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBGb3JtYXRzIGhvc3QgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gKHBhdGggaXMgb21taXRlZCkuCi0gICAqIEBwYXJhbSBob3N0Ci0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGN1dEhvc3QoU3RyaW5nIGhvc3QpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgdXJsID0gbmV3IFVSTChob3N0KTsKLSAgICAgIFN0cmluZyBwb3J0ID0gdXJsLmdldFBvcnQoKSA+IC0xID8gU3RyaW5nLnZhbHVlT2YodXJsLmdldFBvcnQoKSkgOiAiODAiOwotICAgICAgLy8gUkVNT1ZFRDogVGhpcyBjb2RlIG9ubHkgd29ya3Mgb24gMS40Ci0gICAgICAvLyBTdHJpbmcudmFsdWVPZih1cmwuZ2V0RGVmYXVsdFBvcnQoKSk7Ci0gICAgICByZXR1cm4gdXJsLmdldFByb3RvY29sKCkgKyAiOi8vIiArIHVybC5nZXRIb3N0KCkgKyAiOiIgKyBwb3J0OwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGhvc3Q7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gU3RhcnQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRURJUkVDVCArICI+Iik7Ci0KLSAgICAvLyBDb21tZW50Ci0gICAgaWYgKHRoaXMuY29tbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4odGhpcy5jb21tZW50LnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIGxpc3RlblBvcnQKLSAgICBwdy5wcmludCgiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTElTVEVOX1BPUlQgKyAiPiIpOwotICAgIHB3LnByaW50KGdldExpc3RlblBvcnQoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTElTVEVOX1BPUlQgKyAiPiIpOwotCi0gICAgLy8gc2NoZW1lQW5kSG9zdFBvcnQKLSAgICBwdy5wcmludCgKLSAgICAgICIgICAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUICsgIj4iKTsKLSAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKGdldEhvc3QoKSkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NDSEVNRV9BTkRfSE9TVFBPUlQgKyAiPiIpOwotCi0gICAgLy8gbWF4Q29ubmVjdGlvbnMKLSAgICBwdy5wcmludCgiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TICsgIj4iKTsKLSAgICBwdy5wcmludChnZXRNYXhDb25uZWN0aW9ucygpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NQVhfQ09OTkVDVElPTlMgKyAiPiIpOwotCi0gICAgLy8gcmVhZFRpbWVvdXRTZWNvbmRzCi0gICAgcHcucHJpbnQoCi0gICAgICAiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fUkVBRF9USU1FT1VUX1NFQ09ORFMgKyAiPiIpOwotICAgIHB3LnByaW50KGdldFJlYWRUaW1lb3V0U2Vjb25kcygpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRUFEX1RJTUVPVVRfU0VDT05EUyArICI+Iik7Ci0KLSAgICAvLyBFbmQgRWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fUkVESVJFQ1QgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9FbnRyeVR5cGVMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL0VudHJ5VHlwZUxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ4ZDEzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL0VudHJ5VHlwZUxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIG1haW50YWluIGEgcHJvZmlsZSBFbnRyeVR5cGVMaXN0LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5VHlwZUxpc3QgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIExvZyBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19JTlBVVF9OT05FID0gIm5vbmUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dfSU5QVVRfUkVRVUVTVCA9ICJyZXF1ZXN0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX0lOUFVUX1JFU1BPTlNFID0gInJlc3BvbnNlIjsKLQotICAvKioKLSAgICogV1NETCBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfSU5QVVRfTk9ORSA9ICJub25lIjsKLQotICAvKioKLSAgICogVURESSBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVERElfSU5QVVRfTk9ORSA9ICJub25lIjsKLQotICAvKioKLSAgICogR2V0IGxvZyBpbnB1dC4KLSAgICogQHJldHVybiBsb2cgaW5wdXQuCi0gICAqIEBzZWUgI3NldExvZ0lucHV0Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvZ0lucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBsb2cgaW5wdXQuCi0gICAqIEBwYXJhbSBsb2dJbnB1dCBsb2cgaW5wdXQuCi0gICAqIEBzZWUgI2dldExvZ0lucHV0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dJbnB1dChTdHJpbmcgbG9nSW5wdXQpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBpbnB1dC4KLSAgICogQHJldHVybiBXU0RMIGlucHV0LgotICAgKiBAc2VlICNzZXRXU0RMSW5wdXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETElucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGlucHV0LgotICAgKiBAcGFyYW0gd3NkbElucHV0IFdTREwgaW5wdXQuCi0gICAqIEBzZWUgI2dldFdTRExJbnB1dAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETElucHV0KFN0cmluZyB3c2RsSW5wdXQpOwotCi0gIC8qKgotICAgKiBHZXQgVURESSBpbnB1dC4KLSAgICogQHJldHVybiBVRERJIGlucHV0LgotICAgKiBAc2VlICNzZXRVRERJSW5wdXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VURESUlucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBVRERJIGlucHV0LgotICAgKiBAcGFyYW0gdWRkaUlucHV0IFVEREkgaW5wdXQuCi0gICAqIEBzZWUgI2dldFVERElJbnB1dAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VURESUlucHV0KFN0cmluZyB1ZGRpSW5wdXQpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Byb2ZpbGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzMyNmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gbWFpbnRhaW4gUHJvZmlsZSBpbmZvcm1hdGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBQcm9maWxlIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFydGlmYWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Byb2ZpbGVBcnRpZmFjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTM0ZjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFydGlmYWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLQotLyoqCi0gKiBBbiBhcnRpZmFjdCBjb250YWlucyBhIHNldCBvZiByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFByb2ZpbGVBcnRpZmFjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCB0eXBlLgotICAgKiBAcmV0dXJuIGFydGlmYWN0IHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBBcnRpZmFjdFR5cGUgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgYW4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHNlZSAjZ2V0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShBcnRpZmFjdFR5cGUgdHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBzcGVjaWZpY2F0aW9uIGxpc3QuCi0gICAqIEByZXR1cm4gc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAc2VlICNzZXRTcGVjaWZpY2F0aW9uTGlzdAotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRTcGVjaWZpY2F0aW9uTGlzdCgpOwotCi0gIC8qKgotICAgKiBTZXQgc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAcGFyYW0gc3BlY2lmaWNhdGlvbkxpc3Qgc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAc2VlICNnZXRTcGVjaWZpY2F0aW9uTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yIHNwZWNpZmljYXRpb25MaXN0KTsKLQotICAvKioKLSAgICogR2V0IHRlc3QgYXNzZXJ0aW9uIGxpc3QuCi0gICAqIEByZXR1cm4gdGVzdCBhc3NlcnRpb24gbGlzdC4KLSAgICovCi0gIHB1YmxpYyBMaW5rZWRMaXN0IGdldFRlc3RBc3NlcnRpb25MaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGlkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIFRlc3RBc3NlcnRpb24gZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcgaWQpOwotCi0gIC8qKgotICAgKiBBZGQgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9ucy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzY3NzYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFzc2VydGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgbWFpbnRhaW5zIHByb2ZpbGUgYXNzZXJ0aW9ucy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBQcm9maWxlQXNzZXJ0aW9ucyBleHRlbmRzIFdTSURvY3VtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9QUk9GSUxFX0FTU0VSVElPTlM7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHByb2ZpbGVzLgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgcHJvZmlsZXMuCi0gICAqIEBzZWUgI3NldFByb2ZpbGVMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFByb2ZpbGVMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBsaXN0IG9mIHByb2ZpbGVzLgotICAgKiBAcGFyYW0gcHJvZmlsZUxpc3QgbGlzdCBvZiBwcm9maWxlcy4KLSAgICogQHNlZSAjZ2V0UHJvZmlsZUxpc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2ZpbGVMaXN0KFZlY3RvciBwcm9maWxlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIEFkZCBwcm9maWxlLgotICAgKiBAcGFyYW0gcHJvZmlsZSBwcm9maWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUHJvZmlsZShQcm9maWxlIHByb2ZpbGUpOwotCi0gIC8qKgotICAgKiBHZXQgbGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gbGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqIEBzZWUgI3NldEFydGlmYWN0TGlzdAotICAgKi8KLSAgcHVibGljIFRyZWVNYXAgZ2V0QXJ0aWZhY3RMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHR5cGUgYW4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHJldHVybiBhIHByb2ZpbGUgYXJ0aWZhY3QgYmFzZWQgb24gdGhlIGdpdmVuIHR5cGUuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFydGlmYWN0IGdldEFydGlmYWN0KFN0cmluZyB0eXBlKTsKLQotICAvKioKLSAgICogU2V0IGxpc3Qgb2YgYXJ0aWZhY3RzLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RMaXN0IGEgbGlzdCBwZiBwcm9maWxlIGFydGlmaWFjdHMuCi0gICAqIEBzZWUgI2dldEFydGlmYWN0TGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXJ0aWZhY3RMaXN0KFRyZWVNYXAgYXJ0aWZhY3RMaXN0KTsKLQotICAvKioKLSAgICogQWRkIGFydGlmYWN0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgcHJvZmlsZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFydGlmYWN0KFByb2ZpbGVBcnRpZmFjdCBhcnRpZmFjdCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGlkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIFRlc3RBc3NlcnRpb24gZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcgaWQpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBwcm9maWxlIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRBRE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnROYW1lIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRBRE5hbWUoU3RyaW5nIGRvY3VtZW50TmFtZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUQURWZXJzaW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbiBkb2N1bWVudC4KLSAgICogQHBhcmFtIGRvY3VtZW50VmVyc2lvbiB0aGUgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUQURWZXJzaW9uKFN0cmluZyBkb2N1bWVudFZlcnNpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGIwYTNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIGEgcHJvZmlsZSBhc3NlcnRpb25zIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVyIGV4dGVuZHMgRG9jdW1lbnRSZWFkZXIKLXsKLSAgLyoqCi0gICAqIFJlYWQgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyBmaWxlLgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uc1VSSSBoZSBwcm9maWxlIGFzc2VydGlvbnMgZmlsZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiB0aGUgUHJvZmlsZUFzc2VydGlvbnMgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VyIHdoaWxlIHJlYWRpbmcgdGhlIGZpbGUuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgcmVhZFByb2ZpbGVBc3NlcnRpb25zKFN0cmluZyBhc3NlcnRpb25zVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyAgZmlsZS4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIFByb2ZpbGVBc3NlcnRpb25zIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gIGlmIHByb2JsZW0gb2NjdXIgd2hpbGUgcmVhZGluZyB0aGUgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXNzZXJ0aW9ucyByZWFkUHJvZmlsZUFzc2VydGlvbnMoUmVhZGVyIHJlYWRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9UZXN0QXNzZXJ0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Rlc3RBc3NlcnRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBlYTRiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Rlc3RBc3NlcnRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qKgotICogQSB0ZXN0IGFzc2VydGlvbiBpcyBvbmUgYXNzZXJ0aW9uIGluIGEgcHJvZmlsZSBkZWZpbml0aW9uLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBUZXN0QXNzZXJ0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfSU5GT1JNQVRJT05BTCA9ICJpbmZvcm1hdGlvbmFsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9SRUNPTU1FTkRFRCA9ICJyZWNvbW1lbmRlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfUkVRVUlSRUQgPSAicmVxdWlyZWQiOwotICAvKioKLSAgICogR2V0IHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAc2VlICNzZXRJZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gaWQuCi0gICAqIEBwYXJhbSBpZCB0ZXN0IGFzc2VydGlvbiBpZC4KLSAgICogQHNlZSAjZ2V0SWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbiB0eXBlLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uIHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gdHlwZS4KLSAgICogQHBhcmFtICB0eXBlIHRlc3QgYXNzZXJ0aW9uIHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gIC8qKgotICAgKiBHZXQgdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEByZXR1cm4gdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEBzZWUgI3NldEVudHJ5VHlwZU5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW50cnlUeXBlTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEBwYXJhbSBlbnRyeVR5cGVOYW1lIHRlc3QgYXNzZXJ0aW9uIHByaW1hcnkgZW50cnkgdHlwZSBuYW1lLgotICAgKiBAc2VlICNnZXRFbnRyeVR5cGVOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRyeVR5cGVOYW1lKFN0cmluZyBlbnRyeVR5cGVOYW1lKTsKLQotICAvKioKLSAgICogR2V0IGVuYWJsZWQgaW5kaWNhdG9yLgotICAgKiBAcmV0dXJuIGVuYWJsZWQgaW5kaWNhdG9yLgotICAgKiBAc2VlICNzZXRFbmFibGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKTsKLQotICAvKioKLSAgICogU2V0ICBlbmFibGVkIGluZGljYXRvci4KLSAgICogQHBhcmFtIGVuYWJsZWQgZW5hYmxlZCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2lzRW5hYmxlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwotCi0gIC8qKgotICAgKiBHZXQgY29udGV4dC4KLSAgICogQHJldHVybiBjb250ZXh0LgotICAgKiBAc2VlICNzZXRDb250ZXh0Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHQoKTsKLQotICAvKioKLSAgICogU2V0IGNvbnRleHQuCi0gICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQuCi0gICAqIEBzZWUgI2dldENvbnRleHQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoU3RyaW5nIGNvbnRleHQpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbkRlc2NyaXB0aW9uIGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbkRlc2NyaXB0aW9uKFN0cmluZyBhc3NlcnRpb25EZXNjcmlwdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBmYWlsdXJlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAc2VlICNzZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGYWlsdXJlTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBTZXQgZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZmFpbHVyZU1lc3NhZ2UgZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZU1lc3NhZ2UoU3RyaW5nIGZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IGZhaWx1cmUgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIGZhaWx1cmUgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBkZXRhaWwgZGVzY3JpcHRpb24uCi0gICAqIEByZXR1cm4gZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXREZXRhaWxEZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXRhaWxEZXNjcmlwdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gZGV0YWlsRGVzY3JpcHRpb24gZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNnZXREZXRhaWxEZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGRldGFpbERlc2NyaXB0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAcmV0dXJuIGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAc2VlICNzZXRBZGRpdGlvbmFsRW50cnlUeXBlTGlzdAotICAgKi8KLSAgcHVibGljIEVudHJ5VHlwZUxpc3QgZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKTsKLQotICAvKioKLSAgICogU2V0IGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAcGFyYW0gZW50cnlUeXBlTGlzdCBhZGRpdGlvbmFsIGVudHJ5IHR5cGUgbGlzdC4KLSAgICogQHNlZSAjZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KEVudHJ5VHlwZUxpc3QgZW50cnlUeXBlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHByZXJlcSBpZHMuCi0gICAqIEByZXR1cm4gbGlzdCBvZiBwcmVyZXEgaWRzLgotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRQcmVyZXFJZExpc3QoKTsKLQotICAvKioKLSAgICogQWRkIHByZXJlcSB0ZXN0IGFzc2VydGlvbiBpZC4KLSAgICogQHBhcmFtICBwcmVyZXFJZCBwcmVyZXEgdGVzdCBhc3NlcnRpb24gaWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQcmVyZXFJZChTdHJpbmcgcHJlcmVxSWQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL0VudHJ5VHlwZUxpc3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvRW50cnlUeXBlTGlzdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ4MWYyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvRW50cnlUeXBlTGlzdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5FbnRyeVR5cGVMaXN0OwotCi0vKioKLSAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgdXNlZCB0byBtYWludGFpbiBhIHByb2ZpbGUgRW50cnlUeXBlTGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5VHlwZUxpc3RJbXBsIGltcGxlbWVudHMgRW50cnlUeXBlTGlzdAotewotICAvKioKLSAgICogTG9nIGlucHV0LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dJbnB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFdTREwgaW5wdXQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxJbnB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFVEREkgaW5wdXQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHVkZGlJbnB1dCA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLkVudHJ5VHlwZUxpc3QjZ2V0TG9nSW5wdXQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2dJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2dJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I3NldExvZ0lucHV0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0lucHV0KFN0cmluZyBsb2dJbnB1dCkKLSAgewotICAgIHRoaXMubG9nSW5wdXQgPSBsb2dJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I2dldFdTRExJbnB1dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdTRExJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuRW50cnlUeXBlTGlzdCNzZXRXU0RMSW5wdXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETElucHV0KFN0cmluZyB3c2RsSW5wdXQpCi0gIHsKLSAgICB0aGlzLndzZGxJbnB1dCA9IHdzZGxJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I2dldFVERElJbnB1dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVERElJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy51ZGRpSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuRW50cnlUeXBlTGlzdCNzZXRVRERJSW5wdXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VURESUlucHV0KFN0cmluZyB1ZGRpSW5wdXQpCi0gIHsKLSAgICB0aGlzLnVkZGlJbnB1dCA9IHVkZGlJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFydGlmYWN0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Byb2ZpbGVBcnRpZmFjdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRhYjNiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFydGlmYWN0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5BcnRpZmFjdFR5cGU7Ci0KLS8qKgotICogQW4gYXJ0aWZhY3QgY29udGFpbnMgYSBzZXQgb2YgcmVsYXRlZCB0ZXN0IGFzc2VydGlvbnMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9maWxlQXJ0aWZhY3RJbXBsIGltcGxlbWVudHMgUHJvZmlsZUFydGlmYWN0Ci17Ci0gIC8qKgotICAgKiBBcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIEFydGlmYWN0VHlwZSB0eXBlOwotCi0gIC8qKgotICAgKiBUZXN0IGFzc2VydGlvbiBtYXAuCi0gICAqLwotICBwcm90ZWN0ZWQgVHJlZU1hcCB0ZXN0QXNzZXJ0aW9uTWFwID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBMaW5rZWRMaXN0IHRlc3RBc3NlcnRpb25MaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgQXJ0aWZhY3RUeXBlIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5SZXBvcnRBcnRpZmFjdCNzZXRUeXBlKEFydGlmYWN0VHlwZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoQXJ0aWZhY3RUeXBlIHR5cGUpCi0gIHsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlJlcG9ydEFydGlmYWN0I2dldFNwZWNpZmljYXRpb25MaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0U3BlY2lmaWNhdGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3Qjc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yIHNwZWNpZmljYXRpb25MaXN0KQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbkxpc3QoKQotICAgKi8KLSAgcHVibGljIExpbmtlZExpc3QgZ2V0VGVzdEFzc2VydGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudGVzdEFzc2VydGlvbkxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRUZXN0QXNzZXJ0aW9uKFN0cmluZyBpZCkKLSAgewotICAgIHJldHVybiAoVGVzdEFzc2VydGlvbikgdGhpcy50ZXN0QXNzZXJ0aW9uTWFwLmdldChpZCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pCi0gIHsKLSAgICAvLyBBREQ6IE5lZWQgdG8gbWVyZ2UgdGhlIGxpc3QgYW5kIG1hcAotICAgIHRoaXMudGVzdEFzc2VydGlvbk1hcC5wdXQodGVzdEFzc2VydGlvbi5nZXRJZCgpLCB0ZXN0QXNzZXJ0aW9uKTsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb25MaXN0LmFkZCh0ZXN0QXNzZXJ0aW9uKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIFJlcG9ydEFydGlmYWN0Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcHcucHJpbnRsbigiICAgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9Qcm9maWxlQXNzZXJ0aW9uc0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9Qcm9maWxlQXNzZXJ0aW9uc0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4MTQxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUHJvZmlsZUFzc2VydGlvbnNJbXBsIGltcGxlbWVudHMgUHJvZmlsZUFzc2VydGlvbnMKLXsKLSAgLyoqCi0gICAqIExvY2F0aW9uIG9mIHRoZSBwcm9maWxlIGRlZmluaXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGRvY3VtZW50VVJJOwotCi0gIC8qKgotICAgKiBOYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudE5hbWU7Ci0KLSAgLyoqCi0gICAqIFZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGRvY3VtZW50VmVyc2lvbjsKLQotICAvLyBBREQ6IEEgcHJvZmlsZSBkZWZpbml0aW9uIHNob3VsZCBhbHNvIGhhdmUgYSBkZXNjcmlwdGlvbi4KLQotICAvKioKLSAgICogTGlzdCBvZiBwcm9maWxlcy4KLSAgICovCi0gIFZlY3RvciBwcm9maWxlTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqLwotICBUcmVlTWFwIGFydGlmYWN0TGlzdCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2dldFByb2ZpbGVMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UHJvZmlsZUxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucHJvZmlsZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjc2V0UHJvZmlsZUxpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvZmlsZUxpc3QoVmVjdG9yIHByb2ZpbGVMaXN0KQotICB7Ci0gICAgdGhpcy5wcm9maWxlTGlzdCA9IHByb2ZpbGVMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2FkZFByb2ZpbGUoUHJvZmlsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFByb2ZpbGUoUHJvZmlsZSBwcm9maWxlKQotICB7Ci0gICAgdGhpcy5wcm9maWxlTGlzdC5hZGQocHJvZmlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0QXJ0aWZhY3RMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBUcmVlTWFwIGdldEFydGlmYWN0TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0QXJ0aWZhY3QoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXJ0aWZhY3QgZ2V0QXJ0aWZhY3QoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICByZXR1cm4gKFByb2ZpbGVBcnRpZmFjdCkgdGhpcy5hcnRpZmFjdExpc3QuZ2V0KHR5cGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI3NldEFydGlmYWN0TGlzdChUcmVlTWFwKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXJ0aWZhY3RMaXN0KFRyZWVNYXAgYXJ0aWZhY3RMaXN0KQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdExpc3QgPSBhcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjYWRkQXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBcnRpZmFjdChQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QpCi0gIHsKLSAgICB0aGlzLmFydGlmYWN0TGlzdC5wdXQoYXJ0aWZhY3QuZ2V0VHlwZSgpLCBhcnRpZmFjdCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRUZXN0QXNzZXJ0aW9uKFN0cmluZyBpZCkKLSAgewotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiA9IG51bGw7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGFydGlmYWN0cyBhbmQgZmluZCB0aGUgdGVzdCBhc3NlcnRpb24gCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBhcnRpZmFjdExpc3QudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoKGl0ZXJhdG9yLmhhc05leHQoKSkgJiYgKHRlc3RBc3NlcnRpb24gPT0gbnVsbCkpCi0gICAgewotICAgICAgdGVzdEFzc2VydGlvbiA9ICgoUHJvZmlsZUFydGlmYWN0KSBpdGVyYXRvci5uZXh0KCkpLmdldFRlc3RBc3NlcnRpb24oaWQpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXN0QXNzZXJ0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXJ0aWZhY3QgY3JlYXRlQXJ0aWZhY3QoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBQcm9maWxlQXJ0aWZhY3RJbXBsKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2dldFRBRE5hbWUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUQUROYW1lKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRvY3VtZW50TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI3NldFRBRE5hbWUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VEFETmFtZShTdHJpbmcgZG9jdW1lbnROYW1lKQotICB7Ci0gICAgdGhpcy5kb2N1bWVudE5hbWUgPSBkb2N1bWVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9ucyNnZXRUQURWZXJzaW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VEFEVmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9ucyNzZXRUQURWZXJzaW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRBRFZlcnNpb24oU3RyaW5nIGRvY3VtZW50VmVyc2lvbikKLSAgewotICAgIHRoaXMuZG9jdW1lbnRWZXJzaW9uID0gZG9jdW1lbnRWZXJzaW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTBkYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Byb2ZpbGVBc3NlcnRpb25zUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5FbnRyeVR5cGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgLi4uCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9maWxlQXNzZXJ0aW9uc1JlYWRlckltcGwgaW1wbGVtZW50cyBQcm9maWxlQXNzZXJ0aW9uc1JlYWRlcgotewotICAvKioKLSAgICogUHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zOwotCi0gIC8qKgotICAgKiBSZXBvcnRBcnRpZmFjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFRyZWVNYXAgYXJ0aWZhY3RMaXN0ID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIG5ldyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zUmVhZGVyI3JlYWRQcm9maWxlQXNzZXJ0aW9ucyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgcmVhZFByb2ZpbGVBc3NlcnRpb25zKFN0cmluZyBhc3NlcnRpb25zVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkUHJvZmlsZUFzc2VydGlvbnMobmV3IElucHV0U291cmNlKGFzc2VydGlvbnNVUkkpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlciNyZWFkUHJvZmlsZUFzc2VydGlvbnMoUmVhZGVyKQotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zIHJlYWRQcm9maWxlQXNzZXJ0aW9ucyhSZWFkZXIgcmVhZGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkUHJvZmlsZUFzc2VydGlvbnMobmV3IElucHV0U291cmNlKHJlYWRlcikpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgcHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBQcm9maWxlQXNzZXJ0aW9ucyByZWFkUHJvZmlsZUFzc2VydGlvbnMoSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIHByb2ZpbGUgYXNzZXJ0aW9ucwotICAgIHByb2ZpbGVBc3NlcnRpb25zID0gbmV3IFByb2ZpbGVBc3NlcnRpb25zSW1wbCgpOwotCi0gICAgLy8gUHJvZmlsZSBwYXJ0cyBhcmUgcHV0IGludG8gYSB2ZWN0b3IKLSAgICBhcnRpZmFjdExpc3QgPSBuZXcgVHJlZU1hcCgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIHhtbCByZWFkZXIKLSAgICAgIFhNTFJlYWRlciByZWFkZXIgPSBYTUxVdGlscy5nZXRYTUxSZWFkZXIoKTsKLQotICAgICAgLy8gU2V0IGNvbnRlbnQgaGFuZGxlciB0byBpbm5lciBjbGFzcwotICAgICAgcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKG5ldyBQcm9maWxlQXNzZXJ0aW9uc0hhbmRsZXIoKSk7Ci0gICAgICAKLSAgICAgIGlmKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuZ2V0RWNsaXBzZUNvbnRleHQoKSkKLSAgICAgIHsKLSAgICAJICBFbnRpdHlSZXNvbHZlciByZXNvbHZlciA9IG5ldyBFbnRpdHlSZXNvbHZlcigpewotCi0JCQlwdWJsaWMgSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkJCVVSSVJlc29sdmVyIHJlc29sdmVyID0gV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuZ2V0VVJJUmVzb2x2ZXIoKTsKLQkJCQlTdHJpbmcgdXJpID0gcmVzb2x2ZXIucmVzb2x2ZSgiIiwgcHVibGljSWQsIHN5c3RlbUlkKTsKLQkJCQlTdHJpbmcgcGh5c2ljYWxMb2NhdGlvbiA9IHJlc29sdmVyLnJlc29sdmVQaHlzaWNhbExvY2F0aW9uKCIiLCBwdWJsaWNJZCwgdXJpKTsKLQkJCQlJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlVUkwgdXJsID0gbmV3IFVSTChwaHlzaWNhbExvY2F0aW9uKTsKLQkJCQkJaXMgPSBuZXcgSW5wdXRTb3VyY2UodXJpKTsKLQkJCQkJaXMuc2V0Qnl0ZVN0cmVhbSh1cmwub3BlblN0cmVhbSgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQkvLyBEbyBub3RoaW5nIGlmIG9wZW5pbmcgdGhlIHN0cmVhbSBmYWlscy4KLQkJCQl9Ci0JCQkJcmV0dXJuIGlzOwotCQkJfQotICAgIAkJICAKLSAgICAJICB9OwotICAgIAkgIHJlYWRlci5zZXRFbnRpdHlSZXNvbHZlcihyZXNvbHZlcik7Ci0gICAgICB9Ci0gICAgICAvLyBQYXJzZSBwcm9maWxlIGRlZmluaXRpb24gZmlsZQotICAgICAgcmVhZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IHJlYWQgYW5kIHBhcnNlIHByb2ZpbGUgZGVmaW5pdGlvbi4iLCBlKTsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIC8vQ2hlY2sgdG8gc2VlIGlmIHRoZSB2ZXJzaW9uIG9mIHRlc3QgYXNzc2VydGlvbiBkb2N1bWVudCBpcyBzdXBwb3J0ZWQKLSAgICAgIGlmICghVXRpbHMuaXNWYWxpZFByb2ZpbGVUQURWZXJzaW9uKHByb2ZpbGVBc3NlcnRpb25zKSkKLSAgICAgIHsKLSAgICAJU3RyaW5nIHRhZFZlcnNpb24gPSBwcm9maWxlQXNzZXJ0aW9ucy5nZXRUQURWZXJzaW9uKCk7Ci0gICAgCWlmKHRhZFZlcnNpb24gIT0gbnVsbCkKLSAgICAJewotICAgIAkgIFN0cmluZyB0YWROYW1lID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFETmFtZSgpOwotICAgICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgIlxuVmVyc2lvbiAiCi0gICAgICAgICAgICArIHRhZFZlcnNpb24KLSAgICAgICAgICAgICsgIiBvZiB0aGUgXCIiCi0gICAgICAgICAgICArIHRhZE5hbWUKLSAgICAgICAgICAgICsgIlwiXG4iCi0gICAgICAgICAgICArICJkb2N1bWVudCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgdmVyc2lvbiBvZiIKLSAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgKyAidGhlIHRlc3QgdG9vbHMuIik7Ci0gICAgCX0KLSAgICAJZWxzZQotICAgIAl7Ci0gICAgCSAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiV1MtSSB2YWxpZGF0aW9uIHdhcyB1bmFibGUgdG8gcnVuLiBVbmFibGUgdG8gcmVhZCB0aGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuIik7Ci0gICAgCX0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgYXNzZXJ0aW9ucyBmcm9tIHRoZSBUQUQgYXJlIHJlb3JkZXJlZCBmb3IgcHVycG9zZXMgb2YgcHJvY2Vzc2luZy4gQWxsCi0gICAgLy8gYXNzZXJ0aW9ucyBvZiBhbiBhcnRpZmFjdCBhcmUgcmVvcmRlcmVkIHN1Y2ggdGhhdCBwcmVyZXF1aXNpdGVzIG9jY3VyCi0gICAgLy8gYmVmb3JlIHRoZSBhc3NlcnRpb25zIHRoZXkgcHJlcmVxLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0ICBwcmVyZXF1aXNpdGVzIGRvCi0gICAgLy8gbm90IGNyb3NzIGFydGlmYWN0IHR5cGVzLgotICAgIC8vCi0gICAgSXRlcmF0b3IgaXQgPSBhcnRpZmFjdExpc3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAvLyBmb3IgZWFjaCBhcnRpZmFjdCB0eXBlIGRvIHJlb3JkZXJpbmcgYXNzZXJ0aW9uIAotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUHJvZmlsZUFydGlmYWN0IGFydCA9IChQcm9maWxlQXJ0aWZhY3QpIGFydGlmYWN0TGlzdC5nZXQoaXQubmV4dCgpKTsKLSAgICAgIC8vIHJlc3VsdCBsaXN0IG9mIHRoZSByZW9yZGVyaW5nIGFzc2VydGlvbnMgCi0gICAgICBMaW5rZWRMaXN0IHJlcyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gICAgICBJdGVyYXRvciBpdDIgPSBhcnQuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5pdGVyYXRvcigpOwotICAgICAgLy8gc29ydCB0aGUgYXJ0aWZhY3QgYXNzZXJ0aW9ucyBpbnRvIHJlc3VsdCBsaXN0IAotICAgICAgd2hpbGUgKGl0Mi5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGNhbGwgZm9yIGVhY2ggYXNzZXJ0aW9uICwgCi0gICAgICAgIC8vIGlmIHRoZSBhc3NlcnRpb24gaGFzIHRoZSBwcmVyZXEsIHRoZSBwcmVyZXEgd2lsbCBhZGRlZCBmaXJzdCBpbnRvIHJlcyBsaXN0Ci0gICAgICAgIHNvcnRUZXN0QXNzZXJ0aW9ucyhhcnQsIChUZXN0QXNzZXJ0aW9uKSBpdDIubmV4dCgpLCByZXMpOwotICAgICAgfQotICAgICAgLy8gcmVwbGFjZSB0aGUgb3JpZ2luYWwgYXNzZXJ0aW9ucyBsaXN0IHRvIHRoZSBwcmVyZXEgcmVvcmRlcmluZyBhc3NlcnRpb25zIGxpc3QKLSAgICAgIGFydC5nZXRUZXN0QXNzZXJ0aW9uTGlzdCgpLmNsZWFyKCk7Ci0gICAgICBhcnQuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5hZGRBbGwocmVzKTsKLSAgICB9Ci0gICAgLy8gUHV0IHRoZSBwcm9maWxlIHBhcnRzIGludG8gdGhlIHByb2ZpbGUgZGVmaW5pdGlvbgotICAgIHByb2ZpbGVBc3NlcnRpb25zLnNldEFydGlmYWN0TGlzdChhcnRpZmFjdExpc3QpOwotCi0gICAgcmV0dXJuIHByb2ZpbGVBc3NlcnRpb25zOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFJlY3Vyc2l2ZSB3YWxrIHRvIG9yZGVyIGFzc2VydGlvbnMgc28gdGhhdCBhc3NlcnRpb25zIGFyZSAKLSAgICogcHJvY2Vzc2VkIGZvbGxvd2luZyB0aGUgb25lcyB0aGF0IHByZXJlcSB0aGVtLgotICAgKiBJZiBhc3NlcnRpb24gaGFzIHByZXJlcSwgdGhlbiBhZGQgaXQgdG8gdGhlIHJlc3VsdCBsaXN0IGZpcnN0LgotICAgKiAgCi0gICAqIEBwYXJhbSBhcnQgcHJvZmlsZSBhcnRpZmFjdCBmb3IgY2FsbCBAbGluayBQcm9maWxlQXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqIEBwYXJhbSBhc3J0IHRlc3QgYXNzZXJ0aW9uCi0gICAqIEBwYXJhbSBsaXN0IHJlc3VsdCBsaXN0IHRvIHNvcnQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzb3J0VGVzdEFzc2VydGlvbnMoUHJvZmlsZUFydGlmYWN0IGFydCwgVGVzdEFzc2VydGlvbiBhc3J0LCBMaXN0IGxpc3QpCi0gIHsKLSAgICAvLyBpZiBhc3NlcnRpb24gaXMgbnVsbCBvciBkb2VzIG5vdCBleGlzdCwgdGhlbiBleGl0Ci0gICAgaWYoKGFzcnQgPT0gbnVsbCkgfHwgbGlzdC5jb250YWlucyhhc3J0KSkgCi0gICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gaWYgaXQgaGFzIG5vdCBwcmVyZXEsIGFkZCB0aGUgYXNlcnRpb24gYW5kIGV4aXQKLSAgICBpZihhc3J0LmdldFByZXJlcUlkTGlzdCgpLmlzRW1wdHkoKSkgCi0gICAgewotICAgICAgbGlzdC5hZGQoYXNydCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIGdldCBsaXN0IHByZXJlcSBhc3NlcnRpb24gYW5kIHJlcXVyc2l2ZSBjYWxsIHNvcnRUZXN0QXNzZXJ0aW9ucyB0aGlzIGVhY2ggICAgCi0gICAgSXRlcmF0b3IgaXQgPSBhc3J0LmdldFByZXJlcUlkTGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0gICAgICBzb3J0VGVzdEFzc2VydGlvbnMoYXJ0LCBhcnQuZ2V0VGVzdEFzc2VydGlvbihpZCksIGxpc3QpOwotICAgIH0KLSAgICBsaXN0LmFkZChhc3J0KTsKLSAgfQotCi0gIC8qKgotICAgKiBJbm5lciBjbGFzczogUHJvZmlsZUFzc2VydGlvbnNIYW5kbGVyCi0gICAqLwotICBjbGFzcyBQcm9maWxlQXNzZXJ0aW9uc0hhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotICB7Ci0gICAgcHJpdmF0ZSBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QgPSBwcm9maWxlQXNzZXJ0aW9ucy5jcmVhdGVBcnRpZmFjdCgpOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGNvbnRleHQgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGFzc2VydGlvbkRlc2NyaXB0aW9uID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBmYWlsdXJlTWVzc2FnZSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBkZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgdGVzdEFzc2VydGlvbklkID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZyBjdXJyZW50RWxlbWVudCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24gPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGxvZ0lucHV0ID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciB3c2RsSW5wdXQgPSBudWxsOwotICAgIHByaXZhdGUgRW50cnlUeXBlTGlzdCBlbnRyeVR5cGVMaXN0ID0gbnVsbDsKLQotICAgIC8vIFByb2Nlc3Mgc3RhcnQgZWxlbWVudCBldmVudAotICAgIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudCgKLSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkksCi0gICAgICBTdHJpbmcgbG9jYWxOYW1lLAotICAgICAgU3RyaW5nIHFOYW1lLAotICAgICAgQXR0cmlidXRlcyBhdHRzKQotICAgIHsKLSAgICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbAotICAgICAgICAmJiAobmFtZXNwYWNlVVJJLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BU1NFUlRJT05TXzIwMDMpCi0gICAgICAgIHx8ICBuYW1lc3BhY2VVUkkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2F2ZSBlbGVtZW50IG5hbWUKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBsb2NhbE5hbWU7Ci0KLSAgICAgICAgLy8gPGFydGlmYWN0PgotICAgICAgICBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9BUlRJRkFDVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcHJvZmlsZSBhcnRpZmFjdCBvYmplY3QKLSAgICAgICAgICBhcnRpZmFjdCA9IHByb2ZpbGVBc3NlcnRpb25zLmNyZWF0ZUFydGlmYWN0KCk7Ci0KLSAgICAgICAgICAvLyBTZXQgdHlwZQotICAgICAgICAgIGFydGlmYWN0LnNldFR5cGUoCi0gICAgICAgICAgICBBcnRpZmFjdFR5cGUuZ2V0QXJ0aWZhY3RUeXBlKAotICAgICAgICAgICAgICBhdHRzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpKSk7Ci0KLSAgICAgICAgICAvLyBBREQ6IEdldCBzcGVjaWZpY2F0aW9uIGxpc3QKLQotICAgICAgICAgIC8vIEFkZCBhcnRpZmFjdCB0byBsaXN0IG9mIGFydGlmYWN0IGxpc3QKLSAgICAgICAgICBhcnRpZmFjdExpc3QucHV0KGFydGlmYWN0LmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpLCBhcnRpZmFjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8dGVzdEFzc2VydGlvbj4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9URVNUX0FTU0VSVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDcmVhdGUgdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uID0gbmV3IFRlc3RBc3NlcnRpb25JbXBsKCk7Ci0KLSAgICAgICAgICAvLyBHZXQgYXR0cmlidXRlIHZhbHVlcwotICAgICAgICAgIFN0cmluZyBpZCA9IGF0dHMuZ2V0VmFsdWUoIiIsIFdTSUNvbnN0YW50cy5BVFRSX0lEKTsKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldElkKGlkKTsKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldFR5cGUoYXR0cy5nZXRWYWx1ZSgiIiwgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSkpOwotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0RW50cnlUeXBlTmFtZSgKLSAgICAgICAgICAgIGF0dHMuZ2V0VmFsdWUoIiIsIFdTSUNvbnN0YW50cy5BVFRSX0VOVFJZX1RZUEUpKTsKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBpZiBhc3NlcnRpb24gaXMgbm90IHJlcXVpcmVkIG9yIGl0IGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBieSBjb3JlIHZhbGlkYXRvciB0aGVuIGRpc2FibGUgaXQKLSAgICAgICAgICBpZiAoYWxyZWFkeUNoZWNrZWQoaWQpIHx8ICEodGVzdEFzc2VydGlvbi5nZXRUeXBlKCkuZXF1YWxzKFRlc3RBc3NlcnRpb24uVFlQRV9SRVFVSVJFRCkpKQotICAgICAgICAJICB0ZXN0QXNzZXJ0aW9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgCSAgdGVzdEFzc2VydGlvbi5zZXRFbmFibGVkKEJvb2xlYW4udmFsdWVPZihhdHRzLmdldFZhbHVlKCIiLCBXU0lDb25zdGFudHMuQVRUUl9FTkFCTEVEKSkuYm9vbGVhblZhbHVlKCkpOwotCi0gICAgICAgICAgLy8gQWRkIHRlc3QgYXNzZXJ0aW9uIHRvIGFydGlmYWN0Ci0gICAgICAgICAgYXJ0aWZhY3QuYWRkVGVzdEFzc2VydGlvbih0ZXN0QXNzZXJ0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxjb250ZXh0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0NPTlRFWFQpKQotICAgICAgICB7Ci0gICAgICAgICAgY29udGV4dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxhc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9BU1NFUlRJT05fREVTQ1JJUFRJT04pKQotICAgICAgICB7Ci0gICAgICAgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZmFpbHVyZU1lc3NhZ2U+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9NRVNTQUdFKSkKLSAgICAgICAgewotICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbj4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX0RFVEFJTF9ERVNDUklQVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZGV0YWlsRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fREVUQUlMX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIGRldGFpbERlc2NyaXB0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPHRlc3RBc3NlcnRpb25JRD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9URVNUX0FTU0VSVElPTl9JRCkpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uSWQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8YWRkaXRpb25hbEVudHJ5VHlwZUxpc3Q+Ci0gICAgICAgIGVsc2UgaWYgKAotICAgICAgICAgIGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQURESVRJT05BTF9FTlRSWV9UWVBFX0xJU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ3JlYXRlIGVudHJ5IHR5cGUgbGlzdAotICAgICAgICAgIGVudHJ5VHlwZUxpc3QgPSBuZXcgRW50cnlUeXBlTGlzdEltcGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxtZXNzYWdlSW5wdXQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9JTlBVVCkpCi0gICAgICAgIHsKLSAgICAgICAgICBsb2dJbnB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDx3c2RsSW5wdXQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9JTlBVVCkpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsSW5wdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gPHByb2ZpbGVBc3NlcnRpb25zPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1BST0ZJTEVfQVNTRVJUSU9OUykpCi0gICAgICAgIHsKLSAgICAgICAgICBwcm9maWxlQXNzZXJ0aW9ucy5zZXRUQUROYW1lKAotICAgICAgICAgICAgYXR0cy5nZXRWYWx1ZSgiIiwgV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICAgIHByb2ZpbGVBc3NlcnRpb25zLnNldFRBRFZlcnNpb24oCi0gICAgICAgICAgICBhdHRzLmdldFZhbHVlKCIiLCBXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBSRU1PVkU6ICAgICAKLSAgICAgICAgLy8gPHVkZGlJbnB1dD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9VRERJX0lOUFVUKSkgewotICAgICAgICAgIHVkZGlJbnB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfSAKLSAgICAgICAgKi8KLSAgICAgIH0KLSAgICB9IC8vIEVORCBzdGFydEVsZW1lbnQKLQotICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFuYW1lKQotICAgIHsKLSAgICAgIC8vIElmIHRoaXMgaXMgdGhlIHByb2ZpbGUgbmFtZXNwYWNlLCB0aGVuIGNoZWNrIGZvciBhbmQgcHJvY2VzcyBzZWxlY3RlZCBlbGVtZW50cwotICAgICAgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsCi0gICAgICAgICYmIChuYW1lc3BhY2VVUkkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlNfMjAwMykKLSAgICAgICAgfHwgbmFtZXNwYWNlVVJJLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BU1NFUlRJT05TKSkpCi0gICAgICB7Ci0gICAgICAgIC8vIDxjb250ZXh0PgotICAgICAgICBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9DT05URVhUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBjb250ZXh0IGluIHRlc3QgYXNzZXJ0aW9uCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5zZXRDb250ZXh0KGNvbnRleHQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBhc3NlcnRpb24gZGVzY3JpcHRpb24gaW4gdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldEFzc2VydGlvbkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGZhaWx1cmVNZXNzYWdlPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBTZXQgZmFpbHVyZSBtZXNzYWdlIGluIHRlc3QgYXNzZXJ0aW9uCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5zZXRGYWlsdXJlTWVzc2FnZShmYWlsdXJlTWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZmFpbHVyZURldGFpbERlc2NyaXB0aW9uPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfREVUQUlMX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbiBpbiB0ZXN0IGFzc2VydGlvbgotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKAotICAgICAgICAgICAgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZGV0YWlsRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fREVUQUlMX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBkZXRhaWwgZGVzY3JpcHRpb24gaW4gdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldERldGFpbERlc2NyaXB0aW9uKGRldGFpbERlc2NyaXB0aW9uLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGRldGFpbERlc2NyaXB0aW9uID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDx0ZXN0QXNzZXJ0aW9uSUQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2V0IHRlc3QgYXNzZXJ0aW9uIGlkIGluIHByZXJlcSBsaXN0Ci0gICAgICAgICAgdGVzdEFzc2VydGlvbi5hZGRQcmVyZXFJZCh0ZXN0QXNzZXJ0aW9uSWQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgdGVzdEFzc2VydGlvbklkID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxhZGR0aW9uYWxFbnRyeVR5cGVMaXN0PgotICAgICAgICBlbHNlIGlmICgKLSAgICAgICAgICBsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0FERElUSU9OQUxfRU5UUllfVFlQRV9MSVNUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCB0YXJnZXQgbGlzdAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoZW50cnlUeXBlTGlzdCk7Ci0gICAgICAgICAgZW50cnlUeXBlTGlzdCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8bWVzc2FnZUlucHV0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfSU5QVVQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2V0IHRlc3QgYXNzZXJ0aW9uIGlkIGluIHByZXJlcSBsaXN0Ci0gICAgICAgICAgZW50cnlUeXBlTGlzdC5zZXRMb2dJbnB1dChsb2dJbnB1dC50b1N0cmluZygpKTsKLSAgICAgICAgICBsb2dJbnB1dCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8d3NkbElucHV0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1dTRExfSU5QVVQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2V0IHRlc3QgYXNzZXJ0aW9uIGlkIGluIHByZXJlcSBsaXN0Ci0gICAgICAgICAgZW50cnlUeXBlTGlzdC5zZXRXU0RMSW5wdXQod3NkbElucHV0LnRvU3RyaW5nKCkpOwotICAgICAgICAgIHdzZGxJbnB1dCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8cHJvZmlsZUFzc2VydGlvbnM+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fUFJPRklMRV9BU1NFUlRJT05TKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGEgbm8tb3AKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFJFTU9WRToKLSAgICAgICAgLy8gPHVkZGlJbnB1dD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9VRERJX0lOUFVUKSkgewotICAgICAgICAgIC8vIFNldCB0ZXN0IGFzc2VydGlvbiBpZCBpbiBwcmVyZXEgbGlzdAotICAgICAgICAgICBlbnRyeVR5cGVMaXN0LnNldFVERElJbnB1dCh1ZGRpSW5wdXQudG9TdHJpbmcoKSk7ICAgICAgICAgCi0gICAgICAgICAgdWRkaUlucHV0ID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICAqLwotICAgICAgfQotICAgIH0gLy8gRU5EIGVuZEVsZW1lbnQKLQotICAgIHB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhcltdIGNoLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpCi0gICAgewotICAgICAgLy8gPGNvbnRleHQ+Ci0gICAgICBpZiAoKGNvbnRleHQgIT0gbnVsbCkKLSAgICAgICAgJiYgKGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9DT05URVhUKSkpCi0gICAgICB7Ci0gICAgICAgIGNvbnRleHQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGFzc2VydGlvbkRlc2NyaXB0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhc3NlcnRpb25EZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX0RFU0NSSVBUSU9OKSkpCi0gICAgICB7Ci0gICAgICAgIGFzc2VydGlvbkRlc2NyaXB0aW9uLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxmYWlsdXJlTWVzc2FnZT4KLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoZmFpbHVyZU1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoY3VycmVudEVsZW1lbnQuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSkpKQotICAgICAgewotICAgICAgICBmYWlsdXJlTWVzc2FnZS5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8ZmFpbHVyZURldGFpbERlc2NyaXB0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24gIT0gbnVsbCkgJiYgKAotICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX0RFVEFJTF9ERVNDUklQVElPTikpKQotICAgICAgewotICAgICAgICBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24uYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGRldGFpbERlc2NyaXB0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChkZXRhaWxEZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fREVUQUlMX0RFU0NSSVBUSU9OKSkpCi0gICAgICB7Ci0gICAgICAgIGRldGFpbERlc2NyaXB0aW9uLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx0ZXN0QXNzZXJ0aW9uSUQ+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKHRlc3RBc3NlcnRpb25JZCAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQpKSkKLSAgICAgIHsKLSAgICAgICAgdGVzdEFzc2VydGlvbklkLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtZXNzYWdlSW5wdXQ+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGxvZ0lucHV0ICE9IG51bGwpCi0gICAgICAgICAgJiYgKGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0lOUFVUKSkpCi0gICAgICB7Ci0gICAgICAgIGxvZ0lucHV0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2RsSW5wdXQ+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKHdzZGxJbnB1dCAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9JTlBVVCkpKQotICAgICAgewotICAgICAgICB3c2RsSW5wdXQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLyogUkVNT1ZFOgotICAgICAgLy8gPHVkZGlJbnB1dD4KLSAgICAgIGVsc2UgaWYgKCh1ZGRpSW5wdXQgIT0gbnVsbCkgJiYgKGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9VRERJX0lOUFVUKSkpIHsKLSAgICAgICAgdWRkaUlucHV0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0gICAgICAqLwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBOT1RFIHRoYXQgdGhpcyBhcGkgYXNzdW1lcyB0aGF0IGJhc2Ugd3NkbCB2YWxpZGF0b3IgaGFzIGFscmVhZHkgdmFsaWRhdGVkCi0gICAqIHRoZSB3c2RsIGRvY3VtZW50IGFuZCBjb3JyZXNwb25kaW5nIHNjaGVtYXMgYWdhaW5zdCB0aGUgd3NkbCAxLjEgc3BlY2lmaWNhdGlvbi4KLSAgICogTm90ZSBhbHNvIHRoYXQgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGR1cGxpY2F0ZSBjaGVja3MgYmV0d2VlbiB0aGUgYmFzZSB2YWxpZGF0b3IKLSAgICogYW5kIHRoZSB3cy1pIHZhbGlkYXRvci4gU2luY2Ugc29tZSBvZiB0aGVzZSBjaGVja3MgYXJlIGNwdSBpbnRlbnNpdmUsIHdlIGRpc2FibGUgCi0gICAqIHRob3NlIGFzc2VydGlvbnMgaGVyZS4gCi0gICAqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXNzZXJ0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBieSB0aGUgYmFzZSB2YWxpZGF0b3IuIAotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGFzc2VydGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYnkgdGhlIGJhc2UgdmFsaWRhdG9yLiAKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGFscmVhZHlDaGVja2VkKFN0cmluZyBpZCkKLSAgewotCSBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCSBpZiAoaWQgIT0gbnVsbCkKLQkgewotICAgICAgIHJlc3VsdCA9IChpZC5lcXVhbHMoIkJQMjExMCIpIHx8Ci0gICAgCQkgICAJIGlkLmVxdWFscygiQlAyMTE1IikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJCUDI0MTciKSB8fAotCQkgICAgICAgICBpZC5lcXVhbHMoIkJQMjExNCIpIHx8Ci0JCSAgICAgICAgIGlkLmVxdWFscygiQlAyMTIzIikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJTU0JQMjIwOSIpIHx8Ci0JCSAgICAgICAgIGlkLmVxdWFscygiQVAyMjA5IikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJCUDI3MDAiKQkgICAgICAgICAKLQkJICAgICAgICAgKTsKLQkgfQotCSByZXR1cm4gcmVzdWx0OwotfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9UZXN0QXNzZXJ0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Rlc3RBc3NlcnRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2OTc1N2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Rlc3RBc3NlcnRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5FbnRyeVR5cGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyAuLi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RBc3NlcnRpb25JbXBsIGltcGxlbWVudHMgVGVzdEFzc2VydGlvbgotewotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gaWQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGlkID0gbnVsbDsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRlc3QgYXNzZXJ0aW9uIHByaW1hcnkgZW50cnkgdHlwZSBuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBlbnRyeVR5cGVOYW1lID0gbnVsbDsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gZW5hYmxlZCBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBlbmFibGVkID0gdHJ1ZTsKLQotICAvKioKLSAgICogQ29udGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY29udGV4dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBGYWlsdXJlIG1lc3NhZ2UuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGZhaWx1cmVNZXNzYWdlID0gbnVsbDsKLQotICAvKioKLSAgICogRmFpbHVyZSBkZXRhaWwgZGVzY3JpcHRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERldGFpbCBkZXNjcmlwdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZGV0YWlsRGVzY3JpcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBBZGR0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5VHlwZUxpc3QgZW50cnlUeXBlTGlzdCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSBJRCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBwcmVyZXFJZExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0SWQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5pZDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldElkKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkKLSAgewotICAgIHRoaXMuaWQgPSBpZDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI2dldFR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRUeXBlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVudHJ5VHlwZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlUeXBlTmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldEVudHJ5VHlwZU5hbWUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlUeXBlTmFtZShTdHJpbmcgZW50cnlUeXBlTmFtZSkKLSAgewotICAgIHRoaXMuZW50cnlUeXBlTmFtZSA9IGVudHJ5VHlwZU5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNpc0VuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBlbmFibGVkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0RW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpCi0gIHsKLSAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0Q29udGV4dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRDb250ZXh0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBc3NlcnRpb25EZXNjcmlwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hc3NlcnRpb25EZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldEFzc2VydGlvbkRlc2NyaXB0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbkRlc2NyaXB0aW9uKFN0cmluZyBhc3NlcnRpb25EZXNjcmlwdGlvbikKLSAgewotICAgIHRoaXMuYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBhc3NlcnRpb25EZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI2dldEZhaWx1cmVNZXNzYWdlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcgZmFpbHVyZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLmZhaWx1cmVNZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZmFpbHVyZURldGFpbERlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbihTdHJpbmcgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5mYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24gPSBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXREZXRhaWxEZXNjcmlwdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERldGFpbERlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRldGFpbERlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0RGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGRldGFpbERlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5kZXRhaWxEZXNjcmlwdGlvbiA9IGRldGFpbERlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKQotICAgKi8KLSAgcHVibGljIEVudHJ5VHlwZUxpc3QgZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlUeXBlTGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KG9yZy53c2kudGVzdC5wcm9maWxlLkVudHJ5VHlwZUxpc3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRpdGlvbmFsRW50cnlUeXBlTGlzdChFbnRyeVR5cGVMaXN0IGVudHJ5VHlwZUxpc3QpCi0gIHsKLSAgICB0aGlzLmVudHJ5VHlwZUxpc3QgPSBlbnRyeVR5cGVMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0UHJlcmVxSWRMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UHJlcmVxSWRMaXN0KCkKLSAgewotICAgIHJldHVybiBwcmVyZXFJZExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNhZGRQcmVyZXFJZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQcmVyZXFJZChTdHJpbmcgcHJlcmVxSWQpCi0gIHsKLSAgICB0aGlzLnByZXJlcUlkTGlzdC5hZGQocHJlcmVxSWQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9CYXNlVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9CYXNlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZTcwMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvQmFzZVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIFRoZSBiYXNlIGludGVyZmFjZSBmb3IgdGhlIHByb2ZpbGUgdmFsaWRhdG9yLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJhc2VWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFNldCBhbGwgdGVzdCBhc3NlcnRpb25zIGZvciBhbiBhcnRpZmFjdCB0byBtaXNzaW5nSW5wdXQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFueSBwcm9ibGVtcyB3aGlsZSBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWxsTWlzc2luZ0lucHV0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogQ2xlYW51cCBhZnRlciBwcm9jZXNzaW5nIGFsbCBvZiB0aGUgdGVzdCBhc3NlcnRpb25zIGZvciBhbiBhcnRpZmFjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYW55IHByb2JsZW1zIGR1cmluZyBjbGVhbnVwLgotICAgKi8KLSAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAgICogUGFyc2UgWE1MIGRvY3VtZW50IGFuZCB2YWxpZGF0ZSB3aXRoIGEgc2NoZW1hIGRvY3VtZW50LgotICAgICAqIEBwYXJhbSB1cmxTdHJpbmcgWE1MIGRvY3VtZW50IGxvY2F0aW9uLgotICAgICAqIEBwYXJhbSBiYXNlVVJJIGEgYmFzZSB1cmwgdG8gYXNzaXN0IGluIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0gICAgICogQHBhcmFtIHNjaGVtYSB0aGUgcmVsYXRlZCBYTUwgc2NoZW1hLgotICAgICAqIEByZXR1cm4gWE1MIGRvY3VtZW50LgotICAgICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMgd2hpbGUgcGFyc2luZyBvciAKLSAgICAgKiAgICAgICAgIHZhbGlkYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICAgKi8KLSAgcHVibGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnRVUkwoCi0gICAgU3RyaW5nIHVybFN0cmluZywKLSAgICBTdHJpbmcgYmFzZVVSSSwKLSAgICBTdHJpbmcgc2NoZW1hKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEluaXRpYWlsaXplIHZhbGlkYXRpb24gdGVzdCBwcm9jZWR1cmUuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbnRleHQgdGhlIGFuYWx5emVyQ29udGV4dC4KLSAgICogQHBhcmFtIGFzc2VydGlvbnMgICAgICB0aGUgYXNzZXJ0aW9ucwotICAgKiBAcGFyYW0gcmVwb3J0QXJ0aWZhY3QgIHRoZSByZXBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZyAgdGhlIGFuYWx5emVyQ29uZmlnCi0gICAqIEBwYXJhbSByZXBvcnRlciAgICAgICAgdGhlIHJlcG9ydGVyIHdoaWNoIGlzIHVzZWQgdG8gYWRkIGVycm9ycyB0byB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25mb3JtYW5jZSByZXBvcnQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gICBpZiBtZXNzYWdlIHZhbGlkYXRvciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFzc2VydGlvbnMgYXNzZXJ0aW9ucywKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBEZXRlcm1pbmVzIGlmIHRoaXMgdmFsaWRhdG9yIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKiBAcmV0dXJuIGJvb2xlYW4gIHRydWUgaWYgdmFsaWRhdG9yIHNob3VsZCBiZSBydW4sIGZhbHNlIGlmIG5vdAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKTsKLQotICAvKioKLSAgICogUnVuIHRoZSB2YWxpZGF0b3IKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnMgZHVyaW5nIHZhbGlkYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlQXJ0aWZhY3QoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgYXJ0aWZhY3QgdHlwZSB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gdGhlIGFydGlmYWN0IHR5cGUgKGEgU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBcnRpZmFjdFR5cGUoKTsKLQotICAvKioKLSAgICogR2V0IHRoZSBjb2xsZWN0aW9uIG9mIGVudHJ5IHR5cGVzIHRoYXQgdGhpcyB2YWxpZGF0b3IgYXBwbGllcyB0by4KLSAgICogQHJldHVybiBhbiBhcnJheSBvZiBlbnRyeSB0eXBlcyAoU3RyaW5ncykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRFbnRyeVR5cGVzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9FbnRyeUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0VudHJ5Q29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGJkODkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0VudHJ5Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIHRhcmdldCBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgYSB0ZXN0IGFzc2VydGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEBhdXRob3IgR3JhaGFtIFR1cnJlbGwgKGd0dXJyZWxsQHVrLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnRyeUNvbnRleHQKLXsKLSAgcHJvdGVjdGVkIEVudHJ5IGVudHJ5ID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IHJlcXVlc3QgPSBudWxsOwotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IHJlc3BvbnNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VFbnRyeSBtZXNzYWdlRW50cnkgPSBudWxsOwotCi0gIHByb3RlY3RlZCBEb2N1bWVudCByZXF1ZXN0RG9jdW1lbnQgPSBudWxsOwotICBwcm90ZWN0ZWQgRG9jdW1lbnQgcmVzcG9uc2VEb2N1bWVudCA9IG51bGw7Ci0gIHByb3RlY3RlZCBEb2N1bWVudCBtZXNzYWdlRW50cnlEb2N1bWVudCA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSBudWxsOwotCi0gIHByb3RlY3RlZCBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0ID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbnRyeSAgICBhIG1lc3NhZ2UgZW50cnkuCi0gICAqIEBwYXJhbSByZXF1ZXN0ICB0aGUgcmVxdWVzdC4KLSAgICogQHBhcmFtIHJlc3BvbnNlIHRoZSByZXNwb25zZS4KLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRleHQoRW50cnkgZW50cnksIE1lc3NhZ2VFbnRyeSByZXF1ZXN0LCBNZXNzYWdlRW50cnkgcmVzcG9uc2UpCi0gIHsKLSAgICB0aGlzKGVudHJ5LCByZXF1ZXN0LCByZXNwb25zZSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbnRyeSAgICAgICAgICAgYSBtZXNzYWdlIGVudHJ5LgotICAgKiBAcGFyYW0gcmVxdWVzdCAgICAgICAgIHRoZSByZXF1ZXN0LgotICAgKiBAcGFyYW0gcmVzcG9uc2UgICAgICAgIHRoZSByZXNwb25zZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGV4dCgKLSAgICBFbnRyeSBlbnRyeSwKLSAgICBNZXNzYWdlRW50cnkgcmVxdWVzdCwKLSAgICBNZXNzYWdlRW50cnkgcmVzcG9uc2UsCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCkKLSAgewotICAgIHRoaXMuZW50cnkgPSBlbnRyeTsKLSAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0OwotICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTsKLSAgICB0aGlzLmFuYWx5emVyQ29udGV4dCA9IGFuYWx5emVyQ29udGV4dDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFBhcnNlIGFsbCBkb2N1bWVudHMKLSAgICAgIGlmKHJlcXVlc3QuaXNNaW1lQ29udGVudCgpKSAKLSAgICAgIHsKLSAgICAgIAlNaW1lUGFydCBwYXJ0ID0gcmVxdWVzdC5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpOwotICAgICAgICBpZiAoKHBhcnQgIT0gbnVsbCkgJiYgKHBhcnQuZ2V0Q29udGVudCgpLmxlbmd0aCgpID4gMCkpCi0gICAgICAgICAgcmVxdWVzdERvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUwocGFydC5nZXRDb250ZW50KCkpOwotICAgICAgfQotICAgICAgZWxzZSAKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlcXVlc3QuZ2V0TWVzc2FnZSgpLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICByZXF1ZXN0RG9jdW1lbnQgPSBYTUxVdGlscy5wYXJzZVhNTChyZXF1ZXN0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7Ci0gICAgICAgICAgaWYocmVzcG9uc2UuaXNNaW1lQ29udGVudCgpKSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgCU1pbWVQYXJ0IHBhcnQgPSByZXNwb25zZS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpOwotICAgICAgICAgIAlpZiAoKHBhcnQgIT0gbnVsbCkgJiYgKHBhcnQuZ2V0Q29udGVudCgpLmxlbmd0aCgpID4gMCkpCi0gICAgICAgICAgICAgIHJlc3BvbnNlRG9jdW1lbnQgPSBYTUxVdGlscy5wYXJzZVhNTChwYXJ0LmdldENvbnRlbnQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmdldE1lc3NhZ2UoKS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgIHJlc3BvbnNlRG9jdW1lbnQgPSBYTUxVdGlscy5wYXJzZVhNTChyZXNwb25zZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIHdlKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBuZWVkIHNvbWUgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGhlcmUgYW5kIG1vcmUgY2FyZWZ1bCBjaGVja2luZwotICAgIGlmIChlbnRyeS5nZXRFbnRyeVR5cGUoKS5lcXVhbHMoRW50cnlUeXBlLmdldEVudHJ5VHlwZShNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVFVRVNUKSkpCi0gICAgewotICAgICAgdGhpcy5tZXNzYWdlRW50cnkgPSByZXF1ZXN0OwotICAgICAgdGhpcy5tZXNzYWdlRW50cnlEb2N1bWVudCA9IHJlcXVlc3REb2N1bWVudDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRoaXMubWVzc2FnZUVudHJ5ID0gcmVzcG9uc2U7Ci0gICAgICB0aGlzLm1lc3NhZ2VFbnRyeURvY3VtZW50ID0gcmVzcG9uc2VEb2N1bWVudDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbnRyeSBhIG1lc3NhZ2UgZW50cnkuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgYSBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGV4dChFbnRyeSBlbnRyeSwgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgewotICAgIHRoaXMuZW50cnkgPSBlbnRyeTsKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgZW50cnkgY29udGV4dC4KLSAgICogQHBhcmFtIGVudHJ5IGEgbWVzc2FnZSBlbnRyeS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGV4dChFbnRyeSBlbnRyeSwgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCkKLSAgewotICAgIHRoaXMuZW50cnkgPSBlbnRyeTsKLSAgICB0aGlzLmFuYWx5emVyQ29udGV4dCA9IGFuYWx5emVyQ29udGV4dDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlbnRyeS4gCi0gICAqIEByZXR1cm4gdGhlIGVudHJ5LiAKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRFbnRyeSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0LgotICAgKiBAcmV0dXJuIHRoZSByZXF1ZXN0LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRSZXF1ZXN0KCkKLSAgewotICAgIHJldHVybiByZXF1ZXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3BvbnNlLgotICAgKiBAcmV0dXJuIHRoZSByZXNwb25zZS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgZ2V0UmVzcG9uc2UoKQotICB7Ci0gICAgcmV0dXJuIHJlc3BvbnNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxvZyBlbnRyeSB3aGljaCBpcyBub3QgbnVsbC4KLSAgICogQHJldHVybiB0aGUgbG9nIGVudHJ5LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRNZXNzYWdlRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VFbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0LgotICAgKiBAcmV0dXJuIE1lc3NhZ2VFbnRyeQotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldFJlcXVlc3REb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWVzdERvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3BvbnNlLgotICAgKiBAcmV0dXJuIHRoZSByZXNwb25zZS4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBnZXRSZXNwb25zZURvY3VtZW50KCkKLSAgewotICAgIHJldHVybiByZXNwb25zZURvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxvZyBlbnRyeSB3aGljaCBpcyBub3QgbnVsbC4KLSAgICogQHJldHVybiB0aGUgbG9nIGVudHJ5LgotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlRW50cnlEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuYWx5emVyQ29udGV4dC4KLSAgICogQHJldHVybiBhbmFseXplckNvbnRleHQKLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbnRleHQgZ2V0QW5hbHl6ZXJDb250ZXh0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmFuYWx5emVyQ29udGV4dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvRW52ZWxvcGVWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0VudmVsb3BlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZGNjOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvRW52ZWxvcGVWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgZW52ZWxvcGUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAKLSAqLwotcHVibGljIGludGVyZmFjZSBFbnZlbG9wZVZhbGlkYXRvciBleHRlbmRzIExvZ1ZhbGlkYXRvcgotewotCi0gIC8qKgotICAgKiBJbml0aWFpbGl6ZSB2YWxpZGF0aW9uIHRlc3QgcHJvY2VkdXJlLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb250ZXh0IHRoZSBhbmFseXplckNvbnRleHQuCi0gICAqIEBwYXJhbSBhcnRpZmFjdCAgICAgICAgYW4gcHJvZmlsZSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHJlcG9ydEFydGlmYWN0ICB0aGUgcmVwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IHRoZSBXZWIgc2VydmljZSBkZWZpbml0aW9uCi0gICAqIEBwYXJhbSByZXBvcnRlciB0aGUgcmVwb3J0ZXIgd2hpY2ggaXMgdXNlZCB0byBhZGQgZXJyb3JzIHRvIHRoZSBjb25mb3JtYW5jZSByZXBvcnQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgbWVzc2FnZSB2YWxpZGF0b3IgY291bGQgbm90IGJlIGluaXRpYWxpemVkLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgaW5pdChBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBhcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0gIAotICAvKiogRW52ZWxvcGUgYXJ0aWZhY3QgdHlwZSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFID0gImVudmVsb3BlIjsKLQotICAvKiogUmVxdWVzdCBlbnZlbG9wZSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX1JFUVVFU1QgPSAicmVxdWVzdEVudmVsb3BlIjsKLQotICAvKiogUmVzcG9uc2UgZW52ZWxvcGUgZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRV9SRVNQT05TRSA9ICJyZXNwb25zZUVudmVsb3BlIjsKLQotICAvKiogQW55IGVudmVsb3BlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRU5WRUxPUEVfQU5ZID0gImFueUVudmVsb3BlIjsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9Mb2dWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0xvZ1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTRkZGI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0xvZ1ZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZXMgY29tbW9uIHRvIGVudmVsb3BlcyBhbmQKLSAqIG1lc3NhZ2VzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIExvZ1ZhbGlkYXRvciBleHRlbmRzIEJhc2VWYWxpZGF0b3IgewotICAgIC8qKgotICAgICAqIFZhbGlkYXRlIHRoZSBlbnZlbG9wZSBsb2NhdGVkIGJ5IHRoZSBsb2cgZW50cnkuIAotICAgICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgYSBsb2cgZW50cnkgbG9jYXRpbmcgYW4gZW52ZWxvcGUuCi0gICAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCB3aGlsZQotICAgICAqICAgICAgICAgcHJvY2Vzc2luZyB0aGUgbG9nIGVudHJ5LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9NZXNzYWdlVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9NZXNzYWdlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNTNmNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvTWVzc2FnZVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotCi0vKioKLSAqIEludGVyZmFjZSBkZWZpbml0aW9uIGZvciBtZXNzYWdlIHZhbGlkYXRpb24gdGVzdCBwcm9jZWR1cmUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBNZXNzYWdlVmFsaWRhdG9yIGV4dGVuZHMgTG9nVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBIVFRQIDEuMCB2ZXJzaW9uIGluZGljYXRvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfVkVSU0lPTl8xXzAgPSAiSFRUUC8xLjAiOwotCi0gIC8qKgotICAgKiBIVFRQIDEuMSB2ZXJzaW9uIGluZGljYXRvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfVkVSU0lPTl8xXzEgPSAiSFRUUC8xLjEiOwotCi0gIC8qKgotICAgKiBIVFRQIFBPU1QgbWVzc2FnZSBpbmRpY2F0b3IuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX1BPU1QgPSAiUE9TVCI7Ci0KLSAgLyoqIE1lc3NhZ2UgYXJ0aWZhY3QgdHlwZSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0KLSAgLyoqIFJlcXVlc3QgbWVzc2FnZSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0VfUkVRVUVTVCA9ICJyZXF1ZXN0TWVzc2FnZSI7Ci0KLSAgLyoqIFJlc3BvbnNlIG1lc3NhZ2UgZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9NRVNTQUdFX1JFU1BPTlNFID0gInJlc3BvbnNlTWVzc2FnZSI7Ci0KLSAgLyoqIEFueSBtZXNzYWdlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUVTU0FHRV9BTlkgPSAiYW55TWVzc2FnZSI7Ci0KLSAgLyoqIE1pbWUgcGFydCBtZXNzYWdlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUlNRV9QQVJUID0gInBhcnQiOwotCi0gIC8qKiBNaW1lIHJvb3QgcGFydCBtZXNzYWdlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUlNRV9ST09UX1BBUlQgPSAicm9vdC1wYXJ0IjsKLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgICAgICAgIGFuIHByb2ZpbGUgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCAgdGhlIHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCB0aGUgV2ViIHNlcnZpY2UgZGVmaW5pdGlvbgotICAgKiBAcGFyYW0gcmVwb3J0ZXIgdGhlIHJlcG9ydGVyIHdoaWNoIGlzIHVzZWQgdG8gYWRkIGVycm9ycyB0byB0aGUgY29uZm9ybWFuY2UgcmVwb3J0Ci0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIG1lc3NhZ2UgdmFsaWRhdG9yIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZUFzc2VydGlvbnMgYXNzZXJ0aW9ucywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCwKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1Byb2ZpbGVWYWxpZGF0b3JGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNmYxZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTSVByb3BlcnRpZXM7Ci0KLS8qKgotKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gYWNjZXNzIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgYWJzdHJhY3QgY2xhc3MuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIHZhbGlkYXRvciBkZXBlbmRpbmcgb24gdGhlIGdpdmVuIGFydGlmYWN0IG5hbWUKLSAgICogQHBhcmFtIGFydGlmYWN0TmFtZSAtIFN0cmluZyBjb250YWluaW5nIHRoZSBhcnRpZmFjdCBuYW1lIGZyb20gdGhlIFRBRAotICAgKiBAcmV0dXJuIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIEJhc2VWYWxpZGF0b3IgaW50ZXJmYWNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgdmFsaWRhdG9yIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBCYXNlVmFsaWRhdG9yIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpCi0gICAgICAgICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKiogCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIFVEREkgdmFsaWRhdG9yLgotICAgKiBAcmV0dXJuICBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBXU0RMVmFsaWRhdG9yIGludGVyZmFjZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgVURESSB2YWxpZGF0b3IgY2Fubm90IGJlIGluc3RhbnRpYXRlZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFVERElWYWxpZGF0b3IgbmV3VURESVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqIAotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSBXU0RMIHZhbGlkYXRvci4KLSAgICogQHJldHVybiBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBXU0RMVmFsaWRhdG9yIGludGVyZmFjZS4gCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIFdTREwgdmFsaWRhdG9yIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRWYWxpZGF0b3JGb3JBcnRpZmFjdChTdHJpbmcgYXJ0aWZhY3ROYW1lKS4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBXU0RMVmFsaWRhdG9yIG5ld1dTRExWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKiAKLSAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgbWVzc2FnZSB2YWxpZGF0b3IuCi0gICAqIE5PVEU6IERvIHdlIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSB0cmFucG9ydCBhbmQgU09BUCAKLSAgICogbWVzc2FnZSB2YWxpZGF0b3I/Ci0gICAqCi0gICAqIEByZXR1cm4gYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgTWVzc2FnZVZhbGlkYXRvciBpbnRlcmZhY2UuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIG1lc3NhZ2UgdmFsaWRhdG9yY2Fubm90IGJlIGluc3RhbnRpYXRlZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IE1lc3NhZ2VWYWxpZGF0b3IgbmV3TWVzc2FnZVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqIAotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gZW52ZWxvcGUgdmFsaWRhdG9yLgotICAgKiBAcmV0dXJuIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIEVudmVsb3BlVmFsaWRhdG9yIGludGVyZmFjZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgbWVzc2FnZSB2YWxpZGF0b3IgY2Fubm90IGJlIGluc3RhbnRpYXRlZC4gCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRWYWxpZGF0b3JGb3JBcnRpZmFjdChTdHJpbmcgYXJ0aWZhY3ROYW1lKS4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBFbnZlbG9wZVZhbGlkYXRvciBuZXdFbnZlbG9wZVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEluc3RhbnRpYXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MuCi0gICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdGhpcyBpbnRlcmZhY2UgaXMgc3BlY2lmaWVkIGluIHRoZSBmb2xsb3dpbmcgCi0gICAqIEphdmEgc3lzdGVtIHByb3BlcnR5OgotICAgKiA8VUw+Ci0gICAqICAgPExJPndzaS5wcm9maWxlLnZhbGlkYXRvci5mYWN0b3J5Ci0gICAqIDwvVUw+Ci0gICAqCi0gICAqIEByZXR1cm4gdGhlIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgZmFjdG9yeSBjbGFzcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeSBuZXdJbnN0YW5jZSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotICAgIFN0cmluZyBmYWN0b3J5Q2xhc3NOYW1lID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBmYWN0b3J5IGNsYXNzIG5hbWUKLSAgICAgIGZhY3RvcnlDbGFzc05hbWUgPQotICAgICAgICBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KAotICAgICAgICAgIFdTSVByb3BlcnRpZXMuUFJPUF9WQUxJREFUT1JfRkFDVE9SWSwKLSAgICAgICAgICBXU0lQcm9wZXJ0aWVzLkRFRl9WQUxJREFUT1JfRkFDVE9SWSk7Ci0KLSAgICAgIC8vIENyZWF0ZSB0aGUgZmFjdG9yeSBjbGFzcwotICAgICAgQ2xhc3MgZmFjdG9yeUNsYXNzID0gQ2xhc3MuZm9yTmFtZShmYWN0b3J5Q2xhc3NOYW1lKTsKLQotICAgICAgLy8gSW5zdGFudGlhdGUgdGhlIGZhY3RvcnkgCi0gICAgICBmYWN0b3J5ID0gKFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5KSBmYWN0b3J5Q2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBpbnN0YW50aWF0ZSBmYWN0b3J5IGNsYXNzOiAiICsgZmFjdG9yeUNsYXNzTmFtZSArICIuIiwKLSAgICAgICAgZSk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGZhY3RvcnkKLSAgICByZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1VERElWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1VERElWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMxMjliZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9VRERJVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci0KLS8qKgotICogVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIFdTREwgYW5kIGFzc29jaWF0ZWQgWE1MIHNjaGVtYSBkZWZpbml0aW9ucwotICogYXJlIGluIGNvbmZvcm1hbmNlIHdpdGggdGhlIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFVERElWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlVmFsaWRhdG9yCi17Ci0gIC8qKiBEaXNjb3ZlcnkgYXJ0aWZhY3QgdHlwZSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RJU0NPVkVSWSA9ICJkaXNjb3ZlcnkiOwotCi0gIC8qKiBCaW5kaW5nIHRlbXBsYXRlIGRpc2NvdmVyeSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUgPSAiYmluZGluZ1RlbXBsYXRlIjsKLQotICAvKiogdE1vZGVsIGRpc2NvdmVyeSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RJU0NPVkVSWV9UTU9ERUwgPSAidE1vZGVsIjsKLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgICAgICAgIGFuIHByb2ZpbGUgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCAgdGhlIHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHVkZGlSZWZlcmVuY2UgICBhIFVEREkgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gcmVwb3J0ZXIgICAgICAgIGEgUmVwb3J0ZXIgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBVRERJIHZhbGlkYXRvciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBpbml0KEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGVBc3NlcnRpb25zIGFzc2VydGlvbnMsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0ZXIgcmVwb3J0ZXIpCi0KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBVRERJIGJhc2VkIHNlcnZpY2UgZGVzY3JpcHRpb24uCi0gICAqIEByZXR1cm4gSWYgdGhlIFVEREkgZW50cmllcyBhcmUgdmFsaWQsIHRoZW4gdGhlIHZhbHVlIHJldHVybmVkIAotICAgKiAgICAgICAgIGlzIHRoZSBVUkwgZm9yIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBXU0lFeGNlcHRpb24gaWYgYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZAotICAgKiAgICAgICAgIHdoaWxlIHByb2Nlc3NpbmcgdGhlIFVEREllbnRyaWVzLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgdmFsaWRhdGVBcnRpZmFjdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHZhbGlkYXRlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1dTRExWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1dTRExWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkODg2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9XU0RMVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIFdTREwgYW5kIGFzc29jaWF0ZWQgWE1MIHNjaGVtYSBkZWZpbml0aW9ucwotICogYXJlIGluIGNvbmZvcm1hbmNlIHdpdGggdGhlIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlVmFsaWRhdG9yCi17Ci0gIC8qKiBEZXNjcmlwdGlvbiBhcnRpZmFjdCB0eXBlICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOwotCSAKLSAgLyoqIERlZmluaXRpb25zIGRlc2NyaXB0aW9uIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMgPSAiZGVmaW5pdGlvbnMiOwotCi0gIC8qKiBJbXBvcnQgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9JTVBPUlQgPSAiaW1wb3J0IjsKLQotICAvKiogVHlwZXMgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9UWVBFUyA9ICJ0eXBlcyI7Ci0KLSAgLyoqIE1lc3NhZ2UgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFID0gIm1lc3NhZ2UiOwotCi0gIC8qKiBPcGVyYXRpb24gZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04gPSAib3BlcmF0aW9uIjsKLQotICAvKiogUG9ydFR5cGUgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSA9ICJwb3J0VHlwZSI7Ci0KLSAgLyoqIEJpbmRpbmcgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HID0gImJpbmRpbmciOwotCi0gIC8qKiBQb3J0IGRlc2NyaXB0aW9uIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfREVTQ1JJUFRJT05fUE9SVCA9ICJwb3J0IjsKLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgICAgICAgIHRoZSBwcm9maWxlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcmVwb3J0QXJ0aWZhY3QgIHRoZSByZXBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSB3c2RsVVJMICAgICAgICAgdGhlIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgICAgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSByZXBvcnRlciAgICAgICAgYSBSZXBvcnRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIFdTREwgdmFsaWRhdG9yIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZUFzc2VydGlvbnMgYXNzZXJ0aW9ucywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgU3RyaW5nIHdzZGxVUkwsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCwKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBiYXNlZCBzZXJ2aWNlIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkCi0gICAqICAgICAgICAgd2hpbGUgdmFsaWRhdGluZyBoZSBXU0RMIGJhc2VkIHNlcnZpY2UgZGVzY3JpcHRpb24uCi0gICAqIEBkZXByZWNhdGVkICAtLSB1c2UgdmFsaWRhdGVBcnRpZmFjdCgpCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50IHZhbGlkYXRlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQXNzZXJ0aW9uUHJvY2Vzcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Bc3NlcnRpb25Qcm9jZXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYTNkMmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Bc3NlcnRpb25Qcm9jZXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRmFpbHVyZURldGFpbDsKLQotCi0vKioKLSAqIFByb2Nlc3MgYXNzZXJ0aW9uLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcm90ZWN0ZWQgU3RyaW5nIHJlc3VsdDsKLSAgcHJvdGVjdGVkIFN0cmluZyBmYWlsdXJlRGV0YWlsTWVzc2FnZTsKLSAgcHJvdGVjdGVkIEZhaWx1cmVEZXRhaWwgZmFpbHVyZURldGFpbDsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlVmFsaWRhdG9ySW1wbCBiYXNlX3ZhbGlkYXRvcjsKLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25Qcm9jZXNzKEJhc2VWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICB0aGlzLmJhc2VfdmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICovCi0gIHZvaWQgcmVzZXQoKQotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBudWxsOwotICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGFzc2VydGlvbi4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCB0YXJnZXRDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFZlcmJvc2Ugb3V0cHV0LgotICAgKi8KLSAgcHVibGljIHZvaWQgZGVidWcoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBpZiAoKGJhc2VfdmFsaWRhdG9yICE9IG51bGwpICYmIGJhc2VfdmFsaWRhdG9yLnZlcmJvc2VPcHRpb24pCi0gICAgewotICAgICAgU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNjY2VlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL0Fzc2VydGlvblByb2Nlc3NWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogUHJvY2VzcyBhc3NlcnRpb24gdXNpbmcgV1NETFZpc2l0b3IgaW50ZXJmYWNlLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLSAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi0gIGltcGxlbWVudHMgV1NETFZpc2l0b3IKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yKEJhc2VWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KFNlcnZpY2Ugb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChUeXBlcyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KElucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoT3V0cHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgQmluZGluZ09wZXJhdGlvbiBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBCaW5kaW5nSW5wdXQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgQmluZGluZ091dHB1dCBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBCaW5kaW5nRmF1bHQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KE1lc3NhZ2Ugb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBIZWFkZXIgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZU1lc3NhZ2VWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZU1lc3NhZ2VWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJjMDU4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL0Jhc2VNZXNzYWdlVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5DYW5kaWRhdGVJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5TZXJ2aWNlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTG9nVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5NZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGwuV1NETFZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET00yV3JpdGVyOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET01VdGlsczsKLQotLyoqCi0gKiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCB2ZXJpZnkgdGhhdCB0aGUgV1NETCBhbmQgYXNzb2NpYXRlZCBYTUwgc2NoZW1hIGRlZmluaXRpb25zCi0gKiBhcmUgaW4gY29uZm9ybWFuY2Ugd2l0aCB0aGUgcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAYXV0aG9yIEppbSBDbHVuZQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqIEBhdXRob3IgTmVpbCBEZWxpbWEgKG5kZGVsaW1hQGNhLmlibS5jb20pIAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgZXh0ZW5kcyBCYXNlVmFsaWRhdG9ySW1wbAotICBpbXBsZW1lbnRzIExvZ1ZhbGlkYXRvcgotewotICAvKioKLSAgKiBXU0RMIGRvY3VtZW50LgotICAqLwotICBwcml2YXRlIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQ7Ci0KLSAgLyoqCi0gICAqIExvZyBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlRW50cnkgbG9nRW50cnk7Ci0gIHByb3RlY3RlZCBMb2cgbG9nOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RhYmxlOwotICBwcml2YXRlIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnOwotCi0gIHB1YmxpYyB2b2lkIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgICAgICAgIHRocm93cyBXU0lFeGNlcHRpb24gewotCi0gICAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgYXNzZXJ0aW9ucy5nZXRBcnRpZmFjdChnZXRBcnRpZmFjdFR5cGUoKSksCi0gICAgICAgICAgICAgIHJlcG9ydEFydGlmYWN0LCByZXBvcnRlcik7Ci0KLSAgICAgIHRlc3RhYmxlID0gYW5hbHl6ZXJDb25maWcuZ2V0TG9nTG9jYXRpb24oKSAhPSBudWxsOwotICAgICAgdGhpcy5hbmFseXplckNvbmZpZyA9IGFuYWx5emVyQ29uZmlnOwotICAgICAgdGhpcy53c2RsRG9jdW1lbnQgPSAoV1NETERvY3VtZW50KSBhbmFseXplckNvbnRleHQuZ2V0V3NkbERvY3VtZW50KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3IjaW5pdChvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0LCBvcmcud3NpLnRlc3QucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3QsIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QsIG9yZy53c2kud3NkbC5XU0RMRG9jdW1lbnQsIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEJhc2VWYWxpZGF0b3JJbXBsCi0gICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsIHByb2ZpbGVBcnRpZmFjdCwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLQotICAgIHRoaXMuYW5hbHl6ZXJDb25maWcgPSBVdGlscy5nZXRBbmFseXplckNvbmZpZyhyZXBvcnRlcik7Ci0gICAgdGVzdGFibGUgPSAoKGFuYWx5emVyQ29uZmlnICE9IG51bGwpICYmIChhbmFseXplckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpICE9IG51bGwpKTsJCi0KLSAgICAvLyBTYXZlIGlucHV0IHJlZmVyZW5jZXMKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdzZGxEb2N1bWVudAotICAgKiBAcmV0dXJuIHdzZGxEb2N1bWVudAotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3IjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgLy8gU2F2ZSBsb2cgZW50cnkgdG8gYmUgcmVmZXJlbmNlZCBieSBvdGhlciBtZXRob2RzCi0gICAgdGhpcy5sb2dFbnRyeSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKTsKLQotICAgIC8vIEdldCByZWZlcmVuY2UgdG8gdGhlIGFuYWx5emVyIGNvbmZpZyBvYmplY3QKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZyA9Ci0gICAgICByZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRSZXBvcnRDb250ZXh0KCkuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpOwotCi0gICAgLyogSWYgU2VydmljZSBEZXNjcmlwdGlvbiAoV1NETC9VRERJKSBOT1Qgc3VwcGxpZWQgaW4gYW5hbHl6ZXIgY29uZmlnIE9SCi0gICAgICogU2VydmljZSBEZXNjcmlwdGlvbiBJUyBzdXBwbGllZCBhbmQgdGhlIGN1cnJlbnQgbWVzc2FnZSBjb3JyZWxhdGVzIHRvIGl0Li4uCi0gICAgICovCi0gICAgaWYgKCghYW5hbHl6ZXJDb25maWcuaXNXU0RMUmVmZXJlbmNlU2V0KCkpCi0gICAgICB8fCBtZXNzYWdlQ29ycmVsYXRlc1RvU2VydmljZSgKLSAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICBhbmFseXplckNvbmZpZy5nZXRDb3JyZWxhdGlvblR5cGUoKSkpCi0gICAgewotICAgICAgLy8gbm93IGlubmVyIGNsYXNzZXMgbW92ZWQgb3V0IGZyb20gdGhlIHZhbGlkYXRvcgotICAgICAgLy9TdHJpbmcgY2xhc3NQcmVmaXggPSB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiQiOwotICAgICAgU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldFBhY2thZ2UoKS5nZXROYW1lKCkrIi4iOwotCi0gICAgICAvLyBQcm9jZXNzIGFzc2VydGlvbnMgZm9yIHRoaXMgYXJ0aWZhY3QgYWdhaW5zdCB0aGUgdGFyZ2V0IGNvbnRleHQKLSAgICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB3aGV0aGVyIHRoZSBtZXNzYWdlIGNvcnJlbGF0ZXMgdG8gdGhlIHNlcnZpY2UgdW5kZXIgdGVzdC4KLSAgICogVXNlIHRoZSByZXF1ZXN0IHBhcnQgb2YgdGhlIHJlcXVlc3QtcmVzcG9uc2UgcGFpciwgZnJvbSB3aGljaCB0aGUgY29ycmVsYXRpb24gb2YgdGhlIHJlc3BvbnNlIGlzIGltcGxpZWQuCi0gICAqIEVudGl0aWVzIGZyb20gdGhlIFNlcnZpY2UgdW5kZXIgdGVzdCBhcmUgZGV0ZXJtaW5lZCBvbmNlIGZvciBhbGwuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgICAgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHBhcmFtIGNvcnJlbGF0aW9uVHlwZSBhIGNvcnJlbGF0aW9uIHR5cGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbWVzc2FnZSBjb3JyZWxhdGVzIHRvIHRoZSBzZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGNvcnJlbGF0aW9uIHR5cGUgaXMgbm90IGFwcHJvcHJpYXRlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIG1lc3NhZ2VDb3JyZWxhdGVzVG9TZXJ2aWNlKAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgU3RyaW5nIGNvcnJlbGF0aW9uVHlwZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIFVSSVtdIGVuZHBvaW50cyA9IG51bGw7Ci0gICAgYm9vbGVhbiBjb3JyZWxhdGlvbiA9IGZhbHNlOwotCi0gICAgLyogVEVNUDogR2V0IGl0IGZyb20gYW5hbHl6ZXIgY29uZmlnIHBhc3NlZCBpbiBvbiBpbml0IG1ldGhvZAotICAgIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlID0gZW50cnlDb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QW5hbHl6ZXJDb250ZXh0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCk7Ci0gICAgKi8KLSAgICBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZSA9IGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCk7Ci0KLSAgICAvLyBTZXJ2aWNlIHJlZmVyZW5jZSAKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UgPSBhbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IG51bGw7Ci0gICAgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgc2VydmljZQotICAgICAgU2VydmljZSBzZXJ2aWNlID0KLSAgICAgICAgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50UU5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldCBwb3J0Ci0gICAgICBQb3J0IHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldCBiaW5kaW5nCi0gICAgICBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc0JpbmRpbmcoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgYmluZGluZwotICAgICAgYmluZGluZyA9Ci0gICAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKChlbmRwb2ludHMgPSBob3N0QW5kUG9ydENvcnJlbGF0aW9uKGVudHJ5Q29udGV4dCkpICE9IG51bGwKLSAgICAgICYmIHVybFBhdGhDb3JyZWxhdGlvbihlbnRyeUNvbnRleHQsIGVuZHBvaW50cykpCi0gICAgewotCi0gICAgICAvKiBJZiBjb3JyZWxhdGlvbiB0eXBlIGlzICJlbmRwb2ludCIsIHRoaXMgaXMgYWxsIHRoZSBjb3JyZWxhdGlvbiB0aGF0IGNhbiBiZSBkb25lLgotICAgICAgICogKE5vdGUgLSB0aGlzIGlzIGluY29tcGxldGUgY29ycmVsYXRpb24gc2luY2UgPjEgc2VydmljZSBjb3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGVuZHBvaW50LgotICAgICAgICogIFRoZXJlZm9yZSAsIGlmIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgc2VydmljZXMgb24gdGhlIHNhbWUgZW5kcG9pbnQgYXBwZWFyIGluIHRoZSBsb2cgZmlsZQotICAgICAgICogIGFuZCBjb3JyZWxhdGlvbiB0eXBlIGlzICJlbmRwb2ludCIsIGFsbCB0aG9zZSBtZXNzYWdlcyB3aWxsIGJlIGFuYWx5emVkKS4KLSAgICAgICAqLwotICAgICAgaWYgKGNvcnJlbGF0aW9uVHlwZQotICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfRU5EUE9JTlQpKQotICAgICAgewotICAgICAgICBjb3JyZWxhdGlvbiA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGFsd2F5cyBhbGxvdyBHRVQgcmVxdWVzdHMgcmlnaHQgdGhyb3VnaCBpZiB0aGV5J3ZlIHBhc3NlZCBFbmRwb2ludCBDb3JyZWxhdGlvbgotICAgICAgICBTdHJpbmcgcmVxdWVzdFR5cGUgPSBnZXRIdHRwUmVxdWVzdFR5cGUoZW50cnlDb250ZXh0KTsKLSAgICAgICAgaWYgKChyZXF1ZXN0VHlwZSAhPSBudWxsKSAmJiByZXF1ZXN0VHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJHRVQiKSkKLSAgICAgICAgewotICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgY29ycmVsYXRpb25UeXBlIGlzIG5vdCAiZW5kcG9pbnQiIHNvIGNvbnRpbnVlIG9uIHRvIHByb2Nlc3NpbmcgZm9yIGF0IGxlYXN0IAotICAgICAgICAgIC8vICJuYW1lc3BhY2UiIGNvcnJlbGF0aW9uLi4uCi0KLSAgICAgICAgICAvLyBnZXQgdGhlIG9wZXJhdGlvbiBzaWduYXR1cmUgKGlucHV0ICYgb3V0cHV0KSBmcm9tIHJlcXVlc3QgJiByZXNwb25zZSBtZXNzYWdlcy4uLgkgICAKLSAgICAgICAgICAvLyBhbmQgZG8gYSBxdWljayBET00gcGFyc2UgCi0gICAgICAgICAgRG9jdW1lbnQgcmVxdWVzdE1lc3NhZ2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0KLSAgICAgICAgICAvLyBDaGVjayBpZiBuYW1lc3BhY2UgaXMgZm91bmQgaW4gcmVxdWVzdCBtZXNzYWdlIG9ubHkKLSAgICAgICAgICBpZiAobmFtZXNwYWNlQ29ycmVsYXRpb24oYmluZGluZywgcmVxdWVzdE1lc3NhZ2UpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIG5hbWVzcGFjZSBmb3VuZCBhbmQgdGhlIGNvcnJlbGF0aW9uIHR5cGUgaXMgbmFtZXNwYWNlLCB0aGVuIHByb2Nlc3MgbWVzc2FnZXMKLSAgICAgICAgICAgIGlmIChjb3JyZWxhdGlvblR5cGUKLSAgICAgICAgICAgICAgLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX05BTUVTUEFDRSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgb3BlcmF0aW9uIGlzIGZvdW5kIGFuZCBjb3JyZWxhdGlvbiB0eXBlIGlzIG9wZXJhdGlvbiwgdGhlbiBwcm9jZXNzIG1lc3NhZ2VzCi0gICAgICAgICAgICBlbHNlIGlmICgKLSAgICAgICAgICAgICAgKG9wZXJhdGlvbkNvcnJlbGF0aW9uKGJpbmRpbmcsIHJlcXVlc3RNZXNzYWdlKSkKLSAgICAgICAgICAgICAgICAmJiAoY29ycmVsYXRpb25UeXBlCi0gICAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfT1BFUkFUSU9OKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGlmIGNvbmZpZyBzY2hlbWEgd2FzIGZvbGxvd2VkIGNvcnJlY3RseQotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJCYWQgY29ycmVsYXRpb24gdHlwZSBmb3VuZCBpbiBjb25maWc6ICIgKyBjb3JyZWxhdGlvblR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3JyZWxhdGlvbjsKLSAgfQotCi0gIC8qKiAKLSAgICogIENvcnJlbGF0aW9uIENoZWNrIDE6IFNlcnZpY2UgRGVzY3JpcHRpb24gZW5kcG9pbnQgdnMgSFRUUCBIZWFkZXIgKHRlc3QgMSkKLSAgICogIENoZWNrIGlmIHJlY2VpdmVySG9zdEFuZFBvcnQgZnJvbSByZXF1ZXN0IG1lc3NhZ2UgbG9nIG1hdGNoZXMgaG9zdCAmIHBvcnQgZnJvbSBXU0RMIFNPQVAgYmluZGluZyBmb3IKLSAgICogIHRoZSBTZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAqICBJZiBpdCBkb2VzIG5vdCwgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbWVzc2FnZSBwYWlyLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGFuIGVudHJ5IGNvbnRleHQuCi0gICAqIEByZXR1cm4gaWYgcmVjZWl2ZXJIb3N0QW5kUG9ydCBmcm9tIHJlcXVlc3QgbWVzc2FnZSBsb2cgbWF0Y2hlcyAKLSAgICogICAgICAgICBob3N0ICYgcG9ydCBmcm9tIFdTREwgU09BUCBiaW5kaW5nIGZvciB0aGUgU2VydmljZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIGNvcnJlbGF0aW9uIGNoZWNrLgotICAgKi8KLSAgcHJpdmF0ZSBVUklbXSBob3N0QW5kUG9ydENvcnJlbGF0aW9uKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXQgPHJlY2VpdmVySG9zdEFuZFBvcnQ+IGZyb20gcmVxdWVzdCBtZXNzYWdlCi0gICAgU3RyaW5nIGh0dHBIb3N0QW5kUG9ydCA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpOwotICAgIC8vIFNlYXJjaCBlbmRwb2ludCBsaXN0IGZvciBhIG1hdGNoIHdpdGggPHJlY2VpdmVySG9zdEFuZFBvcnQ+Ci0KLSAgICAvKiBURU1QOiBHZXQgaXQgZnJvbSBhbmFseXplciBjb25maWcgcGFzc2VkIGluIG9uIGluaXQgbWV0aG9kCi0gICAgcmV0dXJuIGVudHJ5Q29udGV4dC5nZXRBbmFseXplckNvbnRleHQoKQotICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgICAgICAgIC5nZXRFbmRQb2ludHMoaHR0cEhvc3RBbmRQb3J0KTsKLSAgICAqLwotICAgIHJldHVybiBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEVuZFBvaW50cyhodHRwSG9zdEFuZFBvcnQpOwotICB9Ci0KLSAgLyoqIAotICAgKiBDb3JyZWxhdGlvbiBDaGVjayAyOiBTZXJ2aWNlIERlc2NyaXB0aW9uIGVuZHBvaW50IHZzIEhUVFAgSGVhZGVyICh0ZXN0IDIpCi0gICAqIAotICAgKiBVc2UgYW5hbHl6ZXIgY29uZmlnIGhvc3QgJiBwb3J0LCBwbHVzIFVSTCBwYXRoIChmcm9tIHJlcXVlc3QgbWVzc2FnZSBoZWFkZXIgSFRUUCBQT1NUKQotICAgKiB0byBsb29rIGZvciB0aGUgY29ycmVzcG9uZGluZyBlbmRwb2ludCBpbiB0aGUgU2VydmljZSBEZWZpbml0aW9uLgotICAgKiBJZiBpdCBkb2VzIG5vdCwgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbWVzc2FnZSBwYWlyLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGFuIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbmRwb2ludHMgYW4gYXJyYXkgb2YgZW5kcG9pbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgY29ycmVzcG9uZGluZyBlbmRwb2ludHMgYXJlIGZvdW5kIGluIHRoZSBTZXJ2aWNlIERlZmluaXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbiBjaGVjay4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB1cmxQYXRoQ29ycmVsYXRpb24oCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCwKLSAgICBVUklbXSBlbmRwb2ludHMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBjb21wYXJlczogcHJvdG9jb2wgKG11c3QgYmUgaHR0cCBmb3IgUE9TVCksIGhvc3QsIHBvcnQgYW5kIHBhdGguCi0KLSAgICAvLyBnZXQgUE9TVCBVUkkgcGF0aCBmcm9tIG1lc3NhZ2UgdXNpbmcgVG9rZW5pemVyCQotICAgIFZlY3RvciByZXF1ZXN0TGluZSA9Ci0gICAgICBnZXRIdHRwUmVxdWVzdChlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkpOwotICAgIGlmIChyZXF1ZXN0TGluZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsgLy8gYW4gdW5leHBlY3RlZCBIVFRQIHJlcXVlc3QgdHlwZSAhCi0gICAgfQotCi0gICAgU3RyaW5nIHJlcXVlc3RQYXRoID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDEpOwotICAgIC8vIFBhdGggaW1tZWRpYXRlbHkgZm9sbG93cyBQT1NUCi0KLSAgICAvLyBjb21wYXJlIHBhdGggd2l0aCB0aG9zZSBpbiB0aGUgcHJldmlvdXMgZ2VuZXJhdGVkIFVSSSBsaXN0CQotICAgIFZlY3RvciBmaWx0ZXJlZEVuZHBvaW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZHBvaW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZW5kcG9pbnRzW2ldLnRvU3RyaW5nKCkuZW5kc1dpdGgocmVxdWVzdFBhdGgpKQotICAgICAgewotICAgICAgICBmaWx0ZXJlZEVuZHBvaW50cy5hZGQoZW5kcG9pbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmlsdGVyZWRFbmRwb2ludHMuc2l6ZSgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyB0aGlzIFVSSSBzaG91bGQgYmUgdW5pcXVlIGluIHRoZSBXU0RMIC0gdGhlcmUgc2hvdWxkIGJlIGF0IG1vc3Qgb25lIG1hdGNoCi0gICAgLy8gYnV0IGlmIHdlIGhhdmUgYXQgbGVhc3Qgb25lLCB0aGF0J3Mgc3VmZmljaWVudCB0byBhY2NlcHQgdGhlIG1lc3NhZ2UKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqIAotICAgKiBDb3JyZWxhdGlvbiBDaGVjayAzOiBTZXJ2aWNlIERlc2NyaXB0aW9uIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIERldGVybWluZSBpZiB0aGUgU2VydmljZSBEZXNjcmlwdGlvbiBkZWNsYXJlcyB0aGUgbmFtZXNwYWNlIHRoYXQgYXBwZWFycyBpbiB0aGUgKHJlcXVlc3Q/KSBtZXNzYWdlIHNvYXAgYm9keS4KLSAgICogTG9jYXRpb24gb2YgcmVsZXZlbnQgbmFtZXNwYWNlIDoKLSAgICogT3BlcmF0aW9uIHR5cGUgICAgICAgICAgICAgICAgICAgIAktIE1lc3NhZ2UgTmFtZXNwYWNlOiAoY29tcGFyZSB3aXRoKSAgU2VydmljZSBEZWZpbml0aW9uIE5hbWVzcGFjZToKLSAgICogKGZyb20gbWVzc2FnZT8gZW5kcG9pbnQ/IHdoZXJlPykKLSAgICogcnBjLWxpdGVyYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7c29hcDpCb2R5Jmd0OyBjaGlsZCBuYW1lc3BhY2UuICAgICAgICAmbHQ7c29hcGJpbmQ6Ym9keSZndDsgbmFtZXNwYWNlLgotICAgKiBkb2MtbGl0ZXJhbAkJCSAgICAgICAgICAgICAgICAgJmx0O3NvYXA6Qm9keSZndDsgY2hpbGQgbmFtZXNwYWNlLiAgICAgICB0YXJnZXROYW1lU3BhY2Ugb2Ygc2NoZW1hIHRoYXQKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgICZsdDtzb2FwOmJvZHkmZ3Q7IGNoaWxkLgotICAgKiBJZiBpdCBkb2Vzbid0IG1hdGNoLCBzdG9wIHByb2Nlc3NpbmcgdGhpcyBtZXNzYWdlIHBhaXIuCi0gICAqIEBwYXJhbSBiaW5kaW5nIGEgYmluZGluZy4KLSAgICogQHBhcmFtIHJlcXVlc3QgYSByZXF1ZXN0LgotICAgKiBAcmV0dXJuIHRydWUgaWYgZGVzY3JpcHRpb24gZGVjbGFyZWQgaW4gdGhlIGRlc2NyaXB0aW9uIGFyZSB0aGUgCi0gICAqICAgICAgICAgc2FtZSBhcyB0aG9zZSB0aGF0IGFwcGVhciBpbiB0aGUgbWVzc2FnZSBzb2FwIGJvZHkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbmNoZWNrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gbmFtZXNwYWNlQ29ycmVsYXRpb24oQmluZGluZyBiaW5kaW5nLCBEb2N1bWVudCByZXF1ZXN0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gbmFtZXNwYWNlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgYmluZGluZ1N0eWxlID0gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQzsKLQotICAgIC8vIEdldCBvcGVyYXRpb24gbmFtZXNwYWNlIGZyb20gdGhlIHJlcXVlc3Qgc29hcCBtZXNzYWdlCi0gICAgU3RyaW5nIHNvYXBPcE5TID0gZ2V0U29hcEJvZHlDaGlsZChyZXF1ZXN0KS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIC8vIEdldCBzb2FwYmluZDpiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBudWxsOwotICAgIGlmICgoc29hcEJpbmRpbmcgPSBXU0RMVXRpbHMuZ2V0U29hcEJpbmRpbmcoYmluZGluZykpICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ1N0eWxlID0gc29hcEJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICB9Ci0KLSAgICAvLyBHbyB0aHJvdWdoIGVhY2ggb3BlcmF0aW9uIGluIHRoZSBiaW5kaW5nIGFuZCBjaGVjayBmb3IgbmFtZXNwYWNlIG1hdGNoCi0gICAgSXRlcmF0b3Igb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChvcGVyYXRpb25zLmhhc05leHQoKSAmJiAhKG5hbWVzcGFjZUZvdW5kKSkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BlcmF0aW9ucy5uZXh0KCk7Ci0KLSAgICAgIC8vIElmIHJwYy1saXRlcmFsLCB0aGVuIGxvb2sgYXQgbmFtZXNwYWNlIGF0dHJpYnV0ZSBvbiBzb2FwYmluZDpib2R5Ci0gICAgICBpZiAoV1NETFV0aWxzLmlzUnBjTGl0ZXJhbChiaW5kaW5nU3R5bGUsIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICAvLyBHZXQgc29hcGJpbmQ6Ym9keSBlbGVtZW50IAotICAgICAgICBTT0FQQm9keSBzb2FwQm9keSA9IFdTRExVdGlscy5nZXRJbnB1dFNvYXBCb2R5KGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgICAgIGlmICgoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKHNvYXBPcE5TKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lc3BhY2VGb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgZG9jLWxpdGVyYWwsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICBlbHNlIGlmIChXU0RMVXRpbHMuaXNEb2NMaXRlcmFsKGJpbmRpbmdTdHlsZSwgYmluZGluZ09wZXJhdGlvbikpCi0gICAgICB7Ci0gICAgICAgIGludCBwYXJ0Q291bnQ7Ci0gICAgICAgIEl0ZXJhdG9yIHBhcnRzSXRlcmF0b3IgPSBudWxsOwotCi0gICAgICAgIC8vIEdldCBmaXJzdCBwYXJ0IG5hbWUgZnJvbSBzb2FwYmluZDpib2R5IGVsZW1lbnQgcGFydHMgYXR0cmlidXRlCi0gICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldEZpcnN0UGFydE5hbWUoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHBhcnRzIGZyb20gdGhlIG1lc3NhZ2UgICAgICAgICAgIAotICAgICAgICBNYXAgcGFydHNNYXAgPSBudWxsOwotICAgICAgICBpZiAoKHBhcnRzTWFwID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkpCi0gICAgICAgICAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHBhcnRzSXRlcmF0b3IgPSBwYXJ0c01hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHBhcnQgbmFtZSB3YXNuJ3Qgc3BlY2lmaWVkIG9uIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQsIHRoZW4gcHJvY2VzcyBqdXN0IHRoZSBmaXJzdCBvbmUKLSAgICAgICAgICBpZiAocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHBhcnRDb3VudCA9IDE7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFydENvdW50ID0gcGFydHNNYXAuc2l6ZSgpOwotCi0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0Q291bnQgJiYgIW5hbWVzcGFjZUZvdW5kOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0IG5leHQgcGFydAotICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIHBhcnRzSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgICAvLyBJZiBwYXJ0IG5hbWUgbWF0Y2hlcyBvciB0aGVyZSBpcyBubyBwYXJ0IG5hbWUsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICAgICAgICBpZiAoKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgIHx8ICgocGFydE5hbWUgIT0gbnVsbCkgJiYgKHBhcnQuZ2V0TmFtZSgpLmVxdWFscyhwYXJ0TmFtZSkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKChwYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAmJiAocGFydC5nZXRFbGVtZW50TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhzb2FwT3BOUykpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZUZvdW5kOwotICB9Ci0KLSAgLyoqIAotICAqIENvcnJlbGF0aW9uIENoZWNrIDQgOiBTZXJ2aWNlIERlc2NyaXB0aW9uICJvcGVyYXRpb24iCi0gICoKLSAgKiBDaGVjayBpZiB0aGUgbWVzc2FnZSBjb250ZW50IG1hdGNoZXMgYW55IG9mIHRoZSBjYW5kaWRhdGUgb3BlcmF0aW9uIGRlZmluaXRpb25zIAotICAqIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSBpbiB0aGUgU2VydmljZSBEZXNjcmlwdGlvbi4KLSAgKiAgCi0gICogRm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UsIGxvb2sgZm9yIHRoZSBzb2FwIGJvZHkgY2hpbGQgZWxlbWVudCBuYW1lCi0gICogaW4gdGhlIGxpc3Qgb2YgY2FuZGlkYXRlIG9wZXJhdGlvbiBuYW1lcy4KLSAgKiBAcGFyYW0gYmluZGluZyAgICAgICAgYSBiaW5kaW5nLgotICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBhIHJlcXVlc3QgbWVzc2FnZS4KLSAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG1lc3NhZ2UgY29udGVudCBtYXRjaGVzIGFueSBvZiB0aGUgY2FuZGlkYXRlIAotICAqICAgICAgICAgb3BlcmF0aW9uIGRlZmluaXRpb25zIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSBpbiB0aGUgCi0gICogICAgICAgICBTZXJ2aWNlIERlc2NyaXB0aW9uLgotICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbmNoZWNrLgotICAqLwotICBwcml2YXRlIGJvb2xlYW4gb3BlcmF0aW9uQ29ycmVsYXRpb24oCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIERvY3VtZW50IHJlcXVlc3RNZXNzYWdlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gb3BlcmF0aW9uRm91bmQgPSBmYWxzZTsKLQotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUgPSBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DOwotCi0gICAgLy8gR2V0IHNvYXBiaW5kOmJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IG51bGw7Ci0gICAgaWYgKChzb2FwQmluZGluZyA9IFdTRExVdGlscy5nZXRTb2FwQmluZGluZyhiaW5kaW5nKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBiaW5kaW5nU3R5bGUgPSBzb2FwQmluZGluZy5nZXRTdHlsZSgpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBmcm9tIHRoZSBzb2FwIGJvZHkKLSAgICBFbGVtZW50IHNvYXBCb2R5Q2hpbGQgPSBnZXRTb2FwQm9keUNoaWxkKHJlcXVlc3RNZXNzYWdlKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIGEgY2hpbGQgZWxlbWVudCwgdGhlbiBjaGVjayBpdAotICAgIGlmIChzb2FwQm9keUNoaWxkICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IG9wZXJhdGlvbiBuYW1lIGZyb20gdGhlIHNvYXA6Ym9keQotICAgICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBzb2FwQm9keUNoaWxkLmdldExvY2FsTmFtZSgpOwotCi0gICAgICAvLyBHZXQgb3BlcmF0aW9uIFFOYW1lCi0gICAgICBRTmFtZSBvcGVyYXRpb25RTmFtZSA9Ci0gICAgICAgIG5ldyBRTmFtZShzb2FwQm9keUNoaWxkLmdldE5hbWVzcGFjZVVSSSgpLCBvcGVyYXRpb25OYW1lKTsKLQotICAgICAgLy8gR28gdGhyb3VnaCBlYWNoIG9wZXJhdGlvbiBpbiB0aGUgYmluZGluZyBhbmQgY2hlY2sgZm9yIG5hbWVzcGFjZSBtYXRjaAotICAgICAgSXRlcmF0b3Igb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKG9wZXJhdGlvbnMuaGFzTmV4dCgpICYmICEob3BlcmF0aW9uRm91bmQpKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPQotICAgICAgICAgIChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLm5leHQoKTsKLQotICAgICAgICAvLyBJZiBycGMtbGl0ZXJhbCwgdGhlbiBsb29rIGF0IG5hbWVzcGFjZSBhdHRyaWJ1dGUgb24gc29hcGJpbmQ6Ym9keQotICAgICAgICBpZiAoV1NETFV0aWxzLmlzUnBjTGl0ZXJhbChiaW5kaW5nU3R5bGUsIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHNvYXBiaW5kOmJvZHkgZWxlbWVudCAKLSAgICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkuZXF1YWxzKG9wZXJhdGlvbk5hbWUpKQotICAgICAgICAgICAgb3BlcmF0aW9uRm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgZG9jLWxpdGVyYWwsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICAgIGVsc2UgaWYgKFdTRExVdGlscy5pc0RvY0xpdGVyYWwoYmluZGluZ1N0eWxlLCBiaW5kaW5nT3BlcmF0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgIGludCBwYXJ0Q291bnQ7Ci0gICAgICAgICAgSXRlcmF0b3IgcGFydHNJdGVyYXRvciA9IG51bGw7Ci0KLSAgICAgICAgICAvLyBHZXQgZmlyc3QgcGFydCBuYW1lIGZyb20gc29hcGJpbmQ6Ym9keSBlbGVtZW50IHBhcnRzIGF0dHJpYnV0ZQotICAgICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldEZpcnN0UGFydE5hbWUoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcGFydHMgZnJvbSB0aGUgbWVzc2FnZSAgICAgICAgICAgCi0gICAgICAgICAgTWFwIHBhcnRzTWFwID0gbnVsbDsKLSAgICAgICAgICBpZiAoKHBhcnRzTWFwID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0UGFydHMoKSkKLSAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHNJdGVyYXRvciA9IHBhcnRzTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBwYXJ0IG5hbWUgd2Fzbid0IHNwZWNpZmllZCBvbiB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50LCB0aGVuIHByb2Nlc3MganVzdCB0aGUgZmlyc3Qgb25lCi0gICAgICAgICAgICBpZiAocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgcGFydENvdW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcGFydENvdW50ID0gcGFydHNNYXAuc2l6ZSgpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRDb3VudCAmJiAhb3BlcmF0aW9uRm91bmQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gR2V0IG5leHQgcGFydAotICAgICAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgcGFydHNJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgLy8gSWYgcGFydCBuYW1lIG1hdGNoZXMgb3IgdGhlcmUgaXMgbm8gcGFydCBuYW1lLCB0aGVuIGNoZWNrIG5hbWVzcGFjZQotICAgICAgICAgICAgICBpZiAoKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgfHwgKChwYXJ0TmFtZSAhPSBudWxsKSAmJiAocGFydC5nZXROYW1lKCkuZXF1YWxzKHBhcnROYW1lKSkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKChwYXJ0LmdldEVsZW1lbnROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICYmIChwYXJ0LmdldEVsZW1lbnROYW1lKCkuZXF1YWxzKG9wZXJhdGlvblFOYW1lKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBvcGVyYXRpb24gdG8gZmluZCBhIG1hdGNoCi0gICAgcmV0dXJuIG9wZXJhdGlvbkZvdW5kOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBmYWlsdXJlIGRldGFpbC4KLSAgICogQHBhcmFtIG1lc3NhZ2UgICAgICAgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0ICBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIGZhaWx1cmUgZGV0YWlsLgotICAgKi8KLSAgcHVibGljIEZhaWx1cmVEZXRhaWwgY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gcmVwb3J0ZXIuY3JlYXRlRmFpbHVyZURldGFpbCgpOwotICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oCi0gICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0RWxlbWVudExvY2F0aW9uKCkpOwotICAgIHJldHVybiBmYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIGFkZGl0aW9uYWwgZW50cnkgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBzZXQgbm90QXBwbGljYWJsZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uLmdldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KCkuZ2V0V1NETElucHV0KCkgIT0gbnVsbAotICAgICAgJiYgIXRlc3RBc3NlcnRpb24uZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKS5nZXRXU0RMSW5wdXQoKS5lcXVhbHMoIm5vbmUiKQotICAgICAgJiYgYW5hbHl6ZXJDb250ZXh0LmdldFNlcnZpY2VSZWZlcmVuY2UoKS5nZXRXU0RMTG9jYXRpb24oKSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5vdEFwcGxpY2FibGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBub3RBcHBsaWNhYmxlOwotICB9Ci0KLQotICAvKioKLSAgICogR2V0IFBPU1QgcmVxdWVzdC4KLSAgICogQHBhcmFtIGh0dHBIZWFkZXIgYW4gSFRUUCAKLSAgICogQHJldHVybiBQT1NUIHJlcXVlc3QuCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFBvc3RSZXF1ZXN0KFN0cmluZyBodHRwSGVhZGVyKQotICB7Ci0gICAgLy9SZXF1ZXN0LUxpbmUgICA9IE1ldGhvZCBTUCBSZXF1ZXN0LVVSSSBTUCBIVFRQLVZlcnNpb24gQ1JMRgotICAgIFZlY3RvciByZXF1ZXN0TGluZSA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmcgc3RhcnRMaW5lID0gbnVsbDsKLQotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgc3RhcnRMaW5lID0gaHR0cE1lc3NhZ2VUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXJ0TGluZS5zdGFydHNXaXRoKCJQT1NUIikpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RhcnRMaW5lLCAiXHUwMDIwIik7Ci0gICAgICB3aGlsZSAoc3RhcnRMaW5lVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgcmVxdWVzdExpbmUuYWRkKHN0YXJ0TGluZVRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0TGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgSFRUUCByZXF1ZXN0LgotICAgKiBAcGFyYW0gaHR0cEhlYWRlciBhbiBIVFRQIAotICAgKiBAcmV0dXJuIEhUVFAgcmVxdWVzdC4KLSAgKi8KLSAgcHJpdmF0ZSBWZWN0b3IgZ2V0SHR0cFJlcXVlc3QoU3RyaW5nIGh0dHBIZWFkZXIpCi0gIHsKLSAgICAvL1JlcXVlc3QtTGluZSAgID0gTWV0aG9kIFNQIFJlcXVlc3QtVVJJIFNQIEhUVFAtVmVyc2lvbiBDUkxGCi0gICAgVmVjdG9yIHJlcXVlc3RMaW5lID0gbmV3IFZlY3RvcigpOwotICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoaHR0cEhlYWRlciwgIlxuXHJcZiIpOwotCi0gICAgaWYgKGh0dHBNZXNzYWdlVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICBzdGFydExpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhcnRMaW5lLnN0YXJ0c1dpdGgoIlBPU1QiKSB8fCBzdGFydExpbmUuc3RhcnRzV2l0aCgiR0VUIikpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RhcnRMaW5lLCAiXHUwMDIwIik7Ci0gICAgICB3aGlsZSAoc3RhcnRMaW5lVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgcmVxdWVzdExpbmUuYWRkKHN0YXJ0TGluZVRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXF1ZXN0TGluZSA9IG51bGw7IC8vIHNpZ25pZnkgbm90IFBPU1Qgb3IgR0VUCi0gICAgfQotCi0gICAgcmV0dXJuIHJlcXVlc3RMaW5lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBIVFRQIHJlcXVlc3QgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIEhUVFAgcmVxdWVzdCB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SHR0cFJlcXVlc3RUeXBlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gIHsKLSAgICAvL1JlcXVlc3QtTGluZSAgID0gTWV0aG9kIFNQIFJlcXVlc3QtVVJJIFNQIEhUVFAtVmVyc2lvbiBDUkxGCi0KLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICBTdHJpbmcgaHR0cFJlcXVlc3RUeXBlID0gbnVsbDsKLSAgICBTdHJpbmcgc3RhcnRMaW5lID0gbnVsbDsKLQotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgc3RhcnRMaW5lID0gaHR0cE1lc3NhZ2VUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3RhcnRMaW5lVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihzdGFydExpbmUsICJcdTAwMjAiKTsKLSAgICAgIGlmIChzdGFydExpbmVUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgewotICAgICAgICBodHRwUmVxdWVzdFR5cGUgPSBzdGFydExpbmVUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBodHRwUmVxdWVzdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSBtZXNzYWdlIGlzIGEgcmVzcG9uc2UgZm9yIGEgb25lLXdheSBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBtZXNzYWdlIGlzIGEgcmVzcG9uc2UgZm9yIGEgb25lLXdheSBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc09uZVdheVJlc3BvbnNlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gIHsKLSAgICBib29sZWFuIG9uZXdheSA9IGZhbHNlOwotCi0gICAgLy8gVEVNUDogSWYgdGhpcyBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UgYW5kIHRoZXJlIGlzIG5vIGNvbnRlbnQsIHRoZW4gc2V0IG9uZS13YXkgdG8gdHJ1ZQotICAgIC8vIFRFTVA6IE5lZWQgdG8gZmluZCBhIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3BvbnNlIGlzIGZvciBhIG9uZS13YXkgbWVzc2FnZQotICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgLmdldFR5cGUoKQotICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAmJiBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgb25ld2F5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb25ld2F5OwotICB9Ci0KLSAgLyoqCi0gICAqIG1lc3NhZ2VJc0RvY0xpdFNjaGVtYVZhbGlkLgotICAgKgotICAgKiBWYWxpZGF0ZXMgdGhlIGRvYy1saXQgbWVzc2FnZXMgYWdhaW5zdCB0aGUgc2NoZW1hIGZvdW5kIGluIGEgY2FuZGlkYXRlIHdzZGwgZG9jdW1lbnQuCi0gICAqCi0gICAqIElkZW50aWZ5IChvciBiZSBnaXZlbikgYSByZWZlcmVuY2UgaW4gdGhlIHdzZGwgdG8gZWxlbWVudHMgKGZvdW5kIGluICZsdDt3c2RsOnR5cGVzJmd0OyZsdDtzY2hlbWEmZ3Q7Li4uKQotICAgKiB0aGF0IGFyZSBpbW1lZGlhdGUgY2hpbGRyZW4gZWxlbWVudHMgaW4gdGhlIHNvYXAgYm9keS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGRvY3VtZW50IGxpdGVyYWwgbWVzc2FnZSBpcyBjb21wbGlhbnQgdG8gdGhlIAotICAgKiAgICAgICAgIHNjaGVtYSBmb3VuZCBpbiBhIGNhbmRpZGF0ZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHBhcnNpbmcgcHJvYmxlbSBkdXJpbmcgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIG1lc3NhZ2VJc0RvY0xpdFNjaGVtYVZhbGlkKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgdXNlIGEgdmFsaWRhdGluZyBwYXJzZXIgdGhhdCBpcyBjYXBhYmxlIG9mIGFjY2VwcHRpbmcgbXVsdGlwbGUgc2NoZW1hIHJlZmVyZW5jZXMKLSAgICAvLyBwcm9ncmFtbWF0aWNhbGx5LiBUaGVuLCBldmVyeSBzY2hlbWEgaW4gY2FuZGlkYXRlIHdzZGwgY2FuIGJlIHBhc3NlZCBpbiB0byB0aGUgdmFsaWRhdG9yLiBUaGlzIGF2b2lkcyB0aGUKLSAgICAvLyBuZWVkIHRvIHBpbnBvaW50IGEgcGFydGljdWxhciBzY2hlbWEgZWxlbWVudCBmcm9tIGFsbCBjYW5kaWRhdGUgd3NkbDp0eXBlcywgY29ycmVzcG9uZGluZyB0byB0aGUgCi0gICAgLy8gd3NkbDpvcGVyYXRpb24gYmVpbmcgdXNlZC4gVGhlIHBpbnBvaW50aW5nIGlzIGFuIGluY29tcGxldGUgd29ya2Fyb3VuZCBmb3IgcGFyc2VycyBub3QgY2FwYWJsZSAKLSAgICAvLyBvZiBhY2NlcHRpbmcgYXJyYXlzIG9mIHNjZWhtYSByZWZlcmVuY2VzIAotICAgIC8vIFsgaS5lLiB0aGUgRE9NIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BIFNPVVJDRSwgT2JqZWN0W10gey4uLn0pIF0KLSAgICAvLyBnZXQgYWxsIHhzOnNjaGVtYSBmcm9tIGFsbCBjYW5kaWRhdGUgd3NkbDp0eXBlcyAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gYWRkIGVhY2ggPHNjaGVtYT4gdG8gYW4gYXJyYXkgYW5kIHBhc3MgdGhpcyBhcnJheSB0byB0aGUgdmFsaWRhdGluZyBwYXJzZXIKLSAgICAvLyB3aGVuIHZhbGlkYXRpbmcgdGhlL2VhY2ggc29hcCBib2R5IGNoaWxkLgotCi0gICAgLy8gdXNlIHRoZSByZWZlcmVuY2VkIFdTREwgZmlsZSBhbmQgaXRzIGltcG9ydGVkIGZpbGVzIHRvIGZpbmQgc2NoZW1hcwotICAgIExpc3Qgc2NoZW1hV1NETHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgTGlzdCBpbmxpbmVTY2hlbWFzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIExpc3Qgc2NoZW1hU3RyaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIERlZmluaXRpb25bXSBhbGxEZWZzID0KLSAgICAgIGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbnMoKTsKLSAgICBmb3IgKGludCB0aGlzRGVmID0gMDsgdGhpc0RlZiA8IGFsbERlZnMubGVuZ3RoOyB0aGlzRGVmKyspCi0gICAgewotICAgICAgc2NoZW1hV1NETHMuYWRkKGFsbERlZnNbdGhpc0RlZl0uZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgIH0KLSAgICBJdGVyYXRvciBmaWxlSXRlcmF0b3IgPSBzY2hlbWFXU0RMcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChmaWxlSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIC8vIHBhcnNlIGZpbGUgaWYgcG9zc2libGUKLSAgICAgIERvY3VtZW50IHdzZGxEb2MgPSBudWxsOwotICAgICAgU3RyaW5nIHdzZGxVUkkgPSAoU3RyaW5nKSBmaWxlSXRlcmF0b3IubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHdzZGxEb2MgPSBYTUxVdGlscy5wYXJzZVhNTERvY3VtZW50VVJMKHdzZGxVUkksIG51bGwpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnQgcm9vdCA9IHdzZGxEb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBmaW5kIHRoZSBzY2hlbWEKLSAgICAgIE5vZGVMaXN0IHNjaGVtYUVsZW1lbnRzID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lUYWcuRUxFTV9YU0RfU0NIRU1BLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICBXU0lUYWcuRUxFTV9YU0RfU0NIRU1BLmdldExvY2FsUGFydCgpKTsKLQotICAgICAgZm9yIChpbnQgZWxlbSA9IDA7IGVsZW0gPCBzY2hlbWFFbGVtZW50cy5nZXRMZW5ndGgoKTsgZWxlbSsrKQotICAgICAgeyAgICAgCi0gICAgICAgIEVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpIHNjaGVtYUVsZW1lbnRzLml0ZW0oZWxlbSk7Ci0gICAgICAgIC8vIGNvcHlpbmcgYWxsIHRoZSBOUyBkZWNsYXJhdGlvbnMgZnJvbSB3c2RsOmRlZmluaXRpb25zIHdzZGw6dHlwZXMKLSAgICAgICAgY29weU5TRGVjbGFyYXRpb25zKHJvb3QsIHNjaGVtYSk7Ci0gICAgICAgIGNvcHlOU0RlY2xhcmF0aW9ucygoRWxlbWVudCkgc2NoZW1hLmdldFBhcmVudE5vZGUoKSwgc2NoZW1hKTsKLSAgICAgICAgLy8gUmVwbGFjaW5nIGFsbCByZWxhdGl2ZSBzY2hlbWFMb2NhdGlvbiBVUklzIHdpdGggYWJzb2x1dGUgb25lcwotICAgICAgICByZXBsYWNlUmVsYXRpdmVVUklzKHNjaGVtYSwgd3NkbFVSSSk7Ci0gICAgICAgIGlubGluZVNjaGVtYXMuYWRkKHNjaGVtYSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBYZXJjZXMgcGFyc2VyIE9OTFkgYWNjZXB0cyBhbiBhcnJheQotICAgIC8vIG9mIHNjaGVtYXMgd2l0aCB1bmlxdWUgbmFtZXNwYWNlcy4KLSAgICBpZiAoIWR1cGxpY2F0ZU5hbWVzcGFjZXNEZXRlY3RlZChpbmxpbmVTY2hlbWFzKSkKLSAgICB7Ci0gICAgICAvLyBTZXJpYWxpemUgdGhlIHNjaGVtYSBlbGVtZW50cyBpbnNpZGUgdGhlIFR5cGVzLCB0aGVuIHVzZSB0aGlzIGFzCi0gICAgICAvLyB0aGUgc2NoZW1hIHN0cmluZyBmb3IgdGhlIHZhbGlkYXRpb24KLSAgICAgIEl0ZXJhdG9yIGkgPSBpbmxpbmVTY2hlbWFzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgCUVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpaS5uZXh0KCk7IAotICAgICAgICBTdHJpbmcgc2NoZW1hU3RyaW5nID0gRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoc2NoZW1hKTsKLSAgICAgICAgc2NoZW1hU3RyaW5ncy5hZGQoc2NoZW1hU3RyaW5nKTsKLSAgICAgIH0KLQotICAgICAgTm9kZUxpc3QgZWxlbWVudExpc3QgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKQotICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lUYWcuRUxFTV9TT0FQX0JPRFkuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgaWYgKGVsZW1lbnRMaXN0ID09IG51bGwgfHwgZWxlbWVudExpc3QuZ2V0TGVuZ3RoKCkgIT0gMSkKLSAgICAgIHsKLSAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgc29hcCBib2R5ICEKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBwcm9iYWJseSBhbiBlcnJvciBjb25kaXRpb24gdGhvdWdoCi0gICAgICB9Ci0KLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5Q2hpbGRMaXN0ID0gKChFbGVtZW50KWVsZW1lbnRMaXN0Lml0ZW0oMCkpLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGNoaWxkID0gMDsgY2hpbGQgPCBzb2FwQm9keUNoaWxkTGlzdC5nZXRMZW5ndGgoKTsgY2hpbGQrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBzb2FwQm9keUNoaWxkID0gc29hcEJvZHlDaGlsZExpc3QuaXRlbShjaGlsZCk7Ci0gICAgICAgIGlmIChzb2FwQm9keUNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBkbyBhbGwgZm9yIG5vdwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdyaXRlIG91dCBlbGVtZW50IHRyZWUgdG8gU3RyaW5nCi0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZUNvbnRlbnQgPSBET00yV3JpdGVyLm5vZGVUb1N0cmluZyhzb2FwQm9keUNoaWxkKTsKLSAgICAgICAgICAgIC8vIHBhcnNlIHRoZSBjaGlsZCBlbGVtZW50LCB2YWxpZGF0aW5nIGFnYWluc3QgdGhlIHNjaGVtYSAKLSAgICAgICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKG1lc3NhZ2VDb250ZW50LCBzY2hlbWFTdHJpbmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZhaWxlZAotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJWYWxpZGF0aW5nIFBhcnNpbmcgcHJvYmxlbSIsIGUpOwotICAgICAgICAgICAgLy8gQmFkIHRoaW5ncyBoYXZlIGhhcHBlbmVkCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9ICAgCi0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvcHkgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gY2hpbGQgYSBzdHJpcHBlZCBtZXNzYWdlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNvcHlOU0RlY2xhcmF0aW9ucyhFbGVtZW50IHBhcmVudCwgRWxlbWVudCBjaGlsZCkKLSAgewotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwID0gcGFyZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBub2RlSWQgPSAwOyBub2RlSWQgPCBub2RlTWFwLmdldExlbmd0aCgpOyBub2RlSWQrKykKLSAgICB7Ci0gICAgICBOb2RlIG5vZGUgPSBub2RlTWFwLml0ZW0obm9kZUlkKTsKLQotICAgICAgaWYgKChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkKLSAgICAgICAgJiYgKG5vZGUuZ2V0Tm9kZU5hbWUoKS5zdGFydHNXaXRoKCJ4bWxuczoiKSkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgLy8gSWYgYW4gTlMgYmVpbmcgY29waWVkIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY2hpbGQgZWxlbWVudCBoYXMsIGNvcHkgaXQKLSAgICAgICAgaWYgKCFjaGlsZC5nZXROb2RlTmFtZSgpLnN0YXJ0c1dpdGgoCi0gICAgICAgICAgbm9kZU5hbWUuc3Vic3RyaW5nKG5vZGVOYW1lLmluZGV4T2YoIjoiKSArIDEpICsgIjoiKSkKLSAgICAgICAgewotICAgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZShub2RlTmFtZSwgbm9kZS5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVwbGFjZXMgYWxsIHJlbGF0aXZlIFVSSXMgZm9yIHNjaGVtYUxvY2F0aW9uIGF0dHJpYnV0ZXMuCi0gICAqIEBwYXJhbSBzY2hlbWEgYW4geHNkOnNjaGVtYSBlbGVtZW50LgotICAgKiBAcGFyYW0gd3NkbFVSSSBhbiBVUkkgb2YgV1NETCB0aGF0IGNvbnRhaW5zIHhzZDpzY2hlbWEgYmVpbmcgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlcGxhY2VSZWxhdGl2ZVVSSXMoRWxlbWVudCBzY2hlbWEsIFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgLy8gUmV0cmlldmluZyBhbGwgeHNkOmltcG9ydCBlbGVtZW50cwotICAgIE5vZGVMaXN0IGltcG9ydHMgPSBzY2hlbWEuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgIFdTSVRhZy5FTEVNX1hTRF9JTVBPUlQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICBXU0lUYWcuRUxFTV9YU0RfSU1QT1JULmdldExvY2FsUGFydCgpKTsKLSAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1wb3J0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgaW1wID0gKEVsZW1lbnQpIGltcG9ydHMuaXRlbShpKTsKLSAgICAgIC8vIEdldHRpbmcgdGhlIHNjaGVtYUxvY2F0aW9uIGF0dHJpYnV0ZQotICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9Ci0gICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbXAsIFdTSVRhZy5BVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIHByZXNlbnQKLSAgICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBUcnlpbmcgdG8gY3JlYXRlIGFuIFVSSSBvYmplY3QgdXNpbmcgYXR0cmlidXRlJ3MgdmFsdWUKLSAgICAgICAgVVJJIHVyaSA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgdXJpID0gbmV3IFVSSShzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgYW4gYWJzb2x1dGUgVVJJICh0aGUgVVJJIGNvbnN0cnVjdG9yIHRocm93cyB0aGUKLSAgICAgICAgLy8gTWFsZm9ybWVkVVJJRXhjZXB0aW9uKSwgY3JlYXRpbmcgdGhlIGFic29sdXRlIFVSSSB1c2luZyB3c2RsVVJJCi0gICAgICAgIGlmICh1cmkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBuZXdVUkkgPSB3c2RsVVJJLnN1YnN0cmluZygwLCB3c2RsVVJJLmxhc3RJbmRleE9mKCIvIikgKyAxKQotICAgICAgICAgICAgKyBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVyaSA9IG5ldyBVUkkobmV3VVJJKTsKLSAgICAgICAgICAgIC8vIFNldHRpbmcgYSBuZXcgVVJJIGFzIGEgdmFsdWUgZm9yIHRoZSBzY2hlbWFMb2NhdGlvbiBhdHRyaWJ1dGUKLSAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uLnNldFZhbHVlKHVyaS50b1N0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYmluZGluZyBvcGVyYXRpb24gbWF0Y2hlZCBmb3IgU09BUCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlUeXBlIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIGRvYyBhIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gYW55IGJpbmRpbmcgb3BlcmF0aW9uIG1hdGNoZWQsIG51bGwgaWYgaXQgaXMgbm90IGZvdW5kLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uTWF0Y2goRW50cnlUeXBlIGVudHJ5VHlwZSwgRG9jdW1lbnQgZG9jKSAKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgU09BUCBCb2R5IGNoaWxkIGVsZW1lbnQKLSAgICAgIFFOYW1lIG9wZXJhdGlvbiA9IGdldE9wZXJhdGlvbkZyb21NZXNzYWdlKGRvYyk7Ci0gICAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBSUEMgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBycGNCaW5kaW5nT3BzID0gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpKTsKLSAgICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSB0aGUgZ2l2ZW4gb3BlcmF0aW9uIG5hbWUKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbiA9IGdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICAgIGVudHJ5VHlwZSwgb3BlcmF0aW9uLCBycGNCaW5kaW5nT3BzKTsKLSAgICAgICAgLy8gSWYgbm8gb25lIFJQQyBvcGVyYXRpb24gbWF0Y2hlZAotICAgICAgICBpZihiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgZG9jdW1lbnQgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbltdIGRvY0JpbmRpbmdPcGVyYXRpb25zID0gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICAgIGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKSk7Ci0gICAgICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSBnaXZlbiBlbGVtZW50IG5hbWUKLSAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcG90ZW50aWFsRG9jTGl0T3BzID0KLSAgICAgICAgICAgIGdldERvY0xpdE9wZXJhdGlvbnMoZW50cnlUeXBlLCBvcGVyYXRpb24sIGRvY0JpbmRpbmdPcGVyYXRpb25zKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBleGFjdGx5IG9uZSBvcGVyYXRpb24gbWF0Y2hlZAotICAgICAgICAgIGlmIChwb3RlbnRpYWxEb2NMaXRPcHMubGVuZ3RoID09IDEpCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uID0gcG90ZW50aWFsRG9jTGl0T3BzWzBdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLQotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIE1hdGNoIGVpdGhlciBJbnB1dCBvciBPdXRwdXQuCi0gICAqIEBwYXJhbSBtZXNzYWdlRW50cnlUeXBlIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHNvYXBNZXNzYWdlIHNvYXAgbWVzc2FnZS4KLSAgICogQHBhcmFtIG9wIGJpbmRpbmcgb3BlcmF0aW9ucy4KLSAgICogQHJldHVybiBtYXRjaGVkIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uIGdldE9wZXJhdGlvbk1hdGNoKAotICAgIEVudHJ5VHlwZSBtZXNzYWdlRW50cnlUeXBlLAotICAgIERvY3VtZW50IHNvYXBNZXNzYWdlLAotICAgIEJpbmRpbmdPcGVyYXRpb25bXSBvcCkKLSAgewotICAgIC8vIEdldCBvcGVyYXRpb24gZnJvbSBtZXNzYWdlCi0gICAgUU5hbWUgb3BlcmF0aW9uID0gZ2V0T3BlcmF0aW9uRnJvbU1lc3NhZ2Uoc29hcE1lc3NhZ2UpOwotICAgIC8vIGxpc3Qgb2YgUU5hbWVzCi0KLSAgICByZXR1cm4gZ2V0T3BlcmF0aW9uTWF0Y2gobWVzc2FnZUVudHJ5VHlwZSwgb3BlcmF0aW9uLCBvcCk7Ci0gIH0KLQotICAvKioKLSAgICogTWF0Y2ggZWl0aGVyIElucHV0IG9yIE91dHB1dC4KLSAgICogQHBhcmFtIG1lc3NhZ2VFbnRyeVR5cGUgbWVzc2FnZSBlbnRyeSB0eXBlLgotICAgKiBAcGFyYW0gb3BlcmF0aW9uIFNPQVAgb3BlcmF0aW9uIG5hbWUuCi0gICAqIEBwYXJhbSBvcCBiaW5kaW5nIG9wZXJhdGlvbnMuCi0gICAqIEByZXR1cm4gbWF0Y2hlZCBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb25NYXRjaCgKLSAgICBFbnRyeVR5cGUgbWVzc2FnZUVudHJ5VHlwZSwKLSAgICBRTmFtZSBvcGVyYXRpb24sCi0gICAgQmluZGluZ09wZXJhdGlvbltdIG9wKQotICB7Ci0gICAgUU5hbWUgY2hlY2tPcGVyYXRpb247Ci0KLSAgICAvLyBMb29rIGZvciBhIGNhbmRpZGF0ZSBvcGVyYXRpb24gaW4gdGhlIHdzZGwgdGhhdCBtYXRjaGVzIHRoaXMgc2lnbmF0dXJlLgotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgb3AubGVuZ3RoOyBrKyspCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICAgTGlzdCBleHRlbnNpYmxlcyA9IG51bGw7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCA9IG9wW2tdOwotCi0gICAgICBpZiAobWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpKQotICAgICAgewotICAgICAgICBuYW1lID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICAgICAgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgbWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpCi0gICAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgbmFtZSA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiUmVzcG9uc2UiOwotICAgICAgICBleHRlbnNpYmxlcyA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBzb2FwOmJvZHkKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gZ2V0U29hcEJvZHkoZXh0ZW5zaWJsZXMpOwotICAgICAgaWYgKHNvYXBCb2R5ID09IG51bGwpCi0gICAgICAgIGNoZWNrT3BlcmF0aW9uID0gbmV3IFFOYW1lKG5hbWUpOwotICAgICAgZWxzZQotICAgICAgICBjaGVja09wZXJhdGlvbiA9IG5ldyBRTmFtZShzb2FwQm9keS5nZXROYW1lc3BhY2VVUkkoKSwgbmFtZSk7Ci0KLSAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCAmJiBvcGVyYXRpb24uZXF1YWxzKGNoZWNrT3BlcmF0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIChiaW5kaW5nT3ApOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBNYXRjaCBlaXRoZXIgSW5wdXQgb3IgT3V0cHV0LgotICAgKiBAcGFyYW0gbWVzc2FnZUVudHJ5VHlwZSBhIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHNvYXBNZXNzYWdlIGEgc29hcCBtZXNzYWdlLgotICAgKiBAcGFyYW0gb3AgYmluc2luZyBvcGVyYXRpb25zLgotICAgKiBAcmV0dXJuIG1hdGNoZWQgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCgKLSAgICBFbnRyeVR5cGUgbWVzc2FnZUVudHJ5VHlwZSwKLSAgICBEb2N1bWVudCBzb2FwTWVzc2FnZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gb3ApCi0gIHsKLSAgICBNYXAgcGFydHMgPSBnZXRQYXJ0TGlzdEZyb21NZXNzYWdlKHNvYXBNZXNzYWdlKTsgLy8gbGlzdCBvZiBRTmFtZXMKLQotICAgIC8vIExvb2sgZm9yIGEgY2FuZGlkYXRlIG9wZXJhdGlvbiBpbiB0aGUgd3NkbCB0aGF0IG1hdGNoZXMgdGhpcyBzaWduYXR1cmUuCi0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBvcC5sZW5ndGg7IGsrKykKLSAgICB7Ci0KLSAgICAgIE1lc3NhZ2Ugd3NkbE1lc3NhZ2UgPSBudWxsOwotICAgICAgTGlzdCBleHRlbnNpYmxlcyA9IG51bGw7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCA9IG9wW2tdOwotCi0gICAgICBpZiAobWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpKQotICAgICAgewotICAgICAgICB3c2RsTWVzc2FnZSA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgbWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpCi0gICAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgd3NkbE1lc3NhZ2UgPSBiaW5kaW5nT3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICBleHRlbnNpYmxlcyA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICAvL3dzZGxGYXVsdFBhcnRzID0gb3Bba10uZ2V0RmF1bHRzKCk7Ci0gICAgICAvLyBBREQ6IGNoZWNrIGZvciBjYXNlIHdoZW4gcmVzcG9uc2UgbWVzc2FnZSBpcyBhIGZhdWx0Ci0KLSAgICAgIGlmIChzYW1lUGFydHMocGFydHMsIHdzZGxNZXNzYWdlLCBnZXRTb2FwSGVhZGVyKGV4dGVuc2libGVzKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAoYmluZGluZ09wKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiogCi0gICAqIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCguLikuCi0gICAqIAotICAgKiBGaW5kIG9uZSBvciBtb3JlIG1hdGNoaW5nIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHRoZSBXU0RMIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gICAqIGdpdmVuIHJlcXVlc3QtcmVzcG9uc2Ugc2lnbmF0dXJlLgotICAgKiAKLSAgICogVGhpcyBvdmVybG9hZGVkIHZlcnNpb24gaXMgaW50ZW5kZWQgZm9yIHBvc3NpYmxlIENvcnJlbGF0aW9uIG9ubHkgKG5vdCBhc3NlcnRpb25zKSwKLSAgICogc2luY2UgaXQgY2hlY2tzIGZvciBhbiBvcGVyYXRpb24gc2lnbmF0dXJlIG9uIGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLgotICAgKiBBc3NlcnRpb25zIG5vdyBjaGVjayByZXF1ZXN0ICYgcmVzcG9uc2UgbWVzc2FnZXMgaW5kZXBlbmRlbnRseS4gCi0gICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBhIHJlcXVlc3QgbWVzc2FnZS4KLSAgICogQHBhcmFtIHJlc3BvbnNlTWVzc2FnZSBhIHJlc3BvbnNlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBvcCBiaW5kaW5nIG9wZXJhdGlvbnMuCi0gICAqIEByZXR1cm4gbWF0Y2hlZCBvcGVyYXRpb24uCi0gICAqLwotICAvL3ByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb25QYXJ0c01hdGNoKAotICAvLyAgRG9jdW1lbnQgcmVxdWVzdE1lc3NhZ2UsCi0gIC8vICBEb2N1bWVudCByZXNwb25zZU1lc3NhZ2UsCi0gIC8vICBCaW5kaW5nT3BlcmF0aW9uW10gb3ApCi0gIC8vewotICAvLyAgTWFwIGluUGFydHMgPSBnZXRQYXJ0TGlzdEZyb21NZXNzYWdlKHJlcXVlc3RNZXNzYWdlKTsgLy8gbGlzdCBvZiBRTmFtZXMKLSAgLy8gIE1hcCBvdXRQYXJ0cyA9IGdldFBhcnRMaXN0RnJvbU1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlKTsKLSAgLy8gIC8vIGxpc3Qgb2YgUU5hbWVzCi0gIC8vCi0gIC8vICAvLyBMb29rIGZvciBhIGNhbmRpZGF0ZSBvcGVyYXRpb24gaW4gdGhlIHdzZGwgdGhhdCBtYXRjaGVzIHRoaXMgc2lnbmF0dXJlLgotICAvLyAgZm9yIChpbnQgayA9IDA7IGsgPCBvcC5sZW5ndGg7IGsrKykKLSAgLy8gIHsKLSAgLy8KLSAgLy8gICAgLy9NYXAgd3NkbEZhdWx0UGFydHMgPSBudWxsOwotICAvLyAgICBNZXNzYWdlIHdzZGxJbk1lc3NhZ2UgPSBudWxsOwotICAvLyAgICBNZXNzYWdlIHdzZGxPdXRNZXNzYWdlID0gbnVsbDsKLSAgLy8KLSAgLy8gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSBvcFtrXTsKLSAgLy8gICAgaWYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpCi0gIC8vICAgIHsKLSAgLy8gICAgICB3c2RsSW5NZXNzYWdlID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAvLyAgICB9Ci0gIC8vCi0gIC8vICAgIGlmIChiaW5kaW5nT3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkgIT0gbnVsbCkKLSAgLy8gICAgewotICAvLyAgICAgIHdzZGxPdXRNZXNzYWdlID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgLy8gICAgfQotICAvLyAgICAvL3dzZGxGYXVsdFBhcnRzID0gb3Bba10uZ2V0RmF1bHRzKCk7Ci0gIC8vICAgIC8vIEFERDogY2hlY2sgZm9yIGNhc2Ugd2hlbiByZXNwb25zZSBtZXNzYWdlIGlzIGEgZmF1bHQKLSAgLy8KLSAgLy8gICAgaWYgKHNhbWVQYXJ0cyhpblBhcnRzLAotICAvLyAgICAgIHdzZGxJbk1lc3NhZ2UsCi0gIC8vICAgICAgZ2V0U29hcEhlYWRlcihiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpKSkKLSAgLy8gICAgewotICAvLyAgICAgIC8vIG1hdGNoIG9uIHRoZSByZXF1ZXN0IC0gbm93IGNoZWNrIHJlc3BvbnNlIGlmIGl0cyBub3QgYSBmYXVsdAotICAvLyAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UgIT0gbnVsbCAmJiBpc0ZhdWx0KHJlc3BvbnNlTWVzc2FnZSkpCi0gIC8vICAgICAgewotICAvLyAgICAgICAgcmV0dXJuIChiaW5kaW5nT3ApOwotICAvLyAgICAgIH0KLSAgLy8gICAgICBlbHNlIGlmICgKLSAgLy8gICAgICAgIHNhbWVQYXJ0cygKLSAgLy8gICAgICAgICAgb3V0UGFydHMsCi0gIC8vICAgICAgICAgIHdzZGxPdXRNZXNzYWdlLAotICAvLyAgICAgICAgICBnZXRTb2FwSGVhZGVyKAotICAvLyAgICAgICAgICAgIGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpKSkKLSAgLy8gICAgICB7Ci0gIC8vICAgICAgICAvLyBJdCBkb2VzIG1hdGNoIHNvIHRyZWF0IHRoaXMgYXMgYSByZWxldmFudCBtZXNzYWdlIHBhaXIuIAotICAvLyAgICAgICAgLy8gTGV0IHRoZSBtZXNzYWdlIHRocm91Z2ggZm9yIHZhbGlkYXRpb24uCi0gIC8vICAgICAgICAvL0FERDogY291bGQgcGFzcyB0aGUgb3BlcmF0aW9ucyBsaXN0IGJhY2sgdG8gdGhlIGVudHJ5Q29udGV4dCBmb3IgdGhlIG1lc3NhZ2UuCi0gIC8vICAgICAgICByZXR1cm4gKGJpbmRpbmdPcCk7Ci0gIC8vICAgICAgfQotICAvLyAgICB9Ci0gIC8vICB9Ci0gIC8vICByZXR1cm4gbnVsbDsKLSAgLy99Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgc29hcDpib2R5IGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgc29hcDpib2R5IGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIFNPQVBCb2R5IGdldFNvYXBCb2R5KExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICAvLyBGaW5kIHRoZSBzb2FwIGJvZHkKLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTSVRhZy5XU0RMX1NPQVBfQk9EWSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKFNPQVBCb2R5KSBleHRFbGVtOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBlbHNlIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTSVRhZy5XU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBvZiB0aGlzIG1pbWU6cGFydAotICAgICAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSBnZXRTb2FwQm9keSgKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgaWYgKHNvYXBCb2R5ICE9IG51bGwpCi0gICAgICAgICAgICAgIHJldHVybiBzb2FwQm9keTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIFNPQVBIZWFkZXIgZnJvbSBhIExpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHBhcmFtIGV4dGVuc2libGVzIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRoZSBTT0FQSGVhZGVyIGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIFNPQVBIZWFkZXIgZ2V0U29hcEhlYWRlcihMaXN0IGV4dGVuc2libGVzKQotICB7Ci0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gbnVsbDsKLQotICAgIC8vIGZpbmQgdGhlIHNvYXAgaGVhZGVyCi0gICAgaWYgKGV4dGVuc2libGVzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaSA9IGV4dGVuc2libGVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkgJiYgc29hcEhlYWRlciA9PSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaS5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBjKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvYXBIZWFkZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGZpcnN0IHBhcnQgbmFtZSBmcm9tIHNvYXBiaW5kOmJvZHkgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldEZpcnN0UGFydE5hbWUoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgU3RyaW5nIHBhcnROYW1lID0gbnVsbDsKLSAgICBMaXN0IGV4dExpc3QgPSBudWxsOwotICAgIEl0ZXJhdG9yIHBhcnRzSXRlcmF0b3IgPSBudWxsOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbGlzdCBvZiBwYXJ0cyBieSBmaW5kaW5nIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQKLSAgICBpZiAoKGV4dExpc3QgPQotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSkKLSAgICAgICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBwYXJ0c0xpc3QgPSBudWxsOwotICAgICAgSXRlcmF0b3IgZXh0SXRlcmF0b3IgPSBleHRMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXh0SXRlcmF0b3IuaGFzTmV4dCgpICYmIChwYXJ0TmFtZSA9PSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGV4dEVsZW1lbnQgPSBleHRJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoKHBhcnRzTGlzdCA9ICgoU09BUEJvZHkpIGV4dEVsZW1lbnQpLmdldFBhcnRzKCkpICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHNJdGVyYXRvciA9IHBhcnRzTGlzdC5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIGEgZG9jIGxpdGVyYWwgYmluZGluZyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgcGFydCBuYW1lCi0gICAgICAgICAgICBpZiAocGFydHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIHBhcnROYW1lID0gKFN0cmluZykgcGFydHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnROYW1lOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb25bXSBnZXREb2NMaXRPcGVyYXRpb25zKAotICAgIEVudHJ5VHlwZSBtZXNzYWdlVHlwZSwKLSAgICBRTmFtZSBwYXJ0RWxlbWVudFFOYW1lLAotICAgIEJpbmRpbmdPcGVyYXRpb25bXSB3c2RsT3BlcmF0aW9ucykKLSAgewotCi0gICAgaWYgKG1lc3NhZ2VUeXBlLmlzVHlwZShFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0SW5wdXREb2NMaXRPcGVyYXRpb25zKHBhcnRFbGVtZW50UU5hbWUsIHdzZGxPcGVyYXRpb25zKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc2FnZVR5cGUuaXNUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0T3V0cHV0RG9jTGl0T3BlcmF0aW9ucyhwYXJ0RWxlbWVudFFOYW1lLCB3c2RsT3BlcmF0aW9ucyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsgLy8gc2hvdWxkIGJlIG9uZSBvciB0aGUgb3RoZXIKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb25bXSBnZXRJbnB1dERvY0xpdE9wZXJhdGlvbnMoCi0gICAgUU5hbWUgcGFydEVsZW1lbnRRTmFtZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gd3NkbE9wZXJhdGlvbnMpCi0gIHsKLQotICAgIFZlY3RvciBwb3RlbnRpYWxPcHMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHdzZGxPcGVyYXRpb25zW2ldLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICAvLyBJZiBTT0FQIEJvZHkgY2hpbGQgZWxlbWVudCBpcyBub3QgcHJlc2VudCBhbmQgd3NkbDptZXNzYWdlIGRvZXMgbm90IGhhdmUgYW55IHdzZGw6cGFydHMsIHRoYXQgaXMgdGhlIG1hdGNoIAotICAgICAgICBpZiAocGFydEVsZW1lbnRRTmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0UGFydHMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBwb3RlbnRpYWxPcHMuYWRkKHdzZGxPcGVyYXRpb25zW2ldKTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEl0ZXJhdG9yIHBhcnRzSXQgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKHBhcnRzSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgUGFydCBuZXh0UGFydCA9IChQYXJ0KSBwYXJ0c0l0Lm5leHQoKTsKLSAgICAgICAgICBpZiAocGFydEVsZW1lbnRRTmFtZS5lcXVhbHMobmV4dFBhcnQuZ2V0RWxlbWVudE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gbWF0Y2hpbmcgcGFydCBmb3VuZCAoZG9jLWxpdCkgLSBhZGQgdG8gbGlzdCBvZiBwb3NzaWJsZSBvcGVyYXRpb24gbWF0Y2hlcwotICAgICAgICAgICAgcG90ZW50aWFsT3BzLmFkZCh3c2RsT3BlcmF0aW9uc1tpXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChCaW5kaW5nT3BlcmF0aW9uW10pIHBvdGVudGlhbE9wcy50b0FycmF5KG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLSAgfQotCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbltdIGdldE91dHB1dERvY0xpdE9wZXJhdGlvbnMoCi0gICAgUU5hbWUgcGFydEVsZW1lbnRRTmFtZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gd3NkbE9wZXJhdGlvbnMpCi0gIHsKLQotICAgIFZlY3RvciBwb3RlbnRpYWxPcHMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIC8vIElmIFNPQVAgQm9keSBjaGlsZCBlbGVtZW50IGlzIG5vdCBwcmVzZW50IGFuZCB3c2RsOm1lc3NhZ2UgZG9lcyBub3QgaGF2ZSBhbnkgd3NkbDpwYXJ0cywgdGhhdCBpcyB0aGUgbWF0Y2gKLSAgICAgICAgaWYgKHBhcnRFbGVtZW50UU5hbWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChtZXNzYWdlLmdldFBhcnRzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgcG90ZW50aWFsT3BzLmFkZCh3c2RsT3BlcmF0aW9uc1tpXSk7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBJdGVyYXRvciBwYXJ0c0l0ID0gbWVzc2FnZS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwYXJ0c0l0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgbmV4dFBhcnQgPSAoUGFydCkgcGFydHNJdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKHBhcnRFbGVtZW50UU5hbWUuZXF1YWxzKG5leHRQYXJ0LmdldEVsZW1lbnROYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIG1hdGNoaW5nIHBhcnQgZm91bmQgKGRvYy1saXQpIC0gYWRkIHRvIGxpc3Qgb2YgcG9zc2libGUgb3BlcmF0aW9uIG1hdGNoZXMKLSAgICAgICAgICAgIHBvdGVudGlhbE9wcy5hZGQod3NkbE9wZXJhdGlvbnNbaV0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoQmluZGluZ09wZXJhdGlvbltdKSBwb3RlbnRpYWxPcHMudG9BcnJheShuZXcgQmluZGluZ09wZXJhdGlvblswXSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcGFyZSBzb2FwIG1lc3NhZ2UgZWxlbWVudCBwYXJ0IG5hbWVzIHdpdGggUGFydHMgZnJvbSBzcGVjaWZpZWQgd3NkbCBPcGVyYXRpb24KLSAgICovCi0gIC8vcHJpdmF0ZSBib29sZWFuIHNhbWVQYXJ0cyhIYXNoU2V0IG1lc3NhZ2VQYXJ0cywgTWFwIHdzZGxQYXJ0cykKLSAgLy97Ci0gIC8vCi0gIC8vICAvLyBsb29rIGZvciB0aGUgc29hcC1tZXNzYWdlIG9wZXJhdGlvbiBzaWduYXR1cmUKLSAgLy8gIEl0ZXJhdG9yIGkgPSB3c2RsUGFydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgLy8gIC8vIGJ1aWxkIGEgc2V0IG9mIFBhcnQgbmFtZXMKLSAgLy8gIEhhc2hTZXQgaCA9IG5ldyBIYXNoU2V0KCk7Ci0gIC8vICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gIC8vICB7Ci0gIC8vICAgIFBhcnQgcCA9IChQYXJ0KSBpLm5leHQoKTsKLSAgLy8gICAgaC5hZGQocC5nZXROYW1lKCkpOwotICAvLyAgfQotICAvLwotICAvLyAgLy8gY29tcGFyZSB3aXRoIHRoZSBwYXJ0cyBsaXN0IGZyb20gdGhlIG1lc3NhZ2UJKHVub3JkZXJlZCkKLSAgLy8gIHJldHVybiAoaC5lcXVhbHMobWVzc2FnZVBhcnRzKSk7Ci0gIC8vfQotCi0gIC8qKgotICAgKiBDb21wYXJlIHNvYXAgbWVzc2FnZSBlbGVtZW50IHBhcnQgbmFtZXMgd2l0aCBQYXJ0cyBmcm9tIHNwZWNpZmllZCB3c2RsIE9wZXJhdGlvbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHNhbWVQYXJ0cygKLSAgICBNYXAgbWVzc2FnZVBhcnRzLAotICAgIE1lc3NhZ2Ugd3NkbE1lc3NhZ2UsCi0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyKQotICB7Ci0KLSAgICBTdHJpbmcgc29hcEhlYWRlclBhcnQgPSBudWxsOwotICAgIGlmIChzb2FwSGVhZGVyICE9IG51bGwpCi0gICAgICBzb2FwSGVhZGVyUGFydCA9IHNvYXBIZWFkZXIuZ2V0UGFydCgpOwotCi0gICAgLy8gY2hlY2sgbnVsbCBjb25kaXRpb25zCi0gICAgaWYgKG1lc3NhZ2VQYXJ0cyA9PSBudWxsICYmIHdzZGxNZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7IC8vIHNpbXBsZSBlcXVhbGl0eSB0ZXN0Ci0gICAgfQotICAgIGVsc2UgaWYgKG1lc3NhZ2VQYXJ0cyA9PSBudWxsIHx8IHdzZGxNZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIC8vTGlzdCB3c2RsUGFydHMgPSB3c2RsTWVzc2FnZS5nZXRPcmRlcmVkUGFydHMobnVsbCk7Ci0gICAgTWFwIHdzZGxQYXJ0cyA9IG51bGw7Ci0gICAgaWYgKHdzZGxNZXNzYWdlLmdldFBhcnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB3c2RsUGFydHMgPSB3c2RsTWVzc2FnZS5nZXRQYXJ0cygpOwotICAgICAgLy8gbG9vayBmb3IgdGhlIHNvYXAtbWVzc2FnZSBvcGVyYXRpb24gc2lnbmF0dXJlCi0gICAgICBJdGVyYXRvciBpID0gd3NkbFBhcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAvLyBidWlsZCBhIHNldCBvZiBQYXJ0IG5hbWVzICAgIAotICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHAgPSAoUGFydCkgaS5uZXh0KCk7Ci0gICAgICAgIC8vIGRvIG5vdCBpbmNsdWRlIHRoZSBwYXJ0IGZvciB0aGUgc29hcDpoZWFkZXIgKGlmIGFueSkKLSAgICAgICAgaWYgKCFwLmdldE5hbWUoKS5lcXVhbHMoc29hcEhlYWRlclBhcnQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgcGFydCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNvYXA6Ym9keQotICAgICAgICAgIHYuYWRkKG5ldyBRTmFtZShwLmdldE5hbWUoKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBpZiBvbmUgb2YgdGhlIHBhcnRzIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNvYXA6aGVhZGVyIGluIHRoZSBiaW5kaW5nCi0gICAgICAvLyAoYnkgPHNvYXA6aGVhZGVyIHBhcnQ9IntwYXJ0bmFtZX0iPiksIHJlbW92ZSB0aGlzIGZyb20gdGhlIHNldAotCi0gICAgfQotCi0gICAgLy8gY29tcGFyZSB3aXRoIHRoZSBwYXJ0cyBsaXN0IGZyb20gdGhlIG1lc3NhZ2UJKG9yZGVyZWQpCi0gICAgaWYgKHYuaXNFbXB0eSgpICYmIG1lc3NhZ2VQYXJ0cy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gUEI6IENoYW5nZWQgdG8gY29udGFpbnNBbGwoKSBzaW5jZSBlcXVhbHMoKSBmYWlscyB3aGVuIHVzaW5nIEpSRSAxLjQKLSAgICBpZiAodi5jb250YWluc0FsbChtZXNzYWdlUGFydHMua2V5U2V0KCkpCi0gICAgICAmJiAodi5zaXplKCkgPT0gbWVzc2FnZVBhcnRzLnNpemUoKSkpCi0gICAgewotICAgICAgLy8gQ2hlY2sgZm9yIHhzaTp0eXBlIG1pc21hdGNoCi0gICAgICBJdGVyYXRvciBwYXJ0cyA9IG1lc3NhZ2VQYXJ0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgUU5hbWUgcGFydE5hbWUsIHhzaVR5cGU7Ci0gICAgICB3aGlsZSAocGFydHMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBwYXJ0TmFtZSA9IChRTmFtZSkgcGFydHMubmV4dCgpOwotCi0gICAgICAgIC8vIEdldCB4c2k6dHlwZSBRTmFtZQotICAgICAgICBpZiAoKHhzaVR5cGUgPSAoUU5hbWUpIG1lc3NhZ2VQYXJ0cy5nZXQocGFydE5hbWUpKSAhPSBudWxsCi0gICAgICAgICAgJiYgd3NkbFBhcnRzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIFdTREwgcGFydCBkZWZpbml0aW9uCi0gICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIHdzZGxQYXJ0cy5nZXQocGFydE5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAgICAgLy8gSWYgeHNpVHlwZSBpcyBOT1QgZGVyaXZlZCBmcm9tIHRoZSB0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydAotICAgICAgICAgIGlmICghaXNEZXJpdmVkVHlwZSh4c2lUeXBlLCBwYXJ0LmdldFR5cGVOYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIHJldHVybiBmYWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vcmV0dXJuICh2LmVxdWFscyhtZXNzYWdlUGFydHMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBvbmUgc2NoZW1hIHR5cGUgaXMgZGVyaXZlZCBmcm9tIGFub3RoZXIuCi0gICAqIEBwYXJhbSBleHRUeXBlIGFuIGFzc3VtZWQgZGVyaXZlZCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZSBhbiBhc3N1bWVkIGJhc2UgdHlwZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGV4dFR5cGUgaXMgZGVyaXZlZCBmcm9tIHR5cGUsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEZXJpdmVkVHlwZShRTmFtZSBleHRUeXBlLCBRTmFtZSB0eXBlKQotICB7Ci0gICAgLy8gSWYgZWl0aGVyIG9mIHR5cGVzIGlzIG51bGwsIHJldHVybiBmYWxzZQotICAgIGlmIChleHRUeXBlID09IG51bGwgfHwgdHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIElmIHRoZSB0eXBlcyBhcmUgZXF1YWwsIHJldHVybiB0cnVlCi0gICAgaWYgKGV4dFR5cGUuZXF1YWxzKHR5cGUpKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCBzY2hlbWFzIAotICAgIEl0ZXJhdG9yIGkgPSB3c2RsRG9jdW1lbnQuZ2V0U2NoZW1hcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFhTTW9kZWwgeHNNb2RlbCA9IChYU01vZGVsKSBpLm5leHQoKTsKLSAgICAgIC8vIFJldHJpZXZpbmcgdGhlIGRlcml2ZWQgdHlwZSBkZWZpbml0aW9uCi0gICAgICBYU1R5cGVEZWZpbml0aW9uIHhzVHlwZSA9IHhzTW9kZWwuZ2V0VHlwZURlZmluaXRpb24oCi0gICAgICAgIGV4dFR5cGUuZ2V0TG9jYWxQYXJ0KCksIGV4dFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgLy8gSWYgaXQgaXMgZm91bmQgYW5kIGRlcml2ZWQgZnJvbSB0aGUgYmFzZSB0eXBlLCByZXR1cm4gdHJ1ZQotICAgICAgaWYgKHhzVHlwZSAhPSBudWxsICYmIHhzVHlwZS5kZXJpdmVkRnJvbSh0eXBlLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICB0eXBlLmdldExvY2FsUGFydCgpLCBYU0NvbnN0YW50cy5ERVJJVkFUSU9OX05PTkUpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZXh0VHlwZSBpcyBub3QgZGVyaXZlZCBmcm9tIHR5cGUsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAJKiBHZXQgYSBsaXN0IG9mIFFOYW1lcyBvZiBwYXJ0cyBmcm9tIHRoZSBzb2FwIGJvZHkgb2YgdGhlIHNwZWNpZmllZCBtZXNzYWdlCi0gIAkqLwotICBwdWJsaWMgRWxlbWVudCBnZXRTb2FwQm9keUNoaWxkKERvY3VtZW50IGRvYykKLSAgewotCi0gICAgRWxlbWVudCBvcEVsZW0gPSBudWxsOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHNvYXA6Ym9keSBjaGlsZCBlbGVtZW50IG5hbWVzIGZyb20gdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKSAmJiBvcEVsZW0gPT0gbnVsbDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3BFbGVtID0gKEVsZW1lbnQpIG47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvcEVsZW07Ci0gIH0KLQotICAvKiogQ2hlY2sgd2hldGhlciB0aGlzIG1lc3NhZ2UgaXMgYSBzb2FwIGZhdWx0Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ZhdWx0KERvY3VtZW50IGRvYykKLSAgewotICAgIGJvb2xlYW4gaXNGYXVsdCA9IGZhbHNlOwotCi0gICAgaWYgKGRvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIGlzRmF1bHQgPQotICAgICAgICAocm9vdAotICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkZhdWx0IikKLSAgICAgICAgICAuZ2V0TGVuZ3RoKCkKLSAgICAgICAgICA+IDApOwotICAgIH0KLQotICAgIHJldHVybiBpc0ZhdWx0OwotICB9Ci0KLSAgLyoqIAotICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgbWVzc2FnZSBoYXMgYSBzb2FwIGJvZHkgd2l0aCBhIGNoaWxkIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBjb250YWluc1NvYXBCb2R5V2l0aENoaWxkKERvY3VtZW50IGRvYykKLSAgewotICAgIGJvb2xlYW4gY29udGFpbnMgPSBmYWxzZTsKLQotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb250YWlucyA9ICgoZ2V0U29hcEJvZHlDaGlsZChkb2MpID09IG51bGwpID8gZmFsc2UgOiB0cnVlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29udGFpbnM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFNPQVBBY3Rpb24gdmFsdWUgZnJvbSB0aGUgSFRUUCBoZWFkZXJzLgotICAgKiBAcGFyYW0gaGVhZGVycyBIVFRQIGhlYWRlcnMKLSAgICogQHJldHVybiBTT0FQQWN0aW9uIHZhbHVlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNvYXBBY3Rpb24oU3RyaW5nIGhlYWRlcnMpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLSAgICByZXR1cm4gYWN0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgUU5hbWVzIG9mIHBhcnRzIGZyb20gdGhlIHNvYXAgYm9keSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgUlBDIHN0eWxlIG1lc3NhZ2UgY29udGVudAotICAgKi8KLSAgcHJpdmF0ZSBRTmFtZSBnZXRPcGVyYXRpb25Gcm9tTWVzc2FnZShEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBRTmFtZSBvcGVyYXRpb24gPSBudWxsOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICAvLyBJZiBlbGVtZW50LCB0aGVuIHRoaXMgaXMgdGhlIG9wZXJhdGlvbiBuYW1lCi0gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG9wZXJhdGlvbiA9IG5ldyBRTmFtZShuLmdldE5hbWVzcGFjZVVSSSgpLCBuLmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gb3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgUU5hbWVzIG9mIHBhcnRzIGZyb20gdGhlIHNvYXAgYm9keSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgUlBDIHN0eWxlIG1lc3NhZ2UgY29udGVudAotICAgKi8KLSAgcHJpdmF0ZSBNYXAgZ2V0UGFydExpc3RGcm9tTWVzc2FnZShEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBNYXAgcGFydHMgPSBuZXcgSGFzaE1hcCgpOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHNvYXA6Ym9keSBncmFuZC1jaGlsZCBlbGVtZW50IG5hbWVzIGZyb20gdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgLy8gKGltbWVkaWF0ZSBjaGlsZCBpcyB0aGUgbWVzc2FnZSBuYW1lKQotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgb3BlcmF0aW9uIG5hbWUuIEl0cyBjaGlsZHJlbiBhcmUgdGhlIHBhcnRzCi0gICAgICAgICAgICBOb2RlTGlzdCBncmFuZENoaWxkcmVuID0gbi5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyYW5kQ2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTm9kZSBtID0gZ3JhbmRDaGlsZHJlbi5pdGVtKGopOwotICAgICAgICAgICAgICBpZiAobSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHBhcnQgaGFzIGFuIHhzaTp0eXBlCi0gICAgICAgICAgICAgICAgQXR0ciBhdHRyID0KLSAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQpIG0sCi0gICAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1hTSSwgInR5cGUiKSk7Ci0KLSAgICAgICAgICAgICAgICBRTmFtZSB4c2lUeXBlID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIHhzaTp0eXBlIGF0dHJpYnV0ZSwgdGhlbiBnZXQgdGhlIHZhbHVlIGFzIGEgUU5hbWUgCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgeHNpVHlwZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgRE9NVXRpbHMuZ2V0UU5hbWUoYXR0ci5nZXROb2RlVmFsdWUoKSwgKEVsZW1lbnQpIG0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uIHdlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBhZGQgdG8gdGhlIGNoaWxkIGVsZW1lbnQgbGlzdAotICAgICAgICAgICAgICAgIHBhcnRzLnB1dCgKLSAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShtLmdldE5hbWVzcGFjZVVSSSgpLCBtLmdldExvY2FsTmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgIHhzaVR5cGUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwYXJ0czsKLSAgfQotCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uW10gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ1tdIGJpbmRpbmdzKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgSGFzaFNldCBiaW5kaW5nT3BlcmF0aW9uc1NldCA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICAvLyB3aGl6eiB0aHJvdWdoIHRoZSBiaW5kaW5ncywgY2hlY2tpbmcgZm9yIGEgYmluZGluZ09wZXJhdGlvbiBtYXRjaGluZyB0aGUgbWVzc2FnZQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ3MubGVuZ3RoOyBpKyspCi0gICAgewotCi0gICAgICBCaW5kaW5nIHRyeUJpbmRpbmcgPSBiaW5kaW5nc1tpXTsKLSAgICAgIExpc3QgYmluZGluZ09wcyA9IHRyeUJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLQotICAgICAgaWYgKGJpbmRpbmdPcHMgIT0gbnVsbCkKLSAgICAgIHsKLQotICAgICAgICAvLyBzZWFyY2ggdGhyb3VnaCBiaW5kaW5nIE9wZXJhdGlvbnMKLSAgICAgICAgSXRlcmF0b3IgYmluZGluZ09wSXQgPSB0cnlCaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGJpbmRpbmdPcEl0Lmhhc05leHQoKSkKLSAgICAgICAgewotCi0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSAoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ09wSXQubmV4dCgpOwotICAgICAgICAgIC8vIGNoZWNrIGRlcGVuZHMgb24gd2hpY2ggYmluZGluZyBzdHlsZSBpcyBkZWNsYXJlZCBpbiB0aGUgd3NkbAotICAgICAgICAgIFNPQVBPcGVyYXRpb24gc29hcE9wID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcE9wZXJhdGlvbihiaW5kaW5nT3ApOwotICAgICAgICAgIC8vR1Q6IG1vdmUgdGhpcyBtZXRob2QgdG8gdXRpbHMKLQotICAgICAgICAgIFN0cmluZyBzdHlsZTsKLSAgICAgICAgICBpZiAoKHNvYXBPcCA9PSBudWxsKSB8fCAoc3R5bGUgPSBzb2FwT3AuZ2V0U3R5bGUoKSkgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyB1c2UgdGhlIHN0eWxlIG9mIHRoZSBwYXJlbnQgYmluZGluZ09wCi0KLSAgICAgICAgICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcEJpbmRpbmcodHJ5QmluZGluZyk7Ci0gICAgICAgICAgICAvL0dUOiBtb3ZlIHRoaXMgbWV0aG9kIHRvIHV0aWxzCi0gICAgICAgICAgICBpZiAoKHN0eWxlID0gc29hcEJpbmQuZ2V0U3R5bGUoKSkgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3R5bGUgPSBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DOwotICAgICAgICAgICAgICAvL2RlZmF1bHQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHN0eWxlLmVxdWFscyhiaW5kaW5nU3R5bGUpKQotICAgICAgICAgIHsKLQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNTZXQuYWRkKGJpbmRpbmdPcCk7Ci0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gLy8gY3VycmVudCBiaW5kaW5nIGhhcyBubyBiaW5kaW5nT3BlcmF0aW9ucywgaWdub3JlCi0gICAgfQotICAgIHJldHVybiAoQmluZGluZ09wZXJhdGlvbltdKSBiaW5kaW5nT3BlcmF0aW9uc1NldC50b0FycmF5KAotICAgICAgbmV3IEJpbmRpbmdPcGVyYXRpb25bMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHNvYXA6Ym9keSBlbGVtZW50IGlzIGxpdGVyYWwuCi0gICAqIEBwYXJhbSBleHRFbGVtZW50cyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIHdzZGw6aW5wdXQgb3Igd3NkbDpvdXRwdXQKLSAgICogb2YgYSBiaW5kaW5nCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xpdGVyYWwoTGlzdCBleHRFbGVtcykKLSAgewotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gZ2V0U09BUEJvZHkoZXh0RWxlbXMpOwotICAgIGlmIChzb2FwQm9keSAhPSBudWxsCi0gICAgICAmJiBzb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIE9yZGVycyB3c2RsOnBhcnQgbmFtZXMga2VlcGluZyBpbiBtaW5kIHRoZSAicGFydHMiIGF0dHJpYnV0ZSBvZiBXU0RMIHNvYXA6Ym9keQotICAgKiBAcGFyYW0gbWVzc2FnZVBhcnRzIGEgbGlzdCBvZiB3c2RsOnBhcnRTCi0gICAqIEBwYXJhbSBleHRFbGVtcyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGluIHRoZSBiaW5kaW5nCi0gICAqIEByZXR1cm4gdGhlIG9yZGVyZWQgbGlzdCBvZiBwYXJ0IG5hbWVzCi0gICAqLwotICBwdWJsaWMgTGlzdCBvcmRlclBhcnROYW1lcyhMaXN0IG1lc3NhZ2VQYXJ0cywgTGlzdCBleHRFbGVtcykKLSAgewotICAgIExpc3Qgb3JkZXJlZFBhcnROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBMaXN0IGJvZHlQYXJ0cyA9IG51bGw7Ci0KLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IGdldFNPQVBCb2R5KGV4dEVsZW1zKTsKLSAgICBpZiAoc29hcEJvZHkgIT0gbnVsbCkKLSAgICAgIGJvZHlQYXJ0cyA9IHNvYXBCb2R5LmdldFBhcnRzKCk7Ci0KLSAgICBJdGVyYXRvciBpID0gbWVzc2FnZVBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0TmFtZSA9ICgoUGFydCkgaS5uZXh0KCkpLmdldE5hbWUoKTsKLSAgICAgIC8vIElmIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBvciBjb250YWlucwotICAgICAgLy8gdGhlIHdzZGw6cGFydCBuYW1lLCB0aGVuIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIG9yZGVyZWQgbGlzdAotICAgICAgaWYgKGJvZHlQYXJ0cyA9PSBudWxsIHx8IGJvZHlQYXJ0cy5jb250YWlucyhwYXJ0TmFtZSkpCi0gICAgICAgIG9yZGVyZWRQYXJ0TmFtZXMuYWRkKHBhcnROYW1lKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3JkZXJlZFBhcnROYW1lczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZXMgdGhlIFNPQVBCb2R5IG9iamVjdCBmcm9tIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsbWVudHMgaW4gYmluZGluZwotICAgKiBAcGFyYW0gZXh0RWxlbXMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRoZSBTT0FQQm9keSBlbGVtZW50Ci0gICAqLwotICBwdWJsaWMgU09BUEJvZHkgZ2V0U09BUEJvZHkoTGlzdCBleHRFbGVtcykKLSAgewotICAgIGlmIChleHRFbGVtcyA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZXh0RWxlbXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBpLm5leHQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgICAgcmV0dXJuIChTT0FQQm9keSkgb2JqOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0gCi0gIHB1YmxpYyBMaXN0IHJlc29sdmVTYW1lTmFtZXNwYWNlcyhMaXN0IHNjaGVtYUVsZW1lbnRzKQotICB7Ci0gIAlMaXN0IG5hbWVzcGFjZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAlMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCUl0ZXJhdG9yIGkgPSBzY2hlbWFFbGVtZW50cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IHNjaGVtYSA9IChFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBzY2hlbWEuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgICAgaWYgKCFuYW1lc3BhY2VzLmNvbnRhaW5zKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICB7Ci0gICAgICAgIG5hbWVzcGFjZXMuYWRkKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgCUxpc3Qgc2NoZW1hcyA9IGdldFNjaGVtYXNXaXRoU2FtZU5hbWVzcGFjZShzY2hlbWFFbGVtZW50cywgdGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAJaWYgKHNjaGVtYXMuc2l6ZSgpID09IDEpCi0gICAgICAJewotICAgICAgCSAgcmVzdWx0LmFkZChzY2hlbWEpOwotICAgICAgCX0KLSAgICAJZWxzZQotICAgIAl7Ci0gICAgCQkvLyBjb3B5aW5nIGFsbCB0aGUgTlMgZGVjbGFyYXRpb25zIGZyb20gd3NkbDpkZWZpbml0aW9ucyB3c2RsOnR5cGVzCi0gICAgICAvL2NvcHlOU0RlY2xhcmF0aW9ucyhyb290LCBzY2hlbWEpOwotICAgICAgY29weU5TRGVjbGFyYXRpb25zKChFbGVtZW50KSBzY2hlbWEuZ2V0UGFyZW50Tm9kZSgpLCBzY2hlbWEpOwotICAgICAgLy8gUmVwbGFjaW5nIGFsbCByZWxhdGl2ZSBzY2hlbWFMb2NhdGlvbiBVUklzIHdpdGggYWJzb2x1dGUgb25lcwotICAgICAgLy9yZXBsYWNlUmVsYXRpdmVVUklzKHNjaGVtYSwgd3NkbFVSSSk7Ci0gICAgICAvLyBTZXJpYWxpemUgdGhlIHNjaGVtYSBlbGVtZW50cyBpbnNpZGUgdGhlIFR5cGVzLCB0aGVuIHVzZSB0aGlzIGFzCi0gICAgICAvLyB0aGUgc2NoZW1hIHN0cmluZyBmb3IgdGhlIHZhbGlkYXRpb24KLSAgICAgIC8vU3RyaW5nIHNjaGVtYVN0cmluZyA9Ci0gICAgICAvLyAgRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoc2NoZW1hKTsKLSAgICAgIC8vIHNjaGVtYVN0cmluZ3MuYWRkKHNjaGVtYVN0cmluZyk7Ci0gICAgICAJfQotICAgICAgfQotICAgIH0KLSAgCXJldHVybiBudWxsOwotICB9Ci0gIAkKLSAgcHVibGljIExpc3QgZ2V0U2NoZW1hc1dpdGhTYW1lTmFtZXNwYWNlKExpc3Qgc2NoZW1hRWxlbWVudHMsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UpCi0gIHsgCi0gIAlMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpID0gc2NoZW1hRWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRWxlbWVudCBzY2hlbWEgPSAoRWxlbWVudClpLm5leHQoKTsKLSAgICAgIFN0cmluZyBzY2hlbWFUYXJnZXROYW1lc3BhY2UgPSBzY2hlbWEuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgICAgaWYgKHNjaGVtYVRhcmdldE5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgIAlzY2hlbWFUYXJnZXROYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgCi0gICAgICBpZiAoc2NoZW1hVGFyZ2V0TmFtZXNwYWNlLmVxdWFscyh0YXJnZXROYW1lc3BhY2UpKQotICAgICAgewotICAgICAgIAlyZXN1bHQuYWRkKHNjaGVtYSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBkdXBsaWNhdGVOYW1lc3BhY2VzRGV0ZWN0ZWQoTGlzdCBzY2hlbWFFbGVtZW50cykKLSAgeyAKLSAgCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgTGlzdCBuYW1lc3BhY2VzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGkgPSBzY2hlbWFFbGVtZW50cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgCUVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBzY2hlbWEuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgICAgICBpZiAodGFyZ2V0TmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgIAl0YXJnZXROYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChuYW1lc3BhY2VzLmNvbnRhaW5zKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgCXJlc3VsdCA9IHRydWU7Ci0gICAgICAgIAlicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCW5hbWVzcGFjZXMuYWRkKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlc2UgdGVzdHMgc2hvdWxkIGJlIHJ1biAoZGVwZW5kaW5nIG9uIHRoZSBhbmFseXplcgotICAgKiBjb25maWcpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBydW5UZXN0cygpIHsgcmV0dXJuIHRlc3RhYmxlOyB9Ci0gIAotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0gICAgICAvLyBHZXQgdGhlIGxvZyBmaWxlIHJlYWRlcgotICAgICAgTG9nUmVhZGVyIGxvZ1JlYWRlciA9IERvY3VtZW50RmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0xvZ1JlYWRlcigpOwotCi0gICAgICAvLyBDcmVhdGUgbG9nIHJlYWRlciBjYWxsYmFjawotICAgICAgTG9nUHJvY2Vzc29yIGVudmVsb3BlUHJvY2Vzc29yID0gbmV3IExvZ1Byb2Nlc3Nvcih0aGlzKTsKLQotICAgICAgLy8gU3RhcnQgcmVhZGluZyB0aGUgbG9nIGZpbGUKLSAgICAgIGxvZ1JlYWRlci5yZWFkTG9nKGFuYWx5emVyQ29uZmlnLmdldExvZ0xvY2F0aW9uKCksIGVudmVsb3BlUHJvY2Vzc29yKTsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMb2dQcm9jZXNzb3IgaW1wbGVtZW50cyBNZXNzYWdlRW50cnlIYW5kbGVyIHsKLSAgICAgIExvZ1ZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIG1lc3NhZ2UgcHJvY2Vzc29yIGFzIGEgbG9nIHJlYWRlciBjYWxsYmFjayBmdW5jdGlvbi4KLSAgICAgKi8KLSAgICAgIExvZ1Byb2Nlc3NvcihMb2dWYWxpZGF0b3IgdmFsaWRhdG9yKSB7Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IgPSB2YWxpZGF0b3I7Ci0gICAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcm9jZXNzIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwcm9jZXNzQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgICAgICAgICB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLSAgICAgICAgcmVwb3J0ZXIuYWRkQXJ0aWZhY3RSZWZlcmVuY2UoYXJ0aWZhY3RSZWZlcmVuY2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb2Nlc3MgYSBzaW5nbGUgbG9nIGVudHJ5LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NMb2dFbnRyeShFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLSAgICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlKGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9CYXNlVmFsaWRhdG9ySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9CYXNlVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzJjZTM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZVZhbGlkYXRvckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUHJlcmVxRmFpbGVkTGlzdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MRG9jdW1lbnRDYWNoZVVzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotCi0vKioKLSAqIFRoZSBXU0RMIHZhbGlkYXRvciB3aWxsIHZlcmlmeSB0aGF0IHRoZSBXU0RMIGFuZCBhc3NvY2lhdGVkIFhNTCBzY2hlbWEgZGVmaW5pdGlvbnMKLSAqIGFyZSBpbiBjb25mb3JtYW5jZSB3aXRoIHRoZSBwcm9maWxlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEBhdXRob3IgR3JhaGFtIFR1cnJlbGwgICAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgWE1MRG9jdW1lbnRDYWNoZVVzZXIKLSAgaW1wbGVtZW50cyBCYXNlVmFsaWRhdG9yCi17Ci0KLSAgLyoqCi0gICAqIEEgaGFzaHRhYmxlIHRoYXQgbWFwcyBhc3NlcnRpb24gcmVzdWx0cyB0byB0aGVpciBwcmlvcml0aWVzLCAwIGlzIGxvd2VzdAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGFzaHRhYmxlIHJlc3VsdFByaW9yaXR5ID0gbmV3IEhhc2h0YWJsZSg2KTsKLSAgc3RhdGljIHsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQsIG5ldyBJbnRlZ2VyKDApKTsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSwgbmV3IEludGVnZXIoMSkpOwotICAgIHJlc3VsdFByaW9yaXR5LnB1dChBc3NlcnRpb25SZXN1bHQuUkVTVUxUX01JU1NJTkdfSU5QVVQsIG5ldyBJbnRlZ2VyKDIpKTsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HLCBuZXcgSW50ZWdlcigzKSk7Ci0gICAgcmVzdWx0UHJpb3JpdHkucHV0KEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUFJFUkVRX0ZBSUxFRCwgbmV3IEludGVnZXIoNCkpOwotICAgIHJlc3VsdFByaW9yaXR5LnB1dChBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCwgbmV3IEludGVnZXIoNSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGJlaW5nIHBhc3NlZCB3aGVuIHByb2Nlc3NpbmcgcHJlLXJlcXVpc2l0ZXMKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfVkFMSURfUFJJT1JJVFkgPSAxOwotCi0gIC8qKgotICAgKiBBbmFseXplciBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQ7Ci0KLSAgLyoqCi0gICAqIFByb2ZpbGUgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdDsKLQotICAvKioKLSAgICogUmVwb3J0ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0ZXIgcmVwb3J0ZXI7Ci0KLSAgLyoqCi0gICAqIEVudHJ5LgotICAgKi8KLSAgLy8gcHJvdGVjdGVkIEVudHJ5IGVudHJ5OwotCi0gIC8qKgotICAgKiBSZXBvcnQgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3Q7Ci0KLSAgLyoqCi0gICAqIFZlcmJvc2Ugb3B0aW9uLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gdmVyYm9zZU9wdGlvbiA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBUZXN0IGFzc2VydGlvbiBwcm9jZXNzZWQgY291bnQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGFzc2VydGlvbkNvdW50ID0gMDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgQmFzZVZhbGlkYXRvckltcGwoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gcHJvZmlsZUFydGlmYWN0IHRoZSBwcm9maWxlIGFydGlmaWFjdC4KLSAgICogQHBhcmFtIHJlcG9ydEFydGlmYWN0ICB0aGUgcmVwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcmVwb3J0ZXIgICAgICAgIGEgUmVwb3J0ZXIgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB2YWxpZGF0b3IgY291bGQgbm90IGJlIGluaXRpYWxpemVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgUmVwb3J0ZXIgcmVwb3J0ZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2VzCi0gICAgdGhpcy5hbmFseXplckNvbnRleHQgPSBhbmFseXplckNvbnRleHQ7Ci0gICAgdGhpcy5wcm9maWxlQXJ0aWZhY3QgPSBwcm9maWxlQXJ0aWZhY3Q7Ci0gICAgdGhpcy5yZXBvcnRBcnRpZmFjdCA9IHJlcG9ydEFydGlmYWN0OwotICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjsKLQotICAgIC8vIEdldCB2ZXJib3NlIG9wdGlvbiAgICAKLSAgICB2ZXJib3NlT3B0aW9uID0KLSAgICAgIHJlcG9ydGVyCi0gICAgICAgIC5nZXRSZXBvcnQoKQotICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRWZXJib3NlT3B0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyBhbGwgb2YgdGhlIHRlc3QgYXNzZXJ0aW9ucyBmb3Igb25lIGVudHJ5LgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggYSBjbGFzcyBwcmVmaXguCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgc2VyaW91cyBwcm9ibGVtcyBvY2N1ciB3aGlsZSBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIGFsbCBvZiB0aGUgdGVzdCBhc3NlcnRpb25zIGZvciBhbiBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NBc3NlcnRpb25zKAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGxvbmcgc3RhcnRUaW1lID0gMDsKLQotICAgIEhhc2hNYXAgcHJvY2Vzc0xpc3QgPSBuZXcgSGFzaE1hcCgpOwotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiA9IG51bGw7Ci0gICAgQXNzZXJ0aW9uUHJvY2VzcyBhc3NlcnRpb25Qcm9jZXNzOwotICAgIEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQ7Ci0KLSAgICBUcmVlTWFwIHByZVJlcVJlc3VsdHM7Ci0gICAgUHJlcmVxRmFpbGVkTGlzdCBwcmVyZXFGYWlsZWRMaXN0OwotICAgIFN0cmluZyBwcmVSZXFJZDsKLQotICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IG5ldyBDbGFzc1sxXTsKLSAgICAvLyBJZiB0aGlzIGlzIGFuIGluc3RhbmNlIG9mIE1lc3NhZ2VWYWxpZGF0b3Igb3IgRW52ZWxvcGVWYWxpZGF0b3IKLSAgICAvLyB0aGVuIHVzZSBCYXNlTWVzc2FnZVZhbGlkYXRvciBhcyBhIHBhcmFtIHR5cGUgb2YgYXNzZXJ0aW9ucyBjb25zdHJ1Y3RvcgotICAgIHBhcmFtVHlwZXNbMF0gPSB0aGlzIGluc3RhbmNlb2YgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgPwotICAgICAgQmFzZU1lc3NhZ2VWYWxpZGF0b3IuY2xhc3MgOiB0aGlzLmdldENsYXNzKCk7Ci0KLSAgICBPYmplY3RbXSBwYXJhbXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIHBhcmFtc1swXSA9IHRoaXM7Ci0KLSAgICAvLyBHZXQgZW50cnkgZnJvbSBjb250ZXh0Ci0gICAgRW50cnkgZW50cnkgPSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKTsKLQotICAgIC8vIEFkZCBlbnRyeSB0byBhcnRpZmFjdAotICAgIHRoaXMucmVwb3J0QXJ0aWZhY3QuYWRkRW50cnkoZW50cnkpOwotCi0gICAgLy8gQWRkIGVudHJ5IHRvIHJlcG9ydAotICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRW52ZWxvcGVWYWxpZGF0b3IpCi0gICAgIAl0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnZlbG9wZUVudHJ5KGVudHJ5KTsgCi0JZWxzZSB0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnRyeShlbnRyeSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIHRlc3QgYXNzZXJ0aW9ucyBmb3IgdGhlIGFydGlmYWN0Ci0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHByb2ZpbGVBcnRpZmFjdC5nZXRUZXN0QXNzZXJ0aW9uTGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAvLyBHZXQgbmV4dCB0ZXN0IGFzc2VydGlvbgotICAgICAgICB0ZXN0QXNzZXJ0aW9uID0gKFRlc3RBc3NlcnRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICAvLyBSZXNldCB2YXJpYWJsZXMKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0ID0gbnVsbDsKLQotICAgICAgICAvLyBJZiB0aGUgdGVzdCBhc3NlcnRpb24gaXMgZW5hYmxlZCwgdGhlbiBjb250aW51ZQotICAgICAgICAvLyAgICAgICAgaWYgKCh0ZXN0QXNzZXJ0aW9uLmlzRW5hYmxlZCgpKSAmJiAKLSAgICAgICAgLy8gICAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHModGFyZ2V0Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLmdldFR5cGVOYW1lKCkpKSB7IAotICAgICAgICBpZiAodGVzdEFzc2VydGlvbi5pc0VuYWJsZWQoKQotICAgICAgICAgICYmIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBBZGQgMSB0byBhc3NlcnRpb24gcHJvY2Vzc2VkIGNvdW50Ci0gICAgICAgICAgICBhc3NlcnRpb25Db3VudCsrOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgYXNzZXJ0aW9uIHByb2Nlc3MgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQsIHRoZW4gY3JlYXRlIGl0Ci0gICAgICAgICAgICBpZiAoKGFzc2VydGlvblByb2Nlc3MgPQotICAgICAgICAgICAgICAoQXNzZXJ0aW9uUHJvY2VzcykgcHJvY2Vzc0xpc3QuZ2V0KHRlc3RBc3NlcnRpb24uZ2V0SWQoKSkpCi0gICAgICAgICAgICAgID09IG51bGwpCi0gICAgICAgICAgICB7Ci0KLSAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGFzc2VydGlvbiBwcm9jZXNzCi0gICAgICAgICAgICAgIENsYXNzIGFzc2VydGlvbkNsYXNzID0KLSAgICAgICAgICAgICAgICBDbGFzcy5mb3JOYW1lKGNsYXNzUHJlZml4ICsgdGVzdEFzc2VydGlvbi5nZXRJZCgpKTsKLQotICAgICAgICAgICAgICBhc3NlcnRpb25Qcm9jZXNzID0KLSAgICAgICAgICAgICAgICAoQXNzZXJ0aW9uUHJvY2VzcykgYXNzZXJ0aW9uQ2xhc3MuZ2V0Q29uc3RydWN0b3IoCi0gICAgICAgICAgICAgICAgICBwYXJhbVR5cGVzKS5uZXdJbnN0YW5jZSgKLSAgICAgICAgICAgICAgICAgIHBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgLy8gQWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICAgIHByb2Nlc3NMaXN0LnB1dCh0ZXN0QXNzZXJ0aW9uLmdldElkKCksIGFzc2VydGlvblByb2Nlc3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGVudHJ5IGlzIG51bGwKLSAgICAgICAgICAgIGlmIChlbnRyeS5nZXRFbnRyeURldGFpbCgpID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFzc2VydGlvblJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgICAgICAgICAgICAgdGVzdEFzc2VydGlvbiwKLSAgICAgICAgICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTUlTU0lOR19JTlBVVCwKLSAgICAgICAgICAgICAgICAgIChTdHJpbmcpIG51bGwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRlc3QgYXNzZXJ0aW9uIHNob3VsZCBiZSBydW4KLSAgICAgICAgICAgIC8vaWYgKGlzTm90QXBwbGljYWJsZSh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpKSB7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc05vdEFwcGxpY2FibGUodGVzdEFzc2VydGlvbikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFzc2VydGlvblJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgICAgICAgICAgICAgdGVzdEFzc2VydGlvbiwKLSAgICAgICAgICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsCi0gICAgICAgICAgICAgICAgICAoU3RyaW5nKSBudWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gUHJvY2Vzc2luZyBhbGwgdGhlIGFzc2VydGlvbiBwcmUtcmVxdWlzaXRlcwotCi0gICAgICAgICAgICAgIHByZVJlcVJlc3VsdHMgPSBudWxsOwotICAgICAgICAgICAgICBwcmVyZXFGYWlsZWRMaXN0ID0gbnVsbDsKLSAgICAgICAgICAgICAgLy8gR2V0IGxpc3Qgb2YgcHJlLXJlcXMgZm9yIHNwZWNpZmllZCBhc3NlcnRpb24KLSAgICAgICAgICAgICAgSXRlcmF0b3IgaSA9IHRlc3RBc3NlcnRpb24uZ2V0UHJlcmVxSWRMaXN0KCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZVJlcVJlc3VsdHMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgIHByZVJlcVJlc3VsdHMgPSBuZXcgVHJlZU1hcCgpOwotICAgICAgICAgICAgICAgIC8vIEdldCBuZXh0IGlkCi0gICAgICAgICAgICAgICAgcHJlUmVxSWQgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHByZXJlcSByZXN1bHQKLSAgICAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQgcHJlUmVxUmVzdWx0ID0gcmVwb3J0ZXIuZ2V0QXNzZXJ0aW9uUmVzdWx0KHByZVJlcUlkKTsKLQotICAgICAgICAgICAgICAgIC8vIEFkZGluZyBhIHJlc3VsdCBwcmlvcml0eSB2YWx1ZSB0byBwcmVSZXFSZXN1bHRzCi0gICAgICAgICAgICAgICAgcHJlUmVxUmVzdWx0cy5wdXQoCi0gICAgICAgICAgICAgICAgICByZXN1bHRQcmlvcml0eS5nZXQocHJlUmVxUmVzdWx0LmdldFJlc3VsdCgpKSwKLSAgICAgICAgICAgICAgICAgIHByZVJlcVJlc3VsdC5nZXRSZXN1bHQoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJlcmVxIGZhaWxlZCwgdGhlbiBhZGQgaXQgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgICBpZiAoKChJbnRlZ2VyKXJlc3VsdFByaW9yaXR5LmdldChwcmVSZXFSZXN1bHQuZ2V0UmVzdWx0KCkpKS5pbnRWYWx1ZSgpCi0gICAgICAgICAgICAgICAgICA+IE1BWF9WQUxJRF9QUklPUklUWSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgZmFpbGVkIHByZXJlcSBJRCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgaWYgKHByZXJlcUZhaWxlZExpc3QgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgcHJlcmVxRmFpbGVkTGlzdCA9IG5ldyBQcmVyZXFGYWlsZWRMaXN0SW1wbCgpOwotICAgICAgICAgICAgICAgICAgcHJlcmVxRmFpbGVkTGlzdC5hZGRUZXN0QXNzZXJ0aW9uSUQocHJlUmVxSWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGlmIChwcmVyZXFGYWlsZWRMaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBoaWdoZXN0IHByZS1yZXF1aXNpdGVzJyByZXN1bHQKLSAgICAgICAgICAgICAgICBJbnRlZ2VyIG1heFJlcyA9IChJbnRlZ2VyKXByZVJlcVJlc3VsdHMubGFzdEtleSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyByZXNTdHJpbmcgPSAoU3RyaW5nKXByZVJlcVJlc3VsdHMuZ2V0KG1heFJlcyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc1N0cmluZy5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgICAgICAgICAgICAgICB8fHJlc1N0cmluZy5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HKSkgewotICAgICAgICAgICAgICAgICAgcmVzU3RyaW5nID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QUkVSRVFfRkFJTEVEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdCBiYXNlZCBvbiBwcmUtcmVxdWlzaXRlcyB3aGljaCBhcmUgbm90IHBhc3NlZAotICAgICAgICAgICAgICAgIGFzc2VydGlvblJlc3VsdCA9IGNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXNTdHJpbmcsIHByZXJlcUZhaWxlZExpc3QpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gUHJlLXJlcXVpc2l0ZXMgYXJlIHBhc3NlZCwgdmFsaWRhdGUgY3VycmVudCBhc3NlcnRpb24KLSAgICAgICAgICAgICAgZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZXNldCB0ZXN0IGFzc2VydGlvbgotICAgICAgICAgICAgICAgIGFzc2VydGlvblByb2Nlc3MucmVzZXQoKTsKLQotICAgICAgICAgICAgICAgIC8vICBWRVJCT1NFCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKAotICAgICAgICAgICAgICAgICAgICAiICBQcm9jZXNzaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICArIHRlc3RBc3NlcnRpb24uZ2V0SWQoKQotICAgICAgICAgICAgICAgICAgICAgICsgIiBmb3IgZW50cnkgcmVmZXJlbmNlIElEIFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBlbnRyeS5nZXRSZWZlcmVuY2VJRCgpCi0gICAgICAgICAgICAgICAgICAgICAgKyAiXSAuLi4iKTsKLSAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIHRoZSB0YXJnZXQKLSAgICAgICAgICAgICAgICBhc3NlcnRpb25SZXN1bHQgPQotICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uUHJvY2Vzcy52YWxpZGF0ZSh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgLy8gIFZFUkJPU0UKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZU9wdGlvbikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICIgICAgRWxhcHNlZCB0aW1lOiAiCi0gICAgICAgICAgICAgICAgICAgICAgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWUpCi0gICAgICAgICAgICAgICAgICAgICAgKyAibXMiKTsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCByZXN1bHQgdG8gdGhlIHJlcG9ydAotICAgICAgICAgICAgcmVwb3J0ZXIuYWRkQXNzZXJ0aW9uUmVzdWx0KGFzc2VydGlvblJlc3VsdCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY25mZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgIGlmICh0ZXN0QXNzZXJ0aW9uICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlcG9ydGVyCi0gICAgICAgICAgICAgICAgLmdldFJlcG9ydCgpCi0gICAgICAgICAgICAgICAgLmdldFJlcG9ydENvbnRleHQoKQotICAgICAgICAgICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgICAgICAgICAgLnByaW50TWVzc2FnZSgKLSAgICAgICAgICAgICAgICAiV0FSTklORzogIgotICAgICAgICAgICAgICAgICAgKyB0ZXN0QXNzZXJ0aW9uLmdldElkKCkKLSAgICAgICAgICAgICAgICAgICsgIiBpcyBub3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFWEVDRVBUSU9OOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0KLSAgICAgIGlmIChlIGluc3RhbmNlb2YgV1NJRXhjZXB0aW9uKQotICAgICAgICB0aHJvdyAoV1NJRXhjZXB0aW9uKSBlOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICB9Ci0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgYXNzZXJ0aW9uIHRhcmdldAotICAgICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50RW50cnkoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSB0ZXN0IGFzc2VydGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkIGZvciB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb24gYSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCAgdGhlIGVudHJ5IGNvbnRleHQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBpc1ByaW1hcnlFbnRyeVR5cGVNYXRjaCgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCk7Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uICBhIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAcGFyYW0gZW50cnkgICAgICAgICAgYW4gRW50cnkgb2JqZWN0Ci0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1ByaW1hcnlFbnRyeVR5cGVNYXRjaCgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnkgZW50cnkpCi0gIHsKLSAgICBib29sZWFuIG1hdGNoID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgdGVzdCBhc3NlcnRpb24gZW50cnkgdHlwZSBtYXRjaGVzIHRoZSB0YXJnZXQgY29udGV4dCBlbnRyeSB0eXBlLCB0aGVuIGNvbnRpbmUKLSAgICBpZiAodGVzdEFzc2VydGlvbgotICAgICAgLmdldEVudHJ5VHlwZU5hbWUoKQotICAgICAgLmVxdWFscyhlbnRyeS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUuCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBpc05vdEFwcGxpY2FibGUoVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3IjY2xlYW51cCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgbm8gYXNzZXJ0aW9ucyB3ZXJlIHByb2Nlc3NlZCwgdGhlbiBzZXQgYWxsIG1pc3NpbmdJbnB1dAotICAgIGlmIChhc3NlcnRpb25Db3VudCA9PSAwKQotICAgICAgc2V0QWxsTWlzc2luZ0lucHV0KCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWwgYSBGYWlsdXJlRGV0YWlsIG9iamVjdC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsKQotICB7Ci0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbnVsbDsKLQotICAgIC8vIENyZWF0ZSBmYWlsdXJlIGRldGFpbCBsaXN0Ci0gICAgaWYgKGZhaWx1cmVEZXRhaWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZhaWx1cmVEZXRhaWxMaXN0LmFkZChmYWlsdXJlRGV0YWlsKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiAgICAgICAgIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICAgICAgYSBTdHJpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gZmFpbHVyZURldGFpbE1lc3NhZ2UgIGEgZmFpbHVyZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgU3RyaW5nIGZhaWx1cmVEZXRhaWxNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sCi0gICAgICByZXN1bHQsCi0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSwKLSAgICAgIG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiAgICAgICAgIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICAgICAgYSBTdHJpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gZmFpbHVyZURldGFpbE1lc3NhZ2UgIGEgZmFpbHVyZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHBhcmFtIGVsZW1lbnRMb2NhdGlvbiAgICAgICBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgdGVzdCByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgU3RyaW5nIHJlc3VsdCwKLSAgICBTdHJpbmcgZmFpbHVyZURldGFpbE1lc3NhZ2UsCi0gICAgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbikKLSAgewotICAgIC8vIENyZWF0ZSBmYWlsdXJlIGRldGFpbCBsaXN0Ci0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbnVsbDsKLSAgICBpZiAoZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEZhaWx1cmVEZXRhaWwgZmFpbHVyZURldGFpbCA9IHJlcG9ydGVyLmNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLSAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICAgICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oZWxlbWVudExvY2F0aW9uKTsKLSAgICAgIGZhaWx1cmVEZXRhaWxMaXN0LmFkZChmYWlsdXJlRGV0YWlsKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiAgICAgYSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIHJlc3VsdCAgICAgICAgICAgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxMaXN0IGEgZmFpbHVyZSBkZXRhaWwgbGlzdC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KQotICB7Ci0gICAgLy8gQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQKLSAgICBBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0ID0gcmVwb3J0ZXIuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KCk7Ci0KLSAgICAvLyBTZXQgdmFsdWVzIGluIGFzc2VydGlvbiByZXN1bHQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHRlc3RBc3NlcnRpb24pOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotCi0gICAgLy8gU2V0IGZhaWx1cmUgZGV0YWlsIGxpc3QKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RmFpbHVyZURldGFpbExpc3QoZmFpbHVyZURldGFpbExpc3QpOwotCi0gICAgcmV0dXJuIGFzc2VydGlvblJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb24gICAgIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICBhIFN0cmluZyBvYmplY3QuCi0gICAqIEBwYXJhbSBwcmVyZXFGYWlsZWRMaXN0ICBhIGxpc3QgZmFpbGVkIHByZS1yZXF1aXNpdGUgYXNzZXJ0aW9ucy4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgUHJlcmVxRmFpbGVkTGlzdCBwcmVyZXFGYWlsZWRMaXN0KQotICB7Ci0gICAgLy8gQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQKLSAgICBBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0ID0gcmVwb3J0ZXIuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KCk7Ci0KLSAgICAvLyBTZXQgdmFsdWVzIGluIGFzc2VydGlvbiByZXN1bHQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHRlc3RBc3NlcnRpb24pOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRQcmVyZXFGYWlsZWRMaXN0KHByZXJlcUZhaWxlZExpc3QpOwotCi0gICAgcmV0dXJuIGFzc2VydGlvblJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYXNzZXJ0aW9uIHJlc3VsdCB0byByZXBvcnQuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25JZCAgYXNzZXJ0aW9uIGlkLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZSBhc3NlcnRpb24gcmVzdWx0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgcmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KFN0cmluZyBhc3NlcnRpb25JZCwgU3RyaW5nIHJlc3VsdCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgdGVzdCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IHJlcG9ydGVyLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgpOwotCi0gICAgLy8gU2V0IGFzc2VydGlvbiwgcmVzdWx0IGFuZCB0YXJnZXQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHByb2ZpbGVBcnRpZmFjdC5nZXRUZXN0QXNzZXJ0aW9uKGFzc2VydGlvbklkKSk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldFJlc3VsdChyZXN1bHQpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRFbnRyeShyZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRDdXJyZW50RW50cnkoKSk7Ci0KLSAgICAvLyBBZGQgaXQgdG8gdGhlIHJlcG9ydAotICAgIHJlcG9ydGVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhc3NlcnRpb24gcmVzdWx0IHRvIHJlcG9ydCB3aXRoIGFuIGVycm9yIGRldGFpbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uSWQgICAgICAgICAgYXNzZXJ0aW9uIGlkLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgICAgICAgICAgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxNZXNzYWdlIGFuIGVycm9yIGRldGFpbCBtZXNzYWdlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZEFzc2VydGlvblJlc3VsdCgKLSAgICBTdHJpbmcgYXNzZXJ0aW9uSWQsCi0gICAgU3RyaW5nIHJlc3VsdCwKLSAgICBTdHJpbmcgZmFpbHVyZURldGFpbE1lc3NhZ2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ29udmVydCBtZXNzYWdlIHRvIHZlY3RvcgotICAgIFZlY3RvciBmYWlsdXJlRGV0YWlsTGlzdCA9IG51bGw7Ci0gICAgaWYgKGZhaWx1cmVEZXRhaWxNZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgZmFpbHVyZURldGFpbExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBGYWlsdXJlRGV0YWlsIGZhaWx1cmVEZXRhaWwgPSByZXBvcnRlci5jcmVhdGVGYWlsdXJlRGV0YWlsKCk7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoZmFpbHVyZURldGFpbCk7Ci0gICAgfQotCi0gICAgLy8gQWRkIGFzc2VydGlvbiByZXN1bHQKLSAgICBhZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQsIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhc3NlcnRpb24gcmVzdWx0IHRvIHJlcG9ydC4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkICAgICAgICBhc3NlcnRpb24gaWQuCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICAgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxMaXN0ICBhIGxpc3Qgb2YgZXJyb3IgZGV0YWlsIG1lc3NhZ2VzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZEFzc2VydGlvblJlc3VsdCgKLSAgICBTdHJpbmcgYXNzZXJ0aW9uSWQsCi0gICAgU3RyaW5nIHJlc3VsdCwKLSAgICBWZWN0b3IgZmFpbHVyZURldGFpbExpc3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIHRlc3QgYXNzZXJ0aW9uIHJlc3VsdAotICAgIEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQgPSByZXBvcnRlci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLQotICAgIC8vIFNldCBhc3NlcnRpb24sIHJlc3VsdCBhbmQgdGFyZ2V0Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvbihwcm9maWxlQXJ0aWZhY3QuZ2V0VGVzdEFzc2VydGlvbihhc3NlcnRpb25JZCkpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRGYWlsdXJlRGV0YWlsTGlzdChmYWlsdXJlRGV0YWlsTGlzdCk7Ci0KLSAgICAvLyBBZGQgaXQgdG8gdGhlIHJlcG9ydAotICAgIHJlcG9ydGVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBtaXNzaW5nSW5wdXQgYXNzZXJ0aW9uIHJlc3VsdCB0byByZXBvcnQuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFueSBwcm9ibGVtIGFkZGluZyBtaXNzaW5nSW5wdXQgCi0gICAqIAkJIGFzc2VydGlvbiByZXN1bHQgdG8gcmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkTWlzc2luZ0lucHV0UmVzdWx0KFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgdGVzdCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IHJlcG9ydGVyLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgpOwotCi0gICAgLy8gU2V0IGFzc2VydGlvbiwgcmVzdWx0IGFuZCB0YXJnZXQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHRlc3RBc3NlcnRpb24pOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9NSVNTSU5HX0lOUFVUKTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotCi0gICAgLy8gQWRkIGl0IHRvIHRoZSByZXBvcnQKLSAgICByZXBvcnRlci5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvciNzZXRBbGxNaXNzaW5nSW5wdXQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWxsTWlzc2luZ0lucHV0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgcHJvZmlsZSBhcnRpZmFjdCBpcyBzZXQKLSAgICBpZiAocHJvZmlsZUFydGlmYWN0ICE9IG51bGwpCi0gICAgewotICAgICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uOwotICAKLSAgICAgIC8vIENyZWF0ZSBlbnRyeQotICAgICAgRW50cnkgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgICBlbnRyeS5zZXRBcnRpZmFjdE5hbWUodGhpcy5yZXBvcnRBcnRpZmFjdC5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSk7Ci0gIAotICAgICAgLy8gQWRkIGVudHJ5IHRvIGFydGlmYWN0Ci0gICAgICB0aGlzLnJlcG9ydEFydGlmYWN0LmFkZEVudHJ5KGVudHJ5KTsKLSAgCi0gICAgICAvLyBBZGQgZW50cnkgdG8gcmVwb3J0Ci0gICAgICB0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnRyeShlbnRyeSk7Ci0gIAotICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiB0ZXN0IGFzc2VydGlvbnMgZm9yIHRoZSBhcnRpZmFjdAotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwcm9maWxlQXJ0aWZhY3QuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0IG5leHQgdGVzdCBhc3NlcnRpb24KLSAgICAgICAgdGVzdEFzc2VydGlvbiA9IChUZXN0QXNzZXJ0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gIAotICAgICAgICAvLyBBZGQgbWlzc2luZ0lucHV0IHJlc3VsdAotICAgICAgICBpZiAodGVzdEFzc2VydGlvbi5pc0VuYWJsZWQoKSkKLSAgICAgICAgICBhZGRNaXNzaW5nSW5wdXRSZXN1bHQodGVzdEFzc2VydGlvbik7Ci0gICAgICB9Ci0gIAotICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgYXNzZXJ0aW9uIHRhcmdldAotICAgICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50RW50cnkoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGFsbCByZXN1bHRzIGZvciBhbiBlbnRyeSB0eXBlIHRvIG1pc3NpbmdJbnB1dC4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBhbiBFbnRyeVR5cGUgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhbnkgcHJvYmxlbSB3aGlsZSBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZSBlbnRyeVR5cGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbjsKLQotICAgIC8vIENyZWF0ZSBlbnRyeSAKLSAgICBFbnRyeSBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICBlbnRyeS5zZXRFbnRyeVR5cGUoZW50cnlUeXBlKTsKLSAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRCgiWyIgKyBlbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSArICJdIik7Ci0KLSAgICAvLyBBZGQgZW50cnkgdG8gYXJ0aWZhY3QKLSAgICB0aGlzLnJlcG9ydEFydGlmYWN0LmFkZEVudHJ5KGVudHJ5KTsKLQotICAgIC8vIEFkZCBlbnRyeSB0byByZXBvcnQKLSAgICB0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnRyeShlbnRyeSk7Ci0KLSAgICAvL3RyeSB7Ci0gICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiB0ZXN0IGFzc2VydGlvbnMgZm9yIHRoZSBhcnRpZmFjdAotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcHJvZmlsZUFydGlmYWN0LmdldFRlc3RBc3NlcnRpb25MaXN0KCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIC8vIEdldCBuZXh0IHRlc3QgYXNzZXJ0aW9uCi0gICAgICB0ZXN0QXNzZXJ0aW9uID0gKFRlc3RBc3NlcnRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmICh0ZXN0QXNzZXJ0aW9uLmlzRW5hYmxlZCgpCi0gICAgICAgICYmIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKHRlc3RBc3NlcnRpb24sIGVudHJ5KSkKLSAgICAgIHsKLSAgICAgICAgYWRkTWlzc2luZ0lucHV0UmVzdWx0KHRlc3RBc3NlcnRpb24pOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEluZGljYXRlIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0aGlzIGVudHJ5Ci0gICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50RW50cnkoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1Y2M2ZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnZlbG9wZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuUHJvZmlsZVZhbGlkYXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuRW52ZWxvcGVWYWxpZGF0b3JJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2UuTWVzc2FnZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaS5VRERJVmFsaWRhdG9ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFdTSUxEb2N1bWVudEZhY3RvcnkuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3I6IFBldGVyIEJyaXR0ZW5oYW0KLSAqLwotcHVibGljIGNsYXNzIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5SW1wbCBleHRlbmRzIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5Ci17Ci0gIHByaXZhdGUgc3RhdGljIE1hcCB2YWxpZGF0b3JSZWdpc3RyeTsKLQotICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkVG9WYWxpZGF0YXRvclJlZ2lzdHJ5KFN0cmluZyBhcnRpZmFjdE5hbWUsCi0gICAgICAgICAgQmFzZVZhbGlkYXRvciB2YWxpZGF0b3JDbGFzcykgewotICAgICAgaWYgKHZhbGlkYXRvclJlZ2lzdHJ5ID09IG51bGwpCi0gICAgICAgICAgdmFsaWRhdG9yUmVnaXN0cnkgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgdmFsaWRhdG9yUmVnaXN0cnkucHV0KGFydGlmYWN0TmFtZSwgdmFsaWRhdG9yQ2xhc3MpOwotICB9Ci0KLSAgcHVibGljIEJhc2VWYWxpZGF0b3IgZ2V0VmFsaWRhdG9yRm9yQXJ0aWZhY3QoU3RyaW5nIGFydGlmYWN0TmFtZSkgCi0gICAgICAgICAgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0gICAgICBpZiAodmFsaWRhdG9yUmVnaXN0cnkgPT0gbnVsbCkgewotICAgICAgICAgIEJhc2VWYWxpZGF0b3IgdmFsaWRhdG9yc1tdID0gV1NJVGVzdFRvb2xzUGx1Z2luLmdldFBsdWdpbigpLgotICAgICAgICAgICAgICAgICAgZ2V0QmFzZVZhbGlkYXRvcnMoKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgIGFkZFRvVmFsaWRhdGF0b3JSZWdpc3RyeSh2YWxpZGF0b3JzW2ldLmdldEFydGlmYWN0VHlwZSgpLAotICAgICAgICAgICAgICB2YWxpZGF0b3JzW2ldKTsKLSAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIHJldHVybiAoQmFzZVZhbGlkYXRvcikgdmFsaWRhdG9yUmVnaXN0cnkuZ2V0KGFydGlmYWN0TmFtZSk7Ci0gIH0KLSAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeSNuZXdVRERJVmFsaWRhdG9yKCkKLSAgICovCi0gIHB1YmxpYyBVRERJVmFsaWRhdG9yIG5ld1VERElWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgbmV3IFVEREkgdmFsaWRhdG9yIAotICAgIFVERElWYWxpZGF0b3IgdWRkaVZhbGlkYXRvciA9IG5ldyBVRERJVmFsaWRhdG9ySW1wbCgpOwotICAgIC8vIFJldHVybiB2YWxpZGF0b3IKLSAgICByZXR1cm4gdWRkaVZhbGlkYXRvcjsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5I25ld1dTRExWYWxpZGF0b3IoKQotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3IgbmV3V1NETFZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBuZXcgV1NETCB2YWxpZGF0b3IgCi0gICAgV1NETFZhbGlkYXRvciB3c2RsVmFsaWRhdG9yID0gbmV3IFdTRExWYWxpZGF0b3JJbXBsKCk7Ci0KLSAgICAvLyBSZXR1cm4gdmFsaWRhdG9yCi0gICAgcmV0dXJuIHdzZGxWYWxpZGF0b3I7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5I25ld01lc3NhZ2VWYWxpZGF0b3IoKQotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VWYWxpZGF0b3IgbmV3TWVzc2FnZVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBuZXcgbWVzc2FnZSB2YWxpZGF0b3IgCi0gICAgTWVzc2FnZVZhbGlkYXRvciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IE1lc3NhZ2VWYWxpZGF0b3JJbXBsKCk7Ci0gICAgLy8gUmV0dXJuIHZhbGlkYXRvcgotICAgIHJldHVybiBtZXNzYWdlVmFsaWRhdG9yOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeSNuZXdFbnZlbG9wZVZhbGlkYXRvcigpCi0gICAqLwotICBwdWJsaWMgRW52ZWxvcGVWYWxpZGF0b3IgbmV3RW52ZWxvcGVWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgbmV3IGVudmVsb3BlIHZhbGlkYXRvciAKLSAgICBFbnZlbG9wZVZhbGlkYXRvciBlbnZlbG9wZVZhbGlkYXRvciA9IG5ldyBFbnZlbG9wZVZhbGlkYXRvckltcGwoKTsKLSAgICAvLyBSZXR1cm4gdmFsaWRhdG9yCi0gICAgcmV0dXJuIGVudmVsb3BlVmFsaWRhdG9yOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQVAxOTIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MTFjOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLQotLyoqCi0gKiBBUDE5MjAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYW4gZW52ZWxvcGUgaW4gYSByZXNwb25zZSBtZXNzYWdlCi0gKiBjb250YWluaW5nIGEgc29hcDpGYXVsdCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkluIGEgZGVzY3JpcHRpb24sIGlmIGFuZCBvbmx5IGlmLCB0aGUgd3NkbDpvdXRwdXQKLSAqIGVsZW1lbnQgaXMgZGVzY3JpYmVkIHVzaW5nIFdTREwgTUlNRSBiaW5kaW5nLCB0aGVuIHRoZSBlbnZlbG9wZSBpbiB0aGUKLSAqIHJlc3BvbnNlIG1lc3NhZ2UgY2FuIGNvbnRhaW4gZmF1bHRzIHdpdGggYXR0YWNobWVudHMuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkyMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkyMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgCi0gICAgewotICAgICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBjaGVjayBmb3IgYSBmYXVsdCBlbGVtZW50IHdpdGhpbiB0aGUgbWVzc2FnZSAKLSAgICAgIGlmKChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSA9PSBudWxsKSB8fCAKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKS4KLSAgICAgICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSVRhZy5FTEVNX1NPQVBfRkFVTFQuZ2V0TmFtZXNwYWNlVVJJKCksIAotICAgICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0ZBVUxULmdldExvY2FsUGFydCgpKS5nZXRMZW5ndGgoKSAhPSAxKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVFVRVNUKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIC8vIElmIHRoZSBlbnZlbG9wZSBpbiBhIHJlc3BvbnNlIG1lc3NhZ2UgY29udGFpbnMgYSBmYXVsdCB3aXRoIGF0dGFjaG1lbnRzCi0gICAgICAvLyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpvdXRwdXQgZWxlbWVudCBpbiB0aGUgZGVzY3JpcHRpb24gaXMgbm90IAotICAgICAgLy8gZGVzY3JpYmVkIHVzaW5nIHRoZSBXU0RMIE1JTUUgYmluZGluZywgdGhlIGFzc2VydGlvbiBpcyBmYWlsZWQgIAotICAgICAgaWYgKChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCkuY291bnQoKSA+IDEpICYmCi0gICAgICAgICAgKGdldE11bHRpcGFydFJlbGF0ZWRCaW5kaW5ncyhiaW5kaW5nT3BlcmF0aW9uKSA9PSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgICB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgiVGhlIG1lc3NhZ2UgY29udGFpbnMgXCIiICsgCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5jb3VudCgpICsgIlwiIHBhcnQocykiLCAKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOyAKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIE11bHRpcGFydCByZWxhdGVkIGJpbmRpbmdzLCBpZiBkb2VzIG5vdCBmb3VuZCwgcmV0dXJucyBudWxsLgotICAgKiBAcGFyYW0gb3AgYmluZGluZyBvcGVyYXRpb24KLSAgICogQHJldHVybiBNdWx0aXBhcnQgcmVsYXRlZCBiaW5kaW5ncywgaWYgZG9lcyBub3QgZm91bmQsIHJldHVybnMgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgTUlNRU11bHRpcGFydFJlbGF0ZWQgZ2V0TXVsdGlwYXJ0UmVsYXRlZEJpbmRpbmdzKAotICAgICAgQmluZGluZ09wZXJhdGlvbiBvcCkgCi0gIHsKLSAgICAvLyBGaW5kaW5nIG9wZXJhdGlvbiBleHRlbnNpYmlsaXR5IGVsZW1zCi0gICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgIExpc3QgZXh0RWxlbXMgPSBvcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgLy8gY2hlY2sgbGlzdCBvbiBmaXJzdCBlbGVtZW50Ci0gICAgaWYoKGV4dEVsZW1zID09IG51bGwpIHx8IChleHRFbGVtcy5zaXplKCkgPT0gMCkgfHwgCi0gICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICByZXR1cm4gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7IAotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQVAxOTI4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NjVmY2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0NvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0NvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0VsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWxHcm91cDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU09iamVjdExpc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNQYXJ0aWNsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1Rlcm07Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRVV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBBUDE5MjgKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGUgY29udGFpbmluZyBhIFVSSSByZWZlcmVuY2UKLSAqIHRoYXQgaXMgdHlwZWQgdXNpbmcgdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SW4gYW4gZW52ZWxvcGUsIGEgVVJJIHJlZmVyZW5jZSB0aGF0IGlzIHR5cGVkIHVzaW5nCi0gKiB0aGUgcmVmOnN3YVJlZiBzY2hlbWEgdHlwZSByZXNvbHZlcyB0byBhIE1JTUUgcGFydCBpbiB0aGUgc2FtZSBtZXNzYWdlCi0gKiBhcyB0aGUgZW52ZWxvcGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkyOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkyOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoIWVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5pc01pbWVDb250ZW50KCkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICAvLyBnZXQgdGhlIHJyb3QgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IHJvb3QgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgIE1pbWVQYXJ0cyBtaW1lUGFydHMgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCk7Ci0KLSAgICAgIC8vIGdldCBhbiBvcGVyYXRpb24gbWF0Y2hlZCBmb3IgdGhlIG1lc3NhZ2UKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRPcGVyYXRpb25NYXRjaCgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksIHJvb3QpOwotIAotICAgICAgLy8gaWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBhbmQgbWVzc2FnZQotICAgICAgTGlzdCBleHRFbGVtczsKLSAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICAgIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUCi0gICAgICAgIC5lcXVhbHMoZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCkpKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIG1lc3NhZ2UgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGluIHRoZSBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGV4dEVsZW1zID09IG51bGwgfHwgZXh0RWxlbXMuc2l6ZSgpIDwgMSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gQ29sbGVjdGluZyB0aGUgbmFtZXMgb2Ygc2NoZW1hIGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQKLSAgICAgIC8vIHdpdGggdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUKLSAgICAgIExpc3Qgc3dhUmVmcyA9IGdldFN3YVJlZnMoKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1zLmdldCgwKSwgbWVzc2FnZSk7Ci0gICAgICAvLyBJZiBzdWNoIHNjaGVtYSBlbGVtZW50cyBhcmUgbm90IGZvdW5kLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoc3dhUmVmcy5pc0VtcHR5KCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBzY2hlbWEgZWxlbWVudCBuYW1lcwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzd2FSZWZzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBRTmFtZSBlbGVtTmFtZSA9IChRTmFtZSkgc3dhUmVmcy5nZXQoaSk7Ci0gICAgICAgIC8vIExvb2tpbmcgZm9yIHN1Y2ggZWxlbWVudHMgaW4gdGhlIHJvb3QgTUlNRSBwYXJ0Ci0gICAgICAgIE5vZGVMaXN0IGVsZW1zID0gcm9vdC5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgICAgZWxlbU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIGVsZW1OYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIHJlZjpzd2FSZWYgcmVmZXJlbmNlcwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVsZW1zLmdldExlbmd0aCgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIGVsZW0gPSBlbGVtcy5pdGVtKGopOwotICAgICAgICAgIC8vIEdldHRpbmcgYSB2YWx1ZSBvZiB0aGlzIHJlZmVyZW5jZQotICAgICAgICAgIFN0cmluZyByZWYgPSBlbGVtLmdldEZpcnN0Q2hpbGQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBlbGVtLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocmVmID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGVsZW1lbnQgIiArIGVsZW0uZ2V0Tm9kZU5hbWUoKQotICAgICAgICAgICAgICArICIgb2YgdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUgaXMgc3BlY2lmaWVkLCBidXQgaXRzIHZhdWxlIgotICAgICAgICAgICAgICArICIgaXMgaW52YWxpZC4iKTsKLSAgICAgICAgICAvLyBJZiB0aGUgVVJJIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlICJjaWQ6IiBjb250ZW50LWlkIHByZWZpeAotICAgICAgICAgIC8vIFRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFyZWYuc3RhcnRzV2l0aCgiY2lkOiIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgVVJJICIgKyByZWYKLSAgICAgICAgICAgICAgKyAiIG9mIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlIG11c3QgdXNlIHRoZSBjaWQ6IHByZWZpeC4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYm9vbGVhbiByZWZGb3VuZCA9IGZhbHNlOwotICAgICAgICAgIEl0ZXJhdG9yIGlNaW1lUGFydHMgPSBtaW1lUGFydHMuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBNSU1FIHBhcnRzIG9mIHRoZSBTT0FQIG1lc3NhZ2UKLSAgICAgICAgICB3aGlsZSAoaU1pbWVQYXJ0cy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgTWltZVBhcnQgbWltZVBhcnQgPSAoTWltZVBhcnQpaU1pbWVQYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHBhcnQncyBDb250ZW50LUlEIGhlYWRlcgotICAgICAgICAgICAgU3RyaW5nIGNpZCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKAotICAgICAgICAgICAgICAgIG1pbWVQYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgICBpZiAoY2lkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIElmIHRoZSBoZWFkZXIgdmFsdWUgZXF1YWxzIHRoZSByZWZlcmVuY2UgVVJJLAotICAgICAgICAgICAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQgaXMgZm91bmQKLSAgICAgICAgICAgICAgaWYgKGNpZC5lcXVhbHMoJzwnICsgcmVmLnN1YnN0cmluZyg0KSArICc+JykpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWZGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gSWYgdGhlIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0IGlzIG5vdCBmb3VuZAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFyZWZGb3VuZCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgU09BUCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4iCi0gICAgICAgICAgICAgICsgIiBhIE1JTUUgcGFydCB3aXRoIHRoZSA8IiArIHJlZi5zdWJzdHJpbmcoNCkgKyAiPiBDb250ZW50LUlELiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBuYW1lcyBvZiBzY2hlbWEgZWxlbWVudHMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHRoZSByZWY6c3dhUmVmCi0gICAqIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0gZXh0RWxlbSBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHN1Y2ggbmFtZXMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0U3dhUmVmcyhFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtLCBNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBMaXN0IHN3YVJlZnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgewotICAgICAgLy8gR2V0dGluZyB0aGUgcm9vdCBtaW1lOnBhcnQKLSAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICBpZiAobWltZVBhcnRzLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIC8vIEdldHRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBvZiB0aGUgZmlyc3QgbWltZTpwYXJ0Ci0gICAgICAgIExpc3QgZWxlbXMgPSAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KDApKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgTGlzdCBib3VuZFBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgTUlNRSBwYXJ0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGVsZW1zLnNpemUoKTsgayArKykKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1zLmdldChrKTsKLSAgICAgICAgICAvLyBJZiB0aGF0IGlzIGEgc29hcDpib2R5Ci0gICAgICAgICAgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpICYmIG1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHBhcnRzIHNwZWNpZmllZCBieSB0aGUgcGFydHMgYXR0cmlidXRlCi0gICAgICAgICAgICBMaXN0IGJvZHlQYXJ0cyA9ICgoU09BUEJvZHkpIGVsZW0pLmdldFBhcnRzKCk7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWVzc2FnZSBwYXJ0cyBib3VuZCBieSB0aGlzIHNvYXBiaW5kOmJvZHkKLSAgICAgICAgICAgIEl0ZXJhdG9yIGkgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIGkubmV4dCgpOwotICAgICAgICAgICAgICBpZiAoYm9keVBhcnRzID09IG51bGwgfHwgYm9keVBhcnRzLmNvbnRhaW5zKHBhcnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvdW5kUGFydHMuYWRkKHBhcnQpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGVsc2UgaWYgdGhhdCBpcyBhIHNvYXA6aGVhZGVyCi0gICAgICAgICAgZWxzZSBpZiAoZWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBRTmFtZSBtc2dOYW1lOwotICAgICAgICAgICAgU3RyaW5nIHBhcnROYW1lOwotICAgICAgICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTT0FQSGVhZGVyIGhlYWRlciA9IChTT0FQSGVhZGVyKSBlbGVtOwotICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgbXNnTmFtZSA9IGhlYWRlci5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgIHBhcnROYW1lID0gaGVhZGVyLmdldFBhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFdTREw0SiAxLjQgZG9lcyBub3QgcmVjb2duaXplIHNvYXA6aGVhZGVyIGVsZW1lbnRzIHRoYXQKLSAgICAgICAgICAgIC8vIGFyZSBlbmNsb3NlZCBpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQsIHNvIHVzaW5nIGEgd29ya2Fyb3VuZAotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbGVtZW50IGhlYWRlciA9Ci0gICAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgZWxlbWVudCdzIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgICAgICAgIFN0cmluZyBtc2dWYWwgPSBoZWFkZXIuZ2V0QXR0cmlidXRlKCJtZXNzYWdlIik7Ci0gICAgICAgICAgICAgIC8vIGZpbmRpbmcgdGhlIGNvbG9uIGRlbGltaXRlcgotICAgICAgICAgICAgICBpbnQgY29sb25Qb3MgPSBtc2dWYWwuaW5kZXhPZigiOiIpOwotICAgICAgICAgICAgICBTdHJpbmcgbnMgPSBudWxsOwotICAgICAgICAgICAgICAvLyBHZXR0aW5nIGEgbG9jYWwgcGFydAotICAgICAgICAgICAgICBTdHJpbmcgbHAgPSBjb2xvblBvcyA+IC0xID8gbXNnVmFsLnN1YnN0cmluZyhjb2xvblBvcyArIDEpIDogbXNnVmFsOwotICAgICAgICAgICAgICAvLyBJZiB0aGUgZGVsaW1pdGVyIGlzIGZvdW5kCi0gICAgICAgICAgICAgIGlmIChjb2xvblBvcyA+IC0xKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gUmV0cmlldmluZyBhIG5hbWVzcGFjZSBVUkkKLSAgICAgICAgICAgICAgICBucyA9IHZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKQotICAgICAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpLmdldE5hbWVzcGFjZShtc2dWYWwuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgbXNnTmFtZSA9IG5ldyBRTmFtZShucywgbHApOwotICAgICAgICAgICAgICBwYXJ0TmFtZSA9IGhlYWRlci5nZXRBdHRyaWJ1dGUoInBhcnQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIHJlZmVyZW5jZWQgYnkgdGhpcyBzb2FwYmluZDpoZWFkZXIgZWxlbWVudAotICAgICAgICAgICAgTWVzc2FnZSBtc2cgPSAKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCkuZ2V0TWVzc2FnZShtc2dOYW1lKTsKLSAgICAgICAgICAgIGlmIChtc2cgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBwYXJ0IHRvIHRoZSBsaXN0IG9mIGJvdW5kIHBhcnRzCi0gICAgICAgICAgICAgIFBhcnQgcGFydCA9IG1zZy5nZXRQYXJ0KHBhcnROYW1lKTsKLSAgICAgICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBib3VuZFBhcnRzLmFkZChwYXJ0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBbGwgdGhlIGJvdW5kIHBhcnRzIGZyb20gc29hcGJpbmQ6Ym9keSBhbmQgc29hcGJpbmQ6aGVhZGVyCi0gICAgICAgIC8vIGFyZSBjb2xsZWN0ZWQsIGZpbmRpbmcgc3dhUmVmIHJlZmVyZW5jZXMuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYm91bmRQYXJ0cy5zaXplKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBib3VuZFBhcnRzLmdldChpKTsKLSAgICAgICAgICBRTmFtZSByZWY7Ci0gICAgICAgICAgc2hvcnQgdHlwZTsKLSAgICAgICAgICAvLyBHZXR0aW5nIGVpdGhlciBwYXJ0J3MgZWxlbWVudCByZWZlcmVuY2Ugb3IgdHlwZSByZWZlcmVuY2UKLSAgICAgICAgICBpZiAoKHJlZiA9IHBhcnQuZ2V0VHlwZU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlID0gWFNDb25zdGFudHMuVFlQRV9ERUZJTklUSU9OOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICgocmVmID0gcGFydC5nZXRFbGVtZW50TmFtZSgpKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHR5cGUgPSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBUaGUgcGFydCBjb25hdGlucyBuZWl0aGVyIGVsZW1lbnQgbm9yIHR5cGUgYXR0cmlidXRlLAotICAgICAgICAgIC8vIHByb2NlZWRpbmcgd2l0aCB0aGUgbmV4dCBwYXJ0Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBzY2hlbWFzIGRlZmluZWQKLSAgICAgICAgICBNYXAgc2NoZW1hcyA9IHZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXRTY2hlbWFzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgc2NoZW1hcwotICAgICAgICAgIEl0ZXJhdG9yIGl0ID0gc2NoZW1hcy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNNb2RlbCB4c01vZGVsID0gKFhTTW9kZWwpIGl0Lm5leHQoKTsKLSAgICAgICAgICAgIFhTVHlwZURlZmluaXRpb24geHNUeXBlID0gbnVsbDsKLSAgICAgICAgICAgIC8vIEdldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcGFydCB0eXBlCi0gICAgICAgICAgICBpZiAodHlwZSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBHZXR0aW5nIHNjaGVtYSBlbGVtZW50Ci0gICAgICAgICAgICAgIFhTRWxlbWVudERlY2xhcmF0aW9uIGVsZW0gPSB4c01vZGVsLmdldEVsZW1lbnREZWNsYXJhdGlvbigKLSAgICAgICAgICAgICAgICByZWYuZ2V0TG9jYWxQYXJ0KCksIHJlZi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgICAgICAgIGlmIChlbGVtICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBHZXR0aW5nIGVsZW1lbnQncyB0eXBlCi0gICAgICAgICAgICAgICAgeHNUeXBlID0gZWxlbS5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgICAgICAgICAgIC8vIElmIGl0IGlzIHJlZjpzd2FSZWYKLSAgICAgICAgICAgICAgICBpZiAoV1NJQ29uc3RhbnRzLk5TX1VSSV9TV0FfUkVGLmVxdWFscyh4c1R5cGUuZ2V0TmFtZSgpKQotICAgICAgICAgICAgICAgICAgJiYgV1NJQ29uc3RhbnRzLlNDSEVNQV9UWVBFX1NXQV9SRUYuZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICB4c1R5cGUuZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIEFkZGluZyB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgc3dhUmVmcy5hZGQoCi0gICAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShlbGVtLmdldE5hbWVzcGFjZSgpLCBlbGVtLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB4c1R5cGUgPSB4c01vZGVsLmdldFR5cGVEZWZpbml0aW9uKAotICAgICAgICAgICAgICAgIHJlZi5nZXRMb2NhbFBhcnQoKSwgcmVmLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBlbGVtZW50IG5hbWVzLGFkZGluZyBlbGVtZW50IG5hbWVzIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICBzd2FSZWZzLmFkZEFsbChjb2xsZWN0U3dhUmVmcyh4c1R5cGUpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN3YVJlZnM7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgbmFtZXMgb2Ygc2NoZW1hIGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZgotICAgKiBzY2hlbWEgdHlwZS4KLSAgICogQHBhcmFtIHhzVHlwZSBhIHNjaGVtYSB0eXBlLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBuYW1lcyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBjb2xsZWN0U3dhUmVmcyhYU1R5cGVEZWZpbml0aW9uIHhzVHlwZSkKLSAgewotICAgIExpc3Qgc3dhUmVmcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoeHNUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbXBsZXggdHlwZQotICAgICAgaWYgKHhzVHlwZS5nZXRUeXBlQ2F0ZWdvcnkoKSA9PSBYU1R5cGVEZWZpbml0aW9uLkNPTVBMRVhfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNDb21wbGV4VHlwZURlZmluaXRpb24geHNDb21wbGV4VHlwZSA9Ci0gICAgICAgICAgKFhTQ29tcGxleFR5cGVEZWZpbml0aW9uKSB4c1R5cGU7Ci0gICAgICAgIC8vIElmIGl0IGNvbnRhaW5zIG1peGVkIGNvbnRleHQKLSAgICAgICAgaWYgKHhzQ29tcGxleFR5cGUuZ2V0UGFydGljbGUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gY29sbGVjdGluZyBlbGVtZW50IG5hbWVzIAotICAgICAgICAgIHN3YVJlZnMuYWRkQWxsKGNvbGxlY3RTd2FSZWZzKHhzQ29tcGxleFR5cGUuZ2V0UGFydGljbGUoKS5nZXRUZXJtKCkpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3dhUmVmczsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBuYW1lcyBvZiBzY2hlbWEgZWxlbWVudHMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHRoZSByZWY6c3dhUmVmCi0gICAqIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0gdGVybSBhIHNjaGVtYSB0ZXJtLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBuYW1lcyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBjb2xsZWN0U3dhUmVmcyhYU1Rlcm0gdGVybSkKLSAgewotICAgIExpc3Qgc3dhUmVmcyA9IG5ldyBBcnJheUxpc3QoKTsgCi0gICAgLy8gSWYgYSB0ZXJtIGlzIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24KLSAgICBpZiAodGVybS5nZXRUeXBlKCkgPT0gWFNDb25zdGFudHMuRUxFTUVOVF9ERUNMQVJBVElPTikKLSAgICB7Ci0gICAgICBYU0VsZW1lbnREZWNsYXJhdGlvbiBlbGVtID0gKFhTRWxlbWVudERlY2xhcmF0aW9uKSB0ZXJtOwotICAgICAgWFNUeXBlRGVmaW5pdGlvbiB4c1R5cGUgPSBlbGVtLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgICAvLyBJZiBlbGVtZW50J3MgdHlwZSBpcyByZWY6c3dhUmVmCi0gICAgICBpZiAoV1NJQ29uc3RhbnRzLk5TX1VSSV9TV0FfUkVGLmVxdWFscyh4c1R5cGUuZ2V0TmFtZXNwYWNlKCkpCi0gICAgICAgICYmIFdTSUNvbnN0YW50cy5TQ0hFTUFfVFlQRV9TV0FfUkVGLmVxdWFscyh4c1R5cGUuZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gQWRkIGVsZW1lbnQncyBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgICAgIHN3YVJlZnMuYWRkKAotICAgICAgICAgIG5ldyBRTmFtZShlbGVtLmdldE5hbWVzcGFjZSgpLCBlbGVtLmdldE5hbWUoKSkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBlbHNlIGNvbGxlY3RpbmcgZWxlbWVudCBuYW1lcyBmcm9tIGVsZW1lbnQncyB0eXBlCi0gICAgICAgIHN3YVJlZnMuYWRkQWxsKGNvbGxlY3RTd2FSZWZzKHhzVHlwZSkpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBlbHNlIGlmIGEgdGVybSBpcyBhIG1vZGVsIGdyb3VwCi0gICAgZWxzZSBpZih0ZXJtLmdldFR5cGUoKSA9PSBYU0NvbnN0YW50cy5NT0RFTF9HUk9VUCkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBQYXJ0aWNsZSBzY2hlbWEgY29tcG9uZW50cwotICAgICAgWFNPYmplY3RMaXN0IGxpc3QgPSAoKFhTTW9kZWxHcm91cCkgdGVybSkuZ2V0UGFydGljbGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgLy8gQ29sbGVjdGluZyBlbGVtZW50IG5hbWVzCi0gICAgICAgIHN3YVJlZnMuYWRkQWxsKGNvbGxlY3RTd2FSZWZzKCgoWFNQYXJ0aWNsZSkgbGlzdC5pdGVtKGkpKS5nZXRUZXJtKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN3YVJlZnM7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhNDY1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEwMDUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDUgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICAgIC8vIElmIHRoaXMgaXMgYSBmYXVsdCBtZXNhZ2UsIHRoZW4gaXQgaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvYykpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgc29hcCBib2R5IGVsZW1lbnQKLSAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuY29udGFpbnNTb2FwQm9keVdpdGhDaGlsZChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBQYXJzZSByZXF1ZXN0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvY1JlcXVlc3QgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBTdHJpbmcgaGVhZGVycyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5tYXRjaE9wZXJhdGlvbigKLSAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHJlZ2lzdHJ5KTsKLSAgICAgIGlmIChtYXRjaCA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBtYXRjaC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLy8gSXMgcnBjIHN0eWxlPwotICAgICAgaWYgKCFXU0lDb25zdGFudHMKLSAgICAgICAgLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQwotICAgICAgICAuZXF1YWxzKG1hdGNoLmdldE9wZXJhdGlvblN0eWxlKCkpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICBMaXN0IGV4dEVsZW1lbnRzID0gbnVsbDsKLQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgIGV4dEVsZW1lbnRzID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgICAgLy8gSXMgbWVzc2FnZSBSUEMtbGl0ZXJhbD8KLSAgICAgIGlmICghdmFsaWRhdG9yLmlzTGl0ZXJhbChleHRFbGVtZW50cykpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vR2V0IG1lc3NhZ2UKLQotICAgICAgLy8gR2V0cyBib2R5Ci0gICAgICBOb2RlTGlzdCBzb2FwQm9keUxpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0JPRFkpOwotICAgICAgaWYgKHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKSA9PSAwIHx8IHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKSA+IDEpCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vdCBhIGJvZHkgb3IgbW9yZSB0aGFuIG9uZSBib2RpZXMgaW4gdGhlIGVudmxvcGUuCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50IHNvYXBCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbSgwKTsKLQotICAgICAgLy8gRmluZCB3cmFwcGVyIGVsZW1lbnQgaW4gdGhlIGJvZHkKLSAgICAgIEVsZW1lbnQgd3JhcHBlckVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBCb2R5RWxlbSk7Ci0gICAgICBpZiAod3JhcHBlckVsZW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHdyYXBwZXJFbGVtZW50Ci0gICAgICAgIC5nZXRMb2NhbE5hbWUoKQotICAgICAgICAuZXF1YWxzKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlJlc3BvbnNlIikpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njk0ODY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEwMDcKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSwgaW4gdGhlIG1lc3NhZ2UgbG9nIGZpbGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RFREcyByZWxhdGluZyB0byBzb2FwOmhlYWRlciBvciBzb2FwOmJvZHkgZG9jdW1lbnRzLCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG1lc3NhZ2U6IG5vIERPQ1RZUEUgZWxlbWVudCBpcyBwcmVzZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDcoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUGFyc2UgbG9nIG1lc3NhZ2UgCi0gICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgaWYgKGRvYyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgLy8gZWxzZSBpZiB0aGUgbWVzc2FnZSBjb250YWlucyBhIERvY3VtZW50IFR5cGUgRGVjbGFyYXRpb24sIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgZWxzZSBpZiAoZG9jLmdldERvY3R5cGUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICB0ZXN0QXNzZXJ0aW9uLmdldEZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTIwMjM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEwMDguCi0gKiBNZXNzYWdlIGhhcyBwYXJ0IGFjY2Vzc29yIGVsZW1lbnRzIGZvciBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdmFsdWUsIGluIG5vIG5hbWVzcGFjZXMsIAotICogYnV0IHRoZSBjaGlsZHJlbiBvZiB0aGVzZSBhcmUgbmFtZXNwYWNlIHF1YWxpZmllZCB3aXRoIHRoZSBzYW1lIHRhcmdldE5hbWVzcGFjZSB3aXRoIHdoaWNoIAotICogdGhlaXIgdHlwZXMgYXJlIGRlZmluZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLQotICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtZXNzYWdlLCB0aGVuIHRocm93IGZhaWwgZXhjZXB0aW9uCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0KLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvYykpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUpOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHNvYXAgYm9keSBlbGVtZW50Ci0gICAgICBpZiAoIXRoaXMudmFsaWRhdG9yLmNvbnRhaW5zU29hcEJvZHlXaXRoQ2hpbGQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGFjdGlvbiA9Ci0gICAgICAgIHZhbGlkYXRvci5nZXRTb2FwQWN0aW9uKGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0KLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0gICAgICAvL0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVudHJ5Q29udGV4dC5nZXRBbmFseXplckNvbnRleHQoKS5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbnMoKVswXTsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLAotICAgICAgICAgIHZhbGlkYXRvcik7Ci0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gbWF0Y2guZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICAgIC8vIElzIHJwYyBzdHlsZT8KLSAgICAgIGlmICghV1NJQ29uc3RhbnRzCi0gICAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgICAgLmVxdWFscyhtYXRjaC5nZXRPcGVyYXRpb25TdHlsZSgpKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0KLSAgICAgIC8vIEdldHMgYm9keQotICAgICAgTm9kZUxpc3Qgc29hcEJvZHlMaXN0ID0KLSAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKTsKLSAgICAgIGlmIChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgewotICAgICAgICAvLyBUaGVyZSBpcyBub3QgYSBib2R5IG9yIG1vcmUgdGhhbiBvbmUgYm9kaWVzIGluIHRoZSBlbnZsb3BlLgotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgRWxlbWVudCBzb2FwQm9keUVsZW0gPSAoRWxlbWVudCkgc29hcEJvZHlMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIHJlc3VsdCA9IG51bGw7Ci0KLSAgICAgIC8vIEZpbmQgb3BlcmF0aW9uIGluIHRoZSBib2R5Ci0gICAgICBFbGVtZW50IHNvYXBPcGVyYXRpb24gPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBCb2R5RWxlbSk7Ci0gICAgICBpZiAoc29hcE9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBGaW5kIG9wZXJhdGlvbiBtZXNzYWdlIGFuZCBleHQuIGVsZW1lbnRzIGluIHRoZSBiaW5kaW5nCi0gICAgICBNZXNzYWdlIG9wZXJhdGlvbk1lc3NhZ2UgPSBudWxsOwotICAgICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0gICAgICBpZiAoTWVzc2FnZUVudHJ5Ci0gICAgICAgIC5UWVBFX1JFUVVFU1QKLSAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKSkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICBleHRFbGVtZW50cyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoTWVzc2FnZUVudHJ5Ci0gICAgICAgICAgLlRZUEVfUkVTUE9OU0UKLSAgICAgICAgICAuZXF1YWxzKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICAgIGV4dEVsZW1lbnRzID0KLSAgICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSXMgbWVzc2FnZSBSUEMtbGl0ZXJhbD8KLSAgICAgIGlmICghdmFsaWRhdG9yLmlzTGl0ZXJhbChleHRFbGVtZW50cykpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUpOwotCi0gICAgICAvLyBnZXRzIGZpcnN0IGNoaWxkIG9mIG1lc3NhZ2UKLSAgICAgIEVsZW1lbnQgc29hcE1lc3NhZ2VQYXJ0ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChzb2FwT3BlcmF0aW9uKTsKLSAgICAgIGlmIChzb2FwTWVzc2FnZVBhcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgd2hpbGUgKHNvYXBNZXNzYWdlUGFydCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHBhcnQgYWNjZXNzb3Igb3IgcmV0dXJuIGFyZSBpbiBubyBuYW1lc3BhY2UJCSAgICAJCQotCi0gICAgICAgIGlmIChzb2FwTWVzc2FnZVBhcnQuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbAotICAgICAgICAgIHx8ICIiLmVxdWFscyhzb2FwTWVzc2FnZVBhcnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICAgIGNoZWNrIHdoZXRoZXIgY2hpbGRyZW4gYXJlIG5hbWVzcGFjZSBxdWFsaWZpZWQgCi0gICAgICAgIC8vICB3aXRoIHRoZSBzYW1lIHRhcmdldE5hbWVzcGFjZSB3aXRoIHdoaWNoIHRoZWlyIHR5cGVzIGFyZSBkZWZpbmVkCi0gICAgICAgIFN0cmluZyB0eXBlc1RhcmdldE5TID0KLSAgICAgICAgICBnZXRUeXBlTlMob3BlcmF0aW9uTWVzc2FnZSwgc29hcE1lc3NhZ2VQYXJ0LmdldExvY2FsTmFtZSgpKTsKLQotICAgICAgICBpZiAodHlwZXNUYXJnZXROUyA9PSBudWxsKQotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgaWYgKCFjaGVja0NoaWxkcmVuTmFtZXNwYWNlKHNvYXBNZXNzYWdlUGFydCwgdHlwZXNUYXJnZXROUykpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgc29hcE1lc3NhZ2VQYXJ0ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoc29hcE1lc3NhZ2VQYXJ0KTsKLSAgICAgIH0KLQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBpZiAoZS5nZXRNZXNzYWdlKCkgIT0gbnVsbCAmJiBlLmdldE1lc3NhZ2UoKS5sZW5ndGgoKSA+IDApCi0gICAgICAgIHJlc3VsdCA9IGUuZ2V0TWVzc2FnZSgpOwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvblBhc3NFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChudWxsLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHBhcnQgdHlwZSBOUy4KLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogQHBhcmFtIHBhcnROYW1lCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRUeXBlTlMoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgcGFydE5hbWUpCi0gIHsKLSAgICBQYXJ0IHBhcnQgPSBtZXNzYWdlLmdldFBhcnQocGFydE5hbWUpOwotICAgIGlmIChwYXJ0ID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcGFydC5nZXRUeXBlTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBjaGlsZHJlbiBlbGVtZW50cycgbmFtZXNwYWNlLgotICAgKiBAcGFyYW0gbm9kZQotICAgKiBAcGFyYW0gdHlwZXNUYXJnZXROUwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2hpbGRyZW5OYW1lc3BhY2UoRWxlbWVudCBub2RlLCBTdHJpbmcgdHlwZXNUYXJnZXROUykKLSAgewotICAgIE5vZGVMaXN0IHBhcnRzID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IHBhcnQgPSAoRWxlbWVudCkgcGFydHMuaXRlbShpKTsKLSAgICAgIGlmICghdHlwZXNUYXJnZXROUy5lcXVhbHMocGFydC5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmICghY2hlY2tDaGlsZHJlbk5hbWVzcGFjZShwYXJ0LCB0eXBlc1RhcmdldE5TKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZTQwMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTAwOS4KLSAqIE1lc3NhZ2UgaW5jbHVkZXMgYWxsIHNvYXBiaW5kOmhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSB3c2RsOmlucHV0IAotICogKGlmIHJlcXVlc3QpIG9yIHdzZGw6b3V0cHV0IChpZiByZXNwb25zZSkgb2YgdGhlIG9wZXJhdGlvbiByZWZlcnJlZCAKLSAqIHRvIGJ5IGl0cyB3c2RsOmJpbmRpbmcsIGFuZCBtYXkgYWxzbyBpbmNsdWRlIGhlYWRlcnMgdGhhdCB3ZXJlIG5vdCBzcGVjaWZpZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDkgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDkoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBQYXJzZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICBpZiAoZG9jID09IG51bGwgfHwgZG9jUmVxdWVzdCA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHNvYXAgYm9keSBlbGVtZW50Ci0gICAgICBpZiAoIXRoaXMudmFsaWRhdG9yLmNvbnRhaW5zU29hcEJvZHlXaXRoQ2hpbGQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzRmF1bHQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBTdHJpbmcgaGVhZGVycyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5tYXRjaE9wZXJhdGlvbigKLSAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHJlZ2lzdHJ5KTsKLQotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXdheSBvcGVyYXRpb24gYW5kIHdlIGFyZSBwcm9jZXNzaW5nIGEgcmVzcG9uc2UsIHRoZW4gc2V0IHJlc3VsdCB0byBub3RBcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbgotICAgICAgICAuZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgLmdldFN0eWxlKCkKLSAgICAgICAgLmVxdWFscyhPcGVyYXRpb25UeXBlLk9ORV9XQVkpCi0gICAgICAgICYmIChlbnRyeUNvbnRleHQKLSAgICAgICAgICAuZ2V0TWVzc2FnZUVudHJ5KCkKLSAgICAgICAgICAuZ2V0VHlwZSgpCi0gICAgICAgICAgLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBmaW5kIGJvZHkKLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICBpZiAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDAgfHwgc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbm90IGEgYm9keSBvciBtb3JlIHRoYW4gb25lIGJvZGllcyBpbiB0aGUgZW52bG9wZS4KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIC8vIGZpbmQgaGVhZGVycwotICAgICAgTm9kZUxpc3Qgc29hcEhlYWRlcnMgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0hFQURFUi5nZXROYW1lc3BhY2VVUkkoKSwKLSAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0hFQURFUi5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICAgIC8vZmluZCBhbGwgb3BlcmF0aW9uCi0gICAgICAvL0VsZW1lbnQgc29hcE9wZXJhdGlvbiA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoc29hcEJvZHlFbGVtKTsKLQotICAgICAgLy8gZ2V0cyBzb2FwYmluZDpoZWFkZXJzCi0gICAgICBMaXN0IGJpbmRpbmdIZWFkZXJzID0gbnVsbDsKLSAgICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAgIC5nZXRUeXBlKCkKLSAgICAgICAgLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICBiaW5kaW5nSGVhZGVycyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAgICAgLmdldFR5cGUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgICAgICBiaW5kaW5nSGVhZGVycyA9Ci0gICAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChiaW5kaW5nSGVhZGVycyA9PSBudWxsIHx8IGJpbmRpbmdIZWFkZXJzLnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGJpbmRpbmdIZWFkZXJzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBPYmplY3QgYmluZGluZ0hlYWRlciA9IGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdIZWFkZXIgaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZmluZCBzb2FwYmluZDpoZWFkZXIgaW4gU09BUCBtZXNzYWdlCi0gICAgICAgICAgaWYgKCFpc0JpbmRpbmdIZWFkZXJJblNPQVBNZXNzYWdlKGVudHJ5Q29udGV4dCwKLSAgICAgICAgICAgIHNvYXBIZWFkZXJzLAotICAgICAgICAgICAgKFNPQVBIZWFkZXIpIGJpbmRpbmdIZWFkZXIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaWYgKGUuZ2V0TWVzc2FnZSgpICE9IG51bGwgJiYgZS5nZXRNZXNzYWdlKCkubGVuZ3RoKCkgPiAwKQotICAgICAgICByZXN1bHQgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgewotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwobnVsbCwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgKiBDaGVja3Mgd2hldGhlciBzcGVjaWZpZWQgU09BUEhlYWRlciBpcyBpbiB0aGUgU09BUE1lc3NhZ2UuCi0gICogQHBhcmFtIHNvYXBIZWFkZXJMaXN0Ci0gICogQHBhcmFtIFNPQVBIZWFkZXIKLSAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzQmluZGluZ0hlYWRlckluU09BUE1lc3NhZ2UoCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCwKLSAgICBOb2RlTGlzdCBzb2FwSGVhZGVycywKLSAgICBTT0FQSGVhZGVyIGJpbmRpbmdIZWFkZXIpCi0gIHsKLQotICAgIE1lc3NhZ2UgbXNnID0gZ2V0TWVzc2FnZUJ5UU5hbWUoZW50cnlDb250ZXh0LCBiaW5kaW5nSGVhZGVyLmdldE1lc3NhZ2UoKSk7Ci0gICAgaWYgKG1zZyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUGFydCBwYXJ0ID0gbXNnLmdldFBhcnQoYmluZGluZ0hlYWRlci5nZXRQYXJ0KCkpOwotICAgIGlmIChwYXJ0ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBRTmFtZSBwYXJ0RWxlbWVudE5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCk7Ci0gICAgUU5hbWUgcGFydFR5cGVOYW1lID0gcGFydC5nZXRUeXBlTmFtZSgpOwotCi0gICAgaWYgKHBhcnRUeXBlTmFtZSA9PSBudWxsICYmIHBhcnRFbGVtZW50TmFtZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNvYXBIZWFkZXJzID09IG51bGwgfHwgc29hcEhlYWRlcnMuZ2V0TGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFZlY3RvciBoZWFkZXJzTGlzdCA9Ci0gICAgICBYTUxVdGlscy5nZXRDaGlsZEVsZW1lbnRzKChFbGVtZW50KSBzb2FwSGVhZGVycy5pdGVtKDApKTsKLQotICAgIGZvciAoaW50IGluZGV4SGVhZGVyID0gMDsKLSAgICAgIGluZGV4SGVhZGVyIDwgaGVhZGVyc0xpc3Quc2l6ZSgpOwotICAgICAgaW5kZXhIZWFkZXIrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IHNvYXBIZWFkZXJQYXJ0ID0gKEVsZW1lbnQpIGhlYWRlcnNMaXN0LmdldChpbmRleEhlYWRlcik7Ci0gICAgICBpZiAoc29hcEhlYWRlclBhcnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgUU5hbWUgc29hcEhlYWRlclBhcnRRTmFtZSA9Ci0gICAgICAgICAgbmV3IFFOYW1lKAotICAgICAgICAgICAgc29hcEhlYWRlclBhcnQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICBzb2FwSGVhZGVyUGFydC5nZXRMb2NhbE5hbWUoKSk7Ci0gICAgICAgIGlmICgocGFydFR5cGVOYW1lICE9IG51bGwKLSAgICAgICAgICAmJiBwYXJ0VHlwZU5hbWUuZXF1YWxzKHNvYXBIZWFkZXJQYXJ0UU5hbWUpKQotICAgICAgICAgIHx8IChwYXJ0RWxlbWVudE5hbWUgIT0gbnVsbAotICAgICAgICAgICAgJiYgcGFydEVsZW1lbnROYW1lLmVxdWFscyhzb2FwSGVhZGVyUGFydFFOYW1lKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIG1lc3NhZ2UgYnkgUU5hbWUuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQKLSAgICogQHBhcmFtIG1lc3NhZ2VOYW1lCi0gICAqIEByZXR1cm4gTWVzc2FnZQotICAgKi8KLSAgcHJpdmF0ZSBNZXNzYWdlIGdldE1lc3NhZ2VCeVFOYW1lKAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgUU5hbWUgbWVzc2FnZU5hbWUpCi0gIHsKLSAgICBEZWZpbml0aW9uW10gZGVmcyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb25zKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWZzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbXNnID0gZGVmc1tpXS5nZXRNZXNzYWdlKG1lc3NhZ2VOYW1lKTsKLSAgICAgIGlmIChtc2cgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIG1zZzsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTM3YWI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEJQMTAxMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAxMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAxMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUT0RPIG5lZWQgdG8gaGFuZGxlIHNvYXAgd2l0aCBhdHRhY2htZW50cwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5pc01pbWVDb250ZW50KCkpCi0gICAgICAJIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAgICAKLSAgICAgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCk7Ci0KLSAgICAgIC8vIGdldCBzb2FwIG1lc3NhZ2UgY2hpbGQgbmFtZQotICAgICAgLy8gR2V0IHRoZSBET00gY29udGVudHMgb2YgdGhlIG1lc3NhZ2Ugc29hcDpib2R5IChpZiBub24tZW1wdHkpCi0gICAgICBEb2N1bWVudCBtZXNzYWdlRG9jID0gbnVsbDsKLQotICAgICAgUU5hbWUgbWVzc2FnZVBhcnRFbGVtZW50UU5hbWUgPSBudWxsOwotCi0gICAgICBpZiAoIWVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZURvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgICAvL21lc3NhZ2VEb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLCAKLSAgICAgICAgLy8JV1NJUHJvcGVydGllcy5ERUZfU09BUF9TQ0hFTUEpOwotICAgICAgICAvLyBnZXQgc29hcCBvcGVyYXRpb24gbmFtZSBmcm9tIHRoZSBzb2FwOmJvZHkKLQotICAgICAgICAvLyBOT1RFOiBnZXRTb2FwQm9keUNoaWxkKCkgbWF5IHJldHVybiBudWxsLCBpZiB0aGUgc29hcDpib2R5IGRpZCBub3QgY29udGFpbiBhbnkgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgRWxlbWVudCBzb2FwTWVzc2FnZUVsZW1lbnQgPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChtZXNzYWdlRG9jKTsKLQotICAgICAgICAvLyBmb3IgZG9jLWxpdC4uLiBmaW5kIHRoZSB3c2RsOnBhcnQgZnJvbSBvbmUgb2YgdGhlIHNwZWNpZmllZCBvcGVyYXRpb25zIHRoYXQgaGFzIAotICAgICAgICAvLyB0aGUgc29hcCBlbGVtZW50IHVzZWQgaW4gdGhlIG1lc3NhZ2UuICAgICAgCi0gICAgICAgIC8vIHdlIGFyZSBsb29raW5nIGZvciBhIHBhcnQgd2l0aCBhbiBlbGVtZW50IGF0dHJpYiB2YWwgbWF0Y2hpbmcgdGhlIHNvYXAgbWVzc2FnZSBlbGVtZW50Ci0gICAgICAgIGlmIChzb2FwTWVzc2FnZUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIG1lc3NhZ2VQYXJ0RWxlbWVudFFOYW1lID0KLSAgICAgICAgICAgIG5ldyBRTmFtZSgKLSAgICAgICAgICAgICAgc29hcE1lc3NhZ2VFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICgobWVzc2FnZURvYyA9PSBudWxsKSB8fCB0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KG1lc3NhZ2VEb2MpKQotICAgICAgewotICAgICAgICAvLyBlbXB0eSBtZXNzYWdlcyBhbmQgZmF1bHQgbWVzc2FnZXMgZG8gbm90IHF1YWxpZnkgZm9yIHRoaXMgVEEKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gbG9vayBmb3IgbWF0Y2gocykgaW4gZG9jIG9wZXJhdGlvbnMKLSAgICAgIC8vIGlmIGZvdW5kLCB3ZSdyZSBkb25lLCBlbHNlCi0gICAgICAvLyBsb29rIGZvciBtYXRjaChzKSBpbiBycGMgb3BlcmF0aW9ucwotCi0gICAgICAvKiBEb2MtbGl0IAotICAgICAgICogZ2V0IGxpc3Qgb2Ygb3BlcmF0aW9ucyAoZnJvbSBjYW5kaWRhdGVzKSBmb3Igd2hpY2ggdGhlIGZpcnN0IHNvYXA6Ym9keSBjaGlsZCBRTmFtZSBpcyB0aGUKLSAgICAgICAqIDxwYXJ0IGVsZW1lbnQ9Ii4uLiI+IHZhbHVlIG9mIHRoYXQgb3BlcmF0aW9uJ3MgPHdzZGw6aW5wdXQ+IG9yIDx3c2RsOm91dHB1dD4gZWxlbWVudCAoZGVwZW5kaW5nCi0gICAgICAgKiBvbiB3aGV0aGVyIG1lc3NhZ2UgaXMgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2UpLgotICAgICAgICovCi0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBkb2NCaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgIHZhbGlkYXRvci5nZXRNYXRjaGluZ0JpbmRpbmdPcHMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICBiaW5kaW5ncyk7Ci0gICAgICAvLyBsaXN0IG9mIG9wZXJhdGlvbnMgdGhhdCBtYXRjaCB0aGUgPHdzZGw6aW5wdXQ+IG9yIDx3c2RsOm91dHB1dD4gKGRlcGVuZGluZyBvbiBlbnRyeVR5cGUpCi0gICAgICAvLyBmb3IgcGFydCBlbGVtZW50PSIuLi4iCi0gICAgICAvLyAoSVNTVUU6IHdoYXQgYWJvdXQgcGFydCB0eXBlPSIuLi4iPykKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBwb3RlbnRpYWxEb2NMaXRPcHMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0gICAgICBpZiAocG90ZW50aWFsRG9jTGl0T3BzLmxlbmd0aCAhPSAwKQotICAgICAgewotICAgICAgICAvLyBmb3VuZCBhdCBsZWFzdCBvbmUgZG9jIGxpdCBtYXRjaAotCi0gICAgICAgIC8vICoqKiBOb3cgd2Uga25vdyBpdCdzIGRvY3VtZW50LWxpdGVyYWwsIHNjaGVtYS12YWxpZGF0ZSB0aGUgU09BUCBwYXlsb2FkIGFjY29yZGluZ2x5ICAgICAgICAgICAgCQkKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5tZXNzYWdlSXNEb2NMaXRTY2hlbWFWYWxpZChlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvKiBzb2FwIG1lc3NhZ2UgaXMgbm90IGRvYy1saXQgc28gdHJ5IDoKLSAgICAgICAqIFJwYy1saXQKLSAgICAgICAqLwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgYmluZGluZ3MpOwotCi0gICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW4gb3BlcmF0aW9uIG1hdGNoCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIHJjcE9wTWF0Y2ggPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRPcGVyYXRpb25NYXRjaCgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlRG9jLAotICAgICAgICAgIHJwY0JpbmRpbmdPcGVyYXRpb25zKTsKLSAgICAgIGlmIChyY3BPcE1hdGNoICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgcGFydHMgbWF0Y2gKLSAgICAgICAgcmNwT3BNYXRjaCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCgKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICAgICAgbWVzc2FnZURvYywKLSAgICAgICAgICAgIHJwY0JpbmRpbmdPcGVyYXRpb25zKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHJjcE9wTWF0Y2ggPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy9ub3QgbWF0Y2hlZCB3aXRoIHJwYyBlaXRoZXIuIFByZXBhcmUgYXNzZXJ0aW9uIGZhaWx1cmUuCi0gICAgICAgIFN0cmluZ0J1ZmZlciBycGNPcGVyYXRpb25MaXN0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJwY0JpbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgcnBjT3BlcmF0aW9uTGlzdC5hcHBlbmQocnBjQmluZGluZ09wZXJhdGlvbnNbaV0udG9TdHJpbmcoKSArICJcbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nQnVmZmVyIGRvY09wZXJhdGlvbkxpc3QgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZG9jQmluZGluZ09wZXJhdGlvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBkb2NPcGVyYXRpb25MaXN0LmFwcGVuZChkb2NCaW5kaW5nT3BlcmF0aW9uc1tpXS50b1N0cmluZygpICsgIlxuIik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAiLS1NRVNTQUdFOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgICArICJcbi0tQ0FORElEQVRFIFJQQyBTVFlMRSBPUEVSQVRJT05TICgiCi0gICAgICAgICAgICArIChycGNCaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggIT0gMAotICAgICAgICAgICAgICA/IChycGNCaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggKyAiKTpcbiIgKyBycGNPcGVyYXRpb25MaXN0KQotICAgICAgICAgICAgICA6ICJOT05FKSIpCi0gICAgICAgICAgICArICJcbi0tQ0FORElEQVRFIERPQ1VNRU5UIFNUWUxFIE9QRVJBVElPTlMgKCIKLSAgICAgICAgICAgICsgKGRvY0JpbmRpbmdPcGVyYXRpb25zLmxlbmd0aCAhPSAwCi0gICAgICAgICAgICAgID8gKGRvY0JpbmRpbmdPcGVyYXRpb25zLmxlbmd0aCArICIpOlxuIiArIGRvY09wZXJhdGlvbkxpc3QpCi0gICAgICAgICAgICAgIDogIk5PTkUpIikpOwotCi0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNWQ0ZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEwMTIuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMTIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMTIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RW52ZWxvcGU+IGVsZW1lbnRzOgotICAgICAgLy8gKE5vdGU6IHNpbmNlIHRoaXMgaXMgYSBTb2FwIG1lc3NhZ2Ugd2UgZXhwZWN0IGV4YWN0bHkgb25lIHNvYXAgZW52ZWxvcGUsIGJ1dCB3ZSBkbyBub3QgYXNzdW1lIGl0KS4KLSAgICAgIERvY3VtZW50IHJlcXVlc3REb2MgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0KLSAgICAgIC8vIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHJlcXVlc3REb2MgPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgRWxlbWVudCBlbnZFbGVtID0gcmVxdWVzdERvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIC8vTm9kZUxpc3Qgc29hcEVudkxpc3QgPSByZXF1ZXN0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiRW52ZWxvcGUiKTsKLQotICAgICAgLy8gSWYgdGhlIGRvY3VtZW50IGVsZW1lbnQgdGFnIG5hbWUgaXMgbm90IEVudmVsb3BlCi0gICAgICAvLyBvciB0aGUgbmFtZXNwYWNlIGlzIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvCi0gICAgICBpZiAoIWVudkVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSkKLSAgICAgICAgfHwgZW52RWxlbS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQKSkKLSAgICAgICAgLy8gUmVxdWVzdCBjb250YWlucyBwcm9wZXIgc29hcCBFbnZlbG9wZSBlbGVtZW50Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIHdlIGV4cGVjdCBhIFNvYXAgRmF1bHQgYXMgYSByZXNwb25zZQkKLSAgICAgIERvY3VtZW50IHJlc3BvbnNlRG9jID0KLSAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldFJlc3BvbnNlKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIE5vZGVMaXN0IHNvYXBGYXVsdExpc3QgPQotICAgICAgICByZXNwb25zZURvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICAiRmF1bHQiKTsKLSAgICAgIC8vIEFERCBleHRyYSBjaGVjayBoZXJlIHRoYXQgdGhlIDxzb2FwOkZhdWx0PiBpcyBhIGNoaWxkIG9mIDxzb2FwOkVudmVsb3BlPiA/PwkJICAgICAgCQkJCQotICAgICAgaWYgKChzb2FwRmF1bHRMaXN0ID09IG51bGwpIHx8IChzb2FwRmF1bHRMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgewotICAgICAgICAvLyBObyBTb2FwIGZhdWx0IGZvdW5kLgotICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkIChBREQgaGlnaGxpZ2h0IHRoZSBjaGlsZCBoZXJlID8pCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICItLS0gUkVRVUVTVDpcbiIKLSAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgICsgIlxuLS0tIFJFU1BPTlNFOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjZmOGViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0KLQotLyoqCi0gKiBCUDEwMTMuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMTMgZXh0ZW5kcyBCUDEwMTEKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAxMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMzEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiZGFmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi0KLS8qKgotICogQlAxMDMxLgotICogCi0gKiBAYXV0aG9yOiBHcmFoYW0gVHVycmVsbCwgSUJNIFVLCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMzEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMzEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRG9jdW1lbnQgZG9jOwotICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgICAvLyBvciBtZXNzYWdlIGlzIG1lcHR5IG9yIGludmFsaWQKLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgICAgICB8fCAoZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuaXNGYXVsdChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBOb2RlTGlzdCBmYXVsdENvZGVzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmYXVsdGNvZGUiKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF1bHRDb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlTGlzdCBmYXVsdENvZGVOb2RlcyA9IChmYXVsdENvZGVzLml0ZW0oaSkpLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmYXVsdENvZGVOb2Rlcy5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGZhdWx0Q29kZU5vZGVzLml0ZW0oaikgaW5zdGFuY2VvZiBUZXh0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFRleHQgZmF1bHRDb2RlVGV4dCA9IChUZXh0KSBmYXVsdENvZGVOb2Rlcy5pdGVtKGopOwotICAgICAgICAgICAgaWYgKGZhdWx0Q29kZVRleHQuZ2V0RGF0YSgpLmluZGV4T2YoJy4nKSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgIC8vIGRvdHRlZCBub3RhdGlvbiB1c2VkLgotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgLy8gbm8gZG90dGVkIG5vdGF0aW9uIHVzZWQgaW4gYSBmYXVsdGNvZGUgZWxlbWVudAotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzQxMzA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotCi0KLS8qKgotICogQlAxMDMyCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBzb2FwOkVudmVsb3BlLCBzb2FwOkhlYWRlciwgYW5kIHNvYXA6Qm9keSBlbGVtZW50cyBkbyBub3QgaGF2ZSBhbnkgYXR0cmlidXRlcyBpbiB0aGUgbmFtZXNwYWNlICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDMyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDMyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIG1lc3NhZ2UgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSByb290IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgLy8gQXNzdW1pbmcgdGhhdCByb290IGVsZW1lbnQgc2hvdWxkIGJlIHNvYXA6RW52ZWxvcGUKLSAgICAgIC8vIElmIG5vdCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fRU5WRUxPUEUpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBsb29raW5nIGZvciBhbnkgYXR0cmlidXRlIG9mIHNvYXA6RW52ZWxvcGUgaW4gdGhlIG5hbWVzcGFjZQotICAgICAgLy8gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIgotICAgICAgLy8gSWYgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIEF0dHIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LmdldEF0dHJpYnV0ZXMoKSk7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigic29hcDpFbnZlbG9wZSBhdHRyaWJ1dGUgbmFtZSBpcyAiCi0gICAgICAgICAgKyBhdHRyLmdldE5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGNoaWxkIG9mIHNvYXA6RW52ZWxvcGUKLSAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpIZWFkZXIKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwKLSAgICAgICAgJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0hFQURFUikpCi0gICAgICB7Ci0gICAgICAgIC8vIGxvb2tpbmcgZm9yIGFueSBhdHRyaWJ1dGUgb2Ygc29hcDpIZWFkZXIgaW4gdGhlIG5hbWVzcGFjZQotICAgICAgICAvLyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAgICAgIC8vIElmIGF0IGxlYXN0IG9uZSBhdHRyaWJ1dGUgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgICBpZiAoYXR0ciAhPSBudWxsKQotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJzb2FwOkhlYWRlciBhdHRyaWJ1dGUgbmFtZSBpcyAiCi0gICAgICAgICAgICArIGF0dHIuZ2V0TmFtZSgpKTsKLQotICAgICAgICAvLyBNb3ZpbmcgdG8gdGhlIG5leHQgc29hcDpFbnZlbG9wZSBjaGlsZAotICAgICAgICBlbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoZWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBzb2FwOkJvZHkKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwKLSAgICAgICAgJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0JPRFkpKQotICAgICAgewotICAgICAgICAvLyBsb29raW5nIGZvciBhbnkgYXR0cmlidXRlIG9mIHNvYXA6Qm9keSBpbiB0aGUgbmFtZXNwYWNlCi0gICAgICAgIC8vICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIKLSAgICAgICAgLy8gSWYgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LmdldEF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIGlmIChhdHRyICE9IG51bGwpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInNvYXA6Qm9keSBhdHRyaWJ1dGUgbmFtZSBpcyAiCi0gICAgICAgICAgICArIGF0dHIuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogTG9va3MgZm9yIGFuIGF0dHJpYnV0ZSB0aGF0IGlzIGluIHRoZSBuYW1lc3BhY2UKLSAgICogaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8KLSAgICogQHBhcmFtIGF0dHJzIGEgY29sbGVjdGlvbiBvZiBhdHRyaWJ1dGVzCi0gICAqIEByZXR1cm4gYW4gYXR0cmlidXRlIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlIG9yIG51bGwKLSAgICovCi0gIHByaXZhdGUgQXR0ciBnZXRBdHRyaWJ1dGUoTmFtZWROb2RlTWFwIGF0dHJzKQotICB7Ci0gICAgQXR0ciByZXQgPSBudWxsOwotICAgIGlmIChhdHRycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBBdHRyIGF0dHIgPSAoQXR0cikgYXR0cnMuaXRlbShpKTsKLSAgICAgICAgaWYgKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbAotICAgICAgICAgICYmIGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXQgPSBhdHRyOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmVjOGExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTAzMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgU09BUCBlbnZlbG9wZSBkb2VzIG5vdCBjb250YWluIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24geG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMzMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMzMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIG1lc3NhZ2UgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSByb290IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgZWxlbSA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIC8vIElmIGl0IGlzIG5vdCB0aGUgc29hcDpFbnZlbG9wZSwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFlbGVtLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVApCi0gICAgICAgIHx8ICFlbGVtLmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fRU5WRUxPUEUpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGUgZW52ZWxvcGUgY29udGFpbnMgdGhlIHhtbG5zOnhtbCBuYW1lc3BhY2UgZGVjbGFyYXRpb24sCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgU3RyaW5nIGluY29ycmVjdEVsZW1lbnROYW1lID0gZ2V0SW5jb3JyZWN0RWxlbWVudE5hbWUoZWxlbSk7Ci0gICAgICBpZiAoaW5jb3JyZWN0RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBuYW1lIG9mIGFuIGVsZW1lbnQgY29udGFpbmluZyAiCi0gICAgICAgICAgKyAic3VjaCBuYW1lc3BhY2UgZGVjbGFyYXRpb24gaXMgXCIiICsgaW5jb3JyZWN0RWxlbWVudE5hbWUgKyAiXCIuIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW55IGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgYXR0cmlidXRlIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi4gCi0gICAqIEBwYXJhbSBlbGVtIHRoZSByb290IGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIG5hbWUgb2YgYW4gZWxlbWVudCBmb3VuZCBvciBudWxsLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SW5jb3JyZWN0RWxlbWVudE5hbWUoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgLy8gR2V0dGluZyBhIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgeG1sbnM6eG1sCi0gICAgU3RyaW5nIGF0dHJWYWx1ZSA9IGVsZW0uZ2V0QXR0cmlidXRlTlMoCi0gICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1hNTE5TLCAieG1sIik7Ci0gICAgLy8gSWYgaXQgZXF1YWxzIHRvICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLAotICAgIC8vIHJldHVybiBhbiBlbGVtZW50IG5hbWU7Ci0gICAgaWYgKFdTSUNvbnN0YW50cy5OU19VUklfWE1MLmVxdWFscyhhdHRyVmFsdWUpKQotICAgIHsKLSAgICAgIHJldHVybiBlbGVtLmdldE5vZGVOYW1lKCk7Ci0gICAgfQotICAgIC8vIEdvaW5nIHRocm91Z2ggZWxlbWVudCdzIGNoaWxkcmVuCi0gICAgRWxlbWVudCBjaGlsZCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbSk7Ci0gICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgewotICAgICAgLy8gSWYgYW55IG9mIHRoZW0gaGFzIHhtbG5zOnhtbCBhdHRyaWJ1dGUsIHJldHVybiBhIHZhbHVlCi0gICAgICBTdHJpbmcgbmFtZSA9IGdldEluY29ycmVjdEVsZW1lbnROYW1lKGNoaWxkKTsKLSAgICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgICAgfQotICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBlbGVtZW50J3MgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICAvLyBObyB4bWxuczp4bWwgYXR0cmlidXRlcyBmb3VuZCwgcmV0dXJuIG51bGwKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTEwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmJhZDcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTAwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTEwMC4KLSAqIEEgbWVzc2FnZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBTT0FQIGZhdWx0IFNIT1VMRCB1c2UgYSAiMjAwIE9LIiAKLSAqIEhUVFAgc3RhdHVzIGNvZGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDpGYXVsdD4gZWxlbWVudDoKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9Ci0gICAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkZhdWx0Iik7Ci0KLSAgICAgICAgLy8gSWYgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHNvYXA6RmF1bHQsIHRoZW4gY2hlY2sgaXQKLSAgICAgICAgaWYgKChmYXVsdExpc3QgPT0gbnVsbCkgfHwgKGZhdWx0TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOkZhdWx0Ci0gICAgICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZQotICAgICAgICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgICAgICAgIFV0aWxzLmdldEhUVFBTdGF0dXNDb2RlKAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0gICAgICAgICAgaWYgKCEiMjAwIi5lcXVhbHMoaHR0cFN0YXR1cykpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgICAgLy9mYWlsdXJlRGV0YWlsTWVzc2FnZSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAiXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgICAgICsgIlxuTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIGl0IGlzIGEgc29hcDpGYXVsdCwgdGhlbiB0aGUgcmVzdWx0IG11c3QgYmUgbm90QXBwbGljYWJsZQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDExMDcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTA3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYzg2OTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDExMDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5OdWxsVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQlAxMTA3LgotICogVGhlIGNvbnRhaW5lZCBzb2FwYmluZDpmYXVsdCBpcyBkZWZpbmVkIGluIHRoZSB3c2RsOmJpbmRpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvcgotewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMDcoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgT3BlcmF0aW9uU2lnbmF0dXJlIHJlc3BvbnNlU2lnID0gbnVsbDsKLSAgcHJpdmF0ZSBWZWN0b3IgZmF1bHRzID0gbnVsbDsKLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBGYXVsdCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBGYXVsdCBmYXVsdCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLQotICAgIGlmIChmYXVsdE5hbWUgPT0gbnVsbCkKLSAgICAgIGZhdWx0TmFtZSA9IGN0eC5nZXRCaW5kaW5nRmF1bHQoKS5nZXROYW1lKCk7Ci0KLSAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotICAgIGlmIChvcCA9PSBudWxsIC8qIHx8IGZhdWx0TmFtZSA9PSBudWxsKi8KLSAgICAgICkgLy8gbWF5IGJlIGl0J3MgcG9zc2libGUgdG8gaGF2ZSBsZWdhbCBmYXVsdCB3aXRoIG51bGwgbmFtZQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gd2Ugc3VwcG9zZSB0aGF0IFNPQVBGYXVsdC5nZXROYW1lKCkgY29ycmVzcG9uZHMgdG8gdGhlIGFic3RyYWN0IG9wZXJhdGlvbidzIGZhdWx0IG5hbWUgICAgICAgICAgIAotICAgIEZhdWx0IGYgPSBvcC5nZXRGYXVsdChmYXVsdE5hbWUpOwotICAgIGlmIChmID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICBNZXNzYWdlIG0gPSBmLmdldE1lc3NhZ2UoKTsKLSAgICAvLyBtZXNzYWdlIHNob3VsZCBoYXZlIG9ubHkgb25lIHBhcnQKLSAgICBpZiAobSA9PSBudWxsIHx8IG0uZ2V0UGFydHMoKSA9PSBudWxsIHx8IG0uZ2V0UGFydHMoKS5zaXplKCkgIT0gMSkKLSAgICAgIHJldHVybjsKLQotICAgIC8vUGFydCBmYXVsdFBhcnQgPSBXU0RMVXRpbC5nZXRQYXJ0KG0sIGZhdWx0TmFtZSk7Ci0gICAgUGFydCBmYXVsdFBhcnQgPSAoUGFydCkgbS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotCi0gICAgVHlwZXNSZWdpc3RyeSB0UmVnID0gKFR5cGVzUmVnaXN0cnkpIGN0eC5nZXRQYXJhbWV0ZXIoIlR5cGVzUmVnaXN0cnkiKTsKLSAgICBRTmFtZSBlbGVtUU5hbWUgPSBmYXVsdFBhcnQuZ2V0RWxlbWVudE5hbWUoKTsKLSAgICBRTmFtZSB0eXBlUU5hbWUgPSBmYXVsdFBhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICBpZiAodHlwZVFOYW1lID09IG51bGwpCi0gICAgICB0eXBlUU5hbWUgPSB0UmVnLmdldFR5cGUoZmF1bHRQYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgIGlmICh0eXBlUU5hbWUgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlBhcnQgdHlwZSBjYW4gbm90IGJlIG51bGwuIik7Ci0KLSAgICAvLyBmb3IgYWxsIGZhdWx0czsgaWYgaXQgcHJlc2VudHMgaW4gdGhlIGRlZmluaXRpb24gcmVtb3ZlIGl0IGZyb20gbGlzdAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF1bHRzLnNpemUoKTspCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIGZhdWx0cy5nZXQoaSk7Ci0KLSAgICAgIC8vIFRPRE86IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgdGhpcyBpcyBoZXJlLiAgT25seSB0aGUgZWxlbWVudCBzZXR0aW5nIHNob3VsZCBiZSBjaGVja2VkLiAKLSAgICAgIC8vYm9vbGVhbiBtYXRjaEJ5VHlwZSA9Ci0gICAgICAvLyAgZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHModHlwZVFOYW1lLmdldExvY2FsUGFydCgpKSAmJiBOdWxsVXRpbC5lcXVhbHMoZWxlbS5nZXROYW1lc3BhY2VVUkkoKSwgdHlwZVFOYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLQotICAgICAgYm9vbGVhbiBtYXRjaEJ5RWxlbWVudCA9Ci0gICAgICAgIGVsZW1RTmFtZSAhPSBudWxsCi0gICAgICAgICAgJiYgZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoZWxlbVFOYW1lLmdldExvY2FsUGFydCgpKQotICAgICAgICAgICYmIE51bGxVdGlsLmVxdWFscygKLSAgICAgICAgICAgIGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICBlbGVtUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCi0gICAgICAvL2lmIChtYXRjaEJ5VHlwZSB8fCBtYXRjaEJ5RWxlbWVudCkKLSAgICAgIGlmIChtYXRjaEJ5RWxlbWVudCkKLSAgICAgICAgZmF1bHRzLnJlbW92ZShpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgaSsrOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFBhcnNlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvY1JlcXVlc3QgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0gICAgICBEb2N1bWVudCBkb2NSZXNwb25zZSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICBpZiAoKGRvY1JlcXVlc3QgPT0gbnVsbCkgfHwgKGRvY1Jlc3BvbnNlID09IG51bGwpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoIXRoaXMudmFsaWRhdG9yLmlzRmF1bHQoZG9jUmVzcG9uc2UpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjcmVhdGUgcmVxdWVzdCBzaWduYXR1cmUKLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0U29hcEFjdGlvbihlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkpLAotICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXSwKLSAgICAgICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgICAgdmFsaWRhdG9yKSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIE1PVkVEOiBQYXJzZSByZXNwb25zZSBtZXNzYWdlCi0gICAgICAgICAgLy9kb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgICAgIHJlc3BvbnNlU2lnID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShkb2NSZXNwb25zZSk7Ci0gICAgICAgICAgaWYgKFdTSUNvbnN0YW50cwotICAgICAgICAgICAgLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQwotICAgICAgICAgICAgLmVxdWFscyhtYXRjaC5nZXRPcGVyYXRpb25TdHlsZSgpKSkKLSAgICAgICAgICAgIHJlc3BvbnNlU2lnLmNyZWF0ZVJQQ1NpZ25hdHVyZSgpOwotCi0gICAgICAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICAgICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgICAgICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEZhdWx0KHRydWUpOwotICAgICAgICAgIHRyYXZlcnNhbC5pZ25vcmVCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgICB0cmF2ZXJzYWwuaWdub3JlQmluZGluZ091dHB1dCgpOwotCi0gICAgICAgICAgaWYgKHJlc3BvbnNlU2lnID09IG51bGwgfHwgIXJlc3BvbnNlU2lnLmlzRmF1bHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZVNpZyAhPSBudWxsICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBleHRyYWN0IGFsbCBmYXVsdHMgYW5kIHRyeSBmaW5kIHRoZW0gaW4gdGhlIGRlZmluaXRpb24KLSAgICAgICAgICAgIC8vIGV4dHJhY3RzIG9ubHkgZmF1bHRzIHdpdGggbmFtZXNwYWNlCi0gICAgICAgICAgICBFbGVtZW50IGJvZHkgPQotICAgICAgICAgICAgICBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KAotICAgICAgICAgICAgICAgIGRvY1Jlc3BvbnNlLmdldERvY3VtZW50RWxlbWVudCgpLAotICAgICAgICAgICAgICAgIFdTSVRhZy5FTEVNX1NPQVBfQk9EWSk7Ci0gICAgICAgICAgICBFbGVtZW50IGZhdWx0ID0KLSAgICAgICAgICAgICAgWE1MVXRpbHMuZmluZENoaWxkRWxlbWVudChib2R5LCBXU0lUYWcuRUxFTV9TT0FQX0ZBVUxUKTsKLSAgICAgICAgICAgIEVsZW1lbnQgZGV0YWlsID0gWE1MVXRpbHMuZ2V0RWxlbWVudCgiZGV0YWlsIiwgZmF1bHQpOwotICAgICAgICAgICAgaWYgKGRldGFpbCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgICAgICAgICAgICBmYXVsdHMgPSBYTUxVdGlscy5nZXRDaGlsZEVsZW1lbnRzKGRldGFpbCk7Ci0KLSAgICAgICAgICAgICAgLy8gUkVNT1ZFOiBXaHkgZG8gdGhlIGZhdWx0cyBoYXZlIHRvIGJlIG5hbWVzcGFjZWQgcXVhbGlmaWVkPwotICAgICAgICAgICAgICAvL1hNTFV0aWxzLnJlbW92ZUFsbEVsZW1lbnRzV2l0aG91dE5TKGZhdWx0cyk7Ci0KLSAgICAgICAgICAgICAgLy8gaWYgZmF1bHRzIGV4aXN0IHRyeSB0byB2YWxpZGF0ZSBpdAotICAgICAgICAgICAgICBpZiAoZmF1bHRzLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBNYXAgbSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgV1NETFV0aWwuZXhwYW5kRGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgICAgICAgICAgbS5wdXQoCi0gICAgICAgICAgICAgICAgICAiZGVmaW5pdGlvbiIsCi0gICAgICAgICAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCkKLSAgICAgICAgICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpKTsKLSAgICAgICAgICAgICAgICBUeXBlc1JlZ2lzdHJ5IHRSZWcgPQotICAgICAgICAgICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCkKLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3IpOwotICAgICAgICAgICAgICAgIG0ucHV0KCJUeXBlc1JlZ2lzdHJ5IiwgdFJlZyk7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpLCBtKTsKLSAgICAgICAgICAgICAgICBpZiAoZmF1bHRzLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgICAgICAgICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXVsdHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuc2VyaWFsaXplRWxlbWVudCgoRWxlbWVudCkgZmF1bHRzLmdldChpKSwgc3cpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3cuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICAgICAgICJcbkZhdWx0czpcbiIgKyBzdy50b1N0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjY5MzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEyMDEuCi0gKiBUaGUgbmFtZXNwYWNlIG9mIHRoZSBzb2FwOkVudmVsb3BlIGluIHRoZSBtZXNzYWdlIGhhcyB2YWx1ZTogaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8uIAotICovCi1wdWJsaWMgY2xhc3MgQlAxMjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIERvY3VtZW50IGRvYzsKLSAgICAvLyBDaGVjayBpZiB0aGlzIGlzIG9uZSB3YXkgcmVzcG9uc2Ugb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSB8fAotICAgICAgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmcgbnMgPSByb290LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgU3RyaW5nIGxvY2FsID0gcm9vdC5nZXRMb2NhbE5hbWUoKTsKLSAgICAgIGlmICghRUxFTV9TT0FQX0VOVkVMT1BFLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhucykpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIlJvb3QgZWxlbWVudCBoYXMgbmFtZXNwYWNlOiAiICsgbnMsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UgaWYgKCFFTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGxvY2FsKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAiUm9vdCBlbGVtZW50IGhhcyBsb2NhbCBuYW1lOiAiICsgbG9jYWwsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVhYmVlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTIwMi4gCi0gKiBFYWNoIGNoaWxkIGVsZW1lbnQgKGlmIGFueSkgb2YgdGhlIHNvYXA6Qm9keSBlbGVtZW50IGlzIG5hbWVzcGFjZSBxdWFsaWZpZWQgKG5vdCB0aGUgZ3JhbmRjaGlsZHJlbikuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUGFyc2UgbG9nIG1lc3NhZ2UgCi0gICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICBpZiAodmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgc29hcCBib2R5IGVsZW1lbnQKLSAgICBlbHNlIGlmICghdmFsaWRhdG9yLmNvbnRhaW5zU29hcEJvZHlXaXRoQ2hpbGQoZG9jKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gR2V0IHRoZSByb290IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgLy8gR2V0IGEgbm9kZSBsaXN0IHdoaWNoIHNob3VsZCBjb250YWluIHRoZSBzb2FwOkJvZHkgZWxlbWVudAotICAgICAgTm9kZUxpc3Qgcm9vdE5vZGVMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBFTEVNX1NPQVBfQk9EWS5nZXROYW1lc3BhY2VVUkkoKSwgRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc29hcDpCb2R5IGVsZW1lbnQsCi0gICAgICAvLyB0aGVuIG1ha2Ugc3VyZSB0aGF0IGVhY2ggY2hpbGQgaXMgbmFtZXNwYWNlIHF1YWxpZmllZAotICAgICAgaWYgKHJvb3ROb2RlTGlzdC5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCB0aGUgc29hcDpCb2R5IGVsZW1lbnQKLSAgICAgICAgRWxlbWVudCBib2R5ID0gKEVsZW1lbnQpIHJvb3ROb2RlTGlzdC5pdGVtKDApOwotCi0gICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiBzb2FwOkJvZHkgY2hpbGQgZWxlbWVudHMgCi0gICAgICAgIE5vZGVMaXN0IGNoaWxkcmVuID0gYm9keS5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgZWFjaCBjaGlsZCBlbGVtZW50IGlzIG5hbWVzcGFjZSBxdWFsaWZpZWQKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7Ci0gICAgICAgICAgaSA8IGNoaWxkcmVuLmdldExlbmd0aCgpICYmIHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIG4gPSBjaGlsZHJlbi5pdGVtKGkpOwotICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbnMgPSBuLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgaWYgKG5zID09IG51bGwgfHwgbnMubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzBhY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEyMDMuIAotICogVGhlIG5hbWVzcGFjZSBvZiB0aGUgZGV0YWlsIGVsZW1lbnQgb2YgYSBxdWFsaWZpZWQgYXR0cmlidXRlIGluIHRoZSBzb2FwOkZhdWx0IGlzIGEgCi0gKiBmb3JlaWduIG5hbWVzcGFjZSwgZGlmZmVyZW50IGZyb20gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBib29sZWFuIHF1YWxpZmllZEF0dHJpYnV0ZXMgPSBmYWxzZTsKLQotICAgIERvY3VtZW50IGRvYzsKLSAgICAvLyBDaGVjayBpZiB0aGlzIGlzIG9uZSB3YXkgcmVzcG9uc2Ugb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgICB8fCAoZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEFERDogTmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGVjayBpcyByZXF1aXJlZCwgc2luY2UgaXQgc2hvdWxkIGFscmVhZHkgYmUgZG9uZQotICAgICAgLy8gQXBwbGljYWJsZSB0byByZXNwb25zZSBtZXNzYWdlcyBvbmx5Ci0gICAgICBpZiAoZW50cnlDb250ZXh0Ci0gICAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgICAuZ2V0VHlwZSgpCi0gICAgICAgIC5lcXVhbHNJZ25vcmVDYXNlKE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9Ci0gICAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotICAgICAgICBpZiAoKGZhdWx0TGlzdCA9PSBudWxsKSB8fCAoZmF1bHRMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHNvYXA6RmF1bHQKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gd2UgaGF2ZSBhIHNvYXA6RmF1bHQuIAotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBsb29rIGF0IGVhY2ggc29hcDpGYXVsdCBpbiB0dXJuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdWx0TGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbGVtZW50IHNvYXBGYXVsdCA9IChFbGVtZW50KSBmYXVsdExpc3QuaXRlbShpKTsKLSAgICAgICAgICAgICAgLy8gZmluZCB0aGUgZGV0YWlsIGVsZW1lbnQocykgaWYgYW55Ci0gICAgICAgICAgICAgIE5vZGVMaXN0IGRldGFpbExpc3QgPQotICAgICAgICAgICAgICAgIHNvYXBGYXVsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKTsKLSAgICAgICAgICAgICAgaWYgKGRldGFpbExpc3QgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGRldGFpbCBlbGVtZW50Li4uICAgICAJCQkJCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXRhaWxMaXN0LmdldExlbmd0aCgpOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgTmFtZWROb2RlTWFwIGRldGFpbEF0dHJpYnMgPQotICAgICAgICAgICAgICAgICAgICBkZXRhaWxMaXN0Lml0ZW0oaikuZ2V0QXR0cmlidXRlcygpOwotICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGFueSBxdWFsaWZpZWQgYXR0cmlidXRlcwotICAgICAgICAgICAgICAgICAgaWYgKGRldGFpbEF0dHJpYnMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBkZXRhaWxBdHRyaWJzLmdldExlbmd0aCgpOyBrKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBBdHRyIG5leHRBdHRyID0gKEF0dHIpIChkZXRhaWxBdHRyaWJzLml0ZW0oaykpOwotICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIHF1YWxpZmllZCBhdHRyaWJ1dGUsIGNoZWNrIHRoYXQgCi0gICAgICAgICAgICAgICAgICAgICAgLy8gcW5hbWUgIT0gaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZQotICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0QXR0ci5nZXROYW1lc3BhY2VVUkkoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZEF0dHJpYnV0ZXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRBdHRyCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXROYW1lc3BhY2VVUkkoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIHVuZXhwZWN0ZWQgcW5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcXVhbGlmaWVkQXR0cmlidXRlcykKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyB0YXJnZXQgbWVzc2FnZSBpcyBub3QgYSBSZXNwb25zZQotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmY0ODBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEyMDQuCi0gKiBUaGUgc2VyaWFsaXplZCBhcnJheSBmb3JtIGluIHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdGhlIAotICogc29hcGVuYzphcnJheVR5cGUgYXR0cmlidXRlLgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMDQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMDQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0KLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9Ci0gICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNGYXVsdChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBQYXJzZSByZXF1ZXN0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvY1JlcXVlc3QgPQotICAgICAgICBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBTdHJpbmcgaGVhZGVycyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5tYXRjaE9wZXJhdGlvbigKLSAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHJlZ2lzdHJ5KTsKLQotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICBNZXNzYWdlIG9wZXJhdGlvbk1lc3NhZ2UgPSBudWxsOwotICAgICAgaWYgKE1lc3NhZ2VFbnRyeQotICAgICAgICAuVFlQRV9SRVFVRVNUCi0gICAgICAgIC5lcXVhbHMoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKSkKLSAgICAgICAgJiYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKE1lc3NhZ2VFbnRyeQotICAgICAgICAgIC5UWVBFX1JFU1BPTlNFCi0gICAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKQotICAgICAgICAgICYmIChiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpICE9IG51bGwpKQotICAgICAgICB7Ci0gICAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAob3BlcmF0aW9uTWVzc2FnZSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotCi0gICAgICBib29sZWFuIGlzQ29udGFpbkFycmF5ID0gZmFsc2U7Ci0KLSAgICAgIENvbGxlY3Rpb24gcGFydHMgPSBvcGVyYXRpb25NZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJ0cy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdGVyLm5leHQoKTsKLQotICAgICAgICBRTmFtZSB0eXBlID0gbnVsbDsKLQotICAgICAgICBpZiAocGFydC5nZXRUeXBlTmFtZSgpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0eXBlID0gcmVnaXN0cnkuZ2V0VHlwZShwYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHR5cGUgPSBwYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpc0NvbnRhaW5BcnJheSA9Ci0gICAgICAgICAgcmVnaXN0cnkuaXNFeHRlbmRzQXJyYXkodHlwZSkKLSAgICAgICAgICAgIHx8IHJlZ2lzdHJ5LmlzVXNlc1dTRExBcnJheVR5cGUodHlwZSkKLSAgICAgICAgICAgIHx8IGlzQXJyYXlUeXBlKHR5cGUpOwotICAgICAgICBpZiAoaXNDb250YWluQXJyYXkpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpc0NvbnRhaW5BcnJheSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0cyBib2R5Ci0gICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICAgIGlmIChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEVsZW1lbnQgc29hcEJvZHlFbGVtID0gKEVsZW1lbnQpIHNvYXBCb2R5TGlzdC5pdGVtKDApOwotCi0gICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5Q2lsZHJlbkxpc3QgPQotICAgICAgICAgIHNvYXBCb2R5RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgIioiKTsKLSAgICAgICAgZm9yIChpbnQgaW5kZXhDaGlsZCA9IDA7Ci0gICAgICAgICAgaW5kZXhDaGlsZCA8IHNvYXBCb2R5Q2lsZHJlbkxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgaW5kZXhDaGlsZCsrKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIHNvYXBCb2R5Q2lsZHJlbkxpc3QuaXRlbShpbmRleENoaWxkKTsKLSAgICAgICAgICBpZiAoZWxlbQotICAgICAgICAgICAgLmhhc0F0dHJpYnV0ZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVBfRU5DT0RJTkcsCi0gICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0FSUkFZX1RZUEUpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0eXBlIHVzZXMgYW4gYXJyYXkgb3Igbm90LgotICAgKiBAcGFyYW0gdHlwZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0FycmF5VHlwZShRTmFtZSB0eXBlKQotICB7Ci0gICAgYm9vbGVhbiBhcnJheVR5cGUgPSBmYWxzZTsKLQotICAgIEVsZW1lbnQgdHlwZUVsZW1lbnQgPSBnZXRUeXBlRWxlbWVudCh0eXBlKTsKLSAgICBpZiAodHlwZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBOb2RlTGlzdCBsaXN0ID0KLSAgICAgICAgdHlwZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1hTRCwKLSAgICAgICAgICAic2VxdWVuY2UiKTsKLSAgICAgIGlmIChsaXN0LmdldExlbmd0aCgpID4gMCkKLSAgICAgICAgYXJyYXlUeXBlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXJyYXlUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgWE1MIGVsZW1lbnQgZGVmaW5pbmcgdGhlIHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlCi0gICAqIEByZXR1cm4gRWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBFbGVtZW50IGdldFR5cGVFbGVtZW50KFFOYW1lIHR5cGUpCi0gIHsKLSAgICBUeXBlc1tdIGFsbFR5cGVzID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0VHlwZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgYWxsVHlwZXMgIT0gbnVsbCAmJiBpIDwgYWxsVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCB0eXBlc0VsZW1lbnQgPSBudWxsOwotICAgICAgaWYgKGFsbFR5cGVzW2ldICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHR5cGVzRWxlbWVudCA9IGFsbFR5cGVzW2ldLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICAgIGlmICh0eXBlc0VsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgZXh0TGlzdCA9IGFsbFR5cGVzW2ldLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IGV4dExpc3QuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0ZXIubmV4dCgpOwotCi0gICAgICAgICAgICBpZiAoZXh0RWxlbQotICAgICAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKQotICAgICAgICAgICAgICAuZXF1YWxzKG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1hTRCwgInNjaGVtYSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHlwZXNFbGVtZW50ID0KLSAgICAgICAgICAgICAgICAoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbSkuZ2V0RWxlbWVudCgpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGVzRWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZUxpc3QgY29tcGxleFR5cGVzTGlzdCA9Ci0gICAgICAgICAgICB0eXBlc0VsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QsCi0gICAgICAgICAgICAgICJjb21wbGV4VHlwZSIpOwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29tcGxleFR5cGVzTGlzdC5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgdHlwZUVsZW0gPSAoRWxlbWVudCkgY29tcGxleFR5cGVzTGlzdC5pdGVtKGopOwotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKHR5cGVFbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFbGVtOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmFmOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFRyYXZlcnNhbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ci0KLQotLyoqCi0gKiBCUDEyMDggTk9UIEZVTExZIFRFU1RFRC4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBQYXJzZSBsb2cgbWVzc2FnZSAKLSAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jID09IG51bGwpIHsKLSAgICAgIC8vbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfSBlbHNlIHsKLQotICAgICAgLy8gVHJhdmVyc2UgZG9jdW1lbnQgbG9va2luZyBmb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMuCi0gICAgICAvLyBJU1NVRTogdGhpcyBpbm5lciBjbGFzcyBuZWVkcyAuLi4gcmV2aXNpdGluZy9yZXBsYWNpbmcKLSAgICAgIC8vIEVHLiBEbyB3ZSB3YW50IHRvIGxpc3QgYWxsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCAKLSAgICAgIC8vIG9yIGlzIHRoZSBmaXJzdCBzdWZmaWNpZW50PwotICAgICAgWE1MVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBYTUxUcmF2ZXJzYWwoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcGkpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIlRhcmdldDogIiArIHBpLmdldFRhcmdldCgpICsgIiwgRGF0YTogIiArIHBpLmdldERhdGEoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFERDogSG93IHNob3VsZCB0aGlzIGV4Y2VwdGlvbiBiZSBoYW5kbGVkPwotICAgICAgICAgIH0KLQotICAgICAgICAgIHN1cGVyLnZpc2l0KHBpKTsKLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAgdHJhdmVyc2FsLnZpc2l0KGRvYyk7Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQKLSAgICAgICAgJiYgZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjExLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MTMzYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQlAxMjExLgotICogCi0gKiBDb250ZXh0OiAKLSAqIEZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGxvZyBmaWxlLCB0aGF0IGlzIHJlZmVycmVkIGJ5IGEgYmluZGluZyBzdHlsZSBSUEMtbGl0ZXJhbAotICogCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFBhcnQgYWNjZXNzb3IgZWxlbWVudHMgaW4gdGhlIG1lc3NhZ2UgZG8gbm90IGhhdmUgYW4geHNpOm5pbCBhdHRyaWJ1dGUgd2l0aCBhIHZhbHVlIG9mICIxIiBvciAidHJ1ZSIuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMTEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgWE1MVGFncwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMjExKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgRG9jdW1lbnQgZG9jUmVxdWVzdCA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBHZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgLy8gR2V0IHRoZSBiaW5kaW5nIHRoYXQgaXMgYmVpbmcgcHJvY2Vzc2VkICAgICAgICAgICAgICAgIAotICAgICAgQmluZGluZyBiaW5kaW5nID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXTsKLQotICAgICAgLy9DcmVhdGUgdGhlIHR5cGVzIHJlZ2lzdHJ5Ci0gICAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotCi0gICAgICAvLyBGaW5kIGFuIG9wZXJhdGlvbiBtYXRjaCAgICAgICAgCi0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0IHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgbWF0Y2gKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAvLyBJZiB0aGlzIGlzIG5vdCBycGMtbGl0ZXJhbCwgdGhlbiByZXR1cm4gbm90QXBwbGljYWJsZSByZXN1bHQKLSAgICAgIGlmICghV1NETFV0aWxzCi0gICAgICAgIC5pc1JwY0xpdGVyYWwobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSwgYmluZGluZ09wZXJhdGlvbikpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBhY2Nlc3NvcnMKLSAgICAgIEVsZW1lbnQgYWNjZXNzb3IgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBPcGVyYXRpb24pOwotICAgICAgd2hpbGUgKGFjY2Vzc29yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEF0dHIgYXR0ciA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShhY2Nlc3NvciwgQVRUUl9YU0lfTklMKTsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgeHNpOm5pbCBhdHRyaWJ1dGUgYW5kIGl0cyB2YWx1ZSBpcyAiMSIgb3IgInRydWUiCi0gICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChhdHRyICE9IG51bGwKLSAgICAgICAgICAmJiAoYXR0ci5nZXRWYWx1ZSgpLmVxdWFscygiMSIpIHx8IGF0dHIuZ2V0VmFsdWUoKS5lcXVhbHMoInRydWUiKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGFjY2Vzc29yIG5hbWUgaXMgIgotICAgICAgICAgICAgKyBhY2Nlc3Nvci5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGFjY2Vzc29yCi0gICAgICAgIGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoYWNjZXNzb3IpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMxZjc3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTIxMgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tZmF1bHQgZW52ZWxvcGUgY29udGFpbmluZyBhIHNvYXA6Ym9keSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBlbnZlbG9wZSBjb250YWlucyBleGFjdGx5IG9uZSBwYXJ0IGFjY2Vzc29yIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHdzZGw6cGFydCBlbGVtZW50cyBib3VuZCB0byB0aGUgZW52ZWxvcGUncyBjb3JyZXNwb25kaW5nIHNvYXBiaW5kOmJvZHkgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxMjEyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIxMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0dGluZyBhIG1lc3NhZ2UgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICBFbGVtZW50IHNvYXBPcGVyYXRpb24gPSBudWxsOwotICAgICAgLy8gSWYgdGhlcmUgaXMgYSBGYXVsdCBlbnRyeSBvciBubyBib2R5IGVudHJpZXMsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAodmFsaWRhdG9yLmlzRmF1bHQoZG9jKQotICAgICAgICB8fCAoc29hcE9wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRTb2FwQm9keUNoaWxkKGRvYykpID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIENyZWF0aW5nIGEgcXVhbGlmaWVkIG5hbWUgb2YgcG90ZW50aWFsIFNPQVAgb3BlcmF0aW9uCi0gICAgICBRTmFtZSBvcGVyYXRpb25RTmFtZSA9IG5ldyBRTmFtZSgKLSAgICAgICAgc29hcE9wZXJhdGlvbi5nZXROYW1lc3BhY2VVUkkoKSwgc29hcE9wZXJhdGlvbi5nZXRMb2NhbE5hbWUoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBSUEMgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcnBjQmluZGluZ09wZXJhdGlvbnMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYmluZGluZyBvcGVyYXRpb24gYnkgZ2l2ZW4gb3BlcmF0aW9uIG5hbWUKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRPcGVyYXRpb25NYXRjaCgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgIG9wZXJhdGlvblFOYW1lLAotICAgICAgICBycGNCaW5kaW5nT3BlcmF0aW9ucyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoZWQgb3BlcmF0aW9uLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBGaW5kaW5nIG9wZXJhdGlvbiBtZXNzYWdlIHBhcnRzIGFuZCBleHRlbnNpYmlsaXR5IGVsZW1zCi0gICAgICAvLyBpbiB0aGUgYmluZGluZyBkZXBlbmRpbmcgb24gbWVzc2FnZSB0eXBlCi0gICAgICBMaXN0IG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IG51bGw7Ci0gICAgICBMaXN0IGV4dEVsZW1zID0gbnVsbDsKLSAgICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgICAuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0T3JkZXJlZFBhcnRzKG51bGwpOwotICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSAhPSBudWxsKQotICAgICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgICAuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmdldE9yZGVyZWRQYXJ0cyhudWxsKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgICAgZXh0RWxlbXMgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldHRpbmcgYWxsIHRoZSBhY2Nlc3NvcnMgb2YgdGhlIG9wZXJhdGlvbiBlbGVtZW50Ci0gICAgICBMaXN0IGFjY2Vzc29ycyA9IFhNTFV0aWxzLmdldENoaWxkRWxlbWVudHMoc29hcE9wZXJhdGlvbik7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBvcmRlcmVkIGxpc3Qgb2Ygd3NkbDpwYXJ0IG5hbWVzCi0gICAgICBMaXN0IG9yZGVyZWRQYXJ0TmFtZXMgPQotICAgICAgICB2YWxpZGF0b3Iub3JkZXJQYXJ0TmFtZXMob3BlcmF0aW9uTWVzc2FnZVBhcnRzLCBleHRFbGVtcyk7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgd3NkbDpwYXJ0IG5hbWVzCi0gICAgICBJdGVyYXRvciBpID0gb3JkZXJlZFBhcnROYW1lcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm90IGV4YWN0bHkgb25lIGFjY2Vzc29yIGZvciB0aGUgcGFydCBzcGVjaWZpZWQsCi0gICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChnZXRQYXJ0c0NvdW50KGFjY2Vzc29ycywgcGFydE5hbWUpICE9IDEpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAiVGhlIG5hbWUgb2Ygd3NkbDpwYXJ0IGlzICIgKyBwYXJ0TmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb3VudHMgdGhlIGFtb3VudCBvZiBhY2Nlc3NvcnMgb2YgYSBzcGVjaWZpYyBuYW1lCi0gICAqIEBwYXJhbSBhY2Nlc3NvcnMgYSBsaXN0IG9mIGFjY2Vzc29ycwotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiBhY2Nlc3NvciBlbGVtZW50cyB0byBiZSBjb3VudGVkCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgaW50IGdldFBhcnRzQ291bnQoTGlzdCBhY2Nlc3NvcnMsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWNjZXNzb3JzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgYWNjZXNzb3IgPSAoRWxlbWVudCkgYWNjZXNzb3JzLmdldChpKTsKLSAgICAgIGlmIChhY2Nlc3Nvci5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobmFtZSkpCi0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NWQ4NDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTIxMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tZmF1bHQgZW52ZWxvcGUgY29udGFpbmluZyBhIHNvYXA6Qm9keSBlbGVtZW50LCBhbmQgaXMgcmVmZXJyZWQgYnkgYSBkb2MtbGl0ZXJhbCBiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBlbnZlbG9wZSBoYXMgbm8gZWxlbWVudCBjb250ZW50IGluIHRoZSBzb2FwOkJvZHkgZWxlbWVudCBpZiB0aGUgdmFsdWUgb2YgdGhlIHBhcnRzIGF0dHJpYnV0ZSBvZiB0aGUgc29hcGJpbmQ6Ym9keSBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZG9jLWxpdGVyYWwgZGVzY3JpcHRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIxMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMTMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBtZXNzYWdlRWxlbWVudCA9IG51bGw7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkIG9yIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkKLSAgICAgIC8vIG9yIHRoZXJlIGlzIG5vIGJvZHkgZW50cmllcywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsCi0gICAgICAgIHx8IHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKG1lc3NhZ2VFbGVtZW50ID0gdmFsaWRhdG9yLmdldFNvYXBCb2R5Q2hpbGQoZG9jKSkgPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0dGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIG1lc3NhZ2UgZWxlbWVudAotICAgICAgUU5hbWUgbWVzc2FnZVBhcnRFbGVtZW50UU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIG1lc3NhZ2VFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLCBtZXNzYWdlRWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBkb2N1bWVudCBiaW5kaW5nIG9wZXJhdGlvbnMgZnJvbSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBkb2NCaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgIHZhbGlkYXRvci5nZXRNYXRjaGluZ0JpbmRpbmdPcHMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpKTsKLQotICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSBnaXZlbiBlbGVtZW50IG5hbWUKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBwb3RlbnRpYWxEb2NMaXRPcHMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vdCBleGFjdGx5IG9uZSBvcGVyYXRpb24gbWF0Y2hlZCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChwb3RlbnRpYWxEb2NMaXRPcHMubGVuZ3RoICE9IDEpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEZpbmRpbmcgb3BlcmF0aW9uIGV4dGVuc2liaWxpdHkgZWxlbXMKLSAgICAgIC8vIGluIHRoZSBiaW5kaW5nIGRlcGVuZGluZyBvbiBtZXNzYWdlIHR5cGUKLSAgICAgIExpc3QgZXh0RWxlbXMgPSBudWxsOwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKQotICAgICAgICAmJiBwb3RlbnRpYWxEb2NMaXRPcHNbMF0uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBwb3RlbnRpYWxEb2NMaXRPcHNbMF0KLSAgICAgICAgICAuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAgICYmIHBvdGVudGlhbERvY0xpdE9wc1swXS5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBwb3RlbnRpYWxEb2NMaXRPcHNbMF0KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgZnJvbSBzb2FwYmluZDpib2R5Ci0gICAgICBMaXN0IHBhcnRzID0gbnVsbDsKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gdmFsaWRhdG9yLmdldFNPQVBCb2R5KGV4dEVsZW1zKTsKLSAgICAgIGlmIChzb2FwQm9keSAhPSBudWxsKQotICAgICAgICBwYXJ0cyA9IHNvYXBCb2R5LmdldFBhcnRzKCk7Ci0KLSAgICAgIC8vIGlmIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgaXMgYW4gZW1wdHkgc3RyaW5nIGFuZCB0aGVyZSBpcwotICAgICAgLy8gYXQgbGVhc3Qgb25lIGFjY2Vzc29yLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgaWYgKHBhcnRzICE9IG51bGwgJiYgcGFydHMuaXNFbXB0eSgpCi0gICAgICAgICYmICFYTUxVdGlscy5nZXRDaGlsZEVsZW1lbnRzKG1lc3NhZ2VFbGVtZW50KS5pc0VtcHR5KCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJ3c2RsOm9wZXJhdGlvbiBuYW1lIGlzICIKLSAgICAgICAgICArIHBvdGVudGlhbERvY0xpdE9wc1swXS5nZXROYW1lKCkpOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjE0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGExMzQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBCUDEyMTQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbm9uLWZhdWx0IGVudmVsb3BlIGNvbnRhaW5pbmcgYSBzb2FwOkJvZHkgZWxlbWVudCwgYW5kIGlzIHJlZmVycmVkIGJ5IGEgcnBjLWxpdGVyYWwgYmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgZW52ZWxvcGUgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBhY2Nlc3NvciBlbGVtZW50cyBpZiB0aGUgdmFsdWUgb2YgdGhlIHBhcnRzIGF0dHJpYnV0ZSBvZiB0aGUgc29hcGJpbmQ6Ym9keSBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcnBjLWxpdGVyYWwgZGVzY3JpcHRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIxNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMTQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDcmVhdGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIHBvdGVudGlhbCBTT0FQIG9wZXJhdGlvbgotICAgICAgUU5hbWUgb3BlcmF0aW9uUU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIHNvYXBPcGVyYXRpb24uZ2V0TmFtZXNwYWNlVVJJKCksIHNvYXBPcGVyYXRpb24uZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgUlBDIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdmFsaWRhdG9yLmdldE1hdGNoaW5nQmluZGluZ09wcygKLSAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGJpbmRpbmcgb3BlcmF0aW9uIGJ5IGdpdmVuIG9wZXJhdGlvbiBuYW1lCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICBvcGVyYXRpb25RTmFtZSwKLSAgICAgICAgcnBjQmluZGluZ09wZXJhdGlvbnMpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPQotICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbm90IGxpdGVyYWwsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghdmFsaWRhdG9yLmlzTGl0ZXJhbChleHRFbGVtcykpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnRzIGF0dHJpYnV0ZSBmcm9tIHNvYXBiaW5kOmJvZHkKLSAgICAgIExpc3QgcGFydHMgPSBudWxsOwotICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSB2YWxpZGF0b3IuZ2V0U09BUEJvZHkoZXh0RWxlbXMpOwotICAgICAgaWYgKHNvYXBCb2R5ICE9IG51bGwpCi0gICAgICAgIHBhcnRzID0gc29hcEJvZHkuZ2V0UGFydHMoKTsKLQotICAgICAgLy8gaWYgdGhlIHBhcnRzIGF0dHJpYnV0ZSBpcyBhbiBlbXB0eSBzdHJpbmcgYW5kIHRoZXJlIGlzCi0gICAgICAvLyBhdCBsZWFzdCBvbmUgYWNjZXNzb3IsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAocGFydHMgIT0gbnVsbCAmJiBwYXJ0cy5pc0VtcHR5KCkKLSAgICAgICAgJiYgIVhNTFV0aWxzLmdldENoaWxkRWxlbWVudHMoc29hcE9wZXJhdGlvbikuaXNFbXB0eSgpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigid3NkbDpvcGVyYXRpb24gbmFtZSBpcyAiCi0gICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYTIwYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTMwMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTMwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vR2V0IHRoZSByZXF1ZXRzIG1lc3NhZ2UgYW5kIGNoZWNrIHRoZSB2YWx1ZSBvZiBtdXN0VW5kZXJzdGFuZC4KLSAgICBTdHJpbmcgbWVzc2FnZSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCk7Ci0gICAgT2JqZWN0W10gbXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzID0gZ2V0TXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzKG1lc3NhZ2UpOwotCi0gICAgaWYgKG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKChtdXN0VW5kZXJzdGFuZEF0dHJpYnV0ZXNbaW5kZXhdICE9IG51bGwpCi0gICAgICAgICAgJiYgKG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0uZXF1YWxzKCIxIikKLSAgICAgICAgICAgIHx8IG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0uZXF1YWxzKCIwIikpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiVGhlIFNPQVAgbXVzdFVuZGVyc3RhbmQgYXR0cmlidXRlIHdhcyBwcmVzZW50ICIKLSAgICAgICAgICAgICAgICArICIgYW5kIGl0cyB2YWx1ZSB3YXMgICIKLSAgICAgICAgICAgICAgICArIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0sCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0gLy9FbmQgaWYKLSAgICAgIH0gLy9FbmQgZm9yCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLy9SZXRyZWl2ZXMgdGhlIHZhbHVlIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUgZnJvbSBBTEwgU09BUCBoZWFkZXIKLSAgLy9JZiB0aGUgSGVhZGVyIGlzIG1pc3Npbmcgb3IgaWYgaXQgZG9lcyBub3QgY29udGFpbiBhbnkgdGFyZ2V0cyBvciBpZgotICAvL3RoZSBoZWFkZXIgZG9lcyBub3QgY29udGFpbiBhIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZSB0aGVuIHNldCB0aGUKLSAgLy9hc3NlcnRpb25SZXN1bHQgdG8gUkVTVUxUX05PVF9BUFBMSUNBQkxFLgotICBwcml2YXRlIE9iamVjdFtdIGdldE11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyhTdHJpbmcgbWVzc2FnZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAobWVzc2FnZSA9PSBudWxsIHx8IG1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKG1lc3NhZ2UpOwotICAgIE5vZGVMaXN0IGhlYWRlcnMgPQotICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiSGVhZGVyIik7Ci0KLSAgICAvL0lmIGEgaGVhZGVyIG5vdCBwcmVzZW50IHNldCByZXN1bHQgdG8gbm90QXBwbGljYWJsZQotICAgIC8vZWxzZSBwcm9jZXNzIGVhY2ggaGVhZGVyRW50cnkKLSAgICBpZiAoaGVhZGVycy5nZXRMZW5ndGgoKSA8PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgVmVjdG9yIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEVsZW1lbnQgaGVhZGVyID0gKEVsZW1lbnQpIGhlYWRlcnMuaXRlbSgwKTsKLSAgICAgIGlmIChoZWFkZXIgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgIE5vZGVMaXN0IGhlYWRlckVudHJpZXMgPSBoZWFkZXIuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgLy9Gb3IgZWFjaCBoZWFkZXIgZW50cnkgY2hlY2sgcmV0cmVpdmUgdGhlIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZSAKLSAgICAgIC8vaWYgYW55LCBlbHNlIHNldCB0aGUgdGVzdCByZXN1bHQgdG8gbm90QXBwbGljYWJsZQotCi0gICAgICAvL1RoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSBpZiBhIGhlYWRlciBjb250YWluZWQgYW55IGNoaWxkIEVsZW1lbnRzCi0gICAgICBib29sZWFuIGhlYWRlclRhcmdldHMgPSBmYWxzZTsKLQotICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGhlYWRlckVudHJpZXMuZ2V0TGVuZ3RoKCk7ICsraW5kZXgpCi0gICAgICB7Ci0gICAgICAgIE5vZGUgaGVhZGVyRW50cnkgPSBoZWFkZXJFbnRyaWVzLml0ZW0oaW5kZXgpOwotICAgICAgICBpZiAoaGVhZGVyRW50cnkuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgewotICAgICAgICAgIGhlYWRlclRhcmdldHMgPSB0cnVlOwotICAgICAgICAgIEF0dHIgbXVzdFVuZGVyc3RhbmQgPQotICAgICAgICAgICAgKChFbGVtZW50KSBoZWFkZXJFbnRyeSkuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICAgICJtdXN0VW5kZXJzdGFuZCIpOwotICAgICAgICAgIC8vUmV0cmVpdmUgdGhlIHZhbHVlIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUgb2YgdGhlIHJlcXVlc3QuCi0gICAgICAgICAgaWYgKG11c3RVbmRlcnN0YW5kICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG11c3RVbmRlcnN0YW5kVmFsdWUgPSBtdXN0VW5kZXJzdGFuZC5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICAgIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcy5hZGQobXVzdFVuZGVyc3RhbmRWYWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgLy9UaGUgU09BUCBIZWFkZXIgZG9lcyBub3QgY29udGFpbiBhIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZS4iCi0gICAgICAgICAgfSAvLwltdXN0VW5kZXJzdGFuZCAhPSBudWxsCi0gICAgICAgIH0KLSAgICAgIH0gLy9FbmQgZm9yCi0KLSAgICAgIGlmICghaGVhZGVyVGFyZ2V0cykKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgLy9UaGUgU09BUCBIZWFkZXIgZG9lcyBub3QgY29udGFpbiBhbnkgaGVhZGVyIGVudHJpZXMuCi0gICAgICB9Ci0KLSAgICAgIHJldHVybiBtdXN0VW5kZXJzdGFuZEF0dHJpYnV0ZXMudG9BcnJheSgpOwotICAgIH0gLy9FbmQgSWYgaGVhZGVycy5nZXRMZW5ndGgoKSA8IDAJCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgb2JqZWN0IGlzIG11c3QgdW5kZXJzdGFuZCBmYXVsdCBjb2RlLgotICAgKiBAcGFyYW0gZmF1bHRDb2RlRWxlbSB1bmRlcnN0YW5kIGZhdWx0IGNvZGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9iamVjdCBpcyBtdXN0IHVuZGVyc3RhbmQgZmF1bHQgY29kZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTXVzdFVuZGVyc3RhbmRGYXVsdENvZGUoRWxlbWVudCBmYXVsdENvZGVFbGVtKQotICB7Ci0gICAgLy9BIGZhdWx0Y29kZSBtYXkgb3IgbWF5bm90IGhhdmUgYSBwcmVmaXgsIGlmIGl0IGRvZXMgaXRzIG5hbWVzcGFjZSBzaG91bGQgYmUgCi0gICAgLy9odHQ6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIGZhdWx0Y29kZSBlbGVtZW50LgotICAgIC8vSWYgYSBwcmVmaXggaXMgcHJlc2VudCBhbmQgaXQgY29ycmVzcG9uZHMgdG8gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIG9yIGlzIG51bGwgCi0gICAgLy90aGVuIHRoaXMgcmV0dXJucyBmYWxzZS4gIFRoZSBsb2NhbCBwYXJ0IG9mIHRoZSBmYXVsdGNvZGUgaXMgdGhlbiBjaGVjayB0byBzZWUKLSAgICAvL2lmIGl0IGlzIG9uZSBvZiB0aGUgcGVybWl0dGVkIHZhbHVlcy4KLSAgICBpZiAoZmF1bHRDb2RlRWxlbSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIGZhdWx0Q29kZSA9IGZhdWx0Q29kZUVsZW0uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpLnRyaW0oKTsKLSAgICBpZiAoZmF1bHRDb2RlID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmcgZmF1bHRDb2RlRWxlbVByZWZpeCA9IGZhdWx0Q29kZUVsZW0uZ2V0UHJlZml4KCk7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZVByZWZpeCA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoMCwgZmF1bHRDb2RlLmluZGV4T2YoJzonKSk7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZU5hbWUgPQotICAgICAgZmF1bHRDb2RlLnN1YnN0cmluZyhmYXVsdENvZGUuaW5kZXhPZignOicpICsgMSwgZmF1bHRDb2RlLmxlbmd0aCgpKTsKLQotICAgIGlmICgoZmF1bHRDb2RlRWxlbVByZWZpeCAhPSBudWxsIHx8IGZhdWx0Q29kZVByZWZpeCAhPSBudWxsKSkKLSAgICB7Ci0gICAgICBpZiAoZmF1bHRDb2RlUHJlZml4LmVxdWFscyhmYXVsdENvZGVFbGVtUHJlZml4KQotICAgICAgICAmJiAoZmF1bHRDb2RlTmFtZS5lcXVhbHMoIk11c3RVbmRlcnN0YW5kIikKLSAgICAgICAgICB8fCBmYXVsdENvZGVOYW1lLnN0YXJ0c1dpdGgoIk11c3RVbmRlcnN0YW5kLiIpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChmYXVsdENvZGUuZXF1YWxzKCJNdXN0VW5kZXJzdGFuZCIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYWNkNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gICAqIEJQMTMwMi4KLSAgICogVGhlIHNvYXA6ZmF1bHRjb2RlIHZhbHVlIGluIHRoZSBzb2FwOkZhdWx0IGVsZW1lbnQgb2YgdGhlIHJlc3BvbnNlIAotICAgKiBtZXNzYWdlIGlzIG5vdCBjdXN0b20sIGFuZCBpcyBvbmUgb2Y6IFZlcnNpb25NaXNtYXRjaCwgTXVzdFVuZGVyc3RhbmQsIENsaWVudCwgU2VydmVyLgotICAgKi8KLXB1YmxpYyBjbGFzcyBCUDEzMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8vU09BUCBmYXVsdCBjb2RlIHZhbHVlcyBzaG91bGQgbm90IGJlIGN1c3RvbTogb25seSBzdGFuZGFyZCBjb2RlIHF1YWxpZmllcnMgCi0gIC8vYXJlIHVzZWQ6IFZlcnNpb25NaXNtYXRjaCwgTXVzdFVuZGVyc3RhbmQsIENsaWVudCwgU2VydmVyCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvL1N0cmluZyByZXF1ZXN0TWVzc2FnZSA9IG51bGw7Ci0gICAgU3RyaW5nIHJlc3BvbnNlTWVzc2FnZSA9IG51bGw7Ci0KLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL0dldCB0aGUgcmVzcG9uc2UgbWVzc2FnZSBjaGVjayB0aGUgZmF1bHRjb2RlLgotICAgICAgTWVzc2FnZUVudHJ5IGxvZ0VudHJ5UmVzcG9uc2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKTsKLSAgICAgIGlmIChsb2dFbnRyeVJlc3BvbnNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3BvbnNlTWVzc2FnZSA9IGxvZ0VudHJ5UmVzcG9uc2UuZ2V0TWVzc2FnZSgpOwotCi0gICAgICAgIERvY3VtZW50IHRhcmdldERvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlc3BvbnNlTWVzc2FnZSk7Ci0gICAgICAgIE5vZGVMaXN0IGZhdWx0Q29kZXMgPSB0YXJnZXREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZhdWx0Y29kZSIpOwotICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiZmF1bHRjb2RlIik7Ci0KLSAgICAgICAgaWYgKGZhdWx0Q29kZXMuZ2V0TGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAvL05vIGZhdWx0Y29kZQkKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdWx0Q29kZXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgZmF1bHRDb2RlRWxlbSA9IGZhdWx0Q29kZXMuaXRlbShpKTsKLSAgICAgICAgICAvL0lmIHRoZSBmYXVsdGNvZGUgd2FzIE11c3RVbmRlcnN0YW5kLCBjaGVjayB0aGUgdmFsdWUgb2YgCi0gICAgICAgICAgLy90aGUgbXVzdFVuZGVyc3RhbmQgYXR0cmlidXRlIGluIHRoZSByZXF1ZXN0LgotICAgICAgICAgIGlmIChmYXVsdENvZGVFbGVtID09IG51bGwpCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIGVsc2UgaWYgKGZhdWx0Q29kZUVsZW0uZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZEZhdWx0Q29kZSgoRWxlbWVudCkgZmF1bHRDb2RlRWxlbSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwocmVzcG9uc2VNZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgICAvL2ZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAvLyAgICAiVGhlIGZhdWx0Y29kZSB2YWx1ZSB3YXMgOiAiCi0gICAgICAgICAgICAgIC8vICAgICAgICArIGZhdWx0Q29kZUVsZW0uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpLnRyaW0oKTsKLSAgICAgICAgICAgIH0gLy9FbmQgaWYgKGZhdWx0Q29kZS5lcXVhbHMuLi4pCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIH0KLSAgICAgICAgfSAvL0VuZCBmb3IJCi0gICAgICB9IC8vRW5kIGlmIGxvZ0VudHJ5UmVzcG9uc2UhPSBudWxsCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGZhdWx0Q29kZS4KLSAgICogQHBhcmFtIGZhdWx0Q29kZUVsZW0gYSBmYXVsdGNvZGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBmYXVsdGNvZGUgaXMgdmFsaWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkRmF1bHRDb2RlKEVsZW1lbnQgZmF1bHRDb2RlRWxlbSkKLSAgewotICAgIC8vQSBmYXVsdGNvZGUgbWF5IG9yIG1heW5vdCBoYXZlIGEgcHJlZml4LCBpZiBpdCBkb2VzIGl0cyBuYW1lc3BhY2Ugc2hvdWxkIGJlIAotICAgIC8vaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZSB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgZmF1bHRjb2RlIGVsZW1lbnQuCi0gICAgLy9JZiBhIHByZWZpeCBpcyBwcmVzZW50IGFuZCBpdCBjb3JyZXNwb25kcyB0byBhIGRpZmZlcmVudCBuYW1lc3BhY2Ugb3IgaXMgbnVsbCAKLSAgICAvL3RoZW4gdGhpcyByZXR1cm5zIGZhbHNlLiAgVGhlIGxvY2FsIHBhcnQgb2YgdGhlIGZhdWx0Y29kZSBpcyB0aGVuIGNoZWNrIHRvIHNlZQotICAgIC8vaWYgaXQgaXMgb25lIG9mIHRoZSBwZXJtaXR0ZWQgdmFsdWVzLgotICAgIGlmIChmYXVsdENvZGVFbGVtID09IG51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZyBmYXVsdENvZGUgPSBmYXVsdENvZGVFbGVtLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKS50cmltKCk7Ci0gICAgaWYgKGZhdWx0Q29kZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYOiBUaGlzIGlzIG5vdCBjb3JyZWN0LCBzaW5jZSB0aGlzIGVsZW1lbnQgY2FuIG5vdCBiZSBuYW1lc3BhY2UgcXVhbGlmaWVkCi0gICAgU3RyaW5nIGZhdWx0Q29kZUVsZW1QcmVmaXggPSBmYXVsdENvZGVFbGVtLmdldFBhcmVudE5vZGUoKS5nZXRQcmVmaXgoKTsKLQotICAgIC8vIElmIHRoaXMgaXMgbm90IGEgUU5hbWUgdGhlbiByZXR1cm4gZmFsc2UKLSAgICBpbnQgaW5kZXg7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZVByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZU5hbWUgPSBmYXVsdENvZGU7Ci0gICAgaWYgKChpbmRleCA9IGZhdWx0Q29kZS5pbmRleE9mKCc6JykpICE9IC0xKQotICAgIHsKLSAgICAgIGZhdWx0Q29kZVByZWZpeCA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgZmF1bHRDb2RlTmFtZSA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBmYXVsdENvZGUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGlmICgoZmF1bHRDb2RlRWxlbVByZWZpeCAhPSBudWxsICYmIGZhdWx0Q29kZVByZWZpeCAhPSBudWxsKSkKLSAgICB7Ci0gICAgICBpZiAoZmF1bHRDb2RlUHJlZml4LmVxdWFscyhmYXVsdENvZGVFbGVtUHJlZml4KSkKLSAgICAgIHsKLSAgICAgICAgaWYgKChmYXVsdENvZGVOYW1lLmVxdWFscygiTXVzdFVuZGVyc3RhbmQiKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJWZXJzaW9uTWlzbWF0Y2giKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJDbGllbnQiKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJTZXJ2ZXIiKSkpCi0gICAgICAgICAgLyogUkVNT1ZFOgotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikKLSAgICAgICAgICB8fCBmYXVsdENvZGVOYW1lLnN0YXJ0c1dpdGgoIlZlcnNpb25NaXNtYXRjaC4iKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiQ2xpZW50LiIpCi0gICAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJTZXJ2ZXIuIikpKQotICAgICAgICAgICovCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJNdXN0VW5kZXJzdGFuZCIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJWZXJzaW9uTWlzbWF0Y2giKQotICAgICAgICB8fCBmYXVsdENvZGVOYW1lLmVxdWFscygiQ2xpZW50IikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5lcXVhbHMoIlNlcnZlciIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJWZXJzaW9uTWlzbWF0Y2guIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJDbGllbnQuIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJTZXJ2ZXIuIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOWIyYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAgICogQlAxMzA1LgotICAgKiBJdCBpcyBpbiBhbiBIVFRQIDUwMCBtZXNzYWdlIHdpdGggIlNlcnZlciIgRXJyb3IgY29kZS4KLSAgICovCi1wdWJsaWMgY2xhc3MgQlAxMzA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICBOb2RlTGlzdCBmYXVsdExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUKTsKLSAgICAgIGlmICgoZmF1bHRMaXN0ID09IG51bGwpIHx8IChmYXVsdExpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOmZhdWx0Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIHdlIGhhdmUgYSBzb2FwOkZhdWx0LiBDaGVjayB0aGF0IGl0IGlzIGNvbnRhaW5lZCBpbiBhIEhUVFAgNTAwIG1lc3NhZ2UKLSAgICAgICAgLy8gR1QgOiBiYXNlIEhUVFAgSGVhZGVyIHBhcnNpbmcgb24gQlAxMDAxIC0gdGhpcyBzaG91bGQgYmUgZmFjdG9yZWQgdG8gYSAKLSAgICAgICAgLy8gZ2VuZXJhbC1wdXJwb3NlIEhUVFAgbWVzc2FnZSBwYXJzaW5nIG1ldGhvZCBvciBtZXRob2RzIChyZXF1ZXN0ICYgcmVzcG9uc2UpCi0gICAgICAgIFN0cmluZyBodHRwSGVhZGVyID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICAgIC8vUmVzcG9uc2UtTGluZSAgID0gSFRUUC1WZXJzaW9uIFJlc3BvbnNlQ29kZSBSZXNwb25zZU1zZyBTUCBDUkxGCi0gICAgICAgIFZlY3RvciByZXNwb25zZUxpbmUgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotICAgICAgICAvL1N0cmluZyBodHRwVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgIC8vU3RyaW5nIHJlc3BvbnNlQ29kZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBzdGF0dXNDb2RlID0gbnVsbDsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgICAgICBpZiAoaHR0cE1lc3NhZ2VUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgICAgIHN0YXJ0TGluZSA9IGh0dHBNZXNzYWdlVG9rZW5pemVyLm5leHRUb2tlbigpOwotCi0gICAgICAgIGlmIChzdGFydExpbmUuc3RhcnRzV2l0aCgiSFRUUCIpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKHN0YXJ0TGluZSwgIlx1MDAyMCIpOwotCi0gICAgICAgICAgd2hpbGUgKHN0YXJ0TGluZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzcG9uc2VMaW5lLmFkZChzdGFydExpbmVUb2tlbml6ZXIubmV4dFRva2VuKCkpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vaHR0cFZlcnNpb24gPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDApOwotCi0gICAgICAgICAgLy8gUEI6IENoZWNrIGZvciA1MDAgc3RhdHVzIGNvZGUgd2hpY2ggc2hvdWxkIGJlIHRoZSBzZWNvbmQgdG9rZW4gaW4gdGhlIHN0cmluZwotICAgICAgICAgIHN0YXR1c0NvZGUgPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDEpOwotCi0gICAgICAgICAgLy9yZXNwb25zZUNvZGUgPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDEpOwotICAgICAgICAgIC8vc3RhdHVzQ29kZSA9IChTdHJpbmcpIHJlc3BvbnNlTGluZS5nZXQoMik7Ci0gICAgICAgIH0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyBQQjogSnVzdCBjaGVjayBmb3IgNTAwIHN0YXR1cyBjb2RlCi0gICAgICAgICAgaWYgKCFzdGF0dXNDb2RlCi0gICAgICAgICAgICAuZXF1YWxzKFN0cmluZy52YWx1ZU9mKEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfSU5URVJOQUxfRVJST1IpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL2lmICghcmVzcG9uc2VDb2RlLmVxdWFsc0lnbm9yZUNhc2UoIk9LIikgfHwKLSAgICAgICAgICAgIC8vCSghc3RhdHVzQ29kZS5lcXVhbHNJZ25vcmVDYXNlKCJTZXJ2ZXJFcnJvciIpKSkgeyAgICAgCQkJCi0gICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihodHRwSGVhZGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZTQwZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gICAqIEJQMTMwNi4KLSAgICogVGhlIHNvYXA6RmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGNoaWxkcmVuIG90aGVyIHRoYW4gc29hcDpmYXVsdGNvZGUsIHNvYXA6ZmF1bHRzdHJpbmcsIHNvYXA6ZmF1bHRhY3RvciBvciBzb2FwOmRldGFpbC4KLSAgICovCi1wdWJsaWMgY2xhc3MgQlAxMzA2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAJICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICBOb2RlTGlzdCBmYXVsdExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUKTsKLSAgICAgIGlmICgoZmF1bHRMaXN0ID09IG51bGwpIHx8IChmYXVsdExpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOmZhdWx0Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHRoYXQgbm8gc29hcDpmYXVsdCBjb250YWlucyBvbmx5IGZhdWx0Y29kZSwgZmF1bHRzdHJpbmcsIGZhdWx0YWN0b3IsIGRldGFpbC4KLSAgICAgICAgLy8gSWYgaXQgZG9lcywgZnVydGhlciBjaGVjayB0aGF0IGl0IGlzIHVucXVhbGlmaWVkLgotICAgICAgICAvLyBGb3IgZWFjaCA8c29hcDpGYXVsdD4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGZhdWx0TGlzdC5nZXRMZW5ndGgoKTsgbisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoTm9kZSBjaGlsZCA9IGZhdWx0TGlzdC5pdGVtKG4pLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgY2hpbGQgIT0gbnVsbDsKLSAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoKGNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgICAgICAgJiYgIShjaGlsZAotICAgICAgICAgICAgICAgICAgLmdldExvY2FsTmFtZSgpCi0gICAgICAgICAgICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfQ09ERSkKLSAgICAgICAgICAgICAgICAgIHx8IGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoCi0gICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9GQVVMVF9TVFJJTkcpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfQUNUT1IpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBQQjogVGhpcyBpcyBjaGVja2VkIGluIDEzMTYgbm93Ci0gICAgICAgICAgICAgICAgLy98fCAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2ZGQ2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTMwNy4KLSAqIFRoZSBlbGVtZW50cyBvZiB0aGUgbWVzc2FnZSB0aGF0IGFyZSBuYW1lc3BhY2VkIAotICogImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiBkbyBub3QgaGF2ZSBhIHNvYXA6ZW5jb2RpbmdTdHlsZSBhdHRyaWJ1dGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEzMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMDcoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBEb2N1bWVudCBkb2M7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgLy8gb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgfHwgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDp4eHg+IGVsZW1lbnRzOgotICAgICAgTm9kZUxpc3Qgc29hcExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsICIqIik7Ci0gICAgICBpZiAoKHNvYXBMaXN0ID09IG51bGwpIHx8IChzb2FwTGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhbnkgc29hcCBlbnZlbG9wZSBlbGVtZW50cwotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjaGVjayB0aGF0IG5vIDxzb2FwOnh4eD4gZWxlbWVudHMgY29udGFpbnMgYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlCi0gICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOnh4eD4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IHNvYXBMaXN0LmdldExlbmd0aCgpOyBuKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBuZXh0RWxlbSA9IChFbGVtZW50KSBzb2FwTGlzdC5pdGVtKG4pOwotICAgICAgICAgICAgaWYgKG5leHRFbGVtCi0gICAgICAgICAgICAgIC5nZXRBdHRyaWJ1dGVOb2RlTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiZW5jb2RpbmdTdHlsZSIpCi0gICAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIEFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2MwYTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEzMDguCi0gKiBUaGUgY2hpbGRyZW4gZWxlbWVudHMgb2Ygc29hcDpCb2R5IGRvIG5vdCBoYXZlIGEgc29hcDplbmNvZGluZ1N0eWxlIGF0dHJpYnV0ZS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTMwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbWVzc2FnZSBkb2N1bWVudAotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIGxvb2sgZm9yIHNvYXA6Qm9keSBlbGVtZW50czoKLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBFTEVNX1NPQVBfQk9EWS5nZXROYW1lc3BhY2VVUkkoKSwgRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAvLyBUaGUgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGFueSBzb2FwOkJvZHksIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICgoc29hcEJvZHlMaXN0ID09IG51bGwpIHx8IChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIGNoZWNrIHRoYXQgbm8gc29hcDpCb2R5IGNoaWxkIGVsZW1lbnRzIGNvbnRhaW4gYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlCi0gICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBzb2FwOkJvZHkgY2hpbGQgZWxlbWVudAotICAgICAgRWxlbWVudCBjaGlsZCA9Ci0gICAgICAgIFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoKEVsZW1lbnQpIHNvYXBCb2R5TGlzdC5pdGVtKDApKTsKLSAgICAgIHdoaWxlIChjaGlsZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoY2hpbGQuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgIEVMRU1fU09BUF9CT0RZLmdldE5hbWVzcGFjZVVSSSgpLCAiZW5jb2RpbmdTdHlsZSIpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNoaWxkIGVsZW1lbnQgbmFtZSBpcyBcIiIgKwotICAgICAgICAgICAgY2hpbGQuZ2V0Tm9kZU5hbWUoKSArICJcIi4iKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IHNvYXA6Qm9keSBjaGlsZCBlbGVtZW50Ci0gICAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwOS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjNiNmE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogQlAxMzA5LgotICogVGhlIHNvYXA6RW52ZWxvcGUgZG9lcyBub3QgaGF2ZSBkaXJlY3QgY2hpbGRyZW4gYWZ0ZXIgdGhlIHNvYXA6Qm9keSBlbGVtZW50IAotICovCi1wdWJsaWMgY2xhc3MgQlAxMzA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RW52ZWxvcGU+IGVsZW1lbnRzOgotICAgICAgLy8gKE5vdGU6IHNpbmNlIHRoaXMgaXMgYSBTb2FwIG1lc3NhZ2Ugd2UgZXhwZWN0IGV4YWN0bHkgb25lIHNvYXAgZW52ZWxvcGUsIGJ1dCB3ZSBkbyBub3QgYXNzdW1lIGl0KS4KLSAgICAgIE5vZGVMaXN0IHNvYXBFbnZMaXN0ID0KLSAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSk7Ci0gICAgICBpZiAoKHNvYXBFbnZMaXN0ID09IG51bGwpIHx8IChzb2FwRW52TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhbnkgc29hcCBFbnZlbG9wZSBlbGVtZW50KHMpCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHRoYXQgaWYgYSA8c29hcDpCb2R5PiBleGlzdHMgaW4gYSA8c29hcDpFbnZlbG9wZT4sIHRoYXQgaXRzIHRoZSBsYXN0IGluIHRoZSBlbnZlbG9wZSAgICAgICAgCQkgICAgICAJCQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOkVudmVsb3BlPgotICAgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgc29hcEVudkxpc3QuZ2V0TGVuZ3RoKCk7IG4rKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIGluIHRoZSBFbnZlbG9wZSAgICAgICAJCQkJCi0gICAgICAgICAgICBFbGVtZW50IHNvYXBFbnYgPSAoRWxlbWVudCkgc29hcEVudkxpc3QuaXRlbShuKTsKLSAgICAgICAgICAgIE5vZGVMaXN0IGVudkNoaWxkTGlzdCA9IHNvYXBFbnYuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgVmVjdG9yIGVudkNoaWxkRWxlbUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICBmb3IgKGludCB2ID0gMDsgdiA8IGVudkNoaWxkTGlzdC5nZXRMZW5ndGgoKTsgdisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOb2RlIG5leHROb2RlID0gZW52Q2hpbGRMaXN0Lml0ZW0odik7Ci0gICAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW52Q2hpbGRFbGVtTGlzdC5hZGRFbGVtZW50KChFbGVtZW50KSBuZXh0Tm9kZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFNlYXJjaCB0aGUgbGlzdCBmb3IgPHNvYXA6Qm9keT4KLSAgICAgICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwgZW52Q2hpbGRFbGVtTGlzdC5zaXplKCk7IG0rKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCBlbnZDaGlsZEVsZW0gPSAoRWxlbWVudCkgZW52Q2hpbGRFbGVtTGlzdC5lbGVtZW50QXQobSk7Ci0gICAgICAgICAgICAgIGlmIChlbnZDaGlsZEVsZW0KLSAgICAgICAgICAgICAgICAuZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkKLSAgICAgICAgICAgICAgICAmJiBlbnZDaGlsZEVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgPHNvYXA6Qm9keT4gc28gY2hlY2sgaXRzIHRoZSBsYXN0IGluIHRoZSBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBFbnZlbG9wZQotICAgICAgICAgICAgICAgIGlmIChlbnZDaGlsZEVsZW0gIT0gZW52Q2hpbGRFbGVtTGlzdC5sYXN0RWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzE2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NDE4MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEzMTYuCi0gKiBUaGUgc29hcDpGYXVsdCBlbGVtZW50IGNoaWxkcmVuIChzb2FwOmZhdWx0Y29kZSwgc29hcDpmYXVsdHN0cmluZywgc29hcDpmYXVsdGFjdG9yIG9yIHNvYXA6ZGV0YWlsKSBhcmUgdW5xdWFsaWZpZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEzMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMTYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBEb2N1bWVudCBkb2M7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgLy8gb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgfHwgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDpGYXVsdD4gZWxlbWVudDoKLSAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9Ci0gICAgICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotICAgICAgaWYgKChmYXVsdExpc3QgPT0gbnVsbCkgfHwgKGZhdWx0TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHNvYXA6ZmF1bHQKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gY2hlY2sgdGhhdCBubyBzb2FwOmZhdWx0IGNvbnRhaW5zIG9ubHkgZmF1bHRjb2RlLCBmYXVsdHN0cmluZywgZmF1bHRhY3RvciwgZGV0YWlsLgotICAgICAgICAvLyBJZiBpdCBkb2VzLCBmdXJ0aGVyIGNoZWNrIHRoYXQgaXQgaXMgdW5xdWFsaWZpZWQuCi0gICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOkZhdWx0PgotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgZmF1bHRMaXN0LmdldExlbmd0aCgpOyBuKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgZm9yIChOb2RlIGNoaWxkID0gZmF1bHRMaXN0Lml0ZW0obikuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICBjaGlsZCAhPSBudWxsOwotICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICgoY2hpbGQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICAmJiAoY2hpbGQKLSAgICAgICAgICAgICAgICAgIC5nZXRMb2NhbE5hbWUoKQotICAgICAgICAgICAgICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0NPREUpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfU1RSSU5HKQotICAgICAgICAgICAgICAgICAgfHwgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgKLSAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0FDVE9SKQotICAgICAgICAgICAgICAgICAgfHwgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgKLSAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0RFVEFJTCkpCi0gICAgICAgICAgICAgICAgJiYgKGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpICE9IG51bGwpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gQXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzE4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExODA4MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLQkgKiBCUDEzMTgKLQkgKiAKLQkgKiBUaGUgZ3JhbmRjaGlsZHJlbiBlbGVtZW50cyBvZiBzb2FwOkJvZHkgZG8gbm90IGhhdmUgYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlLgotCSAqLwotcHVibGljIGNsYXNzIEJQMTMxOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMxOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBQYXJzZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCByZXNwb25zZURvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgRG9jdW1lbnQgcmVxdWVzdERvYyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0RG9jdW1lbnQoKTsKLQotICAgICAgLy8gbWVzc2FnZXMgYXJlIGVtcHR5IG9yIGludmFsaWQsIERPTSBvYmplY3RzIGFyZSBudWxsCi0gICAgICBpZiAocmVzcG9uc2VEb2MgPT0gbnVsbCB8fCByZXF1ZXN0RG9jID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy9pZiAoaXNGYXVsdChyZXNwb25zZURvYykpCi0gICAgICAvLyAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0IFNPQVBBY3Rpb24KLSAgICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotICAgICAgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gICAgICBpZiAoaGVhZGVycyAhPSBudWxsKQotICAgICAgICBhY3Rpb24gPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhoZWFkZXJzLCAiOiIpLmdldCgiU09BUEFjdGlvbiIudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZCAgICAgICAgICAgICAgICAKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0KLSAgICAgIC8vQ3JlYXRlIHRoZSB0eXBlcyByZWdpc3RyeQotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgICAgLy8gRmluZCBhbiBvcGVyYXRpb24gbWF0Y2ggICAgICAgIAotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIHJlcXVlc3REb2MsCi0gICAgICAgICAgYWN0aW9uLAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgcmVnaXN0cnkpOwotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyBvcGVyYXRpb24gYmFzZWQgb24gdGhlIG1hdGNoCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBtYXRjaC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLy8gSWYgdGhpcyBpcyBub3QgcnBjLWxpdGVyYWwsIHRoZW4gcmV0dXJuIG5vdEFwcGxpY2FibGUgcmVzdWx0Ci0gICAgICBpZiAoIVdTRExVdGlscwotICAgICAgICAuaXNScGNMaXRlcmFsKG1hdGNoLmdldE9wZXJhdGlvblN0eWxlKCksIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6Qm9keT4gZWxlbWVudHM6Ci0gICAgICBOb2RlTGlzdCBzb2FwQm9keUxpc3QgPQotICAgICAgICByZXNwb25zZURvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICBpZiAoKHNvYXBCb2R5TGlzdCA9PSBudWxsKSB8fCAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICAvLyBSZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGFueSBzb2FwIEJvZHkgZWxlbWVudHMKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gY2hlY2sgdGhhdCBubyA8c29hcDpCb2R5PiBjaGlsZCBvciBncmFuZGNoaWxkIGVsZW1lbnRzIGNvbnRhaW5zIGEgc29hcDplbmNvZGluZ1N0eWxlIGF0dHJpYnV0ZQotICAgICAgLy8gRm9yIGVhY2ggPHNvYXA6Qm9keT4KLSAgICAgIGJvb2xlYW4gZ3JhbmRDaGlsZEZvdW5kID0gZmFsc2U7Ci0gICAgICBmb3IgKGludCBuID0gMDsgbiA8IHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKTsgbisrKQotICAgICAgewotICAgICAgICBFbGVtZW50IG5leHRCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbShuKTsKLSAgICAgICAgLy8gUkVNT1ZFOiBUaGlzIHdpbGwgZ2V0IGFsbCBub2RlcyAoY2hpbGQsIGdyYW5kY2hpbGRyZW4sIGV0Yy4pCi0gICAgICAgIC8vTm9kZUxpc3QgY2hpbGRMaXN0ID0gbmV4dEJvZHlFbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0gICAgICAgIE5vZGVMaXN0IGNoaWxkTGlzdCA9IG5leHRCb2R5RWxlbS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGlmIChjaGlsZExpc3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGNoZWNrIGFsbCBjaGlsZCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwgY2hpbGRMaXN0LmdldExlbmd0aCgpOyBtKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGNoaWxkTGlzdC5pdGVtKG0pLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVsZW1lbnQgbmV4dENoaWxkRWxlbSA9IChFbGVtZW50KSBjaGlsZExpc3QuaXRlbShtKTsKLSAgICAgICAgICAgICAgLy8gY2hlY2sgY2hpbGRyZW4gb2YgdGhpcyBjaGlsZAotICAgICAgICAgICAgICAvLyBSRU1PVkU6IFRoaXMgd2lsbCBnZXQgYWxsIG5vZGVzIChjaGlsZCwgZ3JhbmRjaGlsZHJlbiwgZXRjLikKLSAgICAgICAgICAgICAgTm9kZUxpc3QgZ3JhbmRDaGlsZExpc3QgPSBuZXh0Q2hpbGRFbGVtLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGRMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBwID0gMDsgcCA8IGdyYW5kQ2hpbGRMaXN0LmdldExlbmd0aCgpOyBwKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGRMaXN0Lml0ZW0ocCkuZ2V0Tm9kZVR5cGUoKQotICAgICAgICAgICAgICAgICAgICA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIAlncmFuZENoaWxkRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBFbGVtZW50IG5leHRHcmFuZENoaWxkRWxlbSA9Ci0gICAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQpIGdyYW5kQ2hpbGRMaXN0Lml0ZW0ocCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0R3JhbmRDaGlsZEVsZW0KLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgICAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kaW5nU3R5bGUiKQotICAgICAgICAgICAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkIChBREQgaGlnaGxpZ2h0IHRoZSBjaGlsZCBoZXJlID8pCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFncmFuZENoaWxkRm91bmQpCi0gICAgICB7Ci0gICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNjAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDE0YzFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNjAwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLQotLyoqCi0gKiBCUDE2MDAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudmVsb3BlIGNvbmZvcm1zIHRvIHRoZSBzdHJ1Y3R1cmUgc3BlY2lmaWVkIGluIFNPQVAgMS4xIFNlY3Rpb24gNC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxNjAwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxNjAwKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIGlmIChkb2MgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgIAlpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgCQl0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgICBlbHNlIAotICAgICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsb2cgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLiIpOwotICAgICAgfQotICAgICAgLy8gU09BUCAxLjEgc3BlY2lmaWNhdGlvbnMsIFNlY3Rpb24gNC4KLSAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvTk9URS1TT0FQLTIwMDAwNTA4LyNfVG9jNDc4MzgzNDk0Ci0KLSAgICAgIC8vIFRoZSBuYW1lc3BhY2UgaWRlbnRpZmllciBmb3IgdGhlIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGRlZmluZWQKLSAgICAgIC8vIGluIHRoaXMgc2VjdGlvbiBpcyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iLgotCi0gICAgICAvLyAgbyBUaGUgRW52ZWxvcGUgaXMgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBYTUwgZG9jdW1lbnQgcmVwcmVzZW50aW5nIHRoZSBtZXNzYWdlLgotCi0gICAgICAvLyBSdWxlIDEuIEVudmVsb3BlCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBuYW1lIGlzICJFbnZlbG9wZSIuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNVVNUIGJlIHByZXNlbnQgaW4gYSBTT0FQIG1lc3NhZ2UKLSAgICAgIC8vICBvIFRoZSBlbGVtZW50IE1BWSBjb250YWluIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMuCi0gICAgICAvLyAgICBJZiBwcmVzZW50LCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBNVVNUIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQuIFNpbWlsYXJseSwKLSAgICAgIC8vICAgIHRoZSBlbGVtZW50IE1BWSBjb250YWluIGFkZGl0aW9uYWwgc3ViIGVsZW1lbnRzLiBJZiBwcmVzZW50IHRoZXNlIGVsZW1lbnRzCi0gICAgICAvLyAgICBNVVNUIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQgYW5kIE1VU1QgZm9sbG93IHRoZSBTT0FQIEJvZHkgZWxlbWVudC4KLQotICAgICAgLy8gR2V0dGluZyB0aGUgdG9wIGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUgdG9wIGVsZW1lbnQgc2hvdWxkIGJlIHNvYXA6RW52ZWxvcGUKLSAgICAgIC8vIElmIG5vdCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIGlmICghZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0VOVkVMT1BFKQotICAgICAgICB8fCAhaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHRvcCBlbGVtZW50IGlzIG5vdCBzb2FwOkVudmVsb3BlIik7Ci0KLSAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zCi0gICAgICBDb2xsZWN0aW9uIGVudmVsb3BlTmFtZXNwYWNlcyA9IGNvbGxlY3ROYW1lc3BhY2VzKGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpKTsKLSAgICAgIGVudmVsb3BlTmFtZXNwYWNlcy5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUxOUyk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYW4gYXR0cmlidXRlIHRoYXQgaXMgbm90IGluIGFueSBvZiB0aGUgbmFtZXNwYWNlcwotICAgICAgQXR0ciBub3RWYWxpZEF0dHIgPSBnZXROb3RWYWxpZEF0dHIoCi0gICAgICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpLAotICAgICAgICBlbnZlbG9wZU5hbWVzcGFjZXMpOwotCi0gICAgICAvLyBJZiBmb3VuZCBvbmUsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAobm90VmFsaWRBdHRyICE9IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYXR0cmlidXRlICIKLSAgICAgICAgICArIG5vdFZhbGlkQXR0ci5nZXROb2RlTmFtZSgpICsgIiBpcyBub3QgbmFtZXNwYWNlLXF1YWxpZmllZCIpOwotCi0KLSAgICAgIC8vIFJ1bGUgMi4gSGVhZGVyIAotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgbmFtZSBpcyAiSGVhZGVyIi4KLSAgICAgIC8vICBvIFRoZSBlbGVtZW50IE1BWSBiZSBwcmVzZW50IGluIGEgU09BUCBtZXNzYWdlLiBJZiBwcmVzZW50LCB0aGUgZWxlbWVudAotICAgICAgLy8gICAgTVVTVCBiZSB0aGUgZmlyc3QgaW1tZWRpYXRlIGNoaWxkIGVsZW1lbnQgb2YgYSBTT0FQIEVudmVsb3BlIGVsZW1lbnQuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNQVkgY29udGFpbiBhIHNldCBvZiBoZWFkZXIgZW50cmllcyBlYWNoIGJlaW5nIGFuIGltbWVkaWF0ZQotICAgICAgLy8gICAgY2hpbGQgZWxlbWVudCBvZiB0aGUgU09BUCBIZWFkZXIgZWxlbWVudC4gQWxsIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cwotICAgICAgLy8gICAgb2YgdGhlIFNPQVAgSGVhZGVyIGVsZW1lbnQgTVVTVCBiZSBuYW1lc3BhY2UtcXVhbGlmaWVkLgotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBzdWIgZWxlbWVudCBvZiB0aGUgZW52ZWxvcGUKLSAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotICAgICAgQ29sbGVjdGlvbiBoZWFkZXJOYW1lc3BhY2VzID0gY29sbGVjdE5hbWVzcGFjZXMoZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpOwotCi0gICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpIZWFkZXIKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwKLSAgICAgICAgJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0hFQURFUikKLSAgICAgICAgJiYgaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotCi0gICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBIZWFkZXIgZW50cmllcwotICAgICAgICBFbGVtZW50IGhlYWRlckVudHJ5ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLSAgICAgICAgd2hpbGUgKGhlYWRlckVudHJ5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbmFtZXNwYWNlcyBmb3IgdGhlIGN1cnJlbnQgZW50cnkKLSAgICAgICAgICBDb2xsZWN0aW9uIGhlYWRlckVudHJ5TmFtZXNwYWNlcyA9IGNvbGxlY3ROYW1lc3BhY2VzKAotICAgICAgICAgICAgaGVhZGVyRW50cnkuZ2V0QXR0cmlidXRlcygpKTsKLQotICAgICAgICAgIC8vIElmIHRoZSBlbnRyeSBpcyBub3QgaW4gdGhlIG5hbWVzcGFjZXMsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFlbnZlbG9wZU5hbWVzcGFjZXMuY29udGFpbnMoaGVhZGVyRW50cnkuZ2V0TmFtZXNwYWNlVVJJKCkpCi0gICAgICAgICAgICAmJiAhaGVhZGVyTmFtZXNwYWNlcy5jb250YWlucyhoZWFkZXJFbnRyeS5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAgICYmICFoZWFkZXJFbnRyeU5hbWVzcGFjZXMuY29udGFpbnMoaGVhZGVyRW50cnkuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBoZWFkZXIgZW50cnkgIgotICAgICAgICAgICAgICArIGhlYWRlckVudHJ5LmdldE5vZGVOYW1lKCkgKyAiIGlzIG5vdCBuYW1lc3BhY2UtcXVhbGlmaWVkIik7Ci0KLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IEhlYWRlciBlbnRyeQotICAgICAgICAgIGhlYWRlckVudHJ5ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoaGVhZGVyRW50cnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBzdWIgZWxlbWVudCBvZiB0aGUgZW52ZWxvcGUKLSAgICAgICAgZWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKGVsZW1lbnQpOwotICAgICAgfQotCi0KLSAgICAgIC8vIFJ1bGUgMy4gQm9keQotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgbmFtZSBpcyAiQm9keSIuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNVVNUIGJlIHByZXNlbnQgaW4gYSBTT0FQIG1lc3NhZ2UgYW5kIE1VU1QgYmUgYW4gaW1tZWRpYXRlCi0gICAgICAvLyAgICBjaGlsZCBlbGVtZW50IG9mIGEgU09BUCBFbnZlbG9wZSBlbGVtZW50LiBJdCBNVVNUIGRpcmVjdGx5IGZvbGxvdyB0aGUKLSAgICAgIC8vICAgIFNPQVAgSGVhZGVyIGVsZW1lbnQgaWYgcHJlc2VudC4gT3RoZXJ3aXNlIGl0IE1VU1QgYmUgdGhlIGZpcnN0IGltbWVkaWF0ZQotICAgICAgLy8gICAgY2hpbGQgZWxlbWVudCBvZiB0aGUgU09BUCBFbnZlbG9wZSBlbGVtZW50LgotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgTUFZIGNvbnRhaW4gYSBzZXQgb2YgYm9keSBlbnRyaWVzIGVhY2ggYmVpbmcgYW4gaW1tZWRpYXRlCi0gICAgICAvLyAgICBjaGlsZCBlbGVtZW50IG9mIHRoZSBTT0FQIEJvZHkgZWxlbWVudC4gSW1tZWRpYXRlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZQotICAgICAgLy8gICAgU09BUCBCb2R5IGVsZW1lbnQgTUFZIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQuIFNPQVAgZGVmaW5lcyB0aGUgU09BUCBGYXVsdAotICAgICAgLy8gICAgZWxlbWVudCwgd2hpY2ggaXMgdXNlZCB0byBpbmRpY2F0ZSBlcnJvciBtZXNzYWdlcy4KLQotICAgICAgLy8gaWYgdGhlIFNPQVAgQm9keSBlbGVtZW50IGlzIG5vdCBwcmVzZW50ZWQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAoZWxlbWVudCA9PSBudWxsCi0gICAgICAgIHx8ICFlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSkKLSAgICAgICAgfHwgIWlzU09BUE5hbWVzcGFjZShlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBzb2FwOkJvZHkgZWxlbWVudCBpcyBub3QgcHJlc2VudGVkICIKLSAgICAgICAgICArICJvciBmb2xsb3dzIGFuIGFkZGl0aW9uYWwgc3ViIGVsZW1lbnQgb2Ygc29hcDpFbnZlbG9wZSIpOwotCi0gICAgICAvLyBQcm9jZXNzaW5nIGFsbCBvdGhlciBzdWIgZWxlbWVudHMgb2YgdGhlIGVudmVsb3BlCi0gICAgICBlbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoZWxlbWVudCk7Ci0gICAgICB3aGlsZSAoZWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBDaGVja2luZyBmb3IgdGhlIFNPQVAgSGVhZGVyIGVsZW1lbnQKLSAgICAgICAgaWYgKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpCi0gICAgICAgICAgJiYgaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgc29hcDpIZWFkZXIgZWxlbWVudCBjYW5ub3QgZm9sbG93IHRoZSBzb2FwOkJvZHkgZWxlbWVudCIpOwotCi0gICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBuYW1lc3BhY2VzIGZvciB0aGUgY3VycmVudCBlbGVtZW50Ci0gICAgICAgIENvbGxlY3Rpb24gZWxlbWVudE5hbWVzcGFjZXMgPSBjb2xsZWN0TmFtZXNwYWNlcygKLSAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGluIHRoZSBuYW1lc3BhY2VzLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoIWVudmVsb3BlTmFtZXNwYWNlcy5jb250YWlucyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKQotICAgICAgICAgICYmICFlbGVtZW50TmFtZXNwYWNlcy5jb250YWlucyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHN1YiBlbnZlbG9wZSBlbGVtZW50ICIKLSAgICAgICAgICAgICsgZWxlbWVudC5nZXROb2RlTmFtZSgpICsgIiBpcyBub3QgbmFtZXNwYWNlLXF1YWxpZmllZCIpOwotCi0gICAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgc3ViIGVsZW1lbnQgb2YgdGhlIGVudmVsb3BlCi0gICAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0JewotCSAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQl9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgYWxsIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGZyb20gYXR0cmlidXRlcyBjb2xsZWN0aW9uCi0gICAqIEBwYXJhbSBhdHRycyBhbiBhdHRyaWJ1dGVzIGNvbGxlY3Rpb24KLSAgICogQHJldHVybiBhIGNvbGxlY3Rpb24gb2YgbmFtZXNwYWNlcwotICAgKi8KLSAgcHJpdmF0ZSBDb2xsZWN0aW9uIGNvbGxlY3ROYW1lc3BhY2VzKE5hbWVkTm9kZU1hcCBhdHRycykKLSAgewotICAgIENvbGxlY3Rpb24gbnMgPSBuZXcgSGFzaFNldCgpOwotICAgIGlmIChhdHRycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBBdHRyIGF0dHIgPSAoQXR0cikgYXR0cnMuaXRlbShpKTsKLSAgICAgICAgaWYgKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbAotICAgICAgICAgICYmIGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfWE1MTlMpKQotICAgICAgICAgIG5zLmFkZChhdHRyLmdldFZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBuczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZXMgYW4gYXR0cmlidXRlIHRoYXQgaXMgbm90IGluIG5hbWVzcGFjZXMKLSAgICogQHBhcmFtIGF0dHJzIGFuIGF0dHJpYnV0ZXMgY29sbGVjdGlvbgotICAgKiBAcGFyYW0gbnMgYSBuYW1lc3BhY2VzIGNvbGxlY3Rpb24KLSAgICogQHJldHVybiBhbiBhdHRyaWJ0dWUgdGhhdCBpcyBub3QgaW4gYW55IG9mIHRoZSBuYW1lc3BhY2VzIHNwZWNpZmllZAotICAgKi8KLSAgcHJpdmF0ZSBBdHRyIGdldE5vdFZhbGlkQXR0cihOYW1lZE5vZGVNYXAgYXR0cnMsIENvbGxlY3Rpb24gbnMpCi0gIHsKLSAgICBBdHRyIHJldCA9IG51bGw7Ci0gICAgaWYgKGF0dHJzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yKGludCBpID0gMDsgaSA8IGF0dHJzLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEF0dHIgYXR0ciA9IChBdHRyKSBhdHRycy5pdGVtKGkpOwotICAgICAgICBpZiAoYXR0ci5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsCi0gICAgICAgICAgfHwgIW5zLmNvbnRhaW5zKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0ID0gYXR0cjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFF1YWxpZmllcyB3aGV0aGVyIGEgbmFtZXNwYWNlIGlzIHRoZSBTT0FQIG5hbWVzcGFjZQotICAgKiAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAqIEBwYXJhbSBucyBhIG5hbWVzcGFjZSB0byBiZSBxdWFsaWZpZWQKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBuYW1lc3BhY2UgaXMgcXVhbGlmaWVkLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1NPQVBOYW1lc3BhY2UoU3RyaW5nIG5zKQotICB7Ci0gICAgaWYgKG5zID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbnMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDE2MDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlN2M0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0KLS8qKgotICogQlAxNjAxLgotICovCi1wdWJsaWMgY2xhc3MgQlAxNjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxNjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIE9uZS13YXkgcmVzcG9uc2VzIHdpbGwgbm90IGNvbnRhaW4gYSBTT0FQIG1lc3NhZ2UKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBTT0FQIG1lc3NhZ2UKLSAgICAgICAgLy9Eb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICBlLmdldFRhcmdldEV4Y2VwdGlvbigpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2ExYzg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuRE9NMldyaXRlcjsKLQotCi0vKioKLSAqIEJQMTcwMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTcwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTcwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogVXNlIGxvY2FsIGNvcHkgb2Ygc2NoZW1hIGZvciBub3cKLSAgICAgICAgLy8gRG9jdW1lbnQgZG9jID0gWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldExvZ0VudHJ5KCkuZ2V0TWVzc2FnZSgpLCBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVApOwotICAgICAgICAvLyBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TG9nRW50cnkoKS5nZXRNZXNzYWdlKCksICJzY2hlbWFzL3NvYXBFbnZlbG9wZS54c2QiKTsKLQotICAgICAgICAvLyBHZXQgYSBub24tdmFsaWRhdGVkIGJ1dCAod2VsbC1mb3JtZWQpIERPTSB0cmVlIG9mIHRoZSBtZXNzYWdlIGNvbnRlbnQKLSAgICAgICAgRG9jdW1lbnQgZG9jID0KLSAgICAgICAgICBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAvLyBSZW1vdmUgYW55IHhzaTp0eXBlcyBhdHRyaWJ1dGVzIGZyb20gdGhlIG1lc3NhZ2UgKFNPQVAgSGVhZGVyLCBCb2R5IGFuZCBFbnZlbG9wZSBpdHNlbGYpCi0KLSAgICAgICAgTm9kZUxpc3QgZWxlbWVudExpc3QgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLSAgICAgICAgaWYgKGVsZW1lbnRMaXN0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRMaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIGVsZW1lbnRMaXN0Lml0ZW0oaSk7Ci0gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5TKFdTSUNvbnN0YW50cy5OU19VUklfWFNJLCAidHlwZSIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdyaXRlIG91dCB0aGUgKHBvdGVudGlhbGx5KSBtb2RpZmllZCB0cmVlIHRvIFN0cmluZwotICAgICAgICBTdHJpbmcgZmlsdGVyZWRNZXNzYWdlID0gRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoZG9jKTsKLQotICAgICAgICAvLyBQYXJzZSB0aGUgcmVzdWx0IHdpdGggdmFsaWRhdGlvbiAib24iCi0gICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKAotICAgICAgICAgIGZpbHRlcmVkTWVzc2FnZSwKLSAgICAgICAgICBUZXN0VXRpbHMuZ2V0U09BUFNjaGVtYUxvY2F0aW9uKCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBpZiAoZS5nZXRUYXJnZXRFeGNlcHRpb24oKSBpbnN0YW5jZW9mIFNBWEV4Y2VwdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgVXRpbHMuZ2V0RXhjZXB0aW9uRGV0YWlscyhlLmdldFRhcmdldEV4Y2VwdGlvbigpKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUpLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzU1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTc1NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjgzZWUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzU1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQlAxNzU1Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG5vbi1mYXVsdCBlbnZlbG9wZSBjb250YWluaW5nIGEgc29hcDpib2R5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGlzIHJlZmVycmVkIGJ5IGEgYmluZGluZyBzdHlsZSBSUEMtbGl0ZXJhbDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5FYWNoIHBhcnQgYWNjZXNzb3IgZWxlbWVudCBpbiB0aGUgZW52ZWxvcGUgaGFzIGEgbG9jYWwgbmFtZSBvZiB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpwYXJ0IGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTc1NSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDE3NTUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDcmVhdGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIHBvdGVudGlhbCBTT0FQIG9wZXJhdGlvbgotICAgICAgUU5hbWUgb3BlcmF0aW9uUU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIHNvYXBPcGVyYXRpb24uZ2V0TmFtZXNwYWNlVVJJKCksIHNvYXBPcGVyYXRpb24uZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgUlBDIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdmFsaWRhdG9yLmdldE1hdGNoaW5nQmluZGluZ09wcygKLSAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGJpbmRpbmcgb3BlcmF0aW9uIGJ5IGdpdmVuIG9wZXJhdGlvbiBuYW1lCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICBvcGVyYXRpb25RTmFtZSwKLSAgICAgICAgcnBjQmluZGluZ09wZXJhdGlvbnMpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gbWVzc2FnZSBwYXJ0cyBhbmQgZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBudWxsOwotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpKQotICAgICAgewotICAgICAgICBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmdldE9yZGVyZWRQYXJ0cyhudWxsKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICBleHRFbGVtcyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5nZXRPcmRlcmVkUGFydHMobnVsbCk7Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBub3QgbGl0ZXJhbCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCF2YWxpZGF0b3IuaXNMaXRlcmFsKGV4dEVsZW1zKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotCi0gICAgICAvKiBCYXNpYyBQcm9maWxlIFZlcnNpb24gMS4xIChodHRwOi8vd3d3LndzLWkub3JnL1Byb2ZpbGVzL0Jhc2ljLzIwMDMtMTIvQmFzaWNQcm9maWxlLTEuMS5odG0pCi0gICAgICAgKiBzYXlzIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc29hcDpib2R5IG9mIGFuIEVOVkVMT1BFIE1VU1QgYmUKLSAgICAgICAqIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIHdzZGw6cGFydHMgaW4gdGhlIHdzZGw6bWVzc2FnZSB0aGF0IGRlc2NyaWJlcyBpdC4KLSAgICAgICAqIEhvd2V2ZXIsIHdlIHNob3VsZCBrZWVwIGluIG1pbmQgdGhlcmUgaXMgdGhlICJwYXJ0cyIgYXR0cmlidXRlIG9mIHNvYXBiaW5kOmJvZHkKLSAgICAgICAqIHRoYXQgaW5kaWNhdGVzIHdoaWNoIHBhcnRzIGFwcGVhciB3aXRoaW4gdGhlIFNPQVAgQm9keS4gCi0gICAgICAgKi8KLQotICAgICAgLy8gR2V0dGluZyB0aGUgb3JkZXJlZCBsaXN0IG9mIHdzZGw6cGFydCBuYW1lcwotICAgICAgTGlzdCBvcmRlcmVkUGFydE5hbWVzID0KLSAgICAgICAgdmFsaWRhdG9yLm9yZGVyUGFydE5hbWVzKG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cywgZXh0RWxlbXMpOwotICAgICAgSXRlcmF0b3IgaSA9IG9yZGVyZWRQYXJ0TmFtZXMuaXRlcmF0b3IoKTsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGFjY2Vzc29yCi0gICAgICBFbGVtZW50IGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChzb2FwT3BlcmF0aW9uKTsKLSAgICAgIHdoaWxlIChhY2Nlc3NvciAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBhcnQgZWxlbWVudAotICAgICAgICAvLyBmb3IgYW4gYWNjZXNzb3IsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmICghaS5oYXNOZXh0KCkpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAiVGhlIHBhcnQgYWNjZXNzb3IgZWxlbWVudCAnIiArIGFjY2Vzc29yLmdldExvY2FsTmFtZSgpCi0gICAgICAgICAgICArICInIGRvZXMgbm90IGhhdmUgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpwYXJ0IGVsZW1lbnQuIik7Ci0KLSAgICAgICAgLy8gSWYgbG9jYWwgbmFtZSBvZiBhY2Nlc3NvciBkb2VzIG5vdCBlcXVhbCB0byB0aGUgbmFtZSBvZiB0aGUKLSAgICAgICAgLy8gY29ycmVzcG9uZGluZyB3c2RsOnBhcnQgZWxlbWVudCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgU3RyaW5nIHBhcnROYW1lID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgIGlmICghYWNjZXNzb3IuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKHBhcnROYW1lKSkKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJUaGUgYWNjZXNzb3IgbG9jYWwgbmFtZSBpcyAiICsgYWNjZXNzb3IuZ2V0TG9jYWxOYW1lKCkKLSAgICAgICAgICAgICsgIiwgdGhlIGNvcnJlc3BvbmRpbmcgcGFydCBlbGVtZW50IG5hbWUgaXMgIiArIHBhcnROYW1lKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGFjY2Vzc29yCi0gICAgICAgIGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoYWNjZXNzb3IpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUwOWMwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotCi0vKioKLSAqIEJQNDEwMAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlIGNvbnRhaW5pbmcgYSBoZWFkZXIgYmxvY2sgdGhhdCBpcyBlaXRoZXIgbWFuZGF0b3J5IG9yIGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIHdzZGw6YmluZGluZy48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QW4gZW52ZWxvcGUgY29udGFpbnMgYSBoZWFkZXIgYmxvY2sgdGhhdCBpcyBlaXRoZXIgbWFuZGF0b3J5IG9yIGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIHdzZGw6YmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIGhlYWRlciBlbGVtZW50cyBmcm9tIGVudmVsb3BlCi0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsIFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBoZWFkZXIsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChoZWFkZXJMaXN0ID09IG51bGwgfHwgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBoZWFkZXIgZWxlbWVudAotICAgICAgTm9kZSBoZWFkZXIgPSBoZWFkZXJMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICBOb2RlTGlzdCBlbGVtcyA9IGhlYWRlci5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZWxlbXMgPT0gbnVsbCB8fCBlbGVtcy5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBXYWxraW5nIHRocm91Z2ggY2hpbGQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLQotICAgICAgICBpZiAoZWxlbXMuaXRlbShpKS5oYXNBdHRyaWJ1dGVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUKLSAgICAgICAgICBOb2RlIG11Tm9kZSA9IGVsZW1zLml0ZW0oaSkuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbSgKLSAgICAgICAgICAgIHJvb3QuZ2V0UHJlZml4KCkgKyAiOiIgKyBYTUxVdGlscy5TT0FQX0FUVFJfTVVTVF9VTkRFUlNUQU5EKTsKLSAgICAgICAgICAvLyBJZiBhIGhlYWRlciBibG9jayBpcyBtYW5kYXRvcnksIHRoZW4gdGhlIGFzc2VydGlvbiBwYXNzZWQKLSAgICAgICAgICBpZiAobXVOb2RlICE9IG51bGwgJiYgbXVOb2RlLmdldE5vZGVWYWx1ZSgpLmVxdWFscygiMSIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyBoZWFkZXIgYmxvY2sgbmFtZQotICAgICAgICBTdHJpbmcgYmxvY2tOYW1lID0gZWxlbXMuaXRlbShpKS5nZXRMb2NhbE5hbWUoKTsKLSAgICAgICAgLy8gSWYgdGhlIG5hbWUgaXMgbm90IHByZXNlbnRlZCAob2NjdXJzIHdoZW4gZWxlbWVudCBpcyBlbXB0eSBzdHJpbmcpCi0gICAgICAgIC8vIHRoZW4gY29udGludWUgd2l0aCB0aGUgbmV4dCBlbGVtZW50Ci0gICAgICAgIGlmIChibG9ja05hbWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBibG9ja05hbWVFeGlzdHMgPSBmYWxzZTsKLQotICAgICAgICAvLyBHZXR0aW5nIFdTREwgYmluZGluZ3MKLSAgICAgICAgQmluZGluZ1tdIGJpbmRpbmdzID0gdmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldEJpbmRpbmdzKCk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYmluZGluZ3MubGVuZ3RoOyBqKyspIAotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyB3c2RsOm9wZXJhdGlvbnMKLSAgICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBiaW5kaW5nc1tqXS5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgICAgIEl0ZXJhdG9yIGsgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGsuaGFzTmV4dCgpICYmICFibG9ja05hbWVFeGlzdHMpCi0gICAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgay5uZXh0KCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSByZXF1ZXN0IG1lc3NhZ2UsCi0gICAgICAgICAgICAvLyB0aGVuIGdldHRpbmcgd3NkbDppbnB1dCBmb3IgYW4gb3BlcmF0aW9uIAotICAgICAgICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZ0lucHV0IG9wSW5wdXQgPSBvcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgICAgICAgIGlmIChvcElucHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3c2RsOmlucHV0IGlzIHByZXNlbnRlZCB0aGVuIGNoZWNraW5nCi0gICAgICAgICAgICAgICAgLy8gd2hldGhlciB0aGUgYmxvY2sgbmFtZSBpcyBkZXNjcmliZWQgdGhlcmUgb3Igbm90Ci0gICAgICAgICAgICAgICAgYmxvY2tOYW1lRXhpc3RzID0gYmxvY2tOYW1lRXhpc3RzKAotICAgICAgICAgICAgICAgICAgb3BJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgYmxvY2tOYW1lKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UsCi0gICAgICAgICAgICAvLyB0aGVuIGdldHRpbmcgd3NkbDpvdXRwdXQgZm9yIGFuIG9wZXJhdGlvbgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBCaW5kaW5nT3V0cHV0IG9wT3V0cHV0ID0gb3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLSAgICAgICAgICAgICAgaWYgKG9wT3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3c2RsOm91dHB1dCBpcyBwcmVzZW50ZWQgdGhlbiBjaGVja2luZwotICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgdGhlIGJsb2NrIG5hbWUgaXMgZGVzY3JpYmVkIHRoZXJlIG9yIG5vdAotICAgICAgICAgICAgICAgIGJsb2NrTmFtZUV4aXN0cyA9IGJsb2NrTmFtZUV4aXN0cygKLSAgICAgICAgICAgICAgICAgIG9wT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCBibG9ja05hbWUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgYSBoZWFkZXIgYmxvY2sgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgYXBwcm9wcmlhdGUgd3NkbDpiaW5kaW5nCi0gICAgICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBwYXNzZWQKLSAgICAgICAgaWYgKCFibG9ja05hbWVFeGlzdHMpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIE5vIG9uZSBoZWFkZXIgYmxvY2sgaXMgZWl0aGVyIG1hbmRhdG9yeSBvciBpcyBub3QgZGVzY3JpYmVkIGluIHRoZQotICAgICAgLy8gYXBwcm9wcmlhdGUgd3NkbDpiaW5kaW5nLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgdGhlIGV4aXN0ZW5zZSBvZiBibG9ja05hbWUgaW4gd3NkbHNvYXA6aGVhZGVyLCBpZiBpdCBpcyBmb3VuZCBpbgotICAgKiBhIGxpc3Qgb2YgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0cwotICAgKiAKLSAgICogQHBhcmFtIGVsZW1zIEEgbGlzdCBvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3RzCi0gICAqIEBwYXJhbSBibG9ja05hbWUgVGhlIG5hbWUgdGhhdCB3aWxsIGJlIGNoZWNrZWQgZm9yIGV4aXN0ZW5jZQotICAgKiBAcmV0dXJuIHRydWUgaWYgYmxvY2tOYW1lIGlzIGRlc2NyaWJlZCBpbiB0aGUgd3NkbHNvYXA6aGVhZGVyIGV4dGVuc2liaWxpdHkgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGJsb2NrTmFtZUV4aXN0cyhMaXN0IGVsZW1zLCBTdHJpbmcgYmxvY2tOYW1lKQotICB7Ci0gICAgaWYgKGVsZW1zID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEl0ZXJhdG9yIGkgPSBlbGVtcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgIFN0cmluZyBlbGVtTmFtZSA9IGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgIGlmIChlbGVtTmFtZS5lcXVhbHMoImhlYWRlciIpKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgZWxlbTsKLSAgICAgICAgaWYgKHNvYXBIZWFkZXIuZ2V0UGFydCgpLmVxdWFscyhibG9ja05hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkOTNmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBCUDQxMDEKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZSBjb250YWluaW5nIGEgc29hcDphY3RvciBhdHRyaWJ1dGUgd2l0aCBhIHZhbHVlIG90aGVyIHRoYW4gdGhlIHNwZWNpYWwgdXJpICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2FjdG9yL25leHQiLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIGhlYWRlciBlbGVtZW50IGluIHRoZSBlbnZlbG9wZSBjb250YWlucyBhIHNvYXA6YWN0b3IgYXR0cmlidXRlIHdpdGggYSB2YWx1ZSBvdGhlciB0aGFuIHRoZSBzcGVjaWFsIHVyaSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0Ii48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIGhlYWRlciBlbGVtZW50cyBmcm9tIGVudmVsb3BlCi0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsIFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBoZWFkZXIsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChoZWFkZXJMaXN0ID09IG51bGwgfHwgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBoZWFkZXIgZWxlbWVudAotICAgICAgTm9kZSBoZWFkZXIgPSBoZWFkZXJMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICBOb2RlTGlzdCBlbGVtcyA9IGhlYWRlci5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBoZWFkZXIKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChlbGVtcyA9PSBudWxsIHx8IGVsZW1zLmdldExlbmd0aCgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdhbGtpbmcgdGhyb3VnaCBjaGlsZCBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBHZXR0aW5nIG5vZGUgYXR0cmlidXRlcwotICAgICAgICBOYW1lZE5vZGVNYXAgYXR0cnMgPSBlbGVtcy5pdGVtKGkpLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICAvLyBJZiB0aGUgbm9kZSBkb2VzIG5vdCBoYXZlIGF0dHJpYnV0ZXMgdGhlbiBjb250aW51ZQotICAgICAgICBpZiAoYXR0cnMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyBhY3RvciBhdHRyaWJ1dGUKLSAgICAgICAgTm9kZSBhY3RvciA9IGF0dHJzLmdldE5hbWVkSXRlbShyb290LmdldFByZWZpeCgpCi0gICAgICAgICAgKyAiOiIgKyBYTUxVdGlscy5TT0FQX0FUVFJfQUNUT1IpOwotCi0gICAgICAgIC8vIElmIHRoZSBhY3RvciBhdHRyaWJ1dGUgaXMgcHJlc2VudGVkIGFuZCBkb2VzIG5vdCBlcXVhbAotICAgICAgICAvLyB0byAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0IiwKLSAgICAgICAgLy8gdGhlbiB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgICBpZiAoYWN0b3IgIT0gbnVsbAotICAgICAgICAgICYmICFhY3Rvci5nZXROb2RlVmFsdWUoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQX05FWFRfQUNUT1IpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBObyBvbmUgYWN0b3IgYXR0cmlidXRlIGhhcyBhIHZhbHVlIG90aGVyIHRoYW4KLSAgICAgIC8vICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2FjdG9yL25leHQiLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZSAKLSAgICAgIHJlc3VsdCAgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmUxNzkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQlA0MTAyCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGUgY29udGFpbmluZyBhIGZhdWx0IHdpdGggYSBub24tZW1wdHkgZGV0YWlsIGVsZW1lbnQuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgRmF1bHQgZWxlbWVudCBpbiBhbiBlbnZlbG9wZSBjb250YWlucyBhIG5vbi1lbXB0eSBkZXRhaWwgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIEZhdWx0IGVsZW1lbnRzIGZyb20gZW52ZWxvcGUKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBGYXVsdCBlbGVtZW50LCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZmF1bHRMaXN0ID09IG51bGwgfHwgZmF1bHRMaXN0LmdldExlbmd0aCgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEZhdWx0IGVsZW1lbnQgbXVzdCBub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlCi0gICAgICAvLyB3aXRoaW4gYSBCb2R5IGVsZW1lbnQsIHNvIGdldHRpbmcgdGhlIGZpcnN0IG9uZQotICAgICAgRWxlbWVudCBmYXVsdCA9IChFbGVtZW50KSBmYXVsdExpc3QuaXRlbSgwKTsKLQotICAgICAgLy8gR2V0dGluZyBGdWFsdCdzIGRldGFpbCBlbGVtZW50cwotICAgICAgTm9kZUxpc3QgZGV0YWlscyA9IGZhdWx0LmdldEVsZW1lbnRzQnlUYWdOYW1lKAotICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKTsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGRldGFpbCBlbGVtZW50LCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICBpZiAoZGV0YWlscyAhPSBudWxsCi0gICAgICAgICYmIGRldGFpbHMuZ2V0TGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBOb2RlTGlzdCBsaXN0ID0gZGV0YWlscy5pdGVtKDApLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgLy8gc2VhcmNoIGZpcnN0IGVsZW1lbnQgbm9kZSAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZigobGlzdC5pdGVtKGkpLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIAotICAgICAgICAgICYmIChsaXN0Lml0ZW0oaSkuZ2V0TG9jYWxOYW1lKCkgIT0gbnVsbCkgKSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBUaGVyZSBpcyBubyBkZXRhaWwgZWxlbWVudCBpbiBGYXVsdCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvblBhc3NFeGNlcHRpb24gYXBlKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjhkMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQlA0MTA5Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlIGNvbnRhaW5pbmcgYSBzb2FwOkJvZHkgZWxlbWVudCB3aXRoIGF0dHJpYnV0ZXM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QW4gZW52ZWxvcGUgY29udGFpbnMgYSBhIHNvYXA6Qm9keSBlbGVtZW50IHdpdGggYXR0cmlidXRlcy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwOShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBzb2FwOkJvZHkgZWxlbWVudHMgZnJvbSBlbnZlbG9wZQotICAgICAgTm9kZUxpc3QgYm9keUxpc3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEJvZHkgZWxlbWVudCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJvZHlMaXN0ID09IG51bGwgfHwgYm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gR2V0dGluZyB0aGUgZmlyc3Qgc29hcDpCb2R5IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2R5TGlzdC5pdGVtKDApOwotCi0gICAgICAvLyBJZiB0aGUgQm9keSBlbGVtZW50IGhhcyBhdHRyaWJ1dGVzIChleGNsdWRpbmcgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyksCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgTmFtZWROb2RlTWFwIGF0dHJzID0gYm9keS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBpZiAoYXR0cnMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGF0dHJOYW1lID0gKChBdHRyKSBhdHRycy5pdGVtKGkpKS5nZXROYW1lKCk7Ci0gICAgICAgICAgaWYgKCFhdHRyTmFtZS5lcXVhbHMoInhtbG5zIikgJiYgIWF0dHJOYW1lLnN0YXJ0c1dpdGgoInhtbG5zOiIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvRW52ZWxvcGVWYWxpZGF0b3JJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0VudmVsb3BlVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTdiZDA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvRW52ZWxvcGVWYWxpZGF0b3JJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogQHZlcnNpb24gMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnZlbG9wZVZhbGlkYXRvckltcGwKLSAgZXh0ZW5kcyBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICBpbXBsZW1lbnRzIEVudmVsb3BlVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfRU5WRUxPUEU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBjb2xsZWN0aW9uIG9mIGVudHJ5IHR5cGVzIHRoYXQgdGhpcyB2YWxpZGF0b3IgYXBwbGllcyB0by4KLSAgICogQHJldHVybiBhbiBhcnJheSBvZiBlbnRyeSB0eXBlcyAoU3RyaW5ncykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRFbnRyeVR5cGVzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgIFRZUEVfRU5WRUxPUEVfUkVRVUVTVCwKLSAgICAgICAgICAgICAgVFlQRV9FTlZFTE9QRV9SRVNQT05TRSwKLSAgICAgICAgICAgICAgVFlQRV9FTlZFTE9QRV9BTlkKLSAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGVudHJ5IGFuZCB0ZXN0IGFzc2VydGlvbiBoYXZlIHRoZSBzYW1lIHByaW1hcnkgY29udGV4dAotICAgIGlmICgodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfRU5WRUxPUEVfQU5ZKSkKLSAgICAgIHx8ICh0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHMoVFlQRV9FTlZFTE9QRV9SRVFVRVNUKQotICAgICAgICAmJiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldEVudHJ5KCkKLSAgICAgICAgICAuZ2V0RW50cnlUeXBlKCkKLSAgICAgICAgICAuZ2V0VHlwZU5hbWUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkpKQotICAgICAgfHwgKHRlc3RBc3NlcnRpb24uZ2V0RW50cnlUeXBlTmFtZSgpLmVxdWFscyhUWVBFX0VOVkVMT1BFX1JFU1BPTlNFKQotICAgICAgICAmJiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldEVudHJ5KCkKLSAgICAgICAgICAuZ2V0RW50cnlUeXBlKCkKLSAgICAgICAgICAuZ2V0VHlwZU5hbWUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpKSkpCi0gICAgewotICAgICAgbWF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBtYXRjaDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvU1NCUDE2MDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvU1NCUDE2MDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5ZDM1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlAxNjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFNTQlAxNjAxCi0gKi8KLXB1YmxpYyBjbGFzcyBTU0JQMTYwMSBleHRlbmRzIEJQMTYwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQMTYwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlA5NzA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlA5NzA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNTUyNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9TU0JQOTcwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBTU0JQOTcwNAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgRU5WRUxPUEUgZG9lcyBub3QgY29udGFpbiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDk3MDQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQOTcwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbWVzc2FnZSBkb2N1bWVudAotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIHJvb3QgZWxlbWVudAotICAgICAgRWxlbWVudCBlbGVtID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgLy8gSWYgaXQgaXMgbm90IHRoZSBzb2FwOkVudmVsb3BlLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIWVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkKLSAgICAgICAgfHwgIWVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBlbnZlbG9wZSBjb250YWlucyB0aGUgeG1sbnM6eG1sIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBTdHJpbmcgaW5jb3JyZWN0RWxlbWVudE5hbWUgPSBnZXRJbmNvcnJlY3RFbGVtZW50TmFtZShlbGVtKTsKLSAgICAgIGlmIChpbmNvcnJlY3RFbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG5hbWUgb2YgYW4gZWxlbWVudCBjb250YWluaW5nICIKLSAgICAgICAgICArICJzdWNoIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBpcyBcIiIgKyBpbmNvcnJlY3RFbGVtZW50TmFtZSArICJcIi4iKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIExvb2tzIGZvciBhbnkgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLiAKLSAgICogQHBhcmFtIGVsZW0gdGhlIHJvb3QgZWxlbWVudC4KLSAgICogQHJldHVybiB0aGUgbmFtZSBvZiBhbiBlbGVtZW50IGZvdW5kIG9yIG51bGwuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRJbmNvcnJlY3RFbGVtZW50TmFtZShFbGVtZW50IGVsZW0pCi0gIHsKLSAgICAvLyBHZXR0aW5nIGEgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSB4bWxuczp4bWwKLSAgICBTdHJpbmcgYXR0clZhbHVlID0gZWxlbS5nZXRBdHRyaWJ1dGVOUygKLSAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfWE1MTlMsICJ4bWwiKTsKLSAgICAvLyBJZiBpdCBlcXVhbHMgdG8gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsCi0gICAgLy8gcmV0dXJuIGFuIGVsZW1lbnQgbmFtZTsKLSAgICBpZiAoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUwuZXF1YWxzKGF0dHJWYWx1ZSkpCi0gICAgewotICAgICAgcmV0dXJuIGVsZW0uZ2V0Tm9kZU5hbWUoKTsKLSAgICB9Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBlbGVtZW50J3MgY2hpbGRyZW4KLSAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtKTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiBhbnkgb2YgdGhlbSBoYXMgeG1sbnM6eG1sIGF0dHJpYnV0ZSwgcmV0dXJuIGEgdmFsdWUKLSAgICAgIFN0cmluZyBuYW1lID0gZ2V0SW5jb3JyZWN0RWxlbWVudE5hbWUoY2hpbGQpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICB9Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGVsZW1lbnQncyBjaGlsZAotICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgfQotICAgIC8vIE5vIHhtbG5zOnhtbCBhdHRyaWJ1dGVzIGZvdW5kLCByZXR1cm4gbnVsbAotICAgIHJldHVybiBudWxsOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2ZmMzcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDEwMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDEwMDMKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbm9uLW11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UgaW4gdGhlIGxvZyBmaWxlLCB3aGljaCBoYXMgYSBub24tZW1wdHkgZW50aXR5LWJvZHk8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKiAgVGhlIGxvZ2dlZCBTT0FQIGVudmVsb3BlIGlzIGEgVVRGLTggdHJhbnNjcmlwdCBvZiBhbiBlbnZlbG9wZSBvcmlnaW5hbGx5IGVuY29kZWQgYXMgVVRGLTggb3IgVVRGLTE2LiAKLSAqICBUaGUgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyJ3MgY2hhcnNldCB2YWx1ZSBpcyBlaXRoZXIgVVRGLTggb3IgVVRGLTE2LiBMb29raW5nIGF0IHRoZSBtZXNzYWdlQ29udGVudCAKLSAqICBlbGVtZW50IG9mIHRoZSBsb2dnZWQgbWVzc2FnZSwgZWl0aGVyIAotICogICAgKDEpIGl0IGhhcyBhIEJPTSBhdHRyaWJ1dGUgd2hpY2ggbWFwcyB0aGUgY2hhcnNldCB2YWx1ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlciwgb3IgCi0gKiAgICAoMikgaXQgaGFzIGl0IGhhcyBhbiBYTUwgZGVjbGFyYXRpb24gd2hpY2ggbWF0Y2hlcyB0aGUgY2hhcnNldCB2YWx1ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlciwgb3IgCi0gKiAgICAoMykgdGhlcmUgaXMgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MIGRlY2xhcmF0aW9uLCBhbmQgdGhlIGNoYXJzZXQgdmFsdWUgaXMgVVRGLTguCi0gKiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICoKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgQVAxMDAzIGV4dGVuZHMgU1NCUDEwMDMgewotCi0JLyoqCi0JICogQHBhcmFtIGltcGwKLQkgKi8KLQlwdWJsaWMgQVAxMDAzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpIAotCXsKLQkJc3VwZXIoaW1wbCk7Ci0JfQotCi0JcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLQkgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLQkgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0JICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0JewotCSAgLy8gSWYgdGhlcmUgaXMgYSBTT0FQIE1lc3NhZ2Ugd2l0aCBBdHRhY2htZW50cywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotCSAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5pc01pbWVDb250ZW50KCkpCi0JICB7Ci0JICAJcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSwgZmFpbHVyZURldGFpbCk7Ci0JICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZSh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpOwotCSAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ5MDBlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDE5MDIKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIGRlc2NyaXB0aW9uLCBpZiB0aGUgd3NkbDppbnB1dCBvciB3c2RsOm91dHB1dAotICogZWxlbWVudCBpbiB0aGUgd3NkbDpiaW5kaW5nIHNwZWNpZmllcyBXU0RMIE1JTUUgYmluZGluZywgdGhlbiB0aGUgbWVzc2FnZQotICogY2FuIGNvbnRhaW4gU09BUCBhdHRhY2htZW50cy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTAyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYW4gb3BlcmF0aW9uIG1hdGNoZWQgZm9yIGEgbWVzc2FnZQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gdmFsaWRhdG9yLmdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotICAgICAgLy8gSWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgLy8gR2V0dGluZyB0aGUgY29ycmVzcG9uZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBMaXN0IGV4dEVsZW1zOwotICAgICAgU3RyaW5nIHR5cGU7Ci0gICAgICBpZiAoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVAotICAgICAgICAuZXF1YWxzKGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpKSkKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9ICJpbnB1dCI7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9ICJvdXRwdXQiOwotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSBNSU1FIGJpbmRpbmcgaXMgbm90IHVzZWQsIGJ1dCB0aGUgbWVzc2FnZSBoYXMKLSAgICAgIC8vIGF0IGxlYXN0IG9uZSBub24tcm9vdCBNSU1FIHBhcnQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAoIXVzZXNNaW1lQmluZGluZyhleHRFbGVtcykKLSAgICAgICAgJiYgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpLmNvdW50KCkgPiAxKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHdzZGw6IiArIHR5cGUgKyAiIG9mIHRoZSBcIiIKLSAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGZpcnN0IGV4dGVuc2liaWxpdHkgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gdXNlc01pbWVCaW5kaW5nKExpc3QgZXh0RWxlbXMpIHsKLSAgICAvLyBJZiB0aGUgZmlyc3QgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwKLSAgICAvLyByZXR1cm4gdHJ1ZQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsICYmIGV4dEVsZW1zLnNpemUoKSA+IDAKLSAgICAgICYmICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbXMuZ2V0KDApKQotICAgICAgLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9NVUxUSVBBUlQpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODUyOTc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogQVAxOTE1Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJvb3QtcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudGl0eSBib2R5IG9mIHRoZSByb290LXBhcnQgb2YgYQotICogbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSBpcyBzZXJpYWxpemVkIHVzaW5nIGVpdGhlciBVVEYtOCBvciBVVEYtMTYKLSAqIGNoYXJhY3RlciBlbmNvZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTE1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTE1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGdldCBNSU1FIHBhcnRzCi0gICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOyAgICAJCi0gICAgICBNaW1lUGFydCBwYXJ0ID0gbWltZVBhcnRzLmdldFJvb3RQYXJ0KCk7Ci0gICAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgeG1sRW5jb2RpbmcgPSBudWxsOwotICAgICAgICBTdHJpbmcgY2hhcnNldCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKAotICAgICAgICAgIHBhcnQuZ2V0SGVhZGVycygpLAotICAgICAgICAgIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRSwgCi0gICAgICAgICAgImNoYXJzZXQiKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyJ3MgY2hhcnNldCB2YWx1ZSBpcyBlaXRoZXIgVVRGLTggb3IgVVRGLTE2LiAKLSAgICAgICAgICBpZigoY2hhcnNldCAhPSBudWxsKSAmJiAoY2hhcnNldC5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtOCIpIHx8Ci0gICAgICAgICAgICAgIGNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIExvb2tpbmcgYXQgdGhlIG1lc3NhZ2VDb250ZW50IGVsZW1lbnQgb2YgdGhlIGxvZ2dlZCBtZXNzYWdlLCBlaXRoZXIgCi0gICAgICAgICAgICAvLyAoMSkgaXQgaGFzIGEgQk9NIGF0dHJpYnV0ZSB3aGljaCBtYXBzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAgICAgICAgICAgIGludCBib20gPSAwOwotICAgICAgICAgICAgaWYgKChib20gPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0Qk9NKCkpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGOAotICAgICAgICAgICAgICAgICYmICFjaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICAgICAgfHwgKChib20gPT0gV1NJQ29uc3RhbnRzLkJPTV9VVEYxNgotICAgICAgICAgICAgICAgICAgJiYgIWNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKQotICAgICAgICAgICAgICAgIHx8ICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGMTZfQklHX0VORElBTgotICAgICAgICAgICAgICAgICAgJiYgIWNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgQk9NICgiICsgYm9tICsgCi0gICAgICAgICAgICAgICAgICAgICIpIGFuZCBjaGFyc2V0IHZhbHVlICgiICsgY2hhcnNldCArICIpZG8gbm90IG1hdGNoLiIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAoMikgaXQgaGFzIGFuIFhNTCBkZWNsYXJhdGlvbiB3aGljaCBtYXRjaGVzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAgICAgICAgICAgIGVsc2UgaWYgKCgoeG1sRW5jb2RpbmcgPSAKLSAgICAgICAgICAgICAgVXRpbHMuZ2V0WE1MRW5jb2RpbmcocGFydC5nZXRDb250ZW50KCkpKSAhPSBudWxsKSAmJgotICAgICAgICAgICAgICAheG1sRW5jb2RpbmcuZXF1YWxzKCIiKSkgIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZigheG1sRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShjaGFyc2V0KSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgWE1MIGRlY2xhcmF0aW9uIGVuY29kaW5nICgiICsgCi0gICAgICAgICAgICAgICAgICAgIHhtbEVuY29kaW5nICsgIikgYW5kIGNoYXJzZXQgdmFsdWUgKCIgKyBjaGFyc2V0ICsgCi0gICAgICAgICAgICAgICAgICAgICIpIGRvIG5vdCBtYXRjaC4iKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAoMykgdGhlcmUgaXMgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MIGRlY2xhcmF0aW9uLCBhbmQgdGhlIGNoYXJzZXQgdmFsdWUgaXMgVVRGLTguCi0gICAgICAgICAgICBlbHNlIGlmKCFjaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MICIrCi0gICAgICAgICAgICAgICAgICAiZGVjbGFyYXRpb24sIGFuZCB0aGUgY2hhcnNldCB2YWx1ZSBpcyAoIiArIGNoYXJzZXQgKyAiKSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBoZWFkZXIgZG8gbm90IGZvdW5kIG9yIGluY29ycmVjdCBjaGFyc2V0IHZhbHVlCi0gICAgICAgICAgZWxzZSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiRWl0aGVyIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCAiKwotICAgICAgICAgICAgICAgICJwcmVzZW50IGluIHRoZSBSb290IFBhcnQgb3IgYSBjaGFyc2V0IHZhbHVlIGlzIGludmFsaWQuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpIAotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTJkMGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQVAxOTE3Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgY29udGFpbmluZyB6ZXJvIGF0dGFjaG1lbnQgcGFydHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIGNvbnRhaW5pbmcgemVybyBhdHRhY2htZW50IHBhcnRzIGlzIHNlbnQKLSAqIHVzaW5nIGEgY29udGVudC10eXBlIG9mIGVpdGhlciAidGV4dC94bWwiIGFzIHRob3VnaCBhIFNPQVAgSFRUUCBiaW5kaW5nIHdlcmUKLSAqIHVzZWQgb3IgIm11bHRpcGFydC9yZWxhdGVkIiB3aGVuIHRoZSBXU0RMIGRlc2NyaXB0aW9uIGZvciB0aGUgbWVzc2FnZQotICogc3BlY2lmaWVzIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBvbiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0Ci0gKiBvciB3c2RsOm91dHB1dCBlbGVtZW50IGluIGl0cyB3c2RsOmJpbmRpbmcuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkxNyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkxNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBub3QgYXBwbGljYWJsZSBpZiB0aGVyZSBhcmUgYXR0YWNobWVudHMKLSAgICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpLmNvdW50KCkgPiAxKQotICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBjaGVjayBsaXN0Ci0gICAgICBpZigoZXh0RWxlbXMgPT0gbnVsbCkgfHwgKGV4dEVsZW1zLnNpemUoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gZGV0ZXJtaW5lIHR5cGUgCi0gICAgICBib29sZWFuIGlzTXVsdGlQYXJ0ID0gZmFsc2U7Ci0gICAgICAKLSAgICAgIC8vIGlmIE1JTUVNdWx0aXBhcnRSZWxhdGVkIHRoZW4gb25seSByb290LXBhcnQgYWxsb3dlZCAKLSAgICAgIGlmKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIE1JTUVNdWx0aXBhcnRSZWxhdGVkKQotICAgICAgewotICAgICAgICBpZigoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCkpLmdldE1JTUVQYXJ0cygpLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBpc011bHRpUGFydCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICAvLyBlbHNlIGlmIG5vdCBzb2FwYmluZDpib2R5IHJvb3QgZWxlbWVudAotICAgICAgZWxzZSBpZighKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIFNPQVBCb2R5KSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gZ2V0IEhUVFAgY29udGVudCB0eXBlCi0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgICBIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUpOwotIAotICAgICAgLy9hbGxvdyAidGV4dC94bWwiIG9yIAotICAgICAgLy8oIm11bHRpcGFydC9yZWxhdGVkIiBhbmQgIm1pbWU6bXVsdGlwYXJ0UmVsYXRlZCIgV1NETCBiaW5kaW5ncykKLSAgICAgIGlmKChjb250ZW50VHlwZSA9PSBudWxsKSB8fCAKLSAgICAgICAgICghY29udGVudFR5cGUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX01VTFRJUEFSVCkgJiYKLSAgICAgICAgICFjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwpKSB8fAotICAgICAgICAgKChjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfTVVMVElQQVJUKSAmJiAKLSAgICAgICAgICAgICAhaXNNdWx0aVBhcnQpKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBjb250ZW50LXR5cGUgaGVhZGVyIGZpZWxkICAiICsKLSAgICAgICAgICAgICJ2YWx1ZSBcIiIgKyBjb250ZW50VHlwZSArICJcIiBpcyBpbmNvcnJlY3QiKTsKLSAgICAgIH0KLSAgICB9IAotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDFhMmI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MjUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0vKioKLSAqIEFQMTkyNQotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPklmIHRoZSBXU0RMIGRlc2NyaXB0aW9uIGxpc3RzIGF0IGxlYXN0IG9uZSBub24tcm9vdAotICogTUlNRSBwYXJ0LCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2UgaGFzIGEgQ29udGVudC1UeXBlIEhUVFAgaGVhZGVyCi0gKiBmaWVsZC12YWx1ZSB3aXRoIGEgbWVkaWEtdHlwZSBvZiAibXVsdGlwYXJ0L3JlbGF0ZWQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkyNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkyNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotICAKLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoZWQgb3BlcmF0aW9uLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAKLSAgICAgIC8vIEZpbmRpbmcgb3BlcmF0aW9uIGV4dGVuc2liaWxpdHkgZWxlbXMKLSAgICAgIC8vIGluIHRoZSBiaW5kaW5nIGRlcGVuZGluZyBvbiBtZXNzYWdlIHR5cGUKLSAgICAgIExpc3QgZXh0RWxlbXMgPSBudWxsOwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbgotICAgICAgICAgIC5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkKLSAgICAgICAgJiYgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIC8vIGNoZWNrIGxpc3Qgb24gZmlyc3QgZWxlbWVudAotICAgICAgaWYoKGV4dEVsZW1zID09IG51bGwpIHx8IChleHRFbGVtcy5zaXplKCkgPT0gMCkgfHwgCi0gICAgICAgICAhKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIE1JTUVNdWx0aXBhcnRSZWxhdGVkKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAotICAgICAgLy8gZ2V0IGxpc3QgbWltZSBwYXJ0cyBmcm9tIGRlZmluaXRpb24KLSAgICAgIE1JTUVNdWx0aXBhcnRSZWxhdGVkIG1pbWUgPSAoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW1zLmdldCgwKTsKLSAgICAgIExpc3QgcGFydHMgPSBtaW1lLmdldE1JTUVQYXJ0cygpOwotICAgICAgLy8gaWYgcGFydHMgY291bnQgaXMgbW9yZSB0aGFuIG9uZSwgdGhhbiBhc3NlcnRpb24gaXMgbm90QXBwbGljYWJsZQotICAgICAgaWYocGFydHMuc2l6ZSgpIDw9IDEpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgICBIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUpOyAKLSAgICAgIGlmKChjb250ZW50VHlwZSA9PSBudWxsKSB8fCAKLSAgICAgICAgICFjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfTVVMVElQQVJUKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIkluY29ycmVjdCBDb250ZW50LVR5cGUgdmFsdWUgXCIiICsKLSAgICAgICAgICAgIGNvbnRlbnRUeXBlICsgIlwiIGluIEhUVFAgaGVhZGVyIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcnQgdmFsdWUgZnJvbSBNSU1FQ29udGVudCBlbGVtZW50Ci0gICAqIEBwYXJhbSBwYXJ0IE1JTUVQYXJ0IGVsZW1lbnQKLSAgICogQHJldHVybiB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICovCi0gIC8vcHJpdmF0ZSBTdHJpbmcgZ2V0TUlNRUNvbnRlbnRQYXJ0KE1JTUVQYXJ0IHBhcnQpIHsKLSAgLy8gIExpc3QgbGlzdCA9IHBhcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gIC8vICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAvLyAgICByZXR1cm4gbnVsbDsKLSAgLy8gIHJldHVybiAoKE1JTUVDb250ZW50KSBsaXN0LmdldCgwKSkuZ2V0UGFydCgpOwotICAvL30KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTI2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTI2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZjI0ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FVXRpbHM7Ci0KLS8qKgotICogQVAxOTI2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIGluY2x1ZGVzIGFsbCBvZiB0aGUgTUlNRSBwYXJ0cyBkZXNjcmliZWQgYnkKLSAqIGl0cyBXU0RMIE1JTUUgYmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTI2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTI2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBnZXQgbWVzc2FnZSBtaW1lIHBhcnRzCi0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgLy8gY2hlY2sgbGlzdCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQKLSAgICAgIGlmKChleHRFbGVtcyA9PSBudWxsKSB8fCAoZXh0RWxlbXMuc2l6ZSgpID09IDApIHx8IAotICAgICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBsaXN0IG1pbWUgcGFydHMgZnJvbSBkZWZpbml0aW9uCi0gICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtaW1lID0gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICBMaXN0IHBhcnRzID0gbWltZS5nZXRNSU1FUGFydHMoKTsKLQotICAgICAgaWYobWltZVBhcnRzLmdldFJvb3RQYXJ0KCkgPT0gbnVsbCB8fCBtaW1lUGFydHMuY291bnQoKT09MCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIC8vIHNraXAgcm9vdCBwYXJ0Ci0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IHBhcnRzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSBnZXRNSU1FQ29udGVudFBhcnQoKE1JTUVQYXJ0KSBwYXJ0cy5nZXQoaSkpOwotICAgICAgICAvLyBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIE1JTUUgcGFydAotICAgICAgICBpZiAoZmluZE1JTUVQYXJ0KG1pbWVQYXJ0cy5nZXRQYXJ0cygpLCBwYXJ0TmFtZSkgPT0gbnVsbCkgCi0gICAgICAgIHsgICAgICAgICAgICAKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyAiICsKLSAgICAgICAgICAgICAgIm9wZXJhdGlvbiBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArIAotICAgICAgICAgICAgICAiXCIgZG9lcyBub3QgY29udGFpbiBwYXJ0IFwiIiArIHBhcnROYW1lICsgIlwiIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IAotICAgICAgICB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogZmluZCBjb3JyZXNwb25kaW5nIE1JTUUgcGFydAotICAgKiBAcGFyYW0gcGFydHMgYXJyYXkgb2Ygc29hcCBNSU1FIHBhcnRzCi0gICAqIEBwYXJhbSBwYXJ0TmFtZSBwYXJ0IG5hbWUgdG8gZmluZAotICAgKiBAcmV0dXJuIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0ICJDb250ZW50LUlEIiB2YWx1ZSwgCi0gICAqIGlmIHRoZSBwYXJ0IGRvZXNudCBmb3VuZCwgcmV0dW5zIG51bGwKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGZpbmRNSU1FUGFydChDb2xsZWN0aW9uIHBhcnRzLCBTdHJpbmcgcGFydE5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaWYocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICByZXR1cm4gbnVsbDsKLSAgICBJdGVyYXRvciBpcGFydHMgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE1pbWVQYXJ0IHBhcnQgPSAoTWltZVBhcnQpaXBhcnRzLm5leHQoKTsKLSAgICAgIFN0cmluZyBtX3BhcnROYW1lID0gTUlNRVV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgICAgcGFydC5nZXRIZWFkZXJzKCksIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfSUQpOwotCi0gICAgICAvLyBjaGVjayB2YWx1ZSBmb3JtYXQgPHBhcnRuYW1lPVVJREBob3N0PgotICAgICAgaWYgKChtX3BhcnROYW1lICE9IG51bGwpICYmIChtX3BhcnROYW1lLnN0YXJ0c1dpdGgoIjwiKSkgJiYgCi0gICAgICAgICAgKG1fcGFydE5hbWUuaW5kZXhPZigiPSIpICE9IC0xKSAmJiAKLSAgICAgICAgICAoZW5jb2RlUGFydE5hbWUobV9wYXJ0TmFtZS5zdWJzdHJpbmcoMSwgbV9wYXJ0TmFtZS5pbmRleE9mKCI9IikpKS5lcXVhbHMocGFydE5hbWUpKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGFydE5hbWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcnQgdmFsdWUgZnJvbSBNSU1FQ29udGVudCBlbGVtZW50Ci0gICAqIEBwYXJhbSBwYXJ0IE1JTUVQYXJ0IGVsZW1lbnQKLSAgICogQHJldHVybiB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1JTUVDb250ZW50UGFydChNSU1FUGFydCBwYXJ0KSB7Ci0gICAgTGlzdCBsaXN0ID0gcGFydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuICgoTUlNRUNvbnRlbnQpIGxpc3QuZ2V0KDApKS5nZXRQYXJ0KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxY2RmYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQVAxOTMxCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJvb3QtcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudGl0eSBib2R5IG9mIHRoZSByb290LXBhcnQgb2YgbXVsdGlwYXJ0L3JlbGF0ZWQKLSAqIG1lc3NhZ2UgaXMgYSBzb2FwOkVudmVsb3BlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5MzEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gY2hlY2sgZm9yIHRoZSByb290IHBhcnQKLSAgICBpZihlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpICYmCi0gICAgICAgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpICE9IG51bGwpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgLy8gcGFyc2Ugcm9vdCBwYXJ0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpLmdldENvbnRlbnQoKSk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBlbnRpdHkgYm9keQotICAgICAgRWxlbWVudCBlbCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbm90IHNvYXA6RW52ZWxvcGUsIHRoZW4gZmFpbCAgCi0gICAgICBpZighZWwuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFdTSVRhZy5FTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TG9jYWxQYXJ0KCkpIHx8Ci0gICAgICAgICAhZWwuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSVRhZy5FTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgInRoZSBlbnRpdHkgYm9keSBvZiB0aGUgcm9vdCBwYXJ0IGlzIHsiICsKLSAgICAgICAgICAgIGVsLmdldE5hbWVzcGFjZVVSSSgpICsgIn0iICsgZWwuZ2V0TG9jYWxOYW1lKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgICB9IAotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgInRoZSBlbnRpdHkgYm9keSBvZiB0aGUgcm9vdCBwYXJ0IGRvZXMgbm90IGNvbnRhaW4gIiArCi0gICAgICAgICAgICAiXCJzb2FwOkVudmVsb3BlXCIgZWxlbWVudCIsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWMwZmM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQVAxOTMyCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgY29udGFpbmluZyBhIENvbnRlbnQtVHlwZSBIVFRQIGhlYWRlcgotICogZmllbGQtdmFsdWUgd2l0aCBhIG1lZGlhIHR5cGUgb2YgIm11bHRpcGFydC9yZWxhdGVkIjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIG1lc3NhZ2UsIHRoZSBDb250ZW50LVR5cGUgSFRUUCBoZWFkZXIgZmllbGQtdmFsdWUKLSAqIGhhcyBhIHR5cGUgcGFyYW1ldGVyIHdpdGggYSB2YWx1ZSBvZiAidGV4dC94bWwiIHdoZW4gaXQgaGFzIGEgbWVkaWEgdHlwZSBvZgotICogIm11bHRpcGFydC9yZWxhdGVkIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTMyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTMyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGNoZWNrIGZvciBtdWx0aXBhcnQvcmVsYXRlZCBjb250ZW50IHR5cGUKLSAgICBTdHJpbmcgY29udGVudF90eXBlID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLCAKLSAgICAgICAgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFKTsKLSAgICAKLSAgICBpZigoY29udGVudF90eXBlID09IG51bGwpIHx8IAotICAgICAgICghY29udGVudF90eXBlLmVxdWFsc0lnbm9yZUNhc2UoV1NJQ29uc3RhbnRzLkNPTlRFTlRfVFlQRV9NVUxUSVBBUlQpKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0gCi0gICAgZWxzZSAgCi0gICAgewotICAgICAgU3RyaW5nIHN1YlR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwgCi0gICAgICAgICAgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAidHlwZSIpOwotICAgICAgaWYoKHN1YlR5cGUgPT0gbnVsbCkKLSAgICAgICAgfHwgIXN1YlR5cGUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICJUaGUgXCJ0eXBlXCIgcGFyYW1ldGVyIHZhbHVlIGlzIFwiIiArIHN1YlR5cGUgKyAiXCIiLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0OTFmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRVV0aWxzOwotCi0vKioKLSAqIEFQMTkzMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPklmIGEgZGVzY3JpcHRpb24gYmluZHMgYSB3c2RsOm1lc3NhZ2UgcGFydCB0byBhCi0gKiBtaW1lOmNvbnRlbnQgZWxlbWVudCwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQgaW4gYSBtZXNzYWdlIGhhcyBhCi0gKiBjb250ZW50LWlkIGhlYWRlciB3aXRoIGEgZ2xvYmFsbHkgdW5pcXVlIHZhbHVlIG9mIHRoZSBmb3JtCi0gKiAmbHQ7cGFydG5hbWU9SURAaG9zdG5hbWUmZ3Q7LCB3aGVyZSAncGFydG5hbWUnIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YKLSAqIHRoZSB3c2RsOnBhcnQgZWxlbWVudCByZWZlcmVuY2VkIGJ5IHRoZSBtaW1lOmNvbnRlbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkzMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkzMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBnZXQgbWVzc2FnZSBtaW1lIHBhcnRzCi0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgLy8gY2hlY2sgbGlzdCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQKLSAgICAgIGlmKChleHRFbGVtcyA9PSBudWxsKSB8fCAoZXh0RWxlbXMuc2l6ZSgpID09IDApIHx8IAotICAgICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBsaXN0IG1pbWUgcGFydHMgZnJvbSBkZWZpbml0aW9uCi0gICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtaW1lID0gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICBMaXN0IHBhcnRzID0gbWltZS5nZXRNSU1FUGFydHMoKTsKLSAgICAgIAotICAgICAgLy8gc2tpcCByb290IHBhcnQKLSAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldE1JTUVDb250ZW50UGFydCgoTUlNRVBhcnQpIHBhcnRzLmdldChpKSk7Ci0gICAgICAgIC8vIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0Ci0gICAgICAgIGlmIChmaW5kTUlNRVBhcnQobWltZVBhcnRzLmdldFBhcnRzKCksIHBhcnROYW1lKSA9PSBudWxsKSAKLSAgICAgICAgeyAgICAgICAgICAgIAotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY29ycmVzcG9uZGluZyBiaW5kaW5nICIgKwotICAgICAgICAgICAgICAib3BlcmF0aW9uIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgCi0gICAgICAgICAgICAgICJcIiBkb2VzIG5vdCBjb250YWluIHBhcnQgXCIiICsgcGFydE5hbWUgKyAiXCIiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gCi0gICAgICAgIHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIGZpbmQgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQKLSAgICogQHBhcmFtIHBhcnRzIGFycmF5IG9mIHNvYXAgTUlNRSBwYXJ0cwotICAgKiBAcGFyYW0gcGFydE5hbWUgcGFydCBuYW1lIHRvIGZpbmQKLSAgICogQHJldHVybiBjb3JyZXNwb25kaW5nIE1JTUUgcGFydCAiQ29udGVudC1JRCIgdmFsdWUsIAotICAgKiBpZiB0aGUgcGFydCBkb2VzbnQgZm91bmQsIHJldHVucyBudWxsCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBmaW5kTUlNRVBhcnQoQ29sbGVjdGlvbiBwYXJ0cywgU3RyaW5nIHBhcnROYW1lKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24sIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIGlmKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgSXRlcmF0b3IgaXBhcnRzID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgd2hpbGUgKGlwYXJ0cy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgaSA9IGkgKyAxOwotICAgICAgTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgU3RyaW5nIG1fcGFydE5hbWUgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBwYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0KLSAgICAgIC8vIGNoZWNrIHZhbHVlIGZvcm1hdCA8cGFydG5hbWU9VUlEQGhvc3RuYW1lPgotICAgICAgaWYgKChtX3BhcnROYW1lICE9IG51bGwpICYmIG1fcGFydE5hbWUuc3RhcnRzV2l0aCgiPCIpICYmIG1fcGFydE5hbWUuZW5kc1dpdGgoIj4iKSkgCi0gICAgICB7Ci0gICAgICAgIGludCBpZHgsIGF0SWR4OwotICAgICAgICBTdHJpbmcgZW5QYXJ0TmFtZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyB1aWQgPSBudWxsOwotICAgICAgICBTdHJpbmcgaG9zdCA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICAvLyBnZXQgcGFydCBuYW1lIGZyb20gY29udGVudC1pZAotICAgICAgICBpZiAoKGlkeCA9IG1fcGFydE5hbWUuaW5kZXhPZigiPSIpKSAhPSAtMSkgCi0gICAgICAgIHsKLSAgICAgICAgICBlblBhcnROYW1lID0gZW5jb2RlUGFydE5hbWUobV9wYXJ0TmFtZS5zdWJzdHJpbmcoMSwgaWR4KSk7IAotICAgICAgICB9Ci0gICAgICAgIC8vIGdldCB1aWQgYW5kIGhvc3RuYW1lIGZyb20gY29udGVudC1pZAotICAgICAgICBpZiAoKChhdElkeCA9IG1fcGFydE5hbWUuaW5kZXhPZigiQCIpKSAhPSAtMSkgJiYgKGF0SWR4ID4gaWR4KSkgCi0gICAgICAgIHsKLSAgICAgICAgICB1aWQgPSBtX3BhcnROYW1lLnN1YnN0cmluZyhpZHgrMSwgYXRJZHgpOwotICAgICAgICAgIGhvc3QgPSBtX3BhcnROYW1lLnN1YnN0cmluZyhhdElkeCsxLCBtX3BhcnROYW1lLmxlbmd0aCgpLTEpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGlmIHBhcnQgbmFtZXMgbWF0Y2gsIHZhbGlkYXRlIGZvcm1hdAotICAgICAgICBpZigoZW5QYXJ0TmFtZSAhPSBudWxsKSAmJiBlblBhcnROYW1lLmVxdWFscyhwYXJ0TmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZigodWlkID09IG51bGwpIHx8ICh1aWQubGVuZ3RoKCkgPT0gMCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgVUlEIGZvcm1hdCIpOwotICAgICAgICAgIGlmKGhvc3QgPT0gbnVsbCkgCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgaG9zdCBmb3JtYXQiKTsKLSAgICAgICAgICAvLyBjaGVjayBmb3IgbWFsZm9ybWVkIFVSTAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBVUkwoIkhUVFAiLCBob3N0LCAiIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgaG9zdCBmb3JtYXQiKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIG1fcGFydE5hbWU7Ci0gICAgICAgIH0gCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICogQHBhcmFtIHBhcnQgTUlNRVBhcnQgZWxlbWVudAotICAgKiBAcmV0dXJuIHRoZSBwYXJ0IHZhbHVlIGZyb20gTUlNRUNvbnRlbnQgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TUlNRUNvbnRlbnRQYXJ0KE1JTUVQYXJ0IHBhcnQpIAotICB7Ci0gICAgTGlzdCBsaXN0ID0gcGFydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuICgoTUlNRUNvbnRlbnQpIGxpc3QuZ2V0KDApKS5nZXRQYXJ0KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0gIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMwNjA1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVVdGlsczsKLQotLyoqCi0gKiBBUDE5MzQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcgZmllbGQgb2YgYSBwYXJ0IGluIGEKLSAqIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UgaGFzIGEgdmFsdWUgb2YgIjdiaXQiLCAiOGJpdCIsICJiaW5hcnkiLAotICogInF1b3RlZC1wcmludGFibGUiIG9yICJiYXNlNjQiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5MzQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gY2hlY2sgZm9yIG11bHRpcGFydC9yZWxhdGVkIGNvbnRlbnQgdHlwZQotICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIC8vIGdldCBNSU1FIHBhcnRzCi0gICAgICBNaW1lUGFydHMgcGFydHMgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCk7Ci0gICAgICBpZihwYXJ0cy5jb3VudCgpID09IDApIAotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgCUl0ZXJhdG9yIGlwYXJ0cyA9IHBhcnRzLmdldFBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgLy8gY2hlY2sgZWFjaCBwYXJ0IGZvciB0aGUgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyBmaWVsZAotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgICAgIFN0cmluZyB0eXBlX3ZhbHVlID0gTUlNRVV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgICAgICAgIHBhcnQuZ2V0SGVhZGVycygpLAotICAgICAgICAgICAgICBNSU1FQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HKTsKLSAgICAgICAgICBpZiAodHlwZV92YWx1ZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCh0eXBlX3ZhbHVlID09IG51bGwpIHx8ICEodHlwZV92YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCI3Yml0IikgfHwKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoIjhiaXQiKSB8fCAKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpIHx8Ci0gICAgICAgICAgICAgICAgdHlwZV92YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJxdW90ZWQtcHJpbnRhYmxlIikgfHwKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoImJpbmFyeSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAgICIoIiArIChpKzEpICsKLSAgICAgICAgICAgICAgICAgICIpLCBwYXJ0IGhlYWRlciBmaWVsZCBcIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdcIiBoYXMgaW5jb3JyZWN0IHZhbHVlIFwiIisKLSAgICAgICAgICAgICAgICAgIHR5cGVfdmFsdWUrIlwiIiwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjUxZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotLyoqCi0gKiBBUDE5MzUKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVuY29kaW5nIG9mIHRoZSBib2R5IG9mIGEgcGFydCBpbiBhCi0gKiBtdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlIGNvbmZvcm1zIHRvIHRoZSBlbmNvZGluZyBpbmRpY2F0ZWQgYnkgdGhlCi0gKiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGZpZWxkLXZhbHVlLAotICogYXMgc3BlY2lmaWVkIGJ5IFJGQzIwNDUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkzNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkzNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZighZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmlzTWltZUNvbnRlbnQoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0gCi0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAvLyBnZXQgTUlNRSBwYXJ0cwotICAgICAgTWltZVBhcnRzIHBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgaWYocGFydHMuY291bnQoKSA9PSAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjaGVjayBlYWNoIHBhcnQgZm9yIHRoZSBlbmNvZGluZyBtYXRjaAotICAgICAgCUl0ZXJhdG9yIGlwYXJ0cyA9IHBhcnRzLmdldFBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIAlpbnQgaSA9IDA7Ci0gICAgICAJTWltZVBhcnQgcm9vdCA9IHBhcnRzLmdldFJvb3RQYXJ0KCk7Ci0gICAgICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaSA9IDE7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAJTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgICAJCi0gICAgICAgICAgICAvLyBnZXQgZW5jb2RpbmcgZnJvbSBoZWFkZXIKLSAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9ICBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShwYXJ0LmdldEhlYWRlcnMoKSwgCi0gICAgICAgICAgICAJSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElORyk7Ci0gICAgICAgICAgCi0gICAgICAgICAgIAlpZiAoKHBhcnQgPT0gcm9vdCkgfHwgCi0gICAgICAgICAgIAkJKChlbmNvZGluZyAhPSBudWxsKSAmJiBlbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJiYXNlNjQiKSkpCi0gICAgICAgICAgICAgIGNoZWNrUGFydChwYXJ0LCBlbmNvZGluZywgZmFsc2UpOwotICAgICAgICAgIAllbHNlIAotICAgICAgICAgIAkgIGNoZWNrUGFydChwYXJ0LCBlbmNvZGluZywgdHJ1ZSk7Ci0gICAgICAgICAgfSBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICJwYXJ0ICIrKGkrMSkrIiBFcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAvKioKLSAgICogQ2hlY2sgbWVzc2FnZSBlbnRyeSB0byBlbmNvZGluZyBjb25mb3JtaXR5IAotICAgKiBAcGFyYW0gZW50cnkgbWVzc2FnZSBlbnRyeQotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBlbmNvZGluZyBjb25mb3JtaXR5ICAKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tQYXJ0KE1pbWVQYXJ0IHBhcnQsIFN0cmluZyAgZW5jb2RpbmcsIGJvb2xlYW4gZW5jb2RlZCkgCi0gICAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24sIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGNvbnRlbnQgPSBudWxsOwotICAgIGlmIChlbmNvZGVkKQotICAgICAgIGNvbnRlbnQgPSBuZXcgU3RyaW5nKFV0aWxzLmRlY29kZUJhc2U2NChwYXJ0LmdldENvbnRlbnQoKSkpOwotICAgICBlbHNlCi0gICAgCWNvbnRlbnQgPSBwYXJ0LmdldENvbnRlbnQoKTsKLSAgICAKLSAgICBpZihlbmNvZGluZyA9PSBudWxsKSAKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIC8vIGNoZWNrIDdiaXQKLSAgICB9IGVsc2UgaWYoZW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZSgiN2JpdCIpKSB7Ci0gICAgICBjaGVja09uN2JpdChjb250ZW50KTsKLSAgICAvLyBjaGVjayA4Yml0Ci0gICAgfSBlbHNlIGlmKGVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoIjhiaXQiKSkgewotICAgICAgY2hlY2tPbjhiaXQoY29udGVudCk7Ci0gICAgLy8gY2hlY2sgcXVvdGVkLXByaW50YWJsZQotICAgIH0gZWxzZSBpZihlbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJxdW90ZWQtcHJpbnRhYmxlIikpIHsKLSAgICAgIGNoZWNrT25RdW90ZWRQcmludGFibGUoY29udGVudCk7Ci0gICAgLy8gY2hlY2sgYmFzZTY0Ci0gICAgfSBlbHNlIGlmKGVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpKSB7Ci0gICAgICBjaGVja09uQmFzZTY0KGNvbnRlbnQpOwotICAgIH0KLSAgICAvLyB3ZSBkb250IGNoZWNrIGJpbmFyeSBlbmNvZGluZywgc2luY2UgbWVzc2FnZSBjYW4gY29udGFpbnMgYW55IGNoYXJzIAotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgN2JpdCBlbmNvZGVkIG1lc3NhZ2UgKFJGQzIwNDUpCi0gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdG8gY2hlY2sKLSAgICogQHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGlmIG1lc3NhZ2UgZG9lcyBub3QgY29uZm9ybQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT243Yml0KFN0cmluZyBtZXNzYWdlKSAKLSAgICB0aHJvd3MgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gc3RycyA9IHNwbGl0KG1lc3NhZ2UpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Rycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3Ryc1tpXTsKLSAgICAgIAotICAgICAgLy8gY2hlY2sgc3RyaW5nIGxlbmd0aAotICAgICAgaWYoc3RyLmxlbmd0aCgpID4gOTk4KSAKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsZW5ndGggKCIgKyBzdHIubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAiKSBncmVhdGVyIHRoYW4gOTk4Iik7Ci0gICAgICB9Ci0gICAgICAvLyBObyBvY3RldHMgd2l0aCBkZWNpbWFsIHZhbHVlcyBncmVhdGVyIHRoYW4gMTI3Ci0gICAgICAvLyBhcmUgYWxsb3dlZCBhbmQgbmVpdGhlciBhcmUgTlVMcyAob2N0ZXRzIHdpdGggZGVjaW1hbCB2YWx1ZSAwKS4gIENSCi0gICAgICAvLyhkZWNpbWFsIHZhbHVlIDEzKSBhbmQgTEYgKGRlY2ltYWwgdmFsdWUgMTApIG9jdGV0cyBvbmx5IG9jY3VyIGFzCi0gICAgICAvLyBwYXJ0IG9mIENSTEYgbGluZSBzZXBhcmF0aW9uIHNlcXVlbmNlcy4KLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYoKGNoYXJzW2pdID4gMTI3KSB8fCAoY2hhcnNbal0gPT0gMCkgfHwgCi0gICAgICAgICAgICAoY2hhcnNbal0gPT0gMTApIHx8IChjaGFyc1tqXSA9PSAxMykpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNoYXIgKCIgKyBjaGFyc1tqXSArIAotICAgICAgICAgICAgICAiKVtjb2RlPSIgKyAoYnl0ZSkgY2hhcnNbal0gKyAiIHBvc2l0aW9uPSIgKyBqICsgCi0gICAgICAgICAgICAgICJdIGRvZXMgbm90IGFsbG93cyBpbiA3Yml0IGVuY29kaW5nIGNvbnRlbnQiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSBhbiA4Yml0IGVuY29kZWQgbWVzc2FnZSAoUkZDMjA0NSkKLSAgICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0byBjaGVjawotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBjb25mb3JtCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tPbjhiaXQoU3RyaW5nIG1lc3NhZ2UpIAotICAgIHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzdHJzID0gc3BsaXQobWVzc2FnZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdHJzW2ldOwotICAgICAgCi0gICAgICAvLyBjaGVjayBzdHJpbmcgbGVuZ3RoCi0gICAgICBpZihzdHIubGVuZ3RoKCkgPiA5OTgpIAotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGxlbmd0aCAoIiArIHN0ci5sZW5ndGgoKSArIAotICAgICAgICAgICAgIikgb2YgdGhlIGxpbmUgKCIgKyAoaSsxKSArICIpIGdyZWF0ZXIgdGhhbiA5OTgiKTsKLSAgICAgIH0KLSAgICAgIC8vIG9jdGV0cyB3aXRoIGRlY2ltYWwgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMjcKLSAgICAgIC8vIG1heSBiZSB1c2VkLiAgQXMgd2l0aCAiN2JpdCBkYXRhIiBDUiBhbmQgTEYgb2N0ZXRzIG9ubHkgb2NjdXIgYXMgcGFydAotICAgICAgLy8gb2YgQ1JMRiBsaW5lIHNlcGFyYXRpb24gc2VxdWVuY2VzIGFuZCBubyBOVUxzIGFyZSBhbGxvd2VkLiAKLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYoKGNoYXJzW2pdID09IDApIHx8IChjaGFyc1tqXSA9PSAxMCkgfHwgKGNoYXJzW2pdID09IDEzKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY2hhciAoIiArIGNoYXJzW2pdICsgCi0gICAgICAgICAgICAgICIpW2NvZGU9IiArIChieXRlKSBjaGFyc1tqXSArICIgcG9zaXRpb249IiArIGogKyAKLSAgICAgICAgICAgICAgIl0gZG9lcyBub3QgYWxsb3dzIGluIDhiaXQgZW5jb2RpbmcgY29udGVudCIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgcXVvdGVkLXByaW50YWJsZSBlbmNvZGVkIG1lc3NhZ2UgKFJGQzIwNDUpCi0gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdG8gY2hlY2sKLSAgICogQHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGlmIG1lc3NhZ2UgZG9lcyBub3QgY29uZm9ybQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT25RdW90ZWRQcmludGFibGUoU3RyaW5nIG1lc3NhZ2UpCi0gICAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHN0cnMgPSBzcGxpdChtZXNzYWdlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gY2hlY2sgbGVuZ3RoCi0gICAgICAvLyBSRkMyMDQ1Ci0gICAgICAvLyAoNSkgICAoU29mdCBMaW5lIEJyZWFrcykgVGhlIFF1b3RlZC1QcmludGFibGUgZW5jb2RpbmcKLSAgICAgIC8vUkVRVUlSRVMgdGhhdCBlbmNvZGVkIGxpbmVzIGJlIG5vIG1vcmUgdGhhbiA3NgotICAgICAgLy9jaGFyYWN0ZXJzIGxvbmcuICBJZiBsb25nZXIgbGluZXMgYXJlIHRvIGJlIGVuY29kZWQKLSAgICAgIC8vd2l0aCB0aGUgUXVvdGVkLVByaW50YWJsZSBlbmNvZGluZywgInNvZnQiIGxpbmUgYnJlYWtzCi0gICAgICAvL211c3QgYmUgdXNlZC4gIEFuIGVxdWFsIHNpZ24gYXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9uIGEKLSAgICAgIC8vZW5jb2RlZCBsaW5lIGluZGljYXRlcyBzdWNoIGEgbm9uLXNpZ25pZmljYW50ICgic29mdCIpCi0gICAgICAvL2xpbmUgYnJlYWsgaW4gdGhlIGVuY29kZWQgdGV4dC4KLSAgICAgIGlmKCgoc3Ryc1tpXS5pbmRleE9mKCJcdCIpICE9IC0xKSB8fCAoc3Ryc1tpXS5pbmRleE9mKCIgIikgIT0gLTEpKSAmJgotICAgICAgICAgIChzdHJzW2ldLmxlbmd0aCgpID4gNzYpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGxlbmd0aCAoIiArIHN0cnNbaV0ubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAKLSAgICAgICAgICAgICIpIGdyZWF0ZXIgdGhhbiA3NiwgXCJzb2Z0XCIgbGluZSBicmVha3MgbXVzdCBiZSB1c2VkIik7Ci0gICAgICB9Ci0KLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0cnNbaV0udG9DaGFyQXJyYXkoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hhcnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIC8vKDEpICAgKEdlbmVyYWwgOGJpdCByZXByZXNlbnRhdGlvbikgQW55IG9jdGV0LCBleGNlcHQgYSBDUiBvcgotICAgICAgICAvL0xGIHRoYXQgaXMgcGFydCBvZiBhIENSTEYgbGluZSBicmVhayBvZiB0aGUgY2Fub25pY2FsCi0gICAgICAgIC8vKHN0YW5kYXJkKSBmb3JtIG9mIHRoZSBkYXRhIGJlaW5nIGVuY29kZWQsIG1heSBiZQotICAgICAgICAvL3JlcHJlc2VudGVkIGJ5IGFuICI9IiBmb2xsb3dlZCBieSBhIHR3byBkaWdpdAotICAgICAgICAvL2hleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvY3RldCdzIHZhbHVlLiAgVGhlCi0gICAgICAgIC8vZGlnaXRzIG9mIHRoZSBoZXhhZGVjaW1hbCBhbHBoYWJldCwgZm9yIHRoaXMgcHVycG9zZSwKLSAgICAgICAgLy9hcmUgIjAxMjM0NTY3ODlBQkNERUYiLiAgVXBwZXJjYXNlIGxldHRlcnMgbXVzdCBiZQotICAgICAgICAvL3VzZWQ7IGxvd2VyY2FzZSBsZXR0ZXJzIGFyZSBub3QgYWxsb3dlZC4gIFRodXMsIGZvcgotICAgICAgICAvL2V4YW1wbGUsIHRoZSBkZWNpbWFsIHZhbHVlIDEyIChVUy1BU0NJSSBmb3JtIGZlZWQpIGNhbgotICAgICAgICAvL2JlIHJlcHJlc2VudGVkIGJ5ICI9MEMiLCBhbmQgdGhlIGRlY2ltYWwgdmFsdWUgNjEgKFVTLQotICAgICAgICAvL0FTQ0lJIEVRVUFMIFNJR04pIGNhbiBiZSByZXByZXNlbnRlZCBieSAiPTNEIi4gIFRoaXMKLSAgICAgICAgLy9ydWxlIG11c3QgYmUgZm9sbG93ZWQgZXhjZXB0IHdoZW4gdGhlIGZvbGxvd2luZyBydWxlcwotICAgICAgICAvL2FsbG93IGFuIGFsdGVybmF0aXZlIGVuY29kaW5nLgotICAgICAgICAvLyAoMikgICAoTGl0ZXJhbCByZXByZXNlbnRhdGlvbikgT2N0ZXRzIHdpdGggZGVjaW1hbCB2YWx1ZXMgb2YKLSAgICAgICAgLy8zMyB0aHJvdWdoIDYwIGluY2x1c2l2ZSwgYW5kIDYyIHRocm91Z2ggMTI2LCBpbmNsdXNpdmUsCi0gICAgICAgIC8vTUFZIGJlIHJlcHJlc2VudGVkIGFzIHRoZSBVUy1BU0NJSSBjaGFyYWN0ZXJzIHdoaWNoCi0gICAgICAgIC8vY29ycmVzcG9uZCB0byB0aG9zZSBvY3RldHMgKEVYQ0xBTUFUSU9OIFBPSU5UIHRocm91Z2gKLSAgICAgICAgLy9MRVNTIFRIQU4sIGFuZCBHUkVBVEVSIFRIQU4gdGhyb3VnaCBUSUxERSwKLSAgICAgICAgLy9yZXNwZWN0aXZlbHkpLgotICAgICAgICBpZigoY2hhcnNbal0gPT0gNjEpICYmIChjaGFycy5sZW5ndGggPiBqKzIpKSAKLSAgICAgICAgewotICAgICAgICAgIGlmKCFpc0hleChjaGFyc1tqKzFdKSB8fCAhaXNIZXgoY2hhcnNbaisyXSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInRoZSBxdW90ZWQgY2hhciAoIiArIAotICAgICAgICAgICAgICAgICBjaGFyc1tqXSArIGNoYXJzW2orMV0gKyBjaGFyc1tqKzJdICsgIikgaXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGogKz0gMjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBhbmQgdGFiCi0gICAgICAgIGVsc2UgaWYoKGNoYXJzW2pdICE9IDkpICYmIChjaGFyc1tqXSAhPSAzMikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBjaGVjayBpbnZhbGlkIHN5bWJvbAotICAgICAgICAgIGlmKChjaGFyc1tqXSA9PSAwKSB8fCAoY2hhcnNbal0gPT0gMTApIHx8IChjaGFyc1tqXSA9PSAxMykgfHwKLSAgICAgICAgICAgICAoY2hhcnNbal0gPCAzMykgfHwgKGNoYXJzW2pdID4gMTI2KSB8fCAoY2hhcnNbal0gPT0gNjEpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY2hhciAoIiArIGNoYXJzW2pdICsgCi0gICAgICAgICAgICAgICAgIilbY29kZT0iICsgKGJ5dGUpIGNoYXJzW2pdICsgIiBwb3NpdGlvbj0iICsgaiArIAotICAgICAgICAgICAgICAgICJdIG11c3QgYmUgcXVvdGVkIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgYmFzZTY0IGVuY29kZWQgbWVzc2FnZSAoUkZDMzU0OCkKLSAgICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0byBjaGVjawotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBjb25mb3JtCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tPbkJhc2U2NChTdHJpbmcgbWVzc2FnZSkKLSAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHN0cnMgPSBzcGxpdChtZXNzYWdlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0cnNbaV07Ci0gICAgICAKLSAgICAgIC8vIGNoZWNrIHN0cmluZyBsZW5ndGgKLSAgICAgIGlmKHN0ci5sZW5ndGgoKSA+IDc2KSAKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsZW5ndGggKCIgKyBzdHIubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAiKSBncmVhdGVyIHRoYW4gOTk4Iik7Ci0gICAgICB9Ci0gICAgICAvLyBjaGVjayBmb3IgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkvKyIKLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgY2hhciBjID0gY2hhcnNbaV07Ci0gICAgICAgIGlmKChjIDwgNDcpIHx8IChjID4gMTIyKSB8fCAoKGMgPiA1NykgJiYgKGMgPCA2NSkpIHx8IAotICAgICAgICAgICAoKGMgPiA5MCkgJiYgKGMgPCA5NykpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBjaGFyICgiICsgY2hhcnNbal0gKyAKLSAgICAgICAgICAgICAgIilbY29kZT0iICsgKGJ5dGUpIGNoYXJzW2pdICsgIiBwb3NpdGlvbj0iICsgaiArIAotICAgICAgICAgICAgICAiXSBkb2VzIG5vdCBhbGxvd3MgaW4gYmFzZTY0IGVuY29kaW5nIGNvbnRlbnQiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIHNwbGl0IHN0cmluZyB0byBhcnJheSBvZiBzdHJpbmdzIGFuZCB1c2UgYXMgZGVsaW1ldGVyIENSTEYKLSAgICogQHBhcmFtIHN0ciBvcmlnaW5hbCBzdHJpbmcKLSAgICogQHJldHVybiBhcnJheSBvZiBzdHJpbmdzCi0gICAqLwotICBwcml2YXRlIFN0cmluZ1tdIHNwbGl0KFN0cmluZyBzdHIpCi0gIHsKLSAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IoaW50IGlkeCA9IHN0ci5pbmRleE9mKCJcclxuIik7IGlkeCAhPSAtMTsgaWR4ID0gc3RyLmluZGV4T2YoIlxyXG4iKSkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChzdHIuc3Vic3RyaW5nKDAsIGlkeCkpOwotICAgICAgc3RyID0gc3RyLnN1YnN0cmluZyhpZHgrMik7Ci0gICAgfQotICAgIGxpc3QuYWRkKHN0cik7Ci0gICAgcmV0dXJuIChTdHJpbmdbXSkgbGlzdC50b0FycmF5KG5ldyBTdHJpbmdbbGlzdC5zaXplKCldKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBieXRlIGlzICIwMTIzNDU2Nzg5QUJDREVGIiByYW5nZSwgZmFsc2Ugb3RoZXdpc2UKLSAgICogQHBhcmFtIGMgY2hhcgotICAgKiBAcmV0dXJuIHRydWUgaWYgYnl0ZSBpcyAiMDEyMzQ1Njc4OUFCQ0RFRiIgcmFuZ2UsIGZhbHNlIG90aGV3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNIZXgoY2hhciBjKSB7Ci0gICAgcmV0dXJuICgoKGMgPj0gNDgpICYmIChjIDw9IDU3KSkgfHwgKChjID49IDY1KSAmJiAoYyA8PSA3MCkpKTsgCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOGFlNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAxOTM2Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIG1lc3NhZ2UsIGFsbCBNSU1FIGVuY2Fwc3VsYXRpb24gYm91bmRhcnkgc3RyaW5ncyAKLSAqIGFyZSBwcmVjZWRlZCB3aXRoIHRoZSBhc2NpaSBjaGFyYWN0ZXJzIENSICgxMykgYW5kIExGICgxMCkgCi0gKiBpbiB0aGF0IHNlcXVlbmNlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBBUDE5MzYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gaWYgYm91bmRhcnkgZXF1YWxzIG51bGwsIHRoZW4gcmVzdWx0IGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAgICAKLSAgICAvLyBvdGhlcndpc2UgaXQgaXMgdHJ1ZSAtLSBjaGVja2VkIGluIG1vbml0b3IKLSAgICAvLyBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgIC8vIEl0ZXJhdG9yIGkgPSBtaW1lUGFydHMuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgIC8vIGJvb2xlYW4gaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQgPSBmYWxzZTsKLSAgICAvL3doaWxlIChpLmhhc05leHQoKSAmJiAhaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQpCi0gICAgLy97Ci0gICAgLy8JTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpLm5leHQoKTsKLSAgICAvLwlTdHJpbmdbXSBib3VuZGFyaWVzID0gcGFydC5nZXRCb3VuZGFyeVN0cmluZ3MoKTsKLSAgICAvLwlmb3IgKGludCBqID0gMDsgajxib3VuZGFyaWVzLmxlbmd0aDsgaisrKQotICAgIC8vCXsKLSAgICAvLwkJaWYgKCFib3VuZGFyaWVzW2pdLnN0YXJ0c1dpdGgoIiYjeGQ7XG4iKSkKLSAgICAvLwkJewotICAgIC8vCQkJaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQgPSB0cnVlOwotICAgIC8vCQkJcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgLy8JCQlmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoYm91bmRhcmllc1tqXSwgZW50cnlDb250ZXh0KTsKLSAgICAvLwkJCWJyZWFrOwotICAgIC8vCQl9Ci0gICAgLy8JfQotICAgIC8vfQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Mi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmI3OTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5NDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEFQMTk0MgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBwYXJ0IG9mIGEgbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSB0aGF0IGlzIGJvdW5kCi0gKiB0byBhIG1pbWU6Y29udGVudCB0aGF0IHJlZmVycyB0byBnbG9iYWwgZWxlbWVudCBkZWNsYXJhdGlvbiAodmlhIHRoZSBlbGVtZW50Ci0gKiBhdHRyaWJ1dGUgb2YgdGhlIHdzZGw6cGFydCBlbGVtZW50KTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgYm91bmQgbWVzc2FnZSBwYXJ0IGlzIHNlcmlhbGl6ZWQgd2l0aGluIHRoZSBNSU1FCi0gKiBwYXJ0IGFzIGEgc2VyaWFsaXphdGlvbiBvZiBhbiBYTUwgaW5mb3NldCB3aG9zZSByb290IGVsZW1lbnQgaXMgZGVzY3JpYmVkIGJ5Ci0gKiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5NDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5NDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgCXRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKTsKLSAgICAgIAotICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIG5vbi1yb290IE1JTUUgcGFydHMKLSAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgICBpZiAobWltZVBhcnRzLmNvdW50KCk8IDIpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAotICAgICAgICAvLyBHZXR0aW5nIGFuIG9wZXJhdGlvbiBtYXRjaGVkIGZvciBhIG1lc3NhZ2UKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gdmFsaWRhdG9yLmdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKTsKLSAgICAgICAgLy8gSWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAgIC8vIEdldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBhbmQgbWVzc2FnZQotICAgICAgICBMaXN0IGV4dEVsZW1zOwotICAgICAgICBNZXNzYWdlIG1lc3NhZ2U7Ci0gICAgICAgIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUCi0gICAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8gbWltZTpjb250ZW50IGVsZW1lbnQgdGhhdCByZWZlcnMgdG8gZ2xvYmFsIGVsZW1lbnQgZGVjbGFyYXRpb24gCi0gICAgICAgIGJvb2xlYW4gbWltZUNvbnRlbnRGb3VuZCA9IGZhbHNlOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBtZXNzYWdlIE1JTUUgcGFydHMKLSAgICAgICAgSXRlcmF0b3IgaU1pbWVQYXJ0cyA9IG1pbWVQYXJ0cy5nZXRQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgd2hpbGUgKGlNaW1lUGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAJICBpID0gaSArIDE7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhIE1JTUUgcGFydAotICAgICAgICAgIE1pbWVQYXJ0IG1pbWVQYXJ0ID0gKE1pbWVQYXJ0KWlNaW1lUGFydHMubmV4dCgpOwotICAgICAgICAgIC8vIEdldHRpbmcgYSBwYXJ0IG5hbWUgZm9ybSB0aGUgQ29udGVudC1JRCBoZWFkZXIKLSAgICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICAgIG1pbWVQYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaW50IGlkeCA9IHBhcnROYW1lLmluZGV4T2YoIj0iKTsKLSAgICAgICAgICAgIGlmKChpZHggIT0gLTEpICYmIHBhcnROYW1lLnN0YXJ0c1dpdGgoIjwiKSkKLSAgICAgICAgICAgICAgcGFydE5hbWUgPSBlbmNvZGVQYXJ0TmFtZShwYXJ0TmFtZS5zdWJzdHJpbmcoMSwgaWR4KSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb3VsZCBub3QgZXh0cmFjdCBhIHBhcnQgbmFtZSBmcm9tIHRoZSBoZWFkZXIsCi0gICAgICAgICAgICAvLyBwcm9jZWVkIHdpdGggdGhlIG5leHQgTUlNRSBwYXJ0Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSBhIG1pbWU6Y29udGVudCBlbGVtZW50Ci0gICAgICAgICAgaWYgKGJvdW5kVG9NaW1lQ29udGVudChleHRFbGVtcywgcGFydE5hbWUpICYmIG1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQKLSAgICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBtZXNzYWdlLmdldFBhcnRzKCkuZ2V0KHBhcnROYW1lKTsKLSAgICAgICAgICAgIFFOYW1lIHJlZk5hbWU7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgcGFydCByZWZlcnMgdG8gZ2xvYmFsIGVsZW1lbnQgZGVjbGFyYXRpb24KLSAgICAgICAgICAgIGlmIChwYXJ0ICE9IG51bGwgJiYgKHJlZk5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1pbWVDb250ZW50Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAvLyBUcnlpbmcgdG8gcGFyc2UgcGFydCBjb250ZW50Ci0gICAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IG51bGw7Ci0gICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZG9jID0gWE1MVXRpbHMucGFyc2VYTUwobWltZVBhcnQuZ2V0Q29udGVudCgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBhbiBYTUwgaW5mb3NldCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBib3VuZCBtZXNzYWdlIHBhcnQgb2YgdGhlICIKLSAgICAgICAgICAgICAgICAgICsgIk1JTUUgcGFydCBudW1iZXIgIiArIChpICsgMSkgKyAiIGlzIGludmFsaWQgWE1MIGluZm9zZXQuIik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBRTmFtZSBvYmplY3Qgb2YgdGhlIHJvb3QgZWxlbWVudAotICAgICAgICAgICAgICBRTmFtZSByb290TmFtZSA9IG5ldyBRTmFtZSgKLSAgICAgICAgICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICAgICAgZG9jLmdldERvY3VtZW50RWxlbWVudCgpLmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgLy8gSWYgdGhlIG5hbWVzIG9mIHRoZSByb290IGVsZW1lbnQgYW5kIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQKLSAgICAgICAgICAgICAgLy8gYXJlIG5vdCBlcXVhbCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgaWYgKCFyZWZOYW1lLmVxdWFscyhyb290TmFtZSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHJvb3QgZWxlbWVudCBuYW1lIGlzICIKLSAgICAgICAgICAgICAgICAgICsgcm9vdE5hbWUgKyAiLCB0aGUgbmFtZSBvZiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGlzICIKLSAgICAgICAgICAgICAgICAgICsgcmVmTmFtZSArICIuIik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgbm8gbWltZTpjb250ZW50UyBmb3VuZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgICBpZiAoIW1pbWVDb250ZW50Rm91bmQpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHdoZXRoZXIgYSBwYXJ0IGlzIGJvdW5kIGJ5IGEgbWltZTpjb250ZW50IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHBhcmFtIHBhcnQgYSBwYXJ0IG5hbWUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhIHBhcnQgaXMgYm91bmQgYnkgbWltZTpjb250ZW50LCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYm91bmRUb01pbWVDb250ZW50KExpc3QgZXh0RWxlbXMsIFN0cmluZyBwYXJ0KQotICB7Ci0gICAgaWYgKGV4dEVsZW1zICE9IG51bGwgJiYgZXh0RWxlbXMuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICAvLyBFeHBlY3RlZCB0aGUgZmlyc3QgZXh0IGVsZW0gaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lUGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudCBuZWVkZWQKLSAgICAgICAgICBMaXN0IGVsZW1zID0gKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChpKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgaWYgKGVsZW1zLnNpemUoKSA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgZmlyc3QgZWxlbWVudAotICAgICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWxlbXMuZ2V0KDApOwotICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50IGFuZCBpdCBiaW5kcyBhIHBhcnQKLSAgICAgICAgICAgIGlmIChlbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKQotICAgICAgICAgICAgICAmJiBwYXJ0LmVxdWFscygoKE1JTUVDb250ZW50KWVsZW0pLmdldFBhcnQoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYmYzMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotLyoqCi0gKiBBUDE5NDUKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBDb250ZW50LVR5cGUgSFRUUCBoZWFkZXIgZmllbGQtdmFsdWUgaW4gYSBtZXNzYWdlIAotICogaXMgZWl0aGVyICJtdWx0aXBhcnQvcmVsYXRlZCIgb3IgInRleHQveG1sIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTQ1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQVAxOTQ1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBoZWFkZXJOYW1lID0gSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFOwotCi0gICAgLy8gR2V0dGluZyBhIGhlYWRlcgotICAgIFN0cmluZyBoZWFkZXJWYWx1ZSA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyQXR0cmlidXRlKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgaGVhZGVyTmFtZSk7Ci0gICAgLy8gSWYgaGVhZGVyVmFsdWUgaXMgbnVsbCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgIGlmIChoZWFkZXJWYWx1ZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAKLSAgICAvLyBJZiB0aGUgaGVhZGVyIGlzICJtdWx0aXBhcnQvcmVsYXRlZCIgb3IgInRleHQveG1sIiwKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgZWxzZSBpZiAoaGVhZGVyVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX01VTFRJUEFSVCkKLSAgICAgICAgfHwgaGVhZGVyVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICB7Ci0gICAgfQotICAgIC8vIGVsc2UgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIGhlYWRlclZhbHVlLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZjBmMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Ni5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAxOTQ2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UKLSAqIGNvbnRhaW5pbmcgbm9uLXJvb3QgcGFydHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGNhbmRpZGF0ZSBtdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlCi0gKiBjb250YWluaW5nIG5vbi1yb290IHBhcnRzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5NDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5NDYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgTUlNRSBwYXJ0cywgdGhlIGFzc2VydGlvbiBwYXNzZWQgCi0gICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5jb3VudCgpID4gMSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBUaGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTBlNjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDUxMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDUxMDAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgIG5vbi1tdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlIGluIHRoZSBsb2cgZmlsZSwgd2l0aCBhbiBIVFRQIGVudGl0eS1ib2R5LjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgU09BUCBlbnZlbG9wZSBpcyB0aGUgZXhjbHVzaXZlIHBheWxvYWQgb2YgdGhlIEhUVFAgZW50aXR5LWJvZHkuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotcHVibGljIGNsYXNzIEFQNTEwMCBleHRlbmRzIFNTQlA1MTAwIAotewotCS8qKgotICAgICAqIENvbnN0cnVjdG9yLgotCSAqIEBwYXJhbSBpbXBsCi0JICovCi0JcHVibGljIEFQNTEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKSAKLQl7Ci0JCXN1cGVyKGltcGwpOwotCX0KLQotCXB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0JICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0JICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotCSAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotCXsKLQkgIC8vIElmIHRoZXJlIGlzIGEgU09BUCBNZXNzYWdlIHdpdGggQXR0YWNobWVudHMsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLQkgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotCSAgewotCSAgCXJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsIGZhaWx1cmVEZXRhaWwpOwotCSAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUodGVzdEFzc2VydGlvbiwgZW50cnlDb250ZXh0KTsKLQkgIH0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVA1MTAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVA1MTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYTJjYjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDUxMDEKLSAqIDxjb250ZXh0PkZvciBhIG5vbi1tdWx0aXBhcnQvcmVsYXRlZCBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbG9nIGZpbGUuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgbWVzc2FnZSBtdXN0IGhhdmUgYSAiQ29udGVudC1UeXBlIiBIVFRQIGhlYWRlciBmaWVsZC4gIFRoZSAiQ29udGVudC1UeXBlIiBIVFRQIGhlYWRlciBmaWVsZCBtdXN0IGhhdmUgYSBmaWVsZC12YWx1ZSB3aG9zZSBtZWRpYSB0eXBlIGlzICJ0ZXh0L3htbCIuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLXB1YmxpYyBjbGFzcyBBUDUxMDEgZXh0ZW5kcyBTU0JQNTEwMSB7Ci0KLQkvKioKLQkgKiBAcGFyYW0gaW1wbAotCSAqLwotCXB1YmxpYyBBUDUxMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkgCi0JewotCQlzdXBlcihpbXBsKTsKLQl9Ci0KLQlwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotCSAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotCSAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLQkgIHRocm93cyBXU0lFeGNlcHRpb24KLQl7Ci0JICAvLyBJZiB0aGVyZSBpcyBhIFNPQVAgTWVzc2FnZSB3aXRoIEF0dGFjaG1lbnRzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0JICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmlzTWltZUNvbnRlbnQoKSkKLQkgIHsKLQkgIAlyZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFLCBmYWlsdXJlRGV0YWlsKTsKLQkgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCk7Ci0JICB9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWJjYmNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAxMDAxLgotICogSWYgaXQgaXMgYSByZXF1ZXN0LCB0aGUgYXJnICMyIG9mIFBPU1QgaXMgJmx0O0hUVFAvMS4xJmd0Oy4gSWYgYWJzZW50LCBmaXJzdCBsaW5lIG9mIHRoZSAKLSAqIGJvZHkgaXM6IEhUVFAtVmVyc2lvbiA9IEhUVFAvMS4xLiBJZiBpdCBpcyBhIHJlc3BvbnNlLCBpdCBzdGFydHMgd2l0aCAmbHQ7SFRUUC8xLjEmZ3Q7LgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBodHRwSGVhZGVyID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0KLSAgICAvLyBJZiB0aGlzIGlzIGEgcmVxdWVzdCBtZXNzYWdlLCB0aGVuIGNoZWNrIFBPU1QgaGVhZGVyCi0gICAgaWYgKGVudHJ5Q29udGV4dAotICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAuZ2V0VHlwZSgpCi0gICAgICAuZXF1YWxzSWdub3JlQ2FzZShNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICB7Ci0gICAgICBWZWN0b3IgcmVxdWVzdExpbmU7Ci0gICAgICBpZiAoKChyZXF1ZXN0TGluZSA9IHRoaXMudmFsaWRhdG9yLmdldFBvc3RSZXF1ZXN0KGh0dHBIZWFkZXIpKSA9PSBudWxsKQotICAgICAgICB8fCAocmVxdWVzdExpbmUuc2l6ZSgpID09IDApKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgbWV0aG9kID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDApOwotICAgICAgICAvL1N0cmluZyByZXF1ZXN0VVJJID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDEpOwotICAgICAgICBTdHJpbmcgaHR0cFZlcnNpb24gPSAoU3RyaW5nKSByZXF1ZXN0TGluZS5nZXQoMik7Ci0KLSAgICAgICAgLy9Gb3IgZWFjaCByZXF1ZXN0IG1lc3NhZ2UgdGhhdCBpcyBhbiBIVFRQIFBPU1QKLSAgICAgICAgaWYgKG1ldGhvZC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1BPU1QpICYmIGh0dHBWZXJzaW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaHR0cFZlcnNpb24uZXF1YWxzKE1lc3NhZ2VWYWxpZGF0b3IuSFRUUF9WRVJTSU9OXzFfMSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSBpdCBtdXN0IGJlIGEgcmVzcG9uc2UKLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGh0dHBIZWFkZXIuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfVkVSU0lPTl8xXzEpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU5YTQ2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMTAwMi4KLSAqIElmIGl0IGlzIGEgcmVxdWVzdCwgdGhlIGFyZyAjMiBvZiBQT1NUIGlzICZsdDtIVFRQLzEuMSZndDsgb3IgJmx0O0hUVFAvMS4wJmd0Oy4gSWYgYWJzZW50LCBmaXJzdCBsaW5lIAotICogb2YgdGhlIGJvZHkgaXM6IEhUVFAtVmVyc2lvbiA9IEhUVFAvMS4xLiAob3IgSFRUUC8xLjApLiBJZiBpdCBpcyBhIHJlc3BvbnNlLCBpdCBzdGFydHMgd2l0aCAKLSAqICZsdDtIVFRQLzEuMSZndDsgb3IgJmx0O0hUVFAvMS4wJmd0OyBvciBoaWdoZXI7Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGh0dHBIZWFkZXIgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLQotICAgIC8vIElmIHRoaXMgaXMgYSByZXF1ZXN0IG1lc3NhZ2UsIHRoZW4gY2hlY2sgUE9TVCBmb3IgMS4xIG9yIDEuMAotICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgLmdldFR5cGUoKQotICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgewotICAgICAgLy8gR2V0IGVhY2ggZW50cnkgaW4gdGhlIHBvc3QgaGVhZGVyCi0gICAgICBTdHJpbmdUb2tlbml6ZXIgcG9zdE1lc3NhZ2UgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICIgXHJcbiIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGlyZCB0b2tlbiwgdGhlbiBmYWlsCi0gICAgICBpZiAocG9zdE1lc3NhZ2UuY291bnRUb2tlbnMoKSA8IDMpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIDNyZCB0b2tlbiAodGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcz8pCi0gICAgICAgIFN0cmluZyBodHRwVmVyc2lvbiA9ICIiOwotICAgICAgICBTdHJpbmcgbWVzc2FnZVR5cGUgPSAiIjsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNZXNzYWdlIHR5cGUKLSAgICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICAgICAgbWVzc2FnZVR5cGUgPSBwb3N0TWVzc2FnZS5uZXh0VG9rZW4oKTsKLSAgICAgICAgICBlbHNlIGlmIChpID09IDIpCi0gICAgICAgICAgICBodHRwVmVyc2lvbiA9IHBvc3RNZXNzYWdlLm5leHRUb2tlbigpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvc3RNZXNzYWdlLm5leHRUb2tlbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtZXNzYWdlVHlwZS5lcXVhbHMoIlBPU1QiKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgdGhpcmQgdG9rZW4gaXMgbm90IEhUVFAvMS4xIG90IEhUVFAvMS4wLCB0aGVuIGZhaWwKLSAgICAgICAgZWxzZSBpZiAoCi0gICAgICAgICAgKCFodHRwVmVyc2lvbi5lcXVhbHNJZ25vcmVDYXNlKE1lc3NhZ2VWYWxpZGF0b3IuSFRUUF9WRVJTSU9OXzFfMSkpCi0gICAgICAgICAgICAmJiAoIWh0dHBWZXJzaW9uLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1ZFUlNJT05fMV8wKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gRWxzZSBpdCBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gUmVzcG9uc2UtTGluZSAoMXN0KSA9IEhUVFAtVmVyc2lvbiBTUCBSZXNwb25zZS1jb2RlIFNQIFJlc3BvbnNlLXRleHQgQ1JMRgotICAgICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihodHRwSGVhZGVyLCAiXG5cclxmIik7Ci0KLSAgICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGFydExpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBIVFRQIHZlcnNpb24gaW5mbyBleHBlY3RlZCBidXQgbm90IGZvdW5kCi0gICAgICAgICAgLy8gKHN0YXRlIHRoZSBmYWN0IGluIHRoZSBleGNlcHRpb24gbWVzc2FnZT8pCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaHR0cEhlYWRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayB0aGF0IHByb3RvY29sIHZlcnNpb24gaW5kaWNhdGVzIEhUVFAvMS4wIG9yIEhUVFAvMS4xCi0gICAgICAgIGlmICghc3RhcnRMaW5lLnN0YXJ0c1dpdGgoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1ZFUlNJT05fMV8xKQotICAgICAgICAgICYmICFzdGFydExpbmUuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfVkVSU0lPTl8xXzApKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaHR0cEhlYWRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmN2YxZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMTAwNC4gCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIGlzIGEgUE9TVCBtZXNzYWdlLCB3aXRob3V0IGFueSB1c2Ugb2YgZnJhbWV3b3JrIGV4dGVuc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAwNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBQT1NUIG1lc3NhZ2UKLSAgICBpZiAoIWh0dHBIZWFkZXIuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfUE9TVCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLSAgICB3aGlsZSAoaHR0cE1lc3NhZ2VUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpCi0gICAgICAmJiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCkpKQotICAgIHsKLSAgICAgIGxpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICgobGluZSAhPSBudWxsKQotICAgICAgICAmJiAobGluZS5zdGFydHNXaXRoKCJNLVBPU1QiKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIkV4dDoiKSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0gLy9FbmQgV2hpbGUKLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA2N2NlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlAxMDA2LiAKLSAqLwotcHVibGljIGNsYXNzIEJQMTAwNiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAwNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBQYXJzZSB0aGUgSFRUUCBoZWFkZXIKLSAgICBTdHJpbmcgcmF3SFRUUEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotICAgIE1hcCBodHRwSGVhZGVyID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMocmF3SFRUUEhlYWRlciwgIjoiKTsKLQotICAgIC8vIEdldCB0aGUgc29hcCBhY3Rpb24gaGVhZGVyCi0gICAgU3RyaW5nIHNvYXBBY3Rpb24gPSAoU3RyaW5nKSBodHRwSGVhZGVyLmdldCgiU09BUEFjdGlvbiIudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBzb2FwIGFjdGlvbiBoZWFkZXIsIHRoZW4gTkEKLSAgICBpZiAoc29hcEFjdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UgaWYgKCEoc29hcEFjdGlvbi5zdGFydHNXaXRoKCJcIiIpKSB8fCAhKHNvYXBBY3Rpb24uZW5kc1dpdGgoIlwiIikpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIkhUVFAgSGVhZGVyOiBcIiIgKyByYXdIVFRQSGVhZGVyICsgIlwiLiIsCi0gICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDEwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYWM3MzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAxMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEwMTAuCi0gKiBJdCBNVVNUIE5PVCBjb250YWluIGEgU09BUCBFbnZlbG9wZTogdGhlIEhUVFAgZW50aXR5LWJvZHkgbXVzdCBiZSBlbXB0eS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAxMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgQmluZGluZyBiaW5kaW5nID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXTsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLAotICAgICAgICAgIHZhbGlkYXRvcik7Ci0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0KLSAgICAgIGlmIChtYXRjaCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotICAgICAgICAvL2ZpbmQgb3BlcmF0aW9uIGluIHBvcnQgdHlwZQotICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG9wZXJhdGlvbi5nZXRPdXRwdXQoKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgICB7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKG51bGwsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFlY2FjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMTEwMS4KLSAqIEEgcmVzcG9uc2UgbWVzc2FnZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBTT0FQIG1lc3NhZ2UgU0hPVUxEIGJlIHNlbnQgCi0gKiB1c2luZyBlaXRoZXIgYSAiMjAwIE9LIiBvciAiMjAyIEFjY2VwdGVkIiBIVFRQIHN0YXR1cyBjb2RlLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMTAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyByZXNwb25zZSBkb2VzIG5vdCBjb250YWlucyBTT0FQIG1lc3NhZ2UKLSAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSA9PSBudWxsCi0gICAgICB8fCAiIi5lcXVhbHMoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSkpCi0gICAgewotICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZSAKLSAgICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgICAgVXRpbHMuZ2V0SFRUUFN0YXR1c0NvZGUoCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCkpOwotICAgICAgaWYgKCIyMDAiLmVxdWFscyhodHRwU3RhdHVzKSk7Ci0gICAgICBlbHNlIGlmICgiMjAyIi5lcXVhbHMoaHR0cFN0YXR1cykpOwotCi0gICAgICAvLyBJZiA0eHgsIHRoZW4gcmVzdWx0IGlzIG5vdEFwcGxpY2FibGUKLSAgICAgIGVsc2UgaWYgKGh0dHBTdGF0dXMuc3RhcnRzV2l0aCgiNCIpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAiXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgICArICJNZXNzYWdlOlxuIgotICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gcmVzcG9uc2UgY29udGFpbnMgU09BUCBtZXNzYWdlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAwOTM4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMTEwMy4KLSAqIFRoZSByZXF1ZXN0IG1lc3NhZ2Ugc2hvdWxkIG5vdCBjb250YWluIGEgUE9TVCBtZXRob2QuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIE1lc3NhZ2VFbnRyeSByZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKTsKLSAgICBTdHJpbmcgcmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0LmdldEhUVFBIZWFkZXJzKCk7Ci0KLSAgICAvLyBHZXQgSFRUUCBzdGF0dXMgY29kZQotICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgIFV0aWxzLmdldEhUVFBTdGF0dXNDb2RlKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0KLSAgICBpZiAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiUE9TVCAiKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlIGlmICghIjQwNSIuZXF1YWxzKGh0dHBTdGF0dXMpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICJcblJlcXVlc3QgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgKyAiXG5NZXNzYWdlOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldE1lc3NhZ2UoKQotICAgICAgICAgICAgKyAiXG5cblJlc3BvbnNlIG1lc3NhZ2U6XG5IZWFkZXJzOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICArICJcbk1lc3NhZ2U6XG4iCi0gICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXNwb25zZSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjZGJkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotCi0KLS8qKgotICogQlAxMTA0LgotICogVGhlIHJlcXVlc3QgbWVzc2FnZSBzaG91bGQgbm90IGNvbnRhaW4gYSBjb250ZW50LXR5cGUgb2YgInRleHQveG1sIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTEwNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGNoZWNrIHJlcXVlc3QgZm9yIHRoZSAidGV4dC94bWwiIGNvbnRlbnQgdHlwZQotICAgIE1lc3NhZ2VFbnRyeSByZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKTsKLSAgICBTdHJpbmcgaGVhZGVycyA9IHJlcXVlc3QuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICBTdHJpbmcgY29udGVudFR5cGUgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhoZWFkZXJzLCAiOiIpCi0gICAgICAuZ2V0KEhUVFBDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRS50b1VwcGVyQ2FzZSgpKTsKLQotICAgIC8vIEdldCBIVFRQIHN0YXR1cyBjb2RlCi0gICAgU3RyaW5nIGh0dHBTdGF0dXMgPQotICAgICAgVXRpbHMuZ2V0SFRUUFN0YXR1c0NvZGUoCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpKTsKLQotICAgIC8vIElmIHRoZSByZXF1ZXN0IG1lc3NhZ2UgaGFzIGEgY29udGVudCB0eXBlIG9mIHRleHQveG1sLAotICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgIGlmIChjb250ZW50VHlwZSAhPSBudWxsCi0gICAgICAmJiBjb250ZW50VHlwZS5pbmRleE9mKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwpICE9IC0xKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBIVFRQIHN0YXR1cyBjb2RlCi0gICAgICBpZiAoISI0MTUiLmVxdWFscyhodHRwU3RhdHVzKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgIlxuUmVxdWVzdCBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgKyAiXG5NZXNzYWdlOlxuIgotICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgICAgICsgIlxuXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICsgIlxuTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTExNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTBmODRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDExMTYuCi0gKiBTT0FQQWN0aW9uIGhlYWRlciBzaG91bGQgY29udGFpbiBhIHF1b3RlZCBzdHJpbmcgdGhhdCBoYXMgc2FtZSAKLSAqIHZhbHVlIGFzIHRoZSB2YWx1ZSBvZiB0aGUgc29hcGJpbmQ6b3BlcmF0aW9uL0Bzb2FwQWN0aW9uIGF0dHJpYnV0ZSwgCi0gKiBhbmQgYW4gZW1wdHkgc3RyaW5nICgiIikgaWYgdGhlcmUgaXMgbm8gc3VjaCBhdHRyaWJ1dGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvcgotewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMTYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIGhlYWRlcnMgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHNvYXBBY3Rpb24gPSBzb2FwT3Blci5nZXRTb2FwQWN0aW9uVVJJKCk7Ci0gICAgaWYgKHNvYXBBY3Rpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoISIiLmVxdWFscyhhY3Rpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgICJcbkhUVFAgaGVhZGVyczpcbiIgKyBoZWFkZXJzICsgIlxuc29hcEFjdGlvbjpcbiIgKyBzb2FwQWN0aW9uOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKCFzb2FwQWN0aW9uLmVxdWFscyhhY3Rpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgICJcbkhUVFAgaGVhZGVyczpcbiIgKyBoZWFkZXJzICsgIlxuc29hcEFjdGlvbjpcbiIgKyBzb2FwQWN0aW9uOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFBhcnNlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBpZiAoYWN0aW9uID09IG51bGwpIAotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICBpZiAoYWN0aW9uLmxlbmd0aCgpID4gMQotICAgICAgICAmJiBhY3Rpb24uY2hhckF0KDApID09ICciJwotICAgICAgICAmJiBhY3Rpb24uY2hhckF0KGFjdGlvbi5sZW5ndGgoKSAtIDEpID09ICciJykKLSAgICAgIHsKLSAgICAgICAgYWN0aW9uID0gYWN0aW9uLnN1YnN0cmluZygxLCBhY3Rpb24ubGVuZ3RoKCkgLSAxKTsKLSAgICAgIH0KLQotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvYywKLSAgICAgICAgICBudWxsLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF0sCi0gICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgIHZhbGlkYXRvciksCi0gICAgICAgICAgZmFsc2UpOwotCi0gICAgICBpZiAobWF0Y2ggIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgICAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRAotICAgICAgJiYgZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2M2E1Y2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0vKioKLSAqIEJQNDEwMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGxvZyBmaWxlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBtZXNzYWdlIGNvbnRhaW5zIGFuIEhUVFAgQXV0aGVudGljYXRpb24gaGVhZGVyIGZpZWxkPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQNDEwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0FVVEhfU0NIRU1FX0JBU0lDID0gIkJhc2ljIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfQVVUSF9TQ0hFTUVfRElHRVNUID0gIkRpZ2VzdCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXR0aW5nIG1lc3NhZ2UgaGVhZGVycwotICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgLy8gSWYgdGhpcyBpcyBhIHJlcXVlc3QgbWVzc2FnZQotICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGUgcmVxdWVzdCBoZWFkZXJzIGNvbnRhaW4gYXV0aGVudGljYXRpb24gc2NoZW1lICJCYXNpYyIgb3IgIkRpZ2VzdCIKLSAgICAgIC8vIG9yIHRoZXJlIGFyZSBubyBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlcnMsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghY29udGFpbnNJbnZhbGlkQXV0aChoZWFkZXJzLCBIVFRQQ29uc3RhbnRzLkhFQURFUl9BVVRIT1JJWkFUSU9OKQotICAgICAgICAmJiAhY29udGFpbnNJbnZhbGlkQXV0aChoZWFkZXJzLCBIVFRQQ29uc3RhbnRzLkhFQURFUl9QUk9YWV9BVVRIT1JJWkFUSU9OKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZWxzZSB0aGlzIGlzIGEgcmVzcG9uc2UKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gSWYgdGhlIHJlc3BvbnNlIGhlYWRlcnMgY29udGFpbiBhdXRoZW50aWNhdGlvbiBzY2hlbWUgIkJhc2ljIiBvciAiRGlnZXN0IgotICAgICAgLy8gb3IgdGhlcmUgYXJlIG5vIEhUVFAgQXV0aGVudGljYXRpb24gaGVhZGVycywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFjb250YWluc0ludmFsaWRBdXRoKGhlYWRlcnMsIEhUVFBDb25zdGFudHMuSEVBREVSX1dXV19BVVRIRU5USUNBVEUpCi0gICAgICAgICYmICFjb250YWluc0ludmFsaWRBdXRoKGhlYWRlcnMsIEhUVFBDb25zdGFudHMuSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQXNzZXJ0aW9uIHJlc3VsdCBoYXMgbm90IGJlZW4gY2hhbmdlZCwgSFRUUCBBdXRoZW50aWNhdGlvbiBoZWFkZXJzCi0gICAgLy8gZG9lcyBub3QgY29udGFpbiBhdXRoZW50aWNhdGlvbiBzY2hlbWUgIkJhc2ljIiBvciAiRGlnZXN0IiwKLSAgICAvLyB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgIGlmIChyZXN1bHQuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBIVFRQIGhlYWRlcnMgY29udGFpbiBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgdGhhdCB1c2VzCi0gICAqIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvdGhlciB0aGFuICJCYXNpYyIgb3IgIkRpZ2VzdCIuCi0gICAqIEBwYXJhbSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAgICogQHBhcmFtIGhlYWRlciBhIGhlYWRlciBuYW1lIGJlaW5nIHJldHJpZXZlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlciB0aGF0IHVzZXMgYXV0aGVudGljYXRpb24KLSAgICogc2NoZW1lIG90aGVyIHRoYW4gIkJhc2ljIiBvciAiRGlnZXN0IiBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zSW52YWxpZEF1dGgoU3RyaW5nIGhlYWRlcnMsIFN0cmluZyBoZWFkZXIpCi0gIHsKLSAgICAvLyBHZXR0aW5nIGEgaGVhZGVyIHZhbHVlCi0gICAgU3RyaW5nIGhlYWRlclZhbHVlID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBoZWFkZXJWYWx1ZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsIjoiKQotICAgICAgICAuZ2V0KGhlYWRlci50b1VwcGVyQ2FzZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCi0gICAgLy8gSWYgdGhlIGhlYWRlciBpcyBwcmVzZW50ZWQKLSAgICBpZiAoaGVhZGVyVmFsdWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBSZXRyaWV2aW5nIGF1dGhlbnRpY2F0aW9uIHNjaGVtZQotICAgICAgaW50IGlkeFNQID0gaGVhZGVyVmFsdWUuaW5kZXhPZigiICIpOwotICAgICAgaWYgKGlkeFNQID4gLTEpCi0gICAgICB7Ci0gICAgICAgIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWUuc3Vic3RyaW5nKDAsIGlkeFNQKTsKLSAgICAgIH0KLSAgICAgIC8vIElmIGEgc2NoZW1lIGlzIG5laXRoZXIgIkJhc2ljIiBub3IgIkRpZ2VzdCIsIHJldHVybiB0cnVlCi0gICAgICBpZiAoIWhlYWRlclZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoSFRUUF9BVVRIX1NDSEVNRV9CQVNJQykKLSAgICAgICAgJiYgIWhlYWRlclZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoSFRUUF9BVVRIX1NDSEVNRV9ESUdFU1QpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmQwY2Y5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQlA0MTA0Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBsb2cgZmlsZSBjb250YWluaW5nIGFuIEhUVFAgSGVhZGVyIGZpZWxkIHRoYXQgaXMgbm90IGZyb20gdGhlIGZvbGxvd2luZyBsaXN0IG9mIHNwZWNpZmllZCBoZWFkZXIgZmllbGRzOiAoaHR0cDovL3d3dy5tbm90Lm5ldC9kcmFmdHMvZHJhZnQtbm90dGluZ2hhbS1odHRwLWhlYWRlci1yZWctMDAudHh0KTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgbWVzc2FnZSBjb250YWlucyBhbiBIVFRQIEhlYWRlciBmaWVsZCB0aGF0IGlzIG5vdCBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBzcGVjaWZpZWQgaGVhZGVyIGZpZWxkczogKGh0dHA6Ly93d3cubW5vdC5uZXQvZHJhZnRzL2RyYWZ0LW5vdHRpbmdoYW0taHR0cC1oZWFkZXItcmVnLTAwLnR4dCk8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgcHJpdmF0ZSBMaXN0IGtub3duSGVhZGVyTmFtZXM7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICAgIGtub3duSGVhZGVyTmFtZXMgPSBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldEFsbEtub3duSGVhZGVyTmFtZXMoKSB7Ci0gICAgaWYgKGtub3duSGVhZGVyTmFtZXMgPT0gbnVsbCkgewotICAgICAga25vd25IZWFkZXJOYW1lcyA9IEhUVFBDb25zdGFudHMuZ2V0QWxsS25vd25IZWFkZXJOYW1lcygpOwotICAgIH0KLSAgICByZXR1cm4ga25vd25IZWFkZXJOYW1lczsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXR0aW5nIEhUVFAgSGVhZGVycwotICAgIE1hcCBobWFwID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoCi0gICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwgIjoiKTsKLQotICAgIEl0ZXJhdG9yIGkgPSBobWFwLmtleVNldCgpLml0ZXJhdG9yKCkgOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgIC8vIElmIGhlYWRlciBuYW1lIGlzIG5vdCBrbm93biwgdGhlbiB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgaWYgKCFnZXRBbGxLbm93bkhlYWRlck5hbWVzKCkuY29udGFpbnMoaGVhZGVyTmFtZS50b1VwcGVyQ2FzZSgpKSkKLSAgICAgIHsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBIVFRQIGhlYWRlciB0aGF0IGlzIG5vdCBmcm9tIGEgbGlzdCwKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUgCi0gICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkwM2QzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTA1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlA0MTA1Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBsb2cgZmlsZSBjb250YWluaW5nIGEgQ29udGVudC1lbmNvZGluZyBIVFRQIGhlYWRlciBmaWVsZCB3aXRoIGEgdmFsdWUgb3RoZXIgdGhhbiAiZ3ppcCIsICJjb21wcmVzcyIgb3IgImRlZmxhdGUiPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBjb250YWluZWQgQ29udGVudC1lbmNvZGluZyBIVFRQIGhlYWRlciBmaWVsZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuICJnemlwIiwgImNvbXByZXNzIiBvciAiZGVmbGF0ZSIuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQNDEwNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIC8vIEFsbCB0aGUgcmVnaXN0ZXJlZCBjb250ZW50LWNvZGluZyB2YWx1ZSB0b2tlbnMgKFJGQzI2MTYpIGV4Y2VwdCAiaWRlbnRpdHkiCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHWklQX1ZBTFVFID0gImd6aXAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUFJFU1NfVkFMVUUgPSAiY29tcHJlc3MiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGTEFURV9WQUxVRSA9ICJkZWZsYXRlIjsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyB0aGUgQ29udGVudC1FbmNvZGluZyBIVFRQIGhlYWRlciB2YWx1ZQotICAgIFN0cmluZyBjb250ZW50RW5jb2RpbmcgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucygKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLAotICAgICAgIjoiKS5nZXQoSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpKTsKLQotICAgIGlmIChjb250ZW50RW5jb2RpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBMb3dlcmluZyB2YWx1ZSdzIGNhc2UgYmVjYXVzZSBSRkMyNjE2IHNheXMKLSAgICAgIC8vIHRoYXQgYWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgIC8vIE11bHRpcGxlIGVuY29kaW5ncyBjYW4gYmUgYXBwbGllZCB0byBhbiBlbnRpdHksCi0gICAgICAvLyBzbyBicmVha2luZyB0aGUgdmFsdWUgaW50byB0b2tlbnMKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoY29udGVudEVuY29kaW5nLCAiLCIpOwotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRva2VuID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgICAvLyBJZiBhIHRva2VuIGRvZXMgbm90IGVxdWFsIHRvIGFueSByZWdpc3RlcmVkIG9uZQotICAgICAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICAgIGlmICggIXRva2VuLmVxdWFscyhHWklQX1ZBTFVFKQotICAgICAgICAgICYmICF0b2tlbi5lcXVhbHMoQ09NUFJFU1NfVkFMVUUpCi0gICAgICAgICAgJiYgIXRva2VuLmVxdWFscyhERUZMQVRFX1ZBTFVFKSkgewotCi0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyB1bnJlZ2lzdGVyZWQgdmFsdWUgb2YgQ29udGVudC1FbmNvZGluZywKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUgCi0gICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3ODYzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotCi0vKioKLSAqIEJQNDEwNgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJlc3BvbnNlIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBjb250YWlucyBhIHRyYW5zZmVyLWVuY29kaW5nIEhUVFAgaGVhZGVyIGZpZWxkLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgY29udGFpbmVkIHRyYW5zZmVyLWVuY29kaW5nIEhUVFAgaGVhZGVyIGZpZWxkIGhhcyBhIHZhbHVlIG9mICJjaHVua2VkIjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDQxMDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hVTktFRF9WQUxVRSA9ICJjaHVua2VkIjsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyBhIFRyYW5zZmVyLUVuY29kaW5nIEhUVFAgaGVhZGVyIHZhbHVlCi0gICAgU3RyaW5nIHRyYW5zZmVyRW5jb2RpbmcgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucygKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLAotICAgICAgIjoiKS5nZXQoSFRUUENvbnN0YW50cy5IRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcudG9VcHBlckNhc2UoKSk7Ci0KLSAgICBpZiAodHJhbnNmZXJFbmNvZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIExvd2VyaW5nIHZhbHVlJ3MgY2FzZSBiZWNhdXNlIFJGQzI2MTYgc2F5cwotICAgICAgLy8gdGhhdCBhbGwgdHJhbnNmZXItY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgdHJhbnNmZXJFbmNvZGluZyA9IHRyYW5zZmVyRW5jb2RpbmcudG9Mb3dlckNhc2UoKTsKLQotICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG90aGVyIHRoYW4gImNodW5rZWQiLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICBpZiAoIXRyYW5zZmVyRW5jb2RpbmcuZXF1YWxzKENIVU5LRURfVkFMVUUpKSB7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLmdldERldGFpbERlc2NyaXB0aW9uKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gVHJhbmZlci1FbmNvZGluZyBvciBpdHMgdmFsdWUgaXMgImNodW5rZWQiLAotICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZSAKLSAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjk5YTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlA0MTA3Ci0gKiA8Y29udGV4dD5Gb3IgYSByZXF1ZXN0IG1lc3NhZ2UgY29udGFpbmluZyBhbiBVcGdyYWRlIGZpZWxkIGluIHRoZSBIVFRQIEhlYWRlcnMuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSByZXF1ZXN0IG1lc3NhZ2UgY29udGFpbnMgYW4gVXBncmFkZSBmaWVsZCBpbiB0aGUgSFRUUCBIZWFkZXJzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDQxMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA3KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldHRpbmcgdGhlIFVwZ3JhZGUgSFRUUCBoZWFkZXIgdmFsdWUKLSAgICBTdHJpbmcgdXBncmFnZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKAotICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCksCi0gICAgICAiOiIpLmdldChIVFRQQ29uc3RhbnRzLkhFQURFUl9VUEdSQURFLnRvVXBwZXJDYXNlKCkpOyAKLQotICAgIC8vIElmIHRoZSBoZWFkZXIgaXMgcHJlc2VudGVkLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgaWYgKHVwZ3JhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gZWxzZSB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL01lc3NhZ2VWYWxpZGF0b3JJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvTWVzc2FnZVZhbGlkYXRvckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhZjBlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvTWVzc2FnZVZhbGlkYXRvckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIFBhcmFzb2Z0IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBAdmVyc2lvbiAxLjAKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgaW1wbGVtZW50cyBNZXNzYWdlVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfTUVTU0FHRTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gb2YgZW50cnkgdHlwZXMgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGVudHJ5IHR5cGVzIChTdHJpbmdzKQotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldEVudHJ5VHlwZXMoKSB7Ci0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgVFlQRV9NRVNTQUdFX1JFUVVFU1QsCi0gICAgICAgICAgICAgIFRZUEVfTUVTU0FHRV9SRVNQT05TRSwKLSAgICAgICAgICAgICAgVFlQRV9NRVNTQUdFX0FOWSwKLSAgICAgICAgICAgICAgVFlQRV9NSU1FX1BBUlQsCi0gICAgICAgICAgICAgIFRZUEVfTUlNRV9ST09UX1BBUlQKLSAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGVudHJ5IGFuZCB0ZXN0IGFzc2VydGlvbiBoYXZlIHRoZSBzYW1lIHByaW1hcnkgY29udGV4dAotICAgIGlmICgodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUVTU0FHRV9BTlkpKQotICAgICAgfHwgKHRlc3RBc3NlcnRpb24uZ2V0RW50cnlUeXBlTmFtZSgpLmVxdWFscyhUWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGVudHJ5Q29udGV4dAotICAgICAgICAgIC5nZXRFbnRyeSgpCi0gICAgICAgICAgLmdldEVudHJ5VHlwZSgpCi0gICAgICAgICAgLmdldFR5cGVOYW1lKCkKLSAgICAgICAgICAuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVFVRVNUKSkpCi0gICAgICB8fCAodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVNQT05TRSkKLSAgICAgICAgJiYgKGVudHJ5Q29udGV4dAotICAgICAgICAgIC5nZXRFbnRyeSgpCi0gICAgICAgICAgLmdldEVudHJ5VHlwZSgpCi0gICAgICAgICAgLmdldFR5cGVOYW1lKCkKLSAgICAgICAgICAuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVNQT05TRSkpKQotICAgICAgfHwgdGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUlNRV9ST09UX1BBUlQpCi0gICAgICB8fCB0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHMoVFlQRV9NSU1FX1BBUlQpKQotICAgIHsKLSAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2g7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDEwMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9TU0JQMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjFlYWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9TU0JQMTAwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotCi0vKioKLSAqIFNTQlAxMDAzLgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSBpbiB0aGUgbG9nIGZpbGUsIHdoaWNoIGhhcyBhIG5vbi1lbXB0eSBlbnRpdHktYm9keTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqICBUaGUgbG9nZ2VkIFNPQVAgZW52ZWxvcGUgaXMgYSBVVEYtOCB0cmFuc2NyaXB0IG9mIGFuIGVudmVsb3BlIG9yaWdpbmFsbHkgZW5jb2RlZCBhcyBVVEYtOCBvciBVVEYtMTYuIAotICogIFRoZSBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIncyBjaGFyc2V0IHZhbHVlIGlzIGVpdGhlciBVVEYtOCBvciBVVEYtMTYuIExvb2tpbmcgYXQgdGhlIG1lc3NhZ2VDb250ZW50IAotICogIGVsZW1lbnQgb2YgdGhlIGxvZ2dlZCBtZXNzYWdlLCBlaXRoZXIgCi0gKiAgICAoMSkgaXQgaGFzIGEgQk9NIGF0dHJpYnV0ZSB3aGljaCBtYXBzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAqICAgICgyKSBpdCBoYXMgaXQgaGFzIGFuIFhNTCBkZWNsYXJhdGlvbiB3aGljaCBtYXRjaGVzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAqICAgICgzKSB0aGVyZSBpcyBubyBCT00gYXR0cmlidXRlIGFuZCBubyBYTUwgZGVjbGFyYXRpb24sIGFuZCB0aGUgY2hhcnNldCB2YWx1ZSBpcyBVVEYtOC4KLSAqIDwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKgotICogQGF1dGhvciBsYXV6b25kCi0gKi8gCi1wdWJsaWMgY2xhc3MgU1NCUDEwMDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFNTQlAxMDAzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVzcG9uc2UgbWVzc2FnZSBmb3Igb25lLXdheSBvcGVyYXRpb24sIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICh2YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgICBNYXAgaHR0cEhlYWRlck1hcCA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGh0dHBIZWFkZXIsICI6Iik7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSAoU3RyaW5nKSBodHRwSGVhZGVyTWFwLmdldCgiQ29udGVudC1UeXBlIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgaWYgKGNvbnRlbnRUeXBlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICJUaGUgQ29udGVudC1UeXBlIGhlYWRlciBpcyBub3QgcHJlc2VudC4iKTsKLSAgICAgIH0KLQotICAgICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZS50cmltKCk7Ci0gICAgICBTdHJpbmcgY2hhcnNldCA9IGNvbnRlbnRUeXBlLnN1YnN0cmluZygKLSAgICAgICAgY29udGVudFR5cGUuaW5kZXhPZigiOyIpICsgMSwgY29udGVudFR5cGUubGVuZ3RoKCkpOwotICAgICAgY2hhcnNldCA9IGNoYXJzZXQudHJpbSgpOwotICAgICAgaWYgKCFjaGFyc2V0LnN0YXJ0c1dpdGgoImNoYXJzZXQiKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgIk1pc3Npbmcgb3IgYmFkIFwiY2hhcnNldFwiIGF0dHJpYnV0ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlcjogIgotICAgICAgICAgICsgY2hhcnNldCk7Ci0gICAgICB9Ci0KLSAgICAgIFN0cmluZyBjaGFyc2V0VmFsdWUgPSBjaGFyc2V0LnN1YnN0cmluZygKLSAgICAgICAgY2hhcnNldC5pbmRleE9mKCI9IikgKyAxLCBjaGFyc2V0Lmxlbmd0aCgpKTsKLSAgICAgIGlmIChjaGFyc2V0VmFsdWUuc3RhcnRzV2l0aCgiXCIiKSkKLSAgICAgIHsKLSAgICAgICAgY2hhcnNldFZhbHVlID0gY2hhcnNldFZhbHVlLnN1YnN0cmluZygxLCBjaGFyc2V0VmFsdWUubGVuZ3RoKCkgLSAxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTgiKQotICAgICAgICAgICYmICFjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgdmFsdWUgb2YgdGhlIFwiY2hhcnNldFwiICIKLSAgICAgICAgICArICJhdHRyaWJ1dGUgb2YgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgaXMgIiArIGNvbnRlbnRUeXBlKTsKLSAgICAgIH0KLSAgICAgIC8vIFBhcnNlIGxvZyBtZXNzYWdlCi0gICAgICAvL2dldHMgZmlyc3Qgc3RyaW5nCi0gICAgICBpbnQgaWR4ID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKS5pbmRleE9mKCI8P3htbCIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaW50IGlkeDIgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLmluZGV4T2YoIj8+Iik7Ci0gICAgICBpZiAoaWR4MiA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIHhtbERlY2xhcmF0aW9uID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKQotICAgICAgICAuc3Vic3RyaW5nKGlkeCwgaWR4MiArICI/PiIubGVuZ3RoKCkpOwotCi0gICAgICBpZHggPSB4bWxEZWNsYXJhdGlvbi5pbmRleE9mKCJlbmNvZGluZyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGNoYXJzZXRWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtOCIpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBYTUwgZGVjbGFyYXRpb24gYW5kIHRoZSIKLSAgICAgICAgICAgICsgIiBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCBVVEYtOC4iCi0gICAgICAgICAgICArICJcbkNoYXJzZXQgdmFsdWUgaW4gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXI6ICIgKyBjaGFyc2V0VmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGludCBpZHhRID0geG1sRGVjbGFyYXRpb24uaW5kZXhPZignXCcnLCBpZHgpOwotICAgICAgaW50IGlkeFFRID0geG1sRGVjbGFyYXRpb24uaW5kZXhPZignXCInLCBpZHgpOwotICAgICAgaW50IGlkeFF1b3RlID0gLTE7Ci0gICAgICBjaGFyIHFvdXRlQ2ggPSAnXDAnOwotICAgICAgaWYgKGlkeFEgPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlkeFF1b3RlID0gaWR4UVE7Ci0gICAgICAgIHFvdXRlQ2ggPSAnXCInOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoaWR4UVEgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBpZHhRdW90ZSA9IGlkeFE7Ci0gICAgICAgICAgcW91dGVDaCA9ICdcJyc7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGlkeFFRIDwgaWR4USkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZHhRdW90ZSA9IGlkeFFROwotICAgICAgICAgICAgcW91dGVDaCA9ICdcIic7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZHhRdW90ZSA9IGlkeFE7Ci0gICAgICAgICAgICBxb3V0ZUNoID0gJ1wnJzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGlkeFF1b3RlID09IC0xIHx8IHFvdXRlQ2ggPT0gJ1wwJykKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaW50IGlkeExRb3V0ZSA9IHhtbERlY2xhcmF0aW9uLmluZGV4T2YocW91dGVDaCwgaWR4UXVvdGUgKyAxKTsKLQotICAgICAgaWYgKGlkeExRb3V0ZSA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIHhtbEVuY29kaW5nID0KLSAgICAgICAgeG1sRGVjbGFyYXRpb24uc3Vic3RyaW5nKGlkeFF1b3RlICsgMSwgaWR4TFFvdXRlKTsKLSAgICAgIGlmIChjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSh4bWxFbmNvZGluZykpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgQk9NLCB0aGVuIGNoZWNrIHRoYXQgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIHhtbEVuY29kaW5nCi0gICAgICAgIGludCBib20gPSAwOwotICAgICAgICBpZiAoKGJvbSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRCT00oKSkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgIGlmICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGOAotICAgICAgICAgICAgJiYgIXhtbEVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICB8fCAoKGJvbSA9PSBXU0lDb25zdGFudHMuQk9NX1VURjE2Ci0gICAgICAgICAgICAgICYmICF4bWxFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtMTYiKSkpCi0gICAgICAgICAgICB8fCAoKGJvbSA9PSBXU0lDb25zdGFudHMuQk9NX1VURjE2X0JJR19FTkRJQU4KLSAgICAgICAgICAgICAgJiYgIXhtbEVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoInV0Zi0xNiIpKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgQk9NIGFuZCBYTUwgZGVjbGFyYXRpb24gZG8gbm90IG1hdGNoLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGVyZSBpcyBhbiBYTUwgZGVjbGFyYXRpb24sIGJ1dCBpdHMgIgotICAgICAgICAgICsgImVuY29kaW5nIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSBjaGFyc2V0IHZhbHVlLlxuIgotICAgICAgICAgICsgIkNoYXJzZXQgdmFsdWUgaW4gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXI6ICIgKyBjaGFyc2V0VmFsdWUKLSAgICAgICAgICArICJcbkVuY29kaW5nIGluIHRoZSBYTUwgZGVjbGFyYXRpb246ICIgKyB4bWxFbmNvZGluZyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1NTQlA1MTAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyMTUyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBTU0JQNTEwMAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgaW4gdGhlIGxvZyBmaWxlLCB3aXRoIGFuIEhUVFAgZW50aXR5LWJvZHkuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBTT0FQIGVudmVsb3BlIGlzIHRoZSBleGNsdXNpdmUgcGF5bG9hZCBvZiB0aGUgSFRUUCBlbnRpdHktYm9keS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDUxMDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcm90ZWN0ZWQgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQNTEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgeyAKLSAgICAgIAlpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgCQkgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAllbHNlCQotICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWRvYy5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0VOVkVMT1BFKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RmFpbHVyZU1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1NTQlA1MTAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhZTUyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogU1NCUDUxMDEKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBsb2cgZmlsZS48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIG11c3QgaGF2ZSBhICJDb250ZW50LVR5cGUiIEhUVFAgaGVhZGVyIGZpZWxkLiAgVGhlICJDb250ZW50LVR5cGUiIEhUVFAgaGVhZGVyIGZpZWxkIG11c3QgaGF2ZSBhIGZpZWxkLXZhbHVlIHdob3NlIG1lZGlhIHR5cGUgaXMgInRleHQveG1sIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICogCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotcHVibGljIGNsYXNzIFNTQlA1MTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgU1NCUDUxMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXR0aW5nIENvbnRlbnQtVHlwZSBIVFRQIGhlYWRlcgotICAgIFN0cmluZyBjb250ZW50VHlwZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKAotICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCksCi0gICAgICAiOiIpLmdldChIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAvLyBpZiBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCBwcmVzZW50ZWQKLSAgICAvLyBvciBkb2VzIG5vdCBlcXVhbCB0byB0ZXh0L3htbCwgdGhlbiB0aGUgYXNzZXJ0aW9uIGlzIGZhaWxlZAotICAgIGlmIChjb250ZW50VHlwZSA9PSBudWxsCi0gICAgICB8fCAhY29udGVudFR5cGUuc3RhcnRzV2l0aChXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgdGVzdEFzc2VydGlvbi5nZXRGYWlsdXJlTWVzc2FnZSgpLAotICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy52YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzA2NmI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMSBleHRlbmRzIEJQMTAwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjQzMDhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMiBleHRlbmRzIEJQMTAwMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDAyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDA0MTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMyBleHRlbmRzIFNTQlAxMDAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZmFkODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBXU0kxMDA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDA0IGV4dGVuZHMgQlAxMDA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMWMwMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMDU7Ci0KLS8qKgotICogV1NJMTAwNQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwNSBleHRlbmRzIEJQMTAwNQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmQ2Zjg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwNiBleHRlbmRzIEJQMTAwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzg1YWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDA3OwotCi0vKioKLSAqIFdTSTEwMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMDcgZXh0ZW5kcyBCUDEwMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJjZDBlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTAwODsKLQotLyoqCi0gKiBXU0kxMDA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDA4IGV4dGVuZHMgQlAxMDA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNjhlYmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMDk7Ci0KLS8qKgotICogV1NJMTAwOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwOSBleHRlbmRzIEJQMTAwOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJkOTg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAxMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAxMCBleHRlbmRzIEJQMTAxMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDEwKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWRjZGNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDExOwotCi0vKioKLSAqIFdTSTEwMTEKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMTEgZXh0ZW5kcyBCUDEwMTEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAxMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmNTcxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTAxMjsKLQotLyoqCi0gKiBXU0kxMDEyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDEyIGV4dGVuZHMgQlAxMDEyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMTIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4N2U1OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMTM7Ci0KLS8qKgotICogV1NJMTAxMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAxMyBleHRlbmRzIEJQMTAxMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDEzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDMxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAzMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2QzOTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDMxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDMxOwotCi0vKioKLSAqIFdTSTEwMzEKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMzEgZXh0ZW5kcyBCUDEwMzEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAzMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyMGEwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTEwMDsKLQotLyoqCi0gKiBXU0kxMTAwCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAwIGV4dGVuZHMgQlAxMTAwCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjExM2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBXU0kxMTAxCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAxIGV4dGVuZHMgQlAxMTAxCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMzgzMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IdHRwSGVhZGVyc1ZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLQotLyoqCi0gKiBCUFdTSTQuCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIHNob3VsZCBiZSBpbnZhbGlkIChIVFRQIHJlcXVlc3QgbWFsZm9ybWVkLCAKLSAqIFhNTCBub3Qgd2VsbCBmb3JtZWQsIC4uLikuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgU3RyaW5nIHJlcXVlc3RNZXNzYWdlID0gbnVsbDsKLSAgICAvL1N0cmluZyByZXNwb25zZU1lc3NhZ2UgPSBudWxsOwotICAgIFN0cmluZyBjb250ZW50VHlwZSA9IG51bGw7Ci0gICAgcmVzdWx0ID0gbnVsbDsKLSAgICAvLwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZQotICAgICAgU3RyaW5nIGh0dHBTdGF0dXMgPQotICAgICAgICBVdGlscy5nZXRIVFRQU3RhdHVzQ29kZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0gICAgICBpZiAoIjQwMCIuZXF1YWxzKGh0dHBTdGF0dXMpKQotICAgICAgewotCi0gICAgICAgIHJlcXVlc3RNZXNzYWdlID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICAgICAgU3RyaW5nIHJlcXVlc3RIVFRQSGVhZGVycyA9Ci0gICAgICAgICAgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgICAgIC8vY2hlY2sgcmVxdWVzdCBIVFRQIEhlYWRlcnMKLQotICAgICAgICAvL0h0dHBIZWFkZXJzVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBIdHRwSGVhZGVyc1ZhbGlkYXRvcigpOwotCi0gICAgICAgIGlmICghSHR0cEhlYWRlcnNWYWxpZGF0b3IKLSAgICAgICAgICAudmFsaWRhdGVIdHRwUmVxdWVzdEhlYWRlcnMocmVxdWVzdEhUVFBIZWFkZXJzKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICB9Ci0KLSAgICAgICAgLy9jaGVjayByZXF1ZXN0IHhtbCBtZXNzYWdlCi0KLSAgICAgICAgY29udGVudFR5cGUgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhodHRwSGVhZGVyLCAiOiIpCi0gICAgICAgICAuZ2V0KEhUVFBDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRS50b1VwcGVyQ2FzZSgpKTsKLSAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoV1NJQ29uc3RhbnRzLkNPTlRFTlRfVFlQRV9URVhUX1hNTCkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVxdWVzdE1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgICAgICAgICAgLy9Eb2N1bWVudCBkb2MgPSBidWlsZGVyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlKSkpOwotICAgICAgICAgICAgICBidWlsZGVyLnBhcnNlKAotICAgICAgICAgICAgICAgIG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBXU0lFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJcblJlcXVlc3QgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgICArICJNZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgICAgICArICJcblxuUmVzcG9uc2UgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICAgKyAiTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXNwb25zZSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIHdzaWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI0NjUyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTExMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTExMDMgZXh0ZW5kcyBCUDExMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyZTQ2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTExMDQuCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIHNob3VsZCBub3QgY29udGFpbiBhIGNvbnRlbnQtdHlwZSBvZiAidGV4dC94bWwiLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTEwNCBleHRlbmRzIEJQMTEwNAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMTA0KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMWEzYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuU2V0Q29va2llMlZhbGlkYXRvcjsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIFRoZSBDb29raWVzIHNob3VsZCBjb25mb3JtIHRvIFJGQzI5NjUuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU2V0Q29va2llMlZhbGlkYXRvciBjb29raWVWYWwgPSBuZXcgU2V0Q29va2llMlZhbGlkYXRvcigpOwotICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgaWYgKGVudHJ5Q29udGV4dAotICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAuZ2V0VHlwZSgpCi0gICAgICAuZXF1YWxzSWdub3JlQ2FzZShNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkpCi0gICAgewotICAgICAgLy8gaWYgcmVzcG9uc2UgdHJvbSBzZXJ2ZXIKLSAgICAgIFN0cmluZyBzZXRDb29raWUyID0KLSAgICAgICAgKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNldC1Db29raWUyIi50b1VwcGVyQ2FzZSgpKTsKLSAgICAgIGlmIChzZXRDb29raWUyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmIChjb29raWVWYWwuaXNTZXRDb29raWUyKHNldENvb2tpZTIudHJpbSgpKSkKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgIlxuTWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgICAgICsgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gaWYgcmVxdWVzdCB0byB0aGUgc2VydmVyCi0gICAgICBTdHJpbmcgY29va2llID0KLSAgICAgICAgKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIkNvb2tpZSIpOwotICAgICAgaWYgKGNvb2tpZSA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoY29va2llVmFsLmlzQ29va2llKGNvb2tpZS50cmltKCkpKQotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiXG5NZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICAgKyAiXG5TT0FQIG1lc3NhZ2U6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTkxM2U1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMTA3OwotCi0vKioKLSAqIFdTSTExMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTExMDcgZXh0ZW5kcyBCUDExMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMzZlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTnVsbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIEVhY2ggc29hcGJpbmQgZXh0ZW5zaW9uIGVsZW1lbnQgd2l0aCBhIHdzZGw6cmVxdWlyZWQgCi0gKiBhdHRyaWJ1dGUgb2YgZmFsc2UgbXVzdCBhcHBlYXIgaW4gYSBtZXNzYWdlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTEwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0gbnVsbDsKLSAgcHJpdmF0ZSBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0ID0gbnVsbDsKLSAgcHJpdmF0ZSBPcGVyYXRpb25TaWduYXR1cmUgcmVzcG9uc2VTaWcgPSBudWxsOwotICBwcml2YXRlIFZlY3RvciBoZWFkZXJSYXJ0cyA9IG51bGw7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBleGlzdFNPQVBIZWFkZXIgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gaXNSZXF1ZXN0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBleGlzdFNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQQm9keSwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotCi0gICAgLy8gaWYgIndzZGw6cmVxdWlyZWQiIGlzIHRydWUgdGhlbiByZXR1cm4KLSAgICBpZiAoYm9keS5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICYmIGJvZHkuZ2V0UmVxdWlyZWQoKS5ib29sZWFuVmFsdWUoKSA9PSB0cnVlKQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gYXNzZXJ0IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgaWYgKGJvcC5nZXRPcGVyYXRpb24oKSA9PSBudWxsCi0gICAgICB8fCBib3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkgPT0gbnVsbAotICAgICAgfHwgYm9wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE1lc3NhZ2UgbXNnID0gYm9wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICBMaXN0IHBhcnRzID0KLSAgICAgIFdTRExVdGlsLmdldFBhcnRzKAotICAgICAgICBib3AuZ2V0T3BlcmF0aW9uKCksCi0gICAgICAgIG1zZywKLSAgICAgICAgYm9keSwKLSAgICAgICAgbWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSk7Ci0KLSAgICBRTmFtZSBhZGRpdGlvbmFsTmFtZSA9IG51bGw7Ci0gICAgLy8gaWYgb3BlcmF0aW9uIGlzIHJwYywgYWRkIHRvIHBhcnRzIHFuYW1lIHFpdGggZnVuY3Rpb24gbmFtZQotICAgIGlmIChXU0lDb25zdGFudHMKLSAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgIC5lcXVhbHMobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSkpCi0gICAgewotICAgICAgLy8gZm91bmQgb3V0IHRhcmdldCBuYW1lc3BhY2UKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBib2R5LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsIHx8IG5hbWVzcGFjZS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAvLyAhISBBVFRFTlRJT04KLSAgICAgICAgLy8gbmFtZXNwYWNlIHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSBzZXJ2aWNlIHRhcmdldCBuYW1lYXBjZSAgICAgICAgICAgIAotICAgICAgICBuYW1lc3BhY2UgPSBjdHguZ2V0QmluZGluZygpLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgIC8vIGluc2VydCBvcGVyYXRpb24gbmFtZSBhcyBmaXJzdCBzaWduYXR1cmUgcGFydAotICAgICAgYWRkaXRpb25hbE5hbWUgPQotICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgbmFtZXNwYWNlLAotICAgICAgICAgIGJvcAotICAgICAgICAgICAgLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgICAuZ2V0T3V0cHV0KCkKLSAgICAgICAgICAgIC5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgIC5nZXRRTmFtZSgpCi0gICAgICAgICAgICAuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLQotICAgIC8vIGNyZWF0ZSB0aGUgc2lnbmF0dXJlIG9mIHRoaXMgb3BlcmF0aW9uCi0gICAgT3BlcmF0aW9uU2lnbmF0dXJlIG9wID0KLSAgICAgIG5ldyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgICAgIHBhcnRzLAotICAgICAgICBudWxsLAotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCkKLSAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICB2YWxpZGF0b3IpLAotICAgICAgICBmYWxzZSk7Ci0gICAgaWYgKGFkZGl0aW9uYWxOYW1lICE9IG51bGwpCi0gICAgICBvcC5nZXRTaWduYXR1cmUoKS5hZGQoMCwgYWRkaXRpb25hbE5hbWUpOwotCi0gICAgaWYgKG9wLmdldFNpZ25hdHVyZSgpLmVxdWFscyhyZXNwb25zZVNpZy5nZXRTaWduYXR1cmUoKSkpCi0gICAgewotICAgICAgLy8gICAgICAgICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIGNyZWF0ZSB0aGUgc2lnbmF0dXJlIG9mIHRoaXMgb3BlcmF0aW9uCi0gICAgICBvcCA9Ci0gICAgICAgIG5ldyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgICAgICAgcGFydHMsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgdmFsaWRhdG9yKSwKLSAgICAgICAgICB0cnVlKTsKLQotICAgICAgaWYgKGFkZGl0aW9uYWxOYW1lICE9IG51bGwpCi0gICAgICAgIG9wLmdldFNpZ25hdHVyZSgpLmFkZCgwLCBhZGRpdGlvbmFsTmFtZSk7Ci0gICAgICBpZiAob3AuZ2V0U2lnbmF0dXJlKCkuZXF1YWxzKHJlc3BvbnNlU2lnLmdldFNpZ25hdHVyZSgpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gICAgICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICJcbk1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyIGhlYWRlciwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotCi0gICAgaWYgKGV4aXN0U09BUEhlYWRlckZhdWx0ID09IGZhbHNlKQotICAgIHsKLSAgICAgIGV4aXN0U09BUEhlYWRlciA9IGZhbHNlOwotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIGlmICJ3c2RsOnJlcXVpcmVkIiBpcyB0cnVlIHRoZW4gcmV0dXJuCi0gICAgaWYgKGhlYWRlci5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICYmIGhlYWRlci5nZXRSZXF1aXJlZCgpLmJvb2xlYW5WYWx1ZSgpID09IHRydWUpCi0gICAgICByZXR1cm47Ci0gICAgLy8gZmluZCBoZWFkciBwYXJ0Ci0gICAgRGVmaW5pdGlvbiBkID0gKERlZmluaXRpb24pIGN0eC5nZXRQYXJhbWV0ZXIoImRlZmluaXRpb24iKTsKLSAgICBUeXBlc1JlZ2lzdHJ5IHRSZWcgPSAoVHlwZXNSZWdpc3RyeSkgY3R4LmdldFBhcmFtZXRlcigiVHlwZXNSZWdpc3RyeSIpOwotICAgIFBhcnQgbWVzUGFydCA9Ci0gICAgICBXU0RMVXRpbC5nZXRQYXJ0KGQuZ2V0TWVzc2FnZShoZWFkZXIuZ2V0TWVzc2FnZSgpKSwgaGVhZGVyLmdldFBhcnQoKSk7Ci0KLSAgICAvLyB0ZXN0IHRoaXMgcGFydCBhbmQgcGFydHMgZnJvbSBoZWFkZXIgICAgICAgIAotICAgIFFOYW1lIHBhcnRRTmFtZSA9IG1lc1BhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICBpZiAocGFydFFOYW1lID09IG51bGwpCi0gICAgICBwYXJ0UU5hbWUgPSB0UmVnLmdldFR5cGUobWVzUGFydC5nZXRFbGVtZW50TmFtZSgpKTsKLSAgICBpZiAocGFydFFOYW1lID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAiUGFydCB0eXBlIGNhbiBub3QgYmUgbnVsbC4iICsgbWVzUGFydC5nZXRFbGVtZW50TmFtZSgpLnRvU3RyaW5nKCkpOwotICAgIFN0cmluZyBsb2NhbCA9IHBhcnRRTmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICBTdHJpbmcgbnMgPSBwYXJ0UU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICBleGlzdFNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlYWRlclJhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbSA9IChFbGVtZW50KSBoZWFkZXJSYXJ0cy5nZXQoaSk7Ci0gICAgICBpZiAoZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobG9jYWwpCi0gICAgICAgICYmIE51bGxVdGlsLmVxdWFscyhucywgZWxlbS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIGV4aXN0U09BUEhlYWRlciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IHRydWUpCi0gICAgICBjdHguY2FuY2VsU09BUEhlYWRlclByb2Nlc3NpbmcoKTsKLSAgICBpZiAoaXNSZXF1ZXN0ID09IHRydWUpCi0gICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IGZhbHNlICYmIGlzUmVxdWVzdCA9PSBmYWxzZSkKLSAgICAgIGV4aXN0U09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgaGVhZGVyRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBmaW5kIGhlYWRyIHBhcnQKLSAgICBEZWZpbml0aW9uIGQgPSAoRGVmaW5pdGlvbikgY3R4LmdldFBhcmFtZXRlcigiZGVmaW5pdGlvbiIpOwotICAgIFR5cGVzUmVnaXN0cnkgdFJlZyA9IChUeXBlc1JlZ2lzdHJ5KSBjdHguZ2V0UGFyYW1ldGVyKCJUeXBlc1JlZ2lzdHJ5Iik7Ci0gICAgUGFydCBtZXNQYXJ0ID0KLSAgICAgIFdTRExVdGlsLmdldFBhcnQoCi0gICAgICAgIGQuZ2V0TWVzc2FnZShoZWFkZXJGYXVsdC5nZXRNZXNzYWdlKCkpLAotICAgICAgICBoZWFkZXJGYXVsdC5nZXRQYXJ0KCkpOwotCi0gICAgLy8gdGVzdCB0aGlzIHBhcnQgYW5kIHBhcnRzIGZyb20gaGVhZGVyZmF1bHQKLSAgICBRTmFtZSBwYXJ0UU5hbWUgPSBtZXNQYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgaWYgKHBhcnRRTmFtZSA9PSBudWxsKQotICAgICAgcGFydFFOYW1lID0gdFJlZy5nZXRUeXBlKG1lc1BhcnQuZ2V0RWxlbWVudE5hbWUoKSk7Ci0gICAgaWYgKHBhcnRRTmFtZSA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlBhcnQgdHlwZSBjYW4gbm90IGJlIG51bGwuIiArIG1lc1BhcnQuZ2V0RWxlbWVudE5hbWUoKS50b1N0cmluZygpKTsKLSAgICBTdHJpbmcgbG9jYWwgPSBwYXJ0UU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgU3RyaW5nIG5zID0gcGFydFFOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWFkZXJSYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW0gPSAoRWxlbWVudCkgaGVhZGVyUmFydHMuZ2V0KGkpOwotICAgICAgaWYgKGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKGxvY2FsKQotICAgICAgICAmJiBOdWxsVXRpbC5lcXVhbHMobnMsIGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotICAgICAgICBleGlzdFNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyRmF1bHQgPT0gdHJ1ZSkKLSAgICAgIGN0eC5jYW5jZWxTT0FQSGVhZGVyUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IGZhdWx0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBzZXQgaW4gdHJ1ZSBpZiBhbnkgU09BUEZhdWx0IGV4aXN0Ci0gICAgdmlzaXRGYXVsdCA9IHRydWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRoaXMuZW50cnlDb250ZXh0ID0gZW50cnlDb250ZXh0OwotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0gICAgICAvLyBjcmVhdGUgcmVxdWVzdCBzaWduYXR1cmUKLSAgICAgIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvYywKLSAgICAgICAgICBudWxsLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF0sCi0gICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgIHZhbGlkYXRvciksCi0gICAgICAgICAgZmFsc2UpOwotCi0gICAgICAvLyBpZiBzdWNoIG9wZXJhdGlvbiBleGlzdCAgICAgIAotICAgICAgaWYgKG1hdGNoICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlzUmVxdWVzdCA9Ci0gICAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVC5lcXVhbHMoCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKTsKLSAgICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgICBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgICBpZiAoIWlzUmVxdWVzdCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3BvbnNlU2lnID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShkb2MpOwotICAgICAgICAgIGlmIChXU0lDb25zdGFudHMKLSAgICAgICAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgICAgICAgIC5lcXVhbHMobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSkpCi0gICAgICAgICAgICByZXNwb25zZVNpZy5jcmVhdGVSUENTaWduYXR1cmUoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBleHRyYWN0IGFsbCBoZWFkZXJzIGZyb20gbWVzc2FnZQotICAgICAgICBFbGVtZW50IGhlYWRlckVsZW0gPQotICAgICAgICAgIFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoCi0gICAgICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0hFQURFUik7Ci0gICAgICAgIGhlYWRlclJhcnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBpZiAoaGVhZGVyRWxlbSAhPSBudWxsKQotICAgICAgICAgIGhlYWRlclJhcnRzID0gWE1MVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cyhoZWFkZXJFbGVtKTsKLQotICAgICAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgICAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlcih0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlckZhdWx0KHRydWUpOwotICAgICAgICB0cmF2ZXJzYWwudmlzaXRTT0FQRmF1bHQodHJ1ZSk7Ci0KLSAgICAgICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdJbnB1dDJTT0FQQm9keSgpOwotCi0gICAgICAgIGlmIChpc1JlcXVlc3QpCi0gICAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRyYXZlcnNhbC5pZ25vcmVCaW5kaW5nSW5wdXQyU09BUEhlYWRlcigpOwotCi0gICAgICAgIGlmIChyZXNwb25zZVNpZyAhPSBudWxsICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKSkKLSAgICAgICAgICB0cmF2ZXJzYWwuaWdub3JlQmluZGluZ091dHB1dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdGYXVsdCgpOwotCi0gICAgICAgIGV4aXN0U09BUEhlYWRlckZhdWx0ID0gdHJ1ZTsKLSAgICAgICAgTWFwIG0gPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBXU0RMVXRpbC5leHBhbmREZWZpbml0aW9uKAotICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgIG0ucHV0KAotICAgICAgICAgICJkZWZpbml0aW9uIiwKLSAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0Ci0gICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpKTsKLSAgICAgICAgVHlwZXNSZWdpc3RyeSB0UmVnID0KLSAgICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgICAgbS5wdXQoIlR5cGVzUmVnaXN0cnkiLCB0UmVnKTsKLSAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpLCBtKTsKLQotICAgICAgICBpZiAoaXNSZXF1ZXN0ID09IGZhbHNlKQotICAgICAgICAgIGlmIChleGlzdFNPQVBIZWFkZXJGYXVsdCA9PSB0cnVlKQotICAgICAgICAgICAgZXhpc3RTT0FQSGVhZGVyID0gdHJ1ZTsKLQotICAgICAgICBpZiAocmVzcG9uc2VTaWcgIT0gbnVsbAotICAgICAgICAgICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKQotICAgICAgICAgICYmIHZpc2l0RmF1bHQgPT0gZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJcbk1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiXG5NZXNzYWdlOlxuIiArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmNDRjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIFdTSTExMDkuCi0gKiBBbnkgY29uZm9ybWFuY2UgY2xhaW1zIE1VU1QgYmUgY2hpbGRyZW4gb2YgdGhlIHNvYXA6SGVhZGVyIGVsZW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwOShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgaWYgKChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkgIT0gbnVsbCkKLSAgICAgICYmICghdGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgICAgRWxlbWVudCByb290ID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgICAvLyBmaW5kICJIZWFkZXIiIGVsZW1lbnQKLSAgICAgICAgTm9kZUxpc3QgaGVhZGVyTGlzdCA9Ci0gICAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkhlYWRlciIpOwotICAgICAgICBFbGVtZW50IGhlYWRlckVsZW0gPSBudWxsOwotICAgICAgICBpZiAoaGVhZGVyTGlzdCAhPSBudWxsICYmIGhlYWRlckxpc3QuZ2V0TGVuZ3RoKCkgIT0gMCkKLSAgICAgICAgICBoZWFkZXJFbGVtID0gKEVsZW1lbnQpIGhlYWRlckxpc3QuaXRlbSgwKTsKLQotICAgICAgICAvLyBmaW5kICJDbGFpbSIgZWxlbWVudAotICAgICAgICBOb2RlTGlzdCBjbGFpbUxpc3QgPQotICAgICAgICAgIHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lDb25zdGFudHMuTlNfVVJJX0NMQUlNLCAiQ2xhaW0iKTsKLSAgICAgICAgaWYgKGNsYWltTGlzdCA9PSBudWxsIHx8IGNsYWltTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYWltTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChoZWFkZXJFbGVtID09IG51bGwKLSAgICAgICAgICAgICAgfHwgY2xhaW1MaXN0Lml0ZW0oaSkuZ2V0UGFyZW50Tm9kZSgpICE9IGhlYWRlckVsZW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjNiOWUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBXU0kxMTEwLgotICogQW55IGNvbmZvcm1hbmNlIGNsYWltcyBNVVNUIGFkaGVyZSB0byB0aGUgV1MtSSBjb25mb3JtYW5jZSAKLSAqIGNsYWltIHNjaGVtYSBkZWZpbmVkIGluIHRoZSBCYXNpYyBQcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTExMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMTAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIERvY3VtZW50IGRvYzsKLSAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpICE9IG51bGwKLSAgICAgICYmICF0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgICYmIChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBmaW5kICJDbGFpbSIgZWxlbWVudAotICAgICAgTm9kZUxpc3QgY2xhaW1MaXN0ID0KLSAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfQ0xBSU0sICJDbGFpbSIpOwotICAgICAgaWYgKGNsYWltTGlzdCA9PSBudWxsIHx8IGNsYWltTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYWltTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIGNsYWltTGlzdC5pdGVtKGkpOwotICAgICAgICAgIC8vIGNoZWNrICJjb25mb3Jtc1RvIiBhdHRyaWJ1dGUKLSAgICAgICAgICBOb2RlIG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImNvbmZvcm1zVG8iKTsKLSAgICAgICAgICBpZiAobm9kZSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogVGhpcyBpcyBjaGVja2VkIGluIFdTSTExMTEKLSAgICAgICAgICAvLyBjaGVjayAibXVzdFVuZGVyc3RhbmQiIGF0dHJpYnV0ZQotICAgICAgICAgIG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGVOUyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsICJtdXN0VW5kZXJzdGFuZCIpOwotICAgICAgICAgIGlmIChub2RlICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gY3JlYXRlRmFpbHVyZURldGFpbCgiXG5TT0FQIG1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICAqLwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODRlM2ZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBXU0kxMTExLgotICogQW55IGNvbmZvcm1hbmNlIGNsYWltcyBNVVNUIE5PVCB1c2Ugc29hcDptdXN0VW5kZXJzdGFuZD0nMScuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTExIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTExMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkgIT0gbnVsbAotICAgICAgJiYgIXRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgJiYgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIC8vIGZpbmQgIkNsYWltIiBlbGVtZW50Ci0gICAgICBOb2RlTGlzdCBjbGFpbUxpc3QgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9DTEFJTSwgIkNsYWltIik7Ci0gICAgICBpZiAoY2xhaW1MaXN0ICE9IG51bGwgJiYgY2xhaW1MaXN0LmdldExlbmd0aCgpICE9IDApCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIGNvbnRhaW5zICJDbGFpbSIgZWxlbWVudCBmaW5kIGFsbCAiSGVhZGVyIiBlbGVtZW50cwotICAgICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0KLSAgICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiSGVhZGVyIik7Ci0gICAgICAgIGlmIChoZWFkZXJMaXN0ICE9IG51bGwgJiYgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaUhlYWRlciA9IDA7IGlIZWFkZXIgPCBoZWFkZXJMaXN0LmdldExlbmd0aCgpOyBpSGVhZGVyKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gZmluZCBhbGwgIkhlYWRlciIgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgICAgIE5vZGUgY2hpbGQgPSBoZWFkZXJMaXN0Lml0ZW0oaUhlYWRlcikuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChjaGlsZC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgY29udGFpbnMgIm11c3RVbmRlcnN0YW5kIiAtPiBmYWlsCi0gICAgICAgICAgICAgICAgU3RyaW5nIGF0dHJWYWwgPQotICAgICAgICAgICAgICAgICAgKChFbGVtZW50KSBjaGlsZCkuZ2V0QXR0cmlidXRlTlMoCi0gICAgICAgICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICAgICAgICAgICAgIm11c3RVbmRlcnN0YW5kIik7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJWYWwgIT0gbnVsbCAmJiAhIiIuZXF1YWxzKGF0dHJWYWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICBpSGVhZGVyID0gaGVhZGVyTGlzdC5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjg5ZGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTExNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTExNiBleHRlbmRzIEJQMTExNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMTE2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjNlYmFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUFdTSTQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTIxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEyMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdUOiAtLSBzdGFydDogYmFzZSBvbiB3c2kxMDExIC0gc2hvdWxkIHJlZmFjdG9yIHRoaXMKLQotICAgICAgQmluZGluZ1tdIGJpbmRpbmdzID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKTsKLQotICAgICAgLy8gZ2V0IHNvYXAgbWVzc2FnZSBjaGlsZCBuYW1lCi0gICAgICAvLyBHZXQgdGhlIERPTSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZSBzb2FwOmJvZHkgKGlmIG5vbi1lbXB0eSkKLSAgICAgIERvY3VtZW50IG1lc3NhZ2VEb2MgPSBudWxsOwotCi0gICAgICBRTmFtZSBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSA9IG51bGw7Ci0gICAgICBpZiAoIWVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZURvYyA9Ci0gICAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIC8vIGdldCBzb2FwIG9wZXJhdGlvbiBuYW1lIGZyb20gdGhlIHNvYXA6Ym9keQotCi0gICAgICAgIC8vIE5PVEU6IGdldFNvYXBCb2R5Q2hpbGQoKSBtYXkgcmV0dXJuIG51bGwsIGlmIHRoZSBzb2FwOmJvZHkgZGlkIG5vdCBjb250YWluIGFueSBjaGlsZCBlbGVtZW50cwotICAgICAgICBFbGVtZW50IHNvYXBNZXNzYWdlRWxlbWVudCA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBCb2R5Q2hpbGQobWVzc2FnZURvYyk7Ci0KLSAgICAgICAgLy8gZm9yIGRvYy1saXQuLi4gZmluZCB0aGUgd3NkbDpwYXJ0IGZyb20gb25lIG9mIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9ucyB0aGF0IGhhcyAKLSAgICAgICAgLy8gdGhlIHNvYXAgZWxlbWVudCB1c2VkIGluIHRoZSBtZXNzYWdlLiAgICAgIAotICAgICAgICAvLyB3ZSBhcmUgbG9va2luZyBmb3IgYSBwYXJ0IHdpdGggYW4gZWxlbWVudCBhdHRyaWIgdmFsIG1hdGNoaW5nIHRoZSBzb2FwIG1lc3NhZ2UgZWxlbWVudAotICAgICAgICBpZiAoc29hcE1lc3NhZ2VFbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSA9Ci0gICAgICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgICAgIHNvYXBNZXNzYWdlRWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSwKLSAgICAgICAgICAgICAgc29hcE1lc3NhZ2VFbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoKG1lc3NhZ2VEb2MgPT0gbnVsbCkgfHwgdGhpcy52YWxpZGF0b3IuaXNGYXVsdChtZXNzYWdlRG9jKSkKLSAgICAgIHsKLSAgICAgICAgLy8gZW1wdHkgbWVzc2FnZXMgYW5kIG1lc3NhZ2VzIGNvbnRhaW5pbmcgc29hcDpGYXVsdHMgZG8gbm90IHF1YWxpZnkgZm9yIHRoaXMgVEEKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgQmluZGluZ09wZXJhdGlvbltdIGRvY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsCi0gICAgICAgICAgYmluZGluZ3MpOwotICAgICAgLy8gbGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgbWF0Y2ggdGhlIDx3c2RsOmlucHV0PiBvciA8d3NkbDpvdXRwdXQ+IChkZXBlbmRpbmcgb24gZW50cnlUeXBlKQotICAgICAgLy8gZm9yIHBhcnQgZWxlbWVudD0iLi4uIgotICAgICAgLy8gKElTU1VFOiB3aGF0IGFib3V0IHBhcnQgdHlwZT0iLi4uIj8pCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcG90ZW50aWFsRG9jTGl0T3BzID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0gICAgICAvLyBHVDogLS0tIGVuZDogYmFzZSBvbiB3c2kxMDExCi0KLSAgICAgIC8vICAgICAgICAgICAgICAgCi0gICAgICBpZiAocG90ZW50aWFsRG9jTGl0T3BzLmxlbmd0aCA9PSAwKQotICAgICAgewotICAgICAgICAvLyBub3QgZG9jLWxpdCBzbyBxdWl0Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdlIGtub3cgdGhlcmUgaXMgYSBkb2MtbGl0IG1hdGNoLCBzbyBub3cgdHJ5IHRvIHZhbGlkYXRlIHRoZSBzb2FwIG1lc3NhZ2UgYWdhaW5zdCB0aGUKLSAgICAgIC8vIHJlZmVyZW5jZWQgc2NoZW1hCi0KLSAgICAgIC8vIEdUIC0gaG93IHRvIHJlZmVyZW5jZSB0aGUgc2NoZW1hIGRvY3VtZW50Pz8gbmVlZCB0byB1c2UgdGhlIDx3c2RsOnBhcnQ+LCBvciBkbyBpdCBwdXJlbHkKLSAgICAgIC8vIGZyb20gdGhlIHNvYXAgbWVzc2FnZSBlbGVtZW50cz8KLSAgICAgIC8vIGllIGJvZHksIGVudmVsb3BlIG9yIHdzZGw/PwotCi0gICAgICAvLyA8ZXhwZXJpbWVudD4KLQotICAgICAgYm9vbGVhbiBpc1NjaGVtYVZhbGlkOwotICAgICAgCi0gICAgICB0cnkgewotICAgICAgCQlpc1NjaGVtYVZhbGlkID0gdGhpcy52YWxpZGF0b3IubWVzc2FnZUlzRG9jTGl0U2NoZW1hVmFsaWQoZW50cnlDb250ZXh0KTsgICAgICAgICAKLSAgICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgIAkJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgIAl9Ci0gICAgICAvLyA8L2V4cGVyaW1lbnQ+Ci0gICAgICAKLQotICAgICAgLy9pc1NjaGVtYVZhbGlkID0gdHJ1ZTsgLy8gZm9yIG5vdywgZ2V0dGluZyB0aGlzIGZhciBkb2VzIGl0Ci0KLSAgICAgIGlmIChpc1NjaGVtYVZhbGlkKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNmYwODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEyMDE7Ci0KLS8qKgotICogV1NJMTIwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTIwMSBleHRlbmRzIEJQMTIwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTMxY2Q2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMjAyOwotCi0vKioKLSAqIFdTSTEyMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTEyMDIgZXh0ZW5kcyBCUDEyMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTIwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYzYmNiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTIwMzsKLQotLyoqCi0gKiBXU0kxMjAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMjAzIGV4dGVuZHMgQlAxMjAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEyMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZGRhNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEyMDQ7Ci0KLS8qKgotICogV1NJMTIwNAotICovCi1wdWJsaWMgY2xhc3MgV1NJMTIwNCBleHRlbmRzIEJQMTIwNAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMjA0KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjk0OTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMjA4OwotCi0vKioKLSAqIFdTSTEyMDgKLSAqLwotcHVibGljIGNsYXNzIFdTSTEyMDggZXh0ZW5kcyBCUDEyMDgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTIwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmNTdjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTIxMTsKLQotLyoqCi0gKiBXU0kxMjExCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMjExIGV4dGVuZHMgQlAxMjExCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEyMTEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMGViODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDE7Ci0KLS8qKgotICogV1NJMTMwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwMSBleHRlbmRzIEJQMTMwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTk3NmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzAyOwotCi0vKioKLSAqIFdTSTEzMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMDIgZXh0ZW5kcyBCUDEzMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIyZTEzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMwNTsKLQotLyoqCi0gKiBXU0kxMzA1Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzA1IGV4dGVuZHMgQlAxMzA1Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMDUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MTA2MjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDY7Ci0KLS8qKgotICogV1NJMTMwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwNiBleHRlbmRzIEJQMTMwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwNWE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzA3OwotCi0vKioKLSAqIFdTSTEzMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMDcgZXh0ZW5kcyBCUDEzMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIyNzFjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMwODsKLQotLyoqCi0gKiBXU0kxMzA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzA4IGV4dGVuZHMgQlAxMzA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjQzNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDk7Ci0KLS8qKgotICogV1NJMTMwOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwOSBleHRlbmRzIEJQMTMwOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTk4ZmFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIFRoZSByZXNwb25zZSAoU09BUCBlbnZlbG9wZSkgc2hvdWxkIGJlIGNhcnJpZWQgYnkgYW4gSFRUUCAKLSAqIHJlc3BvbnNlLCBvdmVyIHNhbWUgSFRUUCBjb25uZWN0aW9uIGFzIHRoZSBSZXF1ZXN0LiAKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMTEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzExKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICBib29sZWFuIGlzT25lV2F5UmVzcG9uc2UgPSB0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCk7Ci0KLSAgICBEb2N1bWVudCBkb2NSZXNwb25zZSA9IG51bGw7Ci0gICAgaWYgKCFpc09uZVdheVJlc3BvbnNlKQotICAgICAgZG9jUmVzcG9uc2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2VEb2N1bWVudCgpOwotCi0gICAgLy9pZiBmYXVsdAotICAgIGlmICghaXNPbmVXYXlSZXNwb25zZSAmJiB0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvY1Jlc3BvbnNlKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsgLy8gbm90IGZhdWx0Ci0gICAgICAvLyAxLiBnZXQgYW4gb3BlcmF0aW9uIGZyb20gcmVxdWVzdAotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0gICAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvY1JlcXVlc3QsCi0gICAgICAgICAgYWN0aW9uLAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgcmVnaXN0cnkpOwotCi0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLQotICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBudWxsOwotCi0gICAgICAgICAgLy8gICAgQ2hlY2sgd2hldGhlciB0aGUgdHJhbnNwb3J0IGF0dHJpYnV0ZSBoYXMgdGhlIHZhbHVlIAotICAgICAgICAgIC8vICAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi4gCi0gICAgICAgICAgTGlzdCBleHRFbGVtID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGluZGV4ID0gZXh0RWxlbS5pdGVyYXRvcigpOyBpbmRleC5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9iamVjdCBvID0gKE9iamVjdCkgaW5kZXgubmV4dCgpOwotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTT0FQQmluZGluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIG87Ci0gICAgICAgICAgICAgIGlmICghV1NJQ29uc3RhbnRzCi0gICAgICAgICAgICAgICAgLk5TX1VSSV9TT0FQX0hUVFAKLSAgICAgICAgICAgICAgICAuZXF1YWxzKHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vZmluZCBvcGVyYXRpb24gaW4gcG9ydCB0eXBlCi0gICAgICAgICAgb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgICBpZiAob3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoaXNPbmVXYXlSZXNwb25zZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3BlcmF0aW9uLmdldE91dHB1dCgpID09IG51bGwpCi0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gICAgY2hlY2sgd2hldGhlciB0aGUgcmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSBsb2cgCi0gICAgICAgICAgLy8gIGNvbnRhaW5zIHRoZSBvdXRwdXQgbWVzc2FnZQotICAgICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgICAgICBkb2NSZXNwb25zZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKTsKLSAgICAgICAgICBpZiAoKHNvYXBCb2R5TGlzdCA9PSBudWxsKSB8fCAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYW55IHNvYXAgQm9keSBlbGVtZW50cwotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50IG5leHRCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbShpKTsKLSAgICAgICAgICAgIEVsZW1lbnQgc29hcE1lc3NhZ2VFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChuZXh0Qm9keUVsZW0pOwotICAgICAgICAgICAgd2hpbGUgKHNvYXBNZXNzYWdlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHRoZSBvcGVyYXRpb24gb3V0cHV0IGhhcyBtZXNzYWdlIGZyb20gU09BUCByZXNwb25zZQotICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgICAgICBRTmFtZSBzb2FwTWVzc2FnZVFOYW1lID0KLSAgICAgICAgICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAgICAgICAgIGlmIChtZXNzYWdlICE9IG51bGwKLSAgICAgICAgICAgICAgICAmJiBzb2FwTWVzc2FnZVFOYW1lLmVxdWFscyhtZXNzYWdlLmdldFFOYW1lKCkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIHNvYXBNZXNzYWdlRWxlbWVudCA9Ci0gICAgICAgICAgICAgICAgWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoc29hcE1lc3NhZ2VFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0ID09IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKG51bGwsIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmQzMTY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzE2OwotCi0vKioKLSAqIFdTSTEzMTYKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMTYgZXh0ZW5kcyBCUDEzMTYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMxNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEzY2Q5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMxODsKLQotLyoqCi0gKiBXU0kxMzE4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzE4IGV4dGVuZHMgQlAxMzE4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMTgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTE2MDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1OTIwZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTE2MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDE2MDE7Ci0KLS8qKgotICogV1NJMTYwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTYwMSBleHRlbmRzIEJQMTYwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxNjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTdiZWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxNzAxOwotCi0vKioKLSAqIFdTSTE3MDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTE3MDEgZXh0ZW5kcyBCUDE3MDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTcwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFjMWExMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQNDEwMDsKLQotLyoqCi0gKiBXU0k0MTAwCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0k0MTAwIGV4dGVuZHMgQlA0MTAwCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTQxMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MDE2NWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDQxMDE7Ci0KLS8qKgotICogV1NJNDEwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJNDEwMSBleHRlbmRzIEJQNDEwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0k0MTAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjVmZmFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlA0MTAyOwotCi0vKioKLSAqIFdTSTQxMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDIgZXh0ZW5kcyBCUDQxMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2MWQwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDMgZXh0ZW5kcyBCUDQxMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYxNzZkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDQKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDQgZXh0ZW5kcyBCUDQxMDQKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmZjhkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDUKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDUgZXh0ZW5kcyBCUDQxMDUKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhNDRhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDYKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDYgZXh0ZW5kcyBCUDQxMDYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkNTI0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDcgZXh0ZW5kcyBCUDQxMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZjAzZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VRERJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuT3ZlcnZpZXdEb2M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi0KLS8qKgotICogQlAzMDAxIC0gVGhlIHRNb2RlbCBlbGVtZW50IHVzZXMgV1NETCBhcyB0aGUgZGVzY3JpcHRpb24gbGFuZ3VhZ2U6Ci0gKiB0aGUgdWRkaTpvdmVydmlld0RvYy91ZGRpOm92ZXJ2aWV3VVJMIGVsZW1lbnQgY29udGFpbnMgYSByZWZlcmVuY2UKLSAqIHRvIGEgV1NETCBkZWZpbml0aW9uLCB3aGljaCB1c2VzIGEgbmFtZXNwYWNlCi0gKiBvZiBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy4KLSAqIFRoZSB1ZGRpOm92ZXJ2aWV3VVJMIG1heSB1c2UgdGhlIGZyYWdtZW50IG5vdGF0aW9uIHRvIHJlc29sdmUKLSAqIHRvIGEgd3NkbDpiaW5kaW5nLgotICovCi1wdWJsaWMgY2xhc3MgQlAzMDAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFVERElWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAzMDAxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcmVzdWx0IHZhcmlhYmxlIHRvIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEIHZhbHVlIGFuZAotICAgKiBwbGFjZXMgYSB0TW9kZWwga2V5IGluIHRoZSBmYXVsdCBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHBhcmFtIHRNb2RlbEtleQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHNldEZhdWx0TWVzc2FnZShTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiVGhlIHRNb2RlbCBrZXkgaXM6IFsiICsgdE1vZGVsS2V5ICsgIl0uIjsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSB0TW9kZWwgZnJvbSB0aGUgZW50cnlDb250ZXh0Ci0gICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBJZiB0aGUgdE1vZGVsIGRvZXMgbm90IGV4aXN0LCB0aGVuIGZhaWwKLSAgICBpZiAodE1vZGVsID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9ICJDb3VsZCBub3QgbG9jYXRlIGEgdE1vZGVsLiI7Ci0gICAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgICAgdGVzdEFzc2VydGlvbiwKLSAgICAgICAgcmVzdWx0LAotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGtleSA9IHRNb2RlbC5nZXRUTW9kZWxLZXkoKTsKLQotICAgIE92ZXJ2aWV3RG9jIGRvYyA9IHRNb2RlbC5nZXRPdmVydmlld0RvYygpOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXJsVGV4dCA9IGRvYy5nZXRPdmVydmlld1VSTFN0cmluZygpOwotCi0gICAgICAvLyBUcnkgdG8gcmVzb2x2ZSB0aGUgVVJMICYgY2hlY2sgdGhlIFdTREwKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbmV3IFdTRExEb2N1bWVudCh1cmxUZXh0KTsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCk7Ci0gICAgICAgIE1hcCBuYW1lc3BhY2VzID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICAgIGlmICghbmFtZXNwYWNlcy5jb250YWluc1ZhbHVlKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCkpCi0gICAgICAgIHsKLSAgICAgICAgICB1cmxUZXh0ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCBiaW5kaW5nCi0gICAgICAgIGJpbmRpbmcgPSBVRERJVXRpbHMuZ2V0QmluZGluZyh1cmxUZXh0LCB3c2RsRG9jdW1lbnQpOwotCi0gICAgICAgIC8vIFNlZSBpZiB0aGUgYmluZGluZyBpcyBpbiB0aGUgV1NETCBkb2N1bWVudAotICAgICAgICBpZiAoYmluZGluZyA9PSBudWxsCi0gICAgICAgICAgfHwgZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmcuZ2V0UU5hbWUoKSkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHVybFRleHQgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgdXJsVGV4dCA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1cmxUZXh0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBmcmFnbWVudElEID0gbnVsbDsKLSAgICAgICAgaW50IGluZGV4ID0gdXJsVGV4dC5pbmRleE9mKCIjIik7Ci0gICAgICAgIGlmIChpbmRleCA+IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgZnJhZ21lbnRJRCA9IHVybFRleHQuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGZyYWdtZW50SUQgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoZnJhZ21lbnRJRC5sZW5ndGgoKSAhPSAwKQotICAgICAgICAgICYmIChmcmFnbWVudElELnRvVXBwZXJDYXNlKCkuaW5kZXhPZigieHBvaW50ZXIoIi50b1VwcGVyQ2FzZSgpKSA9PSAtMQotICAgICAgICAgICAgfHwgZnJhZ21lbnRJRC5sYXN0SW5kZXhPZigiKSIpICE9IGZyYWdtZW50SUQubGVuZ3RoKCkgLSAxKSkKLSAgICAgICAgewotICAgICAgICAgIHNldEZhdWx0TWVzc2FnZShrZXkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2V0RmF1bHRNZXNzYWdlKGtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldEZhdWx0TWVzc2FnZShrZXkpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MmNkZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZTsKLQotCi0vKioKLSAqIEJQMzAwMiAtIFRoZSB1ZGRpOmJpbmRpbmdUZW1wbGF0ZSBlbGVtZW50IGNvbnRhaW5zIGEgdWRkaTphY2Nlc3NQb2ludCBlbGVtZW50LAotICogd2l0aCBhIG5vbi1lbXB0eSB2YWx1ZS4KLSAqLwotcHVibGljIGNsYXNzIEJQMzAwMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMzAwMihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHNlcnZpY2VMb2NhdGlvbiA9IG51bGw7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZ1RlbXBsYXRlIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIEJpbmRpbmdUZW1wbGF0ZSBiaW5kaW5nVGVtcGxhdGUgPQotICAgICAgKEJpbmRpbmdUZW1wbGF0ZSkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIHRoZSBiaW5kaW5nVGVtcGxhdGUgZG9lcyBub3QgY29udGFpbiBhbiBhY2Nlc3NQb2ludCwgdGhlbiBmYWlsCi0gICAgaWYgKChiaW5kaW5nVGVtcGxhdGUuZ2V0QWNjZXNzUG9pbnQoKSA9PSBudWxsKQotICAgICAgfHwgKChzZXJ2aWNlTG9jYXRpb24gPSBiaW5kaW5nVGVtcGxhdGUuZ2V0QWNjZXNzUG9pbnQoKS5nZXRUZXh0KCkpCi0gICAgICAgID09IG51bGwpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAiVGhlIGJpbmRpbmdUZW1wYXRlIGtleSBpczogWyIKLSAgICAgICAgICArIGJpbmRpbmdUZW1wbGF0ZS5nZXRCaW5kaW5nS2V5KCkKLSAgICAgICAgICArICJdLiI7Ci0gICAgfQotCi0gICAgLy8gRWxzZSBzYXZlIHRoZSBzZXJ2aWNlIGxvY2F0aW9uIGluIHRoZSBhc3NlcnRpb24gcmVzdWx0Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFNhdmUgc2VydmljZSBsb2NhdGlvbiBpbiBhbmFseXplciBjb250ZXh0Ci0gICAgICBlbnRyeUNvbnRleHQKLSAgICAgICAgLmdldEFuYWx5emVyQ29udGV4dCgpCi0gICAgICAgIC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCkKLSAgICAgICAgLnNldFNlcnZpY2VMb2NhdGlvbigKLSAgICAgICAgc2VydmljZUxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGU3ZDQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9CUDMwMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLQotLyoqCi0gKiBCUDMwMDMgLSBUaGUgdWRkaTp0TW9kZWwgaXMgY2F0ZWdvcml6ZWQgdXNpbmcgdGhlIHVkZGk6dHlwZXMgdGF4b25vbXksCi0gKiBhcyAid3NkbFNwZWMiOiB0aGUgdWRkaTprZXllZFJlZmVyZW5jZSBlbGVtZW50IGhhcyBhbiBhdHRyaWJ1dGUga2V5VmFsdWUKLSAqIGVxdWFsIHRvICJ3c2RsU3BlYyIsIGFuZCBrZXlOYW1lIGVxdWFsIHRvICJ1ZGRpLW9yZzp0eXBlcyIgb3IgInR5cGVzIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMzAwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMzAwMyhVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIHRNb2RlbCBmcm9tIHRoZSBlbnRyeUNvbnRleHQKLSAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbCkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIHRoZSB0TW9kZWwgZG9lcyBub3QgZXhpc3QsIHRoZW4gZmFpbAotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgYSB0TW9kZWwgd2l0aCBhIGNhdGVnb3JpemF0aW9uIG9mICd3c2RsU3BlYycuIjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIHRNb2RlbCBhbmQgaXQgaXMgbm90IGNhdGVnb3JpemVkIGFzICJ3c2RsU3BlYyIsIHRoZW4gZmFpbAotICAgIGVsc2UgaWYgKCEoVURESVV0aWxzLmlzV3NkbFNwZWModE1vZGVsKSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIKLSAgICAgICAgICArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICsgIl1cbiIKLSAgICAgICAgICArICJUaGUgY2F0ZWdvcnlCYWcgaXM6IFsiCi0gICAgICAgICAgKyB0aGlzLnZhbGlkYXRvci5jYXRlZ29yeUJhZ1RvU3RyaW5nKHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpKQotICAgICAgICAgICsgIl0iOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvVURESVZhbGlkYXRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9VRERJVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGJjOWVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9VRERJVmFsaWRhdG9ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLlNlcnZpY2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQmluZGluZ0RldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci0KLS8qKgotICogVGhlIFVEREkgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgYSB3ZWIgc2VydmljZSBkZXNjcmlwdGlvbiB3YXMgcHVibGlzaGVkIGNvcnJlY3RseSBpbiBhIFVEREkgcmVnaXN0cnkuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVURESVZhbGlkYXRvckltcGwKLSAgZXh0ZW5kcyBCYXNlVmFsaWRhdG9ySW1wbAotICBpbXBsZW1lbnRzIFVERElWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFVEREkgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJvdGVjdGVkIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZTsKLSAgLyoqCi0gICAqIFVEREkgcHJveHkuCi0gICAqLwotICBwcm90ZWN0ZWQgVURESVByb3h5IHVkZGlQcm94eTsKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RhYmxlOwotCi0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfRElTQ09WRVJZOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgY29sbGVjdGlvbiBvZiBlbnRyeSB0eXBlcyB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgZW50cnkgdHlwZXMgKFN0cmluZ3MpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0RW50cnlUeXBlcygpIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICBUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUsCi0gICAgICAgICAgICAgIFRZUEVfRElTQ09WRVJZX1RNT0RFTH07Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgICAgICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgICAgICAgIHRocm93cyBXU0lFeGNlcHRpb24gewotICAgICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsCi0gICAgICAgICAgICAgIGFzc2VydGlvbnMuZ2V0QXJ0aWZhY3QoVFlQRV9ESVNDT1ZFUlkpLCByZXBvcnRBcnRpZmFjdCwgcmVwb3J0ZXIpOwotICAgICAgdGhpcy51ZGRpUmVmZXJlbmNlID0gYW5hbHl6ZXJDb25maWcuZ2V0VURESVJlZmVyZW5jZSgpOwotICAgICAgdGVzdGFibGUgPSBhbmFseXplckNvbmZpZy5pc1VERElSZWZlcmVuY2VTZXQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuVURESVZhbGlkYXRvciNpbml0KG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQsIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCwgb3JnLndzaS50ZXN0LmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlLCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEJhc2VWYWxpZGF0b3JJbXBsCi0gICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsIHByb2ZpbGVBcnRpZmFjdCwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLQotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnID0gVXRpbHMuZ2V0QW5hbHl6ZXJDb25maWcocmVwb3J0ZXIpOwotICAgIHRlc3RhYmxlID0gKChhbmFseXplckNvbmZpZyAhPSBudWxsKSAmJiAoYW5hbHl6ZXJDb25maWcuaXNVRERJUmVmZXJlbmNlU2V0KCkpKTsJCi0KLSAgICAvLyBTYXZlIGlucHV0IHJlZmVyZW5jZXMKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSB1ZGRpUmVmZXJlbmNlOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuVURESVZhbGlkYXRvciN2YWxpZGF0ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9IG51bGw7Ci0gICAgVE1vZGVsIHRNb2RlbCA9IG51bGw7Ci0KLSAgICAvLyBpdCBkZXByaWNhdGVkIGFmdGVyIHJlZmFjdG9yaW5nIAotICAgIC8vIG5vdyB0aGUgaW5uZXIgY2xhc3NlcyBtb3ZlZCBvdXQgZnJvbSB2YWxpZGF0b3IKLSAgICAvL1N0cmluZyBjbGFzc1ByZWZpeCA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiJCI7Ci0gICAgU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldFBhY2thZ2UoKS5nZXROYW1lKCkrIi4iOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2V0IHVwIGEgcmVmZXJlbmNlIHRvIHRoZSBVRERJIHJlZ2lzdHJ5Ci0gICAgICB1ZGRpUHJveHkgPSBuZXcgVURESVByb3h5KCk7Ci0KLSAgICAgIC8vbmV3IFNvY2tldChuZXcgSW5ldEFkZHJlc3ModWRkaVJlZmVyZW5jZS5nZXRJbnF1aXJ5VVJMKCkpKTsKLSAgICAgIHVkZGlQcm94eS5zZXRJbnF1aXJ5VVJMKHVkZGlSZWZlcmVuY2UuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICAgIGJvb2xlYW4gd2FzRXggPSBmYWxzZTsKLSAgICAgIElucHV0U3RyZWFtIHN0cmVhbTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBVUkwgdXJsID0gU3RyaW5nVXRpbHMuZ2V0VVJMKG51bGwsIHVkZGlSZWZlcmVuY2UuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICAgICAgc3RyZWFtID0gdXJsLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgc3RyZWFtLmNsb3NlKCk7Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChVbmtub3duSG9zdEV4Y2VwdGlvbiBleCkKLSAgICAgIHsKLSAgICAgICAgd2FzRXggPSB0cnVlOwotICAgICAgfQotCi0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXgpCi0gICAgICB7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghd2FzRXgpCi0gICAgICB7Ci0KLSAgICAgICAgLy8gSWYgdGhlIFVEREkgcmVmZXJlbmNlIGlzIHRvIGEgYmluZGluZ1RlbXBsYXRlIHRoZW4gZ2V0IGl0Ci0gICAgICAgIGlmICh1ZGRpUmVmZXJlbmNlLmdldEtleVR5cGUoKS5lcXVhbHMoVURESVJlZmVyZW5jZS5CSU5ESU5HX0tFWSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgYmluZGluZyBkZXRhaWwgd2hpY2ggd2lsbCBjb250YWluIHRoZSBiaW5kaW5nVGVtcGxhdGUKLSAgICAgICAgICBCaW5kaW5nRGV0YWlsIGJpbmRpbmdEZXRhaWwgPQotICAgICAgICAgICAgdWRkaVByb3h5LmdldF9iaW5kaW5nRGV0YWlsKHVkZGlSZWZlcmVuY2UuZ2V0S2V5KCkpOwotCi0gICAgICAgICAgLy8gR2V0IGJpbmRpbmdUZW1wbGF0ZQotICAgICAgICAgIGJpbmRpbmdUZW1wbGF0ZSA9Ci0gICAgICAgICAgICAoQmluZGluZ1RlbXBsYXRlKSBiaW5kaW5nRGV0YWlsCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nVGVtcGxhdGVWZWN0b3IoKQotICAgICAgICAgICAgICAuZWxlbWVudEF0KAotICAgICAgICAgICAgICAwKTsKLQotICAgICAgICAgIGlmICh2ZXJib3NlT3B0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKLSAgICAgICAgICAgICAgIiAgICBCaW5kaW5nVGVtcGxhdGUgLSAiCi0gICAgICAgICAgICAgICAgKyBVRERJVXRpbHMuYmluZGluZ1RlbXBsYXRlVG9TdHJpbmcoYmluZGluZ1RlbXBsYXRlKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gR2V0IHRoZSB3c2RsU3BlYyB0TW9kZWwKLSAgICAgICAgICB0TW9kZWwgPSBVRERJVXRpbHMuZmluZFRNb2RlbCh1ZGRpUHJveHksIGJpbmRpbmdUZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgIHZlcmJvc2VPcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRWxzZSBpdCBoYXMgdG8gYmUgYSB0TW9kZWwKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9Ci0gICAgICAgICAgICB1ZGRpUHJveHkuZ2V0X3RNb2RlbERldGFpbCh1ZGRpUmVmZXJlbmNlLmdldEtleSgpKTsKLSAgICAgICAgICB0TW9kZWwgPSAoVE1vZGVsKSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCkuZWxlbWVudEF0KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCi0gICAgICAgICAgICAiICAgIFRNb2RlbCBzcGVjaWZpZWQgb3IgZm91bmQgaW4gYmluZGluZ1RlbXBsYXRlIC0gIgotICAgICAgICAgICAgICArIFVERElVdGlscy50TW9kZWxUb1N0cmluZyh0TW9kZWwpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoYmluZGluZ1RlbXBsYXRlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dCgKLSAgICAgICAgICBFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfRElTQ09WRVJZX0JJTkRJTkdURU1QTEFURSkpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhIGJpbmRpbmdUZW1wbGF0ZSwgdGhlbiBwcm9jZXNzIHRlc3QgYXNzZXJ0aW9ucyBmb3IgaXQKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQ3JlYXRlIGVudHJ5Ci0gICAgICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoCi0gICAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUpKTsKLSAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQoYmluZGluZ1RlbXBsYXRlLmdldEJpbmRpbmdLZXkoKSk7Ci0gICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGJpbmRpbmdUZW1wbGF0ZSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyB0ZXN0IGFzc2VydGlvbnMKLSAgICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgbmV3IEVudHJ5Q29udGV4dChlbnRyeSwgdGhpcy5hbmFseXplckNvbnRleHQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gTk9URTogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIGlmIGEgYmluZGluZ1RlbXBsYXRlIGRvZXMgTk9UIGhhdmUgYSB3c2RsU3BlYyB0TW9kZWwsCi0gICAgICAvLyAgICAgICB0aGUgdE1vZGVsIHdpbGwgYmUgTlVMTC4KLQotICAgICAgLy8gQ3JlYXRlIGVudHJ5Ci0gICAgICBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLSAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9UTU9ERUwpKTsKLSAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKAotICAgICAgICAodE1vZGVsID09IG51bGwgPyAiW3RNb2RlbF0iIDogdE1vZGVsLmdldFRNb2RlbEtleSgpKSk7Ci0gICAgICBlbnRyeS5zZXRFbnRyeURldGFpbCh0TW9kZWwpOwotCi0gICAgICAvLyBQcm9jZXNzIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB0aGlzLmFuYWx5emVyQ29udGV4dCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBUaHJvdyBXU0lFeGNlcHRpb24KLSAgICAgIGlmIChlIGluc3RhbmNlb2YgV1NJRXhjZXB0aW9uKQotICAgICAgICB0aHJvdyAoV1NJRXhjZXB0aW9uKSBlOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgZGlzY292ZXJ5IHRlc3QgYXNzZXJ0aW9ucy4iLAotICAgICAgICAgIGUpOwotICAgIH0KLQotICAgIC8vIENsZWFudXAKLSAgICBjbGVhbnVwKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3IjdmFsaWRhdGUoKQotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSB2YWxpZGF0ZUFydGlmYWN0KCkuICovCi0gIHB1YmxpYyBTdHJpbmcgdmFsaWRhdGUoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB2YWxpZGF0ZUFydGlmYWN0KCk7Ci0gICAgLy8gR2V0IFdTREwgbG9jYXRpb24KLSAgICByZXR1cm4gdGhpcy5hbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpLmdldFdTRExMb2NhdGlvbigpOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IFdTREwgYmluZGluZyBpbiB0aGUgc2VydmljZSByZWZlcmVuY2UgcG9ydGlvbiBvZiB0aGUgYW5hbHl6ZXIgY29udGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFdTRExCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9Ci0gICAgICBiaW5kaW5nID09IG51bGwgPyBudWxsIDogYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPQotICAgICAgYmluZGluZyA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIC8vIFNldCB0aGUgV1NETCBkb2N1bWVudCBsb2NhdGlvbiBpbiBhbmFseXplckNvbnRleHQKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UgPQotICAgICAgdGhpcy5hbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpOwotCi0gICAgLy8gSWYgdGhlIHdzZGxFbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGVuIHNldCBpdAotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50OwotICAgIGlmICgod3NkbEVsZW1lbnQgPSBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkpID09IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBXU0RMIGJpbmRpbmcgZnJvbSB0aGUgb3ZlcnZpZXdVUkwgYW5kIHNldCBpbiBhbmFseXplckNvbnRleHQKLSAgICAgIHdzZGxFbGVtZW50ID0gbmV3IFdTRExFbGVtZW50SW1wbCgpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZShiaW5kaW5nTmFtZSk7Ci0gICAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICAgIHdzZGxFbGVtZW50LnNldFR5cGUoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgd3NkbEVsZW1lbnQgaW4gdGhlIHNlcnZpY2UgcmVmZXJlbmNlCi0gICAgc2VydmljZVJlZmVyZW5jZS5zZXRXU0RMRWxlbWVudCh3c2RsRWxlbWVudCk7Ci0KLSAgICAvLyBTZXQgdGhlIHNlcnZpY2UgcmVmZXJlbmNlIGJhY2sgaW50byB0aGUgYW5hbHl6ZXJDb250ZXh0Ci0gICAgYW5hbHl6ZXJDb250ZXh0LnNldFNlcnZpY2VSZWZlcmVuY2Uoc2VydmljZVJlZmVyZW5jZSk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBXU0RMIGxvY2F0aW9uIGluIHRoZSBzZXJ2aWNlIHJlZmVyZW5jZSBwb3J0aW9uIG9mIHRoZSBhbmFseXplciBjb250ZXh0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0V1NETExvY2F0aW9uKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgLy8gU2V0IHRoZSBXU0RMIGRvY3VtZW50IGxvY2F0aW9uIGluIGFuYWx5emVyQ29udGV4dAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSA9Ci0gICAgICB0aGlzLmFuYWx5emVyQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCk7Ci0gICAgc2VydmljZVJlZmVyZW5jZS5zZXRXU0RMTG9jYXRpb24od3NkbFVSTCk7Ci0KLSAgICAvLyBTZXQgdGhlIHNlcnZpY2UgcmVmZXJlbmNlIGJhY2sgaW50byB0aGUgYW5hbHl6ZXJDb250ZXh0Ci0gICAgYW5hbHl6ZXJDb250ZXh0LnNldFNlcnZpY2VSZWZlcmVuY2Uoc2VydmljZVJlZmVyZW5jZSk7Ci0gIH0KLQotICAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIGlzIGEgd3NkbFNwZWMgdE1vZGVsLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVV0aWxzLmlzV3NkbFNwZWMoU3RyaW5nIHdzZGxMb2NhdGlvbikuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1dzZGxTcGVjKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBib29sZWFuIHRNb2RlbEZvdW5kID0gZmFsc2U7Ci0gICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSBudWxsOwotICAgIEl0ZXJhdG9yIGNhdGVnb3J5QmFnSXRlcmF0b3IgPSBudWxsOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBjYXRldGdvcnlCYWcgY29udGFpbnMgd3NkbFNwZWMKLSAgICBpZiAoKGNhdGVnb3J5QmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCkpICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIGtleWVkIHJlZmVyZW5jZXMKLSAgICAgIGNhdGVnb3J5QmFnSXRlcmF0b3IgPSBjYXRlZ29yeUJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmZXJlbmNlID0gbnVsbDsKLQotICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBrZXllZCByZWZlcmVuY2VzCi0gICAgICB3aGlsZSAoY2F0ZWdvcnlCYWdJdGVyYXRvci5oYXNOZXh0KCkgJiYgISh0TW9kZWxGb3VuZCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBuZXh0IGtleWVkIHJlZmVyZW5jZQotICAgICAgICBrZXllZFJlZmVyZW5jZSA9IChLZXllZFJlZmVyZW5jZSkgY2F0ZWdvcnlCYWdJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHR5cGVzIHRheG9ub215IHRNb2RlbCBhbmQgdGhlIHZhbHVlIGlzIHdzZGxTcGVjLCB0aGVuIHRoaXMgaXMgdGhlIHRNb2RlbCB3ZSB3YW50Ci0gICAgICAgIC8vIFJFTU9WRTogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayB0aGUga2V5IG5hbWUKLSAgICAgICAgLy9pZiAoa2V5ZWRSZWZlcmVuY2UuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkgJiYKLSAgICAgICAgLy8gICAid3NkbFNwZWMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpKSAmJgotICAgICAgICAvLyAgICgidHlwZXMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlOYW1lKCkpIHx8Ci0gICAgICAgIC8vICAgICJ1ZGRpLW9yZzp0eXBlcyIuZXF1YWxzKGtleWVkUmVmZXJlbmNlLmdldEtleU5hbWUoKSkpKSB7Ci0gICAgICAgIC8vICB0TW9kZWxGb3VuZCA9IHRydWU7Ci0gICAgICAgIC8vfQotICAgICAgICBpZiAoa2V5ZWRSZWZlcmVuY2UKLSAgICAgICAgICAuZ2V0VE1vZGVsS2V5KCkKLSAgICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkKLSAgICAgICAgICAmJiAid3NkbFNwZWMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHRNb2RlbEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0TW9kZWxGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYW4gT3ZlcnZpZXdVUkwgZnJvbSB0TW9kZWwuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBVRERJVXRpbHMuZ2V0T3ZlcnZpZXdVUkwoU3RyaW5nIHdzZGxMb2NhdGlvbikuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldE92ZXJ2aWV3VVJMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBpZiAodE1vZGVsICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkwoKS5nZXRUZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGRvY3VtZW50LgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVV0aWxzLmdldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKFN0cmluZyB3c2RsTG9jYXRpb24pCi0gIHsKLSAgICBpbnQgaW5kZXg7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgb3ZlcnZpZXdVUkwgY29udGFpbnMgYSBmcmFnbWVudCBpZGVudGlmaWVyCi0gICAgaWYgKChpbmRleCA9IHdzZGxMb2NhdGlvbi5pbmRleE9mKCIjIikpID4gLTEpCi0gICAgewotICAgICAgd3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsTG9jYXRpb247Ci0gIH0KLSAKLSAgLyoqCi0gICAqIEdldCBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoU3RyaW5nIHdzZGxMb2NhdGlvbikKLSAgICB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbmV3IFdTRExEb2N1bWVudChVRERJVXRpbHMuZ2V0V1NETExvY2F0aW9uKHdzZGxMb2NhdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGJpbmRpbmcgZnJvbSB0aGUgb3ZlcnZpZXdVUkwgaW4gdGhlIHRNb2RlbC4KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nIGdldEJpbmRpbmcoU3RyaW5nIG92ZXJ2aWV3VVJMLCBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICB7Ci0gICAgaW50IGluZGV4OwotICAgIGludCBuYW1lSW5kZXg7Ci0KLSAgICBCaW5kaW5nW10gYmluZGluZ3MgPSB3c2RsRG9jdW1lbnQuZ2V0QmluZGluZ3MoKTsKLSAgICBpZiAoYmluZGluZ3MgPT0gbnVsbCB8fCBiaW5kaW5ncy5sZW5ndGggPT0gMCkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgaWYgKG92ZXJ2aWV3VVJMICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQ2hlY2sgaWYgdGhlIG92ZXJ2aWV3VVJMIGNvbnRhaW5zIGEgZnJhZ21lbnQgaWRlbnRpZmllcgotICAgICAgaWYgKChpbmRleCA9IG92ZXJ2aWV3VVJMLmluZGV4T2YoIiMiKSkgPiAtMSkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogTmVlZCB0byB1c2UgYSByZWFsIFhQYXRoIGV2YWx1YXRvciBsaWtlIFhhbGFuCi0gICAgICAgIFN0cmluZyBuYW1lQXR0cmlidXRlID0gIkBuYW1lPSI7Ci0KLSAgICAgICAgLy8gTG9jYXRlIG5hbWUgcmVmZXJlbmNlCi0gICAgICAgIGlmICgobmFtZUluZGV4ID0KLSAgICAgICAgICBvdmVydmlld1VSTC5zdWJzdHJpbmcoaW5kZXggKyAxKS5pbmRleE9mKG5hbWVBdHRyaWJ1dGUpKQotICAgICAgICAgID4gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyIHdoaWNoIHNob3VsZCBiZSBhIHF1b3RlCi0gICAgICAgICAgaW50IGZpcnN0UXVvdGVJbmRleCA9IGluZGV4ICsgMSArIG5hbWVJbmRleCArIG5hbWVBdHRyaWJ1dGUubGVuZ3RoKCk7Ci0gICAgICAgICAgU3RyaW5nIHF1b3RlID0KLSAgICAgICAgICAgIG92ZXJ2aWV3VVJMLnN1YnN0cmluZyhmaXJzdFF1b3RlSW5kZXgsIGZpcnN0UXVvdGVJbmRleCArIDEpOwotCi0gICAgICAgICAgLy8gR2V0IHRoZSBwYXJ0IG9mIHRoZSBVUkwgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlIGJpbmRpbmcgbmFtZQotICAgICAgICAgIFN0cmluZyB1cmxQYXJ0ID0gb3ZlcnZpZXdVUkwuc3Vic3RyaW5nKGZpcnN0UXVvdGVJbmRleCArIDEpOwotCi0gICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCBxdW90ZQotICAgICAgICAgIGludCBuZXh0UXVvdGVJbmRleDsKLSAgICAgICAgICBpZiAoKG5leHRRdW90ZUluZGV4ID0gdXJsUGFydC5pbmRleE9mKHF1b3RlKSkgPiAtMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSB1cmxQYXJ0LnN1YnN0cmluZygwLCBuZXh0UXVvdGVJbmRleCk7Ci0gICAgICAgICAgICAvL2xvb2sgZm9yIGJpbmRpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChiaW5kaW5nTmFtZS5lcXVhbHMoYmluZGluZ3NbaV0uZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJpbmRpbmdzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBiaW5kaW5nc1swXTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKiBAcGFyYW0gY2F0ZWdvcnlCYWcgYSBDYXRlZ29yeUJhZyBvYmplY3QuCi0gICAqIEByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBjYXRlZ29yeUJhZ1RvU3RyaW5nKENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnKQotICB7Ci0gICAgU3RyaW5nIHRvU3RyaW5nID0gIiI7Ci0KLSAgICBpZiAoY2F0ZWdvcnlCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VMaXN0ID0gbnVsbDsKLSAgICAgIGlmICgoKGtleWVkUmVmZXJlbmNlTGlzdCA9IGNhdGVnb3J5QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChrZXllZFJlZmVyZW5jZUxpc3Quc2l6ZSgpID09IDApKQotICAgICAgewotICAgICAgICB0b1N0cmluZyArPSAiTm8gS2V5ZWRSZWZlcmVuY2VzIjsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICBLZXllZFJlZmVyZW5jZSBrZXllZFJlZmVyZW5jZTsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBrZXllZFJlZmVyZW5jZUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGtleWVkUmVmZXJlbmNlID0gKEtleWVkUmVmZXJlbmNlKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgdG9TdHJpbmcgKz0gIlxuICBbIgotICAgICAgICAgICAgKyBjb3VudCsrCi0gICAgICAgICAgICArICJdIHRNb2RlbEtleTogIgotICAgICAgICAgICAgKyBrZXllZFJlZmVyZW5jZS5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICAgKyAiLCBrZXlOYW1lOiAiCi0gICAgICAgICAgICArIGtleWVkUmVmZXJlbmNlLmdldEtleU5hbWUoKQotICAgICAgICAgICAgKyAiLCBrZXlWYWx1ZTogIgotICAgICAgICAgICAgKyBrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0b1N0cmluZyA9ICJudWxsIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9TdHJpbmc7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgdGFyZ2V0Q29udGV4dCkKLSAgewotICAgIGJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZSB0ZXN0IGFzc2VydGlvbiBlbnRyeSB0eXBlIG1hdGNoZXMgdGhlIHRhcmdldCBjb250ZXh0IGVudHJ5IHR5cGUsIHRoZW4gY29udGluZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uCi0gICAgICAuZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAgICAuZXF1YWxzKHRhcmdldENvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gQUREOgotCi0gICAgcmV0dXJuIG5vdEFwcGxpY2FibGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXNlIHRlc3RzIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKSB7IHJldHVybiB0ZXN0YWJsZTsgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjg0YjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLS8qKgotICogV1NJMzAwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMzAwMSBleHRlbmRzIEJQMzAwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDAxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDhkZDJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi0vKioKLSAqIFdTSTMwMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDIgZXh0ZW5kcyBCUDMwMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMzAwMihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViMDE3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotLyoqCi0gKiBXU0kzMDAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kzMDAzIGV4dGVuZHMgQlAzMDAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDMoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMTczYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFdTSTMwMDQgLSBUaGUgY29uZm9ybWFuY2UgY2xhaW1zIGluIHRoZSB1ZGRpOnRNb2RlbCBhcmUgdGhlIHNhbWUKLSAqIGFzIHRob3NlIGluIHRoZSB3c2RsOmJpbmRpbmcgd2hpY2ggaXMgcmVmZXJlbmNlZCBieSB0aGUgdWRkaTp0TW9kZWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kzMDA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDQoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUU19QQVJBTSA9ICJwb3J0cyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX1BBUkFNID0gImJpbmRpbmciOwotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSBhIHRNb2RlbC4KLSAgICogQHBhcmFtIHRNb2RlbAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDb25mb3JtYW5jZUNsYWltc0Zyb21VRERJKFRNb2RlbCB0TW9kZWwpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGNvbmZvcm1hbmNlS2V5ID0gVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHZhbGlkYXRvci51ZGRpUHJveHkpOwotCi0gICAgSGFzaFNldCByZXN1bHQgPSBuZXcgSGFzaFNldCgpOwotCi0gICAgQ2F0ZWdvcnlCYWcgYmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgaWYgKHJlZi5nZXRUTW9kZWxLZXkoKS5lcXVhbHNJZ25vcmVDYXNlKGNvbmZvcm1hbmNlS2V5KSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdC5hZGQocmVmLmdldEtleVZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSBXU0RMIGJpbmRpbmcKLSAgICogdGhhdCByZWZlcmVuY2VzIHNwZWNpZmllZCB0TW9kZWwuIEFkZGl0aW9uYWxseSwKLSAgICogV1NETCBwb3J0cywgd2hpY2ggdXNlcyB0aGUgYmluZGluZywgYXJlIHByb2Nlc3NlZC4KLSAgICoKLSAgICogQHBhcmFtIHRNb2RlbAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDb25mb3JtYW5jZUNsYWltc0Zyb21XU0RMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBIYXNoU2V0IHJlc3VsdCA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBSZWFkIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBTdHJpbmcgb3ZlcnZpZXdVUkwgPSBVRERJVXRpbHMuZ2V0T3ZlcnZpZXdVUkwodE1vZGVsKTsKLSAgICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSB2YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KG92ZXJ2aWV3VVJMKTsKLQotICAgICAgLy8gR2V0IGJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IFVERElVdGlscy5nZXRCaW5kaW5nKG92ZXJ2aWV3VVJMLCB3c2RsRG9jdW1lbnQpOwotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCi0gICAgICAvLyBHZXQgY2xhaW1zCi0gICAgICByZXN1bHQgPQotICAgICAgICBnZXRDbGFpbXNGcm9tRWxlbWVudChiaW5kaW5nLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHJlc3VsdCk7Ci0KLSAgICAgIC8vIEdldCBwb3J0cywgd2hpY2ggcmVmZXJlbmNlIHRoaXMgYmluZGluZywgYmVjYXVzZToKLSAgICAgIC8vICJBIGNsYWltIG9uIGEgd3NkbDpwb3J0IGlzIGluaGVyaXRlZCBieSB0aGUgcmVmZXJlbmNlZCB3c2RsOmJpbmRpbmdzLiIKLSAgICAgIFZlY3RvciBwb3J0cyA9IGdldFBvcnRzKHdzZGxEb2N1bWVudCwgYmluZGluZ05hbWUpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0cy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIHBvcnRzLmdldChpKTsKLQotICAgICAgICByZXN1bHQgPSBnZXRDbGFpbXNGcm9tRWxlbWVudChwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHJlc3VsdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBBREQ6Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSB0aGUgJ2RvY3VtZW50YXRpb24nIFhNTCBlbGVtZW50Ci0gICAqIGFuZCBwdXRzIHRoZW0gaW50byB0aGUgSGFzaFNldC4KLSAgICogQHBhcmFtIGRvY0VsZW1lbnQKLSAgICogQHBhcmFtIHJlc3VsdAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDbGFpbXNGcm9tRWxlbWVudChFbGVtZW50IGRvY0VsZW1lbnQsIEhhc2hTZXQgcmVzdWx0KQotICB7Ci0gICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgfQotCi0gICAgaWYgKGRvY0VsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGNsYWltRWxlbWVudCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZG9jRWxlbWVudCwgV1NJX0NMQUlNKTsKLSAgICAgIHdoaWxlIChjbGFpbUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgTm9kZSBhdHRyID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGNsYWltRWxlbWVudCwgQVRUUl9DTEFJTV9DT05GT1JNU1RPKTsKLSAgICAgICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICAgICAgCXJlc3VsdC5hZGQoYXR0ci5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgICovCi0gICAgICAgIFN0cmluZyB2YWx1ZSA9Ci0gICAgICAgICAgY2xhaW1FbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSX0NMQUlNX0NPTkZPUk1TVE8uZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQuYWRkKHZhbHVlKTsKLQotICAgICAgICBjbGFpbUVsZW1lbnQgPSBYTUxVdGlscy5maW5kRWxlbWVudChjbGFpbUVsZW1lbnQsIFdTSV9DTEFJTSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHdzZGw6cG9ydHMsIHdoaWNoIHVzZSBzcGVjaWZpZWQgYmluZGluZy4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudAotICAgKiBAcGFyYW0gYmluZGluZ05hbWUKLSAgICogQHJldHVybiBWZWN0b3IKLSAgICovCi0gIHByaXZhdGUgVmVjdG9yIGdldFBvcnRzKFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQsIFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotICAgIFZlY3RvciBwb3J0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIE1hcCBwYXJhbXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIHBhcmFtcy5wdXQoUE9SVFNfUEFSQU0sIHBvcnRzKTsKLSAgICBwYXJhbXMucHV0KEJJTkRJTkdfUEFSQU0sIGJpbmRpbmdOYW1lKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpLCBwYXJhbXMpOwotCi0gICAgcmV0dXJuIHBvcnRzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydCBwb3J0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocG9ydAotICAgICAgLmdldEJpbmRpbmcoKQotICAgICAgLmdldFFOYW1lKCkKLSAgICAgIC5nZXRMb2NhbFBhcnQoKQotICAgICAgLmVxdWFscyhjdHguZ2V0UGFyYW1ldGVyKEJJTkRJTkdfUEFSQU0pLnRvU3RyaW5nKCkpKQotICAgIHsKLSAgICAgICgoVmVjdG9yKSBjdHguZ2V0UGFyYW1ldGVyKFBPUlRTX1BBUkFNKSkuYWRkKHBvcnQpOwotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgdE1vZGVsCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBIYXNoU2V0IGNsYWltc0Zyb21VRERJID0gZ2V0Q29uZm9ybWFuY2VDbGFpbXNGcm9tVURESSh0TW9kZWwpOwotICAgICAgICBIYXNoU2V0IGNsYWltc0Zyb21XU0RMID0gZ2V0Q29uZm9ybWFuY2VDbGFpbXNGcm9tV1NETCh0TW9kZWwpOwotCi0gICAgICAgIGlmIChjbGFpbXNGcm9tVURESS5zaXplKCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNsYWltc0Zyb21VRERJLnNpemUoKSA9PSBjbGFpbXNGcm9tV1NETC5zaXplKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBpdGVyID0gY2xhaW1zRnJvbVdTREwuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBjbGFpbSA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOwotCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIyID0gY2xhaW1zRnJvbVVEREkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgaXRlcjIuaGFzTmV4dCgpOwotICAgICAgICAgICAgICApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyB1ZGRpQ2xhaW0gPSAoU3RyaW5nKSBpdGVyMi5uZXh0KCk7Ci0gICAgICAgICAgICAgIGlmIChjbGFpbS5lcXVhbHNJZ25vcmVDYXNlKHVkZGlDbGFpbSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoY291bnRlciAhPSBjbGFpbXNGcm9tV1NETC5zaXplKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gZmFpbGVkCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIlRoZSB0TW9kZWwga2V5IGlzOiBbIiArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKSArICJdLiI7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIGZhaWxlZAotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIgKyB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkgKyAiXS4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgIlRoZSB0TW9kZWwga2V5IGlzOiBbIiArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKSArICJdLiI7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDVfT0JTT0xFVEUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA1X09CU09MRVRFLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNmY1YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDVfT0JTT0xFVEUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVURESVV0aWxzOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSAqIFdTSTMwMDVfT0JTT0xFVEUgLSBBIHVkZGk6dE1vZGVsIHdoaWNoIGNsYWltcyBjb25mb3JtYW5jZSB3aXRoIGEgV1MtSSBwcm9maWxlCi0gKiBtdXN0IGJlIGNhdGVnb3JpemVkIHVzaW5nIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvIHRheG9ub215LgotICovCi1wdWJsaWMgY2xhc3MgV1NJMzAwNV9PQlNPTEVURSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDVfT0JTT0xFVEUoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgdE1vZGVsCi0gICAgZWxzZQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGJhZyA9IHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYmFnKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZhaWxlZAotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIgKyB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkgKyAiXS4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgIlRoZSBVRERJIHJlZ2lzdHJ5IGRvZXMgbm90IGNvbnRhaW4gV1NJIGNvbmZvcm1hbmNlIHRheG9ub215IgotICAgICAgICAgICAgKyAiIHRNb2RlbCAoXCJ3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTJcIikuIjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBhIGNhdGVnb3J5IGJhZy4KLSAgICogQHBhcmFtIHByb3h5Ci0gICAqIEBwYXJhbSBiYWcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tDYXRlZ29yeUJhZyhVRERJUHJveHkgcHJveHksIENhdGVnb3J5QmFnIGJhZykKLSAgewotICAgIFN0cmluZyBjb25mb3JtYW5jZUtleSA9IFVERElVdGlscy5nZXRXU0lDb25mb3JtYW5jZVRNb2RlbEtleShwcm94eSk7Ci0KLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpICYmICFyZXN1bHQ7IGkrKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2UgcmVmID0gKEtleWVkUmVmZXJlbmNlKSByZWZlcmVuY2VzLmdldChpKTsKLQotICAgICAgICByZXN1bHQgPSByZWYuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShjb25mb3JtYW5jZUtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYThjMDAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VRERJVXRpbHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi0KLS8qKgotICogV1NJMzAwNiAtIFRoZSB1ZGRpOnRNb2RlbCB1c2VzIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTIgY2F0ZWdvcml6YXRpb24KLSAqIHZhbHVlIG9mICJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzZS8xLjAiLiBUaGUgY2F0ZWdvcnlCYWcgaW4gdGhlIHRNb2RlbAotICogY29udGFpbnMgYSBrZXllZFJlZmVyZW5jZSB3aXRoIGEgdE1vZGVsS2V5IHRoYXQgY29udGFpbnMgdGhlIGtleSB2YWx1ZQotICogdXVpZDo2NTcxOTE2OC03MmM2LTNmMjktOGMyMC02MmRlZmIwOTYxYzAgZm9yIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTIKLSAqIHRNb2RlbC4KLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMzAwNihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gbnVsbDsKLSAgICBLZXllZFJlZmVyZW5jZSBjbGFpbUtleWVkUmVmID0gbnVsbDsKLQotICAgIC8vIGNoZWNrIHdoZXRoZXIgYSBVRERJIGNvbmZvcm1hbmNlIGNsYWltIGlzIGJlaW5nIG1hZGUuLi4KLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmICgoY2xhaW1LZXllZFJlZiA9IGNvbmZvcm1hbmNlQ2xhaW1NYWRlKHRNb2RlbCkpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHdlIGhhdmUgYSBjb25mb3JtYW5jZSBjbGFpbSwgc28gY2hlY2sgdGhlIGtleWVkUmVmZXJlbmNlIGtleVZhbHVlCi0gICAgICBpZiAoIWNsYWltS2V5ZWRSZWYKLSAgICAgICAgLmdldEtleVZhbHVlKCkKLSAgICAgICAgLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbigKLSAgICAgICAgICBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCwKLSAgICAgICAgICAiVGhlIHRNb2RlbCBrZXkgaXM6IFsiCi0gICAgICAgICAgICArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICAgKyAiXS5cblRoZSBjYXRlZ29yeUJhZyBpczogWyIKLSAgICAgICAgICAgICsgdE1vZGVsLmdldENhdGVnb3J5QmFnKCkKLSAgICAgICAgICAgICsgIl0uIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gZS5nZXREZXRhaWxNZXNzYWdlKCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgYSBjYXRlZ29yeSBiYWcgYW5kIGV4dHJhY3RzIEtleWVkUmVmZXJlbmNlIGNvbnRhaW5pbmcKLSAgICogdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBAcGFyYW0gcHJveHkKLSAgICogQHBhcmFtIGJhZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2UgY2hlY2tDYXRlZ29yeUJhZyhVRERJUHJveHkgcHJveHksIENhdGVnb3J5QmFnIGJhZykKLSAgewotICAgIFN0cmluZyBjb25mb3JtYW5jZUtleSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZm9ybWFuY2VLZXkgPSBVRERJVXRpbHMuZ2V0V1NJQ29uZm9ybWFuY2VUTW9kZWxLZXkocHJveHkpOwotICAgIH0KLSAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBLZXllZFJlZmVyZW5jZSBjb25mb3JtYW5jZVJlZiA9IG51bGw7Ci0KLSAgICBpZiAoYmFnICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIHJlZmVyZW5jZXMgPSBiYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmZXJlbmNlcy5zaXplKCkgJiYgcmVzdWx0OyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgaWYgKHJlZgotICAgICAgICAgIC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgIC5lcXVhbHNJZ25vcmVDYXNlKGNvbmZvcm1hbmNlS2V5KSAvLyYmIHJlZi5nZXRLZXlWYWx1ZSgpLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKQotICAgICAgICAvLyB3ZSBuZWVkIG9ubHkgdE1vZGVsIGtleQotICAgICAgICApCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICAgIGNvbmZvcm1hbmNlUmVmID0gcmVmOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbmZvcm1hbmNlUmVmOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIEtleWVkUmVmZXJlbmNlIGNvbnRhaW5pbmcgdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBAcGFyYW0gdE1vZGVsCi0gICAqIEByZXR1cm4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2UgY29uZm9ybWFuY2VDbGFpbU1hZGUoVE1vZGVsIHRNb2RlbCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIElmIHRoZSB0TW9kZWwgZG9lcyBub3QgZXhpc3QsIHRoZW4gZmFpbAotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ0TW9kZWwgY2Fubm90IGJlIG51bGwiKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIHRNb2RlbAotICAgIGVsc2UKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBiYWcgPSB0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICAgIHJldHVybiBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYmFnKTsKLSAgICB9Ci0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjY3NGRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSAqIFdTSTMwMDcgLSBBIHVkZGk6YnVzaW5lc3NFbnRpdHkgb3IgdWRkaTpidXNpbmVzc1NlcnZpY2UgYXNzb2NpYXRlZAotICogd2l0aCB0aGlzIHVkZGk6YmluZGluZ1RlbXBsYXRlIGlzIG5vdCBjYXRlZ29yaXplZCB1c2luZwotICogdGhlIHdzLWktb3JnOmNvbmZvcm1zVG86MjAwMl8xMiB0YXhvbm9teS4KLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDA3KFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgLy8gR2V0IHRoZSBiaW5kaW5nVGVtcGxhdGUgZnJvbSB0aGUgZW50cnlDb250ZXh0Ci0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9Ci0gICAgICAoQmluZGluZ1RlbXBsYXRlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgYm9vbGVhbiB2YWxpZFNlcnZpY2UgPSBmYWxzZTsKLSAgICBib29sZWFuIHZhbGlkQnVzaW5lc3MgPSBmYWxzZTsKLQotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gbnVsbDsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHNlcnZpY2VLZXkgPSBiaW5kaW5nVGVtcGxhdGUuZ2V0U2VydmljZUtleSgpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIHNlcnZpY2UgPQotICAgICAgICBVRERJVXRpbHMuZ2V0QnVzaW5lc3NTZXJ2aWNlQnlLZXkodGhpcy52YWxpZGF0b3IudWRkaVByb3h5LCBzZXJ2aWNlS2V5KTsKLQotICAgICAgYnVzaW5lc3NLZXkgPSBzZXJ2aWNlLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBidXNpbmVzcyA9Ci0gICAgICAgIFVERElVdGlscy5nZXRCdXNpbmVzc0J5S2V5KHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYnVzaW5lc3NLZXkpOwotCi0gICAgICB2YWxpZFNlcnZpY2UgPSBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgc2VydmljZS5nZXRDYXRlZ29yeUJhZygpKTsKLSAgICAgIHZhbGlkQnVzaW5lc3MgPSBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYnVzaW5lc3MuZ2V0Q2F0ZWdvcnlCYWcoKSk7Ci0KLSAgICAgIGlmICghdmFsaWRCdXNpbmVzcyB8fCAhdmFsaWRTZXJ2aWNlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgICAgICBpZiAoIXZhbGlkQnVzaW5lc3MpCi0gICAgICAgIHsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgICAiVGhlIGJ1c2luZXNzRW50aXR5IGtleSBpczogWyIgKyBidXNpbmVzc0tleSArICJdLiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkU2VydmljZSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghdmFsaWRCdXNpbmVzcykKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlICs9ICIgIjsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9ICIiOwotCi0gICAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgKz0gIlRoZSBidXNpbmVzc1NlcnZpY2Uga2V5IGlzOiBbIgotICAgICAgICAgICAgKyBzZXJ2aWNlS2V5Ci0gICAgICAgICAgICArICJdLiI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAiVGhlIFVEREkgcmVnaXN0cnkgZG9lcyBub3QgY29udGFpbiBXU0kgY29uZm9ybWFuY2UgdGF4b25vbXkiCi0gICAgICAgICAgKyAiIHRNb2RlbCAoXCJ3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTJcIikuIjsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgZGlzY292ZXJ5IHRlc3QgYXNzZXJ0aW9ucy4iLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjYXRlZ29yeSBiYWcgY29udGFpbnMgdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBSZXR1cm5zIDxiPnRydWU8L2I+IGlmIHRoZSBiYWcgZG9lcyBub3QgY29udGFpbiB0aGUgY29uZm9ybWFuY2UgY2xhaW0uCi0gICAqIEBwYXJhbSBwcm94eQotICAgKiBAcGFyYW0gYmFnCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2F0ZWdvcnlCYWcoVURESVByb3h5IHByb3h5LCBDYXRlZ29yeUJhZyBiYWcpCi0gIHsKLSAgICBTdHJpbmcgY29uZm9ybWFuY2VLZXkgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZvcm1hbmNlS2V5ID0gVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHByb3h5KTsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCi0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpICYmIHJlc3VsdDsgaSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSByZWYgPSAoS2V5ZWRSZWZlcmVuY2UpIHJlZmVyZW5jZXMuZ2V0KGkpOwotCi0gICAgICAgIHJlc3VsdCA9ICFyZWYuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShjb25mb3JtYW5jZUtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODUzNTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSogV1NJMzAyMSAtIFRoZSB1ZGRpOnRNb2RlbCBoYXMgYSAibmFtZSIgZWxlbWVudCBvZiB2YWx1ZSAid3MtaS1vcmc6Y29uZm9ybXNUbzoyMDAyXzEyIiAsCi0qIGhhcyBhbiBvdmVydmlld1VSTCB2YWx1ZSBvZiAiaHR0cDovL3dzLWkub3JnL3NjaGVtYXMvY29uZm9ybWFuY2VDbGFpbS8iLCBhbmQgaGFzCi0qIGEga2V5ZWRSZWZlcmVuY2UgZWxlbWVudCB3aXRoIGtleU5hbWUgYXR0cmlidXRlIHZhbHVlIG9mICJ1ZGRpLW9yZzp0eXBlczpjYXRlZ29yaXphdGlvbiIuCi0qLwotcHVibGljIGNsYXNzIFdTSTMwMjEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDIxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgVE1vZGVsIHRNb2RlbCA9Ci0gICAgICBVRERJVXRpbHMuZ2V0VE1vZGVsQnlLZXkoCi0gICAgICAgIHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwKLSAgICAgICAgVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSkpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYm9vbGVhbiB2YWxpZFVSTCA9Ci0gICAgICAgIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICAgICAmJiAiaHR0cDovL3dzLWkub3JnL3NjaGVtYXMvY29uZm9ybWFuY2VDbGFpbS8iLmVxdWFscygKLSAgICAgICAgICAgIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMU3RyaW5nKCkpOwotICAgICAgYm9vbGVhbiB2YWxpZENhdGVnb3J5ID0gY2hlY2tDYXRlZ29yeUJhZyh0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKSk7Ci0KLSAgICAgIGlmICh2YWxpZFVSTCAmJiB2YWxpZENhdGVnb3J5KQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gdGhpcy52YWxpZGF0b3IudWRkaVJlZmVyZW5jZS5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY2F0ZWdvcnkgYmFnIG1lZXRzIHRoZSBXU0kncyByZXF1aXJlbWVudHMuCi0gICAqIEBwYXJhbSBiYWcKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2F0ZWdvcnlCYWcoQ2F0ZWdvcnlCYWcgYmFnKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotICAgIGlmIChiYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgcmVmZXJlbmNlcyA9IGJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWZlcmVuY2VzLnNpemUoKSAmJiAhcmVzdWx0OyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgcmVzdWx0ID0KLSAgICAgICAgICAidWRkaS1vcmc6dHlwZXM6Y2F0ZWdvcml6YXRpb24iLmVxdWFscyhyZWYuZ2V0S2V5TmFtZSgpKQotICAgICAgICAgICAgJiYgImNhdGVnb3JpemF0aW9uIi5lcXVhbHMocmVmLmdldEtleVZhbHVlKCkpCi0gICAgICAgICAgICAmJiAidXVpZDpDMUFDRjI2RC05NjcyLTQ0MDQtOUQ3MC0zOUI3NTZFNjJBQjQiLmVxdWFscygKLSAgICAgICAgICAgICAgcmVmLmdldFRNb2RlbEtleSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmU1NjFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDI5MDEKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBkZXNjcmlwdGlvbiB1c2VzIGVpdGhlciB0aGUgV1NETCBNSU1FIEJpbmRpbmcgYXMgZGVzY3JpYmVkIGluIFdTREwgMS4xIFNlY3Rpb24gNQotICogb3IgV1NETCBTT0FQIGJpbmRpbmcgYXMgZGVzY3JpYmVkIGluIFdTREwgMS4xIFNlY3Rpb24gMwotICogb24gZWFjaCBvZiB0aGUgd3NkbDppbnB1dCBvciB3c2RsOm91dHB1dCBlbGVtZW50cyBvZiBhIHdzZGw6YmluZGluZy4gPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgLyoqCi0gICAqIFdTRExWYWxpZGF0b3IKLSAgICovCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIHByaXZhdGUgQ29sbGVjdGlvbiBtaW1lRWxlbWVudHM7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotCi0gICAgbWltZUVsZW1lbnRzID0gbmV3IEhhc2hTZXQoKTsKLSAgICBtaW1lRWxlbWVudHMuYWRkKFdTRExfTUlNRV9DT05URU5UKTsKLSAgICBtaW1lRWxlbWVudHMuYWRkKFdTRExfTUlNRV9YTUwpOwotICAgIG1pbWVFbGVtZW50cy5hZGQoV1NETF9NSU1FX01VTFRJUEFSVCk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICBRTmFtZSBpbmFwcGxpY2FibGVFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6aW5wdXQKLSAgICAgICAgLy8gSWYgc3VjaCBlbGVtZW50IGV4aXN0cywgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgaWYgKGJpbmRpbmdJbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6aW5wdXQKLSAgICAgICAgICAvLyBJZiBzdWNoIGVsZW1lbnQgZXhpc3RzLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGluYXBwbGljYWJsZUVsZW1lbnQgPSBnZXRJbmFwcGxpY2FibGVFbGVtZW50KGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgICBpZiAoaW5hcHBsaWNhYmxlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaW5hcHBsaWNhYmxlRWxlbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6b3V0cHV0Ci0gICAgICAgIC8vIElmIHN1Y2ggZWxlbWVudCBleGlzdHMsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChiaW5kaW5nT3V0cHV0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbmFwcGxpY2FibGVFbGVtZW50ID0KLSAgICAgICAgICAgIGdldEluYXBwbGljYWJsZUVsZW1lbnQoYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgaWYgKGluYXBwbGljYWJsZUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKGluYXBwbGljYWJsZUVsZW1lbnQudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW55IGV4dGVuc2liaWxpdHkgZWxlbWVudCBvZiB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0Ci0gICAqIHRoYXQgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgU09BUCBiaW5kaW5nIG9yIHRoZSBNSU1FIGJpbmRpbmcuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRoZSBRTmFtZSBvZiBhbiBpbmFwcGxpY2FibGUgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBRTmFtZSBnZXRJbmFwcGxpY2FibGVFbGVtZW50KExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFFOYW1lIGVsZW1lbnROYW1lID0KLSAgICAgICAgKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpKS5nZXRFbGVtZW50VHlwZSgpOwotCi0gICAgICBpZiAoIW1pbWVFbGVtZW50cy5jb250YWlucyhlbGVtZW50TmFtZSkgJiYKLSAgICAgICAgICAhZWxlbWVudE5hbWUuZXF1YWxzKFdTRExfU09BUF9CT0RZKSAmJgotICAgICAgICAgICFlbGVtZW50TmFtZS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBlbGVtZW50TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJiYzMxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTAzCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyB3aXRoIGF0IGxlYXN0IG9uZSBtaW1lOmNvbnRlbnQgZWxlbWVudDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgcGFydCBhdHRyaWJ1dGUgb2YgZWFjaCBtaW1lOmNvbnRlbnQgZWxlbWVudCBpbiBhIHdzZGw6YmluZGluZyByZWZlcmVuY2VzCi0gKiBhIHdzZGw6cGFydCBlbGVtZW50IG9mIGEgd3NkbDptZXNzYWdlIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgcmVzcGVjdGl2ZSB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0IG9mIHRoZQotICogY29ycmVzcG9uZGluZyB3c2RsOm9wZXJhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZUNvbnRlbnRzID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIElucHV0IHBvcnRUeXBlSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCk7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBpbiB3c2RsOnBvcnRUeXBlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiVGhlcmUgaXMgbm8gdGhlIGNvcnJlc3Bvbmdpbmcgd3NkbDppbnB1dCBpbiB0aGUgd3NkbDpwb3J0VHlwZSIKLSAgICAgICAgICAgICAgKyAiIG9wZXJhdGlvbiBmb3IgdGhlIHdzZGw6aW5wdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHdzZGw6cG9ydFR5cGUgaW5wdXQgZG9lcyBub3QgcmVmZXJlbmNlIGFueSB3c2RsOm1lc3NhZ2UsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiXCIgd3NkbDpwb3J0VHlwZSAiCi0gICAgICAgICAgICAgICsgIm9wZXJhdGlvbiBkb2VzIG5vdCByZWZlcmVuY2UgYW55IHdzZGw6bWVzc2FnZS4iKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHdzZGw6bWVzc2FnZQotICAgICAgICAgIC8vIHRoZSBpbnB1dCBvZiB3c2RsOnBvcnRUeXBlIHJlZmVycyB0bwotICAgICAgICAgIFN0cmluZyBwYXJ0ID0gZ2V0SW52YWxpZE1pbWVDb250ZW50UGFydCgKLSAgICAgICAgICAgIGlucHV0TWltZUNvbnRlbnRzLCBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgICAvLyBJZiBzdWNoIHBhcnQgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwYXJ0PVwiIiArIHBhcnQgKwotICAgICAgICAgICAgICAiXCIsIHRoZSBpbnB1dCBvZiB0aGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIE91dHB1dCBwb3J0VHlwZU91dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCk7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBpbiB3c2RsOnBvcnRUeXBlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgIlRoZXJlIGlzIG5vIHRoZSBjb3JyZXNwb25naW5nIHdzZGw6b3V0cHV0IGluIHRoZSB3c2RsOnBvcnRUeXBlIgotICAgICAgICAgICAgICArICIgb3BlcmF0aW9uIGZvciB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHdzZGw6cG9ydFR5cGUgb3V0cHV0IGRvZXMgbm90IHJlZmVyZW5jZSBhbnkgd3NkbDptZXNzYWdlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSB3c2RsOm91dHB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiXCIgd3NkbDpwb3J0VHlwZSAiCi0gICAgICAgICAgICAgICsgIm9wZXJhdGlvbiBkb2VzIG5vdCByZWZlcmVuY2UgYW55IHdzZGw6bWVzc2FnZS4iKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHdzZGw6bWVzc2FnZQotICAgICAgICAgIC8vIHRoZSBvdXRwdXQgb2Ygd3NkbDpwb3J0VHlwZSByZWZlcnMgdG8KLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICAgIG91dHB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAgIC8vIElmIHN1Y2ggcGFydCBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInBhcnQ9XCIiICsgcGFydCArCi0gICAgICAgICAgICAgICAgIlwiLCB0aGUgb3V0cHV0IG9mIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgY29udGFpbnMgbm8gbWltZTpjb250ZW50IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtaW1lQ29udGVudHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgYWxsIG1pbWU6Y29udGVudCBlbGVtZW50cy4KLSAgICogQHBhcmFtIGV4dEVsZW1zIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHRoYXQgY2FuIGNvbnRhaW4gbWltZTpjb250ZW50Uy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZUNvbnRlbnRFbGVtZW50cyhMaXN0IGV4dEVsZW1zKQotICB7Ci0gICAgTGlzdCBtaW1lQ29udGVudEVsZW1lbnRzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgaWYgKGV4dEVsZW1zICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1zLmdldChpKTsKLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9NVUxUSVBBUlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICBMaXN0IG1pbWVQYXJ0cyA9ICgoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW0pLmdldE1JTUVQYXJ0cygpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1pbWVQYXJ0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIG9mIHRoaXMgbWltZTpwYXJ0Ci0gICAgICAgICAgICBMaXN0IGVsZW1zID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGRBbGwoZWxlbXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBFbHNlIGlmIHRoZSBlbGVtZW50IGlzIG1pbWU6Y29udGVudAotICAgICAgICBlbHNlIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgZWxlbWVudCB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIG1pbWVDb250ZW50RWxlbWVudHMuYWRkKGV4dEVsZW0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVDb250ZW50RWxlbWVudHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBwYXJ0IG5hbWUgc3BlY2lmaWVkIGluIG1pbWU6Y29udGVudCBlbGVtZW50IHRoYXQgaXMgbm90IHByZXNlbnRlZCBpbiB3c2RsOm1lc3NhZ2UKLSAgICogQHBhcmFtIG1pbWVDb250ZW50cyBhIGxpc3Qgb2YgbWltZTpjb250ZW50IGVsZW1lbnRzIHdoaWNoIHBhcnQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgd3NkbDptZXNzYWdlCi0gICAqIEByZXR1cm4gYSBwYXJ0IG5hbWUKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoTGlzdCBtaW1lQ29udGVudHMsIE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIC8vIEdvaW5nIHRocm91ZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWltZUNvbnRlbnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSBvZiBhIG1pbWU6ZWxlbWVudAotICAgICAgU3RyaW5nIHBhcnQgPSAoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCk7Ci0gICAgICAvLyBJZiB0aGUgd3NkbDptZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gc3VjaCBwYXJ0LCByZXR1cm4gdGhlIHBhcnQKLSAgICAgIGlmICghbWVzc2FnZS5nZXRQYXJ0cygpLmtleVNldCgpLmNvbnRhaW5zKHBhcnQpKQotICAgICAgICByZXR1cm4gcGFydDsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIG51bGwgaWYgbm8gb25lIHBhcnQgaXMgZm91bmQKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVhOTcxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTA0Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIHdpdGggYXQgbGVhc3Qgb25lIG1pbWU6Y29udGVudCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBwYXJ0IGF0dHJpYnV0ZSBvZiBlYWNoIG1pbWU6Y29udGVudCBlbGVtZW50IGluIGEgd3NkbDpiaW5kaW5nCi0gKiBkb2VzIG5vdCByZWZlcmVuY2UgYSBzdWItY29tcG9uZW50IG9mIGEgd3NkbDpwYXJ0IG9mIHRoZSB3c2RsOm1lc3NhZ2UgdGhhdCBpcyBwcmVzZW50IGluIHRoZQotICogcmVzcGVjdGl2ZSB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3BlcmF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nCi0gKiB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDQgZXh0ZW5kcyBBUDI5MDMKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkwNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOWM3Y2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkwNgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgY29udGFpbmluZyBhIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgbm9uLXJvb3QgTUlNRSBwYXJ0IGluIGEgd3NkbDpiaW5kaW5nIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwYmluZDpoZWFkZXIgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTA2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEEgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgYSBiaW5kaW5nIGNvbnRhaW5zIGF0IGxlYXN0IG9uZQotICAgICAgLy8gbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQKLSAgICAgIGJvb2xlYW4gbXVsdGlwYXJ0c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE11bHRpcGFydHMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE11bHRpcGFydHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbXVsdGlwYXJ0c0ZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc29hcDpoZWFkZXIgaW4gdGhlIG5vbi1yb290IG1pbWU6cGFydCwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmIChjb250YWluc0ludmFsaWRNaW1lUGFydChpbnB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICAgICsgImlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDpvdXRwdXQgY29udGFpbnMgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgICAgIGlmICghb3V0cHV0TXVsdGlwYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtdWx0aXBhcnRzRm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzb2FwOmhlYWRlciBpbiB0aGUgbm9uLXJvb3QgbWltZTpwYXJ0LAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KG91dHB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICAgICAgKyAiaXMgaW4gdGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICAgICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgY29udGFpbnMgbm8gb25lIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtdWx0aXBhcnRzRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIExvb2tzIGZvciBzdWNoIG5vbi1yb290IG1pbWU6cGFydCBlbGVtZW50IGZyb20gYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgKiB0aGF0IGNvbnRhaW5zIGEgc29hcDpoZWFkZXIgZWxlbWVudC4KLSAgICogQHBhcmFtIG11bHRpcGFydHMgYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRydWUsIGlmIHN1Y2ggZWxlbWVudCBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNJbnZhbGlkTWltZVBhcnQoTGlzdCBtdWx0aXBhcnRzKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdWx0aXBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgTGlzdCBtaW1lUGFydHMgPQotICAgICAgICAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBtdWx0aXBhcnRzLmdldChpKSkuZ2V0TUlNRVBhcnRzKCk7Ci0KLSAgICAgIC8vIExvb2tpbmcgZm9yIG5vbi1yb290IG1pbWU6cGFydFMKLSAgICAgIGlmIChtaW1lUGFydHMuc2l6ZSgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIGEgbWltZTpwYXJ0Ci0gICAgICAgICAgTGlzdCBleHRFbGVtcyA9Ci0gICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBleHRFbGVtcy5zaXplKCk7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBhbiBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgYSBzb2FwOmhlYWRlciwKLSAgICAgICAgICAgIC8vIHJldHVybiB0cnVlCi0gICAgICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaykpCi0gICAgICAgICAgICAgIC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIHJldHVybiBmYWxzZSwgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGZvdW5kCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbGxlY3RzIGFsbCBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbiBjb250YWluIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVNdWx0aXBhcnRFbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgZWxlbWVudCB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIG1pbWVNdWx0aXBhcnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICBMaXN0IG1pbWVQYXJ0cyA9ICgoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW0pLmdldE1JTUVQYXJ0cygpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1pbWVQYXJ0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIG9mIHRoaXMgbWltZTpwYXJ0Ci0gICAgICAgICAgICBMaXN0IGVsZW1zID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkQWxsKGVsZW1zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZU11bHRpcGFydEVsZW1lbnRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTQ0NDVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkwNwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBNSU1FIHBhcnQgaW4gYSBkZXNjcmlwdGlvbiBpcyBkZWZpbmVkIHVzaW5nCi0gKiBhbiBlbGVtZW50IHdpdGggYSBsb2NhbCBuYW1lIG9mIHBhcnQgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGUKLSAqIFdTREwgTUlNRSBCaW5kaW5nIGV4dGVuc2lvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTA3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODlmNGJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEFQMjkwOAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIG1pbWU6cGFydCBlbGVtZW50IGluIGEgREVTQ1JJUFRJT04gZG9lcyBub3QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5MDgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZyB3c2RsQmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBTaW5jZSBXU0RMNEogMS40IGlnbm9yZXMgYW55IGF0dHJpYnV0ZXMgb2YgbWltZTpwYXJ0LCB1c2UgWGVyY2VzIDIuNi4yIGluc3RlYWQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREb2N1bWVudCgpOwotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICBkb2MgPSB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTCh2YWxpZGF0b3Iud3NkbERvY3VtZW50LmdldExvY2F0aW9uKCksIG51bGwpOwotICAgICAgfQotCi0gICAgICAvLyBGaW5kaW5nIHRoZSB3c2RsOmJpbmRpbmcgZWxlbWVudCBiZWluZyBwcm9jZXNzZWQKLSAgICAgIEVsZW1lbnQgYmluZGluZyA9IGdldEJpbmRpbmdFbGVtZW50KAotICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksIHdzZGxCaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICBMaXN0IG9wcyA9IGdldENoaWxkRWxlbWVudHMoYmluZGluZywgV1NETF9PUEVSQVRJT04pOwotCi0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICBib29sZWFuIG11bHRpcGFydHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFbGVtZW50IGJpbmRpbmdPcGVyYXRpb24gPSAoRWxlbWVudCkgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBFbGVtZW50IGJpbmRpbmdJbnB1dCA9IGdldENoaWxkRWxlbWVudChiaW5kaW5nT3BlcmF0aW9uLCBXU0RMX0lOUFVUKTsKLSAgICAgICAgRWxlbWVudCBiaW5kaW5nT3V0cHV0ID0gZ2V0Q2hpbGRFbGVtZW50KGJpbmRpbmdPcGVyYXRpb24sIFdTRExfT1VUUFVUKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE11bHRpcGFydHMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoYmluZGluZ0lucHV0KTsKLSAgICAgICAgTGlzdCBvdXRwdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKGJpbmRpbmdPdXRwdXQpOwotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOmlucHV0IGNvbnRhaW5zIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgICAgICBpZiAoIWlucHV0TXVsdGlwYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtdWx0aXBhcnRzRm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBtaW1lOnBhcnQgZWxlbWVudCBjb250YWluaW5nIGEgbmFtZSBhdHRyaWJ1dGUsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQoaW5wdXRNdWx0aXBhcnRzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgIgotICAgICAgICAgICAgICAgICsgIm1pbWU6cGFydCBlbGVtZW50IGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpCi0gICAgICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE11bHRpcGFydHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbXVsdGlwYXJ0c0ZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZyBhIG5hbWUgYXR0cmlidXRlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KG91dHB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCAiCi0gICAgICAgICAgICAgICAgKyAibWltZTpwYXJ0IGVsZW1lbnQgaXMgaW4gdGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpCi0gICAgICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBJZiB0aGUgYmluZGluZyBjb250YWlucyBubyBvbmUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIW11bHRpcGFydHNGb3VuZCkKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgbWltZTpwYXJ0IGVsZW1lbnRzIGZvciBlYWNoIG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LgotICAgKiBAcGFyYW0gbXVsdGlwYXJ0cyBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUsIGlmIGFueSBtaW1lOnBhcnQgY29udGFpbnMgYSBuYW1lIGF0dHJpYnV0ZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KExpc3QgbXVsdGlwYXJ0cykgewotICAgIC8vIEdvaW5nIHRocm91Z2ggYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbXVsdGlwYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIExpc3QgbWltZVBhcnRzID0KLSAgICAgICAgZ2V0Q2hpbGRFbGVtZW50cygoRWxlbWVudCkgbXVsdGlwYXJ0cy5nZXQoaSksIFdTRExfTUlNRV9QQVJUKTsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICBFbGVtZW50IG1pbWVQYXJ0ID0gKEVsZW1lbnQpIG1pbWVQYXJ0cy5nZXQoaik7Ci0gICAgICAgIC8vIElmIHRoZSBtaW1lOnBhcnQgZWxlbWVudCBjb250YWlucyBhIG5hbWUgYXR0cmlidXRlLAotICAgICAgICAvLyByZXR1cm4gdHJ1ZQotICAgICAgICBpZiAobWltZVBhcnQuZ2V0QXR0cmlidXRlTm9kZShXU0lDb25zdGFudHMuQVRUUl9OQU1FKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gTm8gb25lIGludmFsaWQgbWltZTpwYXJ0IGVsZW1lbnQgaXMgZm91bmQsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcGFyYW0gcGFyZW50IGFuIGVsZW1lbnQgd2hpY2ggdGhlIGNoaWxkIGVsZW1lbnRzIGFyZSBnYXRoZXJlZCBmcm9tLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoRWxlbWVudCBwYXJlbnQpCi0gIHsKLSAgICBMaXN0IG1pbWVNdWx0aXBhcnRFbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBudWxsCi0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICAgIGlmIChjaGlsZC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVC5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAmJiBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVC5nZXRMb2NhbFBhcnQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QgYmVpbmcgcmV0dXJuZWQKLSAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkKGNoaWxkKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgbWltZTpwYXJ0UyBmcm9tIHRoZSBlbGVtZW50Ci0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSBnZXRDaGlsZEVsZW1lbnRzKGNoaWxkLCBXU0RMX01JTUVfUEFSVCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWltZVBhcnRzLnNpemUoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoKEVsZW1lbnQpIG1pbWVQYXJ0cy5nZXQoaSkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZU11bHRpcGFydEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgY2hpbGQKLSAgICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVNdWx0aXBhcnRFbGVtZW50czsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW4gZWxlbWVudCdzIGNoaWxkIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBwYXJlbnQgZWxlbWVudC4KLSAgICogQHBhcmFtIGNoaWxkTmFtZSBhIHF1YWxpZmllZCBlbGVtZW50IG5hbWUgYmVpbmcgZm91bmQuCi0gICAqIEByZXR1cm4gYW4gZWxlbWVudCBvciBudWxsIGlmIGl0IGlzIG5vdCBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgRWxlbWVudCBnZXRDaGlsZEVsZW1lbnQoRWxlbWVudCBwYXJlbnQsIFFOYW1lIGNoaWxkTmFtZSkKLSAgewotICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgRWxlbWVudCBjaGlsZCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQocGFyZW50KTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSByZXF1aXJlZCBxdWFsaWZpZWQgbmFtZQotICAgICAgaWYgKGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpCi0gICAgICAgICYmIGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TG9jYWxQYXJ0KCkpKQotICAgICAgewotICAgICAgICAvLyByZXR1cm4gdGhlIGNoaWxkCi0gICAgICAgIHJldHVybiBjaGlsZDsKLSAgICAgIH0KLSAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBlbGVtZW50J3MgY2hpbGQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBwYXJlbnQgZWxlbWVudC4KLSAgICogQHBhcmFtIGNoaWxkTmFtZSBhIHF1YWxpZmllZCBlbGVtZW50IG5hbWUgYmVpbmcgZm91bmQuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldENoaWxkRWxlbWVudHMoRWxlbWVudCBwYXJlbnQsIFFOYW1lIGNoaWxkTmFtZSkKLSAgewotICAgIExpc3QgY2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgdGhlIHJlcXVpcmVkIHF1YWxpZmllZCBuYW1lCi0gICAgICAgIGlmIChjaGlsZC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoY2hpbGROYW1lLmdldE5hbWVzcGFjZVVSSSgpKQotICAgICAgICAgICYmIGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TG9jYWxQYXJ0KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBjaGlsZCB0byB0aGUgbGlzdAotICAgICAgICAgIGNoaWxkcmVuLmFkZChjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBiaW5kaW5nJ3MgY2hpbGQKLSAgICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjaGlsZHJlbjsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3Igd3NkbDpiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9ucyBhIHdzZGw6ZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGJpbmRpbmdOYW1lIGEgbmFtZSBvZiB3c2RsOmJpbmRpbmcgZWxlbWVudC4KLSAgICogQHJldHVybiBhIHdzZGw6YmluZGluZyBlbGVtZW50IG9yIG51bGwgaWYgaXQgaXMgbm90IGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBFbGVtZW50IGdldEJpbmRpbmdFbGVtZW50KEVsZW1lbnQgZGVmaW5pdGlvbnMsIFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGRlZmluaXRpb25zJyBjaGlsZAotICAgIEVsZW1lbnQgY2hpbGQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGRlZmluaXRpb25zKTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiBkZWZpbml0aW9ucycgY2hpbGQgaXMgd3NkbDpiaW5kaW5nIGVsZW1lbnQKLSAgICAgIC8vIGFuZCBpcyB0aGUgc2FtZSB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZCBieSBXU0RMVmFsaWRhdG9yCi0gICAgICBpZiAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTRExfQklORElORy5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgJiYgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFdTRExfQklORElORy5nZXRMb2NhbFBhcnQoKSkKLSAgICAgICAgJiYgY2hpbGQuZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpLmVxdWFscyhiaW5kaW5nTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIC8vIHJldHVybiB0aGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQKLSAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAgfQotICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBkZWZpbml0aW9ucycgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICAvLyByZXR1cm4gbnVsbCwgaXMgdGhlcmUgaXMgbm8gc3VjaCB3c2RsOmJpbmRpbmcKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2ODFiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTA5Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5NdWx0aXBsZSBtaW1lOmNvbnRlbnQgY2hpbGQgZWxlbWVudHMgb2YgYSBtaW1lOnBhcnQgZWxlbWVudAotICogaW4gYSBkZXNjaXB0aW9uIHJlZmVyZW5jZSB0aGUgc2FtZSB3c2RsOnBhcnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkwOSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMKLSAgLy8gbXVsdGlwbGUgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gIHByaXZhdGUgYm9vbGVhbiBtdWx0aXBsZUNvbnRlbnRGb3VuZDsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJlc2V0dGluZyB0aGUgdmFyaWFibGUKLSAgICBtdWx0aXBsZUNvbnRlbnRGb3VuZCA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgaXRzIHdzZGw6b3BlcmF0aW9uIGVsZW1lbnRzCi0gICAgICBMaXN0IG9wcyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLQotICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgb3BlcmF0aW9uIGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9wcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIG9wcy5nZXQoaSk7Ci0KLSAgICAgICAgLy8gR2V0dGluZyB3c2RsOmlucHV0IGFuZCB3c2RsOm91dHB1dCBlbGVtZW50cyBvZiBhbiBvcGVyYXRpb24KLSAgICAgICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpOwotCi0gICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgZnJvbSB3c2RsOmlucHV0IGFuZCB3c2RsOm91dHB1dAotICAgICAgICBMaXN0IGlucHV0TWltZVBhcnRzID0gZ2V0TWltZVBhcnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZVBhcnRzID0gZ2V0TWltZVBhcnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG1pbWU6cGFydCBjb250YWluaW5nIG11bHRpcGxlIG1pbWU6Y29udGVudFMKLSAgICAgICAgLy8gd2hpY2ggcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQoaW5wdXRNaW1lUGFydHMpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBpbnZhbGlkIG1pbWU6cGFydCBlbGVtZW50ICIKLSAgICAgICAgICAgICsgImlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG1pbWU6cGFydCBjb250YWluaW5nIG11bHRpcGxlIG1pbWU6Y29udGVudFMKLSAgICAgICAgLy8gd2hpY2ggcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQob3V0cHV0TWltZVBhcnRzKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICArICJpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgICAvLyBJZiB0aGUgYmluZGluZyBkb2VzIG5vdCBjb250YWluIGEgbWltZTpwYXJ0IHdpdGggbXVsdGlwbGUKLSAgICAgIC8vIG1pbWU6Y29udGVudCBlbGVtZW50cywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtdWx0aXBsZUNvbnRlbnRGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBtaW1lOnBhcnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBtaW1lUGFydHMgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0cnVlIGlmIG11bHRpcGxlIG1pbWU6Y29udGVudFMgb2YgYSBtaW1lOnBhcnQKLSAgICogcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNJbnZhbGlkTWltZVBhcnQoTGlzdCBtaW1lUGFydHMpCi0gIHsKLSAgICAvLyBHb2luZyB0aHJvdWdoIGEgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbWVQYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBtaW1lOnBhcnQgY29udGFpbnMKLSAgICAgIC8vIGF0IGxlYXN0IG9uZSBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudEZvdW5kID0gZmFsc2U7Ci0gICAgICBTdHJpbmcgbWltZUNvbnRlbnRQYXJ0ID0gbnVsbDsKLQotICAgICAgLy8gR29pbmcgdGhyb3VnaCBtaW1lOnBhcnQgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgTGlzdCBleHRFbGVtcyA9ICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoaSkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBleHRFbGVtcy5zaXplKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgYW4gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGlzIG1pbWU6Y29udGVudAotICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaikpCi0gICAgICAgICAgLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKSkKLSAgICAgICAgewotICAgICAgICAgIE1JTUVDb250ZW50IG1pbWVDb250ZW50ICA9IChNSU1FQ29udGVudCkgZXh0RWxlbXMuZ2V0KGopOwotICAgICAgICAgIC8vIElmIGEgbWltZTpjb250ZW50IGVsZW1lbnQgd2FzIGFscmVhZHkgZm91bmQgaW4gdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICBpZiAobWltZUNvbnRlbnRGb3VuZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtdWx0aXBsZUNvbnRlbnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAvLyBJZiBhIG1pbWU6Y29udGVudCByZWZlcmVuY2VzIG90aGVyIHdzZGw6cGFydCB0aGFuIHRoZQotICAgICAgICAgICAgLy8gcHJldmlvdXMgbWltZTpjb250ZW50IGRvLCByZXR1cm4gdHJ1ZQotICAgICAgICAgICAgaWYgKG1pbWVDb250ZW50LmdldFBhcnQoKSA9PSBudWxsCi0gICAgICAgICAgICAgIHx8ICFtaW1lQ29udGVudC5nZXRQYXJ0KCkuZXF1YWxzKG1pbWVDb250ZW50UGFydCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBtaW1lOmNvbnRlbnQgZWxlbWVudCBvZiBtaW1lOnBhcnQKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgbWltZUNvbnRlbnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICBtaW1lQ29udGVudFBhcnQgPSBtaW1lQ29udGVudC5nZXRQYXJ0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFRoZXJlIGFyZSBubyBpbnZhbGlkIG1pbWU6cGFydCBlbGVtZW50cywgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbGxlY3RzIGFsbCBtaW1lOnBhcnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbiBjb250YWluIG1pbWU6cGFydCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZVBhcnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICBtaW1lUGFydHMuYWRkQWxsKG1QYXJ0cyk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lUGFydHMoCi0gICAgICAgICAgICAgICAgKChNSU1FUGFydCkgbVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICAgIG1pbWVQYXJ0cy5hZGRBbGwoZWxlbXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWltZVBhcnRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkxMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDJkMzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTEwCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIG1pbWU6Y29udGVudCBpbiBhIERFU0NSSVBUSU9OIHJlZmVyZW5jZXMKLSAqIGEgd3NkbDpwYXJ0IHRoYXQgaXMgZGVmaW5lZCB1c2luZyBlaXRoZXIgdGhlIHR5cGUgYXR0cmlidXRlCi0gKiBvciB0aGUgZWxlbWVudCBhdHRyaWJ1dGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6Y29udGVudCBlbGVtZW50Ci0gICAgICBib29sZWFuIG1pbWVDb250ZW50c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE1pbWVDb250ZW50cyA9IGdldE1pbWVDb250ZW50RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtaW1lQ29udGVudHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgSW5wdXQgcG9ydFR5cGVJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0IGluIHdzZGw6cG9ydFR5cGUKLSAgICAgICAgICAvLyBvciB0aGUgd3NkbDppbnB1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgbWVzc2FnZSBhdHRyaWJ1dGUsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocG9ydFR5cGVJbnB1dCA9PSBudWxsIHx8IHBvcnRUeXBlSW5wdXQuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgIlRoZSBjb3JyZXNwb25naW5nIG9wZXJhdGlvbiBpbiB0aGUgd3NkbDpwb3J0VHlwZSBmb3IgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uIGlzIGludmFsaWQuIik7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhIG1pbWU6Y29udGVudCByZWZlcmVuY2luZyBhbiBpbnZhbGlkIHdzZGw6cGFydCAKLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICBpbnB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIC8vIElmIHN1Y2ggcGFydCBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInBhcnQ9XCIiICsgcGFydCArCi0gICAgICAgICAgICAgICJcIiwgdGhlIGlucHV0IG9mIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtaW1lQ29udGVudHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgT3V0cHV0IHBvcnRUeXBlT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOm91dHB1dCBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgICAgLy8gb3IgdGhlIHdzZGw6b3V0cHV0IGRvZXMgbm90IHNwZWNpZnkgYSBtZXNzYWdlIGF0dHJpYnV0ZSwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmIChwb3J0VHlwZU91dHB1dCA9PSBudWxsIHx8IHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgY29ycmVzcG9uZ2luZyBvcGVyYXRpb24gaW4gdGhlIHdzZGw6cG9ydFR5cGUgZm9yIHRoZSBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiBiaW5kaW5nIG9wZXJhdGlvbiBpcyBpbnZhbGlkLiIpOwotICAgICAgICAgIC8vIEdldHRpbmcgYSBtaW1lOmNvbnRlbnQgcmVmZXJlbmNpbmcgYW4gaW52YWxpZCB3c2RsOnBhcnQKLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICAgIG91dHB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAvLyBJZiBzdWNoIHBhcnQgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwYXJ0PVwiIiArIHBhcnQgKwotICAgICAgICAgICAgICAgICJcIiwgdGhlIG91dHB1dCBvZiB0aGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGRvZXMgbm90IGNvbnRhaW4gbWltZTpjb250ZW50IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtaW1lQ29udGVudHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBldmVyeSBtaW1lOmNvbnRlbnQgZWxlbWVudC4gSWYgaXQgcmVmZXJlbmNlcyBhIHdzZGw6cGFydCB0aGF0Ci0gICAqIGlzIGRlZmluZWQgdXNpbmcgbmVpdGhlciB0aGUgdHlwZSBhdHRyaWJ1dGUgbm9yIHRoZSBlbGVtZW50IGF0dHJpYnV0ZQotICAgKiBvciB1c2luZyB0aGVtIHRvZ2V0aGVyLCBpdCBpcyBpbnZhbGlkLgotICAgKiBAcGFyYW0gbWltZUNvbnRlbnRzIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6bWVzc2FnZSBlbGVtZW50IGZvciBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIGEgdmFsdWUgb2YgdGhlIHBhcnQgYXR0cmlidXRlIG9mIGFuIGludmFsaWQgbWltZTpjb250ZW50Ci0gICAqIG9yIG51bGwgaWYgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgYXJlIHZhbGlkLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SW52YWxpZE1pbWVDb250ZW50UGFydChMaXN0IG1pbWVDb250ZW50cywgTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgLy8gR29pbmcgdGhyb3VnIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lQ29udGVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHZhbHVlIG9mIHRoZSBwYXJ0IGF0dHJpYnV0ZSBmcm9tIGEgbWltZTplbGVtZW50Ci0gICAgICBTdHJpbmcgcGFydE5hbWUgPSAoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCk7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25naW5nIHdzZGw6cGFydAotICAgICAgUGFydCBwYXJ0ID0gbWVzc2FnZS5nZXRQYXJ0KHBhcnROYW1lKTsKLSAgICAgIC8vIGlmIGl0IGlzIGRlZmluZWQgYW5kIHVzZSBuZWl0aGVyIHRoZSB0eXBlIGF0dHJpYnV0ZQotICAgICAgLy8gbm9yIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBvciB1c2UgdGhlbSB0b2dldGhlciwgcmV0dXJuIHBhcnQgdmFsdWUKLSAgICAgIGlmIChwYXJ0ICE9IG51bGwKLSAgICAgICAgJiYgKChwYXJ0LmdldFR5cGVOYW1lKCkgPT0gbnVsbCAmJiBwYXJ0LmdldEVsZW1lbnROYW1lKCkgPT0gbnVsbCkKLSAgICAgICAgfHwgKHBhcnQuZ2V0VHlwZU5hbWUoKSAhPSBudWxsICYmIHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBwYXJ0TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIG51bGwgaWYgbm8gb25lIHBhcnQgaXMgZm91bmQKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzMzgzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTExCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGluIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3VwdXQgZWxlbWVudHMKLSAqIG9mIG9wZXJhdGlvbnMgaW4gYSB3c2RsOmJpbmRpbmcsIGNvbnRhaW4gZXhhY3RseSBvbmUgbWltZTpwYXJ0IGNoaWxkIGVsZW1lbnQgdGhhdCBjb250YWlucwotICogYSBzb2FwYmluZDpib2R5IGNoaWxkIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkxMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkxMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICBib29sZWFuIG11bHRpcGFydHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TXVsdGlwYXJ0cyA9IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNdWx0aXBhcnRzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIG11bHRpcGFydHNGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZwotICAgICAgICAgIC8vIGEgc29hcGJpbmQ6Ym9keSBjaGlsZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWNvbnRhaW5zT25lU29hcEJvZHkoaW5wdXRNdWx0aXBhcnRzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgIgotICAgICAgICAgICAgICAgICsgIm1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50IGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNdWx0aXBhcnRzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIG11bHRpcGFydHNGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZwotICAgICAgICAgIC8vIGEgc29hcGJpbmQ6Ym9keSBjaGlsZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWNvbnRhaW5zT25lU29hcEJvZHkob3V0cHV0TXVsdGlwYXJ0cykpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBpbnZhbGlkICIKLSAgICAgICAgICAgICAgICArICJtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGNvbnRhaW5zIG5vIG9uZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghbXVsdGlwYXJ0c0ZvdW5kKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogTG9va3MgZm9yIG1pbWU6cGFydCBlbGVtZW50cyBjb250YWluaW5nIGEgc29hcDpib2R5IGNoaWxkCi0gICAqIGZvciBlYWNoIG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LgotICAgKiBAcGFyYW0gbXVsdGlwYXJ0cyBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGNvbnRhaW5pbmcgYSBzb2FwOmJvZHkKLSAgICogY2hpbGQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjb250YWluc09uZVNvYXBCb2R5KExpc3QgbXVsdGlwYXJ0cykKLSAgewotICAgIC8vIEEgdmFyaWFibGUgaW5kaWNhdGVzIHRoYXQgYSBzb2FwOmJvZHkgZWxlbWVudCBpcyBmb3VuZAotICAgIGJvb2xlYW4gc29hcEJvZHlGb3VuZCA9IGZhbHNlOwotCi0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdWx0aXBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgTGlzdCBtaW1lUGFydHMgPQotICAgICAgICAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBtdWx0aXBhcnRzLmdldChpKSkuZ2V0TUlNRVBhcnRzKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIGEgbWltZTpwYXJ0Ci0gICAgICAgIExpc3QgZXh0RWxlbXMgPQotICAgICAgICAgICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoaikpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgZXh0RWxlbXMuc2l6ZSgpOyBrKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiBhbiBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgYSBzb2FwOmJvZHkKLSAgICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaykpCi0gICAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIGEgc29hcDpib2R5IGVsZW1lbnQgd2FzIGFscmVhZHkgZm91bmQsCi0gICAgICAgICAgICAvLyByZXR1cm4gdHJ1ZQotICAgICAgICAgICAgaWYgKHNvYXBCb2R5Rm91bmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGVsc2Ugc2V0IHRoZSB2YXJpYWJsZSB0byB0aGUgdHJ1ZSB2YWx1ZQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBzb2FwQm9keUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJvZHlGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cyhMaXN0IGV4dEVsZW1zKQotICB7Ci0gICAgTGlzdCBtaW1lTXVsdGlwYXJ0RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QgYmVpbmcgcmV0dXJuZWQKLSAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkKGV4dEVsZW0pOwotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBvZiB0aGlzIG1pbWU6cGFydAotICAgICAgICAgICAgTGlzdCBlbGVtcyA9IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cygKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZU11bHRpcGFydEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVNdWx0aXBhcnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MzAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MzAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3MzRmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTMwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkzMAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSB3c2RsOmZhdWx0IGVsZW1lbnQgaW4gYSBkZXNjcmlwdGlvbiBkb2VzIG5vdCBoYXZlCi0gKiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBhcyBpdHMgY2hpbGQgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTMwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTMwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEEgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgYSBiaW5kaW5nIGNvbnRhaW5zIGF0IGxlYXN0IG9uZQotICAgICAgLy8gd3NkbDpmYXVsdCBlbGVtZW50Ci0gICAgICBib29sZWFuIGZhdWx0c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDpmYXVsdCBlbGVtZW50cwotICAgICAgICBDb2xsZWN0aW9uIGZhdWx0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0cygpLnZhbHVlcygpOwotICAgICAgICBpZiAoIWZhdWx0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBmYXVsdHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zTWltZU11bHRpcGFydHMoZmF1bHRzKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYmluZGluZyBvcGVyYXRpb24gaXMgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgZG9lcyBub3QgY29udGFpbiB3c2RsOmZhdWx0IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFmYXVsdHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB3c2RsOmZhdWx0IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZmF1bHRzIGEgY29sbGVjdGlvbiBvZiB3c2RsOmZhdWx0IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYW55IHdzZGw6ZmF1bHQgaGFzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkIGNoaWxkCi0gICAqIGVsZW1lbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjb250YWluc01pbWVNdWx0aXBhcnRzKENvbGxlY3Rpb24gZmF1bHRzKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIHdzZGw6ZmF1bHRTCi0gICAgSXRlcmF0b3IgaSA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIHdzZGw6ZmF1bHQncyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBMaXN0IGV4dEVsZW1zID0gKChCaW5kaW5nRmF1bHQpIGkubmV4dCgpKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZXh0RWxlbXMuc2l6ZSgpOyBqKyspCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQsIHJldHVybiB0cnVlCi0gICAgICAgIGlmICgoKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1zLmdldChqKSkKLSAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBUaGVyZSBhcmUgbm8gbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTJhMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuWFNTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTT2JqZWN0TGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1BhcnRpY2xlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVGVybTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQVAyOTQwCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIGRlc2NyaXB0aW9uLCBhIHdzZGw6cGFydCBkZWZpbmVkIHdpdGggdGhlCi0gKiByZWY6c3dhUmVmIHNjaGVtYSB0eXBlIGlzIGJvdW5kIHRvIGEgc29hcGJpbmQ6Ym9keSwgb3IgYSBzb2FwYmluZDpoZWFkZXIKLSAqIGluIGEgTUlNRSBiaW5kaW5nLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5NDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDAoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyB3c2RsOnBvcnRUeXBlIHJlZmVyZW5jZXMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyB3c2RsOnBhcnQgZGVmaW5lZCB3aXRoIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlCi0gICAgICBib29sZWFuIHN3YVJlZkZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICBJbnB1dCBwb3J0VHlwZUlucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpOwotICAgICAgICBPdXRwdXQgcG9ydFR5cGVPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpOwotICAgICAgICAvLyBJZiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgIT0gbnVsbCAmJiBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1lc3NhZ2UncyBwYXJ0cyBkZWZpbmVkIHdpdGggcmVmOnN3YVJlZgotICAgICAgICAgIExpc3Qgc3dhUmVmUGFydHMgPSBnZXRTd2FSZWZQYXJ0cyhwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgaWYgKCFzd2FSZWZQYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc3dhUmVmRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgLy8gR2V0dGluZyBhIHdzZGw6cGFydCB0aGF0IGlzIHVuYm91bmQKLSAgICAgICAgICAgIFN0cmluZyB1bmJvdW5kUGFydCA9IGdldFVuYm91bmRQYXJ0KHN3YVJlZlBhcnRzLAotICAgICAgICAgICAgICBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpLAotICAgICAgICAgICAgICBiaW5kaW5nSW5wdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gSWYgc3VjaCB3c2RsOnBhcnQgZXhpc3RzLCBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICBpZiAodW5ib3VuZFBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBwYXJ0IFwiIiArIHVuYm91bmRQYXJ0Ci0gICAgICAgICAgICAgICAgKyAiXCIgaXMgbm90IGJvdW5kIHByb3Blcmx5IHRvIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ICE9IG51bGwgJiYgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWVzc2FnZSdzIHBhcnRzIGRlZmluZWQgd2l0aCByZWY6c3dhUmVmCi0gICAgICAgICAgTGlzdCBzd2FSZWZQYXJ0cyA9IGdldFN3YVJlZlBhcnRzKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgaWYgKCFzd2FSZWZQYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc3dhUmVmRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgLy8gR2V0dGluZyBhIHdzZGw6cGFydCB0aGF0IGlzIHVuYm91bmQKLSAgICAgICAgICAgIFN0cmluZyB1bmJvdW5kUGFydCA9IGdldFVuYm91bmRQYXJ0KHN3YVJlZlBhcnRzLAotICAgICAgICAgICAgICBwb3J0VHlwZU91dHB1dC5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKSwKLSAgICAgICAgICAgICAgYmluZGluZ091dHB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdPdXRwdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gSWYgc3VjaCB3c2RsOnBhcnQgZXhpc3RzLCBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICBpZiAodW5ib3VuZFBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBwYXJ0IFwiIiArIHVuYm91bmRQYXJ0Ci0gICAgICAgICAgICAgICAgKyAiXCIgaXMgbm90IGJvdW5kIHByb3Blcmx5IHRvIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB3c2RsOnBhcnRTIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZgotICAgICAgLy8gc2NoZW1hIHR5cGUsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghc3dhUmVmRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIC8vIFRoZSBhc3NlcnRpb24gaXMgInJlY29tbWVuZGVkIiwgdXNpbmcgdGhlICJ3YXJuaW5nIiByZXN1bHQKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYSB3c2RsOnBhcnQgdGhhdCBpcyBub3QgYm91bmQgdG8gZWl0aGVyIHNvYXA6Ym9keSBvciBzb2FwOmhlYWRlcgotICAgKiBpbiBhIE1JTUUgYmluZGluZy4KLSAgICogQHBhcmFtIHN3YVJlZlBhcnRzIGEgbGlzdCBvZiB3c2RsOnBhcnQgbmFtZXMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHRoZQotICAgKiByZWY6c3dhUmVmIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB3c2RsOm1lc3NhZ2UgYmVpbmcgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgb2YgZWl0aGVyIHdzZGw6aW5wdXQgb3IKLSAgICogd3NkbDpvdXRwdXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gYSB3c2RsOnBhcnQgbmFtZSB0aGF0IGlzIG5vdCBib3VuZCBwcm9wZXJseSwgb3IgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldFVuYm91bmRQYXJ0KExpc3Qgc3dhUmVmUGFydHMsIFFOYW1lIG1lc3NhZ2VOYW1lLCBMaXN0IGV4dEVsZW1zKSB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCB3c2RsOnBhcnQgbmFtZXMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN3YVJlZlBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0ID0gKFN0cmluZykgc3dhUmVmUGFydHMuZ2V0KGkpOwotICAgICAgYm9vbGVhbiBib3VuZFByb3Blcmx5ID0gZmFsc2U7Ci0gICAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZXh0RWxlbXMuc2l6ZSgpICYmICFib3VuZFByb3Blcmx5OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaik7Ci0gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBtaW1lOnBhcnQgZWxlbWVudCB3aGVyZSBzb2FwOmJvZHkKLSAgICAgICAgICAgIC8vIGFuZCBzb2FwOmhlYWRlciBjb3VsZCBhcHBlYXIKLSAgICAgICAgICAgIGlmIChtaW1lUGFydHMuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTGlzdCBlbGVtcyA9ICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoMCkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgTUlNRSBwYXJ0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGVsZW1zLnNpemUoKTsgayArKykKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1zLmdldChrKTsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGF0IGlzIGEgc29hcDpib2R5Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIExpc3QgcHRzID0gKChTT0FQQm9keSkgZWxlbSkuZ2V0UGFydHMoKTsKLSAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJ0IGlzIGJvdW5kIGJ5IHRoaXMgZWxlbWVudAotICAgICAgICAgICAgICAgICAgaWYgKHB0cyA9PSBudWxsIHx8IHB0cy5jb250YWlucyhwYXJ0KSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm91bmRQcm9wZXJseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBlbHNlIGlmIHRoYXQgaXMgYSBzb2FwOmhlYWRlcgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTT0FQSGVhZGVyIGhlYWRlciA9IChTT0FQSGVhZGVyKSBlbGVtOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VOYW1lLmVxdWFscyhoZWFkZXIuZ2V0TWVzc2FnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICYmIGhlYWRlci5nZXRQYXJ0KCkgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICYmIGhlYWRlci5nZXRQYXJ0KCkuZXF1YWxzKHBhcnQpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgYm91bmRQcm9wZXJseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIC8vIFdTREw0SiAxLjQgZG9lcyBub3QgcmVjb2duaXplIHNvYXA6aGVhZGVyIGVsZW1lbnRzIHRoYXQKLSAgICAgICAgICAgICAgICAgIC8vIGFyZSBlbmNsb3NlZCBpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQsIHNvIHVzaW5nIGEgd29ya2Fyb3VuZAotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFbGVtZW50IGhlYWRlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBoZWFkZXIgcmVmZXJlbmNlcyB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZXNNZXNzYWdlKGhlYWRlciwgbWVzc2FnZU5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgJiYgaGVhZGVyLmdldEF0dHJpYnV0ZSgicGFydCIpLmVxdWFscyhwYXJ0KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGJvdW5kUHJvcGVybHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBJZiB0aGlzIHBhcnQgaXMgdW5ib3VuZCBwcm9wZXJseSwgcmV0dXJuIGl0Ci0gICAgICBpZiAoIWJvdW5kUHJvcGVybHkpCi0gICAgICAgIHJldHVybiBwYXJ0OwotICAgIH0KLSAgICAvLyBBbGwgdGhlIHBhcnRzIGFyZSBib3VuZCBwcm9wZXJseSwgcmV0dXJuIG51bGwKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgd2hldGhlciBhbiBlbGVtZW50IGNvbnRhaW5zIGEgbWVzc2FnZSBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzCi0gICAqIGEgbWVzc2FnZSB0aGF0IGhhdmUgdGhlIHF1YWxpZmllZCBuYW1lIHNwZWNpZmllZC4KLSAgICogQHBhcmFtIGVsZW0gYW4gZWxlbWVudCB0byBiZSB2YWxpZGF0ZWQuCi0gICAqIEBwYXJhbSBtZXNzYWdlTmFtZSB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYW4gZWxlbWVudCBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNNZXNzYWdlKEVsZW1lbnQgZWxlbSwgUU5hbWUgbWVzc2FnZU5hbWUpCi0gIHsKLSAgICAvLyBHZXR0aW5nIHRoZSBlbGVtZW50J3MgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGVsZW0uZ2V0QXR0cmlidXRlKCJtZXNzYWdlIik7Ci0gICAgLy8gZmluZGluZyB0aGUgY29sb24gZGVsaW1pdGVyCi0gICAgaW50IGNvbG9uUG9zID0gbWVzc2FnZS5pbmRleE9mKCI6Iik7Ci0gICAgU3RyaW5nIG5zID0gbnVsbDsKLSAgICAvLyBHZXR0aW5nIGEgbG9jYWwgcGFydAotICAgIFN0cmluZyBscCA9IGNvbG9uUG9zID4gLTEgPyBtZXNzYWdlLnN1YnN0cmluZyhjb2xvblBvcyArIDEpIDogbWVzc2FnZTsKLSAgICAvLyBJZiB0aGUgZGVsaW1pdGVyIGlzIGZvdW5kCi0gICAgaWYgKGNvbG9uUG9zID4gLTEpCi0gICAgewotICAgICAgLy8gUmV0cmlldmluZyBhIG5hbWVzcGFjZSBVUkkKLSAgICAgIG5zID0gdmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpCi0gICAgICAgIC5nZXROYW1lc3BhY2UobWVzc2FnZS5zdWJzdHJpbmcoMCwgY29sb25Qb3MpKTsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIGxvY2FsIHBhcnQgYW5kIHRoZSBuYW1lc3BhY2UgVVJJIGFyZSB0aGUgc2FtZSBhcyBhIG1lc3NhZ2UgaGF2ZQotICAgIGlmIChtZXNzYWdlTmFtZS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMobHApCi0gICAgICAmJiBtZXNzYWdlTmFtZS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMobnMpKQotICAgIHsKLSAgICAgIC8vIGVsZW1lbnQgaXMgdmFsaWQsIHJldHVybiB0cnVlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgLy8gZWxlbWVudCBpcyBub3QgdmFsaWQsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIHdzZGw6cGFydCBkZWZpbmVkIHdpdGggdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgbWVzc2FnZSBjb250YWluaWcgd3NkbDpwYXJ0IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiB3c2RsOnBhcnQgbmFtZXMuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0U3dhUmVmUGFydHMoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgTGlzdCBzd2FSZWZQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIC8vIEdvaW5nIHRocm91Z2ggbWVzc2FnZSdzIHBhcnRzCi0gICAgSXRlcmF0b3IgaXQgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgICBRTmFtZSByZWY7Ci0gICAgICBzaG9ydCB0eXBlOwotICAgICAgLy8gR2V0dGluZyBlaXRoZXIgcGFydCdzIGVsZW1lbnQgcmVmZXJlbmNlIG9yIHR5cGUgcmVmZXJlbmNlCi0gICAgICBpZiAoKHJlZiA9IHBhcnQuZ2V0VHlwZU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9IFhTQ29uc3RhbnRzLlRZUEVfREVGSU5JVElPTjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKChyZWYgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHR5cGUgPSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OOwotICAgICAgfQotICAgICAgLy8gVGhlIHBhcnQgZG9lcyBjb25hdGlucyBuZWl0aGVyIGVsZW1lbnQgbm9yIHR5cGUgYXR0cmlidXRlLAotICAgICAgLy8gcHJvY2VlZGluZyB3aXRoIHRoZSBuZXh0IHBhcnQKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBzY2hlbWFzIGRlZmluZWQKLSAgICAgIE1hcCBzY2hlbWFzID0gdmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXRTY2hlbWFzKCk7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBzY2hlbWFzCi0gICAgICBJdGVyYXRvciBpdDIgPSBzY2hlbWFzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWFNNb2RlbCB4c01vZGVsID0gKFhTTW9kZWwpIGl0Mi5uZXh0KCk7Ci0gICAgICAgIFhTVHlwZURlZmluaXRpb24gcGFydFR5cGUgPSBudWxsOwotICAgICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQgdHlwZQotICAgICAgICBpZiAodHlwZSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgICAgICB7Ci0gICAgICAgICAgWFNFbGVtZW50RGVjbGFyYXRpb24gZWxlbSA9IHhzTW9kZWwuZ2V0RWxlbWVudERlY2xhcmF0aW9uKAotICAgICAgICAgICAgcmVmLmdldExvY2FsUGFydCgpLCByZWYuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgICAgIGlmIChlbGVtICE9IG51bGwpCi0gICAgICAgICAgICBwYXJ0VHlwZSA9IGVsZW0uZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJ0VHlwZSA9IHhzTW9kZWwuZ2V0VHlwZURlZmluaXRpb24oCi0gICAgICAgICAgICByZWYuZ2V0TG9jYWxQYXJ0KCksIHJlZi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgdGhlIHBhcnQgdHlwZSBpcyBkZWZpbmVkIHVzaW5nIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlCi0gICAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKHBhcnRUeXBlLCBuZXcgQXJyYXlMaXN0KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBwYXJ0J3MgbmFtZSB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIHN3YVJlZlBhcnRzLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIHRoZSBsaXN0Ci0gICAgcmV0dXJuIHN3YVJlZlBhcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHNjaGVtYSB0eXBlIHdoZXRoZXIgaXQgY29udGFpbnMgcmVmOnN3YVJlZiBzaW1wbGUgc2NoZW1hIHR5cGUKLSAgICogb3IgaGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGlzIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0geHNUeXBlIGEgc2NoZW1hIHR5cGUgZGVmaW5pdGlvbiBlbGVtZW50Ci0gICAqIEByZXR1cm4gdHJ1ZSwgaWYgc2NoZW1hIHR5cGUgY29udGFpbnMgcmVmOnN3YVJlZiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNTd2FSZWYoWFNUeXBlRGVmaW5pdGlvbiB4c1R5cGUsIExpc3QgdHlwZXMpCi0gIHsKLSAgICBpZiAoKHhzVHlwZSAhPSBudWxsKSAmJiAoIXR5cGVzLmNvbnRhaW5zKHhzVHlwZSkpKQotICAgIHsKLSAgICAgIHR5cGVzLmFkZCh4c1R5cGUpOwotICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbXBsZXggdHlwZQotICAgICAgaWYgKHhzVHlwZS5nZXRUeXBlQ2F0ZWdvcnkoKSA9PSBYU1R5cGVEZWZpbml0aW9uLkNPTVBMRVhfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNDb21wbGV4VHlwZURlZmluaXRpb24geHNDb21wbGV4VHlwZSA9Ci0gICAgICAgICAgKFhTQ29tcGxleFR5cGVEZWZpbml0aW9uKSB4c1R5cGU7Ci0gICAgICAgIC8vIElmIGl0IGNvbnRhaW5zIG1peGVkIGNvbnRleHQKLSAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGUgY29udGV4dCBjb250YWlucyByZWY6c3dhUmVmCi0gICAgICAgIGlmICh4c0NvbXBsZXhUeXBlLmdldFBhcnRpY2xlKCkgIT0gbnVsbAotICAgICAgICAgICYmIHJlZmVyZW5jZXNTd2FSZWYoeHNDb21wbGV4VHlwZS5nZXRQYXJ0aWNsZSgpLmdldFRlcm0oKSwgdHlwZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgdHlwZSdzIGF0dHJpYnV0ZXMKLSAgICAgICAgWFNPYmplY3RMaXN0IGF0dHJMaXN0ID0geHNDb21wbGV4VHlwZS5nZXRBdHRyaWJ1dGVVc2VzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ckxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFhTQXR0cmlidXRlVXNlIHhzQXR0clVzZSA9IChYU0F0dHJpYnV0ZVVzZSkgYXR0ckxpc3QuaXRlbShpKTsKLSAgICAgICAgICAvLyBJZiBhbiBhdHRyaWJ1dGUgaXMgZGVmaW5lZCB1c2luZyByZWY6c3dhUmVmLCByZXR1cm4gdHJ1ZQotICAgICAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKAotICAgICAgICAgICAgeHNBdHRyVXNlLmdldEF0dHJEZWNsYXJhdGlvbigpLmdldFR5cGVEZWZpbml0aW9uKCksIHR5cGVzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGVsc2UgaWYgdGhpcyBpcyBhIHNpbXBsZSB0eXBlCi0gICAgICBlbHNlIGlmICh4c1R5cGUuZ2V0VHlwZUNhdGVnb3J5KCkgPT0gWFNUeXBlRGVmaW5pdGlvbi5TSU1QTEVfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNTaW1wbGVUeXBlIHhzU2ltcGxlVHlwZSA9IChYU1NpbXBsZVR5cGUpIHhzVHlwZTsKLSAgICAgICAgLy8gSWYgdGhpcyB0eXBlIGlzIHJlZjpzd2FSZWYsIHJldHVybiB0cnVlCi0gICAgICAgIGlmICh4c1NpbXBsZVR5cGUuZ2V0TmFtZXNwYWNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU1dBX1JFRikKLSAgICAgICAgICAmJiB4c1NpbXBsZVR5cGUuZ2V0TmFtZSgpLmVxdWFscyhXU0lDb25zdGFudHMuU0NIRU1BX1RZUEVfU1dBX1JFRikpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBUaGUgc2NoZW1hIHR5cGUgZG9lcyBub3QgY29udGFpbiBhbnkgZWxlbWVudCBkZWZpbmVkIHdpdGggdGhlIHJlZjpzd2FSZWYKLSAgICAvLyByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIGEgdGVybSB3aGV0aGVyIGl0IGlzIGRlZmluZWQgd2l0aCByZWY6c3dhUmVmLgotICAgKiBAcGFyYW0gdGVybSBhIHRlcm0gdGhhdCBjYW4gYmUgb25lIG9mIGEgbW9kZWwgZ3JvdXAgb3IgYW4KLSAgICogZWxlbWVudCBkZWNsYXJhdGlvbi4KLSAgICogQHJldHVybiB0cnVlIGlmIGEgdGVybSBpcyBkZWZpbmVkIHdpdGggcmVmOnN3YVJlZiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNTd2FSZWYoWFNUZXJtIHRlcm0sIExpc3QgdHlwZXMpCi0gIHsKLSAgICAvLyBJZiBhIHRlcm0gaXMgYW4gZWxlbWVudCBkZWNsYXJhdGlvbgotICAgIGlmICh0ZXJtLmdldFR5cGUoKSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgIHsKLSAgICAgIC8vIElmIGVsZW1lbnQncyB0eXBlIGlzIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZiwgcmV0dXJuIHRydWUKLSAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKAotICAgICAgICAoKFhTRWxlbWVudERlY2xhcmF0aW9uKSB0ZXJtKS5nZXRUeXBlRGVmaW5pdGlvbigpLCB0eXBlcykpCi0gICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGVsc2UgaWYgYSB0ZXJtIGlzIGEgbW9kZWwgZ3JvdXAKLSAgICBlbHNlIGlmKHRlcm0uZ2V0VHlwZSgpID09IFhTQ29uc3RhbnRzLk1PREVMX0dST1VQKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIFBhcnRpY2xlIHNjaGVtYSBjb21wb25lbnRzCi0gICAgICBYU09iamVjdExpc3QgbGlzdCA9ICgoWFNNb2RlbEdyb3VwKSB0ZXJtKS5nZXRQYXJ0aWNsZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGUgdGVybSBvZiBhIHBhcnRpY2xlIGlzIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZiwKLSAgICAgICAgLy8gcmV0dXJuIHRydWUKLSAgICAgICAgaWYgKHJlZmVyZW5jZXNTd2FSZWYoKChYU1BhcnRpY2xlKSBsaXN0Lml0ZW0oaSkpLmdldFRlcm0oKSwgdHlwZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJmMGRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBBUDI5NDEKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgd3NkbDpiaW5kaW5nIGluIGEgZGVzY3JpcHRpb24gYmluZHMgZXZlcnkgd3NkbDpwYXJ0Ci0gKiBvZiBhIHdzZGw6bWVzc2FnZSBpbiB0aGUgd3NkbDpwb3J0VHlwZSB0byB3aGljaCBpdCByZWZlcnMgdG8gb25lIG9mCi0gKiBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOmZhdWx0ICwgc29hcGJpbmQ6aGVhZGVyZmF1bHQsCi0gKiBvciBtaW1lOmNvbnRlbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjk0MSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjk0MShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLSAgICAgICAgSW5wdXQgcG9ydFR5cGVJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKTsKLSAgICAgICAgT3V0cHV0IHBvcnRUeXBlT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKTsKLSAgICAgICAgLy8gSWYgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBleGlzdHMgaW4gd3NkbDpwb3J0VHlwZQotICAgICAgICAvLyBhbmQgaW5jbHVkZXMgdGhlIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgIGlmIChwb3J0VHlwZUlucHV0ICE9IG51bGwgJiYgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIGxpc3Qgb2YgYWxsIHRoZSBwYXJ0cyBib3VuZCBieSB3c2RsOmlucHV0J3MgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgICBMaXN0IGlucHV0UGFydHMgPSBnZXRCaW5kaW5nUGFydHMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLAotICAgICAgICAgICAgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIC8vIElmIG5vdCB0cnVlIHRoYXQgYWxsIHRoZSB3c2RsOnBhcnRTIGFyZSBib3VuZCwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmICghaW5wdXRQYXJ0cwotICAgICAgICAgICAgLmNvbnRhaW5zQWxsKHBvcnRUeXBlSW5wdXQuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkua2V5U2V0KCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIgYmluZGluZyBvcGVyYXRpb24gZG9lcyBub3QgIgotICAgICAgICAgICAgICArICJiaW5kIGFsbCB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBhcnRTLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ICE9IG51bGwgJiYgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBsaXN0IG9mIGFsbCB0aGUgcGFydHMgYm91bmQgYnkgd3NkbDpvdXRwdXQncyBjaGlsZCBlbGVtZW50cwotICAgICAgICAgIExpc3Qgb3V0cHV0UGFydHMgPSBnZXRCaW5kaW5nUGFydHMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgICAgICAgIHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgLy8gSWYgbm90IHRydWUgdGhhdCBhbGwgdGhlIHdzZGw6cGFydFMgYXJlIGJvdW5kLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFvdXRwdXRQYXJ0cwotICAgICAgICAgICAgLmNvbnRhaW5zQWxsKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpLmtleVNldCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiBiaW5kaW5nIG9wZXJhdGlvbiBkb2VzIG5vdCAiCi0gICAgICAgICAgICAgICsgImJpbmQgYWxsIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6cGFydFMuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSUYgdGhlcmUgYXJlIHdzZGw6ZmF1bHRTIGluIHRoZSB3c2RsOnBvcnRUeXBlIG9wZXJhdGlvbgotICAgICAgICBpZiAoIWJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0RmF1bHRzKCkuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIHNvYXA6ZmF1bHQgbmFtZXMKLSAgICAgICAgICBMaXN0IGZhdWx0TmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgQ29sbGVjdGlvbiBmYXVsdHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdHMoKS52YWx1ZXMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgd3NkbDpmYXVsdFMKLSAgICAgICAgICBJdGVyYXRvciBpdCA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB3c2RsOmZhdWx0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICAgICAgTGlzdCBleHRFbGVtcyA9ICgoQmluZGluZ0ZhdWx0KSBpdC5uZXh0KCkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBleHRFbGVtcy5zaXplKCk7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbXMuZ2V0KGopKQotICAgICAgICAgICAgICAgIC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfRkFVTFQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmF1bHROYW1lcy5hZGQoKChTT0FQRmF1bHQpZXh0RWxlbXMuZ2V0KGopKS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBzb2FwOmhlYWRlcmZhdWx0UwotICAgICAgICAgIGZhdWx0TmFtZXMuYWRkQWxsKGZpbmRBbGxIZWFkZXJGYXVsdHMoYmluZGluZ09wZXJhdGlvbikpOwotICAgICAgICAgIC8vIElmIG5vdCB0cnVlIHRoYXQgYWxsIHRoZSB3c2RsOmZhdWx0UyBhcmUgYm91bmQsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWZhdWx0TmFtZXMuY29udGFpbnNBbGwoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldEZhdWx0cygpLmtleVNldCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGRvZXMgbm90ICIKLSAgICAgICAgICAgICAgICAgICsgImJpbmQgYWxsIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6ZmF1bHRTLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgLy8gVGhlIGFzc2VydGlvbiBpcyAicmVjb21tZW5kZWQiLCB1c2luZyB0aGUgIndhcm5pbmciIHJlc3VsdAotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIHBhcnRzIGJvdW5kIGJ5IGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgd3NkbDptZXNzYWdlIGVsZW1lbnQgY29ycmVzcG9uZ2luZwotICAgKiB0byB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIGxpc3Qgb2Ygd3NkbDpwYXJ0IG5hbWVzIGJvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldEJpbmRpbmdQYXJ0cyhMaXN0IGV4dEVsZW1zLCBNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1zLmdldChpKTsKLSAgICAgICAgLy8gSWYgdGhhdCBpcyBhIHNvYXA6Ym9keQotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfQk9EWSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgYWxsIHRoZSBwYXJ0cyBib3VuZCB0byB0aGUgbGlzdAotICAgICAgICAgIExpc3QgcHRzID0gKChTT0FQQm9keSkgZXh0RWxlbSkuZ2V0UGFydHMoKTsKLSAgICAgICAgICBpZiAocHRzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHMuYWRkQWxsKHB0cyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGVsc2UgdGhlIHBhcnRzIGF0dHJpYnV0ZSBpcyBvbWl0dGVkLAotICAgICAgICAgIC8vIGFsbCBwYXJ0cyBkZWZpbmVkIGJ5IHRoZSBtZXNzYWdlIGFyZSBhc3N1bWVkIHRvIGJlIGluY2x1ZGVkCi0gICAgICAgICAgLy8gaW4gdGhlIFNPQVAgQm9keSBwb3J0aW9uLgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0cy5hZGRBbGwobWVzc2FnZS5nZXRQYXJ0cygpLmtleVNldCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZWxzZSBpZiB0aGF0IGlzIGEgc29hcDpoZWFkZXIKLSAgICAgICAgZWxzZSBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgaGVhZGVyRmF1bHRzID0gbnVsbDsKLSAgICAgICAgICBpZiAoZXh0RWxlbSBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpCi0gICAgICAgICAgewotICAgICAgICAgICAgU09BUEhlYWRlciBoZWFkZXIgPSAoU09BUEhlYWRlcikgZXh0RWxlbTsKLSAgICAgICAgICAgIC8vIElmIGEgaGVhZGVyIHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSwKLSAgICAgICAgICAgIC8vIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QgCi0gICAgICAgICAgICBpZiAobWVzc2FnZS5nZXRRTmFtZSgpLmVxdWFscyhoZWFkZXIuZ2V0TWVzc2FnZSgpKSkKLSAgICAgICAgICAgICAgcGFydHMuYWRkKGhlYWRlci5nZXRQYXJ0KCkpOwotCi0gICAgICAgICAgICBoZWFkZXJGYXVsdHMgPSBoZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBXU0RMNEogMS40IGRvZXMgbm90IHJlY29nbml6ZSBzb2FwOmhlYWRlciBlbGVtZW50cyB0aGF0IGFyZSBlbmNsb3NlZAotICAgICAgICAgIC8vIGluIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwgc28gdXNpbmcgYSB3b3JrYXJvdW5kCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgaGVhZGVyID0KLSAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgIC8vIElmIGEgaGVhZGVyIHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSwKLSAgICAgICAgICAgIC8vIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgIGlmIChyZWZlcmVuY2VzTWVzc2FnZShoZWFkZXIsIG1lc3NhZ2UuZ2V0UU5hbWUoKSkpCi0gICAgICAgICAgICAgIHBhcnRzLmFkZChoZWFkZXIuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBzb2FwOmhlYWRlcmZhdWx0IGVsZW1lbnRzIGZvciB0aGUgaGVhZGVyCi0gICAgICAgICAgICBoZWFkZXJGYXVsdHMgPSBnZXRIZWFkZXJGYXVsdHMoaGVhZGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgc29hcDpoZWFkZXJmYXVsdFMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGhlYWRlckZhdWx0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyRmF1bHRzLmdldChqKSBpbnN0YW5jZW9mIFNPQVBIZWFkZXJGYXVsdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNoZiA9IChTT0FQSGVhZGVyRmF1bHQpIGhlYWRlckZhdWx0cy5nZXQoaik7Ci0gICAgICAgICAgICAgIC8vIElmIGEgc29hcDpoZWFkZXJmYXVsdCByZWZlcmVuY2VzIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgICAgIC8vIG1lc3NhZ2UsIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXF1YWxzKHNoZi5nZXRNZXNzYWdlKCkpKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChzaGYuZ2V0UGFydCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHRoZSBzYW1lIHdvcmthcm91bmQuLi4KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCBzaGYgPSAoRWxlbWVudCkgaGVhZGVyRmF1bHRzLmdldChqKTsKLSAgICAgICAgICAgICAgLy8gSWYgYSBzb2FwOmhlYWRlcmZhdWx0IHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgICAgLy8gbWVzc2FnZSwgYWRkaW5nIHBhcnQgbmFtZSB0byB0aGUgbGlzdAotICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlc01lc3NhZ2Uoc2hmLCBtZXNzYWdlLmdldFFOYW1lKCkpKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChzaGYuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBlbHNlIGlmIHRoYXQgaXMgYSBtaW1lOmNvbnRlbnQKLSAgICAgICAgZWxzZSBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfQ09OVEVOVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBhZGRpbmcgcGFydCBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgcGFydHMuYWRkKCgoTUlNRUNvbnRlbnQpIGV4dEVsZW0pLmdldFBhcnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZWxzZSBpZiB0aGF0IGlzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSB2YWx1ZXMgb2YgcGFydCBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAvLyBvZiBtaW1lOnBhcnQncyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgICAgICBwYXJ0cy5hZGRBbGwoZ2V0QmluZGluZ1BhcnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgICAgICAgICAgbWVzc2FnZSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFydHM7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHdoZXRoZXIgYW4gZWxlbWVudCBjb250YWlucyBhIG1lc3NhZ2UgYXR0cmlidXRlIHRoYXQgcmVmZXJlbmNlcwotICAgKiBhIG1lc3NhZ2UgdGhhdCBoYXZlIHRoZSBxdWFsaWZpZWQgbmFtZSBzcGVjaWZpZWQuCi0gICAqIEBwYXJhbSBlbGVtIGFuIGVsZW1lbnQgdG8gYmUgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGFuIGVsZW1lbnQgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiByZWZlcmVuY2VzTWVzc2FnZShFbGVtZW50IGVsZW0sIFFOYW1lIG1lc3NhZ2VOYW1lKQotICB7Ci0gICAgLy8gR2V0dGluZyB0aGUgZWxlbWVudCdzIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgU3RyaW5nIG1lc3NhZ2UgPSBlbGVtLmdldEF0dHJpYnV0ZSgibWVzc2FnZSIpOwotICAgIC8vIGZpbmRpbmcgdGhlIGNvbG9uIGRlbGltaXRlcgotICAgIGludCBjb2xvblBvcyA9IG1lc3NhZ2UuaW5kZXhPZigiOiIpOwotICAgIFN0cmluZyBucyA9IG51bGw7Ci0gICAgLy8gR2V0dGluZyBhIGxvY2FsIHBhcnQKLSAgICBTdHJpbmcgbHAgPSBjb2xvblBvcyA+IC0xID8gbWVzc2FnZS5zdWJzdHJpbmcoY29sb25Qb3MgKyAxKSA6IG1lc3NhZ2U7Ci0gICAgLy8gSWYgdGhlIGRlbGltaXRlciBpcyBmb3VuZAotICAgIGlmIChjb2xvblBvcyA+IC0xKQotICAgIHsKLSAgICAgIC8vIFJldHJpZXZpbmcgYSBuYW1lc3BhY2UgVVJJCi0gICAgICBucyA9IHZhbGlkYXRvci53c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKQotICAgICAgICAuZ2V0TmFtZXNwYWNlKG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKSk7Ci0gICAgfQotICAgIC8vIElmIHRoZSBsb2NhbCBwYXJ0IGFuZCB0aGUgbmFtZXNwYWNlIFVSSSBhcmUgdGhlIHNhbWUgYXMgYSBtZXNzYWdlIGhhdmUKLSAgICBpZiAobWVzc2FnZU5hbWUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGxwKQotICAgICAgJiYgbWVzc2FnZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKG5zKSkKLSAgICB7Ci0gICAgICAvLyBlbGVtZW50IGlzIHZhbGlkLCByZXR1cm4gdHJ1ZQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIGVsZW1lbnQgaXMgbm90IHZhbGlkLCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZmluZEFsbEhlYWRlckZhdWx0cyhCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCkKLSAgewotICAgIExpc3QgaGVhZGVyRmF1bHRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChiaW5kaW5nT3AgPT0gbnVsbCkKLSAgICAgIHJldHVybiBoZWFkZXJGYXVsdHM7Ci0gICAgTGlzdCBpb0VsZW1lbnRzID0gYmluZGluZ09wLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlvRWxlbWVudHMuYWRkQWxsKGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW9FbGVtZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpb0VsZW1lbnRzLmdldChpKTsKLSAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfU09BUF9IRUFERVIpKSB7Ci0gICAgICAgIExpc3Qgc2hmTGlzdCA9ICgoU09BUEhlYWRlcikgZXh0RWxlbSkuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNoZkxpc3Quc2l6ZSgpOyBqKyspCi0gICAgICAgICAgaGVhZGVyRmF1bHRzLmFkZCgoKFNPQVBIZWFkZXJGYXVsdCkgc2hmTGlzdC5nZXQoaikpLmdldFBhcnQoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICghZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfQk9EWSkpIHsKLSAgICAgICAgTGlzdCBlbExpc3QgPSBnZXRIZWFkZXJGYXVsdHMoKAotICAgICAgICAgICAgICAgICAgKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbSkuZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbExpc3Quc2l6ZSgpOyBqKyspCi0gICAgICAgICAgaGVhZGVyRmF1bHRzLmFkZCgoKEVsZW1lbnQpZWxMaXN0LmdldChqKSkuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGVhZGVyRmF1bHRzOwotICB9Ci0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIGVsZW1lbnQncyBjaGlsZCBlbGVtZW50cyBvZiB0aGUgc29hcDpoZWFkZXJmYXVsdCB0eXBlLgotICAgKiBAcGFyYW0gZWxlbWVudCBhbiBlbGVtZW50IHRoYXQgY2FuIGhhdmUgc29hcDpoZWFkZXJmYXVsdCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBzb2FwOmhlYWRlcmZhdWx0IGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldEhlYWRlckZhdWx0cyhFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBMaXN0IGhlYWRlckZhdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGhlYWRlcidzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLSAgICAgIHdoaWxlIChjaGlsZCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpoZWFkZXJmYXVsdAotICAgICAgICBpZiAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTRExfU09BUF9IRUFERVJGQVVMVC5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAmJiBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUkZBVUxULmdldExvY2FsUGFydCgpKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgY2hpbGQgdG8gdGhlIGxpc3QKLSAgICAgICAgICBoZWFkZXJGYXVsdHMuYWRkKGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGhlYWRlcidzIGNoaWxkCi0gICAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGVhZGVyRmF1bHRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0NC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0NC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTkzYTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDI5NDQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkluIGEgREVTQ1JJUFRJT04sIGlmIGEgd3NkbDpwYXJ0IGVsZW1lbnQgcmVmZXJzIHRvIGEKLSAqIGdsb2JhbCBlbGVtZW50IGRlY2xhcmF0aW9uICh2aWEgdGhlIGVsZW1lbnQgYXR0cmlidXRlIG9mIHRoZSB3c2RsOnBhcnQgZWxlbWVudCkKLSAqIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBhIG1pbWU6Y29udGVudCBlbGVtZW50IHRoYXQgYmluZHMgdGhhdCBwYXJ0Ci0gKiBpcyBhIGNvbnRlbnQgdHlwZSBzdWl0YWJsZSBmb3IgY2FycnlpbmcgYW4gWE1MIHNlcmlhbGl6YXRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjk0NCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gIC8vIHRoYXQgYmluZCB3c2RsOnBhcnRTIGRlZmluZWQgd2l0aCB0aGUgZWxlbWVudCBhdHRyaWJ1dGUKLSAgcHJpdmF0ZSBib29sZWFuIG1pbWVDb250ZW50Rm91bmQ7Ci0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVzZXR0aW5nIHRoZSB2YXJpYWJsZQotICAgIG1pbWVDb250ZW50Rm91bmQgPSBmYWxzZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE1pbWVDb250ZW50cyA9IGdldE1pbWVDb250ZW50RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJbnB1dCBwb3J0VHlwZUlucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpOwotICAgICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6aW5wdXQgZXhpc3RzIGluIHdzZGw6cG9ydFR5cGUKLSAgICAgICAgICAvLyBhbmQgaW5jbHVkZXMgdGhlIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgIT0gbnVsbCAmJiBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQKLSAgICAgICAgICAgIE1JTUVDb250ZW50IGltYyA9IGdldEludmFsaWRNaW1lQ29udGVudCgKLSAgICAgICAgICAgICAgICBpbnB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgaWYgKGltYyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG1pbWU6Y29udGVudCBlbGVtZW50IGluICIKLSAgICAgICAgICAgICAgICArICJ0aGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkKLSAgICAgICAgICAgICAgICArICJcIiB0aGF0IGJpbmRzIHRoZSBcIiIgKyBpbWMuZ2V0UGFydCgpCi0gICAgICAgICAgICAgICAgKyAiXCIgd3NkbDpwYXJ0IHVzZXMgdGhlIGludmFsaWQgY29udGVudCB0eXBlIFwiIgotICAgICAgICAgICAgICAgICsgaW1jLmdldFR5cGUoKSArICJcIi4gIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBPdXRwdXQgcG9ydFR5cGVPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpOwotICAgICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgICAgLy8gYW5kIGluY2x1ZGVzIHRoZSBtZXNzYWdlIGF0dHJpYnV0ZQotICAgICAgICAgIGlmIChwb3J0VHlwZU91dHB1dCAhPSBudWxsICYmIHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQKLSAgICAgICAgICAgIE1JTUVDb250ZW50IGltYyA9IGdldEludmFsaWRNaW1lQ29udGVudCgKLSAgICAgICAgICAgICAgb3V0cHV0TWltZUNvbnRlbnRzLCBwb3J0VHlwZU91dHB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgaWYgKGltYyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG1pbWU6Y29udGVudCBlbGVtZW50IGluICIKLSAgICAgICAgICAgICAgICArICJ0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICAgICAgKyAiXCIgdGhhdCBiaW5kcyB0aGUgXCIiICsgaW1jLmdldFBhcnQoKQotICAgICAgICAgICAgICAgICsgIlwiIHdzZGw6cGFydCB1c2VzIHRoZSBpbnZhbGlkIGNvbnRlbnQgdHlwZSBcIiIKLSAgICAgICAgICAgICAgICArIGltYy5nZXRUeXBlKCkgKyAiXCIuICIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gSWYgbWltZTpjb250ZW50IGVsZW1lbnRzIGFyZSBub3QgZm91bmQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIW1pbWVDb250ZW50Rm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBhbnkgbWltZTpjb250ZW50IGVsZW1lbnQgYmluZHMgd3NkbDpwYXJ0IHRoYXQgaXMgZGVmaW5lZAotICAgKiB3aXRoIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBhbmQgdXNlcyB0aGUgY29udGVudCB0eXBlICJ0ZXh0L3htbCIuCi0gICAqIEBwYXJhbSBtaW1lQ29udGVudHMgYSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBvZiBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDptZXNzYWdlIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBtaW1lOmNvbnRlbnQgZWxlbWVudCB0aGF0IHVzZXMgYSBjb250ZW50IHR5cGUgb3RoZXIgdGhhbgotICAgKiAidGV4dC94bWwiLCBudWxsIGlmIG5vIG9uZSBzdWNoIGVsZW1lbnQgaXMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIE1JTUVDb250ZW50IGdldEludmFsaWRNaW1lQ29udGVudChMaXN0IG1pbWVDb250ZW50cywgTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lQ29udGVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgTUlNRUNvbnRlbnQgbWltZUNvbnRlbnQgPSAoTUlNRUNvbnRlbnQpIG1pbWVDb250ZW50cy5nZXQoaSk7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6cGFydAotICAgICAgUGFydCBwYXJ0ID0gbWVzc2FnZS5nZXRQYXJ0KG1pbWVDb250ZW50LmdldFBhcnQoKSk7Ci0gICAgICAvLyBJZiB0aGUgcGFydCBpcyBkZWZpbmVkIHdpdGggdGhlIGVsZW1lbnQgYXR0cmlidXRlCi0gICAgICBpZiAocGFydCAhPSBudWxsICYmIHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtaW1lQ29udGVudEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgLy8gSWYgdGhlIHR5cGUgYXR0cmlidXRlIHZhbHVlIGlzIG90aGVyIHRoYW4gInRleHQveG1sIgotICAgICAgICBpZiAoIVdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwuZXF1YWxzKG1pbWVDb250ZW50LmdldFR5cGUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyByZXR1cm4gdGhlIGludmFsaWQgZWxlbWVudAotICAgICAgICAgIHJldHVybiBtaW1lQ29udGVudDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU1NTczOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQ2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTQ2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyAgd2l0aCBhdCBsZWFzdCBvbmUgbWltZTpjb250ZW50IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SW4gYSBERVNDUklQVElPTiwgYSBtaW1lOmNvbnRlbnQgZWxlbWVudAotICogaW5jbHVkZXMgdGhlIHBhcnQgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5NDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDYoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZUNvbnRlbnRzID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpjb250ZW50IHRoYXQgZG9lcyBub3QgaW5jbHVkZQotICAgICAgICAgIC8vIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoaGFzSW52YWxpZE1pbWVDb250ZW50KGlucHV0TWltZUNvbnRlbnRzKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOmNvbnRlbnQgZWxlbWVudCIKLSAgICAgICAgICAgICAgKyAiIGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpjb250ZW50IHRoYXQgZG9lcyBub3QgaW5jbHVkZQotICAgICAgICAgIC8vIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoaGFzSW52YWxpZE1pbWVDb250ZW50KG91dHB1dE1pbWVDb250ZW50cykpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQiCi0gICAgICAgICAgICAgICsgIiBpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICAgICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGNvbnRhaW5zIG5vIG1pbWU6Y29udGVudCBlbGVtZW50cywKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghbWltZUNvbnRlbnRzRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gbWltZUNvbnRlbnRzIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhbnkgbWltZTpjb250ZW50IGRvZXMgbm90IGluY2x1ZGUgdGhlIHBhcnQgYXR0cmlidXRlLAotICAgKiBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNJbnZhbGlkTWltZUNvbnRlbnQoTGlzdCBtaW1lQ29udGVudHMpCi0gIHsKLSAgICAvLyBHb2luZyB0aHJvdWdoIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbWVDb250ZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBJZiBhIG1pbWU6Y29udGVudCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgcmV0dXJuIHRydWUKLSAgICAgIGlmICgoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIFRoZXJlIGFyZSBubyBpbnZhbGlkIG1pbWU6Y29udGVudFMsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE1MTkzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotKiBCUDIwMTAuCi0qICJOYW1lIiBhdHRyaWJ1dGVzIG9mIE9wZXJhdGlvbnMgYXJlIHVuaXF1ZSBhY3Jvc3MgdGhlIHdzZGw6cG9ydFR5cGUgZGVmaW5pdGlvbiAKLSoKLSogQHZlcnNpb24gMS4wLjEgMjcuMDYuMjAwMwotKiBAYXV0aG9yIFZpdGFsaSBGZWRvc2Vua28KLSoqLwotcHVibGljIGNsYXNzIEJQMjAxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIEdldCB0aGUgcG9ydFR5cGUgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gQ2hlY2sgdGhlIG9wZXJhdGlvbnMgbmFtZXMgZm9yIHVuaXF1ZW5lc3Mgd2l0aGluIHRoZSBjYW5kaWRhdGUgUG9ydCBUeXBlIGluIHRoZSBXU0RMIAotICAgIEl0ZXJhdG9yIG9wczsKLSAgICBIYXNoU2V0IG5hbWVzU2VlbiA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgSGFzaFNldCBkdXBsaWNhdGVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBMaXN0IG9wc0xpc3QgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICBpZiAob3BzTGlzdCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAvLyBubyBvcGVyYXRpb25zIGZvdW5kIGluIHBvcnRUeXBlCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wcyA9IG9wc0xpc3QuaXRlcmF0b3IoKTsgLy8gd2lsbCB1c2UgQ2FuZGlkYXRlLmdldE9wZXJhdGlvbnMoKQotICAgICAgICB3aGlsZSAob3BzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIE9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wcy5uZXh0KCk7Ci0gICAgICAgICAgU3RyaW5nIG9wTmFtZSA9IG9wLmdldE5hbWUoKTsKLSAgICAgICAgICBpZiAobmFtZXNTZWVuLmNvbnRhaW5zKG9wTmFtZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZHVwbGljYXRlcy5hZGQob3BOYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzU2Vlbi5hZGQob3BOYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFkdXBsaWNhdGVzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGZhaWxJbmZvID0KLSAgICAgICAgICBuZXcgU3RyaW5nQnVmZmVyKAotICAgICAgICAgICAgIkR1cGxpY2F0ZSBvcGVyYXRpb24gbmFtZXMgaW4gcG9ydFR5cGUgIgotICAgICAgICAgICAgICArIHBvcnRUeXBlLmdldFFOYW1lKCkKLSAgICAgICAgICAgICAgKyAiOiAiKTsKLSAgICAgICAgSXRlcmF0b3IgaSA9IGR1cGxpY2F0ZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgZmFpbEluZm8uYXBwZW5kKChTdHJpbmcpIGkubmV4dCgpICsgIjsgIik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oZmFpbEluZm8udG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgIHsgLy8gPz8gbm8gb3BlcmF0aW9ucyBmb3VuZCwgYnV0IGRvZXMgbm90IGZhaWwgdGhlIGFzc2VydGlvbi4KLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0LCBwb3J0VHlwZSk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzFlMDU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjAxMS4KLSAqIFRoZSBpbXBvcnRlZCBYTUwgc2NoZW1hIGlzIGEgd2VsbC1mb3JtZWQgWE1MIDEuMCBkb2N1bWVudCBhbmQgaWYgaXQgY29udGFpbnMgYW4gCi0gKiBYTUwgZGVjbGFyYXRpb24sIGl0IGlzIHZlcnNpb24gMS4wLiAKLSAqCi0gKiBAdmVyc2lvbiAxLjAuMSAyNy4wNi4yMDAzCi0gKiBAYXV0aG9yIFZpdGFsaSBGZWRvc2Vua28KLSoqLwotcHVibGljIGNsYXNzIEJQMjAxMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIHByaXZhdGUgZmluYWwgY2hhcltdIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMgPQotICAgIG5ldyBjaGFyW10geyAweDIwLCAweDksIDB4RCwgMHhBLCAnXCcnLCAnXCInIH07Ci0gIHByaXZhdGUgZmluYWwgY2hhcltdIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXSB7ICc9JyB9OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBWRVJTSU9OX1RPS0VOID0gInZlcnNpb24iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBWRVJTSU9OID0gIjEuMCI7Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICAvL0RlZmluaXRpb24gZGVmID0gKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICBMaXN0IGV4dHMgPSBudWxsOwotICAgIC8vaWYgKGRlZi5nZXRUeXBlcygpIT1udWxsKQotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGV4dHMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgaWYgKGV4dHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgICAgaWYgKChkZWZpbml0aW9uID0KLSAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbih0eXBlcykpCi0gICAgICAgID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBmaW5kIHR5cGVzIGRlZmluaXRpb24gaW4gYW55IFdTREwgZG9jdW1lbnQuIik7Ci0gICAgICB9Ci0KLSAgICAgIEl0ZXJhdG9yIGl0ID0gZXh0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICAgIHNlYXJjaEZvclNjaGVtYSgoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZWwpLmdldEVsZW1lbnQoKSwKLSAgICAgICAgICAgICAgZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgbmV3IEFycmF5TGlzdCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9IC8qZWxzZQotICAgICAgICAgCQkJcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ki8KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBuIC0gVW5rbm93bkV4dGVuY2liaWxpdHlFbGVtZW50Ci0gICovCi0gIHByaXZhdGUgdm9pZCBzZWFyY2hGb3JTY2hlbWEoTm9kZSBuLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0gICAgaWYgKChuIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKG4pKSkKLSAgICB7Ci0gICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBzZWFyY2hlcyBmb3IgeHNkOmltcG9ydCBlbGVtZW50Ci0gICAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgICBwcm9jZXNzU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIC8vIGlmIHhzZDppbXBvcnQgZWxlbWVudCBpcyBmb3VuZCAtPiBsb2FkIHNjaGVtYSBhbmQgcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICAgIC8vIEZJWEVEOiBpZiB4c2Q6aW1wb3J0IGlzIGZvdW5kIGFuZCBwYXJlbnQgZWxlbWVudCBpcyB4c2Q6c2NoZW1hCi0gICAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkKLSAgICAgICAgICAgICAgJiYgWE1MVXRpbHMuZXF1YWxzKG4uZ2V0UGFyZW50Tm9kZSgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgICBsb2FkU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAvLyBlbHNlIGl0ZXJhdGUgZWxlbWVudCByZWN1cnNpdmVseQotICAgICAgICAgICAgICBzZWFyY2hGb3JTY2hlbWEobi5nZXRGaXJzdENoaWxkKCksIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogSXQgbG9hZHMgeHNkIHNjaGVtYSBhbmQgdGhlbiBjaGVjayB0aGUgdmVyc2lvbiAxLjAgYW5kIGxvb2tpbmcgZm9yIHhzZDpzY2hlbWEgZWxlbWVudCBmb3IgbmV4dCBwcm9jZXNzLgotICAgKiBAcGFyYW0gaW1wb3J0Tm9kZSB4c2Qgc2NoZW1hCi0gICovCi0gIHByaXZhdGUgdm9pZCBsb2FkU2NoZW1hKE5vZGUgaW1wb3J0Tm9kZSwgU3RyaW5nIGNvbnRleHQsIExpc3QgcHJvY2Vzc2VkU2NoZW1hcykKLSAgewotICAgIEVsZW1lbnQgaW0gPSAoRWxlbWVudCkgaW1wb3J0Tm9kZTsKLSAgICBBdHRyIHNjaGVtYUxvY2F0aW9uID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gICAgLy8gdHJ5IHRvIHBhcnNlIGltcG9ydGVkIFhTRAotICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAgICAgICBTdHJpbmcgZGVjbCA9Ci0gICAgICAgICAgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpOwotICAgICAgICBpZiAoIXZhbGlkVmVyc2lvbihkZWNsKSkKLSAgICAgICAgewotICAgICAgICAgIEF0dHIgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfTkFNRVNQQUNFKTsKLSAgICAgICAgICBlcnJvcnMuYWRkKChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiIpOwotICAgICAgICB9Ci0gICAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gICAgICAgICAgdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0gICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMoc2NoZW1hLmdldERvY3VtZW50RWxlbWVudCgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc1NjaGVtYShzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICBYTUxVdGlscy5jcmVhdGVVUkxTdHJpbmcoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCksIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICAvLyBlbHNlIGlmIHRoZXJlIGlzIG9ubHkgdGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUsIHRoZSBpbXBvcnQgcmVsYXRlcyB0byBpbmxpbmUgc2NoZW1hCi0gICAgZWxzZSBpZiAoWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9OQU1FU1BBQ0UpICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmVhZHMgYW4gWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4KLSAgKiBAcGFyYW0gbG9jYXRpb24KLSAgKiBAcmV0dXJuIFN0cmluZwotICAqLwotICBwcml2YXRlIFN0cmluZyByZWFkWE1MRGVjbGFyYXRpb25TdGF0ZW1lbnQoU3RyaW5nIGxvY2F0aW9uLCBTdHJpbmcgYmFzZVVSSSkKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIG5ldyBVUkwobG9jYXRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgLy8gbm90aGluZwotICAgICAgaW50IGkgPSBiYXNlVVJJLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgICBpbnQgaiA9IGJhc2VVUkkubGFzdEluZGV4T2YoJ1xcJyk7Ci0gICAgICBpZiAoaiA+IGkpCi0gICAgICAgIGkgPSBqOwotICAgICAgbG9jYXRpb24gPSBiYXNlVVJJLnN1YnN0cmluZygwLCBpICsgMSkgKyBsb2NhdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBVUkwgdXJsID0gbnVsbDsKLSAgICAgIFJlYWRlciByZWFkZXIgPSBudWxsOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3ZSBzaG91bGQgdHJ5IHRvIGFjY2VzcyBsb2NhdGlvbiBhcyBmaWxlCi0gICAgICAgIH0KLQotICAgICAgICBpZiAodXJsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIodXJsLm9wZW5TdHJlYW0oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0obG9jYXRpb24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBjaGFyQ29kZTsKLSAgICAgICAgYm9vbGVhbiBlbmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHJlYWRlci5yZWFkeSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2hhckNvZGUgPSByZWFkZXIucmVhZCgpOwotCi0gICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICEoY2hhckNvZGUgPT0gJzwnKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gJzwnKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKGNoYXIpIGNoYXJDb2RlKTsKLSAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucmVhZHkoKSAmJiAhZW5kKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKGNoYXIpIGNoYXJDb2RlKTsKLQotICAgICAgICAgICAgICBlbmQgPSBjaGFyQ29kZSA9PSAnPic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlc3VsdCBkb2VzIG5vdCBnZXQgcHJvcG9nYXRlZCBiYWNrIQotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgICAgICJDYW5ub3QgcmVhZCB0aGUgWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4iOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIGlmIChyZWFkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKgotICAgKiBAcGFyYW0geG1sRGVjbCAtIHhtbCBkZWNsYXJhdGlvbgotICAgKiBAcmV0dXJuIGlmIHhtbCBkZWNsYXJhdGlvbiBjb250YWlucyB2ZXJzaW9uPSIxLjAiIGl0IHJldGlybnMgdHJ1ZS4gCi0gICovCi0gIHByaXZhdGUgYm9vbGVhbiB2YWxpZFZlcnNpb24oU3RyaW5nIHhtbERlY2wpCi0gIHsKLSAgICAvL2Jvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIGlmICh4bWxEZWNsICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcigKLSAgICAgICAgICBPTU1JVEVEX1hNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTLAotICAgICAgICAgIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTKTsKLSAgICAgIEVudW1lcmF0aW9uIHRva2VucyA9IHN0LnBhcnNlKHhtbERlY2wpOwotICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotICAgICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotCi0gICAgICAgIGlmICh0b2tlbi5lcXVhbHNJZ25vcmVDYXNlKFZFUlNJT05fVE9LRU4pKQotICAgICAgICB7Ci0gICAgICAgICAgZm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgU3RyaW5nIHZlciA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotCi0gICAgICAgICAgcmVzdWx0ID0gVkVSU0lPTi5lcXVhbHModmVyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKgotICAgKiBJdCdzIGxva2luZyBmb3IgeHNkIGltcG9ydCBhbmQgbG9hZCBpdCBpZiBmaW5kLgotICAgKiBAcGFyYW0gc2NoZW1hIHhzZCBzY2hlbWEKLSAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NTY2hlbWEoTm9kZSBzY2hlbWEsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKHNjaGVtYSAhPSBudWxsKSAmJiAoIXByb2Nlc3NlZFNjaGVtYXMuY29udGFpbnMoc2NoZW1hKSkpCi0JewotCSAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIE5vZGUgbiA9IHNjaGVtYS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpCi0gICAgICAgICAgJiYgWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgbG9hZFNjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgfQotCX0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEzM2MxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDEyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsLkJpbmRpbmdNYXRjaDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAgKiBCUDIwMTIuCi0gICogRXhhbXBsZToKLSAgKiAKLSAgKiA8bWVzc2FnZSBuYW1lPSJnZXRDb25maWd1cmF0aW9uT3B0aW9uc1JlcXVlc3QiPgotICAqIAk8cGFydCBuYW1lPSJyZWZyZXNoIiBlbGVtZW50PSJjZmc6cmVmcmVzaCIgLz4gCi0gICogPC9tZXNzYWdlPgotICAqIDxwb3J0VHlwZSBuYW1lPSJDb25maWd1cmF0b3JQb3J0VHlwZSI+Ci0gICogCTxvcGVyYXRpb24gbmFtZT0iZ2V0Q29uZmlndXJhdGlvbk9wdGlvbnMiPgotICAqIAkJPGlucHV0IG1lc3NhZ2U9InRuczpnZXRDb25maWd1cmF0aW9uT3B0aW9uc1JlcXVlc3QiIC8+IAotICAqIAkJPG91dHB1dCAuLi4uLiAvPiAKLSAgKiAJCTxmYXVsdCAuLi4uLiAvPiAKLSAgKiAJPC9vcGVyYXRpb24+Ci0gICogPC9wb3J0VHlwZT4KLSAgKiA8YmluZGluZyBuYW1lPSJDb25maWd1cmF0b3JCaW5kaW5nIiB0eXBlPSJ0bnM6Q29uZmlndXJhdG9yUG9ydFR5cGUiPgotICAqIAk8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0iZG9jdW1lbnQiIC8+IAotICAqIAk8b3BlcmF0aW9uIG5hbWU9ImdldENvbmZpZ3VyYXRpb25PcHRpb25zIj4KLSAgKgkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuenp6LmNvbS96enoud3NkbC9nZXRDb25maWd1cmF0aW9uT3B0aW9ucyIgLz4gCi0gICogCQk8aW5wdXQ+Ci0gICogCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy56enouY29tL3p6ei53c2RsIiAvPiAKLSAgKiAJCTwvaW5wdXQ+Ci0gICogCQk8b3V0cHV0Pi4uLi4uPC9vdXRwdXQ+Ci0gICoJCTxmYXVsdD4uLi4uLi48L2ZhdWx0PgotICAqIAk8L29wZXJhdGlvbj4KLSAgKiA8L2JpbmRpbmc+Ci0gICogCi0gICogQWJvdmUsIHRoZSB0ZXN0IGZvciB0aGlzIGFzc2VydGlvbiBtaWdodCBiZSB0aGF0IHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgaW4gdGhlICJyZWZyZXNoIiAKLSAgKiBwYXJ0IG9mIHRoZSBnZXRDb25maWd1cmF0aW9uT3B0aW9uc1JlcXVlc3QgbWVzc2FnZS4gCi0gICogCi0gICogQ29udGV4dCA6IGZvciA8YmluZGluZz4gIkNvbmZpZ3VyYXRvckJpbmRpbmciLCA8c29hcDpiaW5kaW5nPiBzdHlsZT1kb2N1bWVudDsgPHNvYXA6Ym9keT4gdXNlPWxpdGVyYWwKLSAgKiBmb3IgdGhlIDxpbnB1dD4gb2YgYmluZGluZyBvcGVyYXRpb24gImdldENvbmZpZ3VyYXRpb25PcHRpb25zIi4gCi0gICogKDxpbnB1dD4gaXMgYW4gZXhhbXBsZS4gQ291bGQgYmUgPG91dHB1dD4gb3IgPGZhdWx0PiBlcXVhbGx5KS4KLSAgKiBBY3Rpb246IGNoZWNrIHRoZSBwYXJ0KHMpIG9mIHRoZSBtZXNzYWdlIHNwZWNpZmllZCBpbiB0aGUgPGlucHV0PiBlbGVtZW50IChpbiBleGFtcGxlKSBvZiB0aGUgPHBvcnRUeXBlPiwKLSAgKiBuYW1lbHkgdG5zOmdldENvbmZpZ3VyYXRpb25PcHRpb25zUmVxdWVzdCwgdGhhdCB0aGUgZWxlbWVudCBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZQotICAqIDxwYXJ0IG5hbWU9InJlZnJlc2giIGVsZW1lbnQ9ImNmZzpyZWZyZXNoIiAvPiwgc28gdGhlIHRlc3QgcGFzc2VzLgotICAqIEFsbCBzdWNoIHBhcnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzZXJ0aW9uIGNhbmRpZGF0ZSBiaW5kaW5nKHMpIG11c3QgYmUgc2ltaWxhcmx5IGNoZWNrZWQgZm9yIHRoaXMgYXNzZXJ0aW9uCi0gICogdG8gcGFzcy4KLSAgKi8KLXB1YmxpYyBjbGFzcyBCUDIwMTIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMTIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBiaW5kaW5nIGZyb20gZW50cnkgY29udGV4dAotCi0gICAgLy8gT2xlZydzICYgR3JhaGFtJ3MgdmVyc2lvbjoKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIHRvIHVzZSBvcmlnaW5hbCB2ZXJzaW9uIHJlcXVpcmUgYSBiaW5kaW5nIGFycmF5Ci0gICAgLy9CaW5kaW5nW10gYmluZGluZyA9IHsoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKX07Ci0KLSAgICAvLyBnZXQgbGlzdCBvZiBjYW5kaWRhdGUgbWF0Y2hlcwotICAgIEJpbmRpbmdNYXRjaFtdIGJpbmRpbmdNYXRjaCA9Ci0gICAgICB0aGlzLnZhbGlkYXRvci5nZXRCaW5kaW5nTWF0Y2hlcygKLSAgICAgICAgYmluZGluZywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpOwotICAgIGlmIChiaW5kaW5nTWF0Y2gubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VJbnB1dCIsICJ1c2VFbGVtZW50IikKLSAgICAgICAgICB8fCAhdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VPdXRwdXQiLCAidXNlRWxlbWVudCIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oImRpYWdub3N0aWM6IGludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IhIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQsIGJpbmRpbmcpOwotICAgICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTNhMzc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbC5XU0RMVmFsaWRhdG9ySW1wbC5CaW5kaW5nTWF0Y2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDIwMTMuCi0gKiBUaGUgYmluZGluZyAoaW4gc29hcGJpbmQ6Ym9keSBlbGVtZW50cykgb25seSByZWZlcnMgdG8gcGFydCBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nIHRoZSAidHlwZSIgYXR0cmlidXRlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xIDI3LjA2LjIwMDMKLSAqIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotICovCi1wdWJsaWMgY2xhc3MgQlAyMDEzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDEzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBiaW5kaW5nIGZyb20gZW50cnkgY29udGV4dAotCi0gICAgLy8gT2xlZydzICYgR3JhaGFtJ3MgdmVyc2lvbjoKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIHRvIHVzZSBvcmlnaW5hbCB2ZXJzaW9uIHJlcXVpcmUgYSBiaW5kaW5nIGFycmF5Ci0gICAgLy9CaW5kaW5nW10gYmluZGluZyA9IHsoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKX07Ci0KLSAgICAvLyBnZXQgbGlzdCBvZiBjYW5kaWRhdGUgbWF0Y2hlcwotICAgIEJpbmRpbmdNYXRjaFtdIGJpbmRpbmdNYXRjaCA9Ci0gICAgICB0aGlzLnZhbGlkYXRvci5nZXRCaW5kaW5nTWF0Y2hlcygKLSAgICAgICAgYmluZGluZywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpOwotICAgIGlmIChiaW5kaW5nTWF0Y2gubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VJbnB1dCIsICJ1c2VUeXBlIikKLSAgICAgICAgICB8fCAhdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VPdXRwdXQiLCAidXNlVHlwZSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oImRpYWdub3N0aWM6IGludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IhIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQsIGJpbmRpbmcpOwotICAgICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzEwODg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIwMTQuCi0gKiBDb250ZXh0OgotICogRm9yIGEgY2FuZGlkYXRlIHdzZGw6b3BlcmF0aW9uLCBpZiByZWZlcnJlZCB0byBieSBhIGNhbmRpZGF0ZSBycGMtbGl0ZXJhbCB3c2RsOmJpbmRpbmcgZWxlbWVudAotICogSWYgdGhlIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZSBpcyBwcmVzZW50LCBpdCBvbWl0cyBhdCBtb3N0IDEgcGFydCBmcm9tIG91dHB1dCB3c2RsOm1lc3NhZ2UuCi0gKiovCi1wdWJsaWMgY2xhc3MgQlAyMDE0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qCi0gICAqIEBwYXJhbSBiaW5kaW5nIC0gYmluZGluZwotICAgKiBAcmV0dXJuIEl0IHJldHVybnMgc3R5bGUgb2Ygc29hcCBiaW5kaW5nIG9mIGJpbmRpbmcuIElmIHN0eWxlIG9taXR0ZWQgcmV0dXJucyAiZG9jdW1lbnQiIHN0eWxlLiAgIAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0U09BUEJpbmRpbmdTdHlsZShCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBudWxsOwotICAgIExpc3QgbGlzdCA9IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmIChsaXN0LmdldChpKSBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgewotICAgICAgICBzdHlsZSA9ICgoU09BUEJpbmRpbmcpIGxpc3QuZ2V0KGkpKS5nZXRTdHlsZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICBzdHlsZSA9IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0M7Ci0gICAgcmV0dXJuIHN0eWxlOwotICB9Ci0KLSAgLyoKLSAgICogQHBhcmFtIGxpc3QgLSBMaXN0IG9mIGV4dGVuY2liaWxpdHkgZWxlbWVudHMgZnJvbSBiaW5kaW5nIG91dHB1dAotICAgKiBAcmV0dXJuIGZpcnN0IHNvYXAgYm9keSBpbiBsaXN0LgotICAgKi8KLSAgcHJpdmF0ZSBTT0FQQm9keSBnZXRTT0FQQm9keShMaXN0IGxpc3QpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICBpZiAobGlzdC5nZXQoaSkgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgICAgcmV0dXJuIChTT0FQQm9keSkgbGlzdC5nZXQoaSk7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKgotICAgKiBAcGFyYW0gbGlzdCAtIExpc3Qgb2YgZXh0ZW5jaWJpbGl0eSBlbGVtZW50cyBvZiBiaW5kaW5nIG9wZXJhdGlvbgotICAgKiBAcmV0dXJuIEZpcnN0IHNvYXAgb3BlcmF0aW9uIGluIGxpc3QuCi0gICAqLwotICBwcml2YXRlIFNPQVBPcGVyYXRpb24gZ2V0U09BUE9wZXJhdGlvbihMaXN0IGxpc3QpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICBpZiAobGlzdC5nZXQoaSkgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgICByZXR1cm4gKFNPQVBPcGVyYXRpb24pIGxpc3QuZ2V0KGkpOwotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyogICAgICAgICAgCi0gICAqIEBwYXJhbSBvcGVyIC0gb3BlcmF0aW9uCi0gICAqIEBwYXJhbSBiaW5kaW5nIC0gYmluZGluZwotICAgKiBAcmV0dXJuIGlmIHN0eWxlIG9mIHNvYXAgYmluZGluZyBvZiBiaW5kaW5nIGlzIHJwYyBhbmQgdXNlIG9mIHNvYXAgYm9keSBvZiBiaW5kaW5nIG91dHB1dCBvZiBiaW5kaW5nIG9wZXJhdGlvbiBpcyBsaXRlcmFsIHRoZW4gaXQgcmV0dXJucyB0cnVlLiAKLSAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUnBjTGl0ZXJhbChCaW5kaW5nT3BlcmF0aW9uIG9wZXIsIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIExpc3QgbGlzdCA9IG9wZXIuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgU09BUE9wZXJhdGlvbiBzb3AgPSBnZXRTT0FQT3BlcmF0aW9uKGxpc3QpOwotICAgIGlmIChzb3AgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKHNvcC5nZXRTdHlsZSgpID09IG51bGwKLSAgICAgICAgPyBnZXRTT0FQQmluZGluZ1N0eWxlKGJpbmRpbmcpCi0gICAgICAgIDogc29wLmdldFN0eWxlKCkpOwotICAgIGlmICghc3R5bGUuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGxpc3QgPSBvcGVyLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBTT0FQQm9keSBib2R5ID0gZ2V0U09BUEJvZHkobGlzdCk7Ci0gICAgaWYgKGJvZHkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgdXNlID0gYm9keS5nZXRVc2UoKTsKLSAgICBpZiAodXNlID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdXNlLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCk7Ci0gIH0KLQotICAvKiBJdCBjaGVja3Mgb3BlcmF0aW9uIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFydCBpbiBwYXJhbWV0ZXIgb3JkZXIgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCk7Ci0gICAgaWYgKG9iai5nZXRQYXJhbWV0ZXJPcmRlcmluZygpID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYmluZGluZ3MgPT0gbnVsbCB8fCBvYmogPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChvYmouZ2V0T3V0cHV0KCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChvYmouZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3IgZWFjaCBiaW5kaW5nCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBMaXN0IGxpc3QgPSBiaW5kaW5nc1tpXS5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgLy8gRm9yIGVhY2ggYmluZGluZyBvcGVyYXRpb24KLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGlzdC5zaXplKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBvcGVyID0gKEJpbmRpbmdPcGVyYXRpb24pIGxpc3QuZ2V0KGopOwotCi0gICAgICAgIC8vIElmIHRoZSBpbnB1dCBvcGVyYXRpb24gbmFtZSBhbmQgYmluZGluZyBvcGVyYXRpbm8gbmFtZSBhcmUgbm90IG51bGwKLSAgICAgICAgaWYgKG9iai5nZXROYW1lKCkgIT0gbnVsbCAmJiBvcGVyLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSWYgdGhlIG9wZXJhdGlvbiBuYW1lcyBhcmUgZXF1YWwKLSAgICAgICAgICBpZiAob2JqLmdldE5hbWUoKS5lcXVhbHMob3Blci5nZXROYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBvcGVyYXRpb24gaXMgUlBDIGxpdGVyYWwKLSAgICAgICAgICAgIGlmIChjaGVja1JwY0xpdGVyYWwob3BlciwgYmluZGluZ3NbaV0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcGFydHMgaW4gdGhlIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZQkJCQkKLSAgICAgICAgICAgICAgTGlzdCBwYXJ0cyA9IG9iai5nZXRQYXJhbWV0ZXJPcmRlcmluZygpOwotCi0gICAgICAgICAgICAgIE91dHB1dCBvdXRwdXQgPSBudWxsOwotICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotICAgICAgICAgICAgICBNYXAgbWVzc2FnZVBhcnRzID0gbnVsbDsKLQotICAgICAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcGFydHMgZm9yIHRoZSBvdXRwdXQgbWVzc2FnZQotICAgICAgICAgICAgICBpZiAoKG91dHB1dCA9IG9iai5nZXRPdXRwdXQoKSkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgobWVzc2FnZSA9IG91dHB1dC5nZXRNZXNzYWdlKCkpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbWVzc2FnZVBhcnRzID0gbWVzc2FnZS5nZXRQYXJ0cygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBwYXJ0cyBpbiB0aGUgcGFyYW1ldGVyT3JkZXIgYXR0cmlidXRlIAotICAgICAgICAgICAgICAvLyBhbmQgdGhlcmUgYXJlIG91dHB1dCBtZXNzYWdlIHBhcnRzLCB0aGVuIHByb2Nlc3MgYXNzZXJ0aW9uCi0gICAgICAgICAgICAgIGlmIChwYXJ0cyAhPSBudWxsICYmIG1lc3NhZ2VQYXJ0cyAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHBhcnRDb3VudCA9IDA7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgcGFydE5hbWU7Ci0gICAgICAgICAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gR2V0IHBhcnQgbmFtZSBmcm9tIHBhcmFtZXRlck9yZGVyIGxpc3QKLSAgICAgICAgICAgICAgICAgIHBhcnROYW1lID0gKFN0cmluZykgaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgICAgICAgICAvLyBDaGVjayBlYWNoIG91dHB1dCBtZXNzYWdlIHBhcnQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2gKLSAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlUGFydHMuY29udGFpbnNLZXkocGFydE5hbWUpKQotICAgICAgICAgICAgICAgICAgICBwYXJ0Q291bnQrKzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoKHBhcnRDb3VudCA9PSBtZXNzYWdlUGFydHMuc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgfHwgKHBhcnRDb3VudCA9PSBtZXNzYWdlUGFydHMuc2l6ZSgpIC0gMSkpCi0gICAgICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZChvYmouZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgIGN0eC5jYW5jZWxPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChwYXJ0cyA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChPcGVyYXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgZXJyb3JzLnRvU3RyaW5nKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotICAgIH0KLSAgICAvL2Vsc2UKLSAgICAvLyAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGY0NTkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjAxNy4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlICJzdHlsZSIgYXR0cmlidXRlIG9mIGVhY2ggb3BlcmF0aW9uIGluIHRoZSBjb250YWluZWQgc29hcDpiaW5kaW5nIGhhcyB0aGUgc2FtZSB2YWx1ZSBvZiAiZG9jdW1lbnQiIG9yICJycGMiLCBmb3IgYWxsIG9wZXJhdGlvbnMgb2YgdGhlIHdzZGw6YmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMDE3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDE3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vU3RyaW5nIGZpcnN0U3R5bGUgPSBudWxsOyAvLyBHVDogaXMgdGhpcyBuZWVkZWQ/PwotICAgIFZlY3RvciBmYWlsdXJlRGV0YWlsTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTGlzdCk7Ci0gICAgfQotICAgIFNPQVBCaW5kaW5nIHNvYXBCID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcEJpbmRpbmcoYmluZGluZyk7Ci0gICAgaWYgKHNvYXBCID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICAgIH0KLSAgICBTdHJpbmcgc3R5bGVCID0KLSAgICAgIChzb2FwQi5nZXRTdHlsZSgpID09IG51bGwKLSAgICAgICAgPyBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DCi0gICAgICAgIDogc29hcEIuZ2V0U3R5bGUoKSk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIG9wZXJhdGlvbnMKLSAgICBIYXNoTWFwIHNvYXBPcGVyYXRpb25MaXN0ID0gdmFsaWRhdG9yLmdldFNvYXBPcGVyYXRpb25zKGJpbmRpbmcpOwotCi0gICAgaWYgKHNvYXBPcGVyYXRpb25MaXN0LmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gY2hlY2sgdGhhdCB0aGV5IGFsbCBoYXZlIHRoZSBzYW1lIHN0eWxlIGVsZW1lbnQgdmFsdWUKLSAgICAgIFN0cmluZyBzdHlsZSA9IG51bGw7Ci0gICAgICBTdHJpbmcgY2hlY2tTdHlsZTsKLSAgICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbjsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc29hcE9wZXJhdGlvbkxpc3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgICBjaGVja1N0eWxlID0gc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgICAgICBpZiAoY2hlY2tTdHlsZSA9PSBudWxsKQotICAgICAgICAgIGNoZWNrU3R5bGUgPSBzdHlsZUI7Ci0gICAgICAgIGlmIChjaGVja1N0eWxlICE9IG51bGwKLSAgICAgICAgICAmJiAhY2hlY2tTdHlsZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQykKLSAgICAgICAgICAmJiAhY2hlY2tTdHlsZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQykpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoCi0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiT3BlcmF0aW9uIE5hbWU6ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb25MaXN0LmdldChzb2FwT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICsgIlxuU09BUCBPcGVyYXRpb246ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb24udG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICAgICAgICBzb2FwT3BlcmF0aW9uKSk7Ci0gICAgICAgICAgLy8gUkVNT1ZFOiBOZWVkIHRvIHByb2Nlc3MgYWxsIG9wZXJhdGlvbnMKLSAgICAgICAgICAvL2JyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzdHlsZSA9IGNoZWNrU3R5bGU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIXN0eWxlLmVxdWFscyhjaGVja1N0eWxlKSB8fCAhc3R5bGUuZXF1YWxzKHN0eWxlQikpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoCi0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiT3BlcmF0aW9uIE5hbWU6ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb25MaXN0LmdldChzb2FwT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICsgIlxuU09BUCBPcGVyYXRpb246ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb24udG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICAgICAgICBzb2FwT3BlcmF0aW9uKSk7Ci0gICAgICAgICAgLy8gUkVNT1ZFOiBOZWVkIHRvIHByb2Nlc3MgYWxsIG9wZXJhdGlvbnMKLSAgICAgICAgICAvL2JyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzdHlsZSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBubyBzdHlsZSBhdHRyaWJ1dGUgd2FzIGZvdW5kIGluIHRoZSBTT0FQIG9wZXJhdGlvbihzKSBvZiB0aGUgYmluZGluZy4KLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxMaXN0KTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ0NjdjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDE4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDIwMTguIAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIFdlYiBzZXJ2aWNlIGRlZmluaXRpb248L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6dHlwZXMgZWxlbWVudCBvY2N1cnMgZWl0aGVyIGFzIHRoZSBmaXJzdCBjaGlsZCBpbiB0aGUgV1NETCBuYW1lc3BhY2Ugb2YgdGhlIHdzZGw6ZGVmaW5pdGlvbnMgZWxlbWVudCBpZiBubyB3c2RsOmRvY3VtZW50YXRpb24gb3Igd3NkbDppbXBvcnQgZWxlbWVudCBpcyBwcmVzZW50OyBvciBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIHdzZGw6ZG9jdW1lbnRhdGlvbiBlbGVtZW50KHMpIGlmIHRoZXkgYXJlIHByZXNlbnQgYnV0IHdzZGw6aW1wb3J0KHMpIGFyZSBub3QsIG9yIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBib3RoIHRoZSB3c2RsOmRvY3VtZW50YXRpb24gYW5kIHdzZGw6aW1wb3J0IGVsZW1lbihzKSBpZiBwcmVzZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIwMTggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qCi0gICAqIEBwYXJhbSBlbCAtIHhtbCBlbGVtZW50Ci0gICAqIEByZXR1cm4gaWYgZWxlbWVudCBpcyBleHRlbnNpYmlsaXR5IGVsZW1lbnQgcmV0dXJucyB0cnVlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRWxlbWVudCBlbCkKLSAgewotICAgIGJvb2xlYW4gaXNFeCA9IHRydWU7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9CSU5ESU5HKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0RFRklOSVRJT05TKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0RPQ1VNRU5UQVRJT04pOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRkFVTFQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU1QT1JUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0lOUFVUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX01FU1NBR0UpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfT1BFUkFUSU9OKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX09VVFBVVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9QQVJUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1BPUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfUE9SVFRZUEUpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfU0VSVklDRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9UWVBFUyk7Ci0KLSAgICByZXR1cm4gaXNFeDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFBhcnNlIHRoZSBXU0RMIGRvY3VtZW50IGFzIGFuIFhNTCBmaWxlCi0gICAgICBEb2N1bWVudCBkb2MgPQotICAgICAgICB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBudWxsKTsKLQotICAgICAgRWxlbWVudCByb290ID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOyAvLyBnZXQgZGVmaW5pdGlvbgotCi0gICAgICBFbGVtZW50IHR5cGVzID0gWE1MVXRpbHMuZmluZENoaWxkRWxlbWVudCgoRWxlbWVudCkgcm9vdCwgV1NETF9UWVBFUyk7Ci0KLSAgICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBFbGVtZW50IGVsID0gWE1MVXRpbHMuZmluZFByZXZpb3VzU2libGluZyh0eXBlcyk7Ci0gICAgICAgIHdoaWxlIChlbCAhPSBudWxsKQotCQl7Ci0gICAgICAgICAgaWYgKCFpc0V4dGVuc2liaWxpdHlFbGVtZW50KGVsKSAmJgotCQkJICAgKCghWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0lNUE9SVCkpICYmCi0JCQkgICAgKCFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRE9DVU1FTlRBVElPTikpKSkKLQkJICB7Ci0JCSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQkJCVN0cmluZyBtZXNzYWdlID0gIlRoZSAiICsgZWwuZ2V0TG9jYWxOYW1lKCkgKyAiIGVsZW1lbnQgbXVzdCBub3QgcHJlY2VkZSB0aGUgdHlwZXMgZWxlbWVudC4iOwotCQkgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwobWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgCQkgICAgYnJlYWs7Ci0JCSAgfQotICAgICAgICAgIGVsID0gWE1MVXRpbHMuZmluZFByZXZpb3VzU2libGluZyhlbCk7Ci0JCX0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSBkb2N1bWVudCBhdCAiCi0gICAgICAgICAgICArIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCkKLSAgICAgICAgICAgICsgIi5cblxuIgotICAgICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKHQpLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE2NzBiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDE5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMjAxOS4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudCwgaWYgdGhlIGNvbnRhaW5lZCBzb2FwOmJpbmRpbmcgZWxlbWVudCBoYXMgYSAic3R5bGUiIGF0dHJpYnV0ZSBlcXVhbCB0byAiZG9jdW1lbnQiIGFuZCBzb2FwOm9wZXJhdGlvbnMgaGF2ZSAidXNlIiBhdHRyaWJ1dGUgZXF1YWwgdG8gImxpdGVyYWwiOjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgIm5hbWVzcGFjZSIgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgaW4gYW55IGNvbnRhaW5lZCBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOjpoZWFkZXJmYXVsdCwgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudHMgPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqIEB2ZXJzaW9uIDEuMC4xIDI3LjA2LjIwMDMKLSAqIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotICovCi1wdWJsaWMgY2xhc3MgQlAyMDE5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDE5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiBkb2NMaXRGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBlcnJhbnRFbGVtZW50cyA9IG5ldyBTdHJpbmcoIiIpOwotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIGJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFdTRExWYWxpZGF0b3JJbXBsLmdldFNvYXBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgaWYgKHNvYXBCaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHN0eWxlID0KLSAgICAgICAgKHNvYXBCaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbCkKLSAgICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgICA6IHNvYXBCaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgICBpZiAoc3R5bGUuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MpKQotICAgICAgewotICAgICAgICBWZWN0b3Igc29hcEVsZW1lbnRzID0gVXRpbHMuYXJyYXlUb1ZlY3Rvcih0aGlzLnZhbGlkYXRvci5nZXRTb2FwQm9kaWVzKGJpbmRpbmcpKTsKLSAgICAgICAgc29hcEVsZW1lbnRzLmFkZEFsbChVdGlscy5hcnJheVRvVmVjdG9yKHRoaXMudmFsaWRhdG9yLmdldFNvYXBGYXVsdHMoYmluZGluZykpKTsKLSAgICAgICAgc29hcEVsZW1lbnRzLmFkZEFsbChVdGlscy5hcnJheVRvVmVjdG9yKHRoaXMudmFsaWRhdG9yLmdldFNvYXBIZWFkZXJzKGJpbmRpbmcpKSk7Ci0gICAgICAgIHNvYXBFbGVtZW50cy5hZGRBbGwoCi0gICAgICAgICAgVXRpbHMuYXJyYXlUb1ZlY3Rvcih0aGlzLnZhbGlkYXRvci5nZXRTb2FwSGVhZGVyRmF1bHRzKGJpbmRpbmcpKSk7Ci0KLSAgICAgICAgSXRlcmF0b3IgaSA9IHNvYXBFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBzb2FwRWxlbWVudCA9Ci0gICAgICAgICAgICAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIChpLm5leHQoKSk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzTGl0ZXJhbChzb2FwRWxlbWVudCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGRvY0xpdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLm5hbWVzcGFjZUZvdW5kSW5Tb2FwTGl0ZXJhbChzb2FwRWxlbWVudCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnJhbnRFbGVtZW50cyArPSAiXG4tLS0gIiArIChzb2FwRWxlbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0gLy8gY29udGludWUgd2l0aCBjbGVuY2hlZCB0ZWV0aAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFkb2NMaXRGb3VuZCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gSWYgYSBuYW1lc3BhY2Ugd2FzIG5vdCBmb3VuZCB0aGVuIHRlc3QgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgaWYgKGVycmFudEVsZW1lbnRzLmxlbmd0aCgpICE9IDApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgIkZhaWxpbmcgZWxlbWVudHM6IiArIGVycmFudEVsZW1lbnRzLAotICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOGJmOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlVSSTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlVSSS5NYWxmb3JtZWRVUklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotKiBCUDIwMjAuCi0qICAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudCwgaWYgdGhlIHN0eWxlIGF0dHJpYnV0ZSBvZiB0aGUgY29udGFpbmVkIHNvYXBiaW5kOmJpbmRpbmcgaXMgInJwYyIgCi0qICAgICAgIGFuZCB0aGUgdXNlIGF0dHJpYnV0ZSBpcyAibGl0ZXJhbCIuPC9jb250ZXh0PgotKiAgICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIG9uIGFsbCBzb2FwYmluZDpib2R5IGVsZW1lbnRzIGFuZCB0aGUgdmFsdWUgb2YgdGhlIAotKiBuYW1lc3BhY2UgYXR0cmlidXRlIGlzIGFuIGFic29sdXRlIFVSSS4gPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSogQHZlcnNpb24gMS4wLjEgMjcuMDYuMjAwMwotKiBAYXV0aG9yIFZpdGFsaSBGZWRvc2Vua28KLSoqLwotcHVibGljIGNsYXNzIEJQMjAyMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAyMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICBib29sZWFuIHJwY0xpdEZvdW5kID0gZmFsc2U7Ci0KLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gVHJ5IHRvIGdldCB0aGUgU09BUCBiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBXU0RMVmFsaWRhdG9ySW1wbC5nZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBzdHlsZSB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBycGMgLSB0aGUgc3ViamVjdCBvZiB0aGUgYXNzZXJ0aW9uCi0gICAgU3RyaW5nIHN0eWxlID0gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQzsKLSAgICBpZiAoc29hcEJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIHN0eWxlID0KLSAgICAgICAgKHNvYXBCaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbAotICAgICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICAgIDogc29hcEJpbmRpbmcuZ2V0U3R5bGUoKSk7Ci0KLSAgICBpZiAoKHNvYXBCaW5kaW5nICE9IG51bGwpCi0gICAgICAmJiAoc3R5bGUuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgU09BUCBib2R5IGVsZW1lbnRzCi0gICAgICBTT0FQQm9keVtdIHNvYXBCb2RpZXMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwQm9kaWVzKGJpbmRpbmcpOwotCi0gICAgICAvLyBDaGVjayBmb3IgU29hcCBvcGVyYXRpb24gbmFtZXNwYWNlCi0gICAgICBib29sZWFuIGFzc2VydGlvbkZhaWx1cmUgPSBmYWxzZTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBudWxsOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwQm9kaWVzLmxlbmd0aCAmJiAhKGFzc2VydGlvbkZhaWx1cmUpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gc29hcEJvZGllc1tpXTsKLSAgICAgICAgLy8gQWRkZWQgY2hlY2sgZm9yIG51bGwgdXNlIHZhbHVlLCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBsaXRlcmFsCi0gICAgICAgIGlmIChzb2FwQm9keS5nZXRVc2UoKSA9PSBudWxsCi0gICAgICAgICAgfHwgc29hcEJvZHkuZ2V0VXNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgICAgewotICAgICAgICAgIHJwY0xpdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBuYW1lc3BhY2UsIHRoZW4gZmxhZyBhcyBhIGZhaWx1cmUKLSAgICAgICAgICBpZiAoKG5hbWVzcGFjZVVSSSA9IHNvYXBCb2R5LmdldE5hbWVzcGFjZVVSSSgpKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydGlvbkZhaWx1cmUgPSB0cnVlOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgIi0tLSBTT0FQIEJPRFk6XG4iCi0gICAgICAgICAgICAgICAgICArIHNvYXBCb2R5LnRvU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICsgIlxuLS0tIEJJTkRJTkcgUU5BTUU6XG4iCi0gICAgICAgICAgICAgICAgICArIGJpbmRpbmcuZ2V0UU5hbWUoKSwKLSAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIEVsc2UsIHZlcmlmeSB0aGF0IHRoZSBuYW1lc3BhY2UgaXMgYW4gYWJzb2x1dGUgVVJJCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL1VSTCB1cmwgPSBuZXcgVVJMKG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgICAgICAgIFVSSSB1cmkgPSBuZXcgVVJJKG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgICAgICAgIGlmICh1cmkuZ2V0U2NoZW1lKCkgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIG5vIHNjaGVtZSBpbXBsaWVzIG5vdCBhbiBhYnNvbHV0ZSBVUkkKLSAgICAgICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgICAgICItLS0gU09BUCBCT0RZOlxuIgotICAgICAgICAgICAgICAgICAgICAgICsgc29hcEJvZHkudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICAgICAgICsgIlxuLS0tIEJJTkRJTkcgUU5BTUU6XG4iCi0gICAgICAgICAgICAgICAgICAgICAgKyBiaW5kaW5nLmdldFFOYW1lKCksCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUklFeGNlcHRpb24gbXVlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAgICItLS0gU09BUCBCT0RZOlxuIgotICAgICAgICAgICAgICAgICAgICArIHNvYXBCb2R5LnRvU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiXG4tLS0gQklORElORyBRTkFNRTpcbiIKLSAgICAgICAgICAgICAgICAgICAgKyBiaW5kaW5nLmdldFFOYW1lKCksCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIXJwY0xpdEZvdW5kKQotICAgICAgewotICAgICAgICAvLyBzdHlsZSBpcyBycGMgYnV0IG5vIGRvY3VtZW50IHVzZSBlbGVtZW50cwotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gbnVsbDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFhc3NlcnRpb25GYWlsdXJlKQotICAgICAgeyAvLyBJZiBubyBhc3NlcnRpb24gZmFpbHVyZSwgdGhlbiBzZXQgcmVzdWx0IHRvIHBhc3NlZAotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBzdHlsZSBpcyBub3QgcnBjCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDUwODZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0KLS8qKgotKiAgQlAyMDIxLgotKiAgICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotKiAgICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmlucHV0IGVsZW1lbnQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnQgb2YgZWFjaCBvcGVyYXRpb24gdXNlcyB0aGUgYXR0cmlidXRlIG5hbWUgInBhcnQiIHdpdGggYSBTY2hlbWEgdHlwZSBvZiAiTk1UT0tFTiIgYW5kIGRvZXMgbm90IHVzZSAicGFydHMiLCBmb3IgYm90aCBzb2FwYmluZDpoZWFkZXIgZWxlbWVudHMgYW5kIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnRzLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotKgotKiBAdmVyc2lvbiAxLjAuMSAyNy4wNi4yMDAzCi0qIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotKiovCi1wdWJsaWMgY2xhc3MgQlAyMDIxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDIxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0KLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gR2V0IFNPQVAgaGVhZGVycyBmb3IgdGhpcyBiaW5kaW5nCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEhlYWRlcnMoYmluZGluZyk7Ci0KLSAgICBpZiAoc29hcEhlYWRlcnMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIENoZWNrIGVhY2ggaGVhZGVyIHRvIHNlZSBpZiBpdCBoYXMgcGFydCBlbGVtZW50IHdpdGggTk1UT0tFTiB0eXBlCi0gICAgICBmb3IgKGludCBoZWFkZXIgPSAwOwotICAgICAgICBoZWFkZXIgPCBzb2FwSGVhZGVycy5sZW5ndGgKLSAgICAgICAgICAmJiByZXN1bHQuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKTsKLSAgICAgICAgaGVhZGVyKyspCi0gICAgICB7Ci0gICAgICAgIGlmICgoc29hcEhlYWRlcnNbaGVhZGVyXS5nZXRQYXJ0KCkgPT0gbnVsbCkKLSAgICAgICAgICB8fCAoIVhNTFV0aWxzLmlzTm10b2tlbihzb2FwSGVhZGVyc1toZWFkZXJdLmdldFBhcnQoKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHNvYXBIZWFkZXJzW2hlYWRlcl0udG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICAvLyBFbHNlLCBjaGVjayB0aGUgaGVhZGVyZmF1bHQgaWYgdGhlcmUgaXMgb25lCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIExpc3Qgc29hcEhlYWRlckZhdWx0TGlzdCA9Ci0gICAgICAgICAgICBzb2FwSGVhZGVyc1toZWFkZXJdLmdldFNPQVBIZWFkZXJGYXVsdHMoKTsKLSAgICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNvYXBIZWFkZXJGYXVsdExpc3QuaXRlcmF0b3IoKTsKLQotICAgICAgICAgIC8vIENoZWNrIGVhY2ggaGVhZGVyIGZhdWx0IHRvIHNlZSBpZiBpdCBoYXMgcGFydCBlbGVtZW50IHdpdGggTk1UT0tFTiB0eXBlCi0gICAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKQotICAgICAgICAgICAgJiYgcmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCA9Ci0gICAgICAgICAgICAgIChTT0FQSGVhZGVyRmF1bHQpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAgIGlmICgoc29hcEhlYWRlckZhdWx0LmdldFBhcnQoKSA9PSBudWxsKQotICAgICAgICAgICAgICB8fCAoIVhNTFV0aWxzLmlzTm10b2tlbihzb2FwSGVhZGVyRmF1bHQuZ2V0UGFydCgpKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHNvYXBIZWFkZXJGYXVsdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE0NWQ3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gICogQlAyMDIyLgotICAqICAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAgKiAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPnRoZSBuYW1lIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgb24gdGhlIHNvYXBiaW5kOmZhdWx0IGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSoqLwotcHVibGljIGNsYXNzIEJQMjAyMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAyMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gR2V0IGxpc3Qgb2YgU09BUCBmYXVsdHMgZm9yIHRoZSBiaW5kaW5nCi0gICAgU09BUEZhdWx0W10gc29hcEZhdWx0cyA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBGYXVsdHMoYmluZGluZyk7Ci0KLSAgICBpZiAoc29hcEZhdWx0cyA9PSBudWxsIHx8IHNvYXBGYXVsdHMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gY2hlY2sgYWxsIHNvYXA6ZmF1bHRzLiAKLSAgICAgIC8vIE1VU1QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBGYXVsdHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSBzb2FwRmF1bHRzW2ldOwotICAgICAgICBpZiAoc29hcEZhdWx0LmdldE5hbWUoKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAic29hcGJpbmQ6ZmF1bHQgZWxlbWVudCA6ICIgKyBzb2FwRmF1bHQudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAzNjBhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjAyMy4KLSAqICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50LCB3aXRoIHRoZSAidXNlIiBhdHRyaWJ1dGUgcHJlc2VudCBvbiB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudDwvY29udGV4dD4KLSAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGlzICJsaXRlcmFsIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMDIzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDIzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgbGlzdCBvZiBTT0FQIGZhdWx0cyBmb3IgdGhlIGJpbmRpbmcKLSAgICBTT0FQRmF1bHRbXSBzb2FwRmF1bHRzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEZhdWx0cyhiaW5kaW5nKTsKLQotICAgIGlmIChzb2FwRmF1bHRzID09IG51bGwgfHwgc29hcEZhdWx0cy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBhbGwgc29hcDpmYXVsdHMuIAotICAgICAgLy8gTVVTVCBoYXZlIGEgbmFtZSBhdHRyaWJ1dGUsIGFuZCBpZiBhIHVzZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBNVVNUIGJlIHZhbHVlICJsaXRlcmFsIgotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwRmF1bHRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBTT0FQRmF1bHQgc29hcEZhdWx0ID0gc29hcEZhdWx0c1tpXTsKLSAgICAgICAgaWYgKChzb2FwRmF1bHQuZ2V0VXNlKCkgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoIXNvYXBGYXVsdAotICAgICAgICAgICAgLmdldFVzZSgpCi0gICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChzb2FwRmF1bHQudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMzIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMzIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkOTZkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDMyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDIwMzIuCi0gKiAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPnRoZSBuYW1lIGF0dHJpYnV0ZSB0aGF0IGlzIHNwZWNpZmllZCBvbiB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudCBtYXRjaGVzIHRoZSB2YWx1ZSBzcGVjaWZpZWQgb24gdGhlIHBhcmVudCBlbGVtZW50IHdzZGw6ZmF1bHQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjAzMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAzMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gR2V0IGxpc3Qgb2YgQmluZGluZyBmYXVsdHMgZm9yIHRoZSBiaW5kaW5nCi0gICAgQmluZGluZ0ZhdWx0W10gYmluZGluZ0ZhdWx0cyA9IHRoaXMudmFsaWRhdG9yLmdldEFsbEJpbmRpbmdGYXVsdHMoYmluZGluZyk7Ci0KLSAgICBpZiAoYmluZGluZ0ZhdWx0cyA9PSBudWxsIHx8IGJpbmRpbmdGYXVsdHMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIGZvciBlYWNoIGJpbmRpbmcgZmF1bHQsIGNvbXBhcmUgdGhlIGNoaWxkIHNvYXA6ZmF1bHQgbmFtZSB3aXRoIHRoZSBiaW5kaW5nIGZhdWx0IG5hbWUgCi0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ0ZhdWx0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IGJpbmRpbmdGYXVsdHNbaV07Ci0gICAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwRmF1bHQoYmluZGluZ0ZhdWx0KTsKLSAgICAgICAgaWYgKHNvYXBGYXVsdCA9PSBudWxsCi0gICAgICAgICAgfHwgc29hcEZhdWx0LmdldE5hbWUoKSA9PSBudWxsCi0gICAgICAgICAgfHwgYmluZGluZ0ZhdWx0LmdldE5hbWUoKSA9PSBudWxsCi0gICAgICAgICAgfHwgIWJpbmRpbmdGYXVsdC5nZXROYW1lKCkuZXF1YWxzKHNvYXBGYXVsdC5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgIHNvYXBGYXVsdCA9PSBudWxsID8gbnVsbCA6IHNvYXBGYXVsdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAzNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAzNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGU2MWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMzQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQlAyMDM0Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGRlc2NyaXB0aW9uIHdpdGhpbiBhIFdTREwgZG9jdW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGNhbmRpZGF0ZSBkZXNjcmlwdGlvbiBkb2VzIG5vdCBjb250YWluIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24geG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+IAotICovCi1wdWJsaWMgY2xhc3MgQlAyMDM0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDM0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldHRpbmcgd3NkbDpkZWZpbml0aW9uIGVsZW1lbnQKLSAgICBEZWZpbml0aW9uIGRlZiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIFR5cGVzIHR5cGVzOwotICAgIC8vIEdldHRpbmcgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiB4bWxuczp4bWwKLSAgICBTdHJpbmcgeG1sTnMgPSAoU3RyaW5nKSBkZWYuZ2V0TmFtZXNwYWNlcygpLmdldCgieG1sIik7Ci0gICAgLy8gSWYgaXQgZXhpc3RzIGFuZCBlcXVhbHMgdG8gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAgICBpZiAoeG1sTnMgIT0gbnVsbCAmJiB4bWxOcy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUwpKQotICAgIHsKLSAgICAgIC8vIHNldHRpbmcgYXNzZXJ0aW9uIHJlc3VsdCB0byB3YXJuaW5nCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgfQotICAgIC8vIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiB4bWxuczp4bWwgaW4gdGhlIHdzZGw6ZGVmaW5pdGlvbgotICAgIC8vIGVsZW1lbnQsIGNoZWNraW5nIHdoZXRoZXIgdGhlIGRlZmluaXRpb24gaGFzIHdzZGw6dHlwZSBlbGVtZW50Ci0gICAgZWxzZSBpZiAoKHR5cGVzID0gZGVmLmdldFR5cGVzKCkpICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0dGluZyB0aGUgbGlzdCBvZiB3c2RsOnNjaGVtYVMKLSAgICAgIExpc3QgZXh0RWxlbXMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIC8vIEdldHRpbmcgd3NkbDpzY2hlbWEgZWxlbWVudAotICAgICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc2NoZW1hID0KLSAgICAgICAgICAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIEdldHRpbmcgYSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHhtbG5zOnhtbAotICAgICAgICBTdHJpbmcgYXR0clZhbHVlID0gc2NoZW1hLmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1hNTE5TLCAieG1sIik7Ci0gICAgICAgIC8vIElmIGl0IGVxdWFscyB0byAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwKLSAgICAgICAgaWYgKFdTSUNvbnN0YW50cy5OU19VUklfWE1MLmVxdWFscyhhdHRyVmFsdWUpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gc2V0dGluZyBhc3NlcnRpb24gcmVzdWx0IHRvIHdhcm5pbmcKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKCJUaGUgbmFtZXNwYWNlICIKLSAgICAgICAgICAgICsgImRlY2xhcmF0aW9uIG5lc3RlZCBpbiB3c2RsOnNjaGVtYSBlbGVtZW50LiIsIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwOTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwOTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRiNjUzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDk4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotCi0KLS8qKgotICogQlAyMDk4LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6aW1wb3J0IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlICJsb2NhdGlvbiIgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBmb3IgdGhlIHdzZGw6aW1wb3J0IGVsZW1lbnQsIGFuZCBoYXMgYSBub24tZW1wdHkgdmFsdWUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjA5OCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjA5OChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBJbXBvcnQgaW0gPSAoSW1wb3J0KSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIC8vIHN1cHBvc2UgdGhhdCBpZiBsb2NhdGlvbiBpcyBpbnZhbGlkLCB0aGUgZGVmaW5pdGlvbiBlcXVhbHMgdG8gbnVsbAotICAgIGlmIChpbS5nZXRMb2NhdGlvblVSSSgpID09IG51bGwgfHwgaW0uZ2V0TG9jYXRpb25VUkkoKSA9PSAiIikKLSAgICAgIGVycm9ycy5hZGQoaW0uZ2V0TmFtZXNwYWNlVVJJKCksIGltLmdldExvY2F0aW9uVVJJKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1YTc3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjEwMS4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbiwgaWYgaXQgY29udGFpbnMgd3NkbDppbXBvcnQgc3RhdGVtZW50czwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkVhY2ggd3NkbDppbXBvcnQgc3RhdGVtZW50IGlzIG9ubHkgdXNlZCB0byBpbXBvcnQgYW5vdGhlciBXU0RMIGRlc2NyaXB0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTAxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIGltcG9ydCBjb250YWlucyByZWZlcmVuY2UgdG8gbm9uIFdTREwgZGVzY3JpcHRpb24uIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5JbXBvcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgaW0sIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLSAgICB0cnkKLSAgICB7Ci0gICAgLy8gYnkgdGhlIHdheSA6IFdTREw0SiB0aHJvd3MgRXhjZXB0aW9uIGlmIGltcG9ydGVkIFdTREwgaXMgbm90IHJlc29sdmVkCi0gICAgLy8gYnV0IGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IGltLmdldERlZmluaXRpb24oKSB3aWxsIGJlIGVxdWFsIHRvIG51bGwKLSAgICBpZiAoaW0uZ2V0RGVmaW5pdGlvbigpID09IG51bGwpCi0gICAgICBlcnJvcnMuYWRkKAotICAgICAgICBpbS5nZXROYW1lc3BhY2VVUkkoKQotICAgICAgICAgICsgIjoiCi0gICAgICAgICAgKyBpbS5nZXRMb2NhdGlvblVSSSgpCi0gICAgICAgICAgKyAiXG5JbXBvcnQgZWxlbWVudCBkb2VzIG5vdCByZWZlcmVuY2UgYSBXU0RMIGRlZmluaXRpb24uIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKAotICAgICAgICBpbS5nZXROYW1lc3BhY2VVUkkoKQotICAgICAgICAgICsgIjoiCi0gICAgICAgICAgKyBpbS5nZXRMb2NhdGlvblVSSSgpCi0gICAgICAgICAgKyAiXG5JbXBvcnQgZWxlbWVudCBkb2VzIG5vdCByZWZlcmVuY2UgYSBXU0RMIGRlZmluaXRpb24uIik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdEltcG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghaW1wb3J0Rm91bmQpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NTliNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjEwMi4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQsIHdpdGggWE1MIHNjaGVtYSBpbXBvcnQgZWxlbWVudHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBYTUwgc2NoZW1hIGltcG9ydCBzdGF0ZW1lbnQgKHhzZDppbXBvcnQpIGlzIG9ubHkgdXNlZCB0byBkaXJlY3RseSByZWZlcmVuY2UgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uLCB3aGljaCBoYXMgInNjaGVtYSIgZnJvbSBYTUwgbmFtZXNwYWNlICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgYXMgcm9vdCBlbGVtZW50LiAgSXQgZG9lcyBub3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGRvY3VtZW50IGVtYmVkZGluZyB0aGUgWE1MIHNjaGVtYSBkZWZpbml0aW9uIChlLmcuIFdTREwpLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIHBhcnNlIFdTREwgYXMgWE1MCi0gICAgdHJ5Ci0gICAgewotICAgICAgVHlwZXMgdCA9IChUeXBlcykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICAgIExpc3QgZXh0cyA9IHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgICBpZiAoKGRlZmluaXRpb24gPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXREZWZpbml0aW9uKHQpKQotICAgICAgICA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCB0eXBlcyBkZWZpbml0aW9uIGluIGFueSBXU0RMIGRvY3VtZW50LiIpOwotICAgICAgfQotCi0gICAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpdCA9IGV4dHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgICAmJiBlbC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgdGVzdE5vZGUoKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsKS5nZXRFbGVtZW50KCksCi0gICAgICAgICAgICAgIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIG5ldyBBcnJheUxpc3QoKSk7Ci0KLSAgICAgICAgICBpZiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghaW1wb3J0Rm91bmQpCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgY2F0Y2ggKFRocm93YWJsZSB0dCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIldTREwgZG9jdW1lbnQgY2FuIG5vdCBiZSBwcm9jZXNzZWQiLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qCi0gICAqIENoZWNrIG5vZGUgaXMgeHNkIGltcG9ydCBhbmQgaXQgaXMgCi0gICAqIG9ubHkgdXNlZCB0byBkaXJlY3RseSByZWZlcmVuY2UgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uLCB3aGljaCBoYXMgInNjaGVtYSIgCi0gICAqIGZyb20gWE1MIG5hbWVzcGFjZSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGFzIHJvb3QgZWxlbWVudC4gIAotICAgKiBBbmQgaXQgZG9lcyBub3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGRvY3VtZW50IGVtYmVkZGluZyB0aGUgWE1MIHNjaGVtYSAKLSAgICogZGVmaW5pdGlvbiAoZS5nLiBXU0RMKS4KLSAgKiBAcGFyYW0gbiAtIFVua25vd24gZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICovCi0gIHByaXZhdGUgdm9pZCB0ZXN0Tm9kZShOb2RlIG4sIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKG4gIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKG4pKSkKLQl7Ci0gICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4uZ2V0UGFyZW50Tm9kZSgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQobik7ICAgIAkKLQotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgICAgRWxlbWVudCBpbSA9IChFbGVtZW50KSBuOwotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgc2NoZW1hTG9jYXRpb24gYW5kIHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlcwotICAgICAgICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9Ci0gICAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAgICAgICAgICAgQXR0ciBuYW1lc3BhY2UgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX05BTUVTUEFDRSk7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlIG9mIGltcG9ydCBlbGVtZW50Ci0gICAgICAgICAgICBpZiAoc2NoZW1hTG9jYXRpb24gPT0gbnVsbCAmJiBuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gR2V0dGluZyBhbGwgdGhlIGlubGluZSBzY2hlbWFzIG9mIHRoZSB3c2RsIGRlZmluaXRpb24KLSAgICAgICAgICAgICAgTWFwIHNjaGVtYXNNYXAgPSB2YWxpZGF0b3Iud3NkbERvY3VtZW50LmdldFNjaGVtYXMoKTsKLSAgICAgICAgICAgICAgLy8gSWYgYW4gaW5saW5lIHNjaGVtYSBpbXBvcnRlZCBpcyBkZWZpbmVkCi0gICAgICAgICAgICAgIGlmIChzY2hlbWFzTWFwLmtleVNldCgpLmNvbnRhaW5zKG5hbWVzcGFjZS5nZXRWYWx1ZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIElmIGFuIGlubGluZSBzY2hlbWEgaW1wb3J0ZWQgaXMgZGVmaW5lZAotICAgICAgICAgICAgICAgIC8vICh0aGF0IG1lYW5zIHRoZSBzY2hlbWEgaXMgdmFsaWQpLAotICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgZWxlbWVudAotICAgICAgICAgICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvLyBubyBzY2hlbWFMb2NhdGlvbiBzbyB0cnkgdGhlIG5hbWVzcGFjZSAKLSAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb24gPSBuYW1lc3BhY2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSBpbXBvcnRlZCBYU0QKLSAgICAgICAgICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBhbnkgZXJyb3Igb3Igcm9vdCBlbGVtZW50IGlzIG5vdCBYU0Qgc2NoZW1hIC0+IGVycm9yCi0gICAgICAgICAgICAgICAgLy8gISEgQVRURU5USU9OCi0gICAgICAgICAgICAgICAgLy8gcm9vdCBYU0QgU0NIRU1BIFNDSEVNQSBpcyBub3QgdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy9Eb2N1bWVudCBzY2hlbWEgPSBYTUxVdGlscy5wYXJzZVhNTERvY3VtZW50VVJMKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIFhTRF9TQ0hFTUFMT0NBVElPTiwgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgRG9jdW1lbnQgc2NoZW1hID0KLSAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5wYXJzZVhNTERvY3VtZW50VVJMKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGltcG9ydCBpcyB2YWxpZCwgdGhlbiBjaGVjayBpdHMgY29udGVudHMKLSAgICAgICAgICAgICAgICBpZiAoWE1MVXRpbHMKLSAgICAgICAgICAgICAgICAgIC5lcXVhbHMoc2NoZW1hLmdldERvY3VtZW50RWxlbWVudCgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGNvbnRlbnQgb2YgaW1wb3J0ZWQgZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgIHRlc3ROb2RlKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRGaXJzdENoaWxkKCksCi0gICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KSwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgICAic2NoZW1hTG9jYXRpb24gPT0gbnVsbCBhbmQgbmFtZXNwYWNlID09IG51bGwiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgdGVzdE5vZGUobi5nZXRGaXJzdENoaWxkKCksIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmRhOTcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjEwMy4KLSAgICogPGNvbnRleHQ+Rm9yIGVhY2ggYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9uczwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkZvciB0aGUgcmVmZXJlbmNlZCBkZWZpbml0aW9ucyBhcyB3ZWxsIGFzIGFsbCBpbXBvcnRlZCAKLSAgICogZGVzY3JpcHRpb25zLCBUaGUgWE1MIHNjaGVtYSBpbXBvcnQgc3RhdGVtZW50IGlzIG9ubHkgdXNlZCB3aXRoaW4gYW4geHNkOnNjaGVtYSAKLSAgICogZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTAzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIENoZWNrIGFsbCB1bmtub3duIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgaXQgaXMgbm90IHhzZCBpbXBvcnQuCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChlbCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgIHNlYXJjaEZvckltcG9ydCgoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZWwpLmdldEVsZW1lbnQoKSk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICAvL3Byb2Nlc3NXU0RMKGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXRGaWxlbmFtZSgpKTsKLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoKLSAgICogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgbm9kZSBpcyB4c2QgaW1wb3J0LiAKLSAgICogQHBhcmFtIG4gLSBub2RlCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9ySW1wb3J0KE5vZGUgbikKLSAgewotICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgewotICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICB7Ci0gICAgICAgICAgQXR0ciBhID0KLSAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgbiwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAgICAgICAgIFN0cmluZyBzY2hlbWFMb2NhdGlvbiA9IChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiI7Ci0gICAgICAgICAgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgbiwgQVRUUl9YU0RfTkFNRVNQQUNFKTsKLSAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIjsKLSAgICAgICAgICBlcnJvcnMuYWRkKG5ldyBRTmFtZShuYW1lc3BhY2UsIHNjaGVtYUxvY2F0aW9uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBpZiAoIVhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgc2VhcmNoRm9ySW1wb3J0KG4uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkyZjM2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTnVsbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotICogQlAyMTA0LgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDppbXBvcnQ8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgdGFyZ2V0TmFtZXNwYWNlIGF0dHJpYnV0ZSBvbiB0aGUgd3NkbDpkZWZpbml0aW9ucyBlbGVtZW50IGZvciB0aGUgaW1wb3J0ZWQgV1NETCBkZXNjcmlwdGlvbiBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUgb24gdGhlIHdzZGw6aW1wb3J0IGVsZW1lbnQgdGhhdCBpbXBvcnRlZCB0aGUgV1NETCBkZXNjcmlwdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIG5hbWVzcGFjZSBvZiB3c2RsOmltcG9ydCBkb2VzIG5vdCBlcXVhbCB0YXJnZXRuYW1lc3BhY2UgaW4gcmVmZXJlbmNlZCB3c2RsLiAgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkltcG9ydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEltcG9ydCBpbSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaW1wb3J0Rm91bmQgPSB0cnVlOwotICAgIERlZmluaXRpb24gZGVmID0gaW0uZ2V0RGVmaW5pdGlvbigpOwotICAgIGlmIChkZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoIU51bGxVdGlsLmVxdWFscyhpbS5nZXROYW1lc3BhY2VVUkkoKSwgZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKSkKLSAgICAgICAgZXJyb3JzLmFkZCgKLSAgICAgICAgICBuZXcgUU5hbWUoaW0uZ2V0TmFtZXNwYWNlVVJJKCksIGltLmdldExvY2F0aW9uVVJJKCkpLAotICAgICAgICAgIG5ldyBRTmFtZShkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSkpOwotICAgIH0KLSAgfQotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRJbXBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoIWltcG9ydEZvdW5kKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwNGM2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAgKiBCUDIxMDUuCi0gICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnM8L2NvbnRleHQ+Ci0gICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkZvciB0aGUgcmVmZXJlbmNlZCBkZWZpbml0aW9ucywgYXMgd2VsbCBhcyBhbGwgaW1wb3J0ZWQgZGVzY3JpcHRpb25zLCBpbiB0aGUgV1NETCBuYW1lc3BhY2UgdW5kZXIgdGhlIHdzZGw6ZGVmaW50aXRpb25zIGVsZW1lbnQsIHRoZSB3c2RsOmltcG9ydCBlbGVtZW50IGlzIGVpdGhlciBkaXJlY3RseSBhZnRlciB0aGUgd3NkbDpkb2N1bWVudGF0aW9uIGVsZW1lbnQgb3IgaXMgdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgaWYgdGhlIHdzZGw6ZG9jdW1lbnRhdGlvbiBlbGVtZW50IGlzIG5vdCBwcmVzZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gICovCi1wdWJsaWMgY2xhc3MgQlAyMTA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwNShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIAotICAgKiBDaGVjayB3c2xkIGltcG9ydCBlbGVtZW50IGlzIGVpdGhlciBkaXJlY3RseSBhZnRlciB0aGUgd3NkbDpkb2N1bWVudGF0aW9uIGVsZW1lbnQgCi0gICAqIG9yIGlzIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50IGlmIHRoZSB3c2RsOmRvY3VtZW50YXRpb24gZWxlbWVudCBpcyBub3QgcHJlc2VudC4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuSW1wb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IGltLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpbXBvcnRGb3VuZCA9IHRydWU7Ci0gICAgaWYgKGltLmdldERlZmluaXRpb24oKSAhPSBudWxsICYmIGltLmdldExvY2F0aW9uVVJJKCkgIT0gbnVsbCkKLSAgICAgIHByb2Nlc3NXU0RMKGltLmdldERlZmluaXRpb24oKS5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gIH0KLQotICAvKgotICAgKiBDaGVjayBlbGVtZW50IGlzIGV4dGVuc2liaWxpdHkuCi0gICAqIEBwYXJhbSBlbCAtIHhtbCBlbGVtZW50Ci0gICAqIEByZXR1cm4gYm9vbGVhbgotICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNFeHRlbnNpYmlsaXR5RWxlbWVudChFbGVtZW50IGVsKQotICB7Ci0gICAgYm9vbGVhbiBpc0V4ID0gdHJ1ZTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0JJTkRJTkcpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfREVGSU5JVElPTlMpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRE9DVU1FTlRBVElPTik7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9GQVVMVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9JTVBPUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU5QVVQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfTUVTU0FHRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9PUEVSQVRJT04pOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfT1VUUFVUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1BBUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfUE9SVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9QT1JUVFlQRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9TRVJWSUNFKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1RZUEVTKTsKLQotICAgIHJldHVybiBpc0V4OwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCB3aWxsIGJlIGFuYWx5emVkICAgICAgIAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIGl0IGRvZXNuJ3QgY29udGFpbiBhbnkgaW1wb3J0cywgdGhlbiB0aGUgcmVzdWx0IGlzIG5vdEFwcGxpY2FibGUKLSAgICBpZiAoKGRlZmluaXRpb24uZ2V0SW1wb3J0cygpID09IG51bGwpCi0gICAgICB8fCAoZGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkuc2l6ZSgpID09IDApKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgLy8gRWxzZSBhbmFseXplIHRoZSAKLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvY2Vzc1dTREwoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0KLSAgICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgIHRyYXZlcnNhbC52aXNpdEltcG9ydCh0cnVlKTsKLQotICAgICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgKLSAgICAgICAgKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLQotICAgICAgZWxzZSBpZiAoIWltcG9ydEZvdW5kKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKgotICAgKiB0aGUgbWV0aG9kIGxvYWRzIFdTREwgYW5kIGNoZWNrIHN0cnVjdHVyZQotICAgKiBAcGFyYW0gbG9jYXRpb24KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzV1NETChTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBwYXJzZXMgV1NETAotICAgICAgRG9jdW1lbnQgZG9jID0gdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwobG9jYXRpb24sIG51bGwpOwotICAgICAgY2hlY2tXU0RMKGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSk7IC8vIGdldCBkZWZpbml0aW9uCi0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICAvLyBBREQ6IGFkZCBleGNlcHRpb24gaGFuZGxpbmcKLSAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCIyMTA1IC0gV1NETCBsb2FkIGZhaWxlZCIpOwotICAgICAgZXJyb3JzLmFkZCh0LnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9mIG5vZGUuCi0gICAqIEBwYXJhbSByb290Ci0gICAqLwotICBwcml2YXRlIHZvaWQgY3JlYXRlRmFpbGVkKE5vZGUgcm9vdCkKLSAgewotICAgIEF0dHIgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgcm9vdCwgQVRUUl9XU0RMX0xPQ0FUSU9OKTsKLSAgICBTdHJpbmcgc2NoZW1hTG9jYXRpb24gPSAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiOwotICAgIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIHJvb3QsIEFUVFJfV1NETF9OQU1FU1BBQ0UpOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiOwotICAgIGVycm9ycy5hZGQobmV3IFFOYW1lKG5hbWVzcGFjZSwgc2NoZW1hTG9jYXRpb24pKTsKLSAgfQotCi0gIC8qCi0gICAqIENoZWNrIHdzZGwgY29ycmVzcG9ucyBhc3NlcnRpb24gZGVzY3JpcHRpb24uCi0gICogQHBhcmFtIHJvb3QgLSBkZWZpbml0aW9uCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tXU0RMKE5vZGUgcm9vdCkKLSAgewotICAgIGlmIChyb290ICE9IG51bGwpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgZmlyc3QgaW1wb3J0IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgaW0gPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KChFbGVtZW50KSByb290LCBXU0RMX0lNUE9SVCk7Ci0KLSAgICAgIC8vIERldGVybWluZSBpZiBhIGRvY3VtZW50YXRpb24gZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBib29sZWFuIGRvY3VtZW50SXNQcmVzZW50ID0KLSAgICAgICAgKFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoKEVsZW1lbnQpIHJvb3QsIFdTRExfRE9DVU1FTlRBVElPTikKLSAgICAgICAgICAhPSBudWxsKTsKLQotICAgICAgLy8gVmVyaWZ5IHRoYXQgYWxsIGltcG9ydCBlbGVtZW50cyBvY2N1ciBhZnRlciBhIGRvY3VtZW50YXRpb24gZWxlbWVudAotICAgICAgd2hpbGUgKGltICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIEZpbmQgZWxlbWVudHMgdGhhdCBhcmUgcHJldmlvdXMgdG8gdGhlIGltcG9ydCBlbGVtZW50Ci0gICAgICAgIEVsZW1lbnQgZWwgPSBYTUxVdGlscy5maW5kUHJldmlvdXNTaWJsaW5nKGltKTsKLSAgICAgICAgaWYgKGVsICE9IG51bGwpCi0gICAgICAgICAgd2hpbGUgKGlzRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZWwpICYmIGVsICE9IG51bGwpCi0gICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgZWwgPSBYTUxVdGlscy5maW5kUHJldmlvdXNTaWJsaW5nKGVsKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDpkb2N1bWVudCBlbGVtbnQgaXMgcHJlc2VudAotICAgICAgICBpZiAoZG9jdW1lbnRJc1ByZXNlbnQgJiYgZWwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmICghWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0RPQ1VNRU5UQVRJT04pICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU1QT1JUKSkKLSAgICAgICAgICAgIGNyZWF0ZUZhaWxlZChyb290KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEVsc2UgY2hlY2sgaWYgaXQgaXMgYW5vdGhlciB3c2RsOiBlbGVtZW50Ci0gICAgICAgIGVsc2UgaWYgKGVsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiBub3QgdGhlIGRlZmluaXRpb25zIGVsZW1lbnQsIHRoZW4gY2hlY2sgZm9yIG90aGVyIHdzZGw6IGVsZW1lbnQKLSAgICAgICAgICBpZiAoIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9ERUZJTklUSU9OUykgJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9JTVBPUlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlbC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSkKLSAgICAgICAgICAgICAgY3JlYXRlRmFpbGVkKHJvb3QpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCB0aGUgbmV4dCBpbXBvcnQgZWxlbWVudAotICAgICAgICBpbSA9IFhNTFV0aWxzLmZpbmRFbGVtZW50KGltLCBXU0RMX0lNUE9SVCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmZmYjAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjEwNy4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQgY29udGFpbmluZyBhbiB4c2Q6c2NoZW1hIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHhzZDpzY2hlbWEgZWxlbWVudCBjb250YWlucyBhIHRhcmdldE5hbWVzcGFjZSBhdHRyaWJ1dGUgd2l0aCBhIHZhbGlkIGFuZCBub24tbnVsbCB2YWx1ZSB1bmxlc3MgdGhlIHhzZDpzY2hlbWEgZWxlbWVudCBoYXMgeHNkOmltcG9ydCBhbmQvb3IgeHNkOmFubm90YXRpb24gYXMgaXRzIG9ubHkgY2hpbGQgZWxlbWVudChzKS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTA3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTA3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2NoZW1hRm91bmQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICAvL3ByaXZhdGUgU3RyaW5nIGNvbnRleHQ7Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFR5cGVzIHQgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgTGlzdCBleHRzID0gdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vY29udGV4dCA9IGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgICAgSXRlcmF0b3IgaXQgPSBleHRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpOwotICAgICAgICBpZiAoZWwgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKCgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBlbCkuZ2V0RWxlbWVudCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLwkJCSAgY29udGV4dCA9IGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgIC8vCQkJICBwcm9jZXNzV1NETChlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RmlsZW5hbWUoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghc2NoZW1hRm91bmQpCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoKLSAgICogQ2hlY2sgbm9kZSBzY2hlbWEgb3IgbG9hZCBzY2hlbWEgZnJvbSBpbm1wb3J0IGlmIGl0IGV4aXN0cyBhbmQgcHJvY2VzcyBpdC4gCi0gICAqIEBwYXJhbSBuIC0gbm9kZQotICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9yU2NoZW1hKE5vZGUgbikKLSAgewotICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgewotICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgeHNkOnNjaGVtYSBlbGVtZW50IGlzIGZvdW5kIC0+IHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgewotICAgICAgICAgIHNjaGVtYUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICBwcm9jZXNzU2NoZW1hKG4sIG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gaWYgeHNkOmltcG9ydCBlbGVtZW50IGlzIGZvdW5kIC0+IGxvYWQgc2NoZW1hIGFuZCBwcm9jZXNzIHNjaGVtYQotICAgICAgICAgIC8vaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICAgIC8vICBsb2FkU2NoZW1hKG4pOwotICAgICAgICAgIC8vZWxzZQotICAgICAgICAgIC8vIGVsc2UgaXRlcmF0ZSBlbGVtZW50IHJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKG4uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIExvYWQgc2NoZW1hIGFuZCBwcm9jZXNzIGl0LgotICAgKiBAcGFyYW0gaW1wb3J0Tm9kZSAtIHhzZDppbXBvcnQgZWxlbWVudAotICAqLwotICAvL3ByaXZhdGUgdm9pZCBsb2FkU2NoZW1hKE5vZGUgaW1wb3J0Tm9kZSkKLSAgLy97Ci0gIC8vICBFbGVtZW50IGltID0gKEVsZW1lbnQpIGltcG9ydE5vZGU7Ci0gIC8vICBBdHRyIHNjaGVtYUxvY2F0aW9uID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gIC8vICAvLyB0cnkgdG8gcGFyc2UgaW1wb3J0ZWQgWFNECi0gIC8vICBpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICE9IG51bGwpCi0gIC8vICAgIHRyeQotICAvLyAgICB7Ci0gIC8vICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAvLyAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gIC8vICAgICAgICB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KTsKLSAgLy8gICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgLy8gICAgICB7Ci0gIC8vICAgICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX05BTUVTUEFDRSk7Ci0gIC8vICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIjsKLSAgLy8gICAgICAgIHByb2Nlc3NTY2hlbWEoc2NoZW1hLmdldERvY3VtZW50RWxlbWVudCgpLCBuYW1lc3BhY2UpOwotICAvLyAgICAgIH0KLSAgLy8gICAgfQotICAvLyAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gIC8vICAgIHsKLSAgLy8gICAgICAvLyBub3RoaW5nLiBpdCdzIG5vdCBhIHNjaGVtYQotICAvLyAgICB9Ci0gIC8vfQotCi0gIC8qCi0gICAqIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIGl0J3Mgbm90IGNvcnJlc3BvbnMgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gc2NoZW1hIC0geHNkOnNjaGVtYQotICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gbmFtZXNwYWNlIG9mIHNjaGVtYQotICAqLwotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1NjaGVtYShOb2RlIHNjaGVtYSwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIEF0dHIgYSA9Ci0gICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIHNjaGVtYSwgQVRUUl9YU0RfVEFSR0VUTkFNRVNQQUNFKTsKLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiBudWxsOwotCi0gICAgTm9kZSBuID0gc2NoZW1hLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAvLwkgICAhISB3ZSBzdXBwb3NlIHRoYXQgeHNkOmltcG9ydCBlbGVtZW50IGlzIG9jY3VyZWQgb25seSB3aXRoaW4geHNkOnNjaGVtYSBlbGVtZW50Ci0gICAgYm9vbGVhbiBjb250YWluc09ubHlJbXBvcnRBbmRBbm5vdGF0aW9uID0gdHJ1ZTsKLSAgICB3aGlsZSAobiAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChuLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICB7Ci0gICAgICAgIGNvbnRhaW5zT25seUltcG9ydEFuZEFubm90YXRpb24KLSAgICAgICAgICAmPSAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkKLSAgICAgICAgICAgIHx8IFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9BTk5PVEFUSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSAmJiBYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgIC8vCWxvYWRTY2hlbWEobik7Ci0KLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHRhcmdldCBuYW1lc3BhY2UgaXMgbm90IHNldCBhbmQgdGhlcmUgYXJlIGVsZW1lbnRzIGluIGFkZGl0aW9uIHRvIGltcG9ydCBhbmQgYW5ub3RhdGlvbiwgdGhlbiBlcnJvcgotICAgIGlmICgodGFyZ2V0TmFtZXNwYWNlID09IG51bGwgfHwgdGFyZ2V0TmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAmJiAoIWNvbnRhaW5zT25seUltcG9ydEFuZEFubm90YXRpb24pKQotICAgIHsKLSAgICAgIGVycm9ycy5hZGQodGFyZ2V0TmFtZXNwYWNlLCBYTUxVdGlscy5zZXJpYWxpemUoKEVsZW1lbnQpIHNjaGVtYSkpOwotICAgIH0KLQotICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCAmJiAhbmFtZXNwYWNlLmVxdWFscyh0YXJnZXROYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIGVycm9ycy5hZGQobmFtZXNwYWNlLCBYTUxVdGlscy5zZXJpYWxpemUoKEVsZW1lbnQpIHNjaGVtYSkpOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY3MzNmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLQotCi0vKioKLQkgKiBCUDIxMDguCi0gICAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6dHlwZXMsIHdpdGggQXJyYXkgZGVjbGFyYXRpb25zIGVpdGhlciBsb2NhbGx5IGRlZmluZWQgb3IgZnJvbSBhbiBpbXBvcnRlZCBkZXNjcmlwdGlvbjwvY29udGV4dD4KLSAgICAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHR5cGUgc29hcGVuYzpBcnJheSBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlc2UgZGVjbGFyYXRpb25zLCBhbmQgdGhlIHdzZGw6YXJyYXlUeXBlIGF0dHJpYnV0ZSBpcyBub3QgdXNlZCBpbiB0aGUgdHlwZSBkZWNsYXJhdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotCSAqLwotcHVibGljIGNsYXNzIEJQMjEwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBUeXBlcyB0ID0gKFR5cGVzKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gU2VhcmNoIHRoZSBkZWZpbml0aW9ucyBpbiBDYW5kaWRhdGVJbmZvIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCB0eXBlcyBlbGVtZW50Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBpZiAoKGRlZmluaXRpb24gPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXREZWZpbml0aW9uKHQpKQotICAgICAgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzIHRoZW4gdGhyb3cgYW4gZXhlY3B0aW9uCi0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIHR5cGVzIGVsZW1lbnQgZGVmaW5pdGlvbi4iKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHQsCi0gICAgICAgICAgZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotCi0gICAgICBJdGVyYXRvciBpdCA9IHJlZ2lzdHJ5LmdldEFycmF5VHlwZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgZXJyb3JzLmFkZCgoUU5hbWUpIGl0Lm5leHQoKSk7Ci0KLSAgICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTliNmYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotCi0KLS8qKgotICogQlAyMTEwLgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDp0eXBlczwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkFycmF5IGRlY2xhcmF0aW9uIHdyYXBwZXIgZWxlbWVudHMgZG9lcyBub3QgdXNlIHRoZSBuYW1pbmcgY29udmVudGlvbiBBcnJheU9mWFhYLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTAoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotCi0gICAgVHlwZXMgdCA9IChUeXBlcykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIFNlYXJjaCB0aGUgZGVmaW5pdGlvbnMgaW4gQ2FuZGlkYXRlSW5mbyB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdHlwZXMgZWxlbWVudAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgaWYgKChkZWZpbml0aW9uID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbih0KSkKLSAgICAgID09IG51bGwpCi0gICAgewotICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcyB0aGVuIHRocm93IGFuIGV4ZWNwdGlvbgotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSB0eXBlcyBlbGVtZW50IGRlZmluaXRpb24uIik7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0LAotICAgICAgICAgIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgICAgSXRlcmF0b3IgaXQgPSByZWdpc3RyeS5nZXRFbGVtZW50TGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBRTmFtZSB0eXBlID0gKFFOYW1lKSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmICh0eXBlLmdldExvY2FsUGFydCgpLnN0YXJ0c1dpdGgoIkFycmF5T2YiKSkKLSAgICAgICAgICBlcnJvcnMuYWRkKHR5cGUpOwotICAgICAgfQotCi0gICAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlkOTQyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExMS4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZywgd2hpY2ggY29udGFpbnMgYSBkb2N1bWVudC1saXRlcmFsIHNvYXA6YmluZGluZzwvY29udGV4dD4KLSAgICogCi0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JZiB0aGUgInBhcnRzIiBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50KHMpIGhhdmUgYXQgbW9zdCBvbmUgcGFydCBsaXN0ZWQgaW4gdGhlIHBhcnRzIGF0dHJpYnV0ZS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTExIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjExMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGRvY0xpdGVyYWxGb3VuZCA9IGZhbHNlOwotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyogCi0gICAqIFB1dCBpbiBjb250ZXh0IHNvYXAgYmluZGluZydzIHN0eWxlCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoYmluZGluZy5nZXRTdHlsZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICA6IGJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIAotICAgKiBWZXJpZnkgc3R5bGUgb2Ygc29hcCBvcGVyYXRpb24gaXMgImRvY3VtZW50IiBpZiBub3QgdGhlbiBpdCdzIGNhbmNlbGVkIHByb2Nlc3MuIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICBzdHlsZSA9IChTdHJpbmcpIGN0eC5nZXRQYXJhbWV0ZXIoInN0eWxlIik7Ci0gICAgLy8gYXNzZXJ0IHN0eWxlICE9IG51bGwKLSAgICBpZiAoIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MuZXF1YWxzKHN0eWxlKSkKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyogCi0gICAqIElmIHVzZSBvZiBzb2FwIGJvZHkgaXMgImxpdGVyYWwiIGFuZCBwYXJ0cyBvZiBzb2FwIGJvZHkgaXMgbW9yZSB0aGFuIG9uZSBpdCBjcmVhdGVzIGZhbHVyZSByZXBvcnQuIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBhc3NlcnQgc3R5bGUgPT0gImRvY3VtZW50IgotICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVC5lcXVhbHMoYm9keS5nZXRVc2UoKSkpCi0gICAgewotICAgICAgZG9jTGl0ZXJhbEZvdW5kID0gdHJ1ZTsKLQotICAgICAgTGlzdCBwYXJ0cyA9IGJvZHkuZ2V0UGFydHMoKTsKLSAgICAgIGlmIChwYXJ0cyAhPSBudWxsICYmIHBhcnRzLnNpemUoKSA+IDEpCi0gICAgICAgIC8vaG93IHRvIHBpY2sgb3V0IG9uZSBib2R5IGZyb20gYW5vdGhlciBvbmUgPwkJCQkJCQotICAgICAgICBlcnJvcnMuYWRkKGJvZHkuZ2V0RWxlbWVudFR5cGUoKSwgYm9keS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOzsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotCi0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFkb2NMaXRlcmFsRm91bmQpCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjJiYzlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTIuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcsIHdpdGggYSBzdHlsZSAicnBjIiBhdHRyaWJ1dGUgYW5kIGNvbnRhaW5pbmcgYXQgbGVhc3QgYSBzb2FwYmluZDpib2R5IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5ObyB3c2RsOnBhcnQgcmVmZXJyZWQgYnkgc3VjaCBhIHNvYXBiaW5kOmJvZHkgZWxlbWVudCBpcyBkZWZpbmVkIHVzaW5nIHRoZSAiZWxlbWVudCIgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTEyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcnBjTGl0ZXJhbEZvdW5kID0gZmFsc2U7Ci0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAKLSAgICogUHV0IGluIGNvbnRleHQgc29hcCBiaW5kaW5nJ3Mgc3R5bGUKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQQmluZGluZyBiaW5kaW5nLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0KLSAgICAgIChiaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbCkKLSAgICAgICAgPyBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DCi0gICAgICAgIDogYmluZGluZy5nZXRTdHlsZSgpOwotICAgIGN0eC5hZGRQYXJhbWV0ZXIoImJpbmRpbmdTdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEJpbmRpbmdPcGVyYXRpb24gb3AsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVtb3ZlUGFyYW1ldGVyKCJvcGVyYXRpb25TdHlsZSIpOwotICB9Ci0KLSAgLyogCi0gICAqIFZlcmlmeSBzdHlsZSBvZiBzb2FwIG9wZXJhdGlvbiBpcyAicnBjIiBpZiBub3QgdGhlbiBpdCdzIGNhbmNlbGVkIHByb2Nlc3MuIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigib3BlcmF0aW9uU3R5bGUiLCBvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gIH0KLQotICAvKiAKLSAgICogSWYgdXNlIG9mIHNvYXAgYm9keSBpcyAibGl0ZXJhbCIgYW5kIGlmIGF0IGxlYXN0IG9uZSBwYXJ0IGlzIGRlZmluZSB1c2luZyAiZWxlbWVudCIgYXR0cmlidXRlIGl0IGNyZWF0ZXMgZmFsdXJlIHJlcG9ydC4gICAgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBvcFN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigib3BlcmF0aW9uU3R5bGUiKTsKLSAgICBTdHJpbmcgYlN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigiYmluZGluZ1N0eWxlIik7Ci0KLSAgICBpZiAoKG9wU3R5bGUgPT0gbnVsbAotICAgICAgICAmJiAhV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQy5lcXVhbHMoYlN0eWxlKSkKLSAgICAgIHx8IChvcFN0eWxlICE9IG51bGwgCi0gICAgICAJJiYgIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMuZXF1YWxzKG9wU3R5bGUpKSkKLSAgICB7Ci0gICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gYXNzZXJ0IHVzZSA9PSAibGl0ZXJhbCIKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQuZXF1YWxzKGJvZHkuZ2V0VXNlKCkpKQotICAgIHsKLSAgICAgIHJwY0xpdGVyYWxGb3VuZCA9IHRydWU7Ci0KLSAgICAgIC8vIGZpbmQgY29ycmVzcG9uZGluZyBtZXNzYWdlCi0gICAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotICAgICAgLy8gaWYgc29tZSBsaW5rcyBhcmUgYnJva2VuLCBjYW5jZWwgcHJvY2Vzc2luZwotICAgICAgaWYgKG9wID09IG51bGwKLSAgICAgICAgfHwgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCAmJiBvcC5nZXRJbnB1dCgpID09IG51bGwpCi0gICAgICAgIHx8IChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0ICYmIG9wLmdldE91dHB1dCgpID09IG51bGwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIE1lc3NhZ2UgbSA9Ci0gICAgICAgIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgICAgPyBvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKQotICAgICAgICAgIDogb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgLy8gUkVNT1ZFOiBjdXJyZW50IG1lc3NhZ2Ugc2hvdWxkIGVxdWFscyB0byBtZXNzYWdlIGdpdmVuIGFzIGVudHJ5Ci0gICAgICAvL2lmIChtID09IG51bGwgfHwgbWVzc2FnZSAhPSBtKQotICAgICAgaWYgKG0gPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBMaXN0IHBhcnRzID0KLSAgICAgICAgV1NETFV0aWwuZ2V0UGFydHMoCi0gICAgICAgICAgb3AsCi0gICAgICAgICAgbSwKLSAgICAgICAgICBib2R5LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpOwotICAgICAgaWYgKHBhcnRzID09IG51bGwpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgLyogY2hlY2sgd2hldGhlciBwYXJ0cyBsaXN0IGNvbnRhaW5zIGEgcGFydHMgd2hpY2ggdXNlcwotICAgICAgICogZWxlbWVudCBhdHRyaWJ1dGUuIElmIHNvLCBwYXJ0IG5hbWUgd2lsbCBiZSBhZGRlZCBpbnRvCi0gICAgICAgKiBlcnJvcnMgc2V0LgotICAgICAgICovCi0gICAgICBJdGVyYXRvciBpdCA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaXQubmV4dCgpOwotICAgICAgICBpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgZXJyb3JzLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAvLyBzYXZlIG1lc3NhZ2UgCi0gICAgLy9tZXNzYWdlID0gKE1lc3NhZ2UpZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOzsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRCaW5kaW5nT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBPcGVyYXRpb24odHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLQotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghcnBjTGl0ZXJhbEZvdW5kKQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQzMWNkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTMuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGFuZCBzb2FwYmluZDpmYXVsdCBlbGVtZW50cyBvbmx5IHJlZmVyIHRvIHdzZGw6cGFydCBlbGVtZW50KHMpIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQgdXNpbmcgdGhlICJlbGVtZW50IiBhdHRyaWJ1dGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjExMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAKLSAgICogVmVyaWZ5IHNvYXAgaGVhZGVyIHVzZXMgcGFydCBpcyBkZWZpbmUgdXNpbmcgImVsZW1lbnQiIGF0dHJpYnV0ZSAgIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBIZWFkZXIgaGVhZGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkID0gKERlZmluaXRpb24pIGN0eC5nZXRQYXJhbWV0ZXIoImRlZmluaXRpb24iKTsKLSAgICBNZXNzYWdlIG0gPSBkLmdldE1lc3NhZ2UoaGVhZGVyLmdldE1lc3NhZ2UoKSk7Ci0gICAgaWYgKG0gIT0gbnVsbCkKLSAgICAgIGNoZWNrUGFydChtLmdldFBhcnQoaGVhZGVyLmdldFBhcnQoKSksIGN0eC5nZXRCaW5kaW5nKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFZlcmlmeSBzb2FwIGhlYWRlcmZhdWx0IHVzZXMgcGFydCBpcyBkZWZpbmUgdXNpbmcgImVsZW1lbnQiIGF0dHJpYnV0ZQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IGZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkID0gKERlZmluaXRpb24pIGN0eC5nZXRQYXJhbWV0ZXIoImRlZmluaXRpb24iKTsKLSAgICBNZXNzYWdlIG0gPSBkLmdldE1lc3NhZ2UoZmF1bHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAvLyBpZiBtZXNzYWdlIG9yIHBhcnQgaXMgbm90IGZvdW5kIC0gTk9UX0FQUExJQ0FCTEUgPz8/PwotICAgIGlmIChtICE9IG51bGwpCi0gICAgICBjaGVja1BhcnQobS5nZXRQYXJ0KGZhdWx0LmdldFBhcnQoKSksIGN0eC5nZXRCaW5kaW5nKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFZlcmlmeSBzb2FwIGZhdWx0IHVzZXMgcGFydCBpcyBkZWZpbmUgdXNpbmcgImVsZW1lbnQiIGF0dHJpYnV0ZQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IGZhdWx0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgZmF1bHROYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotICAgIGlmIChmYXVsdE5hbWUgPT0gbnVsbCkKLSAgICAgIGZhdWx0TmFtZSA9IGN0eC5nZXRCaW5kaW5nRmF1bHQoKS5nZXROYW1lKCk7Ci0gICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICBpZiAob3AgPT0gbnVsbCAvKiB8fCBmYXVsdE5hbWUgPT0gbnVsbCovCi0gICAgICApIC8vIG1heSBiZSBpdCdzIHBvc3NpYmxlIHRvIGhhdmUgbGVnYWwgZmF1bHQgd2l0aCBudWxsIG5hbWUKLSAgICAgIHJldHVybjsKLSAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgU09BUEZhdWx0LmdldE5hbWUoKSBjb3JyZXNwb25kcyB0byB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9uJ3MgZmF1bHQgbmFtZQkJCQotICAgIEZhdWx0IGYgPSBvcC5nZXRGYXVsdChmYXVsdE5hbWUpOwotICAgIGlmIChmID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgTWVzc2FnZSBtID0gZi5nZXRNZXNzYWdlKCk7Ci0gICAgLy8gbWVzc2FnZSBzaG91bGQgaGF2ZSBvbmx5IG9uZSBwYXJ0Ci0gICAgaWYgKG0gPT0gbnVsbCB8fCBtLmdldFBhcnRzKCkgPT0gbnVsbCB8fCBtLmdldFBhcnRzKCkuc2l6ZSgpICE9IDEpCi0gICAgICByZXR1cm47Ci0gICAgY2hlY2tQYXJ0KChQYXJ0KSBtLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5nZXQoMCksIGN0eC5nZXRCaW5kaW5nKCkpOwotICB9Ci0KLSAgLyoKLSAgICogVmVyaWZ5IHBhcnQgaXMgZGVmaW5lIHVzaW5nICJlbGVtZW50IiBhdHRyaWJ1dGUuCi0gICAqIEBwYXJhbSBwIC0gcGFydAotICAgKiBAcGFyYW0gYiAtIGJpbmRpbmcKLSAgKi8KLSAgLy8gcmVmYWN0b3JpbmcKLSAgcHJpdmF0ZSB2b2lkIGNoZWNrUGFydChQYXJ0IHAsIEJpbmRpbmcgYikKLSAgewotICAgIGlmIChwICE9IG51bGwgJiYgcC5nZXRFbGVtZW50TmFtZSgpID09IG51bGwpCi0gICAgICBlcnJvcnMuYWRkKGIuZ2V0UU5hbWUoKSwgcC5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOzsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQSGVhZGVyKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXJGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQRmF1bHQodHJ1ZSk7Ci0KLSAgICBNYXAgbSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgRGVmaW5pdGlvbiBkZWYgPSBlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKTsKLSAgICBXU0RMVXRpbC5leHBhbmREZWZpbml0aW9uKGRlZik7Ci0gICAgbS5wdXQoImRlZmluaXRpb24iLCBkZWYpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSwgbSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjU0OWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExNC4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAqIAotICogCi0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RXZlcnkgd3NkbDpwYXJ0IGZyb20gZWFjaCB3c2RsOm1lc3NhZ2UgaW4gdGhlIGFzc29jaWF0ZWQgCi0gKiB3c2RsOnBvcnRUeXBlIGlzIHJlZmVyZW5jZWQgZWl0aGVyIGJ5IHRoZSBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIAotICogc29hcGJpbmQ6ZmF1bHQsIG9yIHNvYXBiaW5kOmhlYWRlcmZhdWx0LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTE0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIC8vIG1hcCBNZXNzYWdlIFFOYW1lIC0+IHNldChQYXJ0IG5hbWUpCi0gIHB1YmxpYyBNYXAgbWVzc2FnZXMgPSBuZXcgSGFzaE1hcCgpOwotCi0gIC8qIAotICAgKiBBZGQgdG8gTWFwIHBhcnRzIHdoaWNoIHVzZWQgYnkgbWVzc2FnZQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5NZXNzYWdlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBtLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAobSAhPSBudWxsCi0gICAgICAmJiAhbWVzc2FnZXMuY29udGFpbnNLZXkobSkKLSAgICAgICYmIG0uZ2V0T3JkZXJlZFBhcnRzKG51bGwpICE9IG51bGwpCi0gICAgewotICAgICAgU2V0IHMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgSXRlcmF0b3IgaXQgPSBtLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgcy5hZGQoKChQYXJ0KSBpdC5uZXh0KCkpLmdldE5hbWUoKSk7Ci0KLSAgICAgIC8vbWVzc2FnZXMucHV0KG0uZ2V0UU5hbWUoKSwgcyk7Ci0gICAgICBpZiAocy5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBtZXNzYWdlcy5wdXQobS5nZXRRTmFtZSgpLCBzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAKLSAgICogUHV0IGluIGNvbnRleHQgc3R5bGUgb2Ygc29hcCBiaW5kaW5nCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgIT0gbnVsbCkKLSAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoInN0eWxlIiwgc3R5bGUpOwotICB9Ci0KLSAgLyogCi0gICAqIFJlbW92ZSBwYXJ0cyBvZiBzb2FwIGJvZHkgZnJvbSBNYXAuICAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJvZHkgYm9keSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gU3RyaW5nIHN0eWxlID0gKFN0cmluZyljdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotCi0gICAgLy8gZmluZCBjb3JyZXNwb25kaW5nIG1lc3NhZ2UKLSAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotICAgIC8vIGlmIHNvbWUgbGlua3MgYXJlIGJyb2tlbiwgY2FuY2VsIHByb2Nlc3NpbmcKLSAgICBpZiAob3AgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBNZXNzYWdlIG0gPSBudWxsOwotICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgaWYgKG9wLmdldElucHV0KCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgbSA9IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotICAgIHsKLSAgICAgIGlmIChvcC5nZXRPdXRwdXQoKSA9PSBudWxsKQotICAgICAgICByZXR1cm47Ci0gICAgICBtID0gb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgIH0KLSAgICBpZiAobSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gZ2V0IHBhcnRzCi0gICAgTGlzdCBwYXJ0cyA9IFdTRExVdGlsLmdldFBhcnRzKG9wLCBtLCBib2R5LCBudWxsKTsKLSAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLQotICAgIC8vIGl0ZXJhdGUgYWxsIHBhcnRzIGFuZCBjaGVjawotICAgIEl0ZXJhdG9yIGl0ID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgcmVtb3ZlUGFydChtLmdldFFOYW1lKCksICgoUGFydCkgaXQubmV4dCgpKS5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFJlbW92ZSBwYXJ0cyBvZiBzb2FwIGhlYWRlciBmcm9tIE1hcC4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyIGhlYWRlciwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIHdlIHN1cHBvc2UgdGhhdCBpdCBwb3NzaWJsZSB0byBoYXZlIGxlZ2FsIG1lc3NhZ2UgYW5kIHBhcnQgd2l0aCBudWxsIG5hbWVzCi0gICAgLy8gQVRURU5USU9OCi0gICAgLy8gc2hvdWxkIHdlIGFkZCBtZXNzYWdlIHdoaWNoIGlzIHJlZmVyZW5jZWQgYnkgaGVhZGVyIG9yIGhlYWRlcmZhdWx0IHRvIG1lc3NhZ2VzID8KLSAgICByZW1vdmVQYXJ0KGhlYWRlci5nZXRNZXNzYWdlKCksIGhlYWRlci5nZXRQYXJ0KCkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IGZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gd2Ugc3VwcG9zZSB0aGF0IGl0IHBvc3NpYmxlIHRvIGhhdmUgbGVnYWwgbWVzc2FnZSBhbmQgcGF0ciB3aXRoIG51bGwgbmFtZXMKLSAgICBRTmFtZSBtZXNzYWdlTmFtZSA9IGZhdWx0LmdldE1lc3NhZ2UoKTsKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gbnVsbCkKLSAgICAgIG1lc3NhZ2VOYW1lID0gY3R4LmdldFNPQVBIZWFkZXIoKS5nZXRNZXNzYWdlKCk7Ci0gICAgcmVtb3ZlUGFydChtZXNzYWdlTmFtZSwgZmF1bHQuZ2V0UGFydCgpKTsKLSAgfQotCi0gIC8qIAotICAgKiBSZW1vdmUgcGFydHMgb2Ygc29hcCBmYXVsdCBmcm9tIE1hcC4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBGYXVsdCBmYXVsdCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLSAgICBpZiAoZmF1bHROYW1lID09IG51bGwpCi0gICAgICBmYXVsdE5hbWUgPSBjdHguZ2V0QmluZGluZ0ZhdWx0KCkuZ2V0TmFtZSgpOwotICAgIE9wZXJhdGlvbiBvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0T3BlcmF0aW9uKCk7Ci0gICAgaWYgKG9wID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgU09BUEZhdWx0LmdldE5hbWUoKSBjb3JyZXNwb25kcyB0byB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9uJ3MgZmF1bHQgbmFtZSAgICAgICAgICAgCi0gICAgRmF1bHQgZiA9IG9wLmdldEZhdWx0KGZhdWx0TmFtZSk7Ci0KLSAgICAvLyBmYXVsdCBtZXNzYWdlIHNob3VsZCBoYXZlIDEgcGFydAotICAgIGlmIChmID09IG51bGwKLSAgICAgIHx8IGYuZ2V0TWVzc2FnZSgpID09IG51bGwKLSAgICAgIHx8IGYuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkuc2l6ZSgpICE9IDEpCi0gICAgICByZXR1cm47Ci0KLSAgICBQYXJ0IHAgPSAoUGFydCkgZi5nZXRNZXNzYWdlKCkuZ2V0T3JkZXJlZFBhcnRzKG51bGwpLmdldCgwKTsKLSAgICByZW1vdmVQYXJ0KGYuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIHAuZ2V0TmFtZSgpKTsKLSAgfQotCi0gIC8qCi0gICAqIFJlbW92ZSBwYXJ0IGZyb20gTWFwLiAKLSAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgLSBtZXNzYWdlCi0gICogQHBhcmFtIHBhcnROYW1lIC0gcGFydAotICAqLwotICAvLyByZWZhdG9yaW5nCi0gIHByaXZhdGUgdm9pZCByZW1vdmVQYXJ0KFFOYW1lIG1lc3NhZ2VOYW1lLCBTdHJpbmcgcGFydE5hbWUpCi0gIHsKLSAgICBTZXQgcGFydHMgPSAoU2V0KSBtZXNzYWdlcy5nZXQobWVzc2FnZU5hbWUpOwotICAgIGlmIChwYXJ0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnRzLnJlbW92ZShwYXJ0TmFtZSk7Ci0gICAgICBpZiAocGFydHMuc2l6ZSgpID09IDApCi0gICAgICAgIG1lc3NhZ2VzLnJlbW92ZShtZXNzYWdlTmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRNZXNzYWdlKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCb2R5KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXIodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlckZhdWx0KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotCi0gICAgQmluZGluZyBiID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKGIpOwotCi0gICAgaWYgKG1lc3NhZ2VzLnNpemUoKSA+IDApCi0gICAgICBlcnJvcnMuYWRkKGIuZ2V0UU5hbWUoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTk4Mjk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTUuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDptZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkFuICJlbGVtZW50IiBhdHRyaWJ1dGUgb24gYW55IHdzZGw6cGFydCBlbGVtZW50IHJlZmVycyB0byBhIGdsb2JhbCBlbGVtZW50IGRlY2xhcmF0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTUgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTE1KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIHByaXZhdGUgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5QYXJ0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBwYXJ0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwKLSAgICAgICYmIHJlZ2lzdHJ5LmdldFR5cGUocGFydC5nZXRFbGVtZW50TmFtZSgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIGVycm9ycy5hZGQoY3R4LmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpKTsKLSAgICAgIGN0eC5jYW5jZWxNZXNzYWdlUHJvY2Vzc2luZygpOwotICAgIH0KLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIHJlZ2lzdHJ5ID0KLSAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFBhcnQodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKE1lc3NhZ2UpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTlmZjA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotICogQlAyMTE2LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6bWVzc2FnZSBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOm1lc3NhZ2UgZWxlbWVudCBkb2VzIG5vdCBjb250YWluIHBhcnQgZWxlbWVudHMgdGhhdCB1c2UgYm90aCAidHlwZSIgYW5kICJlbGVtZW50IiBhdHRyaWJ1dGVzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTYoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUGFydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBwYXJ0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwgJiYgcGFydC5nZXRUeXBlTmFtZSgpICE9IG51bGwpCi0gICAgewotICAgICAgZXJyb3JzLmFkZChjdHguZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCkpOwotICAgICAgY3R4LmNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFBhcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChNZXNzYWdlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MDlmYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExNy4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50LCByZWZlcnJlZCB0byBieSBhbiBycGMtbGl0ZXJhbCBzb2FwOmJpbmRpbmc8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgcnBjLWxpdGVyYWwgYmluZGluZyBkb2VzIG5vdCBoYXZlIGEgbmFtZXNwYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgb24gYSBjb250YWluZWQgc29hcGJpbmQ6aGVhZGVyLCBzb2FwYmluZDpoZWFkZXJmYXVsdCwgYW5kIHNvYXBiaW5kOmZhdWx0IGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjExNyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTcoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBycGNMaXRlcmFsRm91bmQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoYmluZGluZy5nZXRTdHlsZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICA6IGJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIAotICAgKiBJZiB1c2Ugb2Ygc29hcCBib2R5IGlzICJsaXRlcmFsIiBhbmQgaWYgYXQgbGVhc3Qgb25lIHBhcnQgaXMgZGVmaW5lIHVzaW5nICJlbGVtZW50IiBhdHRyaWJ1dGUgaXQgY3JlYXRlcyBmYWx1cmUgcmVwb3J0LiAgICAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJvZHkgYm9keSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gYXNzZXJ0IHVzZSA9PSAibGl0ZXJhbCIKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQuZXF1YWxzKGJvZHkuZ2V0VXNlKCkpCi0gICAgICAmJiAoKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKSkuZXF1YWxzKAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDKSkKLSAgICB7Ci0gICAgICBycGNMaXRlcmFsRm91bmQgPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9IG9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgIGlmIChzdHlsZSA9PSBudWxsKQotICAgICAgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotCi0gICAgLy8gYXNzZXJ0IHN0eWxlICE9IG51bGwKLSAgICBpZiAoIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMuZXF1YWxzKHN0eWxlKSkKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBIZWFkZXIgaGVhZGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY2hlY2soaGVhZGVyLmdldFVzZSgpLCBoZWFkZXIuZ2V0TmFtZXNwYWNlVVJJKCksIGN0eCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgZmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjaGVjayhmYXVsdC5nZXRVc2UoKSwgZmF1bHQuZ2V0TmFtZXNwYWNlVVJJKCksIGN0eCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgZmF1bHQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGNoZWNrKGZhdWx0LmdldFVzZSgpLCBmYXVsdC5nZXROYW1lc3BhY2VVUkkoKSwgY3R4KTsKLSAgfQotCi0gIC8vIHJlZmFjdG9yaW5nCi0gIC8vIGNoZWNrIExJVEVSQUwgdXNlIGFuZCAhPSBuYW1lc3BhY2UKLSAgLy8gY2FuY2VsaW5nIGZ1cnRoZXIgcHJvY2Vzc2luZwotICBwcml2YXRlIHZvaWQgY2hlY2soU3RyaW5nIHVzZSwgU3RyaW5nIG5hbWVzcGFjZSwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElULmVxdWFscyh1c2UpCi0gICAgICAmJiBuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKGN0eC5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKSk7Ci0gICAgICAvLyAgICAgICAgICAgICAgc3VwcHJlc3NlcyBzdWJzZXF1ZW50IHByb2Nlc3NpbmcsIGJlY2F1c2UgZXJyb3IgbGlzdCBjb250YWlucyBvbmx5IGZhaWxlZCBiaW5kaW5nCi0gICAgICBjdHguY2FuY2VsUHJvY2Vzc2luZygpOwotICAgIH0KLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCb2R5KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXIodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlckZhdWx0KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotCi0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFycGNMaXRlcmFsRm91bmQpCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTRhNzMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTguCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBsaXN0IChvciBzZXQpIG9mIHdzZGw6b3BlcmF0aW9uIGVsZW1lbnRzIGZvciB0aGUgY29udGFpbmVkIHdzZGw6YmluZGluZyBpcyB0aGUgc2FtZSBhcyB0aGUgbGlzdCBvZiB3c2RsOm9wZXJhdGlvbnMgZm9yIHRoZSByZWZlcnJlZCB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvcCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gYXNzZXJ0IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24KLSAgICBpZiAob3AgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKGN0eC5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKSk7Ci0gICAgICAvLwkJCQlzdXBwcmVzc2VzIHN1YnNlcXVlbnQgcHJvY2Vzc2luZywgYmVjYXVzZSBlcnJvciBsaXN0IGNvbnRhaW5zIG9ubHkgZmFpbGVkIGJpbmRpbmcKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgQmluZGluZyBiID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgLy8gaWYgb3BlcmF0aW9ucyBjb3VudCBpbiBwb3J0IHR5cGUgYW5kIGJpbmRpbmcgaXMgZGlmZmVyIC0+IGVycm9yCi0gICAgaWYgKGIuZ2V0UG9ydFR5cGUoKSA9PSBudWxsCi0gICAgICB8fCBiLmdldFBvcnRUeXBlKCkuZ2V0T3BlcmF0aW9ucygpLnNpemUoKQotICAgICAgICAhPSBiLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuc2l6ZSgpKQotICAgICAgZXJyb3JzLmFkZChiLmdldFFOYW1lKCkpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgICB0cmF2ZXJzYWwudmlzaXRPcGVyYXRpb24odHJ1ZSk7Ci0gICAgICB0cmF2ZXJzYWwudHJhdmVyc2UoYik7Ci0gICAgfQotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RlMWE4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExOS4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZywgd2hpY2ggaXMgb2YgdHlwZSBkb2N1bWVudC1saXRlcmFsPC9jb250ZXh0PgotICAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SWYgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgcGFydHMgYXR0cmlidXRlIG9uIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LCB0aGUgY29ycmVzcG9uZGluZyBhYnN0cmFjdCB3c2RsOm1lc3NhZ2UgZGVmaW5lcyB6ZXJvIG9yIG9uZSB3c2RsOnBhcnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjExOSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBkb2NMaXRlcmFsRm91bmQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoYmluZGluZy5nZXRTdHlsZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICA6IGJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgIHN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKTsKLSAgICAvLyBhc3NlcnQgc3R5bGUgIT0gbnVsbAotICAgIGlmICghV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQy5lcXVhbHMoc3R5bGUpKQotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgdXNlID0KLSAgICAgIChib2R5LmdldFVzZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQKLSAgICAgICAgOiBib2R5LmdldFVzZSgpOwotCi0gICAgLy8gYXNzZXJ0IHN0eWxlID09ICJkb2N1bWVudCIKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQuZXF1YWxzKHVzZSkpCi0gICAgewotICAgICAgZG9jTGl0ZXJhbEZvdW5kID0gdHJ1ZTsKLSAgICAgIGlmIChib2R5LmdldFBhcnRzKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgaWYgKG9wID09IG51bGwpCi0gICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIE1hcCBwYXJ0cyA9IG51bGw7Ci0gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAob3AuZ2V0SW5wdXQoKSA9PSBudWxsIHx8IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgcGFydHMgPSBvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAob3AuZ2V0T3V0cHV0KCkgPT0gbnVsbCB8fCBvcC5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICBwYXJ0cyA9IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnRzICE9IG51bGwgJiYgcGFydHMuc2l6ZSgpID4gMSkKLSAgICAgICAgewotICAgICAgICAgIGVycm9ycy5hZGQoY3R4LmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpKTsKLSAgICAgICAgICAvLwkJCQkJCXN1cHByZXNzZXMgc3Vic2VxdWVudCBwcm9jZXNzaW5nLCBiZWNhdXNlIGVycm9yIGxpc3QgY29udGFpbnMgb25seSBmYWlsZWQgYmluZGluZwotICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nSW5wdXRQcm9jZXNzaW5nKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoIWRvY0xpdGVyYWxGb3VuZCkKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MjcyODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjEyMC4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBvcGVyYXRpb24gcmVmZXJlbmNlZCBieSB0aGUgYmluZGluZyByZXN1bHRzIGluIGEgdW5pcXVlIHdpcmUgc2lnbmF0dXJlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMjAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTIwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIHByaXZhdGUgU2V0IHdhcmVzID0gbmV3IEhhc2hTZXQoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgIT0gbnVsbCkKLSAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoInN0eWxlIiwgc3R5bGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBMaXN0IHNpZ25hdHVyZSA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0KLSAgICBTdHJpbmcgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotCi0gICAgLy8gZmluZCBjb3JyZXNwb25kaW5nIG1lc3NhZ2UKLSAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotCi0gICAgLy8gaWYgc29tZSBsaW5rcyBhcmUgYnJva2VuLCBjYW5jZWwgcHJvY2Vzc2luZwotICAgIGlmIChvcCA9PSBudWxsCi0gICAgICB8fCBvcC5nZXRJbnB1dCgpID09IG51bGwKLSAgICAgIHx8IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgTWVzc2FnZSBtID0gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICBMaXN0IHBhcnRzID0gV1NETFV0aWwuZ2V0UGFydHMob3AsIG0sIGJvZHksIHN0eWxlKTsKLSAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICAvLyAhISBBVFRFTlRJT04KLSAgICAvLyBtYXkgYmUgcmVxdWlyZWQgdG8gYWRkIHR5cGVzIGluc3RlYWQgb2YgcGFydCBpbnRvIHNpZ25hdHVyZSA/Ci0KLSAgICAvLyBjcmVhdGUgc2lnbmF0dXJlCi0gICAgc2lnbmF0dXJlLmFkZEFsbChwYXJ0cyk7Ci0KLSAgICAvLyBzdXBwb3NlIHRoYXQgd2lyZSBzaWduYXR1cmUgZm9yCi0gICAgLy8gLSBycGMgc3R5bGUgPSBvcGVyYXRpb24gbmFtZSArIHBhcnRzJyBxbmFtZQotICAgIC8vIC0gZG9jdW1lbnQgc3R5bGUgPSBwYXJ0cycgcW5hbWUKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQy5lcXVhbHMoc3R5bGUpKQotICAgICAgc2lnbmF0dXJlLmFkZCgwLCBvcC5nZXROYW1lKCkpOwotCi0gICAgaWYgKHNhbWVTaWduYXR1cmUod2FyZXMsIHNpZ25hdHVyZSkpCi0gICAgICBlcnJvcnMuYWRkKG9wLmdldE5hbWUoKSk7Ci0gICAgZWxzZQotICAgICAgd2FyZXMuYWRkKHNpZ25hdHVyZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdGhlIHNpZ25hdHVyZSBpcyBpbiB0aGUgc2V0IG1hdGNoLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHNhbWVTaWduYXR1cmUoU2V0IHNpZ25hdHVyZVNldCwgTGlzdCBzaWduYXR1cmUpCi0gIHsKLSAgICBib29sZWFuIHNhbWUgPSBmYWxzZTsKLQotICAgIC8vIEdldCBpdGVyYXRvciBmb3Igc2V0Ci0gICAgSXRlcmF0b3Igc2V0ID0gc2lnbmF0dXJlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKHNldC5oYXNOZXh0KCkgJiYgIXNhbWUpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgc2lnbmF0dXJlIGZyb20gdGhlIHNldAotICAgICAgTGlzdCBuZXh0U2lnbmF0dXJlID0gKExpc3QpIHNldC5uZXh0KCk7Ci0KLSAgICAgIC8vIE9ubHkgY29udGludWUgaWYgdGhlIHNpZ25hdHVyZXMgYXJlIHRoZSBzYW1lIHNpemUKLSAgICAgIGlmIChuZXh0U2lnbmF0dXJlLnNpemUoKSA9PSBzaWduYXR1cmUuc2l6ZSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpdGVyYXRvcjEgPSBuZXh0U2lnbmF0dXJlLml0ZXJhdG9yKCk7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yMiA9IHNpZ25hdHVyZS5pdGVyYXRvcigpOwotCi0gICAgICAgIC8vIEFzc3VtZSBzYW1lIHVudGlsIGEgZGlmZmVyZW5jZSBpcyBmb3VuZAotICAgICAgICBzYW1lID0gdHJ1ZTsKLQotICAgICAgICAvLyBQcm9jZXNzIGVhY2ggbGlzdCB1bnRpbCBhIGRpZmZlcmVuY2UgaXMgZm91bmQKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yMS5oYXNOZXh0KCkgJiYgaXRlcmF0b3IyLmhhc05leHQoKSAmJiBzYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGVsZW1lbnRzCi0gICAgICAgICAgT2JqZWN0IGVsZW1lbnQxID0gaXRlcmF0b3IxLm5leHQoKTsKLSAgICAgICAgICBPYmplY3QgZWxlbWVudDIgPSBpdGVyYXRvcjIubmV4dCgpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSBzdHJpbmcsIHRoZW4gaWYgZXF1YWwgY2hlY2sgcGFydHMKLSAgICAgICAgICBpZiAoKGVsZW1lbnQxIGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgICAgICAgJiYgKGVsZW1lbnQyIGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgICAgICAgJiYgKCgoU3RyaW5nKSBlbGVtZW50MSkuZXF1YWxzKChTdHJpbmcpIGVsZW1lbnQyKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc2FtZSA9IHRydWU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnRzIGFyZSBwYXJ0cywgdGhlbiBjaGVjayBpZiB0aGV5IGFyZSBlcXVhbAotICAgICAgICAgIGVsc2UgaWYgKChlbGVtZW50MSBpbnN0YW5jZW9mIFBhcnQpICYmIChlbGVtZW50MiBpbnN0YW5jZW9mIFBhcnQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNhbWUgPSBzYW1lUGFydHMoKFBhcnQpIGVsZW1lbnQxLCAoUGFydCkgZWxlbWVudDIpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzYW1lID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHNhbWU7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdHdvIHBhcnRzIGFyZSB0aGUgc2FtZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBzYW1lUGFydHMoUGFydCBwYXJ0MSwgUGFydCBwYXJ0MikKLSAgewotICAgIGJvb2xlYW4gc2FtZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIHBhcnQgaGFzIGFuIGVsZW1lbnQgdGhlbiBzZWUgaWYgdGhleSBhcmUgdGhlIHNhbWUKLSAgICBpZiAocGFydDEuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsCi0gICAgICAmJiBwYXJ0Mi5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwKLSAgICAgICYmIHBhcnQxLmdldEVsZW1lbnROYW1lKCkuZXF1YWxzKHBhcnQyLmdldEVsZW1lbnROYW1lKCkpKQotICAgIHsKLSAgICAgIHNhbWUgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBwYXJ0IGhhcyBhbiB0eXBlIHRoZW4gc2VlIGlmIHRoZXkgYXJlIHRoZSBzYW1lCi0gICAgZWxzZSBpZiAoCi0gICAgICBwYXJ0MS5nZXRUeXBlTmFtZSgpICE9IG51bGwKLSAgICAgICAgJiYgcGFydDIuZ2V0VHlwZU5hbWUoKSAhPSBudWxsCi0gICAgICAgICYmIHBhcnQxLmdldFR5cGVOYW1lKCkuZXF1YWxzKHBhcnQyLmdldFR5cGVOYW1lKCkpKQotICAgIHsKLSAgICAgIHNhbWUgPSB0cnVlOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzYW1lID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNhbWU7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIC8vICEhIEFUVEVOVElPTgotICAgIC8vIEFuYWx5emUgc29hcGJpbmQ6Ym9keTpuYW1lc3BhY2UgYW5kIHNlcnZpY2UgdGFyZ2V0TmFtZXNwYWNlICAgICAgICAgICAgCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFkNTk0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjEyMS4KLSAqIENvbnRleHQ6Ci0gKiBGb3IgIGEgd3NkbDpiaW5kaW5nIGVsZW1lbnQgd2hpY2ggaXMgcmVmZXJlbmNlZCBkaXJlY3RseSBvciBhc3NvY2lhdGVkCi0gKiB3aXRoIGEgc3BlY2lmaWVkIHdzZGw6cG9ydC4KLSAqIAotICogQXNzZXJ0aW9uIERlc2NyaXB0aW9uOgotICogRWFjaCAgb3BlcmF0aW9uIHJlZmVyZW5jZWQgYnkgYSBkb2N1bWVudC1saXRlcmFsIGJpbmRpbmcgbXVzdCBoYXZlIGEKLSAqIG1lc3NhZ2UgZGVmaW5pdGlvbiB3aGVyZSB0aGUgd3NkbDpwYXJ0IHJlZmVyZW5jZXMgYSBnbG9iYWwgZWxlbWVudAotICogZGVmaW5pdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEJQMjEyMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0KLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEyMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPSBudWxsOwotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgIHN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKTsKLSAgICAvLyBhc3NlcnQgc3R5bGUgIT0gbnVsbAotICAgIGlmICghV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQy5lcXVhbHMoc3R5bGUpKQotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyAhISBBVFRFTlRJT04KLSAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgc29hcGJvZHkgY2hpbGQgZWxlbWVudHMgaXMgaXRzIHBhcnRzLgotICAgIC8vIGFzc2VydCBzdHlsZSA9PSAiZG9jdW1lbnQiCi0gICAgaWYgKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElULmVxdWFscyhib2R5LmdldFVzZSgpKSkKLSAgICB7Ci0gICAgICAvLyBmaW5kIGNvcnJlc3BvbmRpbmcgbWVzc2FnZQotICAgICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICAgIC8vIGlmIHNvbWUgbGlua3MgYXJlIGJyb2tlbiwgY2FuY2VsIHByb2Nlc3NpbmcKLSAgICAgIGlmIChvcCA9PSBudWxsCi0gICAgICAgIHx8IChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQgJiYgb3AuZ2V0SW5wdXQoKSA9PSBudWxsKQotICAgICAgICB8fCAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCAmJiBvcC5nZXRPdXRwdXQoKSA9PSBudWxsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBNZXNzYWdlIG0gPQotICAgICAgICAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgICAgICAgID8gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICA6IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIGlmIChtID09IG51bGwpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgLy8gZmluZCBwYXJ0cyB3aGljaCBhcmUgaW52b2x2ZWQgaW4gdGhlIGdpdmVuIGJvZHkKLSAgICAgIExpc3QgcGFydHMgPQotICAgICAgICBXU0RMVXRpbC5nZXRQYXJ0cygKLSAgICAgICAgICBvcCwKLSAgICAgICAgICBtLAotICAgICAgICAgIGJvZHksCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQyk7Ci0gICAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICAvLyBjaGVjayBwYXJ0cwotICAgICAgSXRlcmF0b3IgaXQgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwID0gKFBhcnQpIGl0Lm5leHQoKTsKLSAgICAgICAgLy8gY2hlY2sgd2hldGhlciBwIGRlY2xhcmVkIGFzIGdsb2JhbCBlbGVtZW50Ci0gICAgICAgIGlmIChwLmdldEVsZW1lbnROYW1lKCkgPT0gbnVsbAotICAgICAgICAgIHx8IHJlZ2lzdHJ5LmdldFR5cGUocC5nZXRFbGVtZW50TmFtZSgpKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3JzLmFkZChvcC5nZXROYW1lKCkpOwotICAgICAgICAgIC8vCQkJCQkJc3VwcHJlc3NlcyBzdWJzZXF1ZW50IHByb2Nlc3NpbmcsIGJlY2F1c2UgZXJyb3IgbGlzdCBjb250YWlucyBvbmx5IGZhaWxlZCBvcGVyYXRpb24KLSAgICAgICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICByZWdpc3RyeSA9Ci0gICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgIHZhbGlkYXRvcik7Ci0KLSAgICAvLyBjb2xsZWN0IGFsbCB0eXBlcyBmcm9tIG1lc3NhZ2VzIHRvIGNoZWNrZWRQYXJ0cyBtYXAKLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmNhZjExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotCi0KLS8qKgotICogQlAyMTIyLiAKLSAqICAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiAgICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGRhdGEgdHlwZSBkZWZpbml0aW9uIGlmIGFueSB3aXRoaW4gdGhlIHdzZGw6dHlwZXMgZWxlbWVudCBpcyBhbiBYTUwgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgWE1MIFNjaGVtYSAxLjAgUmVjb21tZW5kYXRpb24gd2l0aCB0aGUgbmFtZXNwYWNlIFVSSSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMjIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICBFcnJvckxpc3QgZXJyb3JMaXN0ID0gbmV3IEVycm9yTGlzdCgpOwotCi0gICAgLy8gR2V0IHRoZSB0eXBlcyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50OwotICAgICAgTGlzdCBleHRFbGVtZW50cyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgICAvLyBQcm9jZXNzIGVhY2ggZXh0LiBlbGVtZW50Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1lbnRzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBJZiBpdCBpcyBhbiB1bmtub3duIGV4dC4gZWxlbWVudCBhbmQgaXQgaXMgYSBzY2hlbWEsIHRoZW4gY2hlY2sgaXQKLSAgICAgICAgaWYgKChleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoaSkpCi0gICAgICAgICAgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWV4dEVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NJVGFnLkVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgc2NoZW1hIGRlZmluaXRpb24sIHRoZW4gaXQgaXMgYW4gZXJyb3IKLSAgICAgICAgICAgIGVycm9yTGlzdC5hZGQoCi0gICAgICAgICAgICAgIGV4dEVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKS50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgKyAiIGNhbiBub3QgYmUgYSBjaGlsZCBvZiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIFhNTFNjaGVtYVZhbGlkYXRvciBjb3VsZCBub3QgZmluZCBhbnkgZXJyb3JzLCBjaGVjayBlcnJvcnMgZnJvbSB0aGUgaW5saW5lIHNjaGVtYSB2YWxpZGF0b3IKLSAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICAgIGVycm9yTGlzdC5hZGQodmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXRTY2hlbWFzVmFsaWRhdGlvbkVycm9ycygpKTsKLQotICAgIGlmICghZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9yTGlzdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNWY4MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDIxMjMuIAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnMsIGlmIGl0IGNvbnRhaW5zIGEgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Q29udGFpbmVkIFdTREwgZXh0ZW5zaW9uIGVsZW1lbnRzIGRvIG5vdCB1c2UgdGhlIHdzZGw6cmVxdWlyZWQgYXR0cmlidXRlIHZhbHVlIG9mICJ0cnVlIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTIzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEyMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGNsYWltRm91bmQgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVF9LRVkgPSAicG9ydCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0tFWSA9ICJiaW5kaW5nIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlRfVFlQRV9LRVkgPSAicG9ydCB0eXBlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9QRVJBVElPTl9LRVkgPSAib3BlcmF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfS0VZID0gIm1lc3NhZ2UiOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IHBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGNvbnRhaW5zTGVnYWxDbGFpbShwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgewotICAgICAgICBjbGFpbUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgY3R4LmFkZFBhcmFtZXRlcihQT1JUX0tFWSwgQm9vbGVhbi5UUlVFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY3R4LmFkZFBhcmFtZXRlcihQT1JUX0tFWSwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIEJvb2xlYW4gcG9ydCA9IChCb29sZWFuKSBjdHguZ2V0UGFyYW1ldGVyKFBPUlRfS0VZKTsKLQotICAgICAgaWYgKHBvcnQuYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoQklORElOR19LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgQklORElOR19LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oY29udGFpbnNMZWdhbENsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgdHlwZSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCb29sZWFuIGJpbmRpbmcgPSAoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihCSU5ESU5HX0tFWSk7Ci0KLSAgICAgIGlmIChiaW5kaW5nLmJvb2xlYW5WYWx1ZSgpKQotICAgICAgewotICAgICAgICBjdHguYWRkUGFyYW1ldGVyKFBPUlRfVFlQRV9LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKHR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgUE9SVF9UWVBFX0tFWSwKLSAgICAgICAgICBuZXcgQm9vbGVhbihjb250YWluc0xlZ2FsQ2xhaW0odHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCb29sZWFuIHR5cGUgPSAoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihQT1JUX1RZUEVfS0VZKTsKLQotICAgICAgaWYgKHR5cGUuYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoT1BFUkFUSU9OX0tFWSwgQm9vbGVhbi5UUlVFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY2xhaW1Gb3VuZCA9IGNvbnRhaW5zQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgICAgICBjdHguYWRkUGFyYW1ldGVyKAotICAgICAgICAgIE9QRVJBVElPTl9LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oCi0gICAgICAgICAgICBjb250YWluc0xlZ2FsQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5NZXNzYWdlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBtZXNzYWdlLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJvb2xlYW4gb3BlcmF0aW9uID0gKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoT1BFUkFUSU9OX0tFWSk7Ci0KLSAgICAgIGlmIChvcGVyYXRpb24uYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoTUVTU0FHRV9LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKG1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgTUVTU0FHRV9LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oY29udGFpbnNMZWdhbENsYWltKG1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKgotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KSB7Ci0gIAlpZiAob3BlcmF0aW9uICE9IG51bGwpIHsKLSAgCQlpZiAoY29udGFpbnNMZWdhbENsYWltKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkgewotICAJCQlTeXN0ZW0ub3V0LnByaW50bG4oImJpbmRpbmcgb3BlcmF0aW9uIGZvdW5kIik7Ci0gIAkJfSBlbHNlIHsKLSAgCQkJCi0gIAkJfQotICAJfQotICB9Ci0gICovCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGJvb2xlYW4gcmVxdWlyZWQgPQotICAgICAgZWwgIT0gbnVsbAotICAgICAgICAmJiBlbC5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICAgJiYgZWwuZ2V0UmVxdWlyZWQoKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIGlmIChpc1BhcmVudENvbmZvcm1zKHBhcmVudCwgY3R4KSkKLSAgICB7Ci0gICAgICBpZiAocmVxdWlyZWQpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBlbC50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFyZW50IGVsZW1lbnQgY29uZm9ybXMgdG8gdGhlIGJhc2ljIHByb2ZpbGUuCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICogQHBhcmFtIGN0eAotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1BhcmVudENvbmZvcm1zKE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0KLSAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgUG9ydCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoUE9SVF9LRVkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoCi0gICAgICBwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nCi0gICAgICAgIHx8IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0Ci0gICAgICAgIHx8IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQKLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihCSU5ESU5HX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoUE9SVF9UWVBFX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICgKLSAgICAgIHBhcmVudCBpbnN0YW5jZW9mIE9wZXJhdGlvbgotICAgICAgICB8fCBwYXJlbnQgaW5zdGFuY2VvZiBJbnB1dAotICAgICAgICB8fCBwYXJlbnQgaW5zdGFuY2VvZiBPdXRwdXQKLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgRmF1bHQpCi0gICAgewotICAgICAgcmVzdWx0ID0gKChCb29sZWFuKSBjdHguZ2V0UGFyYW1ldGVyKE9QRVJBVElPTl9LRVkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgTWVzc2FnZSB8fCBwYXJlbnQgaW5zdGFuY2VvZiBQYXJ0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihNRVNTQUdFX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBFeHBlY3Qgd3NkbDpkZWZpbnRpb25zCi0gICAgRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICAvLygoU2VydmljZSlkZWYuZ2V0U2VydmljZXMoKS52YWx1ZXMoKS50b0FycmF5KClbMF0pLmdldFBvcnRzKCkKLSAgICAvLyBUcmF2ZXJzZSBXU0RMCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vIFZpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdE1lc3NhZ2UodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0UG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQb3J0VHlwZSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlRGVmaW5pdGlvbjJCaW5kaW5nKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yRWxlbWVudCgpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVEZWZpbml0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yTWVzc2FnZSgpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVEZWZpbml0aW9uMlBvcnRUeXBlKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yVHlwZXMoKTsKLQotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWYpOwotCi0gICAgaWYgKCFjbGFpbUZvdW5kKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkcpKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGZhaWx1cmVEZXRhaWxNZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCB3aGV0aGVyIGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltcy4KLSAgICogUmV0dXJucyB0cnVlIGlmIGRvY3VtZW50YXRpb24gZWxlbWVudCBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbSB3aXRoCi0gICAqIGxlZ2FsIHNjaGVtYSBkZWZpbml0aW9uIFVSSS4gCi0gICAqIGxlZ2FsIGlzICdodHRwOi8vd3MtaS5vcmcvc2NoZW1hcy9jb25mb3JtYW5jZUNsYWltLycKLSAgICogQHBhcmFtIGVsCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zQ2xhaW0oRWxlbWVudCBlbCkKLSAgewotICAgIGlmIChlbCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIGZpbmQgY2xhaW0KLSAgICBlbCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0gICAgaWYgKGVsICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IHdoZXRoZXIgY29udGFpbnMgY29uZm9ybWFuY2UgY2xhaW1zLgotICAgKiBSZXR1cm5zIHRydWUgaWYgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltIHdpdGgKLSAgICogbGVnYWwgc2NoZW1hIGRlZmluaXRpb24gVVJJLiAKLSAgICogbGVnYWwgaXMgJ2h0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vJwotICAgKiBAcGFyYW0gZWwKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNMZWdhbENsYWltKEVsZW1lbnQgZWwpCi0gIHsKLSAgICBpZiAoZWwgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBmaW5kIGNsYWltCi0gICAgZWwgPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KGVsLCBXU0lfQ0xBSU0pOwotICAgIHdoaWxlIChlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB2YWx1ZSA9IGVsLmdldEF0dHJpYnV0ZShBVFRSX0NMQUlNX0NPTkZPUk1TVE8uZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgaWYgKHZhbHVlICE9IG51bGwKLSAgICAgICAgJiYgdmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGVsID0gWE1MVXRpbHMuZmluZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0ZGRmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLS8qKgotICogQlAyMjAxLiAKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBXZWIgc2VydmljZSBkZWZpbml0aW9uIHdpdGhpbiBhIFdTREwgZG9jdW1lbnQgd2l0aCBhIFhNTCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuIDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudCB1c2VzIFVURi04IG9yIFVURi0xNiBmb3IgdGhlIGVuY29kaW5nLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMjAxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGNoYXJbXSBPTU1JVEVEX1hNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXXsweDIwLAotICAgICAgMHg5LCAweEQsIDB4QSwgJ1wnJywgJ1wiJ307Ci0gIHByaXZhdGUgZmluYWwgY2hhcltdIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXXsnPSd9OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVVEZfOF9FTkNPRElORyA9ICJVVEYtOCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVURl8xNl9FTkNPRElORyA9ICJVVEYtMTYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTkNPRElOR19UT0tFTiA9ICJlbmNvZGluZyI7Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLAotICAgKiAgICAgIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKQotICAgICAgICAuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgIFN0cmluZyB4bWxEZWNsID0gcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KGxvY2F0aW9uKTsKLSAgICBpZiAoeG1sRGVjbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSBlbHNlCi0gICAgewotICAgICAgaWYgKCF2YWxpZEVuY29kaW5nKHhtbERlY2wpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHhtbERlY2wsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAvKioKLSAgICogUmVhZHMgYW4gWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBsb2NhdGlvbgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFVSTCB1cmwgPSBudWxsOwotICAgICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3ZSBzaG91bGQgdHJ5IHRvIGFjY2VzcyBsb2NhdGlvbiBhcyBmaWxlCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHVybCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKHVybC5vcGVuU3RyZWFtKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKGxvY2F0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGNoYXJDb2RlOwotICAgICAgICBib29sZWFuIGVuZCA9IGZhbHNlOwotICAgICAgICBpZiAocmVhZGVyLnJlYWR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICEoY2hhckNvZGUgPT0gJzwnKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNoYXJbXSBjID0gbmV3IGNoYXJbNF07Ci0gICAgICAgICAgcmVhZGVyLnJlYWQoYyk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBpZiAobmV3IFN0cmluZyhjKS50b0xvd2VyQ2FzZSgpLmVxdWFscygiP3htbCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjw/eG1sIik7Ci0gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnJlYWR5KCkgJiYgIWVuZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2hhckNvZGUgPSByZWFkZXIucmVhZCgpOwotICAgICAgICAgICAgICBidWYuYXBwZW5kKChjaGFyKSBjaGFyQ29kZSk7Ci0gICAgICAgICAgICAgIGVuZCA9IGNoYXJDb2RlID09ICc+JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlc3VsdCBkb2VzIG5vdCBnZXQgcHJvcG9nYXRlZCBiYWNrIQotICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy9WRVJCT1NFCi0gICAgICAgIGlmICh2YWxpZGF0b3IudmVyYm9zZU9wdGlvbikKLSAgICAgICAgewotICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICBbV1NJMjIwMV0gRXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAgICB9IGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIC8qCi0gICAqIFZlcmlmeSB4bWwgZGVjbGFyYXRpb24gY29udGFpbnMgdXRmLTE2IG9yIHV0Zi04IGVuY29kaW5nLiBAcGFyYW0geG1sRGVjbCAtCi0gICAqIHhtbCBkZWNsYXJhdGlvbiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRFbmNvZGluZyhTdHJpbmcgeG1sRGVjbCkKLSAgewotICAgIC8vYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaWYgKHhtbERlY2wgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKAotICAgICAgICAgIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMsIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTKTsKLSAgICAgIEVudW1lcmF0aW9uIHRva2VucyA9IHN0LnBhcnNlKHhtbERlY2wpOwotICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotICAgICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotICAgICAgICBpZiAodG9rZW4uZXF1YWxzKEVOQ09ESU5HX1RPS0VOKSkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICBTdHJpbmcgZW5jID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgcmVzdWx0ID0gVVRGXzhfRU5DT0RJTkcuZXF1YWxzSWdub3JlQ2FzZShlbmMpCi0gICAgICAgICAgICAgIHx8IFVURl8xNl9FTkNPRElORy5lcXVhbHNJZ25vcmVDYXNlKGVuYyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWVkMGQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjIwMi4KLSAqICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDp0eXBlcyBlbGVtZW50IHdpdGhpbiBhIFdTREwgZG9jdW1lbnQgd2hpY2ggaW1wb3J0cyBhbiBYTUwgc2NoZW1hIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBpbXBvcnRlZCBzY2hlbWEgdXNlcyBVVEYtOCBvciBVVEYtMTYgZm9yIHRoZSBlbmNvZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMjAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMjAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIHByaXZhdGUgZmluYWwgY2hhcltdIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMgPQotICAgIG5ldyBjaGFyW10geyAweDIwLCAweDksIDB4RCwgMHhBLCAnXCcnLCAnXCInIH07Ci0gIHByaXZhdGUgZmluYWwgY2hhcltdIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXSB7ICc9JyB9OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVVEZfOF9FTkNPRElORyA9ICJVVEYtOCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVURl8xNl9FTkNPRElORyA9ICJVVEYtMTYiOwotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEVOQ09ESU5HX1RPS0VOID0gImVuY29kaW5nIjsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgLy9EZWZpbml0aW9uIGRlZiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIExpc3QgZXh0cyA9IG51bGw7Ci0gICAgLy9pZiAoZGVmLmdldFR5cGVzKCkgIT0gbnVsbCkKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgIC8vZXh0cyA9IGRlZi5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgZXh0cyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlmIChleHRzICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICAgIGlmICgoZGVmaW5pdGlvbiA9Ci0gICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24odHlwZXMpKQotICAgICAgICA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCB0eXBlcyBkZWZpbml0aW9uIGluIGFueSBXU0RMIGRvY3VtZW50LiIpOwotICAgICAgfQotCi0gICAgICBJdGVyYXRvciBpdCA9IGV4dHMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChlbCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgICAgICYmIGVsLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKCgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBlbCkuZ2V0RWxlbWVudCgpLAotICAgICAgICAgICAgICBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFpbXBvcnRGb3VuZCkKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBuIC0gbm9kZQotICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9yU2NoZW1hKE5vZGUgbiwgU3RyaW5nIGNvbnRleHQsIExpc3QgcHJvY2Vzc2VkU2NoZW1hcykKLSAgewotCWlmICgobiE9IG51bGwpICYmICghcHJvY2Vzc2VkU2NoZW1hcy5jb250YWlucyhuKSkpCi0JewotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gaWYgeHNkOnNjaGVtYSBlbGVtZW50IGlzIGZvdW5kIC0+IHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHByb2Nlc3NTY2hlbWEobiwgY29udGV4dCwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZiB4c2Q6aW1wb3J0IGVsZW1lbnQgaXMgZm91bmQgLT4gbG9hZCBzY2hlbWEgYW5kIHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgbG9hZFNjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgLy8gZWxzZSBpdGVyYXRlIGVsZW1lbnQgcmVjdXJzaXZlbHkKLSAgICAgICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKG4uZ2V0Rmlyc3RDaGlsZCgpLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBJdCBsb2FkcyB4c2Qgc2NoZW1hIGFuZCB0aGVuIGNoZWNrIHZhbGlkIGVuY29kaW5nIGFuZCBsb29raW5nIGZvciB4c2Q6c2NoZW1hIGVsZW1lbnQgZm9yIG5leHQgcHJvY2Vzcy4gCi0gICAqIEBwYXJhbSBpbXBvcnROb2RlIC0geHNkIHNjaGVtYQotICAqLwotICBwcml2YXRlIHZvaWQgbG9hZFNjaGVtYShOb2RlIGltcG9ydE5vZGUsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLSAgICBFbGVtZW50IGltID0gKEVsZW1lbnQpIGltcG9ydE5vZGU7Ci0gICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAgIC8vIHRyeSB0byBwYXJzZSBpbXBvcnRlZCBYU0QKLSAgICBpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICE9IG51bGwpCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAgICAgICBTdHJpbmcgZGVjbCA9Ci0gICAgICAgICAgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpOwotICAgICAgICBpZiAoIXZhbGlkRGVjbGFyYXRpb24oZGVjbCwKLSAgICAgICAgICBFTkNPRElOR19UT0tFTiwKLSAgICAgICAgICBuZXcgU3RyaW5nW10geyBVVEZfOF9FTkNPRElORywgVVRGXzE2X0VOQ09ESU5HIH0pKQotICAgICAgICB7Ci0gICAgICAgICAgQXR0ciBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9OQU1FU1BBQ0UpOwotICAgICAgICAgIGVycm9ycy5hZGQoKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkRGVjbGFyYXRpb24oZGVjbCwgInZlcnNpb24iLCBuZXcgU3RyaW5nW10geyAiMS4wIiB9KSkKLSAgICAgICAgewotICAgICAgICAgIGVycm9ycy5hZGQoCi0gICAgICAgICAgICAiVmVyc2lvbiBudW1iZXIgaW4gWE1MIGRlY2xhcmF0aW9uIGlzIG5vdCAxLjAuICBYTUwgc2NoZW1hIGZpbGU6ICIKLSAgICAgICAgICAgICAgKyBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERFQlVHOgotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSArICI6IiArIGNvbnRleHQpOwotCi0gICAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gICAgICAgICAgdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0KLSAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgcHJvY2Vzc1NjaGVtYShzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KSwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBSZWFkcyBhbiBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LgotICAqIEBwYXJhbSBsb2NhdGlvbgotICAqIEByZXR1cm4gU3RyaW5nCi0gICovCi0gIHByaXZhdGUgU3RyaW5nIHJlYWRYTUxEZWNsYXJhdGlvblN0YXRlbWVudChTdHJpbmcgbG9jYXRpb24sIFN0cmluZyBiYXNlVVJJKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbmV3IFVSTChsb2NhdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICAvLyBub3RoaW5nCi0gICAgICBpbnQgaSA9IGJhc2VVUkkubGFzdEluZGV4T2YoJy8nKTsKLSAgICAgIGludCBqID0gYmFzZVVSSS5sYXN0SW5kZXhPZignXFwnKTsKLSAgICAgIGlmIChqID4gaSkKLSAgICAgICAgaSA9IGo7Ci0gICAgICBsb2NhdGlvbiA9IGJhc2VVUkkuc3Vic3RyaW5nKDAsIGkgKyAxKSArIGxvY2F0aW9uOwotICAgIH0KLQotICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFVSTCB1cmwgPSBudWxsOwotICAgICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHVybCA9IG5ldyBVUkwobG9jYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHdlIHNob3VsZCB0cnkgdG8gYWNjZXNzIGxvY2F0aW9uIGFzIGZpbGUKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1cmwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcih1cmwub3BlblN0cmVhbSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIobmV3IEZpbGVJbnB1dFN0cmVhbShsb2NhdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGNoYXJDb2RlOwotICAgICAgICBib29sZWFuIGVuZCA9IGZhbHNlOwotICAgICAgICBpZiAocmVhZGVyLnJlYWR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0KLSAgICAgICAgICB3aGlsZSAocmVhZGVyLnJlYWR5KCkgJiYgIShjaGFyQ29kZSA9PSAnPCcpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYXJDb2RlID0gcmVhZGVyLnJlYWQoKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAnPCcpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnVmLmFwcGVuZCgoY2hhcikgY2hhckNvZGUpOwotICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICFlbmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNoYXJDb2RlID0gcmVhZGVyLnJlYWQoKTsKLSAgICAgICAgICAgICAgYnVmLmFwcGVuZCgoY2hhcikgY2hhckNvZGUpOwotCi0gICAgICAgICAgICAgIGVuZCA9IGNoYXJDb2RlID09ICc+JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgcmVzdWx0IGRvZXMgbm90IGdldCBwcm9wb2dhdGVkIGJhY2shCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIkNhbm5vdCByZWFkIHRoZSBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LiI7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcmVzdWx0ID0gYnVmLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JzLmFkZChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIGlmIChyZWFkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKgotICAgKiBAcGFyYW0geG1sRGVjbCAtIHhtbCBkZWNsYXJhdGlvbgotICAgKiBAcmV0dXJuIGlmIHhtbCBkZWNsYXJhdGlvbiBjb250YWlucyBlbmNvZGluZz0idXRmLTE2IiBvciBlbmNvZGluZz0idXRmLTgiIGl0IHJldGlybnMgdHJ1ZS4gCi0gICovCi0KLSAgLy9wcml2YXRlIGJvb2xlYW4gdmFsaWRFbmNvZGluZyhTdHJpbmcgeG1sRGVjbCkKLSAgLy97Ci0gIC8vICAvL2Jvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gIC8vICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gIC8vICBpZiAoeG1sRGVjbCAhPSBudWxsKQotICAvLyAgewotICAvLyAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPQotICAvLyAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoCi0gIC8vICAgICAgICBPTU1JVEVEX1hNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTLAotICAvLyAgICAgICAgWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMpOwotICAvLyAgICBFbnVtZXJhdGlvbiB0b2tlbnMgPSBzdC5wYXJzZSh4bWxEZWNsKTsKLSAgLy8gICBib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0gIC8vICAgIHdoaWxlICh0b2tlbnMuaGFzTW9yZUVsZW1lbnRzKCkgJiYgIWZvdW5kKQotICAvLyAgICB7Ci0gIC8vICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gIC8vCi0gIC8vICAgICAgaWYgKHRva2VuLmVxdWFscyhFTkNPRElOR19UT0tFTikpCi0gIC8vICAgICAgewotICAvLyAgICAgICAgZm91bmQgPSB0cnVlOwotICAvLwotICAvLyAgICAgICAgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gIC8vICAgICAgICBTdHJpbmcgZW5jID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gIC8vCi0gIC8vICAgICAgICByZXN1bHQgPQotICAvLyAgICAgICAgIFVURl84X0VOQ09ESU5HLmVxdWFsc0lnbm9yZUNhc2UoZW5jKQotICAvLyAgICAgICAgICAgIHx8IFVURl8xNl9FTkNPRElORy5lcXVhbHNJZ25vcmVDYXNlKGVuYyk7Ci0gIC8vICAgICAgfQotICAvLyAgICB9Ci0gIC8vICB9Ci0gIC8vCi0gIC8vICByZXR1cm4gcmVzdWx0OwotICAvL30KLQotICAvKioKLSAgICogQHBhcmFtIHhtbERlY2wgLSB4bWwgZGVjbGFyYXRpb24KLSAgICogQHJldHVybiBpZiB4bWwgZGVjbGFyYXRpb24gY29udGFpbnMgdmFsaWQgdmVyc2lvbiBudW1iZXIgdGhlbiB0cnVlIGlzIHJldHVybmVkLiAKLSAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHZhbGlkRGVjbGFyYXRpb24oCi0gICAgU3RyaW5nIHhtbERlY2wsCi0gICAgU3RyaW5nIHRva2VuTmFtZSwKLSAgICBTdHJpbmdbXSBjaGVja1ZhbHVlTGlzdCkKLSAgewotICAgIC8vYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaWYgKHhtbERlY2wgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPQotICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKAotICAgICAgICAgIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMsCi0gICAgICAgICAgWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMpOwotICAgICAgRW51bWVyYXRpb24gdG9rZW5zID0gc3QucGFyc2UoeG1sRGVjbCk7Ci0KLSAgICAgIGlmICh0b2tlbnMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLQotICAgICAgICAgIGlmICh0b2tlbi5lcXVhbHModG9rZW5OYW1lKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLQotICAgICAgICAgICAgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdG9rZW5WYWx1ZSA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoZWNrVmFsdWVMaXN0Lmxlbmd0aCAmJiAhcmVzdWx0OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlTGlzdFtpXS5lcXVhbHNJZ25vcmVDYXNlKHRva2VuVmFsdWUpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyB0b2tlbnMgdGhlbiBpdCBpcyBub3QgYSB2YWxpZCBkZWNsYXJhY3Rpb24KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qCi0gICAqIEl0J3MgbG9va2luZyBmb3IgeHNkIGltcG9ydCBhbmQgbG9hZCBpdCBpZiBmaW5kLgotICAgKiBAcGFyYW0gc2NoZW1hIC0geHNkIHNjaGVtYQotICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gbmFtZXNwYWNlIG9mIHNjaGVtYQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NTY2hlbWEoTm9kZSBzY2hlbWEsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKHNjaGVtYSAhPSBudWxsKSAmJiAoIXByb2Nlc3NlZFNjaGVtYXMuY29udGFpbnMoc2NoZW1hKSkpCi0JewotCSAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIE5vZGUgbiA9IHNjaGVtYS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpCi0gICAgICAgICAgJiYgWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbXBvcnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgbG9hZFNjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgfQotCi0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNTk2MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDIyMDguCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpvcGVyYXRpb24gaW4gYSB3c2RsOnBvcnRUeXBlIGRlZmluaXRpb248L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6b3BlcmF0aW9uIGVsZW1lbnQgaXMgZWl0aGVyIGEgV1NETCByZXF1ZXN0L3Jlc3BvbnNlIG9yIGEgb25lLXdheSBvcGVyYXRpb24gKG5vIE5vdGlmaWNhdGlvbiBvciBTb2xsaWNpdC1SZXNwb25zZSkuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjIwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjIwOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9Ci0gICAgICAoT3BlcmF0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIE9wZXJhdGlvblR5cGUgb3BUeXBlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKChvcFR5cGUgPT0gbnVsbCkKLSAgICAgIHx8ICghb3BUeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLk9ORV9XQVkpCi0gICAgICAgICYmICFvcFR5cGUuZXF1YWxzKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSkpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgaWYgKG9wVHlwZSA9PSBudWxsKQotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG9wZXJhdGlvbiB0eXBlIGZvciAiCi0gICAgICAgICAgICAgICsgb3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICIuIiwKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOyAvLyBub25lIGRlZmluZWQgaW4gVEFEIGF0IHByZXNlbnQgCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGYzZGE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyNDAyLgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmJpbmRpbmcgZWxlbWVudCBoYXMgYSBzb2FwYmluZDpiaW5kaW5nIGNoaWxkIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjQwMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjQwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgLy8gR2V0IHRoZSBwb3J0IGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICAvL1BvcnQgcG9ydCA9IChQb3J0KSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gVHJ5IHRvIGdldCB0aGUgU09BUCBiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBXU0RMVmFsaWRhdG9ySW1wbC5nZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBTT0FQIEJpbmRpbmcKLSAgICBpZiAoc29hcEJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg4ZThkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyNDA0LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBjb250YWluZWQgc29hcDpiaW5kaW5nIGVsZW1lbnQgaGFzIGEgInRyYW5zcG9ydCIgYXR0cmlidXRlLCB3aGljaCBoYXMgdmFsdWU6IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyNDA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyNDA0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIGJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFdTRExWYWxpZGF0b3JJbXBsLmdldFNvYXBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIGZvciBTb2FwIGJpbmRpbmcgbmFtZXNwYWNlIAotICAgIGlmICgoc29hcEJpbmRpbmcgPT0gbnVsbCkKLSAgICAgIHx8IChzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKSA9PSBudWxsKQotICAgICAgfHwgIXNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVBfSFRUUCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBzb2FwQmluZGluZyA9PSBudWxsCi0gICAgICAgICAgPyAiV1NETCBkb2N1bWVudCBkb2VzIG5vdCBjb250YWluIFNPQVAgYmluZGluZyBlbGVtZW50LiIKLSAgICAgICAgICA6IHNvYXBCaW5kaW5nLnRvU3RyaW5nKCksCi0gICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDVkOGVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjQwNi4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudCwgaWYgdGhlIHVzZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIG9uIHRoZSBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpmYXVsdCwgc29hcGJpbmQ6aGVhZGVyLCBvciBzb2FwYmluZDpoZWFkZXJmYXVsdCBlbGVtZW50cy48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHVzZSBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUgb2YgImxpdGVyYWwiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDI0MDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDI0MDYoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgU09BUCBib2R5IGVsZW1lbnRzICAgICAgCi0gICAgU09BUEJvZHlbXSBzb2FwQm9kaWVzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEJvZGllcyhiaW5kaW5nKTsKLQotICAgIC8vIEFERDogV2hhdCBoYXBwZW5zIGlmIHRoZXJlIGFyZSBubyBzb2FwIGJvZHkgZWxlbWVudHM/ICBSaWdodCBub3cgdGhlIFRBIHJlc3VsdCBpcyBOQS4gICAgICAKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBmb3IgY29ycmVjdCB1c2UgdmFsdWUgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwQm9kaWVzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gc29hcEJvZGllc1tpXTsKLSAgICAgIGlmIChzb2FwQm9keS5nZXRVc2UoKSAhPSBudWxsCi0gICAgICAgICYmICFzb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChzb2FwQm9keS50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgU09BUCBmYXVsdCBlbGVtZW50cyAgICAgIAotICAgIFNPQVBGYXVsdFtdIHNvYXBGYXVsdHMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwRmF1bHRzKGJpbmRpbmcpOwotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIGZvciBjb3JyZWN0IHVzZSB2YWx1ZSAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBGYXVsdHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IHNvYXBGYXVsdHNbaV07Ci0gICAgICBpZiAoc29hcEZhdWx0LmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgJiYgIXNvYXBGYXVsdC5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgIChmYWlsdXJlRGV0YWlsTWVzc2FnZSA9PSBudWxsCi0gICAgICAgICAgICA/IHNvYXBGYXVsdC50b1N0cmluZygpCi0gICAgICAgICAgICA6IGZhaWx1cmVEZXRhaWxNZXNzYWdlICsgIlxuXG4iICsgc29hcEZhdWx0LnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgU09BUCBoZWFkZXIgZWxlbWVudHMgICAgICAKLSAgICBTT0FQSGVhZGVyW10gc29hcEhlYWRlcnMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwSGVhZGVycyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBmb3IgY29ycmVjdCB1c2UgdmFsdWUgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwSGVhZGVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSBzb2FwSGVhZGVyc1tpXTsKLSAgICAgIGlmIChzb2FwSGVhZGVyLmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgJiYgIXNvYXBIZWFkZXIuZ2V0VXNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAoZmFpbHVyZURldGFpbE1lc3NhZ2UgPT0gbnVsbAotICAgICAgICAgICAgPyBzb2FwSGVhZGVyLnRvU3RyaW5nKCkKLSAgICAgICAgICAgIDogZmFpbHVyZURldGFpbE1lc3NhZ2UgKyAiXG5cbiIgKyBzb2FwSGVhZGVyLnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgU09BUCBoZWFkZXIgZmF1bHQgZWxlbWVudHMgICAgICAKLSAgICBTT0FQSGVhZGVyRmF1bHRbXSBzb2FwSGVhZGVyRmF1bHRzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEhlYWRlckZhdWx0cyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBmb3IgY29ycmVjdCB1c2UgdmFsdWUgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwSGVhZGVyRmF1bHRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNPQVBIZWFkZXJGYXVsdCBzb2FwSGVhZGVyRmF1bHQgPSBzb2FwSGVhZGVyRmF1bHRzW2ldOwotICAgICAgaWYgKHNvYXBIZWFkZXJGYXVsdC5nZXRVc2UoKSAhPSBudWxsCi0gICAgICAgICYmICFzb2FwSGVhZGVyRmF1bHQuZ2V0VXNlKCkuZXF1YWxzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAoZmFpbHVyZURldGFpbE1lc3NhZ2UgPT0gbnVsbAotICAgICAgICAgICAgPyBzb2FwSGVhZGVyRmF1bHQudG9TdHJpbmcoKQotICAgICAgICAgICAgOiBmYWlsdXJlRGV0YWlsTWVzc2FnZSArICJcblxuIiArIHNvYXBIZWFkZXJGYXVsdC50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsLnNldEZhaWx1cmVNZXNzYWdlKGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBwYXNzZWQsIGJ1dCB0aGVyZSB3YXMgbm90aGluZyB0byBjaGVjayB0aGVuIHNldCB0byBub3RBcHBsaWNhYmxlCi0gICAgaWYgKHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRAotICAgICAgJiYgKHNvYXBCb2RpZXMgPT0gbnVsbCB8fCBzb2FwQm9kaWVzLmxlbmd0aCA9PSAwKQotICAgICAgJiYgKHNvYXBGYXVsdHMgPT0gbnVsbCB8fCBzb2FwRmF1bHRzLmxlbmd0aCA9PSAwKQotICAgICAgJiYgKHNvYXBIZWFkZXJzID09IG51bGwgfHwgc29hcEhlYWRlcnMubGVuZ3RoID09IDApCi0gICAgICAmJiAoc29hcEhlYWRlckZhdWx0cyA9PSBudWxsIHx8IHNvYXBIZWFkZXJGYXVsdHMubGVuZ3RoID09IDApKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTFlYmEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotKiBCUDI0MTYuIAotKiAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zPC9jb250ZXh0PgotKiAgIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5FdmVyeSBRTmFtZSBpbiB0aGUgV1NETCBkb2N1bWVudCBhbmQgaXRzIGltcG9ydHMsIGlzIHJlZmVyZW5jaW5nIGFuIGVsZW1lbnQgaW4gYSBuYW1lc3BhY2UgdGhhdCBoYXMgZWl0aGVyIGJlZW4gaW1wb3J0ZWQgb3IgZGVmaW5lZCBpbiB0aGUgV1NETCBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRoZSByZWZlcmVuY2UuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSovCi1wdWJsaWMgY2xhc3MgQlAyNDE2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjQxNihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX0xJU1RfS0VZID0gIm5hbWVzcGFjZXMiOwotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0aGUgbmFtZXNwYWNlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEBwYXJhbSBxbmFtZQotICAgKiBAcGFyYW0gY3R4Ci0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tOYW1lc3BhY2UoUU5hbWUgcW5hbWUsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBxbmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IG5hbWVzcGFjZXMgPSAoTGlzdCkgY3R4LmdldFBhcmFtZXRlcihOU19MSVNUX0tFWSk7Ci0KLSAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmNvbnRhaW5zKG5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9IG5hbWVzcGFjZTsKLQotICAgICAgICAgIGN0eC5jYW5jZWxQcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gLy8gPz8/IHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgb3RoZXJ3aXNlICAKLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBvcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IHBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBjaGVja05hbWVzcGFjZShiaW5kaW5nLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFBvcnRUeXBlIHBUeXBlID0gYmluZGluZy5nZXRQb3J0VHlwZSgpOwotICAgICAgaWYgKHBUeXBlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNoZWNrTmFtZXNwYWNlKHBUeXBlLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5PcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIElucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldElucHV0KCk7Ci0gICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY2hlY2tOYW1lc3BhY2UoaW5wdXQuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0KLSAgICAgIE91dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCk7Ci0gICAgICBpZiAob3V0cHV0ICE9IG51bGwgJiYgb3V0cHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBjaGVja05hbWVzcGFjZShvdXRwdXQuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0KLSAgICAgIE1hcCBmYXVsdHMgPSBvcGVyYXRpb24uZ2V0RmF1bHRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBmYXVsdHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdCkgaXRlci5uZXh0KCk7Ci0KLSAgICAgICAgaWYgKGZhdWx0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgY2hlY2tOYW1lc3BhY2UoZmF1bHQuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk1lc3NhZ2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICAvKiBSRU1PVkU6IFRoaXMgaXMgYWxyZWFkeSBkb25lIGluIFdTSTI0MTcKLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBtZXNzYWdlLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpIHsKLSAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKLSAgICAgTWFwIHBhcnRzID0gbWVzc2FnZS5nZXRQYXJ0cygpOwotICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJ0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaXRlci5uZXh0KCk7Ci0gICAgICAgCi0gICAgICAgY2hlY2tOYW1lc3BhY2UocGFydC5nZXRFbGVtZW50TmFtZSgpLCBjdHgpOyAgICAgICAgICAgICAgICAKLSAgICAgICBjaGVja05hbWVzcGFjZShwYXJ0LmdldFR5cGVOYW1lKCksIGN0eCk7Ci0gICAgIH0KLSAgIH0KLSAgfQotICAqLwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gZ2V0IGxpc3Qgb2YgbmFtZXNwYWNlcyBpbXBvcnRlZCBhbmQgZGVmaW5lZCBpbiB0aGUgZGVmaW5pdGlvbgotICAgIExpc3QgbmFtZXNwYWNlcyA9IHRoaXMudmFsaWRhdG9yLmdldFdTRExUYXJnZXROYW1lc3BhY2VMaXN0KGRlZmluaXRpb24pOwotCi0gICAgLy8gUkVNT1ZFOgotICAgIC8vTWFwIG5hbWVzcGFjZXMgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLQotICAgIC8vIHRyYXZlcnNlIGRlZmluaXRpb24gdG8gY2hlY2sgbmFtZXNwYWNlcwotICAgIE1hcCBwYXJhbXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIHBhcmFtcy5wdXQoTlNfTElTVF9LRVksIG5hbWVzcGFjZXMpOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vIFZpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdE1lc3NhZ2UodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0UG9ydCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWZpbml0aW9uLCBwYXJhbXMpOwotCi0gICAgaWYgKHJlc3VsdC5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpKQotICAgIHsKLSAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzQzZDQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDI0MTcuIAotICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9uczwvY29udGV4dD4KLSAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPkV2ZXJ5IFFOYW1lIGluIHRoZSBXU0RMIGRvY3VtZW50IGFuZCBpdHMgaW1wb3J0cyBhbmQgdGhhdCAKLSAqICAgICAgaXMgcmVmZXJyaW5nIHRvIGEgc2NoZW1hIGNvbXBvbmVudCwgdXNlcyB0aGUgbmFtZXNwYWNlIGRlZmluZWQgaW4gdGhlIHRhcmdldE5hbWVzcGFjZSAKLSAqICAgICAgYXR0cmlidXRlIG9uIHRoZSB4czpzY2hlbWEgZWxlbWVudCwgb3IgYSBuYW1lc3BhY2UgZGVmaW5lZCBpbiB0aGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSAKLSAqICAgICAgb24gYW4geHM6aW1wb3J0IGVsZW1lbnQgd2l0aGluIHRoZSB4czpzY2hlbWEgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyNDE3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjQxNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JMaXN0ID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTElTVF9LRVkgPSAibmFtZXNwYWNlcyI7Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBuYW1lc3BhY2UgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCBpbiB0aGUgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIHFuYW1lCi0gICAqIEBwYXJhbSBjdHgKLSAgICovCi0gIHByaXZhdGUgdm9pZCBjaGVja05hbWVzcGFjZShRTmFtZSBxbmFtZSwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbmFtZXNwYWNlTGlzdCA9IChMaXN0KSBjdHguZ2V0UGFyYW1ldGVyKE5TX0xJU1RfS0VZKTsKLQotICAgICAgICBpZiAoKG5hbWVzcGFjZUxpc3QgIT0gbnVsbCkgJiYgIW5hbWVzcGFjZUxpc3QuY29udGFpbnMobmFtZXNwYWNlKSkKLSAgICAgICAgewotICAgICAgICAgIGVycm9yTGlzdC5hZGQocW5hbWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk1lc3NhZ2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG1lc3NhZ2UsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgTWFwIHBhcnRzID0gbWVzc2FnZS5nZXRQYXJ0cygpOwotCi0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJ0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdGVyLm5leHQoKTsKLQotICAgICAgICBjaGVja05hbWVzcGFjZShwYXJ0LmdldEVsZW1lbnROYW1lKCksIGN0eCk7Ci0gICAgICAgIGNoZWNrTmFtZXNwYWNlKHBhcnQuZ2V0VHlwZU5hbWUoKSwgY3R4KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPQotICAgICAgKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgYSBsaXN0IG9mIGFsbCBzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlcwotICAgIExpc3QgdG5zTGlzdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKCh0bnNMaXN0ID0gdGhpcy52YWxpZGF0b3IuZ2V0U2NoZW1hTmFtZXNwYWNlTGlzdChkZWZpbml0aW9uKSkgPT0gbnVsbCkKLSAgICAgICAgdG5zTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gVGhpcyBleGNlcHRpb24gd291bGQgaW5kaWNhdGUgdGhhdCB0aGUgc2NoZW1hIGRlZmluaXRpb24gaGFkIGEgcHJvYmxlbQotICAgICAgdG5zTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICB9Ci0KLSAgICAvLyBBbHdheXMgYWRkIFhNTCBzY2hlbWEgbmFtZXNwYWNlIHRvIGNvdmVyIGJ1aWx0LWluIHR5cGVzCi0gICAgdG5zTGlzdC5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QpOwotCi0gICAgLy8gVHJhdmVyc2UgZGVmaW5pdGlvbiB0byBjaGVjayBzY2hlbWEgbmFtZXNwYWNlcwotICAgIE1hcCBwYXJhbXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIHBhcmFtcy5wdXQoTlNfTElTVF9LRVksIHRuc0xpc3QpOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE1lc3NhZ2UodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoZGVmaW5pdGlvbiwgcGFyYW1zKTsKLQotICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gZXJyb3JzLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgaWYgKGVycm9yTGlzdC5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlIGl0IGZhaWxlZCAvIGNyZWF0ZSB0aGUgZmFpbHVyZSBkZXRhaWwgdXNpbmcgdGhlIFFOYW1lcyB0aGF0IHdlcmUgaW4gZXJyb3IKLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvckxpc3QudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNjRlMTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0vKioKLSAgKiBCUDI3MDAuCi0gICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9ucyBlbGVtZW50IHdpdGhpbiBhIFdTREwgZG9jdW1lbnQuPC9jb250ZXh0PgotICAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmRlZmluaXRpb25zIGlzIGEgd2VsbC1mb3JtZWQgWE1MIDEuMCBkb2N1bWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICAqLwotcHVibGljIGNsYXNzIEJQMjcwMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjcwMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvL1N0cmluZyB3c2RsVVJJID0gZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCkuZ2V0RG9jdW1lbnRCYXNlVVJJKCk7ICAKLSAgICAgIC8vIFRFTVA6IE5lZWQgdG8gZGVmaW5lIGEgYmV0dGVyIHdheSB0byBnZXQgdGhlIFdTREwgVVJJCi0gICAgICBTdHJpbmcgd3NkbFVSSSA9IGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldFJlZmVyZW5jZUlEKCk7Ci0gICAgICAvLyBub24tdmFsaWRhdGluZyBwYXJzZQotICAgICAgdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwod3NkbFVSSSwgbnVsbCk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgIFV0aWxzLmdldEV4Y2VwdGlvbkRldGFpbHMoZS5nZXRUYXJnZXRFeGNlcHRpb24oKSksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKFV0aWxzLmdldEV4Y2VwdGlvbkRldGFpbHMoZSksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjRjMWY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI3MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gICogQlAyNzAxLgotICAqICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnMgZWxlbWVudCB3aXRoaW4gYSBXU0RMIGRvY3VtZW50LjwvY29udGV4dD4KLSAgKiAgIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgd3NkbDpkZWZpbml0aW9ucyBuYW1lc3BhY2UgaGFzIHZhbHVlOiBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICAqLwotcHVibGljIGNsYXNzIEJQMjcwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjcwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8qCi0gICAgaWYgKGRlZiAhPSBudWxsKSB7Ci0gICAgCVFOYW1lIHFuYW1lID0gZGVmLmdldFFOYW1lKCk7Ci0gICAgCQkJCQotICAgIAlpZiAocW5hbWUgIT0gbnVsbCkgewkKLSAgICAJCS8vaWYgKGRlZi5nZXROYW1lc3BhY2UoIiIpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTREwpIHsKLSAgICAJCWlmIChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSkgewotICAgIAkJCXJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotICAgICovCi0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgc2NoZW1hVXNlZCA9IHRoaXMudmFsaWRhdG9yLmdldFNjaGVtYVVzZWQoZGVmKTsKLSAgICAgIGlmIChzY2hlbWFVc2VkLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTREwpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgLy9BREQ6IGZhaWx1cmUgZGVzY3JpcHRpb24/Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTI1NjUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI3MDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyNzAzLgotICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZGVzY3JpcHRpb24gd2l0aGluIGEgV1NETCBkb2N1bWVudCwgaWYgaXQgdXNlcyB0aGUgV1NETCBuYW1lc3BhY2U8L2NvbnRleHQ+Ci0gKiAgIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgZGVmaW5pdGlvbiBjb25mb3JtcyB0byB0aGUgV1NETCBzY2hlbWEgbG9jYXRlZCBhdCBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLzIwMDMtMDItMTEueHNkPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjcwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjcwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gbm90ZSB0aGF0IHRoaXMgYXNzZXJ0aW9uIGlzIHJlZHVuZGFudCwgc2luY2UgdGhlIGJhc2Ugd3NkbCB2YWxpZGF0b3IgY2hlY2tzIHRoaXMgYWxyZWFkeS4KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyODAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyODAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNjAyYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjgwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLQotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjgwMwotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6aW1wb3J0IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlICJuYW1lc3BhY2UiIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgZm9yIHRoZSB3c2RsOmltcG9ydCBlbGVtZW50LCBhbmQgdGhlIGF0dHJpYnV0ZSdzIHZhbHVlIGlzIG5vdCBhIHJlbGF0aXZlIFVSSS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyODAzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyODAzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyB3c2RsOmltcG9ydAotICAgIEltcG9ydCBpbSA9IChJbXBvcnQpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgIm5hbWVzcGFjZSIgYXR0cmlidXRlIGluIHRoZSBpbXBvcnQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoaW0uZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgYSBuYW1lc3BhY2UgVVJJIGlzIHJlbGF0aXZlIG9yIGludmFsaWQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBVUkkgdXJpID0gbmV3IFVSSShpbS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBpZiAoIXVyaS5pc0Fic29sdXRlKCkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIGltLmdldE5hbWVzcGFjZVVSSSgpICsgIiBpcyByZWxhdGl2ZSBVUkkuIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYzA2NWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLS8qKgotICogQlA0MjAwLiAKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zIHRoYXQgY29udGFpbnMgYSB3c2RsIGV4dGVuc2lvbiBlbGVtZW50IG9yIGF0dHJpYnV0ZSBmcm9tIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5Db250YWluZWQgV1NETCBleHRlbnNpb24gZWxlbWVudHMgdGhhdCBkbyBub3QgYmVsb25nIHRvIHRoZSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZXNwYWNlcyBtYXkgcmVxdWlyZSBvdXQgb2YgYmFuZCBuZWdvdGlhdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotKi8KLXB1YmxpYyBjbGFzcyBCUDQyMDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JMaXN0ID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDQyMDAoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iaiwgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBJZiBhIGNoaWxkIGVsZW1lbnQgb2Ygd3NkbDp0eXBlcyBpcyBmcm9tIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4KLSAgICAvLyAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFR5cGVzKQotICAgIHsKLSAgICAgIC8vaWYgKCFvYmouZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoCi0gICAgICAvLyAgV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QpKQotICAgICAgLy97Ci0gICAgICAvLyAgQWRkIGVsZW1lbnQgbmFtZSB0byBlcnJvciBsaXN0Ci0gICAgICAvLyAgZXJyb3JMaXN0LmFkZChvYmouZ2V0RWxlbWVudFR5cGUoKSk7Ci0gICAgICAvL30KLSAgICB9Ci0gICAgLy8gb3IgYW55IG90aGVyIGV4dCBlbGVtZW50IGNvbWluZyBmcm9tIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4KLSAgICAvLyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLSAgICBlbHNlIGlmICghb2JqLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQKQotICAgIAkgICYmICFvYmouZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSkKLSAgICB7Ci0gICAgICAvLyBBZGQgZWxlbWVudCBuYW1lIHRvIGVycm9yIGxpc3QKLSAgICAgIGVycm9yTGlzdC5hZGQob2JqLmdldEVsZW1lbnRUeXBlKCkpOyAKLSAgICB9Ci0gIH0KLQotICAgLyoqCi0gICogIChub24tSmF2YWRvYykKLSAgKiAgQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotCi0gICAgdHJhdmVyc2FsLnZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWZpbml0aW9uKTsKLQotICAgIHRyeQotCXsKLSAgICAgIC8vIGdldHRpbmcgV1NETCBkb2N1bWVudC4KLSAgICAgIERvY3VtZW50IGRvYyA9IHZhbGlkYXRvci5wYXJzZVhNTERvY3VtZW50VVJMKGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIG51bGwpOwotICAgICAgaWYgKGRvYyAhPSBudWxsKQotICAgICAgeyAgIAotICAgICAgICBjaGVja0VsZW1lbnQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLQotICAgICAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSArICJcblxuIiArIGVycm9yTGlzdC50b1N0cmluZygpLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQl9ICAgCi0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLQl9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgb24gd3NkbCBlbGVtZW50cyByZWN1cnNpdmVseSB3aGV0aGVyIHRoZXkgY29udGFpbiBleHRlbnNpb24gYXR0cmlidXRlcy4KLSAgICogQHBhcmFtIGVsZW0gRWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjaGVja0VsZW1lbnQoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgd2hpbGUgKGVsZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgZWxlbU5TID0gZWxlbS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRycyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgICAgaWYgKGF0dHJzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIEF0dHIgYXR0ciA9IChBdHRyKSBhdHRycy5pdGVtKGkpOwotICAgICAgICAgIFN0cmluZyBhdHRyTlMgPSBhdHRyLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgIGlmIChhdHRyTlMgIT0gbnVsbAotICAgICAgICAgICAgJiYgIWF0dHJOUy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUxOUykKLSAgICAgICAgICAgICYmICFhdHRyTlMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCkKLQkJCSYmICFhdHRyTlMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvckxpc3QuYWRkKCJFeHRlbnNpYmlsaXR5IGF0dHJpYnV0ZSAiICsgYXR0ci5nZXROYW1lKCkKLSAgICAgICAgICAgICAgKyAiZm9yIHRoZSAiICsgZWxlbS5nZXROb2RlTmFtZSgpICsgIiBlbGVtZW50IGlzIGZvdW5kLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoIWVsZW1OUy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QpKQotICAgICAgewotICAgICAgICBjaGVja0VsZW1lbnQoWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtKSk7Ci0gICAgICB9Ci0gICAgICBlbGVtID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoZWxlbSk7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWYxMzFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotKiBCUDQyMDEuIAotKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDppbXBvcnQgZWxlbWVudCwgd2hlcmUgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSBvciB0aGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSB0aGF0IGlzIGEgcmVsYXRpdmUgVVJJLCBvciBhIGZvciBzb2FwOmFkZHJlc3MgZWxlbWVudCB3aGVyZSB0aGUgbG9jYXRpb24gYXR0cmlidXRlIGlzIGEgcmVsYXRpdmUgVVJJLjwvY29udGV4dD4KLSogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB1c2Ugb2YgYSByZWxhdGl2ZSBVUkkgYXMgdGhlIHZhbHVlIGZvciBhIHdzZGw6aW1wb3J0IGxvY2F0aW9uIG9yIG5hbWVzcGFjZSBhdHRyaWJ1dGUsIG9yIGZvciBhIHNvYXA6YWRkcmVzcyBsb2NhdGlvbiBhdHRyaWJ1dGUgbWF5IHJlcXVpcmUgb3V0IG9mIGJhbmQgY29vcmRpbmF0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0qLwotcHVibGljIGNsYXNzIEJQNDIwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDQyMDEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvckxpc3QgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyoqIAotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChJbXBvcnQsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZihvYmogIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZihpc1JlbGF0aXZlVVJJKG9iai5nZXROYW1lc3BhY2VVUkkoKSkgfHwgCi0gICAgICAgICAgaXNSZWxhdGl2ZVVSSShvYmouZ2V0TG9jYXRpb25VUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIGVycm9yTGlzdC5hZGQob2JqLmdldE5hbWVzcGFjZVVSSSgpLCBvYmouZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqIAotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmKG9iaiAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAgT2JqZWN0IGUgPSAoT2JqZWN0KSBpdC5uZXh0KCk7Ci0gICAgICAgICAvLyBmb3IgZWFjaCBTT0FQQWRkcmVzcyBlbGVtZW50cyBjaGVjayBMb2NhdGlvblVSSSAKLSAgICAgICAgIGlmKGUgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykgewotICAgICAgICAgICBpZihpc1JlbGF0aXZlVVJJKCgoU09BUEFkZHJlc3MpIGUpLmdldExvY2F0aW9uVVJJKCkpKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgZXJyb3JMaXN0LmFkZCgoKFNPQVBBZGRyZXNzKSBlKS5nZXRFbGVtZW50VHlwZSgpICsgCi0gICAgICAgICAgICAgICAgICI6IiArICgoU09BUEFkZHJlc3MpIGUpLmdldExvY2F0aW9uVVJJKCkpOwotICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqICAobm9uLUphdmFkb2MpCi0gICAqICBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIGRlZmluaXRpb24gZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRJbXBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0UG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWZpbml0aW9uKTsKLQotICAgIGlmIChlcnJvckxpc3QuaXNFbXB0eSgpKSAKLSAgICB7Ci0gICAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgCi0gICAgICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSwgKFN0cmluZykgbnVsbCk7Ci0gICAgfQotICAgIAotICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHRlc3RBc3NlcnRpb24uZ2V0RmFpbHVyZU1lc3NhZ2UoKSArIAotICAgICAgICAiXG5cbiIgKyBlcnJvckxpc3QudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBVUkkgaXMgcmVsYXRpdmUgCi0gICAqIEBwYXJhbSBzIC0gVVJJCi0gICAqIEByZXR1cm4gdHJ1ZSAtIGlmIFVSSSBpcyByZWxhdGl2ZSwgZmFsc2UgLSBpbiBvdGhlciBjYXNlICAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1JlbGF0aXZlVVJJKFN0cmluZyBzKQotICB7Ci0gICAgaWYocyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKG5ldyBqYXZhLm5ldC5VUkkocykuaXNBYnNvbHV0ZSgpKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM3OTFlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWEuWE1MU2NoZW1hUHJvY2Vzc29yOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQNDIwMi4gCi0gKiA8Y29udGV4dD5Gb3IgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uIGRlZmluZWQgaW4gdGhlIHdzZGw6dHlwZXMgZWxlbWVudCwgb3IgaW1wb3J0ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSBhIHNjaGVtYSBkZWZpbml0aW9uIGRlZmluZWQgaW4gdGhlIHdzZGw6dHlwZXMgZWxlbWVudCwgd2hpY2ggY29udGFpbnMgYW55IHNjaGVtYSBhbm5vdGF0aW9uIGVsZW1lbnRzLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BbiBYTUwgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LCBvciBpbXBvcnRlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5IGEgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LCBtYXkgdXNlIHNjaGVtYSBhbm5vdGF0aW9uIGVsZW1lbnRzIGFzIGFuIGV4dGVuc2liaWxpdHkgbWVjaGFuaXNtLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLSBwdWJsaWMgY2xhc3MgQlA0MjAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcgCi0gewotICAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQNDIwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFOTk9UQVRJT05fS0VZID0gImFubm90YXRpb24iOwotICAgCi0gICBwcml2YXRlIEVycm9yTGlzdCBlcnJvckxpc3QgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gICBwcml2YXRlIEFubm90YXRpb25Qcm9jZXNzb3IgcHJvY2Vzc29yOwotCi0gICAvKiogCi0gICAgKiAobm9uLUphdmFkb2MpCi0gICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoTWVzc2FnZSwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAqLwotICAgcHVibGljIHZvaWQgdmlzaXQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICB7Ci0gICAgIGlmKChvYmogIT0gbnVsbCkgJiYgKG9iaiBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkpCi0gICAgIHsKLSAgICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBvYmo7Ci0gICAgICAgdHJ5IHsKLSAgICAgICAgIHByb2Nlc3Nvci5wcm9jZXNzQWxsU2NoZW1hKGVsLmdldEVsZW1lbnQoKSk7Ci0gICAgICAgfSBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpIHt9Ci0gICAgIH0KLSAgIH0KLQotICAgLyoqCi0gICAgKiAgKG5vbi1KYXZhZG9jKQotICAgICogIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgICovCi0gICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgIHsKLSAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAgLy8gR2V0IHRoZSB0eXBlcyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgIFR5cGVzIHR5cGVzID0KLSAgICAgICAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgIAotICAgICBwcm9jZXNzb3IgPSBuZXcgQW5ub3RhdGlvblByb2Nlc3NvcigKLSAgICAgICAgICAgZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCkuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgICAKLSAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgdHJhdmVyc2FsLnZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQodHJ1ZSk7Ci0gICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgIHRyYXZlcnNhbC50cmF2ZXJzZSh0eXBlcyk7Ci0gICAgIAotICAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkgCi0gICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgCi0gICAgICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsIChTdHJpbmcpIG51bGwpOwotICAgICB9Ci0gICAgIAotICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCh0ZXN0QXNzZXJ0aW9uLmdldEZhaWx1cmVNZXNzYWdlKCkgKyAKLSAgICAgICAgICJcblxuIiArIGVycm9yTGlzdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICAgfQotICAgCi0gICAvKioKLSAgICAqIENsYXNzIGZvciBwYXJzZSBzY2hlbWEgYW5kIHNlYXJjaCBhbm5vdGF0aW9uIGVsZW1lbnRzIAotICAgICovCi0gICBjbGFzcyBBbm5vdGF0aW9uUHJvY2Vzc29yIGV4dGVuZHMgWE1MU2NoZW1hUHJvY2Vzc29yCi0gICB7Ci0gICAgIHB1YmxpYyBBbm5vdGF0aW9uUHJvY2Vzc29yKFN0cmluZyBjb250ZXh0KQotICAgICB7Ci0gICAgICAgc3VwZXIoY29udGV4dCwgZmFsc2UpOwotICAgICB9Ci0KLSAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1NjaGVtYShFbGVtZW50IGVsZW1lbnQpCi0gICAgIHsKLSAgICAgICBjaGVja0ZvckFubm90YXRpb24oZWxlbWVudCk7Ci0gICAgIH0KLSAgICAgCi0gICAgIHByaXZhdGUgdm9pZCBjaGVja0ZvckFubm90YXRpb24oTm9kZSBub2RlKSAKLSAgICAgewotICAgICAgIGlmKChub2RlLmdldExvY2FsTmFtZSgpICE9IG51bGwpICYmIChub2RlLmdldExvY2FsTmFtZSgpLmVxdWFscyhBTk5PVEFUSU9OX0tFWSkpKSB7Ci0gICAgICAgICBlcnJvckxpc3QuYWRkKG5vZGUudG9TdHJpbmcoKSk7Ci0gICAgICAgfQotICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5nZXRDaGlsZE5vZGVzKCkuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICB7Ci0gICAgICAgICBjaGVja0ZvckFubm90YXRpb24obm9kZS5nZXRDaGlsZE5vZGVzKCkuaXRlbShpKSk7Ci0gICAgICAgfQotICAgICB9Ci0gICB9Ci0gfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjIwOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyMjA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNGRkMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyMjA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0KLS8qKgotICogU1NCUDIyMDkKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6YmluZGluZyBiaW5kcyBldmVyeSB3c2RsOnBhcnQgb2YgYSB3c2RsOm1lc3NhZ2UgaW4gdGhlIHdzZGw6cG9ydFR5cGUgdG8gd2hpY2ggaXQgcmVmZXJzIHRvIG9uZSBvZiBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOmZhdWx0IG9yIHNvYXBiaW5kOmhlYWRlcmZhdWx0LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBTU0JQMjIwOSBleHRlbmRzIEJQMjExNAotewotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgU1NCUDIyMDkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvU1NCUDI0MDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5MWYzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvU1NCUDI0MDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogU1NCUDI0MDIKLSAqLwotcHVibGljIGNsYXNzIFNTQlAyNDAyIGV4dGVuZHMgQlAyNDAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFNTQlAyNDAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjQwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MTMyMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVHJhdmVyc2FsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogU1NCUDI0MDMuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RGVzY2VuZGFudCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBpbiB0aGUgd3NkbDpiaW5kaW5nIGFyZSBub3QgZnJvbSB0aGUgbmFtZXNwYWNlcyBmb3IgdGhlIFdTREwgTUlNRSwgSFRUUCBHRVQvUE9TVCBvciBESU1FIGJpbmRpbmcgZXh0ZW5zaW9ucy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDI0MDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgU1NCUDI0MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVzIGFueSBXU0RMIE1JTUUsCi0gICAqIEhUVFAgR0VUL1BPU1Qgb3IgRElNRSBiaW5kaW5nIGV4dGVuc2lvbnMuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgYSBuYW1lc3BhY2UuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGhlIG5hbWVzcGFjZSBzcGVjaWZpZXMgYW55IFdTREwgTUlNRSwKLSAgICogICAgICAgICBIVFRQIEdFVC9QT1NUIG9yIERJTUUgYmluZGluZyBleHRlbnNpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzTm9uQ29uZm9ybWFudEJpbmRpbmdFeHRlbnNpb24oU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChuYW1lc3BhY2UuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTRExfTUlNRSkKLSAgICAgICAgfHwgbmFtZXNwYWNlLmVxdWFscyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0RMX0hUVFApCi0gICAgICAgIHx8IG5hbWVzcGFjZS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9ESU1FKSkKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4ZWwsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoaXNOb25Db25mb3JtYW50QmluZGluZ0V4dGVuc2lvbihleGVsCi0gICAgICAuZ2V0RWxlbWVudFR5cGUoKQotICAgICAgLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgIGVycm9ycy5hZGQoZXhlbC5nZXRFbGVtZW50VHlwZSgpKTsKLSAgICBlbHNlCi0gICAgewotICAgIAkvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgb2ssIGNoZWNrIHRoZSBkZXNjZW5kYW50cwotICAgICAgaWYgKGV4ZWwgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgZWwgPSAoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZXhlbCkuZ2V0RWxlbWVudCgpOwotCi0gICAgICAgIC8vIHRyYXZlcnNlIGFsbCBvZiB0aGUgZGVzY2VuZGFudHMgYW5kIGNoZWNrIGZvciBub24gY29tcGxpYW50IGJpbmRpbmcgZXh0ZW5zaW9ucwotICAgICAgICBYTUxUcmF2ZXJzYWxDaGVja2luZ0V4dGVuc2lvbnMgdHJhdmVyc2FsID0KLSAgICAgICAgICBuZXcgWE1MVHJhdmVyc2FsQ2hlY2tpbmdFeHRlbnNpb25zKCk7Ci0gICAgICAgIHRyYXZlcnNhbC52aXNpdChlbCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RWxlbWVudCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBBIHNwZWNpYWxpemVkIFhNTFRyYXZlcnNhbCBjbGFzcyB0byBjaGVjayBpZiB0aGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQgaGFzIGFueSAKLSAgICogZGVzY2VuZGFudCBlbGVtZW50cy9hdHRyaWJ1dGVzIGZyb20gdGhlIG5hbWVzcGFjZXMgZm9yIHRoZSBXU0RMIE1JTUUsIAotICAgKiBIVFRQIEdFVC9QT1NUIG9yIERJTUUgYmluZGluZyBleHRlbnNpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBYTUxUcmF2ZXJzYWxDaGVja2luZ0V4dGVuc2lvbnMgZXh0ZW5kcyBYTUxUcmF2ZXJzYWwKLSAgewotICAgIGJvb2xlYW4gbm9uQ29uZm9ybWFudEV4dGVuc2lvbkZvdW5kID0gZmFsc2U7Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLnhtbC5YTUxUcmF2ZXJzYWwjYWN0aW9uKG9yZy53M2MuZG9tLk5vZGUpCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gYWN0aW9uKE5vZGUgbikKLSAgICB7Ci0gICAgICByZXR1cm4gIW5vbkNvbmZvcm1hbnRFeHRlbnNpb25Gb3VuZDsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLnhtbC5YTUxWaXNpdG9yI3Zpc2l0KG9yZy53M2MuZG9tLkF0dHIpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoQXR0ciBub2RlKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb24obm9kZSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChpc05vbkNvbmZvcm1hbnRCaW5kaW5nRXh0ZW5zaW9uKG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3JzLmFkZChub2RlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgbm9uQ29uZm9ybWFudEV4dGVuc2lvbkZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kueG1sLlhNTFZpc2l0b3IjdmlzaXQob3JnLnczYy5kb20uRWxlbWVudCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IG5vZGUpCi0gICAgewotICAgICAgaWYgKGFjdGlvbihub2RlKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGlzTm9uQ29uZm9ybWFudEJpbmRpbmdFeHRlbnNpb24obm9kZS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvcnMuYWRkKG5vZGUuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgICAgbm9uQ29uZm9ybWFudEV4dGVuc2lvbkZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBlbGVtZW50IGlzIGNvbXBsaWFudCwgY2hlY2sgYXR0cmlidXRlcyBhbmQgZGVzY2VuZGFudHMKLSAgICAgICAgICB2aXNpdChub2RlLmdldEF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgZm9yIChOb2RlIG4gPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIG4gIT0gbnVsbDsKLSAgICAgICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZG9WaXNpdChuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NETFZhbGlkYXRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0RMVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjMwM2NmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0RMVmFsaWRhdG9ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lSdW50aW1lRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkNhbmRpZGF0ZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLlNlcnZpY2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5Q29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRmFpbHVyZURldGFpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRWxlbWVudExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLnNjaGVtYS5UYXJnZXROYW1lc3BhY2VQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWEuWE1MU2NoZW1hVmFsaWRhdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIFdTREwgYW5kIGFzc29jaWF0ZWQgWE1MIHNjaGVtYSBkZWZpbml0aW9ucwotICogYXJlIGluIGNvbmZvcm1hbmNlIHdpdGggdGhlIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAJKGd0dXJyZWxsQHVrLmlibS5jb20pCi0gKi8KLQotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgQmFzZVZhbGlkYXRvckltcGwKLSAgaW1wbGVtZW50cyBXU0RMVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBXU0RMIFVSTC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYWNjZXNzIHRoZSB3c2RsIHVybCB2aWEgd3NkbERvY3VtZW50IGZpZWxkLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB3c2RsVVJMOwotCi0gIC8qKgotICAgKiBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gdGVzdGFibGU7Ci0gIAotICAvKioKLSAgICogRW50cnkgY29udGFpbmVyIG1hcC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNoTWFwIGNvbnRhaW5lck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzRGVmQXNzZXJ0aW9ucyA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXJ0aWZhY3QgdHlwZSB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gdGhlIGFydGlmYWN0IHR5cGUgKGEgU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBcnRpZmFjdFR5cGUoKSAKLSAgeyAgCi0gICAgICByZXR1cm4gVFlQRV9ERVNDUklQVElPTjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gb2YgZW50cnkgdHlwZXMgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGVudHJ5IHR5cGVzIChTdHJpbmdzKQotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldEVudHJ5VHlwZXMoKSAKLSAgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fSU1QT1JULAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX1RZUEVTLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fUE9SVAotICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvciNpbml0KG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQsIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCwgamF2YS5sYW5nLlN0cmluZywgb3JnLndzaS53c2RsLldTRExEb2N1bWVudCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGluaXQoYW5hbHl6ZXJDb250ZXh0LCBhc3NlcnRpb25zLCByZXBvcnRBcnRpZmFjdCwgYW5hbHl6ZXJDb25maWcsIHJlcG9ydGVyLCB0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyLAotICAgIGJvb2xlYW4gcHJvY2Vzc0RlZkFzc2VydGlvbnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQmFzZVZhbGlkYXRvckltcGwKLSAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgYXNzZXJ0aW9ucy5nZXRBcnRpZmFjdChUWVBFX0RFU0NSSVBUSU9OKSwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IGFuYWx5emVyQ29udGV4dC5nZXRXc2RsRG9jdW1lbnQoKTsKLSAgICB0ZXN0YWJsZSA9IGFuYWx5emVyQ29udGV4dC5nZXRXc2RsRG9jdW1lbnQoKSAhPSBudWxsOwotICAgIGlmICh0aGlzLndzZGxEb2N1bWVudCAhPSBudWxsKQotICAgICAgdGhpcy53c2RsVVJMID0gd3NkbERvY3VtZW50LmdldExvY2F0aW9uKCk7Ci0gICAgdGhpcy5wcm9jZXNzRGVmQXNzZXJ0aW9ucyA9IHByb2Nlc3NEZWZBc3NlcnRpb25zOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5XU0RMVmFsaWRhdG9yI2luaXQob3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dCwgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0LCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcud3NpLndzZGwuV1NETERvY3VtZW50LCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgU3RyaW5nIHdzZGxVUkwsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCwKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFydGlmYWN0LCByZXBvcnRBcnRpZmFjdCwgd3NkbFVSTCwgd3NkbERvY3VtZW50LCByZXBvcnRlciwgdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBTdHJpbmcgd3NkbFVSTCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyLAotICAgIGJvb2xlYW4gcHJvY2Vzc0RlZkFzc2VydGlvbnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQmFzZVZhbGlkYXRvckltcGwKLSAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFydGlmYWN0LCByZXBvcnRBcnRpZmFjdCwgcmVwb3J0ZXIpOwotICAgIHRoaXMud3NkbERvY3VtZW50ID0gd3NkbERvY3VtZW50OwotICAgIHRlc3RhYmxlID0gKHdzZGxEb2N1bWVudCAhPSBudWxsKTsKLSAgICBpZiAod3NkbERvY3VtZW50ICE9IG51bGwpCi0gICAgICB0aGlzLndzZGxVUkwgPSB3c2RsRG9jdW1lbnQuZ2V0TG9jYXRpb24oKTsKLQotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgICB0aGlzLndzZGxVUkwgPSB3c2RsVVJMOwotICAgIHRoaXMucHJvY2Vzc0RlZkFzc2VydGlvbnMgPSBwcm9jZXNzRGVmQXNzZXJ0aW9uczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvciN2YWxpZGF0ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy9XU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbnVsbDsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gbnVsbDsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IG51bGw7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKLQotICAgIC8vIGl0IGRlcHJpY2F0ZWQgYWZ0ZXIgcmVmYWN0b3JpbmcgCi0gICAgLy8gbm93IHRoZSBpbm5lciBjbGFzc2VzIG1vdmVkIG91dCBmcm9tIHZhbGlkYXRvcgotICAgIC8vU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSArICIkIjsKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXggPSB0aGlzLmdldENsYXNzKCkuZ2V0UGFja2FnZSgpLmdldE5hbWUoKSsiLiI7Ci0KLSAgICAvLyBHZXQgdGhlIGRlZmluaXRpb24gZWxlbWVudAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpOwotCi0gICAgLy8gR2V0IHNlcnZpY2UgcmVmZXJlbmNlIGZyb20gYW5hbHl6ZXIgY29udGV4dAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSA9IGFuYWx5emVyQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGUgbm9ybWFsaXplZCBkYXRhIGFib3V0IHRoZSBzZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAgQ2FuZGlkYXRlSW5mbyBjYW5kaWRhdGUgPSBuZXcgQ2FuZGlkYXRlSW5mbyhzZXJ2aWNlUmVmZXJlbmNlLCB3c2RsRG9jdW1lbnQpOwotCi0gICAgYW5hbHl6ZXJDb250ZXh0LnNldENhbmRpZGF0ZUluZm8oY2FuZGlkYXRlKTsKLQotICAgIC8vIFNldCBwcmVyZXEgdHlwZSB0byBlbnRyeSBjb250YWluZXIKLSAgICByZXBvcnRlci5zZXRQcmVyZXFUeXBlKFJlcG9ydGVyLlBSRVJFUV9UWVBFX0VOVFJZX0NPTlRBSU5FUik7Ci0KLSAgICAvLyBhbHdheXMgcHJvY2VzcyBJbXBvcnQsIERlZmluaXRpb25zICYgVHlwZXMgYXNzZXJ0aW9ucyAKLSAgICAvLyBURU1QOgotICAgIGlmIChwcm9jZXNzRGVmQXNzZXJ0aW9ucykKLSAgICB7Ci0gICAgICBwcm9jZXNzRGVmaW5pdGlvbkFzc2VydGlvbnMoY2xhc3NQcmVmaXgsIGNhbmRpZGF0ZSk7Ci0gICAgICBwcm9jZXNzVHlwZXNBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBjYW5kaWRhdGUpOwotICAgICAgcHJvY2Vzc0ltcG9ydEFzc2VydGlvbnMoY2xhc3NQcmVmaXgsIGNhbmRpZGF0ZSk7Ci0gICAgfQotCi0gICAgLy8gUHJvY2VzcyB0aGUgZWxlbWVudCBoaWVyYXJjaHkgaW4gdGhlIFdTREwgZG9jdW1lbnQgc3RhcnRpbmcgd2l0aCB0aGUgb25lIHRoYXQgd2FzIHNwZWNpZmllZCAgCi0gICAgLy8gRklYOiBFbGVtZW50IGZpbmRpbmcgYWxyZWFkeSBjb21wbGV0ZWQgYnkgQ2FuZGlkYXRlSW5mbyBjb25zdHJ1Y3RvciAtIHNvIHVzZSB0aGF0IHJhdGhlciB0aGFuIHJldGVzdCBoZXJlICAKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIHdzZGw6cG9ydAotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNQb3J0KCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgc2VydmljZSBlbGVtZW50Ci0gICAgICBpZiAoKHNlcnZpY2UgPQotICAgICAgICBkZWZpbml0aW9uLmdldFNlcnZpY2UoCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFBhcmVudEVsZW1lbnRRTmFtZSgpKSkKLSAgICAgICAgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBzZXJ2aWNlOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50TmFtZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gRmluZCB0aGUgcG9ydCBlbGVtZW50Ci0gICAgICBpZiAoKHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJDb3VsZCBub3QgbG9jYXRlIFdTREwgcG9ydDogIgotICAgICAgICAgICAgKyBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gVEVNUDogUmVtb3ZlIHVudGlsIHRoZXJlIGFyZSBwb3J0IHRlc3QgYXNzZXJ0aW9ucyAgICAgIAotICAgICAgLy9wcm9jZXNzUG9ydEFzc2VydGlvbnMocG9ydCwgc2VydmljZVJlZmVyZW5jZSwgY2xhc3NQcmVmaXgsIHdzZGxEb2N1bWVudCk7CSAgICAgCi0KLSAgICAgIC8vIE5leHQsIHByb2Nlc3MgdGhlIGJpbmRpbmcKLSAgICAgIGlmICgoKGJpbmRpbmcgPSBwb3J0LmdldEJpbmRpbmcoKSkgPT0gbnVsbCkgfHwgKGJpbmRpbmcuaXNVbmRlZmluZWQoKSkpCi0gICAgICB7Ci0gICAgICAgIC8vdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBiaW5kaW5nIGZvciBwb3J0OiAiICsgcG9ydC5nZXROYW1lKCkpOyAgCi0gICAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgb3BlcmF0aW9uIGFuZCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9ucyAKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcHJvY2Vzc0JpbmRpbmdBc3NlcnRpb25zKAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotCi0gICAgICAgIC8vIE5leHQsIHByb2Nlc3MgdGhlIHBvcnRUeXBlCi0gICAgICAgIGlmICgoKHBvcnRUeXBlID0gYmluZGluZy5nZXRQb3J0VHlwZSgpKSA9PSBudWxsKQotICAgICAgICAgIHx8IChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIC8vdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBwb3J0VHlwZSBmb3IgYmluZGluZzogIiArIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHBvcnRUeXBlLCBvcGVyYXRpb24gYW5kIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb25zIAotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpOwotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgYmluZGluZywKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzT3BlcmF0aW9uQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIHdzZGw6YmluZGluZwotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc0JpbmRpbmcoKSkKLSAgICB7Ci0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKTsKLSAgICAgIC8vIEZpbmQgdGhlIGJpbmRpbmcgZWxlbWVudAotICAgICAgaWYgKHdzZGxFbGVtZW50LmdldFFOYW1lKCkgIT0gbnVsbAotICAgICAgICAmJiB3c2RsRWxlbWVudC5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICE9IG51bGwKLSAgICAgICAgJiYgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmICgoKGJpbmRpbmcgPQotICAgICAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSkpCi0gICAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgICB8fCAoYmluZGluZy5pc1VuZGVmaW5lZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBiaW5kaW5nOiAiCi0gICAgICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm9jZXNzQmluZGluZ0Fzc2VydGlvbnMoCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgICAvLyBOZXh0LCBwcm9jZXNzIHRoZSBwb3J0VHlwZQotICAgICAgICBpZiAoKChwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSkgPT0gbnVsbCkKLSAgICAgICAgICB8fCAocG9ydFR5cGUuaXNVbmRlZmluZWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvL3Rocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIFdTREwgUG9ydFR5cGUgZm9yIEJpbmRpbmc6ICIgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHBvcnRUeXBlLCBvcGVyYXRpb24gYW5kIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb25zIAotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpOwotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzT3BlcmF0aW9uQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgICAgIC8vIFByb2Nlc3MgZWFjaCBtZXNzYWdlIHdpdGhpbiBlYWNoIG9wZXJhdGlvbiBvZiB0aGUgcG9ydFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBiaW5kaW5nCi0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgYmluZGluZyBlbGVtZW50IHNwZWNpZmljYXRpb24uICBUaGlzIGNhbiAKLSAgICAgIC8vIGhhcHBlbiB3aGVuIGEgVURESSB0TW9kZWwgZGlkIG5vdCBoYXZlIGEgdmFsaWQgYmluZGluZyByZWZlcmVuY2UuCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgb3BlcmF0aW9uIGFuZCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9ucyAKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gd3NkbDpwb3J0VHlwZQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnRUeXBlKCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgUG9ydFR5cGUgZWxlbWVudAotICAgICAgaWYgKCgocG9ydFR5cGUgPQotICAgICAgICBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRRTmFtZSgpKSkKLSAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgfHwgKHBvcnRUeXBlLmlzVW5kZWZpbmVkKCkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGxvY2F0ZSBXU0RMIFBvcnRUeXBlOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXROYW1lKCkpOwotICAgICAgfQotCi0gICAgICAvLyBTZXQgbWlzc2luZ0lucHV0IGZvciBhbGwgYmluZGluZyB0ZXN0IGFzc2VydGlvbnMgCi0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpKTsKLQotICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgICAgIHBvcnRUeXBlLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgLy8gUHJvY2VzcyBlYWNoIG1lc3NhZ2Ugd2l0aGluIGVhY2ggb3BlcmF0aW9uIG9mIHRoZSBwb3J0VHlwZQotICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gd3NkbDpvcGVyYXRpb24KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBlbHNlIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNPcGVyYXRpb24oKSkKLSAgICB7Ci0gICAgICAvLyBGaW5kIHRoZSBvcGVyYXRpb24KLSAgICAgIC8vIGdldCBwb3J0VHlwZSBmcm9tIGNvbmZpZyBwYXJlbnQgZWxlbWVudAotICAgICAgaWYgKCgocG9ydFR5cGUgPQotICAgICAgICBkZWZpbml0aW9uLmdldFBvcnRUeXBlKAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50UU5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBwb3J0VHlwZTogIgotICAgICAgICAgICAgKyBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UGFyZW50RWxlbWVudFFOYW1lKCkpOwotICAgICAgfQotCi0gICAgICBpZiAoKChvcGVyYXRpb24gPQotICAgICAgICBnZXRPcGVyYXRpb25Gcm9tUG9ydFR5cGUoCi0gICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChvcGVyYXRpb24uaXNVbmRlZmluZWQoKSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJDb3VsZCBub3QgbG9jYXRlIFdTREwgT3BlcmF0aW9uOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXROYW1lKCkKLSAgICAgICAgICAgICsgImluIHBvcnRUeXBlOiAiCi0gICAgICAgICAgICArIHBvcnRUeXBlLmdldFFOYW1lKCkpOwotICAgICAgfQotCi0gICAgICAvLyBTZXQgbWlzc2luZ0lucHV0IGZvciBhbGwgYmluZGluZyBhbmQgcG9ydFR5cGUgdGVzdCBhc3NlcnRpb25zIAotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFKSk7Ci0KLSAgICAgIHByb2Nlc3NPcGVyYXRpb25Bc3NlcnRpb25zKAotICAgICAgICBvcGVyYXRpb24sCi0gICAgICAgIHBvcnRUeXBlLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgb3BlcmF0aW9uLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyB3c2RsOm1lc3NhZ2UKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBlbHNlIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNNZXNzYWdlKCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgbWVzc2FnZQotICAgICAgaWYgKCgobWVzc2FnZSA9Ci0gICAgICAgIGRlZmluaXRpb24uZ2V0TWVzc2FnZShzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGxvY2F0ZSBXU0RMIE1lc3NhZ2U6ICIKLSAgICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgYW5kIG9wZXJhdGlvbiB0ZXN0IGFzc2VydGlvbnMgCi0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpKTsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OKSk7Ci0KLSAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAiVGhlIGZvbGxvd2luZyBXU0RMIHR5cGUgaXMgbm90IHN1cHBvcnRlZDogIgotICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFR5cGUoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYW51cAotICAgIGNsZWFudXAoKTsKLSAgfQotCi0gLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3IjdmFsaWRhdGUoKQotICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIHZhbGlkYXRlQXJ0aWZhY3QoKS4gKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCB2YWxpZGF0ZSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHZhbGlkYXRlQXJ0aWZhY3QoKTsKLSAgICAKLSAgICAvLyBSZXR1cm4gV1NETCBkb2N1bWVudAotICAgIHJldHVybiB0aGlzLndzZGxEb2N1bWVudDsKLSAgfQotICAvKioKLSAgICogR2V0IGVudHJ5IGNvbnRhaW5lciB1c2luZyB0aGUgZmlsZW5hbWUgZm9yIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBhIGZpbGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSBjb250YWluZXIgdXNpbmcgdGhlIGZpbGVuYW1lIGZvciBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5Q29udGFpbmVyIGdldEVudHJ5Q29udGFpbmVyKFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIEVudHJ5Q29udGFpbmVyIGVudHJ5Q29udGFpbmVyID0gbnVsbDsKLQotICAgIC8vIElmIHRoZSBlbnRyeSBjb250YWluZXIgYWxyZWFkeSBleGlzdHMsIHRoZW4gdXNlIGl0Ci0gICAgaWYgKChlbnRyeUNvbnRhaW5lciA9IChFbnRyeUNvbnRhaW5lcikgY29udGFpbmVyTWFwLmdldChmaWxlbmFtZSkpID09IG51bGwpCi0gICAgewotICAgICAgLy8gQ3JlYXRlIG5ldyBlbnRyeSBjb250YWluZXIKLSAgICAgIGVudHJ5Q29udGFpbmVyID0gdGhpcy5yZXBvcnRlci5jcmVhdGVFbnRyeUNvbnRhaW5lcigpOwotCi0gICAgICAvLyBTZXQgY29udGFpbmVyIGlkIHVzaW5nIHRoZSBmaWxlbmFtZSBmb3IgdGhlIFdTREwgZG9jdW1lbnQKLSAgICAgIGVudHJ5Q29udGFpbmVyLnNldElkKGZpbGVuYW1lKTsKLQotICAgICAgLy8gUHV0IHRoZSBuZXcgZW50cnkgY29udGFpbmVyIGludG8gdGhlIGNvbnRhaW5lciBtYXAKLSAgICAgIGNvbnRhaW5lck1hcC5wdXQoZmlsZW5hbWUsIGVudHJ5Q29udGFpbmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG9wZXJhdGlvbiBmcm9tIHBvcnQgdHlwZS4KLSAgICogQHBhcmFtIHBvcnRUeXBlIHBvcnQgdHlwZS4KLSAgICogQHBhcmFtIG9wZXJhdGlvbk5hbWUgb3BlcmF0aW9uIG5hbWUuCi0gICAqIEByZXR1cm4gb3BlcmF0aW9uIGZyb20gcG9ydCB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIE9wZXJhdGlvbiBnZXRPcGVyYXRpb25Gcm9tUG9ydFR5cGUoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUpCi0gIHsKLSAgICAvLyBGSVg6IHdzZGw0aiBhdmFpbGFibGUgbWV0aG9kIGNhbGwgYmVsb3cgaW1wbGllcyB0aGF0IG9ubHkgCi0gICAgLy8gbmFtZStpbnB1dG5hbWUrb3V0cHV0bmFtZSB1bmlxdWVseSBkZWZpbmVzIG9wZXJhdGlvbiAKLSAgICAvLyBVc2UgdGhpcyBpbnN0ZWFkIGZvciBub3c6IC0gZ2V0IHRoZSBmaXJzdCBvcGVyYXRpb24gd2UgZmluZC4uLgotICAgIE9wZXJhdGlvbiBvcCA9IG51bGw7Ci0gICAgaWYgKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIG9wSXQgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKG9wSXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBvcCA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgICAgICBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMob3AuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBvcDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudWxsOyAvLyBubyBtYXRjaGluZyBvcGVyYXRpb24gZm91bmQKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGRlZmluaXRpb24gYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZSBjYW5kaWRhdGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0RlZmluaXRpb25Bc3NlcnRpb25zKAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIEVudHJ5IGVudHJ5ID0gbnVsbDsKLQotICAgIERlZmluaXRpb25bXSB3c2RsRGVmaW5pdGlvbnMgPSBjYW5kaWRhdGUuZ2V0RGVmaW5pdGlvbnMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbERlZmluaXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxEZWZpbml0aW9uc1tpXTsKLSAgICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0RFRklOSVRJT05TKSk7Ci0gICAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGRlZmluaXRpb24pOwotCi0gICAgICAvLyBTZXQgZW50cnkgY29udGFpbmVyCi0gICAgICBlbnRyeS5zZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgZ2V0RW50cnlDb250YWluZXIoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpOwotCi0gICAgICAvLyBQcm9jZXNzIGFsbCBvZiB0aGUgZGVmaW5pdGlvbiByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkpKTsKLSAgICAgIC8vIEFERDogbmVlZCB0byB1c2UgaGVyZSB0aGUgc3BlY2lmaWMgZG9jdW1lbnQgY29ycmVzcG9uZGluZyB0byB0aGUgZGVmaW5pdGlvbj8/Ci0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyB0eXBlcyBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggY2xhc3MgcHJlZml4LgotICAgKiBAcGFyYW0gY2FuZGlkYXRlIGNhbmRpZGF0ZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIHByb2Nlc3NpbmcgCi0gICAqICAgICAgICAgdHlwZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1R5cGVzQXNzZXJ0aW9ucygKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgQ2FuZGlkYXRlSW5mbyBjYW5kaWRhdGUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgVHlwZXNbXSB3c2RsVHlwZXMgPSBjYW5kaWRhdGUuZ2V0VHlwZXMoKTsKLSAgICBEZWZpbml0aW9uW10gd3NkbERlZmluaXRpb25zID0gY2FuZGlkYXRlLmdldERlZmluaXRpb25zKCk7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gdHlwZXMgZWxlbWVudHMsIHRoZW4gc2V0IGFsbCByZXN1bHRzIHRvIG1pc3NpbmdJbnB1dCAgIAotICAgIGlmICh3c2RsVHlwZXMgPT0gbnVsbCB8fCB3c2RsVHlwZXMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHRlc3QgYXNzZXJ0aW9ucyB3aXRoIHRoaXMgZW50cnkgdHlwZQotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9UWVBFUykpOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgVHlwZXMgdHlwZXMgPSB3c2RsVHlwZXNbaV07Ci0gICAgICAgIGlmICh0eXBlcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gbm8gVHlwZXMgZWxlbWVudCBpbiBpLXRoIGRvY3VtZW50Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1RZUEVTKSk7Ci0gICAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKAotICAgICAgICAgIGNhbmRpZGF0ZS5nZXREZWZpbml0aW9uKHR5cGVzKS5nZXREb2N1bWVudEJhc2VVUkkoKSArICItVHlwZXMiKTsKLSAgICAgICAgZW50cnkuc2V0RW50cnlEZXRhaWwodHlwZXMpOwotCi0gICAgICAgIC8vIFNldCBlbnRyeSBjb250YWluZXIKLSAgICAgICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICAgICAgZ2V0RW50cnlDb250YWluZXIod3NkbERlZmluaXRpb25zW2ldLmdldERvY3VtZW50QmFzZVVSSSgpKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBhbGwgb2YgdGhlIFR5cGVzIHJlbGF0ZWQgdGVzdCBhc3NlcnRpb25zCi0gICAgICAgIHByb2Nlc3NBc3NlcnRpb25zKAotICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIGNhbmRpZGF0ZS5nZXRXc2RsRG9jdW1lbnQoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGltcG9ydCBhc3NlcnRpb25zLiAKLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZSBjYW5kaWRhdGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIGltcG9ydCBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0ltcG9ydEFzc2VydGlvbnMoCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgSW1wb3J0W10gd3NkbEltcG9ydHMgPSBjYW5kaWRhdGUuZ2V0SW1wb3J0cygpOwotCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGltcG9ydCBlbGVtZW50cywgdGhlbiBzZXQgYWxsIHJlc3VsdHMgdG8gbWlzc2luZ0lucHV0ICAgCi0gICAgaWYgKHdzZGxJbXBvcnRzID09IG51bGwgfHwgd3NkbEltcG9ydHMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHRlc3QgYXNzZXJ0aW9ucyB3aXRoIHRoaXMgZW50cnkgdHlwZQotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9JTVBPUlQpKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsSW1wb3J0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IHdzZGxJbXBvcnQgPSB3c2RsSW1wb3J0c1tpXTsKLSAgICAgICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgICAgICBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICAgICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9JTVBPUlQpKTsKLSAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQod3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKHdzZGxJbXBvcnQpOwotCi0gICAgICAgIC8vIFNldCBlbnRyeSBjb250YWluZXIKLSAgICAgICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoZ2V0RW50cnlDb250YWluZXIod3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBhbGwgb2YgdGhlIGltcG9ydCByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgICBwcm9jZXNzQXNzZXJ0aW9ucygKLSAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkpKTsKLSAgICAgICAgLy8gQUREOiBuZWVkIHRvIHVzZSBoZXJlIHRoZSBzcGVjaWZpYyBkb2N1bWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbXBvcnQhIQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHBvcnQgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIHBvcnQgYSBwb3J0LgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBwb3J0IGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzUG9ydEFzc2VydGlvbnMoCi0gICAgUG9ydCBwb3J0LAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCSAgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQocG9ydC5nZXROYW1lKCkpOwotICAgIGVudHJ5LnNldFBhcmVudEVsZW1lbnROYW1lKAotICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFBhcmVudEVsZW1lbnROYW1lKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKHBvcnQpOwotCi0gICAgLy8gUHJvY2VzcyBhc3NlcnRpb25zIGZvciB0aGlzIGFydGlmYWN0IGFnYWluc3QgdGhlIHRhcmdldCBjb250ZXh0Ci0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgYmluZGluZyBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gYmluZGluZyBiaW5kaW5nLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBiaW5kaW5nIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzQmluZGluZ0Fzc2VydGlvbnMoCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0gICAgUU5hbWUgYmluZGluZ1FOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpOwotCi0gICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLSAgICAgIEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQoYmluZGluZ1FOYW1lLnRvU3RyaW5nKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGJpbmRpbmcpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24oYmluZGluZyk7Ci0gICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICBnZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgKGRlZmluaXRpb24gPT0gbnVsbCA/IG51bGwgOiBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKSkpOwotCi0gICAgLy8gUHJvY2VzcyBiaW5kaW5nIHRlc3QgYXNzZXJ0aW9ucwotICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB3c2RsRG9jdW1lbnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHBvcnQgdHlwZSBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBwb3J0IHR5cGUgYXNzZXJ0aW9ucy4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0gICAgUU5hbWUgcG9ydFR5cGVRTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCk7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSkpOwotICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKHBvcnRUeXBlUU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgZW50cnkuc2V0RW50cnlEZXRhaWwocG9ydFR5cGUpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24ocG9ydFR5cGUpOwotICAgIGVudHJ5LnNldEVudHJ5Q29udGFpbmVyKAotICAgICAgZ2V0RW50cnlDb250YWluZXIoCi0gICAgICAgIChkZWZpbml0aW9uID09IG51bGwgPyBudWxsIDogZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpKTsKLQotICAgIC8vIFByb2Nlc3MgdGVzdCBhc3NlcnRpb25zCi0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3Mgb3BlcmF0aW9uIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBvcGVyYXRpb24gYW4gb3BlcmF0aW9uLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBvcGVyYXRpb24gYXNzZXJ0aW9ucy4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gcXVhbGlmeSBvcGVyYXRpb24gd2l0aCBzZXJ2aWNlIGxvY2F0aW9uIGZyb20gY29uZmlnLgkKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRChvcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICBlbnRyeS5zZXRQYXJlbnRFbGVtZW50TmFtZShwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICBlbnRyeS5zZXRFbnRyeURldGFpbChvcGVyYXRpb24pOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24ocG9ydFR5cGUpOwotICAgIGVudHJ5LnNldEVudHJ5Q29udGFpbmVyKAotICAgICAgZ2V0RW50cnlDb250YWluZXIoCi0gICAgICAgIChkZWZpbml0aW9uID09IG51bGwgPyBudWxsIDogZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpKTsKLQotICAgIC8vIFByb2Nlc3MgdGVzdCBhc3NlcnRpb25zCi0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3Mgb3BlcmF0aW9uIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBwb3J0VHlwZSBwb3J0IHR5cGUuCi0gICAqIEBwYXJhbSBzZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2UgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggY2xhc3MgcHJlZml4LgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIG9wZXJhdGlvbiBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEZvciBlYWNoIG9wZXJhdGlvbiwgCi0gICAgaWYgKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OKSk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0gICAgICBJdGVyYXRvciBvcEl0ID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAob3BJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgICAgICBpZiAob3BlcmF0aW9uID09IG51bGwgfHwgb3BlcmF0aW9uLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByb2Nlc3NPcGVyYXRpb25Bc3NlcnRpb25zKAotICAgICAgICAgICAgb3BlcmF0aW9uLAotICAgICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIG1lc3NhZ2UgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgTWVzc2FnZSBtZXNzYWdlLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIEVudHJ5IGVudHJ5ID0gbnVsbDsKLSAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCk7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQobWVzc2FnZVFOYW1lLnRvU3RyaW5nKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKG1lc3NhZ2UpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24obWVzc2FnZSk7Ci0gICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICBnZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgKGRlZmluaXRpb24gPT0gbnVsbCA/IG51bGwgOiBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKSkpOwotCi0gICAgLy8gUHJvY2VzcyBiaW5kaW5nIHRlc3QgYXNzZXJ0aW9ucwotICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB3c2RsRG9jdW1lbnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIG1lc3NhZ2UgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGJpbmRpbmcgYSBiaW5kaW5nLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQ7Ci0KLSAgICBpZiAoYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpICE9IG51bGwpCi0gICAgeyAvLyBjYW4gZG8gbm90aGluZyBpZiBoYXZlIG5vIG9wZXJhdGlvbnMgZGVmaW5lZAotICAgICAgbWVzc2FnZVNldCA9Ci0gICAgICAgIFdTRExVdGlscy5maW5kTWVzc2FnZXMod3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCksIGJpbmRpbmcpOwotCi0gICAgICAvLyBQcm9jZXNzIGFueSBtZXNzYWdlcyB0aGF0IHdlcmUgZm91bmQgICAgCi0gICAgICBpZiAobWVzc2FnZVNldC5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXQgPSBtZXNzYWdlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChtZXNzYWdlSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIG1lc3NhZ2VJdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKCFtZXNzYWdlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgICAgICAgICAgIG1lc3NhZ2UsCi0gICAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgbWVzc2FnZSBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgSGFzaFNldCBtZXNzYWdlU2V0ID0gbmV3IEhhc2hTZXQoKTsKLQotICAgIGlmIChwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBjYW4gZG8gbm90aGluZyBpZiBoYXZlIG5vIG9wZXJhdGlvbnMgZGVmaW5lZAotCi0gICAgICBJdGVyYXRvciBvcEl0ID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChvcEl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0KLSAgICAgICAgLy8gU2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgd2UgaGF2ZSBib3RoIGFuZCBpbnB1dCBhbmQgb3V0cHV0IG1lc3NhZ2UsIAotICAgICAgICAvLyBjaGVjayBmb3IgaXRzIGV4aXN0ZW5jZSBiZWZvcmUgYWRkaW5nIGl0Ci0gICAgICAgIGlmIChvcC5nZXRJbnB1dCgpICE9IG51bGwgJiYgIW9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgbWVzc2FnZVNldC5hZGQob3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICAgIGlmIChvcC5nZXRPdXRwdXQoKSAhPSBudWxsCi0gICAgICAgICAgJiYgIW9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgLy8gYWxzbyBtZXNzYWdlcyBmcm9tIGFueSBGYXVsdHMgZGVmaW5lZCB3aXRoaW4gdGhlIG9wZXJhdGlvbgotICAgICAgICBpZiAob3AuZ2V0RmF1bHRzKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGZhdWx0SXQgPSBvcC5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICAgICAgICB3aGlsZSAoZmF1bHRJdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgbWVzc2FnZSA9ICgoRmF1bHQpIGZhdWx0SXQubmV4dCgpKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICBpZiAoIW1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgbWVzc2FnZVNldC5hZGQobWVzc2FnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtZXNzYWdlU2V0LnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICAvLyBTZXQgYWxsIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb24gcmVzdWx0cyB0byBtaXNzaW5nSW5wdXQKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gbm93IHN0ZXAgdGhyb3VnaCBlYWNoIGRlcml2ZWQgTWVzc2FnZQotICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXQgPSBtZXNzYWdlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChtZXNzYWdlSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgKE1lc3NhZ2UpIChtZXNzYWdlSXQubmV4dCgpKSwKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBvcCAtIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSBjbGFzc1ByZWZpeCBjbGFzcyBwcmVmaXguCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgV1NETCBkb2N1bWVudC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIHByb2Nlc3NpbmcgCi0gICAqICAgICAgICAgbWVzc2FnZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgIE9wZXJhdGlvbiBvcCwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgIGlmIChvcC5nZXRJbnB1dCgpICE9IG51bGwgJiYgIW9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICBtZXNzYWdlU2V0LmFkZChvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICBpZiAob3AuZ2V0T3V0cHV0KCkgIT0gbnVsbCAmJiAhb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICBtZXNzYWdlU2V0LmFkZChvcC5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgLy8gYWxzbyBtZXNzYWdlcyBmcm9tIGFueSBGYXVsdHMgZGVmaW5lZCB3aXRoaW4gdGhlIG9wZXJhdGlvbgotICAgIEl0ZXJhdG9yIGZhdWx0SXQgPSBvcC5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICB3aGlsZSAoZmF1bHRJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgbWVzc2FnZSA9ICgoRmF1bHQpIGZhdWx0SXQubmV4dCgpKS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoIW1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgbWVzc2FnZVNldC5hZGQobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VTZXQuc2l6ZSgpID09IDApCi0gICAgewotICAgICAgLy8gU2V0IGFsbCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9uIHJlc3VsdHMgdG8gbWlzc2luZ0lucHV0Ci0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UpKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbm93IHN0ZXAgdGhyb3VnaCBlYWNoIGRlcml2ZWQgTWVzc2FnZQotICAgICAgSXRlcmF0b3IgbWVzc2FnZUl0ID0gbWVzc2FnZVNldC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKG1lc3NhZ2VJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgICAoTWVzc2FnZSkgKG1lc3NhZ2VJdC5uZXh0KCkpLAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgdGFyZ2V0Q29udGV4dCkKLSAgewotICAgIGJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZSB0ZXN0IGFzc2VydGlvbiBlbnRyeSB0eXBlIG1hdGNoZXMgdGhlIHRhcmdldCBjb250ZXh0IGVudHJ5IHR5cGUsIHRoZW4gY29udGluZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uCi0gICAgICAuZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAgICAuZXF1YWxzKHRhcmdldENvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gQUREOgotCi0gICAgcmV0dXJuIG5vdEFwcGxpY2FibGU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBGYXVsdHMuCi0gICAqIAotICAgKiBAcGFyYW0gaW5CaW5kaW5nIGluIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gc29hcCBmYXVsdHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHByb2Nlc3NpbmcgYmluZGluZyBmYXVsdHMuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEZhdWx0W10gZ2V0U29hcEZhdWx0cyhCaW5kaW5nIGluQmluZGluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBWZWN0b3Igc29hcEZhdWx0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBiaW5kaW5nRmF1bHQgb25lIGF0IGEgdGltZQotICAgIEJpbmRpbmdGYXVsdFtdIGJpbmRpbmdGYXVsdHMgPSBnZXRBbGxCaW5kaW5nRmF1bHRzKGluQmluZGluZyk7Ci0gICAgZm9yIChpbnQgZmF1bHQgPSAwOyBmYXVsdCA8IGJpbmRpbmdGYXVsdHMubGVuZ3RoOyBmYXVsdCsrKQotICAgIHsKLSAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSBnZXRTb2FwRmF1bHQoYmluZGluZ0ZhdWx0c1tmYXVsdF0pOwotICAgICAgaWYgKHNvYXBGYXVsdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBzb2FwRmF1bHRzLmFkZChzb2FwRmF1bHQpOwotICAgICAgfQotICAgIH0KLQotICAgIFNPQVBGYXVsdFtdIHNvYXBGYXVsdEFycmF5ID0gbmV3IFNPQVBGYXVsdFtzb2FwRmF1bHRzLnNpemUoKV07Ci0gICAgc29hcEZhdWx0cy5jb3B5SW50byhzb2FwRmF1bHRBcnJheSk7Ci0KLSAgICByZXR1cm4gc29hcEZhdWx0QXJyYXk7Ci0gIH0KLQotICAvKioKLSAgKiBNZXRob2QgZ2V0QWxsQmluZGluZ0ZhdWx0cy4KLSAgKiAKLSAgKiBAcGFyYW0gaW5CaW5kaW5nIGJpbmRpbmcuCi0gICogQHJldHVybiBhbGwgYmluZGluZyBmYXVsdHMuCi0gICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICovCi0gIHByb3RlY3RlZCBCaW5kaW5nRmF1bHRbXSBnZXRBbGxCaW5kaW5nRmF1bHRzKEJpbmRpbmcgaW5CaW5kaW5nKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgVmVjdG9yIGZhdWx0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIHRyeQotICAgIHsKLQotICAgICAgSXRlcmF0b3IgYmluZGluZ09wZXJhdGlvbnMgPSBpbkJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAoYmluZGluZ09wZXJhdGlvbnMuaGFzTmV4dCgpKQotICAgICAgewotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBibyA9IChCaW5kaW5nT3BlcmF0aW9uKSBiaW5kaW5nT3BlcmF0aW9ucy5uZXh0KCk7Ci0gICAgICAgICAgSXRlcmF0b3IgYmluZGluZ0ZhdWx0cyA9IGJvLmdldEJpbmRpbmdGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChiaW5kaW5nRmF1bHRzLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIGZhdWx0cy5hZGQoKEJpbmRpbmdGYXVsdCkgYmluZGluZ0ZhdWx0cy5uZXh0KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgewotCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gbm8gYmluZGluZyBvcGVyYXRpb25zIGluIHRoaXMgYmluZGluZyAtIGlnbm9yZSAmIGNvbnRpbnVlCi0gICAgfQotCi0gICAgQmluZGluZ0ZhdWx0W10gZmF1bHRBcnJheSA9IG5ldyBCaW5kaW5nRmF1bHRbZmF1bHRzLnNpemUoKV07Ci0gICAgZmF1bHRzLmNvcHlJbnRvKGZhdWx0QXJyYXkpOwotCi0gICAgcmV0dXJuIGZhdWx0QXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFdTRExGYXVsdHMuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0ZhdWx0IGEgYmluZGluZyBmYXVsdC4KLSAgICogQHJldHVybiBXU0RMIGZhdWx0cy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEZhdWx0IGdldFNvYXBGYXVsdChCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSXRlcmF0b3IgZmF1bHRFeHRlbnNpYmxlcyA9Ci0gICAgICAgIGJpbmRpbmdGYXVsdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAoZmF1bHRFeHRlbnNpYmxlcy5oYXNOZXh0KCkgJiYgc29hcEZhdWx0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEZhdWx0ID0gKFNPQVBGYXVsdCkgZmF1bHRFeHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgICAgICB7IC8vIGlnbm9yZSBldmVyeXRoaW5nIGJ1dCBTT0FQIEZhdWx0IGVsZW1lbnRzLgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRTb2FwSGVhZGVyLgotICAgKiAKLSAgICogQHBhcmFtIGluQmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gU09BUCBoZWFkZXJzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgcHJvY2Vzc2luZy4KLSAgICovCi0gIHByb3RlY3RlZCBTT0FQSGVhZGVyW10gZ2V0U29hcEhlYWRlcnMoQmluZGluZyBpbkJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBhbGwgYmluZGluZ3MKLSAgICBCaW5kaW5nW10gYmluZGluZ0xpc3QgPSBuZXcgQmluZGluZ1sxXTsKLSAgICBiaW5kaW5nTGlzdFswXSA9IGluQmluZGluZzsKLQotICAgIFZlY3RvciBzb2FwSGVhZGVyTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBiaW5kaW5nIG9uZSBhdCBhIHRpbWUKLSAgICBmb3IgKGludCBiaW5kaW5nID0gMDsgYmluZGluZyA8IGJpbmRpbmdMaXN0Lmxlbmd0aDsgYmluZGluZysrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBnZXQgdGhlIGxpc3Qgb2YgYmluZGluZyBPcGVyYXRpb25zCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBiaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgICAgKEJpbmRpbmdPcGVyYXRpb25bXSkgYmluZGluZ0xpc3RbYmluZGluZ10KLSAgICAgICAgICAgIC5nZXRCaW5kaW5nT3BlcmF0aW9ucygpCi0gICAgICAgICAgICAudG9BcnJheSgKLSAgICAgICAgICAgIG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLQotICAgICAgICAvLyBnZXQgcmVmZXJlbmNlcyB0byB0aGUgZXh0ZW5zaWJsZSBlbGVtZW50cyB3aXRoaW4gdGhlIDxpbnB1dD4gYW5kIDxvdXRwdXQ+IGVsZW1lbnRzIG9mIHRoaXMgYmluZGluZyA8b3BlcmF0aW9uPi4gCi0gICAgICAgIGZvciAoaW50IGJvID0gMDsgYm8gPCBiaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGg7IGJvKyspCi0gICAgICAgIHsKLQotICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgaW5wdXQvb3V0cHV0IGV4dGVuc2libGVzLCBsb29raW5nIGZvciA8U09BUDpCb2R5PiBlbGVtZW50cy4KLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbnNbYm9dLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0KLSAgICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNbYm9dLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAgICAgSXRlcmF0b3IgZXh0RWxlbWVudHMgPQotICAgICAgICAgICAgICBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChleHRFbGVtZW50cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc29hcEhlYWRlckxpc3QuYWRkKChTT0FQSGVhZGVyKSBleHRFbGVtZW50cy5uZXh0KCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgeyAvLyBpZ25vcmUgZXZlcnl0aGluZyBidXQgU09BUCBIZWFkZXIuCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXh0RWxlbWVudHMgPSBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoZXh0RWxlbWVudHMuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNvYXBIZWFkZXJMaXN0LmFkZCgoU09BUEhlYWRlcikgZXh0RWxlbWVudHMubmV4dCgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgSGVhZGVyLgotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsgLy8gbm8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgPGlucHV0PiBvciA8b3V0cHV0PiAtIGlnbm9yZSA6IG5vdCBjaGVja2luZyB0aGlzIGhlcmUuCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gYmluZGluZyBvcGVyYXRpb25zIGluIHRoaXMgYmluZGluZyAtIGlnbm9yZSAmIGNvbnRpbnVlCi0gICAgICB9Ci0gICAgfQotCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJBcnJheSA9IG5ldyBTT0FQSGVhZGVyW3NvYXBIZWFkZXJMaXN0LnNpemUoKV07Ci0gICAgc29hcEhlYWRlckxpc3QuY29weUludG8oc29hcEhlYWRlckFycmF5KTsKLQotICAgIHJldHVybiBzb2FwSGVhZGVyQXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBIZWFkZXJGYXVsdHMuCi0gICAqIAotICAgKiBXU0RMRG9jdW1lbnQgZ2V0dGVyIG1ldGhvZCAtIG1heWJlIGJldHRlciBvZmYgaW4gY2xhc3MgV1NETERvY3VtZW50Li4uCi0gICAqIAotICAgKiBAcGFyYW0gaW5CaW5kaW5nIGEgYmluZGluZy4KLSAgICogQHJldHVybiBTT0FQIGhlYWRlciBmYXVsdHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBIZWFkZXJGYXVsdFtdIGdldFNvYXBIZWFkZXJGYXVsdHMoQmluZGluZyBpbkJpbmRpbmcpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgVmVjdG9yIHNvYXBIZWFkZXJGYXVsdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgU09BUCBoZWFkZXJzCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJBcnJheSA9IGdldFNvYXBIZWFkZXJzKGluQmluZGluZyk7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IGFuZCBnZXQgdGhlIGhlYWRlciBmYXVsdHMKLSAgICBMaXN0IGxpc3QgPSBudWxsOwotICAgIGZvciAoaW50IGhlYWRlciA9IDA7IGhlYWRlciA8IHNvYXBIZWFkZXJBcnJheS5sZW5ndGg7IGhlYWRlcisrKQotICAgIHsKLSAgICAgIC8vIEdldCBsaXN0IGZvciB0aGlzIGhlYWRlcgotICAgICAgaWYgKChsaXN0ID0gc29hcEhlYWRlckFycmF5W2hlYWRlcl0uZ2V0U09BUEhlYWRlckZhdWx0cygpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBBZGQgdG8gcHJpbWFyeSBsaXN0ICAgICAgCi0gICAgICAgIHNvYXBIZWFkZXJGYXVsdExpc3QuYWRkQWxsKGxpc3QpOwotICAgICAgfQotICAgIH0KLQotICAgIFNPQVBIZWFkZXJGYXVsdFtdIHNvYXBIZWFkZXJGYXVsdEFycmF5ID0KLSAgICAgIG5ldyBTT0FQSGVhZGVyRmF1bHRbc29hcEhlYWRlckZhdWx0TGlzdC5zaXplKCldOwotICAgIHNvYXBIZWFkZXJGYXVsdExpc3QuY29weUludG8oc29hcEhlYWRlckZhdWx0QXJyYXkpOwotCi0gICAgcmV0dXJuIHNvYXBIZWFkZXJGYXVsdEFycmF5OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRTb2FwQm9kaWVzLgotICAgKiAKLSAgICogV1NETERvY3VtZW50IGdldHRlciBtZXRob2QgLSBtYXliZSBiZXR0ZXIgb2ZmIGluIGNsYXNzIFdTRExEb2N1bWVudC4uLgotICAgKiAKLSAgICogQHBhcmFtIGluQmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gU09BUCBib2RpZXMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBCb2R5W10gZ2V0U29hcEJvZGllcyhCaW5kaW5nIGluQmluZGluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUkVNT1ZFOiBHZXQgYWxsIGJpbmRpbmdzCi0gICAgLy9CaW5kaW5nW10gYmluZGluZ0xpc3QgPSB3c2RsRG9jdW1lbnQuZ2V0QmluZGluZ3MoKTsKLSAgICBCaW5kaW5nW10gYmluZGluZ0xpc3QgPSBuZXcgQmluZGluZ1sxXTsKLSAgICBiaW5kaW5nTGlzdFswXSA9IGluQmluZGluZzsKLQotICAgIFZlY3RvciBzb2FwQm9kaWVzID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gR28gdGhyb3VnaCBlYWNoIGJpbmRpbmcgb25lIGF0IGEgdGltZQotICAgIGZvciAoaW50IGJpbmRpbmcgPSAwOyBiaW5kaW5nIDwgYmluZGluZ0xpc3QubGVuZ3RoOyBiaW5kaW5nKyspCi0gICAgewotICAgICAgLy8gZ2V0IHRoZSBsaXN0IG9mIGJpbmRpbmcgT3BlcmF0aW9ucwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIGJpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgKEJpbmRpbmdPcGVyYXRpb25bXSkgYmluZGluZ0xpc3RbYmluZGluZ10KLSAgICAgICAgICAuZ2V0QmluZGluZ09wZXJhdGlvbnMoKQotICAgICAgICAgIC50b0FycmF5KAotICAgICAgICAgIG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLQotICAgICAgLy8gZ2V0IHJlZmVyZW5jZXMgdG8gdGhlIGV4dGVuc2libGUgZWxlbWVudHMgd2l0aGluIHRoZSA8aW5wdXQ+IGFuZCA8b3V0cHV0PiBlbGVtZW50cyBvZiB0aGlzIGJpbmRpbmcgPG9wZXJhdGlvbj4uIAotICAgICAgZm9yIChpbnQgYm8gPSAwOyBibyA8IGJpbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgYm8rKykKLSAgICAgIHsKLQotICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGlucHV0L291dHB1dCBleHRlbnNpYmxlcywgbG9va2luZyBmb3IgPFNPQVA6Qm9keT4gZWxlbWVudHMuCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaW5wdXRFeHRlbnNpYmxlcyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uc1tib10KLSAgICAgICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpCi0gICAgICAgICAgICAgIC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgICAgICAgICAgICAuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaW5wdXRFeHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNvYXBCb2RpZXMuYWRkKChTT0FQQm9keSkgaW5wdXRFeHRlbnNpYmxlcy5uZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgeyAvLyBpZ25vcmUgZXZlcnl0aGluZyBidXQgU09BUCBCb2R5IGVsZW1lbnRzLgotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgeyAvLyBubyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciA8aW5wdXQ+IC0gaWdub3JlIDogbm90IGNoZWNraW5nIHRoaXMgaGVyZS4KLSAgICAgICAgfQotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3Igb3V0cHV0RXh0ZW5zaWJsZXMgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNbYm9dCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nT3V0cHV0KCkKLSAgICAgICAgICAgICAgLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gICAgICAgICAgICAgIC5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChvdXRwdXRFeHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNvYXBCb2RpZXMuYWRkKChTT0FQQm9keSkgb3V0cHV0RXh0ZW5zaWJsZXMubmV4dCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgQm9keSBlbGVtZW50cy4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpCi0gICAgICAgIHsgLy8gbm8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgPG91dHB1dD4uCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBTT0FQQm9keVtdIHNvYXBCb2R5QXJyYXkgPSBuZXcgU09BUEJvZHlbc29hcEJvZGllcy5zaXplKCldOwotICAgIHNvYXBCb2RpZXMuY29weUludG8oc29hcEJvZHlBcnJheSk7Ci0KLSAgICByZXR1cm4gc29hcEJvZHlBcnJheTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0U29hcEJvZHkuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0lucHV0IGEgQmluZGluZ0lucHV0IG9iamVjdC4KLSAgICogQHJldHVybiAgYm9keS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEJvZHkgZ2V0U29hcEJvZHkoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IG51bGw7Ci0KLSAgICBJdGVyYXRvciBleHRlbnNpYmxlcyA9IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChleHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICBpZiAoZXh0ZW5zaWJsZSBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgewotICAgICAgICBzb2FwQm9keSA9IChTT0FQQm9keSkgZXh0ZW5zaWJsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzb2FwQm9keTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0U29hcEJvZHkuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ091dHB1dCBhIEJpbmRpbmdPdXRwdXQgb2JqZWN0LgotICAgKiBAcmV0dXJuIFNPQVAgYm9keS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEJvZHkgZ2V0U29hcEJvZHkoQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBudWxsOwotCi0gICAgSXRlcmF0b3IgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGV4dGVuc2libGVzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBPYmplY3QgZXh0ZW5zaWJsZSA9IGV4dGVuc2libGVzLm5leHQoKTsKLSAgICAgIGlmIChleHRlbnNpYmxlIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICB7Ci0gICAgICAgIHNvYXBCb2R5ID0gKFNPQVBCb2R5KSBleHRlbnNpYmxlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvYXBCb2R5OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzY2hlbWEgdXNlZC4KLSAgICogQHBhcmFtIGRlZiBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFNjaGVtYSB1c2VkLgotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgcHJvYmxlbSBnZXR0aW5nIFdTREwgZGVmaW50aW9ucyAKLSAgICogICAgICAgICBuYW1lc3BhY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFNjaGVtYVVzZWQoRGVmaW5pdGlvbiBkZWYpIHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgc2NoZW1hVXNlZCA9ICIiOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gTmVlZCB0byByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCBzaW5jZSBXU0RMNEogYWx3YXlzIHB1dHMgaW4gdGhlIGRlZmF1bHQgV1NETCBuYW1lc3BhY2UKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gd3NkbERvY3VtZW50LmdldERvY3VtZW50KCk7Ci0gICAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZG9jdW1lbnQgPSBwYXJzZVhNTERvY3VtZW50VVJMKGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSwgbnVsbCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChkb2N1bWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIHJvb3QgZWxlbWVudAotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgICAvLyBHZXQgdGhlIG5hbWVzcGFjZSBmb3IgdGhpcyBlbGVtZW50Ci0gICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgc2NoZW1hVXNlZCA9IGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiB3ZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigicHJvYmxlbSBnZXR0aW5nIFdTREwgZGVmaW50aW9ucyBuYW1lc3BhY2UiKTsKLSAgICB9Ci0KLSAgICAvKgotICAgIC8vIEdldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UKLSAgICBTdHJpbmcgc2NoZW1hVXNlZCA9IGRlZi5nZXROYW1lc3BhY2UoIiIpOwotICAgIAotICAgIC8vIElmIHRoZSBkZWZhdWx0IHdhcyBzZXQsIHRoZW4gcHJvY2VzcyBpdCB0byBnZXQgdGhlIG5hbWVzcGFjZQotICAgIGlmIChzY2hlbWFVc2VkID09IG51bGwpIHsKLSAgICAgIC8vIGRvIGl0IHRoZSBoYXJkIHdheSAoc3RpbGwgYmV0dGVyIHRoYW4gYW5vdGhlciBET00gcGFyc2UpLi4uIAkJCQkKLSAgICAgIC8vV1NETFdyaXRlciB3ID0gbmV3IFdTRExXcml0ZXJJbXBsKCk7Ci0gICAgICB0cnkgewotICAgICAgICBXU0RMV3JpdGVyIHcgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1dTRExXcml0ZXIoKTsKLSAgICAgIAlEb2N1bWVudCBkb2MgPSB3LmdldERvY3VtZW50KGRlZik7Ci0gICAgICAJRWxlbWVudCBlID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgCXNjaGVtYVVzZWQgPSBlLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgfSAKLSAgICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInByb2JsZW0gZ2V0dGluZyBXU0RMIGRlZmludGlvbnMgbmFtZXNwYWNlIik7Ci0gICAgICB9IAotICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkgewotICAgICAgCXRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwcm9ibGVtIGdldHRpbmcgZG9jdW1lbnQgZGVmaW50aW9uIik7Ci0gICAgICB9ICAgICAgCQotICAgIH0KLSAgICAqLwotCi0gICAgcmV0dXJuIHNjaGVtYVVzZWQ7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBCaW5kaW5nLgotICAgKiAKLSAgICogR2V0IHRoZSBTT0FQIGJpbmRpbmcgZm9yIGEgQmluZGluZy4KLSAgICAqIAotICAgKiBAcGFyYW0gYmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gYSBTT0FQIGJpbmRpbmcuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQQmluZGluZyBnZXRTb2FwQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gbnVsbDsKLQotICAgIC8vIEdldCB0aGUgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgTGlzdCBleEVsZW1lbnRzID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoZXhFbGVtZW50cyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICAvLyAgQ2hlY2sgZm9yIDxzb2FwOmJpbmRpbmc+IGVsZW1lbnQKLSAgICAgIHdoaWxlICgoaXRlcmF0b3IuaGFzTmV4dCgpKSAmJiAoc29hcEJpbmRpbmcgPT0gbnVsbCkpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgQmluZGluZyBlbGVtZW50Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJpbmRpbmc7Ci0gIH0KLQotICAvKiogCi0gICAqIENyZWF0ZSBYTUwgc2NoZW1hIHZhbGlkYXRvci4gIFRoaXMgaXMgZG9uZSBoZXJlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgZG8gbm90IGFsbG93Ci0gICAqIHRoZSBkb2N1bWVudExpc3QgZmllbGQgdG8gYmUgYWNjZXNzZWQgZnJvbSB3aXRoaW4gYW4gaW5uZXIgY2xhc3MuCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgdGhlIGJhc2UgVVJMLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgWE1MIHNjaGVtYSB2YWxpZGF0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MU2NoZW1hVmFsaWRhdG9yIGNyZWF0ZVhNTFNjaGVtYVZhbGlkYXRvcihTdHJpbmcgZG9jdW1lbnRCYXNlVVJJKQotICB7Ci0gICAgLy8gQ3JlYXRlIFhNTCBzY2hlbWEgdmFsaWRhdG9yCi0gICAgcmV0dXJuIG5ldyBYTUxTY2hlbWFWYWxpZGF0b3IoZG9jdW1lbnRCYXNlVVJJKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHNjaGVtYSB0YXJnZXQgbmFtZXNwYWNlcy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBkdXJpbmcgcHJvY2Vzc2luZyBtZXRob2QuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRTY2hlbWFUYXJnZXROYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBudWxsLCBuZXh0TGlzdCA9IG51bGw7Ci0KLSAgICAvLyBHZXQgbGlzdCBvZiBleHRlbnNpb24gZWxlbWVudHMgd2l0aGluIHRoZSB0eXBlcyBlbGVtZW50Ci0gICAgVHlwZXMgdHlwZXMgPSBudWxsOwotICAgIGlmICgodHlwZXMgPSBkZWZpbml0aW9uLmdldFR5cGVzKCkpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gbnVsbDsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBuZXh0IGV4dC4gZWxlbWVudAotICAgICAgICBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gdW5rbm93biBleHQuIGVsZW1lbnQsIHRoZW4gc2VlIGlmIGl0IGlzIGEgc2NoZW1hIGVsZW1lbnQKLSAgICAgICAgVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yIHRuc1Byb2Nlc3NvciA9IG51bGw7Ci0gICAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgdG5zUHJvY2Vzc29yID0gbmV3IFRhcmdldE5hbWVzcGFjZVByb2Nlc3NvcihkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLQotCi0gICAgICAgICAgaWYgKChuZXh0TGlzdCA9Ci0gICAgICAgICAgICB0bnNQcm9jZXNzb3IucHJvY2Vzc0FsbFNjaGVtYSgKLSAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnQpLmdldEVsZW1lbnQoKSkpCi0gICAgICAgICAgICAhPSBudWxsKQotICAgICAgICAgICAgaWYgKGxpc3QgPT0gbnVsbCkKLSAgICAgICAgICAgICAgbGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBsaXN0LmFkZEFsbChuZXh0TGlzdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotIC8qKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHNjaGVtYSB0YXJnZXQgbmFtZXNwYWNlcy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBkdXJpbmcgcHJvY2Vzc2luZyBtZXRob2QuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRTY2hlbWFOYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgLy8gQWx3YXlzIGFkZCBjdXJyZW50IGRvY3VtZW50IHRhcmdldE5hbWVzcGFjZQotICAgIExpc3QgdGFyZ2V0TmFtZXNwYWNlTGlzdCA9IGdldFNjaGVtYVRhcmdldE5hbWVzcGFjZUxpc3QoZGVmaW5pdGlvbik7Ci0gICAgCi0gICAgaWYgKCh0YXJnZXROYW1lc3BhY2VMaXN0ICE9IG51bGwpICYmICF0YXJnZXROYW1lc3BhY2VMaXN0LmlzRW1wdHkoKSkKLSAgICAgIGxpc3QuYWRkQWxsKHRhcmdldE5hbWVzcGFjZUxpc3QpOwotICAgIAotICAgIC8vIEdldCBsaXN0IG9mIGltcG9ydGVkIFdTREwgZG9jdW1lbnRzCi0gICAgTWFwIGltcG9ydE1hcCA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpOwotCi0gICAgSW1wb3J0IGltcDsKLQotICAgIC8vIEFkZCBlYWNoIGltcG9ydHMgdGFyZ2V0TmFtZXNwYWNlIHRvIHRoZSBsaXN0Ci0gICAgaWYgKGltcG9ydE1hcCAhPSBudWxsICYmICFpbXBvcnRNYXAuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIHZhbHVlcyA9IGltcG9ydE1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgTGlzdCBpbXBvcnRMaXN0OwotICAgICAgd2hpbGUgKHZhbHVlcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIGltcG9ydExpc3QgPSAoTGlzdCkgdmFsdWVzLm5leHQoKTsKLSAgICAgICAgSXRlcmF0b3IgaW1wb3J0cyA9IGltcG9ydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGltcG9ydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaW1wID0gKEltcG9ydCkgaW1wb3J0cy5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGltcCAhPSBudWxsICYmIGltcC5nZXREZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgICAJbGlzdC5hZGRBbGwoZ2V0U2NoZW1hTmFtZXNwYWNlTGlzdChpbXAuZ2V0RGVmaW5pdGlvbigpKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBCdWlsZCBsaXN0IG9mIFdTREwgdGFyZ2V0TmFtZXNwYWNlcy4KLSAgICogQHBhcmFtIGRlZmluaXRpb24gYSBEZWZpbml0aW9uIG9iamVjdC4KLSAgICogQHJldHVybiBsaXN0IG9mIFdTREwgdGFyZ2V0TmFtZXNwYWNlcy4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGdldFdTRExUYXJnZXROYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHJldHVybiBnZXRXU0RMVGFyZ2V0TmFtZXNwYWNlTGlzdChkZWZpbml0aW9uLCBuZXcgQXJyYXlMaXN0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkIGxpc3Qgb2YgV1NETCB0YXJnZXROYW1lc3BhY2VzLgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiBhIERlZmluaXRpb24gb2JqZWN0LgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgV1NETCB0YXJnZXROYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgZ2V0V1NETFRhcmdldE5hbWVzcGFjZUxpc3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBMaXN0IGFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucykKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoKGRlZmluaXRpb24gIT0gbnVsbCkgJiYgKCFhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMuY29udGFpbnMoZGVmaW5pdGlvbikpKQotICAgIHsKLSAgICAgIGFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucy5hZGQoZGVmaW5pdGlvbik7Ci0gICAgICAKLSAgICAgIC8vIEFsd2F5cyBhZGQgY3VycmVudCBkb2N1bWVudCB0YXJnZXROYW1lc3BhY2UKLSAgICAgIGlmIChkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpICE9IG51bGwpCi0gICAgICAgIGxpc3QuYWRkKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCi0gICAgICAvLyBHZXQgbGlzdCBvZiBpbXBvcnRlZCBXU0RMIGRvY3VtZW50cwotICAgICAgTWFwIGltcG9ydE1hcCA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpOwotCi0gICAgICBJbXBvcnQgaW1wOwotCi0gICAgICAvLyBBZGQgZWFjaCBpbXBvcnRzIHRhcmdldE5hbWVzcGFjZSB0byB0aGUgbGlzdAotICAgICAgaWYgKGltcG9ydE1hcCAhPSBudWxsICYmICFpbXBvcnRNYXAuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciB2YWx1ZXMgPSBpbXBvcnRNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgTGlzdCBpbXBvcnRMaXN0OwotICAgICAgICB3aGlsZSAodmFsdWVzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGltcG9ydExpc3QgPSAoTGlzdCkgdmFsdWVzLm5leHQoKTsKLSAgICAgICAgICBJdGVyYXRvciBpbXBvcnRzID0gaW1wb3J0TGlzdC5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpbXBvcnRzLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbXAgPSAoSW1wb3J0KSBpbXBvcnRzLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChpbXAgIT0gbnVsbCAmJiBpbXAuZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICAgICAgICBsaXN0LmFkZEFsbChnZXRXU0RMVGFyZ2V0TmFtZXNwYWNlTGlzdChpbXAuZ2V0RGVmaW5pdGlvbigpLCBhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMpKTsKLSAgICAgICAgICAgIC8vIGxpc3QuYWRkKGltcC5nZXREZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIEJpbmRpbmdNYXRjaAotICB7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmc7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gICAgcHJpdmF0ZSBTT0FQQmluZGluZyBzb2FwQmluZGluZzsKLSAgICAvL3ByaXZhdGUgVmVjdG9yIGJpbmRpbmdBcmdzOyAvLyBzZXQgb2YgQmluZGluZ0lucHV0cyBhbmQgQmluZGluZ091dHB1dHMKLSAgICBwcml2YXRlIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQ7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQ7Ci0KLSAgICAvLyBBREQ6IG5lZWQgdG8gaW5jbHVkZSBCaW5kaW5nRmF1bHQgc3VwcG9ydC4uLgotICAgIHB1YmxpYyBCaW5kaW5nTWF0Y2goCi0gICAgICBCaW5kaW5nIGIsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvLAotICAgICAgU09BUEJpbmRpbmcgc2IsCi0gICAgICBCaW5kaW5nSW5wdXQgYmluLAotICAgICAgQmluZGluZ091dHB1dCBib3V0KQotICAgIHsKLSAgICAgIGJpbmRpbmcgPSBiOwotICAgICAgYmluZGluZ09wZXJhdGlvbiA9IGJvOwotICAgICAgc29hcEJpbmRpbmcgPSBzYjsKLSAgICAgIC8vYmluZGluZ0FyZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvL2lmIChiaW4gICE9IG51bGwpIHsgYmluZGluZ0FyZ3MuYWRkKGJpbik7ICB9Ci0gICAgICAvL2lmIChib3V0ICE9IG51bGwpIHsgYmluZGluZ0FyZ3MuYWRkKGJvdXQpOyB9Ci0gICAgICBiaW5kaW5nSW5wdXQgPSBiaW47Ci0gICAgICBiaW5kaW5nT3V0cHV0ID0gYm91dDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ01hdGNoKAotICAgICAgQmluZGluZyBiLAotICAgICAgQmluZGluZ09wZXJhdGlvbiBibywKLSAgICAgIFNPQVBCaW5kaW5nIHNiLAotICAgICAgQmluZGluZ0lucHV0IGJpbikKLSAgICB7Ci0gICAgICB0aGlzKGIsIGJvLCBzYiwgYmluLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ01hdGNoKAotICAgICAgQmluZGluZyBiLAotICAgICAgQmluZGluZ09wZXJhdGlvbiBibywKLSAgICAgIFNPQVBCaW5kaW5nIHNiLAotICAgICAgQmluZGluZ091dHB1dCBib3V0KQotICAgIHsKLSAgICAgIHRoaXMoYiwgYm8sIHNiLCBudWxsLCBib3V0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzb2FwQmluZGluZy4KLSAgICAgKiBAcmV0dXJuIFNPQVBCaW5kaW5nCi0gICAgICovCi0gICAgcHVibGljIFNPQVBCaW5kaW5nIGdldFNvYXBCaW5kaW5nKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc29hcEJpbmRpbmc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYmluZGluZ09wZXJhdGlvbi4KLSAgICAgKiBAcmV0dXJuIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgICB7Ci0gICAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nSW5wdXQuCi0gICAgICogQHJldHVybiBCaW5kaW5nSW5wdXQKLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEJpbmRpbmdJbnB1dCgpCi0gICAgewotICAgICAgcmV0dXJuIGJpbmRpbmdJbnB1dDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nT3V0cHV0LgotICAgICAqIEByZXR1cm4gQmluZGluZ091dHB1dAotICAgICAqLwotICAgIHB1YmxpYyBCaW5kaW5nT3V0cHV0IGdldEJpbmRpbmdPdXRwdXQoKQotICAgIHsKLSAgICAgIHJldHVybiBiaW5kaW5nT3V0cHV0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc0JpbmRpbmdJbnB1dCgpCi0gICAgewotICAgICAgcmV0dXJuICh0aGlzLmJpbmRpbmdJbnB1dCAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNCaW5kaW5nT3V0cHV0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gKHRoaXMuYmluZGluZ091dHB1dCAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nLgotICAgICAqIEByZXR1cm4gQmluZGluZwotICAgICAqLwotICAgIHB1YmxpYyBCaW5kaW5nIGdldEJpbmRpbmcoKQotICAgIHsKLSAgICAgIHJldHVybiBiaW5kaW5nOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBiaW5kaW5nIG1hdGNoZXMuCi0gICogQHBhcmFtIGJpbmRpbmcgYSBiaW5kaW5nLgotICAqIEBwYXJhbSBzb2FwQmluZGluZ1N0eWxlIHNvYXAgYmluZGluZyBzdHlsZS4KLSAgKiBAcGFyYW0gc29hcEJvZHlVc2Ugc29hcCBib2R5IHVzZS4KLSAgKiBAcmV0dXJuIGJpbmRpbmcgbWF0Y2hlcy4KLSAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgcHJvY2Vzc2luZy4KLSAgKi8KLSAgcHVibGljIEJpbmRpbmdNYXRjaFtdIGdldEJpbmRpbmdNYXRjaGVzKAotICAgIEJpbmRpbmcgYmluZGluZywKLSAgICBTdHJpbmcgc29hcEJpbmRpbmdTdHlsZSwKLSAgICBTdHJpbmcgc29hcEJvZHlVc2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBWZWN0b3IgYmluZGluZ01hdGNoZXMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvLyBDaGVjayBiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBnZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLQotICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNvYXA6YmluZGluZyBmb3IgdGhpcyBXU0RMIGJpbmRpbmcgaXMgdGhlIHNwZWNpZmllZCBzdHlsZQotICAgIC8vIEFERDogY2hlY2sgZm9yIG51bGwgcG9pbnRlcgotICAgIGlmIChzb2FwQmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBkZWZhdWx0U3R5bGUgPSBzb2FwQmluZGluZy5nZXRTdHlsZSgpOwotCi0gICAgICBpZiAoZGVmYXVsdFN0eWxlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRTdHlsZSA9IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0M7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCB0aGUgc2V0IG9mIG9wZXJhdGlvbnMgZm9yIHRoaXMgV1NETCBiaW5kaW5nCi0gICAgICBMaXN0IGJpbmRpbmdPcHNMaXN0ID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgaWYgKGJpbmRpbmdPcHNMaXN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEl0ZXJhdG9yIGJpbmRpbmdPcHMgPSBiaW5kaW5nT3BzTGlzdC5pdGVyYXRvcigpOwotICAgICAgICAvLyBmb3IgZWFjaCBiaW5kaW5nIG9wZXJhdGlvbjoKLSAgICAgICAgd2hpbGUgKGJpbmRpbmdPcHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSAoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ09wcy5uZXh0KCk7Ci0KLSAgICAgICAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcCA9IGdldFNvYXBPcGVyYXRpb24oYmluZGluZ09wKTsKLQotICAgICAgICAgIGlmICgoc29hcE9wID09IG51bGwgJiYgZGVmYXVsdFN0eWxlLmVxdWFscyhzb2FwQmluZGluZ1N0eWxlKSkKLSAgICAgICAgICAgIHx8IChzb2FwT3AgIT0gbnVsbAotICAgICAgICAgICAgICAmJiBzb2FwT3AuZ2V0U3R5bGUoKSA9PSBudWxsCi0gICAgICAgICAgICAgICYmIGRlZmF1bHRTdHlsZS5lcXVhbHMoc29hcEJpbmRpbmdTdHlsZSkpCi0gICAgICAgICAgICB8fCAoc29hcE9wICE9IG51bGwKLSAgICAgICAgICAgICAgJiYgc29hcE9wLmdldFN0eWxlKCkgIT0gbnVsbAotICAgICAgICAgICAgICAmJiBzb2FwT3AuZ2V0U3R5bGUoKS5lcXVhbHMoc29hcEJpbmRpbmdTdHlsZSkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGNoZWNrIGJpbmRpbmcgaW5wdXQgJiBvdXRwdXQKLSAgICAgICAgICAgIEJpbmRpbmdJbnB1dCBiSW5wdXQgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgICAgICBpZiAoYklucHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNPQVBCb2R5IGlucHV0U29hcEJvZHkgPSBnZXRTb2FwQm9keShiSW5wdXQpOwotICAgICAgICAgICAgICBpZiAoaW5wdXRTb2FwQm9keSA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgKGlucHV0U29hcEJvZHkuZ2V0VXNlKCkgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgJiYgIWlucHV0U29hcEJvZHkuZ2V0VXNlKCkuZXF1YWxzKHNvYXBCb2R5VXNlKSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBiSW5wdXQgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEJpbmRpbmdPdXRwdXQgYk91dHB1dCA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgICAgICBpZiAoYk91dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTT0FQQm9keSBvdXRwdXRTb2FwQm9keSA9IGdldFNvYXBCb2R5KGJPdXRwdXQpOwotCi0gICAgICAgICAgICAgIGlmIChvdXRwdXRTb2FwQm9keSA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgKG91dHB1dFNvYXBCb2R5LmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICYmICFvdXRwdXRTb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoc29hcEJvZHlVc2UpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJPdXRwdXQgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoYk91dHB1dCAhPSBudWxsKSB8fCAoYklucHV0ICE9IG51bGwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgbWF0Y2gsIGFkZCB0byB0aGUgdmVjdG9yCi0gICAgICAgICAgICAgIGJpbmRpbmdNYXRjaGVzLmFkZCgKLSAgICAgICAgICAgICAgICBuZXcgQmluZGluZ01hdGNoKAotICAgICAgICAgICAgICAgICAgYmluZGluZywKLSAgICAgICAgICAgICAgICAgIGJpbmRpbmdPcCwKLSAgICAgICAgICAgICAgICAgIHNvYXBCaW5kaW5nLAotICAgICAgICAgICAgICAgICAgYklucHV0LAotICAgICAgICAgICAgICAgICAgYk91dHB1dCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIEJpbmRpbmdNYXRjaFtdIEJpbmRpbmdNYXRjaEFycmF5ID0gbmV3IEJpbmRpbmdNYXRjaFtiaW5kaW5nTWF0Y2hlcy5zaXplKCldOwotICAgIGJpbmRpbmdNYXRjaGVzLmNvcHlJbnRvKEJpbmRpbmdNYXRjaEFycmF5KTsKLSAgICByZXR1cm4gQmluZGluZ01hdGNoQXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBPcGVyYXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBiaW5kaW5nT3BlcmF0aW9uIGEgYmluZGluZyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gYSBzb2FwIG9wZXJhdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgd2hpbGUgcHJvY2Vzc2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU09BUE9wZXJhdGlvbiBnZXRTb2FwT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgSXRlcmF0b3IgZXh0ZW5zaWJsZXMgPQotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChleHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICBpZiAoZXh0ZW5zaWJsZSBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAoU09BUE9wZXJhdGlvbikgZXh0ZW5zaWJsZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAKLSAgICogUmV0dXJucyBhbiBhcnJheSBvZiBTT0FQT3BlcmF0aW9ucyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3c2RsOmJpbmRpbmcgc3VwcGxpZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaE1hcCBnZXRTb2FwT3BlcmF0aW9ucyhCaW5kaW5nIGJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIEhhc2hNYXAgc29hcE9wZXJhdGlvbkxpc3QgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgaWYgKGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8vVmVjdG9yIHNvYXBPcFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdldCB0aGUgbGlzdCBvZiBiaW5kaW5nIG9wZXJhdGlvbnMKLSAgICBJdGVyYXRvciBvcGVyYXRpb25zID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0KLSAgICAvLyBDaGVjayBlYWNoIGJpbmRpbmcgb3BlcmF0aW9uIHRvIHNlZSBpZiBpdCBoYXMgYSBzb2FwIG9wZXJhdGlvbiBlbGVtZW50Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gbnVsbDsKLSAgICB3aGlsZSAob3BlcmF0aW9ucy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLm5leHQoKTsKLSAgICAgIEl0ZXJhdG9yIGV4dGVuc2libGVzID0KLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGV4dGVuc2libGVzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICAgIGlmIChleHRlbnNpYmxlIGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHNvYXBPcGVyYXRpb25MaXN0LnB1dChleHRlbnNpYmxlLCBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvL3JldHVybiAoU09BUE9wZXJhdGlvbltdKXNvYXBPcFZlY3Rvci50b0FycmF5KG5ldyBTT0FQT3BlcmF0aW9uW10ge30pOwotICAgIHJldHVybiBzb2FwT3BlcmF0aW9uTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayBwYXJ0IGF0dHJpYnV0ZXMuCi0gICAqIEBwYXJhbSBiaW5kaW5nTWF0Y2ggYW4gYXJyYXkgb2YgQmluZGluZ01hdGNoIG9iamVjdHMuCi0gICAqIEBwYXJhbSBpbk9yT3V0IGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGF0dHJpYiBhdHRyaWJ1dGUuCi0gICAqIEByZXR1cm4gYSBib29sZWFuLgotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgdGhlIHBhcnQgaXMgbm90IGNvbXBsaWFudC4KLSAgICovCi0gIC8vIEdUIC0gcmV3b3JrIHRoaXMgbWV0aG9kIHdpdGggYSBiZXR0ZXIgd2F5IG9mIHBhcmFtZXRlcml6aW5nIHRoZSBnZXR0ZXJzIHJlcXVpcmVkIGZvciB0aGUgaW52b2NhdGlvbi4KLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tQYXJ0QXR0cmlidXRlcygKLSAgICBCaW5kaW5nTWF0Y2hbXSBiaW5kaW5nTWF0Y2gsCi0gICAgU3RyaW5nIGluT3JPdXQsCi0gICAgU3RyaW5nIGF0dHJpYikKLSAgICB0aHJvd3MgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbgotICB7Ci0KLSAgICBpZiAoIShpbk9yT3V0LmVxdWFscygidXNlSW5wdXQiKSB8fCBpbk9yT3V0LmVxdWFscygidXNlT3V0cHV0IikpCi0gICAgICB8fCAhKGF0dHJpYi5lcXVhbHMoInVzZVR5cGUiKSB8fCBhdHRyaWIuZXF1YWxzKCJ1c2VFbGVtZW50IikpKQotICAgIHsKLSAgICAgIC8vIGludmFsaWQgYXJndW1lbnQgdmFsdWUgc3VwcGxpZWQgYnkgY2FsbGluZyBtZXRob2QgLSAiaW50ZXJuYWwgZXJyb3IiCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5nTWF0Y2gubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgQmluZGluZ01hdGNoIG5leHRNYXRjaCA9IGJpbmRpbmdNYXRjaFtpXTsKLQotICAgICAgLy8gY2hlY2sgdGhlIGFzc29jaWF0ZWQgcGFydHMKLSAgICAgIE1lc3NhZ2UgbXNnOwotICAgICAgTWFwIHBhcnRzOwotICAgICAgSXRlcmF0b3IgcGFydEl0ZXJhdGlvbjsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSBuZXh0TWF0Y2guZ2V0QmluZGluZ09wZXJhdGlvbigpOwotICAgICAgaWYgKGJpbmRpbmdPcCA9PSBudWxsKQotICAgICAgewotICAgICAgICBjb250aW51ZTsgLy8gbm8gQmluZGluZyBPcGVyYXRpb24gZm9yIHNvbWUgcmVhc29uCi0gICAgICB9Ci0KLSAgICAgIE9wZXJhdGlvbiBvcCA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLyoJQUREOiBoYW5kbGUgc29hcDpmYXVsdHMgaW4gc2ltaWxhciB3YXkJICAgCQkKLSAgICAgIHRyeSB7Ci0gICAgICAvLyBjaGVjayBmYXVsdHMgLSByZW1hcmthYmx5IHNpbWlsYXIuLi4uIChuZWVkIHRvIHJldGFpbiBvcGVyYXRpb24gaWQgZm9yIGZhaWx1cmVkZXRhaWwgbXNnKQotICAgICAgCWlmIChuZXh0TWF0Y2guaGFzQmluZGluZ0ZhdWx0KCkpIHsKLSAgICAgIAkJCQkKLSAgICAgIAkJbXNnID0gb3AuZ2V0RmF1bHQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAJCXBhcnRzID0gbXNnLmdldFBhcnRzKCk7Ci0gICAgICAJCQkJICAgIAkJCQkJICAgICAJCQkKLSAgICAgIAkJLy9jaGVjayB0aGF0IGVhY2ggcGFydCBoYXMgYW4gZWxlbWVudCBhdHRyaWJ1dGUgICAgCQkJCi0gICAgICAJCXBhcnRJdGVyYXRpb24gPSBwYXJ0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgCQl3aGlsZSAocGFydEl0ZXJhdGlvbi5oYXNOZXh0KCkpIHsKLSAgICAgIAkJCVBhcnQgcGFydCA9IChQYXJ0KXBhcnRJdGVyYXRpb24ubmV4dCgpOwotICAgICAgCQkJaWYgKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSA9PSBudWxsKSB7Ci0gICAgICAJCQkJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIk9QRVJBVElPTjogIiArIG9wICsgIk1FU1NBR0U6ICIgKyBtc2cpOwotICAgICAgCQkJfQotICAgICAgCQl9CSAJCQkKLSAgICAgIAl9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbikgewotICAgICAgCS8vIG5vIHBhcnRzIGZvdW5kIC0gdGhpcyBxdWFsaWZpZXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKLSAgICAgIAl0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihuLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICAqLwotCi0gICAgICB0cnkKLSAgICAgIHsKLQotICAgICAgICBRTmFtZSBhdHRyaWJ1dGVOYW1lOwotCi0gICAgICAgIC8vR1Q6IERvIHdlIG5lZWQgdG8gY2hlY2sgQmluZGluZ0lucHV0IC8gT3V0cHV0IGhlcmUgPz8KLQotICAgICAgICBpZiAoaW5Pck91dC5lcXVhbHMoInVzZUlucHV0IikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAob3AuZ2V0SW5wdXQoKSA9PSBudWxsIHx8ICFuZXh0TWF0Y2guaGFzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gTm8gSW5wdXQgc28gbm90aGluZyB0byBjaGVjawotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgbXNnID0gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsgLy8gTG9va2luZyBmb3IgT3V0cHV0Ci0gICAgICAgICAgaWYgKG9wLmdldE91dHB1dCgpID09IG51bGwgfHwgIW5leHRNYXRjaC5oYXNCaW5kaW5nT3V0cHV0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gTm8gT3V0cHV0IHNvIG5vdGhpbmcgdG8gY2hlY2sKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLQotICAgICAgICAgIG1zZyA9IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtc2cgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOyAvLyBub3RoaW5nIHRvIGNoZWNrIGZyb20gdGhpcyBCaW5kaW5nIE1hdGNoICg/KQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHBhcnRzIAotICAgICAgICBwYXJ0cyA9IG1zZy5nZXRQYXJ0cygpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcGFydHMgYXR0cmlidXRlLCB0aGVuIG9ubHkgcHJvY2VzcyB0aG9zZSBwYXJ0cwotICAgICAgICBMaXN0IHBhcnRzTmFtZUxpc3QgPSBudWxsOwotICAgICAgICBpZiAoKHBhcnRzTmFtZUxpc3QgPSBnZXRQYXJ0c0xpc3QobmV4dE1hdGNoLCBpbk9yT3V0KSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciBwYXJ0c0xpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgSXRlcmF0b3IgcGFydHNOYW1lSXRlcmF0b3IgPSBwYXJ0c05hbWVMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKHBhcnRzTmFtZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0c0xpc3QuYWRkKHBhcnRzLmdldCgoU3RyaW5nKSBwYXJ0c05hbWVJdGVyYXRvci5uZXh0KCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcGFydEl0ZXJhdGlvbiA9IHBhcnRzTGlzdC5pdGVyYXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSB0aGUgY29tcGxldGUgbGlzdCBvZiBwYXJ0cwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJ0SXRlcmF0aW9uID0gcGFydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vY2hlY2sgdGhhdCBlYWNoIHBhcnQgaGFzIGFuIGVsZW1lbnQgb3IgdHlwZSBhdHRyaWJ1dGUgICAgCQkJCi0gICAgICAgIHdoaWxlIChwYXJ0SXRlcmF0aW9uLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBwYXJ0SXRlcmF0aW9uLm5leHQoKTsKLSAgICAgICAgICBpZiAoYXR0cmliLmVxdWFscygidXNlRWxlbWVudCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7IC8vICJ1c2VUeXBlIgotICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IHBhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiTmFtZSBvZiBvcGVyYXRpb24gdGhhdCBmYWlsZWQ6ICIKLSAgICAgICAgICAgICAgICArIG9wLmdldE5hbWUoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgb3AudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgIlxuTmFtZSBvZiBtZXNzYWdlIHRoYXQgZmFpbGVkOiAiCi0gICAgICAgICAgICAgICAgKyBtc2cuZ2V0UU5hbWUoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgbXNnLnRvU3RyaW5nKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIG4pCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIHBhcnRzIGZvdW5kIC0gdGhpcyBxdWFsaWZpZXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24obi50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7IC8vIHRlc3RzIHN1Y2Nlc3NmdWwKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcGFydHMgbGlzdCBmcm9tIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldFBhcnRzTGlzdChCaW5kaW5nTWF0Y2ggYmluZGluZ01hdGNoLCBTdHJpbmcgdHlwZSkKLSAgewotICAgIExpc3QgcGFydHNMaXN0ID0gbnVsbDsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG51bGw7Ci0KLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyBvcGVyYXRpb24KLSAgICAgIGJpbmRpbmdPcCA9IGJpbmRpbmdNYXRjaC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0KLSAgICAgIC8vIERldGVybWluZSBpZiB0aGUgYmluZGluZyBvcGVyYXRpb24gY29udGFpbnMgYSBzb2FwYmluZDpib2R5IHdpdGggYSBwYXJ0cyBhdHRyaWJ1dGUKLSAgICAgIGlmICh0eXBlLmVxdWFscygidXNlSW5wdXQiKSkKLSAgICAgIHsKLSAgICAgICAgaXRlcmF0b3IgPQotICAgICAgICAgIGJpbmRpbmdPcC5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpdGVyYXRvciA9Ci0gICAgICAgICAgYmluZGluZ09wLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICAgIC8vIGVpdGhlciBubyBiaW5kaW5nIG9wZXJhdGlvbiwgYmluZGluZyBpbnB1dC9vdXRwdXQsIG9yIFNPQVAgZWxlbWVudAotICAgIH0KLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgYmluZGluZyBvcGVyYXRpb24gY29udGFpbnMgYSBzb2FwYmluZDpib2R5IHdpdGggYSBwYXJ0cyBhdHRyaWJ1dGUKLSAgICB3aGlsZSAoKGl0ZXJhdG9yLmhhc05leHQoKSkgJiYgKHBhcnRzTGlzdCA9PSBudWxsKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSAoU09BUEJvZHkpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgcGFydHNMaXN0ID0gc29hcEJvZHkuZ2V0UGFydHMoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKQotICAgICAgeyAvLyBub3QgYSBTT0FQQm9keSBleHRlbnNpYmlsaXR5IGVsZW1lbnQgc28gaWdub3JlCi0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnRzTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgV1NETCBlbGVtZW50LgotICAgKiBAcmV0dXJuIGVsZW1lbnQgbG9jYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbigKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIE9iamVjdCB3c2RsRWxlbWVudCkKLSAgewotICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24gPSBudWxsOwotICAgIFdTRExFbGVtZW50TGlzdCB3c2RsRWxlbWVudExpc3Q7Ci0KLSAgICBpZiAoKHdzZGxFbGVtZW50TGlzdCA9IHdzZGxEb2N1bWVudC5nZXRFbGVtZW50TGlzdCgpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGVsZW1lbnRMb2NhdGlvbiA9IHdzZGxFbGVtZW50TGlzdC5nZXRFbGVtZW50TG9jYXRpb24od3NkbEVsZW1lbnQpOwotICAgIH0KLQotICAgIHJldHVybiBlbGVtZW50TG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGZhaWx1cmUgZGV0YWlsLgotICAgKiBAcGFyYW0gbWVzc2FnZSBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgZW50cnkgY29udGV4dC4KLSAgICogQHJldHVybiBmYWlsdXJlIGRldGFpbC4KLSAgICovCi0gIHByb3RlY3RlZCBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgewotICAgIHJldHVybiBjcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgbWVzc2FnZSwKLSAgICAgIGVudHJ5Q29udGV4dCwKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBmYWlsdXJlIGRldGFpbC4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwuCi0gICAqLwotICBwcm90ZWN0ZWQgRmFpbHVyZURldGFpbCBjcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgT2JqZWN0IHdzZGxFbGVtZW50KQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gcmVwb3J0ZXIuY3JlYXRlRmFpbHVyZURldGFpbCgpOwotICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oCi0gICAgICBnZXRFbGVtZW50TG9jYXRpb24oZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLCB3c2RsRWxlbWVudCkpOwotICAgIHJldHVybiBmYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyoqIAotICAgKiBTT0FQQm9keSwgU09BUEZhdWx0LCBTT0FQSGVhZGVyIGFuZCBTT0FQSGVhZGVyRmF1bHQgY2xhc3MgCi0gICAqIGludGVyZmFjZXMgaGF2ZSBjb21wYXRpYmxlIGdldFVzZSgpIGFuZCBnZXROYW1lc3BhY2VVUkkoKSAKLSAgICogbWV0aG9kcywgYnV0IHdzZGw0aiBkb2VzIG5vdCBkZWNsYXJlIHRoZW0gYXQgdGhlIHBhcmVudCBpbnRlcmZhY2UuIAotICAgKiBUaGVyZWZvcmUgdXNlIHJlZmxlY3Rpb24gdG8gYWNjZXNzIHRoZXNlIGNvbW1vbiBtZXRob2RzLgotICAgKiAKLSAgICogQHBhcmFtIGV4dEVsZW1lbnQgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgbmFtZXNwYWNlIGlzIGZvdW5kIGluIFNPQVAgbGl0ZXJhbC4KLSAgICogQHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24gaWYgdGhpcyBtZXRob2QgY2Fubm90IGJlIGZvdW5kLgotICAgKiBAdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgaW4gYW4gaW52b2tlZCBtZXRob2Qgb3IgY29uc3RydWN0b3IKLSAgICogQHRocm93cyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFtIGF0dGVtcHQgdG8gbG9hZCBhCi0gICAqICAgICAgICAgY2xhc3MgdGhhdCBpdCBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0by4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIG5hbWVzcGFjZUZvdW5kSW5Tb2FwTGl0ZXJhbChFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50KQotICAgIHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24sIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24KLSAgewotICAgIENsYXNzIGMgPSBleHRFbGVtZW50LmdldENsYXNzKCk7Ci0gICAgTWV0aG9kIGdldFVzZU1ldGhvZCA9IGMuZ2V0TWV0aG9kKCJnZXRVc2UiLCBuZXcgQ2xhc3NbMF0pOwotICAgIE1ldGhvZCBnZXROYW1lc3BhY2VVUklNZXRob2QgPSBjLmdldE1ldGhvZCgiZ2V0TmFtZXNwYWNlVVJJIiwgbmV3IENsYXNzWzBdKTsKLQotICAgIC8vICh1c2UgYXR0cmlidXRlIGlzIG1hbmRhdG9yeSBidXQgdGhlIG51bGwgY2FzZSBpcyBjaGVja2VkIGZvciBzaW5jZSBhIG1pc3NpbmcgdXNlIGlzIG5vdAotICAgIC8vIGNoZWNrZWQgd2l0aCB0aGlzIFRBLiBJZiBpdHMgbWlzc2luZyBpdHMgaW52YWxpZCBidXQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGhhdmUgZG9jLWxpdCkuICAgICAJCQotICAgIGlmIChnZXRVc2VNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpID09IG51bGwKLSAgICAgIHx8ICFnZXRVc2VNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBuYW1lc3BhY2UgZm91bmQKLSAgICBib29sZWFuIG5hbWVzcGFjZUZvdW5kID0KLSAgICAgIChnZXROYW1lc3BhY2VVUklNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpICE9IG51bGwpOwotCi0gICAgLy8gcmV0dXJuIHRydWUgaWYgbmFtZXNwYWNlIGZvdW5kCi0gICAgcmV0dXJuIG5hbWVzcGFjZUZvdW5kOwotCi0gIH0KLQotICAvKioKLSAgICogVmVyaWZ5IGV4dGVuc2liaWxpdHkgZWxlbWVudCB1c2VzIGxpdGVyYWwuCi0gICAqIEBwYXJhbSBleHRlbnNpYmxlIC0gZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKiBAdGhyb3dzIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBpZiB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgZm91bmQuCi0gICAqIEB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBpbiBhbiBpbnZva2VkIG1ldGhvZCBvciBjb25zdHJ1Y3RvcgotICAgKiBAdGhyb3dzIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWYgdGhlcmUgaXMgYW0gYXR0ZW1wdCB0byBsb2FkIGEKLSAgICogICAgICAgICBjbGFzcyB0aGF0IGl0IGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNMaXRlcmFsKEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2libGUpCi0gICAgdGhyb3dzIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiwgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbgotICB7Ci0KLSAgICBDbGFzcyBjID0gZXh0ZW5zaWJsZS5nZXRDbGFzcygpOwotICAgIE1ldGhvZCBnZXRVc2VNZXRob2QgPSBjLmdldE1ldGhvZCgiZ2V0VXNlIiwgbmV3IENsYXNzWzBdKTsKLQotICAgIC8vICh1c2UgYXR0cmlidXRlIGlzIG1hbmRhdG9yeSBidXQgdGhlIG51bGwgY2FzZSBpcyBjaGVja2VkIGZvciBzaW5jZSBhIG1pc3NpbmcgdXNlIGlzIG5vdAotICAgIC8vIGNoZWNrZWQgd2l0aCB0aGlzIFRBLiBJZiBpdHMgbWlzc2luZyBpdHMgaW52YWxpZCBidXQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGhhdmUgZG9jLWxpdCkuICAgICAJCQotICAgIGlmIChnZXRVc2VNZXRob2QuaW52b2tlKGV4dGVuc2libGUsIG51bGwpID09IG51bGwKLSAgICAgIHx8ICFnZXRVc2VNZXRob2QuaW52b2tlKGV4dGVuc2libGUsIG51bGwpLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBzaG93biB0byBoYXZlIHVzZT0ibGl0ZXJhbCIKLSAgICByZXR1cm4gdHJ1ZTsKLQotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXNlIHRlc3RzIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKSB7IHJldHVybiB0ZXN0YWJsZTsgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjM5YjVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTAKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTAgZXh0ZW5kcyBCUDIwMTAKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkNWRhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDExCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDExIGV4dGVuZHMgQlAyMDExCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZDllZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAxMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAxMiBleHRlbmRzIEJQMjAxMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDEyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGYwMWNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTMKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTMgZXh0ZW5kcyBCUDIwMTMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJiNmE2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDE0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDE0IGV4dGVuZHMgQlAyMDE0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZTk4MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAxNwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAxNyBleHRlbmRzIEJQMjAxNwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDE3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ1ZTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTgKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTggZXh0ZW5kcyBCUDIwMTgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxOTdmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDE5Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDE5IGV4dGVuZHMgQlAyMDE5Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZjAyMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAyMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAyMCBleHRlbmRzIEJQMjAyMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDIwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzdmMWJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMjEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMjEgZXh0ZW5kcyBCUDIwMjEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAyMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2OTk2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDIyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDIyIGV4dGVuZHMgQlAyMDIyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMzIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDMyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMDdhYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMzIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAzMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAzMiBleHRlbmRzIEJQMjAzMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDMyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDk4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmE5MDVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDk4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwOTgKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwOTggZXh0ZW5kcyBCUDIwOTgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjA5OChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwOTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0YjUyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFdTSTIwOTkuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zLCA8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIFdTLUkgY29uZm9ybWFuY2UgYW5ub3RhdGlvbiBkb2VzIG5vdCBhcHBlYXIgb3V0c2lkZSBhIHdzZGw6cG9ydCwgd3NkbDpiaW5kaW5nLCB3c2RsOnBvcnRUeXBlLCB3c2RsOm9wZXJhdGlvbiwgb3Igd3NkbDptZXNzYWdlIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIFdTSTIwOTkgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjA5OShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNDbGFpbXMgPSBmYWxzZTsKLQotICAvKioKLSAgICogIENoZWNrIGEgV1MtSSBjb25mb3JtYW5jZSBhbm5vdGF0aW9uIGRvZXMgbm90IGFwcGVhciBvdXRzaWRlIGEgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2UgZWxlbWVudCBpZiBub3QgaXQgY3JlYXRlcyBmYWlsdXJlIHJlcG9ydC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVsZW1lbnQgZWwsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIGNvbmZvcm1hbmNlIGNsYWltIHNob3VsZCBiZSB3aXRoaW4gOiBwb3J0LCBiaW5kaW5nLCBwb3J0dHlwZSwgb3BlcmF0aW9uLCBtZXNzYWdlCi0gICAgaWYgKGNvbnRhaW5zQ29uZm9ybWFuY2VDbGFpbShlbCkpCi0gICAgewotICAgICAgY29udGFpbnNDbGFpbXMgPSB0cnVlOwotCi0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotICAgICAgICBlcnJvcnMuYWRkKFdTRExfRkFVTFQsICgoQmluZGluZ0ZhdWx0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChCaW5kaW5nSW5wdXQpIHBhcmVudCkuZ2V0TmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24pCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9PUEVSQVRJT04sICgoQmluZGluZ09wZXJhdGlvbikgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX09VVFBVVCwgKChCaW5kaW5nT3V0cHV0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEZWZpbml0aW9uKQotICAgICAgICBlcnJvcnMuYWRkKFdTRExfREVGSU5JVElPTlMsICgoRGVmaW5pdGlvbikgcGFyZW50KS5nZXRRTmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFNlcnZpY2UpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9TRVJWSUNFLCAoKFNlcnZpY2UpIHBhcmVudCkuZ2V0UU5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBGYXVsdCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX0ZBVUxULCAoKEZhdWx0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBPdXRwdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChPdXRwdXQpIHBhcmVudCkuZ2V0TmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEltcG9ydCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX0lNUE9SVCwgKChJbXBvcnQpIHBhcmVudCkuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgSW5wdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChJbnB1dCkgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgUGFydCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX1BBUlQsICgoUGFydCkgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgVHlwZXMpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9UWVBFUyk7Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RWxlbWVudCh0cnVlKTsKLSAgICAvKgotICAgIHRyYXZlcnNhbC4KLSAgICAJaWdub3JlUG9ydDJFbGVtZW50KCkuCi0gICAgCWlnbm9yZU1lc3NhZ2UyRWxlbWVudCgpLgotICAgIAlpZ25vcmVCaW5kaW5nMkVsZW1lbnQoKS4KLSAgICAJaWdub3JlUG9ydFR5cGUyRWxlbWVudCgpLgotICAgIAlpZ25vcmVPcGVyYXRpb24yRWxlbWVudCgpOwkJCi0gICAgICAqLwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICAvLyBjcmVhdGUgZGV0YWlsIG1lc3NhZ2Ugd2l0aCB0aGUgbGlzdCBvZiBlcnJvciBlbGVtZW50cwotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFjb250YWluc0NsYWltcykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgd2hldGhlciBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbXMuIAotICAgKiBSZXR1cm5zIHRydWUgaWYgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltLiAKLSAgICogQHBhcmFtIGVsCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zQ29uZm9ybWFuY2VDbGFpbShFbGVtZW50IGVsKQotICB7Ci0gICAgaWYgKGVsID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWwgPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KGVsLCBXU0lfQ0xBSU0pOwotICAgIHJldHVybiAoZWwgIT0gbnVsbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGExNTU4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBXU0kyMTAwLgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9ucywgaWYgaXQgY29udGFpbnMgYSB3c2RsOnBvcnQsIHdzZGw6YmluZGluZywgd3NkbDpwb3J0VHlwZSwgd3NkbDpvcGVyYXRpb24sIG9yIHdzZGw6bWVzc2FnZSwgd2hpY2ggaW4gdHVybiBjb250YWlucyBhIGNvbmZvcm1hbmNlIGFubm90YXRpb248L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgY29uZm9ybWFuY2UgYW5ub3RhdGlvbiBvZiB0aGUgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2UsIHZhbGlkYXRlcyB0byB0aGUgc2NoZW1hIGRlZmluZWQgaW4gdGhlIEJhc2ljIFByb2ZpbGUsIGFuZCBpcyBkaXJlY3QgY2hpbGQgb2YgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCBmb3IgdGhlIFdTREwgZWxlbWVudC4gVGhlIHNjaGVtYSBkZWZpbml0aW9uIHVzZXMgImh0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vIiBhcyB0aGUgdGFyZ2V0TmFtZXNwYWNlLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNDbGFpbXMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIHBvcnQgY29udGFpbnMgaWxsZWdhbCBjbGFpbS4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUG9ydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgcG9ydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHBvcnQgIT0gbnVsbCAmJiAhY29udGFpbnNMZWdhbENsYWltKHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpCi0gICAgICBlcnJvcnMuYWRkKFdTRExfUE9SVCwgcG9ydC5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgYmluZGluZyBjb250YWlucyBpbGxlZ2FsIGNsYWltLgotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsCi0gICAgICAmJiAhY29udGFpbnNMZWdhbENsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpCi0gICAgICBlcnJvcnMuYWRkKFdTRExfQklORElORywgYmluZGluZy5nZXRRTmFtZSgpKTsKLSAgfQotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIHBvcnQgdHlwZSBjb250YWlucyBpbGxlZ2FsIGNsYWltLgotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0VHlwZSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnRUeXBlIHR5cGUsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmICh0eXBlICE9IG51bGwgJiYgIWNvbnRhaW5zTGVnYWxDbGFpbSh0eXBlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgZXJyb3JzLmFkZChXU0RMX1BPUlRUWVBFLCB0eXBlLmdldFFOYW1lKCkpOwotICB9Ci0KLSAgLyogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgb3BlcmF0aW9uIGNvbnRhaW5zIGlsbGVnYWwgY2xhaW0uCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwKLSAgICAgICYmICFjb250YWluc0xlZ2FsQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgZXJyb3JzLmFkZChXU0RMX09QRVJBVElPTiwgb3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gIH0KLQotICAvKiBDcmVhdGUgZmFsdXJlIHJlcG9ydCBpZiBtZXNzYWdlIGNvbnRhaW5zIGlsbGVnYWwgY2xhaW0uCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk1lc3NhZ2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG1lc3NhZ2UsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChtZXNzYWdlICE9IG51bGwKLSAgICAgICYmICFjb250YWluc0xlZ2FsQ2xhaW0obWVzc2FnZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkKLSAgICAgIGVycm9ycy5hZGQoV1NETF9NRVNTQUdFLCBtZXNzYWdlLmdldFFOYW1lKCkpOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0T3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0TWVzc2FnZSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQb3J0KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFBvcnRUeXBlKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICAvLyBjcmVhdGUgZGV0YWlsIG1lc3NhZ2Ugd2l0aCB0aGUgbGlzdCBvZiBlcnJvciBlbGVtZW50cwotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFjb250YWluc0NsYWltcykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCB3aGV0aGVyIGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltcy4KLSAgICogUmV0dXJucyB0cnVlIGlmIGRvY3VtZW50YXRpb24gZWxlbWVudCBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbSB3aXRoCi0gICAqIGlsbGVnYWwgc2NoZW1hIGRlZmluaXRpb24gVVJJLiAKLSAgICogbGVnYWwgaXMgJ2h0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vJwotICAgKiBAcGFyYW0gZWwKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNMZWdhbENsYWltKEVsZW1lbnQgZWwpCi0gIHsKLSAgICBpZiAoZWwgPT0gbnVsbCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIGZpbmQgY2xhaW0KLSAgICBlbCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0KLSAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgIGNvbnRhaW5zQ2xhaW1zID0gdHJ1ZTsKLQotICAgIHdoaWxlIChlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfQ0xBSU1fQ09ORk9STVNUTykgPT0gbnVsbAotICAgICAgICB8fCBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfU09BUF9NVVNUVU5ERVJTVEFORCkgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZWwgPSBYTUxVdGlscy5maW5kRWxlbWVudChlbCwgV1NJX0NMQUlNKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhmMDlkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTAxCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTAxIGV4dGVuZHMgQlAyMTAxCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNjI3ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEwMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwMiBleHRlbmRzIEJQMjEwMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjc1ZjE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMDMgZXh0ZW5kcyBCUDIxMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc0Mjc3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTA0IGV4dGVuZHMgQlAyMTA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYmRkZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEwNQotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwNSBleHRlbmRzIEJQMjEwNQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTA1KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU3NDJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMDcgZXh0ZW5kcyBCUDIxMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEwNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ2YmVhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTA4IGV4dGVuZHMgQlAyMTA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTEwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MGNjNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExMCBleHRlbmRzIEJQMjExMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTEwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjkyODZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTEgZXh0ZW5kcyBCUDIxMTEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0MGFiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTEyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTEyIGV4dGVuZHMgQlAyMTEyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMTE4OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExMyBleHRlbmRzIEJQMjExMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTEzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjU1YTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTQKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTQgZXh0ZW5kcyBCUDIxMTQKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2ZWY3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTE1Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTE1IGV4dGVuZHMgQlAyMTE1Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTUoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMzU4ZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExNiBleHRlbmRzIEJQMjExNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTE2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2IzNzdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTcKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTcgZXh0ZW5kcyBCUDIxMTcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkMzMwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTE4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTE4IGV4dGVuZHMgQlAyMTE4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTZjZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExOSBleHRlbmRzIEJQMjExOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTE5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJlMjA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMjAKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMjAgZXh0ZW5kcyBCUDIxMjAKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEyMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI5OTRlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTIyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTIyIGV4dGVuZHMgQlAyMTIyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZjA1YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEyMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEyMyBleHRlbmRzIEJQMjEyMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTIzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY0NTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIyMDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIyMDEgZXh0ZW5kcyBCUDIyMDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjIwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiNTlmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMjAyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMjAyIGV4dGVuZHMgQlAyMjAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIyMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDcxMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjIwOAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjIwOCBleHRlbmRzIEJQMjIwOAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMjA4KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGM1Nzg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI0MDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTI0MDIgZXh0ZW5kcyBCUDI0MDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhY2Q0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDAzIGV4dGVuZHMgU1NCUDI0MDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRmYThlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDA0IGV4dGVuZHMgQlAyNDA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI0MDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZDQyMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjQwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjQwNiBleHRlbmRzIEJQMjQwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyNDA2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzBiZjNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI0MTYKLSAqLwotcHVibGljIGNsYXNzIFdTSTI0MTYgZXh0ZW5kcyBCUDI0MTYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQxNihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MTcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MyMzgzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDE3Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDE3IGV4dGVuZHMgQlAyNDE3Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI0MTcoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YmJiMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjcwMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjcwMCBleHRlbmRzIEJQMjcwMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyNzAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzM3ZjUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI3MDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTI3MDEgZXh0ZW5kcyBCUDI3MDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjcwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2MzcwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNzAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNzAzIGV4dGVuZHMgQlAyNzAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI3MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNDNhN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJNDIwMAotICovCi1wdWJsaWMgY2xhc3MgV1NJNDIwMCBleHRlbmRzIEJQNDIwMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0k0MjAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzIzM2Q5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTQyMDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTQyMDEgZXh0ZW5kcyBCUDQyMDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJNDIwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJkOWJhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0k0MjAyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0k0MjAyIGV4dGVuZHMgQlA0MjAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTQyMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0FydGlmYWN0UmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXJ0aWZhY3RSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4OTlkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXJ0aWZhY3RSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIEFuIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBBcnRpZmFjdFJlZmVyZW5jZSBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1RfUkVGRVJFTkNFOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aW1lc3RhbXAuCi0gICAqIEByZXR1cm4gdGltZXN0YW1wLgotICAgKiBAc2VlICNzZXRUaW1lc3RhbXAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGltZXN0YW1wKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSB0aW1lc3RhbXAgYSB0aW1lc3RhbXAuCi0gICAqIEBzZWUgI2dldFRpbWVzdGFtcAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApOwotCi0gIC8qKgotICAgKiBHZXQgZG9jdW1lbnQgZWxlbWVudC4KLSAgICogQHJldHVybiBkb2N1bWVudCBlbGVtZW50LgotICAgKiBAc2VlICNzZXREb2N1bWVudEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEVsZW1lbnQgZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBkb2N1bWVudCBlbGVtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnRFbGVtZW50IGRvY3VtZW50IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICAgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHNlZSAjZ2V0RG9jdW1lbnRFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudEVsZW1lbnQoCi0gICAgRG9jdW1lbnRFbGVtZW50IGRvY3VtZW50RWxlbWVudCwKLSAgICBTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXNzZXJ0aW9uUmVzdWx0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXNzZXJ0aW9uUmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MTEzZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0Fzc2VydGlvblJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLQotLyoqCi0gKiBUZXN0IGFzc2VydGlvbiByZXN1bHQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEFzc2VydGlvblJlc3VsdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX1JFU1VMVDsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfUkVQT1JULCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBSZXN1bHQgdmFsdWVzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTVUxUX1BBU1NFRCA9ICJwYXNzZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRfRkFJTEVEID0gImZhaWxlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9QUkVSRVFfRkFJTEVEID0gInByZXJlcUZhaWxlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9NSVNTSU5HX0lOUFVUID0gIm1pc3NpbmdJbnB1dCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9XQVJOSU5HID0gIndhcm5pbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRfTk9UX0FQUExJQ0FCTEUgPSAibm90QXBwbGljYWJsZSI7Ci0KLSAgLyoqCi0gICAqIEdldCByZXN1bHQuCi0gICAqIEByZXR1cm4gcmVzdWx0LgotICAgKiBAc2VlICNzZXRSZXN1bHQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVzdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZXN1bHQuCi0gICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCB2YWx1ZS4KLSAgICogQHNlZSAjZ2V0UmVzdWx0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXN1bHQoU3RyaW5nIHJlc3VsdCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24uCi0gICAqIEByZXR1cm4gcHJvZmlsZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRBc3NlcnRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIHByb2ZpbGVBc3NlcnRpb24gcHJvZmlsZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb24oVGVzdEFzc2VydGlvbiBwcm9maWxlQXNzZXJ0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGVudHJ5LgotICAgKiBAcmV0dXJuIGVudHJ5LgotICAgKiBAc2VlICNzZXRFbnRyeQotICAgKi8KLSAgcHVibGljIEVudHJ5IGdldEVudHJ5KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5IGFuIGVudHJ5LgotICAgKiBAc2VlICNnZXRFbnRyeQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnkoRW50cnkgZW50cnkpOwotCi0gIC8qKgotICAgKiBHZXQgZmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqIEBzZWUgI3NldEZhaWx1cmVEZXRhaWxMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldEZhaWx1cmVEZXRhaWxMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBmYWlsdXJlIGRldGFpbCBtZXNzYWdlcy4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxMaXN0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2VzLgotICAgKiBAc2VlICNnZXRGYWlsdXJlRGV0YWlsTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZURldGFpbExpc3QoVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KTsKLQotICAvKioKLSAgICogR2V0IHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gd2FybmluZyBtZXNzYWdlcy4KLSAgICogQHNlZSAjc2V0V2FybmluZ01lc3NhZ2VzCi0gICAqLwotICAvL3B1YmxpYyBWZWN0b3IgZ2V0V2FybmluZ01lc3NhZ2VzKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKiBAcGFyYW0gd2FybmluZ01lc3NhZ2VzIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEBzZWUgI2dldFdhcm5pbmdNZXNzYWdlcwotICAgKi8KLSAgLy9wdWJsaWMgdm9pZCBzZXRXYXJuaW5nTWVzc2FnZXMoVmVjdG9yIHdhcm5pbmdNZXNzYWdlcyk7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEByZXR1cm4gc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAc2VlICNnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBwcmVyZXEgZmFpbGVkIGxpc3QuCi0gICAqIEByZXR1cm4gcHJlcmVxIGZhaWxlZCBsaXN0LgotICAgKiBAc2VlICNzZXRQcmVyZXFGYWlsZWRMaXN0Ci0gICAqLwotICBwdWJsaWMgUHJlcmVxRmFpbGVkTGlzdCBnZXRQcmVyZXFGYWlsZWRMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBwcmVyZXEgZmFpbGVkIGxpc3QuCi0gICAqIEBwYXJhbSBwcmVyZXFGYWlsZWRMaXN0IHByZXJlcSBmYWlsZWQgbGlzdC4KLSAgICogQHNlZSAjZ2V0UHJlcmVxRmFpbGVkTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxRmFpbGVkTGlzdChQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0J1aWxkUmVwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQnVpbGRSZXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlkYmMyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQnVpbGRSZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBQcm9maWxlIHJlcG9ydC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJ1aWxkUmVwb3J0Ci17Ci0gIC8qKgotICAgKiBQcmVyZXEgdHlwZSAtIGVudHJ5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFUkVRX1RZUEVfRU5UUlkgPSAiZW50cnkiOwotCi0gIC8qKgotICAgKiBQcmVyZXEgdHlwZSAtIGVudHJ5IGNvbnRhaW5lci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRVJFUV9UWVBFX0VOVFJZX0NPTlRBSU5FUiA9ICJlbnRyeUNvbnRhaW5lciI7Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCBjdXJyZW50IHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50QXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogQWRkIGFydGlmYWN0IHJlZmVyZXJlbmNlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFydGlmYWN0UmVmZXJlbmNlKEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEVuZCBjdXJyZW50IGFydGlmYWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRBcnRpZmFjdCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSBlbnRyeSB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RW50cnkoRW50cnkgZW50cnkpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSBlbnRyeSB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RW52ZWxvcGVFbnRyeShFbnRyeSBlbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLSAgLyoqCi0gICAqIEVuZCBjdXJyZW50IGVudHJ5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRFbnRyeSgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEFkZCB0ZXN0IGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25SZXN1bHQgdGVzdCBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFzc2VydGlvblJlc3VsdChBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBmb3IgYSBzcGVjaWZpYyB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkIHRoZSB0ZXN0IGFzc2VydGlvbiBJRC4KLSAgICogQHJldHVybiAgdGhlIGFzc2VydGlvbiByZXN1bHQgZm9yIHRoZSBzcGVjaWZpZWQgdGVzdCBhc3NlcnRpb24gSUQuCi0gICAqICAgICAgICAgIElmIGFuIGFzc2VydGlvbiByZXN1bHQgd2FzIG5vdCBmb3VuZCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBnZXRBc3NlcnRpb25SZXN1bHQoU3RyaW5nIGFzc2VydGlvbklkKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5LgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgZW50cnkuCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRhaW5lci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGVudHJ5IGNvbnRhaW5lci4KLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRhaW5lciBjcmVhdGVFbnRyeUNvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgZmFpbHVyZSBkZXRhaWwuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBmYWlsdXJlIGRldGFpbC4KLSAgICovCi0gIHB1YmxpYyBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLQotICAvKioKLSAgICogU2V0IHR5cGUgb2YgcHJlcmVxIHByb2Nlc3NpbmcgLSBlaXRoZXIgZW50cnkgb3IgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBwcmVyZXFUeXBlIHR5cGUgb2YgcHJlcmVxIHByb2Nlc3NpbmcgLSBlaXRoZXIgZW50cnkgb3IgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVyZXFUeXBlKFN0cmluZyBwcmVyZXFUeXBlKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5Y2Q4OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotCi0vKioKLSAqIFRlc3QgYXNzZXJ0aW9uIHRhcmdldC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRW50cnkgZXh0ZW5kcyBFbnRyeVJlc3VsdCwgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9FTlRSWTsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfUkVQT1JULCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgLy9wdWJsaWMgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqLwotICAvL3B1YmxpYyB2b2lkIHNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGVudHJ5IHR5cGUuCi0gICAqIEByZXR1cm4gZW50cnkgdHlwZS4KLSAgICogQHNlZSAjc2V0RW50cnlUeXBlCi0gICAqLwotICBwdWJsaWMgRW50cnlUeXBlIGdldEVudHJ5VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBlbnRyeSB0eXBlLgotICAgKiBAc2VlICNnZXRFbnRyeVR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVudHJ5VHlwZShFbnRyeVR5cGUgZW50cnlUeXBlKTsKLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IG5hbWUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgbmFtZS4KLSAgICogQHNlZSAjc2V0QXJ0aWZhY3ROYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFydGlmYWN0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgYXJ0aWZhY3QgbmFtZS4KLSAgICogQHBhcmFtIGFydGlmYWN0TmFtZSBhcnRpZmFjdCBuYW1lLgotICAgKiBAc2VlICNnZXRBcnRpZmFjdE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFydGlmYWN0TmFtZShTdHJpbmcgYXJ0aWZhY3ROYW1lKTsKLQotICAvKioKLSAgICogR2V0IHJlZmVyZW5jZSBJRC4KLSAgICogQHJldHVybiByZWZlcmVuY2UgSUQuCi0gICAqIEBzZWUgI3NldFJlZmVyZW5jZUlECi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZUlEKCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZWZlcmVuY2UgSUQuCi0gICAqIEBwYXJhbSByZWZlcmVuY2VJRCByZWZlcmVuY2VJRC4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZUlEKFN0cmluZyByZWZlcmVuY2VJRCk7Ci0KLSAgLyoqCi0gICAqIEdldCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcmV0dXJuIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI3NldFBhcmVudEVsZW1lbnROYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudEVsZW1lbnROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50RWxlbWVudE5hbWUgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHNlZSAjZ2V0UGFyZW50RWxlbWVudE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBlbnRyeSBkZXRhaWwuCi0gICAqIEByZXR1cm4gZW50cnkgZGV0YWlsLgotICAgKiBAc2VlICNzZXRFbnRyeURldGFpbAotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRFbnRyeURldGFpbCgpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgZGV0YWlsLgotICAgKiBAcGFyYW0gZGV0YWlsIGVudHJ5IGRldGFpbC4KLSAgICogQHNlZSAjZ2V0RW50cnlEZXRhaWwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVudHJ5RGV0YWlsKE9iamVjdCBkZXRhaWwpOwotCi0gIC8qKgotICAgKiBHZXQgZW50cnkgY29udGFpbmVyLgotICAgKiBAcmV0dXJuIGVudHJ5IGNvbnRhaW5lci4KLSAgICogQHNlZSAjc2V0RW50cnlDb250YWluZXIKLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRhaW5lciBnZXRFbnRyeUNvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgY29udGFpbmVyLgotICAgKiBAcGFyYW0gZW50cnlDb250YWluZXIgZW50cnkgY29udGFpbmVyLgotICAgKiBAc2VlICNnZXRFbnRyeUNvbnRhaW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlDb250YWluZXIoRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIpOwotCi0gIC8qKgotICAgKiBHZXQgc3RhcnQgZWxlbWVudCBzdHJpbmcuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEBwYXJhbSBzaG93TG9nRW50cnkgc2hvdyBsb2cgZW50cnkgb3B0aW9uLgotICAgKiBAcmV0dXJuIHN0YXJ0IFhNTCBlbGVtZW50IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIGJvb2xlYW4gc2hvd0xvZ0VudHJ5KTsKLQotICAvKioKLSAgICogR2V0IHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcGFyYW0gc2hvd0xvZ0VudHJ5IHNob3cgbG9nIGVudHJ5IG9wdGlvbi4KLSAgICogQHJldHVybiBzdGFydCBYTUwgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lLCBib29sZWFuIHNob3dMb2dFbnRyeSwgYm9vbGVhbiBlbnZlbG9wZUFydGlmYWN0VHlwZSk7Ci0gIC8qKgotICAgKiBHZXQgZW5kIGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIGVuZCBYTUwgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvRW50cnlDb250YWluZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeUNvbnRhaW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTkxZTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeUNvbnRhaW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBjb250YWluZXIgd2hpY2ggaGFzIG9uZSBvciBtb3JlIGVudHJpZXMuCi0gKiBGb3IgZXhhbXBsZSwgYSBXU0RMIGRvY3VtZW50IGNvbnRhaW5zIG9uZSBvciBtb3JlIGVsZW1lbnRzLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5Q29udGFpbmVyIGV4dGVuZHMgRW50cnlSZXN1bHQKLXsKLSAgLyoqCi0gICAqIEdldCBjb250YWluZXIgaWQuCi0gICAqIEByZXR1cm4gY29udGFpbmVyIGlkLgotICAgKiBAc2VlICNzZXRJZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotCi0gIC8qKgotICAgKiBTZXQgY29udGFpbmVyIGlkLgotICAgKiBAcGFyYW0gaWQgY29udGFpbmVyIGlkLgotICAgKiBAc2VlICNnZXRJZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeVJlc3VsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5UmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YTRmNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5UmVzdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLS8qKgotICogUmVzdWx0IGZvciBhIHNwZWNpZmljIHRlc3QgYXNzZXJ0aW9uLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5UmVzdWx0Ci17Ci0gIC8qKgotICAgKiBBZGQgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdCBhc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMuCi0gICAqIEByZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdHMuCi0gICAqLwotICBwdWJsaWMgVHJlZU1hcCBnZXRBc3NlcnRpb25SZXN1bHRMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBmb3IgYSBzcGVjaWZpYyB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRoZSBhc3NlcnRpb24gcmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIHRlc3QgYXNzZXJ0aW9uIElELgotICAgKiAgICAgICAgIElmIGFuIGFzc2VydGlvbiByZXN1bHQgd2FzIG5vdCBmb3VuZCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBnZXRBc3NlcnRpb25SZXN1bHQoU3RyaW5nIGFzc2VydGlvbklkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9GYWlsdXJlRGV0YWlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvRmFpbHVyZURldGFpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzhhY2IzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9GYWlsdXJlRGV0YWlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci0KLS8qKgotICogRmFpbHVyZSBkZXRhaWwuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRmFpbHVyZURldGFpbCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUw7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHNlZSAjc2V0RmFpbHVyZU1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmYWlsdXJlTWVzc2FnZSBmYWlsdXJlIGRldGFpbCBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZU1lc3NhZ2UoU3RyaW5nIGZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IHJlZmVyZW5jZSB0eXBlLgotICAgKiBAcmV0dXJuIHJlZmVyZW5jZSB0eXBlLgotICAgKiBAc2VlICNzZXRSZWZlcmVuY2VUeXBlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZVR5cGUoKTsKLQotICAvKioKLSAgICogU2V0IHJlZmVyZW5jZSB0eXBlLgotICAgKiBAcGFyYW0gcmVmZXJlbmNlVHlwZSByZWZlcmVuY2UgdHlwZS4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlVHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlVHlwZShTdHJpbmcgcmVmZXJlbmNlVHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZWZlcmVuY2UgSUQuCi0gICAqIEByZXR1cm4gcmVmZXJlbmNlIElELgotICAgKiBAc2VlICNzZXRSZWZlcmVuY2VJRG4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlSUQoKTsKLQotICAvKioKLSAgICogU2V0IHJlZmVyZW5jZSBJRC4KLSAgICogQHBhcmFtIHJlZmVyZW5jZUlEIHJlZmVyZW5jZSBJRC4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZUlEbihTdHJpbmcgcmVmZXJlbmNlSUQpOwotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRFbGVtZW50TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50TG9jYXRpb24gZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZWxlbWVudExvY2F0aW9uIGVsZW1lbnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUHJlcmVxRmFpbGVkTGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1ByZXJlcUZhaWxlZExpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEwNTlkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUHJlcmVxRmFpbGVkTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBtYWludGFpbiBhbmQgYWNjZXNzIHRoZSBQcmVyZXF1aXNpdGUgRmFpbGVkIExpc3QuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUHJlcmVxRmFpbGVkTGlzdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICAqIEVsZW1lbnQgbmFtZS4KLSAgICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9QUkVSRVFfRkFJTEVEX0xJU1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogQWRkIHRlc3QgYXNzZXJ0aW9uIElELgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uSUQgdGVzdCBhc3NlcnRpb24gSUQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRUZXN0QXNzZXJ0aW9uSUQoU3RyaW5nIGFzc2VydGlvbklEKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjBhZDUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci0KLS8qKgotICogQ29uZm9ybWFuY2UgdGVzdCByZXBvcnQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlcG9ydCBleHRlbmRzIFdTSURvY3VtZW50LCBCdWlsZFJlcG9ydAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fUkVQT1JUOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZXBvcnQgY29udGV4dC4KLSAgICogQHJldHVybiByZXBvcnQgY29udGV4dC4KLSAgICogQHNlZSAjc2V0UmVwb3J0Q29udGV4dAotICAgKi8KLSAgcHVibGljIFJlcG9ydENvbnRleHQgZ2V0UmVwb3J0Q29udGV4dCgpOwotCi0gIC8qKgotICAgKiBTZXQgcmVwb3J0IGNvbnRleHQuCi0gICAqIEBwYXJhbSByZXBvcnRDb250ZXh0IHJlcG9ydCBjb250ZXh0LgotICAgKiBAc2VlICNnZXRSZXBvcnRDb250ZXh0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRDb250ZXh0KFJlcG9ydENvbnRleHQgcmVwb3J0Q29udGV4dCk7Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGFydGlmYWN0LgotICAgKiBAcmV0dXJuIGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0QXJ0aWZhY3QgZ2V0Q3VycmVudEFydGlmYWN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGVudHJ5LgotICAgKiBAcmV0dXJuIGN1cnJlbnQgZW50cnkuCi0gICAqLwotICBwdWJsaWMgRW50cnkgZ2V0Q3VycmVudEVudHJ5KCk7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRFbnRyaWVzLgotICAgKiBAcmV0dXJuIGVudHJ5IGxpc3QuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFbnRyaWVzKCk7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3RzLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXJ0aWZhY3RzKCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeAotICAgKiBAcmV0dXJuIHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBlbmQgZWxlbWVudCBzdHJpbmcuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXgKLSAgICogQHJldHVybiBlbmQgZWxlbWVudCBzdHJpbmcuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgZXJyb3IgWE1MIHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHBhcmFtIGVycm9yRGV0YWlsIGFuIGVycm9yIGRldGFpbC4KLSAgICogQHJldHVybiBlcnJvciBYTUwgc3RyaW5nLiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIFN0cmluZyBlcnJvckRldGFpbCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdW1tYXJ5IHJlc3VsdC4gCi0gICAqIEByZXR1cm4gc3VtbWFyeSByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN1bW1hcnlSZXN1bHQoKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydEFydGlmYWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0QXJ0aWZhY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGExZmI5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0QXJ0aWZhY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuQXJ0aWZhY3RUeXBlOwotCi0vKioKLSAqIFJlcG9ydCBhcnRpZmFjdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZXBvcnRBcnRpZmFjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IHR5cGUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIEFydGlmYWN0VHlwZSBnZXRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhcnRpZmFjdCB0eXBlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RUeXBlIGFydGlmYWN0IHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSk7Ci0KLSAgLyoqCi0gICAqIEFkZCBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5IGFuIGVudHJ5LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRW50cnkoRW50cnkgZW50cnkpOwotCi0gIC8qKgotICAgKiBHZXQgZW50cnkgbGlzdC4KLSAgICogQHJldHVybiBlbnRyeSBsaXN0LgotICAgKi8KLSAgcHVibGljIFRyZWVNYXAgZ2V0RW50cnlMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgZW5kIGVsZW1lbnQgc3RyaW5nLiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiBlbmQgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydENvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1MDdiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLQotLyoqCi0gKiBSZXBvcnQgY29udGV4dC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXBvcnRDb250ZXh0Ci17Ci0gIC8qKgotICAgKiBSZXBvcnQgdGl0bGUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlcG9ydFRpdGxlID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1RJVExFOwotCi0gIC8qKgotICAgKiBQcm9maWxlIGRlZmluaXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgUHJvZmlsZUFzc2VydGlvbnMgcHJvZmlsZUFzc2VydGlvbnM7Ci0KLSAgLyoqCi0gICAqIEFuYWx5emVyLgotICAgKi8KLSAgcHJvdGVjdGVkIEFuYWx5emVyIGFuYWx5emVyOwotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVwb3J0IGNvbnRleHQuCi0gICAqIEBwYXJhbSByZXBvcnRUaXRsZSByZXBvcnQgdGl0bGUuCi0gICAqIEBwYXJhbSBwcm9maWxlQXNzZXJ0aW9ucyBwcm9maWxlIHRlc3QgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGFuYWx5emVyIGFuIEFuYWx5emVyIG9iamVjdC4KLSAgKi8KLSAgcHVibGljIFJlcG9ydENvbnRleHQoCi0gICAgU3RyaW5nIHJlcG9ydFRpdGxlLAotICAgIFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zLAotICAgIEFuYWx5emVyIGFuYWx5emVyKQotICB7Ci0gICAgdGhpcy5yZXBvcnRUaXRsZSA9IHJlcG9ydFRpdGxlOwotICAgIHRoaXMucHJvZmlsZUFzc2VydGlvbnMgPSBwcm9maWxlQXNzZXJ0aW9uczsKLSAgICB0aGlzLmFuYWx5emVyID0gYW5hbHl6ZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlcG9ydCB0aXRsZS4KLSAgICogQHJldHVybiByZXBvcnQgdGl0bGUuCi0gICAqIEBzZWUgI3NldFJlcG9ydFRpdGxlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcG9ydFRpdGxlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlcG9ydFRpdGxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCByZXBvcnQgdGl0bGUuCi0gICAqIEBwYXJhbSByZXBvcnRUaXRsZSByZXBvcnQgdGl0bGUuCi0gICAqIEBzZWUgI2dldFJlcG9ydFRpdGxlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRUaXRsZShTdHJpbmcgcmVwb3J0VGl0bGUpCi0gIHsKLSAgICB0aGlzLnJlcG9ydFRpdGxlID0gcmVwb3J0VGl0bGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHJldHVybiBwcm9maWxlIGRlZmluaXRpb24uCi0gICAqIEBzZWUgI3NldFByb2ZpbGVBc3NlcnRpb25zCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgZ2V0UHJvZmlsZUFzc2VydGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucHJvZmlsZUFzc2VydGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIHByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHNlZSAjZ2V0UHJvZmlsZUFzc2VydGlvbnMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2ZpbGVBc3NlcnRpb25zKFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zKQotICB7Ci0gICAgdGhpcy5wcm9maWxlQXNzZXJ0aW9ucyA9IHByb2ZpbGVBc3NlcnRpb25zOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbmFseXplci4KLSAgICogQHJldHVybiBhbmFseXplci4KLSAgICogQHNlZSAjc2V0QW5hbHl6ZXIKLSAgICovCi0gIHB1YmxpYyBBbmFseXplciBnZXRBbmFseXplcigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hbmFseXplcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplciBhbiBBbmFseXplciBvYmplY3QuCi0gICAqIEBzZWUgI2dldEFuYWx5emVyCi0gICAqIAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QW5hbHl6ZXIoQW5hbHl6ZXIgYW5hbHl6ZXIpCi0gIHsKLSAgICB0aGlzLmFuYWx5emVyID0gYW5hbHl6ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnRXcml0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnRXcml0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU3ZmM2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0V3JpdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gd3JpdGUgdGhlIHJlcG9ydCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZXBvcnRXcml0ZXIgZXh0ZW5kcyBEb2N1bWVudFdyaXRlcgotewotICAvKioKLSAgICogV3JpdGUgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgdXNpbmcgdGhlIGxvY2F0aW9uCi0gICAqIHRoYXQgd2FzIHByZXZpb3VzbHkgc2V0IHVzaW5nIHRoZSBzZXRMb2NhdGlvbiBtZXRob2QuCi0gICAqIEBwYXJhbSByZXBvcnQgYSByZXBvcnQuCi0gICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBiZWVuIGludm9rZWQgCi0gICAqICAgICAgICAgYXQgYW4gaWxsZWdhbCBvciBpbmFwcHJvcHJpYXRlIHRpbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcGFyYW0gcmVwb3J0IGEgcmVwb3J0LgotICAgKiBAcGFyYW0gd3JpdGVyIGEgV3JpdGVyIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQsIFdyaXRlciB3cml0ZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhNzg0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLS8qKgotICogQ29uZm9ybWFuY2UgdGVzdCByZXBvcnRlciBpbnRlcmZhY2UuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlcG9ydGVyIGV4dGVuZHMgQnVpbGRSZXBvcnQsIFdyaXRlUmVwb3J0Ci17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvV3JpdGVSZXBvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9Xcml0ZVJlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwZDlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9Xcml0ZVJlcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyAuLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV3JpdGVSZXBvcnQKLXsKLSAgLyoqCi0gICAqIFN0YXJ0IGNvbmZvcm1hbmNlIHJlcG9ydC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydFJlcG9ydCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEZpbmlzaCB0aGUgY29uZm9ybWFuY2UgcmVwb3J0IGJ5IGFkZGluZyB0aGUgc3VtbWFyeSBhbmQgdGVzdCBjb3ZlcmFnZSBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBmaW5pc2hSZXBvcnQoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBGaW5pc2ggdGhlIGNvbmZvcm1hbmNlIHJlcG9ydCBiZWNhdXNlIG9mIGFuIGFuYWx5emVyIGVycm9yLgotICAgKiBAcGFyYW0gZXJyb3JEZXRhaWwgYW5hbHl6ZXIgZXJyb3IuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIHRoZSBiYXNlIFdTLUkgZXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgZmluaXNoUmVwb3J0V2l0aEVycm9yKFN0cmluZyBlcnJvckRldGFpbCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHJlcG9ydC4KLSAgICogQHJldHVybiByZXBvcnQuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IGdldFJlcG9ydCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXJ0aWZhY3RSZWZlcmVuY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9BcnRpZmFjdFJlZmVyZW5jZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiNDZiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9BcnRpZmFjdFJlZmVyZW5jZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci0KLS8qKgotICogQW4gYXJ0aWZhY3QgcmVmZXJlbmNlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQXJ0aWZhY3RSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgQXJ0aWZhY3RSZWZlcmVuY2UKLXsKLSAgLyoqCi0gICAqIFRpbWVzdGFtcC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGltZXN0YW1wID0gbnVsbDsKLQotICAvKioKLSAgICogT3B0aW9uYWwgZG9jdW1lbnQgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBEb2N1bWVudEVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogT3B0aW9uYWwgZG9jdW1lbnQgZWxlbWVudCBuYW1lc3BhY2UgbmFtZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZWxlbWVudE5hbWVzcGFjZU5hbWUgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlI2dldFRpbWVzdGFtcCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRpbWVzdGFtcCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50aW1lc3RhbXA7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZSNzZXRUaW1lc3RhbXAoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApCi0gIHsKLSAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlI2dldERvY3VtZW50RWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnRFbGVtZW50IGdldERvY3VtZW50RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudEVsZW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZSNzZXREb2N1bWVudEVsZW1lbnQoRG9jdW1lbnRFbGVtZW50LCBTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudEVsZW1lbnQoCi0gICAgRG9jdW1lbnRFbGVtZW50IGRvY3VtZW50RWxlbWVudCwKLSAgICBTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnRFbGVtZW50OwotICAgIHRoaXMuZWxlbWVudE5hbWVzcGFjZU5hbWUgPSBuYW1lc3BhY2VOYW1lOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgcHcucHJpbnRsbigiICBBcnRpZmFjdCBSZWZlcmVuY2U6ICIpOwotICAgIHB3LnByaW50bG4oIiAgICB0aW1lc3RhbXAgLi4uLi4uLi4uLi4gIiArIHRoaXMudGltZXN0YW1wKTsKLQotICAgIGlmICh0aGlzLmRvY3VtZW50RWxlbWVudCAhPSBudWxsKQotICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgIiAgICBkb2N1bWVudEVsZW1lbnQgLi4uLi4gIgotICAgICAgICAgICsgdGhpcy5kb2N1bWVudEVsZW1lbnQudG9YTUxTdHJpbmcodGhpcy5lbGVtZW50TmFtZXNwYWNlTmFtZSkpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgZWxlbWVudCAKLSAgICBwdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX1RJTUVTVEFNUCArICI9XCIiICsgZ2V0VGltZXN0YW1wKCkgKyAiXCI+Iik7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIGRvY3VtZW50IGVsZW1lbnQsIHRoZW4gYWRkIGl0Ci0gICAgaWYgKHRoaXMuZG9jdW1lbnRFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnQoZG9jdW1lbnRFbGVtZW50LnRvWE1MU3RyaW5nKHRoaXMuZWxlbWVudE5hbWVzcGFjZU5hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXNzZXJ0aW9uUmVzdWx0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXNzZXJ0aW9uUmVzdWx0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjJkOGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0Fzc2VydGlvblJlc3VsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLkFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0OwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotCi0vKioKLSAqIFRlc3QgYXNzZXJ0aW9uIHJlc3VsdC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25SZXN1bHRJbXBsIGltcGxlbWVudHMgQXNzZXJ0aW9uUmVzdWx0Ci17Ci0gIC8qKgotICAgKiBBc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyByZXN1bHQgPSBudWxsOwotCi0gIC8qKgotICAgKiBFbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByb2ZpbGUgdGVzdCBhc3NlcnRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogRmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSBmYWlsZWQgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRJbXBsKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldFJlc3VsdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlc3VsdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQjc2V0UmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXN1bHQoU3RyaW5nIHJlc3VsdCkKLSAgewotICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEFzc2VydGlvbigpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRBc3NlcnRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudGVzdEFzc2VydGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRBc3NlcnRpb24ob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pCi0gIHsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb24gPSB0ZXN0QXNzZXJ0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRFbnRyeSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRFbnRyeShvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnkoRW50cnkgZW50cnkpCi0gIHsKLSAgICB0aGlzLmVudHJ5ID0gZW50cnk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQjZ2V0RmFpbHVyZURldGFpbExpc3QoKQotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRGYWlsdXJlRGV0YWlsTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5mYWlsdXJlRGV0YWlsTGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRGYWlsdXJlRGV0YWlsTGlzdChqYXZhLnV0aWwuVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZURldGFpbExpc3QoVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KQotICB7Ci0gICAgdGhpcy5mYWlsdXJlRGV0YWlsTGlzdCA9IGZhaWx1cmVEZXRhaWxMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdHNPcHRpb24gZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24ob3JnLndzaS50ZXN0LmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFzc2VydGlvblJlc3VsdHNPcHRpb24pCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdHNPcHRpb24gPSBhc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldFByZXJlcUZhaWxlZExpc3QoKQotICAgKi8KLSAgcHVibGljIFByZXJlcUZhaWxlZExpc3QgZ2V0UHJlcmVxRmFpbGVkTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5wcmVyZXFGYWlsZWRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I3NldFByZXJlcUZhaWxlZExpc3Qob3JnLndzaS50ZXN0LnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxRmFpbGVkTGlzdChQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QpCi0gIHsKLSAgICB0aGlzLnByZXJlcUZhaWxlZExpc3QgPSBwcmVyZXFGYWlsZWRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfSUQgKyAiPVwiIiArIHRoaXMudGVzdEFzc2VydGlvbi5nZXRJZCgpICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cIiIgKyB0aGlzLnJlc3VsdCArICJcIj4iKTsKLQotICAgIC8vIEFERDogQWRkIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgdGFyZ2V0cwotCi0gICAgLy8gQWRkIHByZXJlcSBmYWlsZWQgbGlzdAotICAgIGlmICh0aGlzLnByZXJlcUZhaWxlZExpc3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChwcmVyZXFGYWlsZWRMaXN0LnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIEFERDogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcwotICAgIC8vIElmIHJlc3VsdCBpcyBmYWlsZWQgb3Igd2FybmluZywgdGhlbiBhZGQgZmFpbHVyZSBtZXNzYWdlCi0gICAgaWYgKChyZXN1bHQuZXF1YWxzKFJFU1VMVF9GQUlMRUQpIHx8IHJlc3VsdC5lcXVhbHMoUkVTVUxUX1dBUk5JTkcpKQotICAgICAgJiYgKGFzc2VydGlvblJlc3VsdHNPcHRpb24uZ2V0U2hvd0ZhaWx1cmVNZXNzYWdlKCkpKQotICAgIHsKLSAgICAgIHB3LnByaW50KAotICAgICAgICAiICAgICAgICA8IgotICAgICAgICAgICsgbnNOYW1lCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX01FU1NBR0UKLSAgICAgICAgICArICIgeG1sOmxhbmc9XCJlblwiPiIpOwotICAgICAgcHcucHJpbnQoRE9NVXRpbHMuY2xlYW5TdHJpbmcodGhpcy50ZXN0QXNzZXJ0aW9uLmdldEZhaWx1cmVNZXNzYWdlKCkpKTsKLSAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSArICI+Iik7Ci0gICAgfQotCi0gICAgLy8gQUREOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzCi0gICAgLy8gSWYgYW55IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2VzIHdlcmUgc3BlY2lmaWVkLCB0aGVuIGFkZCB0aGVtCi0gICAgaWYgKChmYWlsdXJlRGV0YWlsTGlzdCAhPSBudWxsKQotICAgICAgJiYgKGFzc2VydGlvblJlc3VsdHNPcHRpb24uZ2V0U2hvd0ZhaWx1cmVEZXRhaWwoKSkpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBmYWlsdXJlRGV0YWlsTGlzdC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgcHcucHJpbnQoKChGYWlsdXJlRGV0YWlsKSBpdGVyYXRvci5uZXh0KCkpLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEVuZCB0aGUgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0RlZmF1bHRSZXBvcnRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRGVmYXVsdFJlcG9ydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYWMyZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRGVmYXVsdFJlcG9ydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiwgUGFyYXNvZnQgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIFBhcmFzb2Z0IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciByZXBvcnRpbmcgZXJyb3JzIGZyb20gdGhlIGFuYWx5emVyLgotICogRXh0ZW5kIHRoaXMgY2xhc3MgZm9yIHNwZWNpZmljIHR5cGVzIG9mIHJlcG9ydGluZywgc3VjaCBhcyByZXBvcnRpbmcKLSAqIGluIGRpZmZlcmVudCBmb3JtYXRzLCByZXBvcnRpbmcgdG8gZmlsZXMsIHJlcG9ydGluZyB0byBhIEdVSS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBKaW0gQ2x1bmUKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFJlcG9ydGVyIGltcGxlbWVudHMgUmVwb3J0ZXIKLXsKLSAgLyoqCi0gICAqIENvbmZvcm1hbmNlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCBSZXBvcnQgcmVwb3J0OwotCi0gIC8qKgotICAgKiBEb2N1bWVudCB3cml0ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0V3JpdGVyIHJlcG9ydFdyaXRlcjsKLQotICAvKioKLSAgICogQW5hbHl6ZXIgY29uZmlnLgotICAgKi8KLSAgcHJvdGVjdGVkIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnOwotCi0gIC8qKgotICAgKiBBc3NlcnRvaW4gcmVzdWx0IHR5cGUuCi0gICAqLwotICBwcm90ZWN0ZWQgQXNzZXJ0aW9uUmVzdWx0VHlwZSBhc3NlcnRpb25SZXN1bHRUeXBlOwotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVzdWx0IHJlcG9ydGVyLgotICAgKiBAcGFyYW0gcmVwb3J0IGEgUmVwb3J0IG9iamVjdC4KLSAgICogQHBhcmFtIHJlcG9ydFdyaXRlciBhIFJlcG9ydFdyaXRlck9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBEZWZhdWx0UmVwb3J0ZXIoUmVwb3J0IHJlcG9ydCwgUmVwb3J0V3JpdGVyIHJlcG9ydFdyaXRlcikKLSAgewotICAgIHRoaXMucmVwb3J0ID0gcmVwb3J0OwotICAgIHRoaXMucmVwb3J0V3JpdGVyID0gcmVwb3J0V3JpdGVyOwotCi0gICAgLy8gQUREOiBWZXJpZnkgdGhhdCB3cml0ZXIgc2V0IGluIHJlcG9ydFdyaXRlcgotCi0gICAgLy8gR2V0IHJlcG9ydCBjb250ZXh0Ci0gICAgdGhpcy5hbmFseXplckNvbmZpZyA9Ci0gICAgICByZXBvcnQuZ2V0UmVwb3J0Q29udGV4dCgpLmdldEFuYWx5emVyKCkuZ2V0QW5hbHl6ZXJDb25maWcoKTsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdFR5cGUgPQotICAgICAgdGhpcy5hbmFseXplckNvbmZpZy5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkuZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjc2V0Q3VycmVudEFydGlmYWN0KG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50QXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0LnNldEN1cnJlbnRBcnRpZmFjdChyZXBvcnRBcnRpZmFjdCk7Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0QXJ0aWZhY3QuZ2V0U3RhcnRYTUxTdHJpbmcoIiIpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKAotICAgICAgbmV3IFN0cmluZ1JlYWRlcihyZXBvcnQuZ2V0Q3VycmVudEFydGlmYWN0KCkuZ2V0RW5kWE1MU3RyaW5nKCIiKSkpOwotICAgIHJlcG9ydC5lbmRDdXJyZW50QXJ0aWZhY3QoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2FkZEFydGlmYWN0UmVmZXJlbmNlKG9yZy53c2kudGVzdC5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBcnRpZmFjdFJlZmVyZW5jZShBcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdFJlZmVyZW5jZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihhcnRpZmFjdFJlZmVyZW5jZS50b1hNTFN0cmluZygiIikpKTsKLQotICAgIC8vIEFkZCBhcnRpZmFjdCByZWZlcmVuY2UgdG8gcmVwb3J0Ci0gICAgcmVwb3J0LmFkZEFydGlmYWN0UmVmZXJlbmNlKGFydGlmYWN0UmVmZXJlbmNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I3NldEN1cnJlbnRFbnRyeShvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3VycmVudEVudHJ5KEVudHJ5IGVudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnQuc2V0Q3VycmVudEVudHJ5KGVudHJ5KTsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKAotICAgICAgICBlbnRyeS5nZXRTdGFydFhNTFN0cmluZygKLSAgICAgICAgICAiIiwKLSAgICAgICAgICB0aGlzCi0gICAgICAgICAgICAucmVwb3J0Ci0gICAgICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgICAgICAuZ2V0QW5hbHl6ZXIoKQotICAgICAgICAgICAgLmdldEFuYWx5emVyQ29uZmlnKCkKLSAgICAgICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkKLSAgICAgICAgICAgIC5nZXRTaG93TWVzc2FnZUVudHJ5KCkpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50RW50cnkob3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRFbnZlbG9wZUVudHJ5KEVudHJ5IGVudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnQuc2V0Q3VycmVudEVudHJ5KGVudHJ5KTsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKAotICAgICAgICBlbnRyeS5nZXRTdGFydFhNTFN0cmluZygKLSAgICAgICAgICAiIiwKLSAgICAgICAgICB0aGlzCi0gICAgICAgICAgICAucmVwb3J0Ci0gICAgICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgICAgICAuZ2V0QW5hbHl6ZXIoKQotICAgICAgICAgICAgLmdldEFuYWx5emVyQ29uZmlnKCkKLSAgICAgICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkKLSAgICAgICAgICAgIC5nZXRTaG93TWVzc2FnZUVudHJ5KCksCi0JCSAgdHJ1ZSkpKTsKLSAgfQotLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZW5kQ3VycmVudEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRFbnRyeSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlcG9ydFdyaXRlci53cml0ZSgKLSAgICAgIG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0LmdldEN1cnJlbnRFbnRyeSgpLmdldEVuZFhNTFN0cmluZygiIikpKTsKLSAgICByZXBvcnQuZW5kQ3VycmVudEVudHJ5KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBc3NlcnRpb25SZXN1bHQob3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBCYXNlZCBvbiB0aGUgY29uZmlnIG9wdGlvbnMsIHdyaXRlIG91dCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgaWYgKChhc3NlcnRpb25SZXN1bHRUeXBlLmlzQWxsKCkpCi0gICAgICB8fCAoKGFzc2VydGlvblJlc3VsdFR5cGUuaXNGYWlsZWRPbmx5KCkpCi0gICAgICAgICYmIChhc3NlcnRpb25SZXN1bHQuZ2V0UmVzdWx0KCkuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEKSkpCi0gICAgICB8fCAoKGFzc2VydGlvblJlc3VsdFR5cGUuaXNOb3RQYXNzZWQoKSkKLSAgICAgICAgJiYgKCFhc3NlcnRpb25SZXN1bHQuZ2V0UmVzdWx0KCkuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKSkpCi0JICAgICAgfHwgKChhc3NlcnRpb25SZXN1bHRUeXBlLmlzTm90SW5mbygpKQotCSAgICAgICAgICAgICYmICghYXNzZXJ0aW9uUmVzdWx0LmdldEFzc2VydGlvbigpLmdldFR5cGUoKS5lcXVhbHMoVGVzdEFzc2VydGlvbi5UWVBFX0lORk9STUFUSU9OQUwpKSkpCi0gICAgewotICAgICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIoYXNzZXJ0aW9uUmVzdWx0LnRvWE1MU3RyaW5nKCIiKSkpOwotICAgIH0KLQotICAgIC8vIEFkZCBhc3NlcnRpb24gdG8gcmVwb3J0Ci0gICAgcmVwb3J0LmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZ2V0QXNzZXJ0aW9uUmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGdldEFzc2VydGlvblJlc3VsdChTdHJpbmcgYXNzZXJ0aW9uSWQpCi0gIHsKLSAgICAvLyBHZXQgdGhlIGFzc2VydGlvbiByZXN1bHQgZnJvbSB0aGUgY3VycmVudCBhc3NlcnRpb24gdGFyZ2V0Ci0gICAgcmV0dXJuIHJlcG9ydC5nZXRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjc3RhcnRSZXBvcnQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRSZXBvcnQoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBXcml0ZSBvdXQgc3RhcnQgb2YgcmVwb3J0Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0LmdldFN0YXJ0WE1MU3RyaW5nKCIiKSkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjZmluaXNoUmVwb3J0KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGZpbmlzaFJlcG9ydCgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEVuZCB0aGUgcmVwb3J0IGZpbGUKLSAgICByZXBvcnRXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihyZXBvcnQuZ2V0RW5kWE1MU3RyaW5nKCIiKSkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjZmluaXNoUmVwb3J0V2l0aEVycm9yKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBmaW5pc2hSZXBvcnRXaXRoRXJyb3IoU3RyaW5nIGVycm9yRGV0YWlsKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDaGVjayBpZiBlbnRyeSBvciBhcnRpZmFjdCBuZWVkIHRvIGJlIGNsb3NlZAotICAgIGlmICh0aGlzLnJlcG9ydC5nZXRDdXJyZW50RW50cnkoKSAhPSBudWxsKQotICAgICAgZW5kQ3VycmVudEVudHJ5KCk7Ci0gICAgaWYgKHRoaXMucmVwb3J0LmdldEN1cnJlbnRBcnRpZmFjdCgpICE9IG51bGwpCi0gICAgICBlbmRDdXJyZW50QXJ0aWZhY3QoKTsKLQotICAgIC8vIEVuZCB0aGUgcmVwb3J0IGZpbGUKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKHJlcG9ydC5nZXRFcnJvclhNTFN0cmluZygiIiwgZXJyb3JEZXRhaWwpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydC5jcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpCi0gIHsKLSAgICByZXR1cm4gcmVwb3J0LmNyZWF0ZUFydGlmYWN0KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVFbnRyeSgpCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydC5jcmVhdGVFbnRyeSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjY3JlYXRlRW50cnlDb250YWluZXIoKQotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGFpbmVyIGNyZWF0ZUVudHJ5Q29udGFpbmVyKCkKLSAgewotICAgIHJldHVybiByZXBvcnQuY3JlYXRlRW50cnlDb250YWluZXIoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUZhaWx1cmVEZXRhaWwoKQotICAgKi8KLSAgcHVibGljIEZhaWx1cmVEZXRhaWwgY3JlYXRlRmFpbHVyZURldGFpbCgpCi0gIHsKLSAgICByZXR1cm4gcmVwb3J0LmNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LldyaXRlUmVwb3J0I2dldFJlcG9ydCgpCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IGdldFJlcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZXBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRQcmVyZXFUeXBlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVyZXFUeXBlKFN0cmluZyBwcmVyZXFUeXBlKQotICB7Ci0gICAgdGhpcy5yZXBvcnQuc2V0UHJlcmVxVHlwZShwcmVyZXFUeXBlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlDb250YWluZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeUNvbnRhaW5lckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2ZDA4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeUNvbnRhaW5lckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgY29udGFpbmVyIGZvciBvbmUgb3IgbW9yZSBlbnRyaWVzLiAgCi0gKiBBbiBleGFtcGxlIHdvdWxkIGJlIGEgV1NETCBkb2N1bWVudC4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5Q29udGFpbmVySW1wbAotICBleHRlbmRzIEVudHJ5UmVzdWx0SW1wbAotICBpbXBsZW1lbnRzIEVudHJ5Q29udGFpbmVyCi17Ci0gIC8qKgotICAgKiBDb250YWluZXIgSUQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGlkOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5Q29udGFpbmVyI2dldElkKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuaWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeUNvbnRhaW5lciNzZXRJZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuICJbIiArIHRoaXMuaWQgKyAiXSAiICsgdGhpcy5hc3NlcnRpb25SZXN1bHRMaXN0OwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0VudHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDc3NTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5Q29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlbnRyeSBpbiBhIHJlcG9ydC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5SW1wbCBleHRlbmRzIEVudHJ5UmVzdWx0SW1wbCBpbXBsZW1lbnRzIEVudHJ5Ci17Ci0gIC8qKgotICAgKiBFbnRyeSB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5VHlwZSBlbnRyeVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBBcnRpZmFjdCBuYW1lIChvcHRpb25hbCkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGFydGlmYWN0TmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFJlZmVyZW5jZSBJRC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlSUQgPSBudWxsOwotCi0gIC8qKgotICAgKiBQYXJlbnQgZWxlbWVudCBuYW1lIChvbmx5IHVzZWQgd2hlbiBlbnRyeSB0eXBlIGlzICJwb3J0IiBvciAib3BlcmF0aW9uIikuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gbnVsbDsKLQotICAvKioKLSAgICogRW50cnkgZGV0YWlsIG9iamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgZW50cnlEZXRhaWwgPSBudWxsOwotCi0gIC8qKgotICAgKiBFbnRyeSBjb250YWluZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVudHJ5VHlwZSgpCi0gICAqLwotICBwdWJsaWMgRW50cnlUeXBlIGdldEVudHJ5VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeVR5cGUoRW50cnlUeXBlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlUeXBlKEVudHJ5VHlwZSBlbnRyeVR5cGUpCi0gIHsKLSAgICB0aGlzLmVudHJ5VHlwZSA9IGVudHJ5VHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEFydGlmYWN0TmFtZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFydGlmYWN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hcnRpZmFjdE5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRBcnRpZmFjdE5hbWUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFydGlmYWN0TmFtZShTdHJpbmcgYXJ0aWZhY3ROYW1lKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdE5hbWUgPSBhcnRpZmFjdE5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNnZXRSZWZlcmVuY2VJRCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZUlEKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjc2V0UmVmZXJlbmNlSUQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlSUQoU3RyaW5nIHJlZmVyZW5jZUlEKQotICB7Ci0gICAgdGhpcy5yZWZlcmVuY2VJRCA9IHJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0UGFyZW50RWxlbWVudE5hbWUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnRFbGVtZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5wYXJlbnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I3NldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSkKLSAgewotICAgIHRoaXMucGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVudHJ5RGV0YWlsKCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0RW50cnlEZXRhaWwoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeURldGFpbChPYmplY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRyeURldGFpbChPYmplY3QgZW50cnlEZXRhaWwpCi0gIHsKLSAgICB0aGlzLmVudHJ5RGV0YWlsID0gZW50cnlEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNnZXRFbnRyeUNvbnRhaW5lcigpCi0gICAqLwotICBwdWJsaWMgRW50cnlDb250YWluZXIgZ2V0RW50cnlDb250YWluZXIoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeUNvbnRhaW5lcihvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5Q29udGFpbmVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlDb250YWluZXIoRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIpCi0gIHsKLSAgICB0aGlzLmVudHJ5Q29udGFpbmVyID0gZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeVJlc3VsdCNhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpCi0gIHsKLSAgICBzdXBlci5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLQotICAgIGlmICh0aGlzLmVudHJ5Q29udGFpbmVyICE9IG51bGwpCi0gICAgICB0aGlzLmVudHJ5Q29udGFpbmVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSwgYm9vbGVhbiBzaG93TG9nRW50cnksIGJvb2xlYW4gZW52ZWxvcGVBcnRpZmFjdFR5cGUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiICIpOwotCi0gICAgaWYgKHRoaXMuZW50cnlUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVudmVsb3BlQXJ0aWZhY3RUeXBlKQotCSAgewotICAgICAgCS8vIHdlIHVzZSB0aGUgc2FtZSBhY3R1YWwgZW50cnkgZm9yIGJvdGggbWVzc2FnZSBhbmQgZW52ZWxvcGUgYXJ0aWZhY3RzCi0gICAgICAJLy8gd2Ugbm93IG5lZWQgdG8gb3V0cHV0IGVudHJ5IHR5cGUgbmFtZXMgdGhhdCBhY3R1YWxseSBwZXJ0YWluIHRvIHRoZSBhcnRpZmFjdCB0eXBlCi0gICAgICAJcHcucHJpbnQoCi0gICAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgZ2V0Q29ycmVzcG9uZGluZ0VudmVsb3BlRW50cnlUeXBlTmFtZSh0aGlzLmVudHJ5VHlwZS5nZXRUeXBlTmFtZSgpKSArICJcIiAiKTsKLQkgIH0KLQkgIGVsc2UKLQkgIHsKLSAgICAgICAgcHcucHJpbnQoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgdGhpcy5lbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSArICJcIiAiKTsKLQkgIH0KLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0aGlzLmFydGlmYWN0TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiWyIgKyB0aGlzLmFydGlmYWN0TmFtZSArICJdXCIgIik7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMucmVmZXJlbmNlSUQgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9JRCArICI9XCIiICsgWE1MVXRpbHMueG1sRXNjYXBlZFN0cmluZyh0aGlzLnJlZmVyZW5jZUlEKSArICJcIiAiKTsKLQotCi0gICAgLy8gSWYgc2VydmljZSBuYW1lIHdhcyBzZXQgdGhlbiBhZGQgaXQKLSAgICAvL2lmIChwYXJlbnRFbGVtZW50TmFtZSAhPSBudWxsKSB7Ci0gICAgLy8gIHB3LnByaW50KCIgIiArIFdTSUNvbnN0YW50cy5BVFRSX1BBUkVOVF9FTEVNRU5UX05BTUUgKyAiPVwiIiArIHRoaXMucGFyZW50RWxlbWVudE5hbWUgKyAiXCIiKTsKLSAgICAvL30KLQotICAgIC8vIEFERDogTmVlZCB0byBjaGVjayBmb3IgY29uZmlnIG9wdGlvbiB0aGF0IHNwZWNpZmllcyAKLSAgICAvLyAgICAgIHRoYXQgbG9nIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkCi0KLSAgICAvLyBJZiB0YXJnZXQgaXMgYSBsb2cgZW50cnksIHRoZW4gYWRkIHJlZmVyZW5jZSB0byBpdAotICAgIGlmICgoZW50cnlUeXBlICE9IG51bGwpICYmIChlbnRyeVR5cGUuZ2V0QXJ0aWZhY3RUeXBlKCkuaXNMb2dnYWJsZSgpKSAmJiAoc2hvd0xvZ0VudHJ5KSkgCi0gICAgewotICAgICAgRG9jdW1lbnRFbGVtZW50IGxvZ0VudHJ5ID0gKERvY3VtZW50RWxlbWVudCkgZW50cnlEZXRhaWw7Ci0gICAgICBwdy5wcmludGxuKCJ2YWx1ZT1cIiIgKyBsb2dFbnRyeS50b1hNTFN0cmluZyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTE9HKSArICJcIiAiKTsKLSAgICB9Ci0gICAKLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSwgYm9vbGVhbiBzaG93TG9nRW50cnkpCi0gIHsKLSAgCXJldHVybiBnZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lLCBzaG93TG9nRW50cnksIGZhbHNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVuZFhNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICByZXR1cm4gIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgLy8gUmV0dXJuIHN0cmluZwotICAgIHJldHVybiBnZXRTdGFydFhNTFN0cmluZygiIiwgZmFsc2UpICsgZ2V0RW5kWE1MU3RyaW5nKCIiKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29ycmVzcG9uZGluZ0VudmVsb3BlRW50cnlUeXBlTmFtZShTdHJpbmcgbWVzc2FnZUVudHJ5VHlwZU5hbWUpCi0gIHsKLSAgCVN0cmluZyBlbnZlbG9wZUVudHJ5VHlwZU5hbWUgPSBtZXNzYWdlRW50cnlUeXBlTmFtZTsKLSAgCWlmIChtZXNzYWdlRW50cnlUeXBlTmFtZSAhPSBudWxsKQotICAJewotICAJaWYgKG1lc3NhZ2VFbnRyeVR5cGVOYW1lLmVxdWFscyhNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9BTlkpKQotICAJCWVudmVsb3BlRW50cnlUeXBlTmFtZSA9IEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfQU5ZOwotICAJZWxzZSBpZiAobWVzc2FnZUVudHJ5VHlwZU5hbWUuZXF1YWxzKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKQotICAJCWVudmVsb3BlRW50cnlUeXBlTmFtZSA9IEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfUkVRVUVTVDsKLSAgCWVsc2UgaWYgKG1lc3NhZ2VFbnRyeVR5cGVOYW1lLmVxdWFscyhNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVNQT05TRSkpCi0gIAkJZW52ZWxvcGVFbnRyeVR5cGVOYW1lID0gRW52ZWxvcGVWYWxpZGF0b3IuVFlQRV9FTlZFTE9QRV9SRVNQT05TRTsKLSAgCX0KLQotICAJcmV0dXJuIGVudmVsb3BlRW50cnlUeXBlTmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlSZXN1bHRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeVJlc3VsdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmZmI3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeVJlc3VsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeVJlc3VsdDsKLQotLyoqCi0gKiBSZXN1bHQgZm9yIGEgc3BlY2lmaWMgdGVzdCBhc3NlcnRpb24uCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBFbnRyeVJlc3VsdEltcGwgaW1wbGVtZW50cyBFbnRyeVJlc3VsdAotewotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFRyZWVNYXAgYXNzZXJ0aW9uUmVzdWx0TGlzdCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjYWRkQXNzZXJ0aW9uUmVzdWx0KG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdExpc3QucHV0KAotICAgICAgYXNzZXJ0aW9uUmVzdWx0LmdldEFzc2VydGlvbigpLmdldElkKCksCi0gICAgICBhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjZ2V0QXNzZXJ0aW9uUmVzdWx0TGlzdCgpCi0gICAqLwotICBwdWJsaWMgVHJlZU1hcCBnZXRBc3NlcnRpb25SZXN1bHRMaXN0KCkKLSAgewotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjZ2V0QXNzZXJ0aW9uUmVzdWx0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgZ2V0QXNzZXJ0aW9uUmVzdWx0KFN0cmluZyBhc3NlcnRpb25JZCkKLSAgewotICAgIHJldHVybiAoQXNzZXJ0aW9uUmVzdWx0KSBhc3NlcnRpb25SZXN1bHRMaXN0LmdldChhc3NlcnRpb25JZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0ZhaWx1cmVEZXRhaWxJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9GYWlsdXJlRGV0YWlsSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzdkYzUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0ZhaWx1cmVEZXRhaWxJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET01VdGlsczsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHdpbGwgLi4uCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBGYWlsdXJlRGV0YWlsSW1wbCBpbXBsZW1lbnRzIEZhaWx1cmVEZXRhaWwKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBmYWlsdXJlTWVzc2FnZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlVHlwZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlSUQgPSBudWxsOwotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbiA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNnZXRGYWlsdXJlTWVzc2FnZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZhaWx1cmVNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmZhaWx1cmVNZXNzYWdlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcgZmFpbHVyZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLmZhaWx1cmVNZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI2dldFJlZmVyZW5jZVR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSZWZlcmVuY2VUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI3NldFJlZmVyZW5jZVR5cGUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlVHlwZShTdHJpbmcgcmVmZXJlbmNlVHlwZSkKLSAgewotICAgIHRoaXMucmVmZXJlbmNlVHlwZSA9IHJlZmVyZW5jZVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI2dldFJlZmVyZW5jZUlEKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlSUQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlSUQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI3NldFJlZmVyZW5jZUlEbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2VJRG4oU3RyaW5nIHJlZmVyZW5jZUlEKQotICB7Ci0gICAgdGhpcy5yZWZlcmVuY2VJRCA9IHJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNnZXRFbGVtZW50TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIEVsZW1lbnRMb2NhdGlvbiBnZXRFbGVtZW50TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZWxlbWVudExvY2F0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNzZXRFbGVtZW50TG9jYXRpb24oRWxlbWVudExvY2F0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmVsZW1lbnRMb2NhdGlvbiA9IGVsZW1lbnRMb2NhdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgeG1sOmxhbmc9XCJlblwiICIpOwotCi0gICAgaWYgKHRoaXMucmVmZXJlbmNlVHlwZSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9UWVBFICsgIj1cIiIgKyB0aGlzLnJlZmVyZW5jZVR5cGUgKyAiXCIgIik7Ci0KLSAgICBpZiAodGhpcy5yZWZlcmVuY2VJRCAhPSBudWxsKQotICAgICAgcHcucHJpbnQoCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9JRCArICI9XCIiICsgdGhpcy5yZWZlcmVuY2VJRCArICJcIiAiKTsKLQotICAgIC8vIEFERDogTmVlZCB0byB1c2UgYSBkaWZmZXJlbnQgbmFtZXNwYWNlCi0gICAgLyoKLSAgICBpZiAodGhpcy5lbGVtZW50TG9jYXRpb24gIT0gbnVsbCkgewotICAgICAgU3RyaW5nIG5zTmFtZUV4dCA9ICJyZXBvcnRleHQiOwotICAgICAgcHcucHJpbnQoInhtbG5zOiIgKyBuc05hbWVFeHQgKyAiPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCArICIvZXh0L1wiIik7Ci0gICAgICBwdy5wcmludChuc05hbWVFeHQgKyAiOiIgKyBXU0lDb25zdGFudHMuQVRUUl9MSU5FX05VTUJFUiArICI9XCIiICsgdGhpcy5lbGVtZW50TG9jYXRpb24uZ2V0TGluZU51bWJlcigpICsgIlwiICIpOwotICAgICAgcHcucHJpbnQobnNOYW1lRXh0ICsgIjoiICsgV1NJQ29uc3RhbnRzLkFUVFJfQ09MVU1OX05VTUJFUiArICI9XCIiICsgdGhpcy5lbGVtZW50TG9jYXRpb24uZ2V0Q29sdW1uTnVtYmVyKCkgKyAiXCIgIik7Ci0gICAgfQotICAgICovCi0KLSAgICAvLyBDbG9zZSBzdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnQoIj4iKTsKLQotICAgIGlmICh0aGlzLmZhaWx1cmVNZXNzYWdlICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKERPTVV0aWxzLmNsZWFuU3RyaW5nKHRoaXMuZmFpbHVyZU1lc3NhZ2UpKTsKLQotICAgIGlmICh0aGlzLmVsZW1lbnRMb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4oIiAiKTsKLSAgICAgIHB3LnByaW50KHRoaXMuZWxlbWVudExvY2F0aW9uLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIEVuZCB0aGUgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUHJlcmVxRmFpbGVkTGlzdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1ByZXJlcUZhaWxlZExpc3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMWRlMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUHJlcmVxRmFpbGVkTGlzdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUHJlcmVxRmFpbGVkTGlzdDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIG1haW50YWluIGFuZCBhY2Nlc3MgdGhlIFByZXJlcXVpc2l0ZSBGYWlsZWQgTGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFByZXJlcUZhaWxlZExpc3RJbXBsIGltcGxlbWVudHMgUHJlcmVxRmFpbGVkTGlzdAotewotICAvKioKLSAgICogTGlzdCBvZiB0ZXN0IGFzc2VydGlvbiBJRHMuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGlkTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0I2FkZFRlc3RBc3NlcnRpb25JRChqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbklEKFN0cmluZyBhc3NlcnRpb25JRCkKLSAgewotICAgIGlkTGlzdC5hZGQoYXNzZXJ0aW9uSUQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgaWYgKHRoaXMuaWRMaXN0LnNpemUoKSA+IDApCi0gICAgewotICAgICAgLy8gQ3JlYXRlIGVsZW1lbnQgCi0gICAgICBwdy5wcmludGxuKCIgICAgICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgICAgLy8gSW5jbHVkZSBlYWNoIHRlc3QgYXNzZXJ0aW9uIElECi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGlkTGlzdC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgcHcucHJpbnQoCi0gICAgICAgICAgIiAgICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1RFU1RfQVNTRVJUSU9OX0lEICsgIj4iKTsKLSAgICAgICAgcHcucHJpbnQoKFN0cmluZykgaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQgKyAiPiIpOwotICAgICAgfQotCi0gICAgICAvLyBFbmQgZWxlbWVudAotICAgICAgcHcucHJpbnRsbigiICAgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotICAgIH0KLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydEFydGlmYWN0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0QXJ0aWZhY3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0Mjk5YjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0QXJ0aWZhY3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGEgcmVwb3J0IGFydGlmYWN0LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVwb3J0QXJ0aWZhY3RJbXBsIGltcGxlbWVudHMgUmVwb3J0QXJ0aWZhY3QKLXsKLSAgLyoqCi0gICAqIEFydGlmYWN0IHR5cGUuCi0gICAqLwotICBwcm90ZWN0ZWQgQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEVudHJpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgVHJlZU1hcCBlbnRyeUxpc3QgPSBuZXcgVHJlZU1hcCgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0I2dldFR5cGUoKQotICAgKi8KLSAgcHVibGljIEFydGlmYWN0VHlwZSBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmFydGlmYWN0VHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0I3NldFR5cGUoQXJ0aWZhY3RUeXBlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdFR5cGUgPSBhcnRpZmFjdFR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNhZGRFbnRyeShFbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVudHJ5KEVudHJ5IGVudHJ5KQotICB7Ci0gICAgLy8gQWRkIGVudHJ5Ci0gICAgaWYgKGVudHJ5LmdldEVudHJ5VHlwZSgpICE9IG51bGwpCi0gICAgICB0aGlzLmVudHJ5TGlzdC5wdXQoZW50cnkuZ2V0RW50cnlUeXBlKCkuZ2V0VHlwZU5hbWUoKSwgZW50cnkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QjZ2V0RW50cnlMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBUcmVlTWFwIGdldEVudHJ5TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgZWxlbWVudCAKLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9UWVBFICsgIj1cIiIgKyB0aGlzLmFydGlmYWN0VHlwZS5nZXRUeXBlTmFtZSgpICsgIlwiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNnZXRFbmRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgcmV0dXJuICIgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+IjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIGdldFN0YXJ0WE1MU3RyaW5nKCIiKSArIGdldEVuZFhNTFN0cmluZygiIik7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGIxMmYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0vKioKLSAqIFdTLUkgY29uZm9ybWFuY2UgdGVzdCByZXBvcnQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVwb3J0SW1wbCBpbXBsZW1lbnRzIFJlcG9ydAotewotICAvKioKLSAgICogUmVwb3J0IGZpbGVuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlbmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydCBjb250ZXh0LgotICAgKi8KLSAgcHJvdGVjdGVkIFJlcG9ydENvbnRleHQgcmVwb3J0Q29udGV4dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIExvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIExvZyBsb2cgPSBudWxsOwotCi0gIC8qKgotICAgKiBTdW1tYXJ5IGFsbCBwYXNzZWQgZmxhZy4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGFsbFBhc3NlZCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIFRlc3QgY292ZXJhZ2UuCi0gICAqLwotICAvL3Byb3RlY3RlZCBUZXN0Q292ZXJhZ2UgdGVzdENvdmVyYWdlOwotCi0gIC8qKgotICAgKiBBcnRpZmFjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBhcnRpZmFjdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyoqCi0gICAqIEVudHJ5IGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGVudHJ5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogQ3VycmVudCBhcnRpZmFjdC4KLSAgICovCi0gIHByb3RlY3RlZCBSZXBvcnRBcnRpZmFjdCBjdXJyZW50QXJ0aWZhY3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBDdXJyZW50IGVudHJ5LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5IGN1cnJlbnRFbnRyeSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBwcmVyZXFUeXBlOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgY29uZm9ybWFuY2UgcmVwb3J0LgotICAgKi8KLSAgcHVibGljIFJlcG9ydEltcGwoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgLy8gR2V0IHJlcG9ydCBVUkkKLSAgICAvL3JldHVybiByZXBvcnRVUkk7Ci0gICAgcmV0dXJuIHRoaXMuZmlsZW5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgcmVwb3J0VVJJKQotICB7Ci0gICAgdGhpcy5maWxlbmFtZSA9IHJlcG9ydFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRSZXBvcnRDb250ZXh0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRDb250ZXh0IGdldFJlcG9ydENvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwb3J0Q29udGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNzZXRSZXBvcnRDb250ZXh0KG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcG9ydENvbnRleHQoUmVwb3J0Q29udGV4dCByZXBvcnRDb250ZXh0KQotICB7Ci0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2VzCi0gICAgdGhpcy5yZXBvcnRDb250ZXh0ID0gcmVwb3J0Q29udGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIFJlcG9ydEFydGlmYWN0IGdldEN1cnJlbnRBcnRpZmFjdCgpCi0gIHsKLSAgICAvLyBSZXR1cm4gYXJ0aWZhY3QKLSAgICByZXR1cm4gdGhpcy5jdXJyZW50QXJ0aWZhY3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50QXJ0aWZhY3Qob3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRBcnRpZmFjdChSZXBvcnRBcnRpZmFjdCBhcnRpZmFjdCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gYXJ0aWZhY3QKLSAgICBhcnRpZmFjdExpc3QuYWRkKGFydGlmYWN0KTsKLQotICAgIC8vIFNldCBhcyBjdXJyZW50IGFydGlmYWN0Ci0gICAgdGhpcy5jdXJyZW50QXJ0aWZhY3QgPSBhcnRpZmFjdDsKLQotICAgIC8vIFNldCBkZWZhdWx0IHByZXJlcSBwcm9jZXNzaW5nCi0gICAgdGhpcy5wcmVyZXFUeXBlID0gUFJFUkVRX1RZUEVfRU5UUlk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVtb3ZlIGN1cnJlbnQgYXJ0aWZhY3QKLSAgICB0aGlzLmN1cnJlbnRBcnRpZmFjdCA9IG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBcnRpZmFjdFJlZmVyZW5jZShvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgYmUgc2F2ZWQ/ICBTaG91bGQgaXQgYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgYXJ0aWZhY3Q/Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0Q3VycmVudEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRDdXJyZW50RW50cnkoKQotICB7Ci0gICAgLy8gUmV0dXJuIGVudHJ5Ci0gICAgcmV0dXJuIHRoaXMuY3VycmVudEVudHJ5OwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRDdXJyZW50RW50cnkoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3VycmVudEVudmVsb3BlRW50cnkoRW50cnkgZW50cnkpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIAotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50RW50cnkob3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRFbnRyeShFbnRyeSBlbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gZW50cnkKLSAgICBlbnRyeUxpc3QuYWRkKGVudHJ5KTsKLQotICAgIC8vIFNldCBhcyBjdXJyZW50IGVudHJ5Ci0gICAgdGhpcy5jdXJyZW50RW50cnkgPSBlbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0RW50cmllcy4KLSAgICogQHJldHVybiBlbnRyeSBsaXN0LgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RW50cmllcygpCi0gIHsKLSAgICByZXR1cm4gZW50cnlMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3RzLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXJ0aWZhY3RzKCkKLSAgewotICAgIHJldHVybiBhcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50RW50cnkoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEVudHJ5KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVtb3ZlIGN1cnJlbnQgZW50cnkKLSAgICB0aGlzLmN1cnJlbnRFbnRyeSA9IG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBc3NlcnRpb25SZXN1bHQob3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCkKLSAgewotICAgIC8vIEFERDogTmVlZCB0byBrZWVwIGp1c3QgYSBzdW1tYXJ5IAotCi0gICAgLy8gQWRkIHJlc3VsdCB0byBjdXJyZW50IGVudHJ5Ci0gICAgaWYgKGN1cnJlbnRFbnRyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIGN1cnJlbnRFbnRyeS5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBub3QgcGFzc2VkLCB0aGVuIHNldCBzdW1tYXJ5IGZsYWcKLSAgICBpZiAoYXNzZXJ0aW9uUmVzdWx0LmdldFJlc3VsdCgpLmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkpCi0gICAgewotICAgICAgYWxsUGFzc2VkID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZ2V0QXNzZXJ0aW9uUmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGdldEFzc2VydGlvblJlc3VsdChTdHJpbmcgYXNzZXJ0aW9uSWQpCi0gIHsKLSAgICBBc3NlcnRpb25SZXN1bHQgcmVzdWx0ID0gbnVsbDsKLQotICAgIC8vIERldGVybWluZSB3aGVyZSB0byBnZXQgdGhlIGFzc2VydGlvbiByZXN1bHQgZnJvbSAKLSAgICBpZiAodGhpcy5wcmVyZXFUeXBlLmVxdWFscyhQUkVSRVFfVFlQRV9FTlRSWSkpCi0gICAgICByZXN1bHQgPSBjdXJyZW50RW50cnkuZ2V0QXNzZXJ0aW9uUmVzdWx0KGFzc2VydGlvbklkKTsKLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBjdXJyZW50RW50cnkuZ2V0RW50cnlDb250YWluZXIoKS5nZXRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQpOwotCi0gICAgLy8gdGhlIGFzc2VydGlvbiByZXN1bHQgaXMgbm90IGZvdW5kIGF0IHRoZSBjdXJyZW50IGVudHJ5LCBnb2luZyB0aHJvdWdoIGFsbCB0aGUgZW50cmllcwotICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJ5TGlzdC5zaXplKCk7IGkgKyspCi0gICAgICB7Ci0gICAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KSBlbnRyeUxpc3QuZ2V0KGkpOwotICAgICAgICBpZiAoKHJlc3VsdCA9IGVudHJ5LmdldEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25JZCkpICE9IG51bGwpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICB7Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IG5ldyBBc3NlcnRpb25SZXN1bHRJbXBsKCk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oCi0gICAgICByZXBvcnRDb250ZXh0Ci0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkpOwotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVFbnRyeSgpCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKQotICB7Ci0gICAgRW50cnkgZW50cnkgPSBuZXcgRW50cnlJbXBsKCk7Ci0gICAgLy9lbnRyeS5zZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKHJlcG9ydENvbnRleHQuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpLmdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKSk7Ci0gICAgcmV0dXJuIGVudHJ5OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjY3JlYXRlRW50cnlDb250YWluZXIoKQotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGFpbmVyIGNyZWF0ZUVudHJ5Q29udGFpbmVyKCkKLSAgewotICAgIEVudHJ5Q29udGFpbmVyIGVudHJ5Q29udGFpbmVyID0gbmV3IEVudHJ5Q29udGFpbmVySW1wbCgpOwotICAgIHJldHVybiBlbnRyeUNvbnRhaW5lcjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpCi0gIHsKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCA9IG5ldyBSZXBvcnRBcnRpZmFjdEltcGwoKTsKLSAgICByZXR1cm4gcmVwb3J0QXJ0aWZhY3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVGYWlsdXJlRGV0YWlsKCkKLSAgICovCi0gIHB1YmxpYyBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoKQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gbmV3IEZhaWx1cmVEZXRhaWxJbXBsKCk7Ci0gICAgcmV0dXJuIGZhaWx1cmVEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0U3VtbWFyeVJlc3VsdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN1bW1hcnlSZXN1bHQoKQotICB7Ci0gICAgcmV0dXJuICgKLSAgICAgIGFsbFBhc3NlZAotICAgICAgICA/IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VECi0gICAgICAgIDogQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjc2V0UHJlcmVxVHlwZShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxVHlwZShTdHJpbmcgcHJlcmVxVHlwZSkKLSAgewotICAgIHRoaXMucHJlcmVxVHlwZSA9IHByZXJlcVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIC8vIEFERDogCi0gICAgcmV0dXJuICJSZXBvcnQ6ICAiOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldFN0YXJ0WE1MU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgcmVwb3J0IGVsZW1lbnQgCi0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuWE1MX0RFQ0wpOwotICAgIHB3LnByaW50bG4oCi0gICAgICByZXBvcnRDb250ZXh0Ci0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRBZGRTdHlsZVNoZWV0KCkKLSAgICAgICAgLmdldFN0eWxlU2hlZXRTdHJpbmcoKSk7Ci0KLSAgICAvLyBBZGQgWE1MIGNvbW1lbnQKLSAgICBTdHJpbmcgY29tbWVudDsKLSAgICBpZiAoKGNvbW1lbnQgPSBUZXN0VXRpbHMuZ2V0WE1MQ29tbWVudCgpKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoY29tbWVudCk7Ci0KLSAgICAvLyByZXBvcnQKLSAgICBwdy5wcmludCgKLSAgICAgICI8IgotICAgICAgICArIG5zTmFtZQotICAgICAgICArIEVMRU1fTkFNRQotICAgICAgICArICIgIgotICAgICAgICArIFdTSUNvbnN0YW50cy5BVFRSX05BTUUKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIHJlcG9ydENvbnRleHQuZ2V0UmVwb3J0VGl0bGUoKQotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgICIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFV0aWxzLmdldFRpbWVzdGFtcCgpCi0gICAgICAgICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigiICAgIHhtbG5zPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfUkVQT1JUCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQKLSAgICAgICAgKyAiXCIiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICB4bWxuczoiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX0xPRwotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTE9HCi0gICAgICAgICsgIlwiIik7Ci0gICAgLy9wdy5wcmludGxuKCIgICAgeG1sbnM6IiArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9DT01NT04gKyAiPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0NPTU1PTiArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfQU5BTFlaRVJfQ09ORklHCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcKLSAgICAgICAgKyAiXCIiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICB4bWxuczoiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRwotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfQVNTRVJUSU9OUwotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQVNTRVJUSU9OUwotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9YU0kKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19VUklfWFNJCi0gICAgICAgICsgIlwiPiIpOwotCi0gICAgLy8gQWRkICBhbmFseXplciB0b29sIGluZm8KLSAgICBwdy5wcmludChyZXBvcnRDb250ZXh0LmdldEFuYWx5emVyKCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldEVuZFhNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEJ1aWxkIHN1bW1hcnkKLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NVTU1BUlkgKyAiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cIiIgKyBnZXRTdW1tYXJ5UmVzdWx0KCkgKyAiXCI+Iik7Ci0KLSAgICAvLyBBREQ6ICBEZXRhaWwgc3VtbWFyeQotICAgIC8qCi0gICAgcHcucHJpbnQoIiAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FSVElGQUNUX1NVTU1BUlkgKyAiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cInh4eHhcIj4iKTsKLSAgICAKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1RfU1VNTUFSWSArICI+Iik7Ci0gICAgKi8KLQotICAgIC8vIEVuZCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIiAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU1VNTUFSWSArICI+Iik7Ci0KLSAgICAvLyBFbmQgcmVwb3J0IGVsZW1lbnQgCi0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIC8vIFJldHVybiBYTUwgc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0RXJyb3JYTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIFN0cmluZyBlcnJvckRldGFpbCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQnVpbGQgYW5hbHl6ZXIgZmFpbHVyZQotICAgIHB3LnByaW50bG4oIiAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9BTkFMWVpFUl9GQUlMVVJFICsgIj4iKTsKLQotICAgIC8vIEFkZCBlcnJvciBkZXRhaWwKLSAgICBwdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUwgKyAiPiIpOwotICAgIHB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcoZXJyb3JEZXRhaWwpKTsKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUwgKyAiPiIpOwotCi0gICAgLy8gRW5kIHJlcG9ydCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FOQUxZWkVSX0ZBSUxVUkUgKyAiPiIpOwotCi0gICAgLy8gRW5kIHJlcG9ydCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiBnZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSArIGdldEVuZFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0V3JpdGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0V3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2VlYjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydFdyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudFdyaXRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gd3JpdGUgdGhlIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFJlcG9ydFdyaXRlckltcGwKLSAgZXh0ZW5kcyBEb2N1bWVudFdyaXRlckltcGwKLSAgaW1wbGVtZW50cyBSZXBvcnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIFJlcG9ydCB3cml0ZXIuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0V3JpdGVySW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCB1c2luZyB0aGUgd3JpdGVyCi0gICAqIHRoYXQgd2FzIHByZXZpb3VzbHkgc2V0IHVzaW5nIHRoZSBzZXRXcml0ZXIgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVwb3J0IHJlcG9ydCkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgd3JpdGVyIHdhcyBub3Qgc2V0IHByZXZpb3VzbHksIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKHdyaXRlciA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlJlcG9ydCB3cml0ZXIgbXVzdCBiZSBzZXQgYmVmb3JlIHdyaXRpbmcgcmVwb3J0LiIpOwotICAgIH0KLQotICAgIC8vIFdyaXRlIHJlcG9ydAotICAgIHdyaXRlKHJlcG9ydCwgdGhpcy53cml0ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVwb3J0IHJlcG9ydCwgV3JpdGVyIHdyaXRlcikKLSAgewotICAgIC8vIENyZWF0ZSBwcmludCB3cml0ZXIKLSAgICBuZXcgUHJpbnRXcml0ZXIod3JpdGVyKTsKLQotICAgIC8vIEFERDogV3JpdGUgb3V0IGNvbXBsZXRlIHJlcG9ydAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS90b29saW5mby5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdG9vbGluZm8ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEzMDRjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS90b29saW5mby5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqIDwvY29weXJpZ2h0PgotIyAgKi8KLQotd3NpLnRvb2wudmVyc2lvbj0xLjAuMAotd3NpLnRvb2wucmVsZWFzZS5kYXRlPTIwMDUtMDQtMTUKLXdzaS50b29sLmltcGxlbWVudGVyPUVjbGlwc2Uub3JnIE9yZ2FuaXphdGlvbgotd3NpLnRvb2wubG9jYXRpb249aHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQXJ0aWZhY3RUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0FydGlmYWN0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTY2N2IzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQXJ0aWZhY3RUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQXJ0aWZhY3RUeXBlCi17Ci0gIC8qKgotICAgKiBUaGlzIHR5cGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyB0eXBlOwotCi0gIHByaXZhdGUgc3RhdGljIE1hcCB0eXBlTWFwOwotICBwcml2YXRlIHN0YXRpYyBMaXN0IGxvZ2dhYmxlQXJ0aWZhY3RUeXBlczsgCi0KLSAgLyoqCi0gICAqIFJlcG9ydEFydGlmYWN0IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBFbnZlbG9wZVZhbGlkYXRvci5UWVBFX0VOVkVMT1BFICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRSA9ICJlbnZlbG9wZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0UgKiovIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVZhbGlkYXRvci5UWVBFX0RJU0NPVkVSWSAqKi8gCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZID0gImRpc2NvdmVyeSI7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydEFydGlmYWN0IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9FTlZFTE9QRSA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0VOVkVMT1BFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9NRVNTQUdFID0KLSAgICBuZXcgQXJ0aWZhY3RUeXBlKFRZUEVfTUVTU0FHRSk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0QXJ0aWZhY3RUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEFydGlmYWN0VHlwZSAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9ERVNDUklQVElPTiA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0RFU0NSSVBUSU9OKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFydGlmYWN0VHlwZSBBUlRJRkFDVF9UWVBFX0RJU0NPVkVSWSA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0RJU0NPVkVSWSk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGFydGlmYWN0IHR5cGUuCi0gICAqLwotICBwcml2YXRlIEFydGlmYWN0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKiogUmV0dXJucyB0cnVlIGlmIHRoaXMgYXJ0aWZhY3QgY2FuIGJlIG91dHB1dCB0byB0aGUgcmVwb3J0LiAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xvZ2dhYmxlKCkgCi0gIHsKLSAgICBpZiAobG9nZ2FibGVBcnRpZmFjdFR5cGVzID09IG51bGwpIAotICAgIHsKLSAgICAgIFN0cmluZyBhcnRpZmFjdEFycmF5W10gPSBXU0lUZXN0VG9vbHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QWxsUmVwb3J0QXJ0aWZhY3RUeXBlcygpOwotICAgICAgbG9nZ2FibGVBcnRpZmFjdFR5cGVzID0gbmV3IEFycmF5TGlzdChhcnRpZmFjdEFycmF5Lmxlbmd0aCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFydGlmYWN0QXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICAgICBsb2dnYWJsZUFydGlmYWN0VHlwZXMuYWRkKGFydGlmYWN0QXJyYXlbaV0pOwotICAgIH0KLSAgICByZXR1cm4gbG9nZ2FibGVBcnRpZmFjdFR5cGVzLmNvbnRhaW5zKHR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGFydGlmYWN0IHR5cGUgZW52ZWxvcGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhcnRpZmFjdCB0eXBlIGVudmVsb3BlLgotICAgKiBAZGVwcmVjYXRlZCAtLSBhbiBhcnRpZmFjdFR5cGUgaXMgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gZW52ZWxvcGUsIAotICAgKiAgICAgICAgICAgICAgICBtZXNzYWdlLCBkZXNjcmlwdGlvbiBvciBkaXNjb3ZlcnkuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VudmVsb3BlKCkKLSAgewotICAgIHJldHVybiB0eXBlLmVxdWFscyhUWVBFX0VOVkVMT1BFKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBhcnRpZmFjdCB0eXBlIG1lc3NhZ2VzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYXJ0aWZhY3QgdHlwZSBtZXNzYWdlcy4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoVFlQRV9NRVNTQUdFKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBhcnRpZmFjdCB0eXBlIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYXJ0aWZhY3QgdHlwZSBkZXNjcmlwdGlvbi4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEZXNjcmlwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoVFlQRV9ERVNDUklQVElPTik7Ci0gIH0KLQotICAvKioKLSAgICogSXMgYXJ0aWZhY3QgdHlwZSBkaXNjb3ZlcnkuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhcnRpZmFjdCB0eXBlIGRpc2NvdmVyeS4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEaXNjb3ZlcnkoKQotICB7Ci0gICAgcmV0dXJuIHR5cGUuZXF1YWxzKFRZUEVfRElTQ09WRVJZKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHJldHVybiBhcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgYXJ0aWZhY3QgdHlwZSBhbmQgYWRkcyBpdCB0byB0aGUgcmVnaXN0cnkgbWFwCi0gICAqIEBwYXJhbSBuYW1lIC0gdGhlIGFydGlmYWN0IG5hbWUgKG1hdGNoZXMgYXJ0aWZhY3QgdHlwZSBhdHRyaWJ1dGUgZnJvbSBUQUQpCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXJBcnRpZmFjdFR5cGUoU3RyaW5nIG5hbWUpIHsKLSAgICAgIGlmICh0eXBlTWFwID09IG51bGwpCi0gICAgICAgICAgdHlwZU1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICB0eXBlTWFwLnB1dChuYW1lLCBuZXcgQXJ0aWZhY3RUeXBlKG5hbWUpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhcnRpZmFjdCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZU5hbWUgYXJ0aWZhY3QgdHlwZSBuYW1lLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGFydGlmYWN0IHR5cGUgbmFtZSBpcyBpbnZhbGlkIG9yIGluYXBwcm9wcmlhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFydGlmYWN0VHlwZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uCi0gIHsKLSAgICAgIGlmICh0eXBlTWFwID09IG51bGwpIHsKLSAgICAgICAgICBTdHJpbmcgdHlwZXNbXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRBcnRpZmFjdFR5cGVzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgcmVnaXN0ZXJBcnRpZmFjdFR5cGUodHlwZXNbaV0pOwotICAgICAgfQotICAgICAgCi0gICAgaWYgKHR5cGVNYXAuY29udGFpbnNLZXkodHlwZU5hbWUpKQotICAgICAgICByZXR1cm4gKEFydGlmYWN0VHlwZSkgdHlwZU1hcC5nZXQodHlwZU5hbWUpOwotICAgICBlbHNlIHsKLSAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNyZWF0ZSBuZXcgYXJ0aWZhY3QgdHlwZSB1c2luZyBpbnZhbGlkIHR5cGUgbmFtZTogIgotICAgICAgICAgICAgICAgICArIHR5cGVOYW1lICsgIi4iKTsKLSAgICAgfQotICB9Ci0gIAotICAgIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHBhcmFtIHR5cGVOYW1lIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGFydGlmYWN0IHR5cGUuCi0gICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiBhcnRpZmFjdCB0eXBlIG5hbWUgaXMgaW52YWxpZCBvciBpbmFwcHJvcHJpYXRlLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0QXJ0aWZhY3RUeXBlKFN0cmluZyB0eXBlTmFtZSkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXJ0aWZhY3RUeXBlIG5ld0FydGlmYWN0VHlwZShTdHJpbmcgdHlwZU5hbWUpCi0gICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KLSAgewotICAgIEFydGlmYWN0VHlwZSBhcnRpZmFjdFR5cGUgPSBudWxsOwotCi0gICAgaWYgKHR5cGVOYW1lLmVxdWFscyhUWVBFX0RFU0NSSVBUSU9OKSkKLSAgICB7Ci0gICAgICBhcnRpZmFjdFR5cGUgPSBBUlRJRkFDVF9UWVBFX0RFU0NSSVBUSU9OOwotICAgIH0KLQotICAgIGVsc2UgaWYgKHR5cGVOYW1lLmVxdWFscyhUWVBFX01FU1NBR0UpKQotICAgIHsKLSAgICAgIGFydGlmYWN0VHlwZSA9IEFSVElGQUNUX1RZUEVfTUVTU0FHRTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0eXBlTmFtZS5lcXVhbHMoVFlQRV9FTlZFTE9QRSkpCi0gICAgewotICAgICAgYXJ0aWZhY3RUeXBlID0gQVJUSUZBQ1RfVFlQRV9FTlZFTE9QRTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0eXBlTmFtZS5lcXVhbHMoVFlQRV9ESVNDT1ZFUlkpKQotICAgIHsKLSAgICAgIGFydGlmYWN0VHlwZSA9IEFSVElGQUNUX1RZUEVfRElTQ09WRVJZOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IGFydGlmYWN0IHR5cGUgdXNpbmcgaW52YWxpZCB0eXBlIG5hbWU6ICIKLSAgICAgICAgICArIHR5cGVOYW1lCi0gICAgICAgICAgKyAiLiIpOwotICAgIH0KLQotICAgIHJldHVybiBhcnRpZmFjdFR5cGU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0Jhc2ljUnVsZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQmFzaWNSdWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjMyYjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQmFzaWNSdWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdmFsaWRhdGVzIGJhc2ljIGNvbnN0cnVjdHMgb2YgUkZDIDI2MTYuCi0gKiAKLSAqIEBhdXRob3IgVm9sb2RpbgotICovCi1wdWJsaWMgY2xhc3MgQmFzaWNSdWxlcwotewotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBDUiA9IDEzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgTEYgPSAxMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIFNQID0gMzI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBIVCA9IDk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBEUSA9IDM0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDUkxGID0gIiIgKyBDUiArIExGOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhcltdIFNFUEFSQVRPUlMgPQotICAgIHsKLSAgICAgICcoJywKLSAgICAgICcpJywKLSAgICAgICc8JywKLSAgICAgICc+JywKLSAgICAgICdAJywKLSAgICAgICcsJywKLSAgICAgICc7JywKLSAgICAgICc6JywKLSAgICAgICdcXCcsCi0gICAgICAnXCInLAotICAgICAgJy8nLAotICAgICAgJ1snLAotICAgICAgJ10nLAotICAgICAgJz8nLAotICAgICAgJz0nLAotICAgICAgJ3snLAotICAgICAgJ30nLAotICAgICAgU1AsCi0gICAgICBIVCB9OwotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlLgotICAgKiAJCU9DVEVUID0gJmx0O2FueSA4LWJpdCBzZXF1ZW5jZSBvZiBkYXRhJmd0OwotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc09DVEVUKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNIQVIgPSAmbHQ7YW55IFVTLUFTQ0lJIGNoYXJhY3RlciAob2N0ZXRzIDAgLSAxMjcpJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNDSEFSKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID49IDAgJiYgY2ggPD0gMTI3KSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCVVQQUxQSEEgPSAmbHQ7YW55IFVTLUFTQ0lJIHVwcGVyY2FzZSBsZXR0ZXIgIkEiLi4iWiImZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1VQQUxQSEEoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlMT0FMUEhBID0gJmx0O2FueSBVUy1BU0NJSSBsb3dlcmNhc2UgbGV0dGVyICJhIi4uInoiJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMT0FMUEhBKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID49ICdhJyAmJiBjaCA8PSAneicpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJQUxQSEEgPSBVUEFMUEhBIHwgTE9BTFBIQS4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBTFBIQShjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChpc0xPQUxQSEEoY2gpIHx8IGlzVVBBTFBIQShjaCkpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJRElHSVQgPSAmbHQ7YW55IFVTLUFTQ0lJIGRpZ2l0ICIwIi4uIjkiJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNESUdJVChjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNUTCA9ICZsdDthbnkgVVMtQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMzEpIGFuZCBERUwgKDEyNykmZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NUTChjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuICgoY2ggPj0gMCAmJiBjaCA8PSAzMSkgfHwgY2ggPT0gMTI3KSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNSID0gJmx0O1VTLUFTQ0lJIENSLCBjYXJyaWFnZSByZXR1cm4gKDEzKSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ1IoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPT0gQ1IpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJTEYgPSAmbHQ7VVMtQVNDSUkgTEYsIGxpbmVmZWVkICgxMCkmZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMRihjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA9PSBMRikgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlTUCA9ICZsdDtVUy1BU0NJSSBTUCwgc3BhY2UgKDMyKSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU1AoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPT0gU1ApID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJSFQgPSAmbHQ7VVMtQVNDSUkgSFQsIGhvcml6b250YWwtdGFiICg5KSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIKLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0hUKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID09IEhUKSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCSZsdDsiJmd0OyA9ICZsdDtVUy1BU0NJSSBkb3VibGUtcXVvdGUgbWFyayAoMzQpJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEb3VibGVRdW90ZShjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA9PSBEUSkgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlDUkxGID0gQ1IgTEYuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NSTEYoU3RyaW5nIHN0cikKLSAgewotICAgIHJldHVybiBDUkxGLmVxdWFscyhzdHIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJTFdTID0gW0NSTEZdIDEqKCBTUCB8IEhUICkuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBzdHIgaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMV1MoU3RyaW5nIHN0cikKLSAgewotCi0gICAgaW50IGluZGV4ID0gZ2V0TGFzdEluZGV4TFdTKHN0ciwgMCk7Ci0gICAgaWYgKGluZGV4ID09IC0xIHx8IGluZGV4ICE9IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgTFdTIHN0cmluZy4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0IExXUy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RJbmRleExXUyhTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleCA9IHN0ci5pbmRleE9mKENSTEYsIHN0YXJ0SW5kZXgpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBlbHNlIGlmIChpbmRleCA9PSBzdGFydEluZGV4KQotICAgICAgaW5kZXggKz0gQ1JMRi5sZW5ndGgoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoIWlzU1Aoc3RyLmNoYXJBdChpbmRleCkpICYmIGlzSFQoc3RyLmNoYXJBdChpbmRleCkpKQotICAgICAgcmV0dXJuIC0xOwotCi0gICAgaW5kZXgrKzsKLSAgICBmb3IgKDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgICBpZiAoIWlzU1Aoc3RyLmNoYXJBdChpbmRleCkpICYmIGlzSFQoc3RyLmNoYXJBdChpbmRleCkpKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgVEVYVCBzdHJpbmcuCi0gICAqIFRFWFQgPSAmbHQ7YW55IE9DVEVUIGV4Y2VwdCBDVExzLCBidXQgaW5jbHVkaW5nIExXUyZndDsKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0IFRFWFQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRMYXN0VEVYVChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleDsKLSAgICBmb3IgKGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgewotICAgICAgaWYgKCFpc09DVEVUKHN0ci5jaGFyQXQoaW5kZXgpKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgaWYgKGlzQ1RMKHN0ci5jaGFyQXQoaW5kZXgpKSkKLSAgICAgIHsKLSAgICAgICAgaW50IGxhc3RMV1MgPSBnZXRMYXN0SW5kZXhMV1Moc3RyLCBpbmRleCk7Ci0gICAgICAgIGlmIChsYXN0TFdTID09IC0xKQotICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgaW5kZXggPSBsYXN0TFdTIC0gMTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJSEVYID0gIkEiIHwgIkIiIHwgIkMiIHwgIkQiIHwgIkUiIHwgIkYiIHwgImEiIHwgImIiIHwgImMiIHwgImQiIHwgImUiIHwgImYiIHwgRElHSVQuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSEVYKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKAotICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8IChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSB8fCBpc0RJR0lUKGNoKSkKLSAgICAgID8gdHJ1ZQotICAgICAgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXRva2VuID0gMSombHQ7YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycyZndDsuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBzdHIgaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUb2tlbihTdHJpbmcgc3RyKQotICB7Ci0gICAgaWYgKHN0ci5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyIGNoID0gc3RyLmNoYXJBdChpbmRleCk7Ci0gICAgICBpZiAoIWlzQ0hBUihjaCkgfHwgaXNTRVBBUkFUT1IoY2gpIHx8IGlzQ1RMKGNoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyBsYXN0IGluZGV4IG9mIHRoZSAidG9rZW4iIHN0cmluZy4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJ0b2tlbiIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRMYXN0VG9rZW4oU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGZvciAoOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyIGNoID0gc3RyLmNoYXJBdChpbmRleCk7Ci0gICAgICBpZiAoIWlzQ0hBUihjaCkgfHwgaXNTRVBBUkFUT1IoY2gpIHx8IGlzQ1RMKGNoKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgfQotICAgIHJldHVybiBpbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXNlcGFyYXRvcnMgPSAiKCIgfCAiKSIgfCAiPCIgfCAiPiIgfCAiQCIKLSAgICAgKiAgICAgICAgICAgICAgICAgfCAiLCIgfCAiOyIgfCAiOiIgfCAiXCIgfCA8Ij4KLSAgICAgKiAgICAgICAgICAgICAgICAgfCAiLyIgfCAiWyIgfCAiXSIgfCAiPyIgfCAiPSIKLSAgICAgKiAgICAgICAgICAgICAgICAgfCAieyIgfCAifSIgfCBTUCB8IEhULgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NFUEFSQVRPUihjaGFyIGNoKQotICB7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IFNFUEFSQVRPUlMubGVuZ3RoOyBpbmRleCsrKQotICAgIHsKLSAgICAgIGlmIChjaCA9PSBTRVBBUkFUT1JTW2luZGV4XSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJjb21tZW50IiBzdHJpbmcuCi0gICAqIAkJY29tbWVudCA9ICIoIiAqKCBjdGV4dCB8IHF1b3RlZC1wYWlyIHwgY29tbWVudCApICIpIi4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJjb21tZW50Ii4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RDb21tZW50KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0KLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGlmIChzdHIubGVuZ3RoKCkgPD0gc3RhcnRJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnKCcpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIGJvb2xlYW4gYkV4aXQgPSBmYWxzZTsKLSAgICBib29sZWFuIGJRdW90ZWRQYWlyID0gZmFsc2U7Ci0gICAgaW50IGlkeCA9IHN0YXJ0SW5kZXggKyAxOwotICAgIHdoaWxlIChiRXhpdCA9PSBmYWxzZSkKLSAgICB7Ci0gICAgICB3aGlsZSAoYlF1b3RlZFBhaXIgPT0gZmFsc2UpCi0gICAgICB7Ci0gICAgICAgIGlkeCA9IGdldExhc3RDdGV4dChzdHIsIGlkeCk7Ci0gICAgICAgIGlmIChpZHggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICAgIHJldHVybiBpZHg7Ci0gICAgICAgIGlmICghaXNRdW90ZWRQYWlyKHN0ciwgaWR4IC0gMSkpCi0gICAgICAgICAgYlF1b3RlZFBhaXIgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgaWR4Kys7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpZHgpID09ICcoJykKLSAgICAgIHsKLSAgICAgICAgZ2V0TGFzdENvbW1lbnQoc3RyLCBpZHgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc3RyLmNoYXJBdChpZHgpID09ICcpJykKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGlkeCArIDE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGlkeDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJjdGV4dCIgc3RyaW5nLgotICAgKiAJCWN0ZXh0ID0gJmx0O2FueSBURVhUIGV4Y2x1ZGluZyAiKCIgYW5kICIpIiZndDsKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJjdGV4dCIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdEN0ZXh0KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGlkeCA9IGdldExhc3RURVhUKHN0ciwgc3RhcnRJbmRleCk7Ci0gICAgaW50IGlCcmFja2V0ID0gc3RhcnRJbmRleDsKLSAgICBmb3IgKDsgaUJyYWNrZXQgPCBpZHg7IGlCcmFja2V0KyspCi0gICAgewotICAgICAgaWYgKHN0ci5jaGFyQXQoaUJyYWNrZXQpID09ICcoJyB8fCBzdHIuY2hhckF0KGlCcmFja2V0KSA9PSAnKScpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoaUJyYWNrZXQgPCBpZHgpCi0gICAgICBpZHggPSBpQnJhY2tldDsKLSAgICByZXR1cm4gaWR4OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgInFkdGV4dCIgc3RyaW5nLgotICAgKiAJCXFkdGV4dCA9ICZsdDthbnkgVEVYVCBleGNlcHQgJmx0OyImZ3Q7Jmd0OwotICAgKiBAcGFyYW0gc3RyIHN0cmluZy4KLSAgICogQHBhcmFtIHN0YXJ0SW5kZXggc3RhcnQgaW5kZXguCi0gICAqIEByZXR1cm4gaW50IGFuIGluZGV4IG9mIHRoZSBmaXJzdCBzeW1ib2wgd2hpY2ggaXNuJ3QgInFkdGV4dCIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdFFkdGV4dChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpZHggPSBnZXRMYXN0VEVYVChzdHIsIHN0YXJ0SW5kZXgpOwotICAgIGludCBpQnJhY2tldCA9IHN0YXJ0SW5kZXg7Ci0gICAgZm9yICg7IGlCcmFja2V0IDwgaWR4OyBpQnJhY2tldCsrKQotICAgIHsKLSAgICAgIGlmIChzdHIuY2hhckF0KGlCcmFja2V0KSA9PSAnXCInKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGlCcmFja2V0IDwgaWR4KQotICAgICAgaWR4ID0gaUJyYWNrZXQ7Ci0gICAgcmV0dXJuIGlkeDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXF1b3RlZC1wYWlyID0gIlwiIENIQVIuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcGFyYW0gc3RhcnRJbmRleCBzdGFydCBpbmRleC4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgc3RyIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUXVvdGVkUGFpcihTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGlmIChzdHIubGVuZ3RoKCkgPj0gc3RhcnRJbmRleCArIDIKLSAgICAgICYmIHN0ci5jaGFyQXQoc3RhcnRJbmRleCkgPT0gJ1xcJwotICAgICAgJiYgaXNDSEFSKHN0ci5jaGFyQXQoc3RhcnRJbmRleCArIDEpKSkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJxdW90ZWQtc3RyaW5nIiBzdHJpbmcuCi0gICAqIAkJcXVvdGVkLXN0cmluZyAgPSAoICZsdDsiJmd0OyAqKHFkdGV4dCB8IHF1b3RlZC1wYWlyICkgJmx0OyImZ3Q7ICkKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJxdW90ZWQtc3RyaW5nIi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RRdW90ZWRTdHJpbmcoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotCi0gICAgLy8gaWYgZW5kIGlmIHRoZSBzdHJpbmcKLSAgICBpZiAoc3RhcnRJbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAvLyBpZiB0aGUgYmVnaW4gaXMgbm90ICciJwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSBEUSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXgrKzsKLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBpbmRleCA9IGdldExhc3RRZHRleHQoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIGlmIChpc1F1b3RlZFBhaXIoc3RyLCBpbmRleCAtIDEpKQotICAgICAgewotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gaWYgdGhlIGVuZCBpcyBub3QgJyInCi0gICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9IERRKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIHJldHVybiBpbmRleDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9FbnRyeVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRW50cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMWEzNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9FbnRyeVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRW50cnlUeXBlCi17Ci0gIC8qKgotICAgKiBSZXBvcnRBcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlOwotCi0gIC8qKgotICAgKiBUaGlzIHR5cGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyB0eXBlTmFtZTsKLQotICAvKioKLSAgICogRW50cnkgdHlwZXMgYWNjZXNzaWJsZSBieSB0eXBlIG5hbWUuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFRyZWVNYXAgZW50cnlUeXBlTWFwOwotCi0gIC8qKgotICAgKiBFbnRyeSB0eXBlIG5hbWVzIGFjY2Vzc2libGUgYnkgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFRyZWVNYXAgZW50cnlUeXBlTmFtZU1hcCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyoqCi0gICAqIEVudmVsb3BlIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBFbnZlbG9wZVZhbGlkYXRvci5UWVBFX0VOVkVMT1BFX1JFUVVFU1QgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRV9SRVFVRVNUID0gInJlcXVlc3RFbnZlbG9wZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgRW52ZWxvcGVWYWxpZGF0b3IuVFlQRV9FTlZFTE9QRV9SRVNQT05TRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX1JFU1BPTlNFID0gInJlc3BvbnNlRW52ZWxvcGUiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfQU5ZVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX0FOWSA9ICJhbnlFbnZlbG9wZSI7Ci0KLSAgLyoqCi0gICAqIE1lc3NhZ2UgZW50cnkgdHlwZXMuCi0gICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9NRVNTQUdFX1JFUVVFU1QgPSAicmVxdWVzdE1lc3NhZ2UiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFU1BPTlNFICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUVTU0FHRV9SRVNQT05TRSA9ICJyZXNwb25zZU1lc3NhZ2UiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX0FOWSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0VfQU5ZID0gImFueU1lc3NhZ2UiOwotCi0gIC8qKgotICAgKiBNSU1FIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUlNRV9QQVJUICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUlNRV9QQVJUID0gInBhcnQiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NSU1FX1JPT1RfUEFSVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01JTUVfUk9PVF9QQVJUID0gInJvb3QtcGFydCI7Ci0KLSAgLyoqCi0gICAqIERlc2NyaXB0aW9uIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9ERUZJTklUSU9OUyA9ICJkZWZpbml0aW9ucyI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCA9ICJpbXBvcnQiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9UWVBFUyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX1RZUEVTID0gInR5cGVzIjsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTiA9ICJvcGVyYXRpb24iOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFID0gInBvcnRUeXBlIjsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fQklORElORyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9QT1JUID0gInBvcnQiOwotCi0gIC8qKgotICAgKiBEaXNjb3ZlcnkgZW50cnkgdHlwZXMuCi0gICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFVERElWYWxpZGF0b3IuVFlQRV9ESVNDT1ZFUllfQklORElOR1RFTVBMQVRFICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZX0JJTkRJTkdURU1QTEFURSA9ICJiaW5kaW5nVGVtcGxhdGUiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFVERElWYWxpZGF0b3IuVFlQRV9ESVNDT1ZFUllfVE1PREVMICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZX1RNT0RFTCA9ICJ0TW9kZWwiOwotCi0gIC8qKgotICAgKiBFbnZlbG9wZSBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVFVRVNURU5WID0gZ2V0RW50cnlUeXBlKFRZUEVfRU5WRUxPUEVfUkVRVUVTVCk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVNQT05TRUVOViA9IGdldEVudHJ5VHlwZShUWVBFX0VOVkVMT1BFX1JFU1BPTlNFKTsKLQotICAvKioKLSAgICogTWVzc2FnZSBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVFVRVNUID0gZ2V0RW50cnlUeXBlKFRZUEVfTUVTU0FHRV9SRVFVRVNUKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX1JFU1BPTlNFID0gZ2V0RW50cnlUeXBlKFRZUEVfTUVTU0FHRV9SRVNQT05TRSk7Ci0gIC8vICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0FOWUVOVFJZID0gCi0gIC8vICAgICAgICBuZXcgRW50cnlUeXBlKEFydGlmYWN0VHlwZS5BUlRJRkFDVF9UWVBFX01FU1NBR0VTLCBUWVBFX01FU1NBR0VfQU5ZRU5UUlkpOwotCi0gIC8qKgotICAgKiBEZXNjcmlwdGlvbiBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9ERUZJTklUSU9OUyA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0RFRklOSVRJT05TKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0lNUE9SVCA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9UWVBFUyA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1RZUEVTKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX01FU1NBR0UgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX09QRVJBVElPTiA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTik7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9QT1JUVFlQRSA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0JJTkRJTkcgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX1BPUlQgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUKTsKLQotICAvKioKLSAgICogRGlzY292ZXJ5IGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0JJTkRJTkdURU1QTEFURSA9IGdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUpOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldEVudHJ5VHlwZShTdHJpbmcgdHlwZU5hbWUpIHRvIGFjY2VzcyBFbnRyeVR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIEVOVFJZX1RZUEVfVE1PREVMID0gZ2V0RW50cnlUeXBlKFRZUEVfRElTQ09WRVJZX1RNT0RFTCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBlbnRyeSB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBFbnRyeVR5cGUoQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSwgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdFR5cGUgPSBhcnRpZmFjdFR5cGU7Ci0gICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGVudHJ5IHR5cGUgZXF1YWwgdG8gc3BlY2lmaWVkIHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlTmFtZSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBlbnRyeSB0eXBlIGVxdWFsIHRvIHNwZWNpZmllZCB0eXBlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNUeXBlKFN0cmluZyB0eXBlTmFtZSkKLSAgewotICAgIHJldHVybiB0aGlzLnR5cGVOYW1lLmVxdWFscyh0eXBlTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogSXMgZW50cnkgdHlwZSBlcXVhbCB0byBzcGVjaWZpZWQgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBlbnRyeSB0eXBlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgZW50cnkgdHlwZSBlcXVhbCB0byBzcGVjaWZpZWQgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVHlwZShFbnRyeVR5cGUgZW50cnlUeXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGVOYW1lLmVxdWFscyhlbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IHR5cGUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBBcnRpZmFjdFR5cGUgZ2V0QXJ0aWZhY3RUeXBlKCkKLSAgewotICAgIHJldHVybiBhcnRpZmFjdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGVudHJ5IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSB0eXBlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVOYW1lKCkKLSAgewotICAgIHJldHVybiB0eXBlTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyB2YWxpZCBlbnRyeSB0eXBlLgotICAgKiBAcGFyYW0gdHlwZU5hbWUgZW50cnkgdHlwZSBuYW1lLgotICAgKiBAcmV0dXJuIHRydWUgaWYgZW50cnkgdHlwZSBuYW1lIGlzIHZhbGlkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzVmFsaWRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgcmV0dXJuIChlbnRyeVR5cGVNYXAuZ2V0KHR5cGVOYW1lKSA9PSBudWxsID8gZmFsc2UgOiB0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHR5cGVOYW1lIGVudHJ5IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSB0eXBlLgotICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gaWYgZW50cnkgdHlwZSBuYW1lIGlzIGludmFsaWQgb3IgaW5hcHByb3ByaWF0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIGdldEVudHJ5VHlwZShTdHJpbmcgdHlwZU5hbWUpCi0gICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KLSAgewotICAgIGlmIChlbnRyeVR5cGVNYXAgPT0gbnVsbCkgewotICAgICAgICBCYXNlVmFsaWRhdG9yIHZhbGlkYXRvcnNbXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKQotICAgICAgICAgICAgICAgIC5nZXRCYXNlVmFsaWRhdG9ycygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFN0cmluZyBlbnRyeVR5cGVzW10gPSB2YWxpZGF0b3JzW2ldLmdldEVudHJ5VHlwZXMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZW50cnlUeXBlcy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICByZWdpc3RlckVudHJ5VHlwZShBcnRpZmFjdFR5cGUuZ2V0QXJ0aWZhY3RUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yc1tpXS5nZXRBcnRpZmFjdFR5cGUoKSksIGVudHJ5VHlwZXNbal0pOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIEdldCB0aGUgZW50cnkgdHlwZSBieSB0eXBlIG5hbWUKLSAgICBFbnRyeVR5cGUgZW50cnlUeXBlID0gKEVudHJ5VHlwZSkgZW50cnlUeXBlTWFwLmdldCh0eXBlTmFtZSk7Ci0KLSAgICBpZiAoZW50cnlUeXBlID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgZ2V0IGVudHJ5IHR5cGUgYmVjYXVzZSB0eXBlIG5hbWUgaXMgaW52YWxpZDogIgotICAgICAgICAgICsgdHlwZU5hbWUKLSAgICAgICAgICArICIuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbGlzdCBvZiBlbnRyeSB0eXBlIG5hbWVzIGZvciBhIHNwZWNpZmllZCBhcnRpZmFjdCB0eXBlIG5hbWUuCi0gICAqIEBwYXJhbSBhcnRpZmFjdFR5cGVOYW1lIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBsaXN0IG9mIGVudHJ5IHR5cGUgbmFtZXMgZm9yIGEgc3BlY2lmaWVkIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGVudHJ5IHR5cGUgbmFtZSBpcyBpbnZhbGlkIG9yIGluYXBwcm9wcmlhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlY3RvciBnZXRFbnRyeVR5cGVOYW1lTGlzdChTdHJpbmcgYXJ0aWZhY3RUeXBlTmFtZSkKLSAgICB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IGxpc3QKLSAgICBWZWN0b3IgZW50cnlUeXBlTmFtZUxpc3QgPSAoVmVjdG9yKSBlbnRyeVR5cGVOYW1lTWFwLmdldChhcnRpZmFjdFR5cGVOYW1lKTsKLQotICAgIC8vIElmIHRoZSBsaXN0IHdhcyBub3QgZm91bmQsIHRoZW4gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgaWYgKGVudHJ5VHlwZU5hbWVMaXN0ID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgZ2V0IGVudHJ5IHR5cGUgbmFtZSBsaXN0IGJlY2F1c2UgYXJ0aWZhY3QgdHlwZSBuYW1lIGlzIGludmFsaWQ6ICIKLSAgICAgICAgICArIGFydGlmYWN0VHlwZU5hbWUKLSAgICAgICAgICArICIuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5VHlwZU5hbWVMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHR5cGUgbmFtZXMgZm9yIGEgc3BlY2lmaWVkIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIHJlZ2lzdGVyRW50cnlUeXBlKAotICAgIEFydGlmYWN0VHlwZSBhcnRpZmFjdFR5cGUsCi0gICAgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgRW50cnlUeXBlIGVudHJ5VHlwZSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgdHlwZQotICAgIGVudHJ5VHlwZSA9IG5ldyBFbnRyeVR5cGUoYXJ0aWZhY3RUeXBlLCB0eXBlTmFtZSk7Ci0KLSAgICBpZiAoZW50cnlUeXBlTWFwID09IG51bGwpIHsKLSAgICAgICAgZW50cnlUeXBlTWFwID0gbmV3IFRyZWVNYXAoKTsKLSAgICB9Ci0gICAgLy8gQWRkIHRvIGVudHJ5IHR5cGUgbWFwCi0gICAgZW50cnlUeXBlTWFwLnB1dCh0eXBlTmFtZSwgZW50cnlUeXBlKTsKLQotICAgIC8vIEdldCB0aGUgZW50cnkgdHlwZSBuYW1lIHZlY3RvciBmb3IgdGhlIGFydGlmYWN0IHR5cGUKLSAgICBWZWN0b3IgZW50cnlUeXBlTmFtZUxpc3QgPQotICAgICAgKFZlY3RvcikgZW50cnlUeXBlTmFtZU1hcC5nZXQoYXJ0aWZhY3RUeXBlLmdldFR5cGVOYW1lKCkpOwotICAgIAotICAgIC8vIExhenkgaW5pdGlhbGl6ZQotICAgIGlmIChlbnRyeVR5cGVOYW1lTGlzdCA9PSBudWxsKSB7Ci0gICAgICAgIGVudHJ5VHlwZU5hbWVMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBlbnRyeVR5cGVOYW1lTWFwLnB1dChhcnRpZmFjdFR5cGUuZ2V0VHlwZU5hbWUoKSwgZW50cnlUeXBlTmFtZUxpc3QpOwotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgdHlwZSBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgZW50cnlUeXBlTmFtZUxpc3QuYWRkKHR5cGVOYW1lKTsKLQotICAgIHJldHVybiBlbnRyeVR5cGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRXJyb3JMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0Vycm9yTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTU5N2Y0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRXJyb3JMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogVGhlIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBlcnJvciBzdHJpbmdzIGludG8gc3RyaW5nIGJ1ZmZlci4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRXJyb3JMaXN0Ci17Ci0gIHByaXZhdGUgU2V0IGVycm9ycyA9IG5ldyBIYXNoU2V0KCk7Ci0gIHByaXZhdGUgTWVzc2FnZUZvcm1hdCBmb3JtYXQgPSBuZXcgTWVzc2FnZUZvcm1hdCgiezB9OnsxfSIpOwotICBwcml2YXRlIEZpZWxkUG9zaXRpb24gcG9zID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3QgZXJyb3IgbGlzdCB1c2luZyBjb250ZW50cyBvZiBhIGxpc3QuCi0gICAqIEBwYXJhbSBsaXN0IGEgTGlzdCBvYmplY3QuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdChMaXN0IGxpc3QpCi0gIHsKLSAgICBhZGQobGlzdCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UgZm9ybWF0LgotICAgKiBAcGFyYW0gZiBhIG1lc3NhZ2UgZm9ybWF0LgotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdChNZXNzYWdlRm9ybWF0IGYpCi0gIHsKLSAgICBpZiAoZiAhPSBudWxsKQotICAgICAgZm9ybWF0ID0gZjsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgbGlzdC4gCi0gICAqIEBwYXJhbSBsaXN0IGxpc3Qgb2YgZXJyb3JzLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKExpc3QgbGlzdCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYWRkKChTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgZXJyb3IgZGVzY3JpcHRpb24gaW50byB0aGUgbGlzdC4gCi0gICAqIEBwYXJhbSBzMSBhIHN0cmluZy4KLSAgICogQHBhcmFtIHMyIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBzMSwgU3RyaW5nIHMyKQotICB7Ci0gICAgZXJyb3JzLmFkZChuZXcgUGFpcihzMSwgczIpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBxIGEgUU5hbWUgb2JqZWN0LgotICAgKiBAcGFyYW0gcyBhIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZChRTmFtZSBxLCBTdHJpbmcgcykKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocSksIHMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBxMSBhIFFOYW1lIG9iamVjdC4KLSAgICogQHBhcmFtIHEyIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFFOYW1lIHExLCBRTmFtZSBxMikKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocTEpLCBOdWxsVXRpbC50b1N0cmluZyhxMikpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuLi4KLSAgICogQHBhcmFtIHEgYSBRTmFtZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoUU5hbWUgcSkKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocSksIG51bGwpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBzIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBzKQotICB7Ci0gICAgZXJyb3JzLmFkZChuZXcgUGFpcihzLCBudWxsKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3IgbGlzdCBzdHJpbmcgcmVwcmVzZW50YXRpb24uIAotICAgKiBAcmV0dXJuIHRoZSBlcnJvciBsaXN0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICBJdGVyYXRvciBpdCA9IGVycm9ycy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFpciBwID0gKFBhaXIpIGl0Lm5leHQoKTsKLSAgICAgIGlmIChwLmdldEZpcnN0KCkgIT0gbnVsbCAmJiBwLmdldFNlY29uZCgpICE9IG51bGwpCi0gICAgICAgIGZvcm1hdC5mb3JtYXQobmV3IE9iamVjdFtdIHsgcC5nZXRGaXJzdCgpLCBwLmdldFNlY29uZCgpfSwgYnVmLCBwb3MpOwotICAgICAgZWxzZSBpZiAocC5nZXRGaXJzdCgpICE9IG51bGwpCi0gICAgICAgIGJ1Zi5hcHBlbmQocC5nZXRGaXJzdCgpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnVmLmFwcGVuZChwLmdldFNlY29uZCgpKTsKLSAgICAgIGlmIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIGJ1Zi5hcHBlbmQoIixcbiIpOwotICAgIH0KLQotICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciBlcnJvciBsaXN0IGlzIGVtcHR5IG9yIG5vdC4KLSAgICogQHJldHVybiB0cnVlIGlmIGVycm9yIGxpc3QgaXMgZW1wdHkuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkKLSAgewotICAgIHJldHVybiBlcnJvcnMuc2l6ZSgpID09IDA7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSFRUUENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YjA1MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEEgc2V0IG9mIEhUVFAgdmFsdWVzIHRoYXQgYXJlIGRlZmluZWQgYnkgTmV0d29yayBXb3JraW5nIEdyb3VwLgotICogaHR0cDovL3d3dy5pZXRmLm9yZy8KLSAqCi0gKiBAdmVyc2lvbiAxLjAKLSAqIEBhdXRob3IgSWx5YSBLYW5vbmlyb3YgKGtpb0Bpc2cuYXhtb3IuY29tKQotICovCi1wdWJsaWMgY2xhc3MgSFRUUENvbnN0YW50cyB7Ci0gIC8vIFRoZSBzdGFuZGFyZGl6ZWQgSFRUUCBIZWFkZXIgZmllbGQtbmFtZXMKLSAgLy8gaHR0cDovL3d3dy5tbm90Lm5ldC9kcmFmdHMvZHJhZnQtbm90dGluZ2hhbS1odHRwLWhlYWRlci1yZWctMDAudHh0Ci0KLSAgLy8gSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4xIChvYnNvbGV0ZXMgUkZDMjA2OCkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVCA9ICJBY2NlcHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0NIQVJTRVQgPSAiQWNjZXB0LUNoYXJzZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0VOQ09ESU5HID0gIkFjY2VwdC1FbmNvZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BQ0NFUFRfTEFOR1VBR0UgPSAiQWNjZXB0LUxhbmd1YWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9SQU5HRVMgPSAiQWNjZXB0LVJhbmdlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BR0UgPSAiQWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FMTE9XID0gIkFsbG93IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FVVEhPUklaQVRJT04gPSAiQXV0aG9yaXphdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DQUNIRV9DT05UUk9MID0gIkNhY2hlLUNvbnRyb2wiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OTkVDVCA9ICJDb25uZWN0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcgPSAiQ29udGVudC1FbmNvZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xBTkdVQUdFID0gIkNvbnRlbnQtTGFuZ3VhZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9MRU5HVEggPSAiQ29udGVudC1MZW5ndGgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9MT0NBVElPTiA9ICJDb250ZW50LUxvY2F0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfTUQ1ID0gIkNvbnRlbnQtTUQ1IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfUkFOR0UgPSAiQ29udGVudC1SYW5nZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RZUEUgPSAiQ29udGVudC1UeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RBVEUgPSAiRGF0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9FVEFHID0gIkVUYWciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQRUNUID0gIkV4cGVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9FWFBJUkVTID0gIkV4cGlyZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRlJPTSA9ICJGcm9tIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0hPU1QgPSAiSG9zdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NQVRDSCA9ICJJZi1NYXRjaCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSA9ICJJZi1Nb2RpZmllZC1TaW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9OT05FX01BVENIID0gIklmLU5vbmUtTWF0Y2giOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfUkFOR0UgPSAiSWYtUmFuZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRSA9ICJJZi1Vbm1vZGlmaWVkLVNpbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0xBU1RfTU9ESUZJRUQgPSAiTGFzdC1Nb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9MT0NBVElPTiA9ICJMb2NhdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NQVhfRk9SV0FSRFMgPSAiTWF4LUZvcndhcmRzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BSQUdNQSA9ICJQcmFnbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPWFlfQVVUSEVOVElDQVRFID0gIlByb3h5LUF1dGhlbnRpY2F0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9BVVRIT1JJWkFUSU9OID0gIlByb3h5LUF1dGhvcml6YXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkFOR0UgPSAiUmFuZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVGRVJFUiA9ICJSZWZlcmVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1JFVFJZX0FGVEVSID0gIlJldHJ5LUFmdGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NFUlZFUiA9ICJTZXJ2ZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVEUgPSAiVEUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVFJBSUxFUiA9ICJUcmFpbGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HID0gIlRyYW5zZmVyLUVuY29kaW5nIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VQR1JBREUgPSAiVXBncmFkZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9VU0VSX0FHRU5UID0gIlVzZXItQWdlbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVkFSWSA9ICJWYXJ5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1ZJQSA9ICJWaWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfV0FSTklORyA9ICJXYXJuaW5nIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1dXV19BVVRIRU5USUNBVEUgPSAiV1dXLUF1dGhlbnRpY2F0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NSU1FX1ZFUlNJT04gPSAiTUlNRS1WZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfRElTUE9TSVRJT04gPSAiQ29udGVudC1EaXNwb3NpdGlvbiI7ICAKLQotICAvLyBIVFRQIEF1dGhlbnRpY2F0aW9uOiBCYXNpYyBhbmQgRGlnZXN0IEFjY2VzcyBBdXRoZW50aWNhdGlvbgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQVVUSEVOVElDQVRJT05fSU5GTyA9ICJBdXRoZW50aWNhdGlvbi1JbmZvIjsKLQotICAvLyBIVFRQIFN0YXRlIE1hbmFnZW1lbnQgTWVjaGFuaXNtCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9TRVRfQ09PS0lFID0gIlNldC1Db29raWUiOwotCi0gIC8vIEhUVFAgU3RhdGUgTWFuYWdlbWVudCBNZWNoYW5pc20gKG9ic29sZXRlcyBSRkMyMTA5KQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09PS0lFID0gIkNvb2tpZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT09LSUUyID0gIkNvb2tpZTIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU0VUX0NPT0tJRTIgPSAiU2V0LUNvb2tpZTIiOwotCi0gIC8vIFdlYiBEaXN0cmlidXRlZCBBdXRob3JpbmcgYW5kIFZlcnNpb25pbmcKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RBViA9ICJEQVYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVQVEggPSAiRGVwdGgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVTVElOQVRJT04gPSAiRGVzdGluYXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUYgPSAiSWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTE9DS19UT0tFTiA9ICJMb2NrLVRva2VuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX09WRVJXUklURSA9ICJPdmVyd3JpdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1RBVFVTX1VSSSA9ICJTdGF0dXMtVVJJIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RJTUVPVVQgPSAiVGltZW91dCI7Ci0KLSAgLy8gSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4xIChQcm9wb3NlZCBTdGFuZGFyZCAtIHRoZXNlIGZpZWxkLW5hbWVzIGFyZSBub3cgY29uc2lkZXJlZCBvYnNvbGV0ZSkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfQkFTRSA9ICJDb250ZW50LUJhc2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFVCTElDID0gIlB1YmxpYyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1ZFUlNJT04gPSAiQ29udGVudC1WZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RFUklWRURfRlJPTSA9ICJEZXJpdmVkLUZyb20iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTElOSyA9ICJMaW5rIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VSSSA9ICJVUkkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfS0VFUF9BTElWRSA9ICJLZWVwLUFsaXZlIjsKLQotICAvLyBEZWx0YSBFbmNvZGluZyBpbiBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BX0lNID0gIkEtSU0iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVMVEFfQkFTRSA9ICJEZWx0YS1CYXNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0lNID0gIklNIjsKLQotICAvLyBJbnN0YW5jZSBEaWdlc3RzIGluIEhUVFAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RJR0VTVCA9ICJEaWdlc3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfV0FOVF9ESUdFU1QgPSAiV2FudC1EaWdlc3QiOwotCi0gIC8vIFNpbXBsZSBIaXQtTWV0ZXJpbmcgYW5kIFVzYWdlLUxpbWl0aW5nIGZvciBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NRVRFUiA9ICJNZXRlciI7Ci0KLSAgLy8gVGhlIEtub3duIE5vbi1TdGFuZGFyZGl6ZWQgSFRUUCBIZWFkZXIgZmllbGQtbmFtZXMKLQotICAvLyBUcmFuc3BhcmVudCBDb250ZW50IE5lZ290aWF0aW9uIGluIEhUVFAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9GRUFUVVJFUyA9ICJBY2NlcHQtRmVhdHVyZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUxURVJOQVRFUyA9ICJBbHRlcm5hdGVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX05FR09USUFURSA9ICJOZWdvdGlhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVENOID0gIlRDTiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WQVJJQU5UX1ZBUlkgPSAiVmFyaWFudC1WYXJ5IjsKLQotICAvLyBUaGUgU2FmZSBSZXNwb25zZSBIZWFkZXIgRmllbGQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NBRkUgPSAiU2FmZSI7Ci0KLSAgLy8gSHlwZXIgVGV4dCBDb2ZmZWUgUG90IENvbnRyb2wgUHJvdG9jb2wgKEhUQ1BDUC8xLjApCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BQ0NFUFRfQURESVRJT05TID0gIkFjY2VwdC1BZGRpdGlvbnMiOwotCi0gIC8vIFRoZSBTZWN1cmUgSHlwZXJUZXh0IFRyYW5zZmVyIFByb3RvY29sCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1BSSVZBQ1lfRE9NQUlOID0gIkNvbnRlbnQtUHJpdmFjeS1Eb21haW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTUFDX0lORk8gPSAiTUFDLUluZm8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJFQVJSQU5HRURfS0VZX0lORk8gPSAiUHJlYXJyYW5nZWQtS2V5LUluZm8iOwotCi0gIC8vIEFuIEhUVFAgRXh0ZW5zaW9uIEZyYW1ld29yawotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19FWFQgPSAiQy1FeHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19NQU4gPSAiQy1NYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19PUFQgPSAiQy1PcHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhUID0gIkV4dCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NQU4gPSAiTWFuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX09QVCA9ICJPcHQiOwotCi0gIC8vIFBJQ1MgTGFiZWwgRGlzdHJpYnV0aW9uIExhYmVsIFN5bnRheCBhbmQgQ29tbXVuaWNhdGlvbiBQcm90b2NvbHMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BJQ1NfTEFCRUwgPSAiUElDUy1MYWJlbCI7Ci0KLSAgLy8gUGxhdGZvcm0gRm9yIFByaXZhY3kgUHJlZmVyZW5jZXMgMS4wCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QM1AgPSAiUDNQIjsKLQotICAvLyBQRVAgLSBhbiBFeHRlbnNpb24gTWVjaGFuaXNtIGZvciBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DX1BFUCA9ICJDLVBFUCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DX1BFUF9JTkZPID0gIkMtUEVQLUluZm8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUEVQID0gIlBFUCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QRVBfSU5GTyA9ICJQZXAtSW5mbyI7Ci0KLSAgLy8gVGhlIEhUVFAgRGlzdHJpYnV0aW9uIGFuZCBSZXBsaWNhdGlvbiBQcm90b2NvbAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9JRCA9ICJDb250ZW50LUlEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RJRkZFUkVOVElBTF9JRCA9ICJEaWZmZXJlbnRpYWwtSUQiOwotCi0gIC8vIEVTSSBBcmNoaXRlY3R1cmUKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NVUlJPR0FURV9DQVBBQklMSVRZID0gIlN1cnJvZ2F0ZS1DYXBhYmlsaXR5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NVUlJPR0FURV9DT05UUk9MID0gIlN1cnJvZ2F0ZS1Db250cm9sIjsKLQotICAvLyBTZWxlY3RpbmcgUGF5bWVudCBNZWNoYW5pc21zIE92ZXIgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPVE9DT0wgPSAiUHJvdG9jb2wiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPVE9DT0xfSU5GTyA9ICJQcm90b2NvbC1JbmZvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1RPQ09MX1FVRVJZID0gIlByb3RvY29sLVF1ZXJ5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1RPQ09MX1JFUVVFU1QgPSAiUHJvdG9jb2wtUmVxdWVzdCI7Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gb2YgT1BTIE92ZXIgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfR0VUUFJPRklMRSA9ICJHZXRQcm9maWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST0ZJTEVPQkpFQ1QgPSAiUHJvZmlsZU9iamVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9TRVRQUk9GSUxFID0gIlNldFByb2ZpbGUiOwotCi0gIC8vIE5vdGlmaWNhdGlvbiBmb3IgUHJveHkgQ2FjaGVzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9GRUFUVVJFUyA9ICJQcm94eS1GZWF0dXJlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9JTlNUUlVDVElPTiA9ICJQcm94eS1JbnN0cnVjdGlvbiI7Ci0KLSAgLy8gT2JqZWN0IEhlYWRlciBsaW5lcyBpbiBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HID0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09TVCA9ICJDb3N0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX01FU1NBR0VfSUQgPSAiTWVzc2FnZS1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9USVRMRSA9ICJUaXRsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WRVJTSU9OID0gIlZlcnNpb24iOwotCi0gIC8vIEEgUHJvcG9zZWQgRXh0ZW5zaW9uIE1lY2hhbmlzbSBmb3IgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhURU5TSU9OID0gIkV4dGVuc2lvbiI7Ci0KLSAgLy8gV0lSRSAtIFczIElkZW50aWZpZXIgUmVzb2x1dGlvbiBFeHRlbnNpb25zCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9PUFRJT05BTCA9ICJPcHRpb25hbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SRVNPTFVUSU9OX0hJTlQgPSAiUmVzb2x1dGlvbi1IaW50IjsKLQotICAvLyBEdXBsaWNhdGUgU3VwcHJlc3Npb24gaW4gSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1VCT0sgPSAiU3ViT0siOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1VCU1QgPSAiU3Vic3QiOwotCi0gIC8vIFNwZWNpZmljYXRpb24gb2YgSFRUUC8xLjEgT1BUSU9OUyBtZXNzYWdlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09NUExJQU5DRSA9ICJDb21wbGlhbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX05PTl9DT01QTElBTkNFID0gIk5vbi1Db21wbGlhbmNlIjsKLQotICAvLyBXaWRlbHktdXNlZCB1bmRvY3VtZW50ZWQgaGVhZGVycwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVRVUVTVF9SQU5HRSA9ICJSZXF1ZXN0LVJhbmdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VBX0NPTE9SID0gIlVBLUNvbG9yIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VBX0NQVSA9ICJVQS1DUFUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVUFfT1MgPSAiVUEtT1MiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVUFfUElYRUxTID0gIlVBLVBpeGVscyI7Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gZXJyb3JzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SRUZFUlJFUiA9ICJSZWZlcnJlciI7Ci0KLSAgLy8gUHJpdmF0ZSBmZWF0dXJlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09QWVJJR0hUID0gIkNvcHlyaWdodCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UID0gIkNvbnRlbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQVVUSE9SID0gIkF1dGhvciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05UQUNUID0gIkNvbnRhY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfS0VZV09SRFMgPSAiS2V5d29yZHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfR0VORVJBVE9SID0gIkdlbmVyYXRvciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9ERVNDUklQVElPTiA9ICJEZXNjcmlwdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT01NQU5EID0gIkNvbW1hbmQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU0VTU0lPTiA9ICJTZXNzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RZUEUgPSAiVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NRVNTQUdFID0gIk1lc3NhZ2UiOwotCi0gIC8vIEFiYW5kb25lZCBwcm9wb3NhbHMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VOTEVTU19NT0RJRklFRF9TSU5DRSA9ICJVbmxlc3MtTW9kaWZpZWQtU2luY2UiOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCB0aGUgc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzIHByZXNlbnRlZCBhcyBMaXN0Ci0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2Ygc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzCi0gICAqLwotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0U3RhbmRhcmRpemVkSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BQ0NFUFRfQ0hBUlNFVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9SQU5HRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTExPVy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DQUNIRV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OTkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xBTkdVQUdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9MRU5HVEgudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9NRDUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VUQUcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBFQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBJUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRlJPTS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0hPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRl9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfTk9ORV9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xBU1RfTU9ESUZJRUQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9MT0NBVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BWF9GT1JXQVJEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BSQUdNQS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SQU5HRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFRkVSRVIudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SRVRSWV9BRlRFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFUlZFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFJBSUxFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVVBHUkFERS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VTRVJfQUdFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WQVJZLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVklBLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfV0FSTklORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dXV19BVVRIRU5USUNBVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NSU1FX1ZFUlNJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BVVRIRU5USUNBVElPTl9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TRVRfQ09PS0lFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT09LSUUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT09LSUUyLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUX0NPT0tJRTIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RBVi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFUFRILnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVTVElOQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xPQ0tfVE9LRU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9PVkVSV1JJVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVEFUVVNfVVJJLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElNRU9VVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFVCTElDLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVSSVZFRF9GUk9NLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTElOSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VSSS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0tFRVBfQUxJVkUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0FfSU0udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERUxUQV9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSU0udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RJR0VTVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dBTlRfRElHRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9NRVRFUi50b1VwcGVyQ2FzZSgpCi0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbGwgdGhlIG5vbi1zdGFuZGFyZGl6ZWQgSFRUUCBoZWFkZXIgbmFtZXMgcHJlc2VudGVkIGFzIExpc3QKLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBub24tc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzCi0gICAqLwotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0Tm9uU3RhbmRhcmRpemVkSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFRfRkVBVFVSRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTFRFUk5BVEVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTkVHT1RJQVRFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVENOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVkFSSUFOVF9WQVJZLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TQUZFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BQ0NFUFRfQURESVRJT05TLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT05URU5UX1BSSVZBQ1lfRE9NQUlOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUFDX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUkVBUlJBTkdFRF9LRVlfSU5GTy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ19FWFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DX01BTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NfT1BULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRVhULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUFOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfT1BULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QSUNTX0xBQkVMLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0wudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9SRVFVRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QM1AudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NfUEVQLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ19QRVBfSU5GTy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BFUC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BFUF9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT05URU5UX0lELnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRElGRkVSRU5USUFMX0lELnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TVVJST0dBVEVfQ0FQQUJJTElUWS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NVUlJPR0FURV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QUk9UT0NPTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9RVUVSWS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MX1JFUVVFU1QudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0dFVFBST0ZJTEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9GSUxFT0JKRUNULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUUFJPRklMRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUFJPWFlfRkVBVFVSRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9YWV9JTlNUUlVDVElPTi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NRVNTQUdFX0lELnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElUTEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9FWFRFTlNJT04udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX09QVElPTkFMLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUkVTT0xVVElPTl9ISU5ULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TVUJPSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NVQlNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT01QTElBTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTk9OX0NPTVBMSUFOQ0UudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1JFUVVFU1RfUkFOR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9DT0xPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX0NQVS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX09TLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVUFfUElYRUxTLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9SRUZFUlJFUi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09QWVJJR0hULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRBQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9LRVlXT1JEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0dFTkVSQVRPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFU0NSSVBUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09NTUFORC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFU1NJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUVTU0FHRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfVU5MRVNTX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCkKLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCBrbm93biBIVFRQIGhlYWRlciBuYW1lcyBwcmVzZW50ZWQgYXMgTGlzdAotICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIGFsbCBrbm93biBIVFRQIGhlYWRlciBuYW1lcwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldEFsbEtub3duSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BQ0NFUFRfQ0hBUlNFVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9SQU5HRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTExPVy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DQUNIRV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OTkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xBTkdVQUdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9MRU5HVEgudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9NRDUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VUQUcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBFQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBJUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRlJPTS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0hPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRl9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfTk9ORV9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xBU1RfTU9ESUZJRUQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9MT0NBVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BWF9GT1JXQVJEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BSQUdNQS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SQU5HRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFRkVSRVIudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SRVRSWV9BRlRFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFUlZFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFJBSUxFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVVBHUkFERS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VTRVJfQUdFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WQVJZLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVklBLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfV0FSTklORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dXV19BVVRIRU5USUNBVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NSU1FX1ZFUlNJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BVVRIRU5USUNBVElPTl9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TRVRfQ09PS0lFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT09LSUUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT09LSUUyLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUX0NPT0tJRTIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RBVi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFUFRILnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVTVElOQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xPQ0tfVE9LRU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9PVkVSV1JJVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVEFUVVNfVVJJLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElNRU9VVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFVCTElDLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVSSVZFRF9GUk9NLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTElOSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VSSS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0tFRVBfQUxJVkUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0FfSU0udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERUxUQV9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSU0udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RJR0VTVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dBTlRfRElHRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9NRVRFUi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQUNDRVBUX0ZFQVRVUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQUxURVJOQVRFUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX05FR09USUFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RDTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1ZBUklBTlRfVkFSWS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU0FGRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQUNDRVBUX0FERElUSU9OUy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9QUklWQUNZX0RPTUFJTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BQ19JTkZPLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJFQVJSQU5HRURfS0VZX0lORk8udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NfRVhULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ19NQU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DX09QVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VYVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX09QVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUElDU19MQUJFTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0xfUkVRVUVTVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUDNQLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DX1BFUC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NfUEVQX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QRVAudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QRVBfSU5GTy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9JRC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RJRkZFUkVOVElBTF9JRC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU1VSUk9HQVRFX0NBUEFCSUxJVFkudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVVJST0dBVEVfQ09OVFJPTC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUFJPVE9DT0wudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9JTkZPLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0xfUVVFUlkudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9SRVFVRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9HRVRQUk9GSUxFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPRklMRU9CSkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFVFBST0ZJTEUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1BST1hZX0ZFQVRVUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPWFlfSU5TVFJVQ1RJT04udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT1NULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUVTU0FHRV9JRC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RJVExFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVkVSU0lPTi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfRVhURU5TSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9PUFRJT05BTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFU09MVVRJT05fSElOVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU1VCT0sudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVUJTVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09NUExJQU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX05PTl9DT01QTElBTkNFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9SRVFVRVNUX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVUFfQ09MT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9DUFUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9PUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX1BJWEVMUy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUkVGRVJSRVIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NPUFlSSUdIVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BVVRIT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05UQUNULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfS0VZV09SRFMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9HRU5FUkFUT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERVNDUklQVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTU1BTkQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TRVNTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFlQRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01FU1NBR0UudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1VOTEVTU19NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpCi0gICAgfSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0hUVFBVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2ZTQ0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0hUVFBVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogU2V0IG9mIEhUVFBMIHJlbGF0ZWQgdXRpbGl0aWVzLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0KLSAqLwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSFRUUFV0aWxzCi17Ci0KLSAgLyoqCi0gICAqIEZpbmQgdGhlIFVSTCBzdHJpbmcgaW4gYSBIVFRQIFBPU1QgaGVhZGVyLgotICAgKiBAcGFyYW0gaHR0cFBvc3RIZWFkZXIgIGEgSFRUUCBQT1NUIGhlYWRlci4gCi0gICAqIEByZXR1cm4gdGhlIFVSTCBzdHJpbmcgaW4gYSBIVFRQIFBPU1QgaGVhZGVyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VVJMU3RyaW5nKFN0cmluZyBodHRwUG9zdEhlYWRlcikKLSAgewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSBudWxsOwotICAgIGludCBzdGFydCwgZW5kOwotCi0gICAgLy8gSWYgUE9TVCwgdGhlbiBjb250aW51ZQotICAgIGlmIChodHRwUG9zdEhlYWRlci5zdGFydHNXaXRoKCJQT1NUIikgfHwgaHR0cFBvc3RIZWFkZXIuc3RhcnRzV2l0aCgiR0VUIikpCi0gICAgewotICAgICAgLy8gU3RhcnQgYWZ0ZXIgZmlyc3Qgc3BhY2UKLSAgICAgIHN0YXJ0ID0gaHR0cFBvc3RIZWFkZXIuaW5kZXhPZignICcpICsgMTsKLQotICAgICAgLy8gTG9vayBmb3IgbmV4dCBub24tc3BhY2UgY2hhcmFjdGVyCi0gICAgICB3aGlsZSAoaHR0cFBvc3RIZWFkZXIuY2hhckF0KHN0YXJ0KSA9PSAnICcpCi0gICAgICAgIHN0YXJ0Kys7Ci0KLSAgICAgIC8vIEZpbmQgbmV4dCBzcGFjZSBjaGFyYWN0ZXIKLSAgICAgIGVuZCA9IGh0dHBQb3N0SGVhZGVyLmluZGV4T2YoJyAnLCBzdGFydCk7Ci0KLSAgICAgIC8vIEdldCBVUkwgc3RyaW5nIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYmV0d2VlbiBzdGFydCBhbmQgZW5kCi0gICAgICB1cmxTdHJpbmcgPSBodHRwUG9zdEhlYWRlci5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7Ci0gICAgfQotCi0gICAgLy8gRWxzZSB0aHJvdyBleGNlcHRpb24KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIkhUVFAgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gUE9TVCBkYXRhICh3YXM6ICIgKyBodHRwUG9zdEhlYWRlciArICIpIik7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIFVSTCBzdHJpbmcKLSAgICByZXR1cm4gdXJsU3RyaW5nOwotICB9Ci0gIC8qKgotICAgKiBVdGlsaXR5IHRvIHByZXNlbnQgSFRUUCBoZWFkZXIgaW5mb3JtYXRpb24gYXMgYXR0cmlidXRlLXZhbHVlIHBhaXJzLCAKLSAgICogYmFzZWQgb24gJzonIGFzIGF0dHJpYnV0ZS12YWx1ZSBzZXBhcmF0b3IuCi0gICAqIEBwYXJhbSBodHRwSGVhZGVyU3RyaW5nIGFuIEhUVFAgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIHNlcGFyYXRvcnMgYXR0cmlidXRlLXZhbHVlIHNlcGFyYXRvciBsaXN0LgotICAgKiBAcmV0dXJuIEhUVFAgaGVhZGVyIGluZm9ybWF0aW9uIGFzIGF0dHJpYnV0ZS12YWx1ZSBwYWlycy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBIVFRQIGhlYWRlciBpbmZvcm1hdGlvbiAKLSAgICogICAgICAgICBhcyBhdHRyaWJ1dGUtdmFsdWUgcGFpcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1hcCBnZXRIdHRwSGVhZGVyVG9rZW5zKFN0cmluZyBodHRwSGVhZGVyU3RyaW5nLCBTdHJpbmcgc2VwYXJhdG9ycykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihodHRwSGVhZGVyU3RyaW5nLCAiXG5cclxmIik7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIFN0cmluZyBsaW5lID0gdG9rZW5pemVyLm5leHRUb2tlbigpOwotICAgICAgaW50IGluZGV4ID0gbGluZS5pbmRleE9mKHNlcGFyYXRvcnMpOwotICAgICAgaWYgKGluZGV4ID4gMCAmJiBpbmRleCA8IGxpbmUubGVuZ3RoKCkgLSAxKQotICAgICAgewotICAgICAgCW5hbWUgPSBsaW5lLnN1YnN0cmluZygwLCBpbmRleCkudG9VcHBlckNhc2UoKTsKLSAgICAgICAgbWFwLnB1dChuYW1lLCBsaW5lLnN1YnN0cmluZyhpbmRleCArIDEpLnRyaW0oKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICgobmFtZSAhPSBudWxsKSAmJiAobGluZS5sZW5ndGgoKT4wKSAmJiBDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGxpbmUuY2hhckF0KDApKSkKLSAgICAgICAgICAgbWFwLnB1dChuYW1lLCBtYXAuZ2V0KG5hbWUpICsgIiAiICsgbGluZS50cmltKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0gIAotICAvKioKLSAgICogVXRpbGl0eSB0byB0YWtlIHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBIVFRQIGhlYWRlcgotICAgKiBAcGFyYW0gaHR0cEhlYWRlclN0cmluZyBhbiBIVFRQIGhlYWRlciBzdHJpbmcuCi0gICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcGFyYW0gc3ViQXR0cmlidXRlTmFtZSBzdWIgYXR0cmlidXRlIG5hbWUuCi0gICAqIEByZXR1cm4gc3ViIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIEhUVFAgaGVhZGVyLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gZ2V0IHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBIVFRQIGhlYWRlci4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBodHRwSGVhZGVyU3RyaW5nLCAKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBTdHJpbmcgc3ViQXR0cmlidXRlTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBnZXQgYXR0cmlidXRlIHZhbHVlCi0gICAgU3RyaW5nIHZhbHVlID0gCi0gICAgICAoU3RyaW5nKSBnZXRIdHRwSGVhZGVyVG9rZW5zKGh0dHBIZWFkZXJTdHJpbmcsIjoiKS5nZXQoYXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKTsKLSAgICBpZih2YWx1ZSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIHNlYXJjaCBzdWIgYXR0cmlidXRlIHRva2VuCi0gICAgICBpbnQgaWR4USA9IHZhbHVlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihzdWJBdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkrIj1cIiIpOwotICAgICAgaW50IGlkeCA9IHZhbHVlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihzdWJBdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkrIj0iKTsKLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBpcyBxdW90ZWQKLSAgICAgIGlmIChpZHhRICE9IC0xKSAKLSAgICAgIHsKLSAgICAgICAgaWR4USArPSAoc3ViQXR0cmlidXRlTmFtZSsiPVwiIikubGVuZ3RoKCk7Ci0gICAgICAgIGludCBlSWR4USA9IHZhbHVlLmluZGV4T2YoIlwiIiwgaWR4USk7Ci0gICAgICAgIGlmIChlSWR4USAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaWR4USwgZUlkeFEpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gaWYgYXR0cmlidXRlIGRvIG5vdCBxdW90ZWQKLSAgICAgIGVsc2UgaWYgKGlkeCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWR4ICs9IChzdWJBdHRyaWJ1dGVOYW1lKyI9IikubGVuZ3RoKCk7Ci0gICAgICAgIGludCBlSWR4ID0gLTE7Ci0gICAgICAgIC8vIGZpbmQgZW5kIHNwYWNlIHNlcGFyYXRvcgotICAgICAgICBpZiAoKGVJZHggPSB2YWx1ZS5pbmRleE9mKCIgIiwgaWR4KSkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCwgZUlkeCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZmluZCBjb21hIHNlcGFyYXRvcgotICAgICAgICBlbHNlIGlmICgoZUlkeCA9IHZhbHVlLmluZGV4T2YoIjsiLCBpZHgpKSAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaWR4LCBlSWR4KTsKLSAgICAgICAgfQotICAgICAgICAvLyB0aGlzIGlzIGxhc3QgYXR0cmlidXRlCi0gICAgICAgIGVsc2UgCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBkbyBub3QgZm91bmQKLSAgICAgIGVsc2UgCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogVXRpbGl0eSB0byB0YWtlIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIEhUVFAgaGVhZGVyCi0gICAqIEBwYXJhbSBodHRwSGVhZGVyU3RyaW5nIGFuIEhUVFAgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgYXR0cmlidXRlIG5hbWUuCi0gICAqIEByZXR1cm4gYXR0cmlidXRlIHZhbHVlIGZyb20gSFRUUCBoZWFkZXIuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBnZXQgYXR0cmlidXRlIHZhbHVlIGZyb20gSFRUUCBoZWFkZXIuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShTdHJpbmcgaHR0cEhlYWRlclN0cmluZywgCi0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSAKLSAgICAgICAgKFN0cmluZykgZ2V0SHR0cEhlYWRlclRva2VucyhodHRwSGVhZGVyU3RyaW5nLCI6IikuZ2V0KGF0dHJpYnV0ZU5hbWUudG9VcHBlckNhc2UoKSk7Ci0gICAgLy8gZ2V0IGZpcnN0IHRva2VuCi0gICAgaWYoKGF0dHJpYnV0ZVZhbHVlICE9IG51bGwpICYmIChhdHRyaWJ1dGVWYWx1ZS5pbmRleE9mKCI7IikgIT0gLTEpKSB7Ci0gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZVZhbHVlLnN1YnN0cmluZygwLCBhdHRyaWJ1dGVWYWx1ZS5pbmRleE9mKCI7IikpOwotICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSHR0cEhlYWRlcnNWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSHR0cEhlYWRlcnNWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2YTQ5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0h0dHBIZWFkZXJzVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBzdW4ubmV0Lnd3dy5NZXNzYWdlSGVhZGVyOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY2hlY2tzIEhUVFAgcmVxdWVzdCBoZWFkZXJzIGFib3V0IFJGQyAyNjE2LgotICoKLSAqIEBhdXRob3IgVm9sb2RpbiAKLSAqLwotcHVibGljIGNsYXNzIEh0dHBIZWFkZXJzVmFsaWRhdG9yCi17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BTExPVyA9ICJBbGxvdyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9FTkNPRElORyA9ICJDb250ZW50LUVuY29kaW5nIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xBTkdVQUdFID0gIkNvbnRlbnQtTGFuZ3VhZ2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfTEVOR0hUID0gIkNvbnRlbnQtTGVuZ3RoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OID0gIkNvbnRlbnQtTG9jYXRpb24iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfUkFOR0UgPSAiQ29udGVudC1SYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQSVJFUyA9ICJFeHBpcmVzIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9MQVNUX01PRElGSUVEID0gIkxhc3QtTW9kaWZpZWQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NBQ0hFX0NPTlRST0wgPSAiQ2FjaGUtQ29udHJvbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OTkVDVElPTiA9ICJDb25uZWN0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9EQVRFID0gIkRhdGUiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BSQUdNQSA9ICJQcmFnbWEiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RSQUlMRVIgPSAiVHJhaWxlciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcgPSAiVHJhbnNmZXItRW5jb2RpbmciOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVVBHUkFERSA9ICJVcGdyYWRlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WSUEgPSAiVmlhIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9XQVJOSU5HID0gIldhcm5pbmciOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUID0gIkFjY2VwdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0NIQVJTRVQgPSAiQWNjZXB0LUNoYXJzZXQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9FTkNPRElORyA9ICJBY2NlcHQtRW5jb2RpbmciOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRSA9ICJBY2NlcHQtTGFuZ3VhZ2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FVVEhPUklaQVRJT04gPSAiQXV0aG9yaXphdGlvbiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQRUNUID0gIkV4cGVjdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRlJPTSA9ICJGcm9tIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9IT1NUID0gIkhvc3QiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0lGX01BVENIID0gIklmLU1hdGNoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSA9ICJJZi1Nb2RpZmllZC1TaW5jZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfTk9ORV9NQVRDSCA9ICJJZi1Ob25lLU1hdGNoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9SQU5HRSA9ICJJZi1SYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRSA9Ci0gICAgIklmLVVubW9kaWZpZWQtU2luY2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX01BWF9GT1JXQVJEUyA9ICJNYXgtRm9yd2FyZHMiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04gPQotICAgICJQcm94eS1BdXRob3JpemF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SQU5HRSA9ICJSYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVGRVJFUiA9ICJSZWZlcmVyIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9URSA9ICJURSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVVNFUl9BR0VOVCA9ICJVc2VyLUFnZW50IjsKLQotICAvKioKLSAgICogVGhpcyBjbGFzcyBjaGVja3MgZS1tYWlsIHN0cmluZyBhYm91dCBSRkMgODIyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBNYWlsYm94VmFsaWRhdG9yCi0gIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gU1BFQ0lBTCA9Ci0gICAgICB7ICcoJywgJyknLCAnPCcsICc+JywgJ0AnLCAnLCcsICc7JywgJzonLCAnXFwnLCAnXCInLCAnLicsICdbJywgJ10nIH07Ci0KLSAgICAvKioKLSAgICAJKiBWYWxpZGF0ZXMgZS1tYWlsIHN0cmluZy4KLSAgICAqIEBwYXJhbSBtYWlsYm94IGUtbWFpbCBzdHJpbmcKLSAgICAqIEByZXR1cm4gYm9vbGVhbiAgdHJ1ZSBpZiBlLW1haWwgc3RyaW5nIGlzIGNvbmZvcm0gdG8gUkZDIDgyMiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICovCi0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdmFsaWRhdGVNYWlsYm94KFN0cmluZyBtYWlsYm94KQotICAgIHsKLQotICAgICAgaWYgKCFpc0Z1bGxBZGRyKG1haWxib3gpICYmICFpc1Nob3J0QWRkcihtYWlsYm94KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNTaW1wbGVBZGRyLgotICAgICAqIEBwYXJhbSBtYWlsYm94Ci0gICAgICogQHJldHVybiBib29sZWFuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1Nob3J0QWRkcihTdHJpbmcgbWFpbGJveCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXhBdCA9IG1haWxib3guaW5kZXhPZignQCcpOwotICAgICAgaWYgKGluZGV4QXQgPT0gLTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgaWYgKCFpc0xvY2FsUGFydChtYWlsYm94LnN1YnN0cmluZygwLCBpbmRleEF0KSkKLSAgICAgICAgfHwgIWlzRG9tYWluKG1haWxib3guc3Vic3RyaW5nKGluZGV4QXQgKyAxKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTWV0aG9kIGlzRG9tYWltLgotICAgICAqIEBwYXJhbSBzdHJpbmcKLSAgICAgKiByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEb21haW4oU3RyaW5nIHN0cmluZykKLSAgICB7Ci0gICAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0cmluZywgIi4iKTsKLSAgICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzdWJEb21haW4gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgICAgaWYgKCFpc0F0b20oc3ViRG9tYWluKSAmJiAhaXNEb21haW5MaXRlcmFsKHN1YkRvbWFpbikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNEb21haW5MaXRlcmFsLgotICAgICAqIEBwYXJhbSBzdWJEb21haW4KLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRG9tYWluTGl0ZXJhbChTdHJpbmcgc3ViRG9tYWluKQotICAgIHsKLSAgICAgIGlmIChnZXRMYXN0RG9tYWluTGl0ZXJhbChzdWJEb21haW4sIDApID09IHN1YkRvbWFpbi5sZW5ndGgoKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdERvbWFpbkxpdGVyYWwoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gICAgewotCi0gICAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgICAgLy9pbnQgbmV3SW5kZXggPSAwOwotCi0gICAgICAvLyBpZiBlbmQgaWYgdGhlIHN0cmluZwotICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIC8vIGlmIHRoZSBiZWdpbiBpcyBub3QgJ1snCi0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJ1snKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgaW5kZXgrKzsKLSAgICAgIHdoaWxlICh0cnVlKQotICAgICAgewotICAgICAgICBpbmRleCA9IGdldExhc3REdGV4dChzdHIsIGluZGV4KTsKLSAgICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgICAgaWYgKEJhc2ljUnVsZXMuaXNRdW90ZWRQYWlyKHN0ciwgaW5kZXggLSAxKSkKLSAgICAgICAgewotICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8vIGlmIHRoZSBlbmQgaXMgbm90ICddJwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICddJykKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIGluZGV4Kys7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldExhc3REdGV4dChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgICB7Ci0gICAgICBpZiAoc3RyLmxlbmd0aCgpID09IHN0YXJ0SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgaW50IGkgPSAwOwotICAgICAgZm9yICg7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgY2hhciBjaCA9IHN0ci5jaGFyQXQoaSk7Ci0gICAgICAgIGkgPSBCYXNpY1J1bGVzLmdldExhc3RJbmRleExXUyhzdHIsIGkpOwotICAgICAgICBpZiAoIUJhc2ljUnVsZXMuaXNDSEFSKGNoKQotICAgICAgICAgIHx8IHN0ci5jaGFyQXQoaSkgPT0gJ1snCi0gICAgICAgICAgfHwgc3RyLmNoYXJBdChpKSA9PSAnXScKLSAgICAgICAgICB8fCBzdHIuY2hhckF0KGkpID09ICdcXCcKLSAgICAgICAgICB8fCBzdHIuY2hhckF0KGkpID09IEJhc2ljUnVsZXMuQ1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gaSArIDE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBpICsgMTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNMb2NhbFBhcnQuCi0gICAgICogQHBhcmFtIHN0cmluZwotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMb2NhbFBhcnQoU3RyaW5nIHN0cmluZykKLSAgICB7Ci0gICAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0cmluZywgIi4iKTsKLSAgICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNXb3JkKHN0Lm5leHRUb2tlbigpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNXb3JkLgotICAgICAqIEBwYXJhbSBzdHJpbmcKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzV29yZChTdHJpbmcgc3RyaW5nKQotICAgIHsKLSAgICAgIGlmICghaXNBdG9tKHN0cmluZykgJiYgIWlzUXVvdGVkU3RyaW5nKHN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1ldGhvZCBpc0F0b20uCi0gICAgICogQHBhcmFtIHN0cmluZwotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBdG9tKFN0cmluZyBzdHJpbmcpCi0gICAgewotICAgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBpZiAoIUJhc2ljUnVsZXMuaXNDSEFSKHN0cmluZy5jaGFyQXQoaSkpCi0gICAgICAgICAgfHwgaXNTcGVjaWFsKHN0cmluZy5jaGFyQXQoaSkpCi0gICAgICAgICAgfHwgc3RyaW5nLmNoYXJBdChpKSA9PSAnICcKLSAgICAgICAgICB8fCBCYXNpY1J1bGVzLmlzQ1RMKHN0cmluZy5jaGFyQXQoaSkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNTcGVjaWFsLgotICAgICAqIEBwYXJhbSBjCi0gICAgICogQHJldHVybiBib29sZWFuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NwZWNpYWwoY2hhciBjaCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgU1BFQ0lBTC5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIGlmIChjaCA9PSBTUEVDSUFMW2luZGV4XSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNGdWxsQWRkci4KLSAgICAgKiBAcGFyYW0gbWFpbGJveAotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNGdWxsQWRkcihTdHJpbmcgbWFpbGJveCkKLSAgICB7Ci0gICAgICBpZiAobWFpbGJveC5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBpbnQgaWR4TFQgPSBtYWlsYm94LmluZGV4T2YoJzwnKTsKLSAgICAgIGlmIChpZHhMVCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAvL2lzIHBocmFzZQotICAgICAgU3RyaW5nIHBocmFzZSA9IG1haWxib3guc3Vic3RyaW5nKDAsIGlkeExUKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocGhyYXNlLCAiICIpOwotICAgICAgaWYgKHN0LmNvdW50VG9rZW5zKCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1dvcmQoc3QubmV4dFRva2VuKCkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChwaHJhc2UuY2hhckF0KHBocmFzZS5sZW5ndGgoKSAtIDEpICE9IEJhc2ljUnVsZXMuU1ApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgLy9pcyByb3V0ZS1hZGRyCi0gICAgICBTdHJpbmcgcm91dGVBZGRyID0gbWFpbGJveC5zdWJzdHJpbmcoaWR4TFQgKyAxKTsKLSAgICAgIC8vIGlzIHJvdXRlCi0gICAgICBpbnQgaWR4VHdvU3BvdCA9IHJvdXRlQWRkci5pbmRleE9mKCc6Jyk7Ci0gICAgICBpZiAoaWR4VHdvU3BvdCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0Um91dGVBZGRyID0KLSAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKHJvdXRlQWRkci5zdWJzdHJpbmcoMCwgaWR4VHdvU3BvdCksICIsIik7Ci0gICAgICAgIGlmICghc3RSb3V0ZUFkZHIuaGFzTW9yZVRva2VucygpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHN0Um91dGVBZGRyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNEb21haW4oc3RSb3V0ZUFkZHIubmV4dFRva2VuKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vaXMgYWRkciBzcGVjCi0gICAgICBpbnQgaWR4R1QgPSByb3V0ZUFkZHIuaW5kZXhPZignPicpOwotICAgICAgaWYgKGlkeEdUID09IC0xIHx8IGlkeEdUICE9IChyb3V0ZUFkZHIubGVuZ3RoKCkgLSAxKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBpZiAoIWlzU2hvcnRBZGRyKHJvdXRlQWRkci5zdWJzdHJpbmcoaWR4VHdvU3BvdCArIDEsIGlkeEdUKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIEhUVFAgcmVxdWVzdCBoZWFkZXJzLgotICAgKiBAcGFyYW0gaGVhZGVycyBIVFRQIHJlcXVlc3QgaGVhZGVycwotICAgKiBAcmV0dXJuIGJvb2xlYW4gIHRydWUgaWYgYWxsIEhUVFAgaGVhZGVycyBzdHJpbmcgaXMgY29uZm9ybSB0byBSRkMgMjYxNiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdmFsaWRhdGVIdHRwUmVxdWVzdEhlYWRlcnMoU3RyaW5nIGhlYWRlcnMpCi0gIHsKLQotICAgIE1lc3NhZ2VIZWFkZXIgbWggPSBuZXcgTWVzc2FnZUhlYWRlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIG1oLnBhcnNlSGVhZGVyKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShoZWFkZXJzLmdldEJ5dGVzKCkpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFN0cmluZyBoZWFkZXIgPSBudWxsOwotICAgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0KLSAgICBoZWFkZXIgPSBtaC5nZXRLZXkoMCk7Ci0gICAgaWYgKGhlYWRlciAhPSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFsdWUgPSBtaC5nZXRWYWx1ZSgwKTsKLSAgICBpZiAodmFsdWUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vbWV0aG9kCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiAiKTsKLSAgICBpZiAoIXN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RyID0gc3QubmV4dFRva2VuKCk7Ci0gICAgaWYgKCFpc1VSSShzdHIpICYmICFzdHIuZXF1YWxzKCIqIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotICAgIGlmICghaXNIVFRQVmVyc2lvbihzdHIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGkgPSAxOwotICAgIHRyeQotICAgIHsKLSAgICAgIHdoaWxlICgoaGVhZGVyID0gbWguZ2V0S2V5KGkpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICB2YWx1ZSA9IG1oLmdldFZhbHVlKGkpOwotICAgICAgICBpKys7Ci0KLSAgICAgICAgLy8gaXMgbWVzc2FnZS1oZWFkZXIgdG9rZW4KLSAgICAgICAgaWYgKCFpc1Rva2VuKGhlYWRlcikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vLS0tLSBlbnRpdHktaGVhZGVycwotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9BTExPVykpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRBbGxvdyh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9UWVBFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNNZWRpYVR5cGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9DT05URU5UX0VOQ09ESU5HKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0NPTlRFTlRfTEFOR1VBR0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0xhbmd1YWdlVGFnKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9MRU5HSFQpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0RpZGdpdCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0NPTlRFTlRfTE9DQVRJT04pKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1VSSSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9SQU5HRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRDb250ZW50UmFuZ2UodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0VYUElSRVMpCi0gICAgICAgICAgfHwgaGVhZGVyLmVxdWFscyhIRUFERVJfTEFTVF9NT0RJRklFRCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8tLS0tIGdlbmVyYWwtaGVhZGVycwotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ0FDSEVfQ09OVFJPTCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRDYWNoZUNvbnRyb2wodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9DT05ORUNUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfREFURSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1BSQUdNQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzUHJhZ21hRGVyZWN0aXZlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9UUkFJTEVSKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1RyYW5zZmVyQ29kaW5nKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9VUEdSQURFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZFVwZ3JhZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1ZJQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRWaWEodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1dBUk5JTkcpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkV2FybmluZyh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZEFjY2VwdCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUX0NIQVJTRVQpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkQWNjZXB0Q2hhclNldCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUX0VOQ09ESU5HKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZEFjY2VwdEVuY29kaW5nKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9BQ0NFUFRfTEFOR1VBR0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkQWNjZXB0TGFuZ3VhZ2UodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0FVVEhPUklaQVRJT04pCi0gICAgICAgICAgfHwgaGVhZGVyLmVxdWFscyhIRUFERVJfUFJPWFlfQVVUSE9SSVpBVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzQ3JlZGVudGlhbHModmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9FWFBFQ1QpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0V4cGVjdGF0aW9uKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9GUk9NKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghTWFpbGJveFZhbGlkYXRvci52YWxpZGF0ZU1haWxib3godmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX01BVENIKQotICAgICAgICAgIHx8IGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX05PTkVfTUFUQ0gpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkSWZNYXRjaCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX1JBTkdFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNFbnRpdHlUYWcodmFsdWUpICYmICFpc0hUVFBEYXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLS0tCQkJCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9JRl9VTk1PRElGSUVEX1NJTkNFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNIVFRQRGF0ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX01BWF9GT1JXQVJEUykpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzRGlkZ2l0KHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9VU0VSX0FHRU5UKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZFVzZXJBZ2VudCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfVEUpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkVEUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1JBTkdFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNSYW5nZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0hPU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0hvc3QodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9SRUZFUkVSKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNVUkkodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRJZk1hdGNoLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRJZk1hdGNoKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICgiKiIuZXF1YWxzKHZhbHVlLnRyaW0oKSkpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpZiAoIWlzRW50aXR5VGFnKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkVXBncmFkZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVXBncmFkZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGlmICghaXNQcm9kdWN0KHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZENhY2hlQ29udHJvbC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQ2FjaGVDb250cm9sKFN0cmluZyB2YWx1ZSkKLSAgewotCi0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGludCBpbmRleCA9IHN0ci5pbmRleE9mKCc9Jyk7Ci0gICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICB7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN0cmluZyBzdHJBZnRlckVxID0gc3RyLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyQWZ0ZXJFcSkgJiYgIWlzUXVvdGVkU3RyaW5nKHN0ckFmdGVyRXEpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzSFRUUFZlcnNpb24uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSFRUUFZlcnNpb24oU3RyaW5nIHN0cikKLSAgewotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIkhUVFAvIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IGlkeCA9ICJIVFRQLyIubGVuZ3RoKCk7Ci0KLSAgICBpbnQgaWR4MiA9IHN0ci5pbmRleE9mKCIuIik7Ci0KLSAgICAvLyAxKkRJR0lUCi0gICAgU3RyaW5nIHMgPSBzdHIuc3Vic3RyaW5nKGlkeCwgaWR4Mik7Ci0gICAgaWYgKCFpc0RpZGdpdChzKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHMgPSBzdHIuc3Vic3RyaW5nKGlkeDIgKyAxKTsKLSAgICBpZiAoIWlzRGlkZ2l0KHMpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRXYXJuaW5nLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRXYXJuaW5nKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZhbHVlID0gdmFsdWUudHJpbSgpOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIgIik7Ci0gICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotCi0gICAgaWYgKHN0ci5sZW5ndGgoKSA+IDMgfHwgIWlzRGlkZ2l0KHN0cikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICBpZiAoIWlzSG9zdChzdHIpICYmICFpc1Rva2VuKHN0cikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvL2lmKCFzdC5oYXNNb3JlVG9rZW5zKCkpIHJldHVybiBmYWxzZTsKLSAgICBzdHIgPSBzdC5uZXh0VG9rZW4oIiIpLnRyaW0oKTsKLSAgICAvLz8/PwotCi0gICAgaW50IGxhc3RRdW90ZWRTdHJpbmcgPSBCYXNpY1J1bGVzLmdldExhc3RRdW90ZWRTdHJpbmcoc3RyLCAwKTsKLSAgICBpZiAobGFzdFF1b3RlZFN0cmluZyA9PSBzdHIubGVuZ3RoKCkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgZGF0YSA9IHN0ci5zdWJzdHJpbmcobGFzdFF1b3RlZFN0cmluZyk7Ci0gICAgICBpZiAoZGF0YS5jaGFyQXQoZGF0YS5sZW5ndGgoKSkgIT0gJ1wiJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKHN0ci5jaGFyQXQoMCkgIT0gJ1wiJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFpc0hUVFBEYXRlKHN0ci5zdWJzdHJpbmcoMSwgZGF0YS5sZW5ndGgoKSAtIDEpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkVmlhLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRWaWEoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotCi0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotCi0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QyID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICIgIik7Ci0KLSAgICAgIC8vIHByb3RvY29sL3ZlcnNpb24KLSAgICAgIHN0ciA9IHN0Mi5uZXh0VG9rZW4oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiLyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1Rva2VuKHN0cikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgIHx8ICFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgLy9ob3N0Ci0gICAgICBzdHIgPSBzdDIubmV4dFRva2VuKCk7Ci0gICAgICBpZiAoIWlzSG9zdChzdHIpICYmICFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgLy9jb21tZW50Ci0gICAgICBpZiAoc3QyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgc3RyID0gc3QyLm5leHRUb2tlbigiIik7Ci0gICAgICAgIGlmICghaXNDb21tZW50KHN0ci50cmltKCkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzSG9zdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0hvc3QoU3RyaW5nIHZhbHVlKQotICB7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBuZXcgVVJMKCJodHRwOi8vIiArIHZhbHVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRBbGxvdy4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWxsb3coU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiLCIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgaWYgKCFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRDb250ZW50UmFuZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZENvbnRlbnRSYW5nZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoImJ5dGVzIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nIHN0ciA9IHZhbHVlLnN1YnN0cmluZygiYnl0ZXMiLmxlbmd0aCgpKS50cmltKCk7Ci0KLSAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIi8iKTsKLSAgICBpZiAoaWR4ID09IC0xKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIGJ5dGVSYW5nZSA9IHN0ci5zdWJzdHJpbmcoMCwgaWR4KTsKLSAgICBpbnQgaWR4MiA9IGJ5dGVSYW5nZS5pbmRleE9mKCItIik7Ci0gICAgaWYgKGlkeDIgPT0gLTEpCi0gICAgewotICAgICAgaWYgKCFieXRlUmFuZ2UuZXF1YWxzKCIqIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmICghaXNEaWRnaXQoYnl0ZVJhbmdlLnN1YnN0cmluZygwLCBpZHgyKSkKLSAgICAgICAgfHwgIWlzRGlkZ2l0KGJ5dGVSYW5nZS5zdWJzdHJpbmcoaWR4MiArIDEpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNEaWRnaXQoc3RyLnN1YnN0cmluZyhpZHggKyAxKSkKLSAgICAgICYmICFzdHIuc3Vic3RyaW5nKGlkeCArIDEpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzUmFuZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNSYW5nZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoImJ5dGVzPSIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBzdHJCeXRlUmFuZ2UgPSB2YWx1ZS5zdWJzdHJpbmcoImJ5dGVzPSIubGVuZ3RoKCkpOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHJCeXRlUmFuZ2UsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiLSIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKGlkeCA9PSAwKQotICAgICAgewotICAgICAgICBpZiAoIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoMSkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKGlkeCA9PSAoc3RyLmxlbmd0aCgpIC0gMSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCgpIC0gMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNEaWRnaXQoc3RyLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgICAgfHwgIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZFRFLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRURShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpZiAoc3QuZXF1YWxzKCJ0cmFpbGVycyIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI7Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoIWlzTGFuZ3VhZ2VSYW5nZShzdHIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0gICAgICAgIGlmICghaXNMYW5ndWFnZVJhbmdlKF8xKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNRQW5kUVZhbHVlKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZFVzZXJBZ2VudC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVXNlckFnZW50KFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIgIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICghaXNQcm9kdWN0KHN0cikgJiYgIWlzQ29tbWVudChzdHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNDb21tZW50LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbW1lbnQoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChCYXNpY1J1bGVzLmdldExhc3RDb21tZW50KHN0ciwgMCkgIT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0TGFuZ3VhZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZEFjY2VwdExhbmd1YWdlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIjsiKTsKLSAgICAgIGlmIChpZHggPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNUb2tlbihzdHIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0gICAgICAgIGlmICghaXNUb2tlbihfMSkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzQWNjZXB0UGFyYW1zKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNMYW5ndWFnZVJhbmdlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0xhbmd1YWdlUmFuZ2UoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChzdHIudHJpbSgpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICItIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXM4QUxQSEEoc3QubmV4dFRva2VuKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0RW5jb2RpbmcuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZEFjY2VwdEVuY29kaW5nKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIjsiKTsKLSAgICAgIGlmIChpZHggPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNUb2tlbihzdHIpICYmICFzdHIuZXF1YWxzKCIqIikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgXzEgPSBzdHIuc3Vic3RyaW5nKDAsIGlkeCkudHJpbSgpOwotICAgICAgICBTdHJpbmcgXzIgPSBzdHIuc3Vic3RyaW5nKGlkeCArIDEpLnRyaW0oKTsKLQotICAgICAgICBpZiAoKCFpc1Rva2VuKF8xKSAmJiAhXzEuZXF1YWxzKCIqIikpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1FBbmRRVmFsdWUoXzIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0Q2hhclNldC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWNjZXB0Q2hhclNldChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiLCIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI7Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyKSAmJiAhc3RyLmVxdWFscygiKiIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0KLSAgICAgICAgaWYgKCghaXNUb2tlbihfMSkgJiYgIV8xLmVxdWFscygiKiIpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNRQW5kUVZhbHVlKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZEFjY2VwdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWNjZXB0KFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiOyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc01lZGlhUmFuZ2Uoc3RyKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNNZWRpYVJhbmdlKHN0ci5zdWJzdHJpbmcoMCwgaWR4KS50cmltKCkpCi0gICAgICAgICAgfHwgIWlzQWNjZXB0UGFyYW1zKHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkudHJpbSgpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNBY2NlcHRQYXJhbXMuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQWNjZXB0UGFyYW1zKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHJpbmcsICI7Iik7Ci0gICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotCi0gICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI9Iik7Ci0gICAgaWYgKGlkeCA9PSAtMSkKLSAgICB7Ci0gICAgICBpZiAoc3RyLmVxdWFscygicSIpIHx8ICFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChzdHIuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCJxIikpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNRVmFsdWUoc3RyLnN1YnN0cmluZyhpZHggKyAxKSkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoIWlzUGFyYW1ldGVyV2l0aG91dFZhbHVlKHN0cikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXJXaXRob3V0VmFsdWUoc3RyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRQW5kUVZhbHVlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1FBbmRRVmFsdWUoU3RyaW5nIHN0cikKLSAgewotICAgIHN0ciA9IHN0ci50cmltKCk7Ci0gICAgaWYgKCFzdHIudHJpbSgpLnN0YXJ0c1dpdGgoInE9IikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFpc1FWYWx1ZShzdHIuc3Vic3RyaW5nKCJxPSIubGVuZ3RoKCkpKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRVmFsdWUuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUVZhbHVlKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGlkeCA9IHN0cmluZy5pbmRleE9mKCIuIik7Ci0gICAgaWYgKGlkeCA9PSAtMSkKLSAgICB7Ci0gICAgICBpZiAoISIwIi5lcXVhbHMoc3RyaW5nKSAmJiAhIjEiLmVxdWFscyhzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyRGlnID0gc3RyaW5nLnN1YnN0cmluZyhpZHggKyAxKTsKLSAgICAgIGlmIChzdHJEaWcubGVuZ3RoKCkgPiAzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGlmIChzdHJpbmcuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCIwIikpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNEaWRnaXQoc3RyRGlnKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCFzdHJpbmcuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCIxIikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyRGlnLmxlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoc3RyRGlnLmNoYXJBdChpKSAhPSAnMCcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNNZWRpYVJhbmdlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc01lZGlhUmFuZ2UoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChzdHIudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIi8iKTsKLSAgICBpZiAoaWR4ID09IC0xKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoMCwgaWR4KSkgJiYgIXN0ci5zdWJzdHJpbmcoMCwgaWR4KS5lcXVhbHMoIioiKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyLnN1YnN0cmluZyhpZHggKyAxKSkKLSAgICAgICYmICFzdHIuc3Vic3RyaW5nKGlkeCArIDEpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzRW50aXR5VGFnLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRW50aXR5VGFnKFN0cmluZyB2YWx1ZSkKLSAgewotCi0gICAgaW50IGlkeCA9IDA7Ci0gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoIlcvIikpCi0gICAgICBpZHggPSAyOwotICAgIGlmICghaXNRdW90ZWRTdHJpbmcodmFsdWUuc3Vic3RyaW5nKGlkeCkpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0V4cGVjdGF0aW9uLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRXhwZWN0YXRpb24oU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLmVxdWFscygiMTAwLWNvbnRpbnVlIikpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICI7Iik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXJXaXRob3V0VmFsdWUoc3QubmV4dFRva2VuKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzQ3JlZGVudGlhbHMuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNDcmVkZW50aWFscyhTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiICIpOwotICAgIGlmICghaXNUb2tlbihzdC5uZXh0VG9rZW4oKSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHBhcmFtID0gc3QubmV4dFRva2VuKCIsIik7Ci0gICAgICBpZiAoIWlzUGFyYW1ldGVyKHBhcmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNQcm9kdWN0LgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUHJvZHVjdChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpbnQgaWR4ID0gdmFsdWUuaW5kZXhPZigiLyIpOwotICAgIGlmIChpZHggPT0gLTEpCi0gICAgewotICAgICAgaWYgKCFpc1Rva2VuKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKCFpc1Rva2VuKHZhbHVlLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICB8fCAhaXNUb2tlbih2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1RyYW5zZmVyQ29kaW5nLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVHJhbnNmZXJDb2RpbmcoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLmVxdWFscygiY2h1bmtlZCIpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIjsiKTsKLSAgICAgIGlmICghaXNUb2tlbihzdC5uZXh0VG9rZW4oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBpZiAoIWlzUGFyYW1ldGVyKHN0Lm5leHRUb2tlbigpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNQYXJhbWV0ZXIuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUGFyYW1ldGVyKFN0cmluZyBzdHJpbmcpCi0gIHsKLQotICAgIC8vIGNoZWNrIHBhcmFtZXRlcgkKLSAgICBpbnQgaWR4ID0gc3RyaW5nLmluZGV4T2YoIj0iKTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyaW5nLnN1YnN0cmluZygwLCBpZHgpKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZyBwYXJWYWx1ZSA9IHN0cmluZy5zdWJzdHJpbmcoaWR4ICsgMSk7Ci0gICAgaWYgKCFpc1Rva2VuKHBhclZhbHVlKSAmJiAhaXNRdW90ZWRTdHJpbmcocGFyVmFsdWUpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzUGFyYW1ldGVyV2l0aG91dFZhbHVlLgotICAgKiBAcGFyYW0gc3RyaW5nCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1BhcmFtZXRlcldpdGhvdXRWYWx1ZShTdHJpbmcgc3RyaW5nKQotICB7Ci0KLSAgICAvLyBjaGVjayBwYXJhbWV0ZXIJCi0gICAgaW50IGlkeCA9IHN0cmluZy5pbmRleE9mKCI9Iik7Ci0gICAgaWYgKGlkeCAhPSAtMSkKLSAgICB7Ci0gICAgICBpZiAoIWlzVG9rZW4oc3RyaW5nLnN1YnN0cmluZygwLCBpZHgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgU3RyaW5nIHBhclZhbHVlID0gc3RyaW5nLnN1YnN0cmluZyhpZHggKyAxKTsKLSAgICAgIGlmICghaXNUb2tlbihwYXJWYWx1ZSkgJiYgIWlzUXVvdGVkU3RyaW5nKHBhclZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoIWlzVG9rZW4oc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ByYWdtYURlcmVjdGl2ZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ByYWdtYURlcmVjdGl2ZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUuZXF1YWxzKCJuby1jYWNoZSIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGludCBpZHggPSB2YWx1ZS5pbmRleE9mKCI9Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSB2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSk7Ci0gICAgICAgIGlmIChpc1Rva2VuKHZhbHVlLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgICYmIChpc1Rva2VuKHN0cikgfHwgaXNRdW90ZWRTdHJpbmcoc3RyKSkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0hUVFBEYXRlLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSFRUUERhdGUoU3RyaW5nIHZhbHVlKQotICB7Ci0KLSAgICBTdHJpbmcgcmZjMTEyM19kYXRlID0gIkVFRSwgZGQgTU1NIHl5eXkgaGg6bW06c3MgJ0dNVCciOwotICAgIFN0cmluZyByZmM4NTBfZGF0ZSA9ICJFRUVFLCBkZC1NTU0teXkgaGg6bW06c3MgJ0dNVCciOwotICAgIFN0cmluZyBhc2N0aW1lX2RhdGUgPSAiRUVFIE1NTSBkIGhoOm1tOnNzIHl5eXkiOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChyZmMxMTIzX2RhdGUsIExvY2FsZS5VUyk7Ci0gICAgICBpZiAoc2RmLnBhcnNlKHZhbHVlKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQocmZjODUwX2RhdGUsIExvY2FsZS5VUyk7Ci0gICAgICBpZiAoc2RmLnBhcnNlKHZhbHVlKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoYXNjdGltZV9kYXRlLCBMb2NhbGUuVVMpOwotICAgICAgaWYgKHNkZi5wYXJzZSh2YWx1ZSkgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNVUkkuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNVUkkoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbmV3IFVSTCh2YWx1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdCIgKyB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUyKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzTGFuZ3VhZ2VUYWcuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMYW5ndWFnZVRhZyhTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpbnQgaWR4ID0gdmFsdWUuaW5kZXhPZigiLSIpOwotICAgIGlmIChpZHggPT0gLTEpCi0gICAgewotICAgICAgcmV0dXJuIGlzOEFMUEhBKHZhbHVlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmICghaXM4QUxQSEEodmFsdWUuc3Vic3RyaW5nKDAsIGlkeCkpCi0gICAgICAgIHx8ICFpczhBTFBIQSh2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpczhBTFBIQS4KLSAgICogQHBhcmFtIHN0cmluZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXM4QUxQSEEoU3RyaW5nIHN0cmluZykKLSAgewotICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPiA4IHx8ICFpc0FMUEhBKHN0cmluZykpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzQUxQSEEuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQUxQSEEoU3RyaW5nIHN0cmluZykKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgaWYgKCFCYXNpY1J1bGVzLmlzQ0hBUihzdHJpbmcuY2hhckF0KGkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0RpZGdpdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0RpZGdpdChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjaGFyW10gY2hzID0gdmFsdWUudG9DaGFyQXJyYXkoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNocy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoY2hzW2ldIDwgJzAnIHx8IGNoc1tpXSA+ICc5JykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc01lZGlhVHlwZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc01lZGlhVHlwZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiOyIpOwotICAgIFN0cmluZyBtZWRpYVR5cGUgPSBzdC5uZXh0VG9rZW4oKTsKLQotICAgIGludCBpZHggPSBtZWRpYVR5cGUuaW5kZXhPZigiLyIpOwotICAgIGlmICghaXNUb2tlbihtZWRpYVR5cGUuc3Vic3RyaW5nKDAsIGlkeCkpCi0gICAgICB8fCAhaXNUb2tlbihtZWRpYVR5cGUuc3Vic3RyaW5nKGlkeCArIDEpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXIoc3QubmV4dFRva2VuKCI7IikudHJpbSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRdW90ZWRTdHJpbmcuCi0gICAqIEBwYXJhbSBwYXJWYWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNRdW90ZWRTdHJpbmcoU3RyaW5nIHBhclZhbHVlKQotICB7Ci0gICAgaWYgKEJhc2ljUnVsZXMuZ2V0TGFzdFF1b3RlZFN0cmluZyhwYXJWYWx1ZSwgMCkgIT0gcGFyVmFsdWUubGVuZ3RoKCkpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNUb2tlbi4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1Rva2VuKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHJldHVybiBCYXNpY1J1bGVzLmlzVG9rZW4odmFsdWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0phdmFFbmNvZGluZy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9KYXZhRW5jb2RpbmcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI5MzUzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0phdmFFbmNvZGluZy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgIElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICogPC9jb3B5cmlnaHQ+Ci0jICAqLwotIyMgSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUIAotIyMgUHJvcGVydHkgZmlsZSB1c2VkIHRvIGdldCBKYXZhVk0gc3VwcG9ydGVkIGNoYXJhY3RlciBlbmNvZGluZy4KLQotSVNPODg1OV8xPUlTTzg4NTlfMSAKLUlTTzg4NTktMT1JU084ODU5XzEgCi11dGY4PVVURjggCi11dGYtOD1VVEY4IAotVVRGLTg9VVRGOCAKLXV0ZjE2PVVURi0xNiAKLXV0Zi0xNj1VVEYtMTYgCi1VVEYxNj1VVEYtMTYgCi0KLSMjIAotU2hpZnRfSklTPVdpbmRvd3MtMzFKCi0KLU1TOTMyPVdpbmRvd3MtMzFKCi0jU0pJUz1TaGlmdF9KSVMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01JTUVDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTRiNGI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRUNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLS8qKgotICogQSBzZXQgb2YgSFRUUCB2YWx1ZXMgdGhhdCBhcmUgZGVmaW5lZCBieSBOZXR3b3JrIFdvcmtpbmcgR3JvdXAuCi0gKiBodHRwOi8vd3d3LmlldGYub3JnLwotICoKLSAqIEB2ZXJzaW9uIDEuMAotICogQGF1dGhvciBJbHlhIEthbm9uaXJvdiAoa2lvQGlzZy5heG1vci5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FQ29uc3RhbnRzIHsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfSUQgPSAiQ29udGVudC1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HID0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NSU1FVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Y2QzMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NSU1FVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotCi0vKioKLSAqIFNldCBvZiBIVFRQTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLQotcHVibGljIGZpbmFsIGNsYXNzIE1JTUVVdGlscwotewotCi0gIC8qKgotICAgKiBVdGlsaXR5IHRvIHByZXNlbnQgTUlNRSBoZWFkZXIgaW5mb3JtYXRpb24gYXMgYXR0cmlidXRlLXZhbHVlIHBhaXJzLCAKLSAgICogYmFzZWQgb24gJzonIGFzIGF0dHJpYnV0ZS12YWx1ZSBzZXBhcmF0b3IuCi0gICAqIEBwYXJhbSBtaW1lSGVhZGVyU3RyaW5nIGFuIE1JTUUgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIHNlcGFyYXRvcnMgYXR0cmlidXRlLXZhbHVlIHNlcGFyYXRvciBsaXN0LgotICAgKiBAcmV0dXJuIE1JTUUgaGVhZGVyIGluZm9ybWF0aW9uIGFzIGF0dHJpYnV0ZS12YWx1ZSBwYWlycy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBNSU1FIGhlYWRlciBpbmZvcm1hdGlvbiAKLSAgICogICAgICAgICBhcyBhdHRyaWJ1dGUtdmFsdWUgcGFpcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1hcCBnZXRNaW1lSGVhZGVyVG9rZW5zKFN0cmluZyBtaW1lSGVhZGVyU3RyaW5nLCBTdHJpbmcgc2VwYXJhdG9ycykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihtaW1lSGVhZGVyU3RyaW5nLCAiXG5cclxmIik7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIGxpbmUgPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICBpbnQgaW5kZXggPSBsaW5lLmluZGV4T2Yoc2VwYXJhdG9ycyk7Ci0gICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgbGluZS5sZW5ndGgoKSAtIDEpCi0gICAgICB7Ci0gICAgICAgIG1hcC5wdXQobGluZS5zdWJzdHJpbmcoMCwgaW5kZXgpLnRvVXBwZXJDYXNlKCksIGxpbmUuc3Vic3RyaW5nKGluZGV4ICsgMSkudHJpbSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFV0aWxpdHkgdG8gdGFrZSBzdWIgYXR0cmlidXRlIHZhbHVlIGZyb20gTUlNRSBoZWFkZXIKLSAgICogQHBhcmFtIG1pbWVIZWFkZXJTdHJpbmcgYW4gTUlNRSBoZWFkZXIgc3RyaW5nLgotICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUgbmFtZS4KLSAgICogQHBhcmFtIHN1YkF0dHJpYnV0ZU5hbWUgc3ViIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcmV0dXJuIHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBNSU1FIGhlYWRlci4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGdldCBzdWIgYXR0cmlidXRlIHZhbHVlIGZyb20gTUlNRSBoZWFkZXIuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWltZUhlYWRlclN1YkF0dHJpYnV0ZShTdHJpbmcgbWltZUhlYWRlclN0cmluZywgCi0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSwgU3RyaW5nIHN1YkF0dHJpYnV0ZU5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gZ2V0IGF0dHJpYnV0ZSB2YWx1ZQotICAgIFN0cmluZyB2YWx1ZSA9IAotICAgICAgKFN0cmluZykgZ2V0TWltZUhlYWRlclRva2VucyhtaW1lSGVhZGVyU3RyaW5nLCI6IikuZ2V0KGF0dHJpYnV0ZU5hbWUudG9VcHBlckNhc2UoKSk7Ci0gICAgaWYodmFsdWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBzZWFyY2ggc3ViIGF0dHJpYnV0ZSB0b2tlbgotICAgICAgaW50IGlkeFEgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc3ViQXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKyI9XCIiKTsKLSAgICAgIGludCBpZHggPSB2YWx1ZS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc3ViQXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKyI9Iik7Ci0gICAgICAvLyBpZiBhdHRyaWJ1dGUgaXMgcXVvdGVkCi0gICAgICBpZiAoaWR4USAhPSAtMSkgCi0gICAgICB7Ci0gICAgICAgIGlkeFEgKz0gKHN1YkF0dHJpYnV0ZU5hbWUrIj1cIiIpLmxlbmd0aCgpOwotICAgICAgICBpbnQgZUlkeFEgPSB2YWx1ZS5pbmRleE9mKCJcIiIsIGlkeFEpOwotICAgICAgICBpZiAoZUlkeFEgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeFEsIGVJZHhRKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBpcyBub3QgcXVvdGVkCi0gICAgICBlbHNlIGlmIChpZHggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlkeCArPSAoc3ViQXR0cmlidXRlTmFtZSsiPSIpLmxlbmd0aCgpOwotICAgICAgICBpbnQgZUlkeCA9IC0xOwotICAgICAgICAvLyBmaW5kIGVuZCBzcGFjZSBzZXBhcmF0b3IKLSAgICAgICAgaWYgKChlSWR4ID0gdmFsdWUuaW5kZXhPZigiICIsIGlkeCkpICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhpZHgsIGVJZHgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGZpbmQgY29tYSBzZXBhcmF0b3IKLSAgICAgICAgZWxzZSBpZiAoKGVJZHggPSB2YWx1ZS5pbmRleE9mKCI7IiwgaWR4KSkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCwgZUlkeCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gdGhpcyBpcyBsYXN0IGF0dHJpYnV0ZQotICAgICAgICBlbHNlIAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhpZHgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBpZiBhdHRyaWJ1dGUgZG8gbm90IGZvdW5kCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFV0aWxpdHkgdG8gdGFrZSBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBNSU1FIGhlYWRlcgotICAgKiBAcGFyYW0gbWltZUhlYWRlclN0cmluZyBhbiBNSU1FIGhlYWRlciBzdHJpbmcuCi0gICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIE1JTUUgaGVhZGVyLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gZ2V0IGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIE1JTUUgaGVhZGVyLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIG1pbWVIZWFkZXJTdHJpbmcsIAotICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gCi0gICAgICAgIChTdHJpbmcpIGdldE1pbWVIZWFkZXJUb2tlbnMobWltZUhlYWRlclN0cmluZywiOiIpLmdldChhdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkpOwotICAgIC8vIGdldCBmaXJzdCB0b2tlbgotICAgIGlmKChhdHRyaWJ1dGVWYWx1ZSAhPSBudWxsKSAmJiAoYXR0cmlidXRlVmFsdWUuaW5kZXhPZigiOyIpICE9IC0xKSkgewotICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS5zdWJzdHJpbmcoMCwgYXR0cmlidXRlVmFsdWUuaW5kZXhPZigiOyIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01lc3NhZ2VMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01lc3NhZ2VMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMjhjYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NZXNzYWdlTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhbmQgbWFpbnRhaW5zIGEgbWVzc2FnZSBsaXN0LgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxpc3QKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSBtZXNzYWdlUmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgTWVzc2FnZUxpc3QuCi0gICAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZU5hbWUgIGEgcmVzb3VyY2UgYnVuZGxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUxpc3QoU3RyaW5nIHJlc291cmNlQnVuZGxlTmFtZSkKLSAgewotICAgIHRoaXMubWVzc2FnZVJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKHJlc291cmNlQnVuZGxlTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqIEBwYXJhbSBrZXkgICAgICAgICAgICAgICAgIGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICogQHJldHVybiBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcga2V5LCBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZShrZXksIG51bGwsIGRlZmF1bHRNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICAgICAgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoCi0gICAgU3RyaW5nIGtleSwKLSAgICBTdHJpbmcgbWVzc2FnZURhdGEsCi0gICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBkZWZhdWx0TWVzc2FnZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBtZXNzYWdlCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZVJlc291cmNlQnVuZGxlLmdldFN0cmluZyhrZXkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBJZ25vcmUgYW5kIGp1c3QgdXNlIGRlZmF1bHQgbWVzc2FnZQotICAgIH0KLQotICAgIGlmIChtZXNzYWdlRGF0YSAhPSBudWxsKQotICAgICAgbWVzc2FnZSArPSAiICIgKyBtZXNzYWdlRGF0YTsKLQotICAgIC8vIFJldHVybiBtZXNzYWdlCi0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogUHJpbnQgYSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSAgICAgIGEgZGVmYXVsdCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHJpbnRNZXNzYWdlKFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHByaW50TWVzc2FnZShrZXksIG51bGwsIGRlZmF1bHRNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgICAgICBhIGtleS4KLSAgICogQHBhcmFtIG1lc3NhZ2VEYXRhICAgICAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICAvLyBQcmludCBtZXNzYWdlCi0gICAgU3lzdGVtLm91dC5wcmludGxuKGdldE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdGF0aWMgZ2V0IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZU5hbWUgIHJlc291cmNlIGJ1bmRsZSBuYW1lLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgICAgICBhIGtleS4KLSAgICogQHBhcmFtIG1lc3NhZ2VEYXRhICAgICAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICogQHJldHVybiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgcmVzb3VyY2VCdW5kbGVOYW1lLAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgUmVzb3VyY2VCdW5kbGUgbWVzc2FnZVJlc291cmNlQnVuZGxlID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCByZXNvdXJjZSBidW5kbGUKLSAgICAgIG1lc3NhZ2VSZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShyZXNvdXJjZUJ1bmRsZU5hbWUpOwotCi0gICAgICAvLyBHZXQgbWVzc2FnZQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VSZXNvdXJjZUJ1bmRsZS5nZXRTdHJpbmcoa2V5KTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWdub3JlIGFuZCBqdXN0IHVzZSBkZWZhdWx0IG1lc3NhZ2UKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZURhdGEgIT0gbnVsbCkKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGE7Ci0KLSAgICBpZiAoIW1lc3NhZ2UuZW5kc1dpdGgoIi4iKSkKLSAgICAgIG1lc3NhZ2UgKz0gIi4iOwotCi0gICAgLy8gUmV0dXJuIG1lc3NhZ2UKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBtZXNzYWdlLgotICAgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGVOYW1lICByZXNvdXJjZSBidW5kbGUgbmFtZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICAgICAgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRNZXNzYWdlKAotICAgIFN0cmluZyByZXNvdXJjZUJ1bmRsZU5hbWUsCi0gICAgU3RyaW5nIGtleSwKLSAgICBTdHJpbmcgbWVzc2FnZURhdGEsCi0gICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgLy8gUHJpbnQgbWVzc2FnZQotICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgIGdldE1lc3NhZ2UocmVzb3VyY2VCdW5kbGVOYW1lLCBrZXksIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTnVsbFV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTnVsbFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg3Y2NhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL051bGxVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGUgdXRpbGl0eSBjbGFzcyB0byBhdXRvbWF0ZSBudWxsIGNoZWNraW5nLgotICogCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBOdWxsVXRpbAotewotICAvKioKLSAgICogVGhlIG1ldGhvZCBjaGVja3Mgb2JqZWN0cyBvbiBleGlzdGVuY2UgYW5kIGNvbXBhcmUgd2l0aCA8Y29kZT5lcXVhbHM8L2NvZGU+IG1ldGhvZC4KLSAgICogQHBhcmFtIG8xIGZpcnN0IG9iamVjdC4KLSAgICogQHBhcmFtIG8yIHNlY29uZCBvYmplY3QuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBmaXJzdCBvYmplY3QgaXMgZXF1YWwgdG8gdGhlIHNlY29uZCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvMSwgT2JqZWN0IG8yKQotICB7Ci0gICAgcmV0dXJuICgobzEgPT0gbnVsbCAmJiBvMiA9PSBudWxsKSB8fCAobzEgIT0gbnVsbCAmJiBvMS5lcXVhbHMobzIpKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBjaGVja3Mgb2JqZWN0IG9uIGV4aXN0ZW5jZSBhbmQgcmV0dXJucyBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHdpdGggPGNvZGU+dG9TdHJpbmcoKTwvY29kZT4gbWV0aG9kLgotICAgKiBAcGFyYW0gbyBzb3VyY2Ugb2JqZWN0LgotICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyhPYmplY3QgbykKLSAgewotICAgIHJldHVybiAobyA9PSBudWxsKSA/IG51bGwgOiBvLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvT3BlcmF0aW9uU2lnbmF0dXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL09wZXJhdGlvblNpZ25hdHVyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzlhM2YyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvT3BlcmF0aW9uU2lnbmF0dXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3ODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyBtZWNoYW5pc20gZm9yIGNyZWF0aW5nIHVuaXF1ZSBzaWduYXR1cmUgb2Ygb3BlcmF0aW9uLgotICogCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBPcGVyYXRpb25TaWduYXR1cmUKLXsKLSAgLy8gdGhlIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lc3NhZ2VzIGlzIHJlcHJlc2VudGVkIGFzIGRvY3VtZW50IHN0eWxlCi0gIC8vIHZpY2UgdmVyc2EgaXMgbm90IGdlbmVyYWxseSB0cnVlCi0gIHByaXZhdGUgYm9vbGVhbiBpc0RvY3VtZW50U3R5bGUgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNGYXVsdCA9IGZhbHNlOwotCi0gIHByb3RlY3RlZCBMaXN0IHNpZ25hdHVyZSA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gIHByaXZhdGUgRWxlbWVudCBmaXJzdEJvZHkgPSBudWxsOwotCi0gIC8qKgotICAgKiBDbGFzcyBvcGVyYXRlcyBhcyBjb250YWluZXIgZm9yIG1hdGNoZWQgb3BlcmF0aW9uLgotICAqIEBhdXRob3IgS3VsaWsKLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgT3BlcmF0aW9uTWF0Y2gKLSAgewotICAgIGZpbmFsIHByaXZhdGUgU3RyaW5nIHN0eWxlOwotICAgIGZpbmFsIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb247Ci0gICAgZmluYWwgcHJpdmF0ZSBMaXN0IHNpZ25hdHVyZTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yLgotICAgICAqIEBwYXJhbSBzdHlsZSBvcGVyYXRpb24gc3R5bGUuCi0gICAgICogQHBhcmFtIHNpZ25hdHVyZSBhIHNpZ25hdHVyZS4KLSAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIGEgYmluZGluZyBvcGVyYXRpb24uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIE9wZXJhdGlvbk1hdGNoKAotICAgICAgU3RyaW5nIHN0eWxlLAotICAgICAgTGlzdCBzaWduYXR1cmUsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgICB7Ci0gICAgICB0aGlzLnN0eWxlID0gc3R5bGU7Ci0gICAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTsKLSAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBHZXRzIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKiBAcmV0dXJuIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE9wZXJhdGlvblN0eWxlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc3R5bGU7Ci0gICAgfQotICAgIC8qKgotICAgICAqIEdldHMgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiBvYmplY3QuCi0gICAgICogQHJldHVybiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb24oKQotICAgIHsKLSAgICAgIHJldHVybiBvcGVyYXRpb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyBvcGVyYXRpb24gc2lnbmF0dXJlIGFzIGxpc3QuCi0gICAgICogQHJldHVybiBvcGVyYXRpb24gc2lnbmF0dXJlIGFzIGxpc3QuCi0gICAgICovCi0gICAgcHVibGljIExpc3QgZ2V0U2lnbmF0dXJlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc2lnbmF0dXJlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgY2xhc3Mgc2VhcmNoZXMgQmluZGluZ09wZXJhdGlvbiBieSB0aGUgZ2l2ZW4gT3BlcmF0aW9uU2lnYm5hdHVyZS4gCi0gICogQGF1dGhvciBLdWxpawotICAgKi8KLSAgcHVibGljIGZpbmFsIGNsYXNzIFZpc2l0b3IgaW1wbGVtZW50cyBXU0RMVmlzaXRvcgotICB7Ci0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBhcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlNlcnZpY2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoU2VydmljZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlR5cGVzLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFR5cGVzIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLklucHV0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KElucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3V0cHV0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KE91dHB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkJpbmRpbmdJbnB1dCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdJbnB1dCBvYmosCi0gICAgICBPYmplY3QgcGFyZW50LAotICAgICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ091dHB1dCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdPdXRwdXQgb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nRmF1bHQsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgICBCaW5kaW5nRmF1bHQgb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoSW1wb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KEltcG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRWxlbWVudCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KE1lc3NhZ2UsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoUG9ydFR5cGUsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRGVmaW5pdGlvbiwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpIAotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChFeHRlbnNpYmlsaXR5RWxlbWVudCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG9iaiwKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykgCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBIZWFkZXIsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoU09BUEhlYWRlckZhdWx0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUEhlYWRlckZhdWx0IG9iaiwKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykgCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBGYXVsdCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIHJlcXVpcmVkU3R5bGUgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nIHNvYXBBY3Rpb24gPSBudWxsOwotICAgIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBudWxsOwotICAgIHByaXZhdGUgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGlzU09BUEFjdGlvblJlcXVpcmVkID0gZmFsc2U7Ci0KLSAgICAvKioKLSAgICAqIENvbnN0cnVjdG9yLgotICAgICovCi0gICAgcHVibGljIFZpc2l0b3IoKQotICAgIHsKLSAgICAgIHN1cGVyKCk7Ci0gICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3Rvci4KLSAgICAgKiBAcGFyYW0gcmVxdWlyZWRTdHlsZSByZXF1aXJlZCBzdHlsZS4KLSAgICAgKiBAcGFyYW0gcmVnaXN0cnkgdHlwZXMgcmVnaXN0cnkuCi0gICAgICovCi0gICAgcHVibGljIFZpc2l0b3IoU3RyaW5nIHJlcXVpcmVkU3R5bGUsIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkpCi0gICAgewotICAgICAgdGhpcy5yZXF1aXJlZFN0eWxlID0gcmVxdWlyZWRTdHlsZTsKLSAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0aG9kIHJldHVybnMgbWF0Y2hlZCBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICAgKiBAcmV0dXJuIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRNYXRjaGVkT3BlcmF0aW9uKCkKLSAgICB7Ci0gICAgICByZXR1cm4gb3BlcmF0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRob2Qgc2V0cyB1cCByZXF1aXJlZCBvcGVyYXRpb24gdG8gYmUgZm91bmQuCi0gICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBpcyBycGMgYW5kIGRvY3VtZW50LgotICAgICAqIEBwYXJhbSByZXF1aXJlZFN0eWxlIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZFN0eWxlKFN0cmluZyByZXF1aXJlZFN0eWxlKQotICAgIHsKLSAgICAgIHRoaXMucmVxdWlyZWRTdHlsZSA9IHJlcXVpcmVkU3R5bGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBTT0FQIEFjdGlvbiBiZSBpbmNsdWRlZCBpbnRvIG9wZXJhdGlvbi4KLSAgICAgKiBzaWduYXR1cmUuCi0gICAgICogQHJldHVybiB0cnVlIGlmIFNPQVAgQWN0aW9uIGlzZCByZXF1aXJlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NPQVBBY3Rpb25SZXF1aXJlZCgpCi0gICAgewotICAgICAgcmV0dXJuIGlzU09BUEFjdGlvblJlcXVpcmVkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgU09BUCBhY3Rpb24gdG8gYmUgaW5jbHVkZWQgaW50byBzaWduYXR1cmUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U09BUEFjdGlvblJlcXVpcmVkKCkKLSAgICB7Ci0gICAgICBpc1NPQVBBY3Rpb25SZXF1aXJlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgU3RyaW5nIHN0eWxlID0KLSAgICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICAgIDogYmluZGluZy5nZXRTdHlsZSgpOwotICAgICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgICBPYmplY3QgcGFyZW50LAotICAgICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICAgIHNvYXBBY3Rpb24gPSBudWxsOwotICAgICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgICAgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotICAgICAgaWYgKCFyZXF1aXJlZFN0eWxlLmVxdWFscyhzdHlsZSkpCi0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgZWxzZQotICAgICAgICAvL2lmIChpc1NPQVBBY3Rpb25SZXF1aXJlZCkKLSAgICAgICAgc29hcEFjdGlvbiA9IG9wZXJhdGlvbi5nZXRTb2FwQWN0aW9uVVJJKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgICAvLyBhc3NlcnQgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICBpZiAoYm9wLmdldE9wZXJhdGlvbigpID09IG51bGwKLSAgICAgICAgfHwgYm9wLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkgPT0gbnVsbAotICAgICAgICB8fCBib3AuZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBNZXNzYWdlIG1zZyA9IGJvcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIExpc3QgcGFydHMgPQotICAgICAgICBXU0RMVXRpbC5nZXRQYXJ0cyhib3AuZ2V0T3BlcmF0aW9uKCksIG1zZywgYm9keSwgcmVxdWlyZWRTdHlsZSk7Ci0KLSAgICAgIFFOYW1lIGFkZGl0aW9uYWxOYW1lID0gbnVsbDsKLSAgICAgIC8vIGlmIG9wZXJhdGlvbiBpcyBycGMsIGFkZCB0byBwYXJ0cyBxbmFtZSBxaXRoIGZ1bmN0aW9uIG5hbWUKLSAgICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLmVxdWFscyhyZXF1aXJlZFN0eWxlKSkKLSAgICAgIHsKLSAgICAgICAgLy8gZm91bmQgb3V0IHRhcmdldCBuYW1lc3BhY2UKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGJvZHkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCB8fCBuYW1lc3BhY2UubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAvLyAhISBBVFRFTlRJT04KLSAgICAgICAgICAvLyBuYW1lc3BhY2Ugc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9tIHNlcnZpY2UgdGFyZ2V0IG5hbWVhcGNlICAgICAgICAgICAgCi0gICAgICAgICAgbmFtZXNwYWNlID0gY3R4LmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICAgIC8vIGluc2VydCBvcGVyYXRpb24gbmFtZSBhcyBmaXJzdCBzaWduYXR1cmUgcGFydAotICAgICAgICBhZGRpdGlvbmFsTmFtZSA9Ci0gICAgICAgICAgbmV3IFFOYW1lKG5hbWVzcGFjZSwgY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXROYW1lKCkpOwotICAgICAgfQotCi0gICAgICBPcGVyYXRpb25TaWduYXR1cmUgb3AgPQotICAgICAgICBuZXcgT3BlcmF0aW9uU2lnbmF0dXJlKHBhcnRzLCBudWxsLCByZWdpc3RyeSwgZmFsc2UpOwotCi0gICAgICBpZiAoYWRkaXRpb25hbE5hbWUgIT0gbnVsbCkKLSAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIGFkZGl0aW9uYWxOYW1lKTsKLSAgICAgIC8vaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkKQotICAgICAgLy9pZiAoc29hcEFjdGlvbiAhPSBudWxsKQotICAgICAgaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkICYmIHNvYXBBY3Rpb24gIT0gbnVsbCkKLSAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotICAgICAgaWYgKG9wLmdldFNpZ25hdHVyZSgpLmVxdWFscyhzaWduYXR1cmUpKQotICAgICAgewotICAgICAgICAvLyByZXF1aXJlZCBvcGVyYXRpb24gaXMgZm91bmQKLSAgICAgICAgb3BlcmF0aW9uID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShwYXJ0cywgbnVsbCwgcmVnaXN0cnksIHRydWUpOwotICAgICAgICBpZiAoYWRkaXRpb25hbE5hbWUgIT0gbnVsbCkKLSAgICAgICAgICBvcC5nZXRTaWduYXR1cmUoKS5hZGQoMCwgYWRkaXRpb25hbE5hbWUpOwotCi0gICAgICAgIC8vaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkKQotICAgICAgICAvL2lmIChzb2FwQWN0aW9uICE9IG51bGwpCi0gICAgICAgIGlmIChpc1NPQVBBY3Rpb25SZXF1aXJlZCAmJiBzb2FwQWN0aW9uICE9IG51bGwpCi0gICAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotCi0gICAgICAgIGlmIChvcC5nZXRTaWduYXR1cmUoKS5lcXVhbHMoc2lnbmF0dXJlKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHJlcXVpcmVkIG9wZXJhdGlvbiBpcyBmb3VuZAotICAgICAgICAgIG9wZXJhdGlvbiA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdQcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgT3BlcmF0aW9uU2lnbmF0dXJlIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBkb2MgYSBEb2N1bWVudCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uU2lnbmF0dXJlKERvY3VtZW50IGRvYykKLSAgewotICAgIEVsZW1lbnQgYm9keSA9Ci0gICAgICBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KAotICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgIFdTSVRhZy5FTEVNX1NPQVBfQk9EWSk7Ci0gICAgcHJvY2Vzc1BhcnRzKGJvZHksIGZhbHNlKTsKLSAgICBpc0RvY3VtZW50U3R5bGUgfD0gKHNpZ25hdHVyZS5zaXplKCkgPiAxKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgY29uc3RydWN0b3IgY3JlYXRlcyBPcGVyYXRpb25TSWduYXR1cmUgZm9yIAotICAgKiBsaXN0IG9mIDxjb2RlPlBhcnQ8L2NvZGU+IG9iamVjdHMgYW5kIGdpdmVuIFdTREwgZG9jdW1lbnQgd2l0aGluIHRoZXNlCi0gICAqIHBhcnRzIGFyZSBkZWZpbmVkLgotICAgKiAKLSAgICogQHBhcmFtIHBhcnRzIGEgbGlzdCBvZiBQYXJ0IG9iamVjdHMuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgYSBXU0RMIGRvY3VtZW50LgotICAgKiBAcGFyYW0gcmVnaXN0cnkgYSB0eXBlcyByZWdpc3RyeS4KLSAgICogQHBhcmFtIHBhcnRpYWwgYSBwYXJ0aWFsIHN0YXR1cy4KLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgTGlzdCBwYXJ0cywKLSAgICBEb2N1bWVudCB3c2RsRG9jdW1lbnQsCi0gICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSwKLSAgICBib29sZWFuIHBhcnRpYWwpCi0gIHsKLSAgICBpZiAocGFydHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSAocGFydGlhbCkgPyBwYXJ0LmdldE5hbWUoKSA6IG51bGw7Ci0gICAgICAgIFFOYW1lIHR5cGVOYW1lID0gcGFydC5nZXRUeXBlTmFtZSgpOwotICAgICAgICBRTmFtZSBlbGVtZW50TmFtZSA9IHBhcnQuZ2V0RWxlbWVudE5hbWUoKTsKLQotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gIiI7Ci0KLSAgICAgICAgLy8gSWYgdHlwZSBuYW1lIGlzIG5vdCBudWxsLCB0aGVuIGEgdHlwZSBlbGVtZW50IHdhcyB1c2VkIHNvIGl0IHNob3VsZCBiZSBhbiBSUEMgc3R5bGUgc2lnbmF0dXJlIAotICAgICAgICBpZiAodHlwZU5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIFBhcnQgd3JhcHBlcnMgZG8gbm90IGhhdmUgbmFtZXNwYWNlcyAKLSAgICAgICAgICBuYW1lc3BhY2UgPSAiIjsKLQotICAgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIGxvY2FsTmFtZSA9IHR5cGVOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgZWxlbWVudCBuYW1lIGlzIG5vdCBudWxsLCB0aGVuIGl0IHNob3VsZCBiZSBhIGRvY3VtZW50IHN0eWxlIHNpZ25hdHVyZQotICAgICAgICBlbHNlIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZXNwYWNlID0gZWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgICAgICBpZiAobG9jYWxOYW1lID09IG51bGwpCi0gICAgICAgICAgICBsb2NhbE5hbWUgPSBlbGVtZW50TmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNpZ25hdHVyZS5hZGQobmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaXNDcmVhdGVkID0gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJlY3JlYXRlcyBPcGVyYXRpb25TaWduYXR1cmUgd2l0aCBhc3N1bXB0aW9uIHRoYXQgb3BlcmF0aW9uIGlzCi0gICAqIFJQQy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVJQQ1NpZ25hdHVyZSgpCi0gIHsKLSAgICBpc0NyZWF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoZmlyc3RCb2R5ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgcHJvY2Vzc1BhcnRzKGZpcnN0Qm9keSwgdHJ1ZSk7Ci0gICAgaXNEb2N1bWVudFN0eWxlID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIHByb2Nlc3NlcyBXU0RMIHBhcnRzIGFuZCBjcmVhdGVzIG9wZXJhdGlvbiBzaWduYXR1cmUuCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzUGFydHMoTm9kZSBwYXJlbnQsIGJvb2xlYW4gcHJvY2Vzc1dyYXBwZXIpCi0gIHsKLSAgICBpZiAocGFyZW50ICE9IG51bGwpCi0gICAgewotICAgICAgTm9kZSBuID0gcGFyZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotICAgICAgLy8gdmFyaWFibGUgaW5kaWNhdGVzIHRoYXQgZmlyc3QgdGFnIGlzIHByb2Nlc3NlZAotICAgICAgYm9vbGVhbiBpc0ZpcnN0ID0gdHJ1ZTsKLSAgICAgIC8vIGl0ZXJhdGUgYWxsIGJvZGllcwotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChpc0ZpcnN0ICYmIGZpcnN0Qm9keSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIGZpcnN0Qm9keSA9IChFbGVtZW50KSBuOwotICAgICAgICAgICAgLy8gY2hlY2sgc29hcGVudjpmYXVsdAotICAgICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBXU0lUYWcuRUxFTV9TT0FQX0ZBVUxUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaXNGYXVsdCA9IHRydWU7Ci0gICAgICAgICAgICAgIGlzQ3JlYXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IG4uZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IG4uZ2V0TG9jYWxOYW1lKCk7Ci0KLSAgICAgICAgICAvKkkgaGF2ZSBubyBpZGVhIHdoeSB0aGlzIGNvZGUgaXMgaW4gaGVyZSBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSBhdCBhbGwsIHNvIEkgYW0gY29tbWVudGluZyBpdCBvdXQKLSAgICAgICAgICAvLyB0cnkgdG8gZ2V0IHhzaTp0YWcKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBXU0lUYWcuQVRUUl9YU0lfVFlQRSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgUlBDIHN0eWxlIGRvZXMgbm90IHVzZSB4c2k6dHlwZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgaXNEb2N1bWVudFN0eWxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgQXR0ciB4c2lUeXBlID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBXU0lUYWcuQVRUUl9YU0lfVFlQRSk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBTdHJpbmcgeHNpVmFsdWUgPSB4c2lUeXBlLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgICAgICBpbnQgaSA9IHhzaVZhbHVlLmluZGV4T2YoJzonKTsKLSAgICAgICAgICAgICAgaWYgKGkgIT0gLTEpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IFhNTFV0aWxzLmZpbmROYW1lc3BhY2VVUkkobiwgeHNpVmFsdWUuc3Vic3RyaW5nKDAsIGkpKTsKLSAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSA9IHhzaVZhbHVlLnN1YnN0cmluZyhpKzEpOwotICAgICAgICAgICAgICB9IAotICAgICAgICAgIH0KLSAgICAgICAgICAqLwotCi0gICAgICAgICAgLy8gSWYgdGhpcyBpcyBycGMtbGl0ZXJhbCBhbmQgcHJvY2Vzc2luZyBhIHBhcnQgKG5vdCB0aGUgd3JhcHBlciksIHRoZW4gdGhlIHBhcnQgc2hvdWxkIG5vdCBoYXZlIGEgbmFtZXNwYWNlCi0gICAgICAgICAgLy8gQW5kIGlmIGl0IGRvZXMsIHRoZW4gb25lIG9mIHRoZSB0ZXN0IGFzc2VydGlvbnMgd2lsbCBkZXRlY3QgaXQKLSAgICAgICAgICBpZiAoIWlzRG9jdW1lbnRTdHlsZSAmJiBwcm9jZXNzV3JhcHBlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzRG9jdW1lbnRTdHlsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9FbGVtZW50IGZpcnN0Q2hpbGQgID0gbnVsbDsKLSAgICAgICAgICAgICAgTm9kZSBpdCA9IG4uZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICB3aGlsZSAoaXQgIT0gbnVsbCAmJiAhKGl0IGluc3RhbmNlb2YgRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgaXQgPSBpdC5nZXROZXh0U2libGluZygpOwotICAgICAgICAgICAgICBpZiAoaXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBpdC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBub3JtYWxpemUgbmFtZXNwYWNlcy4gQWxsIGVtcHR5IG5hbWVzcGFjZXMgLT4gbnVsbCAKLSAgICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwgJiYgbmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICBuYW1lc3BhY2UgPSBudWxsOwotCi0gICAgICAgICAgLy8gcHV0IHBhcnQgaW50byBzaWduYXR1cmUKLSAgICAgICAgICBzaWduYXR1cmUuYWRkKG5ldyBRTmFtZShuYW1lc3BhY2UsIGxvY2FsTmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlzQ3JlYXRlZCA9IGZhbHNlOyAvLyBub3QgZm91bmQgPwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlzQ3JlYXRlZCA9IHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgb3BlcmF0aW9uIGhhcyBkb2N1bWVudCBzdHlsZSBvciBSUEMuIAotICAgKiBAcmV0dXJuIHRydWUgaWYgb3BlcmF0aW9uIGhhcyBkb2N1bWVudCBzdHlsZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRTdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gaXNEb2N1bWVudFN0eWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIFdTREwgZmF1bHQgcGFydHMgc2hvdWxkIGJlIGluY2x1ZGVkIGludG8gc2lnbmF0dXJlIG9yCi0gICAqIG5vdC4KLSAgICogQHJldHVybiB0cnVlIGlmIFdTREwgZmF1bHQgcGFydHMgc2hvdWxkIGJlIGluY2x1ZGVkIGludG8gc2lnbmF0dXJlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gaXNGYXVsdDsKLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgdGhhdCBvcGVyYXRpb24gc2lnbmF0dXJlIHdhcyBjcmVhdGVkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgb3BlcmF0aW9uIHNpZ25hdHVyZSB3YXMgY3JlYXRlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ3JlYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gaXNDcmVhdGVkOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgb3BlcmF0aW9uIHNpZ25hdHVyZSBjcmVhdGVkIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gb3BlcmF0aW9uIHNpZ25hdHVyZSBjcmVhdGVkIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTaWduYXR1cmUoKQotICB7Ci0gICAgcmV0dXJuIHNpZ25hdHVyZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjaGFzaENvZGUoKQotICAgKi8KLSAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gIHsKLSAgICByZXR1cm4gc2lnbmF0dXJlLmhhc2hDb2RlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhPYmplY3QpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyBpbnN0YW5jZW9mIE9wZXJhdGlvblNpZ25hdHVyZSkKLSAgICAgIHJldHVybiBzaWduYXR1cmUuZXF1YWxzKCgoT3BlcmF0aW9uU2lnbmF0dXJlKSBvKS5nZXRTaWduYXR1cmUoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgbWF0Y2hlcyBvcGVyYXRpb24gYmFzZWQgb24gdGhlIGdpdmVuIFNPQVAgbWVzc2FnZSByZXF1ZXN0LAotICAgKiBXU0RMIGJpbmRpbmcsIGFuZCBzb2FwQWN0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGlucHV0TWVzc2FnZSBhbiBTT0FQIG1lc3NhZ2UgcmVxdWVzdC4KLSAgICogQHBhcmFtIHNvYXBBY3Rpb24gYSBzb2FwIGFjdGlvbi4KLSAgICogQHBhcmFtIGJpbmRpbmcgYSBXU0RMIGJpbmRpbmcuCi0gICAqIEBwYXJhbSByZWdpc3RyeSBhIHR5cGVzIHJlZ2lzdHJ5LgotICAgKiBAcmV0dXJuIE9wZXJhdGlvbk1hdGNoIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgT3BlcmF0aW9uTWF0Y2ggbWF0Y2hPcGVyYXRpb24oCi0gICAgRG9jdW1lbnQgaW5wdXRNZXNzYWdlLAotICAgIFN0cmluZyBzb2FwQWN0aW9uLAotICAgIEJpbmRpbmcgYmluZGluZywKLSAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5KQotICB7Ci0gICAgcmV0dXJuIG1hdGNoT3BlcmF0aW9uKGlucHV0TWVzc2FnZSwgc29hcEFjdGlvbiwgYmluZGluZywgcmVnaXN0cnksIHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICAgICogVGhlIG1ldGhvZCBtYXRjaGVzIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gU09BUCBtZXNzYWdlIHJlcXVlc3QsCi0gICAgICogV1NETCBiaW5kaW5nLCBhbmQgc29hcEFjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gaW5wdXRNZXNzYWdlIFNPQVAgbWVzc2FnZSByZXF1ZXN0LgotICAgICAqIEBwYXJhbSBzb2FwQWN0aW9uIGEgc29hcCBhY3Rpb24uCi0gICAgICogQHBhcmFtIGJpbmRpbmcgYSBXU0RMIGJpbmRpbmcuCi0gICAgICogQHBhcmFtIHJlZ2lzdHJ5IGEgdHlwZXMgcmVnaXN0cnkuCi0gICAgICogQHBhcmFtIHNvYXBBY3Rpb25SZXF1aXJlZCBtdXN0IHByb2Nlc3MgdGhlIHNvYXBBY3Rpb24gdmFsdWUgZXZlbiBpZiBpdCBpcyBudWxsIAotICAgICAqIEByZXR1cm4gT3BlcmF0aW9uTWF0Y2ggb2JqZWN0LgotICAgICAqLwotICBwdWJsaWMgc3RhdGljIE9wZXJhdGlvbk1hdGNoIG1hdGNoT3BlcmF0aW9uKAotICAgIERvY3VtZW50IGlucHV0TWVzc2FnZSwKLSAgICBTdHJpbmcgc29hcEFjdGlvbiwKLSAgICBCaW5kaW5nIGJpbmRpbmcsCi0gICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSwKLSAgICBib29sZWFuIHNvYXBBY3Rpb25SZXF1aXJlZCkKLSAgewotICAgIC8vIFBhcnNlIHJlcXVlc3QgbWVzc2FnZQotICAgIE9wZXJhdGlvblNpZ25hdHVyZSBzaWduYXR1cmUgPSBuZXcgT3BlcmF0aW9uU2lnbmF0dXJlKGlucHV0TWVzc2FnZSk7Ci0gICAgaWYgKCFzaWduYXR1cmUuaXNDcmVhdGVkKCkpCi0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIC8vIGZpcnN0IG9mIGFsbCBsb29raW5nIGZvciBkb2N1bWVudCBzdHlsZQotICAgIC8vIGJlY2F1c2UgcnBjIHN0eWxlIGlzIHN1YnNldCBvZiBkb2N1bWVudCBzdHlsZSAgCi0gICAgT3BlcmF0aW9uU2lnbmF0dXJlLlZpc2l0b3IgcmVzb2x2ZXIgPQotICAgICAgc2lnbmF0dXJlLm5ldyBWaXNpdG9yKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsIHJlZ2lzdHJ5KTsKLQotICAgIC8vIG5vcm1hbGl6ZSBTT0FQQWN0aW9uCi0gICAgaWYgKHNvYXBBY3Rpb24gIT0gbnVsbAotICAgICAgJiYgc29hcEFjdGlvbi5sZW5ndGgoKSA+IDEKLSAgICAgICYmIHNvYXBBY3Rpb24uY2hhckF0KDApID09ICciJwotICAgICAgJiYgc29hcEFjdGlvbi5jaGFyQXQoc29hcEFjdGlvbi5sZW5ndGgoKSAtIDEpID09ICciJykKLSAgICAgIHNvYXBBY3Rpb24gPSBzb2FwQWN0aW9uLnN1YnN0cmluZygxLCBzb2FwQWN0aW9uLmxlbmd0aCgpIC0gMSk7Ci0KLSAgICAvLyAgICAgIGlmIHNvYXAgYWN0aW9uIFVSSSBwcm9jZXNzaW5nIHJlcXVpcmVkCi0gICAgLy8gaWYgc29hcCBhY3Rpb24gVVJJIHByb2Nlc3NpbmcgcmVxdWlyZWQgCi0gICAgLy8gYW5hbHl6ZSBTT0FQQWN0aW9uIGFmdGVyIHBhcnRzIGJlaW5nIHByb2Nlc3NlZAotICAgIC8vIHB1dCBTT0FQQWN0aW9uIGludG8gc2lnbmF0dXJlCi0gICAgLy9pZiAoc29hcEFjdGlvbiAhPSBudWxsICYmIHNvYXBBY3Rpb24ubGVuZ3RoKCkgPiAwKSB7Ci0gICAgaWYgKHNvYXBBY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzaWduYXR1cmUuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChzb2FwQWN0aW9uUmVxdWlyZWQpCi0gICAgICByZXNvbHZlci5zZXRTT0FQQWN0aW9uUmVxdWlyZWQoKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHJlc29sdmVyKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcihyZXNvbHZlcik7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoYmluZGluZyk7Ci0KLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHJlc29sdmVyLmdldE1hdGNoZWRPcGVyYXRpb24oKTsKLSAgICBpZiAob3BlcmF0aW9uID09IG51bGwgJiYgIXNpZ25hdHVyZS5pc0RvY3VtZW50U3R5bGUoKSkKLSAgICB7Ci0gICAgICByZXNvbHZlci5zZXRSZXF1aXJlZFN0eWxlKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpOwotICAgICAgc2lnbmF0dXJlLmNyZWF0ZVJQQ1NpZ25hdHVyZSgpOwotICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKGJpbmRpbmcpOwotICAgICAgb3BlcmF0aW9uID0gcmVzb2x2ZXIuZ2V0TWF0Y2hlZE9wZXJhdGlvbigpOwotICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IE9wZXJhdGlvbk1hdGNoKAotICAgICAgcmVzb2x2ZXIucmVxdWlyZWRTdHlsZSwKLSAgICAgIHNpZ25hdHVyZS5nZXRTaWduYXR1cmUoKSwKLSAgICAgIHJlc29sdmVyLmdldE1hdGNoZWRPcGVyYXRpb24oKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvUGFpci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9QYWlyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MWExOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9QYWlyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyBwYWlyIG9mIHZhbHVlcy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGFpcgotewotICBmaW5hbCBwcml2YXRlIE9iamVjdCBmaXJzdDsKLSAgZmluYWwgcHJpdmF0ZSBPYmplY3Qgc2Vjb25kOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGZpcnN0IG9iamVjdAotICAgKiBAcGFyYW0gc2Vjb25kIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBQYWlyKE9iamVjdCBmaXJzdCwgT2JqZWN0IHNlY29uZCkKLSAgewotICAgIHRoaXMuZmlyc3QgPSBmaXJzdDsKLSAgICB0aGlzLnNlY29uZCA9IHNlY29uZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGZpcnN0IG9iamVjdC4KLSAgICogQHJldHVybiBPYmplY3QKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0Rmlyc3QoKQotICB7Ci0gICAgcmV0dXJuIGZpcnN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgc2Vjb25kIG9iamVjdC4KLSAgICogQHJldHVybiBPYmplY3QKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0U2Vjb25kKCkKLSAgewotICAgIHJldHVybiBzZWNvbmQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhPYmplY3QpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyA9PSBudWxsIHx8ICEobyBpbnN0YW5jZW9mIFBhaXIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFBhaXIgcCA9IChQYWlyKSBvOwotICAgIHJldHVybiAoCi0gICAgICBOdWxsVXRpbC5lcXVhbHMocC5nZXRGaXJzdCgpLCBmaXJzdCkKLSAgICAgICAgJiYgTnVsbFV0aWwuZXF1YWxzKHAuZ2V0U2Vjb25kKCksIHNlY29uZCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNoYXNoQ29kZSgpCi0gICAqLwotICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKLSAgewotICAgIGludCBjb2RlID0gMDsKLSAgICBpZiAoZmlyc3QgIT0gbnVsbCkKLSAgICAgIGNvZGUgKz0gZmlyc3QuaGFzaENvZGUoKTsKLSAgICBpZiAoc2Vjb25kICE9IG51bGwpCi0gICAgICBjb2RlICs9IHNlY29uZC5oYXNoQ29kZSgpOwotICAgIHJldHVybiBjb2RlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1NldENvb2tpZTJWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU2V0Q29va2llMlZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTgyZTNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU2V0Q29va2llMlZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY2hlY2tzIHRoZSBjb29raWVzIGNvbmZvcm0gdG8gUkZDMjk2NS4KLSAqIAotICogQGF1dGhvciBCYWx0YWsKLSAqLwotcHVibGljIGNsYXNzIFNldENvb2tpZTJWYWxpZGF0b3IKLXsKLQotICBwcml2YXRlIFZlY3RvciBjb21tZW50VmVjdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBWZWN0b3IgY29tbWVudFVSTFZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIGRvbWFpblZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIG1heF9BZ2VWZWN0ID0gbmV3IFZlY3RvcigpOwotICBwcml2YXRlIFZlY3RvciBwYXRoVmVjdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBWZWN0b3IgcG9ydFZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIHZlcnNpb25WZWN0ID0gbmV3IFZlY3RvcigpOwotCi0gIHByaXZhdGUgYm9vbGVhbiBwYXRoID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCByZXNldEZsYWdzLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlc2V0UGF0aCgpCi0gIHsKLSAgICBwYXRoID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdGhlIHN0cmluZyBzYXRpc2Z5IHRoZSAiU2V0LUNvb2tpZTIiIGhlYWRlciB2YWx1ZS4KLSAgICogQHBhcmFtIHN0ciBTdHJpbmcgCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNTZXRDb29raWUyKFN0cmluZyBzdHIpCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICBpbnQgbmV3SW5kZXggPSAwOwotICAgICAgd2hpbGUgKHRydWUpCi0gICAgICB7Ci0gICAgICAgIG5ld0luZGV4ID0gZ2V0TGFzdENvb2tpZShzdHIsIGluZGV4KTsKLSAgICAgICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gc2tpcCBzcGFjZXMKLSAgICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgIC8vIHNraXAgc3BhY2VzCi0gICAgICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0aCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RDb29raWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RDb29raWUoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLQotICAgIHJlc2V0UGF0aCgpOwotCi0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICAvLyBmaW5kIHRva2VuCi0gICAgaW50IG5ld0luZGV4ID0gQmFzaWNSdWxlcy5nZXRMYXN0VG9rZW4oc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCA9IG5ld0luZGV4OwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIGlmIG5vdCAnPScgLSBlcnJvcgotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnPScpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIGluZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgLy8gZ2V0IHZhbHVlCi0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBpbmRleCA9IG5ld0luZGV4OwotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJzsnKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICBpbmRleCsrOwotICAgICAgLy8gc2tpcCBzcGFjZXMKLSAgICAgIGluZGV4ID0gc2tpcFNwYWNlcyhzdHIsIGluZGV4KTsKLQotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RTZXRDb29raWVBdihzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRMYXN0VmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RWYWx1ZShTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotCi0gICAgaW50IGluZGV4ID0gQmFzaWNSdWxlcy5nZXRMYXN0VG9rZW4oc3RyLCBzdGFydEluZGV4KTsKLSAgICBpZiAoaW5kZXggIT0gc3RhcnRJbmRleCkKLSAgICAgIHJldHVybiBpbmRleDsKLSAgICBpbmRleCA9IEJhc2ljUnVsZXMuZ2V0TGFzdFF1b3RlZFN0cmluZyhzdHIsIHN0YXJ0SW5kZXgpOwotICAgIGlmIChpbmRleCAhPSBzdGFydEluZGV4KQotICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RTZXRDb29raWVBdi4KLSAgICogQHBhcmFtIHN0cgotICAgKiBAcGFyYW0gc3RhcnRJbmRleAotICAgKiBAcmV0dXJuIGludAotICAgKi8KLSAgcHJpdmF0ZSBpbnQgZ2V0TGFzdFNldENvb2tpZUF2KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0KLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoIkNvbW1lbnQ9IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJDb21tZW50PSIubGVuZ3RoKCk7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RWYWx1ZShzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIGNvbW1lbnRWZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIkNvbW1lbnRVUkw9IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJDb21tZW50VVJMPSIubGVuZ3RoKCk7Ci0KLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgbmV3SW5kZXggPSBzdHIuaW5kZXhPZignXCInLCBpbmRleCArIDEpOwotICAgICAgaWYgKG5ld0luZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBuZXcgVVJMKHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCBuZXdJbmRleCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdWUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgfQotICAgICAgLy8gZGVidWcgLT4KLSAgICAgIFN0cmluZyBxcXEgPSBnZXRWYWx1ZShzdHIsIGluZGV4ICsgMSwgbmV3SW5kZXgpOwotICAgICAgY29tbWVudFVSTFZlY3QuYWRkKHFxcSk7Ci0gICAgICAvLyBkZWJ1ZyA8LQotICAgICAgbmV3SW5kZXgrKzsKLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIkRpc2NhcmQiLCBpbmRleCkpCi0gICAgewotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXggKyAiRGlzY2FyZCIubGVuZ3RoKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0ci5zdGFydHNXaXRoKCJEb21haW49IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJEb21haW49Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIGRvbWFpblZlY3QuYWRkKHFxcSk7Ci0gICAgICAvLyBkZWJ1ZyA8LQotICAgICAgcmV0dXJuIG5ld0luZGV4OwotICAgIH0KLSAgICBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiTWF4LUFnZT0iLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIk1heC1BZ2U9Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBTdHJpbmcgcXFxID0gZ2V0VmFsdWUoc3RyLCBpbmRleCwgbmV3SW5kZXgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEludGVnZXIucGFyc2VJbnQocXFxKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgewotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIH0KLSAgICAgIC8vIGRlYnVnIC0+Ci0gICAgICBtYXhfQWdlVmVjdC5hZGQocXFxKTsKLSAgICAgIC8vIGRlYnVnIDwtCi0gICAgICByZXR1cm4gbmV3SW5kZXg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0ci5zdGFydHNXaXRoKCJQYXRoPSIsIGluZGV4KSkKLSAgICB7Ci0gICAgICBpbmRleCArPSAiUGF0aD0iLmxlbmd0aCgpOwotCi0gICAgICBuZXdJbmRleCA9IGdldExhc3RWYWx1ZShzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIFN0cmluZyBxcXEgPSBnZXRWYWx1ZShzdHIsIGluZGV4LCBuZXdJbmRleCk7Ci0gICAgICBpZiAocGF0aCA9PSBmYWxzZSkKLSAgICAgICAgcGF0aFZlY3QuYWRkKHFxcSk7Ci0gICAgICBwYXRoID0gdHJ1ZTsKLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIlBvcnQiLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIlBvcnQiLmxlbmd0aCgpOwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc9JykKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBpbmRleCsrOwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICdcIicpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBpbmRleCsrOwotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0UG9ydExpc3Qoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIHBvcnRWZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLQotICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIGluZGV4Kys7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIlNlY3VyZSIsIGluZGV4KSkKLSAgICB7Ci0gICAgICByZXR1cm4gc3RhcnRJbmRleCArICJTZWN1cmUiLmxlbmd0aCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiVmVyc2lvbj0iLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIlZlcnNpb249Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0RElHSVQoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIHZlcnNpb25WZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFBvcnRMaXN0LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0UG9ydExpc3QoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RESUdJVChzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJywnKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICBpbmRleCsrOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdERJR0lULgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0RElHSVQoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGZvciAoOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBpZiAoIUJhc2ljUnVsZXMuaXNESUdJVChzdHIuY2hhckF0KGluZGV4KSkpCi0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGlmIHRoZSBzdHJpbmcgc2F0aXNmeSB0aGUgIkNvb2tpZSIgaGVhZGVyIHZhbHVlLgotICAgKiBAcGFyYW0gc3RyIFN0cmluZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ29va2llKFN0cmluZyBzdHIpCi0gIHsKLSAgICBpbnQgaW5kZXggPSAwOwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RWZXJzaW9uKHN0ciwgaW5kZXgpOwotICAgICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJzsnICYmIHN0ci5jaGFyQXQoaW5kZXgpICE9ICcsJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBpbmRleCsrOwotICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotCi0gICAgICB3aGlsZSAodHJ1ZSkKLSAgICAgIHsKLSAgICAgICAgbmV3SW5kZXggPSBnZXRMYXN0Q29va2llc1ZhbHVlKHN0ciwgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JyAmJiBzdHIuY2hhckF0KGluZGV4KSAhPSAnLCcpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpbmRleCsrOwotICAgICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdGgpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFZlcnNpb24uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RWZXJzaW9uKFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBpbnQgbmV3SW5kZXggPSAwOwotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIiRWZXJzaW9uPSIpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgaW5kZXggKz0gIiRWZXJzaW9uPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RDb29raWVzVmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RDb29raWVzVmFsdWUoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0gICAgaW50IG9sZEluZGV4ID0gMDsKLQotICAgIC8vIGZpbmQgdG9rZW4KLSAgICBuZXdJbmRleCA9IEJhc2ljUnVsZXMuZ2V0TGFzdFRva2VuKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAvLyBpZiBub3QgJz0nIC0gZXJyb3IKLSAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJz0nKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIGdldCB2YWx1ZQotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFZhbHVlKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JykKLSAgICAgIHJldHVybiBpbmRleDsKLQotICAgIC8vIHByb2Nlc3MgWyI7IiBwYXRoXSBbIjsiIGRvbWFpbl0gWyI7IiBwb3J0XSAKLSAgICBvbGRJbmRleCA9IGluZGV4OwotICAgIGluZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIHByb2Nlc3MgcGF0aAotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBhdGgoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ICE9IG5ld0luZGV4KQotICAgIHsKLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnOycpCi0gICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAgb2xkSW5kZXggPSBpbmRleDsKLSAgICAgIGluZGV4Kys7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICB9Ci0KLSAgICAvLyBwcm9jZXNzIGRvbWFpbgotICAgIG5ld0luZGV4ID0gZ2V0TGFzdERvbWFpbihzdHIsIGluZGV4KTsKLSAgICBpZiAoaW5kZXggIT0gbmV3SW5kZXgpCi0gICAgewotICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JykKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBvbGRJbmRleCA9IGluZGV4OwotICAgICAgaW5kZXgrKzsKLSAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIH0KLQotICAgIC8vIHByb2Nlc3MgcG9ydAotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBvcnQoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ICE9IG5ld0luZGV4KQotICAgICAgcmV0dXJuIG5ld0luZGV4OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBvbGRJbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFBhdGguCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RQYXRoKFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBpbnQgbmV3SW5kZXggPSAwOwotCi0gICAgaWYgKCFzdHIuc3RhcnRzV2l0aCgiJFBhdGg9IiwgaW5kZXgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgaW5kZXggKz0gIiRQYXRoPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3REb21haW4uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3REb21haW4oU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICBpZiAoIXN0ci5zdGFydHNXaXRoKCIkRG9tYWluPSIsIGluZGV4KSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGluZGV4ICs9ICIkRG9tYWluPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RQb3J0LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0UG9ydChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleCA9IHN0YXJ0SW5kZXg7Ci0gICAgaW50IG5ld0luZGV4ID0gMDsKLQotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIiRQb3J0IiwgaW5kZXgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCArPSAiJFBvcnQiLmxlbmd0aCgpOwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnPScpCi0gICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBvcnRMaXN0KHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJ1wiJykKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGluZGV4Kys7Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBza2lwU3BhY2VzLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBpbmRleAotICAgKiBAcmV0dXJuIGludAotICAgKi8KLSAgcHJpdmF0ZSBpbnQgc2tpcFNwYWNlcyhTdHJpbmcgc3RyLCBpbnQgaW5kZXgpCi0gIHsKLSAgICBmb3IgKDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgICBpZiAoIUJhc2ljUnVsZXMuaXNTUChzdHIuY2hhckF0KGluZGV4KSkpCi0gICAgICAgIGJyZWFrOwotICAgIHJldHVybiBpbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0VmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIGJlZwotICAgKiBAcGFyYW0gZW5kCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRWYWx1ZShTdHJpbmcgc3RyLCBpbnQgYmVnLCBpbnQgZW5kKQotICB7Ci0gICAgU3RyaW5nIHFxcSA9IG51bGw7Ci0gICAgaWYgKHN0ci5jaGFyQXQoYmVnKSA9PSAnXCInKQotICAgICAgcXFxID0gc3RyLnN1YnN0cmluZyhiZWcgKyAxLCBlbmQgLSAxKTsKLSAgICBlbHNlCi0gICAgICBxcXEgPSBzdHIuc3Vic3RyaW5nKGJlZywgZW5kKTsKLSAgICByZXR1cm4gcXFxOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU3RyaW5nVG9rZW5pemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1N0cmluZ1Rva2VuaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yzk1Mzk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU3RyaW5nVG9rZW5pemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi0vKioKLSAqIFN0cmluZyB0b2tlbml6ZXIuCi0gKiAKLSAqIEBhdXRob3I6IEt1bGlrCi0gKi8KLWZpbmFsIHB1YmxpYyBjbGFzcyBTdHJpbmdUb2tlbml6ZXIKLXsKLSAgcHJpdmF0ZSBjaGFyW10gc3BhY2VEZWw7Ci0gIHByaXZhdGUgY2hhcltdIGRlbDsKLSAgcHJpdmF0ZSBjaGFyW10gYWxsRGVsOwotCi0gIC8qKgotICAgKiBFbnVtZXJhdGlvbiBvZiBzdHJpbmdzLgotICAqIEBhdXRob3IgS3VsaWsKLSAgICovCi0gIHByaXZhdGUgY2xhc3MgU3RyaW5nVG9rZW5pemVyRW51bWVyYXRpb24gaW1wbGVtZW50cyBqYXZhLnV0aWwuRW51bWVyYXRpb24KLSAgewotICAgIHByaXZhdGUgZmluYWwgY2hhcltdIHN0cjsKLSAgICBwcml2YXRlIGZpbmFsIGludCBzaXplOwotICAgIHByaXZhdGUgaW50IGluZGV4OwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IuCi0gICAgICogQHBhcmFtIHMKLSAgICAgKi8KLSAgICBTdHJpbmdUb2tlbml6ZXJFbnVtZXJhdGlvbihjaGFyW10gcykKLSAgICB7Ci0gICAgICBzdHIgPSBzOwotICAgICAgc2l6ZSA9IHN0ci5sZW5ndGg7Ci0gICAgICBpbmRleCA9IDA7Ci0KLSAgICAgIC8vIHNraXAgc3BhY2UgZGVsaW1pdGVycwotICAgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSAmJiBjb250YWluKHN0cltpbmRleF0sIHNwYWNlRGVsKSkKLSAgICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIGphdmEudXRpbC5FbnVtZXJhdGlvbiNoYXNNb3JlRWxlbWVudHMoKQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGhhc01vcmVFbGVtZW50cygpCi0gICAgewotICAgICAgcmV0dXJuIChpbmRleCA8IHNpemUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgamF2YS51dGlsLkVudW1lcmF0aW9uI25leHRFbGVtZW50KCkKLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IG5leHRFbGVtZW50KCkKLSAgICB7Ci0gICAgICBpZiAoaW5kZXggPj0gc2l6ZSkKLSAgICAgICAgdGhyb3cgbmV3IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uKAotICAgICAgICAgICJTdHJpbmdUb2tlbml6ZXIgZW51bWVyYXRpb24iKTsKLQotICAgICAgLy8gc2tpcCBkZWxpbWl0ZXJzCi0gICAgICBpbnQgYmVnU3RyID0gaW5kZXg7Ci0gICAgICBpZiAoaW5kZXggPCBzaXplICYmIGNvbnRhaW4oc3RyW2luZGV4XSwgZGVsKSkKLSAgICAgICAgaW5kZXgrKzsKLQotICAgICAgLy8gc2tpcCB3b3JkCi0gICAgICBpZiAoYmVnU3RyID09IGluZGV4KQotICAgICAgICB3aGlsZSAoaW5kZXggPCBzaXplICYmICFjb250YWluKHN0cltpbmRleF0sIGFsbERlbCkpCi0gICAgICAgICAgaW5kZXgrKzsKLQotICAgICAgaW50IGVuZFN0ciA9IGluZGV4OwotCi0gICAgICAvLyBza2lwIHNwYWNlIGRlbGltaXRlcnMKLSAgICAgIHdoaWxlIChpbmRleCA8IHNpemUgJiYgY29udGFpbihzdHJbaW5kZXhdLCBzcGFjZURlbCkpCi0gICAgICAgIGluZGV4Kys7Ci0KLSAgICAgIHJldHVybiBTdHJpbmcuY29weVZhbHVlT2Yoc3RyLCBiZWdTdHIsIGVuZFN0ciAtIGJlZ1N0cik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICBpbnQgaSA9IGluZGV4OwotICAgICAgU3RyaW5nIHMgPSAoU3RyaW5nKSBuZXh0RWxlbWVudCgpOwotICAgICAgaW5kZXggPSBpOwotICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFN0cmluZ1Rva2VuaXplciBjb25zdHJ1Y3Rvci4KLSAgICAgKiBAcGFyYW0gc3BhY2VEZWxpbWl0ZXJzIHRoZSBzZXQgb2YgZGVsaW1pdGVycyB0byBiZSBpZ25vcmVkCi0gICAgICogQHBhcmFtIGRlbGltaXRlcnMgdGhlIHNldCBvZiBkZWxpbWl0ZXJzIHRvIGJlIHJlbWFpbmVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1Rva2VuaXplcihjaGFyW10gc3BhY2VEZWxpbWl0ZXJzLCBjaGFyW10gZGVsaW1pdGVycykKLSAgewotICAgIHN1cGVyKCk7Ci0KLSAgICBpZiAoc3BhY2VEZWxpbWl0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgc3BhY2VEZWwgPSBuZXcgY2hhcltzcGFjZURlbGltaXRlcnMubGVuZ3RoXTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3BhY2VEZWxpbWl0ZXJzLCAwLCBzcGFjZURlbCwgMCwgc3BhY2VEZWxpbWl0ZXJzLmxlbmd0aCk7Ci0gICAgICBzb3J0KHNwYWNlRGVsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgc3BhY2VEZWwgPSBudWxsOwotCi0gICAgaWYgKGRlbGltaXRlcnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWwgPSBuZXcgY2hhcltkZWxpbWl0ZXJzLmxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGRlbGltaXRlcnMsIDAsIGRlbCwgMCwgZGVsaW1pdGVycy5sZW5ndGgpOwotICAgICAgc29ydChkZWwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBkZWwgPSBudWxsOwotCi0gICAgaWYgKGRlbCAhPSBudWxsICYmIHNwYWNlRGVsICE9IG51bGwpCi0gICAgewotICAgICAgYWxsRGVsID0gbmV3IGNoYXJbZGVsLmxlbmd0aCArIHNwYWNlRGVsLmxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGRlbCwgMCwgYWxsRGVsLCAwLCBkZWwubGVuZ3RoKTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3BhY2VEZWwsIDAsIGFsbERlbCwgZGVsLmxlbmd0aCwgc3BhY2VEZWwubGVuZ3RoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVsICE9IG51bGwpCi0gICAgICBhbGxEZWwgPSBkZWw7Ci0gICAgZWxzZQotICAgICAgYWxsRGVsID0gc3BhY2VEZWw7Ci0KLSAgICBzb3J0KGFsbERlbCk7Ci0gIH0KLSAgLyoqCi0gICAqIFBhcnNlcyBzdHJpbmcuCi0gICAqIEByZXR1cm4gamF2YS51dGlsLkVudW1lcmF0aW9uCi0gICAqIEBwYXJhbSBzIGphdmEubGFuZy5TdHJpbmcKLSAgICovCi0gIHB1YmxpYyBqYXZhLnV0aWwuRW51bWVyYXRpb24gcGFyc2UoU3RyaW5nIHMpCi0gIHsKLSAgICBpZiAocyA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU3RyaW5nVG9rZW5pemVyIDogU3RyaW5nIGNhbm5vdCBiZSBOVUxMIik7Ci0KLSAgICByZXR1cm4gbmV3IFN0cmluZ1Rva2VuaXplckVudW1lcmF0aW9uKHMudG9DaGFyQXJyYXkoKSk7Ci0gIH0KLQotICAvKioKLSAgICogQmluYXJ5IHNlYXJjaC4KLSAgICogQHJldHVybiBib29sZWFuCi0gICAqIEBwYXJhbSBjIGNoYXIKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY29udGFpbihjaGFyIGMsIGNoYXJbXSBhKQotICB7Ci0gICAgaWYgKGEgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBsID0gMCwgciA9IGEubGVuZ3RoIC0gMSwgY2VudGVyOwotICAgIHdoaWxlIChsIDwgcikKLSAgICB7Ci0gICAgICBjZW50ZXIgPSAobCArIHIpIC8gMjsKLSAgICAgIGlmIChjID4gYVtjZW50ZXJdKQotICAgICAgICBsID0gY2VudGVyICsgMTsKLSAgICAgIGVsc2UKLSAgICAgICAgciA9IGNlbnRlcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYVtsXSA9PSBjOwotICB9Ci0gIC8qKgotICAgKiBIZWFwIHNvcnQKLSAgICogQHBhcmFtIGMgY2hhcltdCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSB2b2lkIHNvcnQoY2hhcltdIGMpCi0gIHsKLSAgICBpZiAoYyAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBqLCBrOwotICAgICAgY2hhciBjaTsKLQotICAgICAgLy8gcHVzaCBoZWFwCi0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IGMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGogPSAoKGsgPSBpKSAtIDEpIC8gMjsKLSAgICAgICAgY2kgPSBjW2ldOwotICAgICAgICB3aGlsZSAoayA+IDAgJiYgY1tqXSA8IGNpKQotICAgICAgICB7Ci0gICAgICAgICAgY1trXSA9IGNbal07Ci0gICAgICAgICAgaiA9ICgoayA9IGopIC0gMSkgLyAyOwotICAgICAgICB9Ci0gICAgICAgIGNba10gPSBjaTsKLSAgICAgIH0KLQotICAgICAgLy8gcG9wIGhlYXAKLSAgICAgIGZvciAoaW50IGkgPSBjLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pCi0gICAgICB7Ci0gICAgICAgIGogPSAyOwotICAgICAgICBrID0gMDsKLSAgICAgICAgY2kgPSBjWzBdOwotICAgICAgICB3aGlsZSAoaiA8PSBpKQotICAgICAgICB7Ci0gICAgICAgICAgY1trXSA9IChjW2ogLSAxXSA+IGNbal0pID8gY1stLWpdIDogY1tqXTsKLSAgICAgICAgICBqID0gKChrID0gaikgKyAxKSAqIDI7Ci0gICAgICAgIH0KLSAgICAgICAgY1trXSA9IGNbaV07Ci0gICAgICAgIGNbaV0gPSBjaTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVGVzdFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1Rlc3RVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDdjMWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVGVzdFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRlc3QgVXRpbGl0eSBjbGFzcy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFRlc3RVdGlscwotewotICAvKioKLSAgICogRm9ybWF0IGEgc3R5bGUgc2hlZXQgZGVjbGFyYXRpb24gZnJvbSB0aGUgYWRkU3R5bGVTaGVldCBlbGVtZW50LgotICAgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYW4gYWRkU3R5bGVTaGVldCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmYXVsdEhyZWYgZGVmYXVsdCBocmVmLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0LAotICAgIFN0cmluZyBkZWZhdWx0SHJlZikKLSAgewotICAgIGFkZFN0eWxlU2hlZXQuc2V0SHJlZigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX0hSRUYsIGRlZmF1bHRIcmVmKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRUeXBlKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoCi0gICAgICAgIGVsZW1lbnQsCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1RZUEUsCi0gICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX1hTTF9UWVBFKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRUaXRsZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1RJVExFKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRNZWRpYSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX01FRElBKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRDaGFyc2V0KAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfQ0hBUlNFVCkpOwotICAgIGFkZFN0eWxlU2hlZXQuc2V0QWx0ZXJuYXRlKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFKSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSB0b29sIG5hbWUgYW5kIGNvcHlyaWdodCBub3RpY2UuCi0gICAqIEBwYXJhbSB0b29sSW5mbyBhIFRvb2xJbmZvIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFRvb2xJbmZvKFRvb2xJbmZvIHRvb2xJbmZvKQotICB7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgIkNvbmZvcm1hbmNlICIKLSAgICAgICAgKyB0b29sSW5mby5nZXROYW1lKCkKLSAgICAgICAgKyAiIFRvb2wiCi0gICAgICAgICsgIiwgVmVyc2lvbjogIgotICAgICAgICArIHRvb2xJbmZvLmdldFZlcnNpb24oKQotICAgICAgICArICIsIFJlbGVhc2UgRGF0ZTogIgotICAgICAgICArIHRvb2xJbmZvLmdldFJlbGVhc2VEYXRlKCkpOwotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbihXU0lDb25zdGFudHMuQ09QWVJJR0hUKTsKLSAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIiAiKTsKLSAgfQotCi0gIC8qKiAKLSAgICogR2V0IFhNTCBjb21tZW50IHVzZWQgaW4gbG9nIGFuZCByZXBvcnQgZmlsZS4KLSAgICogQHJldHVybiBYTUwgY29tbWVudCB1c2VkIGluIGxvZyBhbmQgcmVwb3J0IGZpbGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRYTUxDb21tZW50KCkKLSAgewotICAgIFN0cmluZyBjb21tZW50ID0gbnVsbDsKLSAgICBTdHJpbmcgcmVhZExpbmUgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQWRkIHJlcXVpcmVkIGNvbW1lbnRzIChjb3B5cmlnaHQsIGV0Yy4pCi0gICAgICBCdWZmZXJlZFJlYWRlciBidWZmZXJlZFJlYWRlciA9Ci0gICAgICAgIG5ldyBCdWZmZXJlZFJlYWRlcigKLSAgICAgICAgICBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCi0gICAgICAgICAgICBVdGlscy5nZXRJbnB1dFN0cmVhbShXU0lDb25zdGFudHMuQ09NTUVOVFNfRklMRSkpKTsKLQotICAgICAgLy8gSW5pdGlhbGl6ZSBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nCi0gICAgICBjb21tZW50ID0gIiI7Ci0KLSAgICAgIHdoaWxlIChidWZmZXJlZFJlYWRlci5yZWFkeSgpKQotICAgICAgewotICAgICAgICBpZiAoKHJlYWRMaW5lID0gYnVmZmVyZWRSZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkKLSAgICAgICAgICBjb21tZW50ICs9IHJlYWRMaW5lICsgV1NJQ29uc3RhbnRzLkxJTkVfU0VQQVJBVE9SOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBJZ25vcmUgZXhjZXB0aW9uIGFuZCBqdXN0IHJldHVybiBudWxsCi0gICAgfQotCi0gICAgcmV0dXJuIGNvbW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNjaGVtYSBsb2NhdGlvbiBmb3IgWE1MIHNjaGVtYS4KLSAgICogQHJldHVybiBzY2hlbWEgbG9jYXRpb24gZm9yIFhNTCBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRYTUxTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfWE1MX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1hNTF9TQ0hFTUEpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgICogQHJldHVybiBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNPQVBTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfU09BUF9TQ0hFTUEsCi0gICAgICBXU0lQcm9wZXJ0aWVzLkRFRl9TT0FQX1NDSEVNQSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFNjaGVtYUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRTY2hlbWFMb2NhdGlvbigKLSAgICAgIFdTSVByb3BlcnRpZXMuUFJPUF9XU0RMX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1dTRExfU0NIRU1BKTsKLSAgfQotCi0gIC8qKgotICAqIEdldCBXU0RMIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAqIEByZXR1cm4gV1NETCBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFNPQVBTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfV1NETF9TT0FQX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1dTRExfU09BUF9TQ0hFTUEpOwotICB9Ci0gIC8qKgotICAgKiBHZXQgV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgU3RyaW5nIHByb3BlcnR5TmFtZSwKLSAgICBTdHJpbmcgZGVmYXVsdFZhbHVlKQotICB7Ci0gICAgLy9TdHJpbmcgc2NoZW1hTG9jYXRpb24gPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSB3c2kuaG9tZSBzeXN0ZW0gcHJvcGVydHkKLSAgICAvL1N0cmluZyB3c2lIb21lID0gU3lzdGVtLmdldFByb3BlcnR5KFdTSVByb3BlcnRpZXMuUFJPUF9XU0lfSE9NRSk7Ci0gICAgLy9TdHJpbmcgZmlsZUxvY2F0aW9uID0gV1NJUHJvcGVydGllcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgLy8KLSAgICAvLyBJZiB0aGUgZmlsZSBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgaW4gdGhlIHdzaS5wcm9wZXJ0aWVzIGZpbGUgdGhlbiBidWlsZCBsb2NhdGlvbgotICAgIC8vaWYgKGZpbGVMb2NhdGlvbiAhPSBudWxsKQotICAgIC8vewotICAgIC8vIElmIHdzaS5ob21lIGlzIHNldCwgdGhlbiB1c2UgaXQKLSAgICAvLyAgaWYgKHdzaUhvbWUgIT0gbnVsbCkKLSAgICAvLyAgewotICAgIC8vICAgICBzY2hlbWFMb2NhdGlvbiA9IHdzaUhvbWU7Ci0gICAgLy8gICB9Ci0gICAgLy8gICBpZiAoc2NoZW1hTG9jYXRpb24gPT0gbnVsbCkKLSAgICAvLyAgIHsKLSAgICAvLyAgICBzY2hlbWFMb2NhdGlvbiA9IGZpbGVMb2NhdGlvbjsKLSAgICAvLyAgfQotICAgIC8vICBlbHNlCi0gICAgLy8gIHsKLSAgICAvLyAgIGlmICghc2NoZW1hTG9jYXRpb24uZW5kc1dpdGgoIi8iKSkKLSAgICAvLyAgICB7Ci0gICAgLy8gICAgIHNjaGVtYUxvY2F0aW9uICs9ICIvIjsKLSAgICAvLyAgIH0KLSAgICAvLwotICAgIC8vICAgIHNjaGVtYUxvY2F0aW9uICs9IGZpbGVMb2NhdGlvbjsKLSAgICAvLyAgfQotICAgIC8vIH0KLSAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1R5cGVzUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVHlwZXNSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWZkYWI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVHlwZXNSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIFRoZSBjbGFzcyBleHRyYWN0cyBYU0Qgc2NoZW1hIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIFdTREwuCi0gKiAKLSAqIEBhdXRob3IgS3VsaWsKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFR5cGVzUmVnaXN0cnkgaW1wbGVtZW50cyBXU0lUYWcsIFdTRExWaXNpdG9yCi17Ci0gIExpc3Qgc2NoZW1hUHJvY2Vzc2VkTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUGFydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBhcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuU2VydmljZSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNlcnZpY2Ugb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoVHlwZXMsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChUeXBlcyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChPcGVyYXRpb24sIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPcGVyYXRpb24gb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoSW5wdXQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbnB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChPdXRwdXQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPdXRwdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRmF1bHQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChGYXVsdCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nT3BlcmF0aW9uLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgQmluZGluZ09wZXJhdGlvbiBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoQmluZGluZ0lucHV0LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZ0lucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEJpbmRpbmdPdXRwdXQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nT3V0cHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEJpbmRpbmdGYXVsdCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmdGYXVsdCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChFbGVtZW50LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChNZXNzYWdlLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0VHlwZSwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnRUeXBlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KERlZmluaXRpb24sIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEV4dGVuc2liaWxpdHlFbGVtZW50LAotICAgKiBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBCaW5kaW5nLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoU09BUEJvZHksIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQSGVhZGVyLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQSGVhZGVyRmF1bHQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBGYXVsdCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBGYXVsdCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQT3BlcmF0aW9uLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0KLSAgcHJpdmF0ZSBNYXAgZWxlbWVudDJUeXBlID0gbmV3IEhhc2hNYXAoKTsKLSAgcHJpdmF0ZSBTZXQgZXh0ZW5kc0FycmF5ID0gbmV3IEhhc2hTZXQoKTsKLSAgcHJpdmF0ZSBTZXQgdXNlc1dzZGxBcnJheVR5cGUgPSBuZXcgSGFzaFNldCgpOwotCi0gIHByb3RlY3RlZCBCYXNlVmFsaWRhdG9yIGJhc2VWYWxpZGF0b3IgPSBudWxsOwotIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgY3JlYXRlcyB0aGUgdHlwZXMgcmVnaXN0cnkuIGJ5IHRoZSBnaXZlbiBXU0RMIGRlZmluaXRpb24KLSAgICogb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIGRlZiBhIFdTREwgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIGJhc2VWYWxpZGF0b3IgYSBiYXNlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBUeXBlc1JlZ2lzdHJ5KERlZmluaXRpb24gZGVmLCBCYXNlVmFsaWRhdG9yIGJhc2VWYWxpZGF0b3IpCi0gIHsKLSAgICB0aGlzLmJhc2VWYWxpZGF0b3IgPSBiYXNlVmFsaWRhdG9yOwotICAgIGlmIChkZWYgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkRlZmluaXRpb24gY2FuIG5vdCBiZSBudWxsIik7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRJbXBvcnQodHJ1ZSk7Ci0gICAgCi0gICAgcHJvY2Vzc1R5cGVzKGRlZi5nZXRUeXBlcygpLCBkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWYpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGNyZWF0ZXMgdGhlIHR5cGVzIHJlZ2lzdHJ5IGJ5IGdpdmVuIFdTREwgdHlwZXMgb2JqZWN0IGFuZAotICAgKiBsb2NhdGlvbiBjb250ZXh0IFVSSS4KLSAgICogQHBhcmFtIHR5cGVzIFdTREwgdHlwZXMgb2JqZWN0LgotICAgKiBAcGFyYW0gY29udGV4dCBsb2NhdGlvbiBjb250ZXh0IFVSSS4KLSAgICogQHBhcmFtIGJhc2VWYWxpZGF0b3IgYSBiYXNlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBUeXBlc1JlZ2lzdHJ5KAotICAgIFR5cGVzIHR5cGVzLAotICAgIFN0cmluZyBjb250ZXh0LAotICAgIEJhc2VWYWxpZGF0b3IgYmFzZVZhbGlkYXRvcikKLSAgewotICAgIHRoaXMuYmFzZVZhbGlkYXRvciA9IGJhc2VWYWxpZGF0b3I7Ci0gICAgcHJvY2Vzc1R5cGVzKHR5cGVzLCBjb250ZXh0KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJldHVybnMgdHlwZSdzIHFuYW1lIGJ5IGdpdmVuIGVsZW1lbnQncyBxbmFtZS4KLSAgICogQHBhcmFtIGVsZW1lbnROYW1lIGEgcXVhbGlmaWVkIGVsZW1lbnQgbmFtZS4KLSAgICogQHJldHVybiB0eXBlJ3MgcW5hbWUgYnkgZ2l2ZW4gZWxlbWVudCdzIHFuYW1lLgotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFR5cGUoUU5hbWUgZWxlbWVudE5hbWUpCi0gIHsKLSAgICByZXR1cm4gKFFOYW1lKSBlbGVtZW50MlR5cGUuZ2V0KGVsZW1lbnROYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJldHVybnMgc2V0IG9mIHR5cGVzIHdoaWNoIGlzIGFycmF5IGF0dHJpYnV0ZS4KLSAgICogQHJldHVybiBzZXQgb2YgdHlwZXMgd2hpY2ggaXMgYXJyYXkgYXR0cmlidXRlLgotICAgKi8KLSAgcHVibGljIFNldCBnZXRBcnJheVR5cGVzKCkKLSAgewotICAgIFNldCBzID0gbmV3IEhhc2hTZXQoKTsKLSAgICBzLmFkZEFsbCgoQ29sbGVjdGlvbikgdXNlc1dzZGxBcnJheVR5cGUpOwotICAgIHMuYWRkQWxsKChDb2xsZWN0aW9uKSBleHRlbmRzQXJyYXkpOwotICAgIHJldHVybiBzOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgcmV0dXJucyBzZXQgb2YgZWxlbWVudHMgZGVmaW5lZCBpbiB0eXBlcyBlbGVtZW50LgotICAgKiBAcmV0dXJuIHNldCBvZiBlbGVtZW50cyBkZWZpbmVkIGluIHR5cGVzIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgU2V0IGdldEVsZW1lbnRMaXN0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmVsZW1lbnQyVHlwZS5rZXlTZXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBkZWNsYXJlcyB3c2RsOmFycmF5VHlwZQotICAgKiBhdHRyaWJ1dGUgd2l0aGluIGRlY2xhcmF0aW9uLgotICAgKiBAcGFyYW0gdHlwZSBhIHR5cGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBkZWNsYXJlcyB3c2RsOmFycmF5VHlwZQotICAgKiBhdHRyaWJ1dGUgd2l0aGluIGRlY2xhcmF0aW9uLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVc2VzV1NETEFycmF5VHlwZShRTmFtZSB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHVzZXNXc2RsQXJyYXlUeXBlLmNvbnRhaW5zKHR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgcmV0dXJucyB0cnVlIGlmIGdpdmVuIHR5cGUgZXh0ZW5kcyBzb2FwZW5jOkFycmF5IHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlIGEgdHlwZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGdpdmVuIHR5cGUgZXh0ZW5kcyBzb2FwZW5jOkFycmF5IHR5cGUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0V4dGVuZHNBcnJheShRTmFtZSB0eXBlKQotICB7Ci0gICAgcmV0dXJuIGV4dGVuZHNBcnJheS5jb250YWlucyh0eXBlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuSW1wb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IGltLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoaW0uZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICBwcm9jZXNzV1NETChpbS5nZXREZWZpbml0aW9uKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBwcm9jZXNzZXMgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcGFyYW0gZGVmIGEgV1NETCBkZWZpbml0aW9uLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NXU0RMKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgaWYgKGRlZi5nZXRUeXBlcygpICE9IG51bGwpCi0gICAgICBwcm9jZXNzVHlwZXMoZGVmLmdldFR5cGVzKCksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIHByb2Nlc3NlcyBXU0RMIHR5cGVzLgotICAgKiBAcGFyYW0gdHlwZXMgV1NETCB0eXBlcy4KLSAgICogQHBhcmFtIGNvbnRleHQgYSBjb250ZXh0LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NUeXBlcyhUeXBlcyB0eXBlcywgU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICBpZiAodHlwZXMgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBMaXN0IGV4dHMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gZXh0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICAgIHNlYXJjaEZvclNjaGVtYSgKLSAgICAgICAgICAgICgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBlbCkuZ2V0RWxlbWVudCgpLAotICAgICAgICAgICAgY29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBzZWFyY2hlcyBYU0Qgc2NoZW1hIGRlY2xhcmF0aW9uIGFuZCBYU0QgaW1wb3J0Ci0gICAqIHN0YXRlbWVudHMuCi0gICAqIEBwYXJhbSBuCi0gICAqIEBwYXJhbSBjb250ZXh0Ci0gICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9yU2NoZW1hKE5vZGUgbiwgU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICB3aGlsZSAobiAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIHNlYXJjaGVzIGZvciB4c2Q6aW1wb3J0IGVsZW1lbnQKLSAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIHhzZDpzY2hlbWEgZWxlbWVudCBpcyBmb3VuZCAtPiBwcm9jZXNzIHNjaGVtYQotICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgcHJvY2Vzc1NjaGVtYShuLCBjb250ZXh0LCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgfQotICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIGxvYWRzIFhTRCBzY2hlbWEgYnkgdXNpbmcgc2NoZW1hIGxvY2F0aW9uIGFuZAotICAgKiBsb2NhdGlvbiBjb250ZXh0LgotICAgKiBAcGFyYW0gaW1wb3J0Tm9kZQotICAgKiBAcGFyYW0gY29udGV4dAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGxvYWRTY2hlbWEoTm9kZSBpbXBvcnROb2RlLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0gICAgRWxlbWVudCBpbSA9IChFbGVtZW50KSBpbXBvcnROb2RlOwotICAgIEF0dHIgc2NoZW1hTG9jYXRpb24gPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX1NDSEVNQUxPQ0FUSU9OKTsKLQkKLSAgICAvLyB0cnkgdG8gcGFyc2UgaW1wb3J0ZWQgWFNECi0gICAgaWYgKHNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSAhPSBudWxsKQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgCVN0cmluZyB1cmxTdHJpbmcgPSBYTUxVdGlscy5jcmVhdGVVUkxTdHJpbmcoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0gICAgCWlmICghc2NoZW1hUHJvY2Vzc2VkTGlzdC5jb250YWlucyh1cmxTdHJpbmcpKQotICAgIAl7Ci0gICAgICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAgICAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gICAgICAgICAgICBiYXNlVmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoCi0gICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksCi0gICAgICAgICAgICAgIGNvbnRleHQsCi0gICAgICAgICAgICAgIG51bGwpOwotICAgICAgICAgIHNjaGVtYVByb2Nlc3NlZExpc3QuYWRkKHVybFN0cmluZyk7Ci0gICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgICBwcm9jZXNzU2NoZW1hKAotICAgICAgICAgICAgICBzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICAgIHVybFN0cmluZywgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgCX0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgICAgLy90LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAvLyBub3RoaW5nLiBpdCdzIG5vdCBhIHNjaGVtYQotICAgICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBwcm9jZXNzZXMgWFNEIHNjaGVtYSBhbmQgcmV0cmlldmVzIHR5cGVzIGRlY2xhcmF0aW9uIGZyb20KLSAgICogaXQuCi0gICAqIEBwYXJhbSBzY2hlbWEKLSAgICogQHBhcmFtIGNvbnRleHQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzU2NoZW1hKE5vZGUgc2NoZW1hLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0JaWYgKChzY2hlbWEgIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKHNjaGVtYSkpKQotCXsKLQkgIHByb2Nlc3NlZFNjaGVtYXMuYWRkKHNjaGVtYSk7Ci0gICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIHNjaGVtYSwgQVRUUl9YU0RfVEFSR0VUTkFNRVNQQUNFKTsKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiOwotICAgICAgLy8gaXRlcmF0ZSBzY2hlbWEKLSAgICAgIE5vZGUgbiA9IHNjaGVtYS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICAvLyAhISB3ZSBzdXBwb3NlIHRoYXQgeHNkOmltcG9ydCBlbGVtZW50IGlzIG9jY3VyZWQgb25seSB3aXRoaW4geHNkOnNjaGVtYSBlbGVtZW50ICAgICAgICAKLSAgICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0VMRU1FTlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbjsKLSAgICAgICAgICAgIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfWFNEX05BTUUpOwotICAgICAgICAgICAgUU5hbWUgZWxlbWVudCA9Ci0gICAgICAgICAgICAgIG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiIpOwotCi0gICAgICAgICAgICBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGVsLCBBVFRSX1hTRF9UWVBFKTsKLSAgICAgICAgICAgIFFOYW1lIHR5cGUgPSBudWxsOwotICAgICAgICAgICAgaWYgKGEgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHQgPSBhLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgIC8vIGlmIHR5cGUgY29udGFpbnMgJzonLCBpdCBtZWFucyB0aGF0IGl0IGNvbnRhaW5zIHFuYW1lCi0gICAgICAgICAgICAgIGludCBpID0gdC5pbmRleE9mKCc6Jyk7Ci0gICAgICAgICAgICAgIGlmIChpICE9IC0xKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHQuc3Vic3RyaW5nKDAsIGkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBuc1VSSSA9IFhNTFV0aWxzLmZpbmROYW1lc3BhY2VVUkkobiwgcHJlZml4KTsKLSAgICAgICAgICAgICAgICB0eXBlID0gbmV3IFFOYW1lKG5zVVJJLCB0LnN1YnN0cmluZyhpICsgMSkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0eXBlID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIHN1cHBvc2UgdGhhdCBlbGVtZW50IGRpcmVjdGx5IGNvbnRhaW5zIHR5cGUgZGVjbGFyYXRpb24KLSAgICAgICAgICAgICAgdHlwZSA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgIGNoZWNrVHlwZShuLCB0eXBlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudDJUeXBlLnB1dChlbGVtZW50LCB0eXBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgICBsb2FkU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgIGVsc2UgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTkNMVURFKSkKLSAgICAgICAgICAgIGxvYWRTY2hlbWEobiwgY29udGV4dCwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgZWxzZSBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0NPTVBMRVhUWVBFKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50IGVsID0gKEVsZW1lbnQpIG47Ci0gICAgICAgICAgICBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGVsLCBBVFRSX1hTRF9OQU1FKTsKLSAgICAgICAgICAgIFFOYW1lIHR5cGUgPQotICAgICAgICAgICAgICBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiKTsKLSAgICAgICAgICAgIGNoZWNrVHlwZShuLCB0eXBlKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0JfQotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBjaGVja3Mgd2hldGhlciBzcGVjaWZpZWQgdHlwZSBoYXMgV1NETCBhcnJheSB0eXBlCi0gICAqIGF0dHJpYnV0ZSBpbiB0aGUgWFNEIGRlY2xhcmF0aW9uLgotICAgKiBAcGFyYW0gbgotICAgKiBAcGFyYW0gbmFtZQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrVHlwZShOb2RlIG4sIFFOYW1lIG5hbWUpCi0gIHsKLSAgICB3aGlsZSAobiAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHN1Y2ggc2VudGVuY2UKLSAgICAgICAgLy8gICAgICAgICAgICAgIHhzZDphdHRyaWJ1dGUgcmVmPSJzb2FwZW5jOmFycmF5VHlwZSIgd3NkbDphcnJheVR5cGU9InRuczpNeUFycmF5MlR5cGVbXSIvPgotICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0FUVFJJQlVURSkpCi0gICAgICAgIHsKLSAgICAgICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIG4sIEFUVFJfV1NETF9BUlJBWVRZUEUpOwotICAgICAgICAgIGlmIChhICE9IG51bGwpCi0gICAgICAgICAgICB1c2VzV3NkbEFycmF5VHlwZS5hZGQobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZXRyaWV2ZSBiYXNlIGF0dHJpYnV0ZSBtYXkgYmUgZnJvbSByZXN0cmljdGlvbiBvciBleHRlbnNpb24KLSAgICAgICAgQXR0ciBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBBVFRSX1hTRF9CQVNFKTsKLSAgICAgICAgaWYgKGEgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBiYXNlID0gYS5nZXRWYWx1ZSgpOwotICAgICAgICAgIGludCBpID0gYmFzZS5pbmRleE9mKCI6Iik7Ci0gICAgICAgICAgaWYgKGkgIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGJhc2Uuc3Vic3RyaW5nKDAsIGkpOwotICAgICAgICAgICAgU3RyaW5nIGxvY2FsID0gYmFzZS5zdWJzdHJpbmcoaSArIDEpOwotICAgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IFhNTFV0aWxzLmZpbmROYW1lc3BhY2VVUkkobiwgcHJlZml4KTsKLSAgICAgICAgICAgIGlmIChTT0FQRU5DX0FSUkFZLmVxdWFscyhuZXcgUU5hbWUobmFtZXNwYWNlLCBsb2NhbCkpKQotICAgICAgICAgICAgICBleHRlbmRzQXJyYXkuYWRkKG5hbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjaGVja1R5cGUobi5nZXRGaXJzdENoaWxkKCksIG5hbWUpOwotICAgICAgfQotICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVURESVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1VERElVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTJlMDY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVURESVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuQmluZGluZ1RlbXBsYXRlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5UTW9kZWxJbnN0YW5jZUluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZURldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXJzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGUgc29tZSBzZXJ2aWNlIGZ1bmN0aW9ucyB1c2VkIGJ5IFVERElWYWxpZGF0b3IuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgVURESVV0aWxzCi17Ci0gIHN0YXRpYyBwdWJsaWMgZmluYWwgRmluZFF1YWxpZmllcnMgRVhBQ1RfTkFNRV9NQVRDSF9RVUFMSUZJRVI7Ci0gIHN0YXRpYyB7Ci0gICAgVmVjdG9yIHZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBFWEFDVF9OQU1FX01BVENIX1FVQUxJRklFUiA9IG5ldyBGaW5kUXVhbGlmaWVycygpOwotICAgIHZlY3Rvci5hZGQobmV3IEZpbmRRdWFsaWZpZXIoRmluZFF1YWxpZmllci5leGFjdE5hbWVNYXRjaCkpOwotICAgIHZlY3Rvci5hZGQobmV3IEZpbmRRdWFsaWZpZXIoRmluZFF1YWxpZmllci5zb3J0QnlOYW1lQXNjKSk7Ci0gICAgRVhBQ1RfTkFNRV9NQVRDSF9RVUFMSUZJRVIuc2V0RmluZFF1YWxpZmllclZlY3Rvcih2ZWN0b3IpOwotICB9Ci0KLSAgc3RhdGljIGZpbmFsIFN0cmluZyBXU19JX0NPTkZPUk1BTkNFX1RNT0RFTF9OQU1FID0KLSAgICAid3MtaS1vcmc6Y29uZm9ybXNUbzoyMDAyXzEyIjsKLQotICBzdGF0aWMgcHJpdmF0ZSBIYXNodGFibGUgd3NpQ29uZm9ybWFuY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQotICAvKioKLSAgICogR2V0cyBhIGJ1c2luZXNzIHNlcnZpY2UgYnkga2V5LgotICAgKiBAcGFyYW0gcHJveHkgIGEgVURESSBwcm94eS4KLSAgICogQHBhcmFtIGtleSAgICBhIGtleSB0byBhIGJ1c2luZXNzIHNlcnZpY2UuCi0gICAqIEByZXR1cm4gYSBidXNpbmVzcyBzZXJ2aWNlIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4ga2V5LgotICAgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiBpZiBlcnJvciBvcmlnaW5hdGluZyB3aXRoaW4gdGhlIFNPQVAgdHJhbnNwb3J0LgotICAgKiBAdGhyb3dzIFVERElFeGNlcHRpb24gaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIFVEREkgQVBJIGNhbm5vdCBpbmRpY2F0ZSBhbiBlcnJvciBjb25kaXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJ1c2luZXNzU2VydmljZSBnZXRCdXNpbmVzc1NlcnZpY2VCeUtleSgKLSAgICBVRERJUHJveHkgcHJveHksCi0gICAgU3RyaW5nIGtleSkKLSAgICB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uLCBVRERJRXhjZXB0aW9uCi0gIHsKLSAgICBCdXNpbmVzc1NlcnZpY2UgcmVzdWx0ID0gbnVsbDsKLQotICAgIFNlcnZpY2VEZXRhaWwgc2QgPSBwcm94eS5nZXRfc2VydmljZURldGFpbChrZXkpOwotCi0gICAgaWYgKHNkICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIHYgPSBzZC5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLQotICAgICAgaWYgKHYgIT0gbnVsbCAmJiB2LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IChCdXNpbmVzc1NlcnZpY2UpIHYuZmlyc3RFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGJ1c2luZXNzIGVudGl0eSBieSBrZXkuCi0gICAqIEBwYXJhbSBwcm94eSAgYSBVRERJIHByb3h5LgotICAgKiBAcGFyYW0ga2V5ICAgIGEga2V5IHRvIGEgYnVzaW5lc3MgZW50aXkuCi0gICAqIEByZXR1cm4gYSBidXNpbmVzcyBlbnRpdHkgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIGlmIGVycm9yIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgU09BUCB0cmFuc3BvcnQuCi0gICAqIEB0aHJvd3MgVURESUV4Y2VwdGlvbiBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgVURESSBBUEkgY2Fubm90IGluZGljYXRlIAotICAgKiAgICAgICAgIGFuIGVycm9yIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnVzaW5lc3NFbnRpdHkgZ2V0QnVzaW5lc3NCeUtleShVRERJUHJveHkgcHJveHksIFN0cmluZyBrZXkpCi0gICAgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiwgVURESUV4Y2VwdGlvbgotICB7Ci0gICAgQnVzaW5lc3NFbnRpdHkgcmVzdWx0ID0gbnVsbDsKLQotICAgIEJ1c2luZXNzRGV0YWlsIGJkID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKGtleSk7Ci0KLSAgICBpZiAoYmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgdiA9IGJkLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0KLSAgICAgIGlmICh2ICE9IG51bGwgJiYgdi5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSAoQnVzaW5lc3NFbnRpdHkpIHYuZmlyc3RFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGEgdE1vZGVsIGJ5IGtleS4KLSAgICogQHBhcmFtIHByb3h5ICBhIFVEREkgcHJveHkuCi0gICAqIEBwYXJhbSBrZXkgICAgYSBrZXkgdG8gYSB0TW9kZWwuCi0gICAqIEByZXR1cm4gYSB0TW9kZWwgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIGlmIGVycm9yIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgU09BUCB0cmFuc3BvcnQuCi0gICAqIEB0aHJvd3MgVURESUV4Y2VwdGlvbiBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgVURESSBBUEkgY2Fubm90IGluZGljYXRlIAotICAgKiAgICAgICAgIGFuIGVycm9yIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVE1vZGVsIGdldFRNb2RlbEJ5S2V5KFVERElQcm94eSBwcm94eSwgU3RyaW5nIGtleSkKLSAgewotICAgIFRNb2RlbCByZXN1bHQgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgVE1vZGVsRGV0YWlsIGJkID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbChrZXkpOwotCi0gICAgICBpZiAoYmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHYgPSBiZC5nZXRUTW9kZWxWZWN0b3IoKTsKLQotICAgICAgICBpZiAodiAhPSBudWxsICYmIHYuc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IChUTW9kZWwpIHYuZmlyc3RFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMga2V5IG9mIHRoZSBXU0kgQ29uZm9ybWFuY2UgdE1vZGVsLgotICAgKiBAcGFyYW0gcHJveHkgIGEgVURESSBwcm94eS4KLSAgICogQHJldHVybiB0aGUga2V5IG9mIHRoZSBXU0kgQ29uZm9ybWFuY2UgdE1vZGVsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NJQ29uZm9ybWFuY2VUTW9kZWxLZXkoVURESVByb3h5IHByb3h5KQotICB7Ci0gICAgaWYgKHByb3h5ID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVRERJIHByb3h5IGNhbm5vdCBiZSBudWxsLiIpOwotCi0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0KLSAgICBpZiAod3NpQ29uZm9ybWFuY2VUYWJsZS5jb250YWluc0tleShwcm94eSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gd3NpQ29uZm9ybWFuY2VUYWJsZS5nZXQocHJveHkpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRUTW9kZWxLZXlCeU5hbWUocHJveHksIFdTX0lfQ09ORk9STUFOQ0VfVE1PREVMX05BTUUpOwotCi0gICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldTLUkgY29uZm9ybWFuY2UgdGF4b25vbXkgdE1vZGVsIHdhcyBub3QgZm91bmQiKTsKLSAgICAgIH0KLQotICAgICAgd3NpQ29uZm9ybWFuY2VUYWJsZS5wdXQocHJveHksIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGEgdE1vZGVsIGtleSBieSB0TW9kZWwgbmFtZS4KLSAgICogQHBhcmFtIHByb3h5ICBhIFVEREkgcHJveHkuCi0gICAqIEBwYXJhbSBuYW1lICAgYSB0TW9kZWwgbmFtZS4KLSAgICogQHJldHVybiBhIHRNb2RlbCBrZXkgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiB0TW9kZWwgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRNb2RlbEtleUJ5TmFtZShVRERJUHJveHkgcHJveHksIFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVE1vZGVsTGlzdCBsaXN0ID0KLSAgICAgICAgcHJveHkuZmluZF90TW9kZWwobmFtZSwgbnVsbCwgbnVsbCwgRVhBQ1RfTkFNRV9NQVRDSF9RVUFMSUZJRVIsIDEpOwotICAgICAgVE1vZGVsSW5mbyBpbmZvID0KLSAgICAgICAgKFRNb2RlbEluZm8pIGxpc3QuZ2V0VE1vZGVsSW5mb3MoKS5nZXRUTW9kZWxJbmZvVmVjdG9yKCkuZmlyc3RFbGVtZW50KCk7Ci0gICAgICByZXN1bHQgPSBpbmZvLmdldFRNb2RlbEtleSgpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgewotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBiaW5kaW5nVGVtcGxhdGUuCi0gICAqIEBwYXJhbSBiaW5kaW5nVGVtcGxhdGUgIGEgQmluZGluZ1RlbXBsYXRlIG9iamVjdC4KLSAgICogQHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBiaW5kaW5nVGVtcGxhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBiaW5kaW5nVGVtcGxhdGVUb1N0cmluZyhCaW5kaW5nVGVtcGxhdGUgYmluZGluZ1RlbXBsYXRlKQotICB7Ci0gICAgU3RyaW5nIHJldHVyblN0cmluZyA9ICIiOwotCi0gICAgaWYgKGJpbmRpbmdUZW1wbGF0ZSA9PSBudWxsKQotICAgICAgcmV0dXJuU3RyaW5nID0gIm51bGwiOwotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVyblN0cmluZyA9Ci0gICAgICAgICJhY2Nlc3NQb2ludDogIgotICAgICAgICAgICsgKGJpbmRpbmdUZW1wbGF0ZS5nZXRBY2Nlc3NQb2ludCgpID09IG51bGwKLSAgICAgICAgICAgID8gIm51bGwiCi0gICAgICAgICAgICA6IGJpbmRpbmdUZW1wbGF0ZS5nZXRBY2Nlc3NQb2ludCgpLmdldFRleHQoKSk7Ci0KLSAgICAgIGlmIChiaW5kaW5nVGVtcGxhdGUuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCkgPT0gbnVsbAotICAgICAgICB8fCBiaW5kaW5nVGVtcGxhdGUKLSAgICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCkKLSAgICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VJbmZvVmVjdG9yKCkKLSAgICAgICAgICA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiwgW25vIHRNb2RlbCByZWZlcmVuY2VdIjsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlCi0gICAgICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCkKLSAgICAgICAgICAgIC5nZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IoKQotICAgICAgICAgICAgLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgaW50IGluZm9Db3VudCA9IDE7Ci0gICAgICAgIFRNb2RlbEluc3RhbmNlSW5mbyBpbmZvOwotICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaW5mbyA9IChUTW9kZWxJbnN0YW5jZUluZm8pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiwgWyIKLSAgICAgICAgICAgICsgaW5mb0NvdW50KysKLSAgICAgICAgICAgICsgIl0gdE1vZGVsS2V5OiAiCi0gICAgICAgICAgICArIGluZm8uZ2V0VE1vZGVsS2V5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0dXJuU3RyaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdE1vZGVsLgotICAgKiBAcGFyYW0gdE1vZGVsICBhIFRNb2RlbCBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdE1vZGVsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdE1vZGVsVG9TdHJpbmcoVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIFN0cmluZyByZXR1cm5TdHJpbmcgPSAiIjsKLQotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICAgIHJldHVyblN0cmluZyA9ICJudWxsIjsKLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm5TdHJpbmcgPQotICAgICAgICAibmFtZTogIgotICAgICAgICAgICsgdE1vZGVsLmdldE5hbWVTdHJpbmcoKQotICAgICAgICAgICsgIiwgY2F0ZWdvcnlCYWc6ICIKLSAgICAgICAgICArICh0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKSA9PSBudWxsCi0gICAgICAgICAgICA/ICJudWxsIgotICAgICAgICAgICAgOiBjYXRlZ29yeUJhZ1RvU3RyaW5nKHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpKSkKLSAgICAgICAgICArICIsIG92ZXJ2aWV3VVJMOiAiCi0gICAgICAgICAgKyAodE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkgPT0gbnVsbAotICAgICAgICAgICAgPyAibnVsbCIKLSAgICAgICAgICAgIDogdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkxTdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldHVyblN0cmluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKiBAcGFyYW0gY2F0ZWdvcnlCYWcgIGEgQ2F0ZWdvcnlCYWcgb2JqZWN0LgotICAgKiBAcmV0dXJuIGEgdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY2F0ZWdvcnlCYWcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjYXRlZ29yeUJhZ1RvU3RyaW5nKENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnKQotICB7Ci0gICAgU3RyaW5nIHJldHVyblN0cmluZyA9ICIiOwotCi0gICAgaWYgKGNhdGVnb3J5QmFnID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuU3RyaW5nICs9ICJudWxsIjsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuU3RyaW5nICs9ICJLZXllZFJlZmVyZW5jZUxpc3Q6ICI7Ci0KLSAgICAgIFZlY3RvciBrckxpc3QgPSBudWxsOwotICAgICAgaWYgKChrckxpc3QgPSBjYXRlZ29yeUJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpKSA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm5TdHJpbmcgKz0gIm51bGwiOwotICAgICAgfQotCi0gICAgICBlbHNlIGlmIChrckxpc3Quc2l6ZSgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHJldHVyblN0cmluZyArPSAiZW1wdHkiOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbnVsbDsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBrckxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGtyID0gKEtleWVkUmVmZXJlbmNlKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgcmV0dXJuU3RyaW5nICs9ICJ0TW9kZWxLZXk6ICIKLSAgICAgICAgICAgICsga3IuZ2V0VE1vZGVsS2V5KCkKLSAgICAgICAgICAgICsgIiwga2V5TmFtZTogIgotICAgICAgICAgICAgKyBrci5nZXRLZXlOYW1lKCkKLSAgICAgICAgICAgICsgIiwga2V5VmFsdWU6ICIKLSAgICAgICAgICAgICsga3IuZ2V0S2V5VmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5TdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCB0aGUgd3NkbFNwZWMgdE1vZGVsIGFzc29jaWF0ZWQgd2l0aCBhIGJpbmRpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRNb2RlbCBmaW5kVE1vZGVsKAotICAgIFVERElQcm94eSB1ZGRpUHJveHksCi0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSwKLSAgICBib29sZWFuIHZlcmJvc2VPcHRpb24pCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgVE1vZGVsIHRNb2RlbCA9IG51bGw7Ci0KLSAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgdE1vZGVsIHJlZmVyZW5jZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYmluZGluZ1RlbXBsYXRlCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPQotICAgICAgYmluZGluZ1RlbXBsYXRlCi0gICAgICAgIC5nZXRUTW9kZWxJbnN0YW5jZURldGFpbHMoKQotICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VJbmZvVmVjdG9yKCkKLSAgICAgICAgLml0ZXJhdG9yKCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggdE1vZGVsIHJlZmVyZW5jZQotICAgIFZlY3RvciB0TW9kZWxLZXlMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IHRNb2RlbEluc3RhbmNlSW5mbwotICAgICAgVE1vZGVsSW5zdGFuY2VJbmZvIHRNb2RlbEluc3RhbmNlSW5mbyA9Ci0gICAgICAgIChUTW9kZWxJbnN0YW5jZUluZm8pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gQWRkIGtleSB0byBsaXN0Ci0gICAgICB0TW9kZWxLZXlMaXN0LmFkZCh0TW9kZWxJbnN0YW5jZUluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgdE1vZGVscyBhc3NvY2lhdGVkIHdpdGggdGhlIGJpbmRpbmdUZW1wbGF0ZQotICAgIGlmICh0TW9kZWxLZXlMaXN0LnNpemUoKSA+IDApCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIEdldCB0aGUgdE1vZGVsIGRldGFpbHMKLSAgICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9IHVkZGlQcm94eS5nZXRfdE1vZGVsRGV0YWlsKHRNb2RlbEtleUxpc3QpOwotCi0gICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiB0TW9kZWxzCi0gICAgICAgIEl0ZXJhdG9yIHRNb2RlbEl0ZXJhdG9yID0gdE1vZGVsRGV0YWlsLmdldFRNb2RlbFZlY3RvcigpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgLy9ib29sZWFuIHRNb2RlbEZvdW5kID0gZmFsc2U7Ci0gICAgICAgIFRNb2RlbCBuZXh0VE1vZGVsID0gbnVsbDsKLQotICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIHRNb2RlbHMKLSAgICAgICAgd2hpbGUgKCh0TW9kZWxJdGVyYXRvci5oYXNOZXh0KCkpICYmICh0TW9kZWwgPT0gbnVsbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgbmV4dCB0TW9kZWwgaW4gbGlzdAotICAgICAgICAgIG5leHRUTW9kZWwgPSAoVE1vZGVsKSB0TW9kZWxJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgICBpZiAodmVyYm9zZU9wdGlvbikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCi0gICAgICAgICAgICAgICIgICAgICBUTW9kZWwgcmVmZXJlbmNlZCBmcm9tIGJpbmRpbmdUZW1wbGF0ZSAtICIKLSAgICAgICAgICAgICAgICArIFVERElVdGlscy50TW9kZWxUb1N0cmluZyhuZXh0VE1vZGVsKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHdzZGxTcGVjIHRNb2RlbCwgdGhlbiB0aGlzIGlzIHRoZSB0TW9kZWwgd2Ugd2FudAotICAgICAgICAgIGlmIChpc1dzZGxTcGVjKG5leHRUTW9kZWwpKQotICAgICAgICAgICAgdE1vZGVsID0gbmV4dFRNb2RlbDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIFRocm93IFdTSUV4Y2VwdGlvbgotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZ2V0IHRNb2RlbCBkZXRhaWxzLiIsIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgIC8vdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiVURESSBiaW5kaW5nVGVtcGxhdGUgZGlkIG5vdCBjb250YWluIGFueSB0TW9kZWwgcmVmZXJlbmNlcy4iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdE1vZGVsOwotICB9Ci0gIAotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB3c2RsU3BlYyB0TW9kZWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXc2RsU3BlYyhUTW9kZWwgdE1vZGVsKQotICB7Ci0gICAgYm9vbGVhbiB0TW9kZWxGb3VuZCA9IGZhbHNlOwotICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gbnVsbDsKLSAgICBJdGVyYXRvciBjYXRlZ29yeUJhZ0l0ZXJhdG9yID0gbnVsbDsKLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgY2F0ZXRnb3J5QmFnIGNvbnRhaW5zIHdzZGxTcGVjCi0gICAgaWYgKChjYXRlZ29yeUJhZyA9IHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiBrZXllZCByZWZlcmVuY2VzCi0gICAgICBjYXRlZ29yeUJhZ0l0ZXJhdG9yID0gY2F0ZWdvcnlCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKS5pdGVyYXRvcigpOwotCi0gICAgICBLZXllZFJlZmVyZW5jZSBrZXllZFJlZmVyZW5jZSA9IG51bGw7Ci0KLSAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2Yga2V5ZWQgcmVmZXJlbmNlcwotICAgICAgd2hpbGUgKGNhdGVnb3J5QmFnSXRlcmF0b3IuaGFzTmV4dCgpICYmICEodE1vZGVsRm91bmQpKQotICAgICAgewotICAgICAgICAvLyBHZXQgbmV4dCBrZXllZCByZWZlcmVuY2UKLSAgICAgICAga2V5ZWRSZWZlcmVuY2UgPSAoS2V5ZWRSZWZlcmVuY2UpIGNhdGVnb3J5QmFnSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSB0eXBlcyB0YXhvbm9teSB0TW9kZWwgYW5kIHRoZSB2YWx1ZSBpcyB3c2RsU3BlYywgdGhlbiB0aGlzIGlzIHRoZSB0TW9kZWwgd2Ugd2FudAotICAgICAgICAvLyBSRU1PVkU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sgdGhlIGtleSBuYW1lCi0gICAgICAgIC8vaWYgKGtleWVkUmVmZXJlbmNlLmdldFRNb2RlbEtleSgpLmVxdWFsc0lnbm9yZUNhc2UoVE1vZGVsLlRZUEVTX1RNT0RFTF9LRVkpICYmCi0gICAgICAgIC8vICAgIndzZGxTcGVjIi5lcXVhbHMoa2V5ZWRSZWZlcmVuY2UuZ2V0S2V5VmFsdWUoKSkgJiYKLSAgICAgICAgLy8gICAoInR5cGVzIi5lcXVhbHMoa2V5ZWRSZWZlcmVuY2UuZ2V0S2V5TmFtZSgpKSB8fAotICAgICAgICAvLyAgICAidWRkaS1vcmc6dHlwZXMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlOYW1lKCkpKSkgewotICAgICAgICAvLyAgdE1vZGVsRm91bmQgPSB0cnVlOwotICAgICAgICAvL30KLSAgICAgICAgaWYgKGtleWVkUmVmZXJlbmNlCi0gICAgICAgICAgLmdldFRNb2RlbEtleSgpCi0gICAgICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoVE1vZGVsLlRZUEVTX1RNT0RFTF9LRVkpCi0gICAgICAgICAgJiYgIndzZGxTcGVjIi5lcXVhbHMoa2V5ZWRSZWZlcmVuY2UuZ2V0S2V5VmFsdWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB0TW9kZWxGb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdE1vZGVsRm91bmQ7Ci0gIH0KLSAgLyoqCi0gICAqIEdldCBhbiBPdmVydmlld1VSTCBmcm9tIHRNb2RlbC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE92ZXJ2aWV3VVJMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBpZiAodE1vZGVsICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkwoKS5nZXRUZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBHZXQgV1NETCBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKQotICB7Ci0gICAgaW50IGluZGV4OwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIG92ZXJ2aWV3VVJMIGNvbnRhaW5zIGEgZnJhZ21lbnQgaWRlbnRpZmllcgotICAgIGlmICgoaW5kZXggPSB3c2RsTG9jYXRpb24uaW5kZXhPZigiIyIpKSA+IC0xKQotICAgIHsKLSAgICAgIHdzZGxMb2NhdGlvbiA9IHdzZGxMb2NhdGlvbi5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gd3NkbExvY2F0aW9uOwotICB9Ci0gIC8qKgotICAgKiBHZXQgV1NETCBiaW5kaW5nIGZyb20gdGhlIG92ZXJ2aWV3VVJMIGluIHRoZSB0TW9kZWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJpbmRpbmcgZ2V0QmluZGluZyhTdHJpbmcgb3ZlcnZpZXdVUkwsIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gIHsKLSAgICBpbnQgaW5kZXg7Ci0gICAgaW50IG5hbWVJbmRleDsKLQotICAgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHdzZGxEb2N1bWVudC5nZXRCaW5kaW5ncygpOwotICAgIGlmIChiaW5kaW5ncyA9PSBudWxsIHx8IGJpbmRpbmdzLmxlbmd0aCA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBpZiAob3ZlcnZpZXdVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBDaGVjayBpZiB0aGUgb3ZlcnZpZXdVUkwgY29udGFpbnMgYSBmcmFnbWVudCBpZGVudGlmaWVyCi0gICAgICBpZiAoKGluZGV4ID0gb3ZlcnZpZXdVUkwuaW5kZXhPZigiIyIpKSA+IC0xKQotICAgICAgewotICAgICAgICAvLyBURU1QOiBOZWVkIHRvIHVzZSBhIHJlYWwgWFBhdGggZXZhbHVhdG9yIGxpa2UgWGFsYW4KLSAgICAgICAgU3RyaW5nIG5hbWVBdHRyaWJ1dGUgPSAiQG5hbWU9IjsKLQotICAgICAgICAvLyBMb2NhdGUgbmFtZSByZWZlcmVuY2UKLSAgICAgICAgaWYgKChuYW1lSW5kZXggPQotICAgICAgICAgIG92ZXJ2aWV3VVJMLnN1YnN0cmluZyhpbmRleCArIDEpLmluZGV4T2YobmFtZUF0dHJpYnV0ZSkpCi0gICAgICAgICAgPiAtMSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgd2hpY2ggc2hvdWxkIGJlIGEgcXVvdGUKLSAgICAgICAgICBpbnQgZmlyc3RRdW90ZUluZGV4ID0gaW5kZXggKyAxICsgbmFtZUluZGV4ICsgbmFtZUF0dHJpYnV0ZS5sZW5ndGgoKTsKLSAgICAgICAgICBTdHJpbmcgcXVvdGUgPQotICAgICAgICAgICAgb3ZlcnZpZXdVUkwuc3Vic3RyaW5nKGZpcnN0UXVvdGVJbmRleCwgZmlyc3RRdW90ZUluZGV4ICsgMSk7Ci0KLSAgICAgICAgICAvLyBHZXQgdGhlIHBhcnQgb2YgdGhlIFVSTCB3aGljaCBzaG91bGQgY29udGFpbiB0aGUgYmluZGluZyBuYW1lCi0gICAgICAgICAgU3RyaW5nIHVybFBhcnQgPSBvdmVydmlld1VSTC5zdWJzdHJpbmcoZmlyc3RRdW90ZUluZGV4ICsgMSk7Ci0KLSAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHF1b3RlCi0gICAgICAgICAgaW50IG5leHRRdW90ZUluZGV4OwotICAgICAgICAgIGlmICgobmV4dFF1b3RlSW5kZXggPSB1cmxQYXJ0LmluZGV4T2YocXVvdGUpKSA+IC0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9IHVybFBhcnQuc3Vic3RyaW5nKDAsIG5leHRRdW90ZUluZGV4KTsKLSAgICAgICAgICAgIC8vbG9vayBmb3IgYmluZGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKGJpbmRpbmdOYW1lLmVxdWFscyhiaW5kaW5nc1tpXS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmluZGluZ3NbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdzWzBdOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMzc5ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LkNvbm5lY3RFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTWltZVBhcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5NaW1lUGFydHNJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlRpbWVab25lOwotCi0vKioKLSAqIEdlbmVyYWwgc2V0IG9mIHV0aWxpdGllcy4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBDUiA9IChieXRlKSAnXHInOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTEYgPSAoYnl0ZSkgJ1xuJzsKLQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgTWFwIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zOwotCi0gIC8qKgotICAgKiBDb21tb24gdGltZXN0YW1wIGZvcm1hdC4KLSAgICovCi0gIC8vCXB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCB0aW1lc3RhbXBGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCAoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTaW1wbGVEYXRlRm9ybWF0IHRpbWVzdGFtcEZvcm1hdCA9Ci0gICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MiKTsKLQotICAvKioKLSAgICogQmFzaWMgZGF0ZSBmb3JtYXQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFNpbXBsZURhdGVGb3JtYXQgZGF0ZUZvcm1hdCA9Ci0gICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKTsKLQotICAvKioKLSAgICogV3JhcHBlciBtZXRob2QgZm9yIGVycm9yIGxvZ2dpbmc7Ci0gICAqIGZvciBub3cgaXQganVzdCBnb2VzIHRvIHN0ZGVyci4KLSAgICogQHBhcmFtIGluRXJyb3IgIGFuIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIGluRXJyb3IpCi0gIHsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yOiAiICsgaW5FcnJvcik7Ci0gIH0KLQotICAvKiogCi0gICAqIEdldCBleGNlcHRpb24gaW5mb3JtYXRpb24gYXMgYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB0aHJvd2FibGUgIGEgVGhyb3dhYmxlIG9iamVjdC4KLSAgICogQHJldHVybiBleGNlcHRpb24gaW5mb3JtYXRpb24gYXMgYSBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBnZXRFeGNlcHRpb25EZXRhaWxzKFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgcHcucHJpbnRsbigiRXhjZXB0aW9uOiAiKTsKLSAgICB0aHJvd2FibGUucHJpbnRTdGFja1RyYWNlKHB3KTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqIEByZXR1cm4gdXJyZW50IGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUaW1lc3RhbXAoKQotICB7Ci0gICAgLy8gVXNlIEdNVCB0aW1lem9uZQotICAgIC8vdGltZXN0YW1wRm9ybWF0LnNldFRpbWVab25lKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSk7Ci0gICAgdGltZXN0YW1wRm9ybWF0LnNldFRpbWVab25lKFRpbWVab25lLmdldERlZmF1bHQoKSk7Ci0KLSAgICAvLyBSZXR1cm4gdGltZXN0YW1wCi0gICAgcmV0dXJuIHRpbWVzdGFtcEZvcm1hdC5mb3JtYXQobmV3IERhdGUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGN1cnJlbnQgZGF0ZSBmb3IgZGVmYXVsdCB0aW1lIHpvbmUuCi0gICAqIEByZXR1cm4gY3VycmVudCBkYXRlIGZvciBkZWZhdWx0IHRpbWUgem9uZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERhdGUoKQotICB7Ci0gICAgLy8gVXNlIEdNVCB0aW1lem9uZQotICAgIGRhdGVGb3JtYXQuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0RGVmYXVsdCgpKTsKLQotICAgIC8vIFJldHVybiBkYXRlCi0gICAgcmV0dXJuIGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBIVFRQIHN0YXR1cyBjb2RlLgotICAgKiBAcGFyYW0gaHR0cEhlYWRlcnMgIEhUVFAgaGVhZGVycy4KLSAgICogQHJldHVybiBIVFRQIHN0YXR1cyBjb2RlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgc3RhdHVzIGNvZGUgaW4gaHR0cCBoZWFkZXJzIHdhcyBub3QgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIVFRQU3RhdHVzQ29kZShTdHJpbmcgaHR0cEhlYWRlcnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHN0YXR1c0NvZGUgPSBudWxsOwotCi0gICAgaWYgKGh0dHBIZWFkZXJzLnN0YXJ0c1dpdGgoIkhUVFAiKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgbG9jYXRpb24gb2Ygc3RhdHVzIGNvZGUKLSAgICAgIGludCBpbmRleCA9IGh0dHBIZWFkZXJzLmluZGV4T2YoIiAiKTsKLSAgICAgIGludCBpbmRleDIgPSBodHRwSGVhZGVycy5pbmRleE9mKCIgIiwgaW5kZXggKyAxKTsKLQotICAgICAgaWYgKChpbmRleCA9PSAtMSkgfHwgKGluZGV4MiA9PSAtMSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIHN0YXR1cyBjb2RlIGluIGh0dHAgaGVhZGVyczogWyIgKyBodHRwSGVhZGVycyArICJdLiIpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHN0YXR1c0NvZGUgPSBodHRwSGVhZGVycy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleDIpOwotICAgICAgfQotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQ291bGQgbm90IGZpbmQgc3RhdHVzIGNvZGUgaW4gaHR0cCBoZWFkZXJzOiBbIiArIGh0dHBIZWFkZXJzICsgIl0uIik7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHN0YXR1cyBjb2RlCi0gICAgcmV0dXJuIHN0YXR1c0NvZGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBIVFRQIGhlYWRlcnMgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEhUVFBIZWFkZXJzKFN0cmluZyBmdWxsTWVzc2FnZSkKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLQotICAgIC8vIFRyeSBsb29raW5nIGZvciB0aGUgZG91YmxlIG5ld2xpbmUKLSAgICBpbnQgaW5kZXggPSBmdWxsTWVzc2FnZS5pbmRleE9mKCJcclxuXHJcbiIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBpbmRleCArPSA0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gY2hlY2sgZm9yIGNhc2UgIlxyXHIuLi5cclxuXHJcci4uLlxuIgotICAgICAgLy8gTm90ZSB0aGUgaW5kZXggdGhhdCBpcyByZXR1cm5lZCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciAKLSAgICAgIC8vIGltbWVkaWF0ZWRseSBmb2xsb3dpbmcgdGhlIGZpcnN0IG9jY3VyZW5jZSBvZiB0aGUgQ1JMRkNSTEYuIAotICAgICAgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlKTsKLSAgICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgbG9nRXJyb3IoCi0gICAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBIVFRQIG1lc3NhZ2UgdG8gZmluZCBoZWFkZXJzLiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiAieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIGhlYWRlcnMuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZQotICAgICAgICAgICsgIl0uIjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gSFRUUCBoZWFkZXJzCi0gICAgcmV0dXJuIGZ1bGxNZXNzYWdlLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBTT0FQIG1lc3NhZ2UgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbnRlbnQoU3RyaW5nIGZ1bGxNZXNzYWdlKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSAiIjsKLQotICAgIC8vIEZpbmQgc3RhcnQgb2YgbWVzc2FnZQotICAgIGludCBpbmRleCA9IGZ1bGxNZXNzYWdlLmluZGV4T2YoIlxyXG5cclxuIik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIGluZGV4ICs9IDQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBmb3IgY2FzZSAiXHJcci4uLlxyXG5cclxyLi4uXG4iCi0gICAgICAvLyBOb3RlIHRoZSBpbmRleCB0aGF0IGlzIHJldHVybmVkIHBvaW50cyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIAotICAgICAgLy8gaW1tZWRpYXRlZGx5IGZvbGxvd2luZyB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIHRoZSBDUkxGQ1JMRi4gCi0gICAgICBpbmRleCA9IGdldEZpcnN0Q1JMRkNSTEYoZnVsbE1lc3NhZ2UpOwotICAgIH0gICAgCQotCi0gICAgaWYgKGluZGV4IDwgMCkKLSAgICB7Ci0gICAgCS8vIElmIHdlIGNvdWxkbid0IGZpbmQgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXJzIG9yIHRoZSBzdGFydCBvZiB0aGUgbWVzc2FnZSwgdGhlbiBzaG93IGVycm9yCi0gICAgICBsb2dFcnJvcigKLSAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIHRvIGdldCBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZSk7Ci0gICAgICBtZXNzYWdlID0KLSAgICAgICAgIngtV1NJLVRlc3QtVG9vbC1FcnJvcjogQ291bGRuJ3QgZmluZCBtZXNzYWdlIGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZQotICAgICAgICAgICsgIl0uIjsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoLCB0aGVuIHRoZXJlIGlzIG5vIG1lc3NhZ2UgY29udGVudAotICAgIGVsc2UgaWYgKGluZGV4ID49IGZ1bGxNZXNzYWdlLmxlbmd0aCgpKQotICAgIHsKLSAgICAgIG1lc3NhZ2UgPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBFbHNlIGdldCB0aGUgbWVzc2FnZSBjb250ZW50Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG1lc3NhZ2UgPSBmdWxsTWVzc2FnZS5zdWJzdHJpbmcoaW5kZXgpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBTT0FQIG1lc3NhZ2UKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotIAotICAvKioKLSAgICogR2V0IEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBIVFRQIGhlYWRlcnMgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGdldEhUVFBIZWFkZXJzKGJ5dGVbXSBmdWxsTWVzc2FnZSkKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlLCAwKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgewotICAgICAgbG9nRXJyb3IoCi0gICAgICAgICJVbmFibGUgdG8gcGFyc2UgSFRUUCBtZXNzYWdlIHRvIGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogIgotICAgICAgICAgICsgZnVsbE1lc3NhZ2UpOwotICAgICAgcmV0dXJuICgieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIGhlYWRlcnMuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICsgZnVsbE1lc3NhZ2UgKyAiXS4iKS5nZXRCeXRlcygpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBIVFRQIGhlYWRlcnMKLQlieXRlW10gYiA9IG5ldyBieXRlW2luZGV4XTsKLQlTeXN0ZW0uYXJyYXljb3B5KGZ1bGxNZXNzYWdlLCAwLCBiLCAwLCBpbmRleCk7Ci0KLSAgICByZXR1cm4gYjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgSFRUUCBoZWFkZXJzIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SFRUUEhlYWRlcnNBc1N0cmluZyhieXRlW10gZnVsbE1lc3NhZ2UsIFN0cmluZyBlbmNvZGluZykKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlLCAwKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgewotICAgICAgbG9nRXJyb3IoCi0gICAgICAgICJVbmFibGUgdG8gcGFyc2UgSFRUUCBtZXNzYWdlIHRvIGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogIgotICAgICAgICAgICsgZnVsbE1lc3NhZ2UpOwotICAgICAgcmV0dXJuICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IENvdWxkbid0IGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgICAgKyBmdWxsTWVzc2FnZSArICJdLiI7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIEhUVFAgaGVhZGVycwotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nKGZ1bGxNZXNzYWdlLCAwLCBpbmRleCwgZW5jb2RpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgICAgbG9nRXJyb3IoCi0gICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIEVuY29kaW5nOiAiICsgZW5jb2RpbmcgKyAiLiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgICAgICAgICArIGZ1bGxNZXNzYWdlKTsKLSAgICAgICAgICAgICAgcmV0dXJuICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IFVuc3VwcG9ydGVkIEVuY29kaW5nIFwiIiArIGVuY29kaW5nICsgIlwiLiAgRnVsbCBtZXNzYWdlOiBbIgotICAgICAgICAgICAgICAgICsgZnVsbE1lc3NhZ2UgKyAiXS4iOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgU09BUCBtZXNzYWdlIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q29udGVudEFzU3RyaW5nKGJ5dGVbXSBtZXNzYWdlKQotICB7Ci0gIAlTdHJpbmcgY29udGVudCA9ICIiOwotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKG1lc3NhZ2UsIDApOwotCi0gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZW5kIG9mIHRoZSBIVFRQIGhlYWRlcnMgb3IgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLCB0aGVuIHNob3cgZXJyb3IKLSAgICBpZiAoaW5kZXggPCAwKQotICAgIHsKLSAgICAgIGxvZ0Vycm9yKAotICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgdG8gZ2V0IGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6ICIKLSAgICAgICAgICArIG1lc3NhZ2UpOwotICAgICAgY29udGVudCA9Ci0gICAgICAgICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IENvdWxkbid0IGZpbmQgbWVzc2FnZSBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiBbIgotICAgICAgICAgICsgbWVzc2FnZS50b1N0cmluZygpCi0gICAgICAgICAgKyAiXS4iOwotICAgIH0KLQotICAgIC8vIEVsc2UgZ2V0IHRoZSBtZXNzYWdlIGNvbnRlbnQKLSAgICBlbHNlIGlmIChpbmRleCA8IG1lc3NhZ2UubGVuZ3RoKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBjb250ZW50ID0gbmV3IFN0cmluZyhtZXNzYWdlLCBpbmRleCwgbWVzc2FnZS5sZW5ndGggLSBpbmRleCk7Ci0gICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgCWxvZ0Vycm9yKAotICAgICAgCSAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIHRvIGdldCBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAJICAgICAgICAgICsgbWVzc2FnZSk7Ci0gICAgICAJY29udGVudCA9Ci0gICAgICAJICAgICAgICAieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIG1lc3NhZ2UgY29udGVudC4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgIAkgICAgICAgICAgKyBtZXNzYWdlLnRvU3RyaW5nKCkKLSAgICAgIAkgICAgICAgICAgKyAiXS4iOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBTT0FQIG1lc3NhZ2UKLSAgICByZXR1cm4gY29udGVudDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgU09BUCBtZXNzYWdlIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBieXRlW10gZ2V0Q29udGVudChieXRlW10gbWVzc2FnZSkKLSAgewotICAgIGJ5dGVbXSBjb250ZW50ID0gbmV3IGJ5dGUgWzBdOwotCi0gICAgLy9TdHJpbmcgaHR0cEhlYWRlcnMgPSBudWxsOwotICAgIGludCBpbmRleCA9IGdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSwgMCk7Ci0gCi0gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZW5kIG9mIHRoZSBIVFRQIGhlYWRlcnMgb3IgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLCB0aGVuIHNob3cgZXJyb3IKLSAgICBpZiAoaW5kZXggPCAwKQotICAgIHsKLSAgICAgIGxvZ0Vycm9yKAotICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgdG8gZ2V0IGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6ICIKLSAgICAgICAgICArIG1lc3NhZ2UpOwotICAgICAgbWVzc2FnZSA9Ci0gICAgICAgICgieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIG1lc3NhZ2UgY29udGVudC4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgICAgICArIG1lc3NhZ2UudG9TdHJpbmcoKQotICAgICAgICAgICsgIl0uIikuZ2V0Qnl0ZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgaW5kZXggaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGgsIHRoZW4gdGhlcmUgaXMgbm8gbWVzc2FnZSBjb250ZW50Ci0gICAgLy9lbHNlIGlmIChpbmRleCA+PSBmdWxsTWVzc2FnZS5sZW5ndGgoKSkKLSAgICAvL3sKLSAgICAvLyAgbWVzc2FnZSA9ICIiOwotICAgIC8vfQotCi0gICAgLy8gRWxzZSBnZXQgdGhlIG1lc3NhZ2UgY29udGVudAotICAgIGVsc2UgaWYgKGluZGV4IDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgewotICAgIAlieXRlW10gYiA9IG5ldyBieXRlW21lc3NhZ2UubGVuZ3RoIC0gaW5kZXhdOwotICAgIAlTeXN0ZW0uYXJyYXljb3B5KG1lc3NhZ2UsIGluZGV4LCBiLCAwLCBtZXNzYWdlLmxlbmd0aCAtIGluZGV4KTsKLQotICAgICAgICBjb250ZW50ID0gYjsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gU09BUCBtZXNzYWdlCi0gICAgcmV0dXJuIGNvbnRlbnQ7Ci0gIH0KLQotICAKLSAgLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEYoYnl0ZVtdIGJ1ZmZlciwgaW50IGluZGV4KSAKLQl7Ci0JCWludCBzaXplID0gYnVmZmVyLmxlbmd0aDsKLQkJaW50IGkgPSBpbmRleDsKLQkJd2hpbGUgKGkgPCBzaXplIC0gMSkgewotCQkJaWYgKGJ1ZmZlcltpXSA9PSBDUiAmJiBidWZmZXJbaSsxXSA9PSBMRikKLQkJCQlyZXR1cm4gaTsKLQkJCWkrKzsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGIGZvbGxvd2VkIGltZWRpYXRlbHkgYnkgYW5vdGhlciBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEZDUkxGKGJ5dGVbXSBidWZmZXIsIGludCBpbmRleCkgCi0JewotCQlpbnQgc2l6ZSA9IGJ1ZmZlci5sZW5ndGg7Ci0JCWludCBpID0gaW5kZXg7Ci0JCXdoaWxlIChpIDwgc2l6ZSAtIDMpIAotCQl7Ci0JCSAgaWYgKGJ1ZmZlcltpXSA9PSBDUiAmJiBidWZmZXJbaSsxXSA9PSBMRiAmJiBidWZmZXJbaSsyXSA9PSBDUikKLQkJICB7Ci0JCQlpZiAoYnVmZmVyW2krM10gPT0gTEYpCi0JCQl7Ci0JCQkgIHJldHVybiBpKzQ7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkgIGludCBqID0gaSArIDM7Ci0JCQkgIHdoaWxlIChqIDwgYnVmZmVyLmxlbmd0aCAmJiBidWZmZXJbal0gPT0gQ1IpCi0JCQkgIHsKLQkJCQlqKys7Ci0JCQkgIH0KLQkJCSAgaWYgKGogPCBidWZmZXIubGVuZ3RoICYmIGJ1ZmZlcltqXSA9PSBMRikKLQkJCSAgewotCQkJICAJcmV0dXJuIGogKyAxOwotCQkJICB9Ci0JCQl9Ci0JCSAgfQotCQkgIGkrKzsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGIGZvbGxvd2VkIGltZWRpYXRlbHkgYnkgYW5vdGhlciBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEZDUkxGKFN0cmluZyBidWZmZXIpIAotCXsKLQkJaW50IGluZGV4ID0gYnVmZmVyLmluZGV4T2YoIlxyXG5cciIpOwotCQlpZiAoaW5kZXggIT0gLTEpCi0JCXsKLQkJICBpbnQgaSA9IGluZGV4ICszOwotCQkgIHdoaWxlIChpIDwgYnVmZmVyLmxlbmd0aCgpICYmIGJ1ZmZlci5zdGFydHNXaXRoKCJcciIsIGkpKQotCQkgICAgIGkrKzsKLQkJCi0JCSAgaWYgKGkgPCBidWZmZXIubGVuZ3RoKCkgJiYgYnVmZmVyLnN0YXJ0c1dpdGgoIlxuIiwgaSkpCi0JCQlyZXR1cm4gaSsxOwotCQkgIGVsc2UKLQkJCXJldHVybiBnZXRGaXJzdENSTEZDUkxGKGJ1ZmZlci5zdWJzdHJpbmcoaW5kZXggKyAzKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCSAgcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBpbmRpY2VzIHdoaWNoIG1hcmtzIHRoZSBzZXBhcmF0aW9uIG9mIHBhcnRzLgotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgaW50W10gZ2V0Qm91bmRhcnlJbmRpY2VzKGJ5dGVbXSBtZXNzYWdlLCBTdHJpbmcgYm91bmRhcnlTdHIpCi0JewotCSAgaW50W10gaW5kaWNlcyA9IG5ldyBpbnRbMjU2XTsKLQkgIGludCBpbmRpY2VzSW5kZXggPSAwOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGJ5dGVbXSBib3VuZGFyeSA9ICgiXHJcbi0tIiArIGJvdW5kYXJ5U3RyKS5nZXRCeXRlcygiVVMtQVNDSUkiKTsKLQotCSAgICBpbnQgaW5kZXggPSAwOwotCSAgICBpbnQgc3RhcnQgPSAwOwotCSAgICB3aGlsZSAoaW5kZXggIT0gLTEpCi0JICAgIHsKLQkgICAgICBpbmRleCA9IGluZGV4T2YobWVzc2FnZSwgYm91bmRhcnksIHN0YXJ0KTsKLQkgICAgICAKLQkgICAgICBpZiAoaW5kZXggIT0gLTEpIAotCSAgICAgIHsKLQkJICAgIHN0YXJ0ID0gaW5kZXggKyBib3VuZGFyeS5sZW5ndGg7Ci0JICAgIAlpbmRpY2VzW2luZGljZXNJbmRleF0gPSBpbmRleDsKLQkgICAgCWluZGljZXNJbmRleCsrOwotCSAgICAgIH0KLQkgICAgfQotICAgICAgCWludFtdIGIgPSBuZXcgaW50W2luZGljZXNJbmRleF07Ci0gICAgCVN5c3RlbS5hcnJheWNvcHkoaW5kaWNlcywgMCwgYiwgMCwgaW5kaWNlc0luZGV4KTsKLSAgICAJaW5kaWNlcyA9IGI7Ci0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JICB7fQotCSAgcmV0dXJuIGluZGljZXM7Ci0JfQotIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGtleSBpbiB0aGUgYnVmZmVyLgotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgaW50IGluZGV4T2YoYnl0ZVtdIGJ1ZmZlciwgYnl0ZVtdIGtleSwgaW50IHN0YXJ0KQotCXsKLQkJaW50IGJ1ZmZlckxlbiA9IGJ1ZmZlci5sZW5ndGg7Ci0JCWludCBrZXlMZW4gPSBrZXkubGVuZ3RoOwotCQlpbnQgaSxqLGsgPSAwOwotCQkKLQkJaWYgKGtleUxlbiA+IGJ1ZmZlckxlbiAtIHN0YXJ0KQotCQl7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkKLQkJZm9yIChrID0gc3RhcnQgKyBrZXlMZW4gLSAxOyBrIDwgYnVmZmVyTGVuOyBrKyspCi0JCXsKLSAgICAgICAgICAgZm9yIChqID0ga2V5TGVuIC0gMSwgaSA9IGs7IChqID49IDApICYmIChidWZmZXJbaV0gPT0ga2V5W2pdKTsgai0tKSAKLSAgICAgICAgICAgewotICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgaWYgKGogPT0gKC0xKSkgewotICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAgICB9Ci0JCX0KLQotCQlyZXR1cm4gLTE7Ci0JfQotCS8qKgotICAgKiBHZXQgY29udGVudHMgb2YgYSByZXNvdXJjZSBhbmQgcmV0dXJuIGFzIGEgaW5wdXQgc3RyZWFtLgotICAgKgotICAgKiBAcGFyYW0gcmVzb3VyY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBnZXQgYW5kIHJldHVybiBhcwotICAgKiAgICAgICAgICAgICAgICAgICAgICBhbiBpbnB1dCBzdHJlYW0uCi0gICAqIEByZXR1cm4gY29udGVudHMgb2YgYSByZXNvdXJjZSBhcyBhbiBpbnB1dCBzdHJlYW0uCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBsb2NhdGVkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRJbnB1dFN0cmVhbShTdHJpbmcgcmVzb3VyY2VOYW1lKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCi0gICAgLy8gSWYgcmVzb3VyY2UgcmVmZXJlbmNlIGlzIGEgVVJMLCB0aGVuIGlucHV0IHN0cmVhbSBmcm9tIFVSTAotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFRyeSB0byBjcmVhdGUgVVJMCi0gICAgICBVUkwgdXJsUmVzb3VyY2UgPSBuZXcgVVJMKHJlc291cmNlTmFtZSk7Ci0KLSAgICAgIC8vIElmIHN1Y2Nlc3NmdWwsIHRoZW4gZ2V0IFVSTCBpbnB1dCBzdHJlYW0KLSAgICAgIGlzID0gZ2V0SW5wdXRTdHJlYW0odXJsUmVzb3VyY2UpOwotICAgIH0KLQotICAgIC8vIEVsc2UgdHJ5IHRvIHJlYWQgcmVzb3VyY2UgZGlyZWN0bHkKLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11ZSkKLSAgICB7Ci0gICAgICBib29sZWFuIGJUcnlDbGFzc0xvYWRlciA9IGZhbHNlOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gT3BlbiBmaWxlIGlucHV0IHN0cmVhbQotICAgICAgICBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0ocmVzb3VyY2VOYW1lKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCB0cnkgY2xhc3MgbG9hZGVyIGZsYWcKLSAgICAgICAgYlRyeUNsYXNzTG9hZGVyID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBzZSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IHRyeSBjbGFzcyBsb2FkZXIgZmxhZwotICAgICAgICBiVHJ5Q2xhc3NMb2FkZXIgPSB0cnVlOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gZ2V0SW5wdXRTdHJlYW0gOiIgKyBlLnRvU3RyaW5nKCkpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0cnkgY2xhc3MgbG9hZGVyLCB0aGVuIHVzZSBpdCB0byBnZXQgaW5wdXQgc3RyZWFtCi0gICAgICBpZiAoYlRyeUNsYXNzTG9hZGVyKQotICAgICAgewotICAgICAgICAvLyBVc2UgY2xhc3MgbG9hZGVyIHRvIGxvYWQgcmVzb3VyY2UKLSAgICAgICAgaXMgPSBDbGFzc0xvYWRlci5nZXRTeXN0ZW1SZXNvdXJjZUFzU3RyZWFtKHJlc291cmNlTmFtZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmVhbSBpcyBudWxsLCB0aGVuIHRocm93IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vdHJ5IHRoaXMKLSAgICAgIGlzID0KLSAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKAotICAgICAgICAgIHJlc291cmNlTmFtZSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmVhbSBpcyBudWxsLCB0aGVuIHRocm93IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vdHJ5IHRoaXMKLSAgICAgIFVSTCBhVVJMID0KLSAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZSgKLSAgICAgICAgICByZXNvdXJjZU5hbWUpOwotICAgICAgaWYgKGFVUkwgIT0gbnVsbCkKLSAgICAgICAgaXMgPSBnZXRJbnB1dFN0cmVhbShhVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAoaXMgPT0gbnVsbCkKLSAgICAgIC8vIFRocm93IGV4ZWNwdGlvbgotICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgcmVzb3VyY2UgZmlsZTogIiArIHJlc291cmNlTmFtZSk7Ci0KLSAgICAvLyBSZXR1cm4gaW5wdXQgc3RyZWFtCi0gICAgcmV0dXJuIGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5wdXQgc3RyZWFtIGZyb20gYSBVUkwuCi0gICAqIEBwYXJhbSB1cmxGaWxlIHRoZSBVUkwgdG8gZ2V0IHRoZSBpbnB1dCBzdHJlYW0gZnJvbS4KLSAgICogQHJldHVybiB0aGUgaW5wdXQgc3RyZWFtIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIFVSTC4KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhdHRlbXB0IHRvIG9wZW4gdGhlIGZpbGUgZGVub3RlZCBieSBVUkwgaGFzIGZhaWxlZC4KLSAgICogQHRocm93cyBDb25uZWN0RXhjZXB0aW9uIGlmIHRyb3VibGUgY29ubmVjdGluZyB0byBVUkwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElucHV0U3RyZWFtIGdldElucHV0U3RyZWFtKFVSTCB1cmxGaWxlKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29ubmVjdEV4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCi0gICAgLy8gQUREOiBob3cgYXJlIFVSTHMgdGhhdCBhcmUgcGFzc3dvcmQgcHJvdGVjdGVkIGhhbmRsZWQ/Pz8/Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBPcGVuIGZpbGUgaW5wdXQgc3RyZWFtCi0gICAgICBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHVybEZpbGUub3BlblN0cmVhbSgpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoQ29ubmVjdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFJlLXRocm93IHRoaXMgZXhjcGV0aW9uIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICAgdGhyb3cgbmV3IGphdmEubmV0LkNvbm5lY3RFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgY29ubmVjdCB0byBVUkw6ICIgKyB1cmxGaWxlLnRvRXh0ZXJuYWxGb3JtKCkgKyAiLiIpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBpbnB1dCBzdHJlYW0KLSAgICByZXR1cm4gaXM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGNvbnRlbnRzIG9mIGEgcmVzb3VyY2UgYW5kIHJldHVybiBhcyBhIGlucHV0IHN0cmVhbS4KLSAgICogQHBhcmFtIGZpbGVMb2NhdGlvbiB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUuCi0gICAqIEByZXR1cm4gY29udGVudHMgb2YgYSByZXNvdXJjZSBhcyBhIGlucHV0IHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBmaWxlRXhpc3RzKFN0cmluZyBmaWxlTG9jYXRpb24pCi0gIHsKLSAgICBib29sZWFuIGZpbGVFeGlzdHMgPSBmYWxzZTsKLQotICAgIC8vIElmIHJlc291cmNlIHJlZmVyZW5jZSBpcyBhIFVSTCwgdGhlbiBpbnB1dCBzdHJlYW0gZnJvbSBVUkwKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUcnkgdG8gY3JlYXRlIFVSTAotICAgICAgVVJMIHVybCA9IG5ldyBVUkwoZmlsZUxvY2F0aW9uKTsKLQotICAgICAgLy8gSWYgc3VjY2Vzc2Z1bCwgdGhlbiB0cnkgdG8gb3BlbiBjb25uZWN0aW9uCi0gICAgICB1cmwub3BlblN0cmVhbSgpOwotICAgICAgZmlsZUV4aXN0cyA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gRWxzZSB0cnkgdG8gcmVhZCByZXNvdXJjZSBkaXJlY3RseQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVlKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlTG9jYXRpb24pOwotCi0gICAgICAgIGZpbGVFeGlzdHMgPSBmaWxlLmV4aXN0cygpOwotICAgICAgfQotCi0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUyKQotICAgICAgewotICAgICAgICBmaWxlRXhpc3RzID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBmbmZlKQotICAgIHsKLSAgICAgIGZpbGVFeGlzdHMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmlsZUV4aXN0cyA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJldHVybiBmaWxlIGV4aXN0cyBpbmRpY2F0b3IKLSAgICByZXR1cm4gZmlsZUV4aXN0czsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbG9jYWwgaG9zdCBuYW1lLgotICAgKiBAcmV0dXJuIHRoZSBsb2NhbCBob3N0IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2NhbEhvc3ROYW1lKCkKLSAgewotICAgIFN0cmluZyBzTG9jYWxIb3N0TmFtZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBsb2NhbCBob3N0IG5hbWUKLSAgICAgIHNMb2NhbEhvc3ROYW1lID0gSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkuZ2V0SG9zdE5hbWUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFNldCBkZWZhdWx0IGxvY2FsIGhvc3QgbmFtZQotICAgICAgc0xvY2FsSG9zdE5hbWUgPSAiMTI3LjAuMC4xIjsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gbG9jYWwgaG9zdCBuYW1lCi0gICAgcmV0dXJuIHNMb2NhbEhvc3ROYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkIGEgVVJMIHN0cmluZyBmcm9tIGhvc3RuYW1lLCBwb3J0IGFuZCBVUk4uCi0gICAqCi0gICAqIEBwYXJhbSBob3N0bmFtZSB0aGUgaG9zdG5hbWUuCi0gICAqIEBwYXJhbSBwb3J0IHRoZSBwb3J0LgotICAgKiBAcGFyYW0gdXJuIHRoZSBVUk4uCi0gICAqIEByZXR1cm4gZm9ybWF0dGVkIFVSTCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXRVUkwoU3RyaW5nIGhvc3RuYW1lLCBTdHJpbmcgcG9ydCwgU3RyaW5nIHVybikKLSAgewotICAgIC8vIEJ1aWxkIFVSTgotICAgIFN0cmluZyBmb3JtYXRVUk4gPSB1cm47Ci0KLSAgICAvLyBJZiBVUk4gZG9lc24ndCBzdGFydCB3aXRoICIvIiwgdGhlbiBhZGQgaXQKLSAgICBpZiAoIShmb3JtYXRVUk4uc3RhcnRzV2l0aCgiLyIpKSkKLSAgICB7Ci0gICAgICAvLyBBZGQgIi8iIHRvIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nCi0gICAgICBmb3JtYXRVUk4gPSAiLyIgKyB1cm47Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIFVSTCBzdHJpbmcKLSAgICByZXR1cm4gImh0dHA6Ly8iICsgaG9zdG5hbWUgKyAiOiIgKyBwb3J0ICsgZm9ybWF0VVJOOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmVwbGFjZSBhbGwgb2YgdGhlIG9jY3VyYW5jZXMgb2YgYSBzdHJpbmcKLSAgICogd2l0aCBhIHN1YnN0aXR1dGlvbiBzdHJpbmcuCi0gICAqCi0gICAqIEBwYXJhbSBzVGV4dCBTdHJpbmcgdG8gdWRwYXRlLgotICAgKiBAcGFyYW0gc0ZpbmQgU3RyaW5nIHRvIGZpbmQuCi0gICAqIEBwYXJhbSBzUmVwbGFjZSBTdHJpbmcgdG8gdXNlIGZvciBzdWJzdGl0dXRpb24uCi0gICAqIEByZXR1cm4gdXBkYXRlZCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyByZXBsYWNlU3RyaW5nKAotICAgIFN0cmluZyBzVGV4dCwKLSAgICBTdHJpbmcgc0ZpbmQsCi0gICAgU3RyaW5nIHNSZXBsYWNlKQotICB7Ci0gICAgaW50IGlQcmV2SW5kZXggPSAwOwotCi0gICAgaW50IGlGaW5kTGVuID0gc0ZpbmQubGVuZ3RoKCk7Ci0gICAgaW50IGlSZXBsYWNlTGVuID0gc1JlcGxhY2UubGVuZ3RoKCk7Ci0KLSAgICBTdHJpbmcgc1VwZGF0ZWRUZXh0ID0gc1RleHQ7Ci0KLSAgICAvLyBSZXBsYWNlIGFsbCBvY2N1cmFuY2VzIG9mIHRoZSBmaW5kIHN0cmluZwotICAgIGZvciAoaW50IGlJbmRleCA9IHNVcGRhdGVkVGV4dC5pbmRleE9mKHNGaW5kKTsKLSAgICAgIGlJbmRleCA8IChzVXBkYXRlZFRleHQubGVuZ3RoKCkgLSAxKSAmJiBpSW5kZXggIT0gLTE7Ci0gICAgICBpSW5kZXggPSBzVXBkYXRlZFRleHQuaW5kZXhPZihzRmluZCwgaVByZXZJbmRleCArIGlSZXBsYWNlTGVuKSkKLSAgICB7Ci0gICAgICAvLyBTZXQgdXBkYXRlZCB0ZXh0IGZyb20gdGhlIGZyb250IHBvcnRpb24gKyByZXBsYWNlbWVudCB0ZXh0ICsgYmFjayBwb3J0aW9uCi0gICAgICBzVXBkYXRlZFRleHQgPQotICAgICAgICBzVXBkYXRlZFRleHQuc3Vic3RyaW5nKDAsIGlJbmRleCkKLSAgICAgICAgICArIHNSZXBsYWNlCi0gICAgICAgICAgKyBzVXBkYXRlZFRleHQuc3Vic3RyaW5nKGlJbmRleCArIGlGaW5kTGVuKTsKLQotICAgICAgLy8gU2V0IHRoZSBwcmV2aW91cyBpbmRleCBmaWVsZAotICAgICAgaVByZXZJbmRleCA9IGlJbmRleDsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdXBkYXRlZCB0ZXh0IHN0cmluZwotICAgIHJldHVybiBzVXBkYXRlZFRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCBzdHJpbmcgdG8gaGV4IHN0cmluZy4KLSAgICogQHBhcmFtIGRhdGEgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHJldHVybiBoZXggc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9IZXhTdHJpbmcoU3RyaW5nIGRhdGEpCi0gIHsKLSAgICBjaGFyW10gSEVYX0NIQVJTID0KLSAgICAgIHsKLSAgICAgICAgJzAnLAotICAgICAgICAnMScsCi0gICAgICAgICcyJywKLSAgICAgICAgJzMnLAotICAgICAgICAnNCcsCi0gICAgICAgICc1JywKLSAgICAgICAgJzYnLAotICAgICAgICAnNycsCi0gICAgICAgICc4JywKLSAgICAgICAgJzknLAotICAgICAgICAnQScsCi0gICAgICAgICdCJywKLSAgICAgICAgJ0MnLAotICAgICAgICAnRCcsCi0gICAgICAgICdFJywKLSAgICAgICAgJ0YnIH07Ci0KLSAgICAvLyBHZXQgc3RyaW5nIGFzIGJ5dGUgYXJyYXkKLSAgICBieXRlW10gYnl0ZURhdGEgPSBkYXRhLmdldEJ5dGVzKCk7Ci0KLSAgICAvLyBHZXQgbGVuZ3RoCi0gICAgaW50IGxlbmd0aCA9IGJ5dGVEYXRhLmxlbmd0aDsKLQotICAgIC8vIENyZWF0ZSBDaGFyIGJ1ZmZlcgotICAgIGNoYXJbXSBjaGFyQnVmZmVyID0gbmV3IGNoYXJbbGVuZ3RoICogMl07Ci0KLSAgICBpbnQgbmV4dDsKLSAgICBmb3IgKGludCBieXRlQ250ID0gMCwgY2hhckNudCA9IDA7IGJ5dGVDbnQgPCBsZW5ndGg7KQotICAgIHsKLSAgICAgIG5leHQgPSBieXRlRGF0YVtieXRlQ250KytdOwotICAgICAgY2hhckJ1ZmZlcltjaGFyQ250KytdID0gSEVYX0NIQVJTWyhuZXh0ID4+PiA0KSAmIDB4MEZdOwotICAgICAgY2hhckJ1ZmZlcltjaGFyQ250KytdID0gSEVYX0NIQVJTW25leHQgJiAweDBGXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IFN0cmluZyhjaGFyQnVmZmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGJ5dGUgYnVmZmVyIHRvIGhleCBzdHJpbmcuCi0gICAqIEBwYXJhbSBkYXRhICBhIGJ5dGUgYXJyYXkuCi0gICAqIEByZXR1cm4gaGV4IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvSGV4U3RyaW5nKGJ5dGVbXSBieXRlRGF0YSkKLSAgewotICAgIGNoYXJbXSBIRVhfQ0hBUlMgPQotICAgICAgewotICAgICAgICAnMCcsCi0gICAgICAgICcxJywKLSAgICAgICAgJzInLAotICAgICAgICAnMycsCi0gICAgICAgICc0JywKLSAgICAgICAgJzUnLAotICAgICAgICAnNicsCi0gICAgICAgICc3JywKLSAgICAgICAgJzgnLAotICAgICAgICAnOScsCi0gICAgICAgICdBJywKLSAgICAgICAgJ0InLAotICAgICAgICAnQycsCi0gICAgICAgICdEJywKLSAgICAgICAgJ0UnLAotICAgICAgICAnRicgfTsKLQotCi0gICAgLy8gR2V0IGxlbmd0aAotICAgIGludCBsZW5ndGggPSBieXRlRGF0YS5sZW5ndGg7Ci0KLSAgICAvLyBDcmVhdGUgQ2hhciBidWZmZXIKLSAgICBjaGFyW10gY2hhckJ1ZmZlciA9IG5ldyBjaGFyW2xlbmd0aCAqIDJdOwotCi0gICAgaW50IG5leHQ7Ci0gICAgZm9yIChpbnQgYnl0ZUNudCA9IDAsIGNoYXJDbnQgPSAwOyBieXRlQ250IDwgbGVuZ3RoOykKLSAgICB7Ci0gICAgICBuZXh0ID0gYnl0ZURhdGFbYnl0ZUNudCsrXTsKLSAgICAgIGNoYXJCdWZmZXJbY2hhckNudCsrXSA9IEhFWF9DSEFSU1sobmV4dCA+Pj4gNCkgJiAweDBGXTsKLSAgICAgIGNoYXJCdWZmZXJbY2hhckNudCsrXSA9IEhFWF9DSEFSU1tuZXh0ICYgMHgwRl07Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ldyBTdHJpbmcoY2hhckJ1ZmZlcik7Ci0gIH0KLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBNSU1FIGNoYXJzZXQgZnJvbSBhIEhUVFAgaGVhZGVycy4KLSAgICogQHBhcmFtIGh0dHBIZWFkZXJzIFN0cmluZyBvZiBIVFRQIGhlYWRlci4KLSAgICogQHJldHVybiB0aGUgTUlNRSBjaGFyc2V0IHN0cmluZy4KLSAgICogQGF1dGhvciBLLk5ha2Fnb21lQEJlYWNvbklUIEphcGFuIFNJRyAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEhUVFBDaGFyc2V0KFN0cmluZyBodHRwSGVhZGVycykKLSAgewotICAgIFN0cmluZyBtaW1lQ2hhcnNldCA9IG51bGw7Ci0KLSAgICBtaW1lQ2hhcnNldCA9IGh0dHBIZWFkZXJzLnRvVXBwZXJDYXNlKCk7Ci0gICAgaW50W10gaW5kZXggPSB7IC0xLCAtMSwgLTEgfTsKLSAgICBpbnQgaW5kZXhTID0gbWltZUNoYXJzZXQuaW5kZXhPZigiQ0hBUlNFVCIpOwotICAgIGludCBpbmRleEUgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKLSAgICBpZiAoaW5kZXhTIDwgMTcpCi0gICAgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgICBpbmRleFMgPSBtaW1lQ2hhcnNldC5pbmRleE9mKCI9IiwgaW5kZXhTICsgNyk7Ci0gICAgaWYgKGluZGV4UyA9PSAtMSkKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICAgIGluZGV4UysrOwotICAgIGluZGV4WzBdID0gbWltZUNoYXJzZXQuaW5kZXhPZigiJyIsIGluZGV4Uyk7Ci0gICAgaW5kZXhbMV0gPSBtaW1lQ2hhcnNldC5pbmRleE9mKCJcclxuIiwgaW5kZXhTKTsKLSAgICBpbmRleFsyXSA9IG1pbWVDaGFyc2V0LmluZGV4T2YoIlwiIiwgaW5kZXhTKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaW5kZXhbaV0gIT0gLTEgJiBpbmRleEUgPiBpbmRleFtpXSkKLSAgICAgIHsKLSAgICAgICAgaW5kZXhFID0gaW5kZXhbaV07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGluZGV4RSAhPSBJbnRlZ2VyLk1BWF9WQUxVRSkKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9IGh0dHBIZWFkZXJzLnN1YnN0cmluZyhpbmRleFMsIGluZGV4RSk7Ci0gICAgICBtaW1lQ2hhcnNldC50cmltKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9ICIiOwotICAgIH0KLSAgICByZXR1cm4gbWltZUNoYXJzZXQ7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgbWVzc2FnZSBpcyBhIHNpbXBsZSBTT0FQIG1lc3NhZ2Ugb3Igd2hldGhlciBpdCBpcyBhIFNPQVAgbWVzc2Fnd2Ugd2l0aCBhdHRhY2htZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc011bHRpcGFydFJlbGF0ZWRNZXNzYWdlKFN0cmluZyBodHRwSGVhZGVycykKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICB0cnkgCi0gICAgewotICAgICAgLy8gY2hlY2sgaGVhZGVyIGZvciBtaW1lIHZlcnNpb24gYW5kIGJvdW5kYXJ5Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFKTsKLSAgICAgIGlmIChjb250ZW50VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyB0aGVyZSBpcyBubyBjb250ZW50VHlwZSwgY2hlY2sgaWYgdGhlcmUgaXMgYSBib3VuZGFyeSBhdHRyaWJ1dGUKLSAgICAgICAgU3RyaW5nIGJvdW5kYXJ5ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAiYm91bmRhcnkiKTsKLSAgICAgICAgaWYgKChib3VuZGFyeSAhPSBudWxsKSAmJiAoIWJvdW5kYXJ5LmVxdWFscygiIikpKQotICAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJtdWx0aXBhcnQvcmVsYXRlZCIpOwotICAgICAgfQotICAgIH0gCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IGZhbHNlOyAKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEh0dHBIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIGh0dHBIZWFkZXJzLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgeyBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgCXRyeQotICAJewotICAgICByZXN1bHQgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShodHRwSGVhZGVycywgYXR0cmlidXRlTmFtZSk7Ci0gIAl9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IG51bGw7IAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsIFN0cmluZyBzdWJBdHRyaWJ1dGVOYW1lKQotICB7IFN0cmluZyByZXN1bHQgPSBudWxsOwotICAJdHJ5Ci0gIAl7Ci0gICAgIHJlc3VsdCA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKGh0dHBIZWFkZXJzLCBhdHRyaWJ1dGVOYW1lLCBzdWJBdHRyaWJ1dGVOYW1lKTsKLSAgCX0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0JeyAKLSAgICAJcmVzdWx0ID0gbnVsbDsgCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIG1pbWVIZWFkZXJzLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgeyBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgCXRyeQotICAJewotICAgICByZXN1bHQgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZShtaW1lSGVhZGVycywgYXR0cmlidXRlTmFtZSk7Ci0gIAl9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IG51bGw7IAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBtaW1lSGVhZGVycywgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsIFN0cmluZyBzdWJBdHRyaWJ1dGVOYW1lKQotICB7IFN0cmluZyByZXN1bHQgPSBudWxsOwotICAJdHJ5Ci0gIAl7Ci0gICAgIHJlc3VsdCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKG1pbWVIZWFkZXJzLCBhdHRyaWJ1dGVOYW1lLCBzdWJBdHRyaWJ1dGVOYW1lKTsKLSAgCX0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0JeyAKLSAgICAJcmVzdWx0ID0gbnVsbDsgCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gfQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBYTUwgZW5jb2RpbmcgZnJvbSBhIFNPQVAgTWVzc2FnZXMuCi0gICAqIEBwYXJhbSBtZXNzYWdlICBTT0FQIE1lc3NhZ2UgU3RyaW5nLiAKLSAgICogQHJldHVybiBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgWE1MLgotICAgKiBAYXV0aG9yIEsuTmFrYWdvbWVAQmVhY29uSVQgSmFwYW4gU0lHIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0WE1MRW5jb2RpbmcoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgeG1sRGVmID0gbnVsbDsKLQotICAgIGludCBpbmRleFMgPSBtZXNzYWdlLmluZGV4T2YoIjw/eG1sIik7Ci0gICAgaW50IGluZGV4RSA9IC0xOwotICAgIGlmIChpbmRleFMgIT0gLTEpCi0gICAgewotICAgICAgaW5kZXhFID0gbWVzc2FnZS5pbmRleE9mKCI/PiIsIGluZGV4Uyk7Ci0gICAgICBpZiAoaW5kZXhFID4gaW5kZXhTKQotICAgICAgewotICAgICAgICB4bWxEZWYgPSBtZXNzYWdlLnN1YnN0cmluZyhpbmRleFMsIGluZGV4RSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhtbERlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIGluZGV4UyA9IHhtbERlZi5pbmRleE9mKCJlbmNvZGluZyIpOwotICAgICAgaWYgKGluZGV4UyA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgeG1sRGVmID0gIiI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHhtbERlZiA9IHhtbERlZi5zdWJzdHJpbmcoaW5kZXhTICsgOCk7Ci0gICAgICAgIHhtbERlZiA9IHhtbERlZi50cmltKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgaWYgKHhtbERlZi5sZW5ndGgoKSA+IDMpCi0gICAgewotICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoIj0iKTsKLSAgICAgIGlmIChpbmRleFMgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgeG1sRGVmID0geG1sRGVmLnN1YnN0cmluZygxKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuICIiOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICh4bWxEZWYubGVuZ3RoKCkgPiAzKQotICAgIHsKLSAgICAgIFN0cmluZyBlbmQgPSAiXCIiOwotICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoZW5kKTsKLSAgICAgIGlmIChpbmRleFMgIT0gMCkKLSAgICAgIHsKLSAgICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoKGVuZCA9ICInIikpOwotICAgICAgfQotICAgICAgaWYgKGluZGV4UyA9PSAwKQotICAgICAgewotICAgICAgICBpbmRleEUgPSB4bWxEZWYuaW5kZXhPZihlbmQsIDMpOwotICAgICAgICBpZiAoaW5kZXhFICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgeG1sRGVmID0geG1sRGVmLnN1YnN0cmluZygxLCBpbmRleEUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHhtbERlZiA9ICIiOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHhtbERlZiA9ICIiOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geG1sRGVmOwotICB9Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIHByaXZhdGUgc3RhdGljIFJlc291cmNlQnVuZGxlIGphdmFFbmNvZGluZ1Jlc291cmNlID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpBVkFfRU5DT0RJTkdfUkVTT1VSQ0UgPQotICAgICJvcmcud3NpLnRlc3QudXRpbC5KYXZhRW5jb2RpbmciOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9FTkNPRElOR19ERUZBVUxUID0gIlVURi04IjsKLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBKYXZhIFZNIHN1cHBvcnRlZCBjaGFyYWN0ZXIgZW5jb2RpbmcuCi0gICAqIAotICAgKiBAcGFyYW0gbWltZUVuY29kaW5nICBzdHJpbmcgb2YgTUlNRShJQU5BKSBjaGFyYWN0ZXIgZW5jb2RpbmcuIAotICAgKiBAcmV0dXJuIHN0cmluZyBvZiBjaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IEphdmEgVk0uCi0gICAqIEBhdXRob3IgSy5OYWthZ29tZUBCZWFjb25JVCBKYXBhbiBTSUcgCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKYXZhRW5jb2RpbmcoU3RyaW5nIG1pbWVFbmNvZGluZykKLSAgewotICAgIGlmIChtaW1lRW5jb2RpbmcgPT0gbnVsbCB8fCBtaW1lRW5jb2RpbmcubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gSkFWQV9FTkNPRElOR19ERUZBVUxUOwotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoamF2YUVuY29kaW5nUmVzb3VyY2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF2YUVuY29kaW5nUmVzb3VyY2UgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoSkFWQV9FTkNPRElOR19SRVNPVVJDRSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gamF2YUVuY29kaW5nUmVzb3VyY2UuZ2V0U3RyaW5nKG1pbWVFbmNvZGluZyk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gbWltZUVuY29kaW5nOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGFuIGFycmF5IHRvIGEgVmVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGFycmF5ICB0aGUgYXJyYXkgdG8gYmUgY29udmVydGVkIC4KLSAgICogQHJldHVybiBjb252ZXJ0ZWQgVmVjdG9yIChudWxsIGlmIGFycmF5IGlzIG51bGwsIGVtcHR5IGlmIGVtcHR5KS4KLSAgICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCBJQk0KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmVjdG9yIGFycmF5VG9WZWN0b3IoT2JqZWN0W10gYXJyYXkpCi0gIHsKLSAgICBpZiAoYXJyYXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcihhcnJheS5sZW5ndGgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICB2LmFkZChhcnJheVtpXSk7Ci0gICAgcmV0dXJuIHY7Ci0gIH0KLQotICAvKioKLSAgICogRGVzaWduYXRlcyBsZWdhbCB2ZXJzaW9ucyBmb3IgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQKLSAgICogQHBhcmFtIG5hbWUgLSB0aGUgVEFEIG5hbWUKLSAgICogQHBhcmFtIHZlcnNpb24gLSB0aGUgbGVnYWwgdmVyc2lvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVmFsaWRQcm9maWxlVEFEVmVyc2lvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHZlcnNpb24pCi0gIHsKLSAgICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucyA9PSBudWxsKQotICAgICAgICAgIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zLnB1dChuYW1lLCB2ZXJzaW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENoZWNrcyB0byBlbnN1cmUgdGhhdCB2ZXJzaW9uIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIAotICAgKiBkb2N1bWVudCBpcyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSB0ZXN0IHRvb2xzLgotICAgKiBAcGFyYW0gcHJvZmlsZUFzc2VydGlvbnMgLSBhIHByb2ZpbGUgVEFELgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24KLSAgICogICAgICAgICBkb2N1ZW1lbnQgaXMgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgdGVzdCB0b29scy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkUHJvZmlsZVRBRFZlcnNpb24oUHJvZmlsZUFzc2VydGlvbnMgcHJvZmlsZUFzc2VydGlvbnMpCi0gIHsKLQotICAgIFN0cmluZyBuYW1lID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFETmFtZSgpOwotICAgIFN0cmluZyB2ZXJzaW9uID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFEVmVyc2lvbigpOwotICAgIAotICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucyA9PSBudWxsKSB7Ci0gICAgICAgU3RyaW5nIHZlcnNpb25zW11bXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRBbGxUQURWZXJzaW9ucygpOwotICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVyc2lvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgIHJlZ2lzdGVyVmFsaWRQcm9maWxlVEFEVmVyc2lvbih2ZXJzaW9uc1tpXVswXSwgdmVyc2lvbnNbaV1bMV0pOwotICAgIH0KLQotICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgcmV0dXJuIGNoZWNrVmVyc2lvbk51bWJlcigoU3RyaW5nKSB2YWxpZFByb2ZpbGVUQURWZXJzaW9ucy5nZXQobmFtZSksCi0gICAgICAgICAgICAgICAgdmVyc2lvbik7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRvIGVuc3VyZSB0aGF0IHZlcnNpb24gbnVtYmVyIG9mIHRoZSBhY3R1YWwgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbiAKLSAgICogZG9jdW1lbnQgaXMgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgdGVzdCB0b29scy4KLSAgICogQHBhcmFtIHN1cHBvcnRlZFZlcnNpb24gLSBzdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIgb2YgcHJvZmlsZSBUQUQuCi0gICAqIEBwYXJhbSBhY3R1YWxWZXJzaW9uICAgIC0gYWN0dWFsIHZlcnNpb24gbnVtYmVyIG9mIHByb2ZpbGUgVEFELiAKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgYWN0dWFsIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24KLSAgICogICAgICAgICBkb2N1bWVudCBpcyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSB0ZXN0IHRvb2xzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjaGVja1ZlcnNpb25OdW1iZXIoCi0gICAgU3RyaW5nIHN1cHBvcnRlZFZlcnNpb24sCi0gICAgU3RyaW5nIGFjdHVhbFZlcnNpb24pCi0gIHsKLSAgICBib29sZWFuIHZhbGlkVmVyc2lvbiA9IHRydWU7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3VwcG9ydGVkVmVyc2lvblRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3VwcG9ydGVkVmVyc2lvbiwgIi4iKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBhY3R1YWxWZXJzaW9uVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihhY3R1YWxWZXJzaW9uLCAiLiIpOwotCi0gICAgICB3aGlsZSAoc3VwcG9ydGVkVmVyc2lvblRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkgJiYgdmFsaWRWZXJzaW9uKQotICAgICAgewotICAgICAgICBpbnQgc3VwcG9ydGVkVmVyc2lvblRva2VuID0KLSAgICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KHN1cHBvcnRlZFZlcnNpb25Ub2tlbml6ZXIubmV4dFRva2VuKCkpOwotICAgICAgICBpZiAoYWN0dWFsVmVyc2lvblRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgYWN0dWFsVmVyc2lvblRva2VuID0KLSAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQoYWN0dWFsVmVyc2lvblRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICAgICAgaWYgKHN1cHBvcnRlZFZlcnNpb25Ub2tlbiA+IGFjdHVhbFZlcnNpb25Ub2tlbikgYnJlYWs7Ci0gICAgICAgICAgZWxzZSB2YWxpZFZlcnNpb24gPSAoc3VwcG9ydGVkVmVyc2lvblRva2VuID49IGFjdHVhbFZlcnNpb25Ub2tlbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHZhbGlkVmVyc2lvbiA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRWZXJzaW9uOwotICB9Ci0gIAotICAvKioKLSAgICogSWRlbnRpZmllcyB0aGUgcm9vdCBwYXJ0IGluIHRoZSBsaXN0IHVzaW5nIHRoZSAic3RhcnQiIGF0dHJpYnV0ZS4KLSAgICogSWYgdGhlICJzdGFydCIgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0IHRoZW4gdGhlIGZpcnN0IHBhcnQgaXMgZGVzaWduYXRlZCB0aGUgcm9vdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnQgZmluZFJvb3RQYXJ0KFN0cmluZyBodHRwSGVhZGVycywgQ29sbGVjdGlvbiBwYXJ0cykKLSAgewotICAJTWltZVBhcnQgcm9vdCA9IG51bGw7Ci0gICAgU3RyaW5nIHN0YXJ0ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAic3RhcnQiKTsKLSAgICBpZiAoIXBhcnRzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICAvLyBkZWZhdWx0IHRvIHRoZSBmaXJzdCBwYXJ0IGluIHRoZSBjb2xsZWN0aW9uCi0gICAgICByb290ID0gKE1pbWVQYXJ0KXBhcnRzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIAkKLSAgICAgIGlmICgoc3RhcnQgIT0gbnVsbCkgJiYgKCFzdGFydC5lcXVhbHMoIiIpKSkKLSAgICAgIHsKLSAgICAJSXRlcmF0b3IgaSA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgCWJvb2xlYW4gcm9vdE5vdEZvdW5kID0gdHJ1ZTsKLSAgICAJd2hpbGUgKGkuaGFzTmV4dCgpICYmIHJvb3ROb3RGb3VuZCkKLSAgICAJewotICAgIAkgIE1pbWVQYXJ0IHBhcnQgPSAoTWltZVBhcnQpaS5uZXh0KCk7Ci0gICAgCSAgU3RyaW5nIGhlYWRlcnMgPSBwYXJ0LmdldEhlYWRlcnMoKTsKLSAgICAJICBpZiAoaGVhZGVycyAhPSBudWxsKQotICAgIAkgIHsKLSAgICAgICAgICAgIFN0cmluZyBjb250ZW50SWQgPSBVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKGhlYWRlcnMsIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfSUQpOwotICAgICAgICAgICAgaWYgKHN0YXJ0LmVxdWFscyhjb250ZW50SWQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByb290ID0gcGFydDsKLQkJCSAgcm9vdE5vdEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgCSAgfQotICAgIAl9Ci0gICAgICB9Ci0gICAgfQotICAJcmV0dXJuIHJvb3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBEZWNvZGVzIHRoZSBnaXZlbiBlbmNvZGVkIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGRlY29kZUJhc2U2NChTdHJpbmcgc3RyKQotICB7Ci0gIAl0cnkKLSAgCXsKLSAgICAJc3VuLm1pc2MuQkFTRTY0RGVjb2RlciBkZWNvZGVyID0gIG5ldyBzdW4ubWlzYy5CQVNFNjREZWNvZGVyKCk7Ci0gIAkgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlQnVmZmVyKHN0cik7Ci0gIAl9Ci0gIAljYXRjaCAoRXhjZXB0aW9uIGUpCi0gIAl7Ci0gIAkJcmV0dXJuIG5ldyBieXRlWzBdOwotICAJfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuY29kZXMgdGhlIGdpdmVuIGJ5dGUgYXJyYXkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBlbmNvZGVCYXNlNjQoYnl0ZVtdIGJ1ZmZlcikKLSAgeyAgICAKLSAgCXN1bi5taXNjLkJBU0U2NEVuY29kZXIgZW5jb2RlciA9ICBuZXcgc3VuLm1pc2MuQkFTRTY0RW5jb2RlcigpOwotICAJcmV0dXJuIGVuY29kZXIuZW5jb2RlQnVmZmVyKGJ1ZmZlcik7ICAKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnRzIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gIAlieXRlW10gYnVmZmVyID0gbnVsbDsKLSAgCXRyeQotCXsgCi0gIAkgIGJ1ZmZlciA9IG1lc3NhZ2UuZ2V0Qnl0ZXMoZW5jb2RpbmcpOwotCX0KLSAgCWNhdGNoIChFeGNlcHRpb24gZSkKLQl7Ci0gIAkJcmV0dXJuIG51bGw7Ci0JfQotICAJcmV0dXJuIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoYnVmZmVyLCBodHRwSGVhZGVycywgZW5jb2RpbmcpOwotICB9Ci0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnRzIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoYnl0ZVtdIG1lc3NhZ2UsIFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gICAgTWltZVBhcnRzIG1pbWVQYXJ0cyA9IG5ldyBNaW1lUGFydHNJbXBsKCk7Ci0gICAgU3RyaW5nIGJvdW5kYXJ5ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAiYm91bmRhcnkiKTsKLSAgICBBcnJheUxpc3QgcGFydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCi0gICAgaWYgKGJvdW5kYXJ5ID09IG51bGwpCi0gICAgewotICAgIAkvLyBhc3N1bWUgaXQgaXMgYSBzaW1wbGUgU09BUCBtZXNzYWdlCi0gICAgCXJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIHN0YXJ0ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAic3RhcnQiKTsKLSAgICAgIGludFtdIGluZGljZXMgPSBVdGlscy5nZXRCb3VuZGFyeUluZGljZXMobWVzc2FnZSwgYm91bmRhcnkpOwotICAgICAgYm9vbGVhbiByb290Tm90Rm91bmQgPSB0cnVlOwotICAgICAgCi0gICAgICBmb3IgKGludCBpPSBpbmRpY2VzLmxlbmd0aCAtIDI7IGk+PTA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgCXsKLSAgICAgICAgICBNaW1lUGFydCBwYXJ0ID0gbmV3IE1pbWVQYXJ0SW1wbCgpOwotICAgICAgICAgIGludCBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSwgaW5kaWNlc1tpXSk7Ci0gICAgICAgICAgaWYgKChpbmRleCA+IGluZGljZXNbaV0pICYmIChpbmRleCA8IGluZGljZXNbaSsxXSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gdGhlIGJvdW5kYXJ5IHN0cmluZyAmIG1pbWUgaGVhZGVycyAoaW5jbHVkZSB0aGUgdHJhaWxpbmcgQ1JMRiBDUkxGKQotICAgICAgICAJU3RyaW5nIHN0ciA9IG5ldyBTdHJpbmcobWVzc2FnZSwgaW5kaWNlc1tpXSwgKGluZGV4IC0gaW5kaWNlc1tpXSksICJVUy1BU0NJSSIpOwotICAgICAgICAJU3RyaW5nIGRlbGltaXRlciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmluZGV4T2YoIlxyXG4iLCAyKSArIDIpOwotCi0gICAgICAgIAlpZiAoaSA9PSBpbmRpY2VzLmxlbmd0aCAtMikKLSAgICAgICAgCXsKLSAgICAgICAgCSAgU3RyaW5nIGVuZERlbGltaXRlciA9IG5ldyBTdHJpbmcobWVzc2FnZSwgaW5kaWNlc1tpICsgMV0sIG1lc3NhZ2UubGVuZ3RoIC0gaW5kaWNlc1tpICsgMV0sICJVUy1BU0NJSSIpOwotICAgICAgICAJICBpbnQgaiA9IHN0ci5pbmRleE9mKCJcclxuIiwgMik7Ci0gICAgICAgIAkgIGlmIChqICE9IC0xKQotICAgICAgICAJICAgIGVuZERlbGltaXRlciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmluZGV4T2YoIlxyXG4iLCAyKSArIDIpOwotICAgICAgICAgICAgICBwYXJ0LnNldEJvdW5kYXJ5U3RyaW5ncyhuZXcgU3RyaW5nW117ZGVsaW1pdGVyLCBlbmREZWxpbWl0ZXJ9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCWVsc2UKLSAgICAgICAgCSAgcGFydC5zZXRCb3VuZGFyeVN0cmluZ3MobmV3IFN0cmluZ1tde2RlbGltaXRlcn0pOwotICAgICAgIAotICAgICAgICAJLy8gdGhlIGhlYWRlcnMKLSAgICAgICAgCVN0cmluZyBoZWFkZXJzID0gc3RyLnN1YnN0cmluZyhkZWxpbWl0ZXIubGVuZ3RoKCkpOwotICAgICAgICAgICAgaWYgKGhlYWRlcnMuc3RhcnRzV2l0aCgiXHJcbiIpKQotICAgICAgICAgICAgewotICAgICAgICAgIAkgIC8vIG5vIGhlYWRlcnMgcHJlc2VudAotICAgICAgICAgIAkgIHBhcnQuc2V0SGVhZGVycygiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgCSAgcGFydC5zZXRIZWFkZXJzKGhlYWRlcnMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyB0aGUgY29udGVudAotICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRJZCA9IFV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoaGVhZGVycywgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IGluZGljZXNbaSsxXSAtIChpbmRleCk7Ci0gICAgICAgICAJYnl0ZVtdIGNvbnRlbnQgPSBuZXcgYnl0ZVtzaXplXTsKLSAgICAgIAkgICAgU3lzdGVtLmFycmF5Y29weShtZXNzYWdlLCBpbmRleCwgY29udGVudCwgMCwgc2l6ZSk7Ci0gICAgICAJICAKLSAgICAgICAgICAgIGlmICgocm9vdE5vdEZvdW5kICYmIChpID09IDApKSB8fAotICAgICAgICAgICAgCSgoc3RhcnQgIT0gbnVsbCkgJiYgKCFzdGFydC5lcXVhbHMoIiIpKSAmJiAoc3RhcnQuZXF1YWxzKGNvbnRlbnRJZCkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gcm9vdCBwYXJ0IC0tIGRvIG5vdCBlbmNvZGUKLSAgICAgICAgICAgICAgcGFydC5zZXRDb250ZW50KG5ldyBTdHJpbmcoY29udGVudCwgZW5jb2RpbmcpKTsKLSAgICAgICAgICAgICAgbWltZVBhcnRzLnNldFJvb3RQYXJ0KHBhcnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgdHJhbnNmZXJFbmNvZGluZyA9ICBVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKGhlYWRlcnMsIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkcpOwotICAgCi0gICAgICAgICAgICAgIGlmICgodHJhbnNmZXJFbmNvZGluZyAhPSBudWxsKSAmJiB0cmFuc2ZlckVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpKQotICAgICAgICAgICAgICAJcGFydC5zZXRDb250ZW50KG5ldyBTdHJpbmcoY29udGVudCwgZW5jb2RpbmcpKTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBhcnQuc2V0Q29udGVudChVdGlscy5lbmNvZGVCYXNlNjQoY29udGVudCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICBwYXJ0cy5hZGQocGFydCk7Ci0gICAgICAgICB9Ci0gICAgCX0KLSAgICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIAl7Ci0gICAgCSAgcmV0dXJuIG51bGw7Ci0gICAgCX0KLSAgICAgIH0KLSAgICAgIGludCBzaXplID0gcGFydHMuc2l6ZSgpOwotICAgICAgZm9yIChpbnQgaSA9IHNpemUtMTsgaT49MDsgaS0tKQotICAgICAgICAgbWltZVBhcnRzLmFkZFBhcnQoKE1pbWVQYXJ0KXBhcnRzLmdldChpKSk7Ci0gICAgfQotICAgIHJldHVybiBtaW1lUGFydHM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1hNTFN0cmluZyhNaW1lUGFydHMgbWltZVBhcnRzKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIC8vIEFkZCBtZXNzYWdlIGNvbnRlbnQgd2l0aCBhdHRhY2htZW50cyBlbGVtZW50Ci0gICAgcHcucHJpbnQoIjwiICsgV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UX1dJVEhfQVRUQUNITUVOVFMpOwotICAgIHB3LnByaW50KCI+Iik7Ci0KLSAgICBDb2xsZWN0aW9uIHBhcnRMaXN0ID0gbWltZVBhcnRzLmdldFBhcnRzKCk7Ci0gICAgaWYgKCFwYXJ0TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgIAlJdGVyYXRvciBpTWltZVBhcnRzID0gcGFydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgCXdoaWxlIChpTWltZVBhcnRzLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgCSAgTWltZVBhcnQgbWltZVBhcnQgPSAoTWltZVBhcnQpaU1pbWVQYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAJICBwdy5wcmludChtaW1lUGFydC50b1hNTFN0cmluZygiIikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWRkIGVuZCBtZXNzYWdlIGVsZW1lbnQKLSAgICAgICAgcHcucHJpbnRsbigiPC8iICsgV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UX1dJVEhfQVRUQUNITUVOVFMgKyAiPiIpOwotICAgIC8vIFJldHVybiBzdHJpbmcKLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKQotICB7Ci0gIAl0cnkKLQl7Ci0gIAkgIEZpbGVJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oImQ6XFxiLnhtbCIpOwotICAJICBpbnQgaSA9IGlucHV0U3RyZWFtLmF2YWlsYWJsZSgpOwotICAJICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbaV07Ci0gIAkgIGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKLSAgCSAgU3RyaW5nIG1lc3NhZ2UgPSBuZXcgU3RyaW5nKGJ1ZmZlcik7Ci0gIAkgIG1lc3NhZ2UgPSBYTUxVdGlscy54bWxSZW1vdmVFc2NhcGVkU3RyaW5nKG1lc3NhZ2UpOwotICAJICBTdHJpbmcgaGVhZGVycyA9IFV0aWxzLmdldEhUVFBIZWFkZXJzKG1lc3NhZ2UpOwotICAJICBNaW1lUGFydHMgcGFydHMgPSBVdGlscy5wYXJzZU11bHRpcGFydFJlbGF0ZWRNZXNzYWdlKG1lc3NhZ2UsIGhlYWRlcnMsIFV0aWxzLkpBVkFfRU5DT0RJTkdfREVGQVVMVCk7Ci0gIAkgIFN5c3RlbS5vdXQucHJpbnRsbihVdGlscy50b1hNTFN0cmluZyhwYXJ0cykpOwotCX0KLSAgCWNhdGNoIChFeGNlcHRpb24gZSl7fQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBBbmFseXplckNvbmZpZyBnZXRBbmFseXplckNvbmZpZyhSZXBvcnRlciByZXBvcnRlcikgCi0gIHsKLQlBbmFseXplckNvbmZpZyByZXN1bHQgPSBudWxsOwotCWlmIChyZXBvcnRlciAhPSBudWxsKQotCXsKLQkgIHRyeQotCSAgewotCQlyZXN1bHQgPSByZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRSZXBvcnRDb250ZXh0KCkuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpOwotCSAgfQotCSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgewotCQlyZXN1bHQgPSBudWxsOwotCSAgfQotCX0KLQlyZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTRExVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTRExVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZGU2YzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9XU0RMVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotCi0vKioKLSAqIFRoZSB1dGlsaXR5IGNsYXNzIHRvIGF1dG9tYXRlIFdTREwgcHJvY2Vzc2luZy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NETFV0aWwKLXsKLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBleHRyYWN0cyBsaXN0IG9mIHBhcnRzIGZvciB0aGUgZ2l2ZW4gc29hcGJpbmQ6Ym9keSwKLSAgICogYmluZGluZyBvcGVyYXRpb24sIG1lc3NhZ2UsIGFuZCBzdHlsZS4KLSAgICogCi0gICAqIEBwYXJhbSBvcCBhbiBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBtICBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBib2R5IGEgU09BUCBib2R5LgotICAgKiBAcGFyYW0gc3R5bGUgYW4gb3BlcmF0aW9uIHN0eWxlLgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgcGFydHMgZm9yIHRoZSBnaXZlbiBzb2FwYmluZDpib2R5LAotICAgKiAgICAgICAgIGJpbmRpbmcgb3BlcmF0aW9uLCBtZXNzYWdlLCBhbmQgc3R5bGUuCi0gICAqLwotICBzdGF0aWMgcHVibGljIExpc3QgZ2V0UGFydHMoCi0gICAgT3BlcmF0aW9uIG9wLAotICAgIE1lc3NhZ2UgbSwKLSAgICBTT0FQQm9keSBib2R5LAotICAgIFN0cmluZyBzdHlsZSkKLSAgewotICAgIC8vCQlpZiBudWxsLCBnZXQgcGFydHMgZnJvbSBtZXNzYWdlIAotICAgIGlmIChib2R5LmdldFBhcnRzKCkgPT0gbnVsbCkKLSAgICAgIC8vIGlmIHJwYyBzdHlsZSBpcyB1c2VkLCB0cnkgdG8gdXNlIHBhcnRPcmRlciBhdHRyaWJ1dGUgZnJvbSBvcGVyYXRpb24KLSAgICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLmVxdWFscyhzdHlsZSkpCi0gICAgICAgIHJldHVybiBtLmdldE9yZGVyZWRQYXJ0cyhvcC5nZXRQYXJhbWV0ZXJPcmRlcmluZygpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG0uZ2V0T3JkZXJlZFBhcnRzKG51bGwpOwotICAgIGVsc2UKLSAgICAgIC8vIGNvbnZlcnNlIHBhcnRzIG5hbWUgdG8gcGFydHMgb2JqZWN0cwotICAgICAgcmV0dXJuIG0uZ2V0T3JkZXJlZFBhcnRzKGJvZHkuZ2V0UGFydHMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBpdGVyYXRlcyBhbGwgaW1wb3J0cyBmcm9tIHRoZSBnaXZlbiBkZWZpbml0aW9uIGFuZCBleHBhbmRzIGFsbAotICAgKiBpbXBvcnRlZCBtZXNzYWdlcywgc2VydmljZSwgcG9ydFR5cGVzLCBhbmQgYmluZGluZ3MgdG8gdGhlIGRlZmluaXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gZGVmIGEgV1NETCBkZWZpbml0aW9uLgotICAgKi8KLSAgc3RhdGljIHB1YmxpYyB2b2lkIGV4cGFuZERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBpZiAoZGVmICE9IG51bGwgJiYgZGVmLmdldEltcG9ydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gZGVmLmdldEltcG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCB2ID0gKExpc3QpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKHYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGl0MiA9IHYuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgICAgICAgIGV4cGFuZERlZmluaXRpb24oZGVmLCAoSW1wb3J0KSBpdDIubmV4dCgpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBpbnRlcm5hbCBtZXRob2QgdG8gZXhwYW5kIGRlZmluaXRpb24uCi0gICAqIEBwYXJhbSB0YXJnZXQgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcGFyYW0gaW0gaW50ZXJuYWwgbWV0aG9kLgotICAgKi8KLSAgc3RhdGljIHByaXZhdGUgdm9pZCBleHBhbmREZWZpbml0aW9uKERlZmluaXRpb24gdGFyZ2V0LCBJbXBvcnQgaW0sIExpc3QgcHJvY2Vzc2VkRGVmaW5pdGlvbnMpCi0gIHsKLSAgICBpZiAoaW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGQgPSBpbS5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoKGQgIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWREZWZpbml0aW9ucy5jb250YWlucyhkKSkpCi0gICAgICB7Ci0gICAgCXByb2Nlc3NlZERlZmluaXRpb25zLmFkZChkKTsKLQotICAgICAgICBpZiAoZC5nZXRNZXNzYWdlcygpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJdGVyYXRvciBpdCA9IGQuZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgICB0YXJnZXQuYWRkTWVzc2FnZSgoTWVzc2FnZSkgaXQubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZC5nZXRQb3J0VHlwZXMoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgICAgIHRhcmdldC5hZGRQb3J0VHlwZSgoUG9ydFR5cGUpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQuZ2V0QmluZGluZ3MoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgICAgdGFyZ2V0LmFkZEJpbmRpbmcoKEJpbmRpbmcpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQuZ2V0U2VydmljZXMoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgICAgdGFyZ2V0LmFkZFNlcnZpY2UoKFNlcnZpY2UpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBJdGVyYXRvciBpdCA9IGQuZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0IHYgPSAoTGlzdCkgaXQubmV4dCgpOwotICAgICAgICAgIGlmICh2ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSXRlcmF0b3IgaXQyID0gdi5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGl0Mi5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIGV4cGFuZERlZmluaXRpb24odGFyZ2V0LCAoSW1wb3J0KSBpdDIubmV4dCgpLCBwcm9jZXNzZWREZWZpbml0aW9ucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgZXh0cmFjdHMgcGFydCBmcm9tIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBTT0FQIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJ0IGEgcGFydCBuYW1lLgotICAgKiBAcmV0dXJuIHBhcnQgZnJvbSB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqLwotICBzdGF0aWMgcHVibGljIFBhcnQgZ2V0UGFydChNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBwYXJ0KQotICB7Ci0gICAgUGFydCBtZXNQYXJ0ID0gbnVsbDsKLSAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgbWVzUGFydCA9IChQYXJ0KSBtZXNzYWdlLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5nZXQoMCk7Ci0gICAgZWxzZQotICAgICAgbWVzUGFydCA9IG1lc3NhZ2UuZ2V0UGFydChwYXJ0KTsKLSAgICByZXR1cm4gbWVzUGFydDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9XU0lQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTSVByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmExNDAzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTSVByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7Ci0KLS8qKgotICogVGhlIFdTSSBwcm9wZXJ0aWVzIGNhbiBiZSBkZWZpbmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnMuICAKLSAqCi0gKiAgIDEuIFRoZSB3c2kucHJvcGVydGllcyBmaWxlIHdoaWNoIGNhbiBiZSBsb2NhdGVkIGFueXdoZXJlIGluIHRoZSBjbGFzc3BhdGguCi0gKiAgIDIuIFRoZSBzeXN0ZW0gcHJvcGVydHkgc2V0dGluZ3MuCi0gKiAgIDMuIFRoZSB0aHJlYWQgbG9jYWwgcHJvcGVydHkgc2V0dGluZ3MuCi0gKiAKLSAqIFRoZSBwcm9wZXJ0aWVzIGFyZSBzZXQgYmFzZWQgb24gdGhpcyBvcmRlcmluZy4gIEZvciBleGFtcGxlLCB0aGUgcHJvcGVydGllcyAKLSAqIGZyb20gdGhlIHdzaS5wcm9wZXJ0aWVzIGZpbGUgd2lsbCBiZSByZXBsYWNlZCBieSBwcm9wZXJ0aWVzIGZyb20gdGhlIHN5c3RlbSAKLSAqIHByb3BlcnR5IHNldHRpbmdzLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB0aHJlYWQgbG9jYWwgcHJvcGVydHkgc2V0dGluZ3MuCi0gKgotICogVGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzZXMgY2FuIGJlCi0gKiBzcGVjaWZpZWQgYXMgc3lzdGVtIHByb3BlcnRpZXMgb3IgYXMgcHJvcGVydGllcyB0aGF0IGFyZSBzZXQgaW4gYSB0aHJlYWQgCi0gKiBsb2NhbCB2YXJpYWJsZS4gIFN5c3RlbSBwcm9wZXJ0aWVzIHNob3VsZCBiZSB1c2VkIGlmIG9ubHkgb25lIGltcGxlbWVudGF0aW9uCi0gKiBpcyBuZWVkZWQgcGVyIEpWTS4gIElmIHR3byBvciBtb3JlIGltcGxlbWVudGF0aW9ucyBhcmUgbmVlZGVkIHBlciBKVk0sIHRoZW4KLSAqIHRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzZXQgdXNpbmcgdGhlIHRocmVhZCBsb2NhbCB2YXJpYWJsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvcjogUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NJUHJvcGVydGllcwotewotICAvKioKLSAgICogUHJvcGVydGllcyBvYmplY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFByb3BlcnRpZXMgd3NpUHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9WQUxJREFUT1JfRkFDVE9SWSA9Ci0gICAgIm9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5SW1wbCI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkgPQotICAgICJ3c2kucHJvZmlsZS52YWxpZGF0b3IuZmFjdG9yeSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgZG9jdW1lbnQgZmFjdG9yeSBjbGFzcyBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX0RPQ1VNRU5UX0ZBQ1RPUlkgPQotICAgICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudEZhY3RvcnlJbXBsIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgdGhhdCBjb250YWlucyBkb2N1bWVudCBmYWN0b3J5IGNsYXNzIG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX0RPQ1VNRU5UX0ZBQ1RPUlkgPSAid3NpLmRvY3VtZW50LmZhY3RvcnkiOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IEpBWFAgWE1MIHBhcnNlciBkb2N1bWVudCBmYWN0b3J5IGJ1aWxkZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfSkFYUF9ET0NVTUVOVF9GQUNUT1JZID0KLSAgICAib3JnLmFwYWNoZS54ZXJjZXMuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgSkFYUCBYTUwgcGFyc2VyIGRvY3VtZW50IGZhY3RvcnkgYnVpbGRlci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfSkFYUF9ET0NVTUVOVF9GQUNUT1JZID0KLSAgICAiamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfV1NETF9TQ0hFTUEgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9XU0RMX1NDSEVNQSA9ICJ3c2kuYW5hbHl6ZXIud3NkbC5zY2hlbWEiOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IFdTREwgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfV1NETF9TT0FQX1NDSEVNQSA9Ci0gICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFdTREwgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1dTRExfU09BUF9TQ0hFTUEgPQotICAgICJ3c2kuYW5hbHl6ZXIud3NkbHNvYXAuc2NoZW1hIjsKLQotICAvKioKLSAgICogRGVmYXVsdCBXU0RMIE1JTUUgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1dTRExfTUlNRV9TQ0hFTUEgPQotICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgdGhhdCBjb250YWlucyBXU0RMIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9XU0RMX01JTUVfU0NIRU1BID0KLSAgICAid3NpLmFuYWx5emVyLndzZGxtaW1lLnNjaGVtYSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfU09BUF9TQ0hFTUEgPQotICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1NPQVBfU0NIRU1BID0gIndzaS5hbmFseXplci5zb2FwLnNjaGVtYSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfWE1MX1NDSEVNQSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9YTUxfU0NIRU1BID0gIndzaS5hbmFseXplci54bWxzY2hlbWEuc2NoZW1hIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgd2hpY2ggY29udGFpbnMgV1NJX0hPTUUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1dTSV9IT01FID0gIndzaS5ob21lIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgZmlsZSBuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9GSUxFTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC53c2kiOwotCi0gIC8qKgotICAqIFRocmVhZCBsb2NhbCB2YXJpYWJsZS4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkTG9jYWwgdGhyZWFkTG9jYWwgPSBuZXcgVGhyZWFkTG9jYWwoKTsKLQotICAvLyBMb2FkIHByb2ZpbGVzIGZpbGUKLSAgc3RhdGljIHsKLSAgICBsb2FkUHJvcGVydGllc0ZpbGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb2FkIHByb3BlcnRpZXMgZnJvbSB3c2kucHJvcGVydGllcyBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb2FkUHJvcGVydGllc0ZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVHJ5IHRvIGxvYWQgcHJvcGVydGllcyBmcm9tIHdzaS5wcm9wZXJ0aWVzCi0gICAgICAvL0lucHV0U3RyZWFtIGlzID0gVXRpbHMuZ2V0SW5wdXRTdHJlYW0oUFJPUF9GSUxFTkFNRSk7Ci0KLSAgICAgIC8vIExvYWQgcHJvcGVydGllcyBmcm9tIGZpbGUKLSAgICAgIC8vd3NpUHJvcGVydGllc0ZpbGUubG9hZChpcyk7Ci0KLSAgICAgIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFBST1BfRklMRU5BTUUpOwotCi0gICAgICBTdHJpbmcgbmV4dEtleTsKLSAgICAgIEVudW1lcmF0aW9uIGVudW1lcmF0aW9uID0gcmVzb3VyY2VCdW5kbGUuZ2V0S2V5cygpOwotICAgICAgd2hpbGUgKGVudW1lcmF0aW9uLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBuZXh0S2V5ID0gKFN0cmluZykgZW51bWVyYXRpb24ubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgd3NpUHJvcGVydGllcy5wdXQobmV4dEtleSwgcmVzb3VyY2VCdW5kbGUuZ2V0U3RyaW5nKG5leHRLZXkpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKLSAgICAgICAgIldBUk5JTkc6ICBDb3VsZCBub3QgcmVhZCAiCi0gICAgICAgICAgKyBQUk9QX0ZJTEVOQU1FCi0gICAgICAgICAgKyAiLiAgIgotICAgICAgICAgICsgIlZlcmlmeSB0aGF0IGl0IGlzIGluIHRoZSBDTEFTU1BBVEguIik7Ci0KLSAgICAgIC8vIFNldCB1cCBkZWZhdWx0IHZhbHVlcwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoUFJPUF9WQUxJREFUT1JfRkFDVE9SWSwgREVGX1ZBTElEQVRPUl9GQUNUT1JZKTsKLSAgICAgIHdzaVByb3BlcnRpZXMucHV0KFBST1BfRE9DVU1FTlRfRkFDVE9SWSwgREVGX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoUFJPUF9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlksIERFRl9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoCi0gICAgICAgIFRyYW5zcG9ydEZhY3RvcnkuUFJPUEVSVFlfTkFNRSwKLSAgICAgICAgIm9yZy51ZGRpNGoudHJhbnNwb3J0LkFwYWNoZUF4aXNUcmFuc3BvcnQiKTsKLSAgICB9Ci0gIH0KLQotICAvKiogCi0gICAqIERvIG5vdCBhbGxvdyB0aGlzIG9iamVjdCB0byBiZSBpbnN0YW50aWF0ZWQuCi0gICAqLwotICBwcml2YXRlIFdTSVByb3BlcnRpZXMoKQotICB7Ci0gIH0KLQotICAvKiogCi0gICAgKiBHZXQgcHJvcGVydGllcyB0aGF0IHdlcmUgc2V0IGZvciB0aGlzIHRocmVhZCBvbmx5LgotICAgICogQHJldHVybiB0aGUgcHJvcGVydGllcyB0aGF0IHdlcmUgc2V0IGZvciB0aGlzIHRocmVhZCBvbmx5LgotICAgICoKLSAgICAqIEBzZWUgI3NldFRocmVhZExvY2FsUHJvcGVydGllcwotICAgICovCi0gIHB1YmxpYyBzdGF0aWMgUHJvcGVydGllcyBnZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMoKQotICB7Ci0gICAgLy8gUmV0dXJuIHByb3BlcnRpZXMKLSAgICByZXR1cm4gKFByb3BlcnRpZXMpIHRocmVhZExvY2FsLmdldCgpOwotICB9Ci0KLSAgLyoqIAotICAgKiBTZXQgcHJvcGVydGllcyBmb3IgdGhpcyB0aHJlYWQgb25seS4KLSAgICogQHBhcmFtIHByb3BzICBhIFByb3BlcnRpZXMgb2JqZWN0LgotICAgKgotICAgKiBAc2VlICNnZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKLSAgewotICAgIC8vIFNhdmUgdGhlIHByb3BlcnRpZXMgYXMgdGhyZWFkIGxvY2FsIHZhcmlhYmxlcwotICAgIHRocmVhZExvY2FsLnNldChwcm9wcyk7Ci0gIH0KLQotICAvKiogCi0gICAqIEdldCB0aGUgcHJvcGVydHkgdmFsdWUgZ2l2ZW4gdGhlIHByb3BlcnR5IG5hbWUuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgIGEgcHJvcGVydHkgbmFtZS4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZS4gSWYgbm90IGZvdW5kIHJldHVybiBudWxsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSkKLSAgewotICAgIFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gbnVsbDsKLSAgICBQcm9wZXJ0aWVzIHRocmVhZExvY2FsUHJvcHMgPSBudWxsOwotCi0gICAgLy8gMS4gTG9vayBpbiB0aHJlYWQgbG9jYWwgcHJvcGVydGllcyBmaXJzdAotICAgIGlmICgodGhyZWFkTG9jYWxQcm9wcyA9IGdldFRocmVhZExvY2FsUHJvcGVydGllcygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VmFsdWUgPSB0aHJlYWRMb2NhbFByb3BzLmdldFByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci0gICAgfQotCi0gICAgLy8gMi4gTmV4dCBsb29rIGluIHN5c3RlbSBwcm9wZXJ0aWVzIAotICAgIGlmIChwcm9wZXJ0eVZhbHVlID09IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlWYWx1ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8vIDMuIExhc3QgbG9vayBpbiB0aGUgcHJvcGVydGllcyBmaWxlCi0gICAgaWYgKHByb3BlcnR5VmFsdWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVZhbHVlID0gd3NpUHJvcGVydGllcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBwcm9wZXJ0eSB2YWx1ZQotICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwotICB9Ci0KLSAgLyoqIAotICAgKiBHZXQgdGhlIHByb3BlcnR5IHZhbHVlIGdpdmVuIHRoZSBwcm9wZXJ0eSBuYW1lLgotICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lICBhIHByb3BlcnR5IG5hbWUuCi0gICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlLiBJZiBub3QgZm91bmQgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSwgU3RyaW5nIGRlZmF1bHRWYWx1ZSkKLSAgewotICAgIFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gbnVsbDsKLQotICAgIC8vIElmIHRoZSBwcm9wZXJ0eVZhbHVlIHdhcyBub3QgZm91bmQsIHRoZW4gcmV0dXJuIGRlZmF1bHQgdmFsdWUKLSAgICBpZiAoKHByb3BlcnR5VmFsdWUgPSBnZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VmFsdWUgPSBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHByb3BlcnR5IHZhbHVlCi0gICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1bml0IHRlc3QgdGhpcyBjbGFzcy4KLSAgICogQHBhcmFtIGFyZ3MgIHRoZSBhcmd1bWVudHMgZm9yIG1haW4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2V0IHByb3BlcnR5IGZvciB0aGlzIHRocmVhZAotICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICBwcm9wcy5zZXRQcm9wZXJ0eShQUk9QX1ZBTElEQVRPUl9GQUNUT1JZLCAibWFpbiIpOwotICAgICAgV1NJUHJvcGVydGllcy5zZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMocHJvcHMpOwotCi0gICAgICAvLyBTdGFydCBmb3VyIHRocmVhZHMgdG8gdmVyaWZ5IHRoYXQgdGhlIG11bHRpdGhyZWFkZWQgdXNlIG9mIHRyZWFkIGxvY2FsIHZhcnMgd29ya3MKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBDcmVhdGUgbmV3IHRocmVhZAotICAgICAgICAgKG5ldyBUaHJlYWQobmV3IFRocmVhZFRlc3QoInRlc3QiICsgaSkpKS5zdGFydCgpOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2xlZXAKLSAgICAgICAgICBUaHJlYWQuc2xlZXAoMjAwKTsKLQotICAgICAgICAgIC8vIERpc3BsYXkgcHJvcGVydGllcywgd2hpY2ggc2hvdWxkIGJlIG1haW4KLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCi0gICAgICAgICAgICAiUFJPUF9WQUxJREFUT1JfRkFDVE9SWTogICIKLSAgICAgICAgICAgICAgKyBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIElubmVyIGNsYXNzIHVzZWQgZm9yIHVuaXQgdGVzdC4KLSAgICovCi0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIFRocmVhZFRlc3QgZXh0ZW5kcyBUaHJlYWQKLSAgewotICAgIFN0cmluZyBuYW1lOwotCi0gICAgVGhyZWFkVGVzdChTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICBwcm9wcy5zZXRQcm9wZXJ0eShQUk9QX1ZBTElEQVRPUl9GQUNUT1JZLCBuYW1lKTsKLSAgICAgIFdTSVByb3BlcnRpZXMuc2V0VGhyZWFkTG9jYWxQcm9wZXJ0aWVzKHByb3BzKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgIlBST1BfVkFMSURBVE9SX0ZBQ1RPUlk6ICAiCi0gICAgICAgICAgKyBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvWE1MSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9YTUxJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MjExOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9YTUxJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFhNTEluZm8KLXsKLSAgLyoqCi0gICAqIEdldCBhZGR0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiBhcyBhbiBYTUwgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBhIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gYWRkdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gYXMgYW4gWE1MIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC93c2kucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvd3NpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZTQ4ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC93c2kucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSMgLyoqCi0jICAqIDxjb3B5cmlnaHQ+Ci0jICAqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzICBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgKiA8L2NvcHlyaWdodD4KLSMgICovCi0jCi0jIFByb3BlcnR5IGZpbGUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBmb3IgQ29uZm9ybWFuY2UgVG9vbHMKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEb2N1bWVudCBmYWN0b3J5LgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotd3NpLmRvY3VtZW50LmZhY3Rvcnk9b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGwuRG9jdW1lbnRGYWN0b3J5SW1wbAotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFByb2ZpbGUgdmFsaWRhdGlvbiBmYWN0b3J5LgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotd3NpLnByb2ZpbGUudmFsaWRhdG9yLmZhY3Rvcnk9b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuUHJvZmlsZVZhbGlkYXRvckZhY3RvcnlJbXBsCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVmZXJlbmNlIHRvIEpBWFAgZG9jdW1lbnQgYnVpbGRlcgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeT1vcmcuYXBhY2hlLnhlcmNlcy5qYXhwLkRvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsCi0jamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeT1vcmcuZWNsaXBlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbAotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyYW5zcG9ydCBjbGFzcyB1c2VkIGJ5IFVEREk0SgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotb3JnLnVkZGk0ai5UcmFuc3BvcnRDbGFzc05hbWU9b3JnLnVkZGk0ai50cmFuc3BvcnQuQXBhY2hlQXhpc1RyYW5zcG9ydAotCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTG9jYXRpb24gb2YgWE1MIHNjaGVtYSBkb2N1bWVudHMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBkaXJlY3RvcnkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXdzaS5hbmFseXplci54bWxzY2hlbWEuc2NoZW1hPWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZAotd3NpLmFuYWx5emVyLnNvYXAuc2NoZW1hPWh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvCi13c2kuYW5hbHl6ZXIud3NkbC5zY2hlbWE9aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8KLXdzaS5hbmFseXplci53c2Rsc29hcC5zY2hlbWE9d3NpLmFuYWx5emVyLndzZGxzb2FwLnNjaGVtYQotd3NpLmFuYWx5emVyLndzZGxtaW1lLnNjaGVtYT1odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExEb2N1bWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMRG9jdW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUwMjkyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExEb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZC5JbmxpbmVTY2hlbWFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGludGVyZmFjZSB0byBhIHNpbmdsZSBXU0RMIGRvY3VtZW50LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgV1NETERvY3VtZW50Ci17Ci0gIC8qKgotICAgKiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlTmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERlZmluaXRpb24gZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb25zID0gbnVsbDsKLQotICAvKioKLSAgICogRG9jdW1lbnQgZWxlbWVudAotICAgKi8KLSAgcHJvdGVjdGVkIERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogV1NETCBlbGVtZW50IGxpc3Qgd2l0aCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMRWxlbWVudExpc3Qgd3NkbEVsZW1lbnRMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogTWFwIG9mIHRhcmdldE5hbWVzcGFjZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCBvZiBzY2hlbWEgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIE1hcCBzY2hlbWFzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBzY2hlbWFzIHZhbGlkYXRpb24gZXJyb3JzLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IHNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIC8qKgotICAgKiBSZWFkIFdTREwgZG9jdW1lbnQgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24gaWYgcHJvYmxlbSByZWFkaW5nIFdTREwgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50KFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTsKLSAgICBDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQotICAgIHRyeQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihXU0RMRG9jdW1lbnQuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgIAotCi0gICAgICAvLyBHZXQgdGhlIFdTRExSZWFkZXIKLSAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotCi0gICAgICAvLyBTZXQgZmVhdHVyZXMKLSAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfVkVSQk9TRSwgZmFsc2UpOwotICAgICAgLy8gREVCVUc6Ci0gICAgICAvL3dzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfVkVSQk9TRSwgdHJ1ZSk7Ci0gICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoCi0gICAgICAgIGNvbS5pYm0ud3NkbC5Db25zdGFudHMuRkVBVFVSRV9JTVBPUlRfRE9DVU1FTlRTLAotICAgICAgICB0cnVlKTsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy93c2RsUmVhZGVyLnNldEZlYXR1cmUoY29tLmlibS53c2RsLkNvbnN0YW50cy5GRUFUVVJFX0lNUE9SVF9ET0NVTUVOVFMsdHJ1ZSk7Ci0KLSAgICAgIC8vIFBhcnNlIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBkb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MRG9jdW1lbnQoZmlsZU5hbWUpOwotICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHdzZGxSZWFkZXIucmVhZFdTREwoZmlsZU5hbWUsIGRvY3VtZW50KTsKLQotICAgICAgLy8gU2luY2UgaW5saW5lIHNjaGVtYSB2YWxpZGF0b3IgaXMgdXNlZCBieSBzZXZlcmFsIGFzc2VydGlvbnMsIHZhbGlkYXRlIGFsbAotICAgICAgLy8gc2NoZW1hcyByaWdodCBhZnRlciBXU0RMIHZhbGlkYXRpb24KLSAgICAgIHZhbGlkYXRlU2NoZW1hcygpOwotCi0gICAgICAvLyBHZXQgdGhlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIgcmVmZXJlbmNlcwotICAgICAgdGhpcy53c2RsRWxlbWVudExpc3QgPSAoKFdTRExSZWFkZXJJbXBsKSB3c2RsUmVhZGVyKS5nZXRFbGVtZW50TGlzdCgpOwotCi0gICAgICAvLyBERUJVRzoKLSAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKHdzZGxFbGVtZW50TGlzdC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBjY2UpCi0gICAgewotICAgICAgLy8gU2V0IGVsZW1lbnQgbGlzdCB0byBudWxsCi0gICAgICB0aGlzLndzZGxFbGVtZW50TGlzdCA9IG51bGw7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7IAotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0gICAgfSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgV1NETCBkb2N1bWVudCBmcm9tIGV4aXN0aW5nIERlZmluaXRpb24gb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVOYW1lIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBkZWZpbml0aW9ucyBEZWZpbml0aW9uIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQoU3RyaW5nIGZpbGVOYW1lLCBEZWZpbml0aW9uIGRlZmluaXRpb25zKQotICB7Ci0gICAgdGhpcy5maWxlTmFtZSA9IGZpbGVOYW1lOwotICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uczsKLSAgICB0aGlzLmRvY3VtZW50ID0gbnVsbDsKLSAgICBzY2hlbWFzLmNsZWFyKCk7Ci0gICAgc2NoZW1hc1ZhbGlkYXRpb25FcnJvcnMuY2xlYXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gaGUgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgLy8gUmV0dXJuIHRoZSBkb2N1bWVudCBsb2NhdGlvbgotICAgIHJldHVybiB0aGlzLmZpbGVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZG9jdW1lbnQgZWxlbWVudCBvZiB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudAotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KCkKLSAgewotICAgIGlmIChkb2N1bWVudCA9PSBudWxsICYmIGRlZmluaXRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUxEb2N1bWVudChkZWZpbml0aW9ucy5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgICAgewotICAgICAgfQotICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiB3c2llKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZG9jdW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbnMoKQotICB7Ci0gICAgLy8gUmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQKLSAgICByZXR1cm4gZGVmaW5pdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFsbCB0aGUgcG9ydFR5cGUgZWxlbWVudHMgZnJvbSB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBwb3J0VHlwZSBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZVtdIGdldFBvcnRUeXBlcygpCi0gIHsKLSAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBQb3J0VHlwZXMgZnJvbSB0aGUgUG9ydFR5cGUgbWFwIGZvciB0aGlzIERlZmluaXRpb24KLSAgICByZXR1cm4gKFBvcnRUeXBlW10pIGRlZmluaXRpb25zLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLnRvQXJyYXkoCi0gICAgICBuZXcgUG9ydFR5cGVbMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbGwgdGhlIGJpbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBiaW5kaW5nIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdbXSBnZXRCaW5kaW5ncygpCi0gIHsKLSAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBCaW5kaW5ncyBmcm9tIHRoZSBCaW5kaW5nIG1hcCBmb3IgdGhpcyBEZWZpbml0aW9uCi0gICAgcmV0dXJuIChCaW5kaW5nW10pIGRlZmluaXRpb25zLmdldEJpbmRpbmdzKCkudmFsdWVzKCkudG9BcnJheSgKLSAgICAgIG5ldyBCaW5kaW5nWzBdKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYWxsIHRoZSBzZXJ2aWNlIGVsZW1lbnRzIGZyb20gdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxpc3Qgb2Ygc2VydmljZSBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlW10gZ2V0U2VydmljZXMoKQotICB7Ci0gICAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgU2VydmljZXMgZnJvbSB0aGUgU2VydmljZSBtYXAgZm9yIHRoaXMgRGVmaW5pdGlvbgotICAgIHJldHVybiAoU2VydmljZVtdKSBkZWZpbml0aW9ucy5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLnRvQXJyYXkoCi0gICAgICBuZXcgU2VydmljZVswXSk7Ci0gIH0KLQotICAvKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIChkZWZpbml0aW9ucyA9PSBudWxsKQotICAgICAgPyAiV1NETCBkZWZpbml0aW9uIGVsZW1lbnQgbm90IGZvdW5kLiIKLSAgICAgIDogZGVmaW5pdGlvbnMudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgbGlzdC4KLSAgICogQHJldHVybiB0aGUgZWxlbWVudCBsaXN0LgotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50TGlzdCBnZXRFbGVtZW50TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsRWxlbWVudExpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHNjaGVtYXMgbWFwLgotICAgKiBAcmV0dXJuIGEgbWFwIG9mIHRhcmdldE5hbWVzcGFjZSBhdHRyaWJ1dGUgdmFsdWVzIG9mIHRoZSBzY2hlbWEgZWxlbWVudHMKLSAgICogdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCBvYmplY3Qgb2YgdGhhdCBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgTWFwIGdldFNjaGVtYXMoKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYXM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIGxpc3Qgb2Ygc2NoZW1hcyB2YWxpZGF0aW9uIGVycm9ycyBjYXVzZWQgYnkgdGhlIHZhbGlkYXRlU2NoZW1hcygpIHByb2NlZHVyZS4KLSAgICogQHJldHVybiBhIGxpc3Qgb2Ygc2NoZW1hcyB2YWxpZGF0aW9uIGVycm9ycy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzKCkKLSAgewotICAgIHJldHVybiBzY2hlbWFzVmFsaWRhdGlvbkVycm9yczsgCi0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBpbnZva2VzIHRoZSBpbmxpbmUgc2NoZW1hIHZhbGlkYXRvciB3aGljaCB2YWxpZGF0ZXMgZXZlcnkgc2NoZW1hIGVsZW1lbnQgb2YgdGhlIFdTREwuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmFsaWRhdGVTY2hlbWFzKCkKLSAgewotICAgIHNjaGVtYXMuY2xlYXIoKTsKLSAgICBzY2hlbWFzVmFsaWRhdGlvbkVycm9ycy5jbGVhcigpOwotCi0gICAgLyogSU5MSU5FIFNDSEVNQSBWQUxJREFUT1IgKi8KLSAgICBpZiAoZGVmaW5pdGlvbnMgIT0gbnVsbAotICAgICAgJiYgZGVmaW5pdGlvbnMuZ2V0VHlwZXMoKSAhPSBudWxsCi0gICAgICAmJiBkZWZpbml0aW9ucy5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSW5saW5lU2NoZW1hVmFsaWRhdG9yIHNjaGVtYVZhbGlkYXRvciA9IG5ldyBJbmxpbmVTY2hlbWFWYWxpZGF0b3IoKTsKLQotICAgICAgLy8gQ29sbGVjdGluZyBzY2hlbWEncyBwYXJlbnQgZWxlbWVudHMKLSAgICAgIExpc3QgcGFyZW50cyA9IG5ldyBBcnJheUxpc3QoMik7Ci0gICAgICBwYXJlbnRzLmFkZChkZWZpbml0aW9ucy5nZXRUeXBlcygpKTsKLSAgICAgIHBhcmVudHMuYWRkKGRlZmluaXRpb25zKTsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBFeHRlbnNpYmlsaXR5RWxlbWVudFMgb2Ygd3NkbDp0eXBlcwotICAgICAgLy8gc2luY2UgdGhleSBhcmUgcG90ZW50aWFsIHNjaGVtYXMKLSAgICAgIC8vIFNlZSBKYXZhIEFQSXMgZm9yIFdTREwgVjEuMCAoSlNSMTEwKSwgc2VjdGlvbiA0Ci0gICAgICBJdGVyYXRvciBpID0gdGhpcy5kZWZpbml0aW9ucy5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgICAgaWYgKGV4dEVsLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFhNTFRhZ3MuRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgewotICAgICAgICAgIE1hcCBtYXAgPSBudWxsOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFZhbGlkYXRpbmcgc2NoZW1hIGVsZW1lbnQKLSAgICAgICAgICAgIG1hcCA9IHNjaGVtYVZhbGlkYXRvci52YWxpZGF0ZShleHRFbCwgcGFyZW50cywgZmlsZU5hbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQWRkaW5nIGFuIGV4Y2VwdGlvbiB0byB0aGUgZXJyb3JzIGxpc3QKLSAgICAgICAgICAgIHNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzLmFkZChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKG1hcCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFkZGluZyByZXR1cm5lZCBYU01vZGVsIHRvIHNjaGVtYXMgbWFwCi0gICAgICAgICAgICBzY2hlbWFzLnB1dEFsbChtYXApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gICAgCi0gIH0KLQotICAvKioKLSAgICogQ29tbWFuZCBsaW5lIGludGVyZmFjZS4KLSAgICogQHBhcmFtIGFyZ3MgZnJvbSBjb21tYW5kIGxpbmUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCA9IG5ldyBXU0RMRG9jdW1lbnQoYXJnc1swXSk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4od3NkbERvY3VtZW50LnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnRvU3RyaW5nKCk7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIFN5c3RlbS5leGl0KDApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExFbGVtZW50TGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMRWxlbWVudExpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVhNzdkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExFbGVtZW50TGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBtYWludGFpbnMgYSBXU0RMIGVsZW1lbnQgbGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExFbGVtZW50TGlzdAotewotICAvKioKLSAgICogTGlzdCBvZiBXU0RMIGVsZW1lbnRzIHdpdGggdGhlaXIgbG9jYXRpb24uCi0gICAqLwotICBIYXNoTWFwIHdzZGxFbGVtZW50TGlzdCA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgLyoqCi0gICAqIFdTREwgZWxlbWVudCBsb2NhdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50TGlzdCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgZWxlbWVudCB3aXRoIGxvY2F0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgICAgICBhIFdTREwgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGVsZW1lbnRMb2NhdGlvbiAgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVsZW1lbnQoT2JqZWN0IHdzZGxFbGVtZW50LCBFbGVtZW50TG9jYXRpb24gZWxlbWVudExvY2F0aW9uKQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudExpc3QucHV0KHdzZGxFbGVtZW50LCBlbGVtZW50TG9jYXRpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgIGEgV1NETCBlbGVtZW50IGFydGlmYWN0LgotICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbihPYmplY3Qgd3NkbEVsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gKEVsZW1lbnRMb2NhdGlvbikgdGhpcy53c2RsRWxlbWVudExpc3QuZ2V0KHdzZGxFbGVtZW50KTsKLSAgfQotCi0gIC8qIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZyBzdHJpbmcgPSAiV1NETEVsZW1lbnRMaXN0OiBcbiI7Ci0KLSAgICAvLyBHZXQgbGlzdCBlbnRyaWVzICh2YWx1ZXM/KQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdGhpcy53c2RsRWxlbWVudExpc3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQotICAgIC8vIEFkZCBlYWNoIGVudHJ5IGluIHRoZSBsaXN0IHRvIHRoZSBzdHJpbmcKLSAgICBFbGVtZW50TG9jYXRpb24gd3NkbEVsZW1lbnRMb2NhdGlvbjsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCB3c2RsRWxlbWVudCA9IGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgaWYgKHdzZGxFbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHN0cmluZyArPSAiICAiICsgd3NkbEVsZW1lbnQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiOiAiOwotICAgICAgICBpZiAoKHdzZGxFbGVtZW50TG9jYXRpb24gPQotICAgICAgICAgIChFbGVtZW50TG9jYXRpb24pIHdzZGxFbGVtZW50TGlzdC5nZXQod3NkbEVsZW1lbnQpKQotICAgICAgICAgID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzdHJpbmcgKz0gIm51bGxcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzdHJpbmcgKz0gIiAgIgotICAgICAgICAgICAgKyB3c2RsRWxlbWVudC5nZXRDbGFzcygpLmdldE5hbWUoKQotICAgICAgICAgICAgKyAiOiAiCi0gICAgICAgICAgICArIHdzZGxFbGVtZW50TG9jYXRpb24uZ2V0TGluZU51bWJlcigpCi0gICAgICAgICAgICArICIsICIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnRMb2NhdGlvbi5nZXRDb2x1bW5OdW1iZXIoKQotICAgICAgICAgICAgKyAiXG4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMUmVhZGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMUmVhZGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWY2NWVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFJlYWRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmRvbS5FbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5RTmFtZVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5YUGF0aFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYSBzcGVjaWFsaXphdGlvbiBvZiBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsIGluIFdTREw0Si4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZWFkZXJJbXBsIGV4dGVuZHMgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbAotewotICAvLyBXU0RMIGVsZW1lbnQgbGlzdC4KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50TGlzdCB3c2RsRWxlbWVudExpc3QgPSBuZXcgV1NETEVsZW1lbnRMaXN0KCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VEZWZpbml0aW9ucyhqYXZhLmxhbmcuU3RyaW5nLCBvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZhLnV0aWwuTWFwKQotICAgKi8KLSAgcHJvdGVjdGVkIERlZmluaXRpb24gcGFyc2VEZWZpbml0aW9ucygKLSAgICBTdHJpbmcgZG9jdW1lbnRCYXNlVVJJLAotICAgIEVsZW1lbnQgZGVmRWwsCi0gICAgTWFwIGltcG9ydGVkRGVmcykKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0JICBEZWZpbml0aW9uIGRlZiA9IG51bGw7Ci0JQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JdHJ5Ci0JewotICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoV1NETFJlYWRlckltcGwuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0JCi0gICAgICBkZWYgPQotICAgICAgc3VwZXIucGFyc2VEZWZpbml0aW9ucyhkb2N1bWVudEJhc2VVUkksIGRlZkVsLCBpbXBvcnRlZERlZnMpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KGRlZkVsLCBkZWYpOwotCi0KLQl9Ci1jYXRjaCAoRXhjZXB0aW9uIGUpCi0JewotCX0KLSAgICBmaW5hbGx5Ci0gICAgeyAKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotICAgIH0gIAotICAgIHJldHVybiBkZWY7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUltcG9ydChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24sIGphdmEudXRpbC5NYXApCi0gICAqLwotICBwcm90ZWN0ZWQgSW1wb3J0IHBhcnNlSW1wb3J0KEVsZW1lbnQgZWxlbWVudCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBNYXAgbWFwKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICAvKmJvb2xlYW4gd2FzRXggPSBmYWxzZTsKLSAgICBpZiAoZGVmLmdldERvY3VtZW50QmFzZVVSSSgpIT1udWxsKXsKLSAgICAJRmlsZSBmID0gbmV3IEZpbGUoZGVmLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAJaWYgKGYuZ2V0UGFyZW50KCkhPW51bGwgJiYgaW1wb3J0RWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbiIpIT1udWxsKXsJCQotICAgIAkgICBmID0gbmV3IEZpbGUoZi5nZXRQYXJlbnQoKSsiLyIraW1wb3J0RWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbiIpKTsKLSAgICAJICAgCi0gICAgCX0KLSAgICB9IGVsc2Ugd2FzRXggPSBmYWxzZTsKLSAgICAgIAotICAgIEltcG9ydCBpbXBvcnREZWYgPSBzdXBlci5wYXJzZUltcG9ydChpbXBvcnRFbCwgZGVmLCBpbXBvcnRlZERlZnMpOwotICAgIAotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChpbXBvcnRFbCwgaW1wb3J0RGVmKTsKLSAgICAKLSAgICByZXR1cm4gaW1wb3J0RGVmOyovCi0KLSAgICAvKkltcG9ydCBpbXBvcnQxID0gZGVmaW5pdGlvbi5jcmVhdGVJbXBvcnQoKTsKLSAgICBTdHJpbmcgcyA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShlbGVtZW50LCAibmFtZXNwYWNlIik7Ci0gICAgU3RyaW5nIHMxID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGVsZW1lbnQsICJsb2NhdGlvbiIpOwotICAgIGlmIChzICE9IG51bGwpCi0gICAgCWltcG9ydDEuc2V0TmFtZXNwYWNlVVJJKHMpOwotICAgIGlmIChzMSAhPSBudWxsKSB7Ci0gICAgCWlmIChpbXBvcnREb2N1bWVudHMpIHsKLSAgICAJCVN0cmluZyBzMiA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgCQl0cnkgewotICAgIAotICAgIAkJCVVSTCB1cmwxID0gczIgPT0gbnVsbCA/IG51bGwgOiBTdHJpbmdVdGlscy5nZXRVUkwobnVsbCwgczIpOwotICAgIAkJCVVSTCB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwodXJsMSwgczEpOwotICAgIAkJCUlucHV0U3RyZWFtIGlucHV0c3RyZWFtID0KLSAgICAJCQkJU3RyaW5nVXRpbHMuZ2V0Q29udGVudEFzSW5wdXRTdHJlYW0odXJsKTsKLSAgICAJCQlpbnB1dHN0cmVhbS5jbG9zZSgpOwotICAgIAkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLSAgICAJCQkvL2ltcG9ydDEuc2V0TG9jYXRpb25VUkkobnVsbCk7Ci0gICAgCQkJYWRkRWxlbWVudFRvTGlzdChlbGVtZW50LCBpbXBvcnQxKTsKLSAgICAJCQlyZXR1cm4gaW1wb3J0MTsKLSAgICAJCX0gY2F0Y2ggKFRocm93YWJsZSBleCkgewotICAgIAkJCXRocm93IG5ldyBXU0RMRXhjZXB0aW9uKAotICAgIAkJCQkiT1RIRVJfRVJST1IiLAotICAgIAkJCQkiVW5hYmxlIHRvIHJlc29sdmUgaW1wb3J0ZWQgZG9jdW1lbnQgYXQgJyIgKyBzMSArICInLiIsCi0gICAgCQkJCWV4KTsKLSAgICAJCX0KLSAgICAKLSAgICAJfQotICAgIH0KLSAgICBJbXBvcnQgaW1wb3J0RGVmID0gc3VwZXIucGFyc2VJbXBvcnQoZWxlbWVudCwgZGVmaW5pdGlvbiwgbWFwKTsKLSAgICBhZGRFbGVtZW50VG9MaXN0KGVsZW1lbnQsIGltcG9ydERlZik7Ki8KLSAgICBJbXBvcnQgaW1wb3J0MSA9IGRlZmluaXRpb24uY3JlYXRlSW1wb3J0KCk7Ci0gICAgU3RyaW5nIHMgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoZWxlbWVudCwgIm5hbWVzcGFjZSIpOwotICAgIFN0cmluZyBzMSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShlbGVtZW50LCAibG9jYXRpb24iKTsKLSAgICBpZiAocyAhPSBudWxsKQotICAgICAgaW1wb3J0MS5zZXROYW1lc3BhY2VVUkkocyk7Ci0gICAgLy8gQUREOiBjaGVjayAibG9jYXRpb24iIGF0dHJpYnV0ZSBmb3IgZW1wdHkgCi0gICAgLy8gc3RyaW5nIHRvIHByZXZlbnQgc2VsZi1kZWZlbml0aW9uIGFzc2lnbmluZwotICAgIGlmICgoczEgIT0gbnVsbCkgJiYgKHMxLmxlbmd0aCgpID4gMCkpCi0gICAgewotICAgICAgaW1wb3J0MS5zZXRMb2NhdGlvblVSSShzMSk7Ci0gICAgICBpZiAoaW1wb3J0RG9jdW1lbnRzKQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBzMiA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uMSA9IG51bGw7Ci0gICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXRzdHJlYW0gPSBudWxsOwotICAgICAgICAgIElucHV0U291cmNlIGlucHV0c291cmNlID0gbnVsbDsKLSAgICAgICAgICBVUkwgdXJsID0gbnVsbDsKLSAgICAgICAgICBpZiAobG9jICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzb3VyY2UgPSBsb2MuZ2V0SW1wb3J0SW5wdXRTb3VyY2UoczIsIHMxKTsKLSAgICAgICAgICAgIFN0cmluZyBzMyA9IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgIGRlZmluaXRpb24xID0gKERlZmluaXRpb24pIG1hcC5nZXQoczMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgVVJMIHVybDEgPSBzMiA9PSBudWxsID8gbnVsbCA6IFN0cmluZ1V0aWxzLmdldFVSTChudWxsLCBzMik7Ci0gICAgICAgICAgICB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwodXJsMSwgczEpOwotICAgICAgICAgICAgZGVmaW5pdGlvbjEgPSAoRGVmaW5pdGlvbikgbWFwLmdldCh1cmwudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbjEgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgIHsKLQotICAgICAgICAgICAgICAgIGlucHV0c3RyZWFtID0gdXJsLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXgpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvL2ltcG9ydDEuc2V0TG9jYXRpb25VUkkobnVsbCk7Ci0gICAgICAgICAgICAgICAgYWRkRWxlbWVudFRvTGlzdChlbGVtZW50LCBpbXBvcnQxKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW1wb3J0MTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoaW5wdXRzdHJlYW0gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBpbnB1dHNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShpbnB1dHN0cmVhbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkZWZpbml0aW9uMSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbnB1dHNvdXJjZSA9PSBudWxsKQotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiT1RIRVJfRVJST1IiLAotICAgICAgICAgICAgICAgICJVbmFibGUgdG8gbG9jYXRlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciCi0gICAgICAgICAgICAgICAgICArIHMxCi0gICAgICAgICAgICAgICAgICArICInIgotICAgICAgICAgICAgICAgICAgKyAoczIgIT0gbnVsbCA/ICIsIHJlbGF0aXZlIHRvICciICsgczIgKyAiJy4iIDogIi4iKSk7Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudChpbnB1dHNvdXJjZSwgczEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFkZEVsZW1lbnRUb0xpc3QoZWxlbWVudCwgaW1wb3J0MSk7Ci0gICAgICAgICAgICAgIHJldHVybiBpbXBvcnQxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlucHV0c3RyZWFtICE9IG51bGwpCi0gICAgICAgICAgICAgIGlucHV0c3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fREVGSU5JVElPTlMsIGVsZW1lbnQyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9pZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgLy8gIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgLy8gICAgIlJldHJpZXZpbmcgZG9jdW1lbnQgYXQgJyIKLSAgICAgICAgICAgICAgLy8gICAgICArIHMxCi0gICAgICAgICAgICAgIC8vICAgICAgKyAiJyIKLSAgICAgICAgICAgICAgLy8gICAgICArIChzMiAhPSBudWxsID8gIiwgcmVsYXRpdmUgdG8gJyIgKyBzMiArICInLiIgOiAiLiIpKTsKLSAgICAgICAgICAgICAgU3RyaW5nIHM0ID0KLSAgICAgICAgICAgICAgICBsb2MgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgPyB1cmwgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgPyBzMQotICAgICAgICAgICAgICAgICAgOiB1cmwudG9TdHJpbmcoKSA6IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgICAgZGVmaW5pdGlvbjEgPSByZWFkV1NETChzNCwgZWxlbWVudDIsIG1hcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIHFuYW1lID0gUU5hbWVVdGlscy5uZXdRTmFtZShlbGVtZW50Mik7Ci0gICAgICAgICAgICAgIGlmIChDb25zdGFudHMuWFNEX1FOQU1FX0xJU1QuY29udGFpbnMocW5hbWUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV1NETEZhY3Rvcnkgd3NkbGZhY3RvcnkgPQotICAgICAgICAgICAgICAgICAgZmFjdG9yeUltcGxOYW1lID09IG51bGwKLSAgICAgICAgICAgICAgICAgICAgPyBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpCi0gICAgICAgICAgICAgICAgICAgIDogV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoZmFjdG9yeUltcGxOYW1lKTsKLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uMSA9IHdzZGxmYWN0b3J5Lm5ld0RlZmluaXRpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoZXh0UmVnICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICBkZWZpbml0aW9uMS5zZXRFeHRlbnNpb25SZWdpc3RyeShleHRSZWcpOwotICAgICAgICAgICAgICAgIFN0cmluZyBzNSA9Ci0gICAgICAgICAgICAgICAgICBsb2MgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/IHVybCA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgID8gczEKLSAgICAgICAgICAgICAgICAgICAgOiB1cmwudG9TdHJpbmcoKSA6IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uMS5zZXREb2N1bWVudEJhc2VVUkkoczUpOwotICAgICAgICAgICAgICAgIC8qIERvbid0IGFkZCB0eXBlcyBlbGVtZW50IHNpbmNlIGl0IGRvZXNuJ3QgZXhpc3QuICBBZGRpbmcgaXQgY2F1c2VzIHByb2JsZW1zCi0gICAgICAgICAgICAgICAgICogc2luY2UgaXQgd2lsbCBhZGQgYSB0eXBlcyBlbGVtZW50IGZvciBwcm9jZXNzaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QuCi0gICAgICAgICAgICAgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uMS5jcmVhdGVUeXBlcygpOwotICAgICAgICAgICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCB1bmtub3duZXh0ZW5zaWJpbGl0eWVsZW1lbnQgPQotICAgICAgICAgICAgICAgIAluZXcgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgdW5rbm93bmV4dGVuc2liaWxpdHllbGVtZW50LnNldEVsZW1lbnQoZWxlbWVudDIpOwotICAgICAgICAgICAgICAgIHR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KAotICAgICAgICAgICAgICAgIAl1bmtub3duZXh0ZW5zaWJpbGl0eWVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGRlZmluaXRpb24xLnNldFR5cGVzKHR5cGVzKTsKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkZWZpbml0aW9uMSAhPSBudWxsKQotICAgICAgICAgICAgaW1wb3J0MS5zZXREZWZpbml0aW9uKGRlZmluaXRpb24xKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiB3c2RsZXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbGV4Y2VwdGlvbi5zZXRMb2NhdGlvbihYUGF0aFV0aWxzLmdldFhQYXRoRXhwckZyb21Ob2RlKGVsZW1lbnQpKTsKLSAgICAgICAgICB0aHJvdyB3c2RsZXhjZXB0aW9uOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdGhyb3dhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oCi0gICAgICAgICAgICAiT1RIRVJfRVJST1IiLAotICAgICAgICAgICAgIlVuYWJsZSB0byByZXNvbHZlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciICsgczEgKyAiJy4iLAotICAgICAgICAgICAgdGhyb3dhYmxlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKEVsZW1lbnQgZWxlbWVudDEgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChlbGVtZW50KTsKLSAgICAgIGVsZW1lbnQxICE9IG51bGw7Ci0gICAgICBlbGVtZW50MSA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudChlbGVtZW50MSkpCi0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgZWxlbWVudDEpKQotICAgICAgICBpbXBvcnQxLnNldERvY3VtZW50YXRpb25FbGVtZW50KGVsZW1lbnQxKTsKLSAgICAgIGVsc2UKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKGVsZW1lbnQxKTsKLQotICAgIHJldHVybiBpbXBvcnQxOwotCi0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVR5cGVzKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBUeXBlcyBwYXJzZVR5cGVzKEVsZW1lbnQgdHlwZXNFbCwgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFR5cGVzIHR5cGVzID0gc3VwZXIucGFyc2VUeXBlcyh0eXBlc0VsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KHR5cGVzRWwsIHR5cGVzKTsKLQotICAgIHJldHVybiB0eXBlczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlQmluZGluZyhvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZyBwYXJzZUJpbmRpbmcoRWxlbWVudCBiaW5kaW5nRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBzdXBlci5wYXJzZUJpbmRpbmcoYmluZGluZ0VsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KGJpbmRpbmdFbCwgYmluZGluZyk7Ci0KLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlQmluZGluZ09wZXJhdGlvbihvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ09wZXJhdGlvbiBwYXJzZUJpbmRpbmdPcGVyYXRpb24oCi0gICAgRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0KLSAgICAvLyBUaGUgZm9sbG93IHRyeS1jYXRjaCB3YXMgYWRkZWQgdG8gZGV0ZWN0IHdoZW4gYSBkdXBsaWNhdGUgb3BlcmF0aW9uIG5hbWUgd2FzIGRldGVjdGVkCi0gICAgdHJ5Ci0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbiA9Ci0gICAgICAgIHN1cGVyLnBhcnNlQmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uRWwsIHBvcnRUeXBlLCBkZWYpOwotICAgIH0KLQotICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKQotICAgIHsKLSAgICAgIGlmIChpYWUuZ2V0TWVzc2FnZSgpLnN0YXJ0c1dpdGgoIkR1cGxpY2F0ZSIpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uID0KLSAgICAgICAgICBwYXJzZUJpbmRpbmdPcGVyYXRpb25XaXRoRHVwbGljYXRlTmFtZXMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgICAgIGRlZik7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgaWFlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBhZGRFbGVtZW50VG9MaXN0KGJpbmRpbmdPcGVyYXRpb25FbCwgYmluZGluZ09wZXJhdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdJbnB1dChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0lucHV0IHBhcnNlQmluZGluZ0lucHV0KAotICAgIEVsZW1lbnQgYmluZGluZ0lucHV0RWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBzdXBlci5wYXJzZUJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nSW5wdXRFbCwgYmluZGluZ0lucHV0KTsKLQotICAgIHJldHVybiBiaW5kaW5nSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdPdXRwdXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPdXRwdXQgcGFyc2VCaW5kaW5nT3V0cHV0KAotICAgIEVsZW1lbnQgYmluZGluZ091dHB1dEVsLAotICAgIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPQotICAgICAgc3VwZXIucGFyc2VCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nT3V0cHV0RWwsIGJpbmRpbmdPdXRwdXQpOwotCi0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdGYXVsdChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0ZhdWx0IHBhcnNlQmluZGluZ0ZhdWx0KAotICAgIEVsZW1lbnQgYmluZGluZ0ZhdWx0RWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSBzdXBlci5wYXJzZUJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nRmF1bHRFbCwgYmluZGluZ0ZhdWx0KTsKLQotICAgIHJldHVybiBiaW5kaW5nRmF1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZU1lc3NhZ2Uob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2UgcGFyc2VNZXNzYWdlKEVsZW1lbnQgbXNnRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBNZXNzYWdlIG1zZyA9IHN1cGVyLnBhcnNlTWVzc2FnZShtc2dFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChtc2dFbCwgbXNnKTsKLQotICAgIHJldHVybiBtc2c7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVBhcnQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIFBhcnQgcGFyc2VQYXJ0KEVsZW1lbnQgcGFydEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIC8vUGFydCBwYXJ0ID0gc3VwZXIucGFyc2VQYXJ0KHBhcnRFbCwgZGVmKTsKLQotICAgIFBhcnQgcGFydCA9IGRlZi5jcmVhdGVQYXJ0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUocGFydEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIC8vIFdTLUk6IFRoZSB0cnktY2F0Y2ggd2FzIGFkZGVkIGZvciBXU0kyNDE2Ci0gICAgUU5hbWUgZWxlbWVudE5hbWU7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBlbGVtZW50TmFtZSA9Ci0gICAgICAgIERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICAgIHBhcnRFbCwKLSAgICAgICAgICBDb25zdGFudHMuQVRUUl9FTEVNRU5ULAotICAgICAgICAgIENvbnN0YW50cy5FTEVNX01FU1NBR0UsCi0gICAgICAgICAgZmFsc2UpOwotICAgIH0KLQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIHdlKQotICAgIHsKLSAgICAgIFN0cmluZyBwcmVmaXhlZFZhbHVlID0KLSAgICAgICAgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfRUxFTUVOVCk7Ci0gICAgICBpbnQgaW5kZXggPSBwcmVmaXhlZFZhbHVlLmluZGV4T2YoJzonKTsKLSAgICAgIFN0cmluZyBsb2NhbFBhcnQgPSBwcmVmaXhlZFZhbHVlLnN1YnN0cmluZyhpbmRleCArIDEpOwotCi0gICAgICBlbGVtZW50TmFtZSA9IG5ldyBRTmFtZShsb2NhbFBhcnQpOwotICAgIH0KLQotICAgIFFOYW1lIHR5cGVOYW1lID0KLSAgICAgIERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICBwYXJ0RWwsCi0gICAgICAgIENvbnN0YW50cy5BVFRSX1RZUEUsCi0gICAgICAgIENvbnN0YW50cy5FTEVNX01FU1NBR0UsCi0gICAgICAgIGZhbHNlKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcGFydC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0RWxlbWVudE5hbWUoZWxlbWVudE5hbWUpOwotICAgIH0KLQotICAgIGlmICh0eXBlTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0VHlwZU5hbWUodHlwZU5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocGFydEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgcGFydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgTWFwIGV4dGVuc2lvbkF0dHJpYnV0ZXMgPSBwYXJ0LmdldEV4dGVuc2lvbkF0dHJpYnV0ZXMoKTsKLQotICAgIGV4dGVuc2lvbkF0dHJpYnV0ZXMucHV0QWxsKGdldFBhcnRBdHRyaWJ1dGVzKHBhcnRFbCwgZGVmKSk7Ci0KLSAgICAvLyBOZWVkIHRvIGRvIHNvbWV0aGluZyBoZXJlIHRvIGxvY2F0ZSBwYXJ0IGRlZmluaXRpb24uCi0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3QocGFydEVsLCBwYXJ0KTsKLQotICAgIHJldHVybiBwYXJ0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VQb3J0VHlwZShvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgUG9ydFR5cGUgcGFyc2VQb3J0VHlwZShFbGVtZW50IHBvcnRUeXBlRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IHN1cGVyLnBhcnNlUG9ydFR5cGUocG9ydFR5cGVFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChwb3J0VHlwZUVsLCBwb3J0VHlwZSk7Ci0KLSAgICByZXR1cm4gcG9ydFR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZU9wZXJhdGlvbihvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgT3BlcmF0aW9uIHBhcnNlT3BlcmF0aW9uKAotICAgIEVsZW1lbnQgb3BFbCwKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgT3BlcmF0aW9uIG9wID0gc3VwZXIucGFyc2VPcGVyYXRpb24ob3BFbCwgcG9ydFR5cGUsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3Qob3BFbCwgb3ApOwotCi0gICAgcmV0dXJuIG9wOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VTZXJ2aWNlKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBTZXJ2aWNlIHBhcnNlU2VydmljZShFbGVtZW50IHNlcnZpY2VFbCwgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFNlcnZpY2Ugc2VydmljZSA9IHN1cGVyLnBhcnNlU2VydmljZShzZXJ2aWNlRWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3Qoc2VydmljZUVsLCBzZXJ2aWNlKTsKLQotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VQb3J0KG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBQb3J0IHBhcnNlUG9ydChFbGVtZW50IHBvcnRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBQb3J0IHBvcnQgPSBzdXBlci5wYXJzZVBvcnQocG9ydEVsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KHBvcnRFbCwgcG9ydCk7Ci0KLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YS5sYW5nLkNsYXNzLCBvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgcGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudCgKLSAgICBDbGFzcyBwYXJlbnRUeXBlLAotICAgIEVsZW1lbnQgZWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPQotICAgICAgc3VwZXIucGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJlbnRUeXBlLCBlbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChlbCwgZXh0RWxlbWVudCk7Ci0KLSAgICByZXR1cm4gZXh0RWxlbWVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlSW5wdXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIElucHV0IHBhcnNlSW5wdXQoRWxlbWVudCBpbnB1dEVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXQgaW5wdXQgPSBzdXBlci5wYXJzZUlucHV0KGlucHV0RWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3QoaW5wdXRFbCwgaW5wdXQpOwotCi0gICAgcmV0dXJuIGlucHV0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VPdXRwdXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIE91dHB1dCBwYXJzZU91dHB1dChFbGVtZW50IG91dHB1dEVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgT3V0cHV0IG91dHB1dCA9IHN1cGVyLnBhcnNlT3V0cHV0KG91dHB1dEVsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KG91dHB1dEVsLCBvdXRwdXQpOwotCi0gICAgcmV0dXJuIG91dHB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlRmF1bHQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIEZhdWx0IHBhcnNlRmF1bHQoRWxlbWVudCBmYXVsdEVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgRmF1bHQgZmF1bHQgPSBzdXBlci5wYXJzZUZhdWx0KGZhdWx0RWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3QoZmF1bHRFbCwgZmF1bHQpOwotCi0gICAgcmV0dXJuIGZhdWx0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjZ2V0RG9jdW1lbnQob3JnLnhtbC5zYXguSW5wdXRTb3VyY2UsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwcm90ZWN0ZWQgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsIFN0cmluZyBkZXNjKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLSAgICB0cnkKLQl7Ci0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihXU0RMUmVhZGVySW1wbC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAJCi0JCi0gIAkgIC8vRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgICAgbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0gICAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotICAgICAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQotICAgICAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0KLSAgICAgIHJldHVybiBkb2M7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgV1NETEV4Y2VwdGlvbi5QQVJTRVJfRVJST1IsCi0gICAgICAgICJQcm9ibGVtIHBhcnNpbmcgJyIgKyBkZXNjICsgIicuIiwKLSAgICAgICAgdCk7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7IAotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0gICAgfSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsaXN0LgotICAgKiBAcmV0dXJuIHRoZSBlbGVtZW50IGxpc3QuCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnRMaXN0IGdldEVsZW1lbnRMaXN0KCkKLSAgewotICAgIHJldHVybiB0aGlzLndzZGxFbGVtZW50TGlzdDsKLSAgfQotCi0gIC8qKiAKLSAgICogQWRkIFdTREwgZWxlbWVudCB0byBlbGVtZW50IGxpc3QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgYWRkRWxlbWVudFRvTGlzdChFbGVtZW50IGVsZW1lbnQsIE9iamVjdCB3c2RsRWxlbWVudCkKLSAgewotICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2VlIGlmIHRoZSBlbGVtZW50IG9iamVjdCBpcyBhbiBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5FbGVtZW50SW1wbAotICAgICAgRWxlbWVudEltcGwgZWxlbWVudEltcGwgPSAoRWxlbWVudEltcGwpIGVsZW1lbnQ7Ci0KLSAgICAgIC8vIElmIGl0IGlzLCB0aGVuIGdldCB0aGUgZWxlbWVudCBsb2NhdGlvbiBpbmZvcm1hdGlvbgotICAgICAgZWxlbWVudExvY2F0aW9uID0KLSAgICAgICAgKEVsZW1lbnRMb2NhdGlvbikgZWxlbWVudEltcGwuZ2V0VXNlckRhdGEoKTsKLQotICAgICAgLy8gQWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgICB0aGlzLndzZGxFbGVtZW50TGlzdC5hZGRFbGVtZW50KHdzZGxFbGVtZW50LCBlbGVtZW50TG9jYXRpb24pOwotICAgIH0KLQotICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKQotICAgIHsKLSAgICAgIC8vIEFERDogU2hvdWxkIHdlIGFkZCB0aGUgZWxlbWVudCB3aXRoIGEgbnVsbCBvciB6ZXJvIGxvY2F0aW9uPwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHdoZW4gYSBXU0RMIGRvY3VtZW50IGNvbnRhaW5zIGR1cGxpY2F0ZSBvcGVyYXRpb24gbmFtZXMuCi0gICAqIEl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBwYXJzZUJpbmRpbmdPcGVyYXRpb24gbWV0aG9kLCBleGNlcHQgdGhhdCBpdCB3aWxsCi0gICAqIGp1c3QgZmluZCB0aGUgZmlyc3Qgb3BlcmF0aW9uIHRoYXQgbWF0Y2hlcyBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KLSAgICovCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBwYXJzZUJpbmRpbmdPcGVyYXRpb25XaXRoRHVwbGljYXRlTmFtZXMoCi0gICAgRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGRlZi5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgU3RyaW5nIG5hbWUgPQotICAgICAgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdPcGVyYXRpb25FbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGJpbmRpbmdPcGVyYXRpb25FbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0lOUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChwYXJzZUJpbmRpbmdJbnB1dCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fT1VUUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQocGFyc2VCaW5kaW5nT3V0cHV0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9GQVVMVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRCaW5kaW5nRmF1bHQocGFyc2VCaW5kaW5nRmF1bHQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudCgKLSAgICAgICAgICBwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICBTdHJpbmcgaW5wdXROYW1lID0gKGJpbmRpbmdJbnB1dCAhPSBudWxsID8gYmluZGluZ0lucHV0LmdldE5hbWUoKSA6IG51bGwpOwotICAgICAgU3RyaW5nIG91dHB1dE5hbWUgPQotICAgICAgICAoYmluZGluZ091dHB1dCAhPSBudWxsID8gYmluZGluZ091dHB1dC5nZXROYW1lKCkgOiBudWxsKTsKLQotICAgICAgLy9PcGVyYXRpb24gb3AgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb24obmFtZSwgaW5wdXROYW1lLCBvdXRwdXROYW1lKTsKLSAgICAgIC8vIEdldCBhbGwgb3BlcmF0aW9ucywgYW5kIHRoZW4gZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgbWF0Y2hlcwotICAgICAgT3BlcmF0aW9uIG9wID0gbnVsbCwgY2hlY2tPcGVyYXRpb247Ci0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSAmJiBvcCA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIG5leHQgb3BlcmF0aW9uCi0gICAgICAgIGNoZWNrT3BlcmF0aW9uID0gKE9wZXJhdGlvbikgaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgIC8vIEdldCB0aGUgb3BlcmF0aW9uIG5hbWUsIGlucHV0IG5hbWUsIGFuZCBvdXRwdXQgbmFtZQotICAgICAgICBTdHJpbmcgY2hlY2tOYW1lID0gY2hlY2tPcGVyYXRpb24uZ2V0TmFtZSgpOwotICAgICAgICBTdHJpbmcgY2hlY2tJbnB1dE5hbWUgPQotICAgICAgICAgIChjaGVja09wZXJhdGlvbi5nZXRJbnB1dCgpID09IG51bGwKLSAgICAgICAgICAgID8gbnVsbAotICAgICAgICAgICAgOiBjaGVja09wZXJhdGlvbi5nZXRJbnB1dCgpLmdldE5hbWUoKSk7Ci0gICAgICAgIFN0cmluZyBjaGVja091dHB1dE5hbWUgPQotICAgICAgICAgIChjaGVja09wZXJhdGlvbi5nZXRPdXRwdXQoKSA9PSBudWxsCi0gICAgICAgICAgICA/IG51bGwKLSAgICAgICAgICAgIDogY2hlY2tPcGVyYXRpb24uZ2V0T3V0cHV0KCkuZ2V0TmFtZSgpKTsKLQotICAgICAgICAvLyBJZiB0aGUgbmFtZXMgbWF0Y2gsIHRoZW4gdGhhdCBvcGVyYXRpb24KLSAgICAgICAgaWYgKChjaGVja05hbWUgIT0gbnVsbCAmJiBjaGVja05hbWUuZXF1YWxzKG5hbWUpKQotICAgICAgICAgICYmICgoY2hlY2tJbnB1dE5hbWUgIT0gbnVsbCAmJiBjaGVja0lucHV0TmFtZS5lcXVhbHMoaW5wdXROYW1lKSkKLSAgICAgICAgICAgIHx8IChjaGVja0lucHV0TmFtZSA9PSBudWxsICYmIGlucHV0TmFtZSA9PSBudWxsKSkKLSAgICAgICAgICAmJiAoKGNoZWNrT3V0cHV0TmFtZSAhPSBudWxsICYmIGNoZWNrT3V0cHV0TmFtZS5lcXVhbHMob3V0cHV0TmFtZSkpCi0gICAgICAgICAgICB8fCAoY2hlY2tPdXRwdXROYW1lID09IG51bGwgJiYgb3V0cHV0TmFtZSA9PSBudWxsKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBvcCA9IGNoZWNrT3BlcmF0aW9uOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgewotICAgICAgICBvcCA9IGRlZi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgICAgb3Auc2V0TmFtZShuYW1lKTsKLSAgICAgICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wKTsKLSAgICAgIH0KLQotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24ob3ApOwotICAgIH0KLQotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTdiNjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci0KLS8qKgotICogU2V0IG9mIFhNTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFdTRExVdGlscwotewotCi0gIC8qKgotICAgKiBNZXRob2QgaXNScGNMaXRlcmFsLgotICAgKiBAcGFyYW0gYmluZGluZ1N0eWxlIGEgYmluZGluZyBzdHlsZS4KLSAgICogQHBhcmFtIG9wZXJhdGlvbiBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBiaW5kaW5nIGlzIHJwYyBsaXRlcmFsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUnBjTGl0ZXJhbCgKLSAgICBTdHJpbmcgYmluZGluZ1N0eWxlLAotICAgIEJpbmRpbmdPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcmV0dXJuIGNoZWNrU3R5bGVBbmRVc2UoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQsCi0gICAgICBiaW5kaW5nU3R5bGUsCi0gICAgICBvcGVyYXRpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0RvY0xpdGVyYWwuCi0gICAqIEBwYXJhbSBiaW5kaW5nU3R5bGUgIHRoZSBiaW5kaW5nIHN0eWxlLgotICAgKiBAcGFyYW0gb3BlcmF0aW9uIGEgV1NETCBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICogQHJldHVybiB0cnVlIGlmIGJpbmRpbmcgaXMgZG9jdW1lbnQgbGl0ZXJhbC4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEb2NMaXRlcmFsKAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICByZXR1cm4gY2hlY2tTdHlsZUFuZFVzZSgKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsCi0gICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCwKLSAgICAgIGJpbmRpbmdTdHlsZSwKLSAgICAgIG9wZXJhdGlvbik7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGNoZWNrU3R5bGVBbmRVc2UuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGNoZWNrU3R5bGVBbmRVc2UoCi0gICAgU3RyaW5nIGNoZWNrU3R5bGUsCi0gICAgU3RyaW5nIGNoZWNrVXNlLAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgYm9vbGVhbiBzdHlsZUZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBzdHlsZUFuZFVzZUZvdW5kID0gZmFsc2U7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IGdldFNvYXBPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZXh0IGVsZW1lbnRzLCB0aGVuIGNoZWNrIGFnYWluc3QgYmluZGluZyBzdHlsZQotICAgIGlmICgoc29hcE9wZXJhdGlvbiA9PSBudWxsKSB8fCAoc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpID09IG51bGwpKQotICAgIHsKLSAgICAgIGlmIChjaGVja1N0eWxlLmVxdWFscyhiaW5kaW5nU3R5bGUpKQotICAgICAgICBzdHlsZUZvdW5kID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGNoZWNrU3R5bGUuZXF1YWxzKHNvYXBPcGVyYXRpb24uZ2V0U3R5bGUoKSkpCi0gICAgICAgIHN0eWxlRm91bmQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHN0eWxlIGZvdW5kIHRoZW4gY2hlY2sgdXNlCi0gICAgaWYgKHN0eWxlRm91bmQpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50Ci0gICAgICBTT0FQQm9keSBzb2FwQm9keSA9IGdldElucHV0U29hcEJvZHkoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBzb2FwYmluZDpib2R5LCB0aGVuIGNoZWNrIGFnYWluc3QgZGVmYXVsdCB1c2UgdmFsdWUKLSAgICAgIGlmICgoc29hcEJvZHkgPT0gbnVsbCkgfHwgKHNvYXBCb2R5LmdldFVzZSgpID09IG51bGwpKQotICAgICAgewotICAgICAgICBpZiAoY2hlY2tVc2UuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgICAgICBzdHlsZUFuZFVzZUZvdW5kID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoY2hlY2tVc2UuZXF1YWxzKHNvYXBCb2R5LmdldFVzZSgpKSkKLSAgICAgICAgICBzdHlsZUFuZFVzZUZvdW5kID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGVBbmRVc2VGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc29hcGJpbmQ6YmluZGluZy4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gc29hcGJpbmQ6YmluZGluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU09BUEJpbmRpbmcgZ2V0U29hcEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBudWxsOwotCi0gICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIGlmICgoZXh0RWxlbWVudHMgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCkgJiYgKHNvYXBCaW5kaW5nID09IG51bGwpOwotICAgICAgICApCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIG9iajsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzb2FwQmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc29hcGJpbmQ6b3BlcmF0aW9uLgotICAgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbiAgYSBCaW5kaW5nT3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHJldHVybiBzb2FwYmluZDpvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNPQVBPcGVyYXRpb24gZ2V0U29hcE9wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBudWxsOwotCi0gICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIGlmICgoZXh0RWxlbWVudHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCkgJiYgKHNvYXBPcGVyYXRpb24gPT0gbnVsbCk7Ci0gICAgICAgICkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iaiA9IGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbikgb2JqOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHNvYXBPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNvYXBiaW5kOmJvZHkgZnJvbSBpbnB1dCBlbGVtZW50LgotICAgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbiAgdGhlIEJpbmRpbmdPcGVyYXRpb24gb2JqZWN0LgotICAgKiBAcmV0dXJuIHNvYXBiaW5kOmJvZHkgZnJvbSBpbnB1dCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQQm9keSBnZXRJbnB1dFNvYXBCb2R5KEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gbnVsbDsKLQotICAgIExpc3QgZXh0RWxlbWVudHMgPSBudWxsOwotCi0gICAgLy8gRmluZCB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50Ci0gICAgaWYgKChleHRFbGVtZW50cyA9Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKQotICAgICAgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gZXh0RWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICAgICAgaXRlcmF0b3IuaGFzTmV4dCgpICYmIChzb2FwQm9keSA9PSBudWxsKTsKLSAgICAgICAgKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqID0gaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgICAgewotICAgICAgICAgIHNvYXBCb2R5ID0gKFNPQVBCb2R5KSBvYmo7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJvZHk7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCBtZXNzYWdlcyByZWZlcmVuY2VkIGJ5IGEgaGVhZGVyIG9yIGhlYWRlcmZhdWx0LgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiAgYSBEZWZpbml0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gbWVzc2FnZXMgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSGFzaFNldCBmaW5kTWVzc2FnZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0KLSAgICBIYXNoU2V0IHRlbXBNZXNzYWdlcywgYmluZGluZ01lc3NhZ2VzID0gbmV3IEhhc2hTZXQoKTsKLQotICAgIEhhc2hTZXQgcG9ydFR5cGVNZXNzYWdlcyA9IGZpbmRNZXNzYWdlcyhiaW5kaW5nLmdldFBvcnRUeXBlKCkpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIG9wZXJhdGlvbgotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIHRoZW4gdGhlIG91dHB1dAotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGVtcE1lc3NhZ2VzID0KLSAgICAgICAgICBmaW5kTWVzc2FnZXMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nSW5wdXQoKQotICAgICAgICAgICAgICAuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICAgICAgICAgICAgLml0ZXJhdG9yKCksCi0gICAgICAgICAgICBwb3J0VHlwZU1lc3NhZ2VzLAotICAgICAgICAgICAgZGVmaW5pdGlvbik7Ci0KLSAgICAgICAgLy8gQWRkIG1lc3NhZ2VzIHRvIGJpbmRpbmcgbWVzc2FnZSBzZXQKLSAgICAgICAgYmluZGluZ01lc3NhZ2VzLmFkZEFsbCh0ZW1wTWVzc2FnZXMpOwotICAgICAgfQotCi0gICAgICAvLyBQcm9jZXNzIG91dHB1dAotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRlbXBNZXNzYWdlcyA9Ci0gICAgICAgICAgZmluZE1lc3NhZ2VzKAotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbgotICAgICAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpCi0gICAgICAgICAgICAgIC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgICAgICAgICAgICAuaXRlcmF0b3IoKSwKLSAgICAgICAgICAgIHBvcnRUeXBlTWVzc2FnZXMsCi0gICAgICAgICAgICBkZWZpbml0aW9uKTsKLQotICAgICAgICAvLyBBZGQgbWVzc2FnZXMgdG8gYmluZGluZyBtZXNzYWdlIHNldAotICAgICAgICBiaW5kaW5nTWVzc2FnZXMuYWRkQWxsKHRlbXBNZXNzYWdlcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdNZXNzYWdlczsKLSAgfQotCi0gIC8qKgotICAgKiBGaW5kIHRoZSBtZXNzYWdlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IGEgaGVhZGVyIG9yIGhlYWRlcmZhdWx0LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgYSBQb3J0VHlwZSBvYmplY3QuCi0gICAqIEByZXR1cm4gaGUgbWVzc2FnZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSGFzaFNldCBmaW5kTWVzc2FnZXMoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgb3BlcmF0aW9uIHRvIHByb2Nlc3MKLSAgICAgIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gR2V0IGlucHV0IGFuZCBvdXRwdXQgbWVzc2FnZQotICAgICAgaWYgKG9wZXJhdGlvbi5nZXRJbnB1dCgpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wZXJhdGlvbi5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICBpZiAob3BlcmF0aW9uLmdldE91dHB1dCgpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wZXJhdGlvbi5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICAvLyBQcm9jZXNzIGFueSBmYXVsdHMKLSAgICAgIEl0ZXJhdG9yIGZhdWx0cyA9IG9wZXJhdGlvbi5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGZhdWx0cy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKCgoRmF1bHQpIGZhdWx0cy5uZXh0KCkpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1lc3NhZ2VTZXQ7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICogQHBhcmFtIGV4dEVsZW1lbnRMaXN0IGEgbGlzdCBvZiBleHRlcm5hbCBlbGVtZW50cy4KLSAgICogQHBhcmFtIG1lc3NhZ2VTZXQgYSBzZXQgb2YgbWVzc2FnZXMuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgYSBoZWFkZXIgb3IgaGVhZGVyZmF1bHQuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIEhhc2hTZXQgZmluZE1lc3NhZ2VzKAotICAgIEl0ZXJhdG9yIGV4dEVsZW1lbnRMaXN0LAotICAgIEhhc2hTZXQgbWVzc2FnZVNldCwKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBIYXNoU2V0IHJldHVyblNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudDsKLSAgICBNZXNzYWdlIHNhdmVNZXNzYWdlID0gbnVsbDsKLQotICAgIHdoaWxlIChleHRFbGVtZW50TGlzdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IGV4dC4gZWxlbWVudAotICAgICAgZXh0RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudExpc3QubmV4dCgpOwotCi0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWU7Ci0gICAgICBNZXNzYWdlIG1lc3NhZ2U7Ci0KLSAgICAgIC8vIElmIHRoaXMgaXMgYSBzb2FwOmhlYWRlciBlbGVtZW50LCB0aGVuIGNoZWNrIGZvciBtZXNzYWdlIHJlZmVyZW5jZQotICAgICAgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgZXh0RWxlbWVudDsKLSAgICAgICAgaWYgKChtZXNzYWdlUU5hbWUgPSBzb2FwSGVhZGVyLmdldE1lc3NhZ2UoKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIElmIG1lc3NhZ2Ugbm90IGZvdW5kLCB0aGVuIGNyZWF0ZSBhIGR1bW15IG1lc3NhZ2UgZWxlbWVudAotICAgICAgICAgIGlmICgobWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBkZWZpbml0aW9uLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZVFOYW1lKTsKLSAgICAgICAgICAgIG1lc3NhZ2Uuc2V0VW5kZWZpbmVkKHRydWUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghbWVzc2FnZVNldC5jb250YWlucyhtZXNzYWdlKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm5TZXQuYWRkKG1lc3NhZ2UpOwotICAgICAgICAgICAgc2F2ZU1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFByb2Nlc3MgYW55IGhlYWRlciBmYXVsdHMgd2l0aGluIHRoaXMgaGVhZGVyCi0gICAgICAgIEl0ZXJhdG9yIGhlYWRlckZhdWx0TGlzdCA9IHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChoZWFkZXJGYXVsdExpc3QuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHNvYXAgaGVhZGVyIGZhdWx0Ci0gICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCA9Ci0gICAgICAgICAgICAoU09BUEhlYWRlckZhdWx0KSBoZWFkZXJGYXVsdExpc3QubmV4dCgpOwotICAgICAgICAgIGlmICgobWVzc2FnZVFOYW1lID0gc29hcEhlYWRlckZhdWx0LmdldE1lc3NhZ2UoKSkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBtZXNzYWdlIG5vdCBmb3VuZCwgdGhlbiBjcmVhdGUgYSBkdW1teSBtZXNzYWdlIGVsZW1lbnQKLSAgICAgICAgICAgIGlmICgobWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpKSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzYWdlID0gZGVmaW5pdGlvbi5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZVFOYW1lKTsKLSAgICAgICAgICAgICAgbWVzc2FnZS5zZXRVbmRlZmluZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIG1lc3NhZ2Ugbm90IGluIG1lc3NhZ2Ugc2V0IGFuZCByZXR1cm4gc2V0LCB0aGVuIGFkZCBpdCAgCi0gICAgICAgICAgICBpZiAoIW1lc3NhZ2VTZXQuY29udGFpbnMobWVzc2FnZSkKLSAgICAgICAgICAgICAgJiYgKChzYXZlTWVzc2FnZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHx8IChzYXZlTWVzc2FnZSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAmJiAhc2F2ZU1lc3NhZ2UuZ2V0UU5hbWUoKS5lcXVhbHMobWVzc2FnZS5nZXRRTmFtZSgpKSkpKQotICAgICAgICAgICAgICByZXR1cm5TZXQuYWRkKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5TZXQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NPQVAxMldTREwoV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgewotCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JaWYgKHdzZGxEb2N1bWVudCAhPSBudWxsKQotCXsKLQkgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHdzZGxEb2N1bWVudC5nZXRCaW5kaW5ncygpOwotCSAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBpZiAoYmluZGluZ3MgIT0gbnVsbCkKLQkgIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLQkJCWV4dGVuc2liaWxpdHlFbGVtZW50TGlzdC5hZGRBbGwoYmluZGluZ3NbaV0uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotCQlJdGVyYXRvciBpdGVyYXRvciA9IGV4dGVuc2liaWxpdHlFbGVtZW50TGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSAKLQkJewotCQkgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCWlmIChXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUDEyLmVxdWFscyhlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCkpKQotCQkJewotCQkJICByZXN1bHQgPSB0cnVlOwotCQkJICBicmVhazsKLQkJCX0KLQkJfQotCSAgfQotCX0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9WaXNpdG9yQWRhcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvVmlzaXRvckFkYXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5MDkzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9WaXNpdG9yQWRhcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Qcm94eTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGNsYXNzIGFkYXB0cyB0aGUgZ2l2ZW4gb2JqZWN0IHdpdGggdGhlIGltcGxlbWVudGVkCi0gKiA8Y29kZT5XU0RMVmlzaXRvcjwvY29kZT4gbWV0aG9kcy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgY2xhc3MgVmlzaXRvckFkYXB0b3IgaW1wbGVtZW50cyBJbnZvY2F0aW9uSGFuZGxlcgotewotCi0gIC8vIG9wdGltaXphdGlvbiBoaW50Ci0gIHN0YXRpYyBmaW5hbCBwcml2YXRlIENsYXNzW10gdmlzaXRvckNsYXNzID0gbmV3IENsYXNzW10geyBXU0RMVmlzaXRvci5jbGFzcyB9OwotCi0gIC8qKgotICAgKiBUaGUgYXJyYXkgaXMgdXNlZCBmb3IgZGV0ZXJtaW5hdGlvbiBvZiBhY3R1YWwgamF2YXgud3NkbCBjbGFzcwotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSB3c2RsID0KLSAgICBuZXcgQ2xhc3NbXSB7Ci0gICAgICBQYXJ0LmNsYXNzLAotICAgICAgU2VydmljZS5jbGFzcywKLSAgICAgIFR5cGVzLmNsYXNzLAotICAgICAgT3BlcmF0aW9uLmNsYXNzLAotICAgICAgSW5wdXQuY2xhc3MsCi0gICAgICBPdXRwdXQuY2xhc3MsCi0gICAgICBGYXVsdC5jbGFzcywKLSAgICAgIEJpbmRpbmcuY2xhc3MsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLAotICAgICAgQmluZGluZ0lucHV0LmNsYXNzLAotICAgICAgQmluZGluZ091dHB1dC5jbGFzcywKLSAgICAgIEJpbmRpbmdGYXVsdC5jbGFzcywKLSAgICAgIEltcG9ydC5jbGFzcywKLSAgICAgIEVsZW1lbnQuY2xhc3MsCi0gICAgICBNZXNzYWdlLmNsYXNzLAotICAgICAgUG9ydC5jbGFzcywKLSAgICAgIFBvcnRUeXBlLmNsYXNzLAotICAgICAgRGVmaW5pdGlvbi5jbGFzcywKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLAotICAgICAgU09BUEJpbmRpbmcuY2xhc3MsCi0gICAgICBTT0FQQm9keS5jbGFzcywKLSAgICAgIFNPQVBIZWFkZXIuY2xhc3MsCi0gICAgICBTT0FQSGVhZGVyRmF1bHQuY2xhc3MsCi0gICAgICBTT0FQRmF1bHQuY2xhc3MsCi0gICAgICBTT0FQT3BlcmF0aW9uLmNsYXNzIH07Ci0KLSAgZmluYWwgcHJpdmF0ZSBPYmplY3QgdmlzaXRvcjsKLQotICBwcml2YXRlIE1hcCBtZXRob2RzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBvICBhIHZpc2l0b3Igb2JqZWN0LgotICAgKi8KLSAgcHJpdmF0ZSBWaXNpdG9yQWRhcHRvcihPYmplY3QgbykKLSAgewotICAgIHRoaXMudmlzaXRvciA9IG87Ci0gIH0KLQotICAvKioKLSAgICogQWRkcyBtZXRob2QgdG8gbWV0aG9kIGJpbmRpbmcuCi0gICAqIEBwYXJhbSB3c2RsTWV0aG9kICAgIGEgV1NETCBtZXRob2QuCi0gICAqIEBwYXJhbSB0YXJnZXRNZXRob2QgIGEgIHRhcmdldCBtZXRob2QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgYWRkTWV0aG9kQmluZGluZyhNZXRob2Qgd3NkbE1ldGhvZCwgTWV0aG9kIHRhcmdldE1ldGhvZCkKLSAgewotICAgIG1ldGhvZHMucHV0KHdzZGxNZXRob2QsIHRhcmdldE1ldGhvZCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBwcm94aWVzIGFsbCAidmlzaXQoWFhYKSIgbWV0aG9kcyB0byB0aGUgY29ycmVzcG9uZGluZwotICAgKiAidmlzaXQoWFhYKSIgbWV0aG9kcyBvZiB0aGUgdGFyZ2V0IHZpc2l0b3Igb2JqZWN0LiAKLSAgICogQHNlZSBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uSGFuZGxlciNpbnZva2UoT2JqZWN0LCBNZXRob2QsIE9iamVjdFtdKQotICAgKi8KLSAgcHVibGljIE9iamVjdCBpbnZva2UoT2JqZWN0IHByb3h5LCBNZXRob2QgbSwgT2JqZWN0W10gcGFyYW1zKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgTWV0aG9kIHRhcmdldCA9IChNZXRob2QpIG1ldGhvZHMuZ2V0KG0pOwotICAgICAgLy8gYXNzZXJ0IHRhcmdldCAhPSBudWxsCi0gICAgICByZXR1cm4gdGFyZ2V0Lmludm9rZSh2aXNpdG9yLCBwYXJhbXMpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBleHRyYWN0IHRoZSBzaG9ydCBjbGFzcyBuYW1lLiAKLSAgICogQHBhcmFtIGMgIGEgY2xhc3MuCi0gICAqIEByZXR1cm4gdGhlIHNob3J0IGNsYXNzIG5hbWUuCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZShDbGFzcyBjKQotICB7Ci0gICAgaWYgKGMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGMuZ2V0TmFtZSgpOwotICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKG5hbWUubGFzdEluZGV4T2YoIi4iKSArIDEpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGdlbmVyYXRlcyBwcm94eSBmb3IgdGhlIGdpdmVuIHZpc2l0b3IuCi0gICAqIFByb3h5IHJlZGlyZWN0cyBhbGwgdmlzaXQoWFhYKSBjYWxsYmFjayB0byB0aGUgaW1wbGVtZW50ZWQgaW4gdmlzaXRvcgotICAgKiBvYmplY3QuCi0gICAqIEBwYXJhbSB2aXNpdG9yICBhIHZpc3RvciBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBwcm94eSBmb3IgdGhlIGdpdmVuIHZpc2l0b3IuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExUcmF2ZXJzYWwgYWRhcHQoT2JqZWN0IHZpc2l0b3IpCi0gIHsKLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0KLSAgICBpZiAodmlzaXRvciA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVmlzaXRvciBvYmplY3QgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLSAgICBWaXNpdG9yQWRhcHRvciBhZGFwdG9yID0gbmV3IFZpc2l0b3JBZGFwdG9yKHZpc2l0b3IpOwotCi0gICAgLy8gY2hlY2sgd2hldGhlciBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZAotICAgIC8vIGdldCByZWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAgICBDbGFzcyBjID0gdmlzaXRvci5nZXRDbGFzcygpOwotICAgIC8vIGl0ZXJhdGVzIHRocm91Z2ggd3NkbCBhcnRpZmFjdHMgYW5kIGxvb2tpbmcgZm9yCi0gICAgLy8gdm9pZCB2aXNpdChYWFgpIGltcGxlbWVudGVkIG1ldGhvZHMuICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGwubGVuZ3RoOyBpKyspCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgbWV0aG9kIGlzIG5vdCBmb3VuZCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duCi0gICAgICAgIE1ldGhvZCBtID0KLSAgICAgICAgICBjLmdldE1ldGhvZCgKLSAgICAgICAgICAgICJ2aXNpdCIsCi0gICAgICAgICAgICBuZXcgQ2xhc3NbXSB7IHdzZGxbaV0sIE9iamVjdC5jbGFzcywgV1NETFRyYXZlcnNhbENvbnRleHQuY2xhc3MgfSk7Ci0gICAgICAgIC8vIHJlZ2lzdGVyIGJpbmRpbmcgV1NETFZpc2l0b3IgbWV0aG9kIC0+IHRhcmdldCB2aXNpdG9yIG1ldGhvZAotICAgICAgICBhZGFwdG9yLmFkZE1ldGhvZEJpbmRpbmcoCi0gICAgICAgICAgV1NETFZpc2l0b3IuY2xhc3MuZ2V0TWV0aG9kKAotICAgICAgICAgICAgInZpc2l0IiwKLSAgICAgICAgICAgIG5ldyBDbGFzc1tdIHsgd3NkbFtpXSwgT2JqZWN0LmNsYXNzLCBXU0RMVHJhdmVyc2FsQ29udGV4dC5jbGFzcyB9KSwKLSAgICAgICAgICBtKTsKLSAgICAgICAgLy8gcmVnaXN0ZXIgdmlzaXRYWFggaW4gV1NETFRyYXZlcnNhbEJ1aWxkZXIKLSAgICAgICAgbSA9Ci0gICAgICAgICAgV1NETFRyYXZlcnNhbC5jbGFzcy5nZXRNZXRob2QoCi0gICAgICAgICAgICAidmlzaXQiICsgZ2V0TmFtZSh3c2RsW2ldKSwKLSAgICAgICAgICAgIG5ldyBDbGFzc1tdIHsgYm9vbGVhbi5jbGFzcyB9KTsKLSAgICAgICAgbS5pbnZva2UodHJhdmVyc2FsLCBuZXcgT2JqZWN0W10geyBCb29sZWFuLlRSVUUgfSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0KLSAgICAvLyBjb25zdHJ1Y3QgdGhlIFdTRExWaXNpdG9yIGJ5IHVzaW5nIGphdmEubGFuZy5yZWZsZWN0LlByb3h5Ci0gICAgQ2xhc3NMb2FkZXIgbG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLSAgICBXU0RMVmlzaXRvciB3c2RsVmlzaXRvciA9Ci0gICAgICAoV1NETFZpc2l0b3IpIFByb3h5Lm5ld1Byb3h5SW5zdGFuY2UobG9hZGVyLCB2aXNpdG9yQ2xhc3MsIGFkYXB0b3IpOwotICAgIC8vIHRyYXZlcnNlIFdTREwgZG9jdW1lbnQKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih3c2RsVmlzaXRvcik7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFRyYXZlcnNhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFRyYXZlcnNhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWJjMmI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoZSBjbGFzcyBpbXBsZW1lbnRzIHBsYWluIHRyYXZlcnNlIG92ZXIgV1NETCBhcnRpZmFjdHMuCi0gKiBXU0RMVHJhdmVyc2FsIGlzIGNvbnRleHQtZHJpdmVuIHRyYXZlcnNhbC4gCi0gKiAKLSAqIEBhdXRob3IgQW5kcmV5IEt1bGlrCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVHJhdmVyc2FsCi17Ci0KLSAgLyoqCi0gICAqIEN1cnJlbnQgV1NETCB2aXNpdG9yIChjYWxsYmFjaykuCi0gICAqLwotICBwcml2YXRlIFdTRExWaXNpdG9yIHZpc2l0b3I7Ci0KLSAgLyoqCi0gICAqIEZsYWdzIHdoaWNoIHNwZWNpZnkgd2hldGhlciB0cmF2ZXJzYWwgd2lsbCB0cmF2ZXJzIGZyb20gb25lIFdTREwgYXJ0aWZhY3QKLSAgICogdG8gYW5vdGhlci4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyQmluZGluZ09wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nMlBvcnRUeXBlID0gdHJ1ZTsgLy8gcmVmZXJlbmNlCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nT3V0cHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uID0gdHJ1ZTsgLy8gcmVmZXJlbmNlICAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ091dHB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMkltcG9ydCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yTWVzc2FnZSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yUG9ydFR5cGUgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMlNlcnZpY2UgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlRmF1bHQyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUZhdWx0Mk1lc3NhZ2UgPSB0cnVlOyAvLyByZWZlcmVuY2UgCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUltcG9ydDJEZWZpbml0aW9uID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlSW1wb3J0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VJbnB1dDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlSW5wdXQyTWVzc2FnZSA9IHRydWU7IC8vIHJlZmVyZW5jZSAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlTWVzc2FnZTJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlTWVzc2FnZTJQYXJ0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24yRmF1bHQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24ySW5wdXQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPdXRwdXQyTWVzc2FnZSA9IHRydWU7IC8vIHJlZmVyZW5jZSAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUG9ydDJCaW5kaW5nID0gdHJ1ZTsgLy8gcmVmZXJlbmNlIAotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VQb3J0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUG9ydFR5cGUyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVBvcnRUeXBlMk9wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNlcnZpY2UyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VTZXJ2aWNlMlBvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VUeXBlczJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlVHlwZXMyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICAvL3ByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNPQVBCb2R5MlBhcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyU09BUEJpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMlNPQVBPcGVyYXRpb24gPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEhlYWRlciA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nRmF1bHQyU09BUEZhdWx0ID0gdHJ1ZTsKLQotICAvKioKLSAgICogRmxhZ3Mgd2hpY2ggc3BlY2lmeSB3aGV0aGVyIHRyYXZlcnNhbCB3aWxsIHZpc2l0IGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBhcnRpZmFjdC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmcgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0QmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmdJbnB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0RGVmaW5pdGlvbiA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRFbGVtZW50ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEltcG9ydCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRJbnB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRNZXNzYWdlID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdE9wZXJhdGlvbiA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0UGFydCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRQb3J0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFBvcnRUeXBlID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNlcnZpY2UgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0VHlwZXMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEJpbmRpbmcgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEJvZHkgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNPQVBPcGVyYXRpb24gPSBmYWxzZTsKLQotICBMaXN0IGFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9uczsKLSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwoKQotICB7Ci0JYWxyZWFkeVRyYXZlcnNlZERlZmluaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2Qgc3BlY2lmaWVzIHRoYXQgdHJhdmVyc2FsIHdpbGwgaWdub3JlIGluZGlyZWN0IHJlZmVyZW5jZXMgYmV0d2VlbgotICAgKiBXU0RMIGFydGlmYWN0cy4gRm9yIGV4YW1wbGU6Ci0gICAqIDxvbD4KLSAgICogICA8bGk+YmluZGluZyB0byBwb3J0IHR5cGU8L2xpPgotICAgKiAgIDxsaT5iaW5kaW5nIG9wZXJhdGlvbiB0byBvcGVyYXRpb248L2xpPgotICAgKiAgIDxsaT5mYXVsdCB0byBtZXNzYWdlPC9saT4KLSAgICogICA8bGk+aW5wdXQgdG8gbWVzc2FnZTwvbGk+Ci0gICAqICAgPGxpPm91dHB1dCB0byBtZXNzYWdlPC9saT4KLSAgICogICA8bGk+cG9ydCB0byBiaW5kaW5nPC9saT4KLSAgICogPC9vbD4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGlnbm9yZVJlZmVyZW5jZXMoKQotICB7Ci0gICAgaWdub3JlQmluZGluZzJQb3J0VHlwZSgpOwotICAgIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKCk7Ci0gICAgaWdub3JlRmF1bHQyTWVzc2FnZSgpOwotICAgIGlnbm9yZUlucHV0Mk1lc3NhZ2UoKTsKLSAgICBpZ25vcmVPdXRwdXQyTWVzc2FnZSgpOwotICAgIGlnbm9yZVBvcnQyQmluZGluZygpOwotICAgIC8vaWdub3JlU09BUEJvZHkyUGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2Qgc2V0cyB2aXNpdG9yLgotICAgKiBAcGFyYW0gdmlzaXRvciAgYSBXU0RMIHZpc2l0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWaXNpdG9yKFdTRExWaXNpdG9yIHZpc2l0b3IpCi0gIHsKLSAgICB0aGlzLnZpc2l0b3IgPSB2aXNpdG9yOwotICB9Ci0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdGhlIHRyYXZlcnNhbC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyU09BUEJpbmRpbmcoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMlNPQVBCaW5kaW5nID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yU09BUE9wZXJhdGlvbigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yU09BUE9wZXJhdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nSW5wdXQyU09BUEhlYWRlcigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQSGVhZGVyID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdJbnB1dDJTT0FQQm9keSgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dDJTT0FQQm9keSgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJTT0FQRmF1bHQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEhlYWRlcjJTT0FQSGVhZGVyRmF1bHQoKQotICB7Ci0gICAgdHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24oKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZzJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyUG9ydFR5cGUoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMlBvcnRUeXBlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdGYXVsdDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdJbnB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0lucHV0MkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nRmF1bHQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdJbnB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdPdXRwdXQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPdXRwdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24yQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVEZWZpbml0aW9uMkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJJbXBvcnQoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkltcG9ydCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVEZWZpbml0aW9uMk1lc3NhZ2UoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMk1lc3NhZ2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJQb3J0VHlwZSgpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yUG9ydFR5cGUgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJTZXJ2aWNlKCkKLSAgewotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJTZXJ2aWNlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24yVHlwZXMoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VGYXVsdDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0Mk1lc3NhZ2UoKQotICB7Ci0gICAgdHJhdmVyc2VGYXVsdDJNZXNzYWdlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUltcG9ydDJEZWZpbml0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW1wb3J0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVJbnB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVJbnB1dDJNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlSW5wdXQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVNZXNzYWdlMkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VNZXNzYWdlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlTWVzc2FnZTJQYXJ0KCkKLSAgewotICAgIHRyYXZlcnNlTWVzc2FnZTJQYXJ0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbjJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlT3BlcmF0aW9uMkZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbjJJbnB1dCgpCi0gIHsKLSAgICB0cmF2ZXJzZU9wZXJhdGlvbjJJbnB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPcGVyYXRpb24yT3V0cHV0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMk91dHB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPdXRwdXQyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZU91dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU91dHB1dDJNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlT3V0cHV0Mk1lc3NhZ2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUGFydDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVBvcnQyQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnQyQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVQb3J0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VQb3J0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydDJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydFR5cGUyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnRUeXBlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydFR5cGUyT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlUG9ydFR5cGUyT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNlcnZpY2UyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlU2VydmljZTJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTZXJ2aWNlMlBvcnQoKQotICB7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMlBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlVHlwZXMyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVR5cGVzMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4uLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVUeXBlczJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVR5cGVzMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRTT0FQQmluZGluZyhib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTT0FQQmluZGluZyA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBCb2R5KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBCb2R5ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0U09BUEZhdWx0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBGYXVsdCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBIZWFkZXIoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0U09BUEhlYWRlciA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBIZWFkZXJGYXVsdChib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTT0FQSGVhZGVyRmF1bHQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRTT0FQT3BlcmF0aW9uKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBPcGVyYXRpb24gPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRCaW5kaW5nKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEJpbmRpbmcgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRCaW5kaW5nRmF1bHQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ0ZhdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0QmluZGluZ0lucHV0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEJpbmRpbmdJbnB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbiA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEJpbmRpbmdPdXRwdXQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ091dHB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdERlZmluaXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RGVmaW5pdGlvbiA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEVsZW1lbnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RWxlbWVudCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0RmF1bHQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RmF1bHQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRJbXBvcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0SW1wb3J0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0SW5wdXQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0SW5wdXQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRNZXNzYWdlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdE1lc3NhZ2UgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRPcGVyYXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0T3BlcmF0aW9uID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0T3V0cHV0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdE91dHB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBhcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0UGFydCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBvcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0UG9ydCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBvcnRUeXBlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFBvcnRUeXBlID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0U2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTZXJ2aWNlID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0VHlwZXMoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0VHlwZXMgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkJpbmRpbmcgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZVBvcnQyQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0lucHV0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nSW5wdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ091dHB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24oKQotICB7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRGVmaW5pdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlUG9ydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUZhdWx0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZU91dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZU1lc3NhZ2UyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0VHlwZTJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VUeXBlczJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nRmF1bHQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlVHlwZXMyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmcyU09BUEJpbmRpbmcgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJTT0FQT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEJvZHkoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQSGVhZGVyKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNPQVBIZWFkZXIyU09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW1wb3J0KCkKLSAgewotICAgIHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24gPSBmYWxzZTsgLy8gZml4Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW5wdXQoKQotICB7Ci0gICAgdHJhdmVyc2VPcGVyYXRpb24ySW5wdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlRmF1bHQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJNZXNzYWdlID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VJbnB1dDJNZXNzYWdlID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VPdXRwdXQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0VHlwZTJPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPdXRwdXQoKQotICB7Ci0gICAgdHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUGFydCgpCi0gIHsKLSAgICB0cmF2ZXJzZU1lc3NhZ2UyUGFydCA9IGZhbHNlOwotICAgIC8vdHJhdmVyc2VTT0FQQm9keTJQYXJ0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNlcnZpY2UyUG9ydCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVBvcnRUeXBlKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJQb3J0VHlwZSA9IGZhbHNlOwotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJQb3J0VHlwZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNlcnZpY2UoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMlNlcnZpY2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVUeXBlcygpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yVHlwZXMgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVzZVhYWCB2YXJpYWJsZXMgYWNjb3JkaW5nIHRvIHRoZSB2aXNpdFhYWCB2YXJpYWJsZXMKLSAgICovCi0gIHByaXZhdGUgdm9pZCBhZGp1c3QoKQotICB7Ci0gICAgYWRqdXN0UGFydCgpOwotICAgIGFkanVzdFNlcnZpY2UoKTsKLSAgICBhZGp1c3RUeXBlcygpOwotICAgIGFkanVzdE9wZXJhdGlvbigpOwotICAgIGFkanVzdElucHV0KCk7Ci0gICAgYWRqdXN0T3V0cHV0KCk7Ci0gICAgYWRqdXN0RmF1bHQoKTsKLSAgICBhZGp1c3RCaW5kaW5nKCk7Ci0gICAgYWRqdXN0QmluZGluZ09wZXJhdGlvbigpOwotICAgIGFkanVzdEJpbmRpbmdJbnB1dCgpOwotICAgIGFkanVzdEJpbmRpbmdPdXRwdXQoKTsKLSAgICBhZGp1c3RCaW5kaW5nRmF1bHQoKTsKLSAgICBhZGp1c3RJbXBvcnQoKTsKLSAgICBhZGp1c3RFbGVtZW50KCk7Ci0gICAgYWRqdXN0TWVzc2FnZSgpOwotICAgIGFkanVzdFBvcnQoKTsKLSAgICBhZGp1c3RQb3J0VHlwZSgpOwotICAgIGFkanVzdERlZmluaXRpb24oKTsKLSAgICBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIGFkanVzdFNPQVBCaW5kaW5nKCk7Ci0gICAgYWRqdXN0U09BUEJvZHkoKTsKLSAgICBhZGp1c3RTT0FQSGVhZGVyKCk7Ci0gICAgYWRqdXN0U09BUEhlYWRlckZhdWx0KCk7Ci0gICAgYWRqdXN0U09BUEZhdWx0KCk7Ci0gICAgYWRqdXN0U09BUE9wZXJhdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPSB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UGFydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRQYXJ0IHx8ICh0cmF2ZXJzZVBhcnQyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQYXJ0KCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RTT0FQSGVhZGVyKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRTT0FQSGVhZGVyCi0gICAgICAgIHx8ICh0cmF2ZXJzZVNPQVBIZWFkZXIyU09BUEhlYWRlckZhdWx0ICYmIGFkanVzdFNPQVBIZWFkZXJGYXVsdCgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlU09BUEhlYWRlcigpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ091dHB1dCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ091dHB1dAotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ091dHB1dDJTT0FQQm9keQotICAgICAgICAgICYmIGFkanVzdFNPQVBCb2R5KCkKLSAgICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIgJiYgYWRqdXN0U09BUEhlYWRlcigpKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEVsZW1lbnQoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0RWxlbWVudDsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlRWxlbWVudCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0VHlwZXMoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdFR5cGVzCi0gICAgICAgIHx8ICh0cmF2ZXJzZVR5cGVzMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VUeXBlczJFeHRlbnNpYmlsaXR5RWxlbWVudCAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlVHlwZXMoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdFNPQVBCaW5kaW5nKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPSB2aXNpdFNPQVBCaW5kaW5nOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQQmluZGluZygpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UG9ydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0UG9ydAotICAgICAgICB8fCAodHJhdmVyc2VQb3J0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZVBvcnQyQmluZGluZyAmJiBhZGp1c3RCaW5kaW5nKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQb3J0KCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RPcGVyYXRpb24oKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdE9wZXJhdGlvbgotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZU9wZXJhdGlvbjJJbnB1dCAmJiBhZGp1c3RJbnB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ICYmIGFkanVzdE91dHB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yRmF1bHQgJiYgYWRqdXN0RmF1bHQoKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZU9wZXJhdGlvbigpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbgotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdGYXVsdCAmJiBhZGp1c3RCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nT3V0cHV0ICYmIGFkanVzdEJpbmRpbmdPdXRwdXQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJPcGVyYXRpb24gJiYgYWRqdXN0T3BlcmF0aW9uKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0ICYmIGFkanVzdEJpbmRpbmdJbnB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJTT0FQT3BlcmF0aW9uICYmIGFkanVzdFNPQVBPcGVyYXRpb24oKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdElucHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRJbnB1dAotICAgICAgICB8fCAodHJhdmVyc2VJbnB1dDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlSW5wdXQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVJbnB1dCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZygpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZwotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24gJiYgYWRqdXN0QmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmcyUG9ydFR5cGUgJiYgYWRqdXN0UG9ydFR5cGUoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZzJTT0FQQmluZGluZyAmJiBhZGp1c3RTT0FQQmluZGluZygpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlQmluZGluZygpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U09BUEJvZHkoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0U09BUEJvZHk7Ci0gICAgLyogfHwgCi0gICAgCQkodHJhdmVyc2VTT0FQQm9keTJQYXJ0ICYmIGFkanVzdFBhcnQoKSk7Ki8KLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlU09BUEJvZHkoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdFNPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRTT0FQSGVhZGVyRmF1bHQ7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ0lucHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRCaW5kaW5nSW5wdXQKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICAgICAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkKLSAgICAgICAgICAmJiBhZGp1c3RTT0FQQm9keSgpCi0gICAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgJiYgYWRqdXN0U09BUEhlYWRlcigpKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdJbnB1dCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0T3V0cHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRPdXRwdXQKLSAgICAgICAgfHwgKHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPdXRwdXQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVPdXRwdXQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEJpbmRpbmdGYXVsdCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ0ZhdWx0Ci0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCAmJiBhZGp1c3RTT0FQRmF1bHQoKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U09BUE9wZXJhdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRTT0FQT3BlcmF0aW9uOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQT3BlcmF0aW9uKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3REZWZpbml0aW9uKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXREZWZpbml0aW9uCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24ySW1wb3J0ICYmIGFkanVzdEltcG9ydCgpKQotICAgICAgICB8fCAodHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzICYmIGFkanVzdFR5cGVzKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICAgICAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VEZWZpbml0aW9uMlBvcnRUeXBlICYmIGFkanVzdFBvcnRUeXBlKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyAmJiBhZGp1c3RCaW5kaW5nKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yU2VydmljZSAmJiBhZGp1c3RTZXJ2aWNlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVEZWZpbml0aW9uKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RTT0FQRmF1bHQoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0U09BUEZhdWx0OwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQRmF1bHQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEltcG9ydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRJbXBvcnQgfHwgKHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24KLSAgICAvKiAmJiBhZGp1c3REZWZpbml0aW9uKCkqLwotICAgICAgKQotICAgIHx8IC8vIGF2b2lkIGN5Y2xpbmcgcHJvYmxlbS4gVGh1cywgeW91IHNob3VsZCBjYWxsIGlnbm9yZUltcG9ydCBtYW51YWxseSAgCi0gICAodHJhdmVyc2VJbXBvcnQyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVJbXBvcnQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEZhdWx0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRGYXVsdAotICAgICAgICB8fCAodHJhdmVyc2VGYXVsdDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlRmF1bHQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UG9ydFR5cGUoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdFBvcnRUeXBlCi0gICAgICAgIHx8ICh0cmF2ZXJzZVBvcnRUeXBlMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VQb3J0VHlwZTJPcGVyYXRpb24gJiYgYWRqdXN0T3BlcmF0aW9uKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQb3J0VHlwZSgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U2VydmljZSgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0U2VydmljZQotICAgICAgICB8fCAodHJhdmVyc2VTZXJ2aWNlMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZVNlcnZpY2UyUG9ydCAmJiBhZGp1c3RQb3J0KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTZXJ2aWNlKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RNZXNzYWdlKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRNZXNzYWdlCi0gICAgICAgIHx8ICh0cmF2ZXJzZU1lc3NhZ2UyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZU1lc3NhZ2UyUGFydCAmJiBhZGp1c3RQYXJ0KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVNZXNzYWdlKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpFeHRlbnNpYmlsaXR5RWxlbWVudCAgYSBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG9iakV4dGVuc2liaWxpdHlFbGVtZW50LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRFeHRlbnNpYmlsaXR5RWxlbWVudChvYmpFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgaWYgKHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9iakV4dGVuc2liaWxpdHlFbGVtZW50LCBwYXJlbnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwYXJ0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialBhcnQgIHRoZSBXU0RMIHBhcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKFBhcnQgb2JqUGFydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVBhcnRQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldFBhcnQob2JqUGFydCk7Ci0gICAgaWYgKHZpc2l0UGFydCkKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialBhcnQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQYXJ0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialBhcnQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VQYXJ0MkVsZW1lbnQpCi0gICAgICB0cmF2ZXJzZShvYmpQYXJ0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9ialBhcnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGhlYWRlciBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEhlYWRlciAgYSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgU09BUEhlYWRlciBvYmpTT0FQSGVhZGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVNPQVBIZWFkZXJQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldFNPQVBIZWFkZXIob2JqU09BUEhlYWRlcik7Ci0gICAgaWYgKHZpc2l0U09BUEhlYWRlcikKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBIZWFkZXIsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NTT0FQSGVhZGVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialNPQVBIZWFkZXIgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdAotICAgICAgJiYgb2JqU09BUEhlYWRlci5nZXRTT0FQSGVhZGVyRmF1bHRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialNPQVBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoU09BUEhlYWRlckZhdWx0KSBpdC5uZXh0KCksIG9ialNPQVBIZWFkZXIsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NTT0FQSGVhZGVyKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqRWxlbWVudCAgYSBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEVsZW1lbnQgb2JqRWxlbWVudCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRFbGVtZW50KG9iakVsZW1lbnQpOwotICAgIGlmICh2aXNpdEVsZW1lbnQpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9iakVsZW1lbnQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialR5cGVzICBhIFdTREwgdHlwZXMgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgcGFyZW50IG9mIHRoZSBXU0RMIHR5cGVzIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFR5cGVzIG9ialR5cGVzLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVR5cGVzUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRUeXBlcyhvYmpUeXBlcyk7Ci0gICAgaWYgKHZpc2l0VHlwZXMpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpUeXBlcywgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1R5cGVzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialR5cGVzID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlVHlwZXMyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpUeXBlcy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpUeXBlcywgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NUeXBlcygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVR5cGVzMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpUeXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqVHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpUeXBlcywgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1R5cGVzKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEJpbmRpbmcgIGEgV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTT0FQQmluZGluZyBvYmpTT0FQQmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRTT0FQQmluZGluZyhvYmpTT0FQQmluZGluZyk7Ci0gICAgaWYgKHZpc2l0U09BUEJpbmRpbmcpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBCaW5kaW5nLCBwYXJlbnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBkZWZpbml0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpEZWZpbml0aW9uICBhIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBkZWZpbml0aW9uIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgRGVmaW5pdGlvbiBvYmpEZWZpbml0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0JaWYgKChvYmpEZWZpbml0aW9uID09IG51bGwpIHx8ICh0aGlzLmFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9ucy5jb250YWlucyhvYmpEZWZpbml0aW9uKSkpCi0JewotCSAgcmV0dXJuOwkKLQl9Ci0JdGhpcy5hbHJlYWR5VHJhdmVyc2VkRGVmaW5pdGlvbnMuYWRkKG9iakRlZmluaXRpb24pOwotICAgIGN0eC5yZXN1bWVEZWZpbml0aW9uUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXREZWZpbml0aW9uKG9iakRlZmluaXRpb24pOwotCi0gICAgaWYgKHZpc2l0RGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9iakRlZmluaXRpb24sIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NEZWZpbml0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJJbXBvcnQgJiYgb2JqRGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBWZWN0b3IgdiA9IChWZWN0b3IpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKHYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGl0MiA9IHYuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cmF2ZXJzZSgoSW1wb3J0KSBpdDIubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VEZWZpbml0aW9uMkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqRGVmaW5pdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakRlZmluaXRpb24uZ2V0VHlwZXMoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NEZWZpbml0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJNZXNzYWdlICYmIG9iakRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqRGVmaW5pdGlvbi5nZXRNZXNzYWdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoTWVzc2FnZSkgaXQubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzRGVmaW5pdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJQb3J0VHlwZSAmJiBvYmpEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUG9ydFR5cGUpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyAmJiBvYmpEZWZpbml0aW9uLmdldEJpbmRpbmdzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEJpbmRpbmcpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yU2VydmljZSAmJiBvYmpEZWZpbml0aW9uLmdldFNlcnZpY2VzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKFNlcnZpY2UpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9iakRlZmluaXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzRGVmaW5pdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwb3J0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialBvcnQgIGEgV1NETCBwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgcGFyZW50IG9mIHRoZSBXU0RMIHBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZShQb3J0IG9ialBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVQb3J0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRQb3J0KG9ialBvcnQpOwotICAgIGlmICh2aXNpdFBvcnQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpQb3J0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzUG9ydCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpQb3J0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlUG9ydDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9ialBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqUG9ydCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlUG9ydDJCaW5kaW5nKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9ialBvcnQuZ2V0QmluZGluZygpLCBvYmpQb3J0LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpQb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpQb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqUG9ydCwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iak9wZXJhdGlvbiAgYSBXU0RMIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIG9wZXJhdGlvbiBhcnRpZmFjdHQuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE9wZXJhdGlvbiBvYmpPcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRPcGVyYXRpb24ob2JqT3BlcmF0aW9uKTsKLSAgICBpZiAodmlzaXRPcGVyYXRpb24pCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpPcGVyYXRpb24sIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqT3BlcmF0aW9uID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPcGVyYXRpb24ySW5wdXQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3BlcmF0aW9uLmdldElucHV0KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iak9wZXJhdGlvbi5nZXRPdXRwdXQoKSwgb2JqT3BlcmF0aW9uLCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZU9wZXJhdGlvbjJGYXVsdCAmJiBvYmpPcGVyYXRpb24uZ2V0RmF1bHRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iak9wZXJhdGlvbi5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEZhdWx0KSBpdC5uZXh0KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc09wZXJhdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpJbnB1dCAgYSBXU0RMIGlucHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgIHBhcmVudCBvZiB0aGUgV1NETCBpbnB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBJbnB1dCBvYmpJbnB1dCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVJbnB1dFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0SW5wdXQob2JqSW5wdXQpOwotICAgIGlmICh2aXNpdElucHV0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqSW5wdXQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NJbnB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpJbnB1dCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUlucHV0MkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqSW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqSW5wdXQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW5wdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VJbnB1dDJNZXNzYWdlKQotICAgICAgdHJhdmVyc2Uob2JqSW5wdXQuZ2V0TWVzc2FnZSgpLCBvYmpJbnB1dCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEJvZHkgIGEgV1NETCBTT0FQIGJvZHkgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTT0FQQm9keSBvYmpTT0FQQm9keSwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vICAJY3R4LnJlc3VtZVNPQVBCb2R5UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRTT0FQQm9keShvYmpTT0FQQm9keSk7Ci0gICAgaWYgKHZpc2l0U09BUEJvZHkpCi0gICAgICAvLwl7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBCb2R5LCBwYXJlbnQsIGN0eCk7Ci0gICAgLyoJICBpZiAoIWN0eC5wcm9jZXNzU09BUEJvZHkoKSkKLSAgICAJCXJldHVybjsKLSAgICAJfQotICAgIAlpZiAob2JqU09BUEJvZHkgPT0gbnVsbCkKLSAgICAJCXJldHVybjsKLSAgICAJaWYgKHRyYXZlcnNlU09BUEJvZHkyUGFydCAmJiBvYmpTT0FQQm9keS5nZXRQYXJ0cygpICE9IG51bGwpIHsKLSAgICAJICBpZiAoY3R4KQotICAgIAkgIEl0ZXJhdG9yIGl0ID0gb2JqU09BUEJvZHkuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgIAkgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAJICAJCi0gICAgCQl0cmF2ZXJzZSgoUGFydClpdC5uZXh0KCksIG9ialNPQVBCb2R5LCBjdHgpOwotICAgIAkJaWYgKCFjdHgucHJvY2Vzc1NPQVBCb2R5KCkpCi0gICAgCQkgIHJldHVybjsKLSAgICAJICB9Ci0gICAgCX0KLSAgICAqLwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNPQVBIZWFkZXJGYXVsdCAgYSBXU0RMIFNPQVAgaGVhZGVyIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBIZWFkZXJGYXVsdCBvYmpTT0FQSGVhZGVyRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHguc2V0U09BUEhlYWRlckZhdWx0KG9ialNPQVBIZWFkZXJGYXVsdCk7Ci0gICAgaWYgKHZpc2l0U09BUEhlYWRlckZhdWx0KQotICAgICAgdmlzaXRvci52aXNpdChvYmpTT0FQSGVhZGVyRmF1bHQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpPdXRwdXQgIGEgV1NETCBvdXRwdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICogQHBhcmFtIGN0eAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE91dHB1dCBvYmpPdXRwdXQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lT3V0cHV0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRPdXRwdXQob2JqT3V0cHV0KTsKLSAgICBpZiAodmlzaXRPdXRwdXQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpPdXRwdXQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPdXRwdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqT3V0cHV0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iak91dHB1dCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPdXRwdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPdXRwdXQyTWVzc2FnZSkKLSAgICAgIHRyYXZlcnNlKG9iak91dHB1dC5nZXRNZXNzYWdlKCksIG9iak91dHB1dCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSAKLSAgICogc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdGYXVsdCAgYSBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nRmF1bHQgb2JqQmluZGluZ0ZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUJpbmRpbmdGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ0ZhdWx0KG9iakJpbmRpbmdGYXVsdCk7Ci0gICAgaWYgKHZpc2l0QmluZGluZ0ZhdWx0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ0ZhdWx0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakJpbmRpbmdGYXVsdCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdGYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdAotICAgICAgJiYgb2JqQmluZGluZ0ZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFNPQVBGYXVsdCkKLSAgICAgICAgICB0cmF2ZXJzZSgoU09BUEZhdWx0KSBvLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgJiYgb2JqQmluZGluZ0ZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNPQVBPcGVyYXRpb24gIGEgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBPcGVyYXRpb24gb2JqU09BUE9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRTT0FQT3BlcmF0aW9uKG9ialNPQVBPcGVyYXRpb24pOwotICAgIGlmICh2aXNpdFNPQVBPcGVyYXRpb24pCi0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBPcGVyYXRpb24sIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdJbnB1dCAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIGlucHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nSW5wdXQgb2JqQmluZGluZ0lucHV0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUJpbmRpbmdJbnB1dFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ0lucHV0KG9iakJpbmRpbmdJbnB1dCk7Ci0gICAgaWYgKHZpc2l0QmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ0lucHV0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakJpbmRpbmdJbnB1dCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdJbnB1dDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdJbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpCaW5kaW5nSW5wdXQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCh0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSB8fCB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQSGVhZGVyKQotICAgICAgJiYgb2JqQmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAodHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkgJiYgKG8gaW5zdGFuY2VvZiBTT0FQQm9keSkpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCb2R5KSBvLCBvYmpCaW5kaW5nSW5wdXQsIGN0eCk7Ci0gICAgICAgIGVsc2UgaWYgKHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgJiYgKG8gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKSkKLSAgICAgICAgICB0cmF2ZXJzZSgoU09BUEhlYWRlcikgbywgb2JqQmluZGluZ0lucHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9iakJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ0lucHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byAKLSAgICogdGhlIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpCaW5kaW5nT3BlcmF0aW9uICBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9iakJpbmRpbmdPcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ09wZXJhdGlvbihvYmpCaW5kaW5nT3BlcmF0aW9uKTsKLSAgICBpZiAodmlzaXRCaW5kaW5nT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ09wZXJhdGlvbiwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqQmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZSgKLSAgICAgICAgb2JqQmluZGluZ09wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLAotICAgICAgICBvYmpCaW5kaW5nT3BlcmF0aW9uLAotICAgICAgICBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMlNPQVBPcGVyYXRpb24KLSAgICAgICYmIG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBPcGVyYXRpb24pIG8sIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nT3BlcmF0aW9uKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ09wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCksIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCksIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ091dHB1dCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZSgKLSAgICAgICAgb2JqQmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCksCi0gICAgICAgIG9iakJpbmRpbmdPcGVyYXRpb24sCi0gICAgICAgIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0Ci0gICAgICAmJiBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChCaW5kaW5nRmF1bHQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ09wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEZhdWx0ICBhIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBGYXVsdCBvYmpTT0FQRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHguc2V0U09BUEZhdWx0KG9ialNPQVBGYXVsdCk7Ci0gICAgaWYgKHZpc2l0U09BUEZhdWx0KQotICAgICAgdmlzaXRvci52aXNpdChvYmpTT0FQRmF1bHQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqQmluZGluZyAgYSBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEJpbmRpbmcgb2JqQmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRCaW5kaW5nKG9iakJpbmRpbmcpOwotICAgIGlmICh2aXNpdEJpbmRpbmcpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpCaW5kaW5nLCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpCaW5kaW5nID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqQmluZGluZywgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJTT0FQQmluZGluZwotICAgICAgJiYgb2JqQmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCaW5kaW5nKSBvLCBvYmpCaW5kaW5nLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJQb3J0VHlwZSkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpCaW5kaW5nLmdldFBvcnRUeXBlKCksIG9iakJpbmRpbmcsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmcyQmluZGluZ09wZXJhdGlvbgotICAgICAgJiYgb2JqQmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChCaW5kaW5nT3BlcmF0aW9uKSBpdC5uZXh0KCksIG9iakJpbmRpbmcsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpCaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZywgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmcoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqRmF1bHQgIGEgV1NETCBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICBwYXJlbnQgb2YgdGhlIFdTREwgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgRmF1bHQgb2JqRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lRmF1bHRQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldEZhdWx0KG9iakZhdWx0KTsKLSAgICBpZiAodmlzaXRGYXVsdCkKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9iakZhdWx0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzRmF1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqRmF1bHQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VGYXVsdDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iakZhdWx0LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRmF1bHQyTWVzc2FnZSkKLSAgICAgIHRyYXZlcnNlKG9iakZhdWx0LmdldE1lc3NhZ2UoKSwgb2JqRmF1bHQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBzZXJ2aWNlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNlcnZpY2UgIGEgV1NETCBzZXJ2aWNlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIHNlcnZpY2UgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTZXJ2aWNlIG9ialNlcnZpY2UsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lU2VydmljZVByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0U2VydmljZShvYmpTZXJ2aWNlKTsKLSAgICBpZiAodmlzaXRTZXJ2aWNlKQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqU2VydmljZSwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1NlcnZpY2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqU2VydmljZSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpTZXJ2aWNlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9ialNlcnZpY2UsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVNlcnZpY2UyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9ialNlcnZpY2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialNlcnZpY2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpTZXJ2aWNlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlU2VydmljZTJQb3J0ICYmIG9ialNlcnZpY2UuZ2V0UG9ydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqU2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUG9ydCkgaXQubmV4dCgpLCBvYmpTZXJ2aWNlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbXBvcnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqSW1wb3J0ICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICBwYXJlbnQgb2YgdGhlIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBJbXBvcnQgb2JqSW1wb3J0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUltcG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0SW1wb3J0KG9iakltcG9ydCk7Ci0gICAgaWYgKHZpc2l0SW1wb3J0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqSW1wb3J0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW1wb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakltcG9ydCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUltcG9ydDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpJbXBvcnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW1wb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24pCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9iakltcG9ydC5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgIGlmICgoZGVmaW5pdGlvbiAhPSBudWxsKSAmJiAoIWFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9ucy5jb250YWlucyhkZWZpbml0aW9uKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBhbHJlYWR5VHJhdmVyc2VkRGVmaW5pdGlvbnMuYWRkKGRlZmluaXRpb24pOwotICAgICAgICAgIHRyYXZlcnNlKG9iakltcG9ydC5nZXREZWZpbml0aW9uKCksIG9iakltcG9ydCwgY3R4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKXt9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSAKLSAgICogc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdPdXRwdXQgIGEgV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEJpbmRpbmdPdXRwdXQgb2JqQmluZGluZ091dHB1dCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVCaW5kaW5nT3V0cHV0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRCaW5kaW5nT3V0cHV0KG9iakJpbmRpbmdPdXRwdXQpOwotICAgIGlmICh2aXNpdEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpCaW5kaW5nT3V0cHV0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpCaW5kaW5nT3V0cHV0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKAotICAgICAgICBvYmpCaW5kaW5nT3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksCi0gICAgICAgIG9iakJpbmRpbmdPdXRwdXQsCi0gICAgICAgIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgodHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBCb2R5IHx8IHRyYXZlcnNlQmluZGluZ091dHB1dDJTT0FQSGVhZGVyKQotICAgICAgJiYgb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgJiYgKG8gaW5zdGFuY2VvZiBTT0FQQm9keSkpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCb2R5KSBvLCBvYmpCaW5kaW5nT3V0cHV0LCBjdHgpOwotICAgICAgICBlbHNlIGlmICh0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciAmJiAobyBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpKQotICAgICAgICAgIHRyYXZlcnNlKChTT0FQSGVhZGVyKSBvLCBvYmpCaW5kaW5nT3V0cHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ091dHB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgJiYgb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCksIG9iakJpbmRpbmdPdXRwdXQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nT3V0cHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpQb3J0VHlwZSAgYSBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFBvcnRUeXBlIG9ialBvcnRUeXBlLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVBvcnRUeXBlUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRQb3J0VHlwZShvYmpQb3J0VHlwZSk7Ci0gICAgaWYgKHZpc2l0UG9ydFR5cGUpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpQb3J0VHlwZSwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnRUeXBlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialBvcnRUeXBlID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlUG9ydFR5cGUyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpQb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpQb3J0VHlwZSwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQb3J0VHlwZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVBvcnRUeXBlMk9wZXJhdGlvbiAmJiBvYmpQb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKE9wZXJhdGlvbikgaXQubmV4dCgpLCBvYmpQb3J0VHlwZSwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnRUeXBlKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG1lc3NhZ2UgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqTWVzc2FnZSAgYSBXU0RMIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgbWVzc2FnZS4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE1lc3NhZ2Ugb2JqTWVzc2FnZSwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVNZXNzYWdlUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRNZXNzYWdlKG9iak1lc3NhZ2UpOwotICAgIGlmICh2aXNpdE1lc3NhZ2UpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpNZXNzYWdlLCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzTWVzc2FnZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpNZXNzYWdlID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlTWVzc2FnZTJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iak1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqTWVzc2FnZSwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NNZXNzYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlTWVzc2FnZTJQYXJ0ICYmIG9iak1lc3NhZ2UuZ2V0UGFydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqTWVzc2FnZS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUGFydCkgaXQubmV4dCgpLCBvYmpNZXNzYWdlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzTWVzc2FnZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwYXJ0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFBhcnQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgc2VydmljZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHNlcnZpY2UgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTZXJ2aWNlIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhIFdTREwgdHlwZXMgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShUeXBlcyBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShPcGVyYXRpb24gYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgaW5wdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBpbnB1dCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKElucHV0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIG91dHB1dCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE91dHB1dCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGZhdWx0IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoQmluZGluZ09wZXJhdGlvbiBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIGlucHV0IGFydGlmYWN0IGFjY29yZGluZyB0byAKLSAgICogdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nSW5wdXQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nT3V0cHV0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgYSBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgaW1wb3J0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoSW1wb3J0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBlbGVtZW50IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRWxlbWVudCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBtZXNzYWdlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgbWVzc2FnZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE1lc3NhZ2UgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgcG9ydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHBvcnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShQb3J0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFBvcnRUeXBlIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGRlZmluaXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBkZWZpbml0aW9uIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRGVmaW5pdGlvbiBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBleHRlbnNpYmlsaXR5IGVsbWVudCBhcnRpZmFjdCBhY2NvcmRpbmcgCi0gICAqIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFeHRlbnNpYmlsaXR5RWxlbWVudCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBiaW5kaW5nIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJpbmRpbmcgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBib2R5IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBib2R5IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJvZHkgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBTT0FQIGhlYWRlciBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBIZWFkZXIgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQSGVhZGVyRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIFNPQVAgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQT3BlcmF0aW9uIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgcGFydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoUGFydCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBzZXJ2aWNlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBzZXJ2aWNlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTZXJ2aWNlIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCB0eXBlcyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoVHlwZXMgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE9wZXJhdGlvbiBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKElucHV0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShPdXRwdXQgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShGYXVsdCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBiaW5kaW5nIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyAKLSAgICogdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKEJpbmRpbmdPcGVyYXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgCi0gICAqIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKEJpbmRpbmdJbnB1dCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gCi0gICAqIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGJpbmRpbmcgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nT3V0cHV0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBiaW5kaW5nIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoQmluZGluZ0ZhdWx0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGltcG9ydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoSW1wb3J0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFbGVtZW50IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG1lc3NhZ2UgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShNZXNzYWdlIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIHBvcnQuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShQb3J0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgcG9ydCB0eXBlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoUG9ydFR5cGUgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKERlZmluaXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFeHRlbnNpYmlsaXR5RWxlbWVudCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBCaW5kaW5nIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgU09BUCBib2R5IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJvZHkgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEhlYWRlciBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBoZWFyZGVyIGZhdWx0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIGhlYWRlciBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBIZWFkZXJGYXVsdCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGZhdWx0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEZhdWx0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBPcGVyYXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWxDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVHJhdmVyc2FsQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDRkYmU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWxDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyBydW50aW1lIGNvbnRleHQgZm9yIHRoZSB0cmF2ZXJzYWwgcHJvY2Vzcy4KLSAqIENvbnRleHQgc3RvcmVzIGFydGlmYWN0cyBiZWluZyBwcm9jZXNzZWQuCi0gKiAKLSAqIEBhdXRob3IgQW5kcmV5IEt1bGlrCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVHJhdmVyc2FsQ29udGV4dAotewotICAvKioKLSAgICogRmxhZ3Mgd2hpY2ggaW5kaWNhdGUgd2hldGhlciBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkCi0gICAqIG9yIG5vdC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzUGFydCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU2VydmljZSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzVHlwZXMgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc09wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzSW5wdXQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc091dHB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRmF1bHQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24gPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmdJbnB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzQmluZGluZ091dHB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0ZhdWx0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NJbXBvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0VsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1BvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1BvcnRUeXBlID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NEZWZpbml0aW9uID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU09BUEJpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXIgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU09BUEZhdWx0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTT0FQT3BlcmF0aW9uID0gdHJ1ZTsKLQotICAvKioKLSAgICogTGFzdCBwcm9jZXNzZWQgV1NETCBlbGVtZW50cy4gCi0gICAqLwotICBwcml2YXRlIFBhcnQgYWN0aXZlUGFydCA9IG51bGw7Ci0gIHByaXZhdGUgU2VydmljZSBhY3RpdmVTZXJ2aWNlID0gbnVsbDsKLSAgcHJpdmF0ZSBUeXBlcyBhY3RpdmVUeXBlcyA9IG51bGw7Ci0gIHByaXZhdGUgT3BlcmF0aW9uIGFjdGl2ZU9wZXJhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgSW5wdXQgYWN0aXZlSW5wdXQgPSBudWxsOwotICBwcml2YXRlIE91dHB1dCBhY3RpdmVPdXRwdXQgPSBudWxsOwotICBwcml2YXRlIEZhdWx0IGFjdGl2ZUZhdWx0ID0gbnVsbDsKLSAgcHJpdmF0ZSBCaW5kaW5nIGFjdGl2ZUJpbmRpbmcgPSBudWxsOwotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gYWN0aXZlQmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ0lucHV0IGFjdGl2ZUJpbmRpbmdJbnB1dCA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ091dHB1dCBhY3RpdmVCaW5kaW5nT3V0cHV0ID0gbnVsbDsKLSAgcHJpdmF0ZSBCaW5kaW5nRmF1bHQgYWN0aXZlQmluZGluZ0ZhdWx0ID0gbnVsbDsKLSAgcHJpdmF0ZSBJbXBvcnQgYWN0aXZlSW1wb3J0ID0gbnVsbDsKLSAgcHJpdmF0ZSBFbGVtZW50IGFjdGl2ZUVsZW1lbnQgPSBudWxsOwotICBwcml2YXRlIE1lc3NhZ2UgYWN0aXZlTWVzc2FnZSA9IG51bGw7Ci0gIHByaXZhdGUgUG9ydCBhY3RpdmVQb3J0ID0gbnVsbDsKLSAgcHJpdmF0ZSBQb3J0VHlwZSBhY3RpdmVQb3J0VHlwZSA9IG51bGw7Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBhY3RpdmVEZWZpbml0aW9uID0gbnVsbDsKLSAgcHJpdmF0ZSBFeHRlbnNpYmlsaXR5RWxlbWVudCBhY3RpdmVFeHRlbnNpYmlsaXR5RWxlbWVudCA9IG51bGw7Ci0gIHByaXZhdGUgU09BUEJpbmRpbmcgYWN0aXZlU09BUEJpbmRpbmcgPSBudWxsOwotICBwcml2YXRlIFNPQVBCb2R5IGFjdGl2ZVNPQVBCb2R5ID0gbnVsbDsKLSAgcHJpdmF0ZSBTT0FQSGVhZGVyIGFjdGl2ZVNPQVBIZWFkZXIgPSBudWxsOwotICBwcml2YXRlIFNPQVBIZWFkZXJGYXVsdCBhY3RpdmVTT0FQSGVhZGVyRmF1bHQgPSBudWxsOwotICBwcml2YXRlIFNPQVBGYXVsdCBhY3RpdmVTT0FQRmF1bHQgPSBudWxsOwotICBwcml2YXRlIFNPQVBPcGVyYXRpb24gYWN0aXZlU09BUE9wZXJhdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFBhcmFtZXRlcnMgbWFwCi0gICAqLwotICBNYXAgcGFyYW1zID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogQWN0aXZlIHRyYXZlcnNhbC4KLSAgICovCi0gIGZpbmFsIHByaXZhdGUgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gdHJhdmVyc2FsCi0gICAqLwotICBXU0RMVHJhdmVyc2FsQ29udGV4dChXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCkKLSAgewotICAgIHRoaXMudHJhdmVyc2FsID0gdHJhdmVyc2FsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGFjdGl2ZSB0cmF2ZXJzYWwuCi0gICAqIEByZXR1cm4gdGhhIGFjdGl2ZSB0cmF2ZXJzYWwuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBnZXRUcmF2ZXJzYWwoKQotICB7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHBhcmFtZXRlciBmcm9tIGNvbnRleHQgYnkgdGhlIGdpdmVuIGtleS4gCi0gICAqIEBwYXJhbSBrZXkgIGEga2V5IHZhbHVlLgotICAgKiBAcmV0dXJuIGEgcGFyYW1ldGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGtleS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0UGFyYW1ldGVyKE9iamVjdCBrZXkpCi0gIHsKLSAgICByZXR1cm4gcGFyYW1zLmdldChrZXkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgcGFyYW1ldGVyIGludG8gY29udGV4dCB3aXRoIHRoZSBnaXZlbiBrZXkuCi0gICAqIEBwYXJhbSBrZXkgICAgdGhlIGtleS4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgcGFyYW1zLnB1dChrZXksIHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmVzIHRoZSBwYXJhbWV0ZXIgZnJvbSBjb250ZXh0IGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEBwYXJhbSBrZXkgIGEga2V5IHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUGFyYW1ldGVyKE9iamVjdCBrZXkpCi0gIHsKLSAgICBwYXJhbXMucmVtb3ZlKGtleSk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxQYXJ0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUGFydCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFNlcnZpY2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTZXJ2aWNlID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHR5cGVzLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFR5cGVzUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzVHlwZXMgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbE9wZXJhdGlvblByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc09wZXJhdGlvbiA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbnB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0lucHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG91dHB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NPdXRwdXQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NGYXVsdCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgaW5wdXQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsQmluZGluZ0lucHV0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzQmluZGluZ0lucHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3V0cHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsQmluZGluZ0ZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzQmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGltcG9ydC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxJbXBvcnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NJbXBvcnQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRWxlbWVudCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBtZXNzYWdlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NNZXNzYWdlID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBvcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsUG9ydFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc1BvcnQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFBvcnRUeXBlUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUG9ydFR5cGUgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZGVmaW5pdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxEZWZpbml0aW9uUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRGVmaW5pdGlvbiA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsRXh0ZW5zaWJpbGl0eUVsZW1lbnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGJpbmRpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsU09BUEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQQmluZGluZyA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGhlYWRlci4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQSGVhZGVyUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUEhlYWRlciA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQSGVhZGVyRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQSGVhZGVyRmF1bHQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQRmF1bHQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFNPQVBPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQT3BlcmF0aW9uID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2FuY2VscyBXU0RMIGVsZW1lbnRzIHByb2Nlc3NpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsUHJvY2Vzc2luZygpCi0gIHsKLSAgICBjYW5jZWxQYXJ0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNlcnZpY2VQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsVHlwZXNQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbElucHV0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbE91dHB1dFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsQmluZGluZ0lucHV0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsQmluZGluZ0ZhdWx0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEltcG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsUG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxQb3J0VHlwZVByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxEZWZpbml0aW9uUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBIZWFkZXJQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsU09BUEhlYWRlckZhdWx0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxTT0FQT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBhcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lUGFydFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc1BhcnQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVNlcnZpY2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTZXJ2aWNlID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lVHlwZXNQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NUeXBlcyA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NPcGVyYXRpb24gPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbnB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0lucHV0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZU91dHB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc091dHB1dCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGZhdWx0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBvcGVyYXRpb24uIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24gPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGlucHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0JpbmRpbmdJbnB1dCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3V0cHV0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVCaW5kaW5nRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbXBvcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lSW1wb3J0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzSW1wb3J0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRWxlbWVudCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG1lc3NhZ2UuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lTWVzc2FnZVByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc01lc3NhZ2UgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwb3J0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVBvcnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NQb3J0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVBvcnRUeXBlUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUG9ydFR5cGUgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBkZWZpbml0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZURlZmluaXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NEZWZpbml0aW9uID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGJpbmRpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lU09BUEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQQmluZGluZyA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgaGVhZGVyLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVNPQVBIZWFkZXJQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQSGVhZGVyID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lU09BUEhlYWRlckZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUEhlYWRlckZhdWx0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVTT0FQRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIG9wZXJhdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVTT0FQT3BlcmF0aW9uUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUE9wZXJhdGlvbiA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwYXJ0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFydCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1BhcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgc2VydmljZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NlcnZpY2U7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1R5cGVzOwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBvcGVyYXRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgaW5wdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgaW5wdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG91dHB1dCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBvdXRwdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NPdXRwdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0ZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NCaW5kaW5nOwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBpbnB1dCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGlucHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0lucHV0KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzQmluZGluZ0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0JpbmRpbmdPdXRwdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBmYXVsdCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGZhdWx0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzQmluZGluZ0ZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGltcG9ydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbXBvcnQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NJbXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NJbXBvcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0VsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgbWVzc2FnZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBtZXNzYWdlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc01lc3NhZ2U7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwb3J0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUG9ydCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1BvcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBvcnQgdHlwZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzUG9ydFR5cGU7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZGVmaW5pdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBkZWZpbml0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0RlZmluaXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0V4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBiaW5kaW5nIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgYmluZGluZyBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzU09BUEJpbmRpbmc7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgc2hvdWxkIGJlIHByb2Nlc3NlZC5uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzU09BUEhlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NPQVBIZWFkZXI7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BIGhlYWRlciBmYXVsdCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdDsKLSAgfQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGZhdWx0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NTT0FQRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NTT0FQRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NTT0FQT3BlcmF0aW9uOwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgcGFydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgcGFydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFBhcnQoUGFydCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVBhcnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIHBhcnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgcGFydC4KLSAgICovCi0gIHB1YmxpYyBQYXJ0IGdldFBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVBhcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBzZXJ2aWNlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBzZXJ2aWNlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0U2VydmljZShTZXJ2aWNlIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU2VydmljZSA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgc2VydmljZS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBzZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIFNlcnZpY2UgZ2V0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlU2VydmljZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIHR5cGVzIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCB0eXBlcyB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFR5cGVzKFR5cGVzIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlVHlwZXMgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIHR5cGVzLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIHR5cGVzLgotICAgKi8KLSAgcHVibGljIFR5cGVzIGdldFR5cGVzKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVUeXBlczsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgb3BlcmF0aW9uIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0T3BlcmF0aW9uKE9wZXJhdGlvbiB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZU9wZXJhdGlvbiA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBpbnB1dCB0byBiZSBwcm9jZXNzZWQKLSAgICogQHBhcmFtIHRoZSBXU0RMIGlucHV0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0SW5wdXQoSW5wdXQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVJbnB1dCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgaW5wdXQuCi0gICAqIEByZXR1cm4gbGFzdCBwcm9jZXNzZWQgV1NETCBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBJbnB1dCBnZXRJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlSW5wdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBvdXRwdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIG91dHB1dCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldE91dHB1dChPdXRwdXQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVPdXRwdXQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIG91dHB1dC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBvdXRwdXQuCi0gICAqLwotICBwdWJsaWMgT3V0cHV0IGdldE91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlT3V0cHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZmF1bHQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGZhdWx0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0RmF1bHQoRmF1bHQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVGYXVsdCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgZmF1bHQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZmF1bHQuCi0gICAqLwotICBwdWJsaWMgRmF1bHQgZ2V0RmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgYmluZGluZyB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmcoQmluZGluZyB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUJpbmRpbmcgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZy4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nIGdldEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUJpbmRpbmc7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFNETCBiaW5kaW5nIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUJpbmRpbmdPcGVyYXRpb24gPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlQmluZGluZ09wZXJhdGlvbjsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGJpbmRpbmcgaW5wdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGJpbmRpbmcgaW5wdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlQmluZGluZ0lucHV0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBiaW5kaW5nIGlucHV0LgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgaW5wdXQuCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlQmluZGluZ0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyBvdXRwdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGJpbmRpbmcgb3V0cHV0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlQmluZGluZ091dHB1dCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBvdXRwdXQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBvdXRwdXQuCi0gICAqLwotICBwdWJsaWMgQmluZGluZ091dHB1dCBnZXRCaW5kaW5nT3V0cHV0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVCaW5kaW5nT3V0cHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyBmYXVsdCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgYmluZGluZyBmYXVsdCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmdGYXVsdChCaW5kaW5nRmF1bHQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVCaW5kaW5nRmF1bHQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgZmF1bHQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nRmF1bHQgZ2V0QmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVCaW5kaW5nRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBpbXBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGltcG9ydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEltcG9ydChJbXBvcnQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVJbXBvcnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGltcG9ydC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBpbXBvcnQuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGdldEltcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlSW1wb3J0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUVsZW1lbnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0TWVzc2FnZShNZXNzYWdlIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlTWVzc2FnZSA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2UgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlTWVzc2FnZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIHBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIHBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRQb3J0KFBvcnQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVQb3J0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBwb3J0LgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIHBvcnQuCi0gICAqLwotICBwdWJsaWMgUG9ydCBnZXRQb3J0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVQb3J0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgcG9ydCB0eXBlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBwb3J0IHR5cGUgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRQb3J0VHlwZShQb3J0VHlwZSB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVBvcnRUeXBlID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBwb3J0IHR5cGUuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgcG9ydCB0eXBlLgotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlIGdldFBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVQb3J0VHlwZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGRlZmluaXRpb24gdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGRlZmluaXRpb24gdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXREZWZpbml0aW9uKERlZmluaXRpb24gdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVEZWZpbml0aW9uID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGRlZmluaXRpb24uCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVEZWZpbml0aW9uOwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUV4dGVuc2liaWxpdHlFbGVtZW50ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVFeHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRTT0FQQmluZGluZyhTT0FQQmluZGluZyB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBCaW5kaW5nID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBiaW5kaW5nLgotICAgKi8KLSAgcHVibGljIFNPQVBCaW5kaW5nIGdldFNPQVBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQQmluZGluZzsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFNPQVBCb2R5KFNPQVBCb2R5IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUEJvZHkgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgYm9keS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGJvZHkuCi0gICAqLwotICBwdWJsaWMgU09BUEJvZHkgZ2V0U09BUEJvZHkoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVNPQVBCb2R5OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFNPQVBIZWFkZXIoU09BUEhlYWRlciB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBIZWFkZXIgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgaGVhZGVyLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgaGVhZGVyLgotICAgKi8KLSAgcHVibGljIFNPQVBIZWFkZXIgZ2V0U09BUEhlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlU09BUEhlYWRlcjsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRTT0FQSGVhZGVyRmF1bHQoU09BUEhlYWRlckZhdWx0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUEhlYWRlckZhdWx0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBTT0FQSGVhZGVyRmF1bHQgZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQSGVhZGVyRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0U09BUEZhdWx0KFNPQVBGYXVsdCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBGYXVsdCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBmYXVsdC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGZhdWx0LgotICAgKi8KLSAgcHVibGljIFNPQVBGYXVsdCBnZXRTT0FQRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVNPQVBGYXVsdDsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZVdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQKLSAgICovCi0gIHZvaWQgc2V0U09BUE9wZXJhdGlvbihTT0FQT3BlcmF0aW9uIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUE9wZXJhdGlvbiA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU09BUE9wZXJhdGlvbiBnZXRTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQT3BlcmF0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI5NWQ3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZGVmaW5lcyBjYWxsYmFjayBtZXRob2RzIGR1cmluZyB0cmF2ZXJzZSBXU0RMLgotICogV1NETFZpc2l0b3IgY291bGQgY2FuY2VsIGFydGlmYWN0IHByb2Nlc3NpbmcgYnkgdXNpbmcgdHJhdmVyc2FsIGNvbnRleHQKLSAqIDxjb2RlPmNhbmNlbFhYWFByb2Nlc3Npbmc8L2NvZGU+IG1ldGhvZHMuCi0gKiAKLSAqIEBhdXRob3IgS3VsaWsKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMVmlzaXRvcgotewotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIHBhcnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgc2VydmljZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTZXJ2aWNlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCB0eXBlcyBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChUeXBlcyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgaW5wdXQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW5wdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIG91dHB1dCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPdXRwdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGZhdWx0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBiaW5kaW5nIG9iamVjdC4KLSAgICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEJpbmRpbmdPcGVyYXRpb24gb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBiaW5kaW5nIGlucHV0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmdJbnB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgYmluZGluZyBvdXRwdXQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZ091dHB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgYmluZGluZyBmYXVsdCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGltcG9ydCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGVsZW1lbnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgbWVzc2FnZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBwb3J0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIHBvcnQgdHlwZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0VHlwZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgZGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBTT0FQIGJpbmRpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIFNPQVAgYm9keSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBoZWFkZXIgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IG9iaiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBmYXVsdCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIFNPQVAgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuLgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQT3BlcmF0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvRmlsZUVudGl0eVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYWZiZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvRmlsZUVudGl0eVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBFbnRpdHkgcmVzb2x2ZSB0byByZXNvbHZlIGZpbGUgZW50aXRpZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlRW50aXR5UmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2UuZ2V0UHVibGljSWQoKTsKLSAgICBTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0gICAgU3RyaW5nIHVybCA9IHN5c3RlbUlkOwotICAgIGlmKHVybCA9PSBudWxsKQotICAgIHsKLSAgICAgIHVybCA9IHB1YmxpY0lkOwotICAgIH0KLSAgICBpZih1cmwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSByZXNvdXJjZS5nZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgaWYodXJsICE9IG51bGwpCi0gICAgewotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgTGF6eVVSTElucHV0U3RyZWFtKHVybCk7Ci0gICAgICByZXR1cm4gbmV3IFhNTElucHV0U291cmNlKHB1YmxpY0lkLCBzeXN0ZW1JZCwgc3lzdGVtSWQsIGlzLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlMmQ0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIEdlbmVyYXRlIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc2NoZW1hIGZvciBhbiBpbmxpbmUgc2NoZW1hLiBXaWxsIGFkZCBpbXBvcnRzIGZvciB1bnJlc29sdmVkCi0gKiBuYW1lc3BhY2VzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTT0FQX0VOQ09ESU5HX1VSSSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgWE1MTlMgPSAieG1sbnMiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFRBUkdFVE5BTUVTUEFDRSA9ICJ0YXJnZXROYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIE5BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIElNUE9SVCA9ICJpbXBvcnQiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIElOQ0xVREUgPSAiaW5jbHVkZSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0NIRU1BID0gInNjaGVtYSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0NIRU1BTE9DQVRJT04gPSAic2NoZW1hTG9jYXRpb24iOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFRZUEUgPSAidHlwZSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgTkFNRSA9ICJuYW1lIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZ1tdIGlnbm9yZU5hbWVzcGFjZXMgPQotICAgIHsgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSB9OwotCi0gIHByb3RlY3RlZCBzdGF0aWMgSW5saW5lU2NoZW1hR2VuZXJhdG9yIGluc3RhbmNlID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgSW5saW5lU2NoZW1hR2VuZXJhdG9yKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhlIElubGluZVNjaGVtYUdlbmVyYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGluc3RhbmNlIG9mIHRoZSBpbmxpbmUgc2NoZW1hIGdlbmVyYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgSW5saW5lU2NoZW1hR2VuZXJhdG9yIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IElubGluZVNjaGVtYUdlbmVyYXRvcigpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzY2hlbWEgZnJvbSB0aGUgZWxlbWVudCBwcm92aWRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGVsZW1lbnRzIEEgbGlzdCBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgVVJJIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHNjaGVtYS4KLSAgICogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZyhFbGVtZW50IGVsZW1lbnQsIExpc3QgZWxlbWVudHMsIFN0cmluZyBmaWxlbG9jYXRpb24pCi0gIHsKLSAgICByZXR1cm4gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyhlbGVtZW50LCBlbGVtZW50cywgZmlsZWxvY2F0aW9uLCBuZXcgSGFzaHRhYmxlKCkpOwotICB9Ci0gIAotICAvKioKLSAgCSogQ3JlYXRlcyBhIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNjaGVtYSBtb2RlbCB3aXRoIHRoZSByb290IGVsZW1lbnQgb2YKLSAgCSogZXh0RWxlbS4gQ2FsbHMgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkgdG8gdGFrZSBjYXJlIG9mIGJ1aWxkaW5nIHRoZSBTdHJpbmcKLSAgCSogYWZ0ZXIgaXQgb2J0YWlucyB0aGUgRWxlbWVudCBmcm9tIHRoZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuCi0gIAkqIAotICAJKiBAcGFyYW0gZWxlbWVudCBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gIAkqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3QgdG8gY29udGFpbiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgCSogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhlIHNjaGVtYSBpcyBsb2NhdGVkIGluLgotICAJKiBAcGFyYW0gcGFyZW50TlNzIEEgaGFzaHRhYmxlIG9mIHBhcmVudCBuYW1lc3BhY2VzIHRvIHVzZWQgdG8gcmVzb2x2ZSBwcmVmaXhlcy4KLSAgCSogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NoZW1hIHdpdGggdGhlIHJvb3QgZWxlbWVudCAnZWxlbWVudCcuCi0gIAkqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVYU0RTdHJpbmcoRWxlbWVudCBlbGVtZW50LCBMaXN0IGVsZW1lbnRzLCBTdHJpbmcgZmlsZWxvY2F0aW9uLCBIYXNodGFibGUgcGFyZW50TlNzKQotICB7Ci0gICAgSW5saW5lU2NoZW1hR2VuZXJhdG9yIHNjaGVtYUdlbmVyYXRvciA9IElubGluZVNjaGVtYUdlbmVyYXRvci5nZXRJbnN0YW5jZSgpOwotICAgIEhhc2h0YWJsZSBuc1Jlc29sdmVyID0gc2NoZW1hR2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIoZWxlbWVudCk7Ci0gICAgTGlzdCByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5nZXRSZXF1aXJlZE5hbWVzcGFjZXMoZWxlbWVudCk7Ci0gICAgSGFzaHRhYmxlIHJlcU5TRGVjbCA9IHNjaGVtYUdlbmVyYXRvci5yZXNvbHZlTmFtZXNwYWNlcyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICAvL0hhc2h0YWJsZSByZXFOU0RlY2wgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0UmVxdWlyZWROU0RlY2xhcmF0aW9ucyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICBMaXN0IGltcG9ydE5TID0gc2NoZW1hR2VuZXJhdG9yLmdldEltcG9ydE5hbWVzcGFjZXMoZWxlbWVudCk7Ci0gICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IucmVtb3ZlSW1wb3J0cyhyZXFucywgaW1wb3J0TlMpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUxvY2FsTmFtZXNwYWNlcyhyZXFucywgZWxlbWVudCk7Ci0gICAgcmV0dXJuIHNjaGVtYUdlbmVyYXRvci5jcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseShlbGVtZW50LCBlbGVtZW50cywgcmVxbnMsIHJlcU5TRGVjbCwgZmlsZWxvY2F0aW9uKTsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBpcyByZXF1aXJlZCBidXQgbm90IGltcG9ydGVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBwYXJlbnROU3MgQSBoYXNodGFibGUgb2YgdGhlIHBhcmVudCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNvYXAgZW5jb2RpbmcgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIGJ1dCBub3QgaW1wb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzb2FwRW5jb2RpbmdSZXF1aXJlZE5vdEltcG9ydGVkKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGZpbGVsb2NhdGlvbiwgSGFzaHRhYmxlIHBhcmVudE5TcykKLSAgewotICAgIElubGluZVNjaGVtYUdlbmVyYXRvciBzY2hlbWFHZW5lcmF0b3IgPSBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgICBIYXNodGFibGUgbnNSZXNvbHZlciA9IHNjaGVtYUdlbmVyYXRvci5nZXROU1Jlc29sdmVyKGVsZW1lbnQpOwotICAgIExpc3QgcmVxbnMgPSBudWxsOwotCi0gICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0UmVxdWlyZWROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIHNjaGVtYUdlbmVyYXRvci5yZXNvbHZlTmFtZXNwYWNlcyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICAvL3NjaGVtYUdlbmVyYXRvci5yZXNvbHZlVW5kZWNsYXJlZE5hbWVzcGFjZXMocmVxbnMsIHBhcmVudE5Tcyk7Ci0gICAgTGlzdCBpbXBvcnROUyA9IHNjaGVtYUdlbmVyYXRvci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUltcG9ydHMocmVxbnMsIGltcG9ydE5TKTsKLSAgICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZW1vdmVMb2NhbE5hbWVzcGFjZXMocmVxbnMsIGVsZW1lbnQpOwotCi0gICAgcmV0dXJuIHNjaGVtYUdlbmVyYXRvci5jaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKHJlcW5zKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIHJlY3Vyc2l2ZSBtZXRob2QgY3JlYXRlcyB0aGUgc2NoZW1hIFN0cmluZyBmcm9tIHRoZSByb290IEVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3QgdG8gYmUgY3JlYXRlZCBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgICogQHBhcmFtIHJlcXVpcmVkTmFtZXNwYWNlcyBBIGxpc3Qgb2YgcmVxdWlyZWQgbmFtZXNwYWNlcy4KLSAgICogQHBhcmFtIHJlcU5TRGVjbCBBIGhhc2h0YWJsZSBvZiByZXF1aXJlZCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSB1cmkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHNjaGVtYS4KLSAgICogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNjaGVtYS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoCi0gICAgRWxlbWVudCBlbGVtLAotICAgIExpc3QgZWxlbWVudHMsCi0gICAgTGlzdCByZXF1aXJlZE5hbWVzcGFjZXMsCi0gICAgSGFzaHRhYmxlIHJlcU5TRGVjbCwKLSAgICBTdHJpbmcgZmlsZWxvY2F0aW9uKQotICB7Ci0gICAgaWYgKGVsZW0gPT0gbnVsbCkKLSAgICAgIHJldHVybiAiIjsgLy8ganVzdCBpbiBjYXNlCi0KLSAgICBlbGVtZW50cy5hZGQoZWxlbSk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgeHNkU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFN0cmluZyBlbGVtZW50TmFtZSA9IGVsZW0uZ2V0VGFnTmFtZSgpOwotICAgIHhzZFN0cmluZy5hcHBlbmQoIjwiKS5hcHBlbmQoZWxlbWVudE5hbWUpOwotCi0gICAgYm9vbGVhbiBmb3VuZFNjaGVtYUxvY2F0aW9uID0gZmFsc2U7IC8vIGZsYWcgaWYgc2NoZW1hbG9jYXRpb24gaXMgZGVmaW5lZAotICAgIFN0cmluZyBuYW1lc3BhY2UgPSAiIjsgLy8gdGhlIG5hbWVzcGFjZSBpZiB3ZSdyZSBjaGVja2luZyBhbiBpbXBvcnQgb3IgaW5jbHVkZQotICAgIFN0cmluZyBuYW1lUHJlZml4ID0gIiI7IC8vIHRoZSB4bWxucyBwcmVmaXggdXNlZCBmb3IgdGhlIGVsZW1lbnRzCi0gICAgLy8gR2V0IGFsbCBvZiB0aGUgYXR0cmlidXRlcyBmb3IgdGhpcyBlbGVtZW50IGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgeHNkU3RyaW5nCi0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0gICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKG4uZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKTsKLSAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgIGlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKFNDSEVNQUxPQ0FUSU9OKSAmJiBmaWxlbG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm91bmRTY2hlbWFMb2NhdGlvbiA9IHRydWU7Ci0gICAgICAgIFN0cmluZyByZWxhdGl2ZVBhdGggPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICB4c2RTdHJpbmcuYXBwZW5kKHJlbGF0aXZlUGF0aCkuYXBwZW5kKCJcIiIpOyAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoTkFNRVNQQUNFKSkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVzcGFjZSA9IG5vZGVWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBnZXQgdGhlIG5hbWUgcHJlZml4IGZvciB0aGlzIHNjaGVtYSB0byB1c2UgaW4gZ2VuZXJhdGluZyBpbXBvcnQgc3RhdGVtZW50cwotICAgICAgICBlbHNlIGlmIChub2RlTmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgICAgewotCi0gICAgICAgICAgaWYgKG5vZGVWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVQcmVmaXggPSBub2RlTmFtZTsKLSAgICAgICAgICAgIGlmIChuYW1lUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UoWE1MTlMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuYW1lUHJlZml4ID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5hbWVQcmVmaXggPSBuYW1lUHJlZml4LnN1YnN0cmluZyg2KSArICI6IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUmVwbGFjZSBvbGQgc2NoZW1hIG5hbWVzcGFjZXMgd2l0aCB0aGUgbmV3IHNjaGVtYSBuYW1lc3BhY2UuCi0gICAgICAgIGlmKG5vZGVWYWx1ZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgbm9kZVZhbHVlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICAgICAgIHsKLSAgICAgICAgICBub2RlVmFsdWUgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotICAgICAgICB9Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQobm9kZVZhbHVlKS5hcHBlbmQoIlwiIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJpbXBvcnQiKSAmJiAhZm91bmRTY2hlbWFMb2NhdGlvbikKLSAgICB7Ci0gICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKFNDSEVNQUxPQ0FUSU9OKS5hcHBlbmQoIj1cIiIpLmFwcGVuZChuYW1lc3BhY2UpLmFwcGVuZCgiXCIiKTsKLSAgICB9Ci0gICAgLy8gYWRkIGluIGFueSByZXF1aXJlZCBOUyBkZWNsYXJhdGlvbnMgZnJvbSBwYXJlbnQgZWxlbWVudHMKLSAgICBpZiAocmVxTlNEZWNsICE9IG51bGwpCi0gICAgewotICAgICAgRW51bWVyYXRpb24ga2V5cyA9IHJlcU5TRGVjbC5rZXlzKCk7Ci0gICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICBTdHJpbmcgZGVjbE5TID0gKFN0cmluZylyZXFOU0RlY2wuZ2V0KGtleSk7Ci0gICAgICAgIGlmKGRlY2xOUy5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgZGVjbE5TLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICAgICAgIHsKLSAgICAgICAgICBkZWNsTlMgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotICAgICAgICB9Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQoIiAiKS5hcHBlbmQoa2V5KS5hcHBlbmQoIj1cIiIpLmFwcGVuZChkZWNsTlMpLmFwcGVuZCgiXCIiKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI+Iik7Ci0gICAgaWYgKHJlcXVpcmVkTmFtZXNwYWNlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGlSZXF1aXJlZE5hbWVzcGFjZXMgPSByZXF1aXJlZE5hbWVzcGFjZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpUmVxdWlyZWROYW1lc3BhY2VzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZylpUmVxdWlyZWROYW1lc3BhY2VzLm5leHQoKTsKLQotICAgICAgICB4c2RTdHJpbmcKLSAgICAgICAgICAuYXBwZW5kKCI8IikKLSAgICAgICAgICAuYXBwZW5kKG5hbWVQcmVmaXgpCi0gICAgICAgICAgLmFwcGVuZChJTVBPUlQpCi0gICAgICAgICAgLmFwcGVuZCgiICIpCi0gICAgICAgICAgLmFwcGVuZChOQU1FU1BBQ0UpCi0gICAgICAgICAgLmFwcGVuZCgiPVwiIikKLSAgICAgICAgICAuYXBwZW5kKG5zKQotICAgICAgICAgIC5hcHBlbmQoIlwiICIpCi0gICAgICAgICAgLmFwcGVuZChTQ0hFTUFMT0NBVElPTikKLSAgICAgICAgICAuYXBwZW5kKCI9XCIiKQotICAgICAgICAgIC5hcHBlbmQobnMpCi0gICAgICAgICAgLmFwcGVuZCgiXCIvPiIpOwotICAgICAgfQotCi0gICAgfQotICAgIHhzZFN0cmluZy5hcHBlbmQoIlxuIik7Ci0KLSAgICAvLyBjYWxsIHRoZSBtZXRob2QgcmVjdXJzaXZlbHkgZm9yIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKSB8fCBpIDwgNTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLSAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgeHNkU3RyaW5nLmFwcGVuZChjcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseShjaGlsZCwgZWxlbWVudHMsIG51bGwsIG51bGwsIGZpbGVsb2NhdGlvbikpOwotICAgICAgfQotICAgIH0KLQotICAgIHhzZFN0cmluZy5hcHBlbmQoIjwvIikuYXBwZW5kKGVsZW0uZ2V0VGFnTmFtZSgpKS5hcHBlbmQoIj4iKTsKLQotICAgIHJldHVybiB4c2RTdHJpbmcudG9TdHJpbmcoKTsKLQotICB9Ci0gIC8qKgotICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgbmFtZXNwYWNlcyB0aGF0IGFyZSB1c2VkIGZvciBlbGVtZW50cyBvciB0eXBlcyBpbiB0aGUgc2NoZW1hLgotICAgKiBUaGVzZSBhcmUgdGhlIHJlcXVpcmVkIG5hbWVzcGFjZXMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBlbG1lbnRzIGFyZSB2YWxpZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtIFRoZSBlbGVtZW50IHRvIGNoZWNrIGZvciByZXF1aXJlZCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiByZXF1aXJlZCBuYW1lc3BhY2VzIGZvciB0aGUgZWxlbWVudCBhbmQgYWxsIGl0cyBjaGlsZHJlbi4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGdldFJlcXVpcmVkTmFtZXNwYWNlcyhFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBMaXN0IG5hbWVzcGFjZSA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgLy8gcmVnaXN0ZXIgYWxsIHRoZSBjaGlsZCB0eXBlcyBmaXJzdAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVzLmdldExlbmd0aCgpOwotICAgIC8vIFRPRE86IHdoeSBpcyB0aGVyZSBhIDwgNSBjb25kaXRpb24/Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DaGlsZHJlbiAvKnx8IGkgPCA1Ki87IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAvLyB3ZSBvbmx5IHdhbnQgbm9kZXMgdGhhdCBhcmUgRWxlbWVudHMKLSAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9IChFbGVtZW50KW47Ci0gICAgICAgIExpc3QgY2hpbGRucyA9IGdldFJlcXVpcmVkTmFtZXNwYWNlcyhjaGlsZCk7Ci0gICAgICAgIGZvciAoaW50IGogPSBjaGlsZG5zLnNpemUoKSAtIDE7IGogPj0gMDsgai0tKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZyljaGlsZG5zLmdldChqKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5jb250YWlucyhucykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlLmFkZChucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIEFkZCB0aGUgbmFtZXNwYWNlIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQKLSAgICBTdHJpbmcgZWxlbU5TID0gZWxlbS5nZXRQcmVmaXgoKTsKLSAgICAvLyBpZiB0aGVyZSBpcyBubyBuYW1lc3BhY2UgcHJlZml4IHNldCBpdCB0byB0aGUgZW1wdHkgcHJlZml4LgotICAgIGlmKGVsZW1OUyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVsZW1OUyA9ICIiOwotICAgIH0KLSAgICBpZiAoIW5hbWVzcGFjZS5jb250YWlucyhlbGVtTlMuaW50ZXJuKCkpKQotICAgICB7Ci0gICAgICBuYW1lc3BhY2UuYWRkKGVsZW1OUy5pbnRlcm4oKSk7Ci0gICAgfQotICAgIC8vIG5vdyBhZGQgYWxsIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQncyBuYW1lc3BhY2VzCi0gICAgLy8gZG9uJ3QgaW5jbHVkZSBpbXBvcnQgYW5kIHNjaGVtYSBlbGVtZW50cwotICAgIFN0cmluZyBsb2NhbG5hbWUgPSBlbGVtLmdldExvY2FsTmFtZSgpOwotICAgIGlmICghbG9jYWxuYW1lLmVxdWFscyhJTVBPUlQpICYmICFsb2NhbG5hbWUuZXF1YWxzKElOQ0xVREUpICYmICFsb2NhbG5hbWUuZXF1YWxzKFNDSEVNQSkpCi0gICAgewotICAgICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0KLSAgICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgICAvLyByZW1vdmVkIHJlc3RyaWN0aW9uIHRoYXQgd2UncmUgb25seSBsb29raW5nIGF0IHR5cGVzCi0gICAgICAgIC8vCQlpZiAobm9kZU5hbWUuZXF1YWxzSWdub3JlQ2FzZShUWVBFKSkKLSAgICAgICAgLy8JCXsKLSAgICAgICAgLy8gZG9uJ3QgdGFrZSBuYW1lc3BhY2UgaW5mbyBmcm9tIGF0dHJpYnV0ZXMgZGVmaW5pbmcgbmFtZXNwYWNlcy4KLSAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB4bWxucywgdGFyZ2V0TmFtZXNwYWNlCi0gICAgICAgIC8vIGRvbid0IHRha2UgbmFtZXNwYWNlIGluZm8gZnJvbSBuYW1lIGF0dHJpYnV0ZXMKLSAgICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xIHx8IG5vZGVOYW1lLmVxdWFscyhUQVJHRVROQU1FU1BBQ0UpIHx8IG5vZGVOYW1lLmVxdWFscyhOQU1FKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIGludCBjb2xvbkluZGV4ID0gbm9kZVZhbHVlLmluZGV4T2YoIjoiKTsKLSAgICAgICAgLy8gRG9uJ3QgdGFrZSBuYW1lc3BhY2UgaW5mbyBmcm9tIGF0dHJpYnV0ZXMgd2l0aCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UsIHRoYXQgaXMgYXR0cmlidXRlcwotICAgICAgICAvLyB0aGF0IGFyZSBub3QgcHJlZml4ZWQuIChjb2xvbkluZGV4ID09IC0xKQotICAgICAgICAvLyBJZiB0aGUgY29sb25JbmRleCBpcyBmb2xsb3dlZCBieSBhIC8gdGhlbiBpdCBpcyBhIFVSSSBhbmQgbm90Ci0gICAgICAgIC8vIG5hbWVzcGFjZSBxdWFsaWZpZWQuCi0gICAgICAgIGlmIChjb2xvbkluZGV4ID09IC0xIHx8IG5vZGVWYWx1ZS5jaGFyQXQoY29sb25JbmRleCArIDEpID09ICcvJykKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIGhlcmUgd2UgaGF2ZSBmb3VuZCBhIGNvbG9uIGRlbGltaXRlciBzbyB3ZSBuZWVkIHRoZSBuYW1lc3BhY2UgZGVmaW5lZCBoZXJlCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG5vZGVWYWx1ZSA9IG5vZGVWYWx1ZS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMobm9kZVZhbHVlLmludGVybigpKSkKLSAgICAgICAgewotCi0gICAgICAgICAgbmFtZXNwYWNlLmFkZChub2RlVmFsdWUuaW50ZXJuKCkpOwotICAgICAgICB9Ci0gICAgICAgIC8vCQl9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2VzIHRoYXQgaGF2ZSBhbiBpbXBvcnQgc3RhdGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBhbGwgdGhlIG5hbWVzcGFjZXMgdGhhdCBhcmUgaW1wb3J0ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRJbXBvcnROYW1lc3BhY2VzKEVsZW1lbnQgZWxlbSkKLSAgewotICAgIExpc3QgbmFtZXNwYWNlID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gY2FsbCB0aGUgbWV0aG9kIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICAvLyByZWdpc3RlciBhbGwgdGhlIGNoaWxkIHR5cGVzIGZpcnN0Ci0gICAgTm9kZUxpc3QgY2hpbGROb2RlcyA9IGVsZW0uZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmdldExlbmd0aCgpIHx8IGkgPCA1OyBpKyspCi0gICAgewotICAgICAgTm9kZSBuID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgLy8gd2Ugb25seSB3YW50IG5vZGVzIHRoYXQgYXJlIEVsZW1lbnRzCi0gICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGQgPSAoRWxlbWVudCluOwotICAgICAgICBMaXN0IGNoaWxkbnMgPSBnZXRJbXBvcnROYW1lc3BhY2VzKGNoaWxkKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IGNoaWxkbnMuc2l6ZSgpIC0gMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWNoaWxkbnMuZ2V0KGopOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5zKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gaWYgdGhpcyBpcyBhbiBpbXBvcnQgZWxlbWVudCBnZXQgdGhlIG5hbWVzcGFjZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgaWYgKGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShJTVBPUlQpKQotICAgIHsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBuID0gYXR0cy5pdGVtKGkpOwotCi0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoTkFNRVNQQUNFKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5vZGVWYWx1ZS5pbnRlcm4oKSkpCi0gICAgICAgICAgewotCi0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5vZGVWYWx1ZS5pbnRlcm4oKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIEhhc2h0YWJsZSB3aXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcyBrZXlzIGZyb20gdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCBuYW1lc3BhY2UgcHJlZml4ZXMgbWFwcGVkIHRvIG5hbWVzcGFjZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGdldE5TUmVzb2x2ZXIoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLQotICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xKQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgU3RyaW5nIG5hbWVQcmVmaXggPSBub2RlTmFtZTsKLQotICAgICAgICBpZiAobmFtZVByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKFhNTE5TKSkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVQcmVmaXggPSAiIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zdWJzdHJpbmcoNik7Ci0gICAgICAgIH0KLSAgICAgICAgbnNSZXNvbHZlci5wdXQobmFtZVByZWZpeCwgbm9kZVZhbHVlKTsKLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNSZXNvbHZlcjsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIG5hbWVzcGFjZXMgaW4gdGhlIGdpdmVuIG5hbWVzcGFjZXMgbGlzdCB3aXRoIHRoZSB0d28gbmFtZXNwYWNlCi0gICAqIHJlc29sdmVyIGhhc2h0YWJsZXMgcHJvdmlkZWQuIFJldHVybiBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2UgdGhhdCBuZWVkCi0gICAqIHRvIGJlIGRlY2xhcmVkLgotICAgKiBGaXJzdCByZXNvbHZlIGFnYWluc3QgdGhlIGxvY2FsIG5hbWVzcGFjZXMgd2l0aCBuc1Jlc29sdmVyLgotICAgKiBOZXh0IHJlc29sdmUgYWdhaW5zdCB0aGUgcGFyZW50IG5hbWVzcGFjZSB3aXRoIHBhcmVudE5TUmVzb2x2ZXIuCi0gICAqIEEgc2lkZSBhZmZlY3Qgb2YgdGhpcyBtZXRob2QgaXMgdGhlIG5hbWVzcGFjZXMgbGlzdCBpcyBsZWZ0IHdpdGggb25seSB0aG9zZSAKLSAgICogbmFtZXNwYWNlcyB0aGF0IGFyZSByZXNvbHZlZCBhbmQgdGhlIHJlc29sdmVkIGVudGl0aWVzIGFyZSBwbGFjZWQgaW4gdGhlIAotICAgKiBsaXN0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGVudHJpZXMuCi0gICAqIEZvciBleC4gSWYgeW91IHByb3ZpZGUgYSBsaXN0IHN1Y2ggYXMge3hzZCwgaW50Zn0gYW5kIG9ubHkgeHNkIGNhbiBiZSByZXNvbHZlZAotICAgKiB5b3Ugd2lsbCBlbmQgdXAgd2l0aCB0aGUgbGlzdCB7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWF9Ci0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIHJlc29sdmUuCi0gICAqIEBwYXJhbSBuc1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgbG9jYWwgcmVzb2x2ZXIuCi0gICAqIEBwYXJhbSBwYXJlbnROU1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgcGFyZW50IG5hbWVzcGFjZSByZXNvbHZlci4KLSAgICogQHJldHVybiBBIEhhc2h0YWJsZSBvZiBuYW1lc3BhY2VzIHRoYXQgbXVzdCBiZSBkZWNsYXJlZC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNodGFibGUgcmVzb2x2ZU5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBIYXNodGFibGUgbnNSZXNvbHZlciwgSGFzaHRhYmxlIHBhcmVudE5TUmVzb2x2ZXIpCi0gIHsKLSAgCUhhc2h0YWJsZSByZXFOU0RlY2wgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhbmFtZXNwYWNlcy5pc0VtcHR5KCkgJiYgbnNSZXNvbHZlciAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSBuYW1lc3BhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgewotICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKW5hbWVzcGFjZXMuZ2V0KGkpOwotICAgICAgICAvLyBSZW1vdmUgdGhlIG5hbWVzcGFjZSBmcm9tIHRoZSBsaXN0LgotICAgICAgICBuYW1lc3BhY2VzLnJlbW92ZShpKTsKLSAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHJlc29sdmUgYWdhaW5zdCB0aGUgbG9jYWwgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBpZiAobnNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3QgcmVzb2x2ZWROUyA9IG5zUmVzb2x2ZXIuZ2V0KG5zKTsKLSAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgaWYoIW5hbWVzcGFjZXMuY29udGFpbnMocmVzb2x2ZWROUykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgbnNSZXNvbHZlci5nZXQobnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTmV4dCB0cnkgdG8gcmVzb2x2ZSBhZ2FpbnN0IHRoZSBwYXJlbnQgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCWlmIChucy5lcXVhbHMoIiIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TICsgIjoiICsgbnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFyZW50TlNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE9iamVjdCByZXNvbHZlZE5TID0gcGFyZW50TlNSZXNvbHZlci5nZXQobnMpOwotICAgICAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgICAgIGlmKCFuYW1lc3BhY2VzLmNvbnRhaW5zKHJlc29sdmVkTlMpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgcmVzb2x2ZWROUyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gU3RpbGwgbmVlZCB0byBkZWNsYXJlIHRoZSBuYW1lc3BhY2UgdGhvdWdoLgotICAgICAgICAgICAgICByZXFOU0RlY2wucHV0KG5zLCByZXNvbHZlZE5TKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXFOU0RlY2w7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIGFueSBuYW1lc3BhY2UgZnJvbSB0aGUgbmFtZXNwYWNlcyBsaXN0IGlmIGl0IGlzIGluIHRoZSBpbXBvcnQgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VzIFRoZSBuYW1lc3BhY2VzIGxpc3QuCi0gICAqIEBwYXJhbSBpbXBvcnRlZE5hbWVzcGFjZXMgQSBsaXN0IG9mIGltcG9ydGVkIG5hbWVzcGFjZXMuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRob3V0IHRoZSBpbXBvcnRlZCBuYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgcmVtb3ZlSW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIExpc3QgaW1wb3J0ZWROYW1lc3BhY2VzKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiBpbXBvcnRlZE5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhaW1wb3J0ZWROYW1lc3BhY2VzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpSW1wb3J0ZWROUyA9IGltcG9ydGVkTmFtZXNwYWNlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGlJbXBvcnRlZE5TLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlOUyA9IChTdHJpbmcpaUltcG9ydGVkTlMubmV4dCgpOwotCi0gICAgICAgIG5hbWVzcGFjZXMucmVtb3ZlKGlOUyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lc3BhY2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZSB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgc2NoZW1hIGFuZCB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhlIGlnbm9yZU5hbWVzcGFjZXMKLSAgICogbGlzdCBmcm9tIHRoZSBuYW1lc3BhY2VzIGxpc3QgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBsb2NhbCBuYW1lc3BhY2VzLgotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRoIHRoZSBsb2NhbCBuYW1lc3BhY2VzIHJlbW92ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCByZW1vdmVMb2NhbE5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlcyAhPSBudWxsICYmIGVsZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnMgPSBlbGVtLmdldEF0dHJpYnV0ZShUQVJHRVROQU1FU1BBQ0UpOwotICAgICAgbmFtZXNwYWNlcy5yZW1vdmUobnMpOwotCi0gICAgICBmb3IgKGludCBpID0gaWdub3JlTmFtZXNwYWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgLy8ga2VlcCByZW1vdmluZyB0aGUgbmFtZXNwYWNlIHVudGlsIGl0IGlzIG5vdCBpbiB0aGUgbGlzdAotICAgICAgICBpZiAobmFtZXNwYWNlcy5yZW1vdmUoaWdub3JlTmFtZXNwYWNlc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzcGFjZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlIGlzIGluIHRoZSBsaXN0IG9mIHJlcXVpcmVkIG5hbWVzcGFjZXMsCi0gICAqIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEBwYXJhbSByZXFucyBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIGNoZWNrIGZvciB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UuCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2VzIGlzIGluIHRoZSBsaXN0LCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKExpc3QgcmVxbnMpCi0gIHsKLSAgICBpZiAocmVxbnMuY29udGFpbnMoU09BUF9FTkNPRElOR19VUkkpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVNjaGVtYVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lU2NoZW1hVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYzA1YmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lU2NoZW1hVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIFBsdWdpbiB2YWxpZGF0b3IgZm9yIHRoZSBXU0RMIFZhbGlkYXRpb24gZnJhbWV3b3JrLiBWYWxpZGF0ZXMgaW5saW5lIHNjaGVtYSBmb3VuZCBpbiBhIFdTREwgZG9jdW1lbnQuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVTY2hlbWFWYWxpZGF0b3IKLXsKLSAgTGlzdCBlbGVtZW50cyA9IG51bGw7Ci0KLQotICBwdWJsaWMgTWFwIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gIAllbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbSA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1lbnQ7Ci0gICAgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpOwotICAgIC8vIEFkZCBpbiB0aGUgbmFtZXNwYWNlcyBkZWZpbmVkIGluIHRoZSBkb2MgYWxyZWFkeSB0aGF0IGFyZW4ndCBkZWZpbmVkIGxvY2FsbHkgaW4gdGhpcyBzY2hlbWEuCi0gICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgbmFtZXNwYWNlcyBvdGhlciB0aGVuIGluIHRoZSBkZWZpbnRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhcwotICAgIC8vIGlubGluZSBzY2hlbWEgY2FuIG5vdCBoYXZlIGFueSBvdGhlciBwYXJlbnRzIGFuZCBtdXN0IGhhdmUgdGhlcmUgdHdvIHBhcmVudHMuCi0gICAgLy8gRmlyc3QgdGFrZSBjYXJlIG9mIHRoZSBkZWZpbml0aW9ucyBlbGVtZW50Ci0KLSAgICAvLyBjcmVhdGUgdGhlIGlubGluZSBzY2hlbWEgc3RyaW5nCi0JRWxlbWVudCB3M2NlbGVtZW50ID0gZWxlbS5nZXRFbGVtZW50KCk7Ci0JSGFzaHRhYmxlIHBhcmVudG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbix3M2NlbGVtZW50KTsKLQlTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gdzNjZWxlbWVudC5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSk7Ci0JLy8gaWYgdGhlIHRhcmdldE5hbWVzcGFjZSBoYXNuJ3QgYmVlbiBkZWZpbmVkIGZvciB0aGUgc2NoZW1hIHVzZSB0aGUgCi0JLy8gdGFyZ2V0TmFtZXNwYWNlIG9mIHRoZSBkZWZpbml0aW9ucyBlbGVtZW50Ci0JLyppZih0YXJnZXROYW1lc3BhY2UgPT0gbnVsbCB8fCB0YXJnZXROYW1lc3BhY2UuZXF1YWxzKCIiKSkKLQkgewotCSAgdGFyZ2V0TmFtZXNwYWNlID0gd3NkbERlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JICB3M2NlbGVtZW50LnNldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFLHRhcmdldE5hbWVzcGFjZSk7Ci0JfSovCi0KLQlTdHJpbmcgeHNkID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyh3M2NlbGVtZW50LCBlbGVtZW50cywgZmlsZW5hbWUsIHBhcmVudG5hbWVzcGFjZXMpOwotCi0gICAgLy8gSWYgdGhlIG5hbWVzcGFjZSBnaXZlbiBpcyBvbmUgb2YgdGhlIG9sZCBzY2hlbWEgbmFtZXNwYWNlcyBwcm9kdWNlIGEgd2FybmluZy4KLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gdzNjZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICBpZihuYW1lc3BhY2UuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpIHx8IG5hbWVzcGFjZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpCi0gICAgewotICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQW4gb2xkIHZlcnNpb24gb2YgdGhlIHNjaGVtYSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLiIpOwotICAgIH0KLQotICAgIC8vIG5vdyBjcmVhdGUgYW5kIGNhbGwgdGhlIHZhbGlkYXRvciBmb3IgdGhlIGlubGluZSBzY2hlbWEKLSAgICBYU0RWYWxpZGF0b3Igc2NoZW1hdiA9IG5ldyBYU0RWYWxpZGF0b3IoKTsKLQotICAgIC8vU3RyaW5nIGZpbGVMb2NhdGlvbiA9IG5ldyBVUkwodmFsaWRhdG9ybWFuYWdlci5nZXRGaWxlbmFtZSgpKS5nZXRQYXRoKCk7Ci0gICAgSW5saW5lWFNEUmVzb2x2ZXIgaW5saW5lRW50aXR5UmVzb2x2ZXIgPQotICAgICAgZ2V0RW50aXR5UmVzb2x2ZXIod3NkbERlZmluaXRpb24sIChUeXBlcykgcGFyZW50cy5nZXQoMCksIGZpbGVuYW1lLCB0YXJnZXROYW1lc3BhY2UpOwotICAgIC8vCWFkZCBpbiB0aGUgZXh0ZXJuYWwgWFNEIENhdGFsb2cgdG8gcmVzb2x2ZSBzY2hlbWFzIG9mZmxpbmUKLSAgICBYTUxFbnRpdHlSZXNvbHZlckNoYWluIGVudGl0eVJlc29sdmVyQ2hhaW4gPSBuZXcgWE1MRW50aXR5UmVzb2x2ZXJDaGFpbigpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIoaW5saW5lRW50aXR5UmVzb2x2ZXIpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIobmV3IEZpbGVFbnRpdHlSZXNvbHZlcigpKTsKLSAgICBlbnRpdHlSZXNvbHZlckNoYWluLmFkZEVudGl0eVJlc29sdmVyKFhNTENhdGFsb2dSZXNvbHZlci5nZXRJbnN0YW5jZSgpKTsKLSAgICBzY2hlbWF2LnZhbGlkYXRlSW5saW5lU2NoZW1hKHhzZCwgdGFyZ2V0TmFtZXNwYWNlLCBmaWxlbmFtZSwgZW50aXR5UmVzb2x2ZXJDaGFpbiwgaW5saW5lRW50aXR5UmVzb2x2ZXIpOwotCi0gICAgLy8gY2hlY2sgaWYgdGhlIFNPQVAgRW5jb2RpbmcgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIGJ1dCBub3QgaW1wb3J0ZWQKLSAgICBpZiAoSW5saW5lU2NoZW1hR2VuZXJhdG9yLnNvYXBFbmNvZGluZ1JlcXVpcmVkTm90SW1wb3J0ZWQoZWxlbS5nZXRFbGVtZW50KCksIGZpbGVuYW1lLHBhcmVudG5hbWVzcGFjZXMpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRoZSBpbmxpbmUgc2NoZW1hIHVzZXMgYW4gZWxlbWVudCBvciB0eXBlIGZyb20gIgotICAgICAgICArICJ0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgYnV0IHRoZSBuYW1lc3BhY2UgaGFzIG5vdCBiZWVuIGltcG9ydGVkLiAiCi0gICAgICAgICsgIlRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBzaG91bGQgYmUgaW1wb3J0ZWQgd2l0aCBhbiBpbXBvcnQgIgotICAgICAgICArICJzdGF0ZW1lbnQgYmVmb3JlIGl0IGlzIHVzZWQuIik7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHNjaGVtYSBpc24ndCB2YWxpZAotICAgIGlmICghc2NoZW1hdi5pc1ZhbGlkKCkpCi0gICAgewotICAgICAgLy8gR2F0aGVyaW5nIGFsbCB0aGUgZXJyb3JzCi0gICAgICBTdHJpbmdCdWZmZXIgZXhjZXB0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgSXRlcmF0b3IgaSA9IHNjaGVtYXYuZ2V0RXJyb3JzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgZXhjZXB0aW9uLmFwcGVuZChpLm5leHQoKSkuYXBwZW5kKCdcbicpOwotICAgICAgfQotICAgICAgLy8gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGV4Y2VwdGlvbi50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgLy8gaWYgdGhlIHNjaGVtYSBpcyB2YWxpZAotICAgIGVsc2UKLSAgICB7Ci0gICAgICBNYXAgbWFwID0gbmV3IEhhc2hNYXAoMSk7Ci0gICAgICBtYXAucHV0KHRhcmdldE5hbWVzcGFjZSwgc2NoZW1hdi5nZXRYU01vZGVsKCkpOwotICAgICAgcmV0dXJuIG1hcDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFuIGVudGl0eSByZXNvbHZlciB0aGF0IHdpbGwgcmVzb2x2ZSBpbmxpbmUgc2NoZW1hcy4gIEV2ZXJ5IGlubGluZSBzY2hlbWEgaXMgcHJlcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHRoZSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcGFyYW0gdHlwZXMgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSByZWZlcmVuY2VMb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHNjaGVtYS4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0TmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQW4gZW50aXR5IHJlc29sdmVyIHRoYXQgY2FuIHJlc29sdmUgaW5saW5lIHNjaGVtYXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSW5saW5lWFNEUmVzb2x2ZXIgZ2V0RW50aXR5UmVzb2x2ZXIoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgVHlwZXMgdHlwZXMsIFN0cmluZyByZWZlcmVuY2VMb2NhdGlvbiwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIElubGluZVhTRFJlc29sdmVyIGVudGl0eVJlc29sdmVyID0gbmV3IElubGluZVhTRFJlc29sdmVyKCk7Ci0vLyAgICBlbnRpdHlSZXNvbHZlci5zZXRSZWZlcmVuY2VMb2NhdGlvbihyZWZlcmVuY2VMb2NhdGlvbik7Ci0gICAgTGlzdCBzY2hlbWFzID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKHNjaGVtYXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpU2NoZW1hcyA9IHNjaGVtYXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpU2NoZW1hcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgaVNjaGVtYXMubmV4dCgpOwotICAgICAgICBTdHJpbmcgdGhpc05hbWVzcGFjZSA9IGV4dEVsZW0uZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgICAgaWYgKHRoaXNOYW1lc3BhY2UgIT0gbnVsbCAmJiAhdGhpc05hbWVzcGFjZS5lcXVhbHNJZ25vcmVDYXNlKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICAgIHsKLQotICAgICAgICAJRWxlbWVudCBlbGVtZW50ID0gZXh0RWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkKLS8vCQkJY3JlYXRlIHRoZSBpbmxpbmUgc2NoZW1hIHN0cmluZwotCQkJIC8vRWxlbWVudCB3M2NlbGVtZW50ID0gZWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkgSGFzaHRhYmxlIHBhcmVudG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbixlbGVtZW50KTsKLQkJCSBTdHJpbmcgeHNkID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyhlbGVtZW50LCBlbGVtZW50cywgcmVmZXJlbmNlTG9jYXRpb24sIHBhcmVudG5hbWVzcGFjZXMpOwotICAgICAgICAJLy9hZGROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbixlbGVtZW50KTsKLSAgICAgICAgICBlbnRpdHlSZXNvbHZlci5hZGQodGhpc05hbWVzcGFjZSwgeHNkKTsKLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlbnRpdHlSZXNvbHZlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBhcyBpbiB0aGUgZm9ybSAKLSAgICogeG1sbnM9InNvbWVuYW1lc3BhY2UiCi0gICAqIGZyb20gdGhlIGRlZmluaXRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhbmQgYWRkIHRoZW0gdG8gdGhlIHNjaGVtYSBlbGVtZW50IHNvIHRoZSBzY2hlbWEgCi0gICAqIHZhbGlkYXRvciB3aWxsIGhhdmUgYWNjZXNzIHRvIHRoZW0uCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCB0aGUgbmFtZXNwYWNlIGVsZW1lbnRzIGZyb20gdGhlIGVsZW1lbnRzIHByb3ZpZGVkLgotICAgKi8KLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgCUhhc2h0YWJsZSBuc3MgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgSXRlcmF0b3IgbmFtZVNwYWNlcyA9IHdzZGxEZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotCi0gICAgU3RyaW5nIFhNTE5TID0gQ29uc3RhbnRzLkFUVFJfWE1MTlM7Ci0gICAgCi0gICAgd2hpbGUgKG5hbWVTcGFjZXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBuc3ByZWZpeCA9IFhNTE5TOwotICAgICAgU3RyaW5nIG5zID0gKFN0cmluZykgbmFtZVNwYWNlcy5uZXh0KCk7Ci0gICAgICBpZiAoIW5zLmVxdWFsc0lnbm9yZUNhc2UoIiIpKQotICAgICAgewotICAgICAgICBuc3ByZWZpeCArPSAiOiI7Ci0gICAgICB9Ci0gICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKG5zcHJlZml4ICsgbnMpKQotICAgICAgewotICAgICAgCW5zcy5wdXQobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0vLyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgLy8gTmV4dCBoYW5kbGUgdGhlIHBhcmVudCB0eXBlcyBlbGVtZW50Ci0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGF0dHNsZW5ndGggPSBhdHRzLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0c2xlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgdGVtcG5vZGUgPSBhdHRzLml0ZW0oaSk7Ci0gICAgICBTdHJpbmcgbm9kZW5hbWUgPSB0ZW1wbm9kZS5nZXROb2RlTmFtZSgpOwotICAgICAgLy8gaWYgdGhpcyBpcyBhIG5hbWVzcGFjZSBhdHRyaWJ1dGUKLSAgICAgIGlmIChub2RlbmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgIHsKLQkJbnNzLnB1dChub2RlbmFtZSwgIHRlbXBub2RlLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgLy9lbGVtZW50LnNldEF0dHJpYnV0ZShub2RlbmFtZSwgdGVtcG5vZGUuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNzOwotICB9Ci0gIAotICAvKioKLSAgICogR2l2ZW4gYSBsaW5lIG51bWJlciBmb3IgdGhlIHNjaGVtYSByZXR1cm5zIHRoZSBlbGVtZW50IGZvdW5kIG9uIHRoYXQgbGluZS4gCi0gICAqIFVzZWZ1bCBmb3Igb2J0YWluaW5nIGVsZW1lbnRzIGZyb20gc2NoZW1hIFN0cmluZ3MuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBudW1iZXIgZm9yIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gVGhlIG9iamVjdCBsb2NhdGVkIGF0IHRoZSBsaW5lIG9yIGF0IGxpbmUgMCBpZiB0aGUgbGluZSBpcyBpbnZhbGlkLgotICAgKi8KLSAgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0QXRMaW5lKGludCBsaW5lKQotICAgewotICAgCWlmKGxpbmUgPCAwIHx8IGxpbmUgPj0gZWxlbWVudHMuc2l6ZSgpKQotICAgCXsKLSAgIAkgIGxpbmUgPSAwOwotICAgCX0KLQlyZXR1cm4gZWxlbWVudHMuZ2V0KGxpbmUpOwotICAgfQotICAgCi0gIC8qKgotICAgKiBSZXBsYWNlIGFueSBpbnN0YW5jZSBvZiB0aGUgMjAwMSBzY2hlbWEgbmFtZXNwYWNlIGluIHRoZSBnaXZlbiBtZXNzYWdlIHdpdGgKLSAgICogdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHJlcGxhY2UgdGhlIG5hbWVzcGFjZSBpbi4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHVzZWQgZm9yIHJlcGxhY2VtZW50LgotICAgKiBAcmV0dXJuIFRoZSBtZXNzYWdlIHdpdGggdGhlIDIwMDEgc2NoZW1hIG5hbWVzcGFjZSByZXBsYWNlZCBieSB0aGUgZ2l2ZW4gbmFtZXNwYWNlLgotICAgKi8KLSAvLyBwcml2YXRlIFN0cmluZyByZXBsYWNlTmFtZXNwYWNlKFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgbmFtZXNwYWNlKQotIC8vICB7Ci0gLy8gICAgU3RyaW5nIHhzZDIwMDEgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotIC8vICAgIGludCBzdGFydCA9IG1lc3NhZ2UuaW5kZXhPZih4c2QyMDAxKTsKLSAvLyAgICBpbnQgZW5kID0gc3RhcnQgKyB4c2QyMDAxLmxlbmd0aCgpOwotIC8vICAgIGlmKHN0YXJ0IDwgMCkKLSAvLyAgICB7Ci0gLy8gICAgICByZXR1cm4gbWVzc2FnZTsKLSAvLyAgICB9Ci0gLy8gICAgU3RyaW5nIHN0YXJ0U3RyaW5nID0gbWVzc2FnZS5zdWJzdHJpbmcoMCxzdGFydCk7Ci0gLy8gICAgU3RyaW5nIGVuZFN0cmluZyA9IG1lc3NhZ2Uuc3Vic3RyaW5nKGVuZCxtZXNzYWdlLmxlbmd0aCgpKTsKLSAvLyAgICByZXR1cm4gc3RhcnRTdHJpbmcgKyBuYW1lc3BhY2UgKyBlbmRTdHJpbmc7Ci0gLy8gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVYU0RSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWQ1YTc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBBbiBYTUxFbnRpdHlSZXNvbHZlciB0aGF0IGFsbG93cyBpbmxpbmUgc2NoZW1hcyB0byByZXNvbHZlIGVhY2ggb3RoZXIgdGhyb3VnaCBpbXBvcnRzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lWFNEUmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGVudGl0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotICBwcm90ZWN0ZWQgWE1MSW5wdXRTb3VyY2UgcmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0dWN0b3IuCi0gICAqLwotICBwdWJsaWMgSW5saW5lWFNEUmVzb2x2ZXIoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKQotCQkgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCVN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0JU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldFB1YmxpY0lkKCk7Ci0JU3RyaW5nIG5hbWVzcGFjZSA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLQlYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0JU3RyaW5nIHNjaGVtYSA9IG51bGw7Ci0JaWYgKHN5c3RlbUlkID09IG51bGwpCi0JewotCSAgaWYocHVibGljSWQgPT0gbnVsbCkKLQkgIHsKLQkgIAlpZihuYW1lc3BhY2UgPT0gbnVsbCkKLQkgIAl7CQotCSAgICAgIHJldHVybiBudWxsOwotCSAgCX0KLQkgIAllbHNlCi0JICAJewotCSAgCQlzeXN0ZW1JZCA9IG5hbWVzcGFjZTsKLQkgIAl9Ci0JICB9Ci0JICBlbHNlCi0JICB7CQotCSAgICBzeXN0ZW1JZCA9IHB1YmxpY0lkOwotCSAgfQotCX0KLQkgIAotCWlmKHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSAhPSBudWxsICYmIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZS5lcXVhbHMoc3lzdGVtSWQpKQotCXsKLQkJaWYocmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UhPW51bGwpCi0JCXsKLQkJCXJldHVybiByZWZlcnJpbmdTY2hlbWFJbnB1dFNvdXJjZTsKLQkJfQotCX0KLQllbHNlIGlmICgoc2NoZW1hID0gKFN0cmluZykgZW50aXRpZXMuZ2V0KHN5c3RlbUlkKSkgIT0gbnVsbCAmJiAhc2NoZW1hLmVxdWFscygiIikpCi0JewotCQlpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgc3lzdGVtSWQsIHN5c3RlbUlkLG5ldyBTdHJpbmdSZWFkZXIoc2NoZW1hKSxudWxsKTsKLQl9Ci0JCi0gICAgLy9pZihpcyA9PSBudWxsKQotICAgIC8vewotICAgIC8vCXRocm93IG5ldyBJT0V4Y2VwdGlvbigpOwotICAgIC8vfQotCXJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gaW5saW5lIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgLSB0aGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hCi0gICAqIEBwYXJhbSBzY2hlbWEgLSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NoZW1hCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgU3RyaW5nIHNjaGVtYSkKLSAgewotICAgIGVudGl0aWVzLnB1dCh0YXJnZXROYW1lc3BhY2UsIHNjaGVtYSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgdGhlIHJlZmVycmluZyBpbmxpbmUgc2NoZW1hLiAKLSAgICogCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSAtIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICogQHBhcmFtIG5hbWVzcGFjZSAtIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFJlZmVycmluZ1NjaGVtYShYTUxJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlID0gaW5wdXRTb3VyY2U7Ci0gICAgcmVmZXJyaW5nU2NoZW1hTmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0xhenlVUkxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmUyYTkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0xhenlVUkxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGFsbG93cyBJbnB1dFN0cmVhbXMgdG8gYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQgdG8geGVyY2VzIHdpdGhvdXQKLSAqIGFjdHVhbGx5IG9wZW5pbmcgZmlsZSBoYW5kbGVzIG9yIG5ldHdvcmsgY29ubmVjdGlvbnMgdW50aWwgaXQgaXMgYWJzb2x1dGVseQotICogbmVjY2Vzc2FyeS4KLSAqLwotcHVibGljIGNsYXNzIExhenlVUkxJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtCi17ICAKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQgPSAwOyAKLSAgcHJvdGVjdGVkIElucHV0U3RyZWFtIGlubmVyOwotICBwcm90ZWN0ZWQgU3RyaW5nIHVybDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXJyb3I7Ci0gIGJvb2xlYW4gaGFzTWFya3M7Ci0gIGJvb2xlYW4gcHJldGVuZEZpbGVJc1N0aWxsT3BlbjsKLQotICBwdWJsaWMgTGF6eVVSTElucHV0U3RyZWFtKFN0cmluZyB1cmwpCi0gIHsKLSAgICB0aGlzLnVybCA9IHVybDsKLQlpbm5lciA9IG51bGw7Ci0JcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGlubmVyID09IG51bGwgJiYgIWVycm9yKQotICAgIHsKLSAgICAgIGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQrKzsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBzdHJlYW0gKCIgKyBkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50ICsgIiktLSAiICsgdXJsKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpbm5lciA9IG5ldyBVUkwodXJsKS5vcGVuU3RyZWFtKCk7Ci0JCXByZXRlbmRGaWxlSXNTdGlsbE9wZW4gPSBmYWxzZTsKLQkJaGFzTWFya3MgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkgCi0gICAgICB7Ci0gICAgICAgIGlmIChpbm5lciA9PSBudWxsKQotICAgICAgICB7ICAKLSAgICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCXByb3RlY3RlZCB2b2lkIGNsb3NlU3RyZWFtKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGlubmVyICE9IG51bGwgJiYgIXByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHsKLQkJCWlubmVyLmNsb3NlKCk7Ci0JCQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gdHJ1ZTsKLQkJfQotICAJfQotCi0gIHB1YmxpYyBpbnQgYXZhaWxhYmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIDA7Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlyZXR1cm4gaW5uZXIuYXZhaWxhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHsKLQkJLy8gU3RvcCBiZWhhdmluZyBhcyBpZiB0aGUgc3RyZWFtIHdlcmUgc3RpbGwgb3Blbi4KLQkJcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCWlmIChpbm5lciAhPSBudWxsKSB7Ci0JCQlkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50LS07Ci0JCSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJDbG9zaW5nIHN0cmVhbSAoIiArIGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQgKyAiKSAtLSAiICsgdXJsKTsKLQkJCWlubmVyLmNsb3NlKCk7Ci0JCX0KLQl9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtYXJrKGludCByZWFkbGltaXQpCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuOwotCWhhc01hcmtzID0gdHJ1ZTsKLQl0cnkgewotCQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQkJaW5uZXIubWFyayhyZWFkbGltaXQpOwotCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKQotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiBmYWxzZTsKLQl0cnkgewotCQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQkJaWYgKGlubmVyID09IG51bGwpIHJldHVybiBmYWxzZTsKLQkJcmV0dXJuIGlubmVyLm1hcmtTdXBwb3J0ZWQoKTsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIC0xOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JaW50IGJ5dGVzUmVhZCA9IGlubmVyLnJlYWQoKTsKLQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQlyZXR1cm4gYnl0ZXNSZWFkOwotICB9Ci0KLQotCXB1YmxpYyBpbnQgcmVhZChieXRlW10gYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQkJY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKGIpOwotCQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQkJcmV0dXJuIGJ5dGVzUmVhZDsKLQl9Ci0KLSAgcHVibGljIGludCByZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgeyAgICAKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIC0xOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JaW50IGJ5dGVzUmVhZCA9IGlubmVyLnJlYWQoYiwgb2ZmLCBsZW4pOwotCWlmIChieXRlc1JlYWQgPT0gLTEgJiYgIWhhc01hcmtzKSBjbG9zZVN0cmVhbSgpOwotCXJldHVybiBieXRlc1JlYWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybjsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWlubmVyLnJlc2V0KCk7Ci0gIH0KLQotICBwdWJsaWMgbG9uZyBza2lwKGxvbmcgbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsgICAKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIDA7Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlyZXR1cm4gaW5uZXIuc2tpcChuKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvU2NoZW1hQXR0cmlidXRlVGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OTc2MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvU2NoZW1hQXR0cmlidXRlVGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLnhzLlNjaGVtYVN5bWJvbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5TeW1ib2xUYWJsZTsKLS8qKgotICogVGhpcyBjbGFzcyB3aWxsIGFsbG93IHRoZSBjYWxsaW5nIGNvZGUgdG8gc2VlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBpbiBzY2hlbWEuCi0gKiBUaGlzIHNlcnZlcyBhcyBzY2hlbWEgZm9yIHNjaGVtYS4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFNjaGVtYUF0dHJpYnV0ZVRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUKLXsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgU2NoZW1hQXR0cmlidXRlVGFibGUoKQotICB7Ci0gICAgLy8gYWRkIGFsbCBvZiB0aGUgc3lib2xzIHRvIHRoZSB0YWJsZS4gU2NoZW1hU3ltYm9scyBwcm9iYWJseSBzaG91bGQgaGF2ZQotICAgIC8vIGEgU3ltYm9sVGFibGUgZm9yIHRoZXNlIGJ1dCBpdCBkb2Vzbid0Ci0KLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRBTlkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VORExPQ0FMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRPVEhFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RXT1BPVU5EVEFSR0VUTlMpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QT1VOREFMTCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0ZBTFNFXzApOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UUlVFXzEpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9BTllTSU1QTEVUWVBFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQU5ZVFlQRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0FOWVVSSSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0JBU0U2NEJJTkFSWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0JPT0xFQU4pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9CWVRFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQ09MTEFQU0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EQVRFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfREFURVRJTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EQVkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ERUNJTUFMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRE9VQkxFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRFVSQVRJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9FTlRJVFkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9FTlRJVElFUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0VYVEVOU0lPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0ZBTFNFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRkxPQVQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9IRVhCSU5BUlkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lEUkVGKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSURSRUZTKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSU5UKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0xBTkdVQUdFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTEFYKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTElTVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0xPTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OQU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTkVHQVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTU9OVEgpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9NT05USERBWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05DTkFNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05NVE9LRU4pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OTVRPS0VOUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PTk5FR0FUSVZFSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PTlBPU0lUSVZFSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PUk1BTElaRURTVFJJTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OT1RBVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX09QVElPTkFMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUE9TSVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUFJFU0VSVkUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QUk9ISUJJVEVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUU5BTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9RVUFMSUZJRUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9SRVBMQUNFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUkVRVUlSRUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9SRVNUUklDVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NIT1JUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU0tJUCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NUUklDVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NUUklORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NVQlNUSVRVVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RJTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UT0tFTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RSVUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTkJPVU5ERUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTklPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOUVVBTElGSUVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5TSUdORURCWVRFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5TSUdORURJTlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FRExPTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FRFNIT1JUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfWUVBUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1lFQVJNT05USCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1ZhbGlkYXRlRXJyb3JIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9WYWxpZGF0ZUVycm9ySGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2E3M2ZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1ZhbGlkYXRlRXJyb3JIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uOwotCi0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFhNTEVycm9ySGFuZGxlciB0aGF0IGNhcHR1cmVzIGVycm9yIGZyb20gWGVyY2VzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVFcnJvckhhbmRsZXIgaW1wbGVtZW50cyBYTUxFcnJvckhhbmRsZXIKLXsKLSAgQXJyYXlMaXN0IGVycm9yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogR2V0IHRoZSBlcnJvciBtZXNzYWdlcyBjcmVhdGVkIGJ5IFhlcmNlcy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVycm9ycyBsaXN0LgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXJyb3JNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjZXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVycm9yKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSwgWE1MUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBlcnJvckxpc3QuYWRkKCJFcnJvcjogIiArIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjZmF0YWxFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTdHJpbmcgYXJnMCwgU3RyaW5nIGFyZzEsIFhNTFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgZXJyb3JMaXN0LmFkZCgiRmF0YWwgZXJyb3I6ICIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRXJyb3JIYW5kbGVyI3dhcm5pbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdhcm5pbmcoU3RyaW5nIGFyZzAsIFN0cmluZyBhcmcxLCBYTUxQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIGVycm9yTGlzdC5hZGQoIldhcm5pbmc6ICIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRhZmI1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLS8qKgotICogWE1MQ2F0YWxvZwotICogVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byByZWdpc3Rlciwgb2J0YWluIGFuZCBkZWxldGUgYW4gaW5zdGFuY2Ugb2YgYW4gCi0gKiBYTUwgY2F0YWxvZy4gTWV0aG9kIGRlZmluaXRpb25zIGFyZSBwcm92aWRlZCBmb3IgdGhlIGNhdGFsb2cgdG8gc2V0Ci0gKiBhIGxvY2F0aW9uIGluIHRoZSBjYXRhbG9nIGFuZCByZXNvbHZlIGFuIGVudGl0eSBmcm9tIHRoZSBjYXRhbG9nLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWE1MQ2F0YWxvZwotewotICBwcml2YXRlIHN0YXRpYyBYTUxDYXRhbG9nIGluc3RhbmNlID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3MgeG1sY2F0YWxvZ2NsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogUmV0dXJuIGFuIGluc3RhbmNlIG9mIHRoZSBYTUwgY2F0YWxvZy4gSWYgbm8gaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCwKLSAgICogcmV0dXJucyBhIGRlZmF1bHQgaW5zdGFuY2UuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgWE1MIGNhdGFsb2cKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgWE1MQ2F0YWxvZyBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoeG1sY2F0YWxvZ2NsYXNzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW5zdGFuY2UgPSAoWE1MQ2F0YWxvZyl4bWxjYXRhbG9nY2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBYTUxDYXRhbG9nSW1wbCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGluc3RhbmNlID0gbmV3IFhNTENhdGFsb2dJbXBsKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGNsYXNzIG9mIHRoZSBYTUwgY2F0YWxvZyB0byBiZSB1c2VkLgotICAgKiAKLSAgICogQHBhcmFtIHhtbGNhdGFsb2cgLSB0aGUgY2xhc3Mgb2YgdGhlIFhNTCBjYXRhbG9nIHRvIGJlIHVzZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRYTUxDYXRhbG9nKENsYXNzIHhtbGNhdGFsb2cpCi0gIHsKLSAgICB4bWxjYXRhbG9nY2xhc3MgPSB4bWxjYXRhbG9nOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc2V0cyB0aGUgaW5zdGFuY2Ugb2YgdGhlIFhNTCBjYXRhbG9nIHRvIG51bGwuIEFsbG93cyBzd2l0Y2hpbmcgWE1MIGNhdGFsb2dzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0KCkKLSAgewotICAgIGluc3RhbmNlID0gbnVsbDsKLSAgICB4bWxjYXRhbG9nY2xhc3MgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhIHB1YmxpYyBpZCBhbmQgYSBsb2NhdGlvbiB0byB0aGUgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBwdWJsaWNJZCAtIHRoZSBwdWJsaWMgaWQgb2YgdGhlIGVudHJ5Ci0gICAqIEBwYXJhbSBzeXN0ZW1JZCAtIHRoZSBzeXN0ZW0gaWQgb2YgdGhlIGVudHJ5Ci0gICAqLwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhZGRFbnRyeVRvQ2F0YWxvZyhTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCk7Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIGxvY2F0aW9uIG9mIGFuIGVudGl0eSBnaXZlbiBwdWJsaWMgYW5kIHN5c3RlbSBpZHMuCi0gICAqIAotICAgKiBAcGFyYW0gcHVibGljSWQgLSB0aGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkgdG8gYmUgcmVzb2x2ZWQKLSAgICogQHBhcmFtIHN5c3RlbUlkIC0gdGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50aXR5IHRvIGJlIHJlc29sdmVkCi0gICAqIEByZXR1cm4gdGhlIGxvY2F0aW9uIG9mIHRoZSBlbnRpdHkKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MQ2F0YWxvZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdjNDBlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBYTUwgQ2F0YWxvZy4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dJbXBsIGV4dGVuZHMgWE1MQ2F0YWxvZwotewotICBwcm90ZWN0ZWQgTWFwIGNhdGFsb2cgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUueG1sY29uZm9ybWFuY2UuWE1MQ2F0YWxvZyNhZGRFbnRyeVRvQ2F0YWxvZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRW50cnlUb0NhdGFsb2coU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgICBjYXRhbG9nLnB1dChwdWJsaWNJZCwgc3lzdGVtSWQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUueG1sY29uZm9ybWFuY2UuWE1MQ2F0YWxvZyNyZXNvbHZlRW50aXR5TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gIAkvLyBpZiB0aGVyZSdzIG5vIHN5c3RlbSBpZCB1c2UgdGhlIHB1YmxpYyBpZAotICAgIGlmIChzeXN0ZW1JZCA9PSBudWxsIHx8IHN5c3RlbUlkLmVxdWFscygiIikpCi0gICAgewotICAgICAgc3lzdGVtSWQgPSBwdWJsaWNJZDsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcpY2F0YWxvZy5nZXQoc3lzdGVtSWQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2dSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2VmZGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2dSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci0KLS8qKgotICogQSByZXNvbHZlciB0byByZXNvbHZlIGVudGl0aWVzIGZyb20gdGhlIFhNTCBjYXRhbG9nLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZ1Jlc29sdmVyIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBYTUxDYXRhbG9nUmVzb2x2ZXIgeG1sQ2F0YWxvZzsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MQ2F0YWxvZ1Jlc29sdmVyKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhpcyByZXNvbHZlci4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoaXMgcmVzb2x2ZXIKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgWE1MQ2F0YWxvZ1Jlc29sdmVyIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmICh4bWxDYXRhbG9nID09IG51bGwpCi0gICAgewotICAgICAgeG1sQ2F0YWxvZyA9IG5ldyBYTUxDYXRhbG9nUmVzb2x2ZXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHhtbENhdGFsb2c7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldFB1YmxpY0lkKCk7Ci0gICAgU3RyaW5nIHN5c3RlbUlkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldEV4cGFuZGVkU3lzdGVtSWQoKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBYTUxDYXRhbG9nLmdldEluc3RhbmNlKCkucmVzb2x2ZUVudGl0eUxvY2F0aW9uKHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgaWYgKGxvY2F0aW9uID09IG51bGwpCi0gICAgewotICAgICAgWE1MSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgWE1MSW5wdXRTb3VyY2UocHVibGljSWQsIHN5c3RlbUlkLCBzeXN0ZW1JZCwgbmV3IFN0cmluZ1JlYWRlcihsb2NhdGlvbiksIG51bGwpOwotICAgICAgcmV0dXJuIGlucHV0U291cmNlOwotICAgIH0KLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIG51bGwgdG8gdGVsbCB0aGUgcGFyc2VyIHRvIGxvY2F0ZSB0aGUgc3lzdGVtSWQgYXMgYSBVUkkKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzFmODAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTEVudGl0eVJlc29sdmVyQ2hhaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotCi0vKioKLSAqIEhhbmRsZSBhIGNoYWluIG9mIGVudGl0eSByZXNvbHZlcnMuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxFbnRpdHlSZXNvbHZlckNoYWluIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIKLXsKLSAgcHJpdmF0ZSBMaXN0IGVudGl0eVJlc29sdmVycyA9IG5ldyBWZWN0b3IoKTsKLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHhtbFJlc291cmNlSWRlbnRpZmllcikgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFhNTElucHV0U291cmNlIGlzID0gbnVsbDsKLSAgICBJdGVyYXRvciBlbnRpdHlSZXNvbHZlckl0ZXIgPSBlbnRpdHlSZXNvbHZlcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZW50aXR5UmVzb2x2ZXJJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IChYTUxFbnRpdHlSZXNvbHZlcillbnRpdHlSZXNvbHZlckl0ZXIubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlzID0gZW50aXR5UmVzb2x2ZXIucmVzb2x2ZUVudGl0eSh4bWxSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFhOSUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBpZiAoaXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFRocm93IGFuZCBJT0V4Y2VwdGlvbiBpZiB0aGUgZmlsZSBpc24ndCBmb3VuZAotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiVW5hYmxlIHRvIGxvY2F0ZSBmaWxlIik7Ci0gICAgfQotICAgIHJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gZW50aXR5IHJlc29sdmVyIHRvIHRoaXMgY2hhaW4uCi0gICAqIAotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgVGhlIHJlc29sdmVyIHRvIGFkZCB0byB0aGUgY2hhaW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFbnRpdHlSZXNvbHZlcihYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIGVudGl0eVJlc29sdmVycy5hZGQoZW50aXR5UmVzb2x2ZXIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YU0RWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hTRFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWQzYzcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hTRFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlhNTEdyYW1tYXJQcmVwYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhTR3JhbW1hcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLQotCi0vKioKLSAqIFZhbGlkYXRlIHNjaGVtYXMgZnJvbSBmaWxlcyBvciBTdHJpbmcuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBYU01vZGVsIHhzTW9kZWw7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1ZhbGlkWFNEOwotICBwcml2YXRlIExpc3QgZXJyb3JzOwotICBwcml2YXRlIFN0cmluZyBmaWxlbG9jYXRpb247Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFhTRFZhbGlkYXRvcigpCi0gIHsKLSAgICB4c01vZGVsID0gbnVsbDsKLSAgICBpc1ZhbGlkWFNEID0gZmFsc2U7Ci0gICAgZXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICB9Ci0gIC8qKgotICAgKiBWYWxpZGF0ZSBhbiBpbmxpbmUgc2NoZW1hLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBBIHNjaGVtYSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvYyBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlSW5saW5lU2NoZW1hKFN0cmluZyBzY2hlbWEsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFN0cmluZyBmaWxlbG9jKQotICB7Ci0gICAgdmFsaWRhdGVJbmxpbmVTY2hlbWEoc2NoZW1hLCB0YXJnZXROYW1lc3BhY2UsIGZpbGVsb2MsIG51bGwsIG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGFuIGlubGluZSBzY2hlbWEgYW5kIHNwZWNpZnkgYW4gZW50aXR5IHJlc29sdmVyLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBUaGlzIHNjaGVtYSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvYyBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlckNoYWluIFRoZSBlbnRpdHkgcmVzb2x2ZXIgY2hhaW4uCi0gICAqIEBwYXJhbSBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciBBbiBpbmxpbmUgc2NoZW1hIHJlc29sdmVyIGZvciB0aGlzIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlSW5saW5lU2NoZW1hKAotICAgIFN0cmluZyBzY2hlbWEsCi0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwKLSAgICBTdHJpbmcgZmlsZWxvYywKLSAgICBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlckNoYWluLAotICAgIFhNTEVudGl0eVJlc29sdmVyIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKQotICB7Ci0gICAgZmlsZWxvY2F0aW9uID0gZmlsZWxvYzsKLQotICAgIHZhbGlkYXRlWFNEKHNjaGVtYSwgdHJ1ZSwgZW50aXR5UmVzb2x2ZXJDaGFpbix0YXJnZXROYW1lc3BhY2UsIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgZmlsZSBsb2NhdGVkIGF0IHRoZSB1cmkgc3BlY2lmaWVkIHdpdGggdGhlIGdpdmVuIGVudGl0eSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgQW4gYWJzb2x1dGUgdXJpIGZvciB0aGUgc2NoZW1hIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgQW4gZW50aXR5IHJlc29sdmVyIHRvIGJlIHVzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShTdHJpbmcgdXJpLCBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIHZhbGlkYXRlWFNEKHVyaSwgZmFsc2UsIGVudGl0eVJlc29sdmVyLCBudWxsLCBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgc2NoZW1hLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBUaGUgc2NoZW1hIG9yIGl0J3MgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBpbmxpbmVYU0QgVHJ1ZSBpZiBhbiBpbmxpbmUgc2NoZW1hLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlciBBbiBlbnRpdHkgcmVzb2x2ZXIgdG8gdXNlLgotICAgKiBAcGFyYW0gdGFyZ2V0TmFtZXNwYWNlIFRoZSB0YXJnZXQgbmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEgYmVpbmcgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIgQW4gaW5saW5lIHNjaGVtYSBlbnRpdHkgcmVzb2x2ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVhTRChTdHJpbmcgc2NoZW1hLCBib29sZWFuIGlubGluZVhTRCwgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFhNTEVudGl0eVJlc29sdmVyIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKQotICB7Ci0gICAgVmFsaWRhdGVFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyID0gbmV3IFZhbGlkYXRlRXJyb3JIYW5kbGVyKCk7Ci0gICAgZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZXMoKS5jbGVhcigpOwotICAgIHRyeQotICAgIHsKLQkJWE1MR3JhbW1hclByZXBhcnNlciBncmFtbWFyUHJlcGFyc2VyID0gbmV3IFhNTEdyYW1tYXJQcmVwYXJzZXIoKTsKLQkJWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wgPSBuZXcgWE1MR3JhbW1hclBvb2xJbXBsKCk7Ci0JCWdyYW1tYXJQcmVwYXJzZXIuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wpOwotCSAKLSAgICAgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlcik7Ci0gICAgICBpZiAoZW50aXR5UmVzb2x2ZXIgIT0gbnVsbCkKLSAgICAgIHsKLQkJZ3JhbW1hclByZXBhcnNlci5zZXRFbnRpdHlSZXNvbHZlcihlbnRpdHlSZXNvbHZlcik7Ci0gICAgICB9Ci0KLSAgICAgIHRyeQotICAgICAgewotCQlYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0gICAgICAgIC8vIHRoaXMgYWxsb3dzIHN1cHBvcnQgZm9yIHRoZSBpbmxpbmUgc2NoZW1hIGluIFdTREwgZG9jdW1lbnRzCi0gICAgICAgIGlmIChpbmxpbmVYU0QpCi0gICAgICAgIHsKLSAgICAgICAgCQotICAgICAgICAJUmVhZGVyIHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc2NoZW1hKTsKLQkJCWlzID0gbmV3IFhNTElucHV0U291cmNlKG51bGwsZmlsZWxvY2F0aW9uLGZpbGVsb2NhdGlvbixyZWFkZXIsbnVsbCk7Ci0JCQkKLQkJCSgoSW5saW5lWFNEUmVzb2x2ZXIpaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIpLmFkZFJlZmVycmluZ1NjaGVtYShpcyx0YXJnZXROYW1lc3BhY2UpOwotCi0gICAgICAgIH0KLSAgICAgICAgLy8gZ2V0IHRoZSBpbnB1dCBzb3VyY2UgZm9yIGFuIGV4dGVybmFsIHNjaGVtYSBmaWxlCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGlzID0gbmV3IFhNTElucHV0U291cmNlKG51bGwsc2NoZW1hLHNjaGVtYSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGdyYW1tYXJQcmVwYXJzZXIucmVnaXN0ZXJQcmVwYXJzZXIoWE1MR3JhbW1hckRlc2NyaXB0aW9uLlhNTF9TQ0hFTUEsbnVsbC8qc2NoZW1hTG9hZGVyKi8pOwotICAgICAgICBncmFtbWFyUHJlcGFyc2VyLmdldExvYWRlcihYTUxHcmFtbWFyRGVzY3JpcHRpb24uWE1MX1NDSEVNQSk7Ci0KLQkJWFNHcmFtbWFyIGdyYW1tYXIgPSAoWFNHcmFtbWFyKWdyYW1tYXJQcmVwYXJzZXIucHJlcGFyc2VHcmFtbWFyKFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BLGlzKTsKLQkJeHNNb2RlbCA9IGdyYW1tYXIudG9YU01vZGVsKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vcGFyc2VyIHdpbGwgcmV0dXJuIG51bGwgcG9pbnRlciBleGNlcHRpb24gaWYgdGhlIGRvY3VtZW50IGlzIHN0cnVjdHVyYWxseSBpbnZhbGlkCi0gICAgICAgIGVycm9ycy5hZGQoIlNjaGVtYSBpcyBzdHJ1Y3R1cmFsbHkgaW52YWxpZC4iKTsKLSAgICAgIH0KLQotICAgICAgZXJyb3JzLmFkZEFsbChlcnJvckhhbmRsZXIuZ2V0RXJyb3JNZXNzYWdlcygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKGUpOwotICAgIH0KLSAgICBpZiAoZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBpc1ZhbGlkWFNEID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKi8KLQotICBwdWJsaWMgWFNNb2RlbCBnZXRYU01vZGVsKCkKLSAgewotICAJcmV0dXJuIHhzTW9kZWw7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2NoZW1hIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNjaGVtYSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0gIHsKLSAgICByZXR1cm4gaXNWYWxpZFhTRDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGVycm9yIGxpc3QuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBlcnJvciBmcm9tIHRoZSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTENvbnZlcnRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTENvbnZlcnRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmIxMzRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxDb252ZXJ0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sOwotCi1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtU291cmNlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udmVydHMgYSBYTUwgZG9jdW1lbnQgdXNpbmcgYW4gWFNMIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxDb252ZXJ0b3IKLXsKLQotICAvKioKLSAgICogVHJhbnNmb3JtcyBhbiBYTUwgZG9jdW1lbnQgdXNpbmcgYW4gWFNMIGZpbGUuCi0gICAqIEBwYXJhbSBhcmdzICBhcmd1bWVudHMgZm9yIG1haW4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykKLSAgICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAgICJVc2FnZTogWE1MQ29udmVydG9yIDx4c2xGaWxlPiA8aW5YTUxGaWxlPiA8b3V0RmlsZT4iKTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBHZXQgdHJhbnNmb3JtZXIgCi0gICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0KLSAgICAgICAgICBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigKLSAgICAgICAgICAgIG5ldyBTdHJlYW1Tb3VyY2UoYXJnc1swXSkpOwotCi0gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgWE1MIGRvY3VtZW50IHVzaW5nIHRoZSBzcGVjaWZpY2VkIFhTTCBmaWxlCi0gICAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybSgKLSAgICAgICAgICBuZXcgU3RyZWFtU291cmNlKGFyZ3NbMV0pLAotICAgICAgICAgIG5ldyBTdHJlYW1SZXN1bHQobmV3IEZpbGVPdXRwdXRTdHJlYW0oYXJnc1syXSkpKTsKLQotICAgICAgICAvLyBEaXNwbGF5IHJlc3VsdHMKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAgICJDcmVhdGVkICIgKyBhcmdzWzJdICsgIiBmcm9tICIgKyBhcmdzWzBdICsgIiBhbmQgIiArIGFyZ3NbMV0gKyAiLiIpOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIFN5c3RlbS5leGl0KDApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTERvY3VtZW50Q2FjaGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEwODc1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjcmVhdGVzIGEgSGFzaE1hcCB0byBjYWNoZSBYTUwgZG9jdW1lbnRzLgotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFhNTERvY3VtZW50Q2FjaGUgZXh0ZW5kcyBIYXNoTWFwCi17Ci0Jc3RhdGljIFhNTERvY3VtZW50Q2FjaGUgaW5zdGFuY2U7Ci0KLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzODM0MDI4MDQzNzA5NjU3NDAxTDsKLQotCS8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgWE1MRG9jdW1lbnRDYWNoZS4KLSAgICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSAgdGhlIGluaXRpYWwgY2FwYWNpdHkuCi0gICAqIEBwYXJhbSBsb2FkRmFjdG9yICAgICAgIHRoZSBsb2FkIGZhY3Rvci4gCi0gICAqLwotICBwdWJsaWMgWE1MRG9jdW1lbnRDYWNoZShpbnQgaW5pdGlhbENhcGFjaXR5LCBmbG9hdCBsb2FkRmFjdG9yKQotICB7Ci0gICAgc3VwZXIoaW5pdGlhbENhcGFjaXR5LCBsb2FkRmFjdG9yKTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTERvY3VtZW50Q2FjaGUuCi0gICAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgIHRoZSBpbml0aWFsIGNhcGFjaXR5LgotICAgKi8KLSAgcHVibGljIFhNTERvY3VtZW50Q2FjaGUoaW50IGluaXRpYWxDYXBhY2l0eSkKLSAgewotICAgIHN1cGVyKGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBYTUxEb2N1bWVudENhY2hlLgotICAgKi8KLSAgcHVibGljIFhNTERvY3VtZW50Q2FjaGUoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTERvY3VtZW50Q2FjaGUuCi0gICAqIEBwYXJhbSB0ICB0aGUgbWFwIHdob3NlIG1hcHBpbmdzIGFyZSB0byBiZSBwbGFjZWQgaW4gdGhpcyBtYXAuCi0gICAqLwotICBwdWJsaWMgWE1MRG9jdW1lbnRDYWNoZShNYXAgdCkKLSAgewotICAgIHN1cGVyKHQpOwotICAgIGluc3RhbmNlID0gdGhpczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgWE1MRG9jdW1lbnRDYWNoZSBpbnN0YW5jZSgpCi0gIHsKLQkgIGlmIChpbnN0YW5jZSA9PSBudWxsKSAKLQkJICBpbnN0YW5jZSA9IG5ldyBYTUxEb2N1bWVudENhY2hlKCk7Ci0JICAKLQkgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTERvY3VtZW50Q2FjaGVVc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZVVzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUwZjA3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZVVzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mIGNhY2hlZCBYTUwgZG9jdW1lbnRzLgotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWE1MRG9jdW1lbnRDYWNoZVVzZXIKLXsKLSAgLyoqCi0gICAqIEdldCBkb2N1bWVudCBmcm9tIGNhY2hlLgotICAgKiBAc2VlICNzZXREb2N1bWVudAotICAgKgotICAgKiBAcGFyYW0ga2V5ICBhIFN0cmluZy4gCi0gICAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUga2V5LgotICAgKi8KLSAgcHJvdGVjdGVkIERvY3VtZW50IGdldERvY3VtZW50KFN0cmluZyBrZXkpCi0gIHsKLSAgICByZXR1cm4gKERvY3VtZW50KSBYTUxEb2N1bWVudENhY2hlLmluc3RhbmNlKCkuZ2V0KGtleSk7Ci0gIH0KLQotICAvKioKLSAgICogUHV0IGRvY3VtZW50IHdpdGggY29ycmVzcG9uZGluZyBrZXkgaW4gY2FjaGUuCi0gICAqIEBzZWUgI2dldERvY3VtZW50Ci0gICAqCi0gICAqIEBwYXJhbSBrZXkgICAgICAgYSBTdHJpbmcgdXNlZCBhcyBhIGtleSB0byBpZGVudGlmeSBzcGVjaWZpZWQgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkb2N1bWVudCAgYSBkb2N1bWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldERvY3VtZW50KFN0cmluZyBrZXksIE9iamVjdCBkb2N1bWVudCkKLSAgewotCSAgWE1MRG9jdW1lbnRDYWNoZS5pbnN0YW5jZSgpLnB1dChrZXksIGRvY3VtZW50KTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZG9jdW1lbnQgbGlzdC4KLSAgICogQHJldHVybiBhIFhNTERvY3VtZW50Q2FjaGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZG9jdW1lbnQgbGlzdCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBYTUxEb2N1bWVudENhY2hlIGdldERvY3VtZW50TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gWE1MRG9jdW1lbnRDYWNoZS5pbnN0YW5jZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIFhNTCBkb2N1bWVudC4KLSAgICogQHBhcmFtIHVybFN0cmluZyAgYSBTdHJpbmcgbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICogQHBhcmFtIGJhc2VVUkkgICAgYSBiYXNlIHVybCB0byBhc3Npc3QgaW4gbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgZG9jdW1lbnQgY2Fubm90IGJlIHBhcnNlZC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50VVJMKFN0cmluZyB1cmxTdHJpbmcsIFN0cmluZyBiYXNlVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBwYXJzZVhNTERvY3VtZW50VVJMKHVybFN0cmluZywgYmFzZVVSSSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgWE1MIGRvY3VtZW50IGFuZCB2YWxpZGF0ZSB3aXRoIGEgc2NoZW1hIGRvY3VtZW50LgotICAgKiBAcGFyYW0gdXJsU3RyaW5nICBhIFN0cmluZyBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotICAgKiBAcGFyYW0gYmFzZVVSSSAgICBhIGJhc2UgdXJsIHRvIGFzc2lzdCBpbiBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotICAgKiBAcGFyYW0gc2NoZW1hICAgICBhIFN0cmluZyBpZGVudGlmeWluZyByZWxhdGVkIHNjaGVtYSBkb2N1bWVudC4KLSAgICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgZG9jdW1lbnQgY2Fubm90IGJlIHBhcnNlZC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50VVJMKAotICAgIFN0cmluZyB1cmxTdHJpbmcsCi0gICAgU3RyaW5nIGJhc2VVUkksCi0gICAgU3RyaW5nIHNjaGVtYSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBDcmVhdGUgVVJMIHJlZmVyZW5jZSB0byBkb2N1bWVudAotICAgICAgVVJMIHVybCA9IFhNTFV0aWxzLmNyZWF0ZVVSTCh1cmxTdHJpbmcsIGJhc2VVUkkpOwotICAgICAgICAgICAgICAgCi0gICAgICAvLyBUT0RPOiBBZGQgc2NoZW1hIHRvIHRoZSB4bWwgZG9jdW1lbnQgY2FjaGUsIHNvIHRoYXQgeW91IGNhbiBkZXRlY3Qgd2hlbiBpdCBoYXMgYWxyZWFkeSAKLSAgICAgIC8vICBiZWVuIHBhcnNlZCB1c2luZyBhIHNwZWNpZmljIHNjaGVtYSBkZWZpbml0aW9uIAotCi0gICAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaXMgbm90IGluIHRoZSBjYWNoZSwgdGhlbiByZWFkIGFuZCBwYXJzZSBpdAotICAgCSAgaWYgKChkb2N1bWVudCA9IGdldERvY3VtZW50KHVybFN0cmluZykpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUxEb2N1bWVudFVSTCh1cmwsIHNjaGVtYSk7Ci0gICAgICAgIC8vIEFkZCBkb2N1bWVudCB0byBjYWNoZQotICAgICAgICBzZXREb2N1bWVudCh1cmxTdHJpbmcsIGRvY3VtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRvY3VtZW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVGFncy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRhZ3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyZDA0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVGFncy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyBpbmZvcm1hdGlvbiBvbiBYTUwgdGFncy4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGludGVyZmFjZSBYTUxUYWdzCi17Ci0gIC8qKgotICAgKiBOYW1lc3BhY2VzLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1hTSSA9Ci0gICAgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1hNTE5TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1hTRCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFhTRF9TQ0hFTUFMT0NBVElPTiA9Ci0gICAgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCI7Ci0KLSAgLyoqCi0gICAqIFF1YWxpZmllZCBuYW1lcyBvZiBYU0QgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX0FOTk9UQVRJT04gPQotICAgIG5ldyBRTmFtZShOU19VUklfWFNELCAiYW5ub3RhdGlvbiIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX0lNUE9SVCA9IG5ldyBRTmFtZShOU19VUklfWFNELCAiaW1wb3J0Iik7ICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1hTRF9JTkNMVURFID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJpbmNsdWRlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9YU0RfU0NIRU1BID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJzY2hlbWEiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1hTRF9FTEVNRU5UID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJlbGVtZW50Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9YU0RfQVRUUklCVVRFID0KLSAgICBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgImF0dHJpYnV0ZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX0NPTVBMRVhUWVBFID0KLSAgICBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgImNvbXBsZXhUeXBlIik7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTSV9UWVBFID0gbmV3IFFOYW1lKE5TX1VSSV9YU0ksICJ0eXBlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9YU0lfTklMID0gbmV3IFFOYW1lKE5TX1VSSV9YU0ksICJuaWwiKTsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNEX05BTUUgPSBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgIm5hbWUiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTRF9UWVBFID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJ0eXBlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9YU0RfQkFTRSA9IG5ldyBRTmFtZShOU19VUklfWFNELCAiYmFzZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNEX05BTUVTUEFDRSA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJuYW1lc3BhY2UiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTiA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJzY2hlbWFMb2NhdGlvbiIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNEX1RBUkdFVE5BTUVTUEFDRSA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJ0YXJnZXROYW1lc3BhY2UiKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRyYXZlcnNhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRyYXZlcnNhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjIzM2YwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxUcmF2ZXJzYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sOwotCi1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5DREFUQVNlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uQ29tbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudFR5cGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbnRpdHk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vdGF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi0vKioKLSAqIFdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBub2RlIHNvdXJjZSBjb2RlLCBzbyB0aGlzIGRvZXMKLSAqIG91ciBkb3VibGUtZGlzcGF0Y2ggdGhlIGhhcmQgd2F5LgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWE1MVHJhdmVyc2FsIGV4dGVuZHMgWE1MVmlzaXRvcgotewotICAvKioKLSAgICAgKiBSZXR1cm5pbmcgZmFsc2UgZnJvbSBhY3Rpb24gd291bGQgdGVybWluYXRlcyB0cmF2ZXJzYWwuCi0gICAgICogSG93ZXZlciwgdGhpcyBhbHdheXMgcmV0dXJucyB0cnVlLiAtLSBhIG5vLW9wLgotICAgICAqIEBwYXJhbSBuIC0gYW4gWE1MIG5vZGUuCi0gICAgICogQHJldHVybiBhbHdheXMgdHJ1ZS4KLSAgICAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWN0aW9uKE5vZGUgbikKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoQ0RBVEFTZWN0aW9uIHMpCi0gIHsKLSAgICBhY3Rpb24ocyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChEb2N1bWVudCBlKQotICB7Ci0gICAgaWYgKGFjdGlvbihlKSkKLSAgICB7Ci0gICAgICAvLyBUaGlzIGRvZXMgdmlzaXQgRG9jdW1lbnRUeXBlLCB3aGljaCBpcyBjb25zaWRlcmVkIGEgY2hpbGQgTm9kZS4KLSAgICAgIGZvciAoTm9kZSBuID0gZS5nZXRGaXJzdENoaWxkKCk7IG4gIT0gbnVsbDsgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICAgIHsKLSAgICAgICAgZG9WaXNpdChuKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChEb2N1bWVudFR5cGUgdHlwZSkKLSAgewotICAgIGlmIChhY3Rpb24odHlwZSkpCi0gICAgewotICAgICAgdmlzaXQodHlwZS5nZXRFbnRpdGllcygpKTsKLSAgICAgIHZpc2l0KHR5cGUuZ2V0Tm90YXRpb25zKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEF0dHIgZSkKLSAgewotICAgIGFjdGlvbihlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVsZW1lbnQgbm9kZSkKLSAgewotICAgIGlmIChhY3Rpb24obm9kZSkpCi0gICAgewotICAgICAgdmlzaXQobm9kZS5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgZm9yIChOb2RlIG4gPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsgbiAhPSBudWxsOyBuID0gbi5nZXROZXh0U2libGluZygpKQotICAgICAgewotICAgICAgICBkb1Zpc2l0KG4pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KENvbW1lbnQgZSkKLSAgewotICAgIGFjdGlvbihlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFRleHQgZSkKLSAgewotICAgIGFjdGlvbihlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVudGl0eVJlZmVyZW5jZSBlKQotICB7Ci0gICAgYWN0aW9uKGUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoRW50aXR5IGUpCi0gIHsKLSAgICBhY3Rpb24oZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChOb3RhdGlvbiBuKQotICB7Ci0gICAgYWN0aW9uKG4pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoUHJvY2Vzc2luZ0luc3RydWN0aW9uIGkpCi0gIHsKLSAgICBhY3Rpb24oaSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChOYW1lZE5vZGVNYXAgbWFwKQotICB7Ci0gICAgaWYgKG1hcCAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFwLmdldExlbmd0aCgpOyArK2kpCi0gICAgICB7Ci0gICAgICAgIGRvVmlzaXQobWFwLml0ZW0oaSkpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0vLyBFTkQgT0YgRklMRQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYyMjcyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZS5PdXRwdXRGb3JtYXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWwuc2VyaWFsaXplLlhNTFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk51bGxVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LkVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci0KLS8qKgotICogU2V0IG9mIFhNTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgWE1MVXRpbHMKLXsKLQkvKioKLQkgKiBTb21lIHNheCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgc2V0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfTkFNRVNQQUNFX1BSRUZJWEVTID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2UtcHJlZml4ZXMiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfTkFNRVNQQUNFUyA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkVBVFVSRV9WQUxJREFUSU9OX1NDSEVNQSA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpBWFBfU0NIRU1BX0xBTkdVQUdFID0gImh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL2pheHAvcHJvcGVydGllcy9zY2hlbWFMYW5ndWFnZSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVzNDX1hNTF9TQ0hFTUEgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFczQ19TT0FQXzEyX1NDSEVNQSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFYUF9TQ0hFTUFfU09VUkNFID0gImh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL2pheHAvcHJvcGVydGllcy9zY2hlbWFTb3VyY2UiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX0VYVEVSTkFMX1NDSEVNQV9MT0NBVElPTiA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvcHJvcGVydGllcy9zY2hlbWEvZXh0ZXJuYWwtc2NoZW1hTG9jYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0VOVkVMT1BFID0gIkVudmVsb3BlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fSEVBREVSID0gIkhlYWRlciI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0JPRFkgPSAiQm9keSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0ZBVUxUID0gIkZhdWx0IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fRkFVTFRfQ09ERSA9ICJmYXVsdGNvZGUiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRUxFTV9GQVVMVF9TVFJJTkcgPSAiZmF1bHRzdHJpbmciOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRUxFTV9GQVVMVF9ERVRBSUwgPSAiZGV0YWlsIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fRkFVTFRfQUNUT1IgPSAiZmF1bHRhY3RvciI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9BVFRSX01VU1RfVU5ERVJTVEFORCA9ICJtdXN0VW5kZXJzdGFuZCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9BVFRSX0FDVE9SID0gImFjdG9yIjsKLQotCS8qKgotCSAqIEdldCBYTUxSZWFkZXIuCi0JICogCi0JICogQHJldHVybiB0aGUgWE1MUmVhZGVyIHZhbHVlCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgYXJlIHByb2JsZW1zIGdldHRpbmcgdGhlIFhNTFJlYWRlcgotCSAqICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhNTFJlYWRlciBnZXRYTUxSZWFkZXIoKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJWE1MUmVhZGVyIHhtbFJlYWRlciA9IG51bGw7Ci0KLQkJdHJ5Ci0JCXsKLQkJCXhtbFJlYWRlciA9IChuZXcgb3JnLmFwYWNoZS54ZXJjZXMuamF4cC5TQVhQYXJzZXJGYWN0b3J5SW1wbCgpKQotCQkJCQkubmV3U0FYUGFyc2VyKCkuZ2V0WE1MUmVhZGVyKCk7Ci0KLQkJCS8vIFNldCBuYW1lc3BhY2UgYXdhcmUKLQkJCXhtbFJlYWRlci5zZXRGZWF0dXJlKEZFQVRVUkVfTkFNRVNQQUNFX1BSRUZJWEVTLCB0cnVlKTsKLQkJCXhtbFJlYWRlci5zZXRGZWF0dXJlKEZFQVRVUkVfTkFNRVNQQUNFUywgdHJ1ZSk7Ci0JCX0KLQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBnZXQgWE1MUmVhZGVyIGltcGxlbWVudGF0aW9uLiIsIGUpOwotCQl9Ci0KLQkJcmV0dXJuIHhtbFJlYWRlcjsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0ZXh0IHN0cmluZyBhcyBhbiBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBYTUwgZG9jdW1lbnQgdGV4dC4KLQkgKiBAcGFyYW0gdmFsaWRhdGUgdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgd2lsbCBiZSB2YWxpZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoU3RyaW5nIHRleHQsIGJvb2xlYW4gdmFsaWRhdGUpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKG5ldyBTdHJpbmdSZWFkZXIodGV4dCksIHZhbGlkYXRlKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0ZXh0IHN0cmluZyBhcyBhbiBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBYTUwgZG9jdW1lbnQgdGV4dC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChTdHJpbmcgdGV4dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBwYXJzZVhNTChuZXcgU3RyaW5nUmVhZGVyKHRleHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0aGUgWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHVyaSB0aGUgbG9jYXRpb24gb2YgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXhjZXB0aW9uIG9mIHNvbWUgc29ydCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50KFN0cmluZyB1cmkpIAotCXRocm93cyBXU0lFeGNlcHRpb24sIElPRXhjZXB0aW9uIAotCXsKLQkJcmV0dXJuIHBhcnNlWE1MRG9jdW1lbnQodXJpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0aGUgWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHVyaSB0aGUgbG9jYXRpb24gb2YgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcGFyYW0gc2NoZW1hIGEgU3RyaW5nIGlkZW50aWZ5aW5nIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIGFuIEkvTyBleGNlcHRpb24gb2Ygc29tZSBzb3J0IGhhcyBvY2N1cnJlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIHNjaGVtYSkKLQl0aHJvd3MgV1NJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAKLQl7Ci0JICAgICAgVVJMIHVybCA9IFN0cmluZ1V0aWxzLmdldFVSTChudWxsLCB1cmkpOwotCSAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gKElucHV0U3RyZWFtKXVybC5nZXRDb250ZW50KCk7Ci0JICAgICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UoaW5wdXRTdHJlYW0pOwotCSAgICAgIGlucHV0U291cmNlLnNldFN5c3RlbUlkKHVybC50b1N0cmluZygpKTsKLQkgICAgICAKLQkgICAgICBpZiAoc2NoZW1hID09IG51bGwpCi0JICAgICAgCXJldHVybiBwYXJzZVhNTChpbnB1dFNvdXJjZSwgZmFsc2UpOwotCSAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVhNTChpbnB1dFNvdXJjZSwgc2NoZW1hKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSByZWFkZXIgYW5kIHJldHVybnMgdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJsIGEgU3RyaW5nIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIHNjaGVtYSBhIFN0cmluZyBpZGVudGlmeWluZyByZWxhdGVkIHNjaGVtYSBkb2N1bWVudC4KLQkgKiBAcGFyYW0gYmFzZVVSSSBhIGJhc2UgdXJsIHRvIGFzc2lzdCBpbiBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqIEByZXR1cm4gRG9jdW1lbnQuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnRVUkwoU3RyaW5nIHVybCwgU3RyaW5nIHNjaGVtYSwKLQkJCVN0cmluZyBiYXNlVVJJKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJdHJ5Ci0JCXsKLQkJICBwYXJzZVhNTERvY3VtZW50VVJMKGNyZWF0ZVVSTCh1cmwsIGJhc2VVUkkpLCBzY2hlbWEpOwotCQl9Ci0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCi0JCXJldHVybiBwYXJzZVhNTERvY3VtZW50VVJMKHVybCwgc2NoZW1hKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSByZWFkZXIgYW5kIHJldHVybnMgdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJsIGEgVVJMIG9iamVjdCBpZGVudGlmeWluZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqIEBwYXJhbSBzY2hlbWEgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0JICogQHJldHVybiBEb2N1bWVudC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudFVSTChVUkwgdXJsLCBTdHJpbmcgc2NoZW1hKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXRyeQotCQl7Ci0JICAgICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSAoSW5wdXRTdHJlYW0pdXJsLmdldENvbnRlbnQoKTsKLQkgICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShpbnB1dFN0cmVhbSk7Ci0JICAgICAgaW5wdXRTb3VyY2Uuc2V0U3lzdGVtSWQodXJsLnRvU3RyaW5nKCkpOwotCi0JCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCi0JCQlpZiAoc2NoZW1hID09IG51bGwpCi0JCQkJZG9jID0gcGFyc2VYTUwoaW5wdXRTb3VyY2UpOwotCQkJZWxzZQotCQkJCWRvYyA9IHBhcnNlWE1MKGlucHV0U291cmNlLCBzY2hlbWEpOwotCi0JCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJcmV0dXJuIGRvYzsKLQkJfQotCi0JCWNhdGNoIChXU0lFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgZTsKLQkJfQotCi0JCWNhdGNoIChUaHJvd2FibGUgdCkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSByZWFkZXIgYW5kIHJldHVybnMgdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJsU3RyaW5nIGEgU3RyaW5nIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCB0byBhc3Npc3QgaW4gbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudFVSTChTdHJpbmcgdXJsU3RyaW5nLCBTdHJpbmcgYmFzZVVSSSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0KLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBjcmVhdGVVUkwodXJsU3RyaW5nLCBiYXNlVVJJKTsKLQotCQkJZG9jdW1lbnQgPSBwYXJzZVhNTERvY3VtZW50VVJMKHVybCk7Ci0JCX0KLQotCQljYXRjaCAoV1NJRXhjZXB0aW9uIHdlKQotCQl7Ci0JCQl0aHJvdyB3ZTsKLQkJfQotCi0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCX0KLQotCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgcmVhZGVyIGFuZCByZXR1cm5zIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFVSTCBvYmplY3QgaWRlbnRpZnlpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIERvY3VtZW50LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50VVJMKFVSTCB1cmwpIHRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0KLQkJdHJ5Ci0JCXsKLQkJCVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIodXJsLm9wZW5TdHJlYW0oKSk7Ci0JCQlJbnB1dFNvdXJjZSBzb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UocmVhZGVyKTsKLQkJCXNvdXJjZS5zZXRTeXN0ZW1JZCh1cmwudG9TdHJpbmcoKSk7Ci0JCQlkb2N1bWVudCA9IHBhcnNlWE1MKHNvdXJjZSk7Ci0KLQkJCXJlYWRlci5jbG9zZSgpOwotCQl9Ci0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCi0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IG51bGw7Ci0KLQkvKioKLQkgKiBQYXJzZSBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHJlYWRlciBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0JICogQHBhcmFtIHZhbGlkYXRlIHRydWUgaWYgdGhlIGRvY3VtZW50IHdpbGwgYmUgdmFsaWRhdGUsIGZhbHNlIG90aGVyd2lzZQotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKElucHV0U291cmNlIHNvdXJjZSwgYm9vbGVhbiB2YWxpZGF0ZSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLSAgICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLQotICAgIAkgIGlmIChidWlsZGVyID09IG51bGwpCi0gICAgCSAgewotICAJCSAgICAvLyBHZXQgdGhlIGRvY3VtZW50IGZhY3RvcnkKLQkJICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgICAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgZG8gbm90IHZhbGlkYXRlCi0JCSAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQkgICAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgICAgLy8gQUREOiBUaGlzIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHdlIGhhdmUgYWNjZXNzIHRvIHRoZSBzY2hlbWEKLQkJICAgIC8vIGRvY3VtZW50Ci0JCSAgICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCi0JCSAgICBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAJICB9Ci0JCSAgLy8gUGFyc2UgdGhlIGRvY3VtZW50Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShzb3VyY2UpOwotCQkgIC8vIHdvcmthcm91bmQgZm9yIGNvbXBhdGliaWxpdHkgWGVyY2VzIDIuMi4xIHdpdGggWGVyY2VzIDIuNi4yLAotCQkgIC8vIFhlcmNlcyAyLjYuMiBzdXBwb3J0ZWQgWE1MIDEuMSBidXQgV1NJLXRvb2wgYW5kIFhlcmNlcyAyLjIuMQotCQkgIC8vIHN1cHBvcnRlZCBvbmx5IFhNTCAxLjAKLQkJICBpZiAoZG9jIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkKLQkJICB7Ci0JCQlpZiAoKChvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsKSBkb2MpLmdldFhtbFZlcnNpb24oKS5lcXVhbHMoCi0JCQkJCQkiMS4xIikpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiRmF0YWwgRXJyb3I6IFhNTCB2ZXJzaW9uICZxdW90OzEuMSZxdW90OyAiCi0JCQkJCQkrICJpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IFhNTCAxLjAgaXMgc3VwcG9ydGVkLiIpOwotCQkJfQotCQkgIH0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgcmVhZGVyIGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhZGVyIGEgUmVhZGVyIG9iamVjdC4KLQkgKiBAcGFyYW0gdmFsaWRhdGUgdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgd2lsbCBiZSB2YWxpZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoUmVhZGVyIHJlYWRlciwgYm9vbGVhbiB2YWxpZGF0ZSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLQkJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLQkJCi0JCSAgLy8gQ3JlYXRlIGlucHV0IHNvdXJjZQotCQkgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHJlYWRlcik7Ci0KLQkJICBpZiAoYnVpbGRlciA9PSBudWxsKQotCQkgIHsKLQkJICAgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0JCSAgICAvLyBTZXQgbmFtZXNwYWNlIGF3YXJlLCBidXQgZm9yIG5vdyBkbyBub3QgdmFsaWRhdGUKLQkJICAgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgICBmYWN0b3J5LnNldElnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKHRydWUpOwotCi0JCSAgICAvLyBBREQ6IFRoaXMgc2hvdWxkIGJlIHNldCB0byB0cnVlIHdoZW4gd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNjaGVtYQotCQkgICAgLy8gZG9jdW1lbnQKLQkJICAgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0KLQkJICAgIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkgIH0KLQkJICAvLyBQYXJzZSB0aGUgZG9jdW1lbnQKLQkJICBkb2MgPSBidWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLQkgICAJICAvLyB3b3JrYXJvdW5kIGZvciBjb21wYXRpYmlsaXR5IFhlcmNlcyAyLjIuMSB3aXRoIFhlcmNlcyAyLjYuMiwKLQkJICAvLyBYZXJjZXMgMi42LjIgc3VwcG9ydGVkIFhNTCAxLjEgYnV0IFdTSS10b29sIGFuZCBYZXJjZXMgMi4yLjEKLQkJICAvLyBzdXBwb3J0ZWQgb25seSBYTUwgMS4wCi0JCSAgaWYgKGRvYyBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGwpCi0JCSAgewotCQkJaWYgKCgob3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkgZG9jKS5nZXRYbWxWZXJzaW9uKCkuZXF1YWxzKAotCQkJCQkJIjEuMSIpKQotCQkJewotCQkJICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJGYXRhbCBFcnJvcjogWE1MIHZlcnNpb24gJnF1b3Q7MS4xJnF1b3Q7ICIKLQkJCQkJCQkrICJpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IFhNTCAxLjAgaXMgc3VwcG9ydGVkLiIpOwotCQkJfQotCSAgICAgIH0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgaW5wdXQgc291cmNlIGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gc291cmNlIGEgSW5wdXRTb3VyY2Ugb2JqZWN0LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKFJlYWRlciByZWFkZXIpIHRocm93cyBXU0lFeGNlcHRpb24gewotCQlyZXR1cm4gcGFyc2VYTUwocmVhZGVyLCBmYWxzZSk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBpbnB1dCBzb3VyY2UgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgb2JqZWN0LgotCSAqIAotCSAqIEBwYXJhbSBzb3VyY2UgYSBJbnB1dFNvdXJjZSBvYmplY3QuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoSW5wdXRTb3VyY2Ugc291cmNlKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKHNvdXJjZSwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRleHQgc3RyaW5nIGFzIGFuIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IFhNTCBkb2N1bWVudCB0ZXh0LgotCSAqIEBwYXJhbSBzY2hlbWEgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoU3RyaW5nIHRleHQsIFN0cmluZyBzY2hlbWEpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKG5ldyBTdHJpbmdSZWFkZXIodGV4dCksIHNjaGVtYSk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgdGV4dCBzdHJpbmcgYXMgYW4gWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHRleHQgWE1MIGRvY3VtZW50IHRleHQuCi0JICogQHBhcmFtIHNjaGVtYXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50cy4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChTdHJpbmcgdGV4dCwgQ29sbGVjdGlvbiBzY2hlbWFzKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBwYXJzZVhNTChuZXcgU3RyaW5nUmVhZGVyKHRleHQpLCBzY2hlbWFzKTsKLQl9Ci0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBYTUwgZG9jdW1lbnQgdGV4dC4KLQkgKiBAcGFyYW0gc2NoZW1hU3RyaW5nIGEgU3RyaW5nUmVhZGVyIG9iamVjdC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXhjZXB0aW9uIG9mIHNvbWUgc29ydCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChTdHJpbmcgdGV4dCwgU3RyaW5nUmVhZGVyIHNjaGVtYVN0cmluZykKLQkJCXRocm93cyBXU0lFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKG5ldyBTdHJpbmdSZWFkZXIodGV4dCksIHNjaGVtYVN0cmluZyk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgdGhlIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSByZWFkZXIgYSBSZWFkZXIgb2JqZWN0LgotCSAqIEBwYXJhbSBzY2hlbWEgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoUmVhZGVyIHJlYWRlciwgU3RyaW5nIHNjaGVtYSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLSAgICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLQkJICAvLyBDcmVhdGUgaW5wdXQgc291cmNlCi0JCSAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UocmVhZGVyKTsKLQotCQkgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgIC8vIFNldCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCBmb3Igbm93IGRvIG5vdCB2YWxpZGF0ZQotCQkgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgIHRyeQotCQkgIHsKLQkJICAgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9MQU5HVUFHRSwgVzNDX1hNTF9TQ0hFTUEpOwotIAkJICB9Ci0gICAJCSAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCVN0cmluZyBlcnJNZXNzYWdlID0gIkVycm9yOiBKQVhQIERvY3VtZW50QnVpbGRlckZhY3RvcnkgYXR0cmlidXRlIG5vdCByZWNvZ25pemVkOiAiCi0JCQkJCSsgSkFYUF9TQ0hFTUFfTEFOR1VBR0UKLQkJCQkJKyAiXG4iCi0JCQkJCSsgIkNoZWNrIHRvIHNlZSBpZiBwYXJzZXIgY29uZm9ybXMgdG8gSkFYUCAxLjIgc3BlYy4iOwotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlcnJNZXNzYWdlLCBlKTsKLQkJICB9Ci0JCSAgZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfU09VUkNFLCBuZXcgSW5wdXRTb3VyY2Uoc2NoZW1hKSk7Ci0KLQkJICAvLyBQYXJzZSB0aGUgZG9jdW1lbnQKLQkJICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCSAgYnVpbGRlci5zZXRFcnJvckhhbmRsZXIobmV3IEVyckhhbmRsZXIoKSk7Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0KLQkJICAvLyB3b3JrYXJvdW5kIGZvciBjb21wYXRpYmlsaXR5IFhlcmNlcyAyLjIuMSB3aXRoIFhlcmNlcyAyLjYuMiwKLQkJICAvLyBYZXJjZXMgMi42LjIgc3VwcG9ydGVkIFhNTCAxLjEgYnV0IFdTSS10b29sIGFuZCBYZXJjZXMgMi4yLjEKLQkJICAvLyBzdXBwb3J0ZWQgb25seSBYTUwgMS4wCi0JCSAgaWYgKGRvYyBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGwpCi0JCSAgewotCQkJaWYgKCgob3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkgZG9jKS5nZXRYbWxWZXJzaW9uKCkuZXF1YWxzKCIxLjEiKSkKLQkJCXsKLQkJIAkgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkZhdGFsIEVycm9yOiBYTUwgdmVyc2lvbiAmcXVvdDsxLjEmcXVvdDsgIgotCQkJCQkJCSsgImlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgWE1MIDEuMCBpcyBzdXBwb3J0ZWQuIik7Ci0JCQl9Ci0JCSAgfQotCSAgICB9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IHBhcnNlIFhNTCBkb2N1bWVudC4iLCBlKTsKLQkJfQotCSAgICBmaW5hbGx5Ci0JICAgIHsgCi0JICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0JICAgIH0gICAgCi0JCS8vIFJldHVybiBkb2N1bWVudAotICAgIAlyZXR1cm4gZG9jOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhZGVyIGEgUmVhZGVyIG9iamVjdC4KLQkgKiBAcGFyYW0gc2NoZW1hIGEgU3RyaW5nIGlkZW50aWZ5aW5nIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKElucHV0U291cmNlIHNvdXJjZSwgU3RyaW5nIHNjaGVtYSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLSAgICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLSAJCSAgLy8gR2V0IHRoZSBkb2N1bWVudCBmYWN0b3J5Ci0JCSAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0JCSAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgZG8gbm90IHZhbGlkYXRlCi0JCSAgZmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJICBmYWN0b3J5LnNldElnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKHRydWUpOwotCi0JCSAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQkJICB0cnkKLQkJICB7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9MQU5HVUFHRSwgVzNDX1hNTF9TQ0hFTUEpOwotCQkgIH0KLQotCQkgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLQkJICB7Ci0JCQlTdHJpbmcgZXJyTWVzc2FnZSA9ICJFcnJvcjogSkFYUCBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGF0dHJpYnV0ZSBub3QgcmVjb2duaXplZDogIgotCQkJCQkrIEpBWFBfU0NIRU1BX0xBTkdVQUdFCi0JCQkJCSsgIlxuIgotCQkJCQkrICJDaGVjayB0byBzZWUgaWYgcGFyc2VyIGNvbmZvcm1zIHRvIEpBWFAgMS4yIHNwZWMuIjsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oZXJyTWVzc2FnZSwgZSk7Ci0JCSAgfQotCQkgIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BX1NPVVJDRSwgbmV3IElucHV0U291cmNlKHNjaGVtYSkpOwotCi0gICAgICAgICAgLy8gUGFyc2UgdGhlIGRvY3VtZW50Ci0JCSAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkgIGJ1aWxkZXIuc2V0RXJyb3JIYW5kbGVyKG5ldyBFcnJIYW5kbGVyKCkpOwotCQkgIGRvYyA9IGJ1aWxkZXIucGFyc2Uoc291cmNlKTsKLQotCQkgIC8vIHdvcmthcm91bmQgZm9yIGNvbXBhdGliaWxpdHkgWGVyY2VzIDIuMi4xIHdpdGggWGVyY2VzIDIuNi4yLAotCQkgIC8vIFhlcmNlcyAyLjYuMiBzdXBwb3J0ZWQgWE1MIDEuMSBidXQgV1NJLXRvb2wgYW5kIFhlcmNlcyAyLjIuMQotCQkgIC8vIHN1cHBvcnRlZCBvbmx5IFhNTCAxLjAKLQkJICBpZiAoZG9jIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkKLQkJICB7Ci0JCQlpZiAoKChvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsKSBkb2MpLmdldFhtbFZlcnNpb24oKS5lcXVhbHMoCi0JCQkJCQkiMS4xIikpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiRmF0YWwgRXJyb3I6IFhNTCB2ZXJzaW9uICZxdW90OzEuMSZxdW90OyAiCi0JCQkJCQkrICJpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IFhNTCAxLjAgaXMgc3VwcG9ydGVkLiIpOwotCQkJfQotCQkgIH0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCi0JfQotCi0JLyoqCi0JICogUGFyc2UgdGhlIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZSBhIFJlYWRlciBvYmplY3QuCi0JICogQHBhcmFtIHNjaGVtYVN0cmluZyBhIFN0cmluZ1JlYWRlciBvYmplY3QuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoUmVhZGVyIGZpbGVuYW1lLCBTdHJpbmdSZWFkZXIgc2NoZW1hU3RyaW5nKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0KLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JCXRyeQotCQl7Ci0gICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0KLQkJICAvLyBDcmVhdGUgaW5wdXQgc291cmNlCi0JCSAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UoZmlsZW5hbWUpOwotCi0JCSAgLy8gR2V0IHRoZSBkb2N1bWVudCBmYWN0b3J5Ci0JCSAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0JCSAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgZG8gbm90IHZhbGlkYXRlCi0JCSAgZmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJICBmYWN0b3J5LnNldElnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKHRydWUpOwotCi0JCSAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQkJICB0cnkKLQkJICB7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9MQU5HVUFHRSwgVzNDX1hNTF9TQ0hFTUEpOwotCQkgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCVN0cmluZyBlcnJNZXNzYWdlID0gIkVycm9yOiBKQVhQIERvY3VtZW50QnVpbGRlckZhY3RvcnkgYXR0cmlidXRlIG5vdCByZWNvZ25pemVkOiAiCi0JCQkJCSsgSkFYUF9TQ0hFTUFfTEFOR1VBR0UKLQkJCQkJKyAiXG4iCi0JCQkJCSsgIkNoZWNrIHRvIHNlZSBpZiBwYXJzZXIgY29uZm9ybXMgdG8gSkFYUCAxLjIgc3BlYy4iOwotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlcnJNZXNzYWdlLCBlKTsKLQkJICB9Ci0JCSAgZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfU09VUkNFLCBuZXcgSW5wdXRTb3VyY2Uoc2NoZW1hU3RyaW5nKSk7Ci0KLQkJICAvLyBQYXJzZSB0aGUgZG9jdW1lbnQKLQkJICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCSAgYnVpbGRlci5zZXRFcnJvckhhbmRsZXIobmV3IEVyckhhbmRsZXIoKSk7Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgcGFyc2UgWE1MIGRvY3VtZW50LiIsIGUpOwotCQl9Ci0JICAgIGZpbmFsbHkKLQkgICAgeyAKLQkgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLQkgICAgfSAgICAKLQotCQkvLyBSZXR1cm4gZG9jdW1lbnQKLQkJcmV0dXJuIGRvYzsKLQotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUgYSBSZWFkZXIgb2JqZWN0Ci0JICogQHBhcmFtIHNjaGVtYVN0cmluZ3MgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50cy4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChSZWFkZXIgZmlsZW5hbWUsIENvbGxlY3Rpb24gc2NoZW1hU3RyaW5ncykKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCi0JCURvY3VtZW50IGRvYyA9IG51bGw7Ci0JCUNsYXNzTG9hZGVyIGN1cnJlbnRMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOyAgIAotCQl0cnkKLQkJewotICAgIAkgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKFhNTFV0aWxzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOyAgIAotCi0JCSAgLy8gQ3JlYXRlIGlucHV0IHNvdXJjZQotCQkgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKGZpbGVuYW1lKTsKLQotCQkgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgIC8vIFNldCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCBmb3Igbm93IGRvIG5vdCB2YWxpZGF0ZQotCQkgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfTEFOR1VBR0UsIFczQ19YTUxfU0NIRU1BKTsKLQkJICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLQkJICB7Ci0JCSAgICBTdHJpbmcgZXJyTWVzc2FnZSA9ICJFcnJvcjogSkFYUCBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGF0dHJpYnV0ZSBub3QgcmVjb2duaXplZDogIgotCQkJCQkrIEpBWFBfU0NIRU1BX0xBTkdVQUdFCi0JCQkJCSsgIlxuIgotCQkJCQkrICJDaGVjayB0byBzZWUgaWYgcGFyc2VyIGNvbmZvcm1zIHRvIEpBWFAgMS4yIHNwZWMuIjsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oZXJyTWVzc2FnZSwgZSk7Ci0JCSAgfQotCQkgIC8vIGNvbnZlcnQgc2NoZW1hIHN0cmluZ3MgdG8gYXJyYXkgb2YgSW5wdXRTb3VyY2VzCi0JCSAgSXRlcmF0b3IgaSA9IHNjaGVtYVN0cmluZ3MuaXRlcmF0b3IoKTsKLQkJICBWZWN0b3IgcmVhZGVycyA9IG5ldyBWZWN0b3IoKTsKLQkJICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCSAgewotCQkJU3RyaW5nIG5leHRTY2hlbWEgPSAoU3RyaW5nKSBpLm5leHQoKTsKLQkJCXJlYWRlcnMuYWRkKG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKG5leHRTY2hlbWEpKSk7Ci0JCSAgfQotCQkgIElucHV0U291cmNlW10gaW5wdXRTb3VyY2VzID0gKElucHV0U291cmNlW10pIHJlYWRlcnMKLQkJCQkudG9BcnJheShuZXcgSW5wdXRTb3VyY2VbXXt9KTsKLQkJICAvLyBwYXNzIGFuIGFycmF5IG9mIHNjaGVtYSBzdHJpbmdzIChlYWNoIG9mIHdoaWNoIGNvbnRhaW5zIGEgc2NoZW1hKQotCQkgIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BX1NPVVJDRSwgaW5wdXRTb3VyY2VzKTsKLQotCQkgIC8vIFBhcnNlIHRoZSBkb2N1bWVudAotCQkgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJICBidWlsZGVyLnNldEVycm9ySGFuZGxlcihuZXcgRXJySGFuZGxlcigpKTsKLQkJICBkb2MgPSBidWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCi0JfQotCi0JLyoqCi0JICogR2V0IGF0dHJpYnV0ZSB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGRlZmluZWQgZm9yIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcGFyYW0gYXR0ck5hbWUgYSBuYW1lIG9mIGFuIGF0dHJpYnV0ZQotCSAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGVWYWx1ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyTmFtZSkgewotCQlTdHJpbmcgYXR0clZhbHVlID0gbnVsbDsKLQkJQXR0ciBhdHRyID0gbnVsbDsKLQotCQkvLyBHZXQgdGhlIGF0dHJpYnV0ZSB1c2luZyBpdHMgbmFtZQotCQlpZiAoKGF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoYXR0ck5hbWUpKSAhPSBudWxsKQotCQl7Ci0JCQlhdHRyVmFsdWUgPSBhdHRyLmdldFZhbHVlKCkudHJpbSgpOwotCQl9Ci0KLQkJLy8gUmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZQotCQlyZXR1cm4gYXR0clZhbHVlOwotCX0KLQotCS8qKgotCSAqIEdldCBhdHRyaWJ1dGUgdmFsdWUuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIGF0dHJOYW1lIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUKLQkgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUuCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlIHZhbHVlIGlmIGZvdW5kLiBPdGhlcndpc2UgdGhlIHNwZWNpZmllZCBkZWZhdWx0Ci0JICogICAgICAgICB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGVWYWx1ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyTmFtZSwKLQkJCVN0cmluZyBkZWZhdWx0VmFsdWUpIHsKLQkJU3RyaW5nIHJldHVyblZhbHVlID0gZGVmYXVsdFZhbHVlOwotCQlTdHJpbmcgYXR0clZhbHVlID0gbnVsbDsKLQotCQlpZiAoKGF0dHJWYWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIGF0dHJOYW1lKSkgIT0gbnVsbCkKLQkJCXJldHVyblZhbHVlID0gYXR0clZhbHVlOwotCi0JCXJldHVybiByZXR1cm5WYWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgYXR0cmlidXRlIHZhbHVlLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSBuYW1lc3BhY2UgYSBuYW1lc3BhY2UuCi0JICogQHBhcmFtIGF0dHJOYW1lIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUKLQkgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWVOUyhFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBuYW1lc3BhY2UsCi0JCQlTdHJpbmcgYXR0ck5hbWUpIHsKLQkJU3RyaW5nIGF0dHJWYWx1ZSA9IG51bGw7Ci0JCUF0dHIgYXR0ciA9IG51bGw7Ci0KLQkJLy8gR2V0IHRoZSBhdHRyaWJ1dGUgdXNpbmcgaXRzIG5hbWUKLQkJaWYgKChhdHRyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNwYWNlLCBhdHRyTmFtZSkpICE9IG51bGwpCi0JCXsKLQkJCWF0dHJWYWx1ZSA9IGF0dHIuZ2V0VmFsdWUoKS50cmltKCk7Ci0JCX0KLQotCQkvLyBSZXR1cm4gYXR0cmlidXRlIHZhbHVlCi0JCXJldHVybiBhdHRyVmFsdWU7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50IGZyb20gdGhlIGlucHV0IGVsbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdGNoaWxkIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbGVtZW50IGdldEZpcnN0Q2hpbGQoRWxlbWVudCBlbGVtZW50KSB7Ci0JCS8vIFJldHVybiB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudAotCQlyZXR1cm4gZmluZE5leHRTaWJsaW5nKGVsZW1lbnQuZ2V0Rmlyc3RDaGlsZCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIG5leHQgc2libGluZyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IC0gYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHJldHVybiB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbGVtZW50IGdldE5leHRTaWJsaW5nKEVsZW1lbnQgZWxlbWVudCkgewotCQkvLyBSZXR1cm4gbmV4dCBzaWJsaW5nIGVsZW1lbnQKLQkJcmV0dXJuIGZpbmROZXh0U2libGluZyhlbGVtZW50LmdldE5leHRTaWJsaW5nKCkpOwotCX0KLQotCS8qKgotCSAqIEZpbmQgdGhlIG5leHQgc2libGluZyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBzdGFydE5vZGUgWE1MIHN0YXJ0IG5vZGUuCi0JICogQHJldHVybiB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQuCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBFbGVtZW50IGZpbmROZXh0U2libGluZyhOb2RlIHN0YXJ0Tm9kZSkgewotCQlOb2RlIG5vZGUgPSBudWxsOwotCQlFbGVtZW50IHJldHVybkVsZW1lbnQgPSBudWxsOwotCi0JCS8vIEZpbmQgdGhlIG5leHQgc2libGluZyBlbGVtZW50Ci0JCWZvciAobm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAhPSBudWxsICYmIHJldHVybkVsZW1lbnQgPT0gbnVsbDsgbm9kZSA9IG5vZGUKLQkJCQkuZ2V0TmV4dFNpYmxpbmcoKSkKLQkJewotCQkJLy8gSWYgdGhpcyBub2RlIGlzIGFuIGVsZW1lbnQgbm9kZSwgdGhlbiByZXR1cm4gaXQKLQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0JCQl7Ci0JCQkJcmV0dXJuRWxlbWVudCA9IChFbGVtZW50KSBub2RlOwotCQkJfQotCQl9Ci0KLQkJLy8gUmV0dXJuIG5leHQgc2libGluZyBlbGVtZW50Ci0JCXJldHVybiAoRWxlbWVudCkgcmV0dXJuRWxlbWVudDsKLQl9Ci0KLQkvKioKLQkgKiBGaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHN0YXJ0Tm9kZSBYTUwgc3RhcnQgbm9kZS4KLQkgKiBAcmV0dXJuIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbGVtZW50IGZpbmRQcmV2aW91c1NpYmxpbmcoTm9kZSBzdGFydE5vZGUpIHsKLQkJaWYgKHN0YXJ0Tm9kZSA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJd2hpbGUgKHN0YXJ0Tm9kZSAhPSBudWxsKQotCQl7Ci0JCQlzdGFydE5vZGUgPSBzdGFydE5vZGUuZ2V0UHJldmlvdXNTaWJsaW5nKCk7Ci0JCQlpZiAoc3RhcnROb2RlID09IG51bGwpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQlpZiAoc3RhcnROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0JCQkJcmV0dXJuIChFbGVtZW50KSBzdGFydE5vZGU7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHRleHQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEByZXR1cm4gdGhlIHRleHQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRleHQoRWxlbWVudCBlbGVtZW50KSB7Ci0JCVN0cmluZyB0ZXh0ID0gbnVsbDsKLQotCQkvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotCQlOb2RlIG5vZGUgPSBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotCQkvLyBOb2RlTGlzdCBub2RlTGlzdCA9IGVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotCi0JCS8vIGludCBsZW5ndGggPSBub2RlTGlzdC5nZXRMZW5ndGgoKTsKLQotCQkvLyBQcm9jZXNzIHdoaWxlIHRoZXJlIGFyZSBub2RlcyBhbmQgdGhlIHRleHQgaGFzbid0IGJlZW4gZm91bmQKLQkJd2hpbGUgKChub2RlICE9IG51bGwpICYmICh0ZXh0ID09IG51bGwpKQotCQl7Ci0JCQkvLyBJZiBhIHRleHQgbm9kZSBvciBjZGF0YSBzZWN0aW9uIGlzIGZvdW5kLCB0aGVuIGdldCB0ZXh0Ci0JCQlpZiAoKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkKLQkJCQkJfHwgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERSkpCi0JCQl7Ci0JCQkJdGV4dCA9ICgoQ2hhcmFjdGVyRGF0YSkgbm9kZSkuZ2V0RGF0YSgpOwotCQkJfQotCi0JCQkvLyBHZXQgbmV4dCBzaWJsaW5nCi0JCQlub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOwotCQl9Ci0KLQkJaWYgKHRleHQgIT0gbnVsbCkKLQkJCXRleHQgPSB0ZXh0LnRyaW0oKTsKLQotCQlyZXR1cm4gdGV4dDsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmUgaWYgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSB0aGUgUU5hbWUuCi0JICogCi0JICogQHBhcmFtIHFuYW1lIGEgUU5hbWUgb2JqZWN0LgotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEByZXR1cm4gdHJ1ZSBpZiBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBRTmFtZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKFFOYW1lIHFuYW1lLCBFbGVtZW50IGVsZW1lbnQpIHsKLQkJYm9vbGVhbiBlcXVhbHMgPSBmYWxzZTsKLQotCQkvLyBJZiBib3RoIHRoZSBuYW1lc3BhY2UgVVJJIGFuZCBsb2NhbCBuYW1lIGFyZSB0aGUgc2FtZSwgdGhlbiB0aGV5IGFyZQotCQkvLyBlcXVhbAotCQlpZiAoKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLQkJCQkmJiAocW5hbWUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpKSkKLQkJewotCQkJZXF1YWxzID0gdHJ1ZTsKLQkJfQotCi0JCXJldHVybiBlcXVhbHM7Ci0JfQotCi0JLyoqCi0JICogWE1MIGVuY29kZSBhIHRleHQgc3RyaW5nLgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IC0gYSBTdHJpbmcuCi0JICogQHJldHVybiBhbiBYTUwgZW5jb2RlZCB0ZXh0IHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB4bWxFc2NhcGVkU3RyaW5nKFN0cmluZyB0ZXh0KSAKLQl7Ci0JICBpZiAodGV4dCA9PSBudWxsKSByZXR1cm4gdGV4dDsKLQkgIGVsc2UKLQkgIHsKLQkgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcih0ZXh0Lmxlbmd0aCgpKjIpOwotCSAgICBpbnQgc2l6ZSA9IHRleHQubGVuZ3RoKCk7Ci0JICAgIGZvciAoaW50IGk9MDsgaTxzaXplOyBpKyspCi0JICAgIHsKLQkgICAgICBjaGFyIGMgPSB0ZXh0LmNoYXJBdChpKTsKLQkgICAgICBzd2l0Y2ggKGMpCi0JCSAgewotICAgICAgICAgICAgIGNhc2UgJzwnOiAKLSAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiJmx0OyIpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSAnPic6IAotICAgICAgICAgICAgIAlzYi5hcHBlbmQoIiZndDsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlICcmJzogCi0gICAgICAgICAgICAgCXNiLmFwcGVuZCgiJmFtcDsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlICciJzogCi0gICAgICAgICAgICAgCXNiLmFwcGVuZCgiJnF1b3Q7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSAnXCcnOiAKLSAgICAgICAgICAgICAJc2IuYXBwZW5kKCImYXBvczsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlICdccic6IAotICAgICAgICAgICAgIAlzYi5hcHBlbmQoIiYjeGQ7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAJc2IuYXBwZW5kKGMpOwotCQkgIH0KLQkJfQotCSAgICByZXR1cm4gIHNiLnRvU3RyaW5nKCk7Ci0JICB9Ci0JfQotCi0JLyoqCi0JICogWE1MIGVuY29kZSBhIHRleHQgc3RyaW5nLgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IC0gYSBTdHJpbmcuCi0JICogQHJldHVybiBhbiBYTUwgZW5jb2RlZCB0ZXh0IHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB4bWxSZW1vdmVFc2NhcGVkU3RyaW5nKFN0cmluZyB0ZXh0KSAKLQl7Ci0JICBpZiAodGV4dCA9PSBudWxsKSByZXR1cm4gdGV4dDsKLQkgIGVsc2UKLQkgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcih0ZXh0KTsKLSAgICAgIAotCSAgICBpbnQgaSA9IHNiLmluZGV4T2YoIiYjeGQ7Iik7Ci0JICAgIHdoaWxlKGkgIT0gLTEpCi0JICAgIHsKLQkgICAgICBzYi5yZXBsYWNlKGksIGkrNSwgIlxyIik7Ci0JICAgICAgaSA9IHNiLmluZGV4T2YoIiYjeGQ7Iik7Ci0JICAgIH0KLQkgICAgCi0JICAgIGkgPSBzYi5pbmRleE9mKCImbHQ7Iik7Ci0JICAgIHdoaWxlKGkgIT0gLTEpCi0JICAgIHsKLQkgICAgICBzYi5yZXBsYWNlKGksIGkrNCwgIjwiKTsKLQkgICAgICBpID0gc2IuaW5kZXhPZigiJmx0OyIpOwotCSAgICB9Ci0KLQkgICAgaSA9IHNiLmluZGV4T2YoIiZndDsiKTsKLQkgICAgd2hpbGUoaSAhPSAtMSkKLQkgICAgewotCSAgICAgIHNiLnJlcGxhY2UoaSwgaSs0LCAiPiIpOwotCSAgICAgIGkgPSBzYi5pbmRleE9mKCImZ3Q7Iik7Ci0JICAgIH0KLQotCSAgICBpID0gc2IuaW5kZXhPZigiJnF1b3Q7Iik7Ci0JICAgIHdoaWxlKGkgIT0gLTEpCi0JICAgIHsKLQkgICAgICBzYi5yZXBsYWNlKGksIGkrNiwgIlwiIik7Ci0JICAgICAgaSA9IHNiLmluZGV4T2YoIiZxdW90OyIpOwotCSAgICB9Ci0KLQkgICAgaSA9IHNiLmluZGV4T2YoIiZhcG9zOyIpOwotCSAgICB3aGlsZShpICE9IC0xKQotCSAgICB7Ci0JICAgICAgc2IucmVwbGFjZShpLCBpKzYsICJcJyIpOwotCSAgICAgIGkgPSBzYi5pbmRleE9mKCImYXBvczsiKTsKLQkgICAgfQotCi0JICAgIGkgPSBzYi5pbmRleE9mKCImYW1wOyIpOwotCSAgICB3aGlsZShpICE9IC0xKQotCSAgICB7Ci0JICAgICAgc2IucmVwbGFjZShpLCBpKzUsICImIik7Ci0JICAgICAgaSA9IHNiLmluZGV4T2YoIiZhbXA7Iik7Ci0JICAgIH0KLSAJICAgIHJldHVybiAgc2IudG9TdHJpbmcoKTsKLQkgIH0KLQl9Ci0JLyoqCi0JICogR2V0IHRoZSBzcGVjaWZpZWQgZWxlbWVudCBmcm9tIGEgcGFyZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnROYW1lIHRoZSBlbGVtZW50IHRhZyB0byBzZXJhY2ggZm9yLgotCSAqIEBwYXJhbSBwYXJlbnRFbGVtZW50IHRoZSBwYXJlbnQgZWxlbWVudC4KLQkgKiBAcmV0dXJuIGFuIGVsZW1lbnQgZ2l2ZW4gdGhlIG5hbWUgYW5kIHRoZSBwYXJlbnQgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEVsZW1lbnQgZ2V0RWxlbWVudChTdHJpbmcgZWxlbWVudE5hbWUsIEVsZW1lbnQgcGFyZW50RWxlbWVudCkgewotCQlFbGVtZW50IHJldHVybkVsZW1lbnQgPSBudWxsOwotCQlOb2RlTGlzdCBubDsKLQotCQkvLyBHZXQgdGhlIGxpc3Qgb2YgZWxlbWVudHMKLQkJaWYgKChubCA9IHBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZWxlbWVudE5hbWUpKSAhPSBudWxsKQotCQl7Ci0JCQkvLyBSZXR1cm4gZmlyc3QgZWxlbWVudCBmb3VuZAotCQkJcmV0dXJuRWxlbWVudCA9IChFbGVtZW50KSBubC5pdGVtKDApOwotCQl9Ci0KLQkJLy8gUmV0dXJuIGVsZW1lbnQKLQkJcmV0dXJuIHJldHVybkVsZW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBzcGVjaWZpZWQKLQkgKiBuYW1lc3BhY2UuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIG5hbWVzcGFjZVVSSSBhIG5hbWVzcGFjZS4KLQkgKiBAcGFyYW0gbG9jYWxOYW1lIGEgbG9jYWwgbmFtZS4KLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBlbGVtZW50IG1hdGNoZXMgc3BlY2lmaWVkIGxvY2FsIG5hbWUgaW4gdGhlIHNwZWNpZmllZAotCSAqICAgICAgICAgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZXNwYWNlVVJJLAotCQkJU3RyaW5nIGxvY2FsTmFtZSkgewotCQlib29sZWFuIGlzRWxlbWVudCA9IGZhbHNlOwotCi0JCWlmIChlbGVtZW50ICE9IG51bGwpCi0JCXsKLQkJCS8vIENoZWNrIGlzCi0JCQlpZiAoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMobmFtZXNwYWNlVVJJKQotCQkJCQkmJiBlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhsb2NhbE5hbWUpKQotCQkJewotCQkJCWlzRWxlbWVudCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gaXNFbGVtZW50OwotCX0KLQotCS8qKgotCSAqIERldGVybWluZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgc3BlY2lmaWVkCi0JICogbmFtZXNwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSBuYW1lc3BhY2VVUklzIGEgbGlzdCBvZiB2YWxpZCBuYW1lc3BhY2VzLgotCSAqIEBwYXJhbSBsb2NhbE5hbWUgYSBsb2NhbCBuYW1lLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgc3BlY2lmaWVkCi0JICogICAgICAgICBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRWxlbWVudChFbGVtZW50IGVsZW1lbnQsIExpc3QgbmFtZXNwYWNlVVJJcywKLQkJCVN0cmluZyBsb2NhbE5hbWUpIHsKLQkJYm9vbGVhbiBpc0VsZW1lbnQgPSBmYWxzZTsKLQotCQlpZiAoZWxlbWVudCAhPSBudWxsKQotCQl7Ci0JCQkvLyBDaGVjayBpcwotCQkJaWYgKG5hbWVzcGFjZVVSSXMuY29udGFpbnMoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSkKLQkJCQkJJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobG9jYWxOYW1lKSkKLQkJCXsKLQkJCQlpc0VsZW1lbnQgPSB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGlzRWxlbWVudDsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgZWxlbWVudCB0ZXh0IGFzIGEgYm9vbGVhbi4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIGEgYm9vbGVhbiB0byBiZSB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZS4KLQkgKiBAcmV0dXJuIGVsZW1lbnQgdGV4dCBhcyBhIGJvb2xlYW4gdmFsdWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGdldEJvb2xlYW5WYWx1ZShFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7Ci0JCWJvb2xlYW4gcmV0dXJuVmFsdWUgPSBkZWZhdWx0VmFsdWU7Ci0JCVN0cmluZyBib29sZWFuVmFsdWUgPSBudWxsOwotCi0JCS8vIEdldCB2YWx1ZSBhcyBhIHN0cmluZwotCQlpZiAoKGJvb2xlYW5WYWx1ZSA9IFhNTFV0aWxzLmdldFRleHQoZWxlbWVudCkpICE9IG51bGwpCi0JCXsKLQkJCXJldHVyblZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKGJvb2xlYW5WYWx1ZSkuYm9vbGVhblZhbHVlKCk7Ci0JCX0KLQotCQkvLyBSZXR1cm4gYm9vbGVhbgotCQlyZXR1cm4gcmV0dXJuVmFsdWU7Ci0JfQotCi0JLyoqCi0JICogR2V0IGF0dHJpYnV0ZSB2YWx1ZSBhcyBhIGJvb2xlYW4uCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIGF0dHJOYW1lIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUuCi0JICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBhIGJvb2xlYW4gdG8gYmUgdXNlZCBhcyBhIGRlZmF1bHQgdmFsdWUuCi0JICogQHJldHVybiBhdHRyaWJ1dGUgdmFsdWUgYXMgYSBib29sZWFuLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRCb29sZWFuVmFsdWUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0ck5hbWUsCi0JCQlib29sZWFuIGRlZmF1bHRWYWx1ZSkgewotCQlib29sZWFuIHJldHVyblZhbHVlID0gZGVmYXVsdFZhbHVlOwotCQlTdHJpbmcgYm9vbGVhblZhbHVlID0gbnVsbDsKLQotCQkvLyBHZXQgdmFsdWUgYXMgYSBzdHJpbmcKLQkJaWYgKChib29sZWFuVmFsdWUgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBhdHRyTmFtZSkpICE9IG51bGwpCi0JCXsKLQkJCXJldHVyblZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKGJvb2xlYW5WYWx1ZSkuYm9vbGVhblZhbHVlKCk7Ci0JCX0KLQotCQkvLyBSZXR1cm4gYm9vbGVhbgotCQlyZXR1cm4gcmV0dXJuVmFsdWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIFFOYW1lLgotCSAqIAotCSAqIEBwYXJhbSBxbmFtZVN0cmluZyBhIHF1YWxpZmllZCBuYW1lLgotCSAqIEByZXR1cm4gYSBRTmFtZSBvYmplY3QuCi0JICovCi0JcHVibGljIHN0YXRpYyBRTmFtZSBjcmVhdGVRTmFtZShTdHJpbmcgcW5hbWVTdHJpbmcpIHsKLQkJUU5hbWUgcW5hbWUgPSBudWxsOwotCi0JCS8vIExvY2F0ZSBsb2NhbCBwYXJ0Ci0JCWludCBpbmRleCA9IHFuYW1lU3RyaW5nLmxhc3RJbmRleE9mKCI6Iik7Ci0KLQkJLy8gQ3JlYXRlIG5ldyBRTmFtZQotCQlpZiAoaW5kZXggIT0gLTEpCi0JCXsKLQkJCXFuYW1lID0gbmV3IFFOYW1lKHFuYW1lU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCksIHFuYW1lU3RyaW5nCi0JCQkJCS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Ci0JCX0KLQotCQllbHNlCi0JCXsKLQkJCXFuYW1lID0gbmV3IFFOYW1lKHFuYW1lU3RyaW5nKTsKLQkJfQotCi0JCXJldHVybiBxbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBFcnJvciBIYW5kbGVyCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRXJySGFuZGxlciBpbXBsZW1lbnRzIEVycm9ySGFuZGxlcgotCXsKLQkJLyoqCi0JCSAqIFdhcm5pbmcKLQkJICovCi0JCXB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIldhcm5pbmc6ICIgKyBzcGUuZ2V0TWVzc2FnZSgpOwotCQkJdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbihtZXNzYWdlKTsKLQkJfQotCi0JCS8qKgotCQkgKiBFcnJvcgotCQkgKi8KLQkJcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIkVycm9yOiAiICsgc3BlLmdldE1lc3NhZ2UoKTsKLQkJCXRocm93IG5ldyBTQVhFeGNlcHRpb24obWVzc2FnZSk7Ci0JCX0KLQotCQkvKioKLQkJICogRmF0YWwgRXJyb3IKLQkJICovCi0JCXB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIkZhdGFsIEVycm9yOiAiICsgc3BlLmdldE1lc3NhZ2UoKTsKLQkJCXRocm93IG5ldyBTQVhFeGNlcHRpb24obWVzc2FnZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmUgaWYgdGhlIHN0cmluZyBpcyBhIE5NVE9LRU4gZGF0YSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IGEgc3RyaW5nIHZhbHVlLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgTk1UT0tFTiBkYXRhIHR5cGUuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm10b2tlbihTdHJpbmcgdGV4dCkgewotCQlib29sZWFuIG5tdG9rZW4gPSB0cnVlOwotCi0JCS8vIEFERDogTmVlZCB0byBmaW5kIGEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhpcyBvciB3cml0ZSBpdCBmcm9tCi0JCS8vIHNjcmF0Y2gKLQotCQlyZXR1cm4gbm10b2tlbjsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHNlYXJjaGVzIHRoZSBmaXJzdCBkaXJlY3QgZGVzY2VuZGFudCBlbGVtZW50IHdpdGggdGhlIGdpdmVuCi0JICogcW5hbWUuCi0JICogCi0JICogQHBhcmFtIHBhcmVudCBwYXJlbnQgRE9NIGVsZW1lbnQuCi0JICogQHBhcmFtIGVsZW1lbnROYW1lIFFOYW1lIG9mIHRoZSBlbGVtZW50IHRvIGJlIHNlYXJjaGVkLgotCSAqIEByZXR1cm4gRE9NIGVsZW1lbnQgaWYgdGhlIHJlcXVpcmVkIGVsZW1lbnQgZm91bmQsIGFuZCBudWxsIG90aGVyd2lzZS4KLQkgKi8KLQlzdGF0aWMgcHVibGljIEVsZW1lbnQgZmluZENoaWxkRWxlbWVudChFbGVtZW50IHBhcmVudCwgUU5hbWUgZWxlbWVudE5hbWUpIHsKLQkJaWYgKHBhcmVudCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUGFyZW50IGVsZW1lbnQgY2FuIG5vdCBiZSBOVUxMIik7Ci0JCWlmIChlbGVtZW50TmFtZSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCQlpZiAoZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCkgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0JCQkJCSJMb2NhbCBwYXJ0IG9mIHRoZSBlbGVtZW50IG5hbWUgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLQkJTm9kZSBuID0gcGFyZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJU3RyaW5nIGxvY2FsID0gZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0JCVN0cmluZyBucyA9IGVsZW1lbnROYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCQl3aGlsZSAobiAhPSBudWxsKQotCQl7Ci0JCQlpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpCi0JCQkJCSYmIGxvY2FsLmVxdWFscyhuLmdldExvY2FsTmFtZSgpKQotCQkJCQkmJiBOdWxsVXRpbC5lcXVhbHMobnMsIG4uZ2V0TmFtZXNwYWNlVVJJKCkpKQotCQkJCXJldHVybiAoRWxlbWVudCkgbjsKLQkJCW4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHNlYXJjaGVzIHRoZSBmaXJzdCBzaWJsaW5nIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gcW5hbWUuCi0JICogCi0JICogQHBhcmFtIGFjdGl2ZSBET00gZWxlbWVudC4KLQkgKiBAcGFyYW0gZWxlbWVudE5hbWUgUU5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gYmUgc2VhcmNoZWQuCi0JICogQHJldHVybiBET00gZWxlbWVudCBpZiB0aGUgcmVxdWlyZWQgZWxlbWVudCBmb3VuZCwgYW5kIG51bGwgb3RoZXJ3aXNlLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgRWxlbWVudCBmaW5kRWxlbWVudChFbGVtZW50IGFjdGl2ZSwgUU5hbWUgZWxlbWVudE5hbWUpIHsKLQkJaWYgKGFjdGl2ZSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQWN0aXZlIGVsZW1lbnQgY2FuIG5vdCBiZSBOVUxMIik7Ci0JCWlmIChlbGVtZW50TmFtZSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCQlpZiAoZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCkgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0JCQkJCSJMb2NhbCBwYXJ0IG9mIHRoZSBlbGVtZW50IG5hbWUgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLQkJTm9kZSBuID0gYWN0aXZlLmdldE5leHRTaWJsaW5nKCk7Ci0JCVN0cmluZyBsb2NhbCA9IGVsZW1lbnROYW1lLmdldExvY2FsUGFydCgpOwotCQlTdHJpbmcgbnMgPSBlbGVtZW50TmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJd2hpbGUgKG4gIT0gbnVsbCkKLQkJewotCQkJaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKQotCQkJCQkmJiBsb2NhbC5lcXVhbHMobi5nZXRMb2NhbE5hbWUoKSkKLQkJCQkJJiYgTnVsbFV0aWwuZXF1YWxzKG5zLCBuLmdldE5hbWVzcGFjZVVSSSgpKSkKLQkJCQlyZXR1cm4gKEVsZW1lbnQpIG47Ci0JCQluID0gbi5nZXROZXh0U2libGluZygpOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVGhlIG1ldGhvZCByZXR1cm5zIGF0dHJpYnV0ZSBub2RlIGJ5IHRoZSBnaXZlbiBxbmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gZWwgb3duZXIgZWxlbWVudC4KLQkgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBRTmFtZSBvZiB0aGUgYXR0cmlidXRlIG5vZGUgdG8gYmUgc2VhcmNoZWQuCi0JICogQHJldHVybiBhdHRyaWJ1dGUgbm9kZSBieSB0aGUgZ2l2ZW4gcW5hbWUuCi0JICovCi0Jc3RhdGljIHB1YmxpYyBBdHRyIGdldEF0dHJpYnV0ZShFbGVtZW50IGVsLCBRTmFtZSBhdHRyaWJ1dGVOYW1lKSB7Ci0JCWlmIChlbCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBjYW4gbm90IGJlIE5VTEwiKTsKLQkJaWYgKGF0dHJpYnV0ZU5hbWUgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkF0dHJpYnV0ZSBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCQlTdHJpbmcgbnNVUkkgPSBhdHRyaWJ1dGVOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCQlTdHJpbmcgbG9jYWxQYXJ0ID0gYXR0cmlidXRlTmFtZS5nZXRMb2NhbFBhcnQoKTsKLQkJaWYgKGxvY2FsUGFydCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLQkJCQkJIkxvY2FsIHBhcnQgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCi0JCUF0dHIgYSA9IGVsLmdldEF0dHJpYnV0ZU5vZGVOUyhuc1VSSSwKLQkJCQlsb2NhbFBhcnQpOwotCQlpZiAoYSA9PSBudWxsKQotCQkJLy8gdHJ5IHRvIGdldCB3aXRoIG51bGwgbmFtZXNwYWNlCi0JCQlhID0gZWwuZ2V0QXR0cmlidXRlTm9kZU5TKG51bGwsIGxvY2FsUGFydCk7Ci0JCXJldHVybiBhOwotCX0KLQotCS8qKgotCSAqIFRoZSBtZXRob2QgY29tcGFyZXMgbm9kZSdzIG5hbWUgdG8gdGhlIGdpdmVuIHFuYW1lLgotCSAqIAotCSAqIEBwYXJhbSBuIGEgbm9kZS4KLQkgKiBAcGFyYW0gbmFtZSBhIFFOYW1lIG9iamVjdC4KLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG5vZGUncyBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBnaXZlbiBxbmFtZS4KLQkgKi8KLQlzdGF0aWMgcHVibGljIGJvb2xlYW4gZXF1YWxzKE5vZGUgbiwgUU5hbWUgbmFtZSkgewotCQlpZiAobiA9PSBudWxsIHx8IG5hbWUgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJcmV0dXJuIChOdWxsVXRpbC5lcXVhbHMobmFtZS5nZXRMb2NhbFBhcnQoKSwgbi5nZXRMb2NhbE5hbWUoKSkgJiYgTnVsbFV0aWwKLQkJCQkuZXF1YWxzKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIG4uZ2V0TmFtZXNwYWNlVVJJKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHNlYXJjaGVzIG5hbWVzcGFjZSBVUkkgZm9yIHRoZSBnaXZlbiBwcmVmaXguIFRoZSBzZWFyY2hpbmcKLQkgKiBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSAiWE1MIE5hbWVzcGFjZXMgcmVzb2x1dGlvbiIKLQkgKiBhbGdvcml0aG0gKCdodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLQotCSAqIENvcmUtMjAwMzAyMjYvbmFtZXNwYWNlcy1hbGdvcml0aG1zLmh0bWwnKS4KLQkgKiAKLQkgKiBAcGFyYW0gbiBhIG5vZGUuCi0JICogQHBhcmFtIHByZWZpeCBhIHByZWZpeC4KLQkgKiBAcmV0dXJuIHRoZSBuYW1lc3BhY2UgVVJJIGZvciB0aGUgZ2l2ZW4gcHJlZml4LgotCSAqLwotCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGZpbmROYW1lc3BhY2VVUkkoTm9kZSBuLCBTdHJpbmcgcHJlZml4KSB7Ci0JCWlmIChwcmVmaXggPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXdoaWxlIChuICE9IG51bGwpCi0JCXsKLQkJCWlmIChwcmVmaXguZXF1YWxzKG4uZ2V0UHJlZml4KCkpKQotCQkJCXJldHVybiBuLmdldE5hbWVzcGFjZVVSSSgpOwotCi0JCQlpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotCQkJewotCQkJCU5hbWVkTm9kZU1hcCBtID0gbi5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQkJaWYgKG0gIT0gbnVsbCkKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtLmdldExlbmd0aCgpOyBpKyspCi0JCQkJCXsKLQkJCQkJCU5vZGUgYSA9IG0uaXRlbShpKTsKLQkJCQkJCWlmIChXU0lUYWcuTlNfVVJJX1hNTE5TLmVxdWFscyhhLmdldE5hbWVzcGFjZVVSSSgpKQotCQkJCQkJCQkmJiBwcmVmaXguZXF1YWxzKGEuZ2V0TG9jYWxOYW1lKCkpKQotCQkJCQkJCXJldHVybiBhLmdldE5vZGVWYWx1ZSgpOwotCQkJCQl9Ci0JCQl9Ci0KLQkJCW4gPSBuLmdldFBhcmVudE5vZGUoKTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFNlcmlhbGl6ZXMgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gbiBhIERPTSBlbGVtZW50LgotCSAqIEByZXR1cm4gdGhlIHNlcmlhbGl6ZWQgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBzZXJpYWxpemUoRWxlbWVudCBuKSB7Ci0JCVN0cmluZyB2YWx1ZSA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmdXcml0ZXIgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJWE1MU2VyaWFsaXplciBzID0gbmV3IFhNTFNlcmlhbGl6ZXIod3JpdGVyLCBuZXcgT3V0cHV0Rm9ybWF0KCJ4bWwiLAotCQkJCQkiVVRGLTgiLCB0cnVlKSk7Ci0JCQlzLnNlcmlhbGl6ZShuKTsKLQkJCXZhbHVlID0gd3JpdGVyLnRvU3RyaW5nKCk7Ci0JCQl3cml0ZXIuY2xvc2UoKTsKLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpCi0JCXsKLQkJCS8vIG5vdGhpbmcKLQkJCXZhbHVlID0gIkVYQ0VQVElPTiA6ICIgKyB0LmdldE1lc3NhZ2UoKTsKLQkJfQotCi0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHJldHVybiBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBwYXJlbnQgYW4gb3JnLnczYy5kb20uRWxlbWVudCBvYmplY3QuCi0JICogQHJldHVybiBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgVmVjdG9yIGdldENoaWxkRWxlbWVudHMoRWxlbWVudCBwYXJlbnQpIHsKLQkJaWYgKHBhcmVudCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBjYW4gbm90IGJlIE5VTEwiKTsKLQotCQlWZWN0b3IgdmVjdCA9IG5ldyBWZWN0b3IoKTsKLQkJRWxlbWVudCBlbGVtID0gZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotCQl3aGlsZSAoZWxlbSAhPSBudWxsKQotCQl7Ci0JCQl2ZWN0LmFkZChlbGVtKTsKLQkJCWVsZW0gPSBnZXROZXh0U2libGluZyhlbGVtKTsKLQkJfQotCQlyZXR1cm4gdmVjdDsKLQl9Ci0KLQkvKioKLQkgKiBTZXJpYWxpemVzIGRvY3VtZW50LgotCSAqIAotCSAqIEBwYXJhbSBkb2MgYW4gb3JnLnczYy5kb20uRG9jdW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSB3cml0ZXIgYSBqYXZhLmlvLldyaXRlciBvYmplY3QuCi0JICogQHRocm93cyBFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHNlcmlhbGl6ZSB0aGUgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZURvYyhEb2N1bWVudCBkb2MsIFdyaXRlciB3cml0ZXIpCi0JCQl0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7Ci0JCVhNTFNlcmlhbGl6ZXIgcyA9IG5ldyBYTUxTZXJpYWxpemVyKHdyaXRlciwgbmV3IE91dHB1dEZvcm1hdCgieG1sIiwKLQkJCQkiVVRGLTgiLCB0cnVlKSk7Ci0JCXMuc2VyaWFsaXplKGRvYyk7Ci0JfQotCi0JLyoqCi0JICogU2VyZWFsaXplcyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtIGFuIG9yZy53M2MuZG9tLkVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSB3cml0ZXIgYSBqYXZhLmlvLldyaXRlciBvYmplY3QuCi0JICogQHRocm93cyBFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHNlcmlhbGl6ZSB0aGUgRE9NIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUVsZW1lbnQoRWxlbWVudCBlbGVtLCBXcml0ZXIgd3JpdGVyKQotCQkJdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewotCQlYTUxTZXJpYWxpemVyIHMgPSBuZXcgWE1MU2VyaWFsaXplcih3cml0ZXIsIG5ldyBPdXRwdXRGb3JtYXQoInhtbCIsCi0JCQkJIlVURi04IiwgdHJ1ZSkpOwotCQlzLnNlcmlhbGl6ZShlbGVtKTsKLQl9Ci0KLQkvKioKLQkgKiBSZW1vdmUgYWxsIGVsZW1lbnRzIGZyb20gbGlzdCB3aXRob3V0IG5hbWVzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gdmVjdCBhIGxpc3Qgb2YgZWxlbWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZUFsbEVsZW1lbnRzV2l0aG91dE5TKFZlY3RvciB2ZWN0KSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdmVjdC5zaXplKCk7KQotCQl7Ci0JCQlpZiAoKChFbGVtZW50KSB2ZWN0LmdldChpKSkuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbAotCQkJCQl8fCAoKEVsZW1lbnQpIHZlY3QuZ2V0KGkpKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoIiIpKQotCQkJCXZlY3QucmVtb3ZlKGkpOwotCQkJZWxzZQotCQkJCWkrKzsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBVUkwgdXNpbmcgYmFzZSBVUkkuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFVSTCBzdHJpbmcuCi0JICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCBzdHJpbmcgdG8gYXNzaXN0IGluIGNyZWF0aW5nIGEgVVJMLgotCSAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBVUkwuCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24gaWYgYSBtYWxmb3JtZWQgVVJMIGhhcyBvY2N1cnJlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFVSTCBjcmVhdGVVUkwoU3RyaW5nIHVybCwgU3RyaW5nIGJhc2VVUkkpCi0JCQl0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIHsKLQkJVVJMIHJldHVyblVSTCA9IG51bGw7Ci0JCVVSSSB1cmkgPSBudWxsOwotCQl0cnkKLQkJewotICAgICAgICAgICAgcmV0dXJuVVJMID0gbmV3IFVSTCh1cmwpOwotCQkJdXJpID0gbmV3IFVSSSh1cmwpOwotCQkJdXJpID0gdXJpLm5vcm1hbGl6ZSgpOwotCQkJcmV0dXJuVVJMID0gIG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpOwotCQl9Ci0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBtdWUpCi0JCXsKLQkJCWludCBpID0gYmFzZVVSSS5sYXN0SW5kZXhPZignLycpOwotCQkJaW50IGogPSBiYXNlVVJJLmxhc3RJbmRleE9mKCdcXCcpOwotCQkJaWYgKGogPiBpKQotCQkJCWkgPSBqOwotCQkJdHJ5Ci0JCQl7Ci0JCQkgIHVyaSA9IG5ldyBVUkkoYmFzZVVSSS5zdWJzdHJpbmcoMCwgaSArIDEpICsgdXJsKTsKLQkJCSAgdXJpID0gdXJpLm5vcm1hbGl6ZSgpOwotCQkJICByZXR1cm5VUkwgPSB1cmkudG9VUkwoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJCXsKLQkJCSAgcmV0dXJuIG5ldyBVUkwoYmFzZVVSSS5zdWJzdHJpbmcoMCwgaSArIDEpICsgdXJsKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmV0dXJuVVJMOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBVUkwgdXNpbmcgYmFzZSBVUkkuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFVSTCBzdHJpbmcuCi0JICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCBzdHJpbmcgdG8gYXNzaXN0IGluIGNyZWF0aW5nIGEgVVJMLgotCSAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBVUkwgc3RyaW5nLgotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGlmIGEgbWFsZm9ybWVkIFVSTCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlVVJMU3RyaW5nKFN0cmluZyB1cmwsIFN0cmluZyBiYXNlVVJJKQotCQkJdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiB7Ci0JCXJldHVybiBjcmVhdGVVUkwodXJsLCBiYXNlVVJJKS50b0V4dGVybmFsRm9ybSgpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgb25seSBmb3IgdW5pdCB0ZXN0aW5nLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzIGFyZ3VtZW50cyBmb3IgbWFpbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCXRyeQotCQl7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJGaWxlbmFtZTogIiArIGFyZ3NbMF0gKyAiLCBzY2hlbWE6ICIgKyBhcmdzWzFdKTsKLQkJICBwYXJzZVhNTERvY3VtZW50KGFyZ3NbMF0sIGFyZ3NbMV0pOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZS4iKTsKLQkJfQotCi0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJU3lzdGVtLmVyci5wcmludGxuKGUudG9TdHJpbmcoKSk7Ci0JCX0KLQotCQlTeXN0ZW0uZXhpdCgwKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM5ZWEzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkNEQVRBU2VjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Db21tZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50VHlwZTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVudGl0eTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbnRpdHlSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vdGF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi0vKioKLSAqIFdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBub2RlIHNvdXJjZSBjb2RlLCBzbyB0aGlzIGRvZXMKLSAqIG91ciBkb3VibGUtZGlzcGF0Y2ggdGhlIGhhcmQgd2F5LgotICovCi1wdWJsaWMgY2xhc3MgWE1MVmlzaXRvcgotewotICAvKioKLSAgKiBWaXNpdCBYTUwgQ0RBVEFTZWN0aW9uIG5vZGUuCi0gICogQHBhcmFtIHMgIGFuIFhNTCBDREFUQVNlY3Rpb24gbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQ0RBVEFTZWN0aW9uIHMpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBEb2N1bWVudCBub2RlLgotICAqIEBwYXJhbSBlICBhbiBYTUwgRG9jdW1lbnQgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRG9jdW1lbnQgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogVmlzaXQgWE1MIERvY3VtZW50VHlwZSBub2RlLgotICAqIEBwYXJhbSBlICBhbiBNTCBEb2N1bWVudFR5cGUgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRG9jdW1lbnRUeXBlIGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBBdHRyaWJ1dGUgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gWE1MIEF0cnJpYnV0ZSBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChBdHRyIGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBFbGVtZW50IG5vZGUuCi0gICogQHBhcmFtIGUgIGFuIFhNTCBFbGVtZW50IG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVsZW1lbnQgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogVmlzaXQgWE1MIENvbW1lbnQgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gWE1MIENvbW1lbnQgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQ29tbWVudCBlKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIFRleHQgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gWE1MIFRleHQgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoVGV4dCBlKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIEVudGl0eVJlZmVyZW5jZSBub2RlLiAKLSAgKiBAcGFyYW0gZSAgYW4gWE1MIEVudGl0eVJlZmVyZW5jZSBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChFbnRpdHlSZWZlcmVuY2UgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFZpc2l0IFhNTCBFbnRpdHkgbm9kZS4gCi0gICogQHBhcmFtIGUgIGFuIFhNTCBFbnRpdHkgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRW50aXR5IGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBWaXNpdCBYTUwgTm90YXRpb24gbm9kZS4gCi0gICogQHBhcmFtIG4gIGFuIFhNTCBOb3RhdGlvbiBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChOb3RhdGlvbiBuKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBub2RlLiAKLSAgKiBAcGFyYW0gaSAgYW4gWE1MIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gaSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFZpc2l0IFhNTCBOYW1lZE5vZGVNYXAgbm9kZS4gCi0gICogQHBhcmFtIGkgIGFuIFhNTCBOYW1lZE5vZGVNYXAgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTmFtZWROb2RlTWFwIGkpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBWaXNpdCBYTUwgbm9kZS4gCi0gICogQHBhcmFtIG5vZGUgIGFuIFhNTCBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCBkb1Zpc2l0KE9iamVjdCBub2RlKQotICB7Ci0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgIHsKLSAgICAgIHZpc2l0KChFbGVtZW50KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIENvbW1lbnQpCi0gICAgewotICAgICAgdmlzaXQoKENvbW1lbnQpIG5vZGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQ0RBVEFTZWN0aW9uKQotICAgIHsKLSAgICAgIC8vIENEQVRBU2VjdGlvbiBleHRlbmRzIFRleHQsIHNvIGl0IG11c3QgY29tZSBmaXJzdAotICAgICAgdmlzaXQoKENEQVRBU2VjdGlvbikgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBUZXh0KQotICAgIHsKLSAgICAgIHZpc2l0KChUZXh0KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0gICAgewotICAgICAgdmlzaXQoKEF0dHIpIG5vZGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQpCi0gICAgewotICAgICAgdmlzaXQoKERvY3VtZW50KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEVudGl0eVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICB2aXNpdCgoRW50aXR5UmVmZXJlbmNlKSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEVudGl0eSkKLSAgICB7Ci0gICAgICB2aXNpdCgoRW50aXR5KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIERvY3VtZW50VHlwZSkKLSAgICB7Ci0gICAgICB2aXNpdCgoRG9jdW1lbnRUeXBlKSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIE5vdGF0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0KChOb3RhdGlvbikgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCi0gICAgewotICAgICAgdmlzaXQoKFByb2Nlc3NpbmdJbnN0cnVjdGlvbikgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApCi0gICAgewotICAgICAgdmlzaXQoKE5hbWVkTm9kZU1hcCkgbm9kZSk7Ci0gICAgfQotICB9Ci19Ci0KLS8vIEVORCBPRiBGSUxFCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0RPTVBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2RvbS9ET01QYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVlMDM2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0RPTVBhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb207Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxMb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHNwZWNpYWxpemVzIG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgRE9NUGFyc2VyIGV4dGVuZHMgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXIKLXsKLSAgLyoqCi0gICAqIExvY2F0b3IuCi0gICAqLwotICBYTUxMb2NhdG9yIGxvY2F0b3IgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MRG9jdW1lbnRIYW5kbGVyI3N0YXJ0RG9jdW1lbnQob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTExvY2F0b3IsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5OYW1lc3BhY2VDb250ZXh0LCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuQXVnbWVudGF0aW9ucykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoCi0gICAgWE1MTG9jYXRvciBsb2NhdG9yLAotICAgIFN0cmluZyBlbmNvZGluZywKLSAgICBOYW1lc3BhY2VDb250ZXh0IGNvbnRleHQsCi0gICAgQXVnbWVudGF0aW9ucyBhdWdzKQotICAgIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIHRoaXMubG9jYXRvciA9IGxvY2F0b3I7Ci0gICAgc3VwZXIuc3RhcnREb2N1bWVudChsb2NhdG9yLCBlbmNvZGluZywgY29udGV4dCwgYXVncyk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTERvY3VtZW50SGFuZGxlciNzdGFydEVsZW1lbnQob3JnLmFwYWNoZS54ZXJjZXMueG5pLlFOYW1lLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MQXR0cmlidXRlcywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnMpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoCi0gICAgUU5hbWUgcW5hbWUsCi0gICAgWE1MQXR0cmlidXRlcyBhdHRyaWJ1dGVzLAotICAgIEF1Z21lbnRhdGlvbnMgYXVncykKLSAgICB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQ7Ci0gICAgRWxlbWVudEltcGwgZWxlbWVudEltcGw7Ci0KLSAgICAvLyBERUJVRzoKLSAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiMS1saW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsKLQotICAgIHN1cGVyLnN0YXJ0RWxlbWVudChxbmFtZSwgYXR0cmlidXRlcywgYXVncyk7Ci0KLSAgICAvLyBERUJVRzoKLSAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiMi1saW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsgICAgCi0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBlbGVtZW50ID0gKEVsZW1lbnQpIGdldFByb3BlcnR5KENVUlJFTlRfRUxFTUVOVF9OT0RFKTsKLQotICAgICAgZWxlbWVudEltcGwgPSAoRWxlbWVudEltcGwpIGVsZW1lbnQ7Ci0gICAgICAvLyBTZXR0aW5nIHRoZSB1c2VyIGRhdGEgd2l0aCBhbiBpZGVudGlmaWVyIHN1Y2ggYXMgRWxlbWVudExvY2F0aW9uLktFWV9OQU1FCi0gICAgICAvLyBtYXkgYmUgYSBsb25nIHRlcm0gZ29vZCBpZGVhLiBUaGUgc2V0VXNlckRhdGEgbWV0aG9kIHdpdGggbm8gaWQgaXMgdXNlZCAKLSAgICAgIC8vIHRvIHN1cHBvcnQgSlZNcyB3aXRoIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiBYZXJjZXMuCi0gICAgICBlbGVtZW50SW1wbC5zZXRVc2VyRGF0YShuZXcgRWxlbWVudExvY2F0aW9uKGxvY2F0b3IuZ2V0TGluZU51bWJlcigpLCBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKSk7Ci0gICAgfQotICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBzbnNlKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oc25zZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gc25yZSkKLSAgICB7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0VsZW1lbnRMb2NhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2RvbS9FbGVtZW50TG9jYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5MDUzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0VsZW1lbnRMb2NhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb207Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy54bWwuc2F4LkxvY2F0b3I7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIGEgbm9kZSB3aXRoaW4gYW4gWE1MIGRvY3VtZW50LgotICogIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVsZW1lbnRMb2NhdGlvbgotewotICAvKioKLSAgICogTGluZSBudW1iZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfTkFNRSA9IEVsZW1lbnRMb2NhdGlvbi5jbGFzcy5nZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIExpbmUgbnVtYmVyLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBsaW5lTnVtYmVyID0gMDsKLQotICAvKioKLSAgICogQ29sdW1uIG51bWJlci4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgY29sdW1uTnVtYmVyID0gMDsKLQotICAvKioKLSAgICogRWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxpbmVOdW1iZXIgICAgYSBsaW5lIG51bWJlci4KLSAgICogQHBhcmFtIGNvbHVtbk51bWJlciAgYSBjb2x1bW4gbnVtYmVyLgotICAgKi8KLSAgcHVibGljIEVsZW1lbnRMb2NhdGlvbihpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcikKLSAgewotICAgIHRoaXMubGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgdGhpcy5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Ci0gIH0KLQotICAvKioKLSAgICogRWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxvY2F0b3IgIGEgTG9jYXRvciBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uKExvY2F0b3IgbG9jYXRvcikKLSAgewotICAgIHRoaXMubGluZU51bWJlciA9IGxvY2F0b3IuZ2V0TGluZU51bWJlcigpOwotICAgIHRoaXMuY29sdW1uTnVtYmVyID0gbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGxpbmUgbnVtYmVyLgotICAgKiBAcmV0dXJuIGFuIGludCByZXByZXNlbnRpbmcgdGhlIGxpbmUgbnVtYmVyIHZhbHVlLgotICAgKi8KLSAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkKLSAgewotICAgIHJldHVybiB0aGlzLmxpbmVOdW1iZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBjb2x1bW4gbnVtYmVyLgotICAgKiBAcmV0dXJuIGFuIGludCByZXByZXNlbnRpbmcgdGhlIGNvbHVtbiBudW1iZXIgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbk51bWJlcigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5jb2x1bW5OdW1iZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuICJFbGVtZW50IExvY2F0aW9uOlxuIgotICAgICAgKyAiICAiCi0gICAgICArIFdTSUNvbnN0YW50cy5BVFRSX0xJTkVfTlVNQkVSCi0gICAgICArICI9IgotICAgICAgKyB0aGlzLmxpbmVOdW1iZXIKLSAgICAgICsgIlxuIjsKLSAgICAvLysgIiAgIiArIFdTSUNvbnN0YW50cy5BVFRSX0NPTFVNTl9OVU1CRVIgKyAiPSIgKyB0aGlzLmNvbHVtbk51bWJlciArICJcbiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvamF4cC9Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmVjNWNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBkZWZpbmVzIGEgZmFjdG9yeSBBUEkgdGhhdCBlbmFibGVzIHVzIHRvIG9idGFpbiBhIHBhcnNlciB0aGF0Ci0gKiBwcm9kdWNlcyBET00gb2JqZWN0IHRyZWVzIGZyb20gWE1MIGRvY3VtZW50cy4gTm90ZSB0aGlzIGNsYXNzIHNwZWNpYWxpemVzIAotICogamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS4KLSAqIAotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCBleHRlbmRzIERvY3VtZW50QnVpbGRlckZhY3RvcnkKLXsKLQotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGF0dHJpYnV0ZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBEb2N1bWVudEJ1aWxkZXIgdXNpbmcgdGhlIGN1cnJlbnRseSAKLSAgICogY29uZmlndXJlZCBwYXJhbWV0ZXJzLgotICAgKiAKLSAgICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50QnVpbGRlci4gCi0gICAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBpZiBhIERvY3VtZW50QnVpbGRlciBjYW5ub3QKLSAgICogICAgICAgICBiZSBjcmVhdGVkIHdoaWNoIHNhdGlzZmllcyB0aGUgY29uZmlndXJhdGlvbiByZXF1ZXN0ZWQuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnRCdWlsZGVyIG5ld0RvY3VtZW50QnVpbGRlcigpCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLSAgewotICAgIERvY3VtZW50QnVpbGRlciBkb2N1bWVudEJ1aWxkZXIgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZG9jdW1lbnRCdWlsZGVyID0gbmV3IERvY3VtZW50QnVpbGRlckltcGwodGhpcywgYXR0cmlidXRlcyk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZG9jdW1lbnRCdWlsZGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsbG93cyB0aGUgdXNlciB0byByZXRyaWV2ZSBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIAotICAgKiBpbXBsZW1lbnRhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lICB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLiAKLSAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gCi0gICAqICAgICAgICAgZG9lc24ndCByZWNvZ25pemUgdGhlIGF0dHJpYnV0ZS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0QXR0cmlidXRlKFN0cmluZyBuYW1lKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gYXR0cmlidXRlcy5nZXQobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQWxsb3dzIHRoZSB1c2VyIHRvIHNldCBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIAotICAgKiBpbXBsZW1lbnRhdGlvbi4gCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZSAgIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIAotICAgKiAgICAgICAgIGRvZXNuJ3QgcmVjb2duaXplIHRoZSBhdHRyaWJ1dGUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGUoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSkKLSAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICBhdHRyaWJ1dGVzLnB1dChuYW1lLCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEZlYXR1cmUoU3RyaW5nIGFyZzAsIGJvb2xlYW4gYXJnMSkgCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLSAgewotICAgIC8vIGN1cnJlbnRseSB3ZSBkbyBub3Qgc3VwcG9ydCBzZXR0aW5nIGFueSBmZWF0dXJlCi0JLy8gYXMgcGVyIHNwZWMsIHdlIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24KLQl0aHJvdyBuZXcgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihhcmcwICsgIiBOb3Qgc3VwcG9ydGVkIik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRGZWF0dXJlKFN0cmluZyBhcmcwKSAKLSAgICB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0JLy8gYXMgcGVyIHNwZWMsIHdlIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24KLQl0aHJvdyBuZXcgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihhcmcwICsgIiBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1OGRkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvamF4cC9Eb2N1bWVudEJ1aWxkZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRE9NSW1wbGVtZW50YXRpb25JbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5ET01QYXJzZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRE9NSW1wbGVtZW50YXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi0vKioKLSAqIFVzaW5nIHRoaXMgY2xhc3MsIHdlIGNhbiBvYnRhaW4gYSBEb2N1bWVudCBmcm9tIFhNTC4gVGhpcyBjbGFzcyBpcyBhIAotICogc3BlY2lhbGl6YXRpb24gb2YgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyLgotICogCi0gKiBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSAKLSAqIERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyIG1ldGhvZC4gT25jZSBhbiBpbnN0YW5jZSAKLSAqIG9mIHRoaXMgY2xhc3MgaXMgb2J0YWluZWQsIFhNTCBjYW4gYmUgcGFyc2VkIGZyb20gYSB2YXJpZXR5IG9mIGlucHV0IAotICogc291cmNlcy4gVGhlc2UgaW5wdXQgc291cmNlcyBhcmUgSW5wdXRTdHJlYW1zLCBGaWxlcywgVVJMcywgYW5kIFNBWCAKLSAqIElucHV0U291cmNlcy4KLQotVGhpcyBjbGFzcyB3aWxsIGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3RvcnkuLi4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIERvY3VtZW50QnVpbGRlckltcGwgZXh0ZW5kcyBEb2N1bWVudEJ1aWxkZXIKLXsKLSAgcHJvdGVjdGVkIERPTVBhcnNlciBkb21QYXJzZXIgPSBudWxsOwotCi0gIHByb3RlY3RlZCBFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyID0gbmV3IERlZmF1bHRIYW5kbGVyKCk7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFU19GRUFUVVJFID0KLSAgICBDb25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLk5BTUVTUEFDRVNfRkVBVFVSRTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVElPTl9GRUFUVVJFID0KLSAgICBDb25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLlZBTElEQVRJT05fRkVBVFVSRTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIERvY3VtZW50QnVpbGRlckltcGwyLgotICAgKgotICAgKiBAcGFyYW0gZGJGYWN0b3J5ICBhIERvY3VtZW50QnVpbGRlckZhY3Rvcnkgb2JqZWN0LgotICAgKiBAdGhyb3dzIFNBWEV4Y2VwdGlvbiBpZiBhbnkgcGFyc2UgZXJyb3JzIG9jY3VyLiAKLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEJ1aWxkZXJJbXBsKERvY3VtZW50QnVpbGRlckZhY3RvcnkgZGJGYWN0b3J5LCBIYXNodGFibGUgYXR0cmlidXRlcykKLSAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgcGFyc2VyCi0gICAgZG9tUGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwotCi0gICAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZQotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKE5BTUVTUEFDRVNfRkVBVFVSRSwgZGJGYWN0b3J5LmlzTmFtZXNwYWNlQXdhcmUoKSk7Ci0KLSAgICAvLyBTZXQgdmFsaWRhdGluZwotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKFZBTElEQVRJT05fRkVBVFVSRSwgZGJGYWN0b3J5LmlzVmFsaWRhdGluZygpKTsKLSAgICBpZiAoZGJGYWN0b3J5LmlzVmFsaWRhdGluZygpKSBkb21QYXJzZXIuc2V0RmVhdHVyZShYTUxVdGlscy5GRUFUVVJFX1ZBTElEQVRJT05fU0NIRU1BLCB0cnVlKTsKLQotICAgIC8vIERvIG5vdCBkZWZlciBub2RlIGV4cGFuc2lvbgotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5ERUZFUl9OT0RFX0VYUEFOU0lPTl9GRUFUVVJFLAotICAgICAgZmFsc2UpOwotCi0gICAgLy8gU2V0IG90aGVyIGZlYXR1cmVzIGZyb20gdGhlIGRvY3VtZW50IGZhY3RvcnkgYnVpbGRlcgotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5JTkNMVURFX0lHTk9SQUJMRV9XSElURVNQQUNFLAotICAgICAgIWRiRmFjdG9yeS5pc0lnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKCkpOwotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWAotICAgICAgICArIENvbnN0YW50cy5DUkVBVEVfRU5USVRZX1JFRl9OT0RFU19GRUFUVVJFLAotICAgICAgIWRiRmFjdG9yeS5pc0V4cGFuZEVudGl0eVJlZmVyZW5jZXMoKSk7Ci0gICAgZG9tUGFyc2VyLnNldEZlYXR1cmUoCi0gICAgICBDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLklOQ0xVREVfQ09NTUVOVFNfRkVBVFVSRSwKLSAgICAgICFkYkZhY3RvcnkuaXNJZ25vcmluZ0NvbW1lbnRzKCkpOwotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5DUkVBVEVfQ0RBVEFfTk9ERVNfRkVBVFVSRSwKLSAgICAgICFkYkZhY3RvcnkuaXNDb2FsZXNjaW5nKCkpOwotICAgCi0gICAgLy8gc2V0IGZlYXR1cmVzIGFuZCBwcm9wZXJ0aWVzIHNwZWNpZmllZCBhdCBmYWN0b3J5IGxldmVsCi0gICAgaWYgKGF0dHJpYnV0ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEVudW1lcmF0aW9uIGk9YXR0cmlidXRlcy5rZXlzKCk7IGkuaGFzTW9yZUVsZW1lbnRzKCk7KQotICAgICAgewotICAgICAgICBTdHJpbmcgYXR0cmlidXRlID0gKFN0cmluZylpLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGUuZXF1YWxzKFhNTFV0aWxzLkpBWFBfU0NIRU1BX1NPVVJDRSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBmb3IgbXVsdGlwbGUgc2NoZW1hIHZhbGlkYXRpb24gbWF5IGJlIGFycmF5IG9mIElucHV0U291cmNlIAotICAgICAgICAgIGlmKGF0dHJpYnV0ZXMuZ2V0KGF0dHJpYnV0ZSkgaW5zdGFuY2VvZiBJbnB1dFNvdXJjZVtdKQotICAgICAgICAgICAgZG9tUGFyc2VyLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgKElucHV0U291cmNlW10pYXR0cmlidXRlcy5nZXQoYXR0cmlidXRlKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9tUGFyc2VyLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgKElucHV0U291cmNlKWF0dHJpYnV0ZXMuZ2V0KGF0dHJpYnV0ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGRvbVBhcnNlci5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXMuZ2V0KGF0dHJpYnV0ZSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBjb250ZW50IG9mIHRoZSBnaXZlbiBpbnB1dCBzb3VyY2UgYXMgYW4gWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gYSBuZXcgRE9NLgotICAgKiBAcGFyYW0gaXMgIElucHV0U3RyZWFtIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQgdG8gYmUgcGFyc2VkLiAKLSAgICogQHRocm93cyBTQVhFeGNlcHRpb24gaWYgYW55IHBhcnNlIGVycm9ycyBvY2N1ci4gCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgYW55IElPIGVycm9ycyBvY2N1ci4gCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgcGFyc2UoSW5wdXRTb3VyY2UgaXMpIHRocm93cyBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQl0cnkKLQl7Ci0JICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLSAJCi0gICAgICAvLyBTZXQgZW50aXR5IHJlc29sdmVyCi0gICAgICBpZiAodGhpcy5lbnRpdHlSZXNvbHZlciAhPSBudWxsKQotICAgICAgICBkb21QYXJzZXIuc2V0RW50aXR5UmVzb2x2ZXIodGhpcy5lbnRpdHlSZXNvbHZlcik7Ci0KLSAgICAgIC8vIFNldCBlcnJvciBoYW5kbGVyICAgIAotICAgICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyICE9IG51bGwpCi0gICAgICAgIGRvbVBhcnNlci5zZXRFcnJvckhhbmRsZXIodGhpcy5lcnJvckhhbmRsZXIpOwotCi0gICAgICAvLyBQYXJzZSBpbnB1dCBzb3VyY2UKLSAgICAgIGRvbVBhcnNlci5wYXJzZShpcyk7Ci0KLSAgICAgIC8vIFJldHVybiB0aGUgZG9jdW1lbnQgdGhhdCB3YXMgY3JlYXRlZAotICAgICAgcmV0dXJuIGRvbVBhcnNlci5nZXREb2N1bWVudCgpOwotCX0KLSAgICBmaW5hbGx5Ci0gICAgeyAKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotICAgIH0gICAgCi0gIH0KLQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcGFyc2VyIGlzIGNvbmZpZ3VyZWQgdG8gdW5kZXJzdGFuZCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBwYXJzZXIgaXMgY29uZmlndXJlZCB0byB1bmRlcnN0YW5kIG5hbWVzcGFjZXM7IGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTmFtZXNwYWNlQXdhcmUoKQotICB7Ci0gICAgYm9vbGVhbiBuYW1lc3BhY2VBd2FyZSA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgbmFtZXNwYWNlQXdhcmUgPSBkb21QYXJzZXIuZ2V0RmVhdHVyZShOQU1FU1BBQ0VTX0ZFQVRVUkUpOwotICAgIH0KLQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gc2UpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc2UudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZUF3YXJlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcnNlciBpcyBjb25maWd1cmVkIHRvIHZhbGlkYXRlIFhNTCBkb2N1bWVudHMuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHBhcnNlciBpcyBjb25maWd1cmVkIHRvIHZhbGlkYXRlIFhNTCBkb2N1bWVudHM7IGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRhdGluZygpCi0gIHsKLSAgICBib29sZWFuIHZhbGlkYXRpbmcgPSBmYWxzZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIHZhbGlkYXRpbmcgPSBkb21QYXJzZXIuZ2V0RmVhdHVyZShWQUxJREFUSU9OX0ZFQVRVUkUpOwotICAgIH0KLQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gc2UpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc2UudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogU3BlY2lmeSB0aGUgRW50aXR5UmVzb2x2ZXIgdG8gYmUgdXNlZCB0byByZXNvbHZlIGVudGl0aWVzIHByZXNlbnQgCi0gICAqIGluIHRoZSBYTUwgZG9jdW1lbnQgdG8gYmUgcGFyc2VkLiBTZXR0aW5nIHRoaXMgdG8gbnVsbCB3aWxsIHJlc3VsdCAKLSAgICogaW4gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gdXNpbmcgaXQncyBvd24gZGVmYXVsdCAKLSAgICogaW1wbGVtZW50YXRpb24gYW5kIGJlaGF2aW9yLgotICAgKiAKLSAgICogQHBhcmFtIGVyICB0aGUgRW50aXR5UmVzb2x2ZXIgdG8gYmUgdXNlZCB0byByZXNvbHZlIGVudGl0aWVzIAotICAgKiAgICAgICAgICAgIHByZXNlbnQgaW4gdGhlIFhNTCBkb2N1bWVudCB0byBiZSBwYXJzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlSZXNvbHZlcihFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIHRoaXMuZW50aXR5UmVzb2x2ZXIgPSBlbnRpdHlSZXNvbHZlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTcGVjaWZ5IHRoZSBFcnJvckhhbmRsZXIgdG8gYmUgdXNlZCB0byByZXBvcnQgZXJyb3JzIHByZXNlbnQgaW4gCi0gICAqIHRoZSBYTUwgZG9jdW1lbnQgdG8gYmUgcGFyc2VkLiBTZXR0aW5nIHRoaXMgdG8gbnVsbCB3aWxsIHJlc3VsdCAKLSAgICogaW4gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gdXNpbmcgaXQncyBvd24gZGVmYXVsdCAKLSAgICogaW1wbGVtZW50YXRpb24gYW5kIGJlaGF2aW9yLiAKLSAgICogCi0gICAqIHBhcmFtIGVoICB0aGUgRXJyb3JIYW5kbGVyIHRvIGJlIHVzZWQgdG8gcmVwb3J0IGVycm9ycyBwcmVzZW50IGluIAotICAgKiAgICAgICAgICAgdGhlIFhNTCBkb2N1bWVudCB0byBiZSBwYXJzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvckhhbmRsZXIoRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlcikKLSAgewotICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIE9idGFpbiBhIG5ldyBpbnN0YW5jZSBvZiBhIERPTSBEb2N1bWVudCBvYmplY3QgdG8gYnVpbGQgYSBET00gCi0gICAqIHRyZWUgd2l0aC4gQW4gYWx0ZXJuYXRpdmUgd2F5IHRvIGNyZWF0ZSBhIERPTSBEb2N1bWVudCBvYmplY3QgCi0gICAqIGlzIHRvIHVzZSB0aGUgZ2V0RE9NSW1wbGVtZW50YXRpb24gbWV0aG9kIHRvIGdldCBhIERPTSBMZXZlbCAyIAotICAgKiBET01JbXBsZW1lbnRhdGlvbiBvYmplY3QgYW5kIHRoZW4gdXNlIERPTSBMZXZlbCAyIG1ldGhvZHMgb24gCi0gICAqIHRoYXQgb2JqZWN0IHRvIGNyZWF0ZSBhIERPTSBEb2N1bWVudCBvYmplY3QuCi0gICAqIAotICAgKiBAcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgRE9NIERvY3VtZW50IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBuZXdEb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IERvY3VtZW50SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIE9idGFpbiBhbiBpbnN0YW5jZSBvZiBhIERPTUltcGxlbWVudGF0aW9uIG9iamVjdC4gCi0gICAqIEByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBET01JbXBsZW1lbnRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBET01JbXBsZW1lbnRhdGlvbiBnZXRET01JbXBsZW1lbnRhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbmV3IERPTUltcGxlbWVudGF0aW9uSW1wbCgpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9zY2hlbWEvVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1RhcmdldE5hbWVzcGFjZVByb2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGMyNDM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9zY2hlbWEvVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm9jZXNzZXMgdGFyZ2V0IG5hbWVzcGFjZXMuIE5vdGUgdGhpcyBjbGFzcyBpcyBhIHNwZWNpYWxpemF0aW9uCi0gKiBvZiBvcmcud3NpLnhtbC5zY2hlbWEuWE1MU2NoZW1hUHJvY2Vzc29yLgotICogCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXJnZXROYW1lc3BhY2VQcm9jZXNzb3IgZXh0ZW5kcyBYTUxTY2hlbWFQcm9jZXNzb3IKLXsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFRhcmdldE5hbWVzcGFjZVByb2Nlc3MuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGV4dAotICAgKiAgICAgICAgICAgIGRvY3VtZW50IGNvbnRleHQKLSAgICogQHBhcmFtIGRvY3VtZW50TGlzdAotICAgKiAgICAgICAgICAgIGNhY2hlIG9mIHByZXZpb3VzbHkgcGFyc2VkIGRvY3VtZW50cwotICAgKi8KLSAgcHVibGljIFRhcmdldE5hbWVzcGFjZVByb2Nlc3NvcihTdHJpbmcgY29udGV4dCkKLSAgewotICAgIHN1cGVyKGNvbnRleHQsIGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NTY2hlbWEoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHRucyA9IG51bGw7Ci0gICAgQXR0ciBhdHRyID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJfWFNEX1RBUkdFVE5BTUVTUEFDRSk7Ci0KLSAgICAvLyBJZiB0aGUgYXR0cmlidXRlIHdhcyBmb3VuZCBhbmQgdmFsdWUgaXMgbm90IG51bGwsIHRoZW4gYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgaWYgKChhdHRyICE9IG51bGwpICYmICgodG5zID0gYXR0ci5nZXRWYWx1ZSgpKSAhPSBudWxsKSkKLSAgICB7Ci0gICAgICAvLyBBZGQgdGhlIHRhcmdldE5hbWVzcGFjZSB0byB0aGUgcmV0dXJuIGxpc3QKLSAgICAgIHJldHVybkxpc3QuYWRkKHRucyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNlYXJjaCBmb3IgYWxsIHNjaGVtYSBlbGVtZW50cywgbG9hZCB0aGUgeHNkIGRvY3VtZW50cywgYW5kIHRoZW4gcHJvY2VzcwotICAgKiB0aGVtLgotICAgKiAKLSAgICogQHBhcmFtIG5vZGUKLSAgICogICAgICAgICAgICBub2RlLgotICAgKiBAcmV0dXJuIGEgbGlzdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICogICAgICAgICAgICAgaWYgdGhlIFhNTCBzY2hlbWEgZmlsZSBpcyBub3QgZm91bmQgb3IgaWYgaXQgaXMgbm90IGZvcm1hdHRlZAotICAgKiAgICAgICAgICAgICBjb3JyZWN0bHkuCi0gICAqLwotICBwdWJsaWMgTGlzdCBwcm9jZXNzQWxsU2NoZW1hKE5vZGUgbm9kZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NBbGxTY2hlbWEobm9kZSwgY29udGV4dCk7Ci0gIH0KLQotICAvKioKLSAgICogU2VhcmNoIGZvciBhbGwgc2NoZW1hIGVsZW1lbnRzLCBsb2FkIHRoZSB4c2QgZG9jdW1lbnRzLCBhbmQgdGhlbiBwcm9jZXNzCi0gICAqIHRoZW0uCi0gICAqIAotICAgKiBAcGFyYW0gbm9kZQotICAgKiAgICAgICAgICAgIG5vZGUuCi0gICAqIEByZXR1cm4gYSBsaXN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbgotICAgKiAgICAgICAgICAgICBpZiB0aGUgWE1MIHNjaGVtYSBmaWxlIGlzIG5vdCBmb3VuZCBvciBpZiBpdCBpcyBub3QgZm9ybWF0dGVkCi0gICAqICAgICAgICAgICAgIGNvcnJlY3RseS4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBwcm9jZXNzQWxsU2NoZW1hKE5vZGUgbm9kZSwgU3RyaW5nIGN0eCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0JQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JdHJ5Ci0JewotICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0JCi0gICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobm9kZSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgIHsKLSAgICAgICAgcHJvY2Vzc1NjaGVtYSgoRWxlbWVudCkgbm9kZSk7Ci0KLSAgICAgICAgTm9kZSBuID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpJiYgWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgbiwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotCi0gICAgICAgICAgICAvLyBUcnkgdG8gcGFyc2UgaW1wb3J0ZWQgWFNECi0gICAgICAgICAgICBpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAJICBpZiAoIXNjaGVtYUxvY2F0aW9ucy5jb250YWlucyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKSkKLSAgICAgICAgICAJICB7Ci0gICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb25zLmFkZChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBSZWFkIGFuZCBwUGFyc2UgdGhlIFhNTCBzY2hlbWEgZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gcGFyc2VYTUxEb2N1bWVudFVSTChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjdHgsIFRlc3RVdGlscy5nZXRYTUxTY2hlbWFMb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICAgIHByb2Nlc3NBbGxTY2hlbWEoZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCksIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjdHgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikgdGhyb3cgZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvLyBOT1RFOiBBbiBleGNlcHRpb24gd2lsbCBvY2N1ciBpZiB0aGUgWE1MIHNjaGVtYSBmaWxlIGlzIG5vdAotICAJCQkgICAgIC8vIGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5Ci0gICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSwgdCk7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgIH0KLSAgICAgfQotCi0gICAgIC8vIFJldHVybiBsaXN0IGNyZWF0ZWQgYnkgdGhlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGlzIGNsYXNzCi0gICAgIHJldHVybiByZXR1cm5MaXN0OwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgeyAKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotICAgIH0gICAgCi19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVByb2Nlc3Nvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9YTUxTY2hlbWFQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZlNTJlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVByb2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuc2NoZW1hOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MRG9jdW1lbnRDYWNoZVVzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhpcyBhYnN0cmFjdCBjbGFzcyBpcyB1c2VkIHRvIHByb2Nlc3MgYW4gWE1MIFNjaGVtYS4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFhNTFNjaGVtYVByb2Nlc3NvcgotICBleHRlbmRzIFhNTERvY3VtZW50Q2FjaGVVc2VyCi0gIGltcGxlbWVudHMgWE1MVGFncwotewotICBwcm90ZWN0ZWQgTGlzdCByZXR1cm5MaXN0ID0gbmV3IFZlY3RvcigpOwotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbnRleHQ7Ci0gIHByb3RlY3RlZCBib29sZWFuIHRocm93RXhjZXB0aW9uID0gdHJ1ZTsKLSAgcHJvdGVjdGVkIExpc3Qgc2NoZW1hTG9jYXRpb25zID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgWE1MU2NoZW1hUHJvY2Vzc29yLgotICAgKiBAcGFyYW0gY29udGV4dCAgICAgICBkb2N1bWVudCBjb250ZXh0LiAKLSAgICogQHBhcmFtIGRvY3VtZW50TGlzdCAgY2FjaGUgb2YgcHJldmlvdXNseSBwYXJzZWQgZG9jdW1lbnRzLgotICAgKi8KLSAgcHVibGljIFhNTFNjaGVtYVByb2Nlc3NvcihTdHJpbmcgY29udGV4dCkKLSAgewotICAgIHRoaXMoY29udGV4dCwgdHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTFNjaGVtYVByb2Nlc3Nvci4KLSAgICogQHBhcmFtIGNvbnRleHQgICAgICAgIGRvY3VtZW50IGNvbnRleHQuIAotICAgKiBAcGFyYW0gZG9jdW1lbnRMaXN0ICAgY2FjaGUgb2YgcHJldmlvdXNseSBwYXJzZWQgZG9jdW1lbnRzLgotICAgKiBAcGFyYW0gdGhyb3dFeGNlcHRpb24gaW5kaWNhdGVzIGlmIGFuIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIGlmIHRoZXJlIGlzIGEgcGFyc2luZyBwcm9ibGVtLgotICAgKi8KLSAgcHVibGljIFhNTFNjaGVtYVByb2Nlc3NvcigKLSAgICBTdHJpbmcgY29udGV4dCwKLSAgICBib29sZWFuIHRocm93RXhjZXB0aW9uKQotICB7Ci0gICAgc3VwZXIoKTsKLQotICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy50aHJvd0V4Y2VwdGlvbiA9IHRocm93RXhjZXB0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlYXJjaCBmb3IgYWxsIHNjaGVtYSBlbGVtZW50cywgbG9hZCB0aGUgeHNkIGRvY3VtZW50cywgYW5kIHRoZW4gcHJvY2VzcyB0aGVtLgotICAgKiBAcGFyYW0gbm9kZSAgbm9kZS4KLSAgICogQHJldHVybiBhIGxpc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZSBYTUwgc2NoZW1hIGZpbGUgaXMgbm90IGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5LgotICAgKi8KLSAgcHVibGljIExpc3QgcHJvY2Vzc0FsbFNjaGVtYShOb2RlIG5vZGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBwcm9jZXNzQWxsU2NoZW1hKG5vZGUsIGNvbnRleHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlYXJjaCBmb3IgYWxsIHNjaGVtYSBlbGVtZW50cywgbG9hZCB0aGUgeHNkIGRvY3VtZW50cywgYW5kIHRoZW4gcHJvY2VzcyB0aGVtLgotICAgKiBAcGFyYW0gbm9kZSAgbm9kZS4KLSAgICogQHJldHVybiBhIGxpc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZSBYTUwgc2NoZW1hIGZpbGUgaXMgbm90IGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5LgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IHByb2Nlc3NBbGxTY2hlbWEoTm9kZSBub2RlLCBTdHJpbmcgY3R4KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQl0cnkKLQl7Ci0gICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxTY2hlbWFQcm9jZXNzb3IuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0gICAgICAvLyBQcm9jZXNzIGFsbCBub2RlcwotICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBlbGVtZW50IG5vZGUsIHRoZW4gY29udGludWUKLSAgICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG5vZGUuZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGlmIHhzZDpzY2hlbWEgZWxlbWVudCBpcyBmb3VuZCAtPiBwcm9jZXNzIHNjaGVtYQotICAgICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobm9kZSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcm9jZXNzU2NoZW1hKChFbGVtZW50KSBub2RlKTsKLQotICAgICAgICAgICAgLy8gUHJvY2VzcyBhbGwgY2hpbGRyZW4gb2YgdGhlIHNjaGVtYSBlbGVtZW50Ci0gICAgICAgICAgICBwcm9jZXNzQWxsU2NoZW1hKG5vZGUuZ2V0Rmlyc3RDaGlsZCgpLCBjdHgpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIGlmIHhzZDppbXBvcnQgZWxlbWVudCBpcyBmb3VuZCAtPiBsb2FkIHNjaGVtYSBhbmQgcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBlbHNlIGlmIChYTUxVdGlscy5lcXVhbHMobm9kZSwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIEF0dHIgc2NoZW1hTG9jYXRpb24gPQotICAgICAgICAgICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIG5vZGUsIEFUVFJfWFNEX1NDSEVNQUxPQ0FUSU9OKTsKLQotICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGltcG9ydGVkIFhTRAotICAgICAgICAgICAgaWYgKHNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgIAkgIGlmICghc2NoZW1hTG9jYXRpb25zLmNvbnRhaW5zKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkpKQotICAgICAgICAgIAkgIHsKLSAgICAgICAgICAJCXNjaGVtYUxvY2F0aW9ucy5hZGQoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gUmVhZCBhbmQgcFBhcnNlIHRoZSBYTUwgc2NoZW1hIGRvY3VtZW50Ci0gICAgICAgICAgICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlWE1MRG9jdW1lbnRVUkwoCi0gICAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgVGVzdFV0aWxzLmdldFhNTFNjaGVtYUxvY2F0aW9uKCkpOwotCi0gICAgICAgICAgICAgICAgICBwcm9jZXNzQWxsU2NoZW1hKGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpLAotICAgICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjdHgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gTk9URTogQW4gZXhjZXB0aW9uIHdpbGwgb2NjdXIgaWYgdGhlIFhNTCBzY2hlbWEgZmlsZSBpcyBub3QgZm91bmQgb3IgaWYgaXQgaXMgbm90IGZvcm1hdHRlZCBjb3JyZWN0bHkKLSAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSwgdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGVsc2UgaXRlcmF0ZSBlbGVtZW50IHJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgICBwcm9jZXNzQWxsU2NoZW1hKG5vZGUuZ2V0Rmlyc3RDaGlsZCgpLCBjdHgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCBuZXh0IHNpYmlsaW5nCi0gICAgICAgIG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLSAgICB9ICAgIAotCi0KLSAgICAvLyBSZXR1cm4gbGlzdCBjcmVhdGVkIGJ5IHRoZSBjbGFzcyB0aGF0IGV4dGVuZHMgdGhpcyBjbGFzcwotICAgIHJldHVybiByZXR1cm5MaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcHJvY2Vzc1NjaGVtYShFbGVtZW50IGVsZW1lbnQpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9YTUxTY2hlbWFWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZjYTEzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuc2NoZW1hOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuRE9NMldyaXRlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gdmFsaWRhdGUgYW4gWE1MIFNjaGVtYS4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFhNTFNjaGVtYVZhbGlkYXRvciBleHRlbmRzIFhNTFNjaGVtYVByb2Nlc3NvcgotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MTlNfUFJFRklYID0gInhtbG5zOiI7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBYTUxTY2hlbWFWYWxpZGF0b3IuCi0gICAqIEBwYXJhbSBjb250ZXh0ICAgICAgIGRvY3VtZW50IGNvbnRleHQuIAotICAgKiBAcGFyYW0gZG9jdW1lbnRMaXN0ICBjYWNoZSBvZiBwcmV2aW91c2x5IHBhcnNlZCBkb2N1bWVudHMuCi0gICAqLwotICBwdWJsaWMgWE1MU2NoZW1hVmFsaWRhdG9yKFN0cmluZyBjb250ZXh0KQotICB7Ci0gICAgc3VwZXIoY29udGV4dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzU2NoZW1hKEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIE5hbWVkTm9kZU1hcCBhdHRyTGlzdDsKLQotICAgIEhhc2hNYXAgZWxlbWVudE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgSGFzaE1hcCBuc01hcCA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgc2NoZW1hIGNvbnRlbnQgYXMgYSBzdHJpbmcKLSAgICAgIFN0cmluZyBzY2hlbWEgPSBET00yV3JpdGVyLm5vZGVUb1N0cmluZyhlbGVtZW50KTsKLQotICAgICAgLy8gR2V0IGxpc3Qgb2YgZWxlbWVudCBuYW1lc3BhY2VzCi0gICAgICBpZiAoKGF0dHJMaXN0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGFkZE5hbWVzcGFjZXMoYXR0ckxpc3QsIGVsZW1lbnRNYXAsIG51bGwpOwotICAgICAgfQotCi0gICAgICAvLyBJZiBlbGVtZW50TWFwIGRvZXMgbm90IGNvbnRhaW4gZW50cnkgZm9yIGl0J3Mgb3duIG5hbWVzcGFjZSwgdGhlbiBhZGQgaXQKLSAgICAgIGlmIChlbGVtZW50TWFwLmdldChYTUxOU19QUkVGSVggKyBlbGVtZW50LmdldFByZWZpeCgpKSA9PSBudWxsKQotICAgICAgewotICAgICAgICBlbGVtZW50TWFwLnB1dCgKLSAgICAgICAgICBYTUxOU19QUkVGSVggKyBlbGVtZW50LmdldFByZWZpeCgpLAotICAgICAgICAgIGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgZmlyc3QgcGFyZW50IG5vZGUgYW5kIHRoZW4gcHJvY2VzcyBhbGwgb2YgdGhlbSB1bnRpbCB5b3UgaGl0IHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50Ci0gICAgICBOb2RlIHBhcmVudE5vZGUgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLSAgICAgIHdoaWxlIChwYXJlbnROb2RlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIE9ubHkgcHJvY2VzcyBFbGVtZW50IG5vZGVzCi0gICAgICAgIGlmIChwYXJlbnROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBmb3IgdGhlIHBhcmVudCBub2RlCi0gICAgICAgICAgYXR0ckxpc3QgPSBwYXJlbnROb2RlLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhdHRyaWJ1dGVzLCBsb29rIGZvciB0aGUgeG1sbnM6IGF0dHJpYnV0ZXMKLSAgICAgICAgICBpZiAoYXR0ckxpc3QgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBhZGROYW1lc3BhY2VzKGF0dHJMaXN0LCBuc01hcCwgZWxlbWVudE1hcCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUuZ2V0UGFyZW50Tm9kZSgpOwotICAgICAgfQotCi0gICAgICAvLyBCdWlsZCBuYW1lc3BhY2UgbGlzdAotICAgICAgaWYgKG5zTWFwLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBhdHRyOwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlTGlzdCA9ICIiOwotICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IG5zTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBhdHRyID0gKFN0cmluZykgaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIG5hbWVzcGFjZUxpc3QgKz0gIiAiICsgYXR0ciArICI9XCIiICsgbnNNYXAuZ2V0KGF0dHIpICsgIlwiIjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFkZCBuYW1lc3BhY2Ugc2V0dGluZ3MsIHNpbmNlIHRoZSBET00yV3JpdGVyIHdpbGwgbWlzcyBhbnkgdGhhdCBhcmUgdXNlZCBhcyBhdHRyaWJ1dGUgdmFsdWVzCi0gICAgICAgIGludCBpbmRleCA9IHNjaGVtYS5pbmRleE9mKCI+Iik7Ci0gICAgICAgIGlmIChpbmRleCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgc3RhcnQgPSBzY2hlbWEuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICAgICAgICBTdHJpbmcgZW5kID0gc2NoZW1hLnN1YnN0cmluZyhpbmRleCk7Ci0KLSAgICAgICAgICBzY2hlbWEgPSBzdGFydCArIG5hbWVzcGFjZUxpc3QgKyBlbmQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gU2NoZW1hIHZhbGlkYXRlIHRoZSBYTUwgc2NoZW1hIGRvY3VtZW50Ci0gICAgICBYTUxVdGlscy5wYXJzZVhNTChzY2hlbWEsIFRlc3RVdGlscy5nZXRYTUxTY2hlbWFMb2NhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIHdlKQotICAgIHsKLSAgICAgIFRocm93YWJsZSB0ID0gd2UuZ2V0VGFyZ2V0RXhjZXB0aW9uKCk7Ci0gICAgICBpZiAodCAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm5MaXN0LmFkZCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZE5hbWVzcGFjZXMoTmFtZWROb2RlTWFwIGF0dHJMaXN0LCBNYXAgbnNNYXAsIE1hcCBlbGVtZW50TWFwKQotICB7Ci0gICAgTm9kZSBhdHRyOwotICAgIFN0cmluZyBub2RlTmFtZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ckxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBhdHRyID0gYXR0ckxpc3QuaXRlbShpKTsKLQotICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGUgbm9kZSBuYW1lCi0gICAgICBub2RlTmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQotICAgICAgLy8gSWYgaXQgc3RhcnRzIHdpdGggeG1sbnM6LCB0aGVuIGRldGVybWluZSBpZiBpdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyAKLSAgICAgIGlmIChub2RlTmFtZS5zdGFydHNXaXRoKFhNTE5TX1BSRUZJWCkKLSAgICAgICAgJiYgKChlbGVtZW50TWFwID09IG51bGwKLSAgICAgICAgICB8fCAoZWxlbWVudE1hcCAhPSBudWxsICYmIGVsZW1lbnRNYXAuZ2V0KG5vZGVOYW1lKSA9PSBudWxsKSkpKQotICAgICAgewotICAgICAgICBpZiAobnNNYXAuZ2V0KG5vZGVOYW1lKSA9PSBudWxsKQotICAgICAgICAgIG5zTWFwLnB1dChub2RlTmFtZSwgYXR0ci5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvZG9jdW1lbnQvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGM0YmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmRvY3VtZW50OwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0Lk51bGxSZXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0LlJlcG9ydE5vV3JpdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydC5TaW1wbGVSZXBvcnRlcjsKLQotLyoqCi0gKiBEb2N1bWVudEZhY3RvcnlJbXBsCi0gKiAKLSAqIEV4dGVuZHMgdGhlIFdTLUkgVGVzdCBUb29scyBkb2N1bWVudCBmYWN0b3J5IHRvIHNwZWNpZnkgc3BlY2lmaWMgUmVwb3J0Ci0gKiBhbmQgUmVwb3J0V3JpdGVyIGNsYXNzZXMgbmVlZGVkIGZvciBpbmNsdXNpb24gb2YgdGhlIHRvb2xzIGluIFdTQUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudEZhY3RvcnlJbXBsIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGwuRG9jdW1lbnRGYWN0b3J5SW1wbAotewotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgRG9jdW1lbnRGYWN0b3J5SW1wbC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgRG9jdW1lbnRXcml0ZXIuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0V3JpdGVyIG5ld1JlcG9ydFdyaXRlcigpCi0gIHsKLSAgICAvLyBSZXR1cm4gaW1wbGVtZW50YXRpb24KLSAgICByZXR1cm4gbmV3IFJlcG9ydE5vV3JpdGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSByZXBvcnQuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnQuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IG5ld1JlcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IE51bGxSZXBvcnRJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgcmVwb3J0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnRlci4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnRlciBuZXdSZXBvcnRlcihSZXBvcnQgcmVwb3J0LCBSZXBvcnRXcml0ZXIgcmVwb3J0V3JpdGVyKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVSZXBvcnRlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvQXNzZXJ0aW9uRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvQXNzZXJ0aW9uRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwZWM4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L0Fzc2VydGlvbkVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0OwotCi0vKioKLSAqIEFzc2VydGlvbkVycm9yCi0gKiAKLSAqIE9iamVjdCB0byBob2xkIGFuIGFzc2VydGlvbiBlcnJvciBnZW5lcmF0ZWQgYnkgdGhlIFdTLUkgVGVzdCBUb29scy4KLSAqIFByb3ZpZGVzIGFjY2VzcyB0byBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvciBpbmNsdWRpbmcgdGhlCi0gKiBpZCwgbWVzc2FnZSBhbmQgbG9jYXRpb24gaW4gdGhlIGZpbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25FcnJvcgotewotCi0gIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBhc3NlcnRpb25pZDsKLSAgcHJvdGVjdGVkIGludCBjb2x1bW47Ci0gIHByb3RlY3RlZCBpbnQgbGluZTsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25FcnJvci4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25FcnJvcigpCi0gIHsKLSAgICBtZXNzYWdlID0gYXNzZXJ0aW9uaWQgPSAiIjsKLSAgICBsaW5lID0gY29sdW1uID0gMDsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uRXJyb3IuCi0gICAqIEBwYXJhbSBpZCBhc3NlcnRpb24gaWQuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgZXJyb3IgbWVzc2FnZS4KLSAgICogQHBhcmFtIGxpbmUgYSBsaW5lIG51bWJlci4KLSAgICogQHBhcmFtIGNvbHVtbiBhIGNvbHVtbiBudW1iZXIuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uRXJyb3IoU3RyaW5nIGlkLCBTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvbmlkID0gaWQ7Ci0gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICB0aGlzLmxpbmUgPSBsaW5lOwotICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBzZXRBc3NlcnRpb25JRC4KLSAgICogQHBhcmFtIGlkIGFzc2VydGlvbiBpZC4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbklEKFN0cmluZyBpZCkKLSAgewotICAgIGFzc2VydGlvbmlkID0gaWQ7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEFzc2VydGlvbklELgotICAgKiBAcmV0dXJuIGFzc2VyaW9uIGlkLgotICAgKiBAc2VlICNzZXRBc3NlcnRpb25JRAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBc3NlcnRpb25JRCgpCi0gIHsKLSAgICByZXR1cm4gYXNzZXJ0aW9uaWQ7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIHNldEVycm9yTWVzc2FnZS4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBlcnJvciBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRFcnJvck1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVycm9yTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEVycm9yTWVzc2FnZS4KLSAgICogQHJldHVybiBlcnJvciBtZXNzYWdlLgotICAgKiBAc2VlICNzZXRFcnJvck1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBzZXRMaW5lLgotICAgKiBAcGFyYW0gbGluZSBsaW5lIG51bWJlci4KLSAgICogQHNlZSAjZ2V0TGluZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGluZShpbnQgbGluZSkKLSAgewotICAgIHRoaXMubGluZSA9IGxpbmU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExpbmUuCi0gICAqIEByZXR1cm4gbGluZSBudW1iZXIuCi0gICAqIEBzZWUgI3NldExpbmUKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gbGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2Qgc2V0Q29sdW1uLgotICAgKiBAcGFyYW0gY29sdW1uIGNvbHVtbiBudW1iZXIuCi0gICAqIEBzZWUgI2dldENvbHVtbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29sdW1uKGludCBjb2x1bW4pCi0gIHsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0Q29sdW1uLgotICAgKiBAcmV0dXJuIGNvbHVtbiBudW1iZXIuCi0gICAqIEBzZWUgI3NldENvbHVtbgotICAgKi8KLSAgcHVibGljIGludCBnZXRDb2x1bW4oKQotICB7Ci0gICAgcmV0dXJuIGNvbHVtbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L051bGxSZXBvcnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L051bGxSZXBvcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YWU5OGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9OdWxsUmVwb3J0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLlJlcG9ydEltcGw7Ci0KLS8qKgotICogTnVsbCByZXBvcnQuCi0gKgotICogQGF1dGhvciBKZWZmcmV5IExpdSAoamVmZmxpdUBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTnVsbFJlcG9ydEltcGwgZXh0ZW5kcyBSZXBvcnRJbXBsIGltcGxlbWVudHMgUmVwb3J0Ci17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRTdGFydFhNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRFbmRYTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldEVycm9yWE1MU3RyaW5nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVycm9yWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lLCBTdHJpbmcgZXJyb3JEZXRhaWwpCi0gIHsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9SZXBvcnROb1dyaXRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvUmVwb3J0Tm9Xcml0ZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMzcyNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9SZXBvcnROb1dyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogV1MtSSBjb25mb3JtYW5jZSB0ZXN0IFJlcG9ydFdyaXRlciBmb3Igd3NpIHBsdWdpbi4KLSAqIFRoaXMgUmVwb3J0V3JpdGVyIHdyaXRlcyBub3RoaW5nIHNvIG5vIHJlcG9ydCBmaWxlIHdpbGwgYmUgY3JlYXRlZC4KLSAqLwotcHVibGljIGNsYXNzIFJlcG9ydE5vV3JpdGVySW1wbCBpbXBsZW1lbnRzIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0V3JpdGVyCi17Ci0KLSAgLyoqCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIFJlcG9ydE5vV3JpdGVySW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjZ2V0RG9jdW1lbnQoKQotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjc2V0V3JpdGVyKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdyaXRlcihTdHJpbmcgZG9jdW1lbnRMb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjd3JpdGUoUmVhZGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVhZGVyIHJlYWRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjd3JpdGUoUmVhZGVyLCBXcml0ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZShSZWFkZXIgcmVhZGVyLCBXcml0ZXIgd3JpdGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydFdyaXRlciN3cml0ZShSZXBvcnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZShSZXBvcnQgcmVwb3J0KSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydFdyaXRlciN3cml0ZShSZXBvcnQsIFdyaXRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQsIFdyaXRlciB3cml0ZXIpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjY2xvc2UoKQotICAgKi8KLSAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgV1NJRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24KLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L1NpbXBsZVJlcG9ydGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L1NpbXBsZVJlcG9ydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNjVlNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9TaW1wbGVSZXBvcnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkRlZmF1bHRSZXBvcnRlcjsKLQotLyoqCi0gKiBUaGlzIHJlcG9ydGVyIGRvZXMgbm90IHdyaXRlIGFydGlmYWN0cyBhbmQgYXNzZXJ0aW9ucwotICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVwb3J0ZXIgZXh0ZW5kcyBEZWZhdWx0UmVwb3J0ZXIKLXsKLSAgcHVibGljIFNpbXBsZVJlcG9ydGVyKFJlcG9ydCByZXBvcnQsIFJlcG9ydFdyaXRlciByZXBvcnRXcml0ZXIpCi0gIHsKLSAgICBzdXBlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBcnRpZmFjdFJlZmVyZW5jZShvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0LmFkZEFydGlmYWN0UmVmZXJlbmNlKGFydGlmYWN0UmVmZXJlbmNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2FkZEFzc2VydGlvblJlc3VsdChvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFzc2VydGlvblJlc3VsdChBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlcG9ydC5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC92YWxpZGF0ZS93c2RsL1dTRExWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC92YWxpZGF0ZS93c2RsL1dTRExWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhN2NiOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvdmFsaWRhdGUvd3NkbC9XU0RMVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC52YWxpZGF0ZS53c2RsOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklXU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvbkluZm9JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZXhjZXB0aW9uLlZhbGlkYXRlV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRpb25JbmZvSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETFJlYWRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLldTRExBbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLldTSUFuYWx5emVyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQuQXNzZXJ0aW9uRXJyb3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhlIFdTSSB2YWxpZGF0b3IgcGx1Z3MgaW50byB0aGUgV1NETCB2YWxpZGF0b3IgdG8gcHJvdmlkZQotICogdmFsaWRhdGlvbiBmb3IgYSBXU0RMIGRvY3VtZW50IHdpdGggcmVzcGVjdCB0byB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIChjdXJyZW50bHkgMS4wKS4KLSAqIFRoaXMgY2xhc3MgYWN0cyBhcyBhbiBicmlkZ2UgYmV0d2VlbiB0aGUgV1MtSSB0b29scyBhbmQgdGhlIFdTREwgVmFsaWRhdG9yLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICogQGF1dGhvciBXYWppaGEgUmVobWFuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdG9yIGltcGxlbWVudHMgSVdTRExWYWxpZGF0b3IKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVhDX1VOQUJMRV9UT19WQUxJREFURV9XU0kgPSAiX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfV1NJIjsKLQotICAvLyBpbmRpY2F0aW9ucyBmb3IgdHlwZXMgb2YgZXJyb3JzCi0gIHByb3RlY3RlZCBmaW5hbCBpbnQgRVJST1IgPSAyOwotICBwcm90ZWN0ZWQgZmluYWwgaW50IFdBUk5JTkcgPSAxOwotICAKLSAgcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHJlc291cmNlYnVuZGxlID0gbnVsbDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gd3NpVmFsaWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NETFZhbGlkYXRvcigpCi0gIHsKLQlyZXNvdXJjZWJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgid3NpdmFsaWRhdGUiLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLklXU0RMVmFsaWRhdG9yI3ZhbGlkYXRlKG9yZy53M2MuZG9tLkRvY3VtZW50LCBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLlZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoRG9jdW1lbnQgZG9tTW9kZWwsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKSB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uCi0gIHsKLQlib29sZWFuIHdpdGhBdHRhY2htZW50cyA9IGZhbHNlOwotCWJvb2xlYW4gd2l0aEJhc2ljID0gZmFsc2U7Ci0JT2JqZWN0IGF0dFZhbHVlID0gdmFsSW5mby5nZXRBdHRyaWJ1dGUoImh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9CYXNpY1dpdGhBdHRhY2htZW50cy9Db21wbGlhbmNlTGV2ZWwiKTsKLQlpZihhdHRWYWx1ZSA9PSBudWxsKQotCXsKLQkgIGF0dFZhbHVlID0gdmFsSW5mby5nZXRBdHRyaWJ1dGUoImh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9CYXNpYy9Db21wbGlhbmNlTGV2ZWwiKTsKLSAgIAkgIGlmKGF0dFZhbHVlICE9IG51bGwpCi0JICB7Ci0JICAgIHdpdGhCYXNpYyA9IHRydWU7Ci0JICB9Ci0JfQotCWVsc2UKLQl7Ci0JICB3aXRoQXR0YWNobWVudHMgPSB0cnVlOwotCX0KLQlTdHJpbmcgd3NpTGV2ZWwgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLldBUk5fTk9OX1dTSTsKLQlXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlID0gbnVsbDsKLQlTdHJpbmcgdXJpID0gdmFsSW5mby5nZXRGaWxlVVJJKCk7Ci0JaWYoYXR0VmFsdWUgIT0gbnVsbCkKLQl7Ci0JICBTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKWF0dFZhbHVlOwotCSAgaWYodmFsdWUuZXF1YWxzKCJJR05PUkUiKSkKLQkgIHsKLQkgIAl3c2lMZXZlbCA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuSUdOT1JFX05PTl9XU0k7Ci0JICB9Ci0JICBlbHNlIGlmKHZhbHVlLmVxdWFscygiUkVRVUlSRSIpKQotCSAgewotCSAgIAl3c2lMZXZlbCA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1RPUF9OT05fV1NJOwotCSAgfQotCX0KLQllbHNlIAotCXsKLQkgIGlmKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuZ2V0RWNsaXBzZUNvbnRleHQoKSkKLQkgIHsKLQkJd3NpUHJlZmVyZW5jZSA9IFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLmNoZWNrV1NJUHJlZmVyZW5jZXModXJpKTsKLQkJd3NpTGV2ZWwgPSB3c2lQcmVmZXJlbmNlLmdldENvbXBsaWFuY2VMZXZlbCgpOwotCSAgfQotCSAgZWxzZQotCSAgewotCQl3c2lQcmVmZXJlbmNlID0gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5jaGVja1dTSVByZWZlcmVuY2VzKHVyaSk7Ci0JCXdzaUxldmVsID0gd3NpUHJlZmVyZW5jZS5nZXRDb21wbGlhbmNlTGV2ZWwoKTsKLQkgIH0KLQl9Ci0JLy8gSWYgd2UgYXJlIGlnbm9yaW5nIFdTLUkgdGhlbiBkb24ndCBydW4gdGhlIHRlc3RzLgotCWlmKHdzaUxldmVsLmVxdWFscyhXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLklHTk9SRV9OT05fV1NJKSkKLQl7Ci0JICByZXR1cm47Ci0JfQotCSAgICAKLSAgCXdzaVZhbGlkID0gdHJ1ZTsKLSAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0JYm9vbGVhbiBoYXNBbmFseXplckNvbmZpZyA9IGZhbHNlOwotICAJdHJ5Ci0gIAl7Ci0gICAgICAvL1dTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotIAkgIFZhbGlkYXRpb25JbmZvSW1wbCB2YWxpID0gbmV3IFZhbGlkYXRpb25JbmZvSW1wbCh2YWxJbmZvLmdldEZpbGVVUkkoKSwgbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmVzb3VyY2VidW5kbGUpKTsKLSAgCSAgdmFsaS5zZXRVUklSZXNvbHZlcigoVVJJUmVzb2x2ZXIpdmFsSW5mby5nZXRVUklSZXNvbHZlcigpKTsKLSAgICAgIFdTRExSZWFkZXJJbXBsIHJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbChuZXcgV1NETDExVmFsaWRhdGlvbkluZm9JbXBsKHZhbGkpKTsKLSAgICAgIFdTRExEb2N1bWVudFtdIGRvY3MgPSByZWFkZXIucmVhZFdTREwodXJpLCBkb21Nb2RlbCk7Ci0gICAgICBpbnQgbnVtZG9jcyA9IGRvY3MubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bWRvY3M7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETERvY3VtZW50IHRlbXBEb2MgPSBkb2NzW2ldOwotCQlpZih0ZW1wRG9jLmdldERlZmluaXRpb24oKS5nZXREb2N1bWVudEJhc2VVUkkoKS5lcXVhbHModmFsSW5mby5nZXRGaWxlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmaW5pdGlvbiA9IHRlbXBEb2MuZ2V0RGVmaW5pdGlvbigpOyAgCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgCX0KLSAgCWNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgCXsKLSAgCSAgdGhyb3cgbmV3IFZhbGlkYXRlV1NETEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdChyZXNvdXJjZWJ1bmRsZS5nZXRTdHJpbmcoX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfV1NJKSwgbmV3IE9iamVjdFtdIHsgdXJpIH0pKTsKLSAgCX0KLQkgICAgCi0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCAmJiB2YWxJbmZvICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgICAgIC8vIGdldCBhbGwgdGhlIGNvbGxlY3Rpb25zIHdlIG1heSBuZWVkIHRvIHZhbGlkYXRlCi0gICAgICBDb2xsZWN0aW9uIHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpOwotICAgICAgQ29sbGVjdGlvbiBiaW5kaW5ncyA9IGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKTsKLSAgICAgIENvbGxlY3Rpb24gcG9ydFR5cGVzID0gZGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKS52YWx1ZXMoKTsKLSAgICAgIENvbGxlY3Rpb24gbWVzc2FnZXMgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2VzKCkudmFsdWVzKCk7Ci0KLSAgICAgIFdTRExBbmFseXplciB3c2RsQW5hbHl6ZXI7Ci0JICBpZih3aXRoQXR0YWNobWVudHMpCi0JICB7Ci0JICAJV1NJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBuZXcgV1NJUHJlZmVyZW5jZXMoKTsKLSAgIAkgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKHdzaUxldmVsKTsKLQkgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLkFQX0FTU0VSVElPTl9GSUxFKTsKLQkgICAgd3NkbEFuYWx5emVyID0gbmV3IFdTRExBbmFseXplcih1cmksIHByZWZlcmVuY2VzKTsKLQkgIH0KLQkgIGVsc2UgaWYod2l0aEJhc2ljKQotCSAgewotCSAgCVdTSVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gbmV3IFdTSVByZWZlcmVuY2VzKCk7Ci0JCXByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCh3c2lMZXZlbCk7CQotCSAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1NCUF9BU1NFUlRJT05fRklMRSk7Ci0JICAgIHdzZGxBbmFseXplciA9IG5ldyBXU0RMQW5hbHl6ZXIodXJpLCBwcmVmZXJlbmNlcyk7Ci0JICB9Ci0JICBlbHNlIGlmKHdzaVByZWZlcmVuY2UgIT0gbnVsbCkKLQkgIHsKLQkJd3NkbEFuYWx5emVyID0gbmV3IFdTRExBbmFseXplcih1cmksIHdzaVByZWZlcmVuY2UpOwotCSAgfQotCSAgZWxzZSB7Ci0JCS8vIGRlZmF1bHQgcHJlZmVyZW5jZSBzZXR0aW5nCi0JICAJd3NkbEFuYWx5emVyID0gbmV3IFdTRExBbmFseXplcih1cmkpOwotCSAgfQotCi0JICAvLyBUaGUgV1MtSSBjb25mb3JtYW5jZSB0b29scyByZXF1aXJlIHRoYXQgZWFjaCBzZXJ2aWNlIGJlIGFuYWx5emVkIHNlcGFyYXRlbHkuCi0JICAvLyBHZXQgYWxsIHRoZSBzZXJ2aWNlcyBhbmQgYW5hbHl6ZSB0aGVtLgotCSAgaWYgKHNlcnZpY2VzICE9IG51bGwgJiYgIXNlcnZpY2VzLmlzRW1wdHkoKSkKLQkgIHsKLQkgICAgSXRlcmF0b3Igc2VydmljZUl0ZXJhdG9yID0gc2VydmljZXMuaXRlcmF0b3IoKTsKLQotCSAgICB3aGlsZSAoc2VydmljZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBzZXJ2aWNlSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgU3RyaW5nIHNlcnZpY2VuYW1lID0gc2VydmljZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCi0gICAgICAgICAgQ29sbGVjdGlvbiBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKTsKLSAgICAgICAgICBpZiAocG9ydHMgIT0gbnVsbCAmJiAhcG9ydHMuaXNFbXB0eSgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSBXUy1JIHRvb2xzIG11c3QgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggcG9ydCB3aXRoaW4gZWFjaCBzZXJ2aWNlLgotICAgICAgICAgICAgSXRlcmF0b3IgcG9ydEl0ZXJhdG9yID0gcG9ydHMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChwb3J0SXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgcG9ydEl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdzZGxBbmFseXplci5hZGRDb25maWd1cmF0aW9uVG9UZXN0KHNlcnZpY2VuYW1lLCBuYW1lc3BhY2UsIHBvcnQuZ2V0TmFtZSgpLCBXU0RMQW5hbHl6ZXIuUE9SVCk7Ci0JCQkJaGFzQW5hbHl6ZXJDb25maWcgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhdGNoIChXU0lBbmFseXplckV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzogQWRkIGNvZGUgdG8gbG9nIGVycm9yIAotICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleGNlcHRpb24gIiArIGUpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIHZhbGlkYXRlIGF0IHRoZSBiaW5kaW5nIGxldmVsIC0gY2hlY2sgZm9yIGV2ZXJ5IGJpbmRpbmcKLSAgICAgIGVsc2UgaWYgKGJpbmRpbmdzICE9IG51bGwgJiYgIWJpbmRpbmdzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgYmluZGluZ0l0ZXJhdG9yID0gYmluZGluZ3MuaXRlcmF0b3IoKTsKLQotICAgICAgICB3aGlsZSAoYmluZGluZ0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBiaW5kaW5nSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgU3RyaW5nIGJpbmRpbmduYW1lID0gYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdzZGxBbmFseXplci5hZGRDb25maWd1cmF0aW9uVG9UZXN0KG51bGwsIG5hbWVzcGFjZSwgYmluZGluZ25hbWUsIFdTRExBbmFseXplci5CSU5ESU5HKTsKLQkJCWhhc0FuYWx5emVyQ29uZmlnID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogQWRkIGNvZGUgdG8gbG9nIGVycm9yIAotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyB2YWxpZGF0ZSBhdCB0aGUgcG9ydFR5cGUgbGV2ZWwgLSBjaGVjayBmb3IgZXZlcnkgcG9ydFR5cGUKLSAgICAgIGVsc2UgaWYgKHBvcnRUeXBlcyAhPSBudWxsICYmICFwb3J0VHlwZXMuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBwb3J0VHlwZUl0ZXJhdG9yID0gcG9ydFR5cGVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwb3J0VHlwZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBwb3J0VHlwZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBTdHJpbmcgcG9ydFR5cGVuYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3c2RsQW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIHBvcnRUeXBlbmFtZSwgV1NETEFuYWx5emVyLlBPUlRUWVBFKTsKLQkJCWhhc0FuYWx5emVyQ29uZmlnID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogQWRkIGNvZGUgdG8gbG9nIGVycm9yIAotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyB2YWxpZGF0ZSBhdCB0aGUgbWVzc2FnZSBsZXZlbCAtIGNoZWNrIGZvciBldmVyeSBtZXNzYWdlCi0gICAgICBlbHNlIGlmIChtZXNzYWdlcyAhPSBudWxsICYmICFtZXNzYWdlcy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIEl0ZXJhdG9yIG1lc3NhZ2VJdGVyYXRvciA9IG1lc3NhZ2VzLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgd2hpbGUgKG1lc3NhZ2VJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgbWVzc2FnZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZW5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgd3NkbEFuYWx5emVyLmFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QobnVsbCwgbmFtZXNwYWNlLCBtZXNzYWdlbmFtZSwgV1NETEFuYWx5emVyLk1FU1NBR0UpOwotCQkJaGFzQW5hbHl6ZXJDb25maWcgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoV1NJQW5hbHl6ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBBZGQgY29kZSB0byBsb2cgZXJyb3IgCi0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZXhjZXB0aW9uICIgKyBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBvbmx5IHJ1biB0aGUgYW5hbHl6ZXIgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGNoZWNrCi0JCWlmKGhhc0FuYWx5emVyQ29uZmlnKQotCQl7Ci0JCSAgLy8gcnVuIHRoZSBjb25mb3JtYW5jZSBjaGVjayBhbmQgYWRkIGVycm9ycyBhbmQgd2FybmluZ3MgYXMgbmVlZGVkCi0JCSAgd3NkbEFuYWx5emVyLnZhbGlkYXRlQ29uZm9ybWFuY2UoKTsKLQkJCSAgCi0JCSAgLy8gSWYgdGhlIGxldmVsIGlzIHN1Z2dlc3QgYWxsIGVycm9ycyBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgd2FybmluZ3MuCi0JCSAgaWYod3NkbEFuYWx5emVyLmdldFdTSVByZWZlcmVuY2VzKCkuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuV0FSTl9OT05fV1NJKSkKLQkJICB7Ci0JCSAgICBhZGRXYXJuaW5ncyh3c2RsQW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIHZhbEluZm8pOwotCQkgIH0KLQkJICBlbHNlCi0JCSAgewotCQkgICAgYWRkRXJyb3JzKHdzZGxBbmFseXplci5nZXRBc3NlcnRpb25FcnJvcnMoKSwgdmFsSW5mbyk7Ci0JCSAgfQotCQkgIGFkZFdhcm5pbmdzKHdzZGxBbmFseXplci5nZXRBc3NlcnRpb25XYXJuaW5ncygpLCB2YWxJbmZvKTsKLQkJfQotICAgICAgfQotCSAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGUpCi0JICB7Ci0JCS8vIFRPRE86IEFkZCBjb2RlIHRvIGxvZyBlcnJvciAKLQkgICAgdmFsSW5mby5hZGRXYXJuaW5nKFdTSUNvbnN0YW50cy5XU0lfUFJFRklYICsgIkEgcHJvYmxlbSBvY2N1cmVkIHdoaWxlIHJ1bm5pbmcgdGhlIFdTLUkgV1NETCBjb25mb3JtYW5jZSBjaGVjazogIiArIGUsIDEsIDAsIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLQkgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGVycm9yIG1lc3NhZ2VzIHRvIHRoZSB2YWxpZGF0aW9uY29udHJvbGxlci4KLSAgICogCi0gICAqIEBwYXJhbSBlcnJvcnMgVGhlIGxpc3Qgb2YgZXJyb3JzIHRvIGFkZC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSB2YWxpZGF0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRXJyb3JzKExpc3QgZXJyb3JzLCBJVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIHJlcG9ydFByb2JsZW1zKGVycm9ycywgdmFsSW5mbywgRVJST1IpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB3YXJuaW5nIG1lc3NhZ2VzIHRvIHRoZSB2YWxpZGF0aW9uY29udHJvbGxlci4KLSAgICogCi0gICAqIEBwYXJhbSB3YXJuaW5ncyBUaGUgbGlzdCBvZiB3YXJuaW5ncyB0byBhZGQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZFdhcm5pbmdzKExpc3Qgd2FybmluZ3MsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgcmVwb3J0UHJvYmxlbXMod2FybmluZ3MsIHZhbEluZm8sIFdBUk5JTkcpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlcG9ydCB0aGUgcHJvYmxlbXMgc3BlY2lmaWVkIGZvciB0aGUgZ2l2ZW4gdHlwZSB0byB0aGUgdmFsaWRhdGlvbmNvbnRyb2xsZXIuCi0gICAqIAotICAgKiBAcGFyYW0gcHJvYmxlbXMgVGhlIHByb2JsZW1zIHRvIHJlcG9ydC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIG9iamVjdCB0byByZXBvcnQgdGhlIHByb2JsZW1zIHRvLgotICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBtZXNzYWdlcyB0byBhZGQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZXBvcnRQcm9ibGVtcyhMaXN0IHByb2JsZW1zLCBJVmFsaWRhdGlvbkluZm8gdmFsSW5mbywgaW50IHR5cGUpCi0gIHsKLSAgICAvLyBpZiB0aGVyZSB3ZXJlIG5vIHByb2JsZW1zIGp1c3QgcmV0dXJuCi0gICAgaWYgKHByb2JsZW1zID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICAKLSAgICBJdGVyYXRvciBwcm9ibGVtc0l0ZXJhdG9yID0gcHJvYmxlbXMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAocHJvYmxlbXNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgQXNzZXJ0aW9uRXJyb3IgYXNzZXJ0aW9uZXJyb3IgPSAoQXNzZXJ0aW9uRXJyb3IpIHByb2JsZW1zSXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYgKHR5cGUgPT0gRVJST1IpCi0gICAgICB7Ci0JCXdzaVZhbGlkID0gZmFsc2U7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIAkJV1NJQ29uc3RhbnRzLldTSV9QUkVGSVggKyAiKCIgKyBhc3NlcnRpb25lcnJvci5nZXRBc3NlcnRpb25JRCgpKyAiKSAiICsgYXNzZXJ0aW9uZXJyb3IuZ2V0RXJyb3JNZXNzYWdlKCksCi0gICAgICAgICAgYXNzZXJ0aW9uZXJyb3IuZ2V0TGluZSgpLAotICAgICAgICAgIGFzc2VydGlvbmVycm9yLmdldENvbHVtbigpLAotICAgICAgICAgIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLQotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZSA9PSBXQVJOSU5HKQotICAgICAgewotICAgICAgICB2YWxJbmZvLmFkZFdhcm5pbmcoCi0gICAgICAgIAkJV1NJQ29uc3RhbnRzLldTSV9QUkVGSVggKyAiKCIgKyBhc3NlcnRpb25lcnJvci5nZXRBc3NlcnRpb25JRCgpKyAiKSAiICsgYXNzZXJ0aW9uZXJyb3IuZ2V0RXJyb3JNZXNzYWdlKCksCi0gICAgICAgICAgYXNzZXJ0aW9uZXJyb3IuZ2V0TGluZSgpLAotICAgICAgICAgIGFzc2VydGlvbmVycm9yLmdldENvbHVtbigpLAotICAgICAgICAgIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLmNvbnRyb2xsZXIuSVdTRExWYWxpZGF0b3IjaXNWYWxpZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkKLSAgewotICAgIHJldHVybiB3c2lWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQnVuZGxlKFJlc291cmNlQnVuZGxlIHJiKSB7Ci0JLy8gTm90IHVzZWQuCi0JCi0gIH0KLSAgCi0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL3dzaXZhbGlkYXRlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL3dzaXZhbGlkYXRlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOTA2YjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy93c2l2YWxpZGF0ZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoKLSMgICogPC9jb3B5cmlnaHQ+Ci0jICAqLwotCi1fRVhDX1VOQUJMRV9UT19WQUxJREFURV9XU0kgPSBVbmFibGUgdG8gdmFsaWRhdGUgV1MtSSBjb25mb3JtYW5jZS4gIEFuIGVycm9yIG9jY3VyZWQgcmVhZGluZyB0aGUgV1NETCBkb2N1bWVudCB7MH0uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzQ1NzlhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZmVhYmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWJhOGI5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9heGlzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08Y29udGV4dHM+Ci0KLTwhLS1XZWJTZXJ2aWNlQXhpc1Byb3h5UGFnZS5qYXZhLS0+Ci0KLTxjb250ZXh0IGlkPSJQV0pCMDAwMSI+Ci08IS0tV1NETCB0byBKYXZhIEJpbmRpbmdzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBXZWIgc2VydmljZSBjbGllbnQgd2lsbCBiZSBjcmVhdGVkLiBUaGUgSmF2YSBiZWFuIGNsaWVudCBwcm94eSB0aGF0IGlzIGdlbmVyYXRlZCBwcm92aWRlcyBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV0pCMDAwMyI+Ci08IS0tRm9sZGVyIGZpZWxkIG9mIHRoZSBXU0RMIHRvIEphdmEgQmluZGluZ3MgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgcHJvamVjdCBhbmQgZm9sZGVyIGluIHdoaWNoIHRoZSBXZWIgc2VydmljZSBjbGllbnQgd2lsbCBiZSBjcmVhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV0pCMDAwOSI+Ci08IS0tSW5kaWNhdGVzIHdoZXRoZXIgdG8gZ2VuZXJhdGUgYSBwcm94eSBvciBub3QtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggSmF2YSBiZWFuIGNsaWVudCBwcm94eSB0byB0aGUgV2ViIHNlcnZpY2UuIFRoZSBKYXZhIGJlYW4gY2xpZW50IHByb3h5IHRoYXQgaXMgZ2VuZXJhdGVkIHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXSkIwMDE2Ij4KLTwhLS1TaG93IE1hcHBpbmdzIGNoZWNrYm94IG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBjdXN0b21pemUgdGhlIG1hcHBpbmdzIGJldHdlZW4gcGFja2FnZXMgYW5kIG5hbWVzcGFjZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVdlYlNlcnZpY2VBeGlzTWFwcGluZ3NQYWdlLmphdmEtLT4KLQotPGNvbnRleHQgaWQ9IlBXSk0wMDAxIj4KLTwhLS1XU0RMIHRvIEphdmEgTWFwcGluZ3MgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhbmVsIHRvIGFkZCBjdXN0b21pemVkIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1BeGlzRW1pdHRlclByZWZlcmVuY2VQYWdlLmphdmEtLT4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDAxIj4KLTwhLS1BeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHdpemFyZHMgd2hlbiBnZW5lcmF0aW5nIEF4aXMgV2ViIHNlcnZpY2VzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwMiI+Ci08IS0tR2VuZXJhdGUgY29kZSBmb3IgYWxsIGVsZW1lbnRzLS0+Ci08ZGVzY3JpcHRpb24+QnkgZGVmYXVsdCwgV1NETDJKYXZhIG9ubHkgZ2VuZXJhdGVzIGNvZGUgZm9yIHRob3NlIGVsZW1lbnRzIGluIHRoZSBXU0RMIGZpbGUgdGhhdCBhcmUgcmVmZXJlbmNlZC4gU2VsZWN0aW5nIHRoaXMgY2hlY2tib3ggd2lsbCBnZW5lcmF0ZSBjb2RlIGZvciBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGFyZSByZWZlcmVuY2VkLiBCeSBkZWZhdWx0LCB0aGUgc2NvcGUgaXMgYWxsIFdTREwgZmlsZXM7IGlmIGdlbmVyYXRlSW1wb3J0cyhmYWxzZSksIHRoZW4gdGhlIHNjb3BlIGlzIG9ubHkgdGhlIGltbWVkaWF0ZSBXU0RMIGZpbGUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDAzIj4KLTwhLS1FbWl0cyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YWRhdGEtLT4KLTxkZXNjcmlwdGlvbj5JZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uIFdTREwySmF2YSB3aWxsIGNyZWF0ZSBhIHNlcGFyYXRlIGhlbHBlciBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZSBtZXRhZGF0YSByYXRoZXIgdGhhbiBpbmNsdWRpbmcgaXQgaW4gdGhlIHNrZWxldG9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwNCI+Ci08IS0tUHJlZmVycyBidWlsZGluZyBiZWFucyB0byBzdHJhaWdodCBhcnJheXMgZm9yIHdyYXBwZWQgWE1MIGFycmF5IHR5cGVzLS0+Ci08ZGVzY3JpcHRpb24+SWYgeW91IHdvdWxkIHJhdGhlciBhIHNwZWNpZmljIEphdmFCZWFuIGNsYXNzIChBcnJheU9mU3RyaW5nKSBiZSBnZW5lcmF0ZWQgZm9yIHRoZXNlIHR5cGVzIG9mIHNjaGVtYXMsIHNlbGVjdCB0aGlzIG9wdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDUiPgotPCEtLUFkZCBzY29wZSB0byBkZXBsb3kud3NkZC0tPgotPGRlc2NyaXB0aW9uPlRoaXMgaW5kaWNhdGVzIGhvdyB0byBkZXBsb3kgdGhlIHNlcnZlciBpbXBsZW1lbnRhdGlvbi4gCi1BcHBsaWNhdGlvbiB1c2VzIG9uZSBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGFsbCByZXF1ZXN0cy4gCi1SZXF1ZXN0IGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBlYWNoIHJlcXVlc3QuIAotU2Vzc2lvbiBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCBzZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwNiI+Ci08IS0tVGltZW91dC0tPgotPGRlc2NyaXB0aW9uPlRoZSBkZWZhdWx0IGlzIDQ1IHNlY29uZHMuIFVzZSAtMSB0byBkaXNhYmxlIHRoZSB0aW1lb3V0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwNyI+Ci08IS0tTG9vayBmb3IgYWxsb3dlZCBtZXRob2RzIGluIGluaGVyaXRlZCBjbGFzcy0tPgotPGRlc2NyaXB0aW9uPklmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlIEphdmEyV1NETCBwYXJzZXIgd2lsbCBsb29rIGludG8gZXh0ZW5kZWQgY2xhc3NlcyB0byBkZXRlcm1pbmUgdGhlIGxpc3Qgb2YgbWV0aG9kcyB0byBleHBvcnQgaW50byB0aGUgV1NETCBmaWxlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwOCI+Ci08IS0tTG9vayBmb3IgYWxsb3dlZCBtZXRob2RzIGluIGluaGVyaXRlZCBjbGFzcy0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSB3aXphcmRzIHdoZW4gZ2VuZXJhdGluZyBBeGlzIFdlYiBzZXJ2aWNlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDkiPgotPCEtLUxvb2sgZm9yIGFsbG93ZWQgbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3MtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgd2l6YXJkcyB3aGVuIGdlbmVyYXRpbmcgQXhpcyBXZWIgc2VydmljZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDEwIj4KLTwhLS12YWxpZGF0ZSBhZ2FpbnN0IEpBWFJQQy0tPgotPGRlc2NyaXB0aW9uPklmIHNlbGVjdGVkLCB0aGUgdG9vbHMgd2lsbCBleGFtaW5lIHRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgYW5kIGl0cyB2YWx1ZSB0eXBlcyB0byBkZXRlcm1pbmUgaWYgaXQgc2F0aXNmaWVzIGltcG9ydGFudCByZXF1aXJlbWVudHMgb2YgdGhlIEpBWC1SUEMgc3BlY2lmaWNhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08L2NvbnRleHRzPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjA5OTc4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9heGlzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08Y29udGV4dHM+Ci0KLTwhLS1XZWJTZXJ2aWNlQXhpc0JlYW5Db25maWdQYWdlLmphdmEtLT4KLTxjb250ZXh0IGlkPSJQQkNGMDAwMSI+Ci08IS0tQmVhbiBJZGVudGl0eSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+T24gdGhpcyBwYWdlIHlvdSBjYW4gc2VsZWN0IHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCwgYW5kIHRoZSBtZXRob2RzIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgV2ViIHNlcnZpY2UuIFlvdSBjYW4gYWxzbyBzZWxlY3QgdGhlIGVuY29kaW5nIHN0eWxlLiBSUEMvRW5jb2RlZCBpcyB0aGUgcmVjb21tZW5kZWQgZW5jb2Rpbmcgc3R5bGUgZm9yIHRoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQuIFRoaXMgZW5jb2RpbmcgbWV0aG9kIGlzIG5vdCBXUy1JIGNvbXBsaWFudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUEJDRjAwMDYiPgotPCEtLVdTREwgRm9sZGVyIGZpZWxkIGluIHRoZSBCZWFuIENvbmZpZyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBmaWVsZCBsaXN0cyB0aGUgbG9jYXRpb24gb2YgdGhlIFdTREwgZmlsZSBiZWluZyBnZW5lcmF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQkNGMDAwNyI+Ci08IS0tV1NETCBGaWxlIGZpZWxkIG9mIHRoZSBCZWFuIENvbmZpZyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBmaWVsZCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQuIEFjY2VwdCB0aGUgZGVmYXVsdCBvciBlbnRlciBhIG5ldyBuYW1lLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQkNGMDAxNiI+Ci08IS0tU2hvdyBNYXBwaW5ncyBjaGVja2JveCBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gY3VzdG9taXplIHRoZSBtYXBwaW5ncyBiZXR3ZWVuIHBhY2thZ2VzIGFuZCBuYW1lc3BhY2VzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQk1FMDAwMiI+Ci08IS0tTWV0aG9kcyB0cmVlIG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBmcm9tIHRoZSBhdmFpbGFibGUgSmF2YSBiZWFuIG1ldGhvZHMgd2hpY2ggb25lcyB0byBpbmNsdWRlIGluIHlvdXIgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQk1FMDAxMCI+Ci08IS0tU2VsZWN0IEFsbCBidXR0b24gb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdGhpcyBidXR0b24gdG8gaW5jbHVkZSBhbGwgbGlzdGVkIG1ldGhvZHMgaW4geW91ciBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCTUUwMDExIj4KLTwhLS1EZXNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkNsaWNrIHRoaXMgYnV0dG9uIHRvIHJlbW92ZSBhbGwgbGlzdGVkIG1ldGhvZHMgZnJvbSB5b3VyIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotCi08IS0tV2ViU2VydmljZVNrZWxldG9uQXhpc0NvbmZpZ1BhZ2UuamF2YS0tPgotCi08Y29udGV4dCBpZD0iUEJTQzAwMDEiPgotPCEtLVNrZWxldG9uIENvbmZpZyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzcGVjaWZ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBKYXZhIGJlYW4gc2tlbGV0b24gYmVpbmcgY3JlYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCU0MwMDA0Ij4KLTwhLS1Ta2VsZXRvbiBGb2xkZXIgZmllbGQgb2YgdGhlIFNrZWxldG9uIENvbmZpZyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBKYXZhIGJlYW4gc2tlbGV0b24gd2lsbCBiZSBjcmVhdGVkLCBvciBhY2NlcHQgdGhlIGRlZmF1bHQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQlNDMDAxNiI+Ci08IS0tU2hvdyBNYXBwaW5ncyBjaGVja2JveCBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gY3VzdG9taXplIHRoZSBtYXBwaW5ncyBiZXR3ZWVuIG5hbWVzcGFjZXMgYW5kIHBhY2thZ2VzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwvY29udGV4dHM+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGRlZjUyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBheGlzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbCxcCi0gICAgICAgICAgICAgICBheGlzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCi1nZW5lcmF0ZVNvdXJjZUJ1bmRsZT1mYWxzZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTUwYmFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AKLXBsdWdpbk5hbWUgICAgID0gV2ViIHNlcnZpY2VzIEF4aXMgY29udGV4dCBzZW5zaXRpdmUgaGVscAotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1M2Q2YzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI+Ci0JCTxjb250ZXh0cyBmaWxlPSJheGlzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aSIvPgotCQk8Y29udGV4dHMgZmlsZT0iYXhpc2NyZWF0aW9udWktZjFDb250ZXh0cy54bWwiIHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUxMTkzZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyXzEuMC4wLmphcgotYmFrCi10ZW1wCi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzVhYTk5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNGY1YmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0gCi0KLQlUaGlzIHNjcmlwdCBidWlsZCB0aGUgSGVscCBwbHVnLWluIGJ5IHRyYW5zZm9ybWluZyB0aGUgRElUQSBzb3VyY2UgZmlsZXMgaW50byBIVE1MLgotCQotCVRvIHVzZSB0aGlzIHNjcmlwdCwgeW91IG11c3QgaW5zdGFsbCBESVRBLU9UIG9uIHlvdXIgbWFjaGluZSBpbiB0aGUgZGlyZWN0b3J5Ci0JZGVmaW5lZCBieSB0aGUgZGl0YS5vdC5kaXIgcHJvcGVydHkuCi0JCi0JUnVuIHRoZSBkZWZhdWx0IHRhcmdldCBhZnRlciB5b3UgZWRpdCB0aGUgRElUQSBzb3VyY2UgZmlsZXMgdG8gcmVnZW5lcmF0ZSB0aGUgSFRNTC4KLQkKLQlUbyBjdXN0b21pemUgdGhpcyBzY3JpcHQgZm9yIG90aGVyIEhlbHAgcGx1Zy1pbnMsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGFyZ3MuaW5wdXQgcHJvcGVydHkKLQl0byBiZSB0aGUgRElUQSBtYXAgZmlsZSBmb3IgdGhlIHBsdWctaW4uCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGxpbmtzIHRvIHNpYmxpbmcgSGVscCBwbHVnLWlucyBoYXZlIHNjb3BlPSJwZWVyIiwgb3RoZXJ3aXNlIHRoZQotCW91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpbGwgYmUgc2hpZnRlZCBpbmNvcnJlY3RseS4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgeW91IGhhbmQgY29kZSB5b3VyIHBsdWdpbi54bWwgZmlsZSBpbiBteXBsdWdpbi54bWwuIFRoaXMgZmlsZQotCXdpbGwgYmUgY29waWVkIG92ZXIgdGhlIGdlbmVyYXRlZCBwbHVnaW4ueG1sIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgZ2VuZXJhdGVkIGNvcnJlY3RseQotCWJ5IERJVEEtT1QuCi0JCi0JQ2hhbmdlTG9nOgotCTIwMDYtMDQtMDUgQXJ0aHVyIFJ5bWFuIDxyeW1hbkBjYS5pYm0uY29tPgotCS0gQ3JlYXRlZC4KLQkyMDA4LTAxLTA5IEthdGUgUHJpY2UgPGthdGVwQGNhLmlibS5jb20+Ci0JLSBtb2RpZmllZCBmb3IgbmV3IERJVEEtT1QgdmVyc2lvbgotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIzLjAuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3NheGlzYnVpbGRfdG9jLmRpdGFtYXAiIC8+ICAgCi0JCQk8cHJvcGVydHkgbmFtZT0iY2xlYW4udGVtcCIgdmFsdWU9InRydWUiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS5leHRuYW1lIiB2YWx1ZT0iLmRpdGEiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS50ZW1wLmRpciIgbG9jYXRpb249InRlbXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LmRpciIgbG9jYXRpb249IiIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3R5cGUiIHZhbHVlPSJlY2xpcHNlaGVscCIgLz4KLQkJPC9hbnQ+Ci0JCTxjb3B5IGZpbGU9Im15cGx1Z2luLnhtbCIgdG9maWxlPSJwbHVnaW4ueG1sIiBvdmVyd3JpdGU9InllcyIgLz4KLQk8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWRlOGQzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4xLjAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGEzZDQ2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd3NheGlzYnVpbGRfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzLyouaHRtKixcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICB0b3BpY3MvLFwKLSAgICAgICAgICAgICAgIHdzYXhpc19yZWx0YWJsZV90b2MueG1sCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotICAgICAgICAgICAgICAgY29uY2VwdHMvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouZGl0YSxcCi0gICAgICAgICAgICAgICB0b3BpY3MvLFwKLSAgICAgICAgICAgICAgIHdzYXhpc19yZWx0YWJsZV90b2MueG1sLFwKLSAgICAgICAgICAgICAgIHdzYXhpc2J1aWxkX3RvYy54bWwsXAotICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sCi1iaW4uZXhjbHVkZXMgPSBEb2NCdWlsZC54bWwsXAotICAgICAgICAgICAgICAgbXlQbHVnaW4qLnhtbCxcCi0gICAgICAgICAgICAgICB0b3BpY3MvKi5kaXRhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9fMi5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L18yLmNmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBlODQwMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L18yLmNmcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MjMyNDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjBlMzFmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMjo0OSBFRFQgMjAwNw0KLW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyPW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyXG4xLjAuMzAwLnF1YWxpZmllcg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzg3ZTY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEyOjQ5IEVEVCAyMDA3DQotbHVjZW5lPTEuNC4xMDMudjIwMDYwNjAxDQotYW5hbHl6ZXI9b3JnLmVjbGlwc2UuaGVscC5iYXNlXCMzLjIuMC52MjAwNjA2MDE/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3Yjk4ODQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEyOjQ5IEVEVCAyMDA3DQotL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2NvbmNlcHRzL2NheGlzdG92ZXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3R0b21jYXRzZXJ2Lmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI1ZDBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2UzNjgwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotCQk8dG9jIGZpbGU9IndzYXhpc2J1aWxkX3RvYy54bWwiIC8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotCTwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLm1hcGxpc3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLm1hcGxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDM4MjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3c2F4aXNidWlsZF90b2MuZGl0YW1hcCIvPgotICA8L25hdj4KLSAgPGxpbms+Ci0gICAgPG1hcCBmaWxlPSJ3c2F4aXNidWlsZF90b2MuZGl0YW1hcCIvPgotICA8L2xpbms+Ci08L21hcGxpc3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBlZDEyYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxpbmRleD4KLSAgPGVudHJ5IGtleXdvcmQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgICA8dG9waWMgaHJlZj0idG9waWNzL2NheGlzdG92ZXIuaHRtbCNheGlzb3ZlcnZpZXciIHRpdGxlPSJDcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudHMiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic2tlbGV0b24gV2ViIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHNrbHdzZGxhLmh0bWwjdHNrbHdzZGxhIiB0aXRsZT0iQ3JlYXRpbmcgYSBKYXZhIGJlYW4gc2tlbGV0b24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2UgY2xpZW50cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3RzYW1wYXBwYS5odG1sI3RzYW1wYXBwYSIgdGl0bGU9IkdlbmVyYXRpbmcgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwjY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciIgdGl0bGU9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQiPgotICAgICAgPHRvcGljIGhyZWY9InRvcGljcy9jYXhpc3RvdmVyLmh0bWwjYXhpc292ZXJ2aWV3IiB0aXRsZT0iQ3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnRzIi8+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmcgYSBXZWIgc2VydmljZSI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHdzYmVhbmEuaHRtbCN0d3NiZWFuYSIgdGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0ic2tlbGV0b24gV2ViIHNlcnZpY2VzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90c2tsd3NkbGEuaHRtbCN0c2tsd3NkbGEiIHRpdGxlPSJDcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2UgY2xpZW50cyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0b3BpY3MvdHNhbXBhcHBhLmh0bWwjdHNhbXBhcHBhIiB0aXRsZT0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwjY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciIgdGl0bGU9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJBeGlzMSBydW50aW1lIGVudmlyb25tZW50Ij4KLSAgICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJKYXZhIGJlYW5zIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRvcGljcy90d3NiZWFuYS5odG1sI3R3c2JlYW5hIiB0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iVG9tY2F0IHNlcnZlciI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIHNlcnZlcnMgZm9yIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwjY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciIgdGl0bGU9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODZmYjg3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSA9IEF4aXMgV2ViIHNlcnZpY2VzIGRvY3VtZW50YXRpb24KLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NlMzY4MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0JCTx0b2MgZmlsZT0id3NheGlzYnVpbGRfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXJpbmRleC54bWwiLz4KLTwvZXh0ZW5zaW9uPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS5sdWNlbmVTZWFyY2hQYXJ0aWNpcGFudHMiPgotICAgICAgPGJpbmRpbmcgcGFydGljaXBhbnRJZD0ib3JnLmVjbGlwc2UuaGVscC5iYXNlLnhodG1sIi8+Ci0gICA8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyOTZhYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy9jYXhpc3RvdmVyLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iDQotICJjb25jZXB0LmR0ZCI+DQotPGNvbmNlcHQgaWQ9ImF4aXNvdmVydmlldyIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+Q3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50PC90aXRsZT4NCi08c2hvcnRkZXNjPlRoaXMgcnVudGltZSBlbnZpcm9ubWVudHMgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3INCi10aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcyBydW50aW1lIGVudmlyb25tZW50PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+DQotPC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTxjb25ib2R5Pg0KLTxzZWN0aW9uPjx0aXRsZT5BcGFjaGUgQXhpczEgT3ZlcnZpZXc8L3RpdGxlPjxwPkF4aXMgaXMgdGhlIHRoaXJkIGdlbmVyYXRpb24NCi1vZiB0aGUgQXBhY2hlIFNPQVAgaW1wbGVtZW50YXRpb24uIEl0IGV2b2x2ZWQgZnJvbSBBcGFjaGUgU09BUCB0byBtYWtlIHRoZQ0KLVNPQVAgZW5naW5lIG1vcmUgZmxleGlibGUsIGNvbmZpZ3VyYWJsZSwgYW5kIGFibGUgdG8gaGFuZGxlIGJvdGggU09BUCBhbmQNCi10aGUgdXBjb21pbmcgWE1MIFByb3RvY29sIHNwZWNpZmljYXRpb24gZnJvbSB0aGUgVzNDIG9wZW4tc291cmNlIGVmZm9ydC4gQXhpcw0KLWlzIGJhc2VkIG9uIEpTUiAxMDEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQVBJcyBmb3IgWE1MIGJhc2VkIFJQQyAoYWxzbyBrbm93bg0KLWFzIEpBWC1SUEMpLiBKU1IgMTAxIHByb3ZpZGVzIGEgc2luZ2xlIGludGVyZmFjZSB0byBhbnkgWE1MLWJhc2VkIFJQQyBtZWNoYW5pc20sDQotaW5jbHVkaW5nIFNPQVAuPC9wPjxwPldlYiBzZXJ2aWNlcyBhcHBsaWNhdGlvbiBzZXJ2ZXIgdXNlcyBBeGlzIHdpdGhpbiBhIHNlcnZsZXQNCi10byBwcm9jZXNzIHRoZSBpbmNvbWluZyBtZXNzYWdlLCBleHRyYWN0IGluZm9ybWF0aW9uIGZyb20gdGhlIG1lc3NhZ2UgaGVhZGVycywNCi1hbmQgcGF5bG9hZHMsIGFzIHdlbGwgYXMgY29uZm9ybWluZyB0byB0aGUgcGFydGljdWxhciBSUEMgc2VtYW50aWNzLiA8L3A+PC9zZWN0aW9uPg0KLTwvY29uYm9keT4NCi08cmVsYXRlZC1saW5rcz4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5XZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5KQVgtUlBDPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08L3JlbGF0ZWQtbGlua3M+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL2NheGlzdG92ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ1NzU4Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy9jYXhpc3RvdmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhpcyBydW50aW1lIGVudmlyb25tZW50cyBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvciB0aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhpcyBydW50aW1lIGVudmlyb25tZW50cyBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvciB0aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgb3ZlcnZpZXciIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgb3ZlcnZpZXciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHRvbWNhdHNlcnYuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3R3c2JlYW5hLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90c2tsd3NkbGEuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3RzYW1wYXBwYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImF4aXNvdmVydmlldyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iYXhpc292ZXJ2aWV3Ij48YSBuYW1lPSJheGlzb3ZlcnZpZXciPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoaXMgcnVudGltZSBlbnZpcm9ubWVudHMgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3IKLXRoZSBvcGVuIEFwYWNoZSBBeGlzIHBsYXRmb3JtLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkFwYWNoZSBBeGlzMSBPdmVydmlldzwvaDQ+PHA+QXhpcyBpcyB0aGUgdGhpcmQgZ2VuZXJhdGlvbgotb2YgdGhlIEFwYWNoZSBTT0FQIGltcGxlbWVudGF0aW9uLiBJdCBldm9sdmVkIGZyb20gQXBhY2hlIFNPQVAgdG8gbWFrZSB0aGUKLVNPQVAgZW5naW5lIG1vcmUgZmxleGlibGUsIGNvbmZpZ3VyYWJsZSwgYW5kIGFibGUgdG8gaGFuZGxlIGJvdGggU09BUCBhbmQKLXRoZSB1cGNvbWluZyBYTUwgUHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBmcm9tIHRoZSBXM0Mgb3Blbi1zb3VyY2UgZWZmb3J0LiBBeGlzCi1pcyBiYXNlZCBvbiBKU1IgMTAxIEphdmHihKIgQVBJcyBmb3IgWE1MIGJhc2VkIFJQQyAoYWxzbyBrbm93bgotYXMgSkFYLVJQQykuIEpTUiAxMDEgcHJvdmlkZXMgYSBzaW5nbGUgaW50ZXJmYWNlIHRvIGFueSBYTUwtYmFzZWQgUlBDIG1lY2hhbmlzbSwKLWluY2x1ZGluZyBTT0FQLjwvcD4KLTxwPldlYiBzZXJ2aWNlcyBhcHBsaWNhdGlvbiBzZXJ2ZXIgdXNlcyBBeGlzIHdpdGhpbiBhIHNlcnZsZXQKLXRvIHByb2Nlc3MgdGhlIGluY29taW5nIG1lc3NhZ2UsIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgbWVzc2FnZSBoZWFkZXJzLAotYW5kIHBheWxvYWRzLCBhcyB3ZWxsIGFzIGNvbmZvcm1pbmcgdG8gdGhlIHBhcnRpY3VsYXIgUlBDIHNlbWFudGljcy4gPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvYT48L3N0cm9uZz48YnIgLz4KLUlmIHlvdSBwbGFuIHRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIHRoYXQgdXNlcyBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgYXMgaXRzIHNlcnZlciwgVG9tY2F0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhIHNlcnZlciBjcmVhdGVkIGJlZm9yZSB5b3UgYmVnaW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdHdzYmVhbmEuaHRtbCI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBXZWIgU2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBuZXcgV2ViIHNlcnZpY2UsIGNvbmZpZ3VyaW5nIGl0IGZvciBkZXBsb3ltZW50LCBhbmQgZGVwbG95aW5nIHRoZSBXZWIgc2VydmljZSB0byBhIHNlcnZlci4gT25jZSB5b3VyIFdlYiBzZXJ2aWNlIGlzIGRlcGxveWVkLCB0aGUgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgdGhlIGNsaWVudCBwcm94eSBhbmQgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLiBXaGVuIHlvdSBoYXZlIGNvbXBsZXRlZCB0ZXN0aW5nLCB5b3UgY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3Rza2x3c2RsYS5odG1sIj5DcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgc2tlbGV0b24gYmVhbiBmcm9tIGFuIGV4aXN0aW5nIFdTREwgZG9jdW1lbnQuIFRoZSBza2VsZXRvbiBiZWFuIGNvbnRhaW5zIGEgc2V0IG9mIG1ldGhvZHMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBvcGVyYXRpb25zIGRlc2NyaWJlZCBpbiB0aGUgV1NETCBkb2N1bWVudC4gV2hlbiB0aGUgYmVhbiBpcyBjcmVhdGVkLCBlYWNoIG1ldGhvZCBoYXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIHRoYXQgeW91IHJlcGxhY2UgYnkgZWRpdGluZyB0aGUgYmVhbi48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi90b3BpY3MvdHNhbXBhcHBhLmh0bWwiPkdlbmVyYXRpbmcgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIGEgSmF2YSBiZWFuIHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdyB0byBjb2RlIGEgcHJveHkgZmlsZS48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuaHRtbCI+SkFYLVJQQzwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNhbXBhcHBhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2FtcGFwcGEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkzMzBkOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2FtcGFwcGEuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InRzYW1wYXBwYSIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+R2VuZXJhdGluZyBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24NCi1mcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+DQotPHRpdGxlYWx0cz4NCi08c2VhcmNodGl0bGU+R2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tDQotYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+VGhlIFdlYiBTZXJ2aWNlIENsaWVudCB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIg0KLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4NCi1wcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cNCi10byBjb2RlIGEgcHJveHkgZmlsZS48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlIGNsaWVudHM8L2luZGV4dGVybT48L2luZGV4dGVybT4NCi08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcyBydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5XZWIgc2VydmljZQ0KLWNsaWVudHM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5Pg0KLTxwcmVyZXE+PHA+UHJlcmVxdWlzaXRlczo8L3A+PG9sPg0KLTxsaSBjb25yZWY9InR3c2JlYW5hLmRpdGEjdHdzYmVhbmEvY3JlYXRldG9tY2F0bGluayI+PC9saT4NCi08bGk+RGlzY292ZXIgYW5kIGltcG9ydCBhIFdTREwgZG9jdW1lbnQgaW50byB0aGUgV2ViIHByb2plY3QuIFlvdSBjYW4gb25seQ0KLXVzZSBhIFdTREwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc2VydmljZSBlbGVtZW50LjwvbGk+DQotPC9vbD48L3ByZXJlcT4NCi08Y29udGV4dD5UbyBnZW5lcmF0ZSBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24NCi1mcm9tIGEgZGlzY292ZXJlZCBXU0RMIGRvY3VtZW50OjwvY29udGV4dD4NCi08c3RlcHM+DQotPHN0ZXA+PGNtZD5Td2l0Y2ggdG8gdGhlIEoyRUUgcGVyc3BlY3RpdmUgKDx1aWNvbnRyb2w+V2luZG93ID4gT3BlbiBQZXJzcGVjdGl2ZQ0KLT4gSjJFRTwvdWljb250cm9sPikuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+SW4gdGhlIE5hdmlnYXRvciB2aWV3LCBzZWxlY3QgdGhlIFdlYiBwcm9qZWN0IGluIHdoaWNoIHlvdSB3YW50DQotdG8gZ2VuZXJhdGUgYSBzYW1wbGUgYXBwbGljYXRpb24uPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+RmlsZSA+IE5ldyA+IE90aGVyPC91aWNvbnRyb2w+LiBTZWxlY3QgIDx1aWNvbnRyb2w+V2ViDQotU2VydmljZXM8L3VpY29udHJvbD4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLg0KLVNlbGVjdCB0aGUgIDx1aWNvbnRyb2w+V2ViIFNlcnZpY2UgQ2xpZW50PC91aWNvbnRyb2w+IHdpemFyZC4gQ2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZXMgcGFnZTogPC9jbWQ+DQotPHN1YnN0ZXBzPg0KLTxzdWJzdGVwPjxjbWQ+RW50ZXIgdGhlIFVSSSB0byB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBmaWxlIHRoYXQgd2lsbCBiZSB1c2VkDQotdG8gZ2VuZXJhdGUgdGhlIGNsaWVudC48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgdGhlIHR5cGUgb2YgcHJveHkgdG8gYmUgZ2VuZXJhdGVkPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQNCi10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOjwvY21kPjxpbmZvPjx1bD4NCi08bGk+RGV2ZWxvcDogdGhpcyB3aWxsIGRldmVsb3AgdGhlIFdTREwgZGVmaW5pdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlDQotV2ViIHNlcnZpY2UuIFRoaXMgaW5jbHVkZXMgc3VjaCB0YXNrcyBhcyBjcmVhdGluZyB0aGUgbW9kdWxlcyB3aGljaCB3aWxsIGNvbnRhaW4NCi10aGUgZ2VuZXJhdGVkIGNvZGUgYW5kIEphdmEgZmlsZXMsIGFzIHdlbGwgYXMgY29weWluZyB0aGUgQXhpcyBKQVJzLi48L2xpPg0KLTxsaT5Bc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQNCi1nZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIuPC9saT4NCi08bGk+RGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBzZXJ2aWNlLjwvbGk+DQotPGxpPkluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIFdlYiBtb2R1bGUgYW5kIEVBUnMgb24gdGhlDQotdGFyZ2V0IHNlcnZlci48L2xpPg0KLTxsaT5TdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQNCi1vbiBpdC4gVGhlIHNlcnZlci1jb25maWcud3NkZCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLjwvbGk+DQotPGxpPlRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZSwgc3VjaA0KLWFzIHVzaW5nIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBvciBzYW1wbGUgSlNQcy48L2xpPg0KLTwvdWw+PC9pbmZvPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91DQotd2FudCB0byBkZXBsb3kgeW91ciBjbGllbnQgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkNCi1hIGRpZmZlcmVudCBzZXJ2ZXIuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQ0KLXdhbnQgdG8gZGVwbG95IHlvdXIgY2xpZW50IHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQ0KLWEgZGlmZmVyZW50IHJ1bnRpbWUuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHRoZSBjbGllbnQgcHJvamVjdDogdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgcHJvamVjdA0KLXNlbGVjdGVkIGluIHlvdXIgd29ya3NwYWNlIGlzIGRpc3BsYXllZC4gVG8gc2VsZWN0IGEgZGlmZmVyZW50IHByb2plY3QgYW5kDQotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuPC9jbWQ+PGluZm8+RW5zdXJlIHRoYXQgdGhlIHByb2plY3Qgc2VsZWN0ZWQNCi1hcyB0aGUgQ2xpZW50IFdlYiBQcm9qZWN0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBTZXJ2aWNlIFdlYiBQcm9qZWN0LCBvciB0aGUNCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9pbmZvPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPk1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgc2VuZCB0aGUgV2ViIHNlcnZpY2UgdHJhZmZpYw0KLXRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLCB3aGljaCBhbGxvd3MgeW91IHRvIHdhdGNoIHRoZSBTT0FQIHRyYWZmaWMgZ2VuZXJhdGVkDQotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLiBBbHRlcm5hdGVseQ0KLXlvdSBjYW4gbWFudWFsbHkgc2V0IHVwIGEgVENQL0lQIG1vbml0b3IgYXMgZGVzY3JpYmVkIGluIDx4cmVmIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuZGl0YSINCi1zY29wZT0icGVlciI+VXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC94cmVmPjwvY21kPjwvc3Vic3RlcD4NCi08L3N1YnN0ZXBzPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IFRoaXMgcGFuZWwgc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4NCi1JdCBsaXN0cyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBwcm94eSB3aWxsIGJlIGdlbmVyYXRlZCwgYW5kIHlvdSBjYW4gb3B0aW9uYWxseQ0KLWNyZWF0ZSBjdXN0b20gbWFwcGluZ3MgYmV0d2VlbiBuYW1lc3BhY2VzIGFuZCBwYWNrYWdlcy48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBOYW1lc3BhY2UgdG8gUGFja2FnZSBNYXBwaW5ncyBwYWdlOiBpZiB5b3Ugc2VsZWN0ZWQNCi0gPHVpY29udHJvbD5EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIG5hbWVzcGFjZSB0byBwYWNrYWdlPC91aWNvbnRyb2w+IG9uDQotdGhlIHByZXZpb3VzIHBhZ2UsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhZ2UgYnkNCi1jbGlja2luZyAgPHVpY29udHJvbD5BZGQ8L3VpY29udHJvbD4uIEFsdGVybmF0ZWx5LCB5b3UgY2FuIGNsaWNrICA8Yj5JbXBvcnQ8L2I+IHRvDQotaW1wb3J0IGN1c3RvbSBtYXBwaW5nIHBhaXJzIGZyb20gYSAgPHN5c3RlbW91dHB1dD4ucHJvcGVydGllczwvc3lzdGVtb3V0cHV0PiBmaWxlLg0KLVRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0ICA8Y29kZXBoPjx2YXJuYW1lPm5hbWVzcGFjZT1wYWNrYWdlPC92YXJuYW1lPjwvY29kZXBoPi48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBUaGlzIHBhZ2UgZGlzcGxheXMgaWYgeW91IHNlbGVjdGVkDQotdG8gdGVzdCB5b3VyIGNsaWVudC4gU2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IHRoYXQgeW91IHdpbGwgdXNlIHRvIHRlc3QgdGhlDQotcHJveHksIGFuZCB0aGUgbWV0aG9kcyB0aGF0IHlvdSB3YW50IGluY2x1ZGVkIGluIHRoZSBwcm94eS4gTm90ZSB0aGF0IHRoZQ0KLVVuaXZlcnNhbCBUZXN0IENsaWVudCAoVVRDKSBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBXZWIgc2VydmljZSBjbGllbnRzIGRlcGxveWVkDQotb24gPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJXZWJTcGhlcmUiPldlYlNwaGVyZTwvdG0+IHNlcnZlcnMuPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LiBJZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0DQotdGhlIHByb3h5LCB0aGUgdGVzdCBjbGllbnQgd2lsbCBvcGVuIGluIGEgYnJvd3NlciB3aW5kb3cuPC9jbWQ+PC9zdGVwPg0KLTwvc3RlcHM+DQotPHJlc3VsdD48cD5UaGUgZ2VuZXJhdGVkIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gcHJveHkgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlDQotY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLiBUaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMNCi1ob3cgdG8gY29kZSB0aGUgcHJveHkgZmlsZS48L3A+PHA+T25jZSB5b3UgaGF2ZSBnZW5lcmF0ZWQgeW91ciA8dG0gdG1jbGFzcz0ic3BlY2lhbCINCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGllbnQNCi1wcm94eSwgeW91IG1heSB0ZXN0IHRoZSBtZXRob2RzIG9mIHRoZSBXZWIgc2VydmljZSB0aHJvdWdoIHRoZSBwcm94eSB1c2luZw0KLVdlYiBTZXJ2aWNlcyBzYW1wbGUgSlNQcyBvciB0aGUgVW5pdmVyc2FsIHRlc3QgY2xpZW50LjwvcD48dWwgb3V0cHV0Y2xhc3M9IndzY2xpZW50dGVzdG9wdGlvbnMiPg0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywNCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogPGNvZGVwaD5odHRwOi8vbG9jYWxob3N0OiA8dmFybmFtZT5wb3J0PC92YXJuYW1lPi8gPHZhcm5hbWU+V2ViUHJvamVjdDwvdmFybmFtZT5DbGllbnQvc2FtcGxlPGkNCi0+QmVhbk5hbWU8L2k+LyA8dmFybmFtZT5XZWJTZXJ2aWNlTmFtZTwvdmFybmFtZT4vVGVzdENsaWVudC5qc3A8L2NvZGVwaD4gWW91DQotY2FuIHVzZSB0aGlzIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSBieSBzZWxlY3RpbmcgYSBtZXRob2QsDQotZW50ZXJpbmcgYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8dWljb250cm9sPkludm9rZTwvdWljb250cm9sPi4NCi1UaGUgcmVzdWx0IG9mIHRoZSBtZXRob2Qgd2lsbCBkaXNwbGF5IGluIHRoZSByZXN1bHRzIHBhbmUuPC9saT4NCi08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwNCi10aGUgRXhwbG9yZXIgd2lsbCBvcGVuLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3Ugd2FudCB0byB0ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQNCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8Yj5HbzwvYj4uIFRoZSByZXN1bHQgd2lsbCBkaXNwbGF5IGluIHRoZSBTdGF0dXMgcGFuZS48L2xpPg0KLTwvdWw+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBXZWIgcHJvamVjdCwgcmVmZXIgdG8gdGhlIFdlYiBhcHBsaWNhdGlvbg0KLWRldmVsb3BtZW50IGRvY3VtZW50YXRpb24uPC9wPjwvcmVzdWx0Pg0KLTwvdGFza2JvZHk+DQotPHJlbGF0ZWQtbGlua3M+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPg0KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4NCi08L2xpbmtsaXN0Pg0KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiDQotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvbGlua3RleHQ+PC9saW5rPg0KLTwvbGlua2xpc3Q+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhIiBzY29wZT0icGVlciI+DQotPGxpbmt0ZXh0PldTREwgZG9jdW1lbnRzPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08L3JlbGF0ZWQtbGlua3M+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3RzYW1wYXBwYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNhbXBhcHBhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NWNiYWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNhbXBhcHBhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIGEgSmF2YSBiZWFuIHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdyB0byBjb2RlIGEgcHJveHkgZmlsZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFdlYiBTZXJ2aWNlIENsaWVudCB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyBhIEphdmEgYmVhbiBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cgdG8gY29kZSBhIHByb3h5IGZpbGUuIiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZSBjbGllbnRzLCBXZWIgc2VydmljZXMsIFdlYiBzZXJ2aWNlIGNsaWVudHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlIGNsaWVudHMsIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2UgY2xpZW50cyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jYXhpc3RvdmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHNhbXBhcHBhIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+R2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tCi1hIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHNhbXBhcHBhIj48YSBuYW1lPSJ0c2FtcGFwcGEiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkdlbmVyYXRpbmcgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24KLWZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50PC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIGEgSmF2YeKEoiBiZWFuCi1wcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cKLXRvIGNvZGUgYSBwcm94eSBmaWxlLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PHA+UHJlcmVxdWlzaXRlczo8L3A+Ci08b2w+Ci08bGk+SWYgeW91IGFyZSB1c2luZyB0aGUgQXBhY2hlIEpha2FydGEgVG9tY2F0IHNlcnZsZXQKLWNvbnRhaW5lciBhcyB5b3VyIHNlcnZlciwgeW91IG11c3QgaW5zdGFsbCBpdCwgY29uZmlndXJlIGFuIGluc3RhbmNlIG9mIGl0LAotYW5kIGNyZWF0ZSBhIFdlYiBwcm9qZWN0IHRhcmdldGVkIHRvIGl0IGFzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSJ0dG9tY2F0c2Vydi5odG1sIj5DcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3Q8L2E+PC9saT4KLQotPGxpPkRpc2NvdmVyIGFuZCBpbXBvcnQgYSBXU0RMIGRvY3VtZW50IGludG8gdGhlIFdlYiBwcm9qZWN0LiBZb3UgY2FuIG9ubHkKLXVzZSBhIFdTREwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc2VydmljZSBlbGVtZW50LjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gZ2VuZXJhdGUgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24KLWZyb20gYSBkaXNjb3ZlcmVkIFdTREwgZG9jdW1lbnQ6PC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5Td2l0Y2ggdG8gdGhlIEoyRUUgcGVyc3BlY3RpdmUgKDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldpbmRvdyAmZ3Q7IE9wZW4gUGVyc3BlY3RpdmUKLSZndDsgSjJFRTwvc3Bhbj4pLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIE5hdmlnYXRvciB2aWV3LCBzZWxlY3QgdGhlIFdlYiBwcm9qZWN0IGluIHdoaWNoIHlvdSB3YW50Ci10byBnZW5lcmF0ZSBhIHNhbXBsZSBhcHBsaWNhdGlvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlICZndDsgTmV3ICZndDsgT3RoZXI8L3NwYW4+LiBTZWxlY3QgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYgotU2VydmljZXM8L3NwYW4+IGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHZhcmlvdXMgV2ViIHNlcnZpY2Ugd2l6YXJkcy4KLVNlbGVjdCB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBTZXJ2aWNlIENsaWVudDwvc3Bhbj4gd2l6YXJkLiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlcyBwYWdlOiA8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPkVudGVyIHRoZSBVUkkgdG8gdGhlIFdTREwsIFdTSUwsIG9yIEhUTUwgZmlsZSB0aGF0IHdpbGwgYmUgdXNlZAotdG8gZ2VuZXJhdGUgdGhlIGNsaWVudC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIHR5cGUgb2YgcHJveHkgdG8gYmUgZ2VuZXJhdGVkPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQKLXRvIGNvbXBsZXRlIHVzaW5nIHRoZSBzbGlkZXI6PC9zcGFuPiA8dWw+Ci08bGk+RGV2ZWxvcDogdGhpcyB3aWxsIGRldmVsb3AgdGhlIFdTREwgZGVmaW5pdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlCi1XZWIgc2VydmljZS4gVGhpcyBpbmNsdWRlcyBzdWNoIHRhc2tzIGFzIGNyZWF0aW5nIHRoZSBtb2R1bGVzIHdoaWNoIHdpbGwgY29udGFpbgotdGhlIGdlbmVyYXRlZCBjb2RlIGFuZCBKYXZhIGZpbGVzLCBhcyB3ZWxsIGFzIGNvcHlpbmcgdGhlIEF4aXMgSkFScy4uPC9saT4KLQotPGxpPkFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudAotZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyLjwvbGk+Ci0KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4KLQotPGxpPkluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIFdlYiBtb2R1bGUgYW5kIEVBUnMgb24gdGhlCi10YXJnZXQgc2VydmVyLjwvbGk+Ci0KLTxsaT5TdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQKLW9uIGl0LiBUaGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9saT4KLQotPGxpPlRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZSwgc3VjaAotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIGNsaWVudCB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgc2VydmVyLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHJ1bnRpbWU6IHRoZSBkZWZhdWx0IHJ1bnRpbWUgaXMgZGlzcGxheWVkLiBJZiB5b3UKLXdhbnQgdG8gZGVwbG95IHlvdXIgY2xpZW50IHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgcnVudGltZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIGNsaWVudCBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0Ci1zZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZAotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuPC9zcGFuPiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZAotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5Nb25pdG9yIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIHNlbmQgdGhlIFdlYiBzZXJ2aWNlIHRyYWZmaWMKLXRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLCB3aGljaCBhbGxvd3MgeW91IHRvIHdhdGNoIHRoZSBTT0FQIHRyYWZmaWMgZ2VuZXJhdGVkCi1ieSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRvIHRlc3QgdGhpcyB0cmFmZmljIGZvciBXUy1JIGNvbXBsaWFuY2UuIEFsdGVybmF0ZWx5Ci15b3UgY2FuIG1hbnVhbGx5IHNldCB1cCBhIFRDUC9JUCBtb25pdG9yIGFzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWwiPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvYT48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IFRoaXMgcGFuZWwgc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4KLUl0IGxpc3RzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIHByb3h5IHdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgeW91IGNhbiBvcHRpb25hbGx5Ci1jcmVhdGUgY3VzdG9tIG1hcHBpbmdzIGJldHdlZW4gbmFtZXNwYWNlcyBhbmQgcGFja2FnZXMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5XZWIgU2VydmljZSBOYW1lc3BhY2UgdG8gUGFja2FnZSBNYXBwaW5ncyBwYWdlOiBpZiB5b3Ugc2VsZWN0ZWQKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIG5hbWVzcGFjZSB0byBwYWNrYWdlPC9zcGFuPiBvbgotdGhlIHByZXZpb3VzIHBhZ2UsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhZ2UgYnkKLWNsaWNraW5nICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+LiBBbHRlcm5hdGVseSwgeW91IGNhbiBjbGljayAgPHN0cm9uZz5JbXBvcnQ8L3N0cm9uZz4gdG8KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDx0dCBjbGFzcz0ic3lzb3V0Ij4ucHJvcGVydGllczwvdHQ+IGZpbGUuCi1UaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCAgPHNhbXAgY2xhc3M9ImNvZGVwaCI+PHZhciBjbGFzcz0idmFybmFtZSI+bmFtZXNwYWNlPXBhY2thZ2U8L3Zhcj48L3NhbXA+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBUaGlzIHBhZ2UgZGlzcGxheXMgaWYgeW91IHNlbGVjdGVkCi10byB0ZXN0IHlvdXIgY2xpZW50LiBTZWxlY3QgdGhlIHRlc3QgZmFjaWxpdHkgdGhhdCB5b3Ugd2lsbCB1c2UgdG8gdGVzdCB0aGUKLXByb3h5LCBhbmQgdGhlIG1ldGhvZHMgdGhhdCB5b3Ugd2FudCBpbmNsdWRlZCBpbiB0aGUgcHJveHkuIE5vdGUgdGhhdCB0aGUKLVVuaXZlcnNhbCBUZXN0IENsaWVudCAoVVRDKSBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBXZWIgc2VydmljZSBjbGllbnRzIGRlcGxveWVkCi1vbiBXZWJTcGhlcmU8c3VwPsKuPC9zdXA+IHNlcnZlcnMuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+LiBJZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0Ci10aGUgcHJveHksIHRoZSB0ZXN0IGNsaWVudCB3aWxsIG9wZW4gaW4gYSBicm93c2VyIHdpbmRvdy48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIGdlbmVyYXRlZCBKYXZhIGJlYW4gcHJveHkgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlCi1jYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcwotaG93IHRvIGNvZGUgdGhlIHByb3h5IGZpbGUuPC9wPgotPHA+T25jZSB5b3UgaGF2ZSBnZW5lcmF0ZWQgeW91ciBKYXZhIGNsaWVudAotcHJveHksIHlvdSBtYXkgdGVzdCB0aGUgbWV0aG9kcyBvZiB0aGUgV2ViIHNlcnZpY2UgdGhyb3VnaCB0aGUgcHJveHkgdXNpbmcKLVdlYiBTZXJ2aWNlcyBzYW1wbGUgSlNQcyBvciB0aGUgVW5pdmVyc2FsIHRlc3QgY2xpZW50LjwvcD4KLTx1bCBjbGFzcz0id3NjbGllbnR0ZXN0b3B0aW9ucyI+Ci08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5IHVzaW5nIFdlYiBzZXJ2aWNlIEpTUHMsCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL2xvY2FsaG9zdDogPHZhciBjbGFzcz0idmFybmFtZSI+cG9ydDwvdmFyPi8gPHZhciBjbGFzcz0idmFybmFtZSI+V2ViUHJvamVjdDwvdmFyPkNsaWVudC9zYW1wbGU8ZW0+QmVhbk5hbWU8L2VtPi8gPHZhciBjbGFzcz0idmFybmFtZSI+V2ViU2VydmljZU5hbWU8L3Zhcj4vVGVzdENsaWVudC5qc3A8L3NhbXA+IFlvdQotY2FuIHVzZSB0aGlzIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSBieSBzZWxlY3RpbmcgYSBtZXRob2QsCi1lbnRlcmluZyBhIHZhbHVlIGZvciB0aGUgbWV0aG9kLCBhbmQgY2xpY2tpbmcgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkludm9rZTwvc3Bhbj4uCi1UaGUgcmVzdWx0IG9mIHRoZSBtZXRob2Qgd2lsbCBkaXNwbGF5IGluIHRoZSByZXN1bHRzIHBhbmUuPC9saT4KLQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsCi10aGUgRXhwbG9yZXIgd2lsbCBvcGVuLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3Ugd2FudCB0byB0ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQKLWluZm9ybWF0aW9uLCBhbmQgY2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4uIFRoZSByZXN1bHQgd2lsbCBkaXNwbGF5IGluIHRoZSBTdGF0dXMgcGFuZS48L2xpPgotCi08L3VsPgotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBXZWIgcHJvamVjdCwgcmVmZXIgdG8gdGhlIFdlYiBhcHBsaWNhdGlvbgotZGV2ZWxvcG1lbnQgZG9jdW1lbnRhdGlvbi48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL2NheGlzdG92ZXIuaHRtbCIgdGl0bGU9IlRoaXMgcnVudGltZSBlbnZpcm9ubWVudHMgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3IgdGhlIG9wZW4gQXBhY2hlIEF4aXMgcGxhdGZvcm0uIj5DcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCI+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIj5XU0RMIGRvY3VtZW50czwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNrbHdzZGxhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2tsd3NkbGEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3ODgzNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90c2tsd3NkbGEuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICIuLi8uLi9kdGQvdGFzay5kdGQiPg0KLTx0YXNrIGlkPSJ0c2tsd3NkbGEiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkNyZWF0aW5nIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iDQotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlDQotQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvdGl0bGU+DQotPHRpdGxlYWx0cz4NCi08c2VhcmNodGl0bGU+Q3JlYXRpbmcgYSBKYXZhIGJlYW4gc2tlbGV0b24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlDQotQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+VGhlIFdlYiBzZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIHNrZWxldG9uIGJlYW4NCi1mcm9tIGFuIGV4aXN0aW5nIFdTREwgZG9jdW1lbnQuIFRoZSBza2VsZXRvbiBiZWFuIGNvbnRhaW5zIGEgc2V0IG9mIG1ldGhvZHMNCi10aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZQ0KLWJlYW4gaXMgY3JlYXRlZCwgZWFjaCBtZXRob2QgaGFzIGEgdHJpdmlhbCBpbXBsZW1lbnRhdGlvbiB0aGF0IHlvdSByZXBsYWNlDQotYnkgZWRpdGluZyB0aGUgYmVhbi48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPnNrZWxldG9uIFdlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPnNrZWxldG9uDQotV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4NCi08L21ldGFkYXRhPjwvcHJvbG9nPg0KLTx0YXNrYm9keT4NCi08cHJlcmVxPjxwPlByZXJlcXVpc2l0ZXM6PC9wPjxvbD4NCi08bGkgY29ucmVmPSJ0d3NiZWFuYS5kaXRhI3R3c2JlYW5hL2NyZWF0ZXRvbWNhdGxpbmsiPjwvbGk+DQotPGxpPkNyZWF0ZSBvciBpbXBvcnQgYSBXU0RMIGZpbGUgaW50byB0aGUgV2ViIENvbnRlbnQgZm9sZGVyIG9mIHRoZSBXZWIgcHJvamVjdC4NCi1Zb3UgY2FuIG9ubHkgdXNlIGEgV1NETCBmaWxlIHRoYXQgY29udGFpbnMgYSBzZXJ2aWNlIGVsZW1lbnQuPC9saT4NCi08L29sPjwvcHJlcmVxPg0KLTxjb250ZXh0PlRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUgdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lDQotZW52aXJvbm1lbnQ6PC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPlN3aXRjaCB0byB0aGUgSjJFRSBwZXJzcGVjdGl2ZSAoPHVpY29udHJvbD5XaW5kb3cgPiBPcGVuIFBlcnNwZWN0aXZlDQotPiBKMkVFPC91aWNvbnRyb2w+KS48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3LCBzZWxlY3QgdGhlIFdTREwgZmlsZSB0aGF0IHlvdSBjcmVhdGVkDQotb3IgaW1wb3J0ZWQgaW50byB0aGUgV2ViIENvbnRlbnQgZm9sZGVyIG9mIHlvdXIgV2ViIHByb2plY3QuPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+RmlsZSA+IE5ldyA+IE90aGVyPC91aWNvbnRyb2w+LiBTZWxlY3QgIDx1aWNvbnRyb2w+V2ViDQotU2VydmljZXM8L3VpY29udHJvbD4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLg0KLVNlbGVjdCB0aGUgIDx1aWNvbnRyb2w+V2ViIFNlcnZpY2U8L3VpY29udHJvbD4gd2l6YXJkLiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlcyBwYWdlOiBzZWxlY3QgIDx1aWNvbnRyb2w+VG9wIGRvd24gSmF2YSBiZWFuIFdlYiBzZXJ2aWNlPC91aWNvbnRyb2w+IGFzDQoteW91ciBXZWIgc2VydmljZSB0eXBlLCBhbmQgc2VsZWN0IHRoZSBhcnRpZmFjdCBmcm9tIHdoaWNoIHRoZSBzZXJ2aWNlIHdpbGwNCi1iZSBjcmVhdGVkLjwvY21kPg0KLTxzdWJzdGVwcyBjb25yZWY9InR3c2JlYW5hLmRpdGEjdHdzYmVhbmEvY3JlYXRlc3RlcDR1bCI+DQotPHN1YnN0ZXA+PGNtZD48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZXMgU2tlbGV0b24gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iDQotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQmVhbiBDb25maWd1cmF0aW9uIHBhZ2U6IFNlbGVjdCB0aGUNCi1mb2xkZXIgd2hlcmUgdGhlIGdlbmVyYXRlZCA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiB3aWxsIGJlIHN0b3JlZC4gSWYgeW91IHdhbnQgdG8gcmV2aWV3DQotb3IgZWRpdCB0aGUgbWFwcGluZ3MgYmV0d2VlbiBwYWNrYWdlcyBhbmQgbmFtZXNwYWNlcywgc2VsZWN0IHRoZSAgPHVpY29udHJvbD5EZWZpbmUNCi1jdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2U8L3VpY29udHJvbD4gY2hlY2sgYm94LiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZA0KLSA8dWljb250cm9sPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3VpY29udHJvbD4gb24NCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsDQotYnkgY2xpY2tpbmcgIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LiBBbHRlcm5hdGVseSwgeW91IGNhbiBjbGljayAgPGI+SW1wb3J0PC9iPiB0bw0KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDxzeXN0ZW1vdXRwdXQ+LnByb3BlcnRpZXM8L3N5c3RlbW91dHB1dD4gZmlsZS4NCi1UaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCAgPGNvZGVwaD48dmFybmFtZT5uYW1lc3BhY2U9cGFja2FnZTwvdmFybmFtZT48L2NvZGVwaD4uDQotQ2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBUZXN0IHBhZ2U6IElmIHlvdSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSwNCi1zZWxlY3QgdGhlIHRlc3QgZmFjaWxpdHkgZm9yIHRoZSBnZW5lcmF0ZWQgV2ViIHNlcnZpY2UuIFRoaXMgd2lsbCBvcGVuIHRoZQ0KLVdlYiBzZXJ2aWNlIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvDQotdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLCBhbmQgY2xpY2sgIDx1aWNvbnRyb2w+R288L3VpY29udHJvbD4uDQotVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPg0KLTwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIGdlbmVyYXRlIGEgcHJveHksDQotdGhpcyBwYWdlIHNob3dzIHRoZSBvcHRpb25zIGZvciB0aGUgcHJveHkuIEl0IGxpc3RzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIHByb3h5DQotd2lsbCBiZSBnZW5lcmF0ZWQsIGFuZCB5b3UgY2FuIG9wdGlvbmFsbHkgY3JlYXRlIGN1c3RvbSBtYXBwaW5ncyBiZXR3ZWVuIG5hbWVzcGFjZXMNCi1hbmQgcGFja2FnZXMuIENsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgQ2xpZW50IFRlc3QgcGFnZTogVXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIGZvbGxvd2luZw0KLW9wdGlvbnM6IDwvY21kPg0KLTxzdWJzdGVwcz4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCB5b3VyIHRlc3QgZmFjaWxpdHkuIFlvdSBjYW4gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5DQotaW4gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyLCBvciB5b3UgY2FuIGdlbmVyYXRlIGEgc2FtcGxlIFdlYiBzZXJ2aWNlIEpTUC48L2NtZD4NCi08L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5JZiB5b3Ugc2VsZWN0ZWQgdG8gdGVzdCB0aGUgcHJveHkgdGhyb3VnaCBhIEpTUCwgeW91IGNhbiBzZWxlY3QNCi10aGUgZm9sZGVyIHdoZXJlIHRoZSBKU1Agd2lsbCBiZSBsb2NhdGVkLCBhbmQgeW91IGNhbiBzZWxlY3QgdGhlIG1ldGhvZHMgdGhhdA0KLXdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIEpTUC48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgIDx1aWNvbnRyb2w+UnVuIHRlc3Qgb24gc2VydmVyPC91aWNvbnRyb2w+IHRvIHN0YXJ0IHRoZQ0KLXNlcnZlciBmb3IgeW91IGF1dG9tYXRpY2FsbHkuPC9jbWQ+PC9zdWJzdGVwPg0KLTwvc3Vic3RlcHM+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgUHVibGljYXRpb24gcGFnZTogSWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcHVibGlzaCB5b3VyDQotV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB1c2UgdGhpcyBwYWdlIHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyDQotYW5kIHNlbGVjdCB0aGUgVURESSByZWdpc3RyeSB0byB3aGljaCB0aGUgV2ViIHNlcnZpY2Ugd2lsbCBiZSBwdWJsaXNoZWQuIENsaWNrDQotIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxyZXN1bHQgY29ucmVmPSJ0d3NiZWFuYS5kaXRhI3R3c2JlYW5hL2F4aXN3c2NyZWF0ZXJlc3VsdCI+QWZ0ZXIgdGhlIFdlYiBzZXJ2aWNlDQotaGFzIGJlZW4gY3JlYXRlZCwgdGhlIGZvbGxvd2luZyBtYXkgb2NjdXIgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zIHlvdSBzZWxlY3RlZDogPHVsPg0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywNCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogPGNvZGVwaD5odHRwOi8vbG9jYWxob3N0OiA8dmFybmFtZT5wb3J0PC92YXJuYW1lPi8gPHZhcm5hbWU+V2ViUHJvamVjdDwvdmFybmFtZT5DbGllbnQvc2FtcGxlPGkNCi0+QmVhbk5hbWU8L2k+Lzx2YXJuYW1lPldlYlNlcnZpY2VOYW1lPC92YXJuYW1lPi9UZXN0Q2xpZW50LmpzcDwvY29kZXBoPiBZb3UNCi1jYW4gdXNlIHRoaXMgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIGJ5IHNlbGVjdGluZyBhIG1ldGhvZCwNCi1lbnRlcmluZyBhIHZhbHVlIGZvciB0aGUgbWV0aG9kLCBhbmQgY2xpY2tpbmcgIDx1aWNvbnRyb2w+SW52b2tlPC91aWNvbnRyb2w+Lg0KLVRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZCB3aWxsIGRpc3BsYXkgaW4gdGhlIHJlc3VsdHMgcGFuZS48L2xpPg0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLA0KLXRoZSBFeHBsb3JlciB3aWxsIG9wZW4uIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvIHRlc3QsIGVudGVyIHRoZSByZXF1aXJlZA0KLWluZm9ybWF0aW9uLCBhbmQgY2xpY2sgIDxiPkdvPC9iPi4gVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLjwvbGk+DQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyDQotaXMgbGF1bmNoZWQgZGlzcGxheWluZyB0aGUgcGFnZSByZXF1aXJlZCB0byBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UuIEZvbGxvdw0KLXRoZSBpbnN0cnVjdGlvbnMgaW4gPHZhcm5hbWU+UHVibGlzaGluZyB0aGUgV2ViIHNlcnZpY2U8L3Zhcm5hbWU+IHRvIGNvbXBsZXRlDQotdGhpcyB0YXNrLjwvbGk+DQotPC91bD48L3Jlc3VsdD4NCi08L3Rhc2tib2R5Pg0KLTxyZWxhdGVkLWxpbmtzPg0KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiDQotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvbGlua3RleHQ+PC9saW5rPg0KLTwvbGlua2xpc3Q+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhIiBzY29wZT0icGVlciI+DQotPGxpbmt0ZXh0PldTREwgZG9jdW1lbnRzPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08L3JlbGF0ZWQtbGlua3M+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3Rza2x3c2RsYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNrbHdzZGxhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MjJlNGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHNrbHdzZGxhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYSBKYXZhIGJlYW4gc2tlbGV0b24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBXZWIgc2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBza2VsZXRvbiBiZWFuIGZyb20gYW4gZXhpc3RpbmcgV1NETCBkb2N1bWVudC4gVGhlIHNrZWxldG9uIGJlYW4gY29udGFpbnMgYSBzZXQgb2YgbWV0aG9kcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZSBiZWFuIGlzIGNyZWF0ZWQsIGVhY2ggbWV0aG9kIGhhcyBhIHRyaXZpYWwgaW1wbGVtZW50YXRpb24gdGhhdCB5b3UgcmVwbGFjZSBieSBlZGl0aW5nIHRoZSBiZWFuLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgc2tlbGV0b24gYmVhbiBmcm9tIGFuIGV4aXN0aW5nIFdTREwgZG9jdW1lbnQuIFRoZSBza2VsZXRvbiBiZWFuIGNvbnRhaW5zIGEgc2V0IG9mIG1ldGhvZHMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBvcGVyYXRpb25zIGRlc2NyaWJlZCBpbiB0aGUgV1NETCBkb2N1bWVudC4gV2hlbiB0aGUgYmVhbiBpcyBjcmVhdGVkLCBlYWNoIG1ldGhvZCBoYXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIHRoYXQgeW91IHJlcGxhY2UgYnkgZWRpdGluZyB0aGUgYmVhbi4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIHNrZWxldG9uIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCBza2VsZXRvbiBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIHNrZWxldG9uIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCBza2VsZXRvbiBXZWIgc2VydmljZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2F4aXN0b3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRza2x3c2RsYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgSmF2YSBiZWFuIHNrZWxldG9uIGZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZQotQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRza2x3c2RsYSI+PGEgbmFtZT0idHNrbHdzZGxhIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlCi1BeGlzMSBydW50aW1lIGVudmlyb25tZW50PC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgc2tlbGV0b24gYmVhbgotZnJvbSBhbiBleGlzdGluZyBXU0RMIGRvY3VtZW50LiBUaGUgc2tlbGV0b24gYmVhbiBjb250YWlucyBhIHNldCBvZiBtZXRob2RzCi10aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZQotYmVhbiBpcyBjcmVhdGVkLCBlYWNoIG1ldGhvZCBoYXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIHRoYXQgeW91IHJlcGxhY2UKLWJ5IGVkaXRpbmcgdGhlIGJlYW4uPC9wPgotCi08ZGl2IGNsYXNzPSJwIj48cD5QcmVyZXF1aXNpdGVzOjwvcD4KLTxvbD4KLTxsaT5JZiB5b3UgYXJlIHVzaW5nIHRoZSBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgc2VydmxldAotY29udGFpbmVyIGFzIHlvdXIgc2VydmVyLCB5b3UgbXVzdCBpbnN0YWxsIGl0LCBjb25maWd1cmUgYW4gaW5zdGFuY2Ugb2YgaXQsCi1hbmQgY3JlYXRlIGEgV2ViIHByb2plY3QgdGFyZ2V0ZWQgdG8gaXQgYXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9InR0b21jYXRzZXJ2Lmh0bWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvYT48L2xpPgotCi08bGk+Q3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZSBpbnRvIHRoZSBXZWIgQ29udGVudCBmb2xkZXIgb2YgdGhlIFdlYiBwcm9qZWN0LgotWW91IGNhbiBvbmx5IHVzZSBhIFdTREwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc2VydmljZSBlbGVtZW50LjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZSB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUKLWVudmlyb25tZW50OjwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+U3dpdGNoIHRvIHRoZSBKMkVFIHBlcnNwZWN0aXZlICg8c3BhbiBjbGFzcz0idWljb250cm9sIj5XaW5kb3cgJmd0OyBPcGVuIFBlcnNwZWN0aXZlCi0mZ3Q7IEoyRUU8L3NwYW4+KS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcsIHNlbGVjdCB0aGUgV1NETCBmaWxlIHRoYXQgeW91IGNyZWF0ZWQKLW9yIGltcG9ydGVkIGludG8gdGhlIFdlYiBDb250ZW50IGZvbGRlciBvZiB5b3VyIFdlYiBwcm9qZWN0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUgJmd0OyBOZXcgJmd0OyBPdGhlcjwvc3Bhbj4uIFNlbGVjdCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViCi1TZXJ2aWNlczwvc3Bhbj4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLgotU2VsZWN0IHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2U8L3NwYW4+IHdpemFyZC4gQ2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5XZWIgU2VydmljZXMgcGFnZTogc2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Ub3AgZG93biBKYXZhIGJlYW4gV2ViIHNlcnZpY2U8L3NwYW4+IGFzCi15b3VyIFdlYiBzZXJ2aWNlIHR5cGUsIGFuZCBzZWxlY3QgdGhlIGFydGlmYWN0IGZyb20gd2hpY2ggdGhlIHNlcnZpY2Ugd2lsbAotYmUgY3JlYXRlZC48L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOjwvc3Bhbj4gPHVsPgotPGxpPkRldmVsb3A6IHRoaXMgd2lsbCBkZXZlbG9wIHRoZSBXU0RMIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZQotV2ViIHNlcnZpY2UuIFRoaXMgaW5jbHVkZXMgc3VjaCB0YXNrcyBhcyBjcmVhdGluZyB0aGUgbW9kdWxlcyB3aGljaCB3aWxsIGNvbnRhaW4KLXRoZSBnZW5lcmF0ZWQgY29kZSwgV1NETCBmaWxlcywgZGVwbG95bWVudCBkZXNjcmlwdG9ycywgYW5kIEphdmEgZmlsZXMgd2hlbgotYXBwcm9wcmlhdGUuPC9saT4KLQotPGxpPkFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudAotZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyLjwvbGk+Ci0KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4KLQotPGxpPkluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIFdlYiBtb2R1bGUgYW5kIEVBUnMgb24gdGhlCi10YXJnZXQgc2VydmVyLjwvbGk+Ci0KLTxsaT5TdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQKLW9uIGl0LiBUaGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9saT4KLQotPGxpPlRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZSwgc3VjaAotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkKLWEgZGlmZmVyZW50IHNlcnZlci48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBydW50aW1lOiB0aGUgZGVmYXVsdCBydW50aW1lIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgcnVudGltZSBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBydW50aW1lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc2VydmljZSBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0Ci1zZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZAotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuPC9zcGFuPiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZAotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBjbGllbnQsIHNlbGVjdCB0aGUgdHlwZSBvZiBwcm94eSB0bwotYmUgZ2VuZXJhdGVkIGFuZCByZXBlYXQgdGhlIGFib3ZlIHN0ZXBzIGZvciB0aGUgY2xpZW50Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLXRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljCi10aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZAotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLiBBbHRlcm5hdGVseQoteW91IGNhbiBtYW51YWxseSBzZXQgdXAgYSBUQ1AvSVAgbW9uaXRvciBhcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sIj5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L2E+PC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5XZWIgU2VydmljZXMgU2tlbGV0b24gSmF2YeKEoiBCZWFuIENvbmZpZ3VyYXRpb24gcGFnZTogU2VsZWN0IHRoZQotZm9sZGVyIHdoZXJlIHRoZSBnZW5lcmF0ZWQgSmF2YSB3aWxsIGJlIHN0b3JlZC4gSWYgeW91IHdhbnQgdG8gcmV2aWV3Ci1vciBlZGl0IHRoZSBtYXBwaW5ncyBiZXR3ZWVuIHBhY2thZ2VzIGFuZCBuYW1lc3BhY2VzLCBzZWxlY3QgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZWZpbmUKLWN1c3RvbSBtYXBwaW5nIGZvciBuYW1lc3BhY2UgdG8gcGFja2FnZTwvc3Bhbj4gY2hlY2sgYm94LiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZAotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3NwYW4+IG9uCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsCi1ieSBjbGlja2luZyAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkPC9zcGFuPi4gQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2xpY2sgIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+IHRvCi1pbXBvcnQgY3VzdG9tIG1hcHBpbmcgcGFpcnMgZnJvbSBhICA8dHQgY2xhc3M9InN5c291dCI+LnByb3BlcnRpZXM8L3R0PiBmaWxlLgotVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjx2YXIgY2xhc3M9InZhcm5hbWUiPm5hbWVzcGFjZT1wYWNrYWdlPC92YXI+PC9zYW1wPi4KLUNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFRlc3QgcGFnZTogSWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLAotc2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IGZvciB0aGUgZ2VuZXJhdGVkIFdlYiBzZXJ2aWNlLiBUaGlzIHdpbGwgb3BlbiB0aGUKLVdlYiBzZXJ2aWNlIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvCi10ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24sIGFuZCBjbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+LgotVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIGdlbmVyYXRlIGEgcHJveHksCi10aGlzIHBhZ2Ugc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4gSXQgbGlzdHMgdGhlIGZvbGRlciB3aGVyZSB0aGUgcHJveHkKLXdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgeW91IGNhbiBvcHRpb25hbGx5IGNyZWF0ZSBjdXN0b20gbWFwcGluZ3MgYmV0d2VlbiBuYW1lc3BhY2VzCi1hbmQgcGFja2FnZXMuIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIENsaWVudCBUZXN0IHBhZ2U6IFVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6IDwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaT48c3Bhbj5TZWxlY3QgeW91ciB0ZXN0IGZhY2lsaXR5LiBZb3UgY2FuIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eQotaW4gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyLCBvciB5b3UgY2FuIGdlbmVyYXRlIGEgc2FtcGxlIFdlYiBzZXJ2aWNlIEpTUC48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+SWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIHByb3h5IHRocm91Z2ggYSBKU1AsIHlvdSBjYW4gc2VsZWN0Ci10aGUgZm9sZGVyIHdoZXJlIHRoZSBKU1Agd2lsbCBiZSBsb2NhdGVkLCBhbmQgeW91IGNhbiBzZWxlY3QgdGhlIG1ldGhvZHMgdGhhdAotd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgSlNQLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gdGVzdCBvbiBzZXJ2ZXI8L3NwYW4+IHRvIHN0YXJ0IHRoZQotc2VydmVyIGZvciB5b3UgYXV0b21hdGljYWxseS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggeW91cgotV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB1c2UgdGhpcyBwYWdlIHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1hbmQgc2VsZWN0IHRoZSBVRERJIHJlZ2lzdHJ5IHRvIHdoaWNoIHRoZSBXZWIgc2VydmljZSB3aWxsIGJlIHB1Ymxpc2hlZC4gQ2xpY2sKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48ZGl2IGNsYXNzPSJwIj5BZnRlciB0aGUgV2ViIHNlcnZpY2UgaGFzIGJlZW4gY3JlYXRlZCwKLXRoZSBmb2xsb3dpbmcgbWF5IG9jY3VyIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyB5b3Ugc2VsZWN0ZWQ6IDx1bD4KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywKLXRoZSBwcm94eSBpcyBsYXVuY2hlZCBpbiBhIFdlYiBicm93c2VyIGF0IHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vbG9jYWxob3N0OiA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5wb3J0PC92YXI+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJQcm9qZWN0PC92YXI+Q2xpZW50L3NhbXBsZTxlbT5CZWFuTmFtZTwvZW0+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJTZXJ2aWNlTmFtZTwvdmFyPi9UZXN0Q2xpZW50LmpzcCBZb3UgY2FuIHVzZQotdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLCBlbnRlcmluZwotYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbnZva2U8L3NwYW4+LiBUaGUgcmVzdWx0Ci1vZiB0aGUgbWV0aG9kIHdpbGwgZGlzcGxheSBpbiB0aGUgcmVzdWx0cyBwYW5lLjwvbGk+Ci0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLAotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBUaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuPC9saT4KLQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGluICA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5QdWJsaXNoaW5nIHRoZSBXZWIgc2VydmljZTwvdmFyPiB0byBjb21wbGV0ZQotdGhpcyB0YXNrLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvY2F4aXN0b3Zlci5odG1sIiB0aXRsZT0iVGhpcyBydW50aW1lIGVudmlyb25tZW50cyBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvciB0aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4iPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudDwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiPiBVc2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbCI+V1NETCBkb2N1bWVudHM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGNlYzk3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICIuLi8uLi9kdGQvdGFzay5kdGQiPg0KLTx0YXNrIGlkPSJjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5DcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3Q8L3RpdGxlPg0KLTxzaG9ydGRlc2M+SWYgeW91IHBsYW4gdG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgdGhhdCB1c2VzIEFwYWNoZSBKYWthcnRhIFRvbWNhdA0KLWFzIGl0cyBzZXJ2ZXIsIFRvbWNhdCBtdXN0IGJlIGluc3RhbGxlZCBhbmQgYSBzZXJ2ZXIgY3JlYXRlZCBiZWZvcmUgeW91IGJlZ2luDQotY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPmNyZWF0aW5nIGFuIEFwYWNoZQ0KLVRvbWNhdCBzZXJ2ZXI8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPlRvbWNhdCBzZXJ2ZXI8aW5kZXh0ZXJtPmNyZWF0aW5nDQotc2VydmVycyBmb3IgV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nDQotYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXI8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPg0KLTwvbWV0YWRhdGE+PC9wcm9sb2c+DQotPHRhc2tib2R5Pg0KLTxwcmVyZXE+SW5zdGFsbCBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgZnJvbSB0aGlzIFVSTDogPHhyZWYgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy90b21jYXQiDQotc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3RvbWNhdDwveHJlZj48L3ByZXJlcT4NCi08Y29udGV4dD5PbmNlIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgc2VydmVyLCBjcmVhdGUgYSBUb21jYXQgc2VydmVyIGluIHRoZQ0KLXdvcmtiZW5jaCBieSBkb2luZyB0aGUgZm9sbG93aW5nOiA8L2NvbnRleHQ+DQotPHN0ZXBzPg0KLTxzdGVwPjxjbWQ+RnJvbSB0aGUgRmlsZSBtZW51LCBzZWxlY3QgPHVpY29udHJvbD5OZXcgPiBPdGhlciA+IFNlcnZlciA+IFNlcnZlcg0KLT4gTmV4dDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5TZWxlY3QgVG9tY2F0IHYgMy54LCA0LngsIHY1LngsIG9yIDYueCBhcyB0aGUgc2VydmVyIHR5cGUsIGVsZWN0aW5nDQotdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBUb21jYXQgZm9yIHlvdXIgaW5zdGFsbCwgYW5kIGNsaWNrIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5PbiB0aGUgVG9tY2F0IHNlcnZlciBwYWdlOjwvY21kPg0KLTxzdWJzdGVwcz4NCi08c3Vic3RlcD48Y21kPkVudGVyIGEgc2VydmVyIG5hbWUuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U3BlY2lmeSB3aGVyZSBUb21jYXQgaXMgaW5zdGFsbGVkLjwvY21kPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+SW5zdGFsbGVkIEpSRXM8L3VpY29udHJvbD4sIGNsaWNrIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LA0KLWFuZCBlbnRlciB0aGUgYXBwcm9wcmlhdGUgaW5mb3JtYXRpb24gZm9yIHRoZSBKREsgeW91IHBsYW4gdG8gdXNlIGZvciBUb21jYXQuDQotRm9yIGV4YW1wbGUsIGZvciBUb21jYXQgdjUuMCB0aGUgSlJFIG5hbWUgd291bGQgYmUgamRrMTQxIGFuZCB0aGUgSlJFIGhvbWUNCi13b3VsZCBiZSB0aGUgaG9tZSBkaXJlY3RvcnkgZm9yIEpESyAxLjQuMS4gQ2xpY2sgPHVpY29udHJvbD5PSzwvdWljb250cm9sPiB0d2ljZQ0KLW9uY2UgeW91IGhhdmUgZW50ZXJlZCB0aGlzIGluZm9ybWF0aW9uLiBFbnN1cmUgdGhhdCB0aGUgbmV3bHkgYWRkZWQgSkRLIGlzDQotbm93IHNlbGVjdGVkIGluIHRoZSBKUkUgZmllbGQgb2YgdGhlIFRvbWNhdCBzZXJ2ZXIgcGFnZS4gTm90ZSB0aGF0IGlmIHlvdQ0KLXBvaW50IHRoZSBzZXJ2ZXIgYXQgYSBKUkUgcmF0aGVyIHRoYW4gYSBKREsgdGhlIEpTUHMgd2lsbCBub3QgcHJvcGVybHkgY29tcGlsZQ0KLWFuZCB3aWxsIG5vdCBiZSBhYmxlIHRvIHJ1biBvbiB0aGUgVG9tY2F0IHNlcnZlci48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2NtZD48c3RlcHJlc3VsdD4gVG8gc2VlIHRoZQ0KLXNlcnZlciB5b3UgaGF2ZSBjcmVhdGVkIGluIHRoZSB3b3Jrc3BhY2UsIGZyb20gdGhlIFdpbmRvdyBtZW51IHNlbGVjdCA8dWljb250cm9sPlNob3cNCi12aWV3ID4gT3RoZXIgPiBTZXJ2ZXIgPiBTZXJ2ZXJzID4gT2suPC91aWNvbnRyb2w+IDwvc3RlcHJlc3VsdD48L3N0ZXA+DQotPC9zdGVwcz4NCi08ZXhhbXBsZT48cD5UbyBidWlsZCBhIGR5bmFtaWMgV2ViIHByb2plY3QgdGhhdCBwb2ludHMgdG8gdGhlIFRvbWNhdCBzZXJ2ZXINCi10aGF0IHlvdSBoYXZlIGNyZWF0ZWQ6PC9wPjxvbD4NCi08bGk+Q3JlYXRlIHRoZSBzZXJ2aWNlIFdlYiBwcm9qZWN0IGJ5IHNlbGVjdGluZyA8dWljb250cm9sPk5ldyA+IFdlYiA+IER5bmFtaWMNCi1XZWIgcHJvamVjdDwvdWljb250cm9sPi4gRW50ZXIgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjogPHVsPg0KLTxsaT5Qcm9qZWN0IE5hbWU6IGVudGVyIGEgcHJvamVjdCBuYW1lPC9saT4NCi08bGk+VGFyZ2V0IHJ1bnRpbWU6IFRvbWNhdCBzZXJ2ZXIgdjMueCwgNC54IG9yIDUueCBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24NCi15b3UgaW5zdGFsbGVkLiBJZiBpdCBpcyBub3QgbGlzdGVkLCBjbGljayBOZXcgYW5kIGJyb3dzZSB0byB0aGUgbG9jYXRpb24gd2hlcmUNCi1pdCBpcyBpbnN0YWxsZWQuPC9saT4NCi08bGk+RW5zdXJlIHRoYXQgPHVpY29udHJvbD5BZGQgcHJvamVjdCB0byBhbiBFQVI8L3VpY29udHJvbD4gaXMgPGk+bm90PC9pPiBzZWxlY3RlZC48L2xpPg0KLTwvdWw+PC9saT4NCi08bGk+Q2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9saT4NCi08bGk+VG8gYXNzb2NpYXRlIHRoZSBwcm9qZWN0IHdpdGggdGhlIHNlcnZlciwgcmlnaHQtY2xpY2sgdGhlIFRvbWNhdCBzZXJ2ZXINCi15b3UgY3JlYXRlZCBpbiB0aGUgU2VydmVyIHZpZXcgYW5kIHNlbGVjdCA8dWljb250cm9sPkFkZCBhbmQgcmVtb3ZlIHByb2plY3RzPC91aWNvbnRyb2w+Lg0KLVNlbGVjdCB0aGUgc2VydmljZSBhbmQgY2xpZW50IHByb2plY3RzIGZyb20gdGhlIEF2YWlsYWJsZSBwcm9qZWN0cyBsaXN0IGFuZA0KLWNsaWNrIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LiA8L2xpPg0KLTwvb2w+PC9leGFtcGxlPg0KLTwvdGFza2JvZHk+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODRkYjE5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IklmIHlvdSBwbGFuIHRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIHRoYXQgdXNlcyBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgYXMgaXRzIHNlcnZlciwgVG9tY2F0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhIHNlcnZlciBjcmVhdGVkIGJlZm9yZSB5b3UgYmVnaW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSWYgeW91IHBsYW4gdG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgdGhhdCB1c2VzIEFwYWNoZSBKYWthcnRhIFRvbWNhdCBhcyBpdHMgc2VydmVyLCBUb21jYXQgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGEgc2VydmVyIGNyZWF0ZWQgYmVmb3JlIHlvdSBiZWdpbiBjcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgY3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIsIFRvbWNhdCBzZXJ2ZXIsIGNyZWF0aW5nIHNlcnZlcnMgZm9yIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgY3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIsIFRvbWNhdCBzZXJ2ZXIsIGNyZWF0aW5nIHNlcnZlcnMgZm9yIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jYXhpc3RvdmVyLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciI+PGEgbmFtZT0iY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC9oMT4KLQotCi0KLTxkaXY+PHA+SWYgeW91IHBsYW4gdG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgdGhhdCB1c2VzIEFwYWNoZSBKYWthcnRhIFRvbWNhdAotYXMgaXRzIHNlcnZlciwgVG9tY2F0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhIHNlcnZlciBjcmVhdGVkIGJlZm9yZSB5b3UgYmVnaW4KLWNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5JbnN0YWxsIEFwYWNoZSBKYWthcnRhIFRvbWNhdCBmcm9tIHRoaXMgVVJMOiA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3RvbWNhdCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvdG9tY2F0PC9hPjwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5PbmNlIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgc2VydmVyLCBjcmVhdGUgYSBUb21jYXQgc2VydmVyIGluIHRoZQotd29ya2JlbmNoIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6IDwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkZyb20gdGhlIEZpbGUgbWVudSwgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldyAmZ3Q7IE90aGVyICZndDsgU2VydmVyICZndDsgU2VydmVyCi0mZ3Q7IE5leHQ8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCBUb21jYXQgdiAzLngsIDQueCwgdjUueCwgb3IgNi54IGFzIHRoZSBzZXJ2ZXIgdHlwZSwgZWxlY3RpbmcKLXRoZSBjb3JyZWN0IHZlcnNpb24gb2YgVG9tY2F0IGZvciB5b3VyIGluc3RhbGwsIGFuZCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPk9uIHRoZSBUb21jYXQgc2VydmVyIHBhZ2U6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkVudGVyIGEgc2VydmVyIG5hbWUuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TcGVjaWZ5IHdoZXJlIFRvbWNhdCBpcyBpbnN0YWxsZWQuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbnN0YWxsZWQgSlJFczwvc3Bhbj4sIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZDwvc3Bhbj4sCi1hbmQgZW50ZXIgdGhlIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uIGZvciB0aGUgSkRLIHlvdSBwbGFuIHRvIHVzZSBmb3IgVG9tY2F0LgotRm9yIGV4YW1wbGUsIGZvciBUb21jYXQgdjUuMCB0aGUgSlJFIG5hbWUgd291bGQgYmUgamRrMTQxIGFuZCB0aGUgSlJFIGhvbWUKLXdvdWxkIGJlIHRoZSBob21lIGRpcmVjdG9yeSBmb3IgSkRLIDEuNC4xLiBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PSzwvc3Bhbj4gdHdpY2UKLW9uY2UgeW91IGhhdmUgZW50ZXJlZCB0aGlzIGluZm9ybWF0aW9uLiBFbnN1cmUgdGhhdCB0aGUgbmV3bHkgYWRkZWQgSkRLIGlzCi1ub3cgc2VsZWN0ZWQgaW4gdGhlIEpSRSBmaWVsZCBvZiB0aGUgVG9tY2F0IHNlcnZlciBwYWdlLiBOb3RlIHRoYXQgaWYgeW91Ci1wb2ludCB0aGUgc2VydmVyIGF0IGEgSlJFIHJhdGhlciB0aGFuIGEgSkRLIHRoZSBKU1BzIHdpbGwgbm90IHByb3Blcmx5IGNvbXBpbGUKLWFuZCB3aWxsIG5vdCBiZSBhYmxlIHRvIHJ1biBvbiB0aGUgVG9tY2F0IHNlcnZlci48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+Ljwvc3Bhbj4gIFRvIHNlZSB0aGUKLXNlcnZlciB5b3UgaGF2ZSBjcmVhdGVkIGluIHRoZSB3b3Jrc3BhY2UsIGZyb20gdGhlIFdpbmRvdyBtZW51IHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TaG93Ci12aWV3ICZndDsgT3RoZXIgJmd0OyBTZXJ2ZXIgJmd0OyBTZXJ2ZXJzICZndDsgT2suPC9zcGFuPiA8L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJleGFtcGxlIj48cD5UbyBidWlsZCBhIGR5bmFtaWMgV2ViIHByb2plY3QgdGhhdCBwb2ludHMgdG8gdGhlIFRvbWNhdCBzZXJ2ZXIKLXRoYXQgeW91IGhhdmUgY3JlYXRlZDo8L3A+Ci08b2w+Ci08bGk+Q3JlYXRlIHRoZSBzZXJ2aWNlIFdlYiBwcm9qZWN0IGJ5IHNlbGVjdGluZyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXcgJmd0OyBXZWIgJmd0OyBEeW5hbWljCi1XZWIgcHJvamVjdDwvc3Bhbj4uIEVudGVyIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246IDx1bD4KLTxsaT5Qcm9qZWN0IE5hbWU6IGVudGVyIGEgcHJvamVjdCBuYW1lPC9saT4KLQotPGxpPlRhcmdldCBydW50aW1lOiBUb21jYXQgc2VydmVyIHYzLngsIDQueCBvciA1LnggZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uCi15b3UgaW5zdGFsbGVkLiBJZiBpdCBpcyBub3QgbGlzdGVkLCBjbGljayBOZXcgYW5kIGJyb3dzZSB0byB0aGUgbG9jYXRpb24gd2hlcmUKLWl0IGlzIGluc3RhbGxlZC48L2xpPgotCi08bGk+RW5zdXJlIHRoYXQgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIHByb2plY3QgdG8gYW4gRUFSPC9zcGFuPiBpcyA8ZW0+bm90PC9lbT4gc2VsZWN0ZWQuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaT5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+LjwvbGk+Ci0KLTxsaT5UbyBhc3NvY2lhdGUgdGhlIHByb2plY3Qgd2l0aCB0aGUgc2VydmVyLCByaWdodC1jbGljayB0aGUgVG9tY2F0IHNlcnZlcgoteW91IGNyZWF0ZWQgaW4gdGhlIFNlcnZlciB2aWV3IGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIGFuZCByZW1vdmUgcHJvamVjdHM8L3NwYW4+LgotU2VsZWN0IHRoZSBzZXJ2aWNlIGFuZCBjbGllbnQgcHJvamVjdHMgZnJvbSB0aGUgQXZhaWxhYmxlIHByb2plY3RzIGxpc3QgYW5kCi1jbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+LiA8L2xpPgotCi08L29sPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3RvcGljcy9jYXhpc3RvdmVyLmh0bWwiIHRpdGxlPSJUaGlzIHJ1bnRpbWUgZW52aXJvbm1lbnRzIGlzIGZvciB1c2VycyB3aG8gcHJlZmVyIHRvIGRldmVsb3AgZm9yIHRoZSBvcGVuIEFwYWNoZSBBeGlzIHBsYXRmb3JtLiI+Q3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lIGVudmlyb25tZW50PC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R3c2JlYW5hLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90d3NiZWFuYS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGE1ZTMxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R3c2JlYW5hLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIg0KLSAiLi4vLi4vZHRkL3Rhc2suZHRkIj4NCi08dGFzayBpZD0idHdzYmVhbmEiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzMSBydW50aW1lDQotZW52aXJvbm1lbnQ8L3RpdGxlPg0KLTx0aXRsZWFsdHM+DQotPHNlYXJjaHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMxDQotcnVudGltZSBlbnZpcm9ubWVudDwvc2VhcmNodGl0bGU+DQotPC90aXRsZWFsdHM+DQotPHNob3J0ZGVzYz5UaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlLA0KLWNvbmZpZ3VyaW5nIGl0IGZvciBkZXBsb3ltZW50LCBhbmQgZGVwbG95aW5nIHRoZSBXZWIgc2VydmljZSB0byBhIHNlcnZlci4NCi1PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaXMgZGVwbG95ZWQsIHRoZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyB0aGUNCi1jbGllbnQgcHJveHkgYW5kIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZS4gV2hlbiB5b3UgaGF2ZQ0KLWNvbXBsZXRlZCB0ZXN0aW5nLCB5b3UgY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkNCi11c2luZyB0aGUgRXhwb3J0IHdpemFyZC48L3Nob3J0ZGVzYz4NCi08cHJvbG9nPjxtZXRhZGF0YT4NCi08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzMSBydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkphdmENCi1iZWFuczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzDQotcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+Y3JlYXRpbmcgYSBXZWIgc2VydmljZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPg0KLTwva2V5d29yZHM+DQotPC9tZXRhZGF0YT48L3Byb2xvZz4NCi08dGFza2JvZHk+DQotPHByZXJlcT48cD5QcmVyZXF1aXNpdGVzOjxvbD4NCi08bGkgaWQ9ImNyZWF0ZXRvbWNhdGxpbmsiPklmIHlvdSBhcmUgdXNpbmcgdGhlIEFwYWNoZSBKYWthcnRhIFRvbWNhdCBzZXJ2bGV0DQotY29udGFpbmVyIGFzIHlvdXIgc2VydmVyLCB5b3UgbXVzdCBpbnN0YWxsIGl0LCBjb25maWd1cmUgYW4gaW5zdGFuY2Ugb2YgaXQsDQotYW5kIGNyZWF0ZSBhIFdlYiBwcm9qZWN0IHRhcmdldGVkIHRvIGl0IGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBocmVmPSJ0dG9tY2F0c2Vydi5kaXRhIg0KLXNjb3BlPSJsb2NhbCI+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC94cmVmPjwvbGk+DQotPGxpPkNyZWF0ZSBvciBpbXBvcnQgYSBiZWFuIGludG8gdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIg0KLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHNvdXJjZSBmb2xkZXIgb2YgdGhlIFdlYiBwcm9qZWN0LiBUbw0KLWltcG9ydCwgc2VsZWN0IHRoZSA8Yj5KYXZhIFJlc291cmNlczogc3JjPC9iPiBmb2xkZXIsIGFuZCBmcm9tIHRoZSBmaWxlIG1lbnUNCi1zZWxlY3QgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+SW1wb3J0PC91aWNvbnRyb2w+PHVpY29udHJvbD5HZW5lcmFsPC91aWNvbnRyb2w+DQotPHVpY29udHJvbD5GaWxlIFN5c3RlbTwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+IGFuZCBicm93c2UgdG8gd2hlcmUgeW91cg0KLXBhY2thZ2UgaXMuPC9saT4NCi08L29sPjwvcD48L3ByZXJlcT4NCi08Y29udGV4dD5UbyBjcmVhdGUgYSBXZWIgc2VydmljZSBmcm9tIGEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUNCi1lbnZpcm9ubWVudDo8L2NvbnRleHQ+DQotPHN0ZXBzPg0KLTxzdGVwPjxjbWQ+U3dpdGNoIHRvIHRoZSBKYXZhIEVFIHBlcnNwZWN0aXZlICg8dWljb250cm9sPldpbmRvdyA+IE9wZW4gUGVyc3BlY3RpdmUNCi0+IEphdmEgRUU8L3VpY29udHJvbD4pLjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPkluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcsIHNlbGVjdCB0aGUgYmVhbiB0aGF0IHlvdSBjcmVhdGVkDQotb3IgaW1wb3J0ZWQgaW50byB0aGUgc291cmNlIGZvbGRlciBvZiB5b3VyIFdlYiBwcm9qZWN0LjwvY21kPjwvc3RlcD4NCi08c3RlcD48Y21kPkNsaWNrICA8dWljb250cm9sPkZpbGUgPiBOZXcgPiBPdGhlcjwvdWljb250cm9sPi48L2NtZD48aW5mbz5TZWxlY3Q8dWljb250cm9sPldlYg0KLVNlcnZpY2VzPC91aWNvbnRyb2w+IGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHZhcmlvdXMgV2ViIHNlcnZpY2Ugd2l6YXJkcy4NCi1TZWxlY3QgdGhlICA8dWljb250cm9sPldlYiBTZXJ2aWNlPC91aWNvbnRyb2w+IHdpemFyZC4gQ2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2luZm8+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2VzIHBhZ2U6IHNlbGVjdCAgPHVpY29udHJvbD5Cb3R0b20gdXAgSmF2YSBiZWFuIFdlYiBzZXJ2aWNlPC91aWNvbnRyb2w+IGFzDQoteW91ciBXZWIgc2VydmljZSB0eXBlLCBhbmQgZW50ZXIgdGhlIFVSSSB0byB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBmaWxlIHRoYXQNCi13aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNlcnZpY2UuPC9jbWQ+DQotPHN1YnN0ZXBzIGlkPSJjcmVhdGVzdGVwNHVsIj4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50DQotdG8gY29tcGxldGUgdXNpbmcgdGhlIHNsaWRlcjo8L2NtZD48aW5mbz48dWw+DQotPGxpPkRldmVsb3A6IHRoaXMgd2lsbCBkZXZlbG9wIHRoZSBXU0RMIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZQ0KLVdlYiBzZXJ2aWNlLiBUaGlzIGluY2x1ZGVzIHN1Y2ggdGFza3MgYXMgY3JlYXRpbmcgdGhlIG1vZHVsZXMgd2hpY2ggd2lsbCBjb250YWluDQotdGhlIGdlbmVyYXRlZCBjb2RlLCBXU0RMIGZpbGVzLCBkZXBsb3ltZW50IGRlc2NyaXB0b3JzLCBhbmQgSmF2YSBmaWxlcyB3aGVuDQotYXBwcm9wcmlhdGUuPC9saT4NCi08bGk+QXNzZW1ibGU6IHRoaXMgZW5zdXJlcyB0aGUgcHJvamVjdCB0aGF0IHdpbGwgaG9zdCB0aGUgV2ViIHNlcnZpY2Ugb3IgY2xpZW50DQotZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyLjwvbGk+DQotPGxpPkRlcGxveTogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgZGVwbG95bWVudCBjb2RlIGZvciB0aGUgc2VydmljZS48L2xpPg0KLTxsaT5JbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBXZWIgbW9kdWxlIGFuZCBFQVJzIG9uIHRoZQ0KLXRhcmdldCBzZXJ2ZXIuPC9saT4NCi08bGk+U3RhcnQ6IHRoaXMgd2lsbCBzdGFydCB0aGUgc2VydmVyIG9uY2UgdGhlIHNlcnZpY2UgaGFzIGJlZW4gaW5zdGFsbGVkDQotb24gaXQuIFRoZSBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZC48L2xpPg0KLTxsaT5UZXN0OiB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcgdGhlIHNlcnZpY2UsIHN1Y2gNCi1hcyB1c2luZyB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIgb3Igc2FtcGxlIEpTUHMuPC9saT4NCi08L3VsPjwvaW5mbz48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgeW91ciBzZXJ2ZXI6IHRoZSBkZWZhdWx0IHNlcnZlciBpcyBkaXNwbGF5ZWQuIElmIHlvdQ0KLXdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQ0KLWEgZGlmZmVyZW50IHNlcnZlci48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgeW91ciBydW50aW1lOiB0aGUgZGVmYXVsdCBydW50aW1lIGlzIGRpc3BsYXllZC4gSWYgeW91DQotd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQ0KLWEgZGlmZmVyZW50IHJ1bnRpbWUuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHRoZSBzZXJ2aWNlIHByb2plY3Q6IHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIHByb2plY3QNCi1zZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZA0KLUVBUiBjbGljayBvbiB0aGUgcHJvamVjdCBsaW5rLjwvY21kPjxpbmZvPkVuc3VyZSB0aGF0IHRoZSBwcm9qZWN0IHNlbGVjdGVkDQotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlDQotc2VydmljZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjbGllbnQncyBnZW5lcmF0ZWQgYXJ0aWZhY3RzLjwvaW5mbz48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5JZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBjbGllbnQsIHNlbGVjdCB0aGUgdHlwZSBvZiBwcm94eSB0bw0KLWJlIGdlbmVyYXRlZCBhbmQgcmVwZWF0IHRoZSBhYm92ZSBzdGVwcyBmb3IgdGhlIGNsaWVudC48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5QdWJsaXNoIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyDQotdG8gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeS48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5Nb25pdG9yIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIHNlbmQgdGhlIFdlYiBzZXJ2aWNlIHRyYWZmaWMNCi10aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZA0KLWJ5IHRoZSBXZWIgc2VydmljZSBhbmQgdG8gdGVzdCB0aGlzIHRyYWZmaWMgZm9yIFdTLUkgY29tcGxpYW5jZS4gQWx0ZXJuYXRlbHkNCi15b3UgY2FuIG1hbnVhbGx5IHNldCB1cCBhIFRDUC9JUCBtb25pdG9yIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmRpdGEiDQotc2NvcGU9InBlZXIiPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwveHJlZj48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiINCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBCZWFuIElkZW50aXR5IHBhZ2U6IHRoZSBXZWIgc2VydmljZQ0KLVdTREwgbmFtZSB3aWxsIGJlIGxpc3RlZC48L2NtZD48aW5mbz5Zb3UgaGF2ZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PHVsPg0KLTxsaT5TZWxlY3QgdGhlIG1ldGhvZHMgdG8gZXhwb3NlLjwvbGk+DQotPGxpPlNlbGVjdCB0aGUgZW5jb2Rpbmcgc3R5bGUuIFJQQy9FbmNvZGVkIGlzIHRoZSByZWNvbW1lbmRlZCBlbmNvZGluZyBzdHlsZQ0KLWZvciB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC4gVGhpcyBlbmNvZGluZyBtZXRob2QgaXMgbm90IFdTLUkgY29tcGxpYW50LjwvbGk+DQotPGxpPlNlbGVjdCBpZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvbGk+DQotPC91bD5DbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+PC9pbmZvPjwvc3RlcD4NCi08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFBhY2thZ2UgdG8gTmFtZXNwYWNlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZA0KLSA8dWljb250cm9sPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3VpY29udHJvbD4gb24NCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsDQotYnkgY2xpY2tpbmcgIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LiBBbHRlcm5hdGVseSwgeW91IGNhbiBjbGljayAgPGI+SW1wb3J0PC9iPiB0bw0KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDxzeXN0ZW1vdXRwdXQ+LnByb3BlcnRpZXM8L3N5c3RlbW91dHB1dD4gZmlsZS4NCi1UaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCAgPGNvZGVwaD48dmFybmFtZT5wYWNrYWdlPW5hbWVzcGFjZTwvdmFybmFtZT48L2NvZGVwaD4uPC9jbWQ+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgVGVzdCBwYWdlOiBJZiB5b3Ugc2VsZWN0ZWQgdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UsDQotc2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IGZvciB0aGUgZ2VuZXJhdGVkIFdlYiBzZXJ2aWNlLjwvY21kPjxpbmZvPlRoaXMgd2lsbA0KLW9wZW4gdGhlIFdlYiBzZXJ2aWNlIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdQ0KLXdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLCBhbmQgY2xpY2s8dWljb250cm9sPkdvPC91aWNvbnRyb2w+Lg0KLVRoZSByZXN1bHQgd2lsbCBkaXNwbGF5IGluIHRoZSBTdGF0dXMgcGFuZS4gQ2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2luZm8+DQotPC9zdGVwPg0KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgUHJveHkgcGFnZTogaWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gZ2VuZXJhdGUgYSBwcm94eSwNCi1zZWxlY3QgaWYgeW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSBwYWNrYWdlIHRvIG5hbWVzcGFjZSBtYXBwaW5ncy48L2NtZD48L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBVc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgZm9sbG93aW5nDQotb3B0aW9uczogPC9jbWQ+DQotPHN1YnN0ZXBzPg0KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgdGVzdCBmYWNpbGl0eS4gWW91IGNhbiB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkNCi1pbiB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIsIG9yIHlvdSBjYW4gZ2VuZXJhdGUgYSBzYW1wbGUgV2ViIHNlcnZpY2UgSlNQLjwvY21kPg0KLTwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPklmIHlvdSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBwcm94eSB0aHJvdWdoIGEgSlNQLCB5b3UgY2FuIHNlbGVjdA0KLXRoZSBmb2xkZXIgd2hlcmUgdGhlIEpTUCB3aWxsIGJlIGxvY2F0ZWQsIGFuZCB5b3UgY2FuIHNlbGVjdCB0aGUgbWV0aG9kcyB0aGF0DQotd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgSlNQLjwvY21kPjwvc3Vic3RlcD4NCi08c3Vic3RlcD48Y21kPlNlbGVjdCAgPHVpY29udHJvbD5SdW4gdGVzdCBvbiBzZXJ2ZXI8L3VpY29udHJvbD4gdG8gc3RhcnQgdGhlDQotc2VydmVyIGZvciB5b3UgYXV0b21hdGljYWxseS48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlOiBTZWxlY3Qgd2hldGhlciBvciBub3QgeW91IHdhbnQgdG8NCi1wdWJsaXNoIHRoaXMgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LiBDbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi4mbmJzcDs8L2NtZD4NCi08aW5mbz5Ob3RlOiB5b3UgbWF5IHNlZSBhIHdhcm5pbmcgc3RhdGluZyA8Y29kZXBoPkVycm9yIGluIGdlbmVyYXRpbmcgV1NETA0KLWZyb20gSmF2YS4gQ2xhc3NOb3RGb3VuZDogJmx0O2JlYW4gbmFtZT48L2NvZGVwaD4uIFRoaXMgZXJyb3IgY2FuIGJlIHNhZmVseQ0KLWlnbm9yZWQuPC9pbmZvPjwvc3RlcD4NCi08L3N0ZXBzPg0KLTxyZXN1bHQgaWQ9ImF4aXN3c2NyZWF0ZXJlc3VsdCI+PHA+QWZ0ZXIgdGhlIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGNyZWF0ZWQsDQotdGhlIGZvbGxvd2luZyBtYXkgb2NjdXIgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zIHlvdSBzZWxlY3RlZDogPHVsPg0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywNCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogaHR0cDovL2xvY2FsaG9zdDogPHZhcm5hbWU+cG9ydDwvdmFybmFtZT4vIDx2YXJuYW1lPldlYlByb2plY3Q8L3Zhcm5hbWU+Q2xpZW50L3NhbXBsZTxpDQotPkJlYW5OYW1lPC9pPi8gPHZhcm5hbWU+V2ViU2VydmljZU5hbWU8L3Zhcm5hbWU+L1Rlc3RDbGllbnQuanNwIFlvdSBjYW4gdXNlDQotdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLCBlbnRlcmluZw0KLWEgdmFsdWUgZm9yIHRoZSBtZXRob2QsIGFuZCBjbGlja2luZyAgPHVpY29udHJvbD5JbnZva2U8L3VpY29udHJvbD4uIFRoZSByZXN1bHQNCi1vZiB0aGUgbWV0aG9kIHdpbGwgZGlzcGxheSBpbiB0aGUgcmVzdWx0cyBwYW5lLjwvbGk+DQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsDQotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkDQotaW5mb3JtYXRpb24sIGFuZCBjbGljayAgPGI+R288L2I+LiBUaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuPC9saT4NCi08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcHVibGlzaCB0aGUgV2ViIHNlcnZpY2UsIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXINCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93DQotdGhlIGluc3RydWN0aW9ucyBpbiAgPHZhcm5hbWU+UHVibGlzaGluZyB0aGUgV2ViIHNlcnZpY2U8L3Zhcm5hbWU+IHRvIGNvbXBsZXRlDQotdGhpcyB0YXNrLjwvbGk+DQotPC91bD48L3A+PC9yZXN1bHQ+DQotPHBvc3RyZXE+PHA+IDx1aWNvbnRyb2w+SW1wb3J0YW50OjwvdWljb250cm9sPiBJZiB5b3VyIG1ldGhvZHMgY29udGFpbiB0eXBlcywNCi1ub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzYW1wbGUsIHN1Y2ggYXMgYXJyYXlzLCBpbmRleGVkIHByb3BlcnRpZXMsIGFuZCBjb2xsZWN0aW9ucywNCi10aGUgbWV0aG9kcyB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgc2FtcGxlIGFuZCB5b3Ugd2lsbCByZWNlaXZlIGEgd2FybmluZw0KLW1lc3NhZ2UuPC9wPjwvcG9zdHJlcT4NCi08L3Rhc2tib2R5Pg0KLTxyZWxhdGVkLWxpbmtzPg0KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4NCi08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPg0KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4NCi08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiDQotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvbGlua3RleHQ+PC9saW5rPg0KLTwvbGlua2xpc3Q+DQotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+DQotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhIiBzY29wZT0icGVlciI+DQotPGxpbmt0ZXh0PldTREwgZG9jdW1lbnRzPC9saW5rdGV4dD48L2xpbms+DQotPC9saW5rbGlzdD4NCi08L3JlbGF0ZWQtbGlua3M+DQotPC90YXNrPg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R3c2JlYW5hLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90d3NiZWFuYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzFmMDk0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R3c2JlYW5hLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlLCBjb25maWd1cmluZyBpdCBmb3IgZGVwbG95bWVudCwgYW5kIGRlcGxveWluZyB0aGUgV2ViIHNlcnZpY2UgdG8gYSBzZXJ2ZXIuIE9uY2UgeW91ciBXZWIgc2VydmljZSBpcyBkZXBsb3llZCwgdGhlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIHRoZSBjbGllbnQgcHJveHkgYW5kIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZS4gV2hlbiB5b3UgaGF2ZSBjb21wbGV0ZWQgdGVzdGluZywgeW91IGNhbiBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IHVzaW5nIHRoZSBFeHBvcnQgd2l6YXJkLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlLCBjb25maWd1cmluZyBpdCBmb3IgZGVwbG95bWVudCwgYW5kIGRlcGxveWluZyB0aGUgV2ViIHNlcnZpY2UgdG8gYSBzZXJ2ZXIuIE9uY2UgeW91ciBXZWIgc2VydmljZSBpcyBkZXBsb3llZCwgdGhlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIHRoZSBjbGllbnQgcHJveHkgYW5kIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZS4gV2hlbiB5b3UgaGF2ZSBjb21wbGV0ZWQgdGVzdGluZywgeW91IGNhbiBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IHVzaW5nIHRoZSBFeHBvcnQgd2l6YXJkLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgSmF2YSBiZWFucywgQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iQXhpczEgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzLCBKYXZhIGJlYW5zLCBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY2F4aXN0b3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2JlYW5hIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEKLXJ1bnRpbWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR3c2JlYW5hIj48YSBuYW1lPSJ0d3NiZWFuYSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZQotZW52aXJvbm1lbnQ8L2gxPgotCi0KLQotCi08ZGl2PjxwPlRoZSBXZWIgU2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBuZXcgV2ViIHNlcnZpY2UsCi1jb25maWd1cmluZyBpdCBmb3IgZGVwbG95bWVudCwgYW5kIGRlcGxveWluZyB0aGUgV2ViIHNlcnZpY2UgdG8gYSBzZXJ2ZXIuCi1PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaXMgZGVwbG95ZWQsIHRoZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyB0aGUKLWNsaWVudCBwcm94eSBhbmQgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLiBXaGVuIHlvdSBoYXZlCi1jb21wbGV0ZWQgdGVzdGluZywgeW91IGNhbiBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5Ci11c2luZyB0aGUgRXhwb3J0IHdpemFyZC48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPjxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpIGlkPSJ0d3NiZWFuYV9fY3JlYXRldG9tY2F0bGluayI+PGEgbmFtZT0idHdzYmVhbmFfX2NyZWF0ZXRvbWNhdGxpbmsiPjwhLS0gLS0+PC9hPklmIHlvdSBhcmUgdXNpbmcgdGhlIEFwYWNoZSBKYWthcnRhIFRvbWNhdCBzZXJ2bGV0Ci1jb250YWluZXIgYXMgeW91ciBzZXJ2ZXIsIHlvdSBtdXN0IGluc3RhbGwgaXQsIGNvbmZpZ3VyZSBhbiBpbnN0YW5jZSBvZiBpdCwKLWFuZCBjcmVhdGUgYSBXZWIgcHJvamVjdCB0YXJnZXRlZCB0byBpdCBhcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0idHRvbWNhdHNlcnYuaHRtbCI+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC9hPjwvbGk+Ci0KLTxsaT5DcmVhdGUgb3IgaW1wb3J0IGEgYmVhbiBpbnRvIHRoZSBKYXZh4oSiIHNvdXJjZSBmb2xkZXIgb2YgdGhlIFdlYiBwcm9qZWN0LiBUbwotaW1wb3J0LCBzZWxlY3QgdGhlIDxzdHJvbmc+SmF2YSBSZXNvdXJjZXM6IHNyYzwvc3Ryb25nPiBmb2xkZXIsIGFuZCBmcm9tIHRoZSBmaWxlIG1lbnUKLXNlbGVjdCA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydDwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5HZW5lcmFsPC9zcGFuPgotICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZSBTeXN0ZW08L3NwYW4+PC9zcGFuPiBhbmQgYnJvd3NlIHRvIHdoZXJlIHlvdXIKLXBhY2thZ2UgaXMuPC9saT4KLQotPC9vbD4KLTwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIGZyb20gYSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpczEgcnVudGltZQotZW52aXJvbm1lbnQ6PC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U3dpdGNoIHRvIHRoZSBKYXZhIEVFIHBlcnNwZWN0aXZlICg8c3BhbiBjbGFzcz0idWljb250cm9sIj5XaW5kb3cgJmd0OyBPcGVuIFBlcnNwZWN0aXZlCi0mZ3Q7IEphdmEgRUU8L3NwYW4+KS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3LCBzZWxlY3QgdGhlIGJlYW4gdGhhdCB5b3UgY3JlYXRlZAotb3IgaW1wb3J0ZWQgaW50byB0aGUgc291cmNlIGZvbGRlciBvZiB5b3VyIFdlYiBwcm9qZWN0Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlICZndDsgTmV3ICZndDsgT3RoZXI8L3NwYW4+Ljwvc3Bhbj4gU2VsZWN0PHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViCi1TZXJ2aWNlczwvc3Bhbj4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLgotU2VsZWN0IHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2U8L3NwYW4+IHdpemFyZC4gQ2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+LgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZXMgcGFnZTogc2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Cb3R0b20gdXAgSmF2YSBiZWFuIFdlYiBzZXJ2aWNlPC9zcGFuPiBhcwoteW91ciBXZWIgc2VydmljZSB0eXBlLCBhbmQgZW50ZXIgdGhlIFVSSSB0byB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBmaWxlIHRoYXQKLXdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgc2VydmljZS48L3NwYW4+Ci08YSBuYW1lPSJ0d3NiZWFuYV9fY3JlYXRlc3RlcDR1bCI+PCEtLSAtLT48L2E+PG9sIHR5cGU9ImEiIGlkPSJ0d3NiZWFuYV9fY3JlYXRlc3RlcDR1bCI+Ci08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOjwvc3Bhbj4gPHVsPgotPGxpPkRldmVsb3A6IHRoaXMgd2lsbCBkZXZlbG9wIHRoZSBXU0RMIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZQotV2ViIHNlcnZpY2UuIFRoaXMgaW5jbHVkZXMgc3VjaCB0YXNrcyBhcyBjcmVhdGluZyB0aGUgbW9kdWxlcyB3aGljaCB3aWxsIGNvbnRhaW4KLXRoZSBnZW5lcmF0ZWQgY29kZSwgV1NETCBmaWxlcywgZGVwbG95bWVudCBkZXNjcmlwdG9ycywgYW5kIEphdmEgZmlsZXMgd2hlbgotYXBwcm9wcmlhdGUuPC9saT4KLQotPGxpPkFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudAotZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyLjwvbGk+Ci0KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4KLQotPGxpPkluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIFdlYiBtb2R1bGUgYW5kIEVBUnMgb24gdGhlCi10YXJnZXQgc2VydmVyLjwvbGk+Ci0KLTxsaT5TdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQKLW9uIGl0LiBUaGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9saT4KLQotPGxpPlRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZSwgc3VjaAotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkKLWEgZGlmZmVyZW50IHNlcnZlci48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBydW50aW1lOiB0aGUgZGVmYXVsdCBydW50aW1lIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgcnVudGltZSBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBydW50aW1lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc2VydmljZSBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0Ci1zZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZAotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuPC9zcGFuPiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZAotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBjbGllbnQsIHNlbGVjdCB0aGUgdHlwZSBvZiBwcm94eSB0bwotYmUgZ2VuZXJhdGVkIGFuZCByZXBlYXQgdGhlIGFib3ZlIHN0ZXBzIGZvciB0aGUgY2xpZW50Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLXRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljCi10aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZAotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLiBBbHRlcm5hdGVseQoteW91IGNhbiBtYW51YWxseSBzZXQgdXAgYSBUQ1AvSVAgbW9uaXRvciBhcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sIj5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L2E+PC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2UgSmF2YSBCZWFuIElkZW50aXR5IHBhZ2U6IHRoZSBXZWIgc2VydmljZQotV1NETCBuYW1lIHdpbGwgYmUgbGlzdGVkLjwvc3Bhbj4gWW91IGhhdmUgdGhlIGZvbGxvd2luZyBvcHRpb25zOjx1bD4KLTxsaT5TZWxlY3QgdGhlIG1ldGhvZHMgdG8gZXhwb3NlLjwvbGk+Ci0KLTxsaT5TZWxlY3QgdGhlIGVuY29kaW5nIHN0eWxlLiBSUEMvRW5jb2RlZCBpcyB0aGUgcmVjb21tZW5kZWQgZW5jb2Rpbmcgc3R5bGUKLWZvciB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC4gVGhpcyBlbmNvZGluZyBtZXRob2QgaXMgbm90IFdTLUkgY29tcGxpYW50LjwvbGk+Ci0KLTxsaT5TZWxlY3QgaWYgeW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSBwYWNrYWdlIHRvIG5hbWVzcGFjZSBtYXBwaW5ncy48L2xpPgotCi08L3VsPgotQ2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBQYWNrYWdlIHRvIE5hbWVzcGFjZSBNYXBwaW5ncyBwYWdlOiBpZiB5b3Ugc2VsZWN0ZWQKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIHBhY2thZ2UgdG8gbmFtZXNwYWNlPC9zcGFuPiBvbgotdGhlIHByZXZpb3VzIHBhbmVsLCB5b3UgY2FuIGVudGVyIHlvdXIgY3VzdG9tIG1hcHBpbmcgcGFpcnMgb24gdGhpcyBwYW5lbAotYnkgY2xpY2tpbmcgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZDwvc3Bhbj4uIEFsdGVybmF0ZWx5LCB5b3UgY2FuIGNsaWNrICA8c3Ryb25nPkltcG9ydDwvc3Ryb25nPiB0bwotaW1wb3J0IGN1c3RvbSBtYXBwaW5nIHBhaXJzIGZyb20gYSAgPHR0IGNsYXNzPSJzeXNvdXQiPi5wcm9wZXJ0aWVzPC90dD4gZmlsZS4KLVRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0ICA8c2FtcCBjbGFzcz0iY29kZXBoIj48dmFyIGNsYXNzPSJ2YXJuYW1lIj5wYWNrYWdlPW5hbWVzcGFjZTwvdmFyPjwvc2FtcD4uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBUZXN0IHBhZ2U6IElmIHlvdSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSwKLXNlbGVjdCB0aGUgdGVzdCBmYWNpbGl0eSBmb3IgdGhlIGdlbmVyYXRlZCBXZWIgc2VydmljZS48L3NwYW4+IFRoaXMgd2lsbAotb3BlbiB0aGUgV2ViIHNlcnZpY2UgaW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91Ci13YW50IHRvIHRlc3QsIGVudGVyIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiwgYW5kIGNsaWNrPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+LgotVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IGlmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIGdlbmVyYXRlIGEgcHJveHksCi1zZWxlY3QgaWYgeW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSBwYWNrYWdlIHRvIG5hbWVzcGFjZSBtYXBwaW5ncy48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBVc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgZm9sbG93aW5nCi1vcHRpb25zOiA8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+U2VsZWN0IHlvdXIgdGVzdCBmYWNpbGl0eS4gWW91IGNhbiB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkKLWluIHRoZSBXZWIgU2VydmljZSBFeHBsb3Jlciwgb3IgeW91IGNhbiBnZW5lcmF0ZSBhIHNhbXBsZSBXZWIgc2VydmljZSBKU1AuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPklmIHlvdSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBwcm94eSB0aHJvdWdoIGEgSlNQLCB5b3UgY2FuIHNlbGVjdAotdGhlIGZvbGRlciB3aGVyZSB0aGUgSlNQIHdpbGwgYmUgbG9jYXRlZCwgYW5kIHlvdSBjYW4gc2VsZWN0IHRoZSBtZXRob2RzIHRoYXQKLXdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIEpTUC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuIHRlc3Qgb24gc2VydmVyPC9zcGFuPiB0byBzdGFydCB0aGUKLXNlcnZlciBmb3IgeW91IGF1dG9tYXRpY2FsbHkuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2UgUHVibGljYXRpb24gcGFnZTogU2VsZWN0IHdoZXRoZXIgb3Igbm90IHlvdSB3YW50IHRvCi1wdWJsaXNoIHRoaXMgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LiBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+LsKgPC9zcGFuPgotIE5vdGU6IHlvdSBtYXkgc2VlIGEgd2FybmluZyBzdGF0aW5nIDxzYW1wIGNsYXNzPSJjb2RlcGgiPkVycm9yIGluIGdlbmVyYXRpbmcgV1NETAotZnJvbSBKYXZhLiBDbGFzc05vdEZvdW5kOiAmbHQ7YmVhbiBuYW1lJmd0Ozwvc2FtcD4uIFRoaXMgZXJyb3IgY2FuIGJlIHNhZmVseQotaWdub3JlZC48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0idHdzYmVhbmFfX2F4aXN3c2NyZWF0ZXJlc3VsdCI+PGEgbmFtZT0idHdzYmVhbmFfX2F4aXN3c2NyZWF0ZXJlc3VsdCI+PCEtLSAtLT48L2E+PGRpdiBjbGFzcz0icCI+QWZ0ZXIgdGhlIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGNyZWF0ZWQsCi10aGUgZm9sbG93aW5nIG1heSBvY2N1ciBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbnMgeW91IHNlbGVjdGVkOiA8dWw+Ci08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5IHVzaW5nIFdlYiBzZXJ2aWNlIEpTUHMsCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogaHR0cDovL2xvY2FsaG9zdDogPHZhciBjbGFzcz0idmFybmFtZSI+cG9ydDwvdmFyPi8gPHZhciBjbGFzcz0idmFybmFtZSI+V2ViUHJvamVjdDwvdmFyPkNsaWVudC9zYW1wbGU8ZW0+QmVhbk5hbWU8L2VtPi8gPHZhciBjbGFzcz0idmFybmFtZSI+V2ViU2VydmljZU5hbWU8L3Zhcj4vVGVzdENsaWVudC5qc3AgWW91IGNhbiB1c2UKLXRoaXMgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIGJ5IHNlbGVjdGluZyBhIG1ldGhvZCwgZW50ZXJpbmcKLWEgdmFsdWUgZm9yIHRoZSBtZXRob2QsIGFuZCBjbGlja2luZyAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SW52b2tlPC9zcGFuPi4gVGhlIHJlc3VsdAotb2YgdGhlIG1ldGhvZCB3aWxsIGRpc3BsYXkgaW4gdGhlIHJlc3VsdHMgcGFuZS48L2xpPgotCi08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwKLXRoZSBFeHBsb3JlciB3aWxsIG9wZW4uIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvIHRlc3QsIGVudGVyIHRoZSByZXF1aXJlZAotaW5mb3JtYXRpb24sIGFuZCBjbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPi4gVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLjwvbGk+Ci0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byBwdWJsaXNoIHRoZSBXZWIgc2VydmljZSwgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotaXMgbGF1bmNoZWQgZGlzcGxheWluZyB0aGUgcGFnZSByZXF1aXJlZCB0byBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UuIEZvbGxvdwotdGhlIGluc3RydWN0aW9ucyBpbiAgPHZhciBjbGFzcz0idmFybmFtZSI+UHVibGlzaGluZyB0aGUgV2ViIHNlcnZpY2U8L3Zhcj4gdG8gY29tcGxldGUKLXRoaXMgdGFzay48L2xpPgotCi08L3VsPgotPC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkltcG9ydGFudDo8L3NwYW4+IElmIHlvdXIgbWV0aG9kcyBjb250YWluIHR5cGVzLAotbm90IHN1cHBvcnRlZCBieSB0aGUgc2FtcGxlLCBzdWNoIGFzIGFycmF5cywgaW5kZXhlZCBwcm9wZXJ0aWVzLCBhbmQgY29sbGVjdGlvbnMsCi10aGUgbWV0aG9kcyB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgc2FtcGxlIGFuZCB5b3Ugd2lsbCByZWNlaXZlIGEgd2FybmluZwotbWVzc2FnZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL2NheGlzdG92ZXIuaHRtbCIgdGl0bGU9IlRoaXMgcnVudGltZSBlbnZpcm9ubWVudHMgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3IgdGhlIG9wZW4gQXBhY2hlIEF4aXMgcGxhdGZvcm0uIj5DcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMxIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sIj4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwiPldTREwgZG9jdW1lbnRzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc19yZWx0YWJsZV90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzX3JlbHRhYmxlX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2Y5YjdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzX3JlbHRhYmxlX3RvYy5kaXRhbWFwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiINCi0gIm1hcC5kdGQiPg0KLTxtYXAgdGl0bGU9IlJlbHRhYmxlIGZvciBBeGlzIFdlYiBzZXJ2aWNlcyBkb2NzIj4NCi08cmVsdGFibGU+DQotPHJlbGhlYWRlcj4NCi08cmVsY29sc3BlYyB0eXBlPSJjb25jZXB0Ij48L3JlbGNvbHNwZWM+DQotPHJlbGNvbHNwZWMgdHlwZT0idGFzayI+PC9yZWxjb2xzcGVjPg0KLTxyZWxjb2xzcGVjIHR5cGU9InJlZmVyZW5jZSI+PC9yZWxjb2xzcGVjPg0KLTwvcmVsaGVhZGVyPg0KLTxyZWxyb3c+DQotPHJlbGNlbGwgY29sbGVjdGlvbi10eXBlPSJmYW1pbHkiPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY2F4aXN0b3Zlci5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnRzIj4NCi08L3RvcGljcmVmPg0KLTwvcmVsY2VsbD4NCi08cmVsY2VsbD4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3R3c2JlYW5hLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhbiBBeGlzMSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvdHNrbHdzZGxhLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhbiBBeGlzMSBXZWIgc2VydmljZSBmcm9tIFdTREwiPg0KLTwvdG9waWNyZWY+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy90c2FtcGFwcGEuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIGFuIEF4aXMxIFdlYiBzZXJ2aWNlIGNsaWVudCI+DQotPC90b3BpY3JlZj4NCi08L3JlbGNlbGw+DQotPHJlbGNlbGw+PC9yZWxjZWxsPg0KLTwvcmVscm93Pg0KLTwvcmVsdGFibGU+DQotPC9tYXA+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNfcmVsdGFibGVfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzX3JlbHRhYmxlX3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNTIwZDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNfcmVsdGFibGVfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsYWJlbD0iUmVsdGFibGUgZm9yIEF4aXMgV2ViIHNlcnZpY2VzIGRvY3MiLz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzYnVpbGRfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDUzNGU4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzYnVpbGRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIKLSAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dzY3JlYXRpb250MV90b2MuZGl0YW1hcCN3c2F4aXMiCi1pZD0id3NheGlzIiB0aXRsZT0id3NheGlzIj4KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvY2F4aXN0b3Zlci5kaXRhIiBuYXZ0aXRsZT0iQXBhY2hlIEF4aXMxIHJ1bnRpbWUiIHRvYz0ibm8iPgotPHRvcGljcmVmIGhyZWY9InRvcGljcy90dG9tY2F0c2Vydi5kaXRhIiBuYXZ0aXRsZT0iSW5zdGFsbGluZyBhbmQgY29uZmlndXJpbmcgQXBhY2hlIFRvbWNhdCI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRvcGljcy90d3NiZWFuYS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idG9waWNzL3Rza2x3c2RsYS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBKYXZhIFNrZWxldG9uIGZyb20gV1NETCI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRvcGljcy90c2FtcGFwcGEuZGl0YSIgbmF2dGl0bGU9IkdlbmVyYXRpbmcgYSBKYXZhIGNsaWVudCBwcm94eSBmcm9tIGEgV1NETCBkb2N1bWVudCI+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNidWlsZF90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNidWlsZF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmYzN2U0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzYnVpbGRfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd3NjcmVhdGlvbnQxX3RvYy54bWwjd3NheGlzIiBsYWJlbD0id3NheGlzIiB0b3BpYz0idG9waWNzL2NheGlzdG92ZXIuaHRtbCIvPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTQ0ODdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MGJkYTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4Y2FkZDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAwLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ1N2VjMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd3Njb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sLFwKLSAgICAgICAgICAgICAgIHdzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcwotZ2VuZXJhdGVTb3VyY2VCdW5kbGU9ZmFsc2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc5NzdiMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0hIFBsdWctaW4gcHJvcGVydGllcwotcGx1Z2luTmFtZSAgICAgPSBXZWIgc2VydmljZXMgVUkKLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNTZjY2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI+Ci0JCTxjb250ZXh0cyBmaWxlPSJ3c2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwiIHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIi8+Ci0JCTxjb250ZXh0cyBmaWxlPSJ3c2NyZWF0aW9udWktZjFDb250ZXh0cy54bWwiIHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIi8+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3dzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3Avd3Njb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2M5Y2ViLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3Avd3Njb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08Y29udGV4dHM+Ci0KLTwhLS1Ub3BvbG9neVByZWZlcmVuY2VQYWdlLmphdmEtLT4KLQotPGNvbnRleHQgaWQ9IlBQVFAwMDAxIj4KLTwhLS1QVFBQMDAwMSBmb3IgdGhlIFRvcG9sb2d5IFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoZXNlIHRhYmxlcyByZXNwcmVzZW50cyB0aGUgdGhlIHR5cGVzIG9mIHByb2plY3RzIGF2YWlsYWJsZSBpbnRvIHdoaWNoIHlvdSBjYW4gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBvciBjbGllbnQuIAotWW91IGNhbm5vdCBhZGQgb3IgcmVtb3ZlIHByb2plY3QgdHlwZXMsIGhvd2V2ZXIgeW91IGNhbiBjaGFuZ2UgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIGluIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIGNyZWF0aW5nIHNldmVyYWwgV2ViIHNlcnZpY2VzIHRoYXQgdXNlIHRoZSBzYW1lIHR5cGUgb2Ygc2VydmljZSBvciBjbGllbnQgcHJvamVjdCBiZWNhdXNlIHlvdSBjYW4gc2V0IHRoYXQgc2VydmljZSBvciBjbGllbnQgcHJvamVjdCB0eXBlIGFzIHRoZSBkZWZhdWx0LiAKLVRvIGNoYW5nZSB0aGUgb3JkZXIsIHNlbGVjdCBhIHByb2plY3QgdHlwZSBhbmQgdXNlIHRoZSB1cCBhbmQgZG93biBhcnJvd3MgdG8gbW92ZSBpdCB3aXRoaW4gdGhlIGxpc3QuIENoYW5naW5nIHRoZSBvcmRlciBvZiB0aGUgbGlzdCBkb2VzIG5vdCByZXN0cmljdCB5b3VyIGFiaWxpdHkgdG8gc2VsZWN0IGFueSBvZiB0aGUgb3B0aW9ucy4KLUlmIHlvdSBzZWxlY3QgdGhlIGNoZWNrIGJveCwgYnkgZGVmYXVsdCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCB3aWxsIGdlbmVyYXRlIHRoZSBXZWIgc2VydmljZXMgc2VydmVyIGFuZCBjbGllbnQgY29kZSBpbnRvIGRpZmZlcmVudCBFQVJzLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBlbmFibGUgdGhpcyBmZWF0dXJlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLSBTZXJ2ZXIgYW5kIFJ1bnRpbWUgUHJlZmVyZW5jZSBwYWdlLS0+Ci08Y29udGV4dCBpZD0iU1JQRjAwMDEiPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgZGVmYXVsdCBXZWIgc2VydmVyIHRvIGJlIHVzZWQgZm9yIFdlYiBzZXJ2aWNlIGNyZWF0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iU1JQRjAwMDIiPgotPCEtLXJ1bnRpbWUgcHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyIHJ1bnRpbWUgcHJlZmVyZW5jZSBwYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBkZWZhdWx0IHNlcnZlciBydW4tdGltZSBlbnZpcm9ubWVudCB0byBiZSB1c2VkIGZvciBXZWIgc2VydmljZSBjcmVhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tIFN0YXJ0IHNlcnZlciBwYWdlLS0+Ci08Y29udGV4dCBpZD0iU1NXUDAwMDEiPgotPGRlc2NyaXB0aW9uPklmIHlvdSBoYXZlIGNob3NlbiB0byBpbnN0YWxsLCBzdGFydCwgb3IgZGVwbG95IHRoZSBXZWIgc2VydmljZSwgdGhlIHNlcnZlciBuZWVkcyB0byBiZSBzdGFydGVkIGJlZm9yZSB0aGUgd2l6YXJkIGNhbiBwcm9jZWVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS0gRUpCIHNlbGVjdGlvbiB3aWRnZXQtLT4KLTxjb250ZXh0IGlkPSJQRUJEMDAwMSI+Ci08IS0tIEVBUiBQcm9qZWN0cyBkcm9wLWRvd24gYm94IC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBmcm9tIHRoZSBsaXN0ZWQgRUFSIHByb2plY3RzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQRUJEMDAwMiI+Ci08IS0tIFRhYmxlIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBiZWFuIG5hbWVzIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBmcm9tIHRoZSBsaXN0ZWQgSmF2YSBiZWFucy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tV2ViU2VydmljZVRQQmVhbkNsYXNzUGFnZS5qYXZhLS0+Ci08Y29udGV4dCBpZD0iUEJDTDAwMDEiPgotPCEtLVBCQ0wwMDAxIGZvciB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBKYXZhIGJlYW4gb3IgY2xhc3MgdXNlZCB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJDTDAwMDIiPgotPCEtLVBCQ0wwMDAyIGZvciB0aGUgQmVhbiBTZWxlY3Rpb24gZmllbGQgb2YgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgbmFtZSBvZiB0aGUgSmF2YSBiZWFuIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZS4gRGVmYXVsdHMgdG8gdGhlIHNlbGVjdGVkIEphdmEgYmVhbi4gQ2xpY2sgQnJvd3NlIGNsYXNzZXMgdG8gdmlldyB0aGUgYmVhbiBjbGFzcyBvZiB0aGUgc2VsZWN0ZWQgSmF2YSBiZWFuLiBUaGUgYmVhbiBjbGFzcyBpcyBhIG1vZGVsIG9yIHRlbXBsYXRlIChhbiBhYnN0cmFjdCBkYXRhIHR5cGUpIHRoYXQgY2FuIGJlIGluc3RhbnRpYXRlZCB0byBjcmVhdGUgb2JqZWN0cyB3aXRoIGEgY29tbW9uIGRlZmluaXRpb24gYW5kIHRoZXJlZm9yZSwgY29tbW9uIHByb3BlcnRpZXMsIG9wZXJhdGlvbnMsIGFuZCBiZWhhdmlvci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCQ0wwMDAzIj4KLTwhLS1QQkNMMDAwMyBmb3IgdGhlIEJlYW4gQ2xhc3MgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkNsaWNrIHRvIHZpZXcgdGhlIGJlYW4gY2xhc3Mgb2YgdGhlIHNlbGVjdGVkIEphdmEgYmVhbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCQ0wwMDA0Ij4KLTwhLS1QQkNMMDAwNCBmb3IgdGhlIEJlYW4gUmVzb3VyY2UgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkJyb3dzZSB0byB0aGUgY29ycmVjdCBKYXZhIGJlYW4gdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPCEtLVdTRExTZWxlY3Rpb25XaWRnZXQuamF2YS0tPgotPGNvbnRleHQgaWQ9IlBDT04wMDAxIj4KLTwhLS0gV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBXU0RMLCBXU0lMLCBvciBIVE1MIGRvY3VtZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UuIEJ5IGRlZmF1bHQgV1NETCB2YWxpZGF0aW9uIGlzIGRpc2FibGVkLiBZb3UgY2FuIGVuYWJsZSBpdCB0aHJvdWdoIFByZWZlcmVuY2VzID4gV2ViIFNlcnZpY2VzID4gV2l6YXJkIFZhbGlkYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBDT04wMDAyIj4KLTwhLS0gV1NETCBEb2N1bWVudCB0ZXh0IGZpZWxkIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIHBhdGggdG8gYSBXU0RMLCBXU0lMLCBvciBIVE1MIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQ09OMDAwMyI+Ci08IS0tIFdTREwgUmVzb3VyY2UgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkJyb3dzZSB0byB0aGUgbG9jYXRpb24gb2YgYSBXU0RMLCBXU0lMLCBvciBIVE1MIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQ09OMDAwNCI+Ci08IS0tICBmb3IgdGhlIFdpemFyZCBXU0RMIFZhbGlkYXRpb24gdGFibGUgb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIHRhYmxlIGxpc3RzIGFueSBpc3N1ZXMgdGhlIFdTREwgdmFsaWRhdG9yIG1heSBoYXZlIGVuY291bnRlcmVkIHdoaWxlIGV4YW1pbmluZyB0aGUgc3BlY2lmaWVkIFdTREwgZmlsZS4gQnkgZGVmYXVsdCBXU0RMIHZhbGlkYXRpb24gaXMgZGlzYWJsZWQuIFlvdSBjYW4gZW5hYmxlIGl0IHRocm91Z2ggUHJlZmVyZW5jZXMgPiBXZWIgU2VydmljZXMgPiBXaXphcmQgVmFsaWRhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUENPTjAwMDUiPgotPCEtLSAgV2l6YXJkIFdTREwgVmFsaWRhdGlvbiBzdW1tYXJ5IG1lc3NhZ2Ugb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIHRhYmxlIGxpc3RzIGFueSBpc3N1ZXMgdGhlIFdTREwgdmFsaWRhdG9yIG1heSBoYXZlIGVuY291bnRlcmVkIHdoaWxlIGV4YW1pbmluZyB0aGUgc3BlY2lmaWVkIFdTREwgZmlsZS4gQnkgZGVmYXVsdCBXU0RMIHZhbGlkYXRpb24gaXMgZGlzYWJsZWQuIFlvdSBjYW4gZW5hYmxlIGl0IHRocm91Z2ggUHJlZmVyZW5jZXMgPiBXZWIgU2VydmljZXMgPiBXaXphcmQgVmFsaWRhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUENPTjAwMDYiPgotPCEtLSAgU3RvcCBXaXphcmQgV1NETCBWYWxpZGF0aW9uIGJ1dHRvbiBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkNsaWNrIHRoaXMgYnV0dG9uIHRvIHN0b3AgdGhlIHZhbGlkYXRpb24gb2YgdGhlIHNlbGVjdGVkIFdTREwgZmlsZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy5qYXZhLS0+Ci08Y29udGV4dCBpZD0iUFdSUzAwMDEiPgotPCEtLSAgUnVuLXRpbWUvc2VydmVycyBpbiB0aGUgV2ViIFNlcnZpY2UgdHlwZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgc2NlbmFyaW8gY29uZmlndXJhdGlvbiBmb3IgcnVudGltZSBlbnZpcm9ubWVudHMsIHNlcnZlcnMsIGFuZCBwcm9qZWN0cy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDIiPgotPCEtLSAgc2VydmljZS1zaWRlIHJ1bi10aW1lIGVudmlyb25tZW50IHNlbGVjdGlvbiBvZiB0aGUgcnVuLXRpbWUgZW52aXJvbm1lbnQgc2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGlzIHRoZSBzZXJ2ZXItc2lkZSBydW50aW1lIGVudmlyb25tZW50IHdoaWNoIHRoZSBXZWIgc2VydmljZSB3aWxsIHVzZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDMiPgotPCEtLSBzZXJ2aWNlLXNpZGUgc2VydmVyIHNlbGVjdGlvbiBvZiB0aGUgcnVuLXRpbWUgZW52aXJvbm1lbnQgc2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGlzIHRoZSBzZXJ2ZXItc2lkZSBzZXJ2ZXIgb24gd2hpY2ggdGhlIFdlYiBzZXJ2aWNlIHdpbGwgcnVuLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwNSI+Ci08IS0tICBydW50aW1lIHZpZXcgcmFkaW8gYnV0dG9uLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgdmlldyB0byBzZWUgcnVudGltZS9zZXJ2ZXIgY29tYmluYXRpb25zIHNvcnRlZCBieSBydW50aW1lLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwNiI+Ci08IS0tc2VydmVyIHZpZXcgcmFkaW8gYnV0dG9uLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgdmlldyB0byBzZWUgcnVudGltZS9zZXJ2ZXIgY29tYmluYXRpb25zIHNvcnRlZCBieSBzZXJ2ZXIuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDA3Ij4KLTwhLS0gIGNleHBsb3JlIHZpZXcgcmFkaW8gYnV0dG9uLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgdmlldyB0byBleHBsb3JlIGF2YWlsYWJsZSBydW50aW1lL3NlcnZlciBjb21iaW5hdGlvbnMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08IS0tUHJvamVjdFNlbGVjdGlvbldpZGdldC5qYXZhLS0+Ci08Y29udGV4dCBpZD0iUFdSUzAwMTYiPgotPCEtLSAgc2VydmljZS1zaWRlIFdlYiBwcm9qZWN0IGNvbWJvIGJveCBvZiB0aGUgcnVuLXRpbWUgZW52aXJvbm1lbnQgc2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHByb2plY3QgaW4gd2hpY2ggdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCB3aWxsIGJlIGNyZWF0ZWQuIFRoZSB3aXphcmQgd2lsbCBnZW5lcmF0ZSB0aGlzIHByb2plY3QgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMTgiPgotPCEtLSBjbGllbnQgdHlwZSBjb21ibyBib3ggIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBmcm9tIHRoZSBsaXN0ZWQgcHJvamVjdCB0eXBlcyB0aGUgdHlwZSBvZiBwcm9qZWN0IHRoYXQgeW91IHdhbnQgY3JlYXRlZCB0byBjb250YWluIHlvdXIgV2ViIHNlcnZpY2UgY2xpZW50LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAyMCI+Ci08IS0tIHNlcnZpY2UgcHJvamVjdCB0eXBlIGNvbWJvIGJveCAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgZnJvbSB0aGUgbGlzdGVkIHByb2plY3QgdHlwZXMgdGhlIHR5cGUgb2YgcHJvamVjdCB0aGF0IHlvdSB3YW50IGNyZWF0ZWQgdG8gY29udGFpbiB5b3VyIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPGNvbnRleHQgaWQ9IlBXU00wMDAxIj4KLTwhLS0gU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+VGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdyB0byBjb2RlIHRoZSBwcm94eSBmaWxlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAwMiI+Ci08IS0tIFRlc3QgY2hlY2sgYm94IG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5JZiBzZWxlY3RlZCB3aWxsIGxhdW5jaCB0aGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBpbiB0aGUgV2ViIGJyb3dzZXIuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDAzIj4KLTwhLS0gVGVzdCBUeXBlIENvbWJvIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+VGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdyB0byBjb2RlIHRoZSBwcm94eSBmaWxlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAwNiI+Ci08IS0tIFNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5DbGljayB0aGlzIGJ1dHRvbiB0byBhZGQgYWxsIHRoZSBhdmFpbGFibGUgbWV0aG9kcyB0byB0aGUgV2ViIHNlcnZpY2Ugc2FtcGxlIHByb3h5LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAwNyI+Ci08IS0tIERlc2VsZWN0IEFsbCBidXR0b24gb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPkNsaWNrIHRoaXMgYnV0dG9uIHRvIHJlbW92ZSBhbGwgdGhlIGF2YWlsYWJsZSBtZXRob2RzIHRvIHRoZSBXZWIgc2VydmljZSBzYW1wbGUgcHJveHkuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDA4Ij4KLTwhLS0gSlNQIEZvbGRlciBmaWVsZCBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+Rm9sZGVyIGludG8gd2hpY2ggeW91ciBXZWIgc2VydmljZSBKU1BzIGFyZSBkZXBvc2l0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDA5Ij4KLTwhLS0gSlNQIEZvbGRlciBCcm93c2UgYnV0dG9uIG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5DbGljayB0byBmaW5kIHRoZSBmb2xkZXIgaW50byB3aGljaCB5b3VyIFdlYiBzZXJ2aWNlIEpTUHMgYXJlIGRlcG9zaXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMTAiPgotPCEtLSBQcm9qZWN0IGNvbWJvIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IGFuIGV4aXN0aW5nIHByb2plY3QgaW50byB3aGljaCB5b3VyIHNhbXBsZSB3aWxsIGJlIGdlbmVyYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMTQiPgotPCEtLSBGb2xkZXIgZmllbGQgb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPkZvbGRlciBpbnRvIHdoaWNoIHRoZSBmdWxseSBxdWFsaWZpZWQgcHJveHkgaXMgZ2VuZXJhdGVkLiBEZWZhdWx0cyB0byB0aGUgc291cmNlIGZvbGRlciBpbnNpZGUgb2YgeW91ciBXZWIgcHJvamVjdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMTUiPgotPCEtLSBSdW4gdGVzdCBjaGVjayBib3ggb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBydW4gdGhlIHNhbXBsZSBhcHBsaWNhdGlvbiBvbiB0aGUgc2VydmVyLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAxNiI+Ci08IS0tIEVBUiBjb21ibyBib3ggb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgRUFSIGluIHdoaWNoIHlvdSB3YW50IHlvdXIgV2ViIHNlcnZpY2Ugc2FtcGxlIGFwcGxpY2F0aW9uIGNyZWF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLSBoYW5kbGVyIHdpemFyZC0tPgotPGNvbnRleHQgaWQ9IkFIREwwMDAxIj4KLTwhLS1IYW5kbGVyIGNvbmZpZyBwYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgd2l6YXJkIHRvIGFkZCBhbmQgcmVtb3ZlIGhhbmRsZXJzIGZvciBhIFdlYiBzZXJ2aWNlLiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgbGlzdGVkIHJlcHJlc2VudHMgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBoYW5kbGVycyB3aWxsIGJlIGFjdGVkIHVwb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJBSERMMDAwMiI+Ci08IS0tSGFuZGxlciBjb25maWcgcGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHdpemFyZCB0byBhZGQgYW5kIHJlbW92ZSBoYW5kbGVycyBmb3IgYSBXZWIgc2VydmljZS4gVGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGxpc3RlZCByZXByZXNlbnRzIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgaGFuZGxlcnMgd2lsbCBiZSBhY3RlZCB1cG9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iQUhETDAwMDMiPgotPCEtLUhhbmRsZXIgY29uZmlnIHBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyB3aXphcmQgdG8gYWRkIGFuZCByZW1vdmUgaGFuZGxlcnMgZm9yIGEgV2ViIHNlcnZpY2UuIFRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBsaXN0ZWQgcmVwcmVzZW50cyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGhhbmRsZXJzIHdpbGwgYmUgYWN0ZWQgdXBvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLQotPCEtLVdlYlNlcnZpY2VXaXpOZXdGaXJzdFBhZ2UtLT4KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAwMSI+Ci08IS0tIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5PbiB0aGlzIHBhZ2Ugc2VsZWN0IHRoZSBhcnRpZmFjdCBmcm9tIHdoaWNoIHlvdXIgV2ViIGNsaWVudCB3aWxsIGJlIGNyZWF0ZWQsIGFuZCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZToKLS0gRGV2ZWxvcDogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgY2xpZW50IGNvZGUKLS0gQXNzZW1ibGU6IHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBjbGllbnQgZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyCi0tIERlcGxveTogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgZGVwbG95bWVudCBjb2RlIGZvciB0aGUgY2xpZW50Ci0tIEluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIHRoZSBjbGllbnQgb24gdGhlIGNob3NlbiBzZXJ2ZXIKLS0gU3RhcnQ6IHRoaXMgd2lsbCBzdGFydCB0aGUgc2VydmVyIG9uY2UgdGhlIGNsaWVudCBoYXMgYmVlbiBpbnN0YWxsZWQgb24gaXQKLS0gVGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBjbGllbnQKLVNlbGVjdCB0aGUgc2VydmVyIGFuZCBydW50aW1lIGZvciB5b3VyIFdlYiBjbGllbnQsIGFuZCB3aGV0aGVyIG9yIG5vdCB5b3Ugd2FudCB0byBwdWJsaXNoIG9yIG1vbml0b3IgdGhlIHNlcnZpY2UuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMTQiPgotPCEtLU1vbml0b3IgY2hlY2tib3ggb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Nb25pdG9yIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIHNlbmQgdGhlIFdlYiBzZXJ2aWNlIHRyYWZmaWMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IsIHdoaWNoIGFsbG93cyB5b3UgdG8gd2F0Y2ggdGhlIFNPQVAgdHJhZmZpYyBnZW5lcmF0ZWQgYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyMCI+Ci08IS0tU2VydmljZSBpbXBsZW1lbnRhdGlvbiBmaWVsZCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBVUkkgdG8gdGhlIFdTREwsIFdTSUwsIG9yIEhUTUwgZmlsZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgc2VydmljZTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyMiI+Ci08IS0tU2VydmVyIGxpbmsgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgeW91ciBzZXJ2ZXI6IHRoZSBkZWZhdWx0IHNlcnZlciBpcyBkaXNwbGF5ZWQuIElmIHlvdSB3YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgc2VydmVyLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyMyI+Ci08IS0tcnVudGltZSBsaW5rIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgcnVudGltZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjQiPgotPCEtLXByb2plY3RzIGxpbmsgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHNlcnZpY2UgcHJvamVjdDogdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgcHJvamVjdAotc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQKLUVBUiBjbGljayBvbiB0aGUgcHJvamVjdCBsaW5rLiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZAotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDI1Ij4KLTwhLS1jbGllbnQgdHlwZSBjb21ibyBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoZSBKYXZhIGJlYW4gY2xpZW50IHByb3h5IHRoYXQgaXMgZ2VuZXJhdGVkIHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDI2Ij4KLTwhLS1DbGllbnQgc2xpZGVyIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGNsaWVudCBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOgotLSBEZXZlbG9wOiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBjbGllbnQgY29kZQotLSBBc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIGNsaWVudCBnZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIKLS0gRGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBjbGllbnQKLS0gSW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgdGhlIGNsaWVudCBvbiB0aGUgY2hvc2VuIHNlcnZlcgotLSBTdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgY2xpZW50IGhhcyBiZWVuIGluc3RhbGxlZCBvbiBpdAotLSBUZXN0OiB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcgdGhlIGNsaWVudAotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDMwIj4KLTwhLS1maWxlIG92ZXJ3cml0ZSBjaGVja2JveCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgYWxsb3dzIHlvdSB0byBvdmVyd3JpdGUgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24gd2hlbiBvdmVyd3JpdGluZyBmaWxlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NJTDAwMDEiPgotPCEtLSAgV1NJTCBJbXBvcnQgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBhIHN0YW5kYXJkaXplZCBXU0RMIHJlZmVyZW5jZSAoV1NJTCkgZG9jdW1lbnQgaW4geW91ciBwcm9qZWN0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU0lMMDAwMiI+Ci08IS0tICBXU0lMIFRleHQgZmllbGQtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgbmFtZSBvZiB0aGUgV1NJTCBkb2N1bWVudCBiZWluZyBnZW5lcmF0ZWQsIG9yIGFjY2VwdCB0aGUgZGVmYXVsdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NJTDAwMDMiPgotPCEtLSAgV1NJTCBicm93c2UgYnV0dG9uLS0+Ci08ZGVzY3JpcHRpb24+QnJvd3NlIHRvIHRoZSBsb2NhdGlvbiBvZiBhIFdTREwgb3IgV1NJTCBmaWxlIGZyb20gd2hpY2ggdGhlIG5ldyBXU0lMIGRvY3VtZW50IHdpbGwgYmUgZ2VuZXJhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU0lMMDAwNCI+Ci08IS0tICBXU0lMIHRhYmxlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBsaXN0cyBhbGwgdGhlIFdTREwgVVJJcyB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIFdTSUwgZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDAxIj4KLTwhLS0gUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSB5b3Ugd2FudCB0byBnZW5lcmF0ZSBhbmQgYW55IGZpbGUgYW5kIGZvbGRlciBvcHRpb25zIGZvciB5b3VyIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAwMyI+Ci08IS0tT3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZyAoY2hlY2tib3gpLS0+Ci08ZGVzY3JpcHRpb24+QWxsb3dzIHlvdSB0byBvdmVyd3JpdGUgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24gd2hlbiBvdmVyd3JpdGluZyBmaWxlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMDQiPgotPCEtLUNyZWF0ZSBmb2xkZXJzIHdoZW4gbmVjZXNzYXJ5IChjaGVja2JveCktLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdG8gY3JlYXRlIGZvbGRlcnMgYW5kIGZvbGRlciBzdHJ1Y3R1cmVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAwNSI+Ci08IS0tICBHZW5lcmF0ZSBQcm94eSBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5UaGUgZ2VuZXJhdGVkIEphdmEgYmVhbiBwcm94eSBwcm92aWRlcyBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAwNiI+Ci08IS0tICBUZXN0IFByb3h5IGNoZWNrIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDA5Ij4KLTwhLS0gIFN0YXJ0IFdlYiBQcm9qZWN0IGNoZWNrIGJveCBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5DbGljayB0byBzdGFydCB0aGUgc2VydmVyLiBJZiB5b3UgbGVhdmUgdGhlIGJveCB1bmNoZWNrZWQgeW91IHdpbGwgaGF2ZSB0byBtYW51YWxseSBzdGFydCB0aGUgc2VydmVyLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxMCI+Ci08IS0tIFdlYiBTZXJ2aWNlIFR5cGUgY29tYm8gYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSB0eXBlIG9mIFdlYiBzZXJ2aWNlIHlvdSB3YW50IHRvIGJ1aWxkLiBZb3VyIHNlbGVjdGlvbiB3aWxsIGFmZmVjdCB0aGUgZmlsZXMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDExIj4KLTwhLS0gIFdpemFyZCBTY2VuYXJpbyBTZXJ2aWNlIGdyb3VwIG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSB0eXBlIG9mIFdlYiBzZXJ2aWNlIHlvdSB3YW50IHRvIGJ1aWxkLiBZb3VyIHNlbGVjdGlvbiB3aWxsIGFmZmVjdCB0aGUgZmlsZXMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDExIj4KLTwhLS0gIFRlc3Qgc2VydmljZSBjaGVja2JveCBvZiB0aGUgcHJvamVjdCBwYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBsYXVuY2ggdGhlIFdlYiBzZXJ2aWNlIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gb3JkZXIgdG8gZXhhbWluZSBpdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTIiPgotPCEtLSAgTGF1bmNoIFVEREkgY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2tib3ggdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gb3JkZXIgdG8gcHVibGlzaCB0aGUgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxMyI+Ci08IS0tICBXaXphcmQgU2NlbmFyaW8gQ2xpZW50IGdyb3VwIG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+VGhlIGdlbmVyYXRlZCBKYXZhIGJlYW4gcHJveHkgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTQiPgotPCEtLSAgV2ViIFNlcnZpY2UgQ2xpZW50IFR5cGUgY29tYm8gYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBjbGllbnQgcHJveHkgdHlwZS4gVGhlIGdlbmVyYXRlZCBKYXZhIGJlYW4gcHJveHkgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTUiPgotPCEtLSAgQ2hlY2sgT3V0IEZpbGVzIGNoZWNrIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0byBjaGVjayBvdXQgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08Y29udGV4dCBpZD0iUFdQQjAwMDEiPgotPCEtLSAgVURESSBQdWJsaXNoIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIGFsbG93IHlvdSB0byBwdWJsaXNoIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQQjAwMDIiPgotPCEtLSAgVURESSBMYXVuY2ggY2hlY2sgYm94IG9mIHRoZSBVRERJIFB1Ymxpc2ggUGFnZS0tPgotPGRlc2NyaXB0aW9uPklmIHNlbGVjdGVkIHdpbGwgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gYWxsb3cgeW91IHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1dTMDAwMSI+Ci08IS0tICBXU0RMIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIFdTREwsIFdTSUwsIG9yIEhUTUwgZG9jdW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdXUzAwMDIiPgotPCEtLSAgV1NETCBEb2N1bWVudCB0ZXh0IGZpZWxkIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIHBhdGggdG8gYSBXU0RMLCBXU0lMLCBvciBIVE1MIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1dTMDAwMyI+Ci08IS0tICBXU0RMIFJlc291cmNlIEJyb3dzZSBidXR0b24gb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Ccm93c2UgdG8gdGhlIGxvY2F0aW9uIG9mIGEgV1NETCwgV1NJTCwgb3IgSFRNTCBkb2N1bWVudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLTxjb250ZXh0IGlkPSJEQkFTMDAwMSI+Ci08IS0tIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gdXNlciBuYW1lIC0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSB1c2VyIG5hbWUgdXNlZCBmb3IgSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iREJBUzAwMDIiPgotPCEtLSBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkIC0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBwYXNzd29yZCB1c2VkIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotCi08L2NvbnRleHRzPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC93c2NyZWF0aW9udWktZjFDb250ZXh0cy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3dzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlMzc3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3dzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08Y29udGV4dHM+Ci0KLTxjb250ZXh0IGlkPSJQU1RQMDAwMSI+Ci08IS0tICBUZXN0IFR5cGUgQ29tYm8gYm94IG9mIHRoZSBTZXJ2aWNlIFRlc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdGVzdCBmYWNpbGl0eSBpbiB3aGljaCB5b3Ugd291bGQgbGlrZSB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSBiZWluZyBjcmVhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQU1RQMDAwMiI+Ci08IS0tICBMYXVuY2ggYnV0dG9uIG9mIHRoZSBTZXJ2aWNlIFRlc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkNsaWNrIHRoaXMgdG8gbGF1bmNoIHRoZSBXZWIgc2VydmljZSBpbiBhIGJyb3dzZXIgd2luZG93IHRvIHRlc3QgaXQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVdlYlNlcnZpY2VXaXpOZXdGaXJzdFBhZ2UtLT4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDAxIj4KLTwhLS0gRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPk9uIHRoaXMgcGFnZSBzZWxlY3QgdGhlIGFydGlmYWN0IGZyb20gd2hpY2ggeW91ciBXZWIgc2VydmljZSBvciBjbGllbnQgd2lsbCBiZSBjcmVhdGVkLCBhbmQgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudCB0byBjb21wbGV0ZToKLS0gRGV2ZWxvcDogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgc2VydmljZSBjb2RlCi0tIEFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgcHJvamVjdCB0aGF0IHdpbGwgaG9zdCB0aGUgV2ViIHNlcnZpY2Ugb3IgY2xpZW50IGdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlcgotLSBEZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UKLS0gSW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgdGhlIHNlcnZpY2Ugb24gdGhlIGNob3NlbiBzZXJ2ZXIKLS0gU3RhcnQ6IHRoaXMgd2lsbCBzdGFydCB0aGUgc2VydmVyIG9uY2UgdGhlIHNlcnZpY2UgaGFzIGJlZW4gaW5zdGFsbGVkIG9uIGl0Ci0tIFRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZQotU2VsZWN0IHRoZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgZm9yIHlvdXIgV2ViIHNlcnZpY2Ugb3IgY2xpZW50LCBhbmQgd2hldGhlciBvciBub3QgeW91IHdhbnQgdG8gcHVibGlzaCBvciBtb25pdG9yIHRoZSBzZXJ2aWNlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDEwIj4KLTwhLS1XZWIgc2VydmljZSB0eXBlIGNvbWJvIGJveCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSB5b3Ugd2FudCB0byBjcmVhdGUuIEEgYm90dG9tLXVwIHNlcnZpY2UgY3JlYXRlcyBhIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiBvciBFSkIsIHdoaWxlIGEgdG9wLWRvd24gc2VydmljZSB3aWxsIGNyZWF0ZSBhIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZSBhbmQgdGhlbiBjcmVhdGUgYSBza2VsZXRvbiBKYXZhIGJlYW4gb3IgRUpCIGZvciB5b3UgdG8gaW1wbGVtZW50IGxhdGVyLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAxNCI+Ci08IS0tTW9uaXRvciBjaGVja2JveCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPk1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgc2VuZCB0aGUgV2ViIHNlcnZpY2UgdHJhZmZpYyB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZCBieSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRvIHRlc3QgdGhpcyB0cmFmZmljIGZvciBXUy1JIGNvbXBsaWFuY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDEyIj4KLTwhLS1MYXVuY2ggVURESSBjaGVjayBib3ggb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5QdWJsaXNoIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDIwIj4KLTwhLS1TZXJ2aWNlIGltcGxlbWVudGF0aW9uIGZpZWxkIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIFVSSSB0byB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBmaWxlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDIxIj4KLTwhLS1TZXJ2aWNlIHNsaWRlciBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50IHRvIGNvbXBsZXRlIHVzaW5nIHRoZSBzbGlkZXI6Ci0tIERldmVsb3A6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIHNlcnZpY2UgY29kZQotLSBBc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudCBnZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIKLS0gRGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBzZXJ2aWNlCi0tIEluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIHRoZSBzZXJ2aWNlIG9uIHRoZSBjaG9zZW4gc2VydmVyCi0tIFN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGluc3RhbGxlZCBvbiBpdAotLSBUZXN0OiB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcgdGhlIHNlcnZpY2UKLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyMiI+Ci08IS0tU2VydmVyIGxpbmsgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgeW91ciBzZXJ2ZXI6IHRoZSBkZWZhdWx0IHNlcnZlciBpcyBkaXNwbGF5ZWQuIElmIHlvdSB3YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgc2VydmVyLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyMyI+Ci08IS0tcnVudGltZSBsaW5rIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdSB3YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgcnVudGltZSBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IHJ1bnRpbWUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDI0Ij4KLTwhLS1wcm9qZWN0cyBsaW5rIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBzZXJ2aWNlIHByb2plY3Q6IHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIHByb2plY3Qgc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQgRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuIEVuc3VyZSB0aGF0IHRoZSBwcm9qZWN0IHNlbGVjdGVkIGFzIHRoZSBDbGllbnQgV2ViIFByb2plY3QgaXMgZGlmZmVyZW50IGZyb20gdGhlIFNlcnZpY2UgV2ViIFByb2plY3QsIG9yIHRoZSBzZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDMwIj4KLTwhLS1maWxlIG92ZXJ3cml0ZSBjaGVja2JveCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgYWxsb3dzIHlvdSB0byBvdmVyd3JpdGUgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24gd2hlbiBvdmVyd3JpdGluZyBmaWxlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08L2NvbnRleHRzPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NDBmYjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyXzEuMC4wLmphcgotYmFrCi10ZW1wCi1EaXRhTGluay5jYXQKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzZGNiMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNhNTEzZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0gCi0KLQlUaGlzIHNjcmlwdCBidWlsZCB0aGUgSGVscCBwbHVnLWluIGJ5IHRyYW5zZm9ybWluZyB0aGUgRElUQSBzb3VyY2UgZmlsZXMgaW50byBIVE1MLgotCQotCVRvIHVzZSB0aGlzIHNjcmlwdCwgeW91IG11c3QgaW5zdGFsbCBESVRBLU9UIG9uIHlvdXIgbWFjaGluZSBpbiB0aGUgZGlyZWN0b3J5Ci0JZGVmaW5lZCBieSB0aGUgZGl0YS5vdC5kaXIgcHJvcGVydHkuCi0JCi0JUnVuIHRoZSBkZWZhdWx0IHRhcmdldCBhZnRlciB5b3UgZWRpdCB0aGUgRElUQSBzb3VyY2UgZmlsZXMgdG8gcmVnZW5lcmF0ZSB0aGUgSFRNTC4KLQkKLQlUbyBjdXN0b21pemUgdGhpcyBzY3JpcHQgZm9yIG90aGVyIEhlbHAgcGx1Zy1pbnMsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGFyZ3MuaW5wdXQgcHJvcGVydHkKLQl0byBiZSB0aGUgRElUQSBtYXAgZmlsZSBmb3IgdGhlIHBsdWctaW4uCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGxpbmtzIHRvIHNpYmxpbmcgSGVscCBwbHVnLWlucyBoYXZlIHNjb3BlPSJwZWVyIiwgb3RoZXJ3aXNlIHRoZQotCW91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpbGwgYmUgc2hpZnRlZCBpbmNvcnJlY3RseS4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgeW91IGhhbmQgY29kZSB5b3VyIHBsdWdpbi54bWwgZmlsZSBpbiBteXBsdWdpbi54bWwuIFRoaXMgZmlsZQotCXdpbGwgYmUgY29waWVkIG92ZXIgdGhlIGdlbmVyYXRlZCBwbHVnaW4ueG1sIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgZ2VuZXJhdGVkIGNvcnJlY3RseQotCWJ5IERJVEEtT1QuCi0JCi0JQ2hhbmdlTG9nOgotCTIwMDYtMDQtMDUgQXJ0aHVyIFJ5bWFuIDxyeW1hbkBjYS5pYm0uY29tPgotCS0gQ3JlYXRlZC4KLQotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIxLjUuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iY2xlYW4udGVtcCIgdmFsdWU9InRydWUiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS5leHRuYW1lIiB2YWx1ZT0iLmRpdGEiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS50ZW1wLmRpciIgbG9jYXRpb249InRlbXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LmRpciIgbG9jYXRpb249Ii4uIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9InRyYW5zdHlwZSIgdmFsdWU9ImVjbGlwc2VoZWxwIiAvPgotCQk8L2FudD4KLQkJPGNvcHkgZmlsZT0ibXlwbHVnaW4ueG1sIiB0b2ZpbGU9InBsdWdpbi54bWwiIG92ZXJ3cml0ZT0ieWVzIiAvPgotCTwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFhNGE2OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYmQ0MDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd3Njb25zdW1wdGlvbmJ1aWxkX3RvYy54bWwsXAotICAgICAgICAgICAgICAgd3Njb25zdW1wdGlvbnRfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBpbWFnZXMvLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzLyouaHRtKixcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgcmVmLyouaHRtKixcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLQkJICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotCQkgICAgICAgY29uY2VwdHMvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouZGl0YSxcCi0gICAgICAgICAgICAgICByZWYvKi5kaXRhCi1iaW4uZXhjbHVkZXMgPSBEb2NCdWlsZC54bWwsXAotICAgICAgICAgICAgICAgbXlQbHVnaW4qLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYWJiMzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjdWRkaSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uCi1kZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+VURESTwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksCi1hbmQgSW50ZWdyYXRpb24gPC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPlVEREk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5VRERJIGhhcyB0d28gZnVuY3Rpb25zOiA8dWw+Ci08bGk+SXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgY2xpZW50cyBjb21tdW5pY2F0ZSB3aXRoCi1VRERJIHJlZ2lzdHJpZXMuPC9saT4KLTxsaT5JdCBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGdsb2JhbCByZXBsaWNhdGVkIHJlZ2lzdHJpZXMuPC9saT4KLTwvdWw+PC9wPgotPHA+VURESSBpbmNsdWRlcyBhbiBYTUwgc2NoZW1hIGZvciBTT0FQIG1lc3NhZ2VzIHRoYXQgZGVmaW5lcyBhIHNldCBvZiBkb2N1bWVudHMKLXRvIGRlc2NyaWJlIGJ1c2luZXNzIGFuZCBzZXJ2aWNlcyBpbmZvcm1hdGlvbiwgYSBjb21tb24gc2V0IG9mIEFQSXMgZm9yIHF1ZXJ5aW5nCi1hbmQgcHVibGlzaGluZyBpbmZvcm1hdGlvbiB0byB0aGUgZGlyZWN0b3JpZXMsIGFuZCBhbiBBUEkgZm9yIHJlcGxpY2F0aW5nCi1kaXJlY3RvcnkgZW50cmllcyBiZXR3ZWVuIHBlZXIgVURESSBub2Rlcy48L3A+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVRERJIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmciCi1zY29wZT0iZXh0ZXJuYWwiPnd3dy51ZGRpLm9yZzwveHJlZj48L3A+Ci08c2VjdGlvbj48dGl0bGU+VURESSByZWdpc3RyaWVzPC90aXRsZT48cD5VRERJIG1hbmFnZXMgdGhlIGRpc2NvdmVyeSBvZiBXZWIKLXNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpciBzZXJ2aWNlCi1kZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC4gQmVmb3JlIHlvdSBjYW4gcHVibGlzaCB5b3VyCi1idXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgcHVibGljIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlcgoteW91ciBidXNpbmVzcyBlbnRpdHkgd2l0aCBhIFVEREkgcmVnaXN0cnkuPC9wPjxwPlVEREkgcmVnaXN0cmllcyBjb21lIGluIHR3bwotZm9ybXM6IHB1YmxpYyBhbmQgcHJpdmF0ZS4mbmJzcDsgQm90aCB0eXBlcyBjb21wbHkgdG8gdGhlIHNhbWUgc3BlY2lmaWNhdGlvbnMuJm5ic3A7Ci1BIHByaXZhdGUgcmVnaXN0cnkgZW5hYmxlcyB5b3UgdG8gcHVibGlzaCBhbmQgdGVzdCB5b3VyIGludGVybmFsIGUtYnVzaW5lc3MKLWFwcGxpY2F0aW9ucyBpbiZuYnNwO2Egc2VjdXJlLCBwcml2YXRlIGVudmlyb25tZW50LjwvcD48cD5BIHB1YmxpYyByZWdpc3RyeQotaXMgYSBjb2xsZWN0aW9uIG9mIHBlZXIgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGJ1c2luZXNzZXMKLWFuZCBzZXJ2aWNlcy4gSXQgbG9jYXRlcyBzZXJ2aWNlcyB0aGF0IGFyZSByZWdpc3RlcmVkIGF0IG9uZSBvZiBpdHMgcGVlciBub2RlcwotYW5kIGZhY2lsaXRhdGVzIHRoZSBkaXNjb3Zlcnkgb2YgcHVibGlzaGVkIFdlYiBzZXJ2aWNlcy4gRGF0YSBpcyByZXBsaWNhdGVkCi1hdCBlYWNoIG9mIHRoZSByZWdpc3RyaWVzIG9uIGEgcmVndWxhciBiYXNpcy4gVGhpcyBlbnN1cmVzIGNvbnNpc3RlbmN5IGluCi1zZXJ2aWNlIGRlc2NyaXB0aW9uIGZvcm1hdHMgYW5kIG1ha2VzIGl0IGVhc3kgdG8gdHJhY2sgY2hhbmdlcyBhcyB0aGV5IG9jY3VyLiA8dG0KLXRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IG1haW50YWlucwotdHdvIHB1YmxpYyByZWdpc3RyaWVzIGNhbGxlZCB0aGUgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIgotdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IGFuZCB0aGUgPHRtIHRtY2xhc3M9ImlibSIKLXRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBVRERJIFRlc3QKLVJlZ2lzdHJ5LiBUaGUgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IFVEREkKLVRlc3QgUmVnaXN0cnkgYWxsb3dzIHlvdSB0byBkZXZlbG9wIHlvdXIgV2ViIHNlcnZpY2UgYW5kIGV4cGVyaWVuY2UgdGhlIFVEREkKLXJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpdGhvdXQgcGxhY2luZyB5b3VyIFdlYiBzZXJ2aWNlIGluIGFuIG9mZmljaWFsIHJlZ2lzdHJ5LiZuYnNwOwotVXNlIHRoZSA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gVURESQotVGVzdCBSZWdpc3RyeSB0byBleHBlcmltZW50IHdpdGggVURESSwgYW5kIHRvIHRlc3QgYW5kIHZhbGlkYXRlIHlvdXIgV2ViIHNlcnZpY2UuJm5ic3A7Ci1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgSUJNJ3MgcHVibGljIHJlZ2lzdHJpZXMsIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vdWRkaS5pYm0uY29tIiBzY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly91ZGRpLmlibS5jb208L3hyZWY+IEZvcgotYSBsaXN0IG9mIHB1YmxpYyByZWdpc3RyaWVzLCByZWZlciB0byAgPHhyZWYgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sIgotc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vd3d3LnVkZGkub3JnL3JlZ2lzdGVyLmh0bWw8L3hyZWY+PC9wPjxwPkEgcHJpdmF0ZQotcmVnaXN0cnkgYWxsb3dzIHlvdSB0byBwdWJsaXNoIGFuZCB0ZXN0IHlvdXIgaW50ZXJuYWwgYXBwbGljYXRpb25zIGluIGEgc2VjdXJlLAotcHJpdmF0ZSBlbnZpcm9ubWVudC48L3A+PHA+VGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgYWN0cyBhcyBhIEIyQiBkaXJlY3RvcnkKLWxpbmtpbmcgbWFya2V0cGxhY2VzLCBidXllcnMsIGFuZCBzZWxsZXJzLiBUaGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhlCi1yZWdpc3RyeSBjb25zaXN0cyBvZiB0aHJlZSBjb21wb25lbnRzOiB3aGl0ZSBwYWdlcywgeWVsbG93IHBhZ2VzLCBhbmQgZ3JlZW4KLXBhZ2VzLiBXaGl0ZSBwYWdlcyBpbmNsdWRlIHRoZSBidXNpbmVzcyBuYW1lLCBjb250YWN0IGluZm9ybWF0aW9uLCBhbmQgYSB0ZXh0Ci1kZXNjcmlwdGlvbiBvZiB0aGUgYnVzaW5lc3MncyBzZXJ2aWNlcy4gWWVsbG93IHBhZ2VzIGluY2x1ZGUgaW5kdXN0cmlhbCBjYXRlZ29yaXphdGlvbnMKLWJhc2VkIG9uIHN0YW5kYXJkIHRheG9ub21pZXMgc3VjaCBhcyBOQUlDUywgSVNPIDMxNjYsIGFuZCBVTlNQU0MuIEdyZWVuIHBhZ2VzCi1pbmNsdWRlIHJlZmVyZW5jZXMgdG8gc3BlY2lmaWNhdGlvbnMgZm9yIFdlYiBzZXJ2aWNlcyBhbmQgcG9pbnRlcnMgdG8gdmFyaW91cwotZmlsZSBhbmQgVVJMLWJhc2VkIGRpc2NvdmVyeSBtZWNoYW5pc21zLiBUaGlzIG1ha2VzIGl0IGVhc3kgZm9yIGJ1c2luZXNzZXMKLXRvIGludGVncmF0ZSBhY3Jvc3MgbWFya2V0cGxhY2VzLiBCZWNhdXNlIGl0IGlzIHJlZ2lzdGVyZWQsIGluZm9ybWF0aW9uIGlzCi1tYWRlIGF2YWlsYWJsZSBhY3Jvc3MgYWxsIGFwcGxpY2F0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTkFJQ1MgcmVmZXIKLXRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cubmFpY3MuY29tIiBzY29wZT0iZXh0ZXJuYWwiPnd3dy5uYWljcy5jb208L3hyZWY+IEZvcgotbW9yZSBpbmZvcm1hdGlvbiBvbiBVTlNQU0MgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy51bnNwc2Mub3JnIgotc2NvcGU9ImV4dGVybmFsIj53d3cudW5zcHNjLm9yZzwveHJlZj4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gSVNPIDMxNjYgcmVmZXIKLXRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vZW4vcHJvZHMtc2VydmljZXMvaXNvMzE2Nm1hL2luZGV4Lmh0bWwiCi1zY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly93d3cuaXNvLm9yZy9pc28vZW4vcHJvZHMtc2VydmljZXMvaXNvMzE2Nm1hL2luZGV4Lmh0bWw8L3hyZWY+PC9wPjxwPkJ1c2luZXNzZXMKLXBvcHVsYXRlIHRoZSByZWdpc3RyeSB3aXRoIGRlc2NyaXB0aW9ucyBvZiB0aGUgc2VydmljZXMgdGhhdCB0aGV5IHN1cHBvcnQuCi1VRERJIGFzc2lnbnMgYSB1bmlxdWUgaWRlbnRpZmllciB0byBlYWNoIHNlcnZpY2UgZGVzY3JpcHRpb24gYW5kIGJ1c2luZXNzCi1yZWdpc3RyYXRpb24uIFRoZXNlIGJlY29tZSB0aGUgc2VydmljZSBhbmQgYnVzaW5lc3Mga2V5cyByZXNwZWN0aXZlbHkuIFNlYXJjaAotZW5naW5lcywgYW5kIGFwcGxpY2F0aW9ucyBxdWVyeSB0aGUgcmVnaXN0cnkgdG8gZGlzY292ZXIgc2VydmljZXMuIFVEREkgc2VydmVycwotYXJlIGEgZGlyZWN0b3J5IG9mIGF2YWlsYWJsZSBzZXJ2aWNlcyBhbmQgc2VydmljZSBwcm92aWRlcnMuPC9wPjwvc2VjdGlvbj4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzZGx1ZC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTDwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjEyZTQwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uLCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uLCBXZWIgc2VydmljZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2RsdWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3VkZGkiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3VkZGkiPjxhIG5hbWU9ImN1ZGRpIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbgotZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5VRERJIGhhcyB0d28gZnVuY3Rpb25zOiA8dWw+Ci08bGk+SXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgY2xpZW50cyBjb21tdW5pY2F0ZSB3aXRoCi1VRERJIHJlZ2lzdHJpZXMuPC9saT4KLQotPGxpPkl0IGlzIGEgcGFydGljdWxhciBzZXQgb2YgZ2xvYmFsIHJlcGxpY2F0ZWQgcmVnaXN0cmllcy48L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTxwPlVEREkgaW5jbHVkZXMgYW4gWE1MIHNjaGVtYSBmb3IgU09BUCBtZXNzYWdlcyB0aGF0IGRlZmluZXMgYSBzZXQgb2YgZG9jdW1lbnRzCi10byBkZXNjcmliZSBidXNpbmVzcyBhbmQgc2VydmljZXMgaW5mb3JtYXRpb24sIGEgY29tbW9uIHNldCBvZiBBUElzIGZvciBxdWVyeWluZwotYW5kIHB1Ymxpc2hpbmcgaW5mb3JtYXRpb24gdG8gdGhlIGRpcmVjdG9yaWVzLCBhbmQgYW4gQVBJIGZvciByZXBsaWNhdGluZwotZGlyZWN0b3J5IGVudHJpZXMgYmV0d2VlbiBwZWVyIFVEREkgbm9kZXMuPC9wPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVRERJIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnVkZGkub3JnPC9hPjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlVEREkgcmVnaXN0cmllczwvaDQ+PHA+VURESSBtYW5hZ2VzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViCi1zZXJ2aWNlcyBieSByZWx5aW5nIG9uIGEgZGlzdHJpYnV0ZWQgcmVnaXN0cnkgb2YgYnVzaW5lc3NlcyBhbmQgdGhlaXIgc2VydmljZQotZGVzY3JpcHRpb25zIGltcGxlbWVudGVkIGluIGEgY29tbW9uIFhNTCBmb3JtYXQuIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggeW91cgotYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIHB1YmxpYyByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIKLXlvdXIgYnVzaW5lc3MgZW50aXR5IHdpdGggYSBVRERJIHJlZ2lzdHJ5LjwvcD4KLTxwPlVEREkgcmVnaXN0cmllcyBjb21lIGluIHR3bwotZm9ybXM6IHB1YmxpYyBhbmQgcHJpdmF0ZS7CoCBCb3RoIHR5cGVzIGNvbXBseSB0byB0aGUgc2FtZSBzcGVjaWZpY2F0aW9ucy7CoAotQSBwcml2YXRlIHJlZ2lzdHJ5IGVuYWJsZXMgeW91IHRvIHB1Ymxpc2ggYW5kIHRlc3QgeW91ciBpbnRlcm5hbCBlLWJ1c2luZXNzCi1hcHBsaWNhdGlvbnMgaW7CoGEgc2VjdXJlLCBwcml2YXRlIGVudmlyb25tZW50LjwvcD4KLTxwPkEgcHVibGljIHJlZ2lzdHJ5Ci1pcyBhIGNvbGxlY3Rpb24gb2YgcGVlciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgYnVzaW5lc3NlcwotYW5kIHNlcnZpY2VzLiBJdCBsb2NhdGVzIHNlcnZpY2VzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgYXQgb25lIG9mIGl0cyBwZWVyIG5vZGVzCi1hbmQgZmFjaWxpdGF0ZXMgdGhlIGRpc2NvdmVyeSBvZiBwdWJsaXNoZWQgV2ViIHNlcnZpY2VzLiBEYXRhIGlzIHJlcGxpY2F0ZWQKLWF0IGVhY2ggb2YgdGhlIHJlZ2lzdHJpZXMgb24gYSByZWd1bGFyIGJhc2lzLiBUaGlzIGVuc3VyZXMgY29uc2lzdGVuY3kgaW4KLXNlcnZpY2UgZGVzY3JpcHRpb24gZm9ybWF0cyBhbmQgbWFrZXMgaXQgZWFzeSB0byB0cmFjayBjaGFuZ2VzIGFzIHRoZXkgb2NjdXIuIElCTTxzdXA+wq48L3N1cD4gbWFpbnRhaW5zCi10d28gcHVibGljIHJlZ2lzdHJpZXMgY2FsbGVkIHRoZSBJQk0gVURESSBCdXNpbmVzcyBSZWdpc3RyeSBhbmQgdGhlIElCTSBVRERJIFRlc3QKLVJlZ2lzdHJ5LiBUaGUgSUJNIFVEREkKLVRlc3QgUmVnaXN0cnkgYWxsb3dzIHlvdSB0byBkZXZlbG9wIHlvdXIgV2ViIHNlcnZpY2UgYW5kIGV4cGVyaWVuY2UgdGhlIFVEREkKLXJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpdGhvdXQgcGxhY2luZyB5b3VyIFdlYiBzZXJ2aWNlIGluIGFuIG9mZmljaWFsIHJlZ2lzdHJ5LsKgCi1Vc2UgdGhlIElCTSBVRERJCi1UZXN0IFJlZ2lzdHJ5IHRvIGV4cGVyaW1lbnQgd2l0aCBVRERJLCBhbmQgdG8gdGVzdCBhbmQgdmFsaWRhdGUgeW91ciBXZWIgc2VydmljZS7CoAotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIElCTSdzIHB1YmxpYyByZWdpc3RyaWVzLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3VkZGkuaWJtLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly91ZGRpLmlibS5jb208L2E+IEZvcgotYSBsaXN0IG9mIHB1YmxpYyByZWdpc3RyaWVzLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sPC9hPjwvcD4KLTxwPkEgcHJpdmF0ZQotcmVnaXN0cnkgYWxsb3dzIHlvdSB0byBwdWJsaXNoIGFuZCB0ZXN0IHlvdXIgaW50ZXJuYWwgYXBwbGljYXRpb25zIGluIGEgc2VjdXJlLAotcHJpdmF0ZSBlbnZpcm9ubWVudC48L3A+Ci08cD5UaGUgVURESSBCdXNpbmVzcyBSZWdpc3RyeSBhY3RzIGFzIGEgQjJCIGRpcmVjdG9yeQotbGlua2luZyBtYXJrZXRwbGFjZXMsIGJ1eWVycywgYW5kIHNlbGxlcnMuIFRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiB0aGUKLXJlZ2lzdHJ5IGNvbnNpc3RzIG9mIHRocmVlIGNvbXBvbmVudHM6IHdoaXRlIHBhZ2VzLCB5ZWxsb3cgcGFnZXMsIGFuZCBncmVlbgotcGFnZXMuIFdoaXRlIHBhZ2VzIGluY2x1ZGUgdGhlIGJ1c2luZXNzIG5hbWUsIGNvbnRhY3QgaW5mb3JtYXRpb24sIGFuZCBhIHRleHQKLWRlc2NyaXB0aW9uIG9mIHRoZSBidXNpbmVzcydzIHNlcnZpY2VzLiBZZWxsb3cgcGFnZXMgaW5jbHVkZSBpbmR1c3RyaWFsIGNhdGVnb3JpemF0aW9ucwotYmFzZWQgb24gc3RhbmRhcmQgdGF4b25vbWllcyBzdWNoIGFzIE5BSUNTLCBJU08gMzE2NiwgYW5kIFVOU1BTQy4gR3JlZW4gcGFnZXMKLWluY2x1ZGUgcmVmZXJlbmNlcyB0byBzcGVjaWZpY2F0aW9ucyBmb3IgV2ViIHNlcnZpY2VzIGFuZCBwb2ludGVycyB0byB2YXJpb3VzCi1maWxlIGFuZCBVUkwtYmFzZWQgZGlzY292ZXJ5IG1lY2hhbmlzbXMuIFRoaXMgbWFrZXMgaXQgZWFzeSBmb3IgYnVzaW5lc3NlcwotdG8gaW50ZWdyYXRlIGFjcm9zcyBtYXJrZXRwbGFjZXMuIEJlY2F1c2UgaXQgaXMgcmVnaXN0ZXJlZCwgaW5mb3JtYXRpb24gaXMKLW1hZGUgYXZhaWxhYmxlIGFjcm9zcyBhbGwgYXBwbGljYXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQUlDUyByZWZlcgotdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cubmFpY3MuY29tIiB0YXJnZXQ9Il9ibGFuayI+d3d3Lm5haWNzLmNvbTwvYT4gRm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIFVOU1BTQyByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy51bnNwc2Mub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnVuc3BzYy5vcmc8L2E+IEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIElTTyAzMTY2IHJlZmVyCi10byAgPGEgaHJlZj0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9lbi9wcm9kcy1zZXJ2aWNlcy9pc28zMTY2bWEvaW5kZXguaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuaXNvLm9yZy9pc28vZW4vcHJvZHMtc2VydmljZXMvaXNvMzE2Nm1hL2luZGV4Lmh0bWw8L2E+PC9wPgotPHA+QnVzaW5lc3NlcwotcG9wdWxhdGUgdGhlIHJlZ2lzdHJ5IHdpdGggZGVzY3JpcHRpb25zIG9mIHRoZSBzZXJ2aWNlcyB0aGF0IHRoZXkgc3VwcG9ydC4KLVVEREkgYXNzaWducyBhIHVuaXF1ZSBpZGVudGlmaWVyIHRvIGVhY2ggc2VydmljZSBkZXNjcmlwdGlvbiBhbmQgYnVzaW5lc3MKLXJlZ2lzdHJhdGlvbi4gVGhlc2UgYmVjb21lIHRoZSBzZXJ2aWNlIGFuZCBidXNpbmVzcyBrZXlzIHJlc3BlY3RpdmVseS4gU2VhcmNoCi1lbmdpbmVzLCBhbmQgYXBwbGljYXRpb25zIHF1ZXJ5IHRoZSByZWdpc3RyeSB0byBkaXNjb3ZlciBzZXJ2aWNlcy4gVURESSBzZXJ2ZXJzCi1hcmUgYSBkaXJlY3Rvcnkgb2YgYXZhaWxhYmxlIHNlcnZpY2VzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2RsdWQuaHRtbCIgdGl0bGU9IlRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiBVRERJIGhhcyB0d28gZnVuY3Rpb25zOiAoMSkgaXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgVURESSBjbGllbnRzIGNvbW11bmljYXRlIHdpdGggcmVnaXN0cmllcywgYW5kICgyKSBpdCBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGdsb2JhbGx5IHJlcGxpY2F0ZWQgcmVnaXN0cmllcy4iPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREw8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbHVkLmh0bWwiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlY2JmNDUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3NkbHVkIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREw8L3RpdGxlPgotPHNob3J0ZGVzYz5UaGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbgotZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIFVEREkKLWhhcyB0d28gZnVuY3Rpb25zOiAoMSkgaXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgVURESSBjbGllbnRzCi1jb21tdW5pY2F0ZSB3aXRoIHJlZ2lzdHJpZXMsIGFuZCAoMikgaXQgaXMgYSBwYXJ0aWN1bGFyIHNldCBvZiBnbG9iYWxseSByZXBsaWNhdGVkCi1yZWdpc3RyaWVzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5VRERJPGluZGV4dGVybT5yZWxhdGlvbnNoaXAgd2l0aCBXU0RMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPnJlbGF0aW9uc2hpcCB3aXRoIFVEREk8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+UmVnaXN0ZXJpbmcgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczo8L3A+Ci08dWw+Ci08bGk+VGhlICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzRW50aXR5PC9zeXN0ZW1vdXRwdXQ+IGRhdGEgdHlwZSBjb250YWlucyBpbmZvcm1hdGlvbgotYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQgaGFzIGEgcHVibGlzaGVkIHNlcnZpY2UuPC9saT4KLTxsaT5UaGUgIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NTZXJ2aWNlPC9zeXN0ZW1vdXRwdXQ+IGRhdGEgdHlwZSBpcyBhIGRlc2NyaXB0aW9uCi1vZiBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+VGhlICA8c3lzdGVtb3V0cHV0PmJpbmRpbmdUZW1wbGF0ZTwvc3lzdGVtb3V0cHV0PiBkYXRhIHR5cGUgY29udGFpbnMgdGVjaG5pY2FsCi1pbmZvcm1hdGlvbiBmb3IgZGV0ZXJtaW5pbmcgdGhlIGVudHJ5IHBvaW50IGFuZCBjb25zdHJ1Y3Rpb24gc3BlY2lmaWNhdGlvbnMKLWZvciBpbnZva2luZyBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+VGhlICA8c3lzdGVtb3V0cHV0PnRNb2RlbDwvc3lzdGVtb3V0cHV0PiBkYXRhIHR5cGUgcHJvdmlkZXMgYSByZWZlcmVuY2UKLXN5c3RlbSB0byBhc3Npc3QgaW4gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYW5kIGFjdHMgYXMgYSB0ZWNobmljYWwKLXNwZWNpZmljYXRpb24gZm9yIGEgV2ViIHNlcnZpY2UuPC9saT4KLTwvdWw+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgVURESSBkYXRhIHR5cGVzLCByZWZlciB0byB0aGUgcmVsYXRlZCByZWZlcmVuY2UKLXRvcGljcyBhdCB0aGUgZW5kIG9mIHRoaXMgdG9waWMuPC9wPgotPHA+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhbiBYTUwtYmFzZWQgc3RhbmRhcmQgc3BlY2lmaWNhdGlvbgotZm9yIGRlc2NyaWJpbmcgV2ViIHNlcnZpY2VzLiBXU0RMIGRlZmluZXMgYW4gWE1MIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBuZXR3b3JrCi1zZXJ2aWNlcyBhcyBhIHNldCBvZiBlbmRwb2ludHMgdGhhdCBvcGVyYXRlIG9uIG1lc3NhZ2VzIHRoYXQgY29udGFpbiBlaXRoZXIKLWRvY3VtZW50LW9yaWVudGVkIG9yIHByb2NlZHVyZS1vcmllbnRlZCBpbmZvcm1hdGlvbi48L3A+Ci08cD5UaGUgV1NETCBzZXJ2aWNlIGRlc2NyaXB0aW9uIGNhbiBiZSBzdHJ1Y3R1cmVkIGluIG1hbnkgd2F5cy4gSG93ZXZlciwgdG8KLWFzc2lzdCB3aXRoIHB1Ymxpc2hpbmcgYW5kIGZpbmRpbmcgV1NETCBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBpbiBhIFVEREkgcmVnaXN0cnksCi1XU0RMIGRvY3VtZW50cyBjb25zaXN0IG9mIHR3byBtYWluIHBhcnRzOiZuYnNwOzwvcD4KLTx1bD4KLTxsaT5UaGUgc2VydmljZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBkZXNjcmliZXMgdGhlIGFic3RyYWN0IHR5cGUgaW50ZXJmYWNlCi1hbmQgaXRzIHByb3RvY29sIGJpbmRpbmcsIGtub3duIGFzIHRoZSBXU0RMIGJpbmRpbmcgZG9jdW1lbnQ8L2xpPgotPGxpPlRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb24gZGVzY3JpYmVzIHRoZSBzZXJ2aWNlIGFjY2VzcyBsb2NhdGlvbgotaW5mb3JtYXRpb24sIGtub3duIGFzIHRoZSBXU0RMIHNlcnZpY2UgZG9jdW1lbnQ8L2xpPgotPC91bD4KLTxwPldoZW4gY3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LCB0aGUKLVdlYiBzZXJ2aWNlcyB0b29scyBjcmVhdGUgYSBzaW5nbGUgV1NETCBkb2N1bWVudCB3aGVuIGdlbmVyYXRpbmcgV2ViIHNlcnZpY2VzCi1mcm9tIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFucwotb3IgRUpCcy4gVGhpcyBXU0RMIGRvY3VtZW50IGNvbnRhaW5zIGJvdGggdGhlIHNlcnZpY2UgaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRhdGlvbgotZG9jdW1lbnRzLjwvcD4KLTxwPkEgc2VydmljZSBpbnRlcmZhY2UgaXMgZGVzY3JpYmVkIGJ5IGEgV1NETCBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRoZSB0eXBlcywKLWltcG9ydCwgbWVzc2FnZSwgcG9ydFR5cGUsIGFuZCBiaW5kaW5nIGVsZW1lbnRzLiBBIHNlcnZpY2UgaW50ZXJmYWNlIGNvbnRhaW5zCi10aGUgV1NETCBzZXJ2aWNlIGRlZmluaXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gaW1wbGVtZW50IG9uZSBvciBtb3JlIHNlcnZpY2VzLgotSXQgaXMgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiBhIFdlYiBzZXJ2aWNlLCBhbmQgaXMgdXNlZCB0byBkZXNjcmliZSBhIHNwZWNpZmljCi10eXBlIG9mIHNlcnZpY2UuIFRoaXMgZG9jdW1lbnQgY2FuIHJlZmVyZW5jZSBhbm90aGVyIHNlcnZpY2UgaW50ZXJmYWNlIGRvY3VtZW50Ci11c2luZyBhbiBpbXBvcnQgZWxlbWVudC4gVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBpbiB0aGlzIHByb2R1Y3QgZ2VuZXJhdGUgYQotc2VydmljZSBpbnRlcmZhY2UgZG9jdW1lbnQgdGhhdCBjb250YWlucyBvbmx5IHRoZSBtZXNzYWdlIGFuZCBwb3J0VHlwZSBlbGVtZW50cwotdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgYmluZGluZyBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIG9ubHkgYmluZGluZ3MgZm9yCi10aGUgcG9ydFR5cGUuPC9wPgotPHA+VGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgY29udGFpbnMgdGhlIHNlcnZpY2UgZWxlbWVudHMuIEEgc2VydmljZQotaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiBhIHNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzCi1hIHNlcnZpY2UgaW50ZXJmYWNlLiBBdCBsZWFzdCBvbmUgb2YgdGhlIGltcG9ydCBlbGVtZW50cyB3aWxsIGNvbnRhaW4gYSByZWZlcmVuY2UKLXRvIHRoZSBXU0RMIHNlcnZpY2UgaW50ZXJmYWNlIGRvY3VtZW50OyBob3dldmVyIG1vbm9saXRoaWMgV1NETCBzdWNoIGFzIHRoYXQKLWNyZWF0ZWQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQgZG9lcyBub3QgaGF2ZSBpbXBvcnRzLiBBIHNlcnZpY2UKLWltcGxlbWVudGF0aW9uIGRvY3VtZW50IGNhbiBjb250YWluIHJlZmVyZW5jZXMgdG8gbW9yZSB0aGFuIG9uZSBzZXJ2aWNlIGludGVyZmFjZQotZG9jdW1lbnQuPC9wPgotPHA+QSBzZXJ2aWNlIHByb3ZpZGVyIGhvc3RzIGEgV2ViIHNlcnZpY2UgYW5kIG1ha2VzIGl0IGFjY2Vzc2libGUgdXNpbmcgcHJvdG9jb2xzCi1zdWNoIGFzIFNPQVAvSFRUUCBhbmQgU09BUC9KTVMuIFRoZSBXZWIgc2VydmljZSBpcyBkZXNjcmliZWQgYnkgdGhlIFdTREwgZG9jdW1lbnRzCi10aGF0IGFyZSBzdG9yZWQgb24gdGhlIHByb3ZpZGVyJ3Mgc2VydmVyIG9yIGluIGEgc3BlY2lhbCByZXBvc2l0b3J5LiBUaGUgV1NETAotZG9jdW1lbnRzIGFyZSByZWZlcmVuY2VkIGJ5IFVEREkgYnVzaW5lc3Mgc2VydmljZXMgKHNlcnZpY2UgZG9jdW1lbnRzKSBhbmQKLXRNb2RlbHMgKGJpbmRpbmcgZG9jdW1lbnRzKS4gVGhlc2UgcG9pbnRlcnMgZW5hYmxlIGRpc2NvdmVyeSBvZiBhIFdlYiBzZXJ2aWNlCi1ieSBhIHNlcnZpY2UgcmVxdWVzdG9yLjwvcD4KLTxwPkZpZ3VyZSAxLiBSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMLjwvcD4KLTxwPiA8aW1hZ2UgYWx0PSJJbGx1c3RyYXRpb24gb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwuIiBocmVmPSIuLi9pbWFnZXMvd3NkbHVkZGkuZ2lmIj4KLTwvaW1hZ2U+IDwvcD4KLTxwPkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMLiBUaGUgV1NETCBzZXJ2aWNlCi1lbGVtZW50IHJlZmVyZW5jZXMgdGhlIFdTREwgYmluZGluZyBlbGVtZW50LiBUaGUgVVJMIG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nCi10aGUgV1NETCBiaW5kaW5nIGVsZW1lbnQgaXMgcHVibGlzaGVkIHRvIHRoZSBVRERJIGJ1c2luZXNzIHJlZ2lzdHJ5IGFzIGEgdE1vZGVsLgotVGhlIFVSTCBvZiB0aGUgZG9jdW1lbnQgY29udGFpbmluZyB0aGUgV1NETCBzZXJ2aWNlIGVsZW1lbnQgaXMgcHVibGlzaGVkIHRvCi10aGUgVURESSBidXNpbmVzcyByZWdpc3RyeSBhcyBhIGJ1c2luZXNzU2VydmljZSBhbmQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBiaW5kaW5nVGVtcGxhdGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVEREkgcmVnaXN0cnkgZGF0YSBzdHJ1Y3R1cmUKLXR5cGVzLCByZWZlciB0byB0aGUgcmVsYXRlZCByZWZlcmVuY2Ugc2VjdGlvbiBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuCi1Ob3RlIHRoYXQgdGhlIGltcG9ydCBwb3J0aW9uIG9mIHRoZSBkaWFncmFtIGlzIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB0aGUgcnVuLXRpbWUKLWVudmlyb25tZW50OyBtb25vbGl0aGljIFdTREwgc3VjaCBhcyB0aGF0IGNyZWF0ZWQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUKLWVudmlyb25tZW50IGRvZXMgbm90IGhhdmUgaW1wb3J0cy48L3A+Ci08cD5UaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkZXNjcmliZXMgYW4gaW5zdGFuY2Ugb2YgYSBzZXJ2aWNlLiBUaGUgaW5zdGFuY2UKLWlzIGRlZmluZWQgdXNpbmcgYSBXU0RMIHNlcnZpY2UgZWxlbWVudC4gVGhlIHNlcnZpY2UgZWxlbWVudCBpbiBhIHNlcnZpY2UKLWltcGxlbWVudGF0aW9uIGRvY3VtZW50IGlzIHVzZWQgdG8gcHVibGlzaCBhIFVEREkgYnVzaW5lc3NTZXJ2aWNlLiBXaGVuIHB1Ymxpc2hpbmcKLWEgV1NETCBzZXJ2aWNlIGRlc2NyaXB0aW9uLCBhIHNlcnZpY2UgaW50ZXJmYWNlIG11c3QgYmUgcHVibGlzaGVkIGFzIGEgdE1vZGVsCi1iZWZvcmUgYSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGlzIHB1Ymxpc2hlZCBhcyBhIGJ1c2luZXNzU2VydmljZS48L3A+Ci08cD5BIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gaXMgcHVibGlzaGVkIGluIGEgVURESSByZWdpc3RyeSBhcyBwYXJ0IG9mIGEgYnVzaW5lc3NTZXJ2aWNlCi13aXRoIG9uZSBvciBtb3JlIGJpbmRpbmdUZW1wbGF0ZSBlbGVtZW50cy4gVGhlIGJ1c2luZXNzU2VydmljZSBpcyBwdWJsaXNoZWQKLWJ5IHRoZSBzZXJ2aWNlIHByb3ZpZGVyLiBBIG5ldyBidXNpbmVzc1NlcnZpY2UgaXMgY3JlYXRlZCBmb3IgYSBzZXJ2aWNlIGVsZW1lbnQKLXRoYXQgaXMgZGVmaW5lZCBpbiB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkb2N1bWVudC4gQSBuZXcgYmluZGluZ1RlbXBsYXRlCi1lbGVtZW50IGlzIGNyZWF0ZWQgd2l0aGluIGEgYnVzaW5lc3NTZXJ2aWNlIGZvciBlYWNoIHBvcnQgZWxlbWVudCB0aGF0IGlzCi1kZWZpbmVkIHdpdGhpbiBhIHNlcnZpY2UgZWxlbWVudC48L3A+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gV1NETCBhbmQgVURESSByZWZlciB0bwotIDx4cmVmIGhyZWY9Imh0dHA6Ly91ZGRpLm9yZy9iZXN0cHJhY3RpY2VzLmh0bWwiIHNjb3BlPSJleHRlcm5hbCI+dWRkaS5vcmcvYmVzdHByYWN0aWNlcy5odG1sPC94cmVmPi48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjdWRkaS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCk8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGJmNTdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsdWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiBVRERJIGhhcyB0d28gZnVuY3Rpb25zOiAoMSkgaXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgVURESSBjbGllbnRzIGNvbW11bmljYXRlIHdpdGggcmVnaXN0cmllcywgYW5kICgyKSBpdCBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGdsb2JhbGx5IHJlcGxpY2F0ZWQgcmVnaXN0cmllcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIFVEREkgaGFzIHR3byBmdW5jdGlvbnM6ICgxKSBpdCBpcyBhIFNPQVAtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIGhvdyBVRERJIGNsaWVudHMgY29tbXVuaWNhdGUgd2l0aCByZWdpc3RyaWVzLCBhbmQgKDIpIGl0IGlzIGEgcGFydGljdWxhciBzZXQgb2YgZ2xvYmFsbHkgcmVwbGljYXRlZCByZWdpc3RyaWVzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIHJlbGF0aW9uc2hpcCB3aXRoIFdTREwsIFdTREwsIHJlbGF0aW9uc2hpcCB3aXRoIFVEREkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCByZWxhdGlvbnNoaXAgd2l0aCBXU0RMLCBXU0RMLCByZWxhdGlvbnNoaXAgd2l0aCBVRERJIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzZGx1ZCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3c2RsdWQiPjxhIG5hbWU9ImN3c2RsdWQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREw8L2gxPgotCi0KLQotPGRpdj48cD5UaGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbgotZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIFVEREkKLWhhcyB0d28gZnVuY3Rpb25zOiAoMSkgaXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgVURESSBjbGllbnRzCi1jb21tdW5pY2F0ZSB3aXRoIHJlZ2lzdHJpZXMsIGFuZCAoMikgaXQgaXMgYSBwYXJ0aWN1bGFyIHNldCBvZiBnbG9iYWxseSByZXBsaWNhdGVkCi1yZWdpc3RyaWVzLjwvcD4KLQotPHA+UmVnaXN0ZXJpbmcgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczo8L3A+Ci0KLTx1bD4KLTxsaT5UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc0VudGl0eTwvdHQ+IGRhdGEgdHlwZSBjb250YWlucyBpbmZvcm1hdGlvbgotYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQgaGFzIGEgcHVibGlzaGVkIHNlcnZpY2UuPC9saT4KLQotPGxpPlRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJ1c2luZXNzU2VydmljZTwvdHQ+IGRhdGEgdHlwZSBpcyBhIGRlc2NyaXB0aW9uCi1vZiBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5iaW5kaW5nVGVtcGxhdGU8L3R0PiBkYXRhIHR5cGUgY29udGFpbnMgdGVjaG5pY2FsCi1pbmZvcm1hdGlvbiBmb3IgZGV0ZXJtaW5pbmcgdGhlIGVudHJ5IHBvaW50IGFuZCBjb25zdHJ1Y3Rpb24gc3BlY2lmaWNhdGlvbnMKLWZvciBpbnZva2luZyBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij50TW9kZWw8L3R0PiBkYXRhIHR5cGUgcHJvdmlkZXMgYSByZWZlcmVuY2UKLXN5c3RlbSB0byBhc3Npc3QgaW4gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYW5kIGFjdHMgYXMgYSB0ZWNobmljYWwKLXNwZWNpZmljYXRpb24gZm9yIGEgV2ViIHNlcnZpY2UuPC9saT4KLQotPC91bD4KLQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFVEREkgZGF0YSB0eXBlcywgcmVmZXIgdG8gdGhlIHJlbGF0ZWQgcmVmZXJlbmNlCi10b3BpY3MgYXQgdGhlIGVuZCBvZiB0aGlzIHRvcGljLjwvcD4KLQotPHA+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhbiBYTUwtYmFzZWQgc3RhbmRhcmQgc3BlY2lmaWNhdGlvbgotZm9yIGRlc2NyaWJpbmcgV2ViIHNlcnZpY2VzLiBXU0RMIGRlZmluZXMgYW4gWE1MIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBuZXR3b3JrCi1zZXJ2aWNlcyBhcyBhIHNldCBvZiBlbmRwb2ludHMgdGhhdCBvcGVyYXRlIG9uIG1lc3NhZ2VzIHRoYXQgY29udGFpbiBlaXRoZXIKLWRvY3VtZW50LW9yaWVudGVkIG9yIHByb2NlZHVyZS1vcmllbnRlZCBpbmZvcm1hdGlvbi48L3A+Ci0KLTxwPlRoZSBXU0RMIHNlcnZpY2UgZGVzY3JpcHRpb24gY2FuIGJlIHN0cnVjdHVyZWQgaW4gbWFueSB3YXlzLiBIb3dldmVyLCB0bwotYXNzaXN0IHdpdGggcHVibGlzaGluZyBhbmQgZmluZGluZyBXU0RMIHNlcnZpY2UgZGVzY3JpcHRpb25zIGluIGEgVURESSByZWdpc3RyeSwKLVdTREwgZG9jdW1lbnRzIGNvbnNpc3Qgb2YgdHdvIG1haW4gcGFydHM6wqA8L3A+Ci0KLTx1bD4KLTxsaT5UaGUgc2VydmljZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBkZXNjcmliZXMgdGhlIGFic3RyYWN0IHR5cGUgaW50ZXJmYWNlCi1hbmQgaXRzIHByb3RvY29sIGJpbmRpbmcsIGtub3duIGFzIHRoZSBXU0RMIGJpbmRpbmcgZG9jdW1lbnQ8L2xpPgotCi08bGk+VGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZGVmaW5pdGlvbiBkZXNjcmliZXMgdGhlIHNlcnZpY2UgYWNjZXNzIGxvY2F0aW9uCi1pbmZvcm1hdGlvbiwga25vd24gYXMgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudDwvbGk+Ci0KLTwvdWw+Ci0KLTxwPldoZW4gY3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LCB0aGUKLVdlYiBzZXJ2aWNlcyB0b29scyBjcmVhdGUgYSBzaW5nbGUgV1NETCBkb2N1bWVudCB3aGVuIGdlbmVyYXRpbmcgV2ViIHNlcnZpY2VzCi1mcm9tIEphdmHihKIgYmVhbnMKLW9yIEVKQnMuIFRoaXMgV1NETCBkb2N1bWVudCBjb250YWlucyBib3RoIHRoZSBzZXJ2aWNlIGludGVyZmFjZSBhbmQgaW1wbGVtZW50YXRpb24KLWRvY3VtZW50cy48L3A+Ci0KLTxwPkEgc2VydmljZSBpbnRlcmZhY2UgaXMgZGVzY3JpYmVkIGJ5IGEgV1NETCBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRoZSB0eXBlcywKLWltcG9ydCwgbWVzc2FnZSwgcG9ydFR5cGUsIGFuZCBiaW5kaW5nIGVsZW1lbnRzLiBBIHNlcnZpY2UgaW50ZXJmYWNlIGNvbnRhaW5zCi10aGUgV1NETCBzZXJ2aWNlIGRlZmluaXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gaW1wbGVtZW50IG9uZSBvciBtb3JlIHNlcnZpY2VzLgotSXQgaXMgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiBhIFdlYiBzZXJ2aWNlLCBhbmQgaXMgdXNlZCB0byBkZXNjcmliZSBhIHNwZWNpZmljCi10eXBlIG9mIHNlcnZpY2UuIFRoaXMgZG9jdW1lbnQgY2FuIHJlZmVyZW5jZSBhbm90aGVyIHNlcnZpY2UgaW50ZXJmYWNlIGRvY3VtZW50Ci11c2luZyBhbiBpbXBvcnQgZWxlbWVudC4gVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBpbiB0aGlzIHByb2R1Y3QgZ2VuZXJhdGUgYQotc2VydmljZSBpbnRlcmZhY2UgZG9jdW1lbnQgdGhhdCBjb250YWlucyBvbmx5IHRoZSBtZXNzYWdlIGFuZCBwb3J0VHlwZSBlbGVtZW50cwotdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgYmluZGluZyBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIG9ubHkgYmluZGluZ3MgZm9yCi10aGUgcG9ydFR5cGUuPC9wPgotCi08cD5UaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBjb250YWlucyB0aGUgc2VydmljZSBlbGVtZW50cy4gQSBzZXJ2aWNlCi1pbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIGEgc2VydmljZSB0aGF0IGltcGxlbWVudHMKLWEgc2VydmljZSBpbnRlcmZhY2UuIEF0IGxlYXN0IG9uZSBvZiB0aGUgaW1wb3J0IGVsZW1lbnRzIHdpbGwgY29udGFpbiBhIHJlZmVyZW5jZQotdG8gdGhlIFdTREwgc2VydmljZSBpbnRlcmZhY2UgZG9jdW1lbnQ7IGhvd2V2ZXIgbW9ub2xpdGhpYyBXU0RMIHN1Y2ggYXMgdGhhdAotY3JlYXRlZCB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBoYXZlIGltcG9ydHMuIEEgc2VydmljZQotaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgY2FuIGNvbnRhaW4gcmVmZXJlbmNlcyB0byBtb3JlIHRoYW4gb25lIHNlcnZpY2UgaW50ZXJmYWNlCi1kb2N1bWVudC48L3A+Ci0KLTxwPkEgc2VydmljZSBwcm92aWRlciBob3N0cyBhIFdlYiBzZXJ2aWNlIGFuZCBtYWtlcyBpdCBhY2Nlc3NpYmxlIHVzaW5nIHByb3RvY29scwotc3VjaCBhcyBTT0FQL0hUVFAgYW5kIFNPQVAvSk1TLiBUaGUgV2ViIHNlcnZpY2UgaXMgZGVzY3JpYmVkIGJ5IHRoZSBXU0RMIGRvY3VtZW50cwotdGhhdCBhcmUgc3RvcmVkIG9uIHRoZSBwcm92aWRlcidzIHNlcnZlciBvciBpbiBhIHNwZWNpYWwgcmVwb3NpdG9yeS4gVGhlIFdTREwKLWRvY3VtZW50cyBhcmUgcmVmZXJlbmNlZCBieSBVRERJIGJ1c2luZXNzIHNlcnZpY2VzIChzZXJ2aWNlIGRvY3VtZW50cykgYW5kCi10TW9kZWxzIChiaW5kaW5nIGRvY3VtZW50cykuIFRoZXNlIHBvaW50ZXJzIGVuYWJsZSBkaXNjb3Zlcnkgb2YgYSBXZWIgc2VydmljZQotYnkgYSBzZXJ2aWNlIHJlcXVlc3Rvci48L3A+Ci0KLTxwPkZpZ3VyZSAxLiBSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMLjwvcD4KLQotPHA+IDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbHVkZGkuZ2lmIiBhbHQ9IklsbHVzdHJhdGlvbiBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETC4iIC8+IDwvcD4KLQotPHA+RmlndXJlIDEgaWxsdXN0cmF0ZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwuIFRoZSBXU0RMIHNlcnZpY2UKLWVsZW1lbnQgcmVmZXJlbmNlcyB0aGUgV1NETCBiaW5kaW5nIGVsZW1lbnQuIFRoZSBVUkwgb2YgdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcKLXRoZSBXU0RMIGJpbmRpbmcgZWxlbWVudCBpcyBwdWJsaXNoZWQgdG8gdGhlIFVEREkgYnVzaW5lc3MgcmVnaXN0cnkgYXMgYSB0TW9kZWwuCi1UaGUgVVJMIG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nIHRoZSBXU0RMIHNlcnZpY2UgZWxlbWVudCBpcyBwdWJsaXNoZWQgdG8KLXRoZSBVRERJIGJ1c2luZXNzIHJlZ2lzdHJ5IGFzIGEgYnVzaW5lc3NTZXJ2aWNlIGFuZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotdGhlIGJpbmRpbmdUZW1wbGF0ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVURESSByZWdpc3RyeSBkYXRhIHN0cnVjdHVyZQotdHlwZXMsIHJlZmVyIHRvIHRoZSByZWxhdGVkIHJlZmVyZW5jZSBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhpcyBkb2N1bWVudC4KLU5vdGUgdGhhdCB0aGUgaW1wb3J0IHBvcnRpb24gb2YgdGhlIGRpYWdyYW0gaXMgb3B0aW9uYWwgZGVwZW5kaW5nIG9uIHRoZSBydW4tdGltZQotZW52aXJvbm1lbnQ7IG1vbm9saXRoaWMgV1NETCBzdWNoIGFzIHRoYXQgY3JlYXRlZCB1c2luZyB0aGUgQXhpcyBydW4tdGltZQotZW52aXJvbm1lbnQgZG9lcyBub3QgaGF2ZSBpbXBvcnRzLjwvcD4KLQotPHA+VGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZGVzY3JpYmVzIGFuIGluc3RhbmNlIG9mIGEgc2VydmljZS4gVGhlIGluc3RhbmNlCi1pcyBkZWZpbmVkIHVzaW5nIGEgV1NETCBzZXJ2aWNlIGVsZW1lbnQuIFRoZSBzZXJ2aWNlIGVsZW1lbnQgaW4gYSBzZXJ2aWNlCi1pbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBpcyB1c2VkIHRvIHB1Ymxpc2ggYSBVRERJIGJ1c2luZXNzU2VydmljZS4gV2hlbiBwdWJsaXNoaW5nCi1hIFdTREwgc2VydmljZSBkZXNjcmlwdGlvbiwgYSBzZXJ2aWNlIGludGVyZmFjZSBtdXN0IGJlIHB1Ymxpc2hlZCBhcyBhIHRNb2RlbAotYmVmb3JlIGEgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBpcyBwdWJsaXNoZWQgYXMgYSBidXNpbmVzc1NlcnZpY2UuPC9wPgotCi08cD5BIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gaXMgcHVibGlzaGVkIGluIGEgVURESSByZWdpc3RyeSBhcyBwYXJ0IG9mIGEgYnVzaW5lc3NTZXJ2aWNlCi13aXRoIG9uZSBvciBtb3JlIGJpbmRpbmdUZW1wbGF0ZSBlbGVtZW50cy4gVGhlIGJ1c2luZXNzU2VydmljZSBpcyBwdWJsaXNoZWQKLWJ5IHRoZSBzZXJ2aWNlIHByb3ZpZGVyLiBBIG5ldyBidXNpbmVzc1NlcnZpY2UgaXMgY3JlYXRlZCBmb3IgYSBzZXJ2aWNlIGVsZW1lbnQKLXRoYXQgaXMgZGVmaW5lZCBpbiB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkb2N1bWVudC4gQSBuZXcgYmluZGluZ1RlbXBsYXRlCi1lbGVtZW50IGlzIGNyZWF0ZWQgd2l0aGluIGEgYnVzaW5lc3NTZXJ2aWNlIGZvciBlYWNoIHBvcnQgZWxlbWVudCB0aGF0IGlzCi1kZWZpbmVkIHdpdGhpbiBhIHNlcnZpY2UgZWxlbWVudC48L3A+Ci0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBXU0RMIGFuZCBVRERJIHJlZmVyIHRvCi0gPGEgaHJlZj0iaHR0cDovL3VkZGkub3JnL2Jlc3RwcmFjdGljZXMuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPnVkZGkub3JnL2Jlc3RwcmFjdGljZXMuaHRtbDwvYT4uPC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9hZGRmYXYuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2FkZGZhdi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODk1ZjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2FkZGZhdi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYWRkdWRkaS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYWRkdWRkaS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOTliYjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2FkZHVkZGkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2JlYW5pbmZvanNwLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9iZWFuaW5mb2pzcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYmU0MGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2JlYW5pbmZvanNwLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9iaW5kbm9kZS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYmluZG5vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmY1ZDAzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9iaW5kbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYnJvd3NlYnV0dG9uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9icm93c2VidXR0b24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODRhNWJiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9icm93c2VidXR0b24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2J1c2Fzc3QuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2J1c2Fzc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmRjYmIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9idXNhc3N0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9mYXYuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Zhdi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYmZhYmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Zhdi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZmluZC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZmluZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYzNlYmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2ZpbmQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Zzd3NkbGljb24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Zzd3NkbGljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDYwZTU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9mc3dzZGxpY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dpbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9naW4uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzdiZGQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dpbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9naW5pY29uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dpbmljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDUxMGNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dpbmljb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ291dGljb24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ291dGljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzcwOWNmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dvdXRpY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbXB0d3NkbGljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDVlNjU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbmV3anNwLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9uZXdqc3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjRiNTA5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9uZXdqc3AuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL29wbm9kZS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvb3Bub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThlYjM0OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvb3Bub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wcm94eW9uanNwLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wcm94eW9uanNwLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUyZTRlYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHJveHlvbmpzcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHVibGlzaDIuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3B1Ymxpc2gyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRhMTFhNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHVibGlzaDIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3B1YnNlcnYuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3B1YnNlcnYuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWQzNmI3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wdWJzZXJ2LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9yZWZzZXJ2LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9yZWZzZXJ2LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVjMDE1Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcmVmc2Vydi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcnVuanNmLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9ydW5qc2YuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTg4NGQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9ydW5qc2YuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NjZW5hcmlvNy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc2NlbmFyaW83LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM2NTMxZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc2NlbmFyaW83LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zZXJ2bm9kZS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc2Vydm5vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTEyMzNkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zZXJ2bm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuY2RyIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NvYXB1ZHdzLmNkcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlZGFlYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuY2RyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGkuY2RyIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGkuY2RyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzUyZjAxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpLmNkcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EwMmMwOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXJlZi5jZHIgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXJlZi5jZHIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZGEzMmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGlyZWYuY2RyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGlyZWYuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGlyZWYuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzE0OGE3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpcmVmLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpdmlldy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXZpZXcuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjAxYmM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpdmlldy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGJuZGRldGwuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxibmRkZXRsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAyMjYyZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGJuZGRldGwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxkZXRhaWwuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxkZXRhaWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjU0NTY4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZGV0YWlsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZHRsaWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGR0bGljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGVlNjdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZHRsaWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGV4cC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGV4cC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZWYxMGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxleHAuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxmYXZpY29uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZmF2aWNvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YWNjM2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxmYXZpY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsaWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWVjMzI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsaWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG5vZGUuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3NTIxYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG5vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3ZGQ0YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsb3ByZXQuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcHJldC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjODNlMzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcHJldC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wcmV0eC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wcmV0eC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNWQ1NzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcHJldHguZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxwYWdlLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RscGFnZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzN2MxYzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxwYWdlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsc2VydmRldC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHNlcnZkZXQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODdjYjg1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsc2VydmRldC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHN0YXR4LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsc3RhdHguZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWJhNzg3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsc3RhdHguZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx0ZW1wLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdGVtcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YmQyMDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx0ZW1wLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdWRkaS5jZHIgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHVkZGkuY2RyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTQ5MDk4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdWRkaS5jZHIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHVkZGkuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx1ZGRpLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmViYjdkNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHVkZGkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaWxwYWdlLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2lscGFnZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZTZlMDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaWxwYWdlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2lsdmlldy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbHZpZXcuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODlkNjg5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2lsdmlldy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbmpzcC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbmpzcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNWQ1ZjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaW5qc3AuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzd2l6aWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3N3aXppY29uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IxN2FhNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3N3aXppY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L19rLmNmcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L19rLmNmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U1NjUyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9fay5jZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MjMyNDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWMyNjBiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTM6MTYgRURUIDIwMDcNCi1vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXI9b3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyXG4xLjAuMzAwLnF1YWxpZmllcg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZWY3YmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEzOjE2IEVEVCAyMDA3DQotbHVjZW5lPTEuNC4xMDMudjIwMDYwNjAxDQotYW5hbHl6ZXI9b3JnLmVjbGlwc2UuaGVscC5iYXNlXCMzLjIuMC52MjAwNjA2MDE/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAxYWFlMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMzoxNiBFRFQgMjAwNw0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGxvZ2V4cC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRyZWcuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3JlZi9ydWRkaS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1cGRhdGUuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVucHViLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YmttcmsuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHVibGlzaC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RidXNwcm9qLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5odG1sPTANCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI1ZDBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzFmYjE0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0gIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLQkJPHRvYyBmaWxlPSJ3c2NvbnN1bXB0aW9uYnVpbGRfdG9jLnhtbCIvPgotCQk8dG9jIGZpbGU9IndzY29uc3VtcHRpb250X3RvYy54bWwiIC8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotCTwvZXh0ZW5zaW9uPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIubWFwbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWMwNGIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPG1hcGxpc3QgdmVyc2lvbj0iMy42LjIiPgotICA8bmF2PgotICAgIDxtYXAgZmlsZT0id3Njb25zdW1wdGlvbmJ1aWxkX3RvYy5kaXRhbWFwIi8+Ci0gICAgPG1hcCBmaWxlPSJ3c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcCIvPgotICA8L25hdj4KLSAgPGxpbms+Ci0gICAgPG1hcCBmaWxlPSJ3c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcCIvPgotICAgIDxtYXAgZmlsZT0id3Njb25zdW1wdGlvbmJ1aWxkX3RvYy5kaXRhbWFwIi8+Ci0gIDwvbGluaz4KLTwvbWFwbGlzdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjUyN2E2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBodG1sCi0gIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJzZWN1cml0eSIgY29udGVudD0icHVibGljIiAvPgotPG1ldGEgbmFtZT0iUm9ib3RzIiBjb250ZW50PSJpbmRleCxmb2xsb3ciIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIG5hbWU9IkRDLkZvcm1hdCIgY29udGVudD0iWEhUTUwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvaWJtZGl0YS5jc3MiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgLz4KLTx0aXRsZT5JbmRleDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5JbmRleDwvaDE+Ci08YSBuYW1lPSJJRFgwXzQyIiBocmVmPSIjSURYMV80MiI+QjwvYT4KLTxhIG5hbWU9IklEWDBfNDQiIGhyZWY9IiNJRFgxXzQ0Ij5EPC9hPgotPGEgbmFtZT0iSURYMF81MiIgaHJlZj0iI0lEWDFfNTIiPlI8L2E+Ci08YSBuYW1lPSJJRFgwXzUzIiBocmVmPSIjSURYMV81MyI+UzwvYT4KLTxhIG5hbWU9IklEWDBfNTUiIGhyZWY9IiNJRFgxXzU1Ij5VPC9hPgotPGEgbmFtZT0iSURYMF81NyIgaHJlZj0iI0lEWDFfNTciPlc8L2E+Ci08aHI+PC9ocj4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80MiIgaHJlZj0iI0lEWDBfNDIiPkI8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+YnVzaW5lc3MgZW50aXRpZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIj5wdWJsaXNoaW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90cHViZW50Lmh0bWwjdHB1YmVudCI+cHVibGlzaGluZyB0byBVRERJPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSI+dXBkYXRpbmcgaW4gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80NCIgaHJlZj0iI0lEWDBfNDQiPkQ8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+ZGF0YSBzdHJ1Y3R1cmUgdHlwZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJyZWYvcnVkZGkuaHRtbCNydWRkaSI+VURESSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTIiIGhyZWY9IiNJRFgwXzUyIj5SPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnJlZ2lzdHJpZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkcmVnLmh0bWwjdGFkZHJlZyI+YWRkaW5nIHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzUzIiBocmVmPSIjSURYMF81MyI+UzwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5zZXJ2aWNlIGludGVyZmFjZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSI+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NSIgaHJlZj0iI0lEWDBfNTUiPlU8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCNjdWRkaSI+VURESTwvYT4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJyZWYvcnVkZGkuaHRtbCNydWRkaSI+ZGF0YSBzdHJ1Y3R1cmUgdHlwZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCN0ZGlzY292Ij5kaXNjb3ZlcmluZyBXZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3Rsb2dleHAuaHRtbCN0bG9nZXhwIj5sb2dnaW5nIGludG8gYSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFzc2VydC5odG1sI3Rhc3NlcnQiPm1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YnVzcHJvai5odG1sI3RidXNwcm9qIj5tYW5hZ2luZyBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHB1YmVudC5odG1sI3RwdWJlbnQiPnB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RwdWJsaXNoLmh0bWwjdHB1Ymxpc2giPnB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHJlZy5odG1sI3RyZWciPnJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzZGx1ZC5odG1sI2N3c2RsdWQiPnJlbGF0aW9uc2hpcCB3aXRoIFdTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiI+cmVtb3Zpbmcgc2VydmljZXMgZnJvbSBhIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N1ZGRpLmh0bWwjY3VkZGkiPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb248L2E+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NyIgaHJlZj0iI0lEWDBfNTciPlc8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+V2ViIFNlcnZpY2UgRXhwbG9yZXIKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90YmttcmsuaHRtbCN0YmttcmsiPmFkZGluZyBGYXZvcml0ZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V2ViIHNlcnZpY2VzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sI3RhZGRyZWciPmFkZGluZyBhIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCN0ZGlzY292Ij5kaXNjb3ZlcmluZzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCI+ZXhwbG9yaW5nIFdTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RnZW53c2lsLmh0bWwjdGdlbndzaWwiPmdlbmVyYXRpbmcgV1NJTDwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGJ1c3Byb2ouaHRtbCN0YnVzcHJvaiI+bWFuYWdpbmcgc2VydmljZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCN0cHViZW50Ij5wdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90cHVibGlzaC5odG1sI3RwdWJsaXNoIj5wdWJsaXNoaW5nIHRvIGEgVURESSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHJlZy5odG1sI3RyZWciPnJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dGVzdHdzZGwuaHRtbCN0dGVzdHdzZGwiPnRlc3Rpbmcgd2l0aCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jdWRkaS5odG1sI2N1ZGRpIj5VRERJPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSI+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldlYiBTZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnB1Ymxpc2hpbmcKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIj5vdmVydmlldzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldlYiBTZXJ2aWNlcyBFeHBsb3JlcgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCN0YWRkcmVnIj5hZGRpbmcgYSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHN0cnRleHAuaHRtbCN0c3RydGV4cCI+bGF1bmNoaW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwjdGxvZ2V4cCI+bG9nZ2luZyBpbnRvIGEgVURESSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHVkZGlleHAuaHRtbCN0dWRkaWV4cCI+cHVibGlzaGluZyBXZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1NETAotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3Ria21yay5odG1sI3Ria21yayI+YWRkaW5nIHRvIEZhdm9yaXRlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCI+ZXhwbG9yaW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NkbHVkLmh0bWwjY3dzZGx1ZCI+cmVsYXRpb25zaGlwIHdpdGggVURESTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHRlc3R3c2RsLmh0bWwjdHRlc3R3c2RsIj50ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0lMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwjdGJrbXJrIj5hZGRpbmcgdG8gRmF2b3JpdGVzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90ZGlzY292Lmh0bWwjdGRpc2NvdiI+ZGlzY292ZXJpbmcgV2ViIHNlcnZpY2VzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90Z2Vud3NpbC5odG1sI3RnZW53c2lsIj5nZW5lcmF0aW5nPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNzRlN2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJVRERJIj4KLSAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCNjdWRkaSIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIi8+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbGF0aW9uc2hpcCB3aXRoIFdTREwiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2RsdWQuaHRtbCNjd3NkbHVkIiB0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImRpc2NvdmVyaW5nIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sI3RkaXNjb3YiIHRpdGxlPSJEaXNjb3ZlcmluZyBXZWIgU2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJyZWdpc3RlcmluZyB3aXRoIGEgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RyZWcuaHRtbCN0cmVnIiB0aXRsZT0iUmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJsb2dnaW5nIGludG8gYSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGxvZ2V4cC5odG1sI3Rsb2dleHAiIHRpdGxlPSJMb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCN0cHViZW50IiB0aXRsZT0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHB1Ymxpc2guaHRtbCN0cHVibGlzaCIgdGl0bGU9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImRhdGEgc3RydWN0dXJlIHR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJyZWYvcnVkZGkuaHRtbCNydWRkaSIgdGl0bGU9IkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbW92aW5nIHNlcnZpY2VzIGZyb20gYSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVucHViLmh0bWwjdHVucHViIiB0aXRsZT0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJtYW5hZ2luZyBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGJ1c3Byb2ouaHRtbCN0YnVzcHJvaiIgdGl0bGU9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJtYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFzc2VydC5odG1sI3Rhc3NlcnQiIHRpdGxlPSJNYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIj4KLSAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCNjdWRkaSIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIi8+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJVRERJIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jdWRkaS5odG1sI2N1ZGRpIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJkaXNjb3ZlcmluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sI3RkaXNjb3YiIHRpdGxlPSJEaXNjb3ZlcmluZyBXZWIgU2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJleHBsb3JpbmcgV1NETCI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCIgdGl0bGU9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R0ZXN0d3NkbC5odG1sI3R0ZXN0d3NkbCIgdGl0bGU9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90cmVnLmh0bWwjdHJlZyIgdGl0bGU9IlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIGEgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sI3RhZGRyZWciIHRpdGxlPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHB1YmVudC5odG1sI3RwdWJlbnQiIHRpdGxlPSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icHVibGlzaGluZyB0byBhIFVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RwdWJsaXNoLmh0bWwjdHB1Ymxpc2giIHRpdGxlPSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ1cGRhdGluZyBVRERJIHJlZ2lzdHJpZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1cGRhdGUuaHRtbCN0dXBkYXRlIiB0aXRsZT0iVXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiIHRpdGxlPSJSZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1hbmFnaW5nIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YnVzcHJvai5odG1sI3RidXNwcm9qIiB0aXRsZT0iTWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImdlbmVyYXRpbmcgV1NJTCI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGdlbndzaWwuaHRtbCN0Z2Vud3NpbCIgdGl0bGU9IkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NETCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbGF0aW9uc2hpcCB3aXRoIFVEREkiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2RsdWQuaHRtbCNjd3NkbHVkIiB0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImV4cGxvcmluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCIgdGl0bGU9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R0ZXN0d3NkbC5odG1sI3R0ZXN0d3NkbCIgdGl0bGU9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyB0byBGYXZvcml0ZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3Ria21yay5odG1sI3Ria21yayIgdGl0bGU9IkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldTSUwiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJkaXNjb3ZlcmluZyBXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCN0ZGlzY292IiB0aXRsZT0iRGlzY292ZXJpbmcgV2ViIFNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIHRvIEZhdm9yaXRlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwjdGJrbXJrIiB0aXRsZT0iQWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJnZW5lcmF0aW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Z2Vud3NpbC5odG1sI3RnZW53c2lsIiB0aXRsZT0iR2VuZXJhdGluZyBhIFdTSUwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgU2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJwdWJsaXNoaW5nIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIiB0aXRsZT0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJidXNpbmVzcyBlbnRpdGllcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwjdHVkZGlleHAiIHRpdGxlPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJwdWJsaXNoaW5nIHRvIFVEREkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCN0cHViZW50IiB0aXRsZT0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InVwZGF0aW5nIGluIGEgVURESSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVwZGF0ZS5odG1sI3R1cGRhdGUiIHRpdGxlPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icmVtb3ZpbmcgZnJvbSBhIFVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiIgdGl0bGU9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIiB0aXRsZT0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibGF1bmNoaW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c3RydGV4cC5odG1sI3RzdHJ0ZXhwIiB0aXRsZT0iTGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJsb2dnaW5nIGludG8gYSBVRERJIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwjdGxvZ2V4cCIgdGl0bGU9IkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIGEgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCN0YWRkcmVnIiB0aXRsZT0iQWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJyZWdpc3RyaWVzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCN0YWRkcmVnIiB0aXRsZT0iQWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJkYXRhIHN0cnVjdHVyZSB0eXBlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IlVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InJlZi9ydWRkaS5odG1sI3J1ZGRpIiB0aXRsZT0iRGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9InNlcnZpY2UgaW50ZXJmYWNlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InVwZGF0aW5nIFVEREkgcmVnaXN0cmllcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVwZGF0ZS5odG1sI3R1cGRhdGUiIHRpdGxlPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icmVtb3ZpbmcgZnJvbSBhIFVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiIgdGl0bGU9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBTZXJ2aWNlIEV4cGxvcmVyIj4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIEZhdm9yaXRlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwjdGJrbXJrIiB0aXRsZT0iQWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotPC9pbmRleD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGY0Njc0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTkxTX01FU1NBR0VGT1JNQVRfVkFSIAotIyBOTFNfRU5DT0RJTkc9VVRGLTggCi0KLXBsdWdpbk5hbWUgPSBXZWIgc2VydmljZSBjb25zdW1wdGlvbiBkb2N1bWVudGF0aW9uCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMxZmIxNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotCQk8dG9jIGZpbGU9IndzY29uc3VtcHRpb25idWlsZF90b2MueG1sIi8+Ci0JCTx0b2MgZmlsZT0id3Njb25zdW1wdGlvbnRfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0JPC9leHRlbnNpb24+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3JlZi9ydWRkaS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NzZmZWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSByZWZlcmVuY2UgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgUmVmZXJlbmNlLy9FTiIKLSAicmVmZXJlbmNlLmR0ZCI+Ci08cmVmZXJlbmNlIGlkPSJydWRkaSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L3RpdGxlPgotPHNob3J0ZGVzYz5PbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0Ci15b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZQotaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwKLWJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuCi1UaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPmRhdGEgc3RydWN0dXJlIHR5cGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPmRhdGEgc3RydWN0dXJlIHR5cGVzPGluZGV4dGVybT5VRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxyZWZib2R5PgotPHNlY3Rpb24+PGxxPiA8cD4gPHVpY29udHJvbD5CdXNpbmVzcyBpbmZvcm1hdGlvbi48L3VpY29udHJvbD4gSW5mb3JtYXRpb24KLXRoYXQgaXMgY29udGFpbmVkIGluIGEgIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NFbnRpdHk8L3N5c3RlbW91dHB1dD4gc3RydWN0dXJlLgotVGhlICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzRW50aXR5PC9zeXN0ZW1vdXRwdXQ+IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci10aGUgYnVzaW5lc3MgdGhhdCBoYXMgcHVibGlzaGVkIHRoZSBzZXJ2aWNlLCBzdWNoIGFzIGJ1c2luZXNzIG5hbWUsIGRlc2NyaXB0aW9uLAotY29udGFjdHMgYW5kIGlkZW50aWZpZXJzLjwvcD4gPHA+IDx1aWNvbnRyb2w+U2VydmljZSBpbmZvcm1hdGlvbi48L3VpY29udHJvbD4gSW5mb3JtYXRpb24KLXRoYXQgZGVzY3JpYmVzIGEgZ3JvdXAgb2YgV2ViIHNlcnZpY2VzLiBJdCBpcyBjb250YWluZWQgaW4gYSAgPHN5c3RlbW91dHB1dD5idXNpbmVzc1NlcnZpY2U8L3N5c3RlbW91dHB1dD4gc3RydWN0dXJlLgotVGhlICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzU2VydmljZTwvc3lzdGVtb3V0cHV0PiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotZmFtaWxpZXMgb2YgdGVjaG5pY2FsIHNlcnZpY2VzLiZuYnNwOyBJdCBncm91cHMgYSBzZXQgb2YgV2ViIHNlcnZpY2VzIHJlbGF0ZWQKLXRvIGVpdGhlciBhIGJ1c2luZXNzIHByb2Nlc3Mgb3IgZ3JvdXAgb2Ygc2VydmljZXMuPC9wPiA8cD4gPHVpY29udHJvbD5CaW5kaW5nCi1pbmZvcm1hdGlvbi48L3VpY29udHJvbD4gSW5mb3JtYXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlICA8c3lzdGVtb3V0cHV0PmJpbmRpbmdUZW1wbGF0ZTwvc3lzdGVtb3V0cHV0PiBzdHJ1Y3R1cmUuCi1UaGUgIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IGhvbGRzIHRlY2huaWNhbCBpbmZvcm1hdGlvbgotZm9yIGRldGVybWluaW5nIHRoZSBlbnRyeSBwb2ludCBhbmQgY29uc3RydWN0aW9uIHNwZWNpZmljYXRpb25zIGZvciBpbnZva2luZwotYSBXZWIgc2VydmljZS4mbmJzcDsgVGhlICA8c3lzdGVtb3V0cHV0PmJpbmRpbmdUZW1wbGF0ZTwvc3lzdGVtb3V0cHV0PiBwcm92aWRlcwotdGhlIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9ucyByZWxldmFudCBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB0aGF0IHdhbnQKLXRvIGZpbmQgYW5kIGludm9rZSBhIFdlYiBzZXJ2aWNlLiZuYnNwOyBUaGUgIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IHBvaW50cwotdG8gYSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRlc2NyaXB0aW9ucywgZm9yIGV4YW1wbGUgdmlhIGEgVVJMLjwvcD4gPHA+IDx1aWNvbnRyb2w+SW5mb3JtYXRpb24KLWRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy48L3VpY29udHJvbD4gTWV0YWRhdGEgYWJvdXQgdGhlCi12YXJpb3VzIHNwZWNpZmljYXRpb25zIGltcGxlbWVudGVkIGJ5IGEgZ2l2ZW4gV2ViIHNlcnZpY2UgcmVwcmVzZW50ZWQgYnkgdGhlCi0gPHN5c3RlbW91dHB1dD50TW9kZWw8L3N5c3RlbW91dHB1dD4uIFRoZSAgPHN5c3RlbW91dHB1dD50TW9kZWw8L3N5c3RlbW91dHB1dD4gcHJvdmlkZXMKLWEgcmVmZXJlbmNlIHN5c3RlbSB0byBhc3Npc3QgaW4gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMuPC9wPiA8L2xxPjxwPkZpZ3VyZQotMS4gUmVsYXRpb25zaGlwIGJldHdlZW4gZGF0YSB0eXBlcy48L3A+PHA+IDxpbWFnZSBhbHQ9IkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBiaW5kaW5nIHRlbXBsYXRlLCBhbmQgdG1vZGVsLiIKLWhyZWY9Ii4uL2ltYWdlcy91ZGRpLmdpZiI+PC9pbWFnZT4gPC9wPjxwPkVhY2ggY2hpbGQgc3RydWN0dXJlIGhhcyBhIHVuaXF1ZQotcGFyZW50IHN0cnVjdHVyZS4gVGhpcyBtZWFucyB0aGF0IGVhY2ggIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NTZXJ2aWNlPC9zeXN0ZW1vdXRwdXQ+IHN0cnVjdHVyZQotaXMgb3duZWQgYnkgYSBzcGVjaWZpYyAgPHN5c3RlbW91dHB1dD5idXNpbmVzc0VudGl0eTwvc3lzdGVtb3V0cHV0Pi4gSW4gdHVybiwKLWVhY2ggIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IGlzIG93bmVkIGJ5IGEgc3BlY2lmaWMKLSA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzU2VydmljZTwvc3lzdGVtb3V0cHV0Pi4gRWFjaCAgPHN5c3RlbW91dHB1dD5iaW5kaW5nVGVtcGxhdGU8L3N5c3RlbW91dHB1dD4gc3RydWN0dXJlCi1yZWZlcmVuY2VzIHRvIHVuaXF1ZSBpbnN0YW5jZXMgb2YgIDxzeXN0ZW1vdXRwdXQ+dE1vZGVsPC9zeXN0ZW1vdXRwdXQ+IHN0cnVjdHVyZXM7Ci1ob3dldmVyLCBzaW5jZSByZWZlcmVuY2VzIGNhbiBiZSByZXBlYXRlZCB3aXRoaW4gc2V2ZXJhbCBwYXJlbnQgc3RydWN0dXJlcywKLXRoZXJlIGNhbiBiZSBtYW55IHJlZmVyZW5jZXMgdG8gIDxzeXN0ZW1vdXRwdXQ+dE1vZGVsczwvc3lzdGVtb3V0cHV0PiBmcm9tCi1kaWZmZXJlbnQgRW50aXR5LVNlcnZpY2UtVGVtcGxhdGUgcGFyZW50cywgYXMgc2VlbiBpbiBGaWd1cmUgMi48L3A+PHA+RmlndXJlCi0yLiBSZWZlcmVuY2VzIHRvIHRNb2RlbC48L3A+PHA+IDxpbWFnZSBhbHQ9IkZpZ3VyZSAyIGlsbHVzdHJhdGVzIHRoZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgdE1vZGVsLiIKLWhyZWY9Ii4uL2ltYWdlcy91ZGRpcmVmLmdpZiI+PC9pbWFnZT4gPC9wPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5QdWJsaXNoZXIgYXNzZXJ0aW9uczwvdGl0bGU+PHA+QSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGlzIGEKLXdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBUaGUgcHVibGlzaGVyIGFzc2VydGlvbgotZGVmaW5lcyBhIGdyb3VwIG9mIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIE1hbnkgYnVzaW5lc3NlcyBhcmUgbm90IGVmZmVjdGl2ZWx5Ci1yZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4gQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgdGhlCi1hc3NvY2lhdGlvbiBiZXR3ZWVuIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIEZvciBleGFtcGxlLCBhIGxhcmdlIGNvbXBhbnkKLW1heSBoYXZlIHNldmVyYWwgc3Vic2lkaWFyaWVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVzY3JpcHRpb25zIGJ1dCBhcmUgc3RpbGwKLWNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0byBtYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuPC9wPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5TZXJ2aWNlIHByb2plY3Rpb25zPC90aXRsZT48cD5BIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzCi1hIGJ1c2luZXNzIGVudGl0eSB0byByZWZlcmVuY2UgYSBzZXJ2aWNlIHRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzCi1lbnRpdHkuIEJ5IHVzaW5nIHRoZSBidXNpbmVzc1NlcnZpY2Ugc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5Ci1wdWJsaXNoZWQgYnVzaW5lc3NTZXJ2aWNlLCBidXNpbmVzc2VzIGNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy4gU2VydmljZQotcHJvamVjdGlvbnMgYXJlIG1hbmFnZWQgY2VudHJhbGx5IGFzIHBhcnQgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5LgotVGhpcyBtZWFucyB0aGF0IGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGJ1c2luZXNzU2VydmljZSBieSBhbnkgb2YgdGhlIHJlZmVyZW5jaW5nCi1idXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzIGFyZSB2YWxpZCBmb3IgYWxsIG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eQotc3RydWN0dXJlcy48L3A+PC9zZWN0aW9uPgotPC9yZWZib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3JlZmVyZW5jZT4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3JlZi9ydWRkaS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMWM2ODMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InJlZmVyZW5jZSIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIGRhdGEgc3RydWN0dXJlIHR5cGVzLCBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgZGF0YSBzdHJ1Y3R1cmUgdHlwZXMsIFVEREkgcmVnaXN0cnkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InJ1ZGRpIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJydWRkaSI+PGEgbmFtZT0icnVkZGkiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvaDE+Ci0KLQotCi08ZGl2PjxwPk9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQKLXlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlCi1pbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLAotYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4KLVRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxibG9ja3F1b3RlPiA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnVzaW5lc3MgaW5mb3JtYXRpb24uPC9zcGFuPiBJbmZvcm1hdGlvbgotdGhhdCBpcyBjb250YWluZWQgaW4gYSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJ1c2luZXNzRW50aXR5PC90dD4gc3RydWN0dXJlLgotVGhlICA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NFbnRpdHk8L3R0PiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotdGhlIGJ1c2luZXNzIHRoYXQgaGFzIHB1Ymxpc2hlZCB0aGUgc2VydmljZSwgc3VjaCBhcyBidXNpbmVzcyBuYW1lLCBkZXNjcmlwdGlvbiwKLWNvbnRhY3RzIGFuZCBpZGVudGlmaWVycy48L3A+Ci0gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNlcnZpY2UgaW5mb3JtYXRpb24uPC9zcGFuPiBJbmZvcm1hdGlvbgotdGhhdCBkZXNjcmliZXMgYSBncm91cCBvZiBXZWIgc2VydmljZXMuIEl0IGlzIGNvbnRhaW5lZCBpbiBhICA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NTZXJ2aWNlPC90dD4gc3RydWN0dXJlLgotVGhlICA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NTZXJ2aWNlPC90dD4gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKLWZhbWlsaWVzIG9mIHRlY2huaWNhbCBzZXJ2aWNlcy7CoCBJdCBncm91cHMgYSBzZXQgb2YgV2ViIHNlcnZpY2VzIHJlbGF0ZWQKLXRvIGVpdGhlciBhIGJ1c2luZXNzIHByb2Nlc3Mgb3IgZ3JvdXAgb2Ygc2VydmljZXMuPC9wPgotIDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CaW5kaW5nCi1pbmZvcm1hdGlvbi48L3NwYW4+IEluZm9ybWF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IHN0cnVjdHVyZS4KLVRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IGhvbGRzIHRlY2huaWNhbCBpbmZvcm1hdGlvbgotZm9yIGRldGVybWluaW5nIHRoZSBlbnRyeSBwb2ludCBhbmQgY29uc3RydWN0aW9uIHNwZWNpZmljYXRpb25zIGZvciBpbnZva2luZwotYSBXZWIgc2VydmljZS7CoCBUaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5iaW5kaW5nVGVtcGxhdGU8L3R0PiBwcm92aWRlcwotdGhlIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9ucyByZWxldmFudCBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB0aGF0IHdhbnQKLXRvIGZpbmQgYW5kIGludm9rZSBhIFdlYiBzZXJ2aWNlLsKgIFRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IHBvaW50cwotdG8gYSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRlc2NyaXB0aW9ucywgZm9yIGV4YW1wbGUgdmlhIGEgVVJMLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SW5mb3JtYXRpb24KLWRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy48L3NwYW4+IE1ldGFkYXRhIGFib3V0IHRoZQotdmFyaW91cyBzcGVjaWZpY2F0aW9ucyBpbXBsZW1lbnRlZCBieSBhIGdpdmVuIFdlYiBzZXJ2aWNlIHJlcHJlc2VudGVkIGJ5IHRoZQotIDx0dCBjbGFzcz0ic3lzb3V0Ij50TW9kZWw8L3R0Pi4gVGhlICA8dHQgY2xhc3M9InN5c291dCI+dE1vZGVsPC90dD4gcHJvdmlkZXMKLWEgcmVmZXJlbmNlIHN5c3RlbSB0byBhc3Npc3QgaW4gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMuPC9wPgotIDwvYmxvY2txdW90ZT4KLTxwPkZpZ3VyZQotMS4gUmVsYXRpb25zaGlwIGJldHdlZW4gZGF0YSB0eXBlcy48L3A+Ci08cD4gPGltZyBzcmM9Ii4uL2ltYWdlcy91ZGRpLmdpZiIgYWx0PSJGaWd1cmUgMSBpbGx1c3RyYXRlcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgYmluZGluZyB0ZW1wbGF0ZSwgYW5kIHRtb2RlbC4iIC8+IDwvcD4KLTxwPkVhY2ggY2hpbGQgc3RydWN0dXJlIGhhcyBhIHVuaXF1ZQotcGFyZW50IHN0cnVjdHVyZS4gVGhpcyBtZWFucyB0aGF0IGVhY2ggIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc1NlcnZpY2U8L3R0PiBzdHJ1Y3R1cmUKLWlzIG93bmVkIGJ5IGEgc3BlY2lmaWMgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc0VudGl0eTwvdHQ+LiBJbiB0dXJuLAotZWFjaCAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IGlzIG93bmVkIGJ5IGEgc3BlY2lmaWMKLSA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NTZXJ2aWNlPC90dD4uIEVhY2ggIDx0dCBjbGFzcz0ic3lzb3V0Ij5iaW5kaW5nVGVtcGxhdGU8L3R0PiBzdHJ1Y3R1cmUKLXJlZmVyZW5jZXMgdG8gdW5pcXVlIGluc3RhbmNlcyBvZiAgPHR0IGNsYXNzPSJzeXNvdXQiPnRNb2RlbDwvdHQ+IHN0cnVjdHVyZXM7Ci1ob3dldmVyLCBzaW5jZSByZWZlcmVuY2VzIGNhbiBiZSByZXBlYXRlZCB3aXRoaW4gc2V2ZXJhbCBwYXJlbnQgc3RydWN0dXJlcywKLXRoZXJlIGNhbiBiZSBtYW55IHJlZmVyZW5jZXMgdG8gIDx0dCBjbGFzcz0ic3lzb3V0Ij50TW9kZWxzPC90dD4gZnJvbQotZGlmZmVyZW50IEVudGl0eS1TZXJ2aWNlLVRlbXBsYXRlIHBhcmVudHMsIGFzIHNlZW4gaW4gRmlndXJlIDIuPC9wPgotPHA+RmlndXJlCi0yLiBSZWZlcmVuY2VzIHRvIHRNb2RlbC48L3A+Ci08cD4gPGltZyBzcmM9Ii4uL2ltYWdlcy91ZGRpcmVmLmdpZiIgYWx0PSJGaWd1cmUgMiBpbGx1c3RyYXRlcyB0aGUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byBhIHRNb2RlbC4iIC8+IDwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+UHVibGlzaGVyIGFzc2VydGlvbnM8L2g0PjxwPkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhCi13YXkgaW4gVURESSB0byBhc3NvY2lhdGUgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gVGhlIHB1Ymxpc2hlciBhc3NlcnRpb24KLWRlZmluZXMgYSBncm91cCBvZiBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseQotcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgYnVzaW5lc3NFbnRpdHkuIEEgcHVibGlzaGVyIGFzc2VydGlvbiBhbGxvd3MgZm9yIHRoZQotYXNzb2NpYXRpb24gYmV0d2VlbiBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBGb3IgZXhhbXBsZSwgYSBsYXJnZSBjb21wYW55Ci1tYXkgaGF2ZSBzZXZlcmFsIHN1YnNpZGlhcmllcyB0aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsCi1jbG9zZWx5IGNvdXBsZWQgYW5kIHdhbnQgdG8gbWFrZSB0aGVpciByZWxhdGlvbnNoaXBzIHZpc2libGUgaW4gVURESSByZWdpc3RyaWVzLjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+U2VydmljZSBwcm9qZWN0aW9uczwvaDQ+PHA+QSBzZXJ2aWNlIHByb2plY3Rpb24gZW5hYmxlcwotYSBidXNpbmVzcyBlbnRpdHkgdG8gcmVmZXJlbmNlIGEgc2VydmljZSB0aGF0IHdhcyBwdWJsaXNoZWQgYnkgYW5vdGhlciBidXNpbmVzcwotZW50aXR5LiBCeSB1c2luZyB0aGUgYnVzaW5lc3NTZXJ2aWNlIHN0cnVjdHVyZSBhcyBhIHByb2plY3Rpb24gdG8gYW4gYWxyZWFkeQotcHVibGlzaGVkIGJ1c2luZXNzU2VydmljZSwgYnVzaW5lc3NlcyBjYW4gc2hhcmUgb3IgcmV1c2Ugc2VydmljZXMuIFNlcnZpY2UKLXByb2plY3Rpb25zIGFyZSBtYW5hZ2VkIGNlbnRyYWxseSBhcyBwYXJ0IG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eS4KLVRoaXMgbWVhbnMgdGhhdCBhbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBidXNpbmVzc1NlcnZpY2UgYnkgYW55IG9mIHRoZSByZWZlcmVuY2luZwotYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcyBhcmUgdmFsaWQgZm9yIGFsbCBvZiB0aGUgcmVmZXJlbmNpbmcgYnVzaW5lc3NFbnRpdHkKLXN0cnVjdHVyZXMuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDE1ZWNjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRyZWcuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkcmVnIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5BZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5BbHRob3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGNvbWVzIHBvcHVsYXRlZCB3aXRoIHNldmVyYWwKLXJlZ2lzdHJpZXMsIHlvdSBjYW4gYWxzbyBhZGQgYWRkaXRpb25hbCByZWdpc3RyaWVzIHRvIHlvdXIgbGlzdCBvZiBmYXZvcml0ZXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIGEgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+YWRkaW5nCi1hIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5yZWdpc3RyaWVzPGluZGV4dGVybT5hZGRpbmcgdG8KLXRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+PHA+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC9vbD48L3A+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5XaGVuIHlvdSBhcmUgcmVhZHkgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UsCi1hZGQgYSBwcm9kdWN0aW9uIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIEluIG9yZGVyIHRvIHB1Ymxpc2gKLXlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIHByb2R1Y3Rpb24gcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0Ci1yZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeS4gVGhlIHJlZ2lzdHJ5IHdpbGwgcHJvdmlkZSBpbnN0cnVjdGlvbnMgZm9yIHJlZ2lzdGVyaW5nLgotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcmVnaXN0cmllcywgcmVmZXIgdG8gIDx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXJpbmcKLXdpdGggYSByZWdpc3RyeTwveHJlZj4uPC9wPjxwPlRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IGlzIGEgc2V0IG9mIGdsb2JhbAotcmVwbGljYXRlZCByZWdpc3RyaWVzLiBGb3IgYSBsaXN0IG9mIHB1YmxpYyByZWdpc3RyaWVzIHJlZmVyIHRvICA8eHJlZiBocmVmPSJodHRwOi8vd3d3LlVEREkub3JnL3JlZ2lzdGVyLmh0bWwiCi1zY29wZT0iZXh0ZXJuYWwiPnd3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sPC94cmVmPjwvcD48cD5UaGUgPHRtIHRtY2xhc3M9ImlibSIKLXRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBVRERJIEJ1c2luZXNzCi1SZWdpc3RyeSBpcyBhIHB1YmxpYyBwcm9kdWN0aW9uIHJlZ2lzdHJ5IG1haW50YWluZWQgYnkgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIgotdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIDx0bSB0bWNsYXNzPSJpYm0iCi10bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gVURESSBCdXNpbmVzcwotUmVnaXN0cnkgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3VkZGkuaWJtLmNvbSIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vdWRkaS5pYm0uY29tPC94cmVmPjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlRvIGFkZCBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSBGYXZvcml0ZXMsCi1kbyB0aGUgZm9sbG93aW5nOjwvY21kPgotPHN1YnN0ZXBzPgotPHN1YnN0ZXA+PGNtZD5DbGljayB0aGUgIDx1aWNvbnRyb2w+RmF2b3JpdGVzPC91aWNvbnRyb2w+IGljb24gIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIEZhdm9yaXRlcyBpY29uLiIKLWhyZWY9Ii4uL2ltYWdlcy9mYXYuZ2lmIj48L2ltYWdlPiBpbiB0aGUgbWFpbiB0b29sYmFyLjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+RXhwYW5kICA8dWljb250cm9sPkZhdm9yaXRlIFVEREkgUmVnaXN0cmllczwvdWljb250cm9sPi48L2NtZD4KLTwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IGEgcmVnaXN0cnkgdGhlbiBjbGljayB0aGUgIDx1aWNvbnRyb2w+QWRkIHRvIFVEREkgUGFnZTwvdWljb250cm9sPiBpY29uCi0gPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgQWRkIHRvIFVEREkgUGFnZSBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL2FkZHVkZGkuZ2lmIj4KLTwvaW1hZ2U+IGluIHRoZSBBY3Rpb25zIHBhbmUuPC9jbWQ+PC9zdWJzdGVwPgotPC9zdWJzdGVwcz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+VG8gYWRkIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBtYW51YWxseSwgZG8gdGhlCi1mb2xsb3dpbmc6PC9jbWQ+Ci08c3Vic3RlcHM+Ci08c3Vic3RlcD48Y21kPkluIHRoZSBVRERJIE5hdmlnYXRvciBwYW5lLCBjbGljayB0aGUgIDx1aWNvbnRyb2w+VURESSBNYWluPC91aWNvbnRyb2w+IG5vZGUuPC9jbWQ+Ci08L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUsIGVudGVyIHRoZSBSZWdpc3RyeSBuYW1lIGFuZCBJbnF1aXJ5IFVSTAotb2YgdGhlIHJlZ2lzdHJ5IHlvdSB3YW50IHRvIGFkZC48L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPkNsaWNrICA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWIyMmQ0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRyZWcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkFsdGhvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgY29tZXMgcG9wdWxhdGVkIHdpdGggc2V2ZXJhbCByZWdpc3RyaWVzLCB5b3UgY2FuIGFsc28gYWRkIGFkZGl0aW9uYWwgcmVnaXN0cmllcyB0byB5b3VyIGxpc3Qgb2YgZmF2b3JpdGVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBbHRob3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGNvbWVzIHBvcHVsYXRlZCB3aXRoIHNldmVyYWwgcmVnaXN0cmllcywgeW91IGNhbiBhbHNvIGFkZCBhZGRpdGlvbmFsIHJlZ2lzdHJpZXMgdG8geW91ciBsaXN0IG9mIGZhdm9yaXRlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBhIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgYWRkaW5nIGEgcmVnaXN0cnksIHJlZ2lzdHJpZXMsIGFkZGluZyB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgYSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBXZWIgU2VydmljZXMgRXhwbG9yZXIsIGFkZGluZyBhIHJlZ2lzdHJ5LCByZWdpc3RyaWVzLCBhZGRpbmcgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRyZWcuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGFkZHJlZyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRyZWciPjxhIG5hbWU9InRhZGRyZWciPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2gxPgotCi0KLQotCi08ZGl2PjxwPkFsdGhvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgY29tZXMgcG9wdWxhdGVkIHdpdGggc2V2ZXJhbAotcmVnaXN0cmllcywgeW91IGNhbiBhbHNvIGFkZCBhZGRpdGlvbmFsIHJlZ2lzdHJpZXMgdG8geW91ciBsaXN0IG9mIGZhdm9yaXRlcy48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPjxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08L29sPgotPC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+V2hlbiB5b3UgYXJlIHJlYWR5IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlLAotYWRkIGEgcHJvZHVjdGlvbiByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiBJbiBvcmRlciB0byBwdWJsaXNoCi15b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBwcm9kdWN0aW9uIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdAotcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkuIFRoZSByZWdpc3RyeSB3aWxsIHByb3ZpZGUgaW5zdHJ1Y3Rpb25zIGZvciByZWdpc3RlcmluZy4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHJlZ2lzdHJpZXMsIHJlZmVyIHRvICA8YSBocmVmPSJ0cmVnLmh0bWwiPlJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeTwvYT4uPC9wPgotPHA+VGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgaXMgYSBzZXQgb2YgZ2xvYmFsCi1yZXBsaWNhdGVkIHJlZ2lzdHJpZXMuIEZvciBhIGxpc3Qgb2YgcHVibGljIHJlZ2lzdHJpZXMgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cuVURESS5vcmcvcmVnaXN0ZXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sPC9hPjwvcD4KLTxwPlRoZSBJQk08c3VwPsKuPC9zdXA+IFVEREkgQnVzaW5lc3MKLVJlZ2lzdHJ5IGlzIGEgcHVibGljIHByb2R1Y3Rpb24gcmVnaXN0cnkgbWFpbnRhaW5lZCBieSBJQk0uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBJQk0gVURESSBCdXNpbmVzcwotUmVnaXN0cnkgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly91ZGRpLmlibS5jb20iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vdWRkaS5pYm0uY29tPC9hPjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+VG8gYWRkIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIEZhdm9yaXRlcywKLWRvIHRoZSBmb2xsb3dpbmc6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmF2b3JpdGVzPC9zcGFuPiBpY29uICA8aW1nIHNyYz0iLi4vaW1hZ2VzL2Zhdi5naWYiIGFsdD0iUGljdHVyZSBvZiB0aGUgRmF2b3JpdGVzIGljb24uIiAvPiBpbiB0aGUgbWFpbiB0b29sYmFyLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+RXhwYW5kICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GYXZvcml0ZSBVRERJIFJlZ2lzdHJpZXM8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgYSByZWdpc3RyeSB0aGVuIGNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIHRvIFVEREkgUGFnZTwvc3Bhbj4gaWNvbgotIDxpbWcgc3JjPSIuLi9pbWFnZXMvYWRkdWRkaS5naWYiIGFsdD0iUGljdHVyZSBvZiB0aGUgQWRkIHRvIFVEREkgUGFnZSBpY29uLiIgLz4gaW4gdGhlIEFjdGlvbnMgcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpPjxzcGFuPlRvIGFkZCBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgbWFudWFsbHksIGRvIHRoZQotZm9sbG93aW5nOjwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaT48c3Bhbj5JbiB0aGUgVURESSBOYXZpZ2F0b3IgcGFuZSwgY2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5VRERJIE1haW48L3NwYW4+IG5vZGUuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUsIGVudGVyIHRoZSBSZWdpc3RyeSBuYW1lIGFuZCBJbnF1aXJ5IFVSTAotb2YgdGhlIHJlZ2lzdHJ5IHlvdSB3YW50IHRvIGFkZC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5OGRhNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YXNzZXJ0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGFzc2VydCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5NYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhIHdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eQotc3RydWN0dXJlcy4mbmJzcDsgVGhlIHB1Ymxpc2hlciBhc3NlcnRpb24gZGVmaW5lcyBhIGdyb3VwIG9mIGJ1c2luZXNzRW50aXR5Ci1zdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4KLUEgcHVibGlzaGVyIGFzc2VydGlvbiBhbGxvd3MgZm9yIGFzc29jaWF0aW9ucyB0byBiZSBmb3JtZWQgYmV0d2VlbiBzZXZlcmFsCi1idXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBGb3IgZXhhbXBsZSwgYSBsYXJnZSBjb21wYW55IG1heSBoYXZlIHNldmVyYWwgc3Vic2lkaWFyaWVzCi10aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsIGNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0bwotbWFrZSB0aGVpciByZWxhdGlvbnNoaXBzIHZpc2libGUgaW4gVURESSByZWdpc3RyaWVzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5VRERJPGluZGV4dGVybT5tYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0YWRkcmVnLmRpdGEiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHB1Ymxpc2hlciBhc3NlcnRpb25zLCByZWZlciB0byB0aGUgIDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIgc2NvcGU9ImV4dGVybmFsIj5VRERJIFZlcnNpb24KLTIuMCBQcm9ncmFtbWVyJ3MgQVBJIFNwZWNpZmljYXRpb248L3hyZWY+IGFuZCB0aGUgIDx4cmVmIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIgotc2NvcGU9ImV4dGVybmFsIj5VRERJIFZlcnNpb24gMi4wIERhdGEgU3RydWN0dXJlIFNwZWNpZmljYXRpb248L3hyZWY+LjwvcD48cD5UbwotbWFuYWdlIHB1Ymxpc2hlciBhc3NlcnRpb25zLCBkbyB0aGUgZm9sbG93aW5nOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcyBlbnRpdHkgZm9yIHdoaWNoIHlvdQotd2FudCB0byBtYW5hZ2UgcmVmZXJlbmNlZCBidXNpbmVzc2VzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDx1aWNvbnRyb2w+TWFuYWdlIFB1Ymxpc2hlcgotQXNzZXJ0aW9uczwvdWljb250cm9sPiBpY29uICA8aW1hZ2UgYWx0PSJQaWN0dXJlIG9mIHRoZSBNYW5hZ2UgUHVibGlzaGVyIEFzc2VydGlvbnMgaWNvbi4iCi1ocmVmPSIuLi9pbWFnZXMvYnVzYXNzdC5naWYiPjwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+T24gdGhlIE1hbmFnZSBQdWJsaXNoZXIgQXNzZXJ0aW9ucyBwYWdlIHlvdSBjYW4gYWRkLCByZW1vdmUsIGFuZAotbWFpbnRhaW4gcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGJ1c2luZXNzIGVudGl0aWVzLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8dWljb250cm9sPkltcG9ydGFudDo8L3VpY29udHJvbD4gQSBidXNpbmVzcyBlbnRpdHkgdGhhdCBpcyByZWZlcmVuY2VkCi1ieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eSBtdXN0IGluIHR1cm4gcmVmZXJlbmNlIHRoYXQgYnVzaW5lc3MgZW50aXR5IGluCi1vcmRlciB0byBtYWtlIHRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIHB1YmxpYy4gQSBvbmUtd2F5IHJlZmVyZW5jZSBpcyBjb25zaWRlcmVkCi1hbiBpbmNvbXBsZXRlIHB1Ymxpc2hlciBhc3NlcnRpb24gYW5kIGlzIHZpc2libGUgb25seSB0byB0aGUgb3duZXIgb2YgdGhlCi1idXNpbmVzcyBlbnRpdHkuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFiMTc2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9Ik1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhIHdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLsKgIFRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGRlZmluZXMgYSBncm91cCBvZiBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4gQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgYXNzb2NpYXRpb25zIHRvIGJlIGZvcm1lZCBiZXR3ZWVuIHNldmVyYWwgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gRm9yIGV4YW1wbGUsIGEgbGFyZ2UgY29tcGFueSBtYXkgaGF2ZSBzZXZlcmFsIHN1YnNpZGlhcmllcyB0aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsIGNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0byBtYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhIHdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLsKgIFRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGRlZmluZXMgYSBncm91cCBvZiBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4gQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgYXNzb2NpYXRpb25zIHRvIGJlIGZvcm1lZCBiZXR3ZWVuIHNldmVyYWwgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gRm9yIGV4YW1wbGUsIGEgbGFyZ2UgY29tcGFueSBtYXkgaGF2ZSBzZXZlcmFsIHN1YnNpZGlhcmllcyB0aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsIGNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0byBtYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgbWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBtYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRyZWcuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGFzc2VydCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPk1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YXNzZXJ0Ij48YSBuYW1lPSJ0YXNzZXJ0Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5NYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvaDE+Ci0KLQotCi08ZGl2PjxwPkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhIHdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eQotc3RydWN0dXJlcy7CoCBUaGUgcHVibGlzaGVyIGFzc2VydGlvbiBkZWZpbmVzIGEgZ3JvdXAgb2YgYnVzaW5lc3NFbnRpdHkKLXN0cnVjdHVyZXMuIE1hbnkgYnVzaW5lc3NlcyBhcmUgbm90IGVmZmVjdGl2ZWx5IHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGJ1c2luZXNzRW50aXR5LgotQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgYXNzb2NpYXRpb25zIHRvIGJlIGZvcm1lZCBiZXR3ZWVuIHNldmVyYWwKLWJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIEZvciBleGFtcGxlLCBhIGxhcmdlIGNvbXBhbnkgbWF5IGhhdmUgc2V2ZXJhbCBzdWJzaWRpYXJpZXMKLXRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVzY3JpcHRpb25zIGJ1dCBhcmUgc3RpbGwgY2xvc2VseSBjb3VwbGVkIGFuZCB3YW50IHRvCi1tYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48YSBocmVmPSJ0cmVnLmh0bWwiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRhZGRyZWcuaHRtbCI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcHVibGlzaGVyIGFzc2VydGlvbnMsIHJlZmVyIHRvIHRoZSAgPGEgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9zcGVjaWZpY2F0aW9uLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5VRERJIFZlcnNpb24gMi4wIFByb2dyYW1tZXIncyBBUEkgU3BlY2lmaWNhdGlvbjwvYT4gYW5kIHRoZSAgPGEgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9zcGVjaWZpY2F0aW9uLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5VRERJIFZlcnNpb24gMi4wIERhdGEgU3RydWN0dXJlIFNwZWNpZmljYXRpb248L2E+LjwvcD4KLTxwPlRvCi1tYW5hZ2UgcHVibGlzaGVyIGFzc2VydGlvbnMsIGRvIHRoZSBmb2xsb3dpbmc6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5IGZvciB3aGljaCB5b3UKLXdhbnQgdG8gbWFuYWdlIHJlZmVyZW5jZWQgYnVzaW5lc3Nlcy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5NYW5hZ2UgUHVibGlzaGVyCi1Bc3NlcnRpb25zPC9zcGFuPiBpY29uICA8aW1nIHNyYz0iLi4vaW1hZ2VzL2J1c2Fzc3QuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIE1hbmFnZSBQdWJsaXNoZXIgQXNzZXJ0aW9ucyBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5PbiB0aGUgTWFuYWdlIFB1Ymxpc2hlciBBc3NlcnRpb25zIHBhZ2UgeW91IGNhbiBhZGQsIHJlbW92ZSwgYW5kCi1tYWludGFpbiByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgYnVzaW5lc3MgZW50aXRpZXMuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbXBvcnRhbnQ6PC9zcGFuPiBBIGJ1c2luZXNzIGVudGl0eSB0aGF0IGlzIHJlZmVyZW5jZWQKLWJ5IGFub3RoZXIgYnVzaW5lc3MgZW50aXR5IG11c3QgaW4gdHVybiByZWZlcmVuY2UgdGhhdCBidXNpbmVzcyBlbnRpdHkgaW4KLW9yZGVyIHRvIG1ha2UgdGhlIHB1Ymxpc2hlciBhc3NlcnRpb24gcHVibGljLiBBIG9uZS13YXkgcmVmZXJlbmNlIGlzIGNvbnNpZGVyZWQKLWFuIGluY29tcGxldGUgcHVibGlzaGVyIGFzc2VydGlvbiBhbmQgaXMgdmlzaWJsZSBvbmx5IHRvIHRoZSBvd25lciBvZiB0aGUKLWJ1c2luZXNzIGVudGl0eS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJrbXJrLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YmttcmsuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkYzY5MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YmttcmsuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YmttcmsiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+QWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsCi1XU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+QWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZQotaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5Zb3UgY2FuIGFkZCBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UKLWludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBGYXZvcml0ZXMgaWYKLXlvdSBwbGFuIHRvIGFjY2VzcyB0aGVtIGluIHRoZSBmdXR1cmUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBTZXJ2aWNlIEV4cGxvcmVyPGluZGV4dGVybT5hZGRpbmcgRmF2b3JpdGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTSUw8aW5kZXh0ZXJtPmFkZGluZyB0byBGYXZvcml0ZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPmFkZGluZwotdG8gRmF2b3JpdGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZTogIDx1bD4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC91bD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPlRvIGFkZCBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwKLVdTSUwsIG9yIFdTREwgdG8gRmF2b3JpdGVzIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+TmF2aWdhdGUgdGhyb3VnaCB0aGUgcmVnaXN0cnkgaGllcmFyY2h5IHRvIGZpbmQgdGhlIHJlZ2lzdHJ5LCBidXNpbmVzcwotZW50aXR5LCBXZWIgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2Ugb3IgdGhlIFdTSUwgcGFnZSB0byBmaW5kIHRoZSBXU0lMIG9yCi1XU0RMIHNlcnZpY2UgeW91IHdhbnQgdG8gYWRkIHRvIEZhdm9yaXRlcy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsCi1vciBXU0RMIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBpY29uIGJhciwgY2xpY2sgdGhlICA8dWljb250cm9sPkFkZCB0byBmYXZvcml0ZXM8L3VpY29udHJvbD4gaWNvbgotIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIEFkZCB0byBmYXZvcml0ZXMgaWNvbi4iIGhyZWY9Ii4uL2ltYWdlcy9hZGRmYXYuZ2lmIj4KLTwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPkFueSBmYXZvcml0ZXMgdGhhdCB5b3UgYWRkIGFyZSBzYXZlZCBieSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi10byZuYnNwOzwvcD48cD4gPHZhcm5hbWU+WDwvdmFybmFtZT46XHdvcmtzcGFjZVwubWV0YWRhdGFcLnBsdWdpbnNcY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3JlclxmYXZvcml0ZXMud3NpbDwvcD48cD5XaGVyZQotIDx2YXJuYW1lPlg8L3Zhcm5hbWU+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91ciB3b3Jrc3BhY2UgZm9sZGVyIGlzIGxvY2F0ZWQuCi1JZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgcHJvZHVjdCwgeW91ciBmYXZvcml0ZXMKLXdpbGwgYmUgYXV0b21hdGljYWxseSBtaWdyYXRlZCB0byB0aGlzIGxvY2F0aW9uLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHJlZy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Ria21yay5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJrbXJrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDZjZjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJrbXJrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJZb3UgY2FuIGFkZCBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIEZhdm9yaXRlcyBpZiB5b3UgcGxhbiB0byBhY2Nlc3MgdGhlbSBpbiB0aGUgZnV0dXJlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJZb3UgY2FuIGFkZCBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIEZhdm9yaXRlcyBpZiB5b3UgcGxhbiB0byBhY2Nlc3MgdGhlbSBpbiB0aGUgZnV0dXJlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBTZXJ2aWNlIEV4cGxvcmVyLCBhZGRpbmcgRmF2b3JpdGVzLCBXU0lMLCBhZGRpbmcgdG8gRmF2b3JpdGVzLCBXU0RMLCBhZGRpbmcgdG8gRmF2b3JpdGVzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIFNlcnZpY2UgRXhwbG9yZXIsIGFkZGluZyBGYXZvcml0ZXMsIFdTSUwsIGFkZGluZyB0byBGYXZvcml0ZXMsIFdTREwsIGFkZGluZyB0byBGYXZvcml0ZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cmVnLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRia21yayIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UKLWludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGJrbXJrIj48YSBuYW1lPSJ0YmttcmsiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLAotV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+WW91IGNhbiBhZGQgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlCi1pbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIgRmF2b3JpdGVzIGlmCi15b3UgcGxhbiB0byBhY2Nlc3MgdGhlbSBpbiB0aGUgZnV0dXJlLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlOiAgPHVsPgotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gYWRkIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLAotV1NJTCwgb3IgV1NETCB0byBGYXZvcml0ZXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk5hdmlnYXRlIHRocm91Z2ggdGhlIHJlZ2lzdHJ5IGhpZXJhcmNoeSB0byBmaW5kIHRoZSByZWdpc3RyeSwgYnVzaW5lc3MKLWVudGl0eSwgV2ViIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlIG9yIHRoZSBXU0lMIHBhZ2UgdG8gZmluZCB0aGUgV1NJTCBvcgotV1NETCBzZXJ2aWNlIHlvdSB3YW50IHRvIGFkZCB0byBGYXZvcml0ZXMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLAotb3IgV1NETCBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgaWNvbiBiYXIsIGNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIHRvIGZhdm9yaXRlczwvc3Bhbj4gaWNvbgotIDxpbWcgc3JjPSIuLi9pbWFnZXMvYWRkZmF2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBBZGQgdG8gZmF2b3JpdGVzIGljb24uIiAvPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+QW55IGZhdm9yaXRlcyB0aGF0IHlvdSBhZGQgYXJlIHNhdmVkIGJ5IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLXRvwqA8L3A+Ci08cD4gPHZhciBjbGFzcz0idmFybmFtZSI+WDwvdmFyPjpcd29ya3NwYWNlXC5tZXRhZGF0YVwucGx1Z2luc1xjb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyXGZhdm9yaXRlcy53c2lsPC9wPgotPHA+V2hlcmUKLSA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5YPC92YXI+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91ciB3b3Jrc3BhY2UgZm9sZGVyIGlzIGxvY2F0ZWQuCi1JZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgcHJvZHVjdCwgeW91ciBmYXZvcml0ZXMKLXdpbGwgYmUgYXV0b21hdGljYWxseSBtaWdyYXRlZCB0byB0aGlzIGxvY2F0aW9uLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YnVzcHJvai5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJ1c3Byb2ouZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRjNWQ1NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YnVzcHJvai5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRidXNwcm9qIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPk1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5BIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzIGEgYnVzaW5lc3MgZW50aXR5IHRvIHJlZmVyZW5jZSBhIHNlcnZpY2UKLXRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eS4gQnkgdXNpbmcgdGhlIGJ1c2luZXNzU2VydmljZQotc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5IHB1Ymxpc2hlZCBidXNpbmVzc1NlcnZpY2UsIGJ1c2luZXNzZXMKLWNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy4mbmJzcDsgU2VydmljZSBwcm9qZWN0aW9ucyBhcmUgbWFuYWdlZCBjZW50cmFsbHkKLWFzIHBhcnQgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5Ljwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPm1hbmFnaW5nIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPm1hbmFnaW5nIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0YWRkcmVnLmRpdGEiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHJlZmVyZW5jZWQgc2VydmljZXMsIHJlZmVyIHRvIHRoZSAgPHhyZWYKLWhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIiBzY29wZT0iZXh0ZXJuYWwiPlVEREkgVmVyc2lvbgotMi4wIFByb2dyYW1tZXIncyBBUEkgU3BlY2lmaWNhdGlvbjwveHJlZj4gYW5kIHRoZSAgPHhyZWYgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9zcGVjaWZpY2F0aW9uLmh0bWwiCi1zY29wZT0iZXh0ZXJuYWwiPlVEREkgVmVyc2lvbiAyLjAgRGF0YSBTdHJ1Y3R1cmUgU3BlY2lmaWNhdGlvbjwveHJlZj4uPC9wPjxwPlRvCi1tYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlcywgZG8gdGhlIGZvbGxvd2luZzo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5IGZvciB3aGljaCB5b3UKLXdhbnQgdG8gbWFuYWdlIHJlZmVyZW5jZWQgc2VydmljZXMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPHVpY29udHJvbD5NYW5hZ2UgUmVmZXJlbmNlZAotU2VydmljZXM8L3VpY29udHJvbD4gaWNvbiAgPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgTWFuYWdlIFJlZmVyZW5jZWQgU2VydmljZXMgaWNvbi4iCi1ocmVmPSIuLi9pbWFnZXMvcmVmc2Vydi5naWYiPjwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+T24gdGhlIE1hbmFnZSBSZWZlcmVuY2VkIFNlcnZpY2VzIHBhZ2UgeW91IGNhbiBhZGQsIHJlbW92ZSwgYW5kCi1tYWludGFpbiBzZXJ2aWNlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHJlZy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RidXNwcm9qLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YnVzcHJvai5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjI0MGUzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RidXNwcm9qLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJNYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgc2VydmljZSBwcm9qZWN0aW9uIGVuYWJsZXMgYSBidXNpbmVzcyBlbnRpdHkgdG8gcmVmZXJlbmNlIGEgc2VydmljZSB0aGF0IHdhcyBwdWJsaXNoZWQgYnkgYW5vdGhlciBidXNpbmVzcyBlbnRpdHkuIEJ5IHVzaW5nIHRoZSBidXNpbmVzc1NlcnZpY2Ugc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5IHB1Ymxpc2hlZCBidXNpbmVzc1NlcnZpY2UsIGJ1c2luZXNzZXMgY2FuIHNoYXJlIG9yIHJldXNlIHNlcnZpY2VzLsKgIFNlcnZpY2UgcHJvamVjdGlvbnMgYXJlIG1hbmFnZWQgY2VudHJhbGx5IGFzIHBhcnQgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzIGEgYnVzaW5lc3MgZW50aXR5IHRvIHJlZmVyZW5jZSBhIHNlcnZpY2UgdGhhdCB3YXMgcHVibGlzaGVkIGJ5IGFub3RoZXIgYnVzaW5lc3MgZW50aXR5LiBCeSB1c2luZyB0aGUgYnVzaW5lc3NTZXJ2aWNlIHN0cnVjdHVyZSBhcyBhIHByb2plY3Rpb24gdG8gYW4gYWxyZWFkeSBwdWJsaXNoZWQgYnVzaW5lc3NTZXJ2aWNlLCBidXNpbmVzc2VzIGNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy7CoCBTZXJ2aWNlIHByb2plY3Rpb25zIGFyZSBtYW5hZ2VkIGNlbnRyYWxseSBhcyBwYXJ0IG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eS4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIG1hbmFnaW5nIHNlcnZpY2VzLCBVRERJIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBtYW5hZ2luZyBzZXJ2aWNlcywgVURESSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRyZWcuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGJ1c3Byb2oiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5NYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YnVzcHJvaiI+PGEgbmFtZT0idGJ1c3Byb2oiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPk1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXM8L2gxPgotCi0KLQotPGRpdj48cD5BIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzIGEgYnVzaW5lc3MgZW50aXR5IHRvIHJlZmVyZW5jZSBhIHNlcnZpY2UKLXRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eS4gQnkgdXNpbmcgdGhlIGJ1c2luZXNzU2VydmljZQotc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5IHB1Ymxpc2hlZCBidXNpbmVzc1NlcnZpY2UsIGJ1c2luZXNzZXMKLWNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy7CoCBTZXJ2aWNlIHByb2plY3Rpb25zIGFyZSBtYW5hZ2VkIGNlbnRyYWxseQotYXMgcGFydCBvZiB0aGUgcmVmZXJlbmNpbmcgYnVzaW5lc3NFbnRpdHkuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48YSBocmVmPSJ0cmVnLmh0bWwiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRhZGRyZWcuaHRtbCI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcmVmZXJlbmNlZCBzZXJ2aWNlcywgcmVmZXIgdG8gdGhlICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlVEREkgVmVyc2lvbiAyLjAgUHJvZ3JhbW1lcidzIEFQSSBTcGVjaWZpY2F0aW9uPC9hPiBhbmQgdGhlICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlVEREkgVmVyc2lvbiAyLjAgRGF0YSBTdHJ1Y3R1cmUgU3BlY2lmaWNhdGlvbjwvYT4uPC9wPgotPHA+VG8KLW1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzLCBkbyB0aGUgZm9sbG93aW5nOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzIGVudGl0eSBmb3Igd2hpY2ggeW91Ci13YW50IHRvIG1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk1hbmFnZSBSZWZlcmVuY2VkCi1TZXJ2aWNlczwvc3Bhbj4gaWNvbiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9yZWZzZXJ2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBNYW5hZ2UgUmVmZXJlbmNlZCBTZXJ2aWNlcyBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5PbiB0aGUgTWFuYWdlIFJlZmVyZW5jZWQgU2VydmljZXMgcGFnZSB5b3UgY2FuIGFkZCwgcmVtb3ZlLCBhbmQKLW1haW50YWluIHNlcnZpY2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTU5ZjdmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGRpc2NvdiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5EaXNjb3ZlcmluZyBXZWIgU2VydmljZXM8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5EaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIFdlYiBzZXJ2aWNlczwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+V2ViIHNlcnZpY2VzIGNhbiBiZSBsb2NhdGVkIHRocm91Z2ggYSBwdWJsaWMgYnVzaW5lc3MgcmVnaXN0cnksCi1hIHByaXZhdGUgYnVzaW5lc3MgcmVnaXN0cnksIG9yIGEgV1NJTCBkb2N1bWVudC4gVURESSBtYW5hZ2VzIHRoZSBkaXNjb3ZlcnkKLW9mIFdlYiBzZXJ2aWNlcyBieSByZWx5aW5nIG9uIGEgZGlzdHJpYnV0ZWQgcmVnaXN0cnkgb2YgYnVzaW5lc3NlcyBhbmQgdGhlaXIKLXNlcnZpY2UgZGVzY3JpcHRpb25zIGltcGxlbWVudGVkIGluIGEgY29tbW9uIFhNTCBmb3JtYXQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+ZGlzY292ZXJpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+VURESTxpbmRleHRlcm0+ZGlzY292ZXJpbmcgV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTSUw8aW5kZXh0ZXJtPmRpc2NvdmVyaW5nIFdlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPjxwPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0YWRkcmVnLmRpdGEiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC9vbD48L3A+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeQotbWVjaGFuaXNtIHRoYXQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gVURESSBhcyB3ZWxsIGFzIGNvbXBsZW1lbnRhcnkgdG8gVURESS4KLVdTSUwgYWxsb3dzIHlvdSB0byBnbyBkaXJlY3RseSB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgYXNrIGZvciB0aGUgc2VydmljZXMKLWl0IHByb3ZpZGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UKLXNwZWNpZmljYXRpb24sIHJlZmVyIHRvICA8eHJlZiBocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+IHd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwveHJlZj4uCi0gLjwvcD48cD5Zb3UgY2FuIGRpc2NvdmVyIGEgV2ViIHNlcnZpY2UgaW4gdHdvIHdheXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI6PC9wPjwvY29udGV4dD4KLTxyZXN1bHQ+PHVsPgotPGxpPiA8eHJlZiBocmVmPSIjdGRpc2Nvdi9kaXNjb3Zlcl9mcm9tX3VkZGkiPkRpc2NvdmVyaW5nIGEgV2ViIHNlcnZpY2UgZnJvbQotYSBVRERJIHJlZ2lzdHJ5PC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSIjdGRpc2Nvdi9kaXNjb3Zlcl9mcm9tX3dzaWwiPkRpc2NvdmVyaW5nIGEgV2ViIHNlcnZpY2UgZnJvbQotYSBXU0lMIGRvY3VtZW50PC94cmVmPiA8L2xpPgotPC91bD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iZGlzY292ZXJfZnJvbV91ZGRpIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPiBEaXNjb3ZlcmluZyBhIFdlYiBTZXJ2aWNlIGZyb20gYSBVRERJIFJlZ2lzdHJ5PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZSByZWdpc3RyeSBjb250YWlucyBVUkwgcmVmZXJlbmNlcyB0byBXZWIgc2VydmljZSBXU0RMIGRvY3VtZW50cy4KLUluIG9yZGVyIHRvIGRpc2NvdmVyIGEgV2ViIHNlcnZpY2UgdGhlIFVSTCB0byB0aGUgV2ViIHNlcnZpY2UgV1NETCBkb2N1bWVudAotbXVzdCBiZSByZXNvbHZhYmxlLiBUbyBsb2NhdGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPlVEREkgTWFpbjwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUgc2VsZWN0IGEgcmVnaXN0cnkgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3QgYW5kCi1jbGljayA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyIGNsaWNrIHRoZSAgPGI+RmluZDwvYj4gaWNvbiAgPGltYWdlCi1hbHQ9IkEgcGljdHVyZSBvZiB0aGUgRmluZCBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL2ZpbmQuZ2lmIj48L2ltYWdlPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSwgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIHF1ZXJ5LCB3aGF0IHlvdSBhcmUKLXNlYXJjaGluZyBmb3IsIHRoZSB0eXBlIG9mIHNlYXJjaCB0aGF0IHlvdSB3YW50IHRvIHBlcmZvcm0sIGFuZCBhbnkgcXVlcnkKLWluZm9ybWF0aW9uOiA8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+IDxiPlNlYXJjaCBmb3I8L2I+Jm5ic3A7IFRoaXMgbGlzdCBhbGxvd3MgeW91IHRvIHNlYXJjaCBmb3IKLWJ1c2luZXNzZXMsIHNlcnZpY2VzLCBvciBzZXJ2aWNlIGludGVyZmFjZXMuIDwvY21kPjxpbmZvPjx1bD4KLTxsaT4gPGI+QnVzaW5lc3NlczwvYj4gT25jZSB5b3UgbG9jYXRlIGEgYnVzaW5lc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlCi1pY29ucyBpbiB0aGUgQWN0aW9uIHBhbmUgdG9vbGJhciB0byBkbyB0aGUgZm9sbG93aW5nOjx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IGJ1c2luZXNzIGRldGFpbHM8L2xpPgotPGxpPkdldCB0aGUgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgYnVzaW5lc3M8L2xpPgotPGxpPlB1Ymxpc2ggYSBzZXJ2aWNlPC9saT4KLTxsaT5NYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlczwvbGk+Ci08bGk+TWFuYWdlIHB1Ymxpc2hlciBhc3NlcnRpb25zPC9saT4KLTxsaT5BZGQgdGhlIGJ1c2luZXNzIHRvIEZhdm9yaXRlczwvbGk+Ci08bGk+VW5wdWJsaXNoIHRoZSBidXNpbmVzczwvbGk+Ci08L3VsPjwvbGk+Ci08bGk+IDxiPlNlcnZpY2VzPC9iPiBPbmNlIHlvdSBsb2NhdGUgYSBzZXJ2aWNlIGluIHRoZSByZWdpc3RyeSwgdXNlIHRoZSBpY29ucwotaW4gdGhlIEFjdGlvbiBwYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzogPHVsPgotPGxpPlZpZXcgYW5kIGVkaXQgc2VydmljZSBkZXRhaWxzPC9saT4KLTxsaT5HZXQgdGhlIGJ1c2luZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2U8L2xpPgotPGxpPkdldCB0aGUgc2VydmljZSBpbnRlcmZhY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2U8L2xpPgotPGxpPkltcG9ydCB0aGUgc2VydmljZSBXU0RMIGZpbGUgdG8gdGhlIEVjbGlwc2Ugd29ya2JlbmNoPC9saT4KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgV1NETCBmaWxlIHRvIHRoZSBmaWxlIHN5c3RlbTwvbGk+Ci08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSB3aXphcmRzPC9saT4KLTxsaT5BZGQgdGhlIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC9saT4KLTxsaT5VbnB1Ymxpc2ggdGhlIHNlcnZpY2U8L2xpPgotPC91bD48L2xpPgotPGxpPiA8Yj5TZXJ2aWNlIGludGVyZmFjZXM8L2I+IE9uY2UgeW91IGxvY2F0ZSBhIHNlcnZpY2UgaW50ZXJmYWNlIGluIHRoZQotcmVnaXN0cnksIHVzZSB0aGUgaWNvbnMgaW4gdGhlIEFjdGlvbiBwYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzogPHVsPgotPGxpPlZpZXcgYW5kIGVkaXQgaW50ZXJmYWNlIGRldGFpbHM8L2xpPgotPGxpPkdldCB0aGUgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotPGxpPkdldCB0aGUgYnVzaW5lc3NlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBzZXJ2aWNlIGludGVyZmFjZTwvbGk+Ci08bGk+SW1wb3J0IHRoZSBzZXJ2aWNlIGludGVyZmFjZSBXU0RMIGZpbGUgdG8gdGhlIEVjbGlwc2Ugd29ya2JlbmNoPC9saT4KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIFdTREwgZmlsZSB0byB0aGUgZmlsZSBzeXN0ZW08L2xpPgotPGxpPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2Ugd2l6YXJkczwvbGk+Ci08bGk+QWRkIHRoZSBzZXJ2aWNlIGludGVyZmFjZSB0byBGYXZvcml0ZXM8L2xpPgotPGxpPlVucHVibGlzaCB0aGUgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotPC91bD48L2xpPgotPC91bD48L2luZm8+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD4gPGI+VHlwZSBvZiBzZWFyY2g8L2I+Jm5ic3A7IFRoZXNlIHJhZGlvIGJ1dHRvbnMgYWxsb3cgeW91IHRvCi1zcGVjaWZ5IGEgc2ltcGxlIG9yIGFkdmFuY2VkIHNlYXJjaCwgb3IgYSBzZWFyY2ggYnkgYSBVbml2ZXJzYWwgVW5pcXVlIElkZW50aWZpZXIKLShVVUlEKS4gPC9jbWQ+PGluZm8+PGRsPjxkbGVudHJ5PgotPGR0PlNpbXBsZTwvZHQ+Ci08ZGQ+VHlwZSB0aGUgbmFtZSBvZiB0aGUgYnVzaW5lc3Nlcywgc2VydmljZXMsIG9yIHNlcnZpY2UgaW50ZXJmYWNlcyBmb3Igd2hpY2gKLXlvdSBhcmUgc2VhcmNoaW5nLiAgPGI+Tm90ZTo8L2I+IFRoZSBzZWFyY2ggc2V0IHNpemUgaXMgc2V0IHRvIDEwMCBhbmQgdGhlCi1tYXhpbXVtIG51bWJlciBvZiByZXR1cm5lZCByZXN1bHRzIGlzIHNldCB0byAxMCBieSBkZWZhdWx0LiZuYnNwOyBJZiB5b3Ugd291bGQKLWxpa2UgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLCB1c2UgdGhlIEFkdmFuY2VkIHNlYXJjaC48L2RkPgotPC9kbGVudHJ5PjxkbGVudHJ5PgotPGR0PkFkdmFuY2VkIDwvZHQ+Ci08ZGQ+QWxsb3dzIHlvdSB0byBlbnRlciBtb3JlIHNlYXJjaCBvcHRpb25zIHRvIGZvY3VzIHRoZSBzY29wZSBvZiB5b3VyIHNlYXJjaC4KLVNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd291bGQgbGlrZSB0byBzZWFyY2ggZm9yIG11bHRpcGxlIGJ1c2luZXNzZXMgb3IKLXNlcnZpY2VzLjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnk+Ci08ZHQ+VVVJRCA8L2R0PgotPGRkPkFsbG93IHlvdSB0byBlbnRlciB0aGUgVVVJRCBrZXkuIFRoZSBVVUlEIGtleSBpcyB0aGUgaWRlbnRpZmllciB0aGF0IGlzCi1hc3NvY2lhdGVkIHdpdGggdGhlIHB1Ymxpc2hlZCBvYmplY3QuPC9kZD4KLTwvZGxlbnRyeT48L2RsPjwvaW5mbz48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5PbmNlIHlvdSBoYXZlIHNlYXJjaGVkIGFuZCBkaXNjb3ZlcmVkIHRoZSBidXNpbmVzcyBzZXJ2aWNlIGRlc2NyaXB0aW9uCi15b3UgZGVzaXJlZCwgc2VsZWN0IHRoZSBzZXJ2aWNlIG9yIHRoZSBzZXJ2aWNlIGludGVyZmFjZSBhbmQgY2xpY2sgdGhlICA8Yj5JbXBvcnQ8L2I+IGljb24KLXRvOiA8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT5pbXBvcnQgdGhlIFdTREwgZG9jdW1lbnQgaW50byB5b3VyIFdlYiBwcm9qZWN0PC9jaG9pY2U+Ci08Y2hvaWNlPmltcG9ydCB0aGUgV1NETCBkb2N1bWVudCBpbnRvIHRoZSBXU0RMIEV4cGxvcmVyIGZvciB0ZXN0aW5nPC9jaG9pY2U+Ci08Y2hvaWNlPmxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgU2tlbGV0b24gQ3JlYXRpb24gd2l6YXJkIG9yIFdlYiBTZXJ2aWNlIENsaWVudAotd2l6YXJkIGRpcmVjdGx5IGZyb20gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L2Nob2ljZT4KLTwvY2hvaWNlcz4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImRpc2NvdmVyX2Zyb21fd3NpbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT4gRGlzY292ZXJpbmcgYSBXZWIgU2VydmljZSBmcm9tIGEgV1NJTCBEb2N1bWVudDwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsb2NhdGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkZyb20gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0b29sYmFyLCBjbGljayB0aGUgIDxiPldTSUwgUGFnZTwvYj4gaWNvbgotIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIFdTSUwgUGFnZSBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL3dzaWx2aWV3LmdpZiI+Ci08L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgY2xpY2sgIDxiPldTSUwgTWFpbjwvYj4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgIDxiPlVSTCB0byBkb2N1bWVudDwvYj4gZmllbGQgb2YgdGhlIEFjdGlvbnMgcGFuZSBlbnRlcgotdGhlIFVSTCB0byB0aGUgV1NJTCBkb2N1bWVudCBvciBIVFRQIGRvY3VtZW50IHRoYXQgY29udGFpbnMgbGlua3MgdG8gYSBXU0lMCi1kb2N1bWVudC4gRGV0YWlscyBvbiBob3cgYW4gSFRUUCBmaWxlIGNhbiBjb250YWluIGxpbmtzIHRvIFdTSUwgY2FuIGJlIGZvdW5kCi1oZXJlOiBodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPk9uY2UgeW91IGhhdmUgbG9jYXRlZCB0aGUgV1NJTCBkb2N1bWVudCwgdXNlIHRoZSBpY29ucyBpbiB0aGUgQWN0aW9uCi1wYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzo8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT5WaWV3IFdTSUwgZG9jdW1lbnQgZGV0YWlsczwvY2hvaWNlPgotPGNob2ljZT5MaXN0IGFsbCBvZiB0aGUgV1NETCBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBXU0lMIGRvY3VtZW50PC9jaG9pY2U+Ci08Y2hvaWNlPkxpc3QgYWxsIG9mIHRoZSBVRERJIHNlcnZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2Nob2ljZT4KLTxjaG9pY2U+TGlzdCBhbGwgb2YgdGhlIFVEREkgYnVzaW5lc3NlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBXU0lMIGRvY3VtZW50PC9jaG9pY2U+Ci08Y2hvaWNlPkxpc3QgYWxsIG9mIHRoZSBXU0lMIGxpbmtzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2Nob2ljZT4KLTxjaG9pY2U+SW1wb3J0IHRoZSBXU0lMIGRvY3VtZW50IHRvIHRoZSBmaWxlIHN5c3RlbTwvY2hvaWNlPgotPGNob2ljZT5BZGQgdGhlIFdTSUwgZG9jdW1lbnQgdG8gRmF2b3JpdGVzPC9jaG9pY2U+Ci08L2Nob2ljZXM+Ci08aW5mbz48Yj5JbXBvcnRhbnQ6PC9iPiBJZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGRvZXMgbm90IGRpc3BsYXkgdGhlCi1wcm9qZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gaW1wb3J0IHlvdXIgV1NETCBmaWxlIHRvLCBlbnN1cmUgdGhhdCB5b3UgaGF2ZQotY3JlYXRlZCB0aGUgcHJvamVjdCBhbmQvb3IgY2xpY2sgdGhlICA8Yj5SZWZyZXNoPC9iPiBpY29uLjwvaW5mbz48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHByb2R1Y3Q9IiIKLXNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ2MWViYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iRGlzY292ZXJpbmcgV2ViIFNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBjYW4gYmUgbG9jYXRlZCB0aHJvdWdoIGEgcHVibGljIGJ1c2luZXNzIHJlZ2lzdHJ5LCBhIHByaXZhdGUgYnVzaW5lc3MgcmVnaXN0cnksIG9yIGEgV1NJTCBkb2N1bWVudC4gVURESSBtYW5hZ2VzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpciBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbiBYTUwgZm9ybWF0LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGxvY2F0ZWQgdGhyb3VnaCBhIHB1YmxpYyBidXNpbmVzcyByZWdpc3RyeSwgYSBwcml2YXRlIGJ1c2luZXNzIHJlZ2lzdHJ5LCBvciBhIFdTSUwgZG9jdW1lbnQuIFVEREkgbWFuYWdlcyB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcyBieSByZWx5aW5nIG9uIGEgZGlzdHJpYnV0ZWQgcmVnaXN0cnkgb2YgYnVzaW5lc3NlcyBhbmQgdGhlaXIgc2VydmljZSBkZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGRpc2NvdmVyaW5nLCBVRERJLCBkaXNjb3ZlcmluZyBXZWIgc2VydmljZXMsIFdTSUwiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGRpc2NvdmVyaW5nLCBVRERJLCBkaXNjb3ZlcmluZyBXZWIgc2VydmljZXMsIFdTSUwiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRkaXNjb3YiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5EaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGRpc2NvdiI+PGEgbmFtZT0idGRpc2NvdiI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+RGlzY292ZXJpbmcgV2ViIFNlcnZpY2VzPC9oMT4KLQotCi0KLQotPGRpdj48cD5XZWIgc2VydmljZXMgY2FuIGJlIGxvY2F0ZWQgdGhyb3VnaCBhIHB1YmxpYyBidXNpbmVzcyByZWdpc3RyeSwKLWEgcHJpdmF0ZSBidXNpbmVzcyByZWdpc3RyeSwgb3IgYSBXU0lMIGRvY3VtZW50LiBVRERJIG1hbmFnZXMgdGhlIGRpc2NvdmVyeQotb2YgV2ViIHNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpcgotc2VydmljZSBkZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPjxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idGFkZHJlZy5odG1sIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPC9vbD4KLTwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV1NJTCBhbGxvd3MgeW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcwotaXQgcHJvdmlkZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZQotc3BlY2lmaWNhdGlvbiwgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+d3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC9hPi4KLSAuPC9wPgotPHA+WW91IGNhbiBkaXNjb3ZlciBhIFdlYiBzZXJ2aWNlIGluIHR3byB3YXlzIHVzaW5nIHRoZSBXZWIgU2VydmljZXMKLUV4cGxvcmVyOjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48dWw+Ci08bGk+IDxhIGhyZWY9IiN0ZGlzY292X19kaXNjb3Zlcl9mcm9tX3VkZGkiPkRpc2NvdmVyaW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFVEREkgcmVnaXN0cnk8L2E+IDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0iI3RkaXNjb3ZfX2Rpc2NvdmVyX2Zyb21fd3NpbCI+RGlzY292ZXJpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgV1NJTCBkb2N1bWVudDwvYT4gPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZGlzY292ZXJfZnJvbV91ZGRpIj48YSBuYW1lPSJkaXNjb3Zlcl9mcm9tX3VkZGkiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+IERpc2NvdmVyaW5nIGEgV2ViIFNlcnZpY2UgZnJvbSBhIFVEREkgUmVnaXN0cnk8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIFVSTCByZWZlcmVuY2VzIHRvIFdlYiBzZXJ2aWNlIFdTREwgZG9jdW1lbnRzLgotSW4gb3JkZXIgdG8gZGlzY292ZXIgYSBXZWIgc2VydmljZSB0aGUgVVJMIHRvIHRoZSBXZWIgc2VydmljZSBXU0RMIGRvY3VtZW50Ci1tdXN0IGJlIHJlc29sdmFibGUuIFRvIGxvY2F0ZSBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VURESSBNYWluPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgc2VsZWN0IGEgcmVnaXN0cnkgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3QgYW5kCi1jbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIgY2xpY2sgdGhlICA8c3Ryb25nPkZpbmQ8L3N0cm9uZz4gaWNvbiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9maW5kLmdpZiIgYWx0PSJBIHBpY3R1cmUgb2YgdGhlIEZpbmQgaWNvbi4iIC8+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lLCBlbnRlciB0aGUgbmFtZSBvZiB0aGUgcXVlcnksIHdoYXQgeW91IGFyZQotc2VhcmNoaW5nIGZvciwgdGhlIHR5cGUgb2Ygc2VhcmNoIHRoYXQgeW91IHdhbnQgdG8gcGVyZm9ybSwgYW5kIGFueSBxdWVyeQotaW5mb3JtYXRpb246IDwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+IDxzdHJvbmc+U2VhcmNoIGZvcjwvc3Ryb25nPsKgIFRoaXMgbGlzdCBhbGxvd3MgeW91IHRvIHNlYXJjaCBmb3IKLWJ1c2luZXNzZXMsIHNlcnZpY2VzLCBvciBzZXJ2aWNlIGludGVyZmFjZXMuIDwvc3Bhbj4gPHVsPgotPGxpPiA8c3Ryb25nPkJ1c2luZXNzZXM8L3N0cm9uZz4gT25jZSB5b3UgbG9jYXRlIGEgYnVzaW5lc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlCi1pY29ucyBpbiB0aGUgQWN0aW9uIHBhbmUgdG9vbGJhciB0byBkbyB0aGUgZm9sbG93aW5nOjx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IGJ1c2luZXNzIGRldGFpbHM8L2xpPgotCi08bGk+R2V0IHRoZSBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBidXNpbmVzczwvbGk+Ci0KLTxsaT5QdWJsaXNoIGEgc2VydmljZTwvbGk+Ci0KLTxsaT5NYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlczwvbGk+Ci0KLTxsaT5NYW5hZ2UgcHVibGlzaGVyIGFzc2VydGlvbnM8L2xpPgotCi08bGk+QWRkIHRoZSBidXNpbmVzcyB0byBGYXZvcml0ZXM8L2xpPgotCi08bGk+VW5wdWJsaXNoIHRoZSBidXNpbmVzczwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGk+IDxzdHJvbmc+U2VydmljZXM8L3N0cm9uZz4gT25jZSB5b3UgbG9jYXRlIGEgc2VydmljZSBpbiB0aGUgcmVnaXN0cnksIHVzZSB0aGUgaWNvbnMKLWluIHRoZSBBY3Rpb24gcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6IDx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IHNlcnZpY2UgZGV0YWlsczwvbGk+Ci0KLTxsaT5HZXQgdGhlIGJ1c2luZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2U8L2xpPgotCi08bGk+R2V0IHRoZSBzZXJ2aWNlIGludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZTwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgV1NETCBmaWxlIHRvIHRoZSBFY2xpcHNlIHdvcmtiZW5jaDwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgV1NETCBmaWxlIHRvIHRoZSBmaWxlIHN5c3RlbTwvbGk+Ci0KLTxsaT5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIHdpemFyZHM8L2xpPgotCi08bGk+QWRkIHRoZSBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvbGk+Ci0KLTxsaT5VbnB1Ymxpc2ggdGhlIHNlcnZpY2U8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPiA8c3Ryb25nPlNlcnZpY2UgaW50ZXJmYWNlczwvc3Ryb25nPiBPbmNlIHlvdSBsb2NhdGUgYSBzZXJ2aWNlIGludGVyZmFjZSBpbiB0aGUKLXJlZ2lzdHJ5LCB1c2UgdGhlIGljb25zIGluIHRoZSBBY3Rpb24gcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6IDx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IGludGVyZmFjZSBkZXRhaWxzPC9saT4KLQotPGxpPkdldCB0aGUgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotCi08bGk+R2V0IHRoZSBidXNpbmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2UgaW50ZXJmYWNlPC9saT4KLQotPGxpPkltcG9ydCB0aGUgc2VydmljZSBpbnRlcmZhY2UgV1NETCBmaWxlIHRvIHRoZSBFY2xpcHNlIHdvcmtiZW5jaDwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIFdTREwgZmlsZSB0byB0aGUgZmlsZSBzeXN0ZW08L2xpPgotCi08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSB3aXphcmRzPC9saT4KLQotPGxpPkFkZCB0aGUgc2VydmljZSBpbnRlcmZhY2UgdG8gRmF2b3JpdGVzPC9saT4KLQotPGxpPlVucHVibGlzaCB0aGUgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotCi08L3VsPgotPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+IDxzdHJvbmc+VHlwZSBvZiBzZWFyY2g8L3N0cm9uZz7CoCBUaGVzZSByYWRpbyBidXR0b25zIGFsbG93IHlvdSB0bwotc3BlY2lmeSBhIHNpbXBsZSBvciBhZHZhbmNlZCBzZWFyY2gsIG9yIGEgc2VhcmNoIGJ5IGEgVW5pdmVyc2FsIFVuaXF1ZSBJZGVudGlmaWVyCi0oVVVJRCkuIDwvc3Bhbj4gPGRsPgotPGR0IGNsYXNzPSJkbHRlcm0iPlNpbXBsZTwvZHQ+Ci0KLTxkZD5UeXBlIHRoZSBuYW1lIG9mIHRoZSBidXNpbmVzc2VzLCBzZXJ2aWNlcywgb3Igc2VydmljZSBpbnRlcmZhY2VzIGZvciB3aGljaAoteW91IGFyZSBzZWFyY2hpbmcuICA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBzZWFyY2ggc2V0IHNpemUgaXMgc2V0IHRvIDEwMCBhbmQgdGhlCi1tYXhpbXVtIG51bWJlciBvZiByZXR1cm5lZCByZXN1bHRzIGlzIHNldCB0byAxMCBieSBkZWZhdWx0LsKgIElmIHlvdSB3b3VsZAotbGlrZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMsIHVzZSB0aGUgQWR2YW5jZWQgc2VhcmNoLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkFkdmFuY2VkIDwvZHQ+Ci0KLTxkZD5BbGxvd3MgeW91IHRvIGVudGVyIG1vcmUgc2VhcmNoIG9wdGlvbnMgdG8gZm9jdXMgdGhlIHNjb3BlIG9mIHlvdXIgc2VhcmNoLgotU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHNlYXJjaCBmb3IgbXVsdGlwbGUgYnVzaW5lc3NlcyBvcgotc2VydmljZXMuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+VVVJRCA8L2R0PgotCi08ZGQ+QWxsb3cgeW91IHRvIGVudGVyIHRoZSBVVUlEIGtleS4gVGhlIFVVSUQga2V5IGlzIHRoZSBpZGVudGlmaWVyIHRoYXQgaXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcHVibGlzaGVkIG9iamVjdC48L2RkPgotCi08L2RsPgotPC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpPjxzcGFuPk9uY2UgeW91IGhhdmUgc2VhcmNoZWQgYW5kIGRpc2NvdmVyZWQgdGhlIGJ1c2luZXNzIHNlcnZpY2UgZGVzY3JpcHRpb24KLXlvdSBkZXNpcmVkLCBzZWxlY3QgdGhlIHNlcnZpY2Ugb3IgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIGFuZCBjbGljayB0aGUgIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+IGljb24KLXRvOiA8L3NwYW4+Ci08dWw+Ci08bGk+aW1wb3J0IHRoZSBXU0RMIGRvY3VtZW50IGludG8geW91ciBXZWIgcHJvamVjdDwvbGk+Ci0KLTxsaT5pbXBvcnQgdGhlIFdTREwgZG9jdW1lbnQgaW50byB0aGUgV1NETCBFeHBsb3JlciBmb3IgdGVzdGluZzwvbGk+Ci0KLTxsaT5sYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIFNrZWxldG9uIENyZWF0aW9uIHdpemFyZCBvciBXZWIgU2VydmljZSBDbGllbnQKLXdpemFyZCBkaXJlY3RseSBmcm9tIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9saT4KLQotPC91bD4KLQotPC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkaXNjb3Zlcl9mcm9tX3dzaWwiPjxhIG5hbWU9ImRpc2NvdmVyX2Zyb21fd3NpbCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj4gRGlzY292ZXJpbmcgYSBXZWIgU2VydmljZSBmcm9tIGEgV1NJTCBEb2N1bWVudDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsb2NhdGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkZyb20gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0b29sYmFyLCBjbGljayB0aGUgIDxzdHJvbmc+V1NJTCBQYWdlPC9zdHJvbmc+IGljb24KLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzaWx2aWV3LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBXU0lMIFBhZ2UgaWNvbi4iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgY2xpY2sgIDxzdHJvbmc+V1NJTCBNYWluPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSAgPHN0cm9uZz5VUkwgdG8gZG9jdW1lbnQ8L3N0cm9uZz4gZmllbGQgb2YgdGhlIEFjdGlvbnMgcGFuZSBlbnRlcgotdGhlIFVSTCB0byB0aGUgV1NJTCBkb2N1bWVudCBvciBIVFRQIGRvY3VtZW50IHRoYXQgY29udGFpbnMgbGlua3MgdG8gYSBXU0lMCi1kb2N1bWVudC4gRGV0YWlscyBvbiBob3cgYW4gSFRUUCBmaWxlIGNhbiBjb250YWluIGxpbmtzIHRvIFdTSUwgY2FuIGJlIGZvdW5kCi1oZXJlOiBodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5PbmNlIHlvdSBoYXZlIGxvY2F0ZWQgdGhlIFdTSUwgZG9jdW1lbnQsIHVzZSB0aGUgaWNvbnMgaW4gdGhlIEFjdGlvbgotcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6PC9zcGFuPgotPHVsPgotPGxpPlZpZXcgV1NJTCBkb2N1bWVudCBkZXRhaWxzPC9saT4KLQotPGxpPkxpc3QgYWxsIG9mIHRoZSBXU0RMIHNlcnZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2xpPgotCi08bGk+TGlzdCBhbGwgb2YgdGhlIFVEREkgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgV1NJTCBkb2N1bWVudDwvbGk+Ci0KLTxsaT5MaXN0IGFsbCBvZiB0aGUgVURESSBidXNpbmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2xpPgotCi08bGk+TGlzdCBhbGwgb2YgdGhlIFdTSUwgbGlua3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQgV1NJTCBkb2N1bWVudDwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIFdTSUwgZG9jdW1lbnQgdG8gdGhlIGZpbGUgc3lzdGVtPC9saT4KLQotPGxpPkFkZCB0aGUgV1NJTCBkb2N1bWVudCB0byBGYXZvcml0ZXM8L2xpPgotCi08L3VsPgotCi0gPHN0cm9uZz5JbXBvcnRhbnQ6PC9zdHJvbmc+IElmIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZG9lcyBub3QgZGlzcGxheSB0aGUKLXByb2plY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBpbXBvcnQgeW91ciBXU0RMIGZpbGUgdG8sIGVuc3VyZSB0aGF0IHlvdSBoYXZlCi1jcmVhdGVkIHRoZSBwcm9qZWN0IGFuZC9vciBjbGljayB0aGUgIDxzdHJvbmc+UmVmcmVzaDwvc3Ryb25nPiBpY29uLjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90Z2Vud3NpbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWQzMmY5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGdlbndzaWwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkdlbmVyYXRpbmcgYSBXU0lMIGZpbGU8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV1NJTCBjYW4gYmUgZ2VuZXJhdGVkIGF0IGFueSBwb2ludCBpbiB0aGUgV2ViIHNlcnZpY2UgZGV2ZWxvcG1lbnQgY3ljbGUgb25jZQotdGhlIFdTREwgZmlsZSBmb3IgdGhlIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGNyZWF0ZWQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+Z2VuZXJhdGluZyBXU0lMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTSUw8aW5kZXh0ZXJtPmdlbmVyYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+PGI+UHJlcmVxdWlzaXRlczo8L2I+IEluIG9yZGVyIHRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlLCB5b3UgbmVlZCB0bwota25vdyB0aGUgVVJMIHRvIGEgV1NETCBmaWxlLjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+V1NJTCBoZWxwcyBzeW5jaHJvbml6ZSB0aGlzIHByb2Nlc3MgYnkgbWFpbnRhaW5pbmcgcmVmZXJlbmNlcwotdG8gV1NETCBVUkxzLiBXZWIgc2VydmljZXMgdG9vbHMgdGhhdCBwcm9jZXNzIFdTREwgZG9jdW1lbnRzIC0gc3VjaCBhcyB0aGUKLVdlYiBTZXJ2aWNlIENsaWVudCBhbmQgQ3JlYXRpb24gd2l6YXJkcyAtIHdpbGwgYWNjZXB0IGEgV1NJTCBkb2N1bWVudCBhcyBhCi1zdWJzdGl0dXRlIGZvciBXU0RMLiBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgc3RhbmRhcmRpemVkIFdTREwgcmVmZXJlbmNlCi0oV1NJTCkgZG9jdW1lbnQgaW4geW91ciBwcm9qZWN0IGR1cmluZyBXZWIgc2VydmljZSBjbGllbnQgZ2VuZXJhdGlvbiwgdGhlbgotYXQgYSBsYXRlciB0aW1lIGVhc2lseSByZWdlbmVyYXRlIHRoZSBjbGllbnQgZnJvbSB0aGF0IHJlZmVyZW5jZSBkb2N1bWVudC4KLU5vIGNvcGllcyBvZiB0aGUgV1NETCBvciBXU0RMIFVSTHMgYXJlIHJlcXVpcmVkLjwvcD48cD5Zb3UgY2FuIGdlbmVyYXRlIGEKLVdTSUwgZmlsZSBmcm9tIGEgcHJlLWV4aXN0aW5nIFdTREwgZmlsZSBvciBkdXJpbmcgV2ViIHNlcnZpY2UgY3JlYXRpb24gb3IKLWNvbnN1bXB0aW9uLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTI3IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUgdGhvdWdoIHRoZSBpbXBvcnQgdXRpbGl0eTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBnZW5lcmF0ZSBhIFdTSUwgZmlsZSB0aHJvdWdoIHRoZSBpbXBvcnQgdXRpbGl0eTo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5PcHRpb25hbDogU2VsZWN0IHRoZSBXU0RMIGRvY3VtZW50IGZvciB3aGljaCB5b3Ugd2FudCB0byBjcmVhdGUKLWEgV1NJTCBmaWxlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RnJvbSB0aGUgIDxiPkZpbGU8L2I+IG1lbnUsIHNlbGVjdCAgPGI+SW1wb3J0PC9iPiA+ICA8Yj5XU0lMID4KLU5leHQ8L2I+LiBUaGUgV1NJTCBJbXBvcnQgd2luZG93IG9wZW5zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcGVyZm9ybSBzdGVwIDEsIHRoZSBXU0lMIFVSSSBmaWVsZCBzaG91bGQKLWJlIHByZWZpbGxlZCB3aXRoIHRoZSBuYW1lIG9mIHlvdXIgV1NETCBmaWxlLCB3aGVyZSB0aGUgZXh0ZW5zaW9uIGhhcyBiZWVuCi1jaGFuZ2VkIGZyb20gIDxzeXN0ZW1vdXRwdXQ+LndzZGw8L3N5c3RlbW91dHB1dD4gdG8gIDxzeXN0ZW1vdXRwdXQ+LndzaWw8L3N5c3RlbW91dHB1dD4uCi1UaGUgV1NETCBzZWN0aW9uIHNob3VsZCBjb250YWluIHRoZSBVUkxzIHRvIHRoZSBzZWxlY3RlZCBXU0RMIGZpbGVzLiBZb3UgY2FuCi1hbHNvIGVudGVyIGFkZGl0aW9uYWwgV1NETCBVUkxzLiBBbHRlcm5hdGVseSwgeW91IGNhbiBicm93c2UgdG8gdGhlIGxvY2F0aW9uCi1vZiBhIFdTSUwgZmlsZSwgb3IgbWFudWFsbHkgZW50ZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0lMIGFuZCBXU0RMIGZpbGVzCi1pbiB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb25zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgRmluaXNoLiBBIFdTSUwgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlNjIiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gZ2VuZXJhdGUgYSBXU0lMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk9wZW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPk9wZW4gdGhlIFdTREwgRXhwbG9yZXIgYnkgY2xpY2tpbmcgdGhpcyBpY29uOiAgPGltYWdlIGFsdD0iaWNvbiB1c2VkIHRvIGxhdW5jaCB0aGUgd2ViIHNlcnZpY2VzIGV4cGxvcmVyIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxpY29uLmdpZiI+PC9pbWFnZT48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPk9wZW4gYSBXU0RMIGZpbGUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIFdTREwgZmlsZSB0aGF0IHlvdSBoYXZlIG9wZW5lZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUsCi1hbmQgZnJvbSB0aGUgYXZhaWxhYmxlIGFjdGlvbnMsIGNob29zZSB0byBpbXBvcnQgYSBXU0RMIGZpbGUgdG8gdGhlIHdvcmtiZW5jaAotYnkgY2xpY2tpbmcgdGhpcyBpY29uOiAgPGltYWdlIGFsdD0iaWNvbiB1c2VkIHRvIGltcG9ydCBhIGZpbGUiIGhyZWY9Ii4uL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYiPgotPC9pbWFnZT48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCAgPGI+SW1wb3J0IGFzIGEgc2VydmljZSByZWZlcmVuY2UgdG8gYSBXU0lMIGRvY3VtZW50PC9iPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+RW50ZXIgYSBuYW1lIGZvciB0aGUgV1NJTCBmaWxlIHRoYXQgeW91IHdhbnQgdG8gZ2VuZXJhdGUsIGFuZCBjbGljawotIDxiPkdvPC9iPi48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90Z2Vud3NpbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjExNGE0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDYiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iR2VuZXJhdGluZyBhIFdTSUwgZmlsZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXU0lMIGNhbiBiZSBnZW5lcmF0ZWQgYXQgYW55IHBvaW50IGluIHRoZSBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBjeWNsZSBvbmNlIHRoZSBXU0RMIGZpbGUgZm9yIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXU0lMIGNhbiBiZSBnZW5lcmF0ZWQgYXQgYW55IHBvaW50IGluIHRoZSBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBjeWNsZSBvbmNlIHRoZSBXU0RMIGZpbGUgZm9yIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgZ2VuZXJhdGluZyBXU0lMLCBXU0lMLCBnZW5lcmF0aW5nIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBnZW5lcmF0aW5nIFdTSUwsIFdTSUwsIGdlbmVyYXRpbmciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRnZW53c2lsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGdlbndzaWwiPjxhIG5hbWU9InRnZW53c2lsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5HZW5lcmF0aW5nIGEgV1NJTCBmaWxlPC9oMT4KLQotCi0KLQotPGRpdj48cD5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeQotbWVjaGFuaXNtIHRoYXQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gVURESSBhcyB3ZWxsIGFzIGNvbXBsZW1lbnRhcnkgdG8gVURESS4KLVdTSUwgY2FuIGJlIGdlbmVyYXRlZCBhdCBhbnkgcG9pbnQgaW4gdGhlIFdlYiBzZXJ2aWNlIGRldmVsb3BtZW50IGN5Y2xlIG9uY2UKLXRoZSBXU0RMIGZpbGUgZm9yIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PHN0cm9uZz5QcmVyZXF1aXNpdGVzOjwvc3Ryb25nPiBJbiBvcmRlciB0byBnZW5lcmF0ZSBhIFdTSUwgZmlsZSwgeW91IG5lZWQgdG8KLWtub3cgdGhlIFVSTCB0byBhIFdTREwgZmlsZS48L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+V1NJTCBoZWxwcyBzeW5jaHJvbml6ZSB0aGlzIHByb2Nlc3MgYnkgbWFpbnRhaW5pbmcgcmVmZXJlbmNlcwotdG8gV1NETCBVUkxzLiBXZWIgc2VydmljZXMgdG9vbHMgdGhhdCBwcm9jZXNzIFdTREwgZG9jdW1lbnRzIC0gc3VjaCBhcyB0aGUKLVdlYiBTZXJ2aWNlIENsaWVudCBhbmQgQ3JlYXRpb24gd2l6YXJkcyAtIHdpbGwgYWNjZXB0IGEgV1NJTCBkb2N1bWVudCBhcyBhCi1zdWJzdGl0dXRlIGZvciBXU0RMLiBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgc3RhbmRhcmRpemVkIFdTREwgcmVmZXJlbmNlCi0oV1NJTCkgZG9jdW1lbnQgaW4geW91ciBwcm9qZWN0IGR1cmluZyBXZWIgc2VydmljZSBjbGllbnQgZ2VuZXJhdGlvbiwgdGhlbgotYXQgYSBsYXRlciB0aW1lIGVhc2lseSByZWdlbmVyYXRlIHRoZSBjbGllbnQgZnJvbSB0aGF0IHJlZmVyZW5jZSBkb2N1bWVudC4KLU5vIGNvcGllcyBvZiB0aGUgV1NETCBvciBXU0RMIFVSTHMgYXJlIHJlcXVpcmVkLjwvcD4KLTxwPllvdSBjYW4gZ2VuZXJhdGUgYQotV1NJTCBmaWxlIGZyb20gYSBwcmUtZXhpc3RpbmcgV1NETCBmaWxlIG9yIGR1cmluZyBXZWIgc2VydmljZSBjcmVhdGlvbiBvcgotY29uc3VtcHRpb24uPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUyNyI+PGEgbmFtZT0iZDBlMjciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+R2VuZXJhdGluZyBhIFdTSUwgZmlsZSB0aG91Z2ggdGhlIGltcG9ydCB1dGlsaXR5PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIHRocm91Z2ggdGhlIGltcG9ydCB1dGlsaXR5OjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+T3B0aW9uYWw6IFNlbGVjdCB0aGUgV1NETCBkb2N1bWVudCBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY3JlYXRlCi1hIFdTSUwgZmlsZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkZyb20gdGhlICA8c3Ryb25nPkZpbGU8L3N0cm9uZz4gbWVudSwgc2VsZWN0ICA8c3Ryb25nPkltcG9ydDwvc3Ryb25nPiAmZ3Q7ICA8c3Ryb25nPldTSUwgJmd0OwotTmV4dDwvc3Ryb25nPi4gVGhlIFdTSUwgSW1wb3J0IHdpbmRvdyBvcGVucy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHBlcmZvcm0gc3RlcCAxLCB0aGUgV1NJTCBVUkkgZmllbGQgc2hvdWxkCi1iZSBwcmVmaWxsZWQgd2l0aCB0aGUgbmFtZSBvZiB5b3VyIFdTREwgZmlsZSwgd2hlcmUgdGhlIGV4dGVuc2lvbiBoYXMgYmVlbgotY2hhbmdlZCBmcm9tICA8dHQgY2xhc3M9InN5c291dCI+LndzZGw8L3R0PiB0byAgPHR0IGNsYXNzPSJzeXNvdXQiPi53c2lsPC90dD4uCi1UaGUgV1NETCBzZWN0aW9uIHNob3VsZCBjb250YWluIHRoZSBVUkxzIHRvIHRoZSBzZWxlY3RlZCBXU0RMIGZpbGVzLiBZb3UgY2FuCi1hbHNvIGVudGVyIGFkZGl0aW9uYWwgV1NETCBVUkxzLiBBbHRlcm5hdGVseSwgeW91IGNhbiBicm93c2UgdG8gdGhlIGxvY2F0aW9uCi1vZiBhIFdTSUwgZmlsZSwgb3IgbWFudWFsbHkgZW50ZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0lMIGFuZCBXU0RMIGZpbGVzCi1pbiB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb25zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgRmluaXNoLiBBIFdTSUwgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLjwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlNjIiPjxhIG5hbWU9ImQwZTYyIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk9wZW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPk9wZW4gdGhlIFdTREwgRXhwbG9yZXIgYnkgY2xpY2tpbmcgdGhpcyBpY29uOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsaWNvbi5naWYiIGFsdD0iaWNvbiB1c2VkIHRvIGxhdW5jaCB0aGUgd2ViIHNlcnZpY2VzIGV4cGxvcmVyIiAvPjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+T3BlbiBhIFdTREwgZmlsZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgV1NETCBmaWxlIHRoYXQgeW91IGhhdmUgb3BlbmVkIGluIHRoZSBOYXZpZ2F0b3IgcGFuZSwKLWFuZCBmcm9tIHRoZSBhdmFpbGFibGUgYWN0aW9ucywgY2hvb3NlIHRvIGltcG9ydCBhIFdTREwgZmlsZSB0byB0aGUgd29ya2JlbmNoCi1ieSBjbGlja2luZyB0aGlzIGljb246ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL21wdHdzZGxpY29uLmdpZiIgYWx0PSJpY29uIHVzZWQgdG8gaW1wb3J0IGEgZmlsZSIgLz48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCAgPHN0cm9uZz5JbXBvcnQgYXMgYSBzZXJ2aWNlIHJlZmVyZW5jZSB0byBhIFdTSUwgZG9jdW1lbnQ8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkVudGVyIGEgbmFtZSBmb3IgdGhlIFdTSUwgZmlsZSB0aGF0IHlvdSB3YW50IHRvIGdlbmVyYXRlLCBhbmQgY2xpY2sKLSA8c3Ryb25nPkdvPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rsb2dleHAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rsb2dleHAuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQwZjBlNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGxvZ2V4cCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5Mb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeTwvdGl0bGU+Ci08c2hvcnRkZXNjPklmIHlvdSBoYXZlIHB1Ymxpc2hlZCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSB5b3UgY2FuCi1sb2cgaW50byB0aGUgcmVnaXN0cnkgYW5kIG1hbmFnZSB0aGUgc2VydmljZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPmxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+bG9nZ2luZyBpbnRvIGEgVURESSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5UbyBMb2cgaW4gdG8gdGhlIHJlZ2lzdHJ5OjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgYSByZWdpc3RyeSwgeW91IGNhbiBzY3JvbGwgdG8gdGhlIDx1aWNvbnRyb2w+T3RoZXIKLUFjdGlvbnM8L3VpY29udHJvbD4gc2VjdGlvbiBvZiB0aGUgcGFnZSBhbmQgc2VsZWN0IDx1aWNvbnRyb2w+TG9naW48L3VpY29udHJvbD4sCi1vciB1c2UgdGhlIGxvZ2luIGJ1dHRvbiBhdCB0aGUgdG9wIG9mIHRoZSBFeHBsb3JlcjogPGltYWdlIGhyZWY9Ii4uL2ltYWdlcy9sb2dpbmljb24uZ2lmIj4KLTxhbHQ+c2NyZWVuIGNhcHR1cmUgb2YgdGhlIGxvZ2luIGljb248L2FsdD48L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBVUkwgKGlmIGl0IGhhcyBub3QgYmVlbiBwcmVmaWxsZWQgZm9yIHlvdSksIHRoZSB1c2VyCi1JRCwgYW5kIHRoZSBwYXNzd29yZCBmb3IgdGhlIHJlZ2lzdHJ5IGFuZCBjbGljayA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgU3VtbWFyeSBvZiBCdXNpbmVzcyBwYWdlIGRpc3BsYXlzLiBJdCBsaXN0cyBhbGwgdGhlIGJ1c2luZXNzZXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0cnkuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+V2hlbiB5b3UgaGF2ZSBzdWNjZXNzZnVsbHkgbG9nZ2VkIGluLCB0aGUgU3RhdHVzIHBhbmUgZGlzcGxheXMKLWEgbWVzc2FnZSBpbmRpY2F0aW5nIHlvdSB3ZXJlIHN1Y2Nlc3NmdWwuPC9wPjwvcmVzdWx0PgotPHBvc3RyZXE+VG8gbG9nIG91dCBvZiB0aGUgcmVnaXN0cnkgY2xpY2sgdGhlIExvZ291dCBidXR0b246IDxpbWFnZSBocmVmPSIuLi9pbWFnZXMvbG9nb3V0aWNvbi5naWYiPgotPGFsdD5zY3JlZW4gY2FwdHVyZSBvZiB0aGUgbG9nb3V0IGljb248L2FsdD48L2ltYWdlPi48L3Bvc3RyZXE+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNmVkM2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGxvZ2V4cC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iTG9nZ2luZyBpbiB0byBhIFVEREkgcmVnaXN0cnkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSWYgeW91IGhhdmUgcHVibGlzaGVkIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5IHlvdSBjYW4gbG9nIGludG8gdGhlIHJlZ2lzdHJ5IGFuZCBtYW5hZ2UgdGhlIHNlcnZpY2UgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJJZiB5b3UgaGF2ZSBwdWJsaXNoZWQgeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkgeW91IGNhbiBsb2cgaW50byB0aGUgcmVnaXN0cnkgYW5kIG1hbmFnZSB0aGUgc2VydmljZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgbG9nZ2luZyBpbnRvIGEgcmVnaXN0cnksIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgbG9nZ2luZyBpbnRvIGEgVURESSByZWdpc3RyeSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIGxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5LCBXZWIgU2VydmljZXMgRXhwbG9yZXIsIGxvZ2dpbmcgaW50byBhIFVEREkgcmVnaXN0cnkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cmVnLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRsb2dleHAiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Mb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGxvZ2V4cCI+PGEgbmFtZT0idGxvZ2V4cCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+TG9nZ2luZyBpbiB0byBhIFVEREkgcmVnaXN0cnk8L2gxPgotCi0KLQotPGRpdj48cD5JZiB5b3UgaGF2ZSBwdWJsaXNoZWQgeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkgeW91IGNhbgotbG9nIGludG8gdGhlIHJlZ2lzdHJ5IGFuZCBtYW5hZ2UgdGhlIHNlcnZpY2UgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PGEgaHJlZj0idHJlZy5odG1sIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gTG9nIGluIHRvIHRoZSByZWdpc3RyeTo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgYSByZWdpc3RyeSwgeW91IGNhbiBzY3JvbGwgdG8gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk90aGVyCi1BY3Rpb25zPC9zcGFuPiBzZWN0aW9uIG9mIHRoZSBwYWdlIGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TG9naW48L3NwYW4+LAotb3IgdXNlIHRoZSBsb2dpbiBidXR0b24gYXQgdGhlIHRvcCBvZiB0aGUgRXhwbG9yZXI6IDxpbWcgc3JjPSIuLi9pbWFnZXMvbG9naW5pY29uLmdpZiIgYWx0PSJzY3JlZW4gY2FwdHVyZSBvZiB0aGUgbG9naW4gaWNvbiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5FbnRlciB0aGUgVVJMIChpZiBpdCBoYXMgbm90IGJlZW4gcHJlZmlsbGVkIGZvciB5b3UpLCB0aGUgdXNlcgotSUQsIGFuZCB0aGUgcGFzc3dvcmQgZm9yIHRoZSByZWdpc3RyeSBhbmQgY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgU3VtbWFyeSBvZiBCdXNpbmVzcyBwYWdlIGRpc3BsYXlzLiBJdCBsaXN0cyBhbGwgdGhlIGJ1c2luZXNzZXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0cnkuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPldoZW4geW91IGhhdmUgc3VjY2Vzc2Z1bGx5IGxvZ2dlZCBpbiwgdGhlIFN0YXR1cyBwYW5lIGRpc3BsYXlzCi1hIG1lc3NhZ2UgaW5kaWNhdGluZyB5b3Ugd2VyZSBzdWNjZXNzZnVsLjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyBsb2cgb3V0IG9mIHRoZSByZWdpc3RyeSBjbGljayB0aGUgTG9nb3V0IGJ1dHRvbjogPGltZyBzcmM9Ii4uL2ltYWdlcy9sb2dvdXRpY29uLmdpZiIgYWx0PSJzY3JlZW4gY2FwdHVyZSBvZiB0aGUgbG9nb3V0IGljb24iIC8+LjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJlbnQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJlbnQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhZmRjMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHViZW50LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRwdWJlbnQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+UHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0Ci1oYXMgcHVibGlzaGVkIGEgc2VydmljZS4mbmJzcDsgQmVmb3JlIHlvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UsCi15b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5Ljwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5VRERJPGluZGV4dGVybT5wdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+cHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5idXNpbmVzcyBlbnRpdGllczxpbmRleHRlcm0+cHVibGlzaGluZyB0byBVRERJPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRhZGRyZWcuZGl0YSI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08L29sPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+WW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHR3byBkaWZmZXJlbnQgcHVibGljYXRpb24KLWZvcm1hdHM6IHNpbXBsZSBhbmQgYWR2YW5jZWQuPC9wPjxscT4gPHA+IDx1aWNvbnRyb2w+U2ltcGxlPC91aWNvbnRyb2w+IEFsbG93cwoteW91IHRvIGVudGVyIHRoZSBtaW5pbWFsIGFtb3VudCBvZiBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MKLWVudGl0eS4mbmJzcDsgQSBzaW1wbGUgcHVibGlzaCBvbmx5IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBvbmx5IG9uZSBuYW1lIGFuZAotb25lIGJ1c2luZXNzIGRlc2NyaXB0aW9uLjwvcD48cD4gPHVpY29udHJvbD5BZHZhbmNlZCA8L3VpY29udHJvbD4gQWxsb3dzIHlvdQotdG8gZW50ZXIgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGJ1c2luZXNzIGVudGl0eS4gQW4gYWR2YW5jZWQgcHVibGlzaAotYWxsb3dzIHlvdSB0byBzcGVjaWZ5IG11bHRpcGxlIG5hbWVzIGFuZCBkZXNjcmlwdGlvbnMgZm9yIG11bHRpLWxpbmd1YWwgc3VwcG9ydC48L3A+IDwvbHE+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJkMGU3NCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIHNpbXBsZSBvcHRpb246PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlciwgc2VsZWN0IFVEREkgTWFpbiBhbmQgc2VsZWN0IHRoZSByZWdpc3RyeQotdG8gd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlJm5ic3A7TmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5IGZvciB3aGljaAoteW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8Yj5QdWJsaXNoPC9iPiBpY29uICA8aW1hZ2UKLWFsdD0iUGljdHVyZSBvZiB0aGUgUHVibGlzaCAgaWNvbi4iIGhyZWY9Ii4uL2ltYWdlcy9wdWJsaXNoMi5naWYiPjwvaW1hZ2U+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlICA8Yj5TaW1wbGU8L2I+IHJhZGlvIGJ1dHRvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgV1NETCBVUkwsIGJ1c2luZXNzCi1uYW1lLCBhbmQgYnVzaW5lc3MgZGVzY3JpcHRpb24gaW4gdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdvPC9iPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gV2ViCi1TZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZCBXZWIgc2VydmljZS4KLVRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0byB0aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UgZG9jdW1lbnQgb2YKLXRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93IGRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aCB5b3VyIFdlYiBzZXJ2aWNlLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlMTEzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHRoZSBhZHZhbmNlZCBvcHRpb246PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlJm5ic3A7IFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5IGZvciB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxiPlB1Ymxpc2ggU2VydmljZTwvYj4gaWNvbgotIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggU2VydmljZSBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL3B1YnNlcnYuZ2lmIj4KLTwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSAgPGI+QWR2YW5jZWQ8L2I+IHJhZGlvIGJ1dHRvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgYW5kIFdTREwgVVJMIGluCi10aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QWRkPC9iPiB0byBjcmVhdGUgYnVzaW5lc3MgbmFtZXMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QWRkPC9iPiB0byBjcmVhdGUgYnVzaW5lc3MgZGVzY3JpcHRpb25zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5BZGQ8L3VpY29udHJvbD4gdG8gY3JlYXRlIGFuIGlkZW50aWZpZXIuIEZvciBleGFtcGxlLAotYW4gaWRlbnRpZmllciBmb3IgeW91ciBidXNpbmVzcyBlbnRpdHkgbWF5IGJlIHlvdXIgYnVzaW5lc3MgcGhvbmUgbnVtYmVyLgotVGhlIGtleSBuYW1lIHdvdWxkIGJlICJQaG9uZSBOdW1iZXIiIGFuZCB0aGUga2V5IHZhbHVlIHdvdWxkIGJlIHlvdXIgYnVzaW5lc3MKLXRlbGVwaG9uZSBudW1iZXIuIDwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkFkZDwvYj4gdG8gY3JlYXRlIGNhdGVnb3JpZXMuIEVudGVyIHlvdXIgYnVzaW5lc3MgY2F0ZWdvcmllcy4KLVNlbGVjdCBhIGNhdGVnb3J5IHR5cGUgZnJvbSB0aGUgZHJvcCBkb3duIGxpc3QuIENsaWNrICA8Yj5Ccm93c2U8L2I+IHRvIG9wZW4KLXRoZSBDYXRlZ29yaWVzIHBhbmUuIE5hdmlnYXRlIHRocm91Z2ggdGhlIGhpZXJhcmNoaWNhbCB0YXhvbm9teSBhbmQgc2VsZWN0Ci10aGUgYXBwcm9wcmlhdGUgY2xhc3NpZmljYXRpb24gZm9yIHlvdXIgYnVzaW5lc3Mgc2VydmljZSwgdGhlbiBleGl0IHRoZSBDYXRlZ29yaWVzCi1wYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdvPC9iPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHdpdGggeW91ciBwdWJsaXNoZWQKLVdlYiBzZXJ2aWNlLiBUaGUgcmVnaXN0cnkgY29udGFpbnMgcG9pbnRlcnMgdG8gdGhlIFVSTCBvZiB0aGUgV1NETCBzZXJ2aWNlCi1kb2N1bWVudCBvZiB0aGUgV2ViIHNlcnZpY2UuIEJ1c2luZXNzZXMgY2FuIG5vdyBkaXNjb3ZlciBhbmQgaW50ZWdyYXRlIHdpdGgKLXlvdXIgV2ViIHNlcnZpY2UuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2E1YmExLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJlbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLCB5b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIGJ1c2luZXNzIGVudGl0eSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnVzaW5lc3MgdGhhdCBoYXMgcHVibGlzaGVkIGEgc2VydmljZS7CoCBCZWZvcmUgeW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSwgeW91IG11c3QgcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eS4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBwdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZXMsIGJ1c2luZXNzIGVudGl0aWVzLCBwdWJsaXNoaW5nIHRvIFVEREkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBwdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZXMsIGJ1c2luZXNzIGVudGl0aWVzLCBwdWJsaXNoaW5nIHRvIFVEREkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRwdWJlbnQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5QdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0cHViZW50Ij48YSBuYW1lPSJ0cHViZW50Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5QdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9oMT4KLQotCi0KLTxkaXY+PHA+QSBidXNpbmVzcyBlbnRpdHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQKLWhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLAoteW91IG11c3QgcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eS48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idGFkZHJlZy5odG1sIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Zb3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdHdvIGRpZmZlcmVudCBwdWJsaWNhdGlvbgotZm9ybWF0czogc2ltcGxlIGFuZCBhZHZhbmNlZC48L3A+Ci08YmxvY2txdW90ZT4gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNpbXBsZTwvc3Bhbj4gQWxsb3dzCi15b3UgdG8gZW50ZXIgdGhlIG1pbmltYWwgYW1vdW50IG9mIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcwotZW50aXR5LsKgIEEgc2ltcGxlIHB1Ymxpc2ggb25seSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgb25seSBvbmUgbmFtZSBhbmQKLW9uZSBidXNpbmVzcyBkZXNjcmlwdGlvbi48L3A+Ci08cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWR2YW5jZWQgPC9zcGFuPiBBbGxvd3MgeW91Ci10byBlbnRlciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgYnVzaW5lc3MgZW50aXR5LiBBbiBhZHZhbmNlZCBwdWJsaXNoCi1hbGxvd3MgeW91IHRvIHNwZWNpZnkgbXVsdGlwbGUgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucyBmb3IgbXVsdGktbGluZ3VhbCBzdXBwb3J0LjwvcD4KLSA8L2Jsb2NrcXVvdGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTc0Ij48YSBuYW1lPSJkMGU3NCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIHNpbXBsZSBvcHRpb246PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBzZWxlY3QgVURESSBNYWluIGFuZCBzZWxlY3QgdGhlIHJlZ2lzdHJ5Ci10byB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBlbnRpdHkuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGXCoE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzIGVudGl0eSBmb3Igd2hpY2gKLXlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIGJ1c2luZXNzIHNlcnZpY2UuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPHN0cm9uZz5QdWJsaXNoPC9zdHJvbmc+IGljb24gIDxpbWcgc3JjPSIuLi9pbWFnZXMvcHVibGlzaDIuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggIGljb24uIiAvPi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSAgPHN0cm9uZz5TaW1wbGU8L3N0cm9uZz4gcmFkaW8gYnV0dG9uLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIHBhc3N3b3JkLCBXU0RMIFVSTCwgYnVzaW5lc3MKLW5hbWUsIGFuZCBidXNpbmVzcyBkZXNjcmlwdGlvbiBpbiB0aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgSUJNPHN1cD7Crjwvc3VwPiBXZWIKLVNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLgotVGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZgotdGhlIFdlYiBzZXJ2aWNlLiBCdXNpbmVzc2VzIGNhbiBub3cgZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlMTEzIj48YSBuYW1lPSJkMGUxMTMiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZcKgIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5IGZvciB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxzdHJvbmc+UHVibGlzaCBTZXJ2aWNlPC9zdHJvbmc+IGljb24KLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3B1YnNlcnYuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggU2VydmljZSBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlICA8c3Ryb25nPkFkdmFuY2VkPC9zdHJvbmc+IHJhZGlvIGJ1dHRvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgYW5kIFdTREwgVVJMIGluCi10aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5BZGQ8L3N0cm9uZz4gdG8gY3JlYXRlIGJ1c2luZXNzIG5hbWVzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+IHRvIGNyZWF0ZSBidXNpbmVzcyBkZXNjcmlwdGlvbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+IHRvIGNyZWF0ZSBhbiBpZGVudGlmaWVyLiBGb3IgZXhhbXBsZSwKLWFuIGlkZW50aWZpZXIgZm9yIHlvdXIgYnVzaW5lc3MgZW50aXR5IG1heSBiZSB5b3VyIGJ1c2luZXNzIHBob25lIG51bWJlci4KLVRoZSBrZXkgbmFtZSB3b3VsZCBiZSAiUGhvbmUgTnVtYmVyIiBhbmQgdGhlIGtleSB2YWx1ZSB3b3VsZCBiZSB5b3VyIGJ1c2luZXNzCi10ZWxlcGhvbmUgbnVtYmVyLiA8L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFkZDwvc3Ryb25nPiB0byBjcmVhdGUgY2F0ZWdvcmllcy4gRW50ZXIgeW91ciBidXNpbmVzcyBjYXRlZ29yaWVzLgotU2VsZWN0IGEgY2F0ZWdvcnkgdHlwZSBmcm9tIHRoZSBkcm9wIGRvd24gbGlzdC4gQ2xpY2sgIDxzdHJvbmc+QnJvd3NlPC9zdHJvbmc+IHRvIG9wZW4KLXRoZSBDYXRlZ29yaWVzIHBhbmUuIE5hdmlnYXRlIHRocm91Z2ggdGhlIGhpZXJhcmNoaWNhbCB0YXhvbm9teSBhbmQgc2VsZWN0Ci10aGUgYXBwcm9wcmlhdGUgY2xhc3NpZmljYXRpb24gZm9yIHlvdXIgYnVzaW5lc3Mgc2VydmljZSwgdGhlbiBleGl0IHRoZSBDYXRlZ29yaWVzCi1wYW5lLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZAotV2ViIHNlcnZpY2UuIFRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0byB0aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UKLWRvY3VtZW50IG9mIHRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93IGRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aAoteW91ciBXZWIgc2VydmljZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJsaXNoLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHVibGlzaC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWIwNDE5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJsaXNoLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRwdWJsaXNoIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+VGhlIFdlYiBzZXJ2aWNlLCBhbHNvIGtub3duIGFzIHRoZSBidXNpbmVzcyBzZXJ2aWNlLCBkZXNjcmliZXMKLWEgV2ViIHNlcnZpY2UncyBlbmRwb2ludCBhbmQgd2hlcmUgaXRzIFdTREwgZmlsZSByZXNpZGVzLiBUaGUgV1NETCBmaWxlIGxpc3RzCi10aGUgb3BlcmF0aW9ucyB0aGF0IHNlcnZpY2UgcHJvdmlkZXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnB1Ymxpc2hpbmcgdG8gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+LjwvbGk+Ci08bGk+Q3JlYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4KLTxsaT5EZXBsb3kgdGhlIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJlbnQuZGl0YSI+UHVibGlzaCBhIEJ1c2luZXNzIEVudGl0eTwveHJlZj4uPC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08cmVzdWx0PjxwPllvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UgdXNpbmcgdHdvIGRpZmZlcmVudCBwdWJsaWNhdGlvbgotZm9ybWF0czogc2ltcGxlIGFuZCBhZHZhbmNlZC48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTc0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHB1Ymxpc2ggYSBXZWIgc2VydmljZSB1c2luZyB0aGUgc2ltcGxlIG9wdGlvbjo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHkgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIGJ1c2luZXNzIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPGI+UHVibGlzaCBTZXJ2aWNlPC9iPiBpY29uCi0gPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgUHVibGlzaCBTZXJ2aWNlIGljb24uIiBocmVmPSIuLi9pbWFnZXMvcHVic2Vydi5naWYiPgotPC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlICA8Yj5TaW1wbGU8L2I+IHJhZGlvIGJ1dHRvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgV1NETCBVUkwsIGJ1c2luZXNzCi1uYW1lLCBhbmQgYnVzaW5lc3MgZGVzY3JpcHRpb24gaW4gdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdvPC9iPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5JbXBvcnRhbnQ6PC9iPiBFbnN1cmUgdGhhdCB5b3Ugc2VsZWN0IHRoZSBzZXJ2aWNlIGRvY3VtZW50LAotc2luY2UgdGhlIHNlcnZpY2UgZWxlbWVudCBpcyB0aGUgYmFzaXMgZm9yIHRoZSBCdXNpbmVzcyBTZXJ2aWNlIHRoYXQgeW91IHdpbGwKLXB1Ymxpc2guIFlvdSBjYW5ub3QgcHVibGlzaCBhIEJ1c2luZXNzIFNlcnZpY2UgdXNpbmcgYSBXU0RMIGRvY3VtZW50IHRoYXQKLWRvZXMgbm90IGhhdmUgc2VydmljZSBlbGVtZW50cy48L3A+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5Ci11cGRhdGVkIHdpdGggeW91ciBwdWJsaXNoZWQgV2ViIHNlcnZpY2UuIFRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0bwotdGhlIFVSTCBvZiB0aGUgV1NETCBzZXJ2aWNlIGRvY3VtZW50IG9mIHRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93Ci1kaXNjb3ZlciBhbmQgaW50ZWdyYXRlIHdpdGggeW91ciBXZWIgc2VydmljZS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTExMyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5QdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHB1Ymxpc2ggYSBXZWIgc2VydmljZSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8Yj5QdWJsaXNoIFNlcnZpY2U8L2I+IGljb24KLSA8aW1hZ2UgYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoIFNlcnZpY2UgaWNvbi4iIGhyZWY9Ii4uL2ltYWdlcy9wdWJzZXJ2LmdpZiI+Ci08L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgIDxiPkFkdmFuY2VkPC9iPiByYWRpbyBidXR0b24uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgcGFzc3dvcmQsIGFuZCBXU0RMIFVSTCBpbgotdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdldDwvYj4gb3IgPHVpY29udHJvbD5GaW5kPC91aWNvbnRyb2w+IHRvIGFzc29jaWF0ZSB0aGUKLXNlcnZpY2Ugd2l0aCBhIGJ1c2luZXNzIGVudGl0eS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5HZXQ8L2I+IG9yIDx1aWNvbnRyb2w+RmluZDwvdWljb250cm9sPiB0byBhc3NvY2lhdGUgYQotc3BlY2lmaWMgc2VydmljZSBpbnRlcmZhY2Ugd2l0aCB0aGUgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5BZGQ8L2I+IHRvIGNyZWF0ZSBidXNpbmVzcyBzZXJ2aWNlIG5hbWVzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkFkZDwvYj4gdG8gY3JlYXRlIGJ1c2luZXNzIHNlcnZpY2UgZGVzY3JpcHRpb25zLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QWRkPC9iPiB0byBjcmVhdGUgY2F0ZWdvcmllcy4gRW50ZXIgeW91ciBidXNpbmVzcyBzZXJ2aWNlCi1jYXRlZ29yaWVzLiBTZWxlY3QgYSBjYXRlZ29yeSB0eXBlIGZyb20gdGhlIGRyb3AgZG93biBsaXN0LiBDbGljayAgPGI+QnJvd3NlPC9iPiB0bwotb3BlbiB0aGUgQ2F0ZWdvcmllcyBwYW5lLiZuYnNwOyBOYXZpZ2F0ZSB0aHJvdWdoIHRoZSBoaWVyYXJjaGljYWwgdGF4b25vbXkKLWFuZCBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGNsYXNzaWZpY2F0aW9uIGZvciB5b3VyIGJ1c2luZXNzIHNlcnZpY2UsIHRoZW4KLWV4aXQgdGhlIENhdGVnb3JpZXMgcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5HbzwvYj4gdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD4gPGI+SW1wb3J0YW50OjwvYj4gRW5zdXJlIHRoYXQgeW91IHNlbGVjdCB0aGUgc2VydmljZSBkb2N1bWVudCwKLXNpbmNlIHRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgdGhlIGJhc2lzIGZvciB0aGUgQnVzaW5lc3MgU2VydmljZSB0aGF0IHlvdSB3aWxsCi1wdWJsaXNoLiZuYnNwOyBZb3UgY2Fubm90IHB1Ymxpc2ggYSBCdXNpbmVzcyBTZXJ2aWNlIHVzaW5nIGEgV1NETCBkb2N1bWVudAotdGhhdCBkb2VzIG5vdCBoYXZlIHNlcnZpY2UgZWxlbWVudHMuPC9wPjxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseQotdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLiBUaGUgcmVnaXN0cnkgY29udGFpbnMgcG9pbnRlcnMgdG8KLXRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZiB0aGUgV2ViIHNlcnZpY2UuIEJ1c2luZXNzZXMgY2FuIG5vdwotZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1Ymxpc2guaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJsaXNoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NmNmYjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1Ymxpc2guaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlLCBhbHNvIGtub3duIGFzIHRoZSBidXNpbmVzcyBzZXJ2aWNlLCBkZXNjcmliZXMgYSBXZWIgc2VydmljZSdzIGVuZHBvaW50IGFuZCB3aGVyZSBpdHMgV1NETCBmaWxlIHJlc2lkZXMuIFRoZSBXU0RMIGZpbGUgbGlzdHMgdGhlIG9wZXJhdGlvbnMgdGhhdCBzZXJ2aWNlIHByb3ZpZGVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIHNlcnZpY2UsIGFsc28ga25vd24gYXMgdGhlIGJ1c2luZXNzIHNlcnZpY2UsIGRlc2NyaWJlcyBhIFdlYiBzZXJ2aWNlJ3MgZW5kcG9pbnQgYW5kIHdoZXJlIGl0cyBXU0RMIGZpbGUgcmVzaWRlcy4gVGhlIFdTREwgZmlsZSBsaXN0cyB0aGUgb3BlcmF0aW9ucyB0aGF0IHNlcnZpY2UgcHJvdmlkZXMuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlLCBXZWIgc2VydmljZXMsIHB1Ymxpc2hpbmcgdG8gYSBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlLCBXZWIgc2VydmljZXMsIHB1Ymxpc2hpbmcgdG8gYSBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0cHVibGlzaCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHB1Ymxpc2giPjxhIG5hbWU9InRwdWJsaXNoIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5QdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2U8L2gxPgotCi0KLQotCi08ZGl2PjxwPlRoZSBXZWIgc2VydmljZSwgYWxzbyBrbm93biBhcyB0aGUgYnVzaW5lc3Mgc2VydmljZSwgZGVzY3JpYmVzCi1hIFdlYiBzZXJ2aWNlJ3MgZW5kcG9pbnQgYW5kIHdoZXJlIGl0cyBXU0RMIGZpbGUgcmVzaWRlcy4gVGhlIFdTREwgZmlsZSBsaXN0cwotdGhlIG9wZXJhdGlvbnMgdGhhdCBzZXJ2aWNlIHByb3ZpZGVzLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRhZGRyZWcuaHRtbCI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L2xpPgotCi08bGk+Q3JlYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4KLQotPGxpPkRlcGxveSB0aGUgV2ViIHNlcnZpY2UuPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0cHViZW50Lmh0bWwiPlB1Ymxpc2ggYSBCdXNpbmVzcyBFbnRpdHk8L2E+LjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+WW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB1c2luZyB0d28gZGlmZmVyZW50IHB1YmxpY2F0aW9uCi1mb3JtYXRzOiBzaW1wbGUgYW5kIGFkdmFuY2VkLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlNzQiPjxhIG5hbWU9ImQwZTc0Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHB1Ymxpc2ggYSBXZWIgc2VydmljZSB1c2luZyB0aGUgc2ltcGxlIG9wdGlvbjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8c3Ryb25nPlB1Ymxpc2ggU2VydmljZTwvc3Ryb25nPiBpY29uCi0gPGltZyBzcmM9Ii4uL2ltYWdlcy9wdWJzZXJ2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoIFNlcnZpY2UgaWNvbi4iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSAgPHN0cm9uZz5TaW1wbGU8L3N0cm9uZz4gcmFkaW8gYnV0dG9uLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIHBhc3N3b3JkLCBXU0RMIFVSTCwgYnVzaW5lc3MKLW5hbWUsIGFuZCBidXNpbmVzcyBkZXNjcmlwdGlvbiBpbiB0aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHN0cm9uZz5JbXBvcnRhbnQ6PC9zdHJvbmc+IEVuc3VyZSB0aGF0IHlvdSBzZWxlY3QgdGhlIHNlcnZpY2UgZG9jdW1lbnQsCi1zaW5jZSB0aGUgc2VydmljZSBlbGVtZW50IGlzIHRoZSBiYXNpcyBmb3IgdGhlIEJ1c2luZXNzIFNlcnZpY2UgdGhhdCB5b3Ugd2lsbAotcHVibGlzaC4gWW91IGNhbm5vdCBwdWJsaXNoIGEgQnVzaW5lc3MgU2VydmljZSB1c2luZyBhIFdTREwgZG9jdW1lbnQgdGhhdAotZG9lcyBub3QgaGF2ZSBzZXJ2aWNlIGVsZW1lbnRzLjwvcD4KLTxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseQotdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLiBUaGUgcmVnaXN0cnkgY29udGFpbnMgcG9pbnRlcnMgdG8KLXRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZiB0aGUgV2ViIHNlcnZpY2UuIEJ1c2luZXNzZXMgY2FuIG5vdwotZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlMTEzIj48YSBuYW1lPSJkMGUxMTMiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBwdWJsaXNoIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8c3Ryb25nPlB1Ymxpc2ggU2VydmljZTwvc3Ryb25nPiBpY29uCi0gPGltZyBzcmM9Ii4uL2ltYWdlcy9wdWJzZXJ2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoIFNlcnZpY2UgaWNvbi4iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSAgPHN0cm9uZz5BZHZhbmNlZDwvc3Ryb25nPiByYWRpbyBidXR0b24uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgcGFzc3dvcmQsIGFuZCBXU0RMIFVSTCBpbgotdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R2V0PC9zdHJvbmc+IG9yIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmQ8L3NwYW4+IHRvIGFzc29jaWF0ZSB0aGUKLXNlcnZpY2Ugd2l0aCBhIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkdldDwvc3Ryb25nPiBvciA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5kPC9zcGFuPiB0byBhc3NvY2lhdGUgYQotc3BlY2lmaWMgc2VydmljZSBpbnRlcmZhY2Ugd2l0aCB0aGUgc2VydmljZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFkZDwvc3Ryb25nPiB0byBjcmVhdGUgYnVzaW5lc3Mgc2VydmljZSBuYW1lcy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFkZDwvc3Ryb25nPiB0byBjcmVhdGUgYnVzaW5lc3Mgc2VydmljZSBkZXNjcmlwdGlvbnMuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFkZDwvc3Ryb25nPiB0byBjcmVhdGUgY2F0ZWdvcmllcy4gRW50ZXIgeW91ciBidXNpbmVzcyBzZXJ2aWNlCi1jYXRlZ29yaWVzLiBTZWxlY3QgYSBjYXRlZ29yeSB0eXBlIGZyb20gdGhlIGRyb3AgZG93biBsaXN0LiBDbGljayAgPHN0cm9uZz5Ccm93c2U8L3N0cm9uZz4gdG8KLW9wZW4gdGhlIENhdGVnb3JpZXMgcGFuZS7CoCBOYXZpZ2F0ZSB0aHJvdWdoIHRoZSBoaWVyYXJjaGljYWwgdGF4b25vbXkKLWFuZCBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGNsYXNzaWZpY2F0aW9uIGZvciB5b3VyIGJ1c2luZXNzIHNlcnZpY2UsIHRoZW4KLWV4aXQgdGhlIENhdGVnb3JpZXMgcGFuZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gRW5zdXJlIHRoYXQgeW91IHNlbGVjdCB0aGUgc2VydmljZSBkb2N1bWVudCwKLXNpbmNlIHRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgdGhlIGJhc2lzIGZvciB0aGUgQnVzaW5lc3MgU2VydmljZSB0aGF0IHlvdSB3aWxsCi1wdWJsaXNoLsKgIFlvdSBjYW5ub3QgcHVibGlzaCBhIEJ1c2luZXNzIFNlcnZpY2UgdXNpbmcgYSBXU0RMIGRvY3VtZW50Ci10aGF0IGRvZXMgbm90IGhhdmUgc2VydmljZSBlbGVtZW50cy48L3A+Ci08cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkKLXVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZCBXZWIgc2VydmljZS4gVGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIHBvaW50ZXJzIHRvCi10aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UgZG9jdW1lbnQgb2YgdGhlIFdlYiBzZXJ2aWNlLiBCdXNpbmVzc2VzIGNhbiBub3cKLWRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aCB5b3VyIFdlYiBzZXJ2aWNlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmI2YWJkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RyZWcuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0cmVnIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgUmVnaXN0cnk8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESQotcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5VRERJPGluZGV4dGVybT5yZWdpc3RlcmluZyB3aXRoIGEgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5yZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgcHJpdmF0ZSByZWdpc3RyaWVzIHdpdGggd2hpY2ggeW91IGNhbgotcmVnaXN0ZXIuIFNpbmNlIGVhY2ggcmVnaXN0cnkgaXMgZGlmZmVyZW50LCB0aGUgcmVnaXN0cnkgcHJvdmlkZXIgd2lsbCBnaXZlCi15b3UgaW5zdHJ1Y3Rpb25zIGZvciByZWdpc3RlcmluZy48L3A+PHA+VGhlIGZvbGxvd2luZyByZWdpc3RyaWVzIGFyZSBhdXRvbWF0aWNhbGx5Ci1hZGRlZCB0byBGYXZvcml0ZXM6PC9wPjx1bD4KLTxsaT5TQVAgVURESSBSZWdpc3RyeTwvbGk+Ci08bGk+U0FQIFVEREkgVGVzdCBSZWdpc3RyeTwvbGk+Ci08bGk+WE1ldGhvZHMgUmVnaXN0cnk8L2xpPgotPGxpPk5UVCBDb21tdW5pY2F0aW9ucyBSZWdpc3RyeTwvbGk+Ci08L3VsPjxwPllvdSBjYW4gdXNlIGFueSBvZiB0aGVzZSByZWdpc3RyaWVzIGJ5IHNlbGVjdGluZyB0aGUgRmF2b3JpdGVzIGljb24KLWluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG9vbGJhci4gQWxsIG9mIHRoZXNlIHJlZ2lzdHJpZXMgYXJlIGJhc2VkIG9uCi10aGUgVURESSBCdXNpbmVzcyBSZWdpc3RyeSBWZXJzaW9uIDIuIFRoZSBkZXRhaWxzIHBhZ2Ugb2YgZWFjaCByZWdpc3RyeSB3aWxsCi1oYXZlIHJlZ2lzdHJhdGlvbiBpbnN0cnVjdGlvbnMuPC9wPjxwPlRoZSBwdWJsaWMgcHJvZHVjdGlvbiByZWdpc3RyaWVzIGFyZQotbGlzdGVkIHVuZGVyIEZhdm9yaXRlcy4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBkb2VzIG5vdCBwcmVsb2FkIGFueSByZWdpc3RyaWVzCi1ieSBkZWZhdWx0LiZuYnNwOyBZb3UgY2FuIHByZWxvYWQgcmVnaXN0cmllcyBmcm9tIHRoZSBmYXZvcml0ZXMgc2VjdGlvbiBvZgotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvciBieSB1c2luZyB0aGUgVW5pdCBUZXN0IFVEREkgd2l6YXJkLiBZb3UgY2FuIGFsc28KLXByZWxvYWQgYW5kIGNvbmZpZ3VyZSBwcml2YXRlIHJlZ2lzdHJpZXMgdXNpbmcgdGhlIFVuaXQgVGVzdCBVRERJIHdpemFyZC4KLU9uIHRoZSBPcGVuIFJlZ2lzdHJ5IHBhZ2Ugb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgeW91IGNhbiBzZWxlY3QgZnJvbQotcHVibGljIHJlZ2lzdHJpZXMgYW5kIHJlZ2lzdHJpZXMgbGlzdGVkIGluIHlvdXIgZmF2b3JpdGVzIHRvIGF1dG9tYXRpY2FsbHkKLWZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIHJlZ2lzdHJ5LjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjdhMGQ1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RyZWcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcmVnaXN0ZXJpbmcgd2l0aCBhIHJlZ2lzdHJ5LCBXZWIgc2VydmljZXMsIHJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcmVnaXN0ZXJpbmcgd2l0aCBhIHJlZ2lzdHJ5LCBXZWIgc2VydmljZXMsIHJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHJlZyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIFJlZ2lzdHJ5PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0cmVnIj48YSBuYW1lPSJ0cmVnIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+SW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJCi1yZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgcHJpdmF0ZSByZWdpc3RyaWVzIHdpdGggd2hpY2ggeW91IGNhbgotcmVnaXN0ZXIuIFNpbmNlIGVhY2ggcmVnaXN0cnkgaXMgZGlmZmVyZW50LCB0aGUgcmVnaXN0cnkgcHJvdmlkZXIgd2lsbCBnaXZlCi15b3UgaW5zdHJ1Y3Rpb25zIGZvciByZWdpc3RlcmluZy48L3A+Ci08cD5UaGUgZm9sbG93aW5nIHJlZ2lzdHJpZXMgYXJlIGF1dG9tYXRpY2FsbHkKLWFkZGVkIHRvIEZhdm9yaXRlczo8L3A+Ci08dWw+Ci08bGk+U0FQIFVEREkgUmVnaXN0cnk8L2xpPgotCi08bGk+U0FQIFVEREkgVGVzdCBSZWdpc3RyeTwvbGk+Ci0KLTxsaT5YTWV0aG9kcyBSZWdpc3RyeTwvbGk+Ci0KLTxsaT5OVFQgQ29tbXVuaWNhdGlvbnMgUmVnaXN0cnk8L2xpPgotCi08L3VsPgotPHA+WW91IGNhbiB1c2UgYW55IG9mIHRoZXNlIHJlZ2lzdHJpZXMgYnkgc2VsZWN0aW5nIHRoZSBGYXZvcml0ZXMgaWNvbgotaW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0b29sYmFyLiBBbGwgb2YgdGhlc2UgcmVnaXN0cmllcyBhcmUgYmFzZWQgb24KLXRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IFZlcnNpb24gMi4gVGhlIGRldGFpbHMgcGFnZSBvZiBlYWNoIHJlZ2lzdHJ5IHdpbGwKLWhhdmUgcmVnaXN0cmF0aW9uIGluc3RydWN0aW9ucy48L3A+Ci08cD5UaGUgcHVibGljIHByb2R1Y3Rpb24gcmVnaXN0cmllcyBhcmUKLWxpc3RlZCB1bmRlciBGYXZvcml0ZXMuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZG9lcyBub3QgcHJlbG9hZCBhbnkgcmVnaXN0cmllcwotYnkgZGVmYXVsdC7CoCBZb3UgY2FuIHByZWxvYWQgcmVnaXN0cmllcyBmcm9tIHRoZSBmYXZvcml0ZXMgc2VjdGlvbiBvZgotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvciBieSB1c2luZyB0aGUgVW5pdCBUZXN0IFVEREkgd2l6YXJkLiBZb3UgY2FuIGFsc28KLXByZWxvYWQgYW5kIGNvbmZpZ3VyZSBwcml2YXRlIHJlZ2lzdHJpZXMgdXNpbmcgdGhlIFVuaXQgVGVzdCBVRERJIHdpemFyZC4KLU9uIHRoZSBPcGVuIFJlZ2lzdHJ5IHBhZ2Ugb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgeW91IGNhbiBzZWxlY3QgZnJvbQotcHVibGljIHJlZ2lzdHJpZXMgYW5kIHJlZ2lzdHJpZXMgbGlzdGVkIGluIHlvdXIgZmF2b3JpdGVzIHRvIGF1dG9tYXRpY2FsbHkKLWZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIHJlZ2lzdHJ5LjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RzdHJ0ZXhwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZGMxMDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHN0cnRleHAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+VGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pbiBzZXZlcmFsIHdheXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+bGF1bmNoaW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0Pjx1bD4KLTxsaT5Gcm9tIHRoZSBtYWluIHRvb2xiYXIgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUuPC9saT4KLTxsaT5CeSB1c2luZyB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkcy48L2xpPgotPGxpPkJ5IHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkLjwvbGk+Ci08bGk+QnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9saT4KLTxsaT5Gcm9tIHRoZSBSdW4gbWVudSBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZS48L2xpPgotPGxpPkZyb20gYSBXU0RMIGZpbGUuPC9saT4KLTwvdWw+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJkMGUzOCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBtYWluIHRvb2xiYXI8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiB0b29sYmFyLCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgdGhlICA8Yj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI8L2I+IGljb24gIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIExhdW5jaCBXZWIgU2VydmljZXMgRXhwbG9yZXIgaWNvbi4iCi1ocmVmPSIuLi9pbWFnZXMvdWRkaXZpZXcuZ2lmIj48L2ltYWdlPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0Ci1hbnkgcmVnaXN0cmllcyBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLiBZb3UgY2FuIG5vdyAgPHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5hZGQKLWEgcmVnaXN0cnk8L3hyZWY+IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlNTAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBXaXphcmQ8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgV2ViIFNlcnZpY2VzIFdpemFyZCwKLXNlbGVjdCB0aGUgIDxiPlRlc3QgdGhlIFdlYiBTZXJ2aWNlPC9iPiBjaGVjayBib3ggaW4gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlCi1XZWIgU2VydmljZXMgV2l6YXJkLiBQcm9jZWVkIHdpdGggdGhlIHdpemFyZCBhbmQgdGhlbiBpbiB0aGUgV2ViIFNlcnZpY2UgVGVzdAotUGFnZSwgY2hvb3NlICA8Yj5XZWIgU2VydmljZXMgRXhwbG9yZXI8L2I+IGFzIHRoZSB0ZXN0IGZhY2lsaXR5IGFuZCBjbGljawotb24gdGhlICA8Yj5MYXVuY2g8L2I+IGJ1dHRvbi4gSWYgeW91IGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nCi10aGlzIG1ldGhvZCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWxvYWQgdGhlIFdTREwgKGFuZCBpdHMgY2hpbGQgbm9kZXMpCi1pbiB0aGUgV1NETCBwYWdlLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTYzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkLCBkbwotdGhlIGZvbGxvd2luZzo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5Gcm9tIHRoZSBtYWluIG1lbnUsIGNsaWNrICA8Yj5GaWxlID4gSW1wb3J0PC9iPi4gVGhlIEltcG9ydCB3aXphcmQKLW9wZW5zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0ICA8Yj5XZWIgU2VydmljZTwvYj4gYW5kIGNsaWNrICA8Yj5OZXh0PC9iPi4gVGhlIFdlYiBzZXJ2aWNlCi1pbXBvcnQgd2l6YXJkIG9wZW5zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkZpbmlzaDwvYj4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy4gSWYgeW91IHNlbGVjdGVkIGEgcmVnaXN0cnkgb24KLXRoZSBXZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlIG9mIHRoZSBXZWIgc2VydmljZSBJbXBvcnQgd2l6YXJkLCB5b3Ugd2lsbAotc2VlIHRoZSByZWdpc3RyeSBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlOTUiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQ8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQsIGRvCi10aGUgZm9sbG93aW5nOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkZyb20gdGhlIG1haW4gbWVudSwgY2xpY2sgIDxiPkZpbGUgPiBFeHBvcnQ8L2I+LiBUaGUgRXhwb3J0IHdpemFyZAotb3BlbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgIDxiPldlYiBTZXJ2aWNlPC9iPiBhbmQgY2xpY2sgIDxiPk5leHQ8L2I+LiBUaGUgV2ViIFNlcnZpY2UKLUV4cG9ydCB3aXphcmQgb3BlbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+RmluaXNoPC9iPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zLiZuYnNwOyBJZiB5b3Ugc2VsZWN0ZWQgYSByZWdpc3RyeQotb24gdGhlIFdlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2Ugb2YgdGhlIFdlYiBTZXJ2aWNlIEV4cG9ydCB3aXphcmQsIHlvdQotd2lsbCBzZWUgdGhlIHJlZ2lzdHJ5IGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGUxMjciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgUnVuIG1lbnU8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiBtZW51LCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgIDxiPlJ1biA+IExhdW5jaCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlcjwvYj4uIFRoZSBJbXBvcnQgd2l6YXJkIG9wZW5zLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zLiZuYnNwOwotVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0IGFueSByZWdpc3RyaWVzIGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yCi1wYW5lLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTEzNCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIGEgV1NETCBmaWxlPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gYSBXU0RMIGZpbGUsIHNlbGVjdCB0aGUKLVdTREwgZmlsZSBhbmQgcmlnaHQtY2xpY2sgYW5kIGNob29zZSAgPGI+V2ViIFNlcnZpY2VzID4gVGVzdCB3aXRoIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI8L2I+IG9yICA8Yj5QdWJsaXNoIFdTREwgZmlsZTwvYj4uJm5ic3A7IFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLW9wZW5zLiBUaGUgIDxiPlRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2I+IGFjdGlvbiB3aWxsIHByZWxvYWQgdGhlCi1XU0RMIGluIHRoZSBXU0RMIHBhZ2UuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHJlZy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RzdHJ0ZXhwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90c3RydGV4cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWIwMjM5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RzdHJ0ZXhwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iTGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgU2VydmljZXMgRXhwbG9yZXIsIGxhdW5jaGluZyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBFeHBsb3JlciwgbGF1bmNoaW5nIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0c3RydGV4cCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0c3RydGV4cCI+PGEgbmFtZT0idHN0cnRleHAiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLWluIHNldmVyYWwgd2F5cy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjx1bD4KLTxsaT5Gcm9tIHRoZSBtYWluIHRvb2xiYXIgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUuPC9saT4KLQotPGxpPkJ5IHVzaW5nIHRoZSBXZWIgc2VydmljZSB3aXphcmRzLjwvbGk+Ci0KLTxsaT5CeSB1c2luZyB0aGUgSW1wb3J0IHdpemFyZC48L2xpPgotCi08bGk+QnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9saT4KLQotPGxpPkZyb20gdGhlIFJ1biBtZW51IGluIHRoZSBKMkVFIHBlcnNwZWN0aXZlLjwvbGk+Ci0KLTxsaT5Gcm9tIGEgV1NETCBmaWxlLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTM4Ij48YSBuYW1lPSJkMGUzOCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBtYWluIHRvb2xiYXI8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiB0b29sYmFyLCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgdGhlICA8c3Ryb25nPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjwvc3Ryb25nPiBpY29uICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3VkZGl2aWV3LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBMYXVuY2ggV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGljb24uIiAvPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0Ci1hbnkgcmVnaXN0cmllcyBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLiBZb3UgY2FuIG5vdyAgPGEgaHJlZj0idGFkZHJlZy5odG1sIj5hZGQgYSByZWdpc3RyeTwvYT4gdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU1MCI+PGEgbmFtZT0iZDBlNTAiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBXaXphcmQ8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgV2ViIFNlcnZpY2VzIFdpemFyZCwKLXNlbGVjdCB0aGUgIDxzdHJvbmc+VGVzdCB0aGUgV2ViIFNlcnZpY2U8L3N0cm9uZz4gY2hlY2sgYm94IGluIHRoZSBmaXJzdCBwYWdlIG9mIHRoZQotV2ViIFNlcnZpY2VzIFdpemFyZC4gUHJvY2VlZCB3aXRoIHRoZSB3aXphcmQgYW5kIHRoZW4gaW4gdGhlIFdlYiBTZXJ2aWNlIFRlc3QKLVBhZ2UsIGNob29zZSAgPHN0cm9uZz5XZWIgU2VydmljZXMgRXhwbG9yZXI8L3N0cm9uZz4gYXMgdGhlIHRlc3QgZmFjaWxpdHkgYW5kIGNsaWNrCi1vbiB0aGUgIDxzdHJvbmc+TGF1bmNoPC9zdHJvbmc+IGJ1dHRvbi4gSWYgeW91IGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nCi10aGlzIG1ldGhvZCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWxvYWQgdGhlIFdTREwgKGFuZCBpdHMgY2hpbGQgbm9kZXMpCi1pbiB0aGUgV1NETCBwYWdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTYzIj48YSBuYW1lPSJkMGU2MyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB1c2luZyB0aGUgSW1wb3J0IHdpemFyZDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB1c2luZyB0aGUgSW1wb3J0IHdpemFyZCwgZG8KLXRoZSBmb2xsb3dpbmc6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5Gcm9tIHRoZSBtYWluIG1lbnUsIGNsaWNrICA8c3Ryb25nPkZpbGUgJmd0OyBJbXBvcnQ8L3N0cm9uZz4uIFRoZSBJbXBvcnQgd2l6YXJkCi1vcGVucy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCAgPHN0cm9uZz5XZWIgU2VydmljZTwvc3Ryb25nPiBhbmQgY2xpY2sgIDxzdHJvbmc+TmV4dDwvc3Ryb25nPi4gVGhlIFdlYiBzZXJ2aWNlCi1pbXBvcnQgd2l6YXJkIG9wZW5zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+RmluaXNoPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zLiBJZiB5b3Ugc2VsZWN0ZWQgYSByZWdpc3RyeSBvbgotdGhlIFdlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2Ugb2YgdGhlIFdlYiBzZXJ2aWNlIEltcG9ydCB3aXphcmQsIHlvdSB3aWxsCi1zZWUgdGhlIHJlZ2lzdHJ5IGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlOTUiPjxhIG5hbWU9ImQwZTk1Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBFeHBvcnQgd2l6YXJkPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBFeHBvcnQgd2l6YXJkLCBkbwotdGhlIGZvbGxvd2luZzo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkZyb20gdGhlIG1haW4gbWVudSwgY2xpY2sgIDxzdHJvbmc+RmlsZSAmZ3Q7IEV4cG9ydDwvc3Ryb25nPi4gVGhlIEV4cG9ydCB3aXphcmQKLW9wZW5zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3Ryb25nPldlYiBTZXJ2aWNlPC9zdHJvbmc+IGFuZCBjbGljayAgPHN0cm9uZz5OZXh0PC9zdHJvbmc+LiBUaGUgV2ViIFNlcnZpY2UKLUV4cG9ydCB3aXphcmQgb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5GaW5pc2g8L3N0cm9uZz4uIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMuwqAgSWYgeW91IHNlbGVjdGVkIGEgcmVnaXN0cnkKLW9uIHRoZSBXZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlIG9mIHRoZSBXZWIgU2VydmljZSBFeHBvcnQgd2l6YXJkLCB5b3UKLXdpbGwgc2VlIHRoZSByZWdpc3RyeSBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTEyNyI+PGEgbmFtZT0iZDBlMTI3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gdGhlIFJ1biBtZW51PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gdGhlIG1haW4gbWVudSwgZW5zdXJlCi10aGF0IHlvdSBhcmUgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUgYW5kIGNsaWNrICA8c3Ryb25nPlJ1biAmZ3Q7IExhdW5jaCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjwvc3Ryb25nPi4gVGhlIEltcG9ydCB3aXphcmQgb3BlbnMuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMuwqAKLVRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMgd2l0aG91dCBhbnkgcmVnaXN0cmllcyBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvcgotcGFuZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUxMzQiPjxhIG5hbWU9ImQwZTEzNCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIGEgV1NETCBmaWxlPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gYSBXU0RMIGZpbGUsIHNlbGVjdCB0aGUKLVdTREwgZmlsZSBhbmQgcmlnaHQtY2xpY2sgYW5kIGNob29zZSAgPHN0cm9uZz5XZWIgU2VydmljZXMgJmd0OyBUZXN0IHdpdGggV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjwvc3Ryb25nPiBvciAgPHN0cm9uZz5QdWJsaXNoIFdTREwgZmlsZTwvc3Ryb25nPi7CoCBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1vcGVucy4gVGhlICA8c3Ryb25nPlRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3N0cm9uZz4gYWN0aW9uIHdpbGwgcHJlbG9hZCB0aGUKLVdTREwgaW4gdGhlIFdTREwgcGFnZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNTAzMWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR0ZXN0d3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5UZXN0aW5nIFdTREwgZG9jdW1lbnRzIGFuZCBXZWIgc2VydmljZXMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5Vc2luZyB0aGUgV1NETCBFeHBsb3Jlcjwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+V1NETCBkb2N1bWVudHMgYWxsb3cgZGV2ZWxvcGVycyB0byBleHBvc2UgdGhlaXIgYXBwbGljYXRpb25zIGFzCi1uZXR3b3JrLWFjY2Vzc2libGUgc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyCi1hcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucwotb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzIHlvdQotdG8gZXhwbG9yZSwgaW1wb3J0LCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+dGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT50ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6IFRvIHVzZSB0aGUgV1NETCBFeHBsb3Jlcjo8dWw+Ci08bGk+WW91IG11c3QgaGF2ZSBhIHZhbGlkIFVSTCBmb3IgYSBXU0RMIGRvY3VtZW50LjwvbGk+Ci08bGk+WW91IG11c3QgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaAotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC91bD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPlRoZSBXU0RMIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gZXhwbG9yZSwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBleHBsb3JpbmcgV1NETCBkb2N1bWVudHMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIsCi1yZWZlciB0byA8eHJlZiBocmVmPSJ0d3NkbGV4cC5kaXRhIj5Vc2luZyB0aGUgV1NETCBFeHBsb3JlcjwveHJlZj4gLjwvcD48cD5UbwotdGVzdCBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlRvIGxhdW5jaCB0aGUgV1NETCBFeHBsb3JlciwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlciwgc3dpdGNoIHRvIHRoZSBXU0RMIEV4cGxvcmVyIGJ5Ci1jbGlja2luZyB0aGUgaWNvbiBpbiB0aGUgdXBwZXIgcmlnaHQtaGFuZCBjb3JuZXIgIDxpbWFnZSBhbHQ9Ikljb24gdG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxpY29uLmdpZiI+PC9pbWFnZT4uIDwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCBXU0RMIE1haW4gaW4gdGhlIE5hdmlnYXRvciBwYW5lLCBlbnRlciBvciBicm93c2UgdG8gYW4gZXhpc3RpbmcKLVdTREwgVVJMIGluIHRoZSByaWdodC1oYW5kIHBhbmUsIGFuZCBjbGljayAgPGI+R288L2I+LiBGb3IgdGhpcyBleGFtcGxlIHRoZQotV1NETCBiZWluZyB1c2VkIGlzIGEgV2ViIFNlcnZpY2Ugd2hpY2ggY29udmVydHMgdGVtcGVyYXR1cmUgZnJvbSBDZWxzaXVzIHRvCi1GYWhyZW5oZWl0IG9yIEZhaHJlbmhlaXQgdG8gQ2Vsc2l1cy4gICA8aW1hZ2UgYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgV1NETCBNYWluIHBhbmUgb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIKLWhyZWY9Ii4uL2ltYWdlcy93c2RsdGVtcC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+ICBUaGUgZm9sbG93aW5nIG5vZGVzCi13aWxsIGJlIGFkZGVkIHRvIHRoZSBXU0RMIHRyZWU6IDwvY21kPjxpbmZvPjx1bD4KLTxsaT5UaGUgV1NETCBub2RlOiAgPGltYWdlIGFsdD0iV1NETCBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2Rsbm9kZS5naWYiPgotPC9pbWFnZT48L2xpPgotPGxpPlRoZSBzZXJ2aWNlIG5vZGUgKHdoaWNoIHJlcHJlc2VudHMgYSBzZXJ2aWNlIGVsZW1lbnQgd2l0aGluIHRoZSBXU0RMIGZpbGUpOgotIDxpbWFnZSBhbHQ9IlNlcnZpY2Ugbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvc2Vydm5vZGUuZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+VGhlIGJpbmRpbmcgbm9kZTogIDxpbWFnZSBhbHQ9IkJpbmRpbmcgbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvYmluZG5vZGUuZ2lmIj4KLTwvaW1hZ2U+PC9saT4KLTxsaT5UaGUgb3BlcmF0aW9uIG5vZGU6ICA8aW1hZ2UgYWx0PSJPcGVyYXRpb24gbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvb3Bub2RlLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBXU0RMIEJpbmRpbmcgRGV0YWlscyBwYW5lLCBjbGljayB0aGUgb3BlcmF0aW9uIChpbiB0aGlzCi1leGFtcGxlIHRoZSAgPHN5c3RlbW91dHB1dD5DdG9GPC9zeXN0ZW1vdXRwdXQ+IG9wZXJhdGlvbikgdG8gZGlzcGxheTogPC9jbWQ+Ci08aW5mbz48dWw+Ci08bGk+QSBkcm9wLWRvd24gbGlzdCB3aXRoIHRoZSBlbmRwb2ludHMgYXZhaWxhYmxlIGZvciB0aGlzIG9wZXJhdGlvbjwvbGk+Ci08bGk+RmllbGRzIGZvciBlYWNoIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoaXMgb3BlcmF0aW9uIChpbiB0aGlzIGV4YW1wbGUgdGhlCi0gPHN5c3RlbW91dHB1dD50ZW1wPC9zeXN0ZW1vdXRwdXQ+IHBhcmFtZXRlcikgYW5kIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uCi10aGUgcGFyYW1ldGVyIGlzIGxvb2tpbmcgZm9yIChpbiB0aGlzIGV4YW1wbGUgIDxzeXN0ZW1vdXRwdXQ+dGVtcDwvc3lzdGVtb3V0cHV0PiBpcwotcmVxdWVzdGluZyBhbiBpbnRlZ2VyKS48aW1hZ2UgYWx0PSJJbnZva2UgYSBXU0RMIE9wZXJhdGlvbiBwYW5lIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiCi1ocmVmPSIuLi9pbWFnZXMvd3NkbG9wLmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT4gIFRoZSBGb3JtIHZpZXcgYWxsb3dzCi15b3UgdG8gZW50ZXIgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBXZWIgc2VydmljZSBvcGVyYXRpb24gY2FsbC4gUGFyYW1ldGVycwotbmFtZXMgYXJlIGRpc3BsYXllZCBhcyBsaW5rcyB3aG9zZSBhY3Rpb24gaXMgdG8gZGlzcGxheSBhIGRpYWxvZyBkZXNjcmliaW5nCi1lbWJlZGRlZCBYTUwgU2NoZW1hIERlZmluaXRpb24gTGFuZ3VhZ2UgKFhTRCkgaW5mb3JtYXRpb24uIE1vcmUgaW5mb3JtYXRpb24KLWFib3V0IFhTRCBjYW4gYmUgZm91bmQgaGVyZTogIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy94c2QvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL3hzZC88L3hyZWY+IAotIDxpbWFnZSBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIHRoZSBYU0QgSW5mb3JtYXRpb24gRGlhbG9nIiBocmVmPSIuLi9pbWFnZXMvc2NlbmFyaW83LmdpZiIKLXBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+ICZuYnNwOzwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHlvdXIgaW50ZWdlciBhbmQgY2xpY2sgIDxiPkdvPC9iPi4gVGhlIHJlc3VsdCBpcyByZXR1cm5lZAotaW4gdGhlIFN0YXR1cyBwYW5lLiAgIDxpbWFnZSBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIGFuIGludm9rZWQgV1NETCBvcGVyYXRpb24gc2hvd2luZyB0aGUgcmVzdWx0IGluIHRoZSBTdGF0dXMgcGFuZSIKLWhyZWY9Ii4uL2ltYWdlcy93c2Rsb3ByZXQuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPiAmbmJzcDs8L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSBhcmUgdXNpbmcgU09BUCBhcyB5b3VyIGJpbmRpbmcgbWV0aG9kLCBjbGlja2luZyBTb3VyY2Ugb3IKLUZvcm0gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQgY29ybmVyIHdpbGwgdG9nZ2xlIHRoZSBkaXNwbGF5IGJldHdlZW4gdGhlIEZvcm0KLXZpZXcgKHNob3duIGFib3ZlKSBhbmQgdGhlIFNvdXJjZSB2aWV3LCB3aGljaCBkaXNwbGF5cyB0aGUgU09BUCBtZXNzYWdlIGluCi10aGUgWE1MIGZvcm1hdC4gWW91IGNhbiBhbHNvIGVudGVyIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIGluIHRoZSBmb3JtLCBvbmx5Ci1pbiBYTUwgZm9ybWF0ICh0aGlzIGlzIHN1Z2dlc3RlZCBmb3IgYWR2YW5jZWQgdXNlcnMgb25seSkuIFRoZSBFeHBsb3JlciBkb2VzCi12YWxpZGF0ZSB0aGUgWE1MIGlmIHlvdSBtb2RpZnkgaXQsIGJ1dCBub3QgdGhlIHBhcmFtZXRlciB2YWx1ZXMgeW91IGVudGVyLgotIDxpbWFnZSBhbHQ9IlNvdXJjZSB2aWV3IG9mIHRoZSBJbnZva2UgYSBXU0RMIE9wZXJhdGlvbiBwYW5lLiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxvcHJldHguZ2lmIgotcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSBhcmUgdXNpbmcgU09BUCBhcyB5b3VyIGJpbmRpbmcgdHlwZSwgeW91IHdpbGwgYWxzbyBoYXZlCi10aGUgb3B0aW9uIG9mIHRvZ2dsaW5nIHRoZSBTdGF0dXMgcGFuZSBiZXR3ZWVuIHRoZSBTb3VyY2UgYW5kIEZvcm0gdmlld3MuCi1UaGUgU291cmNlIHZpZXcgc2hvd3MgdGhlIFNPQVAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgZW52ZWxvcGVzLCBpbmNsdWRpbmcgdGhlCi1wYXJhbWV0ZXJzIHlvdSBoYXZlIGVudGVyZWQgdG8gdGVzdCB0aGUgc2VydmljZSBhbmQgdGhlIHJldHVybmVkIHZhbHVlLiAgIDxpbWFnZQotYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgc291cmNlIHZpZXcgb2YgdGhlIFNPQVAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgZW52ZWxvcGVzIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxzdGF0eC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+IDwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dGVzdHdzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTIxYjhiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXU0RMIGRvY3VtZW50cyBhbGxvdyBkZXZlbG9wZXJzIHRvIGV4cG9zZSB0aGVpciBhcHBsaWNhdGlvbnMgYXMgbmV0d29yay1hY2Nlc3NpYmxlIHNlcnZpY2VzIG9uIHRoZSBJbnRlcm5ldC4gVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbGxvd3MgeW91IHRvIGV4cGxvcmUsIGltcG9ydCwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldTREwgZG9jdW1lbnRzIGFsbG93IGRldmVsb3BlcnMgdG8gZXhwb3NlIHRoZWlyIGFwcGxpY2F0aW9ucyBhcyBuZXR3b3JrLWFjY2Vzc2libGUgc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gZXhwbG9yZSwgaW1wb3J0LCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCB0ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgdGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHRlc3R3c2RsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR0ZXN0d3NkbCI+PGEgbmFtZT0idHRlc3R3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5UZXN0aW5nIFdTREwgZG9jdW1lbnRzIGFuZCBXZWIgc2VydmljZXMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L2gxPgotCi0KLQotCi08ZGl2PjxwPldTREwgZG9jdW1lbnRzIGFsbG93IGRldmVsb3BlcnMgdG8gZXhwb3NlIHRoZWlyIGFwcGxpY2F0aW9ucyBhcwotbmV0d29yay1hY2Nlc3NpYmxlIHNlcnZpY2VzIG9uIHRoZSBJbnRlcm5ldC4gVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlcgotYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMKLW9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFsbG93cyB5b3UKLXRvIGV4cGxvcmUsIGltcG9ydCwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOiBUbyB1c2UgdGhlIFdTREwgRXhwbG9yZXI6PHVsPgotPGxpPllvdSBtdXN0IGhhdmUgYSB2YWxpZCBVUkwgZm9yIGEgV1NETCBkb2N1bWVudC48L2xpPgotCi08bGk+WW91IG11c3QgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFdTREwgRXhwbG9yZXIgYWxsb3dzIHlvdSB0byBleHBsb3JlLCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGV4cGxvcmluZyBXU0RMIGRvY3VtZW50cyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciwKLXJlZmVyIHRvIDxhIGhyZWY9InR3c2RsZXhwLmh0bWwiPlVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC9hPiAuPC9wPgotPHA+VG8KLXRlc3QgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgV1NETCBFeHBsb3Jlcjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UbyBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIHN3aXRjaCB0byB0aGUgV1NETCBFeHBsb3JlciBieQotY2xpY2tpbmcgdGhlIGljb24gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQgY29ybmVyICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxpY29uLmdpZiIgYWx0PSJJY29uIHRvIGxhdW5jaCB0aGUgV1NETCBFeHBsb3JlciIgLz4uIDwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCBXU0RMIE1haW4gaW4gdGhlIE5hdmlnYXRvciBwYW5lLCBlbnRlciBvciBicm93c2UgdG8gYW4gZXhpc3RpbmcKLVdTREwgVVJMIGluIHRoZSByaWdodC1oYW5kIHBhbmUsIGFuZCBjbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPi4gRm9yIHRoaXMgZXhhbXBsZSB0aGUKLVdTREwgYmVpbmcgdXNlZCBpcyBhIFdlYiBTZXJ2aWNlIHdoaWNoIGNvbnZlcnRzIHRlbXBlcmF0dXJlIGZyb20gQ2Vsc2l1cyB0bwotRmFocmVuaGVpdCBvciBGYWhyZW5oZWl0IHRvIENlbHNpdXMuICAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsdGVtcC5naWYiIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgdGhlIFdTREwgTWFpbiBwYW5lIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIC8+PGJyIC8+ICBUaGUgZm9sbG93aW5nIG5vZGVzCi13aWxsIGJlIGFkZGVkIHRvIHRoZSBXU0RMIHRyZWU6IDwvc3Bhbj4gPHVsPgotPGxpPlRoZSBXU0RMIG5vZGU6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxub2RlLmdpZiIgYWx0PSJXU0RMIG5vZGUgaWNvbiIgLz48L2xpPgotCi08bGk+VGhlIHNlcnZpY2Ugbm9kZSAod2hpY2ggcmVwcmVzZW50cyBhIHNlcnZpY2UgZWxlbWVudCB3aXRoaW4gdGhlIFdTREwgZmlsZSk6Ci0gPGltZyBzcmM9Ii4uL2ltYWdlcy9zZXJ2bm9kZS5naWYiIGFsdD0iU2VydmljZSBub2RlIGljb24iIC8+PC9saT4KLQotPGxpPlRoZSBiaW5kaW5nIG5vZGU6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL2JpbmRub2RlLmdpZiIgYWx0PSJCaW5kaW5nIG5vZGUgaWNvbiIgLz48L2xpPgotCi08bGk+VGhlIG9wZXJhdGlvbiBub2RlOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9vcG5vZGUuZ2lmIiBhbHQ9Ik9wZXJhdGlvbiBub2RlIGljb24iIC8+PC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFdTREwgQmluZGluZyBEZXRhaWxzIHBhbmUsIGNsaWNrIHRoZSBvcGVyYXRpb24gKGluIHRoaXMKLWV4YW1wbGUgdGhlICA8dHQgY2xhc3M9InN5c291dCI+Q3RvRjwvdHQ+IG9wZXJhdGlvbikgdG8gZGlzcGxheTogPC9zcGFuPgotIDx1bD4KLTxsaT5BIGRyb3AtZG93biBsaXN0IHdpdGggdGhlIGVuZHBvaW50cyBhdmFpbGFibGUgZm9yIHRoaXMgb3BlcmF0aW9uPC9saT4KLQotPGxpPkZpZWxkcyBmb3IgZWFjaCBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGlzIG9wZXJhdGlvbiAoaW4gdGhpcyBleGFtcGxlIHRoZQotIDx0dCBjbGFzcz0ic3lzb3V0Ij50ZW1wPC90dD4gcGFyYW1ldGVyKSBhbmQgdGhlIHR5cGUgb2YgaW5mb3JtYXRpb24KLXRoZSBwYXJhbWV0ZXIgaXMgbG9va2luZyBmb3IgKGluIHRoaXMgZXhhbXBsZSAgPHR0IGNsYXNzPSJzeXNvdXQiPnRlbXA8L3R0PiBpcwotcmVxdWVzdGluZyBhbiBpbnRlZ2VyKS48YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxvcC5naWYiIGFsdD0iSW52b2tlIGEgV1NETCBPcGVyYXRpb24gcGFuZSBvZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiAvPjxiciAvPiAgVGhlIEZvcm0gdmlldyBhbGxvd3MKLXlvdSB0byBlbnRlciB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIFdlYiBzZXJ2aWNlIG9wZXJhdGlvbiBjYWxsLiBQYXJhbWV0ZXJzCi1uYW1lcyBhcmUgZGlzcGxheWVkIGFzIGxpbmtzIHdob3NlIGFjdGlvbiBpcyB0byBkaXNwbGF5IGEgZGlhbG9nIGRlc2NyaWJpbmcKLWVtYmVkZGVkIFhNTCBTY2hlbWEgRGVmaW5pdGlvbiBMYW5ndWFnZSAoWFNEKSBpbmZvcm1hdGlvbi4gTW9yZSBpbmZvcm1hdGlvbgotYWJvdXQgWFNEIGNhbiBiZSBmb3VuZCBoZXJlOiAgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy94c2QvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL3hzZC88L2E+IAotIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvc2NlbmFyaW83LmdpZiIgYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgWFNEIEluZm9ybWF0aW9uIERpYWxvZyIgLz48YnIgLz4gwqA8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FbnRlciB5b3VyIGludGVnZXIgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBUaGUgcmVzdWx0IGlzIHJldHVybmVkCi1pbiB0aGUgU3RhdHVzIHBhbmUuICAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2Rsb3ByZXQuZ2lmIiBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIGFuIGludm9rZWQgV1NETCBvcGVyYXRpb24gc2hvd2luZyB0aGUgcmVzdWx0IGluIHRoZSBTdGF0dXMgcGFuZSIgLz48YnIgLz4gwqA8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3UgYXJlIHVzaW5nIFNPQVAgYXMgeW91ciBiaW5kaW5nIG1ldGhvZCwgY2xpY2tpbmcgU291cmNlIG9yCi1Gb3JtIGluIHRoZSB1cHBlciByaWdodC1oYW5kIGNvcm5lciB3aWxsIHRvZ2dsZSB0aGUgZGlzcGxheSBiZXR3ZWVuIHRoZSBGb3JtCi12aWV3IChzaG93biBhYm92ZSkgYW5kIHRoZSBTb3VyY2Ugdmlldywgd2hpY2ggZGlzcGxheXMgdGhlIFNPQVAgbWVzc2FnZSBpbgotdGhlIFhNTCBmb3JtYXQuIFlvdSBjYW4gYWxzbyBlbnRlciB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBpbiB0aGUgZm9ybSwgb25seQotaW4gWE1MIGZvcm1hdCAodGhpcyBpcyBzdWdnZXN0ZWQgZm9yIGFkdmFuY2VkIHVzZXJzIG9ubHkpLiBUaGUgRXhwbG9yZXIgZG9lcwotdmFsaWRhdGUgdGhlIFhNTCBpZiB5b3UgbW9kaWZ5IGl0LCBidXQgbm90IHRoZSBwYXJhbWV0ZXIgdmFsdWVzIHlvdSBlbnRlci4KLSA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxvcHJldHguZ2lmIiBhbHQ9IlNvdXJjZSB2aWV3IG9mIHRoZSBJbnZva2UgYSBXU0RMIE9wZXJhdGlvbiBwYW5lLiIgLz48YnIgLz48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3UgYXJlIHVzaW5nIFNPQVAgYXMgeW91ciBiaW5kaW5nIHR5cGUsIHlvdSB3aWxsIGFsc28gaGF2ZQotdGhlIG9wdGlvbiBvZiB0b2dnbGluZyB0aGUgU3RhdHVzIHBhbmUgYmV0d2VlbiB0aGUgU291cmNlIGFuZCBGb3JtIHZpZXdzLgotVGhlIFNvdXJjZSB2aWV3IHNob3dzIHRoZSBTT0FQIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGVudmVsb3BlcywgaW5jbHVkaW5nIHRoZQotcGFyYW1ldGVycyB5b3UgaGF2ZSBlbnRlcmVkIHRvIHRlc3QgdGhlIHNlcnZpY2UgYW5kIHRoZSByZXR1cm5lZCB2YWx1ZS4gICA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxzdGF0eC5naWYiIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgdGhlIHNvdXJjZSB2aWV3IG9mIHRoZSBTT0FQIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGVudmVsb3BlcyIgLz48YnIgLz4gPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ4YmQzOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0dWRkaWV4cCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMgd2l0aCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+VGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzCi1hbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIDwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgU2VydmljZXM8aW5kZXh0ZXJtPnB1Ymxpc2hpbmc8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPmJ1c2luZXNzIGVudGl0aWVzPGluZGV4dGVybT5wdWJsaXNoaW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+cHVibGlzaGluZyBXZWIgc2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VURESSBlbmFibGVzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGJ5IHByb3ZpZGluZyBhIGRpc3RyaWJ1dGVkCi1yZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpciBzZXJ2aWNlIGRlc2NyaXB0aW9ucywgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24KLVhNTCBmb3JtYXQuJm5ic3A7IEluIG9yZGVyIGZvciBhIHNlcnZpY2UgcmVxdWVzdG9yIHRvIGRpc2NvdmVyIGEgc2VydmljZSwKLWEgc2VydmljZSBwcm92aWRlciBtdXN0IGZpcnN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgYW5kIGF0IGxlYXN0IG9uZSBidXNpbmVzcwotc2VydmljZSwgYW5kIHNlcnZpY2UgaW50ZXJmYWNlIGluIGEgVURESSByZWdpc3RyeS4mbmJzcDsgVGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXIgaXMgYSBXZWIgYXBwbGljYXRpb24gdGhhdCBzdXBwb3J0cyB0aGUgcHVibGljYXRpb24sIGRpc2NvdmVyeSwgYW5kCi1tYWludGVuYW5jZSBvZiBidXNpbmVzcyBlbnRpdGllcywgYnVzaW5lc3Mgc2VydmljZXMsIGFuZCBzZXJ2aWNlIGludGVyZmFjZXMuPC9wPjxwPldTSUwKLWVuYWJsZXMgdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYnkgZGVmaW5pbmcgYSBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeQotbWV0aG9kIHRoYXQgc3VwcGxpZXMgcmVmZXJlbmNlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBhdCB0aGUgc2VydmljZSBwcm92aWRlcidzCi1wb2ludC1vZi1vZmZlcmluZywgYnkgc3BlY2lmeWluZyBob3cgdG8gaW5zcGVjdCBhIFdlYiBzaXRlIGZvciBhdmFpbGFibGUgV2ViCi1zZXJ2aWNlcy4mbmJzcDsgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIgc2l0ZQotd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuJm5ic3A7U2luY2UgV1NJTCBmb2N1c2VzIG9uCi1kaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBjb21wbGVtZW50cyBVRERJIGJ5Ci1mYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gV2ViIHNpdGVzIHRoYXQKLW1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzCi15b3UgdG8gZ2VuZXJhdGUgYW5kIGV4cGxvcmUgV1NJTCBkb2N1bWVudHMuPC9wPjxwPlRoZSBmYXZvcml0ZXMgcGFnZSBvZiB0aGUKLVdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbGxvd3MgeW91IHRvIHN0b3JlIHRoZSBsb2NhdGlvbiBvZiBVRERJIHJlZ2lzdHJpZXMsCi1idXNpbmVzcyBlbnRpdGllcywgV2ViIHNlcnZpY2VzLCBzZXJ2aWNlIGludGVyZmFjZXMsIGFzIHdlbGwgYXMgV1NJTCBhbmQgV1NETAotZG9jdW1lbnRzLjwvcD48cD5Vc2UgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZwotdGFza3M6PC9wPjx1bD4KLTxsaT4gPHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5BZGQgYSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0YmttcmsuZGl0YSI+QWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3MKLXNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC94cmVmPiA8L2xpPgotPGxpPjx4cmVmIGhyZWY9InRsb2dleHAuZGl0YSI+PC94cmVmPjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRkaXNjb3YuZGl0YSI+RGlzY292ZXIgYSBXZWIgc2VydmljZTwveHJlZj4gPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHB1YmVudC5kaXRhIj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHRvIGEgcmVnaXN0cnk8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJsaXNoLmRpdGEiPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHRvIGEgcmVnaXN0cnk8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InR1bnB1Yi5kaXRhIj5SZW1vdmUgYSBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsCi1vciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnk8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InR1cGRhdGUuZGl0YSI+VXBkYXRlIGEgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLAotb3Igc2VydmljZSBpbnRlcmZhY2U8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRidXNwcm9qLmRpdGEiPk1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzPC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0YXNzZXJ0LmRpdGEiPk1hbmFnZSBwdWJsaXNoZXIgYXNzZXJ0aW9uczwveHJlZj4gPC9saT4KLTwvdWw+PHA+UHJlcmVxdWlzaXRlczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5CZWZvcmUgeW91IGNhbiB1c2UgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBwZXJmb3JtIGFueSBvZgotdGhlc2UgZnVuY3Rpb25zLCB5b3UgbXVzdCAgPHhyZWYgaHJlZj0idHJlZy5kaXRhIj5yZWdpc3RlciB3aXRoIGEgcHVibGljIHJlZ2lzdHJ5PC94cmVmPi4mbmJzcDsKLVRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCByZWdpc3RyaWVzIHdpdGggd2hpY2ggeW91IGNhbiByZWdpc3Rlci48L2NtZD48aW5mbz48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkVuc3VyZSB0aGF0IHlvdSBhcmUgdXNpbmcgYSBzdXBwb3J0ZWQgV2ViIGJyb3dzZXIuPC9jbWQ+PGluZm8+VGhlCi1mb2xsb3dpbmcgV2ViIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucyBhcmUgc3VwcG9ydGVkOjx1bD4KLTxsaT5JbnRlcm5ldCBFeHBsb3JlcjogNi4wIGFuZCB1cDwvbGk+Ci08bGk+TW96aWxsYTogMS4yLjEgYW5kIHVwPC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPi48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPjxiPktub3duIGxpbWl0YXRpb25zIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9iPjx1bD4KLTxsaT5UaGUgdGF4b25vbXkgY2F0ZWdvcmllcyBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFyZSBub3QgdHJhbnNsYXRlZAotc2luY2UgdGhleSBtdXN0IG1hdGNoIHRob3NlIGluIHRoZSBzdGFuZGFyZHMgYWRoZXJlZCB0byBieSBVRERJIChJU08sIFVOU1BTQwotNy4zLCBOQUlDUykuPC9saT4KLTxsaT5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdpbGwgbGF1bmNoIHdpdGhvdXQgdGhlIGJyb3dzZXIgdG9vbGJhciB3aGljaAotc2hvd3MsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLCB0aGUgVVJMIHRvIHRoZSBXZWIgYXBwbGljYXRpb24uIFRoaXMgVVJMIHNob3VsZAotb25seSBiZSB1c2VkIGJ5IHVzZXJzIHdpdGggYWNjZXNzaWJpbGl0eSBuZWVkcy4gVGhlIFVSTCB0byB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlciBXZWIgYXBwbGljYXRpb24gY2FuIGJlIG9idGFpbmVkIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczo8b2w+Ci08bGk+RnJvbSB0aGUgV2luZG93IG1lbnUsIHNlbGVjdCBQcmVmZXJlbmNlcy48L2xpPgotPGxpPkluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2csIHNlbGVjdCA8dWljb250cm9sPldlYiBCcm93c2VyPC91aWNvbnRyb2w+IGluCi10aGUgbGVmdCBwYW5lLjwvbGk+Ci08bGk+T24gdGhlIHJpZ2h0LCBzZWxlY3QgPHVpY29udHJvbD5Vc2UgZXh0ZXJuYWwgV2ViIEJyb3dzZXI8L3VpY29udHJvbD4uPC9saT4KLTxsaT5JbiB0aGUgPHVpY29udHJvbD5Mb2NhdGlvbjogdGV4dDwvdWljb250cm9sPiBmaWVsZCwgYnJvd3NlIG9yIHR5cGUgaW4KLXRoZSBmdWxsIHBhdGggb2YgdGhlIEludGVybmV0IEV4cGxvcmVyIGV4ZWN1dGFibGUuIChmb3IgZXhhbXBsZSwgQzpcUHJvZ3JhbQotRmlsZXNcSW50ZXJuZXQgRXhwbG9yZXJcaWV4cGxvcmUuZXhlKS48L2xpPgotPGxpPkNsaWNrIDx1aWNvbnRyb2w+QXBwbHk8L3VpY29udHJvbD4gZm9sbG93ZWQgYnkgPHVpY29udHJvbD5PSzwvdWljb250cm9sPi48L2xpPgotPC9vbD4gTm90ZSB0aGF0IHRoaXMgcHJlZmVyZW5jZSB3aWxsIG5vdyBhcHBseSB0byBhbnkgYnJvd3NlciB3aW5kb3dzIHRoYXQKLWFyZSBsYXVuY2hlZCBieSB0aGUgdXNlciBvciBieSB0aGUgdG9vbHMgdGhlbXNlbHZlcyAoc3VjaCBhcyB0aGUgVW5pdmVyc2FsCi1UZXN0IENsaWVudCkuICBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdpbGwgbm93IGxhdW5jaCBpbiBhbiBleHRlcm5hbCBicm93c2VyCi1hbmQgaXRzIFVSTCBzaG91bGQgYmUgaW4gdGhlIEFkZHJlc3MgZmllbGQuIFRoaXMgY2FuIHRoZW4gYmUgcGFzdGVkIG9yIG9wZW5lZAotdXNpbmcgYW0gYWNjZXNzaWJpbGl0eSBhc3Npc3RpbmcgYnJvd3Nlci48L2xpPgotPGxpPldoZW4gcGVyZm9ybWluZyBhbiBhZHZhbmNlZCBmaW5kIG9yIHB1Ymxpc2ggaW4gdGhlIFVEREkgcGFnZSBvZiB0aGUgV2ViCi1TZXJ2aWNlcyBFeHBsb3JlciwgdGhlIGl0ZW1zIGluIHRoZSBkcm9wIGRvd24gbGlzdCBmb3IgcGlja2luZyBhIGxhbmd1YWdlCi1pbiBjb25qdW5jdGlvbiB3aXRoIGEgbmFtZSBvciBkZXNjcmlwdGlvbiBpcyBzb3J0ZWQgIGFjY29yZGluZyB0byB0aGUgb3BlcmF0aW5nCi1zeXN0ZW0ncyBsb2NhbGUgc2V0dGluZ3MuIE9uIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJNaWNyb3NvZnQgQ29ycG9yYXRpb24iCi10bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJXaW5kb3dzIj5XaW5kb3dzPC90bT4sIHRoaXMgb3JkZXIgbWF5IGJlIG1hbmFnZWQgdGhyb3VnaAotdGhlIENvbnRyb2wgUGFuZWwuIFRvIGRvIHRoaXM6PG9sPgotPGxpPk9wZW4gdGhlIENvbnRyb2wgUGFuZWwuPC9saT4KLTxsaT5MYXVuY2ggdGhlIFJlZ2lvbmFsIE9wdGlvbnMgY29udHJvbCBwYW5lbCBhcHBsZXQuPC9saT4KLTxsaT5JbiB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIHJlc3VsdGluZyBkaWFsb2csIHRoZXJlIG1heSBiZSBhICJTb3J0aW5nIG9yZGVyIgotZHJvcC1kb3duIGxpc3QuIElmIHNvLCBwaWNrIGEgc29ydGluZyBvcmRlciBhbmQgdGhlbiBjbGljayA8dWljb250cm9sPkFwcGx5PC91aWNvbnRyb2w+IGZvbGxvd2VkCi1ieSA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvbGk+Ci08bGk+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgdGhlIG5ldyBzb3J0aW5nIG9yZGVyIGNvbWVzIGludG8gZWZmZWN0Ci1vbmNlIHRoZSBwYWdlIHJlbG9hZHMuIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBwcmVzc2luZyB0aGUgYmFjayBhcnJvdwotZm9sbG93ZWQgYnkgdGhlIGZvcndhcmQgYXJyb3cgaW4gdGhlIG1haW4gdG9vbGJhci48L2xpPgotPC9vbD5Ob3RlOiBUaGUgaW5zdHJ1Y3Rpb25zIGFib3ZlIGFwcGx5IHRvIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJNaWNyb3NvZnQgQ29ycG9yYXRpb24iCi10bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJXaW5kb3dzIj5XaW5kb3dzPC90bT4gMjAwMC4gT24gPHRtIHRtY2xhc3M9InNwZWNpYWwiCi10bW93bmVyPSJNaWNyb3NvZnQgQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IldpbmRvd3MiPldpbmRvd3M8L3RtPiBYUCwKLXRoZSB0YWIgbWVudGlvbmVkIGluIHN0ZXAgMyBpcyBjYWxsZWQgIlJlZ2lvbmFsIE9wdGlvbnMiLiBCZXNpZGUgdGhlIGxhbmd1YWdlCi1kcm9wLWRvd24sIHRoZXJlIGlzIGEgPHVpY29udHJvbD5DdXN0b21pemU8L3VpY29udHJvbD4gYnV0dG9uLiBXaGVuIHRoaXMgaXMKLWNsaWNrZWQsIGEgbmV3IGRpYWxvZyBhcHBlYXJzLiBBIHNvcnRpbmcgdGFiIHdpbGwgYWxsb3cgdXNlcnMgdG8gcGljayB0aGUKLXNvcnRpbmcgbWV0aG9kIGlmIGFwcGxpY2FibGUuPC9saT4KLTwvdWw+PC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0d3NkbGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmExYTIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIFNlcnZpY2VzLCBwdWJsaXNoaW5nLCBvdmVydmlldywgYnVzaW5lc3MgZW50aXRpZXMsIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgcHVibGlzaGluZyBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgU2VydmljZXMsIHB1Ymxpc2hpbmcsIG92ZXJ2aWV3LCBidXNpbmVzcyBlbnRpdGllcywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBwdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR3c2RsZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR1ZGRpZXhwIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIHdpdGggdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR1ZGRpZXhwIj48YSBuYW1lPSJ0dWRkaWV4cCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9oMT4KLQotCi0KLQotPGRpdj48cD5UaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMKLWFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4gPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5VRERJIGVuYWJsZXMgdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYnkgcHJvdmlkaW5nIGEgZGlzdHJpYnV0ZWQKLXJlZ2lzdHJ5IG9mIGJ1c2luZXNzZXMgYW5kIHRoZWlyIHNlcnZpY2UgZGVzY3JpcHRpb25zLCBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbgotWE1MIGZvcm1hdC7CoCBJbiBvcmRlciBmb3IgYSBzZXJ2aWNlIHJlcXVlc3RvciB0byBkaXNjb3ZlciBhIHNlcnZpY2UsCi1hIHNlcnZpY2UgcHJvdmlkZXIgbXVzdCBmaXJzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IGFuZCBhdCBsZWFzdCBvbmUgYnVzaW5lc3MKLXNlcnZpY2UsIGFuZCBzZXJ2aWNlIGludGVyZmFjZSBpbiBhIFVEREkgcmVnaXN0cnkuwqAgVGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXIgaXMgYSBXZWIgYXBwbGljYXRpb24gdGhhdCBzdXBwb3J0cyB0aGUgcHVibGljYXRpb24sIGRpc2NvdmVyeSwgYW5kCi1tYWludGVuYW5jZSBvZiBidXNpbmVzcyBlbnRpdGllcywgYnVzaW5lc3Mgc2VydmljZXMsIGFuZCBzZXJ2aWNlIGludGVyZmFjZXMuPC9wPgotPHA+V1NJTAotZW5hYmxlcyB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcyBieSBkZWZpbmluZyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlIHByb3ZpZGVyJ3MKLXBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nIGhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yIGF2YWlsYWJsZSBXZWIKLXNlcnZpY2VzLsKgIFRoZSBXU0lMIHNwZWNpZmljYXRpb24gZGVmaW5lcyB0aGUgbG9jYXRpb25zIG9uIGEgV2ViIHNpdGUKLXdoZXJlIHlvdSBjYW4gbG9vayBmb3IgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLsKgU2luY2UgV1NJTCBmb2N1c2VzIG9uCi1kaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBjb21wbGVtZW50cyBVRERJIGJ5Ci1mYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gV2ViIHNpdGVzIHRoYXQKLW1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzCi15b3UgdG8gZ2VuZXJhdGUgYW5kIGV4cGxvcmUgV1NJTCBkb2N1bWVudHMuPC9wPgotPHA+VGhlIGZhdm9yaXRlcyBwYWdlIG9mIHRoZQotV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gc3RvcmUgdGhlIGxvY2F0aW9uIG9mIFVEREkgcmVnaXN0cmllcywKLWJ1c2luZXNzIGVudGl0aWVzLCBXZWIgc2VydmljZXMsIHNlcnZpY2UgaW50ZXJmYWNlcywgYXMgd2VsbCBhcyBXU0lMIGFuZCBXU0RMCi1kb2N1bWVudHMuPC9wPgotPHA+VXNlIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gZG8gYW55IG9mIHRoZSBmb2xsb3dpbmcKLXRhc2tzOjwvcD4KLTx1bD4KLTxsaT4gPGEgaHJlZj0idGFkZHJlZy5odG1sIj5BZGQgYSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InRia21yay5odG1sIj5BZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvYT4gPC9saT4KLQotPGxpPjxhIGhyZWY9InRsb2dleHAuaHRtbCIgdGl0bGU9IklmIHlvdSBoYXZlIHB1Ymxpc2hlZCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSB5b3UgY2FuJiMxMDtsb2cgaW50byB0aGUgcmVnaXN0cnkgYW5kIG1hbmFnZSB0aGUgc2VydmljZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIj5Mb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeTwvYT48L2xpPgotCi08bGk+IDxhIGhyZWY9InRkaXNjb3YuaHRtbCI+RGlzY292ZXIgYSBXZWIgc2VydmljZTwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0cHViZW50Lmh0bWwiPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdG8gYSByZWdpc3RyeTwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0cHVibGlzaC5odG1sIj5QdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB0byBhIHJlZ2lzdHJ5PC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InR1bnB1Yi5odG1sIj5SZW1vdmUgYSBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeTwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0dXBkYXRlLmh0bWwiPlVwZGF0ZSBhIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2U8L2E+IDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idGJ1c3Byb2ouaHRtbCI+TWFuYWdlIHJlZmVyZW5jZWQgc2VydmljZXM8L2E+IDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idGFzc2VydC5odG1sIj5NYW5hZ2UgcHVibGlzaGVyIGFzc2VydGlvbnM8L2E+IDwvbGk+Ci0KLTwvdWw+Ci08cD5QcmVyZXF1aXNpdGVzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIHBlcmZvcm0gYW55IG9mCi10aGVzZSBmdW5jdGlvbnMsIHlvdSBtdXN0ICA8YSBocmVmPSJ0cmVnLmh0bWwiPnJlZ2lzdGVyIHdpdGggYSBwdWJsaWMgcmVnaXN0cnk8L2E+LsKgCi1UaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgcmVnaXN0cmllcyB3aXRoIHdoaWNoIHlvdSBjYW4gcmVnaXN0ZXIuPC9zcGFuPiAKLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+RW5zdXJlIHRoYXQgeW91IGFyZSB1c2luZyBhIHN1cHBvcnRlZCBXZWIgYnJvd3Nlci48L3NwYW4+IFRoZQotZm9sbG93aW5nIFdlYiBicm93c2VycyBhbmQgdmVyc2lvbnMgYXJlIHN1cHBvcnRlZDo8dWw+Ci08bGk+SW50ZXJuZXQgRXhwbG9yZXI6IDYuMCBhbmQgdXA8L2xpPgotCi08bGk+TW96aWxsYTogMS4yLjEgYW5kIHVwPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48ZGl2IGNsYXNzPSJwIj48c3Ryb25nPktub3duIGxpbWl0YXRpb25zIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9zdHJvbmc+PHVsPgotPGxpPlRoZSB0YXhvbm9teSBjYXRlZ29yaWVzIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYXJlIG5vdCB0cmFuc2xhdGVkCi1zaW5jZSB0aGV5IG11c3QgbWF0Y2ggdGhvc2UgaW4gdGhlIHN0YW5kYXJkcyBhZGhlcmVkIHRvIGJ5IFVEREkgKElTTywgVU5TUFNDCi03LjMsIE5BSUNTKS48L2xpPgotCi08bGk+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB3aWxsIGxhdW5jaCB3aXRob3V0IHRoZSBicm93c2VyIHRvb2xiYXIgd2hpY2gKLXNob3dzLCBhbW9uZ3N0IG90aGVyIHRoaW5ncywgdGhlIFVSTCB0byB0aGUgV2ViIGFwcGxpY2F0aW9uLiBUaGlzIFVSTCBzaG91bGQKLW9ubHkgYmUgdXNlZCBieSB1c2VycyB3aXRoIGFjY2Vzc2liaWxpdHkgbmVlZHMuIFRoZSBVUkwgdG8gdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXIgV2ViIGFwcGxpY2F0aW9uIGNhbiBiZSBvYnRhaW5lZCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RlcHM6PG9sPgotPGxpPkZyb20gdGhlIFdpbmRvdyBtZW51LCBzZWxlY3QgUHJlZmVyZW5jZXMuPC9saT4KLQotPGxpPkluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2csIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgQnJvd3Nlcjwvc3Bhbj4gaW4KLXRoZSBsZWZ0IHBhbmUuPC9saT4KLQotPGxpPk9uIHRoZSByaWdodCwgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlVzZSBleHRlcm5hbCBXZWIgQnJvd3Nlcjwvc3Bhbj4uPC9saT4KLQotPGxpPkluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Mb2NhdGlvbjogdGV4dDwvc3Bhbj4gZmllbGQsIGJyb3dzZSBvciB0eXBlIGluCi10aGUgZnVsbCBwYXRoIG9mIHRoZSBJbnRlcm5ldCBFeHBsb3JlciBleGVjdXRhYmxlLiAoZm9yIGV4YW1wbGUsIEM6XFByb2dyYW0KLUZpbGVzXEludGVybmV0IEV4cGxvcmVyXGlleHBsb3JlLmV4ZSkuPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFwcGx5PC9zcGFuPiBmb2xsb3dlZCBieSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PSzwvc3Bhbj4uPC9saT4KLQotPC9vbD4KLSBOb3RlIHRoYXQgdGhpcyBwcmVmZXJlbmNlIHdpbGwgbm93IGFwcGx5IHRvIGFueSBicm93c2VyIHdpbmRvd3MgdGhhdAotYXJlIGxhdW5jaGVkIGJ5IHRoZSB1c2VyIG9yIGJ5IHRoZSB0b29scyB0aGVtc2VsdmVzIChzdWNoIGFzIHRoZSBVbml2ZXJzYWwKLVRlc3QgQ2xpZW50KS4gIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgd2lsbCBub3cgbGF1bmNoIGluIGFuIGV4dGVybmFsIGJyb3dzZXIKLWFuZCBpdHMgVVJMIHNob3VsZCBiZSBpbiB0aGUgQWRkcmVzcyBmaWVsZC4gVGhpcyBjYW4gdGhlbiBiZSBwYXN0ZWQgb3Igb3BlbmVkCi11c2luZyBhbSBhY2Nlc3NpYmlsaXR5IGFzc2lzdGluZyBicm93c2VyLjwvbGk+Ci0KLTxsaT5XaGVuIHBlcmZvcm1pbmcgYW4gYWR2YW5jZWQgZmluZCBvciBwdWJsaXNoIGluIHRoZSBVRERJIHBhZ2Ugb2YgdGhlIFdlYgotU2VydmljZXMgRXhwbG9yZXIsIHRoZSBpdGVtcyBpbiB0aGUgZHJvcCBkb3duIGxpc3QgZm9yIHBpY2tpbmcgYSBsYW5ndWFnZQotaW4gY29uanVuY3Rpb24gd2l0aCBhIG5hbWUgb3IgZGVzY3JpcHRpb24gaXMgc29ydGVkICBhY2NvcmRpbmcgdG8gdGhlIG9wZXJhdGluZwotc3lzdGVtJ3MgbG9jYWxlIHNldHRpbmdzLiBPbiBXaW5kb3dzPHN1cD7Crjwvc3VwPiwgdGhpcyBvcmRlciBtYXkgYmUgbWFuYWdlZCB0aHJvdWdoCi10aGUgQ29udHJvbCBQYW5lbC4gVG8gZG8gdGhpczo8b2w+Ci08bGk+T3BlbiB0aGUgQ29udHJvbCBQYW5lbC48L2xpPgotCi08bGk+TGF1bmNoIHRoZSBSZWdpb25hbCBPcHRpb25zIGNvbnRyb2wgcGFuZWwgYXBwbGV0LjwvbGk+Ci0KLTxsaT5JbiB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIHJlc3VsdGluZyBkaWFsb2csIHRoZXJlIG1heSBiZSBhICJTb3J0aW5nIG9yZGVyIgotZHJvcC1kb3duIGxpc3QuIElmIHNvLCBwaWNrIGEgc29ydGluZyBvcmRlciBhbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BcHBseTwvc3Bhbj4gZm9sbG93ZWQKLWJ5IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L2xpPgotCi08bGk+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgdGhlIG5ldyBzb3J0aW5nIG9yZGVyIGNvbWVzIGludG8gZWZmZWN0Ci1vbmNlIHRoZSBwYWdlIHJlbG9hZHMuIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBwcmVzc2luZyB0aGUgYmFjayBhcnJvdwotZm9sbG93ZWQgYnkgdGhlIGZvcndhcmQgYXJyb3cgaW4gdGhlIG1haW4gdG9vbGJhci48L2xpPgotCi08L29sPgotTm90ZTogVGhlIGluc3RydWN0aW9ucyBhYm92ZSBhcHBseSB0byBXaW5kb3dzIDIwMDAuIE9uIFdpbmRvd3MgWFAsCi10aGUgdGFiIG1lbnRpb25lZCBpbiBzdGVwIDMgaXMgY2FsbGVkICJSZWdpb25hbCBPcHRpb25zIi4gQmVzaWRlIHRoZSBsYW5ndWFnZQotZHJvcC1kb3duLCB0aGVyZSBpcyBhIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkN1c3RvbWl6ZTwvc3Bhbj4gYnV0dG9uLiBXaGVuIHRoaXMgaXMKLWNsaWNrZWQsIGEgbmV3IGRpYWxvZyBhcHBlYXJzLiBBIHNvcnRpbmcgdGFiIHdpbGwgYWxsb3cgdXNlcnMgdG8gcGljayB0aGUKLXNvcnRpbmcgbWV0aG9kIGlmIGFwcGxpY2FibGUuPC9saT4KLQotPC91bD4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHdzZGxleHAuaHRtbCIgdGl0bGU9IiI+RXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzFkNmI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR1bnB1YiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5SZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20KLWEgcmVnaXN0cnk8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5SZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlCi1mcm9tIGEgcmVnaXN0cnk8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UKLWludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5yZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5zZXJ2aWNlIGludGVyZmFjZXM8aW5kZXh0ZXJtPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPmJ1c2luZXNzIGVudGl0aWVzPGluZGV4dGVybT5yZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5VRERJPGluZGV4dGVybT5yZW1vdmluZyBzZXJ2aWNlcyBmcm9tIGEgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT4gPHhyZWYgaHJlZj0idHB1YmVudC5kaXRhIj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5PC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0cHVibGlzaC5kaXRhIj5QdWJsaXNoIGEgV2ViIHNlcnZpY2U8L3hyZWY+LjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJsaXNoLmRpdGEiPlB1Ymxpc2ggYSBzZXJ2aWNlIGludGVyZmFjZTwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+LjwvbGk+Ci08L29sPjwvcHJlcmVxPgotPGNvbnRleHQ+VG8gdW5wdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UKLXVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5OYXZpZ2F0ZSB0aHJvdWdoIHRoZSByZWdpc3RyeSBoaWVyYXJjaHkgdG8gZmluZCB0aGUgYnVzaW5lc3MgZW50aXR5LAotV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIHlvdSB3YW50IHRvIHVucHVibGlzaC4gU2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBpY29uIGJhciwgY2xpY2sgdGhlICA8dWljb250cm9sPlVucHVibGlzaDwvdWljb250cm9sPiBpY29uLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgYW5kIHBhc3N3b3JkLCBpZiBuZWNlc3NhcnksCi10aGVuIGNsaWNrICA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBpcyByZW1vdmVkCi1mcm9tIHRoZSByZWdpc3RyeSBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aAoteW91ciBjaGFuZ2UuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cHViZW50LmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRwdWJsaXNoLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InR1bnB1Yi5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0dXBkYXRlLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVucHViLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkODVkNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJSZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQWZ0ZXIgeW91IGhhdmUgcHVibGlzaGVkIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UsIHlvdSBjYW4gcmVtb3ZlIG9yIHVucHVibGlzaCBpdCB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCByZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeSwgc2VydmljZSBpbnRlcmZhY2VzLCBidXNpbmVzcyBlbnRpdGllcywgVURESSwgcmVtb3Zpbmcgc2VydmljZXMgZnJvbSBhIHJlZ2lzdHJ5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCByZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeSwgc2VydmljZSBpbnRlcmZhY2VzLCBidXNpbmVzcyBlbnRpdGllcywgVURESSwgcmVtb3Zpbmcgc2VydmljZXMgZnJvbSBhIHJlZ2lzdHJ5IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHB1YmVudC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cHVibGlzaC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dW5wdWIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVwZGF0ZS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0dW5wdWIiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5SZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlCi1mcm9tIGEgcmVnaXN0cnk8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR1bnB1YiI+PGEgbmFtZT0idHVucHViIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5SZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20KLWEgcmVnaXN0cnk8L2gxPgotCi0KLQotCi08ZGl2PjxwPkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UKLWludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPiA8YSBocmVmPSJ0cHViZW50Lmh0bWwiPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHk8L2E+LjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHB1Ymxpc2guaHRtbCI+UHVibGlzaCBhIFdlYiBzZXJ2aWNlPC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRwdWJsaXNoLmh0bWwiPlB1Ymxpc2ggYSBzZXJ2aWNlIGludGVyZmFjZTwvYT4uPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4uPC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyB1bnB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZQotdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk5hdmlnYXRlIHRocm91Z2ggdGhlIHJlZ2lzdHJ5IGhpZXJhcmNoeSB0byBmaW5kIHRoZSBidXNpbmVzcyBlbnRpdHksCi1XZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgeW91IHdhbnQgdG8gdW5wdWJsaXNoLiBTZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIGljb24gYmFyLCBjbGljayB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlVucHVibGlzaDwvc3Bhbj4gaWNvbi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIGFuZCBwYXNzd29yZCwgaWYgbmVjZXNzYXJ5LAotdGhlbiBjbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgaXMgcmVtb3ZlZAotZnJvbSB0aGUgcmVnaXN0cnkgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHdpdGgKLXlvdXIgY2hhbmdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRwdWJlbnQuaHRtbCIgdGl0bGU9IkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLCB5b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LiI+UHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHB1Ymxpc2guaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZSwgYWxzbyBrbm93biBhcyB0aGUgYnVzaW5lc3Mgc2VydmljZSwgZGVzY3JpYmVzIGEgV2ViIHNlcnZpY2UncyBlbmRwb2ludCBhbmQgd2hlcmUgaXRzIFdTREwgZmlsZSByZXNpZGVzLiBUaGUgV1NETCBmaWxlIGxpc3RzIHRoZSBvcGVyYXRpb25zIHRoYXQgc2VydmljZSBwcm92aWRlcy4iPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHVucHViLmh0bWwiIHRpdGxlPSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0dXBkYXRlLmh0bWwiIHRpdGxlPSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiI+VXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZmRkMjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVwZGF0ZS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR1cGRhdGUiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+VXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UKLWludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5idXNpbmVzcyBlbnRpdGllczxpbmRleHRlcm0+dXBkYXRpbmcgaW4gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPnNlcnZpY2UgaW50ZXJmYWNlczxpbmRleHRlcm0+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJlbnQuZGl0YSI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eTwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHB1Ymxpc2guZGl0YSI+UHVibGlzaCBhIFdlYiBzZXJ2aWNlPC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0cHVibGlzaC5kaXRhIj5QdWJsaXNoIGEgc2VydmljZSBpbnRlcmZhY2U8L3hyZWY+LjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPi48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxjb250ZXh0PlRvIHVwZGF0ZSBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIHVzaW5nCi10aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+TmF2aWdhdGUgdGhyb3VnaCB0aGUgcmVnaXN0cnkgaGllcmFyY2h5IHRvIGZpbmQgdGhlIGJ1c2luZXNzIGVudGl0eSwKLVdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSB5b3Ugd2FudCB0byB1cGRhdGUuIFNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgaWNvbiBiYXIsIGNsaWNrIHRoZSAgPHVpY29udHJvbD5EZXRhaWxzPC91aWNvbnRyb2w+IGljb24uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPk1ha2UgYW55IG5lY2Vzc2FyeSBjaGFuZ2VzIGFuZCBlbnRlciB5b3VyIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIKLUlELCBhbmQgcGFzc3dvcmQsIGlmIG5lY2Vzc2FyeSwgdGhlbiBjbGljayAgPHVpY29udHJvbD5HbzwvdWljb250cm9sPi48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBpcyB1cGRhdGVkCi1pbiB0aGUgcmVnaXN0cnkgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHdpdGgKLXlvdXIgY2hhbmdlLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHB1YmVudC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cHVibGlzaC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0dW5wdWIuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMTc5NTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVwZGF0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iVXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiIgLz4KLTxtZXRhIGNvbnRlbnQ9ImJ1c2luZXNzIGVudGl0aWVzLCB1cGRhdGluZyBpbiBhIFVEREkgcmVnaXN0cnksIFdlYiBzZXJ2aWNlcywgdXBkYXRpbmcgVURESSByZWdpc3RyaWVzLCBzZXJ2aWNlIGludGVyZmFjZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJidXNpbmVzcyBlbnRpdGllcywgdXBkYXRpbmcgaW4gYSBVRERJIHJlZ2lzdHJ5LCBXZWIgc2VydmljZXMsIHVwZGF0aW5nIFVEREkgcmVnaXN0cmllcywgc2VydmljZSBpbnRlcmZhY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHB1YmVudC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cHVibGlzaC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dW5wdWIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHVwZGF0ZSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR1cGRhdGUiPjxhIG5hbWU9InR1cGRhdGUiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2U8L2gxPgotCi0KLQotPGRpdj48cD5BZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlCi1pbnRlcmZhY2UsIHlvdSBjYW4gdXBkYXRlIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPiA8YSBocmVmPSJ0cHViZW50Lmh0bWwiPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHk8L2E+LjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHB1Ymxpc2guaHRtbCI+UHVibGlzaCBhIFdlYiBzZXJ2aWNlPC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRwdWJsaXNoLmh0bWwiPlB1Ymxpc2ggYSBzZXJ2aWNlIGludGVyZmFjZTwvYT4uPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4uPC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyB1cGRhdGUgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSB1c2luZwotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk5hdmlnYXRlIHRocm91Z2ggdGhlIHJlZ2lzdHJ5IGhpZXJhcmNoeSB0byBmaW5kIHRoZSBidXNpbmVzcyBlbnRpdHksCi1XZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgeW91IHdhbnQgdG8gdXBkYXRlLiBTZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIGljb24gYmFyLCBjbGljayB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRldGFpbHM8L3NwYW4+IGljb24uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPk1ha2UgYW55IG5lY2Vzc2FyeSBjaGFuZ2VzIGFuZCBlbnRlciB5b3VyIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIKLUlELCBhbmQgcGFzc3dvcmQsIGlmIG5lY2Vzc2FyeSwgdGhlbiBjbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBpcyB1cGRhdGVkCi1pbiB0aGUgcmVnaXN0cnkgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHdpdGgKLXlvdXIgY2hhbmdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRwdWJlbnQuaHRtbCIgdGl0bGU9IkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLCB5b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LiI+UHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHB1Ymxpc2guaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZSwgYWxzbyBrbm93biBhcyB0aGUgYnVzaW5lc3Mgc2VydmljZSwgZGVzY3JpYmVzIGEgV2ViIHNlcnZpY2UncyBlbmRwb2ludCBhbmQgd2hlcmUgaXRzIFdTREwgZmlsZSByZXNpZGVzLiBUaGUgV1NETCBmaWxlIGxpc3RzIHRoZSBvcGVyYXRpb25zIHRoYXQgc2VydmljZSBwcm92aWRlcy4iPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHVucHViLmh0bWwiIHRpdGxlPSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDk0Yzg5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR3c2RsZXhwIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC90aXRsZT4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+ZXhwbG9yaW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5leHBsb3JpbmcgV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT5QcmVyZXF1aXNpdGVzOiBUbyB1c2UgdGhlIFdTREwgRXhwbG9yZXIsIHlvdSBtdXN0IGhhdmUgYSB2YWxpZCBVUkwKLWZvciBhIFdTREwgZG9jdW1lbnQuPC9wcmVyZXE+Ci08Y29udGV4dD5UaGUgV1NETCBFeHBsb3JlciBhbGxvd3MgeW91IHRvIGV4cGxvcmUsIGFuZCB0ZXN0IFdTREwgZG9jdW1lbnRzLgotVGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIFdTREwgRXhwbG9yZXI6PHVsPgotPGxpPlNob3cgV1NETCBkZXRhaWxzOiAgPGltYWdlIGFsdD0iV1NETCBEZXRhaWxzIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2RsZHRsaWNvbi5naWYiPgotPC9pbWFnZT48L2xpPgotPGxpPkltcG9ydCBXU0RMIHRvIHRoZSBXb3JrYmVuY2g6ICA8aW1hZ2UgYWx0PSJJbXBvcnQgV1NETCB0byB0aGUgV29ya2JlbmNoIGljb24iCi1ocmVmPSIuLi9pbWFnZXMvbXB0d3NkbGljb24uZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+SW1wb3J0IFdTREwgdG8geW91ciBmaWxlIHN5c3RlbTogIDxpbWFnZSBhbHQ9IkltcG9ydCBXU0RMIHRvIHlvdXIgZmlsZSBzeXN0ZW0gaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy9mc3dzZGxpY29uLmdpZiI+PC9pbWFnZT48L2xpPgotPGxpPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkOiAgPGltYWdlIGFsdD0iTGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQgaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy93c3dpemljb24uZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+QWRkIFdTREwgdG8gRmF2b3JpdGVzOiAgPGltYWdlIGFsdD0iQWRkIFdTREwgdG8gRmF2b3JpdGVzIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2RsZmF2aWNvbi5naWYiPgotPC9pbWFnZT48L2xpPgotPC91bD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTQ3IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV1NETCBFeHBsb3JlcjwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+U3dpdGNoIHRvIHRoZSBXU0RMIEV4cGxvcmVyIGJ5IGNsaWNraW5nIHRoZSBpY29uIGluIHRoZSB1cHBlciByaWdodC1oYW5kCi1jb3JuZXIgIDxpbWFnZSBhbHQ9Ikljb24gdG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyIiBocmVmPSIuLi9pbWFnZXMvd3NkbGljb24uZ2lmIj4KLTwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTY0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkltcG9ydGluZyBhIFdTREwgZmlsZSB0byB5b3VyIHdvcmtzcGFjZTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBpbXBvcnQgdGhlIFdTREwgZmlsZSB0byB0aGUgV29ya2JlbmNoOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkNsaWNrIHRoaXMgaWNvbjogIDxpbWFnZSBhbHQ9IkltcG9ydCBXU0RMIHRvIHRoZSBXb3JrYmVuY2ggaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYiPjwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSBwcm9qZWN0IGludG8gd2hpY2ggeW91IHdhbnQgdG8gaW1wb3J0IHRoZSBXU0RMLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5JZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBhIFdTSUwgZmlsZSBmcm9tIHRoZSBXU0RMLCBzZWxlY3QgIDxiPkltcG9ydAotYXMgYSBzZXJ2aWNlIHJlZmVyZW5jZSB0byBhIFdTSUwgZG9jdW1lbnQ8L2I+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdvPC9iPi48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGU5MCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5JbXBvcnRpbmcgYSBXU0RMIGZpbGUgdG8geW91ciBmaWxlIHN5c3RlbTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBpbXBvcnQgdGhlIFdTREwgZmlsZSB0byB5b3VyIGZpbGUgc3lzdGVtLCBjbGljayB0aGlzIGljb246Ci0gPGltYWdlIGFsdD0iSW1wb3J0IFdTREwgdG8geW91ciBmaWxlIHN5c3RlbSBpY29uIiBocmVmPSIuLi9pbWFnZXMvZnN3c2RsaWNvbi5naWYiPgotPC9pbWFnZT4uIFNwZWNpZnkgd2hlcmUgeW91IHdhbnQgdGhlIFdTREwgZmlsZSBzYXZlZCBvbiB5b3VyIHN5c3RlbS48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGU5NiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQ8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQsIGNsaWNrIHRoaXMgaWNvbjogIDxpbWFnZSBhbHQ9IkxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkIGljb24iCi1ocmVmPSIuLi9pbWFnZXMvd3N3aXppY29uLmdpZiI+PC9pbWFnZT4uIFlvdSBjYW4gc2VsZWN0IGlmIHlvdSB3YW50IHRvIGNyZWF0ZQotYSBXZWIgc2VydmljZSBjbGllbnQgb3IgYSBTa2VsZXRvbiBXZWIgc2VydmljZSBmcm9tIHRoZSBXU0RMIGZpbGUuIENsaWNrICA8Yj5HbzwvYj4gdG8KLWxhdW5jaCB0aGUgd2l6YXJkLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTEwNSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBXU0RMIGZpbGUgdG8geW91ciBmYXZvcml0ZXM8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gYWRkIHRoZSBXU0RMIGZpbGUgdG8gRmF2b3JpdGVzLCBjbGljayB0aGlzIGljb246ICA8aW1hZ2UgYWx0PSJBZGQgV1NETCB0byBGYXZvcml0ZXMgaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy93c2RsZmF2aWNvbi5naWYiPjwvaW1hZ2U+PC9wPjxwPi4gVGhlIFN0YXR1cyBwYW5lIGRpc3BsYXlzCi10aGF0IHRoZSBXU0RMIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8geW91ciBsaXN0IG9mIGZhdm9yaXRlcy4gPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlMTEwIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkV4cGxvcmluZyBXU0RMIGRvY3VtZW50cyB1c2luZyB0aGUgV1NETCBFeHBsb3Jlcjo8L3RpdGxlPgotPHRhc2tib2R5PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5TZWxlY3QgV1NETCBNYWluIGluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgZW50ZXIgb3IgYnJvd3NlIHRvIGFuIGV4aXN0aW5nCi1XU0RMIFVSTCBpbiB0aGUgcmlnaHQtaGFuZCBwYW5lLCBhbmQgY2xpY2sgIDxiPkdvPC9iPi4gTm90ZSB0aGF0IHRoZSBFeHBsb3Jlcgotd2lsbCBvbmx5IGFsbG93IHlvdSB0byBicm93c2UgZm9yIFdTREwgZmlsZXMgdGhhdCByZXNpZGUgaW4gdGhlIDxjb2RlcGg+V2ViQ29udGVudC9XU0RMPC9jb2RlcGg+IGZvbGRlcgotb2YgYSBwcm9qZWN0LiBUbyBleHBsb3JlIFdTREwgZmlsZXMgc3RvcmVkIGluIG90aGVyIGxvY2F0aW9ucyB3aXRoaW4geW91cgotd29ya3NwYWNlLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgb3Igc2VsZWN0IHRoZSBmaWxlIGluIHRoZSB3b3Jrc3BhY2UsCi1yaWdodC1jbGljayBhbmQgc2VsZWN0IDxtZW51Y2FzY2FkZT48dWljb250cm9sPldlYiBTZXJ2aWNlcyA8L3VpY29udHJvbD48dWljb250cm9sPiBMYXVuY2gKLVdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+LiBGb3IgdGhpcyBleGFtcGxlIHRoZSBXU0RMCi1iZWluZyB1c2VkIGlzIGEgV2ViIFNlcnZpY2Ugd2hpY2ggcmV0dXJucyBhIHRlbXBlcmF0dXJlIGZvciBhbnkgZW50ZXJlZCB6aXAKLWNvZGUuICAgPGltYWdlIGFsdD0iIiBocmVmPSIuLi9pbWFnZXMvd3NkbGV4cC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+IAotVGhlIGZvbGxvd2luZyBub2RlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBXU0RMIHRyZWU6IDwvY21kPjxpbmZvPjx1bD4KLTxsaT5UaGUgV1NETCBub2RlOiAgPGltYWdlIGFsdD0iV1NETCBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2Rsbm9kZS5naWYiPgotPC9pbWFnZT48L2xpPgotPGxpPlRoZSBzZXJ2aWNlIG5vZGUgKHdoaWNoIHJlcHJlc2VudHMgYSBzZXJ2aWNlIGVsZW1lbnQgd2l0aGluIHRoZSBXU0RMIGZpbGUpOgotIDxpbWFnZSBhbHQ9IlNlcnZpY2Ugbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvc2Vydm5vZGUuZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+VGhlIGJpbmRpbmcgbm9kZTogIDxpbWFnZSBhbHQ9IkJpbmRpbmcgbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvYmluZG5vZGUuZ2lmIj4KLTwvaW1hZ2U+PC9saT4KLTxsaT5UaGUgb3BlcmF0aW9uIG5vZGU6ICA8aW1hZ2UgYWx0PSJPcGVyYXRpb24gbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvb3Bub2RlLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNraW5nIHRoZSBTZXJ2aWNlIG5vZGUgaW4gdGhlIE5hdmlnYXRvciBwYW5lIChpbiB0aGlzIGV4YW1wbGUKLXRoaXMgd291bGQgYmUgdGhlICA8c3lzdGVtb3V0cHV0PlRlbXBlcmF0dXJlU2VydmljZTwvc3lzdGVtb3V0cHV0PiBub2RlKSBkaXNwbGF5cwotYWxsIHRoZSBiaW5kaW5ncyBmb3IgdGhpcyBzZXJ2aWNlLCBhcyB3ZWxsIGFzIHRoZWlyIHR5cGUgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24KLW9mIHRoZSBiaW5kaW5nIGlmIHRoZSBXU0RMIHByb3ZpZGVyIGhhcyBpbmNsdWRlZCBvbmUgaW4gdGhlIEFjdGlvbnMgcGFuZS4KLVRocmVlIHR5cGVzIG9mIGJpbmRpbmdzIGFyZSBzdXBwb3J0ZWQ6IFNPQVAsIEhUVFAgR2V0LCBhbmQgSFRUUCBQb3N0LiAgIDxpbWFnZQotYWx0PSIiIGhyZWY9Ii4uL2ltYWdlcy93c2Rsc2VydmRldC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+ICBUaGUgV1NETAotdXNlZCBpbiB0aGlzIGV4YW1wbGUgb25seSBoYXMgb25lIGJpbmRpbmcsICA8c3lzdGVtb3V0cHV0PlRlbXBlcmF0dXJlQmluZGluZzwvc3lzdGVtb3V0cHV0PiwKLXdoaWNoIGlzIHJlcHJlc2VudGVkIGFzIHRoZSAgPHN5c3RlbW91dHB1dD5UZW1wZXJhdHVyZVBvcnRUeXBlPC9zeXN0ZW1vdXRwdXQ+IG5vZGUKLWluIHRoZSBXU0RMIHRyZWUgaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2tpbmcgYSBkaXNwbGF5ZWQgYmluZGluZyBvciBpdHMgbm9kZSBkaXNwbGF5cyB0aGUgV1NETCBiaW5kaW5nCi1kZXRhaWxzIGluIHRoZSBBY3Rpb25zIHBhbmUuIFRoaXMgaW5jbHVkZXMgdGhlIG9wZXJhdGlvbnMgYW5kIGVuZHBvaW50cyBhdmFpbGFibGUKLWZvciB0aGlzIHNlcnZpY2UuICAgPGltYWdlIGFsdD0iIiBocmVmPSIuLi9pbWFnZXMvd3NkbGJuZGRldGwuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj4KLTwvaW1hZ2U+ICBJbiB0aGlzIHZpZXcgeW91IGNhbiBhZGQgb3IgcmVtb3ZlIGVuZHBvaW50cyBmb3IgdGhlIHNlcnZpY2UuIFRvCi1hZGQgYW4gZW5kcG9pbnQsIGNsaWNrICA8Yj5BZGQ8L2I+LCBlbnRlciB0aGUgVVJMIGZvciB0aGUgZW5kcG9pbnQsIGFuZCBjbGljawotIDxiPkdvPC9iPi4gVGhlIFN0YXR1cyBwYW5lIHNob3VsZCBzYXkgdGhhdCB0aGUgZW5kcG9pbnRzIHdlcmUgc3VjY2Vzc2Z1bGx5Ci11cGRhdGVkLiBUbyByZW1vdmUgYW4gZW5kcG9pbnQsIHNlbGVjdCBpdHMgY2hlY2tib3gsIGFuZCBjbGljayAgPGI+UmVtb3ZlPC9iPi48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cG9zdHJlcT48bm90ZT48ZHJhZnQtY29tbWVudD4yODI0MTMgKHJlZiAyNzkyMDkpPC9kcmFmdC1jb21tZW50PldoZW4gdGhlCi1XZWIgU2VydmljZXMgRXhwbG9yZXIgbG9hZHMgV1NETCBmaWxlcyB0aGF0IHVzZSBtdWx0aXBsZSBpbmxpbmUgc2NoZW1hcywgd2FybmluZwotbWVzc2FnZXMgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHR5cGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYWNyb3NzIHRoZXNlIHNjaGVtYXMuCi1UaGUgd2FybmluZyBtZXNzYWdlIHdpbGwgYmUgc2ltaWxhciB0bzogPGNvZGVwaD5SZWZlcmVuY2Ugb2YgdHlwZSAmbHQ7PGk+cXVhbGlmaWVkX3R5cGVfbmFtZTwvaT4+Ci1pc24ndCByZXNvbHZlZC48L2NvZGVwaD48L25vdGU+PC9wb3N0cmVxPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZDM5ZTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJFeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGV4cGxvcmluZywgV2ViIHNlcnZpY2VzLCBleHBsb3JpbmcgV1NETCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGV4cGxvcmluZywgV2ViIHNlcnZpY2VzLCBleHBsb3JpbmcgV1NETCIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHdzZGxleHAiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5FeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV1NETCBFeHBsb3JlcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHdzZGxleHAiPjxhIG5hbWU9InR3c2RsZXhwIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5FeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV1NETCBFeHBsb3JlcjwvaDE+Ci0KLQotPGRpdj4KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6IFRvIHVzZSB0aGUgV1NETCBFeHBsb3JlciwgeW91IG11c3QgaGF2ZSBhIHZhbGlkIFVSTAotZm9yIGEgV1NETCBkb2N1bWVudC48L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhlIFdTREwgRXhwbG9yZXIgYWxsb3dzIHlvdSB0byBleHBsb3JlLCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy4KLVRoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBXU0RMIEV4cGxvcmVyOjx1bD4KLTxsaT5TaG93IFdTREwgZGV0YWlsczogIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGR0bGljb24uZ2lmIiBhbHQ9IldTREwgRGV0YWlscyBpY29uIiAvPjwvbGk+Ci0KLTxsaT5JbXBvcnQgV1NETCB0byB0aGUgV29ya2JlbmNoOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYiIGFsdD0iSW1wb3J0IFdTREwgdG8gdGhlIFdvcmtiZW5jaCBpY29uIiAvPjwvbGk+Ci0KLTxsaT5JbXBvcnQgV1NETCB0byB5b3VyIGZpbGUgc3lzdGVtOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9mc3dzZGxpY29uLmdpZiIgYWx0PSJJbXBvcnQgV1NETCB0byB5b3VyIGZpbGUgc3lzdGVtIGljb24iIC8+PC9saT4KLQotPGxpPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c3dpemljb24uZ2lmIiBhbHQ9IkxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkIGljb24iIC8+PC9saT4KLQotPGxpPkFkZCBXU0RMIHRvIEZhdm9yaXRlczogIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGZhdmljb24uZ2lmIiBhbHQ9IkFkZCBXU0RMIHRvIEZhdm9yaXRlcyBpY29uIiAvPjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTQ3Ij48YSBuYW1lPSJkMGU0NyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdTREwgRXhwbG9yZXI8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+U3dpdGNoIHRvIHRoZSBXU0RMIEV4cGxvcmVyIGJ5IGNsaWNraW5nIHRoZSBpY29uIGluIHRoZSB1cHBlciByaWdodC1oYW5kCi1jb3JuZXIgIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGljb24uZ2lmIiBhbHQ9Ikljb24gdG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyIiAvPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU2NCI+PGEgbmFtZT0iZDBlNjQiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+SW1wb3J0aW5nIGEgV1NETCBmaWxlIHRvIHlvdXIgd29ya3NwYWNlPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGltcG9ydCB0aGUgV1NETCBmaWxlIHRvIHRoZSBXb3JrYmVuY2g6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5DbGljayB0aGlzIGljb246ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL21wdHdzZGxpY29uLmdpZiIgYWx0PSJJbXBvcnQgV1NETCB0byB0aGUgV29ya2JlbmNoIGljb24iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSBwcm9qZWN0IGludG8gd2hpY2ggeW91IHdhbnQgdG8gaW1wb3J0IHRoZSBXU0RMLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5JZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBhIFdTSUwgZmlsZSBmcm9tIHRoZSBXU0RMLCBzZWxlY3QgIDxzdHJvbmc+SW1wb3J0Ci1hcyBhIHNlcnZpY2UgcmVmZXJlbmNlIHRvIGEgV1NJTCBkb2N1bWVudDwvc3Ryb25nPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTkwIj48YSBuYW1lPSJkMGU5MCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGUgdG8geW91ciBmaWxlIHN5c3RlbTwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBpbXBvcnQgdGhlIFdTREwgZmlsZSB0byB5b3VyIGZpbGUgc3lzdGVtLCBjbGljayB0aGlzIGljb246Ci0gPGltZyBzcmM9Ii4uL2ltYWdlcy9mc3dzZGxpY29uLmdpZiIgYWx0PSJJbXBvcnQgV1NETCB0byB5b3VyIGZpbGUgc3lzdGVtIGljb24iIC8+LiBTcGVjaWZ5IHdoZXJlIHlvdSB3YW50IHRoZSBXU0RMIGZpbGUgc2F2ZWQgb24geW91ciBzeXN0ZW0uPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlOTYiPjxhIG5hbWU9ImQwZTk2Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIFdpemFyZCwgY2xpY2sgdGhpcyBpY29uOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c3dpemljb24uZ2lmIiBhbHQ9IkxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkIGljb24iIC8+LiBZb3UgY2FuIHNlbGVjdCBpZiB5b3Ugd2FudCB0byBjcmVhdGUKLWEgV2ViIHNlcnZpY2UgY2xpZW50IG9yIGEgU2tlbGV0b24gV2ViIHNlcnZpY2UgZnJvbSB0aGUgV1NETCBmaWxlLiBDbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0bwotbGF1bmNoIHRoZSB3aXphcmQuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlMTA1Ij48YSBuYW1lPSJkMGUxMDUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+QWRkaW5nIGEgV1NETCBmaWxlIHRvIHlvdXIgZmF2b3JpdGVzPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGFkZCB0aGUgV1NETCBmaWxlIHRvIEZhdm9yaXRlcywgY2xpY2sgdGhpcyBpY29uOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsZmF2aWNvbi5naWYiIGFsdD0iQWRkIFdTREwgdG8gRmF2b3JpdGVzIGljb24iIC8+PC9wPgotPHA+LiBUaGUgU3RhdHVzIHBhbmUgZGlzcGxheXMKLXRoYXQgdGhlIFdTREwgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB5b3VyIGxpc3Qgb2YgZmF2b3JpdGVzLiA8L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUxMTAiPjxhIG5hbWU9ImQwZTExMCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5FeHBsb3JpbmcgV1NETCBkb2N1bWVudHMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI6PC9oMj4KLQotPGRpdj4KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IFdTREwgTWFpbiBpbiB0aGUgTmF2aWdhdG9yIHBhbmUsIGVudGVyIG9yIGJyb3dzZSB0byBhbiBleGlzdGluZwotV1NETCBVUkwgaW4gdGhlIHJpZ2h0LWhhbmQgcGFuZSwgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBOb3RlIHRoYXQgdGhlIEV4cGxvcmVyCi13aWxsIG9ubHkgYWxsb3cgeW91IHRvIGJyb3dzZSBmb3IgV1NETCBmaWxlcyB0aGF0IHJlc2lkZSBpbiB0aGUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+V2ViQ29udGVudC9XU0RMPC9zYW1wPiBmb2xkZXIKLW9mIGEgcHJvamVjdC4gVG8gZXhwbG9yZSBXU0RMIGZpbGVzIHN0b3JlZCBpbiBvdGhlciBsb2NhdGlvbnMgd2l0aGluIHlvdXIKLXdvcmtzcGFjZSwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIHNlbGVjdCB0aGUgZmlsZSBpbiB0aGUgd29ya3NwYWNlLAotcmlnaHQtY2xpY2sgYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBTZXJ2aWNlcyA8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+IExhdW5jaAotV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9zcGFuPjwvc3Bhbj4uIEZvciB0aGlzIGV4YW1wbGUgdGhlIFdTREwKLWJlaW5nIHVzZWQgaXMgYSBXZWIgU2VydmljZSB3aGljaCByZXR1cm5zIGEgdGVtcGVyYXR1cmUgZm9yIGFueSBlbnRlcmVkIHppcAotY29kZS4gICA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxleHAuZ2lmIiBhbHQ9IiIgLz48YnIgLz4gCi1UaGUgZm9sbG93aW5nIG5vZGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIFdTREwgdHJlZTogPC9zcGFuPiA8dWw+Ci08bGk+VGhlIFdTREwgbm9kZTogIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbG5vZGUuZ2lmIiBhbHQ9IldTREwgbm9kZSBpY29uIiAvPjwvbGk+Ci0KLTxsaT5UaGUgc2VydmljZSBub2RlICh3aGljaCByZXByZXNlbnRzIGEgc2VydmljZSBlbGVtZW50IHdpdGhpbiB0aGUgV1NETCBmaWxlKToKLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3NlcnZub2RlLmdpZiIgYWx0PSJTZXJ2aWNlIG5vZGUgaWNvbiIgLz48L2xpPgotCi08bGk+VGhlIGJpbmRpbmcgbm9kZTogIDxpbWcgc3JjPSIuLi9pbWFnZXMvYmluZG5vZGUuZ2lmIiBhbHQ9IkJpbmRpbmcgbm9kZSBpY29uIiAvPjwvbGk+Ci0KLTxsaT5UaGUgb3BlcmF0aW9uIG5vZGU6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL29wbm9kZS5naWYiIGFsdD0iT3BlcmF0aW9uIG5vZGUgaWNvbiIgLz48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGlja2luZyB0aGUgU2VydmljZSBub2RlIGluIHRoZSBOYXZpZ2F0b3IgcGFuZSAoaW4gdGhpcyBleGFtcGxlCi10aGlzIHdvdWxkIGJlIHRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPlRlbXBlcmF0dXJlU2VydmljZTwvdHQ+IG5vZGUpIGRpc3BsYXlzCi1hbGwgdGhlIGJpbmRpbmdzIGZvciB0aGlzIHNlcnZpY2UsIGFzIHdlbGwgYXMgdGhlaXIgdHlwZSBhbmQgYSBicmllZiBkZXNjcmlwdGlvbgotb2YgdGhlIGJpbmRpbmcgaWYgdGhlIFdTREwgcHJvdmlkZXIgaGFzIGluY2x1ZGVkIG9uZSBpbiB0aGUgQWN0aW9ucyBwYW5lLgotVGhyZWUgdHlwZXMgb2YgYmluZGluZ3MgYXJlIHN1cHBvcnRlZDogU09BUCwgSFRUUCBHZXQsIGFuZCBIVFRQIFBvc3QuICAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2Rsc2VydmRldC5naWYiIGFsdD0iIiAvPjxiciAvPiAgVGhlIFdTREwKLXVzZWQgaW4gdGhpcyBleGFtcGxlIG9ubHkgaGFzIG9uZSBiaW5kaW5nLCAgPHR0IGNsYXNzPSJzeXNvdXQiPlRlbXBlcmF0dXJlQmluZGluZzwvdHQ+LAotd2hpY2ggaXMgcmVwcmVzZW50ZWQgYXMgdGhlICA8dHQgY2xhc3M9InN5c291dCI+VGVtcGVyYXR1cmVQb3J0VHlwZTwvdHQ+IG5vZGUKLWluIHRoZSBXU0RMIHRyZWUgaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNraW5nIGEgZGlzcGxheWVkIGJpbmRpbmcgb3IgaXRzIG5vZGUgZGlzcGxheXMgdGhlIFdTREwgYmluZGluZwotZGV0YWlscyBpbiB0aGUgQWN0aW9ucyBwYW5lLiBUaGlzIGluY2x1ZGVzIHRoZSBvcGVyYXRpb25zIGFuZCBlbmRwb2ludHMgYXZhaWxhYmxlCi1mb3IgdGhpcyBzZXJ2aWNlLiAgIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGJuZGRldGwuZ2lmIiBhbHQ9IiIgLz48YnIgLz4gIEluIHRoaXMgdmlldyB5b3UgY2FuIGFkZCBvciByZW1vdmUgZW5kcG9pbnRzIGZvciB0aGUgc2VydmljZS4gVG8KLWFkZCBhbiBlbmRwb2ludCwgY2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+LCBlbnRlciB0aGUgVVJMIGZvciB0aGUgZW5kcG9pbnQsIGFuZCBjbGljawotIDxzdHJvbmc+R288L3N0cm9uZz4uIFRoZSBTdGF0dXMgcGFuZSBzaG91bGQgc2F5IHRoYXQgdGhlIGVuZHBvaW50cyB3ZXJlIHN1Y2Nlc3NmdWxseQotdXBkYXRlZC4gVG8gcmVtb3ZlIGFuIGVuZHBvaW50LCBzZWxlY3QgaXRzIGNoZWNrYm94LCBhbmQgY2xpY2sgIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9Im5vdGUiPjxzcGFuIGNsYXNzPSJub3RldGl0bGUiPk5vdGU6PC9zcGFuPiBXaGVuIHRoZQotV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGxvYWRzIFdTREwgZmlsZXMgdGhhdCB1c2UgbXVsdGlwbGUgaW5saW5lIHNjaGVtYXMsIHdhcm5pbmcKLW1lc3NhZ2VzIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0eXBlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGFjcm9zcyB0aGVzZSBzY2hlbWFzLgotVGhlIHdhcm5pbmcgbWVzc2FnZSB3aWxsIGJlIHNpbWlsYXIgdG86IDxzYW1wIGNsYXNzPSJjb2RlcGgiPlJlZmVyZW5jZSBvZiB0eXBlICZsdDs8ZW0+cXVhbGlmaWVkX3R5cGVfbmFtZTwvZW0+Jmd0OwotaXNuJ3QgcmVzb2x2ZWQuPC9zYW1wPjwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA5MmMyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9uYnVpbGRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIKLSAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAjd3Njb25zdW1wdGlvbnQiCi10aXRsZT0id3Njb25zdW1wdGlvbnQiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N1ZGRpLmRpdGEiIG5hdnRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2RsdWQuZGl0YSIgbmF2dGl0bGU9IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90ZGlzY292LmRpdGEiIG5hdnRpdGxlPSJEaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIGEgV2ViIHNlcnZpY2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90d3NkbGV4cC5kaXRhIiBuYXZ0aXRsZT0iRXhwbG9yaW5nIGFuZCB0ZXN0aW5nIFdTREwgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90dGVzdHdzZGwuZGl0YSIgbmF2dGl0bGU9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBXU0RMIEV4cGxvcmVyIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHVkZGlleHAuZGl0YSIgbmF2dGl0bGU9IlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllcyI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHN0cnRleHAuZGl0YSIgbmF2dGl0bGU9IkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHJlZy5kaXRhIiBuYXZ0aXRsZT0iUmVnaXN0ZXJpbmcgd2l0aCBhIHJlZ2lzdHJ5Ij48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Rsb2dleHAuZGl0YSIgbmF2dGl0bGU9IkxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5Ij48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRyZWcuZGl0YSIgbmF2dGl0bGU9IkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90cHViZW50LmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHB1Ymxpc2guZGl0YSIgbmF2dGl0bGU9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSI+Ci08dG9waWNyZWYgaHJlZj0icmVmL3J1ZGRpLmRpdGEiIG5hdnRpdGxlPSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHVwZGF0ZS5kaXRhIiBuYXZ0aXRsZT0iVXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1bnB1Yi5kaXRhIiBuYXZ0aXRsZT0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YnVzcHJvai5kaXRhIiBuYXZ0aXRsZT0iTWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlcyI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Rhc3NlcnQuZGl0YSIgbmF2dGl0bGU9Ik1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGJrbXJrLmRpdGEiIG5hdnRpdGxlPSJBZGRpbmcgdG8gRmF2b3JpdGVzIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RnZW53c2lsLmRpdGEiIG5hdnRpdGxlPSJHZW5lcmF0aW5nIFdTSUwiPjwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC9tYXA+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9uYnVpbGRfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDU3NDBlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sI3dzY29uc3VtcHRpb250IiBsYWJlbD0id3Njb25zdW1wdGlvbnQiIHRvcGljPSJjb25jZXB0cy9jdWRkaS5odG1sIj4KLTx0b3BpYyBsYWJlbD0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiIGhyZWY9ImNvbmNlcHRzL2N1ZGRpLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETCIgaHJlZj0iY29uY2VwdHMvY3dzZGx1ZC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkRpc2NvdmVyaW5nIFdlYiBTZXJ2aWNlcyIgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIiBocmVmPSJ0YXNrcy90d3NkbGV4cC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIgaHJlZj0idGFza3MvdHRlc3R3c2RsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIiBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iTGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIGhyZWY9InRhc2tzL3RzdHJ0ZXhwLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiIGhyZWY9InRhc2tzL3RyZWcuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJMb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeSIgaHJlZj0idGFza3MvdGxvZ2V4cC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5IiBocmVmPSJ0YXNrcy90cHViZW50Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlIiBocmVmPSJ0YXNrcy90cHVibGlzaC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iRGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpIiBocmVmPSJyZWYvcnVkZGkuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iVXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSIgaHJlZj0idGFza3MvdHVwZGF0ZS5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5IiBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJNYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzIiBocmVmPSJ0YXNrcy90YnVzcHJvai5odG1sIi8+Ci08dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIiBocmVmPSJ0YXNrcy90YXNzZXJ0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXMiIGhyZWY9InRhc2tzL3Ria21yay5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUiIGhyZWY9InRhc2tzL3RnZW53c2lsLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMmM4NWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIKLSAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAjd3Njb25zdW1wdGlvbnQiCi10aXRsZT0id3Njb25zdW1wdGlvbnQiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RzdHJ0ZXhwLmRpdGEiIG5hdnRpdGxlPSJMYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RyZWcuZGl0YSIgbmF2dGl0bGU9IlJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeSI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90bG9nZXhwLmRpdGEiIG5hdnRpdGxlPSJMb2dnaW5nIGludG8gYSByZWdpc3RyeSI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkcmVnLmRpdGEiIG5hdnRpdGxlPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHB1YmVudC5kaXRhIiBuYXZ0aXRsZT0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RwdWJsaXNoLmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiPgotPHRvcGljcmVmIGhyZWY9InJlZi9ydWRkaS5kaXRhIiBuYXZ0aXRsZT0iRGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1cGRhdGUuZGl0YSIgbmF2dGl0bGU9IlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90dW5wdWIuZGl0YSIgbmF2dGl0bGU9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGJ1c3Byb2ouZGl0YSIgbmF2dGl0bGU9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YXNzZXJ0LmRpdGEiIG5hdnRpdGxlPSJNYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Ria21yay5kaXRhIiBuYXZ0aXRsZT0iQWRkaW5nIHRvIEZhdm9yaXRlcyI+PC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08L21hcD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9udF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmU2MGI0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxpbmtfdG89Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwjd3Njb25zdW1wdGlvbnQiIGxhYmVsPSJ3c2NvbnN1bXB0aW9udCIgdG9waWM9InRhc2tzL3R1ZGRpZXhwLmh0bWwiPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwiPgotPHRvcGljIGxhYmVsPSJMYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0idGFza3MvdHN0cnRleHAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJSZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeSIgaHJlZj0idGFza3MvdHJlZy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5IiBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiIGhyZWY9InRhc2tzL3RwdWJsaXNoLmh0bWwiPgotPHRvcGljIGxhYmVsPSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiIGhyZWY9InJlZi9ydWRkaS5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIiBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sIi8+Ci08dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiIGhyZWY9InRhc2tzL3RidXNwcm9qLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnMiIGhyZWY9InRhc2tzL3Rhc3NlcnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlcyIgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmE3YjIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcl8xLjAuMC5qYXIKLWJhawotdGVtcAotYnVpbGQueG1sCi1vdXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGNmZWY3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvRG9jQnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTI3Njg5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL0RvY0J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSAKLQotCVRoaXMgc2NyaXB0IGJ1aWxkIHRoZSBIZWxwIHBsdWctaW4gYnkgdHJhbnNmb3JtaW5nIHRoZSBESVRBIHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCi0JCi0JVG8gdXNlIHRoaXMgc2NyaXB0LCB5b3UgbXVzdCBpbnN0YWxsIERJVEEtT1Qgb24geW91ciBtYWNoaW5lIGluIHRoZSBkaXJlY3RvcnkKLQlkZWZpbmVkIGJ5IHRoZSBkaXRhLm90LmRpciBwcm9wZXJ0eS4KLQkKLQlSdW4gdGhlIGRlZmF1bHQgdGFyZ2V0IGFmdGVyIHlvdSBlZGl0IHRoZSBESVRBIHNvdXJjZSBmaWxlcyB0byByZWdlbmVyYXRlIHRoZSBIVE1MLgotCQotCVRvIGN1c3RvbWl6ZSB0aGlzIHNjcmlwdCBmb3Igb3RoZXIgSGVscCBwbHVnLWlucywgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYXJncy5pbnB1dCBwcm9wZXJ0eQotCXRvIGJlIHRoZSBESVRBIG1hcCBmaWxlIGZvciB0aGUgcGx1Zy1pbi4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgbGlua3MgdG8gc2libGluZyBIZWxwIHBsdWctaW5zIGhhdmUgc2NvcGU9InBlZXIiLCBvdGhlcndpc2UgdGhlCi0Jb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2lsbCBiZSBzaGlmdGVkIGluY29ycmVjdGx5LgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB5b3UgaGFuZCBjb2RlIHlvdXIgcGx1Z2luLnhtbCBmaWxlIGluIG15cGx1Z2luLnhtbC4gVGhpcyBmaWxlCi0Jd2lsbCBiZSBjb3BpZWQgb3ZlciB0aGUgZ2VuZXJhdGVkIHBsdWdpbi54bWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgY29ycmVjdGx5Ci0JYnkgRElUQS1PVC4KLQkKLQlDaGFuZ2VMb2c6Ci0JMjAwNi0wNC0wNSBBcnRodXIgUnltYW4gPHJ5bWFuQGNhLmlibS5jb20+Ci0JLSBDcmVhdGVkLgotCTIwMDgtMDEtMDkgS2F0ZSBQcmljZSA8a2F0ZXBAY2EuaWJtLmNvbT4KLQktIG1vZGlmaWVkIGZvciBuZXcgRElUQS1PVCB2ZXJzaW9uCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImVjbGlwc2VoZWxwIiBkZWZhdWx0PSJhbGwiPgotCi0JPHByb3BlcnR5IG5hbWU9ImRpdGEub3QuZGlyIiBsb2NhdGlvbj0iQzovRElUQS1PVDEuMi4yIiAvPgotCi0JPHBhdGggaWQ9ImRvc3QuY2xhc3MucGF0aCI+Ci0JCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWxpYiR7ZmlsZS5zZXBhcmF0b3J9ZG9zdC5qYXIiIC8+Ci0JPC9wYXRoPgotCi0JPHRhc2tkZWYgbmFtZT0iaW50ZWdyYXRlIiBjbGFzc25hbWU9Im9yZy5kaXRhLmRvc3QucGxhdGZvcm0uSW50ZWdyYXRvclRhc2siPgotCQk8Y2xhc3NwYXRoIHJlZmlkPSJkb3N0LmNsYXNzLnBhdGgiIC8+Ci0JPC90YXNrZGVmPgotCTx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbnRlZ3JhdGUsIGVjbGlwc2VoZWxwIj4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImludGVncmF0ZSI+Ci0JCTxpbnRlZ3JhdGUgZGl0YWRpcj0iJHtkaXRhLm90LmRpcn0iIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIHJldmlzZSBiZWxvdyBoZXJlIC0tPgotCTx0YXJnZXQgbmFtZT0iZWNsaXBzZWhlbHAiPgotCQk8YW50IGFudGZpbGU9IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1jb25kdWN0b3IueG1sIiB0YXJnZXQ9ImluaXQiIGRpcj0iJHtkaXRhLm90LmRpcn0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY29weWNzcyIgdmFsdWU9Im5vIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY3NzcGF0aCIgdmFsdWU9Ii4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlciIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UucHJvdmlkZXIiIHZhbHVlPSJFY2xpcHNlLm9yZyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UudmVyc2lvbiIgdmFsdWU9IjMuMy4wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuaW5wdXQiIGxvY2F0aW9uPSJ3ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwIiAvPiAKLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGVhbi50ZW1wIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLmV4dG5hbWUiIHZhbHVlPSIuZGl0YSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLnRlbXAuZGlyIiBsb2NhdGlvbj0idGVtcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQuZGlyIiBsb2NhdGlvbj0iIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9InRyYW5zdHlwZSIgdmFsdWU9ImVjbGlwc2VoZWxwIiAvPgotCQk8L2FudD4KLQkJPGNvcHkgZmlsZT0ibXlwbHVnaW4ueG1sIiB0b2ZpbGU9InBsdWdpbi54bWwiIG92ZXJ3cml0ZT0ieWVzIiAvPgotCTwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIzNjBjNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjQwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM5NWU1Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3ZWJzZXJ2aWNlX3RvYy54bWwsXAotICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXgueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgaW1hZ2VzLyxcCi0gICAgICAgICAgICAgICBjb25jZXB0cy8qLmh0bSosXAotICAgICAgICAgICAgICAgdGFza3MvKi5odG0qLFwKLSAgICAgICAgICAgICAgIHJlZi8qLmh0bSosXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLwotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcyxcCi0JCSAgICAgICAqLm1hcGxpc3QsXAotICAgICAgICAgICAgICAgKi5kaXRhbWFwLFwKLQkJICAgICAgIGNvbmNlcHRzLyouZGl0YSxcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmRpdGEsXAotICAgICAgICAgICAgICAgcmVmLyouZGl0YQotYmluLmV4Y2x1ZGVzID0gRG9jQnVpbGQueG1sLFwKLSAgICAgICAgICAgICAgIG15UGx1Z2luKi54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNiNWIyNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY2pheHJwYyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5KQVgtUlBDPC90aXRsZT4KLTxzaG9ydGRlc2M+SkFYLVJQQyBzdGFuZHMgZm9yIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQVBJIGZvciBYTUwtYmFzZWQgUlBDLCBhbHNvIGtub3duIGFzCi1KU1IgMTAxLiBJdCBpcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2VzCi0oQVBJcykgYW5kIGNvbnZlbnRpb25zIGZvciBidWlsZGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgdGhhdAotdXNlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgKFJQQykgYW5kIFhNTC4gSXQgc3RhbmRhcmRpemVzIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHRvCi1XU0RMIGFuZCBXU0RMIHRvIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIgotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gbWFwcGluZ3MsIGFuZCBwcm92aWRlcyB0aGUgY29yZSBBUElzIGZvciBkZXZlbG9waW5nCi1XZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gcGxhdGZvcm0uIE9mdGVuIHVzZWQgaW4gYSBkaXN0cmlidXRlZAotY2xpZW50L3NlcnZlciBtb2RlbCwgYW4gUlBDIG1lY2hhbmlzbSBlbmFibGVzIGNsaWVudHMgdG8gZXhlY3V0ZSBwcm9jZWR1cmVzCi1vbiBvdGhlciBzeXN0ZW1zLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5KQVgtUlBDPGluZGV4dGVybT5XZWIgc2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5KQVgtUlBDPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+VGhlIGN1cnJlbnQgcmVsZWFzZSBvZiBKQVgtUlBDIHJlcXVpcmVzIHRoZSBzdXBwb3J0IG9mIFNPQVAgb3ZlciBIVFRQIGZvcgotaW50ZXJvcGVyYWJpbGl0eSBwdXJwb3Nlcy4gVGhlIFNPQVAgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIG1lc3NhZ2Ugc3RydWN0dXJlLAotZW5jb2RpbmcgcnVsZXMsIGFuZCBjb252ZW50aW9ucyBmb3IgZXhjaGFuZ2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgUlBDIHByb2dyYW1taW5nCi1tb2RlbC4gVGhlc2UgY2FsbHMgYW5kIHJlc3BvbnNlcyBhcmUgdHJhbnNtaXR0ZWQgYXMgU09BUCBtZXNzYWdlcyBvdmVyIEhUVFAuCi1JbiB0aGlzIHJlbGVhc2UsIEpBWC1SUEMgc3VwcG9ydHMgU09BUCAxLjEgYW5kIEhUVFAgMS4xLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgotb24gU09BUCwgcmVmZXIgdG8gPHhyZWYgaHJlZj0iY3NvYXAuZGl0YSIgc2NvcGU9ImxvY2FsIj48L3hyZWY+LjwvcD4KLTxwPkFsdGhvdWdoIHRoZSB1bmRlcmx5aW5nIHJ1bi10aW1lIG1lY2hhbmlzbXMgKGZvciBleGFtcGxlLCA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHRvCi1XU0RMIHNlcmlhbGl6YXRpb24sIFdTREwgdG8gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBkZXNlcmlhbGl6YXRpb24sIHByb3RvY29sIGFuZCB0cmFuc3BvcnQpCi1hcmUgdmVyeSBjb21wbGV4LCB0aGUgQVBJIGhpZGVzIHRoaXMgY29tcGxleGl0eSBmcm9tIHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIuCi1PbiB0aGUgc2VydmVyIHNpZGUsIHRoZSBkZXZlbG9wZXIgY2FuIHByb3ZpZGUgYSBTZXJ2aWNlIEVuZHBvaW50IEludGVyZmFjZQotKFNFSSk7IGFsdGVybmF0ZWx5IGFuIFNFSSBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgV2ViIHNlcnZpY2VzIHdpenJkcy4gQW4KLVNFSSBpcyBhbiBpbnRlcmZhY2Ugd3JpdHRlbiBpbiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IHNwZWNpZmllcwotdGhlIHJlbW90ZSBwcm9jZWR1cmVzIG9mIGEgV2ViIHNlcnZpY2UuIFRoZSBkZXZlbG9wZXIgYWxzbyBwcm92aWRlcyB0aGUgaW1wbGVtZW50YXRpb24KLW9mIGEgV2ViIHNlcnZpY2UsIGluIHRoZSBmb3JtIG9mIG9uZSBvciBtb3JlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gY2xhc3NlcyB0aGF0IGltcGxlbWVudCBtZXRob2RzIG9mIHRoZQotc2FtZSBzaWduYXR1cmUgYXMgdGhvc2Ugb24gdGhlIFNFSS4gQ2xpZW50IHByb2dyYW1zIGFyZSBhbHNvIGVhc3kgdG8gY29kZS4KLUEgY2xpZW50IGNyZWF0ZXMgYSBwcm94eSwgYSBsb2NhbCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uCi1hbmQgdGhlIFNFSSwgYW5kIHRoZW4gc2ltcGx5IGludm9rZXMgbWV0aG9kcyBvbiB0aGUgcHJveHkuPC9wPgotPHA+SkFYLVJQQyBpcyBoaWdobHkgaW50ZXJvcGVyYWJsZTogYSBKQVgtUlBDIGNsaWVudCBjYW4gYWNjZXNzIGEgV2ViIHNlcnZpY2UKLXRoYXQgaXMgbm90IHJ1bm5pbmcgb24gdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gcGxhdGZvcm0gYW5kIHZpY2UgdmVyc2EuIFRoaXMgZmxleGliaWxpdHkKLWlzIHBvc3NpYmxlIGJlY2F1c2UgSkFYLVJQQyB1c2VzIFNPQVAgb3ZlciBIVFRQLCBhbmQgdGhlIFdlYiBTZXJ2aWNlIERlc2NyaXB0aW9uCi1MYW5ndWFnZSAoV1NETCkuIEpBWC1SUEMgd2FzIGRlc2lnbmVkIHRvIHN1cHBvcnQgV1MtSS48L3A+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBKQVgtUlBDLCByZWZlciB0byB0aGUgIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTAxIgotc2NvcGU9ImV4dGVybmFsIj5vZmZpY2lhbCBKU1IgMTAxIHNwZWNpZmljYXRpb25zPC94cmVmPi48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iY2pzcjEwOS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzVmODE4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkpBWC1SUEMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSkFYLVJQQyBzdGFuZHMgZm9yIEphdmEgQVBJIGZvciBYTUwtYmFzZWQgUlBDLCBhbHNvIGtub3duIGFzIEpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBKYXZhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMgKEFQSXMpIGFuZCBjb252ZW50aW9ucyBmb3IgYnVpbGRpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIHRoYXQgdXNlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgKFJQQykgYW5kIFhNTC4gSXQgc3RhbmRhcmRpemVzIHRoZSBKYXZhIHRvIFdTREwgYW5kIFdTREwgdG8gSmF2YSBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIG9uIHRoZSBKYXZhIHBsYXRmb3JtLiBPZnRlbiB1c2VkIGluIGEgZGlzdHJpYnV0ZWQgY2xpZW50L3NlcnZlciBtb2RlbCwgYW4gUlBDIG1lY2hhbmlzbSBlbmFibGVzIGNsaWVudHMgdG8gZXhlY3V0ZSBwcm9jZWR1cmVzIG9uIG90aGVyIHN5c3RlbXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkpBWC1SUEMgc3RhbmRzIGZvciBKYXZhIEFQSSBmb3IgWE1MLWJhc2VkIFJQQywgYWxzbyBrbm93biBhcyBKU1IgMTAxLiBJdCBpcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgSmF2YSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2VzIChBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0IHVzZSByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIChSUEMpIGFuZCBYTUwuIEl0IHN0YW5kYXJkaXplcyB0aGUgSmF2YSB0byBXU0RMIGFuZCBXU0RMIHRvIEphdmEgbWFwcGluZ3MsIGFuZCBwcm92aWRlcyB0aGUgY29yZSBBUElzIGZvciBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgSmF2YSBwbGF0Zm9ybS4gT2Z0ZW4gdXNlZCBpbiBhIGRpc3RyaWJ1dGVkIGNsaWVudC9zZXJ2ZXIgbW9kZWwsIGFuIFJQQyBtZWNoYW5pc20gZW5hYmxlcyBjbGllbnRzIHRvIGV4ZWN1dGUgcHJvY2VkdXJlcyBvbiBvdGhlciBzeXN0ZW1zLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkpBWC1SUEMsIFdlYiBzZXJ2aWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkpBWC1SUEMsIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY2pzcjEwOS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY2pheHJwYyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkpBWC1SUEM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNqYXhycGMiPjxhIG5hbWU9ImNqYXhycGMiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkpBWC1SUEM8L2gxPgotCi0KLQotPGRpdj48cD5KQVgtUlBDIHN0YW5kcyBmb3IgSmF2YeKEoiBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMKLUpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBKYXZhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMKLShBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0Ci11c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIEphdmEgdG8KLVdTREwgYW5kIFdTREwgdG8gSmF2YSBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcKLVdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgSmF2YSBwbGF0Zm9ybS4gT2Z0ZW4gdXNlZCBpbiBhIGRpc3RyaWJ1dGVkCi1jbGllbnQvc2VydmVyIG1vZGVsLCBhbiBSUEMgbWVjaGFuaXNtIGVuYWJsZXMgY2xpZW50cyB0byBleGVjdXRlIHByb2NlZHVyZXMKLW9uIG90aGVyIHN5c3RlbXMuPC9wPgotCi08cD5UaGUgY3VycmVudCByZWxlYXNlIG9mIEpBWC1SUEMgcmVxdWlyZXMgdGhlIHN1cHBvcnQgb2YgU09BUCBvdmVyIEhUVFAgZm9yCi1pbnRlcm9wZXJhYmlsaXR5IHB1cnBvc2VzLiBUaGUgU09BUCBzcGVjaWZpY2F0aW9uIGRlZmluZXMgbWVzc2FnZSBzdHJ1Y3R1cmUsCi1lbmNvZGluZyBydWxlcywgYW5kIGNvbnZlbnRpb25zIGZvciBleGNoYW5naW5nIGluZm9ybWF0aW9uIGluIHRoZSBSUEMgcHJvZ3JhbW1pbmcKLW1vZGVsLiBUaGVzZSBjYWxscyBhbmQgcmVzcG9uc2VzIGFyZSB0cmFuc21pdHRlZCBhcyBTT0FQIG1lc3NhZ2VzIG92ZXIgSFRUUC4KLUluIHRoaXMgcmVsZWFzZSwgSkFYLVJQQyBzdXBwb3J0cyBTT0FQIDEuMSBhbmQgSFRUUCAxLjEuIEZvciBtb3JlIGluZm9ybWF0aW9uCi1vbiBTT0FQLCByZWZlciB0byA8YSBocmVmPSJjc29hcC5odG1sIiB0aXRsZT0iU09BUCAoZm9ybWVybHkga25vd24gYXMgU2ltcGxlIE9iamVjdCBBY2Nlc3MgUHJvdG9jb2wpIGlzIGEgbGlnaHR3ZWlnaHQmIzEwO3Byb3RvY29sIGZvciB0aGUgZXhjaGFuZ2Ugb2YgaW5mb3JtYXRpb24gaW4gYSBkZWNlbnRyYWxpemVkLCBkaXN0cmlidXRlZCBlbnZpcm9ubWVudC4mIzEwO0EgU09BUCBtZXNzYWdlIGlzIGEgdHJhbnNtaXNzaW9uIG9mIGluZm9ybWF0aW9uIGZyb20gYSBzZW5kZXIgdG8gYSByZWNlaXZlci4mIzEwO1NPQVAgbWVzc2FnZXMgY2FuIGJlIGNvbWJpbmVkIHRvIHBlcmZvcm0gcmVxdWVzdC9yZXNwb25zZSBwYXR0ZXJucy4gIj5TT0FQPC9hPi48L3A+Ci0KLTxwPkFsdGhvdWdoIHRoZSB1bmRlcmx5aW5nIHJ1bi10aW1lIG1lY2hhbmlzbXMgKGZvciBleGFtcGxlLCBKYXZhIHRvCi1XU0RMIHNlcmlhbGl6YXRpb24sIFdTREwgdG8gSmF2YSBkZXNlcmlhbGl6YXRpb24sIHByb3RvY29sIGFuZCB0cmFuc3BvcnQpCi1hcmUgdmVyeSBjb21wbGV4LCB0aGUgQVBJIGhpZGVzIHRoaXMgY29tcGxleGl0eSBmcm9tIHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIuCi1PbiB0aGUgc2VydmVyIHNpZGUsIHRoZSBkZXZlbG9wZXIgY2FuIHByb3ZpZGUgYSBTZXJ2aWNlIEVuZHBvaW50IEludGVyZmFjZQotKFNFSSk7IGFsdGVybmF0ZWx5IGFuIFNFSSBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgV2ViIHNlcnZpY2VzIHdpenJkcy4gQW4KLVNFSSBpcyBhbiBpbnRlcmZhY2Ugd3JpdHRlbiBpbiB0aGUgSmF2YSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IHNwZWNpZmllcwotdGhlIHJlbW90ZSBwcm9jZWR1cmVzIG9mIGEgV2ViIHNlcnZpY2UuIFRoZSBkZXZlbG9wZXIgYWxzbyBwcm92aWRlcyB0aGUgaW1wbGVtZW50YXRpb24KLW9mIGEgV2ViIHNlcnZpY2UsIGluIHRoZSBmb3JtIG9mIG9uZSBvciBtb3JlIEphdmEgY2xhc3NlcyB0aGF0IGltcGxlbWVudCBtZXRob2RzIG9mIHRoZQotc2FtZSBzaWduYXR1cmUgYXMgdGhvc2Ugb24gdGhlIFNFSS4gQ2xpZW50IHByb2dyYW1zIGFyZSBhbHNvIGVhc3kgdG8gY29kZS4KLUEgY2xpZW50IGNyZWF0ZXMgYSBwcm94eSwgYSBsb2NhbCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uCi1hbmQgdGhlIFNFSSwgYW5kIHRoZW4gc2ltcGx5IGludm9rZXMgbWV0aG9kcyBvbiB0aGUgcHJveHkuPC9wPgotCi08cD5KQVgtUlBDIGlzIGhpZ2hseSBpbnRlcm9wZXJhYmxlOiBhIEpBWC1SUEMgY2xpZW50IGNhbiBhY2Nlc3MgYSBXZWIgc2VydmljZQotdGhhdCBpcyBub3QgcnVubmluZyBvbiB0aGUgSmF2YSBwbGF0Zm9ybSBhbmQgdmljZSB2ZXJzYS4gVGhpcyBmbGV4aWJpbGl0eQotaXMgcG9zc2libGUgYmVjYXVzZSBKQVgtUlBDIHVzZXMgU09BUCBvdmVyIEhUVFAsIGFuZCB0aGUgV2ViIFNlcnZpY2UgRGVzY3JpcHRpb24KLUxhbmd1YWdlIChXU0RMKS4gSkFYLVJQQyB3YXMgZGVzaWduZWQgdG8gc3VwcG9ydCBXUy1JLjwvcD4KLQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gSkFYLVJQQywgcmVmZXIgdG8gdGhlICA8YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xMDEiIHRhcmdldD0iX2JsYW5rIj5vZmZpY2lhbCBKU1IgMTAxIHNwZWNpZmljYXRpb25zPC9hPi48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiB0aXRsZT0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImNqc3IxMDkuaHRtbCIgdGl0bGU9IkpTUiAxMDkgYW5kIEpTUiA5MjEgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlIEoyRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZCBDbGllbnQgQXBwbGljYXRpb24gY29udGFpbmVycy4gT25lIG9mIGl0cyBtYWluIGdvYWxzIGlzIHRvIGVuc3VyZSB2ZW5kb3JzJyBpbXBsZW1lbnRhdGlvbnMgaW50ZXJvcGVyYXRlLiI+SlNSIDEwOSBhbmQgSlNSIDkyMS0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4OWEzMDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pzcjEwOS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImNqc3IxMDkiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+SlNSIDEwOSBhbmQgSlNSIDkyMS0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTxzaG9ydGRlc2M+SlNSIDEwOSBhbmQgSlNSIDkyMSAoSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIFNlcnZpY2VzKSBkZWZpbmUKLXRoZSBwcm9ncmFtbWluZyBtb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIKLXNlcnZpY2VzIGluIHRoZSBKMkVFIGVudmlyb25tZW50OyBtb3JlIHNwZWNpZmljYWxseSwgaW4gdGhlIFdlYiwgRUpCLCBhbmQKLUNsaWVudCBBcHBsaWNhdGlvbiBjb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnCi1pbXBsZW1lbnRhdGlvbnMgaW50ZXJvcGVyYXRlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5KU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5KU1IgOTIxIEphdmEgc3BlY2lmaWNhdGlvbjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkphdmEgc3BlY2lmaWNhdGlvbiByZXF1ZXN0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPkpTUiAxMDkgYW5kIEpTUiA5MjEgYnVpbGQgb24gdG9wIG9mIEpBWC1SUEMgdG8gY292ZXIgdGhlIHVzZSBvZiBKQVgtUlBDCi1pbiBhIEoyRUUgZW52aXJvbm1lbnQsIGFzIHdlbGwgYXMgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBkZXBsb3ltZW50IG9mIFdlYgotc2VydmljZXMgdG8gYSBKMkVFIGFwcGxpY2F0aW9uIHNlcnZlci4gSlNSIDEwOSBhbmQgSlNSIDkyMSBkZWZpbmUgYSBzZXQgb2YKLVhNTC1iYXNlZCBkZXBsb3ltZW50IGRlc2NyaXB0b3JzIHRvIHN0YW5kYXJkaXplIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UKLWNsaWVudCBkZXBsb3ltZW50cyBpbiB0aGUgSjJFRSBlbnZpcm9ubWVudC4gVGhlc2UgdG9vbHMgc3VwcG9ydCBKU1IgMTA5IGZvcgotSjJFRSAxLjMgYW5kIEpTUiA5MjEgZm9yIEoyRUUgMS40LjwvcD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0bzogIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTA5Igotc2NvcGU9ImV4dGVybmFsIj5KU1IgMTA5LCAiSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIFNlcnZpY2VzPC94cmVmPiBhbmQgPHhyZWYKLWhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTkyMSIgc2NvcGU9ImV4dGVybmFsIj5KU1IgOTIxOiBJbXBsZW1lbnRpbmcKLUVudGVycHJpc2UgV2ViIFNlcnZpY2VzIDEuMTwveHJlZj4uPC9wPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3dzLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9ImNqYXhycGMuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nqc3IxMDkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nqc3IxMDkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU3NmMyOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJKU1IgMTA5IGFuZCBKU1IgOTIxLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSlNSIDEwOSBhbmQgSlNSIDkyMSAoSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIFNlcnZpY2VzKSBkZWZpbmUgdGhlIHByb2dyYW1taW5nIG1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcyBpbiB0aGUgSjJFRSBlbnZpcm9ubWVudDsgbW9yZSBzcGVjaWZpY2FsbHksIGluIHRoZSBXZWIsIEVKQiwgYW5kIENsaWVudCBBcHBsaWNhdGlvbiBjb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkpTUiAxMDkgYW5kIEpTUiA5MjEgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlIEoyRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZCBDbGllbnQgQXBwbGljYXRpb24gY29udGFpbmVycy4gT25lIG9mIGl0cyBtYWluIGdvYWxzIGlzIHRvIGVuc3VyZSB2ZW5kb3JzJyBpbXBsZW1lbnRhdGlvbnMgaW50ZXJvcGVyYXRlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkpTUiAxMDkgSmF2YSBzcGVjaWZpY2F0aW9uLCBKU1IgOTIxIEphdmEgc3BlY2lmaWNhdGlvbiwgV2ViIHNlcnZpY2VzLCBKYXZhIHNwZWNpZmljYXRpb24gcmVxdWVzdHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJKU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbiwgSlNSIDkyMSBKYXZhIHNwZWNpZmljYXRpb24sIFdlYiBzZXJ2aWNlcywgSmF2YSBzcGVjaWZpY2F0aW9uIHJlcXVlc3RzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjamF4cnBjLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjanNyMTA5IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+SlNSIDEwOSBhbmQgSlNSIDkyMS0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjanNyMTA5Ij48YSBuYW1lPSJjanNyMTA5Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5KU1IgMTA5IGFuZCBKU1IgOTIxLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXM8L2gxPgotCi0KLQotPGRpdj48cD5KU1IgMTA5IGFuZCBKU1IgOTIxIChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZQotdGhlIHByb2dyYW1taW5nIG1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYgotc2VydmljZXMgaW4gdGhlIEoyRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZAotQ2xpZW50IEFwcGxpY2F0aW9uIGNvbnRhaW5lcnMuIE9uZSBvZiBpdHMgbWFpbiBnb2FscyBpcyB0byBlbnN1cmUgdmVuZG9ycycKLWltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuPC9wPgotCi08cD5KU1IgMTA5IGFuZCBKU1IgOTIxIGJ1aWxkIG9uIHRvcCBvZiBKQVgtUlBDIHRvIGNvdmVyIHRoZSB1c2Ugb2YgSkFYLVJQQwotaW4gYSBKMkVFIGVudmlyb25tZW50LCBhcyB3ZWxsIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgZGVwbG95bWVudCBvZiBXZWIKLXNlcnZpY2VzIHRvIGEgSjJFRSBhcHBsaWNhdGlvbiBzZXJ2ZXIuIEpTUiAxMDkgYW5kIEpTUiA5MjEgZGVmaW5lIGEgc2V0IG9mCi1YTUwtYmFzZWQgZGVwbG95bWVudCBkZXNjcmlwdG9ycyB0byBzdGFuZGFyZGl6ZSBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlCi1jbGllbnQgZGVwbG95bWVudHMgaW4gdGhlIEoyRUUgZW52aXJvbm1lbnQuIFRoZXNlIHRvb2xzIHN1cHBvcnQgSlNSIDEwOSBmb3IKLUoyRUUgMS4zIGFuZCBKU1IgOTIxIGZvciBKMkVFIDEuNC48L3A+Ci0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0bzogIDxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwOSIgdGFyZ2V0PSJfYmxhbmsiPkpTUiAxMDksICJJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXM8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD05MjEiIHRhcmdldD0iX2JsYW5rIj5KU1IgOTIxOiBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMgMS4xPC9hPi48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiB0aXRsZT0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImNqYXhycGMuaHRtbCIgdGl0bGU9IkpBWC1SUEMgc3RhbmRzIGZvciBKYXZhIEFQSSBmb3IgWE1MLWJhc2VkIFJQQywgYWxzbyBrbm93biBhcyBKU1IgMTAxLiBJdCBpcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgSmF2YSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2VzIChBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0IHVzZSByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIChSUEMpIGFuZCBYTUwuIEl0IHN0YW5kYXJkaXplcyB0aGUgSmF2YSB0byBXU0RMIGFuZCBXU0RMIHRvIEphdmEgbWFwcGluZ3MsIGFuZCBwcm92aWRlcyB0aGUgY29yZSBBUElzIGZvciBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgSmF2YSBwbGF0Zm9ybS4gT2Z0ZW4gdXNlZCBpbiBhIGRpc3RyaWJ1dGVkIGNsaWVudC9zZXJ2ZXIgbW9kZWwsIGFuIFJQQyBtZWNoYW5pc20gZW5hYmxlcyBjbGllbnRzIHRvIGV4ZWN1dGUgcHJvY2VkdXJlcyBvbiBvdGhlciBzeXN0ZW1zLiI+SkFYLVJQQzwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMzdjMjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3NvYXAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+U09BUDwvdGl0bGU+Ci08c2hvcnRkZXNjPlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0Ci1wcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuCi1BIFNPQVAgbWVzc2FnZSBpcyBhIHRyYW5zbWlzc2lvbiBvZiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VuZGVyIHRvIGEgcmVjZWl2ZXIuCi1TT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuIDwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5TT0FQPGluZGV4dGVybT5vdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPlNPQVA8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5TT0FQIGlzIHRyYW5zcG9ydCBpbmRlcGVuZGVudCBidXQgaXMgbW9zdCBjb21tb25seSBjYXJyaWVkIG92ZXIgSFRUUCBpbgotb3JkZXIgdG8gcnVuIHdpdGggdGhlIGV4aXN0aW5nIEludGVybmV0IGluZnJhc3RydWN0dXJlLiZuYnNwOyBTT0FQIGVuYWJsZXMKLXRoZSBiaW5kaW5nIGFuZCB1c2FnZSBvZiBkaXNjb3ZlcmVkIFdlYiBzZXJ2aWNlcyBieSBkZWZpbmluZyBhIG1lc3NhZ2UgcGF0aAotZm9yIHJvdXRpbmcgbWVzc2FnZXMuIFNPQVAgaXMgdXNlZCB0byBxdWVyeSBVRERJIGZvciBXZWIgc2VydmljZXMuIFRoZSB3b3JrYmVuY2gKLXN1cHBvcnRzIFNPQVAgMS4xLjwvcD4KLTxwPlNPQVAgaXMgYW4gWE1MLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyB0aHJlZSBwYXJ0cyB0byBldmVyeSBtZXNzYWdlOjwvcD4KLTx1bD4KLTxsaT4gPHVpY29udHJvbD5FbnZlbG9wZS48L3VpY29udHJvbD4mbmJzcDsgVGhlIGVudmVsb3BlIGRlZmluZXMgYSBmcmFtZXdvcmsKLWZvciBkZXNjcmliaW5nIHdoYXQgaXMgaW4gYSBtZXNzYWdlIGFuZCBob3cgdG8gcHJvY2VzcyBpdC4mbmJzcDsgQSBTT0FQIG1lc3NhZ2UKLWlzIGFuIGVudmVsb3BlIGNvbnRhaW5pbmcgemVybyBvciBtb3JlIGhlYWRlcnMgYW5kIGV4YWN0bHkgb25lIGJvZHkuJm5ic3A7Ci1UaGUgZW52ZWxvcGUgaXMgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBYTUwgZG9jdW1lbnQsIHByb3ZpZGluZyBhIGNvbnRhaW5lcgotZm9yIGNvbnRyb2wgaW5mb3JtYXRpb24sIHRoZSBhZGRyZXNzIG9mIGEgbWVzc2FnZSwgYW5kIHRoZSBtZXNzYWdlIGl0c2VsZi4mbmJzcDsKLUhlYWRlcnMgdHJhbnNwb3J0IGFueSBjb250cm9sIGluZm9ybWF0aW9uIHN1Y2ggYXMgcXVhbGl0eS1vZi1zZXJ2aWNlIGF0dHJpYnV0ZXMuJm5ic3A7Ci1UaGUgYm9keSBjb250YWlucyB0aGUgbWVzc2FnZSBpZGVudGlmaWNhdGlvbiBhbmQgaXRzIHBhcmFtZXRlcnMuJm5ic3A7IEJvdGgKLXRoZSBoZWFkZXJzIGFuZCB0aGUgYm9keSBhcmUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGVudmVsb3BlLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RW5jb2RpbmcgcnVsZXMuPC91aWNvbnRyb2w+Jm5ic3A7IFRoZSBzZXQgb2YgZW5jb2RpbmcgcnVsZXMKLWV4cHJlc3NlcyBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZCBkYXRhIHR5cGVzLiBFbmNvZGluZyBydWxlcyBkZWZpbmUKLWEgc2VyaWFsaXphdGlvbiBtZWNoYW5pc20gdGhhdCBjYW4gYmUgdXNlZCB0byBleGNoYW5nZSBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZAotZGF0YSB0eXBlcy4gU09BUCBkZWZpbmVzIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGF0YSB0eXBlIHNjaGVtZQotYmFzZWQgb24gWFNEIHBsdXMgZW5jb2RpbmcgcnVsZXMgZm9yIGFsbCBkYXRhIHR5cGVzIGRlZmluZWQgYWNjb3JkaW5nIHRvIHRoaXMKLW1vZGVsLiBTT0FQIGVuY29kaW5nIGlzIG5vdCBXUy1JIGNvbXBsaWFudCBhbmQgdGh1cyB0aGUgTGl0ZXJhbCB1c2UgKHdoaWNoCi1pcyBubyBlbmNvZGluZykgaXMgc3VnZ2VzdGVkIGZvciBpbnRlcm9wZXJhYmxlIFdlYiBzZXJ2aWNlcyBhbmQgcmVxdWlyZWQgZm9yCi1XUy1JIGNvbXBsaWFuY2UuPC9saT4KLTxsaT4gPHVpY29udHJvbD5Db21tdW5pY2F0aW9uIHN0eWxlcy48L3VpY29udHJvbD4gQ29tbXVuaWNhdGlvbnMgY2FuIGZvbGxvdwotYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgKFJQQykgb3IgbWVzc2FnZS1vcmllbnRlZCAoRG9jdW1lbnQpIGZvcm1hdC4mbmJzcDsKLVRoZXNlIGFyZSBkaXNjdXNzZWQgYmVsb3cuPC9saT4KLTwvdWw+Ci08c2VjdGlvbj48dGl0bGU+QmluZGluZyBzdHlsZXM8L3RpdGxlPjxwPlNPQVAgc3VwcG9ydHMgdHdvIGRpZmZlcmVudCBjb21tdW5pY2F0aW9uCi1zdHlsZXM6PC9wPjxscT4gPHA+IDx1aWNvbnRyb2w+UmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpOjwvdWljb250cm9sPiZuYnNwOwotSW52b2NhdGlvbiBvZiBhbiBvcGVyYXRpb24gcmV0dXJuaW5nIGEgcmVzdWx0LiBUeXBpY2FsbHkgdXNlZCB3aXRoIFNPQVAgZW5jb2RpbmcsCi13aGljaCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9wPjxwPiA8dWljb250cm9sPkRvY3VtZW50IFN0eWxlOjwvdWljb250cm9sPiZuYnNwOwotQWxzbyBrbm93biBhcyBkb2N1bWVudC1vcmllbnRlZCBvciBtZXNzYWdlLW9yaWVudGVkIHN0eWxlLiZuYnNwOyBUaGlzIHN0eWxlCi1wcm92aWRlcyBhIGxvd2VyIGxheWVyIG9mIGFic3RyYWN0aW9uLCBhbmQgcmVxdWlyZXMgbW9yZSBwcm9ncmFtbWluZyB3b3JrLjwvcD4gPC9scT48L3NlY3Rpb24+Ci08c2VjdGlvbj48dGl0bGU+RW5jb2Rpbmcgc3R5bGVzPC90aXRsZT48cD5JbiBkaXN0cmlidXRlZCBjb21wdXRpbmcgZW52aXJvbm1lbnRzLAotZW5jb2Rpbmcgc3R5bGVzIGRlZmluZSBob3cgZGF0YSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24gY2FuIGJlIHRyYW5zbGF0ZWQKLXRvIGFuZCBmcm9tIGEgcGFydGljdWxhciBwcm90b2NvbCBmb3JtYXQuJm5ic3A7IFRoZSB0cmFuc2xhdGlvbiBwcm9jZXNzIGlzCi1rbm93IGFzIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi48L3A+PHA+VGhlIFNPQVAgc3BlY2lmaWNhdGlvbiBkZWZpbmVzCi10aGUgU09BUCBlbmNvZGluZyBzdHlsZTo8L3A+PGxxPiA8cD4gPHVpY29udHJvbD5TT0FQIGVuY29kaW5nOjwvdWljb250cm9sPiZuYnNwOwotVGhlIFNPQVAgZW5jb2Rpbmcgc3R5bGUgYWxsb3dzIHlvdSB0byBzZXJpYWxpemUvZGVzZXJpYWxpemUgdmFsdWVzIG9mIGRhdGEKLXR5cGVzIGZyb20gdGhlIFNPQVAgZGF0YSBtb2RlbC4mbmJzcDsgVGhpcyBlbmNvZGluZyBzdHlsZSBpcyBkZWZpbmVkIGluIHRoZQotU09BUCAxLjEgc3RhbmRhcmQsIGFuZCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9wPiA8L2xxPjxwPldTREwgZGVmaW5lcyB0aGUKLUxpdGVyYWwgWE1MIGVuY29kaW5nIHN0eWxlOjwvcD48bHE+IDxwPiA8dWljb250cm9sPkxpdGVyYWwgWE1MOjwvdWljb250cm9sPiZuYnNwOwotTGl0ZXJhbCByZWZlcnMgdG8gdGhlIGZhY3QgdGhhdCB0aGUgZG9jdW1lbnQgc2hvdWxkIGJlIHJlYWQgYXMtaXMsIG9yIHVuZW5jb2RlZC4KLVRoZSBkb2N1bWVudCBpcyBzZXJpYWxpemVkIGFzIFhNSSwgbWVhbmluZyB0aGF0IHRoZSBtZXNzYWdlIFhNTCBjb21wbGllcyB3aXRoCi10aGUgU2NoZW1hIGluIHRoZSBXU0RMLiBXaGVuIHVzaW5nIExpdGVyYWwgZW5jb2RpbmcsIGVhY2ggbWVzc2FnZSBwYXJ0IHJlZmVyZW5jZXMKLWEgY29uY3JldGUgc2NoZW1hIGRlZmluaXRpb24uIExpdGVyYWwgZW5jb2RpbmcgaXMgV1MtSSBjb21wbGlhbnQuPC9wPiA8L2xxPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5EYXRhIG1vZGVsPC90aXRsZT48cD5UaGUgcHVycG9zZSBvZiB0aGUgU09BUCBkYXRhIG1vZGVsIGlzCi10byBwcm92aWRlIGEgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgYWJzdHJhY3Rpb24gZm9yIGRhdGEgdHlwZXMgdXNlZCBieSBjb21tb24KLXByb2dyYW1taW5nIGxhbmd1YWdlIHR5cGVzLiZuYnNwO0l0IGNvbnNpc3RzIG9mOjwvcD48dWw+Ci08bGk+IDx1aWNvbnRyb2w+U2ltcGxlIFhTRCB0eXBlcy48L3VpY29udHJvbD4mbmJzcDsgRm9yIGV4YW1wbGUgaW50LCBzdHJpbmcsCi1hbmQgZGF0ZS48L2xpPgotPGxpPiA8dWljb250cm9sPkNvbXBvdW5kIHR5cGVzLjwvdWljb250cm9sPiZuYnNwOyBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIGNvbXBvdW5kCi10eXBlcywgIDx2YXJuYW1lPnN0cnVjdHM8L3Zhcm5hbWU+IGFuZCAgPHZhcm5hbWU+YXJyYXlzPC92YXJuYW1lPi4mbmJzcDsgU3RydWN0cwotYXJlIG5hbWVkIGFnZ3JlZ2F0ZSB0eXBlcyBpbiB3aGljaCBlYWNoIGVsZW1lbnQgaGFzIGEgdW5pcXVlIG5hbWUgb3IgWE1MIHRhZy4mbmJzcDsKLUFycmF5cyBoYXZlIGVsZW1lbnRzIHRoYXQgYXJlIGlkZW50aWZpZWQgYnkgcG9zaXRpb24sIG5vdCBieSBuYW1lLjwvbGk+Ci08L3VsPjxwPkFsbCBlbGVtZW50cyBhbmQgaWRlbnRpZmllcnMgY29tcHJpc2luZyB0aGUgU09BUCBkYXRhIG1vZGVsIGFyZSBkZWZpbmVkCi1pbiB0aGUgbmFtZXNwYWNlIFVSSS4mbmJzcDsgVGhlIFNPQVAgc3RhbmRhcmQgZGVmaW5lcyB0aGUgcnVsZXMgZm9yIGhvdyBkYXRhCi10eXBlcyBjYW4gYmUgY29uc3RydWN0ZWQuIEEgcHJvamVjdCBzcGVjaWZpYyBYTUwgc2NoZW1hIG11c3QgZGVmaW5lIHRoZSBhY3R1YWwKLWRhdGEgdHlwZXMuIFRoZSBlbGVtZW50cyBvZiB0aGUgU09BUCBzcGVjaWZpY2F0aW9uIGFyZSBkZWZpbmVkIGluICA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLzwveHJlZj4gYW5kCi0gPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLzwveHJlZj48L3A+PC9zZWN0aW9uPgotPHNlY3Rpb24+PHRpdGxlPlNPQVAgaW1wbGVtZW50YXRpb25zPC90aXRsZT48cD5EaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mCi10aGUgU09BUCBwcm90b2NvbCBhcmUgYXZhaWxhYmxlIHRvZGF5LiZuYnNwOyBGb3IgZXhhbXBsZSwgdGhlIEFwYWNoZSBGb3VuZGF0aW9uCi1wcm92aWRlcyBBcGFjaGUgU09BUCwgd2hpY2ggZ3JldyBvdXQgb2YgYW4gPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIgotdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBwcm9qZWN0IGNhbGxlZCBTT0FQNEosIGFzIHdlbGwgYXMgQXBhY2hlCi1BeGlzIGFuZCB0aGUgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IDx0bQotdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IldlYlNwaGVyZSI+V2ViU3BoZXJlPC90bT4gcnVuLXRpbWUKLWVudmlyb25tZW50LiBUaGUgcHJvdmlkZWQgV2ViIHNlcnZpY2VzIHRvb2xzIHN1cHBvcnQgQXBhY2hlIFNPQVAgMi4zLCBBeGlzCi0xLjMsIGFuZCA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gPHRtCi10bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iV2ViU3BoZXJlIj5XZWJTcGhlcmU8L3RtPiBpbXBsZW1lbnRhdGlvbnMuPC9wPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5NYXBwaW5nczwvdGl0bGU+PHA+QSBtYXBwaW5nIGRlZmluZXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbgotYSBxdWFsaWZpZWQgWE1MIGVsZW1lbnQgbmFtZSwgYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsYXNzIG5hbWUsIGFuZCBhbiBlbmNvZGluZyBzdHlsZS4mbmJzcDsKLVRoZSBtYXBwaW5nIHNwZWNpZmllcyBob3csIHVuZGVyIHRoZSBnaXZlbiBlbmNvZGluZywgYW4gaW5jb21pbmcgWE1MIGVsZW1lbnQKLXdpdGggYSBmdWxseSBxdWFsaWZpZWQgbmFtZSBpcyBjb252ZXJ0ZWQgdG8gYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsYXNzIGFuZCB2aWNlIHZlcnNhLjwvcD48cD5Gb3IgbW9yZQotaW5mb3JtYXRpb24gb24gQXBhY2hlIFNPQVAsIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy9zb2FwIgotc2NvcGU9ImV4dGVybmFsIj54bWwuYXBhY2hlLm9yZy9zb2FwPC94cmVmPiZuYnNwOyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgotU09BUCByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TT0FQIiBzY29wZT0iZXh0ZXJuYWwiPnd3dy53My5vcmcvVFIvU09BUDwveHJlZj4gPC9wPjwvc2VjdGlvbj4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48bGlua3RleHQ+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48bGlua3RleHQ+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+Ci08L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZTBiMDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJTT0FQIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0IHByb3RvY29sIGZvciB0aGUgZXhjaGFuZ2Ugb2YgaW5mb3JtYXRpb24gaW4gYSBkZWNlbnRyYWxpemVkLCBkaXN0cmlidXRlZCBlbnZpcm9ubWVudC4gQSBTT0FQIG1lc3NhZ2UgaXMgYSB0cmFuc21pc3Npb24gb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNlbmRlciB0byBhIHJlY2VpdmVyLiBTT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0IHByb3RvY29sIGZvciB0aGUgZXhjaGFuZ2Ugb2YgaW5mb3JtYXRpb24gaW4gYSBkZWNlbnRyYWxpemVkLCBkaXN0cmlidXRlZCBlbnZpcm9ubWVudC4gQSBTT0FQIG1lc3NhZ2UgaXMgYSB0cmFuc21pc3Npb24gb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNlbmRlciB0byBhIHJlY2VpdmVyLiBTT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuIiAvPgotPG1ldGEgY29udGVudD0iU09BUCwgb3ZlcnZpZXcsIFdlYiBzZXJ2aWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlNPQVAsIG92ZXJ2aWV3LCBXZWIgc2VydmljZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjc29hcCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlNPQVA8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNzb2FwIj48YSBuYW1lPSJjc29hcCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+U09BUDwvaDE+Ci0KLQotCi08ZGl2PjxwPlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0Ci1wcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuCi1BIFNPQVAgbWVzc2FnZSBpcyBhIHRyYW5zbWlzc2lvbiBvZiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VuZGVyIHRvIGEgcmVjZWl2ZXIuCi1TT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuIDwvcD4KLQotPHA+U09BUCBpcyB0cmFuc3BvcnQgaW5kZXBlbmRlbnQgYnV0IGlzIG1vc3QgY29tbW9ubHkgY2FycmllZCBvdmVyIEhUVFAgaW4KLW9yZGVyIHRvIHJ1biB3aXRoIHRoZSBleGlzdGluZyBJbnRlcm5ldCBpbmZyYXN0cnVjdHVyZS7CoCBTT0FQIGVuYWJsZXMKLXRoZSBiaW5kaW5nIGFuZCB1c2FnZSBvZiBkaXNjb3ZlcmVkIFdlYiBzZXJ2aWNlcyBieSBkZWZpbmluZyBhIG1lc3NhZ2UgcGF0aAotZm9yIHJvdXRpbmcgbWVzc2FnZXMuIFNPQVAgaXMgdXNlZCB0byBxdWVyeSBVRERJIGZvciBXZWIgc2VydmljZXMuIFRoZSB3b3JrYmVuY2gKLXN1cHBvcnRzIFNPQVAgMS4xLjwvcD4KLQotPHA+U09BUCBpcyBhbiBYTUwtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIHRocmVlIHBhcnRzIHRvIGV2ZXJ5IG1lc3NhZ2U6PC9wPgotCi08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkVudmVsb3BlLjwvc3Bhbj7CoCBUaGUgZW52ZWxvcGUgZGVmaW5lcyBhIGZyYW1ld29yawotZm9yIGRlc2NyaWJpbmcgd2hhdCBpcyBpbiBhIG1lc3NhZ2UgYW5kIGhvdyB0byBwcm9jZXNzIGl0LsKgIEEgU09BUCBtZXNzYWdlCi1pcyBhbiBlbnZlbG9wZSBjb250YWluaW5nIHplcm8gb3IgbW9yZSBoZWFkZXJzIGFuZCBleGFjdGx5IG9uZSBib2R5LsKgCi1UaGUgZW52ZWxvcGUgaXMgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBYTUwgZG9jdW1lbnQsIHByb3ZpZGluZyBhIGNvbnRhaW5lcgotZm9yIGNvbnRyb2wgaW5mb3JtYXRpb24sIHRoZSBhZGRyZXNzIG9mIGEgbWVzc2FnZSwgYW5kIHRoZSBtZXNzYWdlIGl0c2VsZi7CoAotSGVhZGVycyB0cmFuc3BvcnQgYW55IGNvbnRyb2wgaW5mb3JtYXRpb24gc3VjaCBhcyBxdWFsaXR5LW9mLXNlcnZpY2UgYXR0cmlidXRlcy7CoAotVGhlIGJvZHkgY29udGFpbnMgdGhlIG1lc3NhZ2UgaWRlbnRpZmljYXRpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLsKgIEJvdGgKLXRoZSBoZWFkZXJzIGFuZCB0aGUgYm9keSBhcmUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGVudmVsb3BlLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RW5jb2RpbmcgcnVsZXMuPC9zcGFuPsKgIFRoZSBzZXQgb2YgZW5jb2RpbmcgcnVsZXMKLWV4cHJlc3NlcyBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZCBkYXRhIHR5cGVzLiBFbmNvZGluZyBydWxlcyBkZWZpbmUKLWEgc2VyaWFsaXphdGlvbiBtZWNoYW5pc20gdGhhdCBjYW4gYmUgdXNlZCB0byBleGNoYW5nZSBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZAotZGF0YSB0eXBlcy4gU09BUCBkZWZpbmVzIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGF0YSB0eXBlIHNjaGVtZQotYmFzZWQgb24gWFNEIHBsdXMgZW5jb2RpbmcgcnVsZXMgZm9yIGFsbCBkYXRhIHR5cGVzIGRlZmluZWQgYWNjb3JkaW5nIHRvIHRoaXMKLW1vZGVsLiBTT0FQIGVuY29kaW5nIGlzIG5vdCBXUy1JIGNvbXBsaWFudCBhbmQgdGh1cyB0aGUgTGl0ZXJhbCB1c2UgKHdoaWNoCi1pcyBubyBlbmNvZGluZykgaXMgc3VnZ2VzdGVkIGZvciBpbnRlcm9wZXJhYmxlIFdlYiBzZXJ2aWNlcyBhbmQgcmVxdWlyZWQgZm9yCi1XUy1JIGNvbXBsaWFuY2UuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Db21tdW5pY2F0aW9uIHN0eWxlcy48L3NwYW4+IENvbW11bmljYXRpb25zIGNhbiBmb2xsb3cKLWEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpIG9yIG1lc3NhZ2Utb3JpZW50ZWQgKERvY3VtZW50KSBmb3JtYXQuwqAKLVRoZXNlIGFyZSBkaXNjdXNzZWQgYmVsb3cuPC9saT4KLQotPC91bD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkJpbmRpbmcgc3R5bGVzPC9oND48cD5TT0FQIHN1cHBvcnRzIHR3byBkaWZmZXJlbnQgY29tbXVuaWNhdGlvbgotc3R5bGVzOjwvcD4KLTxibG9ja3F1b3RlPiA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpOjwvc3Bhbj7CoAotSW52b2NhdGlvbiBvZiBhbiBvcGVyYXRpb24gcmV0dXJuaW5nIGEgcmVzdWx0LiBUeXBpY2FsbHkgdXNlZCB3aXRoIFNPQVAgZW5jb2RpbmcsCi13aGljaCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9wPgotPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRvY3VtZW50IFN0eWxlOjwvc3Bhbj7CoAotQWxzbyBrbm93biBhcyBkb2N1bWVudC1vcmllbnRlZCBvciBtZXNzYWdlLW9yaWVudGVkIHN0eWxlLsKgIFRoaXMgc3R5bGUKLXByb3ZpZGVzIGEgbG93ZXIgbGF5ZXIgb2YgYWJzdHJhY3Rpb24sIGFuZCByZXF1aXJlcyBtb3JlIHByb2dyYW1taW5nIHdvcmsuPC9wPgotIDwvYmxvY2txdW90ZT4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+RW5jb2Rpbmcgc3R5bGVzPC9oND48cD5JbiBkaXN0cmlidXRlZCBjb21wdXRpbmcgZW52aXJvbm1lbnRzLAotZW5jb2Rpbmcgc3R5bGVzIGRlZmluZSBob3cgZGF0YSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24gY2FuIGJlIHRyYW5zbGF0ZWQKLXRvIGFuZCBmcm9tIGEgcGFydGljdWxhciBwcm90b2NvbCBmb3JtYXQuwqAgVGhlIHRyYW5zbGF0aW9uIHByb2Nlc3MgaXMKLWtub3cgYXMgc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLjwvcD4KLTxwPlRoZSBTT0FQIHNwZWNpZmljYXRpb24gZGVmaW5lcwotdGhlIFNPQVAgZW5jb2Rpbmcgc3R5bGU6PC9wPgotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TT0FQIGVuY29kaW5nOjwvc3Bhbj7CoAotVGhlIFNPQVAgZW5jb2Rpbmcgc3R5bGUgYWxsb3dzIHlvdSB0byBzZXJpYWxpemUvZGVzZXJpYWxpemUgdmFsdWVzIG9mIGRhdGEKLXR5cGVzIGZyb20gdGhlIFNPQVAgZGF0YSBtb2RlbC7CoCBUaGlzIGVuY29kaW5nIHN0eWxlIGlzIGRlZmluZWQgaW4gdGhlCi1TT0FQIDEuMSBzdGFuZGFyZCwgYW5kIGlzIG5vdCBXUy1JIGNvbXBsaWFudC48L3A+Ci0gPC9ibG9ja3F1b3RlPgotPHA+V1NETCBkZWZpbmVzIHRoZQotTGl0ZXJhbCBYTUwgZW5jb2Rpbmcgc3R5bGU6PC9wPgotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5MaXRlcmFsIFhNTDo8L3NwYW4+wqAKLUxpdGVyYWwgcmVmZXJzIHRvIHRoZSBmYWN0IHRoYXQgdGhlIGRvY3VtZW50IHNob3VsZCBiZSByZWFkIGFzLWlzLCBvciB1bmVuY29kZWQuCi1UaGUgZG9jdW1lbnQgaXMgc2VyaWFsaXplZCBhcyBYTUksIG1lYW5pbmcgdGhhdCB0aGUgbWVzc2FnZSBYTUwgY29tcGxpZXMgd2l0aAotdGhlIFNjaGVtYSBpbiB0aGUgV1NETC4gV2hlbiB1c2luZyBMaXRlcmFsIGVuY29kaW5nLCBlYWNoIG1lc3NhZ2UgcGFydCByZWZlcmVuY2VzCi1hIGNvbmNyZXRlIHNjaGVtYSBkZWZpbml0aW9uLiBMaXRlcmFsIGVuY29kaW5nIGlzIFdTLUkgY29tcGxpYW50LjwvcD4KLSA8L2Jsb2NrcXVvdGU+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkRhdGEgbW9kZWw8L2g0PjxwPlRoZSBwdXJwb3NlIG9mIHRoZSBTT0FQIGRhdGEgbW9kZWwgaXMKLXRvIHByb3ZpZGUgYSBsYW5ndWFnZS1pbmRlcGVuZGVudCBhYnN0cmFjdGlvbiBmb3IgZGF0YSB0eXBlcyB1c2VkIGJ5IGNvbW1vbgotcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdHlwZXMuwqBJdCBjb25zaXN0cyBvZjo8L3A+Ci08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNpbXBsZSBYU0QgdHlwZXMuPC9zcGFuPsKgIEZvciBleGFtcGxlIGludCwgc3RyaW5nLAotYW5kIGRhdGUuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Db21wb3VuZCB0eXBlcy48L3NwYW4+wqAgVGhlcmUgYXJlIHR3byBraW5kcyBvZiBjb21wb3VuZAotdHlwZXMsICA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5zdHJ1Y3RzPC92YXI+IGFuZCAgPHZhciBjbGFzcz0idmFybmFtZSI+YXJyYXlzPC92YXI+LsKgIFN0cnVjdHMKLWFyZSBuYW1lZCBhZ2dyZWdhdGUgdHlwZXMgaW4gd2hpY2ggZWFjaCBlbGVtZW50IGhhcyBhIHVuaXF1ZSBuYW1lIG9yIFhNTCB0YWcuwqAKLUFycmF5cyBoYXZlIGVsZW1lbnRzIHRoYXQgYXJlIGlkZW50aWZpZWQgYnkgcG9zaXRpb24sIG5vdCBieSBuYW1lLjwvbGk+Ci0KLTwvdWw+Ci08cD5BbGwgZWxlbWVudHMgYW5kIGlkZW50aWZpZXJzIGNvbXByaXNpbmcgdGhlIFNPQVAgZGF0YSBtb2RlbCBhcmUgZGVmaW5lZAotaW4gdGhlIG5hbWVzcGFjZSBVUkkuwqAgVGhlIFNPQVAgc3RhbmRhcmQgZGVmaW5lcyB0aGUgcnVsZXMgZm9yIGhvdyBkYXRhCi10eXBlcyBjYW4gYmUgY29uc3RydWN0ZWQuIEEgcHJvamVjdCBzcGVjaWZpYyBYTUwgc2NoZW1hIG11c3QgZGVmaW5lIHRoZSBhY3R1YWwKLWRhdGEgdHlwZXMuIFRoZSBlbGVtZW50cyBvZiB0aGUgU09BUCBzcGVjaWZpY2F0aW9uIGFyZSBkZWZpbmVkIGluICA8YSBocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvPC9hPiBhbmQKLSA8YSBocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvPC9hPjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+U09BUCBpbXBsZW1lbnRhdGlvbnM8L2g0PjxwPkRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgb2YKLXRoZSBTT0FQIHByb3RvY29sIGFyZSBhdmFpbGFibGUgdG9kYXkuwqAgRm9yIGV4YW1wbGUsIHRoZSBBcGFjaGUgRm91bmRhdGlvbgotcHJvdmlkZXMgQXBhY2hlIFNPQVAsIHdoaWNoIGdyZXcgb3V0IG9mIGFuIElCTTxzdXA+wq48L3N1cD4gcHJvamVjdCBjYWxsZWQgU09BUDRKLCBhcyB3ZWxsIGFzIEFwYWNoZQotQXhpcyBhbmQgdGhlIElCTSBXZWJTcGhlcmU8c3VwPsKuPC9zdXA+IHJ1bi10aW1lCi1lbnZpcm9ubWVudC4gVGhlIHByb3ZpZGVkIFdlYiBzZXJ2aWNlcyB0b29scyBzdXBwb3J0IEFwYWNoZSBTT0FQIDIuMywgQXhpcwotMS4zLCBhbmQgSUJNIFdlYlNwaGVyZSBpbXBsZW1lbnRhdGlvbnMuPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5NYXBwaW5nczwvaDQ+PHA+QSBtYXBwaW5nIGRlZmluZXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbgotYSBxdWFsaWZpZWQgWE1MIGVsZW1lbnQgbmFtZSwgYSBKYXZh4oSiIGNsYXNzIG5hbWUsIGFuZCBhbiBlbmNvZGluZyBzdHlsZS7CoAotVGhlIG1hcHBpbmcgc3BlY2lmaWVzIGhvdywgdW5kZXIgdGhlIGdpdmVuIGVuY29kaW5nLCBhbiBpbmNvbWluZyBYTUwgZWxlbWVudAotd2l0aCBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGlzIGNvbnZlcnRlZCB0byBhIEphdmEgY2xhc3MgYW5kIHZpY2UgdmVyc2EuPC9wPgotPHA+Rm9yIG1vcmUKLWluZm9ybWF0aW9uIG9uIEFwYWNoZSBTT0FQLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3NvYXAiIHRhcmdldD0iX2JsYW5rIj54bWwuYXBhY2hlLm9yZy9zb2FwPC9hPsKgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uCi1TT0FQIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TT0FQIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnczLm9yZy9UUi9TT0FQPC9hPiA8L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIHRpdGxlPSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBlNjI4Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3MiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC90aXRsZT4KLTxzaG9ydGRlc2M+QSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbgotYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseQotbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuCi1XZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoCi1vdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwKLWh1bWFuIGludGVyYWN0aW9uLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+V2ViIHNlcnZpY2VzIGFyZSBzZWxmLWNvbnRhaW5lZCwgc2VsZi1kZXNjcmliaW5nIG1vZHVsYXIgYXBwbGljYXRpb25zIHRoYXQKLWNhbiBiZSBwdWJsaXNoZWQsIGxvY2F0ZWQsIGFuZCBpbnZva2VkIGFjcm9zcyB0aGUgV2ViLjwvcD4KLTxscT4gPHA+IDx1aWNvbnRyb2w+V2ViIHNlcnZpY2VzIGFyZSBzZWxmLWNvbnRhaW5lZC48L3VpY29udHJvbD4gT24gdGhlIGNsaWVudAotc2lkZSwgbm8gYWRkaXRpb25hbCBzb2Z0d2FyZSBpcyByZXF1aXJlZC4mbmJzcDsgQSBwcm9ncmFtbWluZyBsYW5ndWFnZSB3aXRoCi1YTUwgYW5kIEhUVFAgY2xpZW50IHN1cHBvcnQgaXMgZW5vdWdoIHRvIGdldCB5b3Ugc3RhcnRlZC4mbmJzcDsgT24gdGhlIHNlcnZlcgotc2lkZSwgYSBXZWIgc2VydmVyIGFuZCBzZXJ2bGV0IGVuZ2luZSBhcmUgcmVxdWlyZWQuJm5ic3A7IFRoZSBjbGllbnQgYW5kIHNlcnZlcgotY2FuIGJlIGltcGxlbWVudGVkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuJm5ic3A7IEl0IGlzIHBvc3NpYmxlIHRvIFdlYgotc2VydmljZSBlbmFibGUgYW4gZXhpc3RpbmcgYXBwbGljYXRpb24gd2l0aG91dCB3cml0aW5nIGEgc2luZ2xlIGxpbmUgb2YgY29kZS48L3A+IDxwPiA8dWljb250cm9sPldlYgotc2VydmljZXMgYXJlIHNlbGYtZGVzY3JpYmluZy48L3VpY29udHJvbD4gVGhlIGNsaWVudCBhbmQgc2VydmVyIG5lZWQgdG8gcmVjb2duaXplCi1vbmx5IHRoZSBmb3JtYXQgYW5kIGNvbnRlbnQgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWVzc2FnZXMuJm5ic3A7IFRoZSBkZWZpbml0aW9uCi1vZiB0aGUgbWVzc2FnZSBmb3JtYXQgdHJhdmVscyB3aXRoIHRoZSBtZXNzYWdlOyBubyBleHRlcm5hbCBtZXRhZGF0YSByZXBvc2l0b3JpZXMKLW9yIGNvZGUgZ2VuZXJhdGlvbiB0b29scyBhcmUgcmVxdWlyZWQuPC9wPiA8cD4gPHVpY29udHJvbD5XZWIgc2VydmljZXMgYXJlCi1tb2R1bGFyLjwvdWljb250cm9sPiBTaW1wbGUgV2ViIHNlcnZpY2VzIGNhbiBiZSBhZ2dyZWdhdGVkIHRvIGZvcm0gbW9yZSBjb21wbGV4Ci1XZWIgc2VydmljZXMgZWl0aGVyIGJ5IHVzaW5nIHdvcmtmbG93IHRlY2huaXF1ZXMgb3IgYnkgY2FsbGluZyBsb3dlciBsYXllcgotV2ViIHNlcnZpY2VzIGZyb20gYSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbi48L3A+PHA+PHVpY29udHJvbD5XZWIgU2VydmljZXMKLWFyZSBwbGF0Zm9ybSBpbmRlcGVuZGVudC48L3VpY29udHJvbD4gV2ViIHNlcnZpY2VzIGFyZSBiYXNlZCBvbiBhIGNvbmNpc2UKLXNldCBvZiBvcGVuLCBYTUwtYmFzZWQgc3RhbmRhcmRzIGRlc2lnbmVkIHRvIHByb21vdGUgaW50ZXJvcGVyYWJpbGl0eSBiZXR3ZWVuCi1hIFdlYiBzZXJ2aWNlIGFuZCBjbGllbnRzIGFjcm9zcyBhIHZhcmlldHkgb2YgY29tcHV0aW5nIHBsYXRmb3JtcyBhbmQgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlcy48L3A+IDwvbHE+Ci08cD5XZWIgc2VydmljZXMgbWlnaHQgYmUgYW55dGhpbmcsIGZvciBleGFtcGxlLCB0aGVhdHJlIHJldmlldyBhcnRpY2xlcywgd2VhdGhlcgotcmVwb3J0cywgY3JlZGl0IGNoZWNrcywgc3RvY2sgcXVvdGF0aW9ucywgdHJhdmVsIGFkdmlzb3JpZXMsIG9yIGFpcmxpbmUgdHJhdmVsCi1yZXNlcnZhdGlvbiBwcm9jZXNzZXMuIEVhY2ggb2YgdGhlc2Ugc2VsZi1jb250YWluZWQgYnVzaW5lc3Mgc2VydmljZXMgaXMgYW4KLWFwcGxpY2F0aW9uIHRoYXQgY2FuIGVhc2lseSBpbnRlZ3JhdGUgd2l0aCBvdGhlciBzZXJ2aWNlcywgZnJvbSB0aGUgc2FtZSBvcgotZGlmZmVyZW50IGNvbXBhbmllcywgdG8gY3JlYXRlIGEgY29tcGxldGUgYnVzaW5lc3MgcHJvY2Vzcy4gVGhpcyBpbnRlcm9wZXJhYmlsaXR5Ci1hbGxvd3MgYnVzaW5lc3NlcyB0byBkeW5hbWljYWxseSBwdWJsaXNoLCBkaXNjb3ZlciwgYW5kIGJpbmQgYSByYW5nZSBvZiBXZWIKLXNlcnZpY2VzIHRocm91Z2ggdGhlIEludGVybmV0LjwvcD4KLTxzZWN0aW9uPjx0aXRsZT5DYXRlZ29yaWVzIG9mIFdlYiBzZXJ2aWNlczwvdGl0bGU+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBncm91cGVkCi1pbnRvIHRocmVlIGNhdGVnb3JpZXM6PC9wPjxscT4gPHA+IDx1aWNvbnRyb2w+QnVzaW5lc3MgaW5mb3JtYXRpb24uPC91aWNvbnRyb2w+IEEKLWJ1c2luZXNzIHNoYXJlcyBpbmZvcm1hdGlvbiB3aXRoIGNvbnN1bWVycyBvciBvdGhlciBidXNpbmVzc2VzLiBJbiB0aGlzIGNhc2UsCi10aGUgYnVzaW5lc3MgaXMgdXNpbmcgV2ViIHNlcnZpY2VzIHRvIGV4cGFuZCBpdHMgc2NvcGUuIEV4YW1wbGVzIG9mIGJ1c2luZXNzCi1pbmZvcm1hdGlvbmFsIFdlYiBzZXJ2aWNlcyBhcmUgbmV3cyBzdHJlYW1zLCB3ZWF0aGVyIHJlcG9ydHMsIG9yIHN0b2NrIHF1b3RhdGlvbnMuPC9wPiA8cD4gPHVpY29udHJvbD5CdXNpbmVzcwotaW50ZWdyYXRpb24uPC91aWNvbnRyb2w+IEEgYnVzaW5lc3MgcHJvdmlkZXMgdHJhbnNhY3Rpb25hbCwgImZvciBmZWUiIHNlcnZpY2VzCi10byBpdHMgY3VzdG9tZXJzLiBJbiB0aGlzIGNhc2UsIHRoZSBidXNpbmVzcyBiZWNvbWVzIHBhcnQgb2YgYSBnbG9iYWwgbmV0d29yawotb2YgdmFsdWUtYWRkZWQgc3VwcGxpZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZHVjdCBjb21tZXJjZS4gRXhhbXBsZXMgb2YKLWJ1c2luZXNzIGludGVncmF0aW9uIFdlYiBzZXJ2aWNlcyBpbmNsdWRlIGJpZCBhbmQgYXVjdGlvbiBlLW1hcmtldHBsYWNlcywKLXJlc2VydmF0aW9uIHN5c3RlbXMsIGFuZCBjcmVkaXQgY2hlY2tpbmcuPC9wPiA8cD4gPHVpY29udHJvbD5CdXNpbmVzcyBwcm9jZXNzCi1leHRlcm5hbGl6YXRpb24uPC91aWNvbnRyb2w+IEEgYnVzaW5lc3MgZGlmZmVyZW50aWF0ZXMgaXRzZWxmIGZyb20gaXRzIGNvbXBldGl0aW9uCi10aHJvdWdoIHRoZSBjcmVhdGlvbiBvZiBhIGdsb2JhbCB2YWx1ZSBjaGFpbi4gSW4gdGhpcyBjYXNlLCB0aGUgYnVzaW5lc3MgdXNlcwotV2ViIHNlcnZpY2VzIHRvIGR5bmFtaWNhbGx5IGludGVncmF0ZSBpdHMgcHJvY2Vzc2VzLiBBbiBleGFtcGxlIG9mIGJ1c2luZXNzCi1wcm9jZXNzIGV4dGVybmFsaXphdGlvbiBXZWIgc2VydmljZXMgaXMgdGhlIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGRpZmZlcmVudAotY29tcGFuaWVzIHRvIGNvbWJpbmUgbWFudWZhY3R1cmluZywgYXNzZW1ibHksIHdob2xlc2FsZSBkaXN0cmlidXRpb24sIGFuZAotcmV0YWlsIHNhbGVzIG9mIGEgcGFydGljdWxhciBwcm9kdWN0LjwvcD4gPC9scT48L3NlY3Rpb24+Ci08c2VjdGlvbj48dGl0bGU+U2VydmljZSByb2xlcyBhbmQgaW50ZXJhY3Rpb25zPC90aXRsZT48cD5BIG5ldHdvcmsgY29tcG9uZW50Ci1pbiBhIFdlYiBTZXJ2aWNlcyBhcmNoaXRlY3R1cmUgY2FuIHBsYXkgb25lIG9yIG1vcmUgZnVuZGFtZW50YWwgcm9sZXM6IHNlcnZpY2UKLXByb3ZpZGVyLCBzZXJ2aWNlIGJyb2tlciwgYW5kIHNlcnZpY2UgY2xpZW50LjwvcD48dWw+Ci08bGk+U2VydmljZSBwcm92aWRlcnMgY3JlYXRlIGFuZCBkZXBsb3kgdGhlaXIgV2ViIHNlcnZpY2VzIGFuZCBjYW4gcHVibGlzaAotdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGVpciBXU0RMLWRlc2NyaWJlZCBzZXJ2aWNlcyB0aHJvdWdoIGEgc2VydmljZSByZWdpc3RyeSwKLXN1Y2ggYXMgYSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5LjwvbGk+Ci08bGk+U2VydmljZSBicm9rZXJzIHJlZ2lzdGVyIGFuZCBjYXRlZ29yaXplIHB1Ymxpc2hlZCBzZXJ2aWNlcyBhbmQgcHJvdmlkZQotc2VhcmNoIHNlcnZpY2VzLiBGb3IgZXhhbXBsZSwgVURESSBhY3RzIGFzIGEgc2VydmljZSBicm9rZXIgZm9yIFdTREwtZGVzY3JpYmVkCi1XZWIgc2VydmljZXMuPC9saT4KLTxsaT5TZXJ2aWNlIGNsaWVudHMgdXNlIGJyb2tlciBzZXJ2aWNlcyBzdWNoIGFzIHRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5Ci10byBkaXNjb3ZlciBhIG5lZWRlZCBXU0RMLWRlc2NyaWJlZCBzZXJ2aWNlIGFuZCB0aGVuIGJpbmQgdG8gYW5kIGNhbGwgdGhlCi1zZXJ2aWNlIHByb3ZpZGVyLjwvbGk+Ci08L3VsPjxwPkJpbmRpbmcgaW52b2x2ZXMgZXN0YWJsaXNoaW5nIGFsbCBlbnZpcm9ubWVudGFsIHByZXJlcXVpc2l0ZXMgdGhhdAotYXJlIG5lY2Vzc2FyeSB0byBzdWNjZXNzZnVsbHkgY29tcGxldGUgdGhlIHNlcnZpY2VzLiBFeGFtcGxlcyBvZiBlbnZpcm9ubWVudGFsCi1wcmVyZXF1aXNpdGVzIGluY2x1ZGUgc2VjdXJpdHksIHRyYW5zYWN0aW9uIG1vbml0b3JpbmcsIGFuZCBIVFRQIGF2YWlsYWJpbGl0eS4KLVRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2Ugcm9sZXMgYXJlIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS48L3A+PHA+RmlndXJlCi0xLiBTZXJ2aWNlIHJvbGVzIGFuZCBpbnRlcmFjdGlvbnMuPC9wPjxwPiA8aW1hZ2UgYWx0PSJGaWd1cmUgMSBpbGx1c3RyYXRlcyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHNlcnZpY2UgYnJva2VyLCBzZXJ2aWNlIHByb3ZpZGVyLCBhbmQgc2VydmljZSByZXF1ZXN0b3IuIgotaHJlZj0iLi4vaW1hZ2VzL3JvbGVzLmdpZiI+PC9pbWFnZT4gPC9wPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdlYiBzZXJ2aWNlcywKLXJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcyIKLXNjb3BlPSJleHRlcm5hbCI+d3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXM8L3hyZWY+PC9wPjwvc2VjdGlvbj4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiPjxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD4KLTwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c3N0YW5kYXJkcy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9saW5rdGV4dD4KLTwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgzOWM2Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJXZWIgc2VydmljZXMgb3ZlcnZpZXciIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIG92ZXJ2aWV3IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBvdmVydmlldyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3N0b3Bkb3duLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c3N0YW5kYXJkcy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3MiPjxhIG5hbWU9ImN3cyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9oMT4KLQotCi0KLTxkaXY+PHA+QSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbgotYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseQotbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuCi1XZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoCi1vdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwKLWh1bWFuIGludGVyYWN0aW9uLjwvcD4KLQotPHA+V2ViIHNlcnZpY2VzIGFyZSBzZWxmLWNvbnRhaW5lZCwgc2VsZi1kZXNjcmliaW5nIG1vZHVsYXIgYXBwbGljYXRpb25zIHRoYXQKLWNhbiBiZSBwdWJsaXNoZWQsIGxvY2F0ZWQsIGFuZCBpbnZva2VkIGFjcm9zcyB0aGUgV2ViLjwvcD4KLQotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgc2VydmljZXMgYXJlIHNlbGYtY29udGFpbmVkLjwvc3Bhbj4gT24gdGhlIGNsaWVudAotc2lkZSwgbm8gYWRkaXRpb25hbCBzb2Z0d2FyZSBpcyByZXF1aXJlZC7CoCBBIHByb2dyYW1taW5nIGxhbmd1YWdlIHdpdGgKLVhNTCBhbmQgSFRUUCBjbGllbnQgc3VwcG9ydCBpcyBlbm91Z2ggdG8gZ2V0IHlvdSBzdGFydGVkLsKgIE9uIHRoZSBzZXJ2ZXIKLXNpZGUsIGEgV2ViIHNlcnZlciBhbmQgc2VydmxldCBlbmdpbmUgYXJlIHJlcXVpcmVkLsKgIFRoZSBjbGllbnQgYW5kIHNlcnZlcgotY2FuIGJlIGltcGxlbWVudGVkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuwqAgSXQgaXMgcG9zc2libGUgdG8gV2ViCi1zZXJ2aWNlIGVuYWJsZSBhbiBleGlzdGluZyBhcHBsaWNhdGlvbiB3aXRob3V0IHdyaXRpbmcgYSBzaW5nbGUgbGluZSBvZiBjb2RlLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViCi1zZXJ2aWNlcyBhcmUgc2VsZi1kZXNjcmliaW5nLjwvc3Bhbj4gVGhlIGNsaWVudCBhbmQgc2VydmVyIG5lZWQgdG8gcmVjb2duaXplCi1vbmx5IHRoZSBmb3JtYXQgYW5kIGNvbnRlbnQgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWVzc2FnZXMuwqAgVGhlIGRlZmluaXRpb24KLW9mIHRoZSBtZXNzYWdlIGZvcm1hdCB0cmF2ZWxzIHdpdGggdGhlIG1lc3NhZ2U7IG5vIGV4dGVybmFsIG1ldGFkYXRhIHJlcG9zaXRvcmllcwotb3IgY29kZSBnZW5lcmF0aW9uIHRvb2xzIGFyZSByZXF1aXJlZC48L3A+Ci0gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBzZXJ2aWNlcyBhcmUKLW1vZHVsYXIuPC9zcGFuPiBTaW1wbGUgV2ViIHNlcnZpY2VzIGNhbiBiZSBhZ2dyZWdhdGVkIHRvIGZvcm0gbW9yZSBjb21wbGV4Ci1XZWIgc2VydmljZXMgZWl0aGVyIGJ5IHVzaW5nIHdvcmtmbG93IHRlY2huaXF1ZXMgb3IgYnkgY2FsbGluZyBsb3dlciBsYXllcgotV2ViIHNlcnZpY2VzIGZyb20gYSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbi48L3A+Ci08cD48c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgU2VydmljZXMKLWFyZSBwbGF0Zm9ybSBpbmRlcGVuZGVudC48L3NwYW4+IFdlYiBzZXJ2aWNlcyBhcmUgYmFzZWQgb24gYSBjb25jaXNlCi1zZXQgb2Ygb3BlbiwgWE1MLWJhc2VkIHN0YW5kYXJkcyBkZXNpZ25lZCB0byBwcm9tb3RlIGludGVyb3BlcmFiaWxpdHkgYmV0d2VlbgotYSBXZWIgc2VydmljZSBhbmQgY2xpZW50cyBhY3Jvc3MgYSB2YXJpZXR5IG9mIGNvbXB1dGluZyBwbGF0Zm9ybXMgYW5kIHByb2dyYW1taW5nCi1sYW5ndWFnZXMuPC9wPgotIDwvYmxvY2txdW90ZT4KLQotPHA+V2ViIHNlcnZpY2VzIG1pZ2h0IGJlIGFueXRoaW5nLCBmb3IgZXhhbXBsZSwgdGhlYXRyZSByZXZpZXcgYXJ0aWNsZXMsIHdlYXRoZXIKLXJlcG9ydHMsIGNyZWRpdCBjaGVja3MsIHN0b2NrIHF1b3RhdGlvbnMsIHRyYXZlbCBhZHZpc29yaWVzLCBvciBhaXJsaW5lIHRyYXZlbAotcmVzZXJ2YXRpb24gcHJvY2Vzc2VzLiBFYWNoIG9mIHRoZXNlIHNlbGYtY29udGFpbmVkIGJ1c2luZXNzIHNlcnZpY2VzIGlzIGFuCi1hcHBsaWNhdGlvbiB0aGF0IGNhbiBlYXNpbHkgaW50ZWdyYXRlIHdpdGggb3RoZXIgc2VydmljZXMsIGZyb20gdGhlIHNhbWUgb3IKLWRpZmZlcmVudCBjb21wYW5pZXMsIHRvIGNyZWF0ZSBhIGNvbXBsZXRlIGJ1c2luZXNzIHByb2Nlc3MuIFRoaXMgaW50ZXJvcGVyYWJpbGl0eQotYWxsb3dzIGJ1c2luZXNzZXMgdG8gZHluYW1pY2FsbHkgcHVibGlzaCwgZGlzY292ZXIsIGFuZCBiaW5kIGEgcmFuZ2Ugb2YgV2ViCi1zZXJ2aWNlcyB0aHJvdWdoIHRoZSBJbnRlcm5ldC48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5DYXRlZ29yaWVzIG9mIFdlYiBzZXJ2aWNlczwvaDQ+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBncm91cGVkCi1pbnRvIHRocmVlIGNhdGVnb3JpZXM6PC9wPgotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CdXNpbmVzcyBpbmZvcm1hdGlvbi48L3NwYW4+IEEKLWJ1c2luZXNzIHNoYXJlcyBpbmZvcm1hdGlvbiB3aXRoIGNvbnN1bWVycyBvciBvdGhlciBidXNpbmVzc2VzLiBJbiB0aGlzIGNhc2UsCi10aGUgYnVzaW5lc3MgaXMgdXNpbmcgV2ViIHNlcnZpY2VzIHRvIGV4cGFuZCBpdHMgc2NvcGUuIEV4YW1wbGVzIG9mIGJ1c2luZXNzCi1pbmZvcm1hdGlvbmFsIFdlYiBzZXJ2aWNlcyBhcmUgbmV3cyBzdHJlYW1zLCB3ZWF0aGVyIHJlcG9ydHMsIG9yIHN0b2NrIHF1b3RhdGlvbnMuPC9wPgotIDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CdXNpbmVzcwotaW50ZWdyYXRpb24uPC9zcGFuPiBBIGJ1c2luZXNzIHByb3ZpZGVzIHRyYW5zYWN0aW9uYWwsICJmb3IgZmVlIiBzZXJ2aWNlcwotdG8gaXRzIGN1c3RvbWVycy4gSW4gdGhpcyBjYXNlLCB0aGUgYnVzaW5lc3MgYmVjb21lcyBwYXJ0IG9mIGEgZ2xvYmFsIG5ldHdvcmsKLW9mIHZhbHVlLWFkZGVkIHN1cHBsaWVycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmR1Y3QgY29tbWVyY2UuIEV4YW1wbGVzIG9mCi1idXNpbmVzcyBpbnRlZ3JhdGlvbiBXZWIgc2VydmljZXMgaW5jbHVkZSBiaWQgYW5kIGF1Y3Rpb24gZS1tYXJrZXRwbGFjZXMsCi1yZXNlcnZhdGlvbiBzeXN0ZW1zLCBhbmQgY3JlZGl0IGNoZWNraW5nLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnVzaW5lc3MgcHJvY2VzcwotZXh0ZXJuYWxpemF0aW9uLjwvc3Bhbj4gQSBidXNpbmVzcyBkaWZmZXJlbnRpYXRlcyBpdHNlbGYgZnJvbSBpdHMgY29tcGV0aXRpb24KLXRocm91Z2ggdGhlIGNyZWF0aW9uIG9mIGEgZ2xvYmFsIHZhbHVlIGNoYWluLiBJbiB0aGlzIGNhc2UsIHRoZSBidXNpbmVzcyB1c2VzCi1XZWIgc2VydmljZXMgdG8gZHluYW1pY2FsbHkgaW50ZWdyYXRlIGl0cyBwcm9jZXNzZXMuIEFuIGV4YW1wbGUgb2YgYnVzaW5lc3MKLXByb2Nlc3MgZXh0ZXJuYWxpemF0aW9uIFdlYiBzZXJ2aWNlcyBpcyB0aGUgYXNzb2NpYXRpb25zIGJldHdlZW4gZGlmZmVyZW50Ci1jb21wYW5pZXMgdG8gY29tYmluZSBtYW51ZmFjdHVyaW5nLCBhc3NlbWJseSwgd2hvbGVzYWxlIGRpc3RyaWJ1dGlvbiwgYW5kCi1yZXRhaWwgc2FsZXMgb2YgYSBwYXJ0aWN1bGFyIHByb2R1Y3QuPC9wPgotIDwvYmxvY2txdW90ZT4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+U2VydmljZSByb2xlcyBhbmQgaW50ZXJhY3Rpb25zPC9oND48cD5BIG5ldHdvcmsgY29tcG9uZW50Ci1pbiBhIFdlYiBTZXJ2aWNlcyBhcmNoaXRlY3R1cmUgY2FuIHBsYXkgb25lIG9yIG1vcmUgZnVuZGFtZW50YWwgcm9sZXM6IHNlcnZpY2UKLXByb3ZpZGVyLCBzZXJ2aWNlIGJyb2tlciwgYW5kIHNlcnZpY2UgY2xpZW50LjwvcD4KLTx1bD4KLTxsaT5TZXJ2aWNlIHByb3ZpZGVycyBjcmVhdGUgYW5kIGRlcGxveSB0aGVpciBXZWIgc2VydmljZXMgYW5kIGNhbiBwdWJsaXNoCi10aGUgYXZhaWxhYmlsaXR5IG9mIHRoZWlyIFdTREwtZGVzY3JpYmVkIHNlcnZpY2VzIHRocm91Z2ggYSBzZXJ2aWNlIHJlZ2lzdHJ5LAotc3VjaCBhcyBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkuPC9saT4KLQotPGxpPlNlcnZpY2UgYnJva2VycyByZWdpc3RlciBhbmQgY2F0ZWdvcml6ZSBwdWJsaXNoZWQgc2VydmljZXMgYW5kIHByb3ZpZGUKLXNlYXJjaCBzZXJ2aWNlcy4gRm9yIGV4YW1wbGUsIFVEREkgYWN0cyBhcyBhIHNlcnZpY2UgYnJva2VyIGZvciBXU0RMLWRlc2NyaWJlZAotV2ViIHNlcnZpY2VzLjwvbGk+Ci0KLTxsaT5TZXJ2aWNlIGNsaWVudHMgdXNlIGJyb2tlciBzZXJ2aWNlcyBzdWNoIGFzIHRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5Ci10byBkaXNjb3ZlciBhIG5lZWRlZCBXU0RMLWRlc2NyaWJlZCBzZXJ2aWNlIGFuZCB0aGVuIGJpbmQgdG8gYW5kIGNhbGwgdGhlCi1zZXJ2aWNlIHByb3ZpZGVyLjwvbGk+Ci0KLTwvdWw+Ci08cD5CaW5kaW5nIGludm9sdmVzIGVzdGFibGlzaGluZyBhbGwgZW52aXJvbm1lbnRhbCBwcmVyZXF1aXNpdGVzIHRoYXQKLWFyZSBuZWNlc3NhcnkgdG8gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIHRoZSBzZXJ2aWNlcy4gRXhhbXBsZXMgb2YgZW52aXJvbm1lbnRhbAotcHJlcmVxdWlzaXRlcyBpbmNsdWRlIHNlY3VyaXR5LCB0cmFuc2FjdGlvbiBtb25pdG9yaW5nLCBhbmQgSFRUUCBhdmFpbGFiaWxpdHkuCi1UaGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIHJvbGVzIGFyZSBkZXNjcmliZWQgaW4gRmlndXJlIDEuPC9wPgotPHA+RmlndXJlCi0xLiBTZXJ2aWNlIHJvbGVzIGFuZCBpbnRlcmFjdGlvbnMuPC9wPgotPHA+IDxpbWcgc3JjPSIuLi9pbWFnZXMvcm9sZXMuZ2lmIiBhbHQ9IkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgc2VydmljZSBicm9rZXIsIHNlcnZpY2UgcHJvdmlkZXIsIGFuZCBzZXJ2aWNlIHJlcXVlc3Rvci4iIC8+IDwvcD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdlYiBzZXJ2aWNlcywKLXJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMiIHRhcmdldD0iX2JsYW5rIj53d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlczwvYT48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08dWwgY2xhc3M9InVsbGlua3MiPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCI+V2ViIHNlcnZpY2VzIHN0YW5kYXJkczwvYT48L3N0cm9uZz48YnIgLz4KLU9uZSBvZiB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgSW50ZXJuZXQgc3RhbmRhcmRzIGlzIHRoYXQgdGhleSBmb2N1cyBvbiBwcm90b2NvbHMgYW5kIG5vdCBvbiBpbXBsZW1lbnRhdGlvbnMuIFRoZSBJbnRlcm5ldCBpcyBjb21wb3NlZCBvZiBoZXRlcm9nZW5lb3VzIHRlY2hub2xvZ2llcyB0aGF0IHN1Y2Nlc3NmdWxseSBpbnRlcm9wZXJhdGUgdGhyb3VnaCBzaGFyZWQgcHJvdG9jb2xzLiBUaGlzIHByZXZlbnRzIGluZGl2aWR1YWwgdmVuZG9ycyBmcm9tIGltcG9zaW5nIGEgc3RhbmRhcmQgb24gdGhlIEludGVybmV0LiBPcGVuIFNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBwcmVzZXJ2aW5nIHRoZSBpbnRlcm9wZXJhYmlsaXR5IG9mIHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RhbmRhcmRzLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCI+Q3JlYXRpbmcgdG9wLWRvd24gV2ViIHNlcnZpY2VzPC9hPjwvc3Ryb25nPjxiciAvPgotV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBUb3AtZG93biBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwiPkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXM8L2E+PC9zdHJvbmc+PGJyIC8+Ci1XZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIEJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c3N0YW5kYXJkcy5odG1sIiB0aXRsZT0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzYnRtdXAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxOGY3ZmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzYnRtdXAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5XZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50Ci1hbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBCb3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nCi1hIFdlYiBzZXJ2aWNlIGZyb20gYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gb3IgZW50ZXJwcmlzZSBiZWFuLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5ib3R0b20tdXAgV2ViIHNlcnZpY2VzPGluZGV4dGVybT5vdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmJvdHRvbS11cDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPkFsdGhvdWdoIGJvdHRvbS11cCBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBtYXkgYmUgZmFzdGVyIGFuZCBlYXNpZXIsIGVzcGVjaWFsbHkKLWlmIHlvdSBhcmUgbmV3IHRvIFdlYiBzZXJ2aWNlcywgdGhlIHRvcC1kb3duIGFwcHJvYWNoIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkKLW9mIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UuPC9wPgotPHA+V2hlbiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIGEgYm90dG9tLXVwIGFwcHJvYWNoLCBmaXJzdCB5b3UgY3JlYXRlCi1hIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFuCi1vciBFSkIgYmVhbiBhbmQgdGhlbiB1c2UgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdG8gY3JlYXRlIHRoZSBXU0RMIGZpbGUgYW5kCi1XZWIgc2VydmljZS48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSI+PGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBvdmVydmlldzwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PgotPC9saW5rPgotPGxpbmsgaHJlZj0iY3dzdG9wZG93bi5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5DcmVhdGluZyB0b3AtZG93biBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NidG11cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTMzOWM0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQgYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gb3IgZW50ZXJwcmlzZSBiZWFuLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIEJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi4iIC8+Ci08bWV0YSBjb250ZW50PSJib3R0b20tdXAgV2ViIHNlcnZpY2VzLCBvdmVydmlldywgV2ViIHNlcnZpY2VzLCBib3R0b20tdXAiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJib3R0b20tdXAgV2ViIHNlcnZpY2VzLCBvdmVydmlldywgV2ViIHNlcnZpY2VzLCBib3R0b20tdXAiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c3RvcGRvd24uaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNyZWF0aW5nYm90dG9tLXVwd2Vic2VydmljZXMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj48YSBuYW1lPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudAotYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZwotYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YeKEoiBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi48L3A+Ci0KLTxwPkFsdGhvdWdoIGJvdHRvbS11cCBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBtYXkgYmUgZmFzdGVyIGFuZCBlYXNpZXIsIGVzcGVjaWFsbHkKLWlmIHlvdSBhcmUgbmV3IHRvIFdlYiBzZXJ2aWNlcywgdGhlIHRvcC1kb3duIGFwcHJvYWNoIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkKLW9mIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UuPC9wPgotCi08cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgYSBib3R0b20tdXAgYXBwcm9hY2gsIGZpcnN0IHlvdSBjcmVhdGUKLWEgSmF2YSBiZWFuCi1vciBFSkIgYmVhbiBhbmQgdGhlbiB1c2UgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdG8gY3JlYXRlIHRoZSBXU0RMIGZpbGUgYW5kCi1XZWIgc2VydmljZS48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NpbndzYS5odG1sIiB0aXRsZT0iIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3N0b3Bkb3duLmh0bWwiIHRpdGxlPSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuIj5DcmVhdGluZyB0b3AtZG93biBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjODllOWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC90aXRsZT4KLTxzaG9ydGRlc2M+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24KLWZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yCi1zZXJ2aWNlIHByb3ZpZGVycyB0byBkZXNjcmliZSB0aGUgYmFzaWMgZm9ybWF0IG9mIHJlcXVlc3RzIHRvIHRoZWlyIHN5c3RlbXMKLXJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5XU0RMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPldTREwgZGVmaW5lcyBhbiBYTUwgZm9ybWF0IGZvciBkZXNjcmliaW5nIG5ldHdvcmsgc2VydmljZXMgYXMgYSBzZXQgb2YKLSA8dmFybmFtZT5lbmRwb2ludHM8L3Zhcm5hbWU+IHRoYXQgb3BlcmF0ZSBvbiBtZXNzYWdlcyB0aGF0IGNvbnRhaW4gZWl0aGVyCi1kb2N1bWVudC1vcmllbnRlZCBvciBwcm9jZWR1cmUtb3JpZW50ZWQgaW5mb3JtYXRpb24uIFRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcwotYXJlIGZpcnN0IGRlc2NyaWJlZCBhYnN0cmFjdGx5IGFuZCB0aGVuIGJvdW5kIHRvIGEgY29uY3JldGUgbmV0d29yayBwcm90b2NvbAotYW5kIG1lc3NhZ2UgZm9ybWF0IGluIG9yZGVyIHRvIGRlZmluZSBhbiBlbmRwb2ludC4gUmVsYXRlZCBjb25jcmV0ZSBlbmRwb2ludHMKLWFyZSBjb21iaW5lZCBpbnRvIGFic3RyYWN0IGVuZHBvaW50cyAoc2VydmljZXMpLiBXU0RMIGlzIGV4dGVuc2libGUgdG8gYWxsb3cKLWRlc2NyaXB0aW9uIG9mIGVuZHBvaW50cyBhbmQgdGhlaXIgbWVzc2FnZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggbWVzc2FnZSBmb3JtYXRzCi1vciBuZXR3b3JrIHByb3RvY29scyBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZS4gVGhpcyBtZWFucyB0aGF0IGludGVyZmFjZXMgYXJlCi1kZWZpbmVkIGFic3RyYWN0bHkgdXNpbmcgWE1MIHNjaGVtYSBhbmQgdGhlbiBib3VuZCB0byBjb25jcmV0ZSByZXByZXNlbnRhdGlvbnMKLXRoYXQgYXJlIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvdG9jb2wuPC9wPgotPHA+V1NETCBhbGxvd3MgYSBzZXJ2aWNlIHByb3ZpZGVyIHRvIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJpc3RpY3MKLW9mIGEgV2ViIHNlcnZpY2U6PC9wPgotPHVsPgotPGxpPlRoZSBuYW1lIG9mIHRoZSBXZWIgc2VydmljZSBhbmQgYWRkcmVzc2luZyBpbmZvcm1hdGlvbjwvbGk+Ci08bGk+VGhlIHByb3RvY29sIGFuZCBlbmNvZGluZyBzdHlsZSB0byBiZSB1c2VkIHdoZW4gYWNjZXNzaW5nIHRoZSBwdWJsaWMgb3BlcmF0aW9ucwotb2YgdGhlIFdlYiBzZXJ2aWNlPC9saT4KLTxsaT5UaGUgdHlwZSBpbmZvcm1hdGlvbiBzdWNoIGFzIG9wZXJhdGlvbnMsIHBhcmFtZXRlcnMsIGFuZCBkYXRhIHR5cGVzIGNvbXByaXNpbmcKLXRoZSBpbnRlcmZhY2Ugb2YgdGhlIFdlYiBzZXJ2aWNlPC9saT4KLTwvdWw+Ci08cD5XU0RMIGRvY3VtZW50cyBhbGxvdyBkZXZlbG9wZXJzIHRvIGV4cG9zZSB0aGVpciBhcHBsaWNhdGlvbnMgYXMgbmV0d29yay1hY2Nlc3NpYmxlCi1zZXJ2aWNlcyBvbiB0aGUgSW50ZXJuZXQuIFRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlcgotV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIKLWJ1c2luZXNzIHByb2Nlc3Nlcy48L3A+Ci08cD5UaGlzIGRldmVsb3BtZW50IHBsYXRmb3JtIHN1cHBvcnRzIGFuZCBlbmNvdXJhZ2VzIHRoZSBkZXZlbG9wbWVudCBhbmQgdXNlCi1vZiBXUy1JIGNvbXBsaWFudCBXU0RMLiBCdXNpbmVzcyBzZXJ2aWNlIHByb3ZpZGVycyBjYW4gZGVwbG95IDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbnMKLWFuZCBlbnRlcnByaXNlIGJlYW5zIGFzIGEgV2ViIHNlcnZpY2UgYW5kIGdlbmVyYXRlIGEgV1NETCBkb2N1bWVudCB0aGF0IGRlc2NyaWJlcwotdGhlIHNlcnZpY2UuIFRoZXkgY2FuIGFsc28gZ2VuZXJhdGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBhbmQgZW50ZXJwcmlzZSBiZWFuIHNrZWxldG9ucyBmcm9tCi1hbiBleGlzdGluZyBXU0RMIGZpbGUuIEEgYnVzaW5lc3Mgc2VydmljZSBjbGllbnQgY2FuIGdlbmVyYXRlIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwcm94eQotZnJvbSBhIFdTREwgZG9jdW1lbnQsIHRoZXJlYnkgcHJvdmlkaW5nIGFuIGVhc3ktdG8tdXNlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gaW50ZXJmYWNlCi10byB0aGUgV2ViIHNlcnZpY2UuIFRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGludGVyZmFjZSBoaWRlcyB0aGUgbmV0d29yayBjb21tdW5pY2F0aW9ucwotZGV0YWlscyBmcm9tIHRoZSBjbGllbnQgZW5hYmxpbmcgdGhlIGJ1c2luZXNzIHNlcnZpY2UgcHJvdmlkZXIgdG8gZm9jdXMgb24KLWJ1c2luZXNzIGFuZCBwcm9jZXNzIHBvcnRpb25zIG9mIHRoZSBhcHBsaWNhdGlvbi48L3A+Ci08cD5JbiBhZGRpdGlvbiB0byBwcm92aWRpbmcgdG9vbHMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcywgdGhlIHdvcmtiZW5jaCBwcm92aWRlcwotYSBXU0RMIGVkaXRvciB0aGF0IGFsbG93cyB5b3UgdG8gY3JlYXRlIFdTREwgZmlsZXMgdXNpbmcgYSBncmFwaGljYWwgaW50ZXJmYWNlLAotYSBXU0RMIHZhbGlkYXRvciB0aGF0IGVuc3VyZXMgdGhhdCB5b3VyIFdTREwgZmlsZSBpcyBzZW1hbnRpY2FsbHkgY29ycmVjdAotYW5kIG9wdGlvbmFsbHkgY2hlY2tzIGZvciBXUy1JIGNvbXBsaWFuY2UsIGFuZCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdoaWNoCi1hbGxvd3MgeW91IHRvIGR5bmFtaWNhbGx5IHRlc3QgV2ViIHNlcnZpY2VzIHdpdGhvdXQgcmVxdWlyaW5nIHlvdSB0byBnZW5lcmF0ZQotYSBwcm94eS48L3A+Ci08cD5UaGUgd29ya2JlbmNoIHN1cHBvcnRzIFdTREwgMS4xLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgV1NETCBzcGVjaWZpY2F0aW9uLAotcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgc2NvcGU9ImV4dGVybmFsIj53d3cudzMub3JnL1RSL3dzZGw8L3hyZWY+PC9wPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3dzLmRpdGEiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiPjxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD4KLTwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxYTYyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24gZm9yIGRlc2NyaWJpbmcgbmV0d29ya2VkLCBYTUwtYmFzZWQgc2VydmljZXMuIEl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3Igc2VydmljZSBwcm92aWRlcnMgdG8gZGVzY3JpYmUgdGhlIGJhc2ljIGZvcm1hdCBvZiByZXF1ZXN0cyB0byB0aGVpciBzeXN0ZW1zIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgaXMgYSBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uIGZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yIHNlcnZpY2UgcHJvdmlkZXJzIHRvIGRlc2NyaWJlIHRoZSBiYXNpYyBmb3JtYXQgb2YgcmVxdWVzdHMgdG8gdGhlaXIgc3lzdGVtcyByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIHJ1bi10aW1lIGltcGxlbWVudGF0aW9uLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIG92ZXJ2aWV3LCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBvdmVydmlldywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9yd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN3c2RsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3dzZGwiPjxhIG5hbWU9ImN3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9oMT4KLQotCi0KLTxkaXY+PHA+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24KLWZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yCi1zZXJ2aWNlIHByb3ZpZGVycyB0byBkZXNjcmliZSB0aGUgYmFzaWMgZm9ybWF0IG9mIHJlcXVlc3RzIHRvIHRoZWlyIHN5c3RlbXMKLXJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uPC9wPgotCi08cD5XU0RMIGRlZmluZXMgYW4gWE1MIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBuZXR3b3JrIHNlcnZpY2VzIGFzIGEgc2V0IG9mCi0gPHZhciBjbGFzcz0idmFybmFtZSI+ZW5kcG9pbnRzPC92YXI+IHRoYXQgb3BlcmF0ZSBvbiBtZXNzYWdlcyB0aGF0IGNvbnRhaW4gZWl0aGVyCi1kb2N1bWVudC1vcmllbnRlZCBvciBwcm9jZWR1cmUtb3JpZW50ZWQgaW5mb3JtYXRpb24uIFRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcwotYXJlIGZpcnN0IGRlc2NyaWJlZCBhYnN0cmFjdGx5IGFuZCB0aGVuIGJvdW5kIHRvIGEgY29uY3JldGUgbmV0d29yayBwcm90b2NvbAotYW5kIG1lc3NhZ2UgZm9ybWF0IGluIG9yZGVyIHRvIGRlZmluZSBhbiBlbmRwb2ludC4gUmVsYXRlZCBjb25jcmV0ZSBlbmRwb2ludHMKLWFyZSBjb21iaW5lZCBpbnRvIGFic3RyYWN0IGVuZHBvaW50cyAoc2VydmljZXMpLiBXU0RMIGlzIGV4dGVuc2libGUgdG8gYWxsb3cKLWRlc2NyaXB0aW9uIG9mIGVuZHBvaW50cyBhbmQgdGhlaXIgbWVzc2FnZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggbWVzc2FnZSBmb3JtYXRzCi1vciBuZXR3b3JrIHByb3RvY29scyBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZS4gVGhpcyBtZWFucyB0aGF0IGludGVyZmFjZXMgYXJlCi1kZWZpbmVkIGFic3RyYWN0bHkgdXNpbmcgWE1MIHNjaGVtYSBhbmQgdGhlbiBib3VuZCB0byBjb25jcmV0ZSByZXByZXNlbnRhdGlvbnMKLXRoYXQgYXJlIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvdG9jb2wuPC9wPgotCi08cD5XU0RMIGFsbG93cyBhIHNlcnZpY2UgcHJvdmlkZXIgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcmlzdGljcwotb2YgYSBXZWIgc2VydmljZTo8L3A+Ci0KLTx1bD4KLTxsaT5UaGUgbmFtZSBvZiB0aGUgV2ViIHNlcnZpY2UgYW5kIGFkZHJlc3NpbmcgaW5mb3JtYXRpb248L2xpPgotCi08bGk+VGhlIHByb3RvY29sIGFuZCBlbmNvZGluZyBzdHlsZSB0byBiZSB1c2VkIHdoZW4gYWNjZXNzaW5nIHRoZSBwdWJsaWMgb3BlcmF0aW9ucwotb2YgdGhlIFdlYiBzZXJ2aWNlPC9saT4KLQotPGxpPlRoZSB0eXBlIGluZm9ybWF0aW9uIHN1Y2ggYXMgb3BlcmF0aW9ucywgcGFyYW1ldGVycywgYW5kIGRhdGEgdHlwZXMgY29tcHJpc2luZwotdGhlIGludGVyZmFjZSBvZiB0aGUgV2ViIHNlcnZpY2U8L2xpPgotCi08L3VsPgotCi08cD5XU0RMIGRvY3VtZW50cyBhbGxvdyBkZXZlbG9wZXJzIHRvIGV4cG9zZSB0aGVpciBhcHBsaWNhdGlvbnMgYXMgbmV0d29yay1hY2Nlc3NpYmxlCi1zZXJ2aWNlcyBvbiB0aGUgSW50ZXJuZXQuIFRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlcgotV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIKLWJ1c2luZXNzIHByb2Nlc3Nlcy48L3A+Ci0KLTxwPlRoaXMgZGV2ZWxvcG1lbnQgcGxhdGZvcm0gc3VwcG9ydHMgYW5kIGVuY291cmFnZXMgdGhlIGRldmVsb3BtZW50IGFuZCB1c2UKLW9mIFdTLUkgY29tcGxpYW50IFdTREwuIEJ1c2luZXNzIHNlcnZpY2UgcHJvdmlkZXJzIGNhbiBkZXBsb3kgSmF2YeKEoiBiZWFucwotYW5kIGVudGVycHJpc2UgYmVhbnMgYXMgYSBXZWIgc2VydmljZSBhbmQgZ2VuZXJhdGUgYSBXU0RMIGRvY3VtZW50IHRoYXQgZGVzY3JpYmVzCi10aGUgc2VydmljZS4gVGhleSBjYW4gYWxzbyBnZW5lcmF0ZSBKYXZhIGFuZCBlbnRlcnByaXNlIGJlYW4gc2tlbGV0b25zIGZyb20KLWFuIGV4aXN0aW5nIFdTREwgZmlsZS4gQSBidXNpbmVzcyBzZXJ2aWNlIGNsaWVudCBjYW4gZ2VuZXJhdGUgYSBKYXZhIHByb3h5Ci1mcm9tIGEgV1NETCBkb2N1bWVudCwgdGhlcmVieSBwcm92aWRpbmcgYW4gZWFzeS10by11c2UgSmF2YSBpbnRlcmZhY2UKLXRvIHRoZSBXZWIgc2VydmljZS4gVGhlIEphdmEgaW50ZXJmYWNlIGhpZGVzIHRoZSBuZXR3b3JrIGNvbW11bmljYXRpb25zCi1kZXRhaWxzIGZyb20gdGhlIGNsaWVudCBlbmFibGluZyB0aGUgYnVzaW5lc3Mgc2VydmljZSBwcm92aWRlciB0byBmb2N1cyBvbgotYnVzaW5lc3MgYW5kIHByb2Nlc3MgcG9ydGlvbnMgb2YgdGhlIGFwcGxpY2F0aW9uLjwvcD4KLQotPHA+SW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIHRvb2xzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMsIHRoZSB3b3JrYmVuY2ggcHJvdmlkZXMKLWEgV1NETCBlZGl0b3IgdGhhdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBXU0RMIGZpbGVzIHVzaW5nIGEgZ3JhcGhpY2FsIGludGVyZmFjZSwKLWEgV1NETCB2YWxpZGF0b3IgdGhhdCBlbnN1cmVzIHRoYXQgeW91ciBXU0RMIGZpbGUgaXMgc2VtYW50aWNhbGx5IGNvcnJlY3QKLWFuZCBvcHRpb25hbGx5IGNoZWNrcyBmb3IgV1MtSSBjb21wbGlhbmNlLCBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB3aGljaAotYWxsb3dzIHlvdSB0byBkeW5hbWljYWxseSB0ZXN0IFdlYiBzZXJ2aWNlcyB3aXRob3V0IHJlcXVpcmluZyB5b3UgdG8gZ2VuZXJhdGUKLWEgcHJveHkuPC9wPgotCi08cD5UaGUgd29ya2JlbmNoIHN1cHBvcnRzIFdTREwgMS4xLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgV1NETCBzcGVjaWZpY2F0aW9uLAotcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHRhcmdldD0iX2JsYW5rIj53d3cudzMub3JnL1RSL3dzZGw8L2E+PC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3JlZi9yd3NkbC5odG1sIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZTwvYT48L3N0cm9uZz48YnIgLz4KLUEgV1NETCBkb2N1bWVudCBkZWZpbmVzIHNlcnZpY2VzIGFzIGNvbGxlY3Rpb25zIG9mIG5ldHdvcmsgZW5kcG9pbnRzLCBvciBwb3J0cy4gSW4gV1NETCwgdGhlIGFic3RyYWN0IGRlZmluaXRpb24gb2YgZW5kcG9pbnRzIGFuZCBtZXNzYWdlcyBpcyBzZXBhcmF0ZWQgZnJvbSB0aGVpciBjb25jcmV0ZSBuZXR3b3JrIGRlcGxveW1lbnQgb3IgZGF0YSBmb3JtYXQgYmluZGluZ3MuIFRoaXMgYWxsb3dzIHRoZSByZXVzZSBvZiBhYnN0cmFjdCBkZWZpbml0aW9uczogbWVzc2FnZXMsIHdoaWNoIGFyZSBhYnN0cmFjdCBkZXNjcmlwdGlvbnMgb2YgdGhlIGRhdGEgYmVpbmcgZXhjaGFuZ2VkLCBhbmQgcG9ydCB0eXBlcyB3aGljaCBhcmUgYWJzdHJhY3QgY29sbGVjdGlvbnMgb2Ygb3BlcmF0aW9ucy48L2xpPgotPC91bD4KLQotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIiB0aXRsZT0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjEwZjIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3dzaWwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC90aXRsZT4KLTxzaG9ydGRlc2M+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGlzIGEgc2VydmljZSBkaXNjb3ZlcnkKLW1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuCi1XaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS4mbmJzcDsKLVdTSUwgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LiZuYnNwOyBXU0lMIGFsbG93cwoteW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcyBpdCBwcm92aWRlcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NJTDxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYgotc2VydmljZXM8aW5kZXh0ZXJtPldTSUw8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+PHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IGFuZAotTWljcm9zb2Z0J3MgcHJvcG9zYWwgZm9yIHRoZSBXU0lMIHNwZWNpZmljYXRpb24gaXMgZGVzaWduZWQgYXJvdW5kIGFuIFhNTC1iYXNlZAotbW9kZWwgZm9yIGJ1aWxkaW5nIGFuIGFnZ3JlZ2F0aW9uIG9mIHJlZmVyZW5jZXMgdG8gZXhpc3RpbmcgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLAotdGhhdCBhcmUgZXhwb3NlZCB1c2luZyBzdGFuZGFyZCBXZWIgc2VydmVyIHRlY2hub2xvZ3kuPC9wPgotPHA+V1NJTCBwcm92aWRlcyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5IG1ldGhvZCB0aGF0IHN1cHBsaWVzIHJlZmVyZW5jZXMKLXRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlIHByb3ZpZGVyJ3MgcG9pbnQtb2Ytb2ZmZXJpbmcsIGJ5IHNwZWNpZnlpbmcKLWhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yIGF2YWlsYWJsZSBXZWIgc2VydmljZXMuIFRoZSBXU0lMIHNwZWNpZmljYXRpb24KLWRlZmluZXMgdGhlIGxvY2F0aW9ucyBvbiBhIFdlYiBzaXRlIHdoZXJlIHlvdSBjYW4gbG9vayBmb3IgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLjwvcD4KLTxwPlNpbmNlIFdTSUwgZm9jdXNlcyBvbiBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotY29tcGxlbWVudHMgVURESSBieSBmYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUKLW9uIFdlYiBzaXRlcyB0aGF0IG1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuIEEgc2VwYXJhdGUgdG9waWMKLWluIHRoaXMgZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhlICA8eHJlZiBocmVmPSJjd3NpbHVkLmRpdGEiPlJlbGF0aW9uc2hpcAotYmV0d2VlbiBVRERJIGFuZCBXU0lMPC94cmVmPi48L3A+Ci08cD5UaGUgV1NJTCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGRlZmluZSBhIHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2UuJm5ic3A7Ci1XU0lMIGRvY3VtZW50cyBwcm92aWRlIGEgbWV0aG9kIGZvciBhZ2dyZWdhdGluZyBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VydmljZQotZGVzY3JpcHRpb25zLiZuYnNwOyBXaXRoaW4gYSBXU0lMIGRvY3VtZW50LCBhIHNpbmdsZSBzZXJ2aWNlIGNhbiBoYXZlIG1vcmUKLXRoYW4gb25lIHJlZmVyZW5jZSB0byBhIHNlcnZpY2UgZGVzY3JpcHRpb24uJm5ic3A7IEZvciBleGFtcGxlLCBhIHNpbmdsZSBXZWIKLXNlcnZpY2UgbWlnaHQgYmUgcmVmZXJlbmNlZCB0d2ljZSBpbiBhIFdTSUwgZG9jdW1lbnQ6IG9uY2UgZGlyZWN0bHkgdmlhIGl0cwotV1NETCwgYW5kIGFnYWluIHZpYSBpdHMgYnVzaW5lc3NTZXJ2aWNlIGVudHJ5IGluIGEgVURESSByZWdpc3RyeS4gUmVmZXJlbmNlcwotdG8gdGhlc2UgdHdvIHNlcnZpY2UgZGVzY3JpcHRpb25zIHNob3VsZCBiZSBwdXQgaW50byBhIFdTSUwgZG9jdW1lbnQuJm5ic3A7Ci1JZiBtdWx0aXBsZSByZWZlcmVuY2VzIGFyZSBhdmFpbGFibGUsIGl0IGlzIGJlbmVmaWNpYWwgdG8gcHV0IGFsbCBvZiB0aGVtCi1pbiB0aGUgV1NJTCBkb2N1bWVudCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIGRvY3VtZW50IGNhbiBzZWxlY3QKLXRoZSB0eXBlIG9mIHNlcnZpY2UgZGVzY3JpcHRpb24gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggYW5kIHByZWZlcnJlZCBieSB0aGF0Ci1hcHBsaWNhdGlvbi48L3A+Ci08cD5UaGUgV1NJTCBzcGVjaWZpY2F0aW9uIHNlcnZlcyB0d28gcHJpbWFyeSBmdW5jdGlvbnM6PC9wPgotPHVsPgotPGxpPldTSUwgZGVmaW5lcyBhbiBYTUwgZm9ybWF0IGZvciBsaXN0aW5nIHJlZmVyZW5jZXMgdG8gZXhpc3Rpbmcgc2VydmljZQotZGVzY3JpcHRpb25zLiBUaGVzZSBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBhbnkgZm9ybWF0LCBzdWNoCi1hcyBXU0RMLCBVRERJLCBvciBwbGFpbiBIVE1MLiZuYnNwOyBBIFdTSUwgZG9jdW1lbnQgaXMgZ2VuZXJhbGx5IG1hZGUgYXZhaWxhYmxlCi1hdCB0aGUgcG9pbnQtb2Ytb2ZmZXJpbmcgZm9yIHRoZSBzZXJ2aWNlcyB0aGF0IGFyZSByZWZlcmVuY2VkIHdpdGhpbiB0aGUgZG9jdW1lbnQuCi1BIFdTSUwgZG9jdW1lbnQgY2FuIGNvbnRhaW4gYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8gc2VydmljZSBkZXNjcmlwdGlvbnMsCi1hcyB3ZWxsIGFzIHJlZmVyZW5jZXMgdG8gb3RoZXIgV1NJTCBkb2N1bWVudHMuICA8cD5UaGUgYWJpbGl0eSB0byBsaW5rIGEgV1NJTAotZG9jdW1lbnQgdG8gb25lIG9yIG1vcmUgZGlmZmVyZW50IFdTSUwgZG9jdW1lbnRzIGFsbG93cyB5b3UgdG8gbWFuYWdlIHNlcnZpY2UKLWRlc2NyaXB0aW9uIHJlZmVyZW5jZXMgYnkgZ3JvdXBpbmcgdGhlbSBpbnRvIGRpZmZlcmVudCBkb2N1bWVudHMgYW5kIHRvIGJ1aWxkCi1hIGhpZXJhcmNoeSBvZiBXU0lMIGRvY3VtZW50cy4mbmJzcDsgRm9yIGV4YW1wbGUsIHNlcGFyYXRlIFdTSUwgZG9jdW1lbnRzCi1jYW4gYmUgY3JlYXRlZCBmb3IgZGlmZmVyZW50IGNhdGVnb3JpZXMgb2Ygc2VydmljZXMsIGFuZCBvbmUgcHJpbWFyeSBXU0lMCi1kb2N1bWVudCBjYW4gbGluayBhbGwgb2YgdGhlbSB0b2dldGhlci48L3A+PC9saT4KLTxsaT5XU0lMIGRlZmluZXMgYSBzZXQgb2YgY29udmVudGlvbnMgc28gdGhhdCBpdCBpcyBlYXN5IHRvIGxvY2F0ZSBvdGhlciBXU0lMCi1kb2N1bWVudHMuIFRoZSBXU0lMIHNwZWNpZmljYXRpb24gZG9lcyBub3QgbGltaXQgdGhlIHR5cGUgb2Ygc2VydmljZSBkZXNjcmlwdGlvbnMKLXRoYXQgY2FuIGJlIHJlZmVyZW5jZWQuJm5ic3A7IFRoZSBXU0lMIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHNldCBvZiBzdGFuZGFyZAotZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgYm90aCBXU0RMIGFuZCBVRERJLiZuYnNwOyBUaGUgV1NJTCBzcGVjaWZpY2F0aW9uCi1pcyB0aGUgZGVmaW5pdGlvbiBvZiBsb2NhdGlvbnMgd2hlcmUgeW91IGNhbiBhY2Nlc3MgV1NJTCBkb2N1bWVudHMuPC9saT4KLTxsaT4gVHdvIGNvbnZlbnRpb25zIG1ha2UgdGhlIGxvY2F0aW9uIGFuZCByZXRyaWV2YWwgb2YgV1NJTCBkb2N1bWVudHMgZWFzeTogPHVsPgotPGxpPiA8dWljb250cm9sPkZpeGVkLW5hbWUgV1NJTCBkb2N1bWVudHMuPC91aWNvbnRyb2w+IFRoZSBmaXhlZCBuYW1lIGZvcgotV1NJTCBkb2N1bWVudHMgaXMgaW5zcGVjdGlvbi53c2lsLiZuYnNwOyBUaGUgaW5zcGVjdGlvbi53c2lsIGZpbGUgaXMgcGxhY2VkCi1hdCBjb21tb24gZW50cnkgcG9pbnRzIGZvciBhIFdlYiBzaXRlLiZuYnNwOyBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbW1vbiBlbnRyeQotcG9pbnQgaXMgaHR0cDovL2VudHJ5cG9pbnQuY29tIHRoZW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0lMIGRvY3VtZW50IHdvdWxkCi1iZSBodHRwOi8vZW50cnlwb2ludC5jb20vaW5zcGVjdGlvbi53c2lsPC9saT4KLTxsaT4gPHVpY29udHJvbD5MaW5rZWQgV1NJTCBkb2N1bWVudHMuPC91aWNvbnRyb2w+IFJlZmVyZW5jZXMgdG8gV1NJTCBkb2N1bWVudHMKLWNhbiBhbHNvIGFwcGVhciB3aXRoaW4gZGlmZmVyZW50IGNvbnRlbnQgZG9jdW1lbnRzLCBzdWNoIGFzIEhUTUwgcGFnZXMuPC9saT4KLTwvdWw+IDwvbGk+Ci08L3VsPgotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIHNwZWNpZmljYXRpb24sCi1yZWZlciB0byAgPHhyZWYgaHJlZj0iaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWwiCi1zY29wZT0iZXh0ZXJuYWwiPiB3d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWw8L3hyZWY+PC9wPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3dzLmRpdGEiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiPjxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD4KLTwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQzMWMxNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTSUwsIG92ZXJ2aWV3LCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0lMLCBvdmVydmlldywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2lsdWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3NpbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3dzaWwiPjxhIG5hbWU9ImN3c2lsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCk8L2gxPgotCi0KLQotPGRpdj48cD5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeQotbWVjaGFuaXNtIHRoYXQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gVURESSBhcyB3ZWxsIGFzIGNvbXBsZW1lbnRhcnkgdG8gVURESS4KLVdoZW4geW91IGRpc2NvdmVyIFdlYiBzZXJ2aWNlcyB3aXRoIFVEREksIHlvdSBnbyB0byBhIGNlbnRyYWxpemVkIHJlZ2lzdHJ5LsKgCi1XU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cwoteW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcyBpdCBwcm92aWRlcy48L3A+Ci0KLTxwPklCTTxzdXA+wq48L3N1cD4gYW5kCi1NaWNyb3NvZnQncyBwcm9wb3NhbCBmb3IgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBpcyBkZXNpZ25lZCBhcm91bmQgYW4gWE1MLWJhc2VkCi1tb2RlbCBmb3IgYnVpbGRpbmcgYW4gYWdncmVnYXRpb24gb2YgcmVmZXJlbmNlcyB0byBleGlzdGluZyBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMsCi10aGF0IGFyZSBleHBvc2VkIHVzaW5nIHN0YW5kYXJkIFdlYiBzZXJ2ZXIgdGVjaG5vbG9neS48L3A+Ci0KLTxwPldTSUwgcHJvdmlkZXMgYSBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSBtZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzCi10byBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBhdCB0aGUgc2VydmljZSBwcm92aWRlcidzIHBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nCi1ob3cgdG8gaW5zcGVjdCBhIFdlYiBzaXRlIGZvciBhdmFpbGFibGUgV2ViIHNlcnZpY2VzLiBUaGUgV1NJTCBzcGVjaWZpY2F0aW9uCi1kZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIgc2l0ZSB3aGVyZSB5b3UgY2FuIGxvb2sgZm9yIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9ucy48L3A+Ci0KLTxwPlNpbmNlIFdTSUwgZm9jdXNlcyBvbiBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotY29tcGxlbWVudHMgVURESSBieSBmYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUKLW9uIFdlYiBzaXRlcyB0aGF0IG1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuIEEgc2VwYXJhdGUgdG9waWMKLWluIHRoaXMgZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhlICA8YSBocmVmPSJjd3NpbHVkLmh0bWwiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2E+LjwvcD4KLQotPHA+VGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBkZWZpbmUgYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlLsKgCi1XU0lMIGRvY3VtZW50cyBwcm92aWRlIGEgbWV0aG9kIGZvciBhZ2dyZWdhdGluZyBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VydmljZQotZGVzY3JpcHRpb25zLsKgIFdpdGhpbiBhIFdTSUwgZG9jdW1lbnQsIGEgc2luZ2xlIHNlcnZpY2UgY2FuIGhhdmUgbW9yZQotdGhhbiBvbmUgcmVmZXJlbmNlIHRvIGEgc2VydmljZSBkZXNjcmlwdGlvbi7CoCBGb3IgZXhhbXBsZSwgYSBzaW5nbGUgV2ViCi1zZXJ2aWNlIG1pZ2h0IGJlIHJlZmVyZW5jZWQgdHdpY2UgaW4gYSBXU0lMIGRvY3VtZW50OiBvbmNlIGRpcmVjdGx5IHZpYSBpdHMKLVdTREwsIGFuZCBhZ2FpbiB2aWEgaXRzIGJ1c2luZXNzU2VydmljZSBlbnRyeSBpbiBhIFVEREkgcmVnaXN0cnkuIFJlZmVyZW5jZXMKLXRvIHRoZXNlIHR3byBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBzaG91bGQgYmUgcHV0IGludG8gYSBXU0lMIGRvY3VtZW50LsKgCi1JZiBtdWx0aXBsZSByZWZlcmVuY2VzIGFyZSBhdmFpbGFibGUsIGl0IGlzIGJlbmVmaWNpYWwgdG8gcHV0IGFsbCBvZiB0aGVtCi1pbiB0aGUgV1NJTCBkb2N1bWVudCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIGRvY3VtZW50IGNhbiBzZWxlY3QKLXRoZSB0eXBlIG9mIHNlcnZpY2UgZGVzY3JpcHRpb24gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggYW5kIHByZWZlcnJlZCBieSB0aGF0Ci1hcHBsaWNhdGlvbi48L3A+Ci0KLTxwPlRoZSBXU0lMIHNwZWNpZmljYXRpb24gc2VydmVzIHR3byBwcmltYXJ5IGZ1bmN0aW9uczo8L3A+Ci0KLTx1bD4KLTxsaT5XU0lMIGRlZmluZXMgYW4gWE1MIGZvcm1hdCBmb3IgbGlzdGluZyByZWZlcmVuY2VzIHRvIGV4aXN0aW5nIHNlcnZpY2UKLWRlc2NyaXB0aW9ucy4gVGhlc2Ugc2VydmljZSBkZXNjcmlwdGlvbnMgY2FuIGJlIGRlZmluZWQgaW4gYW55IGZvcm1hdCwgc3VjaAotYXMgV1NETCwgVURESSwgb3IgcGxhaW4gSFRNTC7CoCBBIFdTSUwgZG9jdW1lbnQgaXMgZ2VuZXJhbGx5IG1hZGUgYXZhaWxhYmxlCi1hdCB0aGUgcG9pbnQtb2Ytb2ZmZXJpbmcgZm9yIHRoZSBzZXJ2aWNlcyB0aGF0IGFyZSByZWZlcmVuY2VkIHdpdGhpbiB0aGUgZG9jdW1lbnQuCi1BIFdTSUwgZG9jdW1lbnQgY2FuIGNvbnRhaW4gYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8gc2VydmljZSBkZXNjcmlwdGlvbnMsCi1hcyB3ZWxsIGFzIHJlZmVyZW5jZXMgdG8gb3RoZXIgV1NJTCBkb2N1bWVudHMuICA8cD5UaGUgYWJpbGl0eSB0byBsaW5rIGEgV1NJTAotZG9jdW1lbnQgdG8gb25lIG9yIG1vcmUgZGlmZmVyZW50IFdTSUwgZG9jdW1lbnRzIGFsbG93cyB5b3UgdG8gbWFuYWdlIHNlcnZpY2UKLWRlc2NyaXB0aW9uIHJlZmVyZW5jZXMgYnkgZ3JvdXBpbmcgdGhlbSBpbnRvIGRpZmZlcmVudCBkb2N1bWVudHMgYW5kIHRvIGJ1aWxkCi1hIGhpZXJhcmNoeSBvZiBXU0lMIGRvY3VtZW50cy7CoCBGb3IgZXhhbXBsZSwgc2VwYXJhdGUgV1NJTCBkb2N1bWVudHMKLWNhbiBiZSBjcmVhdGVkIGZvciBkaWZmZXJlbnQgY2F0ZWdvcmllcyBvZiBzZXJ2aWNlcywgYW5kIG9uZSBwcmltYXJ5IFdTSUwKLWRvY3VtZW50IGNhbiBsaW5rIGFsbCBvZiB0aGVtIHRvZ2V0aGVyLjwvcD4KLTwvbGk+Ci0KLTxsaT5XU0lMIGRlZmluZXMgYSBzZXQgb2YgY29udmVudGlvbnMgc28gdGhhdCBpdCBpcyBlYXN5IHRvIGxvY2F0ZSBvdGhlciBXU0lMCi1kb2N1bWVudHMuIFRoZSBXU0lMIHNwZWNpZmljYXRpb24gZG9lcyBub3QgbGltaXQgdGhlIHR5cGUgb2Ygc2VydmljZSBkZXNjcmlwdGlvbnMKLXRoYXQgY2FuIGJlIHJlZmVyZW5jZWQuwqAgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgc2V0IG9mIHN0YW5kYXJkCi1leHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBib3RoIFdTREwgYW5kIFVEREkuwqAgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotaXMgdGhlIGRlZmluaXRpb24gb2YgbG9jYXRpb25zIHdoZXJlIHlvdSBjYW4gYWNjZXNzIFdTSUwgZG9jdW1lbnRzLjwvbGk+Ci0KLTxsaT4gVHdvIGNvbnZlbnRpb25zIG1ha2UgdGhlIGxvY2F0aW9uIGFuZCByZXRyaWV2YWwgb2YgV1NJTCBkb2N1bWVudHMgZWFzeTogPHVsPgotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaXhlZC1uYW1lIFdTSUwgZG9jdW1lbnRzLjwvc3Bhbj4gVGhlIGZpeGVkIG5hbWUgZm9yCi1XU0lMIGRvY3VtZW50cyBpcyBpbnNwZWN0aW9uLndzaWwuwqAgVGhlIGluc3BlY3Rpb24ud3NpbCBmaWxlIGlzIHBsYWNlZAotYXQgY29tbW9uIGVudHJ5IHBvaW50cyBmb3IgYSBXZWIgc2l0ZS7CoCBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbW1vbiBlbnRyeQotcG9pbnQgaXMgaHR0cDovL2VudHJ5cG9pbnQuY29tIHRoZW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0lMIGRvY3VtZW50IHdvdWxkCi1iZSBodHRwOi8vZW50cnlwb2ludC5jb20vaW5zcGVjdGlvbi53c2lsPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5MaW5rZWQgV1NJTCBkb2N1bWVudHMuPC9zcGFuPiBSZWZlcmVuY2VzIHRvIFdTSUwgZG9jdW1lbnRzCi1jYW4gYWxzbyBhcHBlYXIgd2l0aGluIGRpZmZlcmVudCBjb250ZW50IGRvY3VtZW50cywgc3VjaCBhcyBIVE1MIHBhZ2VzLjwvbGk+Ci0KLTwvdWw+Ci0gPC9saT4KLQotPC91bD4KLQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIHNwZWNpZmljYXRpb24sCi1yZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWwiIHRhcmdldD0iX2JsYW5rIj53d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWw8L2E+PC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2lsdWQuaHRtbCI+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTDwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgYW5kIHRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGJvdGggYWRkcmVzcyBpc3N1ZXMgcmVsYXRlZCB0byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuwqAgSG93ZXZlciwgZWFjaCBzcGVjaWZpY2F0aW9uIHRha2VzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzLsKgIFRoZSB0d28gc3BlY2lmaWNhdGlvbnMgY2FuIGJlIHVzZWQgc2VwYXJhdGVseSBvciBqb2ludGx5OyBzZWFyY2hpbmcgd2l0aCBXU0lMIGNhbiByZXN1bHQgaW4gZmluZGluZyBpdGVtcyBpbiBVRERJLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwiIHRpdGxlPSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTU4YTBiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3NpbHVkIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L3RpdGxlPgotPHNob3J0ZGVzYz5UaGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGFuZCB0aGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLAotRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gYm90aCBhZGRyZXNzIGlzc3VlcyByZWxhdGVkCi10byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuJm5ic3A7IEhvd2V2ZXIsIGVhY2ggc3BlY2lmaWNhdGlvbiB0YWtlcyBhIGRpZmZlcmVudAotYXBwcm9hY2ggdG8gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMuJm5ic3A7IFRoZSB0d28gc3BlY2lmaWNhdGlvbnMgY2FuCi1iZSB1c2VkIHNlcGFyYXRlbHkgb3Igam9pbnRseTsgc2VhcmNoaW5nIHdpdGggV1NJTCBjYW4gcmVzdWx0IGluIGZpbmRpbmcgaXRlbXMKLWluIFVEREkuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnJlbGF0aW9uc2hpcCB3aXRoIFdTSUw8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NJTDxpbmRleHRlcm0+cmVsYXRpb25zaGlwIHdpdGggVURESTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5UaGUgVURESSBzcGVjaWZpY2F0aW9uIGFkZHJlc3NlcyBXZWIgc2VydmljZSBkaXNjb3ZlcnkgdGhyb3VnaCB0aGUgdXNlCi1vZiBhIGNlbnRyYWxpemVkIG1vZGVsLiZuYnNwOyBPbmUgb3IgbW9yZSByZXBvc2l0b3JpZXMgYXJlIGNyZWF0ZWQgdG8gaG91c2UKLWluZm9ybWF0aW9uIGFib3V0IGJ1c2luZXNzZXMgYW5kIHRoZSBzZXJ2aWNlcyB0aGV5IG9mZmVyLiZuYnNwOyBSZXF1ZXN0cyBhbmQKLXVwZGF0ZXMgcGVydGFpbmluZyB0byB0aGUgc2VydmljZSBhbmQgYnVzaW5lc3MgcmVsYXRlZCBpbmZvcm1hdGlvbiBhcmUgaXNzdWVkCi1kaXJlY3RseSBhZ2FpbnN0IHRoZSByZXBvc2l0b3JpZXMuJm5ic3A7IEluIGFkZGl0aW9uLCBVRERJIHByZXNjcmliZXMgYSBzcGVjaWZpYwotZm9ybWF0IGZvciBhIHBvcnRpb24gb2YgdGhlIHN0b3JlZCBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiBhbmQsIHRvIGZhY2lsaXRhdGUKLWFkdmFuY2VkIChmb2N1c2VkKSBzZWFyY2hpbmcsIGFzc3VtZXMgdGhhdCBvdGhlciBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiB3aWxsCi1iZSBzdG9yZWQgYW5kIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBzeXN0ZW0gYXMgd2VsbC48L3A+Ci08cD5VRERJIHN5c3RlbXMgZmFjaWxpdGF0ZSBmb2N1c2VkIGRpc2NvdmVyeSBwYXR0ZXJucyBzaW5jZSB0aGVzZSBzeXN0ZW1zCi1hcmUgYmFzZWQgb24gb3JnYW5pemVkIHJlcG9zaXRvcmllcyB0aGF0IHByb3ZpZGUgYWR2YW5jZWQgc2VhcmNoaW5nIGNhcGFiaWxpdGllcy4mbmJzcDsKLVRoaXMgaGVscHMgcmVxdWVzdG9ycyBsb2NhdGUgcG90ZW50aWFsIGNvbW11bmljYXRpb24gcGFydG5lcnMuJm5ic3A7IEluIG9yZGVyCi10byBwcm92aWRlIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHksIGhvd2V2ZXIsIFVEREkgcmVxdWlyZXMgdGhlIGRlcGxveW1lbnQgYW5kCi1tYWludGVuYW5jZSBvZiBhIGNlcnRhaW4gYW1vdW50IG9mIGluZnJhc3RydWN0dXJlLCB0aHVzIGluY3JlYXNpbmcgdGhlIGNvc3QKLW9mIG9wZXJhdGlvbi4mbmJzcDsgSW4gYWRkaXRpb24sIHVubGVzcyB0aGUgc2VydmljZSBkZXNjcmlwdGlvbnMgYXJlIHN0b3JlZAotb25seSB3aXRoaW4gVURESSwgdGhlcmUgaXMgYSBjb3N0IGFzc29jaWF0ZWQgd2l0aCBrZWVwaW5nIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMKLXN5bmNocm9uaXplZC48L3A+Ci08cD5UaGUgV1NJTCBzcGVjaWZpY2F0aW9uIHJlbGllcyBvbiBhIGNvbXBsZXRlbHkgZGlzdHJpYnV0ZWQgbW9kZWwgZm9yIHByb3ZpZGluZwotc2VydmljZS1yZWxhdGVkIGluZm9ybWF0aW9uLiZuYnNwOyBUaGUgc2VydmljZSBkZXNjcmlwdGlvbnMgY2FuIGJlIHN0b3JlZAotYXQgYW55IGxvY2F0aW9uLCBhbmQgcmVxdWVzdHMgdG8gcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGFyZSBnZW5lcmFsbHkgbWFkZQotZGlyZWN0bHkgdG8gdGhlIGVudGl0aWVzIHRoYXQgYXJlIG9mZmVyaW5nIHRoZSBzZXJ2aWNlcy4mbmJzcDsgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotZG9lcyBub3Qgc3RpcHVsYXRlIGFueSBwYXJ0aWN1bGFyIGZvcm1hdCBmb3IgdGhlIHNlcnZpY2UgaW5mb3JtYXRpb24uJm5ic3A7Ci1JdCByZWxpZXMgb24gb3RoZXIgc3RhbmRhcmRzLCBpbmNsdWRpbmcgVURESSwgdG8gZGVmaW5lIHRoZSBkZXNjcmlwdGlvbiBmb3JtYXRzLiZuYnNwOwotVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBhbHNvIHJlbGllcyBvbiBleGlzdGluZyBXZWIgdGVjaG5vbG9naWVzIGFuZCBpbmZyYXN0cnVjdHVyZQotdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBwdWJsaXNoaW5nIGFuZCByZXRyaWV2aW5nIGl0cyBkb2N1bWVudHMuPC9wPgotPHA+V1NJTCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBkaXNzZW1pbmF0ZSBzZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gdGhyb3VnaAotZXhpc3RpbmcgcHJvdG9jb2xzIGRpcmVjdGx5IGZyb20gdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBzZXJ2aWNlIGlzIGJlaW5nIG9mZmVyZWQuJm5ic3A7Ci1UaGlzIGVuYWJsZXMgZm9jdXNlZCBkaXNjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkIG9uIGEgc2luZ2xlIHRhcmdldDsgaG93ZXZlciwKLWJlY2F1c2Ugb2YgaXRzIGRlY2VudHJhbGl6ZWQgYW5kIGRpc3RyaWJ1dGVkIG1vZGVsLCBXU0lMIGlzIG5vdCBhIGdvb2QgbWVjaGFuaXNtCi1mb3IgZXhlY3V0aW5nIGZvY3VzZWQgZGlzY292ZXJ5IGlmIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIgaXMgdW5rbm93bi48L3A+Ci08cD5UaGUgVURESSBhbmQgV1NJTCBzcGVjaWZpY2F0aW9ucyBzaG91bGQgYmUgdmlld2VkIGFzIGNvbXBsZW1lbnRhcnkgdGVjaG5vbG9naWVzCi10byBiZSB1c2VkIGVpdGhlciB0b2dldGhlciBvciBzZXBhcmF0ZWx5IGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLiZuYnNwOwotRm9yIGV4YW1wbGUsIGEgVURESSByZXBvc2l0b3J5IGNvdWxkIGJlIHBvcHVsYXRlZCBiYXNlZCBvbiB0aGUgcmVzdWx0cyBmb3VuZAotd2hlbiBwZXJmb3JtaW5nIGEgc2VhcmNoIGZvciBXU0lMIGRvY3VtZW50cy4mbmJzcDsgTGlrZXdpc2UsIGEgVURESSByZXBvc2l0b3J5Ci1tYXkgaXRzZWxmIGJlIGRpc2NvdmVyZWQgd2hlbiBhIHJlcXVlc3RlciByZXRyaWV2ZXMgYSBXU0lMIGRvY3VtZW50IHRoYXQgcmVmZXJlbmNlcwotYW4gZW50cnkgaW4gdGhlIHJlcG9zaXRvcnkuJm5ic3A7IEluIGVudmlyb25tZW50cyB3aGVyZSB0aGUgYWR2YW5jZWQgZnVuY3Rpb25hbGl0eQotYWZmb3JkZWQgYnkgVURESSBpcyBub3QgcmVxdWlyZWQgYW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvIG5vdCBhbGxvdyBmb3IgaXRzCi1kZXBsb3ltZW50LCB0aGUgV1NJTCBtZWNoYW5pc20gbWF5IHByb3ZpZGUgYWxsIG9mIHRoZSBjYXBhYmlsaXRpZXMgdGhhdCBhcmUKLW5lZWRlZC4mbmJzcDsgSW4gc2l0dWF0aW9ucyB3aGVyZSBkYXRhIG5lZWRzIHRvIGJlIGNlbnRyYWxseSBtYW5hZ2VkLCBhIFVEREkKLXNvbHV0aW9uIGFsb25lIG1heSBwcm92aWRlIHRoZSBiZXN0IGZpdC4mbmJzcDsgVGhlIFVEREkgYW5kIFdTSUwgc3BlY2lmaWNhdGlvbnMKLXNob3VsZCBub3QgYmUgdmlld2VkIGFzIG11dHVhbGx5IGV4Y2x1c2l2ZS48L3A+Ci08bm90ZT5Cb3RoIFVEREkgYW5kIFdTSUwgY29udGFpbiBvbmx5IHJlZmVyZW5jZXMgdG8gV1NETCAtIHRoZXkgZG8gbm90IGNvbnRhaW4KLXRoZSBXU0RMIGRvY3VtZW50cyB0aGVtc2VsdmVzLjwvbm90ZT4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbC5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2Y2OWUwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgYW5kIHRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGJvdGggYWRkcmVzcyBpc3N1ZXMgcmVsYXRlZCB0byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuwqAgSG93ZXZlciwgZWFjaCBzcGVjaWZpY2F0aW9uIHRha2VzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzLsKgIFRoZSB0d28gc3BlY2lmaWNhdGlvbnMgY2FuIGJlIHVzZWQgc2VwYXJhdGVseSBvciBqb2ludGx5OyBzZWFyY2hpbmcgd2l0aCBXU0lMIGNhbiByZXN1bHQgaW4gZmluZGluZyBpdGVtcyBpbiBVRERJLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGFuZCB0aGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBib3RoIGFkZHJlc3MgaXNzdWVzIHJlbGF0ZWQgdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LsKgIEhvd2V2ZXIsIGVhY2ggc3BlY2lmaWNhdGlvbiB0YWtlcyBhIGRpZmZlcmVudCBhcHByb2FjaCB0byB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy7CoCBUaGUgdHdvIHNwZWNpZmljYXRpb25zIGNhbiBiZSB1c2VkIHNlcGFyYXRlbHkgb3Igam9pbnRseTsgc2VhcmNoaW5nIHdpdGggV1NJTCBjYW4gcmVzdWx0IGluIGZpbmRpbmcgaXRlbXMgaW4gVURESS4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCByZWxhdGlvbnNoaXAgd2l0aCBXU0lMLCBXU0lMLCByZWxhdGlvbnNoaXAgd2l0aCBVRERJIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcmVsYXRpb25zaGlwIHdpdGggV1NJTCwgV1NJTCwgcmVsYXRpb25zaGlwIHdpdGggVURESSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2lsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzaWx1ZCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3c2lsdWQiPjxhIG5hbWU9ImN3c2lsdWQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2gxPgotCi0KLQotPGRpdj48cD5UaGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGFuZCB0aGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLAotRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gYm90aCBhZGRyZXNzIGlzc3VlcyByZWxhdGVkCi10byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuwqAgSG93ZXZlciwgZWFjaCBzcGVjaWZpY2F0aW9uIHRha2VzIGEgZGlmZmVyZW50Ci1hcHByb2FjaCB0byB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy7CoCBUaGUgdHdvIHNwZWNpZmljYXRpb25zIGNhbgotYmUgdXNlZCBzZXBhcmF0ZWx5IG9yIGpvaW50bHk7IHNlYXJjaGluZyB3aXRoIFdTSUwgY2FuIHJlc3VsdCBpbiBmaW5kaW5nIGl0ZW1zCi1pbiBVRERJLjwvcD4KLQotPHA+VGhlIFVEREkgc3BlY2lmaWNhdGlvbiBhZGRyZXNzZXMgV2ViIHNlcnZpY2UgZGlzY292ZXJ5IHRocm91Z2ggdGhlIHVzZQotb2YgYSBjZW50cmFsaXplZCBtb2RlbC7CoCBPbmUgb3IgbW9yZSByZXBvc2l0b3JpZXMgYXJlIGNyZWF0ZWQgdG8gaG91c2UKLWluZm9ybWF0aW9uIGFib3V0IGJ1c2luZXNzZXMgYW5kIHRoZSBzZXJ2aWNlcyB0aGV5IG9mZmVyLsKgIFJlcXVlc3RzIGFuZAotdXBkYXRlcyBwZXJ0YWluaW5nIHRvIHRoZSBzZXJ2aWNlIGFuZCBidXNpbmVzcyByZWxhdGVkIGluZm9ybWF0aW9uIGFyZSBpc3N1ZWQKLWRpcmVjdGx5IGFnYWluc3QgdGhlIHJlcG9zaXRvcmllcy7CoCBJbiBhZGRpdGlvbiwgVURESSBwcmVzY3JpYmVzIGEgc3BlY2lmaWMKLWZvcm1hdCBmb3IgYSBwb3J0aW9uIG9mIHRoZSBzdG9yZWQgZGVzY3JpcHRpb24gaW5mb3JtYXRpb24gYW5kLCB0byBmYWNpbGl0YXRlCi1hZHZhbmNlZCAoZm9jdXNlZCkgc2VhcmNoaW5nLCBhc3N1bWVzIHRoYXQgb3RoZXIgZGVzY3JpcHRpb24gaW5mb3JtYXRpb24gd2lsbAotYmUgc3RvcmVkIGFuZCByZWdpc3RlcmVkIHdpdGhpbiB0aGUgc3lzdGVtIGFzIHdlbGwuPC9wPgotCi08cD5VRERJIHN5c3RlbXMgZmFjaWxpdGF0ZSBmb2N1c2VkIGRpc2NvdmVyeSBwYXR0ZXJucyBzaW5jZSB0aGVzZSBzeXN0ZW1zCi1hcmUgYmFzZWQgb24gb3JnYW5pemVkIHJlcG9zaXRvcmllcyB0aGF0IHByb3ZpZGUgYWR2YW5jZWQgc2VhcmNoaW5nIGNhcGFiaWxpdGllcy7CoAotVGhpcyBoZWxwcyByZXF1ZXN0b3JzIGxvY2F0ZSBwb3RlbnRpYWwgY29tbXVuaWNhdGlvbiBwYXJ0bmVycy7CoCBJbiBvcmRlcgotdG8gcHJvdmlkZSBhZHZhbmNlZCBmdW5jdGlvbmFsaXR5LCBob3dldmVyLCBVRERJIHJlcXVpcmVzIHRoZSBkZXBsb3ltZW50IGFuZAotbWFpbnRlbmFuY2Ugb2YgYSBjZXJ0YWluIGFtb3VudCBvZiBpbmZyYXN0cnVjdHVyZSwgdGh1cyBpbmNyZWFzaW5nIHRoZSBjb3N0Ci1vZiBvcGVyYXRpb24uwqAgSW4gYWRkaXRpb24sIHVubGVzcyB0aGUgc2VydmljZSBkZXNjcmlwdGlvbnMgYXJlIHN0b3JlZAotb25seSB3aXRoaW4gVURESSwgdGhlcmUgaXMgYSBjb3N0IGFzc29jaWF0ZWQgd2l0aCBrZWVwaW5nIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMKLXN5bmNocm9uaXplZC48L3A+Ci0KLTxwPlRoZSBXU0lMIHNwZWNpZmljYXRpb24gcmVsaWVzIG9uIGEgY29tcGxldGVseSBkaXN0cmlidXRlZCBtb2RlbCBmb3IgcHJvdmlkaW5nCi1zZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24uwqAgVGhlIHNlcnZpY2UgZGVzY3JpcHRpb25zIGNhbiBiZSBzdG9yZWQKLWF0IGFueSBsb2NhdGlvbiwgYW5kIHJlcXVlc3RzIHRvIHJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiBhcmUgZ2VuZXJhbGx5IG1hZGUKLWRpcmVjdGx5IHRvIHRoZSBlbnRpdGllcyB0aGF0IGFyZSBvZmZlcmluZyB0aGUgc2VydmljZXMuwqAgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotZG9lcyBub3Qgc3RpcHVsYXRlIGFueSBwYXJ0aWN1bGFyIGZvcm1hdCBmb3IgdGhlIHNlcnZpY2UgaW5mb3JtYXRpb24uwqAKLUl0IHJlbGllcyBvbiBvdGhlciBzdGFuZGFyZHMsIGluY2x1ZGluZyBVRERJLCB0byBkZWZpbmUgdGhlIGRlc2NyaXB0aW9uIGZvcm1hdHMuwqAKLVRoZSBXU0lMIHNwZWNpZmljYXRpb24gYWxzbyByZWxpZXMgb24gZXhpc3RpbmcgV2ViIHRlY2hub2xvZ2llcyBhbmQgaW5mcmFzdHJ1Y3R1cmUKLXRvIHByb3ZpZGUgbWVjaGFuaXNtcyBmb3IgcHVibGlzaGluZyBhbmQgcmV0cmlldmluZyBpdHMgZG9jdW1lbnRzLjwvcD4KLQotPHA+V1NJTCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBkaXNzZW1pbmF0ZSBzZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gdGhyb3VnaAotZXhpc3RpbmcgcHJvdG9jb2xzIGRpcmVjdGx5IGZyb20gdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBzZXJ2aWNlIGlzIGJlaW5nIG9mZmVyZWQuwqAKLVRoaXMgZW5hYmxlcyBmb2N1c2VkIGRpc2NvdmVyeSB0byBiZSBwZXJmb3JtZWQgb24gYSBzaW5nbGUgdGFyZ2V0OyBob3dldmVyLAotYmVjYXVzZSBvZiBpdHMgZGVjZW50cmFsaXplZCBhbmQgZGlzdHJpYnV0ZWQgbW9kZWwsIFdTSUwgaXMgbm90IGEgZ29vZCBtZWNoYW5pc20KLWZvciBleGVjdXRpbmcgZm9jdXNlZCBkaXNjb3ZlcnkgaWYgdGhlIGNvbW11bmljYXRpb24gcGFydG5lciBpcyB1bmtub3duLjwvcD4KLQotPHA+VGhlIFVEREkgYW5kIFdTSUwgc3BlY2lmaWNhdGlvbnMgc2hvdWxkIGJlIHZpZXdlZCBhcyBjb21wbGVtZW50YXJ5IHRlY2hub2xvZ2llcwotdG8gYmUgdXNlZCBlaXRoZXIgdG9nZXRoZXIgb3Igc2VwYXJhdGVseSBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi7CoAotRm9yIGV4YW1wbGUsIGEgVURESSByZXBvc2l0b3J5IGNvdWxkIGJlIHBvcHVsYXRlZCBiYXNlZCBvbiB0aGUgcmVzdWx0cyBmb3VuZAotd2hlbiBwZXJmb3JtaW5nIGEgc2VhcmNoIGZvciBXU0lMIGRvY3VtZW50cy7CoCBMaWtld2lzZSwgYSBVRERJIHJlcG9zaXRvcnkKLW1heSBpdHNlbGYgYmUgZGlzY292ZXJlZCB3aGVuIGEgcmVxdWVzdGVyIHJldHJpZXZlcyBhIFdTSUwgZG9jdW1lbnQgdGhhdCByZWZlcmVuY2VzCi1hbiBlbnRyeSBpbiB0aGUgcmVwb3NpdG9yeS7CoCBJbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHkKLWFmZm9yZGVkIGJ5IFVEREkgaXMgbm90IHJlcXVpcmVkIGFuZCB3aGVyZSBjb25zdHJhaW50cyBkbyBub3QgYWxsb3cgZm9yIGl0cwotZGVwbG95bWVudCwgdGhlIFdTSUwgbWVjaGFuaXNtIG1heSBwcm92aWRlIGFsbCBvZiB0aGUgY2FwYWJpbGl0aWVzIHRoYXQgYXJlCi1uZWVkZWQuwqAgSW4gc2l0dWF0aW9ucyB3aGVyZSBkYXRhIG5lZWRzIHRvIGJlIGNlbnRyYWxseSBtYW5hZ2VkLCBhIFVEREkKLXNvbHV0aW9uIGFsb25lIG1heSBwcm92aWRlIHRoZSBiZXN0IGZpdC7CoCBUaGUgVURESSBhbmQgV1NJTCBzcGVjaWZpY2F0aW9ucwotc2hvdWxkIG5vdCBiZSB2aWV3ZWQgYXMgbXV0dWFsbHkgZXhjbHVzaXZlLjwvcD4KLQotPGRpdiBjbGFzcz0ibm90ZSI+PHNwYW4gY2xhc3M9Im5vdGV0aXRsZSI+Tm90ZTo8L3NwYW4+IEJvdGggVURESSBhbmQgV1NJTCBjb250YWluIG9ubHkgcmVmZXJlbmNlcyB0byBXU0RMIC0gdGhleSBkbyBub3QgY29udGFpbgotdGhlIFdTREwgZG9jdW1lbnRzIHRoZW1zZWx2ZXMuPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2lsLmh0bWwiIHRpdGxlPSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiI+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lsLmh0bWwiIHRpdGxlPSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiI+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNkMGExOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImN3c2lud3NhIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L3RpdGxlPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnRvb2xzIG92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+VG9vbHMgYXJlIHByb3ZpZGVkIHRvIGFzc2lzdCB3aXRoIHRoZSBmb2xsb3dpbmcgYXNwZWN0cyBvZiBXZWIgc2VydmljZXMKLWRldmVsb3BtZW50OjwvcD4KLTx1bD4KLTxsaT4gPHVpY29udHJvbD5EaXNjb3ZlcjwvdWljb250cm9sPi4gQnJvd3NlIHRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJpZXMKLW9yIFdTSUwgZG9jdW1lbnRzIHRvIGxvY2F0ZSBleGlzdGluZyBXZWIgc2VydmljZXMgZm9yIGludGVncmF0aW9uLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+Q3JlYXRlIG9yIFRyYW5zZm9ybTwvdWljb250cm9sPi4gQ3JlYXRlIGJvdHRvbS11cCBXZWIgc2VydmljZXMKLWZyb20gZXhpc3RpbmcgYXJ0aWZhY3RzLCBzdWNoIGFzIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbnMgYW5kIGVudGVycHJpc2UgYmVhbnMuIENyZWF0ZQotdG9wLWRvd24gV2ViIHNlcnZpY2VzIGZyb20gV1NETCBkaXNjb3ZlcmVkIGZyb20gb3RoZXJzIG9yIGNyZWF0ZWQgdXNpbmcgdGhlCi1XU0RMIEVkaXRvci48L2xpPgotPGxpPiA8dWljb250cm9sPkJ1aWxkPC91aWNvbnRyb2w+LiBXcmFwIGV4aXN0aW5nIGFydGlmYWN0cyBhcyBTT0FQIGFjY2Vzc2libGUKLXNlcnZpY2VzIGFuZCBkZXNjcmliZSB0aGVtIGluIFdTREwuIFRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBhc3Npc3QgeW91IGluCi1nZW5lcmF0aW5nIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGllbnQgcHJveHkgdG8gV2ViIHNlcnZpY2VzIGRlc2NyaWJlZCBpbiBXU0RMCi1hbmQgaW4gZ2VuZXJhdGluZyA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIKLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gc2tlbGV0b25zIGZyb20gV1NETC48L2xpPgotPGxpPiA8dWljb250cm9sPkRlcGxveTwvdWljb250cm9sPi4gRGVwbG95IFdlYiBzZXJ2aWNlcyBpbnRvIGEgdmFyaWV0eSBvZgotdGVzdCBlbnZpcm9ubWVudHMuPC9saT4KLTxsaT4gPHVpY29udHJvbD5UZXN0PC91aWNvbnRyb2w+LiBUZXN0IFdlYiBzZXJ2aWNlcyBydW5uaW5nIGxvY2FsbHkgb3IgcmVtb3RlbHkKLWluIG9yZGVyIHRvIGdldCBpbnN0YW50IGZlZWRiYWNrLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RGV2ZWxvcDwvdWljb250cm9sPi4gR2VuZXJhdGUgc2FtcGxlIGFwcGxpY2F0aW9ucyB0byBhc3Npc3QKLXlvdSBpbiBjcmVhdGluZyB5b3VyIG93biBXZWIgc2VydmljZSBjbGllbnQgYXBwbGljYXRpb24uPC9saT4KLTxsaT4gPHVpY29udHJvbD5QdWJsaXNoPC91aWNvbnRyb2w+LiBQdWJsaXNoIFdlYiBzZXJ2aWNlcyB0byBhIFVEREkgdjIgb3IKLXYzIEJ1c2luZXNzIFJlZ2lzdHJ5LCBhZHZlcnRpc2luZyB5b3VyIFdlYiBzZXJ2aWNlcyBzbyB0aGF0IG90aGVyIGJ1c2luZXNzZXMKLWFuZCBjbGllbnRzIGNhbiBhY2Nlc3MgdGhlbS48L2xpPgotPC91bD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjg1ZjI0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCB0b29scyBvdmVydmlldyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgdG9vbHMgb3ZlcnZpZXciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3NpbndzYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3c2lud3NhIj48YSBuYW1lPSJjd3NpbndzYSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvaDE+Ci0KLQotPGRpdj4KLTxwPlRvb2xzIGFyZSBwcm92aWRlZCB0byBhc3Npc3Qgd2l0aCB0aGUgZm9sbG93aW5nIGFzcGVjdHMgb2YgV2ViIHNlcnZpY2VzCi1kZXZlbG9wbWVudDo8L3A+Ci0KLTx1bD4KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGlzY292ZXI8L3NwYW4+LiBCcm93c2UgdGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cmllcwotb3IgV1NJTCBkb2N1bWVudHMgdG8gbG9jYXRlIGV4aXN0aW5nIFdlYiBzZXJ2aWNlcyBmb3IgaW50ZWdyYXRpb24uPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5DcmVhdGUgb3IgVHJhbnNmb3JtPC9zcGFuPi4gQ3JlYXRlIGJvdHRvbS11cCBXZWIgc2VydmljZXMKLWZyb20gZXhpc3RpbmcgYXJ0aWZhY3RzLCBzdWNoIGFzIEphdmHihKIgYmVhbnMgYW5kIGVudGVycHJpc2UgYmVhbnMuIENyZWF0ZQotdG9wLWRvd24gV2ViIHNlcnZpY2VzIGZyb20gV1NETCBkaXNjb3ZlcmVkIGZyb20gb3RoZXJzIG9yIGNyZWF0ZWQgdXNpbmcgdGhlCi1XU0RMIEVkaXRvci48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJ1aWxkPC9zcGFuPi4gV3JhcCBleGlzdGluZyBhcnRpZmFjdHMgYXMgU09BUCBhY2Nlc3NpYmxlCi1zZXJ2aWNlcyBhbmQgZGVzY3JpYmUgdGhlbSBpbiBXU0RMLiBUaGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgYXNzaXN0IHlvdSBpbgotZ2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IHRvIFdlYiBzZXJ2aWNlcyBkZXNjcmliZWQgaW4gV1NETAotYW5kIGluIGdlbmVyYXRpbmcgSmF2YSBiZWFuIHNrZWxldG9ucyBmcm9tIFdTREwuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZXBsb3k8L3NwYW4+LiBEZXBsb3kgV2ViIHNlcnZpY2VzIGludG8gYSB2YXJpZXR5IG9mCi10ZXN0IGVudmlyb25tZW50cy48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRlc3Q8L3NwYW4+LiBUZXN0IFdlYiBzZXJ2aWNlcyBydW5uaW5nIGxvY2FsbHkgb3IgcmVtb3RlbHkKLWluIG9yZGVyIHRvIGdldCBpbnN0YW50IGZlZWRiYWNrLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGV2ZWxvcDwvc3Bhbj4uIEdlbmVyYXRlIHNhbXBsZSBhcHBsaWNhdGlvbnMgdG8gYXNzaXN0Ci15b3UgaW4gY3JlYXRpbmcgeW91ciBvd24gV2ViIHNlcnZpY2UgY2xpZW50IGFwcGxpY2F0aW9uLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHVibGlzaDwvc3Bhbj4uIFB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRvIGEgVURESSB2MiBvcgotdjMgQnVzaW5lc3MgUmVnaXN0cnksIGFkdmVydGlzaW5nIHlvdXIgV2ViIHNlcnZpY2VzIHNvIHRoYXQgb3RoZXIgYnVzaW5lc3NlcwotYW5kIGNsaWVudHMgY2FuIGFjY2VzcyB0aGVtLjwvbGk+Ci0KLTwvdWw+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNzU1MjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3Npb3ZlciIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSAoV1MtSSk8L3RpdGxlPgotPHNob3J0ZGVzYz5XUy1JIGlzIGFuIG9yZ2FuaXphdGlvbiBkZXNpZ25lZCB0byBwcm9tb3RlIFdlYiBzZXJ2aWNlIGludGVyb3BlcmFiaWxpdHkKLWFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eTxpbmRleHRlcm0+dHJhZmZpYyBjb21wbGlhbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPmludGVyb3BlcmFiaWxpdHk8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTLUksIHJlZmVyIHRvIHRoZWlyIFdlYiBzaXRlOiAgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iaHR0cDovL3d3dy53cy1pLm9yZy8iIHNjb3BlPSJleHRlcm5hbCI+aHR0cDovL3d3dy53cy1pLm9yZy88L3hyZWY+LgotVGhpcyBzaXRlIGNvbnRhaW5zIHJlc291cmNlcyBzdWNoIGFzIGFuIG92ZXJ2aWV3IG9mIFdlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5LAotdXNhZ2Ugc2NlbmFyaW9zLCBhbmQgc3BlY2lmaWNhdGlvbnMuPC9wPgotPHA+V1MtSSBCYXNpYyBQcm9maWxlIGlzIGEgb3V0bGluZSBvZiByZXF1aXJlbWVudHMgdG8gd2hpY2ggV1NETCBhbmQgV2ViIHNlcnZpY2UKLXByb3RvY29sIChTT0FQL0hUVFApIHRyYWZmaWMgbXVzdCBjb21wbHkgaW4gb3JkZXIgdG8gY2xhaW0gV1MtSSBjb25mb3JtYW5jZS4KLVRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIGN1cnJlbnRseSBzdXBwb3J0IFdTLUkgU2ltcGxlIFNPQVAKLUJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCkgd2hpY2ggYnVpbGRzIG9uIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUsIGFuZAotdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSAxLjAgKFdTLUkgQVApLiBUbyB2aWV3IHRoZSBzcGVjaWZpY2F0aW9ucywgcmVmZXIKLXRvIHRoZSBXUy1JIFdlYiBzaXRlLCBhbmQgdW5kZXIgIDx1aWNvbnRyb2w+RGVsaXZlcmFibGVzPC91aWNvbnRyb2w+IHNlbGVjdAotIDx1aWNvbnRyb2w+QmFzaWMgUHJvZmlsZTwvdWljb250cm9sPi48L3A+Ci08cD5EZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgV2ViIHNlcnZpY2UgYmVpbmcgY3JlYXRlZCwgeW91IG1heSBvciBtYXkgbm90Ci13YW50IHlvdXIgV2ViIHNlcnZpY2UgdG8gY29tcGx5IHdpdGggdGhlIFdTLUkgcHJvZmlsZXMuIFRoZSBkZWZhdWx0IGxldmVsCi1vZiBjb21wbGlhbmNlIGlzIHRvIGdlbmVyYXRlIGEgd2FybmluZyBpZiBhIG5vbiBXUy1JIFNTQlAgY29tcGxhaW50IFdlYiBzZXJ2aWNlCi1vcHRpb24gaXMgc2VsZWN0ZWQgYW5kIHRvIGlnbm9yZSBhbnkgbm9uIFdTLUkgQVAgY29tcGxpYW50IHNlbGVjdGlvbnMuIFlvdQotY2FuIHNldCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGF0IHRoZSB3b3Jrc3BhY2Ugb3IgcHJvamVjdCBsZXZlbC4gVGhlCi1XZWIgc2VydmljZXMgd2l6YXJkcywgdGhlIDx0bSB0bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciCi10cmFkZW1hcms9IldlYlNwaGVyZSI+V2ViU3BoZXJlPC90bT4gcnVuLXRpbWUgZW52aXJvbm1lbnRzLCB0aGUgV1NETCBlZGl0b3IsCi1hbmQgb3RoZXIgV2ViIHNlcnZpY2VzIHRvb2xzIHByb3ZpZGVkIHN1cHBvcnQgYW5kIGVuY291cmFnZSB0aGUgZGV2ZWxvcG1lbnQKLW9mIFdTLUkgY29tcGxpYW5jZSBzZXJ2aWNlcy48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90d3NpY29tcGx5LmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBlNWQ0NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldTLUkgaXMgYW4gb3JnYW5pemF0aW9uIGRlc2lnbmVkIHRvIHByb21vdGUgV2ViIHNlcnZpY2UgaW50ZXJvcGVyYWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLCBvcGVyYXRpbmcgc3lzdGVtcywgYW5kIHByb2dyYW1taW5nIGxhbmd1YWdlcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iV1MtSSBpcyBhbiBvcmdhbml6YXRpb24gZGVzaWduZWQgdG8gcHJvbW90ZSBXZWIgc2VydmljZSBpbnRlcm9wZXJhYmlsaXR5IGFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5LCB0cmFmZmljIGNvbXBsaWFuY2UsIGludGVyb3BlcmFiaWxpdHksIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5LCB0cmFmZmljIGNvbXBsaWFuY2UsIGludGVyb3BlcmFiaWxpdHksIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90d3NpY29tcGx5Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3Npb3ZlciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3dzaW92ZXIiPjxhIG5hbWU9ImN3c2lvdmVyIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSAoV1MtSSk8L2gxPgotCi0KLQotPGRpdj48cD5XUy1JIGlzIGFuIG9yZ2FuaXphdGlvbiBkZXNpZ25lZCB0byBwcm9tb3RlIFdlYiBzZXJ2aWNlIGludGVyb3BlcmFiaWxpdHkKLWFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLjwvcD4KLQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1MtSSwgcmVmZXIgdG8gdGhlaXIgV2ViIHNpdGU6ICA8YSBocmVmPSJodHRwOi8vd3d3LndzLWkub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cud3MtaS5vcmcvPC9hPi4KLVRoaXMgc2l0ZSBjb250YWlucyByZXNvdXJjZXMgc3VjaCBhcyBhbiBvdmVydmlldyBvZiBXZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSwKLXVzYWdlIHNjZW5hcmlvcywgYW5kIHNwZWNpZmljYXRpb25zLjwvcD4KLQotPHA+V1MtSSBCYXNpYyBQcm9maWxlIGlzIGEgb3V0bGluZSBvZiByZXF1aXJlbWVudHMgdG8gd2hpY2ggV1NETCBhbmQgV2ViIHNlcnZpY2UKLXByb3RvY29sIChTT0FQL0hUVFApIHRyYWZmaWMgbXVzdCBjb21wbHkgaW4gb3JkZXIgdG8gY2xhaW0gV1MtSSBjb25mb3JtYW5jZS4KLVRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIGN1cnJlbnRseSBzdXBwb3J0IFdTLUkgU2ltcGxlIFNPQVAKLUJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCkgd2hpY2ggYnVpbGRzIG9uIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUsIGFuZAotdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSAxLjAgKFdTLUkgQVApLiBUbyB2aWV3IHRoZSBzcGVjaWZpY2F0aW9ucywgcmVmZXIKLXRvIHRoZSBXUy1JIFdlYiBzaXRlLCBhbmQgdW5kZXIgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlbGl2ZXJhYmxlczwvc3Bhbj4gc2VsZWN0Ci0gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QmFzaWMgUHJvZmlsZTwvc3Bhbj4uPC9wPgotCi08cD5EZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgV2ViIHNlcnZpY2UgYmVpbmcgY3JlYXRlZCwgeW91IG1heSBvciBtYXkgbm90Ci13YW50IHlvdXIgV2ViIHNlcnZpY2UgdG8gY29tcGx5IHdpdGggdGhlIFdTLUkgcHJvZmlsZXMuIFRoZSBkZWZhdWx0IGxldmVsCi1vZiBjb21wbGlhbmNlIGlzIHRvIGdlbmVyYXRlIGEgd2FybmluZyBpZiBhIG5vbiBXUy1JIFNTQlAgY29tcGxhaW50IFdlYiBzZXJ2aWNlCi1vcHRpb24gaXMgc2VsZWN0ZWQgYW5kIHRvIGlnbm9yZSBhbnkgbm9uIFdTLUkgQVAgY29tcGxpYW50IHNlbGVjdGlvbnMuIFlvdQotY2FuIHNldCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGF0IHRoZSB3b3Jrc3BhY2Ugb3IgcHJvamVjdCBsZXZlbC4gVGhlCi1XZWIgc2VydmljZXMgd2l6YXJkcywgdGhlIFdlYlNwaGVyZTxzdXA+wq48L3N1cD4gcnVuLXRpbWUgZW52aXJvbm1lbnRzLCB0aGUgV1NETCBlZGl0b3IsCi1hbmQgb3RoZXIgV2ViIHNlcnZpY2VzIHRvb2xzIHByb3ZpZGVkIHN1cHBvcnQgYW5kIGVuY291cmFnZSB0aGUgZGV2ZWxvcG1lbnQKLW9mIFdTLUkgY29tcGxpYW5jZSBzZXJ2aWNlcy48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdHdzaWNvbXBseS5odG1sIj5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbiB0b29scyBzdXBwb3J0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdSBjYW4gY2hvb3NlIHRvIG1ha2UgeW91ciBXZWIgc2VydmljZSBjb21wbGlhbnQgb3Igbm9uLWNvbXBsaWFudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzIGFyZSBub3QgV1MtSSBjb21wbGlhbnQuPC9saT4KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIHN1cHBvcnQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBvdXRsaW5lZCBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSwgdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSSBTU0JQKSwgYW5kIHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgMS4wIChXUy1JIEFQKS4gWW91IGNhbiBjaG9vc2UgdG8gbWFrZSB5b3VyIFdlYiBzZXJ2aWNlIGNvbXBsaWFudCBvciBub24tY29tcGxpYW50LCBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4gRm9yIGV4YW1wbGUsIGVuY29kZWQgc3R5bGUgKFJQQy9lbmNvZGVkKSwgU09BUCBvdmVyIEpNUyBwcm90b2NvbHMgYXJlIG5vdCBXUy1JIGNvbXBsaWFudC4iPlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NzdGFuZGFyZHMuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5YTk1Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NzdGFuZGFyZHMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0id2Vic2VydmljZXNzdGFuZGFyZHMiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIHN0YW5kYXJkczwvdGl0bGU+Ci08c2hvcnRkZXNjPk9uZSBvZiB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgSW50ZXJuZXQgc3RhbmRhcmRzIGlzIHRoYXQgdGhleSBmb2N1cwotb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cwotdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMKLXByZXZlbnRzIGluZGl2aWR1YWwgdmVuZG9ycyBmcm9tIGltcG9zaW5nIGEgc3RhbmRhcmQgb24gdGhlIEludGVybmV0LiBPcGVuCi1Tb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eQotb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+c3RhbmRhcmRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+VGhlIGZvbGxvd2luZyBzdGFuZGFyZHMgcGxheSBrZXkgcm9sZXMgaW4gV2ViIHNlcnZpY2VzOiBVbml2ZXJzYWwgRGVzY3JpcHRpb24sCi1EaXNjb3ZlcnkgYW5kIEludGVncmF0aW9uIChVRERJKSwgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSwKLVdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSwgU09BUCwgYW5kIFdlYiBTZXJ2aWNlcyBJbnRlcm9wZXJhYmlsaXR5Ci0oV1MtSSkuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdGFuZGFyZHMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAyLjwvcD4KLTxwPlRoZSBVRERJIHNwZWNpZmljYXRpb24gZGVmaW5lcyBvcGVuLCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzdGFuZGFyZHMgdGhhdAotZW5hYmxlIGJ1c2luZXNzZXMgdG8gc2hhcmUgaW5mb3JtYXRpb24gaW4gYSBnbG9iYWwgYnVzaW5lc3MgcmVnaXN0cnksIGRpc2NvdmVyCi1zZXJ2aWNlcyBvbiB0aGUgcmVnaXN0cnksIGFuZCBkZWZpbmUgaG93IHRoZXkgaW50ZXJhY3Qgb3ZlciB0aGUgSW50ZXJuZXQuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVRERJLCByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnIgotc2NvcGU9ImV4dGVybmFsIj53d3cudWRkaS5vcmc8L3hyZWY+PC9wPgotPHA+V1NJTCBpcyBhbiBYTUwtYmFzZWQgb3BlbiBzcGVjaWZpY2F0aW9uIHRoYXQgZGVmaW5lcyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UKLWRpc2NvdmVyeSBtZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlCi1wcm92aWRlcidzIHBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nIGhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yCi1hdmFpbGFibGUgV2ViIHNlcnZpY2VzLiZuYnNwOyBBIFdTSUwgZG9jdW1lbnQgZGVmaW5lcyB0aGUgbG9jYXRpb25zIG9uIGEgV2ViCi1zaXRlIHdoZXJlIHlvdSBjYW4gbG9vayBmb3IgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLiZuYnNwO1NpbmNlIFdTSUwgZm9jdXNlcwotb24gZGlzdHJpYnV0ZWQgc2VydmljZSBkaXNjb3ZlcnksIHRoZSBXU0lMIHNwZWNpZmljYXRpb24gY29tcGxlbWVudHMgVURESQotYnkgZmFjaWxpdGF0aW5nIHRoZSBkaXNjb3Zlcnkgb2Ygc2VydmljZXMgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIFdlYiBzaXRlcwotdGhhdCBtYXkgbm90IGJlIGxpc3RlZCB5ZXQgaW4gYSBVRERJIHJlZ2lzdHJ5LiZuYnNwO0Egc2VwYXJhdGUgdG9waWMgaW4gdGhpcwotZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhlICA8eHJlZiBocmVmPSJjd3NpbHVkLmRpdGEiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuCi1VRERJIGFuZCBXU0lMPC94cmVmPi4mbmJzcDsgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1NJTCwgcmVmZXIgdG8gIDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+IHd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwveHJlZj48L3A+Ci08cD5XU0RMIGlzIGFuIFhNTC1iYXNlZCBvcGVuIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgdGhlIGludGVyZmFjZXMgdG8KLWFuZCBpbnN0YW5jZXMgb2YgV2ViIHNlcnZpY2VzIG9uIHRoZSBuZXR3b3JrLiBJdCBpcyBleHRlbnNpYmxlLCBzbyBlbmRwb2ludHMKLWNhbiBiZSBkZXNjcmliZWQgcmVnYXJkbGVzcyBvZiB0aGUgbWVzc2FnZSBmb3JtYXRzIG9yIG5ldHdvcmsgcHJvdG9jb2xzIHRoYXQKLWFyZSB1c2VkIHRvIGNvbW11bmljYXRlLiBCdXNpbmVzc2VzIGNhbiBtYWtlIHRoZSBXU0RMIGRvY3VtZW50cyBmb3IgdGhlaXIKLVdlYiBzZXJ2aWNlcyBhdmFpbGFibGUgdGhvdWdoIFVEREksIFdTSUwsIG9yIGJ5IGJyb2FkY2FzdGluZyB0aGUgVVJMcyB0byB0aGVpcgotV1NETCB2aWEgZW1haWwgb3IgV2ViIHNpdGVzLiBXU0RMIGlzIGRlc2NyaWJlZCBhcyBhIHNlcGFyYXRlIHRvcGljIGluIHRoaXMKLWRvY3VtZW50YXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTREwsIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi93c2RsIiBzY29wZT0iZXh0ZXJuYWwiPnd3dy53My5vcmcvVFIvd3NkbDwveHJlZj48L3A+Ci08cD5TT0FQIGlzIGFuIFhNTC1iYXNlZCBzdGFuZGFyZCBmb3IgbWVzc2FnaW5nIG92ZXIgSFRUUCBhbmQgb3RoZXIgSW50ZXJuZXQKLXByb3RvY29scy4gSXQgaXMgYSBsaWdodHdlaWdodCBwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluCi1hIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBJdCBpcyBiYXNlZCBvbiBYTUwgYW5kIGNvbnNpc3RzCi1vZiB0aHJlZSBwYXJ0czo8dWw+Ci08bGk+QW4gZW52ZWxvcGUgdGhhdCBkZWZpbmVzIGEgZnJhbWV3b3JrIGZvciBkZXNjcmliaW5nIHdoYXQgaXMgaW4gYSBtZXNzYWdlCi1hbmQgaG93IHRvIHByb2Nlc3MgaXQuPC9saT4KLTxsaT5BIHNldCBvZiBlbmNvZGluZyBydWxlcyBmb3IgZXhwcmVzc2luZyBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZAotZGF0YSB0eXBlcy48L2xpPgotPGxpPkEgY29udmVudGlvbiBmb3IgcmVwcmVzZW50aW5nIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgYW5kIHJlc3BvbnNlcy48L2xpPgotPC91bD5TT0FQIGVuYWJsZXMgdGhlIGJpbmRpbmcgYW5kIHVzYWdlIG9mIGRpc2NvdmVyZWQgV2ViIHNlcnZpY2VzIGJ5IGRlZmluaW5nCi1hIG1lc3NhZ2UgcGF0aCBmb3Igcm91dGluZyBtZXNzYWdlcy4gU09BUCBtYXkgYmUgdXNlZCB0byBxdWVyeSBVRERJIGZvciBXZWIKLXNlcnZpY2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBTT0FQIDEuMSAoU09BUCAxLjIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKLVdlYiBzZXJ2aWNlcyB0b29scyksIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NPQVAiCi1zY29wZT0iZXh0ZXJuYWwiPnd3dy53My5vcmcvVFIvU09BUDwveHJlZj48L3A+Ci08cD5GaWd1cmUgMi4gUmVsYXRpb25zaGlwcyBiZXR3ZWVuIFNPQVAsIFVEREksIFdTSUwgYW5kIFdTREwuPC9wPgotPHA+IDxpbWFnZSBhbHQ9IkZpZ3VyZSAyIGlsbHVzdHJhdGVzIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gU09BUCwgVURESSwgV1NJTCwgYW5kIFdTREwuIgotaHJlZj0iLi4vaW1hZ2VzL3NvYXB1ZHdzLmdpZiI+PC9pbWFnZT4gPC9wPgotPHA+QSBzZXJ2aWNlIHByb3ZpZGVyIGhvc3RzIGEgV2ViIHNlcnZpY2UgYW5kIG1ha2VzIGl0IGFjY2Vzc2libGUgdXNpbmcgcHJvdG9jb2xzCi1zdWNoIGFzIFNPQVAvSFRUUCBvciBTT0FQL0pNUy4gVGhlIFdlYiBzZXJ2aWNlIGlzIGRlc2NyaWJlZCBieSBhIFdTREwgZG9jdW1lbnQKLXRoYXQgaXMgc3RvcmVkIG9uIHRoZSBwcm92aWRlcidzIHNlcnZlciBvciBpbiBhIHNwZWNpYWwgcmVwb3NpdG9yeS4gVGhlIFdTREwKLWRvY3VtZW50IG1heSBiZSByZWZlcmVuY2VkIGJ5IHRoZSBVRERJIGJ1c2luZXNzIHJlZ2lzdHJ5IGFuZCBXU0lMIGRvY3VtZW50cy4KLVRoZXNlIGNvbnRhaW4gcG9pbnRlcnMgdG8gdGhlIFdlYiBzZXJ2aWNlJ3MgV1NETCBmaWxlcy48L3A+Ci08cD5UaGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgYW5kIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSBhcmUgb3V0bGluZXMKLW9mIHJlcXVpcmVtZW50cyB0byB3aGljaCBXU0RMIGFuZCBXZWIgc2VydmljZSBwcm90b2NvbCAoU09BUC9IVFRQKSB0cmFmZmljCi1tdXN0IGNvbXBseSBpbiBvcmRlciB0byBjbGFpbSBXUy1JIGNvbmZvcm1hbmNlLiBUaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbgotdG9vbHMgY3VycmVudGx5IHN1cHBvcnQgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wIGFuZCB0aGUgQXR0YWNobWVudAotUHJvZmlsZSAxLjAuIFRvIHZpZXcgdGhlIHNwZWNpZmljYXRpb25zLCByZWZlciB0byB0aGUgV1MtSSBXZWIgc2l0ZSwgYW5kIHVuZGVyCi0gPHVpY29udHJvbD5SZXNvdXJjZXM8L3VpY29udHJvbD4gc2VsZWN0ICA8dWljb250cm9sPkRvY3VtZW50YXRpb248L3VpY29udHJvbD46IDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LndzLWkub3JnIiBzY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly93d3cud3MtaS5vcmc8L3hyZWY+PC9wPgotPHA+U2V2ZXJhbCBuZXcgV2ViIHNlcnZpY2VzIHN0YW5kYXJkcyBhcmUgYWxzbyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZlbG9wbWVudAotZW52aXJvbm1lbnQuIFRoZXNlIGluY2x1ZGU6PGRsPjxkbGVudHJ5PgotPGR0PkpBWC1SUEM8L2R0PgotPGRkPkpBWC1SUEMgc3RhbmRzIGZvciA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEFQSSBmb3IgWE1MLWJhc2VkIFJQQywgYWxzbyBrbm93biBhcwotSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcwotKEFQSXMpIGFuZCBjb252ZW50aW9ucyBmb3IgYnVpbGRpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIHRoYXQKLXVzZSByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIChSUEMpIGFuZCBYTUwuIEl0IHN0YW5kYXJkaXplcyB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiB0bwotV1NETCBhbmQgV1NETCB0byA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIKLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZwotYW5kIGRlcGxveWluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gcGxhdGZvcm0uCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byB0aGUgPHhyZWYgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTAxIgotc2NvcGU9ImV4dGVybmFsIj5vZmZpY2lhbCBzcGVjaWZpY2F0aW9uczwveHJlZj4uPC9kZD4KLTwvZGxlbnRyeT48ZGxlbnRyeT4KLTxkdD5KU1ItMTA5IGFuZCBKU1ItOTIxPC9kdD4KLTxkZD5KU1ItMTA5IGFuZCBKU1ItOTIxIChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZSB0aGUKLXByb2dyYW1taW5nIG1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcwotaW4gdGhlIEoyRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZCBDbGllbnQgQXBwbGljYXRpb24KLWNvbnRhaW5lcnMuIE9uZSBvZiBpdHMgbWFpbiBnb2FscyBpcyB0byBlbnN1cmUgdmVuZG9ycycgaW1wbGVtZW50YXRpb25zIGludGVyb3BlcmF0ZS4KLUZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgb2ZmaWNpYWwgc3BlY2lmaWNhdGlvbnM6IDx1bD4KLTxsaT48eHJlZiBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xMDkiIHNjb3BlPSJleHRlcm5hbCIKLXR5cGU9Imh0bWwiPkpTUi0xMDk8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD05MjEiIHNjb3BlPSJleHRlcm5hbCIKLXR5cGU9Imh0bWwiPkpTUi05MjE8L3hyZWY+PC9saT4KLTwvdWw+PC9kZD4KLTwvZGxlbnRyeT48ZGxlbnRyeT4KLTxkdD5XUy1TPC9kdD4KLTxkZD5UaGVzZSB0b29scyBzdXBwb3J0IHRoZSBPQVNJUyBXZWIgU2VydmljZXMgU2VjdXJpdHkgMS4wIHN0YW5kYXJkLiBGb3IKLW1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMgY29tcG9uZW50cyBvZiB0aGlzIHN0YW5kYXJkLCByZWZlciB0bzo8dWw+Ci08bGk+PHhyZWYgaHJlZj0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy1zb2FwLW1lc3NhZ2Utc2VjdXJpdHktMS4wLnBkZiIKLXNjb3BlPSJleHRlcm5hbCIgdHlwZT0iaHRtbCI+V2ViIFNlcnZpY2VzIFNlY3VyaXR5OiBTT0FQIE1lc3NhZ2UgU2VjdXJpdHkKLVYxLjA8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MtdXNlcm5hbWUtdG9rZW4tcHJvZmlsZS0xLjAucGRmIgotc2NvcGU9ImV4dGVybmFsIiB0eXBlPSJodG1sIj5XZWIgU2VydmljZXMgU2VjdXJpdHk6IFVzZXJuYW1lIFRva2VuIFByb2ZpbGUKLVYxLjA8L3hyZWY+PC9saT4KLTxsaT4gPHhyZWYgaHJlZj0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wLnBkZiIKLXNjb3BlPSJleHRlcm5hbCIgdHlwZT0iaHRtbCI+V2ViIFNlcnZpY2VzIFNlY3VyaXR5OiBYLjUwOSBUb2tlbiBQcm9maWxlIFYxLjA8L3hyZWY+PC9saT4KLTwvdWw+PC9kZD4KLTwvZGxlbnRyeT48L2RsPjwvcD4KLTxwPldlYiBzZXJ2aWNlcyB0b29saW5nIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWNhdGlvbnM6PC9wPgotPHRhYmxlPgotPHRncm91cCBjb2xzPSIyIj48Y29sc3BlYyBjb2xuYW1lPSJjb2wxIiBjb2x3aWR0aD0iOTUqIi8+PGNvbHNwZWMgY29sbmFtZT0iY29sMiIKLWNvbHdpZHRoPSIxMDQqIi8+Ci08dGhlYWQ+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiIHZhbGlnbj0idG9wIj5UZWNobm9sb2d5IG9yIHNwZWNpZmljYXRpb248L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiIHZhbGlnbj0idG9wIj5WZXJzaW9uIG9yIGxldmVsIHN1cHBvcnRlZDwvZW50cnk+Ci08L3Jvdz4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08cm93PgotPGVudHJ5IG5hbWVlbmQ9ImNvbDIiIG5hbWVzdD0iY29sMSI+PGI+VHJhbnNwb3J0czwvYj48L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPkhUVFAvSFRUUFM8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPnYxLjAgYW5kIHYxLjE8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPkpNUzwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBuYW1lZW5kPSJjb2wyIiBuYW1lc3Q9ImNvbDEiPjxiPk1lc3NhZ2luZzwvYj48L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPlNPQVAgc3BlY2lmaWNhdGlvbjwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+djEuMTwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+U09BUCBBdHRhY2hlbWVudHM8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgbmFtZWVuZD0iY29sMiIgbmFtZXN0PSJjb2wxIj48Yj5EZXNjcmlwdGlvbjwvYj48L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPlVEREk8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPnYyLjA8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPldTREw8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPnYxLjE8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPldTSUw8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPnYxLjA8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IG5hbWVlbmQ9ImNvbDIiIG5hbWVzdD0iY29sMSI+PGI+U2VjdXJpdHk8L2I+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5XUy1TZWN1cml0eTwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+T0FTSVMgU3RhbmRhcmQgMS4wPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBuYW1lZW5kPSJjb2wyIiBuYW1lc3Q9ImNvbDEiPjxiPkluZXJvcGVyYWJpbGl0eTwvYj48L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPldTLUkgQmFzaWMgUHJvZmlsZTwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+MS4xLjI8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPldTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj4xLjAuMzwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+V1MtSSBBdHRhY2htZW50cyBQcm9maWxlPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj4xLjA8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPjxiPk90aGVyIFN0YW5kYXJkczwvYj48L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+SkFYLVJQQzwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+djEuMCBmb3IgSjJFRSAxLjMsIHYxLjEgZm9yIEoyRUUgMS40PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5KU1IgMTA5PC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj5KMkVFIDEuMzwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+SlNSIDkyMTwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+SjJFRSAxLjQ8L2VudHJ5PgotPC9yb3c+Ci08L3Rib2R5PgotPC90Z3JvdXA+Ci08L3RhYmxlPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3dzLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBvdmVydmlldzwvbGlua3RleHQ+Ci08L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzCi1kZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW92ZXIuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkKLShXUy1JKTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzVhMTE3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBzdGFuZGFyZHMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik9uZSBvZiB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgSW50ZXJuZXQgc3RhbmRhcmRzIGlzIHRoYXQgdGhleSBmb2N1cyBvbiBwcm90b2NvbHMgYW5kIG5vdCBvbiBpbXBsZW1lbnRhdGlvbnMuIFRoZSBJbnRlcm5ldCBpcyBjb21wb3NlZCBvZiBoZXRlcm9nZW5lb3VzIHRlY2hub2xvZ2llcyB0aGF0IHN1Y2Nlc3NmdWxseSBpbnRlcm9wZXJhdGUgdGhyb3VnaCBzaGFyZWQgcHJvdG9jb2xzLiBUaGlzIHByZXZlbnRzIGluZGl2aWR1YWwgdmVuZG9ycyBmcm9tIGltcG9zaW5nIGEgc3RhbmRhcmQgb24gdGhlIEludGVybmV0LiBPcGVuIFNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBwcmVzZXJ2aW5nIHRoZSBpbnRlcm9wZXJhYmlsaXR5IG9mIHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RhbmRhcmRzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgc3RhbmRhcmRzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBzdGFuZGFyZHMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3NvYXAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2lsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2NqYXhycGMuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY2pzcjEwOS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW92ZXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IndlYnNlcnZpY2Vzc3RhbmRhcmRzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIHN0YW5kYXJkczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0id2Vic2VydmljZXNzdGFuZGFyZHMiPjxhIG5hbWU9IndlYnNlcnZpY2Vzc3RhbmRhcmRzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC9oMT4KLQotCi0KLTxkaXY+PHA+T25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzCi1vbiBwcm90b2NvbHMgYW5kIG5vdCBvbiBpbXBsZW1lbnRhdGlvbnMuIFRoZSBJbnRlcm5ldCBpcyBjb21wb3NlZCBvZiBoZXRlcm9nZW5lb3VzCi10ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcwotcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4KLVNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBwcmVzZXJ2aW5nIHRoZSBpbnRlcm9wZXJhYmlsaXR5Ci1vZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy48L3A+Ci0KLTxwPlRoZSBmb2xsb3dpbmcgc3RhbmRhcmRzIHBsYXkga2V5IHJvbGVzIGluIFdlYiBzZXJ2aWNlczogVW5pdmVyc2FsIERlc2NyaXB0aW9uLAotRGlzY292ZXJ5IGFuZCBJbnRlZ3JhdGlvbiAoVURESSksIFdlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCksCi1XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCksIFNPQVAsIGFuZCBXZWIgU2VydmljZXMgSW50ZXJvcGVyYWJpbGl0eQotKFdTLUkpLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugc3RhbmRhcmRzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMi48L3A+Ci0KLTxwPlRoZSBVRERJIHNwZWNpZmljYXRpb24gZGVmaW5lcyBvcGVuLCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzdGFuZGFyZHMgdGhhdAotZW5hYmxlIGJ1c2luZXNzZXMgdG8gc2hhcmUgaW5mb3JtYXRpb24gaW4gYSBnbG9iYWwgYnVzaW5lc3MgcmVnaXN0cnksIGRpc2NvdmVyCi1zZXJ2aWNlcyBvbiB0aGUgcmVnaXN0cnksIGFuZCBkZWZpbmUgaG93IHRoZXkgaW50ZXJhY3Qgb3ZlciB0aGUgSW50ZXJuZXQuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVRERJLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPnd3dy51ZGRpLm9yZzwvYT48L3A+Ci0KLTxwPldTSUwgaXMgYW4gWE1MLWJhc2VkIG9wZW4gc3BlY2lmaWNhdGlvbiB0aGF0IGRlZmluZXMgYSBkaXN0cmlidXRlZCBzZXJ2aWNlCi1kaXNjb3ZlcnkgbWV0aG9kIHRoYXQgc3VwcGxpZXMgcmVmZXJlbmNlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBhdCB0aGUgc2VydmljZQotcHJvdmlkZXIncyBwb2ludC1vZi1vZmZlcmluZywgYnkgc3BlY2lmeWluZyBob3cgdG8gaW5zcGVjdCBhIFdlYiBzaXRlIGZvcgotYXZhaWxhYmxlIFdlYiBzZXJ2aWNlcy7CoCBBIFdTSUwgZG9jdW1lbnQgZGVmaW5lcyB0aGUgbG9jYXRpb25zIG9uIGEgV2ViCi1zaXRlIHdoZXJlIHlvdSBjYW4gbG9vayBmb3IgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLsKgU2luY2UgV1NJTCBmb2N1c2VzCi1vbiBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBjb21wbGVtZW50cyBVRERJCi1ieSBmYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gV2ViIHNpdGVzCi10aGF0IG1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuwqBBIHNlcGFyYXRlIHRvcGljIGluIHRoaXMKLWRvY3VtZW50YXRpb24gZGlzY3Vzc2VzIHRoZSAgPGEgaHJlZj0iY3dzaWx1ZC5odG1sIj5SZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMPC9hPi7CoCBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXU0lMLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWwiIHRhcmdldD0iX2JsYW5rIj53d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcy9saWJyYXJ5L3dzLXdzaWxzcGVjLmh0bWw8L2E+PC9wPgotCi08cD5XU0RMIGlzIGFuIFhNTC1iYXNlZCBvcGVuIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgdGhlIGludGVyZmFjZXMgdG8KLWFuZCBpbnN0YW5jZXMgb2YgV2ViIHNlcnZpY2VzIG9uIHRoZSBuZXR3b3JrLiBJdCBpcyBleHRlbnNpYmxlLCBzbyBlbmRwb2ludHMKLWNhbiBiZSBkZXNjcmliZWQgcmVnYXJkbGVzcyBvZiB0aGUgbWVzc2FnZSBmb3JtYXRzIG9yIG5ldHdvcmsgcHJvdG9jb2xzIHRoYXQKLWFyZSB1c2VkIHRvIGNvbW11bmljYXRlLiBCdXNpbmVzc2VzIGNhbiBtYWtlIHRoZSBXU0RMIGRvY3VtZW50cyBmb3IgdGhlaXIKLVdlYiBzZXJ2aWNlcyBhdmFpbGFibGUgdGhvdWdoIFVEREksIFdTSUwsIG9yIGJ5IGJyb2FkY2FzdGluZyB0aGUgVVJMcyB0byB0aGVpcgotV1NETCB2aWEgZW1haWwgb3IgV2ViIHNpdGVzLiBXU0RMIGlzIGRlc2NyaWJlZCBhcyBhIHNlcGFyYXRlIHRvcGljIGluIHRoaXMKLWRvY3VtZW50YXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTREwsIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi93c2RsIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnczLm9yZy9UUi93c2RsPC9hPjwvcD4KLQotPGRpdiBjbGFzcz0icCI+U09BUCBpcyBhbiBYTUwtYmFzZWQgc3RhbmRhcmQgZm9yIG1lc3NhZ2luZyBvdmVyIEhUVFAgYW5kIG90aGVyIEludGVybmV0Ci1wcm90b2NvbHMuIEl0IGlzIGEgbGlnaHR3ZWlnaHQgcHJvdG9jb2wgZm9yIHRoZSBleGNoYW5nZSBvZiBpbmZvcm1hdGlvbiBpbgotYSBkZWNlbnRyYWxpemVkLCBkaXN0cmlidXRlZCBlbnZpcm9ubWVudC4gSXQgaXMgYmFzZWQgb24gWE1MIGFuZCBjb25zaXN0cwotb2YgdGhyZWUgcGFydHM6PHVsPgotPGxpPkFuIGVudmVsb3BlIHRoYXQgZGVmaW5lcyBhIGZyYW1ld29yayBmb3IgZGVzY3JpYmluZyB3aGF0IGlzIGluIGEgbWVzc2FnZQotYW5kIGhvdyB0byBwcm9jZXNzIGl0LjwvbGk+Ci0KLTxsaT5BIHNldCBvZiBlbmNvZGluZyBydWxlcyBmb3IgZXhwcmVzc2luZyBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZAotZGF0YSB0eXBlcy48L2xpPgotCi08bGk+QSBjb252ZW50aW9uIGZvciByZXByZXNlbnRpbmcgcmVtb3RlIHByb2NlZHVyZSBjYWxscyBhbmQgcmVzcG9uc2VzLjwvbGk+Ci0KLTwvdWw+Ci1TT0FQIGVuYWJsZXMgdGhlIGJpbmRpbmcgYW5kIHVzYWdlIG9mIGRpc2NvdmVyZWQgV2ViIHNlcnZpY2VzIGJ5IGRlZmluaW5nCi1hIG1lc3NhZ2UgcGF0aCBmb3Igcm91dGluZyBtZXNzYWdlcy4gU09BUCBtYXkgYmUgdXNlZCB0byBxdWVyeSBVRERJIGZvciBXZWIKLXNlcnZpY2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBTT0FQIDEuMSAoU09BUCAxLjIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKLVdlYiBzZXJ2aWNlcyB0b29scyksIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TT0FQIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnczLm9yZy9UUi9TT0FQPC9hPjwvZGl2PgotCi08cD5GaWd1cmUgMi4gUmVsYXRpb25zaGlwcyBiZXR3ZWVuIFNPQVAsIFVEREksIFdTSUwgYW5kIFdTREwuPC9wPgotCi08cD4gPGltZyBzcmM9Ii4uL2ltYWdlcy9zb2FwdWR3cy5naWYiIGFsdD0iRmlndXJlIDIgaWxsdXN0cmF0ZXMgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBTT0FQLCBVRERJLCBXU0lMLCBhbmQgV1NETC4iIC8+IDwvcD4KLQotPHA+QSBzZXJ2aWNlIHByb3ZpZGVyIGhvc3RzIGEgV2ViIHNlcnZpY2UgYW5kIG1ha2VzIGl0IGFjY2Vzc2libGUgdXNpbmcgcHJvdG9jb2xzCi1zdWNoIGFzIFNPQVAvSFRUUCBvciBTT0FQL0pNUy4gVGhlIFdlYiBzZXJ2aWNlIGlzIGRlc2NyaWJlZCBieSBhIFdTREwgZG9jdW1lbnQKLXRoYXQgaXMgc3RvcmVkIG9uIHRoZSBwcm92aWRlcidzIHNlcnZlciBvciBpbiBhIHNwZWNpYWwgcmVwb3NpdG9yeS4gVGhlIFdTREwKLWRvY3VtZW50IG1heSBiZSByZWZlcmVuY2VkIGJ5IHRoZSBVRERJIGJ1c2luZXNzIHJlZ2lzdHJ5IGFuZCBXU0lMIGRvY3VtZW50cy4KLVRoZXNlIGNvbnRhaW4gcG9pbnRlcnMgdG8gdGhlIFdlYiBzZXJ2aWNlJ3MgV1NETCBmaWxlcy48L3A+Ci0KLTxwPlRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSBhbmQgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIGFyZSBvdXRsaW5lcwotb2YgcmVxdWlyZW1lbnRzIHRvIHdoaWNoIFdTREwgYW5kIFdlYiBzZXJ2aWNlIHByb3RvY29sIChTT0FQL0hUVFApIHRyYWZmaWMKLW11c3QgY29tcGx5IGluIG9yZGVyIHRvIGNsYWltIFdTLUkgY29uZm9ybWFuY2UuIFRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uCi10b29scyBjdXJyZW50bHkgc3VwcG9ydCBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgYW5kIHRoZSBBdHRhY2htZW50Ci1Qcm9maWxlIDEuMC4gVG8gdmlldyB0aGUgc3BlY2lmaWNhdGlvbnMsIHJlZmVyIHRvIHRoZSBXUy1JIFdlYiBzaXRlLCBhbmQgdW5kZXIKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SZXNvdXJjZXM8L3NwYW4+IHNlbGVjdCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RG9jdW1lbnRhdGlvbjwvc3Bhbj46IDxhIGhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmciIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LndzLWkub3JnPC9hPjwvcD4KLQotPGRpdiBjbGFzcz0icCI+U2V2ZXJhbCBuZXcgV2ViIHNlcnZpY2VzIHN0YW5kYXJkcyBhcmUgYWxzbyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZlbG9wbWVudAotZW52aXJvbm1lbnQuIFRoZXNlIGluY2x1ZGU6PGRsPgotPGR0IGNsYXNzPSJkbHRlcm0iPkpBWC1SUEM8L2R0PgotCi08ZGQ+SkFYLVJQQyBzdGFuZHMgZm9yIEphdmHihKIgQVBJIGZvciBYTUwtYmFzZWQgUlBDLCBhbHNvIGtub3duIGFzCi1KU1IgMTAxLiBJdCBpcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgSmF2YSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2VzCi0oQVBJcykgYW5kIGNvbnZlbnRpb25zIGZvciBidWlsZGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgdGhhdAotdXNlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgKFJQQykgYW5kIFhNTC4gSXQgc3RhbmRhcmRpemVzIHRoZSBKYXZhIHRvCi1XU0RMIGFuZCBXU0RMIHRvIEphdmEgbWFwcGluZ3MsIGFuZCBwcm92aWRlcyB0aGUgY29yZSBBUElzIGZvciBkZXZlbG9waW5nCi1hbmQgZGVwbG95aW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgSmF2YSBwbGF0Zm9ybS4KLUZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xMDEiIHRhcmdldD0iX2JsYW5rIj5vZmZpY2lhbCBzcGVjaWZpY2F0aW9uczwvYT4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+SlNSLTEwOSBhbmQgSlNSLTkyMTwvZHQ+Ci0KLTxkZD5KU1ItMTA5IGFuZCBKU1ItOTIxIChJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgU2VydmljZXMpIGRlZmluZSB0aGUKLXByb2dyYW1taW5nIG1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcwotaW4gdGhlIEoyRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZCBDbGllbnQgQXBwbGljYXRpb24KLWNvbnRhaW5lcnMuIE9uZSBvZiBpdHMgbWFpbiBnb2FscyBpcyB0byBlbnN1cmUgdmVuZG9ycycgaW1wbGVtZW50YXRpb25zIGludGVyb3BlcmF0ZS4KLUZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgb2ZmaWNpYWwgc3BlY2lmaWNhdGlvbnM6IDx1bD4KLTxsaT48YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xMDkiIHRhcmdldD0iX2JsYW5rIj5KU1ItMTA5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD05MjEiIHRhcmdldD0iX2JsYW5rIj5KU1ItOTIxPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5XUy1TPC9kdD4KLQotPGRkPlRoZXNlIHRvb2xzIHN1cHBvcnQgdGhlIE9BU0lTIFdlYiBTZXJ2aWNlcyBTZWN1cml0eSAxLjAgc3RhbmRhcmQuIEZvcgotbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyBjb21wb25lbnRzIG9mIHRoaXMgc3RhbmRhcmQsIHJlZmVyIHRvOjx1bD4KLTxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAucGRmIiB0YXJnZXQ9Il9ibGFuayI+V2ViIFNlcnZpY2VzIFNlY3VyaXR5OiBTT0FQIE1lc3NhZ2UgU2VjdXJpdHkgVjEuMDwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXVzZXJuYW1lLXRva2VuLXByb2ZpbGUtMS4wLnBkZiIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogVXNlcm5hbWUgVG9rZW4gUHJvZmlsZSBWMS4wPC9hPjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wLnBkZiIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogWC41MDkgVG9rZW4gUHJvZmlsZSBWMS4wPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi08L2RsPgotPC9kaXY+Ci0KLTxwPldlYiBzZXJ2aWNlcyB0b29saW5nIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWNhdGlvbnM6PC9wPgotCi0KLTxkaXYgY2xhc3M9InRhYmxlbm9ib3JkZXIiPjx0YWJsZSBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgZnJhbWU9ImJvcmRlciIgYm9yZGVyPSIxIiBydWxlcz0iYWxsIj4KLTx0aGVhZCBhbGlnbj0ibGVmdCI+Ci08dHI+Ci08dGggdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGlkPSJOMTAxQjQiPlRlY2hub2xvZ3kgb3Igc3BlY2lmaWNhdGlvbjwvdGg+Ci0KLTx0aCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaWQ9Ik4xMDFCQyI+VmVyc2lvbiBvciBsZXZlbCBzdXBwb3J0ZWQ8L3RoPgotCi08L3RyPgotCi08L3RoZWFkPgotCi08dGJvZHk+Ci08dHI+Ci08dGQgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDFCNCBOMTAxQkMgIj48c3Ryb25nPlRyYW5zcG9ydHM8L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkhUVFAvSFRUUFM8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjAgYW5kIHYxLjE8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkpNUzwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+Jm5ic3A7PC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIGNvbHNwYW49IjIiIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAxQjQgTjEwMUJDICI+PHN0cm9uZz5NZXNzYWdpbmc8L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPlNPQVAgc3BlY2lmaWNhdGlvbjwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+djEuMTwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+U09BUCBBdHRhY2hlbWVudHM8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPiZuYnNwOzwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCBjb2xzcGFuPSIyIiB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMUI0IE4xMDFCQyAiPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPlVEREk8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYyLjA8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTREw8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjE8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTSUw8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjA8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDFCNCBOMTAxQkMgIj48c3Ryb25nPlNlY3VyaXR5PC9zdHJvbmc+PC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDcuNzM4NjkzNDY3MzM2NjklIiBoZWFkZXJzPSJOMTAxQjQgIj5XUy1TZWN1cml0eTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+T0FTSVMgU3RhbmRhcmQgMS4wPC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIGNvbHNwYW49IjIiIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAxQjQgTjEwMUJDICI+PHN0cm9uZz5JbmVyb3BlcmFiaWxpdHk8L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTLUkgQmFzaWMgUHJvZmlsZTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+MS4xLjI8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4xLjAuMzwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+V1MtSSBBdHRhY2htZW50cyBQcm9maWxlPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4xLjA8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPjxzdHJvbmc+T3RoZXIgU3RhbmRhcmRzPC9zdHJvbmc+PC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4mbmJzcDs8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkpBWC1SUEM8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPnYxLjAgZm9yIEoyRUUgMS4zLCB2MS4xIGZvciBKMkVFIDEuNDwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+SlNSIDEwOTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+SjJFRSAxLjM8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPkpTUiA5MjE8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPkoyRUUgMS40PC90ZD4KLQotPC90cj4KLQotPC90Ym9keT4KLQotPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsLmh0bWwiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCk8L2E+PC9zdHJvbmc+PGJyIC8+Ci1XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGlzIGEgc3RhbmRhcmQgc3BlY2lmaWNhdGlvbiBmb3IgZGVzY3JpYmluZyBuZXR3b3JrZWQsIFhNTC1iYXNlZCBzZXJ2aWNlcy4gSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IGZvciBzZXJ2aWNlIHByb3ZpZGVycyB0byBkZXNjcmliZSB0aGUgYmFzaWMgZm9ybWF0IG9mIHJlcXVlc3RzIHRvIHRoZWlyIHN5c3RlbXMgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBydW4tdGltZSBpbXBsZW1lbnRhdGlvbi48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9jc29hcC5odG1sIj5TT0FQPC9hPjwvc3Ryb25nPjxiciAvPgotU09BUCAoZm9ybWVybHkga25vd24gYXMgU2ltcGxlIE9iamVjdCBBY2Nlc3MgUHJvdG9jb2wpIGlzIGEgbGlnaHR3ZWlnaHQgcHJvdG9jb2wgZm9yIHRoZSBleGNoYW5nZSBvZiBpbmZvcm1hdGlvbiBpbiBhIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBBIFNPQVAgbWVzc2FnZSBpcyBhIHRyYW5zbWlzc2lvbiBvZiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VuZGVyIHRvIGEgcmVjZWl2ZXIuIFNPQVAgbWVzc2FnZXMgY2FuIGJlIGNvbWJpbmVkIHRvIHBlcmZvcm0gcmVxdWVzdC9yZXNwb25zZSBwYXR0ZXJucy48L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuaHRtbCI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9zdHJvbmc+PGJyIC8+Ci08L2xpPgotPGxpIGNsYXNzPSJ1bGNoaWxkbGluayI+PHN0cm9uZz48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NpbC5odG1sIj5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCk8L2E+PC9zdHJvbmc+PGJyIC8+Ci1XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXaGVuIHlvdSBkaXNjb3ZlciBXZWIgc2VydmljZXMgd2l0aCBVRERJLCB5b3UgZ28gdG8gYSBjZW50cmFsaXplZCByZWdpc3RyeS7CoCBXU0lMIGlzIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIFdlYiBzZXJ2aWNlIGRpc2NvdmVyeS7CoCBXU0lMIGFsbG93cyB5b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2NqYXhycGMuaHRtbCI+SkFYLVJQQzwvYT48L3N0cm9uZz48YnIgLz4KLUpBWC1SUEMgc3RhbmRzIGZvciBKYXZhIEFQSSBmb3IgWE1MLWJhc2VkIFJQQywgYWxzbyBrbm93biBhcyBKU1IgMTAxLiBJdCBpcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgSmF2YSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2VzIChBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0IHVzZSByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIChSUEMpIGFuZCBYTUwuIEl0IHN0YW5kYXJkaXplcyB0aGUgSmF2YSB0byBXU0RMIGFuZCBXU0RMIHRvIEphdmEgbWFwcGluZ3MsIGFuZCBwcm92aWRlcyB0aGUgY29yZSBBUElzIGZvciBkZXZlbG9waW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgSmF2YSBwbGF0Zm9ybS4gT2Z0ZW4gdXNlZCBpbiBhIGRpc3RyaWJ1dGVkIGNsaWVudC9zZXJ2ZXIgbW9kZWwsIGFuIFJQQyBtZWNoYW5pc20gZW5hYmxlcyBjbGllbnRzIHRvIGV4ZWN1dGUgcHJvY2VkdXJlcyBvbiBvdGhlciBzeXN0ZW1zLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2Nqc3IxMDkuaHRtbCI+SlNSIDEwOSBhbmQgSlNSIDkyMS0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzPC9hPjwvc3Ryb25nPjxiciAvPgotSlNSIDEwOSBhbmQgSlNSIDkyMSAoSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIFNlcnZpY2VzKSBkZWZpbmUgdGhlIHByb2dyYW1taW5nIG1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcyBpbiB0aGUgSjJFRSBlbnZpcm9ubWVudDsgbW9yZSBzcGVjaWZpY2FsbHksIGluIHRoZSBXZWIsIEVKQiwgYW5kIENsaWVudCBBcHBsaWNhdGlvbiBjb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuPC9saT4KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcwotZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lvdmVyLmh0bWwiIHRpdGxlPSJXUy1JIGlzIGFuIG9yZ2FuaXphdGlvbiBkZXNpZ25lZCB0byBwcm9tb3RlIFdlYiBzZXJ2aWNlIGludGVyb3BlcmFiaWxpdHkgYWNyb3NzIHBsYXRmb3Jtcywgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBwcm9ncmFtbWluZyBsYW5ndWFnZXMuIj5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eQotKFdTLUkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzdG9wZG93bi5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzdG9wZG93bi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzE2NzZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgdG9wLWRvd24gV2ViIHNlcnZpY2VzPC90aXRsZT4KLTxzaG9ydGRlc2M+V2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudAotYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gVG9wLWRvd24gV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nCi1hIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPnRvcC1kb3duIFdlYiBzZXJ2aWNlczxpbmRleHRlcm0+Y3JlYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT50b3AtZG93bjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPldoZW4gY3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoLCBmaXJzdCB5b3UgZGVzaWduCi10aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFdlYiBzZXJ2aWNlIGJ5IGNyZWF0aW5nIGEgV1NETCBmaWxlLiBZb3UgY2FuIGRvCi10aGlzIHVzaW5nIHRoZSBXU0RMIEVkaXRvci4gWW91IGNhbiB0aGVuIHVzZSB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCB0byBjcmVhdGUKLXRoZSBXZWIgc2VydmljZSBhbmQgc2tlbGV0b24gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzc2VzIHRvIHdoaWNoIHlvdSBjYW4gYWRkIHRoZSByZXF1aXJlZAotY29kZS48L3A+Ci08cD5BbHRob3VnaCBib3R0b20tdXAgV2ViIHNlcnZpY2UgZGV2ZWxvcG1lbnQgbWF5IGJlIGZhc3RlciBhbmQgZWFzaWVyLCBlc3BlY2lhbGx5Ci1pZiB5b3UgYXJlIG5ldyB0byBXZWIgc2VydmljZXMsIHRoZSB0b3AtZG93biBhcHByb2FjaCBpcyB0aGUgcmVjb21tZW5kZWQgd2F5Ci1vZiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlLiBCeSBjcmVhdGluZyB0aGUgV1NETCBmaWxlIGZpcnN0IHlvdSB3aWxsIHVsdGltYXRlbHkKLWhhdmUgbW9yZSBjb250cm9sIG92ZXIgdGhlIFdlYiBzZXJ2aWNlLCBhbmQgY2FuIGVsaW1pbmF0ZSBpbnRlcm9wZXJhYmlsaXR5Ci1pc3N1ZXMgdGhhdCBtYXkgYXJpc2Ugd2hlbiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBib3R0b20tdXAgbWV0aG9kLjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NidG11cC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzdG9wZG93bi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzdG9wZG93bi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTkzY2RlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQgYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gVG9wLWRvd24gV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZS4iIC8+Ci08bWV0YSBjb250ZW50PSJ0b3AtZG93biBXZWIgc2VydmljZXMsIGNyZWF0aW5nLCBXZWIgc2VydmljZXMsIHRvcC1kb3duIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0idG9wLWRvd24gV2ViIHNlcnZpY2VzLCBjcmVhdGluZywgV2ViIHNlcnZpY2VzLCB0b3AtZG93biIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzYnRtdXAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3JlYXRpbmd0b3AtZG93bndlYnNlcnZpY2VzIj48YSBuYW1lPSJjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlczwvaDE+Ci0KLQotCi08ZGl2PjxwPldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQKLWFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZwotYSBXZWIgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlLjwvcD4KLQotPHA+V2hlbiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2gsIGZpcnN0IHlvdSBkZXNpZ24KLXRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV2ViIHNlcnZpY2UgYnkgY3JlYXRpbmcgYSBXU0RMIGZpbGUuIFlvdSBjYW4gZG8KLXRoaXMgdXNpbmcgdGhlIFdTREwgRWRpdG9yLiBZb3UgY2FuIHRoZW4gdXNlIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkIHRvIGNyZWF0ZQotdGhlIFdlYiBzZXJ2aWNlIGFuZCBza2VsZXRvbiBKYXZh4oSiIGNsYXNzZXMgdG8gd2hpY2ggeW91IGNhbiBhZGQgdGhlIHJlcXVpcmVkCi1jb2RlLjwvcD4KLQotPHA+QWx0aG91Z2ggYm90dG9tLXVwIFdlYiBzZXJ2aWNlIGRldmVsb3BtZW50IG1heSBiZSBmYXN0ZXIgYW5kIGVhc2llciwgZXNwZWNpYWxseQotaWYgeW91IGFyZSBuZXcgdG8gV2ViIHNlcnZpY2VzLCB0aGUgdG9wLWRvd24gYXBwcm9hY2ggaXMgdGhlIHJlY29tbWVuZGVkIHdheQotb2YgY3JlYXRpbmcgYSBXZWIgc2VydmljZS4gQnkgY3JlYXRpbmcgdGhlIFdTREwgZmlsZSBmaXJzdCB5b3Ugd2lsbCB1bHRpbWF0ZWx5Ci1oYXZlIG1vcmUgY29udHJvbCBvdmVyIHRoZSBXZWIgc2VydmljZSwgYW5kIGNhbiBlbGltaW5hdGUgaW50ZXJvcGVyYWJpbGl0eQotaXNzdWVzIHRoYXQgbWF5IGFyaXNlIHdoZW4gY3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgYm90dG9tLXVwIG1ldGhvZC48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NpbndzYS5odG1sIiB0aXRsZT0iIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NidG11cC5odG1sIiB0aXRsZT0iV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBCb3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiBvciBlbnRlcnByaXNlIGJlYW4uIj5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW1hZ2VzL3JvbGVzLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2ltYWdlcy9yb2xlcy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZTk5ODcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW1hZ2VzL3JvbGVzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2ltYWdlcy9zb2FwdWR3cy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmI0MmY1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2ltYWdlcy9zb2FwdWR3cy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9fdy5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9fdy5jZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZWI2ZmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvX3cuY2ZzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDIzMjQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE4N2Q4ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEzOjM3IEVEVCAyMDA3DQotb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyPW9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlclxuMS4wLjMwMC5xdWFsaWZpZXINCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmZlNDFkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMzozNyBFRFQgMjAwNw0KLWx1Y2VuZT0xLjQuMTAzLnYyMDA2MDYwMQ0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4yLjAudjIwMDYwNjAxP2xvY2FsZVw9ZW4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyOWY4ZmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTM6MzcgRURUIDIwMDcNCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHRvbWNhdHNlcnYuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzcHJlZi5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHNrbHdzZGxhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2FtcGFwcGEuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jc29hcC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dGVzdHdzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvY29uY2VwdHMvY2F4aXN0b3Zlci5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90d3NiZWFuYS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5Lmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YjVkMGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMWZhYjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjMiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgICA8dG9jIGZpbGU9IndlYnNlcnZpY2VfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4LnhtbCIvPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIubWFwbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjY2OTkxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwIi8+Ci0gIDwvbmF2PgotICA8bGluaz4KLSAgICA8bWFwIGZpbGU9IndlYnNlcnZpY2VfdG9jLmRpdGFtYXAiLz4KLSAgPC9saW5rPgotPC9tYXBsaXN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOTUwNWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGh0bWwKLSAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSIoQykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3IiAvPgotPG1ldGEgbmFtZT0ic2VjdXJpdHkiIGNvbnRlbnQ9InB1YmxpYyIgLz4KLTxtZXRhIG5hbWU9IlJvYm90cyIgY29udGVudD0iaW5kZXgsZm9sbG93IiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBuYW1lPSJEQy5Gb3JtYXQiIGNvbnRlbnQ9IlhIVE1MIiAvPgotPCEtLSBBbGwgcmlnaHRzIHJlc2VydmVkLiBMaWNlbnNlZCBNYXRlcmlhbHMgUHJvcGVydHkgb2YgSUJNIC0tPgotPCEtLSBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0tPgotPCEtLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUgcmVzdHJpY3RlZCBieSAtLT4KLTwhLS0gR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLiAtLT4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImlibWRpdGEuY3NzIiAvPgotPHRpdGxlPkluZGV4PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPkluZGV4PC9oMT4KLTxhIG5hbWU9IklEWDBfNDIiIGhyZWY9IiNJRFgxXzQyIj5CPC9hPgotPGEgbmFtZT0iSURYMF80OSIgaHJlZj0iI0lEWDFfNDkiPkk8L2E+Ci08YSBuYW1lPSJJRFgwXzRBIiBocmVmPSIjSURYMV80QSI+SjwvYT4KLTxhIG5hbWU9IklEWDBfNTAiIGhyZWY9IiNJRFgxXzUwIj5QPC9hPgotPGEgbmFtZT0iSURYMF81MyIgaHJlZj0iI0lEWDFfNTMiPlM8L2E+Ci08YSBuYW1lPSJJRFgwXzU0IiBocmVmPSIjSURYMV81NCI+VDwvYT4KLTxhIG5hbWU9IklEWDBfNTUiIGhyZWY9IiNJRFgxXzU1Ij5VPC9hPgotPGEgbmFtZT0iSURYMF81NyIgaHJlZj0iI0lEWDFfNTciPlc8L2E+Ci08aHI+PC9ocj4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80MiIgaHJlZj0iI0lEWDBfNDIiPkI8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+Ym90dG9tLXVwIFdlYiBzZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwjY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyI+b3ZlcnZpZXc8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzQ5IiBocmVmPSIjSURYMF80OSI+STwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5pbnRlcm9wZXJhYmlsaXR5Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzaW92ZXIuaHRtbCNjd3Npb3ZlciI+V2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80QSIgaHJlZj0iI0lEWDBfNEEiPko8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+SkFYLVJQQwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIj5XZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY2pzcjEwOS5odG1sI2Nqc3IxMDkiPkpTUiAxMDkgSmF2YSBzcGVjaWZpY2F0aW9uPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9janNyMTA5Lmh0bWwjY2pzcjEwOSI+SlNSIDkyMSBKYXZhIHNwZWNpZmljYXRpb248L2E+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81MCIgaHJlZj0iI0lEWDBfNTAiPlA8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+cHJlZmVyZW5jZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJyZWYvcndzcHJlZi5odG1sI3J3c3ByZWYiPldlYiBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTMiIGhyZWY9IiNJRFgwXzUzIj5TPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPlNPQVAKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jc29hcC5odG1sI2Nzb2FwIj5vdmVydmlldzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTQiIGhyZWY9IiNJRFgwXzU0Ij5UPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnRvcC1kb3duIFdlYiBzZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCNjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiPmNyZWF0aW5nPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NSIgaHJlZj0iI0lEWDBfNTUiPlU8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+VURESQotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCNjd3NpbHVkIj5yZWxhdGlvbnNoaXAgd2l0aCBXU0lMPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NyIgaHJlZj0iI0lEWDBfNTciPlc8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+V2ViIHNlcnZpY2VzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzYnRtdXAuaHRtbCNjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj5ib3R0b20tdXA8L2E+Ci08L2xpPgotPGxpPmNyZWF0aW5nCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdG92ZXJ3cy5odG1sI3RvdmVyd3MiPm92ZXJ2aWV3PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R3c2ljb21wbHkuaHRtbCN0d3NpY29tcGx5Ij5pbnRlcm9wZXJhYmlsaXR5IGNvbXBsaWFuY2U8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCNjanNyMTA5Ij5KYXZhIHNwZWNpZmljYXRpb24gcmVxdWVzdHM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIj5KQVgtUlBDPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3MuaHRtbCNjd3MiPm92ZXJ2aWV3PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJyZWYvcndzcHJlZi5odG1sI3J3c3ByZWYiPnByZWZlcmVuY2VzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jc29hcC5odG1sI2Nzb2FwIj5TT0FQPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCN3ZWJzZXJ2aWNlc3N0YW5kYXJkcyI+c3RhbmRhcmRzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NpbndzYS5odG1sI2N3c2lud3NhIj50b29scyBvdmVydmlldzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5odG1sI2NyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyI+dG9wLWRvd248L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2RsLmh0bWwjY3dzZGwiPldTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InJlZi9yd3NkbC5odG1sI3J3c2RsIj5XU0RMIHJlZmVyZW5jZTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCNjd3NpbCI+V1NJTDwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eQotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lvdmVyLmh0bWwjY3dzaW92ZXIiPnRyYWZmaWMgY29tcGxpYW5jZTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0RMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzZGwuaHRtbCNjd3NkbCI+b3ZlcnZpZXc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InJlZi9yd3NkbC5odG1sI3J3c2RsIj5yZWZlcmVuY2U8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1NJCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzaWNvbXBseS5odG1sI3R3c2ljb21wbHkiPnNldHRpbmcgY29tcGxpYW5jZTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0lMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCNjd3NpbCI+b3ZlcnZpZXc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCNjd3NpbHVkIj5yZWxhdGlvbnNoaXAgd2l0aCBVRERJPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJpbmRleC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNjY3M2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzLmh0bWwjY3dzIiB0aXRsZT0iV2ViIHNlcnZpY2VzIG92ZXJ2aWV3Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic3RhbmRhcmRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCN3ZWJzZXJ2aWNlc3N0YW5kYXJkcyIgdGl0bGU9IldlYiBzZXJ2aWNlcyBzdGFuZGFyZHMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NkbC5odG1sI2N3c2RsIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldTREwgcmVmZXJlbmNlIj4KLSAgICAgIDx0b3BpYyBocmVmPSJyZWYvcndzZGwuaHRtbCNyd3NkbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgcmVmZXJlbmNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iU09BUCI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3NvYXAuaHRtbCNjc29hcCIgdGl0bGU9IlNPQVAiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJXU0lMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NpbC5odG1sI2N3c2lsIiB0aXRsZT0iV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iSkFYLVJQQyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY2pheHJwYy5odG1sI2NqYXhycGMiIHRpdGxlPSJKQVgtUlBDIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iSmF2YSBzcGVjaWZpY2F0aW9uIHJlcXVlc3RzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9janNyMTA5Lmh0bWwjY2pzcjEwOSIgdGl0bGU9IkpTUiAxMDkgYW5kIEpTUiA5MjEtIEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InRvb2xzIG92ZXJ2aWV3Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NpbndzYS5odG1sI2N3c2lud3NhIiB0aXRsZT0iVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InByZWZlcmVuY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJyZWYvcndzcHJlZi5odG1sI3J3c3ByZWYiIHRpdGxlPSJXZWIgc2VydmljZXMgcHJlZmVyZW5jZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJpbnRlcm9wZXJhYmlsaXR5IGNvbXBsaWFuY2UiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2ljb21wbHkuaHRtbCN0d3NpY29tcGx5IiB0aXRsZT0iU2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmciPgotICAgICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RvdmVyd3MuaHRtbCN0b3ZlcndzIiB0aXRsZT0iRGV2ZWxvcGluZyBXZWIgc2VydmljZXMiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idG9wLWRvd24iPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCNjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiIHRpdGxlPSJDcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJib3R0b20tdXAiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwjY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyIgdGl0bGU9IkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NETCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NkbC5odG1sI2N3c2RsIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlZmVyZW5jZSI+Ci0gICAgICA8dG9waWMgaHJlZj0icmVmL3J3c2RsLmh0bWwjcndzZGwiIHRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJTT0FQIj4KLSAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2Nzb2FwLmh0bWwjY3NvYXAiIHRpdGxlPSJTT0FQIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldTSUwiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCNjd3NpbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbGF0aW9uc2hpcCB3aXRoIFVEREkiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCNjd3NpbHVkIiB0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJVRERJIj4KLSAgICA8ZW50cnkga2V5d29yZD0icmVsYXRpb25zaGlwIHdpdGggV1NJTCI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaWx1ZC5odG1sI2N3c2lsdWQiIHRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkpBWC1SUEMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIiB0aXRsZT0iSkFYLVJQQyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJKU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbiI+Ci0gICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCNjanNyMTA5IiB0aXRsZT0iSlNSIDEwOSBhbmQgSlNSIDkyMS0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzIi8+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJKU1IgOTIxIEphdmEgc3BlY2lmaWNhdGlvbiI+Ci0gICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCNjanNyMTA5IiB0aXRsZT0iSlNSIDEwOSBhbmQgSlNSIDkyMS0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzIi8+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJwcmVmZXJlbmNlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0icmVmL3J3c3ByZWYuaHRtbCNyd3NwcmVmIiB0aXRsZT0iV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5Ij4KLSAgICA8ZW50cnkga2V5d29yZD0idHJhZmZpYyBjb21wbGlhbmNlIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3Npb3Zlci5odG1sI2N3c2lvdmVyIiB0aXRsZT0iV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImludGVyb3BlcmFiaWxpdHkiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2lvdmVyLmh0bWwjY3dzaW92ZXIiIHRpdGxlPSJXZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSAoV1MtSSkiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NJIj4KLSAgICA8ZW50cnkga2V5d29yZD0ic2V0dGluZyBjb21wbGlhbmNlIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NpY29tcGx5Lmh0bWwjdHdzaWNvbXBseSIgdGl0bGU9IlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJ0b3AtZG93biBXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5odG1sI2NyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyIgdGl0bGU9IkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJib3R0b20tdXAgV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwjY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyIgdGl0bGU9IkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotPC9pbmRleD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2NjN2FhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTkxTX01FU1NBR0VGT1JNQVRfVkFSIAotIyBOTFNfRU5DT0RJTkc9VVRGLTggCi0KLXBsdWdpbk5hbWUgICAgID0gV2ViIFNlcnZpY2VzIFVJCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAxZmFiOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjMiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgICA8dG9jIGZpbGU9IndlYnNlcnZpY2VfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4LnhtbCIvPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmJhc2UubHVjZW5lU2VhcmNoUGFydGljaXBhbnRzIj4KLSAgICAgIDxiaW5kaW5nIHBhcnRpY2lwYW50SWQ9Im9yZy5lY2xpcHNlLmhlbHAuYmFzZS54aHRtbCIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmNlYjdkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iCi0gInJlZmVyZW5jZS5kdGQiPgotPHJlZmVyZW5jZSBpZD0icndzZGwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSByZWZlcmVuY2U8L3RpdGxlPgotPHNob3J0ZGVzYz5BIFdTREwgZG9jdW1lbnQgZGVmaW5lcyBzZXJ2aWNlcyBhcyBjb2xsZWN0aW9ucyBvZiBuZXR3b3JrIGVuZHBvaW50cywKLW9yIHBvcnRzLiBJbiBXU0RMLCB0aGUgYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiBlbmRwb2ludHMgYW5kIG1lc3NhZ2VzIGlzIHNlcGFyYXRlZAotZnJvbSB0aGVpciBjb25jcmV0ZSBuZXR3b3JrIGRlcGxveW1lbnQgb3IgZGF0YSBmb3JtYXQgYmluZGluZ3MuIFRoaXMgYWxsb3dzCi10aGUgcmV1c2Ugb2YgYWJzdHJhY3QgZGVmaW5pdGlvbnM6IG1lc3NhZ2VzLCB3aGljaCBhcmUgYWJzdHJhY3QgZGVzY3JpcHRpb25zCi1vZiB0aGUgZGF0YSBiZWluZyBleGNoYW5nZWQsIGFuZCBwb3J0IHR5cGVzIHdoaWNoIGFyZSBhYnN0cmFjdCBjb2xsZWN0aW9ucwotb2Ygb3BlcmF0aW9ucy4gPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPnJlZmVyZW5jZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViCi1zZXJ2aWNlczxpbmRleHRlcm0+V1NETCByZWZlcmVuY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxyZWZib2R5PgotPHNlY3Rpb24+PHA+VGhlIGNvbmNyZXRlIHByb3RvY29sIGFuZCBkYXRhIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyCi1wb3J0IHR5cGUgY29uc3RpdHV0ZXMgYSByZXVzYWJsZSBiaW5kaW5nLiBBIHBvcnQgaXMgZGVmaW5lZCBieSBhc3NvY2lhdGluZwotYSBuZXR3b3JrIGFkZHJlc3Mgd2l0aCBhIHJldXNhYmxlIGJpbmRpbmcsIGFuZCBhIGNvbGxlY3Rpb24gb2YgcG9ydHMgZGVmaW5lCi1hIHNlcnZpY2UuIEhlbmNlLCBhIFdTREwgZG9jdW1lbnQgdXNlcyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzIGluIHRoZSBkZWZpbml0aW9uCi1vZiBuZXR3b3JrIHNlcnZpY2VzOjwvcD48dWw+Ci08bGk+IDx1aWNvbnRyb2w+VHlwZXM8L3VpY29udHJvbD46IGEgY29udGFpbmVyIGZvciBkYXRhIHR5cGUgZGVmaW5pdGlvbnMgdXNpbmcKLXNvbWUgdHlwZSBzeXN0ZW0gKHN1Y2ggYXMgWFNEKS48L2xpPgotPGxpPiA8dWljb250cm9sPk1lc3NhZ2U8L3VpY29udHJvbD46IGFuIGFic3RyYWN0LCB0eXBlZCBkZWZpbml0aW9uIG9mIHRoZQotZGF0YSBiZWluZyBjb21tdW5pY2F0ZWQuPC9saT4KLTxsaT4gPHVpY29udHJvbD5PcGVyYXRpb248L3VpY29udHJvbD46IGFuIGFic3RyYWN0IGRlc2NyaXB0aW9uIG9mIGFuIGFjdGlvbgotc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2aWNlLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+UG9ydCBUeXBlPC91aWNvbnRyb2w+OiBhbiBhYnN0cmFjdCBzZXQgb2Ygb3BlcmF0aW9ucyBzdXBwb3J0ZWQKLWJ5IG9uZSBvciBtb3JlIGVuZHBvaW50cy48L2xpPgotPGxpPiA8dWljb250cm9sPkJpbmRpbmc8L3VpY29udHJvbD46IGEgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb24KLWZvciBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBpcyB1c3VhbGx5IFNPQVAgYW5kIHRoZSBlbmNvZGluZyBhbmQKLWRhdGEgZm9ybWF0dGluZyByZWd1bGF0aW9ucyB1c2VkIChhbHNvIGtub3duIGFzIHRoZSBzdHlsZSkgaXMgdXN1YWxseSBsaXRlcmFsCi0odGhpcyBpbmNsdWRlcyBkb2N1bWVudC9saXRlcmFsLCBhbmQgc29tZXRpbWVzIHJwYy9saXRlcmFsKS48L2xpPgotPGxpPiA8dWljb250cm9sPlBvcnQ8L3VpY29udHJvbD46IGEgc2luZ2xlIGVuZHBvaW50IGRlZmluZWQgYXMgYSBjb21iaW5hdGlvbgotb2YgYSBiaW5kaW5nIGFuZCBhIG5ldHdvcmsgYWRkcmVzcy48L2xpPgotPGxpPiA8dWljb250cm9sPlNlcnZpY2U8L3VpY29udHJvbD46IGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIGVuZHBvaW50cy48L2xpPgotPC91bD48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXU0RMLCByZWZlciB0byAgPC9wPjxwPjx4cmVmIGZvcm1hdD0iaHRtbCIKLWhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHNjb3BlPSJleHRlcm5hbCI+d3d3LnczLm9yZy9UUi93c2RsPC94cmVmPjwvcD48cD5UaGUKLXZhcmlvdXMgV1NETCBlbGVtZW50cyBjYW4gYmUgc3RydWN0dXJlZCBpbiBtYW55IHdheXMuIEl0IGNhbiBiZSBpbiBvbmUgc2luZ2xlCi1XU0RMIGZpbGUgb3IgaW4gbXVsaXRwbGUgV1NETCBmaWxlcy48L3A+PC9zZWN0aW9uPgotPC9yZWZib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhIgotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvcmVmZXJlbmNlPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAwNWYxZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSByZWZlcmVuY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBXU0RMIGRvY3VtZW50IGRlZmluZXMgc2VydmljZXMgYXMgY29sbGVjdGlvbnMgb2YgbmV0d29yayBlbmRwb2ludHMsIG9yIHBvcnRzLiBJbiBXU0RMLCB0aGUgYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiBlbmRwb2ludHMgYW5kIG1lc3NhZ2VzIGlzIHNlcGFyYXRlZCBmcm9tIHRoZWlyIGNvbmNyZXRlIG5ldHdvcmsgZGVwbG95bWVudCBvciBkYXRhIGZvcm1hdCBiaW5kaW5ncy4gVGhpcyBhbGxvd3MgdGhlIHJldXNlIG9mIGFic3RyYWN0IGRlZmluaXRpb25zOiBtZXNzYWdlcywgd2hpY2ggYXJlIGFic3RyYWN0IGRlc2NyaXB0aW9ucyBvZiB0aGUgZGF0YSBiZWluZyBleGNoYW5nZWQsIGFuZCBwb3J0IHR5cGVzIHdoaWNoIGFyZSBhYnN0cmFjdCBjb2xsZWN0aW9ucyBvZiBvcGVyYXRpb25zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIFdTREwgZG9jdW1lbnQgZGVmaW5lcyBzZXJ2aWNlcyBhcyBjb2xsZWN0aW9ucyBvZiBuZXR3b3JrIGVuZHBvaW50cywgb3IgcG9ydHMuIEluIFdTREwsIHRoZSBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGVuZHBvaW50cyBhbmQgbWVzc2FnZXMgaXMgc2VwYXJhdGVkIGZyb20gdGhlaXIgY29uY3JldGUgbmV0d29yayBkZXBsb3ltZW50IG9yIGRhdGEgZm9ybWF0IGJpbmRpbmdzLiBUaGlzIGFsbG93cyB0aGUgcmV1c2Ugb2YgYWJzdHJhY3QgZGVmaW5pdGlvbnM6IG1lc3NhZ2VzLCB3aGljaCBhcmUgYWJzdHJhY3QgZGVzY3JpcHRpb25zIG9mIHRoZSBkYXRhIGJlaW5nIGV4Y2hhbmdlZCwgYW5kIHBvcnQgdHlwZXMgd2hpY2ggYXJlIGFic3RyYWN0IGNvbGxlY3Rpb25zIG9mIG9wZXJhdGlvbnMuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgcmVmZXJlbmNlLCBXZWIgc2VydmljZXMsIFdTREwgcmVmZXJlbmNlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgcmVmZXJlbmNlLCBXZWIgc2VydmljZXMsIFdTREwgcmVmZXJlbmNlIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0icndzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0icndzZGwiPjxhIG5hbWU9InJ3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZTwvaDE+Ci0KLQotCi08ZGl2PjxwPkEgV1NETCBkb2N1bWVudCBkZWZpbmVzIHNlcnZpY2VzIGFzIGNvbGxlY3Rpb25zIG9mIG5ldHdvcmsgZW5kcG9pbnRzLAotb3IgcG9ydHMuIEluIFdTREwsIHRoZSBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGVuZHBvaW50cyBhbmQgbWVzc2FnZXMgaXMgc2VwYXJhdGVkCi1mcm9tIHRoZWlyIGNvbmNyZXRlIG5ldHdvcmsgZGVwbG95bWVudCBvciBkYXRhIGZvcm1hdCBiaW5kaW5ncy4gVGhpcyBhbGxvd3MKLXRoZSByZXVzZSBvZiBhYnN0cmFjdCBkZWZpbml0aW9uczogbWVzc2FnZXMsIHdoaWNoIGFyZSBhYnN0cmFjdCBkZXNjcmlwdGlvbnMKLW9mIHRoZSBkYXRhIGJlaW5nIGV4Y2hhbmdlZCwgYW5kIHBvcnQgdHlwZXMgd2hpY2ggYXJlIGFic3RyYWN0IGNvbGxlY3Rpb25zCi1vZiBvcGVyYXRpb25zLiA8L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgZm9yIGEgcGFydGljdWxhcgotcG9ydCB0eXBlIGNvbnN0aXR1dGVzIGEgcmV1c2FibGUgYmluZGluZy4gQSBwb3J0IGlzIGRlZmluZWQgYnkgYXNzb2NpYXRpbmcKLWEgbmV0d29yayBhZGRyZXNzIHdpdGggYSByZXVzYWJsZSBiaW5kaW5nLCBhbmQgYSBjb2xsZWN0aW9uIG9mIHBvcnRzIGRlZmluZQotYSBzZXJ2aWNlLiBIZW5jZSwgYSBXU0RMIGRvY3VtZW50IHVzZXMgdGhlIGZvbGxvd2luZyBlbGVtZW50cyBpbiB0aGUgZGVmaW5pdGlvbgotb2YgbmV0d29yayBzZXJ2aWNlczo8L3A+Ci08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlR5cGVzPC9zcGFuPjogYSBjb250YWluZXIgZm9yIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB1c2luZwotc29tZSB0eXBlIHN5c3RlbSAoc3VjaCBhcyBYU0QpLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TWVzc2FnZTwvc3Bhbj46IGFuIGFic3RyYWN0LCB0eXBlZCBkZWZpbml0aW9uIG9mIHRoZQotZGF0YSBiZWluZyBjb21tdW5pY2F0ZWQuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PcGVyYXRpb248L3NwYW4+OiBhbiBhYnN0cmFjdCBkZXNjcmlwdGlvbiBvZiBhbiBhY3Rpb24KLXN1cHBvcnRlZCBieSB0aGUgc2VydmljZS48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlBvcnQgVHlwZTwvc3Bhbj46IGFuIGFic3RyYWN0IHNldCBvZiBvcGVyYXRpb25zIHN1cHBvcnRlZAotYnkgb25lIG9yIG1vcmUgZW5kcG9pbnRzLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QmluZGluZzwvc3Bhbj46IGEgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb24KLWZvciBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBpcyB1c3VhbGx5IFNPQVAgYW5kIHRoZSBlbmNvZGluZyBhbmQKLWRhdGEgZm9ybWF0dGluZyByZWd1bGF0aW9ucyB1c2VkIChhbHNvIGtub3duIGFzIHRoZSBzdHlsZSkgaXMgdXN1YWxseSBsaXRlcmFsCi0odGhpcyBpbmNsdWRlcyBkb2N1bWVudC9saXRlcmFsLCBhbmQgc29tZXRpbWVzIHJwYy9saXRlcmFsKS48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlBvcnQ8L3NwYW4+OiBhIHNpbmdsZSBlbmRwb2ludCBkZWZpbmVkIGFzIGEgY29tYmluYXRpb24KLW9mIGEgYmluZGluZyBhbmQgYSBuZXR3b3JrIGFkZHJlc3MuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TZXJ2aWNlPC9zcGFuPjogYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgZW5kcG9pbnRzLjwvbGk+Ci0KLTwvdWw+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXU0RMLCByZWZlciB0byAgPC9wPgotPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy53My5vcmcvVFIvd3NkbDwvYT48L3A+Ci08cD5UaGUKLXZhcmlvdXMgV1NETCBlbGVtZW50cyBjYW4gYmUgc3RydWN0dXJlZCBpbiBtYW55IHdheXMuIEl0IGNhbiBiZSBpbiBvbmUgc2luZ2xlCi1XU0RMIGZpbGUgb3IgaW4gbXVsaXRwbGUgV1NETCBmaWxlcy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGwuaHRtbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgaXMgYSBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uIGZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yIHNlcnZpY2UgcHJvdmlkZXJzIHRvIGRlc2NyaWJlIHRoZSBiYXNpYyBmb3JtYXQgb2YgcmVxdWVzdHMgdG8gdGhlaXIgc3lzdGVtcyByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIHJ1bi10aW1lIGltcGxlbWVudGF0aW9uLiI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbC5odG1sIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24gZm9yIGRlc2NyaWJpbmcgbmV0d29ya2VkLCBYTUwtYmFzZWQgc2VydmljZXMuIEl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3Igc2VydmljZSBwcm92aWRlcnMgdG8gZGVzY3JpYmUgdGhlIGJhc2ljIGZvcm1hdCBvZiByZXF1ZXN0cyB0byB0aGVpciBzeXN0ZW1zIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCI+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NwcmVmLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzcHJlZi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2U4ZjM5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NwcmVmLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iCi0gInJlZmVyZW5jZS5kdGQiPgotPHJlZmVyZW5jZSBpZD0icndzcHJlZiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgc2VydmljZXMgcHJlZmVyZW5jZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5CZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUKLXRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+cHJlZmVyZW5jZXM8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnByZWZlcmVuY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxyZWZib2R5PgotPHNlY3Rpb24+PHAgaWQ9InNldHByZWZtYWluIj5UbyBzZXQgYW55IG9mIHRoZSBXZWIgc2VydmljZXMgcHJlZmVyZW5jZXMsIGZvbGxvdwotdGhlc2Ugc3RlcHM6PG9sPgotPGxpPkNsaWNrICA8dWljb250cm9sPldpbmRvdyA+IFByZWZlcmVuY2VzPC91aWNvbnRyb2w+IHRvIG9wZW4gdGhlIFByZWZlcmVuY2VzCi1ub3RlYm9vay48L2xpPgotPGxpPkV4cGFuZCAgPHVpY29udHJvbD5XZWIgc2VydmljZXM8L3VpY29udHJvbD4gb3IgPHVpY29udHJvbD5XZWIgYW5kIFhNTDwvdWljb250cm9sPiwKLWFuZCBjbGljayB0aGUgcHJlZmVyZW5jZSBjYXRlZ29yeSB0aGF0IHlvdSB3YW50IHRvIHNldDwvbGk+Ci08bGk+U2VsZWN0IHRoZSBjaGVjayBib3hlcyB0aGF0IHlvdSB3YW50IHRvIHNldCBhcyB0aGUgZGVmYXVsdCB3aGVuIGNyZWF0aW5nCi15b3VyIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+Q2xpY2sgIDx1aWNvbnRyb2w+T0s8L3VpY29udHJvbD4gdG8gYXBwbHkgdGhlIGNoYW5nZXMgYW5kIGNsb3NlIHRoZSBQcmVmZXJlbmNlcwotbm90ZWJvb2suPC9saT4KLTwvb2w+SWYgeW91IHJlcXVpcmUgbW9yZSBpbmZvcm1hdGlvbiBvbiBhbnkgb2YgdGhlIG9wdGlvbnMsIHNlbGVjdCB0aGUgb3B0aW9uCi1hbmQgcHJlc3MgIDx1aWNvbnRyb2w+RjE8L3VpY29udHJvbD4uPC9wPjxwPldlYiBzZXJ2aWNlcyB0b29scyBlbmFibGUgeW91Ci10byBkZWZpbmUgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlczo8L3A+PGRsPjxkbGVudHJ5IGlkPSJheGlzZW1pdHRlcnByZWYiPgotPGR0PkF4aXMgRW1pdHRlcjwvZHQ+Ci08ZGQ+VGhpcyBwYWdlIGFsbG93cyB5b3UgdG8gc2V0IHRoZSBmb2xsb3dpbmcgcHJlZmVyZW5jZXMgdXNlZCB3aGVuIGNyZWF0aW5nCi1vciBjb25zdW1pbmcgQXhpcyBXZWIgc2VydmljZXMuPC9kZD4KLTxkZD48Yj5XU0RMMkphdmE8L2I+PHVsPgotPGxpPkdlbmVyYXRlIGNvZGUgZm9yIGFsbCBlbGVtZW50czogQnkgZGVmYXVsdCwgV1NETDJKYXZhIG9ubHkgZ2VuZXJhdGVzIGNvZGUKLWZvciB0aG9zZSBlbGVtZW50cyBpbiB0aGUgV1NETCBmaWxlIHRoYXQgYXJlIHJlZmVyZW5jZWQuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1yZWdhcmRpbmcgaG93IHJlZmVyZW5jaW5nIHdvcmtzIHJlZmVyIHRvIHRoZSBBeGlzIHJlZmVyZW5jZSBndWlkZTogPHhyZWYgaHJlZj0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpcy9qYXZhL3JlZmVyZW5jZS5odG1sIgotc2NvcGU9ImV4dGVybmFsIj48L3hyZWY+PC9saT4KLTxsaT5FbWl0cyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YWRhdGE6IElmIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24KLVdTREwySmF2YSB3aWxsIGNyZWF0ZSBhIHNlcGFyYXRlIGhlbHBlciBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZSBtZXRhZGF0YSByYXRoZXIKLXRoYW4gaW5jbHVkaW5nIGl0IGluIHRoZSBza2VsZXRvbi48L2xpPgotPGxpPlByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciB3cmFwcGVkIFhNTCBhcnJheSB0eXBlczoKLVRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIG1hcCB0aGlzIFhNTCBjb25zdHJ1Y3Q6IDxjb2RlYmxvY2s+Jmx0O2VsZW1lbnQgbmFtZT0iYXJyYXkiPgotICZsdDtjb21wbGV4VHlwZT4KLSAgJmx0O3NlcXVlbmNlPgotICAgJmx0O2VsZW1lbnQgbmFtZT0iaXRlbSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICZsdDsvc2VxdWVuY2U+Ci0gJmx0Oy9jb21wbGV4VHlwZT4KLSZsdDsvZWxlbWVudD48L2NvZGVibG9jaz50byBhIEphdmEgU3RyaW5nIGFycmF5IChTdHJpbmdbXSkuIElmIHlvdSB3b3VsZCByYXRoZXIKLWEgc3BlY2lmaWMgSmF2YUJlYW4gY2xhc3MgKEFycmF5T2ZTdHJpbmcpIGJlIGdlbmVyYXRlZCBmb3IgdGhlc2UgdHlwZXMgb2YKLXNjaGVtYXMsIHNlbGVjdCB0aGlzIG9wdGlvbi4gPC9saT4KLTxsaT5BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQ6IFRoaXMgaW5kaWNhdGVzIGhvdyB0byBkZXBsb3kgdGhlIHNlcnZlciBpbXBsZW1lbnRhdGlvbi4KLUFwcGxpY2F0aW9uIHVzZXMgb25lIGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYWxsIHJlcXVlc3RzLgotUmVxdWVzdCBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCByZXF1ZXN0LgotU2Vzc2lvbiBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCBzZXNzaW9uLjwvbGk+Ci08bGk+VGltZW91dCBpbiBzZWNvbmRzOiBUaGUgZGVmYXVsdCBpcyA0NS4gVXNlIC0xIHRvIGRpc2FibGUgdGhlIHRpbWVvdXQuPC9saT4KLTwvdWw+PC9kZD4KLTxkZD48Yj5KYXZhMldTREw8L2I+PHVsPgotPGxpPkxvb2sgZm9yIGFsbG93ZWQgbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3M6IElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwKLXRoZSBKYXZhMldTREwgcGFyc2VyIHdpbGwgbG9vayBpbnRvIGV4dGVuZGVkIGNsYXNzZXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0Ci1vZiBtZXRob2RzIHRvIGV4cG9ydCBpbnRvIHRoZSBXU0RMIGZpbGUuIDwvbGk+Ci08bGk+QW5hbHl6ZSB0aGUgc2VydmljZSBjbGFzcyBmb3IgY29tcGxpYW5jZSB0byBKQVgtUlBDIGJlZm9yZSBnZW5lcmF0aW5nCi1jb2RlOiBJZiBzZWxlY3RlZCwgdGhlIHRvb2xzIHdpbGwgZXhhbWluZSB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIGFuZCBpdHMgdmFsdWUKLXR5cGVzIHRvIGRldGVybWluZSBpZiBpdCBzYXRpc2ZpZXMgaW1wb3J0YW50IHJlcXVpcmVtZW50cyBvZiB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLjwvbGk+Ci08L3VsPjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnkgaWQ9InBvcHVwZGlhbG9nc2VsZWN0Ij4KLTxkdD5Qb3B1cCBEaWFsb2cgU2VsZWN0aW9uPC9kdD4KLTxkZD5UaGUgRGlhbG9ncyBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIGRldGVybWluZSB3aGljaCBkaWFsb2cgYm94ZXMgdGhhdAoteW91IHdhbnQgdG8gc2VlIHdoZW4gcnVubmluZyBwb3B1cCBhY3Rpb25zLiBJZiB5b3UgaGF2ZSBkaXNhYmxlZCBhbnkgb2YgdGhlCi1kaWFsb2dzIGJ5IHNlbGVjdGluZyAiRG8gbm90IHNob3cgdGhpcyBkaWFsb2cgYWdhaW4iIG9uIHRoZSBmaXJzdCBwYWdlIG9mCi1hIFdlYiBzZXJ2aWNlcyB3aXphcmQsIHlvdSBjYW4gdW5kbyB5b3VyIGNoYW5nZSBieSBjbGVhcmluZyB0aGUgY2hlY2sgYm94Ci1iZXNpZGUgdGhlIGRpYWxvZyB0aGF0IHlvdSBoYXZlIGNob3NlbiB0byBoaWRlLjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnkgaWQ9IndzaWNvbXBsaWFuY2UiPgotPGR0PlByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbjwvZHQ+Ci08ZGQ+VGhlIFdTLUkgQ29tcGxpYW5jZSBwcmVmZXJlbmNlcyBhbGxvdyB5b3UgdG8gc2VsZWN0IHlvdXIgbGV2ZWwgb2YgY29tcGxpYW5jZQotd2l0aCB0aGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgKFNTQlApIGFuZCBXUy1JIEF0dGFjaGVtZW50IFByb2ZpbGUKLShBUCkuIE5vdGU6IGlmIHlvdSBjaGFuZ2UgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSB3aGlsZSBXUy1JIGluY29tcGxpYW5jZXMKLWFyZSBsaXN0ZWQgaW4gdGhlIFRhc2sgdmlldywgdGhlIFRhc2sgdmlldyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQuCi1UaGUgd29ya3NwYWNlIG11c3QgYmUgcmV2YWxpZGF0ZWQgYmVmb3JlIHRoZSB3YXJuaW5ncyB3aWxsIGJlIHJlbW92ZWQgZnJvbQotdGhlIFRhc2sgdmlldy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1MtSSwgcmVmZXIgdG86IDx4cmVmIGhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmcvIgotc2NvcGU9ImV4dGVybmFsIj48L3hyZWY+PC9kZD4KLTxkZD5Gb3IgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcywgeW91IGNhbiBjaG9vc2Ugd2hldGhlciBvciBub3QgV1NETCBmaWxlcyBjb25zdW1lZAotYnkgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGFyZSB2YWxpZGF0ZWQsIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGUgV1NETCB2YWxpZGF0aW9uCi1tdXN0IGNvbXBsZXRlIGJlZm9yZSB0aGUgd2l6YXJkIHdpbGwgbW92ZSB0byB0aGUgbmV4dCBzdGVwLjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnkgaWQ9InByb2p0b3BvbG9neSI+Ci08ZHQ+UHJvamVjdCBUb3BvbG9neTwvZHQ+Ci08ZGQ+VGhlIFByb2plY3QgVG9wb2xvZ3kgcHJlZmVyZW5jZXMgYWxsb3cgeW91IHRvOjx1bD4KLTxsaT5TZWxlY3QgdGhlIGRlZmF1bHQgY2xpZW50IHByb2plY3QgdHlwZSB0aGF0IHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyB3aWxsCi1jcmVhdGUgd2hlbiBnZW5lcmF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50LiBZb3UgY2FuIGFsc28gc2V0IHRoZSBvcmRlciBpbgotd2hpY2ggdGhlIGNsaWVudCBwcm9qZWN0IHR5cGVzIHdpbGwgYmUgbGlzdGVkIGluIHRoZSB3aXphcmQuIE5vdGUgdGhhdCB0aGlzCi1zZWxlY3Rpb24gaXMgc2ltcGx5IGEgZGVmYXVsdCBhbmQgYW4gYWx0ZXJuYXRlIHByb2plY3QgdHlwZSBjYW4gYmUgc2VsZWN0ZWQKLWluIHRoZSB3aXphcmQuPC9saT4KLTxsaT5TZWxlY3Qgd2hldGhlciB5b3Ugd2FudCB0byBnZW5lcmF0ZSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRoZSBXZWIgc2VydmljZQotY2xpZW50IGluIHRoZSBzYW1lIEVBUiBwcm9qZWN0IG9yIGRpZmZlcmVudCBFQVIgcHJvamVjdHMuIEdlbmVyYXRpbmcgdGhlIHNlcnZpY2UKLWFuZCBjbGllbnQgaW50byBkaWZmZXJlbnQgRUFSIHByb2plY3RzIGNhbiByZWR1Y2UgdGhlIGNoYW5jZSBvZiBjb25mbGljdHMKLXRoYXQgb2NjdXIgd2hlbiBib3RoIGV4aXN0IGluIGEgc2luZ2xlIEVBUiBwcm9qZWN0LCBidXQgdXNlcyBtb3JlIHN5c3RlbSByZXNvdXJjZXMuPC9saT4KLTwvdWw+PC9kZD4KLTwvZGxlbnRyeT48ZGxlbnRyeSBpZD0icmVzb3VyY2VtYW5hZ2VtZW50Ij4KLTxkdD5SZXNvdXJjZSBNYW5hZ2VtZW50PC9kdD4KLTxkZD5UaGUgUmVzb3VyY2UgTWFuYWdlbWVudCBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIGRldGVybWluZSB0aGUgZmlsZSBhbmQKLWZvbGRlciBjcmVhdGlvbiBhbmQgb3ZlcndyaXRpbmcgZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZwoteW91ciBXZWIgc2VydmljZS48dWw+Ci08bGk+T3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZzogc2VsZWN0aW5nIHRoaXMgd2lsbCBhbGxvdyB0aGUgd2l6YXJkcwotdG8gb3ZlcndyaXRlIGFueSBleGlzdGluZyBmaWxlcyBpbiB0aGUgd29ya3NwYWNlIHdpdGhvdXQgcHJvbXB0aW5nLiBJZiBpdAotaXMgbm90IHNlbGVjdGVkIHlvdSB3aWxsIGJlIHByb21wdGVkIGVhY2ggdGltZSBhIGZpbGUgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4uPC9saT4KLTxsaT5DcmVhdGUgZm9sZGVycyB3aGVuIG5lY2Vzc2FyeTogc2VsZWN0aW5nIHRoaXMgZW5hYmxlcyB0aGUgd2l6YXJkcyB0byBjcmVhdGUKLWFueSByZXF1aXJlZCBmb2xkZXJzLjwvbGk+Ci08bGk+Q2hlY2sgb3V0IGZpbGVzIHdpdGhvdXQgd2FybmluZzogc2VsZWN0IHRvIGNoZWNrIG91dCBmaWxlcyB3aXRob3V0IHJlY2VpdmluZwotYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24uPC9saT4KLTxsaT5NZXJnZSBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZTogdGhpcyBjaGVjayBib3ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSBJZiB0aGlzIGNoZWNrIGJveCBpcyBlbmFibGVkLCB3aGVuIGEgc2tlbGV0b24gZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkKLWV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLCB0aGUgbmV3bHkgZ2VuZXJhdGVkIHNrZWxldG9uIGZpbGUgd2lsbCBtZXJnZSB3aXRoCi10aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZS4gIEVuYWJsZSB0aGlzIHRvIHByZXNlcnZlIGNvZGUgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5Ci1tb2RpZmllZCBpbiB0aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZXMuPHA+Tm90ZSB0aGF0IHdoZW4gdGhpcyBwcmVmZXJlbmNlCi1pcyBlbmFibGVkLCBpZiB5b3UgY2hhbmdlIHRoZSByZXR1cm4gdHlwZSBvZiBhbiBpbnRlcmZhY2UsIHRoZSByZXN1bHRpbmcgc2tlbGV0b24KLWZpbGUgd2lsbCBoYXZlIGEgbWV0aG9kIHJldHVybmluZyB0aGUgdHlwZSBhcyBkZWZpbmVkIGluIHRoZSBuZXcgaW50ZXJmYWNlCi1idXQgd291bGQgaGF2ZSBhIG1ldGhvZCBib2R5IGZyb20gdGhlIG9yaWdpbmFsIHNrZWxldG9uIGZpbGUgKHdoaWNoIHdvdWxkCi1iZSByZXR1cm5pbmcgYSBkaWZmZXJlbnQgdHlwZSkuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGNvbXBpbGF0aW9uIGVycm9yCi10aGF0IHRoZSB5b3Ugd2lsbCBoYXZlIHRvIGNvcnJlY3QgbWFudWFsbHkuPC9wPjwvbGk+Ci08L3VsPjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnkgaWQ9InNjZW5hcmlvZGVmYXVsdHMiPgotPGR0PlNjZW5hcmlvIERlZmF1bHRzPC9kdD4KLTxkZD5UaGUgU2NlbmFyaW8gRGVmYXVsdHMgcHJlZmVyZW5jZXMgZW5hYmxlIHlvdSB0byBzZXQgdGhlIGZvbGxvd2luZyBzY2VuYXJpbwotZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlOjx1bD4KLTxsaT53aGljaCB0eXBlIG9mIFdlYiBzZXJ2aWNlIGFuZCBjbGllbnQgeW91IHdhbnQgdG8gYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC48L2xpPgotPGxpPndoaWNoIHBoYXNlcyBvZiB0aGUgV2ViIHNlcnZpY2UgbGlmZWN5Y2xlIHlvdSB3YW50IHRvIGNvbXBsZXRlIGluIHRoZQotd2l6YXJkLjwvbGk+Ci08bGk+aWYgeW91IHdhbnQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBsYXVuY2ggYnkgZGVmYXVsdCBzbyB0aGF0IHlvdQotY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9saT4KLTxsaT5pZiB5b3Ugd2FudCB0aGUgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIHJvdXRlZCB0aHJvdWdoIGEgVENQL0lQIG1vbml0b3IKLXNvIHRoYXQgeW91IGNhbiBtb25pdG9yIHRoZSBTT0FQIHBhY2tldHMgYW5kIG9wdGlvbmFsbHkgdGVzdCB0aGVtIGZvciBXUy1JCi1jb21wbGlhbmNlLjwvbGk+Ci08L3VsPk5vdGUgdGhhdCBhbGwgdGhlc2UgZGVmYXVsdHMgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIHdpemFyZC48L2RkPgotPC9kbGVudHJ5PjxkbGVudHJ5IGlkPSJzZXJ2ZXJhbmRydW50aW1lIj4KLTxkdD5TZXJ2ZXIgYW5kIFJ1bnRpbWU8L2R0PgotPGRkPlNlbGVjdCB0aGUgc2VydmVyLCBXZWIgc2VydmljZSBydW4tdGltZSBlbnZpcm9ubWVudCwgYW5kIEoyRUUgdmVyc2lvbgotdGhhdCB5b3Ugd2FudCBzZWxlY3RlZCBieSBkZWZhdWx0IGluIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkLiBOb3RlIHRoYXQgYWxsCi10aGVzZSBkZWZhdWx0cyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgd2l6YXJkLjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnkgaWQ9InRlc3RmYWNpbGl0eWRlZmF1bHRzIj4KLTxkdD5UZXN0IEZhY2lsaXR5IERlZmF1bHRzPC9kdD4KLTxkZD5jYW4gc2VsZWN0IHdoZXRoZXIgdG8gaGF2ZSB0aGUgd2l6YXJkIGF1dG9tYXRpY2FsbHkgbGF1bmNoIGEgdGVzdCBmYWNpbGl0eSwKLWFuZCB5b3UgY2FuIHNlbGVjdCB5b3VyIHByZWZlcnJlZCB0eXBlIG9mIHRlc3QgZmFjaWxpdHk8L2RkPgotPC9kbGVudHJ5PjxkbGVudHJ5IGlkPSJ3c2RsZmlsZXMiPgotPGR0PldTREwgZmlsZXM8L2R0PgotPGRkPldoZW4gY3JlYXRpbmcgYSBXU0RMIGZpbGUgaW4gdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIHNldCB0aGUgZGVmYXVsdAotdGFyZ2V0IG5hbWVzcGFjZS4gSWYgeW91IGRvIG5vdCBzZWxlY3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0LCB5b3VyIFdTREwgZmlsZQotd2lsbCBoYXZlIGh0dHA6Ly90ZW1wdXJpLm9yZyBhcyBpdHMgdGFyZ2V0IG5hbWVzcGFjZS48L2RkPgotPC9kbGVudHJ5PjwvZGw+PC9zZWN0aW9uPgotPC9yZWZib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW53c2EuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvcmVmZXJlbmNlPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c3ByZWYuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NwcmVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2Yjg0ZjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c3ByZWYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJCZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUgdGhlIHdvcmtiZW5jaCBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGJ5IHNldHRpbmcgYSB2YXJpZXR5IG9mIHByZWZlcmVuY2VzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJCZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUgdGhlIHdvcmtiZW5jaCBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGJ5IHNldHRpbmcgYSB2YXJpZXR5IG9mIHByZWZlcmVuY2VzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9InByZWZlcmVuY2VzLCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJwcmVmZXJlbmNlcywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJyd3NwcmVmIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJyd3NwcmVmIj48YSBuYW1lPSJyd3NwcmVmIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgc2VydmljZXMgcHJlZmVyZW5jZXM8L2gxPgotCi0KLQotPGRpdj48cD5CZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUKLXRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9InAiIGlkPSJyd3NwcmVmX19zZXRwcmVmbWFpbiI+PGEgbmFtZT0icndzcHJlZl9fc2V0cHJlZm1haW4iPjwhLS0gLS0+PC9hPlRvIHNldCBhbnkgb2YgdGhlIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcywgZm9sbG93Ci10aGVzZSBzdGVwczo8b2w+Ci08bGk+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldpbmRvdyAmZ3Q7IFByZWZlcmVuY2VzPC9zcGFuPiB0byBvcGVuIHRoZSBQcmVmZXJlbmNlcwotbm90ZWJvb2suPC9saT4KLQotPGxpPkV4cGFuZCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIHNlcnZpY2VzPC9zcGFuPiBvciA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgYW5kIFhNTDwvc3Bhbj4sCi1hbmQgY2xpY2sgdGhlIHByZWZlcmVuY2UgY2F0ZWdvcnkgdGhhdCB5b3Ugd2FudCB0byBzZXQ8L2xpPgotCi08bGk+U2VsZWN0IHRoZSBjaGVjayBib3hlcyB0aGF0IHlvdSB3YW50IHRvIHNldCBhcyB0aGUgZGVmYXVsdCB3aGVuIGNyZWF0aW5nCi15b3VyIFdlYiBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5DbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T0s8L3NwYW4+IHRvIGFwcGx5IHRoZSBjaGFuZ2VzIGFuZCBjbG9zZSB0aGUgUHJlZmVyZW5jZXMKLW5vdGVib29rLjwvbGk+Ci0KLTwvb2w+Ci1JZiB5b3UgcmVxdWlyZSBtb3JlIGluZm9ybWF0aW9uIG9uIGFueSBvZiB0aGUgb3B0aW9ucywgc2VsZWN0IHRoZSBvcHRpb24KLWFuZCBwcmVzcyAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RjE8L3NwYW4+LjwvZGl2PgotPHA+V2ViIHNlcnZpY2VzIHRvb2xzIGVuYWJsZSB5b3UKLXRvIGRlZmluZSB0aGUgZm9sbG93aW5nIHByZWZlcmVuY2VzOjwvcD4KLTxkbD4KLTxkdCBjbGFzcz0iZGx0ZXJtIj48YSBuYW1lPSJyd3NwcmVmX19heGlzZW1pdHRlcnByZWYiPjwhLS0gLS0+PC9hPkF4aXMgRW1pdHRlcjwvZHQ+Ci0KLTxkZD5UaGlzIHBhZ2UgYWxsb3dzIHlvdSB0byBzZXQgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlcyB1c2VkIHdoZW4gY3JlYXRpbmcKLW9yIGNvbnN1bWluZyBBeGlzIFdlYiBzZXJ2aWNlcy48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj48c3Ryb25nPldTREwySmF2YTwvc3Ryb25nPjx1bD4KLTxsaT5HZW5lcmF0ZSBjb2RlIGZvciBhbGwgZWxlbWVudHM6IEJ5IGRlZmF1bHQsIFdTREwySmF2YSBvbmx5IGdlbmVyYXRlcyBjb2RlCi1mb3IgdGhvc2UgZWxlbWVudHMgaW4gdGhlIFdTREwgZmlsZSB0aGF0IGFyZSByZWZlcmVuY2VkLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotcmVnYXJkaW5nIGhvdyByZWZlcmVuY2luZyB3b3JrcyByZWZlciB0byB0aGUgQXhpcyByZWZlcmVuY2UgZ3VpZGU6IDxhIGhyZWY9Imh0dHA6Ly93cy5hcGFjaGUub3JnL2F4aXMvamF2YS9yZWZlcmVuY2UuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93cy5hcGFjaGUub3JnL2F4aXMvamF2YS9yZWZlcmVuY2UuaHRtbDwvYT48L2xpPgotCi08bGk+RW1pdHMgc2VwYXJhdGUgSGVscGVyIGNsYXNzZXMgZm9yIG1ldGFkYXRhOiBJZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uCi1XU0RMMkphdmEgd2lsbCBjcmVhdGUgYSBzZXBhcmF0ZSBoZWxwZXIgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgbWV0YWRhdGEgcmF0aGVyCi10aGFuIGluY2x1ZGluZyBpdCBpbiB0aGUgc2tlbGV0b24uPC9saT4KLQotPGxpPlByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciB3cmFwcGVkIFhNTCBhcnJheSB0eXBlczoKLVRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIG1hcCB0aGlzIFhNTCBjb25zdHJ1Y3Q6IDxwcmU+Jmx0O2VsZW1lbnQgbmFtZT0iYXJyYXkiJmd0OwotICZsdDtjb21wbGV4VHlwZSZndDsKLSAgJmx0O3NlcXVlbmNlJmd0OwotICAgJmx0O2VsZW1lbnQgbmFtZT0iaXRlbSIgdHlwZT0ieHM6c3RyaW5nIi8mZ3Q7Ci0gICZsdDsvc2VxdWVuY2UmZ3Q7Ci0gJmx0Oy9jb21wbGV4VHlwZSZndDsKLSZsdDsvZWxlbWVudCZndDs8L3ByZT4KLXRvIGEgSmF2YSBTdHJpbmcgYXJyYXkgKFN0cmluZ1tdKS4gSWYgeW91IHdvdWxkIHJhdGhlcgotYSBzcGVjaWZpYyBKYXZhQmVhbiBjbGFzcyAoQXJyYXlPZlN0cmluZykgYmUgZ2VuZXJhdGVkIGZvciB0aGVzZSB0eXBlcyBvZgotc2NoZW1hcywgc2VsZWN0IHRoaXMgb3B0aW9uLiA8L2xpPgotCi08bGk+QWRkIHNjb3BlIHRvIGRlcGxveS53c2RkOiBUaGlzIGluZGljYXRlcyBob3cgdG8gZGVwbG95IHRoZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24uCi1BcHBsaWNhdGlvbiB1c2VzIG9uZSBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGFsbCByZXF1ZXN0cy4KLVJlcXVlc3QgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGVhY2ggcmVxdWVzdC4KLVNlc3Npb24gY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGVhY2ggc2Vzc2lvbi48L2xpPgotCi08bGk+VGltZW91dCBpbiBzZWNvbmRzOiBUaGUgZGVmYXVsdCBpcyA0NS4gVXNlIC0xIHRvIGRpc2FibGUgdGhlIHRpbWVvdXQuPC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPjxzdHJvbmc+SmF2YTJXU0RMPC9zdHJvbmc+PHVsPgotPGxpPkxvb2sgZm9yIGFsbG93ZWQgbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3M6IElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwKLXRoZSBKYXZhMldTREwgcGFyc2VyIHdpbGwgbG9vayBpbnRvIGV4dGVuZGVkIGNsYXNzZXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0Ci1vZiBtZXRob2RzIHRvIGV4cG9ydCBpbnRvIHRoZSBXU0RMIGZpbGUuIDwvbGk+Ci0KLTxsaT5BbmFseXplIHRoZSBzZXJ2aWNlIGNsYXNzIGZvciBjb21wbGlhbmNlIHRvIEpBWC1SUEMgYmVmb3JlIGdlbmVyYXRpbmcKLWNvZGU6IElmIHNlbGVjdGVkLCB0aGUgdG9vbHMgd2lsbCBleGFtaW5lIHRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgYW5kIGl0cyB2YWx1ZQotdHlwZXMgdG8gZGV0ZXJtaW5lIGlmIGl0IHNhdGlzZmllcyBpbXBvcnRhbnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uPC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPjxhIG5hbWU9InJ3c3ByZWZfX3BvcHVwZGlhbG9nc2VsZWN0Ij48IS0tIC0tPjwvYT5Qb3B1cCBEaWFsb2cgU2VsZWN0aW9uPC9kdD4KLQotPGRkPlRoZSBEaWFsb2dzIHByZWZlcmVuY2VzIGVuYWJsZSB5b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIGRpYWxvZyBib3hlcyB0aGF0Ci15b3Ugd2FudCB0byBzZWUgd2hlbiBydW5uaW5nIHBvcHVwIGFjdGlvbnMuIElmIHlvdSBoYXZlIGRpc2FibGVkIGFueSBvZiB0aGUKLWRpYWxvZ3MgYnkgc2VsZWN0aW5nICJEbyBub3Qgc2hvdyB0aGlzIGRpYWxvZyBhZ2FpbiIgb24gdGhlIGZpcnN0IHBhZ2Ugb2YKLWEgV2ViIHNlcnZpY2VzIHdpemFyZCwgeW91IGNhbiB1bmRvIHlvdXIgY2hhbmdlIGJ5IGNsZWFyaW5nIHRoZSBjaGVjayBib3gKLWJlc2lkZSB0aGUgZGlhbG9nIHRoYXQgeW91IGhhdmUgY2hvc2VuIHRvIGhpZGUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+PGEgbmFtZT0icndzcHJlZl9fd3NpY29tcGxpYW5jZSI+PCEtLSAtLT48L2E+UHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uPC9kdD4KLQotPGRkPlRoZSBXUy1JIENvbXBsaWFuY2UgcHJlZmVyZW5jZXMgYWxsb3cgeW91IHRvIHNlbGVjdCB5b3VyIGxldmVsIG9mIGNvbXBsaWFuY2UKLXdpdGggdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIChTU0JQKSBhbmQgV1MtSSBBdHRhY2hlbWVudCBQcm9maWxlCi0oQVApLiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugd2hpbGUgV1MtSSBpbmNvbXBsaWFuY2VzCi1hcmUgbGlzdGVkIGluIHRoZSBUYXNrIHZpZXcsIHRoZSBUYXNrIHZpZXcgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSB1cGRhdGVkLgotVGhlIHdvcmtzcGFjZSBtdXN0IGJlIHJldmFsaWRhdGVkIGJlZm9yZSB0aGUgd2FybmluZ3Mgd2lsbCBiZSByZW1vdmVkIGZyb20KLXRoZSBUYXNrIHZpZXcuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTLUksIHJlZmVyIHRvOiA8YSBocmVmPSJodHRwOi8vd3d3LndzLWkub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cud3MtaS5vcmcvPC9hPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPkZvciB2YWxpZGF0aW9uIHByZWZlcmVuY2VzLCB5b3UgY2FuIGNob29zZSB3aGV0aGVyIG9yIG5vdCBXU0RMIGZpbGVzIGNvbnN1bWVkCi1ieSB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgYXJlIHZhbGlkYXRlZCwgYW5kIHdoZXRoZXIgb3Igbm90IHRoZSBXU0RMIHZhbGlkYXRpb24KLW11c3QgY29tcGxldGUgYmVmb3JlIHRoZSB3aXphcmQgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IHN0ZXAuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+PGEgbmFtZT0icndzcHJlZl9fcHJvanRvcG9sb2d5Ij48IS0tIC0tPjwvYT5Qcm9qZWN0IFRvcG9sb2d5PC9kdD4KLQotPGRkPlRoZSBQcm9qZWN0IFRvcG9sb2d5IHByZWZlcmVuY2VzIGFsbG93IHlvdSB0bzo8dWw+Ci08bGk+U2VsZWN0IHRoZSBkZWZhdWx0IGNsaWVudCBwcm9qZWN0IHR5cGUgdGhhdCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgd2lsbAotY3JlYXRlIHdoZW4gZ2VuZXJhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudC4gWW91IGNhbiBhbHNvIHNldCB0aGUgb3JkZXIgaW4KLXdoaWNoIHRoZSBjbGllbnQgcHJvamVjdCB0eXBlcyB3aWxsIGJlIGxpc3RlZCBpbiB0aGUgd2l6YXJkLiBOb3RlIHRoYXQgdGhpcwotc2VsZWN0aW9uIGlzIHNpbXBseSBhIGRlZmF1bHQgYW5kIGFuIGFsdGVybmF0ZSBwcm9qZWN0IHR5cGUgY2FuIGJlIHNlbGVjdGVkCi1pbiB0aGUgd2l6YXJkLjwvbGk+Ci0KLTxsaT5TZWxlY3Qgd2hldGhlciB5b3Ugd2FudCB0byBnZW5lcmF0ZSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRoZSBXZWIgc2VydmljZQotY2xpZW50IGluIHRoZSBzYW1lIEVBUiBwcm9qZWN0IG9yIGRpZmZlcmVudCBFQVIgcHJvamVjdHMuIEdlbmVyYXRpbmcgdGhlIHNlcnZpY2UKLWFuZCBjbGllbnQgaW50byBkaWZmZXJlbnQgRUFSIHByb2plY3RzIGNhbiByZWR1Y2UgdGhlIGNoYW5jZSBvZiBjb25mbGljdHMKLXRoYXQgb2NjdXIgd2hlbiBib3RoIGV4aXN0IGluIGEgc2luZ2xlIEVBUiBwcm9qZWN0LCBidXQgdXNlcyBtb3JlIHN5c3RlbSByZXNvdXJjZXMuPC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPjxhIG5hbWU9InJ3c3ByZWZfX3Jlc291cmNlbWFuYWdlbWVudCI+PCEtLSAtLT48L2E+UmVzb3VyY2UgTWFuYWdlbWVudDwvZHQ+Ci0KLTxkZD5UaGUgUmVzb3VyY2UgTWFuYWdlbWVudCBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIGRldGVybWluZSB0aGUgZmlsZSBhbmQKLWZvbGRlciBjcmVhdGlvbiBhbmQgb3ZlcndyaXRpbmcgZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZwoteW91ciBXZWIgc2VydmljZS48dWw+Ci08bGk+T3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZzogc2VsZWN0aW5nIHRoaXMgd2lsbCBhbGxvdyB0aGUgd2l6YXJkcwotdG8gb3ZlcndyaXRlIGFueSBleGlzdGluZyBmaWxlcyBpbiB0aGUgd29ya3NwYWNlIHdpdGhvdXQgcHJvbXB0aW5nLiBJZiBpdAotaXMgbm90IHNlbGVjdGVkIHlvdSB3aWxsIGJlIHByb21wdGVkIGVhY2ggdGltZSBhIGZpbGUgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4uPC9saT4KLQotPGxpPkNyZWF0ZSBmb2xkZXJzIHdoZW4gbmVjZXNzYXJ5OiBzZWxlY3RpbmcgdGhpcyBlbmFibGVzIHRoZSB3aXphcmRzIHRvIGNyZWF0ZQotYW55IHJlcXVpcmVkIGZvbGRlcnMuPC9saT4KLQotPGxpPkNoZWNrIG91dCBmaWxlcyB3aXRob3V0IHdhcm5pbmc6IHNlbGVjdCB0byBjaGVjayBvdXQgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcKLWEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uLjwvbGk+Ci0KLTxsaT5NZXJnZSBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZTogdGhpcyBjaGVjayBib3ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSBJZiB0aGlzIGNoZWNrIGJveCBpcyBlbmFibGVkLCB3aGVuIGEgc2tlbGV0b24gZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkKLWV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLCB0aGUgbmV3bHkgZ2VuZXJhdGVkIHNrZWxldG9uIGZpbGUgd2lsbCBtZXJnZSB3aXRoCi10aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZS4gIEVuYWJsZSB0aGlzIHRvIHByZXNlcnZlIGNvZGUgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5Ci1tb2RpZmllZCBpbiB0aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZXMuPHA+Tm90ZSB0aGF0IHdoZW4gdGhpcyBwcmVmZXJlbmNlCi1pcyBlbmFibGVkLCBpZiB5b3UgY2hhbmdlIHRoZSByZXR1cm4gdHlwZSBvZiBhbiBpbnRlcmZhY2UsIHRoZSByZXN1bHRpbmcgc2tlbGV0b24KLWZpbGUgd2lsbCBoYXZlIGEgbWV0aG9kIHJldHVybmluZyB0aGUgdHlwZSBhcyBkZWZpbmVkIGluIHRoZSBuZXcgaW50ZXJmYWNlCi1idXQgd291bGQgaGF2ZSBhIG1ldGhvZCBib2R5IGZyb20gdGhlIG9yaWdpbmFsIHNrZWxldG9uIGZpbGUgKHdoaWNoIHdvdWxkCi1iZSByZXR1cm5pbmcgYSBkaWZmZXJlbnQgdHlwZSkuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGNvbXBpbGF0aW9uIGVycm9yCi10aGF0IHRoZSB5b3Ugd2lsbCBoYXZlIHRvIGNvcnJlY3QgbWFudWFsbHkuPC9wPgotPC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPjxhIG5hbWU9InJ3c3ByZWZfX3NjZW5hcmlvZGVmYXVsdHMiPjwhLS0gLS0+PC9hPlNjZW5hcmlvIERlZmF1bHRzPC9kdD4KLQotPGRkPlRoZSBTY2VuYXJpbyBEZWZhdWx0cyBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nIHNjZW5hcmlvCi1kZWZhdWx0cyB0aGF0IHlvdSB3YW50IHRvIHVzZSB3aGVuIGNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2U6PHVsPgotPGxpPndoaWNoIHR5cGUgb2YgV2ViIHNlcnZpY2UgYW5kIGNsaWVudCB5b3Ugd2FudCB0byBiZSBzZWxlY3RlZCBieSBkZWZhdWx0LjwvbGk+Ci0KLTxsaT53aGljaCBwaGFzZXMgb2YgdGhlIFdlYiBzZXJ2aWNlIGxpZmVjeWNsZSB5b3Ugd2FudCB0byBjb21wbGV0ZSBpbiB0aGUKLXdpemFyZC48L2xpPgotCi08bGk+aWYgeW91IHdhbnQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBsYXVuY2ggYnkgZGVmYXVsdCBzbyB0aGF0IHlvdQotY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9saT4KLQotPGxpPmlmIHlvdSB3YW50IHRoZSBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgcm91dGVkIHRocm91Z2ggYSBUQ1AvSVAgbW9uaXRvcgotc28gdGhhdCB5b3UgY2FuIG1vbml0b3IgdGhlIFNPQVAgcGFja2V0cyBhbmQgb3B0aW9uYWxseSB0ZXN0IHRoZW0gZm9yIFdTLUkKLWNvbXBsaWFuY2UuPC9saT4KLQotPC91bD4KLU5vdGUgdGhhdCBhbGwgdGhlc2UgZGVmYXVsdHMgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIHdpemFyZC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj48YSBuYW1lPSJyd3NwcmVmX19zZXJ2ZXJhbmRydW50aW1lIj48IS0tIC0tPjwvYT5TZXJ2ZXIgYW5kIFJ1bnRpbWU8L2R0PgotCi08ZGQ+U2VsZWN0IHRoZSBzZXJ2ZXIsIFdlYiBzZXJ2aWNlIHJ1bi10aW1lIGVudmlyb25tZW50LCBhbmQgSjJFRSB2ZXJzaW9uCi10aGF0IHlvdSB3YW50IHNlbGVjdGVkIGJ5IGRlZmF1bHQgaW4gdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQuIE5vdGUgdGhhdCBhbGwKLXRoZXNlIGRlZmF1bHRzIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSB3aXphcmQuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+PGEgbmFtZT0icndzcHJlZl9fdGVzdGZhY2lsaXR5ZGVmYXVsdHMiPjwhLS0gLS0+PC9hPlRlc3QgRmFjaWxpdHkgRGVmYXVsdHM8L2R0PgotCi08ZGQ+Y2FuIHNlbGVjdCB3aGV0aGVyIHRvIGhhdmUgdGhlIHdpemFyZCBhdXRvbWF0aWNhbGx5IGxhdW5jaCBhIHRlc3QgZmFjaWxpdHksCi1hbmQgeW91IGNhbiBzZWxlY3QgeW91ciBwcmVmZXJyZWQgdHlwZSBvZiB0ZXN0IGZhY2lsaXR5PC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+PGEgbmFtZT0icndzcHJlZl9fd3NkbGZpbGVzIj48IS0tIC0tPjwvYT5XU0RMIGZpbGVzPC9kdD4KLQotPGRkPldoZW4gY3JlYXRpbmcgYSBXU0RMIGZpbGUgaW4gdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIHNldCB0aGUgZGVmYXVsdAotdGFyZ2V0IG5hbWVzcGFjZS4gSWYgeW91IGRvIG5vdCBzZWxlY3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0LCB5b3VyIFdTREwgZmlsZQotd2lsbCBoYXZlIGh0dHA6Ly90ZW1wdXJpLm9yZyBhcyBpdHMgdGFyZ2V0IG5hbWVzcGFjZS48L2RkPgotCi08L2RsPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTA0NWY1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0b3ZlcndzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkRldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTxzaG9ydGRlc2M+VXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMKLXRoYXQgYXJlIGNyZWF0ZWQgZnJvbSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4KLVlvdSBjYW4gY3JlYXRlIG9mIFdlYiBzZXJ2aWNlcyB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aAotYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbgotb3IgRUpCKS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5jcmVhdGluZzxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+SW4gdGhpcyByZWxlYXNlLCB0aGUgZGV2ZWxvcG1lbnQgcGF0aCB0aGF0IHlvdSB3b3VsZCB0eXBpY2FsbHkKLWZvbGxvdyB0byBjcmVhdGUgYW5kIHB1Ymxpc2ggYSBXZWIgc2VydmljZSBpcyBhcyBmb2xsb3dzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkNyZWF0ZSBhIFdlYiBwcm9qZWN0LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q3JlYXRlIG9yIGltcG9ydCBhbiBhcnRpZmFjdCB0byBiZSB0dXJuZWQgaW50byBhIFdlYiBzZXJ2aWNlLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DcmVhdGUgYSBXZWIgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5QdWJsaXNoIGEgV2ViIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+Rm9yIGluc3RydWN0aW9ucyBvbiBwZXJmb3JtaW5nIHRoZXNlIHRhc2tzLCByZWZlciB0byB0aGUgbGlzdCBvZgotcmVsYXRlZCB0b3BpY3MgYXQgdGhlIGVuZCBvZiB0aGlzIHRvcGljLjwvcD48cD5XZWIgdG9vbHMgYXNzaXN0IHlvdSBpbiBkZXZlbG9waW5nCi1XZWIgYXBwbGljYXRpb25zIHRoYXQgeW91IGNhbiBjb25maWd1cmUgYXMgYSBXZWIgc2VydmljZS4gV2ViIGFwcGxpY2F0aW9ucwotYXJlIGRldmVsb3BlZCBpbiBhIFdlYiBwcm9qZWN0LCBhbmQgU2VydmVyIHRvb2xzIGFsbG93IHlvdSB0byB1c2UgdGhlIHNlcnZlcgotdGVzdCBlbnZpcm9ubWVudCB0byB0ZXN0IGFuZCBkZXBsb3kgeW91ciBXZWIgc2VydmljZXMuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2xpbmt0ZXh0PgotPC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+VG9vbHMgZm9yIFdlYgotc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PkNyZWF0aW5nIGJvdHRvbS11cAotV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3N0b3Bkb3duLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PkNyZWF0aW5nCi10b3AtZG93biBXZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiCi1zY29wZT0icGVlciI+PGxpbmt0ZXh0PlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvbGlua3RleHQ+Ci08L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTE3MDk5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4gWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBKYXZhIGJlYW4gb3IgRUpCKS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgY3JlYXRpbmcsIG92ZXJ2aWV3IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBjcmVhdGluZywgb3ZlcnZpZXciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzYnRtdXAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzdG9wZG93bi5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0b3ZlcndzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+RGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRvdmVyd3MiPjxhIG5hbWU9InRvdmVyd3MiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkRldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+VXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMKLXRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZh4oSiIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4KLVlvdSBjYW4gY3JlYXRlIG9mIFdlYiBzZXJ2aWNlcyB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aAotYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbgotb3IgRUpCKS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPkluIHRoaXMgcmVsZWFzZSwgdGhlIGRldmVsb3BtZW50IHBhdGggdGhhdCB5b3Ugd291bGQgdHlwaWNhbGx5Ci1mb2xsb3cgdG8gY3JlYXRlIGFuZCBwdWJsaXNoIGEgV2ViIHNlcnZpY2UgaXMgYXMgZm9sbG93czo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkNyZWF0ZSBhIFdlYiBwcm9qZWN0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q3JlYXRlIG9yIGltcG9ydCBhbiBhcnRpZmFjdCB0byBiZSB0dXJuZWQgaW50byBhIFdlYiBzZXJ2aWNlLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5DcmVhdGUgYSBXZWIgc2VydmljZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5QdWJsaXNoIGEgV2ViIHNlcnZpY2UuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPkZvciBpbnN0cnVjdGlvbnMgb24gcGVyZm9ybWluZyB0aGVzZSB0YXNrcywgcmVmZXIgdG8gdGhlIGxpc3Qgb2YKLXJlbGF0ZWQgdG9waWNzIGF0IHRoZSBlbmQgb2YgdGhpcyB0b3BpYy48L3A+Ci08cD5XZWIgdG9vbHMgYXNzaXN0IHlvdSBpbiBkZXZlbG9waW5nCi1XZWIgYXBwbGljYXRpb25zIHRoYXQgeW91IGNhbiBjb25maWd1cmUgYXMgYSBXZWIgc2VydmljZS4gV2ViIGFwcGxpY2F0aW9ucwotYXJlIGRldmVsb3BlZCBpbiBhIFdlYiBwcm9qZWN0LCBhbmQgU2VydmVyIHRvb2xzIGFsbG93IHlvdSB0byB1c2UgdGhlIHNlcnZlcgotdGVzdCBlbnZpcm9ubWVudCB0byB0ZXN0IGFuZCBkZXBsb3kgeW91ciBXZWIgc2VydmljZXMuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYgotc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwiIHRpdGxlPSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIEJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi4iPkNyZWF0aW5nIGJvdHRvbS11cAotV2ViIHNlcnZpY2VzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3N0b3Bkb3duLmh0bWwiIHRpdGxlPSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuIj5DcmVhdGluZwotdG9wLWRvd24gV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbCI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MjE2YjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR3c2ljb21wbHkiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC90aXRsZT4KLTxzaG9ydGRlc2M+VGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24gdG9vbHMgc3VwcG9ydCB0aGUgbGV2ZWwgb2YgV1MtSQotY29tcGxpYW5jZSBvdXRsaW5lZCBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSwgdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZwotUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdQotY2FuIGNob29zZSB0byBtYWtlIHlvdXIgV2ViIHNlcnZpY2UgY29tcGxpYW50IG9yIG5vbi1jb21wbGlhbnQsIGRlcGVuZGluZwotb24geW91ciBuZWVkcy4gRm9yIGV4YW1wbGUsIGVuY29kZWQgc3R5bGUgKFJQQy9lbmNvZGVkKSwgU09BUCBvdmVyIEpNUyBwcm90b2NvbHMKLWFyZSBub3QgV1MtSSBjb21wbGlhbnQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+aW50ZXJvcGVyYWJpbGl0eSBjb21wbGlhbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTSTxpbmRleHRlcm0+c2V0dGluZyBjb21wbGlhbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPllvdSBjYW4gc2V0IHRoZSBsZXZlbCBvZiBjb21wbGlhbmNlIGZvciBlaXRoZXIgdGhlIEJhc2ljIFByb2ZpbGUKLWFuZCB0aGUgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlLCBvciBmb3IgdGhlIEF0dGFjaG1lbnRzIFByb2ZpbGUuIFlvdSBjYW4KLXNlbGVjdCBmcm9tIHRocmVlIGxldmVscyBvZiBjb21wbGlhbmNlIHdpdGggV1MtSSBzcGVjaWZpY2F0aW9uczo8L3A+PHVsPgotPGxpPlJlcXVpcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBwcmV2ZW50cyB5b3UgZnJvbSBjcmVhdGluZyBhIG5vbi1jb21wbGlhbnQKLVdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+U3VnZ2VzdCBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgbm9uLWNvbXBsaWFudAotV2ViIHNlcnZpY2UsIGJ1dCBwcm92aWRlcyBhIHZpc2libGUgd2FybmluZyBzdGF0aW5nIGhvdyB0aGUgc2VydmljZSBpcyBub24tY29tcGxpYW50LjwvbGk+Ci08bGk+SWdub3JlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50Ci1XZWIgc2VydmljZSBhbmQgZG9lcyBub3Qgbm90aWZ5IHlvdSBvZiBub24tY29tcGxpYW5jZS48L2xpPgotPC91bD48cD5Zb3UgY2FuIHNldCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGF0IHRoZSB3b3Jrc3BhY2UgbGV2ZWwsIG9yCi1hdCB0aGUgcHJvamVjdCBsZXZlbC48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJzZGdmc2RncyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5TZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBmb3IgdGhlIHdvcmtzcGFjZTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBzZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBmb3IgdGhlIHdvcmtzcGFjZTo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5Gcm9tIHRoZSAgPGI+V2luZG93PC9iPiBtZW51LCBzZWxlY3QgIDxiPlByZWZlcmVuY2VzPC9iPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0ICA8Yj5XZWIgU2VydmljZXM8L2I+IGZyb20gdGhlIGNvbXBvbmVudCB0cmVlIG9uIHRoZSBsZWZ0LWhhbmQKLXNpZGUgb2YgdGhlIHBhbmVsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VW5kZXIgPGI+UHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uPC9iPiwgc2VsZWN0IHRoZSBsZXZlbAotb2YgY29tcGxpYW5jZSB5b3Ugd2FudCBmcm9tIHRoZSBkcm9wLWRvd24gbGlzdHMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QXBwbHk8L2I+LCB0aGVuIGNsaWNrICA8Yj5PSzwvYj4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0ieHZnZHNnZnNnIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlNldCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGZvciBhIHByb2plY3Q8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gc2V0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgZm9yIGEgcHJvamVjdDo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvamVjdCBOYXZpZ2F0b3IsIHJpZ2h0IGNsaWNrIGFuZCBzZWxlY3QgIDxiPlByb3BlcnRpZXM8L2I+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgIDxiPlByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbjwvYj4gZnJvbSB0aGUgY29tcG9uZW50Ci10cmVlIG9uIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgcGFuZWwuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIGxldmVsIG9mIGNvbXBsaWFuY2UgeW91IHdhbnQgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3RzLAotb3Igc2VsZWN0IHRvIGhhdmUgdGhlIHByb2plY3Qgc2hhcmUgdGhlIHNhbWUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGFzIHRoZQotd29ya3NwYWNlPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QXBwbHk8L2I+LCB0aGVuIGNsaWNrICA8Yj5PSzwvYj4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3Npb3Zlci5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMGYxNTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbiB0b29scyBzdXBwb3J0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdSBjYW4gY2hvb3NlIHRvIG1ha2UgeW91ciBXZWIgc2VydmljZSBjb21wbGlhbnQgb3Igbm9uLWNvbXBsaWFudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzIGFyZSBub3QgV1MtSSBjb21wbGlhbnQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIHN1cHBvcnQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBvdXRsaW5lZCBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSwgdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSSBTU0JQKSwgYW5kIHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgMS4wIChXUy1JIEFQKS4gWW91IGNhbiBjaG9vc2UgdG8gbWFrZSB5b3VyIFdlYiBzZXJ2aWNlIGNvbXBsaWFudCBvciBub24tY29tcGxpYW50LCBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4gRm9yIGV4YW1wbGUsIGVuY29kZWQgc3R5bGUgKFJQQy9lbmNvZGVkKSwgU09BUCBvdmVyIEpNUyBwcm90b2NvbHMgYXJlIG5vdCBXUy1JIGNvbXBsaWFudC4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGludGVyb3BlcmFiaWxpdHkgY29tcGxpYW5jZSwgV1NJLCBzZXR0aW5nIGNvbXBsaWFuY2UiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGludGVyb3BlcmFiaWxpdHkgY29tcGxpYW5jZSwgV1NJLCBzZXR0aW5nIGNvbXBsaWFuY2UiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2ljb21wbHkiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR3c2ljb21wbHkiPjxhIG5hbWU9InR3c2ljb21wbHkiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIHN1cHBvcnQgdGhlIGxldmVsIG9mIFdTLUkKLWNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcKLVByb2ZpbGUgMS4wIChXUy1JIFNTQlApLCBhbmQgdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSAxLjAgKFdTLUkgQVApLiBZb3UKLWNhbiBjaG9vc2UgdG8gbWFrZSB5b3VyIFdlYiBzZXJ2aWNlIGNvbXBsaWFudCBvciBub24tY29tcGxpYW50LCBkZXBlbmRpbmcKLW9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzCi1hcmUgbm90IFdTLUkgY29tcGxpYW50LjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+WW91IGNhbiBzZXQgdGhlIGxldmVsIG9mIGNvbXBsaWFuY2UgZm9yIGVpdGhlciB0aGUgQmFzaWMgUHJvZmlsZQotYW5kIHRoZSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUsIG9yIGZvciB0aGUgQXR0YWNobWVudHMgUHJvZmlsZS4gWW91IGNhbgotc2VsZWN0IGZyb20gdGhyZWUgbGV2ZWxzIG9mIGNvbXBsaWFuY2Ugd2l0aCBXUy1JIHNwZWNpZmljYXRpb25zOjwvcD4KLTx1bD4KLTxsaT5SZXF1aXJlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgcHJldmVudHMgeW91IGZyb20gY3JlYXRpbmcgYSBub24tY29tcGxpYW50Ci1XZWIgc2VydmljZS48L2xpPgotCi08bGk+U3VnZ2VzdCBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgbm9uLWNvbXBsaWFudAotV2ViIHNlcnZpY2UsIGJ1dCBwcm92aWRlcyBhIHZpc2libGUgd2FybmluZyBzdGF0aW5nIGhvdyB0aGUgc2VydmljZSBpcyBub24tY29tcGxpYW50LjwvbGk+Ci0KLTxsaT5JZ25vcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIG5vbi1jb21wbGlhbnQKLVdlYiBzZXJ2aWNlIGFuZCBkb2VzIG5vdCBub3RpZnkgeW91IG9mIG5vbi1jb21wbGlhbmNlLjwvbGk+Ci0KLTwvdWw+Ci08cD5Zb3UgY2FuIHNldCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGF0IHRoZSB3b3Jrc3BhY2UgbGV2ZWwsIG9yCi1hdCB0aGUgcHJvamVjdCBsZXZlbC48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9InNkZ2ZzZGdzIj48YSBuYW1lPSJzZGdmc2RncyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5TZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBmb3IgdGhlIHdvcmtzcGFjZTwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBzZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBmb3IgdGhlIHdvcmtzcGFjZTo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkZyb20gdGhlICA8c3Ryb25nPldpbmRvdzwvc3Ryb25nPiBtZW51LCBzZWxlY3QgIDxzdHJvbmc+UHJlZmVyZW5jZXM8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCAgPHN0cm9uZz5XZWIgU2VydmljZXM8L3N0cm9uZz4gZnJvbSB0aGUgY29tcG9uZW50IHRyZWUgb24gdGhlIGxlZnQtaGFuZAotc2lkZSBvZiB0aGUgcGFuZWwuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5VbmRlciA8c3Ryb25nPlByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbjwvc3Ryb25nPiwgc2VsZWN0IHRoZSBsZXZlbAotb2YgY29tcGxpYW5jZSB5b3Ugd2FudCBmcm9tIHRoZSBkcm9wLWRvd24gbGlzdHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5BcHBseTwvc3Ryb25nPiwgdGhlbiBjbGljayAgPHN0cm9uZz5PSzwvc3Ryb25nPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW92ZXIuaHRtbCIgdGl0bGU9IldTLUkgaXMgYW4gb3JnYW5pemF0aW9uIGRlc2lnbmVkIHRvIHByb21vdGUgV2ViIHNlcnZpY2UgaW50ZXJvcGVyYWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLCBvcGVyYXRpbmcgc3lzdGVtcywgYW5kIHByb2dyYW1taW5nIGxhbmd1YWdlcy4iPldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKTwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0ieHZnZHNnZnNnIj48YSBuYW1lPSJ4dmdkc2dmc2ciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+U2V0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgZm9yIGEgcHJvamVjdDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBzZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBmb3IgYSBwcm9qZWN0OjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIFByb2plY3QgTmF2aWdhdG9yLCByaWdodCBjbGljayBhbmQgc2VsZWN0ICA8c3Ryb25nPlByb3BlcnRpZXM8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCAgPHN0cm9uZz5Qcm9maWxlIENvbXBsaWFuY2UgYW5kIFZhbGlkYXRpb248L3N0cm9uZz4gZnJvbSB0aGUgY29tcG9uZW50Ci10cmVlIG9uIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgcGFuZWwuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlIGxldmVsIG9mIGNvbXBsaWFuY2UgeW91IHdhbnQgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3RzLAotb3Igc2VsZWN0IHRvIGhhdmUgdGhlIHByb2plY3Qgc2hhcmUgdGhlIHNhbWUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGFzIHRoZQotd29ya3NwYWNlPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5BcHBseTwvc3Ryb25nPiwgdGhlbiBjbGljayAgPHN0cm9uZz5PSzwvc3Ryb25nPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW92ZXIuaHRtbCIgdGl0bGU9IldTLUkgaXMgYW4gb3JnYW5pemF0aW9uIGRlc2lnbmVkIHRvIHByb21vdGUgV2ViIHNlcnZpY2UgaW50ZXJvcGVyYWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLCBvcGVyYXRpbmcgc3lzdGVtcywgYW5kIHByb2dyYW1taW5nIGxhbmd1YWdlcy4iPldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKTwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW92ZXIuaHRtbCIgdGl0bGU9IldTLUkgaXMgYW4gb3JnYW5pemF0aW9uIGRlc2lnbmVkIHRvIHByb21vdGUgV2ViIHNlcnZpY2UgaW50ZXJvcGVyYWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLCBvcGVyYXRpbmcgc3lzdGVtcywgYW5kIHByb2dyYW1taW5nIGxhbmd1YWdlcy4iPldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTJlODYxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIKLSAibWFwLmR0ZCI+Ci08bWFwIGlkPSJ3c21haW50b2MiIHRpdGxlPSJ3c21haW50b2MiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3cy5kaXRhIiBuYXZ0aXRsZT0iV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50Ij4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NzdGFuZGFyZHMuZGl0YSIgbmF2dGl0bGU9IldlYiBzZXJ2aWNlcyBzdGFuZGFyZHMiCi1zY29wZT0ibG9jYWwiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2RsLmRpdGEiIG5hdnRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIj4KLTx0b3BpY3JlZiBocmVmPSJyZWYvcndzZGwuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgcmVmZXJlbmNlIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2Nzb2FwLmRpdGEiIG5hdnRpdGxlPSJTT0FQIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5kaXRhIgotbmF2dGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIiBzY29wZT0icGVlciI+Ci08dG9waWNyZWYgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsdWQuZGl0YSIKLW5hdnRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIiBzY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzaWwuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzaWx1ZC5kaXRhIiBuYXZ0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTCI+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jamF4cnBjLmRpdGEiIG5hdnRpdGxlPSJKQVgtUlBDIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuZGl0YSIgbmF2dGl0bGU9IkpTUiAxMDkgYW5kIEpTUiA5MjEiPjwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uZGl0YSIgbmF2dGl0bGU9IlRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCIKLXNjb3BlPSJsb2NhbCI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NidG11cC5kaXRhIiBuYXZ0aXRsZT0iQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCIKLXNjb3BlPSJsb2NhbCI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBuYXZ0aXRsZT0iV29ya3NwYWNlIGFuZCB0b29scyI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgbmF2dGl0bGU9IlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQiCi1zY29wZT0ibG9jYWwiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IkNvbmZpZ3VyaW5nIHlvdXIgd29ya3NwYWNlIj4KLTx0b3BpY3JlZiBocmVmPSJyZWYvcndzcHJlZi5kaXRhIiBuYXZ0aXRsZT0iU2V0dGluZyBXZWIgc2VydmljZXMgcHJlZmVyZW5jZXMiCi1zY29wZT0ibG9jYWwiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzaW92ZXIuZGl0YSIgbmF2dGl0bGU9IldTLUkgY29tcGxpYW5jZSIgc2NvcGU9ImxvY2FsIj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90d3NpY29tcGx5LmRpdGEiIG5hdnRpdGxlPSJTZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UiCi1zY29wZT0ibG9jYWwiPjwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3RvcGljcy90dG9tY2F0c2Vydi5kaXRhIgotbmF2dGl0bGU9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCAgV2ViIHByb2plY3QiIHNjb3BlPSJwZWVyIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IkltcG9ydGluZyBhbmQgY3JlYXRpbmcgcmVzb3VyY2VzIHVzZWQgYnkgV2ViIHNlcnZpY2VzIj4KLTxuYXZyZWYgbWFwcmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwIi8+Ci08dG9waWNyZWYgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuZGl0YSIKLW5hdnRpdGxlPSJEaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIGEgV2ViIHNlcnZpY2UiIHNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90b3ZlcndzLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBXZWIgc2VydmljZXMiPgotPG5hdnJlZiBtYXByZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy5kaXRhbWFwIi8+Ci08bmF2cmVmIG1hcHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMyLnVpLmRvYy51c2VyL3dzYXhpczJidWlsZF90b2MuZGl0YW1hcCIvPgotPG5hdnJlZiBtYXByZWY9Ii4uL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLmRpdGFtYXAiLz4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IlRlc3RpbmcgYW5kIHZhbGlkYXRpbmcgV2ViIHNlcnZpY2VzIj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmRpdGEiCi1uYXZ0aXRsZT0iVGVzdGluZyBXU0RMIGRvY3VtZW50cyBhbmQgV2ViIHNlcnZpY2VzIHdpdGggdGhlIFdTREwgRXhwbG9yZXIiCi1zY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmRpdGEiIG5hdnRpdGxlPSJWYWxpZGF0aW5nIFdTREwiCi1zY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmRpdGEiIG5hdnRpdGxlPSJUZXN0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBUQ1AvSVAgTW9uaXRvciIKLXNjb3BlPSJwZWVyIj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuZGl0YSIgbmF2dGl0bGU9IlZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIG9mIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyIKLXNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIj4KLTxuYXZyZWYgbWFwcmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAiLz4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuZGl0YSIKLW5hdnRpdGxlPSJHZW5lcmF0aW5nIFdTSUwiIHNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmVmMDJiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGFiZWw9IndzbWFpbnRvYyIgdG9waWM9ImNvbmNlcHRzL2N3cy5odG1sIj4KLTx0b3BpYyBsYWJlbD0iV2ViIHNlcnZpY2VzIG92ZXJ2aWV3IiBocmVmPSJjb25jZXB0cy9jd3MuaHRtbCI+Ci08dG9waWMgbGFiZWw9IldlYiBzZXJ2aWNlcyBzdGFuZGFyZHMiIGhyZWY9ImNvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIj4KLTx0b3BpYyBsYWJlbD0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSIgaHJlZj0iY29uY2VwdHMvY3dzZGwuaHRtbCI+Ci08dG9waWMgbGFiZWw9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgcmVmZXJlbmNlIiBocmVmPSJyZWYvcndzZGwuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iU09BUCIgaHJlZj0iY29uY2VwdHMvY3NvYXAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwiPgotPHRvcGljIGxhYmVsPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkiIGhyZWY9ImNvbmNlcHRzL2N3c2lsLmh0bWwiPgotPHRvcGljIGxhYmVsPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIiBocmVmPSJjb25jZXB0cy9jd3NpbHVkLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkpBWC1SUEMiIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJKU1IgMTA5IGFuZCBKU1IgOTIxLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXMiIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgdG9wLWRvd24gV2ViIHNlcnZpY2VzIiBocmVmPSJjb25jZXB0cy9jd3N0b3Bkb3duLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYm90dG9tLXVwIFdlYiBzZXJ2aWNlcyIgaHJlZj0iY29uY2VwdHMvY3dzYnRtdXAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJXb3Jrc3BhY2UgYW5kIHRvb2xzIj4KLTx0b3BpYyBsYWJlbD0iVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCIgaHJlZj0iY29uY2VwdHMvY3dzaW53c2EuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDb25maWd1cmluZyB5b3VyIHdvcmtzcGFjZSI+Ci08dG9waWMgbGFiZWw9IldlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcyIgaHJlZj0icmVmL3J3c3ByZWYuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJXZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSAoV1MtSSkiIGhyZWY9ImNvbmNlcHRzL2N3c2lvdmVyLmh0bWwiPgotPHRvcGljIGxhYmVsPSJTZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UiIGhyZWY9InRhc2tzL3R3c2ljb21wbHkuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0IiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHRvbWNhdHNlcnYuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9waWM+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJJbXBvcnRpbmcgYW5kIGNyZWF0aW5nIHJlc291cmNlcyB1c2VkIGJ5IFdlYiBzZXJ2aWNlcyI+Ci08bGluayB0b2M9Ii4uL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLnhtbCIvPgotPHRvcGljIGxhYmVsPSJEaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIGEgV2ViIHNlcnZpY2UiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292Lmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIiBocmVmPSJ0YXNrcy90b3ZlcndzLmh0bWwiPgotPGxpbmsgdG9jPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNidWlsZF90b2MueG1sIi8+Ci08bGluayB0b2M9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzMi51aS5kb2MudXNlci93c2F4aXMyYnVpbGRfdG9jLnhtbCIvPgotPGxpbmsgdG9jPSIuLi9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvd3NheGlzYW50X3RvYy54bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IlRlc3RpbmcgYW5kIHZhbGlkYXRpbmcgV2ViIHNlcnZpY2VzIj4KLTx0b3BpYyBsYWJlbD0iVGVzdGluZyBXU0RMIGRvY3VtZW50cyBhbmQgV2ViIHNlcnZpY2VzIHdpdGggdGhlIFdTREwgRXhwbG9yZXIiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dGVzdHdzZGwuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJWYWxpZGF0aW5nIFdTREwiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJUZXN0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBUQ1AvSVAgTW9uaXRvciIgaHJlZj0iLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sIj4KLTx0b3BpYyBsYWJlbD0iVmFsaWRhdGluZyBXUy1JIGNvbXBsaWFuY2Ugb2YgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIj4KLTxsaW5rIHRvYz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy54bWwiLz4KLTx0b3BpYyBsYWJlbD0iR2VuZXJhdGluZyBXU0lMIiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTQ0ODdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YjVkNjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOWQ4NjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAwLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZjRiNjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHdlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotZ2VuZXJhdGVTb3VyY2VCdW5kbGU9ZmFsc2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxMWFmYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gV2ViIHNlcnZpY2VzIFVJClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzY2NDM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI+Ci0JCTxjb250ZXh0cyBmaWxlPSJ3ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwiIHBsdWdpbj0ib3JnLmVjbGlwc2UuanN0LndzLnVpIi8+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3dlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3Avd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGU3MmRmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3Avd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08Y29udGV4dHM+Ci0KLTwhLS1EUkVTOiBSZXNvdXJjZSBTZWxlY3Rpb24gRGlhbG9nLS0+Ci08Y29udGV4dCBpZD0iRFJFUzAwMDEiPgotPCEtLVJlc291cmNlIFR5cGUgZHJvcCBkb3duLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IGEgcmVzb3VyY2UgZnJvbSB3aGljaCB0byBjcmVhdGUgYSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IkRSRVMwMDAyIj4KLTwhLS1SZXNvdXJjZSB0cmVlLS0+Ci08ZGVzY3JpcHRpb24+TGlzdHMgdGhlIHJlc291cmNlcyB0aGF0IGNhbiBiZSB0dXJuZWQgaW50byBhIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1QUFJNOiBSZXNvdXJjZSBNYW5hZ2VtZW50IFByZWZlcmVuY2UgcGFnZS0tPgotCi08Y29udGV4dCBpZD0iUFBSTTAwMDEiPgotPCEtLW1haW4gcGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IHByZWZlcmVuY2VzIGVuYWJsZSB5b3UgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0cyB0aGF0IHlvdSB3YW50IHRvIHVzZSB3aGVuIGNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQUk0wMDAyIj4KLTwhLS1GaWxlIG92ZXJ3cml0ZSBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGNoZWNrYm94IGFsbG93cyB5b3UgdG8gb3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uIHdoZW4gb3ZlcndyaXRpbmcgZmlsZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQUFJNMDAwMyI+Ci08IS0tQ3JlYXRlIGZvbGRlcnMgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2tib3ggdG8gY3JlYXRlIGZvbGRlcnMgYW5kIGZvbGRlciBzdHJ1Y3R1cmVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUFBSTTAwMDQiPgotPCEtLUNoZWNrIG91dCBmaWxlcyBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVja2JveCB0byBjaGVjayBvdXQgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQUk0wMDA1Ij4KLTwhLS1Ta2VsZXRvbiBtZXJnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgY2hlY2sgYm94IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIElmIHRoaXMgY2hlY2sgYm94IGlzIGVuYWJsZWQsIHdoZW4gYSBza2VsZXRvbiBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZSwgdGhlIG5ld2x5IGdlbmVyYXRlZCBza2VsZXRvbiBmaWxlIHdpbGwgbWVyZ2Ugd2l0aCB0aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZS4gIEVuYWJsZSB0aGlzIHRvIHByZXNlcnZlIGNvZGUgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IG1vZGlmaWVkIGluIHRoZSBleGlzdGluZyBza2VsZXRvbiBmaWxlcy4gIAotCi1Ob3RlIHRoYXQgd2hlbiB0aGlzIHByZWZlcmVuY2UgaXMgZW5hYmxlZCwgaWYgeW91IGNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgb2YgYW4gaW50ZXJmYWNlLCB0aGUgcmVzdWx0aW5nIHNrZWxldG9uIGZpbGUgd2lsbCBoYXZlIGEgbWV0aG9kIHJldHVybmluZyB0aGUgdHlwZSBhcyBkZWZpbmVkIGluIHRoZSBuZXcgaW50ZXJmYWNlIGJ1dCB3b3VsZCBoYXZlIGEgbWV0aG9kIGJvZHkgZnJvbSB0aGUgb3JpZ2luYWwgc2tlbGV0b24gZmlsZSAod2hpY2ggd291bGQgYmUgcmV0dXJuaW5nIGEgZGlmZmVyZW50IHR5cGUpLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBjb21waWxhdGlvbiBlcnJvciB0aGF0IHRoZSB5b3Ugd2lsbCBoYXZlIHRvIGNvcnJlY3QgbWFudWFsbHkuCi0KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1QUFNEOiBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIHBhZ2UtLT4KLQotPCEtLVNjZW5hcmlvRGVmYXVsdHNQcmVmZXJlbmNlUGFnZS5qYXZhLS0+Ci08Y29udGV4dCBpZD0iUFBTRDAwMDEiPgotPCEtLVBQU0QwMDAxIGZvciB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUFBTRDAwMDIiPgotPCEtLVBQU0QwMDAyIGZvciB0aGUgbGF1bmNoIHNhbXBsZSBjaGVjayBib3ggb24gdGhlIFNjZW5hcmlvIERlZmF1bHRzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoZSBTY2VuYXJpbyBEZWZhdWx0cyBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlLiAKLQotVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdyB0byBjb2RlIHRoZSBwcm94eSBmaWxlLiBTZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gbGF1bmNoIHNhbXBsZSBhcHBsaWNhdGlvbiBhZnRlciBpdCBpcyBjcmVhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUFBTRDAwMDQiPgotPCEtLVBQU0QwMDA0IGZvciB0aGUgc2FtcGxlIEpTUCB0eXBlIGNvbWJvIGJveCBvbiB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSB0eXBlIG9mIHNhbXBsZSBKU1AgdG8gYmUgY3JlYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBQU0QwMDAzIj4KLTwhLS1QUFNEMDAwMyBmb3IgdGhlIHdlYiBleHBsb3JlciB0eXBlIGNvbWJvIGJveCBvbiB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhlIFNjZW5hcmlvIERlZmF1bHRzIHByZWZlcmVuY2VzIGVuYWJsZSB5b3UgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0cyB0aGF0IHlvdSB3YW50IHRvIHVzZSB3aGVuIGNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuIFNlbGVjdCBmcm9tIHRoZSBhdmFpbGFibGUgV2ViIHNlcnZpY2VzIGV4cGxvcmVycy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBQU0QwMDA1Ij4KLTwhLS1QUFNEMDAwNSBmb3IgdGhlIFVzZXItZGVmaW5lZCBVRERJIENhdGVnb3J5IERhdGEgQ29sdW1uIERlbGltaXRlciB0ZXh0IGZpZWxkIG9uIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgY2hhcmFjdGVyIHlvdSB3YW50IHRvIHVzZSBhcyBhIGNvbHVtbiBkZWxpbWl0ZXIgZm9yIHVzZXItZGVmaW5lZCBVRERJIENhdGVnb3J5IGRhdGEuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQUFNEMDAwNiI+Ci08IS0tUFBTRDAwMDYgZm9yIHRoZSBVc2VyLWRlZmluZWQgVURESSBDYXRlZ29yeSBEYXRhIFN0cmluZyBEZWxpbWl0ZXIgdGV4dCBmaWVsZCBvbiB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIGNoYXJhY3RlciB5b3Ugd2FudCB0byB1c2UgYXMgYSBzdHJpbmcgZGVsaW1pdGVyIGZvciB1c2VyLWRlZmluZWQgVURESSBDYXRlZ29yeSBkYXRhLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPGNvbnRleHQgaWQ9IlBQQUQwMDA0Ij4KLTwhLS0gIEhpZGUgZ2VuZXJhdGUgY2xpZW50IGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBoaWRlIHRoZSBvcHRpb24gb2YgZ2VuZXJhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB3aGVuIHlvdSByaWdodC1jbGljayBhIGZpbGUgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgb3IgTmF2aWdhdG9yLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFEMDAwNSI+Ci08IS0tICBIaWRlIGdlbmVyYXRlIHNhbXBsZSBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gaGlkZSB0aGUgb3B0aW9uIG9mIGdlbmVyYXRpbmcgc2FtcGxlIEpTUCBjb2RlIGZvciB0aGUgV2ViIHNlcnZpY2Ugd2hlbiB5b3UgcmlnaHQtY2xpY2sgYSBmaWxlIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIG9yIE5hdmlnYXRvci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRDAwMDYiPgotPCEtLSAgY3JlYXRlIHdlYiBzZXJ2aWNlIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBoaWRlIHRoZSBvcHRpb24gb2YgZ2VuZXJhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB3aGVuIHlvdSByaWdodC1jbGljayBhIGZpbGUgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgb3IgTmF2aWdhdG9yLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFEMDAwOCI+Ci08IS0tICBnZW5lcmF0ZSBza2VsZXRvbiBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gaGlkZSB0aGUgb3B0aW9uIG9mIGdlbmVyYXRpbmcgc2tlbGV0b24gSmF2YSBjbGFzc2VzIHdoZW4geW91IHJpZ2h0LWNsaWNrIGEgZmlsZSBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciBvciBOYXZpZ2F0b3IuIFRoZSBza2VsZXRvbiBiZWFuIGNvbnRhaW5zIGEgc2V0IG9mIG1ldGhvZHMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBvcGVyYXRpb25zIGRlc2NyaWJlZCBpbiB0aGUgV1NETCBkb2N1bWVudC4gV2hlbiB0aGUgYmVhbiBpcyBjcmVhdGVkLCBlYWNoIG1ldGhvZCBoYXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIHRoYXQgeW91IHJlcGxhY2UgYnkgZWRpdGluZyB0aGUgYmVhbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRDAwMDkiPgotPCEtLSAgcHVibGlzaCBXU0RMIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBoaWRlIHRoZSBvcHRpb24gb2YgcHVibGlzaGluZyB0aGUgV2ViIHNlcnZpY2UncyBXU0RMIGZpbGUgdG8gYSBVRERJIHJlZ2lzdHJ5IHdoZW4geW91IHJpZ2h0LWNsaWNrIGEgZmlsZSBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciBvciBOYXZpZ2F0b3IuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08L2NvbnRleHRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQ2NjhjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlcl8xLjAuMC5qYXIKLWJhawotdGVtcApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYzOTUwYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL0RvY0J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL0RvY0J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY1NDBmZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9Eb2NCdWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0gCi0KLQlUaGlzIHNjcmlwdCBidWlsZCB0aGUgSGVscCBwbHVnLWluIGJ5IHRyYW5zZm9ybWluZyB0aGUgRElUQSBzb3VyY2UgZmlsZXMgaW50byBIVE1MLgotCQotCVRvIHVzZSB0aGlzIHNjcmlwdCwgeW91IG11c3QgaW5zdGFsbCBESVRBLU9UIG9uIHlvdXIgbWFjaGluZSBpbiB0aGUgZGlyZWN0b3J5Ci0JZGVmaW5lZCBieSB0aGUgZGl0YS5vdC5kaXIgcHJvcGVydHkuCi0JCi0JUnVuIHRoZSBkZWZhdWx0IHRhcmdldCBhZnRlciB5b3UgZWRpdCB0aGUgRElUQSBzb3VyY2UgZmlsZXMgdG8gcmVnZW5lcmF0ZSB0aGUgSFRNTC4KLQkKLQlUbyBjdXN0b21pemUgdGhpcyBzY3JpcHQgZm9yIG90aGVyIEhlbHAgcGx1Zy1pbnMsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGFyZ3MuaW5wdXQgcHJvcGVydHkKLQl0byBiZSB0aGUgRElUQSBtYXAgZmlsZSBmb3IgdGhlIHBsdWctaW4uCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGxpbmtzIHRvIHNpYmxpbmcgSGVscCBwbHVnLWlucyBoYXZlIHNjb3BlPSJwZWVyIiwgb3RoZXJ3aXNlIHRoZQotCW91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpbGwgYmUgc2hpZnRlZCBpbmNvcnJlY3RseS4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgeW91IGhhbmQgY29kZSB5b3VyIHBsdWdpbi54bWwgZmlsZSBpbiBteXBsdWdpbi54bWwuIFRoaXMgZmlsZQotCXdpbGwgYmUgY29waWVkIG92ZXIgdGhlIGdlbmVyYXRlZCBwbHVnaW4ueG1sIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgZ2VuZXJhdGVkIGNvcnJlY3RseQotCWJ5IERJVEEtT1QuCi0JCi0JQ2hhbmdlTG9nOgotCTIwMDYtMDQtMDUgQXJ0aHVyIFJ5bWFuIDxyeW1hbkBjYS5pYm0uY29tPgotCS0gQ3JlYXRlZC4KLQotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIxLjUuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3NheGlzYW50X3RvYy5kaXRhbWFwIiAvPiAKLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGVhbi50ZW1wIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLmV4dG5hbWUiIHZhbHVlPSIuZGl0YSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLnRlbXAuZGlyIiBsb2NhdGlvbj0idGVtcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQuZGlyIiBsb2NhdGlvbj0iLi4iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0idHJhbnN0eXBlIiB2YWx1ZT0iZWNsaXBzZWhlbHAiIC8+Ci0JCTwvYW50PgotCQk8Y29weSBmaWxlPSJteXBsdWdpbi54bWwiIHRvZmlsZT0icGx1Z2luLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiIC8+Ci0JPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjZiNjZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuNS4xLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc3NGNlMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3c2F4aXNhbnRfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHRvcGljcy8qLmh0bSosXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLwotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcyxcCi0JCSAgICAgICAqLm1hcGxpc3QsXAotICAgICAgICAgICAgICAgKi5kaXRhbWFwLFwKLQkJICAgICAgIHRvcGljcy8qLmRpdGEgICAgICAgICAgICAgICAKLWJpbi5leGNsdWRlcyA9IERvY0J1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICBteVBsdWdpbioueG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvXzYuY2ZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvXzYuY2ZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTkyYTFmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L182LmNmcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQyMzI0Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9kZWxldGFibGUKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NTcwZDAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMzo1OCBFRFQgMjAwNw0KLW9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlcj1vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXJcbjEuNS4wLnF1YWxpZmllcg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOWRlNTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEzOjU4IEVEVCAyMDA3DQotbHVjZW5lPTEuNC4xMDMudjIwMDYwNjAxDQotYW5hbHl6ZXI9b3JnLmVjbGlwc2UuaGVscC5iYXNlXCMzLjIuMC52MjAwNjA2MDE/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhNmNiMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEzOjU4IEVEVCAyMDA3DQotL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcmJ1d3NhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9ydGR3c2EuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2NsaWVudGEuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvY3dzYXhpc2FudC5odG1sPTANCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9zZWdtZW50cyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI1ZDBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvbXlwbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjU5ODczLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLQotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotCi08cGx1Z2luPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgICAgIDx0b2MgZmlsZT0id3NheGlzYW50X3RvYy54bWwiIC8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLm1hcGxpc3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIubWFwbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1ZjI2My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIubWFwbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPG1hcGxpc3QgdmVyc2lvbj0iMy42LjIiPg0KLSAgPG5hdj4NCi0gICAgPG1hcCBmaWxlPSJ3c2F4aXNhbnRfdG9jLmRpdGFtYXAiLz4NCi0gIDwvbmF2Pg0KLSAgPGxpbms+DQotICAgIDxtYXAgZmlsZT0id3NheGlzYW50X3RvYy5kaXRhbWFwIi8+DQotICA8L2xpbms+DQotPC9tYXBsaXN0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YzJkYWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSAgICAgPSBXZWIgc2VydmljZXMgQXhpcyBBbnQgdGFzayBkb2N1bWVudGF0aW9uCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1OTg3My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci0KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgICAgICAgPHRvYyBmaWxlPSJ3c2F4aXNhbnRfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvY3dzYXhpc2FudC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL2N3c2F4aXNhbnQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg4MWI3YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvY3dzYXhpc2FudC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPg0KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIg0KLSAiY29uY2VwdC5kdGQiPg0KLTxjb25jZXB0IGlkPSJjcmVhdGluZ2F3ZWJzZXJ2aWNlZnJvbWFqYXZhYmVhbiIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWINCi1zZXJ2aWNlcyBBbnQgdGFza3M8L3RpdGxlPg0KLTx0aXRsZWFsdHM+DQotPHNlYXJjaHRpdGxlPkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcNCi1BbnQgdGFza3M8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+SWYgeW91IHByZWZlciBub3QgdG8gdXNlIHRoZSBXZWIgc2VydmljZSB3aXphcmQsIHlvdSBjYW4gdXNlIEFudA0KLWZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4NCi1UaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZQ0KLXVzaW5nIDxtZW51Y2FzY2FkZT48dWljb250cm9sPlJ1biBBczwvdWljb250cm9sPjx1aWNvbnRyb2w+QW50IEJ1aWxkLi4uPC91aWNvbnRyb2w+DQotPC9tZW51Y2FzY2FkZT4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UNCi15b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UsIHlvdSBjYW4gdGhlbiBkZXBsb3kgaXQgdG8gYSBzZXJ2ZXIsIHRlc3QNCi1pdCwgYW5kIHB1Ymxpc2ggaXQgYXMgYSBidXNpbmVzcyBlbnRpdHkgb3IgYnVzaW5lc3Mgc2VydmljZS48L3Nob3J0ZGVzYz4NCi08Y29uYm9keT4NCi08c2VjdGlvbj48dGl0bGU+UHJlcmVxdWlzaXRlczwvdGl0bGU+PHA+QmVmb3JlIHlvdSBjcmVhdGUgYSBXZWIgc2VydmljZSBvcg0KLWNsaWVudCB1c2luZyB0aGUgQW50IHRhc2tzLCB5b3UgbmVlZCB0byBjb21wbGV0ZSBhIGZldyBwcmVyZXF1aXNpdGVzLjwvcD48dWw+DQotPGxpPkluc3RhbGwgQXBhY2hlIFRvbWNhdCwgY3JlYXRlIGEgc2VydmVyLCBhbmQgY3JlYXRlIGEgZHluYW1pYyBXZWIgcHJvamVjdA0KLWFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZlciBhcyBkZXNjcmliZWQgaW4gPHhyZWYgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdG9waWNzL3R0b21jYXRzZXJ2LmRpdGEiPkNyZWF0aW5nDQotYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC94cmVmPjwvbGk+DQotPGxpPkltcG9ydCB0aGUgcmVxdWlyZWQgQW50IGZpbGVzIGludG8geW91ciB3b3Jrc3BhY2U6PG9sPg0KLTxsaT5DcmVhdGUgYSBwcm9qZWN0LjwvbGk+DQotPGxpPkltcG9ydCB0aGUgcmVxdWlyZWQgQW50IGZpbGVzLiBTZWxlY3QgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+RmlsZTwvdWljb250cm9sPg0KLTx1aWNvbnRyb2w+TmV3PC91aWNvbnRyb2w+PHVpY29udHJvbD5PdGhlcjwvdWljb250cm9sPjx1aWNvbnRyb2w+V2ViIFNlcnZpY2VzPC91aWNvbnRyb2w+DQotPHVpY29udHJvbD5BbnQgRmlsZXM8L3VpY29udHJvbD48dWljb250cm9sPk5leHQ8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPi48L2xpPg0KLTxsaT5TZWxlY3QgdGhlIHByb2plY3QgeW91IGNyZWF0ZWQsIGFuZCBjbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2xpPg0KLTwvb2w+VGhyZWUgZmlsZXMgd2lsbCBiZSBpbXBvcnRlZCBpbnRvIHRoaXMgcHJvamVjdDo8dWw+DQotPGxpPndzZ2VuLnhtbCAtIHRoaXMgaXMgdGhlIEFudCBmaWxlLjwvbGk+DQotPGxpPmF4aXNzZXJ2aWNlLnByb3BlcnRpZXMgLSB0aGlzIGlzIGEgc2FtcGxlIEFudCBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlZA0KLWJ5IHRoZSBBbnQgZmlsZS4gWW91IGNhbiBtb2RpZnkgdGhlIHByb3BlcnRpZXMgaW4gdGhpcyBmaWxlIHRvIGdlbmVyYXRlIGENCi1XZWIgc2VydmljZS48L2xpPg0KLTxsaT5heGlzY2xpZW50LnByb3BlcnRpZXMgLSB0aGlzIGlzIGEgc2FtcGxlIEFudCBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlZA0KLWJ5IHRoZSBBbnQgZmlsZS4gWW91IGNhbiBtb2RpZnkgdGhlIHByb3BlcnRpZXMgaW4gdGhpcyBmaWxlIHRvIGdlbmVyYXRlIGENCi1XZWIgc2VydmljZSBjbGllbnQuPC9saT4NCi08L3VsPjwvbGk+DQotPGxpPkNyZWF0ZSBhIGR5bmFtaWMgV2ViIHByb2plY3QgZm9yIHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQuPC9saT4NCi08L3VsPjwvc2VjdGlvbj4NCi08c2VjdGlvbj48dGl0bGU+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBvciBjbGllbnQ8L3RpdGxlPjxwPk9uY2UgeW91J3ZlIGNvbXBsZXRlZA0KLXRoZSBwcmVyZXF1aXNpdGVzIHlvdSBjYW4gZG8gdGhlIGZvbGxvd2luZzo8L3A+PC9zZWN0aW9uPg0KLTwvY29uYm9keT4NCi08L2NvbmNlcHQ+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL2N3c2F4aXNhbnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MjY1YzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL2N3c2F4aXNhbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJJZiB5b3UgcHJlZmVyIG5vdCB0byB1c2UgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZCwgeW91IGNhbiB1c2UgQW50IGZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4gVGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MgY2FuIGJlIHJ1biBpbiB0d28gd2F5czogdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdXNpbmcgUnVuIEFzICZndDsgQW50IEJ1aWxkLi4uLCBvciB0aGV5IGNhbiBiZSBydW4gaGVhZGxlc3MgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lLiBPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdCBpdCwgYW5kIHB1Ymxpc2ggaXQgYXMgYSBidXNpbmVzcyBlbnRpdHkgb3IgYnVzaW5lc3Mgc2VydmljZS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSWYgeW91IHByZWZlciBub3QgdG8gdXNlIHRoZSBXZWIgc2VydmljZSB3aXphcmQsIHlvdSBjYW4gdXNlIEFudCBmaWxlcyB0byBjcmVhdGUgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIHRoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQuIFRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHVzaW5nIFJ1biBBcyAmZ3Q7IEFudCBCdWlsZC4uLiwgb3IgdGhleSBjYW4gYmUgcnVuIGhlYWRsZXNzIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZS4gT25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UsIHlvdSBjYW4gdGhlbiBkZXBsb3kgaXQgdG8gYSBzZXJ2ZXIsIHRlc3QgaXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHdid3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90d2J3c2NsaWVudGEuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjcmVhdGluZ2F3ZWJzZXJ2aWNlZnJvbWFqYXZhYmVhbiIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudCBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcKLUFudCB0YXNrczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3JlYXRpbmdhd2Vic2VydmljZWZyb21hamF2YWJlYW4iPjxhIG5hbWU9ImNyZWF0aW5nYXdlYnNlcnZpY2Vmcm9tYWphdmFiZWFuIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYgotc2VydmljZXMgQW50IHRhc2tzPC9oMT4KLQotCi0KLTxkaXY+PHA+SWYgeW91IHByZWZlciBub3QgdG8gdXNlIHRoZSBXZWIgc2VydmljZSB3aXphcmQsIHlvdSBjYW4gdXNlIEFudAotZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LgotVGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MgY2FuIGJlIHJ1biBpbiB0d28gd2F5czogdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UKLXVzaW5nIDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuIEFzPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFudCBCdWlsZC4uLjwvc3Bhbj4KLTwvc3Bhbj4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UKLXlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdAotaXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+UHJlcmVxdWlzaXRlczwvaDQ+PHA+QmVmb3JlIHlvdSBjcmVhdGUgYSBXZWIgc2VydmljZSBvcgotY2xpZW50IHVzaW5nIHRoZSBBbnQgdGFza3MsIHlvdSBuZWVkIHRvIGNvbXBsZXRlIGEgZmV3IHByZXJlcXVpc2l0ZXMuPC9wPgotPHVsPgotPGxpPkluc3RhbGwgQXBhY2hlIFRvbWNhdCwgY3JlYXRlIGEgc2VydmVyLCBhbmQgY3JlYXRlIGEgZHluYW1pYyBXZWIgcHJvamVjdAotYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmVyIGFzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90b3BpY3MvdHRvbWNhdHNlcnYuaHRtbCI+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC9hPjwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHJlcXVpcmVkIEFudCBmaWxlcyBpbnRvIHlvdXIgd29ya3NwYWNlOjxvbD4KLTxsaT5DcmVhdGUgYSBwcm9qZWN0LjwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHJlcXVpcmVkIEFudCBmaWxlcy4gU2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZTwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldzwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PdGhlcjwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgU2VydmljZXM8L3NwYW4+Ci0gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BbnQgRmlsZXM8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj48L3NwYW4+LjwvbGk+Ci0KLTxsaT5TZWxlY3QgdGhlIHByb2plY3QgeW91IGNyZWF0ZWQsIGFuZCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+LjwvbGk+Ci0KLTwvb2w+Ci1UaHJlZSBmaWxlcyB3aWxsIGJlIGltcG9ydGVkIGludG8gdGhpcyBwcm9qZWN0Ojx1bD4KLTxsaT53c2dlbi54bWwgLSB0aGlzIGlzIHRoZSBBbnQgZmlsZS48L2xpPgotCi08bGk+YXhpc3NlcnZpY2UucHJvcGVydGllcyAtIHRoaXMgaXMgYSBzYW1wbGUgQW50IHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2VkCi1ieSB0aGUgQW50IGZpbGUuIFlvdSBjYW4gbW9kaWZ5IHRoZSBwcm9wZXJ0aWVzIGluIHRoaXMgZmlsZSB0byBnZW5lcmF0ZSBhCi1XZWIgc2VydmljZS48L2xpPgotCi08bGk+YXhpc2NsaWVudC5wcm9wZXJ0aWVzIC0gdGhpcyBpcyBhIHNhbXBsZSBBbnQgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZWQKLWJ5IHRoZSBBbnQgZmlsZS4gWW91IGNhbiBtb2RpZnkgdGhlIHByb3BlcnRpZXMgaW4gdGhpcyBmaWxlIHRvIGdlbmVyYXRlIGEKLVdlYiBzZXJ2aWNlIGNsaWVudC48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPkNyZWF0ZSBhIGR5bmFtaWMgV2ViIHByb2plY3QgZm9yIHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBvciBjbGllbnQ8L2g0PjxwPk9uY2UgeW91J3ZlIGNvbXBsZXRlZAotdGhlIHByZXJlcXVpc2l0ZXMgeW91IGNhbiBkbyB0aGUgZm9sbG93aW5nOjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaDwvYT48L3N0cm9uZz48YnIgLz4KLVlvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB0byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiBCb3RoIHRvcC1kb3duIGFuZCBib3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3R3YndzY2xpZW50YS5odG1sIj5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3M8L2E+PC9zdHJvbmc+PGJyIC8+Ci1JZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuPC9saT4KLTwvdWw+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA0ZGFmYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcmJ1d3NhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0iYm90dG9tLXVwYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+Qm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvdGl0bGU+DQotPHNob3J0ZGVzYz5UaGUgPHVzZXJpbnB1dD5heGlzc2VydmljZS5wcm9wZXJ0aWVzPC91c2VyaW5wdXQ+IGZpbGUgaXMgdXNlZA0KLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UNCi0uIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuPC9zaG9ydGRlc2M+DQotPHJlZmJvZHk+DQotPHNlY3Rpb24+PHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPjxwYXJtbD48cGxlbnRyeT4NCi08cHQ+U2NlbmFyaW9UeXBlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnNlcnZpY2U8L2NvZGVwaD4gPC9zeW5waD48L3BkPg0KLTxwZD5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhDQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkluaXRpYWxTZWxlY3Rpb248L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4NCi15b3VyIHdvcmtzcGFjZS4gRm9yIGV4YW1wbGUgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvbXlTZXJ2aWNlLndzZGw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9teUJlYW4uamF2YTwvdXNlcmlucHV0DQotPjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0UnVudGltZXM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHJ1bnRpbWUgb3B0aW9ucw0KLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0U2VydmVyczwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPklmIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZS5SdW50aW1lSWQ8L3B0Pg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgV2ViIHNlcnZpY2UncyBydW50aW1lLiBUaGlzIHBhcmFtZXRlciBzaG91bGQgbm90DQotYmUgbW9kaWZpZWQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlNlcnZpY2UuU2VydmVySWQ8L3B0Pg0KLTxwZD5PcHRpb25zOjxzbD4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+MzIsDQotNDAsIDQxLCA1MCw8L2NvZGVwaD4gb3IgPGNvZGVwaD41NTwvY29kZXBoPik8L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+ODE8L2NvZGVwaD4gb3IgPGNvZGVwaD45MDwvY29kZXBoPikgPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qYm9zc3g8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjMyMzwvY29kZXBoPiBvciA8Y29kZXBoPjQ8L2NvZGVwaD4pPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qb25hczQ8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlcnMud2Vic3BoZXJlLjY8L2NvZGVwaD48L3NsaT4NCi08L3NsPjwvcGQ+DQotPHBkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSB0YXJnZXQgc2VydmVyLiBEZWxldGUgb3IgY29tbWVudCBvdXQgdGhpcyBwYXJhbWV0ZXINCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncw0KLW9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TZXJ2aWNlUHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBzZXJ2aWNlIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvciBKYXZhDQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdA0KLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZUVhclByb2plY3ROYW1lPC9wdD4NCi08cGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlDQotb3IgSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQ0KLUVBUiBwcm9qZWN0IHdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWFwcGluZ3M8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy48L3BkPg0KLTxwZD5NYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZA0KLVdTREwuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IHBhY2thZ2UgPSBuYW1lc3BhY2UgPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkphdmFPdXRwdXQ8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhbiBleGlzdGluZyBKYXZhIHNvdXJjZSBmb2xkZXIgZm9yDQotdGhlIGdlbmVyYXRlZCBKYXZhIGNvZGUuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk1ldGhvZHM8L3B0Pg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gbGltaXQgd2hpY2ggbWV0aG9kcyBhcmUgZXhwb3NlZCBpbiB0aGUgc2VydmljZS4NCi1JdCBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBtZXRob2Qgc2lnbmF0dXJlcy4gRm9yDQotZXhhbXBsZSwgPHVzZXJpbnB1dD5tZXRob2QxKHBhcm1UeXBlMSkgbWV0aG9kMihwYXJtVHlwZTIpPC91c2VyaW5wdXQ+LiBJZg0KLW5vIGxpc3QgaXMgcHJvdmlkZWQsIGFsbCBtZXRob2RzIGFyZSBleHBvc2VkLiA8L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U3R5bGU8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+RE9DVU1FTlQ8L2NvZGVwaD4gPGNvZGVwaD5SUEM8L2NvZGVwaD4gPGNvZGVwaD5XUkFQUEVEPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5TZWxlY3QgdGhlIFNPQVAgbWVzc2FnZSBzdHlsZS4gVGhlIGRlZmF1bHQgaXMgPGNvZGVwaD5ET0NVTUVOVDwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+VXNlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPkxJVEVSQUw8L2NvZGVwaD4gPGNvZGVwaD5FTkNPREVEPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5TZWxlY3QgaWYgdGhlIFNPQVAgbWVzc2FnZSB3aWxsIGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4gVGhlIGRlZmF1bHQgaXMgPGNvZGVwaD5MSVRFUkFMPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5PdmVyd3JpdGVGaWxlc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gb3ZlcndyaXRlIGFueSBmaWxlIHRoYXQgaXQNCi1jcmVhdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q3JlYXRlRm9sZGVyc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY3JlYXRlIGFueSBuZWNjZXNzYXJ5IGZvbGRlcnMuDQotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8Y29kZXBoPnRydWU8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNoZWNrb3V0RmlsZXNFbmFibGVkPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQNCi1wcm9tcHRpbmcgeW91LiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48L3Bhcm1sPjwvc2VjdGlvbj4NCi08L3JlZmJvZHk+DQotPC9yZWZlcmVuY2U+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3JidXdzYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3JidXdzYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWM0MzI5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkJvdHRvbS11cCBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIGF4aXNzZXJ2aWNlLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgYXhpc3NlcnZpY2UucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHdid3NhLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iYm90dG9tLXVwYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkJvdHRvbS11cCBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImJvdHRvbS11cGF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiPjxhIG5hbWU9ImJvdHRvbS11cGF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkJvdHRvbS11cCBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2gxPgotCi0KLTxkaXY+PHA+VGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc3NlcnZpY2UucHJvcGVydGllczwva2JkPiBmaWxlIGlzIHVzZWQKLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UKLS4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5QYXJhbWV0ZXJzPC9oND48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+U2NlbmFyaW9UeXBlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnNlcnZpY2U8L3NhbXA+IDwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhCi1XZWIgc2VydmljZSBvciBhIFdlYiBzZXJ2aWNlIGNsaWVudC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Jbml0aWFsU2VsZWN0aW9uPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuIHdpdGhpbgoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L2tiZD48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0UnVudGltZXM8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPklmIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkxpc3RTZXJ2ZXJzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuUnVudGltZUlkPC9kdD4KLQotPGRkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QKLWJlIG1vZGlmaWVkLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuU2VydmVySWQ8L2R0PgotCi08ZGQ+T3B0aW9uczo8dWwgY2xhc3M9InNpbXBsZSI+Ci08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjMyLAotNDAsIDQxLCA1MCw8L3NhbXA+IG9yIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjU1PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjgxPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj45MDwvc2FtcD4pIDwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuamJvc3N4PC9zYW1wPiAod2hlcmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+eDwvc2FtcD4gaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+MzIzPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj40PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpvbmFzNDwvc2FtcD48L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L3NhbXA+PC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJzLndlYnNwaGVyZS42PC9zYW1wPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgdGFyZ2V0IHNlcnZlci4gRGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoaXMgcGFyYW1ldGVyCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncwotb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U2VydmljZVByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIHNlcnZpY2UgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmEKLWJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlIHByb2plY3QKLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TZXJ2aWNlRWFyUHJvamVjdE5hbWU8L2R0PgotCi08ZGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlCi1vciBKYXZhIGJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TWFwcGluZ3M8L2R0PgotCi08ZGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gYSBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MuPC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+TWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG5hbWVzIGluIHRoZSBnZW5lcmF0ZWQKLVdTREwuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IHBhY2thZ2UgPSBuYW1lc3BhY2UgPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+SmF2YU91dHB1dDwvZHQ+Ci0KLTxkZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhbiBleGlzdGluZyBKYXZhIHNvdXJjZSBmb2xkZXIgZm9yCi10aGUgZ2VuZXJhdGVkIEphdmEgY29kZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5NZXRob2RzPC9kdD4KLQotPGRkPlVzZSB0aGlzIHBhcmFtZXRlciB0byBsaW1pdCB3aGljaCBtZXRob2RzIGFyZSBleHBvc2VkIGluIHRoZSBzZXJ2aWNlLgotSXQgbXVzdCBiZSBpbiB0aGUgZm9ybSBvZiBhIHNwYWNlIGRlbGltaXRlZCBzdHJpbmcgb2YgbWV0aG9kIHNpZ25hdHVyZXMuIEZvcgotZXhhbXBsZSwgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5tZXRob2QxKHBhcm1UeXBlMSkgbWV0aG9kMihwYXJtVHlwZTIpPC9rYmQ+LiBJZgotbm8gbGlzdCBpcyBwcm92aWRlZCwgYWxsIG1ldGhvZHMgYXJlIGV4cG9zZWQuIDwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlN0eWxlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPkRPQ1VNRU5UPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5SUEM8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPldSQVBQRUQ8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlNlbGVjdCB0aGUgU09BUCBtZXNzYWdlIHN0eWxlLiBUaGUgZGVmYXVsdCBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj5ET0NVTUVOVDwvc2FtcD4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+VXNlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPkxJVEVSQUw8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPkVOQ09ERUQ8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlNlbGVjdCBpZiB0aGUgU09BUCBtZXNzYWdlIHdpbGwgYmUgbGl0ZXJhbCBvciBlbmNvZGVkLiBUaGUgZGVmYXVsdCBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj5MSVRFUkFMPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5PdmVyd3JpdGVGaWxlc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBvdmVyd3JpdGUgYW55IGZpbGUgdGhhdCBpdAotY3JlYXRlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DcmVhdGVGb2xkZXJzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNyZWF0ZSBhbnkgbmVjY2Vzc2FyeSBmb2xkZXJzLgotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DaGVja291dEZpbGVzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQKLXByb21wdGluZyB5b3UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotPC9kbD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvdHdid3NhLmh0bWwiIHRpdGxlPSJZb3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC4gQm90aCB0b3AtZG93biBhbmQgYm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpcyBzdXBwb3J0ZWQgd2l0aCB0aGUgQW50IHRhc2tzLiI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaDwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcnRkd3NhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcnRkd3NhLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNDAwMGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iDQotICJyZWZlcmVuY2UuZHRkIj4NCi08cmVmZXJlbmNlIGlkPSJ0b3AtZG93bmF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPlRvcC1kb3duIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvdGl0bGU+DQotPHNob3J0ZGVzYz5UaGUgPHVzZXJpbnB1dD5heGlzc2VydmljZS5wcm9wZXJ0aWVzPC91c2VyaW5wdXQ+IGZpbGUgaXMgdXNlZA0KLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UNCi0uIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuPC9zaG9ydGRlc2M+DQotPHJlZmJvZHk+DQotPHNlY3Rpb24+PHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPjxwYXJtbD48cGxlbnRyeT4NCi08cHQ+U2NlbmFyaW9UeXBlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnNlcnZpY2U8L2NvZGVwaD4gPC9zeW5waD48L3BkPg0KLTxwZD5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhDQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkluaXRpYWxTZWxlY3Rpb248L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4NCi15b3VyIHdvcmtzcGFjZS4gRm9yIGV4YW1wbGUgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvbXlTZXJ2aWNlLndzZGw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9teUJlYW4uamF2YTwvdXNlcmlucHV0DQotPjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0UnVudGltZXM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHJ1bnRpbWUgb3B0aW9ucw0KLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0U2VydmVyczwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPklmIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZS5SdW50aW1lSWQ8L3B0Pg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgV2ViIHNlcnZpY2UncyBydW50aW1lLiBUaGlzIHBhcmFtZXRlciBzaG91bGQgbm90DQotYmUgbW9kaWZpZWQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlNlcnZpY2UuU2VydmVySWQ8L3B0Pg0KLTxwZD5PcHRpb25zOjxzbD4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+MzIsDQotNDAsIDQxLCA1MCw8L2NvZGVwaD4gb3IgPGNvZGVwaD41NTwvY29kZXBoPik8L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+ODE8L2NvZGVwaD4gb3IgPGNvZGVwaD45MDwvY29kZXBoPikgPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qYm9zc3g8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjMyMzwvY29kZXBoPiBvciA8Y29kZXBoPjQ8L2NvZGVwaD4pPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qb25hczQ8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlcnMud2Vic3BoZXJlLjY8L2NvZGVwaD48L3NsaT4NCi08L3NsPjwvcGQ+DQotPHBkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSB0YXJnZXQgc2VydmVyLiBEZWxldGUgb3IgY29tbWVudCBvdXQgdGhpcyBwYXJhbWV0ZXINCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncw0KLW9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TZXJ2aWNlUHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBzZXJ2aWNlIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvciBKYXZhDQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdA0KLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZUVhclByb2plY3ROYW1lPC9wdD4NCi08cGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlDQotb3IgSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQ0KLUVBUiBwcm9qZWN0IHdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWFwcGluZ3M8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy48L3BkPg0KLTxwZD5NYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQNCi1KYXZhIHRlbXBsYXRlIGNsYXNzZXMuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0DQotbmFtZXNwYWNlPXBhY2thZ2UgPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkphdmFPdXRwdXQ8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhbiBleGlzdGluZyBKYXZhIHNvdXJjZSBmb2xkZXIgZm9yDQotdGhlIGdlbmVyYXRlZCBKYXZhIGNvZGUuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk1ldGhvZHM8L3B0Pg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gbGltaXQgd2hpY2ggbWV0aG9kcyBhcmUgZXhwb3NlZCBpbiB0aGUgc2VydmljZS4NCi1JdCBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBtZXRob2Qgc2lnbmF0dXJlcy4gRm9yDQotZXhhbXBsZSwgPHVzZXJpbnB1dD5tZXRob2QxKHBhcm1UeXBlMSkgbWV0aG9kMihwYXJtVHlwZTIpPC91c2VyaW5wdXQ+LiBJZg0KLW5vIGxpc3QgaXMgcHJvdmlkZWQsIGFsbCBtZXRob2RzIGFyZSBleHBvc2VkLiA8L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U3R5bGU8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+RE9DVU1FTlQ8L2NvZGVwaD4gPGNvZGVwaD5SUEM8L2NvZGVwaD4gPGNvZGVwaD5XUkFQUEVEPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5TZWxlY3QgdGhlIFNPQVAgbWVzc2FnZSBzdHlsZS4gVGhlIGRlZmF1bHQgaXMgPGNvZGVwaD5ET0NVTUVOVDwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+VXNlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPkxJVEVSQUw8L2NvZGVwaD4gPGNvZGVwaD5FTkNPREVEPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5TZWxlY3QgaWYgdGhlIFNPQVAgbWVzc2FnZSB3aWxsIGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4gVGhlIGRlZmF1bHQgaXMgPGNvZGVwaD5MSVRFUkFMPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5PdmVyd3JpdGVGaWxlc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gb3ZlcndyaXRlIGFueSBmaWxlIHRoYXQgaXQNCi1jcmVhdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q3JlYXRlRm9sZGVyc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY3JlYXRlIGFueSBuZWNjZXNzYXJ5IGZvbGRlcnMuDQotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8Y29kZXBoPnRydWU8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNoZWNrb3V0RmlsZXNFbmFibGVkPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQNCi1wcm9tcHRpbmcgeW91LiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48L3Bhcm1sPjwvc2VjdGlvbj4NCi08L3JlZmJvZHk+DQotPC9yZWZlcmVuY2U+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjMxMzJmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9ydGR3c2EuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlRvcC1kb3duIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgYXhpc3NlcnZpY2UucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBheGlzc2VydmljZS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlIC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4iIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0b3AtZG93bmF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRvcC1kb3duYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSI+PGEgbmFtZT0idG9wLWRvd25heGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2gxPgotCi0KLTxkaXY+PHA+VGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc3NlcnZpY2UucHJvcGVydGllczwva2JkPiBmaWxlIGlzIHVzZWQKLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UKLS4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5QYXJhbWV0ZXJzPC9oND48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+U2NlbmFyaW9UeXBlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnNlcnZpY2U8L3NhbXA+IDwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhCi1XZWIgc2VydmljZSBvciBhIFdlYiBzZXJ2aWNlIGNsaWVudC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Jbml0aWFsU2VsZWN0aW9uPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuIHdpdGhpbgoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L2tiZD48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0UnVudGltZXM8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPklmIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkxpc3RTZXJ2ZXJzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuUnVudGltZUlkPC9kdD4KLQotPGRkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QKLWJlIG1vZGlmaWVkLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuU2VydmVySWQ8L2R0PgotCi08ZGQ+T3B0aW9uczo8dWwgY2xhc3M9InNpbXBsZSI+Ci08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjMyLAotNDAsIDQxLCA1MCw8L3NhbXA+IG9yIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjU1PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjgxPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj45MDwvc2FtcD4pIDwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuamJvc3N4PC9zYW1wPiAod2hlcmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+eDwvc2FtcD4gaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+MzIzPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj40PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpvbmFzNDwvc2FtcD48L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L3NhbXA+PC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJzLndlYnNwaGVyZS42PC9zYW1wPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgdGFyZ2V0IHNlcnZlci4gRGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoaXMgcGFyYW1ldGVyCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncwotb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U2VydmljZVByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIHNlcnZpY2UgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmEKLWJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlIHByb2plY3QKLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TZXJ2aWNlRWFyUHJvamVjdE5hbWU8L2R0PgotCi08ZGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlCi1vciBKYXZhIGJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TWFwcGluZ3M8L2R0PgotCi08ZGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gYSBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MuPC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+TWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFja2FnZSBuYW1lcyBvZiB0aGUgZ2VuZXJhdGVkCi1KYXZhIHRlbXBsYXRlIGNsYXNzZXMuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0Ci1uYW1lc3BhY2U9cGFja2FnZSA8L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5KYXZhT3V0cHV0PC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGFuIGV4aXN0aW5nIEphdmEgc291cmNlIGZvbGRlciBmb3IKLXRoZSBnZW5lcmF0ZWQgSmF2YSBjb2RlLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk1ldGhvZHM8L2R0PgotCi08ZGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHdoaWNoIG1ldGhvZHMgYXJlIGV4cG9zZWQgaW4gdGhlIHNlcnZpY2UuCi1JdCBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBtZXRob2Qgc2lnbmF0dXJlcy4gRm9yCi1leGFtcGxlLCA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPm1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMik8L2tiZD4uIElmCi1ubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4gPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U3R5bGU8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+RE9DVU1FTlQ8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPlJQQzwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+V1JBUFBFRDwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+U2VsZWN0IHRoZSBTT0FQIG1lc3NhZ2Ugc3R5bGUuIFRoZSBkZWZhdWx0IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPkRPQ1VNRU5UPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Vc2U8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+TElURVJBTDwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+RU5DT0RFRDwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+U2VsZWN0IGlmIHRoZSBTT0FQIG1lc3NhZ2Ugd2lsbCBiZSBsaXRlcmFsIG9yIGVuY29kZWQuIFRoZSBkZWZhdWx0IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPkxJVEVSQUw8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk92ZXJ3cml0ZUZpbGVzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIG92ZXJ3cml0ZSBhbnkgZmlsZSB0aGF0IGl0Ci1jcmVhdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNyZWF0ZUZvbGRlcnNFbmFibGVkPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY3JlYXRlIGFueSBuZWNjZXNzYXJ5IGZvbGRlcnMuCi1CeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNoZWNrb3V0RmlsZXNFbmFibGVkPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY2hlY2tvdXQgZmlsZXMgZnJvbSBDVlMgd2l0aG91dAotcHJvbXB0aW5nIHlvdS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi08L2RsPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCIgdGl0bGU9IllvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB0byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiBCb3RoIHRvcC1kb3duIGFuZCBib3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuIj5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yd3NjbGllbnRhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzM0NmNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yd3NjbGllbnRhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0iYXhpc3dlYnNlcnZpY2VjbGllbnRjb21tYW5kbGluZXJlZmVyZW5jZSIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+QXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvdGl0bGU+DQotPHNob3J0ZGVzYz5UaGUgPHVzZXJpbnB1dD5heGlzY2xpZW50LnByb3BlcnRpZXM8L3VzZXJpbnB1dD4gZmlsZSBpcyB1c2VkIHRvDQotcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZQ0KLWNsaWVudC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3Nob3J0ZGVzYz4NCi08cmVmYm9keT4NCi08c2VjdGlvbj48dGl0bGU+UGFyYW1ldGVyczwvdGl0bGU+PHBhcm1sPjxwbGVudHJ5Pg0KLTxwdD5TY2VuYXJpb1R5cGU8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+Y2xpZW50PC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhDQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkluaXRpYWxTZWxlY3Rpb248L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4NCi15b3VyIHdvcmtzcGFjZS4gRm9yIGV4YW1wbGUgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvbXlTZXJ2aWNlLndzZGw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9teUJlYW4uamF2YTwvdXNlcmlucHV0DQotPjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0UnVudGltZXM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHJ1bnRpbWUgb3B0aW9ucw0KLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0U2VydmVyczwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPklmIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50LlJ1bnRpbWVJZDwvcHQ+DQotPHBkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QNCi1iZSBtb2RpZmllZC48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50LlNlcnZlcklkPC9wdD4NCi08cGQ+T3B0aW9uczo8c2w+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0Lng8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjMyLA0KLTQwLCA0MSwgNTAsPC9jb2RlcGg+IG9yIDxjb2RlcGg+NTU8L2NvZGVwaD4pPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy53ZWJsb2dpY3g8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjgxPC9jb2RlcGg+IG9yIDxjb2RlcGg+OTA8L2NvZGVwaD4pIDwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuamJvc3N4PC9jb2RlcGg+ICh3aGVyZSA8Y29kZXBoPng8L2NvZGVwaD4gaXMgPGNvZGVwaD4zMjM8L2NvZGVwaD4gb3IgPGNvZGVwaD40PC9jb2RlcGg+KTwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuam9uYXM0PC9jb2RlcGg+PC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5vcmFjbGUxMDEzPC9jb2RlcGg+PC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJzLndlYnNwaGVyZS42PC9jb2RlcGg+PC9zbGk+DQotPC9zbD48L3BkPg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgdGFyZ2V0IHNlcnZlci4gRGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoaXMgcGFyYW1ldGVyDQotdG8gaGF2ZSB0aGUgQW50IHRhc2sgc2VsZWN0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBzZXJ2ZXIgc2V0dGluZ3MNCi1vZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdC48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50UHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBjbGllbnQgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmENCi1iZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZSBwcm9qZWN0DQotd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5DbGllbnRFYXJQcm9qZWN0TmFtZTwvcHQ+DQotPHBkPkJ5IGRlZmF1bHQgdGhlIGNsaWVudCBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yDQotSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQ0KLUVBUiBwcm9qZWN0IHdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50Q29tcG9uZW50VHlwZTwvcHQ+DQotPHBkPjxwPk9wdGlvbnM6IDx1c2VyaW5wdXQ+anN0LndlYjwvdXNlcmlucHV0PiA8dXNlcmlucHV0PmpzdC5qYXZhPC91c2VyaW5wdXQ+PC9wPjxwPlVzZQ0KLXRoaXMgcGFyYW1ldGVyIHRvIHNlbGVjdCB0aGUgdHlwZSBvZiBjbGllbnQgcHJvamVjdC4gVGhlIG9ubHkgdmFsaWQgY2xpZW50DQotcHJvamVjdCB0eXBlIGZvciBBeGlzIGNsaWVudHMgaXMgPHVzZXJpbnB1dD5qc3Qud2ViPC91c2VyaW5wdXQ+LjwvcD48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q3VzdG9taXplQ2xpZW50TWFwcGluZ3M8L3B0Pg0KLTxwZD48cD5PcHRpb25zOiA8dXNlcmlucHV0PnRydWU8L3VzZXJpbnB1dD4gPHVzZXJpbnB1dD5mYWxzZTwvdXNlcmlucHV0PjwvcD48cD5NYXBwaW5ncw0KLWFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIFdTREwuIFRoZQ0KLWNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZTwvcD48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWFwcGluZ3M8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy4gPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk92ZXJ3cml0ZUZpbGVzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBvdmVyd3JpdGUgYW55IGZpbGUgdGhhdCBpdA0KLWNyZWF0ZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGZpbGUuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5DcmVhdGVGb2xkZXJzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjcmVhdGUgYW55IG5lY2Nlc3NhcnkgZm9sZGVycy4NCi1CeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2hlY2tvdXRGaWxlc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY2hlY2tvdXQgZmlsZXMgZnJvbSBDVlMgd2l0aG91dA0KLXByb21wdGluZyB5b3UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjwvcGFybWw+PC9zZWN0aW9uPg0KLTwvcmVmYm9keT4NCi08L3JlZmVyZW5jZT4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J3c2NsaWVudGEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QyYjM0My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgYXhpc2NsaWVudC5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlIGNsaWVudC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIGF4aXNjbGllbnQucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSBjbGllbnQuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHdid3NjbGllbnRhLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iYXhpc3dlYnNlcnZpY2VjbGllbnRjb21tYW5kbGluZXJlZmVyZW5jZSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkF4aXMgV2ViIHNlcnZpY2UgY2xpZW50IEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImF4aXN3ZWJzZXJ2aWNlY2xpZW50Y29tbWFuZGxpbmVyZWZlcmVuY2UiPjxhIG5hbWU9ImF4aXN3ZWJzZXJ2aWNlY2xpZW50Y29tbWFuZGxpbmVyZWZlcmVuY2UiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkF4aXMgV2ViIHNlcnZpY2UgY2xpZW50IEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2gxPgotCi0KLTxkaXY+PHA+VGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc2NsaWVudC5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUgaXMgdXNlZCB0bwotcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZQotY2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlBhcmFtZXRlcnM8L2g0PjxkbD4KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TY2VuYXJpb1R5cGU8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+Y2xpZW50PC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhCi1XZWIgc2VydmljZSBvciBhIFdlYiBzZXJ2aWNlIGNsaWVudC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Jbml0aWFsU2VsZWN0aW9uPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuIHdpdGhpbgoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L2tiZD48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0UnVudGltZXM8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPklmIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkxpc3RTZXJ2ZXJzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudC5SdW50aW1lSWQ8L2R0PgotCi08ZGQ+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIFdlYiBzZXJ2aWNlJ3MgcnVudGltZS4gVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIG5vdAotYmUgbW9kaWZpZWQuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2xpZW50LlNlcnZlcklkPC9kdD4KLQotPGRkPk9wdGlvbnM6PHVsIGNsYXNzPSJzaW1wbGUiPgotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0Lng8L3NhbXA+ICh3aGVyZSA8c2FtcCBjbGFzcz0iY29kZXBoIj54PC9zYW1wPiBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj4zMiwKLTQwLCA0MSwgNTAsPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj41NTwvc2FtcD4pPC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy53ZWJsb2dpY3g8L3NhbXA+ICh3aGVyZSA8c2FtcCBjbGFzcz0iY29kZXBoIj54PC9zYW1wPiBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj44MTwvc2FtcD4gb3IgPHNhbXAgY2xhc3M9ImNvZGVwaCI+OTA8L3NhbXA+KSA8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpib3NzeDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjMyMzwvc2FtcD4gb3IgPHNhbXAgY2xhc3M9ImNvZGVwaCI+NDwvc2FtcD4pPC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qb25hczQ8L3NhbXA+PC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5vcmFjbGUxMDEzPC9zYW1wPjwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVycy53ZWJzcGhlcmUuNjwvc2FtcD48L2xpPgotCi08L3VsPgotPC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIHRhcmdldCBzZXJ2ZXIuIERlbGV0ZSBvciBjb21tZW50IG91dCB0aGlzIHBhcmFtZXRlcgotdG8gaGF2ZSB0aGUgQW50IHRhc2sgc2VsZWN0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBzZXJ2ZXIgc2V0dGluZ3MKLW9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudFByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIGNsaWVudCBwcm9qZWN0IGlzIGdpdmVuIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgb3IgSmF2YQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdAotd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudEVhclByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIGNsaWVudCBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yCi1KYXZhIGJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2xpZW50Q29tcG9uZW50VHlwZTwvZHQ+Ci0KLTxkZD48cD5PcHRpb25zOiA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPmpzdC53ZWI8L2tiZD4gPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5qc3QuamF2YTwva2JkPjwvcD4KLTxwPlVzZQotdGhpcyBwYXJhbWV0ZXIgdG8gc2VsZWN0IHRoZSB0eXBlIG9mIGNsaWVudCBwcm9qZWN0LiBUaGUgb25seSB2YWxpZCBjbGllbnQKLXByb2plY3QgdHlwZSBmb3IgQXhpcyBjbGllbnRzIGlzIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+anN0LndlYjwva2JkPi48L3A+Ci08L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DdXN0b21pemVDbGllbnRNYXBwaW5nczwvZHQ+Ci0KLTxkZD48cD5PcHRpb25zOiA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPnRydWU8L2tiZD4gPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5mYWxzZTwva2JkPjwvcD4KLTxwPk1hcHBpbmdzCi1hcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZCBXU0RMLiBUaGUKLWNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZTwvcD4KLTwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk1hcHBpbmdzPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGEgcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLiA8L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5PdmVyd3JpdGVGaWxlc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBvdmVyd3JpdGUgYW55IGZpbGUgdGhhdCBpdAotY3JlYXRlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DcmVhdGVGb2xkZXJzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNyZWF0ZSBhbnkgbmVjY2Vzc2FyeSBmb2xkZXJzLgotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DaGVja291dEZpbGVzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQKLXByb21wdGluZyB5b3UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotPC9kbD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvdHdid3NjbGllbnRhLmh0bWwiIHRpdGxlPSJJZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIj5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3M8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWU5MTQzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2EuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idHRkd3NhIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoPC90aXRsZT4NCi08dGl0bGVhbHRzPg0KLTxzZWFyY2h0aXRsZT5DcmVhdGluZyBhbiBBeGlzIHJ1bnRpbWUgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2g8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+WW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViDQotc2VydmljZSB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC4gQm90aCB0b3AtZG93biBhbmQgYm90dG9tLXVwIFdlYg0KLXNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuPC9zaG9ydGRlc2M+DQotPHRhc2tib2R5Pg0KLTxwcmVyZXE+QmVmb3JlIGNyZWF0aW5nIHRoZSBXZWIgc2VydmljZSB5b3UgbXVzdDo8dWw+DQotPGxpPmNvbXBsZXRlIHRoZSBwcmVyZXF1aXNpdGVzIGxpc3RlZCBpbjogPHhyZWYgaHJlZj0iY3dzYXhpc2FudC5kaXRhIj48L3hyZWY+PC9saT4NCi08bGk+aWYgeW91IGFyZSBjcmVhdGluZyBhIHRvcC1kb3duIFdlYiBzZXJ2aWNlLCBjcmVhdGUgb3IgaW1wb3J0IGEgV1NETCBmaWxlDQotaW50byB0aGUgPHVzZXJpbnB1dD5XZWJDb25lbnQ8L3VzZXJpbnB1dD4gZm9sZGVyIG9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0DQoteW91IGNyZWF0ZWQuPC9saT4NCi08bGk+SWYgeW91IGFyZSBjcmVhdGluZyBhIGJvdHRvbS11cCBXZWIgc2VydmljZSwgY3JlYXRlIG9yIGltcG9ydCBhIEphdmEgYmVhbg0KLWludG8gdGhlIDx1c2VyaW5wdXQ+c3JjPC91c2VyaW5wdXQ+IGZvbGRlciBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdC48L2xpPg0KLTwvdWw+PC9wcmVyZXE+DQotPGNvbnRleHQ+SW4gb3JkZXIgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZSB5b3UgbmVlZCB0byBtb2RpZnkgdGhlIEFudCBmaWxlDQotYW5kIHRoZSBzZXJ2aWNlIEFudCBwcm9wZXJ0aWVzIGZpbGUuPC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPkVkaXQgdGhlIEFudCBmaWxlICg8dXNlcmlucHV0PndzZ2VuLnhtbDwvdXNlcmlucHV0PikgdGhhdCB5b3UgaW1wb3J0ZWQNCi1pbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLiBFbnN1cmUgdGhhdCBpdCBwb2ludHMgdG8gdGhlIHNlcnZpY2UgQW50IHByb3BlcnRpZXMNCi1maWxlOiBpdCBzaG91bGQgY29udGFpbiBhIGxpbmUgc3RhdGluZyA8dXNlcmlucHV0PiZsdDtwcm9wZXJ0eSBmaWxlPSJheGlzc2VydmljZS5wcm9wZXJ0aWVzIi8+PC91c2VyaW5wdXQ+LjwvY21kPg0KLTxpbmZvPlNhdmUgYW55IGNoYW5nZXMgdGhhdCB5b3UgaGF2ZSBtYWRlLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5FZGl0IHRoZSA8dXNlcmlucHV0PmF4aXNzZXJ2aWNlLnByb3BlcnRpZXM8L3VzZXJpbnB1dD4gZmlsZSB0aGF0DQoteW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuPC9jbWQ+DQotPHN1YnN0ZXBzPg0KLTxzdWJzdGVwPjxjbWQ+RW5zdXJlIHRoYXQgdGhlIHNjZW5hcmlvVHlwZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHNlcnZpY2UuPC9jbWQ+DQotPC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2V0IHRoZSB3b3Jrc3BhY2UgcGFyYW1ldGVyIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbg0KLW9mIHlvdXIgV1NETCBmaWxlIG9yIEphdmEgYmVhbi48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5BbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBkZWxldGVkIGlmIG5vdA0KLWV4cGxpY2l0bHkgc2V0LiBUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycyB3aWxsIGJlIHJldHJpZXZlZA0KLWZyb20gdGhlIGR5bmFtaWMgcHJvamVjdCBzZXR0aW5ncyBhbmQgcHJlZmVyZW5jZXMuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotb24gaG93IHRvIHNldCB0aGVzZSBwYXJhbWV0ZXJzIHJlZmVyIHRvOiA8L2NtZD48aW5mbz48dWw+DQotPGxpPjx4cmVmIGhyZWY9InJ0ZHdzYS5kaXRhIj48L3hyZWY+PC9saT4NCi08bGk+PHhyZWYgaHJlZj0icmJ1d3NhLmRpdGEiPjwveHJlZj48L2xpPg0KLTwvdWw+PC9pbmZvPjwvc3Vic3RlcD4NCi08L3N1YnN0ZXBzPg0KLTxpbmZvPlNhdmUgdGhlIDx1c2VyaW5wdXQ+YXhpc3NlcnZpY2UucHJvcGVydGllczwvdXNlcmlucHV0PiBmaWxlLjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5SaWdodC1jbGljayA8dXNlcmlucHV0PndzZ2VuLnhtbDwvdXNlcmlucHV0PiBhbmQgc2VsZWN0IDxtZW51Y2FzY2FkZT4NCi08dWljb250cm9sPlJ1biBBczwvdWljb250cm9sPjx1aWNvbnRyb2w+QW50IEJ1aWxkLi4uPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgZGlhbG9nIHRoYXQgb3BlbnMsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5KUkU8L3VpY29udHJvbD4gdGFiDQotYW5kIHNlbGVjdCA8dWljb250cm9sPlJ1biBpbiB0aGUgc2FtZSBKUkUgYXMgdGhlIHdvcmtzcGFjZTwvdWljb250cm9sPi48L2NtZD4NCi08aW5mbz5DbGljayA8dWljb250cm9sPkFwcGx5PC91aWNvbnRyb2w+IGFuZCB0aGVuIGNsaWNrIDx1aWNvbnRyb2w+UnVuPC91aWNvbnRyb2w+LjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaGFzIGJlZW4gZ2VuZXJhdGVkIHRoZSBjb25zb2xlIGRpc3BsYXlzIGEgPHVzZXJpbnB1dD5CdWlsZA0KLVN1Y2Nlc3NmdWw8L3VzZXJpbnB1dD4gbWVzc2FnZS48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cmVzdWx0PlRoZSBXU0RMIGZpbGUgZm9yIHRoZSBzZXJ2aWNlIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbg0KLXRoZSBkeW5hbWljIFdlYiBwcm9qZWN0J3MgV2ViQ29udGVudFx3c2RsIGZvbGRlci4gVGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsDQotaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzDQotV2ViQ29udGVudFxXRUItSU5GIGZvbGRlcjo8dWw+DQotPGxpPndlYi54bWw8L2xpPg0KLTxsaT51bmRlcGxveS53c2RkPC9saT4NCi08bGk+ZGVwbG95LndzZGQgPC9saT4NCi08L3VsPklmIHlvdSBhcmUgY3JlYXRpbmcgYSB0b3AtZG93biBXZWIgc2VydmljZSwgV2ViIHNlcnZpY2UgZmlsZXMgc2ltaWxhcg0KLXRvIHRoZSBmb2xsb3dpbmcgb25lcyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHBsYWNlZCB1bmRlciB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzDQotc3JjIGZvbGRlci4gRGVwZW5kaW5nIG9uIHRoZSBXU0RMIGZpbGUgb24gd2hpY2ggdGhlIFdlYiBzZXJ2aWNlIGlzIGJhc2VkLA0KLXRoZSBmaWxlcyBmb3IgeW91ciBXZWIgc2VydmljZSBtYXkgYmUgZGlmZmVyZW50Ojx1bD4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPl9Qb3J0VHlwZS5qYXZhPC9saT4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPl9TZXJ2aWNlLmphdmE8L2xpPg0KLTxsaT48aT5TZXJ2aWNlX25hbWU8L2k+X1NlcnZpY2VMb2NhdG9yLmphdmE8L2xpPg0KLTxsaT48aT5TZXJ2aWNlX25hbWU8L2k+U09BUEltcGwuamF2YTwvbGk+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5TT0FQU2tlbGV0b24uamF2YTwvbGk+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5TT0FQU3R1Yi5qYXZhPC9saT4NCi08L3VsPiA8L3Jlc3VsdD4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NGVmYzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2giIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaXMgc3VwcG9ydGVkIHdpdGggdGhlIEFudCB0YXNrcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaXMgc3VwcG9ydGVkIHdpdGggdGhlIEFudCB0YXNrcy4iIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jd3NheGlzYW50Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9ydGR3c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3JidXdzYS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR0ZHdzYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGFuIEF4aXMgcnVudGltZSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHRkd3NhIj48YSBuYW1lPSJ0dGR3c2EiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2g8L2gxPgotCi0KLQotPGRpdj48cD5Zb3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIKLXNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIKLXNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5CZWZvcmUgY3JlYXRpbmcgdGhlIFdlYiBzZXJ2aWNlIHlvdSBtdXN0Ojx1bD4KLTxsaT5jb21wbGV0ZSB0aGUgcHJlcmVxdWlzaXRlcyBsaXN0ZWQgaW46IDxhIGhyZWY9ImN3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQmIzEwO2ZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4mIzEwO1RoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlJiMxMDt1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UmIzEwO3lvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdCYjMTA7aXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuIj5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3M8L2E+PC9saT4KLQotPGxpPmlmIHlvdSBhcmUgY3JlYXRpbmcgYSB0b3AtZG93biBXZWIgc2VydmljZSwgY3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZQotaW50byB0aGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5XZWJDb25lbnQ8L2tiZD4gZm9sZGVyIG9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0Ci15b3UgY3JlYXRlZC48L2xpPgotCi08bGk+SWYgeW91IGFyZSBjcmVhdGluZyBhIGJvdHRvbS11cCBXZWIgc2VydmljZSwgY3JlYXRlIG9yIGltcG9ydCBhIEphdmEgYmVhbgotaW50byB0aGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5zcmM8L2tiZD4gZm9sZGVyIG9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+SW4gb3JkZXIgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZSB5b3UgbmVlZCB0byBtb2RpZnkgdGhlIEFudCBmaWxlCi1hbmQgdGhlIHNlcnZpY2UgQW50IHByb3BlcnRpZXMgZmlsZS48L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FZGl0IHRoZSBBbnQgZmlsZSAoPGtiZCBjbGFzcz0idXNlcmlucHV0Ij53c2dlbi54bWw8L2tiZD4pIHRoYXQgeW91IGltcG9ydGVkCi1pbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLiBFbnN1cmUgdGhhdCBpdCBwb2ludHMgdG8gdGhlIHNlcnZpY2UgQW50IHByb3BlcnRpZXMKLWZpbGU6IGl0IHNob3VsZCBjb250YWluIGEgbGluZSBzdGF0aW5nIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+Jmx0O3Byb3BlcnR5IGZpbGU9ImF4aXNzZXJ2aWNlLnByb3BlcnRpZXMiLyZndDs8L2tiZD4uPC9zcGFuPgotIFNhdmUgYW55IGNoYW5nZXMgdGhhdCB5b3UgaGF2ZSBtYWRlLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+RWRpdCB0aGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5heGlzc2VydmljZS5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUgdGhhdAoteW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuPC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5FbnN1cmUgdGhhdCB0aGUgc2NlbmFyaW9UeXBlIHBhcmFtZXRlciBpcyBzZXQgdG8gc2VydmljZS48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNldCB0aGUgd29ya3NwYWNlIHBhcmFtZXRlciBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgbG9jYXRpb24KLW9mIHlvdXIgV1NETCBmaWxlIG9yIEphdmEgYmVhbi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5BbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBkZWxldGVkIGlmIG5vdAotZXhwbGljaXRseSBzZXQuIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0cmlldmVkCi1mcm9tIHRoZSBkeW5hbWljIHByb2plY3Qgc2V0dGluZ3MgYW5kIHByZWZlcmVuY2VzLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotb24gaG93IHRvIHNldCB0aGVzZSBwYXJhbWV0ZXJzIHJlZmVyIHRvOiA8L3NwYW4+IDx1bD4KLTxsaT48YSBocmVmPSJydGR3c2EuaHRtbCIgdGl0bGU9IlRoZSBheGlzc2VydmljZS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCYjMTA7dG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSYjMTA7LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiI+VG9wLWRvd24gQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJyYnV3c2EuaHRtbCIgdGl0bGU9IlRoZSBheGlzc2VydmljZS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCYjMTA7dG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSYjMTA7LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiI+Qm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvYT48L2xpPgotCi08L3VsPgotPC9saT4KLQotPC9vbD4KLQotIFNhdmUgdGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc3NlcnZpY2UucHJvcGVydGllczwva2JkPiBmaWxlLgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5SaWdodC1jbGljayA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPndzZ2VuLnhtbDwva2JkPiBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+Ci08c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gQXM8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QW50IEJ1aWxkLi4uPC9zcGFuPjwvc3Bhbj48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBkaWFsb2cgdGhhdCBvcGVucywgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5KUkU8L3NwYW4+IHRhYgotYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gaW4gdGhlIHNhbWUgSlJFIGFzIHRoZSB3b3Jrc3BhY2U8L3NwYW4+Ljwvc3Bhbj4KLSBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BcHBseTwvc3Bhbj4gYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuPC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+T25jZSB5b3VyIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGdlbmVyYXRlZCB0aGUgY29uc29sZSBkaXNwbGF5cyBhIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+QnVpbGQKLVN1Y2Nlc3NmdWw8L2tiZD4gbWVzc2FnZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhlIFdTREwgZmlsZSBmb3IgdGhlIHNlcnZpY2Ugd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIGluCi10aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzIFdlYkNvbnRlbnRcd3NkbCBmb2xkZXIuIFRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbAotaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzCi1XZWJDb250ZW50XFdFQi1JTkYgZm9sZGVyOjx1bD4KLTxsaT53ZWIueG1sPC9saT4KLQotPGxpPnVuZGVwbG95LndzZGQ8L2xpPgotCi08bGk+ZGVwbG95LndzZGQgPC9saT4KLQotPC91bD4KLUlmIHlvdSBhcmUgY3JlYXRpbmcgYSB0b3AtZG93biBXZWIgc2VydmljZSwgV2ViIHNlcnZpY2UgZmlsZXMgc2ltaWxhcgotdG8gdGhlIGZvbGxvd2luZyBvbmVzIHdpbGwgYmUgY3JlYXRlZCBhbmQgcGxhY2VkIHVuZGVyIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0J3MKLXNyYyBmb2xkZXIuIERlcGVuZGluZyBvbiB0aGUgV1NETCBmaWxlIG9uIHdoaWNoIHRoZSBXZWIgc2VydmljZSBpcyBiYXNlZCwKLXRoZSBmaWxlcyBmb3IgeW91ciBXZWIgc2VydmljZSBtYXkgYmUgZGlmZmVyZW50Ojx1bD4KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5fUG9ydFR5cGUuamF2YTwvbGk+Ci0KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5fU2VydmljZS5qYXZhPC9saT4KLQotPGxpPjxlbT5TZXJ2aWNlX25hbWU8L2VtPl9TZXJ2aWNlTG9jYXRvci5qYXZhPC9saT4KLQotPGxpPjxlbT5TZXJ2aWNlX25hbWU8L2VtPlNPQVBJbXBsLmphdmE8L2xpPgotCi08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+U09BUFNrZWxldG9uLmphdmE8L2xpPgotCi08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+U09BUFN0dWIuamF2YTwvbGk+Ci0KLTwvdWw+Ci0gPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3J0ZHdzYS5odG1sIj5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgYXhpc3NlcnZpY2UucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3JidXdzYS5odG1sIj5Cb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIGF4aXNzZXJ2aWNlLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL2N3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQgZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiBUaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlLCB5b3UgY2FuIHRoZW4gZGVwbG95IGl0IHRvIGEgc2VydmVyLCB0ZXN0IGl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLiI+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIgc2VydmljZXMgQW50IHRhc2tzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2NsaWVudGEuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2NsaWVudGEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3YjVjNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NjbGllbnRhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InR3c2NsaWVudGEiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrczwvdGl0bGU+DQotPHRpdGxlYWx0cz4NCi08c2VhcmNodGl0bGU+Q3JlYXRpbmcgYW4gQXhpcyBydW50aW1lIFdlYiBzZXJ2aWNlIGNsaWVudCBmcm9tIGEgV1NETCBmaWxlDQotdXNpbmcgY29tbWFuZCBsaW5lIHRvb2xzPC9zZWFyY2h0aXRsZT4NCi08L3RpdGxlYWx0cz4NCi08c2hvcnRkZXNjPklmIHlvdSBoYXZlIGEgV1NETCBmaWxlIHlvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZQ0KLXRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50Ljwvc2hvcnRkZXNjPg0KLTx0YXNrYm9keT4NCi08cHJlcmVxPkJlZm9yZSBjcmVhdGluZyB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHlvdSBtdXN0Ojx1bD4NCi08bGk+Y29tcGxldGUgdGhlIHByZXJlcXVpc2l0ZXMgbGlzdGVkIGluOiA8eHJlZiBocmVmPSJjd3NheGlzYW50LmRpdGEiPjwveHJlZj48L2xpPg0KLTxsaT5jcmVhdGUgb3IgaW1wb3J0IGEgV1NETCBmaWxlIGludG8gdGhlIGR5bmFtaWMgV2ViIHByb2plY3QgeW91IGNyZWF0ZWQuPC9saT4NCi08L3VsPjwvcHJlcmVxPg0KLTxjb250ZXh0PkluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUNCi1BbnQgZmlsZSBhbmQgdGhlIEFudCBwcm9wZXJ0aWVzIGZpbGUuPC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPkVkaXQgdGhlIEFudCBmaWxlICg8dXNlcmlucHV0PndzZ2VuLnhtbDwvdXNlcmlucHV0PikgdGhhdCB5b3UgaW1wb3J0ZWQNCi1pbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLiBFbnN1cmUgdGhhdCBpdCBwb2ludHMgdG8gdGhlIGNsaWVudCBBbnQgcHJvcGVydGllcw0KLWZpbGU6IGl0IHNob3VsZCBjb250YWluIGEgbGluZSBzdGF0aW5nIDx1c2VyaW5wdXQ+Jmx0O3Byb3BlcnR5IGZpbGU9ImF4aXNjbGllbnQucHJvcGVydGllcyIvPjwvdXNlcmlucHV0Pi48L2NtZD4NCi08aW5mbz5TYXZlIGFueSBjaGFuZ2VzIHRoYXQgeW91IGhhdmUgbWFkZS48L2luZm8+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+RWRpdCB0aGUgPHVzZXJpbnB1dD5heGlzY2xpZW50LnByb3BlcnRpZXM8L3VzZXJpbnB1dD4gZmlsZSB0aGF0DQoteW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuPC9jbWQ+DQotPHN1YnN0ZXBzPg0KLTxzdWJzdGVwPjxjbWQ+RW5zdXJlIHRoYXQgdGhlIHNjZW5hcmlvVHlwZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGNsaWVudC48L2NtZD4NCi08L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZXQgdGhlIHdvcmtzcGFjZSBwYXJhbWV0ZXIgc28gdGhhdCBpdCBwb2ludHMgdG8gdGhlIGxvY2F0aW9uDQotb2YgeW91ciBXU0RMIGZpbGUuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+QWxsIG90aGVyIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBzaG91bGQgYmUgZGVsZXRlZCBpZiBub3QNCi1leHBsaWNpdGx5IHNldC4gVGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgd2lsbCBiZSByZXRyaWV2ZWQNCi1mcm9tIHRoZSBkeW5hbWljIHByb2plY3Qgc2V0dGluZ3MuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQNCi10aGVzZSBwYXJhbWV0ZXJzIHJlZmVyIHRvOiA8eHJlZiBocmVmPSJyd3NjbGllbnRhLmRpdGEiPjwveHJlZj48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08aW5mbz5TYXZlIHRoZSA8dXNlcmlucHV0PmF4aXNjbGllbnQucHJvcGVydGllczwvdXNlcmlucHV0PiBmaWxlLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5SaWdodC1jbGljayA8dXNlcmlucHV0PndzZ2VuLnhtbDwvdXNlcmlucHV0PiBhbmQgc2VsZWN0IDxtZW51Y2FzY2FkZT4NCi08dWljb250cm9sPlJ1biBBczwvdWljb250cm9sPjx1aWNvbnRyb2w+QW50IEJ1aWxkLi4uPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgZGlhbG9nIHRoYXQgb3BlbnMsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5KUkU8L3VpY29udHJvbD4gdGFiDQotYW5kIHNlbGVjdCA8dWljb250cm9sPlJ1biBpbiB0aGUgc2FtZSBKUkUgYXMgdGhlIHdvcmtzcGFjZTwvdWljb250cm9sPi48L2NtZD4NCi08aW5mbz5DbGljayA8dWljb250cm9sPkFwcGx5PC91aWNvbnRyb2w+IGFuZCB0aGVuIGNsaWNrIDx1aWNvbnRyb2w+UnVuPC91aWNvbnRyb2w+LjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaGFzIGJlZW4gZ2VuZXJhdGVkIHRoZSBjb25zb2xlIGRpc3BsYXlzIGEgPHVzZXJpbnB1dD5CdWlsZA0KLVN1Y2Nlc3NmdWw8L3VzZXJpbnB1dD4gbWVzc2FnZS48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cmVzdWx0PlRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIGluIHRoZSBkeW5hbWljDQotV2ViIHByb2plY3QncyBXZWJDb250ZW50XHdzZGwgZm9sZGVyOjx1bD4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPlNPQVAud3NkbCA8L2xpPg0KLTwvdWw+VGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgaW4gdGhlIGR5bmFtaWMNCi1XZWIgcHJvamVjdCdzIFdlYkNvbnRlbnRcV0VCLUlORiBmb2xkZXI6PHVsPg0KLTxsaT51bmRlcGxveS53c2RkPC9saT4NCi08bGk+ZGVwbG95LndzZGQgPC9saT4NCi08L3VsPlRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIHVuZGVyIHRoZSBkeW5hbWljDQotV2ViIHByb2plY3QncyBzcmMgZm9sZGVyLiBEZXBlbmRpbmcgb24gdGhlIFdTREwgZmlsZSBvbiB3aGljaCB0aGUgV2ViIHNlcnZpY2UNCi1jbGllbnQgaXMgYmFzZWQsIHRoZSBmaWxlcyBmb3IgeW91ciBXZWIgc2VydmljZSBjbGllbnQgbWF5IGJlIGRpZmZlcmVudDo8dWw+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5Qcm94eS5qYXZhPC9saT4NCi08bGk+Z2V0PGk+U2VydmljZV9uYW1lPC9pPi5qYXZhPC9saT4NCi08bGk+Z2V0PGk+U2VydmljZV9uYW1lPC9pPkxvY2F0b3IuamF2YTwvbGk+DQotPGxpPmdldDxpPlNlcnZpY2VfbmFtZTwvaT5Tb2FwLmphdmE8L2xpPg0KLTxsaT5nZXQ8aT5TZXJ2aWNlX25hbWU8L2k+U29hcFByb3h5LmphdmE8L2xpPg0KLTxsaT5nZXQ8aT5TZXJ2aWNlX25hbWU8L2k+U29hcFN0dWIuamF2YTwvbGk+DQotPC91bD4gPC9yZXN1bHQ+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzY2xpZW50YS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzY2xpZW50YS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTA3NmMzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2NsaWVudGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3MiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSWYgeW91IGhhdmUgYSBXU0RMIGZpbGUgeW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJJZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY3dzYXhpc2FudC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvcndzY2xpZW50YS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2NsaWVudGEiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBhbiBBeGlzIHJ1bnRpbWUgV2ViIHNlcnZpY2UgY2xpZW50IGZyb20gYSBXU0RMIGZpbGUKLXVzaW5nIGNvbW1hbmQgbGluZSB0b29sczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHdzY2xpZW50YSI+PGEgbmFtZT0idHdzY2xpZW50YSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2tzPC9oMT4KLQotCi0KLTxkaXY+PHA+SWYgeW91IGhhdmUgYSBXU0RMIGZpbGUgeW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlCi10byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPkJlZm9yZSBjcmVhdGluZyB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHlvdSBtdXN0Ojx1bD4KLTxsaT5jb21wbGV0ZSB0aGUgcHJlcmVxdWlzaXRlcyBsaXN0ZWQgaW46IDxhIGhyZWY9ImN3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQmIzEwO2ZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4mIzEwO1RoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlJiMxMDt1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UmIzEwO3lvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdCYjMTA7aXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuIj5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3M8L2E+PC9saT4KLQotPGxpPmNyZWF0ZSBvciBpbXBvcnQgYSBXU0RMIGZpbGUgaW50byB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCB5b3UgY3JlYXRlZC48L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPkluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUKLUFudCBmaWxlIGFuZCB0aGUgQW50IHByb3BlcnRpZXMgZmlsZS48L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FZGl0IHRoZSBBbnQgZmlsZSAoPGtiZCBjbGFzcz0idXNlcmlucHV0Ij53c2dlbi54bWw8L2tiZD4pIHRoYXQgeW91IGltcG9ydGVkCi1pbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLiBFbnN1cmUgdGhhdCBpdCBwb2ludHMgdG8gdGhlIGNsaWVudCBBbnQgcHJvcGVydGllcwotZmlsZTogaXQgc2hvdWxkIGNvbnRhaW4gYSBsaW5lIHN0YXRpbmcgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij4mbHQ7cHJvcGVydHkgZmlsZT0iYXhpc2NsaWVudC5wcm9wZXJ0aWVzIi8mZ3Q7PC9rYmQ+Ljwvc3Bhbj4KLSBTYXZlIGFueSBjaGFuZ2VzIHRoYXQgeW91IGhhdmUgbWFkZS48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkVkaXQgdGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc2NsaWVudC5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUgdGhhdAoteW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuPC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkVuc3VyZSB0aGF0IHRoZSBzY2VuYXJpb1R5cGUgcGFyYW1ldGVyIGlzIHNldCB0byBjbGllbnQuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNldCB0aGUgd29ya3NwYWNlIHBhcmFtZXRlciBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgbG9jYXRpb24KLW9mIHlvdXIgV1NETCBmaWxlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+QWxsIG90aGVyIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBzaG91bGQgYmUgZGVsZXRlZCBpZiBub3QKLWV4cGxpY2l0bHkgc2V0LiBUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycyB3aWxsIGJlIHJldHJpZXZlZAotZnJvbSB0aGUgZHluYW1pYyBwcm9qZWN0IHNldHRpbmdzLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0Ci10aGVzZSBwYXJhbWV0ZXJzIHJlZmVyIHRvOiA8YSBocmVmPSJyd3NjbGllbnRhLmh0bWwiIHRpdGxlPSJUaGUgYXhpc2NsaWVudC5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byYjMTA7cGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSYjMTA7Y2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiI+QXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvYT48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotIFNhdmUgdGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc2NsaWVudC5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5SaWdodC1jbGljayA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPndzZ2VuLnhtbDwva2JkPiBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+Ci08c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gQXM8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QW50IEJ1aWxkLi4uPC9zcGFuPjwvc3Bhbj48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBkaWFsb2cgdGhhdCBvcGVucywgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5KUkU8L3NwYW4+IHRhYgotYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gaW4gdGhlIHNhbWUgSlJFIGFzIHRoZSB3b3Jrc3BhY2U8L3NwYW4+Ljwvc3Bhbj4KLSBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BcHBseTwvc3Bhbj4gYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuPC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+T25jZSB5b3VyIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGdlbmVyYXRlZCB0aGUgY29uc29sZSBkaXNwbGF5cyBhIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+QnVpbGQKLVN1Y2Nlc3NmdWw8L2tiZD4gbWVzc2FnZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgaW4gdGhlIGR5bmFtaWMKLVdlYiBwcm9qZWN0J3MgV2ViQ29udGVudFx3c2RsIGZvbGRlcjo8dWw+Ci08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+U09BUC53c2RsIDwvbGk+Ci0KLTwvdWw+Ci1UaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiB0aGUgZHluYW1pYwotV2ViIHByb2plY3QncyBXZWJDb250ZW50XFdFQi1JTkYgZm9sZGVyOjx1bD4KLTxsaT51bmRlcGxveS53c2RkPC9saT4KLQotPGxpPmRlcGxveS53c2RkIDwvbGk+Ci0KLTwvdWw+Ci1UaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCB1bmRlciB0aGUgZHluYW1pYwotV2ViIHByb2plY3QncyBzcmMgZm9sZGVyLiBEZXBlbmRpbmcgb24gdGhlIFdTREwgZmlsZSBvbiB3aGljaCB0aGUgV2ViIHNlcnZpY2UKLWNsaWVudCBpcyBiYXNlZCwgdGhlIGZpbGVzIGZvciB5b3VyIFdlYiBzZXJ2aWNlIGNsaWVudCBtYXkgYmUgZGlmZmVyZW50Ojx1bD4KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5Qcm94eS5qYXZhPC9saT4KLQotPGxpPmdldDxlbT5TZXJ2aWNlX25hbWU8L2VtPi5qYXZhPC9saT4KLQotPGxpPmdldDxlbT5TZXJ2aWNlX25hbWU8L2VtPkxvY2F0b3IuamF2YTwvbGk+Ci0KLTxsaT5nZXQ8ZW0+U2VydmljZV9uYW1lPC9lbT5Tb2FwLmphdmE8L2xpPgotCi08bGk+Z2V0PGVtPlNlcnZpY2VfbmFtZTwvZW0+U29hcFByb3h5LmphdmE8L2xpPgotCi08bGk+Z2V0PGVtPlNlcnZpY2VfbmFtZTwvZW0+U29hcFN0dWIuamF2YTwvbGk+Ci0KLTwvdWw+Ci0gPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3J3c2NsaWVudGEuaHRtbCI+QXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBheGlzY2xpZW50LnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgY2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL2N3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQgZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiBUaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlLCB5b3UgY2FuIHRoZW4gZGVwbG95IGl0IHRvIGEgc2VydmVyLCB0ZXN0IGl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLiI+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIgc2VydmljZXMgQW50IHRhc2tzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2YmZlZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+DQotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIg0KLSAibWFwLmR0ZCI+DQotPG1hcCBhbmNob3JyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwI3dzYXhpc2FudCINCi1pZD0id3NheGlzYW50IiB0aXRsZT0id3NheGlzYW50Ij4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2N3c2F4aXNhbnQuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIEF4aXMgcnVudGltZSBXZWIgc2VydmljZXMgdXNpbmcgQW50IHRhc2tzIj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3R3YndzYS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaCI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9ydGR3c2EuZGl0YSIgbmF2dGl0bGU9IlRvcC1kb3duIEF4aXMgV2ViIHNlcnZpY2UgQW50IGZpbGUgcmVmZXJlbmNlIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcmJ1d3NhLmRpdGEiIG5hdnRpdGxlPSJCb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgZmlsZSByZWZlcmVuY2UiPg0KLTwvdG9waWNyZWY+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3R3YndzY2xpZW50YS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2giPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcndzY2xpZW50YS5kaXRhIiBuYXZ0aXRsZT0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IGZpbGUgcmVmZXJlbmNlIj4NCi08L3RvcGljcmVmPg0KLTwvdG9waWNyZWY+DQotPC90b3BpY3JlZj4NCi08L21hcD4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2Q4YWM2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sI3dzYXhpc2FudCIgbGFiZWw9IndzYXhpc2FudCIgdG9waWM9InRvcGljcy9jd3NheGlzYW50Lmh0bWwiPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MiIGhyZWY9InRvcGljcy9jd3NheGlzYW50Lmh0bWwiPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoIiBocmVmPSJ0b3BpY3MvdHdid3NhLmh0bWwiPgotPHRvcGljIGxhYmVsPSJUb3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiIGhyZWY9InRvcGljcy9ydGR3c2EuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJCb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlIiBocmVmPSJ0b3BpY3MvcmJ1d3NhLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrcyIgaHJlZj0idG9waWNzL3R3YndzY2xpZW50YS5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgaHJlZj0idG9waWNzL3J3c2NsaWVudGEuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWI4M2ZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWEwODhlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIxNjY3NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3c3QtY29tbWFuZC1mMS54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCi1nZW5lcmF0ZVNvdXJjZUJ1bmRsZT1mYWxzZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGVlZjYyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSEgcGx1Zy1pbiBwcm9wZXJ0aWVzCi1wbHVnaW5OYW1lICAgICA9IFdlYiBzZXJ2aWNlcyBVSQotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3MGMwNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiID8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI+Ci0JCTxjb250ZXh0cyBmaWxlPSJ3c3QtY29tbWFuZC1mMS54bWwiIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpIi8+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3dzdC1jb21tYW5kLWYxLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3Avd3N0LWNvbW1hbmQtZjEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzYzYzY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3Avd3N0LWNvbW1hbmQtZjEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPz4KLTxjb250ZXh0cz4KLQotPCEtLW9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS0tPgotPGNvbnRleHQgaWQ9IlBQQUQwMDAxIj4KLTwhLS1BY3Rpb24gRGlhbG9ncyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Zb3UgY2FuIHVzZSB0aGlzIHBhZ2UgdG8gY2hvb3NlIHdoaWNoIFdlYiBzZXJ2aWNlcyBwb3B1cCBhY3Rpb25zIGFyZSBkaXNwbGF5ZWQgb3IgaGlkZGVuLiBXaGVuIHVzaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBsYXVuY2VkIGZyb20gYSBwb3B1cCBtZW51IHlvdSBtYXkgc2VlIGEgY2hlY2sgYm94IHRoYXQgZ2l2ZXMgeW91IHRoZSBvcHRpb24gb2YgaGlkaW5nIHRoZSBwb3B1cCBhY3Rpb24gdGhhdCB5b3UgaGF2ZSBqdXN0IHBlcmZvcm1lZC4gSWYgeW91IHNlbGVjdCB0aGF0IGNoZWNrYm94IGl0IHdpbGwgc2VsZWN0IHRoZSByZXNwZWN0aXZlIGNoZWNrYm94IG9uIHRoaXMgcHJlZmVyZW5jZSBwYWdlLiBJZiB5b3UgaGF2ZSBjaG9zZW4gdG8gaGlkZSBhIHBvcHVwIGFjdGlvbiB0aGF0IHlvdSB3YW50IHRvIGRpc3BsYXkgdXNlIHRoaXMgcGFnZSB0byBtYWtlIHRoZSBwb3B1cCBhY3Rpb24gdmlzaWJsZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFEMDAwMiI+Ci08IS0tc2hvdyBhbGwgY2hlY2sgYm94IG9uIHRoZSBBY3Rpb24gRGlhbG9ncyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5CeSBzZWxlY3RpbmcgdGhpcyBjaGVja2JveCwgYWxsIHZhbGlkIFdlYiBzZXJ2aWNlcyBwb3B1cCBhY3Rpb25zIHdpbGwgYmUgZGlzcGxheWVkIHdoZW4geW91IHNlbGVjdCBhIGZpbGUgaW4geW91ciB3b3Jrc3BhY2UgYW5kIHJpZ2h0LWNsaWNrIGl0LiBBbHRlcm5hdGVseSB5b3UgY2FuIHNlbGVjdCB0byBkaXNwbGF5IG9yIGhpZGUgaW5kaXZpZHVhbCBwb3B1cCBhY3Rpb25zLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUQwMDAzIj4KLTwhLS1oaWRlIGFsbCBjaGVjayBib3ggb24gdGhlIEFjdGlvbiBEaWFsb2dzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkJ5IHNlbGVjdGluZyB0aGlzIGNoZWNrYm94LCBhbGwgV2ViIHNlcnZpY2VzIHBvcHVwIGFjdGlvbnMgd2lsbCBiZSBoaWRkZW4gd2hlbiB5b3Ugc2VsZWN0IGEgZmlsZSBpbiB5b3VyIHdvcmtzcGFjZSBhbmQgcmlnaHQtY2xpY2sgaXQuIEFsdGVybmF0ZWx5IHlvdSBjYW4gc2VsZWN0IHRvIGRpc3BsYXkgb3IgaGlkZSBpbmRpdmlkdWFsIHBvcHVwIGFjdGlvbnMuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iVFdQMDAwMSI+Ci08IS0tc2hvdy9oaWRlIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPldoZW4gdXNpbmcgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGxhdW5jZWQgZnJvbSBhIHBvcHVwIG1lbnUsIHRoaXMgY2hlY2sgYm94IHRoYXQgZ2l2ZXMgeW91IHRoZSBvcHRpb24gb2YgaGlkaW5nIHRoZSBwb3B1cCBhY3Rpb24gdGhhdCB5b3UgaGF2ZSBqdXN0IHBlcmZvcm1lZC4gSWYgeW91IHNlbGVjdCB0aGUgY2hlY2tib3ggaXQgd2lsbCBzZWxlY3QgdGhlIHJlc3BlY3RpdmUgY2hlY2tib3ggb24gdGhlIFdlYiBzZXJ2aWNlcyA+IFBvcHVwIERpYWxvZyBTZWxlY3Rpb24gcHJlZmVyZW5jZSBwYWdlLiBJZiB5b3UgaGF2ZSBjaG9zZW4gdG8gaGlkZSBhIHBvcHVwIGFjdGlvbiB0aGF0IHlvdSB3YW50IHRvIGRpc3BsYXksIGdvIHRvIFdpbmRvdyA+IFByZWZlcmVuY2VzID4gV2ViIHNlcnZpY2VzID4gUG9wdXAgRGlhbG9nIFNlbGVjdGlvbiwgYW5kIHVzZSB0aGlzIHBhZ2UgdG8gbWFrZSB0aGUgcG9wdXAgYWN0aW9uIHZpc2libGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08L2NvbnRleHRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mjc1MDFmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2IyMzgxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkxYzMyNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCi1nZW5lcmF0ZVNvdXJjZUJ1bmRsZT1mYWxzZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjNiNTdmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1wbHVnaW5OYW1lICAgPSBXZWIgU2VydmljZXMgVUkKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzdlNzFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj4KLQkJPGNvbnRleHRzIGZpbGU9IndlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MudWkiLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3Avd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC93ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNzc4ZGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC93ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLQotPGNvbnRleHRzPgotCi08IS0tV1NJUGFnZS5qYXZhLS0+Ci08Y29udGV4dCBpZD0iUFdTSTAwMDEiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj5UaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbiB0b29scyBzdXBwb3J0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdSBjYW4gY2hvb3NlIHRvIG1ha2UgeW91ciBXZWIgc2VydmljZSBjb21wbGlhbnQgb3Igbm9uLWNvbXBsaWFudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzLCBhbmQgc2VjdXJlZCBXZWIgc2VydmljZXMsIGFyZSBub3QgV1MtSSBjb21wbGlhbnQuCi0KLVlvdSBjYW4gc2V0IHRoZSBsZXZlbCBvZiBjb21wbGlhbmNlIGZvciBlaXRoZXIgdGhlIEJhc2ljIFByb2ZpbGUgYW5kIHRoZSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUsIG9yIGZvciB0aGUgQXR0YWNobWVudHMgUHJvZmlsZS4gWW91IGNhbiBzZWxlY3QgZnJvbSB0aHJlZSBsZXZlbHMgb2YgY29tcGxpYW5jZSB3aXRoIFdTLUkgc3BlY2lmaWNhdGlvbnM6Ci0tIFJlcXVpcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBwcmV2ZW50cyB5b3UgZnJvbSBjcmVhdGluZyBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UuCi0tIFN1Z2dlc3QgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UsIGJ1dCBwcm92aWRlcyBhIHZpc2libGUgd2FybmluZyBzdGF0aW5nIGhvdyB0aGUgc2VydmljZSBpcyBub24tY29tcGxpYW50LgotLSBJZ25vcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UgYW5kIGRvZXMgbm90IG5vdGlmeSB5b3Ugb2Ygbm9uLWNvbXBsaWFuY2UuCi0KLVlvdSBjYW4gYWxzbyBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi0KLUlmIHlvdSBzZWxlY3QgdG8gd2FpdCBmb3IgV1NETCB2YWxpZGF0aW9uIHRvIGNvbXBsZXRlLCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgd2lsbCBwcmV2ZW50IHlvdSBmcm9tIGdvaW5nIGZvcndhcmQgYW5kIGNvbXBsZXRpbmcgYWRkaXRpb25hbCB3aXphcmQgcGFnZXMgb25jZSB5b3UgaGF2ZSBzZWxlY3RlZCB5b3VyIFdTREwgZmlsZSB1bnRpbCB0aGF0IFdTREwgZmlsZSBoYXMgYmVlbiB2YWxpZGF0ZWQuIElmIHRoZSBXU0RMIGZpbGUgaXMgbm90IHZhbGlkLCB5b3Ugd2lsbCBiZSBnaXZlbiB0aGUgb3B0aW9uIG9mIGV4aXRpbmcgdGhlIHdpemFyZCBvciBjb250aW51aW5nIHdpdGggdGhlIGludmFsaWQgV1NETCBmaWxlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDA0Ij4KLTxkZXNjcmlwdGlvbj5UaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbiB0b29scyBzdXBwb3J0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdSBjYW4gY2hvb3NlIHRvIG1ha2UgeW91ciBXZWIgc2VydmljZSBjb21wbGlhbnQgb3Igbm9uLWNvbXBsaWFudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzLCBhbmQgc2VjdXJlZCBXZWIgc2VydmljZXMsIGFyZSBub3QgV1MtSSBjb21wbGlhbnQuCi1Zb3UgY2FuIHNldCB0aGUgbGV2ZWwgb2YgY29tcGxpYW5jZSBmb3IgZWl0aGVyIHRoZSBCYXNpYyBQcm9maWxlIGFuZCB0aGUgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlLCBvciBmb3IgdGhlIEF0dGFjaG1lbnRzIFByb2ZpbGUuIFlvdSBjYW4gc2VsZWN0IGZyb20gdGhyZWUgbGV2ZWxzIG9mIGNvbXBsaWFuY2Ugd2l0aCBXUy1JIHNwZWNpZmljYXRpb25zOgotLSBSZXF1aXJlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgcHJldmVudHMgeW91IGZyb20gY3JlYXRpbmcgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlLgotLSBTdWdnZXN0IFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlLCBidXQgcHJvdmlkZXMgYSB2aXNpYmxlIHdhcm5pbmcgc3RhdGluZyBob3cgdGhlIHNlcnZpY2UgaXMgbm9uLWNvbXBsaWFudC4KLS0gSWdub3JlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlIGFuZCBkb2VzIG5vdCBub3RpZnkgeW91IG9mIG5vbi1jb21wbGlhbmNlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDA4Ij4KLTxkZXNjcmlwdGlvbj5UaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbiB0b29scyBzdXBwb3J0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdSBjYW4gY2hvb3NlIHRvIG1ha2UgeW91ciBXZWIgc2VydmljZSBjb21wbGlhbnQgb3Igbm9uLWNvbXBsaWFudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzLCBhbmQgc2VjdXJlZCBXZWIgc2VydmljZXMsIGFyZSBub3QgV1MtSSBjb21wbGlhbnQuCi1Zb3UgY2FuIHNldCB0aGUgbGV2ZWwgb2YgY29tcGxpYW5jZSBmb3IgZWl0aGVyIHRoZSBCYXNpYyBQcm9maWxlIGFuZCB0aGUgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlLCBvciBmb3IgdGhlIEF0dGFjaG1lbnRzIFByb2ZpbGUuIFlvdSBjYW4gc2VsZWN0IGZyb20gdGhyZWUgbGV2ZWxzIG9mIGNvbXBsaWFuY2Ugd2l0aCBXUy1JIHNwZWNpZmljYXRpb25zOgotLSBSZXF1aXJlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgcHJldmVudHMgeW91IGZyb20gY3JlYXRpbmcgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlLgotLSBTdWdnZXN0IFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlLCBidXQgcHJvdmlkZXMgYSB2aXNpYmxlIHdhcm5pbmcgc3RhdGluZyBob3cgdGhlIHNlcnZpY2UgaXMgbm9uLWNvbXBsaWFudC4KLS0gSWdub3JlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50IFdlYiBzZXJ2aWNlIGFuZCBkb2VzIG5vdCBub3RpZnkgeW91IG9mIG5vbi1jb21wbGlhbmNlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDA5Ij4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1Zb3UgY2FuIHNlbGVjdCB3aGljaCB0eXBlcyBvZiBXU0RMIGZpbGVzIHRvIHJ1biB2YWxpZGF0aW9uIG9uOgotLSBCeSBzZWxlY3RpbmcgIk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24iIHRoZSB3aXphcmRzIHdpbGwgbm90IHJ1biB2YWxpZGF0aW9uIG9uIHRoZSBXU0RMIGZpbGUuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiByZW1vdGUgZmlsZXMsIHRoZSB3aXphcmRzIHdpbGwgb25seSB2YWxpZGF0ZSBXU0RMIGZpbGVzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB5b3VyIHdvcmtzcGFjZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIGFsbCBXU0RMIGZpbGVzIHRoZSB3aXphcmQgd2lsbCB2YWxpZGF0ZSBhbGwgV1NETCBmaWxlcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IHJlc2lkZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NJMDAwMTAiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDAxMSI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPgotWW91IGNhbiBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTSTAwMDEyIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1JZiB5b3Ugc2VsZWN0IHRvIHdhaXQgZm9yIFdTREwgdmFsaWRhdGlvbiB0byBjb21wbGV0ZSwgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIHdpbGwgcHJldmVudCB5b3UgZnJvbSBnb2luZyBmb3J3YXJkIGFuZCBjb21wbGV0aW5nIGFkZGl0aW9uYWwgd2l6YXJkIHBhZ2VzIG9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgeW91ciBXU0RMIGZpbGUgdW50aWwgdGhhdCBXU0RMIGZpbGUgaGFzIGJlZW4gdmFsaWRhdGVkLiBJZiB0aGUgV1NETCBmaWxlIGlzIG5vdCB2YWxpZCwgeW91IHdpbGwgYmUgZ2l2ZW4gdGhlIG9wdGlvbiBvZiBleGl0aW5nIHRoZSB3aXphcmQgb3IgY29udGludWluZyB3aXRoIHRoZSBpbnZhbGlkIFdTREwgZmlsZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwOSI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPgotWW91IGNhbiBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDEwIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1Zb3UgY2FuIHNlbGVjdCB3aGljaCB0eXBlcyBvZiBXU0RMIGZpbGVzIHRvIHJ1biB2YWxpZGF0aW9uIG9uOgotLSBCeSBzZWxlY3RpbmcgIk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24iIHRoZSB3aXphcmRzIHdpbGwgbm90IHJ1biB2YWxpZGF0aW9uIG9uIHRoZSBXU0RMIGZpbGUuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiByZW1vdGUgZmlsZXMsIHRoZSB3aXphcmRzIHdpbGwgb25seSB2YWxpZGF0ZSBXU0RMIGZpbGVzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB5b3VyIHdvcmtzcGFjZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIGFsbCBXU0RMIGZpbGVzIHRoZSB3aXphcmQgd2lsbCB2YWxpZGF0ZSBhbGwgV1NETCBmaWxlcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IHJlc2lkZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAxMSI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPgotWW91IGNhbiBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMTIiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08L2NvbnRleHRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdhZGY5Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyXzEuMC4wLmphcgotYnVpbGQueG1sCi1iYWsKLXRlbXAKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzg1MTAwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YzI2NDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gQXByIDE2IDE4OjAxOjI1IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRlYzVkOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jU3VuIEFwciAxNiAxODowMTozMiBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNTJmOWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0gCi0KLQlUaGlzIHNjcmlwdCBidWlsZCB0aGUgSGVscCBwbHVnLWluIGJ5IHRyYW5zZm9ybWluZyB0aGUgRElUQSBzb3VyY2UgZmlsZXMgaW50byBIVE1MLgotCQotCVRvIHVzZSB0aGlzIHNjcmlwdCwgeW91IG11c3QgaW5zdGFsbCBESVRBLU9UIG9uIHlvdXIgbWFjaGluZSBpbiB0aGUgZGlyZWN0b3J5Ci0JZGVmaW5lZCBieSB0aGUgZGl0YS5vdC5kaXIgcHJvcGVydHkuCi0JCi0JUnVuIHRoZSBkZWZhdWx0IHRhcmdldCBhZnRlciB5b3UgZWRpdCB0aGUgRElUQSBzb3VyY2UgZmlsZXMgdG8gcmVnZW5lcmF0ZSB0aGUgSFRNTC4KLQkKLQlUbyBjdXN0b21pemUgdGhpcyBzY3JpcHQgZm9yIG90aGVyIEhlbHAgcGx1Zy1pbnMsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGFyZ3MuaW5wdXQgcHJvcGVydHkKLQl0byBiZSB0aGUgRElUQSBtYXAgZmlsZSBmb3IgdGhlIHBsdWctaW4uCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGxpbmtzIHRvIHNpYmxpbmcgSGVscCBwbHVnLWlucyBoYXZlIHNjb3BlPSJwZWVyIiwgb3RoZXJ3aXNlIHRoZQotCW91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpbGwgYmUgc2hpZnRlZCBpbmNvcnJlY3RseS4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgeW91IGhhbmQgY29kZSB5b3VyIHBsdWdpbi54bWwgZmlsZSBpbiBteXBsdWdpbi54bWwuIFRoaXMgZmlsZQotCXdpbGwgYmUgY29waWVkIG92ZXIgdGhlIGdlbmVyYXRlZCBwbHVnaW4ueG1sIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgZ2VuZXJhdGVkIGNvcnJlY3RseQotCWJ5IERJVEEtT1QuCi0JCi0JQ2hhbmdlTG9nOgotCTIwMDYtMDQtMDUgQXJ0aHVyIFJ5bWFuIDxyeW1hbkBjYS5pYm0uY29tPgotCS0gQ3JlYXRlZC4KLQkyMDA4LTAxLTA5IEthdGUgUHJpY2UgPGthdGVwQGNhLmlibS5jb20+Ci0JLSBtb2RpZmllZCBmb3IgbmV3IERJVEEtT1QgdmVyc2lvbgotCQotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIzLjAuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3N3c2RsZWRpdG9ydF90b2MuZGl0YW1hcCIgLz4gICAgCQkKLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGVhbi50ZW1wIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLmV4dG5hbWUiIHZhbHVlPSIuZGl0YSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLnRlbXAuZGlyIiBsb2NhdGlvbj0idGVtcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQuZGlyIiBsb2NhdGlvbj0iIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9InRyYW5zdHlwZSIgdmFsdWU9ImVjbGlwc2VoZWxwIiAvPgotCQk8L2FudD4KLQkJPGNvcHkgZmlsZT0ibXlwbHVnaW4ueG1sIiB0b2ZpbGU9InBsdWdpbi54bWwiIG92ZXJ3cml0ZT0ieWVzIiAvPgotCTwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3OTdjNDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzAxNjgyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHdzd3NkbGVkaXRvcmNfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICB3c3dzZGxlZGl0b3J0X3RvYy54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBpbWFnZXMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotCQkJICAgY29uY2VwdHMvKi5odG0qLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouaHRtKixcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLQkJICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotCQkgICAgICAgY29uY2VwdHMvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouZGl0YQotYmluLmV4Y2x1ZGVzID0gRG9jQnVpbGQueG1sLFwKLSAgICAgICAgICAgICAgIG15UGx1Z2luKi54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YTFiZTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3dzZGxlZCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBlZGl0b3I8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksCi12aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy48L3Nob3J0ZGVzYz4KLTxjb25ib2R5PgotPHA+VXNpbmcgdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmc6PC9wPgotPHVsPgotPGxpPkNyZWF0ZSBuZXcgV1NETCBmaWxlczwvbGk+Ci08bGk+VmFsaWRhdGUgYW5kIGVkaXQgV1NETCBmaWxlczwvbGk+Ci08bGk+Q3JlYXRlIGFuZCBkZWxldGU6ICA8dWw+Ci08bGk+U2VydmljZXM6IHVzZWQgdG8gYWdncmVnYXRlIGEgc2V0IG9mIHJlbGF0ZWQgcG9ydHMuIFRoZXNlIGFyZSB0aGUgcm9vdAotZWxlbWVudHMgb2YgYWxsIFdTREwgZmlsZXMuPC9saT4KLTxsaT5Qb3J0czogc3BlY2lmeSBhbiBhZGRyZXNzIGZvciBhIGJpbmRpbmcsIHRodXMgZGVmaW5pbmcgYSBzaW5nbGUgY29tbXVuaWNhdGlvbgotZW5kcG9pbnQuPC9saT4KLTxsaT5CaW5kaW5nczogc3BlY2lmeSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgZm9yCi10aGUgb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLjwvbGk+Ci08bGk+UG9ydCB0eXBlczogYSBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyB0aGF0IGVhY2ggcmVmZXIgdG8gYW4gaW5wdXQgbWVzc2FnZQotYW5kIG91dHB1dCBtZXNzYWdlcy48L2xpPgotPGxpPk9wZXJhdGlvbnM6IGlucHV0IGFuZCBvdXRwdXQgbWVzc2FnZXMuPC9saT4KLTxsaT5NZXNzYWdlczogcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuCi1BIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkZWZpbml0aW9uCi13aXRoaW4gc29tZSB0eXBlIHN5c3RlbS48L2xpPgotPGxpPlBhcnRzOiBhIGZsZXhpYmxlIG1lY2hhbmlzbSBmb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50Ci1vZiBhIG1lc3NhZ2UuPD9QdWIgQ2FyZXQ/PjwvbGk+Ci08bGk+VHlwZXM6IGRlc2NyaWJlIGFsbCB0aGUgZGF0YSB0eXBlcyB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLgotV1NETCBpcyBub3QgdGllZCBleGNsdXNpdmVseSB0byBhIHNwZWNpZmljIHR5cGluZyBzeXN0ZW0sIGJ1dCBpdCB1c2VzIHRoZQotVzNDIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbiBhcyBpdHMgZGVmYXVsdCBjaG9pY2UuPC9saT4KLTxsaT5JbXBvcnQgc3RhdGVtZW50czogdXNlZCB0byBhc3NvY2lhdGUgYSBuYW1lc3BhY2Ugd2l0aCBhIGRvY3VtZW50IGxvY2F0aW9uLiA8L2xpPgotPC91bD48L2xpPgotPGxpPkltcG9ydCBleGlzdGluZyBXU0RMIGZpbGVzIGZvciBzdHJ1Y3R1cmVkIHZpZXdpbmc8L2xpPgotPGxpPkdlbmVyYXRlIGRvY3VtZW50YXRpb24gZnJvbSBhIFdTREwgZG9jdW1lbnQuPC9saT4KLTwvdWw+Ci08cD5UaGUgV1NETCBzdXBwb3J0IGluIHRoZSBXU0RMIGVkaXRvciBpcyBiYXNlZCBvbiB0aGUgVzNDIDx4cmVmIGZvcm1hdD0iaHRtbCIKLWhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHNjb3BlPSJleHRlcm5hbCI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uCi1MYW5ndWFnZSAoV1NETCkgMS4xPC94cmVmPi4gVGhlIFdTREwgc3BlY2lmaWNhdGlvbiBmcm9tIHRoZSBXM0MgV2ViIHNpdGUgaXMKLWFsc28gdXNlZCBmb3IgdmFsaWRhdGlvbi4mbmJzcDsgPC9wPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgotPD9QdWIgKjAwMDAwMDI1MzQ/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRhYWE0MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvciIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3NkbGVkIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgZWRpdG9yPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3NkbGVkIj48YSBuYW1lPSJjd3NkbGVkIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2gxPgotCi0KLQotPGRpdj48cD5UaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LAotdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuPC9wPgotCi08cD5Vc2luZyB0aGUgV1NETCBlZGl0b3IsIHlvdSBjYW4gZG8gdGhlIGZvbGxvd2luZzo8L3A+Ci0KLTx1bD4KLTxsaT5DcmVhdGUgbmV3IFdTREwgZmlsZXM8L2xpPgotCi08bGk+VmFsaWRhdGUgYW5kIGVkaXQgV1NETCBmaWxlczwvbGk+Ci0KLTxsaT5DcmVhdGUgYW5kIGRlbGV0ZTogIDx1bD4KLTxsaT5TZXJ2aWNlczogdXNlZCB0byBhZ2dyZWdhdGUgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cy4gVGhlc2UgYXJlIHRoZSByb290Ci1lbGVtZW50cyBvZiBhbGwgV1NETCBmaWxlcy48L2xpPgotCi08bGk+UG9ydHM6IHNwZWNpZnkgYW4gYWRkcmVzcyBmb3IgYSBiaW5kaW5nLCB0aHVzIGRlZmluaW5nIGEgc2luZ2xlIGNvbW11bmljYXRpb24KLWVuZHBvaW50LjwvbGk+Ci0KLTxsaT5CaW5kaW5nczogc3BlY2lmeSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgZm9yCi10aGUgb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLjwvbGk+Ci0KLTxsaT5Qb3J0IHR5cGVzOiBhIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIHRoYXQgZWFjaCByZWZlciB0byBhbiBpbnB1dCBtZXNzYWdlCi1hbmQgb3V0cHV0IG1lc3NhZ2VzLjwvbGk+Ci0KLTxsaT5PcGVyYXRpb25zOiBpbnB1dCBhbmQgb3V0cHV0IG1lc3NhZ2VzLjwvbGk+Ci0KLTxsaT5NZXNzYWdlczogcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuCi1BIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkZWZpbml0aW9uCi13aXRoaW4gc29tZSB0eXBlIHN5c3RlbS48L2xpPgotCi08bGk+UGFydHM6IGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQKLW9mIGEgbWVzc2FnZS48L2xpPgotCi08bGk+VHlwZXM6IGRlc2NyaWJlIGFsbCB0aGUgZGF0YSB0eXBlcyB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLgotV1NETCBpcyBub3QgdGllZCBleGNsdXNpdmVseSB0byBhIHNwZWNpZmljIHR5cGluZyBzeXN0ZW0sIGJ1dCBpdCB1c2VzIHRoZQotVzNDIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbiBhcyBpdHMgZGVmYXVsdCBjaG9pY2UuPC9saT4KLQotPGxpPkltcG9ydCBzdGF0ZW1lbnRzOiB1c2VkIHRvIGFzc29jaWF0ZSBhIG5hbWVzcGFjZSB3aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24uIDwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGk+SW1wb3J0IGV4aXN0aW5nIFdTREwgZmlsZXMgZm9yIHN0cnVjdHVyZWQgdmlld2luZzwvbGk+Ci0KLTxsaT5HZW5lcmF0ZSBkb2N1bWVudGF0aW9uIGZyb20gYSBXU0RMIGRvY3VtZW50LjwvbGk+Ci0KLTwvdWw+Ci0KLTxwPlRoZSBXU0RMIHN1cHBvcnQgaW4gdGhlIFdTREwgZWRpdG9yIGlzIGJhc2VkIG9uIHRoZSBXM0MgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgdGFyZ2V0PSJfYmxhbmsiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgMS4xPC9hPi4gVGhlIFdTREwgc3BlY2lmaWNhdGlvbiBmcm9tIHRoZSBXM0MgV2ViIHNpdGUgaXMKLWFsc28gdXNlZCBmb3IgdmFsaWRhdGlvbi7CoCA8L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIj5XU0RMPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvaHR0cHNrZWwuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvaHR0cHNrZWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmU2Njg2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL2h0dHBza2VsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3Nob3ctaGlkZS1iaW5kaW5nLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3Nob3ctaGlkZS1iaW5kaW5nLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RhOWI1OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9zaG93LWhpZGUtYmluZGluZy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9zb2Fwc2tlbC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9zb2Fwc2tlbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDI3MzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc29hcHNrZWwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvd3NkbGVkaXRvci5naWYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZWRpdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NiZTNiOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZWRpdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvX2YuY2ZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9fZi5jZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmODAxOGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9fZi5jZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDIzMjQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZkZTY4ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTU6MzggRURUIDIwMDcNCi1vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcj1vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlclxuMS4wLjMwMC5xdWFsaWZpZXINCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI0ODY4YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxNTozOCBFRFQgMjAwNw0KLWx1Y2VuZT0xLjQuMTAzLnYyMDA2MDYwMQ0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4yLjAudjIwMDYwNjAxP2xvY2FsZVw9ZW4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjEyODg5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTU6MzggRURUIDIwMDcNCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RlZHR3c2RsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRvcGVyLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR0eXBlLmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI1ZDBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2U0MzY3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFRoaXMgaXMgdGhlIHBsdWdpbiBmb3IgZGVjbGFyaW5nIHRoZSBoZWxwICAgICAgICAgLS0+Ci08IS0tIGNvbnRyaWJ1dGlvbnMgZm9yIHVzaW5nIHRoZSB0b29sLiAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLTxwbHVnaW4+Ci0KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICA8dG9jIGZpbGU9Indzd3NkbGVkaXRvcnRfdG9jLnhtbCIvPiAgIAotICAgIDx0b2MgZmlsZT0id3N3c2RsZWRpdG9yY190b2MueG1sIi8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotICAgICAgCi08L2V4dGVuc2lvbj4KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLQotCi08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLm1hcGxpc3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLm1hcGxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZWI5OWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPG1hcGxpc3QgdmVyc2lvbj0iMy42LjIiPgotICA8bmF2PgotICAgIDxtYXAgZmlsZT0id3N3c2RsZWRpdG9ydF90b2MuZGl0YW1hcCIvPgotICAgIDxtYXAgZmlsZT0id3N3c2RsZWRpdG9yY190b2MuZGl0YW1hcCIvPgotICA8L25hdj4KLSAgPGxpbms+Ci0gICAgPG1hcCBmaWxlPSJ3c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwIi8+Ci0gICAgPG1hcCBmaWxlPSJ3c3dzZGxlZGl0b3JjX3RvYy5kaXRhbWFwIi8+Ci0gIDwvbGluaz4KLTwvbWFwbGlzdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDY5N2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGh0bWwKLSAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSIoQykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3IiAvPgotPG1ldGEgbmFtZT0ic2VjdXJpdHkiIGNvbnRlbnQ9InB1YmxpYyIgLz4KLTxtZXRhIG5hbWU9IlJvYm90cyIgY29udGVudD0iaW5kZXgsZm9sbG93IiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBuYW1lPSJEQy5Gb3JtYXQiIGNvbnRlbnQ9IlhIVE1MIiAvPgotPCEtLSBBbGwgcmlnaHRzIHJlc2VydmVkLiBMaWNlbnNlZCBNYXRlcmlhbHMgUHJvcGVydHkgb2YgSUJNIC0tPgotPCEtLSBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0tPgotPCEtLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUgcmVzdHJpY3RlZCBieSAtLT4KLTwhLS0gR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLiAtLT4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImlibWRpdGEuY3NzIiAvPgotPHRpdGxlPkluZGV4PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPkluZGV4PC9oMT4KLTxhIG5hbWU9IklEWDBfNTciIGhyZWY9IiNJRFgxXzU3Ij5XPC9hPgotPGhyPjwvaHI+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTciIGhyZWY9IiNJRFgwXzU3Ij5XPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPldlYiBzZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRzcnZjLmh0bWwjdGFkZHNydmMiPmFkZGluZyBzZXJ2aWNlcyB0byBXU0RMPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90Y3J0aW1wdC5odG1sI3RjcnRpbXB0Ij5hZGRpbmcgV1NETCBpbXBvcnQgc3RhdGVtZW50czwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZHBhcnQuaHRtbCN0YWRkcGFydCI+YWRkaW5nIFdTREwgbWVzc2FnZSBwYXJ0czwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZG1lc3MuaHRtbCN0YWRkbWVzcyI+YWRkaW5nIFdTREwgbWVzc2FnZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRvcGVyLmh0bWwjdGFkZG9wZXIiPmFkZGluZyBXU0RMIG9wZXJhdGlvbnM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRwb3J0Lmh0bWwjdGFkZHBvcnQiPmFkZGluZyBXU0RMIHBvcnRzPC9hPgotPC9saT4KLTxsaT5iaW5kaW5ncwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3RzZXRiaW5kLmh0bWwjdHNldGJpbmQiPmNyZWF0aW5nPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RjcnR3c2RsLmh0bWwjdGNydHdzZGwiPmNyZWF0aW5nIFdTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RjcnR0eXBlLmh0bWwjdGNydHR5cGUiPmNyZWF0aW5nIFdTREwgdHlwZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RlZHR3c2RsLmh0bWwjdGVkdHdzZGwiPmVkaXRpbmcgV1NETDwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGltcHdzZGwuaHRtbCN0aW1wd3NkbCI+aW1wb3J0aW5nIFdTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RzZXRwcnR0Lmh0bWwjdHNldHBydHQiPnNldHRpbmcgcG9ydCB0eXBlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCN0c2V0YmluZCI+c2V0dGluZyBXU0RMIGJpbmRpbmdzPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldTREwKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sI3RzZXRiaW5kIj5iaW5kaW5nczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGNydHdzZGwuaHRtbCN0Y3J0d3NkbCI+Y3JlYXRpbmc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RlZHR3c2RsLmh0bWwjdGVkdHdzZGwiPmVkaXRpbmc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RjcnRpbXB0Lmh0bWwjdGNydGltcHQiPmltcG9ydCBzdGF0ZW1lbnRzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90aW1wd3NkbC5odG1sI3RpbXB3c2RsIj5pbXBvcnRpbmc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRwYXJ0Lmh0bWwjdGFkZHBhcnQiPm1lc3NhZ2UgcGFydHM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRtZXNzLmh0bWwjdGFkZG1lc3MiPm1lc3NhZ2VzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkb3Blci5odG1sI3RhZGRvcGVyIj5vcGVyYXRpb25zPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkcG9ydC5odG1sI3RhZGRwb3J0Ij5wb3J0czwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZHNydmMuaHRtbCN0YWRkc3J2YyI+c2VydmljZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RzZXRwcnR0Lmh0bWwjdHNldHBydHQiPnNldHRpbmcgcG9ydCB0eXBlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGNydHR5cGUuaHRtbCN0Y3J0dHlwZSI+dHlwZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWYyZjVjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGluZGV4PgotICA8ZW50cnkga2V5d29yZD0iV1NETCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImltcG9ydGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGltcHdzZGwuaHRtbCN0aW1wd3NkbCIgdGl0bGU9IkltcG9ydGluZyBhIFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0d3NkbC5odG1sI3RjcnR3c2RsIiB0aXRsZT0iQ3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iZWRpdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGVkdHdzZGwuaHRtbCN0ZWR0d3NkbCIgdGl0bGU9IkVkaXRpbmcgV1NETCBmaWxlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkc3J2Yy5odG1sI3RhZGRzcnZjIiB0aXRsZT0iQWRkaW5nIGEgc2VydmljZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InBvcnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkcG9ydC5odG1sI3RhZGRwb3J0IiB0aXRsZT0iQWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJzZXR0aW5nIHBvcnQgdHlwZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RzZXRwcnR0Lmh0bWwjdHNldHBydHQiIHRpdGxlPSJTZXR0aW5nIGEgcG9ydCB0eXBlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYmluZGluZ3MiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RzZXRiaW5kLmh0bWwjdHNldGJpbmQiIHRpdGxlPSJTZXR0aW5nIGEgYmluZGluZyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im9wZXJhdGlvbnMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRvcGVyLmh0bWwjdGFkZG9wZXIiIHRpdGxlPSJBZGRpbmcgYW4gb3BlcmF0aW9uIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibWVzc2FnZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRtZXNzLmh0bWwjdGFkZG1lc3MiIHRpdGxlPSJBZGRpbmcgYSBtZXNzYWdlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibWVzc2FnZSBwYXJ0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHBhcnQuaHRtbCN0YWRkcGFydCIgdGl0bGU9IkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iaW1wb3J0IHN0YXRlbWVudHMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RjcnRpbXB0Lmh0bWwjdGNydGltcHQiIHRpdGxlPSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idHlwZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RjcnR0eXBlLmh0bWwjdGNydHR5cGUiIHRpdGxlPSJDcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJpbXBvcnRpbmcgV1NETCI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGltcHdzZGwuaHRtbCN0aW1wd3NkbCIgdGl0bGU9IkltcG9ydGluZyBhIFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIFdTREwiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RjcnR3c2RsLmh0bWwjdGNydHdzZGwiIHRpdGxlPSJDcmVhdGluZyBhIG5ldyBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJlZGl0aW5nIFdTREwiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RlZHR3c2RsLmh0bWwjdGVkdHdzZGwiIHRpdGxlPSJFZGl0aW5nIFdTREwgZmlsZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgc2VydmljZXMgdG8gV1NETCI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHNydmMuaHRtbCN0YWRkc3J2YyIgdGl0bGU9IkFkZGluZyBhIHNlcnZpY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgV1NETCBwb3J0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHBvcnQuaHRtbCN0YWRkcG9ydCIgdGl0bGU9IkFkZGluZyBhIHBvcnQgdG8gYSBzZXJ2aWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic2V0dGluZyBwb3J0IHR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c2V0cHJ0dC5odG1sI3RzZXRwcnR0IiB0aXRsZT0iU2V0dGluZyBhIHBvcnQgdHlwZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImJpbmRpbmdzIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sI3RzZXRiaW5kIiB0aXRsZT0iU2V0dGluZyBhIGJpbmRpbmciLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic2V0dGluZyBXU0RMIGJpbmRpbmdzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sI3RzZXRiaW5kIiB0aXRsZT0iU2V0dGluZyBhIGJpbmRpbmciLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJhZGRpbmcgV1NETCBvcGVyYXRpb25zIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkb3Blci5odG1sI3RhZGRvcGVyIiB0aXRsZT0iQWRkaW5nIGFuIG9wZXJhdGlvbiIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBXU0RMIG1lc3NhZ2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkbWVzcy5odG1sI3RhZGRtZXNzIiB0aXRsZT0iQWRkaW5nIGEgbWVzc2FnZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBXU0RMIG1lc3NhZ2UgcGFydHMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRwYXJ0Lmh0bWwjdGFkZHBhcnQiIHRpdGxlPSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Y3J0aW1wdC5odG1sI3RjcnRpbXB0IiB0aXRsZT0iQ3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIFdTREwgdHlwZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RjcnR0eXBlLmh0bWwjdGNydHR5cGUiIHRpdGxlPSJDcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjE2NDIxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSAgICAgPSBXU0RMIEVkaXRvciBEb2N1bWVudGF0aW9uCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZTQzNjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFRoaXMgaXMgdGhlIHBsdWdpbiBmb3IgZGVjbGFyaW5nIHRoZSBoZWxwICAgICAgICAgLS0+Ci08IS0tIGNvbnRyaWJ1dGlvbnMgZm9yIHVzaW5nIHRoZSB0b29sLiAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLTxwbHVnaW4+Ci0KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICA8dG9jIGZpbGU9Indzd3NkbGVkaXRvcnRfdG9jLnhtbCIvPiAgIAotICAgIDx0b2MgZmlsZT0id3N3c2RsZWRpdG9yY190b2MueG1sIi8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotICAgICAgCi08L2V4dGVuc2lvbj4KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLQotCi08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YTQyOTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkbWVzcy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJhZGRpbmdhbWVzc2FnZSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBtZXNzYWdlPC90aXRsZT4KLTxzaG9ydGRlc2M+TWVzc2FnZXMgcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuCi1BIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkZWZpbml0aW9uCi13aXRoaW4gc29tZSB0eXBlIHN5c3RlbS4gV1NETCBtZXNzYWdlcyBhcmUgdG9wIGxldmVsIG9iamVjdHMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZAotYnkgYW4gb3BlcmF0aW9uJ3MgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgZWxlbWVudHMgKHdpdGhpbiBhIHBvcnQgdHlwZSkuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIFdTREwgbWVzc2FnZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+bWVzc2FnZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5Zb3UgY2FuIGNyZWF0ZSBhIG1lc3NhZ2UgdXNpbmcgdGhlIE91dGxpbmUgdmlldyBieSByaWdodC1jbGlja2luZwotdGhlIDxiPk1lc3NhZ2VzPC9iPiBmb2xkZXIgYW5kIGNsaWNraW5nIDxiPkFkZCBNZXNzYWdlPC9iPi48L3A+PHA+VG8gY3JlYXRlCi1hIG5ldyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgPGI+U2V0IE1lc3NhZ2UgPiBOZXcgTWVzc2FnZS48L2I+PC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5UeXBlIHRoZSBuYW1lIG9mIHRoZSBtZXNzYWdlIGluIHRoZSA8dWljb250cm9sPkdlbmVyYWw8L3VpY29udHJvbD4gcGFuZQotb2YgdGhlIFByb3BlcnRpZXMgdmlldy48L2NtZD48aW5mbz5UaGlzIG5hbWUgc2hvdWxkIGJlIGEgdW5pcXVlIGFtb25nc3QgYWxsCi1tZXNzYWdlcyBkZWZpbmVkIHdpdGhpbiB0aGUgZW5jbG9zaW5nIFdTREwgZG9jdW1lbnQuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VGhlIG5ldyBtZXNzYWdlIHdpbGwgYXBwZWFyIGluIHRoZSBEZXNpZ24gdmlldyB3aXRoaW4gdGhlIHBvcnQKLXR5cGUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxwb3N0cmVxPjxwPiA8Yj5Ob3RlPC9iPjogTWVzc2FnZXMgYXJlIHJlZmVyZW5jZWQgd2l0aGluIGEgcG9ydCB0eXBlIChzcGVjaWZpY2FsbHkKLWJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IG9iamVjdHMpLiBUaGUgaW5wdXQsIG91dHB1dCBhbmQKLWZhdWx0IG9iamVjdHMgd2l0aGluIGEgYmluZGluZyBkbyBub3QgcmVmZXJlbmNlIG1lc3NhZ2VzLiBIZW5jZSB5b3UgY2Fubm90Ci1jcmVhdGUgYSBuZXcgbWVzc2FnZSBieSByaWdodCBjbGlja2luZyBvbiBhIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IHdpdGhpbgotYSBiaW5kaW5nICh0aGVzZSBhcmUgYWxzbyBrbm93biBhcyBiaW5kaW5nIGlucHV0LCBiaW5kaW5nIG91dHB1dCBhbmQgYmluZGluZwotZmF1bHRzKS48L3A+PG5vdGUgdHlwZT0idGlwIj5Zb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsCi1vdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQgdXNpbmcgdGhlIE91dGxpbmUgdmlldy4gVW5kZXIgdGhlICA8Yj5Qb3J0IFR5cGVzPC9iPiBmb2xkZXIsCi1yaWdodC1jbGljayB5b3VyIGVsZW1lbnQgYW5kIGNsaWNrIDxiPlNldCBNZXNzYWdlID4gQWRkIE1lc3NhZ2U8L2I+LiBZb3VyCi1tZXNzYWdlIHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIHZpZXcgdW5kZXIgdGhlIDxiPk1lc3NhZ2VzPC9iPiBmb2xkZXIuPC9ub3RlPjwvcG9zdHJlcT4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0icmV1c2luZ2FtZXNzYWdlIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlJldXNpbmcgYSBtZXNzYWdlPC90aXRsZT4KLTx0YXNrYm9keT4KLTxwcmVyZXE+VG8gcmV1c2UgYSBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQsIGNvbXBsZXRlCi10aGUgZm9sbG93aW5nIHN0ZXBzOjwvcHJlcmVxPgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudAotYW5kIGNsaWNrICA8Yj5TZXQgTWVzc2FnZSA+IEV4aXN0aW5nIE1lc3NhZ2UuPC9iPjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZyB0byBmaWx0ZXIgdGhlIGxpc3QKLW9yIGxlYXZlIHRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbDwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBsaXN0IGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZwotb3B0aW9uczo8L2NtZD48aW5mbz48dWw+Ci08bGk+PGI+V29ya3NwYWNlPC9iPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotPGxpPjxiPkVuY2xvc2luZyBQcm9qZWN0PC9iPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9saT4KLTxsaT48Yj5DdXJyZW50IFJlc291cmNlPC9iPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQKLWZpbGUuPC9saT4KLTxsaT48Yj5Xb3JraW5nIFNldHM8L2I+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIHNldCBvZgotZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPGI+Q2hvb3NlPC9iPi4gWW91IGNhbiBzZWxlY3QgZmlsZXMKLWZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkCi10aGUgZmlsZXMsIGNsaWNrIDxiPk9LPC9iPi48L2xpPgotPC91bD48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgZXhpc3RpbmcgbWVzc2FnZXMgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrICA8Yj5PSzwvYj4uPC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPHBvc3RyZXE+PC9wb3N0cmVxPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJpbXBvcnRpbmdhbWVzc2FnZSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5JbXBvcnRpbmcgYSBtZXNzYWdlPC90aXRsZT4KLTx0YXNrYm9keT4KLTxwcmVyZXE+SWYgeW91IHdhbnQgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsIG91dHB1dCwKLW9yIGZhdWx0IGVsZW1lbnQsIGZvbGxvdyB0aGVzZSBzdGVwczo8L3ByZXJlcT4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQKLWFuZCBjbGljayAgPGI+U2V0IE1lc3NhZ2UgPiBFeGlzdGluZyBNZXNzYWdlLjwvYj48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcgdG8gZmlsdGVyIHRoZSBsaXN0Ci1vciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGwuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5Zb3UgY2FuIGltcG9ydCBhIG1lc3NhZ2UgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PC9jbWQ+Ci08aW5mbz48dWw+Ci08bGk+PGI+V29ya3NwYWNlPC9iPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotPGxpPjxiPkVuY2xvc2luZyBQcm9qZWN0PC9iPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9saT4KLTxsaT48Yj5Xb3JraW5nIFNldHM8L2I+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIHNldCBvZgotZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPGI+Q2hvb3NlPC9iPi4gWW91IGNhbiBzZWxlY3QgZmlsZXMKLWZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkCi10aGUgZmlsZXMsIGNsaWNrIDxiPk9LPC9iPi48L2xpPgotPC91bD48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgbWVzc2FnZXMgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxiPk9LPC9iPi48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cG9zdHJlcT5Zb3UgY2FuIG5vdyBhZGQgcGFydHMgdG8geW91ciBtZXNzYWdlLiBQYXJ0cyBhcmUgYSBmbGV4aWJsZSBtZWNoYW5pc20KLWZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKLXNlZSA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Ii4uL3Rhc2tzL3RhZGRwYXJ0LmRpdGEiIHNjb3BlPSJwZWVyIj5BZGRpbmcKLWEgcGFydCB0byBhIG1lc3NhZ2U8L3hyZWY+LjwvcG9zdHJlcT4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgyNTYyYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQWRkaW5nIGEgbWVzc2FnZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJNZXNzYWdlcyByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZyB0cmFuc21pdHRlZC4gQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVmaW5pdGlvbiB3aXRoaW4gc29tZSB0eXBlIHN5c3RlbS4gV1NETCBtZXNzYWdlcyBhcmUgdG9wIGxldmVsIG9iamVjdHMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBieSBhbiBvcGVyYXRpb24ncyBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdCBlbGVtZW50cyAod2l0aGluIGEgcG9ydCB0eXBlKS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iTWVzc2FnZXMgcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuIEEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRlZmluaXRpb24gd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uIFdTREwgbWVzc2FnZXMgYXJlIHRvcCBsZXZlbCBvYmplY3RzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYnkgYW4gb3BlcmF0aW9uJ3MgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgZWxlbWVudHMgKHdpdGhpbiBhIHBvcnQgdHlwZSkuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBtZXNzYWdlcywgV1NETCwgbWVzc2FnZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIG1lc3NhZ2VzLCBXU0RMLCBtZXNzYWdlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iYWRkaW5nYW1lc3NhZ2UiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5BZGRpbmcgYSBtZXNzYWdlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJhZGRpbmdhbWVzc2FnZSI+PGEgbmFtZT0iYWRkaW5nYW1lc3NhZ2UiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIG1lc3NhZ2U8L2gxPgotCi0KLQotPGRpdj48cD5NZXNzYWdlcyByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZyB0cmFuc21pdHRlZC4KLUEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRlZmluaXRpb24KLXdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLiBXU0RMIG1lc3NhZ2VzIGFyZSB0b3AgbGV2ZWwgb2JqZWN0cyB0aGF0IGNhbiBiZSByZWZlcmVuY2VkCi1ieSBhbiBvcGVyYXRpb24ncyBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdCBlbGVtZW50cyAod2l0aGluIGEgcG9ydCB0eXBlKS48L3A+Ci0KLTxkaXYgY2xhc3M9InAiIC8+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgbWVzc2FnZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3IGJ5IHJpZ2h0LWNsaWNraW5nCi10aGUgPHN0cm9uZz5NZXNzYWdlczwvc3Ryb25nPiBmb2xkZXIgYW5kIGNsaWNraW5nIDxzdHJvbmc+QWRkIE1lc3NhZ2U8L3N0cm9uZz4uPC9wPgotPHA+VG8gY3JlYXRlCi1hIG5ldyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgPHN0cm9uZz5TZXQgTWVzc2FnZSAmZ3Q7IE5ldyBNZXNzYWdlLjwvc3Ryb25nPjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgdGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2UgaW4gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkdlbmVyYWw8L3NwYW4+IHBhbmUKLW9mIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9zcGFuPiBUaGlzIG5hbWUgc2hvdWxkIGJlIGEgdW5pcXVlIGFtb25nc3QgYWxsCi1tZXNzYWdlcyBkZWZpbmVkIHdpdGhpbiB0aGUgZW5jbG9zaW5nIFdTREwgZG9jdW1lbnQuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UaGUgbmV3IG1lc3NhZ2Ugd2lsbCBhcHBlYXIgaW4gdGhlIERlc2lnbiB2aWV3IHdpdGhpbiB0aGUgcG9ydAotdHlwZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzdHJvbmc+Tm90ZTwvc3Ryb25nPjogTWVzc2FnZXMgYXJlIHJlZmVyZW5jZWQgd2l0aGluIGEgcG9ydCB0eXBlIChzcGVjaWZpY2FsbHkKLWJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IG9iamVjdHMpLiBUaGUgaW5wdXQsIG91dHB1dCBhbmQKLWZhdWx0IG9iamVjdHMgd2l0aGluIGEgYmluZGluZyBkbyBub3QgcmVmZXJlbmNlIG1lc3NhZ2VzLiBIZW5jZSB5b3UgY2Fubm90Ci1jcmVhdGUgYSBuZXcgbWVzc2FnZSBieSByaWdodCBjbGlja2luZyBvbiBhIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IHdpdGhpbgotYSBiaW5kaW5nICh0aGVzZSBhcmUgYWxzbyBrbm93biBhcyBiaW5kaW5nIGlucHV0LCBiaW5kaW5nIG91dHB1dCBhbmQgYmluZGluZwotZmF1bHRzKS48L3A+Ci08ZGl2IGNsYXNzPSJ0aXAiPjxzcGFuIGNsYXNzPSJ0aXB0aXRsZSI+VGlwOjwvc3Bhbj4gWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LAotb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuIFVuZGVyIHRoZSAgPHN0cm9uZz5Qb3J0IFR5cGVzPC9zdHJvbmc+IGZvbGRlciwKLXJpZ2h0LWNsaWNrIHlvdXIgZWxlbWVudCBhbmQgY2xpY2sgPHN0cm9uZz5TZXQgTWVzc2FnZSAmZ3Q7IEFkZCBNZXNzYWdlPC9zdHJvbmc+LiBZb3VyCi1tZXNzYWdlIHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIHZpZXcgdW5kZXIgdGhlIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4gZm9sZGVyLjwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJyZXVzaW5nYW1lc3NhZ2UiPjxhIG5hbWU9InJldXNpbmdhbWVzc2FnZSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5SZXVzaW5nIGEgbWVzc2FnZTwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJwIj5UbyByZXVzZSBhIG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCwgY29tcGxldGUKLXRoZSBmb2xsb3dpbmcgc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQKLWFuZCBjbGljayAgPHN0cm9uZz5TZXQgTWVzc2FnZSAmZ3Q7IEV4aXN0aW5nIE1lc3NhZ2UuPC9zdHJvbmc+PC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcgdG8gZmlsdGVyIHRoZSBsaXN0Ci1vciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGw8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5Zb3UgY2FuIGNoYW5nZSB0aGUgc2NvcGUgb2YgdGhlIGxpc3QgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nCi1vcHRpb25zOjwvc3Bhbj4gPHVsPgotPGxpPjxzdHJvbmc+V29ya3NwYWNlPC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkVuY2xvc2luZyBQcm9qZWN0PC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5DdXJyZW50IFJlc291cmNlPC9zdHJvbmc+OiBsaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudAotZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5Xb3JraW5nIFNldHM8L3N0cm9uZz46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0IG9mCi1maWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8c3Ryb25nPkNob29zZTwvc3Ryb25nPi4gWW91IGNhbiBzZWxlY3QgZmlsZXMKLWZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkCi10aGUgZmlsZXMsIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VGhlIGV4aXN0aW5nIG1lc3NhZ2VzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayAgPHN0cm9uZz5PSzwvc3Ryb25nPi48L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIiAvPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImltcG9ydGluZ2FtZXNzYWdlIj48YSBuYW1lPSJpbXBvcnRpbmdhbWVzc2FnZSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5JbXBvcnRpbmcgYSBtZXNzYWdlPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InAiPklmIHlvdSB3YW50IHRvIGltcG9ydCBhbiBleGlzdGluZyBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsCi1vciBmYXVsdCBlbGVtZW50LCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQKLWFuZCBjbGljayAgPHN0cm9uZz5TZXQgTWVzc2FnZSAmZ3Q7IEV4aXN0aW5nIE1lc3NhZ2UuPC9zdHJvbmc+PC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcgdG8gZmlsdGVyIHRoZSBsaXN0Ci1vciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGwuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+WW91IGNhbiBpbXBvcnQgYSBtZXNzYWdlIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvc3Bhbj4KLSA8dWw+Ci08bGk+PHN0cm9uZz5Xb3Jrc3BhY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLQotPGxpPjxzdHJvbmc+RW5jbG9zaW5nIFByb2plY3Q8L3N0cm9uZz46IGxpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPldvcmtpbmcgU2V0czwvc3Ryb25nPjogbGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBzZXQgb2YKLWZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxzdHJvbmc+Q2hvb3NlPC9zdHJvbmc+LiBZb3UgY2FuIHNlbGVjdCBmaWxlcwotZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQKLXRoZSBmaWxlcywgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UaGUgbWVzc2FnZXMgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+WW91IGNhbiBub3cgYWRkIHBhcnRzIHRvIHlvdXIgbWVzc2FnZS4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtCi1mb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCi1zZWUgPGEgaHJlZj0iLi4vdGFza3MvdGFkZHBhcnQuZGl0YSI+QWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2U8L2E+LjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRvcGVyLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRvcGVyLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZGI5YWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRhZGRvcGVyIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhbiBvcGVyYXRpb248L3RpdGxlPgotPHNob3J0ZGVzYz5BbiBvcGVyYXRpb24gbmFtZXMgdGhlIG9wZXJhdGlvbiBhbmQgbGlzdHMgdGhlIGV4cGVjdGVkIGlucHV0cwotYW5kIG91dHB1dHMuIFRoZSBvcGVyYXRpb24gZWxlbWVudCBtYXkgYWxzbyBjb250YWluIGEgZmF1bHQgc3ViLWVsZW1lbnQgdGhhdAotZGVzY3JpYmVzIGFueSBlcnJvciBkYXRhIHRoZSBvcGVyYXRpb24gbWF5IHJldHVybi48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgV1NETCBvcGVyYXRpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPm9wZXJhdGlvbnM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PlVzaW5nIHRoZXNlLCB5b3UgY2FuIGRlY2xhcmUgZm91ciB0cmFuc21pc3Npb24gcHJpbWl0aXZlcyB0aGF0IGFuCi1lbmRwb2ludCBjYW4gc3VwcG9ydDo8dWw+Ci08bGk+IDxiPk9uZS13YXk8L2I+OiB0aGUgZW5kcG9pbnQgcmVjZWl2ZXMgYSBtZXNzYWdlLjwvbGk+Ci08bGk+IDxiPlJlcXVlc3QtcmVzcG9uc2U8L2I+OiB0aGUgZW5kcG9pbnQgcmVjZWl2ZXMgYSBtZXNzYWdlLCBhbmQgc2VuZHMgYQotY29ycmVsYXRlZCBtZXNzYWdlLjwvbGk+Ci08bGk+IDxiPlNvbGljaXQtcmVzcG9uc2U8L2I+OiB0aGUgZW5kcG9pbnQgc2VuZHMgYSBtZXNzYWdlLCBhbmQgcmVjZWl2ZXMgYQotY29ycmVsYXRlZCBtZXNzYWdlLjwvbGk+Ci08bGk+IDxiPk5vdGlmaWNhdGlvbjwvYj46IHRoZSBlbmRwb2ludCBzZW5kcyBhIG1lc3NhZ2UuPC9saT4KLTwvdWw+PHA+WW91IGNhbiBhZGQgYW4gb3BlcmF0aW9uIHRvIGEgcG9ydCB0eXBlIG9yIGEgcG9ydCBiaW5kaW5nLjwvcD48cD5UbwotYWRkIGFuIG9wZXJhdGlvbiB0byBhIHBvcnQgdHlwZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCB0eXBlLjwvY21kPjxpbmZvPkNsaWNrIDxiPkFkZAotT3BlcmF0aW9uPC9iPi4gVG8gc2VsZWN0IHRoZSBuZXcgb3BlcmF0aW9uLCBjbGljayB0aGUgb3BlcmF0aW9uIGluIHRoZSBwb3J0Ci10eXBlIG9iamVjdC48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5SaWdodCBjbGljayBvbiB0aGUgb3BlcmF0aW9uIHRvIGFkZCBpbnB1dCwgb3V0cHV0IG9yIGZhdWx0IG9iamVjdHMuPC9jbWQ+Ci08aW5mbz5EZXBlbmRpbmcgb24gYW4gb3BlcmF0aW9uJ3MgaW5wdXRzIGFuZCBvdXRwdXRzIGl0IGNhbiBiZSBjbGFzc2lmaWVkCi1hcyBmb2xsb3dzOjx1bD4KLTxsaT48Yj5PbmUgd2F5IG9wZXJhdGlvbjwvYj46IGlucHV0IDwvbGk+Ci08bGk+PGI+UmVxdWVzdCByZXNwb25zZSBvcGVyYXRpb248L2I+OiBpbnB1dCwgb3V0cHV0IDwvbGk+Ci08bGk+PGI+IFNvbGljaXQgcmVzcG9uc2Ugb3BlcmF0aW9uPC9iPjogb3V0cHV0LCBpbnB1dCA8L2xpPgotPGxpPjxiPk5vdGlmaWNhdGlvbiBvcGVyYXRpb248L2I+OiBvdXRwdXQ8L2xpPgotPC91bD48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCB0eXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3BlcmF0aW9uCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSAgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD4gPGI+VGlwPC9iPjogWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBvcGVyYXRpb24gZm9yIHlvdXIgcG9ydAotdHlwZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBSaWdodCBjbGljayBvbiBhIHBvcnQgdHlwZSBpbiB0aGUgPHVpY29udHJvbD5Qb3J0Ci1UeXBlPC91aWNvbnRyb2w+IGZvbGRlciBhbmQgc2VsZWN0IDx1aWNvbnRyb2w+QWRkIE9wZXJhdGlvbjw/UHViIENhcmV0Pz48L3VpY29udHJvbD4uPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDI3Mjc/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGUwYTcwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG9wZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYW4gb3BlcmF0aW9uIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkFuIG9wZXJhdGlvbiBuYW1lcyB0aGUgb3BlcmF0aW9uIGFuZCBsaXN0cyB0aGUgZXhwZWN0ZWQgaW5wdXRzIGFuZCBvdXRwdXRzLiBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgbWF5IGFsc28gY29udGFpbiBhIGZhdWx0IHN1Yi1lbGVtZW50IHRoYXQgZGVzY3JpYmVzIGFueSBlcnJvciBkYXRhIHRoZSBvcGVyYXRpb24gbWF5IHJldHVybi4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQW4gb3BlcmF0aW9uIG5hbWVzIHRoZSBvcGVyYXRpb24gYW5kIGxpc3RzIHRoZSBleHBlY3RlZCBpbnB1dHMgYW5kIG91dHB1dHMuIFRoZSBvcGVyYXRpb24gZWxlbWVudCBtYXkgYWxzbyBjb250YWluIGEgZmF1bHQgc3ViLWVsZW1lbnQgdGhhdCBkZXNjcmliZXMgYW55IGVycm9yIGRhdGEgdGhlIG9wZXJhdGlvbiBtYXkgcmV0dXJuLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgb3BlcmF0aW9ucywgV1NETCwgb3BlcmF0aW9ucyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgb3BlcmF0aW9ucywgV1NETCwgb3BlcmF0aW9ucyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkb3BlciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhbiBvcGVyYXRpb248L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRvcGVyIj48YSBuYW1lPSJ0YWRkb3BlciI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGFuIG9wZXJhdGlvbjwvaDE+Ci0KLQotCi08ZGl2PjxwPkFuIG9wZXJhdGlvbiBuYW1lcyB0aGUgb3BlcmF0aW9uIGFuZCBsaXN0cyB0aGUgZXhwZWN0ZWQgaW5wdXRzCi1hbmQgb3V0cHV0cy4gVGhlIG9wZXJhdGlvbiBlbGVtZW50IG1heSBhbHNvIGNvbnRhaW4gYSBmYXVsdCBzdWItZWxlbWVudCB0aGF0Ci1kZXNjcmliZXMgYW55IGVycm9yIGRhdGEgdGhlIG9wZXJhdGlvbiBtYXkgcmV0dXJuLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VXNpbmcgdGhlc2UsIHlvdSBjYW4gZGVjbGFyZSBmb3VyIHRyYW5zbWlzc2lvbiBwcmltaXRpdmVzIHRoYXQgYW4KLWVuZHBvaW50IGNhbiBzdXBwb3J0Ojx1bD4KLTxsaT4gPHN0cm9uZz5PbmUtd2F5PC9zdHJvbmc+OiB0aGUgZW5kcG9pbnQgcmVjZWl2ZXMgYSBtZXNzYWdlLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5SZXF1ZXN0LXJlc3BvbnNlPC9zdHJvbmc+OiB0aGUgZW5kcG9pbnQgcmVjZWl2ZXMgYSBtZXNzYWdlLCBhbmQgc2VuZHMgYQotY29ycmVsYXRlZCBtZXNzYWdlLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5Tb2xpY2l0LXJlc3BvbnNlPC9zdHJvbmc+OiB0aGUgZW5kcG9pbnQgc2VuZHMgYSBtZXNzYWdlLCBhbmQgcmVjZWl2ZXMgYQotY29ycmVsYXRlZCBtZXNzYWdlLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5Ob3RpZmljYXRpb248L3N0cm9uZz46IHRoZSBlbmRwb2ludCBzZW5kcyBhIG1lc3NhZ2UuPC9saT4KLQotPC91bD4KLTxwPllvdSBjYW4gYWRkIGFuIG9wZXJhdGlvbiB0byBhIHBvcnQgdHlwZSBvciBhIHBvcnQgYmluZGluZy48L3A+Ci08cD5UbwotYWRkIGFuIG9wZXJhdGlvbiB0byBhIHBvcnQgdHlwZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCB0eXBlLjwvc3Bhbj4gQ2xpY2sgPHN0cm9uZz5BZGQKLU9wZXJhdGlvbjwvc3Ryb25nPi4gVG8gc2VsZWN0IHRoZSBuZXcgb3BlcmF0aW9uLCBjbGljayB0aGUgb3BlcmF0aW9uIGluIHRoZSBwb3J0Ci10eXBlIG9iamVjdC48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5SaWdodCBjbGljayBvbiB0aGUgb3BlcmF0aW9uIHRvIGFkZCBpbnB1dCwgb3V0cHV0IG9yIGZhdWx0IG9iamVjdHMuPC9zcGFuPgotIERlcGVuZGluZyBvbiBhbiBvcGVyYXRpb24ncyBpbnB1dHMgYW5kIG91dHB1dHMgaXQgY2FuIGJlIGNsYXNzaWZpZWQKLWFzIGZvbGxvd3M6PHVsPgotPGxpPjxzdHJvbmc+T25lIHdheSBvcGVyYXRpb248L3N0cm9uZz46IGlucHV0IDwvbGk+Ci0KLTxsaT48c3Ryb25nPlJlcXVlc3QgcmVzcG9uc2Ugb3BlcmF0aW9uPC9zdHJvbmc+OiBpbnB1dCwgb3V0cHV0IDwvbGk+Ci0KLTxsaT48c3Ryb25nPiBTb2xpY2l0IHJlc3BvbnNlIG9wZXJhdGlvbjwvc3Ryb25nPjogb3V0cHV0LCBpbnB1dCA8L2xpPgotCi08bGk+PHN0cm9uZz5Ob3RpZmljYXRpb24gb3BlcmF0aW9uPC9zdHJvbmc+OiBvdXRwdXQ8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCB0eXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3BlcmF0aW9uCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSAgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3Ryb25nPlRpcDwvc3Ryb25nPjogWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBvcGVyYXRpb24gZm9yIHlvdXIgcG9ydAotdHlwZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBSaWdodCBjbGljayBvbiBhIHBvcnQgdHlwZSBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UG9ydAotVHlwZTwvc3Bhbj4gZm9sZGVyIGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIE9wZXJhdGlvbjwvc3Bhbj4uPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODU0ZTAyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkcGFydCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkFsbCBtZXNzYWdlcyBjb250YWluIG9uZSBvciBtb3JlIHBhcnRzLiBQYXJ0cyBhcmUgYSBmbGV4aWJsZSBtZWNoYW5pc20KLWZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBUaGUgbWVzc2FnZSBkZWZpbml0aW9uCi1hc3NvY2lhdGVzIGVhY2ggcGFydCB3aXRoIGEgdHlwZSB1c2luZyBhIG1lc3NhZ2UtdHlwaW5nIGF0dHJpYnV0ZS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgV1NETCBtZXNzYWdlIHBhcnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPm1lc3NhZ2UgcGFydHM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGFkZCBhIHBhcnQgdG8gYSBtZXNzYWdlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBhbiBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBvYmplY3QgYW5kCi1jbGljayA8Yj5BZGQgUGFydDwvYj4uPC9jbWQ+PHN0ZXByZXN1bHQ+VGhlIHBhcnQgaXMgYWRkZWQgdG8gdGhlIGlucHV0LCBvdXRwdXQsCi1vciBmYXVsdCdzIG1lc3NhZ2UgcmVmZXJlbmNlLiBUbyBzZWxlY3QgdGhlIHBhcnQsIGNsaWNrIHRoZSBwYXJ0IGluIHRoZSBwb3J0Ci10eXBlIG9iamVjdC48L3N0ZXByZXN1bHQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgcGFydC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPllvdXIgcGFydCBjYW4gcmVmZXIgdG8gZWl0aGVyIGEgPGI+VHlwZTwvYj4gb3IgYW4gPGI+RWxlbWVudDwvYj4uPC9jbWQ+Ci08aW5mbz5TZWxlY3QgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiBhcyB0aGUgPGI+UmVmZXJlbmNlIEtpbmQ8L2I+IC48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSBzZWxlY3RlZCA8Yj5UeXBlPC9iPiwgeW91IG5vdyBoYXZlIHRoZSBvcHRpb24gb2Ygc2VsZWN0aW5nCi1hbiBYTUwgc2NoZW1hIGRhdGEgdHlwZSBmcm9tIHRoZSA8Yj5UeXBlPC9iPiBkcm9wIGRvd24gbGlzdC48L2NtZD48aW5mbz5UaGUKLWxpc3Qgb2YgdHlwZXMgY29tZXMgZnJvbSBhbnkgYXZhaWxhYmxlIHJlZmVyZW5jZWQgWE1MIHNjaGVtYXMuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SWYgeW91IHNlbGVjdGVkIDxiPkVsZW1lbnQ8L2I+ICwgeW91IG5vdyBoYXZlIHRoZSBvcHRpb24gb2Ygc2VsZWN0aW5nCi1hbiBYTUwgc2NoZW1hIGVsZW1lbnQgZnJvbSB0aGUgIDxiPkVsZW1lbnQ8L2I+IGRyb3AgZG93biBsaXN0LjwvY21kPjxpbmZvPlRoZQotbGlzdCBvZiBlbGVtZW50cyBjb21lcyBmcm9tIGFueSBhdmFpbGFibGUgcmVmZXJlbmNlZCBYTUwgc2NoZW1hcy48L2luZm8+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PG5vdGUgdHlwZT0idGlwIj4gPD9QdWIgQ2FyZXQ/PllvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgcGFydCBmb3IKLXlvdXIgbWVzc2FnZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBVbmRlciB0aGUgIDxiPk1lc3NhZ2VzPC9iPiBmb2xkZXIsIHJpZ2h0LWNsaWNrCi15b3VyIGVsZW1lbnQgYW5kIGNsaWNrIDxiPkFkZCBQYXJ0PC9iPi4gWW91ciBwYXJ0IHdpbGwgYXV0b21hdGljYWxseSBhcHBlYXIKLWluIHRoZSBPdXRsaW5lIHZpZXcgKHVuZGVyIHRoZSA8Yj5NZXNzYWdlczwvYj4gZm9sZGVyKSwgYnV0IGl0IHdpbGwgb25seSBhcHBlYXIKLWluIHRoZSBEZXNpZ24gdmlldyBpZiB0aGUgbWVzc2FnZSB5b3UgYWRkZWQgaXQgdG8gY3VycmVudGx5IGRvZXMuPC9ub3RlPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDI1Nzg/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzdlZDk5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkFsbCBtZXNzYWdlcyBjb250YWluIG9uZSBvciBtb3JlIHBhcnRzLiBQYXJ0cyBhcmUgYSBmbGV4aWJsZSBtZWNoYW5pc20gZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIGRlZmluaXRpb24gYXNzb2NpYXRlcyBlYWNoIHBhcnQgd2l0aCBhIHR5cGUgdXNpbmcgYSBtZXNzYWdlLXR5cGluZyBhdHRyaWJ1dGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkFsbCBtZXNzYWdlcyBjb250YWluIG9uZSBvciBtb3JlIHBhcnRzLiBQYXJ0cyBhcmUgYSBmbGV4aWJsZSBtZWNoYW5pc20gZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIGRlZmluaXRpb24gYXNzb2NpYXRlcyBlYWNoIHBhcnQgd2l0aCBhIHR5cGUgdXNpbmcgYSBtZXNzYWdlLXR5cGluZyBhdHRyaWJ1dGUuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBtZXNzYWdlIHBhcnRzLCBXU0RMLCBtZXNzYWdlIHBhcnRzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBtZXNzYWdlIHBhcnRzLCBXU0RMLCBtZXNzYWdlIHBhcnRzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRhZGRwYXJ0IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRwYXJ0Ij48YSBuYW1lPSJ0YWRkcGFydCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2U8L2gxPgotCi0KLQotPGRpdj48cD5BbGwgbWVzc2FnZXMgY29udGFpbiBvbmUgb3IgbW9yZSBwYXJ0cy4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtCi1mb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gVGhlIG1lc3NhZ2UgZGVmaW5pdGlvbgotYXNzb2NpYXRlcyBlYWNoIHBhcnQgd2l0aCBhIHR5cGUgdXNpbmcgYSBtZXNzYWdlLXR5cGluZyBhdHRyaWJ1dGUuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBhZGQgYSBwYXJ0IHRvIGEgbWVzc2FnZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgYW4gaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgb2JqZWN0IGFuZAotY2xpY2sgPHN0cm9uZz5BZGQgUGFydDwvc3Ryb25nPi48L3NwYW4+IFRoZSBwYXJ0IGlzIGFkZGVkIHRvIHRoZSBpbnB1dCwgb3V0cHV0LAotb3IgZmF1bHQncyBtZXNzYWdlIHJlZmVyZW5jZS4gVG8gc2VsZWN0IHRoZSBwYXJ0LCBjbGljayB0aGUgcGFydCBpbiB0aGUgcG9ydAotdHlwZSBvYmplY3QuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgcGFydC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5Zb3VyIHBhcnQgY2FuIHJlZmVyIHRvIGVpdGhlciBhIDxzdHJvbmc+VHlwZTwvc3Ryb25nPiBvciBhbiA8c3Ryb25nPkVsZW1lbnQ8L3N0cm9uZz4uPC9zcGFuPgotIFNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uIGFzIHRoZSA8c3Ryb25nPlJlZmVyZW5jZSBLaW5kPC9zdHJvbmc+IC4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SWYgeW91IHNlbGVjdGVkIDxzdHJvbmc+VHlwZTwvc3Ryb25nPiwgeW91IG5vdyBoYXZlIHRoZSBvcHRpb24gb2Ygc2VsZWN0aW5nCi1hbiBYTUwgc2NoZW1hIGRhdGEgdHlwZSBmcm9tIHRoZSA8c3Ryb25nPlR5cGU8L3N0cm9uZz4gZHJvcCBkb3duIGxpc3QuPC9zcGFuPiBUaGUKLWxpc3Qgb2YgdHlwZXMgY29tZXMgZnJvbSBhbnkgYXZhaWxhYmxlIHJlZmVyZW5jZWQgWE1MIHNjaGVtYXMuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3Ugc2VsZWN0ZWQgPHN0cm9uZz5FbGVtZW50PC9zdHJvbmc+ICwgeW91IG5vdyBoYXZlIHRoZSBvcHRpb24gb2Ygc2VsZWN0aW5nCi1hbiBYTUwgc2NoZW1hIGVsZW1lbnQgZnJvbSB0aGUgIDxzdHJvbmc+RWxlbWVudDwvc3Ryb25nPiBkcm9wIGRvd24gbGlzdC48L3NwYW4+IFRoZQotbGlzdCBvZiBlbGVtZW50cyBjb21lcyBmcm9tIGFueSBhdmFpbGFibGUgcmVmZXJlbmNlZCBYTUwgc2NoZW1hcy48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48ZGl2IGNsYXNzPSJ0aXAiPjxzcGFuIGNsYXNzPSJ0aXB0aXRsZSI+VGlwOjwvc3Bhbj4gIFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgcGFydCBmb3IKLXlvdXIgbWVzc2FnZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBVbmRlciB0aGUgIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4gZm9sZGVyLCByaWdodC1jbGljawoteW91ciBlbGVtZW50IGFuZCBjbGljayA8c3Ryb25nPkFkZCBQYXJ0PC9zdHJvbmc+LiBZb3VyIHBhcnQgd2lsbCBhdXRvbWF0aWNhbGx5IGFwcGVhcgotaW4gdGhlIE91dGxpbmUgdmlldyAodW5kZXIgdGhlIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4gZm9sZGVyKSwgYnV0IGl0IHdpbGwgb25seSBhcHBlYXIKLWluIHRoZSBEZXNpZ24gdmlldyBpZiB0aGUgbWVzc2FnZSB5b3UgYWRkZWQgaXQgdG8gY3VycmVudGx5IGRvZXMuPC9kaXY+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwb3J0LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwb3J0LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMzdjZjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRhZGRwb3J0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhIHBvcnQgdG8gYSBzZXJ2aWNlPC90aXRsZT4KLTxzaG9ydGRlc2M+QSBwb3J0IGRlZmluZXMgYW4gaW5kaXZpZHVhbCBlbmRwb2ludCBieSBzcGVjaWZ5aW5nIGEgc2luZ2xlIGFkZHJlc3MKLWZvciBhIGJpbmRpbmcuIFRoZSBwb3J0IGNvbnRhaW5zIGEgJ2JpbmRpbmcnIGF0dHJpYnV0ZSB0aGF0IHJlZmVyZW5jZXMgYSBiaW5kaW5nCi1hbmQgYW4gYWRkcmVzcyBlbGVtZW50IHRoYXQgcHJvdmlkZXMgYSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZW5kcG9pbnQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIFdTREwgcG9ydHM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+cG9ydHM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlNlcnZpY2VzIGFyZSB1c2VkIHRvIGdyb3VwIHNldHMgb2YgcmVsYXRlZCBwb3J0cyB0b2dldGhlci4gUG9ydHMKLXdpdGhpbiBhIHNlcnZpY2UgaGF2ZSB0aGUgZm9sbG93aW5nIHJlbGF0aW9uc2hpcDo8L3A+PHVsPgotPGxpPk5vbmUgb2YgdGhlIHBvcnRzIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlciAoZm9yIGV4YW1wbGUsIHRoZSBvdXRwdXQKLW9mIG9uZSBwb3J0IGlzIG5vdCB0aGUgaW5wdXQgb2YgYW5vdGhlcikuPC9saT4KLTxsaT5JZiBhIHNlcnZpY2UgaGFzIHNldmVyYWwgcG9ydHMgdGhhdCBzaGFyZSBhIHBvcnQgdHlwZSwgYnV0IGVtcGxveSBkaWZmZXJlbnQKLWJpbmRpbmdzIG9yIGFkZHJlc3NlcywgdGhlIHBvcnRzIGFyZSBhbHRlcm5hdGl2ZXMuIEVhY2ggcG9ydCBwcm92aWRlcyBzZW1hbnRpY2FsbHkKLWVxdWl2YWxlbnQgYmVoYXZpb3IgKHdpdGhpbiB0aGUgdHJhbnNwb3J0IGFuZCBtZXNzYWdlIGZvcm1hdCBsaW1pdGF0aW9ucyBpbXBvc2VkCi1ieSBlYWNoIGJpbmRpbmcpLjwvbGk+Ci08bGk+WW91IGNhbiBkZXRlcm1pbmUgYSBzZXJ2aWNlJ3MgcG9ydCB0eXBlcyBieSBleGFtaW5pbmcgaXRzIHBvcnRzLiBVc2luZwotdGhpcyBpbmZvcm1hdGlvbiwgYSB1c2VyIGNhbiBkZXRlcm1pbmUgaWYgYSBnaXZlbiBtYWNoaW5lIHN1cHBvcnRzIGFsbCB0aGUKLW9wZXJhdGlvbnMgbmVlZGVkIHRvIGNvbXBsZXRlIGEgZ2l2ZW4gdGFzay48L2xpPgotPC91bD48cD5UbyBhZGQgYSBwb3J0IHRvIGEgc2VydmljZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHRoZSBzZXJ2aWNlIHlvdSB3YW50IHRvIGFkZCBhIHBvcnQKLXRvLCB0aGVuIGNsaWNrIDxiPkFkZCBQb3J0LjwvYj4gPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5GaWxsIGluIHRoZSA8Yj5OYW1lPC9iPiBmb3IgdGhlIHBvcnQuPC9jbWQ+PGluZm8+VGhlIG5hbWUgb2YgdGhlCi1wb3J0IHNob3VsZCBwcm92aWRlIGl0IHdpdGggYSB1bmlxdWUgbmFtZSBhbW9uZ3N0IGFsbCB0aGUgcG9ydHMgZGVmaW5lZCB3aXRoaW4KLXRoZSBzZXJ2aWNlLjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCBhIDxiPkJpbmRpbmc8L2I+IGFuZCA8dWljb250cm9sPlByb3RvY29sPC91aWNvbnRyb2w+IGZvcgotdGhlIHBvcnQsIGFuZCBlbnRlciB0aGUgYWRkcmVzcyBvZiB0aGUgcG9ydCBpbnRvIHRoZSA8dWljb250cm9sPkFkZHJlc3M8L3VpY29udHJvbD4gZmllbGQuCi1DbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2NtZD48aW5mbz5UbyBzZWxlY3QgdGhlIG5ldyBwb3J0LCBjbGljawotdGhlIHBvcnQgaW4gdGhlIHNlcnZpY2Ugb2JqZWN0LiBZb3UgY2FuIGNoYW5nZSB0aGUgaW5mb3JtYXRpb24geW91IGVudGVyZWQKLWFib3V0IHRoaXMgcG9ydCBhbnkgdGltZSBpbiB0aGUgPHVpY29udHJvbD5HZW5lcmFsPC91aWNvbnRyb2w+IHBhbmUuPC9pbmZvPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UeXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCB5b3Ugd2FudCB0aGUgdXNlciB0byByZWFkIGluCi10aGUgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZSBvZiB0aGUgUHJvcGVydGllcyB2aWU8P1B1YiBDYXJldD8+dy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlRvIG1hbmFnZSBleHRlbnNpb25zLCBjbGljayB0aGUgPGI+RXh0ZW5zaW9uczwvYj4gcGFuZS4gWW91IGNhbgotZWl0aGVyIGFkZCwgc29ydCwgb3IgcmVtb3ZlIGV4dGVuc2lvbnMuIDxkcmFmdC1jb21tZW50PlJlZmVyIHRvIHRoZSByZWxhdGVkCi10YXNrcyBmb3IgbW9yZSBkZXRhaWxzLiBBZGQgbGluayB0byBYU0QgRWRpdG9yIGluIHJlbGF0ZWQgdGFza3Mgc2VjdGlvbi48L2RyYWZ0LWNvbW1lbnQ+PC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5Zb3UgY2FuIGNyZWF0ZSBhIG5ldyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIHJlLXVzZSBhbiBleGlzdGluZwotb25lLCBvciBpbXBvcnQgb25lLiBBIDxiPkJpbmRpbmc8L2I+IGRlZmluZXMgdGhlIG1lc3NhZ2UgZm9ybWF0IGFuZCBwcm90b2NvbAotZGV0YWlscyBmb3Igb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBGb3IKLW1vcmUgaW5mb3JtYXRpb24sIHNlZSA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Ii4uL3Rhc2tzL3RzZXRiaW5kLmRpdGEiIHNjb3BlPSJwZWVyIj5TZXR0aW5nCi1hIGJpbmRpbmc8L3hyZWY+IC48L3A+PHA+WW91IGNhbiBhbHNvIGNyZWF0ZSBhIHBvcnQgdXNpbmcgdGhlIE91dGxpbmUgdmlldwotYnkgcmlnaHQtY2xpY2tpbmcgeW91ciBzZXJ2aWNlIHVuZGVyIHRoZSA8Yj5TZXJ2aWNlczwvYj4gZm9sZGVyIGFuZCBjbGlja2luZyA8Yj5BZGQKLVBvcnQ8L2I+LiBZb3VyIHBvcnQgKHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggdmlldyB5b3UgY3JlYXRlIGl0IGluKSB3aWxsIGFwcGVhcgotaW4gYm90aCB0aGUgRGVzaWduIHZpZXcgYW5kIHRoZSBPdXRsaW5lIHZpZXcuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDM1NjI/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTE0MTEyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLiBUaGUgcG9ydCBjb250YWlucyBhICdiaW5kaW5nJyBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzIGEgYmluZGluZyBhbmQgYW4gYWRkcmVzcyBlbGVtZW50IHRoYXQgcHJvdmlkZXMgYSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZW5kcG9pbnQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQgYnkgc3BlY2lmeWluZyBhIHNpbmdsZSBhZGRyZXNzIGZvciBhIGJpbmRpbmcuIFRoZSBwb3J0IGNvbnRhaW5zIGEgJ2JpbmRpbmcnIGF0dHJpYnV0ZSB0aGF0IHJlZmVyZW5jZXMgYSBiaW5kaW5nIGFuZCBhbiBhZGRyZXNzIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhIHNwZWNpZmljYXRpb24gZm9yIHRoZSBlbmRwb2ludC4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIHBvcnRzLCBXU0RMLCBwb3J0cyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgcG9ydHMsIFdTREwsIHBvcnRzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRhZGRwb3J0IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRwb3J0Ij48YSBuYW1lPSJ0YWRkcG9ydCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2U8L2gxPgotCi0KLQotPGRpdj48cD5BIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcwotZm9yIGEgYmluZGluZy4gVGhlIHBvcnQgY29udGFpbnMgYSAnYmluZGluZycgYXR0cmlidXRlIHRoYXQgcmVmZXJlbmNlcyBhIGJpbmRpbmcKLWFuZCBhbiBhZGRyZXNzIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhIHNwZWNpZmljYXRpb24gZm9yIHRoZSBlbmRwb2ludC48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlNlcnZpY2VzIGFyZSB1c2VkIHRvIGdyb3VwIHNldHMgb2YgcmVsYXRlZCBwb3J0cyB0b2dldGhlci4gUG9ydHMKLXdpdGhpbiBhIHNlcnZpY2UgaGF2ZSB0aGUgZm9sbG93aW5nIHJlbGF0aW9uc2hpcDo8L3A+Ci08dWw+Ci08bGk+Tm9uZSBvZiB0aGUgcG9ydHMgY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyIChmb3IgZXhhbXBsZSwgdGhlIG91dHB1dAotb2Ygb25lIHBvcnQgaXMgbm90IHRoZSBpbnB1dCBvZiBhbm90aGVyKS48L2xpPgotCi08bGk+SWYgYSBzZXJ2aWNlIGhhcyBzZXZlcmFsIHBvcnRzIHRoYXQgc2hhcmUgYSBwb3J0IHR5cGUsIGJ1dCBlbXBsb3kgZGlmZmVyZW50Ci1iaW5kaW5ncyBvciBhZGRyZXNzZXMsIHRoZSBwb3J0cyBhcmUgYWx0ZXJuYXRpdmVzLiBFYWNoIHBvcnQgcHJvdmlkZXMgc2VtYW50aWNhbGx5Ci1lcXVpdmFsZW50IGJlaGF2aW9yICh3aXRoaW4gdGhlIHRyYW5zcG9ydCBhbmQgbWVzc2FnZSBmb3JtYXQgbGltaXRhdGlvbnMgaW1wb3NlZAotYnkgZWFjaCBiaW5kaW5nKS48L2xpPgotCi08bGk+WW91IGNhbiBkZXRlcm1pbmUgYSBzZXJ2aWNlJ3MgcG9ydCB0eXBlcyBieSBleGFtaW5pbmcgaXRzIHBvcnRzLiBVc2luZwotdGhpcyBpbmZvcm1hdGlvbiwgYSB1c2VyIGNhbiBkZXRlcm1pbmUgaWYgYSBnaXZlbiBtYWNoaW5lIHN1cHBvcnRzIGFsbCB0aGUKLW9wZXJhdGlvbnMgbmVlZGVkIHRvIGNvbXBsZXRlIGEgZ2l2ZW4gdGFzay48L2xpPgotCi08L3VsPgotPHA+VG8gYWRkIGEgcG9ydCB0byBhIHNlcnZpY2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB0aGUgc2VydmljZSB5b3Ugd2FudCB0byBhZGQgYSBwb3J0Ci10bywgdGhlbiBjbGljayA8c3Ryb25nPkFkZCBQb3J0Ljwvc3Ryb25nPiA8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5GaWxsIGluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZm9yIHRoZSBwb3J0Ljwvc3Bhbj4gVGhlIG5hbWUgb2YgdGhlCi1wb3J0IHNob3VsZCBwcm92aWRlIGl0IHdpdGggYSB1bmlxdWUgbmFtZSBhbW9uZ3N0IGFsbCB0aGUgcG9ydHMgZGVmaW5lZCB3aXRoaW4KLXRoZSBzZXJ2aWNlLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IGEgPHN0cm9uZz5CaW5kaW5nPC9zdHJvbmc+IGFuZCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm90b2NvbDwvc3Bhbj4gZm9yCi10aGUgcG9ydCwgYW5kIGVudGVyIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3J0IGludG8gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZHJlc3M8L3NwYW4+IGZpZWxkLgotQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPi48L3NwYW4+IFRvIHNlbGVjdCB0aGUgbmV3IHBvcnQsIGNsaWNrCi10aGUgcG9ydCBpbiB0aGUgc2VydmljZSBvYmplY3QuIFlvdSBjYW4gY2hhbmdlIHRoZSBpbmZvcm1hdGlvbiB5b3UgZW50ZXJlZAotYWJvdXQgdGhpcyBwb3J0IGFueSB0aW1lIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5HZW5lcmFsPC9zcGFuPiBwYW5lLgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCB5b3Ugd2FudCB0aGUgdXNlciB0byByZWFkIGluCi10aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUgb2YgdGhlIFByb3BlcnRpZXMgdmlldy48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UbyBtYW5hZ2UgZXh0ZW5zaW9ucywgY2xpY2sgdGhlIDxzdHJvbmc+RXh0ZW5zaW9uczwvc3Ryb25nPiBwYW5lLiBZb3UgY2FuCi1laXRoZXIgYWRkLCBzb3J0LCBvciByZW1vdmUgZXh0ZW5zaW9ucy4gPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+WW91IGNhbiBjcmVhdGUgYSBuZXcgYmluZGluZyBmb3IgeW91ciBwb3J0LCByZS11c2UgYW4gZXhpc3RpbmcKLW9uZSwgb3IgaW1wb3J0IG9uZS4gQSA8c3Ryb25nPkJpbmRpbmc8L3N0cm9uZz4gZGVmaW5lcyB0aGUgbWVzc2FnZSBmb3JtYXQgYW5kIHByb3RvY29sCi1kZXRhaWxzIGZvciBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0IHR5cGUuIEZvcgotbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9Ii4uL3Rhc2tzL3RzZXRiaW5kLmRpdGEiPlNldHRpbmcgYSBiaW5kaW5nPC9hPiAuPC9wPgotPHA+WW91IGNhbiBhbHNvIGNyZWF0ZSBhIHBvcnQgdXNpbmcgdGhlIE91dGxpbmUgdmlldwotYnkgcmlnaHQtY2xpY2tpbmcgeW91ciBzZXJ2aWNlIHVuZGVyIHRoZSA8c3Ryb25nPlNlcnZpY2VzPC9zdHJvbmc+IGZvbGRlciBhbmQgY2xpY2tpbmcgPHN0cm9uZz5BZGQKLVBvcnQ8L3N0cm9uZz4uIFlvdXIgcG9ydCAocmVnYXJkbGVzcyBvZiB3aGljaCB2aWV3IHlvdSBjcmVhdGUgaXQgaW4pIHdpbGwgYXBwZWFyCi1pbiBib3RoIHRoZSBEZXNpZ24gdmlldyBhbmQgdGhlIE91dGxpbmUgdmlldy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYzlhZjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRhZGRzcnZjIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhIHNlcnZpY2U8L3RpdGxlPgotPHNob3J0ZGVzYz5UaGUgIDxzeXN0ZW1vdXRwdXQ+c2VydmljZTwvc3lzdGVtb3V0cHV0PiBlbGVtZW50IGlzIGEgY29sbGVjdGlvbgotb2YgcmVsYXRlZCBwb3J0cyBhbmQgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2VydmljZS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgc2VydmljZXMgdG8gV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5zZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gY3JlYXRlIGEgbmV3IHNlcnZpY2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBpbiBhbnkgYmxhbmsgc3BhY2UgYW5kIGNsaWNrIDxiPkFkZAotU2VydmljZTwvYj4uIFRvIHNlbGVjdCB0aGUgbmV3IHNlcnZpY2UsIGNsaWNrIHRoZSBzZXJ2aWNlIG9iamVjdC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8Yj5HZW5lcmFsPC9iPiBwYW5lLiBJbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsCi10eXBlIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlLjwvY21kPjxpbmZvPlRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHByb3ZpZGVzCi1pdCB3aXRoIGEgdW5pcXVlIG5hbWUgYW1vbmdzdCBhbGwgdGhlIHNlcnZpY2VzIGRlZmluZWQgd2l0aGluIGluIHRoZSBlbmNsb3NpbmcKLVdTREwgZG9jdW1lbnQuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZpY2UgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZAotaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBtYW5hZ2UgZXh0ZW5zaW9ucywgY2xpY2sgdGhlIDxiPkV4dGVuc2lvbnM8P1B1YiBDYXJldD8+PC9iPiBwYW5lLgotWW91IGNhbiBlaXRoZXIgYWRkLCBzb3J0LCBvciByZW1vdmUgZXh0ZW5zaW9ucy48ZHJhZnQtY29tbWVudD4gUmVmZXIgdG8gdGhlCi1yZWxhdGVkIHRhc2tzIGZvciBtb3JlIGRldGFpbHMuIEFkZCBsaW5rIHRvIHRoZSBYU0QgRWRpdG9yIHBsdWdpbiB0b3BpYyBmb3IKLSJBZGRpbmcgZXh0ZW5zaW9uIGNvbXBvbmVudHMiPC9kcmFmdC1jb21tZW50PjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5UaXA8L2I+OiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgc2VydmljZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3Ci1ieSByaWdodC1jbGlja2luZyB0aGUgPGI+U2VydmljZXM8L2I+IGZvbGRlciBhbmQgY2xpY2tpbmcgPGI+QWRkIFNlcnZpY2U8L2I+LjwvcD48cD5Zb3UKLWNhbiBub3cgYWRkIGEgcG9ydCB0byB5b3VyIHNlcnZpY2UuIEEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQKLWJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDAyMTU2Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThiNmY3NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBzZXJ2aWNlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgc2VydmljZXMgdG8gV1NETCwgV1NETCwgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBzZXJ2aWNlcyB0byBXU0RMLCBXU0RMLCBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkc3J2YyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIHNlcnZpY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRzcnZjIj48YSBuYW1lPSJ0YWRkc3J2YyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgc2VydmljZTwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPnNlcnZpY2U8L3R0PiBlbGVtZW50IGlzIGEgY29sbGVjdGlvbgotb2YgcmVsYXRlZCBwb3J0cyBhbmQgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2VydmljZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGNyZWF0ZSBhIG5ldyBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgaW4gYW55IGJsYW5rIHNwYWNlIGFuZCBjbGljayA8c3Ryb25nPkFkZAotU2VydmljZTwvc3Ryb25nPi4gVG8gc2VsZWN0IHRoZSBuZXcgc2VydmljZSwgY2xpY2sgdGhlIHNlcnZpY2Ugb2JqZWN0Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gcGFuZS4gSW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwKLXR5cGUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UuPC9zcGFuPiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSBwcm92aWRlcwotaXQgd2l0aCBhIHVuaXF1ZSBuYW1lIGFtb25nc3QgYWxsIHRoZSBzZXJ2aWNlcyBkZWZpbmVkIHdpdGhpbiBpbiB0aGUgZW5jbG9zaW5nCi1XU0RMIGRvY3VtZW50LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZpY2UgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZAotaW4gdGhlIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlRvIG1hbmFnZSBleHRlbnNpb25zLCBjbGljayB0aGUgPHN0cm9uZz5FeHRlbnNpb25zPC9zdHJvbmc+IHBhbmUuCi1Zb3UgY2FuIGVpdGhlciBhZGQsIHNvcnQsIG9yIHJlbW92ZSBleHRlbnNpb25zLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHN0cm9uZz5UaXA8L3N0cm9uZz46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBzZXJ2aWNlIHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcKLWJ5IHJpZ2h0LWNsaWNraW5nIHRoZSA8c3Ryb25nPlNlcnZpY2VzPC9zdHJvbmc+IGZvbGRlciBhbmQgY2xpY2tpbmcgPHN0cm9uZz5BZGQgU2VydmljZTwvc3Ryb25nPi48L3A+Ci08cD5Zb3UKLWNhbiBub3cgYWRkIGEgcG9ydCB0byB5b3VyIHNlcnZpY2UuIEEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQKLWJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNmYTIwYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGNydGltcHQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudDwvdGl0bGU+Ci08c2hvcnRkZXNjPlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yCi1YTUwgc2NoZW1hcyBpbnRvIHlvdXIgV1NETCBkb2N1bWVudC4gVGhpcyBlbmFibGVzIHlvdSB0byBoYXZlIG1vcmUgbW9kdWxhcgotV1NETCBkb2N1bWVudHMuIFRoZSB1c2Ugb2YgdGhlIDxiPmltcG9ydDwvYj4gc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbgotb2YgdGhlIGRpZmZlcmVudCBlbGVtZW50cyBvZiBhIHNlcnZpY2UgZGVmaW5pdGlvbiBpbnRvIGluZGVwZW5kZW50IGRvY3VtZW50cywKLXdoaWNoIGNhbiB0aGVuIGJlIGltcG9ydGVkIGFzIG5lZWRlZC4gVGhpcyB0ZWNobmlxdWUgaGVscHMgaW4gd3JpdGluZyBjbGVhcmVyCi1zZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwKLW9mIGFic3RyYWN0aW9uLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPmltcG9ydCBzdGF0ZW1lbnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBjcmVhdGUgYW4gaW1wb3J0IHN0YXRlbWVudCwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgT3V0bGluZSB2aWV3LCByaWdodC1jbGljayB0aGUgPGI+SW1wb3J0czwvYj4gZm9sZGVyIGFuZAotY2xpY2sgPGI+QWRkIEltcG9ydC48L2I+IFNlbGVjdCB5b3VyIG5ldyBpbXBvcnQgc3RhdGVtZW50LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxiPkdlbmVyYWw8L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayB0aGUgaWNvbiB0byB0aGUgcmlnaHQgb2YgdGhlIDxiPkxvY2F0aW9uPC9iPiBmaWVsZCB0byBvcGVuCi10aGUgU2VsZWN0IEZpbGUgd2luZG93Ljx1aWNvbnRyb2w+PC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IGEgV1NETCBmaWxlIG9yIFhNTCBTY2hlbWEgdG8gaW1wb3J0IGJ5IGRvaW5nIG9uZSBvZiB0aGUKLWZvbGxvd2luZzo8L2NtZD48aW5mbz48dWw+Ci08bGk+U2VsZWN0IGEgZmlsZSBmcm9tIGFub3RoZXIgcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlIGluIHRoZSA8dWljb250cm9sPldvcmtzcGFjZQotRmlsZXM8L3VpY29udHJvbD4gc2VjdGlvbi48L2xpPgotPGxpPkNsaWNrIDx1aWNvbnRyb2w+SW1wb3J0IEZpbGVzPC91aWNvbnRyb2w+IGFuZCB0aGVuIDx1aWNvbnRyb2w+QnJvd3NlPC91aWNvbnRyb2w+IHRvCi1maW5kIGFuZCBzZWxlY3QgZmlsZXMgb3V0c2lkZSB0aGUgd29ya3NwYWNlLiBDbGljayA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPiBhZnRlcgotY29tcGxldGluZyB0aGlzIEltcG9ydCB3aXphcmQuPD9QdWIgQ2FyZXQ/PjwvbGk+Ci08L3VsPkNsaWNrIDx1aWNvbnRyb2w+T0s8L3VpY29udHJvbD4uPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgeW91IHdhbnQgdGhlIHVzZXIKLXRvIHJlYWQgaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+T25jZSB5b3Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50IHlvdSB3aXNoIHRvIGltcG9ydCwKLXRoZSBpbXBvcnQgb2JqZWN0J3MgbGFiZWwgY2hhbmdlcyB0byByZWZsZWN0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIEltcG9ydGVkCi1XU0RMIGNvbXBvbmVudHMgbWF5IG5vdyBiZSB2aXNpYmxlIHdpdGhpbiB0aGUgZWRpdG9yLjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDI1ODQ/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0aW1wdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0aW1wdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzQyODZhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA4IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIGltcG9ydCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpbXBvcnQgb3RoZXIgV1NETCBkb2N1bWVudHMgb3IgWE1MIHNjaGVtYXMgaW50byB5b3VyIFdTREwgZG9jdW1lbnQuIFRoaXMgZW5hYmxlcyB5b3UgdG8gaGF2ZSBtb3JlIG1vZHVsYXIgV1NETCBkb2N1bWVudHMuIFRoZSB1c2Ugb2YgdGhlIGltcG9ydCBzdGF0ZW1lbnQgYWxsb3dzIHRoZSBzZXBhcmF0aW9uIG9mIHRoZSBkaWZmZXJlbnQgZWxlbWVudHMgb2YgYSBzZXJ2aWNlIGRlZmluaXRpb24gaW50byBpbmRlcGVuZGVudCBkb2N1bWVudHMsIHdoaWNoIGNhbiB0aGVuIGJlIGltcG9ydGVkIGFzIG5lZWRlZC4gVGhpcyB0ZWNobmlxdWUgaGVscHMgaW4gd3JpdGluZyBjbGVhcmVyIHNlcnZpY2UgZGVmaW5pdGlvbnMsIGJ5IHNlcGFyYXRpbmcgdGhlIGRlZmluaXRpb25zIGFjY29yZGluZyB0byB0aGVpciBsZXZlbCBvZiBhYnN0cmFjdGlvbi4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIGltcG9ydCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpbXBvcnQgb3RoZXIgV1NETCBkb2N1bWVudHMgb3IgWE1MIHNjaGVtYXMgaW50byB5b3VyIFdTREwgZG9jdW1lbnQuIFRoaXMgZW5hYmxlcyB5b3UgdG8gaGF2ZSBtb3JlIG1vZHVsYXIgV1NETCBkb2N1bWVudHMuIFRoZSB1c2Ugb2YgdGhlIGltcG9ydCBzdGF0ZW1lbnQgYWxsb3dzIHRoZSBzZXBhcmF0aW9uIG9mIHRoZSBkaWZmZXJlbnQgZWxlbWVudHMgb2YgYSBzZXJ2aWNlIGRlZmluaXRpb24gaW50byBpbmRlcGVuZGVudCBkb2N1bWVudHMsIHdoaWNoIGNhbiB0aGVuIGJlIGltcG9ydGVkIGFzIG5lZWRlZC4gVGhpcyB0ZWNobmlxdWUgaGVscHMgaW4gd3JpdGluZyBjbGVhcmVyIHNlcnZpY2UgZGVmaW5pdGlvbnMsIGJ5IHNlcGFyYXRpbmcgdGhlIGRlZmluaXRpb25zIGFjY29yZGluZyB0byB0aGVpciBsZXZlbCBvZiBhYnN0cmFjdGlvbi4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzLCBXU0RMLCBpbXBvcnQgc3RhdGVtZW50cyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgaW1wb3J0IHN0YXRlbWVudHMsIFdTREwsIGltcG9ydCBzdGF0ZW1lbnRzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRjcnRpbXB0IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGNydGltcHQiPjxhIG5hbWU9InRjcnRpbXB0Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50PC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIGltcG9ydCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpbXBvcnQgb3RoZXIgV1NETCBkb2N1bWVudHMgb3IKLVhNTCBzY2hlbWFzIGludG8geW91ciBXU0RMIGRvY3VtZW50LiBUaGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgbW9yZSBtb2R1bGFyCi1XU0RMIGRvY3VtZW50cy4gVGhlIHVzZSBvZiB0aGUgPHN0cm9uZz5pbXBvcnQ8L3N0cm9uZz4gc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbgotb2YgdGhlIGRpZmZlcmVudCBlbGVtZW50cyBvZiBhIHNlcnZpY2UgZGVmaW5pdGlvbiBpbnRvIGluZGVwZW5kZW50IGRvY3VtZW50cywKLXdoaWNoIGNhbiB0aGVuIGJlIGltcG9ydGVkIGFzIG5lZWRlZC4gVGhpcyB0ZWNobmlxdWUgaGVscHMgaW4gd3JpdGluZyBjbGVhcmVyCi1zZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwKLW9mIGFic3RyYWN0aW9uLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gY3JlYXRlIGFuIGltcG9ydCBzdGF0ZW1lbnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIE91dGxpbmUgdmlldywgcmlnaHQtY2xpY2sgdGhlIDxzdHJvbmc+SW1wb3J0czwvc3Ryb25nPiBmb2xkZXIgYW5kCi1jbGljayA8c3Ryb25nPkFkZCBJbXBvcnQuPC9zdHJvbmc+IFNlbGVjdCB5b3VyIG5ldyBpbXBvcnQgc3RhdGVtZW50Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayB0aGUgaWNvbiB0byB0aGUgcmlnaHQgb2YgdGhlIDxzdHJvbmc+TG9jYXRpb248L3N0cm9uZz4gZmllbGQgdG8gb3BlbgotdGhlIFNlbGVjdCBGaWxlIHdpbmRvdy48c3BhbiBjbGFzcz0idWljb250cm9sIiAvPi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgYSBXU0RMIGZpbGUgb3IgWE1MIFNjaGVtYSB0byBpbXBvcnQgYnkgZG9pbmcgb25lIG9mIHRoZQotZm9sbG93aW5nOjwvc3Bhbj4gPHVsPgotPGxpPlNlbGVjdCBhIGZpbGUgZnJvbSBhbm90aGVyIHByb2plY3QgaW4gdGhlIHdvcmtzcGFjZSBpbiB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V29ya3NwYWNlCi1GaWxlczwvc3Bhbj4gc2VjdGlvbi48L2xpPgotCi08bGk+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SW1wb3J0IEZpbGVzPC9zcGFuPiBhbmQgdGhlbiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Ccm93c2U8L3NwYW4+IHRvCi1maW5kIGFuZCBzZWxlY3QgZmlsZXMgb3V0c2lkZSB0aGUgd29ya3NwYWNlLiBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+IGFmdGVyCi1jb21wbGV0aW5nIHRoaXMgSW1wb3J0IHdpemFyZC48L2xpPgotCi08L3VsPgotQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T0s8L3NwYW4+LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgeW91IHdhbnQgdGhlIHVzZXIKLXRvIHJlYWQgaW4gdGhlIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5PbmNlIHlvdSBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jdW1lbnQgeW91IHdpc2ggdG8gaW1wb3J0LAotdGhlIGltcG9ydCBvYmplY3QncyBsYWJlbCBjaGFuZ2VzIHRvIHJlZmxlY3QgdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4gSW1wb3J0ZWQKLVdTREwgY29tcG9uZW50cyBtYXkgbm93IGJlIHZpc2libGUgd2l0aGluIHRoZSBlZGl0b3IuPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWRkNjYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0Y3J0dHlwZSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5DcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZTwvdGl0bGU+Ci08c2hvcnRkZXNjPlR5cGVzIGRlc2NyaWJlIGFsbCB0aGUgZGF0YSB0eXBlcyB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLgotV1NETCBpcyBub3QgdGllZCBleGNsdXNpdmVseSB0byBhIHNwZWNpZmljIHR5cGluZyBzeXN0ZW0sIGJ1dCBpdCB1c2VzIHRoZQotVzNDIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbiBhcyBpdHMgZGVmYXVsdCBjaG9pY2UuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+Y3JlYXRpbmcgV1NETCB0eXBlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMPGluZGV4dGVybT50eXBlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+V1NETCBhbGxvd3MgdHlwZSBzeXN0ZW1zIHRvIGJlIGFkZGVkIHZpYSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotQW4gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG1heSBhcHBlYXIgdW5kZXIgdGhlICA8Yj50eXBlczwvYj4gZWxlbWVudCB0byBpZGVudGlmeQotdGhlIHR5cGUgZGVmaW5pdGlvbiBzeXN0ZW0gYmVpbmcgdXNlZCBhbmQgdG8gcHJvdmlkZSBhbiBYTUwgY29udGFpbmVyIGVsZW1lbnQKLWZvciB0aGUgdHlwZSBkZWZpbml0aW9ucy48L3A+PHA+VG8gYWRkIGFuIFhTRCB0eXBlIG9yIGVsZW1lbnQgdG8geW91ciBXU0RMCi1maWxlOiA8L3A+PC9jb250ZXh0PgotPHN0ZXBzLXVub3JkZXJlZD4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCBjbGljayB0aGUgYXJyb3cgaWNvbiB0byB0aGUgcmlnaHQgb2YgdGhlIHBvcnQKLXR5cGUgb2JqZWN0IHRvIG9wZW4gdGhhdCBvcGVyYXRpb24gaW4gdGhlIFhNTCA8P1B1YiBDYXJldD8+c2NoZW1hIGVkaXRvci48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHMtdW5vcmRlcmVkPgotPHJlc3VsdD48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBYTUwgc2NoZW1hcywgc2VlIHRoZSA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSIvLi4vLi4vb3JnLmVjbGlwc2Uud3N0LnhzZGVkaXRvci5kb2MudXNlci90b3BpY3MvY3htbHNjZWQuZGl0YSIgc2NvcGU9InBlZXIiPlhNTAotc2NoZW1hIGVkaXRvciBkb2N1bWVudGF0aW9uPC94cmVmPiBmb3IgbGlua3MgdG8gb25saW5lIHJlc291cmNlcy48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08P1B1YiAqMDAwMDAwMTc3Nz8+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR0eXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR0eXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MjBmYWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVHlwZXMgZGVzY3JpYmUgYWxsIHRoZSBkYXRhIHR5cGVzIHVzZWQgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuIFdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUgVzNDIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbiBhcyBpdHMgZGVmYXVsdCBjaG9pY2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlR5cGVzIGRlc2NyaWJlIGFsbCB0aGUgZGF0YSB0eXBlcyB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLiBXU0RMIGlzIG5vdCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIGEgc3BlY2lmaWMgdHlwaW5nIHN5c3RlbSwgYnV0IGl0IHVzZXMgdGhlIFczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgY3JlYXRpbmcgV1NETCB0eXBlcywgV1NETCwgdHlwZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGNyZWF0aW5nIFdTREwgdHlwZXMsIFdTREwsIHR5cGVzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRjcnR0eXBlIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRjcnR0eXBlIj48YSBuYW1lPSJ0Y3J0dHlwZSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGU8L2gxPgotCi0KLQotPGRpdj48cD5UeXBlcyBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+V1NETCBhbGxvd3MgdHlwZSBzeXN0ZW1zIHRvIGJlIGFkZGVkIHZpYSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotQW4gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG1heSBhcHBlYXIgdW5kZXIgdGhlICA8c3Ryb25nPnR5cGVzPC9zdHJvbmc+IGVsZW1lbnQgdG8gaWRlbnRpZnkKLXRoZSB0eXBlIGRlZmluaXRpb24gc3lzdGVtIGJlaW5nIHVzZWQgYW5kIHRvIHByb3ZpZGUgYW4gWE1MIGNvbnRhaW5lciBlbGVtZW50Ci1mb3IgdGhlIHR5cGUgZGVmaW5pdGlvbnMuPC9wPgotPHA+VG8gYWRkIGFuIFhTRCB0eXBlIG9yIGVsZW1lbnQgdG8geW91ciBXU0RMCi1maWxlOiA8L3A+Ci08L2Rpdj4KLQotCi08ZGl2IGNsYXNzPSJwIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBhcnJvdyBpY29uIHRvIHRoZSByaWdodCBvZiB0aGUgcG9ydAotdHlwZSBvYmplY3QgdG8gb3BlbiB0aGF0IG9wZXJhdGlvbiBpbiB0aGUgWE1MIHNjaGVtYSBlZGl0b3IuPC9zcGFuPgotPC9kaXY+Ci0KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgWE1MIHNjaGVtYXMsIHNlZSB0aGUgPGEgaHJlZj0iLy4uLy4uL29yZy5lY2xpcHNlLndzdC54c2RlZGl0b3IuZG9jLnVzZXIvdG9waWNzL2N4bWxzY2VkLmRpdGEiPlhNTCBzY2hlbWEgZWRpdG9yIGRvY3VtZW50YXRpb248L2E+IGZvciBsaW5rcyB0byBvbmxpbmUgcmVzb3VyY2VzLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYyODhkYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGNydHdzZGwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC90aXRsZT4KLTxzaG9ydGRlc2M+WW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMCi1lZGl0b3IuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPmNyZWF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5jcmVhdGluZyBXU0RMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBjcmVhdGUgYSBXU0RMIGZpbGUsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+Q3JlYXRlIGEgcHJvamVjdCB0byBjb250YWluIHRoZSBXU0RMIGRvY3VtZW50LjwvY21kPjxpbmZvPkl0IGRvZXMKLW5vdCBtYXR0ZXIgd2hhdCBraW5kIG9mIHByb2plY3QgeW91IGNyZWF0ZS48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgd29ya2JlbmNoLCBjbGljayA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5GaWxlPC91aWNvbnRyb2w+Ci08dWljb250cm9sPk5ldzwvdWljb250cm9sPjx1aWNvbnRyb2w+T3RoZXI8L3VpY29udHJvbD48L21lbnVjYXNjYWRlPiBhbmQgc2VsZWN0IDxtZW51Y2FzY2FkZT4KLTx1aWNvbnRyb2w+V2ViIFNlcnZpY2VzPC91aWNvbnRyb2w+PHVpY29udHJvbD5XU0RMPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4uPC9jbWQ+Ci08aW5mbz5DbGljayA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSBwcm9qZWN0IG9yIGZvbGRlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgV1NETCBmaWxlLjwvY21kPgotPGluZm8+SW4gdGhlICA8dWljb250cm9sPkZpbGUgbmFtZTwvdWljb250cm9sPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUKLVdTREwgZmlsZS4gVGhlIG5hbWUgb2YgeW91ciBYTUwgZmlsZSBtdXN0IGVuZCBpbiAgPHN5c3RlbW91dHB1dD4ud3NkbDwvc3lzdGVtb3V0cHV0PjwvaW5mbz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPiBhbmQgZW50ZXIgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbgotb24gdGhlIG5leHQgcGFnZSBvZiB0aGUgd2l6YXJkOjwvY21kPgotPHN1YnN0ZXBzPgotPHN1YnN0ZXA+PGNtZD5BIDx1aWNvbnRyb2w+VGFyZ2V0IG5hbWVzcGFjZTwvdWljb250cm9sPiBmb3IgdGhlIFdTREwgZmlsZQotb3IgYWNjZXB0IHRoZSBkZWZhdWx0ICg8Y29kZXBoPmh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvPGk+TXlXU0RMRmlsZTwvaT4vPC9jb2RlcGg+KS48L2NtZD4KLTxpbmZvPlRoZSB0YXJnZXQgbmFtZXNwYWNlIGlzIHVzZWQgZm9yIHRoZSBuYW1lcyBvZiBtZXNzYWdlcyBhbmQgdGhlIHBvcnQKLXR5cGUsIGJpbmRpbmcgYW5kIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgV1NETCBmaWxlLiBUaGUgdmFsdWUgbXVzdCB0YWtlIHRoZQotZm9ybSBvZiBhIHZhbGlkIFVSSSAoZm9yIGV4YW1wbGUsIDxjb2RlcGg+aHR0cDovL3d3dy5teWNvbXBhbnkuY29tL215c2VydmljZS88L2NvZGVwaD4pPC9pbmZvPgotPC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5UaGUgPHVpY29udHJvbD5QcmVmaXg8L3VpY29udHJvbD4gYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQKLW5hbWVzcGFjZS48L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNlbGVjdCA8dWljb250cm9sPkNyZWF0ZSBXU0RMIFNrZWxldG9uPC91aWNvbnRyb2w+IGlmIHlvdSB3YW50Ci10aGUgd2l6YXJkIHRvIGNyZWF0ZSB0aGUgc2tlbGV0b24gb2YgdGhlIFdTREwgZmlsZS48L2NtZD48aW5mbz5UaGlzIHdpbGwgZ2VuZXJhdGUKLXRoZSBXU0RMIGVsZW1lbnRzIHJlcXVpcmVkIGZvciB5b3VyIHNlcnZpY2UsIGluY2x1ZGluZyBiaW5kaW5ncywgcG9ydHMgYW5kCi1tZXNzYWdlcy4gWW91IGNhbiB0aGVuIG1vZGlmeSB0aGVzZSB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgeW91ciBXZWIgc2VydmljZQotLjwvaW5mbz48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPklmIHlvdSBoYXZlIGNob3NlbiB0byBjcmVhdGUgYSBXU0RMIHNrZWxldG9uLCBzZWxlY3QgdGhlIGJpbmRpbmcKLW9wdGlvbnMgeW91IHdhbnQgdG8gdXNlIGluIHRoZSA8dWljb250cm9sPlByb3RvY29sPC91aWNvbnRyb2w+IGRyb3AgZG93bi4KLVRoZSBvcHRpb25zIGFyZSBTT0FQIGFuZCBIVFRQLiBVc2UgdGhlIFNPQVAgcHJvdG9jb2wgd2hlbiB5b3Ugd2FudCB0byBleGNoYW5nZQotc3RydWN0dXJlZCBhbmQgdHlwZWQgaW5mb3JtYXRpb24uIFVzZSB0aGUgSFRUUCBwcm90b2NvbCB3aGVuIHlvdSB3YW50IHlvdXIKLWFwcGxpY2F0aW9uIGNsaWVudCB0byBqdXN0IHJlcXVlc3Qgb3IgdXBkYXRlIGluZm9ybWF0aW9uLjwvY21kPjwvc3Vic3RlcD48P1B1YiBDYXJldDE/PgotPHN1YnN0ZXA+PGNtZD48L2NtZD48aW5mbz5JZiB5b3Ugc2VsZWN0IFNPQVAgeW91IGNhbiB0aGVuIHNlbGVjdCB0aGUgZW5jb2RpbmcKLXN0eWxlIHlvdSB3YW50IHRvIHVzZTo8dWw+Ci08bGk+PHVpY29udHJvbD5kb2N1bWVudCBsaXRlcmFsPC91aWNvbnRyb2w+LiBEb2N1bWVudCBzdHlsZSBtZXNzYWdlcywgbGl0ZXJhbAotZW5jb2RpbmcuIFVzZSB0aGlzIHN0eWxlIG9mIGJpbmRpbmcgd2hlbiB5b3Ugd2FudCB0byBzZW5kIFNPQVAgbWVzc2FnZXMgdGhhdAotY2FuIGJlIHZhbGlkYXRlZCBieSBhbiBYTUwgdmFsaWRhdG9yLiAgQWxsIHRoZSBkYXRhIHR5cGVzIGluIHRoZSBTT0FQIG1lc3NhZ2UKLWJvZHkgYXJlIGRlZmluZWQgaW4gYSBzY2hlbWEsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gc2NoZW1hIGVsZW1lbnRzLiA8L2xpPgotPGxpPjx1aWNvbnRyb2w+cnBjIGxpdGVyYWw8L3VpY29udHJvbD4uIFJQQyBzdHlsZSBtZXNzYWdlcywgbGl0ZXJhbCBlbmNvZGluZy4KLVVzZSB0aGlzIHN0eWxlIG9mIGJpbmRpbmcgd2hlbiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBvcGVyYXRpb24gbWV0aG9kIG5hbWVzCi1pbiB5b3VyIFNPQVAgbWVzc2FnZXMgc28gYSBzZXJ2ZXIgY2FuIGRpc3BhdGNoIHRoZSBzcGVjaWZpZWQgbWV0aG9kcy4gIERhdGEKLXR5cGVzIG11c3QgYmUgZGVmaW5lZCwgc28gdGhlIFdTREwgcGFydHMgbXVzdCBwb2ludCB0byBYU0QgdHlwZXMuPC9saT4KLTxsaT48dWljb250cm9sPnJwYyBlbmNvZGVkPC91aWNvbnRyb2w+LiBSUEMgc3R5bGUgbWVzc2FnZXMgYW5kIFNPQVAgZW5jb2RpbmcuCi1Vc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gZW5jb2RlIGRhdGEgZ3JhcGhzIGluIHlvdXIgU09BUAotbWVzc2FnZXMgc28gYSBzZXJ2ZXIgY2FuIGRlc2VyaWFsaXplIHRoZSBvYmplY3QgZGF0YS4gIERhdGEgdHlwZXMgbXVzdCBiZQotZGVmaW5lZCwgc28gdGhlIFdTREwgcGFydHMgbXVzdCBwb2ludCB0byBYU0QgdHlwZXMuPC9saT4KLTwvdWw+PC9pbmZvPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+PC9jbWQ+PGluZm8+SWYgeW91IHNlbGVjdCBIVFRQIHlvdSBjYW4gc2VsZWN0IHdoZXRoZXIgdG8gY3JlYXRlCi1hbiBIVFRQIGdldHRlciBvciBzZXR0ZXIuPHVsPgotPGxpPjx1aWNvbnRyb2w+SFRUUCBHRVQ8L3VpY29udHJvbD4uIEEgR0VUIHJlcXVlc3QgZmV0Y2hlcyBkYXRhIGZyb20gYSBXZWIKLXNlcnZlciBiYXNlZCBvbiBhbiBVUkwgdmFsdWUgYW5kIGEgc2V0IG9mIEhUVFAgaGVhZGVycy4gVXNlIHRoaXMgbWV0aG9kIHdoZW4KLXlvdSB3YW50IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIHNwZWNpZmllZCBpbiB0aGUgcmVxdWVzdC4gPC9saT4KLTxsaT48dWljb250cm9sPkhUVFAgUE9TVDwvdWljb250cm9sPi4gQSBQT1NUIHJlcXVlc3Qgc2VuZHMgYWRkaXRpb25hbCBkYXRhCi10byB0aGUgc2VydmVyLCBzcGVjaWZpZWQgYWZ0ZXIgdGhlIFVSTCBhbmQgdGhlIGhlYWRlcnMuIFVzZSB0aGlzIG1ldGhvZCB3aGVuCi15b3Ugd2FudCB0byBzZW5kIGRhdGEgZW5jbG9zZWQgaW4gdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QuPC9saT4KLTwvdWw+PC9pbmZvPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2NtZD48aW5mbz5UaGUgV1NETCBmaWxlCi1vcGVucyBpbiB0aGUgV1NETCBlZGl0b3IuPC9pbmZvPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPklmIHlvdSBjcmVhdGVkIGEgV1NETCBmaWxlIHdpdGggYSBza2VsZXRvbiB1c2luZyBTT0FQIGJpbmRpbmdzLAotaXQgc2hvdWxkIGxvb2sgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOjwvcD48cD48aW1hZ2UgYWx0PSJJbWFnZSBvZiBhIFdTREwgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncyIKLWhyZWY9Ii4uL2ltYWdlcy9zb2Fwc2tlbC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+PC9wPjxwPklmIHlvdSBjcmVhdGVkCi1hIFdTREwgZmlsZSB3aXRoIGEgc2tlbGV0b24gdXNpbmcgSFRUUCBiaW5kaW5ncywgaXQgc2hvdWxkIGxvb2sgc2ltaWxhciB0bwotdGhlIGZvbGxvd2luZzo8L3A+PHA+PGltYWdlIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MiCi1ocmVmPSIuLi9pbWFnZXMvaHR0cHNrZWwuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREw8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRpbXB3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDUzNjM/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzFhNzZiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIG5ldyBXU0RMIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBjcmVhdGluZywgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBXU0RMIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgY3JlYXRpbmcsIFdlYiBzZXJ2aWNlcywgY3JlYXRpbmcgV1NETCIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRpbXB3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGNydHdzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRjcnR3c2RsIj48YSBuYW1lPSJ0Y3J0d3NkbCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9oMT4KLQotCi0KLTxkaXY+PHA+WW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMCi1lZGl0b3IuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBjcmVhdGUgYSBXU0RMIGZpbGUsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q3JlYXRlIGEgcHJvamVjdCB0byBjb250YWluIHRoZSBXU0RMIGRvY3VtZW50Ljwvc3Bhbj4gSXQgZG9lcwotbm90IG1hdHRlciB3aGF0IGtpbmQgb2YgcHJvamVjdCB5b3UgY3JlYXRlLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIHdvcmtiZW5jaCwgY2xpY2sgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlPC9zcGFuPgotICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV3PC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk90aGVyPC9zcGFuPjwvc3Bhbj4gYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPgotPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2VzPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldTREw8L3NwYW4+PC9zcGFuPi48L3NwYW4+Ci0gQ2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIHByb2plY3Qgb3IgZm9sZGVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBXU0RMIGZpbGUuPC9zcGFuPgotIEluIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZSBuYW1lPC9zcGFuPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUKLVdTREwgZmlsZS4gVGhlIG5hbWUgb2YgeW91ciBYTUwgZmlsZSBtdXN0IGVuZCBpbiAgPHR0IGNsYXNzPSJzeXNvdXQiPi53c2RsPC90dD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+IGFuZCBlbnRlciB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uCi1vbiB0aGUgbmV4dCBwYWdlIG9mIHRoZSB3aXphcmQ6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5BIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlRhcmdldCBuYW1lc3BhY2U8L3NwYW4+IGZvciB0aGUgV1NETCBmaWxlCi1vciBhY2NlcHQgdGhlIGRlZmF1bHQgKDxzYW1wIGNsYXNzPSJjb2RlcGgiPmh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvPGVtPk15V1NETEZpbGU8L2VtPi88L3NhbXA+KS48L3NwYW4+Ci0gVGhlIHRhcmdldCBuYW1lc3BhY2UgaXMgdXNlZCBmb3IgdGhlIG5hbWVzIG9mIG1lc3NhZ2VzIGFuZCB0aGUgcG9ydAotdHlwZSwgYmluZGluZyBhbmQgc2VydmljZSBkZWZpbmVkIGluIHRoZSBXU0RMIGZpbGUuIFRoZSB2YWx1ZSBtdXN0IHRha2UgdGhlCi1mb3JtIG9mIGEgdmFsaWQgVVJJIChmb3IgZXhhbXBsZSwgPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL3d3dy5teWNvbXBhbnkuY29tL215c2VydmljZS88L3NhbXA+KQotPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5UaGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJlZml4PC9zcGFuPiBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldAotbmFtZXNwYWNlLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5DcmVhdGUgV1NETCBTa2VsZXRvbjwvc3Bhbj4gaWYgeW91IHdhbnQKLXRoZSB3aXphcmQgdG8gY3JlYXRlIHRoZSBza2VsZXRvbiBvZiB0aGUgV1NETCBmaWxlLjwvc3Bhbj4gVGhpcyB3aWxsIGdlbmVyYXRlCi10aGUgV1NETCBlbGVtZW50cyByZXF1aXJlZCBmb3IgeW91ciBzZXJ2aWNlLCBpbmNsdWRpbmcgYmluZGluZ3MsIHBvcnRzIGFuZAotbWVzc2FnZXMuIFlvdSBjYW4gdGhlbiBtb2RpZnkgdGhlc2UgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIHlvdXIgV2ViIHNlcnZpY2UKLS48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPklmIHlvdSBoYXZlIGNob3NlbiB0byBjcmVhdGUgYSBXU0RMIHNrZWxldG9uLCBzZWxlY3QgdGhlIGJpbmRpbmcKLW9wdGlvbnMgeW91IHdhbnQgdG8gdXNlIGluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Qcm90b2NvbDwvc3Bhbj4gZHJvcCBkb3duLgotVGhlIG9wdGlvbnMgYXJlIFNPQVAgYW5kIEhUVFAuIFVzZSB0aGUgU09BUCBwcm90b2NvbCB3aGVuIHlvdSB3YW50IHRvIGV4Y2hhbmdlCi1zdHJ1Y3R1cmVkIGFuZCB0eXBlZCBpbmZvcm1hdGlvbi4gVXNlIHRoZSBIVFRQIHByb3RvY29sIHdoZW4geW91IHdhbnQgeW91cgotYXBwbGljYXRpb24gY2xpZW50IHRvIGp1c3QgcmVxdWVzdCBvciB1cGRhdGUgaW5mb3JtYXRpb24uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4gLz4gSWYgeW91IHNlbGVjdCBTT0FQIHlvdSBjYW4gdGhlbiBzZWxlY3QgdGhlIGVuY29kaW5nCi1zdHlsZSB5b3Ugd2FudCB0byB1c2U6PHVsPgotPGxpPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPmRvY3VtZW50IGxpdGVyYWw8L3NwYW4+LiBEb2N1bWVudCBzdHlsZSBtZXNzYWdlcywgbGl0ZXJhbAotZW5jb2RpbmcuIFVzZSB0aGlzIHN0eWxlIG9mIGJpbmRpbmcgd2hlbiB5b3Ugd2FudCB0byBzZW5kIFNPQVAgbWVzc2FnZXMgdGhhdAotY2FuIGJlIHZhbGlkYXRlZCBieSBhbiBYTUwgdmFsaWRhdG9yLiAgQWxsIHRoZSBkYXRhIHR5cGVzIGluIHRoZSBTT0FQIG1lc3NhZ2UKLWJvZHkgYXJlIGRlZmluZWQgaW4gYSBzY2hlbWEsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gc2NoZW1hIGVsZW1lbnRzLiA8L2xpPgotCi08bGk+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+cnBjIGxpdGVyYWw8L3NwYW4+LiBSUEMgc3R5bGUgbWVzc2FnZXMsIGxpdGVyYWwgZW5jb2RpbmcuCi1Vc2UgdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgb3BlcmF0aW9uIG1ldGhvZCBuYW1lcwotaW4geW91ciBTT0FQIG1lc3NhZ2VzIHNvIGEgc2VydmVyIGNhbiBkaXNwYXRjaCB0aGUgc3BlY2lmaWVkIG1ldGhvZHMuICBEYXRhCi10eXBlcyBtdXN0IGJlIGRlZmluZWQsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gWFNEIHR5cGVzLjwvbGk+Ci0KLTxsaT48c3BhbiBjbGFzcz0idWljb250cm9sIj5ycGMgZW5jb2RlZDwvc3Bhbj4uIFJQQyBzdHlsZSBtZXNzYWdlcyBhbmQgU09BUCBlbmNvZGluZy4KLVVzZSB0aGlzIHN0eWxlIG9mIGJpbmRpbmcgd2hlbiB5b3Ugd2FudCB0byBlbmNvZGUgZGF0YSBncmFwaHMgaW4geW91ciBTT0FQCi1tZXNzYWdlcyBzbyBhIHNlcnZlciBjYW4gZGVzZXJpYWxpemUgdGhlIG9iamVjdCBkYXRhLiAgRGF0YSB0eXBlcyBtdXN0IGJlCi1kZWZpbmVkLCBzbyB0aGUgV1NETCBwYXJ0cyBtdXN0IHBvaW50IHRvIFhTRCB0eXBlcy48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3BhbiAvPiBJZiB5b3Ugc2VsZWN0IEhUVFAgeW91IGNhbiBzZWxlY3Qgd2hldGhlciB0byBjcmVhdGUKLWFuIEhUVFAgZ2V0dGVyIG9yIHNldHRlci48dWw+Ci08bGk+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+SFRUUCBHRVQ8L3NwYW4+LiBBIEdFVCByZXF1ZXN0IGZldGNoZXMgZGF0YSBmcm9tIGEgV2ViCi1zZXJ2ZXIgYmFzZWQgb24gYW4gVVJMIHZhbHVlIGFuZCBhIHNldCBvZiBIVFRQIGhlYWRlcnMuIFVzZSB0aGlzIG1ldGhvZCB3aGVuCi15b3Ugd2FudCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3QuIDwvbGk+Ci0KLTxsaT48c3BhbiBjbGFzcz0idWljb250cm9sIj5IVFRQIFBPU1Q8L3NwYW4+LiBBIFBPU1QgcmVxdWVzdCBzZW5kcyBhZGRpdGlvbmFsIGRhdGEKLXRvIHRoZSBzZXJ2ZXIsIHNwZWNpZmllZCBhZnRlciB0aGUgVVJMIGFuZCB0aGUgaGVhZGVycy4gVXNlIHRoaXMgbWV0aG9kIHdoZW4KLXlvdSB3YW50IHRvIHNlbmQgZGF0YSBlbmNsb3NlZCBpbiB0aGUgYm9keSBvZiB0aGUgcmVxdWVzdC48L2xpPgotCi08L3VsPgotPC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoPC9zcGFuPi48L3NwYW4+IFRoZSBXU0RMIGZpbGUKLW9wZW5zIGluIHRoZSBXU0RMIGVkaXRvci48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5JZiB5b3UgY3JlYXRlZCBhIFdTREwgZmlsZSB3aXRoIGEgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncywKLWl0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzo8L3A+Ci08cD48YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3NvYXBza2VsLmdpZiIgYWx0PSJJbWFnZSBvZiBhIFdTREwgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncyIgLz48YnIgLz48L3A+Ci08cD5JZiB5b3UgY3JlYXRlZAotYSBXU0RMIGZpbGUgd2l0aCBhIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MsIGl0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8KLXRoZSBmb2xsb3dpbmc6PC9wPgotPHA+PGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy9odHRwc2tlbC5naWYiIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MiIC8+PGJyIC8+PC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIj5XU0RMPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRpbXB3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eSB0byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2E3ZTcxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGVkdHdzZGwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RWRpdGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTxzaG9ydGRlc2M+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwKLWVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoCi1hbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+ZWRpdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViCi1zZXJ2aWNlczxpbmRleHRlcm0+ZWRpdGluZyBXU0RMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBvcGVuIGEgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvciwgZG91YmxlLWNsaWNrIGl0IGluIHRoZQotTmF2aWdhdG9yIHZpZXcgb3IgcmlnaHQtY2xpY2sgaXQgYW5kIGNsaWNrICA8Yj5PcGVuIFdpdGggPiBXU0RMIEVkaXRvci48L2I+PC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iZWRpdGlzb3VyY2V2aWV3Ij4KLTx0aXRsZT5FZGl0aW5nIGluIHRoZSBTb3VyY2UgdmlldzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD5UbyBlZGl0IGEgV1NETCBmaWxlIGluIHRoZSBTb3VyY2UgdmlldywgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk9wZW4geW91ciBXU0RMIGZpbGUgaW4gdGhlIFdTREwgZWRpdG9yLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgdGhlICA8dWljb250cm9sPlNvdXJjZTwvdWljb250cm9sPiB0YWIuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIHNvdXJjZSBjb2RlIHlvdSB3YW50IHRvIGVkaXQuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+QXQgYW55IHRpbWUsIHlvdSBjYW4gc3dpdGNoIHRvIHRoZSBTb3VyY2UgdmlldyB0byByZXZpZXcgdGhlIHNvdXJjZQotY29kZSBvZiB0aGUgV1NETCBmaWxlLiBZb3UgY2FuIGFsc28gZWRpdCB5b3VyIFdTREwgZmlsZSBkaXJlY3RseSBpbiB0aGUgU291cmNlCi12aWV3LjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZWRpdGVkaXR2aWV3Ij4KLTx0aXRsZT5FZGl0aW5nIGluIHRoZSBEZXNpZ24gdmlldzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UaGUgRGVzaWduIHZpZXcgcHJvdmlkZXMgYSBncmFwaGljYWwgd2F5IHRvIGJyb3dzZSBhbmQgZWRpdCB5b3VyCi1XU0RMIGZpbGUuIEVhY2ggdHlwZSBvZiB0b3AgbGV2ZWwgV1NETCBvYmplY3QgaXMgc2hvd24gd2l0aGluIGEgdGFidWxhciB2aWV3Ci0oZm9yIGV4YW1wbGUsIHNlcnZpY2UsIGJpbmRpbmcsIHBvcnQgdHlwZSkuIEVhY2ggdGFidWxhciB2aWV3IGNvbnRhaW5zIG9uZQotb3IgbW9yZSByb3dzIHRoYXQgcmVwcmVzZW50IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdC4gVGhlIHNlcnZpY2UsIGJpbmRpbmcsCi1hbmQgcG9ydCB0eXBlIG9iamVjdHMgYXJlICdsaW5rZWQnLiBBIGxpbmUgZGlzcGxheXMgdG8gZGVub3RlIGEgcmVmZXJlbmNlCi0ob3IgYXNzb2NpYXRpb24pIGJldHdlZW4gdGhlc2Ugb2JqZWN0cy48L3A+PHA+IDxpbWFnZSBhbHQ9IkltYWdlIG9mIGEgV1NETCBmaWxlIG9wZW4gaW4gdGhlIFdTREwgZWRpdG9yIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImVkaXRwcm9wZXJ0aWVzdmlldyI+Ci08dGl0bGU+RWRpdGluZyBpbiB0aGUgUHJvcGVydGllcyB2aWV3PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZSBQcm9wZXJ0aWVzIHZpZXcgZGlzcGxheXMgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgYW5kIGVkaXRhYmxlCi1hdHRyaWJ1dGUgdmFsdWVzIG9mIGEgc2VsZWN0ZWQgV1NETCBvYmplY3QgYW5kIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcGFuZXMKLXRvIGVkaXQ6PC9wPjx1bD4KLTxsaT4gPHVpY29udHJvbD5HZW5lcmFsPC91aWNvbnRyb2w+IHBhbmUsIHdoaWNoIGRpc3BsYXlzIGEgbGlzdCBvZiBvYmplY3QKLWF0dHJpYnV0ZXMuPC9saT4KLTxsaT4gPHVpY29udHJvbD5Eb2N1bWVudGF0aW9uPC91aWNvbnRyb2w+IHBhbmUsIHdoaWNoIHNwZWNpZmllcyB0aGUgaW5mb3JtYXRpb24KLXlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQuPC9saT4KLTxsaT4gPHVpY29udHJvbD5FeHRlbnNpb25zPC91aWNvbnRyb2w+IHBhbmUsIHdoaWNoIGlzIHVzZWQgdG8gYWRkIGV4dGVuc2lvbgotY29tcG9uZW50cy48L2xpPgotPC91bD48ZHJhZnQtY29tbWVudD4gW0xlZ2FjeSBUaXRsZV0gU2hvd2luZyBCaW5kaW5ncyBpbiB0aGUgRGVzaWduIFtMZWdhY3kKLUNvbnRleHRdQnkgZGVmYXVsdCBiaW5kaW5ncyBhcmUgc2hvd24gaW4gdGhlIERlc2lnbiBWaWV3LiBTZWxlY3QgdGhlIHNob3cvaGlkZQotYmluZGluZyBidXR0b24gYXQgdGhlIHRvcCBsZWZ0IG9mIHRoZSBEZXNpZ24gVmlldyB0byBoaWRlIHRoZSBiaW5kaW5ncy4gV2l0aAotdGhlIGJpbmRpbmdzIGhpZGRlbiBhIHNlcnZpY2UgY2FuIGJlIGJyb3dzZWQgZnJvbSBhIHB1cmVseSBhYnN0cmFjdCBsZXZlbAotd2l0aG91dCBzaG93aW5nIGJpbmRpbmcgaW5mb3JtYXRpb24uIFdoZW4gdGhlIG5lZWQgYXJpc2VzIHRvIHVuZGVyc3RhbmQgdGhlCi1jb25jcmV0ZSBkZXRhaWxzIHJlcHJlc2VudGVkIGJ5IHRoZSBiaW5kaW5nLCBzZWxlY3QgdGhlIHNob3cvaGlkZSBiaW5kaW5nCi1idXR0b24gYWdhaW4gdG8gbWFrZSB0aGVtIHZpc2libGUuIHZpZXcgW1dyaXRlciBjb21tZW50c10gUmVtb3ZlIHRvcGljICJTaG93aW5nCi1iaW5kaW5ncy4uLiIgYmVjYXVzZSB0aGVyZSBpcyBubyBzaG93L2hpZGUgYmluZGluZyBmdW5jdGlvbiBpbiB0aGUgbmV3IEdVSTwvZHJhZnQtY29tbWVudD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImVkaXRvdXRsaW5ldmlldyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5FZGl0aW5nIGluIHRoZSBPdXRsaW5lIHZpZXc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VGhlIE91dGxpbmUgdmlldyB3aWxsIHNob3cgeW91IGFsbCB0aGUgaXRlbXMgaW4geW91ciBXU0RMIGZpbGUKLWFzIHlvdSBhZGQgdGhlbS4gSW4gdGhpcyB2aWV3LCB5b3UgY2FuIGJvdGggY3JlYXRlIGFuZCBkZWxldGUgV1NETCBjb21wb25lbnRzLjwvcD48cD5UaGUKLU91dGxpbmUgdmlldyBjb250YWlucyB0aGUgZm9sbG93aW5nIGZvbGRlcnMgeW91IGNhbiB1c2UgKGJ5IHJpZ2h0LWNsaWNraW5nCi1hbmQgc2VsZWN0aW5nIHRoZSBhcHByb3ByaWF0ZSBvcHRpb24pIHRvIGVkaXQgeW91ciBXU0RMIGZpbGU6PC9wPjx1bD4KLTxsaT4gPGI+SW1wb3J0czwvYj4mbmJzcDtzdGF0ZW1lbnRzLCB3aGljaCBhcmUgdXNlZCB0byBhc3NvY2lhdGUgYSBuYW1lc3BhY2UKLXdpdGggYSBkb2N1bWVudCBsb2NhdGlvbi48L2xpPgotPGxpPiA8Yj5UeXBlczwvYj4sIHdoaWNoIHByb3ZpZGUgZGF0YSB0eXBlIGRlZmluaXRpb25zIHVzZWQgdG8gZGVzY3JpYmUgdGhlCi1tZXNzYWdlcyBleGNoYW5nZWQuIFlvdSBjYW5ub3QgZWRpdCBhbnkgdHlwZXMgZGlyZWN0bHkgdXNpbmcgdGhpcyBmb2xkZXIuPC9saT4KLTxsaT4gPGI+U2VydmljZXM8L2I+LCB3aGljaCBhcmUgdXNlZCB0byBhZ2dyZWdhdGUgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cy48L2xpPgotPGxpPiA8Yj5CaW5kaW5nczwvYj4sIHdoaWNoIHNwZWNpZnkgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb25zCi1mb3IgdGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnQgdHlwZS48L2xpPgotPGxpPiA8Yj5Qb3J0IFR5cGU8L2I+LCB3aGljaCBpcyA8P1B1YiBDYXJldD8+YSBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucy4KLUVhY2ggb3BlcmF0aW9uIHJlZmVycyB0byBhbiBpbnB1dCBtZXNzYWdlIGFuZCBvdXRwdXQgbWVzc2FnZXMuIDwvbGk+Ci08bGk+IDxiPk1lc3NhZ2VzPC9iPiwgd2hpY2ggcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcKLXRyYW5zbWl0dGVkLiBBIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkCi13aXRoIGEgZGVmaW5pdGlvbiB3aXRoaW4gc29tZSB0eXBlIHN5c3RlbS48L2xpPgotPC91bD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XU0RMPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRpbXB3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDA0OTY5Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U5ZjAxNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RlZHR3c2RsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iRWRpdGluZyBXU0RMIGZpbGVzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBlZGl0aW5nLCBXZWIgc2VydmljZXMsIGVkaXRpbmcgV1NETCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGVkaXRpbmcsIFdlYiBzZXJ2aWNlcywgZWRpdGluZyBXU0RMIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0ZWR0d3NkbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkVkaXRpbmcgV1NETCBmaWxlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGVkdHdzZGwiPjxhIG5hbWU9InRlZHR3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5FZGl0aW5nIFdTREwgZmlsZXM8L2gxPgotCi0KLQotPGRpdj48cD5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETAotZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2gKLWFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gb3BlbiBhIFdTREwgZmlsZSBpbiB0aGUgV1NETCBlZGl0b3IsIGRvdWJsZS1jbGljayBpdCBpbiB0aGUKLU5hdmlnYXRvciB2aWV3IG9yIHJpZ2h0LWNsaWNrIGl0IGFuZCBjbGljayAgPHN0cm9uZz5PcGVuIFdpdGggJmd0OyBXU0RMIEVkaXRvci48L3N0cm9uZz48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJlZGl0aXNvdXJjZXZpZXciPjxhIG5hbWU9ImVkaXRpc291cmNldmlldyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5FZGl0aW5nIGluIHRoZSBTb3VyY2UgdmlldzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyBlZGl0IGEgV1NETCBmaWxlIGluIHRoZSBTb3VyY2UgdmlldywgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk9wZW4geW91ciBXU0RMIGZpbGUgaW4gdGhlIFdTREwgZWRpdG9yLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Tb3VyY2U8L3NwYW4+IHRhYi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgc291cmNlIGNvZGUgeW91IHdhbnQgdG8gZWRpdC48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+QXQgYW55IHRpbWUsIHlvdSBjYW4gc3dpdGNoIHRvIHRoZSBTb3VyY2UgdmlldyB0byByZXZpZXcgdGhlIHNvdXJjZQotY29kZSBvZiB0aGUgV1NETCBmaWxlLiBZb3UgY2FuIGFsc28gZWRpdCB5b3VyIFdTREwgZmlsZSBkaXJlY3RseSBpbiB0aGUgU291cmNlCi12aWV3LjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJlZGl0ZWRpdHZpZXciPjxhIG5hbWU9ImVkaXRlZGl0dmlldyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5FZGl0aW5nIGluIHRoZSBEZXNpZ24gdmlldzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgRGVzaWduIHZpZXcgcHJvdmlkZXMgYSBncmFwaGljYWwgd2F5IHRvIGJyb3dzZSBhbmQgZWRpdCB5b3VyCi1XU0RMIGZpbGUuIEVhY2ggdHlwZSBvZiB0b3AgbGV2ZWwgV1NETCBvYmplY3QgaXMgc2hvd24gd2l0aGluIGEgdGFidWxhciB2aWV3Ci0oZm9yIGV4YW1wbGUsIHNlcnZpY2UsIGJpbmRpbmcsIHBvcnQgdHlwZSkuIEVhY2ggdGFidWxhciB2aWV3IGNvbnRhaW5zIG9uZQotb3IgbW9yZSByb3dzIHRoYXQgcmVwcmVzZW50IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdC4gVGhlIHNlcnZpY2UsIGJpbmRpbmcsCi1hbmQgcG9ydCB0eXBlIG9iamVjdHMgYXJlICdsaW5rZWQnLiBBIGxpbmUgZGlzcGxheXMgdG8gZGVub3RlIGEgcmVmZXJlbmNlCi0ob3IgYXNzb2NpYXRpb24pIGJldHdlZW4gdGhlc2Ugb2JqZWN0cy48L3A+Ci08cD4gPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsZWRpdG9yLmdpZiIgYWx0PSJJbWFnZSBvZiBhIFdTREwgZmlsZSBvcGVuIGluIHRoZSBXU0RMIGVkaXRvciIgLz48YnIgLz48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0iZWRpdHByb3BlcnRpZXN2aWV3Ij48YSBuYW1lPSJlZGl0cHJvcGVydGllc3ZpZXciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+RWRpdGluZyBpbiB0aGUgUHJvcGVydGllcyB2aWV3PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBQcm9wZXJ0aWVzIHZpZXcgZGlzcGxheXMgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgYW5kIGVkaXRhYmxlCi1hdHRyaWJ1dGUgdmFsdWVzIG9mIGEgc2VsZWN0ZWQgV1NETCBvYmplY3QgYW5kIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcGFuZXMKLXRvIGVkaXQ6PC9wPgotPHVsPgotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5HZW5lcmFsPC9zcGFuPiBwYW5lLCB3aGljaCBkaXNwbGF5cyBhIGxpc3Qgb2Ygb2JqZWN0Ci1hdHRyaWJ1dGVzLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RG9jdW1lbnRhdGlvbjwvc3Bhbj4gcGFuZSwgd2hpY2ggc3BlY2lmaWVzIHRoZSBpbmZvcm1hdGlvbgoteW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZC48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkV4dGVuc2lvbnM8L3NwYW4+IHBhbmUsIHdoaWNoIGlzIHVzZWQgdG8gYWRkIGV4dGVuc2lvbgotY29tcG9uZW50cy48L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZWRpdG91dGxpbmV2aWV3Ij48YSBuYW1lPSJlZGl0b3V0bGluZXZpZXciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+RWRpdGluZyBpbiB0aGUgT3V0bGluZSB2aWV3PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBPdXRsaW5lIHZpZXcgd2lsbCBzaG93IHlvdSBhbGwgdGhlIGl0ZW1zIGluIHlvdXIgV1NETCBmaWxlCi1hcyB5b3UgYWRkIHRoZW0uIEluIHRoaXMgdmlldywgeW91IGNhbiBib3RoIGNyZWF0ZSBhbmQgZGVsZXRlIFdTREwgY29tcG9uZW50cy48L3A+Ci08cD5UaGUKLU91dGxpbmUgdmlldyBjb250YWlucyB0aGUgZm9sbG93aW5nIGZvbGRlcnMgeW91IGNhbiB1c2UgKGJ5IHJpZ2h0LWNsaWNraW5nCi1hbmQgc2VsZWN0aW5nIHRoZSBhcHByb3ByaWF0ZSBvcHRpb24pIHRvIGVkaXQgeW91ciBXU0RMIGZpbGU6PC9wPgotPHVsPgotPGxpPiA8c3Ryb25nPkltcG9ydHM8L3N0cm9uZz7CoHN0YXRlbWVudHMsIHdoaWNoIGFyZSB1c2VkIHRvIGFzc29jaWF0ZSBhIG5hbWVzcGFjZQotd2l0aCBhIGRvY3VtZW50IGxvY2F0aW9uLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5UeXBlczwvc3Ryb25nPiwgd2hpY2ggcHJvdmlkZSBkYXRhIHR5cGUgZGVmaW5pdGlvbnMgdXNlZCB0byBkZXNjcmliZSB0aGUKLW1lc3NhZ2VzIGV4Y2hhbmdlZC4gWW91IGNhbm5vdCBlZGl0IGFueSB0eXBlcyBkaXJlY3RseSB1c2luZyB0aGlzIGZvbGRlci48L2xpPgotCi08bGk+IDxzdHJvbmc+U2VydmljZXM8L3N0cm9uZz4sIHdoaWNoIGFyZSB1c2VkIHRvIGFnZ3JlZ2F0ZSBhIHNldCBvZiByZWxhdGVkIHBvcnRzLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5CaW5kaW5nczwvc3Ryb25nPiwgd2hpY2ggc3BlY2lmeSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbnMKLWZvciB0aGUgb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5Qb3J0IFR5cGU8L3N0cm9uZz4sIHdoaWNoIGlzIGEgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMuCi1FYWNoIG9wZXJhdGlvbiByZWZlcnMgdG8gYW4gaW5wdXQgbWVzc2FnZSBhbmQgb3V0cHV0IG1lc3NhZ2VzLiA8L2xpPgotCi08bGk+IDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4sIHdoaWNoIHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nCi10cmFuc21pdHRlZC4gQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZAotd2l0aCBhIGRlZmluaXRpb24gd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V1NETDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGltcHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gaW1wb3J0IFdTREwgZmlsZXMgaW50byB0aGUgd29ya2JlbmNoIGFuZCBvcGVuIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiBPcGVuaW5nIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yIHByb3ZpZGVzIHlvdSB3aXRoIGFuIG9wcG9ydHVuaXR5IHRvIGhhdmUgYSBzdHJ1Y3R1cmVkIHZpZXdpbmcgb2YgdGhlIFdTREwgZmlsZS4iPkltcG9ydGluZyBhIFdTREwgZmlsZTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRlMWEyMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA2LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGltcHdzZGwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+SW1wb3J0aW5nIGEgV1NETCBmaWxlPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+SW1wb3J0aW5nIFdTREwgZmlsZXM8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPllvdSBjYW4gaW1wb3J0IFdTREwgZmlsZXMgaW50byB0aGUgd29ya2JlbmNoIGFuZCBvcGVuIHRoZW0gaW4gdGhlCi1XU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eQotdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5pbXBvcnRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYgotc2VydmljZXM8aW5kZXh0ZXJtPmltcG9ydGluZyBXU0RMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlCi1mcm9tIGEgV1NETCBmaWxlLiBZb3UgbXVzdCBmaXJzdCBjcmVhdGUgb3IgaW1wb3J0IGEgV1NETCBmaWxlLiBBIFdTREwgZmlsZQotY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiBUaGlzIGlzIGRlc2NyaWJlZCBpbjogIDx4cmVmIGhyZWY9Ii4uL3Rhc2tzL3RjcnR3c2RsLmRpdGEiCi1zY29wZT0icGVlciI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC94cmVmPi4gVG8gaW1wb3J0IGEgV1NETCBmaWxlIGZvbGxvdwotdGhlIGluc3RydWN0aW9ucyBiZWxvdy48L3A+PHA+IDx1aWNvbnRyb2w+UHJlcmVxdWlzaXRlOjwvdWljb250cm9sPiBDcmVhdGUKLWEgcHJvamVjdC4gSXQgaXMgcmVjb21tZW5kIHRoYXQgeW91IGNyZWF0ZSBhIFdlYiBwcm9qZWN0IHNvIHRoYXQgdGhlIFdTREwKLWNhbiBiZSBlYXNpbHkgdXNlZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIGFydGlmYWN0cyBhbmQgZGVwbG95ZWQuPC9wPjxwPkZvcgotbW9yZSBpbmZvcm1hdGlvbiBvbiBjcmVhdGluZyBhIFdlYiBwcm9qZWN0LCByZWZlciB0byB0aGUgV2ViIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50Ci1kb2N1bWVudGF0aW9uLjwvcD48cD5UbyBpbXBvcnQgYSBXU0RMIGZpbGUgdG8geW91ciBXZWIgcHJvamVjdCwgY29tcGxldGUgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgcHJvamVjdCBpbiB0aGUgSmF2YSBFRSBOYXZpZ2F0b3IgcGFuZSwgYW5kIGZyb20gdGhlIDx1aWNvbnRyb2w+RmlsZTwvdWljb250cm9sPiBtZW51LAotc2VsZWN0IDx1aWNvbnRyb2w+SW1wb3J0PC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IDxtZW51Y2FzY2FkZT48dWljb250cm9sPkdlbmVyYWw8L3VpY29udHJvbD48dWljb250cm9sPkZpbGUKLVN5c3RlbTwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+IGFuZCBjbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPkJyb3dzZTwvdWljb250cm9sPiBvbiB0aGUgbmV4dCBwYWdlIG9mIHRoZSB3aXphcmQKLXRvIHNlbGVjdCB0aGUgZGlyZWN0b3JpZXMgZnJvbSB3aGljaCB5b3Ugd291bGQgbGlrZSB0byBhZGQgdGhlIFdTREwuPC9jbWQ+Ci08L3N0ZXA+PD9QdWIgQ2FyZXQ/PgotPHN0ZXA+PGNtZD5JbiB0aGUgaW1wb3J0IHNlbGVjdGlvbiBwYW5lcywgdXNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byBzZWxlY3QKLWV4YWN0bHkgdGhlIHJlc291cmNlcyB5b3Ugd2FudCB0byBhZGQ6ICA8L2NtZD48aW5mbz48dWw+Ci08bGk+RXhwYW5kIHRoZSBoaWVyYXJjaGllcyBpbiB0aGUgbGVmdCBwYW5lIGFuZCBzZWxlY3Qgb3IgY2xlYXIgdGhlIGNoZWNrYm94ZXMKLXRoYXQgcmVwcmVzZW50IHRoZSBmb2xkZXJzIGluIHRoZSBzZWxlY3RlZCBkaXJlY3RvcnkuIFRoZW4gaW4gdGhlIHJpZ2h0IHBhbmUsCi1zZWxlY3Qgb3IgY2xlYXIgY2hlY2sgYm94ZXMgZm9yIGluZGl2aWR1YWwgZmlsZXMuPC9saT4KLTxsaT5DbGljayA8dWljb250cm9sPkZpbHRlciBUeXBlczwvdWljb250cm9sPiB0byBmaWx0ZXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCi1mb3IgZmlsZXMgb2YgYSBzcGVjaWZpYyB0eXBlLjwvbGk+Ci08bGk+Q2xpY2sgPHVpY29udHJvbD5TZWxlY3QgQWxsPC91aWNvbnRyb2w+IHRvIHNlbGVjdCBhbGwgcmVzb3VyY2VzIGluIHRoZQotZGlyZWN0b3J5LCB0aGVuIGdvIHRocm91Z2ggYW5kIGRlc2VsZWN0IHRoZSBvbmVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvIGFkZC48L2xpPgotPGxpPkNsaWNrIDx1aWNvbnRyb2w+RGVzZWxlY3QgQWxsPC91aWNvbnRyb2w+IHRvIGRlc2VsZWN0IGFsbCByZXNvdXJjZXMgaW4KLXRoZSBkaXJlY3RvcnksIHRoZW4gZ28gdGhyb3VnaCBhbmQgY2hvb3NlIGluZGl2aWR1YWwgcmVzb3VyY2VzIHRvIGFkZC48L2xpPgotPC91bD48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5TcGVjaWZ5IHRoZSBXb3JrYmVuY2ggcHJvamVjdCBvciBmb2xkZXIgdGhhdCB3aWxsIGJlIHRoZSBpbXBvcnQKLWRlc3RpbmF0aW9uLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+V2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBzcGVjaWZ5aW5nIHlvdXIgaW1wb3J0IG9wdGlvbnMsIGNsaWNrIDx1aWNvbnRyb2w+RmluaXNoLjwvdWljb250cm9sPjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+QWx0ZXJuYXRlbHksIHlvdSBjYW4gaW1wb3J0IGEgV1NETCBmaWxlIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyLgotRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvOiAgPHhyZWYgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmRpdGEiCi1zY29wZT0icGVlciI+IFVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC94cmVmPi4gIDwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREw8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDM2Nzg/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2I3NzFjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJJbXBvcnRpbmcgYSBXU0RMIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBpbXBvcnQgV1NETCBmaWxlcyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW4gdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIE9wZW5pbmcgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IgcHJvdmlkZXMgeW91IHdpdGggYW4gb3Bwb3J0dW5pdHkgdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJZb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eSB0byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgaW1wb3J0aW5nLCBXZWIgc2VydmljZXMsIGltcG9ydGluZyBXU0RMIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgaW1wb3J0aW5nLCBXZWIgc2VydmljZXMsIGltcG9ydGluZyBXU0RMIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0aW1wd3NkbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkltcG9ydGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0aW1wd3NkbCI+PGEgbmFtZT0idGltcHdzZGwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkltcG9ydGluZyBhIFdTREwgZmlsZTwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+WW91IGNhbiBpbXBvcnQgV1NETCBmaWxlcyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW4gdGhlbSBpbiB0aGUKLVdTREwgZWRpdG9yLiBPcGVuaW5nIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yIHByb3ZpZGVzIHlvdSB3aXRoIGFuIG9wcG9ydHVuaXR5Ci10byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlCi1mcm9tIGEgV1NETCBmaWxlLiBZb3UgbXVzdCBmaXJzdCBjcmVhdGUgb3IgaW1wb3J0IGEgV1NETCBmaWxlLiBBIFdTREwgZmlsZQotY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiBUaGlzIGlzIGRlc2NyaWJlZCBpbjogIDxhIGhyZWY9Ii4uL3Rhc2tzL3RjcnR3c2RsLmh0bWwiPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT4uIFRvIGltcG9ydCBhIFdTREwgZmlsZSBmb2xsb3cKLXRoZSBpbnN0cnVjdGlvbnMgYmVsb3cuPC9wPgotPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByZXJlcXVpc2l0ZTo8L3NwYW4+IENyZWF0ZQotYSBwcm9qZWN0LiBJdCBpcyByZWNvbW1lbmQgdGhhdCB5b3UgY3JlYXRlIGEgV2ViIHByb2plY3Qgc28gdGhhdCB0aGUgV1NETAotY2FuIGJlIGVhc2lseSB1c2VkIHRvIGdlbmVyYXRlIGFkZGl0aW9uYWwgYXJ0aWZhY3RzIGFuZCBkZXBsb3llZC48L3A+Ci08cD5Gb3IKLW1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBXZWIgcHJvamVjdCwgcmVmZXIgdG8gdGhlIFdlYiBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudAotZG9jdW1lbnRhdGlvbi48L3A+Ci08cD5UbyBpbXBvcnQgYSBXU0RMIGZpbGUgdG8geW91ciBXZWIgcHJvamVjdCwgY29tcGxldGUgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHlvdXIgcHJvamVjdCBpbiB0aGUgSmF2YSBFRSBOYXZpZ2F0b3IgcGFuZSwgYW5kIGZyb20gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGU8L3NwYW4+IG1lbnUsCi1zZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SW1wb3J0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5HZW5lcmFsPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUKLVN5c3RlbTwvc3Bhbj48L3NwYW4+IGFuZCBjbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Ccm93c2U8L3NwYW4+IG9uIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIHdpemFyZAotdG8gc2VsZWN0IHRoZSBkaXJlY3RvcmllcyBmcm9tIHdoaWNoIHlvdSB3b3VsZCBsaWtlIHRvIGFkZCB0aGUgV1NETC48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBpbXBvcnQgc2VsZWN0aW9uIHBhbmVzLCB1c2UgdGhlIGZvbGxvd2luZyBtZXRob2RzIHRvIHNlbGVjdAotZXhhY3RseSB0aGUgcmVzb3VyY2VzIHlvdSB3YW50IHRvIGFkZDogIDwvc3Bhbj4gPHVsPgotPGxpPkV4cGFuZCB0aGUgaGllcmFyY2hpZXMgaW4gdGhlIGxlZnQgcGFuZSBhbmQgc2VsZWN0IG9yIGNsZWFyIHRoZSBjaGVja2JveGVzCi10aGF0IHJlcHJlc2VudCB0aGUgZm9sZGVycyBpbiB0aGUgc2VsZWN0ZWQgZGlyZWN0b3J5LiBUaGVuIGluIHRoZSByaWdodCBwYW5lLAotc2VsZWN0IG9yIGNsZWFyIGNoZWNrIGJveGVzIGZvciBpbmRpdmlkdWFsIGZpbGVzLjwvbGk+Ci0KLTxsaT5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWx0ZXIgVHlwZXM8L3NwYW4+IHRvIGZpbHRlciB0aGUgY3VycmVudCBzZWxlY3Rpb24KLWZvciBmaWxlcyBvZiBhIHNwZWNpZmljIHR5cGUuPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNlbGVjdCBBbGw8L3NwYW4+IHRvIHNlbGVjdCBhbGwgcmVzb3VyY2VzIGluIHRoZQotZGlyZWN0b3J5LCB0aGVuIGdvIHRocm91Z2ggYW5kIGRlc2VsZWN0IHRoZSBvbmVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvIGFkZC48L2xpPgotCi08bGk+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGVzZWxlY3QgQWxsPC9zcGFuPiB0byBkZXNlbGVjdCBhbGwgcmVzb3VyY2VzIGluCi10aGUgZGlyZWN0b3J5LCB0aGVuIGdvIHRocm91Z2ggYW5kIGNob29zZSBpbmRpdmlkdWFsIHJlc291cmNlcyB0byBhZGQuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U3BlY2lmeSB0aGUgV29ya2JlbmNoIHByb2plY3Qgb3IgZm9sZGVyIHRoYXQgd2lsbCBiZSB0aGUgaW1wb3J0Ci1kZXN0aW5hdGlvbi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHNwZWNpZnlpbmcgeW91ciBpbXBvcnQgb3B0aW9ucywgY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoLjwvc3Bhbj48L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5BbHRlcm5hdGVseSwgeW91IGNhbiBpbXBvcnQgYSBXU0RMIGZpbGUgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG86ICA8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbCI+VXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L2E+LiAgPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIj5XU0RMPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RlNTU4NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNiwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRzZXRiaW5kIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlNldHRpbmcgYSBiaW5kaW5nPC90aXRsZT4KLTxzaG9ydGRlc2M+QSBiaW5kaW5nIGlzIGEgdG9wIGxldmVsIFdTREwgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBjb25jcmV0ZSBzcGVjaWZpY2F0aW9uCi1yZWdhcmRpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZiBtZXNzYWdlcyB0byBhbmQgZnJvbSBhIHdlYiBzZXJ2aWNlLiBBIGJpbmRpbmcKLXJlZmVyZW5jZXMgZXhhY3RseSBvbmUgcG9ydCB0eXBlLiBUaGUgc3RydWN0dXJlIG9mIGEgYmluZGluZyBjb3JyZXNwb25kcyB2ZXJ5Ci1jbG9zZWx5IHRvIHRoYXQgb2YgdGhlIHBvcnQgdHlwZS4gVGhlIGJpbmRpbmcgY29udGFpbnMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotKGZvciBleGFtcGxlLCBTT0FQLCBodHRwLCBhbmQgbWltZSkgdGhhdCBzcGVjaWZ5IHByb3RvY29sIHNwZWNpZmljIGRldGFpbHMuCi1FYWNoIHBvcnQgd2l0aGluIGEgc2VydmljZSByZWZlcmVuY2VzIGV4YWN0bHkgb25lIGJpbmRpbmcuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YmluZGluZ3M8aW5kZXh0ZXJtPmNyZWF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5zZXR0aW5nCi1XU0RMIGJpbmRpbmdzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5iaW5kaW5nczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5Zb3UgY2FuIGNyZWF0ZSBhIGJpbmRpbmcgYnkgcmlnaHQgY2xpY2tpbmcgaW4gYW55IGJsYW5rIHNwYWNlCi1pbiB0aGUgRGVzaWduIHZpZXcgYW5kIHNlbGVjdGluZyA8dWljb250cm9sPkFkZCBCaW5kaW5nPC91aWNvbnRyb2w+LiBZb3UgY2FuCi1jcmVhdGUgYSBuZXcgYmluZGluZywgcmV1c2UgYW4gZXhpc3Rpbmcgb25lLCBvciBpbXBvcnQgb25lLiA8L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJjcmVhdGVuZXdiaW5kIj4KLTx0aXRsZT5DcmVhdGluZyBhIG5ldyBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBwb3J0IGFuZCBjbGljayA8Yj5TZXQgQmluZGluZwotPiBOZXcgQmluZGluZzwvYj4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIGJpbmRpbmcuPC9jbWQ+PGluZm8+VGhlCi1uYW1lIHNob3VsZCBiZSB1bmlxdWUgYW1vbmcgYWxsIGJpbmRpbmdzIGRlZmluZWQgd2l0aGluIHRoZSBlbmNsb3NpbmcgV1NETAotZG9jdW1lbnQuIENsaWNrIDxiPk9LLjwvYj4gVG8gc2VsZWN0IHRoZSBuZXcgYmluZGluZywgY2xpY2sgdGhlIGJpbmRpbmcgb2JqZWN0LjwvaW5mbz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpbmRpbmcgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZAotaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PG5vdGU+QSA8Yj5Qb3J0VHlwZTwvYj4gaXMgYSBuYW1lZCBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBhbmQKLXRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4gWW91IGNhbiBlaXRoZXIgY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IKLXlvdXIgYmluZGluZywgcmV1c2UgYW4gZXhpc3Rpbmcgb25lLCBvciBpbXBvcnQgb25lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKLXNlZSA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Ii4uL3Rhc2tzL3RzZXRwcnR0LmRpdGEiIHNjb3BlPSJwZWVyIj5TZXR0aW5nCi1hIFBvcnQgVHlwZTwveHJlZj4uPC9ub3RlPjxub3RlIHR5cGU9InRpcCI+WW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nCi1mb3IgeW91ciBwb3J0IHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuIFJpZ2h0IGNsaWNrIG9uIHRoZSA8dWljb250cm9sPkJpbmRpbmdzPC91aWNvbnRyb2w+IGZvbGRlcgotYW5kIHNlbGVjdCA8dWljb250cm9sPkFkZCBCaW5kaW5nPC91aWNvbnRyb2w+Ljwvbm90ZT48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0icmV1c2ViaW5kaW5nIj4KLTx0aXRsZT5SZXVzaW5nIGEgYmluZGluZyBmb3IgYSBwb3J0PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHJldXNlIGEgYmluZGluZyBmb3IgeW91ciBwb3J0LCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgc2VsZWN0IHlvdXIgcG9ydC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8Yj5HZW5lcmFsPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RnJvbSB0aGUgPGI+QmluZGluZzwvYj4gZHJvcCBkb3duIGxpc3QsIHNlbGVjdCB0aGUgYmluZGluZyB5b3UKLXdhbnQgdG8gdXNlLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9InJlZ2VuZXJhdGluZ2FiaW5kaW5nIj4KLTx0aXRsZT5SZWdlbmVyYXRpbmcgYSBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PlRvIHJlZ2VuZXJhdGUgYSBiaW5kaW5nLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+UmlnaHQtY2xpY2sgdGhlIGJpbmRpbmcgeW91IHdhbnQgdG8gcmVnZW5lcmF0ZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCA8dWljb250cm9sPkdlbmVyYXRlIEJpbmRpbmcgQ29udGVudDwvdWljb250cm9sPi48L2NtZD48P1B1YiBDYXJldDE/PgotPC9zdGVwPgotPHN0ZXA+PGNtZD5TcGVjaWZ5IHRoZSByZXF1aXJlZCBiaW5kaW5nIGluZm9ybWF0aW9uLiBJZiB5b3UgYXJlIG1vZGlmeWluZwotYW4gZXhpc3RpbmcgYmluZGluZywgc2VsZWN0IHRoZSA8dWljb250cm9sPk92ZXJ3cml0ZSBleGlzdGluZyBiaW5kaW5nIGluZm9ybWF0aW9uPC91aWNvbnRyb2w+IGNoZWNrCi1ib3guPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iaW1wYmluZGluZyI+Ci08dGl0bGU+SW1wb3J0IGFuIGV4aXN0aW5nIGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+VG8gaW1wb3J0IGFuIGV4aXN0aW5nIGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCBhbmQgY2xpY2sgIDxiPlNldCBCaW5kaW5nCi0+IEV4aXN0aW5nIEJpbmRpbmcuPC9iPjwvY21kPjwvc3RlcD4KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcKLXRvIGZpbHRlciB0aGUgbGlzdCBvciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGwuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5Zb3UgY2FuIGltcG9ydCBhIGJpbmRpbmcgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PC9jbWQ+Ci08Y2hvaWNlcz4KLTxjaG9pY2U+PGI+V29ya3NwYWNlPC9iPjogbGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2Nob2ljZT4KLTxjaG9pY2U+PGI+RW5jbG9zaW5nIFByb2plY3Q8L2I+OiBsaXN0cyB0aGUgYmluZGluZ3MgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2Nob2ljZT4KLTxjaG9pY2U+PGI+Q3VycmVudCBSZXNvdXJjZTwvYj46IGxpc3RzIHRoZSBiaW5kaW5nIHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyCi1jdXJyZW50IGZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPldvcmtpbmcgU2V0czwvYj46IGxpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0Ci1vZiBmaWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8Yj5DaG9vc2U8L2I+LiBZb3UgY2FuIHNlbGVjdCBmaWxlcwotZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQKLXRoZSBmaWxlcywgY2xpY2sgPGI+T0s8L2I+LjwvY2hvaWNlPgotPC9jaG9pY2VzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgYmluZGluZ3Mgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxiPk9LPC9iPi4gSW4KLXRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIGJpbmRpbmcgb2JqZWN0LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpbmRpbmcKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDA1MTc0Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NiNWIwOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDgiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iU2V0dGluZyBhIGJpbmRpbmciIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBiaW5kaW5nIGlzIGEgdG9wIGxldmVsIFdTREwgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBjb25jcmV0ZSBzcGVjaWZpY2F0aW9uIHJlZ2FyZGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIGEgd2ViIHNlcnZpY2UuIEEgYmluZGluZyByZWZlcmVuY2VzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4gVGhlIHN0cnVjdHVyZSBvZiBhIGJpbmRpbmcgY29ycmVzcG9uZHMgdmVyeSBjbG9zZWx5IHRvIHRoYXQgb2YgdGhlIHBvcnQgdHlwZS4gVGhlIGJpbmRpbmcgY29udGFpbnMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyAoZm9yIGV4YW1wbGUsIFNPQVAsIGh0dHAsIGFuZCBtaW1lKSB0aGF0IHNwZWNpZnkgcHJvdG9jb2wgc3BlY2lmaWMgZGV0YWlscy4gRWFjaCBwb3J0IHdpdGhpbiBhIHNlcnZpY2UgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBiaW5kaW5nLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIGJpbmRpbmcgaXMgYSB0b3AgbGV2ZWwgV1NETCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIGNvbmNyZXRlIHNwZWNpZmljYXRpb24gcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb2YgbWVzc2FnZXMgdG8gYW5kIGZyb20gYSB3ZWIgc2VydmljZS4gQSBiaW5kaW5nIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgcG9ydCB0eXBlLiBUaGUgc3RydWN0dXJlIG9mIGEgYmluZGluZyBjb3JyZXNwb25kcyB2ZXJ5IGNsb3NlbHkgdG8gdGhhdCBvZiB0aGUgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBjb250YWlucyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIChmb3IgZXhhbXBsZSwgU09BUCwgaHR0cCwgYW5kIG1pbWUpIHRoYXQgc3BlY2lmeSBwcm90b2NvbCBzcGVjaWZpYyBkZXRhaWxzLiBFYWNoIHBvcnQgd2l0aGluIGEgc2VydmljZSByZWZlcmVuY2VzIGV4YWN0bHkgb25lIGJpbmRpbmcuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBiaW5kaW5ncywgY3JlYXRpbmcsIHNldHRpbmcgV1NETCBiaW5kaW5ncywgV1NETCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgYmluZGluZ3MsIGNyZWF0aW5nLCBzZXR0aW5nIFdTREwgYmluZGluZ3MsIFdTREwiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRzZXRiaW5kIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+U2V0dGluZyBhIGJpbmRpbmc8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRzZXRiaW5kIj48YSBuYW1lPSJ0c2V0YmluZCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+U2V0dGluZyBhIGJpbmRpbmc8L2gxPgotCi0KLQotPGRpdj48cD5BIGJpbmRpbmcgaXMgYSB0b3AgbGV2ZWwgV1NETCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIGNvbmNyZXRlIHNwZWNpZmljYXRpb24KLXJlZ2FyZGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIGEgd2ViIHNlcnZpY2UuIEEgYmluZGluZwotcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFRoZSBzdHJ1Y3R1cmUgb2YgYSBiaW5kaW5nIGNvcnJlc3BvbmRzIHZlcnkKLWNsb3NlbHkgdG8gdGhhdCBvZiB0aGUgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBjb250YWlucyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0oZm9yIGV4YW1wbGUsIFNPQVAsIGh0dHAsIGFuZCBtaW1lKSB0aGF0IHNwZWNpZnkgcHJvdG9jb2wgc3BlY2lmaWMgZGV0YWlscy4KLUVhY2ggcG9ydCB3aXRoaW4gYSBzZXJ2aWNlIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgYmluZGluZy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgYmluZGluZyBieSByaWdodCBjbGlja2luZyBpbiBhbnkgYmxhbmsgc3BhY2UKLWluIHRoZSBEZXNpZ24gdmlldyBhbmQgc2VsZWN0aW5nIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZCBCaW5kaW5nPC9zcGFuPi4gWW91IGNhbgotY3JlYXRlIGEgbmV3IGJpbmRpbmcsIHJldXNlIGFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS4gPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0iY3JlYXRlbmV3YmluZCI+PGEgbmFtZT0iY3JlYXRlbmV3YmluZCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5DcmVhdGluZyBhIG5ldyBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBwb3J0IGFuZCBjbGljayA8c3Ryb25nPlNldCBCaW5kaW5nCi0mZ3Q7IE5ldyBCaW5kaW5nPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIGJpbmRpbmcuPC9zcGFuPiBUaGUKLW5hbWUgc2hvdWxkIGJlIHVuaXF1ZSBhbW9uZyBhbGwgYmluZGluZ3MgZGVmaW5lZCB3aXRoaW4gdGhlIGVuY2xvc2luZyBXU0RMCi1kb2N1bWVudC4gQ2xpY2sgPHN0cm9uZz5PSy48L3N0cm9uZz4gVG8gc2VsZWN0IHRoZSBuZXcgYmluZGluZywgY2xpY2sgdGhlIGJpbmRpbmcgb2JqZWN0LgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmluZGluZyB5b3Ugd2FudCB0aGUgdXNlciB0byByZWFkCi1pbiB0aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9Im5vdGUiPjxzcGFuIGNsYXNzPSJub3RldGl0bGUiPk5vdGU6PC9zcGFuPiBBIDxzdHJvbmc+UG9ydFR5cGU8L3N0cm9uZz4gaXMgYSBuYW1lZCBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBhbmQKLXRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4gWW91IGNhbiBlaXRoZXIgY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IKLXlvdXIgYmluZGluZywgcmV1c2UgYW4gZXhpc3Rpbmcgb25lLCBvciBpbXBvcnQgb25lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKLXNlZSA8YSBocmVmPSIuLi90YXNrcy90c2V0cHJ0dC5kaXRhIj5TZXR0aW5nIGEgUG9ydCBUeXBlPC9hPi48L2Rpdj4KLTxkaXYgY2xhc3M9InRpcCI+PHNwYW4gY2xhc3M9InRpcHRpdGxlIj5UaXA6PC9zcGFuPiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IGJpbmRpbmcKLWZvciB5b3VyIHBvcnQgdXNpbmcgdGhlIE91dGxpbmUgdmlldy4gUmlnaHQgY2xpY2sgb24gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJpbmRpbmdzPC9zcGFuPiBmb2xkZXIKLWFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIEJpbmRpbmc8L3NwYW4+LjwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9InJldXNlYmluZGluZyI+PGEgbmFtZT0icmV1c2ViaW5kaW5nIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPlJldXNpbmcgYSBiaW5kaW5nIGZvciBhIHBvcnQ8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gcmV1c2UgYSBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHNlbGVjdCB5b3VyIHBvcnQuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5Gcm9tIHRoZSA8c3Ryb25nPkJpbmRpbmc8L3N0cm9uZz4gZHJvcCBkb3duIGxpc3QsIHNlbGVjdCB0aGUgYmluZGluZyB5b3UKLXdhbnQgdG8gdXNlLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJyZWdlbmVyYXRpbmdhYmluZGluZyI+PGEgbmFtZT0icmVnZW5lcmF0aW5nYWJpbmRpbmciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UmVnZW5lcmF0aW5nIGEgYmluZGluZzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyByZWdlbmVyYXRlIGEgYmluZGluZywgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPlJpZ2h0LWNsaWNrIHRoZSBiaW5kaW5nIHlvdSB3YW50IHRvIHJlZ2VuZXJhdGUuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R2VuZXJhdGUgQmluZGluZyBDb250ZW50PC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+U3BlY2lmeSB0aGUgcmVxdWlyZWQgYmluZGluZyBpbmZvcm1hdGlvbi4gSWYgeW91IGFyZSBtb2RpZnlpbmcKLWFuIGV4aXN0aW5nIGJpbmRpbmcsIHNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T3ZlcndyaXRlIGV4aXN0aW5nIGJpbmRpbmcgaW5mb3JtYXRpb248L3NwYW4+IGNoZWNrCi1ib3guPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImltcGJpbmRpbmciPjxhIG5hbWU9ImltcGJpbmRpbmciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+SW1wb3J0IGFuIGV4aXN0aW5nIGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gaW1wb3J0IGFuIGV4aXN0aW5nIGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCBhbmQgY2xpY2sgIDxzdHJvbmc+U2V0IEJpbmRpbmcKLSZndDsgRXhpc3RpbmcgQmluZGluZy48L3N0cm9uZz48L3NwYW4+PC9saT4KLQotPGxpPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nCi10byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+WW91IGNhbiBpbXBvcnQgYSBiaW5kaW5nIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvc3Bhbj4KLTx1bD4KLTxsaT48c3Ryb25nPldvcmtzcGFjZTwvc3Ryb25nPjogbGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPjogbGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+Q3VycmVudCBSZXNvdXJjZTwvc3Ryb25nPjogbGlzdHMgdGhlIGJpbmRpbmcgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIKLWN1cnJlbnQgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5Xb3JraW5nIFNldHM8L3N0cm9uZz46IGxpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0Ci1vZiBmaWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8c3Ryb25nPkNob29zZTwvc3Ryb25nPi4gWW91IGNhbiBzZWxlY3QgZmlsZXMKLWZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkCi10aGUgZmlsZXMsIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPC91bD4KLQotPC9saT4KLQotPGxpPjxzcGFuPlRoZSBiaW5kaW5ncyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi4gSW4KLXRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIGJpbmRpbmcgb2JqZWN0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpbmRpbmcKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRwcnR0LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRwcnR0LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkOTg4ZDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDYsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0c2V0cHJ0dCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5TZXR0aW5nIGEgcG9ydCB0eXBlPC90aXRsZT4KLTxzaG9ydGRlc2M+QSBwb3J0IHR5cGUgaXMgYSBuYW1lZCBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBhbmQgdGhlIGFic3RyYWN0Ci1tZXNzYWdlcyBpbnZvbHZlZC4gRWFjaCBvcGVyYXRpb24gcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4KLUEgcG9ydCB0eXBlIGlzIHJlZmVyZW5jZWQgYnkgYSBiaW5kaW5nIG9iamVjdC4gRWFjaCBiaW5kaW5nIHJlZmVyZW5jZXMgZXhhY3RseQotb25lIHBvcnQgdHlwZS4gU2luY2UgZWFjaCBwb3J0IHJlZmVycyB0byBleGFjdGx5IG9uZSBiaW5kaW5nLCBlYWNoIHBvcnQgaGFzCi1leGFjdGx5IG9uZSBwb3J0IHR5cGUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPnNldHRpbmcgcG9ydCB0eXBlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnNldHRpbmcgcG9ydCB0eXBlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5Zb3UgY2FuIGNyZWF0ZSBhIHBvcnQgdHlwZSBieSByaWdodCBjbGlja2luZyBpbiBhbnkgYmxhbmsgc3BhY2UKLWluIHRoZSBEZXNpZ24gdmlldyBhbmQgc2VsZWN0aW5nIDx1aWNvbnRyb2w+QWRkIFBvcnRUeXBlPC91aWNvbnRyb2w+LiBBcyBhCi1jb252ZW5pZW5jZSB5b3UgY2FuIGFsc28gYWRkIGEgcG9ydCB0eXBlIHZpYSBhIGJpbmRpbmcuIFRoaXMgYWxsb3dzIHlvdSB0bwotY3JlYXRlIGEgcG9ydCB0eXBlIGFuZCBtb2RpZnkgdGhlIGJpbmRpbmcgdG8gcmVmZXJlbmNlIHRoZSBuZXcgcG9ydCB0eXBlIGluCi1vbmUgYWN0aW9uLiBZb3UgY2FuIGVpdGhlciBjcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcsIHJlLXVzZQotYW4gZXhpc3Rpbmcgb25lLCBvciBpbXBvcnQgb25lLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImNyZWF0ZXBvcnR0eXBlIj4KLTx0aXRsZT5DcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+SWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCBjb21wbGV0ZQotdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayA8Yj5TZXQgUG9ydFR5cGUgPiBOZXcgUG9ydFR5cGU8L2I+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UeXBlIHRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgaW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkIGFuZCBjbGljayA8Yj5PSzwvYj4uPC9jbWQ+Ci08aW5mbz5UaGUgbmFtZSBzaG91bGQgYmUgdW5pcXVlIG5hbWUgYW1vbmcgYWxsIHBvcnQgdHlwZXMgZGVmaW5lZCB3aXRoaW4gaW4KLXRoZSBlbmNsb3NpbmcgV1NETCBkb2N1bWVudC4gVG8gc2VsZWN0IHRoZSBuZXcgcG9ydCB0eXBlLCBjbGljayB0aGUgcG9ydCB0eXBlCi1vYmplY3QuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgdHlwZQoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD4gPG5vdGUgdHlwZT0idGlwIj5Zb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nCi11c2luZyB0aGUgT3V0bGluZSB2aWV3Ljwvbm90ZT48cD5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBwb3J0IHR5cGUsIHlvdSBjYW4KLWFkZCBvcGVyYXRpb25zIHRvIGl0LCB3aGljaCBjYW4gc2VuZCBhbmQgcmVjZWl2ZSBtZXNzYWdlcy48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9InJldXNlcG9ydHR5cGUiPgotPHRpdGxlPlJldXNlIGEgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+SWYgeW91IHdhbnQgdG8gcmV1c2UgYSBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgY29tcGxldGUgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgIDxiPlNldCBQb3J0IFR5cGUgPiBFeGlzdGluZyBQb3J0VHlwZTwvYj4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcCBpbXBvcnRhbmNlPSJvcHRpb25hbCI+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nCi10byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBsaXN0IGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZwotb3B0aW9uczo8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT48Yj5Xb3Jrc3BhY2U8L2I+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPkVuY2xvc2luZyBQcm9qZWN0PC9iPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2Nob2ljZT4KLTxjaG9pY2U+PGI+Q3VycmVudCBSZXNvdXJjZTwvYj46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQKLWZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPldvcmtpbmcgU2V0czwvYj46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZAotc2V0IG9mIGZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0Ci1maWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZQotc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9jaG9pY2U+Ci08L2Nob2ljZXM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBleGlzdGluZyBwb3J0IHR5cGVzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8Yj5PSzwvYj4uPC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJpbXBvcnRwb3J0dHlwZSI+Ci08dGl0bGU+SW1wb3J0IGEgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+SWYgeW91IHdhbnQgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLAotY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayAgPGI+U2V0IFBvcnQgVHlwZSA+IEV4aXN0aW5nIFBvcnRUeXBlLjwvYj48L2NtZD4KLTwvc3RlcD4KLTxzdGVwIGltcG9ydGFuY2U9Im9wdGlvbmFsIj48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcKLXRvIGZpbHRlciB0aGUgbGlzdCBvciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGwuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5Zb3UgY2FuIGltcG9ydCBhIHBvcnQgdHlwZSBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT48Yj5Xb3Jrc3BhY2U8L2I+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPkVuY2xvc2luZyBQcm9qZWN0PC9iPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2Nob2ljZT4KLTxjaG9pY2U+PGI+V29ya2luZyBTZXRzPC9iPjo8P1B1YiBDYXJldD8+IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbgotYSBzcGVjaWZpZWQgc2V0IG9mIGZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdQotY2FuIHNlbGVjdCBmaWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4KLU9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9jaG9pY2U+Ci08L2Nob2ljZXM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBwb3J0IHR5cGVzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8Yj5PSzwvYj4uCi1JbiB0aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBwb3J0IHR5cGUgb2JqZWN0LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgdHlwZQoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDUzODk/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjVhODc1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldHBydHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwOCIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJTZXR0aW5nIGEgcG9ydCB0eXBlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgcG9ydCB0eXBlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4gRWFjaCBvcGVyYXRpb24gcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gQSBwb3J0IHR5cGUgaXMgcmVmZXJlbmNlZCBieSBhIGJpbmRpbmcgb2JqZWN0LiBFYWNoIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFNpbmNlIGVhY2ggcG9ydCByZWZlcnMgdG8gZXhhY3RseSBvbmUgYmluZGluZywgZWFjaCBwb3J0IGhhcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgcG9ydCB0eXBlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4gRWFjaCBvcGVyYXRpb24gcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gQSBwb3J0IHR5cGUgaXMgcmVmZXJlbmNlZCBieSBhIGJpbmRpbmcgb2JqZWN0LiBFYWNoIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFNpbmNlIGVhY2ggcG9ydCByZWZlcnMgdG8gZXhhY3RseSBvbmUgYmluZGluZywgZWFjaCBwb3J0IGhhcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgc2V0dGluZyBwb3J0IHR5cGVzLCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBzZXR0aW5nIHBvcnQgdHlwZXMsIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHNldHBydHQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5TZXR0aW5nIGEgcG9ydCB0eXBlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0c2V0cHJ0dCI+PGEgbmFtZT0idHNldHBydHQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlNldHRpbmcgYSBwb3J0IHR5cGU8L2gxPgotCi0KLQotPGRpdj48cD5BIHBvcnQgdHlwZSBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZCB0aGUgYWJzdHJhY3QKLW1lc3NhZ2VzIGludm9sdmVkLiBFYWNoIG9wZXJhdGlvbiByZWZlcnMgdG8gYW4gaW5wdXQgbWVzc2FnZSBhbmQgb3V0cHV0IG1lc3NhZ2VzLgotQSBwb3J0IHR5cGUgaXMgcmVmZXJlbmNlZCBieSBhIGJpbmRpbmcgb2JqZWN0LiBFYWNoIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5Ci1vbmUgcG9ydCB0eXBlLiBTaW5jZSBlYWNoIHBvcnQgcmVmZXJzIHRvIGV4YWN0bHkgb25lIGJpbmRpbmcsIGVhY2ggcG9ydCBoYXMKLWV4YWN0bHkgb25lIHBvcnQgdHlwZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgcG9ydCB0eXBlIGJ5IHJpZ2h0IGNsaWNraW5nIGluIGFueSBibGFuayBzcGFjZQotaW4gdGhlIERlc2lnbiB2aWV3IGFuZCBzZWxlY3RpbmcgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIFBvcnRUeXBlPC9zcGFuPi4gQXMgYQotY29udmVuaWVuY2UgeW91IGNhbiBhbHNvIGFkZCBhIHBvcnQgdHlwZSB2aWEgYSBiaW5kaW5nLiBUaGlzIGFsbG93cyB5b3UgdG8KLWNyZWF0ZSBhIHBvcnQgdHlwZSBhbmQgbW9kaWZ5IHRoZSBiaW5kaW5nIHRvIHJlZmVyZW5jZSB0aGUgbmV3IHBvcnQgdHlwZSBpbgotb25lIGFjdGlvbi4gWW91IGNhbiBlaXRoZXIgY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCByZS11c2UKLWFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJjcmVhdGVwb3J0dHlwZSI+PGEgbmFtZT0iY3JlYXRlcG9ydHR5cGUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+Q3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgY29tcGxldGUKLXRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgPHN0cm9uZz5TZXQgUG9ydFR5cGUgJmd0OyBOZXcgUG9ydFR5cGU8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIHRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgaW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCBhbmQgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi48L3NwYW4+Ci0gVGhlIG5hbWUgc2hvdWxkIGJlIHVuaXF1ZSBuYW1lIGFtb25nIGFsbCBwb3J0IHR5cGVzIGRlZmluZWQgd2l0aGluIGluCi10aGUgZW5jbG9zaW5nIFdTREwgZG9jdW1lbnQuIFRvIHNlbGVjdCB0aGUgbmV3IHBvcnQgdHlwZSwgY2xpY2sgdGhlIHBvcnQgdHlwZQotb2JqZWN0LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgdHlwZQoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPiA8ZGl2IGNsYXNzPSJ0aXAiPjxzcGFuIGNsYXNzPSJ0aXB0aXRsZSI+VGlwOjwvc3Bhbj4gWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZwotdXNpbmcgdGhlIE91dGxpbmUgdmlldy48L2Rpdj4KLTxwPk9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIHBvcnQgdHlwZSwgeW91IGNhbgotYWRkIG9wZXJhdGlvbnMgdG8gaXQsIHdoaWNoIGNhbiBzZW5kIGFuZCByZWNlaXZlIG1lc3NhZ2VzLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJyZXVzZXBvcnR0eXBlIj48YSBuYW1lPSJyZXVzZXBvcnR0eXBlIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPlJldXNlIGEgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IHdhbnQgdG8gcmV1c2UgYSBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgY29tcGxldGUgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayAgPHN0cm9uZz5TZXQgUG9ydCBUeXBlICZndDsgRXhpc3RpbmcgUG9ydFR5cGU8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzdHJvbmc+T3B0aW9uYWw6IDwvc3Ryb25nPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nCi10byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+WW91IGNhbiBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBsaXN0IGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZwotb3B0aW9uczo8L3NwYW4+Ci08dWw+Ci08bGk+PHN0cm9uZz5Xb3Jrc3BhY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5DdXJyZW50IFJlc291cmNlPC9zdHJvbmc+OiBsaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciBjdXJyZW50Ci1maWxlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPldvcmtpbmcgU2V0czwvc3Ryb25nPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkCi1zZXQgb2YgZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0Ci1maWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZQotc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgZXhpc3RpbmcgcG9ydCB0eXBlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi48L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJpbXBvcnRwb3J0dHlwZSI+PGEgbmFtZT0iaW1wb3J0cG9ydHR5cGUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+SW1wb3J0IGEgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IHdhbnQgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLAotY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgb24gYSBiaW5kaW5nIG9iamVjdCAobm90ZSB0aGF0Ci1wb3J0IG11c3QgcmVmZXJlbmNlIGEgYmluZGluZykgYW5kIGNsaWNrICA8c3Ryb25nPlNldCBQb3J0IFR5cGUgJmd0OyBFeGlzdGluZyBQb3J0VHlwZS48L3N0cm9uZz48L3NwYW4+Ci08L2xpPgotCi08bGk+PHN0cm9uZz5PcHRpb25hbDogPC9zdHJvbmc+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSBhIHNlYXJjaCBzdHJpbmcKLXRvIGZpbHRlciB0aGUgbGlzdCBvciBsZWF2ZSB0aGUgZmllbGQgYmxhbmsgdG8gdmlldyBhbGwuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5Zb3UgY2FuIGltcG9ydCBhIHBvcnQgdHlwZSBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L3NwYW4+Ci08dWw+Ci08bGk+PHN0cm9uZz5Xb3Jrc3BhY2U8L3N0cm9uZz46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPjogbGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5Xb3JraW5nIFNldHM8L3N0cm9uZz46IGxpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbgotYSBzcGVjaWZpZWQgc2V0IG9mIGZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxzdHJvbmc+Q2hvb3NlPC9zdHJvbmc+LiBZb3UKLWNhbiBzZWxlY3QgZmlsZXMgZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuCi1PbmNlIHlvdSBoYXZlIHNlbGVjdGVkIHRoZSBmaWxlcywgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi48L2xpPgotCi08L3VsPgotCi08L2xpPgotCi08bGk+PHNwYW4+VGhlIHBvcnQgdHlwZXMgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uCi1JbiB0aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBwb3J0IHR5cGUgb2JqZWN0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgdHlwZQoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RlNjBhYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcmNfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIiAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAjd3N3c2RsZWRpdG9yYyIKLWlkPSJ3c3dzZGxlZGl0b3JjIiB0aXRsZT0id3N3c2RsZWRpdG9yYyI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBuYXZ0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBlZGl0b3IiPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3JjX3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcmNfdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE4MjZiMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcmNfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sI3dzd3NkbGVkaXRvcmMiIGxhYmVsPSJ3c3dzZGxlZGl0b3JjIiB0b3BpYz0iY29uY2VwdHMvY3dzZGxlZC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iRWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yIiBocmVmPSJjb25jZXB0cy9jd3NkbGVkLmh0bWwiLz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTcwYTUyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9ydF90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIgotICJtYXAuZHRkIj4KLTxtYXAgYW5jaG9ycmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcCN3c3dzZGxlZGl0b3J0IgotaWQ9Indzd3NkbGVkaXRvcnQiIHRpdGxlPSJ3c3dzZGxlZGl0b3J0Ij4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90aW1wd3NkbC5kaXRhIiBuYXZ0aXRsZT0iSW1wb3J0aW5nIFdTREwgZmlsZXMiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGNydHdzZGwuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIFdTREwgZmlsZXMiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBuYXZ0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBlZGl0b3IiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RlZHR3c2RsLmRpdGEiIG5hdnRpdGxlPSJFZGl0aW5nIFdTREwgZmlsZXMiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRzcnZjLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYSBzZXJ2aWNlIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZHBvcnQuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhIHBvcnQgdG8gYSBzZXJ2aWNlIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHNldHBydHQuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IlNldHRpbmcgYSBwb3J0IHR5cGUiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90c2V0YmluZC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iU2V0dGluZyBhIGJpbmRpbmciPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkb3Blci5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGFuIG9wZXJhdGlvbiI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRtZXNzLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYSBtZXNzYWdlIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZHBhcnQuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGNydGltcHQuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90Y3J0dHlwZS5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGUiPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5kaXRhIgotbmF2dGl0bGU9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIHNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC9tYXA+Ci08P1B1YiAqMDAwMDAwMTcxMz8+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9ydF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTg0ZTA4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9ydF90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sI3dzd3NkbGVkaXRvcnQiIGxhYmVsPSJ3c3dzZGxlZGl0b3J0IiB0b3BpYz0idGFza3MvdGltcHdzZGwuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkltcG9ydGluZyBhIFdTREwgZmlsZSIgaHJlZj0idGFza3MvdGltcHdzZGwuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIG5ldyBXU0RMIGZpbGUiIGhyZWY9InRhc2tzL3RjcnR3c2RsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iRWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yIiBocmVmPSJjb25jZXB0cy9jd3NkbGVkLmh0bWwiPgotPHRvcGljIGxhYmVsPSJFZGl0aW5nIFdTREwgZmlsZXMiIGhyZWY9InRhc2tzL3RlZHR3c2RsLmh0bWwiPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSBzZXJ2aWNlIiBocmVmPSJ0YXNrcy90YWRkc3J2Yy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIHBvcnQgdG8gYSBzZXJ2aWNlIiBocmVmPSJ0YXNrcy90YWRkcG9ydC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlNldHRpbmcgYSBwb3J0IHR5cGUiIGhyZWY9InRhc2tzL3RzZXRwcnR0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iU2V0dGluZyBhIGJpbmRpbmciIGhyZWY9InRhc2tzL3RzZXRiaW5kLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGFuIG9wZXJhdGlvbiIgaHJlZj0idGFza3MvdGFkZG9wZXIuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSBtZXNzYWdlIiBocmVmPSJ0YXNrcy90YWRkbWVzcy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlIiBocmVmPSJ0YXNrcy90YWRkcGFydC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQiIGhyZWY9InRhc2tzL3RjcnRpbXB0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGUiIGhyZWY9InRhc2tzL3RjcnR0eXBlLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJFeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbCIvPgotPC90b2M+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODVhNjljLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyXzEuMC4wLmphcgotYmFrCi10ZW1wCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkN2M0NmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzM3YzlhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gTWF5IDA3IDIzOjA5OjEwIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvRG9jQnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmJiN2IyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0gCi0KLQlUaGlzIHNjcmlwdCBidWlsZCB0aGUgSGVscCBwbHVnLWluIGJ5IHRyYW5zZm9ybWluZyB0aGUgRElUQSBzb3VyY2UgZmlsZXMgaW50byBIVE1MLgotCQotCVRvIHVzZSB0aGlzIHNjcmlwdCwgeW91IG11c3QgaW5zdGFsbCBESVRBLU9UIG9uIHlvdXIgbWFjaGluZSBpbiB0aGUgZGlyZWN0b3J5Ci0JZGVmaW5lZCBieSB0aGUgZGl0YS5vdC5kaXIgcHJvcGVydHkuCi0JCi0JUnVuIHRoZSBkZWZhdWx0IHRhcmdldCBhZnRlciB5b3UgZWRpdCB0aGUgRElUQSBzb3VyY2UgZmlsZXMgdG8gcmVnZW5lcmF0ZSB0aGUgSFRNTC4KLQkKLQlUbyBjdXN0b21pemUgdGhpcyBzY3JpcHQgZm9yIG90aGVyIEhlbHAgcGx1Zy1pbnMsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGFyZ3MuaW5wdXQgcHJvcGVydHkKLQl0byBiZSB0aGUgRElUQSBtYXAgZmlsZSBmb3IgdGhlIHBsdWctaW4uCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGxpbmtzIHRvIHNpYmxpbmcgSGVscCBwbHVnLWlucyBoYXZlIHNjb3BlPSJwZWVyIiwgb3RoZXJ3aXNlIHRoZQotCW91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpbGwgYmUgc2hpZnRlZCBpbmNvcnJlY3RseS4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgeW91IGhhbmQgY29kZSB5b3VyIHBsdWdpbi54bWwgZmlsZSBpbiBteXBsdWdpbi54bWwuIFRoaXMgZmlsZQotCXdpbGwgYmUgY29waWVkIG92ZXIgdGhlIGdlbmVyYXRlZCBwbHVnaW4ueG1sIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgZ2VuZXJhdGVkIGNvcnJlY3RseQotCWJ5IERJVEEtT1QuCi0JCi0JQ2hhbmdlTG9nOgotCTIwMDYtMDQtMDUgQXJ0aHVyIFJ5bWFuIDxyeW1hbkBjYS5pYm0uY29tPgotCS0gQ3JlYXRlZC4KLQotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIxLjUuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3N3c2l0ZXN0X3RvYy5kaXRhbWFwIiAvPiAgICAJCQotCQkJPHByb3BlcnR5IG5hbWU9ImNsZWFuLnRlbXAiIHZhbHVlPSJ0cnVlIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEuZXh0bmFtZSIgdmFsdWU9Ii5kaXRhIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEudGVtcC5kaXIiIGxvY2F0aW9uPSJ0ZW1wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC5kaXIiIGxvY2F0aW9uPSIuLiIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3R5cGUiIHZhbHVlPSJlY2xpcHNlaGVscCIgLz4KLQkJPC9hbnQ+Ci0JCTxjb3B5IGZpbGU9Im15cGx1Z2luLnhtbCIgdG9maWxlPSJwbHVnaW4ueG1sIiBvdmVyd3JpdGU9InllcyIgLz4KLQk8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmZTAyZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAzLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZWIxN2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGltYWdlcy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgd3N3c2l0ZXN0X3RvYy54bWwsXAotICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLQkJICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotCQkgICAgICB0YXNrcy8qLmRpdGEKLWJpbi5leGNsdWRlcyA9IERvY0J1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICBteVBsdWdpbioueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW1hZ2VzL3RyYWZmaWMuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy90cmFmZmljLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMxZWE0YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW1hZ2VzL3RyYWZmaWMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy93c2l2YWxpY28uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy93c2l2YWxpY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmNhZDg0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbWFnZXMvd3NpdmFsaWNvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9fMy5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvXzMuY2ZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTc4NmI3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9fMy5jZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQyMzI0Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczODViMjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTU6NTIgRURUIDIwMDcNCi1vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyPW9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJcbjEuMC4yMDIucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDc5MTUwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTU6NTIgRURUIDIwMDcNCi1sdWNlbmU9MS40LjEwMy52MjAwNjA2MDENCi1hbmFseXplcj1vcmcuZWNsaXBzZS5oZWxwLmJhc2VcIzMuMi4wLnYyMDA2MDYwMT9sb2NhbGVcPWVuDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZmM2YTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTU6NTIgRURUIDIwMDcNCi0vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliNWQwYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJjZjNiZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFRoaXMgaXMgdGhlIHBsdWdpbiBmb3IgZGVjbGFyaW5nIHRoZSBoZWxwICAgICAgICAgLS0+Ci08IS0tIGNvbnRyaWJ1dGlvbnMgZm9yIHVzaW5nIHRoZSB0b29sLiAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLTxwbHVnaW4+Ci0KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICA8dG9jIGZpbGU9Indzd3NpdGVzdF90b2MueG1sIi8+IAotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4gIAotPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLm1hcGxpc3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDU4YTI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLm1hcGxpc3QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTxtYXBsaXN0IHZlcnNpb249IjMuNi4yIj4KLSAgPG5hdj4KLSAgICA8bWFwIGZpbGU9Indzd3NpdGVzdF90b2MuZGl0YW1hcCIvPgotICA8L25hdj4KLSAgPGxpbms+Ci0gICAgPG1hcCBmaWxlPSJ3c3dzaXRlc3RfdG9jLmRpdGFtYXAiLz4KLSAgPC9saW5rPgotPC9tYXBsaXN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWVmZDQ2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgaHRtbAotICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0ic2VjdXJpdHkiIGNvbnRlbnQ9InB1YmxpYyIgLz4KLTxtZXRhIG5hbWU9IlJvYm90cyIgY29udGVudD0iaW5kZXgsZm9sbG93IiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBuYW1lPSJEQy5Gb3JtYXQiIGNvbnRlbnQ9IlhIVE1MIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2libWRpdGEuY3NzIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIC8+Ci08dGl0bGU+SW5kZXg8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+SW5kZXg8L2gxPgotPHN0cm9uZz5UPC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+VENQL0lQIE1vbml0b3IKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sI3Rtb25pdG9yIj50ZXN0aW5nIFdlYiBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPlc8L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5XZWIgc2VydmljZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sI3Rtb25pdG9yIj5tb25pdG9yaW5nIFRDUC9JUCB0cmFmZmljPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sI3Rtb25pdG9yIj50ZXN0aW5nIHRyYWZmaWM8L2E+Ci08L2xpPgotPGxpPnZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzaXZhbC5odG1sI3R3c2l2YWwiPmludGVyb3BlcmFiaWxpdHk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCN0d3NpdmFsIj52YWxpZGF0aW5nPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R3c2RsdmFsLmh0bWwjdHdzZGx2YWwiPnZhbGlkYXRpbmcgV1NETDwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XUy1JCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzaXZhbC5odG1sI3R3c2l2YWwiPnZhbGlkYXRpbmc8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1NETAotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3R3c2RsdmFsLmh0bWwjdHdzZGx2YWwiPnZhbGlkYXRpbmc8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NTQ3YjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGluZGV4PgotICA8ZW50cnkga2V5d29yZD0iV1NETCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2RsdmFsLmh0bWwjdHdzZGx2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIFdTREwgZmlsZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0idmFsaWRhdGluZyBXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NkbHZhbC5odG1sI3R3c2RsdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXU0RMIGZpbGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idGVzdGluZyB0cmFmZmljIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sI3Rtb25pdG9yIiB0aXRsZT0iVXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibW9uaXRvcmluZyBUQ1AvSVAgdHJhZmZpYyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCN0bW9uaXRvciIgdGl0bGU9IlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJ2YWxpZGF0aW5nIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCN0d3NpdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJpbnRlcm9wZXJhYmlsaXR5Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2l2YWwuaHRtbCN0d3NpdmFsIiB0aXRsZT0iVmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iVENQL0lQIE1vbml0b3IiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJ0ZXN0aW5nIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCN0bW9uaXRvciIgdGl0bGU9IlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXUy1JIj4KLSAgICA8ZW50cnkga2V5d29yZD0idmFsaWRhdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzaXZhbC5odG1sI3R3c2l2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLTwvaW5kZXg+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTM2ZmVjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE5MU19NRVNTQUdFRk9STUFUX1ZBUiAKLSMgTkxTX0VOQ09ESU5HPVVURi04IAotCi1wbHVnaW5OYW1lICAgICA9IFdTLUkgVmFsaWRhdGlvbiBEb2N1bWVudGF0aW9uCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjE5ZGFhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFRoaXMgaXMgdGhlIHBsdWdpbiBmb3IgZGVjbGFyaW5nIHRoZSBoZWxwICAgICAgICAgLS0+Ci08IS0tIGNvbnRyaWJ1dGlvbnMgZm9yIHVzaW5nIHRoZSB0b29sLiAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLTxwbHVnaW4+Ci0KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICA8dG9jIGZpbGU9Indzd3NpdGVzdF90b2MueG1sIi8+ICAKLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+IAotPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzOTViMjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idG1vbml0b3IiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+VXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+VXNpbmcgdGhlIFRDUC9JUCBvciBTT0FQIG1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPk9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBXZWIgc2VydmljZSBjbGllbnQsCi15b3UgY2FuIG1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlJ3MgU09BUCB0cmFmZmljIHVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+VENQL0lQIE1vbml0b3I8aW5kZXh0ZXJtPnRlc3RpbmcgV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+dGVzdGluZyB0cmFmZmljPC9pbmRleHRlcm0+PGluZGV4dGVybT5tb25pdG9yaW5nCi1UQ1AvSVAgdHJhZmZpYzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT48cD4gUHJlcmVxdWlzaXRlczogPC9wPjx1bD4KLTxsaT5HZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlPC9saT4KLTxsaT5HZW5lcmF0ZSBhIFByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbjwvbGk+Ci08L3VsPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+V2hlbiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXZWIgc2VydmljZSBvciBXZWIgc2VydmljZQotY2xpZW50IHdpemFyZHMsIHlvdSBjYW4gc2VsZWN0IHRvIHNldCB1cCBhbmQgcnVuIHRoZSBUQ1AvSVAgTW9uaXRvciBhdXRvbWF0aWNhbGx5LgotQWx0ZXJuYXRlbHksIHlvdSBjYW4gc2V0IHVwIHRoZSBUQ1AvSVAgTW9uaXRvciBtYW51YWxseSBieSBjb21wbGV0aW5nIHRoZQotZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBzYW1wbGUgYXBwbGljYXRpb24sIGludm9rZSB0aGUgZ2V0RW5kUG9pbnQgbWV0aG9kLiBSZWNvcmQKLXRoaXMgZW5kcG9pbnQuIFRoZSBkZWZhdWx0IGVuZHBvaW50IGZvciBhIFdlYiBzZXJ2aWNlIGlzOiBodHRwOi8vbG9jYWxob3N0OiZsdDtwb3J0Pi8mbHQ7d2ViCi1tb2R1bGUgY29udGV4dCByb290Pi9zZXJ2aWNlcy8mbHQ7cG9ydD48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNyZWF0ZSBhIHNlcnZlciB0byBhY3QgYXMgdGhlIFRDUC9JUCBNb25pdG9yOjwvY21kPgotPHN1YnN0ZXBzPgotPHN1YnN0ZXA+PGNtZD5Gcm9tIHRoZSBXaW5kb3cgbWVudSwgc2VsZWN0IDx1aWNvbnRyb2w+UHJlZmVyZW5jZXM8L3VpY29udHJvbD4uIDwvY21kPgotPC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5JbiB0aGUgUHJlZmVyZW5jZXMgd2luZG93LCBleHBhbmQgPHVpY29udHJvbD5SdW4vRGVidWc8L3VpY29udHJvbD4sCi1hbmQgdGhlbiBzZWxlY3QgPHVpY29udHJvbD5UQ1AvSVAgTW9uaXRvcjwvdWljb250cm9sPi4gPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgdGhlIDx1aWNvbnRyb2w+U2hvdyBUQ1AvSVAgTW9uaXRvciBWaWV3IHdoZW4gdGhlcmUgaXMKLWFjdGl2aXR5PC91aWNvbnRyb2w+IGNoZWNrIGJveC4gPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5VbmRlciB0aGUgVENQL0lQIE1vbml0b3JzIGxpc3RzLCBjbGljayA8dWljb250cm9sPkFkZDwvdWljb250cm9sPi4KLUEgTmV3IE1vbml0b3IgZGlhbG9nIG9wZW5zLjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U3BlY2lmeSB0aGUgZm9sbG93aW5nIHNldHRpbmdzOiA8L2NtZD48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPGNob2ljZXRhYmxlPgotPGNoaGVhZD48Y2hvcHRpb25oZD5PcHRpb248L2Nob3B0aW9uaGQ+PGNoZGVzY2hkPkRlc2NyaXB0aW9uPC9jaGRlc2NoZD48L2NoaGVhZD4KLTxjaHJvdz48Y2hvcHRpb24+TG9jYWwgbW9uaXRvcmluZyBwb3J0PC9jaG9wdGlvbj48Y2hkZXNjPlNwZWNpZnkgYSB1bmlxdWUKLXBvcnQgbnVtYmVyIG9uIHlvdXIgbG9jYWwgbWFjaGluZS48L2NoZGVzYz48L2Nocm93PgotPGNocm93PjxjaG9wdGlvbj5Ib3N0IG5hbWU8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSB0aGUgaG9zdCBuYW1lIG9yIElQIGFkZHJlc3MKLW9mIHRoZSBtYWNoaW5lIHdoZXJlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZy48L2NoZGVzYz48L2Nocm93PgotPGNocm93PjxjaG9wdGlvbj5Qb3J0PC9jaG9wdGlvbj48Y2hkZXNjPlNwZWNpZnkgdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSByZW1vdGUKLXNlcnZlci48L2NoZGVzYz48L2Nocm93PgotPGNocm93PjxjaG9wdGlvbj5UeXBlPC9jaG9wdGlvbj48Y2hkZXNjPlNwZWNpZnkgd2hldGhlciB0aGUgcmVxdWVzdCB0eXBlIGZyb20KLXRoZSBXZWIgYnJvd3NlciBhcmUgc2VudCBieSBIVFRQIG9yIFRDUC9JUC4gSWYgdGhlIEhUVFAgb3B0aW9uIGlzIHNlbGVjdGVkCi10aGUgcmVxdWVzdHMgZnJvbSB0aGUgV2ViIGJyb3dzZXIgYXJlIG1vZGlmaWVkIHNvIHRoYXQgdGhlIEhUVFAgaGVhZGVyIHBvaW50cwotdG8gdGhlIHJlbW90ZSBtYWNoaW5lIGFuZCBzZXBhcmF0ZWQgaWYgbXVsdGlwbGUgSFRUUCByZXF1ZXN0cyBhcmUgcmVjZWl2ZWQKLWluIHRoZSBzYW1lIGNvbm5lY3Rpb24uIElmIHRoZSBUQ1AvSVAgb3B0aW9uIGlzIHNlbGVjdGVkLCBhbGwgdGhlIHJlcXVlc3RzCi1hcmUgc2VudCBieXRlIGZvciBieXRlLiA8L2NoZGVzYz48L2Nocm93PgotPC9jaG9pY2V0YWJsZT4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gb3JkZXIgdG8gcm91dGUgdGhlIFdlYiBzZXJ2aWNlIHRocm91Z2ggdGhlIG1vbml0b3IsIHRoZSBlbmRwb2ludAotb2YgdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCBuZWVkcyB0byBiZSBjaGFuZ2VkLiBUaGUgVENQL0lQIE1vbml0b3IgbGlzdGVucwotb24gcG9ydCA5MDgxLiBJbiB0aGUgV2ViIGJyb3dzZXIgd2luZG93IHVzZWQgaW4gc3RlcCAxLCBpbnZva2UgdGhlIHNldEVuZFBvaW50Ci1tZXRob2QsIGFuZCBjaGFuZ2UgdGhlIGVuZHBvaW50IHNvIHRoYXQgaXQgZGlyZWN0cyB0byBwb3J0IDkwODEuIEZvciBleGFtcGxlLAotdGhlIGRlZmF1bHQgd291bGQgYmU6IDxjb2RlcGg+aHR0cDovL2xvY2FsaG9zdDo5MDgxL3dlYl9tb2R1bGVfY29udGV4dF9yb290L3NlcnZsZXQvcnBjcm91dGVyPC9jb2RlcGg+IEludm9rZQotdGhlIGdldEVuZFBvaW50IG1ldGhvZCBhZ2FpbiB0byBlbnN1cmUgdGhhdCB5b3VyIGNoYW5nZSBoYXMgYmVlbiBpbXBsZW1lbnRlZC48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IGEgV2ViIHNlcnZpY2UgbWV0aG9kIGluIHRoZSBNZXRob2RzIHBhbmUuIEludm9rZSB0aGlzIG1ldGhvZC48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2hhbmdlIHRvIHRoZSBUQ1AvSVAgTW9uaXRvciB2aWV3IGJ5IHNlbGVjdGluZyB0aGUgVENQL0lQIE1vbml0b3IKLXRhYiBpbiB0aGUgU2VydmVycyB2aWV3LiBUaGlzIHdpbGwgZGlzcGxheSByZXF1ZXN0IGFuZCByZXNwb25zZSBwYWlycyB0aGF0Ci1hcmUgYmVpbmcgcm91dGVkIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLiBJdCB3aWxsIGxvb2sgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nCi1waWN0dXJlOiAgPGltYWdlIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgdHJhZmZpYyIgaHJlZj0iLi4vaW1hZ2VzL3RyYWZmaWMuZ2lmIgotcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlRvIGVuc3VyZSB0aGF0IHlvdXIgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIGlzIFdTLUkgY29tcGxpYW50LAoteW91IGNhbiBnZW5lcmF0ZSBhIGxvZyBmaWxlIGJ5IGNsaWNraW5nIHRoZSAgPGltYWdlIGFsdD0iV1MtSSB2YWxpZGF0aW9uIGljb24iCi1ocmVmPSIuLi9pbWFnZXMvd3NpdmFsaWNvLmdpZiI+PC9pbWFnZT4gaWNvbi4gSW4gdGhlIGRpYWxvZyBib3ggdGhhdCBvcGVucywKLXNlbGVjdCBhIG5hbWUgZm9yIHRoZSBsb2cgZmlsZSBhbmQgc3BlY2lmeSB3aGVyZSB5b3Ugd2FudCBpdCB0byBiZSBzdG9yZWQuIDwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+VGhpcyBsb2cgZmlsZSB3aWxsIGJlIHZhbGlkYXRlZCBmb3IgV1MtSSBjb21wbGlhbmNlLiBZb3UgY2FuIG9wZW4KLXRoZSBsb2cgZmlsZSBpbiBhbiBYTUwgZWRpdG9yIHRvIGV4YW1pbmUgaXRzIGNvbnRlbnRzLjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jc29hcC5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+U09BUDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XUy1JPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5LmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjdlYThlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSBhbmQgV2ViIHNlcnZpY2UgY2xpZW50LCB5b3UgY2FuIG1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlJ3MgU09BUCB0cmFmZmljIHVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvci4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCwgeW91IGNhbiBtb25pdG9yIHRoZSBXZWIgc2VydmljZSdzIFNPQVAgdHJhZmZpYyB1c2luZyB0aGUgVENQL0lQIE1vbml0b3IuIiAvPgotPG1ldGEgY29udGVudD0iVENQL0lQIE1vbml0b3IsIHRlc3RpbmcgV2ViIHNlcnZpY2VzLCBXZWIgc2VydmljZXMsIHRlc3RpbmcgdHJhZmZpYywgbW9uaXRvcmluZyBUQ1AvSVAgdHJhZmZpYyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlRDUC9JUCBNb25pdG9yLCB0ZXN0aW5nIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzLCB0ZXN0aW5nIHRyYWZmaWMsIG1vbml0b3JpbmcgVENQL0lQIHRyYWZmaWMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idG1vbml0b3IiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Vc2luZyB0aGUgVENQL0lQIG9yIFNPQVAgbW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idG1vbml0b3IiPjxhIG5hbWU9InRtb25pdG9yIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L2gxPgotCi0KLQotCi08ZGl2PjxwPk9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBXZWIgc2VydmljZSBjbGllbnQsCi15b3UgY2FuIG1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlJ3MgU09BUCB0cmFmZmljIHVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvci48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPjxwPiBQcmVyZXF1aXNpdGVzOiA8L3A+Ci08dWw+Ci08bGk+R2VuZXJhdGUgYSBXZWIgc2VydmljZTwvbGk+Ci0KLTxsaT5HZW5lcmF0ZSBhIFByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+V2hlbiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXZWIgc2VydmljZSBvciBXZWIgc2VydmljZQotY2xpZW50IHdpemFyZHMsIHlvdSBjYW4gc2VsZWN0IHRvIHNldCB1cCBhbmQgcnVuIHRoZSBUQ1AvSVAgTW9uaXRvciBhdXRvbWF0aWNhbGx5LgotQWx0ZXJuYXRlbHksIHlvdSBjYW4gc2V0IHVwIHRoZSBUQ1AvSVAgTW9uaXRvciBtYW51YWxseSBieSBjb21wbGV0aW5nIHRoZQotZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIHNhbXBsZSBhcHBsaWNhdGlvbiwgaW52b2tlIHRoZSBnZXRFbmRQb2ludCBtZXRob2QuIFJlY29yZAotdGhpcyBlbmRwb2ludC4gVGhlIGRlZmF1bHQgZW5kcG9pbnQgZm9yIGEgV2ViIHNlcnZpY2UgaXM6IGh0dHA6Ly9sb2NhbGhvc3Q6Jmx0O3BvcnQmZ3Q7LyZsdDt3ZWIKLW1vZHVsZSBjb250ZXh0IHJvb3QmZ3Q7L3NlcnZpY2VzLyZsdDtwb3J0Jmd0Ozwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q3JlYXRlIGEgc2VydmVyIHRvIGFjdCBhcyB0aGUgVENQL0lQIE1vbml0b3I6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkZyb20gdGhlIFdpbmRvdyBtZW51LCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UHJlZmVyZW5jZXM8L3NwYW4+LiA8L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIFByZWZlcmVuY2VzIHdpbmRvdywgZXhwYW5kIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJ1bi9EZWJ1Zzwvc3Bhbj4sCi1hbmQgdGhlbiBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VENQL0lQIE1vbml0b3I8L3NwYW4+LiA8L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+U2hvdyBUQ1AvSVAgTW9uaXRvciBWaWV3IHdoZW4gdGhlcmUgaXMKLWFjdGl2aXR5PC9zcGFuPiBjaGVjayBib3guIDwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+VW5kZXIgdGhlIFRDUC9JUCBNb25pdG9ycyBsaXN0cywgY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkPC9zcGFuPi4KLUEgTmV3IE1vbml0b3IgZGlhbG9nIG9wZW5zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U3BlY2lmeSB0aGUgZm9sbG93aW5nIHNldHRpbmdzOiA8L3NwYW4+PC9saT4KLQotPC9vbD4KLQotCi08dGFibGUgY2xhc3M9ImNob2ljZXRhYmxlYm9yZGVyIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgcnVsZXM9InJvd3MiIGZyYW1lPSJoc2lkZXMiIGJvcmRlcj0iMSI+Ci08dGhlYWQ+PHRyPjx0aCB2YWxpZ249ImJvdHRvbSIgaWQ9Ik4xMDBFOS1vcHRpb24iPk9wdGlvbjwvdGg+Ci08dGggdmFsaWduPSJib3R0b20iIGlkPSJOMTAwRTktZGVzYyI+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD4KLTx0Ym9keT4KLQotPHRyPjx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEU5LW9wdGlvbiIgaWQ9Ik4xMDEwMiI+PHN0cm9uZz5Mb2NhbCBtb25pdG9yaW5nIHBvcnQ8L3N0cm9uZz48L3RkPgotPHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRTktZGVzYyBOMTAxMDIiPlNwZWNpZnkgYSB1bmlxdWUKLXBvcnQgbnVtYmVyIG9uIHlvdXIgbG9jYWwgbWFjaGluZS48L3RkPgotPC90cj4KLQotPHRyPjx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEU5LW9wdGlvbiIgaWQ9Ik4xMDExMSI+PHN0cm9uZz5Ib3N0IG5hbWU8L3N0cm9uZz48L3RkPgotPHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRTktZGVzYyBOMTAxMTEiPlNwZWNpZnkgdGhlIGhvc3QgbmFtZSBvciBJUCBhZGRyZXNzCi1vZiB0aGUgbWFjaGluZSB3aGVyZSB0aGUgc2VydmVyIGlzIHJ1bm5pbmcuPC90ZD4KLTwvdHI+Ci0KLTx0cj48dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBFOS1vcHRpb24iIGlkPSJOMTAxMjAiPjxzdHJvbmc+UG9ydDwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBFOS1kZXNjIE4xMDEyMCI+U3BlY2lmeSB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHJlbW90ZQotc2VydmVyLjwvdGQ+Ci08L3RyPgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRTktb3B0aW9uIiBpZD0iTjEwMTJGIj48c3Ryb25nPlR5cGU8L3N0cm9uZz48L3RkPgotPHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRTktZGVzYyBOMTAxMkYiPlNwZWNpZnkgd2hldGhlciB0aGUgcmVxdWVzdCB0eXBlIGZyb20KLXRoZSBXZWIgYnJvd3NlciBhcmUgc2VudCBieSBIVFRQIG9yIFRDUC9JUC4gSWYgdGhlIEhUVFAgb3B0aW9uIGlzIHNlbGVjdGVkCi10aGUgcmVxdWVzdHMgZnJvbSB0aGUgV2ViIGJyb3dzZXIgYXJlIG1vZGlmaWVkIHNvIHRoYXQgdGhlIEhUVFAgaGVhZGVyIHBvaW50cwotdG8gdGhlIHJlbW90ZSBtYWNoaW5lIGFuZCBzZXBhcmF0ZWQgaWYgbXVsdGlwbGUgSFRUUCByZXF1ZXN0cyBhcmUgcmVjZWl2ZWQKLWluIHRoZSBzYW1lIGNvbm5lY3Rpb24uIElmIHRoZSBUQ1AvSVAgb3B0aW9uIGlzIHNlbGVjdGVkLCBhbGwgdGhlIHJlcXVlc3RzCi1hcmUgc2VudCBieXRlIGZvciBieXRlLiA8L3RkPgotPC90cj4KLQotPC90Ym9keT48L3RhYmxlPgotCi08L2xpPgotCi08bGk+PHNwYW4+SW4gb3JkZXIgdG8gcm91dGUgdGhlIFdlYiBzZXJ2aWNlIHRocm91Z2ggdGhlIG1vbml0b3IsIHRoZSBlbmRwb2ludAotb2YgdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCBuZWVkcyB0byBiZSBjaGFuZ2VkLiBUaGUgVENQL0lQIE1vbml0b3IgbGlzdGVucwotb24gcG9ydCA5MDgxLiBJbiB0aGUgV2ViIGJyb3dzZXIgd2luZG93IHVzZWQgaW4gc3RlcCAxLCBpbnZva2UgdGhlIHNldEVuZFBvaW50Ci1tZXRob2QsIGFuZCBjaGFuZ2UgdGhlIGVuZHBvaW50IHNvIHRoYXQgaXQgZGlyZWN0cyB0byBwb3J0IDkwODEuIEZvciBleGFtcGxlLAotdGhlIGRlZmF1bHQgd291bGQgYmU6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmh0dHA6Ly9sb2NhbGhvc3Q6OTA4MS93ZWJfbW9kdWxlX2NvbnRleHRfcm9vdC9zZXJ2bGV0L3JwY3JvdXRlcjwvc2FtcD4gSW52b2tlCi10aGUgZ2V0RW5kUG9pbnQgbWV0aG9kIGFnYWluIHRvIGVuc3VyZSB0aGF0IHlvdXIgY2hhbmdlIGhhcyBiZWVuIGltcGxlbWVudGVkLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgYSBXZWIgc2VydmljZSBtZXRob2QgaW4gdGhlIE1ldGhvZHMgcGFuZS4gSW52b2tlIHRoaXMgbWV0aG9kLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5DaGFuZ2UgdG8gdGhlIFRDUC9JUCBNb25pdG9yIHZpZXcgYnkgc2VsZWN0aW5nIHRoZSBUQ1AvSVAgTW9uaXRvcgotdGFiIGluIHRoZSBTZXJ2ZXJzIHZpZXcuIFRoaXMgd2lsbCBkaXNwbGF5IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHBhaXJzIHRoYXQKLWFyZSBiZWluZyByb3V0ZWQgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuIEl0IHdpbGwgbG9vayBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcKLXBpY3R1cmU6ICA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3RyYWZmaWMuZ2lmIiBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRyYWZmaWMiIC8+PGJyIC8+PC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5UbyBlbnN1cmUgdGhhdCB5b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwKLXlvdSBjYW4gZ2VuZXJhdGUgYSBsb2cgZmlsZSBieSBjbGlja2luZyB0aGUgIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NpdmFsaWNvLmdpZiIgYWx0PSJXUy1JIHZhbGlkYXRpb24gaWNvbiIgLz4gaWNvbi4gSW4gdGhlIGRpYWxvZyBib3ggdGhhdCBvcGVucywKLXNlbGVjdCBhIG5hbWUgZm9yIHRoZSBsb2cgZmlsZSBhbmQgc3BlY2lmeSB3aGVyZSB5b3Ugd2FudCBpdCB0byBiZSBzdG9yZWQuIDwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRoaXMgbG9nIGZpbGUgd2lsbCBiZSB2YWxpZGF0ZWQgZm9yIFdTLUkgY29tcGxpYW5jZS4gWW91IGNhbiBvcGVuCi10aGUgbG9nIGZpbGUgaW4gYW4gWE1MIGVkaXRvciB0byBleGFtaW5lIGl0cyBjb250ZW50cy48L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmh0bWwiPlNPQVA8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sIj5XUy1JPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCI+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzlkYzdhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR3c2RsdmFsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlZhbGlkYXRpbmcgV1NETCBmaWxlczwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlZhbGlkYXRpbmcgV1NETCBmaWxlczwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+SWYgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkCi10aGUgV1NETCB0aGF0IGlzIGdlbmVyYXRlZCBzaG91bGQgYmUgdmFsaWQuIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGltcG9ydGVkCi1hIFdTREwgZmlsZSwgb3IgaWYgeW91IGFyZSBjcmVhdGluZyBhIFdTREwgZmlsZSwgeW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgV1NETAotdG8gZW5zdXJlIGl0IGlzIHZhbGlkLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMPGluZGV4dGVybT52YWxpZGF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT52YWxpZGF0aW5nIFdTREw8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPklmIHlvdSBoYXZlIHNlbGVjdGVkIFJlcXVpcmUgb3IgU3VnZ2VzdCBXUy1JIENvbXBsaWFuY2Ugb24gdGhlCi1XUy1JIENvbXBsaWFuY2UgcHJlZmVyZW5jZSBwYWdlLCB0aGUgdmFsaWRhdGlvbiBhbHNvIGNoZWNrcyBXUy1JIGNvbXBsaWFuY2UuCi1JZiB5b3UgaGF2ZSBzZWxlY3RlZCBJZ25vcmUgV1MtSSBDb21wbGlhbmNlIHRoZSB2YWxpZGF0b3Igd2lsbCBvbmx5IGNoZWNrCi10aGUgdmFsaWRpdHkgb2YgdGhlIFdTREwuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgV1MtSSBjb21wbGlhbmNlCi1sZXZlbHMsIHJlZmVyIHRvOiAgPHhyZWYgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuZGl0YSIKLXNjb3BlPSJwZWVyIj4gU2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC94cmVmPi48L3A+PHA+VGhlIFdTREwKLVZhbGlkYXRvciBjb21wYXJlcyB0aGUgV1NETCBmaWxlIGluIHlvdXIgcHJvamVjdCB0byB0aGUgVzNDICA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi93c2RsIiBzY29wZT0iZXh0ZXJuYWwiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbgotTGFuZ3VhZ2UgKFdTREwpIDEuMTwveHJlZj4gc3BlY2lmaWNhdGlvbnMsIGFuZCB0aGUgV1MtSSBjb21wbGlhbmNlIHNldHRpbmdzCi10aGF0IHlvdSBoYXZlIHNlbGVjdGVkLjwvcD48cD5UbyB2YWxpZGF0ZSB5b3VyIFdTREwsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlNlbGVjdCBhIFdTREwgZmlsZSBpbiB0aGUgIDxiPlByb2plY3QgTmF2aWdhdG9yPC9iPiB2aWV3LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5SaWdodC1jbGljayB0aGUgV1NETCBmaWxlLCBhbmQgc2VsZWN0ICA8Yj5WYWxpZGF0ZTwvYj48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD5BbnkgcHJvYmxlbXMgZW5jb3VudGVyZWQgd2hpbGUgdmFsaWRhdGluZyB0aGUgZmlsZSB3aWxsIGJlIHNob3duIGluCi10aGUgIDxiPlRhc2tzPC9iPiB2aWV3LjxwPldoZW4geW91IHJlYnVpbGQgYSBwcm9qZWN0IG9yIHNhdmUgYSByZXNvdXJjZSwgdGhlCi1XU0RMIFZhbGlkYXRvciBjYW4gYmUgc2V0IHRvIHJ1biBhdXRvbWF0aWNhbGx5LiBUbyBkbyB0aGlzLCBmcm9tIHRoZSBXaW5kb3cKLW1lbnUsIHNlbGVjdCAgPGI+UHJlZmVyZW5jZXM8L2I+ID4gIDxiPlZhbGlkYXRpb248L2I+LiBFbnN1cmUgdGhhdCB0aGUgV1NETAotVmFsaWRhdG9yIGNoZWNrIGJveCBpbiB0aGUgQnVpbGQgY29sdW1uIGlzIHNlbGVjdGVkLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREw8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1MtSTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+U2V0dGluZyBXUy1JIGNvbXBsaWFuY2U8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2Q0ODNjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDYiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iVmFsaWRhdGluZyBXU0RMIGZpbGVzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IklmIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCB0aGUgV1NETCB0aGF0IGlzIGdlbmVyYXRlZCBzaG91bGQgYmUgdmFsaWQuIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGltcG9ydGVkIGEgV1NETCBmaWxlLCBvciBpZiB5b3UgYXJlIGNyZWF0aW5nIGEgV1NETCBmaWxlLCB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSBXU0RMIHRvIGVuc3VyZSBpdCBpcyB2YWxpZC4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSWYgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkIHRoZSBXU0RMIHRoYXQgaXMgZ2VuZXJhdGVkIHNob3VsZCBiZSB2YWxpZC4gSG93ZXZlciwgaWYgeW91IGhhdmUgaW1wb3J0ZWQgYSBXU0RMIGZpbGUsIG9yIGlmIHlvdSBhcmUgY3JlYXRpbmcgYSBXU0RMIGZpbGUsIHlvdSBzaG91bGQgdmFsaWRhdGUgdGhlIFdTREwgdG8gZW5zdXJlIGl0IGlzIHZhbGlkLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIHZhbGlkYXRpbmcsIFdlYiBzZXJ2aWNlcywgdmFsaWRhdGluZyBXU0RMIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgdmFsaWRhdGluZywgV2ViIHNlcnZpY2VzLCB2YWxpZGF0aW5nIFdTREwiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHdzZGx2YWwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5WYWxpZGF0aW5nIFdTREwgZmlsZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR3c2RsdmFsIj48YSBuYW1lPSJ0d3NkbHZhbCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VmFsaWRhdGluZyBXU0RMIGZpbGVzPC9oMT4KLQotCi0KLQotPGRpdj48cD5JZiB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlIHRocm91Z2ggdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQKLXRoZSBXU0RMIHRoYXQgaXMgZ2VuZXJhdGVkIHNob3VsZCBiZSB2YWxpZC4gSG93ZXZlciwgaWYgeW91IGhhdmUgaW1wb3J0ZWQKLWEgV1NETCBmaWxlLCBvciBpZiB5b3UgYXJlIGNyZWF0aW5nIGEgV1NETCBmaWxlLCB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSBXU0RMCi10byBlbnN1cmUgaXQgaXMgdmFsaWQuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5JZiB5b3UgaGF2ZSBzZWxlY3RlZCBSZXF1aXJlIG9yIFN1Z2dlc3QgV1MtSSBDb21wbGlhbmNlIG9uIHRoZQotV1MtSSBDb21wbGlhbmNlIHByZWZlcmVuY2UgcGFnZSwgdGhlIHZhbGlkYXRpb24gYWxzbyBjaGVja3MgV1MtSSBjb21wbGlhbmNlLgotSWYgeW91IGhhdmUgc2VsZWN0ZWQgSWdub3JlIFdTLUkgQ29tcGxpYW5jZSB0aGUgdmFsaWRhdG9yIHdpbGwgb25seSBjaGVjawotdGhlIHZhbGlkaXR5IG9mIHRoZSBXU0RMLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIFdTLUkgY29tcGxpYW5jZQotbGV2ZWxzLCByZWZlciB0bzogIDxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwiPlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwvYT4uPC9wPgotPHA+VGhlIFdTREwKLVZhbGlkYXRvciBjb21wYXJlcyB0aGUgV1NETCBmaWxlIGluIHlvdXIgcHJvamVjdCB0byB0aGUgVzNDICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi93c2RsIiB0YXJnZXQ9Il9ibGFuayI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSAxLjE8L2E+IHNwZWNpZmljYXRpb25zLCBhbmQgdGhlIFdTLUkgY29tcGxpYW5jZSBzZXR0aW5ncwotdGhhdCB5b3UgaGF2ZSBzZWxlY3RlZC48L3A+Ci08cD5UbyB2YWxpZGF0ZSB5b3VyIFdTREwsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcKLXN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+U2VsZWN0IGEgV1NETCBmaWxlIGluIHRoZSAgPHN0cm9uZz5Qcm9qZWN0IE5hdmlnYXRvcjwvc3Ryb25nPiB2aWV3Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5SaWdodC1jbGljayB0aGUgV1NETCBmaWxlLCBhbmQgc2VsZWN0ICA8c3Ryb25nPlZhbGlkYXRlPC9zdHJvbmc+PC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPkFueSBwcm9ibGVtcyBlbmNvdW50ZXJlZCB3aGlsZSB2YWxpZGF0aW5nIHRoZSBmaWxlIHdpbGwgYmUgc2hvd24gaW4KLXRoZSAgPHN0cm9uZz5UYXNrczwvc3Ryb25nPiB2aWV3LjxwPldoZW4geW91IHJlYnVpbGQgYSBwcm9qZWN0IG9yIHNhdmUgYSByZXNvdXJjZSwgdGhlCi1XU0RMIFZhbGlkYXRvciBjYW4gYmUgc2V0IHRvIHJ1biBhdXRvbWF0aWNhbGx5LiBUbyBkbyB0aGlzLCBmcm9tIHRoZSBXaW5kb3cKLW1lbnUsIHNlbGVjdCAgPHN0cm9uZz5QcmVmZXJlbmNlczwvc3Ryb25nPiAmZ3Q7ICA8c3Ryb25nPlZhbGlkYXRpb248L3N0cm9uZz4uIEVuc3VyZSB0aGF0IHRoZSBXU0RMCi1WYWxpZGF0b3IgY2hlY2sgYm94IGluIHRoZSBCdWlsZCBjb2x1bW4gaXMgc2VsZWN0ZWQuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIj5XU0RMPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCI+V1MtSTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwiPlNldHRpbmcgV1MtSSBjb21wbGlhbmNlPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5YjE4Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR3c2l2YWwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+VmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2U8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPkFzIHdlbGwgYXMgc2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGR1cmluZyBXZWIgc2VydmljZXMKLWNyZWF0aW9uLCB5b3UgY2FuIHZhbGlkYXRlIFdTLUkgY29tcGxpYW5jZSBvZiB0aGUgU09BUCB0cmFmZmljIGEgV2ViIHNlcnZpY2UKLXByb2R1Y2VzIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XUy1JPGluZGV4dGVybT52YWxpZGF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT52YWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZTxpbmRleHRlcm0+aW50ZXJvcGVyYWJpbGl0eTxpbmRleHRlcm0+dmFsaWRhdGluZzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPiBQcmVyZXF1aXNpdGVzOiBCZWZvcmUgeW91IGNhbiB1c2UgdGhlIHZhbGlkYXRpb24gdG9vbCB0byBlbnN1cmUgdGhhdAoteW91ciBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgaXMgV1MtSSBjb21wbGlhbnQsIHlvdSBtdXN0IGhhdmUgY29tcGxldGVkIHRoZQotZm9sbG93aW5nIHN0ZXBzOjx1bD4KLTxsaT5HZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InR3c2RsdmFsLmRpdGEiPlZhbGlkYXRlIHRoZSBXU0RMIHRoYXQgaXMgcHJvZHVjZWQuPC94cmVmPiA8L2xpPgotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uLiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0bW9uaXRvci5kaXRhIj5TZXQgdXAgdGhlIFRDUC9JUCBNb25pdG9yLjwveHJlZj4gRW5zdXJlIHRoYXQKLXlvdXIgV2ViIHNlcnZpY2Ugc2FtcGxlIGFwcGxpY2F0aW9uIHRyYWZmaWMgaXMgZGlyZWN0ZWQgdGhyb3VnaCB0aGUgVENQL0lQCi1Nb25pdG9yLjwvbGk+Ci08L3VsPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+VG8gdmFsaWRhdGUgeW91ciBXZWIgc2VydmljZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbnZva2UgYSBtZXRob2QgaW4geW91ciBXZWIgc2VydmljZSBzYW1wbGUgYXBwbGljYXRpb24gdG8gZ2VuZXJhdGUKLXRyYWZmaWMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5UbyBlbnN1cmUgdGhhdCB5b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwKLXlvdSBjYW4gZ2VuZXJhdGUgYSBsb2cgZmlsZSBieSBjbGlja2luZyB0aGUgIDxpbWFnZSBhbHQ9IlZhbGlkYXRlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2l2YWxpY28uZ2lmIj4KLTwvaW1hZ2U+IGljb24uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QgYSBuYW1lIGZvciB0aGUgbG9nIGZpbGUgYW5kCi1zcGVjaWZ5IHdoZXJlIHlvdSB3YW50IGl0IHRvIGJlIHN0b3JlZC48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD4gVGhpcyBsb2cgZmlsZSB3aWxsIHNob3cgd2hldGhlciBvciBub3QgbWVzc2FnZXMgc2VudCB0byBhbmQgZnJvbQoteW91ciBXZWIgc2VydmljZSBhcmUgV1MtSSBjb21wbGlhbnQsIGFuZCBsaXN0IGFueSBub24tY29tcGxpYW50IGVsZW1lbnRzLgotWW91IGNhbiBvcGVuIHRoZSBsb2cgZmlsZSBpbiBhbiBYTUwgZWRpdG9yIHRvIGV4YW1pbmUgaXRzIGNvbnRlbnRzLjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1MtSTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNzFjYjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQXMgd2VsbCBhcyBzZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgZHVyaW5nIFdlYiBzZXJ2aWNlcyBjcmVhdGlvbiwgeW91IGNhbiB2YWxpZGF0ZSBXUy1JIGNvbXBsaWFuY2Ugb2YgdGhlIFNPQVAgdHJhZmZpYyBhIFdlYiBzZXJ2aWNlIHByb2R1Y2VzIHRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcyB3ZWxsIGFzIHNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBkdXJpbmcgV2ViIHNlcnZpY2VzIGNyZWF0aW9uLCB5b3UgY2FuIHZhbGlkYXRlIFdTLUkgY29tcGxpYW5jZSBvZiB0aGUgU09BUCB0cmFmZmljIGEgV2ViIHNlcnZpY2UgcHJvZHVjZXMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuIiAvPgotPG1ldGEgY29udGVudD0iV1MtSSwgdmFsaWRhdGluZywgV2ViIHNlcnZpY2VzLCB2YWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZSwgaW50ZXJvcGVyYWJpbGl0eSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTLUksIHZhbGlkYXRpbmcsIFdlYiBzZXJ2aWNlcywgdmFsaWRhdGluZyBXUy1JIGNvbXBsaWFuY2UsIGludGVyb3BlcmFiaWxpdHkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0d3NpdmFsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHdzaXZhbCI+PGEgbmFtZT0idHdzaXZhbCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+VmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZTwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+QXMgd2VsbCBhcyBzZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgZHVyaW5nIFdlYiBzZXJ2aWNlcwotY3JlYXRpb24sIHlvdSBjYW4gdmFsaWRhdGUgV1MtSSBjb21wbGlhbmNlIG9mIHRoZSBTT0FQIHRyYWZmaWMgYSBXZWIgc2VydmljZQotcHJvZHVjZXMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj4gUHJlcmVxdWlzaXRlczogQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSB2YWxpZGF0aW9uIHRvb2wgdG8gZW5zdXJlIHRoYXQKLXlvdXIgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIGlzIFdTLUkgY29tcGxpYW50LCB5b3UgbXVzdCBoYXZlIGNvbXBsZXRlZCB0aGUKLWZvbGxvd2luZyBzdGVwczo8dWw+Ci08bGk+R2VuZXJhdGUgYSBXZWIgc2VydmljZS48L2xpPgotCi08bGk+IDxhIGhyZWY9InR3c2RsdmFsLmh0bWwiPlZhbGlkYXRlIHRoZSBXU0RMIHRoYXQgaXMgcHJvZHVjZWQuPC9hPiA8L2xpPgotCi08bGk+R2VuZXJhdGUgYSBQcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idG1vbml0b3IuaHRtbCI+U2V0IHVwIHRoZSBUQ1AvSVAgTW9uaXRvci48L2E+IEVuc3VyZSB0aGF0Ci15b3VyIFdlYiBzZXJ2aWNlIHNhbXBsZSBhcHBsaWNhdGlvbiB0cmFmZmljIGlzIGRpcmVjdGVkIHRocm91Z2ggdGhlIFRDUC9JUAotTW9uaXRvci48L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHZhbGlkYXRlIHlvdXIgV2ViIHNlcnZpY2UsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbnZva2UgYSBtZXRob2QgaW4geW91ciBXZWIgc2VydmljZSBzYW1wbGUgYXBwbGljYXRpb24gdG8gZ2VuZXJhdGUKLXRyYWZmaWMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5UbyBlbnN1cmUgdGhhdCB5b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwKLXlvdSBjYW4gZ2VuZXJhdGUgYSBsb2cgZmlsZSBieSBjbGlja2luZyB0aGUgIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NpdmFsaWNvLmdpZiIgYWx0PSJWYWxpZGF0ZSBpY29uIiAvPiBpY29uLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIGRpYWxvZyBib3ggdGhhdCBvcGVucywgc2VsZWN0IGEgbmFtZSBmb3IgdGhlIGxvZyBmaWxlIGFuZAotc3BlY2lmeSB3aGVyZSB5b3Ugd2FudCBpdCB0byBiZSBzdG9yZWQuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPiBUaGlzIGxvZyBmaWxlIHdpbGwgc2hvdyB3aGV0aGVyIG9yIG5vdCBtZXNzYWdlcyBzZW50IHRvIGFuZCBmcm9tCi15b3VyIFdlYiBzZXJ2aWNlIGFyZSBXUy1JIGNvbXBsaWFudCwgYW5kIGxpc3QgYW55IG5vbi1jb21wbGlhbnQgZWxlbWVudHMuCi1Zb3UgY2FuIG9wZW4gdGhlIGxvZyBmaWxlIGluIGFuIFhNTCBlZGl0b3IgdG8gZXhhbWluZSBpdHMgY29udGVudHMuPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sIj5XUy1JPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCI+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvd3N3c2l0ZXN0X3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ5ODJjOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvd3N3c2l0ZXN0X3RvYy5kaXRhbWFwCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgbWFwIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIE1hcC8vRU4iICJtYXAuZHRkIj4KLTxtYXAgYW5jaG9ycmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcCN3c3dzaXRlc3QiCi1pZD0id3N3c2l0ZXN0IiB0aXRsZT0id3N3c2l0ZXN0Ij4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90d3NkbHZhbC5kaXRhIiBuYXZ0aXRsZT0iVmFsaWRhdGluZyBXU0RMIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Rtb25pdG9yLmRpdGEiIG5hdnRpdGxlPSJUZXN0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBUQ1AvSVAgTW9uaXRvciI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R3c2l2YWwuZGl0YSIgbmF2dGl0bGU9IlZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIG9mIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyI+Ci08L3RvcGljcmVmPgotPC9tYXA+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvd3N3c2l0ZXN0X3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvd3N3c2l0ZXN0X3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMDIwYWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3dzd3NpdGVzdF90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxpbmtfdG89Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwjd3N3c2l0ZXN0IiBsYWJlbD0id3N3c2l0ZXN0IiB0b3BpYz0idGFza3MvdHdzZGx2YWwuaHRtbCI+Ci08dG9waWMgbGFiZWw9IlZhbGlkYXRpbmcgV1NETCBmaWxlcyIgaHJlZj0idGFza3MvdHdzZGx2YWwuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJVc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXMiIGhyZWY9InRhc2tzL3Rtb25pdG9yLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iVmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIgaHJlZj0idGFza3MvdHdzaXZhbC5odG1sIi8+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWZmYTc4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjQ0ODBiLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzliZTMwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFdlYiBTZXJ2aWNlcyBDb3JlCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249V1NUIFdlYiBTZXJ2aWNlcyBjb3JlLgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZlZjM4Mi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4wLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZSIgdmVyc2lvbj0iMS4wLjEwMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUiIHZlcnNpb249IjEuMC4xMDIiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUiIHZlcnNpb249IjEuMC4xMDEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlciIgdmVyc2lvbj0iMS4wLjEwMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uIiB2ZXJzaW9uPSIyLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJqYXZheC53c2RsIiB2ZXJzaW9uPSIxLjQuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiB2ZXJzaW9uPSIxLjAuMTAxIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcyIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcyIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudCIgdmVyc2lvbj0iMS4wLjEwMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUiIHZlcnNpb249IjIuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiIHZlcnNpb249IjIuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnhzZCIgdmVyc2lvbj0iMi4zLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlciIgdmVyc2lvbj0iMS4xLjMwMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucyIgdmVyc2lvbj0iMy4zLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIiB2ZXJzaW9uPSIyLjIuMCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnhzZCIgdmVyc2lvbj0iMi4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmFwYWNoZS54ZXJjZXMiIHZlcnNpb249IjIuOC4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImNvbS5pYm0uaWN1IiB2ZXJzaW9uPSIzLjQuNCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuYXBhY2hlLmFudCIgdmVyc2lvbj0iMS42LjUiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlciIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24iIHZlcnNpb249IjEuMi4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZSIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzIiB2ZXJzaW9uPSIxLjAuMTAwIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImphdmF4LnhtbC5zb2FwIiB2ZXJzaW9uPSIxLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJqYXZheC5zZXJ2bGV0IiB2ZXJzaW9uPSIyLjQuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5vc2dpIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0iamF2YXgud3NkbCIgdmVyc2lvbj0iMS41LjEiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmciIHZlcnNpb249IjEuMC40IiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIgdmVyc2lvbj0iMy4zLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiIHZlcnNpb249IjMuMy4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgPC9yZXF1aXJlcz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24iCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMS4wLjQucXVhbGlmaWVyIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5sb2c0aiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIxLjIuMTMucXVhbGlmaWVyIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS53c2lsNGoiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcudWRkaTRqIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmRpc2NvdmVyeSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YXgueG1sLnJwYyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YXgueG1sLnNvYXAiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuYXhpcyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YXgubWFpbCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9ImphdmF4LmFjdGl2YXRpb24iCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmFiZmI0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQ5ZTlmLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID1cCi1lcGwtdjEwLmh0bWwsXAotZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi1mZWF0dXJlLnhtbCxcCi1mZWF0dXJlLnByb3BlcnRpZXMsXAotbGljZW5zZS5odG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJhZDI5Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJhOTRkNS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV1MgQ29yZSBEZXZlbG9wZXIgUmVzb3VyY2VzCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249U291cmNlIGNvZGUgemlwcyBmb3IgV1NUIFdTIGNvcmUuCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjNGE0OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPkp1bmUgMDYsIDIwMDc8L3A+Ci0KLTxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KLQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCi0gICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKLSAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgotICAgCi08aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCi0gICAKLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKLSAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi0gICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUwotICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0gICAKLTx1bD4KLQk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLQk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4gICAKLSAKLTxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCi1JbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgotCi08dWw+Ci0JPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+Ci0JPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KLQk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+Ci0JPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KLQk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Ci08L3VsPgotCQkKLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCi1pbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKLWluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgotdGhhdCBkaXJlY3RvcnkuPC9wPgotCi08cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+Ci0KLTx1bD4KLQk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgotCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKLQk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgotCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Ci0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5MTZkZi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotCi08cD5KdW5lIDA2LCAyMDA3PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTxoMz5Tb3VyY2UgQ29kZTwvaDM+Ci08cD5UaGlzIHBsdWctaW4gY29udGFpbnMgc291cmNlIGNvZGUgemlwIGZpbGVzICgmcXVvdDtTb3VyY2UgWmlwcyZxdW90OykgdGhhdCBjb3JyZXNwb25kIHRvIGJpbmFyeSBjb250ZW50IGluIG90aGVyIHBsdWctaW5zLiBUaGVzZSBTb3VyY2UgWmlwcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UKLWFncmVlbWVudHMgYW5kL29yIG5vdGljZXMuIERldGFpbHMgYWJvdXQgdGhlc2UgbGljZW5zZSBhZ3JlZW1lbnRzIGFuZCBub3RpY2VzIGFyZSBjb250YWluZWQgaW4gJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyBmaWxlcyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KSBsb2NhdGVkIGluIHN1Yi1kaXJlY3RvcmllcyBpbiB0aGUKLXNyYy8gZGlyZWN0b3J5IG9mIHRoaXMgcGx1Zy1pbi4gU3VjaCBBYm91dHMgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBTb3VyY2UgWmlwcyBpbiB0aGF0IGRpcmVjdG9yeSwgbm90IHRoZSBFUEwuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE1YTQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT13dHBfcHJvZDMyLnBuZwotCi0jIFByb3BlcnR5ICJhYm91dEltYWdlIiBjb250YWlucyBwYXRoIHRvIHByb2R1Y3QgaW1hZ2UgKDUwMHgzMzAgb3IgMTE1eDE2NCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiYXBwTmFtZSIgY29udGFpbnMgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gKG5vdCB0cmFuc2xhdGVkKQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGFnZSIgY29udGFpbnMgcGF0aCB0byB3ZWxjb21lIHBhZ2UgKHNwZWNpYWwgWE1MLWJhc2VkIGZvcm1hdCkKLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBlcnNwZWN0aXZlIiBjb250YWlucyB0aGUgaWQgb2YgdGhlIHBlcnNwZWN0aXZlIGluIHdoaWNoIHRoZQotIyB3ZWxjb21lIHBhZ2UgaXMgdG8gYmUgb3BlbmVkLgotIyBvcHRpb25hbAotCi0KLQotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmYjczNS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIGFib3V0Lm1hcHBpbmdzDQotIyBjb250YWlucyBmaWxsLWlucyBmb3IgYWJvdXQucHJvcGVydGllcw0KLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykNCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuDQotDQotMD1AYnVpbGRADQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTBkYTg1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotIwotIyBEbyBub3QgdHJhbnNsYXRlIGFueSB2YWx1ZXMgc3Vycm91bmRlZCBieSB7fQotCi1ibHVyYj1XZWIgU3RhbmRhcmQgVG9vbHMgLSBXZWIgU2VydmljZSBDb3JlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDUuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZDUxMmQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCB3dHBfcHJvZDMyLnBuZywgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEzOWQwZi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXBsdWdpbk5hbWU9V2ViIFN0YW5kYXJkIFRvb2xzIC0gV2ViIFNlcnZpY2UgQ29yZSBTb3VyY2UKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZmI0NGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmNlYWIzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODY2NzFkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1idWlsZC54bWwKLWZlYXR1cmVzCi1wbHVnaW5zCi1vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmVfMS4wLjAuYmluLmRpc3QuemlwCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZWJlZTcuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2ZjgwZi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwotCi1nZW5lcmF0ZS5mZWF0dXJlQG9yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLnNvdXJjZT1vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZSwgZmVhdHVyZUBvcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLnNvdXJjZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MDVjMjYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgU2VydmljZXMgUGx1Zy1pbiBEZXZlbG9wZXIgUmVzb3VyY2VzCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249U291cmNlIGNvZGUgemlwcyBmb3IgdGhlIFdTVCBXZWIgc2VydmljZXMgdG9vbHMKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWI4NmMwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLnNvdXJjZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ0NTk4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmQ1NmU0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmVfMS4wLjAuYmluLmRpc3QuemlwCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWUyMzU0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNiMzNhZC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOGU2OGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFdlYiBTZXJ2aWNlcyBUZXN0cwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBXZWIgc2VydmljZXMgdGVzdHMKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkZDVjOS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjMuMC4wLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTQ0ODdjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwM2E4YjAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQ3Njk0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2MDBlMC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV2ViIFNlcnZpY2VzIFVJCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249V2ViIFNlcnZpY2VzIFVJIHRvb2xzLgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWQwYWFkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjMuMC4wLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmhlbHAuYXBwc2VydmVyIiB2ZXJzaW9uPSIzLjEuMTAwIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uIiB2ZXJzaW9uPSIyLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUiIHZlcnNpb249IjIuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnhzZCIgdmVyc2lvbj0iMi4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiB2ZXJzaW9uPSIxLjAuMTAxIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlIiB2ZXJzaW9uPSIxLjAuMTAxIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSIgdmVyc2lvbj0iMS4wLjEwMSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cyIgdmVyc2lvbj0iMS4wLjEwMCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIiIHZlcnNpb249IjEuMC4xMDAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImphdmF4LndzZGwiIHZlcnNpb249IjEuNC4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5hcGFjaGUud3NpbDRqIiB2ZXJzaW9uPSIxLjAuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcudWRkaTRqIiB2ZXJzaW9uPSIyLjAuNCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuYXBhY2hlLmF4aXMiIHZlcnNpb249IjEuNC4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcyIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLnVpIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50IiB2ZXJzaW9uPSIxLjAuMTAwIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImNvbS5pYm0uaWN1IiB2ZXJzaW9uPSIzLjQuNCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MudWkiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5qZXR0eSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVxdWlub3guanNwLmphc3Blci5yZWdpc3RyeSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImphdmF4LnNlcnZsZXQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2VzIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkuaWRlIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5nZWYiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpmYWNlIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZmFjZS50ZXh0IiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS52aWV3cyIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aSIgdmVyc2lvbj0iMS4wLjEwMSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24udWkiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZSIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aSIgdmVyc2lvbj0iMS4wLjEwMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54c2QudWkiIHZlcnNpb249IjEuMi4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lZGl0IiB2ZXJzaW9uPSIyLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWRpdC51aSIgdmVyc2lvbj0iMi4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24iIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24iIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmciIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5hcGFjaGUueGVyY2VzIiB2ZXJzaW9uPSIyLjguMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZCIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiB2ZXJzaW9uPSIxLjAuMTAyIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cy51aSIgdmVyc2lvbj0iMS4wLjEwMSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnNlYXJjaCIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpIiB2ZXJzaW9uPSIxLjAuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW0iIHZlcnNpb249IjEuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSIgdmVyc2lvbj0iMS4wLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZGVidWcuY29yZSIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzaSIgdmVyc2lvbj0iMS4wLjEwMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlIiB2ZXJzaW9uPSIxLjAuMTAyIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpIiB2ZXJzaW9uPSIxLjAuMTAyIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIgdmVyc2lvbj0iMy4zLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5IiB2ZXJzaW9uPSIxLjAuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zd3QiIHZlcnNpb249IjMuMy4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpmYWNlIiB2ZXJzaW9uPSIzLjMuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIgdmVyc2lvbj0iMy4zLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiIHZlcnNpb249IjMuMy4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMiIHZlcnNpb249IjMuMy4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLmZvcm1zIiB2ZXJzaW9uPSIzLjMuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MiIHZlcnNpb249IjEuMC4xMDEiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICA8L3JlcXVpcmVzPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzaS51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ0NTk4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NjMjI5Mi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPVwKLWVwbC12MTAuaHRtbCxcCi1lY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLWZlYXR1cmUueG1sLFwKLWZlYXR1cmUucHJvcGVydGllcyxcCi1saWNlbnNlLmh0bWwKLQotZ2VuZXJhdGUuZmVhdHVyZUBvcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLnNvdXJjZSA9IG9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJhZDI5Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1MzIyMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFdTIFVJIERldmVsb3BlciBSZXNvdXJjZXMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1Tb3VyY2UgY29kZSB6aXBzIGZvciBXU1QgV1MgVUkuCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM0YTQ4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPkp1bmUgMDYsIDIwMDc8L3A+Ci0KLTxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KLQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCi0gICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKLSAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgotICAgCi08aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCi0gICAKLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKLSAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi0gICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUwotICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0gICAKLTx1bD4KLQk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLQk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4gICAKLSAKLTxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCi1JbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgotCi08dWw+Ci0JPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+Ci0JPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KLQk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+Ci0JPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KLQk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Ci08L3VsPgotCQkKLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCi1pbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKLWluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgotdGhhdCBkaXJlY3RvcnkuPC9wPgotCi08cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+Ci0KLTx1bD4KLQk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgotCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKLQk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgotCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Ci0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDkxNmRmLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotCi08cD5KdW5lIDA2LCAyMDA3PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTxoMz5Tb3VyY2UgQ29kZTwvaDM+Ci08cD5UaGlzIHBsdWctaW4gY29udGFpbnMgc291cmNlIGNvZGUgemlwIGZpbGVzICgmcXVvdDtTb3VyY2UgWmlwcyZxdW90OykgdGhhdCBjb3JyZXNwb25kIHRvIGJpbmFyeSBjb250ZW50IGluIG90aGVyIHBsdWctaW5zLiBUaGVzZSBTb3VyY2UgWmlwcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UKLWFncmVlbWVudHMgYW5kL29yIG5vdGljZXMuIERldGFpbHMgYWJvdXQgdGhlc2UgbGljZW5zZSBhZ3JlZW1lbnRzIGFuZCBub3RpY2VzIGFyZSBjb250YWluZWQgaW4gJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyBmaWxlcyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KSBsb2NhdGVkIGluIHN1Yi1kaXJlY3RvcmllcyBpbiB0aGUKLXNyYy8gZGlyZWN0b3J5IG9mIHRoaXMgcGx1Zy1pbi4gU3VjaCBBYm91dHMgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBTb3VyY2UgWmlwcyBpbiB0aGF0IGRpcmVjdG9yeSwgbm90IHRoZSBFUEwuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTVhNDAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT13dHBfcHJvZDMyLnBuZwotCi0jIFByb3BlcnR5ICJhYm91dEltYWdlIiBjb250YWlucyBwYXRoIHRvIHByb2R1Y3QgaW1hZ2UgKDUwMHgzMzAgb3IgMTE1eDE2NCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiYXBwTmFtZSIgY29udGFpbnMgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gKG5vdCB0cmFuc2xhdGVkKQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGFnZSIgY29udGFpbnMgcGF0aCB0byB3ZWxjb21lIHBhZ2UgKHNwZWNpYWwgWE1MLWJhc2VkIGZvcm1hdCkKLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBlcnNwZWN0aXZlIiBjb250YWlucyB0aGUgaWQgb2YgdGhlIHBlcnNwZWN0aXZlIGluIHdoaWNoIHRoZQotIyB3ZWxjb21lIHBhZ2UgaXMgdG8gYmUgb3BlbmVkLgotIyBvcHRpb25hbAotCi0KLQotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGZiNzM1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIGFib3V0Lm1hcHBpbmdzDQotIyBjb250YWlucyBmaWxsLWlucyBmb3IgYWJvdXQucHJvcGVydGllcw0KLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykNCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuDQotDQotMD1AYnVpbGRADQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzOTc4N2EuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotIwotIyBEbyBub3QgdHJhbnNsYXRlIGFueSB2YWx1ZXMgc3Vycm91bmRlZCBieSB7fQotCi1ibHVyYj1XZWIgU3RhbmRhcmQgVG9vbHMgLSBXZWIgU2VydmljZSBVSVxuXAotXG5cCi1WZXJzaW9uOiB7ZmVhdHVyZVZlcnNpb259XG5cCi1CdWlsZCBpZDogezB9XG5cCi1cblwKLShjKSBDb3B5cmlnaHQgRWNsaXBzZSBjb250cmlidXRvcnMgYW5kIG90aGVycyAyMDA1LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYTU3NWMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCB3dHBfcHJvZDMyLnBuZywgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2E2NTQ1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXBsdWdpbk5hbWU9V2ViIFN0YW5kYXJkIFRvb2xzIC0gV2ViIFNlcnZpY2UgVUkgU291cmNlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZmI0NGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmNlYWIzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWVmZjU2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotYnVpbGQueG1sCi1vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlXzEuMC4wLmphcgotb3JnLmVjbGlwc2Uud3N0LnhtbF91c2VyZG9jLmZlYXR1cmVfMS4wLjAuamFyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1Njc1ZS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0NzY5NC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYTU4NWMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV2ViIFNlcnZpY2VzIFVzZXIgRG9jdW1lbnRhdGlvbgotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBXZWIgc2VydmljZXMgdXNlciBkb2N1bWVudGF0aW9uCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWY2YjJhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjMuMC4wLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ0NTk4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMDUwYzguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMzg2ZjcuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBEZWMgMTcgMTc6MzY6NTkgRVNUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I1MDI2MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YWMyZWIuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTREwgMS41IEZlYXR1cmUKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1XU0RMIDEuNSBGZWF0dXJlCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUsIDIwMDhcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0YTEyMi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3Nfd3NkbDE1LmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMS41LjEucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSIgICAgICAKLSAgICAgIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0IgotICAgICAgaW1hZ2U9ImVjbGlwc2VfdXBkYXRlXzEyMC5qcGciPgotICAgCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0gICAKLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJqYXZheC53c2RsIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjEuNS4xLnF1YWxpZmllciIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c193c2RsMTUuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YWJmYjQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3dzZGwxNS5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyODk4Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXN0cyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Nzc2M2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi10ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJlN2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZGIxMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jVGh1IE1heSAzMSAxNDoyODozMyBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWluc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzcwNDAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQxOjM5IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMDczMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4xMDIucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS5qc3Qud3MsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0LmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmVhYzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZGF0YS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVzdC5qYXIKLWphcnMuY29tcGlsZS5vcmRlciA9IHRlc3QuamFyCi1vdXRwdXQudGVzdC5qYXIgPSBiaW4vCi1zb3VyY2UudGVzdC5qYXIgPSB0ZXN0cy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZVByb3h5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VQcm94eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjdhNDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZVByb3h5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBBcmVhU2VydmljZVByb3h5IGltcGxlbWVudHMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgewotICBwcml2YXRlIFN0cmluZyBfZW5kcG9pbnQgPSBudWxsOwotICBwcml2YXRlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGFyZWFTZXJ2aWNlX1BvcnRUeXBlID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBBcmVhU2VydmljZVByb3h5KCkgewotICAgIF9pbml0QXJlYVNlcnZpY2VQcm94eSgpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgX2luaXRBcmVhU2VydmljZVByb3h5KCkgewotICAgIHRyeSB7Ci0gICAgICBhcmVhU2VydmljZV9Qb3J0VHlwZSA9IChuZXcgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IoKSkuZ2V0QXJlYVNlcnZpY2VTT0FQKCk7Ci0gICAgICBpZiAoYXJlYVNlcnZpY2VfUG9ydFR5cGUgIT0gbnVsbCkgewotICAgICAgICBpZiAoX2VuZHBvaW50ICE9IG51bGwpCi0gICAgICAgICAgKChqYXZheC54bWwucnBjLlN0dWIpYXJlYVNlcnZpY2VfUG9ydFR5cGUpLl9zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiLCBfZW5kcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgX2VuZHBvaW50ID0gKFN0cmluZykoKGphdmF4LnhtbC5ycGMuU3R1YilhcmVhU2VydmljZV9Qb3J0VHlwZSkuX2dldFByb3BlcnR5KCJqYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzcyIpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIGNhdGNoIChqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gc2VydmljZUV4Y2VwdGlvbikge30KLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpIHsKLSAgICByZXR1cm4gX2VuZHBvaW50OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChTdHJpbmcgZW5kcG9pbnQpIHsKLSAgICBfZW5kcG9pbnQgPSBlbmRwb2ludDsKLSAgICBpZiAoYXJlYVNlcnZpY2VfUG9ydFR5cGUgIT0gbnVsbCkKLSAgICAgICgoamF2YXgueG1sLnJwYy5TdHViKWFyZWFTZXJ2aWNlX1BvcnRUeXBlKS5fc2V0UHJvcGVydHkoImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzIiwgX2VuZHBvaW50KTsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlX1BvcnRUeXBlKCkgewotICAgIGlmIChhcmVhU2VydmljZV9Qb3J0VHlwZSA9PSBudWxsKQotICAgICAgX2luaXRBcmVhU2VydmljZVByb3h5KCk7Ci0gICAgcmV0dXJuIGFyZWFTZXJ2aWNlX1BvcnRUeXBlOwotICB9Ci0gIAotICBwdWJsaWMgZmxvYXQgY2FsY3VsYXRlUmVjdEFyZWEob3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuRGltZW5zaW9ucyBwYXJhbWV0ZXJzKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uewotICAgIGlmIChhcmVhU2VydmljZV9Qb3J0VHlwZSA9PSBudWxsKQotICAgICAgX2luaXRBcmVhU2VydmljZVByb3h5KCk7Ci0gICAgcmV0dXJuIGFyZWFTZXJ2aWNlX1BvcnRUeXBlLmNhbGN1bGF0ZVJlY3RBcmVhKHBhcmFtZXRlcnMpOwotICB9Ci0gIAotICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VTT0FQU3R1Yi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlU09BUFN0dWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFlYjkyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VTT0FQU3R1Yi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBBcmVhU2VydmljZVNPQVBTdHViLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgQXJlYVNlcnZpY2VTT0FQU3R1YiBleHRlbmRzIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1YiBpbXBsZW1lbnRzIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIHsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyQ2xhc3NlcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZFNlclFOYW1lcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZFNlckZhY3RvcmllcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZERlc2VyRmFjdG9yaWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLQotICAgIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzYyBbXSBfb3BlcmF0aW9uczsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIF9vcGVyYXRpb25zID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjWzFdOwotICAgICAgICBfaW5pdE9wZXJhdGlvbkRlc2MxKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBfaW5pdE9wZXJhdGlvbkRlc2MxKCl7Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjIG9wZXI7Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjIHBhcmFtOwotICAgICAgICBvcGVyID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjKCk7Ci0gICAgICAgIG9wZXIuc2V0TmFtZSgiQ2FsY3VsYXRlUmVjdEFyZWEiKTsKLSAgICAgICAgcGFyYW0gPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAicGFyYW1ldGVycyIpLCBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYy5JTiwgbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAiZGltZW5zaW9ucyIpLCBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zLmNsYXNzLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBvcGVyLmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuQ2xhc3MoZmxvYXQuY2xhc3MpOwotICAgICAgICBvcGVyLnNldFJldHVyblFOYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgImFyZWEiKSk7Ci0gICAgICAgIG9wZXIuc2V0U3R5bGUob3JnLmFwYWNoZS5heGlzLmNvbnN0YW50cy5TdHlsZS5ET0NVTUVOVCk7Ci0gICAgICAgIG9wZXIuc2V0VXNlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuVXNlLkxJVEVSQUwpOwotICAgICAgICBfb3BlcmF0aW9uc1swXSA9IG9wZXI7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgQXJlYVNlcnZpY2VTT0FQU3R1YigpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgIHRoaXMobnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIEFyZWFTZXJ2aWNlU09BUFN0dWIoamF2YS5uZXQuVVJMIGVuZHBvaW50VVJMLCBqYXZheC54bWwucnBjLlNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgewotICAgICAgICAgdGhpcyhzZXJ2aWNlKTsKLSAgICAgICAgIHN1cGVyLmNhY2hlZEVuZHBvaW50ID0gZW5kcG9pbnRVUkw7Ci0gICAgfQotCi0gICAgcHVibGljIEFyZWFTZXJ2aWNlU09BUFN0dWIoamF2YXgueG1sLnJwYy5TZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgewotICAgICAgICAgICAgc3VwZXIuc2VydmljZSA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2UoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN1cGVyLnNlcnZpY2UgPSBzZXJ2aWNlOwotICAgICAgICB9Ci0gICAgICAgICgob3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlKXN1cGVyLnNlcnZpY2UpLnNldFR5cGVNYXBwaW5nVmVyc2lvbigiMS4yIik7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgY2xzOwotICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBxTmFtZTsKLSAgICAgICAgICAgIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcU5hbWUyOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGJlYW5zZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuQmVhblNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGJlYW5kZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuQmVhbkRlc2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgZW51bXNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5FbnVtU2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgZW51bWRmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5FbnVtRGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBhcnJheXNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5BcnJheVNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGFycmF5ZGYgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkFycmF5RGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBzaW1wbGVzZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuU2ltcGxlU2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2ltcGxlZGYgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLlNpbXBsZURlc2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2ltcGxlbGlzdHNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5TaW1wbGVMaXN0U2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2ltcGxlbGlzdGRmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5TaW1wbGVMaXN0RGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIHFOYW1lID0gbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAiZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgY2FjaGVkU2VyUU5hbWVzLmFkZChxTmFtZSk7Ci0gICAgICAgICAgICBjbHMgPSBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zLmNsYXNzOwotICAgICAgICAgICAgY2FjaGVkU2VyQ2xhc3Nlcy5hZGQoY2xzKTsKLSAgICAgICAgICAgIGNhY2hlZFNlckZhY3Rvcmllcy5hZGQoYmVhbnNmKTsKLSAgICAgICAgICAgIGNhY2hlZERlc2VyRmFjdG9yaWVzLmFkZChiZWFuZGYpOwotCi0gICAgfQotCi0gICAgcHJvdGVjdGVkIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBjcmVhdGVDYWxsKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBzdXBlci5fY3JlYXRlQ2FsbCgpOwotICAgICAgICAgICAgaWYgKHN1cGVyLm1haW50YWluU2Vzc2lvblNldCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldE1haW50YWluU2Vzc2lvbihzdXBlci5tYWludGFpblNlc3Npb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFVzZXJuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRVc2VybmFtZShzdXBlci5jYWNoZWRVc2VybmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkUGFzc3dvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFBhc3N3b3JkKHN1cGVyLmNhY2hlZFBhc3N3b3JkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHN1cGVyLmNhY2hlZEVuZHBvaW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRUaW1lb3V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRUaW1lb3V0KHN1cGVyLmNhY2hlZFRpbWVvdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFBvcnROYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRQb3J0TmFtZShzdXBlci5jYWNoZWRQb3J0TmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24ga2V5cyA9IHN1cGVyLmNhY2hlZFByb3BlcnRpZXMua2V5cygpOwotICAgICAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleSA9IChqYXZhLmxhbmcuU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkoa2V5LCBzdXBlci5jYWNoZWRQcm9wZXJ0aWVzLmdldChrZXkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEFsbCB0aGUgdHlwZSBtYXBwaW5nIGluZm9ybWF0aW9uIGlzIHJlZ2lzdGVyZWQKLSAgICAgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IGNhbGwgaXMgbWFkZS4KLSAgICAgICAgICAgIC8vIFRoZSB0eXBlIG1hcHBpbmcgaW5mb3JtYXRpb24gaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCBpbgotICAgICAgICAgICAgLy8gdGhlIFR5cGVNYXBwaW5nUmVnaXN0cnkgb2YgdGhlIHNlcnZpY2UsIHdoaWNoCi0gICAgICAgICAgICAvLyBpcyB0aGUgcmVhc29uIHdoeSByZWdpc3RyYXRpb24gaXMgb25seSBuZWVkZWQgZm9yIHRoZSBmaXJzdCBjYWxsLgotICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2FsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG11c3Qgc2V0IGVuY29kaW5nIHN0eWxlIGJlZm9yZSByZWdpc3RlcmluZyBzZXJpYWxpemVycwotICAgICAgICAgICAgICAgICAgICBfY2FsbC5zZXRFbmNvZGluZ1N0eWxlKG51bGwpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhY2hlZFNlckZhY3Rvcmllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGNscyA9IChqYXZhLmxhbmcuQ2xhc3MpIGNhY2hlZFNlckNsYXNzZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBxTmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSBjYWNoZWRTZXJRTmFtZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCB4ID0gY2FjaGVkU2VyRmFjdG9yaWVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4IGluc3RhbmNlb2YgQ2xhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3Mgc2YgPSAoamF2YS5sYW5nLkNsYXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkU2VyRmFjdG9yaWVzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgZGYgPSAoamF2YS5sYW5nLkNsYXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkRGVzZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWxsLnJlZ2lzdGVyVHlwZU1hcHBpbmcoY2xzLCBxTmFtZSwgc2YsIGRmLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4IGluc3RhbmNlb2YgamF2YXgueG1sLnJwYy5lbmNvZGluZy5TZXJpYWxpemVyRmFjdG9yeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5TZXJpYWxpemVyRmFjdG9yeSBzZiA9IChvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuU2VyaWFsaXplckZhY3RvcnkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRTZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5EZXNlcmlhbGl6ZXJGYWN0b3J5IGRmID0gKG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5EZXNlcmlhbGl6ZXJGYWN0b3J5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkRGVzZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWxsLnJlZ2lzdGVyVHlwZU1hcHBpbmcoY2xzLCBxTmFtZSwgc2YsIGRmLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gX2NhbGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubGFuZy5UaHJvd2FibGUgX3QpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0KCJGYWlsdXJlIHRyeWluZyB0byBnZXQgdGhlIENhbGwgb2JqZWN0IiwgX3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZsb2F0IGNhbGN1bGF0ZVJlY3RBcmVhKG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkRpbWVuc2lvbnMgcGFyYW1ldGVycykgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgb3JnLmFwYWNoZS5heGlzLk5vRW5kUG9pbnRFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBjcmVhdGVDYWxsKCk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbihfb3BlcmF0aW9uc1swXSk7Ci0gICAgICAgIF9jYWxsLnNldFVzZVNPQVBBY3Rpb24odHJ1ZSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBBY3Rpb25VUkkoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS9OZXdPcGVyYXRpb24iKTsKLSAgICAgICAgX2NhbGwuc2V0RW5jb2RpbmdTdHlsZShudWxsKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsLlNFTkRfVFlQRV9BVFRSLCBCb29sZWFuLkZBTFNFKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLkF4aXNFbmdpbmUuUFJPUF9ET01VTFRJUkVGUywgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBWZXJzaW9uKG9yZy5hcGFjaGUuYXhpcy5zb2FwLlNPQVBDb25zdGFudHMuU09BUDExX0NPTlNUQU5UUyk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbk5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoIiIsICJDYWxjdWxhdGVSZWN0QXJlYSIpKTsKLQotICAgICAgICBzZXRSZXF1ZXN0SGVhZGVycyhfY2FsbCk7Ci0gICAgICAgIHNldEF0dGFjaG1lbnRzKF9jYWxsKTsKLSB0cnkgeyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBfcmVzcCA9IF9jYWxsLmludm9rZShuZXcgamF2YS5sYW5nLk9iamVjdFtdIHtwYXJhbWV0ZXJzfSk7Ci0KLSAgICAgICAgaWYgKF9yZXNwIGluc3RhbmNlb2YgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvdyAoamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uKV9yZXNwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZXh0cmFjdEF0dGFjaG1lbnRzKF9jYWxsKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoamF2YS5sYW5nLkZsb2F0KSBfcmVzcCkuZmxvYXRWYWx1ZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBfZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoamF2YS5sYW5nLkZsb2F0KSBvcmcuYXBhY2hlLmF4aXMudXRpbHMuSmF2YVV0aWxzLmNvbnZlcnQoX3Jlc3AsIGZsb2F0LmNsYXNzKSkuZmxvYXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gIH0gY2F0Y2ggKG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgYXhpc0ZhdWx0RXhjZXB0aW9uKSB7Ci0gIHRocm93IGF4aXNGYXVsdEV4Y2VwdGlvbjsKLX0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9Qb3J0VHlwZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1BvcnRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNjVmNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1BvcnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQXJlYVNlcnZpY2VfUG9ydFR5cGUuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQXJlYVNlcnZpY2VfUG9ydFR5cGUgZXh0ZW5kcyBqYXZhLnJtaS5SZW1vdGUgewotICAgIHB1YmxpYyBmbG9hdCBjYWxjdWxhdGVSZWN0QXJlYShvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zIHBhcmFtZXRlcnMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfU2VydmljZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQwOTMyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIEFyZWFTZXJ2aWNlX1NlcnZpY2UuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQXJlYVNlcnZpY2VfU2VydmljZSBleHRlbmRzIGphdmF4LnhtbC5ycGMuU2VydmljZSB7Ci0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0QXJlYVNlcnZpY2VTT0FQQWRkcmVzcygpOwotCi0gICAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlU09BUCgpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb247Ci0KLSAgICBwdWJsaWMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgZ2V0QXJlYVNlcnZpY2VTT0FQKGphdmEubmV0LlVSTCBwb3J0QWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZGZjMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIEFyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IgZXh0ZW5kcyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2UgaW1wbGVtZW50cyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9TZXJ2aWNlIHsKLQotICAgIHB1YmxpYyBBcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvcigpIHsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBBcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvcihvcmcuYXBhY2hlLmF4aXMuRW5naW5lQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgc3VwZXIoY29uZmlnKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IoamF2YS5sYW5nLlN0cmluZyB3c2RsTG9jLCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHNOYW1lKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIod3NkbExvYywgc05hbWUpOwotICAgIH0KLQotICAgIC8vIFVzZSB0byBnZXQgYSBwcm94eSBjbGFzcyBmb3IgQXJlYVNlcnZpY2VTT0FQCi0gICAgcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9BcmVhUHJvai9zZXJ2aWNlcy9BcmVhU2VydmljZVNPQVAiOwotCi0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0QXJlYVNlcnZpY2VTT0FQQWRkcmVzcygpIHsKLSAgICAgICAgcmV0dXJuIEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzOwotICAgIH0KLQotICAgIC8vIFRoZSBXU0REIHNlcnZpY2UgbmFtZSBkZWZhdWx0cyB0byB0aGUgcG9ydCBuYW1lLgotICAgIHByaXZhdGUgamF2YS5sYW5nLlN0cmluZyBBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUgPSAiQXJlYVNlcnZpY2VTT0FQIjsKLQotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB7Ci0gICAgICAgIEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlU09BUCgpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgIGphdmEubmV0LlVSTCBlbmRwb2ludDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGVuZHBvaW50ID0gbmV3IGphdmEubmV0LlVSTChBcmVhU2VydmljZVNPQVBfYWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBnZXRBcmVhU2VydmljZVNPQVAoZW5kcG9pbnQpOwotICAgIH0KLQotICAgIHB1YmxpYyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZSBnZXRBcmVhU2VydmljZVNPQVAoamF2YS5uZXQuVVJMIHBvcnRBZGRyZXNzKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlU09BUFN0dWIgX3N0dWIgPSBuZXcgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VTT0FQU3R1Yihwb3J0QWRkcmVzcywgdGhpcyk7Ci0gICAgICAgICAgICBfc3R1Yi5zZXRQb3J0TmFtZShnZXRBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgZSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBcmVhU2VydmljZVNPQVBFbmRwb2ludEFkZHJlc3MoamF2YS5sYW5nLlN0cmluZyBhZGRyZXNzKSB7Ci0gICAgICAgIEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzID0gYWRkcmVzczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgdGhlIGdpdmVuIGludGVyZmFjZSwgZ2V0IHRoZSBzdHViIGltcGxlbWVudGF0aW9uLgotICAgICAqIElmIHRoaXMgc2VydmljZSBoYXMgbm8gcG9ydCBmb3IgdGhlIGdpdmVuIGludGVyZmFjZSwKLSAgICAgKiB0aGVuIFNlcnZpY2VFeGNlcHRpb24gaXMgdGhyb3duLgotICAgICAqLwotICAgIHB1YmxpYyBqYXZhLnJtaS5SZW1vdGUgZ2V0UG9ydChDbGFzcyBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKSkgewotICAgICAgICAgICAgICAgIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlU09BUFN0dWIgX3N0dWIgPSBuZXcgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VTT0FQU3R1YihuZXcgamF2YS5uZXQuVVJMKEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzKSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgX3N0dWIuc2V0UG9ydE5hbWUoZ2V0QXJlYVNlcnZpY2VTT0FQV1NERFNlcnZpY2VOYW1lKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBfc3R1YjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoamF2YS5sYW5nLlRocm93YWJsZSB0KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKHQpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24oIlRoZXJlIGlzIG5vIHN0dWIgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBpbnRlcmZhY2U6ICAiICsgKHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSA9PSBudWxsID8gIm51bGwiIDogc2VydmljZUVuZHBvaW50SW50ZXJmYWNlLmdldE5hbWUoKSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLCBnZXQgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24uCi0gICAgICogSWYgdGhpcyBzZXJ2aWNlIGhhcyBubyBwb3J0IGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLAotICAgICAqIHRoZW4gU2VydmljZUV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgICovCi0gICAgcHVibGljIGphdmEucm1pLlJlbW90ZSBnZXRQb3J0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcG9ydE5hbWUsIENsYXNzIHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChwb3J0TmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0UG9ydChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpOwotICAgICAgICB9Ci0gICAgICAgIGphdmEubGFuZy5TdHJpbmcgaW5wdXRQb3J0TmFtZSA9IHBvcnROYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICBpZiAoIkFyZWFTZXJ2aWNlU09BUCIuZXF1YWxzKGlucHV0UG9ydE5hbWUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0QXJlYVNlcnZpY2VTT0FQKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAgewotICAgICAgICAgICAgamF2YS5ybWkuUmVtb3RlIF9zdHViID0gZ2V0UG9ydChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpOwotICAgICAgICAgICAgKChvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlN0dWIpIF9zdHViKS5zZXRQb3J0TmFtZShwb3J0TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBnZXRTZXJ2aWNlTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgIkFyZWFTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuSGFzaFNldCBwb3J0cyA9IG51bGw7Ci0KLSAgICBwdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yIGdldFBvcnRzKCkgewotICAgICAgICBpZiAocG9ydHMgPT0gbnVsbCkgewotICAgICAgICAgICAgcG9ydHMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKLSAgICAgICAgICAgIHBvcnRzLmFkZChuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJBcmVhU2VydmljZVNPQVAiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXQgdGhlIGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgcG9ydCBuYW1lLgotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnRBZGRyZXNzKGphdmEubGFuZy5TdHJpbmcgcG9ydE5hbWUsIGphdmEubGFuZy5TdHJpbmcgYWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAotaWYgKCJBcmVhU2VydmljZVNPQVAiLmVxdWFscyhwb3J0TmFtZSkpIHsKLSAgICAgICAgICAgIHNldEFyZWFTZXJ2aWNlU09BUEVuZHBvaW50QWRkcmVzcyhhZGRyZXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIAoteyAvLyBVbmtub3duIFBvcnQgTmFtZQotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbigiIENhbm5vdCBzZXQgRW5kcG9pbnQgQWRkcmVzcyBmb3IgVW5rbm93biBQb3J0IiArIHBvcnROYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0IHRoZSBlbmRwb2ludCBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIHBvcnQgbmFtZS4KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50QWRkcmVzcyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHBvcnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBzZXRFbmRwb2ludEFkZHJlc3MocG9ydE5hbWUuZ2V0TG9jYWxQYXJ0KCksIGFkZHJlc3MpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0RpbWVuc2lvbnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9EaW1lbnNpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMTBmOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0RpbWVuc2lvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogRGltZW5zaW9ucy5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSBvcmcudGVtcHVyaS5BcmVhU2VydmljZTsKLQotcHVibGljIGNsYXNzIERpbWVuc2lvbnMgIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIHByaXZhdGUgZmxvYXQgd2lkdGg7Ci0gICAgcHJpdmF0ZSBmbG9hdCBoZWlnaHQ7Ci0KLSAgICBwdWJsaWMgRGltZW5zaW9ucygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGltZW5zaW9ucygKLSAgICAgICAgICAgZmxvYXQgd2lkdGgsCi0gICAgICAgICAgIGZsb2F0IGhlaWdodCkgewotICAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgd2lkdGggdmFsdWUgZm9yIHRoaXMgRGltZW5zaW9ucy4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIHdpZHRoCi0gICAgICovCi0gICAgcHVibGljIGZsb2F0IGdldFdpZHRoKCkgewotICAgICAgICByZXR1cm4gd2lkdGg7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB3aWR0aCB2YWx1ZSBmb3IgdGhpcyBEaW1lbnNpb25zLgotICAgICAqIAotICAgICAqIEBwYXJhbSB3aWR0aAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7Ci0gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGhlaWdodCB2YWx1ZSBmb3IgdGhpcyBEaW1lbnNpb25zLgotICAgICAqIAotICAgICAqIEByZXR1cm4gaGVpZ2h0Ci0gICAgICovCi0gICAgcHVibGljIGZsb2F0IGdldEhlaWdodCgpIHsKLSAgICAgICAgcmV0dXJuIGhlaWdodDsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGhlaWdodCB2YWx1ZSBmb3IgdGhpcyBEaW1lbnNpb25zLgotICAgICAqIAotICAgICAqIEBwYXJhbSBoZWlnaHQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRIZWlnaHQoZmxvYXQgaGVpZ2h0KSB7Ci0gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIH0KLQotICAgIHByaXZhdGUgamF2YS5sYW5nLk9iamVjdCBfX2VxdWFsc0NhbGMgPSBudWxsOwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBlcXVhbHMoamF2YS5sYW5nLk9iamVjdCBvYmopIHsKLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRGltZW5zaW9ucykpIHJldHVybiBmYWxzZTsKLSAgICAgICAgRGltZW5zaW9ucyBvdGhlciA9IChEaW1lbnNpb25zKSBvYmo7Ci0gICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodGhpcyA9PSBvYmopIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoX19lcXVhbHNDYWxjICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAoX19lcXVhbHNDYWxjID09IG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgX19lcXVhbHNDYWxjID0gb2JqOwotICAgICAgICBib29sZWFuIF9lcXVhbHM7Ci0gICAgICAgIF9lcXVhbHMgPSB0cnVlICYmIAotICAgICAgICAgICAgdGhpcy53aWR0aCA9PSBvdGhlci5nZXRXaWR0aCgpICYmCi0gICAgICAgICAgICB0aGlzLmhlaWdodCA9PSBvdGhlci5nZXRIZWlnaHQoKTsKLSAgICAgICAgX19lcXVhbHNDYWxjID0gbnVsbDsKLSAgICAgICAgcmV0dXJuIF9lcXVhbHM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIF9faGFzaENvZGVDYWxjID0gZmFsc2U7Ci0gICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICAgIGlmIChfX2hhc2hDb2RlQ2FsYykgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgX19oYXNoQ29kZUNhbGMgPSB0cnVlOwotICAgICAgICBpbnQgX2hhc2hDb2RlID0gMTsKLSAgICAgICAgX2hhc2hDb2RlICs9IG5ldyBGbG9hdChnZXRXaWR0aCgpKS5oYXNoQ29kZSgpOwotICAgICAgICBfaGFzaENvZGUgKz0gbmV3IEZsb2F0KGdldEhlaWdodCgpKS5oYXNoQ29kZSgpOwotICAgICAgICBfX2hhc2hDb2RlQ2FsYyA9IGZhbHNlOwotICAgICAgICByZXR1cm4gX2hhc2hDb2RlOwotICAgIH0KLQotICAgIC8vIFR5cGUgbWV0YWRhdGEKLSAgICBwcml2YXRlIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uVHlwZURlc2MgdHlwZURlc2MgPQotICAgICAgICBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlR5cGVEZXNjKERpbWVuc2lvbnMuY2xhc3MsIHRydWUpOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgdHlwZURlc2Muc2V0WG1sVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJkaW1lbnNpb25zIikpOwotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uRWxlbWVudERlc2MgZWxlbUZpZWxkID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5FbGVtZW50RGVzYygpOwotICAgICAgICBlbGVtRmllbGQuc2V0RmllbGROYW1lKCJ3aWR0aCIpOwotICAgICAgICBlbGVtRmllbGQuc2V0WG1sTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiIiwgIndpZHRoIikpOwotICAgICAgICBlbGVtRmllbGQuc2V0WG1sVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXROaWxsYWJsZShmYWxzZSk7Ci0gICAgICAgIHR5cGVEZXNjLmFkZEZpZWxkRGVzYyhlbGVtRmllbGQpOwotICAgICAgICBlbGVtRmllbGQgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLkVsZW1lbnREZXNjKCk7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXRGaWVsZE5hbWUoImhlaWdodCIpOwotICAgICAgICBlbGVtRmllbGQuc2V0WG1sTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiIiwgImhlaWdodCIpKTsKLSAgICAgICAgZWxlbUZpZWxkLnNldFhtbFR5cGUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IikpOwotICAgICAgICBlbGVtRmllbGQuc2V0TmlsbGFibGUoZmFsc2UpOwotICAgICAgICB0eXBlRGVzYy5hZGRGaWVsZERlc2MoZWxlbUZpZWxkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdHlwZSBtZXRhZGF0YSBvYmplY3QKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5UeXBlRGVzYyBnZXRUeXBlRGVzYygpIHsKLSAgICAgICAgcmV0dXJuIHR5cGVEZXNjOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBDdXN0b20gU2VyaWFsaXplcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLlNlcmlhbGl6ZXIgZ2V0U2VyaWFsaXplcigKLSAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBtZWNoVHlwZSwgCi0gICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBfamF2YVR5cGUsICAKLSAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBfeG1sVHlwZSkgewotICAgICAgICByZXR1cm4gCi0gICAgICAgICAgbmV3ICBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkJlYW5TZXJpYWxpemVyKAotICAgICAgICAgICAgX2phdmFUeXBlLCBfeG1sVHlwZSwgdHlwZURlc2MpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBDdXN0b20gRGVzZXJpYWxpemVyCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuRGVzZXJpYWxpemVyIGdldERlc2VyaWFsaXplcigKLSAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBtZWNoVHlwZSwgCi0gICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBfamF2YVR5cGUsICAKLSAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBfeG1sVHlwZSkgewotICAgICAgICByZXR1cm4gCi0gICAgICAgICAgbmV3ICBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkJlYW5EZXNlcmlhbGl6ZXIoCi0gICAgICAgICAgICBfamF2YVR5cGUsIF94bWxUeXBlLCB0eXBlRGVzYyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNhN2Q0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIENvbnZlcnRlci5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSB3dHA7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ29udmVydGVyIGV4dGVuZHMgamF2YS5ybWkuUmVtb3RlIHsKLSAgICBwdWJsaWMgZmxvYXQgY2Vsc2l1c1RvRmFyZW5oZWl0KGZsb2F0IGNlbHNpdXMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgcHVibGljIGZsb2F0IGZhcmVuaGVpdFRvQ2Vsc2l1cyhmbG9hdCBmYXJlbmhlaXQpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclByb3h5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclByb3h5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYTdjNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJQcm94eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGNsYXNzIENvbnZlcnRlclByb3h5IGltcGxlbWVudHMgd3RwLkNvbnZlcnRlciB7Ci0gIHByaXZhdGUgU3RyaW5nIF9lbmRwb2ludCA9IG51bGw7Ci0gIHByaXZhdGUgd3RwLkNvbnZlcnRlciBjb252ZXJ0ZXIgPSBudWxsOwotICAKLSAgcHVibGljIENvbnZlcnRlclByb3h5KCkgewotICAgIF9pbml0Q29udmVydGVyUHJveHkoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIF9pbml0Q29udmVydGVyUHJveHkoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGNvbnZlcnRlciA9IChuZXcgd3RwLkNvbnZlcnRlclNlcnZpY2VMb2NhdG9yKCkpLmdldENvbnZlcnRlcigpOwotICAgICAgaWYgKGNvbnZlcnRlciAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChfZW5kcG9pbnQgIT0gbnVsbCkKLSAgICAgICAgICAoKGphdmF4LnhtbC5ycGMuU3R1Yiljb252ZXJ0ZXIpLl9zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiLCBfZW5kcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgX2VuZHBvaW50ID0gKFN0cmluZykoKGphdmF4LnhtbC5ycGMuU3R1Yiljb252ZXJ0ZXIpLl9nZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiKTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHNlcnZpY2VFeGNlcHRpb24pIHt9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kcG9pbnQoKSB7Ci0gICAgcmV0dXJuIF9lbmRwb2ludDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoU3RyaW5nIGVuZHBvaW50KSB7Ci0gICAgX2VuZHBvaW50ID0gZW5kcG9pbnQ7Ci0gICAgaWYgKGNvbnZlcnRlciAhPSBudWxsKQotICAgICAgKChqYXZheC54bWwucnBjLlN0dWIpY29udmVydGVyKS5fc2V0UHJvcGVydHkoImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzIiwgX2VuZHBvaW50KTsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIHd0cC5Db252ZXJ0ZXIgZ2V0Q29udmVydGVyKCkgewotICAgIGlmIChjb252ZXJ0ZXIgPT0gbnVsbCkKLSAgICAgIF9pbml0Q29udmVydGVyUHJveHkoKTsKLSAgICByZXR1cm4gY29udmVydGVyOwotICB9Ci0gIAotICBwdWJsaWMgZmxvYXQgY2Vsc2l1c1RvRmFyZW5oZWl0KGZsb2F0IGNlbHNpdXMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb257Ci0gICAgaWYgKGNvbnZlcnRlciA9PSBudWxsKQotICAgICAgX2luaXRDb252ZXJ0ZXJQcm94eSgpOwotICAgIHJldHVybiBjb252ZXJ0ZXIuY2Vsc2l1c1RvRmFyZW5oZWl0KGNlbHNpdXMpOwotICB9Ci0gIAotICBwdWJsaWMgZmxvYXQgZmFyZW5oZWl0VG9DZWxzaXVzKGZsb2F0IGZhcmVuaGVpdCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbnsKLSAgICBpZiAoY29udmVydGVyID09IG51bGwpCi0gICAgICBfaW5pdENvbnZlcnRlclByb3h5KCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlci5mYXJlbmhlaXRUb0NlbHNpdXMoZmFyZW5oZWl0KTsKLSAgfQotICAKLSAgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTZXJ2aWNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRhYWZlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBDb252ZXJ0ZXJTZXJ2aWNlLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGludGVyZmFjZSBDb252ZXJ0ZXJTZXJ2aWNlIGV4dGVuZHMgamF2YXgueG1sLnJwYy5TZXJ2aWNlIHsKLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRDb252ZXJ0ZXJBZGRyZXNzKCk7Ci0KLSAgICBwdWJsaWMgd3RwLkNvbnZlcnRlciBnZXRDb252ZXJ0ZXIoKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uOwotCi0gICAgcHVibGljIHd0cC5Db252ZXJ0ZXIgZ2V0Q29udmVydGVyKGphdmEubmV0LlVSTCBwb3J0QWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU2VydmljZUxvY2F0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU2VydmljZUxvY2F0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FmNWNkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2VMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGNsYXNzIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yIGV4dGVuZHMgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlIGltcGxlbWVudHMgd3RwLkNvbnZlcnRlclNlcnZpY2UgewotCi0gICAgcHVibGljIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yKCkgewotICAgIH0KLQotCi0gICAgcHVibGljIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yKG9yZy5hcGFjaGUuYXhpcy5FbmdpbmVDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgICAgICBzdXBlcihjb25maWcpOwotICAgIH0KLQotICAgIHB1YmxpYyBDb252ZXJ0ZXJTZXJ2aWNlTG9jYXRvcihqYXZhLmxhbmcuU3RyaW5nIHdzZGxMb2MsIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgc05hbWUpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBzdXBlcih3c2RsTG9jLCBzTmFtZSk7Ci0gICAgfQotCi0gICAgLy8gVXNlIHRvIGdldCBhIHByb3h5IGNsYXNzIGZvciBDb252ZXJ0ZXIKLSAgICBwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgQ29udmVydGVyX2FkZHJlc3MgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0NvbnZlcnRlclByb2ovc2VydmljZXMvQ29udmVydGVyIjsKLQotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldENvbnZlcnRlckFkZHJlc3MoKSB7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXJfYWRkcmVzczsKLSAgICB9Ci0KLSAgICAvLyBUaGUgV1NERCBzZXJ2aWNlIG5hbWUgZGVmYXVsdHMgdG8gdGhlIHBvcnQgbmFtZS4KLSAgICBwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgQ29udmVydGVyV1NERFNlcnZpY2VOYW1lID0gIkNvbnZlcnRlciI7Ci0KLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRDb252ZXJ0ZXJXU0REU2VydmljZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXJXU0REU2VydmljZU5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29udmVydGVyV1NERFNlcnZpY2VOYW1lKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgewotICAgICAgICBDb252ZXJ0ZXJXU0REU2VydmljZU5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB3dHAuQ29udmVydGVyIGdldENvbnZlcnRlcigpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgIGphdmEubmV0LlVSTCBlbmRwb2ludDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGVuZHBvaW50ID0gbmV3IGphdmEubmV0LlVSTChDb252ZXJ0ZXJfYWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBnZXRDb252ZXJ0ZXIoZW5kcG9pbnQpOwotICAgIH0KLQotICAgIHB1YmxpYyB3dHAuQ29udmVydGVyIGdldENvbnZlcnRlcihqYXZhLm5ldC5VUkwgcG9ydEFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgd3RwLkNvbnZlcnRlclNvYXBCaW5kaW5nU3R1YiBfc3R1YiA9IG5ldyB3dHAuQ29udmVydGVyU29hcEJpbmRpbmdTdHViKHBvcnRBZGRyZXNzLCB0aGlzKTsKLSAgICAgICAgICAgIF9zdHViLnNldFBvcnROYW1lKGdldENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBfc3R1YjsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbnZlcnRlckVuZHBvaW50QWRkcmVzcyhqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHsKLSAgICAgICAgQ29udmVydGVyX2FkZHJlc3MgPSBhZGRyZXNzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLCBnZXQgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24uCi0gICAgICogSWYgdGhpcyBzZXJ2aWNlIGhhcyBubyBwb3J0IGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLAotICAgICAqIHRoZW4gU2VydmljZUV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgICovCi0gICAgcHVibGljIGphdmEucm1pLlJlbW90ZSBnZXRQb3J0KENsYXNzIHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAod3RwLkNvbnZlcnRlci5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkpIHsKLSAgICAgICAgICAgICAgICB3dHAuQ29udmVydGVyU29hcEJpbmRpbmdTdHViIF9zdHViID0gbmV3IHd0cC5Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIobmV3IGphdmEubmV0LlVSTChDb252ZXJ0ZXJfYWRkcmVzcyksIHRoaXMpOwotICAgICAgICAgICAgICAgIF9zdHViLnNldFBvcnROYW1lKGdldENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKGphdmEubGFuZy5UaHJvd2FibGUgdCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbih0KTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBzdHViIGltcGxlbWVudGF0aW9uIGZvciB0aGUgaW50ZXJmYWNlOiAgIiArIChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UgPT0gbnVsbCA/ICJudWxsIiA6IHNlcnZpY2VFbmRwb2ludEludGVyZmFjZS5nZXROYW1lKCkpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgdGhlIGdpdmVuIGludGVyZmFjZSwgZ2V0IHRoZSBzdHViIGltcGxlbWVudGF0aW9uLgotICAgICAqIElmIHRoaXMgc2VydmljZSBoYXMgbm8gcG9ydCBmb3IgdGhlIGdpdmVuIGludGVyZmFjZSwKLSAgICAgKiB0aGVuIFNlcnZpY2VFeGNlcHRpb24gaXMgdGhyb3duLgotICAgICAqLwotICAgIHB1YmxpYyBqYXZhLnJtaS5SZW1vdGUgZ2V0UG9ydChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHBvcnROYW1lLCBDbGFzcyBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBpZiAocG9ydE5hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGdldFBvcnQoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKTsKLSAgICAgICAgfQotICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIGlucHV0UG9ydE5hbWUgPSBwb3J0TmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgaWYgKCJDb252ZXJ0ZXIiLmVxdWFscyhpbnB1dFBvcnROYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIGdldENvbnZlcnRlcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgIHsKLSAgICAgICAgICAgIGphdmEucm1pLlJlbW90ZSBfc3R1YiA9IGdldFBvcnQoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKTsKLSAgICAgICAgICAgICgob3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViKSBfc3R1Yikuc2V0UG9ydE5hbWUocG9ydE5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIF9zdHViOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgZ2V0U2VydmljZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJDb252ZXJ0ZXJTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuSGFzaFNldCBwb3J0cyA9IG51bGw7Ci0KLSAgICBwdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yIGdldFBvcnRzKCkgewotICAgICAgICBpZiAocG9ydHMgPT0gbnVsbCkgewotICAgICAgICAgICAgcG9ydHMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKLSAgICAgICAgICAgIHBvcnRzLmFkZChuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJDb252ZXJ0ZXIiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXQgdGhlIGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgcG9ydCBuYW1lLgotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnRBZGRyZXNzKGphdmEubGFuZy5TdHJpbmcgcG9ydE5hbWUsIGphdmEubGFuZy5TdHJpbmcgYWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAotaWYgKCJDb252ZXJ0ZXIiLmVxdWFscyhwb3J0TmFtZSkpIHsKLSAgICAgICAgICAgIHNldENvbnZlcnRlckVuZHBvaW50QWRkcmVzcyhhZGRyZXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIAoteyAvLyBVbmtub3duIFBvcnQgTmFtZQotICAgICAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbigiIENhbm5vdCBzZXQgRW5kcG9pbnQgQWRkcmVzcyBmb3IgVW5rbm93biBQb3J0IiArIHBvcnROYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0IHRoZSBlbmRwb2ludCBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIHBvcnQgbmFtZS4KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50QWRkcmVzcyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHBvcnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBzZXRFbmRwb2ludEFkZHJlc3MocG9ydE5hbWUuZ2V0TG9jYWxQYXJ0KCksIGFkZHJlc3MpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU29hcEJpbmRpbmdTdHViLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzOTdhYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQ29udmVydGVyU29hcEJpbmRpbmdTdHViLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGNsYXNzIENvbnZlcnRlclNvYXBCaW5kaW5nU3R1YiBleHRlbmRzIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1YiBpbXBsZW1lbnRzIHd0cC5Db252ZXJ0ZXIgewotICAgIHByaXZhdGUgamF2YS51dGlsLlZlY3RvciBjYWNoZWRTZXJDbGFzc2VzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyUU5hbWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyRmFjdG9yaWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkRGVzZXJGYWN0b3JpZXMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotCi0gICAgc3RhdGljIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjIFtdIF9vcGVyYXRpb25zOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgX29wZXJhdGlvbnMgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2NbMl07Ci0gICAgICAgIF9pbml0T3BlcmF0aW9uRGVzYzEoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIF9pbml0T3BlcmF0aW9uRGVzYzEoKXsKLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2Mgb3BlcjsKLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MgcGFyYW07Ci0gICAgICAgIG9wZXIgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2MoKTsKLSAgICAgICAgb3Blci5zZXROYW1lKCJjZWxzaXVzVG9GYXJlbmhlaXQiKTsKLSAgICAgICAgcGFyYW0gPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiY2Vsc2l1cyIpLCBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYy5JTiwgbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IiksIGZsb2F0LmNsYXNzLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBvcGVyLmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuQ2xhc3MoZmxvYXQuY2xhc3MpOwotICAgICAgICBvcGVyLnNldFJldHVyblFOYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgImNlbHNpdXNUb0ZhcmVuaGVpdFJldHVybiIpKTsKLSAgICAgICAgb3Blci5zZXRTdHlsZShvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlN0eWxlLldSQVBQRUQpOwotICAgICAgICBvcGVyLnNldFVzZShvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlVzZS5MSVRFUkFMKTsKLSAgICAgICAgX29wZXJhdGlvbnNbMF0gPSBvcGVyOwotCi0gICAgICAgIG9wZXIgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2MoKTsKLSAgICAgICAgb3Blci5zZXROYW1lKCJmYXJlbmhlaXRUb0NlbHNpdXMiKTsKLSAgICAgICAgcGFyYW0gPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiZmFyZW5oZWl0IiksIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjLklOLCBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSwgZmxvYXQuY2xhc3MsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG9wZXIuYWRkUGFyYW1ldGVyKHBhcmFtKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5UeXBlKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJmbG9hdCIpKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5DbGFzcyhmbG9hdC5jbGFzcyk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuUU5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiZmFyZW5oZWl0VG9DZWxzaXVzUmV0dXJuIikpOwotICAgICAgICBvcGVyLnNldFN0eWxlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuU3R5bGUuV1JBUFBFRCk7Ci0gICAgICAgIG9wZXIuc2V0VXNlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuVXNlLkxJVEVSQUwpOwotICAgICAgICBfb3BlcmF0aW9uc1sxXSA9IG9wZXI7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udmVydGVyU29hcEJpbmRpbmdTdHViKCkgdGhyb3dzIG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgewotICAgICAgICAgdGhpcyhudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udmVydGVyU29hcEJpbmRpbmdTdHViKGphdmEubmV0LlVSTCBlbmRwb2ludFVSTCwgamF2YXgueG1sLnJwYy5TZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgIHRoaXMoc2VydmljZSk7Ci0gICAgICAgICBzdXBlci5jYWNoZWRFbmRwb2ludCA9IGVuZHBvaW50VVJMOwotICAgIH0KLQotICAgIHB1YmxpYyBDb252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIoamF2YXgueG1sLnJwYy5TZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IHsKLSAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgewotICAgICAgICAgICAgc3VwZXIuc2VydmljZSA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2UoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN1cGVyLnNlcnZpY2UgPSBzZXJ2aWNlOwotICAgICAgICB9Ci0gICAgICAgICgob3JnLmFwYWNoZS5heGlzLmNsaWVudC5TZXJ2aWNlKXN1cGVyLnNlcnZpY2UpLnNldFR5cGVNYXBwaW5nVmVyc2lvbigiMS4yIik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBjcmVhdGVDYWxsKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBzdXBlci5fY3JlYXRlQ2FsbCgpOwotICAgICAgICAgICAgaWYgKHN1cGVyLm1haW50YWluU2Vzc2lvblNldCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldE1haW50YWluU2Vzc2lvbihzdXBlci5tYWludGFpblNlc3Npb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFVzZXJuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRVc2VybmFtZShzdXBlci5jYWNoZWRVc2VybmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkUGFzc3dvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFBhc3N3b3JkKHN1cGVyLmNhY2hlZFBhc3N3b3JkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHN1cGVyLmNhY2hlZEVuZHBvaW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRUaW1lb3V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRUaW1lb3V0KHN1cGVyLmNhY2hlZFRpbWVvdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFBvcnROYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRQb3J0TmFtZShzdXBlci5jYWNoZWRQb3J0TmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24ga2V5cyA9IHN1cGVyLmNhY2hlZFByb3BlcnRpZXMua2V5cygpOwotICAgICAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleSA9IChqYXZhLmxhbmcuU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkoa2V5LCBzdXBlci5jYWNoZWRQcm9wZXJ0aWVzLmdldChrZXkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBfY2FsbDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoamF2YS5sYW5nLlRocm93YWJsZSBfdCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQoIkZhaWx1cmUgdHJ5aW5nIHRvIGdldCB0aGUgQ2FsbCBvYmplY3QiLCBfdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgZmxvYXQgY2Vsc2l1c1RvRmFyZW5oZWl0KGZsb2F0IGNlbHNpdXMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24gewotICAgICAgICBpZiAoc3VwZXIuY2FjaGVkRW5kcG9pbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IG9yZy5hcGFjaGUuYXhpcy5Ob0VuZFBvaW50RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsIF9jYWxsID0gY3JlYXRlQ2FsbCgpOwotICAgICAgICBfY2FsbC5zZXRPcGVyYXRpb24oX29wZXJhdGlvbnNbMF0pOwotICAgICAgICBfY2FsbC5zZXRVc2VTT0FQQWN0aW9uKHRydWUpOwotICAgICAgICBfY2FsbC5zZXRTT0FQQWN0aW9uVVJJKCIiKTsKLSAgICAgICAgX2NhbGwuc2V0RW5jb2RpbmdTdHlsZShudWxsKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsLlNFTkRfVFlQRV9BVFRSLCBCb29sZWFuLkZBTFNFKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLkF4aXNFbmdpbmUuUFJPUF9ET01VTFRJUkVGUywgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBWZXJzaW9uKG9yZy5hcGFjaGUuYXhpcy5zb2FwLlNPQVBDb25zdGFudHMuU09BUDExX0NPTlNUQU5UUyk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbk5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiY2Vsc2l1c1RvRmFyZW5oZWl0IikpOwotCi0gICAgICAgIHNldFJlcXVlc3RIZWFkZXJzKF9jYWxsKTsKLSAgICAgICAgc2V0QXR0YWNobWVudHMoX2NhbGwpOwotIHRyeSB7ICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IF9yZXNwID0gX2NhbGwuaW52b2tlKG5ldyBqYXZhLmxhbmcuT2JqZWN0W10ge25ldyBqYXZhLmxhbmcuRmxvYXQoY2Vsc2l1cyl9KTsKLQotICAgICAgICBpZiAoX3Jlc3AgaW5zdGFuY2VvZiBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIHRocm93IChqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pX3Jlc3A7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBleHRyYWN0QXR0YWNobWVudHMoX2NhbGwpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIF9yZXNwKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIF9leGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIG9yZy5hcGFjaGUuYXhpcy51dGlscy5KYXZhVXRpbHMuY29udmVydChfcmVzcCwgZmxvYXQuY2xhc3MpKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgfSBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBheGlzRmF1bHRFeGNlcHRpb24pIHsKLSAgdGhyb3cgYXhpc0ZhdWx0RXhjZXB0aW9uOwotfQotICAgIH0KLQotICAgIHB1YmxpYyBmbG9hdCBmYXJlbmhlaXRUb0NlbHNpdXMoZmxvYXQgZmFyZW5oZWl0KSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHN1cGVyLmNhY2hlZEVuZHBvaW50ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBvcmcuYXBhY2hlLmF4aXMuTm9FbmRQb2ludEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBfY2FsbCA9IGNyZWF0ZUNhbGwoKTsKLSAgICAgICAgX2NhbGwuc2V0T3BlcmF0aW9uKF9vcGVyYXRpb25zWzFdKTsKLSAgICAgICAgX2NhbGwuc2V0VXNlU09BUEFjdGlvbih0cnVlKTsKLSAgICAgICAgX2NhbGwuc2V0U09BUEFjdGlvblVSSSgiIik7Ci0gICAgICAgIF9jYWxsLnNldEVuY29kaW5nU3R5bGUobnVsbCk7Ci0gICAgICAgIF9jYWxsLnNldFByb3BlcnR5KG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbC5TRU5EX1RZUEVfQVRUUiwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFByb3BlcnR5KG9yZy5hcGFjaGUuYXhpcy5BeGlzRW5naW5lLlBST1BfRE9NVUxUSVJFRlMsIEJvb2xlYW4uRkFMU0UpOwotICAgICAgICBfY2FsbC5zZXRTT0FQVmVyc2lvbihvcmcuYXBhY2hlLmF4aXMuc29hcC5TT0FQQ29uc3RhbnRzLlNPQVAxMV9DT05TVEFOVFMpOwotICAgICAgICBfY2FsbC5zZXRPcGVyYXRpb25OYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgImZhcmVuaGVpdFRvQ2Vsc2l1cyIpKTsKLQotICAgICAgICBzZXRSZXF1ZXN0SGVhZGVycyhfY2FsbCk7Ci0gICAgICAgIHNldEF0dGFjaG1lbnRzKF9jYWxsKTsKLSB0cnkgeyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBfcmVzcCA9IF9jYWxsLmludm9rZShuZXcgamF2YS5sYW5nLk9iamVjdFtdIHtuZXcgamF2YS5sYW5nLkZsb2F0KGZhcmVuaGVpdCl9KTsKLQotICAgICAgICBpZiAoX3Jlc3AgaW5zdGFuY2VvZiBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIHRocm93IChqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pX3Jlc3A7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBleHRyYWN0QXR0YWNobWVudHMoX2NhbGwpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIF9yZXNwKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIF9leGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIG9yZy5hcGFjaGUuYXhpcy51dGlscy5KYXZhVXRpbHMuY29udmVydChfcmVzcCwgZmxvYXQuY2xhc3MpKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgfSBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBheGlzRmF1bHRFeGNlcHRpb24pIHsKLSAgdGhyb3cgYXhpc0ZhdWx0RXhjZXB0aW9uOwotfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZWY2YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDQyNCAgIDEzODA2MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1KU1QgV2ViIFNlcnZpY2VzIEF4aXMgQ29uc3VtcHRpb24gQ29yZSBUZXN0Ci1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91bml0dGVzdC9Mb2NhdG9yVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91bml0dGVzdC9Mb2NhdG9yVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3YTYwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdW5pdHRlc3QvTG9jYXRvclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ3ODY0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbC5KYXZhRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbC5TdGRvdXRQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsLlV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUphdmFDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XZWJTZXJ2aWNlRmluZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotCi1wdWJsaWMgY2xhc3MgTG9jYXRvclRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUgKCkKLQl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKExvY2F0b3JUZXN0cy5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9BeGlzQ2xpZW50TG9jYXRvciAoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTiB0ZXN0X0F4aXNDbGllbnRMb2NhdG9yIik7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSBuZXcgU3RyaW5nW10geyJKYXZhMSIsIkphdmEyIiwiSmF2YTMifTsKLQkJCUlQcm9qZWN0W10gcHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdE5hbWVzLmxlbmd0aF07Ci0JCQlmb3IgKGludCB4PTA7IHg8cHJvamVjdE5hbWVzLmxlbmd0aDsgeCsrKQotCQkJewotCQkJCXByb2plY3RzW3hdID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lc1t4XSk7Ci0JCQl9Ci0JCQlVdGlsLmluaXQoKTsKLQkJCXRyeQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IFV0aWwuY3JlYXRlSmF2YVByb2plY3QocHJvamVjdE5hbWVzW2ldKTsKLQkJCQkJVXRpbC5hZGRSZXF1aXJlZEphcnNUb0phdmFQcm9qZWN0KGphdmFQcm9qZWN0KTsKLQkJCQkJVXRpbC5jb3B5RXhhbXBsZXNUb0phdmFQcm9qZWN0KGphdmFQcm9qZWN0LG5ldyBKYXZhRmlsdGVyKCkpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChUaHJvd2FibGUgdCkKLQkJCXsKLQkJCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCWZhaWwoIkZhaWxlZCB0byBhY2Nlc3Mgb3IgY3JlYXRlIHByZXJlcXVpc2l0ZSBwcm9qZWN0cyIpOwotCQkJfQotCQkJV2ViU2VydmljZUZpbmRlciBmaW5kZXIgPSBXZWJTZXJ2aWNlRmluZGVyLmluc3RhbmNlKCk7Ci0JCQlTdHJpbmdbXSBjYXRlZ29yeUlkcyA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2F0ZWdvcnlJZHMoKTsKLQkJCWludCBuID0gLTE7Ci0JCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgPSBuZXcgU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCQlmb3IgKGludCBpPTA7IGk8Y2F0ZWdvcnlJZHMubGVuZ3RoOyBpKyspCi0JCQl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYXRlZ29yeSBJRCA9IFsiK2NhdGVnb3J5SWRzW2ldKyJdIik7Ci0JCQkJaWYgKGNhdGVnb3J5SWRzW2ldLmVxdWFscygib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLmNhdGVnb3J5LmF4aXMiKSkKLQkJCQl7Ci0JCQkJCW4gPSBpOwotCQkJCQlJdGVyYXRvciBpdGVyID0gZmluZGVyLmdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWRzW2ldLG1vbml0b3IpOwotCQkJCQlhc3NlcnRGb3VuZENsaWVudHMoaXRlciw2KTsKLQkJCQkJaXRlciA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkc1tpXSxwcm9qZWN0cyxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsNik7Ci0JCQkJCWl0ZXIgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZHNbaV0sbmV3IElQcm9qZWN0W10ge3Byb2plY3RzWzBdfSxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsMik7Ci0JCQkJCWl0ZXIgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZHNbaV0sbmV3IElQcm9qZWN0W10ge3Byb2plY3RzWzFdLHByb2plY3RzWzJdfSxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsNCk7Ci0JCQkJCUlQcm9qZWN0IG5vU3VjaFByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoIm5vU3VjaFByb2plY3QiKTsKLQkJCQkJaXRlciA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkc1tpXSxuZXcgSVByb2plY3RbXSB7bm9TdWNoUHJvamVjdH0sbW9uaXRvcik7Ci0JCQkJCWFzc2VydEZvdW5kQ2xpZW50cyhpdGVyLDApOwotCQkJCX0KLQkJCX0KLQkJCWFzc2VydFRydWUoIkF4aXMgbG9jYXRvciBleHRlbnNpb24gbWlzc2luZy4iLG4gPj0gMCk7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVOREVEIHRlc3RfQXhpc0NsaWVudExvY2F0b3IiKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgYXNzZXJ0Rm91bmRDbGllbnRzICggSXRlcmF0b3IgaXRlciwgaW50IHggKQotCXsKLQkJaW50IHAgPSAwOwotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0JCXsKLQkJCU9iamVjdCBvYmogPSBpdGVyLm5leHQoKTsKLQkJCWFzc2VydFRydWUoIkZpbmRlciByZXR1cm5lZCBhICIrb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpKyIgaW5zdGVhZCBvZiBhIFdlYlNlcnZpY2VDbGllbnRJbmZvLiIsb2JqIGluc3RhbmNlb2YgV2ViU2VydmljZUNsaWVudEluZm8pOwotCQkJcCsrOwotCQkJV2ViU2VydmljZUNsaWVudEluZm8gd3NjSW5mbyA9IChXZWJTZXJ2aWNlQ2xpZW50SW5mbylvYmo7Ci0JCQlTdHJpbmcgcHJveHlDbGFzc1VSTCA9IHdzY0luZm8uZ2V0SW1wbFVSTCgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBeGlzIGNsaWVudCBwcm94eSBjbGFzcyA9IFsiK3Byb3h5Q2xhc3NVUkwrIl0iKTsKLQkJCWlmICh3c2NJbmZvIGluc3RhbmNlb2YgV2ViU2VydmljZUphdmFDbGllbnRJbmZvKQotCQkJewotCQkJCVdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbyB3c2NKSW5mbyA9IChXZWJTZXJ2aWNlSmF2YUNsaWVudEluZm8pd3NjSW5mbzsKLQkJCQlhc3NlcnROb3ROdWxsKCJGb3VuZCBhbiB1bmV4cGVjdGVkIG51bGwgSVR5cGUiLHdzY0pJbmZvLmdldFR5cGUoKSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJBeGlzIGNsaWVudCBwcm94eSBJVHlwZSA9IFsiK3dzY0pJbmZvLmdldFR5cGUoKSsiXSIpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoIkZvdW5kICIrcCsiIHByb3hpZXMgaW5zdGVhZCBvZiB0aGUgZXhwZWN0ZWQgIit4KyIuIixwID09IHgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0ZpbHRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNmMwNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzExICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsOwotCi1wdWJsaWMgaW50ZXJmYWNlIEZpbHRlcgotewotCXB1YmxpYyBib29sZWFuIGFjY2VwdCAoIE9iamVjdCBvYmplY3QgKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0phdmFGaWx0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0phdmFGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc2MjA2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9KYXZhRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzExICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsOwotCi1wdWJsaWMgY2xhc3MgSmF2YUZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7Ci0KLQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQgKCBPYmplY3Qgb2JqZWN0ICkKLQl7Ci0JCXJldHVybiBvYmplY3QudG9TdHJpbmcoKS5lbmRzV2l0aCgiLmphdmEiKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL1N0ZG91dFByb2dyZXNzTW9uaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODhiMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLQotcHVibGljIGNsYXNzIFN0ZG91dFByb2dyZXNzTW9uaXRvciBleHRlbmRzIE51bGxQcm9ncmVzc01vbml0b3IKLXsKLQotCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgbmFtZSwgaW50IHRvdGFsV29yaykKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiW1Byb2dyZXNzXSAiK25hbWUrIiwgIit0b3RhbFdvcmsrIiB1bml0KHMpIHJlbWFpbmluZykuIik7Ci0JfQotCi0JcHVibGljIHZvaWQgZG9uZSgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gRG9uZS4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiW1Byb2dyZXNzXSAiK25hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN1YlRhc2soU3RyaW5nIG5hbWUpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gIituYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIltQcm9ncmVzc10gIit3b3JrKyIgdW5pdChzKSBjb21wbGV0ZWQuIik7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzkwMjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL1V0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDc4NjQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYxMjExICAgMTYyMjg4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3b3Jrc3BhY2UgcGF0aHMgd2l0aCBzcGFjZXMgYnJlYWsgSmF2YSBFZGl0b3IgTGF1bmNoCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBVdGlsCi17Ci0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdGhpcyB0ZXN0c3VpdGUuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGluaXQgKCkKLQl7Ci0JCVN0cmluZyB3b3Jrc3BhY2VPU1BhdGggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJXb3Jrc3BhY2UgPSBbIit3b3Jrc3BhY2VPU1BhdGgrIl0iKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlIGEgSmF2YSBwcm9qZWN0IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0byBjcmVhdGUuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBwcm9qZWN0IGNvdWxkIG5vdCBiZSBjcmVhdGVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUphdmFQcm9qZWN0IGNyZWF0ZUphdmFQcm9qZWN0ICggU3RyaW5nIG5hbWUgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSByb290LmdldFByb2plY3QobmFtZSk7Ci0JCWlmICghcHJvamVjdC5leGlzdHMoKSkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBwcm9qZWN0IFsiK25hbWUrIl0iKTsKLQkJCXByb2plY3QuY3JlYXRlKG51bGwpOwotCQkJcHJvamVjdC5vcGVuKG51bGwpOwotCSAgICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXREZXNjcmlwdGlvbigpOwotCSAgICAgICAgZGVzYy5zZXROYXR1cmVJZHMobmV3IFN0cmluZ1tdIHtKYXZhQ29yZS5OQVRVUkVfSUR9KTsKLQkgICAgICAgIElDb21tYW5kIGNtZCA9IGRlc2MubmV3Q29tbWFuZCgpOwotCSAgICAgICAgY21kLnNldEJ1aWxkZXJOYW1lKEphdmFDb3JlLkJVSUxERVJfSUQpOwotCSAgICAgICAgZGVzYy5zZXRCdWlsZFNwZWMobmV3IElDb21tYW5kW10ge2NtZH0pOwotCSAgICAgICAgcHJvamVjdC5zZXREZXNjcmlwdGlvbihkZXNjLG51bGwpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgSmF2YSBwcm9qZWN0IFsiK25hbWUrIl0iKTsKLQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQlqYXZhUHJvamVjdC5vcGVuKG51bGwpOwotCQlyZXR1cm4gamF2YVByb2plY3Q7Ci0JfQotCQotCS8qKgotCSAqIEFkZHMgQXhpcyBqYXJzIGFuZCB0aGUgSlJFIHRvIHRoZSBjbGFzc3BhdGggb2YgdGhlIGdpdmVuIHByb2plY3QuCi0JICogQHBhcmFtIGphdmFQcm9qZWN0IFRoZSBwcm9qZWN0IHRvIGFkZCBheGlzLmphciB0by4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgamFyIGNvdWxkIG5vdCBiZSBhZGRlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkUmVxdWlyZWRKYXJzVG9KYXZhUHJvamVjdCAoIElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCS8vIEdldCB0aGUgY3VycmVudCBjbGFzc3BhdGggYXMgYSBsaXN0LgotCQlJQ2xhc3NwYXRoRW50cnlbXSBjbGFzc3BhdGggPSBqYXZhUHJvamVjdC5nZXRSYXdDbGFzc3BhdGgoKTsKLQkJTGlzdCBsaXN0ID0gbmV3IExpbmtlZExpc3QoamF2YS51dGlsLkFycmF5cy5hc0xpc3QoY2xhc3NwYXRoKSk7Ci0JCQotCQkvLyBBZGQgdGhlIEpSRSB0byB0aGUgbGlzdC4KLQkJSUNsYXNzcGF0aEVudHJ5IGNvbiA9IEphdmFDb3JlLm5ld0NvbnRhaW5lckVudHJ5KG5ldyBQYXRoKCJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiKSk7Ci0JCWxpc3QuYWRkKGNvbik7Ci0JCQotCQkvLyBBZGQgdGhlIEF4aXMgamFycyB0byB0aGUgbGlzdC4KLQkJU3RyaW5nW10gamFycyA9IG5ldyBTdHJpbmdbXSB7Ci0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsImF4aXMuamFyIiwKLQkJCQkib3JnLmFwYWNoZS5heGlzIiwiY29tbW9ucy1kaXNjb3ZlcnktMC4yLmphciIsCi0JCQkJIm9yZy5hcGFjaGUuY29tbW9uc19sb2dnaW5nIiwiY29tbW9ucy1sb2dnaW5nLTEuMC40LmphciIsCi0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsImpheHJwYy5qYXIiLAotCQkJCSJvcmcuYXBhY2hlLmpha2FydGFfbG9nNGoiLCJsb2c0ai0xLjIuOC5qYXIiLAotCQkJCSJvcmcuYXBhY2hlLmF4aXMiLCJzYWFqLmphciIsCi0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsIndzZGw0ai0xLjUuMS5qYXIiCi0JCX07Ci0JCQotCQlmb3IgKGludCBpPTA7IGk8amFycy5sZW5ndGg7IGkrPTIpCi0JCXsKLQkJCUlQYXRoIGphciA9IGdldEF4aXNQbHVnaW5KYXJQYXRoKGphcnNbaV0samFyc1tpKzFdKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQWRkaW5nIGphciBbIitqYXIudG9TdHJpbmcoKSsiXSIpOwotCQkJSUNsYXNzcGF0aEVudHJ5IGphckVudHJ5ID0gSmF2YUNvcmUubmV3TGlicmFyeUVudHJ5KGphcixudWxsLG51bGwpOwotCQkJbGlzdC5hZGQoamFyRW50cnkpOwotCQl9Ci0JCQotCQkvLyBVcGRhdGUgdGhlIGN1cnJlbnQgY2xhc3NwYXRoIGZyb20gdGhlIGxpc3QuCi0JCUlDbGFzc3BhdGhFbnRyeVtdIG5ld0NsYXNzcGF0aCA9IChJQ2xhc3NwYXRoRW50cnlbXSlsaXN0LnRvQXJyYXkobmV3IElDbGFzc3BhdGhFbnRyeVswXSk7Ci0JCWphdmFQcm9qZWN0LnNldFJhd0NsYXNzcGF0aChuZXdDbGFzc3BhdGgsbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgbmFtZWQgamFyIGluIHRoZSBBeGlzIHBsdWdpbi4KLQkgKiBAcmV0dXJuIFRoZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIG5hbWVkIGphciBpbiB0aGUgQXhpcyBwbHVnaW4uCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBwYXRoIGNvdWxkIG5vdCBiZSBjb21wdXRlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEF4aXNQbHVnaW5KYXJQYXRoICggU3RyaW5nIHBsdWdpbk5hbWUsIFN0cmluZyBqYXJOYW1lICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5OYW1lKTsKLQkJaWYgKGJ1bmRsZSA9PSBudWxsKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIiIsMCwiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnaW4gb3JnLmFwYWNoZS5heGlzIixudWxsKSk7Ci0JCX0KLQkJVVJMIGF4aXNVUkwgPSBGaWxlTG9jYXRvci5maW5kKGJ1bmRsZSxuZXcgUGF0aCgibGliLyIramFyTmFtZSksbnVsbCk7Ci0JCXRyeQotCQl7Ci0JCQlVUkwgbG9jYWxBeGlzVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKGF4aXNVUkwpOwotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUobmV3IFVSSShVUklFbmNvZGVyLmVuY29kZShsb2NhbEF4aXNVUkwudG9TdHJpbmcoKSwgIlVURi04IikpKTsKLQkJCXJldHVybiBuZXcgUGF0aChmaWxlLnRvU3RyaW5nKCkpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCIiLDAsIlVuYWJsZSB0byBlbmNvZGUgamFyIHBhdGggZm9yIHBsdWdpbiBvcmcuYXBhY2hlLmF4aXMiLHVlZSkpOwkJCQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiIiwwLCJVbmFibGUgdG8gbG9jYXRlIHBsdWdpbiBvcmcuYXBhY2hlLmF4aXMiLGlvZSkpOwotCQl9Ci0JCWNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gdXNlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIiIsMCwiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnaW4gb3JnLmFwYWNoZS5heGlzIix1c2UpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBDb3BpZXMgZXhhbXBsZXMgdG8gdGhlIGdpdmVuIEphdmEgcHJvamVjdC4KLQkgKiBAcGFyYW0gamF2YVByb2plY3QgVGhlIHByb2plY3QgdG8gY29weSB0aGUgZXhhbXBsZXMgdG8uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlFeGFtcGxlc1RvSmF2YVByb2plY3QgKCBJSmF2YVByb2plY3QgamF2YVByb2plY3QsIEZpbHRlciBmaWx0ZXIgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJUHJvamVjdCBwcm9qZWN0ID0gamF2YVByb2plY3QuZ2V0UHJvamVjdCgpOwotCQlTdHJpbmcgc291cmNlUGF0aCA9IHByb2plY3QuZ2V0TmFtZSgpOwotCQljb3B5RXhhbXBsZSgib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cyIsImRhdGEvYXhpc1NvdXJjZTEiLHNvdXJjZVBhdGgsZmlsdGVyKTsKLQkJY29weUV4YW1wbGUoIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMiLCJkYXRhL2F4aXNTb3VyY2UyIixzb3VyY2VQYXRoLGZpbHRlcik7Ci0JCXByb2plY3QuYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5GVUxMX0JVSUxELG51bGwpOwotCQl0cnkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBidWlsZCB0byBjb21wbGV0ZSIpOwotCQkJUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELG51bGwpOwotCQl9Ci0JCWNhdGNoIChUaHJvd2FibGUgdCkKLQkJewotCQkJLy9EbyBub3RoaW5nLgotCQl9Ci0JfQotCQotCS8qKgotCSAqIFJlY3Vyc2l2ZWx5IGNvcGllcyBmaWxlcyBmcm9tIGEgcGx1Z2luIHRvIHRoZSB3b3Jrc3BhY2UuCi0JICogQHBhcmFtIHNvdXJjZVBsdWdpbiBUaGUgcGx1Z2luIHRvIGNvcHkgZnJvbS4KLQkgKiBAcGFyYW0gc291cmNlUm9vdCBUaGUgcGx1Z2luLXJlbGF0ZWQgcGF0aCB0byBjb3B5IGZyb20uCi0JICogQHBhcmFtIHRhcmdldFdvcmtzcGFjZVBhdGggVGhlIHdvcmtzcGFjZSBwYXRoIHRvIGNvcHkgdG8uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlFeGFtcGxlICggU3RyaW5nIHNvdXJjZVBsdWdpbiwgU3RyaW5nIHNvdXJjZVJvb3QsIFN0cmluZyB0YXJnZXRXb3Jrc3BhY2VQYXRoLCBGaWx0ZXIgZmlsdGVyICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShzb3VyY2VQbHVnaW4pOwotCQlpZiAoYnVuZGxlID09IG51bGwpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiIiwwLCJVbmFibGUgdG8gbG9jYXRlIHBsdWdpbiAiK3NvdXJjZVBsdWdpbixudWxsKSk7Ci0JCX0KLQkJRW51bWVyYXRpb24gZSA9IGJ1bmRsZS5nZXRFbnRyeVBhdGhzKHNvdXJjZVJvb3QpOwotCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJewotCQkJU3RyaW5nIHBhdGggPSBlLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQnVuZGxlIHBhdGggPSBbIitwYXRoKyJdIik7Ci0JCQljb3B5RXhhbXBsZUZpbGUoYnVuZGxlLHBhdGgsbmV3IFBhdGgoc291cmNlUm9vdCkuc2VnbWVudENvdW50KCksdGFyZ2V0V29ya3NwYWNlUGF0aCxmaWx0ZXIpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RXhhbXBsZUZpbGUgKCBCdW5kbGUgYnVuZGxlLCBTdHJpbmcgcGF0aCwgaW50IG9mZnNldCwgU3RyaW5nIHRhcmdldFdvcmtzcGFjZVBhdGgsIEZpbHRlciBmaWx0ZXIgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJUGF0aCByZWR1Y2VkUGF0aCA9IG5ldyBQYXRoKHBhdGgpLnJlbW92ZUZpcnN0U2VnbWVudHMob2Zmc2V0KTsKLQkJSVBhdGggdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKHRhcmdldFdvcmtzcGFjZVBhdGgpLmFwcGVuZChyZWR1Y2VkUGF0aCk7Ci0JCWlmIChwYXRoLmVuZHNXaXRoKCIvIikpCi0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRm9sZGVyID0gWyIrcGF0aCsiXSBUYXJnZXQgPSBbIit0YXJnZXRQYXRoKyJdIik7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKHRhcmdldFBhdGgpOwotCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpCi0JCQl7Ci0JCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLHRydWUsbnVsbCk7Ci0JCQl9Ci0JCQlFbnVtZXJhdGlvbiBlID0gYnVuZGxlLmdldEVudHJ5UGF0aHMocGF0aCk7Ci0JCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLQkJCXsKLQkJCQlTdHJpbmcgc3VicGF0aCA9IGUubmV4dEVsZW1lbnQoKS50b1N0cmluZygpOwotCQkJCWNvcHlFeGFtcGxlRmlsZShidW5kbGUsc3VicGF0aCxvZmZzZXQsdGFyZ2V0V29ya3NwYWNlUGF0aCxmaWx0ZXIpOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGaWxlID0gWyIrcGF0aCsiXSBUYXJnZXQgPSBbIit0YXJnZXRQYXRoKyJdIik7Ci0JCQlpZiAoZmlsdGVyLmFjY2VwdChwYXRoKSkKLQkJCXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcGllZCBbIitwYXRoKyJdIik7Ci0JCQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeShwYXRoKTsKLQkJCQljb3B5RmlsZSh1cmwsdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlGaWxlICggVVJMIHVybCwgSVBhdGggdGFyZ2V0UGF0aCApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUodGFyZ2V0UGF0aCk7Ci0JCXRyeQotCQl7Ci0JCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSB1cmwub3BlblN0cmVhbSgpOwotCQkJZmlsZS5jcmVhdGUoc3RyZWFtLHRydWUsbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCIiLDAsIklPRXhjZXB0aW9uIGNvcHlpbmcgZmlsZSIsaW9lKSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRlODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNDgxMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotYXhpc1BlcmZtc3IuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4OGUxYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjZlOGU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jVGh1IE1heSAzMSAxNDoyODowNSBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWluc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDYzY2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6NTQgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MWQ3YTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2U7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDIucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBwZXJmdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UucGx1Z2luLlBlcmZvcm1hbmNlUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMyLnRvbWNhdC52NTUucGVyZm1zciwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnBsdWdpbiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmpzdC53cywKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWwsCi0gb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWksCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudCwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LAotIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzMi5jb3JlCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODQ4NGRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgcGVyZnRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBiaW4vCi1qYXJzLmNvbXBpbGUub3JkZXIgPSBwZXJmdGVzdHMuamFyCi1zb3VyY2UucGVyZnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5wZXJmdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWQ4OWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDQyNCAgIDEzODA2MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1KU1QgV2ViIFNlcnZpY2VzIFBlcmZvcm1hbmNlIFBsdWctaW4KLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zckJVSmF2YUF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQlVKYXZhQXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0YzFiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQlVKYXZhQXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgCi0gKiAyMDA3MDUwOSAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbC5QZXJmb3JtYW5jZUpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBCb3R0b20gdXAgcGVyZm9ybWFuY2Ugc2NlbmFyaW8gd2l0aCBBeGlzIGFuZCBUb21jYXQgdjUuMAotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGVyZm1zckJVSmF2YUF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCS8vIENvbnN0YW50cwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gIFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7IAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuQlVfUFJPSkVDVF9OQU1FOwotICAgIAotCXByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0JCi0gIC8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmsgc3BhY2UgCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCSAgICAKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIGZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsJCQotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiQlVKYXZhL3NyYyIsZm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpOwotCQkvLyBFbnN1cmUgdGhhdCBFY2hvLmNsYXNzIGlzIGJ1aWx0IGluOgotCQkvLyA8V2ViIFByb2plY3Q+L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzL2Zvby9FY2hvLmNsYXNzCi0JCUpVbml0VXRpbHMuZGlzYWJsZVZhbGlkYXRpb24od2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICh3ZWJQcm9qZWN0PT1udWxsIHx8ICF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShQUk9KRUNUX05BTUUsIFBST0pFQ1RfTkFNRSwgc2VydmVyXy5nZXRJZCgpLCBTRVJWRVJUWVBFSURfVEM1MCwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCA1LjAKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzUwKTsJCi0JCUpVbml0VXRpbHMuc2V0U2VydmljZVNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQkKLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLyAgCi0JcHVibGljIHZvaWQgdGVzdEJVSmF2YUF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkgIAlJU3RhdHVzW10gc3RhdHVzOwotCSAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JICAgIEpVbml0VXRpbHMuZGlzYWJsZVdTSURpYWxvZyh3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0JICAgIEpVbml0VXRpbHMuc2V0UnVudGltZVByZWZlcmVuY2UoIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiKTsKLQotCSAgICAKLQkgICAgUGVyZm9ybWFuY2UgcGVyZj0gUGVyZm9ybWFuY2UuZ2V0RGVmYXVsdCgpOwotCSAgICBQZXJmb3JtYW5jZU1ldGVyIHBlcmZvcm1hbmNlTWV0ZXI9IHBlcmYuY3JlYXRlUGVyZm9ybWFuY2VNZXRlcihwZXJmLmdldERlZmF1bHRTY2VuYXJpb0lkKHRoaXMpKTsJICAgIAotCSAgICB0cnkgewotICAgIAotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLQkgICAgICBzdGF0dXMgPSBQZXJmb3JtYW5jZUpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQk9UVE9NX1VQLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdG9wKCk7Ci0KLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLmNvbW1pdCgpOwotCSAgICAgIHBlcmYuYXNzZXJ0UGVyZm9ybWFuY2UocGVyZm9ybWFuY2VNZXRlcik7Ci0JICAgIH0KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAocGVyZm9ybWFuY2VNZXRlcj09bnVsbCkKLQkgICAgCQlwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLQkgCX0KLQkJCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCQkKLQl9Ci0JCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotCQlJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAKLSAgICAgICAgSUZvbGRlciB3c2RsRm9sZGVyID0gd2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIndzZGwiKTsKLQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLmV4aXN0cygpKTsKLQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJYXNzZXJ0VHJ1ZSh3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLSAgICAKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCS8vc2hvdyBlcnJvcnMKLQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQlVKYXZhIEVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUocy5sZW5ndGggPT0gMCk7Ci0JfQotCQotICAvKioKLSAgICogQ2xlYXIgd29ya3NwYWNlIGlmIG5lY2Vzc2FyeQotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkvLyBSZW1vdmUgdGhlIEVBUiBmcm9tIHRoZSBzZXJ2ZXIuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJLy9KVW5pdFV0aWxzLnJlbW92ZU1vZHVsZUZyb21TZXJ2ZXIoc2VydmVyXyx3ZWJQcm9qZWN0LGVudl8pOwotCQkKLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLCBudWxsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2Uod2ViUHJvamVjdC5leGlzdHMoKSk7Ci0JCQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQ2xpZW50QXhpc1RDNTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzVEM1MC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDQ0NWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzVEM1MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAKLSAqIDIwMDcwNTA5ICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLldTV2l6YXJkVG9tY2F0NTBUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsLlBlcmZvcm1hbmNlSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIENsaWVudCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmbXNyQ2xpZW50QXhpc1RDNTAgZXh0ZW5kcyBXU1dpemFyZFRvbWNhdDUwVGVzdCB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7Ci0gIAotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMSUVOVF9QUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLkNMSUVOVF9QUk9KRUNUX05BTUU7Ci0JCi0JcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQotICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgaWYgKCF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShDTElFTlRfUFJPSkVDVF9OQU1FLCBDTElFTlRfUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksU0VSVkVSVFlQRUlEX1RDNTAsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAKLQkvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgSUZvbGRlciBkZXN0Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0gICAgICAgIEpVbml0VXRpbHMuY29weVRlc3REYXRhKCJUREphdmEiLGRlc3RGb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZGVzdEZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJFY2hvLndzZGwiKSk7CQkKLQotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQkJCi0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgNS4wICAgIAotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwotCQlKVW5pdFV0aWxzLnNldENsaWVudFNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQl9Ci0KLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHVibGljIHZvaWQgdGVzdENsaWVudEF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsJCi0JICAJSVN0YXR1c1tdIHN0YXR1czsKLQkgIAkKLQkJSlVuaXRVdGlscy5lbmFibGVQcm94eUdlbmVyYXRpb24odHJ1ZSk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCQlKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKCJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIik7Ci0JCi0JCVBlcmZvcm1hbmNlIHBlcmY9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsKLQkJUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIocGVyZi5nZXREZWZhdWx0U2NlbmFyaW9JZCh0aGlzKSk7CSAgICAKLQkgICAgdHJ5IHsKLSAgICAKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0JICAgICAgc3RhdHVzID0gUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0NMSUVOVCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCSAgICAKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgCi0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgc3JjRm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwotICAgIAotCQkvL0lGb2xkZXIgc3JjRm9sZGVyID0gSlVuaXRVdGlscy5nZXRTb3VyY2VGb2xkZXJGb3JXZWJQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQlJRm9sZGVyIGZvbGRlciA9IHNyY0ZvbGRlci5nZXRGb2xkZXIoImZvbyIpOwotCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvLwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOyAgICAgICAKLQotCX0KLQkKLSAgLyoqCi0gICAqIFJlbW92ZSB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zclRESmF2YUF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAzODMyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgIAotICogMjAwNzA1MDkgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLldTV2l6YXJkVG9tY2F0NTBUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsLlBlcmZvcm1hbmNlSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIFRvcCBkb3duIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGNsYXNzIFBlcmZtc3JUREphdmFBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLlREX1BST0pFQ1RfTkFNRTsKLSAgCi0gIHByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0JCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCSAgICBpZiAoIXdlYlByb2plY3QuZXhpc3RzKCkpewotCSAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKFBST0pFQ1RfTkFNRSwgUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksIFNFUlZFUlRZUEVJRF9UQzUwLCAiMTQiLCBlbnZfLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkgICAgfQotCSAgfQotCSAgCi0KLSAgLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7CQkKLQkJSUZvbGRlciBkZXN0Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuY29weVRlc3REYXRhKCJUREphdmEiLGRlc3RGb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZGVzdEZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJFY2hvLndzZGwiKSk7Ci0JCQotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IHY1LjAgc2VydmVyCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1MCk7CQotCQlKVW5pdFV0aWxzLnNldFNlcnZpY2VTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQotCX0KLQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RUREphdmFBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24gewotCSAgCi0JICAgIElTdGF0dXNbXSBzdGF0dXM7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCQlKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKCJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIik7Ci0JCQotCQlQZXJmb3JtYW5jZSBwZXJmPSBQZXJmb3JtYW5jZS5nZXREZWZhdWx0KCk7Ci0JCVBlcmZvcm1hbmNlTWV0ZXIgcGVyZm9ybWFuY2VNZXRlcj0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKHBlcmYuZ2V0RGVmYXVsdFNjZW5hcmlvSWQodGhpcykpOwkgICAgCi0JICAgIHRyeSB7Ci0gICAgCi0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdGFydCgpOwotCSAgICAgIHN0YXR1cyA9IFBlcmZvcm1hbmNlSlVuaXRVdGlscy5sYXVuY2hDcmVhdGlvbldpemFyZChTY2VuYXJpb0NvbnN0YW50cy5XSVpBUkRJRF9UT1BfRE9XTixTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCSAgICAKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQotICAvKioKLSAgICogVmVyaWZ5IHRoZSBzY2VuYXJpbyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOyAgICAKLSAgICAgICAgSUZvbGRlciB3ZWJDb250ZW50Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7ICAgIAotICAgIAotCQkKLQkJSUZvbGRlciB3c2RsRm9sZGVyID0gd2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIndzZGwiKTsKLQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLmV4aXN0cygpKTsKLQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJLy8KLQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVERKYXZhIEVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUocy5sZW5ndGggPT0gMCk7Ci0JfQotCQotICAvKioKLSAgICogQ2xlYXIgd29ya3NwYWNlIGlmIHJlcXVpcmVkCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSxudWxsKTsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTUvV1NXaXphcmRUb21jYXQ1NVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1NS9XU1dpemFyZFRvbWNhdDU1VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTY3MzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1NS9XU1dpemFyZFRvbWNhdDU1VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjU1OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMyLmNvcmUuY29udGV4dC5BeGlzMkVtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzMi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpczJDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5XU1dpemFyZFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTV2l6YXJkVG9tY2F0NTVUZXN0IGV4dGVuZHMgV1NXaXphcmRUZXN0IHsKLSAgCi0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSIpOwotCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgUlVOVElNRV9JTlNUQUxMX1BBVEggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5ydW50aW1lLmF4aXMyIik7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTUgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41NSI7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1NSA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41NSI7Ci0JICAKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS5ldG9vbHMud2Vic2VydmljZS53YXMudGVzdHMuV1NXaXphcmRUZXN0I2luc3RhbGxTZXJ2ZXJSdW50aW1lKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluc3RhbGxTZXJ2ZXJSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkvLyBjcmVhdGUgc2VydmVyIHJ1bnRpbWUKLSAgICBzZXJ2ZXJSdW50aW1lXyA9IEpVbml0VXRpbHMuY3JlYXRlU2VydmVyUnVudGltZShSVU5USU1FVFlQRUlEX1RDNTUsIFNFUlZFUl9JTlNUQUxMX1BBVEgpOwotICAgIAotICAgIC8vIHNldCBpbnN0YWxsIGxvY2F0aW9ucwotICAgIEF4aXMyRW1pdHRlckNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VBeGlzMkNvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotICAgIGlmIChjb250ZXh0LmdldEF4aXMyUnVudGltZUxvY2F0aW9uKCk9PW51bGwgfHwgY29udGV4dC5nZXRBeGlzMlJ1bnRpbWVMb2NhdGlvbigpLmVxdWFscygiIikpewotICAgIAlTdHJpbmcgcnVudGltZVBhdGggPSBSVU5USU1FX0lOU1RBTExfUEFUSDsKLSAgICAJaWYgKHJ1bnRpbWVQYXRoIT1udWxsKSB7Ci0gICAgCQkgY29udGV4dC5zZXRBeGlzMlJ1bnRpbWVMb2NhdGlvbihydW50aW1lUGF0aCk7Ci0gICAgCX0gICAgICAgIAotICAgIH0KLSAgfQotCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2Uud2FzLnRlc3RzLldTV2l6YXJkVGVzdCNpbnN0YWxsU2VydmVyKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluc3RhbGxTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgIHNlcnZlcl8gPSBKVW5pdFV0aWxzLmNyZWF0ZVNlcnZlcigiQXBhY2hlIFRvbWNhdCB2NTUiLCBTRVJWRVJUWVBFSURfVEM1NSwgc2VydmVyUnVudGltZV8sIGVudl8sIG51bGwgKTsKLSAgfQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JCVUphdmFBeGlzMlRDNTUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMyL3RvbWNhdC92NTUvcGVyZm1zci9QZXJmbXNyQlVKYXZhQXhpczJUQzU1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxM2Y0NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JCVUphdmFBeGlzMlRDNTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMyLnRvbWNhdC52NTUucGVyZm1zcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTUuV1NXaXphcmRUb21jYXQ1NVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWwuUGVyZm9ybWFuY2VKVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdC5XU0pVbml0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlTWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogQm90dG9tIHVwIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpczIgYW5kIFRvbWNhdCB2NS41Ci0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBQZXJmbXNyQlVKYXZhQXhpczJUQzU1IGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1NVRlc3QgewotCS8vIENvbnN0YW50cwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gIFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVMyOyAKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiQlVBeGlzMldlYiI7Ci0gICAgCi0JcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQkKLSAgLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLSAgICAKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIGZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsJCQotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiQlVKYXZhL3NyYyIsZm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpOwotCQkvLyBFbnN1cmUgdGhhdCBFY2hvLmNsYXNzIGlzIGJ1aWx0IGluOgotCQkvLyA8V2ViIFByb2plY3Q+L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzL2Zvby9FY2hvLmNsYXNzCi0JCUpVbml0VXRpbHMuZGlzYWJsZVZhbGlkYXRpb24od2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkvL2Fzc2VydFRydWUoSlVuaXRVdGlscy5nZXRDbGFzc2VzRm9sZGVyRm9yV2ViUHJvamVjdChXRUJfUFJPSkVDVF9OQU1FKS5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5jbGFzcyIpKS5leGlzdHMoKSk7Ci0JCQotCQkKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICh3ZWJQcm9qZWN0PT1udWxsIHx8ICF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShQUk9KRUNUX05BTUUsIFBST0pFQ1RfTkFNRSwgc2VydmVyXy5nZXRJZCgpLCBTRVJWRVJUWVBFSURfVEM1NSwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQkKLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzMiBhbmQgVG9tY2F0IDUuNQotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTUpOwkJCi0JCUpVbml0VXRpbHMuc2V0U2VydmljZVNjZW5hcmlvRGVmYXVsdCgpOwotCX0KLQkKLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLyAgCi0JcHVibGljIHZvaWQgdGVzdEJVSmF2YUF4aXMyVEM1NSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICAJSVN0YXR1c1tdIHN0YXR1czsKLQkgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCSAgICBKVW5pdFV0aWxzLmRpc2FibGVXU0lEaWFsb2cod2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCSAgICBKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKFdTX0FYSVMyX1JVTlRJTUUpOwotCi0JICAgIAotCSAgICBQZXJmb3JtYW5jZSBwZXJmPSBQZXJmb3JtYW5jZS5nZXREZWZhdWx0KCk7Ci0JICAgIFBlcmZvcm1hbmNlTWV0ZXIgcGVyZm9ybWFuY2VNZXRlcj0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKHBlcmYuZ2V0RGVmYXVsdFNjZW5hcmlvSWQodGhpcykpOwkgICAgCi0JICAgIHRyeSB7Ci0gICAgCi0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdGFydCgpOwotCSAgICAgIHN0YXR1cyA9IFBlcmZvcm1hbmNlSlVuaXRVdGlscy5sYXVuY2hDcmVhdGlvbldpemFyZChTY2VuYXJpb0NvbnN0YW50cy5XSVpBUkRJRF9CT1RUT01fVVAsU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0b3AoKTsKLQotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCQkKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0JCQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsgICAgCi0JCUlGb2xkZXIgd2ViQ29udGVudEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgIAotICAgICAgICBJRm9sZGVyIHdlYkluZkZvbGRlciA9IHdlYkNvbnRlbnRGb2xkZXIuZ2V0Rm9sZGVyKCJXRUItSU5GIik7Ci0gICAgICAgIElGb2xkZXIgc2VydmljZXNGb2xkZXIgPSB3ZWJJbmZGb2xkZXIuZ2V0Rm9sZGVyKCJzZXJ2aWNlcyIpOwotCQlhc3NlcnRUcnVlKHNlcnZpY2VzRm9sZGVyLmV4aXN0cygpKTsKLQkJSUZvbGRlciB3c0ZvbGRlciA9IHNlcnZpY2VzRm9sZGVyLmdldEZvbGRlcigiRWNobyIpOwotCQlhc3NlcnRUcnVlKHdzRm9sZGVyLmV4aXN0cygpKTsKLQkJYXNzZXJ0VHJ1ZSh3c0ZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0gICAgCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvL3Nob3cgZXJyb3JzCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJVSmF2YSBFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOwotCX0KLQkKLSAgLyoqCi0gICAqIENsZWFyIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gUmVtb3ZlIHRoZSBFQVIgZnJvbSB0aGUgc2VydmVyLgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCS8vSlVuaXRVdGlscy5yZW1vdmVNb2R1bGVGcm9tU2VydmVyKHNlcnZlcl8sd2ViUHJvamVjdCxlbnZfKTsKLQkJCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHdlYlByb2plY3QuZXhpc3RzKCkpOwotCQkKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzMi90b21jYXQvdjU1L3BlcmZtc3IvUGVyZm1zckNsaWVudEF4aXMyVEM1NS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzMlRDNTUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhYzNkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzMi90b21jYXQvdjU1L3BlcmZtc3IvUGVyZm1zckNsaWVudEF4aXMyVEM1NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpczIudG9tY2F0LnY1NS5wZXJmbXNyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1NS5XU1dpemFyZFRvbWNhdDU1VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbC5QZXJmb3JtYW5jZUpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBDbGllbnQgcGVyZm9ybWFuY2Ugc2NlbmFyaW8gd2l0aCBBeGlzMiBhbmQgVG9tY2F0IHY1LjUKLSAqLwotcHVibGljIGNsYXNzIFBlcmZtc3JDbGllbnRBeGlzMlRDNTUgZXh0ZW5kcyBXU1dpemFyZFRvbWNhdDU1VGVzdCB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVMyOwotICAKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTElFTlRfUFJPSkVDVF9OQU1FID0gIkNsaWVudEF4aXMyV2ViIjsKLQkKLQlwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgICAgICBpZiAoIXdlYlByb2plY3QuZXhpc3RzKCkpewotICAgICAgICAgIEpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKENMSUVOVF9QUk9KRUNUX05BTUUsIENMSUVOVF9QUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSxTRVJWRVJUWVBFSURfVEM1NSwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotCS8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgICAgICBJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAgICAgSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsJCi0JCUpVbml0VXRpbHMuZGlzYWJsZVZhbGlkYXRpb24od2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCA1LjUgICAKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzU1KTsKLQkJSlVuaXRVdGlscy5zZXRDbGllbnRTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbGllbnRBeGlzMlRDNTUoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewkKLQkgIAlJU3RhdHVzW10gc3RhdHVzOwotCSAgCQotCQlKVW5pdFV0aWxzLmVuYWJsZVByb3h5R2VuZXJhdGlvbih0cnVlKTsKLQkJSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0JCUpVbml0VXRpbHMuc2V0UnVudGltZVByZWZlcmVuY2UoV1NfQVhJUzJfUlVOVElNRSk7Ci0KLQkJCi0JCVBlcmZvcm1hbmNlIHBlcmY9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsKLQkJUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIocGVyZi5nZXREZWZhdWx0U2NlbmFyaW9JZCh0aGlzKSk7CSAgICAKLQkgICAgdHJ5IHsKLSAgICAKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0JICAgICAgc3RhdHVzID0gUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0NMSUVOVCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCSAgICAKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgCi0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgc3JjRm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwotICAgIAotCQkvL0lGb2xkZXIgc3JjRm9sZGVyID0gSlVuaXRVdGlscy5nZXRTb3VyY2VGb2xkZXJGb3JXZWJQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQlJRm9sZGVyIGZvbGRlciA9IHNyY0ZvbGRlci5nZXRGb2xkZXIoImZvbyIpOwotCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvLwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOyAgICAgICAKLQotCX0KLQkKLSAgLyoqCi0gICAqIFJlbW92ZSB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JUREphdmFBeGlzMlRDNTUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMyL3RvbWNhdC92NTUvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpczJUQzU1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MzJkMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JUREphdmFBeGlzMlRDNTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMyLnRvbWNhdC52NTUucGVyZm1zcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjU1LldTV2l6YXJkVG9tY2F0NTVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsLlBlcmZvcm1hbmNlSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIFRvcCBkb3duIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpczIgYW5kIFRvbWNhdCB2NS41Ci0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmbXNyVERKYXZhQXhpczJUQzU1IGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1NVRlc3QgewotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzI7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVERBeGlzMldlYiI7Ci0gIAotICBwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0JICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkgICAgaWYgKCF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLQkgICAgCUpVbml0VXRpbHMuY3JlYXRlV2ViTW9kdWxlKFBST0pFQ1RfTkFNRSwgUFJPSkVDVF9OQU1FLCBzZXJ2ZXJfLmdldElkKCksIFNFUlZFUlRZUEVJRF9UQzU1LCAiMTQiLCBlbnZfLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkgICAgfQotCSAgfQotCSAgCSAgCi0gIC8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwkJCi0JCUlGb2xkZXIgZGVzdEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiVERKYXZhIixkZXN0Rm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGRlc3RGb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiRWNoby53c2RsIikpOwotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IHY1LjUgc2VydmVyCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1NSk7CQotCQlKVW5pdFV0aWxzLnNldFNlcnZpY2VTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQotCX0KLQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RUREphdmFBeGlzMlRDNTUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgIAotCSAgICBJU3RhdHVzW10gc3RhdHVzOwotCQlKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLQkJSlVuaXRVdGlscy5zZXRSdW50aW1lUHJlZmVyZW5jZShXU19BWElTMl9SVU5USU1FKTsKLQotCQkKLQkJUGVyZm9ybWFuY2UgcGVyZj0gUGVyZm9ybWFuY2UuZ2V0RGVmYXVsdCgpOwotCQlQZXJmb3JtYW5jZU1ldGVyIHBlcmZvcm1hbmNlTWV0ZXI9IHBlcmYuY3JlYXRlUGVyZm9ybWFuY2VNZXRlcihwZXJmLmdldERlZmF1bHRTY2VuYXJpb0lkKHRoaXMpKTsJICAgIAotCSAgICB0cnkgewotICAgIAotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLQkgICAgICBzdGF0dXMgPSBQZXJmb3JtYW5jZUpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfVE9QX0RPV04sU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0b3AoKTsKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLmNvbW1pdCgpOwotCSAgICAgIHBlcmYuYXNzZXJ0UGVyZm9ybWFuY2UocGVyZm9ybWFuY2VNZXRlcik7Ci0JICAgIH0KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAocGVyZm9ybWFuY2VNZXRlcj09bnVsbCkKLQkgICAgCQlwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLQkgCX0KLQkgICAgCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0KLQl9Ci0KLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsgICAgCi0JCUlGb2xkZXIgd2ViQ29udGVudEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgIAotICAgICAgICBJRm9sZGVyIHdlYkluZkZvbGRlciA9IHdlYkNvbnRlbnRGb2xkZXIuZ2V0Rm9sZGVyKCJXRUItSU5GIik7Ci0gICAgICAgIElGb2xkZXIgc2VydmljZXNGb2xkZXIgPSB3ZWJJbmZGb2xkZXIuZ2V0Rm9sZGVyKCJzZXJ2aWNlcyIpOwotCQlhc3NlcnRUcnVlKHNlcnZpY2VzRm9sZGVyLmV4aXN0cygpKTsKLQkJSUZvbGRlciB3c0ZvbGRlciA9IHNlcnZpY2VzRm9sZGVyLmdldEZvbGRlcigiRWNob1NlcnZpY2UiKTsKLQkJYXNzZXJ0VHJ1ZSh3c0ZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUod3NGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvLwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJUREphdmEgRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzLmxlbmd0aCA9PSAwKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgcmVxdWlyZWQKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLG51bGwpOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFBlcmZvcm1hbmNlVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFBlcmZvcm1hbmNlVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEyNjkxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS9BbGxQZXJmb3JtYW5jZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAxMjY3NzQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQlVKYXZhQXhpc1RDNTA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JDbGllbnRBeGlzVEM1MDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zclRESmF2YUF4aXNUQzUwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzMi50b21jYXQudjU1LnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXMyVEM1NTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpczIudG9tY2F0LnY1NS5wZXJmbXNyLlBlcmZtc3JDbGllbnRBeGlzMlRDNTU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMyLnRvbWNhdC52NTUucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpczJUQzU1OwotCi1wdWJsaWMgY2xhc3MgQWxsUGVyZm9ybWFuY2VUZXN0cyB7Ci0JCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJUZXN0IGZvciBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UiKTsKLSAgICAvLyRKVW5pdC1CRUdJTiQKLSAgICAKLSAgICAvLyBDaGVjayBmb3IgVG9tY2F0IDUuMCBzZXJ2ZXIKLQlTdHJpbmcgcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKLQlpZiAocz09bnVsbCl7Ci0JCXMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInRvbWNhdDUwRGlyIik7Ci0JfQotCi0JaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkgewotCSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUGVyZm1zckJVSmF2YUF4aXNUQzUwLmNsYXNzKTsKLQkgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFBlcmZtc3JUREphdmFBeGlzVEM1MC5jbGFzcyk7Ci0JICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQZXJmbXNyQ2xpZW50QXhpc1RDNTAuY2xhc3MpOwotCX0gZWxzZSB7Ci0JCVN5c3RlbS5lcnIucHJpbnRsbigiV2FybmluZzogVG9tY2F0IDUuMCBub3QgZm91bmQgLSBwZXJmb3JtYW5jZSB0ZXN0cyBza2lwcGVkIik7Ci0JfQotCi0JLy8gQ2hlY2sgZm9yIFRvbWNhdCA1LjUgc2VydmVyCi0JcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTUiKTsKLQlpZiAocz09bnVsbCl7Ci0JCXMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInRvbWNhdDU1RGlyIik7Ci0JfQotCQotCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLQkgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFBlcmZtc3JCVUphdmFBeGlzMlRDNTUuY2xhc3MpOwotCSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUGVyZm1zclRESmF2YUF4aXMyVEM1NS5jbGFzcyk7Ci0JICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQZXJmbXNyQ2xpZW50QXhpczJUQzU1LmNsYXNzKTsKLQl9IGVsc2UgewotCQlTeXN0ZW0uZXJyLnByaW50bG4oIldhcm5pbmc6IFRvbWNhdCA1LjUgbm90IGZvdW5kIC0gcGVyZm9ybWFuY2UgdGVzdHMgc2tpcHBlZCIpOwotCX0KLQkKLSAgICAvLyRKVW5pdC1FTkQkCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS9wbHVnaW4vUGVyZm9ybWFuY2VQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3BsdWdpbi9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODI2MmI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3BsdWdpbi9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgUGVyZm9ybWFuY2VQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgUGVyZm9ybWFuY2VQbHVnaW4gcGx1Z2luOwotCi0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBQZXJmb3JtYW5jZVBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBQZXJmb3JtYW5jZVBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9FY2xpcHNlUGVyZm9ybWFuY2VMb2cuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3V0aWwvRWNsaXBzZVBlcmZvcm1hbmNlTG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OGYxYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9FY2xpcHNlUGVyZm9ybWFuY2VMb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotcHVibGljIGNsYXNzIEVjbGlwc2VQZXJmb3JtYW5jZUxvZyBpbXBsZW1lbnRzIElMb2cgewotCi0gIHByaXZhdGUgYm9vbGVhbiBydW5TdGF0ZSA9IGZhbHNlOwotICBQZXJmb3JtYW5jZSBwZXJmID0gbnVsbDsgICAgICAKLSAgUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBudWxsOyAgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZChTdHJpbmcgb3B0aW9uKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgaW50IG1lc3NhZ2VOdW0sIE9iamVjdCBjYWxsZXIsIFN0cmluZyBtZXRob2QsIFRocm93YWJsZSB0aHJvd2FibGUpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIFN0cmluZyBvcHRpb24sIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBUaHJvd2FibGUgdGhyb3dhYmxlKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2coaW50IHNldmVyaXR5LCBpbnQgbWVzc2FnZU51bSwgT2JqZWN0IGNhbGxlciwgU3RyaW5nIG1ldGhvZCwgSVN0YXR1cyBzdGF0dXMpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIFN0cmluZyBvcHRpb24sIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBJU3RhdHVzIHN0YXR1cykgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgaW50IG1lc3NhZ2VOdW0sIE9iamVjdCBjYWxsZXIsIFN0cmluZyBtZXRob2QsIE9iamVjdCBvYmplY3QpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIFN0cmluZyBvcHRpb24sIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBPYmplY3Qgb2JqZWN0KSB7Ci0gICAgCi0gICAgaWYgKG1ldGhvZC5lcXVhbHMoInJ1bkNvbW1hbmQiKSkgewotCi0gICAgICB0cnkgewotICAgICAgICBpZiAoIXJ1blN0YXRlKSB7Ci0gICAgICAgICAgLy8gYmVnaW4gcGVyZm9ybWFuY2UgcmVjb3JkaW5nCi0gICAgICAgICAgcGVyZiA9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsgICAgICAKLSAgICAgICAgICBwZXJmb3JtYW5jZU1ldGVyID0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKCgoU3RyaW5nKW9iamVjdCkudG9TdHJpbmcoKSk7ICAgICAgICAgIAotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLSAgICAgICAgICBydW5TdGF0ZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgLy8gZW5kIHBlcmZvcm1hbmNlIHJlY29yZGluZwotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0gICAgICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLSAgICAgICAgICBwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLSAgICAgICAgICBydW5TdGF0ZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAvLyBoYW5kbGUgZXhjZXB0aW9uCi0gICAgICB9ICAgICAgICAKLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9QZXJmb3JtYW5jZUpVbml0VXRpbHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3V0aWwvUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZDM4MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9QZXJmb3JtYW5jZUpVbml0VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMyMSAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTA5ICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkR5bmFtaWNQb3B1cEpVbml0V2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLQotcHVibGljIGNsYXNzIFBlcmZvcm1hbmNlSlVuaXRVdGlscyB7Ci0gIAotCXByaXZhdGUgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hXaXphcmQoU3RyaW5nIHBsdWdpbk5TLFN0cmluZyB3aXphcmRJZCxTdHJpbmcgb2JqZWN0Q2xhc3NJZCxJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKCk7Ci0KLSAgICAgICAgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNQb3B1cEpVbml0V2l6YXJkKHN0YXR1c0hhbmRsZXIpOwotICAgICAgICB3aXphcmQuc2V0SW5pdGlhbERhdGEod2l6YXJkSWQpOwotICAgICAgICBQcm9ncmVzc01vbml0b3JEaWFsb2cgbW9uaXRvciA9IG5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgCXdpemFyZC5ydW5IZWFkTGVzcyhpbml0aWFsU2VsZWN0aW9uLCBtb25pdG9yKTsKLSAgICAgICAgfSAKLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzdGF0dXNIYW5kbGVyLmdldEFsbFJlcG9ydHMoKTsKLQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hDcmVhdGlvbldpemFyZChTdHJpbmcgd2l6YXJkSWQsU3RyaW5nIG9iamVjdENsYXNzSWQsSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGxhdW5jaFdpemFyZCgib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIix3aXphcmRJZCxvYmplY3RDbGFzc0lkLGluaXRpYWxTZWxlY3Rpb24pOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hDb25zdW1wdGlvbldpemFyZChTdHJpbmcgd2l6YXJkSWQsU3RyaW5nIG9iamVjdENsYXNzSWQsSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGxhdW5jaFdpemFyZCgib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpIix3aXphcmRJZCxvYmplY3RDbGFzc0lkLGluaXRpYWxTZWxlY3Rpb24pOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQwYmFhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icGVyZm9ybWFuY2UiIGJhc2VkaXI9Ii4iPgotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotICA8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQkKLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9InBlcmYtdGVzdHMtZmlsZSIgdmFsdWU9IiR7dGVzdERpcn0vcGVyZm9ybWFuY2UtdGVzdHMueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2UiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd29ya3NwYWNlX3dzX3BlcmZvcm1hbmNlIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9Ii1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA9JHt0ZXN0RGlyfS8ke3RvbWNhdDUwRGlyfSIvPgotICAgICAgCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlX3N1aXRlIj4KLSAgCQotICAJPCEtLSBJdGVyYXRpb24gMSAtLT4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4gIAkKLSAgCQotICAJPCEtLSBJdGVyYXRpb24gMiAtLT4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4gIAkKLQotICAJPCEtLSBJdGVyYXRpb24gMyAtLT4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4gIAkKLQotICAJPCEtLSBJdGVyYXRpb24gNCAtLT4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4gIAkKLQotICAJPCEtLSBJdGVyYXRpb24gNSAtLT4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JCVUphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckNsaWVudEF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyVERKYXZhQXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4gIAkKLSAgCQotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgPCEtLSBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gIAotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSIgZGVwZW5kcz0iaW5pdCxwZXJmb3JtYW5jZV9zdWl0ZSxjbGVhbnVwIj4KLSAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIzZmJhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0idGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzYzZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotdGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODBkNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjk0MGFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jVGh1IE1heSAzMSAxNDoyNzozOSBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWluc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWEyYTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6NTggRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzOGEzOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHM7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWksCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLAotIG9yZy5lY2xpcHNlLmpzdC53cywKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWksCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLAotIG9yZy5lY2xpcHNlLmplbS51dGlsLAotIG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLAotIG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcsCi0gb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLAotIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NTc2ZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBkYXRhLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHJlYWRtZS50eHQsXAotICAgICAgICAgICAgICAgdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGJpbi8KLWphcnMuY29tcGlsZS5vcmRlciA9IHRlc3RzLmphcgotc291cmNlLnRlc3RzLmphciA9IHRlc3RzLwotb3V0cHV0LnRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9jbGllbnQvRWNob1Byb3h5VGVzdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9CVUphdmEvY2xpZW50L0VjaG9Qcm94eVRlc3QuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjBlM2IzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9jbGllbnQvRWNob1Byb3h5VGVzdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEuaW8uKiIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iZWNob1Byb3h5IiBjbGFzcz0iZm9vLkVjaG9Qcm94eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxodG1sPgotPCVAIGluY2x1ZGUgZmlsZSA9ICIvb3V0cHV0RmlsZVBhdGguanNwZiIgJT4KLTwlCi0gICAvLyBIVFRQL1BPU1QgcGFyYW1ldGVyOgotICAgLy8gdGVzdElucHV0IC0gdGhlIFN0cmluZyBhcmd1bWVudCB0byBjYWxsIHRoZSBwcm94eSB3aXRoLgotICAgU3RyaW5nIHRlc3RJbnB1dCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ0ZXN0SW5wdXQiKTsKLSAgIAotICAgLy8gRXhlY3V0ZSB0aGUgV2ViIHNlcnZpY2UuCi0gICBTdHJpbmcgcmVzdWx0ID0gZWNob1Byb3h5LmVjaG9TdHJpbmcodGVzdElucHV0KTsKLSAgIAotICAgLy8gV3JpdGUgdGhlIHJlc3VsdCB0byB0aGUgb3V0cHV0RmlsZVBhdGguCi0gICBQcmludFdyaXRlciBwdyA9IG51bGw7Ci0gICB0cnkKLSAgIHsKLSAgICAgcHcgPSBuZXcgUHJpbnRXcml0ZXIobmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0cHV0RmlsZVBhdGgpKTsKLSAgICAgcHcucHJpbnQocmVzdWx0KTsKLSAgICAgcHcuZmx1c2goKTsKLSAgIH0gICAKLSAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgIHsKLSAgIH0KLSAgIGZpbmFsbHkKLSAgIHsKLSAgICAgaWYgKHB3ICE9IG51bGwpCi0gICAgICAgcHcuY2xvc2UoKTsKLSAgIH0KLSU+Ci08L2JvZHk+Ci08cD4KLXRlc3RJbnB1dDogPCU9dGVzdElucHV0JT4KLTxwPgotb3V0cHV0RmlsZVBhdGg6IDwlPW91dHB1dEZpbGVQYXRoJT4KLTxwPgotVGhlIHJlc3VsdCBpcyA8JT1yZXN1bHQlPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9zcmMvZm9vL0VjaG8uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9zcmMvZm9vL0VjaG8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU4OTNkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9CVUphdmEvc3JjL2Zvby9FY2hvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXBhY2thZ2UgZm9vOwotCi1wdWJsaWMgY2xhc3MgRWNobwotewotCXB1YmxpYyBTdHJpbmcgZWNob1N0cmluZyhTdHJpbmcgaW5wdXQpCi0JewotCQlyZXR1cm4gaW5wdXQ7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1RESmF2YS9FY2hvLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9UREphdmEvRWNoby53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmRmMzJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1RESmF2YS9FY2hvLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZm9vIiB4bWxuczppbXBsPSJodHRwOi8vZm9vIiB4bWxuczppbnRmPSJodHRwOi8vZm9vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOndzaT0iaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx3c2RsOnR5cGVzPgotICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2ZvbyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczppbXBsPSJodHRwOi8vZm9vIiB4bWxuczppbnRmPSJodHRwOi8vZm9vIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICA8ZWxlbWVudCBuYW1lPSJlY2hvU3RyaW5nUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZWNob1N0cmluZ1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJpbnB1dCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NjaGVtYT4KLSA8L3dzZGw6dHlwZXM+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ1Jlc3BvbnNlIj4KLQotICAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbXBsOmVjaG9TdHJpbmdSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nUmVxdWVzdCI+Ci0KLSAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW1wbDplY2hvU3RyaW5nIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJFY2hvIj4KLQotICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotCi0gICAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJpbXBsOmVjaG9TdHJpbmdSZXF1ZXN0IiBuYW1lPSJlY2hvU3RyaW5nUmVxdWVzdCIvPgotCi0gICAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0iaW1wbDplY2hvU3RyaW5nUmVzcG9uc2UiIG5hbWU9ImVjaG9TdHJpbmdSZXNwb25zZSIvPgotCi0gICAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gICA8L3dzZGw6cG9ydFR5cGU+Ci0KLSAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iRWNob1NvYXBCaW5kaW5nIiB0eXBlPSJpbXBsOkVjaG8iPgotCi0gICAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0KLSAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLQotICAgICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLQotICAgICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZWNob1N0cmluZ1JlcXVlc3QiPgotCi0gICAgICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgICAgPC93c2RsOmlucHV0PgotCi0gICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZWNob1N0cmluZ1Jlc3BvbnNlIj4KLQotICAgICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0KLSAgICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgIDwvd3NkbDpiaW5kaW5nPgotCi0gICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkVjaG9TZXJ2aWNlIj4KLQotICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJpbXBsOkVjaG9Tb2FwQmluZGluZyIgbmFtZT0iRWNobyI+Ci0KLSAgICAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwODAvVGVzdFdlYi9zZXJ2aWNlcy9FY2hvIi8+Ci0KLSAgICAgIDwvd3NkbDpwb3J0PgotCi0gICA8L3dzZGw6c2VydmljZT4KLQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NQZXJmUHJvamVjdHMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NQZXJmUHJvamVjdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWQ4MWY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1dTUGVyZlByb2plY3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1dTVGVzdFByb2plY3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1dTVGVzdFByb2plY3RzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyZTllYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9XU1Rlc3RQcm9qZWN0cy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS93ZWJjbGllbnQvb3V0cHV0RmlsZVBhdGguanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL3dlYmNsaWVudC9vdXRwdXRGaWxlUGF0aC5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGE3YWVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL3dlYmNsaWVudC9vdXRwdXRGaWxlUGF0aC5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPiAgCi08JQotICAgU3RyaW5nIG91dHB1dEZpbGVQYXRoID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIm91dHB1dEZpbGVQYXRoIik7Ci0lPiAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UzOTQ3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA0MjQgICAxMzgwNjAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNzAzMjcgICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9SmF2YSBXZWIgU2VydmljZXMgVG9vbHMgVGVzdHMKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1QT1BVUF9URVNUX1dTREw9VGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT049R2VuZXJhdGUgSmF2YSBiZWFuIHNrZWxldG9uCi1BQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWT1HZW5lcmF0ZSBDbGllbnQKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY0NTU5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0gICAgICAgIAotICAgICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluayIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1NLRUxFVE9OIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgICAgIAotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluayIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFkiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2bGV0TGluayIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmFjdGlvbi5XU0RMRmlsZU1lbnUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9URVNUX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgCi0gICAgICA8L2V4dGVuc2lvbj4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0ZXJzIj4KLSAgICAgICAgIDxmYWN0b3J5IAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLldTQ3VzdG9tQWRhcHRlckZhY3RvcnkiIAotICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIj4KLSAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIi8+Ci0gICAgICAgICA8L2ZhY3Rvcnk+Ci0gICAgICA8L2V4dGVuc2lvbj4KLQotICAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0ZXJzIj4KLSAgICAgICAgIDxmYWN0b3J5IAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLldTQ3VzdG9tQWRhcHRlckZhY3RvcnkiIAotICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIj4KLSAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9ImphdmEubGFuZy5TdHJpbmciLz4KLSAgICAgICAgIDwvZmFjdG9yeT4KLSAgICAgIDwvZXh0ZW5zaW9uPiAgCi0gICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9yZWFkbWUudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMjk1NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVRoZSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIGluIGFyZTogCi0KLS1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA9RTpcXFRvbWNhdFxcVG9tY2F0NS4wCi0KLSwgd2hlcmUgIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIiBpcyB0aGUgaW5zdGFsbCBkaXJlY3Rvcnkgb2YgeW91ciBUb21jYXQgdjUuMCBzZXJ2ZXIuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZTRjNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSA8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MD0ke3Rlc3REaXJ9LyR7dG9tY2F0NTBEaXJ9Ii8+Ci0JCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgPGRlbGV0ZT4KLSAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImpzdC13cy1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanN0X3dzX2ZvbGRlciIvPgotICAgIDxkZWxldGUgZGlyPSIke2pzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7anN0LXdzLWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LkFsbFdTSlVuaXRUZXN0cyIgLz4KLSAgIAkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAJCi0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL1dTV2l6YXJkVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9XU1dpemFyZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRiOGUxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL1dTV2l6YXJkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzEyMTcgIDE4NzI4MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMjA3ICAyMTczNDYgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTV2l6YXJkVGVzdCBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50cwotewotCXByb3RlY3RlZCBJRW52aXJvbm1lbnQgZW52XzsKLQlwcm90ZWN0ZWQgSVJ1bnRpbWUgc2VydmVyUnVudGltZV87Ci0JcHJvdGVjdGVkIElTZXJ2ZXIgc2VydmVyXzsKLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbl87Ci0gIAotICBwdWJsaWMgU3RyaW5nIGRlZmF1bHRVUkxfID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8iOwotCQotCS8qKgotCSAqIFNldCB1cCB0aGUgd29ya3NwYWNlIGZvciB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkIEpVbml0IHRlc3QuIFNldHVwIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0JICogMSkgT2J0YWluIGFuIGluc3RhbmNlIG9mIHRoZSBlbnZpcm9ubWVudC4KLQkgKiAyKSBJbnN0YWxsIHRoZSBzZXJ2ZXIgcnVudGltZS4KLQkgKiAzKSBJbnN0YWxsIHRoZSBpbnB1dCBkYXRhLiBUaGlzIG1heSBpbmNsdWRlIHByb2plY3RzLCBzb3VyY2UgZmlsZXMgZXRjLgotCSAqIDQpIEluc3RhbGwgYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZlciBpZiByZXF1aXJlZC4gVGhpcyBtYXkgYWxzbyBpbmNsdWRlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGlucHV0IGRhdGEgb24gdGhlIHNlcnZlci4KLQkgKiA1KSBJbml0aWFsaXplIHRoZSBKMkVFLCBXZWIgU2VydmljZSBSdW50aW1lIGFuZCBTZXJ2ZXIgdHlwZSBkZWZhdWx0cyBmb3IgdGhlIFdlYiBTZXJ2aWNlIHdpemFyZCB0byB1c2UuCi0JICogNikgSW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gb2JqZWN0IHRvIHNldCB0aGUgY29udGV4dCBmb3IgdGhlIFdlYiBTZXJ2aWNlIHdpemFyZC4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gR2V0IGFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGVudmlyb25tZW50IHdpdGggdGhlIEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHRvIG1pbmltaXplIFVJIGRpYWxvZyBibG9ja3MuCi0JICAJUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0ID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotCQlFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgICBoYW5kbGVyICAgICAgICAgPSBuZXcgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKTsKLQkJRWNsaXBzZUVudmlyb25tZW50ICAgICAgICAgZW52aXJvbm1lbnQgICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgcmVzb3VyY2VDb250ZXh0LCBoYW5kbGVyICk7Ci0JICAKLQkJZW52XyA9IGVudmlyb25tZW50OyAKLQkJYXNzZXJ0VHJ1ZShlbnZfICE9IG51bGwpOwotCQkKLQkJc2VydmVyXyA9IG51bGw7Ci0JCUpVbml0VXRpbHMuaGlkZUFjdGlvbkRpYWxvZ3MoKTsKLQkJaW5zdGFsbFNlcnZlclJ1bnRpbWUoKTsKLQkJaW5zdGFsbFNlcnZlcigpOwotCQkKLQkJLy8gdW56aXAgcHJlLWNvbmZpZ3VyZWQgd29ya3NwYWNlIHByb2plY3RzCi0JCS8vaWYgKCFQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoV1NKVW5pdENvbnN0YW50cy5CVV9QUk9KRUNUX05BTUUpLmV4aXN0cygpKQotCQkJY3JlYXRlUHJvamVjdHMoKTsJCQotCQkKLQkJaW5zdGFsbElucHV0RGF0YSgpOwotCQlpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCk7Ci0JCWluaXRJbml0aWFsU2VsZWN0aW9uKCk7Ci0JfQotCQotCS8qKgotCSAqIEluc3RhbGwgdGhlIHNlcnZlciBydW50aW1lLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5zdGFsbFNlcnZlclJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluc3RhbGxzIHRoZSBpbnB1dCBkYXRhIGZyb20gYW4gYWdncmVnYXRvci4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGVudmlyb25tZW50LCBydW50aW1lCi0JICogYW5kIHNlcnZlciBhcmUgY29ycmVjdGx5IHNldCBvbiB0aGUgYWdncmVnYXRlIHNpbmNlIGl0cyBsaWZlY3ljbGUgbWV0aG9kcyBhcmUgbm90IG5lY2Vzc2FyaWx5Ci0JICogY2FsbGVkLgotCSAqIEBwYXJhbSBlbnYKLQkgKiBAcGFyYW0gc2VydmVyUnVudGltZQotCSAqIEBwYXJhbSBzZXJ2ZXIKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGluc3RhbGxJbnB1dERhdGEoSUVudmlyb25tZW50IGVudixJUnVudGltZSBzZXJ2ZXJSdW50aW1lLElTZXJ2ZXIgc2VydmVyKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQllbnZfID0gZW52OwotCQlzZXJ2ZXJSdW50aW1lXyA9IHNlcnZlclJ1bnRpbWU7Ci0JCXNlcnZlcl8gPSBzZXJ2ZXI7Ci0JCS8vaW5zdGFsbElucHV0RGF0YSgpOwotCX0KLQkKLQkvLyBDcmVhdGVzIHByb2plY3RzIGZyb20gdGhlIHByb3ZpZGVkIFpJUCBmaWxlLgotLy8JcHVibGljIHN0YXRpYyBib29sZWFuIGNyZWF0ZVByb2plY3RzKCkgewotLy8JCUlQYXRoIGxvY2FsWmlwUGF0aCA9IGdldExvY2FsUGF0aCgpOwotLy8JCVByb2plY3RVbnppcFV0aWwgdXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsKGxvY2FsWmlwUGF0aCwgcGVyZl9wcm9qZWN0TmFtZXMpOwotLy8JCXJldHVybiB1dGlsLmNyZWF0ZVByb2plY3RzKCk7Ci0vLwl9Ci0JCi0vLwlwcml2YXRlIHN0YXRpYyBJUGF0aCBnZXRMb2NhbFBhdGgoKSB7Ci0vLwkJVVJMIHVybCA9IFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5maW5kKHBlcmZfemlwRmlsZVBhdGgpOwotLy8JCXRyeSB7Ci0vLwkJCXVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodXJsKTsKLS8vCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotLy8JCXJldHVybiBuZXcgUGF0aCh1cmwuZ2V0UGF0aCgpKTsKLS8vCX0JCi0JCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIHRoZSBuZWNlc3NhcnkgcHJvamVjdHMgZm9yIHRoZSB0ZXN0cy4gIFRoaXMgY291bGQgYmUgV2ViLCBKYXZhLCBvciBvdGhlciBKMkVFIHByb2plY3RzLgotICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluc3RhbGwgdGhlIGlucHV0IGRhdGEgZm9yIHRoZSB0ZXN0LiBUaGlzIG1heSBpbmNsdWRlIHByb2plY3RzLCBzb3VyY2UgZmlsZXMgZXRjLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogSW5zdGFsbCBhbiBpbnN0YW5jZSBvZiB0aGUgc2VydmVyLiBUaGlzIG1heSBhbHNvIGNvbmZpZ3VyZSBpbnB1dCBkYXRhIG9uIHRoZSBzZXJ2ZXIuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbnN0YWxsU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBJbml0aWFsaXplIHRoZSBKMkVFIGxldmVsLCBXZWIgU2VydmljZSBydW50aW1lIHR5cGUgYW5kIFNlcnZlciBkZWZhdWx0cyBmb3IgdGhlIHRlc3QgY2FzZS4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluaXRpYWxpemUgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHdoaWNoIGRyaXZlcyB0aGUgV2ViIFNlcnZpY2Ugd2l6YXJkLiBUaGlzIGNvdWxkIGluY2x1ZGUgc291cmNlIEphdmEgZmlsZXMsCi0JICogV1NETCBVUkxzIGFuZCBldmVuIEVKQnMuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogQ2xlYW4gdXAgdGhlIHdvcmtzcGFjZS4gQ2xlYW51cCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzOgotCSAqIDEpIERlbGV0ZSB0aGUgaW5wdXQgZGF0YS4gVGhpcyBzaG91bGQgaW5jbHVkZSByZW1vdmFsIG9mIGNvbmZpZ3VyYXRpb24gZGF0YSBvbiB0aGUgc2VydmVyIGlmIG5lY2Vzc2FyeS4KLQkgKiAyKSBTdG9wIHRoZSBzZXJ2ZXIuCi0JICogMykgRGVsZXRlIHRoZSBzZXJ2ZXIuCi0JICogNCkgRGVsZXRlIHRoZSBzZXJ2ZXIgcnVudGltZS4KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXN0b3BTZXJ2ZXIoKTsKLS8vCQlkZWxldGVTZXJ2ZXIoKTsKLS8vICAgICAgZGVsZXRlSW5wdXREYXRhKCk7Ci0vLwkJZGVsZXRlU2VydmVyUnVudGltZSgpOwotCX0KLQkKLQkvKioKLQkgKiBEZWxldGUgdGhlIGlucHV0IGRhdGEuIFRoaXMgc2hvdWxkIGluY2x1ZGUgcmVtb3ZhbCBvZiBwcm9qZWN0cywgc3JjIGZpbGVzIGV0Yy4gYXMgd2VsbCBhcyByZW1vdmFsIG9mIGFueSBzZXJ2ZXIgY29uZmlndXJlZCBkYXRhLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBTdG9wIHRoZSBzZXJ2ZXIgaWYgaXQgaXMgcnVubmluZy4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHN0b3BTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlpZiAoc2VydmVyXyAhPSBudWxsICYmIHNlcnZlcl8uZ2V0U2VydmVyU3RhdGUoKSA9PSBJU2VydmVyLlNUQVRFX1NUQVJURUQpCi0JCQlzZXJ2ZXJfLnN0b3AodHJ1ZSk7Ci0JCWFzc2VydFRydWUoc2VydmVyXy5nZXRTZXJ2ZXJTdGF0ZSgpID09IElTZXJ2ZXIuU1RBVEVfU1RPUFBFRCk7Ci0JfQotCQotCS8qKgotCSAqIERlbGV0ZSB0aGUgc2VydmVyLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaWYgKHNlcnZlcl8gIT0gbnVsbCkKLQkJCXNlcnZlcl8uZGVsZXRlKCk7Ci0JfQotCQotCS8qKgotCSAqIERlbGV0ZSB0aGUgc2VydmVyIHJ1bnRpbWUuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVTZXJ2ZXJSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaWYgKHNlcnZlclJ1bnRpbWVfICE9IG51bGwpCi0JCQlzZXJ2ZXJSdW50aW1lXy5kZWxldGUoKTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBkZWZhdWx0IFVSTCBpbiB0aGUgZm9ybSBvZjogaHR0cDovL2xvY2FsaG9zdDo5MDgwLzxjb250ZXh0Um9vdD4vPHBhdGg+Ci0JICogQHBhcmFtIHBhdGggLSBhIGZpbGUgb3IgVVJMIHJlbGF0aXZlIHBhdGguCi0JICogQHBhcmFtIGNvbnRleHRSb290IC0gdGhlIGNvbnRleHQgcm9vdCBvZiB0aGUgV2ViIG1vZHVsZSBmb3IgdGhpcyBVUkwuCi0JICogQHJldHVybgotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGVmYXVsdFVSTChTdHJpbmcgcGF0aCxTdHJpbmcgY29udGV4dFJvb3QpCi0JewotCQlTdHJpbmdCdWZmZXIgdXJsID0gbmV3IFN0cmluZ0J1ZmZlcihkZWZhdWx0VVJMXyk7Ci0JCXVybC5hcHBlbmQoY29udGV4dFJvb3QpOwotCQl1cmwuYXBwZW5kKCcvJyk7Ci0JCXVybC5hcHBlbmQocGF0aCk7Ci0JCXJldHVybiB1cmwudG9TdHJpbmcoKTsKLQl9CQotCQotCXByb3RlY3RlZCB2b2lkIGxvZ0JhZFN0YXR1cyhJU3RhdHVzIHN0YXR1cykKLQl7Ci0JCVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coU3RhdHVzVXRpbHMuaW5mb1N0YXR1cygiKioqIEpTVC5XUyBKVU5JVCBFUlJPUiAoU1RBUlQpICoqKiIpKTsKLQkJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhzdGF0dXMpOwotCQlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKFN0YXR1c1V0aWxzLmluZm9TdGF0dXMoIioqKiBKU1QuV1MgSlVOSVQgRVJST1IgKEVORCkgKioqIikpOwotCX0KLQkKLQkvKioKLQkgKiBTcGluIHRoZSBldmVudCBsb29wIGZvciBhd2hpbGUgdG8gZ2l2ZSBiYWNrZ3JvdW5kIGFjdGl2aXR5IGEgY2hhbmNlIHRvCi0JICogZGllIGRvd24uIFRoaXMgZGVjcmVhc2VzIHRoZSBjaGFuY2UgdGhhdCB1bnJlbGF0ZWQgYmFja2dyb3VuZCB3b3JrIHdpbGwKLQkgKiBhZmZlY3QgcmVzdWx0cyBmb3IgdGhlIHNjZW5hcmlvIGJlaW5nIHRlc3RlZC4KLQkgKiAKLQkgKiBAcGFyYW0gZHVyYXRpb24KLQkgKiAgICAgICAgICAgIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBzcGluIHRoZSBldmVudCBsb29wLgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHJ1bkV2ZW50TG9vcChmaW5hbCBpbnQgZHVyYXRpb24pIHsKLQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0JCVJ1bm5hYmxlIHVwZGF0ZSA9IG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQkJd2hpbGUgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQgPCBkdXJhdGlvbikgewotCQkJCQlpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpCi0JCQkJCQlkaXNwbGF5LnNsZWVwKCk7Ci0JCQkJfQotCQkJfQotCQl9OwotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgPT0gbnVsbCkKLQkJCWRpc3BsYXkuc3luY0V4ZWModXBkYXRlKTsKLQkJZWxzZQotCQkJdXBkYXRlLnJ1bigpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL1dTV2l6YXJkVG9tY2F0NTBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9XU1dpemFyZFRvbWNhdDUwVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjYyNmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL1dTV2l6YXJkVG9tY2F0NTBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5XU1dpemFyZFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NXaXphcmRUb21jYXQ1MFRlc3QgZXh0ZW5kcyBXU1dpemFyZFRlc3QgewotICAKLQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41MCI7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCI7Ci0JICAKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS5ldG9vbHMud2Vic2VydmljZS53YXMudGVzdHMuV1NXaXphcmRUZXN0I2luc3RhbGxTZXJ2ZXJSdW50aW1lKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluc3RhbGxTZXJ2ZXJSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICBzZXJ2ZXJSdW50aW1lXyA9IEpVbml0VXRpbHMuY3JlYXRlU2VydmVyUnVudGltZShSVU5USU1FVFlQRUlEX1RDNTAsIFNFUlZFUl9JTlNUQUxMX1BBVEgpOwotICB9Ci0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS5ldG9vbHMud2Vic2VydmljZS53YXMudGVzdHMuV1NXaXphcmRUZXN0I2luc3RhbGxTZXJ2ZXIoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5zdGFsbFNlcnZlcigpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgc2VydmVyXyA9IEpVbml0VXRpbHMuY3JlYXRlU2VydmVyKCJBcGFjaGUgVG9tY2F0IHY1MCIsIFNFUlZFUlRZUEVJRF9UQzUwLCBzZXJ2ZXJSdW50aW1lXywgZW52XywgbnVsbCApOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGx1Z2luL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMmM3Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW4iKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWY1MmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDMxNCAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcxMDMwICAyMDgxMjQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMDMxICAyMDgxMjQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcxMTE2ICAyMDgxMjQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0UmVzdWx0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdG8gcnVuIGFsbCB0aGUgdW5pdHRlc3QgdGVzdHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxXU0pVbml0VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHMKLXsKLSAgLyoqCi0gICAqIE1ldGhvZCBwYXJzZUFyZ3MuCi0gICAqIAotICAgKiBAcGFyYW0gYXJncwotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlQXJncyhPYmplY3QgYXJncykKLSAgewotICAgIC8vIHR5cGljaWFsbHkgYXJncyBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLAotICAgIC8vIG5vdCBzdXJlIHdoZW4gaXQgd291bGRuJ3QgYmUuCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgbmV3IEFsbFdTSlVuaXRUZXN0cygpLnJ1bk1haW4oYXJncyk7Ci0gIH0KLQotICAKLSAgcHVibGljIE9iamVjdCBydW5NYWluKE9iamVjdCBhcmdzKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVGVzdFJ1bm5lciB0ZXN0UnVubmVyID0gbnVsbDsKLQotICAgICAgcGFyc2VBcmdzKGFyZ3MpOwotCi0gICAgICB0ZXN0UnVubmVyID0gbmV3IFRlc3RSdW5uZXIoU3lzdGVtLm91dCk7Ci0KLSAgICAgIFRlc3Qgc3VpdGUgPSBzdWl0ZSgpOwotICAgICAgVGVzdFJlc3VsdCB0ZXN0UmVzdWx0ID0gdGVzdFJ1bm5lci5kb1J1bihzdWl0ZSwgZmFsc2UpOwotICAgICAgcHJpbnRIZWFkZXIodGVzdFJlc3VsdCk7ICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0gICAgCi0gICAgVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLSAgICB0ZXN0U3VpdGUuYWRkVGVzdCggQ29tcG9uZW50Q3JlYXRpb25UZXN0cy5zdWl0ZSgpICk7Ci0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIEoyRUVVdGlsc1Rlc3RzLnN1aXRlKCkgKTsKLSAgIAotICAgIC8vIFRlc3RzIHdoaWNoIHJlcXVpcmUgYSBUb21jYXQgc2VydmVyCi0gICAgU3RyaW5nIHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7Ci0gICAgaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkgewotICAgICAgdGVzdFN1aXRlLmFkZFRlc3QoIEJVSmF2YUF4aXNUQzUwLnN1aXRlKCkgKTsKLSAgICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBUREphdmFBeGlzVEM1MC5zdWl0ZSgpICk7Ci0gICAgICB0ZXN0U3VpdGUuYWRkVGVzdCggQ2xpZW50QXhpc1RDNTAuc3VpdGUoKSApOwotICAgICAgdGVzdFN1aXRlLmFkZFRlc3QoIFNlcnZlckNyZWF0aW9uVGVzdHMuc3VpdGUoKSk7Ci0KLSAgICB9Ci0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIFJlc291cmNlVXRpbHNUZXN0cy5zdWl0ZSgpICk7Ci0KLSAgICByZXR1cm4gdGVzdFN1aXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50cyB0aGUgaGVhZGVyIG9mIHRoZSByZXBvcnQKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHByaW50SGVhZGVyKFRlc3RSZXN1bHQgcmVzdWx0KQotICB7Ci0gICAgaWYgKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50KCJPSyIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgKCIgKyByZXN1bHQucnVuQ291bnQoKSArICIgdGVzdHMpIik7Ci0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMVVJFUyEhISIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAiVGVzdHMgcnVuOiAiCi0gICAgICAgICAgKyByZXN1bHQucnVuQ291bnQoKQotICAgICAgICAgICsgIiwgIEZhaWx1cmVzOiAiCi0gICAgICAgICAgKyByZXN1bHQuZmFpbHVyZUNvdW50KCkKLSAgICAgICAgICArICIsICBFcnJvcnM6ICIKLSAgICAgICAgICArIHJlc3VsdC5lcnJvckNvdW50KCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9CVUphdmFBeGlzVEM1MC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9CVUphdmFBeGlzVEM1MC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzU1NmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQlVKYXZhQXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDUwOSAgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMTE2ICAgMjA4MTI0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzEyMTcgICAxODcyODAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDIwNyAgIDIxNzM0NiBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLldTV2l6YXJkVG9tY2F0NTBUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogQm90dG9tIHVwIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEJVSmF2YUF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCS8vIENvbnN0YW50cwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gIFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7IAotCXByaXZhdGUgU3RyaW5nIFBST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuQlVfUFJPSkVDVF9OQU1FOwotICAgIAotCXByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0JCi0JCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKEJVSmF2YUF4aXNUQzUwLmNsYXNzKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCQotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgZm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwkJCi0JCUpVbml0VXRpbHMuY29weVRlc3REYXRhKCJCVUphdmEvc3JjIixmb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZm9sZGVyLmdldEZpbGUobmV3IFBhdGgoImZvby9FY2hvLmphdmEiKSk7Ci0JCS8vIEVuc3VyZSB0aGF0IEVjaG8uY2xhc3MgaXMgYnVpbHQgaW46Ci0JCS8vIDxXZWIgUHJvamVjdD4vV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvZm9vL0VjaG8uY2xhc3MKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JCS8vYXNzZXJ0VHJ1ZShKVW5pdFV0aWxzLmdldENsYXNzZXNGb2xkZXJGb3JXZWJQcm9qZWN0KFdFQl9QUk9KRUNUX05BTUUpLmdldEZpbGUobmV3IFBhdGgoImZvby9FY2hvLmNsYXNzIikpLmV4aXN0cygpKTsKLQkJCi0JCQotCX0KLQkKLSAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgaWYgKHdlYlByb2plY3Q9PW51bGwgfHwgIXdlYlByb2plY3QuZXhpc3RzKCkpewotICAgICAgICAgICAgSlVuaXRVdGlscy5jcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsIHNlcnZlcl8uZ2V0SWQoKSwgU0VSVkVSVFlQRUlEX1RDNTAsICIxNCIsIGVudl8sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0JCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IDUuMAotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwotCQlKVW5pdFV0aWxzLnNldFNlcnZpY2VTY2VuYXJpb0RlZmF1bHQoKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RCVUphdmFBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkgICAgSlVuaXRVdGlscy5kaXNhYmxlV1NJRGlhbG9nKHdlYlByb2plY3QpOwotCi0JICAgIElTdGF0dXNbXSBzdGF0dXMgPSBKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0JPVFRPTV9VUCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCi0gICAgICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0JCQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsgICAgCi0JCUlGb2xkZXIgd2ViQ29udGVudEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgIAotICAgICAgICBJRm9sZGVyIHdzZGxGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpOwotICAgICAgICBpZiAoIXdzZGxGb2xkZXIuZXhpc3RzKCkpewotICAgICAgICAJcnVuRXZlbnRMb29wKDMwMDApOwotICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3AuLiIpOwotICAgICAgICB9Ci0JCWFzc2VydFRydWUod3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQlUgd3NkbCBmb2xkZXIgZXhpc3RzPyA9ICIrd3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JCQotCQlpZiAoISh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKSl7Ci0JCQlydW5FdmVudExvb3AoMzAwMCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgZXZlbnQgbG9vcC4uIik7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJCVSB3c2RsIGZpbGUgZXhpc3RzPyA9ICIgKyAod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCkpOwotICAgIAotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJLy8KLQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCWxvZ0JhZFN0YXR1cyhzW2ldKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCWFzc2VydEVxdWFscygiQlUgVW5leHBlY3RlZCBudW1iZXIgb2YgY2xpZW50IGVycm9yIHJlcG9ydHMiLCAwLCBzLmxlbmd0aCk7Ci0KLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFJlbW92ZSB0aGUgRUFSIGZyb20gdGhlIHNlcnZlci4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkvL0pVbml0VXRpbHMucmVtb3ZlTW9kdWxlRnJvbVNlcnZlcihzZXJ2ZXJfLHdlYlByb2plY3QsZW52Xyk7Ci0JCQotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsIG51bGwpOwotICAgICAgICBhc3NlcnRGYWxzZSh3ZWJQcm9qZWN0LmV4aXN0cygpKTsKLQkJCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9DbGllbnRBeGlzVEM1MC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9DbGllbnRBeGlzVEM1MC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWU0MTE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQ2xpZW50QXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDUwOSAgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMTE2ICAgMjA4MTI0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzEyMTcgICAxODcyODAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDIwNyAgIDIxNzM0NiBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLldTV2l6YXJkVG9tY2F0NTBUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogQ2xpZW50IHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGNsYXNzIENsaWVudEF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgV1NfUlVOVElNRUlEX0FYSVMgPSBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTOwotICAKLQlwcml2YXRlIFN0cmluZyBDTElFTlRfUFJPSkVDVF9OQU1FID0gV1NKVW5pdENvbnN0YW50cy5DTElFTlRfUFJPSkVDVF9OQU1FOwotCQotCXByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0KLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKXsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoQ2xpZW50QXhpc1RDNTAuY2xhc3MpOwotCX0KLQkKLSAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICghd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0gICAgICAgICAgSlVuaXRVdGlscy5jcmVhdGVXZWJNb2R1bGUoQ0xJRU5UX1BST0pFQ1RfTkFNRSwgQ0xJRU5UX1BST0pFQ1RfTkFNRSwgc2VydmVyXy5nZXRJZCgpLFNFUlZFUlRZUEVJRF9UQzUwLCAiMTQiLCBlbnZfLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0JLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgICAgIElGb2xkZXIgZGVzdEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgICAgICBKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiVERKYXZhIixkZXN0Rm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGRlc3RGb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiRWNoby53c2RsIikpOwkJCi0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCA1LjAgICAgCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1MCk7Ci0JCUpVbml0VXRpbHMuc2V0Q2xpZW50U2NlbmFyaW9EZWZhdWx0KCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCX0KLQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xpZW50QXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewkKLQkgIAkKLQkJSlVuaXRVdGlscy5lbmFibGVQcm94eUdlbmVyYXRpb24odHJ1ZSk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotICAgICAgICAKLQkJSVN0YXR1c1tdIHN0YXR1cyA9IEpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQ0xJRU5ULFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0KLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotICAgIAotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIHNyY0ZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsKLSAgICAKLQkJLy9JRm9sZGVyIHNyY0ZvbGRlciA9IEpVbml0VXRpbHMuZ2V0U291cmNlRm9sZGVyRm9yV2ViUHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLQkJSUZvbGRlciBmb2xkZXIgPSBzcmNGb2xkZXIuZ2V0Rm9sZGVyKCJmb28iKTsKLQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpewotCQkJcnVuRXZlbnRMb29wKDMwMDApOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3AuLiIpOwotCQl9Ci0JCWFzc2VydFRydWUoZm9sZGVyLmV4aXN0cygpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQgamF2YSBwYWNrYWdlIGV4aXN0cz8gPSAiK2ZvbGRlci5leGlzdHMoKSk7Ci0JCQotCQlpZiAoIShmb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApKXsKLQkJCXJ1bkV2ZW50TG9vcCgzMDAwKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyBldmVudCBsb29wLi4iKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudCBKYXZhIGZpbGVzIGV4aXN0cz8gPSAiKyhmb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApKTsKLQkJYXNzZXJ0VHJ1ZShmb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotCQkKLQkJLy8gQ2hlY2sgc3RhdHVzIGhhbmRsZXIgZm9yIGVycm9ycwotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCWxvZ0JhZFN0YXR1cyhzW2ldKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9ICAgIAotCQlhc3NlcnRFcXVhbHMoIkNsaWVudCBVbmV4cGVjdGVkIG51bWJlciBvZiBjbGllbnQgZXJyb3IgcmVwb3J0cyIsIDAsIHMubGVuZ3RoKTsKLQotCX0KLQkKLSAgLyoqCi0gICAqIFJlbW92ZSB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9Db21wb25lbnRDcmVhdGlvblRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0NvbXBvbmVudENyZWF0aW9uVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIyYjc0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0NvbXBvbmVudENyZWF0aW9uVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwODAzMTMgIDEyNjc3NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5ldG9vbHMuY29tbW9uLnRlc3QuYXBpdG9vbHMuUHJvamVjdFVuemlwVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotCi0vKioKLSAqIFRlc3RzIHRoZSB2YXJpb3VzIENvbXBvbmVudCBjcmVhdGlvbiBjb21tYW5kcwotICovCi1wdWJsaWMgY2xhc3MgQ29tcG9uZW50Q3JlYXRpb25UZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50cyB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKXsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoQ29tcG9uZW50Q3JlYXRpb25UZXN0cy5jbGFzcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXZWJDb21wb25lbnRDcmVhdGlvbigpewotCi0gICAgICAgIGNyZWF0ZVNlcnZlclJ1bnRpbWUoKTsKLSAgICAgICAgY3JlYXRlRHluYW1pY1dlYk1vZHVsZShwcm9qZWN0TmFtZXMpOwotICAgICAgICAvL2NyZWF0ZVByb2plY3RzKCk7Ci0gICAgICAgIC8vY3JlYXRlV2ViTW9kdWxlKHByb2plY3ROYW1lLCBwcm9qZWN0TmFtZSwgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpOwotICAgICAgICAvL2NyZWF0ZVdlYk1vZHVsZShwcm9qZWN0Mk5hbWUsIHByb2plY3QyTmFtZSwgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQpOwotCi0JfQotICAKLQkvLyBDcmVhdGVzIHByb2plY3RzIGZyb20gdGhlIHByb3ZpZGVkIFpJUCBmaWxlLgotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjcmVhdGVQcm9qZWN0cygpIHsKLQkJSVBhdGggbG9jYWxaaXBQYXRoID0gZ2V0TG9jYWxQYXRoKCk7Ci0JCVByb2plY3RVbnppcFV0aWwgdXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsKGxvY2FsWmlwUGF0aCwgcHJvamVjdE5hbWVzKTsKLQkJcmV0dXJuIHV0aWwuY3JlYXRlUHJvamVjdHMoKTsKLQl9Ci0JCi0KLQlwcml2YXRlIHN0YXRpYyBJUGF0aCBnZXRMb2NhbFBhdGgoKSB7Ci0JCVVSTCB1cmwgPSBUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZmluZCh6aXBGaWxlUGF0aCk7Ci0JCXRyeSB7Ci0JCQl1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHVybCk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG5ldyBQYXRoKHVybC5nZXRQYXRoKCkpOwotCX0JCi0gIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVNlcnZlclJ1bnRpbWUoKXsKLSAgICAgIAotICAgICAgdHJ5IHsKLSAgICAgICAgSlVuaXRVdGlscy5jcmVhdGVTZXJ2ZXJSdW50aW1lKFJVTlRJTUVUWVBFSURfVEM1MCwgU0VSVkVSX0lOU1RBTExfUEFUSCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChFeGNlcHRpb24gZSl7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9ICAgICAgCi0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgY3JlYXRlRHluYW1pY1dlYk1vZHVsZShTdHJpbmdbXSBwcm9qZWN0TmFtZXMpewotICAgIAkKLSAgICAgIGZvciAoaW50IGk9MDtpPHByb2plY3ROYW1lcy5sZW5ndGg7aSsrKSB7Ci0gICAgICAgICAgSlVuaXRVdGlscy5jcmVhdGVXZWJNb2R1bGUocHJvamVjdE5hbWVzW2ldLCBwcm9qZWN0TmFtZXNbaV0sIG51bGwsIFNFUlZFUlRZUEVJRF9UQzUwLCAiMTQiLCBudWxsLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQotCSAgICAgIElQcm9qZWN0IHAgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lc1tpXSk7Ci0JICAgICAgYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKTsKLSAgICAgIH0KLSAgICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9KMkVFVXRpbHNUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9KMkVFVXRpbHNUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTg5MTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvSjJFRVV0aWxzVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuSjJFRVZlcnNpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5Bc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotCi0vKioKLSAqIEBhdXRob3Igc2VuZ3BsCi0gKgotICovCi1wdWJsaWMgY2xhc3MgSjJFRVV0aWxzVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHN7Ci0KLSAgICBwcml2YXRlIElQcm9qZWN0IHByb2plY3QxID0gbnVsbDsKLSAgICBwcml2YXRlIElQcm9qZWN0IHByb2plY3QyID0gbnVsbDsKLSAgICBwcml2YXRlIElQcm9qZWN0IGVqYlByb2plY3QgPSBudWxsOwotICAgIAotICAgIHByaXZhdGUgU3RyaW5nIGNvbXAxID0gd2ViQ29tcG9uZW50TmFtZTsKLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQkKLQkJLy8gUHJvamVjdCBhbmQgY29tcG9uZW50IG5hbWVzIGluaXRpYWxpemVkIGhlcmUhCi0JCXByb2plY3QxID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJYXNzZXJ0Tm90TnVsbChwcm9qZWN0MSk7Ci0JCQotCQlwcm9qZWN0MiA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0Mk5hbWUpOwotCQlhc3NlcnROb3ROdWxsKHByb2plY3QyKTsKLSAgICAKLSAgICAgICAgZWpiUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlamJQcm9qZWN0TmFtZSk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZWpiUHJvamVjdCk7Ci0JCQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCS8vIFRPRE8gQ2xlYXIgdGhlIHdvcmtzcGFjZQotCQkKLQl9Ci0KLQkgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLQkgIHsKLQkgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoSjJFRVV0aWxzVGVzdHMuY2xhc3MpOwotCSAgfQotCSAKLQkgIHB1YmxpYyB2b2lkIHRlc3RDb21wb25lbnRzRXhpc3QoKXsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RDb21wb25lbnRFeGlzdHMgLi4uIik7Ci0JCSAgSVZpcnR1YWxDb21wb25lbnQgdmMxID0gSjJFRVV0aWxzLmdldFZpcnR1YWxDb21wb25lbnQocHJvamVjdDEpOwotCQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjMiA9IEoyRUVVdGlscy5nZXRWaXJ0dWFsQ29tcG9uZW50KHByb2plY3QyLmdldE5hbWUoKSk7Ci0JCSAgCi0JCSAgYXNzZXJ0VHJ1ZSh2YzEuZXhpc3RzKCkpOwotCQkgIGFzc2VydFRydWUoSjJFRVV0aWxzLmV4aXN0cyhwcm9qZWN0MSkpOwotCQkgIGFzc2VydFRydWUodmMyLmV4aXN0cygpKTsKLQkJICBhc3NlcnRUcnVlKEoyRUVVdGlscy5leGlzdHMocHJvamVjdDIuZ2V0TmFtZSgpLCBwcm9qZWN0Mk5hbWUpKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgRU5EOiB0ZXN0Q29tcG9uZW50RXhpc3RzIC4uLiIpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCB0ZXN0TG9jYXRpb25HZXR0ZXJNZXRob2RzKCl7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0TG9jYXRpb25HZXR0ZXJNZXRob2RzIC4uLiIpOwotCQkgIElQYXRoIGxvYzEgPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdDEpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiV2ViQ29udGVudFBhdGggb2YgcHJvamVjdDEgPSAiK2xvYzEpOwotCQkgIElSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGxvYzEpOwotCQkgIGFzc2VydFRydWUocmVzLmV4aXN0cygpKTsKLQkJICBhc3NlcnRUcnVlKHJlcy50b1N0cmluZygpLmVuZHNXaXRoKCJXZWJDb250ZW50IikpOwotCQkgIAotCQkgIElQYXRoIGxvYzIgPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdDIpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiV2ViQ29udGVudFBhdGggb2YgcHJvamVjdDIgPSAiK2xvYzIpOwotCQkgIElSZXNvdXJjZSByZXMyID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihsb2MyKTsKLQkJICBhc3NlcnRUcnVlKHJlczIuZXhpc3RzKCkpOwotCQkgIGFzc2VydFRydWUocmVzMi50b1N0cmluZygpLmVuZHNXaXRoKCJXZWJDb250ZW50IikpOwkJICAKLQkJICAKLQkJICBJUGF0aCBsb2MzID0gSjJFRVV0aWxzLmdldFdlYkluZlBhdGgocHJvamVjdDEpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiV2ViLUlORiBwYXRoID0gIitsb2MzKTsKLQkJICBJUmVzb3VyY2UgcmVzMyA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIobG9jMyk7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMzLmV4aXN0cygpKTsKLQkJICBhc3NlcnRUcnVlKHJlczMudG9TdHJpbmcoKS5lbmRzV2l0aCgiV0VCLUlORiIpKTsKLQkJICAKLQkJICBJQ29udGFpbmVyIGNvbnRhaW5lciA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHByb2plY3QyKTsKLQkJICBJUmVzb3VyY2UgcmVzNCA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIoY29udGFpbmVyLmdldEZ1bGxQYXRoKCkpOwotCQkgIGFzc2VydEVxdWFscyhyZXMyLCByZXM0KTsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgRU5EOiB0ZXN0TG9jYXRpb25HZXR0ZXJNZXRob2RzIC4uLiIpOwotCQkgIAotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCB0ZXN0SjJFRVZlcnNpb25NZXRob2RzKCl7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0SjJFRVZlcnNpb25NZXRob2RzIC4uLiIpOwotCSAgCQkgIAotCQkgIFN0cmluZyBqMyA9IEoyRUVVdGlscy5nZXRKMkVFVmVyc2lvbkFzU3RyaW5nKHByb2plY3QxKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIkoyRUVWZXJzaW9uIHAxIGFzIFN0cmluZzogIitqMyk7Ci0JCSAgYXNzZXJ0RXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl80X1RFWFQsIGozKTsKLQkJICAKLQkJICBJVmlydHVhbENvbXBvbmVudCB2YzIgPSBKMkVFVXRpbHMuZ2V0VmlydHVhbENvbXBvbmVudChwcm9qZWN0Mik7Ci0JCSAgaW50IGoyID0gSjJFRVV0aWxzLmdldEoyRUVWZXJzaW9uKHZjMik7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJKMkVFVmVyc2lvbnMgcDE6ICIrajIpOwkJICAKLQkJICBhc3NlcnRFcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuU0VSVkxFVF8yXzQsIGoyKTsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgRU5EOiB0ZXN0SjJFRVZlcnNpb25NZXRob2RzIC4uLiIpOwotCSAgfQotCi0JICBwdWJsaWMgdm9pZCB0ZXN0Q29tcG9uZW50R2V0dGVyTWV0aG9kcygpewotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdENvbXBvbmVudEdldHRlck1ldGhvZHMgLi4uIik7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MgPSBKMkVFVXRpbHMuZ2V0QWxsQ29tcG9uZW50cygpOwotCQkgIGNoZWNrVmlydHVhbENvbXBvbmVudHNFeGlzdHModmNzKTsKLQkJICAKLQkJICBJVmlydHVhbENvbXBvbmVudFtdIHZjczIgPSBKMkVFVXRpbHMuZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotCQkgIGNoZWNrVmlydHVhbENvbXBvbmVudHNFeGlzdHModmNzMik7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MzID0gSjJFRVV0aWxzLmdldEFsbFdlYkNvbXBvbmVudHMoKTsKLQkJICBjaGVja1ZpcnR1YWxDb21wb25lbnRzRXhpc3RzKHZjczMpOwotCQkgIAotCQkgIElWaXJ0dWFsQ29tcG9uZW50W10gdmNzNCA9IEoyRUVVdGlscy5nZXRXZWJDb21wb25lbnRzKHByb2plY3QxKTsKLQkJICBjaGVja1ZpcnR1YWxDb21wb25lbnRzRXhpc3RzKHZjczQpOwotCQkgIAotCQkgIFN0cmluZ1tdIG5hbWVzID0gSjJFRVV0aWxzLmdldFdlYkNvbXBvbmVudE5hbWVzKHByb2plY3QyKTsKLQkJICBwcmludE5hbWVTdHJpbmdzKG5hbWVzKTsKLQkJICAKLQkJICBTdHJpbmdbXSBuYW1lczIgPSBKMkVFVXRpbHMudG9Db21wb25lbnROYW1lc0FycmF5KEoyRUVVdGlscy5nZXRDb21wb25lbnRzQnlUeXBlKHByb2plY3QxLCBKMkVFVXRpbHMuV0VCIHwgSjJFRVV0aWxzLkVKQikpOwotCQkgIHByaW50TmFtZVN0cmluZ3MobmFtZXMyKTsKLQkJICAKLQkJICBJUHJvamVjdFtdIHByb2plY3RzID0gSjJFRVV0aWxzLmdldEFsbEZsZXhpYmxlUHJvamVjdHMoKTsKLQkJICBmb3IgKGludCBpPTA7aTxwcm9qZWN0cy5sZW5ndGg7aSsrKXsKLQkJCSAgU3lzdGVtLm91dC5wcmludGxuKCJGbGV4IHByb2plY3QgIitpKyIgPSAiK3Byb2plY3RzW2ldKTsKLQkJICB9Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdENvbXBvbmVudEdldHRlck1ldGhvZHMgLi4uIik7Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgdm9pZCBjaGVja1ZpcnR1YWxDb21wb25lbnRzRXhpc3RzKElWaXJ0dWFsQ29tcG9uZW50W10gdmNzKXsKLQkJICBmb3IgKGludCBpPTA7IGk8dmNzLmxlbmd0aDtpKyspewotCQkJICBJVmlydHVhbENvbXBvbmVudCB2YyA9IHZjc1tpXTsKLQkJCSAgU3lzdGVtLm91dC5wcmludGxuKCJWQzogUHJvamVjdCA9ICIrdmMuZ2V0UHJvamVjdCgpKyIgTmFtZSA9ICIrdmMuZ2V0TmFtZSgpKTsKLQkJCSAgYXNzZXJ0VHJ1ZSh2Yy5leGlzdHMoKSk7Ci0JCQkgIAotCQkgIH0KLQkgIH0KLQkgIAotCSAgcHJpdmF0ZSB2b2lkIHByaW50TmFtZVN0cmluZ3MoU3RyaW5nW10gbmFtZXMpewotCQkgIGZvciAoaW50IGk9MDtpPG5hbWVzLmxlbmd0aDtpKyspewotCQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIk5hbWUiK2krIiA9ICIrbmFtZXNbaV0pOwotCQkgIH0KLQkgIH0KLQkgIAotICAgICAgcHVibGljIHZvaWQgZHRlc3RBc3NvY2lhdGVDb21wb25lbnRDb21tYW5kKCl7Ci0gICAgICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RBc3NvY2lhdGVDb21wb25lbnRDb21tYW5kIC4uLiIpOwotICAgICAgICAKLSAgICAgICAgQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQgYW13ZSA9IG5ldyBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZCgpOwotICAgICAgICBhbXdlLnNldEVhcihlYXJDb21wTmFtZSk7Ci0gICAgICAgIGFtd2Uuc2V0RUFSUHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICAgIGFtd2Uuc2V0TW9kdWxlKGNvbXAxKTsKLSAgICAgICAgYW13ZS5zZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgYW13ZS5leGVjdXRlKG51bGwsIG51bGwpOwotICAgICAgICAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdEFzc29jaWF0ZUNvbXBvbmVudENvbW1hbmQgLi4uIik7ICAgICAKLSAgICAgIH0KLSAgICAKLQkgIHB1YmxpYyB2b2lkIGR0ZXN0UmVmZXJlbmNpbmdHZXR0ZXJNZXRob2RzKCl7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0UmVmZXJlbmNpbmdHZXR0ZXJNZXRob2RzIC4uLiIpOwotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNDb21wb25lbnRBc3NvY2lhdGVkIC4uIik7Ci0JCSAgSjJFRVV0aWxzLmlzQ29tcG9uZW50QXNzb2NpYXRlZChwcm9qZWN0MSwgcHJvamVjdDEpOwotCQkKLQkJICBTdHJpbmdbXSBuYW1lcyA9IEoyRUVVdGlscy50b0NvbXBvbmVudE5hbWVzQXJyYXkoSjJFRVV0aWxzLmdldFJlZmVyZW5jaW5nRUFSQ29tcG9uZW50cyhwcm9qZWN0MSkpOwotCQkgIHByaW50TmFtZVN0cmluZ3MobmFtZXMpOwotCQkgIFN0cmluZ1tdIG5hbWVzMiA9IEoyRUVVdGlscy50b0NvbXBvbmVudE5hbWVzQXJyYXkoSjJFRVV0aWxzLmdldFJlZmVyZW5jaW5nRUFSQ29tcG9uZW50cyhwcm9qZWN0MikpOwotCQkgIHByaW50TmFtZVN0cmluZ3MobmFtZXMyKTsKLQkJICAKLQkJICBTdHJpbmdbXSBuYW1lczMgPSBKMkVFVXRpbHMudG9Db21wb25lbnROYW1lc0FycmF5KEoyRUVVdGlscy5nZXRSZWZlcmVuY2luZ1dlYkNvbXBvbmVudHNGcm9tRUFSKHByb2plY3QxKSk7Ci0JCSAgcHJpbnROYW1lU3RyaW5ncyhuYW1lczMpOwotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RSZWZlcmVuY2luZ0dldHRlck1ldGhvZHMgLi4uIik7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIGR0ZXN0SXNDb21wb25lbnRNZXRob2RzKCl7Ci0JCQotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdElzQ29tcG9uZW50TWV0aG9kcyAuLi4iKTsKLQkJICAKLQkJICAvL2Fzc2VydEZhbHNlKEoyRUVVdGlscy5pc0VKQjIwQ29tcG9uZW50KGVqYlByb2plY3QsIGVqYkNvbXBvbmVudE5hbWUpKTsKLQkJICBhc3NlcnRUcnVlKEoyRUVVdGlscy5pc0VKQjIwQ29tcG9uZW50KGVqYlByb2plY3QpKTsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgRU5EOiB0ZXN0SXNDb21wb25lbnRNZXRob2RzIC4uLiIpOwotCSAgfQotCSAgCi0KLQkgIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0xhdW5jaFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyZjZhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0xhdW5jaFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlOwotCi0vKioKLSAqIE1pbmltYWwgYXBwIHRvIHJ1biBhcyBFY2xpcHNlICJhcHBsaWNhdGlvbiIKLSAqLwotcHVibGljIGNsYXNzIExhdW5jaFRlc3QgaW1wbGVtZW50cyBJUGxhdGZvcm1SdW5uYWJsZQotewotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBsYXRmb3JtUnVubmFibGUjcnVuKE9iamVjdCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgcnVuKE9iamVjdCBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLQotICAgIE9iamVjdCByZXN1bHQgPSBuZXcgQWxsV1NKVW5pdFRlc3RzKCkucnVuTWFpbihhcmdzKTsKLQotICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVGhyb3dhYmxlKQotICAgICAgewotICAgICAgICAoKFRocm93YWJsZSkgcmVzdWx0KS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0cyBkaWRuJ3QgcmV0dXJuICdvayciKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBJUGxhdGZvcm1SdW5uYWJsZS5FWElUX09LOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1Jlc291cmNlVXRpbHNUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9SZXNvdXJjZVV0aWxzVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliOGVmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1Jlc291cmNlVXRpbHNUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Db21wb25lbnRDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5pbnRlcm5hbC51dGlsLklNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLQotLyoqCi0gKiBKVW5pdCB0ZXN0cyBmb3Igc2VsZWN0aXZlIFJlc291cmNlVXRpbHMgbWV0aG9kcy4gIENhbGxzIHdoaWNoIHJldHVybiBhIHNpbXBsZSBTdHJpbmcgb3IgcmVseSBvbiBhIElSZXNvdXJjZQotICogQVBJIG5lZWQgbm90IGJlIHRlc3RlZC4gIFRoZSBmb2N1cyBpcyBtYWlubHkgdG8gZXhlcmNpc2UgQ29tcG9uZW50IGFuZCBGbGV4aWJsZSBwcm9qZWN0IEFQSXMuIAotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXNvdXJjZVV0aWxzVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHN7Ci0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShSZXNvdXJjZVV0aWxzVGVzdHMuY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcG9uZW50VHlwZSgpewotCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJU3RyaW5nIGNvbXBvbmVudFR5cGUgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudFR5cGUocHJvamVjdCk7Ci0JCWFzc2VydEVxdWFscyhJTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFLCBjb21wb25lbnRUeXBlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbXBvbmVudE9mKCl7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHByb2plY3QpOwotICAgICAgICBJRm9sZGVyIGZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgICAgIEVjbGlwc2VTdGF0dXNIYW5kbGVyICAgICAgIGhhbmRsZXIgICAgICAgICA9IG5ldyBFY2xpcHNlU3RhdHVzSGFuZGxlcigpOwotICAgICAgICAgICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgICAgZW52ICAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwsIHJlc291cmNlQ29udGV4dCwgaGFuZGxlciApOwotCi0gICAgICAgICAgICBJRmlsZSBmaWxlID0gZm9sZGVyLmdldEZpbGUobmV3IFBhdGgoImZvby9FY2hvLmphdmEiKSk7Ci0gICAgICAgICAgICBpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLSAgICAgICAgICAgICAgSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIkJVSmF2YS9zcmMiLCBmb2xkZXIsIGVudiwgbnVsbCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpewotICAgICAgICAJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBJUGF0aCBqYXZhRmlsZVBhdGggPSBmb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiZm9vL0VjaG8uamF2YSIpKS5nZXRGdWxsUGF0aCgpOwotICAgICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2YoamF2YUZpbGVQYXRoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh2Yy5leGlzdHMoKSk7Ci0gICAgICAgIAotCQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEphdmFTb3VyY2VMb2NhdGlvbigpewotCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJU3RyaW5nIGphdmFTb3VyY2VMb2MgPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbihwcm9qZWN0KS50b1N0cmluZygpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkphdmEgc291cmNlIGxvY2F0aW9uID0gIitqYXZhU291cmNlTG9jKTsKLQkJYXNzZXJ0VHJ1ZShqYXZhU291cmNlTG9jLmVuZHNXaXRoKCJzcmMiKSk7Ci0JCQotCQkvLyBnZXQgYWxsIHRoZSBKYXZhU291cmNlTG9jYXRpb25zIHZpYSB0aGUgVmlydHVhbENvbXBvbmVudAotCQlJVmlydHVhbENvbXBvbmVudCB2YzEgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJSVZpcnR1YWxDb21wb25lbnQgdmMyID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50W10gdmNzID0gbmV3IElWaXJ0dWFsQ29tcG9uZW50W117dmMxLCB2YzJ9OwotCQlJUGF0aFtdIHBhdGhzID0gUmVzb3VyY2VVdGlscy5nZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKHZjcyk7Ci0JCQotCQkvLyB2ZXJpZnkgZmlyc3QgZm9sZGVyIGV4aXN0cwotCQlJUGF0aCBwYXRoMSA9IChJUGF0aClwYXRoc1swXTsKLQkJSVJlc291cmNlIHJlc291cmNlICA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHBhdGgxKTsKLQkJaWYgKHJlc291cmNlLmV4aXN0cygpKXsKLQkJCWFzc2VydEVxdWFscyhJUmVzb3VyY2UuRk9MREVSLCByZXNvdXJjZS5nZXRUeXBlKCkpOwotCQl9Ci0KLQkJLy8gdmVyaWZ5IHNlY29uZCBmb2xkZXIgZXhpc3RzCi0JCUlQYXRoIHBhdGgyID0gKElQYXRoKXBhdGhzWzFdOwotCQlJUmVzb3VyY2UgcmVzb3VyY2UyICA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHBhdGgyKTsKLQkJaWYgKHJlc291cmNlMi5leGlzdHMoKSl7Ci0JCQlhc3NlcnRFcXVhbHMoSVJlc291cmNlLkZPTERFUiwgcmVzb3VyY2UyLmdldFR5cGUoKSk7Ci0JCX0JCQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0V2ViQ29tcG9uZW50U2VydmVyUm9vdCgpIHsKLQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCUlGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VVdGlscy5nZXRXZWJDb21wb25lbnRTZXJ2ZXJSb290KHByb2plY3QpOwotCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCi0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9TZXJ2ZXJDcmVhdGlvblRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1NlcnZlckNyZWF0aW9uVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUzZDA0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1NlcnZlckNyZWF0aW9uVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnRpb25GYWlsZWRFcnJvcjsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVTZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJDcmVhdGlvblRlc3RzIGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzewotCi0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKXsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoU2VydmVyQ3JlYXRpb25UZXN0cy5jbGFzcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGluaXQoKXsKLQkgICAgdHJ5IHsKLSAgICAgICAgICBhc3NlcnROb3ROdWxsKFNFUlZFUl9JTlNUQUxMX1BBVEgpOyAgICAgICAgICAKLQkgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVNlcnZlclJ1bnRpbWUoUlVOVElNRVRZUEVJRF9UQzUwLCBTRVJWRVJfSU5TVEFMTF9QQVRIKTsKLQkgICAgfQotCSAgICBjYXRjaChFeGNlcHRpb24gZSl7Ci0JICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfSAKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVRvbWNhdHY1U2VydmVyKCl7Ci0JCWluaXQoKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgVG9tY2F0IHY1IHNlcnZlci4iKTsKLQkJQ3JlYXRlU2VydmVyQ29tbWFuZCBjc2MgPSBuZXcgQ3JlYXRlU2VydmVyQ29tbWFuZCgpOwotCQljc2Muc2V0U2VydmVyRmFjdG9yeWlkKFNFUlZFUlRZUEVJRF9UQzUwKTsKLQkJY3NjLmV4ZWN1dGUobnVsbCwgbnVsbCApOwotCQkKLQkJSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotCQlTdHJpbmcgaW5zdElkID0gY3NjLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIgaW5zdGFuY2UgSWQgPSAiK2luc3RJZCk7Ci0JCWlmIChpbnN0SWQhPW51bGwpewotCQkgIHNlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihpbnN0SWQpOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoc2VydmVyKTsKLQkJCi0JCXRyeSB7Ci0JCQlzZXJ2ZXIuZGVsZXRlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpewotCQkJbmV3IEFzc2VydGlvbkZhaWxlZEVycm9yKCk7Ci0JCX0KLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiRG9uZSBjcmVhdGluZyBUb21jYXQgdjUgc2VydmVyLiIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UmVhdHRlbXB0Q3JlYXRlVG9tY2F0djVTZXJ2ZXIoKXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBdHRlbXB0aW5nIHRvIGNyZWF0ZSAybmQgVG9tY2F0IHY1IHNlcnZlci4iKTsKLQkJQ3JlYXRlU2VydmVyQ29tbWFuZCBjc2MgPSBuZXcgQ3JlYXRlU2VydmVyQ29tbWFuZCgpOwotCQljc2Muc2V0U2VydmVyRmFjdG9yeWlkKFNFUlZFUlRZUEVJRF9UQzUwKTsKLQkJY3NjLmV4ZWN1dGUobnVsbCwgbnVsbCApOwotCQkKLQkJSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotCQlTdHJpbmcgaW5zdElkID0gY3NjLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJaWYgKGluc3RJZCE9bnVsbCkgewotCQkgIHNlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihpbnN0SWQpOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoc2VydmVyKTsKLQkJCi0JCXRyeSB7Ci0JCQlzZXJ2ZXIuZGVsZXRlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpewotCQkJbmV3IEFzc2VydGlvbkZhaWxlZEVycm9yKCk7Ci0JCX0KLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiRG9uZSBhdHRlbXB0aW5nIDJuZCBUb21jYXQgdjUgc2VydmVyIGNyZWF0aW9uLiIpOwkJCi0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9UREphdmFBeGlzVEM1MC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9UREphdmFBeGlzVEM1MC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGMxZDE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvVERKYXZhQXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDUwOSAgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMTE2ICAgMjA4MTI0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzEyMTcgICAxODcyODAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDIwNyAgIDIxNzM0NiBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDgwMzEzICAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIFRvcCBkb3duIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGNsYXNzIFRESmF2YUF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIFBST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuVERfUFJPSkVDVF9OQU1FOwotICAKLSAgcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQkKLQkKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFRESmF2YUF4aXNUQzUwLmNsYXNzKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotCSAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JICAgIGlmICghd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0JICAgIAlKVW5pdFV0aWxzLmNyZWF0ZVdlYk1vZHVsZShQUk9KRUNUX05BTUUsIFBST0pFQ1RfTkFNRSwgc2VydmVyXy5nZXRJZCgpLCBTRVJWRVJUWVBFSURfVEM1MCwgIjE0IiwgZW52XywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7CSAgICAJCi0JICAgIH0KLQkgIH0KLQkgIAotICAvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsJCQotCQlJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCB2NS4wIHNlcnZlcgotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwkKLQkJSlVuaXRVdGlscy5zZXRTZXJ2aWNlU2NlbmFyaW9EZWZhdWx0KCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0KLQl9Ci0KLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovICAKLQlwdWJsaWMgdm9pZCB0ZXN0VERKYXZhQXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgIAotCSAgSVN0YXR1c1tdIHN0YXR1cyA9IEpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfVE9QX0RPV04sU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0JfQotCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotICAgICAgICBJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsgICAgCi0gICAgCi0JCQotCQlJRm9sZGVyIHdzZGxGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpOwotICAgICAgICBpZiAoIXdzZGxGb2xkZXIuZXhpc3RzKCkpewotICAgICAgICAJcnVuRXZlbnRMb29wKDMwMDApOwotICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGV2ZW50IGxvb3AuLiIpOwotICAgICAgICB9Ci0JCWFzc2VydFRydWUod3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEQgd3NkbCBmb2xkZXIgZXhpc3RzPyA9ICIrd3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JCQotCQlpZiAoISh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKSl7Ci0JCQlydW5FdmVudExvb3AoMzAwMCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgZXZlbnQgbG9vcC4uIik7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSh3c2RsRm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURCB3c2RsIGZpbGUgZXhpc3RzPyA9ICIgKyAod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCkpOwotCi0JCS8vIENoZWNrIHN0YXR1cyBoYW5kbGVyIGZvciBlcnJvcnMKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCS8vCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlsb2dCYWRTdGF0dXMoc1tpXSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfSAKLQkJYXNzZXJ0RXF1YWxzKCJURCBVbmV4cGVjdGVkIG51bWJlciBvZiBjbGllbnQgZXJyb3IgcmVwb3J0cyIsIDAsIHMubGVuZ3RoKTsKLQkJCi0JfQotCQotICAvKioKLSAgICogQ2xlYXIgd29ya3NwYWNlIGlmIHJlcXVpcmVkCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSxudWxsKTsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTSlVuaXRDb25zdGFudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NKVW5pdENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzYyNGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NKVW5pdENvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgIAotICogMjAwNzExMTYgIDIwODEyNCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIFdTSlVuaXRDb25zdGFudHMgewotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCIpOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIFJVTlRJTUVUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjUwIjsKLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTMiA9ICJvcmcuZWNsaXBzZS5qc3Qud3MucnVudGltZS5heGlzMiI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFdTX0FYSVMyX1JVTlRJTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMyLmNyZWF0aW9uLmF4aXMyV2ViU2VydmljZVJUIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVkVSVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJQcm9qZWN0TmFtZSA9ICJXZWJQcm9qZWN0IjsKLSAgCi0gIC8vIGZsZXhpYmxlIHByb2plY3Qgc3RydWN0dXJlIDEKLSAgcHVibGljIGZpbmFsIFN0cmluZyBwcm9qZWN0TmFtZSA9ICJGbGV4UHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcG9uZW50TmFtZSA9ICJ3ZWJDb21wb25lbnQiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXBvbmVudDJOYW1lID0gIndlYkNvbXAyIjsKLQotICAvLyBmbGV4aWJsZSBwcm9qZWN0IHN0cnVjdHVyZSAyCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgcHJvamVjdDJOYW1lID0gIkZsZXhQcm9qZWN0MiI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcDNOYW1lID0gIndlYkNvbXAzIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wNE5hbWUgPSAid2ViQ29tcDQiOwotICAgIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGVqYlByb2plY3ROYW1lID0gIkZsZXhFSkJQcm9qZWN0IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBlamJDb21wb25lbnROYW1lID0gImVqYkNvbXBvbmVudCI7Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBhcHBDbGllbnRQcm9qZWN0TmFtZSA9ICJGbGV4QXBwQ2xpZW50UHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXBwQ2xpZW50Q29tcE5hbWUgPSAiYXBwQ2xpZW50Q29tcG9uZW50IjsgIAotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBlYXJDb21wTmFtZSA9ICJFQVJDb21wb25lbnQiOwotICAKLSAgcHVibGljIGZpbmFsIFBhdGggemlwRmlsZVBhdGggPSBuZXcgUGF0aCgiL2RhdGEvV1NUZXN0UHJvamVjdHMuemlwIik7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSBuZXcgU3RyaW5nW117cHJvamVjdE5hbWUsIHByb2plY3QyTmFtZX07Ci0gIAotICAvLyBwZXJmb3JtYW5jZSBjb25zdGFudHMKLSAgcHVibGljIGZpbmFsIFN0cmluZyBCVV9QUk9KRUNUX05BTUUgPSAiVGVzdFdlYiI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgVERfUFJPSkVDVF9OQU1FID0gIlRlc3RURFByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIENMSUVOVF9QUk9KRUNUX05BTUUgPSAiVGVzdFdlYkNsaWVudCI7Ci0gIAotICBwdWJsaWMgZmluYWwgUGF0aCBwZXJmX3ppcEZpbGVQYXRoID0gbmV3IFBhdGgoIi9kYXRhL1dTUGVyZlByb2plY3RzLnppcCIpOwotICBwdWJsaWMgZmluYWwgU3RyaW5nW10gcGVyZl9wcm9qZWN0TmFtZXMgPSBuZXcgU3RyaW5nW117QlVfUFJPSkVDVF9OQU1FLCBURF9QUk9KRUNUX05BTUUsIENMSUVOVF9QUk9KRUNUX05BTUV9OwotIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XZWJTZXJ2aWNlUnVudGltZVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VSdW50aW1lVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNhYzA0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VSdW50aW1lVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTggICAxMjcxODkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5qcmVzLkpSRXNVcGRhdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSVZNSW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLklWTUluc3RhbGwyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSVZNSW5zdGFsbFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KYXZhUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNU3RhbmRpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuSjJFRVZlcnNpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucGx1Z2luLklKMkVFTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5GYWNldFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS5pbnRlcm5hbC5JVG9tY2F0UnVudGltZVdvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5GYWNldE1hdGNoQ2FjaGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVdvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotLyoqCi0gKiBXZWJTZXJ2aWNlUnVudGltZVRlc3RzIGNvbnRhaW5zIHRoZSBKVW5pdCB0ZXN0cyB3aGljaCBjb3ZlciBwcm9qZWN0Ci0gKiBjcmVhdGlvbiwgcHJvamVjdCBmaWx0ZXJpbmcsIGFuZCBwcm9qZWN0IHR5cGUgZmlsdGVyaW5nIGZvciB0aGUgQXhpcwotICogV2ViIHNlcnZpY2UgcnVudGltZS4gSW4gb3JkZXIgZm9yIHRoZSB0ZXN0IHRvIHJ1biBzdWNjZXNzZnVsbHk6Ci0gKiA8b2w+Ci0gKiA8bGk+VGhlIEVjbGlwc2UgdGVzdCBlbnZpcm9ubWVudCBtdXN0IGJlIGxhdW5jaGVkIHdpdGggSkRLMS40LjI8L2xpPgotICogPGxpPlRoZSBmb2xsb3dpbmcgVk0gYXJndW1lbnRzIG11c3QgYmUgc3BlY2lmaWVkOgotICogPHVsPgotICogICA8bGk+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTU6IHRoZSBpbnN0YWxsIGxvY2F0aW9uIG9mIGEgVG9tY2F0IDUuNSBzZXJ2ZXIsPGJyPiAKLSAqICAgZm9yIGV4YW1wbGUsIHVzZSAtRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1PWQ6XGpha2FydGEtdG9tY2F0LTUuNS45Ci0gKiAgIDxsaT5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MDogdGhlIGluc3RhbGwgbG9jYXRpb24gb2YgYSBUb21jYXQgNS4wIHNlcnZlciw8YnI+Ci0gKiAgIGZvciBleGFtcGxlLCB1c2UgLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MD1kOlxqYWthcnRhLXRvbWNhdC01LjAuMjggICAKLSAqICAgPGxpPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjQxOiB0aGUgaW5zdGFsbCBsb2NhdGlvbiBvZiBhIFRvbWNhdCA0LjEgc2VydmVyLDxicj4KLSAqICAgZm9yIGV4YW1wbGUsIHVzZSAtRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjQxPWQ6XGpha2FydGEtdG9tY2F0LTQuMS4yOQotICogICA8bGk+amF2YS4xNS5pbnN0YWxsLnBhdGg6IHRoZSBpbnN0YWxsIGxvY2F0aW9uIG9mIGEgSmF2YSAxLjUgSkRLLDxicj4KLSAqICAgZm9yIGV4YW1wbGUsIHVzZSAtRGphdmEuMTUuaW5zdGFsbC5wYXRoPWQ6XGpkazEuNS4wXzAyCi0gKiA8L3VsPjwvbGk+Ci0gKiA8L29sPgotICogCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VSdW50aW1lVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAKLSAgLy9TZXJ2ZXIgaW5zdGFsbCBwYXRocwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1Iik7ICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSF9UQzUwID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCIpOyAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM0MSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDEiKTsKLSAgCi0gIC8vSkRLIDEuNSBpbnN0YWxsIGluZm8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSkFWQTE1X1ZNX0lOU1RBTExfUEFUSCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS4xNS5pbnN0YWxsLnBhdGgiKTsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSkFWQTE1X1ZNX0lOU1RBTExfVFlQRSA9ICJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBKQVZBMTVfVk1fSU5TVEFMTF9OQU1FID0gIkphdmExNSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEpBVkExNV9WTV9JTlNUQUxMX0pBVkFET0MgPSAiaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNS4wL2RvY3MvYXBpLyI7Ci0gIAotICAvL1J1bnRpbWUgdHlwZSBpZHMgYW5zIHNlcnZlciB0eXBlIGlkcwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTUgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41NSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzU1ID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRVRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTAiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJVTlRJTUVUWVBFSURfVEM0MSA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjQxIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSVFlQRUlEX1RDNDEgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDEiOyAgCi0gIAotICAvL1J1bnRpbWUgaWRzIGZvciBydW50aW1lcyB0aGF0IHdpbGwgYmUgY3JlYXRlZAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FSURfVEM1NSA9ICJUb21jYXQ1NVJ1bnRpbWUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FSURfVEM1MCA9ICJUb21jYXQ1MFJ1bnRpbWUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FSURfVEM0MSA9ICJUb21jYXQ0MVJ1bnRpbWUiOwotICAKLSAgLy9XZWIgc2VydmljZSBydW50aW1lIGV4dGVuc2lvbiBpZHMgZm9yIEF4aXMKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQVhJU19SVU5USU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWSUNFX0lNUExfSkFWQSA9ICJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmphdmEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBBWElTX1NFUlZJQ0VfUlVOVElNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5qYXZhIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xJRU5UX0lNUExfSkFWQSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLndlYiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEFYSVNfQ0xJRU5UX1JVTlRJTUVfSkFWQSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5qYXZhIjsKLSAgCi0gIC8vVmFyaW91cyBjb25zdGFudHMgdXNlZCBieSB0aGUgdGVzdCBjYXNlIGZvciBpZGVudGlmeWluZyBzZXJ2aWNlL2NsaWVudCBzaWRlIGFuZCAKLSAgLy9mb3Igc2V0dGluZyBuYW1lcyBvbiBjcmVhdGVkIHByb2plY3RzLgotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWSUNFX1NJREUgPSAicyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENMSUVOVF9TSURFID0gImMiOyAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRV9QUkVGSVggPSAidGMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUVfU1VGRklYID0gInByb2plY3QiOwotICAKLSAgLy9JUHJvamVjdEZhY2V0VmVyc2lvbnMgdXNlZCBpbiB0aGUgZXhwZWN0ZWQgcmVzdWx0cwotICBwcml2YXRlIGZpbmFsIElQcm9qZWN0RmFjZXRWZXJzaW9uIFdFQjIzID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFKS5nZXRWZXJzaW9uKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl8zX1RFWFQpOwotICBwcml2YXRlIGZpbmFsIElQcm9qZWN0RmFjZXRWZXJzaW9uIFdFQjI0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFKS5nZXRWZXJzaW9uKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl80X1RFWFQpOwotICBwcml2YXRlIGZpbmFsIElQcm9qZWN0RmFjZXRWZXJzaW9uIEpBVkExNCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfSkFWQSkuZ2V0VmVyc2lvbihKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfNF9URVhUKTsKLSAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdEZhY2V0VmVyc2lvbiBKQVZBNTAgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0pBVkEpLmdldFZlcnNpb24oIjUuMCIpOwotICBwcml2YXRlIGZpbmFsIElQcm9qZWN0RmFjZXRWZXJzaW9uIFVUSUxJVFkxMCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9NT0RVTEUpLmdldFZlcnNpb24oSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzBfVEVYVCk7ICAKLSAgCi0gIHByaXZhdGUgZmluYWwgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgVEVNUExBVEVfV0VCID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSk7Ci0gIHByaXZhdGUgZmluYWwgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgVEVNUExBVEVfVVRJTElUWSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX1RFTVBMQVRFKTsKLSAgCi0gIHByaXZhdGUgaW50IG11bHRpcGxlc0ZvclByb2plY3RDcmVhdGlvbjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShXZWJTZXJ2aWNlUnVudGltZVRlc3RzLmNsYXNzKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGluaXQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYXNzZXJ0Tm90TnVsbChTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTUpOwotICAgICAgYXNzZXJ0Tm90TnVsbChTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTApOwotICAgICAgYXNzZXJ0Tm90TnVsbChTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNDEpOwotICAgICAgYXNzZXJ0Tm90TnVsbChKQVZBMTVfVk1fSU5TVEFMTF9QQVRIKTsKLSAgICAgIAotICAgICAgLy9DcmVhdGUgYSBzZXJ2ZXIgcnVudGltZTogVG9tY2F0IDQuMSB3aXRoIEpESyAxLjQuMgotICAgICAgY3JlYXRlVG9tY2F0U2VydmVyUnVudGltZShSVU5USU1FSURfVEM0MSwgUlVOVElNRVRZUEVJRF9UQzQxLCBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNDEpOwotICAgICAgCi0gICAgICAvL0NyZWF0ZSBhIHNlcnZlciBydW50aW1lOiBUb21jYXQgNS4wIHdpdGggSkRLIDEuNC4yCi0gICAgICBjcmVhdGVUb21jYXRTZXJ2ZXJSdW50aW1lKFJVTlRJTUVJRF9UQzUwLCBSVU5USU1FVFlQRUlEX1RDNTAsIFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM1MCk7Ci0gICAgICAKLSAgICAgIC8vQ3JlYXRlIGEgc2VydmVyIHJ1bnRpbWU6IFRvbWNhdCA1LjUgd2l0aCBKREsgMS41Ci0gICAgICBjcmVhdGVUb21jYXRTZXJ2ZXJSdW50aW1lKFJVTlRJTUVJRF9UQzU1LCBSVU5USU1FVFlQRUlEX1RDNTUsIFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM1NSk7Ci0gICAgICAKLSAgICAgIAotICAgICAgCi0gICAgICBTdHJpbmcgbXVsdGlwbGVzID0gU3lzdGVtLmdldFByb3BlcnR5KCJtdWx0aXBsZXMiKTsgLy90aGlzIGlzIGFuIG9wdGlvbmFsIHByb3BlcnkgLSBkZWZhdWx0ZWQgdG8gMQotICAgICAgaWYgKG11bHRpcGxlcyAhPSBudWxsICYmIChJbnRlZ2VyLnBhcnNlSW50KG11bHRpcGxlcykgPiAwKSkKLSAgICAgIHsKLSAgICAgICAgbXVsdGlwbGVzRm9yUHJvamVjdENyZWF0aW9uID0gSW50ZWdlci5wYXJzZUludChtdWx0aXBsZXMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBtdWx0aXBsZXNGb3JQcm9qZWN0Q3JlYXRpb24gPSAxOwotICAgICAgfQotICAgICAgCi0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSBJUnVudGltZSBjcmVhdGVUb21jYXRTZXJ2ZXJSdW50aW1lKFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBydW50aW1lVHlwZUlkLCBTdHJpbmcgc2VydmVySW5zdGFsbFBhdGgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIElSdW50aW1lVHlwZSBydCA9IFNlcnZlckNvcmUuZmluZFJ1bnRpbWVUeXBlKHJ1bnRpbWVUeXBlSWQpOwotICAgIElSdW50aW1lV29ya2luZ0NvcHkgd2MgPSBydC5jcmVhdGVSdW50aW1lKHJ1bnRpbWVJZCwgbnVsbCk7Ci0gICAgd2Muc2V0TG9jYXRpb24obmV3IFBhdGgoc2VydmVySW5zdGFsbFBhdGgpKTsKLSAgICBJUnVudGltZSBydW50aW1lID0gd2Muc2F2ZSh0cnVlLCBudWxsKTsKLSAgICAKLSAgICBpZiAocnVudGltZVR5cGVJZC5lcXVhbHMoUlVOVElNRVRZUEVJRF9UQzU1KSkKLSAgICB7Ci0gICAgICAvL0NyZWF0ZSBhIG5ldyBJVk1JbnN0YWxsCi0gICAgICBJVk1JbnN0YWxsVHlwZSB0eXBlID0gSmF2YVJ1bnRpbWUuZ2V0Vk1JbnN0YWxsVHlwZShKQVZBMTVfVk1fSU5TVEFMTF9UWVBFKTsKLSAgICAgIElWTUluc3RhbGwgbmV3Vk0gPSBuZXcgVk1TdGFuZGluKHR5cGUsIGNyZWF0ZVVuaXF1ZUlkKHR5cGUpKTsgCi0gICAgICBuZXdWTS5zZXRJbnN0YWxsTG9jYXRpb24obmV3IEZpbGUoSkFWQTE1X1ZNX0lOU1RBTExfUEFUSCkuZ2V0QWJzb2x1dGVGaWxlKCkpOwotICAgICAgbmV3Vk0uc2V0TmFtZShKQVZBMTVfVk1fSU5TVEFMTF9OQU1FKTsKLSAgICAgIG5ld1ZNLnNldEphdmFkb2NMb2NhdGlvbihuZXcgVVJMKEpBVkExNV9WTV9JTlNUQUxMX0pBVkFET0MpKTsKLSAgICAgIGlmIChuZXdWTSBpbnN0YW5jZW9mIElWTUluc3RhbGwyKQotICAgICAgewotICAgICAgICBJVk1JbnN0YWxsMiBuZXdWTTIgPSAoSVZNSW5zdGFsbDIpIG5ld1ZNOwotICAgICAgICBuZXdWTTIuc2V0Vk1BcmdzKG51bGwpOwotICAgICAgfQotICAgICAgbmV3Vk0uc2V0TGlicmFyeUxvY2F0aW9ucyhudWxsKTsgICAgICAKLQotICAgICAgLy9BZGQgdGhlIG5ldyBJVk1JbnN0YWxsIHRvIHRoZSBtYXN0ZXIgbGlzdC4KLSAgICAgIElWTUluc3RhbGxbXSB2bXMgPSBuZXcgSVZNSW5zdGFsbFtde25ld1ZNfTsKLSAgICAgIC8vVE9ETyBSZXBsYWNlIHVzZSBvZiB0aGUgaW50ZXJuYWwgY2xhc3Mgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmpyZXMuSlJFc1VwZGF0ZXIKLSAgICAgIC8vd2l0aCBzb21ldGhpbmcgcHVibGljLiBOb3Qgc3VyZSBpZiBzb21ldGhpbmcgcHVibGljIGlzIGF2YWlsYWJsZSBhdCB0aGlzIHRpbWUuIE5lZWQgdG8gY2hlY2suCi0gICAgICBKUkVzVXBkYXRlciB1cGRhdGVyID0gbmV3IEpSRXNVcGRhdGVyKCk7Ci0gICAgICBJVk1JbnN0YWxsIGRlZmF1bHRWTSA9IEphdmFSdW50aW1lLmdldERlZmF1bHRWTUluc3RhbGwoKTsKLSAgICAgIHVwZGF0ZXIudXBkYXRlSlJFU2V0dGluZ3Modm1zLCBkZWZhdWx0Vk0pOwotICAgICAgCi0gICAgICAvL0dldCB0aGUgbmV3IElWTUluc3RhbGwKLSAgICAgIElWTUluc3RhbGxUeXBlIHZtVHlwZSA9IEphdmFSdW50aW1lLmdldFZNSW5zdGFsbFR5cGUoSkFWQTE1X1ZNX0lOU1RBTExfVFlQRSk7Ci0gICAgICBJVk1JbnN0YWxsIGphdmExNVZNID0gdm1UeXBlLmZpbmRWTUluc3RhbGxCeU5hbWUoSkFWQTE1X1ZNX0lOU1RBTExfTkFNRSk7Ci0gICAgCi0gICAgICAvL1NldCB0aGUgdG9tY2F0IHJ1bnRpbWUgdG8gdXNlIHRoZSBuZXcgSmF2YSAxNSBKREsuCi0gICAgICBJUnVudGltZVdvcmtpbmdDb3B5IHdjMiA9IHJ1bnRpbWUuY3JlYXRlV29ya2luZ0NvcHkoKTsKLSAgICAgIC8vVE9ETyBSZXBsYWNlIHVzZSBvZiB0aGUgaW50ZXJuYWwgY2xhc3MgCi0gICAgICAvL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUuaW50ZXJuYWwuSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weQotICAgICAgLy93aXRoIHNvbWV0aGluZyBwdWJsaWMuIEVuaGFuY2VtZW50IDEyNzg4NCBoYXMgYmVlbiBvcGVuZWQgdG8gcmVxdWVzdCBBUEkKLSAgICAgIC8vZm9yIHRoaXMuCi0gICAgICBJVG9tY2F0UnVudGltZVdvcmtpbmdDb3B5IHRjd2MgPSAoSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weSl3YzIubG9hZEFkYXB0ZXIoSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weS5jbGFzcywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICB0Y3djLnNldFZNSW5zdGFsbChqYXZhMTVWTSk7Ci0gICAgICB3YzIuc2F2ZSh0cnVlLCBudWxsKTsgICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFNlcnZlckNvcmUuZmluZFJ1bnRpbWUocnVudGltZUlkKTsKLSAgfSAgCi0gIAotICBwcml2YXRlIFN0cmluZyBjcmVhdGVVbmlxdWVJZChJVk1JbnN0YWxsVHlwZSB2bVR5cGUpCi0gIHsKLSAgICBTdHJpbmcgaWQgPSBudWxsOwotICAgIGRvCi0gICAgewotICAgICAgaWQgPSBTdHJpbmcudmFsdWVPZihTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7Ci0gICAgfSB3aGlsZSAodm1UeXBlLmZpbmRWTUluc3RhbGwoaWQpICE9IG51bGwpOwotICAgIHJldHVybiBpZDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3RzIHByb2plY3QgY3JlYXRpb24gYW5kIGZpbHRlcmluZyBmb3IgdGhlIEF4aXMgV2ViIHNlcnZpY2UKLSAgICogcnVudGltZS4gVGVzdHMgY292ZXIgYWxsIHZhbGlkIGNvbWJpbmF0aW9ucyBvZiBTZXJ2aWNlUnVudGltZXMsIAotICAgKiBUb21jYXQgc2VydmVycywgYW5kIEoyRUUgcHJvamVjdCB0eXBlcyBhbmQgd2VsbCBhcyBhbGwgdmFsaWQgIAotICAgKiBjb21iaW5hdGlvbnMgb2YgQ2xpZW50UnVudGltZXMsIFRvbWNhdCBzZXJ2ZXJzLCBhbmQgSjJFRSBwcm9qZWN0IHR5cGVzLgotICAgKi8gIAotICBwdWJsaWMgdm9pZCB0ZXN0UHJvamVjdENyZWF0aW9uQW5kRmlsdGVyaW5nKCkKLSAgewotICAgIGluaXQoKTsKLSAgICAKLSAgICBTdHJpbmdbXSB0ZW1wbGF0ZUlkcyA9IG5ldyBTdHJpbmdbXXtJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfVEVNUExBVEUsCi0gICAgICAgIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX1RFTVBMQVRFfTsKLSAgICBTdHJpbmdbXSBzY2VuYXJpb3MgPSBuZXcgU3RyaW5nW117U0VSVklDRV9TSURFLAotICAgICAgICBTRVJWSUNFX1NJREUsCi0gICAgICAgIFNFUlZJQ0VfU0lERSwKLSAgICAgICAgQ0xJRU5UX1NJREUsCi0gICAgICAgIENMSUVOVF9TSURFLAotICAgICAgICBDTElFTlRfU0lERSwKLSAgICAgICAgQ0xJRU5UX1NJREUsCi0gICAgICAgIENMSUVOVF9TSURFLAotICAgICAgICBDTElFTlRfU0lERX07Ci0gICAgU3RyaW5nW10gc2VydmljZUNsaWVudFJ1bnRpbWVJZHMgPSBuZXcgU3RyaW5nW117QVhJU19TRVJWSUNFX1JVTlRJTUUsCi0gICAgICAgIEFYSVNfU0VSVklDRV9SVU5USU1FLAotICAgICAgICBBWElTX1NFUlZJQ0VfUlVOVElNRSwKLSAgICAgICAgQVhJU19DTElFTlRfUlVOVElNRV9XRUIsCi0gICAgICAgIEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCLAotICAgICAgICBBWElTX0NMSUVOVF9SVU5USU1FX1dFQiwKLSAgICAgICAgQVhJU19DTElFTlRfUlVOVElNRV9KQVZBLAotICAgICAgICBBWElTX0NMSUVOVF9SVU5USU1FX0pBVkEsCi0gICAgICAgIEFYSVNfQ0xJRU5UX1JVTlRJTUVfSkFWQX07Ci0gICAgU3RyaW5nW10gc2VydmVyVHlwZXMgPSBuZXcgU3RyaW5nW117U0VSVkVSVFlQRUlEX1RDNDEsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzUwLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1NSwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNDEsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzUwLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1NSwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNDEsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzUwLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1NX07Ci0gICAgCi0gICAgCi0gICAgLy9FeHBlY3RlZCBSZXN1bHRzOgotICAgIAotICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uW11bXSBleHBlY3RlZEZhY2V0cyA9IG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltdW117IG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1dFQjIzLCBKQVZBMTR9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtXRUIyNCwgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117V0VCMjQsIEpBVkE1MH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1dFQjIzLCBKQVZBMTR9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtXRUIyNCwgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117V0VCMjQsIEpBVkE1MH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1VUSUxJVFkxMCwgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117VVRJTElUWTEwLCBKQVZBMTR9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtVVElMSVRZMTAsIEpBVkE1MH0sCi0gICAgfTsKLSAgICAKLSAgICBTdHJpbmdbXSBleHBlY3RlZFJ1bnRpbWVzID0gbmV3IFN0cmluZ1tdIHtSVU5USU1FSURfVEM0MSwKLSAgICAgICAgUlVOVElNRUlEX1RDNTAsCi0gICAgICAgIFJVTlRJTUVJRF9UQzU1LAotICAgICAgICBSVU5USU1FSURfVEM0MSwKLSAgICAgICAgUlVOVElNRUlEX1RDNTAsCi0gICAgICAgIFJVTlRJTUVJRF9UQzU1LAotICAgICAgICBSVU5USU1FSURfVEM0MSwKLSAgICAgICAgUlVOVElNRUlEX1RDNTAsCi0gICAgICAgIFJVTlRJTUVJRF9UQzU1ICAgICAgICAKLSAgICB9OwotICAgIAotICAgIFN0cmluZyBiaWdQcmVmaXggPSBQUk9KRUNUX05BTUVfUFJFRklYKyIwIitQUk9KRUNUX05BTUVfU1VGRklYOwotICAgIFN0cmluZ1tdIGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzU2VydmljZSA9IG5ldyBTdHJpbmdbXSB7IGJpZ1ByZWZpeCsiMCIsIAotICAgICAgICBiaWdQcmVmaXgrIjEiLAotICAgICAgICBiaWdQcmVmaXgrIjIiLAotICAgICAgICBiaWdQcmVmaXgrIjMiLAotICAgICAgICBiaWdQcmVmaXgrIjQiLAotICAgICAgICBiaWdQcmVmaXgrIjUiICAgICAgICAKLSAgICB9OwotICAgIAotICAgIFN0cmluZ1tdIGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzQ2xpZW50ID0gbmV3IFN0cmluZ1tdIHsgYmlnUHJlZml4KyIwIiwgCi0gICAgICAgIGJpZ1ByZWZpeCsiMSIsCi0gICAgICAgIGJpZ1ByZWZpeCsiMiIsCi0gICAgICAgIGJpZ1ByZWZpeCsiMyIsCi0gICAgICAgIGJpZ1ByZWZpeCsiNCIsCi0gICAgICAgIGJpZ1ByZWZpeCsiNSIsCi0gICAgICAgIGJpZ1ByZWZpeCsiNiIsCi0gICAgICAgIGJpZ1ByZWZpeCsiNyIsCi0gICAgICAgIGJpZ1ByZWZpeCsiOCIsCi0gICAgfTsKLSAgICAKLSAgICBib29sZWFuW10gZXhwZWN0ZWRCb29sZWFuc0ZvckF4aXNTZXJ2aWNlID0gbmV3IGJvb2xlYW5bXSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07Ci0gICAgYm9vbGVhbltdIGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzQ2xpZW50V2ViID0gbmV3IGJvb2xlYW5bXSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07Ci0gICAgYm9vbGVhbltdIGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzQ2xpZW50SmF2YSA9IG5ldyBib29sZWFuW10ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWV9OwotICAgIAotICAgIAotICAgIC8vVHVybiBhdXRvLWJ1aWxkIG9mZgotICAgIFZhbGlkYXRpb25NYW5hZ2VyIG1hbmFnZXIgPSBuZXcgVmFsaWRhdGlvbk1hbmFnZXIoKTsKLSAgICBtYW5hZ2VyLmRpc2FibGVBdXRvQnVpbGQoKTsKLSAgICAKLSAgICAvL0NyZWF0ZSB0aGUgcHJvamVjdHMKLSAgICBmb3IgKGludCBpPTA7IGk8bXVsdGlwbGVzRm9yUHJvamVjdENyZWF0aW9uOyBpKyspCi0gICAgewotICAgICAgY3JlYXRlUHJvamVjdHModGVtcGxhdGVJZHMsIHNjZW5hcmlvcywgc2VydmljZUNsaWVudFJ1bnRpbWVJZHMsIHNlcnZlclR5cGVzLCBQUk9KRUNUX05BTUVfUFJFRklYK2kpOwotICAgIH0gIAotICAgIAotICAgIC8vUmVzdG9yZSBhdXRvLWJ1aWxkCi0gICAgbWFuYWdlci5yZXN0b3JlQXV0b0J1aWxkKCk7Ci0gICAgCi0gICAgLy9DaGVjayBFeHBlY3RlZCBSZXN1bHRzOgotICAgIAotICAgIC8vQ2hlY2sgZmFjZXRzIGFuZCBydW50aW1lIG9uIHRoZSBmaXJzdCAiMCJ0aCBzZXQgb2YgY3JlYXRlZCBwcm9qZWN0cy4gSWdub3JlIGhpZ2hlciBtdWx0aXBsZXMgc2luY2UgdGhleQotICAgIC8vYXJlIGR1cGxpY2F0ZXMuICAgIAotICAgIGZvciAoaW50IGo9MDsgajxleHBlY3RlZEZhY2V0cy5sZW5ndGg7IGorKykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBiaWdQcmVmaXgrajsKLSAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbChwcm9qZWN0KTsKLSAgICAgIGFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3QpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGZQcm9qZWN0KTsKLQotICAgICAgICAvL0NoZWNrIGZhY2V0cwotICAgICAgICAvL2JlZ2luIGRlYnVnCi0gICAgICAgIEl0ZXJhdG9yIHBmYWNldHMgPSBmUHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKHBmYWNldHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgIAlJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pcGZhY2V0cy5uZXh0KCk7Ci0gICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oImZhY2V0PSIrcGZ2LmdldFByb2plY3RGYWNldCgpLmdldElkKCkrIiwgdmVyc2lvbj0iK3Bmdi5nZXRWZXJzaW9uU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBrPTA7IGs8ZXhwZWN0ZWRGYWNldHNbal0ubGVuZ3RoOyBrKyspCi0gICAgICAgIHsKLSAgICAgICAgICBhc3NlcnRUcnVlKGZQcm9qZWN0Lmhhc1Byb2plY3RGYWNldChleHBlY3RlZEZhY2V0c1tqXVtrXSkpOwotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvL0NoZWNrIHJ1bnRpbWUKLSAgICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IGZQcm9qZWN0LmdldFJ1bnRpbWUoKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChmUnVudGltZSk7Ci0gICAgICAgIElSdW50aW1lIHNSdW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoZlJ1bnRpbWUpOwotICAgICAgICBhc3NlcnROb3ROdWxsKHNSdW50aW1lKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShzUnVudGltZS5nZXRJZCgpLmVxdWFscyhleHBlY3RlZFJ1bnRpbWVzW2pdKSk7Ci0gICAgICAgIAotICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgIHsKLSAgICAgICAgZmFpbCgpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIAotICAgIC8vQ2hlY2sgdGhhdCBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRQcm9qZWN0c0ZvclNlcnZpY2VUeXBlQW5kUnVudGltZSguLikgcmV0dXJucwotICAgIC8vdGhlIHJpZ2h0IHNldCBvZiBwcm9qZWN0cwotICAgIFN0cmluZyBzZXJ2aWNlVHlwZSA9IFN0cmluZy52YWx1ZU9mKFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkgKyAiLyIgKyBTRVJWSUNFX0lNUExfSkFWQTsKLSAgICBTdHJpbmdbXSBwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JTZXJ2aWNlVHlwZUFuZFJ1bnRpbWUoc2VydmljZVR5cGUsIEFYSVNfUlVOVElNRSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzU2VydmljZS5sZW5ndGgsIHByb2plY3RzRm9yQXhpc1NlcnZpY2UubGVuZ3RoKTsKLSAgICBMaXN0IHByb2plY3RzRm9yQXhpc1NlcnZpY2VMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHByb2plY3RzRm9yQXhpc1NlcnZpY2VMaXN0LmFkZChwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlW2ldKTsgICAgICAKLSAgICB9Ci0gICAgZm9yIChpbnQgaT0wOyBpPGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzU2VydmljZS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhc3NlcnRUcnVlKHByb2plY3RzRm9yQXhpc1NlcnZpY2VMaXN0LmNvbnRhaW5zKGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzU2VydmljZVtpXSkpOwotICAgIH0KLSAgICAKLSAgICAvL0NoZWNrIHRoYXQgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JDbGllbnRUeXBlQW5kUnVudGltZSguLikgcmV0dXJucwotICAgIC8vdGhlIHJpZ2h0IHNldCBvZiBwcm9qZWN0cyAgICAKLSAgICBTdHJpbmdbXSBwcm9qZWN0c0ZvckF4aXNDbGllbnQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRQcm9qZWN0c0ZvckNsaWVudFR5cGVBbmRSdW50aW1lKENMSUVOVF9JTVBMX0pBVkEsIEFYSVNfUlVOVElNRSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzQ2xpZW50Lmxlbmd0aCwgcHJvamVjdHNGb3JBeGlzQ2xpZW50Lmxlbmd0aCk7Ci0gICAgTGlzdCBwcm9qZWN0c0ZvckF4aXNDbGllbnRMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0c0ZvckF4aXNDbGllbnQubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcHJvamVjdHNGb3JBeGlzQ2xpZW50TGlzdC5hZGQocHJvamVjdHNGb3JBeGlzQ2xpZW50W2ldKTsgICAgICAKLSAgICB9Ci0gICAgZm9yIChpbnQgaT0wOyBpPGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzQ2xpZW50Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGFzc2VydFRydWUocHJvamVjdHNGb3JBeGlzQ2xpZW50TGlzdC5jb250YWlucyhleHBlY3RlZFByb2plY3RzRm9yQXhpc0NsaWVudFtpXSkpOwotICAgIH0gICAgCi0gICAgCi0gICAgLy9DaGVjayB0aGF0IHRoZSBBeGlzIHNlcnZpY2UgYW5kIGNsaWVudCBydW50aW1lcycgcHJvamVjdCBjb21wYXRpYmlsaXR5IGNoZWNraW5nIGlzIHdvcmtpbmcKLSAgICBmb3IgKGludCBpPTA7IGk8ZXhwZWN0ZWRCb29sZWFuc0ZvckF4aXNTZXJ2aWNlLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IGJpZ1ByZWZpeCtpOyAgICAgIAotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzU2VydmljZVtpXSwgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFByb2plY3QoQVhJU19TRVJWSUNFX1JVTlRJTUUsIHByb2plY3ROYW1lKSk7ICAgIAotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzQ2xpZW50V2ViW2ldLCBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRQcm9qZWN0KEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCLCBwcm9qZWN0TmFtZSkpOwotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzQ2xpZW50SmF2YVtpXSwgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0UHJvamVjdChBWElTX0NMSUVOVF9SVU5USU1FX0pBVkEsIHByb2plY3ROYW1lKSk7Ci0gICAgfSAKLSAgICAKLSAgICAvL1R1cm4gYXV0by1idWlsZCBvZmYKLSAgICBtYW5hZ2VyLmRpc2FibGVBdXRvQnVpbGQoKTsKLSAgICAgICAgCi0gICAgLy9EZWxldGUgdGhlIHByb2plY3RzCi0gICAgZm9yIChpbnQgaT0wOyBpPG11bHRpcGxlc0ZvclByb2plY3RDcmVhdGlvbjsgaSsrKQotICAgIHsKLSAgICAgIGRlbGV0ZVByb2plY3RzKHRlbXBsYXRlSWRzLmxlbmd0aCwgUFJPSkVDVF9OQU1FX1BSRUZJWCtpKTsKLSAgICB9ICAgICAgCi0KLSAgICAvL1Jlc3RvcmUgYXV0by1idWlsZAotICAgIG1hbmFnZXIucmVzdG9yZUF1dG9CdWlsZCgpOyAgICAKLSAgfSAgCi0gIAotICBwcml2YXRlIHZvaWQgZGVsZXRlUHJvamVjdHMoaW50IG4sIFN0cmluZyBuYW1lUHJlZml4KQotICB7Ci0gICAgZm9yIChpbnQgaT0wOyBpPG47IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IG5hbWVQcmVmaXggKyBQUk9KRUNUX05BTUVfU1VGRklYICsgaTsKLSAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QobmFtZSk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgIHsKLSAgICAgICAgLy9Eb24ndCBmYWlsIHRoZSB0ZXN0IGNhc2UgaWYgcHJvamVjdCBkZWxldGlvbiBmYWlscy4KLSAgICAgIH0KLSAgICB9Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3RzKFN0cmluZ1tdIHRlbXBsYXRlSWRzLCBTdHJpbmdbXSBzY2VuYXJpb3MsIFN0cmluZ1tdIHNlcnZpY2VDbGllbnRSdW50aW1lSWRzLCBTdHJpbmdbXSBzZXJ2ZXJUeXBlcywgU3RyaW5nIG5hbWVQcmVmaXggKQotICB7Ci0gICAgaW50IG4gPSB0ZW1wbGF0ZUlkcy5sZW5ndGg7Ci0gICAgZm9yIChpbnQgaT0wOyBpPG47IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IG5hbWVQcmVmaXggKyBQUk9KRUNUX05BTUVfU1VGRklYICsgaTsKLSAgICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2cyA9IG51bGw7Ci0gICAgICBpZiAoc2NlbmFyaW9zW2ldLmVxdWFscyhDTElFTlRfU0lERSkpCi0gICAgICB7Ci0KLSAgICAgICAgICByZnZzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VDbGllbnRSdW50aW1lSWRzW2ldKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmIChzY2VuYXJpb3NbaV0uZXF1YWxzKFNFUlZJQ0VfU0lERSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZnZzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlQ2xpZW50UnVudGltZUlkc1tpXSkuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmZ2cyA9IG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvblswXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY29tbWFuZCA9IG5ldyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQoKTsKLSAgICAgIGNvbW1hbmQuc2V0UHJvamVjdE5hbWUobmFtZSk7Ci0gICAgICBjb21tYW5kLnNldFRlbXBsYXRlSWQodGVtcGxhdGVJZHNbaV0pOyAgICAgICAgICAgICAgICAgICAgCi0gICAgICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhyZnZzKTsgICAgICAgICAgIAotICAgICAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQoc2VydmVyVHlwZXNbaV0pOwotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCksIG51bGwgKTsgICAgCi0gICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgICAgewotICAgICAgICBmYWlsKCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QobmFtZSk7Ci0gICAgICBGYWNldFV0aWxzLmFkZFJlcXVpcmVkRmFjZXRzVG9Qcm9qZWN0KHByb2plY3QsIHJmdnMsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgIH0gICAgCi0gIH0gIAotICAKLSAgLyoqCi0gICAqIFRlc3RzIHByb2plY3QgdHlwZSBmaWx0ZXJpbmcgZm9yIHRoZSBBeGlzIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAqIFRlc3RzIGNvdmVyIGFsbCBTZXJ2aWNlUnVudGltZXMgYW5kIENsaWVudFJ1bnRpbWVzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFByb2plY3RUeXBlRmlsdGVyaW5nKCkKLSAgeyAgCi0gICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSBleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlID0gbmV3IElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10ge1RFTVBMQVRFX1dFQn07Ci0gICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSBleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIgPSBuZXcgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSB7VEVNUExBVEVfV0VCfTsKLSAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZVtdIGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEgPSBuZXcgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSB7VEVNUExBVEVfVVRJTElUWX07Ci0gICAgCi0gICAgU2V0IHRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0VGVtcGxhdGVzRm9yU2VydmljZVJ1bnRpbWUoQVhJU19TRVJWSUNFX1JVTlRJTUUpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlLmxlbmd0aCx0ZW1wbGF0ZXNGb3JBeGlzU2VydmljZS5zaXplKCkpOwotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGFzc2VydFRydWUodGVtcGxhdGVzRm9yQXhpc1NlcnZpY2UuY29udGFpbnMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzU2VydmljZVtpXSkpOwotICAgIH0KLSAgICBTZXQgdGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYiA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoQVhJU19DTElFTlRfUlVOVElNRV9XRUIpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIubGVuZ3RoLCB0ZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViLnNpemUoKSk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYi5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhc3NlcnRUcnVlKHRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIuY29udGFpbnMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViW2ldKSk7Ci0gICAgfSAgICAKLSAgICBTZXQgdGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEgPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZXNGb3JDbGllbnRSdW50aW1lKEFYSVNfQ0xJRU5UX1JVTlRJTUVfSkFWQSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEubGVuZ3RoLCB0ZW1wbGF0ZXNGb3JBeGlzQ2xpZW50SmF2YS5zaXplKCkpOwotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGFzc2VydFRydWUodGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEuY29udGFpbnMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50SmF2YVtpXSkpOwotICAgIH0KLSAgICAKLSAgICAKLSAgfSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvRHluYW1pY1BvcHVwSlVuaXRXaXphcmQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9EeW5hbWljUG9wdXBKVW5pdFdpemFyZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTcyZjcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9EeW5hbWljUG9wdXBKVW5pdFdpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTA5ICAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YUZsb3dNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5JRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLQotcHVibGljIGNsYXNzIER5bmFtaWNQb3B1cEpVbml0V2l6YXJkIGV4dGVuZHMgRHluYW1pY1BvcHVwV2l6YXJkIHsKLQlwcml2YXRlIElFY2xpcHNlU3RhdHVzSGFuZGxlciBoYW5kbGVyXzsKLSAgICBwcml2YXRlIElMb2cgbG9nXzsKLQlwdWJsaWMgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQoSUVjbGlwc2VTdGF0dXNIYW5kbGVyIGhhbmRsZXIpCi0JewotCQloYW5kbGVyXyA9IGhhbmRsZXI7Ci0JfQotICAKLSAgICBwdWJsaWMgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQoSUVjbGlwc2VTdGF0dXNIYW5kbGVyIGhhbmRsZXIsIElMb2cgbG9nKQotICAgIHsKLSAgICAgICAgaGFuZGxlcl8gPSBoYW5kbGVyOwotICAgICAgICBsb2dfID0gbG9nOwotICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBydW5IZWFkTGVzcyhJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sSVJ1bm5hYmxlQ29udGV4dCBjb250ZXh0KSB7Ci0JCQotCQlQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQgPSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0JCUVjbGlwc2VFbnZpcm9ubWVudCAgICAgICAgIGVudmlyb25tZW50ICAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwsIHJlc291cmNlQ29udGV4dCwgaGFuZGxlcl8gKTsKLQkJaWYgKGxvZ18hPW51bGwpCi0gICAgICAgICAgZW52aXJvbm1lbnQuc2V0TG9nKGxvZ18pOwotICAgIAotCQlEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCAgICBkYXRhUmVnaXN0cnlfICAgPSBuZXcgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwoKTsJICAgIAotCQlEYXRhRmxvd01hbmFnZXIgICAgICAgICAgICBkYXRhTWFuYWdlciAgICAgPSBuZXcgRGF0YUZsb3dNYW5hZ2VyKCBkYXRhUmVnaXN0cnlfLCBlbnZpcm9ubWVudCApOwotCQlTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlciBtYW5hZ2VyICAgICAgICAgPSBuZXcgU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXIoZW52aXJvbm1lbnQsIGRhdGFNYW5hZ2VyKTsKLQkJICAKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBjb21tYW5kV2lkZ2V0QmluZGluZ18gPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpd2l6YXJkRWxlbWVudF8uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbiggImNsYXNzIiApOwotCSAgICB9Ci0JICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0JICAgIHsKLQkgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQkgICAgCi0JCWNvbW1hbmRXaWRnZXRCaW5kaW5nXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5XyApOwotCQkKLQkJQ29tbWFuZEZyYWdtZW50ICAgICAgICAgICAgcm9vdEZyYWdtZW50ICAgID0gZ2V0Um9vdEZyYWdtZW50KCBzZWxlY3Rpb24sIG51bGwgKTsKLQkJbWFuYWdlci5zZXRSb290RnJhZ21lbnQoIHJvb3RGcmFnbWVudCApOwotCQltYW5hZ2VyLnJ1bkZvcndhcmRUb05leHRTdG9wKCBjb250ZXh0ICk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL0pVbml0VXRpbHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9KVW5pdFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZjQwNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL0pVbml0VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwMzE0ICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNTA5ICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1IAotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcxMTE2ICAyMDgxMjQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA4MDMxMyAgMTI2Nzc0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLkluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLldhaXRGb3JBdXRvQnVpbGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnByZWZlcmVuY2VzLkFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVudmlyb25tZW50VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwub3BlcmF0aW9ucy5WYWxpZGF0b3JNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi0KLXB1YmxpYyBjbGFzcyBKVW5pdFV0aWxzIHsKLQkvLyBCZWdpbiBTZXJ2ZXIgVXRpbGl0aWVzCi0JcHVibGljIHN0YXRpYyBJUnVudGltZSBjcmVhdGVTZXJ2ZXJSdW50aW1lKFN0cmluZyBydW50aW1lVHlwZUlkLFN0cmluZyBzZXJ2ZXJJbnN0YWxsUGF0aCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJSVJ1bnRpbWVUeXBlIHJ0ID0gU2VydmVyQ29yZS5maW5kUnVudGltZVR5cGUocnVudGltZVR5cGVJZCk7Ci0JCVN0cmluZyB0Y3ZlcnNpb24gPSBydW50aW1lVHlwZUlkLnN1YnN0cmluZyhydW50aW1lVHlwZUlkLmxhc3RJbmRleE9mKCIuIikrMSk7Ci0JCUlSdW50aW1lV29ya2luZ0NvcHkgd2MgPSBydC5jcmVhdGVSdW50aW1lKHRjdmVyc2lvbisiUnVudGltZSIsIG51bGwpOwotCQl3Yy5zZXRMb2NhdGlvbihuZXcgUGF0aChzZXJ2ZXJJbnN0YWxsUGF0aCkpOwotCQkKLQkJcmV0dXJuIHdjLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJU2VydmVyIGNyZWF0ZVNlcnZlcihTdHJpbmcgbmFtZSxTdHJpbmcgc2VydmVyVHlwZUlkLElSdW50aW1lIHJ1bnRpbWUsSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlclR5cGVJZCk7Ci0gICAgICBJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOyAKLSAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZlcnMubGVuZ3RoO2krKyl7Ci0gICAgICAgIGlmKHNlcnZlcnNbaV0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKHNlcnZlclR5cGUuZ2V0SWQoKSkpewotICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2ldOyAgCi0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcldjID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIoc2VydmVyVHlwZUlkLG51bGwsIG1vbml0b3IgKTsKLQkgIHNlcnZlcldjLnNldE5hbWUobmFtZSk7Ci0JICBzZXJ2ZXJXYy5zZXRSdW50aW1lKHJ1bnRpbWUpOwotICAgICAgSVNlcnZlciBzZXJ2ZXIgPSBzZXJ2ZXJXYy5zYXZlQWxsKHRydWUsIG1vbml0b3IgKTsKLSAgICAgIHJldHVybiBzZXJ2ZXI7Ci0JfQkKLQkKLQkvKioKLQkgKiBjcmVhdGVTZXJ2ZXIgYW5kIGluc3RhbGwgSlJFIGZvciBTZXJ2ZXJzIHJlcXVpcmluZyBhIHNwZWNpZmljIEpSRQotCSAqIEBwYXJhbSBqYXZhUnVudGltZVBhdGggSlJFIGluc3RhbGwgbG9jYXRpb247IGkuZS4gRTpcXEphdmExNDEKLQkgKiBAcGFyYW0ganJlSUQgSlJFIGlkOyBpLmUuIGphdmExNDEKLQkgKiBAcGFyYW0gbmFtZSBzZXJ2ZXIgbmFtZQotCSAqIEBwYXJhbSBzZXJ2ZXJUeXBlSWQgc2VydmVyIHR5cGUgaWQKLQkgKiBAcGFyYW0gcnVudGltZSBJUnVudGltZQotCSAqIEBwYXJhbSBlbnYgSUVudmlyb25tZW50Ci0JICogQHJldHVybiAgc2VydmVyIElTZXJ2ZXIKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqIAotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBJU2VydmVyIGNyZWF0ZVNlcnZlcihTdHJpbmcgamF2YVJ1bnRpbWVQYXRoLCBTdHJpbmcganJlSUQsIFN0cmluZyBuYW1lLFN0cmluZyBzZXJ2ZXJUeXBlSWQsSVJ1bnRpbWUgcnVudGltZSxJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlSWQpOwotICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7IAotICAgIGZvciAoaW50IGk9MDtpPHNlcnZlcnMubGVuZ3RoO2krKyl7Ci0gICAgICBpZihzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpLmVxdWFscyhzZXJ2ZXJUeXBlLmdldElkKCkpKXsKLSAgICAgICAgcmV0dXJuIHNlcnZlcnNbaV07ICAKLSAgICAgIH0KLSAgICB9Ci0KLQkJSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcldjID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIoc2VydmVyVHlwZUlkLG51bGwsIG1vbml0b3IgKTsKLQkJc2VydmVyV2Muc2V0TmFtZShuYW1lKTsKLQkJc2VydmVyV2Muc2V0UnVudGltZShydW50aW1lKTsKLQkJCi0JCUlTZXJ2ZXIgc2VydmVyID0gc2VydmVyV2Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yICk7Ci0JCQotCQlyZXR1cm4gc2VydmVyOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgc3RhcnRTZXJ2ZXIoSVNlcnZlciBzZXJ2ZXIsSUVudmlyb25tZW50IGVudikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJZmluYWwgSVNlcnZlciBjdXJyZW50U2VydmVyID0gc2VydmVyOwotCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkJewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCSAgY3VycmVudFNlcnZlci5zdGFydChJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSwgbW9uaXRvciApOwotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQkJCXsKLQkJCQkJSW50ZXJydXB0ZWRFeGNlcHRpb24gd3JhcHBlciA9IG5ldyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCQkJCXdyYXBwZXIuc2V0U3RhY2tUcmFjZShlLmdldFN0YWNrVHJhY2UoKSk7Ci0JCQkJCXRocm93IHdyYXBwZXI7Ci0JCQkJfQotCQkJfQotCQl9OwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLnJ1bih0cnVlLGZhbHNlLHJ1bm5hYmxlKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIHJlbW92ZUVBUkZyb21TZXJ2ZXIoSVNlcnZlciBzZXJ2ZXIsSVByb2plY3QgZWFyUHJvamVjdCxJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlpbnQgbnVtYmVyT2ZNb2R1bGVzID0gc2VydmVyLmdldE1vZHVsZXMoKS5sZW5ndGg7Ci0JCWlmIChzZXJ2ZXIgIT0gbnVsbCkKLQkJewotICAgICAgZmluYWwgSU1vZHVsZSBlYXJQcm9qZWN0TW9kdWxlID0gU2VydmVyVXRpbC5nZXRNb2R1bGUoZWFyUHJvamVjdCk7Ci0gICAgICBmaW5hbCBJTW9kdWxlW10gbW9kdWxlcyA9IHtlYXJQcm9qZWN0TW9kdWxlfTsKLQkJCW5ldyBTZXJ2ZXJVdGlscygpLm1vZGlmeU1vZHVsZXMoZW52LCBzZXJ2ZXIsZWFyUHJvamVjdE1vZHVsZSxmYWxzZSwgbW9uaXRvciApOwotCQkgIAlmaW5hbCBJU2VydmVyIGN1cnJlbnRTZXJ2ZXIgPSBzZXJ2ZXI7Ci0JCSAgCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBydW5uYWJsZSA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotCQkJewotCQkgIAkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uCi0JCQkJewotCQkgIAkJICAJZm9yIChpbnQgaT0wO2k8MTAwMDtpKyspCi0JCSAgCQkgIAl7Ci0JCSAgCQkgIAkJaW50IG1vZHVsZVN0YXRlID0gY3VycmVudFNlcnZlci5nZXRNb2R1bGVTdGF0ZShtb2R1bGVzKTsKLQkJICAJCSAgCQlpZiAobW9kdWxlU3RhdGUgPT0gSVNlcnZlci5TVEFURV9TVEFSVEVEIHx8IG1vZHVsZVN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RPUFBJTkcpCi0JCSAgCQkgIAkJewotCQkgIAkJICAJCSAgdHJ5Ci0JCSAgCQkJCSAgewotCQkgIAkJICAJCSAgICBUaHJlYWQuc2xlZXAoMzAwKTsKLQkJICAJCQkJICB9Ci0JCSAgCQkgIAkJICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLQkJICAJCQkJICB7Ci0JCSAgCQkgIAkJICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7Ci0JCSAgCQkJCSAgfQotCQkgIAkJICAJCX0KLQkJICAJCSAgCQllbHNlCi0JCSAgCQkgIAkJCWJyZWFrOwotCQkgIAkJICAJfSAgCQkJICAJCQkKLQkJCQl9ICAJCQotCQkJfTsKLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCkucnVuKHRydWUsZmFsc2UscnVubmFibGUpOwotCQkJcmV0dXJuIChzZXJ2ZXIuZ2V0TW9kdWxlcygpLmxlbmd0aCA9PSAobnVtYmVyT2ZNb2R1bGVzLTEpKTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiByZW1vdmVNb2R1bGVGcm9tU2VydmVyKElTZXJ2ZXIgc2VydmVyLCBJUHJvamVjdCB3ZWJQcm9qZWN0LCBJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgIAotCSAgaW50IG51bWJlck9mTW9kdWxlcyA9IHNlcnZlci5nZXRNb2R1bGVzKCkubGVuZ3RoOwotCQlpZiAoc2VydmVyICE9IG51bGwpCi0JCXsKLSAgICAgIGZpbmFsIElNb2R1bGUgd2ViUHJvamVjdE1vZHVsZSA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlKHdlYlByb2plY3QpOwotICAgICAgZmluYWwgSU1vZHVsZVtdIG1vZHVsZXMgPSB7d2ViUHJvamVjdE1vZHVsZX07Ci0KLQkJCW5ldyBTZXJ2ZXJVdGlscygpLm1vZGlmeU1vZHVsZXMoZW52LCBzZXJ2ZXIsd2ViUHJvamVjdE1vZHVsZSxmYWxzZSwgbW9uaXRvciApOwotCQkgIAlmaW5hbCBJU2VydmVyIGN1cnJlbnRTZXJ2ZXIgPSBzZXJ2ZXI7Ci0JCSAgCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBydW5uYWJsZSA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotCQkJewotCQkgIAkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uCi0JCQkJewotCQkgIAkJICAJZm9yIChpbnQgaT0wO2k8MTAwMDtpKyspCi0JCSAgCQkgIAl7Ci0JCSAgCQkgIAkJaW50IG1vZHVsZVN0YXRlID0gY3VycmVudFNlcnZlci5nZXRNb2R1bGVTdGF0ZShtb2R1bGVzKTsKLQkJICAJCSAgCQlpZiAobW9kdWxlU3RhdGUgPT0gSVNlcnZlci5TVEFURV9TVEFSVEVEIHx8IG1vZHVsZVN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RPUFBJTkcpCi0JCSAgCQkgIAkJewotCQkgIAkJICAJCSAgdHJ5Ci0JCSAgCQkJCSAgewotCQkgIAkJICAJCSAgICBUaHJlYWQuc2xlZXAoMzAwKTsKLQkJICAJCQkJICB9Ci0JCSAgCQkgIAkJICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLQkJICAJCQkJICB7Ci0JCSAgCQkgIAkJICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7Ci0JCSAgCQkJCSAgfQotCQkgIAkJICAJCX0KLQkJICAJCSAgCQllbHNlCi0JCSAgCQkgIAkJCWJyZWFrOwotCQkgIAkJICAJfSAgCQkJICAJCQkKLQkJCQl9ICAJCQotCQkJfTsKLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCkucnVuKHRydWUsZmFsc2UscnVubmFibGUpOwotCQkJLy9UaHJlYWQuc2xlZXAoNjAwMCk7Ci0JCQlyZXR1cm4gKHNlcnZlci5nZXRNb2R1bGVzKCkubGVuZ3RoID09IChudW1iZXJPZk1vZHVsZXMtMSkpOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JLy8gQmVnaW46IEdlbmVyYWwgRWNsaXBzZSBVdGlsaXRpZXMKLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgc3luY0J1aWxkUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXByb2plY3QuYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5GVUxMX0JVSUxELCBtb25pdG9yICk7Ci0JCVdhaXRGb3JBdXRvQnVpbGRDb21tYW5kIGNtZCA9IG5ldyBXYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZCgpOwotICAgIGNtZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0JCWNtZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIHZvaWQgY29weVRlc3RGaWxlcyhTdHJpbmcgcGF0aFN0cmluZyxpbnQgcm9vdFNlZ21lbnRMZW5ndGgsSUZvbGRlciBkZXN0Rm9sZGVyLElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCUVudW1lcmF0aW9uIGUgPSBUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnlQYXRocyhwYXRoU3RyaW5nKTsKLQkJd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0JCXsKLQkJCVN0cmluZyBmaWxlUGF0aCA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotCQkJaWYgKGZpbGVQYXRoLmVuZHNXaXRoKCIvIikpCi0JCQkJY29weVRlc3RGaWxlcyhmaWxlUGF0aCxyb290U2VnbWVudExlbmd0aCxkZXN0Rm9sZGVyLGVudiwgbW9uaXRvciApOwotCQkJZWxzZQotCQkJewotCQkJCUlQYXRoIGZpbGVJUGF0aCA9IG5ldyBQYXRoKGZpbGVQYXRoKTsKLQkJCQlGaWxlUmVzb3VyY2VVdGlscy5jb3B5RmlsZShFbnZpcm9ubWVudFV0aWxzLmdldFJlc291cmNlQ29udGV4dChlbnYpLAotCQkJCQkJICAgICAgICAgICAgICAgICAgIFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKSwKLQkJCQkJCQkJCQkgICBmaWxlSVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKGZpbGVJUGF0aC5zZWdtZW50Q291bnQoKS1yb290U2VnbWVudExlbmd0aCksIC8vIC9kYXRhLzxzdWJkaXI+Ci0JCQkJCQkJCQkJICAgKG5ldyBQYXRoKGZpbGVQYXRoKSkucmVtb3ZlRmlyc3RTZWdtZW50cyhyb290U2VnbWVudExlbmd0aCksIC8vIGZpbGVzIGFmdGVyIC9kYXRhLzxzdWJkaXI+Ci0JCQkJCQkJCQkJICAgZGVzdEZvbGRlci5nZXRGdWxsUGF0aCgpLAotCQkJCQkJCQkJCSAgIG1vbml0b3IsCi0JCQkJCQkJCQkJICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlUZXN0RGF0YShTdHJpbmcgZGF0YVN1YmRpcmVjdG9yeSxJRm9sZGVyIGRlc3RGb2xkZXIsSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIHBhdGhTdHJpbmcgPSAiL2RhdGEvIitkYXRhU3ViZGlyZWN0b3J5OwotCQljb3B5VGVzdEZpbGVzKHBhdGhTdHJpbmcsbmV3IFBhdGgocGF0aFN0cmluZykuc2VnbWVudENvdW50KCksZGVzdEZvbGRlcixlbnYsIG1vbml0b3IpOwotCQkKLQl9Ci0JCi0JLy8gQmVnaW46IFdlYiBTZXJ2aWNlcyBVdGlsaXRpZXMKLQlwdWJsaWMgc3RhdGljIHZvaWQgaGlkZUFjdGlvbkRpYWxvZ3MoKQotCXsKLQkJUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGFjdGlvbkRpYWxvZ3NDdHggPSBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQkJQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVbXSBhY3Rpb25EaWFsb2dQcmVmcyAgPSBhY3Rpb25EaWFsb2dzQ3R4LmdldERpYWxvZ3MoKTsKLQkJZm9yIChpbnQgaT0wO2k8YWN0aW9uRGlhbG9nUHJlZnMubGVuZ3RoO2krKykKLQkJCWFjdGlvbkRpYWxvZ3NDdHguc2V0QWN0aW9uRGlhbG9nRW5hYmxlZChhY3Rpb25EaWFsb2dQcmVmc1tpXS5nZXRJZCgpLHRydWUpOwkJCi0JfQotCQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGVuYWJsZVByb3h5R2VuZXJhdGlvbihib29sZWFuIGVuYWJsZSkKLQl7Ci0JCVNjZW5hcmlvQ29udGV4dCBjdHggPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0JCWJvb2xlYW4gcHJldmlvdXNTZXR0aW5nID0gY3R4LmdldEdlbmVyYXRlUHJveHkoKTsKLQkJY3R4LnNldEdlbmVyYXRlUHJveHkoZW5hYmxlKTsKLQkJcmV0dXJuIHByZXZpb3VzU2V0dGluZzsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGVuYWJsZU92ZXJ3cml0ZShib29sZWFuIGVuYWJsZSkKLQl7Ci0JCVJlc291cmNlQ29udGV4dCBjdHggPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UmVzb3VyY2VDb250ZXh0KCk7Ci0JCWJvb2xlYW4gcHJldmlvdXNTZXR0aW5nID0gY3R4LmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCk7Ci0JCWN0eC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoZW5hYmxlKTsKLQkJcmV0dXJuIHByZXZpb3VzU2V0dGluZzsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHNldFJ1bnRpbWVQcmVmZXJlbmNlKFN0cmluZyBydCl7Ci0JCVBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotCQljb250ZXh0LnNldFJ1bnRpbWVJZChydCk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlV1NJRGlhbG9nKElQcm9qZWN0IHByb2plY3QpewotCSAgCi0JICBQZXJzaXN0ZW50V1NJQ29udGV4dCBjdHggPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTSUFQQ29udGV4dCgpOwotCSAgY3R4LnVwZGF0ZVByb2plY3RXU0lDb21wbGlhbmNlcyhwcm9qZWN0LCBQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAKLQkgIFBlcnNpc3RlbnRXU0lDb250ZXh0IGN0eDIgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0JICBjdHgyLnVwZGF0ZVByb2plY3RXU0lDb21wbGlhbmNlcyhwcm9qZWN0LCBQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHNldFdTUnVudGltZVNlcnZlcihTdHJpbmcgd3NSdW50aW1lSWQsU3RyaW5nIHNlcnZlclR5cGVJZCkKLQl7Ci0JCVBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBzZXJ2ZXJSdW50aW1lQ3R4ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotCQlzZXJ2ZXJSdW50aW1lQ3R4LnNldFJ1bnRpbWVJZCh3c1J1bnRpbWVJZCk7Ci0JCXNlcnZlclJ1bnRpbWVDdHguc2V0U2VydmVyRmFjdG9yeUlkKHNlcnZlclR5cGVJZCk7CQkKLQl9Ci0JCi0KLQlwcml2YXRlIHN0YXRpYyBJU3RhdHVzW10gbGF1bmNoV2l6YXJkKFN0cmluZyBwbHVnaW5OUyxTdHJpbmcgd2l6YXJkSWQsU3RyaW5nIG9iamVjdENsYXNzSWQsSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcigpOwotCi0gICAgICAgIER5bmFtaWNQb3B1cEpVbml0V2l6YXJkIHdpemFyZCA9IG5ldyBEeW5hbWljUG9wdXBKVW5pdFdpemFyZChzdGF0dXNIYW5kbGVyKTsKLSAgICAgICAgd2l6YXJkLnNldEluaXRpYWxEYXRhKHdpemFyZElkKTsKLSAgICAgICAgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nIG1vbml0b3IgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgIAl3aXphcmQucnVuSGVhZExlc3MoaW5pdGlhbFNlbGVjdGlvbiwgbW9uaXRvcik7Ci0gICAgICAgIH0gCi0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSl7Ci0gICAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAJcmV0dXJuIG5ldyBJU3RhdHVzW117U3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoZSl9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdGF0dXNIYW5kbGVyLmdldEFsbFJlcG9ydHMoKTsKLQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hDcmVhdGlvbldpemFyZChTdHJpbmcgd2l6YXJkSWQsU3RyaW5nIG9iamVjdENsYXNzSWQsSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGxhdW5jaFdpemFyZCgib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIix3aXphcmRJZCxvYmplY3RDbGFzc0lkLGluaXRpYWxTZWxlY3Rpb24pOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElTdGF0dXNbXSBsYXVuY2hDb25zdW1wdGlvbldpemFyZChTdHJpbmcgd2l6YXJkSWQsU3RyaW5nIG9iamVjdENsYXNzSWQsSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGxhdW5jaFdpemFyZCgib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpIix3aXphcmRJZCxvYmplY3RDbGFzc0lkLGluaXRpYWxTZWxlY3Rpb24pOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElTdGF0dXMgY3JlYXRlV2ViTW9kdWxlKFN0cmluZyB3ZWJQcm9qZWN0TmFtZSwgU3RyaW5nIG1vZHVsZU5hbWUsIFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlELCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBTdHJpbmcgajJlZVZlcnNpb24sIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApewotCi0JICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JICB0cnl7Ci0JICAgIENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCBjcmVhdGVXZWIgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7Ci0JICAgIGNyZWF0ZVdlYi5zZXRQcm9qZWN0TmFtZSh3ZWJQcm9qZWN0TmFtZSk7Ci0gICAgICAgIGNyZWF0ZVdlYi5zZXRQcm9qZWN0TmFtZShtb2R1bGVOYW1lKTsKLSAgICAgICAgY3JlYXRlV2ViLnNldFRlbXBsYXRlSWQoInRlbXBsYXRlLmpzdC53ZWIiKTsKLQkgICAgY3JlYXRlV2ViLnNldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJGYWN0b3J5SWQpOwotCSAgICBjcmVhdGVXZWIuc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXJJbnN0YW5jZUlEKTsKLQkgICAgY3JlYXRlV2ViLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhuZXcgUmVxdWlyZWRGYWNldFZlcnNpb25bMF0pOwotICAgICAgICBjcmVhdGVXZWIuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCSAgICByZXR1cm4gY3JlYXRlV2ViLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkgIH0KLQkgIGNhdGNoIChFeGNlcHRpb24gZSl7Ci0JICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBlICk7Ci0JICB9Ci0JICByZXR1cm4gc3RhdHVzOwotCSAgCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkaXNhYmxlVmFsaWRhdGlvbihJUHJvamVjdCBwcm9qZWN0KXsKLQkJCi0gICAgCS8vIGRpc2FibGUgdmFsaWRhdG9ycyBmb3IgcHJvamVjdAotCQl0cnkKLQkJewotCQkJVmFsaWRhdG9yTWFuYWdlciB2bSA9IFZhbGlkYXRvck1hbmFnZXIuZ2V0TWFuYWdlcigpOwotCQkJdm0uZGlzYWJsZUFsbFZhbGlkYXRvcnMocHJvamVjdCwgbnVsbCk7CQkJCi0JCQkKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIHRvIHNldCBWYWxpZGF0b3JzLi4uIik7Ci0JCX0KLQkJCi0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0U2VydmljZVNjZW5hcmlvRGVmYXVsdCgpIHsKLQkJUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gKFBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQpV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotCSAgICAgIGNvbnRleHQuc2V0R2VuZXJhdGVQcm94eSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlciggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldEluc3RhbGxXZWJTZXJ2aWNlKCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0SW5zdGFsbENsaWVudCggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldFN0YXJ0V2ViU2VydmljZSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldFRlc3RXZWJTZXJ2aWNlKCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0TW9uaXRvcldlYlNlcnZpY2UoZmFsc2UpOwotCSAgICAgIGNvbnRleHQuc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsgICAgCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDbGllbnRTY2VuYXJpb0RlZmF1bHQoKSB7Ci0JCVBlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQgY29udGV4dCA9IChQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0KVdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLQkgICAgICBjb250ZXh0LnNldEdlbmVyYXRlUHJveHkoIHRydWUgKTsKLQkgICAgICBjb250ZXh0LnNldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlciggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldEluc3RhbGxXZWJTZXJ2aWNlKCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0SW5zdGFsbENsaWVudCggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldFN0YXJ0V2ViU2VydmljZSggZmFsc2UgKTsKLQkgICAgICBjb250ZXh0LnNldFRlc3RXZWJTZXJ2aWNlKCBmYWxzZSApOwotCSAgICAgIGNvbnRleHQuc2V0TW9uaXRvcldlYlNlcnZpY2UoZmFsc2UpOwotCSAgICAgIGNvbnRleHQuc2V0R2VuZXJhdGVDbGllbnQoU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1ApOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9TY2VuYXJpb0NvbnN0YW50cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL1NjZW5hcmlvQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxOWU1YmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL1NjZW5hcmlvQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBTY2VuYXJpb0NvbnN0YW50cyB7Ci0JLy8gQm90dG9tIHVwIEphdmEgb3IgRUpCIHRvIFdlYiBTZXJ2aWNlIHdpemFyZCBJRC4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSVpBUkRJRF9CT1RUT01fVVAgPSAib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiOwotCQotCS8vIFRvcCBkb3duIFdTREwgdG8gU2tlbGV0b24gV2ViIFNlcnZpY2Ugd2l6YXJkIElELgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdJWkFSRElEX1RPUF9ET1dOID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIjsKLQkKLQkvLyBXZWIgU2VydmljZSBjbGllbnQgd2l6YXJkIElELgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdJWkFSRElEX0NMSUVOVCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiOwkKLQkKLQkvLyBPYmplY3QgY2xhc3MgZm9yOgotCS8vIDEpIEphdmEgc291cmNlIChib3R0b20tdXApCi0JLy8gMikgV1NETCBvciBXU0lMICh0b3AtZG93biBvciBjbGllbnQpLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9JRklMRSA9ICJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSI7Ci0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvciBKYXZhIGNvbXBpbGF0aW9uIHVuaXRzIChpLmUuIEphdmEgY2xhc3NlcyBzZWxlY3RlZCBpbiB0aGUgSmF2YSBwZXJzcGVjdGl2ZSkuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX0NMQVNTX0lEX0NPTVBJTEFUSU9OVU5JVCA9ICJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5Db21waWxhdGlvblVuaXQiOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgYSBzZXJ2aWNlIHNlbGVjdGVkIGluIHRoZSBKMkVFIHBlcnNwZWN0aXZlICh0b3AtZG93biBvciBjbGllbnQpLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9TRVJWSUNFSU1QTCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIjsKLQkKLQkvLyBPYmplY3QgY2xhc3MgZm9yIGEgV1NETFJlc291cmNlSW1wbCAodG9wLWRvd24gb3IgY2xpZW50KS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfV1NETFNFUlZJQ0VJTVBMID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlSW1wbCI7Ci0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvciBhIFNlcnZpY2VSZWYgKHRvcC1kb3duIG9yIGNsaWVudCkuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX0NMQVNTX0lEX1NFUlZJQ0VSRUYgPSAib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmIjsKLQkKLQkvLyBPYmplY3QgY2xhc3MgZm9yIGEgU2VydmljZUltcGxCZWFuIChib3R0b20tdXApLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9TRVJWSUNFSU1QTEJFQU4gPSAib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZpY2VJbXBsQmVhbiI7Ci0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvciBhIEJlYW5MaW5rIChib3R0b20tdXApLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9CRUFOTElOSyA9ICJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuQmVhbkxpbmsiOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL1dTQ3VzdG9tQWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYjg0ZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL1dTQ3VzdG9tQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMjcgICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZpY2VJbXBsQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV2ViU2VydmljZURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLQotLyoqCi0gKiBUaGUgV1NDdXN0b21BZGFwdGVyRmFjdG9yeSBpcyBhbiBBZGFwdGVyRmFjdG9yeSBzaW1pbGFyIHRvIG9uZSBhbiBhZG9wdGVyIHdvdWxkIHByb3ZpZGUgdG8gYWRhcHQgYSBjdXN0b20gb2JqZWN0IAotICogdG8gYSBXU0RMIHVyaSB0aGF0IHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB3b3VsZCB0YWtlIGFzIGlucHV0LiAgVGhlIFNlcnZsZXQgTGluaywgCi0gKiByZXByZXNlbnRpbmcgdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdW5kZXIgdGhlIEpTUi0xMDkgV2ViIHNlcnZpY2VzIGJyYW5jaCBvZiB0aGUgSjJFRSBQcm9qZWN0IEV4cGxvcmVyLCBpcyAKLSAqIHVzZWQgYXMgdGhlICJjdXN0b20gb2JqZWN0IiBpbiB0aGlzIHRlc3QuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgV1NDdXN0b21BZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIElBZGFwdGVyRmFjdG9yeSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBDbGFzc1tdIHR5cGVzID0gewotCQlJRmlsZS5jbGFzcywgU3RyaW5nLmNsYXNzCi0JfTsKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLkNsYXNzKQotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihPYmplY3QgYWRhcHRhYmxlT2JqZWN0LCBDbGFzcyBhZGFwdGVyVHlwZSkgewotCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgU2VydmxldExpbmsgJiYgKChhZGFwdGVyVHlwZSA9PSBJRmlsZS5jbGFzcyApIHx8IChhZGFwdGVyVHlwZSA9PSBTdHJpbmcuY2xhc3MpKSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJnZXRBZGFwdGVyIG9uICIrYWRhcHRhYmxlT2JqZWN0LnRvU3RyaW5nKCkpOwotCQkJU2VydmxldExpbmsgYmVhbkxpbmsgPSAoU2VydmxldExpbmspIGFkYXB0YWJsZU9iamVjdDsKLQotCQkJSUZpbGUgd3NkbEZpbGUgPSBnZXRXU0RMRmlsZShiZWFuTGluayk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIndzZGxGaWxlID0gIit3c2RsRmlsZSk7Ci0JCQlpZiAoYWRhcHRlclR5cGUgPT0gSUZpbGUuY2xhc3MpIHsKLQkJCQlyZXR1cm4gd3NkbEZpbGU7Ci0JCQl9IGVsc2UgCi0JCQkJaWYgKGFkYXB0ZXJUeXBlID09IFN0cmluZy5jbGFzcykgewotCQkJCQlVUkkgd3NkbFVyaSA9IHdzZGxGaWxlLmdldExvY2F0aW9uVVJJKCk7Ci0JCQkJCVN0cmluZyB3c2RsRmlsZVN0cmluZyA9IG51bGw7Ci0JCQkJCWlmICh3c2RsVXJpICE9IG51bGwpIHsKLQkJCQkJCXdzZGxGaWxlU3RyaW5nID0gd3NkbFVyaS50b1N0cmluZygpOwotCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJ3c2RsRmlsZVN0cmluZyA9ICIrd3NkbEZpbGVTdHJpbmcpOwotCQkJCQl9Ci0JCQkJCXJldHVybiB3c2RsRmlsZVN0cmluZzsKLQkJCQl9IGVsc2UgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlckxpc3QoKQotCSAqLwotCXB1YmxpYyBDbGFzc1tdIGdldEFkYXB0ZXJMaXN0KCkgewotCQlyZXR1cm4gdHlwZXM7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBiZWFuIFRoZSBTZXJ2aWNlSW1wbEJlYW4KLQkgKiBAcmV0dXJuIFRoZSBJRmlsZSByZXByZXNlbnRpbmcgdGhlIFdTREwgZmlsZSBmb3IgdGhpcyBTZXJ2aWNlSW1wbEJlYW4uCi0JICovCi0JcHJpdmF0ZSBJRmlsZSBnZXRXU0RMRmlsZShTZXJ2aWNlSW1wbEJlYW4gYmVhbikgewotCQkgIEVPYmplY3QgZU9iamVjdCA9IGJlYW4uZUNvbnRhaW5lcigpOwotCQkgIGlmIChlT2JqZWN0ID09IG51bGwpCi0JCQkgIHJldHVybiBudWxsOwotCSAgICAgICAgICAKLQkJICBlT2JqZWN0ID0gZU9iamVjdC5lQ29udGFpbmVyKCk7Ci0JICAgICAgCi0JCSAgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBXZWJTZXJ2aWNlRGVzY3JpcHRpb24pIHsKLQkJCSAgV2ViU2VydmljZURlc2NyaXB0aW9uIHdzZCA9IChXZWJTZXJ2aWNlRGVzY3JpcHRpb24pIGVPYmplY3Q7Ci0JCQkgIAotCQkJICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHdzZCk7ICAgIAkgIAotCSAgICAJICAKLQkJCSAgSVBhdGggcGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsgICAgCSAKLQkJCSAgcGF0aCA9IHBhdGguYXBwZW5kKHdzZC5nZXRXc2RsRmlsZSgpKTsgCi0JCQkgIHJldHVybiBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGaWxlKHBhdGgpOyAJICAKLQkJCSAgICAgIAkgICAgCi0JCSAgfQotCQkgIHJldHVybiBudWxsOwotCSAgfQotCSAgCi0JICAvKioKLQkgKiBAcGFyYW0gbGluayBUaGUgU2VydmxldExpbmsKLQkgKiBAcmV0dXJuIFRoZSBJRmlsZSByZXByZXNlbnRpbmcgdGhlIFdTREwgZmlsZSBmb3IgdGhpcyBTZXJ2bGV0TGluawotCSAqLwotCXByaXZhdGUgSUZpbGUgZ2V0V1NETEZpbGUoU2VydmxldExpbmsgbGluaykgewotCQkgIEVPYmplY3QgZU9iamVjdCA9IGxpbmsuZUNvbnRhaW5lcigpOwotCQkgIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuKQotCQkJICByZXR1cm4gZ2V0V1NETEZpbGUoKFNlcnZpY2VJbXBsQmVhbikgZU9iamVjdCk7Ci0JCSAgcmV0dXJuIG51bGw7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0Ly5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzJlZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0Ly5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIzZTFhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0PC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNTZhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0O3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5TZXJ2aWNlUG9saWN5dFRlc3RBY3RpdmF0b3IKLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuanVuaXQ0LAotIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeSwKLSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWksCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2Uud3N0LndzLAotIG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMsCi0gb3JnLmVjbGlwc2UudWkKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWQzZGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbAotc3JjLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgc3JjLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmMjkwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVNlcnZpY2UgcG9saWN5Ci1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTIxODNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLSAgCi0gIDwhLS0gV2UgbmVlZCB0aGlzIHBsdWdpbiB0byBiZSBsb2FkZWQgYXQgc3RhcnR1cCB0aW1lIHNvIHRoYXQgdGhlCi0gICAgICAgU2VydmljZVBvbGljeVByb3BlcnR5VGVzdGVyIGNsYXNzIHdpbGwgYWx3YXlzIGJlIGxvYWRlZC4gIElmIHRoaXMgaXMKLSAgICAgICBub3QgZG9uZSB0aGVuIHRoZSBTZXJ2aWNlIFBvbGljeSBwcm9qZWN0IHByb3BlcnR5IHBhZ2Ugd2lsbCBhcHBlYXIKLSAgICAgICBvbiBhbGwgcHJvamVjdCBwcm9wZXJ0eSBwYWdlcyB1bnRpbCB0aGUgcGx1Z2luIGhhcyBiZWVuIGxvYWRlZC4gCi0gICAgICAgLS0+Ci0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiLz4KLSAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLnByb3BlcnR5VGVzdGVycyI+Ci0gICAgPHByb3BlcnR5VGVzdGVyCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Quc2VydmljZS53cy5zZXJ2aWNlLnBvbGljeS5mb28iCi0gICAgICB0eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCIKLSAgICAgIG5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Quc2VydmljZS53cy5zZXJ2aWNlLnBvbGljeS5mb28iCi0gICAgICBwcm9wZXJ0aWVzPSJwcm9qZWN0SGFzRk9PZmlsZXMiCi0gICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuaW50ZXJuYWwucHJvcGVydGllcy5GT09GaWxlUHJvcGVydHlUZXN0ZXIiPgotICAgIDwvcHJvcGVydHlUZXN0ZXI+Ci0gCTwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnNlcnZpY2Vwb2xpY3kiPgotICAgICA8c2VydmljZVBvbGljeT4KLSAgICAgIDxlbmFibGVtZW50PgotICAgICAgICAgPHRlc3QgcHJvcGVydHk9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0LnNlcnZpY2Uud3Muc2VydmljZS5wb2xpY3kuZm9vLnByb2plY3RIYXNGT09maWxlcyIvPgotICAgICAgIDwvZW5hYmxlbWVudD4gCi0gICAgICAgPHBvbGljeSBwYXJlbnRQb2xpY3lJZD0ic29tZXBhcmVudCIgaWQ9ImlkMSIgZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iIG11dGFibGU9InRydWUiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDEgc2hvcnROYW1lIiBkZXNjcmlwdGlvbj0iaWQxIGRlc2NyaXB0aW9uIi8+Ci0gICAgICAgICA8cmVsYXRpb25zaGlwIGVudW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiBvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDIiCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC53YXJuIG9yZy5lY2xpcHNlLndzdC5lcnJvciIvPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDMiCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC53YXJuIi8+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9ImlkNCIKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIi8+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9ImlkMjIiCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC53YXJuMiBvcmcuZWNsaXBzZS53c3QuZXJyb3IyIi8+Ci0gIAkJCTx0YXJnZXRQb2xpY3kgaWQ9ImlkX2Jvb2xlYW4yIgotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3QuZmFsc2UiLz4gIAotICAgICAgICAgPC9yZWxhdGlvbnNoaXA+Ci0gICAgICAgICAKLSAgICAgICAgIDxyZWxhdGlvbnNoaXAgZW51bUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUiPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDMiCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC53YXJuIG9yZy5lY2xpcHNlLndzdC5lcnJvciIvPgotICAgICAgICAgPC9yZWxhdGlvbnNoaXA+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0ic29tZXBhcmVudCI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBsb25nTmFtZT0icGFyZW50IGxvbmduYW1lIiAvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9ImlkMiIgcGFyZW50UG9saWN5SWQ9InNvbWVwYXJlbnQiIAotICAgICAgICAgICAgICAgICAgICAgICAgZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3Qud2FybiIKLSAgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGU9InRydWUiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDIgc2hvcnRuYW1lIiBjb250ZXh0SGVscElkPSJzb21lY29udGV4dGlkLkEwMDEiLz4KLSAgICAgICAgIDxzdGF0ZSBrZXk9ImlkMl9rZXkiIHZhbHVlPSJpZDJfdmFsdWUiIC8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0iaWQzIiBwYXJlbnRQb2xpY3lJZD0iaWQyIiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQzIHNob3J0IG5hbWUiLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICA8cG9saWN5IGlkPSJpZDUiIHBhcmVudFBvbGljeUlkPSJpZDMiIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDUgc2hvcnQgbmFtZSIvPgotICAgICAgICAgPHJlbGF0aW9uc2hpcCBlbnVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4iPgotICAgICAgICAgICA8dGFyZ2V0UG9saWN5IGlkPSJpZDIiIAotICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0PSJvcmcuZWNsaXBzZS53c3QuaWdub3JlIi8+Ci0gICAgICAgICA8L3JlbGF0aW9uc2hpcD4gIAotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxwb2xpY3kgaWQ9ImlkNiIgcGFyZW50UG9saWN5SWQ9ImlkNSIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkNiBzaG9ydCBuYW1lIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0KLSAgICAgICA8cG9saWN5IGlkPSJpZDEwIiBwYXJlbnRQb2xpY3lJZD0iaWQyMiIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkMTAgc2hvcnQgbmFtZSIvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxwb2xpY3kgaWQ9ImlkMTEiIHBhcmVudFBvbGljeUlkPSJpZDEwIiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQxMSBzaG9ydCBuYW1lIi8+Ci0gICAgICAgICA8cmVsYXRpb25zaGlwIGVudW1MaXN0PSJvcmcuZWNsaXBzZS53c3Qud2FybiI+Ci0gICAgICAgICAgIDx0YXJnZXRQb2xpY3kgaWQ9ImlkMiIgCi0gICAgICAgICAgICAgICAgICAgaXRlbUxpc3Q9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUiLz4KLSAgICAgICAgIDwvcmVsYXRpb25zaGlwPiAgCi0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgPHBvbGljeSBpZD0iaWQxMiIgcGFyZW50UG9saWN5SWQ9ImlkMTEiIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDEyIHNob3J0IG5hbWUiLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJpZDciIHBhcmVudFBvbGljeUlkPSJpZDIiIAotICAgICAgIAkJCQkJZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iCi0gICAgICAgCQkJCQlkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJpZDcgc2hvcnQgbmFtZSIvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxwb2xpY3kgaWQ9ImlkOCIgcGFyZW50UG9saWN5SWQ9ImlkNyIgCi0gICAgICAgCQkJCQllbnVtTGlzdElkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIKLSAgICAgICAJCQkJCWRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC5lcnJvciI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkOCBzaG9ydCBuYW1lIi8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgPHBvbGljeSBpZD0iaWQ5IiBwYXJlbnRQb2xpY3lJZD0iaWQ4IiAKLSAgICAgICAJCQkJCWVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIgotICAgICAgIAkJCQkJZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LmVycm9yIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQ5IHNob3J0IG5hbWUiLz4KLSAgICAgICAgIDxyZWxhdGlvbnNoaXAgZW51bUxpc3Q9Im9yZy5lY2xpcHNlLndzdC53YXJuIj4KLSAgICAgICAgICAgPHRhcmdldFBvbGljeSBpZD0iaWQyIiAKLSAgICAgICAgICAgICAgICAgICBpdGVtTGlzdD0ib3JnLmVjbGlwc2Uud3N0Lmlnbm9yZSIvPgotICAgICAgICAgPC9yZWxhdGlvbnNoaXA+ICAKLSAgICAgICA8L3BvbGljeT4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJpZDQiIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIj4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iaWQ0IHNob3J0IG5hbWUiIGxvbmdOYW1lPSJpZDQgbG9uZyBuYW1lIiAvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIAotICAgICAgIDxwb2xpY3kgaWQ9ImlkMjIiIHBhcmVudFBvbGljeUlkPSJzb21lcGFyZW50IiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtMiIKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRFbnVtSWQ9Im9yZy5lY2xpcHNlLndzdC53YXJuMiI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImlkMjIgc2hvcnRuYW1lIiBjb250ZXh0SGVscElkPSJzb21lY29udGV4dGlkLkEwMDEiLz4KLSAgICAgICA8L3BvbGljeT4KLSAgICAgICAKLSAgICAgICA8cG9saWN5IGlkPSJpZF9ib29sZWFuMSIgZW51bUxpc3RJZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmJvb2xlYW5FbnVtIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RW51bUlkPSJvcmcuZWNsaXBzZS53c3QudHJ1ZSI+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9ImJvb2xlYW4xIHNob3J0IG5hbWUiIGxvbmdOYW1lPSJib29sZWFuMSBsb25nIG5hbWUiIC8+Ci0gICAgICAgPC9wb2xpY3k+Ci0gICAgICAgCi0gICAgICAgPHBvbGljeSBpZD0iaWRfYm9vbGVhbjIiIGVudW1MaXN0SWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5ib29sZWFuRW51bSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEVudW1JZD0ib3JnLmVjbGlwc2Uud3N0LnRydWUiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJib29sZWFuMiBzaG9ydCBuYW1lIiBsb25nTmFtZT0iYm9vbGVhbjIgbG9uZyBuYW1lIiAvPgotICAgICAgIDwvcG9saWN5PgotICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0yIiAKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ib3JnLmVjbGlwc2Uud3N0Lmlnbm9yZTIiPgotICAgICAgICAgPGl0ZW0gaWQ9Im9yZy5lY2xpcHNlLndzdC5pZ25vcmUyIgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSJJR05PUkUgU0hPUlROQU1FMiIgbG9uZ05hbWU9IklHTk9SRSBMT05HTkFNRTIiIC8+Ci0gICAgICAgICA8aXRlbSBpZD0ib3JnLmVjbGlwc2Uud3N0Lndhcm4yIgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSJXQVJOIFNIT1JUTkFNRTIiIGxvbmdOYW1lPSJXQVJOIExPTkdOQU1FMiIgLz4KLSAgICAgICAgIDxpdGVtIGlkPSJvcmcuZWNsaXBzZS53c3QuZXJyb3IyIgotICAgICAgICAgICAgICAgc2hvcnROYW1lPSJFUlJPUiBTSE9SVE5BTUUyIiBsb25nTmFtZT0iRVJST1IgTE9OR05BTUUyIiAvPgotICAgICAgIDwvZW51bWVyYXRpb24+IAotICAgICAgIAotICAgICA8L3NlcnZpY2VQb2xpY3k+ICAgICAgCi0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xpY3l1aSI+Ci0gICAgIDxzZXJ2aWNlUG9saWN5VUk+IAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkub3BlcmF0aW9uMSIgZGVmYXVsdGRhdGE9InRydWUiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0iaWQzfGlkMiIgPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJVSSBwb2xpY3kxIHNob3J0IG5hbWUiIGxvbmdOYW1lPSJVSSBwb2xpY3kxIGxvbmcgbmFtZSIgLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iLz4KLSAgICAgICAgIDxlbmFibGVkIG11bHRpc2VsZWN0PSJ0cnVlIi8+Ci0gICAgICAgPC9vcGVyYXRpb24+Ci0gICAgICAgCi0gICAgICAgPG9wZXJhdGlvbiBpZD0ic2VydmljZS51aS5vcGVyYXRpb24yIiBkZWZhdWx0ZGF0YT0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJpZFxkLioiID4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5MiBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5MiBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIi8+Ci0gICAgICAgICA8ZW5hYmxlZCBtdWx0aXNlbGVjdD0iZmFsc2UiLz4KLSAgICAgICA8L29wZXJhdGlvbj4gCi0gICAgICAgCi0gICAgICAgPG9wZXJhdGlvbiBpZD0ic2VydmljZS51aS5vcGVyYXRpb24zIiBkZWZhdWx0ZGF0YT0iZmFsc2UiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0iaWQ0IiA+Ci0gICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9IlVJIHBvbGljeTMgc2hvcnQgbmFtZSIgbG9uZ05hbWU9IlVJIHBvbGljeTMgbG9uZyBuYW1lIiAvPgotICAgICAgICAgPGVudW1lcmF0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmljZS5wb2xpY3kuZXJyb3JXYXJuRW51bSIvPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICAgIAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkub3BlcmF0aW9uNCIgZGVmYXVsdGRhdGE9InRydWUiCi0gICAgICAgICAgICAgICAgICAgICAgcG9saWN5UGF0dGVybj0iaWQxfGlkMnxpZDMiID4KLSAgICAgICAgIDxkZXNjcmlwdG9yIHNob3J0TmFtZT0iVUkgcG9saWN5NCBzaG9ydCBuYW1lIiBsb25nTmFtZT0iVUkgcG9saWN5NCBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLndzdC5zZXJ2aWNlLnBvbGljeS5lcnJvcldhcm5FbnVtIi8+Ci0gICAgICAgPC9vcGVyYXRpb24+Ci0gICAgIAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkub3BlcmF0aW9uNSIgZGVmYXVsdGRhdGE9ImZhbHNlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49ImlkMjIiIHdvcmtzcGFjZU9ubHk9InRydWUiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJVSSBwb2xpY3k1IHNob3J0IG5hbWUiIGxvbmdOYW1lPSJVSSBwb2xpY3k1IGxvbmcgbmFtZSIgLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0yIi8+Ci0gICAgICAgPC9vcGVyYXRpb24+ICAgICAgCi0gICAgICAgPG9wZXJhdGlvbiBpZD0ic2VydmljZS51aS5ib29sZWFuLm9wZXJhdGlvbjEiIGRlZmF1bHRkYXRhPSJmYWxzZSIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJpZF9ib29sLioiIHdvcmtzcGFjZU9ubHk9InRydWUiPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJVSSBwb2xpY3kyYiBib29sIHNob3J0IG5hbWUiIGxvbmdOYW1lPSJVSSBwb2xpY3kyYiBib29sIGxvbmcgbmFtZSIgLz4KLSAgICAgICAgIDxzZWxlY3Rpb24vPgotICAgICAgIDwvb3BlcmF0aW9uPgotICAgICAgIAotICAgICAgIDxvcGVyYXRpb24gaWQ9InNlcnZpY2UudWkuYm9vbGVhbi5vcGVyYXRpb24yIiBkZWZhdWx0ZGF0YT0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lQYXR0ZXJuPSJpZF9ib29sZWFuMiIgPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJVSSBwb2xpY3kzIGJvb2wgc2hvcnQgbmFtZSIgbG9uZ05hbWU9IlVJIHBvbGljeTMgYm9vbCBsb25nIG5hbWUiIC8+Ci0gICAgICAgICA8c2VsZWN0aW9uIGljb249InRydWUiLz4KLSAgICAgICA8L29wZXJhdGlvbj4KLSAgICAgICAKLSAgICAgICA8b3BlcmF0aW9uIGlkPSJzZXJ2aWNlLnVpLmNvbXBsZXgub3BlcmF0aW9uMSIgZGVmYXVsdGRhdGE9ImZhbHNlIgotICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVBhdHRlcm49InNvbWVwYXJlbnR8IGlkNCIgPgotICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJVSSBwb2xpY3k0IHNob3J0IG5hbWUiIGxvbmdOYW1lPSJVSSBwb2xpY3k0IGxvbmcgbmFtZSIgLz4KLSAgICAgICAgIDxjb21wbGV4IGxhdW5jaENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5UZXN0TGF1bmNoQ2xhc3MiLz4KLSAgICAgICAgIDxlbmFibGVkIG11bHRpc2VsZWN0PSJ0cnVlIgotICAgICAgICAgICAgICAgICAgZW5hYmxlZENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5UZXN0RW5hYmxlZENsYXNzIi8+Ci0gICAgICAgPC9vcGVyYXRpb24+Ci0gICAgICAgCi0gICAgICAgPHF1aWNrRml4IHBsdWdpbklkPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdCIKLSAgICAgICAgICAgICAgICAgY29kZT0iMSI+Ci0gICAgICAgICAgPGFjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuYWN0aW9uMSI+Ci0gICAgICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJxdWljayBmaXggMSBmb3IgY29kZSAxIi8+Ci0gICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgICAgPGFjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuYWN0aW9uMiI+Ci0gICAgICAgICAgICAgPGRlc2NyaXB0b3Igc2hvcnROYW1lPSJxdWljayBmaXggMiBmb3IgY29kZSAxIi8+Ci0gICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgPC9xdWlja0ZpeD4KLSAgICAgICAKLSAgICAgICA8cXVpY2tGaXggcGx1Z2luSWQ9Im9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0IgotICAgICAgICAgICAgICAgICBjb2RlPSIyIj4KLSAgICAgICAgICA8YWN0aW9uIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC5hY3Rpb24zIj4KLSAgICAgICAgICAgICA8ZGVzY3JpcHRvciBzaG9ydE5hbWU9InF1aWNrIGZpeCAxIGZvciBjb2RlIDIiLz4KLSAgICAgICAgICA8L2FjdGlvbj4KLSAgICAgICA8L3F1aWNrRml4PgotICAgICA8L3NlcnZpY2VQb2xpY3lVST4KLSAgIDwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9NYWluVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvTWFpblRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmI5MDNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9NYWluVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQVBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeUVudW1lcmF0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVJlbGF0aW9uc2hpcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVBvbGljeVN0YXRlRW51bTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSVNlcnZpY2VQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTdGF0ZUVudW1lcmF0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeUFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuU2VydmljZVBvbGljeVBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5saXN0ZW5lcnMuSVBvbGljeUNoaWxkQ2hhbmdlTGlzdGVuZXI7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpIC8vJE5PTi1OTFMtMSQKLXB1YmxpYyBjbGFzcyBNYWluVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UKLXsgIAotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaW9ucygpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICBwb2xpY3lMaXN0ID0gcGxhdGZvcm0uZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyggbnVsbCApOwotICAgICAKLSAgICAgZm9yKCBJU2VydmljZVBvbGljeSBwb2xpY3kgOiBwb2xpY3lMaXN0ICkKLSAgICAgewotICAgICAgIGRpc3BsYXlQb2xpY3lOb2RlKCBwb2xpY3kgKTsKLSAgICAgfSAgIAotICAgICAKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiIiApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PT0gRW51bWVyYXRpb25zOiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgTGlzdDxJU3RhdGVFbnVtZXJhdGlvbkl0ZW0+IGVycm9yV2FybkVudW0gPSBwbGF0Zm9ybS5nZXRTdGF0ZUVudW1lcmF0aW9uKCAib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkVudW0gaWQ6ICIgKyAib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LmVycm9yV2FybkVudW0iICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAKLSAgICAgZm9yKCBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbSA6IGVycm9yV2FybkVudW0gKQotICAgICB7Ci0gICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBpZDogIiArIGl0ZW0uZ2V0SWQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBzaG9ydG5hbWU6ICIgKyBpdGVtLmdldFNob3J0TmFtZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGxvbmduYW1lOiAiICsgaXRlbS5nZXRMb25nTmFtZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGlzRGVmYXVsdDogIiArIGl0ZW0uaXNEZWZhdWx0KCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICB9Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCBkaXNwbGF5UG9saWN5Tm9kZSggSVNlcnZpY2VQb2xpY3kgcG9saWN5ICkKLSAgIHsKLSAgICAgSVNlcnZpY2VQb2xpY3kgcGFyZW50UG9saWN5ID0gcG9saWN5LmdldFBhcmVudFBvbGljeSgpOwotICAgICBJRGVzY3JpcHRvciAgICAgZGVzY3JpcHRvciAgID0gcG9saWN5LmdldERlc2NyaXB0b3IoKTsKLSAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkZvdW5kIHBvbGljeTogIiArIHBvbGljeS5nZXRJZCgpICsgIiBwYXJlbnRpZDoiICsgKHBhcmVudFBvbGljeSA9PSBudWxsID8gIm51bGwiIDogcGFyZW50UG9saWN5LmdldElkKCkpICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgIAotICAgICBmb3IoIElTZXJ2aWNlUG9saWN5IGNoaWxkIDogcG9saWN5LmdldENoaWxkcmVuKCkgKQotICAgICB7Ci0gICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBjaGlsZCBpZDogIiArIGNoaWxkLmdldElkKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICB9Ci0gICAgIAotICAgICBMaXN0PElQb2xpY3lSZWxhdGlvbnNoaXA+IHJlbGF0aW9uc2hpcHMgPSBwb2xpY3kuZ2V0UmVsYXRpb25zaGlwcygpOwotICAgICAKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAgIiAgcmVsYXRpb25zaGlwczoiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGZvciggSVBvbGljeVJlbGF0aW9uc2hpcCByZWxhdGlvbnNoaXAgOiByZWxhdGlvbnNoaXBzICkKLSAgICAgewotICAgICAgIElQb2xpY3lFbnVtZXJhdGlvbkxpc3QgICAgICAgc291cmNlTGlzdCAgICAgPSByZWxhdGlvbnNoaXAuZ2V0UG9saWN5RW51bWVyYXRpb25MaXN0KCk7Ci0gICAgICAgTGlzdDxJUG9saWN5RW51bWVyYXRpb25MaXN0PiB0YXJnZXRMaXN0ICAgICA9IHJlbGF0aW9uc2hpcC5nZXRSZWxhdGVkUG9saWNpZXMoKTsKLSAgICAgICBMaXN0PElTdGF0ZUVudW1lcmF0aW9uSXRlbT4gIHNvdXJjZUVudW1MaXN0ID0gc291cmNlTGlzdC5nZXRFbnVtZXJhdGlvbkxpc3QoKTsKLSAgICAgICAKLSAgICAgICBmb3IoIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBpdGVtIDogc291cmNlRW51bUxpc3QgKQotICAgICAgIHsKLSAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAiICsgaXRlbS5nZXRJZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICB9Ci0gICAgICAgCi0gICAgICAgZm9yKCBJUG9saWN5RW51bWVyYXRpb25MaXN0IHBvbGljeUVudW1MaXN0IDogdGFyZ2V0TGlzdCApCi0gICAgICAgewotICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUlkICAgICAgID0gcG9saWN5RW51bUxpc3QuZ2V0UG9saWN5KCkuZ2V0SWQoKTsKLSAgICAgICAgIExpc3Q8SVN0YXRlRW51bWVyYXRpb25JdGVtPiB0YXJnZXRFbnVtTGlzdCA9IHBvbGljeUVudW1MaXN0LmdldEVudW1lcmF0aW9uTGlzdCgpOwotICAgICAgICAgCi0gICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgcG9saWN5IGlkOiAiICsgcG9saWN5SWQgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgCi0gICAgICAgICBmb3IoIElTdGF0ZUVudW1lcmF0aW9uSXRlbSB0YXJnZXRJdGVtIDogdGFyZ2V0RW51bUxpc3QgKQotICAgICAgICAgewotICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICB0YXJnZXQgZW51bSBpZDogIiArIHRhcmdldEl0ZW0uZ2V0SWQoKSApOyAvLyROT04tTkxTLTEkCi0gICAgICAgICB9Ci0gICAgICAgfQotICAgICB9Ci0gICAgICAgICAKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRGVzY3JpcHRvcjoiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBzaG9ydCBuYW1lOiAiICsgZGVzY3JpcHRvci5nZXRTaG9ydE5hbWUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgbG9uZyBuYW1lOiAiICsgZGVzY3JpcHRvci5nZXRMb25nTmFtZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICBkZXNjcmlwdGlvbjogIiArIGRlc2NyaXB0b3IuZ2V0RGVzY3JpcHRpb24oKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgY29udGV4dCBoZWxwOiAiICsgZGVzY3JpcHRvci5nZXRDb250ZXh0SGVscElkKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgIGljb24gcGF0aDogIiArIGRlc2NyaXB0b3IuZ2V0SWNvblBhdGgoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgaWNvbiBwYXRoIGJ1bmRsZSBpZDogIiArIGRlc2NyaXB0b3IuZ2V0SWNvbkJ1bmRsZUlkKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICI9PT0iICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiIiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBmb3IoIElTZXJ2aWNlUG9saWN5IGNoaWxkIDogcG9saWN5LmdldENoaWxkcmVuKCkgKQotICAgICB7Ci0gICAgICAgZGlzcGxheVBvbGljeU5vZGUoIGNoaWxkICk7Ci0gICAgIH0gICAKLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdEVudW1lcmF0aW9ucygpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSBwbGF0Zm9ybSAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIGlkMSAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIGlkMiAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgIGlkMyAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDMiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeVN0YXRlRW51bSAgICAgIHN0YXRlMSAgICA9IGlkMS5nZXRQb2xpY3lTdGF0ZUVudW0oKTsKLSAgICAgSVBvbGljeVN0YXRlRW51bSAgICAgIHN0YXRlMiAgICA9IGlkMi5nZXRQb2xpY3lTdGF0ZUVudW0oKTsKLSAgICAgSVBvbGljeVN0YXRlRW51bSAgICAgIHN0YXRlMyAgICA9IGlkMy5nZXRQb2xpY3lTdGF0ZUVudW0oKTsKLSAgICAgSVN0YXRlRW51bWVyYXRpb25JdGVtIGl0ZW0xICAgICA9IHN0YXRlMS5nZXRDdXJyZW50SXRlbSgpOwotICAgICBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gaXRlbTIgICAgID0gc3RhdGUyLmdldEN1cnJlbnRJdGVtKCk7Ci0gICAgIElTdGF0ZUVudW1lcmF0aW9uSXRlbSBpdGVtMyAgICAgPSBzdGF0ZTMuZ2V0Q3VycmVudEl0ZW0oKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJVbmV4cGVjdGVkIHNob3J0bmFtZToiICsgaXRlbTEuZ2V0U2hvcnROYW1lKCksIGl0ZW0xLmdldFNob3J0TmFtZSgpLmVxdWFscyggImlnbm9yZSIpICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICBhc3NlcnRUcnVlKCAiVW5leHBlY3RlZCBzaG9ydG5hbWU6IiArIGl0ZW0yLmdldFNob3J0TmFtZSgpLCBpdGVtMi5nZXRTaG9ydE5hbWUoKS5lcXVhbHMoICJ3YXJuIikgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIGFzc2VydFRydWUoICJVbmV4cGVjdGVkIHNob3J0bmFtZToiICsgaXRlbTMuZ2V0U2hvcnROYW1lKCksIGl0ZW0zLmdldFNob3J0TmFtZSgpLmVxdWFscyggImVycm9yIikgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImlkMSB2YWx1ZToiICsgaXRlbTEuZ2V0U2hvcnROYW1lKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJpZDIgdmFsdWU6IiArIGl0ZW0yLmdldFNob3J0TmFtZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdFBvbGljeVN0YXRlKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgaWQxICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJUG9saWN5U3RhdGVFbnVtICAgICAgZW51bVN0YXRlID0gaWQxLmdldFBvbGljeVN0YXRlRW51bSgpOwotICAgICBJU3RhdGVFbnVtZXJhdGlvbkl0ZW0gZW51bUl0ZW0gID0gZW51bVN0YXRlLmdldEN1cnJlbnRJdGVtKCk7Ci0gICAgIFN0cmluZyAgICAgICAgICAgICAgICBpZ25vcmVJZCAgPSAib3JnLmVjbGlwc2Uud3N0Lmlnbm9yZSI7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3RyaW5nICAgICAgICAgICAgICAgIHdhcm5JZCAgICA9ICJvcmcuZWNsaXBzZS53c3Qud2FybiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3RyaW5nICAgICAgICAgICAgICAgIGVycm9ySWQgICA9ICJvcmcuZWNsaXBzZS53c3QuZXJyb3IiOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiRGVmYXVsdCBlbnVtIG5vdDoiICsgaWdub3JlSWQsIGVudW1JdGVtLmdldElkKCkuZXF1YWxzKCBpZ25vcmVJZCApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGVudW1TdGF0ZS5zZXRDdXJyZW50SXRlbSggd2FybklkICk7Ci0gICAgIGVudW1JdGVtID0gZW51bVN0YXRlLmdldEN1cnJlbnRJdGVtKCk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiVXBkYXRlZCBlbnVtIG5vdDoiICsgd2FybklkLCBlbnVtSXRlbS5nZXRJZCgpLmVxdWFscyggd2FybklkICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcGxhdGZvcm0uZGlzY2FyZENoYW5nZXMoKTsKLSAgICAgZW51bUl0ZW0gPSBlbnVtU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJEaXNjYXJkIGVudW0gbm90OiIgKyBpZ25vcmVJZCwgZW51bUl0ZW0uZ2V0SWQoKS5lcXVhbHMoIGlnbm9yZUlkICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgZW51bVN0YXRlLnNldEN1cnJlbnRJdGVtKCBlcnJvcklkICk7Ci0gICAgIGVudW1JdGVtID0gZW51bVN0YXRlLmdldEN1cnJlbnRJdGVtKCk7Ci0gICAgIGFzc2VydFRydWUoICJFcnJvciBlbnVtIG5vdDoiICsgZXJyb3JJZCwgZW51bUl0ZW0uZ2V0SWQoKS5lcXVhbHMoIGVycm9ySWQgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwbGF0Zm9ybS5jb21taXRDaGFuZ2VzKCk7Ci0gICAgIGVudW1JdGVtID0gZW51bVN0YXRlLmdldEN1cnJlbnRJdGVtKCk7Ci0gICAgIGFzc2VydFRydWUoICJFcnJvciBlbnVtIG5vdDoiICsgZXJyb3JJZCwgZW51bUl0ZW0uZ2V0SWQoKS5lcXVhbHMoIGVycm9ySWQgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBJRWNsaXBzZVByZWZlcmVuY2VzIHByb2plY3RQcmVmZXJlbmNlcyA9IG5ldyBJbnN0YW5jZVNjb3BlKCkuZ2V0Tm9kZSggU2VydmljZVBvbGljeUFjdGl2YXRvci5QTFVHSU5fSUQgKTsKLSAgICAgCi0gICAgIHRyeQotICAgICB7Ci0gICAgICAgU3RyaW5nW10gICAgICAgICAgICBrZXlzICAgICAgICAgICAgICAgPSBwcm9qZWN0UHJlZmVyZW5jZXMua2V5cygpOwotICAgICAKLSAgICAgICBmb3IoIFN0cmluZyBrZXkgOiBrZXlzICkKLSAgICAgICB7Ci0gICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJLZXk9IiArIGtleSArICIgdmFsdWU9IiArIHByb2plY3RQcmVmZXJlbmNlcy5nZXQoIGtleSwgIiIgKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICAgfQotICAgICB9Ci0gICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgewotICAgICAgIGFzc2VydFRydWUoICJFeGNlcHRpb24gdGhyb3duIiArIGV4Yy5nZXRNZXNzYWdlKCksIGZhbHNlICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgfQotICAgfQotICAgCi0gICBwdWJsaWMgdm9pZCB0ZXN0VW5pcXVlSWRzKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgcG9saWN5ICAgID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInNvbWVpZCIsIG51bGwsIG51bGwgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggcG9saWN5LmdldElkKCkuZXF1YWxzKCAic29tZWlkIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBvbGljeSA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIG51bGwsICJzb21laWQiLCBudWxsLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggcG9saWN5LmdldElkKCkuZXF1YWxzKCAic29tZWlkMSIgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwb2xpY3kgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBudWxsLCAic29tZWlkIiwgbnVsbCwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoIHBvbGljeS5nZXRJZCgpLmVxdWFscyggInNvbWVpZDIiICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcG9saWN5ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInNvbWVpZDEiLCBudWxsLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggcG9saWN5LmdldElkKCkuZXF1YWxzKCAic29tZWlkMyIgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwb2xpY3kgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBudWxsLCAic29tZTU1aWQ1IiwgbnVsbCwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoIHBvbGljeS5nZXRJZCgpLmVxdWFscyggInNvbWU1NWlkNSIgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwb2xpY3kgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBudWxsLCAic29tZTU1aWQ1IiwgbnVsbCwgbnVsbCApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoIHBvbGljeS5nZXRJZCgpLmVxdWFscyggInNvbWU1NWlkMSIgKSApOyAvLyROT04tTkxTLTEkCi0gICB9Ci0gCi0gICAKLSAgQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgdm9pZCB0ZXN0T2xkV1NJQ29udGV4dCgpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICBwbGF0Zm9ybSAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICAgYXBQb2xpY3kgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaWFwIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lTdGF0ZUVudW0gICAgICAgICBhcFN0YXRlICAgICA9IGFwUG9saWN5LmdldFBvbGljeVN0YXRlRW51bSgpOwotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICAgc3NicFBvbGljeSAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAib3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnNlcnZpY2Vwb2xzLndzaXByb2ZpbGVjb21wLndzaXNzYnAiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgUGVyc2lzdGVudFdTSUFQQ29udGV4dCAgIGFwQ29udGV4dCAgID0gbmV3IFBlcnNpc3RlbnRXU0lBUENvbnRleHQoKTsKLSAgICAgUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0IHNzYnBDb250ZXh0ID0gbmV3IFBlcnNpc3RlbnRXU0lTU0JQQ29udGV4dCgpOwotICAgICBJV29ya3NwYWNlUm9vdCAgICAgICAgICAgcm9vdCAgICAgICAgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgICBJUHJvamVjdCAgICAgICAgICAgICAgICAgcHJvamVjdCAgICAgPSByb290LmdldFByb2plY3QoIlRlc3RQcm9qZWN0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgIGl0ZW0gICAgICAgID0gbnVsbDsKLSAgICAgCi0gICAgIHRyeQotICAgICB7Ci0gICAgICAgcHJvamVjdC5jcmVhdGUobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgIH0KLSAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICAgewotICAgICAgIGFzc2VydFRydWUoICJDb3JlIGV4Y2VwdGlvbjoiICsgZXhjLmdldE1lc3NhZ2UoKSwgZmFsc2UgKTsgICAvLyROT04tTkxTLTEkCi0gICAgIH0KLSAgICAgCi0gICAgIElQb2xpY3lTdGF0ZUVudW0gIGFwUHJvalN0YXRlICAgPSBhcFBvbGljeS5nZXRQb2xpY3lTdGF0ZUVudW0oIHByb2plY3QgKTsKLSAgICAgSVBvbGljeVN0YXRlRW51bSAgc3NicFByb2pTdGF0ZSA9IHNzYnBQb2xpY3kuZ2V0UG9saWN5U3RhdGVFbnVtKCBwcm9qZWN0ICk7Ci0gICAgIAotICAgICAvLyBFbnN1cmUgdGhhdCBwcm9qZWN0IHByZWZlcmVuY2VzIGFyZSBnb3R0ZW4gZnJvbSB0aGUgd29ya3NwYWNlCi0gICAgIGFwU3RhdGUuc2V0Q3VycmVudEl0ZW0oICJvcmcuZWNsaXBzZS53c3Quc3VnLmlnbm9yZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBwbGF0Zm9ybS5jb21taXRDaGFuZ2VzKCk7Ci0gICAgIGFwUHJvalN0YXRlLnNldEN1cnJlbnRJdGVtKCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0IiApOyAvLyROT04tTkxTLTEkCi0gICAgIGl0ZW0gPSBhcFByb2pTdGF0ZS5nZXRDdXJyZW50SXRlbSgpLmdldElkKCk7Ci0gICAgIGFzc2VydFRydWUoICJBcCB2YWx1ZSBub3QgaWdub3JlLCBidXQgZ290ICIgKyBpdGVtLCBpdGVtLmVxdWFscygib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAKLSAgICAgYXBTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcucmVxdWlyZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBwbGF0Zm9ybS5jb21taXRDaGFuZ2VzKCk7Ci0gICAgIGFwUHJvalN0YXRlLnNldEN1cnJlbnRJdGVtKCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgaXRlbSA9IGFwUHJvalN0YXRlLmdldEN1cnJlbnRJdGVtKCkuZ2V0SWQoKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIHZhbHVlIG5vdCByZXF1aXJlLCBidXQgZ290ICIgKyBpdGVtLCBpdGVtLmVxdWFscygib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgCi0gICAgIHBsYXRmb3JtLnNldFByb2plY3RQcmVmZXJlbmNlc0VuYWJsZWQoIHByb2plY3QgLCB0cnVlICk7Ci0gICAgIGl0ZW0gPSBhcFByb2pTdGF0ZS5nZXRDdXJyZW50SXRlbSgpLmdldElkKCk7Ci0gICAgIGFzc2VydFRydWUoICJBcCB2YWx1ZSBub3QgaW5nb3JlLCBidXQgZ290ICIgKyBpdGVtLCBpdGVtLmVxdWFscygib3JnLmVjbGlwc2Uud3N0LnN1Zy5pZ25vcmUiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAKLSAgICAgcGxhdGZvcm0uY29tbWl0Q2hhbmdlcyggcHJvamVjdCApOwotICAgICBpdGVtID0gYXBQcm9qU3RhdGUuZ2V0Q3VycmVudEl0ZW0oKS5nZXRJZCgpOwotICAgICBhc3NlcnRUcnVlKCAiQXAgdmFsdWUgbm90IGluZ29yZSwgYnV0IGdvdCAiICsgaXRlbSwgaXRlbS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC5zdWcuaWdub3JlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgCi0gICAgIFN0cmluZyBhcENvbnRleHRWYWx1ZSA9IGFwQ29udGV4dC5nZXRQcm9qZWN0V1NJQ29tcGxpYW5jZSggcHJvamVjdCApOwotICAgICBhc3NlcnRUcnVlKCAiQXAgY29udGV4dCBub3QgaWdub3JlLCBidXQgIiArIGFwQ29udGV4dFZhbHVlLCBhcENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgYXBTdGF0ZS5zZXRDdXJyZW50SXRlbSggIm9yZy5lY2xpcHNlLndzdC5zdWcuc3VnZ2VzdCIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBwbGF0Zm9ybS5jb21taXRDaGFuZ2VzKCk7Ci0gICAgIGFwQ29udGV4dFZhbHVlID0gYXBDb250ZXh0LmdldFByb2plY3RXU0lDb21wbGlhbmNlKCBwcm9qZWN0ICk7Ci0gICAgIGFzc2VydFRydWUoICJBcCBjb250ZXh0IG5vdCBpZ25vcmUsIGJ1dCAiICsgYXBDb250ZXh0VmFsdWUsIGFwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBwbGF0Zm9ybS5zZXRQcm9qZWN0UHJlZmVyZW5jZXNFbmFibGVkKCBwcm9qZWN0LCBmYWxzZSApOwotICAgICBhcENvbnRleHRWYWx1ZSA9IGFwQ29udGV4dC5nZXRQcm9qZWN0V1NJQ29tcGxpYW5jZSggcHJvamVjdCApOwotICAgICBhc3NlcnRUcnVlKCAiQXAgY29udGV4dCBub3QgaWdub3JlLCBidXQgIiArIGFwQ29udGV4dFZhbHVlLCBhcENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGFwUHJvalN0YXRlLnNldEN1cnJlbnRJdGVtKCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5yZXF1aXJlIiApOyAvLyROT04tTkxTLTEkCi0gICAgIHBsYXRmb3JtLmNvbW1pdENoYW5nZXMoIHByb2plY3QgKTsKLSAgICAgYXBDb250ZXh0VmFsdWUgPSBhcENvbnRleHQuZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UoIHByb2plY3QgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkFwIGNvbnRleHQgbm90IHN1Z2dlc3QsIGJ1dCAiICsgYXBDb250ZXh0VmFsdWUsIGFwQ29udGV4dFZhbHVlLmVxdWFscyggUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgcGxhdGZvcm0uc2V0UHJvamVjdFByZWZlcmVuY2VzRW5hYmxlZCggcHJvamVjdCwgdHJ1ZSApOwotICAgICBhcENvbnRleHRWYWx1ZSA9IGFwQ29udGV4dC5nZXRQcm9qZWN0V1NJQ29tcGxpYW5jZSggcHJvamVjdCApOwotICAgICBhc3NlcnRUcnVlKCAiQXAgY29udGV4dCBub3QgcmVxdWlyZSwgYnV0ICIgKyBhcENvbnRleHRWYWx1ZSwgYXBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBzc2JwUHJvalN0YXRlLnNldEN1cnJlbnRJdGVtKCAib3JnLmVjbGlwc2Uud3N0LnN1Zy5zdWdnZXN0IiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBTdHJpbmcgc3NicENvbnRleHRWYWx1ZSA9IHNzYnBDb250ZXh0LmdldFByb2plY3RXU0lDb21wbGlhbmNlKCBwcm9qZWN0ICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiQXAgY29udGV4dCBub3QgcmVxdWlyZSwgYnV0ICIgKyBhcENvbnRleHRWYWx1ZSwgYXBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoICJTU0JQIGNvbnRleHQgbm90IHN1Z2dlc3QsIGJ1dCAiICsgc3NicENvbnRleHRWYWx1ZSwgc3NicENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHNzYnBQcm9qU3RhdGUuc2V0Q3VycmVudEl0ZW0oICJvcmcuZWNsaXBzZS53c3Quc3VnLnJlcXVpcmUiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHNzYnBDb250ZXh0VmFsdWUgPSBzc2JwQ29udGV4dC5nZXRQcm9qZWN0V1NJQ29tcGxpYW5jZSggcHJvamVjdCApOwotICAgICBhc3NlcnRUcnVlKCAiQXAgY29udGV4dCBub3QgcmVxdWlyZSwgYnV0ICIgKyBhcENvbnRleHRWYWx1ZSwgYXBDb250ZXh0VmFsdWUuZXF1YWxzKCBQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoICJTU0JQIGNvbnRleHQgbm90IHJlcXVpcmUsIGJ1dCAiICsgc3NicENvbnRleHRWYWx1ZSwgc3NicENvbnRleHRWYWx1ZS5lcXVhbHMoIFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSApICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RNdXRhYmxlKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtICAgIHBsYXRmb3JtICAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgICBhcFBvbGljeSAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAud3NpYXAiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgIHNzYnBQb2xpY3kgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5zZXJ2aWNlcG9scy53c2lwcm9maWxlY29tcC53c2lzc2JwIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgICB3c2lQb2xpY3kgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuc2VydmljZXBvbHMud3NpcHJvZmlsZWNvbXAiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJSb290IHdzaSBwb2xpY3kgaXMgbXV0YWJsZSIsICF3c2lQb2xpY3kuZ2V0UG9saWN5U3RhdGUoKS5pc011dGFibGUoKSApOyAvLyROT04tTkxTLTEkCi0gICAgIGFzc2VydFRydWUoICJBcCBwb2xpY3kgaXMgbm90IG11dGFibGUiLCBhcFBvbGljeS5nZXRQb2xpY3lTdGF0ZSgpLmlzTXV0YWJsZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgYXNzZXJ0VHJ1ZSggIlNTQlAgcG9saWN5IGlzIG5vdCBtdXRhYmxlIiwgc3NicFBvbGljeS5nZXRQb2xpY3lTdGF0ZSgpLmlzTXV0YWJsZSgpICk7IC8vJE5PTi1OTFMtMSQKLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdENoaWxkQ2hhbmdlTGlzdGVuZXJzKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIENoaWxkQ2hhbmdlTGlzdGVuZXIgICBsaXN0ZW5lciA9IG5ldyBDaGlsZENoYW5nZUxpc3RlbmVyKCk7Ci0gICAgIAotICAgICBwbGF0Zm9ybS5hZGRDaGlsZENoYW5nZUxpc3RlbmVyKGxpc3RlbmVyLCBmYWxzZSApOwotICAgICBsaXN0ZW5lci5jaGlsZEV2ZW50T2NjdXJlZCA9IGZhbHNlOwotICAgICBsaXN0ZW5lci5pc0FkZGVkID0gZmFsc2U7Ci0gICAgIAotICAgICBJU2VydmljZVBvbGljeSBwYXJlbnQgPSBwbGF0Zm9ybS5jcmVhdGVTZXJ2aWNlUG9saWN5KCBudWxsLCAicGFyZW50X2lkMSIsIG51bGwsIG51bGwgKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgY2FsbGVkIiwgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBhZGRlZCIsIGxpc3RlbmVyLmlzQWRkZWQgKTsKLSAgICAgCi0gICAgIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkID0gZmFsc2U7ICAgCi0gICAgIGxpc3RlbmVyLmlzQWRkZWQgPSBmYWxzZTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgY2hpbGQxID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggcGFyZW50LCAicGFyZW50X2lkMSIsIG51bGwsIG51bGwgKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgY2FsbGVkIiwgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgKTsKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3RlbmVyIG5vdCBhZGRlZCIsIGxpc3RlbmVyLmlzQWRkZWQgKTsKLSAgICAgCi0gICAgIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkID0gZmFsc2U7ICAgCi0gICAgIGxpc3RlbmVyLmlzQWRkZWQgPSBmYWxzZTsKLSAgICAgbGlzdGVuZXIuY291bnQgICA9IDA7Ci0gICAgIElTZXJ2aWNlUG9saWN5IGNoaWxkMiA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIGNoaWxkMSwgInBhcmVudF9pZDEiLCBudWxsLCBudWxsICk7Ci0gICAgIElTZXJ2aWNlUG9saWN5IGNoaWxkMyA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIGNoaWxkMiwgInBhcmVudF9pZDEiLCBudWxsLCBudWxsICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGNhbGxlZCIsIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgYWRkZWQiLCBsaXN0ZW5lci5pc0FkZGVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBjb3VudCBub3QgMiIsIGxpc3RlbmVyLmNvdW50ID09IDIgKTsKLSAgICAgCi0gICAgIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkID0gZmFsc2U7ICAgCi0gICAgIGxpc3RlbmVyLmlzQWRkZWQgPSB0cnVlOwotICAgICBsaXN0ZW5lci5jb3VudCAgID0gMDsKLSAgICAgCi0gICAgIGNoaWxkMi5yZW1vdmVDaGlsZCggY2hpbGQzICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGNhbGxlZCIsIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgcmVtb3ZlZCIsICFsaXN0ZW5lci5pc0FkZGVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBjb3VudCBub3QgMSIsIGxpc3RlbmVyLmNvdW50ID09IDEgKTsKLSAgICAgCi0gICAgIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkID0gZmFsc2U7ICAgCi0gICAgIGxpc3RlbmVyLmlzQWRkZWQgPSB0cnVlOwotICAgICBsaXN0ZW5lci5jb3VudCAgID0gMDsKLSAgICAgCi0gICAgIC8vIFNob3VsZCByZW1vdmUgcGFyZW50LCBjaGlsZDEsIGFuZCBjaGlsZDIKLSAgICAgcGxhdGZvcm0ucmVtb3ZlU2VydmljZVBvbGljeSggcGFyZW50ICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgbm90IGNhbGxlZCIsIGxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBub3QgcmVtb3ZlZCIsICFsaXN0ZW5lci5pc0FkZGVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBjb3VudCBub3QgMyIsIGxpc3RlbmVyLmNvdW50ID09IDMgKTsKLSAgICAgCi0gICAgIHBsYXRmb3JtLnJlbW92ZUNoaWxkQ2hhbmdlTGlzdGVuZXIoIGxpc3RlbmVyLCBmYWxzZSApOwotICAgICAKLSAgICAgbGlzdGVuZXIuY2hpbGRFdmVudE9jY3VyZWQgPSBmYWxzZTsgICAKLSAgICAgbGlzdGVuZXIuaXNBZGRlZCA9IHRydWU7Ci0gICAgIGxpc3RlbmVyLmNvdW50ICAgPSAwOwotICAgICAKLSAgICAgcGFyZW50ID0gcGxhdGZvcm0uY3JlYXRlU2VydmljZVBvbGljeSggbnVsbCwgInBhcmVudF9pZDEiLCBudWxsLCBudWxsICk7Ci0gICAgIGNoaWxkMSA9IHBsYXRmb3JtLmNyZWF0ZVNlcnZpY2VQb2xpY3koIHBhcmVudCwgInBhcmVudF9pZDEiLCBudWxsLCBudWxsICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiTGlzdGVuZXIgY2FsbGVkIiwgIWxpc3RlbmVyLmNoaWxkRXZlbnRPY2N1cmVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBpc2FkZGVkIGNoYW5nZWQiLCBsaXN0ZW5lci5pc0FkZGVkICk7Ci0gICAgIGFzc2VydFRydWUoICJMaXN0ZW5lciBjb3VudCBub3QgMCIsIGxpc3RlbmVyLmNvdW50ID09IDAgKTsKLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdFN0YXRlKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtIHBsYXRmb3JtID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICBpZDIgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDIiICk7Ci0gICAgIFN0cmluZyAgICAgICAgICAgICAgICB2YWx1ZSAgICA9IGlkMi5nZXRQb2xpY3lTdGF0ZSgpLmdldFZhbHVlKCAiaWQyX2tleSIgKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJFeHBlY3RlZCBzdGF0ZSB2YWx1ZSB0byBiZSBpZDJfdmFsdWUuIiwgdmFsdWUuZXF1YWxzKCAiaWQyX3ZhbHVlIiApICk7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgY2xhc3MgQ2hpbGRDaGFuZ2VMaXN0ZW5lciBpbXBsZW1lbnRzIElQb2xpY3lDaGlsZENoYW5nZUxpc3RlbmVyCi0gICB7Ci0gICAgIHB1YmxpYyBib29sZWFuIGNoaWxkRXZlbnRPY2N1cmVkID0gZmFsc2U7Ci0gICAgIHB1YmxpYyBib29sZWFuIGlzQWRkZWQgPSBmYWxzZTsKLSAgICAgcHVibGljIGludCAgICAgY291bnQgPSAwOzsKLSAgICAgCi0gICAgIHB1YmxpYyB2b2lkIGNoaWxkQ2hhbmdlKExpc3Q8SVNlcnZpY2VQb2xpY3k+IGNoaWxkTGlzdCwgTGlzdDxCb29sZWFuPiBhZGRlZExpc3QpCi0gICAgIHsKLSAgICAgICBjaGlsZEV2ZW50T2NjdXJlZCA9IHRydWU7Ci0gICAgICAgaXNBZGRlZCA9IGFkZGVkTGlzdC5nZXQoMCk7Ci0gICAgICAgY291bnQrKzsKLSAgICAgfQotICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L01haW5VSVRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L01haW5VSVRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmFlNTU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9NYWluVUlUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kuSURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5TZXJ2aWNlUG9saWN5UGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklQb2xpY3lPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLklRdWlja0ZpeEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSVF1aWNrRml4QWN0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuU2VydmljZVBvbGljeVBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnVpLnV0aWxzLkFjdGl2aXR5VXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBNYWluVUlUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZQoteyAgCi0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpb25zKCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtVUkgcGxhdGZvcm1VSSAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtVUkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiAgb3BlcmF0aW9ucyAgID0gcGxhdGZvcm1VSS5nZXRBbGxPcGVyYXRpb25zKCk7Ci0gICAgIAotICAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gb3BlcmF0aW9uIDogb3BlcmF0aW9ucyApCi0gICAgIHsKLSAgICAgICBkaXNwbGF5T3BlcmF0aW9uKCBvcGVyYXRpb24gKTsKLSAgICAgfSAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RPcGVyYXRpb25DYWNoZSgpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgIHBsYXRmb3JtICAgPSBTZXJ2aWNlUG9saWN5UGxhdGZvcm0uZ2V0SW5zdGFuY2UoKTsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtVUkgcGxhdGZvcm1VSSA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJLmdldEluc3RhbmNlKCk7Ci0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMSAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQxIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMiAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQyIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMyAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQzIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkNCAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQ0IiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMV9pZDIgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQyLCAic2VydmljZS51aS5vcGVyYXRpb24xIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMV9pZDMgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQzLCAic2VydmljZS51aS5vcGVyYXRpb24xIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDEgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQxLCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDIgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQyLCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDMgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQzLCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wMl9pZDQgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQ0LCAic2VydmljZS51aS5vcGVyYXRpb24yIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wM19pZDQgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQ0LCAic2VydmljZS51aS5vcGVyYXRpb24zIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wNF9pZDEgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQxLCAic2VydmljZS51aS5vcGVyYXRpb240IiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wNF9pZDIgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQyLCAic2VydmljZS51aS5vcGVyYXRpb240IiApOyAvLyROT04tTkxTLTEkCi0gICAgIElQb2xpY3lPcGVyYXRpb24gICAgICAgIG9wNF9pZDMgICAgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbiggaWQzLCAic2VydmljZS51aS5vcGVyYXRpb240IiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGxpc3QxID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zKCBpZDEsIHRydWUgKTsKLSAgICAgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBsaXN0MiA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9ucyggaWQyLCB0cnVlICk7Ci0gICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gbGlzdDMgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnMoIGlkMywgdHJ1ZSApOwotICAgICBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGxpc3Q0ID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zKCBpZDQsIHRydWUgKTsKLSAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlxuRGlzcGxheSBsaXN0cyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBkaXNwbGF5TGlzdCggIkxpc3QxIiwgbGlzdDEgKTsgLy8kTk9OLU5MUy0xJAotICAgICBkaXNwbGF5TGlzdCggIkxpc3QyIiwgbGlzdDIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBkaXNwbGF5TGlzdCggIkxpc3QzIiwgbGlzdDMgKTsgLy8kTk9OLU5MUy0xJAotICAgICBkaXNwbGF5TGlzdCggIkxpc3Q0IiwgbGlzdDQgKTsgLy8kTk9OLU5MUy0xJAotICAgICAKLSAgICAgY2hlY2tDb250ZW50cyggIkxpc3QxIiwgbGlzdDEsIG5ldyBJUG9saWN5T3BlcmF0aW9uW117IG9wMl9pZDEsIG9wNF9pZDEgfSApOyAvLyROT04tTkxTLTEkCi0gICAgIGNoZWNrQ29udGVudHMoICJMaXN0MiIsIGxpc3QyLCBuZXcgSVBvbGljeU9wZXJhdGlvbltdeyBvcDFfaWQyLCBvcDJfaWQyLCBvcDRfaWQyIH0gKTsgLy8kTk9OLU5MUy0xJAotICAgICBjaGVja0NvbnRlbnRzKCAiTGlzdDMiLCBsaXN0MywgbmV3IElQb2xpY3lPcGVyYXRpb25bXXsgb3AxX2lkMywgb3AyX2lkMywgb3A0X2lkMyB9ICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgY2hlY2tDb250ZW50cyggIkxpc3Q0IiwgbGlzdDQsIG5ldyBJUG9saWN5T3BlcmF0aW9uW117IG9wMl9pZDQsIG9wM19pZDQgfSApOyAvLyROT04tTkxTLTEkCi0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RFbmFibGVkT3BlcmF0aW9ucygpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgIHBsYXRmb3JtICAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJIHBsYXRmb3JtVUkgID0gU2VydmljZVBvbGljeVBsYXRmb3JtVUkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQxICAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQxIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTZXJ2aWNlUG9saWN5ICAgICAgICAgIGlkMiAgICAgICAgID0gcGxhdGZvcm0uZ2V0U2VydmljZVBvbGljeSggImlkMiIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBJU2VydmljZVBvbGljeSAgICAgICAgICBpZDMgICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDMiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQ0ICAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQ0IiApOyAvLyROT04tTkxTLTEkCi0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgIHBvbGljeUxpc3QxID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gICAgcG9saWN5TGlzdDIgPSBuZXcgVmVjdG9yPElTZXJ2aWNlUG9saWN5PigpOwotICAgICBJUG9saWN5T3BlcmF0aW9uICAgICAgICBvcDEgICAgICAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDQsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjMiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgCi0gICAgIHBvbGljeUxpc3QxLmFkZCggaWQxICk7Ci0gICAgIHBvbGljeUxpc3QxLmFkZCggaWQyICk7Ci0gICAgIHBvbGljeUxpc3QxLmFkZCggaWQzICk7Ci0gICAgIHBvbGljeUxpc3QxLmFkZCggaWQ0ICk7Ci0gICAgIHBvbGljeUxpc3QyLmFkZCggaWQ0ICk7Ci0gICAgIAotICAgICBhc3NlcnRUcnVlKCAiRXhwZWN0ZWQgb3BlcmF0aW9uIHRvIG5vdCBiZSBlbmFibGVkIiwgIW9wMS5pc0VuYWJsZWQoIHBvbGljeUxpc3QxICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCAiRXhwZWN0ZWQgb3BlcmF0aW9uIHRvIGJlIGVuYWJsZWQiLCBvcDEuaXNFbmFibGVkKCBwb2xpY3lMaXN0MiApICk7IC8vJE5PTi1OTFMtMSQKLSAgIH0KLSAgIAotICAgcHVibGljIHZvaWQgdGVzdFF1aWNrRml4QWN0aW9ucygpCi0gICB7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybSAgICAgIHBsYXRmb3JtICAgID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCk7Ci0gICAgIFNlcnZpY2VQb2xpY3lQbGF0Zm9ybVVJICAgIHBsYXRmb3JtVUkgID0gU2VydmljZVBvbGljeVBsYXRmb3JtVUkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgICAgaWQxICAgICAgICAgPSBwbGF0Zm9ybS5nZXRTZXJ2aWNlUG9saWN5KCAiaWQxIiApOyAvLyROT04tTkxTLTEkCi0gICAgIElTdGF0dXMgICAgICAgICAgICAgICAgICAgIHN0YXR1czEgICAgID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgIm9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0IiwgMSwgInNvbWUgZXJyb3IiLCBudWxsICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICBJU3RhdHVzICAgICAgICAgICAgICAgICAgICBzdGF0dXMyICAgICA9IG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsICJvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdCIsIDIsICJzb21lIGVycm9yIiwgbnVsbCApOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPiAgZml4TGlzdDEgICAgPSBwbGF0Zm9ybVVJLmdldFF1aWNrRml4ZXMoIHN0YXR1czEgKTsKLSAgICAgTGlzdDxJUXVpY2tGaXhBY3Rpb25JbmZvPiAgZml4TGlzdDIgICAgPSBwbGF0Zm9ybVVJLmdldFF1aWNrRml4ZXMoIHN0YXR1czIgKTsKLSAgICAgCi0gICAgIGFzc2VydFRydWUoICJFeHBlY3RpbmcgdHdvIHF1aWNrIGZpeGVzIiwgZml4TGlzdDEuc2l6ZSgpID09IDIgKTsgLy8kTk9OLU5MUy0xJAotICAgICBhc3NlcnRUcnVlKCAiRXhwZWN0aW9uIG9uZSBxdWljayBmaXgiLCBmaXhMaXN0Mi5zaXplKCkgPT0gMSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBmb3IoIElRdWlja0ZpeEFjdGlvbkluZm8gYWN0aW9uSW5mbyA6IGZpeExpc3QxICkKLSAgICAgewotICAgICAgIElRdWlja0ZpeEFjdGlvbiBhY3Rpb24gPSBhY3Rpb25JbmZvLmdldEFjdGlvbigpOwotICAgICAgIGlkMS5zZXRTdGF0dXMoIHN0YXR1czEgKTsKLSAgICAgICAKLSAgICAgICBhc3NlcnRUcnVlKCAiU3RhdHVzIGlzIG5vdCBPSyIsICFpZDEuZ2V0U3RhdHVzKCkuaXNPSygpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICBhY3Rpb24uYWN0aW9uKCBpZDEgKTsKLSAgICAgICBhc3NlcnRUcnVlKCAiU3RhdHVzIGlzIE9rICIsIGlkMS5nZXRTdGF0dXMoKS5pc09LKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICB9Ci0gICAgIAotICAgICBmb3IoIElRdWlja0ZpeEFjdGlvbkluZm8gYWN0aW9uSW5mbyA6IGZpeExpc3QyICkKLSAgICAgewotICAgICAgIElRdWlja0ZpeEFjdGlvbiBhY3Rpb24gPSBhY3Rpb25JbmZvLmdldEFjdGlvbigpOwotICAgICAgIGlkMS5zZXRTdGF0dXMoIHN0YXR1czIgKTsKLSAgICAgICAKLSAgICAgICBhc3NlcnRUcnVlKCAiU3RhdHVzIGlzIG5vdCBPSyIsICFpZDEuZ2V0U3RhdHVzKCkuaXNPSygpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICBhY3Rpb24uYWN0aW9uKCBpZDEgKTsKLSAgICAgICBhc3NlcnRUcnVlKCAiU3RhdHVzIGlzIE9rICIsIGlkMS5nZXRTdGF0dXMoKS5pc09LKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICB9Ci0gICB9Ci0gICAKLSAgIHB1YmxpYyB2b2lkIHRlc3RBY3Rpdml0aWVzRmlsdGVyKCkKLSAgIHsKLSAgICAgSUZpbHRlciAgICAgICAgICAgICAgICAgICAgYWN0aXZpdGllc0ZpbHRlciA9IEFjdGl2aXR5VXRpbHMuZ2V0Q3VycmVudEFjdGl2aXRpZXNGaWx0ZXIoKTsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtICAgICAgcGxhdGZvcm0gICAgICAgICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICAgICBwb2xpY3lMaXN0ICAgICAgID0gcGxhdGZvcm0uZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyggYWN0aXZpdGllc0ZpbHRlciApOwotICAgICAgICAgCi0gICAgIGRpc3BsYXlQb2xpY2llcyggcG9saWN5TGlzdCApOwotICAgfQotICAgCi0gICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHVibGljIHZvaWQgdGVzdEdldE9wZXJhdGlvbnNMaXN0KCkKLSAgIHsKLSAgICAgU2VydmljZVBvbGljeVBsYXRmb3JtICAgcGxhdGZvcm0gICA9IFNlcnZpY2VQb2xpY3lQbGF0Zm9ybS5nZXRJbnN0YW5jZSgpOwotICAgICBTZXJ2aWNlUG9saWN5UGxhdGZvcm1VSSBwbGF0Zm9ybVVJID0gU2VydmljZVBvbGljeVBsYXRmb3JtVUkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQxICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQyICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQzICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDMiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVNlcnZpY2VQb2xpY3kgICAgICAgICAgaWQ0ICAgICAgICA9IHBsYXRmb3JtLmdldFNlcnZpY2VQb2xpY3koICJpZDQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AxX2lkMiAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDIsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AxX2lkMyAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDMsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjEiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AyX2lkMSAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDEsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AyX2lkMiAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDIsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AyX2lkMyAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDMsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AyX2lkNCAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDQsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjIiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3AzX2lkNCAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDQsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjMiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3A0X2lkMSAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDEsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3A0X2lkMiAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDIsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgSVBvbGljeU9wZXJhdGlvbiAgICAgICAgb3A0X2lkMyAgICA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uKCBpZDMsICJzZXJ2aWNlLnVpLm9wZXJhdGlvbjQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gICAgaWRMaXN0MSAgICA9IG51bGw7Ci0gICAgIExpc3Q8SVNlcnZpY2VQb2xpY3k+ICAgIGlkTGlzdDIgICAgPSBudWxsOwotICAgICBMaXN0PElTZXJ2aWNlUG9saWN5PiAgICBpZExpc3QzICAgID0gbnVsbDsKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gICAgaWRMaXN0NCAgICA9IG51bGw7Ci0gICAgIAotICAgICBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IGNoZWNrTGlzdDEgPSBudWxsOwotICAgICBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IGNoZWNrTGlzdDIgPSBudWxsOwotICAgICBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IGNoZWNrTGlzdDMgPSBudWxsOwotICAgICBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IGNoZWNrTGlzdDQgPSBudWxsOwotICAgICAKLSAgICAgY2hlY2tMaXN0MSA9IGxsKCBsKG9wMl9pZDEpLCBsKG9wNF9pZDEpICk7Ci0gICAgIGNoZWNrTGlzdDIgPSBsbCggbChvcDFfaWQyKSwgbChvcDJfaWQxLCBvcDJfaWQyKSwgbChvcDRfaWQxLCBvcDRfaWQyKSApOwotICAgICBjaGVja0xpc3QzID0gbGwoIGwob3AxX2lkMiwgb3AxX2lkMyksIGwob3AyX2lkMSwgb3AyX2lkMiwgb3AyX2lkMyksIGwob3A0X2lkMSwgb3A0X2lkMiwgb3A0X2lkMykgKTsKLSAgICAgY2hlY2tMaXN0NCA9IGxsKCBsKG9wMV9pZDIsIG9wMV9pZDMpLCBsKG9wMl9pZDEsIG9wMl9pZDIsIG9wMl9pZDMsIG9wMl9pZDQpLCBsKG9wM19pZDQpLCBsKG9wNF9pZDEsIG9wNF9pZDIsIG9wNF9pZDMpICk7Ci0gICAgIAotICAgICBpZExpc3QxID0gQXJyYXlzLmFzTGlzdCggbmV3IElTZXJ2aWNlUG9saWN5W117IGlkMSB9ICk7Ci0gICAgIGlkTGlzdDIgPSBBcnJheXMuYXNMaXN0KCBuZXcgSVNlcnZpY2VQb2xpY3lbXXsgaWQxLCBpZDIgfSApOwotICAgICBpZExpc3QzID0gQXJyYXlzLmFzTGlzdCggbmV3IElTZXJ2aWNlUG9saWN5W117IGlkMSwgaWQyLCBpZDMgfSApOwotICAgICBpZExpc3Q0ID0gQXJyYXlzLmFzTGlzdCggbmV3IElTZXJ2aWNlUG9saWN5W117IGlkMSwgaWQyLCBpZDMsIGlkNCB9ICk7Ci0gICAgIAotICAgICBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IG9wTGlzdDEgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnNMaXN0KCBpZExpc3QxLCB0cnVlICk7Ci0gICAgIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gb3BMaXN0MiA9IHBsYXRmb3JtVUkuZ2V0T3BlcmF0aW9uc0xpc3QoIGlkTGlzdDIsIHRydWUgKTsKLSAgICAgTGlzdDxMaXN0PElQb2xpY3lPcGVyYXRpb24+PiBvcExpc3QzID0gcGxhdGZvcm1VSS5nZXRPcGVyYXRpb25zTGlzdCggaWRMaXN0MywgdHJ1ZSApOwotICAgICBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IG9wTGlzdDQgPSBwbGF0Zm9ybVVJLmdldE9wZXJhdGlvbnNMaXN0KCBpZExpc3Q0LCB0cnVlICk7Ci0gICAgIAotICAgICB2ZXJpZnlMaXN0cyggIkxpc3QxIiwgb3BMaXN0MSwgY2hlY2tMaXN0MSApOwotICAgICB2ZXJpZnlMaXN0cyggIkxpc3QyIiwgb3BMaXN0MiwgY2hlY2tMaXN0MiApOwotICAgICB2ZXJpZnlMaXN0cyggIkxpc3QzIiwgb3BMaXN0MywgY2hlY2tMaXN0MyApOwotICAgICB2ZXJpZnlMaXN0cyggIkxpc3Q0Iiwgb3BMaXN0NCwgY2hlY2tMaXN0NCApOwotICAgfQotICAgCi0gICBwcml2YXRlIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gbGwoIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4uLi4gb3BMaXN0ICkKLSAgIHsKLSAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoIG9wTGlzdCApOwotICAgfQotICAgCi0gICBwcml2YXRlIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gbCggSVBvbGljeU9wZXJhdGlvbi4uLiBvcExpc3QgKQotICAgewotICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdCggb3BMaXN0ICk7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCB2ZXJpZnlMaXN0cyggU3RyaW5nIGxpc3ROYW1lLCBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IGxpc3QxLCBMaXN0PExpc3Q8SVBvbGljeU9wZXJhdGlvbj4+IGxpc3QyICkKLSAgIHsKLSAgICAgYXNzZXJ0VHJ1ZSggbGlzdE5hbWUgKyAiIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgc2l6ZS4iLCBsaXN0MS5zaXplKCkgPT0gbGlzdDIuc2l6ZSgpICk7Ci0gICAgICAgICAgICAgCi0gICAgIGZvciggaW50IGxpc3RJbmRleCA9IDAgOyBsaXN0SW5kZXggPCBsaXN0MS5zaXplKCk7IGxpc3RJbmRleCsrICkKLSAgICAgewotICAgICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9saWN5TGlzdDEgPSBsaXN0MS5nZXQoIGxpc3RJbmRleCApOwotICAgICAgIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gcG9saWN5TGlzdDIgPSBmaW5kTGlzdCggcG9saWN5TGlzdDEuZ2V0KDApLmdldElkKCksIGxpc3QyICk7Ci0gICAgICAgCi0gICAgICAgYXNzZXJ0VHJ1ZSggbGlzdE5hbWUgKyAiIG5lc3RlZCBsaXN0IGF0IGluZGV4ICIgKyBsaXN0SW5kZXggKyAiIGlzIG5vdCB0aGUgc2FtZSBzaXplLiIsIHBvbGljeUxpc3QxLnNpemUoKSA9PSBwb2xpY3lMaXN0Mi5zaXplKCkgKTsKLSAgICAgICAKLSAgICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcG9saWN5TGlzdDEuc2l6ZSgpOyBpbmRleCsrICkKLSAgICAgICB7Ci0gICAgICAgICBJUG9saWN5T3BlcmF0aW9uIG9wMSA9IHBvbGljeUxpc3QxLmdldCggaW5kZXggKTsKLSAgICAgICAgIAotICAgICAgICAgYXNzZXJ0VHJ1ZSggbGlzdE5hbWUgKyAiIG9wZXJhdGlvbiBub3QgZm91bmQiLCBmaW5kT3AoIG9wMSwgcG9saWN5TGlzdDIgKSApOwotICAgICAgIH0KLSAgICAgfSAgCi0gICB9Ci0gIAotICAgcHJpdmF0ZSBib29sZWFuIGZpbmRPcCggSVBvbGljeU9wZXJhdGlvbiBvcCwgTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBsaXN0ICkKLSAgIHsKLSAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAgCi0gICAgIGZvciggSVBvbGljeU9wZXJhdGlvbiBmb3VuZE9wIDogbGlzdCApCi0gICAgIHsKLSAgICAgICBpZiggb3AgPT0gZm91bmRPcCApCi0gICAgICAgewotICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgIH0KLSAgICAgfQotICAgICAKLSAgICAgcmV0dXJuIHJlc3VsdDsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBMaXN0PElQb2xpY3lPcGVyYXRpb24+IGZpbmRMaXN0KCBTdHJpbmcgaWQsIExpc3Q8TGlzdDxJUG9saWN5T3BlcmF0aW9uPj4gc2VhcmNoTGlzdCApCi0gICB7Ci0gICAgIGZvciggTGlzdDxJUG9saWN5T3BlcmF0aW9uPiBwb2xpY3lMaXN0IDogc2VhcmNoTGlzdCApCi0gICAgIHsKLSAgICAgICBpZiggcG9saWN5TGlzdC5nZXQoMCkuZ2V0SWQoKS5lcXVhbHMoIGlkICkgKQotICAgICAgIHsKLSAgICAgICAgIHJldHVybiBwb2xpY3lMaXN0OwotICAgICAgIH0KLSAgICAgfQotICAgICAKLSAgICAgYXNzZXJ0VHJ1ZSggIkxpc3Qgbm90IGZvdW5kIGZvciBpZCIgKyBpZCwgZmFsc2UgKTsKLSAgICAgcmV0dXJuIG51bGw7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCBkaXNwbGF5UG9saWNpZXMoIExpc3Q8SVNlcnZpY2VQb2xpY3k+IHBvbGljeUxpc3QgKQotICAgewotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJMaXN0aW5nIHNlcnZpY2UgcG9saWNpZXM6IiApOwotICAgICBmb3IoIElTZXJ2aWNlUG9saWN5IHBvbGljeSA6IHBvbGljeUxpc3QgKQotICAgICB7Ci0gICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAiICsgcG9saWN5LmdldElkKCkgKTsKLSAgICAgfQotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgZGlzcGxheUxpc3QoIFN0cmluZyBzZXROYW1lLCBMaXN0PElQb2xpY3lPcGVyYXRpb24+IG9wZXJhdGlvbkxpc3QgKQotICAgewotICAgICBTeXN0ZW0ub3V0LnByaW50KCBzZXROYW1lICsgIjogIiApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBmb3IoIElQb2xpY3lPcGVyYXRpb24gb3BlcmF0aW9uIDogb3BlcmF0aW9uTGlzdCApCi0gICAgIHsKLSAgICAgICBTeXN0ZW0ub3V0LnByaW50KCBvcGVyYXRpb24uZ2V0SWQoKSArICIsIiApOyAvLyROT04tTkxTLTEkCi0gICAgIH0KLSAgICAgCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiIgKTsgLy8kTk9OLU5MUy0xJAotICAgfQotICAgCi0gICBwcml2YXRlIHZvaWQgY2hlY2tDb250ZW50cyggU3RyaW5nIHNldE5hbWUsIExpc3Q8SVBvbGljeU9wZXJhdGlvbj4gb3BlcmF0aW9uU2V0LCBJUG9saWN5T3BlcmF0aW9uW10gb3BlcmF0aW9uQXJyYXkgKQotICAgewotICAgICBhc3NlcnRUcnVlKCAiU2V0IGFuZCBhcnJheSBzaXplcyBkb24ndCBtYXRjaCBmb3IgIiArIHNldE5hbWUgKyAiLiIsIG9wZXJhdGlvblNldC5zaXplKCkgPT0gb3BlcmF0aW9uQXJyYXkubGVuZ3RoICk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCi0gICAgIGZvciggSVBvbGljeU9wZXJhdGlvbiBvcGVyYXRpb24gOiBvcGVyYXRpb25BcnJheSApCi0gICAgIHsKLSAgICAgICBhc3NlcnRUcnVlKCBzZXROYW1lICsgIiBkb2VzIG5vdCBjb250YWluIG9wZXJhdGlvbiAiICsgb3BlcmF0aW9uLmdldElkKCkgKyAiLiIsIG9wZXJhdGlvblNldC5jb250YWlucyggb3BlcmF0aW9uICkgKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgIH0KLSAgIH0KLSAgIAotICAgcHJpdmF0ZSB2b2lkIGRpc3BsYXlPcGVyYXRpb24oIElQb2xpY3lPcGVyYXRpb24gb3BlcmF0aW9uICkKLSAgIHsKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gemVyb1BvbGljaWVzID0gbmV3IFZlY3RvcjxJU2VydmljZVBvbGljeT4oKTsKLSAgICAgTGlzdDxJU2VydmljZVBvbGljeT4gbWFueVBvbGljaWVzID0gU2VydmljZVBvbGljeVBsYXRmb3JtLmdldEluc3RhbmNlKCkuZ2V0Um9vdFNlcnZpY2VQb2xpY2llcyggbnVsbCApOwotICAgICBJRGVzY3JpcHRvciAgICAgICAgICAgZGVzY3JpcHRvciAgID0gb3BlcmF0aW9uLmdldERlc2NyaXB0b3IoKTsKLSAgICAgU3RyaW5nICAgICAgICAgICAgICAgc2hvcnROYW1lICAgID0gZGVzY3JpcHRvci5nZXRTaG9ydE5hbWUoKTsKLSAgICAgU3RyaW5nICAgICAgICAgICAgICAgbG9uZ05hbWUgICAgID0gZGVzY3JpcHRvci5nZXRMb25nTmFtZSgpOwotICAgICAKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiT3BlcmF0aW9uIGlkOiAiICsgb3BlcmF0aW9uLmdldElkKCkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgc2hvcnQgbmFtZTogIiArIHNob3J0TmFtZSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBsb25nIG5hbWU6ICIgKyBsb25nTmFtZSApOyAvLyROT04tTkxTLTEkCi0gICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBwYXR0ZXJuOiAiICsgb3BlcmF0aW9uLmdldFBvbGljeUlkUGF0dGVybigpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIGlzRW5hYmxlZCB6ZXJvOiAiICsgb3BlcmF0aW9uLmlzRW5hYmxlZCggemVyb1BvbGljaWVzICkgKTsgLy8kTk9OLU5MUy0xJAotICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgaXNFbmFibGVkIG1hbnk6ICIgKyBvcGVyYXRpb24uaXNFbmFibGVkKCBtYW55UG9saWNpZXMgKSApOyAvLyROT04tTkxTLTEkCi0gICAgIAotICAgICBzd2l0Y2goIG9wZXJhdGlvbi5nZXRPcGVyYXRpb25LaW5kKCkgKQotICAgICB7Ci0gICAgICAgY2FzZSBzZWxlY3Rpb246Ci0gICAgICAgewotICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIHNlbGVjdGlvbjogdHJ1ZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgYnJlYWs7ICAKLSAgICAgICB9Ci0gICAgICAgCi0gICAgICAgY2FzZSBpY29uU2VsZWN0aW9uOgotICAgICAgIHsKLSAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICAgICAgICBzZWxlY3Rpb24gaWNvbjogdHJ1ZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgYnJlYWs7ICAKLSAgICAgICB9Ci0gICAgICAgCi0gICAgICAgY2FzZSBlbnVtZXJhdGlvbjoKLSAgICAgICB7ICAgICAgCi0gICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgZW51bWVyYXRpb24gaWQ6ICIgKyBvcGVyYXRpb24uZ2V0RW51bWVyYXRpb25JZCgpICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgIGJyZWFrOyAgCi0gICAgICAgfQotICAgICAgIAotICAgICAgIGNhc2UgY29tcGxleDoKLSAgICAgICB7Ci0gICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgY29tcGxleDogdHJ1ZSIgKTsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgIG9wZXJhdGlvbi5sYXVuY2hPcGVyYXRpb24oIHplcm9Qb2xpY2llcyApOwotICAgICAgICAgYnJlYWs7ICAKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9TZXJ2aWNlUG9saWN5dFRlc3RBY3RpdmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9TZXJ2aWNlUG9saWN5dFRlc3RBY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZhZmNkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwMjQgICAxOTY5OTcgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICovCi1wdWJsaWMgY2xhc3MgU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIGltcGxlbWVudHMgSVN0YXJ0dXAgewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnNlcnZpY2UucG9saWN5LnRlc3QiOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgU2VydmljZVBvbGljeXRUZXN0QWN0aXZhdG9yKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBTZXJ2aWNlUG9saWN5dFRlc3RBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0JCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvciggU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCBQTFVHSU5fSUQsIDAsIG1lc3NhZ2UsIGV4YyApOwotICAgIAotICAgIGdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coc3RhdHVzKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZWFybHlTdGFydHVwKCkKLSAgewotICAgIC8vIERPIG5vdGhpbmcuICBBbGwgd2Ugd2FudCB0byBkbyBpcyBnZXQgdGhlIHBsdWdpbiBsb2FkZWQgYXQgVUkgc3RhcnQgdGltZS4KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1Rlc3RFbmFibGVkQ2xhc3MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9UZXN0RW5hYmxlZENsYXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYjhkMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1Rlc3RFbmFibGVkQ2xhc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTAyNCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS5JU2VydmljZVBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudWkuSUVuYWJsZU9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RFbmFibGVkQ2xhc3MgaW1wbGVtZW50cyBJRW5hYmxlT3BlcmF0aW9uCi17Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKExpc3Q8SVNlcnZpY2VQb2xpY3k+IHNlbGVjdGVkUG9saWNpZXMpCi0gIHsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oICIgICAgICAgICAgSXMgZW5hYmxlZCBvcGVyYXRpb24gY2FsbGVkLiIgKTsgLy8kTk9OLU5MUy0xJAotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvVGVzdExhdW5jaENsYXNzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvVGVzdExhdW5jaENsYXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3OTQ1YjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L1Rlc3RMYXVuY2hDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDI0ICAgMTk2OTk3IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JTGF1bmNoT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdExhdW5jaENsYXNzIGltcGxlbWVudHMgSUxhdW5jaE9wZXJhdGlvbgotewotCi0gIHB1YmxpYyB2b2lkIGxhdW5jaChMaXN0PElTZXJ2aWNlUG9saWN5PiBzZWxlY3RlZFBvbGljaWVzKQotICB7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKCAiICAgICAgICAgIExhdW5jaCBjbGFzcyBjYWxsZWQuIiApOyAvLyROT04tTkxTLTEkCi0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2FjdGlvbjEuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24xLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YzM0YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2FjdGlvbjEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBhY3Rpb24xIGltcGxlbWVudHMgSVF1aWNrRml4QWN0aW9uCi17Ci0KLSAgcHVibGljIHZvaWQgYWN0aW9uKElTZXJ2aWNlUG9saWN5IHBvbGljeSkKLSAgewotICAgIHBvbGljeS5zZXRTdGF0dXMoIFN0YXR1cy5PS19TVEFUVVMgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2FjdGlvbjIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5M2U4NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2FjdGlvbjIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBhY3Rpb24yIGltcGxlbWVudHMgSVF1aWNrRml4QWN0aW9uCi17Ci0KLSAgcHVibGljIHZvaWQgYWN0aW9uKElTZXJ2aWNlUG9saWN5IHBvbGljeSkKLSAgewotICAgIHBvbGljeS5zZXRTdGF0dXMoIFN0YXR1cy5PS19TVEFUVVMgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2FjdGlvbjMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS50ZXN0L3NyYy9vcmcvZWNsaXBzZS93c3Qvd3Mvc2VydmljZS9wb2xpY3kvdGVzdC9hY3Rpb24zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZDk3N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2FjdGlvbjMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTEyMCAgIDE5Njk5NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBJbml0aWFsIGNvZGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LklTZXJ2aWNlUG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5zZXJ2aWNlLnBvbGljeS51aS5JUXVpY2tGaXhBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBhY3Rpb24zIGltcGxlbWVudHMgSVF1aWNrRml4QWN0aW9uCi17Ci0KLSAgcHVibGljIHZvaWQgYWN0aW9uKElTZXJ2aWNlUG9saWN5IHBvbGljeSkKLSAgewotICAgIHBvbGljeS5zZXRTdGF0dXMoIFN0YXR1cy5PS19TVEFUVVMgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3Qvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9zZXJ2aWNlL3BvbGljeS90ZXN0L2ludGVybmFsL3Byb3BlcnRpZXMvRk9PRmlsZVByb3BlcnR5VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvaW50ZXJuYWwvcHJvcGVydGllcy9GT09GaWxlUHJvcGVydHlUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk4M2VhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3Muc2VydmljZS5wb2xpY3kudGVzdC9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3NlcnZpY2UvcG9saWN5L3Rlc3QvaW50ZXJuYWwvcHJvcGVydGllcy9GT09GaWxlUHJvcGVydHlUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnNlcnZpY2UucG9saWN5LnRlc3QuaW50ZXJuYWwucHJvcGVydGllczsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5Qcm9wZXJ0eVRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIEZPT0ZpbGVQcm9wZXJ0eVRlc3RlciBleHRlbmRzIFByb3BlcnR5VGVzdGVyCi17Ci0gIHB1YmxpYyBib29sZWFuIHRlc3QoT2JqZWN0IHJlY2VpdmVyLCBTdHJpbmcgcHJvcGVydHksIE9iamVjdFtdIGFyZ3MsIE9iamVjdCBleHBlY3RlZFZhbHVlKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiggcmVjZWl2ZXIgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGhhc0ZPT2ZpbGUoIChJQ29udGFpbmVyKSByZWNlaXZlciApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaGFzRk9PZmlsZSggSUNvbnRhaW5lciBjb250YWluZXIgKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgICA9IGZhbHNlOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIElSZXNvdXJjZVtdIGNoaWxkcmVuID0gY29udGFpbmVyLm1lbWJlcnMoKTsKLSAgICAgIAotICAgICAgZm9yKCBJUmVzb3VyY2UgY2hpbGQgOiBjaGlsZHJlbiApCi0gICAgICB7Ci0gICAgICAgIGlmKCBjaGlsZCBpbnN0YW5jZW9mIElDb250YWluZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gaGFzRk9PZmlsZSggKElDb250YWluZXIpIGNoaWxkICk7Ci0gICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiggY2hpbGQgaW5zdGFuY2VvZiBJRmlsZSApCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBjaGlsZC5nZXRGaWxlRXh0ZW5zaW9uKCkuZXF1YWxzSWdub3JlQ2FzZSggImZvbyIgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBzaW5nbGUgZm9vIGZpbGUgd2Ugd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCi0gICAgICAgIGlmKCByZXN1bHQgKSBicmVhazsKLSAgICAgIH0gICAgCi0gICAgfQotICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgLy8gSWdub3JlIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIGZhbHNlLiAgCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyODk4Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InRlc3RzIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzk2OGJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXRlc3RzLmphcgotamF2YUNvbXBpbGVyLnRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZjJiY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmQxMDQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDoyOToxNCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU4N2E4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSNNb24gQXByIDI0IDEwOjI3OjU0IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0xCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDFkZDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAxLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LndzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWwsCi0gb3JnLmVjbGlwc2UuamZhY2UsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcywKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnVpLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZSwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwLAotIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5kYXRhLAotIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5wbHVnaW4sCi0gb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0LAotIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlscwotQnVuZGxlLUNsYXNzUGF0aDogdGVzdHMuamFyCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxYjkyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IGRhdGEvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcmVhZG1lLnR4dCxcCi0gICAgICAgICAgICAgICB0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLWphcnMuY29tcGlsZS5vcmRlciA9IHRlc3RzLmphcgotc291cmNlLnRlc3RzLmphciA9IHRlc3RzLwotb3V0cHV0LnRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL2xvY2F0b3IvdGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvbG9jYXRvci90ZXN0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZDMxY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvbG9jYXRvci90ZXN0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iQXJlYVNlcnZpY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmZsb2F0Ii8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0idG5zOmRpbWVuc2lvbnMiLz4KLSAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZGltZW5zaW9ucyI+Ci0gICAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAgIAkJPHhzZDplbGVtZW50IG5hbWU9IndpZHRoIiB0eXBlPSJ4c2Q6ZmxvYXQiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJoZWlnaHQiIHR5cGU9InhzZDpmbG9hdCI+PC94c2Q6ZWxlbWVudD4KLSAgICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iQ2FsY3VsYXRlUmVjdEFyZWFSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6YXJlYSIgbmFtZT0iYXJlYSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJDYWxjdWxhdGVSZWN0QXJlYVJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOnBhcmFtZXRlcnMiIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFyZWFTZXJ2aWNlIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iQ2FsY3VsYXRlUmVjdEFyZWEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOkNhbGN1bGF0ZVJlY3RBcmVhUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpDYWxjdWxhdGVSZWN0QXJlYVJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFyZWFTZXJ2aWNlU09BUCIgdHlwZT0idG5zOkFyZWFTZXJ2aWNlIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iQ2FsY3VsYXRlUmVjdEFyZWEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBcmVhU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6QXJlYVNlcnZpY2VTT0FQIiBuYW1lPSJBcmVhU2VydmljZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzIvMy90ZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMi8zL3Rlc3Qud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhkNjJiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMi8zL3Rlc3Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyAKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp0ZXN0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3QvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0LyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnR4c2Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZCIKLQl4bWxuczp0eHNkMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkMiI+Ci0KLQk8d3NkbDp0eXBlcz4KLQkJPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIAkJICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3R4c2QyIgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi8uLi8yYS90ZXN0LnhzZCIgLz4KLQkJCTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3R4c2QiCi0JCQkJc2NoZW1hTG9jYXRpb249Ii4uLy4uLy4uL3Rlc3QueHNkIiAvPgotCQk8L3NjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJpbnB1dCIgZWxlbWVudD0idHhzZDpUZXN0U3RyaW5nIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJvdXRwdXQiIGVsZW1lbnQ9InR4c2QyOlRlc3RTdHJpbmcyIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJUZXN0UG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRlc3Q6TmV3T3BlcmF0aW9uUmVxdWVzdCI+PC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRlc3Q6TmV3T3BlcmF0aW9uUmVzcG9uc2UiPjwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iTmV3QmluZGluZyIgdHlwZT0idGVzdDpUZXN0UG9ydFR5cGUiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdC9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMmEvc3RhcnQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yYS9zdGFydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjYyN2JiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yYS9zdGFydC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3N0YXJ0LyIJCQotCXhtbG5zOnRlc3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIJIAotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLQotCTx3c2RsOmltcG9ydCBsb2NhdGlvbj0iLi4vMi8zL3Rlc3Qud3NkbCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3QvIi8+Ci0JCi0JPHdzZGw6dHlwZXM+Ci0JCTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3R4c2QiCi0JCQkJc2NoZW1hTG9jYXRpb249Ii4uLy4uL3Rlc3QueHNkIiAvPgotCQk8L3NjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci0JCi0JPHdzZGw6c2VydmljZSBuYW1lPSJTdGFydCI+Ci0JCTx3c2RsOnBvcnQgbmFtZT0iTmV3UG9ydCIgYmluZGluZz0idGVzdDpOZXdCaW5kaW5nIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIj48L3NvYXA6YWRkcmVzcz4KLQkJPC93c2RsOnBvcnQ+Ci0JPC93c2RsOnNlcnZpY2U+Ci0JCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMmEvdGVzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMmEvdGVzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNmZmZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3Rlc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSAKLQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3R4c2QyIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgICA8ZWxlbWVudCBuYW1lPSJUZXN0U3RyaW5nMiIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvdGVzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyL3Rlc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWU2NDZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvdGVzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIAotCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZCIgCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAgIDxlbGVtZW50IG5hbWU9IlRlc3RTdHJpbmciIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTIwZmI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTMzZWMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDQyNCAgIDEzODA2MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XU1QgV2ViIFNlcnZpY2VzIFRlc3QKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1MjlhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXAuY29udHJpYnV0aW9uMSI+Ci0gICAgICAgICA8bWVudQotICAgICAgICAgICAgICAgbGFiZWw9IlBvcHVwIHRlc3QgbWVudSIKLSAgICAgICAgICAgICAgIHBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cC5tZW51MSI+Ci0gICAgICAgICAgICA8c2VwYXJhdG9yCi0gICAgICAgICAgICAgICAgICBuYW1lPSJncm91cDEiPgotICAgICAgICAgICAgPC9zZXBhcmF0b3I+Ci0gICAgICAgICA8L21lbnU+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iUG9wdXAgdGVzdCBhY3Rpb24iCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXAuTmV3QWN0aW9uIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwLm1lbnUxL2dyb3VwMSIKLSAgICAgICAgICAgICAgIGVuYWJsZXNGb3I9IjEiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXAubmV3QWN0aW9uIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLSAgICAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3JlYWRtZS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFkZTAzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotQ3VycmVudGx5IG5vIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgaW4uICBTZWUgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzIGZvciBhZGRpbmcKLWFyZ3VtZW50cyB3aGVuIHJ1bm5pbmcgdGVzdCBzdWl0ZSAoaS5lLiBzZXJ2ZXIgaW5zdGFsbCBsb2NhdGlvbi4uLikKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI5MWFjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotIDwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4gLS0+Ci0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0cyIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8IS0tIGNvbW1lbnRlZCBmb3Igbm93IHVudGlsIHN1Y2ggYSB0aW1lIGFzIHdlIG5lZWQgdG8gY2FsbCBhIHNlcnZlciBmb3Igd3N0IHRlc3RzIC0tPgotICA8IS0tPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MD0ke3Rlc3REaXJ9LyR7dG9tY2F0NTBEaXJ9Ii8+IC0tPgotCQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgIDxkZWxldGU+Ci0gICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ3c3Qtd3MtZm9sZGVyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF93c19mb2xkZXIiLz4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3c3QtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dzdC13cy1mb2xkZXJ9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdC5BbGxXU0pVbml0VGVzdHMiIC8+Ci0gICAJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotPCEtLSAgIAkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgIAktLT4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdC9wb3B1cC9OZXdBY3Rpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdC9wb3B1cC9OZXdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZhMWJlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3QvcG9wdXAvTmV3QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklPYmplY3RBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGNsYXNzIE5ld0FjdGlvbiBpbXBsZW1lbnRzIElPYmplY3RBY3Rpb25EZWxlZ2F0ZSB7Ci0KLSAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOwotICAKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQWN0aW9uMS4KLQkgKi8KLQlwdWJsaWMgTmV3QWN0aW9uKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSU9iamVjdEFjdGlvbkRlbGVnYXRlI3NldEFjdGl2ZVBhcnQoSUFjdGlvbiwgSVdvcmtiZW5jaFBhcnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlUGFydChJQWN0aW9uIGFjdGlvbiwgSVdvcmtiZW5jaFBhcnQgdGFyZ2V0UGFydCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSUFjdGlvbkRlbGVnYXRlI3J1bihJQWN0aW9uKQotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgCi0JewotCSAgRHluYW1pY1dpemFyZCB3aXphcmQgPSBuZXcgRHluYW1pY1dpemFyZCgpOwotCSAgV2l6YXJkRGlhbG9nICBkaWFsb2cgPSBuZXcgV2l6YXJkRGlhbG9nKCBudWxsLCB3aXphcmQgKTsKLQkgIAotCSAgdHJ5Ci0JICB7Ci0JICAgIEJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoICJvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMiICk7Ci0JICAgIHdpemFyZC5zZXRJbml0aWFsRGF0YSggIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIiwgYnVuZGxlLCAiaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZyIsICJQZXRlciB0aXRsZSIgKTsKLQkgICAgd2l6YXJkLmluaXQoIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCksIHNlbGVjdGlvbiApOwotCSAgICAKLQkgICAgZGlhbG9nLm9wZW4oKTsKLQkgIH0KLQkgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0JICB7Ci0JICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkgIH0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24sIElTZWxlY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIAotCXsKLQkgIGlmKCBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiApCi0gICAgewotICAgICAgdGhpcy5zZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24gKSBzZWxlY3Rpb247Ci0gICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy9kYXRhL0xvY2F0b3JXb3Jrc3BhY2VTZXR1cC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy9kYXRhL0xvY2F0b3JXb3Jrc3BhY2VTZXR1cC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDU1ZmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvZGF0YS9Mb2NhdG9yV29ya3NwYWNlU2V0dXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5kYXRhOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludHJvLklJbnRyb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50cm8uSUludHJvUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luOwotCi0vKioKLSAqIEBhdXRob3Igam9hbgotICogIFNldHMgdXAgbG9jYXRvciB0ZXN0IGRhdGEgLSB1c2VzIHNhbWUgZGF0YSBmaWxlIGJ1dCByZW5hbWVzIGl0IGZvciBlYWNoIHVzZQotICogIFdvcmtzcGFjZSBzdHJ1Y3R1cmUgY3JlYXRlZCBsb29rcyBsaWtlIHRoaXM6Ci0gKiAgCi0gKiAgcm9vdAotICogIC0tcHJvamVjdDEKLSAqICAgIHwtLS0tZm9sZGVyMQotICogICAgICAgICB8LS0tLS1mb2xkZXIyCi0gKiAgICAgICAgICAgICAgIHwtLS0tLS1vbmUud3NkbAotICogICAgICAgICB8LS0tLS10d28ud3NkbAotICogICAgfC0tLS1mb2xkZXIzCi0gKiAgICAgICAgIHwtLS0tLXRocmVlLndzZGwKLSAqICAgICAgICAgfC0tLS0tZm91ci53c2RsIAotICogIC0tcHJvamVjdDIKLSAqICAgIHwtLS0tZml2ZS53c2RsCi0gKiAgICB8LS0tLWZvbGRlcjQKLSAqICAgIHwtLS0tZm9sZGVyNQotICogICAgICAgICB8LS0tLS1zaXgud3NkbAotICogIC0tcHJvamVjdDMKLSAqICAgIHwtLS0tb25lLnhtbAotICovCi0KLXB1YmxpYyBjbGFzcyBMb2NhdG9yV29ya3NwYWNlU2V0dXAgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0pFQ1QxX05BTUUgPSAiUHJvamVjdDEiOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSMV9OQU1FID0gIkZvbGRlcjEiOyAgLy9jb250YWlucyBXU0RMIGZpbGUgYW5kIG9uZSBmb2xkZXIgCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xERVIyX05BTUUgPSAiRm9sZGVyMiI7ICAvL25lc3RlZCBpbiBmb2xkZXIgMSBhbmQgY29udGFpbnMgV1NETCBmaWxlCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xERVIzX05BTUUgPSAiRm9sZGVyMyI7ICAvL2NvbnRhaW5zIHR3byBXU0RMIGZpbGVzCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9KRUNUMl9OQU1FID0gIlByb2plY3QyIjsgLy9jb250YWlucyBXU0RMIGZpbGUgYW5kIHR3byBmb2xkZXJzCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xERVI0X05BTUUgPSAiRm9sZGVyNCI7ICAvL2NvbnRhaW5zIG5vIFdTREwKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTERFUjVfTkFNRSA9ICJGb2xkZXI1IjsgIC8vY29udGFpbnMgb25lIFdTREwgZmlsZQotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPSkVDVDNfTkFNRSA9ICJQcm9qZWN0MyI7ICAvL2NvbnRhaW5zIG5vIFdTREwgZmlsZXMgYnV0IG9uZSBYTUwgZmlsZQotCSAgCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9PTkUgPSAib25lLndzZGwiOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETEZJTEVfVFdPID0gInR3by53c2RsIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX1RIUkVFID0gInRocmVlLndzZGwiOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETEZJTEVfRk9VUiA9ICJmb3VyLndzZGwiOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETEZJTEVfRklWRSA9ICJmaXZlLndzZGwiOwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETEZJTEVfU0lYID0gInNpeC53c2RsIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhNTEZJTEVfT05FID0gIm9uZS5YTUwiOwotCSAgCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBBQ1RVQUxfVEVTVEZJTEVQQVRIID0gImRhdGEvbG9jYXRvci90ZXN0LndzZGwiOwotCSAgCSAgCi0JICBwcml2YXRlIElXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCSAgCi0JICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotCSAgewotCSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShMb2NhdG9yV29ya3NwYWNlU2V0dXAuY2xhc3MsICJMb2NhdG9yV29ya3NwYWNlU2V0dXAiKTsKLQkgIH0KLQotCSAgcHJvdGVjdGVkIHZvaWQgY2xvc2VJbnRybygpCi0JICB7Ci0JICAgIElJbnRyb01hbmFnZXIgaW50cm9NYW5hZ2VyID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRJbnRyb01hbmFnZXIoKTsKLQkgICAgSUludHJvUGFydCBpbnRyb1BhcnQgPSBpbnRyb01hbmFnZXIuZ2V0SW50cm8oKTsKLQkgICAgaWYgKGludHJvUGFydCAhPSBudWxsKQotCSAgICAgIGludHJvTWFuYWdlci5jbG9zZUludHJvKGludHJvUGFydCk7Ci0JICB9Ci0KLQkgIHByb3RlY3RlZCBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBuYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgewotCSAgICBJUHJvamVjdCBzaW1wbGVQcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCSAgICBzaW1wbGVQcm9qZWN0LmNyZWF0ZShudWxsKTsKLQkgICAgc2ltcGxlUHJvamVjdC5vcGVuKG51bGwpOwotCSAgICByZXR1cm4gc2ltcGxlUHJvamVjdDsKLQkgIH0KLQotCSAgcHJvdGVjdGVkIElGb2xkZXIgY3JlYXRlRm9sZGVyKElDb250YWluZXIgcGFyZW50LCBTdHJpbmcgZm9sZGVyTmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgIHsKLQkJSUZvbGRlciBmb2xkZXIxID0gcGFyZW50LmdldEZvbGRlcihuZXcgUGF0aChmb2xkZXJOYW1lKSk7Ci0gICAgICAgIGZvbGRlcjEuY3JlYXRlKGZhbHNlLCB0cnVlLCBudWxsKTsKLQkgICAgcmV0dXJuIGZvbGRlcjE7Ci0JICB9Ci0KLQkgIAotCSAgcHJvdGVjdGVkIHZvaWQgY29weUZpbGUoSUNvbnRhaW5lciBwcm9qZWN0LCBTdHJpbmcgc291cmNlLCBTdHJpbmcgZGVzdCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uCi0JICB7Ci0JCSAgCi0JICAgIElGaWxlIGZpbGUgPSBwcm9qZWN0LmdldEZpbGUobmV3IFBhdGgoZGVzdCkpOwotCSAgICBmaWxlLmNyZWF0ZShUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoc291cmNlKS5vcGVuU3RyZWFtKCksIHRydWUsIG51bGwpOwotCSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShmaWxlLmV4aXN0cygpKTsKLQkgIH0KLQotCSAgcHJvdGVjdGVkIHZvaWQgam9pbkF1dG9CdWlsZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICB7Ci0JICAgIGJvb2xlYW4gaW50ZXJydXB0ZWQgPSB0cnVlOwotCSAgICB3aGlsZSAoaW50ZXJydXB0ZWQpCi0JICAgIHsKLQkgICAgICB0cnkKLQkgICAgICB7Ci0JICAgICAgICBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotCSAgICAgICAgaW50ZXJydXB0ZWQgPSBmYWxzZTsKLQkgICAgICB9Ci0JICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JICAgICAgewotCSAgICAgICAgaW50ZXJydXB0ZWQgPSB0cnVlOwotCSAgICAgIH0KLQkgICAgfQotCSAgfQotCi0JICBwdWJsaWMgdm9pZCB0ZXN0U2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JICB7Ci0JCSAgdHJ5ewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLSBsb2NhdG9yIGRhdGEgc2V0dXAgc3RhcnRpbmciKTsKLQkgICAgY2xvc2VJbnRybygpOwotCi0JICAgIElQcm9qZWN0IHByb2plY3QxID0gY3JlYXRlU2ltcGxlUHJvamVjdChQUk9KRUNUMV9OQU1FKTsKLQkgICAgSUZvbGRlciBmb2xkZXIxID0gY3JlYXRlRm9sZGVyKHByb2plY3QxLCBGT0xERVIxX05BTUUpOwotCSAgICBjb3B5RmlsZShmb2xkZXIxLCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBXU0RMRklMRV9UV08pOwotCSAgICBJRm9sZGVyIGZvbGRlcjIgPSBjcmVhdGVGb2xkZXIoZm9sZGVyMSwgRk9MREVSMl9OQU1FKTsKLQkgICAgY29weUZpbGUoZm9sZGVyMiwgQUNUVUFMX1RFU1RGSUxFUEFUSCwgV1NETEZJTEVfT05FKTsKLQkgICAgSUZvbGRlciBmb2xkZXIzID0gY3JlYXRlRm9sZGVyKHByb2plY3QxLCBGT0xERVIzX05BTUUpOwotCSAgICBjb3B5RmlsZShmb2xkZXIzLCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBXU0RMRklMRV9USFJFRSk7Ci0JICAgIGNvcHlGaWxlKGZvbGRlcjMsIEFDVFVBTF9URVNURklMRVBBVEgsIFdTRExGSUxFX0ZPVVIpOwotCSAgICAKLQkgICAgSVByb2plY3QgcHJvamVjdDIgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KFBST0pFQ1QyX05BTUUpOwotCSAgICBjb3B5RmlsZShwcm9qZWN0MiwgQUNUVUFMX1RFU1RGSUxFUEFUSCwgV1NETEZJTEVfRklWRSk7Ci0JICAgIGNyZWF0ZUZvbGRlcihwcm9qZWN0MiwgRk9MREVSNF9OQU1FKTsgIC8vZm9sZGVyIHdpdGggbm8gY29udGVudAotCSAgICBJRm9sZGVyIGZvbGRlcjUgPSBjcmVhdGVGb2xkZXIocHJvamVjdDIsIEZPTERFUjVfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKGZvbGRlcjUsIEFDVFVBTF9URVNURklMRVBBVEgsIFdTRExGSUxFX1NJWCk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QzID0gY3JlYXRlU2ltcGxlUHJvamVjdChQUk9KRUNUM19OQU1FKTsKLQkgICAgY29weUZpbGUocHJvamVjdDMsIEFDVFVBTF9URVNURklMRVBBVEgsIFhNTEZJTEVfT05FKTsKLQkJICB9Ci0JCSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCSAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJICB9Ci0JIAotCQkvL2NvZGUgdG8gY2hlY2sgd29ya3NwYWNlIHNldCB1cCAtIGRlYnVnCi0JCS8qRGF0YVJlc291cmNlVmlzaXRvciB2aXNpdG9yID0gbmV3IERhdGFSZXNvdXJjZVZpc2l0b3IoKTsKLQkgICAgcm9vdC5hY2NlcHQodmlzaXRvcik7Ci0JICAgIHZpc2l0b3IudmlzaXQocm9vdCk7Ki8KLQkgICAgCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tIGxvY2F0b3IgZGF0YSBzZXR1cCBjb21wbGV0ZSIpOwotCSAgfQotCQotCXByb3RlY3RlZCBjbGFzcyBEYXRhUmVzb3VyY2VWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlVmlzaXRvcgotCXsKLSAgICAJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlIHJlc291cmNlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0gICAgCQlpZiAoKHJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHx8IChyZXNvdXJjZSBpbnN0YW5jZW9mIElGb2xkZXIpKQotICAgIAkJewotICAgIAkJICBTeXN0ZW0ub3V0LnByaW50bG4oInZpc2l0aW5nICIgKyByZXNvdXJjZS5nZXROYW1lKCkpOyAgICAJCSAgCi0gICAgCQl9Ci0gICAgCQllbHNlIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlKQotICAgIAkJewotICAgIAkJCVN5c3RlbS5vdXQucHJpbnRsbigiZm91bmQgZmlsZSAiICsgcmVzb3VyY2UuZ2V0TmFtZSgpKTsgICAgCQkJCi0gICAgCQl9Ci0gICAgCQlyZXR1cm4gdHJ1ZTsKLSAgICAJfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvcGx1Z2luL1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3BsdWdpbi9UZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTU2YjY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvcGx1Z2luL1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0c1BsdWdpbiBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9BbGxXU0pVbml0VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjY2RhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMuZGF0YS5Mb2NhdG9yV29ya3NwYWNlU2V0dXA7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RSZXN1bHQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHRvIHJ1biBhbGwgdGhlIHVuaXR0ZXN0IHRlc3RzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsV1NKVW5pdFRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgLyoqCi0gICAqIE1ldGhvZCBwYXJzZUFyZ3MuCi0gICAqIAotICAgKiBAcGFyYW0gYXJncwotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlQXJncyhPYmplY3QgYXJncykKLSAgewotICAgIC8vIHR5cGljaWFsbHkgYXJncyBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLAotICAgIC8vIG5vdCBzdXJlIHdoZW4gaXQgd291bGRuJ3QgYmUuCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgbmV3IEFsbFdTSlVuaXRUZXN0cygpLnJ1bk1haW4oYXJncyk7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IHJ1bk1haW4oT2JqZWN0IGFyZ3MpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBUZXN0UnVubmVyIHRlc3RSdW5uZXIgPSBudWxsOwotCi0gICAgICBwYXJzZUFyZ3MoYXJncyk7Ci0KLSAgICAgIHRlc3RSdW5uZXIgPSBuZXcgVGVzdFJ1bm5lcihTeXN0ZW0ub3V0KTsKLSAKLQotICAgICAgVGVzdCBzdWl0ZSA9IHN1aXRlKCk7Ci0gICAgICBUZXN0UmVzdWx0IHRlc3RSZXN1bHQgPSB0ZXN0UnVubmVyLmRvUnVuKHN1aXRlLCBmYWxzZSk7Ci0gICAgICBwcmludEhlYWRlcih0ZXN0UmVzdWx0KTsgICAgICAKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgdGVzdFN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotIC8vYWRkIHVuaXQgdGVzdHMgdG8gc3VpdGUgaGVyZS4uLgotICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBMb2NhdG9yV29ya3NwYWNlU2V0dXAuc3VpdGUoKSk7Ci0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIFdlYlNlcnZpY2VGaW5kZXJUZXN0cy5zdWl0ZSgpKTsKLSAgICB0ZXN0U3VpdGUuYWRkVGVzdCggV1NETENvcGllclRlc3RzLnN1aXRlKCkpOwotICAgIHJldHVybiB0ZXN0U3VpdGU7Ci0gIH0KLQotICAvKioKLSAgICogUHJpbnRzIHRoZSBoZWFkZXIgb2YgdGhlIHJlcG9ydAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJpbnRIZWFkZXIoVGVzdFJlc3VsdCByZXN1bHQpCi0gIHsKLSAgICBpZiAocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnQoIk9LIik7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAoIiArIHJlc3VsdC5ydW5Db3VudCgpICsgIiB0ZXN0cykiKTsKLQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxVUkVTISEhIik7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCi0gICAgICAgICJUZXN0cyBydW46ICIKLSAgICAgICAgICArIHJlc3VsdC5ydW5Db3VudCgpCi0gICAgICAgICAgKyAiLCAgRmFpbHVyZXM6ICIKLSAgICAgICAgICArIHJlc3VsdC5mYWlsdXJlQ291bnQoKQotICAgICAgICAgICsgIiwgIEVycm9yczogIgotICAgICAgICAgICsgcmVzdWx0LmVycm9yQ291bnQoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L0xhdW5jaFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvTGF1bmNoVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTZlZmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvTGF1bmNoVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBsYXRmb3JtUnVubmFibGU7Ci0KLS8qKgotICogTWluaW1hbCBhcHAgdG8gcnVuIGFzIEVjbGlwc2UgImFwcGxpY2F0aW9uIgotICovCi1wdWJsaWMgY2xhc3MgTGF1bmNoVGVzdCBpbXBsZW1lbnRzIElQbGF0Zm9ybVJ1bm5hYmxlCi17Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGxhdGZvcm1SdW5uYWJsZSNydW4oT2JqZWN0KQotICAgKi8KLSAgcHVibGljIE9iamVjdCBydW4oT2JqZWN0IGFyZ3MpIHRocm93cyBFeGNlcHRpb24KLSAgewotCi0gICAgT2JqZWN0IHJlc3VsdCA9IG5ldyBBbGxXU0pVbml0VGVzdHMoKS5ydW5NYWluKGFyZ3MpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBUaHJvd2FibGUpCi0gICAgICB7Ci0gICAgICAgICgoVGhyb3dhYmxlKSByZXN1bHQpLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3RzIGRpZG4ndCByZXR1cm4gJ29rJyIpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIElQbGF0Zm9ybVJ1bm5hYmxlLkVYSVRfT0s7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVnaXN0cnlUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9SZWdpc3RyeVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YTM2ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9SZWdpc3RyeVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlJlZ2lzdHJ5U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuVURESVJlZ2lzdHJ5U2VydmljZTsKLQotcHVibGljIGNsYXNzIFJlZ2lzdHJ5VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSAoKQotCXsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoUmVnaXN0cnlUZXN0cy5jbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBUYXhvbm9teSBtb2RlbCBhbmQgcGFzc2VzIGl0IHRvCi0JICogPGNvZGU+UmVnaXN0cnlTZXJ2aWNlLnNhdmVUYXhvbm9teSgpPC9jb2RlPgotCSAqIHdoZXJlIHRoZSBtb2RlbCBpcyBwZXJzaXN0ZWQgdG8gYSBwbGF0Zm9ybQotCSAqIHNwZWNpZmllZCB0ZW1wb3JhcnkgZmlsZXN5c3RlbSBsb2NhdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlVGF4b25vbXkgKCkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlRJTkcgdGVzdF9SZWdpc3RyeVNlcnZpY2Vfc2F2ZVRheG9ub215Iik7Ci0JCXRyeQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIFJlZ2lzdHJ5U2VydmljZSBhbmQgVGF4b25vbXkiKTsKLQkJCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsJCQkKLQkJCVRheG9ub215IHRheG9ub215ID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215KCk7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGRpbmcgYSBzaW1wbGUgVGF4b25vbXkgbW9kZWwiKTsKLQkJCXRheG9ub215LnNldElkKCJteS50YXhvbm9teSIpOwotCQkJdGF4b25vbXkuc2V0TmFtZSgiTXkgVGF4b25vbXkiKTsKLQkJCUVMaXN0IGxpc3QgPSB0YXhvbm9teS5nZXRDYXRlZ29yeSgpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkxID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnkxLnNldE5hbWUoIk15IGZpcnN0IGNhdGVnb3J5Iik7Ci0JCQljYXRlZ29yeTEuc2V0Q29kZSgiMSIpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkyID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnkyLnNldE5hbWUoIk15IHNlY29uZCBjYXRlZ29yeSIpOwotCQkJY2F0ZWdvcnkyLnNldENvZGUoIjIiKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5MyA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5My5zZXROYW1lKCJNeSB0aGlyZCBjYXRlZ29yeSIpOwotCQkJY2F0ZWdvcnkzLnNldENvZGUoIjIuMSIpOwotCQkJY2F0ZWdvcnkyLmdldENhdGVnb3J5KCkuYWRkKGNhdGVnb3J5Myk7Ci0JCQlsaXN0LmFkZChjYXRlZ29yeTEpOwotCQkJbGlzdC5hZGQoY2F0ZWdvcnkyKTsKLQotCQkJRmlsZSBmaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgidGF4b25vbXkuIiwiLnhtbCIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTYXZpbmcgdGhlIFRheG9ub215IG1vZGVsIHRvICIrZmlsZS5nZXRDYW5vbmljYWxQYXRoKCkpOwotCQkJcmVnaXN0cnlTZXJ2aWNlLnNhdmVUYXhvbm9teShmaWxlLnRvVVJMKCksdGF4b25vbXkpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXhjKQotCQl7Ci0JCQlleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQlmYWlsKCJVbmV4cGVjdGVkIFRocm93YWJsZSBbIitleGMuZ2V0TWVzc2FnZSgpKyJdIik7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZJTklTSEVEIHRlc3RfUmVnaXN0cnlTZXJ2aWNlX3NhdmVUYXhvbm9teVxuIik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFVEREkgUmVnaXN0cnkgbW9kZWwgYW5kIHBhc3NlcyBpdCB0bwotCSAqIDxjb2RlPlJlZ2lzdHJ5U2VydmljZS5zYXZlUmVnaXN0cnkoKTwvY29kZT4KLQkgKiB3aGVyZSB0aGUgbW9kZWwgaXMgcGVyc2lzdGVkIHRvIGEgcGxhdGZvcm0KLQkgKiBzcGVjaWZpZWQgdGVtcG9yYXJ5IGZpbGVzeXN0ZW0gbG9jYXRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdF9SZWdpc3RyeVNlcnZpY2Vfc2F2ZVJlZ2lzdHJ5ICgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUSU5HIHRlc3RfUmVnaXN0cnlTZXJ2aWNlX3NhdmVSZWdpc3RyeSIpOwotCQl0cnkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBSZWdpc3RyeVNlcnZpY2UsIFVERElSZWdpc3RyeVNlcnZpY2UgYW5kIFJlZ2lzdHJ5Iik7Ci0JCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JCQlVRERJUmVnaXN0cnlTZXJ2aWNlIHVkZGlSZWdpc3RyeVNlcnZpY2UgPSBVRERJUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7CQkJCi0JCQlVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5ID0gdWRkaVJlZ2lzdHJ5U2VydmljZS5uZXdVRERJUmVnaXN0cnkoKTsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJCdWlsZGluZyBhIHNpbXBsZSBSZWdpc3RyeSBtb2RlbCIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldElkKCJteS5yZWdpc3RyeSIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldFZlcnNpb24oIjIuMCIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldERpc2NvdmVyeVVSTCgiaHR0cDovL3NvbWUuZGlzY292ZXJ5LnVybCIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldFB1YmxpY2F0aW9uVVJMKCJodHRwOi8vc29tZS5wdWJsaWNhdGlvbi51cmwiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXREZWZhdWx0TG9naW4oImhvY2tleWZhbmF0aWMiKTsKLQkJCU5hbWUgbmFtZSA9IFJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTmFtZSgpOwotCQkJbmFtZS5zZXRWYWx1ZSgiTXkgUmVnaXN0cnkiKTsKLQkJCXVkZGlSZWdpc3RyeS5nZXROYW1lKCkuYWRkKG5hbWUpOwotCQkJVGF4b25vbXkgdGF4b25vbXlSZWYgPSByZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXkoKTsKLQkJCXRheG9ub215UmVmLnNldFJlZigibXkudGF4b25vbXkiKTsKLQkJCVRheG9ub21pZXMgdCA9IHVkZGlSZWdpc3RyeS5nZXRUYXhvbm9taWVzKCk7Ci0JCQlpZiAodCA9PSBudWxsKQotCQkJewotCQkJCXQgPSBVRERJUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUYXhvbm9taWVzKCk7Ci0JCQkJdWRkaVJlZ2lzdHJ5LnNldFRheG9ub21pZXModCk7Ci0JCQl9Ci0JCQlFTGlzdCBlID0gdC5nZXRUYXhvbm9teSgpOwotCQkJZS5hZGQodGF4b25vbXlSZWYpOwotCi0JCQlGaWxlIGZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJyZWdpc3RyeS4iLCIueG1sIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNhdmluZyB0aGUgUmVnaXN0cnkgbW9kZWwgdG8gIitmaWxlLmdldENhbm9uaWNhbFBhdGgoKSk7Ci0JCQlyZWdpc3RyeVNlcnZpY2Uuc2F2ZVJlZ2lzdHJ5KGZpbGUudG9VUkwoKSx1ZGRpUmVnaXN0cnkpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXhjKQotCQl7Ci0JCQlleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQlmYWlsKCJVbmV4cGVjdGVkIFRocm93YWJsZSBbIitleGMuZ2V0TWVzc2FnZSgpKyJdIik7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZJTklTSEVEIHRlc3RfUmVnaXN0cnlTZXJ2aWNlX3NhdmVSZWdpc3RyeVxuIik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFVEREkgUmVnaXN0cnkgbW9kZWwgYW5kIGEgbmV3IFRheG9ub215Ci0JICogbW9kZWwsIGFzc29jaWF0ZXMgdGhlIGxhdHRlciB3aXRoIHRoZSBmb3JtZXIsIGFuZAotCSAqIGRyaXZlcyA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyLnNhdmVSZWdpc3RyeSgpPC9jb2RlPgotCSAqIHRvIHNhdmUgdGhlIG1vZGVscyBhbmQgdGhlIGluZGV4IGRvY3VtZW50IHRvIHRoZQotCSAqIHByZWZlcnJlZCBsb2NhdGlvbiBvZiB0aGUgZGVmYXVsdCByZWdpc3RyeSBtYW5hZ2VyLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX3NhdmVSZWdpc3RyeSgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUSU5HIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX3NhdmVSZWdpc3RyeSIpOwotCQl0cnkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBSZWdpc3RyeVNlcnZpY2UgYW5kIEdldHRpbmcgUmVnaXN0cnlNYW5hZ2VyIik7CQotCQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwkKLQkJCUlSZWdpc3RyeU1hbmFnZXIgcmVnTWFuYWdlciA9IHJlZ2lzdHJ5U2VydmljZS5nZXREZWZhdWx0UmVnaXN0cnlNYW5hZ2VyKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBsb2NhdGlvbiBvZiB0aGUgZGVmYXVsdCBpbmRleCBpcyAiICsgcmVnTWFuYWdlci5nZXRVUkwoKSk7Ci0KLQkJCS8vYnVpbGQgdGhlIGhvY2tleSB0YXhvbm9teQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJCdWlsZGluZyB0aGUgaG9ja2V5IFRheG9ub215IG1vZGVsIik7Ci0JCQlUYXhvbm9teSBob2NrZXlUYXhvbm9teSA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teSgpOwotCQkJaG9ja2V5VGF4b25vbXkuc2V0SWQoImhvY2tleS50YXhvbm9teSIpOwotCQkJaG9ja2V5VGF4b25vbXkuc2V0TmFtZSgiaG9ja2V5IFRheG9ub215Iik7Ci0JCQlFTGlzdCBsaXN0ID0gaG9ja2V5VGF4b25vbXkuZ2V0Q2F0ZWdvcnkoKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5MSA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5NCA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5NC5zZXROYW1lKCJQcm8iKTsKLQkJCWNhdGVnb3J5NC5zZXRDb2RlKCI0Iik7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTUgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTUuc2V0TmFtZSgiQUhMIik7Ci0JCQljYXRlZ29yeTUuc2V0Q29kZSgiNC4xIik7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTYgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTYuc2V0TmFtZSgiTkhMIik7Ci0JCQljYXRlZ29yeTYuc2V0Q29kZSgiNC4yIik7Ci0JCQljYXRlZ29yeTEuc2V0TmFtZSgiSnVuaW9yIik7Ci0JCQljYXRlZ29yeTEuc2V0Q29kZSgiMSIpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkyID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnkyLnNldE5hbWUoIk1pZGdldCIpOwotCQkJY2F0ZWdvcnkyLnNldENvZGUoIjIiKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5MyA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5My5zZXROYW1lKCJCYW50YW0iKTsKLQkJCWNhdGVnb3J5My5zZXRDb2RlKCIzIik7Ci0JCQljYXRlZ29yeTQuZ2V0Q2F0ZWdvcnkoKS5hZGQoY2F0ZWdvcnk1KTsKLQkJCWNhdGVnb3J5NC5nZXRDYXRlZ29yeSgpLmFkZChjYXRlZ29yeTYpOwotCQkJbGlzdC5hZGQoY2F0ZWdvcnkxKTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5Mik7Ci0JCQlsaXN0LmFkZChjYXRlZ29yeTMpOwotCQkJbGlzdC5hZGQoY2F0ZWdvcnk0KTsKLQkJCQotCQkJLy9zYXZlIHRoZSBob2NrZXkgdGF4b25vbXkKLQkJCVRheG9ub215IGhvY2tleVRheG9ub215UmVmID0gcmVnTWFuYWdlci5zYXZlVGF4b25vbXkoaG9ja2V5VGF4b25vbXkpOwotCi0JCQkvL21ha2UgdGhlIGhvY2tleSByZWdpc3RyeQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJCdWlsZGluZyB0aGUgaG9ja2V5IFJlZ2lzdHJ5IG1vZGVsIik7Ci0JCQlVRERJUmVnaXN0cnlTZXJ2aWNlIHVkZGlSZWdpc3RyeVNlcnZpY2UgPSBVRERJUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7CQkJCi0JCQlVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5ID0gdWRkaVJlZ2lzdHJ5U2VydmljZS5uZXdVRERJUmVnaXN0cnkoKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRJZCgiaG9ja2V5LnJlZ2lzdHJ5Iik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0VmVyc2lvbigiMi4wIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0RGVmYXVsdExvZ2luKCJob2NrZXlmYW5hdGljIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0RGlzY292ZXJ5VVJMKCJodHRwOi8vc29tZS5kaXNjb3ZlcnkudXJsIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0UHVibGljYXRpb25VUkwoImh0dHA6Ly9zb21lLnB1YmxpY2F0aW9uLnVybCIpOwotCQkJTmFtZSBuYW1lID0gUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOYW1lKCk7Ci0JCQluYW1lLnNldFZhbHVlKCJIb2NrZXkgUmVnaXN0cnkiKTsKLQkJCXVkZGlSZWdpc3RyeS5nZXROYW1lKCkuYWRkKG5hbWUpOwotCi0JCQkvLyBBZGQgdGhlIHJlZmVyZW5jZSB0byB0aGUgdGF4b25vbXkgKHNhdmVkIGFib3ZlKSB0byB0aGUgcmVnaXN0cnkuICAKLQkJCXVkZGlSZWdpc3RyeVNlcnZpY2UuYWRkVGF4b25vbXkodWRkaVJlZ2lzdHJ5LGhvY2tleVRheG9ub215UmVmKTsKLQotCQkJLyoKLQkJCVVERElUYXhvbm9teUZpbmRlciBVSVRGaW5kZXIgPSBuZXcgVURESVRheG9ub215RmluZGVyKCk7Ci0JCQlyZWdNYW5hZ2VyLmFkZFRheG9ub215RmluZGVyKHVkZGlSZWdpc3RyeS5nZXRDbGFzcygpLmdldE5hbWUoKSxVSVRGaW5kZXIpOwotCQkJKi8KLQkJCS8vIFNhdmUgdGhlIHRoaW5nLgotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTYXZpbmcgdGhlIGhvY2tleSBSZWdpc3RyeSBtb2RlbCIpOwotCQkJcmVnTWFuYWdlci5zYXZlUmVnaXN0cnkodWRkaVJlZ2lzdHJ5KTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4YykKLQkJewotCQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQkJZmFpbCgiVW5leHBlY3RlZCBUaHJvd2FibGUgWyIrZXhjLmdldE1lc3NhZ2UoKSsiXSIpOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGSU5JU0hFRCB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9zYXZlUmVnaXN0cnlcbiIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogTG9hZHMgdGhlIHJlZ2lzdHJ5IGFuZCB0YXhvbm9teSBpbiB0aGUgaW5kZXggY3JlYXRlZCBpbgotCSAqIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX3NhdmVSZWdpc3RyeSwgdGhlbiBhc3NlcnRzIHRoYXQgdGhlCi0JICogY29udGVudCBvZiB0aGUgbW9kZWwgaXMgd2hhdCB3ZSBleHBlY3QuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdF9SZWdpc3RyeU1hbmFnZXJfbG9hZFJlZ2lzdHJ5KCkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlRJTkcgdGVzdF9SZWdpc3RyeU1hbmFnZXJfbG9hZFJlZ2lzdHJ5Iik7Ci0JCXRyeSB7Ci0JCQkvLyBTZXR1cAotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBSZWdpc3RyeVNlcnZpY2UgYW5kIEdldHRpbmcgUmVnaXN0cnlNYW5hZ2VyIik7CQotCQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwkKLQkJCUlSZWdpc3RyeU1hbmFnZXIgcmVnTWFuYWdlciA9IHJlZ2lzdHJ5U2VydmljZS5nZXREZWZhdWx0UmVnaXN0cnlNYW5hZ2VyKCk7Ci0JCQkKLQkJCS8vIEdldCB0aGUgb25lIHJlZ2lzdHJ5IFVSSSB3ZSBleHBlY3QsIGFuZCBsb2FkIHRoZSByZWdpc3RyeS4KLQkJCVN0cmluZ1tdIHJlZ2lzdHJpZXMgPSByZWdNYW5hZ2VyLmdldFJlZ2lzdHJ5VVJJcygpOwotCQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG51bWJlciBvZiByZWdpc3RyaWVzICIrcmVnaXN0cmllcy5sZW5ndGgscmVnaXN0cmllcy5sZW5ndGgsMSk7Ci0JCQlTdHJpbmcgdXJpID0gcmVnaXN0cmllc1swXTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGluZyByZWdpc3RyeSAiICsgdXJpKTsKLQkJCVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gcmVnTWFuYWdlci5sb2FkUmVnaXN0cnkodXJpKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgcmVnaXN0cnkgIiArIHJlZ2lzdHJ5LmdldElkKCkpOwotCQkJYXNzZXJ0RXF1YWxzKCJEaWQgbm90IGZpbmQgaG9ja2V5IHJlZ2lzdHJ5IiwiaG9ja2V5LnJlZ2lzdHJ5IixyZWdpc3RyeS5nZXRJZCgpKTsKLQkJCQotCQkJLy8gSXQncyBzdXBwb3NlZCB0byBiZSBhIFVEREkgcmVnaXN0cnkuIFZlcmlmeSBpdCBhbmQgY2hlY2sgaXRzIHZhbHVlcy4KLQkJCWFzc2VydFRydWUoIlJlZ2lzdHJ5IGlzIG5vdCBhIFVERElSZWdpc3RyeSIsKHJlZ2lzdHJ5IGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5KSk7Ci0JCQlVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5ID0gKFVERElSZWdpc3RyeSlyZWdpc3RyeTsKLQkJCWFzc2VydEVxdWFscyh1ZGRpUmVnaXN0cnkuZ2V0VmVyc2lvbigpLCIyLjAiKTsKLQkJCWFzc2VydEVxdWFscyh1ZGRpUmVnaXN0cnkuZ2V0RGVmYXVsdExvZ2luKCksImhvY2tleWZhbmF0aWMiKTsKLQkJCWFzc2VydEVxdWFscyh1ZGRpUmVnaXN0cnkuZ2V0RGlzY292ZXJ5VVJMKCksImh0dHA6Ly9zb21lLmRpc2NvdmVyeS51cmwiKTsKLQkJCWFzc2VydEVxdWFscyh1ZGRpUmVnaXN0cnkuZ2V0UHVibGljYXRpb25VUkwoKSwiaHR0cDovL3NvbWUucHVibGljYXRpb24udXJsIik7Ci0JCQkKLQkJCS8vIExvYWQgdGhlIHRheG9ub21pZXMgdXNlZCB0aGUgVURESSByZWdpc3RyeS4KLQkJCVVERElSZWdpc3RyeVNlcnZpY2UgdWRkaVJlZ2lzdHJ5U2VydmljZSA9IFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkJCVRheG9ub215W10gdGF4b25vbWllcyA9IHJlZ01hbmFnZXIubG9hZFRheG9ub21pZXModWRkaVJlZ2lzdHJ5U2VydmljZS5nZXRUYXhvbm9teVVSSXModWRkaVJlZ2lzdHJ5KSk7Ci0JCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIHRheG9ub21pZXMgIit0YXhvbm9taWVzLmxlbmd0aCx0YXhvbm9taWVzLmxlbmd0aCwxKTsKLQkJCVRheG9ub215IHRheG9ub215ID0gdGF4b25vbWllc1swXTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgdGF4b25vbXkgIiArIHRheG9ub215LmdldElkKCkpOwotCQkJQXNzZXJ0LmFzc2VydEVxdWFscygiRGlkIG5vdCBmaW5kIGhvY2tleSB0YXhvbm9teSIsImhvY2tleS50YXhvbm9teSIsdGF4b25vbXkuZ2V0SWQoKSk7Ci0JCQkKLQkJCS8vIER1bXAgb3V0IHRoZSB2YWx1ZXMgKG5vIGFzc2VydGlvbnMgaGVyZSkuCi0JCQlFTGlzdCBjTGlzdCA9IHRheG9ub215LmdldENhdGVnb3J5KCk7Ci0JCQlmb3IoaW50IGkgPSAwO2k8Y0xpc3Quc2l6ZSgpO2krKyl7Ci0JCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkgPSAoQ2F0ZWdvcnkpY0xpc3QuZ2V0KGkpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgY2F0ZWdvcnkgIiArIGNhdGVnb3J5LmdldE5hbWUoKSk7Ci0JCQkJRUxpc3QgYzJMaXN0ID0gY2F0ZWdvcnkuZ2V0Q2F0ZWdvcnkoKTsKLQkJCQlmb3IoaW50IGogPSAwO2o8YzJMaXN0LnNpemUoKTtqKyspewotCQkJCQlDYXRlZ29yeSBpQ2F0ZWdvcnkgPSAoQ2F0ZWdvcnkpYzJMaXN0LmdldChqKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCBzdWJjYXRlZ29yeSAiICsgaUNhdGVnb3J5LmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQkJCQkJCi0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIHQpCi0JCXsKLQkJCXQucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQlmYWlsKCJVbmV4cGVjdGVkIFRocm93YWJsZSBbIit0LmdldE1lc3NhZ2UoKSsiXSIpOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGSU5JU0hFRCB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9sb2FkUmVnaXN0cnlcbiIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9UZXN0QnVuZGxlVXRpbHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvVGVzdEJ1bmRsZVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MjJhMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9UZXN0QnVuZGxlVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbi5CdW5kbGVVdGlsczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuVmVyc2lvbjsKLQotcHVibGljIGNsYXNzIFRlc3RCdW5kbGVVdGlscyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRWZXJzaW9uKCkgewotCQlWZXJzaW9uIHZlcnNpb24gPSBCdW5kbGVVdGlscy5nZXRWZXJzaW9uKCJvcmcuZWNsaXBzZS53c3Qud3MiKTsKLQkJYXNzZXJ0Tm90TnVsbCgidmVyc2lvbiBzaG91bGQgbmV2ZXIgYmUgbnVsbCIsIHZlcnNpb24pOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XU0RMQ29waWVyVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NETENvcGllclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNWU3YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XU0RMQ29waWVyVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMjYgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcwotICogMjAwNzA0MDkgICAxODE2MzUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRExDb3BpZXIgdXRpbGl0eSBzaG91bGQgY3JlYXRlIHRhcmdldCBmb2xkZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5XU0RMQ29waWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW47Ci0KLS8qKgotICogSlVuaXQgdGVzdHMgZm9yIFdTRExDb3BpZXIKLSAqLwotcHVibGljIGNsYXNzIFdTRExDb3BpZXJUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9ESVIgICAgID0gImRhdGEvd3NkbGNvcGllci8iOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUjEgPSAid3NkbDEiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUjIgPSAid3NkbDIiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUjMgPSAid3NkbDMiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUjQgPSAid3NkbDQiOwotCQotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLQotCS8qKgotCSAqIFJldHVybiBzdWl0ZSBvZiB0ZXN0cyB0byBydW4uCi0JICogCi0JICogQHJldHVybiBBIFRlc3RTdWl0ZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIldTRExDb3BpZXJUZXN0cyIpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29waWVyVGVzdHMoInRlc3RDYXNlMSIpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgV1NETENvcGllclRlc3RzKCJ0ZXN0Q2FzZTIiKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IFdTRExDb3BpZXJUZXN0cygidGVzdENhc2UzIikpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29waWVyVGVzdHMoInRlc3RDYXNlNCIpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgV1NETENvcGllclRlc3RzKCJ0ZXN0Q2FzZTUiKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IFdTRExDb3BpZXJUZXN0cygidGVzdENhc2U2IikpOwotCQlyZXR1cm4gc3VpdGU7Ci0JfQotCQkKLQkvKioKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBUZXN0IG1ldGhvZCBuYW1lLgotCSAqLwotCXB1YmxpYyBXU0RMQ29waWVyVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICAgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCgiV1NETENvcGllclRlc3RzIik7Ci0JICAgIAotCSAgICBpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0JICAgIAlwcm9qZWN0LmNyZWF0ZShudWxsKTsKLQkgICAgCQotCSAgICBpZiAoIXByb2plY3QuaXNPcGVuKCkpCi0JICAgIAlwcm9qZWN0Lm9wZW4obnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGEgZm9sZGVyLgotCSAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgZm9sZGVyLgotCSAqIEByZXR1cm4gVGhlIGNyZWF0ZWQgZm9sZGVyLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBJRm9sZGVyIGNyZWF0ZUZvbGRlcihTdHJpbmcgbmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRm9sZGVyIGZvbGRlciA9IHByb2plY3QuZ2V0Rm9sZGVyKG5ldyBQYXRoKG5hbWUpKTsKLSAgICAgICAgZm9sZGVyLmNyZWF0ZShmYWxzZSwgdHJ1ZSwgbnVsbCk7Ci0JICAgIHJldHVybiBmb2xkZXI7Ci0JfQotCQotCS8qCi0JICogVmFsaWRhdGUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2YgdGhlIHRhcmdldCBmb2xkZXIgYWZ0ZXIgY29weWluZy4KLQkgKi8KLQlwcml2YXRlIHZvaWQgdmFsaWRhdGUoSUZvbGRlciBmb2xkZXIsIFN0cmluZyBmaWxlbmFtZSkgewkJCi0JCWFzc2VydE5vdE51bGwoZm9sZGVyLmZpbmRNZW1iZXIoIjEvMi8zL3Rlc3Qud3NkbCIpKTsKLQkJYXNzZXJ0Tm90TnVsbChmb2xkZXIuZmluZE1lbWJlcigiMS8yYS8iICsgZmlsZW5hbWUpKTsKLQkJYXNzZXJ0Tm90TnVsbChmb2xkZXIuZmluZE1lbWJlcigiMS8yYS90ZXN0LnhzZCIpKTsKLQkJYXNzZXJ0Tm90TnVsbChmb2xkZXIuZmluZE1lbWJlcigidGVzdC54c2QiKSk7CQkKLQl9Ci0JCi0JLyoKLQkgKiBWYWxpZGF0ZSB0aGUgdGltZXN0YW1wcyBvZiB0aGUgZmlsZXMgaGF2ZSBub3QgY2hhbmdlZC4KLQkgKi8KLQlwcml2YXRlIGxvbmdbXSB2YWxpZGF0ZVRpbWVzdGFtcHMoSUZvbGRlciBmb2xkZXIsIGxvbmdbXSBvbGRUaW1lc3RhbXBzKSB7Ci0JCQotCQlsb25nW10gY3VycmVudFRpbWVzdGFtcHMgPSBuZXcgbG9uZ1szXTsKLQkJCi0JCWN1cnJlbnRUaW1lc3RhbXBzWzBdID0gZm9sZGVyLmZpbmRNZW1iZXIoIjEvMi8zL3Rlc3Qud3NkbCIpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCWlmIChvbGRUaW1lc3RhbXBzICE9IG51bGwpIGFzc2VydEVxdWFscyhjdXJyZW50VGltZXN0YW1wc1swXSwgb2xkVGltZXN0YW1wc1swXSk7Ci0KLQkJY3VycmVudFRpbWVzdGFtcHNbMV0gPSBmb2xkZXIuZmluZE1lbWJlcigiMS8yYS90ZXN0LnhzZCIpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCWlmIChvbGRUaW1lc3RhbXBzICE9IG51bGwpIGFzc2VydEVxdWFscyhjdXJyZW50VGltZXN0YW1wc1sxXSwgb2xkVGltZXN0YW1wc1sxXSk7Ci0JCQotCQljdXJyZW50VGltZXN0YW1wc1syXSA9IGZvbGRlci5maW5kTWVtYmVyKCJ0ZXN0LnhzZCIpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCWlmIChvbGRUaW1lc3RhbXBzICE9IG51bGwpIGFzc2VydEVxdWFscyhjdXJyZW50VGltZXN0YW1wc1syXSwgb2xkVGltZXN0YW1wc1syXSk7Ci0JCQotCQlyZXR1cm4gY3VycmVudFRpbWVzdGFtcHM7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgY2FzZSAjMQotCSAqIC0gY29waWVzIHdzZGwgZnJvbSB0ZXN0IGRhdGEgZGlyZWN0b3J5IHVzaW5nIGZpbGU6LyBVUkkgCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENhc2UxKCkgewotCQl0cnkgewotCQkJVVJMIHVybCA9IFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShEQVRBX0RJUiArICIxLzJhL3N0YXJ0LndzZGwiKTsJCQkJCi0JCQl1cmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJCQotCQkJSUZvbGRlciBmb2xkZXIgPSBjcmVhdGVGb2xkZXIoV1NETF9GT0xERVIxKTsKLQkJCVN0cmluZyBmb2xkZXJVUkkgPSAicGxhdGZvcm06L3Jlc291cmNlIiArIGZvbGRlci5nZXRGdWxsUGF0aCgpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogIiArIHVybCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgdG86ICAgIiArIGZvbGRlclVSSSk7Ci0JCQkKLQkJCVdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIoKTsKLQkJCWNvcGllci5zZXRTb3VyY2VVUkkodXJsLnRvU3RyaW5nKCkpOwotCQkJY29waWVyLnNldFRhcmdldEZvbGRlclVSSShmb2xkZXJVUkkpOwotCQkJCi0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCi0JCQl2YWxpZGF0ZShmb2xkZXIsICJzdGFydC53c2RsIik7Ci0JCQlhc3NlcnRFcXVhbHMoY29waWVyLmdldFJlbGF0aXZlUGF0aCgpLnRvU3RyaW5nKCksICIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzISIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdCBjYXNlICMyCi0JICogLSBjb3BpZXMgd3NkbCBmcm9tIG9uZSBmb2xkZXIgdG8gYW5vdGhlciB1c2luZyBwbGF0Zm9ybTovcmVzb3VyY2UgVVJJCi0JICogLSBhbHNvIGNoYW5nZXMgdGhlIHRhcmdldCBmaWxlbmFtZQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlMigpIHsKLQkJdHJ5IHsKLQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IHByb2plY3QuZ2V0Rm9sZGVyKFdTRExfRk9MREVSMSkuZmluZE1lbWJlcigiMS8yYS9zdGFydC53c2RsIik7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IGNyZWF0ZUZvbGRlcihXU0RMX0ZPTERFUjIpOwkJCQotCQkJCi0JCQlTdHJpbmcgcGF0aCA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiICsgcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKTsgCQkJCQkJCQkJCi0JCQlTdHJpbmcgZm9sZGVyVVJJID0gZm9sZGVyLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIGZyb206ICIgKyBwYXRoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyB0bzogICAiICsgZm9sZGVyVVJJKTsKLQkJCQotCQkJV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcigpOwotCQkJY29waWVyLnNldFNvdXJjZVVSSShwYXRoKTsJCQkKLQkJCWNvcGllci5zZXRUYXJnZXRGb2xkZXJVUkkoZm9sZGVyVVJJKTsKLQkJCWNvcGllci5zZXRUYXJnZXRGaWxlbmFtZSgibmV3bmFtZS53c2RsIik7Ci0JCQkKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBudWxsKTsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkKLQkJCXZhbGlkYXRlKGZvbGRlciwgIm5ld25hbWUud3NkbCIpOwotCQkJYXNzZXJ0RXF1YWxzKGNvcGllci5nZXRSZWxhdGl2ZVBhdGgoKS50b1N0cmluZygpLCAiMS8yYS9uZXduYW1lLndzZGwiKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzISIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCksIGZhbHNlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3QgY2FzZSAjMwotCSAqIC0gcnVucyB0aGUgV1NETENvcGllciB3aXRob3V0IHNwZWNpZnlpbmcgYSBzb3VyY2UgVVJJIChvcGVyYXRpb24gc2hvdWxkIGZhaWwpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENhc2UzKCkgewotCQl0cnkgewkJCQotCQkJSUZvbGRlciBmb2xkZXIgPSBjcmVhdGVGb2xkZXIoV1NETF9GT0xERVIzKTsKLQkJCQotCQkJU3RyaW5nIGZvbGRlclVSSSA9IGZvbGRlci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCk7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyBmcm9tOiBOL0EiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyB0bzogICAiICsgZm9sZGVyVVJJKTsKLQkJCQotCQkJV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcigpOwotCQkJY29waWVyLnNldFRhcmdldEZvbGRlclVSSShmb2xkZXJVUkkpOwkJCQotCQkJCi0JCQl0cnkgewotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBudWxsKTsKLQkJCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBoZXJlIiwgZmFsc2UpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY2UpOwotCQkJfQotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3MhIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7Ci0JCX0KLQl9CQotCi0JLyoqCi0JICogVGVzdCBjYXNlICM0Ci0JICogLSBydW5zIHRoZSBXU0RMQ29waWVyIHdpdGhvdXQgY3JlYXRpbmcgYSB0YXJnZXQgZm9sZGVyCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENhc2U0KCkgewotCQl0cnkgewotCQkJSVJlc291cmNlIHJlc291cmNlID0gcHJvamVjdC5nZXRGb2xkZXIoV1NETF9GT0xERVIxKS5maW5kTWVtYmVyKCIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCUlGb2xkZXIgZm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoV1NETF9GT0xERVI0KTsKLQkJCQkJCQotCQkJU3RyaW5nIHBhdGggPSByZXNvdXJjZS5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZm9sZGVyVVJJID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyBmb2xkZXIuZ2V0RnVsbFBhdGgoKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIGZyb206ICIgKyBwYXRoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyB0bzogICAiICsgZm9sZGVyVVJJKTsKLQkJCWFzc2VydFRydWUoIWZvbGRlci5leGlzdHMoKSk7Ci0JCQkKLQkJCVdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIoKTsKLQkJCWNvcGllci5zZXRTb3VyY2VVUkkocGF0aCk7Ci0JCQljb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlclVSSSk7Ci0JCQkKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBudWxsKTsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkKLQkJCWFzc2VydFRydWUoZm9sZGVyLmV4aXN0cygpKTsKLQkJCXZhbGlkYXRlKGZvbGRlciwgInN0YXJ0LndzZGwiKTsKLQkJCWFzc2VydEVxdWFscyhjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkudG9TdHJpbmcoKSwgIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3MhIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7CQkJCi0JCX0KLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBjYXNlICM1Ci0JICogLSBydW5zIHRoZSBXU0RMQ29waWVyIHdpdGhvdXQgc3BlY2lmeWluZyBhIHRhcmdldCBmb2xkZXIgKG9wZXJhdGlvbiBzaG91bGQgZmFpbCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTUoKSB7Ci0JCXRyeSB7Ci0JCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBwcm9qZWN0LmdldEZvbGRlcihXU0RMX0ZPTERFUjEpLmZpbmRNZW1iZXIoIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJCi0JCQlTdHJpbmcgcGF0aCA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiICsgcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKTsgCQkJCQkJCQkJCQkJCQkJCi0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyBmcm9tOiAiICsgcGF0aCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgdG86ICAgTi9BIik7Ci0JCQkKLQkJCVdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIoKTsKLQkJCWNvcGllci5zZXRTb3VyY2VVUkkocGF0aCk7CQkJCi0JCQkKLQkJCXRyeSB7Ci0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG51bGwpOwotCQkJCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGhlcmUiLCBmYWxzZSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjZSk7Ci0JCQl9Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCksIGZhbHNlKTsJCQkKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGNhc2UgIzYKLQkgKiAtIGNvcGllcyB3c2RsIGZyb20gb25lIGZvbGRlciBvbnRvIGl0c2VsZiB1c2luZyBwbGF0Zm9ybTovcmVzb3VyY2UgVVJJCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENhc2U2KCkgewotCQl0cnkgewotCQkJSUZvbGRlciBmb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcihXU0RMX0ZPTERFUjEpOwotCQkJSVJlc291cmNlIHJlc291cmNlID0gZm9sZGVyLmZpbmRNZW1iZXIoIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJCi0JCQlTdHJpbmcgcGF0aCA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiICsgcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKTsgCQkJCQkJCi0JCQlTdHJpbmcgZm9sZGVyVVJJID0gZm9sZGVyLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKTsKLQkJCQkJCQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIGZyb206ICIgKyBwYXRoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyB0bzogICAiICsgZm9sZGVyVVJJKTsKLQkJCQotCQkJV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcigpOwotCQkJY29waWVyLnNldFNvdXJjZVVSSShwYXRoKTsJCQkKLQkJCWNvcGllci5zZXRUYXJnZXRGb2xkZXJVUkkoZm9sZGVyVVJJKTsJCQkKLQotCQkJbG9uZ1tdIG9sZFRpbWVzdGFtcHMgPSB2YWxpZGF0ZVRpbWVzdGFtcHMoZm9sZGVyLCBudWxsKTsKLQkJCQotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG51bGwpOwotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQotCQkJdmFsaWRhdGUoZm9sZGVyLCAic3RhcnQud3NkbCIpOwotCQkJdmFsaWRhdGVUaW1lc3RhbXBzKGZvbGRlciwgb2xkVGltZXN0YW1wcyk7Ci0JCQlhc3NlcnRFcXVhbHMoY29waWVyLmdldFJlbGF0aXZlUGF0aCgpLnRvU3RyaW5nKCksICIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzISIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCksIGZhbHNlKTsKLQkJfQotCX0KLX0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTSlVuaXRDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNlNWZmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTSlVuaXRDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgV1NKVW5pdENvbnN0YW50cyB7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUlVOVElNRVRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTAiOwotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgV1NfUlVOVElNRUlEX0FYSVMgPSAib3JnLmVjbGlwc2UuanN0LndzLnJ1bnRpbWUuYXhpczExIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVkVSVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJQcm9qZWN0TmFtZSA9ICJXUCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViUHJvamVjdDJOYW1lID0gIldQMiI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcG9uZW50TmFtZSA9ICJ3ZWJDb21wb25lbnQiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXBvbmVudDJOYW1lID0gIndlYkNvbXAyIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wM05hbWUgPSAid2ViQ29tcDMiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXA0TmFtZSA9ICJ3ZWJDb21wNCI7Ci0gIAotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBlamJQcm9qZWN0TmFtZSA9ICJFSkJQcm9qZWN0IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBlamJDb21wb25lbnROYW1lID0gImVqYkNvbXBvbmVudCI7Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBhcHBDbGllbnRQcm9qZWN0TmFtZSA9ICJBcHBDbGllbnRQcm9qZWN0IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBhcHBDbGllbnRDb21wTmFtZSA9ICJhcHBDbGllbnRDb21wb25lbnQiOyAgCi0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGVhckNvbXBOYW1lID0gIkVBUkNvbXBvbmVudCI7Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XZWJTZXJ2aWNlRmluZGVyVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV2ViU2VydmljZUZpbmRlclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMWYxOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XZWJTZXJ2aWNlRmluZGVyVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLldlYlNlcnZpY2VGaW5kZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLS8qKgotICogQGF1dGhvciBqb2FuCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlRmluZGVyVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHMgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFdlYlNlcnZpY2VGaW5kZXJUZXN0cy5jbGFzcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXU0ZpbmRlcigpewotCQlTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0aW5nIHdlYiBzZXJ2aWNlIGZpbmRlciIpOwotCQlXZWJTZXJ2aWNlRmluZGVyIHdzZiA9IFdlYlNlcnZpY2VGaW5kZXIuaW5zdGFuY2UoKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiYXR0ZW1wdGluZyB0byBsb2NhdGUgYWxsIHdlYiBzZXJ2aWNlcyBpbiB3b3Jrc3BhY2UiKTsKLQkJSXRlcmF0b3Igd3NJdGVyYXRvciA9IHdzZi5nZXRXZWJTZXJ2aWNlcyhudWxsKTsKLQkJd2hpbGUgKHdzSXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQlXZWJTZXJ2aWNlSW5mbyB3c0luZm8gPSAoV2ViU2VydmljZUluZm8pIHdzSXRlcmF0b3IubmV4dCgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJ3ZWJTZXJ2aWNlIFVSTDogIiArIHdzSW5mby5nZXRXc2RsVVJMKCkpOwotCQl9Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oImZpbmlzaGVkIGZpbmRpbmcgYWxsIHdlYnNlcnZpY2VzIik7Ci0JCSAKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvQnVpbGRDbGFzc3BhdGguamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvQnVpbGRDbGFzc3BhdGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q5NjIzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0J1aWxkQ2xhc3NwYXRoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBsYXRmb3JtUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5NYW5pZmVzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQ29uc3RhbnRzOwotCi0vKioKLSAqIFRoaXMgcHJvZ3JhbSB3aWxsIGdlbmVyYXRlIGEgY2xhc3NwYXRoIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHdzZXhwbG9yZXIud2FyIGZpbGUuCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIEJ1aWxkQ2xhc3NwYXRoIGltcGxlbWVudHMgSVBsYXRmb3JtUnVubmFibGUKLXsKLSAgICBwdWJsaWMgT2JqZWN0IHJ1bihPYmplY3QgYXJncykgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgICB7ICAgICAgICAKLSAgICAgIFJlc291cmNlQnVuZGxlIHBsdWdpblJlcXVpcmVzID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnByb3BlcnR5LnRvb2xzLkV4cGxvcmVyUmVxdWlyZXMiICk7Ci0gICAgICBFbnVtZXJhdGlvbiAgICByZXF1aXJlS2V5cyAgID0gcGx1Z2luUmVxdWlyZXMuZ2V0S2V5cygpOwotICAgICAgCi0gICAgICB3aGlsZSggcmVxdWlyZUtleXMuaGFzTW9yZUVsZW1lbnRzKCkgKQotICAgICAgewotICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZylyZXF1aXJlS2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICBidWlsZENsYXNzcGF0aCggcGx1Z2luUmVxdWlyZXMuZ2V0U3RyaW5nKGtleSkgKTsKLSAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgcmV0dXJuIElQbGF0Zm9ybVJ1bm5hYmxlLkVYSVRfT0s7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBidWlsZENsYXNzcGF0aCggU3RyaW5nIHBsdWdpbklkICkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgIEJ1bmRsZSBidW5kbGUgICAgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIHBsdWdpbklkICk7Ci0gICAgICBTdHJpbmcgY2xhc3NwYXRoID0gKFN0cmluZylidW5kbGUuZ2V0SGVhZGVycygpLmdldCggQ29uc3RhbnRzLkJVTkRMRV9DTEFTU1BBVEggKTsKLSAgICAgIFN0cmluZyBsb2NhdGlvbiAgPSBidW5kbGUuZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgICAgICAgCi0gICAgICAvLyBBZGQgY2xhc3NwYXRoIHRvIGxpc3QKLSAgICAgIE1hbmlmZXN0RWxlbWVudFtdIGNsYXNzcGF0aHMgPSBNYW5pZmVzdEVsZW1lbnQucGFyc2VIZWFkZXIoQ29uc3RhbnRzLkJVTkRMRV9DTEFTU1BBVEgsIGNsYXNzcGF0aCk7Ci0gICAgICAKLSAgICAgIGlmKCBjbGFzc3BhdGhzICE9IG51bGwgKQotICAgICAgewotICAgICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY2xhc3NwYXRocy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG5ld1BhdGggPSBudWxsOwotICAgICAgICAgIAotICAgICAgICAgIC8vIFdlIGhhdmUgYSBzcGVjaWFsIGNhc2UgZm9yIHRoZSBTV1QgcGx1Z2luIHNpbmNlIGl0Ci0gICAgICAgICAgaWYoIGxvY2F0aW9uLmluZGV4T2YoICJvcmcuZWNsaXBzZS5zd3QiICkgIT0gLTEgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQnVuZGxlW10gYnVuZGxlcyAgICAgPSBQbGF0Zm9ybS5nZXRGcmFnbWVudHMoIGJ1bmRsZSApOyAgCi0gICAgICAgICAgICAgIFN0cmluZyAgIG5ld0xvY2F0aW9uID0gYnVuZGxlc1swXS5nZXRMb2NhdGlvbigpLnN1YnN0cmluZyg4KTsKLSAgICAgICAgICAgICAgU3RyaW5nICAgcGF0aCAgICAgICAgPSBjbGFzc3BhdGhzW2luZGV4XS5nZXRWYWx1ZSgpLnJlcGxhY2VGaXJzdCggIlxcJHdzXFwkIiwgIndzL3dpbjMyIik7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBuZXdQYXRoID0gbmV3TG9jYXRpb24gKyBwYXRoOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmKCBsb2NhdGlvbi5zdGFydHNXaXRoKCAidXBkYXRlIiApICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5ld1BhdGggPSBsb2NhdGlvbi5zdWJzdHJpbmcoOCkgKyBjbGFzc3BhdGhzW2luZGV4XS5nZXRWYWx1ZSgpOyAgICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiggbG9jYXRpb24uc3RhcnRzV2l0aCggImluaXRpYWwiICkpCi0gICAgICAgICAgewotICAgICAgICAgICAgICBuZXdQYXRoID0gbG9jYXRpb24uc3Vic3RyaW5nKDIzKSArIGNsYXNzcGF0aHNbaW5kZXhdLmdldFZhbHVlKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYoIGxvY2F0aW9uLnN0YXJ0c1dpdGgoICJTeXN0ZW0iICkpCi0gICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbGxMb2NhdGlvbigpLmdldFVSTCgpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDYpOwotICAgICAgICAgICAgICBuZXdQYXRoID0gcGxhdGZvcm1Mb2NhdGlvbiArICJwbHVnaW5zL29yZy5lY2xpcHNlLm9zZ2lfMy4wLjEvIiArIGNsYXNzcGF0aHNbaW5kZXhdLmdldFZhbHVlKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIG5ld1BhdGggKyAnOycpOyAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvQ29weVByb3BlcnR5RmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvQ29weVByb3BlcnR5RmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBlZTUwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0NvcHlQcm9wZXJ0eUZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgQ29weVByb3BlcnR5RmlsZXMgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAgIEZpbGUgICAgICAgIHN0YXJ0UGF0aCAgICAgPSBuZXcgRmlsZSggYXJnc1swXSApOwotICAgIFN0cmluZ1tdICAgIHBsdWdpbkZpbGVzICAgPSBVdGlscy5yZWFkTGluZXMoIGFyZ3NbMV0gKTsKLSAgICBTdHJpbmcgICAgICBuZXdQYXRoICAgICAgID0gYXJnc1syXTsKLSAgICBTdHJpbmcgICAgICBwYXRoUmVsYXRpdmVUbz0gYXJnc1szXTsKLSAgICBWZWN0b3IgICAgICBwcm9wZXJ0eUZpbGVzID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwbHVnaW5GaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwbHVnaW5EaXIgICAgID0gVXRpbHMuZ2V0RmlsZSggc3RhcnRQYXRoLCBwbHVnaW5GaWxlc1tpbmRleF0gKTsKLSAgICAgIAotICAgICAgaWYoIHBsdWdpbkRpciAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgVXRpbHMuZ2V0RmlsZXMoIHBsdWdpbkRpciwgcHJvcGVydHlGaWxlcywgInByb3BlcnRpZXMiLCBuZXcgU3RyaW5nW117ICJiaW4iLCAiYnVpbGQucHJvcGVydGllcyIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBmaWxlCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHByb3BlcnR5RmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcHJvcEZpbGUgICAgPSAoRmlsZSlwcm9wZXJ0eUZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBTdHJpbmcgcHJvcE5hbWUgICAgPSBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgIGludCAgICBwbHVnaW5JbmRleCA9IHByb3BOYW1lLmluZGV4T2YoIHBhdGhSZWxhdGl2ZVRvICk7Ci0gICAgICBpbnQgICAgZmlyc3RTbGFzaCAgPSBwcm9wTmFtZS5pbmRleE9mKCAiXFwiLCBwbHVnaW5JbmRleCApOwotICAgICAgaW50ICAgIG5leHRTbGFzaCAgID0gcHJvcE5hbWUuaW5kZXhPZiggIlxcIiwgZmlyc3RTbGFzaCsxICk7Ci0gICAgICBTdHJpbmcgcGx1Z2luTmFtZSAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIGZpcnN0U2xhc2ggKyAxLCBuZXh0U2xhc2ggKTsKLSAgICAgIGludCAgICB1bmRlckluZGV4ICA9IHBsdWdpbk5hbWUuaW5kZXhPZiggJ18nICk7Ci0gICAgICAKLSAgICAgIGlmKCB1bmRlckluZGV4ICE9IC0xICkKLSAgICAgIHsKLSAgICAgICAgcGx1Z2luTmFtZSA9IHBsdWdpbk5hbWUuc3Vic3RyaW5nKCAwLCB1bmRlckluZGV4ICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFN0cmluZyBuZXdOYW1lID0gbmV3UGF0aCArIEZpbGUuc2VwYXJhdG9yICsgInBsdWdpbnMiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlLnNlcGFyYXRvciArIHBsdWdpbk5hbWUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZS5zZXBhcmF0b3IgKyBwcm9wTmFtZS5zdWJzdHJpbmcoIG5leHRTbGFzaCsxLCBwcm9wTmFtZS5sZW5ndGgoKSApOwotICAgICAgCi0gICAgICBGaWxlICAgICAgICBuZXdGaWxlID0gbmV3IEZpbGUoIG5ld05hbWUgKTsKLSAgICAgIEZpbGUgICAgICAgIHBhcmVudCAgPSBuZXcgRmlsZSggbmV3RmlsZS5nZXRQYXJlbnQoKSApOwotICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyICA9IG51bGw7Ci0gICAgICAKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBwYXJlbnQubWtkaXJzKCk7Ci0gICAgICAgIAotICAgICAgICB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBuZXdGaWxlICkpOwotICAgICAgICBTdHJpbmdbXSBsaW5lcyA9IFV0aWxzLnJlYWRMaW5lcyggcHJvcEZpbGUgKTsKLSAgICAgICAgCi0gICAgICAgIGZvciggaW50IGxpbmVJbmRleCA9IDA7IGxpbmVJbmRleCA8IGxpbmVzLmxlbmd0aDsgbGluZUluZGV4KysgKQotICAgICAgICB7Ci0gICAgICAgICAgd3JpdGVyLnByaW50bG4oIGxpbmVzW2xpbmVJbmRleF0gKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaWYoIHdyaXRlciAhPSBudWxsICkgd3JpdGVyLmNsb3NlKCk7IAotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kQ29udGV4dElkcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kQ29udGV4dElkcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmI2MzAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZENvbnRleHRJZHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZmluZCBDb250ZXh0IElEcyBpbiBzb3VyY2UgZmlsZXMuCi0gKiBhcmdzWzBdID0gVGhlIHJvb3QgZGlyZWN0b3J5IHdoZXJlIHBsdWdpbnMgc291cmNlIGRpcmVjdG9yaWVzIHdpbGwgYmUgc2VhcmNoZWQuCi0gKiBhcmdzWzFdID0gQSBmaWxlIGNvbnRhaW5pbmcgcGx1Z2luIHNvdXJjZSBkaXJlY3Rvcmllcy4gIEVhY2ggbGluZSBzaG91bGQgY29udGFpbgotICogICAgICAgICAgIGEgcGF0aCB0byBhIHNvdXJjZSBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhlIGFyZ3NbMF0gcGFyYW1ldGVyLgotICogYXJnc1syXSA9IFRoZSBvdXRwdXQgZmlsZSBuYW1lLgotICovCi1wdWJsaWMgY2xhc3MgRmluZENvbnRleHRJZHMgCi17Ci0gIHB1YmxpYyB2b2lkIGZpbmRJZHMoIFN0cmluZyByb290RGlyZWN0b3J5LCBTdHJpbmcgc291cmNlRGlyZWN0b3J5TmFtZSwgU3RyaW5nIG91dHB1dEZpbGVOYW1lICkKLSAgewotCUZpbGUgICAgICAgIHNvdXJjZURpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZSggc291cmNlRGlyZWN0b3J5TmFtZSApOwotCVN0cmluZ1tdICAgIHNyY0RpckxpbmVzICAgICAgICAgPSBVdGlscy5yZWFkTGluZXMoIHNvdXJjZURpcmVjdG9yeUZpbGUgKTsKLQlQcmludFdyaXRlciBvdXRwdXRGaWxlICAgICAgICAgID0gbnVsbDsKLQkJCi0JdHJ5Ci0JewotCSAgb3V0cHV0RmlsZSA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIG91dHB1dEZpbGVOYW1lICkgKTsKLQkKLQkgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBzcmNEaXJMaW5lcy5sZW5ndGg7IGluZGV4KysgKQotCSAgewotCQlTdHJpbmcgc291cmNlRGlyTmFtZSAgID0gc3JjRGlyTGluZXNbaW5kZXhdOwotCSAgICBGaWxlICAgc291cmNlRGlyZWN0b3J5ID0gbmV3IEZpbGUoIHJvb3REaXJlY3RvcnksIHNvdXJjZURpck5hbWUgKTsKLQkgIAotCSAgICBvdXRwdXRGaWxlLnByaW50bG4oICI9PT09PT0+Q29udGV4dCBJRHMgZm9yIHBsdWdpbiBkaXJlY3Rvcnk6ICIgKyBzb3VyY2VEaXJOYW1lICk7Ci0JICAgIAotCSAgICBmaW5kSWRzRm9yYURpcmVjdG9yeSggc291cmNlRGlyZWN0b3J5LCBvdXRwdXRGaWxlICk7Ci0JICB9Ci0JfQotCWNhdGNoKCBFeGNlcHRpb24gZXhjICkKLQl7Ci0JICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCWZpbmFsbHkKLQl7Ci0JICBpZiggb3V0cHV0RmlsZSAhPSBudWxsICkKLQkgIHsKLQkgICAgb3V0cHV0RmlsZS5jbG9zZSgpOwotCSAgfQotCX0KLSAgfQotICAKLSAgc3RhdGljIHB1YmxpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKQotICB7Ci0gICAgRmluZENvbnRleHRJZHMgZmluZElkcyA9IG5ldyBGaW5kQ29udGV4dElkcygpOwotICAgIAotICAgIGlmKCBhcmdzLmxlbmd0aCAhPSAzICkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJFcnJvcjogZXhwZWN0aW5nIGEgcm9vdCBkaXJlY3RvcnksIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGZpbGUgbmFtZSwgYW5kIGFuIG91dHB1dCBmaWxlIGFzIHBhcmFtZXRlcnMuIiApOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBmaW5kSWRzLmZpbmRJZHMoIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0gKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGZpbmRJZHNGb3JhRGlyZWN0b3J5KCBGaWxlIHNvdXJjZURpcmVjdG9yeSwgUHJpbnRXcml0ZXIgb3V0cHV0RmlsZSApCi0gIHsKLQlWZWN0b3IgIGZpbGVzID0gbmV3IFZlY3RvcigpOwotCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkKLSAgICBVdGlscy5nZXRGaWxlcyggc291cmNlRGlyZWN0b3J5LCBmaWxlcywgImphdmEiLCBuZXcgU3RyaW5nWzBdICk7Ci0gICAgCi0gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggZmlsZS4KLSAgICBmb3IoIGludCBmaWxlSW5kZXggPSAwOyBmaWxlSW5kZXggPCBmaWxlcy5zaXplKCk7IGZpbGVJbmRleCsrICkKLSAgICB7Ci0gICAgICBTdHJpbmdbXSBsaW5lcyA9IFV0aWxzLnJlYWRMaW5lcyggKEZpbGUpZmlsZXMuZWxlbWVudEF0KGZpbGVJbmRleCkgKTsJCi0gICAgICAKLSAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIGxpbmUgaW4gdGhlIGZpbGUuCi0gICAgICBmb3IoIGludCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCBsaW5lcy5sZW5ndGg7IGxpbmVJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGxpbmUgPSBsaW5lc1tsaW5lSW5kZXhdOwotICAgICAgICAKLSAgICAgICAgaWYoIGxpbmUuaW5kZXhPZigiQ09OVEVYVF9JRCIpICE9IC0xICkKLSAgICAgICAgewotICAgICAgICAgIG91dHB1dEZpbGUucHJpbnRsbiggbGluZSApOwotICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZm91bmQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZER1cGxpY2F0ZUtleXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZER1cGxpY2F0ZUtleXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAyZmZkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmREdXBsaWNhdGVLZXlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIEZpbmREdXBsaWNhdGVLZXlzIAotewotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gIHsKLSAgICBGaWxlICAgICAgICBzdGFydFBhdGggICAgID0gbmV3IEZpbGUoIGFyZ3NbMF0gKTsKLSAgICBTdHJpbmdbXSAgICBwbHVnaW5GaWxlcyAgID0gVXRpbHMucmVhZExpbmVzKCBhcmdzWzFdICk7Ci0gICAgVmVjdG9yICAgICAgcHJvcGVydHlGaWxlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBIYXNodGFibGUgICBrZXlzICAgICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIFByaW50V3JpdGVyIHdyaXRlciAgICAgICAgPSBudWxsOwotICAgIEhhc2h0YWJsZSAgIHNyY0tleXMgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgVmVjdG9yICAgICAgc3JjRmlsZXMgICAgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBWZWN0b3IgICAgICBwcm9wTmFtZXMgICAgID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciAgICAgIHBsdWdpbk5hbWVzICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgU3RyaW5nW10gICAgcGx1Z2luQXJyYXkgICA9IG51bGw7Ci0gICAgSGFzaHRhYmxlICAgc3JjUGx1Z2luTWFwICA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBhcmdzWzJdICkpOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcGx1Z2luRmlsZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcGx1Z2luRGlyICAgICA9IFV0aWxzLmdldEZpbGUoIHN0YXJ0UGF0aCwgcGx1Z2luRmlsZXNbaW5kZXhdICk7Ci0gICAgICAKLSAgICAgIFV0aWxzLmdldEZpbGVzKCBwbHVnaW5EaXIsIHByb3BlcnR5RmlsZXMsICJwcm9wZXJ0aWVzIiwgbmV3IFN0cmluZ1tdeyAiYmluIiwgImJ1aWxkLnByb3BlcnRpZXMiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3NleHBsb3Jlci5wcm9wZXJ0aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidWRkaS5wcm9wZXJ0aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3NkbC5wcm9wZXJ0aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3NpbC5wcm9wZXJ0aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmF2b3JpdGVzLnByb3BlcnRpZXMiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAgIFV0aWxzLmdldEZpbGVzKCBwbHVnaW5EaXIsIHNyY0ZpbGVzLCAiamF2YSIsIG5ldyBTdHJpbmdbMF0gKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggcHJvcGVydHkgZmlsZQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwcm9wZXJ0eUZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHByb3BGaWxlID0gKEZpbGUpcHJvcGVydHlGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgRmlsZSAgIHBhcmVudCAgID0gbmV3IEZpbGUoIHByb3BGaWxlLmdldFBhcmVudCgpICk7Ci0gICAgICAKLSAgICAgIC8vIFNraXAgcHJvcGVydGllcyBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgcGx1Z2luIGRpcmVjdG9yeS4KLSAgICAgIGlmKCBVdGlscy5zdHJpbmdJbkFycmF5KCBwYXJlbnQuZ2V0TmFtZSgpLCBwbHVnaW5GaWxlcyApICkKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFN0cmluZyBwcm9wTmFtZSA9IHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgaW50ICAgIHNyY1N0YXJ0ID0gcHJvcE5hbWUuaW5kZXhPZiggInNyYyIgKTsKLSAgICAgIAotICAgICAgaWYoIHNyY1N0YXJ0ICE9IC0xICkKLSAgICAgIHsKLSAgICAgICAgaW50IGxhc3RTbGFzaCA9IHByb3BOYW1lLmxhc3RJbmRleE9mKCAnXFwnICk7Ci0gICAgICAgIGludCBsYXN0RG90ICAgPSBwcm9wTmFtZS5sYXN0SW5kZXhPZiggJy4nICk7Ci0gICAgICAgIFN0cmluZyBuYW1lICAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIHNyY1N0YXJ0ICsgNCwgbGFzdFNsYXNoICk7Ci0gICAgICAgIFN0cmluZyBuYW1lMiAgPSBwcm9wTmFtZS5zdWJzdHJpbmcoIHNyY1N0YXJ0ICsgNCwgbGFzdERvdCApOwotICAgICAgICBuYW1lICA9IG5hbWUucmVwbGFjZSggJ1xcJywgJy4nICk7IAotICAgICAgICBuYW1lMiA9IG5hbWUyLnJlcGxhY2UoICdcXCcsICcuJyApOwotICAgICAgICAKLSAgICAgICAgcGx1Z2luTmFtZXMuYWRkKCBuYW1lICk7Ci0gICAgICAgIHBsdWdpbk5hbWVzLmFkZCggbmFtZTIgKTsKLSAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIHByb3BOYW1lICsgIj4+IiArIG5hbWUgKyAiPj4iICsgbmFtZTIgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcGx1Z2luQXJyYXkgPSAoU3RyaW5nW10pcGx1Z2luTmFtZXMudG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICAgIAotICAgIC8vIEZpbmQgYWxsIHRoZSBqYXZhIHN0cmluZ3MuCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNyY0ZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgICAgc3JjRmlsZSAgICAgPSAoRmlsZSlzcmNGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgVmVjdG9yICAgZmlsZVNyY0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBsaW5lcyAgICAgICA9IFV0aWxzLnJlYWRMaW5lcyhzcmNGaWxlICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IHNyY0luZGV4ID0gMDsgc3JjSW5kZXggPCBsaW5lcy5sZW5ndGg7IHNyY0luZGV4KysgKQotICAgICAgewotICAgICAgICBVdGlscy5maW5kSmF2YVN0cmluZ3MoIGxpbmVzW3NyY0luZGV4XSwgZmlsZVNyY0tleXMgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgZm9yKCBpbnQga2V5c0luZGV4ID0gMDsga2V5c0luZGV4IDwgZmlsZVNyY0tleXMuc2l6ZSgpOyBrZXlzSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyAga2V5ICAgICA9IChTdHJpbmcpZmlsZVNyY0tleXMuZWxlbWVudEF0KCBrZXlzSW5kZXggKTsKLSAgICAgICAgSGFzaFNldCBmaWxlU2V0ID0gKEhhc2hTZXQpc3JjS2V5cy5nZXQoIGtleSApOwotICAgICAgICAKLSAgICAgICAgaWYoIGZpbGVTZXQgPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBmaWxlU2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgICBzcmNLZXlzLnB1dCgga2V5LCBmaWxlU2V0ICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBVdGlscy5zdHJpbmdJbkFycmF5KCBrZXksIHBsdWdpbkFycmF5ICkgKQotICAgICAgICB7Ci0gICAgICAgICAgSGFzaFNldCBuYW1lcyA9IChIYXNoU2V0KXNyY1BsdWdpbk1hcC5nZXQoIHNyY0ZpbGUgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggbmFtZXMgPT0gbnVsbCApCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgICAgc3JjUGx1Z2luTWFwLnB1dCggc3JjRmlsZSwgbmFtZXMgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgbmFtZXMuYWRkKCBrZXkgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZmlsZVNldC5hZGQoIHNyY0ZpbGUgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpbnQgY291bnQgPSAxOwotICAgIAotICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGZpbGUKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcHJvcGVydHlGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwcm9wRmlsZSA9IChGaWxlKXByb3BlcnR5RmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFZlY3RvciBwcm9wS2V5cyA9IFV0aWxzLmdldFByb3BlcnR5S2V5cyggcHJvcEZpbGUgKTsgIAotICAgICAgRmlsZSAgIHBhcmVudCAgID0gbmV3IEZpbGUoIHByb3BGaWxlLmdldFBhcmVudCgpICk7Ci0gICAgICAKLSAgICAgIC8vIFNraXAgcHJvcGVydGllcyBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgcGx1Z2luIGRpcmVjdG9yeS4KLSAgICAgIGlmKCBVdGlscy5zdHJpbmdJbkFycmF5KCBwYXJlbnQuZ2V0TmFtZSgpLCBwbHVnaW5GaWxlcyApICkKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgcHJvcEluZGV4ID0gMDsgcHJvcEluZGV4IDwgcHJvcEtleXMuc2l6ZSgpOyBwcm9wSW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwcm9wS2V5ID0gKFN0cmluZylwcm9wS2V5cy5lbGVtZW50QXQoIHByb3BJbmRleCApOwotICAgICAgICAKLSAgICAgICAgaWYoIGtleXMuY29udGFpbnNLZXkocHJvcEtleSkgJiYgIXByb3BLZXkuc3RhcnRzV2l0aCggIlBMVUdJTiIgKSkKLSAgICAgICAgewotICAgICAgICAgIEZpbGUgb3JpZ0ZpbGUgPSAoRmlsZSlrZXlzLmdldCggcHJvcEtleSApOwotICAgICAgICAgIAotICAgICAgICAgIFN0cmluZyBvcmlnTmFtZSA9IG9yaWdGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgICAgIFN0cmluZyBwcm9wTmFtZSA9IHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgICAgIAotICAgICAgICAgIG9yaWdOYW1lID0gb3JpZ05hbWUuc3Vic3RyaW5nKCBhcmdzWzBdLmxlbmd0aCgpLCBvcmlnTmFtZS5sZW5ndGgoKSApOwotICAgICAgICAgIHByb3BOYW1lID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBhcmdzWzBdLmxlbmd0aCgpLCBwcm9wTmFtZS5sZW5ndGgoKSApOwotICAgICAgICAgIAotICAgICAgICAgIEhhc2hTZXQgZmlsZVNldCA9IChIYXNoU2V0KXNyY0tleXMuZ2V0KCBwcm9wS2V5ICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIGZpbGVTZXQgIT0gbnVsbCApCi0gICAgICAgICAgewotICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIGNvdW50ICsgIiBQcm9wZXJ0eTogIiArIHByb3BLZXkgKyAiIGlzIGluIGJvdGggIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdOYW1lICsgIiBhbmQgIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSXRlcmF0b3IgaXRlciA9IGZpbGVTZXQuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgd2hpbGUoIGl0ZXIuaGFzTmV4dCgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRmlsZSBmaWxlID0gKEZpbGUpaXRlci5uZXh0KCk7Ci0gICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCAiICA+IiArIGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKTsKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIEhhc2hTZXQgIG5hbWVzID0gKEhhc2hTZXQpc3JjUGx1Z2luTWFwLmdldCggZmlsZSApOwotICAgICAgICAgICAgICBJdGVyYXRvciBuYW1lSXRlciA9IG5hbWVzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICB3aGlsZSggbmFtZUl0ZXIuaGFzTmV4dCgpICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCAiICAgID4iICsgbmFtZUl0ZXIubmV4dCgpICk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAga2V5cy5wdXQoIHByb3BLZXksIHByb3BGaWxlICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYoIHdyaXRlciAhPSBudWxsICkgd3JpdGVyLmNsb3NlKCk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9ICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZFBlcmNlbnRTdHJpbmcuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZFBlcmNlbnRTdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNkZWY5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0ZpbmRQZXJjZW50U3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgRmluZFBlcmNlbnRTdHJpbmcgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAgIEZpbGUgICAgICAgIHN0YXJ0UGF0aCAgICAgPSBuZXcgRmlsZSggYXJnc1swXSApOwotICAgIFN0cmluZ1tdICAgIHBsdWdpbkZpbGVzICAgPSBVdGlscy5yZWFkTGluZXMoIGFyZ3NbMV0gKTsKLSAgICBQcmludFdyaXRlciB3cml0ZXIgICAgICAgID0gbnVsbDsKLSAgICBWZWN0b3IgICAgICBzcmNGaWxlcyAgICAgID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHdyaXRlciA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIGFyZ3NbMl0gKSk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwbHVnaW5GaWxlcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwbHVnaW5EaXIgICAgID0gVXRpbHMuZ2V0RmlsZSggc3RhcnRQYXRoLCBwbHVnaW5GaWxlc1tpbmRleF0gKTsKLSAgICAgIAotICAgICAgaWYoIHBsdWdpbkRpciAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgVXRpbHMuZ2V0RmlsZXMoIHBsdWdpbkRpciwgc3JjRmlsZXMsICJqYXZhIiwgbmV3IFN0cmluZ1swXSApOwotICAgICAgfQotICAgIH0KLSAgICAgICAgICAKLSAgICAvLyBGaW5kIGFsbCB0aGUgamF2YSBzdHJpbmdzLgotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBzcmNGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICAgIHNyY0ZpbGUgICAgID0gKEZpbGUpc3JjRmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFZlY3RvciAgIGZpbGVTcmNLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gbGluZXMgICAgICAgPSBVdGlscy5yZWFkTGluZXMoc3JjRmlsZSApOwotICAgICAgCi0gICAgICBmb3IoIGludCBzcmNJbmRleCA9IDA7IHNyY0luZGV4IDwgbGluZXMubGVuZ3RoOyBzcmNJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgVXRpbHMuZmluZEphdmFTdHJpbmdzKCBsaW5lc1tzcmNJbmRleF0sIGZpbGVTcmNLZXlzICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGZvciggaW50IGtleXNJbmRleCA9IDA7IGtleXNJbmRleCA8IGZpbGVTcmNLZXlzLnNpemUoKTsga2V5c0luZGV4KysgKQotICAgICAgewotICAgICAgICBTdHJpbmcgIGtleSA9IChTdHJpbmcpZmlsZVNyY0tleXMuZWxlbWVudEF0KCBrZXlzSW5kZXggKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBrZXkuc3RhcnRzV2l0aCgiJSIgKSApCi0gICAgICAgIHsKLSAgICAgICAgICB3cml0ZXIucHJpbnRsbigga2V5ICsgIiA+PiAiICsgc3JjRmlsZS5nZXROYW1lKCkgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiggd3JpdGVyICE9IG51bGwgKSB3cml0ZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kUHJvcGVydHlNb3ZlbWVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9GaW5kUHJvcGVydHlNb3ZlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTY2MzY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvRmluZFByb3BlcnR5TW92ZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0eVJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIEZpbmRQcm9wZXJ0eU1vdmVtZW50IAotewotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gIHsKLSAgICBGaWxlIG9sZFBhdGggICAgPSBuZXcgRmlsZSggYXJnc1swXSApOwotICAgIEZpbGUgbmV3UGF0aCAgICA9IG5ldyBGaWxlKCBhcmdzWzFdICk7Ci0gICAgRmlsZSBvdXRwdXRGaWxlID0gbmV3IEZpbGUoIGFyZ3NbMl0gKTsKLSAgIAotICAgIFZlY3RvciAgICBvbGRQcm9wZXJ0eUZpbGVzID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciAgICBuZXdQcm9wZXJ0eUZpbGVzID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIEhhc2h0YWJsZSBvbGRLZXlNYXAgICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIEhhc2h0YWJsZSBuZXdLZXlNYXAgICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAotICAgIFV0aWxzLmdldEZpbGVzKCBvbGRQYXRoLCBvbGRQcm9wZXJ0eUZpbGVzLCAicHJvcGVydGllcyIsIG5ldyBTdHJpbmdbMF0gKTsKLSAgICBVdGlscy5nZXRGaWxlcyggbmV3UGF0aCwgbmV3UHJvcGVydHlGaWxlcywgInByb3BlcnRpZXMiLCBuZXcgU3RyaW5nWzBdICk7Ci0KLSAgICBidWlsZE1hcCggb2xkUHJvcGVydHlGaWxlcywgb2xkS2V5TWFwICk7Ci0gICAgYnVpbGRNYXAoIG5ld1Byb3BlcnR5RmlsZXMsIG5ld0tleU1hcCApOwotICAgIAotICAgIFNldCAgICAgICAgIG5ld0tleVNldCA9IG5ld0tleU1hcC5lbnRyeVNldCgpOwotICAgIEl0ZXJhdG9yICAgIGl0ZXIgICAgICA9IG5ld0tleVNldC5pdGVyYXRvcigpOwotICAgIFByaW50V3JpdGVyIHdyaXRlciAgICA9IG51bGw7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggb3V0cHV0RmlsZSApKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUoIGl0ZXIuaGFzTmV4dCgpICYmIHdyaXRlciAhPSBudWxsICkKLSAgICB7Ci0gICAgICBNYXAuRW50cnkgZW50cnkgICAgICAgPSAoTWFwLkVudHJ5KWl0ZXIubmV4dCgpOwotICAgICAgU3RyaW5nICAgIHByb3BlcnR5ICAgID0gKFN0cmluZyllbnRyeS5nZXRLZXkoKTsKLSAgICAgIFN0cmluZyAgICBuZXdGaWxlTmFtZSA9IChTdHJpbmcpZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgIFN0cmluZyAgICBvbGRGaWxlTmFtZSA9IChTdHJpbmcpb2xkS2V5TWFwLmdldCggcHJvcGVydHkgKTsKLSAgICAgIAotICAgICAgaWYoIG9sZEZpbGVOYW1lID09IG51bGwgfHwgbmV3RmlsZU5hbWUuZXF1YWxzKCBvbGRGaWxlTmFtZSApICkKLSAgICAgIHsKLSAgICAgICAgLy8gRG8gbm90aGluZy4gIEVpdGhlciB0aGlzIGtleSBkaWRuJ3QgZXhpc3QgaW4gdGhlIG9sZCBwcm9wZXJ0eQotICAgICAgICAvLyBmaWxlcyBvciB0aGlzIGtleSBpcyBzdGlsbCBpbiB0aGUgc2FtZSBwcm9wZXJ0eSBmaWxlLgotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB3cml0ZXIucHJpbnRsbiggcHJvcGVydHkgKyAiICIgKyBvbGRGaWxlTmFtZSArICIgIiArIG5ld0ZpbGVOYW1lICk7IAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiggd3JpdGVyICE9IG51bGwgKSB3cml0ZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYnVpbGRNYXAoIFZlY3RvciBpbnB1dEZpbGVzLCBIYXNodGFibGUga2V5TWFwICkKLSAgewotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBpbnB1dEZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgICAgICAgcHJvcEZpbGUgICAgPSAoRmlsZSlpbnB1dEZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBTdHJpbmcgICAgICBwcm9wTmFtZSAgICA9IHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgaW50ICAgICAgICAgcGx1Z2luSW5kZXggPSBwcm9wTmFtZS5pbmRleE9mKCAicGx1Z2lucyIgKTsKLSAgICAgIFN0cmluZyAgICAgIHByb3BTdHJpbmcgID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBwbHVnaW5JbmRleCwgcHJvcE5hbWUubGVuZ3RoKCkgKTsgICAgICAKLSAgICAgIElucHV0U3RyZWFtIHN0cmVhbSAgICAgID0gbnVsbDsKLSAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIHByb3BGaWxlICk7Ci0gICAgICAgIFByb3BlcnR5UmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gbmV3IFByb3BlcnR5UmVzb3VyY2VCdW5kbGUoIHN0cmVhbSApOwotICAgICAgICAKLSAgICAgICAgRW51bWVyYXRpb24ga2V5cyA9IGJ1bmRsZS5nZXRLZXlzKCk7Ci0gICAgICAgIAotICAgICAgICB3aGlsZSgga2V5cy5oYXNNb3JlRWxlbWVudHMoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBrZXlNYXAucHV0KCBrZXlzLm5leHRFbGVtZW50KCksIHByb3BTdHJpbmcgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgewotICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaWYoIHN0cmVhbSAhPSBudWxsICkgc3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9HZW5QbHVnaW5Qcm9wZXJ0aWVzRnJvbVBsdWdpblhtbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9HZW5QbHVnaW5Qcm9wZXJ0aWVzRnJvbVBsdWdpblhtbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjZkZGYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvR2VuUGx1Z2luUHJvcGVydGllc0Zyb21QbHVnaW5YbWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotCi1wdWJsaWMgY2xhc3MgR2VuUGx1Z2luUHJvcGVydGllc0Zyb21QbHVnaW5YbWwgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAgIEZpbGUgICAgIHN0YXJ0UGF0aCA9IG5ldyBGaWxlKCBhcmdzWzBdICk7Ci0gICAgU3RyaW5nW10gcGx1Z2luRmlsZXMgPSBVdGlscy5yZWFkTGluZXMoIGFyZ3NbMV0gKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcGx1Z2luRmlsZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBTdHJpbmcgZmlsZW5hbWUgPSBwbHVnaW5GaWxlc1tpbmRleF07Ci0gICAgICAKLSAgICAgIEhhc2hTZXQga2V5cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICBGaWxlICAgIGRpciAgPSBVdGlscy5nZXRGaWxlKCBzdGFydFBhdGgsIGZpbGVuYW1lICk7Ci0gICAgICBGaWxlICAgIGZpbGUgPSBVdGlscy5nZXRGaWxlKCBkaXIsICJwbHVnaW4ueG1sIiApOwotCi0gICAgICBpZiggZmlsZSA9PSBudWxsICkgY29udGludWU7Ci0gICAgICAKLSAgICAgIFV0aWxzLmdldFBsdWdpblhNTEtleXMoIGZpbGUsIGtleXMgKTsKLQotICAgICAgRmlsZSBwcm9wZmlsZSA9IFV0aWxzLmdldEZpbGUoIGRpciwgInBsdWdpbi5wcm9wZXJ0aWVzIiApOwotICAgICAgCi0gICAgICBpZigga2V5cy5zaXplKCkgPiAwICYmIHByb3BmaWxlID09IG51bGwgKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIk5vIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgZm9yOiIgKyBmaWxlICk7Ci0gICAgICAgICAgcHJvcGZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCAicHJlZml4IiwgInN1ZmZpeCIgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGtleXMuc2l6ZSgpID09IDAgKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgRmlsZSAgICAgICAgICAgb3V0cHV0RmlsZSA9IG5ldyBGaWxlKCBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkgKyBGaWxlLnNlcGFyYXRvciArICJwbHVnaW4ucHJvcGVydGllcy5uZXciICk7Ci0gICAgICBGaWxlICAgICAgICAgICBkZWxGaWxlID0gbmV3IEZpbGUoIGRpci5nZXRBYnNvbHV0ZVBhdGgoKSArIEZpbGUuc2VwYXJhdG9yICsgInBsdWdpbi5wcm9wZXJ0aWVzLmRlbCIgKTsKLSAgICAgIFByaW50V3JpdGVyIHdyaXRlciAgICAgPSBudWxsOwotICAgICAgUHJpbnRXcml0ZXIgZGVsV3JpdGVyICA9IG51bGw7Ci0gICAgICAKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBvdXRwdXRGaWxlICkgKTsKLSAgICAgICAgZGVsV3JpdGVyID0gbmV3IFByaW50V3JpdGVyKCBuZXcgRmlsZVdyaXRlciggZGVsRmlsZSApKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiR2VuZXJhdGluZyBvdXRwdXQgdG86IiArIG91dHB1dEZpbGUgKTsKLSAgICAgICAgVXRpbHMuY3JlYXRlT3V0cHV0RmlsZSgga2V5cywgcHJvcGZpbGUsIHdyaXRlciwgZGVsV3JpdGVyICk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsgCi0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaWYoIHdyaXRlciAhPSBudWxsICkgd3JpdGVyLmNsb3NlKCk7Ci0gICAgICAgICAgaWYoIGRlbFdyaXRlciAhPSBudWxsICkgZGVsV3JpdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgICAgICB7Ci0gICAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgCi0gICAgfQotICB9ICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvTGlzdFByb3BlcnR5RmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvTGlzdFByb3BlcnR5RmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEwYTZjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL0xpc3RQcm9wZXJ0eUZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgTGlzdFByb3BlcnR5RmlsZXMgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAgIEZpbGUgICAgICAgIHN0YXJ0UGF0aCAgICAgPSBuZXcgRmlsZSggYXJnc1swXSApOwotICAgIFZlY3RvciAgICAgIHByb3BlcnR5RmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgVXRpbHMuZ2V0RmlsZXMoIHN0YXJ0UGF0aCwgcHJvcGVydHlGaWxlcywgImJhY2t1cCIsIG5ldyBTdHJpbmdbXXsgImJpbiIsICJidWlsZC5wcm9wZXJ0aWVzIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgCi0gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggcHJvcGVydHkgZmlsZQotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBwcm9wZXJ0eUZpbGVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgRmlsZSAgIHByb3BGaWxlICAgID0gKEZpbGUpcHJvcGVydHlGaWxlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgU3RyaW5nIHByb3BOYW1lICAgID0gcHJvcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICBpbnQgICAgcGx1Z2luSW5kZXggPSBwcm9wTmFtZS5pbmRleE9mKCAicGx1Z2lucyIgKTsKLSAgICAgIGludCAgICBmaXJzdFNsYXNoICA9IHByb3BOYW1lLmluZGV4T2YoICJcXCIsIHBsdWdpbkluZGV4ICk7Ci0gICAgICBpbnQgICAgbmV4dFNsYXNoICAgPSBwcm9wTmFtZS5pbmRleE9mKCAiXFwiLCBmaXJzdFNsYXNoKzEgKTsKLSAgICAgIFN0cmluZyBwbHVnaW5OYW1lICA9IHByb3BOYW1lLnN1YnN0cmluZyggZmlyc3RTbGFzaCArIDEsIG5leHRTbGFzaCApOwotICAgICAgaW50ICAgIHVuZGVySW5kZXggID0gcGx1Z2luTmFtZS5pbmRleE9mKCAnXycgKTsKLSAgICAgIAotICAgICAgaWYoIHVuZGVySW5kZXggIT0gLTEgKQotICAgICAgewotICAgICAgICBwbHVnaW5OYW1lID0gcGx1Z2luTmFtZS5zdWJzdHJpbmcoIDAsIHVuZGVySW5kZXggKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nIG5ld05hbWUgPSAiZGVsICBwbHVnaW5zIiArIAotICAgICAgICAgICAgICAgICAgICAgICBGaWxlLnNlcGFyYXRvciArIHBsdWdpbk5hbWUgKwotICAgICAgICAgICAgICAgICAgICAgICBGaWxlLnNlcGFyYXRvciArIHByb3BOYW1lLnN1YnN0cmluZyggbmV4dFNsYXNoKzEsIHByb3BOYW1lLmxlbmd0aCgpICk7Ci0KLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggbmV3TmFtZSApOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9SZW1vdmVCcmFja2V0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9SZW1vdmVCcmFja2V0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzU2ODJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvUmVtb3ZlQnJhY2tldHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5hd3QuQnV0dG9uOwotaW1wb3J0IGphdmEuYXd0LkV2ZW50OwotaW1wb3J0IGphdmEuYXd0LkZyYW1lOwotaW1wb3J0IGphdmEuYXd0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgamF2YS5hd3QuVGV4dEFyZWE7Ci1pbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7Ci1pbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZW1vdmVCcmFja2V0cyBleHRlbmRzIEZyYW1lIAotewotICAvKioKLSAgICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDM2MTcyOTIzMjAyOTk4MjQxNzZMOwotICBwcml2YXRlIFRleHRBcmVhIGlucHV0QXJlYV87Ci0gIHByaXZhdGUgVGV4dEFyZWEgb3V0cHV0QXJlYV87Ci0gIHByaXZhdGUgQnV0dG9uICAgYnV0dG9uXzsKLSAgCi0gIHB1YmxpYyBSZW1vdmVCcmFja2V0cygpCi0gIHsKLSAgCXN1cGVyKCAiQ29udmVydCBIVE1MIGJyYWNrZXRzIiApOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSAKLSAgewotICAJUmVtb3ZlQnJhY2tldHMgY29udmVydCA9IG5ldyBSZW1vdmVCcmFja2V0cygpOwotICAJCi0gIAljb252ZXJ0LmJ1aWxkVUkoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGJ1aWxkVUkoKQotICB7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgzLDEpOwotICAgIC8vbGF5b3V0LnNldENvbHVtbnMoMSk7Ci0gICAgc2V0TGF5b3V0KCBsYXlvdXQgKTsKLSAgICAKLSAgICBpbnB1dEFyZWFfICA9IG5ldyBUZXh0QXJlYSggMTAsIDUwICk7Ci0gICAgb3V0cHV0QXJlYV8gPSBuZXcgVGV4dEFyZWEoIDEwLCA1MCApOwotICAgIGJ1dHRvbl8gICAgID0gbmV3IEJ1dHRvbiggIlByZXNzIGhlcmUgdG8gY29udmVydCB0byBIVE1MIiApOwotICAgIAotICAgIGlucHV0QXJlYV8uc2V0RWRpdGFibGUoIHRydWUgKTsKLSAgICBvdXRwdXRBcmVhXy5zZXRFZGl0YWJsZSggdHJ1ZSApOwotICAgIGJ1dHRvbl8uYWRkQWN0aW9uTGlzdGVuZXIoIG5ldyBBY3Rpb25MaXN0ZW5lcigpCi0gICAgCQkgICAgICAgICAgICAgICAgICAgewotICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKCBBY3Rpb25FdmVudCBldnQgKQotICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VGV4dCgpOwotICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIAkJICAgICAgICAgICAgICAgICAgIH0pOwotICAgIAotICAgIGFkZCggaW5wdXRBcmVhXyApOwotICAgIGFkZCggYnV0dG9uXyApOwotICAgIGFkZCggb3V0cHV0QXJlYV8gKTsKLSAgICAvL3NldFNpemUoIDEwMCwgMTAwICk7Ci0gICAgcGFjaygpOwotICAgIHNob3coKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaGFuZGxlRXZlbnQoIEV2ZW50IGV2dCApCi0gIHsKLSAgICBpZiggZXZ0LmlkID09IEV2ZW50LldJTkRPV19ERVNUUk9ZICkKLSAgICB7Ci0gICAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBjb252ZXJ0VGV4dCgpCi0gIHsKLSAgCVN0cmluZyBpbnB1dFN0cmluZyA9IGlucHV0QXJlYV8uZ2V0VGV4dCgpOwotICAJU3RyaW5nIG91dHB1dFN0cmluZyA9IGlucHV0U3RyaW5nLnJlcGxhY2VBbGwoICI8IiwgIiZsdDsiKTsKLSAgCQotICAJb3V0cHV0U3RyaW5nID0gb3V0cHV0U3RyaW5nLnJlcGxhY2VBbGwoICI+IiwgIiZndDsiICk7Ci0gIAkKLSAgCW91dHB1dEFyZWFfLnNldFRleHQoIG91dHB1dFN0cmluZyApOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1JlbW92ZVVudXNlZEtleXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvUmVtb3ZlVW51c2VkS2V5cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmVhODZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvUmVtb3ZlVW51c2VkS2V5cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIFJlbW92ZVVudXNlZEtleXMgCi17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkKLSAgewotICAgIEZpbGUgICAgICAgIHN0YXJ0UGF0aCAgICAgPSBuZXcgRmlsZSggYXJnc1swXSApOwotICAgIFN0cmluZ1tdICAgIHBsdWdpbkZpbGVzICAgPSBVdGlscy5yZWFkTGluZXMoIGFyZ3NbMV0gKTsKLSAgICBWZWN0b3IgICAgICBwcm9wZXJ0eUZpbGVzID0gbmV3IFZlY3RvcigpOwotICAgIEhhc2h0YWJsZSAgIGtleXMgICAgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgSGFzaHRhYmxlICAgc3JjS2V5cyAgICAgICA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBWZWN0b3IgICAgICBzcmNGaWxlcyAgICAgID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciAgICAgIHByb3BOYW1lcyAgICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yICAgICAgcGx1Z2luTmFtZXMgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmdbXSAgICBwbHVnaW5BcnJheSAgID0gbnVsbDsKLSAgICBIYXNodGFibGUgICBzcmNQbHVnaW5NYXAgID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAotICAgIAotICAgIC8vIEZpbmQgYWxsIHRoZSBwcm9wZXJ0eSBmaWxlcy4KLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcGx1Z2luRmlsZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcGx1Z2luRGlyICAgICA9IFV0aWxzLmdldEZpbGUoIHN0YXJ0UGF0aCwgcGx1Z2luRmlsZXNbaW5kZXhdICk7Ci0gICAgICAKLSAgICAgIGlmKCBwbHVnaW5EaXIgPT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlBsdWdpbjogIiArIHBsdWdpbkZpbGVzW2luZGV4XSArICIgbm90IGZvdW5kISIgKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFV0aWxzLmdldEZpbGVzKCBwbHVnaW5EaXIsIHByb3BlcnR5RmlsZXMsICJwcm9wZXJ0aWVzIiwgbmV3IFN0cmluZ1tdeyAiYmluIiwgImJ1aWxkLnByb3BlcnRpZXMiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3NleHBsb3Jlci5wcm9wZXJ0aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidWRkaS5wcm9wZXJ0aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3NkbC5wcm9wZXJ0aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3NpbC5wcm9wZXJ0aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmF2b3JpdGVzLnByb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXdwcm9wcy5wcm9wZXJ0aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVscHJvcHMucHJvcGVydGllcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgICBVdGlscy5nZXRGaWxlcyggcGx1Z2luRGlyLCBzcmNGaWxlcywgImphdmEiLCBuZXcgU3RyaW5nWzBdICk7Ci0gICAgfQotICAgIAotICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGZpbGUKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcHJvcGVydHlGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICBwcm9wRmlsZSA9IChGaWxlKXByb3BlcnR5RmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIEZpbGUgICBwYXJlbnQgICA9IG5ldyBGaWxlKCBwcm9wRmlsZS5nZXRQYXJlbnQoKSApOwotICAgICAgCi0gICAgICAvLyBTa2lwIHByb3BlcnRpZXMgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIHBsdWdpbiBkaXJlY3RvcnkuCi0gICAgICBpZiggVXRpbHMuc3RyaW5nSW5BcnJheSggcGFyZW50LmdldE5hbWUoKSwgcGx1Z2luRmlsZXMgKSApCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgCi0gICAgICBTdHJpbmcgcHJvcE5hbWUgPSBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgIGludCAgICBzcmNTdGFydCA9IHByb3BOYW1lLmluZGV4T2YoICJzcmMiICk7Ci0gICAgICAKLSAgICAgIGlmKCBzcmNTdGFydCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIGludCBsYXN0U2xhc2ggPSBwcm9wTmFtZS5sYXN0SW5kZXhPZiggJ1xcJyApOwotICAgICAgICBpbnQgbGFzdERvdCAgID0gcHJvcE5hbWUubGFzdEluZGV4T2YoICcuJyApOwotICAgICAgICBTdHJpbmcgbmFtZSAgID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBzcmNTdGFydCArIDQsIGxhc3RTbGFzaCApOwotICAgICAgICBTdHJpbmcgbmFtZTIgID0gcHJvcE5hbWUuc3Vic3RyaW5nKCBzcmNTdGFydCArIDQsIGxhc3REb3QgKTsKLSAgICAgICAgbmFtZSAgPSBuYW1lLnJlcGxhY2UoICdcXCcsICcuJyApOyAKLSAgICAgICAgbmFtZTIgPSBuYW1lMi5yZXBsYWNlKCAnXFwnLCAnLicgKTsKLSAgICAgICAgCi0gICAgICAgIHBsdWdpbk5hbWVzLmFkZCggbmFtZSApOwotICAgICAgICBwbHVnaW5OYW1lcy5hZGQoIG5hbWUyICk7Ci0gICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCBwcm9wTmFtZSArICI+PiIgKyBuYW1lICsgIj4+IiArIG5hbWUyICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHBsdWdpbkFycmF5ID0gKFN0cmluZ1tdKXBsdWdpbk5hbWVzLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKTsKLSAgICAKLSAgICAvLyBGaW5kIGFsbCB0aGUgamF2YSBzdHJpbmdzLgotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBzcmNGaWxlcy5zaXplKCk7IGluZGV4KysgKQotICAgIHsKLSAgICAgIEZpbGUgICAgIHNyY0ZpbGUgICAgID0gKEZpbGUpc3JjRmlsZXMuZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIFZlY3RvciAgIGZpbGVTcmNLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gbGluZXMgICAgICAgPSBVdGlscy5yZWFkTGluZXMoc3JjRmlsZSApOwotICAgICAgCi0gICAgICBmb3IoIGludCBzcmNJbmRleCA9IDA7IHNyY0luZGV4IDwgbGluZXMubGVuZ3RoOyBzcmNJbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgVXRpbHMuZmluZEphdmFTdHJpbmdzKCBsaW5lc1tzcmNJbmRleF0sIGZpbGVTcmNLZXlzICk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGZvciggaW50IGtleXNJbmRleCA9IDA7IGtleXNJbmRleCA8IGZpbGVTcmNLZXlzLnNpemUoKTsga2V5c0luZGV4KysgKQotICAgICAgewotICAgICAgICBTdHJpbmcgIGtleSAgICAgPSAoU3RyaW5nKWZpbGVTcmNLZXlzLmVsZW1lbnRBdCgga2V5c0luZGV4ICk7Ci0gICAgICAgIEhhc2hTZXQgZmlsZVNldCA9IChIYXNoU2V0KXNyY0tleXMuZ2V0KCBrZXkgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBmaWxlU2V0ID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgZmlsZVNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgc3JjS2V5cy5wdXQoIGtleSwgZmlsZVNldCApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggVXRpbHMuc3RyaW5nSW5BcnJheSgga2V5LCBwbHVnaW5BcnJheSApICkKLSAgICAgICAgewotICAgICAgICAgIEhhc2hTZXQgbmFtZXMgPSAoSGFzaFNldClzcmNQbHVnaW5NYXAuZ2V0KCBzcmNGaWxlICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIG5hbWVzID09IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgICAgIHNyY1BsdWdpbk1hcC5wdXQoIHNyY0ZpbGUsIG5hbWVzICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIG5hbWVzLmFkZCgga2V5ICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZpbGVTZXQuYWRkKCBzcmNGaWxlICk7Ci0gICAgICB9Ci0gICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgaW50IGNvdW50ID0gMTsKLSAgICAKLSAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBmaWxlCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHByb3BlcnR5RmlsZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBGaWxlICAgcHJvcEZpbGUgPSAoRmlsZSlwcm9wZXJ0eUZpbGVzLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICBWZWN0b3IgcHJvcEtleXMgPSBVdGlscy5nZXRQcm9wZXJ0eUtleXMoIHByb3BGaWxlICk7ICAKLSAgICAgIEZpbGUgICBwYXJlbnQgICA9IG5ldyBGaWxlKCBwcm9wRmlsZS5nZXRQYXJlbnQoKSApOwotICAgICAgCi0gICAgICAvLyBTa2lwIHByb3BlcnRpZXMgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIHBsdWdpbiBkaXJlY3RvcnkuCi0gICAgICBpZiggVXRpbHMuc3RyaW5nSW5BcnJheSggcGFyZW50LmdldE5hbWUoKSwgcGx1Z2luRmlsZXMgKSApCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgICAgICAgCi0gICAgICBTdHJpbmcgcHJvcE5hbWUgICA9IHByb3BGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgaW50ICAgIHNyY1N0YXJ0ICAgPSBwcm9wTmFtZS5pbmRleE9mKCAic3JjIiApOwotICAgICAgU3RyaW5nIGZvbGRlck5hbWUgPSAiIjsKLSAgICAgIFN0cmluZyBwa2dOYW1lICA9ICIiOwotICAgICAgCi0gICAgICBpZiggc3JjU3RhcnQgIT0gLTEgKQotICAgICAgewotICAgICAgICBpbnQgbGFzdFNsYXNoID0gcHJvcE5hbWUubGFzdEluZGV4T2YoICdcXCcgKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgICA9IHByb3BOYW1lLnN1YnN0cmluZyggc3JjU3RhcnQgKyA0LCBsYXN0U2xhc2ggKTsKLSAgICAgICAgbmFtZSAgPSBuYW1lLnJlcGxhY2UoICdcXCcsICcuJyApOyAKLSAgICAgICAgCi0gICAgICAgIHBrZ05hbWUgICAgPSBuYW1lOwotICAgICAgICBmb2xkZXJOYW1lID0gcHJvcE5hbWUuc3Vic3RyaW5nKCAwLCBsYXN0U2xhc2ggKyAxICk7IAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBwcm9wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSApOwotICAgICAgCi0gICAgICBTdHJpbmcgbmV3UHJvcE5hbWUgPSBmb2xkZXJOYW1lICsgIm5ld3Byb3BzLnByb3BlcnRpZXMiOwotICAgICAgU3RyaW5nIGRlbFByb3BOYW1lID0gZm9sZGVyTmFtZSArICJkZWxwcm9wcy5wcm9wZXJ0aWVzIjsKLSAgICAgIAotICAgICAgUHJpbnRXcml0ZXIgbmV3UHJvcGVydHlGaWxlID0gbnVsbDsKLSAgICAgIFByaW50V3JpdGVyIGRlbFByb3BlcnR5RmlsZSA9IG51bGw7Ci0gICAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIG5ld1Byb3BlcnR5RmlsZSA9IG5ldyBQcmludFdyaXRlciggbmV3IEZpbGVXcml0ZXIoIG5ld1Byb3BOYW1lICkpOwotICAgICAgICBkZWxQcm9wZXJ0eUZpbGUgPSBuZXcgUHJpbnRXcml0ZXIoIG5ldyBGaWxlV3JpdGVyKCBkZWxQcm9wTmFtZSApKTsKLSAgICAgICAgCi0gICAgICAgIFV0aWxzLmNyZWF0ZU91dHB1dEZpbGUoIHNyY0tleXMua2V5U2V0KCksIHByb3BGaWxlLCBuZXdQcm9wZXJ0eUZpbGUsIGRlbFByb3BlcnR5RmlsZSApOwotICAgICAgICAKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7IAotICAgICAgfQotICAgICAgZmluYWxseQotICAgICAgewotICAgICAgICBpZiggbmV3UHJvcGVydHlGaWxlICE9IG51bGwgKSBuZXdQcm9wZXJ0eUZpbGUuY2xvc2UoKTsKLSAgICAgICAgaWYoIGRlbFByb3BlcnR5RmlsZSAhPSBudWxsICkgZGVsUHJvcGVydHlGaWxlLmNsb3NlKCk7Ci0gICAgICB9ICAgICAKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvVXBkYXRlRmVhdHVyZVhNTEZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3V0aWxzL1VwZGF0ZUZlYXR1cmVYTUxGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2ZhZWVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvVXBkYXRlRmVhdHVyZVhNTEZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlRmVhdHVyZVhNTEZpbGVzIAotewotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiggU3RyaW5nW10gYXJncyApCi0gIHsKLSAgCVN0cmluZyByb290UGF0aCAgICAgPSBhcmdzWzBdOwotICAJRmlsZSAgIHJvb3RGaWxlICAgICA9IG5ldyBGaWxlKCByb290UGF0aCApOwotICAJVmVjdG9yIGZlYXR1cmVGaWxlcyA9IG5ldyBWZWN0b3IoKTsKLSAgCQotICAJZ2V0RmlsZXMoIGZlYXR1cmVGaWxlcywgcm9vdEZpbGUgKTsKLSAgCQotICAJaW50IHNpemUgPSBmZWF0dXJlRmlsZXMuc2l6ZSgpOwotICAJCi0gIAlmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgaW5kZXgrKyApCi0gIAl7Ci0gIAkgIEZpbGUgICAgIGZpbGUgICAgICA9IChGaWxlKWZlYXR1cmVGaWxlcy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gIAkgIFN0cmluZyAgIGZpbGVOYW1lICA9IGZpbGUuZ2V0TmFtZSgpOwotICAJICBpbnQgICAgICBsYW5nSW5kZXggPSBmaWxlTmFtZS5pbmRleE9mKCAiZmVhdHVyZV8iICk7Ci0gIAkgIGludCAgICAgIGRvdEluZGV4ICA9IGZpbGVOYW1lLmluZGV4T2YoICcuJywgbGFuZ0luZGV4ICk7Ci0gIAkgIFN0cmluZyAgIGxhbmcgICAgICA9IGZpbGVOYW1lLnN1YnN0cmluZyggbGFuZ0luZGV4ICsgOCwgZG90SW5kZXggKTsKLSAgCSAgU3RyaW5nW10gbGluZXMgICAgID0gVXRpbHMucmVhZExpbmVzKCBmaWxlICk7Ci0gIAkgIAotCSAgUHJpbnRXcml0ZXIgd3JpdGVyICAgICA9IG51bGw7Ci0gIAkgIEZpbGVXcml0ZXIgIGZpbGVXcml0ZXIgPSBudWxsOwotICAJICAKLSAgCSAgdHJ5Ci0JICB7Ci0JICAgIGZpbGVXcml0ZXIgPSBuZXcgRmlsZVdyaXRlciggZmlsZSApOwotICAJICAgIHdyaXRlciA9IG5ldyBQcmludFdyaXRlciggZmlsZVdyaXRlciApOwotICAJICAgIAotICAJICAgIGZvciggaW50IGxpbmVJbmRleCA9IDA7IGxpbmVJbmRleCA8IGxpbmVzLmxlbmd0aDsgbGluZUluZGV4KysgKQotICAJICAgIHsKLSAgCSAgCSAgU3RyaW5nIGxpbmUgPSBsaW5lc1tsaW5lSW5kZXhdOwotICAJICAJCi0gIAkgIAkgIGlmKCBsaW5lLmluZGV4T2YoICJsaWNlbnNlVVJMIiApICE9IC0xICkKLSAgCSAgCSAgewotICAJICAJCXdyaXRlci5wcmludGxuKCAibGljZW5zZVVSTD1saWNlbnNlXyIgKyBsYW5nICsgIi5odG1sIiApOwotICAJICAJICB9Ci0gIAkgIAkgIGVsc2UKLSAgCSAgCSAgewotICAJICAJCXdyaXRlci5wcmludGxuKCBsaW5lICk7Ci0gIAkgIAkgIH0KLSAgCSAgICB9Ci0JICB9Ci0gIAkgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLQkgIHsKLSAgCSAgCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkgIH0KLSAgCSAgZmluYWxseQotCSAgewotICAJICAJdHJ5Ci0JCXsKLSAgCSAgCSAgd3JpdGVyLmNsb3NlKCk7Ci0gIAkgIAkgIGZpbGVXcml0ZXIuY2xvc2UoKTsKLQkJfQotICAJICAJY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotCQl7Ci0gIAkgIAkgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCSAgfQotICAJfQotICB9Ci0gIAotICBzdGF0aWMgcHJpdmF0ZSB2b2lkIGdldEZpbGVzKCBWZWN0b3IgZmlsZXMsIEZpbGUgcGF0aCApCi0gIHsKLSAgICBpZiggcGF0aC5pc0RpcmVjdG9yeSgpICkKLSAgICB7Ci0gICAgICBGaWxlW10gY2hpbGRyZW4gPSBwYXRoLmxpc3RGaWxlcygpOwotICAgICAgCi0gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgIAlnZXRGaWxlcyggZmlsZXMsIGNoaWxkcmVuW2luZGV4XSApOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIHBhdGhOYW1lID0gcGF0aC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAKLSAgICAgIGludCAgICBpbmRleCAgICA9IHBhdGhOYW1lLmluZGV4T2YoICJmZWF0dXJlXyIgKTsKLSAgICAgIAotICAgICAgaWYoIGluZGV4ICE9IC0xICkKLSAgICAgIHsKLSAgICAgIAlmaWxlcy5hZGQoIHBhdGggKTsKLSAgICAgIH0KLSAgICB9ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9VdGlscy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91dGlscy9VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTIwZGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdXRpbHMvVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVuYW1lRmlsdGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0eVJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBVdGlscyAKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZU91dHB1dEZpbGUoIENvbGxlY3Rpb24ga2V5cywgRmlsZSBwcm9wc0ZpbGUsIFByaW50V3JpdGVyIG91dHB1dEZpbGUsIFByaW50V3JpdGVyIGRlbGV0ZUZpbGUgKQotICB7Ci0gICAgU3RyaW5nW10gbGluZXMgICAgICAgID0gcmVhZExpbmVzKCBwcm9wc0ZpbGUgKTsKLSAgICBib29sZWFuICBjb250aW51ZUxpbmUgPSBmYWxzZTsKLSAgICBib29sZWFuICBkZWxldGVLZXkgICAgPSBmYWxzZTsKLSAgICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgU3RyaW5nICAgbGluZSA9IGxpbmVzW2luZGV4XS50cmltKCk7Ci0gICAgICAKLSAgICAgIGlmKCBjb250aW51ZUxpbmUgKQotICAgICAgewotICAgICAgICBjb250aW51ZUxpbmUgPSBsaW5lLmVuZHNXaXRoKCAiXFwiICk7Ci0gICAgICAgIAotICAgICAgICBpZiggIWRlbGV0ZUtleSApCi0gICAgICAgIHsKLSAgICAgICAgICBvdXRwdXRGaWxlLnByaW50bG4oIGxpbmUgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBkZWxldGVGaWxlLnByaW50bG4oIGxpbmUgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGNvbnRpbnVlTGluZSA9IGxpbmUuZW5kc1dpdGgoICJcXCIgKTsKLSAgICAgIAotICAgICAgYm9vbGVhbiAgdmFsaWRLZXkgICAgID0gaXNMaW5lS2V5KCBrZXlzLCBsaW5lICk7Ci0gICAgICBib29sZWFuICBoYXNLZXkgICAgICAgPSBsaW5lLmluZGV4T2YoICc9JyApICE9IC0xOwotICAgICAgCi0gICAgICBpZiggdmFsaWRLZXkgKQotICAgICAgewotICAgICAgICBvdXRwdXRGaWxlLnByaW50bG4oIGxpbmUgKTsKLSAgICAgICAgZGVsZXRlS2V5ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBoYXNLZXkgKQotICAgICAgewotICAgICAgICBkZWxldGVLZXkgPSB0cnVlOwotICAgICAgICBkZWxldGVGaWxlLnByaW50bG4oIGxpbmUgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgb3V0cHV0RmlsZS5wcmludGxuKCBsaW5lICk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMaW5lS2V5KCBDb2xsZWN0aW9uIGtleXMsIFN0cmluZyBsaW5lICkKLSAgewotICAgIGJvb2xlYW4gIHJlc3VsdCA9IGZhbHNlOwotICAgIEl0ZXJhdG9yIGl0ZXIgICA9IGtleXMuaXRlcmF0b3IoKTsKLSAgICBpbnQgICAgICBlcXVhbEluZGV4ID0gbGluZS5pbmRleE9mKCAnPScgKTsKLSAgICBTdHJpbmcgICBrZXkgICAgICAgID0gbnVsbDsKLSAgICAKLSAgICBpZiggZXF1YWxJbmRleCAhPSAtMSAmJiAhbGluZS5zdGFydHNXaXRoKCAiIyIgKSkKLSAgICB7Ci0gICAgICBrZXkgPSBsaW5lLnN1YnN0cmluZyggMCwgZXF1YWxJbmRleCApOwotICAgIH0KLSAgICAKLSAgICB3aGlsZSggaXRlci5oYXNOZXh0KCkgJiYga2V5ICE9IG51bGwgKQotICAgIHsKLSAgICAgIFN0cmluZyBjb2xsZWN0aW9uS2V5ID0gKFN0cmluZylpdGVyLm5leHQoKTsKLSAgICAgIGlmKCBrZXkuZXF1YWxzKCBjb2xsZWN0aW9uS2V5ICkgfHwgY29sbGVjdGlvbktleS5lcXVhbHMoICclJyArIGtleSApICkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBnZXRQbHVnaW5YTUxLZXlzKCBGaWxlIGZpbGUsIEhhc2hTZXQga2V5cyApCi0gIHsKLSAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBudWxsOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoIGZpbGUgKSApOwotICAgICAgCi0gICAgICBTdHJpbmcgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpOwotICAgICAgCi0gICAgICB3aGlsZSggbGluZSAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIGxpbmVrZXlzID0gZmluZEtleXMoIGxpbmUgKTsKLSAgICAgICAga2V5cy5hZGRBbGwoIGxpbmVrZXlzICk7Ci0gICAgICAgIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZiggcmVhZGVyICE9IG51bGwgKSByZWFkZXIuY2xvc2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBGaWxlIGdldEZpbGUoIEZpbGUgYmFzZSwgZmluYWwgU3RyaW5nIGNoaWxkICkKLSAgewotICAgIEZpbGVbXSBmaWxlID0gYmFzZS5saXN0RmlsZXMoIG5ldyBGaWxlbmFtZUZpbHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KCBGaWxlIGZpbGUsIFN0cmluZyBuYW1lICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gbmFtZS5pbmRleE9mKCAnXycgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBpbmRleCAhPSAtMSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoIDAsIGluZGV4ICk7ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUuZW5kc1dpdGgoIGNoaWxkICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIHJldHVybiBmaWxlLmxlbmd0aCA9PSAwID8gbnVsbCA6IGZpbGVbMF07Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgVmVjdG9yIGZpbmRLZXlzKCBTdHJpbmcgbGluZSApCi0gIHsKLSAgICBWZWN0b3Iga2V5cyAgICAgICA9IG5ldyBWZWN0b3IoKTsKLSAgICBpbnQgICAgcXVvdGVzdGFydCA9IGxpbmUuaW5kZXhPZiggJyInICk7Ci0gICAgaW50ICAgIHF1b3RlZW5kICAgPSBsaW5lLmluZGV4T2YoICciJywgcXVvdGVzdGFydCArIDEgKTsKLSAgICAKLSAgICB3aGlsZSggcXVvdGVzdGFydCAhPSAtMSAmJiBxdW90ZWVuZCAhPSAtMSAmJiBxdW90ZXN0YXJ0IDwgcXVvdGVlbmQgKQotICAgIHsKLSAgICAgIFN0cmluZyBrZXkgPSBsaW5lLnN1YnN0cmluZyggcXVvdGVzdGFydCsxLCBxdW90ZWVuZCApOwotICAgICAgCi0gICAgICBpZigga2V5LnN0YXJ0c1dpdGgoICIlIikgKQotICAgICAgewotICAgICAgICBrZXlzLmFkZCgga2V5LnN1YnN0cmluZygxLCBrZXkubGVuZ3RoKCkgKSApOwotICAgICAgfQotICAgICAgCi0gICAgICBxdW90ZXN0YXJ0ID0gbGluZS5pbmRleE9mKCAnIicsIHF1b3RlZW5kKzEgKTsKLSAgICAgIHF1b3RlZW5kICAgPSBsaW5lLmluZGV4T2YoICciJywgcXVvdGVzdGFydCsxICk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBrZXlzOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgZmluZEphdmFTdHJpbmdzKCBTdHJpbmcgbGluZSwgVmVjdG9yIGtleXMgKQotICB7Ci0gICAgaW50ICAgIHF1b3Rlc3RhcnQgPSBsaW5lLmluZGV4T2YoICciJyApOwotICAgIGludCAgICBxdW90ZWVuZCAgID0gbGluZS5pbmRleE9mKCAnIicsIHF1b3Rlc3RhcnQgKyAxICk7Ci0gICAgCi0gICAgd2hpbGUoIHF1b3Rlc3RhcnQgIT0gLTEgJiYgcXVvdGVlbmQgIT0gLTEgJiYgcXVvdGVzdGFydCA8IHF1b3RlZW5kICkKLSAgICB7Ci0gICAgICAvLyBGaW5kIGxhc3QgcmVhbCBlbmRpbmcgcXVvdGUuCi0gICAgICB3aGlsZSggcXVvdGVzdGFydCAhPSAtMSAmJiBxdW90ZWVuZCAhPSAtMSAmJiBsaW5lLmNoYXJBdCggcXVvdGVlbmQtMSApID09ICdcXCcgKQotICAgICAgewotICAgICAgICBxdW90ZWVuZCA9IGxpbmUuaW5kZXhPZiggJyInLCBxdW90ZWVuZCArIDEgKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoIHF1b3Rlc3RhcnQgPT0gLTEgfHwgcXVvdGVlbmQgPT0gLTEgfHwgcXVvdGVzdGFydCA+IHF1b3RlZW5kICkgYnJlYWs7Ci0gICAgICAKLSAgICAgIFN0cmluZyBrZXkgPSBsaW5lLnN1YnN0cmluZyggcXVvdGVzdGFydCsxLCBxdW90ZWVuZCApOwotICAgICAgCi0gICAgICBrZXlzLmFkZCgga2V5ICk7Ci0gICAgICAKLSAgICAgIHF1b3Rlc3RhcnQgPSBsaW5lLmluZGV4T2YoICciJywgcXVvdGVlbmQrMSApOwotICAgICAgcXVvdGVlbmQgICA9IGxpbmUuaW5kZXhPZiggJyInLCBxdW90ZXN0YXJ0KzEgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gcmVhZExpbmVzKCBGaWxlIGZpbGUgKQotICB7Ci0gICAgVmVjdG9yIGZpbGVzID0gbmV3IFZlY3RvcigpOwotICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlciggZmlsZSApICk7Ci0gICAgICAKLSAgICAgIFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7Ci0gICAgICAKLSAgICAgIHdoaWxlKCBsaW5lICE9IG51bGwgKQotICAgICAgewotICAgICAgICBmaWxlcy5hZGQoIGxpbmUgKTsKLSAgICAgICAgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiUHJvYmxlbSBvcGVuaW5nIGZpbGU6IiArIGZpbGUgKTsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZiggcmVhZGVyICE9IG51bGwgKSByZWFkZXIuY2xvc2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKWZpbGVzLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKTsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSByZWFkTGluZXMoIFN0cmluZyBmaWxlICkKLSAgewotICAgIHJldHVybiByZWFkTGluZXMoIG5ldyBGaWxlKCBmaWxlICkgKTsKLSAgfQotICAgIAotICBwdWJsaWMgc3RhdGljIHZvaWQgZ2V0RmlsZXMoIEZpbGUgZmlsZSwgVmVjdG9yIGZpbGVzLCBTdHJpbmcgZmlsZVN1ZmZpeCwgU3RyaW5nW10gZXhjbHVkZUZpbGVzICkKLSAgewotICAgIGlmKCBzdHJpbmdJbkFycmF5KCBmaWxlLmdldE5hbWUoKSwgZXhjbHVkZUZpbGVzICkgKQotICAgIHsKLSAgICAgIC8vIGRvIG5vdGhpbmcKLSAgICB9Ci0gICAgZWxzZSBpZiggZmlsZS5pc0RpcmVjdG9yeSgpICkKLSAgICB7Ci0gICAgICBGaWxlW10gZGlyZmlsZXMgPSBmaWxlLmxpc3RGaWxlcygpOwotICAgICAgCi0gICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgZGlyZmlsZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgZ2V0RmlsZXMoIGRpcmZpbGVzW2luZGV4XSwgZmlsZXMsIGZpbGVTdWZmaXgsIGV4Y2x1ZGVGaWxlcyApOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmKCBmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCggZmlsZVN1ZmZpeCApICkKLSAgICB7Ci0gICAgICBmaWxlcy5hZGQoIGZpbGUgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzdHJpbmdJbkFycmF5KCBTdHJpbmcgbmFtZSwgU3RyaW5nW10gbmFtZXMgKQotICB7Ci0gICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGlmKCBuYW1lLmVxdWFscyggbmFtZXNbaW5kZXhdICkpCi0gICAgICB7Ci0gICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmb3VuZDsKLSAgfQotICBwdWJsaWMgc3RhdGljIFZlY3RvciBnZXRQcm9wZXJ0eUtleXMoIEZpbGUgZmlsZSApCi0gIHsKLSAgICBWZWN0b3IgICAgICBrZXlzID0gbmV3IFZlY3RvcigpOwotICAgIElucHV0U3RyZWFtIHN0cmVhbSA9IG51bGw7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgc3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbSggZmlsZSApOwotICAgICAgCi0gICAgICBQcm9wZXJ0eVJlc291cmNlQnVuZGxlIGJ1bmRsZSAgPSBuZXcgUHJvcGVydHlSZXNvdXJjZUJ1bmRsZSggc3RyZWFtICk7Ci0gICAgICBFbnVtZXJhdGlvbiAgICAgICAgICAgIGtleUVudW0gPSBidW5kbGUuZ2V0S2V5cygpOwotICAgICAgCi0gICAgICB3aGlsZSgga2V5RW51bS5oYXNNb3JlRWxlbWVudHMoKSApCi0gICAgICB7Ci0gICAgICAgIGtleXMuYWRkKCBrZXlFbnVtLm5leHRFbGVtZW50KCkgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZiggc3RyZWFtICE9IG51bGwgKSBzdHJlYW0uY2xvc2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4ga2V5czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNjhkMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBlcmZvcm1hbmNlIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC93c2RsLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUNvbnRleHQiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wbHVnaW4vV1NQbHVnaW4iLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC92YWxpZGF0aW9uL2ludGVybmFsLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNDU2ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1wZXJmb3JtYW5jZS5qYXIKLWphdmFDb21waWxlci5wZXJmb3JtYW5jZS5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2ZTg2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgkKLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotICAgICAJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjJjNTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1dlZCBTZXAgMjYgMDY6MzE6MTIgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODVmYWZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI1N1biBKdW4gMDMgMDA6NDE6NDQgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyOWE4NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMQotQnVuZGxlLUNsYXNzUGF0aDogcGVyZm9ybWFuY2UuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpbgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkKLVJlcXVpcmUtQnVuZGxlOiBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5lY2xpcHNlLnRlc3QsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24sCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24sCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLnBlcmZvcm1hbmNlLAotIG9yZy5lY2xpcHNlLnRlc3QsCi0gb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YjNjNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2UucGVyZm9ybWFuY2UuamFyID0gcGVyZm9ybWFuY2UvCi1vdXRwdXQucGVyZm9ybWFuY2UuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gcGVyZm9ybWFuY2UuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIGRhdGEvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNjIyNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgbG9jYXRpb249InNhbXBsZTg5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiBsb2NhdGlvbj0iLlxzYW1wbGU0NTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYzc4YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0ic2FtcGxlMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgbG9jYXRpb249Ii5cc2FtcGxlMzc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2N2UxNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249InNhbXBsZTMwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgbG9jYXRpb249Ii4vc2FtcGxlODY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiBsb2NhdGlvbj0iLlxzYW1wbGUxNDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU5M2ZiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiBsb2NhdGlvbj0ic2FtcGxlNjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIGxvY2F0aW9uPSIuL3NhbXBsZTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiBsb2NhdGlvbj0iLlxzYW1wbGUxNzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlM2UwZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgbG9jYXRpb249InNhbXBsZTc4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgbG9jYXRpb249Ii4vc2FtcGxlNzk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiBsb2NhdGlvbj0iLlxzYW1wbGU4NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNWU0NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgbG9jYXRpb249InNhbXBsZTE5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgbG9jYXRpb249Ii4vc2FtcGxlMzM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiBsb2NhdGlvbj0iLlxzYW1wbGU0ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNDY3YWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgbG9jYXRpb249InNhbXBsZTUwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249Ii4vc2FtcGxlMzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZWNiNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgbG9jYXRpb249InNhbXBsZTE5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgbG9jYXRpb249Ii5cc2FtcGxlMTk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzFiNjM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIGxvY2F0aW9uPSJzYW1wbGU1NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTgyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgbG9jYXRpb249Ii5cc2FtcGxlODE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTg5MTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIGxvY2F0aW9uPSJzYW1wbGU0MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIGxvY2F0aW9uPSIuL3NhbXBsZTc5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgbG9jYXRpb249Ii5cc2FtcGxlMjcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWFkN2ZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIGxvY2F0aW9uPSJzYW1wbGUxODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTQyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCIgbG9jYXRpb249Ii5cc2FtcGxlOTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmQ2MDI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiIGxvY2F0aW9uPSJzYW1wbGU0MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIGxvY2F0aW9uPSIuL3NhbXBsZTg1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgbG9jYXRpb249Ii5cc2FtcGxlMjA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWJjYTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIGxvY2F0aW9uPSJzYW1wbGU2NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIGxvY2F0aW9uPSIuL3NhbXBsZTE1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgbG9jYXRpb249Ii5cc2FtcGxlNzE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JmYWQzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiBsb2NhdGlvbj0ic2FtcGxlNTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIGxvY2F0aW9uPSIuXHNhbXBsZTIzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWZlMjY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciIGxvY2F0aW9uPSJzYW1wbGU1Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgbG9jYXRpb249Ii5cc2FtcGxlMTk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWZhOWRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIGxvY2F0aW9uPSJzYW1wbGU4NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTMxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiBsb2NhdGlvbj0iLlxzYW1wbGUzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0YWEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIiBsb2NhdGlvbj0ic2FtcGxlNzkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIGxvY2F0aW9uPSIuXHNhbXBsZTE3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAyOTA2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiBsb2NhdGlvbj0ic2FtcGxlNTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5IiBsb2NhdGlvbj0iLi9zYW1wbGU5NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTcwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ExNzA1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiBsb2NhdGlvbj0ic2FtcGxlMzU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU4NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTYxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY1ZWJhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiBsb2NhdGlvbj0ic2FtcGxlMTQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIGxvY2F0aW9uPSIuL3NhbXBsZTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiBsb2NhdGlvbj0iLlxzYW1wbGUxODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OTYxZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgbG9jYXRpb249InNhbXBsZTYyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgbG9jYXRpb249Ii4vc2FtcGxlMjk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiBsb2NhdGlvbj0iLlxzYW1wbGU1MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjIwNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgbG9jYXRpb249InNhbXBsZTk1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgbG9jYXRpb249Ii4vc2FtcGxlODM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSIuXHNhbXBsZTU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDk1NGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIGxvY2F0aW9uPSJzYW1wbGU4NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTcyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgbG9jYXRpb249Ii5cc2FtcGxlOTI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzBjODBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIGxvY2F0aW9uPSJzYW1wbGUxNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTU0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgbG9jYXRpb249Ii5cc2FtcGxlNDcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5Yjc0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1IiBsb2NhdGlvbj0ic2FtcGxlNTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiBsb2NhdGlvbj0iLi9zYW1wbGUzNDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTY1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2I3Y2E2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIGxvY2F0aW9uPSJzYW1wbGU0NjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTExMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgbG9jYXRpb249Ii5cc2FtcGxlODk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGZhY2IwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiIGxvY2F0aW9uPSJzYW1wbGUxNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIGxvY2F0aW9uPSIuL3NhbXBsZTMwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLlxzYW1wbGU4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk1YTI3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiBsb2NhdGlvbj0ic2FtcGxlNDU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiBsb2NhdGlvbj0iLi9zYW1wbGU4MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIGxvY2F0aW9uPSIuXHNhbXBsZTEwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0ZjQ5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiBsb2NhdGlvbj0ic2FtcGxlMzQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiBsb2NhdGlvbj0iLlxzYW1wbGU2MjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzBlZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgbG9jYXRpb249InNhbXBsZTIwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgbG9jYXRpb249Ii4vc2FtcGxlMTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSIuXHNhbXBsZTMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDY2YjUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgbG9jYXRpb249InNhbXBsZTk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIGxvY2F0aW9uPSIuL3NhbXBsZTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiBsb2NhdGlvbj0iLlxzYW1wbGU4MTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxN2YxYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0ic2FtcGxlNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTcyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgbG9jYXRpb249Ii5cc2FtcGxlNTAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTVmYWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIGxvY2F0aW9uPSJzYW1wbGUyNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgbG9jYXRpb249Ii5cc2FtcGxlNjA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWUwMjFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIGxvY2F0aW9uPSJzYW1wbGU5Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTgxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgbG9jYXRpb249Ii5cc2FtcGxlNjU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmM4YmExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciIGxvY2F0aW9uPSJzYW1wbGUxNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIGxvY2F0aW9uPSIuL3NhbXBsZTc5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCIgbG9jYXRpb249Ii5cc2FtcGxlODEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRkZjlkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiBsb2NhdGlvbj0ic2FtcGxlNjM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiBsb2NhdGlvbj0iLi9zYW1wbGU0ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIGxvY2F0aW9uPSIuXHNhbXBsZTg2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWQ3NTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIGxvY2F0aW9uPSJzYW1wbGU5MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIGxvY2F0aW9uPSIuL3NhbXBsZTM3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgbG9jYXRpb249Ii5cc2FtcGxlNjMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzE4Mjc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIGxvY2F0aW9uPSJzYW1wbGUyODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIGxvY2F0aW9uPSIuL3NhbXBsZTI4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgbG9jYXRpb249Ii5cc2FtcGxlMzk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmY3Mjc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiIGxvY2F0aW9uPSJzYW1wbGU4NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiIGxvY2F0aW9uPSIuL3NhbXBsZTgwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgbG9jYXRpb249Ii5cc2FtcGxlNDg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmQwODFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIGxvY2F0aW9uPSJzYW1wbGUxNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgbG9jYXRpb249Ii4vc2FtcGxlMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIGxvY2F0aW9uPSIuXHNhbXBsZTUyMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjNmYwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0ic2FtcGxlMjQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIiBsb2NhdGlvbj0iLi9zYW1wbGU3NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzljMTY2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiBsb2NhdGlvbj0ic2FtcGxlMzc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiBsb2NhdGlvbj0iLi9zYW1wbGU3MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5NzlhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiBsb2NhdGlvbj0ic2FtcGxlOTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiBsb2NhdGlvbj0iLi9zYW1wbGUxNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIGxvY2F0aW9uPSIuXHNhbXBsZTkxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA2ZTRkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiBsb2NhdGlvbj0ic2FtcGxlNzg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSIuL3NhbXBsZTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiBsb2NhdGlvbj0iLlxzYW1wbGUzOTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMjZiMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyIgbG9jYXRpb249InNhbXBsZTczNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgbG9jYXRpb249Ii4vc2FtcGxlNDQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU5Njcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MzNkYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiBsb2NhdGlvbj0ic2FtcGxlNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIGxvY2F0aW9uPSIuL3NhbXBsZTczOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgbG9jYXRpb249Ii5cc2FtcGxlMTgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NiNGE0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIiBsb2NhdGlvbj0ic2FtcGxlNDkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiBsb2NhdGlvbj0iLi9zYW1wbGUxNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIGxvY2F0aW9uPSIuXHNhbXBsZTM0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTllMjY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIGxvY2F0aW9uPSJzYW1wbGUzNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgbG9jYXRpb249Ii5cc2FtcGxlNDA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjJmOTcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249InNhbXBsZTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiBsb2NhdGlvbj0iLi9zYW1wbGU2MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTI0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZmNzFlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiBsb2NhdGlvbj0ic2FtcGxlOTUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU1MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTM0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIyMjNlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiBsb2NhdGlvbj0ic2FtcGxlNjA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249Ii5cc2FtcGxlNjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZjVlZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgbG9jYXRpb249InNhbXBsZTY0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgbG9jYXRpb249Ii4vc2FtcGxlNDA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiBsb2NhdGlvbj0iLlxzYW1wbGU3MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1YzBiYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgbG9jYXRpb249InNhbXBsZTk4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgbG9jYXRpb249Ii4vc2FtcGxlOTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiBsb2NhdGlvbj0iLlxzYW1wbGU1ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NDg3MWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgbG9jYXRpb249InNhbXBsZTk0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgbG9jYXRpb249Ii4vc2FtcGxlMTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiBsb2NhdGlvbj0iLlxzYW1wbGU0ODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYTQwODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyIgbG9jYXRpb249InNhbXBsZTQ5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgbG9jYXRpb249Ii4vc2FtcGxlNTgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiBsb2NhdGlvbj0iLlxzYW1wbGU2NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDVjNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgbG9jYXRpb249InNhbXBsZTIzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCIgbG9jYXRpb249Ii4vc2FtcGxlNTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiBsb2NhdGlvbj0iLlxzYW1wbGU2NTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzM2M4ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgbG9jYXRpb249InNhbXBsZTIzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgbG9jYXRpb249Ii4vc2FtcGxlNjQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVmNzg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIGxvY2F0aW9uPSJzYW1wbGU2NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiIGxvY2F0aW9uPSIuL3NhbXBsZTc4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgbG9jYXRpb249Ii5cc2FtcGxlOTAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMDAyNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgbG9jYXRpb249InNhbXBsZTk5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZmY1OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiBsb2NhdGlvbj0ic2FtcGxlMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgbG9jYXRpb249Ii4vc2FtcGxlNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIGxvY2F0aW9uPSIuXHNhbXBsZTc2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiYzU0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiBsb2NhdGlvbj0ic2FtcGxlODQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiBsb2NhdGlvbj0iLi9zYW1wbGU3Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhiMWZmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiBsb2NhdGlvbj0ic2FtcGxlNTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0IiBsb2NhdGlvbj0iLi9zYW1wbGU3MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIGxvY2F0aW9uPSIuXHNhbXBsZTIyMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1MjkwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiBsb2NhdGlvbj0ic2FtcGxlNDE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIGxvY2F0aW9uPSIuXHNhbXBsZTgyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZlM2VkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiBsb2NhdGlvbj0ic2FtcGxlNjU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIGxvY2F0aW9uPSIuXHNhbXBsZTI4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk0ZWVmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiBsb2NhdGlvbj0ic2FtcGxlMjI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0iLi9zYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTU2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQxY2MzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIGxvY2F0aW9uPSJzYW1wbGU1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgbG9jYXRpb249Ii4vc2FtcGxlNjc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiBsb2NhdGlvbj0iLlxzYW1wbGU5Mzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNGQzMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgbG9jYXRpb249InNhbXBsZTMyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiIgbG9jYXRpb249Ii4vc2FtcGxlMTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNDgxZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgbG9jYXRpb249InNhbXBsZTM3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgbG9jYXRpb249Ii4vc2FtcGxlNDEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5IiBsb2NhdGlvbj0iLlxzYW1wbGUzMzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjUxNWViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgbG9jYXRpb249InNhbXBsZTExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSIuL3NhbXBsZTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiBsb2NhdGlvbj0iLlxzYW1wbGU5MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI3NDQxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiBsb2NhdGlvbj0ic2FtcGxlMTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiBsb2NhdGlvbj0iLi9zYW1wbGU4NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTczNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ3YjliZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiBsb2NhdGlvbj0ic2FtcGxlMTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiBsb2NhdGlvbj0iLi9zYW1wbGUyNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTM5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE5NWNjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiBsb2NhdGlvbj0ic2FtcGxlMzIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiBsb2NhdGlvbj0iLi9zYW1wbGU1MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSIuXHNhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRjMDRjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiBsb2NhdGlvbj0ic2FtcGxlOTQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIGxvY2F0aW9uPSIuL3NhbXBsZTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNGQ2NjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgbG9jYXRpb249InNhbXBsZTg1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgbG9jYXRpb249Ii4vc2FtcGxlNDE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiBsb2NhdGlvbj0iLlxzYW1wbGUxODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MWIyYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgbG9jYXRpb249InNhbXBsZTkyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgbG9jYXRpb249Ii4vc2FtcGxlOTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYjA0ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgbG9jYXRpb249InNhbXBsZTg5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCIgbG9jYXRpb249Ii4vc2FtcGxlMjUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIGxvY2F0aW9uPSIuXHNhbXBsZTc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWJiZmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIGxvY2F0aW9uPSJzYW1wbGUxNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiIGxvY2F0aW9uPSIuL3NhbXBsZTgyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgbG9jYXRpb249Ii5cc2FtcGxlNjM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTRjZTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIGxvY2F0aW9uPSJzYW1wbGU2OTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIGxvY2F0aW9uPSIuL3NhbXBsZTU0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgbG9jYXRpb249Ii5cc2FtcGxlNDAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDY3MGUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIGxvY2F0aW9uPSJzYW1wbGUzMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIGxvY2F0aW9uPSIuL3NhbXBsZTUwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgbG9jYXRpb249Ii5cc2FtcGxlNjE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc3YmY5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiBsb2NhdGlvbj0ic2FtcGxlODUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiBsb2NhdGlvbj0iLi9zYW1wbGUzNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIGxvY2F0aW9uPSIuXHNhbXBsZTkyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM0YWEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIGxvY2F0aW9uPSJzYW1wbGU2NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTg3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgbG9jYXRpb249Ii5cc2FtcGxlNDQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmFiYTgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgbG9jYXRpb249InNhbXBsZTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTYwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzYWY4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiBsb2NhdGlvbj0ic2FtcGxlNDcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiIGxvY2F0aW9uPSIuXHNhbXBsZTc3OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg4NWFiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiBsb2NhdGlvbj0ic2FtcGxlNzcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIGxvY2F0aW9uPSIuL3NhbXBsZTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiBsb2NhdGlvbj0iLlxzYW1wbGUzOTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMjMxMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgbG9jYXRpb249InNhbXBsZTUyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgbG9jYXRpb249Ii4vc2FtcGxlNTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU1NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZDVhOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgbG9jYXRpb249InNhbXBsZTU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgbG9jYXRpb249Ii4vc2FtcGxlODA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYWJiZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgbG9jYXRpb249InNhbXBsZTYzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgbG9jYXRpb249Ii4vc2FtcGxlMTkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YjljZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgbG9jYXRpb249InNhbXBsZTI0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgbG9jYXRpb249Ii4vc2FtcGxlNDgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiBsb2NhdGlvbj0iLlxzYW1wbGUxNDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZTkxZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0ic2FtcGxlMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIGxvY2F0aW9uPSIuL3NhbXBsZTY1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgbG9jYXRpb249Ii5cc2FtcGxlNzYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzkyZmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIGxvY2F0aW9uPSJzYW1wbGU4NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTgyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgbG9jYXRpb249Ii5cc2FtcGxlNTc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThhZmM5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiBsb2NhdGlvbj0ic2FtcGxlOTY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiBsb2NhdGlvbj0iLi9zYW1wbGU3NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIGxvY2F0aW9uPSIuXHNhbXBsZTYxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzcxMDExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIGxvY2F0aW9uPSJzYW1wbGU0ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTU5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgbG9jYXRpb249Ii5cc2FtcGxlODI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzhiMzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIGxvY2F0aW9uPSJzYW1wbGU1Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTk0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgbG9jYXRpb249Ii5cc2FtcGxlMjk1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2NjYjgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiIGxvY2F0aW9uPSJzYW1wbGU4OTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTk2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgbG9jYXRpb249Ii5cc2FtcGxlNzMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2I1ZDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIGxvY2F0aW9uPSJzYW1wbGU5NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIGxvY2F0aW9uPSIuL3NhbXBsZTI1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgbG9jYXRpb249Ii5cc2FtcGxlNDgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YThmMmY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249InNhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIiBsb2NhdGlvbj0iLi9zYW1wbGUzODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii5cc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOTE0YTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgbG9jYXRpb249InNhbXBsZTk0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgbG9jYXRpb249Ii4vc2FtcGxlODI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuXHNhbXBsZTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjA1YWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSJzYW1wbGU4MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTgwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCIgbG9jYXRpb249Ii5cc2FtcGxlNjA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGRiMjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249InNhbXBsZTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiBsb2NhdGlvbj0iLi9zYW1wbGU0NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIGxvY2F0aW9uPSIuXHNhbXBsZTk2OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUxMDNmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiBsb2NhdGlvbj0ic2FtcGxlNzI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiBsb2NhdGlvbj0iLi9zYW1wbGUyODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTMyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZmMjJmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiBsb2NhdGlvbj0ic2FtcGxlNjM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiBsb2NhdGlvbj0iLlxzYW1wbGU3NjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjNhNWEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIGxvY2F0aW9uPSJzYW1wbGUzNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIGxvY2F0aW9uPSIuL3NhbXBsZTI2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLlxzYW1wbGU4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTljYzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIGxvY2F0aW9uPSJzYW1wbGU1ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgbG9jYXRpb249Ii5cc2FtcGxlODM2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjAzZjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIGxvY2F0aW9uPSJzYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIGxvY2F0aW9uPSIuL3NhbXBsZTU3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiIgbG9jYXRpb249Ii5cc2FtcGxlMzkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjRkNjFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiIGxvY2F0aW9uPSJzYW1wbGU1ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTUwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgbG9jYXRpb249Ii5cc2FtcGxlOTUyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTdlZDcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIGxvY2F0aW9uPSJzYW1wbGU5NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTExNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgbG9jYXRpb249Ii5cc2FtcGxlMjE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGQ2ZTNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIGxvY2F0aW9uPSJzYW1wbGU0MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgbG9jYXRpb249Ii5cc2FtcGxlMjk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTQwYTBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgbG9jYXRpb249InNhbXBsZTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIiBsb2NhdGlvbj0iLi9zYW1wbGU2NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTI5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA2ZmQ4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiBsb2NhdGlvbj0ic2FtcGxlNzM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiBsb2NhdGlvbj0iLi9zYW1wbGU5NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgbG9jYXRpb249Ii5cc2FtcGxlNDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZjRmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgbG9jYXRpb249InNhbXBsZTE5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgbG9jYXRpb249Ii4vc2FtcGxlMzgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU4NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NDQ1ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgbG9jYXRpb249InNhbXBsZTQxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgbG9jYXRpb249Ii4vc2FtcGxlNzIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiBsb2NhdGlvbj0iLlxzYW1wbGU2NzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiYzE4NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgbG9jYXRpb249InNhbXBsZTc2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgbG9jYXRpb249Ii4vc2FtcGxlNTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Nzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc1N2EwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiBsb2NhdGlvbj0ic2FtcGxlMzY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU4NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIGxvY2F0aW9uPSIuXHNhbXBsZTI1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDA3MjA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIGxvY2F0aW9uPSJzYW1wbGU3NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIGxvY2F0aW9uPSIuL3NhbXBsZTk0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgbG9jYXRpb249Ii5cc2FtcGxlNzc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMmExNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyIgbG9jYXRpb249InNhbXBsZTQ1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgbG9jYXRpb249Ii4vc2FtcGxlNjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiBsb2NhdGlvbj0iLlxzYW1wbGU2NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMWU3YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgbG9jYXRpb249InNhbXBsZTUyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgbG9jYXRpb249Ii4vc2FtcGxlNTA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiBsb2NhdGlvbj0iLlxzYW1wbGUxNTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MjhmMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgbG9jYXRpb249InNhbXBsZTEzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgbG9jYXRpb249Ii4vc2FtcGxlNzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiBsb2NhdGlvbj0iLlxzYW1wbGU1NzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMTIzZTk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIGxvY2F0aW9uPSJzYW1wbGU5ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIGxvY2F0aW9uPSIuL3NhbXBsZTEzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgbG9jYXRpb249Ii5cc2FtcGxlMzQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjYwY2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiIGxvY2F0aW9uPSJzYW1wbGUyMDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIGxvY2F0aW9uPSIuL3NhbXBsZTM2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgbG9jYXRpb249Ii5cc2FtcGxlNzM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDMzMmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIGxvY2F0aW9uPSJzYW1wbGU0MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTY4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyIgbG9jYXRpb249Ii5cc2FtcGxlNjA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjY3MTlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIGxvY2F0aW9uPSJzYW1wbGU5MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiIgbG9jYXRpb249Ii5cc2FtcGxlMTQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDQwZTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIGxvY2F0aW9uPSJzYW1wbGU2NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgbG9jYXRpb249Ii5cc2FtcGxlMzU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWE0ZWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiIGxvY2F0aW9uPSJzYW1wbGU5OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIGxvY2F0aW9uPSIuL3NhbXBsZTc0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgbG9jYXRpb249Ii5cc2FtcGxlMTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWYyNWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIGxvY2F0aW9uPSJzYW1wbGUzMzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIGxvY2F0aW9uPSIuL3NhbXBsZTE4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgbG9jYXRpb249Ii5cc2FtcGxlNDEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyNTUyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiBsb2NhdGlvbj0ic2FtcGxlOTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiBsb2NhdGlvbj0iLi9zYW1wbGUxNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIGxvY2F0aW9uPSIuXHNhbXBsZTMyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzNlNGVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIGxvY2F0aW9uPSJzYW1wbGU2ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTkwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgbG9jYXRpb249Ii5cc2FtcGxlMjc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDczOWMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIGxvY2F0aW9uPSJzYW1wbGU3MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgbG9jYXRpb249Ii5cc2FtcGxlNzA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTU0MTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIGxvY2F0aW9uPSJzYW1wbGU4NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTkwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgbG9jYXRpb249Ii5cc2FtcGxlNDU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWYyMDM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgbG9jYXRpb249InNhbXBsZTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiBsb2NhdGlvbj0iLi9zYW1wbGUyNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIGxvY2F0aW9uPSIuXHNhbXBsZTgwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ2NDNhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiBsb2NhdGlvbj0ic2FtcGxlMjYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIGxvY2F0aW9uPSIuXHNhbXBsZTk0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIyMjc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiBsb2NhdGlvbj0ic2FtcGxlNDA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249Ii4vc2FtcGxlNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSIuXHNhbXBsZTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZmFhOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgbG9jYXRpb249InNhbXBsZTgwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgbG9jYXRpb249Ii4vc2FtcGxlMjAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYzJjMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSIgbG9jYXRpb249InNhbXBsZTk3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgbG9jYXRpb249Ii4vc2FtcGxlNzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU3NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YjJiZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyIgbG9jYXRpb249InNhbXBsZTMzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgbG9jYXRpb249Ii4vc2FtcGxlMzkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiBsb2NhdGlvbj0iLlxzYW1wbGUzMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NjgxYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgbG9jYXRpb249InNhbXBsZTg5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgbG9jYXRpb249Ii4vc2FtcGxlMTA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjZkZjU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIGxvY2F0aW9uPSJzYW1wbGU2NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTg4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgbG9jYXRpb249Ii5cc2FtcGxlOTMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NTEzY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiIgbG9jYXRpb249InNhbXBsZTg0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyIgbG9jYXRpb249Ii4vc2FtcGxlNzEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiBsb2NhdGlvbj0iLlxzYW1wbGU2NjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzODliNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgbG9jYXRpb249InNhbXBsZTIxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgbG9jYXRpb249Ii4vc2FtcGxlOTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiBsb2NhdGlvbj0iLlxzYW1wbGU2ODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZjU3NDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgbG9jYXRpb249InNhbXBsZTQwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249Ii4vc2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2Nzk4MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgbG9jYXRpb249InNhbXBsZTk3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgbG9jYXRpb249Ii4vc2FtcGxlMzc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiBsb2NhdGlvbj0iLlxzYW1wbGUzNzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMmMyNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgbG9jYXRpb249InNhbXBsZTk3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgbG9jYXRpb249Ii4vc2FtcGxlMzcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIGxvY2F0aW9uPSIuXHNhbXBsZTk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTQwNjgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIGxvY2F0aW9uPSJzYW1wbGUyMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249Ii5cc2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjliZjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiIGxvY2F0aW9uPSJzYW1wbGU3NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIGxvY2F0aW9uPSIuL3NhbXBsZTQ2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiBsb2NhdGlvbj0iLlxzYW1wbGU5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkMjRlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiBsb2NhdGlvbj0ic2FtcGxlMzk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiIGxvY2F0aW9uPSIuXHNhbXBsZTUyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NkYmMwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiBsb2NhdGlvbj0ic2FtcGxlNDM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiBsb2NhdGlvbj0iLi9zYW1wbGU3NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIGxvY2F0aW9uPSIuXHNhbXBsZTkxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVlMmViNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiBsb2NhdGlvbj0ic2FtcGxlNDY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiBsb2NhdGlvbj0iLi9zYW1wbGU1MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTE5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYmUxNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgbG9jYXRpb249InNhbXBsZTgxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuL3NhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTcxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODI0ZDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIGxvY2F0aW9uPSJzYW1wbGU2OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIGxvY2F0aW9uPSIuL3NhbXBsZTYyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5MzI1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2IiBsb2NhdGlvbj0ic2FtcGxlODM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiBsb2NhdGlvbj0iLi9zYW1wbGUzMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTgwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY3MmZkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiBsb2NhdGlvbj0ic2FtcGxlNjM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTgxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM0NGNiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiBsb2NhdGlvbj0ic2FtcGxlNzQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIGxvY2F0aW9uPSIuL3NhbXBsZTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiBsb2NhdGlvbj0iLlxzYW1wbGU0NDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZDBmYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0ic2FtcGxlODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIGxvY2F0aW9uPSIuL3NhbXBsZTU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgbG9jYXRpb249Ii5cc2FtcGxlODU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTQ2ODUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgbG9jYXRpb249InNhbXBsZTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIGxvY2F0aW9uPSIuXHNhbXBsZTg5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg3YmU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiBsb2NhdGlvbj0ic2FtcGxlMzg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiBsb2NhdGlvbj0iLi9zYW1wbGUyMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIGxvY2F0aW9uPSIuXHNhbXBsZTg2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk4YzhhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiBsb2NhdGlvbj0ic2FtcGxlMjY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiBsb2NhdGlvbj0iLi9zYW1wbGU3ODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIGxvY2F0aW9uPSIuXHNhbXBsZTU2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU1MTE4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3IiBsb2NhdGlvbj0ic2FtcGxlNjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiBsb2NhdGlvbj0iLi9zYW1wbGUxNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTg1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5NTkxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiBsb2NhdGlvbj0ic2FtcGxlNjcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiBsb2NhdGlvbj0iLi9zYW1wbGU4MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIGxvY2F0aW9uPSIuXHNhbXBsZTY2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MWJjMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgbG9jYXRpb249InNhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249Ii4vc2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZiZGM3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiBsb2NhdGlvbj0ic2FtcGxlOTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiBsb2NhdGlvbj0iLi9zYW1wbGU1MTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIGxvY2F0aW9uPSIuXHNhbXBsZTI2OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlhNDY3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiBsb2NhdGlvbj0ic2FtcGxlNzQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSIuL3NhbXBsZTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiBsb2NhdGlvbj0iLlxzYW1wbGUxODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOThjZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCIgbG9jYXRpb249InNhbXBsZTYyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgbG9jYXRpb249Ii4vc2FtcGxlODc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYWJmNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgbG9jYXRpb249InNhbXBsZTUxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgbG9jYXRpb249Ii4vc2FtcGxlMzMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiOTQwOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgbG9jYXRpb249InNhbXBsZTM2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgbG9jYXRpb249Ii5cc2FtcGxlMTI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTJhZDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIGxvY2F0aW9uPSJzYW1wbGU2NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgbG9jYXRpb249Ii5cc2FtcGxlMzYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzlkZjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgbG9jYXRpb249InNhbXBsZTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiBsb2NhdGlvbj0iLi9zYW1wbGUzNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIGxvY2F0aW9uPSIuXHNhbXBsZTIwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEwNDExNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiBsb2NhdGlvbj0ic2FtcGxlNzgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiBsb2NhdGlvbj0iLi9zYW1wbGUyOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIGxvY2F0aW9uPSIuXHNhbXBsZTg5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U4ZjFjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0ic2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiBsb2NhdGlvbj0iLi9zYW1wbGUxNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249Ii5cc2FtcGxlNjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZDBjNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgbG9jYXRpb249InNhbXBsZTQzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgbG9jYXRpb249Ii4vc2FtcGxlNzMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTdhYWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciIGxvY2F0aW9uPSJzYW1wbGUzOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTE1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgbG9jYXRpb249Ii5cc2FtcGxlMzkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMWM4NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgbG9jYXRpb249InNhbXBsZTM1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgbG9jYXRpb249Ii4vc2FtcGxlNjk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiBsb2NhdGlvbj0iLlxzYW1wbGU0OTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYjk1ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0ic2FtcGxlMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIGxvY2F0aW9uPSIuL3NhbXBsZTU0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249Ii5cc2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmUxMWVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIGxvY2F0aW9uPSJzYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgbG9jYXRpb249Ii5cc2FtcGxlMzg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmI1NTk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiIGxvY2F0aW9uPSJzYW1wbGU1MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii4vc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249Ii5cc2FtcGxlODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5N2Q0OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgbG9jYXRpb249InNhbXBsZTM3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgbG9jYXRpb249Ii4vc2FtcGxlMTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiBsb2NhdGlvbj0iLlxzYW1wbGU5NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjIyYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgbG9jYXRpb249InNhbXBsZTUwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgbG9jYXRpb249Ii4vc2FtcGxlNjIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTZhNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgbG9jYXRpb249InNhbXBsZTk2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgbG9jYXRpb249Ii4vc2FtcGxlNTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiBsb2NhdGlvbj0iLlxzYW1wbGUzMjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNDU1NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgbG9jYXRpb249InNhbXBsZTEwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgbG9jYXRpb249Ii4vc2FtcGxlNjE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiBsb2NhdGlvbj0iLlxzYW1wbGU5OTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NmUyOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgbG9jYXRpb249InNhbXBsZTMwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgbG9jYXRpb249Ii4vc2FtcGxlMzY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiBsb2NhdGlvbj0iLlxzYW1wbGU2MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NTc1OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249InNhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgbG9jYXRpb249Ii4vc2FtcGxlMzUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTlhZDI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIGxvY2F0aW9uPSJzYW1wbGU5ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgbG9jYXRpb249Ii5cc2FtcGxlNDgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzODNjM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiBsb2NhdGlvbj0ic2FtcGxlMjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIGxvY2F0aW9uPSIuL3NhbXBsZTY4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgbG9jYXRpb249Ii5cc2FtcGxlMTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTg0ZTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIGxvY2F0aW9uPSJzYW1wbGUyMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiIGxvY2F0aW9uPSIuL3NhbXBsZTYyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgbG9jYXRpb249Ii5cc2FtcGxlMjU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzMxNjU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249InNhbXBsZTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIiBsb2NhdGlvbj0iLlxzYW1wbGU3NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNzM4NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgbG9jYXRpb249InNhbXBsZTkwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgbG9jYXRpb249Ii4vc2FtcGxlODQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MjE0YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgbG9jYXRpb249InNhbXBsZTM0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgbG9jYXRpb249Ii4vc2FtcGxlMzQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiBsb2NhdGlvbj0iLlxzYW1wbGUxMDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMzNmMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSJzYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIGxvY2F0aW9uPSIuL3NhbXBsZTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiBsb2NhdGlvbj0iLlxzYW1wbGU5NjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MDQ1OTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgbG9jYXRpb249InNhbXBsZTIwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgbG9jYXRpb249Ii4vc2FtcGxlNDE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYmQwNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgbG9jYXRpb249InNhbXBsZTU0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgbG9jYXRpb249Ii4vc2FtcGxlMzU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNjk5MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgbG9jYXRpb249InNhbXBsZTY5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiBsb2NhdGlvbj0iLi9zYW1wbGUzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgbG9jYXRpb249Ii5cc2FtcGxlMjQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGRlN2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiIGxvY2F0aW9uPSJzYW1wbGU1MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSIuL3NhbXBsZTgzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgbG9jYXRpb249Ii5cc2FtcGxlMTI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM1ZTFhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3IiBsb2NhdGlvbj0ic2FtcGxlOTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTM5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmYxNzg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIGxvY2F0aW9uPSJzYW1wbGU5Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249Ii4vc2FtcGxlNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTc4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM5MGE0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiBsb2NhdGlvbj0ic2FtcGxlNzk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2IiBsb2NhdGlvbj0iLi9zYW1wbGUyOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIGxvY2F0aW9uPSIuXHNhbXBsZTY3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlNDBlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiBsb2NhdGlvbj0ic2FtcGxlODA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIGxvY2F0aW9uPSIuXHNhbXBsZTEzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5ZDQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiBsb2NhdGlvbj0ic2FtcGxlODk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiBsb2NhdGlvbj0iLi9zYW1wbGU5Nzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTQzNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNjZTlkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiBsb2NhdGlvbj0ic2FtcGxlNDk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiBsb2NhdGlvbj0iLi9zYW1wbGUyMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgbG9jYXRpb249Ii5cc2FtcGxlMjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNjNlODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgbG9jYXRpb249InNhbXBsZTUwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgbG9jYXRpb249Ii4vc2FtcGxlNzQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ODYyYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiIgbG9jYXRpb249InNhbXBsZTU1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgbG9jYXRpb249Ii4vc2FtcGxlMzcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZjRiYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgbG9jYXRpb249InNhbXBsZTIxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgbG9jYXRpb249Ii4vc2FtcGxlMTAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIGxvY2F0aW9uPSIuXHNhbXBsZTM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTUxMjBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIGxvY2F0aW9uPSJzYW1wbGUzODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIGxvY2F0aW9uPSIuL3NhbXBsZTExNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgbG9jYXRpb249Ii5cc2FtcGxlNjY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWU4YmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIGxvY2F0aW9uPSJzYW1wbGU0MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIGxvY2F0aW9uPSIuL3NhbXBsZTc0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgbG9jYXRpb249Ii5cc2FtcGxlODYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3ODU0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiBsb2NhdGlvbj0ic2FtcGxlMzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIGxvY2F0aW9uPSIuXHNhbXBsZTgyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGY0MDVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIGxvY2F0aW9uPSJzYW1wbGUzNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgbG9jYXRpb249Ii5cc2FtcGxlOTE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGY1ZmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSJzYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgbG9jYXRpb249Ii5cc2FtcGxlOTY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzZmNDU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIGxvY2F0aW9uPSJzYW1wbGU2MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgbG9jYXRpb249Ii5cc2FtcGxlMjU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDI5ZGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIGxvY2F0aW9uPSJzYW1wbGUxMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSIuL3NhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgbG9jYXRpb249Ii5cc2FtcGxlMjM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDc0NDNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIGxvY2F0aW9uPSJzYW1wbGU0NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIGxvY2F0aW9uPSIuL3NhbXBsZTczMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgbG9jYXRpb249Ii5cc2FtcGxlOTY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjBjNjJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0ic2FtcGxlNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249Ii4vc2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1IiBsb2NhdGlvbj0iLlxzYW1wbGU2MDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNWQ0MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgbG9jYXRpb249InNhbXBsZTIxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgbG9jYXRpb249Ii4vc2FtcGxlOTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MGFmOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiBsb2NhdGlvbj0ic2FtcGxlMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiIGxvY2F0aW9uPSIuL3NhbXBsZTkyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgbG9jYXRpb249Ii5cc2FtcGxlMjM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGM1N2UyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIGxvY2F0aW9uPSJzYW1wbGUxNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249Ii4vc2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIGxvY2F0aW9uPSIuXHNhbXBsZTI1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUwZWExOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0ic2FtcGxlNjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiIGxvY2F0aW9uPSIuXHNhbXBsZTEwMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MDA5MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgbG9jYXRpb249InNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgbG9jYXRpb249Ii4vc2FtcGxlNTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiBsb2NhdGlvbj0iLlxzYW1wbGUxMDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM2YTc0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIiBsb2NhdGlvbj0ic2FtcGxlODMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiBsb2NhdGlvbj0iLi9zYW1wbGU4NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgbG9jYXRpb249Ii5cc2FtcGxlMjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMjUzYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyIgbG9jYXRpb249InNhbXBsZTMwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgbG9jYXRpb249Ii4vc2FtcGxlNjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYjBjYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgbG9jYXRpb249InNhbXBsZTk5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgbG9jYXRpb249Ii4vc2FtcGxlMTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIiBsb2NhdGlvbj0iLlxzYW1wbGUxNzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MjBiNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgbG9jYXRpb249InNhbXBsZTEyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0iLi9zYW1wbGU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgbG9jYXRpb249Ii5cc2FtcGxlMTg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yjk5NzhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiIGxvY2F0aW9uPSJzYW1wbGU3NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgbG9jYXRpb249Ii5cc2FtcGxlNzMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDM0N2M1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249InNhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiBsb2NhdGlvbj0iLi9zYW1wbGU1MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI4N2NmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIGxvY2F0aW9uPSJzYW1wbGUzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgbG9jYXRpb249Ii4vc2FtcGxlNzgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNjUxZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgbG9jYXRpb249InNhbXBsZTM1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgbG9jYXRpb249Ii4vc2FtcGxlODk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5IiBsb2NhdGlvbj0iLlxzYW1wbGUyNzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNzkzMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgbG9jYXRpb249InNhbXBsZTQ5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgbG9jYXRpb249Ii4vc2FtcGxlMTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU0NDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYzEyNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgbG9jYXRpb249InNhbXBsZTQwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgbG9jYXRpb249Ii4vc2FtcGxlNTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhMjljNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiBsb2NhdGlvbj0ic2FtcGxlMjEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0iLi9zYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIGxvY2F0aW9uPSIuXHNhbXBsZTY2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmJlYjNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIGxvY2F0aW9uPSJzYW1wbGUxMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIGxvY2F0aW9uPSIuL3NhbXBsZTM5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgbG9jYXRpb249Ii5cc2FtcGxlMTg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNjBhZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgbG9jYXRpb249InNhbXBsZTEzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgbG9jYXRpb249Ii4vc2FtcGxlMzQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSIuXHNhbXBsZTU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjJhYTUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIGxvY2F0aW9uPSJzYW1wbGU1NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIGxvY2F0aW9uPSIuXHNhbXBsZTU4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY1NzJhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiBsb2NhdGlvbj0ic2FtcGxlNTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIGxvY2F0aW9uPSIuXHNhbXBsZTMyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RmYzg2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiBsb2NhdGlvbj0ic2FtcGxlMTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiBsb2NhdGlvbj0iLi9zYW1wbGU0OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIGxvY2F0aW9uPSIuXHNhbXBsZTE5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJlYjI4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiBsb2NhdGlvbj0ic2FtcGxlMTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIGxvY2F0aW9uPSIuXHNhbXBsZTczMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmMmQ4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiBsb2NhdGlvbj0ic2FtcGxlOTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5IiBsb2NhdGlvbj0iLi9zYW1wbGUxNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIGxvY2F0aW9uPSIuXHNhbXBsZTg2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzNDhlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiBsb2NhdGlvbj0ic2FtcGxlODM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiBsb2NhdGlvbj0iLi9zYW1wbGU5OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIGxvY2F0aW9uPSIuXHNhbXBsZTI2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3MThkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiBsb2NhdGlvbj0ic2FtcGxlOTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTYwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTViYmNmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIiBsb2NhdGlvbj0ic2FtcGxlNjQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiBsb2NhdGlvbj0iLi9zYW1wbGU5ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIGxvY2F0aW9uPSIuXHNhbXBsZTY4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdjNmY4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiBsb2NhdGlvbj0ic2FtcGxlMzY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiBsb2NhdGlvbj0iLi9zYW1wbGU0MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIGxvY2F0aW9uPSIuXHNhbXBsZTE1Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZTE2NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgbG9jYXRpb249InNhbXBsZTYxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgbG9jYXRpb249Ii4vc2FtcGxlODcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiBsb2NhdGlvbj0iLlxzYW1wbGU0MTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMwMTYzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiBsb2NhdGlvbj0ic2FtcGxlOTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgbG9jYXRpb249Ii5cc2FtcGxlNjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyOTk5ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgbG9jYXRpb249InNhbXBsZTM0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgbG9jYXRpb249Ii4vc2FtcGxlMTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMWU4MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgbG9jYXRpb249InNhbXBsZTUwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgbG9jYXRpb249Ii4vc2FtcGxlMTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiBsb2NhdGlvbj0iLlxzYW1wbGU5MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDU3N2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiBsb2NhdGlvbj0ic2FtcGxlNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIGxvY2F0aW9uPSIuL3NhbXBsZTI3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgbG9jYXRpb249Ii5cc2FtcGxlNjQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTE1YTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIGxvY2F0aW9uPSJzYW1wbGU4Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTQyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgbG9jYXRpb249Ii5cc2FtcGxlMjA0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzc2NmNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgbG9jYXRpb249InNhbXBsZTY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiBsb2NhdGlvbj0iLi9zYW1wbGUxOTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIGxvY2F0aW9uPSIuXHNhbXBsZTg5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThmZTEzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiBsb2NhdGlvbj0ic2FtcGxlMTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIGxvY2F0aW9uPSIuXHNhbXBsZTQxOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlkNzYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiBsb2NhdGlvbj0ic2FtcGxlNDYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiBsb2NhdGlvbj0iLi9zYW1wbGU5MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIGxvY2F0aW9uPSIuXHNhbXBsZTc2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM2MDM3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiBsb2NhdGlvbj0ic2FtcGxlMTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0iLi9zYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIGxvY2F0aW9uPSIuXHNhbXBsZTI1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyOGRmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiBsb2NhdGlvbj0ic2FtcGxlNDM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIGxvY2F0aW9uPSIuXHNhbXBsZTk5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYThmYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiBsb2NhdGlvbj0ic2FtcGxlNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIGxvY2F0aW9uPSIuL3NhbXBsZTk0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgbG9jYXRpb249Ii5cc2FtcGxlNTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZDVkNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgbG9jYXRpb249InNhbXBsZTExMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgbG9jYXRpb249Ii4vc2FtcGxlNjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIGxvY2F0aW9uPSIuXHNhbXBsZTM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjhlZTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIGxvY2F0aW9uPSJzYW1wbGU1NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIGxvY2F0aW9uPSIuL3NhbXBsZTIwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgbG9jYXRpb249Ii5cc2FtcGxlODgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODQzNjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgbG9jYXRpb249InNhbXBsZTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIGxvY2F0aW9uPSIuL3NhbXBsZTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIiBsb2NhdGlvbj0iLlxzYW1wbGU2NjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYTNjNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgbG9jYXRpb249InNhbXBsZTQ2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgbG9jYXRpb249Ii4vc2FtcGxlODI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiBsb2NhdGlvbj0iLlxzYW1wbGU1MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZTZiMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgbG9jYXRpb249InNhbXBsZTM3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSIgbG9jYXRpb249Ii4vc2FtcGxlNDYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YmM5NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyIgbG9jYXRpb249InNhbXBsZTMzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiBsb2NhdGlvbj0iLi9zYW1wbGU4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgbG9jYXRpb249Ii5cc2FtcGxlMTE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTFkNzdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIGxvY2F0aW9uPSJzYW1wbGU3Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIGxvY2F0aW9uPSIuL3NhbXBsZTU5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249Ii5cc2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmE0YzU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIGxvY2F0aW9uPSJzYW1wbGU1ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTc0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgbG9jYXRpb249Ii5cc2FtcGxlMjgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjA2YmQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIGxvY2F0aW9uPSJzYW1wbGU5MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTYyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgbG9jYXRpb249Ii5cc2FtcGxlMTE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTVkOTJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIGxvY2F0aW9uPSJzYW1wbGU4OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIGxvY2F0aW9uPSIuL3NhbXBsZTM1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgbG9jYXRpb249Ii5cc2FtcGxlODA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkwYmQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiBsb2NhdGlvbj0ic2FtcGxlMjcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgbG9jYXRpb249Ii5cc2FtcGxlOTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThlZjVhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiBsb2NhdGlvbj0ic2FtcGxlNjUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTYxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY3ZjFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiBsb2NhdGlvbj0ic2FtcGxlMTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiBsb2NhdGlvbj0iLlxzYW1wbGUzMjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0N2RiM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgbG9jYXRpb249InNhbXBsZTg1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgbG9jYXRpb249Ii4vc2FtcGxlNTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1M2RmNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgbG9jYXRpb249InNhbXBsZTcyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgbG9jYXRpb249Ii4vc2FtcGxlMjA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MDcwMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgbG9jYXRpb249InNhbXBsZTU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiBsb2NhdGlvbj0iLi9zYW1wbGUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgbG9jYXRpb249Ii5cc2FtcGxlMjgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDlmOGRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIGxvY2F0aW9uPSJzYW1wbGU5NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTMxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgbG9jYXRpb249Ii5cc2FtcGxlNzU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjdjZDRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249InNhbXBsZTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIGxvY2F0aW9uPSIuXHNhbXBsZTk3Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUyOTcyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiBsb2NhdGlvbj0ic2FtcGxlMzE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiBsb2NhdGlvbj0iLi9zYW1wbGU2NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIGxvY2F0aW9uPSIuXHNhbXBsZTMzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2ZWJjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiBsb2NhdGlvbj0ic2FtcGxlMTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIGxvY2F0aW9uPSIuXHNhbXBsZTI1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1YmJkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiBsb2NhdGlvbj0ic2FtcGxlMTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii4vc2FtcGxlOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgbG9jYXRpb249Ii5cc2FtcGxlNDcwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVlY2I4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiBsb2NhdGlvbj0ic2FtcGxlNDMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiBsb2NhdGlvbj0iLi9zYW1wbGUzNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIGxvY2F0aW9uPSIuXHNhbXBsZTMzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTQ2M2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIGxvY2F0aW9uPSJzYW1wbGU2NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTU0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCIgbG9jYXRpb249Ii5cc2FtcGxlMzk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjE0NGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIGxvY2F0aW9uPSJzYW1wbGU3ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciIGxvY2F0aW9uPSIuL3NhbXBsZTU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgbG9jYXRpb249Ii5cc2FtcGxlNDY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzEzZmE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiIGxvY2F0aW9uPSJzYW1wbGU3ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIGxvY2F0aW9uPSIuL3NhbXBsZTE4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgbG9jYXRpb249Ii5cc2FtcGxlNjQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjY0M2ExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiIGxvY2F0aW9uPSJzYW1wbGUyNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIGxvY2F0aW9uPSIuL3NhbXBsZTc4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0iLlxzYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVlYWUxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiBsb2NhdGlvbj0ic2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTIyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI0NWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiBsb2NhdGlvbj0ic2FtcGxlNjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiBsb2NhdGlvbj0iLi9zYW1wbGUzOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTcwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEzMTNlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiBsb2NhdGlvbj0ic2FtcGxlMjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIGxvY2F0aW9uPSIuXHNhbXBsZTg3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg0Y2QzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSJzYW1wbGU3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgbG9jYXRpb249Ii4vc2FtcGxlMTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0IiBsb2NhdGlvbj0iLlxzYW1wbGU0MjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMmE5YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCIgbG9jYXRpb249InNhbXBsZTI3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgbG9jYXRpb249Ii4vc2FtcGxlNDQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NGY5ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiBsb2NhdGlvbj0ic2FtcGxlNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIGxvY2F0aW9uPSIuL3NhbXBsZTk5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyIgbG9jYXRpb249Ii5cc2FtcGxlMzgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4NzA1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0ic2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiBsb2NhdGlvbj0iLi9zYW1wbGU1Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIGxvY2F0aW9uPSIuXHNhbXBsZTk1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTZlOTAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIGxvY2F0aW9uPSJzYW1wbGU2NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTExMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgbG9jYXRpb249Ii5cc2FtcGxlNDIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmY0YmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIGxvY2F0aW9uPSJzYW1wbGU0NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIGxvY2F0aW9uPSIuL3NhbXBsZTE5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgbG9jYXRpb249Ii5cc2FtcGxlMTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjdmMjgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIGxvY2F0aW9uPSJzYW1wbGUzMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIGxvY2F0aW9uPSIuL3NhbXBsZTE1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiIgbG9jYXRpb249Ii5cc2FtcGxlNjMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmQ3ZDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIGxvY2F0aW9uPSJzYW1wbGUxMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTcyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiBsb2NhdGlvbj0iLlxzYW1wbGUxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYwZWVmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiBsb2NhdGlvbj0ic2FtcGxlMjQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiBsb2NhdGlvbj0iLi9zYW1wbGU2MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjYjQ2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIGxvY2F0aW9uPSJzYW1wbGU1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgbG9jYXRpb249Ii4vc2FtcGxlOTAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiBsb2NhdGlvbj0iLlxzYW1wbGU4MjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZGUxZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCIgbG9jYXRpb249InNhbXBsZTI2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgbG9jYXRpb249Ii4vc2FtcGxlMzYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiBsb2NhdGlvbj0iLlxzYW1wbGU4NDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOGJhYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCIgbG9jYXRpb249InNhbXBsZTg3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgbG9jYXRpb249Ii4vc2FtcGxlNzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYjFjZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgbG9jYXRpb249InNhbXBsZTE1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgbG9jYXRpb249Ii4vc2FtcGxlNzQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZGM5MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgbG9jYXRpb249InNhbXBsZTgwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgbG9jYXRpb249Ii4vc2FtcGxlODg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiBsb2NhdGlvbj0iLlxzYW1wbGUyMjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzEyY2NhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIGxvY2F0aW9uPSJzYW1wbGU3Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIGxvY2F0aW9uPSIuL3NhbXBsZTYzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgbG9jYXRpb249Ii5cc2FtcGxlMzczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYmEwZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgbG9jYXRpb249InNhbXBsZTMzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgbG9jYXRpb249Ii4vc2FtcGxlMTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiBsb2NhdGlvbj0iLlxzYW1wbGUxODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MGIwMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyIgbG9jYXRpb249InNhbXBsZTg3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgbG9jYXRpb249Ii4vc2FtcGxlODA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiBsb2NhdGlvbj0iLlxzYW1wbGUzNjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZjQ3ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgbG9jYXRpb249InNhbXBsZTQxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBjMjQwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiBsb2NhdGlvbj0ic2FtcGxlNDQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiBsb2NhdGlvbj0iLi9zYW1wbGU2NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTI0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2YWJlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSJzYW1wbGU0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgbG9jYXRpb249Ii4vc2FtcGxlNTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIGxvY2F0aW9uPSIuXHNhbXBsZTE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDA2NjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0ic2FtcGxlOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgbG9jYXRpb249Ii4vc2FtcGxlMTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiBsb2NhdGlvbj0iLlxzYW1wbGUyNzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5OWU3OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgbG9jYXRpb249InNhbXBsZTQxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgbG9jYXRpb249Ii4vc2FtcGxlMTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMjJmM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgbG9jYXRpb249InNhbXBsZTI1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgbG9jYXRpb249Ii4vc2FtcGxlNzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiBsb2NhdGlvbj0iLlxzYW1wbGU3MDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNTg5ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgbG9jYXRpb249InNhbXBsZTY0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgbG9jYXRpb249Ii4vc2FtcGxlMzc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiBsb2NhdGlvbj0iLlxzYW1wbGU0ODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NTRjZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgbG9jYXRpb249InNhbXBsZTI1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249Ii4vc2FtcGxlMzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiBsb2NhdGlvbj0iLlxzYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2FlYzA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0ic2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgbG9jYXRpb249Ii4vc2FtcGxlMjM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIiBsb2NhdGlvbj0iLlxzYW1wbGUxODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjMDNjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiBsb2NhdGlvbj0ic2FtcGxlODUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIiBsb2NhdGlvbj0iLi9zYW1wbGU3NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgbG9jYXRpb249Ii5cc2FtcGxlNTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNjFhYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0ic2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIGxvY2F0aW9uPSIuL3NhbXBsZTEwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgbG9jYXRpb249Ii5cc2FtcGxlMzg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmE1MzY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIGxvY2F0aW9uPSJzYW1wbGUxMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0iLlxzYW1wbGU2OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyNmU4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiBsb2NhdGlvbj0ic2FtcGxlNDk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiBsb2NhdGlvbj0iLi9zYW1wbGU5MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIGxvY2F0aW9uPSIuXHNhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhNTNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiBsb2NhdGlvbj0ic2FtcGxlNjAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiBsb2NhdGlvbj0iLi9zYW1wbGU3ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIGxvY2F0aW9uPSIuXHNhbXBsZTE2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRkY2Q5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiBsb2NhdGlvbj0ic2FtcGxlNjE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5IiBsb2NhdGlvbj0iLi9zYW1wbGU4Nzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIGxvY2F0aW9uPSIuXHNhbXBsZTE0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmNzYyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiBsb2NhdGlvbj0ic2FtcGxlOTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1IiBsb2NhdGlvbj0iLi9zYW1wbGUyMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIGxvY2F0aW9uPSIuXHNhbXBsZTIzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNhMDMwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiBsb2NhdGlvbj0ic2FtcGxlNDc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiBsb2NhdGlvbj0iLi9zYW1wbGU4ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSIuXHNhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEzOWYzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiBsb2NhdGlvbj0ic2FtcGxlNjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiBsb2NhdGlvbj0iLi9zYW1wbGU4MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTI1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQzYmUzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIGxvY2F0aW9uPSJzYW1wbGU2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgbG9jYXRpb249Ii4vc2FtcGxlNDYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU4NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTgwZjRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIGxvY2F0aW9uPSJzYW1wbGU5NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTcwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgbG9jYXRpb249Ii5cc2FtcGxlNTk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NjkwMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiBsb2NhdGlvbj0ic2FtcGxlOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTc5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249Ii5cc2FtcGxlODg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWM3ZDRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIGxvY2F0aW9uPSJzYW1wbGUxNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTUyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgbG9jYXRpb249Ii5cc2FtcGxlMTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTM2N2JiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIGxvY2F0aW9uPSJzYW1wbGUyNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgbG9jYXRpb249Ii5cc2FtcGxlNjc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzdmNTJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIGxvY2F0aW9uPSJzYW1wbGU1NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgbG9jYXRpb249Ii5cc2FtcGxlMTAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTJmZTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIGxvY2F0aW9uPSJzYW1wbGU0NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIGxvY2F0aW9uPSIuL3NhbXBsZTMyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0iLlxzYW1wbGU5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY3ZDBiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiBsb2NhdGlvbj0ic2FtcGxlMjM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNiOWNjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4IiBsb2NhdGlvbj0ic2FtcGxlMTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIGxvY2F0aW9uPSIuXHNhbXBsZTY3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyNDQxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiBsb2NhdGlvbj0ic2FtcGxlMTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIGxvY2F0aW9uPSIuXHNhbXBsZTI2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE4YWM0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiBsb2NhdGlvbj0ic2FtcGxlNjUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiBsb2NhdGlvbj0iLi9zYW1wbGUzMjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTgzNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRiNzA1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiBsb2NhdGlvbj0ic2FtcGxlMzc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTkwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYTJlODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgbG9jYXRpb249InNhbXBsZTgxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgbG9jYXRpb249Ii4vc2FtcGxlMTExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1IiBsb2NhdGlvbj0iLlxzYW1wbGU3MjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkzNjI1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiBsb2NhdGlvbj0ic2FtcGxlMzg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiBsb2NhdGlvbj0iLi9zYW1wbGU2NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiIGxvY2F0aW9uPSIuXHNhbXBsZTM2MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM4YzE5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0ic2FtcGxlMjQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIGxvY2F0aW9uPSIuXHNhbXBsZTgyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM3MmMxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiBsb2NhdGlvbj0ic2FtcGxlMjc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmODA0OWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgbG9jYXRpb249InNhbXBsZTIzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgbG9jYXRpb249Ii4vc2FtcGxlNjQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii5cc2FtcGxlOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTViNmQzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIGxvY2F0aW9uPSJzYW1wbGU1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgbG9jYXRpb249Ii4vc2FtcGxlMTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSIuXHNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjJlYWNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIGxvY2F0aW9uPSJzYW1wbGU2MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIGxvY2F0aW9uPSIuL3NhbXBsZTg0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgbG9jYXRpb249Ii5cc2FtcGxlODYwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDdhNzYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIGxvY2F0aW9uPSJzYW1wbGU4ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTI0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgbG9jYXRpb249Ii5cc2FtcGxlMzA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzZmZDhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249InNhbXBsZTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgbG9jYXRpb249Ii4vc2FtcGxlMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgbG9jYXRpb249Ii5cc2FtcGxlODA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDcwMWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIGxvY2F0aW9uPSJzYW1wbGU5MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIGxvY2F0aW9uPSIuL3NhbXBsZTczMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgbG9jYXRpb249Ii5cc2FtcGxlMzgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGZhZWExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgbG9jYXRpb249InNhbXBsZTM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiBsb2NhdGlvbj0iLi9zYW1wbGU0OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTYyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODAwNzM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgbG9jYXRpb249InNhbXBsZTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiBsb2NhdGlvbj0iLi9zYW1wbGU2MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTIyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWJjMzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIGxvY2F0aW9uPSJzYW1wbGU5MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIGxvY2F0aW9uPSIuL3NhbXBsZTc2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgbG9jYXRpb249Ii5cc2FtcGxlMzU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmODU2ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgbG9jYXRpb249InNhbXBsZTcwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgbG9jYXRpb249Ii4vc2FtcGxlMjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiBsb2NhdGlvbj0iLlxzYW1wbGU5ODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZDRhNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiBsb2NhdGlvbj0ic2FtcGxlOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIGxvY2F0aW9uPSIuL3NhbXBsZTExNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgbG9jYXRpb249Ii5cc2FtcGxlODg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2M5ODNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIGxvY2F0aW9uPSJzYW1wbGU4NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTYzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgbG9jYXRpb249Ii5cc2FtcGxlNzIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWM2NTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIGxvY2F0aW9uPSJzYW1wbGU5MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIGxvY2F0aW9uPSIuL3NhbXBsZTMxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyIgbG9jYXRpb249Ii5cc2FtcGxlNjU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAwZDBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgbG9jYXRpb249InNhbXBsZTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4IiBsb2NhdGlvbj0iLi9zYW1wbGU5OTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiIGxvY2F0aW9uPSIuXHNhbXBsZTEyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmNTk5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiBsb2NhdGlvbj0ic2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiBsb2NhdGlvbj0iLi9zYW1wbGUxMDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5YmJjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiBsb2NhdGlvbj0ic2FtcGxlMjY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIGxvY2F0aW9uPSIuXHNhbXBsZTMzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4OWYxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIiBsb2NhdGlvbj0ic2FtcGxlMTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiBsb2NhdGlvbj0iLi9zYW1wbGU0MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIGxvY2F0aW9uPSIuXHNhbXBsZTM0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJiZDYyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiBsb2NhdGlvbj0ic2FtcGxlMzM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiBsb2NhdGlvbj0iLi9zYW1wbGU2MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIGxvY2F0aW9uPSIuXHNhbXBsZTUyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJiM2UxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiBsb2NhdGlvbj0ic2FtcGxlNTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiBsb2NhdGlvbj0iLi9zYW1wbGU5MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIGxvY2F0aW9uPSIuXHNhbXBsZTE0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxODhkNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgbG9jYXRpb249InNhbXBsZTYxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgbG9jYXRpb249Ii4vc2FtcGxlMjEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMxNzA3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSJzYW1wbGUyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgbG9jYXRpb249Ii4vc2FtcGxlNzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5Njg3ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgbG9jYXRpb249InNhbXBsZTU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgbG9jYXRpb249Ii4vc2FtcGxlNDY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiBsb2NhdGlvbj0iLlxzYW1wbGU0Njkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MWVkMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgbG9jYXRpb249InNhbXBsZTk0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgbG9jYXRpb249Ii5cc2FtcGxlNjA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzY3YjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIGxvY2F0aW9uPSJzYW1wbGU5NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii4vc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIGxvY2F0aW9uPSIuXHNhbXBsZTMwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZiOGQ5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiBsb2NhdGlvbj0ic2FtcGxlNDQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkxZjBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiBsb2NhdGlvbj0ic2FtcGxlNzkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU0NDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMjIzMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgbG9jYXRpb249InNhbXBsZTYzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgbG9jYXRpb249Ii4vc2FtcGxlMTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiBsb2NhdGlvbj0iLlxzYW1wbGU3MDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMzZhYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgbG9jYXRpb249InNhbXBsZTE3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgbG9jYXRpb249Ii4vc2FtcGxlMzE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjcyM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgbG9jYXRpb249InNhbXBsZTQwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgbG9jYXRpb249Ii4vc2FtcGxlMzc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZDI5ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgbG9jYXRpb249InNhbXBsZTQ1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0iLi9zYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyIgbG9jYXRpb249Ii5cc2FtcGxlNDU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ2NzhhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSJzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgbG9jYXRpb249Ii4vc2FtcGxlNjA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiBsb2NhdGlvbj0iLlxzYW1wbGUzNTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU1Mzk5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSJzYW1wbGUyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgbG9jYXRpb249Ii4vc2FtcGxlOTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiBsb2NhdGlvbj0iLlxzYW1wbGU3MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNTAzOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgbG9jYXRpb249InNhbXBsZTU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIGxvY2F0aW9uPSIuL3NhbXBsZTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIGxvY2F0aW9uPSIuXHNhbXBsZTQ3Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE2MGYxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiBsb2NhdGlvbj0ic2FtcGxlODk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiBsb2NhdGlvbj0iLi9zYW1wbGU4Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTIyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk3NzEzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIiBsb2NhdGlvbj0ic2FtcGxlNTAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIGxvY2F0aW9uPSIuXHNhbXBsZTY5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZhOTFhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiBsb2NhdGlvbj0ic2FtcGxlNzc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiBsb2NhdGlvbj0iLi9zYW1wbGU4NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSIuXHNhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3NzAwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiBsb2NhdGlvbj0ic2FtcGxlMjQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTQzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwOWM2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSJzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgbG9jYXRpb249Ii4vc2FtcGxlNzIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMGY2NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgbG9jYXRpb249InNhbXBsZTk0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgbG9jYXRpb249Ii4vc2FtcGxlMzM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiBsb2NhdGlvbj0iLlxzYW1wbGUzNTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNDQ2ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0ic2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIGxvY2F0aW9uPSIuL3NhbXBsZTg5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgbG9jYXRpb249Ii5cc2FtcGxlMTkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGRkOWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIiBsb2NhdGlvbj0iLi9zYW1wbGU2MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOTg5OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgbG9jYXRpb249InNhbXBsZTE3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgbG9jYXRpb249Ii4vc2FtcGxlOTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE2ZTI5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiBsb2NhdGlvbj0ic2FtcGxlNjM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIiBsb2NhdGlvbj0iLi9zYW1wbGU4NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiBsb2NhdGlvbj0iLlxzYW1wbGU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Nzk2ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIGxvY2F0aW9uPSJzYW1wbGU0MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIGxvY2F0aW9uPSIuL3NhbXBsZTMwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgbG9jYXRpb249Ii5cc2FtcGxlMTk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2EzZDQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIGxvY2F0aW9uPSJzYW1wbGU5MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIGxvY2F0aW9uPSIuL3NhbXBsZTY2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgbG9jYXRpb249Ii5cc2FtcGxlNTg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmNjN2VlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiIGxvY2F0aW9uPSJzYW1wbGU4MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiIGxvY2F0aW9uPSIuL3NhbXBsZTE5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgbG9jYXRpb249Ii5cc2FtcGxlNjE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmFiOWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiIGxvY2F0aW9uPSJzYW1wbGU3MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIGxvY2F0aW9uPSIuL3NhbXBsZTE2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgbG9jYXRpb249Ii5cc2FtcGxlNzMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDFiZWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIGxvY2F0aW9uPSJzYW1wbGUzODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIGxvY2F0aW9uPSIuL3NhbXBsZTg2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgbG9jYXRpb249Ii5cc2FtcGxlOTIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDRiNWRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIGxvY2F0aW9uPSJzYW1wbGU1NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSIgbG9jYXRpb249Ii5cc2FtcGxlNTMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTQzOGZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIGxvY2F0aW9uPSJzYW1wbGUyMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIGxvY2F0aW9uPSIuL3NhbXBsZTYwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiIgbG9jYXRpb249Ii5cc2FtcGxlMTYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWY4OGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciIGxvY2F0aW9uPSJzYW1wbGU0MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTMxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0iLlxzYW1wbGUxNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU5ZGI4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiBsb2NhdGlvbj0ic2FtcGxlNDI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTk1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxYzIyMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSIgbG9jYXRpb249InNhbXBsZTM1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCIgbG9jYXRpb249Ii4vc2FtcGxlMTA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3IiBsb2NhdGlvbj0iLlxzYW1wbGU0Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU3YTQ2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiBsb2NhdGlvbj0ic2FtcGxlMTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiBsb2NhdGlvbj0iLi9zYW1wbGU3NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIGxvY2F0aW9uPSIuXHNhbXBsZTMxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3OWUyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiBsb2NhdGlvbj0ic2FtcGxlODY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIGxvY2F0aW9uPSIuXHNhbXBsZTI2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM3YmVlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0ic2FtcGxlNjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiBsb2NhdGlvbj0iLi9zYW1wbGU0MDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIGxvY2F0aW9uPSIuXHNhbXBsZTkzOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY3MTJiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiBsb2NhdGlvbj0ic2FtcGxlNzg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiBsb2NhdGlvbj0iLi9zYW1wbGU4NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgbG9jYXRpb249Ii5cc2FtcGxlMzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NDIxYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgbG9jYXRpb249InNhbXBsZTk3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgbG9jYXRpb249Ii4vc2FtcGxlODA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiBsb2NhdGlvbj0iLlxzYW1wbGUyNTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NDZmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgbG9jYXRpb249InNhbXBsZTg3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgbG9jYXRpb249Ii4vc2FtcGxlNzg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4IiBsb2NhdGlvbj0iLlxzYW1wbGU5MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMmQ4MzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgbG9jYXRpb249InNhbXBsZTE3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgbG9jYXRpb249Ii4vc2FtcGxlOTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4OTUyODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCIgbG9jYXRpb249InNhbXBsZTI2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249Ii4vc2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiBsb2NhdGlvbj0iLlxzYW1wbGU3MDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYWI2ZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249InNhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgbG9jYXRpb249Ii4vc2FtcGxlODkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiBsb2NhdGlvbj0iLlxzYW1wbGU5MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NmZjYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgbG9jYXRpb249InNhbXBsZTg0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgbG9jYXRpb249Ii4vc2FtcGxlMTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiBsb2NhdGlvbj0iLlxzYW1wbGU1NDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDM4YjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIGxvY2F0aW9uPSJzYW1wbGU3MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIGxvY2F0aW9uPSIuL3NhbXBsZTkyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgbG9jYXRpb249Ii5cc2FtcGxlNjMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Njk2MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249InNhbXBsZTIwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgbG9jYXRpb249Ii4vc2FtcGxlOTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiBsb2NhdGlvbj0iLlxzYW1wbGUyMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZjUxMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgbG9jYXRpb249InNhbXBsZTExNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgbG9jYXRpb249Ii4vc2FtcGxlMzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiBsb2NhdGlvbj0iLlxzYW1wbGU4MjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3Y2QxMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyIgbG9jYXRpb249InNhbXBsZTU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgbG9jYXRpb249Ii4vc2FtcGxlNzk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiBsb2NhdGlvbj0iLlxzYW1wbGUzMjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NDdmNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgbG9jYXRpb249InNhbXBsZTc4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgbG9jYXRpb249Ii4vc2FtcGxlODI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIiBsb2NhdGlvbj0iLlxzYW1wbGUxNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZDcxOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiBsb2NhdGlvbj0ic2FtcGxlNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIGxvY2F0aW9uPSIuL3NhbXBsZTU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiIgbG9jYXRpb249Ii5cc2FtcGxlNjI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWZjYmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIGxvY2F0aW9uPSJzYW1wbGU4NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIGxvY2F0aW9uPSIuL3NhbXBsZTM2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg5NDUxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiBsb2NhdGlvbj0ic2FtcGxlMTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIGxvY2F0aW9uPSIuL3NhbXBsZTgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMTI2YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgbG9jYXRpb249InNhbXBsZTQ3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgbG9jYXRpb249Ii4vc2FtcGxlODI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiBsb2NhdGlvbj0iLlxzYW1wbGU0ODEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYTk3YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCIgbG9jYXRpb249InNhbXBsZTc1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgbG9jYXRpb249Ii4vc2FtcGxlMTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0YjZjZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgbG9jYXRpb249InNhbXBsZTY2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0iLi9zYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgbG9jYXRpb249Ii5cc2FtcGxlNjY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMDY5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiBsb2NhdGlvbj0ic2FtcGxlMjU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIGxvY2F0aW9uPSIuXHNhbXBsZTg5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzE3ODFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIGxvY2F0aW9uPSJzYW1wbGUzNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgbG9jYXRpb249Ii4vc2FtcGxlNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIGxvY2F0aW9uPSIuXHNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZjNDM2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiBsb2NhdGlvbj0ic2FtcGxlODg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiBsb2NhdGlvbj0iLi9zYW1wbGU3ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIGxvY2F0aW9uPSIuXHNhbXBsZTU3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY3ZTg2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiBsb2NhdGlvbj0ic2FtcGxlODY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiBsb2NhdGlvbj0iLi9zYW1wbGU3ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSIuXHNhbXBsZTI0OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI1ZjA1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiBsb2NhdGlvbj0ic2FtcGxlODQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiIGxvY2F0aW9uPSIuXHNhbXBsZTIwNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA3YTc1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiBsb2NhdGlvbj0ic2FtcGxlMjk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTc3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYzZTg0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiBsb2NhdGlvbj0ic2FtcGxlNTA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTIyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZlZTU0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiBsb2NhdGlvbj0ic2FtcGxlMTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU3NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTc4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EzYWYxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiBsb2NhdGlvbj0ic2FtcGxlMzc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIGxvY2F0aW9uPSIuXHNhbXBsZTExOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThjZWE0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiBsb2NhdGlvbj0ic2FtcGxlMzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5IiBsb2NhdGlvbj0iLi9zYW1wbGU1Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIGxvY2F0aW9uPSIuXHNhbXBsZTg5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzViNTg1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiBsb2NhdGlvbj0ic2FtcGxlMzMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249Ii4vc2FtcGxlNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgbG9jYXRpb249Ii5cc2FtcGxlMTE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlMTA4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiBsb2NhdGlvbj0ic2FtcGxlNDAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiBsb2NhdGlvbj0iLi9zYW1wbGUzNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmE3ODg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIGxvY2F0aW9uPSJzYW1wbGU1NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIGxvY2F0aW9uPSIuL3NhbXBsZTgwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgbG9jYXRpb249Ii5cc2FtcGxlMzI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDU4MWZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIGxvY2F0aW9uPSJzYW1wbGU2MDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiIGxvY2F0aW9uPSIuL3NhbXBsZTYwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgbG9jYXRpb249Ii5cc2FtcGxlMTA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2NhM2E5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIGxvY2F0aW9uPSJzYW1wbGU1NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIGxvY2F0aW9uPSIuL3NhbXBsZTE4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgbG9jYXRpb249Ii5cc2FtcGxlMjkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzBhMDU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIGxvY2F0aW9uPSJzYW1wbGU1NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTgyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgbG9jYXRpb249Ii5cc2FtcGxlNjQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDA5ZDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSJzYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgbG9jYXRpb249Ii5cc2FtcGxlNzg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTNlMjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgbG9jYXRpb249InNhbXBsZTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiBsb2NhdGlvbj0iLi9zYW1wbGU4MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTIxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UwMzY2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiBsb2NhdGlvbj0ic2FtcGxlMjY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiBsb2NhdGlvbj0iLi9zYW1wbGU5ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTUwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE1YjA3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4IiBsb2NhdGlvbj0ic2FtcGxlMTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiBsb2NhdGlvbj0iLi9zYW1wbGUyNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgbG9jYXRpb249Ii5cc2FtcGxlMTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNDFhN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgbG9jYXRpb249InNhbXBsZTc4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgbG9jYXRpb249Ii4vc2FtcGxlMzUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIiBsb2NhdGlvbj0iLlxzYW1wbGU2MTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NWIyYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgbG9jYXRpb249InNhbXBsZTkyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgbG9jYXRpb249Ii4vc2FtcGxlMjE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiBsb2NhdGlvbj0iLlxzYW1wbGU4NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWE2NDM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249InNhbXBsZTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiBsb2NhdGlvbj0iLi9zYW1wbGU5MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTI5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzcyZGZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgbG9jYXRpb249InNhbXBsZTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIiBsb2NhdGlvbj0iLi9zYW1wbGU4MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii5cc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MzVhZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgbG9jYXRpb249InNhbXBsZTQ0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCIgbG9jYXRpb249Ii4vc2FtcGxlNzk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiBsb2NhdGlvbj0iLlxzYW1wbGU5NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NWI3MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgbG9jYXRpb249InNhbXBsZTQ5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyIgbG9jYXRpb249Ii4vc2FtcGxlNzUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiBsb2NhdGlvbj0iLlxzYW1wbGU5Nzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NzZjODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgbG9jYXRpb249InNhbXBsZTEwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgbG9jYXRpb249Ii4vc2FtcGxlNjcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2Mjc4ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgbG9jYXRpb249InNhbXBsZTY0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3IiBsb2NhdGlvbj0iLlxzYW1wbGUzNTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMDIwODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiBsb2NhdGlvbj0ic2FtcGxlODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIGxvY2F0aW9uPSIuL3NhbXBsZTk4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgbG9jYXRpb249Ii5cc2FtcGxlMjg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjhlNTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIGxvY2F0aW9uPSIuXHNhbXBsZTM4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFhNmFjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiBsb2NhdGlvbj0ic2FtcGxlNDczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIiBsb2NhdGlvbj0iLi9zYW1wbGU4OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODliZDRjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiBsb2NhdGlvbj0ic2FtcGxlMjMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTg0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEzNmZmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiBsb2NhdGlvbj0ic2FtcGxlNDIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiBsb2NhdGlvbj0iLi9zYW1wbGU0Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTU5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYWZiYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgbG9jYXRpb249InNhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgbG9jYXRpb249Ii4vc2FtcGxlNzgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiBsb2NhdGlvbj0iLlxzYW1wbGU1NjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ3NzI3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiBsb2NhdGlvbj0ic2FtcGxlOTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIGxvY2F0aW9uPSIuXHNhbXBsZTkxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdmZGFkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiBsb2NhdGlvbj0ic2FtcGxlMTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlYzExMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiBsb2NhdGlvbj0ic2FtcGxlMTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiBsb2NhdGlvbj0iLi9zYW1wbGUyODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiIGxvY2F0aW9uPSIuXHNhbXBsZTY2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZhYjg5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiBsb2NhdGlvbj0ic2FtcGxlNTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTY4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU1ZGVmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiBsb2NhdGlvbj0ic2FtcGxlNzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU1NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIGxvY2F0aW9uPSIuXHNhbXBsZTk5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNjODM2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiBsb2NhdGlvbj0ic2FtcGxlOTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiBsb2NhdGlvbj0iLi9zYW1wbGU3NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIGxvY2F0aW9uPSIuXHNhbXBsZTY0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkNGVjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiBsb2NhdGlvbj0ic2FtcGxlNTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIGxvY2F0aW9uPSIuXHNhbXBsZTcxNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhZjk4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiBsb2NhdGlvbj0ic2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiBsb2NhdGlvbj0iLi9zYW1wbGUzNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIGxvY2F0aW9uPSIuXHNhbXBsZTU0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNjYjFlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiBsb2NhdGlvbj0ic2FtcGxlNTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiBsb2NhdGlvbj0iLi9zYW1wbGU4MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIGxvY2F0aW9uPSIuXHNhbXBsZTE5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgzM2I0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiBsb2NhdGlvbj0ic2FtcGxlNjQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiBsb2NhdGlvbj0iLi9zYW1wbGU1OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIGxvY2F0aW9uPSIuXHNhbXBsZTkwNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGRhOGVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiIGxvY2F0aW9uPSJzYW1wbGUyMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiIGxvY2F0aW9uPSIuL3NhbXBsZTQzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgbG9jYXRpb249Ii5cc2FtcGxlMjc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4OTkwYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgbG9jYXRpb249InNhbXBsZTQ2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249Ii4vc2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiBsb2NhdGlvbj0iLlxzYW1wbGU4MjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4YWYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiBsb2NhdGlvbj0ic2FtcGxlOTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIGxvY2F0aW9uPSIuXHNhbXBsZTIxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA1NzI5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiBsb2NhdGlvbj0ic2FtcGxlNzUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiBsb2NhdGlvbj0iLi9zYW1wbGU5NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIGxvY2F0aW9uPSIuXHNhbXBsZTg1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUyNWU0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiBsb2NhdGlvbj0ic2FtcGxlNjc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiBsb2NhdGlvbj0iLi9zYW1wbGU2NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgbG9jYXRpb249Ii5cc2FtcGxlMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ODhjYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249InNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgbG9jYXRpb249Ii4vc2FtcGxlMzkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YzI1MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgbG9jYXRpb249InNhbXBsZTM0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSIgbG9jYXRpb249Ii4vc2FtcGxlNjAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIGxvY2F0aW9uPSIuXHNhbXBsZTUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTJkNWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIGxvY2F0aW9uPSJzYW1wbGU2MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIGxvY2F0aW9uPSIuL3NhbXBsZTY1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgbG9jYXRpb249Ii5cc2FtcGxlNDQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2RmY2U3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIGxvY2F0aW9uPSJzYW1wbGUyNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIGxvY2F0aW9uPSIuL3NhbXBsZTE4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgbG9jYXRpb249Ii5cc2FtcGxlMzc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmYxNmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIGxvY2F0aW9uPSJzYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIGxvY2F0aW9uPSIuL3NhbXBsZTI5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgbG9jYXRpb249Ii5cc2FtcGxlNzQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTg3MjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIGxvY2F0aW9uPSJzYW1wbGU3NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgbG9jYXRpb249Ii4vc2FtcGxlNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIGxvY2F0aW9uPSIuXHNhbXBsZTMwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2ZTAxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiBsb2NhdGlvbj0ic2FtcGxlNTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiBsb2NhdGlvbj0iLi9zYW1wbGUyMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIGxvY2F0aW9uPSIuXHNhbXBsZTQ5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlODZkZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgbG9jYXRpb249InNhbXBsZTI5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgbG9jYXRpb249Ii4vc2FtcGxlNDMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiBsb2NhdGlvbj0iLlxzYW1wbGUyNTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg0NDQ4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1IiBsb2NhdGlvbj0ic2FtcGxlODk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIGxvY2F0aW9uPSIuXHNhbXBsZTY4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU3OTcyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiBsb2NhdGlvbj0ic2FtcGxlMTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSIuL3NhbXBsZTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNDI4NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgbG9jYXRpb249InNhbXBsZTk3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgbG9jYXRpb249Ii4vc2FtcGxlNzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIiBsb2NhdGlvbj0iLlxzYW1wbGU1NTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNGU0MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCIgbG9jYXRpb249InNhbXBsZTUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgbG9jYXRpb249Ii4vc2FtcGxlOTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiBsb2NhdGlvbj0iLlxzYW1wbGUyOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmQ0MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgbG9jYXRpb249InNhbXBsZTc4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgbG9jYXRpb249Ii4vc2FtcGxlMjkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYTZjMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgbG9jYXRpb249InNhbXBsZTgyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgbG9jYXRpb249Ii4vc2FtcGxlNDQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWJlMmM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIGxvY2F0aW9uPSJzYW1wbGU4MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgbG9jYXRpb249Ii5cc2FtcGxlMzY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWNiNjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIGxvY2F0aW9uPSJzYW1wbGU0NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTY4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgbG9jYXRpb249Ii5cc2FtcGxlNTQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDQ3NGI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIGxvY2F0aW9uPSJzYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIGxvY2F0aW9uPSIuL3NhbXBsZTU5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgbG9jYXRpb249Ii5cc2FtcGxlNTI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTU3YjU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIGxvY2F0aW9uPSJzYW1wbGU4NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIGxvY2F0aW9uPSIuL3NhbXBsZTE1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgbG9jYXRpb249Ii5cc2FtcGxlMTg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM4ZWM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiBsb2NhdGlvbj0ic2FtcGxlMTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiBsb2NhdGlvbj0iLi9zYW1wbGU0OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIGxvY2F0aW9uPSIuXHNhbXBsZTY3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGUzN2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIGxvY2F0aW9uPSJzYW1wbGU5NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTkxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgbG9jYXRpb249Ii5cc2FtcGxlMjg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWExM2QzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIGxvY2F0aW9uPSJzYW1wbGUzNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIGxvY2F0aW9uPSIuL3NhbXBsZTU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgbG9jYXRpb249Ii5cc2FtcGxlNDg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzQ4MmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIGxvY2F0aW9uPSJzYW1wbGUxNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSIuL3NhbXBsZTk0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgbG9jYXRpb249Ii5cc2FtcGxlOTM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzk2MzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSJzYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIGxvY2F0aW9uPSIuL3NhbXBsZTkwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgbG9jYXRpb249Ii5cc2FtcGxlNjk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjQxYTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgbG9jYXRpb249InNhbXBsZTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSIuL3NhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiBsb2NhdGlvbj0iLlxzYW1wbGU1MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOGI0NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgbG9jYXRpb249InNhbXBsZTM5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgbG9jYXRpb249Ii4vc2FtcGxlNzA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNjU1NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249InNhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgbG9jYXRpb249Ii4vc2FtcGxlMTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiBsb2NhdGlvbj0iLlxzYW1wbGU3MDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZTZkNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiIgbG9jYXRpb249InNhbXBsZTI4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgbG9jYXRpb249Ii4vc2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU3NDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMDkyYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgbG9jYXRpb249InNhbXBsZTM4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgbG9jYXRpb249Ii4vc2FtcGxlMTQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMTdiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgbG9jYXRpb249InNhbXBsZTY0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSIgbG9jYXRpb249Ii4vc2FtcGxlOTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGYzZTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIGxvY2F0aW9uPSJzYW1wbGU0OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTgwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgbG9jYXRpb249Ii5cc2FtcGxlNTMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTIwY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249InNhbXBsZTk0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiIgbG9jYXRpb249Ii4vc2FtcGxlNzEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiBsb2NhdGlvbj0iLlxzYW1wbGU2Nzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYjM4MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249InNhbXBsZTg4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgbG9jYXRpb249Ii4vc2FtcGxlMjE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSIuXHNhbXBsZTIzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmEyYjJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIGxvY2F0aW9uPSJzYW1wbGUyNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIGxvY2F0aW9uPSIuL3NhbXBsZTMwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgbG9jYXRpb249Ii5cc2FtcGxlNTczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2JhYTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIGxvY2F0aW9uPSJzYW1wbGU0MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIGxvY2F0aW9uPSIuL3NhbXBsZTM4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiBsb2NhdGlvbj0iLlxzYW1wbGU1Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgxMGE1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiBsb2NhdGlvbj0ic2FtcGxlOTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiBsb2NhdGlvbj0iLi9zYW1wbGUzOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIGxvY2F0aW9uPSIuXHNhbXBsZTE0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM2Y2ZkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiBsb2NhdGlvbj0ic2FtcGxlMzAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiBsb2NhdGlvbj0iLi9zYW1wbGU5MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIGxvY2F0aW9uPSIuXHNhbXBsZTQxNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZkZWYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiBsb2NhdGlvbj0ic2FtcGxlNDg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5IiBsb2NhdGlvbj0iLi9zYW1wbGU1MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLlxzYW1wbGU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIyYzRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIGxvY2F0aW9uPSJzYW1wbGU3OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIGxvY2F0aW9uPSIuL3NhbXBsZTg1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgbG9jYXRpb249Ii5cc2FtcGxlNjc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWZhZjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIGxvY2F0aW9uPSJzYW1wbGUyMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIGxvY2F0aW9uPSIuL3NhbXBsZTM1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgbG9jYXRpb249Ii5cc2FtcGxlMzUzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWExYThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiIGxvY2F0aW9uPSJzYW1wbGU3MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIGxvY2F0aW9uPSIuL3NhbXBsZTcyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NDBhMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgbG9jYXRpb249InNhbXBsZTYzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgbG9jYXRpb249Ii4vc2FtcGxlMjQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5IiBsb2NhdGlvbj0iLlxzYW1wbGU1Nzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIyYjY3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiBsb2NhdGlvbj0ic2FtcGxlNzMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhjNTllOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIiBsb2NhdGlvbj0ic2FtcGxlMjMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiBsb2NhdGlvbj0iLi9zYW1wbGUyMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIGxvY2F0aW9uPSIuXHNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGViNDY5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiBsb2NhdGlvbj0ic2FtcGxlNDM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiBsb2NhdGlvbj0iLi9zYW1wbGU0ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ3YzAzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiBsb2NhdGlvbj0ic2FtcGxlNDU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiBsb2NhdGlvbj0iLi9zYW1wbGU3OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTUwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThmOWY1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiBsb2NhdGlvbj0ic2FtcGxlNTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIiBsb2NhdGlvbj0iLi9zYW1wbGU4MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIGxvY2F0aW9uPSIuXHNhbXBsZTU1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3OWVjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0ic2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiBsb2NhdGlvbj0iLi9zYW1wbGU3Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIGxvY2F0aW9uPSIuXHNhbXBsZTIwMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE5OThlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiBsb2NhdGlvbj0ic2FtcGxlMjA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiBsb2NhdGlvbj0iLi9zYW1wbGU3ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii5cc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZGIyMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgbG9jYXRpb249InNhbXBsZTQ1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgbG9jYXRpb249Ii4vc2FtcGxlMjE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZDA0ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiBsb2NhdGlvbj0ic2FtcGxlNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIGxvY2F0aW9uPSIuL3NhbXBsZTY4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgbG9jYXRpb249Ii5cc2FtcGxlODcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjI3OWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIGxvY2F0aW9uPSJzYW1wbGUzMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIGxvY2F0aW9uPSIuL3NhbXBsZTcyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgbG9jYXRpb249Ii5cc2FtcGxlNjEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEzYmFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiBsb2NhdGlvbj0ic2FtcGxlMTUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiBsb2NhdGlvbj0iLi9zYW1wbGUyNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIGxvY2F0aW9uPSIuXHNhbXBsZTg4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWIyYmRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIGxvY2F0aW9uPSJzYW1wbGU5MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIGxvY2F0aW9uPSIuL3NhbXBsZTE2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgbG9jYXRpb249Ii5cc2FtcGxlNjYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTlkM2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIGxvY2F0aW9uPSJzYW1wbGUyODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249Ii5cc2FtcGxlMzA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2FlYWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIGxvY2F0aW9uPSJzYW1wbGU4MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIGxvY2F0aW9uPSIuL3NhbXBsZTc4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgbG9jYXRpb249Ii5cc2FtcGxlNDkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDMwZDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiBsb2NhdGlvbj0iLi9zYW1wbGU2NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTcxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRiMWViOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiBsb2NhdGlvbj0ic2FtcGxlMzMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTM5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgyNDJjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiBsb2NhdGlvbj0ic2FtcGxlMTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiBsb2NhdGlvbj0iLi9zYW1wbGUzMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiIGxvY2F0aW9uPSIuXHNhbXBsZTE2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVkOTgyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiBsb2NhdGlvbj0ic2FtcGxlNDk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiBsb2NhdGlvbj0iLi9zYW1wbGU4MTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIGxvY2F0aW9uPSIuXHNhbXBsZTk4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I2ZWQ1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiBsb2NhdGlvbj0ic2FtcGxlNTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiBsb2NhdGlvbj0iLi9zYW1wbGU1Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiIGxvY2F0aW9uPSIuXHNhbXBsZTEyMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUwMTBiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIiBsb2NhdGlvbj0ic2FtcGxlMzAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiBsb2NhdGlvbj0iLi9zYW1wbGUyNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIGxvY2F0aW9uPSIuXHNhbXBsZTY4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyMGVmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiBsb2NhdGlvbj0ic2FtcGxlMzQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiBsb2NhdGlvbj0iLi9zYW1wbGU1ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTkwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYzg4NjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0ic2FtcGxlMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTEzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgbG9jYXRpb249Ii5cc2FtcGxlNTEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyODQxOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgbG9jYXRpb249InNhbXBsZTYyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTcwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2MDIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiBsb2NhdGlvbj0ic2FtcGxlMjIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIGxvY2F0aW9uPSIuL3NhbXBsZTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiBsb2NhdGlvbj0iLlxzYW1wbGU3MTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMDE0ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgbG9jYXRpb249InNhbXBsZTYzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgbG9jYXRpb249Ii4vc2FtcGxlMzMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiBsb2NhdGlvbj0iLlxzYW1wbGU0NjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNDgyZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgbG9jYXRpb249InNhbXBsZTQwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiBsb2NhdGlvbj0iLi9zYW1wbGU1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgbG9jYXRpb249Ii5cc2FtcGxlMTQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjFlZDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIGxvY2F0aW9uPSJzYW1wbGU1OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiIGxvY2F0aW9uPSIuL3NhbXBsZTY5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgbG9jYXRpb249Ii5cc2FtcGxlMjc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDBkYjUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIGxvY2F0aW9uPSJzYW1wbGU1NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIGxvY2F0aW9uPSIuL3NhbXBsZTI3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgbG9jYXRpb249Ii5cc2FtcGxlODMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2IzZDNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIGxvY2F0aW9uPSJzYW1wbGU3MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii4vc2FtcGxlODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIGxvY2F0aW9uPSIuXHNhbXBsZTc5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM2Njc5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiBsb2NhdGlvbj0ic2FtcGxlNzYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiBsb2NhdGlvbj0iLi9zYW1wbGU5MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIGxvY2F0aW9uPSIuXHNhbXBsZTc0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdiYzQ4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiBsb2NhdGlvbj0ic2FtcGxlMjc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiBsb2NhdGlvbj0iLi9zYW1wbGU1NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTg5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA1YTA2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiBsb2NhdGlvbj0ic2FtcGxlMTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIGxvY2F0aW9uPSIuXHNhbXBsZTU5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ODJjZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgbG9jYXRpb249InNhbXBsZTQ3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyIgbG9jYXRpb249Ii4vc2FtcGxlMjU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiBsb2NhdGlvbj0iLlxzYW1wbGU0MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY1NTg5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiBsb2NhdGlvbj0ic2FtcGxlNDE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0IiBsb2NhdGlvbj0iLi9zYW1wbGUzODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTg0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk4OGViNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiBsb2NhdGlvbj0ic2FtcGxlOTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIiBsb2NhdGlvbj0iLi9zYW1wbGU5NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTgwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRkYTg0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiBsb2NhdGlvbj0ic2FtcGxlODI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiBsb2NhdGlvbj0iLi9zYW1wbGU2NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIGxvY2F0aW9uPSIuXHNhbXBsZTY0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjZGYwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiBsb2NhdGlvbj0ic2FtcGxlNzU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIiBsb2NhdGlvbj0iLi9zYW1wbGUyNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIGxvY2F0aW9uPSIuXHNhbXBsZTg3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0YjIyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiBsb2NhdGlvbj0ic2FtcGxlMTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiBsb2NhdGlvbj0iLi9zYW1wbGU1OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIGxvY2F0aW9uPSIuXHNhbXBsZTc1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjczOTVhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiBsb2NhdGlvbj0ic2FtcGxlMTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSIuL3NhbXBsZTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZjQxZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgbG9jYXRpb249InNhbXBsZTgxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgbG9jYXRpb249Ii4vc2FtcGxlNjY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiBsb2NhdGlvbj0iLlxzYW1wbGU4MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YWNlNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgbG9jYXRpb249InNhbXBsZTI4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgbG9jYXRpb249Ii4vc2FtcGxlOTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiBsb2NhdGlvbj0iLlxzYW1wbGU2MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMTY0Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgbG9jYXRpb249InNhbXBsZTExMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgbG9jYXRpb249Ii4vc2FtcGxlNTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIGxvY2F0aW9uPSIuXHNhbXBsZTE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzMzZGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIGxvY2F0aW9uPSJzYW1wbGU5MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTUxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgbG9jYXRpb249Ii5cc2FtcGxlNjcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhYTYyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIiBsb2NhdGlvbj0ic2FtcGxlODUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiBsb2NhdGlvbj0iLi9zYW1wbGUyNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIGxvY2F0aW9uPSIuXHNhbXBsZTc0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzk3OWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIGxvY2F0aW9uPSJzYW1wbGU3MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTExMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgbG9jYXRpb249Ii5cc2FtcGxlMzg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDdmZjYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIGxvY2F0aW9uPSJzYW1wbGU0NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgbG9jYXRpb249Ii5cc2FtcGxlMzEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODgyZWQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIGxvY2F0aW9uPSJzYW1wbGU3ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIGxvY2F0aW9uPSIuL3NhbXBsZTE5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc3ZGUwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiBsb2NhdGlvbj0ic2FtcGxlMjMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiBsb2NhdGlvbj0iLi9zYW1wbGU3MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTExMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBmOGI4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIiBsb2NhdGlvbj0ic2FtcGxlMjQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgbG9jYXRpb249Ii5cc2FtcGxlMjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYWM0ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgbG9jYXRpb249InNhbXBsZTYzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCIgbG9jYXRpb249Ii4vc2FtcGxlNjcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiBsb2NhdGlvbj0iLlxzYW1wbGUzMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYzg1OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgbG9jYXRpb249InNhbXBsZTUyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgbG9jYXRpb249Ii4vc2FtcGxlNDczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYzJhNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgbG9jYXRpb249InNhbXBsZTQ0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgbG9jYXRpb249Ii4vc2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiBsb2NhdGlvbj0iLlxzYW1wbGUyNjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZTFlNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgbG9jYXRpb249InNhbXBsZTczNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgbG9jYXRpb249Ii4vc2FtcGxlODI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0IiBsb2NhdGlvbj0iLlxzYW1wbGU3ODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YzA4NzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgbG9jYXRpb249InNhbXBsZTcwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgbG9jYXRpb249Ii4vc2FtcGxlNDMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiBsb2NhdGlvbj0iLlxzYW1wbGU0Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDMyNzgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiIGxvY2F0aW9uPSJzYW1wbGUzMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIGxvY2F0aW9uPSIuL3NhbXBsZTI4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249Ii5cc2FtcGxlMjM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMGIxN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiBsb2NhdGlvbj0ic2FtcGxlNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIGxvY2F0aW9uPSIuL3NhbXBsZTY2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgbG9jYXRpb249Ii5cc2FtcGxlMzMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDY5YmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiIGxvY2F0aW9uPSJzYW1wbGUzNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIGxvY2F0aW9uPSIuL3NhbXBsZTExMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgbG9jYXRpb249Ii5cc2FtcGxlOTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjI4ZGUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgbG9jYXRpb249InNhbXBsZTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiBsb2NhdGlvbj0iLi9zYW1wbGU4ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTY4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFjZWU0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiBsb2NhdGlvbj0ic2FtcGxlMzEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiBsb2NhdGlvbj0iLi9zYW1wbGU0MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIGxvY2F0aW9uPSIuXHNhbXBsZTEwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNlYmFiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiBsb2NhdGlvbj0ic2FtcGxlOTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiBsb2NhdGlvbj0iLi9zYW1wbGU5MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiIGxvY2F0aW9uPSIuXHNhbXBsZTIwMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA4NDQ1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiBsb2NhdGlvbj0ic2FtcGxlMjIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiBsb2NhdGlvbj0iLi9zYW1wbGU2ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIGxvY2F0aW9uPSIuXHNhbXBsZTEzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJlYmVhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0ic2FtcGxlNjI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU1YjRlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiBsb2NhdGlvbj0ic2FtcGxlOTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiBsb2NhdGlvbj0iLi9zYW1wbGU0Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIGxvY2F0aW9uPSIuXHNhbXBsZTk4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc0MGQ0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiBsb2NhdGlvbj0ic2FtcGxlNDgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiBsb2NhdGlvbj0iLi9zYW1wbGU2MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIGxvY2F0aW9uPSIuXHNhbXBsZTU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVkZjc1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiBsb2NhdGlvbj0ic2FtcGxlNzM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIGxvY2F0aW9uPSIuL3NhbXBsZTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiBsb2NhdGlvbj0iLlxzYW1wbGUxMzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ0YmZjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiBsb2NhdGlvbj0ic2FtcGxlMzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiBsb2NhdGlvbj0iLi9zYW1wbGUyNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIGxvY2F0aW9uPSIuXHNhbXBsZTM1MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDA1YjQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIGxvY2F0aW9uPSJzYW1wbGU5MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIGxvY2F0aW9uPSIuL3NhbXBsZTE4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgbG9jYXRpb249Ii5cc2FtcGxlMzE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMzY3NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgbG9jYXRpb249InNhbXBsZTY0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgbG9jYXRpb249Ii4vc2FtcGxlNTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiBsb2NhdGlvbj0iLlxzYW1wbGU5MTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MzY1ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiBsb2NhdGlvbj0ic2FtcGxlOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIGxvY2F0aW9uPSIuL3NhbXBsZTM0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiBsb2NhdGlvbj0iLlxzYW1wbGU4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU3NmNmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiBsb2NhdGlvbj0ic2FtcGxlNDc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiBsb2NhdGlvbj0iLi9zYW1wbGUxMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIGxvY2F0aW9uPSIuXHNhbXBsZTMwNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5MDVmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiBsb2NhdGlvbj0ic2FtcGxlNTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiBsb2NhdGlvbj0iLi9zYW1wbGU5OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIGxvY2F0aW9uPSIuXHNhbXBsZTE1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I2MmMyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiBsb2NhdGlvbj0ic2FtcGxlMjY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiBsb2NhdGlvbj0iLi9zYW1wbGU4NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU2NjYyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiBsb2NhdGlvbj0ic2FtcGxlMTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIGxvY2F0aW9uPSIuXHNhbXBsZTY4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc1OGQ0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIGxvY2F0aW9uPSJzYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgbG9jYXRpb249Ii4vc2FtcGxlNzQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiBsb2NhdGlvbj0iLlxzYW1wbGU4MDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMGEzNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgbG9jYXRpb249InNhbXBsZTc1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiBsb2NhdGlvbj0iLi9zYW1wbGU1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiBsb2NhdGlvbj0iLlxzYW1wbGUyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAyZGJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiBsb2NhdGlvbj0ic2FtcGxlODYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiBsb2NhdGlvbj0iLi9zYW1wbGU4MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIGxvY2F0aW9uPSIuXHNhbXBsZTkyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU5ZDkxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIGxvY2F0aW9uPSJzYW1wbGUxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgbG9jYXRpb249Ii4vc2FtcGxlMzczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSIuXHNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY5NWRlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiBsb2NhdGlvbj0ic2FtcGxlNTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiBsb2NhdGlvbj0iLi9zYW1wbGUyNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTgzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjBlZDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249InNhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIGxvY2F0aW9uPSIuXHNhbXBsZTg1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJlM2FiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiBsb2NhdGlvbj0ic2FtcGxlMTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249Ii5cc2FtcGxlMTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYmJiZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgbG9jYXRpb249InNhbXBsZTQ1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgbG9jYXRpb249Ii4vc2FtcGxlMTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0iLlxzYW1wbGU2Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5Yzg1ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgbG9jYXRpb249InNhbXBsZTg5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0iLi9zYW1wbGU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiIgbG9jYXRpb249Ii5cc2FtcGxlMTg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGMyYmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIGxvY2F0aW9uPSJzYW1wbGUzNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIGxvY2F0aW9uPSIuXHNhbXBsZTU0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlZWZkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249InNhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTgwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgbG9jYXRpb249Ii5cc2FtcGxlNTUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGMyYjVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249InNhbXBsZTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiBsb2NhdGlvbj0iLi9zYW1wbGUyMzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIGxvY2F0aW9uPSIuXHNhbXBsZTM2My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA2NTA4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiBsb2NhdGlvbj0ic2FtcGxlNzMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiBsb2NhdGlvbj0iLi9zYW1wbGU0Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIGxvY2F0aW9uPSIuXHNhbXBsZTY1MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1M2Y0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIGxvY2F0aW9uPSJzYW1wbGUzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgbG9jYXRpb249Ii4vc2FtcGxlNTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuXHNhbXBsZTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmJmMGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIGxvY2F0aW9uPSJzYW1wbGUzNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTU4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgbG9jYXRpb249Ii5cc2FtcGxlNDkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ExNDFkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiBsb2NhdGlvbj0ic2FtcGxlMjkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiBsb2NhdGlvbj0iLi9zYW1wbGU0ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIGxvY2F0aW9uPSIuXHNhbXBsZTk5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTZiZGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIGxvY2F0aW9uPSJzYW1wbGU1OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgbG9jYXRpb249Ii5cc2FtcGxlMTA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzg0NjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0ic2FtcGxlNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuL3NhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIGxvY2F0aW9uPSIuXHNhbXBsZTE4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBkZDAwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0IiBsb2NhdGlvbj0ic2FtcGxlNDc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiIGxvY2F0aW9uPSIuXHNhbXBsZTMyMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMwNGVjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiBsb2NhdGlvbj0ic2FtcGxlNzgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiBsb2NhdGlvbj0iLi9zYW1wbGUxOTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTYzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRjMjMxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiBsb2NhdGlvbj0ic2FtcGxlMjM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiBsb2NhdGlvbj0iLi9zYW1wbGUzOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIGxvY2F0aW9uPSIuXHNhbXBsZTY1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhlNzZkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiBsb2NhdGlvbj0ic2FtcGxlMjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249Ii5cc2FtcGxlNjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxODc4ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyIgbG9jYXRpb249InNhbXBsZTY4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiBsb2NhdGlvbj0iLlxzYW1wbGUyMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkMzRlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0ic2FtcGxlNjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiBsb2NhdGlvbj0iLi9zYW1wbGU1MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTUyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhYzFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiBsb2NhdGlvbj0ic2FtcGxlOTQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTYyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk0YWE4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiBsb2NhdGlvbj0ic2FtcGxlNTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIGxvY2F0aW9uPSIuXHNhbXBsZTg0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwN2M1MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgbG9jYXRpb249InNhbXBsZTExOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgbG9jYXRpb249Ii4vc2FtcGxlNjU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiBsb2NhdGlvbj0iLlxzYW1wbGUzMzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc0NDUyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiBsb2NhdGlvbj0ic2FtcGxlMjkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIGxvY2F0aW9uPSIuL3NhbXBsZTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Njcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MjdlZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiBsb2NhdGlvbj0ic2FtcGxlMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIGxvY2F0aW9uPSIuL3NhbXBsZTY4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgbG9jYXRpb249Ii5cc2FtcGxlNTA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzk3MDlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIGxvY2F0aW9uPSJzYW1wbGU1MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgbG9jYXRpb249Ii5cc2FtcGxlMTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGI1NWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIGxvY2F0aW9uPSJzYW1wbGUzNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTk3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgbG9jYXRpb249Ii5cc2FtcGxlNTUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDUwMDViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIGxvY2F0aW9uPSJzYW1wbGU0NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIGxvY2F0aW9uPSIuL3NhbXBsZTk4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249Ii5cc2FtcGxlODg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmNlYzNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIGxvY2F0aW9uPSJzYW1wbGU3MTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0iLlxzYW1wbGU4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYzNmZkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiBsb2NhdGlvbj0ic2FtcGxlMjg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiBsb2NhdGlvbj0iLi9zYW1wbGU5Nzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIGxvY2F0aW9uPSIuXHNhbXBsZTc0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdlMWMxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiBsb2NhdGlvbj0ic2FtcGxlNTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiBsb2NhdGlvbj0iLi9zYW1wbGU5NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIGxvY2F0aW9uPSIuXHNhbXBsZTk0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY4MmMxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiBsb2NhdGlvbj0ic2FtcGxlMzY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiBsb2NhdGlvbj0iLi9zYW1wbGUxMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTgwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ2YzU3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2IiBsb2NhdGlvbj0ic2FtcGxlNjk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgbG9jYXRpb249Ii5cc2FtcGxlNDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDliOGE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSJzYW1wbGU0OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTU5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgbG9jYXRpb249Ii5cc2FtcGxlNjU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjYyMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgbG9jYXRpb249InNhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgbG9jYXRpb249Ii4vc2FtcGxlNzQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiBsb2NhdGlvbj0iLlxzYW1wbGUxMzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyOGU1YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgbG9jYXRpb249InNhbXBsZTEzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgbG9jYXRpb249Ii4vc2FtcGxlNzMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2IwNGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIGxvY2F0aW9uPSJzYW1wbGU3NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUzZTFiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiBsb2NhdGlvbj0ic2FtcGxlODY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiBsb2NhdGlvbj0iLi9zYW1wbGU3MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIGxvY2F0aW9uPSIuXHNhbXBsZTc3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM0OTkwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiBsb2NhdGlvbj0ic2FtcGxlNjY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIiBsb2NhdGlvbj0iLi9zYW1wbGU0NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIGxvY2F0aW9uPSIuXHNhbXBsZTE4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UxNzE3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiBsb2NhdGlvbj0ic2FtcGxlMTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiBsb2NhdGlvbj0iLi9zYW1wbGU2NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIGxvY2F0aW9uPSIuXHNhbXBsZTU4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlmMmM2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiBsb2NhdGlvbj0ic2FtcGxlODI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTkwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwNmQ2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiBsb2NhdGlvbj0ic2FtcGxlMTY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVjMzRjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiBsb2NhdGlvbj0ic2FtcGxlODk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiBsb2NhdGlvbj0iLi9zYW1wbGUyNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIGxvY2F0aW9uPSIuXHNhbXBsZTg5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhMmI2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSJzYW1wbGU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgbG9jYXRpb249Ii4vc2FtcGxlNTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiBsb2NhdGlvbj0iLlxzYW1wbGU0MTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmU5MzM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIGxvY2F0aW9uPSJzYW1wbGUzNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgbG9jYXRpb249Ii5cc2FtcGxlNDYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZTFhMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgbG9jYXRpb249InNhbXBsZTkyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyIgbG9jYXRpb249Ii5cc2FtcGxlOTczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTQ0NjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciIGxvY2F0aW9uPSJzYW1wbGUzMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIGxvY2F0aW9uPSIuL3NhbXBsZTEzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCIgbG9jYXRpb249Ii5cc2FtcGxlMzM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGEzNTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIGxvY2F0aW9uPSJzYW1wbGU5MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRjZGM5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiBsb2NhdGlvbj0ic2FtcGxlNDUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1IiBsb2NhdGlvbj0iLi9zYW1wbGUxOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIGxvY2F0aW9uPSIuXHNhbXBsZTc0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2NTNhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIGxvY2F0aW9uPSJzYW1wbGUxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgbG9jYXRpb249Ii4vc2FtcGxlNjI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmY2ZjNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSIgbG9jYXRpb249InNhbXBsZTg4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgbG9jYXRpb249Ii4vc2FtcGxlMTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiBsb2NhdGlvbj0iLlxzYW1wbGU0NDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZjE5ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgbG9jYXRpb249InNhbXBsZTE3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgbG9jYXRpb249Ii4vc2FtcGxlMjU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIiBsb2NhdGlvbj0iLlxzYW1wbGUxNjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4Y2JhMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgbG9jYXRpb249InNhbXBsZTY2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiBsb2NhdGlvbj0iLi9zYW1wbGU1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgbG9jYXRpb249Ii5cc2FtcGxlNzU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmIwNGNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIGxvY2F0aW9uPSJzYW1wbGU0MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTkyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgbG9jYXRpb249Ii5cc2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDBlZDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIGxvY2F0aW9uPSJzYW1wbGU0NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTIxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgbG9jYXRpb249Ii5cc2FtcGxlMzU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwY2M1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiBsb2NhdGlvbj0ic2FtcGxlMTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTQzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2MxYmNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIGxvY2F0aW9uPSJzYW1wbGUxNTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIGxvY2F0aW9uPSIuL3NhbXBsZTg4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgbG9jYXRpb249Ii5cc2FtcGxlNDM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWIxYzg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIGxvY2F0aW9uPSJzYW1wbGU4MTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTU4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgbG9jYXRpb249Ii5cc2FtcGxlNDU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjEyYTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIGxvY2F0aW9uPSJzYW1wbGUxNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSIgbG9jYXRpb249Ii5cc2FtcGxlNTExLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2JkY2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIGxvY2F0aW9uPSJzYW1wbGU1ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgbG9jYXRpb249Ii5cc2FtcGxlNDc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzc3OWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIGxvY2F0aW9uPSJzYW1wbGU1MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIGxvY2F0aW9uPSIuL3NhbXBsZTkzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgbG9jYXRpb249Ii5cc2FtcGxlMzIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjgzNjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIGxvY2F0aW9uPSJzYW1wbGUyNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249Ii4vc2FtcGxlNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczMDg1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiBsb2NhdGlvbj0ic2FtcGxlNDc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiBsb2NhdGlvbj0iLi9zYW1wbGUyNDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIGxvY2F0aW9uPSIuXHNhbXBsZTEwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE4OWZhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIGxvY2F0aW9uPSJzYW1wbGU2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgbG9jYXRpb249Ii4vc2FtcGxlMjgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiBsb2NhdGlvbj0iLlxzYW1wbGU4NTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYWRjNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgbG9jYXRpb249InNhbXBsZTI4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249Ii4vc2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiBsb2NhdGlvbj0iLlxzYW1wbGUzODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NzFhNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgbG9jYXRpb249InNhbXBsZTI1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgbG9jYXRpb249Ii4vc2FtcGxlNTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249Ii5cc2FtcGxlMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNmNmZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiIgbG9jYXRpb249InNhbXBsZTM3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgbG9jYXRpb249Ii4vc2FtcGxlNzgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiBsb2NhdGlvbj0iLlxzYW1wbGU1OTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQxMWEyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiBsb2NhdGlvbj0ic2FtcGxlNzE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgbG9jYXRpb249Ii4vc2FtcGxlOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgbG9jYXRpb249Ii5cc2FtcGxlMjMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDM2MDRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIGxvY2F0aW9uPSJzYW1wbGU5NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTcxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgbG9jYXRpb249Ii5cc2FtcGxlODA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2U2NTk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIGxvY2F0aW9uPSJzYW1wbGU5Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgbG9jYXRpb249Ii5cc2FtcGxlOTM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDVkMjYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgbG9jYXRpb249InNhbXBsZTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIGxvY2F0aW9uPSIuXHNhbXBsZTY0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk1N2Y1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiBsb2NhdGlvbj0ic2FtcGxlNzIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiBsb2NhdGlvbj0iLi9zYW1wbGU2NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiIGxvY2F0aW9uPSIuXHNhbXBsZTc4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiMTFjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiBsb2NhdGlvbj0ic2FtcGxlNTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0iLi9zYW1wbGU2Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgbG9jYXRpb249Ii5cc2FtcGxlMzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTcyMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiBsb2NhdGlvbj0ic2FtcGxlNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0iLi9zYW1wbGU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiBsb2NhdGlvbj0iLlxzYW1wbGU4OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjYzOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgbG9jYXRpb249InNhbXBsZTEzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgbG9jYXRpb249Ii4vc2FtcGxlMTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiBsb2NhdGlvbj0iLlxzYW1wbGU3ODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNjI5MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgbG9jYXRpb249InNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCIgbG9jYXRpb249Ii4vc2FtcGxlOTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiBsb2NhdGlvbj0iLlxzYW1wbGU4NzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNWI1ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgbG9jYXRpb249InNhbXBsZTk2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgbG9jYXRpb249Ii4vc2FtcGxlNDAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiBsb2NhdGlvbj0iLlxzYW1wbGU3MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWRhMDM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiIGxvY2F0aW9uPSJzYW1wbGUzMzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIGxvY2F0aW9uPSIuL3NhbXBsZTQyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgbG9jYXRpb249Ii5cc2FtcGxlNzMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjU3NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgbG9jYXRpb249InNhbXBsZTQwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiBsb2NhdGlvbj0iLi9zYW1wbGU1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiBsb2NhdGlvbj0iLlxzYW1wbGU5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRiOWVmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiBsb2NhdGlvbj0ic2FtcGxlMzYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiBsb2NhdGlvbj0iLi9zYW1wbGU3NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTUwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhNWEyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0ic2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiBsb2NhdGlvbj0iLi9zYW1wbGUzNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIGxvY2F0aW9uPSIuXHNhbXBsZTYyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmMTdmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiBsb2NhdGlvbj0ic2FtcGxlNTI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIGxvY2F0aW9uPSIuXHNhbXBsZTYyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFhM2Q4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiBsb2NhdGlvbj0ic2FtcGxlNDg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiBsb2NhdGlvbj0iLi9zYW1wbGU5MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIGxvY2F0aW9uPSIuXHNhbXBsZTUyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVhNGU2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiBsb2NhdGlvbj0ic2FtcGxlMjA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIGxvY2F0aW9uPSIuXHNhbXBsZTY1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc0NDgwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiBsb2NhdGlvbj0ic2FtcGxlMTMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiBsb2NhdGlvbj0iLi9zYW1wbGU2MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSIuXHNhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUzMjY3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiBsb2NhdGlvbj0ic2FtcGxlNTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyZjQzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiBsb2NhdGlvbj0ic2FtcGxlOTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiBsb2NhdGlvbj0iLi9zYW1wbGUyMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTk3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBjNjc4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiBsb2NhdGlvbj0ic2FtcGxlODE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiBsb2NhdGlvbj0iLi9zYW1wbGU1NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNGNlZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgbG9jYXRpb249InNhbXBsZTMwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgbG9jYXRpb249Ii4vc2FtcGxlNDExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiBsb2NhdGlvbj0iLlxzYW1wbGU1MjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIwOTEzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIGxvY2F0aW9uPSJzYW1wbGU4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgbG9jYXRpb249Ii4vc2FtcGxlNTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYjgwNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgbG9jYXRpb249InNhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgbG9jYXRpb249Ii4vc2FtcGxlMjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiBsb2NhdGlvbj0iLlxzYW1wbGU0NTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYmFjMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgbG9jYXRpb249InNhbXBsZTExNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0iLi9zYW1wbGU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgbG9jYXRpb249Ii5cc2FtcGxlNTMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTlmNWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiIGxvY2F0aW9uPSJzYW1wbGUzMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiBsb2NhdGlvbj0iLlxzYW1wbGU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjA3M2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIGxvY2F0aW9uPSJzYW1wbGU5MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgbG9jYXRpb249Ii5cc2FtcGxlOTQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDExZDUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiIGxvY2F0aW9uPSJzYW1wbGU2MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIGxvY2F0aW9uPSIuL3NhbXBsZTMxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgbG9jYXRpb249Ii5cc2FtcGxlNTgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzU4YmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIGxvY2F0aW9uPSJzYW1wbGUyOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249Ii5cc2FtcGxlODg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTI1OTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIGxvY2F0aW9uPSJzYW1wbGU1Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIGxvY2F0aW9uPSIuL3NhbXBsZTI3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgbG9jYXRpb249Ii5cc2FtcGxlMTY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWY1ZDZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIGxvY2F0aW9uPSJzYW1wbGU0MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIGxvY2F0aW9uPSIuL3NhbXBsZTI1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgbG9jYXRpb249Ii5cc2FtcGxlMzcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzZiMTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIGxvY2F0aW9uPSJzYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIGxvY2F0aW9uPSIuL3NhbXBsZTU1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgbG9jYXRpb249Ii5cc2FtcGxlNTQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMThkZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249InNhbXBsZTg4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyIgbG9jYXRpb249Ii4vc2FtcGxlMzIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiBsb2NhdGlvbj0iLlxzYW1wbGU0OTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE2MjdlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiBsb2NhdGlvbj0ic2FtcGxlNTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiBsb2NhdGlvbj0iLi9zYW1wbGU1ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIGxvY2F0aW9uPSIuXHNhbXBsZTY3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjJjYzU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIGxvY2F0aW9uPSJzYW1wbGU0Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIGxvY2F0aW9uPSIuL3NhbXBsZTI1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgbG9jYXRpb249Ii5cc2FtcGxlMTgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWYyMDk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIGxvY2F0aW9uPSJzYW1wbGU1OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIGxvY2F0aW9uPSIuL3NhbXBsZTEyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgbG9jYXRpb249Ii5cc2FtcGxlNTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDU3NTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIGxvY2F0aW9uPSJzYW1wbGUxNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIGxvY2F0aW9uPSIuL3NhbXBsZTI4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgbG9jYXRpb249Ii5cc2FtcGxlNDAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2U0NTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIGxvY2F0aW9uPSJzYW1wbGU4NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiIGxvY2F0aW9uPSIuL3NhbXBsZTgyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgbG9jYXRpb249Ii5cc2FtcGxlOTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzBkYmUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249InNhbXBsZTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTM1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQwN2VlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiBsb2NhdGlvbj0ic2FtcGxlNDQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTkyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYyOWFiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIiBsb2NhdGlvbj0ic2FtcGxlMzAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIGxvY2F0aW9uPSIuXHNhbXBsZTg4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlMTIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiBsb2NhdGlvbj0ic2FtcGxlNjc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0IiBsb2NhdGlvbj0iLi9zYW1wbGU5NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIGxvY2F0aW9uPSIuXHNhbXBsZTk0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmMjNjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5IiBsb2NhdGlvbj0ic2FtcGxlNjQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTc2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMzNTI4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiBsb2NhdGlvbj0ic2FtcGxlMTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiBsb2NhdGlvbj0iLi9zYW1wbGU2Nzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTYzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZmQyZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgbG9jYXRpb249InNhbXBsZTM2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCIgbG9jYXRpb249Ii4vc2FtcGxlMzM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiBsb2NhdGlvbj0iLlxzYW1wbGU1MDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0NGEyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiBsb2NhdGlvbj0ic2FtcGxlMTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiBsb2NhdGlvbj0iLi9zYW1wbGU3MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIGxvY2F0aW9uPSIuXHNhbXBsZTc2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEyOTdiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiBsb2NhdGlvbj0ic2FtcGxlMjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIGxvY2F0aW9uPSIuXHNhbXBsZTExNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmYjM4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiBsb2NhdGlvbj0ic2FtcGxlNDU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiBsb2NhdGlvbj0iLi9zYW1wbGU2ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIGxvY2F0aW9uPSIuXHNhbXBsZTM0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgzYTUzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiBsb2NhdGlvbj0ic2FtcGxlODY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIGxvY2F0aW9uPSIuXHNhbXBsZTcxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg0N2YzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiBsb2NhdGlvbj0ic2FtcGxlNjUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIGxvY2F0aW9uPSIuXHNhbXBsZTMyMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZlOWQ3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiBsb2NhdGlvbj0ic2FtcGxlNzUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiBsb2NhdGlvbj0iLi9zYW1wbGU2Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTUwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE2MzIyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiBsb2NhdGlvbj0ic2FtcGxlMTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiBsb2NhdGlvbj0iLi9zYW1wbGU0MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTE0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkxMWExYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiBsb2NhdGlvbj0ic2FtcGxlMzg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1IiBsb2NhdGlvbj0iLi9zYW1wbGU0MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249Ii5cc2FtcGxlNjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzOWI4NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgbG9jYXRpb249InNhbXBsZTE1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgbG9jYXRpb249Ii4vc2FtcGxlNTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiBsb2NhdGlvbj0iLlxzYW1wbGU1OTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMWRmZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgbG9jYXRpb249InNhbXBsZTc2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgbG9jYXRpb249Ii4vc2FtcGxlNzQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiBsb2NhdGlvbj0iLlxzYW1wbGUyODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjE0YWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIGxvY2F0aW9uPSJzYW1wbGUzNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgbG9jYXRpb249Ii5cc2FtcGxlNTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMmQ0OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgbG9jYXRpb249InNhbXBsZTQyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCIgbG9jYXRpb249Ii4vc2FtcGxlNzM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiBsb2NhdGlvbj0iLlxzYW1wbGUxMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMjRmNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249InNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCIgbG9jYXRpb249Ii4vc2FtcGxlMzY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiBsb2NhdGlvbj0iLlxzYW1wbGU1NzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNGJhNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiBsb2NhdGlvbj0ic2FtcGxlNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiBsb2NhdGlvbj0iLlxzYW1wbGU1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUwYjFkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249InNhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiIGxvY2F0aW9uPSIuL3NhbXBsZTY5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgbG9jYXRpb249Ii5cc2FtcGxlNjM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWQ4YmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiIGxvY2F0aW9uPSJzYW1wbGUxNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgbG9jYXRpb249Ii5cc2FtcGxlNDE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjg0NmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIGxvY2F0aW9uPSJzYW1wbGUzNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTkwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyIgbG9jYXRpb249Ii5cc2FtcGxlMjg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDEzNjFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIGxvY2F0aW9uPSJzYW1wbGU3MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIGxvY2F0aW9uPSIuL3NhbXBsZTI0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSIgbG9jYXRpb249Ii5cc2FtcGxlNjc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjg4M2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIGxvY2F0aW9uPSJzYW1wbGU5MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIGxvY2F0aW9uPSIuL3NhbXBsZTg2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgbG9jYXRpb249Ii5cc2FtcGxlODk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmIwYTM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSJzYW1wbGU4MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIGxvY2F0aW9uPSIuL3NhbXBsZTYzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCIgbG9jYXRpb249Ii5cc2FtcGxlMjIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGI3NzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIGxvY2F0aW9uPSJzYW1wbGU5ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIGxvY2F0aW9uPSIuL3NhbXBsZTc4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuXHNhbXBsZTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmZiNmQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgbG9jYXRpb249InNhbXBsZTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiBsb2NhdGlvbj0iLi9zYW1wbGU4NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIGxvY2F0aW9uPSIuXHNhbXBsZTQwNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWRjYmYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIGxvY2F0aW9uPSJzYW1wbGU2NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIGxvY2F0aW9uPSIuL3NhbXBsZTk4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgbG9jYXRpb249Ii5cc2FtcGxlMjg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDY3Mzc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiIGxvY2F0aW9uPSJzYW1wbGU2OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIGxvY2F0aW9uPSIuL3NhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgbG9jYXRpb249Ii5cc2FtcGxlMjE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2NmZWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgbG9jYXRpb249InNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIGxvY2F0aW9uPSIuXHNhbXBsZTUyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZhOTZkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiBsb2NhdGlvbj0ic2FtcGxlMTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI1NDRjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0IiBsb2NhdGlvbj0ic2FtcGxlNjg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiBsb2NhdGlvbj0iLi9zYW1wbGUyOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIGxvY2F0aW9uPSIuXHNhbXBsZTc0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyNjM1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIGxvY2F0aW9uPSJzYW1wbGU2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgbG9jYXRpb249Ii4vc2FtcGxlNDE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiBsb2NhdGlvbj0iLlxzYW1wbGU5MDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNzY2NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgbG9jYXRpb249InNhbXBsZTM5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgbG9jYXRpb249Ii4vc2FtcGxlNDc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMWNlMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgbG9jYXRpb249InNhbXBsZTg2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgbG9jYXRpb249Ii4vc2FtcGxlNTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0OTE2ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgbG9jYXRpb249InNhbXBsZTkwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgbG9jYXRpb249Ii4vc2FtcGxlNTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiBsb2NhdGlvbj0iLlxzYW1wbGUxMDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZmFmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiIgbG9jYXRpb249InNhbXBsZTE1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgbG9jYXRpb249Ii4vc2FtcGxlNzYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0iLlxzYW1wbGU2OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjRjZTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiIGxvY2F0aW9uPSJzYW1wbGUyODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIGxvY2F0aW9uPSIuL3NhbXBsZTQzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgbG9jYXRpb249Ii5cc2FtcGxlOTMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMjZiOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgbG9jYXRpb249InNhbXBsZTQyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiBsb2NhdGlvbj0iLi9zYW1wbGU1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgbG9jYXRpb249Ii5cc2FtcGxlODA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzA2MWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIGxvY2F0aW9uPSJzYW1wbGU1NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiIGxvY2F0aW9uPSIuL3NhbXBsZTEwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgbG9jYXRpb249Ii5cc2FtcGxlNjQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmNhOTQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIGxvY2F0aW9uPSJzYW1wbGUyNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTkyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgbG9jYXRpb249Ii5cc2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWI0ZDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIGxvY2F0aW9uPSJzYW1wbGUxMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIGxvY2F0aW9uPSIuL3NhbXBsZTM2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgbG9jYXRpb249Ii5cc2FtcGxlOTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTFkZjhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIGxvY2F0aW9uPSJzYW1wbGU3NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgbG9jYXRpb249Ii5cc2FtcGxlODUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmY3ODVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIGxvY2F0aW9uPSJzYW1wbGU4Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIGxvY2F0aW9uPSIuL3NhbXBsZTk0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgbG9jYXRpb249Ii5cc2FtcGxlMjQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGEyODc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciIGxvY2F0aW9uPSJzYW1wbGUzMjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIGxvY2F0aW9uPSIuL3NhbXBsZTIzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgbG9jYXRpb249Ii5cc2FtcGxlNjk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTExYTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiBsb2NhdGlvbj0iLi9zYW1wbGUxODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii5cc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMjNlMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiIgbG9jYXRpb249InNhbXBsZTMzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgbG9jYXRpb249Ii4vc2FtcGxlMjU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZGUyYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgbG9jYXRpb249InNhbXBsZTQ2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgbG9jYXRpb249Ii4vc2FtcGxlMjc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIGxvY2F0aW9uPSIuXHNhbXBsZTU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3MGRmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiBsb2NhdGlvbj0ic2FtcGxlODg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiBsb2NhdGlvbj0iLi9zYW1wbGU4NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiIGxvY2F0aW9uPSIuXHNhbXBsZTk2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2IxMzQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIGxvY2F0aW9uPSJzYW1wbGU2NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI0NTAyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4IiBsb2NhdGlvbj0ic2FtcGxlNTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIGxvY2F0aW9uPSIuXHNhbXBsZTgwMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJhODEyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5IiBsb2NhdGlvbj0ic2FtcGxlNjk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU4NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTk1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmZmJjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiBsb2NhdGlvbj0ic2FtcGxlNjM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiBsb2NhdGlvbj0iLi9zYW1wbGU4OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIGxvY2F0aW9uPSIuXHNhbXBsZTg1Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk2OGZlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIGxvY2F0aW9uPSJzYW1wbGUzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCIgbG9jYXRpb249Ii4vc2FtcGxlNDI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiBsb2NhdGlvbj0iLlxzYW1wbGU1NjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZTEzNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgbG9jYXRpb249InNhbXBsZTk2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgbG9jYXRpb249Ii4vc2FtcGxlOTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIiBsb2NhdGlvbj0iLlxzYW1wbGU1NDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NGFiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249InNhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0iLi9zYW1wbGU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgbG9jYXRpb249Ii5cc2FtcGxlNDIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmY0ZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIGxvY2F0aW9uPSJzYW1wbGU3MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIGxvY2F0aW9uPSIuL3NhbXBsZTIwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiBsb2NhdGlvbj0iLlxzYW1wbGU3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ3OGQ5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiBsb2NhdGlvbj0ic2FtcGxlNDgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249Ii5cc2FtcGxlNTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZThhYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgbG9jYXRpb249InNhbXBsZTk0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgbG9jYXRpb249Ii4vc2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiBsb2NhdGlvbj0iLlxzYW1wbGU0Mzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDUxMmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgbG9jYXRpb249InNhbXBsZTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiBsb2NhdGlvbj0iLi9zYW1wbGU4OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIGxvY2F0aW9uPSIuXHNhbXBsZTM2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDhlZTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIGxvY2F0aW9uPSJzYW1wbGU1NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIGxvY2F0aW9uPSIuL3NhbXBsZTg4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgbG9jYXRpb249Ii5cc2FtcGxlNzU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWFlNjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIGxvY2F0aW9uPSJzYW1wbGU5ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIGxvY2F0aW9uPSIuL3NhbXBsZTg3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgbG9jYXRpb249Ii5cc2FtcGxlOTIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGY4NWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIGxvY2F0aW9uPSJzYW1wbGUzNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIGxvY2F0aW9uPSIuL3NhbXBsZTcxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgbG9jYXRpb249Ii5cc2FtcGxlODQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTYyNWI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIGxvY2F0aW9uPSJzYW1wbGU5NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTI2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgbG9jYXRpb249Ii5cc2FtcGxlMjM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTY0OTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiIGxvY2F0aW9uPSJzYW1wbGU3MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIGxvY2F0aW9uPSIuL3NhbXBsZTI5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgbG9jYXRpb249Ii5cc2FtcGxlMTM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2UyY2Q0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiIGxvY2F0aW9uPSJzYW1wbGU3MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiIGxvY2F0aW9uPSIuL3NhbXBsZTc3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgbG9jYXRpb249Ii5cc2FtcGxlMzIxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTEwNWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIGxvY2F0aW9uPSJzYW1wbGU4NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTY4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgbG9jYXRpb249Ii5cc2FtcGxlOTI4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzc0MjBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIGxvY2F0aW9uPSJzYW1wbGU3MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTkwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgbG9jYXRpb249Ii5cc2FtcGxlNzIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjM3ZGU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIGxvY2F0aW9uPSJzYW1wbGU2MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgbG9jYXRpb249Ii4vc2FtcGxlNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIGxvY2F0aW9uPSIuXHNhbXBsZTM0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ1ZDdlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiBsb2NhdGlvbj0ic2FtcGxlNzYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTE5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyY2U1YjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiIgbG9jYXRpb249InNhbXBsZTYxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgbG9jYXRpb249Ii4vc2FtcGxlOTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVkZTU1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSJzYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgbG9jYXRpb249Ii4vc2FtcGxlNjc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0IiBsb2NhdGlvbj0iLlxzYW1wbGUyMjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZjE2N2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgbG9jYXRpb249InNhbXBsZTkxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuL3NhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIGxvY2F0aW9uPSIuXHNhbXBsZTY2OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlZWFiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiBsb2NhdGlvbj0ic2FtcGxlNDYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSIuL3NhbXBsZTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIGxvY2F0aW9uPSIuXHNhbXBsZTI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDIxNTZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIGxvY2F0aW9uPSJzYW1wbGU1OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIGxvY2F0aW9uPSIuL3NhbXBsZTg4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgbG9jYXRpb249Ii5cc2FtcGxlNDM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGNkNTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIGxvY2F0aW9uPSJzYW1wbGU3Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIGxvY2F0aW9uPSIuL3NhbXBsZTQxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgbG9jYXRpb249Ii5cc2FtcGxlMjEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjAwYThlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSJzYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiBsb2NhdGlvbj0iLlxzYW1wbGUxNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk3MTYzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2IiBsb2NhdGlvbj0ic2FtcGxlODE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249Ii5cc2FtcGxlNzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMTlmZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgbG9jYXRpb249InNhbXBsZTEzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249Ii5cc2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzY3NzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIGxvY2F0aW9uPSJzYW1wbGU3OTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIGxvY2F0aW9uPSIuL3NhbXBsZTU3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgbG9jYXRpb249Ii5cc2FtcGxlMTA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTNlNTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIGxvY2F0aW9uPSJzYW1wbGUzNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIGxvY2F0aW9uPSIuL3NhbXBsZTU2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiBsb2NhdGlvbj0iLlxzYW1wbGUyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZDlmMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgbG9jYXRpb249InNhbXBsZTE0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgbG9jYXRpb249Ii4vc2FtcGxlNjE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEzNTE4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiBsb2NhdGlvbj0ic2FtcGxlNTg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiBsb2NhdGlvbj0iLlxzYW1wbGU5Nzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YWYxZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgbG9jYXRpb249InNhbXBsZTY2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgbG9jYXRpb249Ii4vc2FtcGxlOTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Nzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMzE0MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgbG9jYXRpb249InNhbXBsZTM5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgbG9jYXRpb249Ii4vc2FtcGxlNDYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2MGM3ODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0ic2FtcGxlODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTM2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgbG9jYXRpb249Ii5cc2FtcGxlODE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTQ2NGU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIGxvY2F0aW9uPSJzYW1wbGUyMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTUxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCIgbG9jYXRpb249Ii5cc2FtcGxlOTEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjRkOThjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249InNhbXBsZTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIGxvY2F0aW9uPSIuL3NhbXBsZTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiBsb2NhdGlvbj0iLlxzYW1wbGU2ODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNzgyNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgbG9jYXRpb249InNhbXBsZTkyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgbG9jYXRpb249Ii4vc2FtcGxlODA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiBsb2NhdGlvbj0iLlxzYW1wbGU3NjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwOGY3ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgbG9jYXRpb249InNhbXBsZTQyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgbG9jYXRpb249Ii4vc2FtcGxlMTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSIuXHNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTg1Y2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIGxvY2F0aW9uPSJzYW1wbGU3NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTI0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgbG9jYXRpb249Ii5cc2FtcGxlODA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjQyYjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiIGxvY2F0aW9uPSJzYW1wbGUyMTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTM3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249Ii5cc2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNlNGVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiBsb2NhdGlvbj0ic2FtcGxlMzc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiBsb2NhdGlvbj0iLi9zYW1wbGU0MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciIGxvY2F0aW9uPSIuXHNhbXBsZTQxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTBjMDRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIGxvY2F0aW9uPSJzYW1wbGUxMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiIGxvY2F0aW9uPSIuL3NhbXBsZTE1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgbG9jYXRpb249Ii5cc2FtcGxlMzY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTUwOGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIGxvY2F0aW9uPSJzYW1wbGU4NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTg3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgbG9jYXRpb249Ii5cc2FtcGxlMzQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2UzMWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIGxvY2F0aW9uPSJzYW1wbGU1OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgbG9jYXRpb249Ii5cc2FtcGxlMTg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2EyMzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciIGxvY2F0aW9uPSJzYW1wbGU3Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIGxvY2F0aW9uPSIuL3NhbXBsZTkzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgbG9jYXRpb249Ii5cc2FtcGxlNDc3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTZkNzg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIGxvY2F0aW9uPSJzYW1wbGU3NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIGxvY2F0aW9uPSIuL3NhbXBsZTUzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiBsb2NhdGlvbj0iLlxzYW1wbGUxMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU2OTU0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiBsb2NhdGlvbj0ic2FtcGxlNjkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIGxvY2F0aW9uPSIuXHNhbXBsZTk4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFiMTY5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiBsb2NhdGlvbj0ic2FtcGxlODQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiBsb2NhdGlvbj0iLi9zYW1wbGUzOTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIGxvY2F0aW9uPSIuXHNhbXBsZTIyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYxMzY1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIiBsb2NhdGlvbj0ic2FtcGxlOTExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIGxvY2F0aW9uPSIuL3NhbXBsZTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiBsb2NhdGlvbj0iLlxzYW1wbGU2MDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMTU1ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgbG9jYXRpb249InNhbXBsZTk2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgbG9jYXRpb249Ii4vc2FtcGxlMzI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiBsb2NhdGlvbj0iLlxzYW1wbGUzMTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMmNiYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249InNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgbG9jYXRpb249Ii4vc2FtcGxlODYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSIuXHNhbXBsZTYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYjA0MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgbG9jYXRpb249InNhbXBsZTUzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgbG9jYXRpb249Ii4vc2FtcGxlMzUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIiBsb2NhdGlvbj0iLlxzYW1wbGU2MTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5ZTE4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiBsb2NhdGlvbj0ic2FtcGxlNDQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249Ii5cc2FtcGxlMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI0NGM1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIiBsb2NhdGlvbj0ic2FtcGxlNjgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiBsb2NhdGlvbj0iLi9zYW1wbGU2NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgbG9jYXRpb249Ii5cc2FtcGxlNzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMTVkNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgbG9jYXRpb249InNhbXBsZTk0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgbG9jYXRpb249Ii4vc2FtcGxlNDI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3IiBsb2NhdGlvbj0iLlxzYW1wbGU5NTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxOTM1NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgbG9jYXRpb249InNhbXBsZTkzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCIgbG9jYXRpb249Ii4vc2FtcGxlNzUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiBsb2NhdGlvbj0iLlxzYW1wbGUxOTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NjM2MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgbG9jYXRpb249InNhbXBsZTc3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgbG9jYXRpb249Ii4vc2FtcGxlNzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiBsb2NhdGlvbj0iLlxzYW1wbGU3NTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MjU3MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgbG9jYXRpb249InNhbXBsZTQwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgbG9jYXRpb249Ii4vc2FtcGxlNTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMjIzYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgbG9jYXRpb249InNhbXBsZTY2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgbG9jYXRpb249Ii4vc2FtcGxlNjg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIGxvY2F0aW9uPSIuXHNhbXBsZTU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDY5YjI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIGxvY2F0aW9uPSJzYW1wbGU4MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTYyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgbG9jYXRpb249Ii5cc2FtcGxlOTgyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2QzM2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiIGxvY2F0aW9uPSJzYW1wbGUyMzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTcxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgbG9jYXRpb249Ii5cc2FtcGxlNjY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzgzNmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIGxvY2F0aW9uPSJzYW1wbGU1ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgbG9jYXRpb249Ii4vc2FtcGxlOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIGxvY2F0aW9uPSIuXHNhbXBsZTY1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmM2I1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiBsb2NhdGlvbj0ic2FtcGxlNDcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiBsb2NhdGlvbj0iLi9zYW1wbGU3MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIGxvY2F0aW9uPSIuXHNhbXBsZTM2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZThjM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSIgbG9jYXRpb249InNhbXBsZTY4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCIgbG9jYXRpb249Ii4vc2FtcGxlNDc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiBsb2NhdGlvbj0iLlxzYW1wbGUyMzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdiOGFjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiBsb2NhdGlvbj0ic2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiBsb2NhdGlvbj0iLi9zYW1wbGU1NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTk1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdmYzU3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIGxvY2F0aW9uPSJzYW1wbGU5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgbG9jYXRpb249Ii4vc2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5IiBsb2NhdGlvbj0iLlxzYW1wbGUzOTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMzdmZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgbG9jYXRpb249InNhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgbG9jYXRpb249Ii4vc2FtcGxlMTExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNThlMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgbG9jYXRpb249InNhbXBsZTM5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgbG9jYXRpb249Ii4vc2FtcGxlMTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU5NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMjg1MDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgbG9jYXRpb249InNhbXBsZTY5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgbG9jYXRpb249Ii4vc2FtcGxlNzcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIGxvY2F0aW9uPSIuXHNhbXBsZTc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDhjMDQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIGxvY2F0aW9uPSJzYW1wbGU0MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTgwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgbG9jYXRpb249Ii5cc2FtcGxlOTkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTczMGZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIGxvY2F0aW9uPSJzYW1wbGU1MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTE3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgbG9jYXRpb249Ii5cc2FtcGxlNjE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWYwODU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIGxvY2F0aW9uPSJzYW1wbGU0OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIGxvY2F0aW9uPSIuL3NhbXBsZTgxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgbG9jYXRpb249Ii5cc2FtcGxlOTY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODc4N2VjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIGxvY2F0aW9uPSJzYW1wbGU2NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgbG9jYXRpb249Ii5cc2FtcGxlMjQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGYzNjEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIGxvY2F0aW9uPSJzYW1wbGUyOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIGxvY2F0aW9uPSIuL3NhbXBsZTg1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgbG9jYXRpb249Ii5cc2FtcGxlODI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA4NmNlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiBsb2NhdGlvbj0ic2FtcGxlNDM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiBsb2NhdGlvbj0iLi9zYW1wbGU0OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLlxzYW1wbGU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYjQzZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgbG9jYXRpb249InNhbXBsZTkwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgbG9jYXRpb249Ii5cc2FtcGxlNDkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGNlODg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIGxvY2F0aW9uPSJzYW1wbGUxMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiIGxvY2F0aW9uPSIuL3NhbXBsZTM5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgbG9jYXRpb249Ii5cc2FtcGxlMjY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDBiNDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIGxvY2F0aW9uPSJzYW1wbGU4Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIGxvY2F0aW9uPSIuL3NhbXBsZTUwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgbG9jYXRpb249Ii5cc2FtcGxlNDU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjBjZTVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIGxvY2F0aW9uPSJzYW1wbGU0MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSIuL3NhbXBsZTIzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiIgbG9jYXRpb249Ii5cc2FtcGxlMTAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmMyOTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIGxvY2F0aW9uPSJzYW1wbGU3MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgbG9jYXRpb249Ii5cc2FtcGxlODM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDM3YjBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIGxvY2F0aW9uPSJzYW1wbGU1MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIGxvY2F0aW9uPSIuL3NhbXBsZTM3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgbG9jYXRpb249Ii5cc2FtcGxlMzI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmY4NTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIGxvY2F0aW9uPSJzYW1wbGU4OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgbG9jYXRpb249Ii5cc2FtcGxlOTAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2ZmYjM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIGxvY2F0aW9uPSJzYW1wbGU0NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIGxvY2F0aW9uPSIuL3NhbXBsZTM1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgbG9jYXRpb249Ii5cc2FtcGxlMjcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDM1NjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIGxvY2F0aW9uPSJzYW1wbGU3NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIGxvY2F0aW9uPSIuL3NhbXBsZTIwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgbG9jYXRpb249Ii5cc2FtcGxlMTc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWVhZjg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIGxvY2F0aW9uPSJzYW1wbGU2NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTg2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgbG9jYXRpb249Ii5cc2FtcGxlMTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBjYzY4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIGxvY2F0aW9uPSJzYW1wbGU3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgbG9jYXRpb249Ii4vc2FtcGxlNzI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY4MzY0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiBsb2NhdGlvbj0ic2FtcGxlMzI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0iLi9zYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM0MGZhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiBsb2NhdGlvbj0ic2FtcGxlNTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiBsb2NhdGlvbj0iLi9zYW1wbGUxNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk4YWQ5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiBsb2NhdGlvbj0ic2FtcGxlNjQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiBsb2NhdGlvbj0iLi9zYW1wbGU1MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTQxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVhYjA2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiBsb2NhdGlvbj0ic2FtcGxlMzQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiBsb2NhdGlvbj0iLi9zYW1wbGU3Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIGxvY2F0aW9uPSIuXHNhbXBsZTg3OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY2NTFlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIiBsb2NhdGlvbj0ic2FtcGxlODIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiBsb2NhdGlvbj0iLi9zYW1wbGU2MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIGxvY2F0aW9uPSIuXHNhbXBsZTIzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0OWRmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3IiBsb2NhdGlvbj0ic2FtcGxlNzI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiBsb2NhdGlvbj0iLi9zYW1wbGUzMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTI0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMGI4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiBsb2NhdGlvbj0ic2FtcGxlODc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiBsb2NhdGlvbj0iLi9zYW1wbGU0MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIGxvY2F0aW9uPSIuXHNhbXBsZTc3MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUwNGEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2IiBsb2NhdGlvbj0ic2FtcGxlMjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiBsb2NhdGlvbj0iLi9zYW1wbGU1Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTcwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZhODNhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIiBsb2NhdGlvbj0ic2FtcGxlMTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiBsb2NhdGlvbj0iLi9zYW1wbGUyMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTcwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVmYmVmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0ic2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiBsb2NhdGlvbj0iLi9zYW1wbGU2ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgbG9jYXRpb249Ii5cc2FtcGxlNTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTVhMjQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIGxvY2F0aW9uPSJzYW1wbGU4NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTE0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgbG9jYXRpb249Ii5cc2FtcGxlNjc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYjI1NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgbG9jYXRpb249InNhbXBsZTM1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgbG9jYXRpb249Ii4vc2FtcGxlOTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiBsb2NhdGlvbj0iLlxzYW1wbGU2ODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNWYzMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgbG9jYXRpb249InNhbXBsZTI2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgbG9jYXRpb249Ii4vc2FtcGxlODAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiBsb2NhdGlvbj0iLlxzYW1wbGU3NTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMWQ5N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgbG9jYXRpb249InNhbXBsZTg0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgbG9jYXRpb249Ii4vc2FtcGxlMTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiBsb2NhdGlvbj0iLlxzYW1wbGU0MTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZTFiYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgbG9jYXRpb249InNhbXBsZTMxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCIgbG9jYXRpb249Ii4vc2FtcGxlMTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZGNmODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgbG9jYXRpb249InNhbXBsZTI4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgbG9jYXRpb249Ii4vc2FtcGxlOTQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiBsb2NhdGlvbj0iLlxzYW1wbGUyNDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMjNiMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSIgbG9jYXRpb249InNhbXBsZTE3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiIgbG9jYXRpb249Ii4vc2FtcGxlNTE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiBsb2NhdGlvbj0iLlxzYW1wbGU3NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMzUwZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgbG9jYXRpb249InNhbXBsZTc3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249Ii4vc2FtcGxlMjM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiBsb2NhdGlvbj0iLlxzYW1wbGU2ODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NTJhY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0ic2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiIGxvY2F0aW9uPSIuL3NhbXBsZTk5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgbG9jYXRpb249Ii5cc2FtcGxlMzI4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDIyMGUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIGxvY2F0aW9uPSJzYW1wbGUxMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIGxvY2F0aW9uPSIuL3NhbXBsZTQxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiBsb2NhdGlvbj0iLlxzYW1wbGU5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM3ZjFiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiBsb2NhdGlvbj0ic2FtcGxlNjI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiBsb2NhdGlvbj0iLi9zYW1wbGU0OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZGViYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgbG9jYXRpb249InNhbXBsZTkzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgbG9jYXRpb249Ii4vc2FtcGxlMzk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiBsb2NhdGlvbj0iLlxzYW1wbGU3MTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NkOTIyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSJzYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgbG9jYXRpb249Ii4vc2FtcGxlNzYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiBsb2NhdGlvbj0iLlxzYW1wbGU4MTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYmIwNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0ic2FtcGxlOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIGxvY2F0aW9uPSIuL3NhbXBsZTcyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgbG9jYXRpb249Ii5cc2FtcGxlMzMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGQ3Zjc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIGxvY2F0aW9uPSJzYW1wbGUyOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIGxvY2F0aW9uPSIuL3NhbXBsZTM4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgbG9jYXRpb249Ii5cc2FtcGxlMjA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTc2ZjkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiIGxvY2F0aW9uPSJzYW1wbGU3NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIGxvY2F0aW9uPSIuL3NhbXBsZTU2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgbG9jYXRpb249Ii5cc2FtcGxlMTc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjMzMzkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIGxvY2F0aW9uPSJzYW1wbGUyOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIGxvY2F0aW9uPSIuL3NhbXBsZTYzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgbG9jYXRpb249Ii5cc2FtcGxlNDU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDNmNzE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIGxvY2F0aW9uPSJzYW1wbGU2MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIGxvY2F0aW9uPSIuL3NhbXBsZTg2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCIgbG9jYXRpb249Ii5cc2FtcGxlNjg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTQ2ZWEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIGxvY2F0aW9uPSJzYW1wbGU4MTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTY3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgbG9jYXRpb249Ii5cc2FtcGxlOTE4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGQ2MTEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIGxvY2F0aW9uPSJzYW1wbGUyNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIGxvY2F0aW9uPSIuL3NhbXBsZTM3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgbG9jYXRpb249Ii5cc2FtcGxlNzk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmNhYTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiIGxvY2F0aW9uPSJzYW1wbGU5MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIGxvY2F0aW9uPSIuL3NhbXBsZTU5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgbG9jYXRpb249Ii5cc2FtcGxlNTU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTEzYTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgbG9jYXRpb249InNhbXBsZTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiBsb2NhdGlvbj0iLi9zYW1wbGUxMDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTQwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmE4NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgbG9jYXRpb249InNhbXBsZTU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgbG9jYXRpb249Ii4vc2FtcGxlNDQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSIuXHNhbXBsZTE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NDNhM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgbG9jYXRpb249InNhbXBsZTQxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgbG9jYXRpb249Ii4vc2FtcGxlMjkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSIuXHNhbXBsZTIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmFlNzc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIGxvY2F0aW9uPSJzYW1wbGUzOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTczNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgbG9jYXRpb249Ii5cc2FtcGxlOTQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTdjMWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIGxvY2F0aW9uPSJzYW1wbGUyMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgbG9jYXRpb249Ii4vc2FtcGxlMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI3MWY5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSJzYW1wbGUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiBsb2NhdGlvbj0iLi9zYW1wbGU1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgbG9jYXRpb249Ii5cc2FtcGxlOTg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzgxZmJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIGxvY2F0aW9uPSJzYW1wbGUxODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgbG9jYXRpb249Ii4vc2FtcGxlMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIGxvY2F0aW9uPSIuXHNhbXBsZTE5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE1YmEwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiBsb2NhdGlvbj0ic2FtcGxlODYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii5cc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTY3MzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgbG9jYXRpb249InNhbXBsZTk5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgbG9jYXRpb249Ii4vc2FtcGxlNDY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ODQ4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgbG9jYXRpb249InNhbXBsZTQ3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgbG9jYXRpb249Ii4vc2FtcGxlMzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTFkNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgbG9jYXRpb249InNhbXBsZTY0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgbG9jYXRpb249Ii4vc2FtcGxlNjIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiBsb2NhdGlvbj0iLlxzYW1wbGU4NzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZWQyNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgbG9jYXRpb249InNhbXBsZTcwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgbG9jYXRpb249Ii4vc2FtcGxlNDYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiBsb2NhdGlvbj0iLlxzYW1wbGU3ODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2IzMDhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIGxvY2F0aW9uPSJzYW1wbGU2NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTI2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgbG9jYXRpb249Ii5cc2FtcGxlNjk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZGIxNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgbG9jYXRpb249InNhbXBsZTQyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgbG9jYXRpb249Ii4vc2FtcGxlMzg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiBsb2NhdGlvbj0iLlxzYW1wbGU1MzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmY2YxMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgbG9jYXRpb249InNhbXBsZTI3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgbG9jYXRpb249Ii4vc2FtcGxlNzQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiBsb2NhdGlvbj0iLlxzYW1wbGUyODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyOTZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgbG9jYXRpb249InNhbXBsZTQxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCIgbG9jYXRpb249Ii4vc2FtcGxlMjc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiBsb2NhdGlvbj0iLlxzYW1wbGUxMDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYTU2OWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgbG9jYXRpb249InNhbXBsZTg0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgbG9jYXRpb249Ii4vc2FtcGxlMTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNDFjZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgbG9jYXRpb249InNhbXBsZTgxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgbG9jYXRpb249Ii4vc2FtcGxlMzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNjk5NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgbG9jYXRpb249InNhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgbG9jYXRpb249Ii4vc2FtcGxlMTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiBsb2NhdGlvbj0iLlxzYW1wbGU3MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OWVmZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCIgbG9jYXRpb249InNhbXBsZTcwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgbG9jYXRpb249Ii4vc2FtcGxlMTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiBsb2NhdGlvbj0iLlxzYW1wbGU0MjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNjE2OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0ic2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIGxvY2F0aW9uPSIuL3NhbXBsZTQzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgbG9jYXRpb249Ii5cc2FtcGxlNDc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2UyY2MxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIGxvY2F0aW9uPSJzYW1wbGU3OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTcwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSIgbG9jYXRpb249Ii5cc2FtcGxlNjYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGFiZDE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgbG9jYXRpb249InNhbXBsZTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiBsb2NhdGlvbj0iLi9zYW1wbGU2NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTU3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYzIzNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgbG9jYXRpb249InNhbXBsZTc5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgbG9jYXRpb249Ii4vc2FtcGxlNjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDllZmMwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiBsb2NhdGlvbj0ic2FtcGxlODg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIGxvY2F0aW9uPSIuXHNhbXBsZTU4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdmNjJjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiBsb2NhdGlvbj0ic2FtcGxlNDMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiBsb2NhdGlvbj0iLi9zYW1wbGUyMDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIGxvY2F0aW9uPSIuXHNhbXBsZTIzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMwYWUwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiBsb2NhdGlvbj0ic2FtcGxlNDM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU1ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhMTk2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiBsb2NhdGlvbj0ic2FtcGxlODM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiBsb2NhdGlvbj0iLi9zYW1wbGU3MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIGxvY2F0aW9uPSIuXHNhbXBsZTI4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBjZWFkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiBsb2NhdGlvbj0ic2FtcGxlNzA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiBsb2NhdGlvbj0iLi9zYW1wbGU3MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIGxvY2F0aW9uPSIuXHNhbXBsZTc4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ0YTc3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiBsb2NhdGlvbj0ic2FtcGxlNTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIGxvY2F0aW9uPSIuXHNhbXBsZTU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMyMTcwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSJzYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0iLi9zYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgbG9jYXRpb249Ii5cc2FtcGxlMjA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWMxOGYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIGxvY2F0aW9uPSJzYW1wbGU1MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTE1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgbG9jYXRpb249Ii5cc2FtcGxlMTYwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWI5ZDZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiIGxvY2F0aW9uPSJzYW1wbGU1NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgbG9jYXRpb249Ii5cc2FtcGxlNjE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzJjOTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIGxvY2F0aW9uPSJzYW1wbGU2Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTkxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSIgbG9jYXRpb249Ii5cc2FtcGxlNDk1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU1MjQ4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiBsb2NhdGlvbj0ic2FtcGxlODM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiBsb2NhdGlvbj0iLi9zYW1wbGU1Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiIGxvY2F0aW9uPSIuXHNhbXBsZTg0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmQ3YjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiIGxvY2F0aW9uPSJzYW1wbGUxNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIGxvY2F0aW9uPSIuL3NhbXBsZTQyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgbG9jYXRpb249Ii5cc2FtcGxlNzc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjJmNjA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIGxvY2F0aW9uPSJzYW1wbGU5ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTYwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgbG9jYXRpb249Ii5cc2FtcGxlMTU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjNiOWE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIGxvY2F0aW9uPSJzYW1wbGUzOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIGxvY2F0aW9uPSIuL3NhbXBsZTc3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgbG9jYXRpb249Ii5cc2FtcGxlODAzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjcyYWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIGxvY2F0aW9uPSJzYW1wbGUxOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgbG9jYXRpb249Ii5cc2FtcGxlNzM2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2RjNDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIGxvY2F0aW9uPSJzYW1wbGUxMTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIGxvY2F0aW9uPSIuL3NhbXBsZTc2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249Ii5cc2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmFiZTJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSJzYW1wbGU4MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIGxvY2F0aW9uPSIuL3NhbXBsZTc1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgbG9jYXRpb249Ii5cc2FtcGxlODc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjNmNDQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIGxvY2F0aW9uPSJzYW1wbGU4NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIGxvY2F0aW9uPSIuL3NhbXBsZTUwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQyNzk2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiBsb2NhdGlvbj0ic2FtcGxlMzcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTE5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg2NjgwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiBsb2NhdGlvbj0ic2FtcGxlNTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIGxvY2F0aW9uPSIuXHNhbXBsZTY3MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJjZDdlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIiBsb2NhdGlvbj0ic2FtcGxlOTAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiBsb2NhdGlvbj0iLi9zYW1wbGU2NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIGxvY2F0aW9uPSIuXHNhbXBsZTgzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmI4NGFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIGxvY2F0aW9uPSJzYW1wbGUzNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIGxvY2F0aW9uPSIuL3NhbXBsZTEzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgbG9jYXRpb249Ii5cc2FtcGxlNDY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZmJmZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgbG9jYXRpb249InNhbXBsZTQ4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgbG9jYXRpb249Ii4vc2FtcGxlMjEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1IiBsb2NhdGlvbj0iLlxzYW1wbGU3MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzZjE5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiBsb2NhdGlvbj0ic2FtcGxlOTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIGxvY2F0aW9uPSIuXHNhbXBsZTMwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTExNzVmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1IiBsb2NhdGlvbj0ic2FtcGxlMTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiBsb2NhdGlvbj0iLi9zYW1wbGUzODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiIGxvY2F0aW9uPSIuXHNhbXBsZTI5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE5Y2UxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiBsb2NhdGlvbj0ic2FtcGxlNjc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiIGxvY2F0aW9uPSIuXHNhbXBsZTc2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjNTRjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiBsb2NhdGlvbj0ic2FtcGxlMjk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiBsb2NhdGlvbj0iLlxzYW1wbGU1NjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NjA5NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgbG9jYXRpb249InNhbXBsZTk0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiBsb2NhdGlvbj0iLi9zYW1wbGUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgbG9jYXRpb249Ii5cc2FtcGxlMTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTAzNzU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIGxvY2F0aW9uPSJzYW1wbGU5NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSIuL3NhbXBsZTI0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgbG9jYXRpb249Ii5cc2FtcGxlNzM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzAxN2Y0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIGxvY2F0aW9uPSJzYW1wbGU1ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiIGxvY2F0aW9uPSIuL3NhbXBsZTI4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgbG9jYXRpb249Ii5cc2FtcGxlNTU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2YwMGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIGxvY2F0aW9uPSJzYW1wbGU5MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgbG9jYXRpb249Ii4vc2FtcGxlMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIGxvY2F0aW9uPSIuXHNhbXBsZTU3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzljODIzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiBsb2NhdGlvbj0ic2FtcGxlNzg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTUwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ5OGFhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiBsb2NhdGlvbj0ic2FtcGxlNzQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiBsb2NhdGlvbj0iLi9zYW1wbGU4NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiIGxvY2F0aW9uPSIuXHNhbXBsZTI5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MjM0NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgbG9jYXRpb249InNhbXBsZTU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgbG9jYXRpb249Ii4vc2FtcGxlNTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiBsb2NhdGlvbj0iLlxzYW1wbGU4ODEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVjZDU2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiBsb2NhdGlvbj0ic2FtcGxlNjM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiBsb2NhdGlvbj0iLi9zYW1wbGU2MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIGxvY2F0aW9uPSIuXHNhbXBsZTM2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkMzBhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiBsb2NhdGlvbj0ic2FtcGxlNTAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiBsb2NhdGlvbj0iLi9zYW1wbGU3NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIGxvY2F0aW9uPSIuXHNhbXBsZTI4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY5YTVjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiBsb2NhdGlvbj0ic2FtcGxlMjA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiBsb2NhdGlvbj0iLi9zYW1wbGU2Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii5cc2FtcGxlODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjdkZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgbG9jYXRpb249InNhbXBsZTIxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgbG9jYXRpb249Ii4vc2FtcGxlODI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiBsb2NhdGlvbj0iLlxzYW1wbGU1ODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNzhjZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgbG9jYXRpb249InNhbXBsZTcxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgbG9jYXRpb249Ii4vc2FtcGxlODA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiBsb2NhdGlvbj0iLlxzYW1wbGU5NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2N2NjZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgbG9jYXRpb249InNhbXBsZTg5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgbG9jYXRpb249Ii4vc2FtcGxlNDU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiBsb2NhdGlvbj0iLlxzYW1wbGU1OTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwODNjMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgbG9jYXRpb249InNhbXBsZTczNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgbG9jYXRpb249Ii4vc2FtcGxlMTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiBsb2NhdGlvbj0iLlxzYW1wbGUxMDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyY2Y4MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiBsb2NhdGlvbj0ic2FtcGxlMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiIGxvY2F0aW9uPSIuL3NhbXBsZTMzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuXHNhbXBsZTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZGNjMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgbG9jYXRpb249InNhbXBsZTI4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiBsb2NhdGlvbj0iLi9zYW1wbGUyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSIgbG9jYXRpb249Ii5cc2FtcGxlMzExLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTBhMzIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIGxvY2F0aW9uPSJzYW1wbGU3Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiIGxvY2F0aW9uPSIuL3NhbXBsZTM2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgbG9jYXRpb249Ii5cc2FtcGxlODQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M1NjQyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiBsb2NhdGlvbj0ic2FtcGxlMzY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiBsb2NhdGlvbj0iLi9zYW1wbGUyMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIGxvY2F0aW9uPSIuXHNhbXBsZTkzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmIwOWFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiIGxvY2F0aW9uPSJzYW1wbGUyNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTcyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgbG9jYXRpb249Ii5cc2FtcGxlNDA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDg5MmZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiIGxvY2F0aW9uPSJzYW1wbGU5NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTQwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgbG9jYXRpb249Ii5cc2FtcGxlNTM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2MxNDU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249InNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIGxvY2F0aW9uPSIuXHNhbXBsZTc2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI1MmNmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2IiBsb2NhdGlvbj0ic2FtcGxlNzY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIGxvY2F0aW9uPSIuXHNhbXBsZTE0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgxMjc3MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgbG9jYXRpb249InNhbXBsZTEwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuL3NhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTMxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk5ZTU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiBsb2NhdGlvbj0ic2FtcGxlMzg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIGxvY2F0aW9uPSIuXHNhbXBsZTExOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyOWMyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiBsb2NhdGlvbj0ic2FtcGxlNDAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiBsb2NhdGlvbj0iLi9zYW1wbGU2NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIGxvY2F0aW9uPSIuXHNhbXBsZTc3MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkyZjlkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiBsb2NhdGlvbj0ic2FtcGxlMjU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiBsb2NhdGlvbj0iLi9zYW1wbGU4NjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTczNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM1YWE1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiBsb2NhdGlvbj0ic2FtcGxlNDg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgbG9jYXRpb249Ii5cc2FtcGxlNzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOWYzYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgbG9jYXRpb249InNhbXBsZTY5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgbG9jYXRpb249Ii4vc2FtcGxlOTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiBsb2NhdGlvbj0iLlxzYW1wbGU3NDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTk5YjljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIGxvY2F0aW9uPSJzYW1wbGUzMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgbG9jYXRpb249Ii5cc2FtcGxlMzAzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NDJkMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiBsb2NhdGlvbj0ic2FtcGxlMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgbG9jYXRpb249Ii4vc2FtcGxlMjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTk0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFjZTI5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiBsb2NhdGlvbj0ic2FtcGxlNTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIGxvY2F0aW9uPSIuXHNhbXBsZTIxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2NjkyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiBsb2NhdGlvbj0ic2FtcGxlNjk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0IiBsb2NhdGlvbj0iLi9zYW1wbGUxODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIGxvY2F0aW9uPSIuXHNhbXBsZTM1My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZkOTc3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiBsb2NhdGlvbj0ic2FtcGxlOTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiBsb2NhdGlvbj0iLi9zYW1wbGU1NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0iLlxzYW1wbGU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWE0M2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIGxvY2F0aW9uPSJzYW1wbGUzMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiIGxvY2F0aW9uPSIuL3NhbXBsZTI1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgbG9jYXRpb249Ii5cc2FtcGxlMjMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzQ4NzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiIGxvY2F0aW9uPSJzYW1wbGU4MjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTQwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgbG9jYXRpb249Ii5cc2FtcGxlMjA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTdlMjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIGxvY2F0aW9uPSJzYW1wbGU5NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIGxvY2F0aW9uPSIuL3NhbXBsZTk2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgbG9jYXRpb249Ii5cc2FtcGxlODc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDQ5Yzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIGxvY2F0aW9uPSJzYW1wbGU2Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyIgbG9jYXRpb249Ii5cc2FtcGxlMjgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTZhMGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIGxvY2F0aW9uPSJzYW1wbGU1Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIGxvY2F0aW9uPSIuL3NhbXBsZTUzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgbG9jYXRpb249Ii5cc2FtcGxlNDMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmQ2ODY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIGxvY2F0aW9uPSJzYW1wbGUyMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiIGxvY2F0aW9uPSIuL3NhbXBsZTU1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgbG9jYXRpb249Ii5cc2FtcGxlODM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3YmNiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiBsb2NhdGlvbj0ic2FtcGxlNjMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii5cc2FtcGxlODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMwYWYxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSJzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgbG9jYXRpb249Ii4vc2FtcGxlMzUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNmRmM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCIgbG9jYXRpb249InNhbXBsZTIxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgbG9jYXRpb249Ii4vc2FtcGxlMTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiBsb2NhdGlvbj0iLlxzYW1wbGUyMTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZTk5OTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgbG9jYXRpb249InNhbXBsZTQ4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgbG9jYXRpb249Ii4vc2FtcGxlMzIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiBsb2NhdGlvbj0iLlxzYW1wbGU5NTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNThmMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgbG9jYXRpb249InNhbXBsZTg4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgbG9jYXRpb249Ii4vc2FtcGxlMzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiBsb2NhdGlvbj0iLlxzYW1wbGU4MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZWRjMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgbG9jYXRpb249InNhbXBsZTkzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgbG9jYXRpb249Ii4vc2FtcGxlMjY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3IiBsb2NhdGlvbj0iLlxzYW1wbGU2MTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjdlZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgbG9jYXRpb249InNhbXBsZTk2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgbG9jYXRpb249Ii4vc2FtcGxlOTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiBsb2NhdGlvbj0iLlxzYW1wbGU0MjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMjUzMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgbG9jYXRpb249InNhbXBsZTMxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgbG9jYXRpb249Ii4vc2FtcGxlNDc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIGxvY2F0aW9uPSIuXHNhbXBsZTgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmZiNGM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIGxvY2F0aW9uPSJzYW1wbGUyMzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIGxvY2F0aW9uPSIuL3NhbXBsZTE5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgbG9jYXRpb249Ii5cc2FtcGxlMTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGUzNGU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIGxvY2F0aW9uPSJzYW1wbGUyMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgbG9jYXRpb249Ii4vc2FtcGxlMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIGxvY2F0aW9uPSIuXHNhbXBsZTY4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhODI5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2IiBsb2NhdGlvbj0ic2FtcGxlOTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIiBsb2NhdGlvbj0iLi9zYW1wbGU1NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIGxvY2F0aW9uPSIuXHNhbXBsZTI0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZDY5ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgbG9jYXRpb249InNhbXBsZTE1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgbG9jYXRpb249Ii4vc2FtcGxlNDUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU5NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFiMjc4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIGxvY2F0aW9uPSJzYW1wbGU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgbG9jYXRpb249Ii4vc2FtcGxlNzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OTM0ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgbG9jYXRpb249InNhbXBsZTExOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCIgbG9jYXRpb249Ii4vc2FtcGxlMTA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMjEwYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgbG9jYXRpb249InNhbXBsZTI0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCIgbG9jYXRpb249Ii4vc2FtcGxlNTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNGMyYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgbG9jYXRpb249InNhbXBsZTY2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgbG9jYXRpb249Ii4vc2FtcGxlNTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiBsb2NhdGlvbj0iLlxzYW1wbGU5NzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMzU4NTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiIgbG9jYXRpb249InNhbXBsZTQ0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgbG9jYXRpb249Ii4vc2FtcGxlODI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuXHNhbXBsZTcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWE2ZWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIGxvY2F0aW9uPSJzYW1wbGUxMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiIGxvY2F0aW9uPSIuL3NhbXBsZTExMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgbG9jYXRpb249Ii5cc2FtcGxlMjQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTUxMmNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIGxvY2F0aW9uPSJzYW1wbGU3NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIGxvY2F0aW9uPSIuL3NhbXBsZTYxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgbG9jYXRpb249Ii5cc2FtcGxlNTA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmUzMzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIGxvY2F0aW9uPSJzYW1wbGUxNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIGxvY2F0aW9uPSIuL3NhbXBsZTY4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCIgbG9jYXRpb249Ii5cc2FtcGxlNDUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzdlM2M4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIGxvY2F0aW9uPSJzYW1wbGU1MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIGxvY2F0aW9uPSIuL3NhbXBsZTIxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCIgbG9jYXRpb249Ii5cc2FtcGxlMTk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWIxYzk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249InNhbXBsZTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiBsb2NhdGlvbj0iLi9zYW1wbGU0Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTgwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNTYzM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgbG9jYXRpb249InNhbXBsZTQzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgbG9jYXRpb249Ii4vc2FtcGxlOTkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiBsb2NhdGlvbj0iLlxzYW1wbGU1NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZlZmQyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiBsb2NhdGlvbj0ic2FtcGxlNjIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiBsb2NhdGlvbj0iLi9zYW1wbGU3Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIGxvY2F0aW9uPSIuXHNhbXBsZTQzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM5ZGNkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIiBsb2NhdGlvbj0ic2FtcGxlNjEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiBsb2NhdGlvbj0iLi9zYW1wbGU1NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTI1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZmM2Y2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiBsb2NhdGlvbj0ic2FtcGxlMjE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiBsb2NhdGlvbj0iLi9zYW1wbGUyMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgbG9jYXRpb249Ii5cc2FtcGxlOTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NDZjYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0ic2FtcGxlOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciIGxvY2F0aW9uPSIuL3NhbXBsZTY0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCIgbG9jYXRpb249Ii5cc2FtcGxlODcwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzY5ZDBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiIGxvY2F0aW9uPSJzYW1wbGU3NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiIGxvY2F0aW9uPSIuL3NhbXBsZTc2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiIgbG9jYXRpb249Ii5cc2FtcGxlNjg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzdmMGVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIGxvY2F0aW9uPSJzYW1wbGUyMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIGxvY2F0aW9uPSIuL3NhbXBsZTIwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgbG9jYXRpb249Ii5cc2FtcGxlMzY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTRkYTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiIGxvY2F0aW9uPSJzYW1wbGUyMDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgbG9jYXRpb249Ii4vc2FtcGxlNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIGxvY2F0aW9uPSIuXHNhbXBsZTgxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3YTRhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiBsb2NhdGlvbj0ic2FtcGxlNTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiBsb2NhdGlvbj0iLi9zYW1wbGU4MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIGxvY2F0aW9uPSIuXHNhbXBsZTk4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZlZWJhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiBsb2NhdGlvbj0ic2FtcGxlOTM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSIuL3NhbXBsZTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiBsb2NhdGlvbj0iLlxzYW1wbGU3NzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMjcwNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgbG9jYXRpb249InNhbXBsZTkyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgbG9jYXRpb249Ii5cc2FtcGxlMzI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5N2FiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiBsb2NhdGlvbj0ic2FtcGxlNTE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249Ii5cc2FtcGxlNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU0NGZiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiBsb2NhdGlvbj0ic2FtcGxlMzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiBsb2NhdGlvbj0iLi9zYW1wbGUzMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIGxvY2F0aW9uPSIuXHNhbXBsZTIwMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA1MDE2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiBsb2NhdGlvbj0ic2FtcGxlNjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiBsb2NhdGlvbj0iLi9zYW1wbGU5ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciIGxvY2F0aW9uPSIuXHNhbXBsZTUzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ5ZjlhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiBsb2NhdGlvbj0ic2FtcGxlNjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiBsb2NhdGlvbj0iLlxzYW1wbGU4MTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5Y2M4MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSJzYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiBsb2NhdGlvbj0iLi9zYW1wbGU2MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIGxvY2F0aW9uPSIuXHNhbXBsZTc4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0NTgyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiBsb2NhdGlvbj0ic2FtcGxlODc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIiBsb2NhdGlvbj0iLi9zYW1wbGU2NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIGxvY2F0aW9uPSIuXHNhbXBsZTE4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4YmJkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiBsb2NhdGlvbj0ic2FtcGxlNTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiBsb2NhdGlvbj0iLi9zYW1wbGU3NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIGxvY2F0aW9uPSIuXHNhbXBsZTIwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU5Mjk3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiBsb2NhdGlvbj0ic2FtcGxlNDQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiBsb2NhdGlvbj0iLi9zYW1wbGU1MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIGxvY2F0aW9uPSIuXHNhbXBsZTg5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY1ODMzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiBsb2NhdGlvbj0ic2FtcGxlNzQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiBsb2NhdGlvbj0iLi9zYW1wbGU3MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIGxvY2F0aW9uPSIuXHNhbXBsZTU0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkNmQ2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIiBsb2NhdGlvbj0ic2FtcGxlNTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiBsb2NhdGlvbj0iLi9zYW1wbGU4MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIGxvY2F0aW9uPSIuXHNhbXBsZTE3Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmOGM0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIGxvY2F0aW9uPSJzYW1wbGUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgbG9jYXRpb249Ii4vc2FtcGxlODUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiBsb2NhdGlvbj0iLlxzYW1wbGU2NjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTM1ZmRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiIGxvY2F0aW9uPSJzYW1wbGU3ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgbG9jYXRpb249Ii5cc2FtcGxlMTEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyODMzYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgbG9jYXRpb249InNhbXBsZTI5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiIgbG9jYXRpb249Ii4vc2FtcGxlNzE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiBsb2NhdGlvbj0iLlxzYW1wbGUyOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MDhiNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgbG9jYXRpb249InNhbXBsZTg0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgbG9jYXRpb249Ii4vc2FtcGxlNTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiBsb2NhdGlvbj0iLlxzYW1wbGU0MTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZGM0ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgbG9jYXRpb249InNhbXBsZTg5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgbG9jYXRpb249Ii4vc2FtcGxlOTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiBsb2NhdGlvbj0iLlxzYW1wbGU1MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNTNhZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSJzYW1wbGU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiBsb2NhdGlvbj0iLi9zYW1wbGU5NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI4NWFlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiBsb2NhdGlvbj0ic2FtcGxlMTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIiBsb2NhdGlvbj0iLi9zYW1wbGU5MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSIuXHNhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFmZmYxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiBsb2NhdGlvbj0ic2FtcGxlOTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiBsb2NhdGlvbj0iLi9zYW1wbGUzMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI5NjhjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiBsb2NhdGlvbj0ic2FtcGxlOTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiBsb2NhdGlvbj0iLi9zYW1wbGU1MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIGxvY2F0aW9uPSIuXHNhbXBsZTIxNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU0Mjg5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiBsb2NhdGlvbj0ic2FtcGxlMjQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2IiBsb2NhdGlvbj0iLi9zYW1wbGU3OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIGxvY2F0aW9uPSIuXHNhbXBsZTI1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxMjY1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2IiBsb2NhdGlvbj0ic2FtcGxlMzE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIGxvY2F0aW9uPSIuL3NhbXBsZTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZGFjZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgbG9jYXRpb249InNhbXBsZTYxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgbG9jYXRpb249Ii4vc2FtcGxlNDY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiBsb2NhdGlvbj0iLlxzYW1wbGU3Njkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzIzYWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIGxvY2F0aW9uPSJzYW1wbGUzOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIGxvY2F0aW9uPSIuL3NhbXBsZTU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLlxzYW1wbGUyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjE2Yzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIGxvY2F0aW9uPSJzYW1wbGU2NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIGxvY2F0aW9uPSIuL3NhbXBsZTgwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgbG9jYXRpb249Ii5cc2FtcGxlMTE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzMzNTlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgbG9jYXRpb249InNhbXBsZTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIGxvY2F0aW9uPSIuXHNhbXBsZTUwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBiNDQzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiBsb2NhdGlvbj0ic2FtcGxlMzA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiBsb2NhdGlvbj0iLi9zYW1wbGUxNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIGxvY2F0aW9uPSIuXHNhbXBsZTExNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhNDMxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiBsb2NhdGlvbj0ic2FtcGxlNDkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiBsb2NhdGlvbj0iLi9zYW1wbGU0MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249Ii5cc2FtcGxlNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOWFhZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgbG9jYXRpb249InNhbXBsZTY5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgbG9jYXRpb249Ii4vc2FtcGxlMjgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiBsb2NhdGlvbj0iLlxzYW1wbGUxMzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MjA2MDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgbG9jYXRpb249InNhbXBsZTE0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgbG9jYXRpb249Ii4vc2FtcGxlOTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSIuXHNhbXBsZTY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmE1NGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIGxvY2F0aW9uPSJzYW1wbGUyMDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgbG9jYXRpb249Ii5cc2FtcGxlNzU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWQwODhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIGxvY2F0aW9uPSJzYW1wbGUxNDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciIGxvY2F0aW9uPSIuL3NhbXBsZTE3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgbG9jYXRpb249Ii5cc2FtcGxlNzczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDQ1NjEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIGxvY2F0aW9uPSJzYW1wbGU4NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTIxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSIgbG9jYXRpb249Ii5cc2FtcGxlMzAxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTc4ZWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSJzYW1wbGU4MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTE2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgbG9jYXRpb249Ii5cc2FtcGxlNzI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMDlmZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzZWVhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YjM5ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTlmZjBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1Y2EzNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3NjMyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGE2OGZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkODhjMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFkYTY1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2IzMTMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MDI5OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzNDg0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDNlNDBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODNhZWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg0NGUyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzVkZGI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMTVmZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc3MWM1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDYwODNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0M2U4Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ0Yjk5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGU5Zjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1M2FiMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyNmUyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNkZmIwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMDVlMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1NDQwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWRjOTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYzllMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk5OWRlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDAwMmQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMWFiYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1ZWNiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjFlMGQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NjU0YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NzcxNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjc3MTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNjA4OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEzMTYyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjg1OGQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOGMwMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhYTVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGUyMmZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMGMzOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkzNThkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjY1ZGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzU3YTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y4NTQyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjAwZWNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5N2EwZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ2MGQ1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTBiYWMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMjg4YmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2OGNhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDk5NzA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2Nzk1NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiM2RkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUzODBlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YjkzOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc0N2UwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGFhZmRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTVkNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5YWY4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGVhODc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YjY1MTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4YWJlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDU1ZmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkY2IzOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNmIxMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTFiNGU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZDk1ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQwNTRlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzJmMzE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiOWEzNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA2ODVlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzM5ZjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNzA4ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDViYzk4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmM1NDY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWE2OTI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4NGY2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGM2ZDU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNjA4NGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI4NmQ0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTBlYzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZTRjZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdiMjE5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGNmODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwODI3NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFlY2QyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwMWE5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwODQyMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIzNDc4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDQ3MWFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZTdhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkwYmU0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmRjMzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NGMwNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA3ZTY1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU1ZGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYjVlYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZDE4NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmM4NzgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNGNlMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUzOTRmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmZiZmY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZjJjZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ0ZjU3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjllYTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOWJkOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRiMWZlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWY4NzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQwNGYzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMWIxMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWMyYzY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZmY5Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc4MWIyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjNlN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYjczMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU4ZjYyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTgxNjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOTZhZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE4N2M5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmYwNTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjliNzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU3MDAxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2FiNTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNjMzNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUwODkyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGFkMjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZTFiYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxMjAzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzMzZWY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MTdmYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJlZTUyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI2NGQ2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWQ2MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMyY2JiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGY3MjE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmOWM5ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVlYmQ4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTJlOWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNmJkNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdiZDUyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjBiNDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMzc3NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYWRiZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDA5ZmNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNTUxYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMwOTdiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmY5OTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNzBkOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFiZGI0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDU5YzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MGY2ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNiMmEyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTAzMjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTZiNzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc1ZjIxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODhlNzMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlY2EzYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3NjlmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2UwYTJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMWM1NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZmNWRjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjlhOGZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YTJkMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlhZDc1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1NjMwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYjYwNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU4MDMwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWE1ODE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZGNlODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ5ZTNiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTIyN2I0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZGVlZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE3YTUxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTJhYjVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NTgxNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNDNhZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTIyOGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMmMxMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM0NTVjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmE2Y2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMmNlNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThiNWVlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODQxZmE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMjAxZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IzYmUxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjJhNzEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTUzMDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0YjUxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTdlYjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MjdkZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5MTRiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWZjYWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MTJhYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVlZjhhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTBmOTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjgwNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI3ZmY3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1MjgxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMTZjZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ3NDA4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjFhZGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNDhmNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZhODNlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWEzNjVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZWRlZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjOThlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjFhMDcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzODVkOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNDQ2NjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDQ5ZTQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNzI4ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE4MzU2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjMxNDQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NTY4ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTllNWViNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2EzZDIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4M2E4YjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkYjFiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWQ5MTk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5MWNjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NmUzNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2FmYmMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4OTcyMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZkN2JjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2JkMDYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZWIwNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyYjBhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWY0MmFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NmIyZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZjZjE2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGY4ZTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTgzMjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThmMTUwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGIyNTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZDdlMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNiY2ViNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDA2MjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2I5NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEzODZkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2UzNWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMDlkYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc3OTA4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxZjEzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyM2IyNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJhNWVlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTgxY2QzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZjQ1OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUwMmM4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2IwZDVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjdlZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY5MGI1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmU0ZmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMGM3MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZWQzMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjBlNmFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2Njk5YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU4MDY1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzhmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmOTYzMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE3ZjM4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzBlOTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMmUwY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM3M2U0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDJjNGI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTM2NjhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4ODcwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjQxZGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MWZmYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiMzViNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGM5MjkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4M2JmNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBhZGFhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGFjNDg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MzQ3YjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3MzQzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc1NTc4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZWUxYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQwZDRlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmUyMzgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ODlhNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNiMTI0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjkyNjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NWNiYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU1Y2MzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDA2Y2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZDRlNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlY2QxZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWJiNTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZjBkZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUzOGNhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWZmYzExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiODkzM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFjZTdkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODUzNGFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZDA2MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJiMDY5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGM2ZWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGU0MWVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmYWE1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmFiMmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzM4NTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI0ODdmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjcyODVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNGVhMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRmMjcyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWQ3MTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzN2YxOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzljNzBmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlYzBlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NTFjZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRiNWRlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGM1NmNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NTAzOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNjM2I4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDVlMTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NWQ5NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY0MWU0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmNkNTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNjA5ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTA1ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTE4YzU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZDFhN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJmNDBkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM5ZjIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YWMwYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE4NGExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjcwZmFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YzQyMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxODBmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGRmMWY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU4YzBhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDg5ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzYyZjE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNmZmMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE4NGU2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGY1MWZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmN2RjMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZiYzVhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTQ5YWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MGFjNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyZjdkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDhlYWQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTE3MzVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk4NTA4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzY2ZWYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZDcyMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkOTg1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGUwNzA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMDU3YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZkNThmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWZiMjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZjMwNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYxNDcwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3MDQwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MWVkMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUwMGZlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDcxMTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNjFlYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY0NTlmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODM0ZmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNTY4MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAzNDcwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDU2MzZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMjBlMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOWI0MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzUyZGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NDdlOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhjN2M3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWQ2N2UzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViY2Y2NDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3ZjljZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTNiODRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZDZjYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ5Mjk5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzk5ZmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTcwNTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkYzk1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTdhNmI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiM2RmODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliYzg3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTE1YmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OWI3MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU1NWQ3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWIyMWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYzgyNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhODEyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzNDk1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MDU3ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAyN2RmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjYxMDYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNDhmN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiYWMyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTZmZWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlODNjZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwNDdmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTYwNDUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiODVhYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNDA3YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDE5Nzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMmM1NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlhYzg5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzM4OWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNDA2ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM1ZWRmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjc1OWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MjhmOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQyZmU3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjI1ZDUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGMxMGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VkMDZkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDYzZTMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YTMyZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0ZDIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGRmNjA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZmU0MDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0NTk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmQyNDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YTg4NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI2YzRkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmExNDM3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYmJmNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRmNWIxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTlmZWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZDBhYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE4NGNjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjJlMDlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNGFjNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhNmQ1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDNmZTlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzJiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGZmNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmYzZTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOTk4ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMxM2RiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjY0Njk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNWE5MDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ5ZWFkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGE3YjY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYjI0MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI5ZjRlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZThkOWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxODU2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ODgxMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDJjYTg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NGUwZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQyYTJkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTIwMmIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NDRhZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg3ZTcxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODYwZmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1YjZlYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiM2RjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDA5M2YyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWUyYTU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjYmU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTg3ZGRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyOTMxODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzODkyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGY0MGM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzODQzNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIwMmMxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmFkZjFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyOGZjZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk1ZWMyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNlMjVlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZTUyZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczMDU0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmE5YWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YjI4YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI2NTc2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmU3YTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1OGNmZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYyYTgyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmExOWY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYWI1MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNTEyYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWE3MjgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZTY2Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5YTNiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOThlNzFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNDY2MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0NTg0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OThjODg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNTU1NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVjZDQyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjU3NGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDBmNzhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY3NGM0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmE3NGQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMzQ3MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4OGQ5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY5YzYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhODgzN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZiMDYwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzE1MzMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNjU1ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI1M2E3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRhZmM0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZjkzMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5Y2Q0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWE5ZjAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZmQ2ZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk3OGM0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWM0YmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMWMzNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczNTYwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2JjMzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YjEyNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5M2IzMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTIzMThlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOWJmMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2MWE0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWUzMWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZmQzYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUxODM0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjJkMzNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZDhmMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNmYzliNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzU3NDBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWQwNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZjYTU5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjZkYzBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZGM2YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxMTUxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzMyYjgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MGQ4MWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzczOWY4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzI1YTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MDZjN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdhMTM5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlNTFkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMWJjYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMwYmI3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmFlMTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMDg4ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJkNGMwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWQwZGY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMDM1NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ0YzAxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTNhODYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhN2JkMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1OGI1NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTA1MDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYmJkYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYwNGRjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzViNzM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYjRjNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJjNjdjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTA3Y2JmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YjUzZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhiMjA5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWM4ZDViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyMmQzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NjYwMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTBmMjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMTIxNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlhMWJiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmRhMWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMmE4OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU2NzNhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTI0ZjUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZDJkZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThmOTRiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzRhYTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFhNGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ4YjY5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTYwYTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZmNhMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEzYTJiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGFhY2M1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMzg0MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE3MDE0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDk3ZWY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYTVkZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJmNjQ0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5MGE1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOGYwYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwY2Y1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTI3ZDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NWJlMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y5OTMxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDg0OTBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MTRmMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJhNDJjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODk1NDYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1OTQ3ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNzcyZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjZjNmVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTY0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJkMjZiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTdmNTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwN2Y2ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAxYmIyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzE2YTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYWZiYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliNWQ5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzE1YTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzU0ZTlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YwZTk5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWM0ZDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYjU4MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNiZDYzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yjk2OTU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYjRlNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4MDY2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmMyN2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NTM0NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThmN2FkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY2ODJjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjM2MzYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU4NWZiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODMyNjQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMmJhMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc2YTY1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjhmZTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZDdlMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYxZDQ3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2UwNTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyN2M5YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNDAwNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2I0MjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MDc5NWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFmZjIwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTgzNGNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNmNmMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc4ZjA0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjNlOTk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMjIwMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVlMDkwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2MxMWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGI5ZTYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4Nzc5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjFhY2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYWFhN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjljOGU2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWE3OGMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjdkZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkMjFjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTBlNmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTg2NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRhYTNhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWViMzA5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NjUyZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM0Njc2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmUwODYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMDQxOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0YmNjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDg0YzVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZGVjOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmNmJlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzQ5ODgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZTkwOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDMxM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTk4MDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMDJmZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk1NjczOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDgyNGExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MTVjOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QxMmU3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQ5NDQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZTUxZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiYmRkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTBlYzU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2MGE3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OTUwMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmExZjMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMDZlMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyOTY3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWEzMWFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZTc2YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzOWM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDczZmZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTliYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgxMmUzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzNiMmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzM3MGVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFiYjU3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWM2OWU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNGZmMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EwNmM2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Njc4ZDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MTVlOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFjZGViMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTE5YzliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYWU1OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5YjdlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3ZjM0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjkwZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmNWI3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjZiMjQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NWVmOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5NTY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDllYmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZmFhYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYwYWUyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmY4MDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMGZlMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZDZkYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTc5N2ZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMzZjOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI3MGIzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTM5ZTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OTllNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlkODgxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWRjMmJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYjQ1ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVlZDZjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTBiZDEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjAzNWQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4OWE1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTkxNWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NmMwODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhmMzRmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDc4ODE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTE3ZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMxNmY3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzg0NTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2Yjg4NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZjMGQwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NhNWY5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWJlZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0NTVhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U2MDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZmYyOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE2OGQ0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2YyMTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZWFhMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmNzJiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODM3MjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMTJkZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZjViZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmUwYzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMDQwM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M1YTkyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTAzOTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YWFjMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM0OWNiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDdkY2JhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYTFmYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAwYTAwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDlhOWY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTFmNjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThmNmVjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWJlMDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NTg1NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE4N2YyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTIyMzAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YTBmMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFkNmJmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjJhNmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ODliOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFhZGE2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5N2Q4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYjZjZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBlYTM4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODQ5MDgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYWE0NjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyNzE2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYThiMmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNGRiMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkZGI5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTcxZGVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjA1ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzODczYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTYyNmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkY2FhNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGExMDQxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2MwMGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YTZmYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzOGY5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTU0YWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZmM0YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzMDMyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzEwZmUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3MWIxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTgyZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTE3NmMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzYTRiMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhNTQ2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGQxOTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NzY0MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3ZjhlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGNkNjg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMDk1YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE0MTFlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAwMmIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWM2YmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZmMTA3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDJjMzNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MjAzN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE1OTVmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTA3NTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyODY4NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzljYmMwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWRhYzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZTQzYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjMDJiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFhZGQ2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmY2ZkNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwZmNkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjY3NDI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMTdkMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmMTQyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWFkOTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYmMwMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ0YzUxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjI1Nzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjkyNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZWM5ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGFiNzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZGM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc1MzZiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjBkODM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NGFkYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI1MTgxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODA1MmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ODIxZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzYTE3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDE1NTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2VkNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5NmI5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTJiNTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNTQyZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFjNDc5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjk1MTc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmM2IxYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY4OTVjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTA4ZTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNjEyMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYyYTM5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0OTI3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMTE5NDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3ZTkzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDM0NDA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNmY3MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZiNDA3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTU2MzZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiM2ZkMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcyMTMzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTIyM2Y2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ODUwMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMWQwN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmE1Yzg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhOTgyYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhMGJkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzJhNTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDUyNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE1YzdiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTE1NmRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ODhiNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U5OTZiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTcyYzA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTdiMzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiZjAyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTBkNTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYWRhNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiMzI2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2JkY2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZGM2MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2ZmRmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDMxOGM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MzI0OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY2MTIwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMzZGMyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMDE0YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY0ZjJiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmZiN2Y4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NTkyOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkYTU3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDNiNTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjBiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIwYzg5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDUyZjgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiM2NkNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZjIyZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mzg0NDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3Njc1OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjllMmQxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2I3MzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjhhZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAyMTUwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzQ1YmNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNmQxYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyMTMyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYThiNzljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjZGEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNzg1MTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWI5NmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MmRkMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcwNDgzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDUwOTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZTA4MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0MjU2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjNhYmNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGJmMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkMjhlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjk4ZTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzBlNDMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI5NzI1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDgxMDg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNDE0ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3YjY2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzE0NTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZTNmOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiYmYyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzUxODUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1OTc0OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkNWU5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA0MzhhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYzZjZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4Y2UzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjlkNjIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNWEyZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJmNzk2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWEyOGM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZTNmOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzMGFmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJjZGJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjN2JjNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ZWRlMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjNhZDk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MjZiNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhNTFiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQ0ZDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMzZhODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYyNDhlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGNkNzdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjOTlkODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZjYmQxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzAzZmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2NjMTZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRlMDY1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NThjYWY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMzAwYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VhNzRiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTc5NmRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTNlNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI3NWM4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjhkZDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMTFkZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEwZmFhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY5YTdkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NjU4OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhmMjVlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjA4MzBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZTllYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhMWU2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjQ4ZjAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMjVjYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBjM2EzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDVkMjY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYzQ4ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMzY0ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmZmMTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZTM1ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhjODlmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTkwZWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3Y2IyN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ2OTgzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2UyMDM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMTRkZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhNzlhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDgxYjIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmNkMzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDViZWVkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmEyYTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZjcxYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M3NDgzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDRkZjA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZTdhNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyZDBkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc3MTQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDliZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ1ZDk1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2NDZkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOTQxMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQxY2JhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2E0ODk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MWNiYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0MDFlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMThlODFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNWY2MjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA2ZDc3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjQyYzFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YjQ5YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNGJhMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmNmN2RlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNGEzNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA2Y2IxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzNlMDUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NzA0YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ExZTk4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWYzMTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MmYzNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkzMGI2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODE4NmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjJhNmMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzZmMxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNzA3ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmJiODgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzdiNzEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkY2Y4OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGFhYjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmYyZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA4MTgzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ3MjI0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDBiMmI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZGZmYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzMmExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3ZWI2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2M1ZDliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiN2JkOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZTk5Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFlNDhhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTNmNDViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZmE3ZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NDQwZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczNmNiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5NDQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiNTk4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTMwNDNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTk0OWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNzM4NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY3YTdmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEwMTY4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzJkNzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE0N2RjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTFiYWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YWRkMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkzZTE1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjNzkzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzE0Yzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMDA3ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU2NjAwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTFlOGM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOWUxOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzFkNmY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1N2NiYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzM2JhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGNmNzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwOTc4ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlhYzYyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2NmNWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODQ3NGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU2NDNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzc3MGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZTk2NmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc2NzkxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE3ZDQ4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjExNTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZjZiOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwMGFmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjM2MDhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZjU4ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkOTM2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTIxN2EwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNDM2OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg4NWVlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWJiMTMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YjZiYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjY2EzYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQzZTA3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYWZhYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA1ZDUyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxOTk1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjFjMDY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOWYzZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOTM3ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NjEzNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcwMzM2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2Q1Nzc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OThkMzliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzYwMmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ODQzY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc2YTVmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGFkZDU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMTY0ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNjViNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ3OTNiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDRjZjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMWE5NjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MjEwNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3NmQ1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzNmMGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDRkMzM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMTIwNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTExLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWY2YTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZDY3ZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE2MjJjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MThhZjM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NWY2NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhNzZjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmIyZTVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMWZhZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkxNWFlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDcxOWJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWM0MTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMGM1MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjYzNWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmM1NjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyOGY0OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0YjNiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmNkM2I1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMDRmMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFmYzI3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTBiM2I0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOGMyNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjliNDE3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3MjIyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWM1YzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2NzM3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjNkMGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMjJkZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ1NTYzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTNhZGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ODM1MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRmZmJhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1ZmY3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDZmZDE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNWY5ZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGQ2Zjc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE4YTJkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTEzMDUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NTFjMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTkyNGE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MDc0YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmNGMzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjE1YTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZDg5ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE4ZmZhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2UxNmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZDM3NGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk1NjMxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjZlNDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTJmOTA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYWQ1MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTQzYzZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZmZjODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5MTdlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjljZjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyODRiYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYmQwMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2YWQzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjNjFjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjc4YjBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Nzk4NGExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmU1ZjQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNTM1MjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ3MjU3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWU3MDM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZmI1YTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2NzJiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzA5NTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYzlhZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJmZmViOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWY5ZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWFhMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMxZDAyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVkOTJjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTU3YTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMDQ4ZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNhM2UzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjI3YjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyN2JmMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhkNjZhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWZmZjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZjgzNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkOGY5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODI5YmM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzOGIzNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYzY3NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIwNjUyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNDQ3YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY3ZTE5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2U2YjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NDI1OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRmNDcwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTkzOWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZWUyMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg2NzI4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzRiMDg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlODlmY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmE5YTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlODAyOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2NjZjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmY2Y2YmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyNjA0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDAyZDlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRiNWMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NTI1YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmOTRiNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FjN2YyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTZjNjNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMTUxNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMjNiN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFlMzY5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTMxZTc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMGNkNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmODU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWRmY2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MmUyMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdjMmY3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTRlYjkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYjJlYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAxYjMzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2QxZDE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTgwZGIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MTUxMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjM0NGYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiOWIzZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzNTY1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzRiZDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNTEyZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVjMDA1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWU5NzUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZWM4MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2MzI5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTI4MmM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjNhOTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OWMyZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2ZhYzY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NWRlNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUzOWY0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTI1YjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYTg0MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMzQ0N2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiOTU1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWE2YWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NmQ5M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMyN2I5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUyN2UzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODYxNWExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4NTllMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjBhNTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NTE5ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiZjQ1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzViNTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNmE2MWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZTAxZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlNDhhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDE4OGNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNjBjNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE3NzU1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZjBlOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTJkYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRmNGI4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YzJjOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMwNjc0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjVmMTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOWNlODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFiMTgyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjkwMDNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MTlkMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiNDQ5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2I4MjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YTkzMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNDZiMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEzMmYwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjVmZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmYTE5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDFmNTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMzZhNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0YjAwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjFlYzliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzE0YzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNzQ4NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBmY2FmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjFmNzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGYxNTU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMmVjMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE4NWQ0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTJjOTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4YzBlMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlmYzkxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyNjRmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzE2ZDVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMzllMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMxOGU4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGJmZjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NGZkMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YTgwODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRlOGJhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2Mzc2ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYyMzk1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWE5YWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZDE2YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBjZTc4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmQ3ODJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDEzYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ3MDdiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM1YjQ0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTdhYzk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjZmYThkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYTk4YzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDZkNGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyY2Q4NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYzZjZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjZTlhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDgwZDMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYjFhZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRlNTdlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjhhZjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZmFjMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYzI1N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMjk4NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VlY2JkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYWJjNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUxMjUwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODM0NTE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzN2ZmZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRiNTE1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRlZjc4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTQ2NzAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0Y2FkNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMDg2ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc5OTQ5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmMmU5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2JlYjgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRhNWUxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTM0ZWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NWQ3OGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZWE2ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlhODVjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWI5ODBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYjE0YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI2NTNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmZmQxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGI2ODMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODNjMDdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MzI4MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQyMzk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZDdmOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdkZmQ0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDg3NjhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZGZlYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRjODg3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjExYzYyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWFlYmU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMGI5MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYwNjRlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVkNGM2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTVkZGRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk2ZTExMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjdkMzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMTY0OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3ZmNlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTdiZWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxY2Q3NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlMDc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcyMDEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzc3Y2UwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNjJkMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MzY5MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI3MjliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EyYzdjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTRmMWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDVkNDJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YThlYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI4YWU3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM1ZmJiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjRjODA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMzE1MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YzZThjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzExNDE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2YzYwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4N2FiNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYzYxNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkwMTU3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWYyYTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NzQ3NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTExNTk1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y0NWJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2NhZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMzE0NWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5YmRjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDlhMDkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNTY2NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM4MmY3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhNzYyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjRlN2JkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyYjhkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDBiODY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MGQyYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MTY3ZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg5MWFjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTA0NzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OWViMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMzU4OWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2ZGRlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjFmNWY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTNlN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOGQ4YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjllYjI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNDUyZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGExNzAzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzYyMjkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2IxN2UyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOGM1OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMxMGU5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTdiMmNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZDdkZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNDI2ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlM2QzMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI5MzFjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNzY4ZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMTA0YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZTYxOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1YWY4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjhhMThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZTY5NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5MWI2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2Y2NWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3OThlMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5MTA0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEwMzNhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWJlYTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM3ZDNjY2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZjQ4ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M3Yjg2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU1ZTY4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDlkZWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZjlhYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ5M2E0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmRlYzQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2N2I4ZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE0YzllNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVkYTc1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA0N2EzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY5NDhlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjM3ZTgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNTk2ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk3NDkyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODhhZjU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOTI3MDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzNDAzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQ4ZDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNGYyZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZmZjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgwOWZlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmFkNzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OTQ4NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0NDNiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmM4NzgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMGRiZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YzFkNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NWMxNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VmMTI4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzFhMTJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNDU0NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWQ3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFhNzYxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDVmNTI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA1OTM1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDVkMDkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMWM1MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkyNGE4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTAyOWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWY4NmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNWJmMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y4NDNmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzJiMzIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwODc0MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjU1MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVhNjVmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYTU0NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EyODg2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODg4NDE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmE1OTIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MDM1ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmMWZlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2JjY2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzAzYWRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTIxOGE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MmM5OGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNWZiYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM2NTgxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNzRlZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzMTY3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2UzYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNjNhYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTcyMzc3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDI4NGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MDgzMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFjZGUwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjBlNTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMzVlODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjIyN2ExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU3N2U4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGUzZmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZjY4MDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2UxZGQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNjBjYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1OGFmZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU3ZThmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjAzMDBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZTY4NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA4Y2YzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3ZTliZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjZDQxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjkzZDM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDQ3Mzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NGJjNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNhYjRmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWVhOWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzY2NiMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNiMTc5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWE5MGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NzRiYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgyZTlkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZkZjgyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmUwZjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMzg4NjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1OWMxOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNhZDcxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZmQ1NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM4Y2ZkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGRiMjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOWMxYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFlYTdkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBkMTZjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDk1OWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmODU4NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3OTFlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzgxZTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzBjNWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTliYWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg4MmZjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODIzZjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMzY5MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxN2Q3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTRlZjViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3Zjc0NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVjOTE4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDZmNmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2E3MTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4N2E1OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NzE0OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZjNzc4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MmIwMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThmZjMzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDdiMDNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MGNlYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5Y2IwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmYxMWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZGVmNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRkNzFmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTNmMjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMjgwNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZWUyYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzOWU4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMjhkMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY0OTc0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzA3Y2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2ZjYzIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjN2FjZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzZmZkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2MzNmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMjZjYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNmOTVlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczMzE1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhjYTZmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3YmE1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhM2YyYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjllYzE0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjBmMzBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyN2FlNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNWM1MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdkMjRiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTkxOWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZmJlN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwNzQxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDJkZWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2Q3NDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODgyY2ZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MzQzYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM0Y2MxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGZmYzc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZTgwMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUzYzZhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTY5NWVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1Y2EzNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ2ZTIyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzRmZTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNGI5ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZDU3Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE4NmRhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MDE2ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlOTJiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGNlOTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NDMzNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIxZjVhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWM4YjdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYjIzZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQyMjFkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWRiNjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MWNiMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMTZlNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZDJkODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzBjYmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMmY5NDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FlNjEzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWIwYTljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNDg0NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFlZDdiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwMDA5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDM1ZmE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmFiM2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjFjZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTg1YjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIxMjBhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhlNGFiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjQwNTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjOWNhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGRiZTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZGQ5NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IyODg4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTNlNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOGVhMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODU4ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4NDdhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjY0OTJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMjU5Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMGMzOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVhYTIzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwODk3YWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAxNmY1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjg4ODQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZTQ3YWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZmFiOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQwY2ZhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDQ0OTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZWZiM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJjNmZiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmM3Njk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGEwZjcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGQxYzFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyY2UxZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmMGQ2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzIyZjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYjYxNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJjYTRkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTA3MGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MDc1NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdiYmQ0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDI1OGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzMwMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NWMzMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEzY2VhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDk0NzM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZTVhYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhODUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGViNzJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZWE2ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ5OTZjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWI3MTU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OWViZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjYjk5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2YwNmE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWI0NzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkOWFlNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjE3MGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYzFlNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc2YzNjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzgxNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmOTEyYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVjZWI4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzhmNGYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYTc0NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE2ZmY1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGNmNjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmNiYjEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYjY4ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzUwNGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYTQxYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEzNjMzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWZmZjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ODBkYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJiODMyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDk1YmE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjBiMWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MDFlNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzZDczMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRmOTM0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGUyYmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNzUwOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjZGM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGIyZmI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTIxMTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMzhiZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ3ZmQ3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGVjY2U5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3M2VjYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1ZDE4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2QwZWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2NiZDExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMDFkMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWVhY2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5Yjg5YjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBmNTFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzNhYTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjA2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5Y2E4MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyNTZkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzkwOWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZThkNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU3MzA4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIwYmNlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjFlYjc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc0OTQ5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzU5NDY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYTk5NjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIxODBkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTU2MDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZDE0OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4MDBjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDUwOTZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMWJmODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYzJmYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZTlkMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1YzUzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMjg2YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEwMzBlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWU3Y2RhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYjc2ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgxZTc5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjkyZTY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYzY2NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg0N2IyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjExYzQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYzdhMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JhN2IwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1Yzc2OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZlY2NiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTMwNzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg3NjhlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmRjMmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZjQ5NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4YmU0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FlZmEyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNmZWM4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWEzMjE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzN2ExNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4ZGVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTgxNmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjM3MjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYTlhNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZDNjMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxMGNiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM4MzJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZWEyMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmY2Y0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGRhYWY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTc3M2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOTU1YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkyZTE4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGYwNjFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yzk1OTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMDVjMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTI0NTE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZDBkMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIyOGJmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmEwYzE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYWMwYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiYjhiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjkyOWYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzM2RkMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhZWIzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTNjY2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODMxOTEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGZiY2Q5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI0NDI4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDA5MTZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmN2M5ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNhNzExYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2ZmMTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMzRmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNWRkMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhODk1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OThkNWI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NWQ3NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYjIxZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk4N2QwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODZjNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZlMTg1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjBlODVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiN2E2YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJiMWY0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmI2MjM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZjI2MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFlNDZmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhZTQzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzA4N2MzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjMxMjk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjOTkxMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTE5MTkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNGU2ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUyNTEwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjgwNmYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NmNmYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzExNjUzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjljMWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNTY1ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFmOTUxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODVkNTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWM3OTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZjJlNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGY1MjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTA5M2FjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYjA3YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YjcwZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFmZGE4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTZmY2VjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZWQ3Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI1Mzg5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjQzMzQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMDFiZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MTFlMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdjZjY4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4Yzk5YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY2YzAwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjI1MTA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYzY3NTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM1MmRlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzM3Yzk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNmEzZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVkZDgxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2U2OTA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiM2U4ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZDI3NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYzNGU3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmIzMzgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZjY5OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUzNjhmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjA1M2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMDI5MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdmMjRhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTI5MzA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NTY2NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFkZGVkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTViMTg5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM2NGFkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDA5YjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxNTk3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBlOGFmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTFiYWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YTFhMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY1OWQ5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWFmZTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNTJlOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I2MTBmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjVmZjEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NzU3OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWEwNzUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjMGVjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDZkMmRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NzdlNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTc2NzFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNWJiN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg4NGU3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODA2OTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYzIxN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3OWU1ODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwZjYzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTAyZTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNTk0ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YjE1N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMTBlZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDczZTcyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODg3MWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMjFlNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhlNDJhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWViNGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYzY1ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVlZDdmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDFmYTg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1N2E3MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU0NTVkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWE2N2YyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTg2MmM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGJjY2ZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyMGMzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTQ2ZDZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZGQxODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI1ZDE1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTNhMWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZThkOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUyODgxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmE2MTlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZGNkYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhiMGQ3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMyMmRlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3ZTA1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NmU1OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ4YTE3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTVhMjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYzYzYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZhZTcxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTVkMGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYWIwZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViODkzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzUyMDc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNmM0ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMjMyMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I0MWQ5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZWUxN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzN2EzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjY0N2RlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZDJhNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk4ZTMzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODkyZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjhlMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0OTZmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWQzNzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZGNhZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMGRkYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlYzVkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMjIwNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3YjZmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDhiNGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNDYyMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1ZWU4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmQ5YTM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5M2RkOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVlOGZiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGYxMDc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwN2E0MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZjQ4MDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5OGRiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGU0NmU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NmVjOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZjU3ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlmNDlhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2JjY2IwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZmExMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5OWM0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGI2MzY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjAyNzA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzY2U3Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzJlYWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYTUyMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA2N2ZiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjFmZWRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNzQ0YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYwODMyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjY4MDc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZGY3YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y3YTdhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzRlMmQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2Y2I0MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2Njg1OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODhmODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI4Mjc2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNGY2NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI1Y2NlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjE4YTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MzY2MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU4MjMzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGNjNzg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NTVkYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg4OWU0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjU5Y2JmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZWJjYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NzJjMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YTIwNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMmM4NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA1YzU2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTlhMjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMzUyZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFiMjZmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTg0NGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOTkwNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJjYTY3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODk4NWExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkY2Q3ZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU0ZTI0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZjU1NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVkNjE0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDg0OGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZjBiMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg3NzU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzIyYzJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YzYzNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYmM1MWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNmOGM3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2U1NDg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTEzOWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MDM5MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmViM2NkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA2MWNkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTM3YTIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMyNzgxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzNhODYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjN2FmN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMTRlMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM3MTcyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTQyNzNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YzlhYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkxZDIyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODYxYWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YWVhZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkODhkODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdkNmI1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMzJhMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRmOWQ0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjE4MWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYzNjZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYzMmU1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMzYjIxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDZmZTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NWFlOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1Y2RmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDg1NTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzI1MDQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNzZlNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4NjlhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjQ3NDM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNmEyYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2Y2NkMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjYjZjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjc2MzA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ODgyZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxY2JjNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUxNTU4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmUyODQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjE1MDk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MDY0OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5YjVlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjBmMjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMTY3MTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJmNzE0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGNhMjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMWIyZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzZmY1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDZlYzgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZmFiYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU0NjU1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NGU0ZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI5MmUwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODEwOTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOGUxOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmMWFiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWUzM2RiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTAyN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk0YWE5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTYxYjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwYmZhMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FiMmIwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDUwYzhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2Q1NmQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMTQ5MzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDlmYTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5Mzg3ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MwNTQ1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjVkMmFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZTZmY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhMjAwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RjNjhiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGJmM2I2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYjU2ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI1YTE4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE1YzNjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI0YmMzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmJkYjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZWJmNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBiMTI0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWNlNjQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0M2YyNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhYjkxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODIyZDA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYjNhYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyOTJhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzExMzc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjAzMGMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzOGQ4MjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTNhYTAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMTU1MmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU4NDFmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Njg2ZjE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNDQ1MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3N2JiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODc0ZDI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNDk3Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYTJkNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FkODk4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRlYmFkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTc5ZDFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMwYjdkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTViZDBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMzg3ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhhZjJmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGFlMzYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmOGZjNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxMmFiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTQ3MzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Zjc5OWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNzAzYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwS0Iud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwS0Iud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUwNDdiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMEtCLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTA3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJEZWZpbml0aW9uIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UwIiBuYW1lPSJJbnB1dDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMCIgbmFtZT0iT3V0cHV0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMCIgdHlwZT0idG5zOlBvcnRUeXBlMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMSIgbmFtZT0iSW5wdXQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEiIG5hbWU9Ik91dHB1dDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEiIHR5cGU9InRuczpQb3J0VHlwZTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIiIG5hbWU9IklucHV0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyIiBuYW1lPSJPdXRwdXQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzIiBuYW1lPSJJbnB1dDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMyIgbmFtZT0iT3V0cHV0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMyIgdHlwZT0idG5zOlBvcnRUeXBlMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNCIgbmFtZT0iSW5wdXQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQiIG5hbWU9Ik91dHB1dDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQiIHR5cGU9InRuczpQb3J0VHlwZTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUiIG5hbWU9IklucHV0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1IiBuYW1lPSJPdXRwdXQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2IiBuYW1lPSJJbnB1dDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNiIgbmFtZT0iT3V0cHV0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNiIgdHlwZT0idG5zOlBvcnRUeXBlNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNyIgbmFtZT0iSW5wdXQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTciIG5hbWU9Ik91dHB1dDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzciIHR5cGU9InRuczpQb3J0VHlwZTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NyIgYmluZGluZz0idG5zOkJpbmRpbmc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgiIG5hbWU9IklucHV0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4IiBuYW1lPSJPdXRwdXQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5IiBuYW1lPSJJbnB1dDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOSIgbmFtZT0iT3V0cHV0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOSIgdHlwZT0idG5zOlBvcnRUeXBlOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAiIG5hbWU9IklucHV0MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAiIG5hbWU9Ik91dHB1dDEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMCIgdHlwZT0idG5zOlBvcnRUeXBlMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEiIG5hbWU9IklucHV0MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEiIG5hbWU9Ik91dHB1dDExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMSIgdHlwZT0idG5zOlBvcnRUeXBlMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIiIG5hbWU9IklucHV0MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIiIG5hbWU9Ik91dHB1dDEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMiIgdHlwZT0idG5zOlBvcnRUeXBlMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMiIG5hbWU9IklucHV0MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMiIG5hbWU9Ik91dHB1dDEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMyIgdHlwZT0idG5zOlBvcnRUeXBlMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQiIG5hbWU9IklucHV0MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQiIG5hbWU9Ik91dHB1dDE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNCIgdHlwZT0idG5zOlBvcnRUeXBlMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUiIG5hbWU9IklucHV0MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUiIG5hbWU9Ik91dHB1dDE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNSIgdHlwZT0idG5zOlBvcnRUeXBlMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYiIG5hbWU9IklucHV0MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYiIG5hbWU9Ik91dHB1dDE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNiIgdHlwZT0idG5zOlBvcnRUeXBlMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTciIG5hbWU9IklucHV0MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTciIG5hbWU9Ik91dHB1dDE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNyIgdHlwZT0idG5zOlBvcnRUeXBlMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgiIG5hbWU9IklucHV0MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgiIG5hbWU9Ik91dHB1dDE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOCIgdHlwZT0idG5zOlBvcnRUeXBlMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkiIG5hbWU9IklucHV0MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkiIG5hbWU9Ik91dHB1dDE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOSIgdHlwZT0idG5zOlBvcnRUeXBlMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAiIG5hbWU9IklucHV0MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAiIG5hbWU9Ik91dHB1dDIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMCIgdHlwZT0idG5zOlBvcnRUeXBlMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEiIG5hbWU9IklucHV0MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEiIG5hbWU9Ik91dHB1dDIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMSIgdHlwZT0idG5zOlBvcnRUeXBlMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIiIG5hbWU9IklucHV0MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIiIG5hbWU9Ik91dHB1dDIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMiIgdHlwZT0idG5zOlBvcnRUeXBlMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMiIG5hbWU9IklucHV0MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMiIG5hbWU9Ik91dHB1dDIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMyIgdHlwZT0idG5zOlBvcnRUeXBlMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQiIG5hbWU9IklucHV0MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQiIG5hbWU9Ik91dHB1dDI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNCIgdHlwZT0idG5zOlBvcnRUeXBlMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUiIG5hbWU9IklucHV0MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUiIG5hbWU9Ik91dHB1dDI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNSIgdHlwZT0idG5zOlBvcnRUeXBlMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYiIG5hbWU9IklucHV0MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYiIG5hbWU9Ik91dHB1dDI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNiIgdHlwZT0idG5zOlBvcnRUeXBlMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjciIG5hbWU9IklucHV0MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjciIG5hbWU9Ik91dHB1dDI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNyIgdHlwZT0idG5zOlBvcnRUeXBlMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgiIG5hbWU9IklucHV0MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgiIG5hbWU9Ik91dHB1dDI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOCIgdHlwZT0idG5zOlBvcnRUeXBlMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkiIG5hbWU9IklucHV0MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkiIG5hbWU9Ik91dHB1dDI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOSIgdHlwZT0idG5zOlBvcnRUeXBlMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAiIG5hbWU9IklucHV0MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAiIG5hbWU9Ik91dHB1dDMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMCIgdHlwZT0idG5zOlBvcnRUeXBlMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEiIG5hbWU9IklucHV0MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEiIG5hbWU9Ik91dHB1dDMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMSIgdHlwZT0idG5zOlBvcnRUeXBlMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIiIG5hbWU9IklucHV0MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIiIG5hbWU9Ik91dHB1dDMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMiIgdHlwZT0idG5zOlBvcnRUeXBlMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMiIG5hbWU9IklucHV0MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMiIG5hbWU9Ik91dHB1dDMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMyIgdHlwZT0idG5zOlBvcnRUeXBlMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQiIG5hbWU9IklucHV0MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQiIG5hbWU9Ik91dHB1dDM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNCIgdHlwZT0idG5zOlBvcnRUeXBlMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUiIG5hbWU9IklucHV0MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUiIG5hbWU9Ik91dHB1dDM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNSIgdHlwZT0idG5zOlBvcnRUeXBlMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYiIG5hbWU9IklucHV0MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYiIG5hbWU9Ik91dHB1dDM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNiIgdHlwZT0idG5zOlBvcnRUeXBlMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzciIG5hbWU9IklucHV0MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzciIG5hbWU9Ik91dHB1dDM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNyIgdHlwZT0idG5zOlBvcnRUeXBlMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgiIG5hbWU9IklucHV0MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgiIG5hbWU9Ik91dHB1dDM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOCIgdHlwZT0idG5zOlBvcnRUeXBlMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkiIG5hbWU9IklucHV0MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkiIG5hbWU9Ik91dHB1dDM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOSIgdHlwZT0idG5zOlBvcnRUeXBlMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAiIG5hbWU9IklucHV0NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAiIG5hbWU9Ik91dHB1dDQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MCIgdHlwZT0idG5zOlBvcnRUeXBlNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEiIG5hbWU9IklucHV0NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEiIG5hbWU9Ik91dHB1dDQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MSIgdHlwZT0idG5zOlBvcnRUeXBlNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIiIG5hbWU9IklucHV0NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIiIG5hbWU9Ik91dHB1dDQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MiIgdHlwZT0idG5zOlBvcnRUeXBlNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMiIG5hbWU9IklucHV0NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMiIG5hbWU9Ik91dHB1dDQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MyIgdHlwZT0idG5zOlBvcnRUeXBlNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQiIG5hbWU9IklucHV0NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQiIG5hbWU9Ik91dHB1dDQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NCIgdHlwZT0idG5zOlBvcnRUeXBlNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUiIG5hbWU9IklucHV0NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUiIG5hbWU9Ik91dHB1dDQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NSIgdHlwZT0idG5zOlBvcnRUeXBlNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYiIG5hbWU9IklucHV0NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYiIG5hbWU9Ik91dHB1dDQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NiIgdHlwZT0idG5zOlBvcnRUeXBlNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDciIG5hbWU9IklucHV0NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDciIG5hbWU9Ik91dHB1dDQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NyIgdHlwZT0idG5zOlBvcnRUeXBlNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgiIG5hbWU9IklucHV0NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgiIG5hbWU9Ik91dHB1dDQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OCIgdHlwZT0idG5zOlBvcnRUeXBlNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkiIG5hbWU9IklucHV0NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkiIG5hbWU9Ik91dHB1dDQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OSIgdHlwZT0idG5zOlBvcnRUeXBlNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAiIG5hbWU9IklucHV0NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAiIG5hbWU9Ik91dHB1dDUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MCIgdHlwZT0idG5zOlBvcnRUeXBlNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTEiIG5hbWU9IklucHV0NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTEiIG5hbWU9Ik91dHB1dDUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MSIgdHlwZT0idG5zOlBvcnRUeXBlNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIiIG5hbWU9IklucHV0NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIiIG5hbWU9Ik91dHB1dDUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MiIgdHlwZT0idG5zOlBvcnRUeXBlNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMiIG5hbWU9IklucHV0NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMiIG5hbWU9Ik91dHB1dDUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MyIgdHlwZT0idG5zOlBvcnRUeXBlNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQiIG5hbWU9IklucHV0NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQiIG5hbWU9Ik91dHB1dDU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NCIgdHlwZT0idG5zOlBvcnRUeXBlNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUiIG5hbWU9IklucHV0NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUiIG5hbWU9Ik91dHB1dDU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NSIgdHlwZT0idG5zOlBvcnRUeXBlNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYiIG5hbWU9IklucHV0NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYiIG5hbWU9Ik91dHB1dDU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NiIgdHlwZT0idG5zOlBvcnRUeXBlNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTciIG5hbWU9IklucHV0NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTciIG5hbWU9Ik91dHB1dDU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NyIgdHlwZT0idG5zOlBvcnRUeXBlNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgiIG5hbWU9IklucHV0NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgiIG5hbWU9Ik91dHB1dDU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OCIgdHlwZT0idG5zOlBvcnRUeXBlNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkiIG5hbWU9IklucHV0NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkiIG5hbWU9Ik91dHB1dDU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OSIgdHlwZT0idG5zOlBvcnRUeXBlNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAiIG5hbWU9IklucHV0NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAiIG5hbWU9Ik91dHB1dDYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MCIgdHlwZT0idG5zOlBvcnRUeXBlNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjEiIG5hbWU9IklucHV0NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEiIG5hbWU9Ik91dHB1dDYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MSIgdHlwZT0idG5zOlBvcnRUeXBlNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIiIG5hbWU9IklucHV0NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIiIG5hbWU9Ik91dHB1dDYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MiIgdHlwZT0idG5zOlBvcnRUeXBlNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMiIG5hbWU9IklucHV0NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMiIG5hbWU9Ik91dHB1dDYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MyIgdHlwZT0idG5zOlBvcnRUeXBlNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQiIG5hbWU9IklucHV0NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQiIG5hbWU9Ik91dHB1dDY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NCIgdHlwZT0idG5zOlBvcnRUeXBlNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUiIG5hbWU9IklucHV0NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUiIG5hbWU9Ik91dHB1dDY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NSIgdHlwZT0idG5zOlBvcnRUeXBlNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYiIG5hbWU9IklucHV0NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYiIG5hbWU9Ik91dHB1dDY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NiIgdHlwZT0idG5zOlBvcnRUeXBlNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjciIG5hbWU9IklucHV0NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjciIG5hbWU9Ik91dHB1dDY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NyIgdHlwZT0idG5zOlBvcnRUeXBlNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgiIG5hbWU9IklucHV0NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgiIG5hbWU9Ik91dHB1dDY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OCIgdHlwZT0idG5zOlBvcnRUeXBlNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkiIG5hbWU9IklucHV0NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkiIG5hbWU9Ik91dHB1dDY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OSIgdHlwZT0idG5zOlBvcnRUeXBlNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAiIG5hbWU9IklucHV0NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAiIG5hbWU9Ik91dHB1dDcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MCIgdHlwZT0idG5zOlBvcnRUeXBlNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEiIG5hbWU9IklucHV0NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzEiIG5hbWU9Ik91dHB1dDcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MSIgdHlwZT0idG5zOlBvcnRUeXBlNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIiIG5hbWU9IklucHV0NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIiIG5hbWU9Ik91dHB1dDcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MiIgdHlwZT0idG5zOlBvcnRUeXBlNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMiIG5hbWU9IklucHV0NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMiIG5hbWU9Ik91dHB1dDczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MyIgdHlwZT0idG5zOlBvcnRUeXBlNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQiIG5hbWU9IklucHV0NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQiIG5hbWU9Ik91dHB1dDc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NCIgdHlwZT0idG5zOlBvcnRUeXBlNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUiIG5hbWU9IklucHV0NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUiIG5hbWU9Ik91dHB1dDc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NSIgdHlwZT0idG5zOlBvcnRUeXBlNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYiIG5hbWU9IklucHV0NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYiIG5hbWU9Ik91dHB1dDc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NiIgdHlwZT0idG5zOlBvcnRUeXBlNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzciIG5hbWU9IklucHV0NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzciIG5hbWU9Ik91dHB1dDc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NyIgdHlwZT0idG5zOlBvcnRUeXBlNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgiIG5hbWU9IklucHV0NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgiIG5hbWU9Ik91dHB1dDc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OCIgdHlwZT0idG5zOlBvcnRUeXBlNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkiIG5hbWU9IklucHV0NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkiIG5hbWU9Ik91dHB1dDc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OSIgdHlwZT0idG5zOlBvcnRUeXBlNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAiIG5hbWU9IklucHV0ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAiIG5hbWU9Ik91dHB1dDgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MCIgdHlwZT0idG5zOlBvcnRUeXBlODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODEiIG5hbWU9IklucHV0ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODEiIG5hbWU9Ik91dHB1dDgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MSIgdHlwZT0idG5zOlBvcnRUeXBlODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIiIG5hbWU9IklucHV0ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIiIG5hbWU9Ik91dHB1dDgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MiIgdHlwZT0idG5zOlBvcnRUeXBlODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMiIG5hbWU9IklucHV0ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMiIG5hbWU9Ik91dHB1dDgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MyIgdHlwZT0idG5zOlBvcnRUeXBlODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQiIG5hbWU9IklucHV0ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQiIG5hbWU9Ik91dHB1dDg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NCIgdHlwZT0idG5zOlBvcnRUeXBlODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUiIG5hbWU9IklucHV0ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUiIG5hbWU9Ik91dHB1dDg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NSIgdHlwZT0idG5zOlBvcnRUeXBlODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYiIG5hbWU9IklucHV0ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYiIG5hbWU9Ik91dHB1dDg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NiIgdHlwZT0idG5zOlBvcnRUeXBlODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODciIG5hbWU9IklucHV0ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODciIG5hbWU9Ik91dHB1dDg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NyIgdHlwZT0idG5zOlBvcnRUeXBlODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODciIGJpbmRpbmc9InRuczpCaW5kaW5nODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgiIG5hbWU9IklucHV0ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgiIG5hbWU9Ik91dHB1dDg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OCIgdHlwZT0idG5zOlBvcnRUeXBlODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkiIG5hbWU9IklucHV0ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkiIG5hbWU9Ik91dHB1dDg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OSIgdHlwZT0idG5zOlBvcnRUeXBlODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAiIG5hbWU9IklucHV0OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAiIG5hbWU9Ik91dHB1dDkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MCIgdHlwZT0idG5zOlBvcnRUeXBlOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTEiIG5hbWU9IklucHV0OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEiIG5hbWU9Ik91dHB1dDkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MSIgdHlwZT0idG5zOlBvcnRUeXBlOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIiIG5hbWU9IklucHV0OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIiIG5hbWU9Ik91dHB1dDkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MiIgdHlwZT0idG5zOlBvcnRUeXBlOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMiIG5hbWU9IklucHV0OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMiIG5hbWU9Ik91dHB1dDkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MyIgdHlwZT0idG5zOlBvcnRUeXBlOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQiIG5hbWU9IklucHV0OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQiIG5hbWU9Ik91dHB1dDk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NCIgdHlwZT0idG5zOlBvcnRUeXBlOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUiIG5hbWU9IklucHV0OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUiIG5hbWU9Ik91dHB1dDk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NSIgdHlwZT0idG5zOlBvcnRUeXBlOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYiIG5hbWU9IklucHV0OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYiIG5hbWU9Ik91dHB1dDk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NiIgdHlwZT0idG5zOlBvcnRUeXBlOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTciIG5hbWU9IklucHV0OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTciIG5hbWU9Ik91dHB1dDk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NyIgdHlwZT0idG5zOlBvcnRUeXBlOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTciIGJpbmRpbmc9InRuczpCaW5kaW5nOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgiIG5hbWU9IklucHV0OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgiIG5hbWU9Ik91dHB1dDk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OCIgdHlwZT0idG5zOlBvcnRUeXBlOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkiIG5hbWU9IklucHV0OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkiIG5hbWU9Ik91dHB1dDk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OSIgdHlwZT0idG5zOlBvcnRUeXBlOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwOGEyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgbG9jYXRpb249InNhbXBsZTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIGxvY2F0aW9uPSIuL3NhbXBsZTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSIuXHNhbXBsZTEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEyYTJiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgbG9jYXRpb249InNhbXBsZTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii5cc2FtcGxlOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThjNDJkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgbG9jYXRpb249InNhbXBsZTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIGxvY2F0aW9uPSIuXHNhbXBsZTM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4ZGRlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249InNhbXBsZTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIGxvY2F0aW9uPSIuL3NhbXBsZTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgbG9jYXRpb249Ii5cc2FtcGxlNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxODkwNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIGxvY2F0aW9uPSJzYW1wbGUyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiBsb2NhdGlvbj0iLi9zYW1wbGU2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0iLlxzYW1wbGUzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NmRlMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249InNhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgbG9jYXRpb249Ii5cc2FtcGxlMzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODU3MjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiBsb2NhdGlvbj0ic2FtcGxlOTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249Ii4vc2FtcGxlNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii5cc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWNlZmI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiBsb2NhdGlvbj0ic2FtcGxlOTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgbG9jYXRpb249Ii4vc2FtcGxlNTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgbG9jYXRpb249Ii5cc2FtcGxlMjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YThhZmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIGxvY2F0aW9uPSJzYW1wbGU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIGxvY2F0aW9uPSIuL3NhbXBsZTk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249Ii5cc2FtcGxlNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMjM0ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIGxvY2F0aW9uPSJzYW1wbGU1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiBsb2NhdGlvbj0iLi9zYW1wbGUyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYWJmMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSJzYW1wbGUzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiBsb2NhdGlvbj0iLi9zYW1wbGUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYjM4MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIGxvY2F0aW9uPSJzYW1wbGU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiBsb2NhdGlvbj0iLi9zYW1wbGU1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjY4NTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0ic2FtcGxlNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgbG9jYXRpb249Ii4vc2FtcGxlMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgbG9jYXRpb249Ii5cc2FtcGxlNTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OGViYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIGxvY2F0aW9uPSJzYW1wbGU2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiBsb2NhdGlvbj0iLi9zYW1wbGU3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0iLlxzYW1wbGU5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YjAzMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIGxvY2F0aW9uPSJzYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiBsb2NhdGlvbj0iLi9zYW1wbGU4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuXHNhbXBsZTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmIwODExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiBsb2NhdGlvbj0ic2FtcGxlNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLlxzYW1wbGU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc0MTAwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgbG9jYXRpb249InNhbXBsZTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIGxvY2F0aW9uPSIuXHNhbXBsZTYwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEwYzE3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgbG9jYXRpb249InNhbXBsZTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIGxvY2F0aW9uPSIuL3NhbXBsZTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSIuXHNhbXBsZTg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIxYmFjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249InNhbXBsZTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIGxvY2F0aW9uPSIuL3NhbXBsZTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZlOTU3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249InNhbXBsZTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIGxvY2F0aW9uPSIuL3NhbXBsZTUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSIuXHNhbXBsZTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlN2I1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249InNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyMzg5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249InNhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIGxvY2F0aW9uPSIuL3NhbXBsZTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIGxvY2F0aW9uPSIuXHNhbXBsZTM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U0ZWJlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249InNhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSIuL3NhbXBsZTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii5cc2FtcGxlMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWY3MzgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiBsb2NhdGlvbj0ic2FtcGxlNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0iLi9zYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjhlYWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0ic2FtcGxlMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249Ii4vc2FtcGxlNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0iLlxzYW1wbGUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U3Yjg0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgbG9jYXRpb249InNhbXBsZTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIGxvY2F0aW9uPSIuL3NhbXBsZTkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249Ii5cc2FtcGxlMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZjM4YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249InNhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgbG9jYXRpb249Ii4vc2FtcGxlOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgbG9jYXRpb249Ii5cc2FtcGxlNzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzdkMWM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiBsb2NhdGlvbj0ic2FtcGxlMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgbG9jYXRpb249Ii4vc2FtcGxlMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgbG9jYXRpb249Ii5cc2FtcGxlNjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTg5N2Y1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiBsb2NhdGlvbj0ic2FtcGxlNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgbG9jYXRpb249Ii4vc2FtcGxlOTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249Ii5cc2FtcGxlNjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTIxZmM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiBsb2NhdGlvbj0ic2FtcGxlNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgbG9jYXRpb249Ii4vc2FtcGxlMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgbG9jYXRpb249Ii5cc2FtcGxlMzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTg2N2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0ic2FtcGxlODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLi9zYW1wbGU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIGxvY2F0aW9uPSIuXHNhbXBsZTc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZkZWE1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249InNhbXBsZTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249Ii5cc2FtcGxlNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YTc2OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249InNhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249Ii4vc2FtcGxlNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgbG9jYXRpb249Ii5cc2FtcGxlNzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGU3YTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiBsb2NhdGlvbj0ic2FtcGxlNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiBsb2NhdGlvbj0iLi9zYW1wbGU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIGxvY2F0aW9uPSIuXHNhbXBsZTU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMzQ5ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSJzYW1wbGUxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0iLi9zYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0iLlxzYW1wbGUyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIzMWViMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgbG9jYXRpb249InNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSIuXHNhbXBsZTE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA2MjhiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0ic2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuL3NhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii5cc2FtcGxlODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjMzYjM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiBsb2NhdGlvbj0ic2FtcGxlODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii4vc2FtcGxlODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249Ii5cc2FtcGxlNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjZjMzIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiBsb2NhdGlvbj0ic2FtcGxlMzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgbG9jYXRpb249Ii4vc2FtcGxlOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgbG9jYXRpb249Ii5cc2FtcGxlNzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODczMmY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiBsb2NhdGlvbj0ic2FtcGxlNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249Ii4vc2FtcGxlODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii5cc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWVjYTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0ic2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgbG9jYXRpb249Ii4vc2FtcGxlMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgbG9jYXRpb249Ii5cc2FtcGxlODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODY3OTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0ic2FtcGxlMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgbG9jYXRpb249Ii4vc2FtcGxlNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgbG9jYXRpb249Ii5cc2FtcGxlOTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTY0ZGEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiBsb2NhdGlvbj0ic2FtcGxlNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgbG9jYXRpb249Ii4vc2FtcGxlMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249Ii5cc2FtcGxlMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTY3M2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiBsb2NhdGlvbj0ic2FtcGxlNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgbG9jYXRpb249Ii4vc2FtcGxlMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgbG9jYXRpb249Ii5cc2FtcGxlNTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTBjNzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0ic2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLi9zYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIGxvY2F0aW9uPSIuXHNhbXBsZTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YTYwYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSJzYW1wbGU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0iLi9zYW1wbGU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiBsb2NhdGlvbj0iLlxzYW1wbGUzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI1MTYyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249InNhbXBsZTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIGxvY2F0aW9uPSIuL3NhbXBsZTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIGxvY2F0aW9uPSIuXHNhbXBsZTg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhZmM4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249InNhbXBsZTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIGxvY2F0aW9uPSIuL3NhbXBsZTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIGxvY2F0aW9uPSIuXHNhbXBsZTgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU5Mjc4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgbG9jYXRpb249InNhbXBsZTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIGxvY2F0aW9uPSIuXHNhbXBsZTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhOTNhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249InNhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIGxvY2F0aW9uPSIuXHNhbXBsZTU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZjZGI5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgbG9jYXRpb249InNhbXBsZTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSIuL3NhbXBsZTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIGxvY2F0aW9uPSIuXHNhbXBsZTUzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgzOTI0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgbG9jYXRpb249InNhbXBsZTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIGxvY2F0aW9uPSIuL3NhbXBsZTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii5cc2FtcGxlMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZTljMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIGxvY2F0aW9uPSJzYW1wbGUyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiBsb2NhdGlvbj0iLi9zYW1wbGU3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSIuXHNhbXBsZTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2ZiZDczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiBsb2NhdGlvbj0ic2FtcGxlOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgbG9jYXRpb249Ii4vc2FtcGxlNTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii5cc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzE3YTQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiBsb2NhdGlvbj0ic2FtcGxlOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0iLi9zYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIGxvY2F0aW9uPSIuXHNhbXBsZTczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RkNGE3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249InNhbXBsZTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii4vc2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTdjMmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiBsb2NhdGlvbj0ic2FtcGxlNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249Ii5cc2FtcGxlMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZjkyMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIGxvY2F0aW9uPSJzYW1wbGU5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiBsb2NhdGlvbj0iLlxzYW1wbGU0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOGE4NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIGxvY2F0aW9uPSJzYW1wbGUxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuXHNhbXBsZTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmRmNGFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiBsb2NhdGlvbj0ic2FtcGxlMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgbG9jYXRpb249Ii4vc2FtcGxlMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgbG9jYXRpb249Ii5cc2FtcGxlMjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDFmMjc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiBsb2NhdGlvbj0ic2FtcGxlNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLi9zYW1wbGU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIGxvY2F0aW9uPSIuXHNhbXBsZTE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJhMjI3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgbG9jYXRpb249InNhbXBsZTMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIGxvY2F0aW9uPSIuL3NhbXBsZTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhMDk3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0ic2FtcGxlNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0iLi9zYW1wbGUzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiBsb2NhdGlvbj0iLlxzYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNjEzMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSJzYW1wbGUyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiBsb2NhdGlvbj0iLi9zYW1wbGUzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0iLlxzYW1wbGUxMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOTgwNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgbG9jYXRpb249InNhbXBsZTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249Ii4vc2FtcGxlNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii5cc2FtcGxlODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDg2MjEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSJzYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSIuL3NhbXBsZTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii5cc2FtcGxlMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwODdkZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIGxvY2F0aW9uPSJzYW1wbGUzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiBsb2NhdGlvbj0iLlxzYW1wbGU3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2FjZTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0ic2FtcGxlMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249Ii4vc2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgbG9jYXRpb249Ii5cc2FtcGxlMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZjljNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSJzYW1wbGUxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNGI2ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIGxvY2F0aW9uPSJzYW1wbGUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiBsb2NhdGlvbj0iLi9zYW1wbGU1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0iLlxzYW1wbGU0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMTMwMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIGxvY2F0aW9uPSJzYW1wbGU5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuL3NhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgbG9jYXRpb249Ii5cc2FtcGxlNTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzhmNjYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiBsb2NhdGlvbj0ic2FtcGxlMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgbG9jYXRpb249Ii4vc2FtcGxlNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgbG9jYXRpb249Ii5cc2FtcGxlOTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGI5OTk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiBsb2NhdGlvbj0ic2FtcGxlNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgbG9jYXRpb249Ii4vc2FtcGxlNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgbG9jYXRpb249Ii5cc2FtcGxlMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjhjMjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiBsb2NhdGlvbj0ic2FtcGxlMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLi9zYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSIuXHNhbXBsZTEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRiNjNmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgbG9jYXRpb249InNhbXBsZTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIGxvY2F0aW9uPSIuL3NhbXBsZTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSIuXHNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmYWUzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0ic2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0iLlxzYW1wbGU0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MGM0MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSJzYW1wbGU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiBsb2NhdGlvbj0iLi9zYW1wbGU4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiBsb2NhdGlvbj0iLlxzYW1wbGU1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYjZlYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249InNhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgbG9jYXRpb249Ii4vc2FtcGxlNTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii5cc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyNTY0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgbG9jYXRpb249InNhbXBsZTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIGxvY2F0aW9uPSIuL3NhbXBsZTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIGxvY2F0aW9uPSIuXHNhbXBsZTg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzY3ODAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSJzYW1wbGU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIGxvY2F0aW9uPSIuL3NhbXBsZTk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSIuXHNhbXBsZTY4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM5OThkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgbG9jYXRpb249InNhbXBsZTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii4vc2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0iLlxzYW1wbGU2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmOGFkNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIGxvY2F0aW9uPSJzYW1wbGU5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIGxvY2F0aW9uPSIuL3NhbXBsZTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgbG9jYXRpb249Ii5cc2FtcGxlOTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzljZjI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiBsb2NhdGlvbj0ic2FtcGxlNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249Ii4vc2FtcGxlODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249Ii5cc2FtcGxlNjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAyMzkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiBsb2NhdGlvbj0ic2FtcGxlNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgbG9jYXRpb249Ii4vc2FtcGxlMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgbG9jYXRpb249Ii5cc2FtcGxlMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTJhOGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0ic2FtcGxlMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii4vc2FtcGxlODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgbG9jYXRpb249Ii5cc2FtcGxlNjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjM5Yzc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0ic2FtcGxlMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249Ii4vc2FtcGxlODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgbG9jYXRpb249Ii5cc2FtcGxlODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODRiM2QyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0ic2FtcGxlMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii4vc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249Ii5cc2FtcGxlMTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjdkMmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0ic2FtcGxlMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLi9zYW1wbGU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDliMWM3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249InNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSIuL3NhbXBsZTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIGxvY2F0aW9uPSIuXHNhbXBsZTQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYzYyZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIGxvY2F0aW9uPSJzYW1wbGUyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjN2NkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249InNhbXBsZTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSIuXHNhbXBsZTg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2YTYyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgbG9jYXRpb249InNhbXBsZTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSIuL3NhbXBsZTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQxZjAxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249InNhbXBsZTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIGxvY2F0aW9uPSIuL3NhbXBsZTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIGxvY2F0aW9uPSIuXHNhbXBsZTIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxYjI5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgbG9jYXRpb249InNhbXBsZTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIGxvY2F0aW9uPSIuXHNhbXBsZTk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyZmUxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249InNhbXBsZTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSIuL3NhbXBsZTYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIGxvY2F0aW9uPSIuXHNhbXBsZTYwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdjNTA3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgbG9jYXRpb249InNhbXBsZTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIGxvY2F0aW9uPSIuL3NhbXBsZTM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhODNkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgbG9jYXRpb249InNhbXBsZTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuL3NhbXBsZTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIGxvY2F0aW9uPSIuXHNhbXBsZTMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ1NmFhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgbG9jYXRpb249InNhbXBsZTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIGxvY2F0aW9uPSIuXHNhbXBsZTcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVjYmU0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgbG9jYXRpb249InNhbXBsZTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIGxvY2F0aW9uPSIuL3NhbXBsZTY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIGxvY2F0aW9uPSIuXHNhbXBsZTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ViNDM4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249InNhbXBsZTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIGxvY2F0aW9uPSIuL3NhbXBsZTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii5cc2FtcGxlMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDA5ZmU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmM2VlYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWIzOWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4M2FlZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNkZmIwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjc3MTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NTdhMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUzODBlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjZiMTFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YTY5MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwMWE5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGQxODUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDA0ZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMxYjEyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjliNzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNjRkNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJhZGJmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTZiNzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNTYzMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM0M2FmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTUzMDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NTI4MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0NDY2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5MWNjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NmUzNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk4MzI1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzFmMTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZWQzMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzNjY4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzU1Nzg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlY2QxZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RlNDFlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWVjMGViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTA1ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOGMwYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTA4OWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MTczNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3MDQwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzliNDJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNzA1MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzNDk1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQwN2I2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYzEwZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmExNDM3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOThmZjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDE4NTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY4ODEyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWUyYTU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZTI1ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE1MTJhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDBmNzhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYWZjNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkzYjMyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWQwNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZTUxZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU4YjU1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyMmQzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NjYwMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxYTRkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTkwYTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNzcyZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M1NGU5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjY4MmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNDAwNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhiOWU2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWIzMDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDMxM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNjBhNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTk1MDJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMzcwZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3ZjM0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGQ2ZGE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MDM1ZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NhNWY5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGY1YmU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMWY2MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5N2Q4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzg3M2JmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDcxYjFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhODJlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWM2YmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYWRkNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllYzk4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2VkNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNDkyN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWExZDA3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTdiMzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzM2RjMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVmMjJmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjZGEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNzg1MTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MwZTQzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDQzOGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ZWRlMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjYzE2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjlhN2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMzY0ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJjZDM5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTY0NmRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNGJhMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkNDFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMTJkYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWIzMjdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFkMTQ0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTg4ZmYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmQ4ZDI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGI5Yjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMTM2MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZjQ1ZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2YzEyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzUwYjE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMTBjYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRlNjg3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWMwNWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYmIwYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjVjYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZTZiY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU1ZWFjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcwZjRhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTAwMjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2Yjg4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGVhMGI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MzAzZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNiNTc2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY4YWFlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNzIyODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhODE2NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EyNmExOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjFhNGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NjFhYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1MjFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWVkYmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MTBkNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI1NjE4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE1MTY3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTE1ZDIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU3M2NjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzgwYmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmFmN2E2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGMwNjQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTQzYjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYzlmMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE1MDg0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkNWRjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mjg2MWZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNGI1NGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzc4MmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk5YTVlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzA2YTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNmNhNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ1ZDIxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU5OWExNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzM5YjM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYTdkYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwMDY3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWZmNDlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NGIyYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNjMDMzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTdjZDNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMmEyODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4MjIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODhjMmFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZGE4MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzZjNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzMxMDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZTIxZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwYWQxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWJmODExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4YjUzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZGU4ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYzYxNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMyZmQyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0MzA5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTkzNGJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWMwZTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NzE4MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ3NTI2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTYwNjk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Y2ZkNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZlMWQ1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTdiMDA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NzAyZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MmMzZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ0MDFlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzRiZjRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMTU3ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzOTQ4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQwNGQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MGUwNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI0NDFhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQxYWMzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZjg4ZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MGE5YjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyMTcyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwYTIxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2ZjMjIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjEwMzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5YTk0M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZTQxNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFiMzQwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjOWU1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWUzM2U5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmM2ZWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkY2RiOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E5MWViZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDE3OTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwODBiODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmZTgzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2RjMzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMWVhYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZTU5ZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjViY2YyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJkZTQzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NmI5Y2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRmNGE3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmFkY2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGI0ZDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGJkYTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMjAyZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNjOGIyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODBjMTI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMWQzODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWViMTA4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjE3N2ZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2FmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQzNTA3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWViZDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ODc3ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY1ZTg0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWM4NGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0Mjc3NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcyNDM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFlNmIxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjc4NjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhYjJiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMWIyNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA3YWRiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzk4MDU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NDg3NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkMzE4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjg5OWZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODQ3MDNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZDI4ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwODlhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDhjMDUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMWMwNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkzM2Y5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzAxZDkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhY2I0ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZjgwNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ3NWZiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWI4YWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTExLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiOGIzYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRiZTUyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmFkYWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YTczZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YTA4ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTVjN2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTk4MGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZmM5M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JjYWFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmJkNGJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNTM4OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUzNTRlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTUxZTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMTYxNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY4NTAzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGNjNjJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZWU5OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZmMGYyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTYxYzg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOWRiODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNDc2N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1OWE2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWQ0ZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwODQ3ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZmMWRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTFmNWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUxY2VhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTk0MDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYxNGM2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5ZTE2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzE0NzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZGFlY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiN2M3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGUyZTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNDM1ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwYzNjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYxYjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2UwNjE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYmI0ZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YzkxN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhhZDQwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmZkZTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjUyMzhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOTkzOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I3MDY4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTE4NWFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YTVkNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZDE1MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwS0Iud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBLQi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTBkYmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBLQi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJEZWZpbml0aW9uIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UwIiBuYW1lPSJJbnB1dDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMCIgbmFtZT0iT3V0cHV0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMCIgdHlwZT0idG5zOlBvcnRUeXBlMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMSIgbmFtZT0iSW5wdXQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEiIG5hbWU9Ik91dHB1dDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEiIHR5cGU9InRuczpQb3J0VHlwZTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIiIG5hbWU9IklucHV0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyIiBuYW1lPSJPdXRwdXQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzIiBuYW1lPSJJbnB1dDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMyIgbmFtZT0iT3V0cHV0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMyIgdHlwZT0idG5zOlBvcnRUeXBlMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNCIgbmFtZT0iSW5wdXQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQiIG5hbWU9Ik91dHB1dDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQiIHR5cGU9InRuczpQb3J0VHlwZTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUiIG5hbWU9IklucHV0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1IiBuYW1lPSJPdXRwdXQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2IiBuYW1lPSJJbnB1dDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNiIgbmFtZT0iT3V0cHV0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNiIgdHlwZT0idG5zOlBvcnRUeXBlNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNyIgbmFtZT0iSW5wdXQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTciIG5hbWU9Ik91dHB1dDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzciIHR5cGU9InRuczpQb3J0VHlwZTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NyIgYmluZGluZz0idG5zOkJpbmRpbmc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgiIG5hbWU9IklucHV0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4IiBuYW1lPSJPdXRwdXQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5IiBuYW1lPSJJbnB1dDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOSIgbmFtZT0iT3V0cHV0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOSIgdHlwZT0idG5zOlBvcnRUeXBlOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMzY5OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0ic2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSIuL3NhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLlxzYW1wbGU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YzMyOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiBsb2NhdGlvbj0ic2FtcGxlOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuL3NhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLlxzYW1wbGU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YzkyNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0ic2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIGxvY2F0aW9uPSIuL3NhbXBsZTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLlxzYW1wbGU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMjFlOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0ic2FtcGxlNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIGxvY2F0aW9uPSIuL3NhbXBsZTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0iLlxzYW1wbGU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZGMxYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0ic2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIGxvY2F0aW9uPSIuL3NhbXBsZTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLlxzYW1wbGU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYWUzMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0ic2FtcGxlNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuL3NhbXBsZTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLlxzYW1wbGU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1Y2JlMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiBsb2NhdGlvbj0ic2FtcGxlNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuL3NhbXBsZTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLlxzYW1wbGUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MzFmZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0ic2FtcGxlNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiBsb2NhdGlvbj0iLlxzYW1wbGU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZTJlODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0ic2FtcGxlNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSIuL3NhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiBsb2NhdGlvbj0iLlxzYW1wbGU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YThmNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0ic2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuL3NhbXBsZTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiBsb2NhdGlvbj0iLlxzYW1wbGUzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMDlmZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzZWVhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDA0ZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OTFjYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU4YzBhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDE4NTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MjJkMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2MGE3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDcxYjFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmY2RhMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTZhYzkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2MGNkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0YWZjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YWUxYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGFlZTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDAyNjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDI2MTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTczLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3NWFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc1OWZhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE0YzViNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I3MjgxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM0N2E1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMDFjMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MDRlM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGJiNTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY4ZWZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUyODFiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA5NzI0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkY2JmMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NmNmNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGVlODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTU5MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2RlZDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyMmI2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEyZDVhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMWFkZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MmYyY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTZkMjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjZDRmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEyM2MzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJlMjk0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U3MDE3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZiYTdmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxYzQxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU3YWM5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhZjMzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY0MGYzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlhNzFiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5NmM0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZGFkZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTYyZmI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5NGE3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTFmM2UwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTU0YjAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTQzZTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmNlNWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzc4MWNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzE1MDNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTA2NzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWQ1Njk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWYzYzIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYzNTZjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkYmY4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcwNDRhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ViOTk5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFjYjFlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0YzQyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI4YjFiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkMjc5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdiYzJkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZmY2OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNzg4YWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1Nzc0ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2Q4ZmRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGQxMzYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2JlYWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjJlNzE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRiOTU3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiYjExYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVkM2E5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIyOTU0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMWM4MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYTdmYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZTIwNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NWFkYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzI5MmQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzZkYTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZlZWQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA0NzBlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxNDhjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDljNGY0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ1OGVhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEyMTU2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQ0NTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2I3ZDc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTRkYzc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1MDliNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMDg3ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1M2MzYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNzExZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzMwODk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRkYzUxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNjZjVjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM3YTFiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFhOGY5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThhYzg1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk1MDZiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA2ZTBkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUzMDQ1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZDc1MzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZjliNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YjkzMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTM1OGJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJlZjg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWQ4YzMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzM3M2U1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE3N2E1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA3OTI0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzVkYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmRhZDM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzFLQi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xS0Iud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJhN2M4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzFLQi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkRlZmluaXRpb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UiIG5hbWU9IklucHV0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZSIgbmFtZT0iT3V0cHV0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmciIHR5cGU9InRuczpQb3J0VHlwZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQiIGJpbmRpbmc9InRuczpCaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMU1CLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzFNQi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzZiYzRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMU1CLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTAwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iRGVmaW5pdGlvbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMCIgbmFtZT0iSW5wdXQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTAiIG5hbWU9Ik91dHB1dDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzAiIHR5cGU9InRuczpQb3J0VHlwZTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MCIgYmluZGluZz0idG5zOkJpbmRpbmcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEiIG5hbWU9IklucHV0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxIiBuYW1lPSJPdXRwdXQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyIiBuYW1lPSJJbnB1dDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMiIgbmFtZT0iT3V0cHV0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMiIgdHlwZT0idG5zOlBvcnRUeXBlMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMyIgbmFtZT0iSW5wdXQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMiIG5hbWU9Ik91dHB1dDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMiIHR5cGU9InRuczpQb3J0VHlwZTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MyIgYmluZGluZz0idG5zOkJpbmRpbmczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQiIG5hbWU9IklucHV0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0IiBuYW1lPSJPdXRwdXQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1IiBuYW1lPSJJbnB1dDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNSIgbmFtZT0iT3V0cHV0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNSIgdHlwZT0idG5zOlBvcnRUeXBlNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNiIgbmFtZT0iSW5wdXQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYiIG5hbWU9Ik91dHB1dDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYiIHR5cGU9InRuczpQb3J0VHlwZTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NiIgYmluZGluZz0idG5zOkJpbmRpbmc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTciIG5hbWU9IklucHV0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3IiBuYW1lPSJPdXRwdXQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDciIGJpbmRpbmc9InRuczpCaW5kaW5nNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4IiBuYW1lPSJJbnB1dDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOCIgbmFtZT0iT3V0cHV0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOCIgdHlwZT0idG5zOlBvcnRUeXBlOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOSIgbmFtZT0iSW5wdXQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkiIG5hbWU9Ik91dHB1dDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkiIHR5cGU9InRuczpQb3J0VHlwZTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OSIgYmluZGluZz0idG5zOkJpbmRpbmc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwIiBuYW1lPSJJbnB1dDEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwIiBuYW1lPSJPdXRwdXQxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAiIHR5cGU9InRuczpQb3J0VHlwZTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExIiBuYW1lPSJJbnB1dDExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExIiBuYW1lPSJPdXRwdXQxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEiIHR5cGU9InRuczpQb3J0VHlwZTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyIiBuYW1lPSJJbnB1dDEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyIiBuYW1lPSJPdXRwdXQxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIiIHR5cGU9InRuczpQb3J0VHlwZTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzIiBuYW1lPSJJbnB1dDEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzIiBuYW1lPSJPdXRwdXQxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMiIHR5cGU9InRuczpQb3J0VHlwZTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0IiBuYW1lPSJJbnB1dDE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0IiBuYW1lPSJPdXRwdXQxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQiIHR5cGU9InRuczpQb3J0VHlwZTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1IiBuYW1lPSJJbnB1dDE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1IiBuYW1lPSJPdXRwdXQxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUiIHR5cGU9InRuczpQb3J0VHlwZTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2IiBuYW1lPSJJbnB1dDE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2IiBuYW1lPSJPdXRwdXQxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYiIHR5cGU9InRuczpQb3J0VHlwZTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3IiBuYW1lPSJJbnB1dDE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3IiBuYW1lPSJPdXRwdXQxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTciIHR5cGU9InRuczpQb3J0VHlwZTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4IiBuYW1lPSJJbnB1dDE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4IiBuYW1lPSJPdXRwdXQxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgiIHR5cGU9InRuczpQb3J0VHlwZTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5IiBuYW1lPSJJbnB1dDE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5IiBuYW1lPSJPdXRwdXQxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkiIHR5cGU9InRuczpQb3J0VHlwZTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwIiBuYW1lPSJJbnB1dDIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwIiBuYW1lPSJPdXRwdXQyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAiIHR5cGU9InRuczpQb3J0VHlwZTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxIiBuYW1lPSJJbnB1dDIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxIiBuYW1lPSJPdXRwdXQyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEiIHR5cGU9InRuczpQb3J0VHlwZTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyIiBuYW1lPSJJbnB1dDIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyIiBuYW1lPSJPdXRwdXQyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIiIHR5cGU9InRuczpQb3J0VHlwZTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzIiBuYW1lPSJJbnB1dDIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzIiBuYW1lPSJPdXRwdXQyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMiIHR5cGU9InRuczpQb3J0VHlwZTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0IiBuYW1lPSJJbnB1dDI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0IiBuYW1lPSJPdXRwdXQyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQiIHR5cGU9InRuczpQb3J0VHlwZTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1IiBuYW1lPSJJbnB1dDI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1IiBuYW1lPSJPdXRwdXQyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUiIHR5cGU9InRuczpQb3J0VHlwZTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2IiBuYW1lPSJJbnB1dDI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2IiBuYW1lPSJPdXRwdXQyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYiIHR5cGU9InRuczpQb3J0VHlwZTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3IiBuYW1lPSJJbnB1dDI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3IiBuYW1lPSJPdXRwdXQyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjciIHR5cGU9InRuczpQb3J0VHlwZTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4IiBuYW1lPSJJbnB1dDI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4IiBuYW1lPSJPdXRwdXQyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgiIHR5cGU9InRuczpQb3J0VHlwZTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5IiBuYW1lPSJJbnB1dDI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5IiBuYW1lPSJPdXRwdXQyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkiIHR5cGU9InRuczpQb3J0VHlwZTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwIiBuYW1lPSJJbnB1dDMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwIiBuYW1lPSJPdXRwdXQzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAiIHR5cGU9InRuczpQb3J0VHlwZTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxIiBuYW1lPSJJbnB1dDMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxIiBuYW1lPSJPdXRwdXQzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEiIHR5cGU9InRuczpQb3J0VHlwZTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyIiBuYW1lPSJJbnB1dDMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyIiBuYW1lPSJPdXRwdXQzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIiIHR5cGU9InRuczpQb3J0VHlwZTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzIiBuYW1lPSJJbnB1dDMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzIiBuYW1lPSJPdXRwdXQzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMiIHR5cGU9InRuczpQb3J0VHlwZTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0IiBuYW1lPSJJbnB1dDM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0IiBuYW1lPSJPdXRwdXQzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQiIHR5cGU9InRuczpQb3J0VHlwZTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1IiBuYW1lPSJJbnB1dDM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1IiBuYW1lPSJPdXRwdXQzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUiIHR5cGU9InRuczpQb3J0VHlwZTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2IiBuYW1lPSJJbnB1dDM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2IiBuYW1lPSJPdXRwdXQzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYiIHR5cGU9InRuczpQb3J0VHlwZTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3IiBuYW1lPSJJbnB1dDM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3IiBuYW1lPSJPdXRwdXQzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzciIHR5cGU9InRuczpQb3J0VHlwZTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4IiBuYW1lPSJJbnB1dDM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4IiBuYW1lPSJPdXRwdXQzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgiIHR5cGU9InRuczpQb3J0VHlwZTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5IiBuYW1lPSJJbnB1dDM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5IiBuYW1lPSJPdXRwdXQzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkiIHR5cGU9InRuczpQb3J0VHlwZTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwIiBuYW1lPSJJbnB1dDQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwIiBuYW1lPSJPdXRwdXQ0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAiIHR5cGU9InRuczpQb3J0VHlwZTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxIiBuYW1lPSJJbnB1dDQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxIiBuYW1lPSJPdXRwdXQ0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEiIHR5cGU9InRuczpQb3J0VHlwZTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyIiBuYW1lPSJJbnB1dDQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyIiBuYW1lPSJPdXRwdXQ0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIiIHR5cGU9InRuczpQb3J0VHlwZTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzIiBuYW1lPSJJbnB1dDQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzIiBuYW1lPSJPdXRwdXQ0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMiIHR5cGU9InRuczpQb3J0VHlwZTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0IiBuYW1lPSJJbnB1dDQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0IiBuYW1lPSJPdXRwdXQ0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQiIHR5cGU9InRuczpQb3J0VHlwZTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1IiBuYW1lPSJJbnB1dDQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1IiBuYW1lPSJPdXRwdXQ0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUiIHR5cGU9InRuczpQb3J0VHlwZTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2IiBuYW1lPSJJbnB1dDQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2IiBuYW1lPSJPdXRwdXQ0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYiIHR5cGU9InRuczpQb3J0VHlwZTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3IiBuYW1lPSJJbnB1dDQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3IiBuYW1lPSJPdXRwdXQ0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDciIHR5cGU9InRuczpQb3J0VHlwZTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4IiBuYW1lPSJJbnB1dDQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4IiBuYW1lPSJPdXRwdXQ0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgiIHR5cGU9InRuczpQb3J0VHlwZTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5IiBuYW1lPSJJbnB1dDQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5IiBuYW1lPSJPdXRwdXQ0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkiIHR5cGU9InRuczpQb3J0VHlwZTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwIiBuYW1lPSJJbnB1dDUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwIiBuYW1lPSJPdXRwdXQ1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAiIHR5cGU9InRuczpQb3J0VHlwZTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxIiBuYW1lPSJJbnB1dDUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxIiBuYW1lPSJPdXRwdXQ1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTEiIHR5cGU9InRuczpQb3J0VHlwZTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyIiBuYW1lPSJJbnB1dDUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyIiBuYW1lPSJPdXRwdXQ1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTIiIHR5cGU9InRuczpQb3J0VHlwZTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzIiBuYW1lPSJJbnB1dDUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzIiBuYW1lPSJPdXRwdXQ1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMiIHR5cGU9InRuczpQb3J0VHlwZTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0IiBuYW1lPSJJbnB1dDU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0IiBuYW1lPSJPdXRwdXQ1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQiIHR5cGU9InRuczpQb3J0VHlwZTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1IiBuYW1lPSJJbnB1dDU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1IiBuYW1lPSJPdXRwdXQ1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTUiIHR5cGU9InRuczpQb3J0VHlwZTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2IiBuYW1lPSJJbnB1dDU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2IiBuYW1lPSJPdXRwdXQ1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYiIHR5cGU9InRuczpQb3J0VHlwZTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3IiBuYW1lPSJJbnB1dDU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3IiBuYW1lPSJPdXRwdXQ1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTciIHR5cGU9InRuczpQb3J0VHlwZTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4IiBuYW1lPSJJbnB1dDU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4IiBuYW1lPSJPdXRwdXQ1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTgiIHR5cGU9InRuczpQb3J0VHlwZTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5IiBuYW1lPSJJbnB1dDU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5IiBuYW1lPSJPdXRwdXQ1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkiIHR5cGU9InRuczpQb3J0VHlwZTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwIiBuYW1lPSJJbnB1dDYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwIiBuYW1lPSJPdXRwdXQ2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjAiIHR5cGU9InRuczpQb3J0VHlwZTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxIiBuYW1lPSJJbnB1dDYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxIiBuYW1lPSJPdXRwdXQ2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjEiIHR5cGU9InRuczpQb3J0VHlwZTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyIiBuYW1lPSJJbnB1dDYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyIiBuYW1lPSJPdXRwdXQ2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIiIHR5cGU9InRuczpQb3J0VHlwZTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzIiBuYW1lPSJJbnB1dDYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzIiBuYW1lPSJPdXRwdXQ2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjMiIHR5cGU9InRuczpQb3J0VHlwZTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0IiBuYW1lPSJJbnB1dDY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0IiBuYW1lPSJPdXRwdXQ2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQiIHR5cGU9InRuczpQb3J0VHlwZTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1IiBuYW1lPSJJbnB1dDY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1IiBuYW1lPSJPdXRwdXQ2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUiIHR5cGU9InRuczpQb3J0VHlwZTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2IiBuYW1lPSJJbnB1dDY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2IiBuYW1lPSJPdXRwdXQ2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjYiIHR5cGU9InRuczpQb3J0VHlwZTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3IiBuYW1lPSJJbnB1dDY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3IiBuYW1lPSJPdXRwdXQ2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjciIHR5cGU9InRuczpQb3J0VHlwZTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4IiBuYW1lPSJJbnB1dDY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4IiBuYW1lPSJPdXRwdXQ2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgiIHR5cGU9InRuczpQb3J0VHlwZTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5IiBuYW1lPSJJbnB1dDY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5IiBuYW1lPSJPdXRwdXQ2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjkiIHR5cGU9InRuczpQb3J0VHlwZTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwIiBuYW1lPSJJbnB1dDcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwIiBuYW1lPSJPdXRwdXQ3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzAiIHR5cGU9InRuczpQb3J0VHlwZTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxIiBuYW1lPSJJbnB1dDcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxIiBuYW1lPSJPdXRwdXQ3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzEiIHR5cGU9InRuczpQb3J0VHlwZTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyIiBuYW1lPSJJbnB1dDcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyIiBuYW1lPSJPdXRwdXQ3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzIiIHR5cGU9InRuczpQb3J0VHlwZTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczIiBuYW1lPSJJbnB1dDczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczIiBuYW1lPSJPdXRwdXQ3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzMiIHR5cGU9InRuczpQb3J0VHlwZTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0IiBuYW1lPSJJbnB1dDc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0IiBuYW1lPSJPdXRwdXQ3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQiIHR5cGU9InRuczpQb3J0VHlwZTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1IiBuYW1lPSJJbnB1dDc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1IiBuYW1lPSJPdXRwdXQ3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzUiIHR5cGU9InRuczpQb3J0VHlwZTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2IiBuYW1lPSJJbnB1dDc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2IiBuYW1lPSJPdXRwdXQ3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzYiIHR5cGU9InRuczpQb3J0VHlwZTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3IiBuYW1lPSJJbnB1dDc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3IiBuYW1lPSJPdXRwdXQ3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzciIHR5cGU9InRuczpQb3J0VHlwZTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4IiBuYW1lPSJJbnB1dDc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4IiBuYW1lPSJPdXRwdXQ3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzgiIHR5cGU9InRuczpQb3J0VHlwZTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5IiBuYW1lPSJJbnB1dDc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5IiBuYW1lPSJPdXRwdXQ3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzkiIHR5cGU9InRuczpQb3J0VHlwZTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwIiBuYW1lPSJJbnB1dDgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwIiBuYW1lPSJPdXRwdXQ4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAiIHR5cGU9InRuczpQb3J0VHlwZTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxIiBuYW1lPSJJbnB1dDgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxIiBuYW1lPSJPdXRwdXQ4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODEiIHR5cGU9InRuczpQb3J0VHlwZTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyIiBuYW1lPSJJbnB1dDgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyIiBuYW1lPSJPdXRwdXQ4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODIiIHR5cGU9InRuczpQb3J0VHlwZTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzIiBuYW1lPSJJbnB1dDgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzIiBuYW1lPSJPdXRwdXQ4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMiIHR5cGU9InRuczpQb3J0VHlwZTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0IiBuYW1lPSJJbnB1dDg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0IiBuYW1lPSJPdXRwdXQ4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQiIHR5cGU9InRuczpQb3J0VHlwZTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1IiBuYW1lPSJJbnB1dDg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1IiBuYW1lPSJPdXRwdXQ4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODUiIHR5cGU9InRuczpQb3J0VHlwZTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2IiBuYW1lPSJJbnB1dDg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2IiBuYW1lPSJPdXRwdXQ4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYiIHR5cGU9InRuczpQb3J0VHlwZTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3IiBuYW1lPSJJbnB1dDg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3IiBuYW1lPSJPdXRwdXQ4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODciIHR5cGU9InRuczpQb3J0VHlwZTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4IiBuYW1lPSJJbnB1dDg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4IiBuYW1lPSJPdXRwdXQ4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODgiIHR5cGU9InRuczpQb3J0VHlwZTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5IiBuYW1lPSJJbnB1dDg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5IiBuYW1lPSJPdXRwdXQ4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkiIHR5cGU9InRuczpQb3J0VHlwZTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwIiBuYW1lPSJJbnB1dDkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwIiBuYW1lPSJPdXRwdXQ5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTAiIHR5cGU9InRuczpQb3J0VHlwZTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxIiBuYW1lPSJJbnB1dDkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxIiBuYW1lPSJPdXRwdXQ5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTEiIHR5cGU9InRuczpQb3J0VHlwZTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyIiBuYW1lPSJJbnB1dDkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyIiBuYW1lPSJPdXRwdXQ5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIiIHR5cGU9InRuczpQb3J0VHlwZTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzIiBuYW1lPSJJbnB1dDkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzIiBuYW1lPSJPdXRwdXQ5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTMiIHR5cGU9InRuczpQb3J0VHlwZTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0IiBuYW1lPSJJbnB1dDk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0IiBuYW1lPSJPdXRwdXQ5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQiIHR5cGU9InRuczpQb3J0VHlwZTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1IiBuYW1lPSJJbnB1dDk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1IiBuYW1lPSJPdXRwdXQ5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUiIHR5cGU9InRuczpQb3J0VHlwZTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2IiBuYW1lPSJJbnB1dDk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2IiBuYW1lPSJPdXRwdXQ5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTYiIHR5cGU9InRuczpQb3J0VHlwZTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3IiBuYW1lPSJJbnB1dDk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3IiBuYW1lPSJPdXRwdXQ5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTciIHR5cGU9InRuczpQb3J0VHlwZTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4IiBuYW1lPSJJbnB1dDk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4IiBuYW1lPSJPdXRwdXQ5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgiIHR5cGU9InRuczpQb3J0VHlwZTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5IiBuYW1lPSJJbnB1dDk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5IiBuYW1lPSJPdXRwdXQ5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTkiIHR5cGU9InRuczpQb3J0VHlwZTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMCIgbmFtZT0iSW5wdXQxMDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAwIiBuYW1lPSJPdXRwdXQxMDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMCIgdHlwZT0idG5zOlBvcnRUeXBlMTAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAxIiBuYW1lPSJJbnB1dDEwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDEiIG5hbWU9Ik91dHB1dDEwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDIiIG5hbWU9IklucHV0MTAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMiIgbmFtZT0iT3V0cHV0MTAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDIiIHR5cGU9InRuczpQb3J0VHlwZTEwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMyIgbmFtZT0iSW5wdXQxMDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAzIiBuYW1lPSJPdXRwdXQxMDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMyIgdHlwZT0idG5zOlBvcnRUeXBlMTAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA0IiBuYW1lPSJJbnB1dDEwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDQiIG5hbWU9Ik91dHB1dDEwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDUiIG5hbWU9IklucHV0MTA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNSIgbmFtZT0iT3V0cHV0MTA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDUiIHR5cGU9InRuczpQb3J0VHlwZTEwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNiIgbmFtZT0iSW5wdXQxMDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA2IiBuYW1lPSJPdXRwdXQxMDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNiIgdHlwZT0idG5zOlBvcnRUeXBlMTA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA3IiBuYW1lPSJJbnB1dDEwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDciIG5hbWU9Ik91dHB1dDEwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDgiIG5hbWU9IklucHV0MTA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwOCIgbmFtZT0iT3V0cHV0MTA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDgiIHR5cGU9InRuczpQb3J0VHlwZTEwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwOSIgbmFtZT0iSW5wdXQxMDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA5IiBuYW1lPSJPdXRwdXQxMDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwOSIgdHlwZT0idG5zOlBvcnRUeXBlMTA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEwIiBuYW1lPSJJbnB1dDExMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTAiIG5hbWU9Ik91dHB1dDExMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTEiIG5hbWU9IklucHV0MTExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMSIgbmFtZT0iT3V0cHV0MTExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTEiIHR5cGU9InRuczpQb3J0VHlwZTExMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMiIgbmFtZT0iSW5wdXQxMTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEyIiBuYW1lPSJPdXRwdXQxMTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMiIgdHlwZT0idG5zOlBvcnRUeXBlMTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEzIiBuYW1lPSJJbnB1dDExMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTMiIG5hbWU9Ik91dHB1dDExMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTQiIG5hbWU9IklucHV0MTE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNCIgbmFtZT0iT3V0cHV0MTE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTQiIHR5cGU9InRuczpQb3J0VHlwZTExNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNSIgbmFtZT0iSW5wdXQxMTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE1IiBuYW1lPSJPdXRwdXQxMTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNSIgdHlwZT0idG5zOlBvcnRUeXBlMTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE2IiBuYW1lPSJJbnB1dDExNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTYiIG5hbWU9Ik91dHB1dDExNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTciIG5hbWU9IklucHV0MTE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNyIgbmFtZT0iT3V0cHV0MTE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTciIHR5cGU9InRuczpQb3J0VHlwZTExNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExOCIgbmFtZT0iSW5wdXQxMTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE4IiBuYW1lPSJPdXRwdXQxMTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExOCIgdHlwZT0idG5zOlBvcnRUeXBlMTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE5IiBuYW1lPSJJbnB1dDExOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTkiIG5hbWU9Ik91dHB1dDExOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjAiIG5hbWU9IklucHV0MTIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMCIgbmFtZT0iT3V0cHV0MTIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjAiIHR5cGU9InRuczpQb3J0VHlwZTEyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMSIgbmFtZT0iSW5wdXQxMjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIxIiBuYW1lPSJPdXRwdXQxMjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMSIgdHlwZT0idG5zOlBvcnRUeXBlMTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIyIiBuYW1lPSJJbnB1dDEyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjIiIG5hbWU9Ik91dHB1dDEyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjMiIG5hbWU9IklucHV0MTIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMyIgbmFtZT0iT3V0cHV0MTIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjMiIHR5cGU9InRuczpQb3J0VHlwZTEyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNCIgbmFtZT0iSW5wdXQxMjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI0IiBuYW1lPSJPdXRwdXQxMjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNCIgdHlwZT0idG5zOlBvcnRUeXBlMTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI1IiBuYW1lPSJJbnB1dDEyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjUiIG5hbWU9Ik91dHB1dDEyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjYiIG5hbWU9IklucHV0MTI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNiIgbmFtZT0iT3V0cHV0MTI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjYiIHR5cGU9InRuczpQb3J0VHlwZTEyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNyIgbmFtZT0iSW5wdXQxMjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI3IiBuYW1lPSJPdXRwdXQxMjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNyIgdHlwZT0idG5zOlBvcnRUeXBlMTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI4IiBuYW1lPSJJbnB1dDEyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjgiIG5hbWU9Ik91dHB1dDEyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjkiIG5hbWU9IklucHV0MTI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyOSIgbmFtZT0iT3V0cHV0MTI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjkiIHR5cGU9InRuczpQb3J0VHlwZTEyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMCIgbmFtZT0iSW5wdXQxMzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMwIiBuYW1lPSJPdXRwdXQxMzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMCIgdHlwZT0idG5zOlBvcnRUeXBlMTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMxIiBuYW1lPSJJbnB1dDEzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzEiIG5hbWU9Ik91dHB1dDEzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzIiIG5hbWU9IklucHV0MTMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMiIgbmFtZT0iT3V0cHV0MTMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzIiIHR5cGU9InRuczpQb3J0VHlwZTEzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMyIgbmFtZT0iSW5wdXQxMzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMzIiBuYW1lPSJPdXRwdXQxMzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMyIgdHlwZT0idG5zOlBvcnRUeXBlMTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM0IiBuYW1lPSJJbnB1dDEzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzQiIG5hbWU9Ik91dHB1dDEzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzUiIG5hbWU9IklucHV0MTM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNSIgbmFtZT0iT3V0cHV0MTM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzUiIHR5cGU9InRuczpQb3J0VHlwZTEzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNiIgbmFtZT0iSW5wdXQxMzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM2IiBuYW1lPSJPdXRwdXQxMzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNiIgdHlwZT0idG5zOlBvcnRUeXBlMTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM3IiBuYW1lPSJJbnB1dDEzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzciIG5hbWU9Ik91dHB1dDEzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzgiIG5hbWU9IklucHV0MTM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzOCIgbmFtZT0iT3V0cHV0MTM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzgiIHR5cGU9InRuczpQb3J0VHlwZTEzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzOSIgbmFtZT0iSW5wdXQxMzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM5IiBuYW1lPSJPdXRwdXQxMzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzOSIgdHlwZT0idG5zOlBvcnRUeXBlMTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQwIiBuYW1lPSJJbnB1dDE0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDAiIG5hbWU9Ik91dHB1dDE0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDEiIG5hbWU9IklucHV0MTQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MSIgbmFtZT0iT3V0cHV0MTQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDEiIHR5cGU9InRuczpQb3J0VHlwZTE0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MiIgbmFtZT0iSW5wdXQxNDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQyIiBuYW1lPSJPdXRwdXQxNDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MiIgdHlwZT0idG5zOlBvcnRUeXBlMTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQzIiBuYW1lPSJJbnB1dDE0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDMiIG5hbWU9Ik91dHB1dDE0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDQiIG5hbWU9IklucHV0MTQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NCIgbmFtZT0iT3V0cHV0MTQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDQiIHR5cGU9InRuczpQb3J0VHlwZTE0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NSIgbmFtZT0iSW5wdXQxNDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ1IiBuYW1lPSJPdXRwdXQxNDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NSIgdHlwZT0idG5zOlBvcnRUeXBlMTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ2IiBuYW1lPSJJbnB1dDE0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDYiIG5hbWU9Ik91dHB1dDE0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDciIG5hbWU9IklucHV0MTQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NyIgbmFtZT0iT3V0cHV0MTQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDciIHR5cGU9InRuczpQb3J0VHlwZTE0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDciIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0OCIgbmFtZT0iSW5wdXQxNDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ4IiBuYW1lPSJPdXRwdXQxNDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0OCIgdHlwZT0idG5zOlBvcnRUeXBlMTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ5IiBuYW1lPSJJbnB1dDE0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDkiIG5hbWU9Ik91dHB1dDE0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTAiIG5hbWU9IklucHV0MTUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MCIgbmFtZT0iT3V0cHV0MTUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTAiIHR5cGU9InRuczpQb3J0VHlwZTE1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MSIgbmFtZT0iSW5wdXQxNTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUxIiBuYW1lPSJPdXRwdXQxNTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MSIgdHlwZT0idG5zOlBvcnRUeXBlMTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUyIiBuYW1lPSJJbnB1dDE1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTIiIG5hbWU9Ik91dHB1dDE1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTMiIG5hbWU9IklucHV0MTUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MyIgbmFtZT0iT3V0cHV0MTUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTMiIHR5cGU9InRuczpQb3J0VHlwZTE1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NCIgbmFtZT0iSW5wdXQxNTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU0IiBuYW1lPSJPdXRwdXQxNTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NCIgdHlwZT0idG5zOlBvcnRUeXBlMTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU1IiBuYW1lPSJJbnB1dDE1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTUiIG5hbWU9Ik91dHB1dDE1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTYiIG5hbWU9IklucHV0MTU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NiIgbmFtZT0iT3V0cHV0MTU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTYiIHR5cGU9InRuczpQb3J0VHlwZTE1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NyIgbmFtZT0iSW5wdXQxNTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU3IiBuYW1lPSJPdXRwdXQxNTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NyIgdHlwZT0idG5zOlBvcnRUeXBlMTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU4IiBuYW1lPSJJbnB1dDE1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTgiIG5hbWU9Ik91dHB1dDE1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTkiIG5hbWU9IklucHV0MTU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1OSIgbmFtZT0iT3V0cHV0MTU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTkiIHR5cGU9InRuczpQb3J0VHlwZTE1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MCIgbmFtZT0iSW5wdXQxNjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYwIiBuYW1lPSJPdXRwdXQxNjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MCIgdHlwZT0idG5zOlBvcnRUeXBlMTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYxIiBuYW1lPSJJbnB1dDE2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjEiIG5hbWU9Ik91dHB1dDE2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjIiIG5hbWU9IklucHV0MTYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MiIgbmFtZT0iT3V0cHV0MTYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjIiIHR5cGU9InRuczpQb3J0VHlwZTE2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MyIgbmFtZT0iSW5wdXQxNjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYzIiBuYW1lPSJPdXRwdXQxNjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MyIgdHlwZT0idG5zOlBvcnRUeXBlMTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY0IiBuYW1lPSJJbnB1dDE2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjQiIG5hbWU9Ik91dHB1dDE2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjUiIG5hbWU9IklucHV0MTY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NSIgbmFtZT0iT3V0cHV0MTY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjUiIHR5cGU9InRuczpQb3J0VHlwZTE2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NiIgbmFtZT0iSW5wdXQxNjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY2IiBuYW1lPSJPdXRwdXQxNjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NiIgdHlwZT0idG5zOlBvcnRUeXBlMTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY3IiBuYW1lPSJJbnB1dDE2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjciIG5hbWU9Ik91dHB1dDE2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjgiIG5hbWU9IklucHV0MTY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2OCIgbmFtZT0iT3V0cHV0MTY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjgiIHR5cGU9InRuczpQb3J0VHlwZTE2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2OSIgbmFtZT0iSW5wdXQxNjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY5IiBuYW1lPSJPdXRwdXQxNjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2OSIgdHlwZT0idG5zOlBvcnRUeXBlMTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcwIiBuYW1lPSJJbnB1dDE3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzAiIG5hbWU9Ik91dHB1dDE3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzEiIG5hbWU9IklucHV0MTcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MSIgbmFtZT0iT3V0cHV0MTcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzEiIHR5cGU9InRuczpQb3J0VHlwZTE3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MiIgbmFtZT0iSW5wdXQxNzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcyIiBuYW1lPSJPdXRwdXQxNzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MiIgdHlwZT0idG5zOlBvcnRUeXBlMTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTczIiBuYW1lPSJJbnB1dDE3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzMiIG5hbWU9Ik91dHB1dDE3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTczIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzQiIG5hbWU9IklucHV0MTc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NCIgbmFtZT0iT3V0cHV0MTc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzQiIHR5cGU9InRuczpQb3J0VHlwZTE3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NSIgbmFtZT0iSW5wdXQxNzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc1IiBuYW1lPSJPdXRwdXQxNzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NSIgdHlwZT0idG5zOlBvcnRUeXBlMTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc2IiBuYW1lPSJJbnB1dDE3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzYiIG5hbWU9Ik91dHB1dDE3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzciIG5hbWU9IklucHV0MTc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NyIgbmFtZT0iT3V0cHV0MTc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzciIHR5cGU9InRuczpQb3J0VHlwZTE3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzciIGJpbmRpbmc9InRuczpCaW5kaW5nMTc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3OCIgbmFtZT0iSW5wdXQxNzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc4IiBuYW1lPSJPdXRwdXQxNzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3OCIgdHlwZT0idG5zOlBvcnRUeXBlMTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc5IiBuYW1lPSJJbnB1dDE3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzkiIG5hbWU9Ik91dHB1dDE3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODAiIG5hbWU9IklucHV0MTgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MCIgbmFtZT0iT3V0cHV0MTgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODAiIHR5cGU9InRuczpQb3J0VHlwZTE4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MSIgbmFtZT0iSW5wdXQxODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgxIiBuYW1lPSJPdXRwdXQxODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MSIgdHlwZT0idG5zOlBvcnRUeXBlMTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MSIgYmluZGluZz0idG5zOkJpbmRpbmcxODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgyIiBuYW1lPSJJbnB1dDE4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODIiIG5hbWU9Ik91dHB1dDE4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODMiIG5hbWU9IklucHV0MTgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MyIgbmFtZT0iT3V0cHV0MTgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODMiIHR5cGU9InRuczpQb3J0VHlwZTE4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NCIgbmFtZT0iSW5wdXQxODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg0IiBuYW1lPSJPdXRwdXQxODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NCIgdHlwZT0idG5zOlBvcnRUeXBlMTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NCIgYmluZGluZz0idG5zOkJpbmRpbmcxODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg1IiBuYW1lPSJJbnB1dDE4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODUiIG5hbWU9Ik91dHB1dDE4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODYiIG5hbWU9IklucHV0MTg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NiIgbmFtZT0iT3V0cHV0MTg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODYiIHR5cGU9InRuczpQb3J0VHlwZTE4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NyIgbmFtZT0iSW5wdXQxODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg3IiBuYW1lPSJPdXRwdXQxODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NyIgdHlwZT0idG5zOlBvcnRUeXBlMTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NyIgYmluZGluZz0idG5zOkJpbmRpbmcxODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg4IiBuYW1lPSJJbnB1dDE4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODgiIG5hbWU9Ik91dHB1dDE4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODkiIG5hbWU9IklucHV0MTg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4OSIgbmFtZT0iT3V0cHV0MTg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODkiIHR5cGU9InRuczpQb3J0VHlwZTE4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MCIgbmFtZT0iSW5wdXQxOTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkwIiBuYW1lPSJPdXRwdXQxOTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MCIgdHlwZT0idG5zOlBvcnRUeXBlMTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkxIiBuYW1lPSJJbnB1dDE5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTEiIG5hbWU9Ik91dHB1dDE5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTIiIG5hbWU9IklucHV0MTkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MiIgbmFtZT0iT3V0cHV0MTkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTIiIHR5cGU9InRuczpQb3J0VHlwZTE5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MyIgbmFtZT0iSW5wdXQxOTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkzIiBuYW1lPSJPdXRwdXQxOTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MyIgdHlwZT0idG5zOlBvcnRUeXBlMTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MyIgYmluZGluZz0idG5zOkJpbmRpbmcxOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk0IiBuYW1lPSJJbnB1dDE5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTQiIG5hbWU9Ik91dHB1dDE5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTUiIG5hbWU9IklucHV0MTk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NSIgbmFtZT0iT3V0cHV0MTk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTUiIHR5cGU9InRuczpQb3J0VHlwZTE5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NiIgbmFtZT0iSW5wdXQxOTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk2IiBuYW1lPSJPdXRwdXQxOTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NiIgdHlwZT0idG5zOlBvcnRUeXBlMTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NiIgYmluZGluZz0idG5zOkJpbmRpbmcxOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk3IiBuYW1lPSJJbnB1dDE5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTciIG5hbWU9Ik91dHB1dDE5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTgiIG5hbWU9IklucHV0MTk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5OCIgbmFtZT0iT3V0cHV0MTk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTgiIHR5cGU9InRuczpQb3J0VHlwZTE5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5OSIgbmFtZT0iSW5wdXQxOTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk5IiBuYW1lPSJPdXRwdXQxOTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5OSIgdHlwZT0idG5zOlBvcnRUeXBlMTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5OSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAwIiBuYW1lPSJJbnB1dDIwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDAiIG5hbWU9Ik91dHB1dDIwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDEiIG5hbWU9IklucHV0MjAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMSIgbmFtZT0iT3V0cHV0MjAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDEiIHR5cGU9InRuczpQb3J0VHlwZTIwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwMiIgbmFtZT0iSW5wdXQyMDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAyIiBuYW1lPSJPdXRwdXQyMDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwMiIgdHlwZT0idG5zOlBvcnRUeXBlMjAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAzIiBuYW1lPSJJbnB1dDIwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDMiIG5hbWU9Ik91dHB1dDIwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDQiIG5hbWU9IklucHV0MjA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNCIgbmFtZT0iT3V0cHV0MjA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDQiIHR5cGU9InRuczpQb3J0VHlwZTIwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNSIgbmFtZT0iSW5wdXQyMDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA1IiBuYW1lPSJPdXRwdXQyMDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNSIgdHlwZT0idG5zOlBvcnRUeXBlMjA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA2IiBuYW1lPSJJbnB1dDIwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDYiIG5hbWU9Ik91dHB1dDIwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDciIG5hbWU9IklucHV0MjA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNyIgbmFtZT0iT3V0cHV0MjA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDciIHR5cGU9InRuczpQb3J0VHlwZTIwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDciIGJpbmRpbmc9InRuczpCaW5kaW5nMjA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwOCIgbmFtZT0iSW5wdXQyMDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA4IiBuYW1lPSJPdXRwdXQyMDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwOCIgdHlwZT0idG5zOlBvcnRUeXBlMjA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA5IiBuYW1lPSJJbnB1dDIwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDkiIG5hbWU9Ik91dHB1dDIwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTAiIG5hbWU9IklucHV0MjEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMCIgbmFtZT0iT3V0cHV0MjEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTAiIHR5cGU9InRuczpQb3J0VHlwZTIxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMSIgbmFtZT0iSW5wdXQyMTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjExIiBuYW1lPSJPdXRwdXQyMTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMSIgdHlwZT0idG5zOlBvcnRUeXBlMjExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEyIiBuYW1lPSJJbnB1dDIxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTIiIG5hbWU9Ik91dHB1dDIxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTMiIG5hbWU9IklucHV0MjEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMyIgbmFtZT0iT3V0cHV0MjEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTMiIHR5cGU9InRuczpQb3J0VHlwZTIxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNCIgbmFtZT0iSW5wdXQyMTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE0IiBuYW1lPSJPdXRwdXQyMTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNCIgdHlwZT0idG5zOlBvcnRUeXBlMjE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE1IiBuYW1lPSJJbnB1dDIxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTUiIG5hbWU9Ik91dHB1dDIxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTYiIG5hbWU9IklucHV0MjE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxNiIgbmFtZT0iT3V0cHV0MjE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTYiIHR5cGU9InRuczpQb3J0VHlwZTIxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNyIgbmFtZT0iSW5wdXQyMTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE3IiBuYW1lPSJPdXRwdXQyMTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNyIgdHlwZT0idG5zOlBvcnRUeXBlMjE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE4IiBuYW1lPSJJbnB1dDIxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTgiIG5hbWU9Ik91dHB1dDIxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTkiIG5hbWU9IklucHV0MjE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxOSIgbmFtZT0iT3V0cHV0MjE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTkiIHR5cGU9InRuczpQb3J0VHlwZTIxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMCIgbmFtZT0iSW5wdXQyMjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIwIiBuYW1lPSJPdXRwdXQyMjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMCIgdHlwZT0idG5zOlBvcnRUeXBlMjIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIxIiBuYW1lPSJJbnB1dDIyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjEiIG5hbWU9Ik91dHB1dDIyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjIiIG5hbWU9IklucHV0MjIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyMiIgbmFtZT0iT3V0cHV0MjIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjIiIHR5cGU9InRuczpQb3J0VHlwZTIyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMyIgbmFtZT0iSW5wdXQyMjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIzIiBuYW1lPSJPdXRwdXQyMjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMyIgdHlwZT0idG5zOlBvcnRUeXBlMjIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI0IiBuYW1lPSJJbnB1dDIyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjQiIG5hbWU9Ik91dHB1dDIyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjUiIG5hbWU9IklucHV0MjI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNSIgbmFtZT0iT3V0cHV0MjI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjUiIHR5cGU9InRuczpQb3J0VHlwZTIyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyNiIgbmFtZT0iSW5wdXQyMjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI2IiBuYW1lPSJPdXRwdXQyMjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyNiIgdHlwZT0idG5zOlBvcnRUeXBlMjI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyNiIgYmluZGluZz0idG5zOkJpbmRpbmcyMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI3IiBuYW1lPSJJbnB1dDIyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjciIG5hbWU9Ik91dHB1dDIyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjgiIG5hbWU9IklucHV0MjI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyOCIgbmFtZT0iT3V0cHV0MjI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjgiIHR5cGU9InRuczpQb3J0VHlwZTIyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyOSIgbmFtZT0iSW5wdXQyMjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI5IiBuYW1lPSJPdXRwdXQyMjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyOSIgdHlwZT0idG5zOlBvcnRUeXBlMjI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyOSIgYmluZGluZz0idG5zOkJpbmRpbmcyMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMwIiBuYW1lPSJJbnB1dDIzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzAiIG5hbWU9Ik91dHB1dDIzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzEiIG5hbWU9IklucHV0MjMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMSIgbmFtZT0iT3V0cHV0MjMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzEiIHR5cGU9InRuczpQb3J0VHlwZTIzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzMiIgbmFtZT0iSW5wdXQyMzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMyIiBuYW1lPSJPdXRwdXQyMzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzMiIgdHlwZT0idG5zOlBvcnRUeXBlMjMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMzIiBuYW1lPSJJbnB1dDIzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzMiIG5hbWU9Ik91dHB1dDIzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzQiIG5hbWU9IklucHV0MjM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNCIgbmFtZT0iT3V0cHV0MjM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzQiIHR5cGU9InRuczpQb3J0VHlwZTIzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNSIgbmFtZT0iSW5wdXQyMzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM1IiBuYW1lPSJPdXRwdXQyMzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNSIgdHlwZT0idG5zOlBvcnRUeXBlMjM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM2IiBuYW1lPSJJbnB1dDIzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzYiIG5hbWU9Ik91dHB1dDIzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzciIG5hbWU9IklucHV0MjM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNyIgbmFtZT0iT3V0cHV0MjM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzciIHR5cGU9InRuczpQb3J0VHlwZTIzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzciIGJpbmRpbmc9InRuczpCaW5kaW5nMjM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzOCIgbmFtZT0iSW5wdXQyMzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM4IiBuYW1lPSJPdXRwdXQyMzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzOCIgdHlwZT0idG5zOlBvcnRUeXBlMjM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM5IiBuYW1lPSJJbnB1dDIzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzkiIG5hbWU9Ik91dHB1dDIzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDAiIG5hbWU9IklucHV0MjQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MCIgbmFtZT0iT3V0cHV0MjQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDAiIHR5cGU9InRuczpQb3J0VHlwZTI0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MSIgbmFtZT0iSW5wdXQyNDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQxIiBuYW1lPSJPdXRwdXQyNDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MSIgdHlwZT0idG5zOlBvcnRUeXBlMjQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQyIiBuYW1lPSJJbnB1dDI0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDIiIG5hbWU9Ik91dHB1dDI0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDMiIG5hbWU9IklucHV0MjQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MyIgbmFtZT0iT3V0cHV0MjQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDMiIHR5cGU9InRuczpQb3J0VHlwZTI0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NCIgbmFtZT0iSW5wdXQyNDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ0IiBuYW1lPSJPdXRwdXQyNDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NCIgdHlwZT0idG5zOlBvcnRUeXBlMjQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ1IiBuYW1lPSJJbnB1dDI0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDUiIG5hbWU9Ik91dHB1dDI0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDYiIG5hbWU9IklucHV0MjQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0NiIgbmFtZT0iT3V0cHV0MjQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDYiIHR5cGU9InRuczpQb3J0VHlwZTI0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NyIgbmFtZT0iSW5wdXQyNDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ3IiBuYW1lPSJPdXRwdXQyNDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NyIgdHlwZT0idG5zOlBvcnRUeXBlMjQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ4IiBuYW1lPSJJbnB1dDI0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDgiIG5hbWU9Ik91dHB1dDI0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDkiIG5hbWU9IklucHV0MjQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0OSIgbmFtZT0iT3V0cHV0MjQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDkiIHR5cGU9InRuczpQb3J0VHlwZTI0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MCIgbmFtZT0iSW5wdXQyNTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUwIiBuYW1lPSJPdXRwdXQyNTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MCIgdHlwZT0idG5zOlBvcnRUeXBlMjUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUxIiBuYW1lPSJJbnB1dDI1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTEiIG5hbWU9Ik91dHB1dDI1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTIiIG5hbWU9IklucHV0MjUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1MiIgbmFtZT0iT3V0cHV0MjUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTIiIHR5cGU9InRuczpQb3J0VHlwZTI1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MyIgbmFtZT0iSW5wdXQyNTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUzIiBuYW1lPSJPdXRwdXQyNTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MyIgdHlwZT0idG5zOlBvcnRUeXBlMjUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU0IiBuYW1lPSJJbnB1dDI1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTQiIG5hbWU9Ik91dHB1dDI1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTUiIG5hbWU9IklucHV0MjU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NSIgbmFtZT0iT3V0cHV0MjU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTUiIHR5cGU9InRuczpQb3J0VHlwZTI1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1NiIgbmFtZT0iSW5wdXQyNTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU2IiBuYW1lPSJPdXRwdXQyNTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1NiIgdHlwZT0idG5zOlBvcnRUeXBlMjU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU3IiBuYW1lPSJJbnB1dDI1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTciIG5hbWU9Ik91dHB1dDI1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTgiIG5hbWU9IklucHV0MjU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1OCIgbmFtZT0iT3V0cHV0MjU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTgiIHR5cGU9InRuczpQb3J0VHlwZTI1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1OSIgbmFtZT0iSW5wdXQyNTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU5IiBuYW1lPSJPdXRwdXQyNTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1OSIgdHlwZT0idG5zOlBvcnRUeXBlMjU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYwIiBuYW1lPSJJbnB1dDI2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjAiIG5hbWU9Ik91dHB1dDI2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjEiIG5hbWU9IklucHV0MjYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MSIgbmFtZT0iT3V0cHV0MjYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjEiIHR5cGU9InRuczpQb3J0VHlwZTI2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2MiIgbmFtZT0iSW5wdXQyNjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYyIiBuYW1lPSJPdXRwdXQyNjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2MiIgdHlwZT0idG5zOlBvcnRUeXBlMjYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2MiIgYmluZGluZz0idG5zOkJpbmRpbmcyNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYzIiBuYW1lPSJJbnB1dDI2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjMiIG5hbWU9Ik91dHB1dDI2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjQiIG5hbWU9IklucHV0MjY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NCIgbmFtZT0iT3V0cHV0MjY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjQiIHR5cGU9InRuczpQb3J0VHlwZTI2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NSIgbmFtZT0iSW5wdXQyNjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY1IiBuYW1lPSJPdXRwdXQyNjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NSIgdHlwZT0idG5zOlBvcnRUeXBlMjY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NSIgYmluZGluZz0idG5zOkJpbmRpbmcyNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY2IiBuYW1lPSJJbnB1dDI2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjYiIG5hbWU9Ik91dHB1dDI2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjciIG5hbWU9IklucHV0MjY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NyIgbmFtZT0iT3V0cHV0MjY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjciIHR5cGU9InRuczpQb3J0VHlwZTI2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2OCIgbmFtZT0iSW5wdXQyNjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY4IiBuYW1lPSJPdXRwdXQyNjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2OCIgdHlwZT0idG5zOlBvcnRUeXBlMjY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2OCIgYmluZGluZz0idG5zOkJpbmRpbmcyNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY5IiBuYW1lPSJJbnB1dDI2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjkiIG5hbWU9Ik91dHB1dDI2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzAiIG5hbWU9IklucHV0MjcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MCIgbmFtZT0iT3V0cHV0MjcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzAiIHR5cGU9InRuczpQb3J0VHlwZTI3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MSIgbmFtZT0iSW5wdXQyNzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjcxIiBuYW1lPSJPdXRwdXQyNzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MSIgdHlwZT0idG5zOlBvcnRUeXBlMjcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjcyIiBuYW1lPSJJbnB1dDI3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzIiIG5hbWU9Ik91dHB1dDI3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzMiIG5hbWU9IklucHV0MjczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MyIgbmFtZT0iT3V0cHV0MjczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzMiIHR5cGU9InRuczpQb3J0VHlwZTI3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NCIgbmFtZT0iSW5wdXQyNzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc0IiBuYW1lPSJPdXRwdXQyNzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NCIgdHlwZT0idG5zOlBvcnRUeXBlMjc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc1IiBuYW1lPSJJbnB1dDI3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzUiIG5hbWU9Ik91dHB1dDI3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzYiIG5hbWU9IklucHV0Mjc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3NiIgbmFtZT0iT3V0cHV0Mjc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzYiIHR5cGU9InRuczpQb3J0VHlwZTI3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NyIgbmFtZT0iSW5wdXQyNzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc3IiBuYW1lPSJPdXRwdXQyNzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NyIgdHlwZT0idG5zOlBvcnRUeXBlMjc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc4IiBuYW1lPSJJbnB1dDI3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzgiIG5hbWU9Ik91dHB1dDI3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzkiIG5hbWU9IklucHV0Mjc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3OSIgbmFtZT0iT3V0cHV0Mjc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzkiIHR5cGU9InRuczpQb3J0VHlwZTI3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MCIgbmFtZT0iSW5wdXQyODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgwIiBuYW1lPSJPdXRwdXQyODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MCIgdHlwZT0idG5zOlBvcnRUeXBlMjgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MCIgYmluZGluZz0idG5zOkJpbmRpbmcyODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgxIiBuYW1lPSJJbnB1dDI4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODEiIG5hbWU9Ik91dHB1dDI4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODIiIG5hbWU9IklucHV0MjgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4MiIgbmFtZT0iT3V0cHV0MjgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODIiIHR5cGU9InRuczpQb3J0VHlwZTI4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MyIgbmFtZT0iSW5wdXQyODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgzIiBuYW1lPSJPdXRwdXQyODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MyIgdHlwZT0idG5zOlBvcnRUeXBlMjgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MyIgYmluZGluZz0idG5zOkJpbmRpbmcyODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg0IiBuYW1lPSJJbnB1dDI4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODQiIG5hbWU9Ik91dHB1dDI4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODUiIG5hbWU9IklucHV0Mjg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NSIgbmFtZT0iT3V0cHV0Mjg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODUiIHR5cGU9InRuczpQb3J0VHlwZTI4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4NiIgbmFtZT0iSW5wdXQyODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg2IiBuYW1lPSJPdXRwdXQyODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4NiIgdHlwZT0idG5zOlBvcnRUeXBlMjg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4NiIgYmluZGluZz0idG5zOkJpbmRpbmcyODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg3IiBuYW1lPSJJbnB1dDI4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODciIG5hbWU9Ik91dHB1dDI4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODgiIG5hbWU9IklucHV0Mjg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4OCIgbmFtZT0iT3V0cHV0Mjg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODgiIHR5cGU9InRuczpQb3J0VHlwZTI4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4OSIgbmFtZT0iSW5wdXQyODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg5IiBuYW1lPSJPdXRwdXQyODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4OSIgdHlwZT0idG5zOlBvcnRUeXBlMjg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4OSIgYmluZGluZz0idG5zOkJpbmRpbmcyODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkwIiBuYW1lPSJJbnB1dDI5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTAiIG5hbWU9Ik91dHB1dDI5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTEiIG5hbWU9IklucHV0MjkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MSIgbmFtZT0iT3V0cHV0MjkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTEiIHR5cGU9InRuczpQb3J0VHlwZTI5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5MiIgbmFtZT0iSW5wdXQyOTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkyIiBuYW1lPSJPdXRwdXQyOTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5MiIgdHlwZT0idG5zOlBvcnRUeXBlMjkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5MiIgYmluZGluZz0idG5zOkJpbmRpbmcyOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkzIiBuYW1lPSJJbnB1dDI5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTMiIG5hbWU9Ik91dHB1dDI5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTQiIG5hbWU9IklucHV0Mjk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NCIgbmFtZT0iT3V0cHV0Mjk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTQiIHR5cGU9InRuczpQb3J0VHlwZTI5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NSIgbmFtZT0iSW5wdXQyOTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk1IiBuYW1lPSJPdXRwdXQyOTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NSIgdHlwZT0idG5zOlBvcnRUeXBlMjk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NSIgYmluZGluZz0idG5zOkJpbmRpbmcyOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk2IiBuYW1lPSJJbnB1dDI5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTYiIG5hbWU9Ik91dHB1dDI5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTciIG5hbWU9IklucHV0Mjk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NyIgbmFtZT0iT3V0cHV0Mjk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTciIHR5cGU9InRuczpQb3J0VHlwZTI5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTciIGJpbmRpbmc9InRuczpCaW5kaW5nMjk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5OCIgbmFtZT0iSW5wdXQyOTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk4IiBuYW1lPSJPdXRwdXQyOTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5OCIgdHlwZT0idG5zOlBvcnRUeXBlMjk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5OCIgYmluZGluZz0idG5zOkJpbmRpbmcyOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk5IiBuYW1lPSJJbnB1dDI5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTkiIG5hbWU9Ik91dHB1dDI5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDAiIG5hbWU9IklucHV0MzAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMCIgbmFtZT0iT3V0cHV0MzAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDAiIHR5cGU9InRuczpQb3J0VHlwZTMwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMSIgbmFtZT0iSW5wdXQzMDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAxIiBuYW1lPSJPdXRwdXQzMDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMSIgdHlwZT0idG5zOlBvcnRUeXBlMzAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMSIgYmluZGluZz0idG5zOkJpbmRpbmczMDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAyIiBuYW1lPSJJbnB1dDMwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDIiIG5hbWU9Ik91dHB1dDMwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDMiIG5hbWU9IklucHV0MzAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMyIgbmFtZT0iT3V0cHV0MzAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDMiIHR5cGU9InRuczpQb3J0VHlwZTMwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNCIgbmFtZT0iSW5wdXQzMDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA0IiBuYW1lPSJPdXRwdXQzMDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNCIgdHlwZT0idG5zOlBvcnRUeXBlMzA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNCIgYmluZGluZz0idG5zOkJpbmRpbmczMDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA1IiBuYW1lPSJJbnB1dDMwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDUiIG5hbWU9Ik91dHB1dDMwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDYiIG5hbWU9IklucHV0MzA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwNiIgbmFtZT0iT3V0cHV0MzA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDYiIHR5cGU9InRuczpQb3J0VHlwZTMwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNyIgbmFtZT0iSW5wdXQzMDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA3IiBuYW1lPSJPdXRwdXQzMDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNyIgdHlwZT0idG5zOlBvcnRUeXBlMzA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNyIgYmluZGluZz0idG5zOkJpbmRpbmczMDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA4IiBuYW1lPSJJbnB1dDMwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDgiIG5hbWU9Ik91dHB1dDMwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDkiIG5hbWU9IklucHV0MzA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwOSIgbmFtZT0iT3V0cHV0MzA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDkiIHR5cGU9InRuczpQb3J0VHlwZTMwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMCIgbmFtZT0iSW5wdXQzMTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEwIiBuYW1lPSJPdXRwdXQzMTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMCIgdHlwZT0idG5zOlBvcnRUeXBlMzEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMCIgYmluZGluZz0idG5zOkJpbmRpbmczMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzExIiBuYW1lPSJJbnB1dDMxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTEiIG5hbWU9Ik91dHB1dDMxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzExIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTIiIG5hbWU9IklucHV0MzEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxMiIgbmFtZT0iT3V0cHV0MzEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTIiIHR5cGU9InRuczpQb3J0VHlwZTMxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMyIgbmFtZT0iSW5wdXQzMTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEzIiBuYW1lPSJPdXRwdXQzMTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMyIgdHlwZT0idG5zOlBvcnRUeXBlMzEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMyIgYmluZGluZz0idG5zOkJpbmRpbmczMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE0IiBuYW1lPSJJbnB1dDMxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTQiIG5hbWU9Ik91dHB1dDMxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTUiIG5hbWU9IklucHV0MzE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNSIgbmFtZT0iT3V0cHV0MzE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTUiIHR5cGU9InRuczpQb3J0VHlwZTMxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxNiIgbmFtZT0iSW5wdXQzMTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE2IiBuYW1lPSJPdXRwdXQzMTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxNiIgdHlwZT0idG5zOlBvcnRUeXBlMzE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxNiIgYmluZGluZz0idG5zOkJpbmRpbmczMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE3IiBuYW1lPSJJbnB1dDMxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTciIG5hbWU9Ik91dHB1dDMxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTgiIG5hbWU9IklucHV0MzE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxOCIgbmFtZT0iT3V0cHV0MzE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTgiIHR5cGU9InRuczpQb3J0VHlwZTMxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxOSIgbmFtZT0iSW5wdXQzMTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE5IiBuYW1lPSJPdXRwdXQzMTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxOSIgdHlwZT0idG5zOlBvcnRUeXBlMzE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxOSIgYmluZGluZz0idG5zOkJpbmRpbmczMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIwIiBuYW1lPSJJbnB1dDMyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjAiIG5hbWU9Ik91dHB1dDMyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjEiIG5hbWU9IklucHV0MzIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMSIgbmFtZT0iT3V0cHV0MzIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjEiIHR5cGU9InRuczpQb3J0VHlwZTMyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyMiIgbmFtZT0iSW5wdXQzMjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIyIiBuYW1lPSJPdXRwdXQzMjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyMiIgdHlwZT0idG5zOlBvcnRUeXBlMzIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyMiIgYmluZGluZz0idG5zOkJpbmRpbmczMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIzIiBuYW1lPSJJbnB1dDMyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjMiIG5hbWU9Ik91dHB1dDMyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjQiIG5hbWU9IklucHV0MzI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNCIgbmFtZT0iT3V0cHV0MzI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjQiIHR5cGU9InRuczpQb3J0VHlwZTMyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNSIgbmFtZT0iSW5wdXQzMjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI1IiBuYW1lPSJPdXRwdXQzMjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNSIgdHlwZT0idG5zOlBvcnRUeXBlMzI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNSIgYmluZGluZz0idG5zOkJpbmRpbmczMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI2IiBuYW1lPSJJbnB1dDMyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjYiIG5hbWU9Ik91dHB1dDMyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjciIG5hbWU9IklucHV0MzI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNyIgbmFtZT0iT3V0cHV0MzI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjciIHR5cGU9InRuczpQb3J0VHlwZTMyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjciIGJpbmRpbmc9InRuczpCaW5kaW5nMzI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyOCIgbmFtZT0iSW5wdXQzMjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI4IiBuYW1lPSJPdXRwdXQzMjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyOCIgdHlwZT0idG5zOlBvcnRUeXBlMzI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyOCIgYmluZGluZz0idG5zOkJpbmRpbmczMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI5IiBuYW1lPSJJbnB1dDMyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjkiIG5hbWU9Ik91dHB1dDMyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzAiIG5hbWU9IklucHV0MzMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMCIgbmFtZT0iT3V0cHV0MzMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzAiIHR5cGU9InRuczpQb3J0VHlwZTMzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMSIgbmFtZT0iSW5wdXQzMzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMxIiBuYW1lPSJPdXRwdXQzMzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMSIgdHlwZT0idG5zOlBvcnRUeXBlMzMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMSIgYmluZGluZz0idG5zOkJpbmRpbmczMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMyIiBuYW1lPSJJbnB1dDMzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzIiIG5hbWU9Ik91dHB1dDMzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzMiIG5hbWU9IklucHV0MzMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMyIgbmFtZT0iT3V0cHV0MzMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzMiIHR5cGU9InRuczpQb3J0VHlwZTMzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNCIgbmFtZT0iSW5wdXQzMzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM0IiBuYW1lPSJPdXRwdXQzMzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNCIgdHlwZT0idG5zOlBvcnRUeXBlMzM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNCIgYmluZGluZz0idG5zOkJpbmRpbmczMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM1IiBuYW1lPSJJbnB1dDMzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzUiIG5hbWU9Ik91dHB1dDMzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzYiIG5hbWU9IklucHV0MzM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzNiIgbmFtZT0iT3V0cHV0MzM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzYiIHR5cGU9InRuczpQb3J0VHlwZTMzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNyIgbmFtZT0iSW5wdXQzMzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM3IiBuYW1lPSJPdXRwdXQzMzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNyIgdHlwZT0idG5zOlBvcnRUeXBlMzM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNyIgYmluZGluZz0idG5zOkJpbmRpbmczMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM4IiBuYW1lPSJJbnB1dDMzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzgiIG5hbWU9Ik91dHB1dDMzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzkiIG5hbWU9IklucHV0MzM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzOSIgbmFtZT0iT3V0cHV0MzM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzkiIHR5cGU9InRuczpQb3J0VHlwZTMzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MCIgbmFtZT0iSW5wdXQzNDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQwIiBuYW1lPSJPdXRwdXQzNDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MCIgdHlwZT0idG5zOlBvcnRUeXBlMzQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MCIgYmluZGluZz0idG5zOkJpbmRpbmczNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQxIiBuYW1lPSJJbnB1dDM0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDEiIG5hbWU9Ik91dHB1dDM0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDIiIG5hbWU9IklucHV0MzQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0MiIgbmFtZT0iT3V0cHV0MzQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDIiIHR5cGU9InRuczpQb3J0VHlwZTM0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MyIgbmFtZT0iSW5wdXQzNDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQzIiBuYW1lPSJPdXRwdXQzNDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MyIgdHlwZT0idG5zOlBvcnRUeXBlMzQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MyIgYmluZGluZz0idG5zOkJpbmRpbmczNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ0IiBuYW1lPSJJbnB1dDM0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDQiIG5hbWU9Ik91dHB1dDM0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDUiIG5hbWU9IklucHV0MzQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NSIgbmFtZT0iT3V0cHV0MzQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDUiIHR5cGU9InRuczpQb3J0VHlwZTM0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0NiIgbmFtZT0iSW5wdXQzNDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ2IiBuYW1lPSJPdXRwdXQzNDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0NiIgdHlwZT0idG5zOlBvcnRUeXBlMzQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0NiIgYmluZGluZz0idG5zOkJpbmRpbmczNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ3IiBuYW1lPSJJbnB1dDM0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDciIG5hbWU9Ik91dHB1dDM0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDgiIG5hbWU9IklucHV0MzQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0OCIgbmFtZT0iT3V0cHV0MzQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDgiIHR5cGU9InRuczpQb3J0VHlwZTM0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0OSIgbmFtZT0iSW5wdXQzNDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ5IiBuYW1lPSJPdXRwdXQzNDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0OSIgdHlwZT0idG5zOlBvcnRUeXBlMzQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0OSIgYmluZGluZz0idG5zOkJpbmRpbmczNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUwIiBuYW1lPSJJbnB1dDM1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTAiIG5hbWU9Ik91dHB1dDM1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTEiIG5hbWU9IklucHV0MzUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MSIgbmFtZT0iT3V0cHV0MzUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTEiIHR5cGU9InRuczpQb3J0VHlwZTM1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1MiIgbmFtZT0iSW5wdXQzNTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUyIiBuYW1lPSJPdXRwdXQzNTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1MiIgdHlwZT0idG5zOlBvcnRUeXBlMzUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1MiIgYmluZGluZz0idG5zOkJpbmRpbmczNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUzIiBuYW1lPSJJbnB1dDM1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTMiIG5hbWU9Ik91dHB1dDM1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTQiIG5hbWU9IklucHV0MzU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NCIgbmFtZT0iT3V0cHV0MzU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTQiIHR5cGU9InRuczpQb3J0VHlwZTM1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NSIgbmFtZT0iSW5wdXQzNTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU1IiBuYW1lPSJPdXRwdXQzNTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NSIgdHlwZT0idG5zOlBvcnRUeXBlMzU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NSIgYmluZGluZz0idG5zOkJpbmRpbmczNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU2IiBuYW1lPSJJbnB1dDM1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTYiIG5hbWU9Ik91dHB1dDM1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTciIG5hbWU9IklucHV0MzU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NyIgbmFtZT0iT3V0cHV0MzU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTciIHR5cGU9InRuczpQb3J0VHlwZTM1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTciIGJpbmRpbmc9InRuczpCaW5kaW5nMzU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1OCIgbmFtZT0iSW5wdXQzNTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU4IiBuYW1lPSJPdXRwdXQzNTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1OCIgdHlwZT0idG5zOlBvcnRUeXBlMzU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1OCIgYmluZGluZz0idG5zOkJpbmRpbmczNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU5IiBuYW1lPSJJbnB1dDM1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTkiIG5hbWU9Ik91dHB1dDM1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjAiIG5hbWU9IklucHV0MzYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MCIgbmFtZT0iT3V0cHV0MzYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjAiIHR5cGU9InRuczpQb3J0VHlwZTM2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MSIgbmFtZT0iSW5wdXQzNjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYxIiBuYW1lPSJPdXRwdXQzNjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MSIgdHlwZT0idG5zOlBvcnRUeXBlMzYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MSIgYmluZGluZz0idG5zOkJpbmRpbmczNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYyIiBuYW1lPSJJbnB1dDM2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjIiIG5hbWU9Ik91dHB1dDM2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjMiIG5hbWU9IklucHV0MzYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MyIgbmFtZT0iT3V0cHV0MzYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjMiIHR5cGU9InRuczpQb3J0VHlwZTM2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NCIgbmFtZT0iSW5wdXQzNjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY0IiBuYW1lPSJPdXRwdXQzNjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NCIgdHlwZT0idG5zOlBvcnRUeXBlMzY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NCIgYmluZGluZz0idG5zOkJpbmRpbmczNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY1IiBuYW1lPSJJbnB1dDM2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjUiIG5hbWU9Ik91dHB1dDM2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjYiIG5hbWU9IklucHV0MzY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2NiIgbmFtZT0iT3V0cHV0MzY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjYiIHR5cGU9InRuczpQb3J0VHlwZTM2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NyIgbmFtZT0iSW5wdXQzNjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY3IiBuYW1lPSJPdXRwdXQzNjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NyIgdHlwZT0idG5zOlBvcnRUeXBlMzY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NyIgYmluZGluZz0idG5zOkJpbmRpbmczNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY4IiBuYW1lPSJJbnB1dDM2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjgiIG5hbWU9Ik91dHB1dDM2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjkiIG5hbWU9IklucHV0MzY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2OSIgbmFtZT0iT3V0cHV0MzY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjkiIHR5cGU9InRuczpQb3J0VHlwZTM2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MCIgbmFtZT0iSW5wdXQzNzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzcwIiBuYW1lPSJPdXRwdXQzNzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MCIgdHlwZT0idG5zOlBvcnRUeXBlMzcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MCIgYmluZGluZz0idG5zOkJpbmRpbmczNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzcxIiBuYW1lPSJJbnB1dDM3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzEiIG5hbWU9Ik91dHB1dDM3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzIiIG5hbWU9IklucHV0MzcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3MiIgbmFtZT0iT3V0cHV0MzcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzIiIHR5cGU9InRuczpQb3J0VHlwZTM3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MyIgbmFtZT0iSW5wdXQzNzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzczIiBuYW1lPSJPdXRwdXQzNzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MyIgdHlwZT0idG5zOlBvcnRUeXBlMzczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MyIgYmluZGluZz0idG5zOkJpbmRpbmczNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc0IiBuYW1lPSJJbnB1dDM3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzQiIG5hbWU9Ik91dHB1dDM3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzUiIG5hbWU9IklucHV0Mzc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NSIgbmFtZT0iT3V0cHV0Mzc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzUiIHR5cGU9InRuczpQb3J0VHlwZTM3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3NiIgbmFtZT0iSW5wdXQzNzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc2IiBuYW1lPSJPdXRwdXQzNzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3NiIgdHlwZT0idG5zOlBvcnRUeXBlMzc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3NiIgYmluZGluZz0idG5zOkJpbmRpbmczNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc3IiBuYW1lPSJJbnB1dDM3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzciIG5hbWU9Ik91dHB1dDM3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzgiIG5hbWU9IklucHV0Mzc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3OCIgbmFtZT0iT3V0cHV0Mzc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzgiIHR5cGU9InRuczpQb3J0VHlwZTM3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3OSIgbmFtZT0iSW5wdXQzNzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc5IiBuYW1lPSJPdXRwdXQzNzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3OSIgdHlwZT0idG5zOlBvcnRUeXBlMzc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3OSIgYmluZGluZz0idG5zOkJpbmRpbmczNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgwIiBuYW1lPSJJbnB1dDM4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODAiIG5hbWU9Ik91dHB1dDM4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODEiIG5hbWU9IklucHV0MzgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MSIgbmFtZT0iT3V0cHV0MzgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODEiIHR5cGU9InRuczpQb3J0VHlwZTM4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4MiIgbmFtZT0iSW5wdXQzODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgyIiBuYW1lPSJPdXRwdXQzODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4MiIgdHlwZT0idG5zOlBvcnRUeXBlMzgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4MiIgYmluZGluZz0idG5zOkJpbmRpbmczODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgzIiBuYW1lPSJJbnB1dDM4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODMiIG5hbWU9Ik91dHB1dDM4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODQiIG5hbWU9IklucHV0Mzg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NCIgbmFtZT0iT3V0cHV0Mzg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODQiIHR5cGU9InRuczpQb3J0VHlwZTM4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NSIgbmFtZT0iSW5wdXQzODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg1IiBuYW1lPSJPdXRwdXQzODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NSIgdHlwZT0idG5zOlBvcnRUeXBlMzg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NSIgYmluZGluZz0idG5zOkJpbmRpbmczODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg2IiBuYW1lPSJJbnB1dDM4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODYiIG5hbWU9Ik91dHB1dDM4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODciIG5hbWU9IklucHV0Mzg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NyIgbmFtZT0iT3V0cHV0Mzg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODciIHR5cGU9InRuczpQb3J0VHlwZTM4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODciIGJpbmRpbmc9InRuczpCaW5kaW5nMzg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4OCIgbmFtZT0iSW5wdXQzODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg4IiBuYW1lPSJPdXRwdXQzODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4OCIgdHlwZT0idG5zOlBvcnRUeXBlMzg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4OCIgYmluZGluZz0idG5zOkJpbmRpbmczODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg5IiBuYW1lPSJJbnB1dDM4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODkiIG5hbWU9Ik91dHB1dDM4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTAiIG5hbWU9IklucHV0MzkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MCIgbmFtZT0iT3V0cHV0MzkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTAiIHR5cGU9InRuczpQb3J0VHlwZTM5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MSIgbmFtZT0iSW5wdXQzOTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkxIiBuYW1lPSJPdXRwdXQzOTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MSIgdHlwZT0idG5zOlBvcnRUeXBlMzkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MSIgYmluZGluZz0idG5zOkJpbmRpbmczOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkyIiBuYW1lPSJJbnB1dDM5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTIiIG5hbWU9Ik91dHB1dDM5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTMiIG5hbWU9IklucHV0MzkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MyIgbmFtZT0iT3V0cHV0MzkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTMiIHR5cGU9InRuczpQb3J0VHlwZTM5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NCIgbmFtZT0iSW5wdXQzOTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk0IiBuYW1lPSJPdXRwdXQzOTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NCIgdHlwZT0idG5zOlBvcnRUeXBlMzk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NCIgYmluZGluZz0idG5zOkJpbmRpbmczOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk1IiBuYW1lPSJJbnB1dDM5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTUiIG5hbWU9Ik91dHB1dDM5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTYiIG5hbWU9IklucHV0Mzk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5NiIgbmFtZT0iT3V0cHV0Mzk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTYiIHR5cGU9InRuczpQb3J0VHlwZTM5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NyIgbmFtZT0iSW5wdXQzOTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk3IiBuYW1lPSJPdXRwdXQzOTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NyIgdHlwZT0idG5zOlBvcnRUeXBlMzk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NyIgYmluZGluZz0idG5zOkJpbmRpbmczOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk4IiBuYW1lPSJJbnB1dDM5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTgiIG5hbWU9Ik91dHB1dDM5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTkiIG5hbWU9IklucHV0Mzk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5OSIgbmFtZT0iT3V0cHV0Mzk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTkiIHR5cGU9InRuczpQb3J0VHlwZTM5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMCIgbmFtZT0iSW5wdXQ0MDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAwIiBuYW1lPSJPdXRwdXQ0MDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMCIgdHlwZT0idG5zOlBvcnRUeXBlNDAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAxIiBuYW1lPSJJbnB1dDQwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDEiIG5hbWU9Ik91dHB1dDQwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDIiIG5hbWU9IklucHV0NDAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwMiIgbmFtZT0iT3V0cHV0NDAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDIiIHR5cGU9InRuczpQb3J0VHlwZTQwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMyIgbmFtZT0iSW5wdXQ0MDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAzIiBuYW1lPSJPdXRwdXQ0MDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMyIgdHlwZT0idG5zOlBvcnRUeXBlNDAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA0IiBuYW1lPSJJbnB1dDQwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDQiIG5hbWU9Ik91dHB1dDQwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDUiIG5hbWU9IklucHV0NDA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNSIgbmFtZT0iT3V0cHV0NDA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDUiIHR5cGU9InRuczpQb3J0VHlwZTQwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwNiIgbmFtZT0iSW5wdXQ0MDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA2IiBuYW1lPSJPdXRwdXQ0MDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwNiIgdHlwZT0idG5zOlBvcnRUeXBlNDA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA3IiBuYW1lPSJJbnB1dDQwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDciIG5hbWU9Ik91dHB1dDQwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDgiIG5hbWU9IklucHV0NDA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwOCIgbmFtZT0iT3V0cHV0NDA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDgiIHR5cGU9InRuczpQb3J0VHlwZTQwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwOSIgbmFtZT0iSW5wdXQ0MDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA5IiBuYW1lPSJPdXRwdXQ0MDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwOSIgdHlwZT0idG5zOlBvcnRUeXBlNDA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEwIiBuYW1lPSJJbnB1dDQxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTAiIG5hbWU9Ik91dHB1dDQxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTEiIG5hbWU9IklucHV0NDExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMSIgbmFtZT0iT3V0cHV0NDExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTEiIHR5cGU9InRuczpQb3J0VHlwZTQxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxMiIgbmFtZT0iSW5wdXQ0MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEyIiBuYW1lPSJPdXRwdXQ0MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxMiIgdHlwZT0idG5zOlBvcnRUeXBlNDEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEzIiBuYW1lPSJJbnB1dDQxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTMiIG5hbWU9Ik91dHB1dDQxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTQiIG5hbWU9IklucHV0NDE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNCIgbmFtZT0iT3V0cHV0NDE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTQiIHR5cGU9InRuczpQb3J0VHlwZTQxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNSIgbmFtZT0iSW5wdXQ0MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE1IiBuYW1lPSJPdXRwdXQ0MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNSIgdHlwZT0idG5zOlBvcnRUeXBlNDE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE2IiBuYW1lPSJJbnB1dDQxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTYiIG5hbWU9Ik91dHB1dDQxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTciIG5hbWU9IklucHV0NDE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNyIgbmFtZT0iT3V0cHV0NDE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTciIHR5cGU9InRuczpQb3J0VHlwZTQxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTciIGJpbmRpbmc9InRuczpCaW5kaW5nNDE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxOCIgbmFtZT0iSW5wdXQ0MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE4IiBuYW1lPSJPdXRwdXQ0MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxOCIgdHlwZT0idG5zOlBvcnRUeXBlNDE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE5IiBuYW1lPSJJbnB1dDQxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTkiIG5hbWU9Ik91dHB1dDQxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjAiIG5hbWU9IklucHV0NDIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMCIgbmFtZT0iT3V0cHV0NDIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjAiIHR5cGU9InRuczpQb3J0VHlwZTQyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMSIgbmFtZT0iSW5wdXQ0MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIxIiBuYW1lPSJPdXRwdXQ0MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMSIgdHlwZT0idG5zOlBvcnRUeXBlNDIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMSIgYmluZGluZz0idG5zOkJpbmRpbmc0MjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIyIiBuYW1lPSJJbnB1dDQyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjIiIG5hbWU9Ik91dHB1dDQyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjMiIG5hbWU9IklucHV0NDIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMyIgbmFtZT0iT3V0cHV0NDIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjMiIHR5cGU9InRuczpQb3J0VHlwZTQyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNCIgbmFtZT0iSW5wdXQ0MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI0IiBuYW1lPSJPdXRwdXQ0MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNCIgdHlwZT0idG5zOlBvcnRUeXBlNDI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNCIgYmluZGluZz0idG5zOkJpbmRpbmc0MjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI1IiBuYW1lPSJJbnB1dDQyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjUiIG5hbWU9Ik91dHB1dDQyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjYiIG5hbWU9IklucHV0NDI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyNiIgbmFtZT0iT3V0cHV0NDI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjYiIHR5cGU9InRuczpQb3J0VHlwZTQyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNyIgbmFtZT0iSW5wdXQ0MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI3IiBuYW1lPSJPdXRwdXQ0MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNyIgdHlwZT0idG5zOlBvcnRUeXBlNDI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNyIgYmluZGluZz0idG5zOkJpbmRpbmc0MjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI4IiBuYW1lPSJJbnB1dDQyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjgiIG5hbWU9Ik91dHB1dDQyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjkiIG5hbWU9IklucHV0NDI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyOSIgbmFtZT0iT3V0cHV0NDI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjkiIHR5cGU9InRuczpQb3J0VHlwZTQyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMCIgbmFtZT0iSW5wdXQ0MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMwIiBuYW1lPSJPdXRwdXQ0MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMCIgdHlwZT0idG5zOlBvcnRUeXBlNDMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMxIiBuYW1lPSJJbnB1dDQzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzEiIG5hbWU9Ik91dHB1dDQzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzIiIG5hbWU9IklucHV0NDMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzMiIgbmFtZT0iT3V0cHV0NDMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzIiIHR5cGU9InRuczpQb3J0VHlwZTQzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMyIgbmFtZT0iSW5wdXQ0MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMzIiBuYW1lPSJPdXRwdXQ0MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMyIgdHlwZT0idG5zOlBvcnRUeXBlNDMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM0IiBuYW1lPSJJbnB1dDQzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzQiIG5hbWU9Ik91dHB1dDQzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzUiIG5hbWU9IklucHV0NDM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNSIgbmFtZT0iT3V0cHV0NDM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzUiIHR5cGU9InRuczpQb3J0VHlwZTQzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzNiIgbmFtZT0iSW5wdXQ0MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM2IiBuYW1lPSJPdXRwdXQ0MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzNiIgdHlwZT0idG5zOlBvcnRUeXBlNDM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM3IiBuYW1lPSJJbnB1dDQzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzciIG5hbWU9Ik91dHB1dDQzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzgiIG5hbWU9IklucHV0NDM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzOCIgbmFtZT0iT3V0cHV0NDM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzgiIHR5cGU9InRuczpQb3J0VHlwZTQzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzOSIgbmFtZT0iSW5wdXQ0MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM5IiBuYW1lPSJPdXRwdXQ0MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzOSIgdHlwZT0idG5zOlBvcnRUeXBlNDM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQwIiBuYW1lPSJJbnB1dDQ0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDAiIG5hbWU9Ik91dHB1dDQ0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDEiIG5hbWU9IklucHV0NDQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MSIgbmFtZT0iT3V0cHV0NDQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDEiIHR5cGU9InRuczpQb3J0VHlwZTQ0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0MiIgbmFtZT0iSW5wdXQ0NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQyIiBuYW1lPSJPdXRwdXQ0NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0MiIgdHlwZT0idG5zOlBvcnRUeXBlNDQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQzIiBuYW1lPSJJbnB1dDQ0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDMiIG5hbWU9Ik91dHB1dDQ0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDQiIG5hbWU9IklucHV0NDQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NCIgbmFtZT0iT3V0cHV0NDQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDQiIHR5cGU9InRuczpQb3J0VHlwZTQ0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NSIgbmFtZT0iSW5wdXQ0NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ1IiBuYW1lPSJPdXRwdXQ0NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NSIgdHlwZT0idG5zOlBvcnRUeXBlNDQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ2IiBuYW1lPSJJbnB1dDQ0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDYiIG5hbWU9Ik91dHB1dDQ0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDciIG5hbWU9IklucHV0NDQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NyIgbmFtZT0iT3V0cHV0NDQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDciIHR5cGU9InRuczpQb3J0VHlwZTQ0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0OCIgbmFtZT0iSW5wdXQ0NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ4IiBuYW1lPSJPdXRwdXQ0NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0OCIgdHlwZT0idG5zOlBvcnRUeXBlNDQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ5IiBuYW1lPSJJbnB1dDQ0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDkiIG5hbWU9Ik91dHB1dDQ0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTAiIG5hbWU9IklucHV0NDUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MCIgbmFtZT0iT3V0cHV0NDUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTAiIHR5cGU9InRuczpQb3J0VHlwZTQ1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MSIgbmFtZT0iSW5wdXQ0NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUxIiBuYW1lPSJPdXRwdXQ0NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MSIgdHlwZT0idG5zOlBvcnRUeXBlNDUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUyIiBuYW1lPSJJbnB1dDQ1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTIiIG5hbWU9Ik91dHB1dDQ1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTMiIG5hbWU9IklucHV0NDUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MyIgbmFtZT0iT3V0cHV0NDUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTMiIHR5cGU9InRuczpQb3J0VHlwZTQ1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NCIgbmFtZT0iSW5wdXQ0NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU0IiBuYW1lPSJPdXRwdXQ0NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NCIgdHlwZT0idG5zOlBvcnRUeXBlNDU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU1IiBuYW1lPSJJbnB1dDQ1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTUiIG5hbWU9Ik91dHB1dDQ1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTYiIG5hbWU9IklucHV0NDU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1NiIgbmFtZT0iT3V0cHV0NDU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTYiIHR5cGU9InRuczpQb3J0VHlwZTQ1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NyIgbmFtZT0iSW5wdXQ0NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU3IiBuYW1lPSJPdXRwdXQ0NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NyIgdHlwZT0idG5zOlBvcnRUeXBlNDU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU4IiBuYW1lPSJJbnB1dDQ1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTgiIG5hbWU9Ik91dHB1dDQ1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTkiIG5hbWU9IklucHV0NDU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1OSIgbmFtZT0iT3V0cHV0NDU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTkiIHR5cGU9InRuczpQb3J0VHlwZTQ1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MCIgbmFtZT0iSW5wdXQ0NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYwIiBuYW1lPSJPdXRwdXQ0NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MCIgdHlwZT0idG5zOlBvcnRUeXBlNDYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MCIgYmluZGluZz0idG5zOkJpbmRpbmc0NjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYxIiBuYW1lPSJJbnB1dDQ2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjEiIG5hbWU9Ik91dHB1dDQ2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjIiIG5hbWU9IklucHV0NDYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2MiIgbmFtZT0iT3V0cHV0NDYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjIiIHR5cGU9InRuczpQb3J0VHlwZTQ2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MyIgbmFtZT0iSW5wdXQ0NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYzIiBuYW1lPSJPdXRwdXQ0NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MyIgdHlwZT0idG5zOlBvcnRUeXBlNDYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MyIgYmluZGluZz0idG5zOkJpbmRpbmc0NjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY0IiBuYW1lPSJJbnB1dDQ2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjQiIG5hbWU9Ik91dHB1dDQ2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjUiIG5hbWU9IklucHV0NDY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NSIgbmFtZT0iT3V0cHV0NDY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjUiIHR5cGU9InRuczpQb3J0VHlwZTQ2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2NiIgbmFtZT0iSW5wdXQ0NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY2IiBuYW1lPSJPdXRwdXQ0NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2NiIgdHlwZT0idG5zOlBvcnRUeXBlNDY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY3IiBuYW1lPSJJbnB1dDQ2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjciIG5hbWU9Ik91dHB1dDQ2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjgiIG5hbWU9IklucHV0NDY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2OCIgbmFtZT0iT3V0cHV0NDY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjgiIHR5cGU9InRuczpQb3J0VHlwZTQ2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2OSIgbmFtZT0iSW5wdXQ0NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY5IiBuYW1lPSJPdXRwdXQ0NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2OSIgdHlwZT0idG5zOlBvcnRUeXBlNDY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2OSIgYmluZGluZz0idG5zOkJpbmRpbmc0NjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDcwIiBuYW1lPSJJbnB1dDQ3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzAiIG5hbWU9Ik91dHB1dDQ3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzEiIG5hbWU9IklucHV0NDcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MSIgbmFtZT0iT3V0cHV0NDcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzEiIHR5cGU9InRuczpQb3J0VHlwZTQ3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3MiIgbmFtZT0iSW5wdXQ0NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDcyIiBuYW1lPSJPdXRwdXQ0NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3MiIgdHlwZT0idG5zOlBvcnRUeXBlNDcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDczIiBuYW1lPSJJbnB1dDQ3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzMiIG5hbWU9Ik91dHB1dDQ3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDczIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzQiIG5hbWU9IklucHV0NDc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NCIgbmFtZT0iT3V0cHV0NDc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzQiIHR5cGU9InRuczpQb3J0VHlwZTQ3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NSIgbmFtZT0iSW5wdXQ0NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc1IiBuYW1lPSJPdXRwdXQ0NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NSIgdHlwZT0idG5zOlBvcnRUeXBlNDc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc2IiBuYW1lPSJJbnB1dDQ3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzYiIG5hbWU9Ik91dHB1dDQ3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzciIG5hbWU9IklucHV0NDc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NyIgbmFtZT0iT3V0cHV0NDc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzciIHR5cGU9InRuczpQb3J0VHlwZTQ3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNDc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3OCIgbmFtZT0iSW5wdXQ0NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc4IiBuYW1lPSJPdXRwdXQ0NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3OCIgdHlwZT0idG5zOlBvcnRUeXBlNDc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc5IiBuYW1lPSJJbnB1dDQ3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzkiIG5hbWU9Ik91dHB1dDQ3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODAiIG5hbWU9IklucHV0NDgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MCIgbmFtZT0iT3V0cHV0NDgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODAiIHR5cGU9InRuczpQb3J0VHlwZTQ4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MSIgbmFtZT0iSW5wdXQ0ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgxIiBuYW1lPSJPdXRwdXQ0ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MSIgdHlwZT0idG5zOlBvcnRUeXBlNDgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MSIgYmluZGluZz0idG5zOkJpbmRpbmc0ODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgyIiBuYW1lPSJJbnB1dDQ4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODIiIG5hbWU9Ik91dHB1dDQ4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODMiIG5hbWU9IklucHV0NDgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MyIgbmFtZT0iT3V0cHV0NDgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODMiIHR5cGU9InRuczpQb3J0VHlwZTQ4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NCIgbmFtZT0iSW5wdXQ0ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg0IiBuYW1lPSJPdXRwdXQ0ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NCIgdHlwZT0idG5zOlBvcnRUeXBlNDg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NCIgYmluZGluZz0idG5zOkJpbmRpbmc0ODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg1IiBuYW1lPSJJbnB1dDQ4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODUiIG5hbWU9Ik91dHB1dDQ4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODYiIG5hbWU9IklucHV0NDg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4NiIgbmFtZT0iT3V0cHV0NDg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODYiIHR5cGU9InRuczpQb3J0VHlwZTQ4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NyIgbmFtZT0iSW5wdXQ0ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg3IiBuYW1lPSJPdXRwdXQ0ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NyIgdHlwZT0idG5zOlBvcnRUeXBlNDg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NyIgYmluZGluZz0idG5zOkJpbmRpbmc0ODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg4IiBuYW1lPSJJbnB1dDQ4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODgiIG5hbWU9Ik91dHB1dDQ4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODkiIG5hbWU9IklucHV0NDg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4OSIgbmFtZT0iT3V0cHV0NDg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODkiIHR5cGU9InRuczpQb3J0VHlwZTQ4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MCIgbmFtZT0iSW5wdXQ0OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkwIiBuYW1lPSJPdXRwdXQ0OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MCIgdHlwZT0idG5zOlBvcnRUeXBlNDkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MCIgYmluZGluZz0idG5zOkJpbmRpbmc0OTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkxIiBuYW1lPSJJbnB1dDQ5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTEiIG5hbWU9Ik91dHB1dDQ5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTIiIG5hbWU9IklucHV0NDkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5MiIgbmFtZT0iT3V0cHV0NDkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTIiIHR5cGU9InRuczpQb3J0VHlwZTQ5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MyIgbmFtZT0iSW5wdXQ0OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkzIiBuYW1lPSJPdXRwdXQ0OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MyIgdHlwZT0idG5zOlBvcnRUeXBlNDkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MyIgYmluZGluZz0idG5zOkJpbmRpbmc0OTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk0IiBuYW1lPSJJbnB1dDQ5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTQiIG5hbWU9Ik91dHB1dDQ5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTUiIG5hbWU9IklucHV0NDk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NSIgbmFtZT0iT3V0cHV0NDk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTUiIHR5cGU9InRuczpQb3J0VHlwZTQ5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5NiIgbmFtZT0iSW5wdXQ0OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk2IiBuYW1lPSJPdXRwdXQ0OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5NiIgdHlwZT0idG5zOlBvcnRUeXBlNDk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5NiIgYmluZGluZz0idG5zOkJpbmRpbmc0OTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk3IiBuYW1lPSJJbnB1dDQ5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTciIG5hbWU9Ik91dHB1dDQ5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTgiIG5hbWU9IklucHV0NDk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5OCIgbmFtZT0iT3V0cHV0NDk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTgiIHR5cGU9InRuczpQb3J0VHlwZTQ5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5OSIgbmFtZT0iSW5wdXQ0OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk5IiBuYW1lPSJPdXRwdXQ0OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5OSIgdHlwZT0idG5zOlBvcnRUeXBlNDk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5OSIgYmluZGluZz0idG5zOkJpbmRpbmc0OTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAwIiBuYW1lPSJJbnB1dDUwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDAiIG5hbWU9Ik91dHB1dDUwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDEiIG5hbWU9IklucHV0NTAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwMSIgbmFtZT0iT3V0cHV0NTAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDEiIHR5cGU9InRuczpQb3J0VHlwZTUwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwMiIgbmFtZT0iSW5wdXQ1MDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAyIiBuYW1lPSJPdXRwdXQ1MDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwMiIgdHlwZT0idG5zOlBvcnRUeXBlNTAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwMiIgYmluZGluZz0idG5zOkJpbmRpbmc1MDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAzIiBuYW1lPSJJbnB1dDUwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDMiIG5hbWU9Ik91dHB1dDUwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDQiIG5hbWU9IklucHV0NTA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwNCIgbmFtZT0iT3V0cHV0NTA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDQiIHR5cGU9InRuczpQb3J0VHlwZTUwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwNSIgbmFtZT0iSW5wdXQ1MDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTA1IiBuYW1lPSJPdXRwdXQ1MDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwNSIgdHlwZT0idG5zOlBvcnRUeXBlNTA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwNSIgYmluZGluZz0idG5zOkJpbmRpbmc1MDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTA2IiBuYW1lPSJJbnB1dDUwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDYiIG5hbWU9Ik91dHB1dDUwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTA2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDciIG5hbWU9IklucHV0NTA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwNyIgbmFtZT0iT3V0cHV0NTA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDciIHR5cGU9InRuczpQb3J0VHlwZTUwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDciIGJpbmRpbmc9InRuczpCaW5kaW5nNTA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwOCIgbmFtZT0iSW5wdXQ1MDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTA4IiBuYW1lPSJPdXRwdXQ1MDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwOCIgdHlwZT0idG5zOlBvcnRUeXBlNTA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwOCIgYmluZGluZz0idG5zOkJpbmRpbmc1MDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTA5IiBuYW1lPSJJbnB1dDUwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDkiIG5hbWU9Ik91dHB1dDUwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTA5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTAiIG5hbWU9IklucHV0NTEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxMCIgbmFtZT0iT3V0cHV0NTEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTAiIHR5cGU9InRuczpQb3J0VHlwZTUxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxMSIgbmFtZT0iSW5wdXQ1MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTExIiBuYW1lPSJPdXRwdXQ1MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxMSIgdHlwZT0idG5zOlBvcnRUeXBlNTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxMSIgYmluZGluZz0idG5zOkJpbmRpbmc1MTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTEyIiBuYW1lPSJJbnB1dDUxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTIiIG5hbWU9Ik91dHB1dDUxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTEyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTMiIG5hbWU9IklucHV0NTEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxMyIgbmFtZT0iT3V0cHV0NTEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTMiIHR5cGU9InRuczpQb3J0VHlwZTUxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxNCIgbmFtZT0iSW5wdXQ1MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTE0IiBuYW1lPSJPdXRwdXQ1MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxNCIgdHlwZT0idG5zOlBvcnRUeXBlNTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxNCIgYmluZGluZz0idG5zOkJpbmRpbmc1MTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTE1IiBuYW1lPSJJbnB1dDUxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTUiIG5hbWU9Ik91dHB1dDUxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTE1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTYiIG5hbWU9IklucHV0NTE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxNiIgbmFtZT0iT3V0cHV0NTE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTYiIHR5cGU9InRuczpQb3J0VHlwZTUxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxNyIgbmFtZT0iSW5wdXQ1MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTE3IiBuYW1lPSJPdXRwdXQ1MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxNyIgdHlwZT0idG5zOlBvcnRUeXBlNTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxNyIgYmluZGluZz0idG5zOkJpbmRpbmc1MTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTE4IiBuYW1lPSJJbnB1dDUxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTgiIG5hbWU9Ik91dHB1dDUxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTE4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTkiIG5hbWU9IklucHV0NTE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxOSIgbmFtZT0iT3V0cHV0NTE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTkiIHR5cGU9InRuczpQb3J0VHlwZTUxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyMCIgbmFtZT0iSW5wdXQ1MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIwIiBuYW1lPSJPdXRwdXQ1MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyMCIgdHlwZT0idG5zOlBvcnRUeXBlNTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyMCIgYmluZGluZz0idG5zOkJpbmRpbmc1MjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIxIiBuYW1lPSJJbnB1dDUyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjEiIG5hbWU9Ik91dHB1dDUyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTIxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjIiIG5hbWU9IklucHV0NTIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyMiIgbmFtZT0iT3V0cHV0NTIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjIiIHR5cGU9InRuczpQb3J0VHlwZTUyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyMyIgbmFtZT0iSW5wdXQ1MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIzIiBuYW1lPSJPdXRwdXQ1MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyMyIgdHlwZT0idG5zOlBvcnRUeXBlNTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyMyIgYmluZGluZz0idG5zOkJpbmRpbmc1MjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTI0IiBuYW1lPSJJbnB1dDUyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjQiIG5hbWU9Ik91dHB1dDUyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTI0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjUiIG5hbWU9IklucHV0NTI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyNSIgbmFtZT0iT3V0cHV0NTI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjUiIHR5cGU9InRuczpQb3J0VHlwZTUyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyNiIgbmFtZT0iSW5wdXQ1MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTI2IiBuYW1lPSJPdXRwdXQ1MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyNiIgdHlwZT0idG5zOlBvcnRUeXBlNTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyNiIgYmluZGluZz0idG5zOkJpbmRpbmc1MjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTI3IiBuYW1lPSJJbnB1dDUyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjciIG5hbWU9Ik91dHB1dDUyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTI3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjgiIG5hbWU9IklucHV0NTI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyOCIgbmFtZT0iT3V0cHV0NTI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjgiIHR5cGU9InRuczpQb3J0VHlwZTUyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyOSIgbmFtZT0iSW5wdXQ1MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTI5IiBuYW1lPSJPdXRwdXQ1MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyOSIgdHlwZT0idG5zOlBvcnRUeXBlNTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyOSIgYmluZGluZz0idG5zOkJpbmRpbmc1MjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMwIiBuYW1lPSJJbnB1dDUzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzAiIG5hbWU9Ik91dHB1dDUzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzEiIG5hbWU9IklucHV0NTMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzMSIgbmFtZT0iT3V0cHV0NTMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzEiIHR5cGU9InRuczpQb3J0VHlwZTUzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzMiIgbmFtZT0iSW5wdXQ1MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMyIiBuYW1lPSJPdXRwdXQ1MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzMiIgdHlwZT0idG5zOlBvcnRUeXBlNTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzMiIgYmluZGluZz0idG5zOkJpbmRpbmc1MzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMzIiBuYW1lPSJJbnB1dDUzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzMiIG5hbWU9Ik91dHB1dDUzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzQiIG5hbWU9IklucHV0NTM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzNCIgbmFtZT0iT3V0cHV0NTM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzQiIHR5cGU9InRuczpQb3J0VHlwZTUzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzNSIgbmFtZT0iSW5wdXQ1MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTM1IiBuYW1lPSJPdXRwdXQ1MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzNSIgdHlwZT0idG5zOlBvcnRUeXBlNTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzNSIgYmluZGluZz0idG5zOkJpbmRpbmc1MzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTM2IiBuYW1lPSJJbnB1dDUzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzYiIG5hbWU9Ik91dHB1dDUzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTM2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzciIG5hbWU9IklucHV0NTM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzNyIgbmFtZT0iT3V0cHV0NTM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzciIHR5cGU9InRuczpQb3J0VHlwZTUzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzciIGJpbmRpbmc9InRuczpCaW5kaW5nNTM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzOCIgbmFtZT0iSW5wdXQ1MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTM4IiBuYW1lPSJPdXRwdXQ1MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzOCIgdHlwZT0idG5zOlBvcnRUeXBlNTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzOCIgYmluZGluZz0idG5zOkJpbmRpbmc1MzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTM5IiBuYW1lPSJJbnB1dDUzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzkiIG5hbWU9Ik91dHB1dDUzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTM5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDAiIG5hbWU9IklucHV0NTQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0MCIgbmFtZT0iT3V0cHV0NTQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDAiIHR5cGU9InRuczpQb3J0VHlwZTU0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0MSIgbmFtZT0iSW5wdXQ1NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQxIiBuYW1lPSJPdXRwdXQ1NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0MSIgdHlwZT0idG5zOlBvcnRUeXBlNTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0MSIgYmluZGluZz0idG5zOkJpbmRpbmc1NDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQyIiBuYW1lPSJJbnB1dDU0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDIiIG5hbWU9Ik91dHB1dDU0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDMiIG5hbWU9IklucHV0NTQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0MyIgbmFtZT0iT3V0cHV0NTQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDMiIHR5cGU9InRuczpQb3J0VHlwZTU0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0NCIgbmFtZT0iSW5wdXQ1NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQ0IiBuYW1lPSJPdXRwdXQ1NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0NCIgdHlwZT0idG5zOlBvcnRUeXBlNTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQ1IiBuYW1lPSJJbnB1dDU0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDUiIG5hbWU9Ik91dHB1dDU0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDYiIG5hbWU9IklucHV0NTQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0NiIgbmFtZT0iT3V0cHV0NTQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDYiIHR5cGU9InRuczpQb3J0VHlwZTU0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0NyIgbmFtZT0iSW5wdXQ1NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQ3IiBuYW1lPSJPdXRwdXQ1NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0NyIgdHlwZT0idG5zOlBvcnRUeXBlNTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQ4IiBuYW1lPSJJbnB1dDU0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDgiIG5hbWU9Ik91dHB1dDU0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDkiIG5hbWU9IklucHV0NTQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0OSIgbmFtZT0iT3V0cHV0NTQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDkiIHR5cGU9InRuczpQb3J0VHlwZTU0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1MCIgbmFtZT0iSW5wdXQ1NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUwIiBuYW1lPSJPdXRwdXQ1NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1MCIgdHlwZT0idG5zOlBvcnRUeXBlNTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1MCIgYmluZGluZz0idG5zOkJpbmRpbmc1NTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUxIiBuYW1lPSJJbnB1dDU1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTEiIG5hbWU9Ik91dHB1dDU1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTIiIG5hbWU9IklucHV0NTUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1MiIgbmFtZT0iT3V0cHV0NTUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTIiIHR5cGU9InRuczpQb3J0VHlwZTU1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1MyIgbmFtZT0iSW5wdXQ1NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUzIiBuYW1lPSJPdXRwdXQ1NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1MyIgdHlwZT0idG5zOlBvcnRUeXBlNTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1MyIgYmluZGluZz0idG5zOkJpbmRpbmc1NTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTU0IiBuYW1lPSJJbnB1dDU1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTQiIG5hbWU9Ik91dHB1dDU1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTUiIG5hbWU9IklucHV0NTU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1NSIgbmFtZT0iT3V0cHV0NTU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTUiIHR5cGU9InRuczpQb3J0VHlwZTU1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1NiIgbmFtZT0iSW5wdXQ1NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTU2IiBuYW1lPSJPdXRwdXQ1NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1NiIgdHlwZT0idG5zOlBvcnRUeXBlNTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1NiIgYmluZGluZz0idG5zOkJpbmRpbmc1NTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTU3IiBuYW1lPSJJbnB1dDU1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTciIG5hbWU9Ik91dHB1dDU1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTgiIG5hbWU9IklucHV0NTU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1OCIgbmFtZT0iT3V0cHV0NTU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTgiIHR5cGU9InRuczpQb3J0VHlwZTU1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1OSIgbmFtZT0iSW5wdXQ1NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTU5IiBuYW1lPSJPdXRwdXQ1NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1OSIgdHlwZT0idG5zOlBvcnRUeXBlNTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1OSIgYmluZGluZz0idG5zOkJpbmRpbmc1NTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYwIiBuYW1lPSJJbnB1dDU2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjAiIG5hbWU9Ik91dHB1dDU2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjEiIG5hbWU9IklucHV0NTYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2MSIgbmFtZT0iT3V0cHV0NTYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjEiIHR5cGU9InRuczpQb3J0VHlwZTU2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2MiIgbmFtZT0iSW5wdXQ1NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYyIiBuYW1lPSJPdXRwdXQ1NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2MiIgdHlwZT0idG5zOlBvcnRUeXBlNTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2MiIgYmluZGluZz0idG5zOkJpbmRpbmc1NjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYzIiBuYW1lPSJJbnB1dDU2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjMiIG5hbWU9Ik91dHB1dDU2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjQiIG5hbWU9IklucHV0NTY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2NCIgbmFtZT0iT3V0cHV0NTY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjQiIHR5cGU9InRuczpQb3J0VHlwZTU2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2NSIgbmFtZT0iSW5wdXQ1NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTY1IiBuYW1lPSJPdXRwdXQ1NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2NSIgdHlwZT0idG5zOlBvcnRUeXBlNTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2NSIgYmluZGluZz0idG5zOkJpbmRpbmc1NjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTY2IiBuYW1lPSJJbnB1dDU2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjYiIG5hbWU9Ik91dHB1dDU2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjciIG5hbWU9IklucHV0NTY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2NyIgbmFtZT0iT3V0cHV0NTY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjciIHR5cGU9InRuczpQb3J0VHlwZTU2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNTY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2OCIgbmFtZT0iSW5wdXQ1NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTY4IiBuYW1lPSJPdXRwdXQ1NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2OCIgdHlwZT0idG5zOlBvcnRUeXBlNTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2OCIgYmluZGluZz0idG5zOkJpbmRpbmc1NjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTY5IiBuYW1lPSJJbnB1dDU2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjkiIG5hbWU9Ik91dHB1dDU2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzAiIG5hbWU9IklucHV0NTcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3MCIgbmFtZT0iT3V0cHV0NTcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzAiIHR5cGU9InRuczpQb3J0VHlwZTU3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3MSIgbmFtZT0iSW5wdXQ1NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTcxIiBuYW1lPSJPdXRwdXQ1NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3MSIgdHlwZT0idG5zOlBvcnRUeXBlNTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3MSIgYmluZGluZz0idG5zOkJpbmRpbmc1NzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTcyIiBuYW1lPSJJbnB1dDU3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzIiIG5hbWU9Ik91dHB1dDU3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzMiIG5hbWU9IklucHV0NTczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3MyIgbmFtZT0iT3V0cHV0NTczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzMiIHR5cGU9InRuczpQb3J0VHlwZTU3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3NCIgbmFtZT0iSW5wdXQ1NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTc0IiBuYW1lPSJPdXRwdXQ1NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3NCIgdHlwZT0idG5zOlBvcnRUeXBlNTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTc1IiBuYW1lPSJJbnB1dDU3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzUiIG5hbWU9Ik91dHB1dDU3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzYiIG5hbWU9IklucHV0NTc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3NiIgbmFtZT0iT3V0cHV0NTc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzYiIHR5cGU9InRuczpQb3J0VHlwZTU3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3NyIgbmFtZT0iSW5wdXQ1NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTc3IiBuYW1lPSJPdXRwdXQ1NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3NyIgdHlwZT0idG5zOlBvcnRUeXBlNTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTc4IiBuYW1lPSJJbnB1dDU3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzgiIG5hbWU9Ik91dHB1dDU3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzkiIG5hbWU9IklucHV0NTc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3OSIgbmFtZT0iT3V0cHV0NTc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzkiIHR5cGU9InRuczpQb3J0VHlwZTU3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4MCIgbmFtZT0iSW5wdXQ1ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgwIiBuYW1lPSJPdXRwdXQ1ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4MCIgdHlwZT0idG5zOlBvcnRUeXBlNTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4MCIgYmluZGluZz0idG5zOkJpbmRpbmc1ODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgxIiBuYW1lPSJJbnB1dDU4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODEiIG5hbWU9Ik91dHB1dDU4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODIiIG5hbWU9IklucHV0NTgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4MiIgbmFtZT0iT3V0cHV0NTgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODIiIHR5cGU9InRuczpQb3J0VHlwZTU4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4MyIgbmFtZT0iSW5wdXQ1ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgzIiBuYW1lPSJPdXRwdXQ1ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4MyIgdHlwZT0idG5zOlBvcnRUeXBlNTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4MyIgYmluZGluZz0idG5zOkJpbmRpbmc1ODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTg0IiBuYW1lPSJJbnB1dDU4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODQiIG5hbWU9Ik91dHB1dDU4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODUiIG5hbWU9IklucHV0NTg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4NSIgbmFtZT0iT3V0cHV0NTg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODUiIHR5cGU9InRuczpQb3J0VHlwZTU4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4NiIgbmFtZT0iSW5wdXQ1ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTg2IiBuYW1lPSJPdXRwdXQ1ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4NiIgdHlwZT0idG5zOlBvcnRUeXBlNTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4NiIgYmluZGluZz0idG5zOkJpbmRpbmc1ODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTg3IiBuYW1lPSJJbnB1dDU4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODciIG5hbWU9Ik91dHB1dDU4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODgiIG5hbWU9IklucHV0NTg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4OCIgbmFtZT0iT3V0cHV0NTg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODgiIHR5cGU9InRuczpQb3J0VHlwZTU4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4OSIgbmFtZT0iSW5wdXQ1ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTg5IiBuYW1lPSJPdXRwdXQ1ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4OSIgdHlwZT0idG5zOlBvcnRUeXBlNTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4OSIgYmluZGluZz0idG5zOkJpbmRpbmc1ODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkwIiBuYW1lPSJJbnB1dDU5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTAiIG5hbWU9Ik91dHB1dDU5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTEiIG5hbWU9IklucHV0NTkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5MSIgbmFtZT0iT3V0cHV0NTkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTEiIHR5cGU9InRuczpQb3J0VHlwZTU5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5MiIgbmFtZT0iSW5wdXQ1OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkyIiBuYW1lPSJPdXRwdXQ1OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5MiIgdHlwZT0idG5zOlBvcnRUeXBlNTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5MiIgYmluZGluZz0idG5zOkJpbmRpbmc1OTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkzIiBuYW1lPSJJbnB1dDU5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTMiIG5hbWU9Ik91dHB1dDU5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTQiIG5hbWU9IklucHV0NTk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5NCIgbmFtZT0iT3V0cHV0NTk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTQiIHR5cGU9InRuczpQb3J0VHlwZTU5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5NSIgbmFtZT0iSW5wdXQ1OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTk1IiBuYW1lPSJPdXRwdXQ1OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5NSIgdHlwZT0idG5zOlBvcnRUeXBlNTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5NSIgYmluZGluZz0idG5zOkJpbmRpbmc1OTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTk2IiBuYW1lPSJJbnB1dDU5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTYiIG5hbWU9Ik91dHB1dDU5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTciIG5hbWU9IklucHV0NTk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5NyIgbmFtZT0iT3V0cHV0NTk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTciIHR5cGU9InRuczpQb3J0VHlwZTU5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTciIGJpbmRpbmc9InRuczpCaW5kaW5nNTk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5OCIgbmFtZT0iSW5wdXQ1OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTk4IiBuYW1lPSJPdXRwdXQ1OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5OCIgdHlwZT0idG5zOlBvcnRUeXBlNTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5OCIgYmluZGluZz0idG5zOkJpbmRpbmc1OTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTk5IiBuYW1lPSJJbnB1dDU5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTkiIG5hbWU9Ik91dHB1dDU5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDAiIG5hbWU9IklucHV0NjAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwMCIgbmFtZT0iT3V0cHV0NjAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDAiIHR5cGU9InRuczpQb3J0VHlwZTYwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwMSIgbmFtZT0iSW5wdXQ2MDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAxIiBuYW1lPSJPdXRwdXQ2MDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwMSIgdHlwZT0idG5zOlBvcnRUeXBlNjAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwMSIgYmluZGluZz0idG5zOkJpbmRpbmc2MDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAyIiBuYW1lPSJJbnB1dDYwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDIiIG5hbWU9Ik91dHB1dDYwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjAyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDMiIG5hbWU9IklucHV0NjAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwMyIgbmFtZT0iT3V0cHV0NjAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDMiIHR5cGU9InRuczpQb3J0VHlwZTYwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwNCIgbmFtZT0iSW5wdXQ2MDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjA0IiBuYW1lPSJPdXRwdXQ2MDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwNCIgdHlwZT0idG5zOlBvcnRUeXBlNjA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwNCIgYmluZGluZz0idG5zOkJpbmRpbmc2MDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjA1IiBuYW1lPSJJbnB1dDYwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDUiIG5hbWU9Ik91dHB1dDYwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjA1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDYiIG5hbWU9IklucHV0NjA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwNiIgbmFtZT0iT3V0cHV0NjA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDYiIHR5cGU9InRuczpQb3J0VHlwZTYwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwNyIgbmFtZT0iSW5wdXQ2MDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjA3IiBuYW1lPSJPdXRwdXQ2MDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwNyIgdHlwZT0idG5zOlBvcnRUeXBlNjA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwNyIgYmluZGluZz0idG5zOkJpbmRpbmc2MDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjA4IiBuYW1lPSJJbnB1dDYwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDgiIG5hbWU9Ik91dHB1dDYwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjA4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDkiIG5hbWU9IklucHV0NjA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwOSIgbmFtZT0iT3V0cHV0NjA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDkiIHR5cGU9InRuczpQb3J0VHlwZTYwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxMCIgbmFtZT0iSW5wdXQ2MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEwIiBuYW1lPSJPdXRwdXQ2MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxMCIgdHlwZT0idG5zOlBvcnRUeXBlNjEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxMCIgYmluZGluZz0idG5zOkJpbmRpbmc2MTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjExIiBuYW1lPSJJbnB1dDYxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTEiIG5hbWU9Ik91dHB1dDYxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjExIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTIiIG5hbWU9IklucHV0NjEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxMiIgbmFtZT0iT3V0cHV0NjEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTIiIHR5cGU9InRuczpQb3J0VHlwZTYxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxMyIgbmFtZT0iSW5wdXQ2MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEzIiBuYW1lPSJPdXRwdXQ2MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxMyIgdHlwZT0idG5zOlBvcnRUeXBlNjEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxMyIgYmluZGluZz0idG5zOkJpbmRpbmc2MTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjE0IiBuYW1lPSJJbnB1dDYxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTQiIG5hbWU9Ik91dHB1dDYxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjE0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTUiIG5hbWU9IklucHV0NjE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxNSIgbmFtZT0iT3V0cHV0NjE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTUiIHR5cGU9InRuczpQb3J0VHlwZTYxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxNiIgbmFtZT0iSW5wdXQ2MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjE2IiBuYW1lPSJPdXRwdXQ2MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxNiIgdHlwZT0idG5zOlBvcnRUeXBlNjE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxNiIgYmluZGluZz0idG5zOkJpbmRpbmc2MTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjE3IiBuYW1lPSJJbnB1dDYxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTciIG5hbWU9Ik91dHB1dDYxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjE3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTgiIG5hbWU9IklucHV0NjE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxOCIgbmFtZT0iT3V0cHV0NjE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTgiIHR5cGU9InRuczpQb3J0VHlwZTYxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxOSIgbmFtZT0iSW5wdXQ2MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjE5IiBuYW1lPSJPdXRwdXQ2MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxOSIgdHlwZT0idG5zOlBvcnRUeXBlNjE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxOSIgYmluZGluZz0idG5zOkJpbmRpbmc2MTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIwIiBuYW1lPSJJbnB1dDYyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjAiIG5hbWU9Ik91dHB1dDYyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjEiIG5hbWU9IklucHV0NjIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyMSIgbmFtZT0iT3V0cHV0NjIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjEiIHR5cGU9InRuczpQb3J0VHlwZTYyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyMiIgbmFtZT0iSW5wdXQ2MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIyIiBuYW1lPSJPdXRwdXQ2MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyMiIgdHlwZT0idG5zOlBvcnRUeXBlNjIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyMiIgYmluZGluZz0idG5zOkJpbmRpbmc2MjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIzIiBuYW1lPSJJbnB1dDYyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjMiIG5hbWU9Ik91dHB1dDYyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjQiIG5hbWU9IklucHV0NjI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyNCIgbmFtZT0iT3V0cHV0NjI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjQiIHR5cGU9InRuczpQb3J0VHlwZTYyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyNSIgbmFtZT0iSW5wdXQ2MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjI1IiBuYW1lPSJPdXRwdXQ2MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyNSIgdHlwZT0idG5zOlBvcnRUeXBlNjI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyNSIgYmluZGluZz0idG5zOkJpbmRpbmc2MjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjI2IiBuYW1lPSJJbnB1dDYyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjYiIG5hbWU9Ik91dHB1dDYyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjI2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjciIG5hbWU9IklucHV0NjI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyNyIgbmFtZT0iT3V0cHV0NjI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjciIHR5cGU9InRuczpQb3J0VHlwZTYyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjciIGJpbmRpbmc9InRuczpCaW5kaW5nNjI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyOCIgbmFtZT0iSW5wdXQ2MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjI4IiBuYW1lPSJPdXRwdXQ2MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyOCIgdHlwZT0idG5zOlBvcnRUeXBlNjI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyOCIgYmluZGluZz0idG5zOkJpbmRpbmc2MjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjI5IiBuYW1lPSJJbnB1dDYyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjkiIG5hbWU9Ik91dHB1dDYyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjI5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzAiIG5hbWU9IklucHV0NjMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzMCIgbmFtZT0iT3V0cHV0NjMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzAiIHR5cGU9InRuczpQb3J0VHlwZTYzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzMSIgbmFtZT0iSW5wdXQ2MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMxIiBuYW1lPSJPdXRwdXQ2MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzMSIgdHlwZT0idG5zOlBvcnRUeXBlNjMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzMSIgYmluZGluZz0idG5zOkJpbmRpbmc2MzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMyIiBuYW1lPSJJbnB1dDYzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzIiIG5hbWU9Ik91dHB1dDYzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjMyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzMiIG5hbWU9IklucHV0NjMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzMyIgbmFtZT0iT3V0cHV0NjMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzMiIHR5cGU9InRuczpQb3J0VHlwZTYzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzNCIgbmFtZT0iSW5wdXQ2MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjM0IiBuYW1lPSJPdXRwdXQ2MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzNCIgdHlwZT0idG5zOlBvcnRUeXBlNjM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzNCIgYmluZGluZz0idG5zOkJpbmRpbmc2MzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjM1IiBuYW1lPSJJbnB1dDYzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzUiIG5hbWU9Ik91dHB1dDYzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjM1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzYiIG5hbWU9IklucHV0NjM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzNiIgbmFtZT0iT3V0cHV0NjM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzYiIHR5cGU9InRuczpQb3J0VHlwZTYzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzNyIgbmFtZT0iSW5wdXQ2MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjM3IiBuYW1lPSJPdXRwdXQ2MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzNyIgdHlwZT0idG5zOlBvcnRUeXBlNjM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzNyIgYmluZGluZz0idG5zOkJpbmRpbmc2MzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjM4IiBuYW1lPSJJbnB1dDYzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzgiIG5hbWU9Ik91dHB1dDYzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjM4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzkiIG5hbWU9IklucHV0NjM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzOSIgbmFtZT0iT3V0cHV0NjM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzkiIHR5cGU9InRuczpQb3J0VHlwZTYzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0MCIgbmFtZT0iSW5wdXQ2NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQwIiBuYW1lPSJPdXRwdXQ2NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0MCIgdHlwZT0idG5zOlBvcnRUeXBlNjQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0MCIgYmluZGluZz0idG5zOkJpbmRpbmc2NDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQxIiBuYW1lPSJJbnB1dDY0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDEiIG5hbWU9Ik91dHB1dDY0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDIiIG5hbWU9IklucHV0NjQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0MiIgbmFtZT0iT3V0cHV0NjQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDIiIHR5cGU9InRuczpQb3J0VHlwZTY0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0MyIgbmFtZT0iSW5wdXQ2NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQzIiBuYW1lPSJPdXRwdXQ2NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0MyIgdHlwZT0idG5zOlBvcnRUeXBlNjQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0MyIgYmluZGluZz0idG5zOkJpbmRpbmc2NDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQ0IiBuYW1lPSJJbnB1dDY0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDQiIG5hbWU9Ik91dHB1dDY0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDUiIG5hbWU9IklucHV0NjQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0NSIgbmFtZT0iT3V0cHV0NjQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDUiIHR5cGU9InRuczpQb3J0VHlwZTY0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0NiIgbmFtZT0iSW5wdXQ2NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQ2IiBuYW1lPSJPdXRwdXQ2NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0NiIgdHlwZT0idG5zOlBvcnRUeXBlNjQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQ3IiBuYW1lPSJJbnB1dDY0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDciIG5hbWU9Ik91dHB1dDY0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDgiIG5hbWU9IklucHV0NjQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0OCIgbmFtZT0iT3V0cHV0NjQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDgiIHR5cGU9InRuczpQb3J0VHlwZTY0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0OSIgbmFtZT0iSW5wdXQ2NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQ5IiBuYW1lPSJPdXRwdXQ2NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0OSIgdHlwZT0idG5zOlBvcnRUeXBlNjQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0OSIgYmluZGluZz0idG5zOkJpbmRpbmc2NDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUwIiBuYW1lPSJJbnB1dDY1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTAiIG5hbWU9Ik91dHB1dDY1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTEiIG5hbWU9IklucHV0NjUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1MSIgbmFtZT0iT3V0cHV0NjUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTEiIHR5cGU9InRuczpQb3J0VHlwZTY1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1MiIgbmFtZT0iSW5wdXQ2NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUyIiBuYW1lPSJPdXRwdXQ2NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1MiIgdHlwZT0idG5zOlBvcnRUeXBlNjUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1MiIgYmluZGluZz0idG5zOkJpbmRpbmc2NTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUzIiBuYW1lPSJJbnB1dDY1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTMiIG5hbWU9Ik91dHB1dDY1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTQiIG5hbWU9IklucHV0NjU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1NCIgbmFtZT0iT3V0cHV0NjU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTQiIHR5cGU9InRuczpQb3J0VHlwZTY1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1NSIgbmFtZT0iSW5wdXQ2NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjU1IiBuYW1lPSJPdXRwdXQ2NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1NSIgdHlwZT0idG5zOlBvcnRUeXBlNjU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1NSIgYmluZGluZz0idG5zOkJpbmRpbmc2NTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjU2IiBuYW1lPSJJbnB1dDY1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTYiIG5hbWU9Ik91dHB1dDY1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTciIG5hbWU9IklucHV0NjU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1NyIgbmFtZT0iT3V0cHV0NjU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTciIHR5cGU9InRuczpQb3J0VHlwZTY1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNjU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1OCIgbmFtZT0iSW5wdXQ2NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjU4IiBuYW1lPSJPdXRwdXQ2NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1OCIgdHlwZT0idG5zOlBvcnRUeXBlNjU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1OCIgYmluZGluZz0idG5zOkJpbmRpbmc2NTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjU5IiBuYW1lPSJJbnB1dDY1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTkiIG5hbWU9Ik91dHB1dDY1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjAiIG5hbWU9IklucHV0NjYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2MCIgbmFtZT0iT3V0cHV0NjYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjAiIHR5cGU9InRuczpQb3J0VHlwZTY2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2MSIgbmFtZT0iSW5wdXQ2NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYxIiBuYW1lPSJPdXRwdXQ2NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2MSIgdHlwZT0idG5zOlBvcnRUeXBlNjYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2MSIgYmluZGluZz0idG5zOkJpbmRpbmc2NjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYyIiBuYW1lPSJJbnB1dDY2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjIiIG5hbWU9Ik91dHB1dDY2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjMiIG5hbWU9IklucHV0NjYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2MyIgbmFtZT0iT3V0cHV0NjYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjMiIHR5cGU9InRuczpQb3J0VHlwZTY2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2NCIgbmFtZT0iSW5wdXQ2NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjY0IiBuYW1lPSJPdXRwdXQ2NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2NCIgdHlwZT0idG5zOlBvcnRUeXBlNjY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2NCIgYmluZGluZz0idG5zOkJpbmRpbmc2NjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjY1IiBuYW1lPSJJbnB1dDY2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjUiIG5hbWU9Ik91dHB1dDY2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjYiIG5hbWU9IklucHV0NjY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2NiIgbmFtZT0iT3V0cHV0NjY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjYiIHR5cGU9InRuczpQb3J0VHlwZTY2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2NyIgbmFtZT0iSW5wdXQ2NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjY3IiBuYW1lPSJPdXRwdXQ2NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2NyIgdHlwZT0idG5zOlBvcnRUeXBlNjY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2NyIgYmluZGluZz0idG5zOkJpbmRpbmc2NjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjY4IiBuYW1lPSJJbnB1dDY2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjgiIG5hbWU9Ik91dHB1dDY2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjkiIG5hbWU9IklucHV0NjY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2OSIgbmFtZT0iT3V0cHV0NjY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjkiIHR5cGU9InRuczpQb3J0VHlwZTY2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3MCIgbmFtZT0iSW5wdXQ2NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjcwIiBuYW1lPSJPdXRwdXQ2NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3MCIgdHlwZT0idG5zOlBvcnRUeXBlNjcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3MCIgYmluZGluZz0idG5zOkJpbmRpbmc2NzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjcxIiBuYW1lPSJJbnB1dDY3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzEiIG5hbWU9Ik91dHB1dDY3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzIiIG5hbWU9IklucHV0NjcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3MiIgbmFtZT0iT3V0cHV0NjcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzIiIHR5cGU9InRuczpQb3J0VHlwZTY3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3MyIgbmFtZT0iSW5wdXQ2NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjczIiBuYW1lPSJPdXRwdXQ2NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3MyIgdHlwZT0idG5zOlBvcnRUeXBlNjczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3MyIgYmluZGluZz0idG5zOkJpbmRpbmc2NzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjc0IiBuYW1lPSJJbnB1dDY3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzQiIG5hbWU9Ik91dHB1dDY3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzUiIG5hbWU9IklucHV0Njc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3NSIgbmFtZT0iT3V0cHV0Njc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzUiIHR5cGU9InRuczpQb3J0VHlwZTY3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3NiIgbmFtZT0iSW5wdXQ2NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjc2IiBuYW1lPSJPdXRwdXQ2NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3NiIgdHlwZT0idG5zOlBvcnRUeXBlNjc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjc3IiBuYW1lPSJJbnB1dDY3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzciIG5hbWU9Ik91dHB1dDY3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzgiIG5hbWU9IklucHV0Njc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3OCIgbmFtZT0iT3V0cHV0Njc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzgiIHR5cGU9InRuczpQb3J0VHlwZTY3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3OSIgbmFtZT0iSW5wdXQ2NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjc5IiBuYW1lPSJPdXRwdXQ2NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3OSIgdHlwZT0idG5zOlBvcnRUeXBlNjc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3OSIgYmluZGluZz0idG5zOkJpbmRpbmc2NzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgwIiBuYW1lPSJJbnB1dDY4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODAiIG5hbWU9Ik91dHB1dDY4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODEiIG5hbWU9IklucHV0NjgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4MSIgbmFtZT0iT3V0cHV0NjgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODEiIHR5cGU9InRuczpQb3J0VHlwZTY4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4MiIgbmFtZT0iSW5wdXQ2ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgyIiBuYW1lPSJPdXRwdXQ2ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4MiIgdHlwZT0idG5zOlBvcnRUeXBlNjgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4MiIgYmluZGluZz0idG5zOkJpbmRpbmc2ODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgzIiBuYW1lPSJJbnB1dDY4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODMiIG5hbWU9Ik91dHB1dDY4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODQiIG5hbWU9IklucHV0Njg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4NCIgbmFtZT0iT3V0cHV0Njg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODQiIHR5cGU9InRuczpQb3J0VHlwZTY4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4NSIgbmFtZT0iSW5wdXQ2ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjg1IiBuYW1lPSJPdXRwdXQ2ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4NSIgdHlwZT0idG5zOlBvcnRUeXBlNjg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4NSIgYmluZGluZz0idG5zOkJpbmRpbmc2ODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjg2IiBuYW1lPSJJbnB1dDY4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODYiIG5hbWU9Ik91dHB1dDY4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODciIG5hbWU9IklucHV0Njg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4NyIgbmFtZT0iT3V0cHV0Njg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODciIHR5cGU9InRuczpQb3J0VHlwZTY4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODciIGJpbmRpbmc9InRuczpCaW5kaW5nNjg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4OCIgbmFtZT0iSW5wdXQ2ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjg4IiBuYW1lPSJPdXRwdXQ2ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4OCIgdHlwZT0idG5zOlBvcnRUeXBlNjg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4OCIgYmluZGluZz0idG5zOkJpbmRpbmc2ODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjg5IiBuYW1lPSJJbnB1dDY4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODkiIG5hbWU9Ik91dHB1dDY4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTAiIG5hbWU9IklucHV0NjkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5MCIgbmFtZT0iT3V0cHV0NjkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTAiIHR5cGU9InRuczpQb3J0VHlwZTY5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5MSIgbmFtZT0iSW5wdXQ2OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkxIiBuYW1lPSJPdXRwdXQ2OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5MSIgdHlwZT0idG5zOlBvcnRUeXBlNjkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5MSIgYmluZGluZz0idG5zOkJpbmRpbmc2OTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkyIiBuYW1lPSJJbnB1dDY5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTIiIG5hbWU9Ik91dHB1dDY5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTMiIG5hbWU9IklucHV0NjkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5MyIgbmFtZT0iT3V0cHV0NjkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTMiIHR5cGU9InRuczpQb3J0VHlwZTY5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5NCIgbmFtZT0iSW5wdXQ2OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjk0IiBuYW1lPSJPdXRwdXQ2OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5NCIgdHlwZT0idG5zOlBvcnRUeXBlNjk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5NCIgYmluZGluZz0idG5zOkJpbmRpbmc2OTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjk1IiBuYW1lPSJJbnB1dDY5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTUiIG5hbWU9Ik91dHB1dDY5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTYiIG5hbWU9IklucHV0Njk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5NiIgbmFtZT0iT3V0cHV0Njk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTYiIHR5cGU9InRuczpQb3J0VHlwZTY5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5NyIgbmFtZT0iSW5wdXQ2OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjk3IiBuYW1lPSJPdXRwdXQ2OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5NyIgdHlwZT0idG5zOlBvcnRUeXBlNjk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5NyIgYmluZGluZz0idG5zOkJpbmRpbmc2OTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjk4IiBuYW1lPSJJbnB1dDY5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTgiIG5hbWU9Ik91dHB1dDY5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTkiIG5hbWU9IklucHV0Njk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5OSIgbmFtZT0iT3V0cHV0Njk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTkiIHR5cGU9InRuczpQb3J0VHlwZTY5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwMCIgbmFtZT0iSW5wdXQ3MDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAwIiBuYW1lPSJPdXRwdXQ3MDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwMCIgdHlwZT0idG5zOlBvcnRUeXBlNzAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwMCIgYmluZGluZz0idG5zOkJpbmRpbmc3MDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAxIiBuYW1lPSJJbnB1dDcwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDEiIG5hbWU9Ik91dHB1dDcwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzAxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDIiIG5hbWU9IklucHV0NzAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwMiIgbmFtZT0iT3V0cHV0NzAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDIiIHR5cGU9InRuczpQb3J0VHlwZTcwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwMyIgbmFtZT0iSW5wdXQ3MDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAzIiBuYW1lPSJPdXRwdXQ3MDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwMyIgdHlwZT0idG5zOlBvcnRUeXBlNzAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwMyIgYmluZGluZz0idG5zOkJpbmRpbmc3MDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzA0IiBuYW1lPSJJbnB1dDcwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDQiIG5hbWU9Ik91dHB1dDcwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzA0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDUiIG5hbWU9IklucHV0NzA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwNSIgbmFtZT0iT3V0cHV0NzA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDUiIHR5cGU9InRuczpQb3J0VHlwZTcwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwNiIgbmFtZT0iSW5wdXQ3MDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzA2IiBuYW1lPSJPdXRwdXQ3MDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwNiIgdHlwZT0idG5zOlBvcnRUeXBlNzA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwNiIgYmluZGluZz0idG5zOkJpbmRpbmc3MDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzA3IiBuYW1lPSJJbnB1dDcwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDciIG5hbWU9Ik91dHB1dDcwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzA3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDgiIG5hbWU9IklucHV0NzA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwOCIgbmFtZT0iT3V0cHV0NzA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDgiIHR5cGU9InRuczpQb3J0VHlwZTcwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwOSIgbmFtZT0iSW5wdXQ3MDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzA5IiBuYW1lPSJPdXRwdXQ3MDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwOSIgdHlwZT0idG5zOlBvcnRUeXBlNzA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwOSIgYmluZGluZz0idG5zOkJpbmRpbmc3MDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEwIiBuYW1lPSJJbnB1dDcxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTAiIG5hbWU9Ik91dHB1dDcxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzEwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTEiIG5hbWU9IklucHV0NzExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxMSIgbmFtZT0iT3V0cHV0NzExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTEiIHR5cGU9InRuczpQb3J0VHlwZTcxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxMiIgbmFtZT0iSW5wdXQ3MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzEyIiBuYW1lPSJPdXRwdXQ3MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxMiIgdHlwZT0idG5zOlBvcnRUeXBlNzEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxMiIgYmluZGluZz0idG5zOkJpbmRpbmc3MTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEzIiBuYW1lPSJJbnB1dDcxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTMiIG5hbWU9Ik91dHB1dDcxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzEzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTQiIG5hbWU9IklucHV0NzE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxNCIgbmFtZT0iT3V0cHV0NzE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTQiIHR5cGU9InRuczpQb3J0VHlwZTcxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxNSIgbmFtZT0iSW5wdXQ3MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzE1IiBuYW1lPSJPdXRwdXQ3MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxNSIgdHlwZT0idG5zOlBvcnRUeXBlNzE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxNSIgYmluZGluZz0idG5zOkJpbmRpbmc3MTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzE2IiBuYW1lPSJJbnB1dDcxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTYiIG5hbWU9Ik91dHB1dDcxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzE2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTciIG5hbWU9IklucHV0NzE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxNyIgbmFtZT0iT3V0cHV0NzE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTciIHR5cGU9InRuczpQb3J0VHlwZTcxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTciIGJpbmRpbmc9InRuczpCaW5kaW5nNzE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxOCIgbmFtZT0iSW5wdXQ3MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzE4IiBuYW1lPSJPdXRwdXQ3MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxOCIgdHlwZT0idG5zOlBvcnRUeXBlNzE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxOCIgYmluZGluZz0idG5zOkJpbmRpbmc3MTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzE5IiBuYW1lPSJJbnB1dDcxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTkiIG5hbWU9Ik91dHB1dDcxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzE5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjAiIG5hbWU9IklucHV0NzIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyMCIgbmFtZT0iT3V0cHV0NzIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjAiIHR5cGU9InRuczpQb3J0VHlwZTcyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyMSIgbmFtZT0iSW5wdXQ3MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIxIiBuYW1lPSJPdXRwdXQ3MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyMSIgdHlwZT0idG5zOlBvcnRUeXBlNzIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyMSIgYmluZGluZz0idG5zOkJpbmRpbmc3MjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIyIiBuYW1lPSJJbnB1dDcyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjIiIG5hbWU9Ik91dHB1dDcyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzIyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjMiIG5hbWU9IklucHV0NzIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyMyIgbmFtZT0iT3V0cHV0NzIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjMiIHR5cGU9InRuczpQb3J0VHlwZTcyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyNCIgbmFtZT0iSW5wdXQ3MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzI0IiBuYW1lPSJPdXRwdXQ3MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyNCIgdHlwZT0idG5zOlBvcnRUeXBlNzI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyNCIgYmluZGluZz0idG5zOkJpbmRpbmc3MjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzI1IiBuYW1lPSJJbnB1dDcyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjUiIG5hbWU9Ik91dHB1dDcyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzI1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjYiIG5hbWU9IklucHV0NzI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyNiIgbmFtZT0iT3V0cHV0NzI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjYiIHR5cGU9InRuczpQb3J0VHlwZTcyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyNyIgbmFtZT0iSW5wdXQ3MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzI3IiBuYW1lPSJPdXRwdXQ3MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyNyIgdHlwZT0idG5zOlBvcnRUeXBlNzI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyNyIgYmluZGluZz0idG5zOkJpbmRpbmc3MjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzI4IiBuYW1lPSJJbnB1dDcyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjgiIG5hbWU9Ik91dHB1dDcyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzI4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjkiIG5hbWU9IklucHV0NzI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyOSIgbmFtZT0iT3V0cHV0NzI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjkiIHR5cGU9InRuczpQb3J0VHlwZTcyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczMCIgbmFtZT0iSW5wdXQ3MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMwIiBuYW1lPSJPdXRwdXQ3MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczMCIgdHlwZT0idG5zOlBvcnRUeXBlNzMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczMCIgYmluZGluZz0idG5zOkJpbmRpbmc3MzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMxIiBuYW1lPSJJbnB1dDczMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzEiIG5hbWU9Ik91dHB1dDczMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzMxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzczMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzIiIG5hbWU9IklucHV0NzMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczMiIgbmFtZT0iT3V0cHV0NzMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzIiIHR5cGU9InRuczpQb3J0VHlwZTczMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczMyIgbmFtZT0iSW5wdXQ3MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMzIiBuYW1lPSJPdXRwdXQ3MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczMyIgdHlwZT0idG5zOlBvcnRUeXBlNzMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczMyIgYmluZGluZz0idG5zOkJpbmRpbmc3MzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzM0IiBuYW1lPSJJbnB1dDczNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzQiIG5hbWU9Ik91dHB1dDczNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzM0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzczNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzUiIG5hbWU9IklucHV0NzM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczNSIgbmFtZT0iT3V0cHV0NzM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzUiIHR5cGU9InRuczpQb3J0VHlwZTczNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczNiIgbmFtZT0iSW5wdXQ3MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzM2IiBuYW1lPSJPdXRwdXQ3MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczNiIgdHlwZT0idG5zOlBvcnRUeXBlNzM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczNiIgYmluZGluZz0idG5zOkJpbmRpbmc3MzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzM3IiBuYW1lPSJJbnB1dDczNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzciIG5hbWU9Ik91dHB1dDczNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzM3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzczNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzgiIG5hbWU9IklucHV0NzM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczOCIgbmFtZT0iT3V0cHV0NzM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzgiIHR5cGU9InRuczpQb3J0VHlwZTczOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczOSIgbmFtZT0iSW5wdXQ3MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzM5IiBuYW1lPSJPdXRwdXQ3MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczOSIgdHlwZT0idG5zOlBvcnRUeXBlNzM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczOSIgYmluZGluZz0idG5zOkJpbmRpbmc3MzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQwIiBuYW1lPSJJbnB1dDc0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDAiIG5hbWU9Ik91dHB1dDc0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDEiIG5hbWU9IklucHV0NzQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0MSIgbmFtZT0iT3V0cHV0NzQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDEiIHR5cGU9InRuczpQb3J0VHlwZTc0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0MiIgbmFtZT0iSW5wdXQ3NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQyIiBuYW1lPSJPdXRwdXQ3NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0MiIgdHlwZT0idG5zOlBvcnRUeXBlNzQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0MiIgYmluZGluZz0idG5zOkJpbmRpbmc3NDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQzIiBuYW1lPSJJbnB1dDc0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDMiIG5hbWU9Ik91dHB1dDc0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDQiIG5hbWU9IklucHV0NzQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0NCIgbmFtZT0iT3V0cHV0NzQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDQiIHR5cGU9InRuczpQb3J0VHlwZTc0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0NSIgbmFtZT0iSW5wdXQ3NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQ1IiBuYW1lPSJPdXRwdXQ3NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0NSIgdHlwZT0idG5zOlBvcnRUeXBlNzQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQ2IiBuYW1lPSJJbnB1dDc0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDYiIG5hbWU9Ik91dHB1dDc0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDciIG5hbWU9IklucHV0NzQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0NyIgbmFtZT0iT3V0cHV0NzQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDciIHR5cGU9InRuczpQb3J0VHlwZTc0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNzQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0OCIgbmFtZT0iSW5wdXQ3NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQ4IiBuYW1lPSJPdXRwdXQ3NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0OCIgdHlwZT0idG5zOlBvcnRUeXBlNzQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0OCIgYmluZGluZz0idG5zOkJpbmRpbmc3NDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQ5IiBuYW1lPSJJbnB1dDc0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDkiIG5hbWU9Ik91dHB1dDc0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTAiIG5hbWU9IklucHV0NzUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1MCIgbmFtZT0iT3V0cHV0NzUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTAiIHR5cGU9InRuczpQb3J0VHlwZTc1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1MSIgbmFtZT0iSW5wdXQ3NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUxIiBuYW1lPSJPdXRwdXQ3NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1MSIgdHlwZT0idG5zOlBvcnRUeXBlNzUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1MSIgYmluZGluZz0idG5zOkJpbmRpbmc3NTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUyIiBuYW1lPSJJbnB1dDc1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTIiIG5hbWU9Ik91dHB1dDc1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTMiIG5hbWU9IklucHV0NzUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1MyIgbmFtZT0iT3V0cHV0NzUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTMiIHR5cGU9InRuczpQb3J0VHlwZTc1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1NCIgbmFtZT0iSW5wdXQ3NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzU0IiBuYW1lPSJPdXRwdXQ3NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1NCIgdHlwZT0idG5zOlBvcnRUeXBlNzU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1NCIgYmluZGluZz0idG5zOkJpbmRpbmc3NTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzU1IiBuYW1lPSJJbnB1dDc1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTUiIG5hbWU9Ik91dHB1dDc1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTYiIG5hbWU9IklucHV0NzU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1NiIgbmFtZT0iT3V0cHV0NzU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTYiIHR5cGU9InRuczpQb3J0VHlwZTc1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1NyIgbmFtZT0iSW5wdXQ3NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzU3IiBuYW1lPSJPdXRwdXQ3NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1NyIgdHlwZT0idG5zOlBvcnRUeXBlNzU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1NyIgYmluZGluZz0idG5zOkJpbmRpbmc3NTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzU4IiBuYW1lPSJJbnB1dDc1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTgiIG5hbWU9Ik91dHB1dDc1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTkiIG5hbWU9IklucHV0NzU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1OSIgbmFtZT0iT3V0cHV0NzU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTkiIHR5cGU9InRuczpQb3J0VHlwZTc1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2MCIgbmFtZT0iSW5wdXQ3NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYwIiBuYW1lPSJPdXRwdXQ3NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2MCIgdHlwZT0idG5zOlBvcnRUeXBlNzYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2MCIgYmluZGluZz0idG5zOkJpbmRpbmc3NjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYxIiBuYW1lPSJJbnB1dDc2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjEiIG5hbWU9Ik91dHB1dDc2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjIiIG5hbWU9IklucHV0NzYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2MiIgbmFtZT0iT3V0cHV0NzYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjIiIHR5cGU9InRuczpQb3J0VHlwZTc2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2MyIgbmFtZT0iSW5wdXQ3NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYzIiBuYW1lPSJPdXRwdXQ3NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2MyIgdHlwZT0idG5zOlBvcnRUeXBlNzYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2MyIgYmluZGluZz0idG5zOkJpbmRpbmc3NjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzY0IiBuYW1lPSJJbnB1dDc2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjQiIG5hbWU9Ik91dHB1dDc2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjUiIG5hbWU9IklucHV0NzY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2NSIgbmFtZT0iT3V0cHV0NzY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjUiIHR5cGU9InRuczpQb3J0VHlwZTc2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2NiIgbmFtZT0iSW5wdXQ3NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzY2IiBuYW1lPSJPdXRwdXQ3NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2NiIgdHlwZT0idG5zOlBvcnRUeXBlNzY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2NiIgYmluZGluZz0idG5zOkJpbmRpbmc3NjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzY3IiBuYW1lPSJJbnB1dDc2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjciIG5hbWU9Ik91dHB1dDc2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjgiIG5hbWU9IklucHV0NzY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2OCIgbmFtZT0iT3V0cHV0NzY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjgiIHR5cGU9InRuczpQb3J0VHlwZTc2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2OSIgbmFtZT0iSW5wdXQ3NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzY5IiBuYW1lPSJPdXRwdXQ3NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2OSIgdHlwZT0idG5zOlBvcnRUeXBlNzY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2OSIgYmluZGluZz0idG5zOkJpbmRpbmc3NjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzcwIiBuYW1lPSJJbnB1dDc3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzAiIG5hbWU9Ik91dHB1dDc3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzEiIG5hbWU9IklucHV0NzcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3MSIgbmFtZT0iT3V0cHV0NzcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzEiIHR5cGU9InRuczpQb3J0VHlwZTc3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3MiIgbmFtZT0iSW5wdXQ3NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzcyIiBuYW1lPSJPdXRwdXQ3NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3MiIgdHlwZT0idG5zOlBvcnRUeXBlNzcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3MiIgYmluZGluZz0idG5zOkJpbmRpbmc3NzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzczIiBuYW1lPSJJbnB1dDc3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzMiIG5hbWU9Ik91dHB1dDc3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzczIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzQiIG5hbWU9IklucHV0Nzc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3NCIgbmFtZT0iT3V0cHV0Nzc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzQiIHR5cGU9InRuczpQb3J0VHlwZTc3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3NSIgbmFtZT0iSW5wdXQ3NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzc1IiBuYW1lPSJPdXRwdXQ3NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3NSIgdHlwZT0idG5zOlBvcnRUeXBlNzc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzc2IiBuYW1lPSJJbnB1dDc3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzYiIG5hbWU9Ik91dHB1dDc3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzciIG5hbWU9IklucHV0Nzc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3NyIgbmFtZT0iT3V0cHV0Nzc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzciIHR5cGU9InRuczpQb3J0VHlwZTc3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNzc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3OCIgbmFtZT0iSW5wdXQ3NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzc4IiBuYW1lPSJPdXRwdXQ3NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3OCIgdHlwZT0idG5zOlBvcnRUeXBlNzc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3OCIgYmluZGluZz0idG5zOkJpbmRpbmc3NzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzc5IiBuYW1lPSJJbnB1dDc3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzkiIG5hbWU9Ik91dHB1dDc3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODAiIG5hbWU9IklucHV0NzgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4MCIgbmFtZT0iT3V0cHV0NzgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODAiIHR5cGU9InRuczpQb3J0VHlwZTc4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4MSIgbmFtZT0iSW5wdXQ3ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgxIiBuYW1lPSJPdXRwdXQ3ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4MSIgdHlwZT0idG5zOlBvcnRUeXBlNzgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4MSIgYmluZGluZz0idG5zOkJpbmRpbmc3ODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgyIiBuYW1lPSJJbnB1dDc4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODIiIG5hbWU9Ik91dHB1dDc4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODMiIG5hbWU9IklucHV0NzgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4MyIgbmFtZT0iT3V0cHV0NzgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODMiIHR5cGU9InRuczpQb3J0VHlwZTc4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4NCIgbmFtZT0iSW5wdXQ3ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzg0IiBuYW1lPSJPdXRwdXQ3ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4NCIgdHlwZT0idG5zOlBvcnRUeXBlNzg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4NCIgYmluZGluZz0idG5zOkJpbmRpbmc3ODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzg1IiBuYW1lPSJJbnB1dDc4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODUiIG5hbWU9Ik91dHB1dDc4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODYiIG5hbWU9IklucHV0Nzg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4NiIgbmFtZT0iT3V0cHV0Nzg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODYiIHR5cGU9InRuczpQb3J0VHlwZTc4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4NyIgbmFtZT0iSW5wdXQ3ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzg3IiBuYW1lPSJPdXRwdXQ3ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4NyIgdHlwZT0idG5zOlBvcnRUeXBlNzg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4NyIgYmluZGluZz0idG5zOkJpbmRpbmc3ODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzg4IiBuYW1lPSJJbnB1dDc4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODgiIG5hbWU9Ik91dHB1dDc4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODkiIG5hbWU9IklucHV0Nzg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4OSIgbmFtZT0iT3V0cHV0Nzg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODkiIHR5cGU9InRuczpQb3J0VHlwZTc4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5MCIgbmFtZT0iSW5wdXQ3OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkwIiBuYW1lPSJPdXRwdXQ3OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5MCIgdHlwZT0idG5zOlBvcnRUeXBlNzkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5MCIgYmluZGluZz0idG5zOkJpbmRpbmc3OTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkxIiBuYW1lPSJJbnB1dDc5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTEiIG5hbWU9Ik91dHB1dDc5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTIiIG5hbWU9IklucHV0NzkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5MiIgbmFtZT0iT3V0cHV0NzkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTIiIHR5cGU9InRuczpQb3J0VHlwZTc5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5MyIgbmFtZT0iSW5wdXQ3OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkzIiBuYW1lPSJPdXRwdXQ3OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5MyIgdHlwZT0idG5zOlBvcnRUeXBlNzkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5MyIgYmluZGluZz0idG5zOkJpbmRpbmc3OTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzk0IiBuYW1lPSJJbnB1dDc5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTQiIG5hbWU9Ik91dHB1dDc5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTUiIG5hbWU9IklucHV0Nzk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5NSIgbmFtZT0iT3V0cHV0Nzk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTUiIHR5cGU9InRuczpQb3J0VHlwZTc5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5NiIgbmFtZT0iSW5wdXQ3OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzk2IiBuYW1lPSJPdXRwdXQ3OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5NiIgdHlwZT0idG5zOlBvcnRUeXBlNzk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5NiIgYmluZGluZz0idG5zOkJpbmRpbmc3OTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzk3IiBuYW1lPSJJbnB1dDc5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTciIG5hbWU9Ik91dHB1dDc5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTgiIG5hbWU9IklucHV0Nzk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5OCIgbmFtZT0iT3V0cHV0Nzk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTgiIHR5cGU9InRuczpQb3J0VHlwZTc5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5OSIgbmFtZT0iSW5wdXQ3OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzk5IiBuYW1lPSJPdXRwdXQ3OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5OSIgdHlwZT0idG5zOlBvcnRUeXBlNzk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5OSIgYmluZGluZz0idG5zOkJpbmRpbmc3OTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAwIiBuYW1lPSJJbnB1dDgwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDAiIG5hbWU9Ik91dHB1dDgwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDEiIG5hbWU9IklucHV0ODAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwMSIgbmFtZT0iT3V0cHV0ODAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDEiIHR5cGU9InRuczpQb3J0VHlwZTgwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDEiIGJpbmRpbmc9InRuczpCaW5kaW5nODAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwMiIgbmFtZT0iSW5wdXQ4MDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAyIiBuYW1lPSJPdXRwdXQ4MDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwMiIgdHlwZT0idG5zOlBvcnRUeXBlODAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwMiIgYmluZGluZz0idG5zOkJpbmRpbmc4MDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAzIiBuYW1lPSJJbnB1dDgwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDMiIG5hbWU9Ik91dHB1dDgwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDQiIG5hbWU9IklucHV0ODA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwNCIgbmFtZT0iT3V0cHV0ODA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDQiIHR5cGU9InRuczpQb3J0VHlwZTgwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDQiIGJpbmRpbmc9InRuczpCaW5kaW5nODA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwNSIgbmFtZT0iSW5wdXQ4MDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODA1IiBuYW1lPSJPdXRwdXQ4MDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwNSIgdHlwZT0idG5zOlBvcnRUeXBlODA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwNSIgYmluZGluZz0idG5zOkJpbmRpbmc4MDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODA2IiBuYW1lPSJJbnB1dDgwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDYiIG5hbWU9Ik91dHB1dDgwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODA2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDciIG5hbWU9IklucHV0ODA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwNyIgbmFtZT0iT3V0cHV0ODA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDciIHR5cGU9InRuczpQb3J0VHlwZTgwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDciIGJpbmRpbmc9InRuczpCaW5kaW5nODA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwOCIgbmFtZT0iSW5wdXQ4MDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODA4IiBuYW1lPSJPdXRwdXQ4MDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwOCIgdHlwZT0idG5zOlBvcnRUeXBlODA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwOCIgYmluZGluZz0idG5zOkJpbmRpbmc4MDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODA5IiBuYW1lPSJJbnB1dDgwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDkiIG5hbWU9Ik91dHB1dDgwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODA5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTAiIG5hbWU9IklucHV0ODEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxMCIgbmFtZT0iT3V0cHV0ODEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTAiIHR5cGU9InRuczpQb3J0VHlwZTgxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nODEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxMSIgbmFtZT0iSW5wdXQ4MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODExIiBuYW1lPSJPdXRwdXQ4MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxMSIgdHlwZT0idG5zOlBvcnRUeXBlODExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxMSIgYmluZGluZz0idG5zOkJpbmRpbmc4MTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODEyIiBuYW1lPSJJbnB1dDgxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTIiIG5hbWU9Ik91dHB1dDgxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODEyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTMiIG5hbWU9IklucHV0ODEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxMyIgbmFtZT0iT3V0cHV0ODEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTMiIHR5cGU9InRuczpQb3J0VHlwZTgxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nODEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxNCIgbmFtZT0iSW5wdXQ4MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODE0IiBuYW1lPSJPdXRwdXQ4MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxNCIgdHlwZT0idG5zOlBvcnRUeXBlODE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxNCIgYmluZGluZz0idG5zOkJpbmRpbmc4MTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODE1IiBuYW1lPSJJbnB1dDgxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTUiIG5hbWU9Ik91dHB1dDgxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODE1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTYiIG5hbWU9IklucHV0ODE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxNiIgbmFtZT0iT3V0cHV0ODE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTYiIHR5cGU9InRuczpQb3J0VHlwZTgxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nODE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxNyIgbmFtZT0iSW5wdXQ4MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODE3IiBuYW1lPSJPdXRwdXQ4MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxNyIgdHlwZT0idG5zOlBvcnRUeXBlODE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxNyIgYmluZGluZz0idG5zOkJpbmRpbmc4MTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODE4IiBuYW1lPSJJbnB1dDgxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTgiIG5hbWU9Ik91dHB1dDgxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODE4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTkiIG5hbWU9IklucHV0ODE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxOSIgbmFtZT0iT3V0cHV0ODE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTkiIHR5cGU9InRuczpQb3J0VHlwZTgxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nODE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyMCIgbmFtZT0iSW5wdXQ4MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIwIiBuYW1lPSJPdXRwdXQ4MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyMCIgdHlwZT0idG5zOlBvcnRUeXBlODIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyMCIgYmluZGluZz0idG5zOkJpbmRpbmc4MjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIxIiBuYW1lPSJJbnB1dDgyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjEiIG5hbWU9Ik91dHB1dDgyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODIxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjIiIG5hbWU9IklucHV0ODIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyMiIgbmFtZT0iT3V0cHV0ODIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjIiIHR5cGU9InRuczpQb3J0VHlwZTgyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nODIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyMyIgbmFtZT0iSW5wdXQ4MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIzIiBuYW1lPSJPdXRwdXQ4MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyMyIgdHlwZT0idG5zOlBvcnRUeXBlODIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyMyIgYmluZGluZz0idG5zOkJpbmRpbmc4MjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODI0IiBuYW1lPSJJbnB1dDgyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjQiIG5hbWU9Ik91dHB1dDgyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODI0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjUiIG5hbWU9IklucHV0ODI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyNSIgbmFtZT0iT3V0cHV0ODI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjUiIHR5cGU9InRuczpQb3J0VHlwZTgyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nODI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyNiIgbmFtZT0iSW5wdXQ4MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODI2IiBuYW1lPSJPdXRwdXQ4MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyNiIgdHlwZT0idG5zOlBvcnRUeXBlODI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyNiIgYmluZGluZz0idG5zOkJpbmRpbmc4MjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODI3IiBuYW1lPSJJbnB1dDgyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjciIG5hbWU9Ik91dHB1dDgyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODI3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjgiIG5hbWU9IklucHV0ODI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyOCIgbmFtZT0iT3V0cHV0ODI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjgiIHR5cGU9InRuczpQb3J0VHlwZTgyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nODI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyOSIgbmFtZT0iSW5wdXQ4MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODI5IiBuYW1lPSJPdXRwdXQ4MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyOSIgdHlwZT0idG5zOlBvcnRUeXBlODI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyOSIgYmluZGluZz0idG5zOkJpbmRpbmc4MjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMwIiBuYW1lPSJJbnB1dDgzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzAiIG5hbWU9Ik91dHB1dDgzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzEiIG5hbWU9IklucHV0ODMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzMSIgbmFtZT0iT3V0cHV0ODMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzEiIHR5cGU9InRuczpQb3J0VHlwZTgzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nODMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzMiIgbmFtZT0iSW5wdXQ4MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMyIiBuYW1lPSJPdXRwdXQ4MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzMiIgdHlwZT0idG5zOlBvcnRUeXBlODMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzMiIgYmluZGluZz0idG5zOkJpbmRpbmc4MzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMzIiBuYW1lPSJJbnB1dDgzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzMiIG5hbWU9Ik91dHB1dDgzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzQiIG5hbWU9IklucHV0ODM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzNCIgbmFtZT0iT3V0cHV0ODM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzQiIHR5cGU9InRuczpQb3J0VHlwZTgzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nODM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzNSIgbmFtZT0iSW5wdXQ4MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODM1IiBuYW1lPSJPdXRwdXQ4MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzNSIgdHlwZT0idG5zOlBvcnRUeXBlODM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzNSIgYmluZGluZz0idG5zOkJpbmRpbmc4MzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODM2IiBuYW1lPSJJbnB1dDgzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzYiIG5hbWU9Ik91dHB1dDgzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODM2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzciIG5hbWU9IklucHV0ODM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzNyIgbmFtZT0iT3V0cHV0ODM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzciIHR5cGU9InRuczpQb3J0VHlwZTgzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzciIGJpbmRpbmc9InRuczpCaW5kaW5nODM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzOCIgbmFtZT0iSW5wdXQ4MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODM4IiBuYW1lPSJPdXRwdXQ4MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzOCIgdHlwZT0idG5zOlBvcnRUeXBlODM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzOCIgYmluZGluZz0idG5zOkJpbmRpbmc4MzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODM5IiBuYW1lPSJJbnB1dDgzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzkiIG5hbWU9Ik91dHB1dDgzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODM5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDAiIG5hbWU9IklucHV0ODQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0MCIgbmFtZT0iT3V0cHV0ODQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDAiIHR5cGU9InRuczpQb3J0VHlwZTg0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nODQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0MSIgbmFtZT0iSW5wdXQ4NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQxIiBuYW1lPSJPdXRwdXQ4NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0MSIgdHlwZT0idG5zOlBvcnRUeXBlODQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0MSIgYmluZGluZz0idG5zOkJpbmRpbmc4NDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQyIiBuYW1lPSJJbnB1dDg0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDIiIG5hbWU9Ik91dHB1dDg0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDMiIG5hbWU9IklucHV0ODQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0MyIgbmFtZT0iT3V0cHV0ODQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDMiIHR5cGU9InRuczpQb3J0VHlwZTg0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nODQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0NCIgbmFtZT0iSW5wdXQ4NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQ0IiBuYW1lPSJPdXRwdXQ4NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0NCIgdHlwZT0idG5zOlBvcnRUeXBlODQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQ1IiBuYW1lPSJJbnB1dDg0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDUiIG5hbWU9Ik91dHB1dDg0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDYiIG5hbWU9IklucHV0ODQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0NiIgbmFtZT0iT3V0cHV0ODQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDYiIHR5cGU9InRuczpQb3J0VHlwZTg0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nODQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0NyIgbmFtZT0iSW5wdXQ4NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQ3IiBuYW1lPSJPdXRwdXQ4NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0NyIgdHlwZT0idG5zOlBvcnRUeXBlODQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQ4IiBuYW1lPSJJbnB1dDg0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDgiIG5hbWU9Ik91dHB1dDg0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDkiIG5hbWU9IklucHV0ODQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0OSIgbmFtZT0iT3V0cHV0ODQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDkiIHR5cGU9InRuczpQb3J0VHlwZTg0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nODQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1MCIgbmFtZT0iSW5wdXQ4NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUwIiBuYW1lPSJPdXRwdXQ4NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1MCIgdHlwZT0idG5zOlBvcnRUeXBlODUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1MCIgYmluZGluZz0idG5zOkJpbmRpbmc4NTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUxIiBuYW1lPSJJbnB1dDg1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTEiIG5hbWU9Ik91dHB1dDg1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTIiIG5hbWU9IklucHV0ODUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1MiIgbmFtZT0iT3V0cHV0ODUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTIiIHR5cGU9InRuczpQb3J0VHlwZTg1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nODUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1MyIgbmFtZT0iSW5wdXQ4NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUzIiBuYW1lPSJPdXRwdXQ4NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1MyIgdHlwZT0idG5zOlBvcnRUeXBlODUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1MyIgYmluZGluZz0idG5zOkJpbmRpbmc4NTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODU0IiBuYW1lPSJJbnB1dDg1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTQiIG5hbWU9Ik91dHB1dDg1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTUiIG5hbWU9IklucHV0ODU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1NSIgbmFtZT0iT3V0cHV0ODU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTUiIHR5cGU9InRuczpQb3J0VHlwZTg1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nODU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1NiIgbmFtZT0iSW5wdXQ4NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODU2IiBuYW1lPSJPdXRwdXQ4NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1NiIgdHlwZT0idG5zOlBvcnRUeXBlODU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1NiIgYmluZGluZz0idG5zOkJpbmRpbmc4NTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODU3IiBuYW1lPSJJbnB1dDg1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTciIG5hbWU9Ik91dHB1dDg1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTgiIG5hbWU9IklucHV0ODU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1OCIgbmFtZT0iT3V0cHV0ODU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTgiIHR5cGU9InRuczpQb3J0VHlwZTg1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nODU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1OSIgbmFtZT0iSW5wdXQ4NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODU5IiBuYW1lPSJPdXRwdXQ4NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1OSIgdHlwZT0idG5zOlBvcnRUeXBlODU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1OSIgYmluZGluZz0idG5zOkJpbmRpbmc4NTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYwIiBuYW1lPSJJbnB1dDg2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjAiIG5hbWU9Ik91dHB1dDg2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjEiIG5hbWU9IklucHV0ODYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2MSIgbmFtZT0iT3V0cHV0ODYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjEiIHR5cGU9InRuczpQb3J0VHlwZTg2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nODYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2MiIgbmFtZT0iSW5wdXQ4NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYyIiBuYW1lPSJPdXRwdXQ4NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2MiIgdHlwZT0idG5zOlBvcnRUeXBlODYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2MiIgYmluZGluZz0idG5zOkJpbmRpbmc4NjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYzIiBuYW1lPSJJbnB1dDg2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjMiIG5hbWU9Ik91dHB1dDg2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjQiIG5hbWU9IklucHV0ODY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2NCIgbmFtZT0iT3V0cHV0ODY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjQiIHR5cGU9InRuczpQb3J0VHlwZTg2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nODY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2NSIgbmFtZT0iSW5wdXQ4NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODY1IiBuYW1lPSJPdXRwdXQ4NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2NSIgdHlwZT0idG5zOlBvcnRUeXBlODY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2NSIgYmluZGluZz0idG5zOkJpbmRpbmc4NjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODY2IiBuYW1lPSJJbnB1dDg2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjYiIG5hbWU9Ik91dHB1dDg2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjciIG5hbWU9IklucHV0ODY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2NyIgbmFtZT0iT3V0cHV0ODY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjciIHR5cGU9InRuczpQb3J0VHlwZTg2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjciIGJpbmRpbmc9InRuczpCaW5kaW5nODY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2OCIgbmFtZT0iSW5wdXQ4NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODY4IiBuYW1lPSJPdXRwdXQ4NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2OCIgdHlwZT0idG5zOlBvcnRUeXBlODY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2OCIgYmluZGluZz0idG5zOkJpbmRpbmc4NjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODY5IiBuYW1lPSJJbnB1dDg2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjkiIG5hbWU9Ik91dHB1dDg2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzAiIG5hbWU9IklucHV0ODcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3MCIgbmFtZT0iT3V0cHV0ODcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzAiIHR5cGU9InRuczpQb3J0VHlwZTg3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nODcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3MSIgbmFtZT0iSW5wdXQ4NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODcxIiBuYW1lPSJPdXRwdXQ4NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3MSIgdHlwZT0idG5zOlBvcnRUeXBlODcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3MSIgYmluZGluZz0idG5zOkJpbmRpbmc4NzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODcyIiBuYW1lPSJJbnB1dDg3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzIiIG5hbWU9Ik91dHB1dDg3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzMiIG5hbWU9IklucHV0ODczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3MyIgbmFtZT0iT3V0cHV0ODczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzMiIHR5cGU9InRuczpQb3J0VHlwZTg3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nODczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3NCIgbmFtZT0iSW5wdXQ4NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODc0IiBuYW1lPSJPdXRwdXQ4NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3NCIgdHlwZT0idG5zOlBvcnRUeXBlODc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODc1IiBuYW1lPSJJbnB1dDg3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzUiIG5hbWU9Ik91dHB1dDg3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzYiIG5hbWU9IklucHV0ODc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3NiIgbmFtZT0iT3V0cHV0ODc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzYiIHR5cGU9InRuczpQb3J0VHlwZTg3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nODc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3NyIgbmFtZT0iSW5wdXQ4NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODc3IiBuYW1lPSJPdXRwdXQ4NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3NyIgdHlwZT0idG5zOlBvcnRUeXBlODc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODc4IiBuYW1lPSJJbnB1dDg3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzgiIG5hbWU9Ik91dHB1dDg3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzkiIG5hbWU9IklucHV0ODc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3OSIgbmFtZT0iT3V0cHV0ODc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzkiIHR5cGU9InRuczpQb3J0VHlwZTg3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nODc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4MCIgbmFtZT0iSW5wdXQ4ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgwIiBuYW1lPSJPdXRwdXQ4ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4MCIgdHlwZT0idG5zOlBvcnRUeXBlODgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4MCIgYmluZGluZz0idG5zOkJpbmRpbmc4ODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgxIiBuYW1lPSJJbnB1dDg4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODEiIG5hbWU9Ik91dHB1dDg4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODIiIG5hbWU9IklucHV0ODgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4MiIgbmFtZT0iT3V0cHV0ODgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODIiIHR5cGU9InRuczpQb3J0VHlwZTg4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nODgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4MyIgbmFtZT0iSW5wdXQ4ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgzIiBuYW1lPSJPdXRwdXQ4ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4MyIgdHlwZT0idG5zOlBvcnRUeXBlODgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4MyIgYmluZGluZz0idG5zOkJpbmRpbmc4ODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODg0IiBuYW1lPSJJbnB1dDg4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODQiIG5hbWU9Ik91dHB1dDg4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODUiIG5hbWU9IklucHV0ODg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4NSIgbmFtZT0iT3V0cHV0ODg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODUiIHR5cGU9InRuczpQb3J0VHlwZTg4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nODg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4NiIgbmFtZT0iSW5wdXQ4ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODg2IiBuYW1lPSJPdXRwdXQ4ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4NiIgdHlwZT0idG5zOlBvcnRUeXBlODg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4NiIgYmluZGluZz0idG5zOkJpbmRpbmc4ODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODg3IiBuYW1lPSJJbnB1dDg4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODciIG5hbWU9Ik91dHB1dDg4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODgiIG5hbWU9IklucHV0ODg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4OCIgbmFtZT0iT3V0cHV0ODg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODgiIHR5cGU9InRuczpQb3J0VHlwZTg4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nODg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4OSIgbmFtZT0iSW5wdXQ4ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODg5IiBuYW1lPSJPdXRwdXQ4ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4OSIgdHlwZT0idG5zOlBvcnRUeXBlODg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4OSIgYmluZGluZz0idG5zOkJpbmRpbmc4ODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkwIiBuYW1lPSJJbnB1dDg5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTAiIG5hbWU9Ik91dHB1dDg5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTEiIG5hbWU9IklucHV0ODkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5MSIgbmFtZT0iT3V0cHV0ODkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTEiIHR5cGU9InRuczpQb3J0VHlwZTg5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nODkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5MiIgbmFtZT0iSW5wdXQ4OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkyIiBuYW1lPSJPdXRwdXQ4OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5MiIgdHlwZT0idG5zOlBvcnRUeXBlODkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5MiIgYmluZGluZz0idG5zOkJpbmRpbmc4OTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkzIiBuYW1lPSJJbnB1dDg5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTMiIG5hbWU9Ik91dHB1dDg5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTQiIG5hbWU9IklucHV0ODk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5NCIgbmFtZT0iT3V0cHV0ODk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTQiIHR5cGU9InRuczpQb3J0VHlwZTg5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nODk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5NSIgbmFtZT0iSW5wdXQ4OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODk1IiBuYW1lPSJPdXRwdXQ4OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5NSIgdHlwZT0idG5zOlBvcnRUeXBlODk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5NSIgYmluZGluZz0idG5zOkJpbmRpbmc4OTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODk2IiBuYW1lPSJJbnB1dDg5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTYiIG5hbWU9Ik91dHB1dDg5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTciIG5hbWU9IklucHV0ODk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5NyIgbmFtZT0iT3V0cHV0ODk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTciIHR5cGU9InRuczpQb3J0VHlwZTg5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTciIGJpbmRpbmc9InRuczpCaW5kaW5nODk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5OCIgbmFtZT0iSW5wdXQ4OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODk4IiBuYW1lPSJPdXRwdXQ4OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5OCIgdHlwZT0idG5zOlBvcnRUeXBlODk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5OCIgYmluZGluZz0idG5zOkJpbmRpbmc4OTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODk5IiBuYW1lPSJJbnB1dDg5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTkiIG5hbWU9Ik91dHB1dDg5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDAiIG5hbWU9IklucHV0OTAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwMCIgbmFtZT0iT3V0cHV0OTAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDAiIHR5cGU9InRuczpQb3J0VHlwZTkwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwMSIgbmFtZT0iSW5wdXQ5MDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAxIiBuYW1lPSJPdXRwdXQ5MDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwMSIgdHlwZT0idG5zOlBvcnRUeXBlOTAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwMSIgYmluZGluZz0idG5zOkJpbmRpbmc5MDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAyIiBuYW1lPSJJbnB1dDkwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDIiIG5hbWU9Ik91dHB1dDkwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTAyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDMiIG5hbWU9IklucHV0OTAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwMyIgbmFtZT0iT3V0cHV0OTAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDMiIHR5cGU9InRuczpQb3J0VHlwZTkwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwNCIgbmFtZT0iSW5wdXQ5MDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTA0IiBuYW1lPSJPdXRwdXQ5MDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwNCIgdHlwZT0idG5zOlBvcnRUeXBlOTA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwNCIgYmluZGluZz0idG5zOkJpbmRpbmc5MDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTA1IiBuYW1lPSJJbnB1dDkwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDUiIG5hbWU9Ik91dHB1dDkwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTA1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDYiIG5hbWU9IklucHV0OTA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwNiIgbmFtZT0iT3V0cHV0OTA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDYiIHR5cGU9InRuczpQb3J0VHlwZTkwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwNyIgbmFtZT0iSW5wdXQ5MDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTA3IiBuYW1lPSJPdXRwdXQ5MDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwNyIgdHlwZT0idG5zOlBvcnRUeXBlOTA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwNyIgYmluZGluZz0idG5zOkJpbmRpbmc5MDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTA4IiBuYW1lPSJJbnB1dDkwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDgiIG5hbWU9Ik91dHB1dDkwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTA4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDkiIG5hbWU9IklucHV0OTA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwOSIgbmFtZT0iT3V0cHV0OTA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDkiIHR5cGU9InRuczpQb3J0VHlwZTkwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxMCIgbmFtZT0iSW5wdXQ5MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEwIiBuYW1lPSJPdXRwdXQ5MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxMCIgdHlwZT0idG5zOlBvcnRUeXBlOTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxMCIgYmluZGluZz0idG5zOkJpbmRpbmc5MTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTExIiBuYW1lPSJJbnB1dDkxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTEiIG5hbWU9Ik91dHB1dDkxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTExIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTIiIG5hbWU9IklucHV0OTEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxMiIgbmFtZT0iT3V0cHV0OTEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTIiIHR5cGU9InRuczpQb3J0VHlwZTkxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxMyIgbmFtZT0iSW5wdXQ5MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEzIiBuYW1lPSJPdXRwdXQ5MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxMyIgdHlwZT0idG5zOlBvcnRUeXBlOTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxMyIgYmluZGluZz0idG5zOkJpbmRpbmc5MTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTE0IiBuYW1lPSJJbnB1dDkxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTQiIG5hbWU9Ik91dHB1dDkxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTE0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTUiIG5hbWU9IklucHV0OTE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxNSIgbmFtZT0iT3V0cHV0OTE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTUiIHR5cGU9InRuczpQb3J0VHlwZTkxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxNiIgbmFtZT0iSW5wdXQ5MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTE2IiBuYW1lPSJPdXRwdXQ5MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxNiIgdHlwZT0idG5zOlBvcnRUeXBlOTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxNiIgYmluZGluZz0idG5zOkJpbmRpbmc5MTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTE3IiBuYW1lPSJJbnB1dDkxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTciIG5hbWU9Ik91dHB1dDkxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTE3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTgiIG5hbWU9IklucHV0OTE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxOCIgbmFtZT0iT3V0cHV0OTE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTgiIHR5cGU9InRuczpQb3J0VHlwZTkxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxOSIgbmFtZT0iSW5wdXQ5MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTE5IiBuYW1lPSJPdXRwdXQ5MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxOSIgdHlwZT0idG5zOlBvcnRUeXBlOTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxOSIgYmluZGluZz0idG5zOkJpbmRpbmc5MTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIwIiBuYW1lPSJJbnB1dDkyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjAiIG5hbWU9Ik91dHB1dDkyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjEiIG5hbWU9IklucHV0OTIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyMSIgbmFtZT0iT3V0cHV0OTIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjEiIHR5cGU9InRuczpQb3J0VHlwZTkyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyMiIgbmFtZT0iSW5wdXQ5MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIyIiBuYW1lPSJPdXRwdXQ5MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyMiIgdHlwZT0idG5zOlBvcnRUeXBlOTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyMiIgYmluZGluZz0idG5zOkJpbmRpbmc5MjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIzIiBuYW1lPSJJbnB1dDkyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjMiIG5hbWU9Ik91dHB1dDkyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjQiIG5hbWU9IklucHV0OTI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyNCIgbmFtZT0iT3V0cHV0OTI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjQiIHR5cGU9InRuczpQb3J0VHlwZTkyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyNSIgbmFtZT0iSW5wdXQ5MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTI1IiBuYW1lPSJPdXRwdXQ5MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyNSIgdHlwZT0idG5zOlBvcnRUeXBlOTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyNSIgYmluZGluZz0idG5zOkJpbmRpbmc5MjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTI2IiBuYW1lPSJJbnB1dDkyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjYiIG5hbWU9Ik91dHB1dDkyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTI2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjciIG5hbWU9IklucHV0OTI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyNyIgbmFtZT0iT3V0cHV0OTI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjciIHR5cGU9InRuczpQb3J0VHlwZTkyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjciIGJpbmRpbmc9InRuczpCaW5kaW5nOTI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyOCIgbmFtZT0iSW5wdXQ5MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTI4IiBuYW1lPSJPdXRwdXQ5MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyOCIgdHlwZT0idG5zOlBvcnRUeXBlOTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyOCIgYmluZGluZz0idG5zOkJpbmRpbmc5MjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTI5IiBuYW1lPSJJbnB1dDkyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjkiIG5hbWU9Ik91dHB1dDkyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTI5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzAiIG5hbWU9IklucHV0OTMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzMCIgbmFtZT0iT3V0cHV0OTMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzAiIHR5cGU9InRuczpQb3J0VHlwZTkzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzMSIgbmFtZT0iSW5wdXQ5MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMxIiBuYW1lPSJPdXRwdXQ5MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzMSIgdHlwZT0idG5zOlBvcnRUeXBlOTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzMSIgYmluZGluZz0idG5zOkJpbmRpbmc5MzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMyIiBuYW1lPSJJbnB1dDkzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzIiIG5hbWU9Ik91dHB1dDkzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTMyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzMiIG5hbWU9IklucHV0OTMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzMyIgbmFtZT0iT3V0cHV0OTMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzMiIHR5cGU9InRuczpQb3J0VHlwZTkzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzNCIgbmFtZT0iSW5wdXQ5MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTM0IiBuYW1lPSJPdXRwdXQ5MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzNCIgdHlwZT0idG5zOlBvcnRUeXBlOTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzNCIgYmluZGluZz0idG5zOkJpbmRpbmc5MzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTM1IiBuYW1lPSJJbnB1dDkzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzUiIG5hbWU9Ik91dHB1dDkzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTM1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzYiIG5hbWU9IklucHV0OTM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzNiIgbmFtZT0iT3V0cHV0OTM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzYiIHR5cGU9InRuczpQb3J0VHlwZTkzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzNyIgbmFtZT0iSW5wdXQ5MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTM3IiBuYW1lPSJPdXRwdXQ5MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzNyIgdHlwZT0idG5zOlBvcnRUeXBlOTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzNyIgYmluZGluZz0idG5zOkJpbmRpbmc5MzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTM4IiBuYW1lPSJJbnB1dDkzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzgiIG5hbWU9Ik91dHB1dDkzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTM4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzkiIG5hbWU9IklucHV0OTM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzOSIgbmFtZT0iT3V0cHV0OTM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzkiIHR5cGU9InRuczpQb3J0VHlwZTkzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0MCIgbmFtZT0iSW5wdXQ5NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQwIiBuYW1lPSJPdXRwdXQ5NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0MCIgdHlwZT0idG5zOlBvcnRUeXBlOTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0MCIgYmluZGluZz0idG5zOkJpbmRpbmc5NDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQxIiBuYW1lPSJJbnB1dDk0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDEiIG5hbWU9Ik91dHB1dDk0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDIiIG5hbWU9IklucHV0OTQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0MiIgbmFtZT0iT3V0cHV0OTQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDIiIHR5cGU9InRuczpQb3J0VHlwZTk0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0MyIgbmFtZT0iSW5wdXQ5NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQzIiBuYW1lPSJPdXRwdXQ5NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0MyIgdHlwZT0idG5zOlBvcnRUeXBlOTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0MyIgYmluZGluZz0idG5zOkJpbmRpbmc5NDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQ0IiBuYW1lPSJJbnB1dDk0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDQiIG5hbWU9Ik91dHB1dDk0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDUiIG5hbWU9IklucHV0OTQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0NSIgbmFtZT0iT3V0cHV0OTQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDUiIHR5cGU9InRuczpQb3J0VHlwZTk0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0NiIgbmFtZT0iSW5wdXQ5NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQ2IiBuYW1lPSJPdXRwdXQ5NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0NiIgdHlwZT0idG5zOlBvcnRUeXBlOTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQ3IiBuYW1lPSJJbnB1dDk0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDciIG5hbWU9Ik91dHB1dDk0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDgiIG5hbWU9IklucHV0OTQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0OCIgbmFtZT0iT3V0cHV0OTQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDgiIHR5cGU9InRuczpQb3J0VHlwZTk0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0OSIgbmFtZT0iSW5wdXQ5NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQ5IiBuYW1lPSJPdXRwdXQ5NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0OSIgdHlwZT0idG5zOlBvcnRUeXBlOTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0OSIgYmluZGluZz0idG5zOkJpbmRpbmc5NDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUwIiBuYW1lPSJJbnB1dDk1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTAiIG5hbWU9Ik91dHB1dDk1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTEiIG5hbWU9IklucHV0OTUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1MSIgbmFtZT0iT3V0cHV0OTUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTEiIHR5cGU9InRuczpQb3J0VHlwZTk1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1MiIgbmFtZT0iSW5wdXQ5NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUyIiBuYW1lPSJPdXRwdXQ5NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1MiIgdHlwZT0idG5zOlBvcnRUeXBlOTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1MiIgYmluZGluZz0idG5zOkJpbmRpbmc5NTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUzIiBuYW1lPSJJbnB1dDk1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTMiIG5hbWU9Ik91dHB1dDk1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTQiIG5hbWU9IklucHV0OTU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1NCIgbmFtZT0iT3V0cHV0OTU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTQiIHR5cGU9InRuczpQb3J0VHlwZTk1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1NSIgbmFtZT0iSW5wdXQ5NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTU1IiBuYW1lPSJPdXRwdXQ5NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1NSIgdHlwZT0idG5zOlBvcnRUeXBlOTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1NSIgYmluZGluZz0idG5zOkJpbmRpbmc5NTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTU2IiBuYW1lPSJJbnB1dDk1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTYiIG5hbWU9Ik91dHB1dDk1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTciIG5hbWU9IklucHV0OTU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1NyIgbmFtZT0iT3V0cHV0OTU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTciIHR5cGU9InRuczpQb3J0VHlwZTk1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTciIGJpbmRpbmc9InRuczpCaW5kaW5nOTU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1OCIgbmFtZT0iSW5wdXQ5NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTU4IiBuYW1lPSJPdXRwdXQ5NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1OCIgdHlwZT0idG5zOlBvcnRUeXBlOTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1OCIgYmluZGluZz0idG5zOkJpbmRpbmc5NTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTU5IiBuYW1lPSJJbnB1dDk1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTkiIG5hbWU9Ik91dHB1dDk1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjAiIG5hbWU9IklucHV0OTYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2MCIgbmFtZT0iT3V0cHV0OTYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjAiIHR5cGU9InRuczpQb3J0VHlwZTk2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2MSIgbmFtZT0iSW5wdXQ5NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYxIiBuYW1lPSJPdXRwdXQ5NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2MSIgdHlwZT0idG5zOlBvcnRUeXBlOTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2MSIgYmluZGluZz0idG5zOkJpbmRpbmc5NjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYyIiBuYW1lPSJJbnB1dDk2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjIiIG5hbWU9Ik91dHB1dDk2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjMiIG5hbWU9IklucHV0OTYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2MyIgbmFtZT0iT3V0cHV0OTYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjMiIHR5cGU9InRuczpQb3J0VHlwZTk2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2NCIgbmFtZT0iSW5wdXQ5NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTY0IiBuYW1lPSJPdXRwdXQ5NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2NCIgdHlwZT0idG5zOlBvcnRUeXBlOTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2NCIgYmluZGluZz0idG5zOkJpbmRpbmc5NjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTY1IiBuYW1lPSJJbnB1dDk2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjUiIG5hbWU9Ik91dHB1dDk2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjYiIG5hbWU9IklucHV0OTY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2NiIgbmFtZT0iT3V0cHV0OTY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjYiIHR5cGU9InRuczpQb3J0VHlwZTk2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2NyIgbmFtZT0iSW5wdXQ5NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTY3IiBuYW1lPSJPdXRwdXQ5NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2NyIgdHlwZT0idG5zOlBvcnRUeXBlOTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2NyIgYmluZGluZz0idG5zOkJpbmRpbmc5NjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTY4IiBuYW1lPSJJbnB1dDk2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjgiIG5hbWU9Ik91dHB1dDk2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjkiIG5hbWU9IklucHV0OTY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2OSIgbmFtZT0iT3V0cHV0OTY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjkiIHR5cGU9InRuczpQb3J0VHlwZTk2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3MCIgbmFtZT0iSW5wdXQ5NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTcwIiBuYW1lPSJPdXRwdXQ5NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3MCIgdHlwZT0idG5zOlBvcnRUeXBlOTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3MCIgYmluZGluZz0idG5zOkJpbmRpbmc5NzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTcxIiBuYW1lPSJJbnB1dDk3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzEiIG5hbWU9Ik91dHB1dDk3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzIiIG5hbWU9IklucHV0OTcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3MiIgbmFtZT0iT3V0cHV0OTcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzIiIHR5cGU9InRuczpQb3J0VHlwZTk3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3MyIgbmFtZT0iSW5wdXQ5NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTczIiBuYW1lPSJPdXRwdXQ5NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3MyIgdHlwZT0idG5zOlBvcnRUeXBlOTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3MyIgYmluZGluZz0idG5zOkJpbmRpbmc5NzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTc0IiBuYW1lPSJJbnB1dDk3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzQiIG5hbWU9Ik91dHB1dDk3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzUiIG5hbWU9IklucHV0OTc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3NSIgbmFtZT0iT3V0cHV0OTc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzUiIHR5cGU9InRuczpQb3J0VHlwZTk3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3NiIgbmFtZT0iSW5wdXQ5NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTc2IiBuYW1lPSJPdXRwdXQ5NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3NiIgdHlwZT0idG5zOlBvcnRUeXBlOTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTc3IiBuYW1lPSJJbnB1dDk3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzciIG5hbWU9Ik91dHB1dDk3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzgiIG5hbWU9IklucHV0OTc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3OCIgbmFtZT0iT3V0cHV0OTc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzgiIHR5cGU9InRuczpQb3J0VHlwZTk3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3OSIgbmFtZT0iSW5wdXQ5NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTc5IiBuYW1lPSJPdXRwdXQ5NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3OSIgdHlwZT0idG5zOlBvcnRUeXBlOTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3OSIgYmluZGluZz0idG5zOkJpbmRpbmc5NzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgwIiBuYW1lPSJJbnB1dDk4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODAiIG5hbWU9Ik91dHB1dDk4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODEiIG5hbWU9IklucHV0OTgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4MSIgbmFtZT0iT3V0cHV0OTgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODEiIHR5cGU9InRuczpQb3J0VHlwZTk4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4MiIgbmFtZT0iSW5wdXQ5ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgyIiBuYW1lPSJPdXRwdXQ5ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4MiIgdHlwZT0idG5zOlBvcnRUeXBlOTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4MiIgYmluZGluZz0idG5zOkJpbmRpbmc5ODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgzIiBuYW1lPSJJbnB1dDk4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODMiIG5hbWU9Ik91dHB1dDk4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODQiIG5hbWU9IklucHV0OTg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4NCIgbmFtZT0iT3V0cHV0OTg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODQiIHR5cGU9InRuczpQb3J0VHlwZTk4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4NSIgbmFtZT0iSW5wdXQ5ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTg1IiBuYW1lPSJPdXRwdXQ5ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4NSIgdHlwZT0idG5zOlBvcnRUeXBlOTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4NSIgYmluZGluZz0idG5zOkJpbmRpbmc5ODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTg2IiBuYW1lPSJJbnB1dDk4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODYiIG5hbWU9Ik91dHB1dDk4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODciIG5hbWU9IklucHV0OTg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4NyIgbmFtZT0iT3V0cHV0OTg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODciIHR5cGU9InRuczpQb3J0VHlwZTk4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODciIGJpbmRpbmc9InRuczpCaW5kaW5nOTg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4OCIgbmFtZT0iSW5wdXQ5ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTg4IiBuYW1lPSJPdXRwdXQ5ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4OCIgdHlwZT0idG5zOlBvcnRUeXBlOTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4OCIgYmluZGluZz0idG5zOkJpbmRpbmc5ODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTg5IiBuYW1lPSJJbnB1dDk4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODkiIG5hbWU9Ik91dHB1dDk4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTAiIG5hbWU9IklucHV0OTkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5MCIgbmFtZT0iT3V0cHV0OTkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTAiIHR5cGU9InRuczpQb3J0VHlwZTk5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5MSIgbmFtZT0iSW5wdXQ5OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkxIiBuYW1lPSJPdXRwdXQ5OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5MSIgdHlwZT0idG5zOlBvcnRUeXBlOTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5MSIgYmluZGluZz0idG5zOkJpbmRpbmc5OTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkyIiBuYW1lPSJJbnB1dDk5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTIiIG5hbWU9Ik91dHB1dDk5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTMiIG5hbWU9IklucHV0OTkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5MyIgbmFtZT0iT3V0cHV0OTkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTMiIHR5cGU9InRuczpQb3J0VHlwZTk5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5NCIgbmFtZT0iSW5wdXQ5OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTk0IiBuYW1lPSJPdXRwdXQ5OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5NCIgdHlwZT0idG5zOlBvcnRUeXBlOTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5NCIgYmluZGluZz0idG5zOkJpbmRpbmc5OTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTk1IiBuYW1lPSJJbnB1dDk5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTUiIG5hbWU9Ik91dHB1dDk5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTYiIG5hbWU9IklucHV0OTk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5NiIgbmFtZT0iT3V0cHV0OTk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTYiIHR5cGU9InRuczpQb3J0VHlwZTk5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5NyIgbmFtZT0iSW5wdXQ5OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTk3IiBuYW1lPSJPdXRwdXQ5OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5NyIgdHlwZT0idG5zOlBvcnRUeXBlOTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5NyIgYmluZGluZz0idG5zOkJpbmRpbmc5OTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTk4IiBuYW1lPSJJbnB1dDk5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTgiIG5hbWU9Ik91dHB1dDk5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTkiIG5hbWU9IklucHV0OTk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5OSIgbmFtZT0iT3V0cHV0OTk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTkiIHR5cGU9InRuczpQb3J0VHlwZTk5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMjAwS0Iud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMjAwS0Iud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFkMzcwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzIwMEtCLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2MjA3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJEZWZpbml0aW9uIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTAiIG5hbWU9IklucHV0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UwIiBuYW1lPSJPdXRwdXQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24wIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxIiBuYW1lPSJJbnB1dDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMSIgbmFtZT0iT3V0cHV0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMSIgdHlwZT0idG5zOlBvcnRUeXBlMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMiIgbmFtZT0iSW5wdXQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIiIG5hbWU9Ik91dHB1dDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIiIHR5cGU9InRuczpQb3J0VHlwZTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MiIgYmluZGluZz0idG5zOkJpbmRpbmcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMiIG5hbWU9IklucHV0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzIiBuYW1lPSJPdXRwdXQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczIiB0eXBlPSJ0bnM6UG9ydFR5cGUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0IiBuYW1lPSJJbnB1dDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNCIgbmFtZT0iT3V0cHV0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNCIgdHlwZT0idG5zOlBvcnRUeXBlNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNSIgbmFtZT0iSW5wdXQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUiIG5hbWU9Ik91dHB1dDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUiIHR5cGU9InRuczpQb3J0VHlwZTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NSIgYmluZGluZz0idG5zOkJpbmRpbmc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYiIG5hbWU9IklucHV0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2IiBuYW1lPSJPdXRwdXQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3IiBuYW1lPSJJbnB1dDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNyIgbmFtZT0iT3V0cHV0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNyIgdHlwZT0idG5zOlBvcnRUeXBlNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOCIgbmFtZT0iSW5wdXQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgiIG5hbWU9Ik91dHB1dDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgiIHR5cGU9InRuczpQb3J0VHlwZTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OCIgYmluZGluZz0idG5zOkJpbmRpbmc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkiIG5hbWU9IklucHV0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5IiBuYW1lPSJPdXRwdXQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkiIGJpbmRpbmc9InRuczpCaW5kaW5nOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMCIgbmFtZT0iSW5wdXQxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMCIgbmFtZT0iT3V0cHV0MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMSIgbmFtZT0iSW5wdXQxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMSIgbmFtZT0iT3V0cHV0MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMiIgbmFtZT0iSW5wdXQxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMiIgbmFtZT0iT3V0cHV0MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMyIgbmFtZT0iSW5wdXQxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMyIgbmFtZT0iT3V0cHV0MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNCIgbmFtZT0iSW5wdXQxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNCIgbmFtZT0iT3V0cHV0MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNCIgYmluZGluZz0idG5zOkJpbmRpbmcxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNSIgbmFtZT0iSW5wdXQxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNSIgbmFtZT0iT3V0cHV0MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNSIgYmluZGluZz0idG5zOkJpbmRpbmcxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNiIgbmFtZT0iSW5wdXQxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNiIgbmFtZT0iT3V0cHV0MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNiIgYmluZGluZz0idG5zOkJpbmRpbmcxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNyIgbmFtZT0iSW5wdXQxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNyIgbmFtZT0iT3V0cHV0MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNyIgYmluZGluZz0idG5zOkJpbmRpbmcxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOCIgbmFtZT0iSW5wdXQxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOCIgbmFtZT0iT3V0cHV0MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOCIgYmluZGluZz0idG5zOkJpbmRpbmcxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOSIgbmFtZT0iSW5wdXQxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOSIgbmFtZT0iT3V0cHV0MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOSIgYmluZGluZz0idG5zOkJpbmRpbmcxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMCIgbmFtZT0iSW5wdXQyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMCIgbmFtZT0iT3V0cHV0MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMSIgbmFtZT0iSW5wdXQyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMSIgbmFtZT0iT3V0cHV0MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMiIgbmFtZT0iSW5wdXQyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMiIgbmFtZT0iT3V0cHV0MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMyIgbmFtZT0iSW5wdXQyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMyIgbmFtZT0iT3V0cHV0MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNCIgbmFtZT0iSW5wdXQyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNCIgbmFtZT0iT3V0cHV0MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNCIgYmluZGluZz0idG5zOkJpbmRpbmcyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNSIgbmFtZT0iSW5wdXQyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNSIgbmFtZT0iT3V0cHV0MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNSIgYmluZGluZz0idG5zOkJpbmRpbmcyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNiIgbmFtZT0iSW5wdXQyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNiIgbmFtZT0iT3V0cHV0MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNiIgYmluZGluZz0idG5zOkJpbmRpbmcyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNyIgbmFtZT0iSW5wdXQyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNyIgbmFtZT0iT3V0cHV0MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNyIgYmluZGluZz0idG5zOkJpbmRpbmcyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOCIgbmFtZT0iSW5wdXQyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOCIgbmFtZT0iT3V0cHV0MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOCIgYmluZGluZz0idG5zOkJpbmRpbmcyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOSIgbmFtZT0iSW5wdXQyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOSIgbmFtZT0iT3V0cHV0MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOSIgYmluZGluZz0idG5zOkJpbmRpbmcyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMCIgbmFtZT0iSW5wdXQzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMCIgbmFtZT0iT3V0cHV0MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMCIgYmluZGluZz0idG5zOkJpbmRpbmczMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMSIgbmFtZT0iSW5wdXQzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMSIgbmFtZT0iT3V0cHV0MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMSIgYmluZGluZz0idG5zOkJpbmRpbmczMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMiIgbmFtZT0iSW5wdXQzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMiIgbmFtZT0iT3V0cHV0MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMiIgYmluZGluZz0idG5zOkJpbmRpbmczMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMyIgbmFtZT0iSW5wdXQzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMyIgbmFtZT0iT3V0cHV0MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMyIgYmluZGluZz0idG5zOkJpbmRpbmczMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNCIgbmFtZT0iSW5wdXQzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNCIgbmFtZT0iT3V0cHV0MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNCIgYmluZGluZz0idG5zOkJpbmRpbmczNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNSIgbmFtZT0iSW5wdXQzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNSIgbmFtZT0iT3V0cHV0MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNSIgYmluZGluZz0idG5zOkJpbmRpbmczNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNiIgbmFtZT0iSW5wdXQzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNiIgbmFtZT0iT3V0cHV0MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNiIgYmluZGluZz0idG5zOkJpbmRpbmczNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNyIgbmFtZT0iSW5wdXQzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNyIgbmFtZT0iT3V0cHV0MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNyIgYmluZGluZz0idG5zOkJpbmRpbmczNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOCIgbmFtZT0iSW5wdXQzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOCIgbmFtZT0iT3V0cHV0MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOCIgYmluZGluZz0idG5zOkJpbmRpbmczOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOSIgbmFtZT0iSW5wdXQzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOSIgbmFtZT0iT3V0cHV0MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOSIgYmluZGluZz0idG5zOkJpbmRpbmczOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MCIgbmFtZT0iSW5wdXQ0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MCIgbmFtZT0iT3V0cHV0NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MCIgYmluZGluZz0idG5zOkJpbmRpbmc0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MSIgbmFtZT0iSW5wdXQ0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MSIgbmFtZT0iT3V0cHV0NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MSIgYmluZGluZz0idG5zOkJpbmRpbmc0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MiIgbmFtZT0iSW5wdXQ0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MiIgbmFtZT0iT3V0cHV0NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MiIgYmluZGluZz0idG5zOkJpbmRpbmc0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MyIgbmFtZT0iSW5wdXQ0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MyIgbmFtZT0iT3V0cHV0NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MyIgYmluZGluZz0idG5zOkJpbmRpbmc0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NCIgbmFtZT0iSW5wdXQ0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NCIgbmFtZT0iT3V0cHV0NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NSIgbmFtZT0iSW5wdXQ0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NSIgbmFtZT0iT3V0cHV0NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NiIgbmFtZT0iSW5wdXQ0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NiIgbmFtZT0iT3V0cHV0NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NyIgbmFtZT0iSW5wdXQ0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NyIgbmFtZT0iT3V0cHV0NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OCIgbmFtZT0iSW5wdXQ0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OCIgbmFtZT0iT3V0cHV0NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OCIgYmluZGluZz0idG5zOkJpbmRpbmc0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OSIgbmFtZT0iSW5wdXQ0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OSIgbmFtZT0iT3V0cHV0NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OSIgYmluZGluZz0idG5zOkJpbmRpbmc0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MCIgbmFtZT0iSW5wdXQ1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MCIgbmFtZT0iT3V0cHV0NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MCIgYmluZGluZz0idG5zOkJpbmRpbmc1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MSIgbmFtZT0iSW5wdXQ1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MSIgbmFtZT0iT3V0cHV0NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MSIgYmluZGluZz0idG5zOkJpbmRpbmc1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MiIgbmFtZT0iSW5wdXQ1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MiIgbmFtZT0iT3V0cHV0NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MiIgYmluZGluZz0idG5zOkJpbmRpbmc1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MyIgbmFtZT0iSW5wdXQ1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MyIgbmFtZT0iT3V0cHV0NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MyIgYmluZGluZz0idG5zOkJpbmRpbmc1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NCIgbmFtZT0iSW5wdXQ1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NCIgbmFtZT0iT3V0cHV0NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NSIgbmFtZT0iSW5wdXQ1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NSIgbmFtZT0iT3V0cHV0NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NSIgYmluZGluZz0idG5zOkJpbmRpbmc1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NiIgbmFtZT0iSW5wdXQ1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NiIgbmFtZT0iT3V0cHV0NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NiIgYmluZGluZz0idG5zOkJpbmRpbmc1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NyIgbmFtZT0iSW5wdXQ1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NyIgbmFtZT0iT3V0cHV0NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OCIgbmFtZT0iSW5wdXQ1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OCIgbmFtZT0iT3V0cHV0NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OCIgYmluZGluZz0idG5zOkJpbmRpbmc1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OSIgbmFtZT0iSW5wdXQ1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OSIgbmFtZT0iT3V0cHV0NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OSIgYmluZGluZz0idG5zOkJpbmRpbmc1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MCIgbmFtZT0iSW5wdXQ2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MCIgbmFtZT0iT3V0cHV0NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MCIgYmluZGluZz0idG5zOkJpbmRpbmc2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MSIgbmFtZT0iSW5wdXQ2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MSIgbmFtZT0iT3V0cHV0NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MSIgYmluZGluZz0idG5zOkJpbmRpbmc2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MiIgbmFtZT0iSW5wdXQ2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MiIgbmFtZT0iT3V0cHV0NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MiIgYmluZGluZz0idG5zOkJpbmRpbmc2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MyIgbmFtZT0iSW5wdXQ2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MyIgbmFtZT0iT3V0cHV0NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MyIgYmluZGluZz0idG5zOkJpbmRpbmc2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NCIgbmFtZT0iSW5wdXQ2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NCIgbmFtZT0iT3V0cHV0NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NCIgYmluZGluZz0idG5zOkJpbmRpbmc2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NSIgbmFtZT0iSW5wdXQ2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NSIgbmFtZT0iT3V0cHV0NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NSIgYmluZGluZz0idG5zOkJpbmRpbmc2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NiIgbmFtZT0iSW5wdXQ2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NiIgbmFtZT0iT3V0cHV0NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NyIgbmFtZT0iSW5wdXQ2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NyIgbmFtZT0iT3V0cHV0NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NyIgYmluZGluZz0idG5zOkJpbmRpbmc2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OCIgbmFtZT0iSW5wdXQ2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OCIgbmFtZT0iT3V0cHV0NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OCIgYmluZGluZz0idG5zOkJpbmRpbmc2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OSIgbmFtZT0iSW5wdXQ2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OSIgbmFtZT0iT3V0cHV0NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OSIgYmluZGluZz0idG5zOkJpbmRpbmc2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MCIgbmFtZT0iSW5wdXQ3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MCIgbmFtZT0iT3V0cHV0NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MCIgYmluZGluZz0idG5zOkJpbmRpbmc3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MSIgbmFtZT0iSW5wdXQ3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MSIgbmFtZT0iT3V0cHV0NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MSIgYmluZGluZz0idG5zOkJpbmRpbmc3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MiIgbmFtZT0iSW5wdXQ3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MiIgbmFtZT0iT3V0cHV0NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MiIgYmluZGluZz0idG5zOkJpbmRpbmc3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MyIgbmFtZT0iSW5wdXQ3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MyIgbmFtZT0iT3V0cHV0NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MyIgYmluZGluZz0idG5zOkJpbmRpbmc3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NCIgbmFtZT0iSW5wdXQ3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NCIgbmFtZT0iT3V0cHV0NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NCIgYmluZGluZz0idG5zOkJpbmRpbmc3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NSIgbmFtZT0iSW5wdXQ3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NSIgbmFtZT0iT3V0cHV0NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NiIgbmFtZT0iSW5wdXQ3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NiIgbmFtZT0iT3V0cHV0NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NiIgYmluZGluZz0idG5zOkJpbmRpbmc3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NyIgbmFtZT0iSW5wdXQ3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NyIgbmFtZT0iT3V0cHV0NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NyIgYmluZGluZz0idG5zOkJpbmRpbmc3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OCIgbmFtZT0iSW5wdXQ3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OCIgbmFtZT0iT3V0cHV0NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OCIgYmluZGluZz0idG5zOkJpbmRpbmc3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OSIgbmFtZT0iSW5wdXQ3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OSIgbmFtZT0iT3V0cHV0NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OSIgYmluZGluZz0idG5zOkJpbmRpbmc3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MCIgbmFtZT0iSW5wdXQ4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MCIgbmFtZT0iT3V0cHV0ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MCIgYmluZGluZz0idG5zOkJpbmRpbmc4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MSIgbmFtZT0iSW5wdXQ4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MSIgbmFtZT0iT3V0cHV0ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MSIgYmluZGluZz0idG5zOkJpbmRpbmc4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MiIgbmFtZT0iSW5wdXQ4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MiIgbmFtZT0iT3V0cHV0ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MiIgYmluZGluZz0idG5zOkJpbmRpbmc4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MyIgbmFtZT0iSW5wdXQ4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MyIgbmFtZT0iT3V0cHV0ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MyIgYmluZGluZz0idG5zOkJpbmRpbmc4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NCIgbmFtZT0iSW5wdXQ4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NCIgbmFtZT0iT3V0cHV0ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NSIgbmFtZT0iSW5wdXQ4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NSIgbmFtZT0iT3V0cHV0ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NSIgYmluZGluZz0idG5zOkJpbmRpbmc4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NiIgbmFtZT0iSW5wdXQ4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NiIgbmFtZT0iT3V0cHV0ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NiIgYmluZGluZz0idG5zOkJpbmRpbmc4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NyIgbmFtZT0iSW5wdXQ4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NyIgbmFtZT0iT3V0cHV0ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OCIgbmFtZT0iSW5wdXQ4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OCIgbmFtZT0iT3V0cHV0ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OCIgYmluZGluZz0idG5zOkJpbmRpbmc4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OSIgbmFtZT0iSW5wdXQ4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OSIgbmFtZT0iT3V0cHV0ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OSIgYmluZGluZz0idG5zOkJpbmRpbmc4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MCIgbmFtZT0iSW5wdXQ5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MCIgbmFtZT0iT3V0cHV0OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MCIgYmluZGluZz0idG5zOkJpbmRpbmc5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MSIgbmFtZT0iSW5wdXQ5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MSIgbmFtZT0iT3V0cHV0OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MSIgYmluZGluZz0idG5zOkJpbmRpbmc5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MiIgbmFtZT0iSW5wdXQ5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MiIgbmFtZT0iT3V0cHV0OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MiIgYmluZGluZz0idG5zOkJpbmRpbmc5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MyIgbmFtZT0iSW5wdXQ5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MyIgbmFtZT0iT3V0cHV0OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MyIgYmluZGluZz0idG5zOkJpbmRpbmc5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NCIgbmFtZT0iSW5wdXQ5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NCIgbmFtZT0iT3V0cHV0OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NCIgYmluZGluZz0idG5zOkJpbmRpbmc5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NSIgbmFtZT0iSW5wdXQ5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NSIgbmFtZT0iT3V0cHV0OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NSIgYmluZGluZz0idG5zOkJpbmRpbmc5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NiIgbmFtZT0iSW5wdXQ5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NiIgbmFtZT0iT3V0cHV0OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NyIgbmFtZT0iSW5wdXQ5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NyIgbmFtZT0iT3V0cHV0OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NyIgYmluZGluZz0idG5zOkJpbmRpbmc5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OCIgbmFtZT0iSW5wdXQ5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OCIgbmFtZT0iT3V0cHV0OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OCIgYmluZGluZz0idG5zOkJpbmRpbmc5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OSIgbmFtZT0iSW5wdXQ5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OSIgbmFtZT0iT3V0cHV0OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OSIgYmluZGluZz0idG5zOkJpbmRpbmc5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDAiIG5hbWU9IklucHV0MTAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMCIgbmFtZT0iT3V0cHV0MTAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDAiIHR5cGU9InRuczpQb3J0VHlwZTEwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMSIgbmFtZT0iSW5wdXQxMDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAxIiBuYW1lPSJPdXRwdXQxMDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMSIgdHlwZT0idG5zOlBvcnRUeXBlMTAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAyIiBuYW1lPSJJbnB1dDEwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDIiIG5hbWU9Ik91dHB1dDEwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDMiIG5hbWU9IklucHV0MTAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMyIgbmFtZT0iT3V0cHV0MTAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDMiIHR5cGU9InRuczpQb3J0VHlwZTEwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNCIgbmFtZT0iSW5wdXQxMDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA0IiBuYW1lPSJPdXRwdXQxMDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNCIgdHlwZT0idG5zOlBvcnRUeXBlMTA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA1IiBuYW1lPSJJbnB1dDEwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDUiIG5hbWU9Ik91dHB1dDEwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDYiIG5hbWU9IklucHV0MTA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNiIgbmFtZT0iT3V0cHV0MTA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDYiIHR5cGU9InRuczpQb3J0VHlwZTEwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNyIgbmFtZT0iSW5wdXQxMDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA3IiBuYW1lPSJPdXRwdXQxMDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNyIgdHlwZT0idG5zOlBvcnRUeXBlMTA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA4IiBuYW1lPSJJbnB1dDEwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDgiIG5hbWU9Ik91dHB1dDEwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDkiIG5hbWU9IklucHV0MTA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwOSIgbmFtZT0iT3V0cHV0MTA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDkiIHR5cGU9InRuczpQb3J0VHlwZTEwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMCIgbmFtZT0iSW5wdXQxMTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEwIiBuYW1lPSJPdXRwdXQxMTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMCIgdHlwZT0idG5zOlBvcnRUeXBlMTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTExIiBuYW1lPSJJbnB1dDExMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTEiIG5hbWU9Ik91dHB1dDExMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTExIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTIiIG5hbWU9IklucHV0MTEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMiIgbmFtZT0iT3V0cHV0MTEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTIiIHR5cGU9InRuczpQb3J0VHlwZTExMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMyIgbmFtZT0iSW5wdXQxMTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEzIiBuYW1lPSJPdXRwdXQxMTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMyIgdHlwZT0idG5zOlBvcnRUeXBlMTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE0IiBuYW1lPSJJbnB1dDExNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTQiIG5hbWU9Ik91dHB1dDExNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTUiIG5hbWU9IklucHV0MTE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNSIgbmFtZT0iT3V0cHV0MTE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTUiIHR5cGU9InRuczpQb3J0VHlwZTExNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNiIgbmFtZT0iSW5wdXQxMTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE2IiBuYW1lPSJPdXRwdXQxMTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNiIgdHlwZT0idG5zOlBvcnRUeXBlMTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE3IiBuYW1lPSJJbnB1dDExNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTciIG5hbWU9Ik91dHB1dDExNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTgiIG5hbWU9IklucHV0MTE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExOCIgbmFtZT0iT3V0cHV0MTE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTgiIHR5cGU9InRuczpQb3J0VHlwZTExOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExOSIgbmFtZT0iSW5wdXQxMTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE5IiBuYW1lPSJPdXRwdXQxMTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExOSIgdHlwZT0idG5zOlBvcnRUeXBlMTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIwIiBuYW1lPSJJbnB1dDEyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjAiIG5hbWU9Ik91dHB1dDEyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjEiIG5hbWU9IklucHV0MTIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMSIgbmFtZT0iT3V0cHV0MTIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjEiIHR5cGU9InRuczpQb3J0VHlwZTEyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMiIgbmFtZT0iSW5wdXQxMjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIyIiBuYW1lPSJPdXRwdXQxMjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMiIgdHlwZT0idG5zOlBvcnRUeXBlMTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIzIiBuYW1lPSJJbnB1dDEyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjMiIG5hbWU9Ik91dHB1dDEyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjQiIG5hbWU9IklucHV0MTI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNCIgbmFtZT0iT3V0cHV0MTI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjQiIHR5cGU9InRuczpQb3J0VHlwZTEyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNSIgbmFtZT0iSW5wdXQxMjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI1IiBuYW1lPSJPdXRwdXQxMjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNSIgdHlwZT0idG5zOlBvcnRUeXBlMTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI2IiBuYW1lPSJJbnB1dDEyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjYiIG5hbWU9Ik91dHB1dDEyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjciIG5hbWU9IklucHV0MTI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNyIgbmFtZT0iT3V0cHV0MTI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjciIHR5cGU9InRuczpQb3J0VHlwZTEyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjciIGJpbmRpbmc9InRuczpCaW5kaW5nMTI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyOCIgbmFtZT0iSW5wdXQxMjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI4IiBuYW1lPSJPdXRwdXQxMjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyOCIgdHlwZT0idG5zOlBvcnRUeXBlMTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI5IiBuYW1lPSJJbnB1dDEyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjkiIG5hbWU9Ik91dHB1dDEyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzAiIG5hbWU9IklucHV0MTMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMCIgbmFtZT0iT3V0cHV0MTMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzAiIHR5cGU9InRuczpQb3J0VHlwZTEzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMSIgbmFtZT0iSW5wdXQxMzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMxIiBuYW1lPSJPdXRwdXQxMzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMSIgdHlwZT0idG5zOlBvcnRUeXBlMTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMyIiBuYW1lPSJJbnB1dDEzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzIiIG5hbWU9Ik91dHB1dDEzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzMiIG5hbWU9IklucHV0MTMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMyIgbmFtZT0iT3V0cHV0MTMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzMiIHR5cGU9InRuczpQb3J0VHlwZTEzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNCIgbmFtZT0iSW5wdXQxMzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM0IiBuYW1lPSJPdXRwdXQxMzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNCIgdHlwZT0idG5zOlBvcnRUeXBlMTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM1IiBuYW1lPSJJbnB1dDEzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzUiIG5hbWU9Ik91dHB1dDEzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzYiIG5hbWU9IklucHV0MTM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNiIgbmFtZT0iT3V0cHV0MTM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzYiIHR5cGU9InRuczpQb3J0VHlwZTEzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNyIgbmFtZT0iSW5wdXQxMzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM3IiBuYW1lPSJPdXRwdXQxMzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNyIgdHlwZT0idG5zOlBvcnRUeXBlMTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM4IiBuYW1lPSJJbnB1dDEzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzgiIG5hbWU9Ik91dHB1dDEzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzkiIG5hbWU9IklucHV0MTM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzOSIgbmFtZT0iT3V0cHV0MTM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzkiIHR5cGU9InRuczpQb3J0VHlwZTEzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MCIgbmFtZT0iSW5wdXQxNDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQwIiBuYW1lPSJPdXRwdXQxNDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MCIgdHlwZT0idG5zOlBvcnRUeXBlMTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQxIiBuYW1lPSJJbnB1dDE0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDEiIG5hbWU9Ik91dHB1dDE0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDIiIG5hbWU9IklucHV0MTQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MiIgbmFtZT0iT3V0cHV0MTQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDIiIHR5cGU9InRuczpQb3J0VHlwZTE0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MyIgbmFtZT0iSW5wdXQxNDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQzIiBuYW1lPSJPdXRwdXQxNDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MyIgdHlwZT0idG5zOlBvcnRUeXBlMTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ0IiBuYW1lPSJJbnB1dDE0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDQiIG5hbWU9Ik91dHB1dDE0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDUiIG5hbWU9IklucHV0MTQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NSIgbmFtZT0iT3V0cHV0MTQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDUiIHR5cGU9InRuczpQb3J0VHlwZTE0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NiIgbmFtZT0iSW5wdXQxNDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ2IiBuYW1lPSJPdXRwdXQxNDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NiIgdHlwZT0idG5zOlBvcnRUeXBlMTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ3IiBuYW1lPSJJbnB1dDE0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDciIG5hbWU9Ik91dHB1dDE0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDgiIG5hbWU9IklucHV0MTQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0OCIgbmFtZT0iT3V0cHV0MTQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDgiIHR5cGU9InRuczpQb3J0VHlwZTE0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0OSIgbmFtZT0iSW5wdXQxNDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ5IiBuYW1lPSJPdXRwdXQxNDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0OSIgdHlwZT0idG5zOlBvcnRUeXBlMTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUwIiBuYW1lPSJJbnB1dDE1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTAiIG5hbWU9Ik91dHB1dDE1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTEiIG5hbWU9IklucHV0MTUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MSIgbmFtZT0iT3V0cHV0MTUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTEiIHR5cGU9InRuczpQb3J0VHlwZTE1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MiIgbmFtZT0iSW5wdXQxNTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUyIiBuYW1lPSJPdXRwdXQxNTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MiIgdHlwZT0idG5zOlBvcnRUeXBlMTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUzIiBuYW1lPSJJbnB1dDE1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTMiIG5hbWU9Ik91dHB1dDE1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTQiIG5hbWU9IklucHV0MTU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NCIgbmFtZT0iT3V0cHV0MTU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTQiIHR5cGU9InRuczpQb3J0VHlwZTE1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NSIgbmFtZT0iSW5wdXQxNTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU1IiBuYW1lPSJPdXRwdXQxNTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NSIgdHlwZT0idG5zOlBvcnRUeXBlMTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU2IiBuYW1lPSJJbnB1dDE1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTYiIG5hbWU9Ik91dHB1dDE1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTciIG5hbWU9IklucHV0MTU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NyIgbmFtZT0iT3V0cHV0MTU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTciIHR5cGU9InRuczpQb3J0VHlwZTE1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1OCIgbmFtZT0iSW5wdXQxNTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU4IiBuYW1lPSJPdXRwdXQxNTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1OCIgdHlwZT0idG5zOlBvcnRUeXBlMTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU5IiBuYW1lPSJJbnB1dDE1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTkiIG5hbWU9Ik91dHB1dDE1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjAiIG5hbWU9IklucHV0MTYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MCIgbmFtZT0iT3V0cHV0MTYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjAiIHR5cGU9InRuczpQb3J0VHlwZTE2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MSIgbmFtZT0iSW5wdXQxNjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYxIiBuYW1lPSJPdXRwdXQxNjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MSIgdHlwZT0idG5zOlBvcnRUeXBlMTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYyIiBuYW1lPSJJbnB1dDE2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjIiIG5hbWU9Ik91dHB1dDE2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjMiIG5hbWU9IklucHV0MTYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MyIgbmFtZT0iT3V0cHV0MTYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjMiIHR5cGU9InRuczpQb3J0VHlwZTE2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NCIgbmFtZT0iSW5wdXQxNjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY0IiBuYW1lPSJPdXRwdXQxNjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NCIgdHlwZT0idG5zOlBvcnRUeXBlMTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY1IiBuYW1lPSJJbnB1dDE2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjUiIG5hbWU9Ik91dHB1dDE2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjYiIG5hbWU9IklucHV0MTY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NiIgbmFtZT0iT3V0cHV0MTY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjYiIHR5cGU9InRuczpQb3J0VHlwZTE2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NyIgbmFtZT0iSW5wdXQxNjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY3IiBuYW1lPSJPdXRwdXQxNjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NyIgdHlwZT0idG5zOlBvcnRUeXBlMTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY4IiBuYW1lPSJJbnB1dDE2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjgiIG5hbWU9Ik91dHB1dDE2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjkiIG5hbWU9IklucHV0MTY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2OSIgbmFtZT0iT3V0cHV0MTY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjkiIHR5cGU9InRuczpQb3J0VHlwZTE2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MCIgbmFtZT0iSW5wdXQxNzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcwIiBuYW1lPSJPdXRwdXQxNzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MCIgdHlwZT0idG5zOlBvcnRUeXBlMTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcxIiBuYW1lPSJJbnB1dDE3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzEiIG5hbWU9Ik91dHB1dDE3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzIiIG5hbWU9IklucHV0MTcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MiIgbmFtZT0iT3V0cHV0MTcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzIiIHR5cGU9InRuczpQb3J0VHlwZTE3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MyIgbmFtZT0iSW5wdXQxNzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTczIiBuYW1lPSJPdXRwdXQxNzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MyIgdHlwZT0idG5zOlBvcnRUeXBlMTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc0IiBuYW1lPSJJbnB1dDE3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzQiIG5hbWU9Ik91dHB1dDE3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzUiIG5hbWU9IklucHV0MTc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NSIgbmFtZT0iT3V0cHV0MTc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzUiIHR5cGU9InRuczpQb3J0VHlwZTE3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NiIgbmFtZT0iSW5wdXQxNzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc2IiBuYW1lPSJPdXRwdXQxNzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NiIgdHlwZT0idG5zOlBvcnRUeXBlMTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc3IiBuYW1lPSJJbnB1dDE3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzciIG5hbWU9Ik91dHB1dDE3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzgiIG5hbWU9IklucHV0MTc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3OCIgbmFtZT0iT3V0cHV0MTc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzgiIHR5cGU9InRuczpQb3J0VHlwZTE3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3OSIgbmFtZT0iSW5wdXQxNzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc5IiBuYW1lPSJPdXRwdXQxNzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3OSIgdHlwZT0idG5zOlBvcnRUeXBlMTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgwIiBuYW1lPSJJbnB1dDE4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODAiIG5hbWU9Ik91dHB1dDE4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODEiIG5hbWU9IklucHV0MTgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MSIgbmFtZT0iT3V0cHV0MTgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODEiIHR5cGU9InRuczpQb3J0VHlwZTE4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MiIgbmFtZT0iSW5wdXQxODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgyIiBuYW1lPSJPdXRwdXQxODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MiIgdHlwZT0idG5zOlBvcnRUeXBlMTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MiIgYmluZGluZz0idG5zOkJpbmRpbmcxODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgzIiBuYW1lPSJJbnB1dDE4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODMiIG5hbWU9Ik91dHB1dDE4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODQiIG5hbWU9IklucHV0MTg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NCIgbmFtZT0iT3V0cHV0MTg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODQiIHR5cGU9InRuczpQb3J0VHlwZTE4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NSIgbmFtZT0iSW5wdXQxODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg1IiBuYW1lPSJPdXRwdXQxODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NSIgdHlwZT0idG5zOlBvcnRUeXBlMTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NSIgYmluZGluZz0idG5zOkJpbmRpbmcxODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg2IiBuYW1lPSJJbnB1dDE4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODYiIG5hbWU9Ik91dHB1dDE4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODciIG5hbWU9IklucHV0MTg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NyIgbmFtZT0iT3V0cHV0MTg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODciIHR5cGU9InRuczpQb3J0VHlwZTE4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODciIGJpbmRpbmc9InRuczpCaW5kaW5nMTg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4OCIgbmFtZT0iSW5wdXQxODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg4IiBuYW1lPSJPdXRwdXQxODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4OCIgdHlwZT0idG5zOlBvcnRUeXBlMTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4OCIgYmluZGluZz0idG5zOkJpbmRpbmcxODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg5IiBuYW1lPSJJbnB1dDE4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODkiIG5hbWU9Ik91dHB1dDE4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTAiIG5hbWU9IklucHV0MTkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MCIgbmFtZT0iT3V0cHV0MTkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTAiIHR5cGU9InRuczpQb3J0VHlwZTE5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MSIgbmFtZT0iSW5wdXQxOTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkxIiBuYW1lPSJPdXRwdXQxOTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MSIgdHlwZT0idG5zOlBvcnRUeXBlMTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkyIiBuYW1lPSJJbnB1dDE5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTIiIG5hbWU9Ik91dHB1dDE5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTMiIG5hbWU9IklucHV0MTkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MyIgbmFtZT0iT3V0cHV0MTkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTMiIHR5cGU9InRuczpQb3J0VHlwZTE5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NCIgbmFtZT0iSW5wdXQxOTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk0IiBuYW1lPSJPdXRwdXQxOTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NCIgdHlwZT0idG5zOlBvcnRUeXBlMTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk1IiBuYW1lPSJJbnB1dDE5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTUiIG5hbWU9Ik91dHB1dDE5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTYiIG5hbWU9IklucHV0MTk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NiIgbmFtZT0iT3V0cHV0MTk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTYiIHR5cGU9InRuczpQb3J0VHlwZTE5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NyIgbmFtZT0iSW5wdXQxOTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk3IiBuYW1lPSJPdXRwdXQxOTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NyIgdHlwZT0idG5zOlBvcnRUeXBlMTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NyIgYmluZGluZz0idG5zOkJpbmRpbmcxOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk4IiBuYW1lPSJJbnB1dDE5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTgiIG5hbWU9Ik91dHB1dDE5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTkiIG5hbWU9IklucHV0MTk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5OSIgbmFtZT0iT3V0cHV0MTk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTkiIHR5cGU9InRuczpQb3J0VHlwZTE5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvNTAwS0Iud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvNTAwS0Iud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VhYjgzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzUwMEtCLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iRGVmaW5pdGlvbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UwIiBuYW1lPSJJbnB1dDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMCIgbmFtZT0iT3V0cHV0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMCIgdHlwZT0idG5zOlBvcnRUeXBlMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMSIgbmFtZT0iSW5wdXQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEiIG5hbWU9Ik91dHB1dDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEiIHR5cGU9InRuczpQb3J0VHlwZTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIiIG5hbWU9IklucHV0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyIiBuYW1lPSJPdXRwdXQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzIiBuYW1lPSJJbnB1dDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMyIgbmFtZT0iT3V0cHV0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMyIgdHlwZT0idG5zOlBvcnRUeXBlMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNCIgbmFtZT0iSW5wdXQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQiIG5hbWU9Ik91dHB1dDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQiIHR5cGU9InRuczpQb3J0VHlwZTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUiIG5hbWU9IklucHV0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1IiBuYW1lPSJPdXRwdXQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2IiBuYW1lPSJJbnB1dDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNiIgbmFtZT0iT3V0cHV0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNiIgdHlwZT0idG5zOlBvcnRUeXBlNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNyIgbmFtZT0iSW5wdXQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTciIG5hbWU9Ik91dHB1dDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzciIHR5cGU9InRuczpQb3J0VHlwZTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NyIgYmluZGluZz0idG5zOkJpbmRpbmc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgiIG5hbWU9IklucHV0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4IiBuYW1lPSJPdXRwdXQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5IiBuYW1lPSJJbnB1dDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOSIgbmFtZT0iT3V0cHV0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOSIgdHlwZT0idG5zOlBvcnRUeXBlOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAiIG5hbWU9IklucHV0MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAiIG5hbWU9Ik91dHB1dDEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMCIgdHlwZT0idG5zOlBvcnRUeXBlMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEiIG5hbWU9IklucHV0MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEiIG5hbWU9Ik91dHB1dDExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMSIgdHlwZT0idG5zOlBvcnRUeXBlMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIiIG5hbWU9IklucHV0MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIiIG5hbWU9Ik91dHB1dDEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMiIgdHlwZT0idG5zOlBvcnRUeXBlMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMiIG5hbWU9IklucHV0MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMiIG5hbWU9Ik91dHB1dDEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMyIgdHlwZT0idG5zOlBvcnRUeXBlMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQiIG5hbWU9IklucHV0MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQiIG5hbWU9Ik91dHB1dDE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNCIgdHlwZT0idG5zOlBvcnRUeXBlMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUiIG5hbWU9IklucHV0MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUiIG5hbWU9Ik91dHB1dDE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNSIgdHlwZT0idG5zOlBvcnRUeXBlMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYiIG5hbWU9IklucHV0MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYiIG5hbWU9Ik91dHB1dDE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNiIgdHlwZT0idG5zOlBvcnRUeXBlMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTciIG5hbWU9IklucHV0MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTciIG5hbWU9Ik91dHB1dDE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNyIgdHlwZT0idG5zOlBvcnRUeXBlMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgiIG5hbWU9IklucHV0MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgiIG5hbWU9Ik91dHB1dDE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOCIgdHlwZT0idG5zOlBvcnRUeXBlMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkiIG5hbWU9IklucHV0MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkiIG5hbWU9Ik91dHB1dDE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOSIgdHlwZT0idG5zOlBvcnRUeXBlMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAiIG5hbWU9IklucHV0MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAiIG5hbWU9Ik91dHB1dDIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMCIgdHlwZT0idG5zOlBvcnRUeXBlMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEiIG5hbWU9IklucHV0MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEiIG5hbWU9Ik91dHB1dDIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMSIgdHlwZT0idG5zOlBvcnRUeXBlMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIiIG5hbWU9IklucHV0MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIiIG5hbWU9Ik91dHB1dDIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMiIgdHlwZT0idG5zOlBvcnRUeXBlMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMiIG5hbWU9IklucHV0MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMiIG5hbWU9Ik91dHB1dDIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMyIgdHlwZT0idG5zOlBvcnRUeXBlMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQiIG5hbWU9IklucHV0MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQiIG5hbWU9Ik91dHB1dDI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNCIgdHlwZT0idG5zOlBvcnRUeXBlMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUiIG5hbWU9IklucHV0MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUiIG5hbWU9Ik91dHB1dDI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNSIgdHlwZT0idG5zOlBvcnRUeXBlMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYiIG5hbWU9IklucHV0MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYiIG5hbWU9Ik91dHB1dDI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNiIgdHlwZT0idG5zOlBvcnRUeXBlMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjciIG5hbWU9IklucHV0MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjciIG5hbWU9Ik91dHB1dDI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNyIgdHlwZT0idG5zOlBvcnRUeXBlMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgiIG5hbWU9IklucHV0MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgiIG5hbWU9Ik91dHB1dDI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOCIgdHlwZT0idG5zOlBvcnRUeXBlMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkiIG5hbWU9IklucHV0MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkiIG5hbWU9Ik91dHB1dDI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOSIgdHlwZT0idG5zOlBvcnRUeXBlMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAiIG5hbWU9IklucHV0MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAiIG5hbWU9Ik91dHB1dDMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMCIgdHlwZT0idG5zOlBvcnRUeXBlMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEiIG5hbWU9IklucHV0MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEiIG5hbWU9Ik91dHB1dDMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMSIgdHlwZT0idG5zOlBvcnRUeXBlMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIiIG5hbWU9IklucHV0MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIiIG5hbWU9Ik91dHB1dDMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMiIgdHlwZT0idG5zOlBvcnRUeXBlMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMiIG5hbWU9IklucHV0MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMiIG5hbWU9Ik91dHB1dDMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMyIgdHlwZT0idG5zOlBvcnRUeXBlMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQiIG5hbWU9IklucHV0MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQiIG5hbWU9Ik91dHB1dDM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNCIgdHlwZT0idG5zOlBvcnRUeXBlMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUiIG5hbWU9IklucHV0MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUiIG5hbWU9Ik91dHB1dDM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNSIgdHlwZT0idG5zOlBvcnRUeXBlMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYiIG5hbWU9IklucHV0MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYiIG5hbWU9Ik91dHB1dDM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNiIgdHlwZT0idG5zOlBvcnRUeXBlMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzciIG5hbWU9IklucHV0MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzciIG5hbWU9Ik91dHB1dDM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNyIgdHlwZT0idG5zOlBvcnRUeXBlMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgiIG5hbWU9IklucHV0MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgiIG5hbWU9Ik91dHB1dDM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOCIgdHlwZT0idG5zOlBvcnRUeXBlMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkiIG5hbWU9IklucHV0MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkiIG5hbWU9Ik91dHB1dDM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOSIgdHlwZT0idG5zOlBvcnRUeXBlMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAiIG5hbWU9IklucHV0NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAiIG5hbWU9Ik91dHB1dDQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MCIgdHlwZT0idG5zOlBvcnRUeXBlNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEiIG5hbWU9IklucHV0NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEiIG5hbWU9Ik91dHB1dDQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MSIgdHlwZT0idG5zOlBvcnRUeXBlNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIiIG5hbWU9IklucHV0NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIiIG5hbWU9Ik91dHB1dDQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MiIgdHlwZT0idG5zOlBvcnRUeXBlNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMiIG5hbWU9IklucHV0NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMiIG5hbWU9Ik91dHB1dDQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MyIgdHlwZT0idG5zOlBvcnRUeXBlNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQiIG5hbWU9IklucHV0NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQiIG5hbWU9Ik91dHB1dDQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NCIgdHlwZT0idG5zOlBvcnRUeXBlNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUiIG5hbWU9IklucHV0NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUiIG5hbWU9Ik91dHB1dDQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NSIgdHlwZT0idG5zOlBvcnRUeXBlNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYiIG5hbWU9IklucHV0NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYiIG5hbWU9Ik91dHB1dDQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NiIgdHlwZT0idG5zOlBvcnRUeXBlNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDciIG5hbWU9IklucHV0NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDciIG5hbWU9Ik91dHB1dDQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NyIgdHlwZT0idG5zOlBvcnRUeXBlNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgiIG5hbWU9IklucHV0NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgiIG5hbWU9Ik91dHB1dDQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OCIgdHlwZT0idG5zOlBvcnRUeXBlNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkiIG5hbWU9IklucHV0NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkiIG5hbWU9Ik91dHB1dDQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OSIgdHlwZT0idG5zOlBvcnRUeXBlNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAiIG5hbWU9IklucHV0NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAiIG5hbWU9Ik91dHB1dDUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MCIgdHlwZT0idG5zOlBvcnRUeXBlNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTEiIG5hbWU9IklucHV0NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTEiIG5hbWU9Ik91dHB1dDUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MSIgdHlwZT0idG5zOlBvcnRUeXBlNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIiIG5hbWU9IklucHV0NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIiIG5hbWU9Ik91dHB1dDUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MiIgdHlwZT0idG5zOlBvcnRUeXBlNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMiIG5hbWU9IklucHV0NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMiIG5hbWU9Ik91dHB1dDUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MyIgdHlwZT0idG5zOlBvcnRUeXBlNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQiIG5hbWU9IklucHV0NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQiIG5hbWU9Ik91dHB1dDU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NCIgdHlwZT0idG5zOlBvcnRUeXBlNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUiIG5hbWU9IklucHV0NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUiIG5hbWU9Ik91dHB1dDU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NSIgdHlwZT0idG5zOlBvcnRUeXBlNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYiIG5hbWU9IklucHV0NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYiIG5hbWU9Ik91dHB1dDU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NiIgdHlwZT0idG5zOlBvcnRUeXBlNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTciIG5hbWU9IklucHV0NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTciIG5hbWU9Ik91dHB1dDU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NyIgdHlwZT0idG5zOlBvcnRUeXBlNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgiIG5hbWU9IklucHV0NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgiIG5hbWU9Ik91dHB1dDU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OCIgdHlwZT0idG5zOlBvcnRUeXBlNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkiIG5hbWU9IklucHV0NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkiIG5hbWU9Ik91dHB1dDU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OSIgdHlwZT0idG5zOlBvcnRUeXBlNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAiIG5hbWU9IklucHV0NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAiIG5hbWU9Ik91dHB1dDYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MCIgdHlwZT0idG5zOlBvcnRUeXBlNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjEiIG5hbWU9IklucHV0NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEiIG5hbWU9Ik91dHB1dDYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MSIgdHlwZT0idG5zOlBvcnRUeXBlNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIiIG5hbWU9IklucHV0NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIiIG5hbWU9Ik91dHB1dDYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MiIgdHlwZT0idG5zOlBvcnRUeXBlNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMiIG5hbWU9IklucHV0NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMiIG5hbWU9Ik91dHB1dDYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MyIgdHlwZT0idG5zOlBvcnRUeXBlNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQiIG5hbWU9IklucHV0NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQiIG5hbWU9Ik91dHB1dDY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NCIgdHlwZT0idG5zOlBvcnRUeXBlNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUiIG5hbWU9IklucHV0NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUiIG5hbWU9Ik91dHB1dDY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NSIgdHlwZT0idG5zOlBvcnRUeXBlNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYiIG5hbWU9IklucHV0NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYiIG5hbWU9Ik91dHB1dDY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NiIgdHlwZT0idG5zOlBvcnRUeXBlNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjciIG5hbWU9IklucHV0NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjciIG5hbWU9Ik91dHB1dDY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NyIgdHlwZT0idG5zOlBvcnRUeXBlNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgiIG5hbWU9IklucHV0NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgiIG5hbWU9Ik91dHB1dDY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OCIgdHlwZT0idG5zOlBvcnRUeXBlNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkiIG5hbWU9IklucHV0NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkiIG5hbWU9Ik91dHB1dDY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OSIgdHlwZT0idG5zOlBvcnRUeXBlNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAiIG5hbWU9IklucHV0NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAiIG5hbWU9Ik91dHB1dDcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MCIgdHlwZT0idG5zOlBvcnRUeXBlNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEiIG5hbWU9IklucHV0NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzEiIG5hbWU9Ik91dHB1dDcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MSIgdHlwZT0idG5zOlBvcnRUeXBlNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIiIG5hbWU9IklucHV0NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIiIG5hbWU9Ik91dHB1dDcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MiIgdHlwZT0idG5zOlBvcnRUeXBlNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMiIG5hbWU9IklucHV0NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMiIG5hbWU9Ik91dHB1dDczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MyIgdHlwZT0idG5zOlBvcnRUeXBlNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQiIG5hbWU9IklucHV0NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQiIG5hbWU9Ik91dHB1dDc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NCIgdHlwZT0idG5zOlBvcnRUeXBlNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUiIG5hbWU9IklucHV0NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUiIG5hbWU9Ik91dHB1dDc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NSIgdHlwZT0idG5zOlBvcnRUeXBlNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYiIG5hbWU9IklucHV0NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYiIG5hbWU9Ik91dHB1dDc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NiIgdHlwZT0idG5zOlBvcnRUeXBlNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzciIG5hbWU9IklucHV0NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzciIG5hbWU9Ik91dHB1dDc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NyIgdHlwZT0idG5zOlBvcnRUeXBlNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgiIG5hbWU9IklucHV0NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgiIG5hbWU9Ik91dHB1dDc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OCIgdHlwZT0idG5zOlBvcnRUeXBlNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkiIG5hbWU9IklucHV0NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkiIG5hbWU9Ik91dHB1dDc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OSIgdHlwZT0idG5zOlBvcnRUeXBlNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAiIG5hbWU9IklucHV0ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAiIG5hbWU9Ik91dHB1dDgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MCIgdHlwZT0idG5zOlBvcnRUeXBlODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODEiIG5hbWU9IklucHV0ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODEiIG5hbWU9Ik91dHB1dDgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MSIgdHlwZT0idG5zOlBvcnRUeXBlODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIiIG5hbWU9IklucHV0ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIiIG5hbWU9Ik91dHB1dDgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MiIgdHlwZT0idG5zOlBvcnRUeXBlODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMiIG5hbWU9IklucHV0ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMiIG5hbWU9Ik91dHB1dDgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MyIgdHlwZT0idG5zOlBvcnRUeXBlODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQiIG5hbWU9IklucHV0ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQiIG5hbWU9Ik91dHB1dDg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NCIgdHlwZT0idG5zOlBvcnRUeXBlODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUiIG5hbWU9IklucHV0ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUiIG5hbWU9Ik91dHB1dDg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NSIgdHlwZT0idG5zOlBvcnRUeXBlODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYiIG5hbWU9IklucHV0ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYiIG5hbWU9Ik91dHB1dDg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NiIgdHlwZT0idG5zOlBvcnRUeXBlODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODciIG5hbWU9IklucHV0ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODciIG5hbWU9Ik91dHB1dDg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NyIgdHlwZT0idG5zOlBvcnRUeXBlODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODciIGJpbmRpbmc9InRuczpCaW5kaW5nODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgiIG5hbWU9IklucHV0ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgiIG5hbWU9Ik91dHB1dDg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OCIgdHlwZT0idG5zOlBvcnRUeXBlODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkiIG5hbWU9IklucHV0ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkiIG5hbWU9Ik91dHB1dDg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OSIgdHlwZT0idG5zOlBvcnRUeXBlODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAiIG5hbWU9IklucHV0OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAiIG5hbWU9Ik91dHB1dDkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MCIgdHlwZT0idG5zOlBvcnRUeXBlOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTEiIG5hbWU9IklucHV0OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEiIG5hbWU9Ik91dHB1dDkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MSIgdHlwZT0idG5zOlBvcnRUeXBlOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIiIG5hbWU9IklucHV0OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIiIG5hbWU9Ik91dHB1dDkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MiIgdHlwZT0idG5zOlBvcnRUeXBlOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMiIG5hbWU9IklucHV0OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMiIG5hbWU9Ik91dHB1dDkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MyIgdHlwZT0idG5zOlBvcnRUeXBlOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQiIG5hbWU9IklucHV0OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQiIG5hbWU9Ik91dHB1dDk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NCIgdHlwZT0idG5zOlBvcnRUeXBlOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUiIG5hbWU9IklucHV0OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUiIG5hbWU9Ik91dHB1dDk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NSIgdHlwZT0idG5zOlBvcnRUeXBlOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYiIG5hbWU9IklucHV0OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYiIG5hbWU9Ik91dHB1dDk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NiIgdHlwZT0idG5zOlBvcnRUeXBlOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTciIG5hbWU9IklucHV0OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTciIG5hbWU9Ik91dHB1dDk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NyIgdHlwZT0idG5zOlBvcnRUeXBlOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTciIGJpbmRpbmc9InRuczpCaW5kaW5nOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgiIG5hbWU9IklucHV0OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgiIG5hbWU9Ik91dHB1dDk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OCIgdHlwZT0idG5zOlBvcnRUeXBlOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkiIG5hbWU9IklucHV0OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkiIG5hbWU9Ik91dHB1dDk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OSIgdHlwZT0idG5zOlBvcnRUeXBlOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAwIiBuYW1lPSJJbnB1dDEwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDAiIG5hbWU9Ik91dHB1dDEwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDEiIG5hbWU9IklucHV0MTAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMSIgbmFtZT0iT3V0cHV0MTAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDEiIHR5cGU9InRuczpQb3J0VHlwZTEwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMiIgbmFtZT0iSW5wdXQxMDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAyIiBuYW1lPSJPdXRwdXQxMDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMiIgdHlwZT0idG5zOlBvcnRUeXBlMTAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAzIiBuYW1lPSJJbnB1dDEwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDMiIG5hbWU9Ik91dHB1dDEwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDQiIG5hbWU9IklucHV0MTA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNCIgbmFtZT0iT3V0cHV0MTA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDQiIHR5cGU9InRuczpQb3J0VHlwZTEwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNSIgbmFtZT0iSW5wdXQxMDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA1IiBuYW1lPSJPdXRwdXQxMDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNSIgdHlwZT0idG5zOlBvcnRUeXBlMTA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA2IiBuYW1lPSJJbnB1dDEwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDYiIG5hbWU9Ik91dHB1dDEwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDciIG5hbWU9IklucHV0MTA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNyIgbmFtZT0iT3V0cHV0MTA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDciIHR5cGU9InRuczpQb3J0VHlwZTEwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDciIGJpbmRpbmc9InRuczpCaW5kaW5nMTA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwOCIgbmFtZT0iSW5wdXQxMDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA4IiBuYW1lPSJPdXRwdXQxMDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwOCIgdHlwZT0idG5zOlBvcnRUeXBlMTA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA5IiBuYW1lPSJJbnB1dDEwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDkiIG5hbWU9Ik91dHB1dDEwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTAiIG5hbWU9IklucHV0MTEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMCIgbmFtZT0iT3V0cHV0MTEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTAiIHR5cGU9InRuczpQb3J0VHlwZTExMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMSIgbmFtZT0iSW5wdXQxMTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTExIiBuYW1lPSJPdXRwdXQxMTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMSIgdHlwZT0idG5zOlBvcnRUeXBlMTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEyIiBuYW1lPSJJbnB1dDExMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTIiIG5hbWU9Ik91dHB1dDExMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTMiIG5hbWU9IklucHV0MTEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMyIgbmFtZT0iT3V0cHV0MTEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTMiIHR5cGU9InRuczpQb3J0VHlwZTExMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNCIgbmFtZT0iSW5wdXQxMTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE0IiBuYW1lPSJPdXRwdXQxMTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNCIgdHlwZT0idG5zOlBvcnRUeXBlMTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE1IiBuYW1lPSJJbnB1dDExNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTUiIG5hbWU9Ik91dHB1dDExNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTYiIG5hbWU9IklucHV0MTE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNiIgbmFtZT0iT3V0cHV0MTE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTYiIHR5cGU9InRuczpQb3J0VHlwZTExNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNyIgbmFtZT0iSW5wdXQxMTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE3IiBuYW1lPSJPdXRwdXQxMTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNyIgdHlwZT0idG5zOlBvcnRUeXBlMTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE4IiBuYW1lPSJJbnB1dDExOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTgiIG5hbWU9Ik91dHB1dDExOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTkiIG5hbWU9IklucHV0MTE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExOSIgbmFtZT0iT3V0cHV0MTE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTkiIHR5cGU9InRuczpQb3J0VHlwZTExOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMCIgbmFtZT0iSW5wdXQxMjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIwIiBuYW1lPSJPdXRwdXQxMjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMCIgdHlwZT0idG5zOlBvcnRUeXBlMTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIxIiBuYW1lPSJJbnB1dDEyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjEiIG5hbWU9Ik91dHB1dDEyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjIiIG5hbWU9IklucHV0MTIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMiIgbmFtZT0iT3V0cHV0MTIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjIiIHR5cGU9InRuczpQb3J0VHlwZTEyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMyIgbmFtZT0iSW5wdXQxMjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIzIiBuYW1lPSJPdXRwdXQxMjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMyIgdHlwZT0idG5zOlBvcnRUeXBlMTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI0IiBuYW1lPSJJbnB1dDEyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjQiIG5hbWU9Ik91dHB1dDEyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjUiIG5hbWU9IklucHV0MTI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNSIgbmFtZT0iT3V0cHV0MTI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjUiIHR5cGU9InRuczpQb3J0VHlwZTEyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNiIgbmFtZT0iSW5wdXQxMjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI2IiBuYW1lPSJPdXRwdXQxMjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNiIgdHlwZT0idG5zOlBvcnRUeXBlMTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI3IiBuYW1lPSJJbnB1dDEyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjciIG5hbWU9Ik91dHB1dDEyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjgiIG5hbWU9IklucHV0MTI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyOCIgbmFtZT0iT3V0cHV0MTI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjgiIHR5cGU9InRuczpQb3J0VHlwZTEyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyOSIgbmFtZT0iSW5wdXQxMjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI5IiBuYW1lPSJPdXRwdXQxMjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyOSIgdHlwZT0idG5zOlBvcnRUeXBlMTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMwIiBuYW1lPSJJbnB1dDEzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzAiIG5hbWU9Ik91dHB1dDEzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzEiIG5hbWU9IklucHV0MTMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMSIgbmFtZT0iT3V0cHV0MTMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzEiIHR5cGU9InRuczpQb3J0VHlwZTEzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMiIgbmFtZT0iSW5wdXQxMzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMyIiBuYW1lPSJPdXRwdXQxMzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMiIgdHlwZT0idG5zOlBvcnRUeXBlMTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMzIiBuYW1lPSJJbnB1dDEzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzMiIG5hbWU9Ik91dHB1dDEzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzQiIG5hbWU9IklucHV0MTM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNCIgbmFtZT0iT3V0cHV0MTM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzQiIHR5cGU9InRuczpQb3J0VHlwZTEzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNSIgbmFtZT0iSW5wdXQxMzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM1IiBuYW1lPSJPdXRwdXQxMzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNSIgdHlwZT0idG5zOlBvcnRUeXBlMTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM2IiBuYW1lPSJJbnB1dDEzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzYiIG5hbWU9Ik91dHB1dDEzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzciIG5hbWU9IklucHV0MTM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNyIgbmFtZT0iT3V0cHV0MTM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzciIHR5cGU9InRuczpQb3J0VHlwZTEzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzciIGJpbmRpbmc9InRuczpCaW5kaW5nMTM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzOCIgbmFtZT0iSW5wdXQxMzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM4IiBuYW1lPSJPdXRwdXQxMzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzOCIgdHlwZT0idG5zOlBvcnRUeXBlMTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM5IiBuYW1lPSJJbnB1dDEzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzkiIG5hbWU9Ik91dHB1dDEzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDAiIG5hbWU9IklucHV0MTQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MCIgbmFtZT0iT3V0cHV0MTQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDAiIHR5cGU9InRuczpQb3J0VHlwZTE0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MSIgbmFtZT0iSW5wdXQxNDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQxIiBuYW1lPSJPdXRwdXQxNDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MSIgdHlwZT0idG5zOlBvcnRUeXBlMTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQyIiBuYW1lPSJJbnB1dDE0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDIiIG5hbWU9Ik91dHB1dDE0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDMiIG5hbWU9IklucHV0MTQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MyIgbmFtZT0iT3V0cHV0MTQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDMiIHR5cGU9InRuczpQb3J0VHlwZTE0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NCIgbmFtZT0iSW5wdXQxNDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ0IiBuYW1lPSJPdXRwdXQxNDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NCIgdHlwZT0idG5zOlBvcnRUeXBlMTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ1IiBuYW1lPSJJbnB1dDE0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDUiIG5hbWU9Ik91dHB1dDE0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDYiIG5hbWU9IklucHV0MTQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NiIgbmFtZT0iT3V0cHV0MTQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDYiIHR5cGU9InRuczpQb3J0VHlwZTE0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NyIgbmFtZT0iSW5wdXQxNDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ3IiBuYW1lPSJPdXRwdXQxNDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NyIgdHlwZT0idG5zOlBvcnRUeXBlMTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ4IiBuYW1lPSJJbnB1dDE0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDgiIG5hbWU9Ik91dHB1dDE0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDkiIG5hbWU9IklucHV0MTQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0OSIgbmFtZT0iT3V0cHV0MTQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDkiIHR5cGU9InRuczpQb3J0VHlwZTE0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MCIgbmFtZT0iSW5wdXQxNTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUwIiBuYW1lPSJPdXRwdXQxNTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MCIgdHlwZT0idG5zOlBvcnRUeXBlMTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUxIiBuYW1lPSJJbnB1dDE1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTEiIG5hbWU9Ik91dHB1dDE1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTIiIG5hbWU9IklucHV0MTUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MiIgbmFtZT0iT3V0cHV0MTUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTIiIHR5cGU9InRuczpQb3J0VHlwZTE1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MyIgbmFtZT0iSW5wdXQxNTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUzIiBuYW1lPSJPdXRwdXQxNTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MyIgdHlwZT0idG5zOlBvcnRUeXBlMTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU0IiBuYW1lPSJJbnB1dDE1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTQiIG5hbWU9Ik91dHB1dDE1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTUiIG5hbWU9IklucHV0MTU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NSIgbmFtZT0iT3V0cHV0MTU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTUiIHR5cGU9InRuczpQb3J0VHlwZTE1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NiIgbmFtZT0iSW5wdXQxNTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU2IiBuYW1lPSJPdXRwdXQxNTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NiIgdHlwZT0idG5zOlBvcnRUeXBlMTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU3IiBuYW1lPSJJbnB1dDE1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTciIG5hbWU9Ik91dHB1dDE1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTgiIG5hbWU9IklucHV0MTU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1OCIgbmFtZT0iT3V0cHV0MTU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTgiIHR5cGU9InRuczpQb3J0VHlwZTE1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1OSIgbmFtZT0iSW5wdXQxNTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU5IiBuYW1lPSJPdXRwdXQxNTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1OSIgdHlwZT0idG5zOlBvcnRUeXBlMTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYwIiBuYW1lPSJJbnB1dDE2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjAiIG5hbWU9Ik91dHB1dDE2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjEiIG5hbWU9IklucHV0MTYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MSIgbmFtZT0iT3V0cHV0MTYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjEiIHR5cGU9InRuczpQb3J0VHlwZTE2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MiIgbmFtZT0iSW5wdXQxNjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYyIiBuYW1lPSJPdXRwdXQxNjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MiIgdHlwZT0idG5zOlBvcnRUeXBlMTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYzIiBuYW1lPSJJbnB1dDE2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjMiIG5hbWU9Ik91dHB1dDE2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjQiIG5hbWU9IklucHV0MTY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NCIgbmFtZT0iT3V0cHV0MTY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjQiIHR5cGU9InRuczpQb3J0VHlwZTE2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NSIgbmFtZT0iSW5wdXQxNjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY1IiBuYW1lPSJPdXRwdXQxNjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NSIgdHlwZT0idG5zOlBvcnRUeXBlMTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY2IiBuYW1lPSJJbnB1dDE2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjYiIG5hbWU9Ik91dHB1dDE2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjciIG5hbWU9IklucHV0MTY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NyIgbmFtZT0iT3V0cHV0MTY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjciIHR5cGU9InRuczpQb3J0VHlwZTE2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjciIGJpbmRpbmc9InRuczpCaW5kaW5nMTY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2OCIgbmFtZT0iSW5wdXQxNjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY4IiBuYW1lPSJPdXRwdXQxNjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2OCIgdHlwZT0idG5zOlBvcnRUeXBlMTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY5IiBuYW1lPSJJbnB1dDE2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjkiIG5hbWU9Ik91dHB1dDE2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzAiIG5hbWU9IklucHV0MTcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MCIgbmFtZT0iT3V0cHV0MTcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzAiIHR5cGU9InRuczpQb3J0VHlwZTE3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MSIgbmFtZT0iSW5wdXQxNzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcxIiBuYW1lPSJPdXRwdXQxNzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MSIgdHlwZT0idG5zOlBvcnRUeXBlMTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcyIiBuYW1lPSJJbnB1dDE3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzIiIG5hbWU9Ik91dHB1dDE3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzMiIG5hbWU9IklucHV0MTczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MyIgbmFtZT0iT3V0cHV0MTczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzMiIHR5cGU9InRuczpQb3J0VHlwZTE3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NCIgbmFtZT0iSW5wdXQxNzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc0IiBuYW1lPSJPdXRwdXQxNzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NCIgdHlwZT0idG5zOlBvcnRUeXBlMTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc1IiBuYW1lPSJJbnB1dDE3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzUiIG5hbWU9Ik91dHB1dDE3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzYiIG5hbWU9IklucHV0MTc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NiIgbmFtZT0iT3V0cHV0MTc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzYiIHR5cGU9InRuczpQb3J0VHlwZTE3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NyIgbmFtZT0iSW5wdXQxNzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc3IiBuYW1lPSJPdXRwdXQxNzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NyIgdHlwZT0idG5zOlBvcnRUeXBlMTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc4IiBuYW1lPSJJbnB1dDE3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzgiIG5hbWU9Ik91dHB1dDE3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzkiIG5hbWU9IklucHV0MTc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3OSIgbmFtZT0iT3V0cHV0MTc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzkiIHR5cGU9InRuczpQb3J0VHlwZTE3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MCIgbmFtZT0iSW5wdXQxODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgwIiBuYW1lPSJPdXRwdXQxODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MCIgdHlwZT0idG5zOlBvcnRUeXBlMTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MCIgYmluZGluZz0idG5zOkJpbmRpbmcxODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgxIiBuYW1lPSJJbnB1dDE4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODEiIG5hbWU9Ik91dHB1dDE4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODIiIG5hbWU9IklucHV0MTgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MiIgbmFtZT0iT3V0cHV0MTgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODIiIHR5cGU9InRuczpQb3J0VHlwZTE4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MyIgbmFtZT0iSW5wdXQxODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgzIiBuYW1lPSJPdXRwdXQxODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MyIgdHlwZT0idG5zOlBvcnRUeXBlMTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MyIgYmluZGluZz0idG5zOkJpbmRpbmcxODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg0IiBuYW1lPSJJbnB1dDE4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODQiIG5hbWU9Ik91dHB1dDE4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODUiIG5hbWU9IklucHV0MTg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NSIgbmFtZT0iT3V0cHV0MTg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODUiIHR5cGU9InRuczpQb3J0VHlwZTE4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NiIgbmFtZT0iSW5wdXQxODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg2IiBuYW1lPSJPdXRwdXQxODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NiIgdHlwZT0idG5zOlBvcnRUeXBlMTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NiIgYmluZGluZz0idG5zOkJpbmRpbmcxODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg3IiBuYW1lPSJJbnB1dDE4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODciIG5hbWU9Ik91dHB1dDE4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODgiIG5hbWU9IklucHV0MTg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4OCIgbmFtZT0iT3V0cHV0MTg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODgiIHR5cGU9InRuczpQb3J0VHlwZTE4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4OSIgbmFtZT0iSW5wdXQxODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg5IiBuYW1lPSJPdXRwdXQxODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4OSIgdHlwZT0idG5zOlBvcnRUeXBlMTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4OSIgYmluZGluZz0idG5zOkJpbmRpbmcxODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkwIiBuYW1lPSJJbnB1dDE5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTAiIG5hbWU9Ik91dHB1dDE5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTEiIG5hbWU9IklucHV0MTkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MSIgbmFtZT0iT3V0cHV0MTkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTEiIHR5cGU9InRuczpQb3J0VHlwZTE5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MiIgbmFtZT0iSW5wdXQxOTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkyIiBuYW1lPSJPdXRwdXQxOTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MiIgdHlwZT0idG5zOlBvcnRUeXBlMTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MiIgYmluZGluZz0idG5zOkJpbmRpbmcxOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkzIiBuYW1lPSJJbnB1dDE5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTMiIG5hbWU9Ik91dHB1dDE5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTQiIG5hbWU9IklucHV0MTk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NCIgbmFtZT0iT3V0cHV0MTk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTQiIHR5cGU9InRuczpQb3J0VHlwZTE5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NSIgbmFtZT0iSW5wdXQxOTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk1IiBuYW1lPSJPdXRwdXQxOTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NSIgdHlwZT0idG5zOlBvcnRUeXBlMTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk2IiBuYW1lPSJJbnB1dDE5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTYiIG5hbWU9Ik91dHB1dDE5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTciIG5hbWU9IklucHV0MTk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NyIgbmFtZT0iT3V0cHV0MTk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTciIHR5cGU9InRuczpQb3J0VHlwZTE5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5OCIgbmFtZT0iSW5wdXQxOTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk4IiBuYW1lPSJPdXRwdXQxOTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5OCIgdHlwZT0idG5zOlBvcnRUeXBlMTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5OCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk5IiBuYW1lPSJJbnB1dDE5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTkiIG5hbWU9Ik91dHB1dDE5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDAiIG5hbWU9IklucHV0MjAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMCIgbmFtZT0iT3V0cHV0MjAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDAiIHR5cGU9InRuczpQb3J0VHlwZTIwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwMSIgbmFtZT0iSW5wdXQyMDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAxIiBuYW1lPSJPdXRwdXQyMDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwMSIgdHlwZT0idG5zOlBvcnRUeXBlMjAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAyIiBuYW1lPSJJbnB1dDIwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDIiIG5hbWU9Ik91dHB1dDIwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDMiIG5hbWU9IklucHV0MjAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMyIgbmFtZT0iT3V0cHV0MjAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDMiIHR5cGU9InRuczpQb3J0VHlwZTIwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNCIgbmFtZT0iSW5wdXQyMDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA0IiBuYW1lPSJPdXRwdXQyMDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNCIgdHlwZT0idG5zOlBvcnRUeXBlMjA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA1IiBuYW1lPSJJbnB1dDIwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDUiIG5hbWU9Ik91dHB1dDIwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDYiIG5hbWU9IklucHV0MjA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNiIgbmFtZT0iT3V0cHV0MjA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDYiIHR5cGU9InRuczpQb3J0VHlwZTIwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNyIgbmFtZT0iSW5wdXQyMDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA3IiBuYW1lPSJPdXRwdXQyMDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNyIgdHlwZT0idG5zOlBvcnRUeXBlMjA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA4IiBuYW1lPSJJbnB1dDIwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDgiIG5hbWU9Ik91dHB1dDIwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDkiIG5hbWU9IklucHV0MjA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwOSIgbmFtZT0iT3V0cHV0MjA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDkiIHR5cGU9InRuczpQb3J0VHlwZTIwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMCIgbmFtZT0iSW5wdXQyMTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEwIiBuYW1lPSJPdXRwdXQyMTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMCIgdHlwZT0idG5zOlBvcnRUeXBlMjEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjExIiBuYW1lPSJJbnB1dDIxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTEiIG5hbWU9Ik91dHB1dDIxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjExIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTIiIG5hbWU9IklucHV0MjEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMiIgbmFtZT0iT3V0cHV0MjEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTIiIHR5cGU9InRuczpQb3J0VHlwZTIxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMyIgbmFtZT0iSW5wdXQyMTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEzIiBuYW1lPSJPdXRwdXQyMTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMyIgdHlwZT0idG5zOlBvcnRUeXBlMjEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE0IiBuYW1lPSJJbnB1dDIxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTQiIG5hbWU9Ik91dHB1dDIxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTUiIG5hbWU9IklucHV0MjE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxNSIgbmFtZT0iT3V0cHV0MjE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTUiIHR5cGU9InRuczpQb3J0VHlwZTIxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNiIgbmFtZT0iSW5wdXQyMTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE2IiBuYW1lPSJPdXRwdXQyMTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNiIgdHlwZT0idG5zOlBvcnRUeXBlMjE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNiIgYmluZGluZz0idG5zOkJpbmRpbmcyMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE3IiBuYW1lPSJJbnB1dDIxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTciIG5hbWU9Ik91dHB1dDIxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTgiIG5hbWU9IklucHV0MjE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxOCIgbmFtZT0iT3V0cHV0MjE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTgiIHR5cGU9InRuczpQb3J0VHlwZTIxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxOSIgbmFtZT0iSW5wdXQyMTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE5IiBuYW1lPSJPdXRwdXQyMTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxOSIgdHlwZT0idG5zOlBvcnRUeXBlMjE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxOSIgYmluZGluZz0idG5zOkJpbmRpbmcyMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIwIiBuYW1lPSJJbnB1dDIyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjAiIG5hbWU9Ik91dHB1dDIyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjEiIG5hbWU9IklucHV0MjIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyMSIgbmFtZT0iT3V0cHV0MjIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjEiIHR5cGU9InRuczpQb3J0VHlwZTIyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMiIgbmFtZT0iSW5wdXQyMjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIyIiBuYW1lPSJPdXRwdXQyMjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMiIgdHlwZT0idG5zOlBvcnRUeXBlMjIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIzIiBuYW1lPSJJbnB1dDIyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjMiIG5hbWU9Ik91dHB1dDIyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjQiIG5hbWU9IklucHV0MjI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNCIgbmFtZT0iT3V0cHV0MjI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjQiIHR5cGU9InRuczpQb3J0VHlwZTIyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyNSIgbmFtZT0iSW5wdXQyMjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI1IiBuYW1lPSJPdXRwdXQyMjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyNSIgdHlwZT0idG5zOlBvcnRUeXBlMjI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI2IiBuYW1lPSJJbnB1dDIyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjYiIG5hbWU9Ik91dHB1dDIyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjciIG5hbWU9IklucHV0MjI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNyIgbmFtZT0iT3V0cHV0MjI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjciIHR5cGU9InRuczpQb3J0VHlwZTIyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyOCIgbmFtZT0iSW5wdXQyMjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI4IiBuYW1lPSJPdXRwdXQyMjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyOCIgdHlwZT0idG5zOlBvcnRUeXBlMjI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI5IiBuYW1lPSJJbnB1dDIyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjkiIG5hbWU9Ik91dHB1dDIyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzAiIG5hbWU9IklucHV0MjMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMCIgbmFtZT0iT3V0cHV0MjMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzAiIHR5cGU9InRuczpQb3J0VHlwZTIzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzMSIgbmFtZT0iSW5wdXQyMzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMxIiBuYW1lPSJPdXRwdXQyMzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzMSIgdHlwZT0idG5zOlBvcnRUeXBlMjMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMyIiBuYW1lPSJJbnB1dDIzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzIiIG5hbWU9Ik91dHB1dDIzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzMiIG5hbWU9IklucHV0MjMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMyIgbmFtZT0iT3V0cHV0MjMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzMiIHR5cGU9InRuczpQb3J0VHlwZTIzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNCIgbmFtZT0iSW5wdXQyMzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM0IiBuYW1lPSJPdXRwdXQyMzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNCIgdHlwZT0idG5zOlBvcnRUeXBlMjM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM1IiBuYW1lPSJJbnB1dDIzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzUiIG5hbWU9Ik91dHB1dDIzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzYiIG5hbWU9IklucHV0MjM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNiIgbmFtZT0iT3V0cHV0MjM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzYiIHR5cGU9InRuczpQb3J0VHlwZTIzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNyIgbmFtZT0iSW5wdXQyMzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM3IiBuYW1lPSJPdXRwdXQyMzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNyIgdHlwZT0idG5zOlBvcnRUeXBlMjM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM4IiBuYW1lPSJJbnB1dDIzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzgiIG5hbWU9Ik91dHB1dDIzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzkiIG5hbWU9IklucHV0MjM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzOSIgbmFtZT0iT3V0cHV0MjM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzkiIHR5cGU9InRuczpQb3J0VHlwZTIzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MCIgbmFtZT0iSW5wdXQyNDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQwIiBuYW1lPSJPdXRwdXQyNDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MCIgdHlwZT0idG5zOlBvcnRUeXBlMjQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQxIiBuYW1lPSJJbnB1dDI0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDEiIG5hbWU9Ik91dHB1dDI0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDIiIG5hbWU9IklucHV0MjQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MiIgbmFtZT0iT3V0cHV0MjQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDIiIHR5cGU9InRuczpQb3J0VHlwZTI0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MyIgbmFtZT0iSW5wdXQyNDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQzIiBuYW1lPSJPdXRwdXQyNDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MyIgdHlwZT0idG5zOlBvcnRUeXBlMjQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ0IiBuYW1lPSJJbnB1dDI0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDQiIG5hbWU9Ik91dHB1dDI0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDUiIG5hbWU9IklucHV0MjQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0NSIgbmFtZT0iT3V0cHV0MjQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDUiIHR5cGU9InRuczpQb3J0VHlwZTI0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NiIgbmFtZT0iSW5wdXQyNDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ2IiBuYW1lPSJPdXRwdXQyNDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NiIgdHlwZT0idG5zOlBvcnRUeXBlMjQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ3IiBuYW1lPSJJbnB1dDI0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDciIG5hbWU9Ik91dHB1dDI0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDgiIG5hbWU9IklucHV0MjQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0OCIgbmFtZT0iT3V0cHV0MjQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDgiIHR5cGU9InRuczpQb3J0VHlwZTI0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0OSIgbmFtZT0iSW5wdXQyNDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ5IiBuYW1lPSJPdXRwdXQyNDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0OSIgdHlwZT0idG5zOlBvcnRUeXBlMjQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUwIiBuYW1lPSJJbnB1dDI1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTAiIG5hbWU9Ik91dHB1dDI1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTEiIG5hbWU9IklucHV0MjUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1MSIgbmFtZT0iT3V0cHV0MjUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTEiIHR5cGU9InRuczpQb3J0VHlwZTI1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MiIgbmFtZT0iSW5wdXQyNTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUyIiBuYW1lPSJPdXRwdXQyNTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MiIgdHlwZT0idG5zOlBvcnRUeXBlMjUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MiIgYmluZGluZz0idG5zOkJpbmRpbmcyNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUzIiBuYW1lPSJJbnB1dDI1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTMiIG5hbWU9Ik91dHB1dDI1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTQiIG5hbWU9IklucHV0MjU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NCIgbmFtZT0iT3V0cHV0MjU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTQiIHR5cGU9InRuczpQb3J0VHlwZTI1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1NSIgbmFtZT0iSW5wdXQyNTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU1IiBuYW1lPSJPdXRwdXQyNTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1NSIgdHlwZT0idG5zOlBvcnRUeXBlMjU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1NSIgYmluZGluZz0idG5zOkJpbmRpbmcyNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU2IiBuYW1lPSJJbnB1dDI1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTYiIG5hbWU9Ik91dHB1dDI1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTciIG5hbWU9IklucHV0MjU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NyIgbmFtZT0iT3V0cHV0MjU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTciIHR5cGU9InRuczpQb3J0VHlwZTI1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTciIGJpbmRpbmc9InRuczpCaW5kaW5nMjU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1OCIgbmFtZT0iSW5wdXQyNTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU4IiBuYW1lPSJPdXRwdXQyNTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1OCIgdHlwZT0idG5zOlBvcnRUeXBlMjU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1OCIgYmluZGluZz0idG5zOkJpbmRpbmcyNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU5IiBuYW1lPSJJbnB1dDI1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTkiIG5hbWU9Ik91dHB1dDI1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjAiIG5hbWU9IklucHV0MjYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MCIgbmFtZT0iT3V0cHV0MjYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjAiIHR5cGU9InRuczpQb3J0VHlwZTI2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2MSIgbmFtZT0iSW5wdXQyNjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYxIiBuYW1lPSJPdXRwdXQyNjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2MSIgdHlwZT0idG5zOlBvcnRUeXBlMjYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYyIiBuYW1lPSJJbnB1dDI2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjIiIG5hbWU9Ik91dHB1dDI2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjMiIG5hbWU9IklucHV0MjYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MyIgbmFtZT0iT3V0cHV0MjYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjMiIHR5cGU9InRuczpQb3J0VHlwZTI2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NCIgbmFtZT0iSW5wdXQyNjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY0IiBuYW1lPSJPdXRwdXQyNjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NCIgdHlwZT0idG5zOlBvcnRUeXBlMjY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY1IiBuYW1lPSJJbnB1dDI2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjUiIG5hbWU9Ik91dHB1dDI2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjYiIG5hbWU9IklucHV0MjY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NiIgbmFtZT0iT3V0cHV0MjY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjYiIHR5cGU9InRuczpQb3J0VHlwZTI2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NyIgbmFtZT0iSW5wdXQyNjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY3IiBuYW1lPSJPdXRwdXQyNjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NyIgdHlwZT0idG5zOlBvcnRUeXBlMjY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY4IiBuYW1lPSJJbnB1dDI2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjgiIG5hbWU9Ik91dHB1dDI2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjkiIG5hbWU9IklucHV0MjY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2OSIgbmFtZT0iT3V0cHV0MjY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjkiIHR5cGU9InRuczpQb3J0VHlwZTI2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MCIgbmFtZT0iSW5wdXQyNzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjcwIiBuYW1lPSJPdXRwdXQyNzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MCIgdHlwZT0idG5zOlBvcnRUeXBlMjcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjcxIiBuYW1lPSJJbnB1dDI3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzEiIG5hbWU9Ik91dHB1dDI3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzIiIG5hbWU9IklucHV0MjcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MiIgbmFtZT0iT3V0cHV0MjcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzIiIHR5cGU9InRuczpQb3J0VHlwZTI3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MyIgbmFtZT0iSW5wdXQyNzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjczIiBuYW1lPSJPdXRwdXQyNzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MyIgdHlwZT0idG5zOlBvcnRUeXBlMjczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc0IiBuYW1lPSJJbnB1dDI3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzQiIG5hbWU9Ik91dHB1dDI3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzUiIG5hbWU9IklucHV0Mjc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3NSIgbmFtZT0iT3V0cHV0Mjc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzUiIHR5cGU9InRuczpQb3J0VHlwZTI3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NiIgbmFtZT0iSW5wdXQyNzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc2IiBuYW1lPSJPdXRwdXQyNzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NiIgdHlwZT0idG5zOlBvcnRUeXBlMjc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc3IiBuYW1lPSJJbnB1dDI3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzciIG5hbWU9Ik91dHB1dDI3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzgiIG5hbWU9IklucHV0Mjc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3OCIgbmFtZT0iT3V0cHV0Mjc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzgiIHR5cGU9InRuczpQb3J0VHlwZTI3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3OSIgbmFtZT0iSW5wdXQyNzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc5IiBuYW1lPSJPdXRwdXQyNzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3OSIgdHlwZT0idG5zOlBvcnRUeXBlMjc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgwIiBuYW1lPSJJbnB1dDI4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODAiIG5hbWU9Ik91dHB1dDI4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODEiIG5hbWU9IklucHV0MjgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4MSIgbmFtZT0iT3V0cHV0MjgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODEiIHR5cGU9InRuczpQb3J0VHlwZTI4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MiIgbmFtZT0iSW5wdXQyODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgyIiBuYW1lPSJPdXRwdXQyODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MiIgdHlwZT0idG5zOlBvcnRUeXBlMjgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MiIgYmluZGluZz0idG5zOkJpbmRpbmcyODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgzIiBuYW1lPSJJbnB1dDI4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODMiIG5hbWU9Ik91dHB1dDI4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODQiIG5hbWU9IklucHV0Mjg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NCIgbmFtZT0iT3V0cHV0Mjg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODQiIHR5cGU9InRuczpQb3J0VHlwZTI4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4NSIgbmFtZT0iSW5wdXQyODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg1IiBuYW1lPSJPdXRwdXQyODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4NSIgdHlwZT0idG5zOlBvcnRUeXBlMjg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4NSIgYmluZGluZz0idG5zOkJpbmRpbmcyODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg2IiBuYW1lPSJJbnB1dDI4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODYiIG5hbWU9Ik91dHB1dDI4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODciIG5hbWU9IklucHV0Mjg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NyIgbmFtZT0iT3V0cHV0Mjg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODciIHR5cGU9InRuczpQb3J0VHlwZTI4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODciIGJpbmRpbmc9InRuczpCaW5kaW5nMjg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4OCIgbmFtZT0iSW5wdXQyODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg4IiBuYW1lPSJPdXRwdXQyODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4OCIgdHlwZT0idG5zOlBvcnRUeXBlMjg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4OCIgYmluZGluZz0idG5zOkJpbmRpbmcyODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg5IiBuYW1lPSJJbnB1dDI4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODkiIG5hbWU9Ik91dHB1dDI4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTAiIG5hbWU9IklucHV0MjkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MCIgbmFtZT0iT3V0cHV0MjkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTAiIHR5cGU9InRuczpQb3J0VHlwZTI5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5MSIgbmFtZT0iSW5wdXQyOTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkxIiBuYW1lPSJPdXRwdXQyOTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5MSIgdHlwZT0idG5zOlBvcnRUeXBlMjkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5MSIgYmluZGluZz0idG5zOkJpbmRpbmcyOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkyIiBuYW1lPSJJbnB1dDI5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTIiIG5hbWU9Ik91dHB1dDI5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTMiIG5hbWU9IklucHV0MjkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MyIgbmFtZT0iT3V0cHV0MjkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTMiIHR5cGU9InRuczpQb3J0VHlwZTI5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NCIgbmFtZT0iSW5wdXQyOTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk0IiBuYW1lPSJPdXRwdXQyOTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NCIgdHlwZT0idG5zOlBvcnRUeXBlMjk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NCIgYmluZGluZz0idG5zOkJpbmRpbmcyOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk1IiBuYW1lPSJJbnB1dDI5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTUiIG5hbWU9Ik91dHB1dDI5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTYiIG5hbWU9IklucHV0Mjk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NiIgbmFtZT0iT3V0cHV0Mjk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTYiIHR5cGU9InRuczpQb3J0VHlwZTI5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NyIgbmFtZT0iSW5wdXQyOTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk3IiBuYW1lPSJPdXRwdXQyOTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NyIgdHlwZT0idG5zOlBvcnRUeXBlMjk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NyIgYmluZGluZz0idG5zOkJpbmRpbmcyOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk4IiBuYW1lPSJJbnB1dDI5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTgiIG5hbWU9Ik91dHB1dDI5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTkiIG5hbWU9IklucHV0Mjk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5OSIgbmFtZT0iT3V0cHV0Mjk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTkiIHR5cGU9InRuczpQb3J0VHlwZTI5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMCIgbmFtZT0iSW5wdXQzMDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAwIiBuYW1lPSJPdXRwdXQzMDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMCIgdHlwZT0idG5zOlBvcnRUeXBlMzAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMCIgYmluZGluZz0idG5zOkJpbmRpbmczMDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAxIiBuYW1lPSJJbnB1dDMwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDEiIG5hbWU9Ik91dHB1dDMwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDIiIG5hbWU9IklucHV0MzAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMiIgbmFtZT0iT3V0cHV0MzAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDIiIHR5cGU9InRuczpQb3J0VHlwZTMwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMyIgbmFtZT0iSW5wdXQzMDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAzIiBuYW1lPSJPdXRwdXQzMDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMyIgdHlwZT0idG5zOlBvcnRUeXBlMzAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMyIgYmluZGluZz0idG5zOkJpbmRpbmczMDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA0IiBuYW1lPSJJbnB1dDMwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDQiIG5hbWU9Ik91dHB1dDMwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDUiIG5hbWU9IklucHV0MzA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwNSIgbmFtZT0iT3V0cHV0MzA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDUiIHR5cGU9InRuczpQb3J0VHlwZTMwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNiIgbmFtZT0iSW5wdXQzMDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA2IiBuYW1lPSJPdXRwdXQzMDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNiIgdHlwZT0idG5zOlBvcnRUeXBlMzA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNiIgYmluZGluZz0idG5zOkJpbmRpbmczMDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA3IiBuYW1lPSJJbnB1dDMwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDciIG5hbWU9Ik91dHB1dDMwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDgiIG5hbWU9IklucHV0MzA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwOCIgbmFtZT0iT3V0cHV0MzA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDgiIHR5cGU9InRuczpQb3J0VHlwZTMwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwOSIgbmFtZT0iSW5wdXQzMDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA5IiBuYW1lPSJPdXRwdXQzMDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwOSIgdHlwZT0idG5zOlBvcnRUeXBlMzA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwOSIgYmluZGluZz0idG5zOkJpbmRpbmczMDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEwIiBuYW1lPSJJbnB1dDMxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTAiIG5hbWU9Ik91dHB1dDMxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTEiIG5hbWU9IklucHV0MzExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxMSIgbmFtZT0iT3V0cHV0MzExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTEiIHR5cGU9InRuczpQb3J0VHlwZTMxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMiIgbmFtZT0iSW5wdXQzMTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEyIiBuYW1lPSJPdXRwdXQzMTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMiIgdHlwZT0idG5zOlBvcnRUeXBlMzEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMiIgYmluZGluZz0idG5zOkJpbmRpbmczMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEzIiBuYW1lPSJJbnB1dDMxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTMiIG5hbWU9Ik91dHB1dDMxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTQiIG5hbWU9IklucHV0MzE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNCIgbmFtZT0iT3V0cHV0MzE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTQiIHR5cGU9InRuczpQb3J0VHlwZTMxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxNSIgbmFtZT0iSW5wdXQzMTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE1IiBuYW1lPSJPdXRwdXQzMTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxNSIgdHlwZT0idG5zOlBvcnRUeXBlMzE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxNSIgYmluZGluZz0idG5zOkJpbmRpbmczMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE2IiBuYW1lPSJJbnB1dDMxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTYiIG5hbWU9Ik91dHB1dDMxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTciIG5hbWU9IklucHV0MzE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNyIgbmFtZT0iT3V0cHV0MzE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTciIHR5cGU9InRuczpQb3J0VHlwZTMxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTciIGJpbmRpbmc9InRuczpCaW5kaW5nMzE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxOCIgbmFtZT0iSW5wdXQzMTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE4IiBuYW1lPSJPdXRwdXQzMTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxOCIgdHlwZT0idG5zOlBvcnRUeXBlMzE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxOCIgYmluZGluZz0idG5zOkJpbmRpbmczMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE5IiBuYW1lPSJJbnB1dDMxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTkiIG5hbWU9Ik91dHB1dDMxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjAiIG5hbWU9IklucHV0MzIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMCIgbmFtZT0iT3V0cHV0MzIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjAiIHR5cGU9InRuczpQb3J0VHlwZTMyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyMSIgbmFtZT0iSW5wdXQzMjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIxIiBuYW1lPSJPdXRwdXQzMjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyMSIgdHlwZT0idG5zOlBvcnRUeXBlMzIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyMSIgYmluZGluZz0idG5zOkJpbmRpbmczMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIyIiBuYW1lPSJJbnB1dDMyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjIiIG5hbWU9Ik91dHB1dDMyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjMiIG5hbWU9IklucHV0MzIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMyIgbmFtZT0iT3V0cHV0MzIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjMiIHR5cGU9InRuczpQb3J0VHlwZTMyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNCIgbmFtZT0iSW5wdXQzMjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI0IiBuYW1lPSJPdXRwdXQzMjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNCIgdHlwZT0idG5zOlBvcnRUeXBlMzI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNCIgYmluZGluZz0idG5zOkJpbmRpbmczMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI1IiBuYW1lPSJJbnB1dDMyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjUiIG5hbWU9Ik91dHB1dDMyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjYiIG5hbWU9IklucHV0MzI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNiIgbmFtZT0iT3V0cHV0MzI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjYiIHR5cGU9InRuczpQb3J0VHlwZTMyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNyIgbmFtZT0iSW5wdXQzMjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI3IiBuYW1lPSJPdXRwdXQzMjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNyIgdHlwZT0idG5zOlBvcnRUeXBlMzI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNyIgYmluZGluZz0idG5zOkJpbmRpbmczMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI4IiBuYW1lPSJJbnB1dDMyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjgiIG5hbWU9Ik91dHB1dDMyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjkiIG5hbWU9IklucHV0MzI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyOSIgbmFtZT0iT3V0cHV0MzI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjkiIHR5cGU9InRuczpQb3J0VHlwZTMyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMCIgbmFtZT0iSW5wdXQzMzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMwIiBuYW1lPSJPdXRwdXQzMzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMCIgdHlwZT0idG5zOlBvcnRUeXBlMzMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMCIgYmluZGluZz0idG5zOkJpbmRpbmczMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMxIiBuYW1lPSJJbnB1dDMzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzEiIG5hbWU9Ik91dHB1dDMzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzIiIG5hbWU9IklucHV0MzMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMiIgbmFtZT0iT3V0cHV0MzMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzIiIHR5cGU9InRuczpQb3J0VHlwZTMzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMyIgbmFtZT0iSW5wdXQzMzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMzIiBuYW1lPSJPdXRwdXQzMzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMyIgdHlwZT0idG5zOlBvcnRUeXBlMzMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMyIgYmluZGluZz0idG5zOkJpbmRpbmczMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM0IiBuYW1lPSJJbnB1dDMzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzQiIG5hbWU9Ik91dHB1dDMzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzUiIG5hbWU9IklucHV0MzM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzNSIgbmFtZT0iT3V0cHV0MzM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzUiIHR5cGU9InRuczpQb3J0VHlwZTMzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNiIgbmFtZT0iSW5wdXQzMzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM2IiBuYW1lPSJPdXRwdXQzMzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNiIgdHlwZT0idG5zOlBvcnRUeXBlMzM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNiIgYmluZGluZz0idG5zOkJpbmRpbmczMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM3IiBuYW1lPSJJbnB1dDMzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzciIG5hbWU9Ik91dHB1dDMzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzgiIG5hbWU9IklucHV0MzM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzOCIgbmFtZT0iT3V0cHV0MzM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzgiIHR5cGU9InRuczpQb3J0VHlwZTMzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzOSIgbmFtZT0iSW5wdXQzMzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM5IiBuYW1lPSJPdXRwdXQzMzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzOSIgdHlwZT0idG5zOlBvcnRUeXBlMzM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzOSIgYmluZGluZz0idG5zOkJpbmRpbmczMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQwIiBuYW1lPSJJbnB1dDM0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDAiIG5hbWU9Ik91dHB1dDM0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDEiIG5hbWU9IklucHV0MzQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0MSIgbmFtZT0iT3V0cHV0MzQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDEiIHR5cGU9InRuczpQb3J0VHlwZTM0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MiIgbmFtZT0iSW5wdXQzNDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQyIiBuYW1lPSJPdXRwdXQzNDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MiIgdHlwZT0idG5zOlBvcnRUeXBlMzQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MiIgYmluZGluZz0idG5zOkJpbmRpbmczNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQzIiBuYW1lPSJJbnB1dDM0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDMiIG5hbWU9Ik91dHB1dDM0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDQiIG5hbWU9IklucHV0MzQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NCIgbmFtZT0iT3V0cHV0MzQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDQiIHR5cGU9InRuczpQb3J0VHlwZTM0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0NSIgbmFtZT0iSW5wdXQzNDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ1IiBuYW1lPSJPdXRwdXQzNDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0NSIgdHlwZT0idG5zOlBvcnRUeXBlMzQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0NSIgYmluZGluZz0idG5zOkJpbmRpbmczNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ2IiBuYW1lPSJJbnB1dDM0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDYiIG5hbWU9Ik91dHB1dDM0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDciIG5hbWU9IklucHV0MzQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NyIgbmFtZT0iT3V0cHV0MzQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDciIHR5cGU9InRuczpQb3J0VHlwZTM0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDciIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0OCIgbmFtZT0iSW5wdXQzNDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ4IiBuYW1lPSJPdXRwdXQzNDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0OCIgdHlwZT0idG5zOlBvcnRUeXBlMzQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0OCIgYmluZGluZz0idG5zOkJpbmRpbmczNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ5IiBuYW1lPSJJbnB1dDM0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDkiIG5hbWU9Ik91dHB1dDM0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTAiIG5hbWU9IklucHV0MzUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MCIgbmFtZT0iT3V0cHV0MzUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTAiIHR5cGU9InRuczpQb3J0VHlwZTM1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1MSIgbmFtZT0iSW5wdXQzNTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUxIiBuYW1lPSJPdXRwdXQzNTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1MSIgdHlwZT0idG5zOlBvcnRUeXBlMzUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1MSIgYmluZGluZz0idG5zOkJpbmRpbmczNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUyIiBuYW1lPSJJbnB1dDM1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTIiIG5hbWU9Ik91dHB1dDM1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTMiIG5hbWU9IklucHV0MzUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MyIgbmFtZT0iT3V0cHV0MzUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTMiIHR5cGU9InRuczpQb3J0VHlwZTM1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NCIgbmFtZT0iSW5wdXQzNTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU0IiBuYW1lPSJPdXRwdXQzNTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NCIgdHlwZT0idG5zOlBvcnRUeXBlMzU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NCIgYmluZGluZz0idG5zOkJpbmRpbmczNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU1IiBuYW1lPSJJbnB1dDM1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTUiIG5hbWU9Ik91dHB1dDM1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTYiIG5hbWU9IklucHV0MzU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NiIgbmFtZT0iT3V0cHV0MzU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTYiIHR5cGU9InRuczpQb3J0VHlwZTM1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NyIgbmFtZT0iSW5wdXQzNTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU3IiBuYW1lPSJPdXRwdXQzNTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NyIgdHlwZT0idG5zOlBvcnRUeXBlMzU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NyIgYmluZGluZz0idG5zOkJpbmRpbmczNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU4IiBuYW1lPSJJbnB1dDM1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTgiIG5hbWU9Ik91dHB1dDM1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTkiIG5hbWU9IklucHV0MzU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1OSIgbmFtZT0iT3V0cHV0MzU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTkiIHR5cGU9InRuczpQb3J0VHlwZTM1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MCIgbmFtZT0iSW5wdXQzNjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYwIiBuYW1lPSJPdXRwdXQzNjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MCIgdHlwZT0idG5zOlBvcnRUeXBlMzYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MCIgYmluZGluZz0idG5zOkJpbmRpbmczNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYxIiBuYW1lPSJJbnB1dDM2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjEiIG5hbWU9Ik91dHB1dDM2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjIiIG5hbWU9IklucHV0MzYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MiIgbmFtZT0iT3V0cHV0MzYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjIiIHR5cGU9InRuczpQb3J0VHlwZTM2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MyIgbmFtZT0iSW5wdXQzNjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYzIiBuYW1lPSJPdXRwdXQzNjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MyIgdHlwZT0idG5zOlBvcnRUeXBlMzYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MyIgYmluZGluZz0idG5zOkJpbmRpbmczNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY0IiBuYW1lPSJJbnB1dDM2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjQiIG5hbWU9Ik91dHB1dDM2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjUiIG5hbWU9IklucHV0MzY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2NSIgbmFtZT0iT3V0cHV0MzY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjUiIHR5cGU9InRuczpQb3J0VHlwZTM2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NiIgbmFtZT0iSW5wdXQzNjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY2IiBuYW1lPSJPdXRwdXQzNjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NiIgdHlwZT0idG5zOlBvcnRUeXBlMzY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NiIgYmluZGluZz0idG5zOkJpbmRpbmczNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY3IiBuYW1lPSJJbnB1dDM2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjciIG5hbWU9Ik91dHB1dDM2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjgiIG5hbWU9IklucHV0MzY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2OCIgbmFtZT0iT3V0cHV0MzY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjgiIHR5cGU9InRuczpQb3J0VHlwZTM2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2OSIgbmFtZT0iSW5wdXQzNjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY5IiBuYW1lPSJPdXRwdXQzNjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2OSIgdHlwZT0idG5zOlBvcnRUeXBlMzY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2OSIgYmluZGluZz0idG5zOkJpbmRpbmczNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzcwIiBuYW1lPSJJbnB1dDM3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzAiIG5hbWU9Ik91dHB1dDM3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzEiIG5hbWU9IklucHV0MzcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3MSIgbmFtZT0iT3V0cHV0MzcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzEiIHR5cGU9InRuczpQb3J0VHlwZTM3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MiIgbmFtZT0iSW5wdXQzNzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzcyIiBuYW1lPSJPdXRwdXQzNzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MiIgdHlwZT0idG5zOlBvcnRUeXBlMzcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MiIgYmluZGluZz0idG5zOkJpbmRpbmczNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzczIiBuYW1lPSJJbnB1dDM3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzMiIG5hbWU9Ik91dHB1dDM3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzczIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzQiIG5hbWU9IklucHV0Mzc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NCIgbmFtZT0iT3V0cHV0Mzc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzQiIHR5cGU9InRuczpQb3J0VHlwZTM3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3NSIgbmFtZT0iSW5wdXQzNzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc1IiBuYW1lPSJPdXRwdXQzNzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3NSIgdHlwZT0idG5zOlBvcnRUeXBlMzc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3NSIgYmluZGluZz0idG5zOkJpbmRpbmczNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc2IiBuYW1lPSJJbnB1dDM3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzYiIG5hbWU9Ik91dHB1dDM3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzciIG5hbWU9IklucHV0Mzc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NyIgbmFtZT0iT3V0cHV0Mzc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzciIHR5cGU9InRuczpQb3J0VHlwZTM3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3OCIgbmFtZT0iSW5wdXQzNzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc4IiBuYW1lPSJPdXRwdXQzNzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3OCIgdHlwZT0idG5zOlBvcnRUeXBlMzc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3OCIgYmluZGluZz0idG5zOkJpbmRpbmczNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc5IiBuYW1lPSJJbnB1dDM3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzkiIG5hbWU9Ik91dHB1dDM3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODAiIG5hbWU9IklucHV0MzgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MCIgbmFtZT0iT3V0cHV0MzgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODAiIHR5cGU9InRuczpQb3J0VHlwZTM4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4MSIgbmFtZT0iSW5wdXQzODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgxIiBuYW1lPSJPdXRwdXQzODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4MSIgdHlwZT0idG5zOlBvcnRUeXBlMzgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4MSIgYmluZGluZz0idG5zOkJpbmRpbmczODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgyIiBuYW1lPSJJbnB1dDM4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODIiIG5hbWU9Ik91dHB1dDM4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODMiIG5hbWU9IklucHV0MzgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MyIgbmFtZT0iT3V0cHV0MzgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODMiIHR5cGU9InRuczpQb3J0VHlwZTM4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NCIgbmFtZT0iSW5wdXQzODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg0IiBuYW1lPSJPdXRwdXQzODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NCIgdHlwZT0idG5zOlBvcnRUeXBlMzg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NCIgYmluZGluZz0idG5zOkJpbmRpbmczODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg1IiBuYW1lPSJJbnB1dDM4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODUiIG5hbWU9Ik91dHB1dDM4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODYiIG5hbWU9IklucHV0Mzg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NiIgbmFtZT0iT3V0cHV0Mzg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODYiIHR5cGU9InRuczpQb3J0VHlwZTM4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NyIgbmFtZT0iSW5wdXQzODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg3IiBuYW1lPSJPdXRwdXQzODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NyIgdHlwZT0idG5zOlBvcnRUeXBlMzg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NyIgYmluZGluZz0idG5zOkJpbmRpbmczODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg4IiBuYW1lPSJJbnB1dDM4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODgiIG5hbWU9Ik91dHB1dDM4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODkiIG5hbWU9IklucHV0Mzg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4OSIgbmFtZT0iT3V0cHV0Mzg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODkiIHR5cGU9InRuczpQb3J0VHlwZTM4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MCIgbmFtZT0iSW5wdXQzOTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkwIiBuYW1lPSJPdXRwdXQzOTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MCIgdHlwZT0idG5zOlBvcnRUeXBlMzkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MCIgYmluZGluZz0idG5zOkJpbmRpbmczOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkxIiBuYW1lPSJJbnB1dDM5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTEiIG5hbWU9Ik91dHB1dDM5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTIiIG5hbWU9IklucHV0MzkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MiIgbmFtZT0iT3V0cHV0MzkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTIiIHR5cGU9InRuczpQb3J0VHlwZTM5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MyIgbmFtZT0iSW5wdXQzOTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkzIiBuYW1lPSJPdXRwdXQzOTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MyIgdHlwZT0idG5zOlBvcnRUeXBlMzkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MyIgYmluZGluZz0idG5zOkJpbmRpbmczOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk0IiBuYW1lPSJJbnB1dDM5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTQiIG5hbWU9Ik91dHB1dDM5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTUiIG5hbWU9IklucHV0Mzk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5NSIgbmFtZT0iT3V0cHV0Mzk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTUiIHR5cGU9InRuczpQb3J0VHlwZTM5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NiIgbmFtZT0iSW5wdXQzOTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk2IiBuYW1lPSJPdXRwdXQzOTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NiIgdHlwZT0idG5zOlBvcnRUeXBlMzk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NiIgYmluZGluZz0idG5zOkJpbmRpbmczOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk3IiBuYW1lPSJJbnB1dDM5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTciIG5hbWU9Ik91dHB1dDM5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTgiIG5hbWU9IklucHV0Mzk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5OCIgbmFtZT0iT3V0cHV0Mzk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTgiIHR5cGU9InRuczpQb3J0VHlwZTM5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5OSIgbmFtZT0iSW5wdXQzOTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk5IiBuYW1lPSJPdXRwdXQzOTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5OSIgdHlwZT0idG5zOlBvcnRUeXBlMzk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5OSIgYmluZGluZz0idG5zOkJpbmRpbmczOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAwIiBuYW1lPSJJbnB1dDQwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDAiIG5hbWU9Ik91dHB1dDQwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDEiIG5hbWU9IklucHV0NDAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwMSIgbmFtZT0iT3V0cHV0NDAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDEiIHR5cGU9InRuczpQb3J0VHlwZTQwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMiIgbmFtZT0iSW5wdXQ0MDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAyIiBuYW1lPSJPdXRwdXQ0MDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMiIgdHlwZT0idG5zOlBvcnRUeXBlNDAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAzIiBuYW1lPSJJbnB1dDQwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDMiIG5hbWU9Ik91dHB1dDQwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDQiIG5hbWU9IklucHV0NDA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNCIgbmFtZT0iT3V0cHV0NDA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDQiIHR5cGU9InRuczpQb3J0VHlwZTQwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwNSIgbmFtZT0iSW5wdXQ0MDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA1IiBuYW1lPSJPdXRwdXQ0MDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwNSIgdHlwZT0idG5zOlBvcnRUeXBlNDA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA2IiBuYW1lPSJJbnB1dDQwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDYiIG5hbWU9Ik91dHB1dDQwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDciIG5hbWU9IklucHV0NDA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNyIgbmFtZT0iT3V0cHV0NDA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDciIHR5cGU9InRuczpQb3J0VHlwZTQwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwOCIgbmFtZT0iSW5wdXQ0MDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA4IiBuYW1lPSJPdXRwdXQ0MDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwOCIgdHlwZT0idG5zOlBvcnRUeXBlNDA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA5IiBuYW1lPSJJbnB1dDQwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDkiIG5hbWU9Ik91dHB1dDQwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTAiIG5hbWU9IklucHV0NDEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMCIgbmFtZT0iT3V0cHV0NDEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTAiIHR5cGU9InRuczpQb3J0VHlwZTQxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxMSIgbmFtZT0iSW5wdXQ0MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDExIiBuYW1lPSJPdXRwdXQ0MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxMSIgdHlwZT0idG5zOlBvcnRUeXBlNDExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxMSIgYmluZGluZz0idG5zOkJpbmRpbmc0MTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEyIiBuYW1lPSJJbnB1dDQxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTIiIG5hbWU9Ik91dHB1dDQxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTMiIG5hbWU9IklucHV0NDEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMyIgbmFtZT0iT3V0cHV0NDEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTMiIHR5cGU9InRuczpQb3J0VHlwZTQxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNCIgbmFtZT0iSW5wdXQ0MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE0IiBuYW1lPSJPdXRwdXQ0MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNCIgdHlwZT0idG5zOlBvcnRUeXBlNDE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNCIgYmluZGluZz0idG5zOkJpbmRpbmc0MTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE1IiBuYW1lPSJJbnB1dDQxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTUiIG5hbWU9Ik91dHB1dDQxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTYiIG5hbWU9IklucHV0NDE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNiIgbmFtZT0iT3V0cHV0NDE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTYiIHR5cGU9InRuczpQb3J0VHlwZTQxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNyIgbmFtZT0iSW5wdXQ0MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE3IiBuYW1lPSJPdXRwdXQ0MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNyIgdHlwZT0idG5zOlBvcnRUeXBlNDE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNyIgYmluZGluZz0idG5zOkJpbmRpbmc0MTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE4IiBuYW1lPSJJbnB1dDQxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTgiIG5hbWU9Ik91dHB1dDQxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTkiIG5hbWU9IklucHV0NDE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxOSIgbmFtZT0iT3V0cHV0NDE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTkiIHR5cGU9InRuczpQb3J0VHlwZTQxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMCIgbmFtZT0iSW5wdXQ0MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIwIiBuYW1lPSJPdXRwdXQ0MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMCIgdHlwZT0idG5zOlBvcnRUeXBlNDIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIxIiBuYW1lPSJJbnB1dDQyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjEiIG5hbWU9Ik91dHB1dDQyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjIiIG5hbWU9IklucHV0NDIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMiIgbmFtZT0iT3V0cHV0NDIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjIiIHR5cGU9InRuczpQb3J0VHlwZTQyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMyIgbmFtZT0iSW5wdXQ0MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIzIiBuYW1lPSJPdXRwdXQ0MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMyIgdHlwZT0idG5zOlBvcnRUeXBlNDIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI0IiBuYW1lPSJJbnB1dDQyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjQiIG5hbWU9Ik91dHB1dDQyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjUiIG5hbWU9IklucHV0NDI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyNSIgbmFtZT0iT3V0cHV0NDI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjUiIHR5cGU9InRuczpQb3J0VHlwZTQyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNiIgbmFtZT0iSW5wdXQ0MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI2IiBuYW1lPSJPdXRwdXQ0MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNiIgdHlwZT0idG5zOlBvcnRUeXBlNDI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI3IiBuYW1lPSJJbnB1dDQyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjciIG5hbWU9Ik91dHB1dDQyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjgiIG5hbWU9IklucHV0NDI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyOCIgbmFtZT0iT3V0cHV0NDI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjgiIHR5cGU9InRuczpQb3J0VHlwZTQyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyOSIgbmFtZT0iSW5wdXQ0MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI5IiBuYW1lPSJPdXRwdXQ0MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyOSIgdHlwZT0idG5zOlBvcnRUeXBlNDI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMwIiBuYW1lPSJJbnB1dDQzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzAiIG5hbWU9Ik91dHB1dDQzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzEiIG5hbWU9IklucHV0NDMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzMSIgbmFtZT0iT3V0cHV0NDMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzEiIHR5cGU9InRuczpQb3J0VHlwZTQzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMiIgbmFtZT0iSW5wdXQ0MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMyIiBuYW1lPSJPdXRwdXQ0MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMiIgdHlwZT0idG5zOlBvcnRUeXBlNDMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMzIiBuYW1lPSJJbnB1dDQzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzMiIG5hbWU9Ik91dHB1dDQzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzQiIG5hbWU9IklucHV0NDM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNCIgbmFtZT0iT3V0cHV0NDM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzQiIHR5cGU9InRuczpQb3J0VHlwZTQzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzNSIgbmFtZT0iSW5wdXQ0MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM1IiBuYW1lPSJPdXRwdXQ0MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzNSIgdHlwZT0idG5zOlBvcnRUeXBlNDM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM2IiBuYW1lPSJJbnB1dDQzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzYiIG5hbWU9Ik91dHB1dDQzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzciIG5hbWU9IklucHV0NDM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNyIgbmFtZT0iT3V0cHV0NDM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzciIHR5cGU9InRuczpQb3J0VHlwZTQzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzciIGJpbmRpbmc9InRuczpCaW5kaW5nNDM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzOCIgbmFtZT0iSW5wdXQ0MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM4IiBuYW1lPSJPdXRwdXQ0MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzOCIgdHlwZT0idG5zOlBvcnRUeXBlNDM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM5IiBuYW1lPSJJbnB1dDQzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzkiIG5hbWU9Ik91dHB1dDQzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDAiIG5hbWU9IklucHV0NDQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MCIgbmFtZT0iT3V0cHV0NDQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDAiIHR5cGU9InRuczpQb3J0VHlwZTQ0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0MSIgbmFtZT0iSW5wdXQ0NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQxIiBuYW1lPSJPdXRwdXQ0NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0MSIgdHlwZT0idG5zOlBvcnRUeXBlNDQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQyIiBuYW1lPSJJbnB1dDQ0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDIiIG5hbWU9Ik91dHB1dDQ0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDMiIG5hbWU9IklucHV0NDQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MyIgbmFtZT0iT3V0cHV0NDQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDMiIHR5cGU9InRuczpQb3J0VHlwZTQ0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NCIgbmFtZT0iSW5wdXQ0NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ0IiBuYW1lPSJPdXRwdXQ0NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NCIgdHlwZT0idG5zOlBvcnRUeXBlNDQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ1IiBuYW1lPSJJbnB1dDQ0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDUiIG5hbWU9Ik91dHB1dDQ0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDYiIG5hbWU9IklucHV0NDQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NiIgbmFtZT0iT3V0cHV0NDQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDYiIHR5cGU9InRuczpQb3J0VHlwZTQ0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NyIgbmFtZT0iSW5wdXQ0NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ3IiBuYW1lPSJPdXRwdXQ0NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NyIgdHlwZT0idG5zOlBvcnRUeXBlNDQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ4IiBuYW1lPSJJbnB1dDQ0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDgiIG5hbWU9Ik91dHB1dDQ0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDkiIG5hbWU9IklucHV0NDQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0OSIgbmFtZT0iT3V0cHV0NDQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDkiIHR5cGU9InRuczpQb3J0VHlwZTQ0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MCIgbmFtZT0iSW5wdXQ0NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUwIiBuYW1lPSJPdXRwdXQ0NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MCIgdHlwZT0idG5zOlBvcnRUeXBlNDUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MCIgYmluZGluZz0idG5zOkJpbmRpbmc0NTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUxIiBuYW1lPSJJbnB1dDQ1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTEiIG5hbWU9Ik91dHB1dDQ1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTIiIG5hbWU9IklucHV0NDUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MiIgbmFtZT0iT3V0cHV0NDUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTIiIHR5cGU9InRuczpQb3J0VHlwZTQ1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MyIgbmFtZT0iSW5wdXQ0NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUzIiBuYW1lPSJPdXRwdXQ0NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MyIgdHlwZT0idG5zOlBvcnRUeXBlNDUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MyIgYmluZGluZz0idG5zOkJpbmRpbmc0NTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU0IiBuYW1lPSJJbnB1dDQ1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTQiIG5hbWU9Ik91dHB1dDQ1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTUiIG5hbWU9IklucHV0NDU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1NSIgbmFtZT0iT3V0cHV0NDU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTUiIHR5cGU9InRuczpQb3J0VHlwZTQ1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NiIgbmFtZT0iSW5wdXQ0NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU2IiBuYW1lPSJPdXRwdXQ0NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NiIgdHlwZT0idG5zOlBvcnRUeXBlNDU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU3IiBuYW1lPSJJbnB1dDQ1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTciIG5hbWU9Ik91dHB1dDQ1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTgiIG5hbWU9IklucHV0NDU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1OCIgbmFtZT0iT3V0cHV0NDU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTgiIHR5cGU9InRuczpQb3J0VHlwZTQ1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1OSIgbmFtZT0iSW5wdXQ0NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU5IiBuYW1lPSJPdXRwdXQ0NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1OSIgdHlwZT0idG5zOlBvcnRUeXBlNDU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1OSIgYmluZGluZz0idG5zOkJpbmRpbmc0NTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYwIiBuYW1lPSJJbnB1dDQ2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjAiIG5hbWU9Ik91dHB1dDQ2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjEiIG5hbWU9IklucHV0NDYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2MSIgbmFtZT0iT3V0cHV0NDYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjEiIHR5cGU9InRuczpQb3J0VHlwZTQ2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MiIgbmFtZT0iSW5wdXQ0NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYyIiBuYW1lPSJPdXRwdXQ0NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MiIgdHlwZT0idG5zOlBvcnRUeXBlNDYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYzIiBuYW1lPSJJbnB1dDQ2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjMiIG5hbWU9Ik91dHB1dDQ2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjQiIG5hbWU9IklucHV0NDY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NCIgbmFtZT0iT3V0cHV0NDY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjQiIHR5cGU9InRuczpQb3J0VHlwZTQ2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2NSIgbmFtZT0iSW5wdXQ0NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY1IiBuYW1lPSJPdXRwdXQ0NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2NSIgdHlwZT0idG5zOlBvcnRUeXBlNDY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY2IiBuYW1lPSJJbnB1dDQ2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjYiIG5hbWU9Ik91dHB1dDQ2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjciIG5hbWU9IklucHV0NDY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NyIgbmFtZT0iT3V0cHV0NDY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjciIHR5cGU9InRuczpQb3J0VHlwZTQ2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNDY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2OCIgbmFtZT0iSW5wdXQ0NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY4IiBuYW1lPSJPdXRwdXQ0NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2OCIgdHlwZT0idG5zOlBvcnRUeXBlNDY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY5IiBuYW1lPSJJbnB1dDQ2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjkiIG5hbWU9Ik91dHB1dDQ2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzAiIG5hbWU9IklucHV0NDcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MCIgbmFtZT0iT3V0cHV0NDcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzAiIHR5cGU9InRuczpQb3J0VHlwZTQ3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3MSIgbmFtZT0iSW5wdXQ0NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDcxIiBuYW1lPSJPdXRwdXQ0NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3MSIgdHlwZT0idG5zOlBvcnRUeXBlNDcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDcyIiBuYW1lPSJJbnB1dDQ3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzIiIG5hbWU9Ik91dHB1dDQ3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzMiIG5hbWU9IklucHV0NDczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MyIgbmFtZT0iT3V0cHV0NDczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzMiIHR5cGU9InRuczpQb3J0VHlwZTQ3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NCIgbmFtZT0iSW5wdXQ0NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc0IiBuYW1lPSJPdXRwdXQ0NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NCIgdHlwZT0idG5zOlBvcnRUeXBlNDc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc1IiBuYW1lPSJJbnB1dDQ3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzUiIG5hbWU9Ik91dHB1dDQ3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzYiIG5hbWU9IklucHV0NDc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NiIgbmFtZT0iT3V0cHV0NDc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzYiIHR5cGU9InRuczpQb3J0VHlwZTQ3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NyIgbmFtZT0iSW5wdXQ0NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc3IiBuYW1lPSJPdXRwdXQ0NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NyIgdHlwZT0idG5zOlBvcnRUeXBlNDc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc4IiBuYW1lPSJJbnB1dDQ3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzgiIG5hbWU9Ik91dHB1dDQ3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzkiIG5hbWU9IklucHV0NDc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3OSIgbmFtZT0iT3V0cHV0NDc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzkiIHR5cGU9InRuczpQb3J0VHlwZTQ3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MCIgbmFtZT0iSW5wdXQ0ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgwIiBuYW1lPSJPdXRwdXQ0ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MCIgdHlwZT0idG5zOlBvcnRUeXBlNDgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MCIgYmluZGluZz0idG5zOkJpbmRpbmc0ODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgxIiBuYW1lPSJJbnB1dDQ4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODEiIG5hbWU9Ik91dHB1dDQ4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODIiIG5hbWU9IklucHV0NDgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MiIgbmFtZT0iT3V0cHV0NDgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODIiIHR5cGU9InRuczpQb3J0VHlwZTQ4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MyIgbmFtZT0iSW5wdXQ0ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgzIiBuYW1lPSJPdXRwdXQ0ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MyIgdHlwZT0idG5zOlBvcnRUeXBlNDgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MyIgYmluZGluZz0idG5zOkJpbmRpbmc0ODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg0IiBuYW1lPSJJbnB1dDQ4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODQiIG5hbWU9Ik91dHB1dDQ4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODUiIG5hbWU9IklucHV0NDg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4NSIgbmFtZT0iT3V0cHV0NDg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODUiIHR5cGU9InRuczpQb3J0VHlwZTQ4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NiIgbmFtZT0iSW5wdXQ0ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg2IiBuYW1lPSJPdXRwdXQ0ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NiIgdHlwZT0idG5zOlBvcnRUeXBlNDg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NiIgYmluZGluZz0idG5zOkJpbmRpbmc0ODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg3IiBuYW1lPSJJbnB1dDQ4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODciIG5hbWU9Ik91dHB1dDQ4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODgiIG5hbWU9IklucHV0NDg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4OCIgbmFtZT0iT3V0cHV0NDg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODgiIHR5cGU9InRuczpQb3J0VHlwZTQ4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4OSIgbmFtZT0iSW5wdXQ0ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg5IiBuYW1lPSJPdXRwdXQ0ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4OSIgdHlwZT0idG5zOlBvcnRUeXBlNDg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4OSIgYmluZGluZz0idG5zOkJpbmRpbmc0ODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkwIiBuYW1lPSJJbnB1dDQ5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTAiIG5hbWU9Ik91dHB1dDQ5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTEiIG5hbWU9IklucHV0NDkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5MSIgbmFtZT0iT3V0cHV0NDkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTEiIHR5cGU9InRuczpQb3J0VHlwZTQ5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MiIgbmFtZT0iSW5wdXQ0OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkyIiBuYW1lPSJPdXRwdXQ0OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MiIgdHlwZT0idG5zOlBvcnRUeXBlNDkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MiIgYmluZGluZz0idG5zOkJpbmRpbmc0OTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkzIiBuYW1lPSJJbnB1dDQ5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTMiIG5hbWU9Ik91dHB1dDQ5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTQiIG5hbWU9IklucHV0NDk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NCIgbmFtZT0iT3V0cHV0NDk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTQiIHR5cGU9InRuczpQb3J0VHlwZTQ5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5NSIgbmFtZT0iSW5wdXQ0OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk1IiBuYW1lPSJPdXRwdXQ0OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5NSIgdHlwZT0idG5zOlBvcnRUeXBlNDk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5NSIgYmluZGluZz0idG5zOkJpbmRpbmc0OTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk2IiBuYW1lPSJJbnB1dDQ5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTYiIG5hbWU9Ik91dHB1dDQ5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTciIG5hbWU9IklucHV0NDk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NyIgbmFtZT0iT3V0cHV0NDk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTciIHR5cGU9InRuczpQb3J0VHlwZTQ5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTciIGJpbmRpbmc9InRuczpCaW5kaW5nNDk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5OCIgbmFtZT0iSW5wdXQ0OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk4IiBuYW1lPSJPdXRwdXQ0OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5OCIgdHlwZT0idG5zOlBvcnRUeXBlNDk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5OCIgYmluZGluZz0idG5zOkJpbmRpbmc0OTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk5IiBuYW1lPSJJbnB1dDQ5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTkiIG5hbWU9Ik91dHB1dDQ5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBiZjk2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TdG9ja1F1b3RlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlN0b2NrUXVvdGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1N0b2NrUXVvdGUvIj4NCi0gIDx3c2RsOnR5cGVzPg0KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TdG9ja1F1b3RlLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQotICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImdldFF1b3RlUmVzcG9uc2UiPg0KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCi0gICAgICAgICAgPHhzZDphbGw+DQotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRpY2tlclN5bWJvbCIgdHlwZT0ieHNkOnN0cmluZyIvPg0KLSAgICAgICAgICA8L3hzZDphbGw+DQotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCi0gICAgICA8L3hzZDplbGVtZW50Pg0KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJnZXRRdW90ZVJlcXVlc3QiPg0KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCi0gICAgICAgICAgPHhzZDphbGw+DQotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InByaWNlIiB0eXBlPSJ4c2Q6ZmxvYXQiLz4NCi0gICAgICAgICAgPC94c2Q6YWxsPg0KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQotICAgICAgPC94c2Q6ZWxlbWVudD4NCi0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSGVhZGVycyI+DQotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPg0KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPg0KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJoZWFkZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPg0KLSAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCi0gICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCi0gICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIvPg0KLSAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPg0KLSAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCi0gICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+DQotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQotICAgICAgPC94c2Q6ZWxlbWVudD4NCi0gICAgPC94c2Q6c2NoZW1hPg0KLSAgPC93c2RsOnR5cGVzPg0KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJnZXRRdW90ZVJlc3BvbnNlIj4NCi0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6Z2V0UXVvdGVSZXNwb25zZSIgbmFtZT0iZ2V0UXVvdGVSZXNwb25zZSIvPg0KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpIZWFkZXJzIiBuYW1lPSJoZWFkZXJzIi8+DQotICA8L3dzZGw6bWVzc2FnZT4NCi0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0UXVvdGVSZXF1ZXN0Ij4NCi0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6Z2V0UXVvdGVSZXF1ZXN0IiBuYW1lPSJnZXRRdW90ZVJlcXVlc3QiLz4NCi0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6SGVhZGVycyIgbmFtZT0iaGVhZGVycyIvPg0KLSAgPC93c2RsOm1lc3NhZ2U+DQotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJTdG9ja1F1b3RlIj4NCi0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdldFF1b3RlIj4NCi0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6Z2V0UXVvdGVSZXF1ZXN0Ii8+DQotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRRdW90ZVJlc3BvbnNlIi8+DQotICAgIDwvd3NkbDpvcGVyYXRpb24+DQotICA8L3dzZGw6cG9ydFR5cGU+DQotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlN0b2NrUXVvdGVTT0FQIiB0eXBlPSJ0bnM6U3RvY2tRdW90ZSI+DQotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPg0KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ2V0UXVvdGUiPg0KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvU3RvY2tRdW90ZS9nZXRRdW90ZSIvPg0KLSAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgPHNvYXA6Ym9keSBwYXJ0cz0iZ2V0UXVvdGVSZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICAgIDxzb2FwOmhlYWRlciBtZXNzYWdlPSJ0bnM6Z2V0UXVvdGVSZXF1ZXN0IiBwYXJ0PSJoZWFkZXJzIiB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L3dzZGw6aW5wdXQ+DQotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgPHNvYXA6Ym9keSBwYXJ0cz0iZ2V0UXVvdGVSZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgICA8c29hcDpoZWFkZXIgbWVzc2FnZT0idG5zOmdldFF1b3RlUmVzcG9uc2UiIHBhcnQ9ImhlYWRlcnMiIHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvd3NkbDpvdXRwdXQ+DQotICAgIDwvd3NkbDpvcGVyYXRpb24+DQotICA8L3dzZGw6YmluZGluZz4NCi0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU3RvY2tRdW90ZSI+DQotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOlN0b2NrUXVvdGVTT0FQIiBuYW1lPSJTdG9ja1F1b3RlU09BUCI+DQotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnIi8+DQotICAgIDwvd3NkbDpwb3J0Pg0KLSAgPC93c2RsOnNlcnZpY2U+DQotPC93c2RsOmRlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9BbGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODhiOWNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4goCBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0goCoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5XU0RMU2NhbGFiaWxpdHlUZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBBbGxUZXN0cwotewotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiVGVzdCBmb3Igb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UiKTsKLSAgICAvLyRKVW5pdC1CRUdJTiQKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdChXU0RMU2NhbGFiaWxpdHlUZXN0cy5zdWl0ZSgpKTsKLSAgICAvLyRKVW5pdC1FTkQkCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuRWRpdG9yT0FHSVNXU0RMVGVzdGNhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGIxMTY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VQcm94eTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VQcm94eVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuRWRpdG9yT0FHSVNXU0RMVGVzdGNhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZWFkV1NETCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIFdTRExFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG9hZ2lzODBEaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9hZ2lzODBEaXIiKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChvYWdpczgwRGlyKTsKLSAgICBpZiAoIW9hZ2lzODBEaXIuZW5kc1dpdGgoIi8iKSAmJiAhb2FnaXM4MERpci5lbmRzV2l0aCgiXFwiKSkKLSAgICAgIG9hZ2lzODBEaXIgPSBvYWdpczgwRGlyICsgIi8iOwotICAgIEZpbGUgZGlyID0gbmV3IEZpbGUob2FnaXM4MERpciArICJPQUdJUzguMCIpOwotICAgIGlmIChkaXIuZXhpc3RzKCkgJiYgZGlyLmlzRGlyZWN0b3J5KCkpCi0gICAgewotICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCgic3AiKTsKLSAgICAgIHByb2plY3QuY3JlYXRlKG51bGwpOwotICAgICAgcHJvamVjdC5vcGVuKG51bGwpOwotICAgICAgY29weShkaXIsIHByb2plY3QpOwotICAgICAgam9pbkJhY2tncm91bmRKb2JzKCk7Ci0gICAgICBmaW5hbCBMaXN0IHdzZGxzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgcHJvamVjdC5hY2NlcHQKLSAgICAgICgKLSAgICAgICAgbmV3IElSZXNvdXJjZVByb3h5VmlzaXRvcigpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VQcm94eSBwcm94eSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJveHkuZ2V0TmFtZSgpLmVuZHNXaXRoKCIud3NkbCIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB3c2Rscy5hZGQocHJveHkucmVxdWVzdFJlc291cmNlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICBJQ29udGFpbmVyLklOQ0xVREVfUEhBTlRPTVMKLSAgICAgICk7Ci0gICAgICB0YWdBc1N1bW1hcnkoIk9wZW4gT0FHSVMgV1NETCIsIG5ldyBEaW1lbnNpb25bXSB7RGltZW5zaW9uLkVMQVBTRURfUFJPQ0VTUywgRGltZW5zaW9uLldPUktJTkdfU0VUfSk7Ci0gICAgICBzdGFydE1lYXN1cmluZygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHdzZGxzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIG9wZW5XU0RMKChJRmlsZSlpdC5uZXh0KCkpOwotICAgICAgc3RvcE1lYXN1cmluZygpOwotICAgICAgY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRQZXJmb3JtYW5jZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBmYWlsKGRpci50b1N0cmluZygpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjb3B5KEZpbGUgc3JjLCBJQ29udGFpbmVyIGRlc3QpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24KLSAgewotICAgIEZpbGVbXSBjaGlsZHJlbiA9IHNyYy5saXN0RmlsZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lID0gY2hpbGRyZW5baV0uZ2V0TmFtZSgpOwotICAgICAgaWYgKGNoaWxkcmVuW2ldLmlzRGlyZWN0b3J5KCkpCi0gICAgICB7Ci0gICAgICAgIElGb2xkZXIgZm9sZGVyID0gZGVzdC5nZXRGb2xkZXIobmV3IFBhdGgobmFtZSkpOwotICAgICAgICBmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG51bGwpOwotICAgICAgICBjb3B5KGNoaWxkcmVuW2ldLCBmb2xkZXIpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAobmFtZS5lbmRzV2l0aCgiLndzZGwiKSB8fCBuYW1lLmVuZHNXaXRoKCIueHNkIikpCi0gICAgICB7Ci0gICAgICAgIElGaWxlIGZpbGUgPSBkZXN0LmdldEZpbGUobmV3IFBhdGgobmFtZSkpOwotICAgICAgICBmaWxlLmNyZWF0ZShuZXcgRmlsZUlucHV0U3RyZWFtKGNoaWxkcmVuW2ldKSwgdHJ1ZSwgbnVsbCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGpvaW5CYWNrZ3JvdW5kSm9icygpCi0gIHsKLSAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyhuZXcgUnVubmFibGUoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELCBudWxsKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0gICAgICAgIHdoaWxlIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0IDwgNTAwMCkKLSAgICAgICAgewotICAgICAgICAgIGlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwbGF5LnNsZWVwKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgb3BlbldTREwoSUZpbGUgZmlsZSkgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uCi0gIHsKLSAgICBJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgSUVkaXRvclBhcnQgZWRpdG9yID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5vcGVuRWRpdG9yKG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSksIFBlcmZvcm1hbmNlUGx1Z2luLldTRExfRURJVE9SX0lELCB0cnVlKTsKLSAgICB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpLmNsb3NlRWRpdG9yKGVkaXRvciwgZmFsc2UpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5TdG9ja1F1b3RlV1NETFNldHVwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNWFiNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50cm8uSUludHJvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRyby5JSW50cm9QYXJ0OwotCi1wdWJsaWMgY2xhc3MgT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiUHJvamVjdCI7Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKE9wZW5TdG9ja1F1b3RlV1NETFNldHVwLmNsYXNzLCAiT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAiKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNsb3NlSW50cm8oKQotICB7Ci0gICAgSUludHJvTWFuYWdlciBpbnRyb01hbmFnZXIgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEludHJvTWFuYWdlcigpOwotICAgIElJbnRyb1BhcnQgaW50cm9QYXJ0ID0gaW50cm9NYW5hZ2VyLmdldEludHJvKCk7Ci0gICAgaWYgKGludHJvUGFydCAhPSBudWxsKQotICAgICAgaW50cm9NYW5hZ2VyLmNsb3NlSW50cm8oaW50cm9QYXJ0KTsKLSAgfQotCi0gIHByb3RlY3RlZCBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBuYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgSVByb2plY3Qgc2ltcGxlUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLSAgICBzaW1wbGVQcm9qZWN0LmNyZWF0ZShudWxsKTsKLSAgICBzaW1wbGVQcm9qZWN0Lm9wZW4obnVsbCk7Ci0gICAgcmV0dXJuIHNpbXBsZVByb2plY3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjb3B5RmlsZShJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc291cmNlLCBTdHJpbmcgZGVzdCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKGRlc3QpOwotICAgIGZpbGUuY3JlYXRlKFBlcmZvcm1hbmNlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShzb3VyY2UpLm9wZW5TdHJlYW0oKSwgdHJ1ZSwgbnVsbCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBqb2luQXV0b0J1aWxkKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gaW50ZXJydXB0ZWQgPSB0cnVlOwotICAgIHdoaWxlIChpbnRlcnJ1cHRlZCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELCBudWxsKTsKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBpbnRlcnJ1cHRlZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgY2xvc2VJbnRybygpOwotICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgY29weUZpbGUocHJvamVjdCwgImRhdGEvU3RvY2tRdW90ZS9TdG9ja1F1b3RlLndzZGwiLCAiU3RvY2tRdW90ZS53c2RsIik7Ci0gICAgam9pbkF1dG9CdWlsZCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlblN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiZTViNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotCi1wdWJsaWMgY2xhc3MgT3BlblN0b2NrUXVvdGVXU0RMVGVzdENhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShPcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5jbGFzcywgIk9wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSVByb2plY3QgZ2V0UHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotICAgIHByb2plY3Qub3BlbihudWxsKTsKLSAgICBwcm9qZWN0LnJlZnJlc2hMb2NhbChJUHJvamVjdC5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0gICAgam9pbkF1dG9CdWlsZCgpOwotICAgIHJldHVybiBwcm9qZWN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgam9pbkF1dG9CdWlsZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBib29sZWFuIGludGVycnVwdGVkID0gdHJ1ZTsKLSAgICB3aGlsZSAoaW50ZXJydXB0ZWQpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbnVsbCk7Ci0gICAgICAgIGludGVycnVwdGVkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgaW50ZXJydXB0ZWQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBJRWRpdG9yUGFydCBvcGVuRWRpdG9yKElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCwgU3RyaW5nIGVkaXRvcmlkKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24KLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICByZXR1cm4gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5vcGVuRWRpdG9yKGVkaXRvcklucHV0LCBlZGl0b3JpZCwgdHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBjbG9zZUVkaXRvcihJRWRpdG9yUGFydCBlZGl0b3IpCi0gIHsKLSAgICBJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgcmV0dXJuIHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCkuY2xvc2VFZGl0b3IoZWRpdG9yLCBmYWxzZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlblN0b2NrUXVvdGVXU0RMKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3QoT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAuUFJPSkVDVF9OQU1FKTsKLSAgICBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSBuZXcgRmlsZUVkaXRvcklucHV0KChJRmlsZSlwcm9qZWN0LmZpbmRNZW1iZXIoIlN0b2NrUXVvdGUud3NkbCIpKTsKLSAgICBzdGFydE1lYXN1cmluZygpOwotICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBvcGVuRWRpdG9yKGVkaXRvcklucHV0LCBQZXJmb3JtYW5jZVBsdWdpbi5XU0RMX0VESVRPUl9JRCk7Ci0gICAgc3RvcE1lYXN1cmluZygpOwotICAgIGNvbW1pdE1lYXN1cmVtZW50cygpOwotICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gICAgY2xvc2VFZGl0b3IoZWRpdG9yUGFydCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTY4ZDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgUGVyZm9ybWFuY2VQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBQZXJmb3JtYW5jZVBsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotICAvLyBUT0RPOiBUaGVzZSB0d28gY29uc3RhbnRzIHNob3VsZCByZWFsbHkgYmUgcHVsbGVkIGZyb20gdGhlIHBsdWdpbiB3aGljaCBkZWNsYXJlcyBpdC4KLSAgLy8gVGhpcyB3aWxsIGF2b2lkICJtYWdpYyBzdHJpbmciIGRlcGVuZGVuY2llcyB3aGljaCBjYW4gYmUgZWFzaWx5IGJyb2tlbi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9FRElUT1JfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvciI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9WQUxJREFUT1JfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExEZWxlZ2F0aW5nVmFsaWRhdG9yIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlIjsJLy8kTk9OLU5MUy0xJAotCQotICAvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFBlcmZvcm1hbmNlUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBQZXJmb3JtYW5jZVBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQl0cnkgewotCQkJaWYgKHJlc291cmNlQnVuZGxlID09IG51bGwpCi0JCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRPQUdJU1dTRExUZXN0Y2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZE9BR0lTV1NETFRlc3RjYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNjk2ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZE9BR0lTV1NETFRlc3RjYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGouV1NETFJlYWRlckltcGw7Ci0KLXB1YmxpYyBjbGFzcyBSZWFkT0FHSVNXU0RMVGVzdGNhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgTGlzdCBkZWZzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWFkV1NETCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIFdTRExFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBvYWdpczgwRGlyID0gU3lzdGVtLmdldFByb3BlcnR5KCJvYWdpczgwRGlyIik7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwob2FnaXM4MERpcik7Ci0gICAgaWYgKCFvYWdpczgwRGlyLmVuZHNXaXRoKCIvIikgJiYgIW9hZ2lzODBEaXIuZW5kc1dpdGgoIlxcIikpCi0gICAgICBvYWdpczgwRGlyID0gb2FnaXM4MERpciArICIvIjsKLSAgICBGaWxlIGRpciA9IG5ldyBGaWxlKG9hZ2lzODBEaXIgKyAiT0FHSVM4LjAvd3Mvd3NkbCIpOwotICAgIGlmIChkaXIuZXhpc3RzKCkgJiYgZGlyLmlzRGlyZWN0b3J5KCkpCi0gICAgewotICAgICAgRmlsZVtdIHdzZGxzID0gZGlyLmxpc3RGaWxlcwotICAgICAgKAotICAgICAgICBuZXcgRmlsZUZpbHRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBwYXRobmFtZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcGF0aG5hbWUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIud3NkbCIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgKTsKLSAgICAgIHRhZ0FzU3VtbWFyeSgiUmVhZCBPQUdJUyBXU0RMIiwgbmV3IERpbWVuc2lvbltdIHtEaW1lbnNpb24uRUxBUFNFRF9QUk9DRVNTLCBEaW1lbnNpb24uV09SS0lOR19TRVR9KTsKLSAgICAgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxzLmxlbmd0aDsgaSsrKQotICAgICAgICByZWFkV1NETCh3c2Rsc1tpXS50b1VSTCgpLnRvU3RyaW5nKCkpOwotICAgICAgc3RvcE1lYXN1cmluZygpOwotICAgICAgY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRQZXJmb3JtYW5jZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBmYWlsKGRpci50b1N0cmluZygpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZWFkV1NETChTdHJpbmcgbG9jYXRpb24pIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBXU0RMUmVhZGVySW1wbCByZWFkZXIgPSBuZXcgV1NETFJlYWRlckltcGwoKTsKLSAgICBkZWZzLmFkZChyZWFkZXIucmVhZFdTREwobG9jYXRpb24pKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yzk4YTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBSZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlLmNsYXNzLCAiUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UiKTsKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCB0ZXN0UmVhZFN0b2NrUXVvdGVXU0RMX0VNRigpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgVVJMIHdzZGwgPSBQZXJmb3JtYW5jZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoImRhdGEvU3RvY2tRdW90ZS9TdG9ja1F1b3RlLndzZGwiKTsKLSAgICAKLQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICBXU0RMUmVzb3VyY2VJbXBsIHJlc291cmNlID0gKFdTRExSZXNvdXJjZUltcGwpcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIikpOwotCXJlc291cmNlLnNldFVSSShVUkkuY3JlYXRlVVJJKHdzZGwudG9TdHJpbmcoKSkpOwotICAgIGphdmEudXRpbC5NYXAgbWFwID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIG1hcC5wdXQoV1NETFJlc291cmNlSW1wbC5DT05USU5VRV9PTl9MT0FEX0VSUk9SLEJvb2xlYW4udmFsdWVPZih0cnVlKSk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLlVTRV9FWFRFTlNJT05fRkFDVE9SSUVTLEJvb2xlYW4udmFsdWVPZih0cnVlKSk7Ci0JcmVzb3VyY2UubG9hZChtYXApOyAKLQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSByZXNvdXJjZS5nZXREZWZpbml0aW9uKCk7Ci0JZGVmaW5pdGlvbi5nZXRRTmFtZSgpOwotCQotCXN0b3BNZWFzdXJpbmcoKTsKLQljb21taXRNZWFzdXJlbWVudHMoKTsKLQlhc3NlcnRQZXJmb3JtYW5jZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEwZDA5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLXB1YmxpYyBjbGFzcyBSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzLCAiUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UiKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdFJlYWRTdG9ja1F1b3RlV1NETCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgVVJMIHdzZGwgPSBQZXJmb3JtYW5jZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoImRhdGEvU3RvY2tRdW90ZS9TdG9ja1F1b3RlLndzZGwiKTsKLSAgICBXU0RMRmFjdG9yeUltcGwgZmFjdG9yeSA9IG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKLSAgICBXU0RMUmVhZGVyIHJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHJlYWRlci5yZWFkV1NETCh3c2RsLnRvU3RyaW5nKCksIG5ldyBJbnB1dFNvdXJjZSh3c2RsLm9wZW5TdHJlYW0oKSkpOwotICAgIGRlZmluaXRpb24uZ2V0UU5hbWUoKTsKLSAgICBzdG9wTWVhc3VyaW5nKCk7Ci0JY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0JYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGZjN2YzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlRmlsdGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExWYWxpZGF0b3I7Ci0KLQotcHVibGljIGNsYXNzIFZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgV1NETFZhbGlkYXRvciB2YWxpZGF0b3I7Ci0JICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICAgIC8vIFNldCB0aGUgV1MtSSBwcmVmZXJlbmNlIHRvIGlnbm9yZSBzbyBvbmx5IFdTREwgZXJyb3JzIHdpbGwgYmUgdGVzdGVkLgotICAgIFdTUGx1Z2luIHdzdWkgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpOwotICAgIFBlcnNpc3RlbnRXU0lDb250ZXh0IHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gICAgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJQVBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gIH0gCi0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlV1NETCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIFdTRExFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBvYWdpczgwRGlyID0gU3lzdGVtLmdldFByb3BlcnR5KCJvYWdpczgwRGlyIik7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwob2FnaXM4MERpcik7Ci0gICAgaWYgKCFvYWdpczgwRGlyLmVuZHNXaXRoKCIvIikgJiYgIW9hZ2lzODBEaXIuZW5kc1dpdGgoIlxcIikpCi0gICAgICBvYWdpczgwRGlyID0gb2FnaXM4MERpciArICIvIjsKLSAgICBGaWxlIGRpciA9IG5ldyBGaWxlKG9hZ2lzODBEaXIgKyAiT0FHSVM4LjAvd3Mvd3NkbCIpOwotICAgIGlmIChkaXIuZXhpc3RzKCkgJiYgZGlyLmlzRGlyZWN0b3J5KCkpCi0gICAgewotICAgICAgRmlsZVtdIHdzZGxzID0gZGlyLmxpc3RGaWxlcwotICAgICAgKAotICAgICAgICBuZXcgRmlsZUZpbHRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBwYXRobmFtZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcGF0aG5hbWUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIud3NkbCIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgKTsKLSAgICAgIHRhZ0FzU3VtbWFyeSgiVmFsaWRhdGUgT0FHSVMgV1NETCIsIG5ldyBEaW1lbnNpb25bXSB7RGltZW5zaW9uLkVMQVBTRURfUFJPQ0VTUywgRGltZW5zaW9uLldPUktJTkdfU0VUfSk7Ci0JICB2YWxpZGF0b3IgPSBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0JICBzdGFydE1lYXN1cmluZygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2Rscy5sZW5ndGg7IGkrKykKLSAgICAgICAgdmFsaWRhdGVXU0RMKHdzZGxzW2ldLnRvVVJMKCkudG9TdHJpbmcoKSk7Ci0gICAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKLSAgICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGZhaWwoZGlyLnRvU3RyaW5nKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlV1NETChTdHJpbmcgbG9jYXRpb24pIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB2YWxpZGF0b3IudmFsaWRhdGUobG9jYXRpb24pOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmVhYWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETFZhbGlkYXRvcjsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBXU0RMVmFsaWRhdG9yIHZhbGlkYXRvcjsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgICAvLyBTZXQgdGhlIFdTLUkgcHJlZmVyZW5jZSB0byBpZ25vcmUgc28gb25seSBXU0RMIGVycm9ycyB3aWxsIGJlIHRlc3RlZC4KLSAgICBXU1BsdWdpbiB3c3VpID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lTU0JQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLSAgICB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lBUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0gIH0gCi0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlV1NETCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIFdTRExFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBvYWdpczgwRGlyID0gU3lzdGVtLmdldFByb3BlcnR5KCJvYWdpczgwRGlyIik7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwob2FnaXM4MERpcik7Ci0gICAgaWYgKCFvYWdpczgwRGlyLmVuZHNXaXRoKCIvIikgJiYgIW9hZ2lzODBEaXIuZW5kc1dpdGgoIlxcIikpCi0gICAgICBvYWdpczgwRGlyID0gb2FnaXM4MERpciArICIvIjsKLSAgICBGaWxlIGRpciA9IG5ldyBGaWxlKG9hZ2lzODBEaXIgKyAiT0FHSVM4LjAvd3Mvd3NkbCIpOwotICAgIGlmIChkaXIuZXhpc3RzKCkgJiYgZGlyLmlzRGlyZWN0b3J5KCkpCi0gICAgewotICAgICAgRmlsZVtdIHdzZGxzID0gZGlyLmxpc3RGaWxlcwotICAgICAgKAotICAgICAgICBuZXcgRmlsZUZpbHRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBwYXRobmFtZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcGF0aG5hbWUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIud3NkbCIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgKTsKLSAgICAgIHRhZ0FzU3VtbWFyeSgiVmFsaWRhdGUgT0FHSVMgV1NETCB3aXRoIFdTLUkiLCBuZXcgRGltZW5zaW9uW10ge0RpbWVuc2lvbi5FTEFQU0VEX1BST0NFU1MsIERpbWVuc2lvbi5XT1JLSU5HX1NFVH0pOwotCSAgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotCSAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHZhbGlkYXRlV1NETCh3c2Rsc1tpXS50b1VSTCgpLnRvU3RyaW5nKCkpOwotICAgICAgc3RvcE1lYXN1cmluZygpOwotICAgICAgY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRQZXJmb3JtYW5jZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBmYWlsKGRpci50b1N0cmluZygpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2YWxpZGF0ZVdTREwoU3RyaW5nIGxvY2F0aW9uKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgdmFsaWRhdG9yLnZhbGlkYXRlKGxvY2F0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUwMmM3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMVmFsaWRhdG9yOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwcml2YXRlIFdTRExWYWxpZGF0b3IgdmFsaWRhdG9yOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICAgIC8vIFNldCB0aGUgV1MtSSBwcmVmZXJlbmNlIHRvIGlnbm9yZSBzbyBvbmx5IFdTREwgZXJyb3JzIHdpbGwgYmUgdGVzdGVkLgotICAgIFdTUGx1Z2luIHdzdWkgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpOwotICAgIFBlcnNpc3RlbnRXU0lDb250ZXh0IHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gICAgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJQVBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0gIH0gIAotICAKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5jbGFzcywgIlZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVTdG9ja1F1b3RlV1NETCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHZhbGlkYXRvciA9IFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgICBVUkwgd3NkbCA9IFBlcmZvcm1hbmNlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbCIpOwotICAgIFN0cmluZyBwYXRoID0gd3NkbC50b1N0cmluZygpOwotCi0gICAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICB2YWxpZGF0b3IudmFsaWRhdGUocGF0aCk7Ci0gICAgc3RvcE1lYXN1cmluZygpOwotICAgIGNvbW1pdE1lYXN1cmVtZW50cygpOwotICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWQ1ZmE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETFZhbGlkYXRvcjsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwcml2YXRlIFdTRExWYWxpZGF0b3IgdmFsaWRhdG9yOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICAgIC8vIFNldCB0aGUgV1MtSSBwcmVmZXJlbmNlIHRvIGlnbm9yZSBzbyBvbmx5IFdTREwgZXJyb3JzIHdpbGwgYmUgdGVzdGVkLgotICAgIFdTUGx1Z2luIHdzdWkgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpOwotICAgIFBlcnNpc3RlbnRXU0lDb250ZXh0IHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICAgIHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSUFQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLSAgfSAgCi0gIAotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuY2xhc3MsICJWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSIpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVTdG9ja1F1b3RlV1NJKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotICAgIFVSTCB3c2RsID0gUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KCJkYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIik7Ci0gICAgU3RyaW5nIHBhdGggPSB3c2RsLnRvU3RyaW5nKCk7Ci0KLSAgICBzdGFydE1lYXN1cmluZygpOwkKLSAgICB2YWxpZGF0b3IudmFsaWRhdGUocGF0aCk7Ci0gICAgc3RvcE1lYXN1cmluZygpOwotICAgIGNvbW1pdE1lYXN1cmVtZW50cygpOwotICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZDI1YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuT25lVmFsaWRhdG9yT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi0vKioKLSAqIFRlc3QgZm9yIHZhbGlkYXRpb24gb2YgNTAgV1NETCBmaWxlcyBpbiB0aGUgc2FtcGxlIHdvcmtzcGFjZS4KLSAqIAotICogQGF1dGhvciBLaWh1cCBCb28sIElCTQotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZSB7Ci0JCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlLmNsYXNzLCAiVGVzdCIpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCSAgICBzdXBlci5zZXRVcCgpOwotCQkvLyBTZXQgdGhlIFdTLUkgcHJlZmVyZW5jZSB0byBpZ25vcmUgc28gV1MtSSB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIHJ1bi4KLQkJV1NQbHVnaW4gd3N1aSA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0JCVBlcnNpc3RlbnRXU0lDb250ZXh0IHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0JCXdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RXU0RMUHJvamVjdFZhbGlkYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHByb2plY3REaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInByb2plY3REaXIiKTsKLQkJQXNzZXJ0LmFzc2VydE5vdE51bGwocHJvamVjdERpcik7Ci0JCWlmICghcHJvamVjdERpci5lbmRzV2l0aCgiLyIpICYmICFwcm9qZWN0RGlyLmVuZHNXaXRoKCJcXCIpKQotCQkJcHJvamVjdERpciA9IHByb2plY3REaXIgKyAiLyI7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUocHJvamVjdERpcik7Ci0JCWlmIChkaXIuZXhpc3RzKCkgJiYgZGlyLmlzRGlyZWN0b3J5KCkpIHsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoIldTRExQcm9qZWN0Iik7Ci0JCQlwcm9qZWN0LmNyZWF0ZShudWxsKTsKLQkJCXByb2plY3Qub3BlbihudWxsKTsKLQkJCWNvcHkoZGlyLCBwcm9qZWN0KTsKLQkJCWpvaW5CYWNrZ3JvdW5kSm9icygpOwotCi0JCQlJV29ya3NwYWNlUnVubmFibGUgbXlSdW5uYWJsZSA9IG5ldyBPbmVWYWxpZGF0b3JPcGVyYXRpb24oCi0JCQkJCXByb2plY3QsCi0gICAgICAgICAgUGVyZm9ybWFuY2VQbHVnaW4uV1NETF9WQUxJREFUT1JfSUQsCi0JCQkJCXRydWUsIAotCQkJCQlmYWxzZSk7Ci0JCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQotCQkJdGFnQXNTdW1tYXJ5KCJWYWxpZGF0ZSBXU0RMIFByb2plY3QiLCBuZXcgRGltZW5zaW9uW10ge0RpbWVuc2lvbi5FTEFQU0VEX1BST0NFU1MsIERpbWVuc2lvbi5XT1JLSU5HX1NFVCB9KTsKLQkJCXN0YXJ0TWVhc3VyaW5nKCk7Ci0JCQl3b3Jrc3BhY2UucnVuKG15UnVubmFibGUsIG51bGwpOwotCQkJLy8gcHJvamVjdC5idWlsZChJbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyLkNMRUFOX0JVSUxELG51bGwpOwotCQkJc3RvcE1lYXN1cmluZygpOwotCQkJY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0JCQlhc3NlcnRQZXJmb3JtYW5jZSgpOwotCQl9IGVsc2UKLQkJCWZhaWwoZGlyLnRvU3RyaW5nKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjb3B5KEZpbGUgc3JjLCBJQ29udGFpbmVyIGRlc3QpIHRocm93cyBDb3JlRXhjZXB0aW9uLAotCQkJRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLQkJRmlsZVtdIGNoaWxkcmVuID0gc3JjLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgbmFtZSA9IGNoaWxkcmVuW2ldLmdldE5hbWUoKTsKLQkJCWlmIChjaGlsZHJlbltpXS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQkJSUZvbGRlciBmb2xkZXIgPSBkZXN0LmdldEZvbGRlcihuZXcgUGF0aChuYW1lKSk7Ci0JCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQljb3B5KGNoaWxkcmVuW2ldLCBmb2xkZXIpOwotCQkJfSBlbHNlIHsKLQkJCQlJRmlsZSBmaWxlID0gZGVzdC5nZXRGaWxlKG5ldyBQYXRoKG5hbWUpKTsKLQkJCQlmaWxlLmNyZWF0ZShuZXcgRmlsZUlucHV0U3RyZWFtKGNoaWxkcmVuW2ldKSwgdHJ1ZSwgbnVsbCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgam9pbkJhY2tncm91bmRKb2JzKCkgewotCQlEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oCi0JCQkJCQkJUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELCBudWxsKTsKLQkJCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJfQotCQkJCWxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCQlEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKLQkJCQl3aGlsZSAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCA8IDUwMDApIHsKLQkJCQkJaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKSB7Ci0JCQkJCQlkaXNwbGF5LnNsZWVwKCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMDBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjEwMEtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NzYzODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjEwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgT3BlbjEwMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgT3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xMDBLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMTAwS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjEwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xMEtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MWZmMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjEwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuMTBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMTBLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMTBLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMUtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMUtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NjZlNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjFLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIE9wZW4xS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzFLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMUtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xTUJGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xTUJGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3NGM1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMU1CRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgT3BlbjFNQkZpbGVUZXN0Q2FzZSBleHRlbmRzIE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMU1CLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xTUJGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjIwMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMjAwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3MjY5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMjAwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuMjAwS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzIwMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4yMDBLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuNTAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW41MDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmI0MTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW41MDBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIE9wZW41MDBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvNTAwS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjUwMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW5XU0RMRWRpdG9yVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW5XU0RMRWRpdG9yVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ0MTNkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuV1NETEVkaXRvclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi50ZXN0cy5wZXJmb3JtYW5jZS5pbnRlcm5hbC5zY2FsYWJpbGl0eS5PcGVuRWRpdG9yVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW47Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBPcGVuV1NETEVkaXRvclRlc3RDYXNlIGV4dGVuZHMgT3BlbkVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RWRpdG9ySWQoKQotICB7Ci0gICAgcmV0dXJuIFBlcmZvcm1hbmNlUGx1Z2luLldTRExfRURJVE9SX0lEOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRCdW5kbGVJZCgpCi0gIHsKLSAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uQlVORExFX0lEOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YjNjNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDEwMDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVueDEwMCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NmVkZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAxMDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVueDEwKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYzhhNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVueDEoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzc1YTdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gMjU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbngyNSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMTcyOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiA1MDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVueDUwKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg4NjVkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDc1OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW54NzUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NTI2M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMucGVyZm9ybWFuY2UuaW50ZXJuYWwuc2NhbGFiaWxpdHkuUmVwZWF0T3BlbkVkaXRvclRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlUGx1Z2luOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdE9wZW5FZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEVkaXRvcklkKCkKLSAgewotICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5XU0RMX0VESVRPUl9JRDsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QnVuZGxlSWQoKQotICB7Ci0gICAgcmV0dXJuIFBlcmZvcm1hbmNlUGx1Z2luLkJVTkRMRV9JRDsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzEwMEtCLndzZGwiOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmM1NGQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKgotKiBDb250cmlidXRvcnM6Ci0qIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLnBlcmZvcm1hbmNlLmludGVybmFsLnNjYWxhYmlsaXR5LlJlcGVhdFJ1blZhbGlkYXRvclRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlUGx1Z2luOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRWYWxpZGF0b3JJZCgpCi0gIHsKLSAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uV1NETF9WQUxJREFUT1JfSUQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJ1bmRsZUlkKCkKLSAgewotICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5CVU5ETEVfSUQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xMDBLQi53c2RsIjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk1NTRmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDEwMDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZXgxMDAoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYjdiYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gMTA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGV4MTAoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjIxMTY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAxOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRleDEoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzdkNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gMjU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGV4MjUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0YmQxNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gNTA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGV4NTAoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3Y2JiNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gNzU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGV4NzUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1J1bldTRExWYWxpZGF0b3JUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjc0ZGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1J1bldTRExWYWxpZGF0b3JUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKgotKiBDb250cmlidXRvcnM6Ci0qIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLnBlcmZvcm1hbmNlLmludGVybmFsLnNjYWxhYmlsaXR5LlJ1blZhbGlkYXRvclRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlUGx1Z2luOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlIGV4dGVuZHMgUnVuVmFsaWRhdG9yVGVzdENhc2UKLXsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFZhbGlkYXRvcklkKCkKLSAgewotICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlUGx1Z2luLldTRExfVkFMSURBVE9SX0lEOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRCdW5kbGVJZCgpCi0gIHsKLSAgICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5CVU5ETEVfSUQ7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTIwNzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwMDA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzFlZTg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwMDA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNDMyODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDAwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg1ZDgxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMTAwS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjEwMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMzdjMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDljYzNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwiOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTUzN2EyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QiOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZDIyMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMTBLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMTBLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNmODA1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjFmOTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTBXU0RMc05vRGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJhMjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFlMzgwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMUtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ODc3OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzFNQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMU1CRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4NTFkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzIwMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4yMDBLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMmNiMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS81MDBLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuNTAwS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvV1NETFNjYWxhYmlsaXR5VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1dTRExTY2FsYWJpbGl0eVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNjdhOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvV1NETFNjYWxhYmlsaXR5VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSCgKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2NhbGFiaWxpdHlUZXN0cwotewotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJUZXN0IGZvciBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eSIpOwotICAgIC8vJEpVbml0LUJFR0lOJAotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlbjIwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLS8vICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuMU1CRmlsZVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlbjEwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuMUtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlbjEwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoT3BlbjUwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0vLyAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLS8vICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgLy8kSlVuaXQtRU5EJAotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGQwZmQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZQotQnVuZGxlLU5hbWUuMCA9IFdTREwgUGVyZm9ybWFuY2UgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwM2VmNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icGVyZm9ybWFuY2UiIGJhc2VkaXI9Ii4iPgotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0icGVyZi10ZXN0cy1maWxlIiB2YWx1ZT0iJHt0ZXN0RGlyfS9wZXJmb3JtYW5jZS10ZXN0cy54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iLURvYWdpczgwRGlyPSR7dGVzdERpcn0gLURwcm9qZWN0RGlyPSR7dGVzdERpcn0vT0FHSVM4LjAgLVhteDUxMk0iLz4KLSAgPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2Vfd3NkbF9wZXJmb3JtYW5jZSIvPgotICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd29ya3NwYWNlX3dzZGxfcGVyZm9ybWFuY2UiLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgIDxkZWxldGU+Ci0gICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0gIAotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHBlcmZvcm1hbmNlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlX3N1aXRlIj4KLQotICAgIDxhbnRjYWxsIHRhcmdldD0icmVhZE9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJyZWFkT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9InJlYWRPQUdJU1dTRExUZXN0Y2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlIi8+Ci0gIAkKLSAgICA8YW50Y2FsbCB0YXJnZXQ9Im9wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZSIvPgotICAgIDxhbnRjYWxsIHRhcmdldD0ib3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJvcGVuRWRpdG9yT0FHSVNXU0RMVGVzdGNhc2UiLz4KLQotICAgIDxhbnRjYWxsIHRhcmdldD0iUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9IlJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW5TdG9ja1F1b3RlV1NETFNldHVwIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW5TdG9ja1F1b3RlV1NETFNldHVwIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW5TdG9ja1F1b3RlV1NETFNldHVwIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjFLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMUtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xS0JGaWxlVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMTBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMTBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMTBLQkZpbGVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjEwMEtCRmlsZVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjIwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4yMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMjAwS0JGaWxlVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuNTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW41MDBLQkZpbGVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xTUJGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjFNQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMU1CRmlsZVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZSIvPgotCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UiLz4KLQotCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UiLz4KLSAgCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlIi8+Ci0gCi0gIAk8IS0tCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlIi8+Ci0gIAktLT4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotPCEtLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotLS0+IAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAkKLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJyZWFkT0FHSVNXU0RMVGVzdGNhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUmVhZE9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlZhbGlkYXRlT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5WYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5WYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCQotICA8dGFyZ2V0IG5hbWU9Im9wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZSI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuT3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9IlJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5WYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9Ik9wZW5TdG9ja1F1b3RlV1NETFNldHVwIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5PcGVuU3RvY2tRdW90ZVdTRExTZXR1cCIvPgotICAgIDwvYW50PgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5PcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotCSAgPHRhcmdldCBuYW1lPSJPcGVuMUtCRmlsZVRlc3RDYXNlIj4KLQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Lk9wZW4xS0JGaWxlVGVzdENhc2UiLz4KLQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCSAgICA8L2FudD4KLQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJPcGVuMTBLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Lk9wZW4xMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iT3BlbjEwMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuT3BlbjEwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iT3BlbjIwMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuT3BlbjIwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iT3BlbjUwMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuT3BlbjUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iT3BlbjFNQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Lk9wZW4xTUJGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0JCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQkKLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiPgotCQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQkKLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCQk8L2FudD4KLQkgICAgICA8L3RhcmdldD4KLQkKLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICA8L3RhcmdldD4KLSAgCi0gIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgcGVyZm9ybWFuY2UgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIiBkZXBlbmRzPSJpbml0LHBlcmZvcm1hbmNlX3N1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA1MDhjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzZGwudGVzdHMudWkuamFyCi1qYXZhQ29tcGlsZXIud3NkbC50ZXN0cy51aS5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZmYjc4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE1ZTBkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNTdW4gSnVuIDAzIDAwOjQ3OjA1IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTViMjA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogV1NETCBNb2RlbCBVSSBTYW1wbGVzCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHdzZGwudGVzdHMudWkuamFyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LndzZGwsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxNThlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS53c2RsLnRlc3RzLnVpLmphciA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICB3c2RsLnRlc3RzLnVpLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjVmMTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHBsdWdpbj4KLQotICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2RsIgotICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS5vYmplY3RfY29udHJpYnV0aW9uIj4KLSAgICAgICAgIDwhLS0KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICBsYWJlbD0iR2VuZXJhdGUgV1NETCBTYW1wbGUiCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLkdlbmVyYXRlV1NETEFjdGlvbkRlbGVnYXRlIgotICAgICAgICAgICAgIGVuYWJsZXNGb3I9IjEiCi0gICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLmdlbmVyYXRlX3dzZGxfYWN0aW9uIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgLS0+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgbGFiZWw9IkNvbnZlcnQgdG8gV1NETCAyLjAgRG9jdW1lbnQiCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLkNvbnZlcnRXU0RMMjBBY3Rpb25EZWxlZ2F0ZSIKLSAgICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS5jb252ZXJ0X3dzZGxfYWN0aW9uIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgCi0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9Db252ZXJ0V1NETDIwQWN0aW9uRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9Db252ZXJ0V1NETDIwQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhZWZkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdWkvQ29udmVydFdTREwyMEFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuV1NETENvbnZlcnRlcjsKLQotCi0KLXB1YmxpYyBjbGFzcyBDb252ZXJ0V1NETDIwQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0KLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgSUZpbGUgaWZpbGUgPSBudWxsOwotICAgIGlmICghc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICB7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y3R1cmVkU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0gICAgICBPYmplY3QgZWxlbWVudCA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAJaWZpbGUgPSAoSUZpbGUpIGVsZW1lbnQ7Ci0gICAgICAgIElQYXRoIHBhdGggPSBpZmlsZS5nZXRMb2NhdGlvbigpOwotICAgICAgICBJUGF0aCBwYXRoMiA9IHBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpOwotICAgICAgICBTdHJpbmcgb3V0cHV0ID0gcGF0aDIudG9TdHJpbmcoKSArICIvIiArIGdldE5ld05hbWUoaWZpbGUpOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0JCSAgICB7ICAKLSAgICAgICAgICAgIERlZmluaXRpb24gZGVmID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKCJmaWxlOi8iICsgcGF0aC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIFdTRExDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IFdTRExDb252ZXJ0ZXIoZGVmKTsKLSAgICAgICAgICAgIGNvbnZlcnRlci5nZW5lcmF0ZTIwKG91dHB1dCk7Ci0gICAgICAgICAgICBJQ29udGFpbmVyIGZvbGRlciA9IGlmaWxlLmdldFBhcmVudCgpOwotICAgICAgICAgICAgZm9sZGVyLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfT05FLG51bGwpOwotCQkgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JCSAgICB7Ci0gICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldE5ld05hbWUoSUZpbGUgaWZpbGUpCi0gIHsKLSAgICAvLyBBc3NlcnQgY3VycmVudE5hbWUgaGFzIGEgZmlsZSBleHRlbnNpb24sIGUuZy4gZm9vLndzZGwuCi0gICAgLy8gVGhpcyB3aWxsIHJldHVybiBmb29WMjAud3NkbC4KLSAgICBTdHJpbmcgY3VycmVudE5hbWUgPSBpZmlsZS5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBjdXJyZW50TmFtZS5zdWJzdHJpbmcoMCxjdXJyZW50TmFtZS5pbmRleE9mKCIuIikpOwotICAgIFN0cmluZyBleHRlbnNpb24gPSBjdXJyZW50TmFtZS5zdWJzdHJpbmcoY3VycmVudE5hbWUuaW5kZXhPZigiLiIpKTsKLSAgICBTdHJpbmcgbmV3TmFtZSA9IG5hbWUgKyAiVjIwIiArIGV4dGVuc2lvbjsKLSAgICByZXR1cm4gbmV3TmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdWkvR2VuZXJhdGVXU0RMQWN0aW9uRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9HZW5lcmF0ZVdTRExBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDk1MTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9HZW5lcmF0ZVdTRExBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETEdlbmVyYXRpb25UZXN0OwotCi1wdWJsaWMgY2xhc3MgR2VuZXJhdGVXU0RMQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0KLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgSUZpbGUgaWZpbGUgPSBudWxsOwotICAgIGlmICghc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICB7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y3R1cmVkU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0gICAgICBPYmplY3QgZWxlbWVudCA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAJaWZpbGUgPSAoSUZpbGUpIGVsZW1lbnQ7Ci0gICAgICAgIElQYXRoIHBhdGggPSBpZmlsZS5nZXRMb2NhdGlvbigpOwotICAgICAgICBwYXRoID0gcGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0gICAgICAgIFN0cmluZyBvdXRwdXQgPSBwYXRoLnRvU3RyaW5nKCkgKyAiL015U2FtcGxlLndzZGwiOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0JCXsKLSAgICAgICAgICAobmV3IFdTRExHZW5lcmF0aW9uVGVzdCgpKS5nZW5lcmF0ZVRlbXBlcmF0dXJlU2VydmljZShvdXRwdXQpOwotCQl9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE1YzFiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9YTUxDb25zdGFudHMiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC93c2RsLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYmE5OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13c2RsLnRlc3RzLmphcgotamF2YUNvbXBpbGVyLndzZGwudGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MTNhNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NTAzMzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jV2VkIFNlcCAyNiAwNTo0NDo1NCBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNmJiYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLSNTdW4gQXByIDE1IDAyOjM0OjIyIEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25fdHlwZV9tZW1iZXJzX29uX2NvbHVtbnM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9lbnVtX2NvbnN0YW50PTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZXhwbGljaXRfY29uc3RydWN0b3JfY2FsbD01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX21ldGhvZF9pbnZvY2F0aW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fcXVhbGlmaWVkX2FsbG9jYXRpb25fZXhwcmVzc2lvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXNzaWdubWVudD0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9iaW5hcnlfZXhwcmVzc2lvbj0yMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29tcGFjdF9pZj0yMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29uZGl0aW9uYWxfZXhwcmVzc2lvbj0zNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZW51bV9jb25zdGFudHM9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZXhwcmVzc2lvbnNfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX211bHRpcGxlX2ZpZWxkcz0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9tZXRob2RfZGVjbGFyYXRpb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3NlbGVjdG9yX2luX21ldGhvZF9pbnZvY2F0aW9uPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyY2xhc3NfaW5fdHlwZV9kZWNsYXJhdGlvbj0zNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX2VudW1fZGVjbGFyYXRpb249MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl90eXBlX2RlY2xhcmF0aW9uPTY4Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTg0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj04NAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX2ltcG9ydHM9Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX3BhY2thZ2U9Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maWVsZD0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpcnN0X2NsYXNzX2JvZHlfZGVjbGFyYXRpb249MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9pbXBvcnRzPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWVtYmVyX3R5cGU9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZXRob2Q9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9uZXdfY2h1bms9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9wYWNrYWdlPTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX2ltcG9ydF9ncm91cHM9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5fdHlwZV9kZWNsYXJhdGlvbnM9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPW5leHRfbGluZV9zaGlmdGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPWVuZF9vZl9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Jsb2NrPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9jb25zdGFudD1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9zd2l0Y2g9bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3R5cGVfZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9ibG9ja19jb21tZW50PWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9qYXZhZG9jX2NvbW1lbnQ9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9ibG9ja19jb21tZW50cz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2hlYWRlcj1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2h0bWw9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9qYXZhZG9jX2NvbW1lbnRzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfbGluZV9jb21tZW50cz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X3NvdXJjZV9jb2RlPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9yb290X3RhZ3M9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfZm9yX3BhcmFtZXRlcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmxpbmVfbGVuZ3RoPTgwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tcGFjdF9lbHNlX2lmPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb249Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9ndWFyZGlhbl9jbGF1c2Vfb25fb25lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19hbm5vdGF0aW9uX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9jb25zdGFudF9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b190eXBlX2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JyZWFrc19jb21wYXJlX3RvX2Nhc2VzPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfZW1wdHlfbGluZXM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2Jsb2NrPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2JvZHk9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX3N3aXRjaD10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50YXRpb24uc2l6ZT00Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hdF9lbmRfb2ZfZmlsZV9pZl9taXNzaW5nPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2NhdGNoX2luX3RyeV9zdGF0ZW1lbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Vsc2VfaW5faWZfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZmluYWxseV9pbl90cnlfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfd2hpbGVfaW5fZG9fc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm5vdGF0aW9uX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYmxvY2s9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fY29uc3RhbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X21ldGhvZF9ib2R5PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fYXNzZXJ0PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jYXNlPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbm5vdGF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbml0cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfZWxsaXBzaXM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl9mb3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jYXNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9mb3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luaXRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2VsbGlwc2lzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fY29uc3RhbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fc3dpdGNoPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZm9yPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fcmV0dXJuPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3Rocm93PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fYnJhY2tldHNfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNlc19pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2Vsc2Vfc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZW1wdHlfYXJyYXlfaW5pdGlhbGl6ZXJfb25fb25lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2ltcGxlX2lmX29uX29uZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF90aGVuX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5saW5lU3BsaXQ9MTQwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2JsYW5rX2xpbmVzX2F0X2JlZ2lubmluZ19vZl9tZXRob2RfYm9keT0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2VtcHR5X2xpbmVzX3RvX3ByZXNlcnZlPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5wdXRfZW1wdHlfc3RhdGVtZW50X29uX25ld19saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5jaGFyPXNwYWNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5zaXplPTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2VfdGFic19vbmx5X2Zvcl9sZWFkaW5nX2luZGVudGF0aW9ucz1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMDVjMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RodSBNYXIgMDggMTA6MjM6MzUgRVNUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1mb3JtYXR0ZXJfcHJvZmlsZT1fRU1GQ29kZUZvcm1hdHRlci5wcm9maWxlCi1mb3JtYXR0ZXJfc2V0dGluZ3NfdmVyc2lvbj0xMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmEyNTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RodSBBcHIgMTIgMDA6MDc6MDkgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1yZXNvbHZlLnJlcXVpcmVidW5kbGU9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZjJiOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDQucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5XU0RMVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5hcGFjaGUueGVyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCi0gb3JnLmVjbGlwc2UueHNkLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcgotQnVuZGxlLUNsYXNzUGF0aDogd3NkbC50ZXN0cy5qYXIKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRlMDBhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHdzZGwudGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHNhbXBsZXMvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zb3VyY2Uud3NkbC50ZXN0cy5qYXIgPSBzcmMvCi1qYXZhY1dhcm5pbmdzLndzZGwudGVzdHMuamFyPS1kaXNjb3VyYWdlZAotc291cmNlLndzZGwudGVzdHMuamFyID0gc3JjLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4YWQzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcGx1Z2luTmFtZSA9IFdTREwgSlVuaXQgVGVzdAotcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkNGMyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvQmluZGluZ0ZhdWx0UmVjb25jaWxpYXRpb24vQmluZGluZ0ZhdWx0U2FtcGxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0JpbmRpbmdGYXVsdFJlY29uY2lsaWF0aW9uL0JpbmRpbmdGYXVsdFNhbXBsZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWZjYTAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvQmluZGluZ0ZhdWx0UmVjb25jaWxpYXRpb24vQmluZGluZ0ZhdWx0U2FtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyINCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdGYXVsdFNhbXBsZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiDQotCW5hbWU9IkJpbmRpbmdGYXVsdFNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdGYXVsdFNhbXBsZS8iPg0KLQk8d3NkbDp0eXBlcz4NCi0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nRmF1bHRTYW1wbGUvIg0KLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24xIj4NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjFSZXNwb25zZSI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+DQotCQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotCQkJPC94c2Q6ZWxlbWVudD4NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMUZhdWx0Ij4NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImZhdWx0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjIiPg0KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPg0KLQkJCQkJPHhzZDpzZXF1ZW5jZT4NCi0NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+DQotCQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotCQkJPC94c2Q6ZWxlbWVudD4NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMlJlc3BvbnNlIj4NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24yRmF1bHQxIj4NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+DQotCQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotCQkJPC94c2Q6ZWxlbWVudD4NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24yRmF1bHQyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50Pg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQk8L3hzZDpzY2hlbWE+DQotCTwvd3NkbDp0eXBlcz4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24xUmVxdWVzdCI+DQotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpPcGVyYXRpb24xIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24xUmVzcG9uc2UiPg0KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMVJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24xRmF1bHQiPg0KLQkJPHdzZGw6cGFydCBuYW1lPSJGYXVsdCIgZWxlbWVudD0idG5zOk9wZXJhdGlvbjFGYXVsdCIgLz4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMlJlcXVlc3QiPg0KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMiI+PC93c2RsOnBhcnQ+DQotCTwvd3NkbDptZXNzYWdlPg0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik9wZXJhdGlvbjJSZXNwb25zZSI+DQotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpPcGVyYXRpb24yUmVzcG9uc2UiPjwvd3NkbDpwYXJ0Pg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24yRmF1bHQxIj4NCi0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk9wZXJhdGlvbjJGYXVsdDEiPjwvd3NkbDpwYXJ0Pg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24yRmF1bHQyIj4NCi0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk9wZXJhdGlvbjJGYXVsdDIiPjwvd3NkbDpwYXJ0Pg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2FtcGxlUG9ydCI+DQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+DQotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk9wZXJhdGlvbjFSZXF1ZXN0IiAvPg0KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6T3BlcmF0aW9uMVJlc3BvbnNlIiAvPg0KLQkJPC93c2RsOm9wZXJhdGlvbj4NCi0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4NCi0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6T3BlcmF0aW9uMlJlcXVlc3QiIC8+DQotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpPcGVyYXRpb24yUmVzcG9uc2UiIC8+DQotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MSIgbWVzc2FnZT0idG5zOk9wZXJhdGlvbjJGYXVsdDEiIC8+DQotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiIgbWVzc2FnZT0idG5zOk9wZXJhdGlvbjJGYXVsdDIiIC8+DQotCQk8L3dzZGw6b3BlcmF0aW9uPg0KLQk8L3dzZGw6cG9ydFR5cGU+DQotCTx3c2RsOmJpbmRpbmcgbmFtZT0iU2FtcGxlUG9ydFNPQVBCaW5kaW5nIiB0eXBlPSJ0bnM6U2FtcGxlUG9ydCI+DQotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+DQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+DQotCQkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ZhdWx0U2FtcGxlL09wZXJhdGlvbjEiIC8+DQotCQkJPHdzZGw6aW5wdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvd3NkbDppbnB1dD4NCi0JCQk8d3NkbDpvdXRwdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvd3NkbDpvdXRwdXQ+DQotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMUZhdWx0Ij4NCi0JCQkJPHNvYXA6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMUZhdWx0IiAvPg0KLQkJCTwvd3NkbDpmYXVsdD4NCi0JCTwvd3NkbDpvcGVyYXRpb24+DQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+DQotCQkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ZhdWx0U2FtcGxlL09wZXJhdGlvbjIiIC8+DQotCQkJPHdzZGw6aW5wdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvd3NkbDppbnB1dD4NCi0JCQk8d3NkbDpvdXRwdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvd3NkbDpvdXRwdXQ+DQotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MSI+DQotCQkJCTxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MSIgLz4NCi0JCQk8L3dzZGw6ZmF1bHQ+DQotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiI+DQotCQkJCTxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiIgLz4NCi0JCQk8L3dzZGw6ZmF1bHQ+DQotCQk8L3dzZGw6b3BlcmF0aW9uPg0KLQk8L3dzZGw6YmluZGluZz4NCi0JPHdzZGw6c2VydmljZSBuYW1lPSJTYW1wbGVTZXJ2aWNlIj4NCi0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNhbXBsZVBvcnRTT0FQQmluZGluZyIgbmFtZT0iU2FtcGxlUG9ydCI+DQotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+DQotCQk8L3dzZGw6cG9ydD4NCi0JPC93c2RsOnNlcnZpY2U+DQotPC93c2RsOmRlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMzAyNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24iCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdDIiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlMiI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0MyI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UzIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24iPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbjIiPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QyIiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZTIiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24zIj4KLQkJCTx3c2RsOmlucHV0IG5hbWU9IklucHV0MyIgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QzIiAvPgotCQkJPHdzZGw6b3V0cHV0IG5hbWU9Ik91dHB1dDMiIG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZTMiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCi0JPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb25TT0FQIgotCQl0eXBlPSJ0bnM6QmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24yIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL05ld09wZXJhdGlvbjIiIC8+Ci0JCQk8d3NkbDppbnB1dCBuYW1lPSJJbnB1dDIiPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG5hbWU9Ik91dHB1dDIiPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbjMiPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vTmV3T3BlcmF0aW9uMyIgLz4KLQkJCTx3c2RsOmlucHV0IG5hbWU9IklucHV0MyI+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbmFtZT0iT3V0cHV0MyI+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6QmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uU09BUCIKLQkJCW5hbWU9IkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvblNPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9EdXBsaWNhdGVTQVhFeGNlcHRpb24vU0FYRXhjZXB0aW9uLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0R1cGxpY2F0ZVNBWEV4Y2VwdGlvbi9TQVhFeGNlcHRpb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNmNDMxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0R1cGxpY2F0ZVNBWEV4Y2VwdGlvbi9TQVhFeGNlcHRpb24ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05hbWVzcGFjZVByZWZpeE5vdEJvdW5kLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCW5hbWU9Ik5hbWVzcGFjZVByZWZpeE5vdEJvdW5kIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VQcmVmaXhOb3RCb3VuZC8iPgotCTx1bmRlZmluZWQ6dGVzdCAvPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvRXh0ZW5kZWRXU0RMLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eS9FeHRlbmRlZFdTREwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZiZGY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eS9FeHRlbmRlZFdTREwud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRXh0ZW5kZWRXU0RMLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJFeHRlbmRlZFdTREwiCi0JeG1sbnM6ZXh0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuc2lvbnMvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9FeHRlbmRlZFdTREwvIj4KLQotCTx3c2RsOmltcG9ydCBsb2NhdGlvbj0iSW1wb3J0ZWQud3NkbCIKLQkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyI+Ci0JCTxleHQ6aW1wb3J0IC8+Ci0JPC93c2RsOmltcG9ydD4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZXh0ZW5kZWRNZXNzYWdlIj4KLQkJPGV4dDptZXNzYWdlIC8+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iZXh0ZW5kZWRQYXJ0Ij4KLQkJCTxleHQ6cGFydCAvPgotCQk8L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQotCTx3c2RsOnBvcnRUeXBlIG5hbWU9ImV4dGVuZGVkUG9ydFR5cGUiPgotCQk8ZXh0OnBvcnRUeXBlIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJleHRlbmRlZE9wZXJhdGlvbiI+Ci0JCQk8ZXh0Om9wZXJhdGlvbiAvPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0iZXh0ZW5kZWRNZXNzYWdlIj4KLQkJCQk8ZXh0OmlucHV0IC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0iZXh0ZW5kZWRNZXNzYWdlIj4KLQkJCQk8ZXh0Om91dHB1dCAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJCTx3c2RsOmZhdWx0IG5hbWU9ImV4dGVuZGVkRmF1bHQiIG1lc3NhZ2U9ImV4dGVuZGVkTWVzc2FnZSI+Ci0JCQkJPGV4dDpmYXVsdCAvPgotCQkJPC93c2RsOmZhdWx0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eS9JbXBvcnRlZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvSW1wb3J0ZWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjMDAwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eS9JbXBvcnRlZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0ZWQvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRlZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJJbXBvcnRlZCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRlZFNPQVAiIHR5cGU9InRuczpJbXBvcnRlZCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnRlZCI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6SW1wb3J0ZWRTT0FQIiBuYW1lPSJJbXBvcnRlZFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0hhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMvRG9jdW1lbnRlZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9IYW5kbGVzRG9jdW1lbnRhdGlvbkVsZW1lbnRzL0RvY3VtZW50ZWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEzMTEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0hhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMvRG9jdW1lbnRlZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvY3VtZW50ZWQvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkRvY3VtZW50ZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvY3VtZW50ZWQvIj4KLQk8d3NkbDpkb2N1bWVudGF0aW9uPkRlZmluaXRpb25zIGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudGVkLyIKLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOmRvY3VtZW50YXRpb24+TWVzc2FnZSBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkRvY3VtZW50ZWQiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJUG9ydCB0eXBlIGRvY3VtZW50YXRpb24uCi0JCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJT3BlcmF0aW9uIGRvY3VtZW50YXRpb24uCi0JCQk8L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IkRvY3VtZW50ZWRTT0FQIiB0eXBlPSJ0bnM6RG9jdW1lbnRlZCI+Ci0JCTx3c2RsOmRvY3VtZW50YXRpb24+QmluZGluZyBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRlZC9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJEb2N1bWVudGVkIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5TZXJ2aWNlIGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOkRvY3VtZW50ZWRTT0FQIiBuYW1lPSJEb2N1bWVudGVkU09BUCI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlBvcnQgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUvQS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZS9BLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZDYyMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZS9BLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6Yj0iaHR0cDovL0IiCi0JeG1sbnM6dG5zPSJodHRwOi8vQSIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQluYW1lPSJBIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0EiPgkJCi0JPHdzZGw6aW1wb3J0IGxvY2F0aW9uPSJCLndzZGwiIG5hbWVzcGFjZT0iaHR0cDovL0IiLz4JCQkJCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJtZXNzYWdlIj4JCi0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iYjpCVHlwZSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4JCi0JPHdzZGw6cG9ydFR5cGUgbmFtZT0icG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0ib3AiPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczptZXNzYWdlIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUvQi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZS9CLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZTg2NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9JbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZS9CLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0JbmFtZT0iQiIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9CIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0IiPgotCQkJPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJCVHlwZSI+Ci0JCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZTEiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJPC94c2Q6c2NoZW1hPgkKLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL01pc3NpbmdOYW1lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL01pc3NpbmdOYW1lLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOGM5OTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9NaXNzaW5nTmFtZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4NCi08L3dzZGw6ZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9XaXRoTmFtZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9XaXRoTmFtZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTA5YjUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9hZHNOYW1lbGVzc0RlZmluaXRpb24vV2l0aE5hbWUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgbmFtZT0iV1NETEZpbGUiPg0KLTwvd3NkbDpkZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvY2FsTmFtZXNwYWNlL0xvY2FsTmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvY2FsTmFtZXNwYWNlL0xvY2FsTmFtZXNwYWNlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MjliMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2NhbE5hbWVzcGFjZS9Mb2NhbE5hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+DQotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvU2ltcGxlLyINCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iDQotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNpbXBsZSINCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvU2ltcGxlLyI+DQotDQotCTx3c2RsOnR5cGVzPg0KLQ0KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSINCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCINCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TaW1wbGUvIj4NCi0NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uSW5wdXQiPg0KLQ0KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPg0KLQ0KLQkJCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlMSINCi0JCQkJCQkJdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlMiINCi0JCQkJCQkJdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQ0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb25PdXRwdXQiPg0KLQ0KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPg0KLQ0KLQkJCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlMSINCi0JCQkJCQkJdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlMiINCi0JCQkJCQkJdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQkJPC94c2Q6c2NoZW1hPg0KLQk8L3dzZGw6dHlwZXM+DQotDQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0ibXlPcGVyYXRpb25SZXNwb25zZSI+DQotCQk8d3NkbDpwYXJ0IG5hbWU9Im15T3BlcmF0aW9uUmVzcG9uc2UiDQotCQkJZWxlbWVudD0idG5zOk9wZXJhdGlvbk91dHB1dCIgLz4NCi0JPC93c2RsOm1lc3NhZ2U+DQotDQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0ibXlPcGVyYXRpb25SZXF1ZXN0Ij4NCi0JCTx3c2RsOnBhcnQgeG1sbnM6cGFydHRucz0iaHR0cDovL3RlbXB1cmkub3JnL1NpbXBsZS8iDQotCQkJbmFtZT0ibXlPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJwYXJ0dG5zOk9wZXJhdGlvbklucHV0IiAvPg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0NCi0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iTXlQb3J0VHlwZSI+DQotDQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0ibXlPcGVyYXRpb24iPg0KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpteU9wZXJhdGlvblJlcXVlc3QiIC8+DQotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpteU9wZXJhdGlvblJlc3BvbnNlIiAvPg0KLQkJPC93c2RsOm9wZXJhdGlvbj4NCi0JPC93c2RsOnBvcnRUeXBlPg0KLQkNCi08L3dzZGw6ZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2NhbE5hbWVzcGFjZS9Mb2NhbE5hbWVzcGFjZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9jYWxOYW1lc3BhY2UvTG9jYWxOYW1lc3BhY2UyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjJlZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2NhbE5hbWVzcGFjZS9Mb2NhbE5hbWVzcGFjZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2V4YW1wbGUvIgotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImV4YW1wbGUiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2V4YW1wbGUvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2V4YW1wbGUvIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9ImV4YW1wbGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCQluYW1lPSJleGFtcGxlU09BUCIgdHlwZT0idG5zOmV4YW1wbGUiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvZXhhbXBsZS9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJleGFtcGxlIj4KLQkJPHdzZGw6cG9ydCB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQkJCWJpbmRpbmc9InRuczpleGFtcGxlU09BUCIgbmFtZT0iZXhhbXBsZVNPQVAiPgotCQkJPGFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29uZmlybWF0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db25maXJtYXRpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzQwODc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db25maXJtYXRpb24ueHNkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db250YWN0SW5mby54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzN2Q4YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXJlYUNvZGUiIHR5cGU9InhzZDppbnQiIC8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIgLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iYWRkcmVzc1R5cGUiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9InN0cmVldCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJjaXR5IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm9TZXJ2aWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm9TZXJ2aWNlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MDljNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvU2VydmljZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkNvbnRhY3RJbmZvU2VydmljZSIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmNvbnRhY3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm9TZXJ2aWNlIj4KLQotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSIKLQkJCXhtbG5zOmNvbnRhY3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JCQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm9TZXJ2aWNlIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JCQkJc2NoZW1hTG9jYXRpb249IkNvbnRhY3RJbmZvLnhzZCIgLz4KLQkJCTx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJDb25maXJtYXRpb24ueHNkIiAvPgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cGRhdGVQaG9uZU51bWJlclJlcXVlc3RNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9ImNvbnRhY3Q6cGhvbmVOdW1iZXIiIG5hbWU9ImlucHV0MSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9InVwZGF0ZVBob25lTnVtYmVyUmVzcG9uc2VNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9IkNvbmZpcm1hdGlvbiIgbmFtZT0ib3V0cHV0MSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9InVwZGF0ZUFkZHJlc3NSZXF1ZXN0TXNnIj4KLQkJPHdzZGw6cGFydCB0eXBlPSJjb250YWN0OmFkZHJlc3NUeXBlIiBuYW1lPSJpbnB1dDIiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cGRhdGVBZGRyZXNzUmVzcG9uc2VNc2ciPgotCQk8d3NkbDpwYXJ0IHR5cGU9IkNvbmZpcm1hdGlvblR5cGUiIG5hbWU9Im91dHB1dDIiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJ0ZXN0UG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0idXBkYXRlUGhvbmVOdW1iZXIiPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnVwZGF0ZVBob25lTnVtYmVyUmVxdWVzdE1zZyIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6dXBkYXRlUGhvbmVOdW1iZXJSZXNwb25zZU1zZyIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9InVwZGF0ZUFkZHJlc3MiPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnVwZGF0ZUFkZHJlc3NSZXF1ZXN0TXNnIiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczp1cGRhdGVBZGRyZXNzUmVzcG9uc2VNc2ciIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvT3BlcmF0aW9uU3R5bGUvT3BlcmF0aW9uU3R5bGVUZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL09wZXJhdGlvblN0eWxlL09wZXJhdGlvblN0eWxlVGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDZhZWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvT3BlcmF0aW9uU3R5bGUvT3BlcmF0aW9uU3R5bGVUZXN0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLm9yZyINCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZT0iT3BlcmF0aW9uU3R5bGVUZXN0IiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLm9yZyI+DQotDQotCTxqYXh3czpiaW5kaW5ncyB4bWxuczpqYXh3cz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPg0KLQkJPGpheHdzOmVuYWJsZVdyYXBwZXJTdHlsZT50cnVlPC9qYXh3czplbmFibGVXcmFwcGVyU3R5bGU+DQotCQk8amF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPmZhbHNlPC9qYXh3czplbmFibGVBc3luY01hcHBpbmc+DQotCTwvamF4d3M6YmluZGluZ3M+DQotDQotCTx0eXBlcz4NCi0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUub3JnIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLm9yZyI+DQotDQotCQkJPHhzZDplbGVtZW50IG5hbWU9InF1b3RlUmVxdWVzdCIgdHlwZT0idG5zOnF1b3RlUmVxdWVzdFR5cGUiIC8+DQotDQotCQkJPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJxdW90ZVJlcXVlc3RUeXBlIj4NCi0JCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdG9ja1N5bWJvbCIgdHlwZT0ieHNkOmludCIgLz4NCi0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0cmFuc2FjdGlvbkRhdGUiIHR5cGU9InhzZDpkYXRlIiAvPg0KLQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0icXVvdGVSZXNwb25zZSIgdHlwZT0idG5zOnF1b3RlUmVzcG9uc2VUeXBlIiAvPg0KLQ0KLQkJCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icXVvdGVSZXNwb25zZVR5cGUiPg0KLQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9InZhbHVlIiB0eXBlPSJ4c2Q6ZG91YmxlIiAvPg0KLQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0icXVvdGVFcnJvciIgdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0NCi0JCTwveHNkOnNjaGVtYT4NCi0JPC90eXBlcz4NCi0NCi0JPG1lc3NhZ2UgbmFtZT0iUXVvdGUiPg0KLQkJPHBhcnQgbmFtZT0icGFyYW1zIiBlbGVtZW50PSJ0bnM6cXVvdGVSZXF1ZXN0IiAvPg0KLQk8L21lc3NhZ2U+DQotDQotCTxtZXNzYWdlIG5hbWU9IlF1b3RlUmVzcG9uc2UiPg0KLQkJPHBhcnQgbmFtZT0icmVzdWx0IiBlbGVtZW50PSJ0bnM6cXVvdGVSZXNwb25zZSIgLz4NCi0JPC9tZXNzYWdlPg0KLQ0KLQk8bWVzc2FnZSBuYW1lPSJRdW90ZUVycm9yIj4NCi0JCTxwYXJ0IG5hbWU9ImVycm9yIiBlbGVtZW50PSJ0bnM6cXVvdGVFcnJvciIgLz4NCi0JPC9tZXNzYWdlPg0KLQ0KLQk8cG9ydFR5cGUgbmFtZT0iUXVvdGVQb3J0VHlwZSI+DQotDQotCQk8amF4d3M6YmluZGluZ3MgeG1sbnM6amF4d3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4NCi0JCQk8amF4d3M6Y2xhc3MgbmFtZT0iUXVvdGVQcm92aWRlckltcGwiIC8+DQotCQkJPGpheHdzOmVuYWJsZVdyYXBwZXJTdHlsZT50cnVlPC9qYXh3czplbmFibGVXcmFwcGVyU3R5bGU+DQotCQkJPGpheHdzOmVuYWJsZUFzeW5jTWFwcGluZz5mYWxzZTwvamF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPg0KLQkJPC9qYXh3czpiaW5kaW5ncz4NCi0NCi0JCTxvcGVyYXRpb24gbmFtZT0iR2V0UXVvdGUiPg0KLQ0KLQkJCTxqYXh3czpiaW5kaW5ncyB4bWxuczpqYXh3cz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiDQotCQkJCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4NCi0JCQkJPGpheHdzOm1ldGhvZCBuYW1lPSJnZXRRdW90ZSIgLz4NCi0JCQkJPGpheHdzOnBhcmFtZXRlciBwYXJ0PSJ3c2RsOmRlZmluaXRpb25zL3dzZGw6bWVzc2FnZVtAbmFtZT0nUXVvdGUnXS93c2RsOnBhcnRbQG5hbWU9J3BhcmFtcyddIg0KLQkJCQkJY2hpbGRFbGVtZW50TmFtZT0idG5zOnN0b2NrU3ltYm9sIiBuYW1lPSJzeW1ib2wiIC8+DQotCQkJCTxqYXh3czpwYXJhbWV0ZXIgcGFydD0id3NkbDpkZWZpbml0aW9ucy93c2RsOm1lc3NhZ2VbQG5hbWU9J1F1b3RlJ10vd3NkbDpwYXJ0W0BuYW1lPSdwYXJhbXMnXSINCi0JCQkJCWNoaWxkRWxlbWVudE5hbWU9InRuczp0cmFuc2FjdGlvbkRhdGUiIG5hbWU9ImRhdGUiIC8+DQotCQkJCTxqYXh3czplbmFibGVXcmFwcGVyU3R5bGU+dHJ1ZTwvamF4d3M6ZW5hYmxlV3JhcHBlclN0eWxlPg0KLQkJCQk8amF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPmZhbHNlPC9qYXh3czplbmFibGVBc3luY01hcHBpbmc+DQotCQkJPC9qYXh3czpiaW5kaW5ncz4NCi0NCi0JCQk8aW5wdXQgbWVzc2FnZT0idG5zOlF1b3RlIiAvPg0KLQ0KLQkJCTxvdXRwdXQgbWVzc2FnZT0idG5zOlF1b3RlUmVzcG9uc2UiIC8+DQotDQotCQkJPGZhdWx0IG5hbWU9IlF1b3RlRXJyb3IiIG1lc3NhZ2U9InRuczpRdW90ZUVycm9yIj4NCi0NCi0JCQkJPGpheHdzOmJpbmRpbmdzIHhtbG5zOmpheHdzPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+DQotCQkJCQk8amF4d3M6Y2xhc3MgbmFtZT0iUXVvdGVFeGNlcHRpb24iIC8+DQotCQkJCTwvamF4d3M6YmluZGluZ3M+DQotDQotCQkJPC9mYXVsdD4NCi0JCTwvb3BlcmF0aW9uPg0KLQk8L3BvcnRUeXBlPg0KLQ0KLQk8YmluZGluZyBuYW1lPSJRdW90ZUJpbmRpbmciIHR5cGU9InRuczpRdW90ZVBvcnRUeXBlIj4NCi0NCi0JCTxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJkb2N1bWVudCIgLz4NCi0NCi0JCTxvcGVyYXRpb24gbmFtZT0iR2V0UXVvdGUiPg0KLQkJCTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiIC8+DQotCQkJPGlucHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L2lucHV0Pg0KLQkJCTxvdXRwdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvb3V0cHV0Pg0KLQkJCTxmYXVsdCBuYW1lPSJRdW90ZUVycm9yIj4NCi0JCQkJPHNvYXA6ZmF1bHQgbmFtZT0iUXVvdGVFcnJvciIgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvZmF1bHQ+DQotCQk8L29wZXJhdGlvbj4NCi0NCi0JPC9iaW5kaW5nPg0KLQ0KLQk8c2VydmljZSBuYW1lPSJRdW90ZVNlcnZpY2UiPg0KLQ0KLQkJPGpheHdzOmJpbmRpbmdzIHhtbG5zOmpheHdzPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+DQotCQkJPGpheHdzOmNsYXNzIG5hbWU9IlF1b3RhdGlvblNlcnZpY2UiIC8+DQotCQk8L2pheHdzOmJpbmRpbmdzPg0KLQ0KLQkJPHBvcnQgbmFtZT0iUXVvdGVQb3J0IiBiaW5kaW5nPSJ0bnM6UXVvdGVCaW5kaW5nIj4NCi0NCi0JCQk8amF4d3M6YmluZGluZ3MgeG1sbnM6amF4d3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4NCi0JCQkJPGpheHdzOm1ldGhvZCBuYW1lPSJnZXRRdW90YXRpb25TZXJ2aWNlIiAvPg0KLQkJCTwvamF4d3M6YmluZGluZ3M+DQotDQotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL3F1b3RlIiAvPg0KLQ0KLQkJPC9wb3J0Pg0KLQ0KLQk8L3NlcnZpY2U+DQotDQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZGU4OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZGVmaW5pdGlvbnMgbmFtZT0iVGVzdFNlcnZpY2UiDQotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3Qub3JnL1NlcnZpY2UvIg0KLQl4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iDQotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3Qub3JnL1NlcnZpY2UvIg0KLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQl4bWxuczp0ZXN0PSJodHRwOi8vdGVzdC5vcmcvIj4NCi0JPHR5cGVzPg0KLQkJPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KLQkJCTx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVzdC5vcmcvIg0KLQkJCQlzY2hlbWFMb2NhdGlvbj0iVGVzdDEueHNkIiAvPg0KLQkJPC94czpzY2hlbWE+DQotCQk8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQotCQkJPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZXN0Lm9yZy8iDQotCQkJCXNjaGVtYUxvY2F0aW9uPSJUZXN0Mi54c2QiIC8+DQotCQk8L3hzOnNjaGVtYT4NCi0JPC90eXBlcz4NCi0JPG1lc3NhZ2UgbmFtZT0idGVzdFJlcXVlc3QiPg0KLQkJPHBhcnQgbmFtZT0icmVxdWVzdFBhcnQiIHR5cGU9InRlc3Q6TXlUeXBlIiAvPg0KLQk8L21lc3NhZ2U+DQotCTxtZXNzYWdlIG5hbWU9InRlc3RSZXNwb25zZSI+DQotCQk8cGFydCBuYW1lPSJyZXNwb25zZVBhcnQiIGVsZW1lbnQ9InRlc3Q6TXlFbGVtZW50IiAvPg0KLQk8L21lc3NhZ2U+DQotCTxwb3J0VHlwZSBuYW1lPSJUZXN0UG9ydCI+DQotCQk8b3BlcmF0aW9uIG5hbWU9InRlc3RPcGVyYXRpb24iPg0KLQkJCTxpbnB1dCBtZXNzYWdlPSJ0bnM6dGVzdFJlcXVlc3QiIG5hbWU9InRlc3RSZXF1ZXN0IiAvPg0KLQkJCTxvdXRwdXQgbWVzc2FnZT0idG5zOnRlc3RSZXNwb25zZSIgbmFtZT0idGVzdFJlc3BvbnNlIiAvPg0KLQkJPC9vcGVyYXRpb24+DQotDQotCTwvcG9ydFR5cGU+DQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYzM2YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0Lm9yZy8iDQotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3Qub3JnLyI+DQotPC9zY2hlbWE+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjgxYTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uL1Rlc3QyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiDQotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3Qub3JnLyINCi0JeG1sbnM6dG5zPSJodHRwOi8vdGVzdC5vcmcvIj4NCi0JDQotCTxlbGVtZW50IG5hbWU9Ik15RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+DQotDQotCTxzaW1wbGVUeXBlIG5hbWU9Ik15VHlwZSI+DQotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj48L3Jlc3RyaWN0aW9uPg0KLQk8L3NpbXBsZVR5cGU+DQotDQotPC9zY2hlbWE+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlc0V4dGVuc2liaWxpdHkvVHlwZXNFeHRlbnNpYmlsaXR5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVzRXh0ZW5zaWJpbGl0eS9UeXBlc0V4dGVuc2liaWxpdHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ1NjY4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVzRXh0ZW5zaWJpbGl0eS9UeXBlc0V4dGVuc2liaWxpdHkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHlwZXNFeHRlbnNpYmlsaXR5LyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJUeXBlc0V4dGVuc2liaWxpdHkiCi0JeG1sbnM6dHlwZUV4PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL090aGVyVHlwZXMvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9UeXBlc0V4dGVuc2liaWxpdHkvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHR5cGVFeDp0eXBlRGVmIC8+Ci0JCTx4c2Q6c2NoZW1hCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHlwZXMvIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx0eXBlRXg6dHlwZURlZiAvPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL2ZpcnN0bGV2ZWwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL2ZpcnN0bGV2ZWwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNiOGRjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9maXJzdGxldmVsLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPGRlZmluaXRpb25zIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPg0KLSAgICA8aW1wb3J0IGxvY2F0aW9uPSJzZWNvbmRsZXZlbC53c2RsIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iLz4NCi0JPG1lc3NhZ2UgbmFtZT0idGVzdElOUFVUbWVzc2FnZSI+DQotCQk8cGFydCBuYW1lPSJ0ZXN0SU5wYXJ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQotCTwvbWVzc2FnZT4NCi08L2RlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL21haW4ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL21haW4ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBhNDJhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9tYWluLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIA0KLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIA0KLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPg0KLSAgICANCi0gICAgPGltcG9ydCBsb2NhdGlvbj0iZmlyc3RsZXZlbC53c2RsIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iLz4NCi0gICAgDQotICAgIDxwb3J0VHlwZSBuYW1lPSJUZXN0UG9ydFR5cGUiPg0KLQ0KLSAgICAJPG9wZXJhdGlvbiBuYW1lPSJUZXN0T3BlcmF0aW9uIj4NCi0NCi0gICAgCQk8IS0tIFRoaXMgaXMgbG9jYXRlZCBpbiB0aGUgZmlyc3QgbGV2ZWwgaW1wb3J0IC0tPg0KLQ0KLSAgICAJCTxpbnB1dCBtZXNzYWdlPSJ0bnM6dGVzdElOUFVUbWVzc2FnZSIvPg0KLQ0KLSAgICAJCTwhLS0gVGhpcyBpcyBsb2NhdGVkIGluIHRoZSBzZWNvbmQgbGV2ZWwgaW1wb3J0IC0tPg0KLQ0KLSAgICAJCTxvdXRwdXQgbWVzc2FnZT0idG5zOnRlc3RPVVRQVVRtZXNzYWdlIi8+DQotDQotICAgIAk8L29wZXJhdGlvbj4NCi0NCi0gICAgPC9wb3J0VHlwZT4NCi0gICAgDQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9zZWNvbmRsZXZlbC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMRWxlbWVudFJlc29sdXRpb24vc2Vjb25kbGV2ZWwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyZWZkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9zZWNvbmRsZXZlbC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiANCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiANCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgDQotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+DQotDQotCTwhLS0gSGVyZSB0byBmb3JjZSBhIGN5Y2xpYyBpbXBvcnQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGRvZXMgbm90IGdvIGludG8gYW4gaW5maW5pdGUgcmVjdXJzaW9uLiAtLT4NCi0JDQotICAgIDxpbXBvcnQgbG9jYXRpb249Im1haW4ud3NkbCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIi8+DQotDQotCTxtZXNzYWdlIG5hbWU9InRlc3RPVVRQVVRtZXNzYWdlIj4NCi0JCTxwYXJ0IG5hbWU9InRlc3RPVVRwYXJ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQotCTwvbWVzc2FnZT4NCi0NCi0JPCEtLSBEdXBsaWNhdGVkIGhlcmUgdG8gYWxsb3cgdGVzdGluZyB0aGUgaW1wb3J0cyB0cmVlIHRyYXZlcnNhbCBvcmRlci4NCi0JVGhpcyBtZXNzYWdlIHdpbGwgYmUgIm1hc2tlZCIgYnkgdGhlIG9uZSBkZWNsYXJlZCBpbiB0aGUgZmlyc3RsZXZlbC53c2RsIC0tPg0KLQ0KLQk8bWVzc2FnZSBuYW1lPSJ0ZXN0SU5QVVRtZXNzYWdlIj4NCi0JCTxwYXJ0IG5hbWU9InRlc3RJTnBhcnQiIHR5cGU9InhzZDppbnQiLz4NCi0JPC9tZXNzYWdlPg0KLQ0KLTwvZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUEV4YW1wbGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBFeGFtcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYTRiNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUEV4YW1wbGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIgotCXhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0hUVFBFeGFtcGxlLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJIVFRQRXhhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSFRUUEV4YW1wbGUvIj4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iSFRUUEV4YW1wbGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJIVFRQRXhhbXBsZUhUVFAiIHR5cGU9InRuczpIVFRQRXhhbXBsZSI+Ci0JCTxodHRwOmJpbmRpbmcgdmVyYj0iR0VUIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxodHRwOm9wZXJhdGlvbiBsb2NhdGlvbj0iL05ld09wZXJhdGlvbiIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxodHRwOnVybEVuY29kZWQgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8bWltZTpjb250ZW50IHR5cGU9InRleHQveG1sIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IkhUVFBFeGFtcGxlIj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6SFRUUEV4YW1wbGVIVFRQIgotCQkJbmFtZT0iSFRUUEV4YW1wbGVIVFRQIj4KLQkJCTxodHRwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBUZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQVGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTIxMWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBUZXN0LndzZGwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FRXhhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRUV4YW1wbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMzZDQ0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FRXhhbXBsZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVFeGFtcGxlIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FRXhhbXBsZSI+Ci0JPHR5cGVzPgotCQk8eHNkOnNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVFeGFtcGxlIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlhNTERhdGEiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbWVudDEiIHR5cGU9InhzZDppbnQiPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvdHlwZXM+Ci0JPG1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1zZyI+Ci0JCTxwYXJ0IG5hbWU9InJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0IiAvPgotCTwvbWVzc2FnZT4KLQk8bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1zZyI+Ci0JCTxwYXJ0IG5hbWU9InJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2UiIC8+Ci0JCTxwYXJ0IG5hbWU9InJlc3BvbnNlRGF0YSIgdHlwZT0ieHNkOmJhc2U2NEJpbmFyeSIgLz4KLQkJPHBhcnQgbmFtZT0ieG1sRGF0YSIgZWxlbWVudD0idG5zOlhNTERhdGEiIC8+Ci0JPC9tZXNzYWdlPgotCTxwb3J0VHlwZSBuYW1lPSJNSU1FRXhhbXBsZVBvcnRUeXBlIj4KLQkJPG9wZXJhdGlvbiBuYW1lPSJ0ZXN0T3BlcmF0aW9uIj4KLQkJCTxpbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1zZyIgLz4KLQkJCTxvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTXNnIiAvPgotCQk8L29wZXJhdGlvbj4KLQk8L3BvcnRUeXBlPgotCTxiaW5kaW5nIG5hbWU9Ik1JTUVFeGFtcGxlQmluZGluZyIgdHlwZT0idG5zOk1JTUVFeGFtcGxlUG9ydFR5cGUiPgotCQk8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIgotCQkJc3R5bGU9ImRvY3VtZW50IiAvPgotCQk8b3BlcmF0aW9uIG5hbWU9InRlc3RPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FRXhhbXBsZS90ZXN0T3BlcmF0aW9uIiAvPgotCQkJPGlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC9pbnB1dD4KLQkJCTxvdXRwdXQ+Ci0JCQkJPG1pbWU6bXVsdGlwYXJ0UmVsYXRlZD4KLQkJCQkJPG1pbWU6cGFydCBuYW1lPSJyZXNwb25zZSI+Ci0JCQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCQkJPC9taW1lOnBhcnQ+Ci0JCQkJCTxtaW1lOnBhcnQgbmFtZT0icmVzcG9uc2VEYXRhIj4KLQkJCQkJCTxtaW1lOmNvbnRlbnQgcGFydD0icmVzcG9uc2VEYXRhIiB0eXBlPSJ0ZXh0L2JpbmFyeSIgLz4KLQkJCQkJPC9taW1lOnBhcnQ+Ci0JCQkJPC9taW1lOm11bHRpcGFydFJlbGF0ZWQ+Ci0JCQkJPG1pbWU6bWltZVhNTCBwYXJ0PSJ4bWxEYXRhIiAvPgotCQkJPC9vdXRwdXQ+Ci0JCTwvb3BlcmF0aW9uPgotCTwvYmluZGluZz4KLQk8c2VydmljZSBuYW1lPSJNSU1FRXhhbXBsZVNlcnZpY2UiPgotCQk8cG9ydCBuYW1lPSJNSU1FRXhhbXBsZVBvcnQiIGJpbmRpbmc9InRuczpNSU1FRXhhbXBsZUJpbmRpbmciPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL01JTUVFeGFtcGxlIiAvPgotCQk8L3BvcnQ+Ci0JPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FVGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRVRlc3Qud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMzMTZhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FVGVzdC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVUZXN0IgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FVGVzdCI+Ci0JPHR5cGVzPgotCQk8eHNkOnNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVUZXN0Ij4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlhNTERhdGEiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbWVudDEiIHR5cGU9InhzZDppbnQiPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvdHlwZXM+Ci0JPG1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1zZyI+Ci0JCTxwYXJ0IG5hbWU9InJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0IiAvPgotCTwvbWVzc2FnZT4KLQk8bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1zZyI+Ci0JCTxwYXJ0IG5hbWU9InJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2UiIC8+Ci0JCTxwYXJ0IG5hbWU9InJlc3BvbnNlRGF0YSIgdHlwZT0ieHNkOmJhc2U2NEJpbmFyeSIgLz4KLQkJPHBhcnQgbmFtZT0ieG1sRGF0YSIgZWxlbWVudD0idG5zOlhNTERhdGEiIC8+Ci0JPC9tZXNzYWdlPgotCTxwb3J0VHlwZSBuYW1lPSJNSU1FVGVzdFBvcnRUeXBlIj4KLQkJPG9wZXJhdGlvbiBuYW1lPSJ0ZXN0T3BlcmF0aW9uIj4KLQkJCTxpbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1zZyIgLz4KLQkJCTxvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTXNnIiAvPgotCQk8L29wZXJhdGlvbj4KLQk8L3BvcnRUeXBlPgotCTxiaW5kaW5nIG5hbWU9Ik1JTUVUZXN0QmluZGluZyIgdHlwZT0idG5zOk1JTUVUZXN0UG9ydFR5cGUiPgotCQk8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIgotCQkJc3R5bGU9ImRvY3VtZW50IiAvPgotCQk8b3BlcmF0aW9uIG5hbWU9InRlc3RPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FVGVzdC90ZXN0T3BlcmF0aW9uIiAvPgotCQkJPGlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC9pbnB1dD4KLQkJCTxvdXRwdXQ+Ci0JCQk8L291dHB1dD4KLQkJPC9vcGVyYXRpb24+Ci0JPC9iaW5kaW5nPgotCTxzZXJ2aWNlIG5hbWU9Ik1JTUVUZXN0U2VydmljZSI+Ci0JCTxwb3J0IG5hbWU9Ik1JTUVUZXN0UG9ydCIgYmluZGluZz0idG5zOk1JTUVUZXN0QmluZGluZyI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwODAvTUlNRVRlc3QiIC8+Ci0JCTwvcG9ydD4KLQk8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2I4MzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCW5hbWU9IkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS8iPgotCTx3c2RsOmRvY3VtZW50YXRpb24+VGVzdCBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCTx3c2RsOnR5cGVzPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uRmF1bHQiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZmF1bHQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25IZWFkZXIiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaGVhZGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uSGVhZGVyRmF1bHQiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaGVhZGVyRmF1bHQiCi0JCQkJCQkJdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iVGVzdE1zZyI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbkhlYWRlciIgbmFtZT0idGVzdEhlYWRlciIgLz4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uSGVhZGVyRmF1bHQiCi0JCQluYW1lPSJ0ZXN0SGVhZGVyRmF1bHQiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0TXNnIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiCi0JCQluYW1lPSJwYXJhbWV0ZXJzIj4KLQkJCTx3c2RsOmRvY3VtZW50YXRpb24+VGVzdCBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8L3dzZGw6cGFydD4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uSGVhZGVyIiBuYW1lPSJoZWFkZXIiIC8+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbkhlYWRlckZhdWx0IgotCQkJbmFtZT0iaGVhZGVyRmF1bHQiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZU1zZyI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uRmF1bHRNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25GYXVsdCIgbmFtZT0iZmF1bHQiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0TXNnIj4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlTXNnIj4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiCi0JCQkJbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvbkZhdWx0TXNnIj4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8L3dzZGw6ZmF1bHQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGVTT0FQIgotCQl0eXBlPSJ0bnM6RG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTxzb2FwOm9wZXJhdGlvbiBzdHlsZT0iZG9jdW1lbnQiCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSJwYXJhbWV0ZXJzIiAvPgotCQkJCTxzb2FwOmhlYWRlciB1c2U9ImxpdGVyYWwiIHBhcnQ9ImhlYWRlciIKLQkJCQkJbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3RNc2ciPgotCQkJCQk8c29hcDpoZWFkZXJmYXVsdCB1c2U9ImxpdGVyYWwiIHBhcnQ9ImhlYWRlckZhdWx0IgotCQkJCQkJbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3RNc2ciIC8+Ci0JCQkJPC9zb2FwOmhlYWRlcj4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiPgotCQkJCTx3c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJCVRlc3QgZG9jdW1lbnRhdGlvbi4KLQkJCQk8L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQk8c29hcDpmYXVsdCBuYW1lPSJmYXVsdCIgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmZhdWx0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6RG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGVTT0FQIgotCQkJbmFtZT0iRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGVTT0FQIj4KLQkJCTx3c2RsOmRvY3VtZW50YXRpb24+VGVzdCBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MDJhMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCW5hbWU9IlJQQ0VuY29kZWRTT0FQRXhhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLyI+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IlJQQ0VuY29kZWRTT0FQRXhhbXBsZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlJQQ0VuY29kZWRTT0FQRXhhbXBsZVNPQVAiCi0JCXR5cGU9InRuczpSUENFbmNvZGVkU09BUEV4YW1wbGUiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJycGMiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5Ci0JCQkJCWVuY29kaW5nU3R5bGU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIgotCQkJCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLyIKLQkJCQkJdXNlPSJlbmNvZGVkIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkKLQkJCQkJZW5jb2RpbmdTdHlsZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iCi0JCQkJCW5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENFbmNvZGVkU09BUEV4YW1wbGUvIgotCQkJCQl1c2U9ImVuY29kZWQiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iUlBDRW5jb2RlZFNPQVBFeGFtcGxlIj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6UlBDRW5jb2RlZFNPQVBFeGFtcGxlU09BUCIKLQkJCW5hbWU9IlJQQ0VuY29kZWRTT0FQRXhhbXBsZVNPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9SUENMaXRlcmFsU09BUEV4YW1wbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRhNzdiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9SUENMaXRlcmFsU09BUEV4YW1wbGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENMaXRlcmFsU09BUEV4YW1wbGUvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JbmFtZT0iUlBDTGl0ZXJhbFNPQVBFeGFtcGxlIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENMaXRlcmFsU09BUEV4YW1wbGUvIj4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25GYXVsdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uRmF1bHQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iUlBDTGl0ZXJhbFNPQVBFeGFtcGxlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCQk8d3NkbDpmYXVsdCBuYW1lPSJmYXVsdCIgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvbkZhdWx0IiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlJQQ0xpdGVyYWxTT0FQRXhhbXBsZVNPQVAiCi0JCXR5cGU9InRuczpSUENMaXRlcmFsU09BUEV4YW1wbGUiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJycGMiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5Ci0JCQkJCW5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENMaXRlcmFsU09BUEV4YW1wbGUvIgotCQkJCQl1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keQotCQkJCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLyIKLQkJCQkJdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJCTx3c2RsOmZhdWx0IG5hbWU9ImZhdWx0Ij4KLQkJCQk8c29hcDpmYXVsdCBuYW1lPSJmYXVsdCIKLQkJCQkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS8iCi0JCQkJCXVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpmYXVsdD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IlJQQ0xpdGVyYWxTT0FQRXhhbXBsZSI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlJQQ0xpdGVyYWxTT0FQRXhhbXBsZVNPQVAiCi0JCQluYW1lPSJSUENMaXRlcmFsU09BUEV4YW1wbGVTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1NPQVBUZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9TT0FQVGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2NlYjkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1NPQVBUZXN0LndzZGwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTkyZThlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotKi53c2RsLm91dApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0ltcG9ydGVkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvSW1wb3J0ZWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNhODJmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvSW1wb3J0ZWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJJbXBvcnRlZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0ZWQvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydGVkIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkltcG9ydGVkU09BUCIgdHlwZT0idG5zOkltcG9ydGVkIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iSW1wb3J0ZWQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iSW1wb3J0ZWRTT0FQIiBiaW5kaW5nPSJ0bnM6SW1wb3J0ZWRTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYmIyNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkxvYWRBbmRQcmludFRlc3QiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0xvYWRBbmRQcmludFRlc3QvIiB4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyIgbG9jYXRpb249IkltcG9ydGVkLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0xvYWRBbmRQcmludFRlc3QvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25OZXdGYXVsdCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvbk5ld0ZhdWx0Ij4KLSAgCTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uTmV3RmF1bHQiCi0gIAkJZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbk5ld0ZhdWx0Ij4KLSAgCTwvd3NkbDpwYXJ0PgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTG9hZEFuZFByaW50VGVzdCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iTmV3RmF1bHQiIG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25OZXdGYXVsdCI+PC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJMb2FkQW5kUHJpbnRUZXN0U09BUCIgdHlwZT0idG5zOkxvYWRBbmRQcmludFRlc3QiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0L05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iTmV3RmF1bHQiPjwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJMb2FkQW5kUHJpbnRUZXN0Ij4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpMb2FkQW5kUHJpbnRUZXN0U09BUCIgbmFtZT0iTG9hZEFuZFByaW50VGVzdFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0FsbFRlc3RDYXNlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0FsbFRlc3RDYXNlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGRjYzRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9BbGxUZXN0Q2FzZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnMuSFRUUEV4dGVuc2lvbnNUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnMuTUlNRUV4dGVuc2lvbnNUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnMuU09BUEV4dGVuc2lvbnNUZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgQWxsVGVzdENhc2VzIGV4dGVuZHMgVGVzdENhc2UKLXsKLQotICBwdWJsaWMgQWxsVGVzdENhc2VzKCkKLSAgewotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QoSW5saW5lU2NoZW1hVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KExvYWRBbmRTZXJpYWxpemF0aW9uVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KFNlbWFudGljVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KFdTRExHZW5lcmF0aW9uVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KFdTREw0SkFQSVRlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChXU0RMRU1GQVBJVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KFV0aWxUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoTG9jYXRpb25UcmFja2luZ1Rlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChSZWZhY3RvcmluZ1Rlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChTT0FQRXh0ZW5zaW9uc1Rlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChIVFRQRXh0ZW5zaW9uc1Rlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChNSU1FRXh0ZW5zaW9uc1Rlc3Quc3VpdGUoKSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9CdWdGaXhlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNkNzQzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvQnVnRml4ZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5YTUxDb25zdGFudHM7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RJbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogQ29udGFpbnMgdW5pdCB0ZXN0cyBmb3IgcmVwb3J0ZWQgYnVncy4KLSAqLwotcHVibGljIGNsYXNzIEJ1Z0ZpeGVzVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwdWJsaWMgQnVnRml4ZXNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAganVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RUeXBlQW5kRWxlbWVudFJlc29sdXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIk1JTUVHZXRUeXBlTmFtZSIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UmV0dXJuc1Byb3BlclFOYW1lRm9yTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiSW1wb3J0c0VsZW1lbnRPcmRlciIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UGxhY2VzSW1wb3J0c0FmdGVyVGhlRGVmaW5pdGlvbkVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlJlc29sdmVXU0RMRWxlbWVudCIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UmVzb2x2ZXNFbGVtZW50SW5JbXBvcnRzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJQYXJ0c1NlcmlhbGl6YXRpb24iKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFNlcmlhbGl6ZXNQYXJ0c0luU09BUEJvZHkoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkltcG9ydHNTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTZXJpYWxpemVzSW1wb3J0c0JlZm9yZVR5cGVzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJMb2NhbE5hbWVzcGFjZVByZWZpeGVzIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTdXBwb3J0c0xvY2FsTmFtZXNwYWNlUHJlZml4ZXMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIk9wZXJhdGlvbkV4dGVuc2lvbkVsZW1lbnRzIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RUb2xsZXJhdGVzRXh0ZW5zaW9uRWxlbWVudHNGb3JPcGVyYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlJlY29uY2lsZXNCaW5kaW5nRmF1bHRzIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RSZWNvbmNpbGVzQmluZGluZ0ZhdWx0cygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiRHVwbGljYXRlU0FYRXJyb3JEaWFnbm9zdGljcyIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0QXZvaWREdXBsaWNhdGVTQVhFeGNlcHRpb25EaWFnbm9zdGljcygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkZ1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eSIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0RnVsbEVsZW1lbnRFeHRlbnNpYmlsaXR5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJUeXBlc0V4dGVuc2liaWxpdHkiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RUeXBlc0V4dGVuc2liaWxpdHkoKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiQWxsb3dOdWxsTmFtZXNwYWNlVVJJIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0QWxsb3dOdWxsTmFtZXNwYWNlVVJJKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkxvYWRzTmFtZWxlc3NEZWZpbml0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0TG9hZHNOYW1lbGVzc0RlZmluaXRpb24oKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiSGFuZGxlc0RvY3VtZW50YXRpb25FbGVtZW50cyIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdEhhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiU3VwcG9ydHNMb2NhbE5TRm9yRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0U3VwcG9ydHNMb2NhbE5TRm9yRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJJbmxpbmVUeXBlc0Zyb21JbXBvcnRzQXJlVmlzaWJsZSIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdElubGluZVR5cGVzRnJvbUltcG9ydHNBcmVWaXNpYmxlKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzMzMTAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUeXBlQW5kRWxlbWVudFJlc29sdXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uL1Rlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIC8vIFRoZXJlIGFyZSB0d28gaW5saW5lIHNjaGVtYXMsIGVhY2ggaW1wb3J0aW5nIGFuIGV4dGVybmFsIHNjaGVtYS4KLSAgICAgIC8vIFRoZSBmaXJzdCBzY2hlbWEgaXMgZW1wdHkgYW5kIHVzZWQganVzdCB0byBzaG93IHRoZSB0eXBlIHJlc29sdXRpb24KLSAgICAgIC8vIG1lY2hhbmlzbSdzIGZhdWx0LgotICAgICAgLy8gVGhlIHNjaGVtYSBjb250YWluaW5nIHRoZSB0eXBlIGFuZCBlbGVtZW50IGRlY2xhcmF0aW9uIHdlJ3JlIGludGVyZXN0ZWQKLSAgICAgIC8vIGluIGlzIHRoZSBzZWNvbmQgc2NoZW1hIGluIHRoZSBjb2xsZWN0aW9uLgotCi0gICAgICBYU0RTY2hlbWEgaW5saW5lU2NoZW1hID0gKFhTRFNjaGVtYSlkZWZpbml0aW9uLmdldEVUeXBlcygpLmdldFNjaGVtYXMoKS5nZXQoMSk7Ci0KLSAgICAgIC8vIFRoZSBmaXJzdCBhbmQgb25seSBjb21wb25lbnQgaW4gdGhpcyBzY2hlbWEgaXMgYW4gaW1wb3J0LgotCi0gICAgICBYU0RJbXBvcnQgeHNkSW1wb3J0ID0gKFhTREltcG9ydClpbmxpbmVTY2hlbWEuZ2V0Q29udGVudHMoKS5nZXQoMCk7Ci0KLSAgICAgIC8vIFRoZSBpbXBvcnRlZCBzY2hlbWEgd2FzIHJlc29sdmVkIHdoZW4gdGhlIHJlc291cmNlIHdhcyBsb2FkZWQuCi0gICAgICAvLyBUaGlzIGlzIHRoZSBzY2hlbWEgY29udGFpbmluZyBvdXIgdHlwZS9lbGVtZW50LgotCi0gICAgICBYU0RTY2hlbWEgc2NoZW1hID0geHNkSW1wb3J0LmdldFJlc29sdmVkU2NoZW1hKCk7Ci0KLSAgICAgIC8vIE5vdyBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHJlc29sdmVkIHR5cGUvZWxlbWVudCBmb3IgdGhlIG1lc3NhZ2VzIGluCi0gICAgICAvLyB0aGUgV1NETCBkb2N1bWVudAotICAgICAgLy8gYXJlIHRoZSBvbmVzIGluIHRoZSBzY2hlbWEgYW5kIG5vdCBzb21lIGJvZ3VzIG9uZXMuCi0KLSAgICAgIEl0ZXJhdG9yIG1lc3NhZ2VzSXRlcmF0b3IgPSBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChtZXNzYWdlc0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpbWVzc2FnZXNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICBpZiAobmFtZS5lcXVhbHMoInRlc3RSZXF1ZXN0IikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIGtub3cgdGhlcmUgaXMgb25seSBvbmUgcGFydCBpbiB0aGUgbWVzc2FnZSBhbmQgaXQgcmVmZXJzIHRvIGEKLSAgICAgICAgICAvLyB0eXBlLiBNYWtlIHN1cmUgdGhlIHR5cGUgY2FuIGJlIHJlc29sdmVkLgotCi0gICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpbWVzc2FnZS5nZXRFUGFydHMoKS5nZXQoMCk7Ci0gICAgICAgICAgWFNEVHlwZURlZmluaXRpb24gbXlUeXBlID0gcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgICAgIGFzc2VydEVxdWFscyhzY2hlbWEsIG15VHlwZS5nZXRDb250YWluZXIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobmFtZS5lcXVhbHMoInRlc3RSZXNwb25zZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBXZSBrbm93IHRoZXJlIGlzIG9ubHkgb25lIHBhcnQgaW4gdGhlIG1lc3NhZ2UgYW5kIGl0IHJlZmVycyB0byBhbgotICAgICAgICAgIC8vIGVsZW1lbnQuCi0KLSAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCltZXNzYWdlLmdldEVQYXJ0cygpLmdldCgwKTsKLSAgICAgICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gbXlFbGVtZW50ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICAgICAgICBhc3NlcnRFcXVhbHMoc2NoZW1hLCBteUVsZW1lbnQuZ2V0Q29udGFpbmVyKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTMzOTUzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuc1Byb3BlclFOYW1lRm9yTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gIHsKLSAgICBNSU1FRmFjdG9yeSBmYWN0b3J5ID0gTUlNRVBhY2thZ2UuZUlOU1RBTkNFLmdldE1JTUVGYWN0b3J5KCk7Ci0KLSAgICBNSU1FQ29udGVudCBjb250ZW50ID0gZmFjdG9yeS5jcmVhdGVNSU1FQ29udGVudCgpOwotICAgIFFOYW1lIGNvbnRlbnRFbGVtZW50VHlwZSA9IGNvbnRlbnQuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICBhc3NlcnRFcXVhbHMoTUlNRUNvbnN0YW50cy5NSU1FX05BTUVTUEFDRV9VUkksIGNvbnRlbnRFbGVtZW50VHlwZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKE1JTUVDb25zdGFudHMuQ09OVEVOVF9FTEVNRU5UX1RBRywgY29udGVudEVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpKTsKLQotICAgIE1JTUVNaW1lWG1sIG1pbWVYbWwgPSBmYWN0b3J5LmNyZWF0ZU1JTUVNaW1lWG1sKCk7Ci0gICAgUU5hbWUgbWltZVhtbEVsZW1lbnRUeXBlID0gbWltZVhtbC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgbWltZVhtbEVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoTUlNRUNvbnN0YW50cy5NSU1FX1hNTF9FTEVNRU5UX1RBRywgbWltZVhtbEVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpKTsKLQotICAgIE1JTUVNdWx0aXBhcnRSZWxhdGVkIG11bHRpcGFydFJlbGF0ZWQgPSBmYWN0b3J5LmNyZWF0ZU1JTUVNdWx0aXBhcnRSZWxhdGVkKCk7Ci0gICAgUU5hbWUgbXVsdGlwYXJ0UmVsYXRlZEVsZW1lbnRUeXBlID0gbXVsdGlwYXJ0UmVsYXRlZC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgbXVsdGlwYXJ0UmVsYXRlZEVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoTUlNRUNvbnN0YW50cy5NVUxUSVBBUlRfUkVMQVRFRF9FTEVNRU5UX1RBRywgbXVsdGlwYXJ0UmVsYXRlZEVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpKTsKLQotICAgIE1JTUVQYXJ0IHBhcnQgPSBmYWN0b3J5LmNyZWF0ZU1JTUVQYXJ0KCk7Ci0gICAgUU5hbWUgcGFydEVsZW1lbnRUeXBlID0gcGFydC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgcGFydEVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoTUlNRUNvbnN0YW50cy5QQVJUX0VMRU1FTlRfVEFHLCBwYXJ0RWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDQwCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGxhY2VzSW1wb3J0c0FmdGVyVGhlRGVmaW5pdGlvbkVsZW1lbnQoKQotICB7Ci0gICAgV1NETEZhY3RvcnkgZmFjdG9yeSA9IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXRXU0RMRmFjdG9yeSgpOwotCi0gICAgU3RyaW5nIG5hbWVzcGFjZSA9ICJ0ZXN0TmFtZXNwYWNlIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZmFjdG9yeS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgZGVmaW5pdGlvbi5zZXRRTmFtZShuZXcgUU5hbWUobmFtZXNwYWNlLCAidGVzdERlZmluaXRpb24iKSk7IC8vJE5PTi1OTFMtMSQgIAotICAgIGRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCi0gICAgU2VydmljZSBzZXJ2aWNlID0gZmFjdG9yeS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUobmFtZXNwYWNlLCAidGVzdFNlcnZpY2UiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICBkZWZpbml0aW9uLmFkZFNlcnZpY2Uoc2VydmljZSk7Ci0KLSAgICBJbXBvcnQgd3NkbEltcG9ydCA9IGZhY3RvcnkuY3JlYXRlSW1wb3J0KCk7Ci0gICAgZGVmaW5pdGlvbi5hZGRJbXBvcnQod3NkbEltcG9ydCk7Ci0KLSAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IHNlcnZpY2UuZ2V0RWxlbWVudCgpOwotICAgIEVsZW1lbnQgaW1wb3J0RWxlbWVudCA9IHdzZGxJbXBvcnQuZ2V0RWxlbWVudCgpOwotCi0gICAgTm9kZUxpc3QgZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbiA9IGRlZmluaXRpb25FbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLQotICAgIE5vZGUgZmlyc3RDaGlsZCA9IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4uaXRlbSgwKTsKLQotICAgIGFzc2VydFNhbWUoaW1wb3J0RWxlbWVudCwgZmlyc3RDaGlsZCk7Ci0KLSAgICBOb2RlIHNlY29uZENoaWxkID0gZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbi5pdGVtKDEpOwotCi0gICAgYXNzZXJ0U2FtZShzZXJ2aWNlRWxlbWVudCwgc2Vjb25kQ2hpbGQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTM3ODY2Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVzb2x2ZXNFbGVtZW50SW5JbXBvcnRzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9tYWluLndzZGwiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIC8vIFRoaXMgdGVzdCBhdHRlbXB0cyB0byBsb2NhdGUgYSBtZXNzYWdlIGxvY2F0ZWQgaW4gdGhlIGZpcnN0IGxldmVsCi0gICAgICAvLyBpbXBvcnQuCi0KLSAgICAgIFFOYW1lIGZpcnN0TGV2ZWxNZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidGVzdElOUFVUbWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBqYXZheC53c2RsLk1lc3NhZ2UgZmlyc3RMZXZlbE1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UoZmlyc3RMZXZlbE1lc3NhZ2VRTmFtZSk7Ci0KLSAgICAgIGFzc2VydE5vdE51bGwoZmlyc3RMZXZlbE1lc3NhZ2UpOwotCi0gICAgICAvLyBUaGlzIHRlc3QgYXR0ZW1wdHMgdG8gbG9jYXRlIGEgbWVzc2FnZSBsb2NhdGVkIGluIHRoZSBzZWNvbmQgbGV2ZWwKLSAgICAgIC8vIGltcG9ydC4KLQotICAgICAgUU5hbWUgc2Vjb25kTGV2ZWxNZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidGVzdE9VVFBVVG1lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgamF2YXgud3NkbC5NZXNzYWdlIHNlY29uZExldmVsTWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShzZWNvbmRMZXZlbE1lc3NhZ2VRTmFtZSk7Ci0KLSAgICAgIGFzc2VydE5vdE51bGwoc2Vjb25kTGV2ZWxNZXNzYWdlKTsKLQotICAgICAgLy8gVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB3ZSBkbyBhIGJyZWFkdGggZmlyc3QgdHJhdmVyc2FsIHRvIGtlZXAgdGhpbmdzCi0gICAgICAvLyB3b3JraW5nIGFwcHJveGltYXRpdmVseSBhcyB0aGUgb2xkIGltcGxlbWVudGF0aW9uIHdoaWNoIHVzZWQgdG8gY2hlY2sKLSAgICAgIC8vIG9ubHkgdGhlIGRlZmluaXRpb24gYW5kIGl0cyBmaXJzdCBsZXZlbCBpbXBvcnRzLiBUaGUgZmlyc3QgbWVzc2FnZSBpcwotICAgICAgLy8gZGVmaW5lZCBpbiBmaXJzdGxldmVsLndzZGwgYXMgd2VsbCBhcyBzZWNvbmRsZXZlbC53c2RsIGJ1dCB0aGUKLSAgICAgIC8vIGFsZ29yaXRobSBzaG91bGQgZmluZCB0aGUgb25lIGluIGZpcnN0bGV2ZWwud3NkbC4KLQotICAgICAgSW1wb3J0IGZpcnN0TGV2ZWxJbXBvcnQgPSAoSW1wb3J0KWRlZmluaXRpb24uZ2V0SW1wb3J0cyh0YXJnZXROYW1lc3BhY2UpLmdldCgwKTsKLSAgICAgIERlZmluaXRpb24gZmlyc3RMZXZlbERlZmluaXRpb24gPSBmaXJzdExldmVsSW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0KLSAgICAgIGFzc2VydEVxdWFscyhmaXJzdExldmVsRGVmaW5pdGlvbiwgKChNZXNzYWdlKWZpcnN0TGV2ZWxNZXNzYWdlKS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzc5OTAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemVzUGFydHNJblNPQVBCb2R5KCkKLSAgewotICAgIC8vIEJ1aWxkIGFuIGluLW1lbW9yeSBXU0RMIGRlZmluaXRpb24uCi0KLSAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFdTRExGYWN0b3J5KCk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gInRlc3ROYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBmYWN0b3J5LmNyZWF0ZURlZmluaXRpb24oKTsKLSAgICBkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZSh0YXJnZXROYW1lc3BhY2UpOwotICAgIGRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgInRlc3REZWZpbml0aW9uIikpOyAvLyROT04tTkxTLTEkCi0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInRucyIsIHRhcmdldE5hbWVzcGFjZSk7IC8vJE5PTi1OTFMtMSQKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgieHNkIiwgWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxKTsgLy8kTk9OLU5MUy0xJAotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJzb2FwIiwgU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkkpOyAvLyROT04tTkxTLTEkCi0KLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmYWN0b3J5LmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidGVzdE1lc3NhZ2UiKTsKLSAgICBtZXNzYWdlLnNldFFOYW1lKG1lc3NhZ2VRTmFtZSk7Ci0gICAgZGVmaW5pdGlvbi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotCi0gICAgUGFydCBwYXJ0MSA9IGZhY3RvcnkuY3JlYXRlUGFydCgpOwotICAgIFN0cmluZyBwYXJ0MU5hbWUgPSAicGFydDEiOyAvLyROT04tTkxTLTEkIAotICAgIHBhcnQxLnNldE5hbWUocGFydDFOYW1lKTsKLSAgICBwYXJ0MS5zZXRUeXBlTmFtZShuZXcgUU5hbWUoWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAic3RyaW5nIikpOyAvLyROT04tTkxTLTEkCi0gICAgbWVzc2FnZS5hZGRQYXJ0KHBhcnQxKTsKLQotICAgIFBhcnQgcGFydDIgPSBmYWN0b3J5LmNyZWF0ZVBhcnQoKTsKLSAgICBTdHJpbmcgcGFydDJOYW1lID0gInBhcnQyIjsgLy8kTk9OLU5MUy0xJCAKLSAgICBwYXJ0Mi5zZXROYW1lKHBhcnQyTmFtZSk7Ci0gICAgcGFydDIuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFhTRENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSwgInN0cmluZyIpKTsgLy8kTk9OLU5MUy0xJAotICAgIG1lc3NhZ2UuYWRkUGFydChwYXJ0Mik7Ci0KLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGZhY3RvcnkuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBRTmFtZSBwb3J0UU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidGVzdFBvcnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIHBvcnRUeXBlLnNldFFOYW1lKHBvcnRRTmFtZSk7Ci0gICAgZGVmaW5pdGlvbi5hZGRQb3J0VHlwZShwb3J0VHlwZSk7Ci0KLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gZmFjdG9yeS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBTdHJpbmcgb3BlcmF0aW9uTmFtZSA9ICJ0ZXN0T3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJCAKLSAgICBvcGVyYXRpb24uc2V0TmFtZShvcGVyYXRpb25OYW1lKTsKLSAgICBwb3J0VHlwZS5hZGRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLQotICAgIElucHV0IGlucHV0ID0gZmFjdG9yeS5jcmVhdGVJbnB1dCgpOwotICAgIGlucHV0LnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgb3BlcmF0aW9uLnNldElucHV0KGlucHV0KTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IGZhY3RvcnkuY3JlYXRlQmluZGluZygpOwotICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ0ZXN0QmluZGluZyIpOyAvLyROT04tTkxTLTEkCi0gICAgYmluZGluZy5zZXRRTmFtZShiaW5kaW5nUU5hbWUpOwotICAgIGJpbmRpbmcuc2V0UG9ydFR5cGUocG9ydFR5cGUpOwotICAgIGRlZmluaXRpb24uYWRkQmluZGluZyhiaW5kaW5nKTsKLQotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0T3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nSW5wdXQoYmluZGluZ0lucHV0KTsKLQotICAgIFNPQVBGYWN0b3J5IHNvYXBGYWN0b3J5ID0gU09BUFBhY2thZ2UuZUlOU1RBTkNFLmdldFNPQVBGYWN0b3J5KCk7Ci0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBzb2FwRmFjdG9yeS5jcmVhdGVTT0FQQm9keSgpOwotICAgIGJpbmRpbmdJbnB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0KLSAgICBkZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQoKTsKLQotICAgIC8vIFRlc3QgdGhlICJubyBwYXJ0cyIgc2NlbmFyaW8uIEluIHRoaXMgY2FzZSB0aGUgcGFydHMgYXR0cmlidXRlIHNob3VsZCBub3QKLSAgICAvLyBiZSBwcmVzZW50LgotCi0gICAgRWxlbWVudCBzb2FwQm9keUVsZW1lbnQgPSBzb2FwQm9keS5nZXRFbGVtZW50KCk7Ci0gICAgQXR0ciBwYXJ0c0F0dHJpYnV0ZU5vZGUgPSBzb2FwQm9keUVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShTT0FQQ29uc3RhbnRzLlBBUlRTX0FUVFJJQlVURSk7Ci0gICAgYXNzZXJ0TnVsbChwYXJ0c0F0dHJpYnV0ZU5vZGUpOwotCi0gICAgLy8gVGVzdCB0aGUgc2NlbmFyaW8gd2hlbiB0aGUgYm9keSBzcGVjaWZpZXMgb25lIHBhcnQuIEluIHRoaXMgY2FzZSB0aGUKLSAgICAvLyBwYXJ0cyBhdHRyaWJ1dGUKLSAgICAvLyBzaG91bGQgYmUgcHJlc2VudCBhbmQgbG9vayBsaWtlIHRoaXMgcGFydHM9InBhcnQxIgotCi0gICAgTGlzdCBwYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBwYXJ0cy5hZGQocGFydDEpOwotICAgIHNvYXBCb2R5LnNldFBhcnRzKHBhcnRzKTsKLQotICAgIHNvYXBCb2R5LnVwZGF0ZUVsZW1lbnQoKTsKLQotICAgIHNvYXBCb2R5RWxlbWVudCA9IHNvYXBCb2R5LmdldEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgcGFydHNBdHRyaWJ1dGVWYWx1ZSA9IHNvYXBCb2R5RWxlbWVudC5nZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5QQVJUU19BVFRSSUJVVEUpOwotICAgIGFzc2VydEVxdWFscyhwYXJ0MU5hbWUsIHBhcnRzQXR0cmlidXRlVmFsdWUpOwotCi0gICAgLy8gVGVzdCB0aGUgc2NlbmFyaW8gd2hlbiB0aGUgYm9keSBzcGVjaWZpZXMgdHdvIHBhcnRzLiBJbiB0aGlzIGNhc2UgdGhlCi0gICAgLy8gcGFydHMgYXR0cmlidXRlCi0gICAgLy8gc2hvdWxkIGJlIHByZXNlbnQgYW5kIGxvb2sgbGlrZSB0aGlzIHBhcnRzPSJwYXJ0MSBwYXJ0MiIKLQotICAgIHBhcnRzLmFkZChwYXJ0Mik7Ci0gICAgc29hcEJvZHkuc2V0UGFydHMocGFydHMpOwotCi0gICAgc29hcEJvZHkudXBkYXRlRWxlbWVudCgpOwotCi0gICAgc29hcEJvZHlFbGVtZW50ID0gc29hcEJvZHkuZ2V0RWxlbWVudCgpOwotICAgIHBhcnRzQXR0cmlidXRlVmFsdWUgPSBzb2FwQm9keUVsZW1lbnQuZ2V0QXR0cmlidXRlKFNPQVBDb25zdGFudHMuUEFSVFNfQVRUUklCVVRFKTsKLSAgICBhc3NlcnRFcXVhbHMocGFydDFOYW1lICsgIiAiICsgcGFydDJOYW1lLCBwYXJ0c0F0dHJpYnV0ZVZhbHVlKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MDMzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXplc0ltcG9ydHNCZWZvcmVUeXBlcygpCi0gIHsKLSAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFdTRExGYWN0b3J5KCk7Ci0KLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gInRlc3ROYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBmYWN0b3J5LmNyZWF0ZURlZmluaXRpb24oKTsKLSAgICBkZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZShuYW1lc3BhY2UsICJ0ZXN0RGVmaW5pdGlvbiIpKTsgLy8kTk9OLU5MUy0xJCAgCi0gICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0KLSAgICBUeXBlcyB0eXBlcyA9IGZhY3RvcnkuY3JlYXRlVHlwZXMoKTsKLSAgICBkZWZpbml0aW9uLnNldFR5cGVzKHR5cGVzKTsKLQotICAgIEltcG9ydCB3c2RsSW1wb3J0ID0gZmFjdG9yeS5jcmVhdGVJbXBvcnQoKTsKLSAgICBkZWZpbml0aW9uLmFkZEltcG9ydCh3c2RsSW1wb3J0KTsKLQotICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICBFbGVtZW50IHR5cGVzRWxlbWVudCA9IHR5cGVzLmdldEVsZW1lbnQoKTsKLSAgICBFbGVtZW50IGltcG9ydEVsZW1lbnQgPSB3c2RsSW1wb3J0LmdldEVsZW1lbnQoKTsKLQotICAgIE5vZGVMaXN0IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4gPSBkZWZpbml0aW9uRWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICBOb2RlIGZpcnN0Q2hpbGQgPSBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuLml0ZW0oMCk7Ci0KLSAgICBhc3NlcnRTYW1lKGltcG9ydEVsZW1lbnQsIGZpcnN0Q2hpbGQpOwotCi0gICAgTm9kZSBzZWNvbmRDaGlsZCA9IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4uaXRlbSgxKTsKLQotICAgIGFzc2VydFNhbWUodHlwZXNFbGVtZW50LCBzZWNvbmRDaGlsZCk7Ci0KLSAgICAvLyBCbG93IGF3YXkgdGhlIGJhY2tpbmcgRE9NLgotCi0gICAgZGVmaW5pdGlvbi5zZXRFbGVtZW50KG51bGwpOwotICAgIGRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCi0gICAgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICB0eXBlc0VsZW1lbnQgPSB0eXBlcy5nZXRFbGVtZW50KCk7Ci0gICAgaW1wb3J0RWxlbWVudCA9IHdzZGxJbXBvcnQuZ2V0RWxlbWVudCgpOwotCi0gICAgZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbiA9IGRlZmluaXRpb25FbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLQotICAgIGZpcnN0Q2hpbGQgPSBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuLml0ZW0oMCk7Ci0KLSAgICBhc3NlcnRTYW1lKGltcG9ydEVsZW1lbnQsIGZpcnN0Q2hpbGQpOwotCi0gICAgc2Vjb25kQ2hpbGQgPSBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuLml0ZW0oMSk7Ci0KLSAgICBhc3NlcnRTYW1lKHR5cGVzRWxlbWVudCwgc2Vjb25kQ2hpbGQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTUzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3VwcG9ydHNMb2NhbE5hbWVzcGFjZVByZWZpeGVzKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvTG9jYWxOYW1lc3BhY2UvTG9jYWxOYW1lc3BhY2Uud3NkbCIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3RlbXB1cmkub3JnL1NpbXBsZS8iOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSByZXNwb25zZSBtZXNzYWdlJ3MgcGFydCBlbGVtZW50IGlzIHJlc29sdmVkIE9LLgotCi0gICAgUU5hbWUgcmVzcG9uc2VNZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAibXlPcGVyYXRpb25SZXNwb25zZSIpOyAvLy8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLk1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHJlc3BvbnNlTWVzc2FnZVFOYW1lKTsKLQotICAgIFBhcnQgcmVzcG9uc2VQYXJ0ID0gKFBhcnQpcmVzcG9uc2VNZXNzYWdlLmdldFBhcnQoIm15T3BlcmF0aW9uUmVzcG9uc2UiKTsgLy8vLyROT04tTkxTLTEkCi0KLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzcG9uc2VFbGVtZW50RGVjbGFyYXRpb24gPSByZXNwb25zZVBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0KLSAgICBhc3NlcnROb3ROdWxsKHJlc3BvbnNlRWxlbWVudERlY2xhcmF0aW9uKTsKLSAgICBhc3NlcnROb3ROdWxsKHJlc3BvbnNlRWxlbWVudERlY2xhcmF0aW9uLmdldENvbnRhaW5lcigpKTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIHJlcXVlc3QgbWVzc2FnZSdzIHBhcnQgZWxlbWVudCBpcyByZXNvbHZlZCBPSy4KLSAgICAvLyBUaGlzIHBhcnQgZGVmaW5lcyBhIGxvY2FsIG5hbWVzcGFjZSBwcmVmaXgKLQotICAgIFFOYW1lIHJlcXVlc3RNZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAibXlPcGVyYXRpb25SZXF1ZXN0Iik7IC8vLy8kTk9OLU5MUy0xJAotICAgIGphdmF4LndzZGwuTWVzc2FnZSByZXF1ZXN0TWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShyZXF1ZXN0TWVzc2FnZVFOYW1lKTsKLQotICAgIFBhcnQgcmVxdWVzdFBhcnQgPSAoUGFydClyZXF1ZXN0TWVzc2FnZS5nZXRQYXJ0KCJteU9wZXJhdGlvblJlcXVlc3QiKTsgLy8vLyROT04tTkxTLTEkCi0KLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVxdWVzdEVsZW1lbnREZWNsYXJhdGlvbiA9IHJlcXVlc3RQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCi0gICAgYXNzZXJ0Tm90TnVsbChyZXF1ZXN0RWxlbWVudERlY2xhcmF0aW9uKTsKLQotICAgIC8vIE5vdyB0byBtYWtlIHN1cmUgdGhlIERPTSBpcyByZWNvbmNpbGVkIHByb3Blcmx5IGFuZCB1c2VzIHRoZSBsb2NhbCBuYW1lc3BhY2UgcHJlZml4LCAKLSAgICAvLyBsZXQncyB0cnkgdG8gY2hhbmdlIHRoZSBwYXJ0J3MgZWxlbWVudCBkZWNsYXJhdGlvbi4gV2UnbGwgdXNlIHRoZSByZXNwb25zZSBwYXJ0IGVsZW1lbnQKLSAgICAvLyBqdXN0IGJlY2F1c2UgaXQgaXMgY29udmVuaWVudC4KLQotICAgIHJlcXVlc3RQYXJ0LnNldEVsZW1lbnREZWNsYXJhdGlvbihyZXNwb25zZUVsZW1lbnREZWNsYXJhdGlvbik7Ci0KLSAgICBFbGVtZW50IHBhcnRFbGVtZW50ID0gcmVxdWVzdFBhcnQuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyBlbGVtZW50QXR0cmlidXRlVmFsdWUgPSBwYXJ0RWxlbWVudC5nZXRBdHRyaWJ1dGUoV1NETENvbnN0YW50cy5FTEVNRU5UX0FUVFJJQlVURSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoZWxlbWVudEF0dHJpYnV0ZVZhbHVlLCAicGFydHRuczoiICsgcmVzcG9uc2VFbGVtZW50RGVjbGFyYXRpb24uZ2V0TmFtZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE1NzEwNwotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRvbGxlcmF0ZXNFeHRlbnNpb25FbGVtZW50c0Zvck9wZXJhdGlvbigpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL09wZXJhdGlvblN0eWxlL09wZXJhdGlvblN0eWxlVGVzdC53c2RsIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCkuZ2V0KDApOwotICAgIEVMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpOwotCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pb3BlcmF0aW9ucy5nZXQoMCk7Ci0gICAgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFLCBvcGVyYXRpb25UeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE2NDU2NQotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlY29uY2lsZXNCaW5kaW5nRmF1bHRzKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvQmluZGluZ0ZhdWx0UmVjb25jaWxpYXRpb24vQmluZGluZ0ZhdWx0U2FtcGxlLndzZGwiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBUZXN0IHRoZSBhYm5vcm1hbCBjYXNlIHdoZW4gdGhlIGJpbmRpbmcgb3BlcmF0aW9uIHRyaWVzIHRvIGJpbmQgYSBmYXVsdAotICAgIC8vIGJ1dCB0aGUgZmF1bHQgaXMgbWlzc2luZyBpbiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSB0aGUKLSAgICAvLyBmYXVsdCBvYnRhaW5lZCBmcm9tIHRoZSBiaW5kaW5nIG9wZXJhdGlvbidzIGZhdWx0IHNob3VsZCBiZSBudWxsLgotCi0gICAgTGlzdCBiaW5kaW5ncyA9IGRlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCk7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpYmluZGluZ3MuZ2V0KDApOwotICAgIExpc3QgYmluZGluZ09wZXJhdGlvbnMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnMuZ2V0KDApOwotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0KCJPcGVyYXRpb24xRmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICAgIEZhdWx0IGZhdWx0ID0gYmluZGluZ0ZhdWx0LmdldEVGYXVsdCgpOwotICAgIGFzc2VydE51bGwoZmF1bHQpOwotCi0gICAgLy8gVGVzdCB0aGUgbm9ybWFsIGNhc2Ugd2hlbiB0aGUgb3BlcmF0aW9uIGFuZCBiaW5kaW5nIG9wZXJhdGlvbiBhcmUgaW4KLSAgICAvLyBzeW5jaC4gSW4gdGhpcyBjYXNlIHRoZSBmYXVsdCBkZWZpbmVkIGluIHRoZSBvcGVyYXRpb24gc2hvdWxkIG1hdGNoCi0gICAgLy8gdGhlIG9uZSBvYnRhaW5lZCBmcm9tIHRoZSBiaW5kaW5nIG9wZXJhdGlvbidzIGZhdWx0LgotCi0gICAgTGlzdCBwb3J0VHlwZXMgPSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKTsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlwb3J0VHlwZXMuZ2V0KDApOwotICAgIEVMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpOwotCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pb3BlcmF0aW9ucy5nZXQoMSk7Ci0gICAgamF2YXgud3NkbC5GYXVsdCBleHBlY3RlZEZhdWx0MSA9IG9wZXJhdGlvbi5nZXRGYXVsdCgiT3BlcmF0aW9uMkZhdWx0MSIpOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5GYXVsdCBleHBlY3RlZEZhdWx0MiA9IG9wZXJhdGlvbi5nZXRGYXVsdCgiT3BlcmF0aW9uMkZhdWx0MiIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24yID0gKEJpbmRpbmdPcGVyYXRpb24pYmluZGluZ09wZXJhdGlvbnMuZ2V0KDEpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBmYXVsdCBvYnRhaW5lZCBmcm9tIHRoZSBiaW5kaW5nIGZhdWx0IGlzIG5vdCBudWxsIGFuZAotICAgIC8vIG1hdGNoZXMgdGhlIG9uZSBpbiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24uCi0KLSAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0MSA9IChCaW5kaW5nRmF1bHQpYmluZGluZ09wZXJhdGlvbjIuZ2V0QmluZGluZ0ZhdWx0KCJPcGVyYXRpb24yRmF1bHQxIik7IC8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLkZhdWx0IGFjdHVhbEZhdWx0MSA9IGJpbmRpbmdGYXVsdDEuZ2V0RUZhdWx0KCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChhY3R1YWxGYXVsdDEpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEZhdWx0MSwgYWN0dWFsRmF1bHQxKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmF1bHQgb2J0YWluZWQgZnJvbSB0aGUgYmluZGluZyBmYXVsdCBpcyBub3QgbnVsbCBhbmQKLSAgICAvLyBtYXRjaGVzIHRoZSBvbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uLgotCi0gICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdDIgPSAoQmluZGluZ0ZhdWx0KWJpbmRpbmdPcGVyYXRpb24yLmdldEJpbmRpbmdGYXVsdCgiT3BlcmF0aW9uMkZhdWx0MiIpOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5GYXVsdCBhY3R1YWxGYXVsdDIgPSBiaW5kaW5nRmF1bHQyLmdldEVGYXVsdCgpOwotICAgIGFzc2VydE5vdE51bGwoYWN0dWFsRmF1bHQyKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRGYXVsdDIsIGFjdHVhbEZhdWx0Mik7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNjEwNTkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBdm9pZER1cGxpY2F0ZVNBWEV4Y2VwdGlvbkRpYWdub3N0aWNzKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBNYWtlIHN1cmUgd2UgdHJhY2sgbG9jYXRpb24gdG8gYWxsb3cgdGhlIFdTRExQYXJzZXIgdG8ga2ljayBpbi4KLQotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0R1cGxpY2F0ZVNBWEV4Y2VwdGlvbi9TQVhFeGNlcHRpb24ud3NkbCIsIHRydWUsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIFJlc291cmNlIHJlc291cmNlID0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKTsKLSAgICBFTGlzdCBlcnJvcnMgPSByZXNvdXJjZS5nZXRFcnJvcnMoKTsKLSAgICBpbnQgZXhwZWN0ZWRTaXplID0gMTsKLSAgICBpbnQgYWN0dWFsU2l6ZSA9IGVycm9ycy5zaXplKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU2l6ZSwgYWN0dWFsU2l6ZSk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNzI1NzYKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEgKLSAgICAgICAgKyAic2FtcGxlcy9CdWdGaXhlcy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBRTmFtZSBwb3J0VHlwZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5Qb3J0VHlwZSBwb3J0VHlwZSA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGUocG9ydFR5cGVRTmFtZSk7Ci0KLSAgICBTdHJpbmcgaW5wdXQzTmFtZSA9ICJJbnB1dDMiOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nIG91dHB1dDNOYW1lID0gIk91dHB1dDMiOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBmaXJzdCBvcGVyYXRpb24gLSB3aGljaCBoYXMgbm8gbmFtZWQgaW5wdXQvb3V0cHV0IGlzIGJlaW5nCi0gICAgLy8gZm91bmQuCi0KLSAgICBTdHJpbmcgb3BlcmF0aW9uTmFtZSA9ICJOZXdPcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5PcGVyYXRpb24gb3BlcmF0aW9uMSA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbihvcGVyYXRpb25OYW1lLCBudWxsLCBudWxsKTsKLQotICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb25TT0FQIik7IC8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLkJpbmRpbmcgYmluZGluZyA9IGRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24xID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbk5hbWUsIG51bGwsIG51bGwpOwotICAgIGphdmF4LndzZGwuT3BlcmF0aW9uIGFjdHVhbE9wZXJhdGlvbjEgPSBiaW5kaW5nT3BlcmF0aW9uMS5nZXRPcGVyYXRpb24oKTsKLQotICAgIGFzc2VydEVxdWFscyhvcGVyYXRpb24xLCBhY3R1YWxPcGVyYXRpb24xKTsKLQotICAgIC8vIFRoZSBzZWNvbmQgb3BlcmF0aW9uIC0gd2hpY2ggaGFzIG5vIG5hbWVkIGlucHV0L291dHB1dCBpcyBiZWluZyBmb3VuZAotICAgIC8vIHNob3VsZCBub3QgYmUgcmVjb25jaWxlZCBiZWNhdXNlIHRoZSBiaW5kaW5nIHNwZWNpZmllcyB0aGUgaW5wdXQgYW5kCi0gICAgLy8gb3V0cHV0LgotCi0gICAgU3RyaW5nIGlucHV0Mk5hbWUgPSAiSW5wdXQyIjsgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZyBvdXRwdXQyTmFtZSA9ICJPdXRwdXQyIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgU3RyaW5nIG9wZXJhdGlvbjJOYW1lID0gIk5ld09wZXJhdGlvbjIiOyAvLyROT04tTkxTLTEkCi0KLSAgICBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjIgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uMk5hbWUsIGlucHV0Mk5hbWUsIG91dHB1dDJOYW1lKTsKLSAgICBqYXZheC53c2RsLk9wZXJhdGlvbiBhY3R1YWxPcGVyYXRpb24yID0gYmluZGluZ09wZXJhdGlvbjIuZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMobnVsbCwgYWN0dWFsT3BlcmF0aW9uMik7Ci0KLSAgICAvLyBUaGUgdGhpcmQgb3BlcmF0aW9uIHNwZWNpZmllcyBhbiBpbnB1dCBhbmQgb3V0cHV0IG5hbWUsIGFuZCB0aGUgYmluZGluZwotICAgIC8vIG9wZXJhdGlvbiB3aWxsIHJlY29uY2lsZSBmaW5lIGJlY2F1c2UgdGhlIGl0IGFsc28gc3BlY2lmaWVzIHRoZSBwcm9wZXIKLSAgICAvLyBpbnB1dCBhbmQgb3V0cHV0IG5hbWUuCi0KLSAgICBTdHJpbmcgb3BlcmF0aW9uM05hbWUgPSAiTmV3T3BlcmF0aW9uMyI7IC8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLk9wZXJhdGlvbiBvcGVyYXRpb24zID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9uKG9wZXJhdGlvbjNOYW1lLCBpbnB1dDNOYW1lLCBvdXRwdXQzTmFtZSk7Ci0KLSAgICBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uM05hbWUsIGlucHV0M05hbWUsIG91dHB1dDNOYW1lKTsKLSAgICBqYXZheC53c2RsLk9wZXJhdGlvbiBhY3R1YWxPcGVyYXRpb24zID0gYmluZGluZ09wZXJhdGlvbjMuZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMob3BlcmF0aW9uMywgYWN0dWFsT3BlcmF0aW9uMyk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNzc4NTIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RGdWxsRWxlbWVudEV4dGVuc2liaWxpdHkoKQotICB7Ci0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eS9FeHRlbmRlZFdTREwud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIFN0cmluZyBleHRlbnNpb25zTmFtZXNwYWNlVVJJID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRXh0ZW5zaW9ucy8iOyAvLyROT04tTkxTLTEkIAotICAgIEVMaXN0IGltcG9ydHMgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCk7Ci0gICAgYXNzZXJ0RmFsc2UoaW1wb3J0cy5pc0VtcHR5KCkpOwotICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KWltcG9ydHMuZ2V0KDApOwotICAgIGNoZWNrRXh0ZW5zaW9uKHRoZUltcG9ydCwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgImltcG9ydCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBFTGlzdCBtZXNzYWdlcyA9IGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCk7Ci0gICAgYXNzZXJ0RmFsc2UobWVzc2FnZXMuaXNFbXB0eSgpKTsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSltZXNzYWdlcy5nZXQoMCk7Ci0gICAgY2hlY2tFeHRlbnNpb24obWVzc2FnZSwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgIm1lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgUGFydCBwYXJ0ID0gKFBhcnQpbWVzc2FnZS5nZXRQYXJ0KCJleHRlbmRlZFBhcnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFzc2VydE5vdE51bGwocGFydCk7Ci0gICAgY2hlY2tFeHRlbnNpb24ocGFydCwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgInBhcnQiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgRUxpc3QgcG9ydFR5cGVzID0gZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCk7Ci0gICAgYXNzZXJ0RmFsc2UocG9ydFR5cGVzLmlzRW1wdHkoKSk7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpcG9ydFR5cGVzLmdldCgwKTsKLSAgICBjaGVja0V4dGVuc2lvbihwb3J0VHlwZSwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgInBvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKXBvcnRUeXBlLmdldE9wZXJhdGlvbigiZXh0ZW5kZWRPcGVyYXRpb24iLCBudWxsLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotICAgIGFzc2VydE5vdE51bGwob3BlcmF0aW9uKTsKLSAgICBjaGVja0V4dGVuc2lvbihvcGVyYXRpb24sIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJvcGVyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChpbnB1dCk7Ci0gICAgY2hlY2tFeHRlbnNpb24oaW5wdXQsIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJpbnB1dCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dCk7Ci0gICAgY2hlY2tFeHRlbnNpb24ob3V0cHV0LCBleHRlbnNpb25zTmFtZXNwYWNlVVJJLCAib3V0cHV0Iik7IC8vJE5PTi1OTFMtMSQKLQotICAgIEZhdWx0IGZhdWx0ID0gKEZhdWx0KW9wZXJhdGlvbi5nZXRGYXVsdCgiZXh0ZW5kZWRGYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gICAgYXNzZXJ0Tm90TnVsbChmYXVsdCk7Ci0gICAgY2hlY2tFeHRlbnNpb24oZmF1bHQsIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJmYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRoZSBnaXZlbiBleHRlbnNpYmxlIGVsZW1lbnQgdG8gbWFrZSBzdXJlIHRoYXQgaXRzIGFzc3VtZWQgb25lIGFuZCBvbmx5IGV4dGVuc2liaWxpdHkgZWxlbWVudCBtYXRjaGVzIHRoZSBnaXZlbiBuYW1lc3BhY2UgYW5kIGxvY2FsIG5hbWUuCi0gICAqIEBwYXJhbSBleHRlbnNpYmxlRWxlbWVudCB0aGUgZXh0ZW5zaWJsZSBlbGVtZW50IHRvIHRlc3QuCi0gICAqIEBwYXJhbSBleHRlbnNpb25zTmFtZXNwYWNlVVJJIHRoZSBleHBlY3RlZCBuYW1lc3BhY2UgVVJJLgotICAgKiBAcGFyYW0gZWxlbWVudE5hbWUgdGhlIGV4cGVjdGVkIGVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjaGVja0V4dGVuc2lvbihFeHRlbnNpYmxlRWxlbWVudCBleHRlbnNpYmxlRWxlbWVudCwgU3RyaW5nIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksIFN0cmluZyBlbGVtZW50TmFtZSkKLSAgewotICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgYXNzZXJ0RmFsc2UoZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmlzRW1wdHkoKSk7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLSAgICBRTmFtZSBlbGVtZW50VHlwZSA9IGV4dGVuc2liaWxpdHlFbGVtZW50LmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgU3RyaW5nIG5zVVJJID0gZWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgU3RyaW5nIGxvY2FsUGFydCA9IGVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpOwotICAgIGFzc2VydEVxdWFscyhleHRlbnNpb25zTmFtZXNwYWNlVVJJLCBuc1VSSSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGxvY2FsUGFydCwgZWxlbWVudE5hbWUpOwotICB9Ci0gIAotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNzQzNjEKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUeXBlc0V4dGVuc2liaWxpdHkoKQotICB7Ci0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL1R5cGVzRXh0ZW5zaWJpbGl0eS9UeXBlc0V4dGVuc2liaWxpdHkud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICAKLSAgICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0gICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgCi0gICAgU3RyaW5nIG90aGVyVHlwZXNOYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9PdGhlclR5cGVzLyI7IC8vJE5PTi1OTFMtMSQKLQotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0gICAgUU5hbWUgZWxlbWVudFR5cGUgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhvdGhlclR5cGVzTmFtZXNwYWNlLCBlbGVtZW50VHlwZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJ0eXBlRGVmIiwgZWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOyAvLyROT04tTkxTLTEkCi0KLSAgICBMaXN0IHNjaGVtYXMgPSB0eXBlcy5nZXRTY2hlbWFzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHNjaGVtYXMuc2l6ZSgpKTsKLSAgICAKLSAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBzY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDEpOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBzY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudC5nZXRTY2hlbWEoKTsKLSAgICBhc3NlcnROb3ROdWxsKHNjaGVtYSk7Ci0gICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsYXJhdGlvbiA9IHNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKCJ0ZXN0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnREZWNsYXJhdGlvbik7Ci0gICAgYXNzZXJ0Tm90TnVsbChlbGVtZW50RGVjbGFyYXRpb24uZ2V0Q29udGFpbmVyKCkpOyAgICAKLSAgICAKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDIpOwotICAgIGVsZW1lbnRUeXBlID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICBhc3NlcnRFcXVhbHMob3RoZXJUeXBlc05hbWVzcGFjZSwgZWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIGFzc2VydEVxdWFscygidHlwZURlZiIsIGVsZW1lbnRUeXBlLmdldExvY2FsUGFydCgpKTsgLy8kTk9OLU5MUy0xJCAgICAKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3ODU1NQotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFsbG93TnVsbE5hbWVzcGFjZVVSSSgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm9TZXJ2aWNlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm9TZXJ2aWNlIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gVGhlIGVsZW1lbnQgZGVjbGFyYXRpb24gZm9yIHRoZSBvdXRwdXQgbWVzc2FnZSBwYXJ0IGlzIHNwZWNpZmllZCBpbiBhCi0gICAgLy8gc2NoZW1hIHdpdGggbm8gdGFyZ2V0IG5hbWVzcGFjZS4gSXQgc2hvdWxkIHJlc29sdmUgZmluZSBhbmQgaGF2ZSBhIG51bGwKLSAgICAvLyBuYW1lc3BhY2UgVVJJLgotCi0gICAgUU5hbWUgb3V0cHV0MVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgInVwZGF0ZVBob25lTnVtYmVyUmVzcG9uc2VNc2ciKTsgLy8kTk9OLU5MUy0xJAotICAgIE1lc3NhZ2Ugb3V0cHV0MU1lc3NhZ2UgPSAoTWVzc2FnZSlkZWZpbml0aW9uLmdldE1lc3NhZ2Uob3V0cHV0MVFOYW1lKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dDFNZXNzYWdlKTsKLQotICAgIFBhcnQgcGFydDEgPSAoUGFydClvdXRwdXQxTWVzc2FnZS5nZXRQYXJ0KCJvdXRwdXQxIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhc3NlcnROb3ROdWxsKHBhcnQxKTsKLQotICAgIFFOYW1lIG91dHB1dDJFbGVtZW50TmFtZSA9IHBhcnQxLmdldEVsZW1lbnROYW1lKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyRWxlbWVudE5hbWUpOwotICAgIGFzc2VydEVxdWFscyhYTUxDb25zdGFudHMuTlVMTF9OU19VUkksIG91dHB1dDJFbGVtZW50TmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gb3V0cHV0MkVsZW1lbnREZWNsYXJhdGlvbiA9IHBhcnQxLmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0MkVsZW1lbnREZWNsYXJhdGlvbik7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyRWxlbWVudERlY2xhcmF0aW9uLmdldENvbnRhaW5lcigpKTsKLSAgICBhc3NlcnROdWxsKG91dHB1dDJFbGVtZW50RGVjbGFyYXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCi0gICAgLy8gVGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIG91dHB1dCBtZXNzYWdlIHBhcnQgaXMgc3BlY2lmaWVkIGluIGEKLSAgICAvLyBzY2hlbWEgd2l0aCBubyB0YXJnZXQgbmFtZXNwYWNlLiBJdCBzaG91bGQgcmVzb2x2ZSBmaW5lIGFuZCBoYXZlIGEgbnVsbAotICAgIC8vIG5hbWVzcGFjZSBVUkkuCi0KLSAgICBRTmFtZSBvdXRwdXQyUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidXBkYXRlQWRkcmVzc1Jlc3BvbnNlTXNnIik7IC8vJE5PTi1OTFMtMSQKLSAgICBNZXNzYWdlIG91dHB1dDJNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG91dHB1dDJRTmFtZSk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyTWVzc2FnZSk7Ci0KLSAgICBQYXJ0IHBhcnQyID0gKFBhcnQpb3V0cHV0Mk1lc3NhZ2UuZ2V0UGFydCgib3V0cHV0MiIpOyAvLyROT04tTkxTLTEkCi0gICAgYXNzZXJ0Tm90TnVsbChwYXJ0MSk7Ci0KLSAgICBRTmFtZSBvdXRwdXQyVHlwZU5hbWUgPSBwYXJ0Mi5nZXRUeXBlTmFtZSgpOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0MlR5cGVOYW1lKTsKLSAgICBhc3NlcnRFcXVhbHMoWE1MQ29uc3RhbnRzLk5VTExfTlNfVVJJLCBvdXRwdXQyVHlwZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCi0gICAgWFNEVHlwZURlZmluaXRpb24gb3V0cHV0MlR5cGVEZWZpbml0aW9uID0gcGFydDIuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dDJUeXBlRGVmaW5pdGlvbik7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyVHlwZURlZmluaXRpb24uZ2V0Q29udGFpbmVyKCkpOwotICAgIGFzc2VydE51bGwob3V0cHV0MlR5cGVEZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMDQ0NTMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2Fkc05hbWVsZXNzRGVmaW5pdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvL1Rlc3Qgd2l0aCBuYW1lbGVzcyBkZWZpbml0aW9uCi0gICAgICAKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL01pc3NpbmdOYW1lLndzZGwiKTsKLSAgICAgIGFzc2VydE51bGwoZGVmaW5pdGlvbi5nZXRRTmFtZSgpKTsKLQotICAgICAgLy9UZXN0IHdpdGggbmFtZWQgZGVmaW5pdGlvbgotICAgICAgCi0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvTG9hZHNOYW1lbGVzc0RlZmluaXRpb24vV2l0aE5hbWUud3NkbCIpOwotICAgICAgYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLSAgICAgIFFOYW1lIG5hbWUgPSBkZWZpbml0aW9uLmdldFFOYW1lKCk7IAotICAgICAgYXNzZXJ0Tm90TnVsbChuYW1lKTsKLSAgICAgIGFzc2VydEVxdWFscygiV1NETEZpbGUiLCBuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNjc0Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SGFuZGxlc0RvY3VtZW50YXRpb25FbGVtZW50cygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBMb2FkIGEgc2FtcGxlIFdTREwgZG9jdW1lbnQgdGhhdCBoYXMgZG9jdW1lbnRhdGlvbiBlbGVtZW50cyBpbiBhbGwgYWxsb3dlZCBwbGFjZXMuCi0gICAgICAKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0hhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMvRG9jdW1lbnRlZC53c2RsIik7Ci0gICAgICAKLSAgICAgIC8vIE1ha2Ugc3VyZSBpbXBvcnRzIGFyZSBhZGRlZCBhZnRlciB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50LgotICAgICAgCi0gICAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFOwotICAgICAgSW1wb3J0IGFuSW1wb3J0ID0gZmFjdG9yeS5jcmVhdGVJbXBvcnQoKTsKLSAgICAgIGFuSW1wb3J0LnNldE5hbWVzcGFjZVVSSSgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOwotICAgICAgZGVmaW5pdGlvbi5hZGRJbXBvcnQoYW5JbXBvcnQpOwotICAgICAgCi0gICAgICBFbGVtZW50IGRlZmluaXRpb25Eb2N1bWVudGF0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLSAgICAgIGFzc2VydE5vdE51bGwoZGVmaW5pdGlvbkRvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIEVsZW1lbnQgZXhwZWN0ZWRJbXBvcnRFbGVtZW50ID0gZ2V0TmV4dEVsZW1lbnQoZGVmaW5pdGlvbkRvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIEVsZW1lbnQgaW1wb3J0RWxlbWVudCA9IGFuSW1wb3J0LmdldEVsZW1lbnQoKTsKLSAgICAgIGFzc2VydEVxdWFscyhpbXBvcnRFbGVtZW50LCBleHBlY3RlZEltcG9ydEVsZW1lbnQpOwotICAgICAgCi0gICAgICAvLyBUaGlzIGlzIGEgYml0IG92ZXJraWxsIHNpbmNlIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnRzIGFyZSBoYW5kbGVkIGluIHRoZSBiYXNlIGNsYXNzIFdTRExFbGVtZW50SW1wbCBidXQuLi4KLSAgICAgIAotICAgICAgLy8gTWFrZSBzdXJlIG5ldyBtZXNzYWdlIHBhcnRzIGFyZSBhZGRlZCBhZnRlciB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGFuZCBhcyB0aGUgbGFzdCBlbGVtZW50LgotCi0gICAgICBNZXNzYWdlIGFNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKS5nZXQoMCk7Ci0gICAgICBQYXJ0IG5ld1BhcnQgPSBmYWN0b3J5LmNyZWF0ZVBhcnQoKTsKLSAgICAgIGFNZXNzYWdlLmFkZFBhcnQobmV3UGFydCk7Ci0KLSAgICAgIEVsZW1lbnQgbWVzc2FnZUVsZW1lbnQgPSBhTWVzc2FnZS5nZXRFbGVtZW50KCk7Ci0KLSAgICAgIEVsZW1lbnQgbWVzc2FnZURvY3VtZW50YXRpb25FbGVtZW50ID0gYU1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLSAgICAgIGFzc2VydE5vdE51bGwobWVzc2FnZURvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIEVsZW1lbnQgZmlyc3RDaGlsZEVsZW1lbnQgPSBnZXRGaXJzdENoaWxkRWxlbWVudChtZXNzYWdlRWxlbWVudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMobWVzc2FnZURvY3VtZW50YXRpb25FbGVtZW50LCBmaXJzdENoaWxkRWxlbWVudCk7Ci0gICAgICAKLSAgICAgIEVsZW1lbnQgcGFydEVsZW1lbnQgPSBuZXdQYXJ0LmdldEVsZW1lbnQoKTsKLSAgICAgIEVsZW1lbnQgbGFzdENoaWxkRWxlbWVudCA9IGdldExhc3RDaGlsZEVsZW1lbnQobWVzc2FnZUVsZW1lbnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKHBhcnRFbGVtZW50LCBsYXN0Q2hpbGRFbGVtZW50KTsKLSAgICAgIAotICAgICAgLy8gTWFrZSBzdXJlIG5ldyBvcGVyYXRpb25zIGFyZSBhZGRlZCBhZnRlciB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGFuZCBhcyB0aGUgbGFzdCBlbGVtZW50LgotCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKS5nZXQoMCk7Ci0gICAgICBPcGVyYXRpb24gbmV3T3BlcmF0aW9uID0gZmFjdG9yeS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihuZXdPcGVyYXRpb24pOwotICAgICAgCi0gICAgICBFbGVtZW50IHBvcnRUeXBlRWxlbWVudCA9IHBvcnRUeXBlLmdldEVsZW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBwb3J0VHlwZURvY3VtZW50YXRpb25FbGVtZW50ID0gcG9ydFR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLSAgICAgIGFzc2VydE5vdE51bGwocG9ydFR5cGVEb2N1bWVudGF0aW9uRWxlbWVudCk7Ci0gICAgICBmaXJzdENoaWxkRWxlbWVudCA9IGdldEZpcnN0Q2hpbGRFbGVtZW50KHBvcnRUeXBlRWxlbWVudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMocG9ydFR5cGVEb2N1bWVudGF0aW9uRWxlbWVudCwgZmlyc3RDaGlsZEVsZW1lbnQpOwotICAgICAgCi0gICAgICBFbGVtZW50IG5ld09wZXJhdGlvbkVsZW1lbnQgPSBuZXdPcGVyYXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgbGFzdENoaWxkRWxlbWVudCA9IGdldExhc3RDaGlsZEVsZW1lbnQocG9ydFR5cGVFbGVtZW50KTsKLSAgICAgIGFzc2VydEVxdWFscyhuZXdPcGVyYXRpb25FbGVtZW50LCBsYXN0Q2hpbGRFbGVtZW50KTsKLSAgICAgIAotICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZWxlbWVudCBpcyBhZGRlZCBhZnRlciB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGFuZCBhcyB0aGUgbGFzdCBlbGVtZW50LgotICAgICAgCi0gICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLmdldCgwKTsKLSAgICAgIE91dHB1dCBvdXRwdXQgPSBmYWN0b3J5LmNyZWF0ZU91dHB1dCgpOwotICAgICAgb3BlcmF0aW9uLnNldE91dHB1dChvdXRwdXQpOwotCi0gICAgICBFbGVtZW50IG9wZXJhdGlvbkVsZW1lbnQgPSBvcGVyYXRpb24uZ2V0RWxlbWVudCgpOwotCi0gICAgICBFbGVtZW50IG9wZXJhdGlvbkRvY3VtZW50YXRpb25FbGVtZW50ID0gb3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKG9wZXJhdGlvbkRvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIGZpcnN0Q2hpbGRFbGVtZW50ID0gZ2V0Rmlyc3RDaGlsZEVsZW1lbnQob3BlcmF0aW9uRWxlbWVudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMob3BlcmF0aW9uRG9jdW1lbnRhdGlvbkVsZW1lbnQsIGZpcnN0Q2hpbGRFbGVtZW50KTsKLSAgICAgIAotICAgICAgRWxlbWVudCBvdXRwdXRFbGVtZW50ID0gb3V0cHV0LmdldEVsZW1lbnQoKTsKLSAgICAgIGxhc3RDaGlsZEVsZW1lbnQgPSBnZXRMYXN0Q2hpbGRFbGVtZW50KG9wZXJhdGlvbkVsZW1lbnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKG91dHB1dEVsZW1lbnQsIGxhc3RDaGlsZEVsZW1lbnQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MzkwCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3VwcG9ydHNMb2NhbE5TRm9yRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyB1cmkgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0J1Z0ZpeGVzL0xvY2FsTmFtZXNwYWNlL0xvY2FsTmFtZXNwYWNlMi53c2RsIjsgLy8kTk9OLU5MUy0xJAotICAgICAgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmNyZWF0ZVdTREw0SkZhY3RvcnkoKTsKLSAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgICAgamF2YXgud3NkbC5EZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsUmVhZGVyLnJlYWRXU0RMKHVyaSk7Ci0KLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9leGFtcGxlLyI7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgLy8gVGVzdCBhIGxvY2FsIFNPQVAgbmFtZXNwYWNlIHByZWZpeCBkZWNsYXJhdGlvbi4KLQotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgImV4YW1wbGVTT0FQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGphdmF4LndzZGwuQmluZGluZyBiaW5kaW5nID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKGJpbmRpbmcpOwotICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc29hcEJpbmRpbmcgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLSAgICAgIGFzc2VydE5vdE51bGwoc29hcEJpbmRpbmcpOwotICAgICAgUU5hbWUgYmluZGluZ0VsZW1lbnRUeXBlID0gc29hcEJpbmRpbmcuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICAgIGFzc2VydE5vdE51bGwoYmluZGluZ0VsZW1lbnRUeXBlKTsKLSAgICAgIFN0cmluZyBsb2NhbFBhcnQgPSBiaW5kaW5nRWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoU09BUENvbnN0YW50cy5CSU5ESU5HX0VMRU1FTlRfVEFHLCBsb2NhbFBhcnQpOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGJpbmRpbmdFbGVtZW50VHlwZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGFzc2VydEVxdWFscyhTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSwgbmFtZXNwYWNlVVJJKTsKLSAgICAgIGFzc2VydFRydWUoc29hcEJpbmRpbmcgaW5zdGFuY2VvZiBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZyk7Ci0KLSAgICAgIC8vIFRlc3QgYSBkZWZhdWx0IFNPQVAgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGF0IHRoZSBwb3J0IGxldmVsLgotCi0gICAgICBRTmFtZSBzZXJ2aWNlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiZXhhbXBsZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBqYXZheC53c2RsLlNlcnZpY2Ugc2VydmljZSA9IGRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotICAgICAgUG9ydCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KCJleGFtcGxlU09BUCIpOwotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IHNvYXBBZGRyZXNzID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHNvYXBBZGRyZXNzKTsKLSAgICAgIFFOYW1lIHBvcnRFbGVtZW50VHlwZSA9IHNvYXBBZGRyZXNzLmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHBvcnRFbGVtZW50VHlwZSk7Ci0gICAgICBsb2NhbFBhcnQgPSBwb3J0RWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoU09BUENvbnN0YW50cy5BRERSRVNTX0VMRU1FTlRfVEFHLCBsb2NhbFBhcnQpOwotICAgICAgbmFtZXNwYWNlVVJJID0gcG9ydEVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBuYW1lc3BhY2VVUkkpOwotICAgICAgYXNzZXJ0VHJ1ZShzb2FwQWRkcmVzcyBpbnN0YW5jZW9mIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgZmFpbCgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudCBnZXROZXh0RWxlbWVudChFbGVtZW50IGFuRWxlbWVudCkKLSAgewotICAgIE5vZGUgbm9kZSA9IGFuRWxlbWVudC5nZXROZXh0U2libGluZygpOwotICAgIHdoaWxlIChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgIHsKLSAgICAgIG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiAoRWxlbWVudClub2RlOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGdldEZpcnN0Q2hpbGRFbGVtZW50KEVsZW1lbnQgYW5FbGVtZW50KQotICB7Ci0gICAgTm9kZSBub2RlID0gYW5FbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICB7Ci0gICAgICBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgICByZXR1cm4gKEVsZW1lbnQpbm9kZTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudCBnZXRMYXN0Q2hpbGRFbGVtZW50KEVsZW1lbnQgYW5FbGVtZW50KQotICB7Ci0gICAgTm9kZSBub2RlID0gYW5FbGVtZW50LmdldExhc3RDaGlsZCgpOwotICAgIHdoaWxlIChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgIHsKLSAgICAgIG5vZGUgPSBub2RlLmdldFByZXZpb3VzU2libGluZygpOwotICAgIH0KLSAgICByZXR1cm4gKEVsZW1lbnQpbm9kZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDg1Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvSW5saW5lVHlwZXNGcm9tSW1wb3J0c0FyZVZpc2libGUvQS53c2RsIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL0EiOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAibWVzc2FnZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgamF2YXgud3NkbC5NZXNzYWdlIG1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwobWVzc2FnZSk7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydCltZXNzYWdlLmdldFBhcnQoInBhcmFtZXRlcnMiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYXNzZXJ0Tm90TnVsbChwYXJ0KTsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWZpbml0aW9uID0gcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgYXNzZXJ0Tm90TnVsbCh0eXBlRGVmaW5pdGlvbik7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gdHlwZURlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9CIiwgbmFtZXNwYWNlKTsKLSAgICAgIGFzc2VydEVxdWFscygiQlR5cGUiLCB0eXBlRGVmaW5pdGlvbi5nZXROYW1lKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9ICAgICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9JbmxpbmVTY2hlbWFUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvSW5saW5lU2NoZW1hVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTdmNDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9JbmxpbmVTY2hlbWFUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lU2NoZW1hVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwdWJsaWMgSW5saW5lU2NoZW1hVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBJbmxpbmVTY2hlbWFUZXN0KCJJbmxpbmVTY2hlbWEiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RJbmxpbmVTY2hlbWEoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBJbmxpbmVTY2hlbWFUZXN0KCJJbmxpbmVTY2hlbWFXaXRoV1NETDRKIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0SW5saW5lU2NoZW1hV2l0aFdTREw0SigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVTY2hlbWEoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiKTsKLSAgICAgIHRyYXZlcnNlRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVTY2hlbWFXaXRoV1NETDRKKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGxvYWREZWZpbml0aW9uRm9yV1NETDRKKCJzYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gICAgICB0cmF2ZXJzZURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZURlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXIgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSW1wb3J0IG15SW1wb3J0ID0gKEltcG9ydClpdGVyLm5leHQoKTsKLSAgICAgIHRyYXZlcnNlSW1wb3J0KG15SW1wb3J0KTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgSW5saW5lIFNjaGVtYQotICAgIFR5cGVzIHR5cGVzID0gKG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzKWRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiPHR5cGVzPiBpcyBudWxsIiwgdHlwZXMpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdHlwZXMuZ2V0U2NoZW1hcygpLml0ZXJhdG9yKCk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHR5cGVzPiBkb2VzIG5vdCBoYXZlIGlubGluZSA8c2NoZW1hPnMiLCBpdGVyYXRvci5oYXNOZXh0KCkpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IChYU0RTY2hlbWEpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICB0cmF2ZXJzZVNjaGVtYShzY2hlbWEpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZUltcG9ydChJbXBvcnQgbXlJbXBvcnQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG15SW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0gICAgLy8gICAgdHJhdmVyc2VEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlU2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBudWxsOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKCJObyA8ZWxlbWVudD5zIGFyZSBmb3VuZCIsIGl0ZXJhdG9yLmhhc05leHQoKSk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBlbGVtZW50RGVjbCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24paXRlcmF0b3IubmV4dCgpOwotCi0gICAgICBpZiAoZWxlbWVudERlY2wuZ2V0TmFtZSgpLmVxdWFscygiTmV3T3BlcmF0aW9uUmVzcG9uc2UiKSkKLSAgICAgICAgdHJhdmVyc2VFbGVtZW50RGVjbChlbGVtZW50RGVjbCk7Ci0gICAgICBlbHNlIGlmIChlbGVtZW50RGVjbC5nZXROYW1lKCkuZXF1YWxzKCJOZXdPcGVyYXRpb25SZXF1ZXN0IikpCi0gICAgICAgIHRyYXZlcnNlRWxlbWVudERlY2woZWxlbWVudERlY2wpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZUVsZW1lbnREZWNsKFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSBlbGVtZW50RGVjbC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKCI8ZWxlbWVudD4gZG9lcyBub3QgaGF2ZSA8c2ltcGxlVHlwZT4iLCB0eXBlIGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pOwotICAgIGlmICh0eXBlLmdldENvbXBsZXhUeXBlKCkgPT0gbnVsbCkgLy8gc2ltcGxlIHR5cGUKLSAgICAgIHJldHVybjsgLy8gVEJEIC0gQ3VycmVudGx5IHRoaXMgYWx3YXlzIHJldHVybnMgYXQgdGhpcyBwb2ludC4KLSAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgY29udGVudCA9IHR5cGUuZ2V0Q29tcGxleFR5cGUoKS5nZXRDb250ZW50KCk7Ci0gICAgdHJhdmVyc2VNb2RlbEdyb3VwKChYU0RNb2RlbEdyb3VwKWNvbnRlbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlTW9kZWxHcm91cChYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXApCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOwotICAgIFhTRFBhcnRpY2xlQ29udGVudCBwYXJ0aWNsZUNvbnRlbnQgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgcGFydGljbGVDb250ZW50ID0gKChYU0RQYXJ0aWNsZSlpdGVyYXRvci5uZXh0KCkpLmdldENvbnRlbnQoKTsKLSAgICAgIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIGlmICgoKFhTREVsZW1lbnREZWNsYXJhdGlvbilwYXJ0aWNsZUNvbnRlbnQpLmlzRWxlbWVudERlY2xhcmF0aW9uUmVmZXJlbmNlKCkpCi0gICAgICAgICAgdHJhdmVyc2VFbGVtZW50RGVjbCgoKFhTREVsZW1lbnREZWNsYXJhdGlvbilwYXJ0aWNsZUNvbnRlbnQpLmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHJhdmVyc2VFbGVtZW50RGVjbCgoWFNERWxlbWVudERlY2xhcmF0aW9uKXBhcnRpY2xlQ29udGVudCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGxvYWREZWZpbml0aW9uRm9yV1NETDRKKFN0cmluZyB3c2RsRmlsZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgV1NETFJlYWRlciByZWFkZXIgPSAobmV3IFdTRExGYWN0b3J5SW1wbCgpKS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgU3RyaW5nIHMgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIHdzZGxGaWxlOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKXJlYWRlci5yZWFkV1NETChzLCBuZXcgSW5wdXRTb3VyY2UobmV3IEZpbGVJbnB1dFN0cmVhbShzKSkpOwotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMjdkZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0xvYWRBbmRTZXJpYWxpemF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVGaWx0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuWE1MRGlmZjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2FkQW5kU2VyaWFsaXphdGlvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBWZWN0b3Igd3NkbEZpbGVzID0gbmV3IFZlY3RvcigpOwotCi0gIHN0YXRpYyBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGVzIGEgc3RhbmQtYWxvbmUgdGVzdC4KLSAgICogQHBhcmFtIG9iamVjdHMgYW4gYXJyYXkgb2YgU3RyaW5ncyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0gICAqIEBzZWUgI3J1bgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBMb2FkQW5kU2VyaWFsaXphdGlvblRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gICAgc3VpdGUuYWRkVGVzdChuZXcgTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0KCJMb2FkQW5kU3RvcmUiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RMb2FkQW5kU3RvcmUoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgc3VpdGUuYWRkVGVzdCAvLyB3dHAgYnVnIDc5MzI2Ci0gICAgKG5ldyBMb2FkQW5kU2VyaWFsaXphdGlvblRlc3QoIkNvbXBhcmUiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RDb21wYXJlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBMb2FkIGZyb20gdGhlIFdTREwgZGVmaW5pdGlvbnMgZmlsZSBhbmQgc3RvcmUgYmFjayB0byBhIGRpZmZlcmVudCBmaWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdExvYWRBbmRTdG9yZSgpCi0gIHsKLSAgICBTdHJpbmcgVEVTVF9EQVRBX0RJUiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidGVzdERhdGFEaXIiKTsKLSAgICAvL0Fzc2VydC5hc3NlcnROb3ROdWxsKHRlc3REYXRhRGlyKTsKLSAgICBGaWxlIGRpciA9IG51bGw7Ci0gICAgaWYgKFRFU1RfREFUQV9ESVIgIT0gbnVsbCkKLSAgICAgIGRpciA9IG5ldyBGaWxlKFRFU1RfREFUQV9ESVIpOwotICAgIGVsc2UKLSAgICAgIC8vIEtCOiBpZiB5b3UgYXJlIGhlcmUsIGZpeCB0ZXh0LnhtbAotICAgICAgZGlyID0gbmV3IEZpbGUoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlIik7IC8vIGZhbGxiYWNrCi0KLSAgICBpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKQotICAgIHsKLSAgICAgIGxpc3REYXRhRmlsZXMoZGlyKTsKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEZpbGUgbXlGaWxlID0gbnVsbDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsRmlsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBteUZpbGUgPSAoRmlsZSl3c2RsRmlsZXMuZWxlbWVudEF0KGkpOwotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihteUZpbGUudG9VUkwoKS50b1N0cmluZygpKTsKLSAgICAgICAgICBsb2FkKG15RmlsZS50b1N0cmluZygpKTsKLSAgICAgICAgICBwcmludChteUZpbGUudG9TdHJpbmcoKSArICIub3V0Iik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGZhaWwoZGlyLnRvU3RyaW5nKCkpOwotCi0gIH0KLQotICBwcml2YXRlIHZvaWQgbGlzdERhdGFGaWxlcyhGaWxlIHNyYykKLSAgewotICAgIGlmICghc3JjLmlzRGlyZWN0b3J5KCkpCi0gICAgICByZXR1cm47IC8vIEFzc2VydGlvbiBmYWlsZWQKLQotICAgIGZpbHRlcldTRExGaWxlcyhzcmMpOyAvLyBBZGQgV1NETCBmaWxlcyBpbiB0aGUgc3JjIGRpcmVjdG9yeQotCi0gICAgRmlsZVtdIGNoaWxkcmVuID0gc3JjLmxpc3RGaWxlcygpOwotICAgIEZpbGUgbXlGaWxlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgbXlGaWxlID0gY2hpbGRyZW5baV07Ci0gICAgICBpZiAobXlGaWxlLmlzRGlyZWN0b3J5KCkpCi0gICAgICB7Ci0gICAgICAgIGlmICgiQ1ZTIi5lcXVhbHMobXlGaWxlLmdldE5hbWUoKSkpCi0gICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbGlzdERhdGFGaWxlcyhteUZpbGUpOyAvLyBWaXNpdCBzdWItZGlyZWN0b3JpZXMgcmVjdXJzaXZlbHkKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZmlsdGVyV1NETEZpbGVzKEZpbGUgZGlyKQotICB7Ci0gICAgRmlsZVtdIHdzZGxzID0gZGlyLmxpc3RGaWxlcyhuZXcgRmlsZUZpbHRlcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHBhdGhuYW1lLmdldE5hbWUoKS5lbmRzV2l0aCgiLndzZGwiKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHdzZGxzLmxlbmd0aDsgaisrKQotICAgIHsKLSAgICAgIHdzZGxGaWxlcy5hZGQod3NkbHNbal0pOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIExvYWQgZnJvbSB0aGUgV1NETCBkZWZpbml0aW9ucyBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGxvYWQoU3RyaW5nIGZpbGVuYW1lKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChmaWxlbmFtZSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlZmluaXRpb24uZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLQotICAgICAgV1NETFJlc291cmNlSW1wbCB3c2RsUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClkZWZpbml0aW9uLmVSZXNvdXJjZSgpOwotICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwod3NkbFJlc291cmNlKTsKLQotICAgICAgRWxlbWVudCBlbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLSAgICAgIFdTRExSZXNvdXJjZUltcGwuc2VyaWFsaXplKFN5c3RlbS5vdXQsIGVsZW1lbnQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogU3RvcmUgdGhlIFdTREwgZGVmaW5pdGlvbnMgdG8gYSBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByaW50KFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgYXNzb2NpYXRlZCBET00gZWxlbWVudCwgY3JlYXRlcyBhIG5ldyBhc3NvY2lhdGVkIERPTSBlbGVtZW50LCBhbmQgdGhlbiBwcmludHMgaXQuCi0gICAgICAvLyBUaGlzIGlzIGEgZ29vZCB0ZXN0IGZvciBob3cgd2VsbCBzZXJpYWxpemF0aW9uIHdvcmtzIGZvciBhIG1vZGVsIGNyZWF0ZWQgImJvdHRvbSB1cCIuCi0gICAgICAvLwotICAgICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudChudWxsKTsKLSAgICAgIGRlZmluaXRpb24uc2V0RWxlbWVudChudWxsKTsKLSAgICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikudXBkYXRlRWxlbWVudCgpOwotCi0gICAgICBEZWZpbml0aW9uTG9hZGVyLnN0b3JlKGRlZmluaXRpb24sIGZpbGVuYW1lKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb21wYXJlIHRoZSBvdXRwdXQgV1NETCBmaWxlIHRvIHRoZSBvcmlnaW5hbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDb21wYXJlKCkKLSAgewotICAgIFhNTERpZmYgeG1sZGlmZiA9IG5ldyBYTUxEaWZmKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBteUZpbGUgPSBudWxsOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsRmlsZXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG15RmlsZSA9IChGaWxlKXdzZGxGaWxlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHhtbGRpZmYuZGlmZihteUZpbGUudG9TdHJpbmcoKSwgbXlGaWxlLnRvU3RyaW5nKCkgKyAiLm91dCIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0xvY2F0aW9uVHJhY2tpbmdUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9jYXRpb25UcmFja2luZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UyNDBiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9jYXRpb25UcmFja2luZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFBhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogVGVzdCBjbGFzcyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBXU0RMIG1vZGVsIHNvdXJjZSBsb2NhdGlvbiB0cmFja2luZwotICogbWVjaGFuaXNtLgotICovCi1wdWJsaWMgY2xhc3MgTG9jYXRpb25UcmFja2luZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gICAgc3VpdGUuYWRkVGVzdChuZXcgTG9jYXRpb25UcmFja2luZ1Rlc3QoKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RUcmFja3NMb2NhdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgdGhlIGxvY2F0aW9uIHRyYWNraW5nIG1lY2hhbmlzbSBwcm92aWRlZCBieSB0aGUgV1NETCBtb2RlbCByZXNvdXJjZQotICAgKiBsb2FkZXIuCi0gICAqIAotICAgKiBAc2VlIFdTRExSZXNvdXJjZUltcGwKLSAgICogQHNlZSBXU0RMUGFyc2VyCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VHJhY2tzTG9jYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIGZpbGVOYW1lID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKSArICIvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChmaWxlTmFtZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlZmluaXRpb24uZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLQotICAgICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIFdTRExQYXJzZXIuZ2V0U3RhcnRMaW5lKGRlZmluaXRpb25FbGVtZW50KSk7Ci0KLSAgICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgICAgIEVsZW1lbnQgdHlwZXNFbGVtZW50ID0gdHlwZXMuZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKDQsIFdTRExQYXJzZXIuZ2V0U3RhcnRMaW5lKHR5cGVzRWxlbWVudCkpOwotCi0gICAgICBMaXN0IHR5cGVzRXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgICBhc3NlcnRFcXVhbHMoMSwgdHlwZXNFeHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLQotICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc2NoZW1hRXh0ZW5zaW9uID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KXR5cGVzRXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLQotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IHNjaGVtYUV4dGVuc2lvbi5nZXRTY2hlbWEoKTsKLQotICAgICAgRWxlbWVudCBzY2hlbWFFbGVtZW50ID0gc2NoZW1hLmdldEVsZW1lbnQoKTsKLQotICAgICAgYXNzZXJ0RXF1YWxzKDUsIFhTRFBhcnNlci5nZXRTdGFydExpbmUoc2NoZW1hRWxlbWVudCkpOwotCi0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVxdWVzdEVsZW1lbnREZWNsYXJhdGlvbiA9IHNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKCJOZXdPcGVyYXRpb25SZXF1ZXN0Iik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgRWxlbWVudCByZXF1ZXN0RWxlbWVudCA9IHJlcXVlc3RFbGVtZW50RGVjbGFyYXRpb24uZ2V0RWxlbWVudCgpOwotCi0gICAgICBhc3NlcnRFcXVhbHMoNywgWFNEUGFyc2VyLmdldFN0YXJ0TGluZShyZXF1ZXN0RWxlbWVudCkpOwotCi0gICAgICBMaXN0IHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBzZXJ2aWNlcy5zaXplKCkpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upc2VydmljZXMuZ2V0KDApOwotCi0gICAgICBFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gc2VydmljZS5nZXRFbGVtZW50KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoNDIsIFdTRExQYXJzZXIuZ2V0U3RhcnRMaW5lKHNlcnZpY2VFbGVtZW50KSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9NeVJlc29sdmVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTXlSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTk3NGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9NeVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotCi1wdWJsaWMgY2xhc3MgTXlSZXNvbHZlciBpbXBsZW1lbnRzIEVudGl0eVJlc29sdmVyCi17Ci0gIHB1YmxpYyBJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgaWYgKHN5c3RlbUlkLmVxdWFscygiaHR0cDovL3d3dy5teWhvc3QuY29tL3RvZGF5IikpCi0gICAgewotICAgICAgLy8gcmV0dXJuIGEgc3BlY2lhbCBpbnB1dCBzb3VyY2UKLSAgICAgIC8vTXlSZWFkZXIgcmVhZGVyID0gbmV3IE15UmVhZGVyKCk7Ci0gICAgICAvL3JldHVybiBuZXcgSW5wdXRTb3VyY2UocmVhZGVyKTsKLSAgICAgIHJldHVybiBuZXcgSW5wdXRTb3VyY2Uoc3lzdGVtSWQpOyAvLyBUQkQKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1BhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9QYXJzZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2N2Y4NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1BhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcjsKLQotCi1wdWJsaWMgY2xhc3MgUGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0KLSAgcHVibGljIFBhcnNlclRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBQYXJzZXJUZXN0KCJQYXJzZXIiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RQYXJzZXIoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VyKCkKLSAgewotICAgIEVudGl0eVJlc29sdmVyIG15UmVzb2x2ZXIgPSBuZXcgTXlSZXNvbHZlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSgiLi9zYW1wbGVzL0xvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgICAgRG9jdW1lbnRCdWlsZGVyIG15QnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgIG15QnVpbGRlci5zZXRFbnRpdHlSZXNvbHZlcihteVJlc29sdmVyKTsKLSAgICAgIERvY3VtZW50IGRvYyA9IG15QnVpbGRlci5wYXJzZShpcyk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRG9jdW1lbnQgaXMgbnVsbCIsIGRvYyk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1JlZmFjdG9yaW5nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1JlZmFjdG9yaW5nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTc5NDFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9SZWZhY3RvcmluZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLQotCi1wdWJsaWMgY2xhc3MgUmVmYWN0b3JpbmdUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHVibGljIFJlZmFjdG9yaW5nVGVzdCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBSZWZhY3RvcmluZ1Rlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3QoIlJlZmFjdG9yaW5nIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UmVmYWN0b3JpbmcoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVmYWN0b3JpbmcoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQmVmb3JlIHJ1bm5pbmcgdGhpcyB0ZXN0LCBtb2RpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgV1NETCBmaWxlCi0gICAgICBnZW5lcmF0ZVdTREwoV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKSArInNhbXBsZXMvZ2VuZXJhdGVkL1JlZmFjdG9yaW5nVGVzdC53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBkZWZlY3QgNjU5NAotICBwdWJsaWMgdm9pZCByZW5hbWVPcGVyYXRpb24oT3BlcmF0aW9uIG9wKQotICB7Ci0gICAgSW5wdXQgaW5wdXQgPSBvcC5nZXRFSW5wdXQoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChpbnB1dCk7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChtZXNzYWdlKTsKLQotICAgIG9wLnNldE5hbWUoIlJlbmFtZWQiICsgb3AuZ2V0TmFtZSgpKTsKLSAgICBRTmFtZSBuZXdRTmFtZSA9IG5ldyBRTmFtZShtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksICJSZW5hbWVkIiArIG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgbWVzc2FnZS5zZXRRTmFtZShuZXdRTmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVdTREwoU3RyaW5nIG91dHB1dEZpbGUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZUZpbGVVUkkob3V0cHV0RmlsZSkpOwotICAgIHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLmFkZChyZXNvdXJjZSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBEZWZpbml0aW9uIC0gVGVtcGVyYXR1cmUKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIGRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLCAiVGVtcGVyYXR1cmUiKSk7Ci0gICAgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBUYXJnZXQgbmFtZXNwYWNlIC0gaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20KLSAgICBkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZSgiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20iKTsKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgidG5zIiwgImh0dHA6Ly93d3cudGVtcGVyYXR1cmUuY29tIik7Ci0KLSAgICAvLyBPdGhlciBuYW1lc3BhY2VzIC0gd3NkbCwgc29hcCwgeHNkCi0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoIndzZGwiLCBXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSk7Ci0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInhzZCIsIFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJzb2FwIiwgU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkkpOwotCi0gICAgLy8KLSAgICAvLyBMZXQncyBzdGFydCBidWlsZGluZyB0d28gbWVzc2FnZXMKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFppcENvZGUKLSAgICBQYXJ0IHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZSgiWmlwQ29kZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBNZXNzYWdlIC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIE1lc3NhZ2UgaW5wdXRNZXNzYWdlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBpbnB1dE1lc3NhZ2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJHZXRUZW1wZXJhdHVyZUlucHV0IikpOwotICAgIGlucHV0TWVzc2FnZS5hZGRQYXJ0KHBhcnQpOwotICAgIGRlZmluaXRpb24uYWRkTWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFRlbXBlcmF0dXJlCi0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKCJUZW1wZXJhdHVyZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJmbG9hdCIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE1lc3NhZ2Ugb3V0cHV0TWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgb3V0cHV0TWVzc2FnZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlT3V0cHV0IikpOwotICAgIG91dHB1dE1lc3NhZ2UuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2Uob3V0cHV0TWVzc2FnZSk7Ci0KLSAgICAvLwotICAgIC8vIE5leHQsIGJ1aWxkIGEgUG9ydFR5cGUKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGFuIElucHV0IC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIElucHV0IGlucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQuc2V0TWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGFuIE91dHB1dCAtIEdldFRlbXBlcmF0dXJlT3V0cHV0Ci0gICAgT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICBvdXRwdXQuc2V0TWVzc2FnZShvdXRwdXRNZXNzYWdlKTsKLQotICAgIC8vIENyZWF0ZSBhbiBPcGVyYXRpb24gLSBHZXRUZW1wZXJhdHVyZUZvclppcENvZGUKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbi5zZXROYW1lKCJHZXRUZW1wZXJhdHVyZUZvclppcENvZGUiKTsKLSAgICBvcGVyYXRpb24uc2V0SW5wdXQoaW5wdXQpOwotICAgIG9wZXJhdGlvbi5zZXRPdXRwdXQob3V0cHV0KTsKLQotICAgIC8vIENyZWF0ZSBhIFBvcnRUeXBlCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBwb3J0VHlwZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlSW5mb1NPQVAiKSk7Ci0gICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRQb3J0VHlwZShwb3J0VHlwZSk7Ci0KLSAgICAvLwotICAgIC8vIENyZWF0ZSB0aGUgc2Vjb25kIHNldCBvcCBPcGVyYXRpb25zCi0gICAgLy8KLQotICAgIC8vIENyZWF0ZSBhIFBhcnQKLSAgICBwYXJ0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBhcnQoKTsKLSAgICBwYXJ0LnNldE5hbWUoIlBhcnQyIik7Ci0gICAgcGFydC5zZXRUeXBlTmFtZShuZXcgUU5hbWUoV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSwgInN0cmluZyIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UKLSAgICBNZXNzYWdlIGlucHV0TWVzc2FnZTIgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgIGlucHV0TWVzc2FnZTIuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJJbnB1dE1lc3NhZ2UyIikpOwotICAgIGlucHV0TWVzc2FnZTIuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2UoaW5wdXRNZXNzYWdlMik7Ci0KLSAgICAvLyBDcmVhdGUgYSBQYXJ0Ci0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKCJQYXJ0MyIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJmbG9hdCIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE1lc3NhZ2Ugb3V0cHV0TWVzc2FnZTIgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgIG91dHB1dE1lc3NhZ2UyLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCAiT3V0cHV0TWVzc2FnZTIiKSk7Ci0gICAgb3V0cHV0TWVzc2FnZTIuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2Uob3V0cHV0TWVzc2FnZTIpOwotCi0gICAgLy8gQ3JlYXRlIGFuIElucHV0Ci0gICAgSW5wdXQgaW5wdXQyID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQyLnNldE1lc3NhZ2UoaW5wdXRNZXNzYWdlMik7Ci0KLSAgICAvLyBDcmVhdGUgYW4gT3V0cHV0IC0gR2V0VGVtcGVyYXR1cmVPdXRwdXQKLSAgICBPdXRwdXQgb3V0cHV0MiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICBvdXRwdXQyLnNldE1lc3NhZ2Uob3V0cHV0TWVzc2FnZTIpOwotCi0gICAgLy8gQ3JlYXRlIGFuIE9wZXJhdGlvbiAtIEdldFRlbXBlcmF0dXJlRm9yWmlwQ29kZQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24yID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbjIuc2V0TmFtZSgiT3BlcmF0aW9uMiIpOwotICAgIG9wZXJhdGlvbjIuc2V0SW5wdXQoaW5wdXQyKTsKLSAgICBvcGVyYXRpb24yLnNldE91dHB1dChvdXRwdXQyKTsKLQotICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24yKTsKLQotICAgIHJlbmFtZU9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgIHJlbmFtZU9wZXJhdGlvbihvcGVyYXRpb24yKTsKLQotICAgIHJlc291cmNlLnNhdmUobnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9TZW1hbnRpY1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9TZW1hbnRpY1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWM3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvU2VtYW50aWNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0ODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgU2VtYW50aWNUZXN0IGV4dGVuZHMgRGVmaW5pdGlvblZpc2l0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCi0gIC8vIEFkZGVkIGZvciBKVW5pdAotICBwdWJsaWMgU2VtYW50aWNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyBTZW1hbnRpY1Rlc3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgc3VwZXIoZGVmaW5pdGlvbik7Ci0gIH0KLQotICAvKiAgCi0gICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICAgewotICAgU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jKTsKLSAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLSAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCJ5ZXMiKTsKLSAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsIlVURi04Iik7Ci0gICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCI0Iik7Ci0gICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oZG9tU291cmNlLG5ldyBTdHJlYW1SZXN1bHQobmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpKSk7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCBjcmVhdGVEb2N1bWVudCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0gICB7Ci0gICBkb2MgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCkubmV3RG9jdW1lbnQoKTsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBFbGVtZW50IGNyZWF0ZVdTRExFbGVtZW50KFN0cmluZyBuYW1lKQotICAgewotICAgRWxlbWVudCBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsIixuYW1lKTsKLSAgIGlmICh3c2RsTmFtZXNwYWNlUHJlZml4ICE9IG51bGwpCi0gICBlbGVtZW50LnNldFByZWZpeCh3c2RsTmFtZXNwYWNlUHJlZml4KTsKLSAgIAotICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICB9Ci0gICAqLwotICBwcml2YXRlIHZvaWQgdmlzaXREb2N1bWVudGF0aW9uKEVsZW1lbnQgZG9jRWxlbWVudCkKLSAgewotICAgIGlmIChkb2NFbGVtZW50ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgcHJpbnRsbigiZG9jdW1lbnRhdGlvbjogIiArIGRvY0VsZW1lbnQpOyAvLyBUQkQgLSBzZXJpYWxpemUgZG9jRWxlbWVudAotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHByaW50bG4oU3RyaW5nIHMpCi0gIHsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBkZWZpbml0aW9ucy4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBRTmFtZSBxbmFtZSA9IGRlZi5nZXRRTmFtZSgpOwotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIHFuYW1lLmdldExvY2FsUGFydCgpKTsKLQotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigidGFyZ2V0TmFtZXNwYWNlOiAiICsgdGFyZ2V0TmFtZXNwYWNlKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotCi0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBwcmVmaXggPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIG5hbWVzcGFjZSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLSAgICAgIHByaW50bG4oIm5hbWVzcGFjZSBwcmVmaXg6ICIgKyBwcmVmaXggKyAiLCBuYW1lc3BhY2UgVVJJOiAiICsgbmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgc3VwZXIudmlzaXREZWZpbml0aW9uKGRlZik7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBkZWZpbml0aW9ucy4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRJbXBvcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBpbXBvcnQuLi4iKTsKLSAgICAvLyBEZXRlcm1pbmUgaWYgd2UgPGltcG9ydD4gYSBzY2hlbWEuCi0gICAgaWYgKGltcG9ydGluZ1NjaGVtYSh3c2RsSW1wb3J0KSkKLSAgICB7Ci0gICAgICBwcmludGxuKCI8aW1wb3J0PmluZyBYTUwgU2NoZW1hIik7Ci0KLSAgICAgIC8vICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2Zvby5jb20iIHNjaGVtYUxvY2F0aW9uPSAiYmFyLnhzZCIvPgotICAgICAgcHJpbnRsbigibmFtZXNwYWNlOiAiICsgd3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBwcmludGxuKCJzY2hlbWFMb2NhdGlvbjogIiArIHdzZGxJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICB2aXNpdERvY3VtZW50YXRpb24od3NkbEltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByaW50bG4oIjxpbXBvcnQ+aW5nIFdTREwiKTsKLSAgICAgIHZpc2l0RG9jdW1lbnRhdGlvbih3c2RsSW1wb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIH0KLSAgICBwcmludGxuKCJMZWF2aW5nIGltcG9ydC4uLiIpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGltcG9ydGluZ1NjaGVtYShJbXBvcnQgbXlJbXBvcnQpCi0gIHsKLSAgICBpZiAobXlJbXBvcnQuZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpIC8vIGl0IGlzIFdTREwgaW1wb3J0Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdFR5cGVzKG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRUeXBlcyhUeXBlcyB0eXBlcykKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIHR5cGVzLi4uIik7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHR5cGVzLmdldFNjaGVtYXMoKS5pdGVyYXRvcigpOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgc2NoZW1hID0gKFhTRFNjaGVtYSlpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBwcmludGxuKCJpbi1saW5lIHNjaGVtYTogIiArIHNjaGVtYSk7Ci0gICAgfQotICAgIHByaW50bG4oIkxlYXZpbmcgdHlwZXMuLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0UGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIHBhcnQuLi4iKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydFR5cGUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBwb3J0VHlwZS4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihwb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFFOYW1lIHFuYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKTsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICBzdXBlci52aXNpdFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIHBvcnRUeXBlLi4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgb3BlcmF0aW9uLi4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBuYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIG5hbWUpOwotCi0gICAgT3BlcmF0aW9uVHlwZSBvcFR5cGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRmFpbGVkIGRldGVybWluaW5nIE9wZXJhdGlvbiBUeXBlIiwgb3BUeXBlKTsKLQotICAgIGlmIChPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UgPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZTogIiArICJpbi1vdXQiKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0UgPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZSIgKyAib3V0LWluIik7Ci0gICAgZWxzZSBpZiAoT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT04gPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZSIgKyAib3V0LW9ubHkiKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLk9ORV9XQVkgPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZSIgKyAiaW4tb25seSIpOwotCi0gICAgc3VwZXIudmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIG9wZXJhdGlvbi4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRJbnB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0SW5wdXQoSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBpbnB1dC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBuYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgbmFtZSk7Ci0KLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBpbnB1dC5nZXRFTWVzc2FnZSgpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJGYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbWVzc2FnZSIsIG1lc3NhZ2UpOwotCi0gICAgcHJpbnRsbigiTGVhdmluZyBpbnB1dC4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRPdXRwdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIG91dHB1dC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihvdXRwdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBTdHJpbmcgbmFtZSA9IG91dHB1dC5nZXROYW1lKCk7Ci0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBuYW1lKTsKLQotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJGYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbWVzc2FnZSIsIG1lc3NhZ2UpOwotCi0gICAgcHJpbnRsbigiTGVhdmluZyBvdXRwdXQuLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0RmF1bHQob3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEZhdWx0KEZhdWx0IGZhdWx0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgZmF1bHQuLi4iKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIGZhdWx0Li4uIik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdEJpbmRpbmcob3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZykKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBiaW5kaW5nLi4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBRTmFtZSBxbmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKTsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIkZhaWxlZCB0byByZXNvbHZlIHRoZSBwb3J0VHlwZSIsIHBvcnRUeXBlKTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHNvYXBCb2R5PiBpcyBtaXNzaW5nIiwgc29hcEJvZHlWaXNpdGVkKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHNvYXBCaW5kaW5nPiBpcyBtaXNzaW5nIiwgc29hcEJpbmRpbmdWaXNpdGVkKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHNvYXBPcGVyYXRpb24+IGlzIG1pc3NpbmciLCBzb2FwT3BlcmF0aW9uVmlzaXRlZCk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nLi4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgYmluZGluZyBvcGVyYXRpb24uLi4iKTsKLSAgICB2aXNpdERvY3VtZW50YXRpb24oYmluZGluZ09wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRmFpbGVkIHRvIHJlc29sdmUgdGhlIG9wZXJhdGlvbiIsIG9wZXJhdGlvbik7Ci0KLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOwotICAgICAgcHJpbnRsbigibmFtZTogIiArIG9wZXJhdGlvbk5hbWUpOwotICAgIH0KLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIGJpbmRpbmcgb3BlcmF0aW9uLi4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBiaW5kaW5nIGlucHV0Li4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKGlucHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgU3RyaW5nIGlucHV0TmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLSAgICBpZiAoaW5wdXROYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgaW5wdXROYW1lKTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgICBwcmludGxuKCJMZWF2aW5nIGJpbmRpbmcgaW5wdXQuLi4iKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IG91dHB1dCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIGJpbmRpbmcgb3V0cHV0Li4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKG91dHB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBvdXRwdXROYW1lID0gb3V0cHV0LmdldE5hbWUoKTsKLSAgICBpZiAob3V0cHV0TmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIG91dHB1dE5hbWUpOwotCi0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3V0cHV0KG91dHB1dCk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nIG91dHB1dC4uLiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgYmluZGluZyBmYXVsdC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihmYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIEVsZW1lbnQgZmF1bHRFbGVtZW50ID0gZmF1bHQuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0gICAgaWYgKGZhdWx0TmFtZSAhPSBudWxsKQotICAgICAgZmF1bHRFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIGZhdWx0TmFtZSk7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmdGYXVsdChmYXVsdCk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nIGZhdWx0Li4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgc2VydmljZS4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihzZXJ2aWNlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgUU5hbWUgcW5hbWUgPSBzZXJ2aWNlLmdldFFOYW1lKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIlZhbGlkYXRpb24gRXJyb3I6IHNlcnZpY2UgaXMgbWlzc2luZyB0aGUgbmFtZSBhdHRyaWJ1dGUiLCBxbmFtZSk7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgc3VwZXIudmlzaXRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIHByaW50bG4oIkxlYXZpbmcgc2VydmljZS4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRQb3J0KG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgcG9ydC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgU3RyaW5nIG5hbWUgPSBwb3J0LmdldE5hbWUoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiVmFsaWRhdGlvbiBFcnJvcjogcG9ydCBpcyBtaXNzaW5nIHRoZSBuYW1lIGF0dHJpYnV0ZSIsIHBvcnQpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgcG9ydC5nZXROYW1lKCkpOwotCi0gICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRFQmluZGluZygpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJGYWlsZWQgdG8gcmVzb2x2ZSB0aGUgYmluZGluZyIsIGJpbmRpbmcpOwotCi0gICAgc3VwZXIudmlzaXRQb3J0KHBvcnQpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKCI8c29hcEFkZHJlc3M+IGlzIG1pc3NpbmciLCBzb2FwQWRkcmVzc1Zpc2l0ZWQpOwotICAgIHByaW50bG4oIkxlYXZpbmcgcG9ydC4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCwgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2libGVFbGVtZW50IG93bmVyLCBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIGV4dGVuc2liaWxpdHkgZWxlbWVudC4uLiIpOwotICAgIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgdmlzaXRTT0FQQm9keSgoU09BUEJvZHkpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICB2aXNpdFNPQVBCaW5kaW5nKChTT0FQQmluZGluZylleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgIHZpc2l0U09BUEFkZHJlc3MoKFNPQVBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICB2aXNpdFNPQVBPcGVyYXRpb24oKFNPQVBPcGVyYXRpb24pZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIHByaW50bG4oIkxlYXZpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50Li4uIik7Ci0gIH0KLQotICAvL05lZWRzIHRvIGltcHJvdmUgdGhpcyBwYXJ0Ci0gIHByaXZhdGUgYm9vbGVhbiBzb2FwT3BlcmF0aW9uVmlzaXRlZCA9IGZhbHNlOwotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uKQotICB7Ci0gICAgc29hcE9wZXJhdGlvblZpc2l0ZWQgPSB0cnVlOwotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBPcGVyYXRpb24uLi4iKTsKLSAgICBwcmludGxuKCJzb2FwQWN0aW9uOiAiICsgc29hcE9wZXJhdGlvbi5nZXRTb2FwQWN0aW9uVVJJKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUE9wZXJhdGlvbi4uLiIpOwotICB9Ci0KLSAgLy9OZWVkcyB0byBpbXByb3ZlIHRoaXMgcGFydAotICBwcml2YXRlIGJvb2xlYW4gc29hcEJvZHlWaXNpdGVkID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEJvZHkoU09BUEJvZHkgc29hcEJvZHkpCi0gIHsKLSAgICBzb2FwQm9keVZpc2l0ZWQgPSB0cnVlOwotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBCb2R5Li4uIik7Ci0gICAgcHJpbnRsbigidXNlOiAiICsgc29hcEJvZHkuZ2V0VXNlKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEJvZHkuLi4iKTsKLSAgfQotCi0gIC8vTmVlZHMgdG8gaW1wcm92ZSB0aGlzIHBhcnQKLSAgcHJpdmF0ZSBib29sZWFuIHNvYXBCaW5kaW5nVmlzaXRlZCA9IGZhbHNlOwotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCaW5kaW5nKFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nKQotICB7Ci0gICAgc29hcEJpbmRpbmdWaXNpdGVkID0gdHJ1ZTsKLSAgICBwcmludGxuKCJWaXNpdGluZyBTT0FQQmluZGluZy4uLiIpOwotICAgIHByaW50bG4oInN0eWxlOiAiICsgc29hcEJpbmRpbmcuZ2V0U3R5bGUoKSk7Ci0gICAgcHJpbnRsbigidHJhbnNwb3J0OiAiICsgc29hcEJpbmRpbmcuZ2V0VHJhbnNwb3J0VVJJKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEJpbmRpbmcuLi4iKTsKLSAgfQotCi0gIC8vIE5lZWRzIHRvIGltcHJvdmUgdGhpcyBwYXJ0Ci0gIHByaXZhdGUgYm9vbGVhbiBzb2FwQWRkcmVzc1Zpc2l0ZWQgPSBmYWxzZTsKLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcykKLSAgewotICAgIHNvYXBBZGRyZXNzVmlzaXRlZCA9IHRydWU7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgU09BUEFkZHJlc3MuLi4iKTsKLSAgICBwcmludGxuKCJsb2NhdGlvbjogIiArIHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEFkZHJlc3MuLi4iKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBTZW1hbnRpY1Rlc3QoIk1vZGVsU2VtYW50aWNUZXN0IikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0TW9kZWxTZW1hbnRpYygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TW9kZWxTZW1hbnRpYygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvTG9hZEFuZFByaW50VGVzdC53c2RsIiwgdHJ1ZSk7Ci0gICAgICBTZW1hbnRpY1Rlc3QgdGVzdCA9IG5ldyBTZW1hbnRpY1Rlc3QoZGVmKTsKLSAgICAgIHRlc3QudmlzaXQoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1V0aWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvVXRpbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3ODQ1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvVXRpbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBVdGlsVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwdWJsaWMgVXRpbFRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgVXRpbFRlc3QoIldTRExDb25zdGFudHMiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RDb25zdGFudHMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBVdGlsVGVzdCgiV1NETFJlc291cmNlRmFjdG9yeUltcGwiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFV0aWxUZXN0KCJXU0RMUmVzb3VyY2VJbXBsIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0V1NETFJlc291cmNlSW1wbCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBVdGlsVGVzdCgiRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHN1aXRlLmFkZFRlc3QobmV3IFV0aWxUZXN0KCJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgc3RhdGljIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RhbnRzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGludCB0eXBlID0gV1NETENvbnN0YW50cy5ub2RlVHlwZShXU0RMQ29uc3RhbnRzLlBPUlRfRUxFTUVOVF9UQUcpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIk5vZGUgdHlwZSBpcyBub3QgdGhhdCBvZiBwb3J0IiwgdHlwZSA9PSAxMCk7Ci0KLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZGVmaW5pdGlvbi5lUmVzb3VyY2UoKSBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpOwotCi0gICAgICBpbnQgZGVmaW5pdGlvbk5vZGVUeXBlID0gV1NETENvbnN0YW50cy5ub2RlVHlwZShkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiTm9kZSB0eXBlIGlzIG5vdCB0aGF0IG9mIGRlZmluaXRpb24iLCBkZWZpbml0aW9uTm9kZVR5cGUgPT0gMSk7Ci0KLSAgICAgIGJvb2xlYW4gaXNXU0RMTmFtZXNwYWNlID0gV1NETENvbnN0YW50cy5pc1dTRExOYW1lc3BhY2UoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UoIlRoaXMgc2hvdWxkIG5vdCBiZSB0aGUgV1NETCBOYW1lc3BhY2UiLCBpc1dTRExOYW1lc3BhY2UpOwotCi0gICAgICBib29sZWFuIGlzTWF0Y2hpbmcgPSBXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmciLCAiaHR0cDovL3d3dy5leGFtcGxlLm9yZyIpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoImlzTWF0Y2hpbmdOYW1lc3BhY2UgaXMgaW5jb3JyZWN0IiwgaXNNYXRjaGluZyk7Ci0KLSAgICAgIFN0cmluZyBhdHRyID0gV1NETENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCksICJuYW1lIik7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiZ2V0QXR0cmlidXRlIGlzIGluY29ycmVjdCIsIGF0dHIuZXF1YWxzKCJMb2FkQW5kUHJpbnRUZXN0IikpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsIGZhY3RvcnlJbXBsID0gbmV3IFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCk7Ci0gICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IGZhY3RvcnlJbXBsLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVGaWxlVVJJKCIuL3NhbXBsZXMvY3JlYXRlUmVzb3VyY2VUZXN0LndzZGwiKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiUmVzb3VyY2UgaXMgbm90IG9mIHR5cGUgV1NETFJlc291cmNlSW1wbCIsIHJlc291cmNlIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0V1NETFJlc291cmNlSW1wbCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0RMUmVzb3VyY2VJbXBsIHJlc291cmNlSW1wbCA9IG5ldyBXU0RMUmVzb3VyY2VJbXBsKFVSSS5jcmVhdGVGaWxlVVJJKCIuL3NhbXBsZXMvY3JlYXRlUmVzb3VyY2VUZXN0LndzZGwiKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiUmVzb3VyY2UgaXMgbm90IG9mIHR5cGUgV1NETFJlc291cmNlSW1wbCIsIHJlc291cmNlSW1wbCBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpOwotCi0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlZmluaXRpb24uZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkZWZpbml0aW9uLmdldERvY3VtZW50KCk7Ci0KLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFdTRExSZXNvdXJjZUltcGwuc2VyaWFsaXplKFN5c3RlbS5vdXQsIGVsZW1lbnQsIG51bGwpOwotICAgICAgfQotCi0gICAgICBpZiAoZG9jdW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgV1NETFJlc291cmNlSW1wbC5zZXJpYWxpemUoU3lzdGVtLm91dCwgZG9jdW1lbnQsIG51bGwpOwotICAgICAgfQotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcmVzb3VyY2VJbXBsLmF0dGFjaGVkKGRlZmluaXRpb24pOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotCi0gICAgICB9Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSk7Ci0gICAgICBpZiAoZmFjdG9yeSAhPSBudWxsKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IGZhY3RvcnkuY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIFNPQVBDb25zdGFudHMuSEVBREVSX0VMRU1FTlRfVEFHKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlByb2JsZW0gY3JlYXRpbmcgU09BUCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZSBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgVGVzdEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgewotICAgIFN0cmluZyBucywgbmFtZTsKLQotICAgIHB1YmxpYyBUZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoU3RyaW5nIG5zLCBTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICBzdXBlcigpOwotICAgICAgdGhpcy5ucyA9IG5zOwotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShucywgbmFtZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgV1NETFRlc3RGYWN0b3J5IGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci0gIHsKLSAgICBwdWJsaWMgV1NETFRlc3RGYWN0b3J5KCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBUZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQobmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSBmYWN0b3J5UmVnaXN0cnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCk7Ci0gICAgICBmYWN0b3J5UmVnaXN0cnkucmVnaXN0ZXJGYWN0b3J5KCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiLCBuZXcgV1NETFRlc3RGYWN0b3J5KCkpOwotCi0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IFdTRExQbHVnaW4uSU5TVEFOQ0UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiKTsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gZmFjdG9yeS5jcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIiwgIlRlc3RFbGVtZW50Iik7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiMS4gUHJvYmxlbSBjcmVhdGluZyBjdXN0b20gVGVzdCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZSBpbnN0YW5jZW9mIFRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiMi4gUHJvYmxlbSBjcmVhdGluZyBjdXN0b20gVGVzdCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpLmVxdWFscygiVGVzdEVsZW1lbnQiKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiMy4gUHJvYmxlbSBjcmVhdGluZyBjdXN0b20gVGVzdCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZS5nZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygKLSAgICAgICAgImh0dHA6Ly9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cyIpKTsKLQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMNEpBUElUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETDRKQVBJVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWRhYzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMNEpBUElUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuV1NETDRKRGVmaW5pdGlvblZpc2l0b3I7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgV1NETDRKQVBJVGVzdCBleHRlbmRzIFdTREw0SkRlZmluaXRpb25WaXNpdG9yCi17Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBsdWdpbi5JTlNUQU5DRS5jcmVhdGVXU0RMNEpGYWN0b3J5KCk7Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIG5ld0RlZmluaXRpb247Ci0KLSAgcHJpdmF0ZSBNZXNzYWdlIGN1cnJlbnRNZXNzYWdlOwotCi0gIHByaXZhdGUgU2VydmljZSBjdXJyZW50U2VydmljZTsKLQotICBwcml2YXRlIFBvcnRUeXBlIGN1cnJlbnRQb3J0VHlwZTsKLQotICBwcml2YXRlIE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uOwotCi0gIHByaXZhdGUgQmluZGluZyBjdXJyZW50QmluZGluZzsKLQotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gY3VycmVudEJpbmRpbmdPcGVyYXRpb247Ci0KLSAgLy8gQWRkZWQgZm9yIEpVbml0Ci0gIHB1YmxpYyBXU0RMNEpBUElUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMNEpBUElUZXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHN1cGVyKGRlZmluaXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHByaW50bG4oU3RyaW5nIHMpCi0gIHsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBuZXdEZWZpbml0aW9uID0gZmFjdG9yeS5uZXdEZWZpbml0aW9uKCk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudChkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXRRTmFtZShkZWYuZ2V0UU5hbWUoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICBuZXdEZWZpbml0aW9uLnNldERvY3VtZW50QmFzZVVSSShkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWYuZ2V0TmFtZXNwYWNlcygpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgU3RyaW5nIHByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHByZWZpeCA9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgbmFtZXNwYWNlID0gZGVmLmdldE5hbWVzcGFjZShwcmVmaXgpOwotICAgICAgbmV3RGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCBuYW1lc3BhY2UpOwotICAgIH0KLQotICAgIHN1cGVyLnZpc2l0RGVmaW5pdGlvbihkZWYpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpCi0gIHsKLSAgICBJbXBvcnQgbXlJbXBvcnQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUltcG9ydCgpOwotICAgIG5ld0RlZmluaXRpb24uYWRkSW1wb3J0KG15SW1wb3J0KTsKLQotICAgIC8vIGUuZy4gPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9mb28uY29tIiBzY2hlbWFMb2NhdGlvbj0gImJhci54c2QiLz4KLSAgICBteUltcG9ydC5zZXROYW1lc3BhY2VVUkkod3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgbXlJbXBvcnQuc2V0TG9jYXRpb25VUkkod3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICBteUltcG9ydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh3c2RsSW1wb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgbXlJbXBvcnQuc2V0RGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpCi0gIHsKLSAgICBUeXBlcyBteVR5cGVzID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVUeXBlcygpOwotICAgIG15VHlwZXMuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodHlwZXMuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICAvKgotICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdEVsZW1lbnQgPSBudWxsOwotICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICB7Ci0gICAgIGV4dGVuc2liaWxpdEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICBteVR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdEVsZW1lbnQpOwotICAgICB9Ki8KLSAgICBuZXdEZWZpbml0aW9uLnNldFR5cGVzKG15VHlwZXMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIFBhcnQgbXlQYXJ0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVQYXJ0KCk7Ci0gICAgbXlQYXJ0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHBhcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlQYXJ0LnNldE5hbWUocGFydC5nZXROYW1lKCkpOwotICAgIG15UGFydC5zZXRFbGVtZW50TmFtZShwYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgIG15UGFydC5zZXRUeXBlTmFtZShwYXJ0LmdldFR5cGVOYW1lKCkpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwYXJ0LmdldEV4dGVuc2lvbkF0dHJpYnV0ZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFFOYW1lIGtleSA9IG51bGw7Ci0gICAgUU5hbWUgdmFsdWUgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAga2V5ID0gKFFOYW1lKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZhbHVlID0gKFFOYW1lKXBhcnQuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlKGtleSk7Ci0gICAgICBteVBhcnQuc2V0RXh0ZW5zaW9uQXR0cmlidXRlKGtleSwgdmFsdWUpOwotICAgIH0KLSAgICBjdXJyZW50TWVzc2FnZS5hZGRQYXJ0KG15UGFydCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgY3VycmVudE1lc3NhZ2UgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBzdXBlci52aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgY3VycmVudFBvcnRUeXBlID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVQb3J0VHlwZSgpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5zZXREb2N1bWVudGF0aW9uRWxlbWVudChwb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0UU5hbWUocG9ydFR5cGUuZ2V0UU5hbWUoKSk7Ci0gICAgY3VycmVudFBvcnRUeXBlLnNldFVuZGVmaW5lZChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKTsKLSAgICBuZXdEZWZpbml0aW9uLmFkZFBvcnRUeXBlKGN1cnJlbnRQb3J0VHlwZSk7Ci0KLSAgICBzdXBlci52aXNpdFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBjdXJyZW50T3BlcmF0aW9uID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldERvY3VtZW50YXRpb25FbGVtZW50KG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldE5hbWUob3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRTdHlsZShvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRVbmRlZmluZWQob3BlcmF0aW9uLmlzVW5kZWZpbmVkKCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0UGFyYW1ldGVyT3JkZXJpbmcob3BlcmF0aW9uLmdldFBhcmFtZXRlck9yZGVyaW5nKCkpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5hZGRPcGVyYXRpb24oY3VycmVudE9wZXJhdGlvbik7Ci0KLSAgICBzdXBlci52aXNpdE9wZXJhdGlvbihvcGVyYXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIElucHV0IG15SW5wdXQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUlucHV0KCk7Ci0gICAgbXlJbnB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUlucHV0LnNldE5hbWUoaW5wdXQuZ2V0TmFtZSgpKTsKLSAgICBteUlucHV0LnNldE1lc3NhZ2UoaW5wdXQuZ2V0TWVzc2FnZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldElucHV0KG15SW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIE91dHB1dCBteU91dHB1dCA9IG5ld0RlZmluaXRpb24uY3JlYXRlT3V0cHV0KCk7Ci0gICAgbXlPdXRwdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15T3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgbXlPdXRwdXQuc2V0TWVzc2FnZShvdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldE91dHB1dChteU91dHB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEZhdWx0KEZhdWx0IGZhdWx0KQotICB7Ci0gICAgRmF1bHQgbXlGYXVsdCA9IG5ld0RlZmluaXRpb24uY3JlYXRlRmF1bHQoKTsKLSAgICBteUZhdWx0LnNldERvY3VtZW50YXRpb25FbGVtZW50KGZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15RmF1bHQuc2V0TmFtZShmYXVsdC5nZXROYW1lKCkpOwotICAgIG15RmF1bHQuc2V0TWVzc2FnZShmYXVsdC5nZXRNZXNzYWdlKCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uYWRkRmF1bHQobXlGYXVsdCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgY3VycmVudEJpbmRpbmcgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICBuZXdEZWZpbml0aW9uLmFkZEJpbmRpbmcoY3VycmVudEJpbmRpbmcpOwotCi0gICAgY3VycmVudEJpbmRpbmcuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoYmluZGluZy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRRTmFtZShiaW5kaW5nLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nLnNldFBvcnRUeXBlKGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0VW5kZWZpbmVkKGJpbmRpbmcuaXNVbmRlZmluZWQoKSk7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmcoYmluZGluZyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24gPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudChiaW5kaW5nT3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldE9wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXROYW1lKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICBjdXJyZW50QmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uKTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBpbnB1dCkKLSAgewotICAgIEJpbmRpbmdJbnB1dCBteUlucHV0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVCaW5kaW5nSW5wdXQoKTsKLSAgICBteUlucHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KGlucHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15SW5wdXQuc2V0TmFtZShpbnB1dC5nZXROYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChteUlucHV0KTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IG91dHB1dCkKLSAgewotICAgIEJpbmRpbmdPdXRwdXQgbXlPdXRwdXQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmdPdXRwdXQoKTsKLSAgICBteU91dHB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChvdXRwdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlPdXRwdXQuc2V0TmFtZShvdXRwdXQuZ2V0TmFtZSgpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nT3V0cHV0KG15T3V0cHV0KTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ091dHB1dChvdXRwdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgQmluZGluZ0ZhdWx0IG15RmF1bHQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgIG15RmF1bHQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZmF1bHQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlGYXVsdC5zZXROYW1lKGZhdWx0LmdldE5hbWUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uYWRkQmluZGluZ0ZhdWx0KG15RmF1bHQpOwotCi0gICAgc3VwZXIudmlzaXRCaW5kaW5nRmF1bHQoZmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGN1cnJlbnRTZXJ2aWNlID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgY3VycmVudFNlcnZpY2Uuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50U2VydmljZS5zZXRRTmFtZShzZXJ2aWNlLmdldFFOYW1lKCkpOwotICAgIG5ld0RlZmluaXRpb24uYWRkU2VydmljZShjdXJyZW50U2VydmljZSk7Ci0KLSAgICBzdXBlci52aXNpdFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgUG9ydCBteVBvcnQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZVBvcnQoKTsKLSAgICBteVBvcnQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQocG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteVBvcnQuc2V0TmFtZShwb3J0LmdldE5hbWUoKSk7Ci0gICAgbXlQb3J0LnNldEJpbmRpbmcocG9ydC5nZXRCaW5kaW5nKCkpOwotICAgIGN1cnJlbnRTZXJ2aWNlLmFkZFBvcnQobXlQb3J0KTsKLQotICAgIHN1cGVyLnZpc2l0UG9ydChwb3J0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgIHZpc2l0U09BUEJvZHkoKFNPQVBCb2R5KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgdmlzaXRTT0FQQmluZGluZygoU09BUEJpbmRpbmcpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICB2aXNpdFNPQVBBZGRyZXNzKChTT0FQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgdmlzaXRTT0FQT3BlcmF0aW9uKChTT0FQT3BlcmF0aW9uKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgU09BUE9wZXJhdGlvbi4uLiIpOwotICAgIHByaW50bG4oInNvYXBBY3Rpb246ICIgKyBzb2FwT3BlcmF0aW9uLmdldFNvYXBBY3Rpb25VUkkoKSk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBTT0FQT3BlcmF0aW9uLi4uIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQm9keShTT0FQQm9keSBzb2FwQm9keSkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBCb2R5Li4uIik7Ci0gICAgcHJpbnRsbigidXNlOiAiICsgc29hcEJvZHkuZ2V0VXNlKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEJvZHkuLi4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCaW5kaW5nKFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgU09BUEJpbmRpbmcuLi4iKTsKLSAgICBwcmludGxuKCJzdHlsZTogIiArIHNvYXBCaW5kaW5nLmdldFN0eWxlKCkpOwotICAgIHByaW50bG4oInRyYW5zcG9ydDogIiArIHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBCaW5kaW5nLi4uIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcykKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBBZGRyZXNzLi4uIik7Ci0gICAgcHJpbnRsbigibG9jYXRpb246ICIgKyBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBBZGRyZXNzLi4uIik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgV1NETDRKQVBJVGVzdCgiTW9kZWxTZW1hbnRpY1Rlc3QiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RNb2RlbFNlbWFudGljKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNb2RlbFNlbWFudGljKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmID0gbG9hZERlZmluaXRpb25Gb3JXU0RMNEooIi4vc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgICAgV1NETDRKQVBJVGVzdCB0ZXN0ID0gbmV3IFdTREw0SkFQSVRlc3QoZGVmKTsKLSAgICAgIHRlc3QudmlzaXQoKTsKLSAgICAgIHNlcmlhbGl6ZSh0ZXN0Lm5ld0RlZmluaXRpb24sICIuL3NhbXBsZXMvQ2xvbmVkTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgQXNzZXJ0LmZhaWwoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGNsb25lZEZpbGUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vIFdTRExXcml0ZXIgd3JpdGVyID0gZmFjdG9yeS5uZXdXU0RMV3JpdGVyKCk7Ci0gICAgLy8gU3RyaW5nIHMgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIGNsb25lZEZpbGU7Ci0gICAgLy8gd3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBuZXcgRmlsZU91dHB1dFN0cmVhbShzKSk7Ci0gIH0KLQotICBwcml2YXRlIERlZmluaXRpb24gbG9hZERlZmluaXRpb25Gb3JXU0RMNEooU3RyaW5nIHdzZGxGaWxlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBXU0RMUmVhZGVyIHJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgIFN0cmluZyBzID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyB3c2RsRmlsZTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSByZWFkZXIucmVhZFdTREwocywgbmV3IElucHV0U291cmNlKG5ldyBGaWxlSW5wdXRTdHJlYW0ocykpKTsKLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMRU1GQVBJVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExFTUZBUElUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YWM1YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExFTUZBUElUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMUmVzb3VyY2VGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgV1NETEVNRkFQSVRlc3QgZXh0ZW5kcyBEZWZpbml0aW9uVmlzaXRvcgotewotICBwcml2YXRlIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFOwotCi0gIERlZmluaXRpb24gbmV3RGVmaW5pdGlvbjsKLQotICBwcml2YXRlIE1lc3NhZ2UgY3VycmVudE1lc3NhZ2U7Ci0KLSAgcHJpdmF0ZSBTZXJ2aWNlIGN1cnJlbnRTZXJ2aWNlOwotCi0gIHByaXZhdGUgUG9ydFR5cGUgY3VycmVudFBvcnRUeXBlOwotCi0gIHByaXZhdGUgT3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb247Ci0KLSAgcHJpdmF0ZSBCaW5kaW5nIGN1cnJlbnRCaW5kaW5nOwotCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBjdXJyZW50QmluZGluZ09wZXJhdGlvbjsKLQotICBwcml2YXRlIEV4dGVuc2libGVFbGVtZW50IGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudDsKLQotICAvLyBBZGRlZCBmb3IgSlVuaXQKLSAgcHVibGljIFdTRExFTUZBUElUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMRU1GQVBJVGVzdChEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBzdXBlcihkZWZpbml0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZikKLSAgewotICAgIC8vIFVzZSBXU0RMRWxlbWVudCB0byBpbmNyZWFzZSB0aGUgQVBJIGNvdmVyYWdlIGluIHRoZSByZXBvcnRzCi0gICAgV1NETEVsZW1lbnQgcm9vdCA9IGZhY3RvcnkuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIG5ld0RlZmluaXRpb24gPSAoRGVmaW5pdGlvbilyb290OwotCi0gICAgcm9vdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgcm9vdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgIHJvb3Quc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgICByb290LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICByb290LmdldENvbnRhaW5lcigpOwotCi0gICAgbmV3RGVmaW5pdGlvbi5zZXRRTmFtZShkZWYuZ2V0UU5hbWUoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICBuZXdEZWZpbml0aW9uLnNldERvY3VtZW50QmFzZVVSSShkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgIG5ld0RlZmluaXRpb24uc2V0TG9jYXRpb24oZGVmLmdldExvY2F0aW9uKCkpOwotICAgIG5ld0RlZmluaXRpb24uc2V0RW5jb2RpbmcoZGVmLmdldEVuY29kaW5nKCkpOwotCi0gICAgLy8gZ2V0RU5hbWVzcGFjZXMgZG9lcyBub3Qgd29yay4KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGRlZi5nZXRFTmFtZXNwYWNlcygpLml0ZXJhdG9yKCk7Ci0gICAgTmFtZXNwYWNlIG5zID0gbnVsbDsKLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsKLSAgICBTdHJpbmcgdXJpID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIG5zID0gZmFjdG9yeS5jcmVhdGVOYW1lc3BhY2UoKTsKLSAgICAgIHByZWZpeCA9ICgoTmFtZXNwYWNlKWl0ZXJhdG9yLm5leHQoKSkuZ2V0UHJlZml4KCk7Ci0gICAgICB1cmkgPSAoKE5hbWVzcGFjZSlpdGVyYXRvci5uZXh0KCkpLmdldFVSSSgpOwotICAgICAgbnMuc2V0VVJJKHVyaSk7Ci0gICAgICBucy5zZXRQcmVmaXgocHJlZml4KTsKLSAgICAgIG5ld0RlZmluaXRpb24uZ2V0RU5hbWVzcGFjZXMoKS5hZGQobnMpOwotICAgIH0KLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIHByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHByZWZpeCA9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgbmFtZXNwYWNlID0gZGVmLmdldE5hbWVzcGFjZShwcmVmaXgpOwotICAgICAgbmV3RGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCBuYW1lc3BhY2UpOwotICAgIH0KLSAgICAvL25ld0RlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gZGVmOwotICAgIHN1cGVyLnZpc2l0RGVmaW5pdGlvbihkZWYpOwotCi0gICAgcm9vdC5zZXRFbGVtZW50KG51bGwpOwotICAgIHJvb3QudXBkYXRlRWxlbWVudCh0cnVlKTsKLSAgICByb290LmdldEVsZW1lbnQoKTsKLSAgICByb290LnNldEVsZW1lbnQobnVsbCk7Ci0gICAgcm9vdC51cGRhdGVFbGVtZW50KCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEltcG9ydChJbXBvcnQgd3NkbEltcG9ydCkKLSAgewotICAgIEltcG9ydCBteUltcG9ydCA9IGZhY3RvcnkuY3JlYXRlSW1wb3J0KCk7Ci0gICAgbmV3RGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLmFkZChteUltcG9ydCk7Ci0KLSAgICAvLyBlLmcuIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vZm9vLmNvbSIgc2NoZW1hTG9jYXRpb249ICJiYXIueHNkIi8+Ci0gICAgbXlJbXBvcnQuc2V0TmFtZXNwYWNlVVJJKHdzZGxJbXBvcnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIG15SW1wb3J0LnNldExvY2F0aW9uVVJJKHdzZGxJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgbXlJbXBvcnQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQod3NkbEltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUltcG9ydC5zZXRFRGVmaW5pdGlvbih3c2RsSW1wb3J0LmdldEVEZWZpbml0aW9uKCkpOwotICAgIG15SW1wb3J0LnNldEVTY2hlbWEod3NkbEltcG9ydC5nZXRFU2NoZW1hKCkpOwotICAgIG15SW1wb3J0LnNldFNjaGVtYSh3c2RsSW1wb3J0LmdldFNjaGVtYSgpKTsKLSAgICBteUltcG9ydC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG5ld0RlZmluaXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRUeXBlcyhUeXBlcyB0eXBlcykKLSAgewotICAgIFR5cGVzIG15VHlwZXMgPSBmYWN0b3J5LmNyZWF0ZVR5cGVzKCk7Ci0gICAgbXlUeXBlcy5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0eXBlcy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSBudWxsOwotICAgIHR5cGVzLmdldFNjaGVtYXMoImh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0LyIpOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gbXlUeXBlczsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoZWUpOwotICAgIH0KLQotICAgIG15VHlwZXMuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgICBuZXdEZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgIG5ld0RlZmluaXRpb24uc2V0RVR5cGVzKG15VHlwZXMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIFBhcnQgbXlQYXJ0ID0gZmFjdG9yeS5jcmVhdGVQYXJ0KCk7Ci0gICAgbXlQYXJ0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHBhcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlQYXJ0LnNldE5hbWUocGFydC5nZXROYW1lKCkpOwotICAgIG15UGFydC5zZXRFbGVtZW50TmFtZShwYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgIG15UGFydC5zZXRUeXBlTmFtZShwYXJ0LmdldFR5cGVOYW1lKCkpOwotICAgIG15UGFydC5zZXRFTWVzc2FnZShwYXJ0LmdldEVNZXNzYWdlKCkpOwotICAgIG15UGFydC5zZXRFbGVtZW50RGVjbGFyYXRpb24ocGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSk7Ci0gICAgbXlQYXJ0LnNldFR5cGVEZWZpbml0aW9uKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBhcnQuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlcygpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgUU5hbWUga2V5ID0gbnVsbDsKLSAgICBRTmFtZSB2YWx1ZSA9IG51bGw7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBrZXkgPSAoUU5hbWUpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmFsdWUgPSAoUU5hbWUpcGFydC5nZXRFeHRlbnNpb25BdHRyaWJ1dGUoa2V5KTsKLSAgICAgIG15UGFydC5zZXRFeHRlbnNpb25BdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7Ci0gICAgfQotICAgIGN1cnJlbnRNZXNzYWdlLnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE1lc3NhZ2UuYWRkUGFydChteVBhcnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIGN1cnJlbnRQb3J0VHlwZSA9IGZhY3RvcnkuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQocG9ydFR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudFBvcnRUeXBlLnNldFFOYW1lKHBvcnRUeXBlLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5zZXRVbmRlZmluZWQocG9ydFR5cGUuaXNVbmRlZmluZWQoKSk7Ci0KLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgICBuZXdEZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKS5hZGQoY3VycmVudFBvcnRUeXBlKTsKLQotICAgIHN1cGVyLnZpc2l0UG9ydFR5cGUocG9ydFR5cGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIGN1cnJlbnRPcGVyYXRpb24gPSBmYWN0b3J5LmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0TmFtZShvcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldFN0eWxlKG9wZXJhdGlvbi5nZXRTdHlsZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldFVuZGVmaW5lZChvcGVyYXRpb24uaXNVbmRlZmluZWQoKSk7Ci0gICAgb3BlcmF0aW9uLmdldEVQYXJhbWV0ZXJPcmRlcmluZygpOyAvLyBUQkQKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudFBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuYWRkKGN1cnJlbnRPcGVyYXRpb24pOwotCi0gICAgc3VwZXIudmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiT3BlcmF0aW9uIFR5cGUgaXM6ICIgKyBvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gICAgLy9vcGVyYXRpb24uc2V0U3R5bGUoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiT3BlcmF0aW9uIFR5cGUgaXM6ICIgKyBvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgY3VycmVudE1lc3NhZ2UgPSBmYWN0b3J5LmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBjdXJyZW50TWVzc2FnZS5zZXRRTmFtZShtZXNzYWdlLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRNZXNzYWdlLnNldFVuZGVmaW5lZChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpOwotICAgIG5ld0RlZmluaXRpb24uYWRkTWVzc2FnZShjdXJyZW50TWVzc2FnZSk7Ci0KLSAgICBzdXBlci52aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgTWVzc2FnZVJlZmVyZW5jZSBteUlucHV0ID0gZmFjdG9yeS5jcmVhdGVJbnB1dCgpOwotICAgIG15SW5wdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlJbnB1dC5zZXROYW1lKGlucHV0LmdldE5hbWUoKSk7Ci0gICAgbXlJbnB1dC5nZXROYW1lKCk7Ci0gICAgbXlJbnB1dC5zZXRFTWVzc2FnZShpbnB1dC5nZXRFTWVzc2FnZSgpKTsKLSAgICBteUlucHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRFSW5wdXQoKElucHV0KW15SW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIE91dHB1dCBteU91dHB1dCA9IGZhY3RvcnkuY3JlYXRlT3V0cHV0KCk7Ci0gICAgbXlPdXRwdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15T3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgbXlPdXRwdXQuc2V0RU1lc3NhZ2Uob3V0cHV0LmdldEVNZXNzYWdlKCkpOwotICAgIG15T3V0cHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRFT3V0cHV0KG15T3V0cHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBGYXVsdCBteUZhdWx0ID0gZmFjdG9yeS5jcmVhdGVGYXVsdCgpOwotICAgIG15RmF1bHQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZmF1bHQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlGYXVsdC5zZXROYW1lKGZhdWx0LmdldE5hbWUoKSk7Ci0gICAgbXlGYXVsdC5zZXRFTWVzc2FnZShmYXVsdC5nZXRFTWVzc2FnZSgpKTsKLSAgICBteUZhdWx0LnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuYWRkKG15RmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgbmV3RGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKS5hZGQoY3VycmVudEJpbmRpbmcpOwotCi0gICAgY3VycmVudEJpbmRpbmcuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoYmluZGluZy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRRTmFtZShiaW5kaW5nLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nLnNldEVQb3J0VHlwZShiaW5kaW5nLmdldEVQb3J0VHlwZSgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRVbmRlZmluZWQoYmluZGluZy5pc1VuZGVmaW5lZCgpKTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IGN1cnJlbnRCaW5kaW5nOwotICAgIHN1cGVyLnZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbiA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldERvY3VtZW50YXRpb25FbGVtZW50KGJpbmRpbmdPcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0RU9wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5hZGQoY3VycmVudEJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gY3VycmVudEJpbmRpbmdPcGVyYXRpb247Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGlucHV0KQotICB7Ci0gICAgQmluZGluZ0lucHV0IG15SW5wdXQgPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIG15SW5wdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlJbnB1dC5zZXROYW1lKGlucHV0LmdldE5hbWUoKSk7Ci0gICAgbXlJbnB1dC5zZXRJbnB1dChpbnB1dC5nZXRJbnB1dCgpKTsKLSAgICBteUlucHV0LnNldEVJbnB1dChpbnB1dC5nZXRFSW5wdXQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0RUJpbmRpbmdJbnB1dChteUlucHV0KTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IG15SW5wdXQ7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nSW5wdXQoaW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgQmluZGluZ091dHB1dCBteU91dHB1dCA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ091dHB1dCgpOwotICAgIG15T3V0cHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KG91dHB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteU91dHB1dC5zZXROYW1lKG91dHB1dC5nZXROYW1lKCkpOwotICAgIG15T3V0cHV0LnNldE91dHB1dChvdXRwdXQuZ2V0T3V0cHV0KCkpOwotICAgIG15T3V0cHV0LnNldEVPdXRwdXQob3V0cHV0LmdldEVPdXRwdXQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0RUJpbmRpbmdPdXRwdXQobXlPdXRwdXQpOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gbXlPdXRwdXQ7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3V0cHV0KG91dHB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdGYXVsdChCaW5kaW5nRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBCaW5kaW5nRmF1bHQgbXlGYXVsdCA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ0ZhdWx0KCk7Ci0gICAgbXlGYXVsdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChmYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUZhdWx0LnNldE5hbWUoZmF1bHQuZ2V0TmFtZSgpKTsKLSAgICBteUZhdWx0LnNldEVGYXVsdChmYXVsdC5nZXRFRmF1bHQoKSk7Ci0gICAgbXlGYXVsdC5zZXRGYXVsdChmYXVsdC5nZXRGYXVsdCgpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLmFkZChteUZhdWx0KTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IG15RmF1bHQ7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nRmF1bHQoZmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGN1cnJlbnRTZXJ2aWNlID0gZmFjdG9yeS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgY3VycmVudFNlcnZpY2Uuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50U2VydmljZS5zZXRRTmFtZShzZXJ2aWNlLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRTZXJ2aWNlLnNldFVuZGVmaW5lZChzZXJ2aWNlLmlzVW5kZWZpbmVkKCkpOwotCi0gICAgbmV3RGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKS5hZGQoY3VycmVudFNlcnZpY2UpOwotCi0gICAgc3VwZXIudmlzaXRTZXJ2aWNlKHNlcnZpY2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIFBvcnQgbXlQb3J0ID0gZmFjdG9yeS5jcmVhdGVQb3J0KCk7Ci0gICAgbXlQb3J0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlQb3J0LnNldE5hbWUocG9ydC5nZXROYW1lKCkpOwotICAgIG15UG9ydC5zZXRFQmluZGluZyhwb3J0LmdldEVCaW5kaW5nKCkpOwotCi0gICAgY3VycmVudFNlcnZpY2UuZ2V0RVBvcnRzKCkuYWRkKG15UG9ydCk7Ci0KLSAgICBjdXJyZW50RXh0ZW5zaWJsZUVsZW1lbnQgPSBteVBvcnQ7Ci0gICAgc3VwZXIudmlzaXRQb3J0KHBvcnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmxlRWxlbWVudCBvd25lciwgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gIHsKLSAgICAvLyBUbyBtb3ZlIHVwIHRoZSBBUEkgdGVzdCBjb3ZlcmFnZQotICAgIG93bmVyLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBvd25lci5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBmYWN0b3J5LmNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgV1NETFBsdWdpbi5nZXRQbHVnaW4oKTsKLSAgICBXU0RMUGx1Z2luLklOU1RBTkNFLmdldFBsdWdpblJlc291cmNlTG9jYXRvcigpOwotCi0gICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgewotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZWUgPSBudWxsOwotICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCB1ZWUgPSBudWxsOwotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG15RUUgPSBudWxsOwotICAgIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIG15RUUgPSBmYWN0b3J5LmNyZWF0ZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICB4c2VlID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KW15RUU7Ci0gICAgICB4c2VlLnNldFNjaGVtYSgoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50KS5nZXRTY2hlbWEoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBteUVFID0gZmFjdG9yeS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIHVlZSA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpbXlFRTsKLSAgICAgIHVlZS5nZXRDaGlsZHJlbigpOyAvLyBUQkQKLSAgICB9Ci0gICAgbXlFRS5zZXRFbGVtZW50VHlwZShleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50VHlwZSgpKTsKLSAgICBteUVFLnNldFJlcXVpcmVkKGV4dGVuc2liaWxpdHlFbGVtZW50LmdldFJlcXVpcmVkKCkpOwotICAgIG15RUUuc2V0UmVxdWlyZWQoZXh0ZW5zaWJpbGl0eUVsZW1lbnQuaXNSZXF1aXJlZCgpKTsKLSAgICBpZiAoY3VycmVudEV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgICBjdXJyZW50RXh0ZW5zaWJsZUVsZW1lbnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQobXlFRSk7Ci0KLSAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgIHZpc2l0U09BUEJvZHkoKFNPQVBCb2R5KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgdmlzaXRTT0FQQmluZGluZygoU09BUEJpbmRpbmcpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICB2aXNpdFNPQVBBZGRyZXNzKChTT0FQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgdmlzaXRTT0FQT3BlcmF0aW9uKChTT0FQT3BlcmF0aW9uKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBGYXVsdCkKLSAgICAgIHZpc2l0U09BUEZhdWx0KChTT0FQRmF1bHQpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEhlYWRlcikKLSAgICAgIHZpc2l0U09BUEhlYWRlcigoU09BUEhlYWRlcilleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQSGVhZGVyRmF1bHQpCi0gICAgICB2aXNpdFNPQVBIZWFkZXJGYXVsdCgoU09BUEhlYWRlckZhdWx0KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBGYXVsdChTT0FQRmF1bHQgc29hcEZhdWx0KQotICB7Ci0gICAgU09BUEZhdWx0IG15U29hcEZhdWx0ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBGYXVsdCgpOwotICAgIG15U29hcEZhdWx0LnNldEVuY29kaW5nU3R5bGVzKHNvYXBGYXVsdC5nZXRFbmNvZGluZ1N0eWxlcygpKTsKLSAgICBteVNvYXBGYXVsdC5zZXROYW1lKHNvYXBGYXVsdC5nZXROYW1lKCkpOwotICAgIG15U29hcEZhdWx0LnNldE5hbWVzcGFjZVVSSShzb2FwRmF1bHQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIG15U29hcEZhdWx0LnNldFVzZShzb2FwRmF1bHQuZ2V0VXNlKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEhlYWRlcihTT0FQSGVhZGVyIHNvYXBIZWFkZXIpCi0gIHsKLSAgICAvLyBVc2UgU09BUEhlYWRlckJhc2UgdG8gaW5jcmVhc2UgdGhlIEFQSSBjb3ZlcmFnZSB2YWx1ZXMgaW4gdGhlIHJlcG9ydHMKLQotICAgIFNPQVBIZWFkZXJCYXNlIHlvdXJTb2FwSGVhZGVyID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBIZWFkZXJCYXNlKCk7Ci0gICAgeW91clNvYXBIZWFkZXIuZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLQotICAgIFNPQVBIZWFkZXJCYXNlIG15U29hcEhlYWRlciA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQSGVhZGVyKCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldE1lc3NhZ2Uoc29hcEhlYWRlci5nZXRNZXNzYWdlKCkpOwotICAgIG15U29hcEhlYWRlci5nZXRNZXNzYWdlKCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldFBhcnQoc29hcEhlYWRlci5nZXRQYXJ0KCkpOwotICAgIG15U29hcEhlYWRlci5nZXRQYXJ0KCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldE5hbWVzcGFjZVVSSShzb2FwSGVhZGVyLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBteVNvYXBIZWFkZXIuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldFVzZShzb2FwSGVhZGVyLmdldFVzZSgpKTsKLSAgICBteVNvYXBIZWFkZXIuZ2V0VXNlKCk7Ci0gICAgKChTT0FQSGVhZGVyKXNvYXBIZWFkZXIpLmdldEhlYWRlckZhdWx0cygpOyAvLyBUQkQKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBIZWFkZXJGYXVsdChTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0KQotICB7Ci0gICAgU09BUEhlYWRlckZhdWx0IG15U29hcEhlYWRlckZhdWx0ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgIG15U29hcEhlYWRlckZhdWx0LnNldE1lc3NhZ2Uoc29hcEhlYWRlckZhdWx0LmdldE1lc3NhZ2UoKSk7Ci0gICAgbXlTb2FwSGVhZGVyRmF1bHQuc2V0UGFydChzb2FwSGVhZGVyRmF1bHQuZ2V0UGFydCgpKTsKLSAgICBteVNvYXBIZWFkZXJGYXVsdC5zZXROYW1lc3BhY2VVUkkoc29hcEhlYWRlckZhdWx0LmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBteVNvYXBIZWFkZXJGYXVsdC5zZXRVc2Uoc29hcEhlYWRlckZhdWx0LmdldFVzZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uKQotICB7Ci0gICAgU09BUE9wZXJhdGlvbiBteVNvYXBPcGVyYXRpb24gPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgIG15U29hcE9wZXJhdGlvbi5zZXRTb2FwQWN0aW9uVVJJKHNvYXBPcGVyYXRpb24uZ2V0U29hcEFjdGlvblVSSSgpKTsKLSAgICBteVNvYXBPcGVyYXRpb24uc2V0U3R5bGUoc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCb2R5KFNPQVBCb2R5IHNvYXBCb2R5KQotICB7Ci0gICAgU09BUEJvZHkgbXlTb2FwQm9keSA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQm9keSgpOwotICAgIG15U29hcEJvZHkuc2V0RW5jb2RpbmdTdHlsZXMoc29hcEJvZHkuZ2V0RW5jb2RpbmdTdHlsZXMoKSk7Ci0gICAgbXlTb2FwQm9keS5zZXROYW1lc3BhY2VVUkkoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIG15U29hcEJvZHkuc2V0UGFydHMoc29hcEJvZHkuZ2V0UGFydHMoKSk7Ci0gICAgbXlTb2FwQm9keS5zZXRVc2Uoc29hcEJvZHkuZ2V0VXNlKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEJpbmRpbmcoU09BUEJpbmRpbmcgc29hcEJpbmRpbmcpCi0gIHsKLSAgICBTT0FQQmluZGluZyBteVNvYXBCaW5kaW5nID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBCaW5kaW5nKCk7Ci0gICAgbXlTb2FwQmluZGluZy5zZXRTdHlsZShzb2FwQmluZGluZy5nZXRTdHlsZSgpKTsKLSAgICBteVNvYXBCaW5kaW5nLnNldFRyYW5zcG9ydFVSSShzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcykKLSAgewotICAgIFNPQVBBZGRyZXNzIG15U29hcEFkZHJlc3MgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEFkZHJlc3MoKTsKLSAgICBteVNvYXBBZGRyZXNzLnNldExvY2F0aW9uVVJJKHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFdTRExFTUZBUElUZXN0KCJNb2RlbFNlbWFudGljVGVzdCIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdE1vZGVsU2VtYW50aWMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1vZGVsU2VtYW50aWMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWYgPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIsIHRydWUpOwotICAgICAgV1NETEVNRkFQSVRlc3QgdGVzdCA9IG5ldyBXU0RMRU1GQVBJVGVzdChkZWYpOwotICAgICAgdGVzdC52aXNpdCgpOwotICAgICAgc2VyaWFsaXplKHRlc3QubmV3RGVmaW5pdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgQXNzZXJ0LmZhaWwoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKERlZmluaXRpb24gZGVmKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICByZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgid3NkbCIsIG5ldyBXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKLSAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxNYWluUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClyZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSk7Ci0gICAgd3NkbE1haW5SZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWYpOwotCi0gICAgSVdvcmtzcGFjZVJvb3QgbXlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICBJUHJvamVjdCBteVdlYlByb2plY3QgPSBteVdvcmtzcGFjZVJvb3QuZ2V0UHJvamVjdCgib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiKTsKLSAgICBpZiAoIW15V2ViUHJvamVjdC5leGlzdHMoKSkKLSAgICAgIG15V2ViUHJvamVjdC5jcmVhdGUobnVsbCk7Ci0KLSAgICBTdHJpbmcgYmFzZURpciA9IG15V2ViUHJvamVjdC5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0KLSAgICBEZWZpbml0aW9uTG9hZGVyLnN0b3JlKGRlZiwgYmFzZURpciArICIvQ2xvbmVkTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAganVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETEdlbmVyYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETEdlbmVyYXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YTliNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExHZW5lcmF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCb2R5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLQotCi1wdWJsaWMgY2xhc3MgV1NETEdlbmVyYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHVibGljIFdTRExHZW5lcmF0aW9uVGVzdCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBXU0RMR2VuZXJhdGlvblRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMR2VuZXJhdGlvblRlc3QoIlNhbXBsZVdTRExHZW5lcmF0aW9uIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U2FtcGxlV1NETEdlbmVyYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2FtcGxlV1NETEdlbmVyYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZ2VuZXJhdGVUZW1wZXJhdHVyZVNlcnZpY2UoV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKSArInNhbXBsZXMvZ2VuZXJhdGVkL1RlbXBlcmF0dXJlU2VydmljZS53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVRlbXBlcmF0dXJlU2VydmljZShTdHJpbmcgb3V0cHV0RmlsZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlRmlsZVVSSShvdXRwdXRGaWxlKSk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkuYWRkKHJlc291cmNlKTsKLQotICAgIC8vIENyZWF0ZSBhIERlZmluaXRpb24gLSBUZW1wZXJhdHVyZQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgZGVmaW5pdGlvbi5zZXRRTmFtZShuZXcgUU5hbWUoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksICJUZW1wZXJhdHVyZSIpKTsKLSAgICByZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLQotICAgIC8vIFRhcmdldCBuYW1lc3BhY2UgLSBodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbQotICAgIGRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKCJodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbSIpOwotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ0bnMiLCAiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20iKTsKLQotICAgIC8vIE90aGVyIG5hbWVzcGFjZXMgLSB3c2RsLCBzb2FwLCB4c2QKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgid3NkbCIsIFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKTsKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgieHNkIiwgV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSk7Ci0gICAgZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCkucHV0KCJzb2FwIiwgU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkkpOwotCi0gICAgLy8KLSAgICAvLyBMZXQncyBzdGFydCBidWlsZGluZyB0d28gbWVzc2FnZXMKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFppcENvZGUKLSAgICBQYXJ0IHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZSgiWmlwQ29kZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBNZXNzYWdlIC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIE1lc3NhZ2UgaW5wdXRNZXNzYWdlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBpbnB1dE1lc3NhZ2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJHZXRUZW1wZXJhdHVyZUlucHV0IikpOwotICAgIGlucHV0TWVzc2FnZS5hZGRQYXJ0KHBhcnQpOwotICAgIGRlZmluaXRpb24uYWRkTWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFRlbXBlcmF0dXJlCi0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKCJUZW1wZXJhdHVyZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJmbG9hdCIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE1lc3NhZ2Ugb3V0cHV0TWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgb3V0cHV0TWVzc2FnZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlT3V0cHV0IikpOwotICAgIG91dHB1dE1lc3NhZ2UuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2Uob3V0cHV0TWVzc2FnZSk7Ci0KLSAgICAvLwotICAgIC8vIE5leHQsIGJ1aWxkIGEgUG9ydFR5cGUKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGFuIElucHV0IC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIElucHV0IGlucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQuc2V0TWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGFuIE91dHB1dCAtIEdldFRlbXBlcmF0dXJlT3V0cHV0Ci0gICAgT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICBvdXRwdXQuc2V0TWVzc2FnZShvdXRwdXRNZXNzYWdlKTsKLQotICAgIC8vIENyZWF0ZSBhbiBPcGVyYXRpb24gLSBHZXRUZW1wZXJhdHVyZUZvclppcENvZGUKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbi5zZXROYW1lKCJHZXRUZW1wZXJhdHVyZUZvclppcENvZGUiKTsKLSAgICBvcGVyYXRpb24uc2V0SW5wdXQoaW5wdXQpOwotICAgIG9wZXJhdGlvbi5zZXRPdXRwdXQob3V0cHV0KTsKLQotICAgIC8vIENyZWF0ZSBhIFBvcnRUeXBlCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBwb3J0VHlwZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlSW5mb1NPQVAiKSk7Ci0gICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRQb3J0VHlwZShwb3J0VHlwZSk7Ci0KLSAgICAvLwotICAgIC8vIE5vdywgbGV0J3Mgd29yayBvbiBCaW5kaW5nCi0gICAgLy8KLQotICAgIC8vIENyZWF0ZSBhIEJpbmRpbmcgLSBHZXRUZW1wZXJhdHVyZUluZm9TT0FQCi0gICAgQmluZGluZyBiaW5kaW5nID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICBiaW5kaW5nLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCAiR2V0VGVtcGVyYXR1cmVJbmZvU09BUCIpKTsKLSAgICBiaW5kaW5nLnNldFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICBkZWZpbml0aW9uLmFkZEJpbmRpbmcoYmluZGluZyk7Ci0KLSAgICAvLyBDcmVhdGUgYSBTT0FQIEJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQmluZGluZygpOwotICAgIHNvYXBCaW5kaW5nLnNldFN0eWxlKCJycGMiKTsKLSAgICBzb2FwQmluZGluZy5zZXRUcmFuc3BvcnRVUkkoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIpOwotICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJpbmRpbmcpOwotCi0gICAgLy8gQ3JlYXRlIGEgQmluZGluZyBPcGVyYXRpb24KLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZSgiR2V0VGVtcGVyYXR1cmVGb3JaaXBDb2RlIik7Ci0gICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgLy8gQ3JlYXRlIGEgU09BUCBPcGVyYXRpb24KLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgIHNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSSgiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20vR2V0VGVtcGVyYXR1cmVGb3JaaXBDb2RlIik7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwT3BlcmF0aW9uKTsKLQotICAgIC8vIENyZWF0ZSBhIFNPQVAgQm9keQotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgc29hcEJvZHkuc2V0VXNlKCJlbmNvZGVkIik7Ci0gICAgc29hcEJvZHkuZ2V0RW5jb2RpbmdTdHlsZXMoKS5hZGQoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIik7Ci0gICAgc29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKCJodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbS8iKTsKLQotICAgIC8vIEFkZCBhIHBhcnQgKFRlbXBlcmF0dXJlKSB0byB0aGUgU09BUCBib2R5IChCdWd6aWxsYSAxMDgxNzYpCi0gICAgamF2YS51dGlsLlZlY3RvciB2ID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICB2LmFkZChwYXJ0KTsKLSAgICBzb2FwQm9keS5zZXRQYXJ0cyh2KTsKLSAgICAoKFNPQVBCb2R5SW1wbClzb2FwQm9keSkudXBkYXRlRWxlbWVudCgpOwotCi0gICAgLy8gQ3JlYXRlIGEgQmluZGluZyBJbnB1dAotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0gICAgYmluZGluZ0lucHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgLy8gQ3JlYXRlIGEgU09BUCBCb2R5Ci0gICAgc29hcEJvZHkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBzb2FwQm9keS5zZXRVc2UoImVuY29kZWQiKTsKLSAgICBzb2FwQm9keS5nZXRFbmNvZGluZ1N0eWxlcygpLmFkZCgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKTsKLSAgICBzb2FwQm9keS5zZXROYW1lc3BhY2VVUkkoImh0dHA6Ly93d3cudGVtcGVyYXR1cmUuY29tLyIpOwotCi0gICAgLy8gQ3JlYXRlIGEgQmluZGluZyBPdXRwdXQKLSAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgYmluZGluZ091cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQoYmluZGluZ091cHV0KTsKLQotICAgIC8vCi0gICAgLy8gRmluYWxseSwgd2UgYXJlIGJ1aWxkaW5nIGEgU2VydmljZQotICAgIC8vCi0KLSAgICAvLyBDcmVhdGUgYSBTT0FQIEFkZHJlc3MKLSAgICBTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcyA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQWRkcmVzcygpOwotICAgIHNvYXBBZGRyZXNzLnNldExvY2F0aW9uVVJJKCJodHRwOi8vdG9kby1zb21lLWFkZHJlc3MvIik7Ci0KLSAgICAvLyBDcmVhdGUgYSBQb3J0IC0gR2V0VGVtcGVyYXR1cmVJbmZvU09BUAotICAgIFBvcnQgcG9ydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3J0KCk7Ci0gICAgcG9ydC5zZXROYW1lKCJHZXRUZW1wZXJhdHVyZUluZm9TT0FQIik7Ci0gICAgcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotICAgIHBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEFkZHJlc3MpOwotCi0gICAgLy8gQ3JlYXRlIGEgU2VydmljZSAtIFRlbXBlcmF0dXJlU2VydmljZQotICAgIFNlcnZpY2Ugc2VydmljZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIlRlbXBlcmF0dXJlU2VydmljZSIpKTsKLSAgICBzZXJ2aWNlLmFkZFBvcnQocG9ydCk7Ci0gICAgZGVmaW5pdGlvbi5hZGRTZXJ2aWNlKHNlcnZpY2UpOwotCi0gICAgLy8KLSAgICAvLyBQaGV3LCB3ZSBhcmUgZG9uZS4gTGV0J3Mgc2VyaWFsaXplIGl0LgotICAgIC8vCi0KLSAgICByZXNvdXJjZS5zYXZlKG51bGwpOwotCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJkNDYwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETFRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIKAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotIKAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotCi0vKioKLSAqIFRoZSBtYWluIHBsdWctaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbgotewotICAvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0gIHByaXZhdGUgc3RhdGljIFdTRExUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLSAgLy9SZXNvdXJjZSBidW5kbGUuCi0gIHByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgQnVuZGxlIHBsdWdpbkJ1bmRsZTsKLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExUZXN0c1BsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHBsdWdpbiA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotICAgIHBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0b3AoY29udGV4dCk7Ci0gICAgcGx1Z2luID0gbnVsbDsKLSAgICByZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0gICAgcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBwbHVnaW47Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLSAgICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkKLSAgewotICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFdTRExUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLSAgICovCi0gIHB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLldTRExUZXN0c1BsdWdpblJlc291cmNlcyIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpCi0gICAgewotICAgICAgcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWctaW4uCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWctaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9IVFRQRXh0ZW5zaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL0hUVFBFeHRlbnNpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzhiOThkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL0hUVFBFeHRlbnNpb25zVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5nZW5lcmF0b3IuSFRUUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETFRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLQotCi0vKioKLSAqIFRlc3RzIHRoZSBIVFRQIGJpbmRpbmcgZXh0ZW5zaW9ucy4gCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQRXh0ZW5zaW9uc1Rlc3QgZXh0ZW5kcyBXU0RMRXh0ZW5zaW9uc1Rlc3QKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFERFJFU1NfTE9DQVRJT05fVVJJID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhUVFBGYWN0b3J5IEhUVFBfRkFDVE9SWSA9IEhUVFBGYWN0b3J5LmVJTlNUQU5DRTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9MT0NBVElPTl9VUkkgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9IVFRQVGVzdC9OZXdPcGVyYXRpb24iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBUkdFVF9OQU1FU1BBQ0UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9IVFRQVGVzdC8iOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUkJfR0VUID0gIkdFVCI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSQl9QVVQgPSAiUFVUIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJIVFRQRXh0ZW5zaW9uc0NyZWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RIVFRQRXh0ZW5zaW9uc0NyZWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJFTUZTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RFTUZTZXJpYWxpemF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJIVFRQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RIVFRQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJIVFRQQ29udGVudEdlbmVyYXRvciIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0SFRUUENvbnRlbnRHZW5lcmF0b3IoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgSFRUUEV4dGVuc2lvbnNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SFRUUEV4dGVuc2lvbnNDcmVhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUFRlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJIVFRQVGVzdEhUVFAiOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUoVEFSR0VUX05BTUVTUEFDRSwgYmluZGluZ05hbWUpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0KLSAgICAgIGFkZEhUVFBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oIk5ld09wZXJhdGlvbiIsIG51bGwsIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIGFkZEhUVFBPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLQotICAgICAgYWRkSFRUUEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgICBhZGRIVFRQQWRkcmVzcyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEhUVFBFeHRlbnNpb25zUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiSFRUUEV4YW1wbGUiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSFRUUEV4YW1wbGUvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgc2VydmljZU5hbWUpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBzZXJ2aWNlLnRvU3RyaW5nKCk7Ci0KLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXNlcnZpY2UuZ2V0UG9ydCgiSFRUUEV4YW1wbGVIVFRQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIEhUVFBBZGRyZXNzIGh0dHBBZGRyZXNzID0gKEhUVFBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9IGh0dHBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiwgbG9jYXRpb25VUkkpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKAotICAgICAgICBodHRwQWRkcmVzcywKLSAgICAgICAgSFRUUENvbnN0YW50cy5MT0NBVElPTl9VUklfQVRUUklCVVRFLAotICAgICAgICAidGVzdCIsCi0gICAgICAgIEhUVFBQYWNrYWdlLkxpdGVyYWxzLkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJKTsKLQotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gIkhUVFBFeGFtcGxlSFRUUCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgSFRUUEJpbmRpbmcgaHR0cEJpbmRpbmcgPSAoSFRUUEJpbmRpbmcpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLQotICAgICAgU3RyaW5nIHZlcmIgPSBodHRwQmluZGluZy5nZXRWZXJiKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoVkVSQl9HRVQsIHZlcmIpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKGh0dHBCaW5kaW5nLCBIVFRQQ29uc3RhbnRzLlZFUkJfQVRUUklCVVRFLCBWRVJCX1BVVCwgSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9CSU5ESU5HX19WRVJCKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgV1NETCBtb2RlbCB0aGVuIHNhdmVzIGl0IHVzaW5nIHRoZSBkZWZhdWx0IEVNRiBzZXJpYWxpemF0aW9uCi0gICAqIGluc3RlYWQgb2YgdGhlIFdTREwgWE1MIGZvcm1hdCwgdGhlbiBsb2FkcyBpdCBhZ2Fpbi4gVGhlIGludGVudCBpcyB0byBleGVyY2lzZQotICAgKiB0aGUgRU1GIGUqIG1ldGhvZHMgdG8gYWlkIGluIGlkZW50aWZ5aW5nIHJlYWwgY29kZSBjb3ZlcmFnZSBpc3N1ZXMuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFTUZTZXJpYWxpemF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL0hUVFBFeGFtcGxlLnhtbCIpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCB0cnVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEhUVFBDb250ZW50R2VuZXJhdG9yKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQVGVzdC53c2RsIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgSFRUUENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IChIVFRQQ29udGVudEdlbmVyYXRvcilDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZSgKLSAgICAgICAgIkhUVFAiKTsKLSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9ICJodHRwOi8vdGVzdC5vcmcvZXhhbXBsZSI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKGxvY2F0aW9uVVJJKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0VmVyYihIVFRQQ29udGVudEdlbmVyYXRvci5WRVJCX0dFVCk7Ci0KLSAgICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9ICJIVFRQVGVzdCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCBzZXJ2aWNlTmFtZSk7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLQotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpc2VydmljZS5nZXRQb3J0KCJIVFRQVGVzdEhUVFAiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDAsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZVBvcnRDb250ZW50KHBvcnQpOwotCi0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLSAgICAgIGFzc2VydFRydWUoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcyk7Ci0gICAgICBIVFRQQWRkcmVzcyBodHRwQWRkcmVzcyA9IChIVFRQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgICAgIGFzc2VydEVxdWFscyhsb2NhdGlvblVSSSwgaHR0cEFkZHJlc3MuZ2V0TG9jYXRpb25VUkkoKSk7Ci0KLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCAiSFRUUFRlc3RIVFRQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBRTmFtZSBwb3J0VHlwZVFOYW1lID0gbmV3IFFOYW1lKFRBUkdFVF9OQU1FU1BBQ0UsICJIVFRQVGVzdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotCi0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZywgcG9ydFR5cGUpOwotCi0gICAgICAvLyBUT0RPIENvbXBsZXRlIHRoaXMgdGVzdC4KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkSFRUUEFkZHJlc3MoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgSFRUUEFkZHJlc3MgaHR0cEFkZHJlc3MgPSBIVFRQX0ZBQ1RPUlkuY3JlYXRlSFRUUEFkZHJlc3MoKTsKLSAgICBodHRwQWRkcmVzcy5zZXRMb2NhdGlvblVSSShBRERSRVNTX0xPQ0FUSU9OX1VSSSk7Ci0KLSAgICBodHRwQWRkcmVzcy50b1N0cmluZygpOwotCi0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gIkhUVFBUZXN0IjsgLy8kTk9OLU5MUy0xJAotICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCBzZXJ2aWNlTmFtZSk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgc2VydmljZS50b1N0cmluZygpOwotCi0gICAgUG9ydCBwb3J0ID0gKFBvcnQpc2VydmljZS5nZXRQb3J0KCJIVFRQVGVzdEhUVFAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEFkZHJlc3MpOwotICAgIHBvcnQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRIVFRQQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBiaW5kaW5nLnRvU3RyaW5nKCk7Ci0KLSAgICBIVFRQQmluZGluZyBodHRwQmluZGluZyA9IEhUVFBfRkFDVE9SWS5jcmVhdGVIVFRQQmluZGluZygpOwotICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEJpbmRpbmcpOwotCi0gICAgaHR0cEJpbmRpbmcuc2V0VmVyYihWRVJCX0dFVCk7Ci0KLSAgICBodHRwQmluZGluZy50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZEhUVFBCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkKLSAgewotICAgIGJpbmRpbmdJbnB1dC50b1N0cmluZygpOwotCi0gICAgSFRUUFVybEVuY29kZWQgaHR0cFVSTEVuY29kZWQgPSBIVFRQX0ZBQ1RPUlkuY3JlYXRlSFRUUFVybEVuY29kZWQoKTsKLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cFVSTEVuY29kZWQpOwotCi0gICAgYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0KLSAgICBIVFRQVXJsUmVwbGFjZW1lbnQgaHR0cFVSTFJlcGxhY2VtZW50ID0gSFRUUF9GQUNUT1JZLmNyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudCgpOwotICAgIGJpbmRpbmdJbnB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwVVJMUmVwbGFjZW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZEhUVFBPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgYmluZGluZ09wZXJhdGlvbi50b1N0cmluZygpOwotCi0gICAgSFRUUE9wZXJhdGlvbiBodHRwT3BlcmF0aW9uID0gSFRUUF9GQUNUT1JZLmNyZWF0ZUhUVFBPcGVyYXRpb24oKTsKLQotICAgIGh0dHBPcGVyYXRpb24uc2V0TG9jYXRpb25VUkkoSFRUUF9MT0NBVElPTl9VUkkpOwotCi0gICAgaHR0cE9wZXJhdGlvbi50b1N0cmluZygpOwotCi0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwT3BlcmF0aW9uKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL01JTUVFeHRlbnNpb25zVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvTUlNRUV4dGVuc2lvbnNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOGEyYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvTUlNRUV4dGVuc2lvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5XU0RMVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBUZXN0cyB0aGUgTUlNRSBiaW5kaW5nIGV4dGVuc2lvbnMuIAotICovCi1wdWJsaWMgY2xhc3MgTUlNRUV4dGVuc2lvbnNUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTUlNRUZhY3RvcnkgTUlNRV9GQUNUT1JZID0gTUlNRUZhY3RvcnkuZUlOU1RBTkNFOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFNPQVBGYWN0b3J5IFNPQVBfRkFDVE9SWSA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfTkFNRVNQQUNFID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRVRlc3QiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBNSU1FRXh0ZW5zaW9uc1Rlc3QoIk1JTUVFeHRlbnNpb25zQ3JlYXRpb24iKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdE1JTUVFeHRlbnNpb25zQ3JlYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBNSU1FRXh0ZW5zaW9uc1Rlc3QoIkVNRlNlcmlhbGl6YXRpb24iKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdE1JTUVFTUZTZXJpYWxpemF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgTUlNRUV4dGVuc2lvbnNUZXN0KCJNSU1FRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RNSU1FRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIE1JTUVFeHRlbnNpb25zVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1JTUVFeHRlbnNpb25zQ3JlYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9NSU1FL01JTUVUZXN0LndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSAiTUlNRVRlc3RCaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKFRBUkdFVF9OQU1FU1BBQ0UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oInRlc3RPcGVyYXRpb24iLCBudWxsLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgIE1JTUVNdWx0aXBhcnRSZWxhdGVkIG11bHRpcGFydCA9IE1JTUVfRkFDVE9SWS5jcmVhdGVNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpOwotICAgICAgYmluZGluZ091dHB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChtdWx0aXBhcnQpOwotICAgICAgbXVsdGlwYXJ0LnRvU3RyaW5nKCk7Ci0gICAgICBFbGVtZW50IG11bHRpcGFydEVsZW1lbnQgPSBtdWx0aXBhcnQuZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0Tm90TnVsbChtdWx0aXBhcnRFbGVtZW50KTsKLQotICAgICAgTUlNRVBhcnQgbWltZVBhcnQgPSBNSU1FX0ZBQ1RPUlkuY3JlYXRlTUlNRVBhcnQoKTsKLSAgICAgIG11bHRpcGFydC5hZGRNSU1FUGFydChtaW1lUGFydCk7Ci0gICAgICBFbGVtZW50IG1pbWVQYXJ0RWxlbWVudCA9IG1pbWVQYXJ0LmdldEVsZW1lbnQoKTsKLSAgICAgIE5vZGVMaXN0IG1pbWVQYXJ0RWxlbWVudHMgPSBtdWx0aXBhcnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoTUlNRUNvbnN0YW50cy5NSU1FX05BTUVTUEFDRV9VUkksIE1JTUVDb25zdGFudHMuUEFSVF9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgbWltZVBhcnRFbGVtZW50cy5nZXRMZW5ndGgoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMobWltZVBhcnRFbGVtZW50LCBtaW1lUGFydEVsZW1lbnRzLml0ZW0oMCkpOwotCi0gICAgICBTT0FQQm9keSBzb2FwQm9keSA9IFNPQVBfRkFDVE9SWS5jcmVhdGVTT0FQQm9keSgpOwotICAgICAgc29hcEJvZHkuc2V0VXNlKCJsaXRlcmFsIik7Ci0gICAgICBtaW1lUGFydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gICAgICBtaW1lUGFydC50b1N0cmluZygpOwotICAgICAgRWxlbWVudCBzb2FwQm9keUVsZW1lbnQgPSBzb2FwQm9keS5nZXRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBzb2FwQm9keUVsZW1lbnRzID0gbWltZVBhcnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIFNPQVBDb25zdGFudHMuQk9EWV9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgc29hcEJvZHlFbGVtZW50cy5nZXRMZW5ndGgoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoc29hcEJvZHlFbGVtZW50LCBzb2FwQm9keUVsZW1lbnRzLml0ZW0oMCkpOwotICAgICAgCi0gICAgICBtaW1lUGFydCA9IE1JTUVfRkFDVE9SWS5jcmVhdGVNSU1FUGFydCgpOwotICAgICAgbXVsdGlwYXJ0LmFkZE1JTUVQYXJ0KG1pbWVQYXJ0KTsKLQotICAgICAgTUlNRUNvbnRlbnQgbWltZUNvbnRlbnQgPSBNSU1FX0ZBQ1RPUlkuY3JlYXRlTUlNRUNvbnRlbnQoKTsKLSAgICAgIG1pbWVDb250ZW50LnNldFBhcnQoInJlc3BvbnNlRGF0YSIpOwotICAgICAgbWltZUNvbnRlbnQuc2V0VHlwZSgidGV4dC9iaW5hcnkiKTsKLSAgICAgIG1pbWVDb250ZW50LnRvU3RyaW5nKCk7Ci0gICAgICAKLSAgICAgIG1pbWVQYXJ0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVDb250ZW50KTsKLSAgICAgIAotICAgICAgbWltZVBhcnRFbGVtZW50ID0gbWltZVBhcnQuZ2V0RWxlbWVudCgpOwotICAgICAgbWltZVBhcnRFbGVtZW50cyA9IG11bHRpcGFydEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgTUlNRUNvbnN0YW50cy5QQVJUX0VMRU1FTlRfVEFHKTsKLSAgICAgIGFzc2VydEVxdWFscygyLCBtaW1lUGFydEVsZW1lbnRzLmdldExlbmd0aCgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhtaW1lUGFydEVsZW1lbnQsIG1pbWVQYXJ0RWxlbWVudHMuaXRlbSgxKSk7Ci0gICAgICAKLSAgICAgIExpc3QgbWltZVBhcnRzID0gbXVsdGlwYXJ0LmdldE1JTUVQYXJ0cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1pbWVQYXJ0cy5zaXplKCkpOwotICAgICAgCi0gICAgICBNSU1FTWltZVhtbCBtaW1lWE1MID0gTUlNRV9GQUNUT1JZLmNyZWF0ZU1JTUVNaW1lWG1sKCk7Ci0gICAgICBiaW5kaW5nT3V0cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVYTUwpOwotICAgICAgbWltZVhNTC5zZXRQYXJ0KCJ4bWxEYXRhIik7Ci0gICAgICBtaW1lWE1MLnRvU3RyaW5nKCk7Ci0gICAgICAKLSAgICAgIERlZmluaXRpb25Mb2FkZXIuc3RvcmUoZGVmaW5pdGlvbiwgInNhbXBsZXMvZ2VuZXJhdGVkL01JTUVUZXN0T3V0LndzZGwiKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1JTUVFeHRlbnNpb25zUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9NSU1FL01JTUVFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVFeGFtcGxlIjsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gIk1JTUVFeGFtcGxlQmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgbG9hZHMgYSBXU0RMIG1vZGVsIHRoZW4gc2F2ZXMgaXQgdXNpbmcgdGhlIGRlZmF1bHQgRU1GIHNlcmlhbGl6YXRpb24KLSAgICogaW5zdGVhZCBvZiB0aGUgV1NETCBYTUwgZm9ybWF0LCB0aGVuIGxvYWRzIGl0IGFnYWluLiBUaGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlCi0gICAqIHRoZSBFTUYgZSogbWV0aG9kcyB0byBhaWQgaW4gaWRlbnRpZnlpbmcgcmVhbCBjb2RlIGNvdmVyYWdlIGlzc3Vlcy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1JTUVFTUZTZXJpYWxpemF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL01JTUVFeGFtcGxlLnhtbCIpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1NPQVBFeHRlbnNpb25zVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvU09BUEV4dGVuc2lvbnNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNGMyZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvU09BUEV4dGVuc2lvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETFRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBUZXN0cyB0aGUgU09BUCBiaW5kaW5nIGV4dGVuc2lvbnMuIAotICovCi1wdWJsaWMgY2xhc3MgU09BUEV4dGVuc2lvbnNUZXN0IGV4dGVuZHMgV1NETEV4dGVuc2lvbnNUZXN0Ci17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX1RSQU5TUE9SVF9VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9VUkkgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9BQ1RJT05fVVJJID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU09BUFRlc3QvTmV3T3BlcmF0aW9uIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTT0FQRmFjdG9yeSBTT0FQX0ZBQ1RPUlkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0RPQ1VNRU5UID0gImRvY3VtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9SUEMgPSAicnBjIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfTElURVJBTCA9ICJsaXRlcmFsIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfRU5DT0RFRCA9ICJlbmNvZGVkIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJTT0FQRXh0ZW5zaW9uc0NyZWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTT0FQRXh0ZW5zaW9uc0NyZWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJFTUZTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RFTUZTZXJpYWxpemF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJTT0FQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTT0FQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJTT0FQQ29udGVudEdlbmVyYXRvciIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U09BUENvbnRlbnRHZW5lcmF0b3IoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgU09BUEV4dGVuc2lvbnNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U09BUEV4dGVuc2lvbnNDcmVhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvU09BUFRlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJTT0FQVGVzdFNPQVAiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU09BUFRlc3QvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgYmluZGluZ05hbWUpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0KLSAgICAgIGFkZFNPQVBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oIk5ld09wZXJhdGlvbiIsIG51bGwsIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIGFkZFNPQVBPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLQotICAgICAgYWRkU09BUEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgIGFkZFNPQVBCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXQpOwotCi0gICAgICBTdHJpbmcgZmF1bHROYW1lID0gImZhdWx0IjsgLy8kTk9OLU5MUy0xJAotICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHQoZmF1bHROYW1lKTsKLQotICAgICAgYWRkU09BUEJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHQpOwotCi0gICAgICBhZGRTT0FQQWRkcmVzcyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBDb250ZW50R2VuZXJhdG9yKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9TT0FQVGVzdC53c2RsIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgU09BUENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IChTT0FQQ29udGVudEdlbmVyYXRvcilDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZSgKLSAgICAgICAgIlNPQVAiKTsKLSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9ICJodHRwOi8vdGVzdC5vcmcvZXhhbXBsZSI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKGxvY2F0aW9uVVJJKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0U3R5bGUoU09BUENvbnRlbnRHZW5lcmF0b3IuU1RZTEVfRE9DVU1FTlQpOwotCi0gICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiU09BUFRlc3QiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU09BUFRlc3QvIjsgLy8kTk9OLU5MUy0xJCAKLSAgICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIHNlcnZpY2VOYW1lKTsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotCi0gICAgICBQb3J0IHBvcnQgPSAoUG9ydClzZXJ2aWNlLmdldFBvcnQoIlNPQVBUZXN0U09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMCwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlUG9ydENvbnRlbnQocG9ydCk7Ci0KLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotICAgICAgYXNzZXJ0VHJ1ZShleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKTsKLSAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgICAgYXNzZXJ0RXF1YWxzKGxvY2F0aW9uVVJJLCBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpKTsKLQotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIlNPQVBUZXN0U09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLQotICAgICAgUU5hbWUgcG9ydFR5cGVRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJTT0FQVGVzdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotCi0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZywgcG9ydFR5cGUpOwotCi0gICAgICAvLyBUT0RPIENvbXBsZXRlIHRoaXMgdGVzdC4KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgV1NETCBtb2RlbCB0aGVuIHNhdmVzIGl0IHVzaW5nIHRoZSBkZWZhdWx0IEVNRiBzZXJpYWxpemF0aW9uCi0gICAqIGluc3RlYWQgb2YgdGhlIFdTREwgWE1MIGZvcm1hdCwgdGhlbiBsb2FkcyBpdCBhZ2Fpbi4gVGhlIGludGVudCBpcyB0byBleGVyY2lzZQotICAgKiB0aGUgRU1GIGUqIG1ldGhvZHMgdG8gYWlkIGluIGlkZW50aWZ5aW5nIHJlYWwgY29kZSBjb3ZlcmFnZSBpc3N1ZXMuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFTUZTZXJpYWxpemF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLnhtbCIpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCBmYWxzZSk7Ci0KLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS54bWwiKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCB0cnVlKTsKLQotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9SUENFbmNvZGVkU09BUEV4YW1wbGUud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICBmaWxlVVJJID0gVVJJLmNyZWF0ZUZpbGVVUkkoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9nZW5lcmF0ZWQvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLnhtbCIpOwotICAgICAgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOwotICAgICAgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZGVmaW5pdGlvbik7Ci0gICAgICByZXNvdXJjZS5zYXZlKG51bGwpOwotICAgICAgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKGZpbGVVUkksIHRydWUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBFeHRlbnNpb25zUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgc2VydmljZU5hbWUpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBzZXJ2aWNlLnRvU3RyaW5nKCk7Ci0KLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXNlcnZpY2UuZ2V0UG9ydCgiRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGVTT0FQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEFkZHJlc3MsIFNPQVBDb25zdGFudHMuTE9DQVRJT05fQVRUUklCVVRFLCAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLCBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSk7Ci0KLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJEb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZVNPQVAiOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCBiaW5kaW5nTmFtZSk7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLQotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gKFNPQVBCaW5kaW5nKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIFN0cmluZyBzdHlsZSA9IHNvYXBCaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoU1RZTEVfRE9DVU1FTlQsIHN0eWxlKTsKLQotICAgICAgY2hlY2tTdHJpbmdBdHRyaWJ1dGVSZWNvbmNpbGlhdGlvbihzb2FwQmluZGluZywgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUsIFNUWUxFX1JQQywgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CSU5ESU5HX19TVFlMRSk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEJpbmRpbmcsIFNPQVBDb25zdGFudHMuVFJBTlNQT1JUX0FUVFJJQlVURSwgSFRUUF9UUkFOU1BPUlRfVVJJLCBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JJTkRJTkdfX1RSQU5TUE9SVF9VUkkpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oIk5ld09wZXJhdGlvbiIsIG51bGwsIG51bGwpOwotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IChTT0FQT3BlcmF0aW9uKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIHN0eWxlID0gc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFNUWUxFX0RPQ1VNRU5ULCBzdHlsZSk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcE9wZXJhdGlvbiwgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUsIFNUWUxFX1JQQywgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9PUEVSQVRJT05fX1NUWUxFKTsKLQotICAgICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IChCaW5kaW5nSW5wdXQpYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygyLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLQotICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSAoU09BUEJvZHkpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLQotICAgICAgU3RyaW5nIHVzZSA9IHNvYXBCb2R5LmdldFVzZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFVTRV9MSVRFUkFMLCB1c2UpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBCb2R5LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUsIFVTRV9FTkNPREVELCBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JPRFlfX1VTRSk7Ci0KLSAgICAgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMSk7Ci0KLSAgICAgIFN0cmluZyBwYXJ0ID0gc29hcEhlYWRlci5nZXRQYXJ0KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImhlYWRlciIsIHBhcnQpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBIZWFkZXIsIFNPQVBDb25zdGFudHMuUEFSVF9BVFRSSUJVVEUsICJ0ZXN0IiwgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVJfQkFTRV9fUEFSVCk7Ci0KLSAgICAgIFFOYW1lIGlucHV0TWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIk5ld09wZXJhdGlvblJlcXVlc3RNc2ciKTsKLSAgICAgIE1lc3NhZ2UgaW5wdXRNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKGlucHV0TWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoaW5wdXRNZXNzYWdlKTsKLQotICAgICAgUU5hbWUgc29hcEhlYWRlck1lc3NhZ2VRTmFtZSA9IHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKGlucHV0TWVzc2FnZVFOYW1lLCBzb2FwSGVhZGVyTWVzc2FnZVFOYW1lKTsKLQotICAgICAgRWxlbWVudCBzb2FwSGVhZGVyRWxlbWVudCA9IHNvYXBIZWFkZXIuZ2V0RWxlbWVudCgpOwotICAgICAgQXR0ciBtZXNzYWdlQXR0cmlidXRlID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShTT0FQQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKTsKLQotICAgICAgUU5hbWUgdGVzdE1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJUZXN0TXNnIik7Ci0gICAgICBNZXNzYWdlIHRlc3RNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHRlc3RNZXNzYWdlUU5hbWUpOwotICAgICAgbWVzc2FnZUF0dHJpYnV0ZS5zZXRWYWx1ZSgidG5zOlRlc3RNc2ciKTsKLSAgICAgIGFzc2VydEVxdWFscyh0ZXN0TWVzc2FnZSwgc29hcEhlYWRlci5nZXRFTWVzc2FnZSgpKTsKLQotICAgICAgUU5hbWUgbWVzc2FnZSA9IHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKHRlc3RNZXNzYWdlUU5hbWUsIG1lc3NhZ2UpOwotCi0gICAgICBzb2FwSGVhZGVyLnNldE1lc3NhZ2UobnVsbCk7Ci0gICAgICBtZXNzYWdlQXR0cmlidXRlID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShTT0FQQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKTsKLSAgICAgIGFzc2VydE51bGwobWVzc2FnZUF0dHJpYnV0ZSk7Ci0KLSAgICAgIExpc3Qgc29hcEhlYWRlckZhdWx0cyA9IHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNvYXBIZWFkZXJGYXVsdHMuc2l6ZSgpKTsKLSAgICAgIHNvYXBIZWFkZXJGYXVsdHMuY2xlYXIoKTsKLSAgICAgIE5vZGVMaXN0IGhlYWRlckZhdWx0Tm9kZXMgPSBzb2FwSGVhZGVyRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShTT0FQQ29uc3RhbnRzLkhFQURFUl9GQVVMVF9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMCwgaGVhZGVyRmF1bHROb2Rlcy5nZXRMZW5ndGgoKSk7Ci0KLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpOwotICAgICAgRWxlbWVudCBzb2FwSGVhZGVyRmF1bHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLkhFQURFUl9GQVVMVF9FTEVNRU5UX1RBRyk7Ci0gICAgICBzb2FwSGVhZGVyRWxlbWVudC5hcHBlbmRDaGlsZChzb2FwSGVhZGVyRmF1bHRFbGVtZW50KTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKS5zaXplKCkpOwotICAgICAgc29hcEhlYWRlckZhdWx0RWxlbWVudC5zZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSwgInRuczpUZXN0TXNnIik7Ci0gICAgICBTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0ID0gKFNPQVBIZWFkZXJGYXVsdClzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKS5nZXQoMCk7Ci0gICAgICBhc3NlcnRFcXVhbHModGVzdE1lc3NhZ2VRTmFtZSwgc29hcEhlYWRlckZhdWx0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHModGVzdE1lc3NhZ2UsIHNvYXBIZWFkZXJGYXVsdC5nZXRFTWVzc2FnZSgpKTsKLQotICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHQoImZhdWx0Iik7Ci0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBTT0FQRmF1bHQgc29hcEZhdWx0ID0gKFNPQVBGYXVsdClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotCi0gICAgICBTdHJpbmcgbmFtZSA9IHNvYXBGYXVsdC5nZXROYW1lKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImZhdWx0IiwgbmFtZSk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEZhdWx0LCBTT0FQQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCAidGVzdCIsIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfRkFVTFRfX05BTUUpOwotCi0gICAgICBzb2FwRmF1bHQuc2V0TmFtZXNwYWNlVVJJKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Rlc3QiKTsKLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEZhdWx0LCBTT0FQQ29uc3RhbnRzLk5BTUVTUEFDRV9BVFRSSUJVVEUsICJ0ZXN0IiwgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZFNPQVBBZGRyZXNzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBBZGRyZXNzKCk7Ci0gICAgc29hcEFkZHJlc3Muc2V0TG9jYXRpb25VUkkoTE9DQVRJT05fVVJJKTsKLQotICAgIHNvYXBBZGRyZXNzLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiU09BUFRlc3QiOyAvLyROT04tTkxTLTEkCi0gICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIHNlcnZpY2VOYW1lKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLSAgICBzZXJ2aWNlLnRvU3RyaW5nKCk7Ci0KLSAgICBQb3J0IHBvcnQgPSAoUG9ydClzZXJ2aWNlLmdldFBvcnQoIlNPQVBUZXN0U09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgcG9ydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQWRkcmVzcyk7Ci0gICAgcG9ydC50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZFNPQVBCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBCaW5kaW5nKCk7Ci0KLSAgICBzb2FwQmluZGluZy5zZXRTdHlsZShTVFlMRV9ET0NVTUVOVCk7Ci0gICAgc29hcEJpbmRpbmcuc2V0VHJhbnNwb3J0VVJJKEhUVFBfVFJBTlNQT1JUX1VSSSk7Ci0KLSAgICBzb2FwQmluZGluZy50b1N0cmluZygpOwotCi0gICAgYmluZGluZy5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQmluZGluZyk7Ci0gICAgYmluZGluZy50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZFNPQVBCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCkKLSAgewotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpOwotCi0gICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IFNPQVBfRkFDVE9SWS5jcmVhdGVTT0FQRmF1bHQoKTsKLSAgICBzb2FwRmF1bHQuc2V0TmFtZShmYXVsdE5hbWUpOwotICAgIHNvYXBGYXVsdC50b1N0cmluZygpOwotCi0gICAgc29hcEZhdWx0LnNldFVzZShVU0VfTElURVJBTCk7Ci0KLSAgICBiaW5kaW5nRmF1bHQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEZhdWx0KTsKLSAgICBiaW5kaW5nRmF1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQQmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQpCi0gIHsKLSAgICBiaW5kaW5nSW5wdXQudG9TdHJpbmcoKTsKLQotICAgIFNPQVBCb2R5IGlucHV0U09BUEJvZHkgPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaW5wdXRTT0FQQm9keSk7Ci0KLSAgICBpbnB1dFNPQVBCb2R5LnNldFVzZShVU0VfTElURVJBTCk7Ci0KLSAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZyBtZXNzYWdlTmFtZSA9ICJOZXdPcGVyYXRpb25SZXF1ZXN0IjsgLy8kTk9OLU5MUy0xJAotICAgIERlZmluaXRpb24gZW5jbG9zaW5nRGVmaW5pdGlvbiA9IGJpbmRpbmdJbnB1dC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGVuY2xvc2luZ0RlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgUU5hbWUgbWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgbWVzc2FnZU5hbWUpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVuY2xvc2luZ0RlZmluaXRpb247Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgUGFydCBwYXJ0ID0gKFBhcnQpbWVzc2FnZS5nZXRQYXJ0KCJwYXJhbWV0ZXJzIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwYXJ0cy5hZGQocGFydCk7Ci0gICAgaW5wdXRTT0FQQm9keS5zZXRQYXJ0cyhwYXJ0cyk7Ci0gICAgaW5wdXRTT0FQQm9keS50b1N0cmluZygpOwotCi0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBIZWFkZXIoKTsKLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEhlYWRlcik7Ci0KLSAgICBzb2FwSGVhZGVyLnNldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLQotICAgIFN0cmluZyBoZWFkZXJQYXJ0ID0gImhlYWRlciI7IC8vJE5PTi1OTFMtMSQKLSAgICBzb2FwSGVhZGVyLnNldFBhcnQoaGVhZGVyUGFydCk7Ci0KLSAgICBzb2FwSGVhZGVyLnNldFVzZShVU0VfTElURVJBTCk7Ci0KLSAgICBzb2FwSGVhZGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBhZGRTT0FQSGVhZGVyRmF1bHQobWVzc2FnZVFOYW1lLCBzb2FwSGVhZGVyKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQQmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICAvLyBFeGVyY2lzZSBzb21lIG9mIHRoZSBSUEMgLyBlbmNvZGVkIHN0dWZmLgotCi0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBzb2FwQm9keS5zZXRVc2UoVVNFX0VOQ09ERUQpOwotCi0gICAgRUxpc3QgZW5jb2RpbmdTdHlsZXMgPSBuZXcgQmFzaWNFTGlzdCgpOwotICAgIGVuY29kaW5nU3R5bGVzLmFkZCgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKTsKLSAgICBlbmNvZGluZ1N0eWxlcy5hZGQoInRlc3QiKTsKLSAgICAKLSAgICBzb2FwQm9keS5zZXRFbmNvZGluZ1N0eWxlcyhlbmNvZGluZ1N0eWxlcyk7Ci0gICAgCi0gICAgTGlzdCBlRW5jb2RpbmdTdHlsZXMgPSBzb2FwQm9keS5nZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgZUVuY29kaW5nU3R5bGVzLnNpemUoKSk7Ci0gICAgCi0gICAgc29hcEJvZHkudG9TdHJpbmcoKTsKLQotICAgIGJpbmRpbmdPdXRwdXQudG9TdHJpbmcoKTsKLSAgICBiaW5kaW5nT3V0cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQSGVhZGVyRmF1bHQoUU5hbWUgbWVzc2FnZVFOYW1lLCBTT0FQSGVhZGVyIHNvYXBIZWFkZXIpCi0gIHsKLSAgICBTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0ID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgIHNvYXBIZWFkZXIuYWRkU09BUEhlYWRlckZhdWx0KHNvYXBIZWFkZXJGYXVsdCk7Ci0KLSAgICBMaXN0IHNvYXBIZWFkZXJGYXVsdHMgPSBzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgc29hcEhlYWRlckZhdWx0cy5zaXplKCkpOwotICAgIFNPQVBIZWFkZXJGYXVsdCBleHBlY3RlZFNvYXBIZWFkZXJGYXVsdCA9IChTT0FQSGVhZGVyRmF1bHQpc29hcEhlYWRlckZhdWx0cy5nZXQoMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU29hcEhlYWRlckZhdWx0LCBzb2FwSGVhZGVyRmF1bHQpOwotCi0gICAgc29hcEhlYWRlckZhdWx0LnNldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLQotICAgIFN0cmluZyBoZWFkZXJGYXVsdFBhcnQgPSAiaGVhZGVyRmF1bHQxIjsgLy8kTk9OLU5MUy0xJAotICAgIHNvYXBIZWFkZXJGYXVsdC5zZXRQYXJ0KGhlYWRlckZhdWx0UGFydCk7Ci0KLSAgICAvLyBUZXN0IHRoZSByZW1vdmUgcGFydC4KLQotICAgIHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLmNsZWFyKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkU09BUE9wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgIHNvYXBPcGVyYXRpb24uc2V0U3R5bGUoU1RZTEVfRE9DVU1FTlQpOwotICAgIHNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSShTT0FQX0FDVElPTl9VUkkpOwotCi0gICAgc29hcE9wZXJhdGlvbi50b1N0cmluZygpOwotCi0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwT3BlcmF0aW9uKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9XU0RMRXh0ZW5zaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1dTRExFeHRlbnNpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjc3OWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1dTRExFeHRlbnNpb25zVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLS8qKgotICogQmFzZSBjbGFzcyBmb3IgV1NETCBleHRlbnNpb24gdGVzdHMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMRXh0ZW5zaW9uc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHRlc3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gCi0gICAqIEBwYXJhbSBuYW1lIHRoZSB0ZXN0IG5hbWUuCi0gICAqLwotICBwdWJsaWMgV1NETEV4dGVuc2lvbnNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgYSBTdHJpbmcgYXR0cmlidXRlIHJlY29uY2lsaWF0aW9uLiBUaGUgY29kZSBjaGFuZ2VzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgdGhyb3VnaCB0aGUgRE9NIGFuZCBjb21wYXJlcyBpdCB3aXRoIHRoZSB2YWx1ZSBvYnRhaW5lZCBieSBjYWxsaW5nIGVHZXQuCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCB0aGUgV1NETCBlbGVtZW50IHRvIHRlc3QKLSAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgdGhlIGF0dHJpYnV0ZSBuYW1lCi0gICAqIEBwYXJhbSBleHBlY3RlZFZhbHVlIHRoZSBleHBlY3RlZCB2YWx1ZQotICAgKiBAcGFyYW0gZmVhdHVyZSB0aGUgRU1GIGZlYXR1cmUgb2YgdGhlIGF0dHJpYnV0ZSB0byB0ZXN0LiAKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oCi0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQsCi0gICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsCi0gICAgU3RyaW5nIGV4cGVjdGVkVmFsdWUsCi0gICAgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpCi0gIHsKLSAgICBFT2JqZWN0IGVPYmplY3QgPSAoRU9iamVjdCl3c2RsRWxlbWVudDsKLQotICAgIFN0cmluZyBpbml0aWFsVmFsdWUgPSAoU3RyaW5nKWVPYmplY3QuZUdldChmZWF0dXJlKTsKLSAgICAKLSAgICBFbGVtZW50IGVsZW1lbnQgPSB3c2RsRWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgZU9iamVjdC5lVW5zZXQoZmVhdHVyZSk7Ci0gICAgQXR0ciBhdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlTmFtZSk7Ci0gICAgYXNzZXJ0TnVsbChhdHRyaWJ1dGUpOwotCi0gICAgZU9iamVjdC5lU2V0KGZlYXR1cmUsIGluaXRpYWxWYWx1ZSk7Ci0gICAgCi0gICAgYXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZU5hbWUpOwotICAgIGF0dHJpYnV0ZS5zZXRWYWx1ZShleHBlY3RlZFZhbHVlKTsKLQotICAgIFN0cmluZyBhY3R1YWxWYWx1ZSA9IChTdHJpbmcpZU9iamVjdC5lR2V0KGZlYXR1cmUpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFZhbHVlLCBhY3R1YWxWYWx1ZSk7Ci0gICAgCi0gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7Ci0gICAgYWN0dWFsVmFsdWUgPSAoU3RyaW5nKWVPYmplY3QuZUdldChmZWF0dXJlKTsKLSAgICBhc3NlcnROdWxsKGFjdHVhbFZhbHVlKTsKLQotICAgIGVPYmplY3QuZVNldChmZWF0dXJlLCBpbml0aWFsVmFsdWUpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvRGVmaW5pdGlvbkxvYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvRGVmaW5pdGlvbkxvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjkwYjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25Mb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbDsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRGVmaW5pdGlvbkxvYWRlcgotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBwcm92aWRlcyBzdGF0aWMgbWV0aG9kcyBvbmx5LgotICAgKi8KLSAgcHJpdmF0ZSBEZWZpbml0aW9uTG9hZGVyKCkKLSAgewotICB9Ci0KLSAgc3RhdGljIHB1YmxpYyBEZWZpbml0aW9uIGxvYWQoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBsb2FkKGZpbGVuYW1lLCBmYWxzZSk7Ci0gIH0KLQotICBzdGF0aWMgcHVibGljIERlZmluaXRpb24gbG9hZChTdHJpbmcgZmlsZW5hbWUsIGJvb2xlYW4gdXNlRXh0ZW5zaW9uRmFjdG9yaWVzKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBsb2FkKGZpbGVuYW1lLCB1c2VFeHRlbnNpb25GYWN0b3JpZXMsIGZhbHNlKTsKLSAgfQotCi0gIHN0YXRpYyBwdWJsaWMgRGVmaW5pdGlvbiBsb2FkKFN0cmluZyBmaWxlbmFtZSwgYm9vbGVhbiB1c2VFeHRlbnNpb25GYWN0b3JpZXMsIGJvb2xlYW4gdHJhY2tMb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBmaWxlbmFtZSBpcyBhbiBhYnNvbHV0ZSBwYXRoCi0KLSAgICBVUkkgdXJpID0gbnVsbDsKLSAgICB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShmaWxlbmFtZSk7Ci0KLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICByZXNvdXJjZVNldC5nZXRBZGFwdGVyRmFjdG9yaWVzKCkuYWRkKG5ldyBXU0RMTW9kZWxMb2NhdG9yQWRhcHRlckZhY3RvcnkoKSk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckFkYXB0ZXJGYWN0b3J5KCkpOwotCi0gICAgV1NETFJlc291cmNlSW1wbCB3c2RsTWFpblJlc291cmNlID0gKFdTRExSZXNvdXJjZUltcGwpcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIikpOwotICAgIHdzZGxNYWluUmVzb3VyY2Uuc2V0VVJJKHVyaSk7Ci0gICAgamF2YS51dGlsLk1hcCBtYXAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLkNPTlRJTlVFX09OX0xPQURfRVJST1IsIEJvb2xlYW4udmFsdWVPZih0cnVlKSk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLlVTRV9FWFRFTlNJT05fRkFDVE9SSUVTLCBCb29sZWFuLnZhbHVlT2YodXNlRXh0ZW5zaW9uRmFjdG9yaWVzKSk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLlRSQUNLX0xPQ0FUSU9OLCBCb29sZWFuLnZhbHVlT2YodHJhY2tMb2NhdGlvbikpOwotICAgIHdzZGxNYWluUmVzb3VyY2UubG9hZChtYXApOwotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIHJlc291cmNlcyA9IHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLml0ZXJhdG9yKCk7IHJlc291cmNlcy5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCByZXNvdXJjZSA9IHJlc291cmNlcy5uZXh0KCk7Ci0gICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKQotICAgICAgewotICAgICAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxSZXNvdXJjZSA9IChXU0RMUmVzb3VyY2VJbXBsKXJlc291cmNlOwotICAgICAgICBkZWZpbml0aW9uID0gd3NkbFJlc291cmNlLmdldERlZmluaXRpb24oKTsKLSAgICAgICAgcmV0dXJuIGRlZmluaXRpb247Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBzdGF0aWMgcHVibGljIHZvaWQgc3RvcmUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgLy8gZmlsZW5hbWUgaXMgYW4gYWJzb2x1dGUgcGF0aAotCi0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSBkZWZpbml0aW9uLmVSZXNvdXJjZSgpOwotICAgIHJlc291cmNlLnNldFVSSShVUkkuY3JlYXRlRmlsZVVSSShmaWxlbmFtZSkpOwotICAgIHJlc291cmNlLnNhdmUobnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25WaXNpdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9EZWZpbml0aW9uVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGZhNjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25WaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLQotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEZWZpbml0aW9uVmlzaXRvciBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0KLSAgLy8gQWRkZWQgZm9yIEpVbml0Ci0gIHB1YmxpYyBEZWZpbml0aW9uVmlzaXRvcihTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIERlZmluaXRpb25WaXNpdG9yKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLQotICAvLyBtYWluIGVudHJ5Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KCkKLSAgewotICAgIHZpc2l0RGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZikKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRJbXBvcnQoKEltcG9ydClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgVHlwZXMgdHlwZXMgPSBkZWYuZ2V0RVR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICB2aXNpdFR5cGVzKHR5cGVzKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0TWVzc2FnZSgoTWVzc2FnZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0RVBvcnRUeXBlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UG9ydFR5cGUoKFBvcnRUeXBlKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRFQmluZGluZ3MoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEJpbmRpbmcoKEJpbmRpbmcpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEVTZXJ2aWNlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0U2VydmljZSgoU2VydmljZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoZGVmLCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICB9Ci0KLSAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpOwotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRQYXJ0KChQYXJ0KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBhcnQoUGFydCBwYXJ0KTsKLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0T3BlcmF0aW9uKChPcGVyYXRpb24paXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLSAgICB2aXNpdElucHV0KChJbnB1dClpbnB1dCk7Ci0KLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICB2aXNpdE91dHB1dCgoT3V0cHV0KW91dHB1dCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRGYXVsdCgoRmF1bHQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0SW5wdXQoSW5wdXQgaW5wdXQpOwotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpOwotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKChCaW5kaW5nT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoYmluZGluZywgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpOwotICAgIHZpc2l0QmluZGluZ0lucHV0KChCaW5kaW5nSW5wdXQpaW5wdXQpOwotCi0gICAgQmluZGluZ091dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLSAgICB2aXNpdEJpbmRpbmdPdXRwdXQoKEJpbmRpbmdPdXRwdXQpb3V0cHV0KTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRCaW5kaW5nRmF1bHQoKEJpbmRpbmdGYXVsdClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBvcGVyYXRpb24uZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQob3BlcmF0aW9uLCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGlucHV0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBpbnB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChpbnB1dCwgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG91dHB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChvdXRwdXQsIChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBmYXVsdC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChmYXVsdCwgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UG9ydCgoUG9ydClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KHNlcnZpY2UsIChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChwb3J0LCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJsZUVsZW1lbnQgb3duZXIsIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETDRKRGVmaW5pdGlvblZpc2l0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTREw0SkRlZmluaXRpb25WaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MGJmN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETDRKRGVmaW5pdGlvblZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETDRKRGVmaW5pdGlvblZpc2l0b3IgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0gIC8vIEFkZGVkIGZvciBKVW5pdAotICBwdWJsaWMgV1NETDRKRGVmaW5pdGlvblZpc2l0b3IoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHByb3RlY3RlZCBXU0RMNEpEZWZpbml0aW9uVmlzaXRvcihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgLy8gbWFpbiBlbnRyeQotICBwdWJsaWMgdm9pZCB2aXNpdCgpCi0gIHsKLSAgICB2aXNpdERlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBqYXZhLnV0aWwuTWFwIGltcG9ydHMgPSBkZWYuZ2V0SW1wb3J0cygpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gaW1wb3J0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIEltcG9ydCBteUltcG9ydCA9IG51bGw7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBteUltcG9ydCA9IChJbXBvcnQpKChqYXZhLnV0aWwuQXJyYXlMaXN0KWltcG9ydHMuZ2V0KGl0ZXJhdG9yLm5leHQoKSkpLmdldCgwKTsKLSAgICAgIHZpc2l0SW1wb3J0KG15SW1wb3J0KTsKLSAgICB9Ci0KLSAgICBUeXBlcyB0eXBlcyA9IGRlZi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgdmlzaXRUeXBlcyh0eXBlcyk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRNZXNzYWdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0TWVzc2FnZSgoTWVzc2FnZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRQb3J0VHlwZSgoUG9ydFR5cGUpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRCaW5kaW5nKChCaW5kaW5nKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0U2VydmljZSgoU2VydmljZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICB9Ci0KLSAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpOwotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG1lc3NhZ2UuZ2V0UGFydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdFBhcnQoKFBhcnQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0UGFydChQYXJ0IHBhcnQpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydFR5cGUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdE9wZXJhdGlvbigoT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0SW5wdXQoKTsKLSAgICB2aXNpdElucHV0KChJbnB1dClpbnB1dCk7Ci0KLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldE91dHB1dCgpOwotICAgIHZpc2l0T3V0cHV0KChPdXRwdXQpb3V0cHV0KTsKLQotICAgIGphdmEudXRpbC5NYXAgZmF1bHRzID0gb3BlcmF0aW9uLmdldEZhdWx0cygpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZmF1bHRzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgRmF1bHQgZmF1bHQgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgZmF1bHQgPSAoRmF1bHQpZmF1bHRzLmdldChpdGVyYXRvci5uZXh0KCkpOwotICAgICAgdmlzaXRGYXVsdChmYXVsdCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCk7Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCk7Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCk7Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbigoQmluZGluZ09wZXJhdGlvbilpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgdmlzaXRCaW5kaW5nSW5wdXQoKEJpbmRpbmdJbnB1dClpbnB1dCk7Ci0KLSAgICBCaW5kaW5nT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgdmlzaXRCaW5kaW5nT3V0cHV0KChCaW5kaW5nT3V0cHV0KW91dHB1dCk7Ci0KLSAgICBqYXZhLnV0aWwuTWFwIGJpbmRpbmdGYXVsdHMgPSBvcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0cygpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZ0ZhdWx0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdCliaW5kaW5nRmF1bHRzLmdldChpdGVyYXRvci5uZXh0KCkpOwotICAgICAgdmlzaXRCaW5kaW5nRmF1bHQoYmluZGluZ0ZhdWx0KTsKLSAgICB9Ci0KLSAgICBpdGVyYXRvciA9IG9wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGlucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG91dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBmYXVsdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UG9ydCgoUG9ydClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETENvbnZlcnRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETENvbnZlcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTliMDI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTRExDb252ZXJ0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGNsYXNzIFdTRExDb252ZXJ0ZXIgZXh0ZW5kcyBEZWZpbml0aW9uVmlzaXRvcgotewotICBwcml2YXRlIERvY3VtZW50IGRvYzsKLQotICBwcml2YXRlIEVsZW1lbnQgZGVzY3JpcHRpb247Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRUeXBlczsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudFNlcnZpY2U7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRFbmRwb2ludDsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEludGVyZmFjZTsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudE9wZXJhdGlvbjsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEJpbmRpbmc7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uOwotCi0gIHByaXZhdGUgRWxlbWVudCBjdXJyZW50QmluZGluZ0lucHV0OwotCi0gIHByaXZhdGUgRWxlbWVudCBjdXJyZW50QmluZGluZ091dHB1dDsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEJpbmRpbmdGYXVsdDsKLQotICBwcml2YXRlIFN0cmluZyB3c2RsTmFtZXNwYWNlUHJlZml4OwotCi0gIHByaXZhdGUgU3RyaW5nIHhzZE5hbWVzcGFjZVByZWZpeDsKLQotICAvLyBBZGRlZCBmb3IgSlVuaXQKLSAgcHVibGljIFdTRExDb252ZXJ0ZXIoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbgotICAgKi8KLSAgcHVibGljIFdTRExDb252ZXJ0ZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgc3VwZXIoZGVmaW5pdGlvbik7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViCi0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZTIwKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgY3JlYXRlRG9jdW1lbnQoKTsKLSAgICB2aXNpdCgpOwotICAgIHNlcmlhbGl6ZShmaWxlbmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jKTsKLSAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0gICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLSAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTgiKTsKLSAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiNCIpOwotICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQobmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlRG9jdW1lbnQoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgZG9jID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpLm5ld0RvY3VtZW50KCk7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgY3JlYXRlV1NETEVsZW1lbnQoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwiLCBuYW1lKTsKLSAgICBpZiAod3NkbE5hbWVzcGFjZVByZWZpeCAhPSBudWxsKQotICAgICAgZWxlbWVudC5zZXRQcmVmaXgod3NkbE5hbWVzcGFjZVByZWZpeCk7Ci0KLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzRG9jdW1lbnRhdGlvbihFbGVtZW50IGRvY0VsZW1lbnQsIEVsZW1lbnQgcGFyZW50KQotICB7Ci0gICAgaWYgKGRvY0VsZW1lbnQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLQotICAgIEVsZW1lbnQgYWRvcHRlZERvY0VsZW1lbnQgPSAoRWxlbWVudClkb2MuaW1wb3J0Tm9kZShkb2NFbGVtZW50LCB0cnVlKTsKLSAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoYWRvcHRlZERvY0VsZW1lbnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgZGVzY3JpcHRpb24gPSBjcmVhdGVXU0RMRWxlbWVudCgiZGVzY3JpcHRpb24iKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgZGVzY3JpcHRpb24pOwotCi0gICAgLy8gVEJEIC0gRGV0ZXJtaW5lIGxhdGVyIGlmIHdlIHdhbnQgdG8gY29udmVydCB0aGUgZG9jdW1lbnQgdG8gdXNlIFNPQVAgMS4yLgotICAgIC8vIEhvd2V2ZXIgYWRkaW5nIHRoZXNlIHR3byBuYW1lc3BhY2VzIG1heSBub3QgYmUgaGFybWZ1bC4KLSAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOnNvYXBlbnYiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMy8wNS9zb2FwLWVudmVsb3AiKTsKLSAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOndzb2FwIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvc29hcDEyIik7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIGlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgidGFyZ2V0TmFtZXNwYWNlIiwgdGFyZ2V0TmFtZXNwYWNlKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICAgIC8qCi0gICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIgotICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiovCi0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBwcmVmaXggPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIG5hbWVzcGFjZSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLQotICAgICAgaWYgKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPT0gMCkgLy8gbWVhbnQgdG8gYmUgZGVmYXVsdCBuYW1lc3BhY2UKLSAgICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbCIpOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXgsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwiKTsKLSAgICAgICAgICB3c2RsTmFtZXNwYWNlUHJlZml4ID0gcHJlZml4OwotICAgICAgICAgIGRlc2NyaXB0aW9uLnNldFByZWZpeCh3c2RsTmFtZXNwYWNlUHJlZml4KTsKLSAgICAgICAgfQotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy8gU09BUCAxLjIKLSAgICAgIGlmICgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNPQVAgMS4yCi0gICAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHByZWZpeCwgImh0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC1lbnZlbG9wIik7Ci0KLSAgICAgICAgLy8gV1NETCAyLjAgYmluZGluZyBmb3IgU09BUCAxLjIKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCJ4bWxuczp3c29hcCIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3NvYXAxMiIpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy9pZiAoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIi5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICAgIC8vICBjb250aW51ZTsKLQotICAgICAgaWYgKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgIHhzZE5hbWVzcGFjZVByZWZpeCA9IHByZWZpeDsgLy8gV2Ugd2lsbCB1c2UgdGhpcyBpbiB2aXNpdEltcG9ydCgpLgotCi0gICAgICBpZiAocHJlZml4Lmxlbmd0aCgpID09IDApIC8vIG1lYW50IHRvIGJlIGRlZmF1bHQgbmFtZXNwYWNlCi0gICAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgieG1sbnMiICsgcHJlZml4LCBuYW1lc3BhY2UpOwotICAgICAgZWxzZQotICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXgsIG5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgZG9jLmFwcGVuZENoaWxkKGRlc2NyaXB0aW9uKTsKLSAgICBzdXBlci52aXNpdERlZmluaXRpb24oZGVmKTsKLQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRJbXBvcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpCi0gIHsKLSAgICAvLyBEZXRlcm1pbmUgaWYgd2UgPGltcG9ydD4gYSBzY2hlbWEuCi0gICAgaWYgKGltcG9ydGluZ1NjaGVtYSh3c2RsSW1wb3J0KSkKLSAgICB7Ci0gICAgICBjdXJyZW50VHlwZXMgPSBjcmVhdGVXU0RMRWxlbWVudCgidHlwZXMiKTsKLSAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRUeXBlcyk7Ci0KLSAgICAgIC8vICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2Zvby5jb20iIHNjaGVtYUxvY2F0aW9uPSAiYmFyLnhzZCIvPgotICAgICAgRWxlbWVudCBzY2hlbWFJbXBvcnQgPSBkb2MuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJpbXBvcnQiKTsKLSAgICAgIGlmICh4c2ROYW1lc3BhY2VQcmVmaXggPT0gbnVsbCkgLy8gbmVlZCB0byBhZGQgb25lCi0gICAgICB7Ci0gICAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgieG1sbnM6eHMiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsKLSAgICAgICAgeHNkTmFtZXNwYWNlUHJlZml4ID0gInhzIjsKLSAgICAgICAgc2NoZW1hSW1wb3J0LnNldFByZWZpeCh4c2ROYW1lc3BhY2VQcmVmaXgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoISIiLmVxdWFscyh4c2ROYW1lc3BhY2VQcmVmaXgpKSAvLyBpdCBpcyBub3QgZGVmYXVsdCBuYW1lc3BhY2UKLSAgICAgICAgc2NoZW1hSW1wb3J0LnNldFByZWZpeCh4c2ROYW1lc3BhY2VQcmVmaXgpOwotCi0gICAgICBzY2hlbWFJbXBvcnQuc2V0QXR0cmlidXRlKCJuYW1lc3BhY2UiLCB3c2RsSW1wb3J0LmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIHNjaGVtYUltcG9ydC5zZXRBdHRyaWJ1dGUoInNjaGVtYUxvY2F0aW9uIiwgd3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHdzZGxJbXBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgc2NoZW1hSW1wb3J0KTsKLSAgICAgIGN1cnJlbnRUeXBlcy5hcHBlbmRDaGlsZChzY2hlbWFJbXBvcnQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgRWxlbWVudCBpbXBvcnRFbGVtZW50ID0gd3NkbEltcG9ydC5nZXRFbGVtZW50KCk7Ci0gICAgICBFbGVtZW50IGFkb3B0ZWRJbXBvcnRFbGVtZW50ID0gKEVsZW1lbnQpZG9jLmltcG9ydE5vZGUoaW1wb3J0RWxlbWVudCwgdHJ1ZSk7Ci0gICAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbih3c2RsSW1wb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGFkb3B0ZWRJbXBvcnRFbGVtZW50KTsKLSAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGFkb3B0ZWRJbXBvcnRFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaW1wb3J0aW5nU2NoZW1hKEltcG9ydCBteUltcG9ydCkKLSAgewotICAgIGlmIChteUltcG9ydC5nZXREZWZpbml0aW9uKCkgIT0gbnVsbCkgLy8gaXQgaXMgV1NETCBpbXBvcnQKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0VHlwZXMob3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXMpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFR5cGVzKFR5cGVzIHR5cGVzKQotICB7Ci0gICAgLy8gY3VycmVudFR5cGVzIG1heSBoYXZlIGJlZW4gY3JlYXRlZCBpbiB2aXNpdEltcG9ydCgpLgotICAgIGlmIChjdXJyZW50VHlwZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBjdXJyZW50VHlwZXMgPSBjcmVhdGVXU0RMRWxlbWVudCgidHlwZXMiKTsKLSAgICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHR5cGVzLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRUeXBlcyk7Ci0gICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZChjdXJyZW50VHlwZXMpOwotICAgIH0KLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdHlwZXMuZ2V0U2NoZW1hcygpLml0ZXJhdG9yKCk7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IG51bGw7Ci0gICAgRWxlbWVudCBzY2hlbWFFbGVtZW50ID0gbnVsbDsKLSAgICBFbGVtZW50IGFkb3B0ZWRTY2hlbWFFbGVtZW50ID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHNjaGVtYSA9IChYU0RTY2hlbWEpaXRlcmF0b3IubmV4dCgpOwotICAgICAgc2NoZW1hLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgIHNjaGVtYUVsZW1lbnQgPSBzY2hlbWEuZ2V0RWxlbWVudCgpOwotICAgICAgYWRvcHRlZFNjaGVtYUVsZW1lbnQgPSAoRWxlbWVudClkb2MuaW1wb3J0Tm9kZShzY2hlbWFFbGVtZW50LCB0cnVlKTsKLSAgICAgIGN1cnJlbnRUeXBlcy5hcHBlbmRDaGlsZChhZG9wdGVkU2NoZW1hRWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRQYXJ0KG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBhcnQoUGFydCBwYXJ0KQotICB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIGN1cnJlbnRJbnRlcmZhY2UgPSBjcmVhdGVXU0RMRWxlbWVudCgiaW50ZXJmYWNlIik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24ocG9ydFR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEludGVyZmFjZSk7Ci0KLSAgICBFbGVtZW50IHBvcnRUeXBlRWxlbWVudCA9IHBvcnRUeXBlLmdldEVsZW1lbnQoKTsKLSAgICBpZiAocG9ydFR5cGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudEludGVyZmFjZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBwb3J0VHlwZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotCi0gICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEludGVyZmFjZSk7Ci0gICAgc3VwZXIudmlzaXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgY3VycmVudE9wZXJhdGlvbiA9IGNyZWF0ZVdTRExFbGVtZW50KCJvcGVyYXRpb24iKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihvcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudE9wZXJhdGlvbik7Ci0KLSAgICBFbGVtZW50IG9wZXJhdGlvbkVsZW1lbnQgPSBvcGVyYXRpb24uZ2V0RWxlbWVudCgpOwotICAgIGlmIChvcGVyYXRpb25FbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudE9wZXJhdGlvbi5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBvcGVyYXRpb25FbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLQotICAgIE9wZXJhdGlvblR5cGUgb3BUeXBlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSA9PSBvcFR5cGUpCi0gICAgICBjdXJyZW50T3BlcmF0aW9uLnNldEF0dHJpYnV0ZSgicGF0dGVybiIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAzL3dzZGwvaW4tb3V0Iik7Ci0gICAgZWxzZSBpZiAoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFID09IG9wVHlwZSkKLSAgICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0QXR0cmlidXRlKCJwYXR0ZXJuIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDMvd3NkbC9vdXQtaW4iKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTiA9PSBvcFR5cGUpCi0gICAgICBjdXJyZW50T3BlcmF0aW9uLnNldEF0dHJpYnV0ZSgicGF0dGVybiIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAzL3dzZGwvb3V0LW9ubHkiKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLk9ORV9XQVkgPT0gb3BUeXBlKQotICAgICAgY3VycmVudE9wZXJhdGlvbi5zZXRBdHRyaWJ1dGUoInBhdHRlcm4iLCAiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wMy93c2RsL2luLW9ubHkiKTsKLQotICAgIGN1cnJlbnRJbnRlcmZhY2UuYXBwZW5kQ2hpbGQoY3VycmVudE9wZXJhdGlvbik7Ci0gICAgc3VwZXIudmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0SW5wdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgRWxlbWVudCBjdXJyZW50SW5wdXQgPSBjcmVhdGVXU0RMRWxlbWVudCgiaW5wdXQiKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50SW5wdXQpOwotCi0gICAgRWxlbWVudCBpbnB1dEVsZW1lbnQgPSBpbnB1dC5nZXRFbGVtZW50KCk7Ci0KLSAgICBpZiAoaW5wdXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudElucHV0LnNldEF0dHJpYnV0ZSgibWVzc2FnZUxhYmVsIiwgaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLQotICAgIEVsZW1lbnQgcGFydEVsZW1lbnQgPSBnZXRQYXJ0RWxlbWVudChpbnB1dCk7Ci0gICAgaWYgKHBhcnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpKQotICAgICAgY3VycmVudElucHV0LnNldEF0dHJpYnV0ZSgiZWxlbWVudCIsIHBhcnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZWxlbWVudCIpKTsKLSAgICAvLyBUQkQgLSB3aGF0IGlmIHRoZSBwYXJ0IHVzZXMgInR5cGUiPwotCi0gICAgY3VycmVudE9wZXJhdGlvbi5hcHBlbmRDaGlsZChjdXJyZW50SW5wdXQpOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGdldFBhcnRFbGVtZW50KE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZikKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgLy8gVEJEIC0gZm9yIG5vdywgdGFrZSB0aGUgZmlyc3QgcGFydC4KLSAgICBQYXJ0IHBhcnQgPSAoUGFydClpdGVyYXRvci5uZXh0KCk7Ci0gICAgRWxlbWVudCBwYXJ0RWxlbWVudCA9IHBhcnQuZ2V0RWxlbWVudCgpOwotICAgIHJldHVybiBwYXJ0RWxlbWVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0T3V0cHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBFbGVtZW50IGN1cnJlbnRPdXRwdXQgPSBjcmVhdGVXU0RMRWxlbWVudCgib3V0cHV0Iik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24ob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRPdXRwdXQpOwotCi0gICAgRWxlbWVudCBvdXRwdXRFbGVtZW50ID0gb3V0cHV0LmdldEVsZW1lbnQoKTsKLQotICAgIGlmIChvdXRwdXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudE91dHB1dC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2VMYWJlbCIsIG91dHB1dEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotCi0gICAgRWxlbWVudCBwYXJ0RWxlbWVudCA9IGdldFBhcnRFbGVtZW50KG91dHB1dCk7Ci0gICAgaWYgKHBhcnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpKQotICAgICAgY3VycmVudE91dHB1dC5zZXRBdHRyaWJ1dGUoImVsZW1lbnQiLCBwYXJ0RWxlbWVudC5nZXRBdHRyaWJ1dGUoImVsZW1lbnQiKSk7Ci0gICAgLy8gVEJEIC0gd2hhdCBpZiB0aGUgcGFydCB1c2VzICJ0eXBlIj8KLQotICAgIGN1cnJlbnRPcGVyYXRpb24uYXBwZW5kQ2hpbGQoY3VycmVudE91dHB1dCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdEZhdWx0KG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRCaW5kaW5nKG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgY3VycmVudEJpbmRpbmcgPSBjcmVhdGVXU0RMRWxlbWVudCgiYmluZGluZyIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEJpbmRpbmcpOwotCi0gICAgRWxlbWVudCBiaW5kaW5nRWxlbWVudCA9IGJpbmRpbmcuZ2V0RWxlbWVudCgpOwotICAgIGlmIChiaW5kaW5nRWxlbWVudC5oYXNBdHRyaWJ1dGUoIm5hbWUiKSkKLSAgICAgIGN1cnJlbnRCaW5kaW5nLnNldEF0dHJpYnV0ZSgibmFtZSIsIGJpbmRpbmdFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLSAgICBpZiAoYmluZGluZ0VsZW1lbnQuaGFzQXR0cmlidXRlKCJ0eXBlIikpCi0gICAgICBjdXJyZW50QmluZGluZy5zZXRBdHRyaWJ1dGUoImludGVyZmFjZSIsIGJpbmRpbmdFbGVtZW50LmdldEF0dHJpYnV0ZSgidHlwZSIpKTsKLQotICAgIC8vIFRCRCAtIGlzIHRoZSBuZXh0IGxpbmUgZml4ZWQgZm9yIFNPQVA/Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0QXR0cmlidXRlKCJ0eXBlIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9zb2FwMTIiKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRBdHRyaWJ1dGUoIndzb2FwOnByb3RvY29sIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC9iaW5kaW5ncy9IVFRQIik7Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0QXR0cmlidXRlKCJ3c29hcDptZXBEZWZhdWx0IiwgImh0dHA6Ly93d3cudzMub3JnLjIwMDMvMDUvc29hcC9tZXAvcmVxdWVzdC1yZXNwb25zZSIpOwotCi0gICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEJpbmRpbmcpOwotICAgIHN1cGVyLnZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uID0gY3JlYXRlV1NETEVsZW1lbnQoIm9wZXJhdGlvbiIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50QmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICBTdHJpbmcgb3BlcmF0aW9uTmFtZSA9IG9wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCkuZ2V0TmFtZSgpOwotCi0gICAgLy8gRGV0ZXJtaW5lIHByZWZpeAotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBudWxsOwotICAgIERlZmluaXRpb24gZGVmID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBpZiAoZGVmICE9IG51bGwpCi0gICAgICB0YXJnZXROYW1lc3BhY2UgPSBkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgcHJlZml4ID0gZGVmLmdldFByZWZpeCh0YXJnZXROYW1lc3BhY2UpOwotCi0gICAgaWYgKHByZWZpeCA9PSBudWxsKQotICAgICAgcHJlZml4ID0gIiI7Ci0gICAgZWxzZQotICAgICAgcHJlZml4ICs9ICI6IjsKLQotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldEF0dHJpYnV0ZSgicmVmIiwgcHJlZml4ICsgb3BlcmF0aW9uTmFtZSk7Ci0KLSAgICBjdXJyZW50QmluZGluZy5hcHBlbmRDaGlsZChjdXJyZW50QmluZGluZ09wZXJhdGlvbik7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBjdXJyZW50QmluZGluZ0lucHV0ID0gY3JlYXRlV1NETEVsZW1lbnQoImlucHV0Iik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24oaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEJpbmRpbmdJbnB1dCk7Ci0KLSAgICBFbGVtZW50IGlucHV0RWxlbWVudCA9IGlucHV0LmdldEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgaW5wdXROYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgIGlmIChpbnB1dE5hbWUgIT0gbnVsbCkKLSAgICAgIGlucHV0RWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBpbnB1dE5hbWUpOwotCi0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEJpbmRpbmdJbnB1dCk7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nSW5wdXQoaW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdPdXRwdXQgPSBjcmVhdGVXU0RMRWxlbWVudCgib3V0cHV0Iik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24ob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRCaW5kaW5nT3V0cHV0KTsKLQotICAgIEVsZW1lbnQgb3V0cHV0RWxlbWVudCA9IG91dHB1dC5nZXRFbGVtZW50KCk7Ci0gICAgU3RyaW5nIG91dHB1dE5hbWUgPSBvdXRwdXQuZ2V0TmFtZSgpOwotICAgIGlmIChvdXRwdXROYW1lICE9IG51bGwpCi0gICAgICBvdXRwdXRFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIG91dHB1dE5hbWUpOwotCi0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEJpbmRpbmdPdXRwdXQpOwotICAgIHN1cGVyLnZpc2l0QmluZGluZ091dHB1dChvdXRwdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdGYXVsdCA9IGNyZWF0ZVdTRExFbGVtZW50KCJmYXVsdCIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKGZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRCaW5kaW5nRmF1bHQpOwotCi0gICAgRWxlbWVudCBmYXVsdEVsZW1lbnQgPSBmYXVsdC5nZXRFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLSAgICBpZiAoZmF1bHROYW1lICE9IG51bGwpCi0gICAgICBmYXVsdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgZmF1bHROYW1lKTsKLQotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRCaW5kaW5nRmF1bHQpOwotICAgIHN1cGVyLnZpc2l0QmluZGluZ0ZhdWx0KGZhdWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0U2VydmljZShTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBjdXJyZW50U2VydmljZSA9IGNyZWF0ZVdTRExFbGVtZW50KCJzZXJ2aWNlIik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24oc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50U2VydmljZSk7Ci0KLSAgICBFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gc2VydmljZS5nZXRFbGVtZW50KCk7Ci0gICAgaWYgKHNlcnZpY2VFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudFNlcnZpY2Uuc2V0QXR0cmlidXRlKCJuYW1lIiwgc2VydmljZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotCi0gICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY3VycmVudFNlcnZpY2UpOwotICAgIHN1cGVyLnZpc2l0U2VydmljZShzZXJ2aWNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0UG9ydChvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIGN1cnJlbnRFbmRwb2ludCA9IGNyZWF0ZVdTRExFbGVtZW50KCJlbmRwb2ludCIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEVuZHBvaW50KTsKLQotICAgIEVsZW1lbnQgcG9ydEVsZW1lbnQgPSBwb3J0LmdldEVsZW1lbnQoKTsKLSAgICBpZiAocG9ydEVsZW1lbnQuaGFzQXR0cmlidXRlKCJuYW1lIikpCi0gICAgICBjdXJyZW50RW5kcG9pbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgcG9ydEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotICAgIGlmIChwb3J0RWxlbWVudC5oYXNBdHRyaWJ1dGUoImJpbmRpbmciKSkKLSAgICAgIGN1cnJlbnRFbmRwb2ludC5zZXRBdHRyaWJ1dGUoImJpbmRpbmciLCBwb3J0RWxlbWVudC5nZXRBdHRyaWJ1dGUoImJpbmRpbmciKSk7Ci0KLSAgICAvLyBBZGQgaW50ZXJmYWNlIHRvIGN1cnJlbnQgc2VydmljZQotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKSAvLyBiaW5kaW5nIGNvdWxkIG5vdCBiZSByZXNvbHZlZAotICAgIHsKLSAgICAgIEVsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSBiaW5kaW5nLmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChiaW5kaW5nRWxlbWVudC5oYXNBdHRyaWJ1dGUoInR5cGUiKSkKLSAgICAgICAgY3VycmVudFNlcnZpY2Uuc2V0QXR0cmlidXRlKCJpbnRlcmZhY2UiLCBiaW5kaW5nRWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKSk7Ci0gICAgfQotCi0gICAgY3VycmVudFNlcnZpY2UuYXBwZW5kQ2hpbGQoY3VycmVudEVuZHBvaW50KTsKLSAgICBzdXBlci52aXNpdFBvcnQocG9ydCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50LCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJsZUVsZW1lbnQgb3duZXIsIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KQotICB7Ci0gICAgLy8gVEJEIC0gSXQgaXMgbm90IGp1c3QgU09BUCBiaW5kaW5nCi0gICAgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0SW1wbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHNvYXBFbGVtZW50ID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKHNvYXBFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibG9jYXRpb24iKSkKLSAgICAgICAgY3VycmVudEVuZHBvaW50LnNldEF0dHJpYnV0ZSgiYWRkcmVzcyIsIHNvYXBFbGVtZW50LmdldEF0dHJpYnV0ZSgibG9jYXRpb24iKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBFbGVtZW50IGRvbUVsZW1lbnQgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICBFbGVtZW50IGFkb3B0ZWRET01FbGVtZW50ID0gKEVsZW1lbnQpZG9jLmltcG9ydE5vZGUoZG9tRWxlbWVudCwgdHJ1ZSk7Ci0KLSAgICAgIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwpCi0gICAgICAgIGRlc2NyaXB0aW9uLmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgZGVzY3JpcHRpb24uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbCkKLSAgICAgICAgY3VycmVudFNlcnZpY2UuaW5zZXJ0QmVmb3JlKGFkb3B0ZWRET01FbGVtZW50LCBjdXJyZW50U2VydmljZS5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbCkKLSAgICAgICAgY3VycmVudEludGVyZmFjZS5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRJbnRlcmZhY2UuZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsKQotICAgICAgICBjdXJyZW50T3BlcmF0aW9uLmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgY3VycmVudE9wZXJhdGlvbi5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsKQotICAgICAgICBjdXJyZW50QmluZGluZy5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nLmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgICBlbHNlIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwpCi0gICAgICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsKQotICAgICAgICBjdXJyZW50QmluZGluZ0lucHV0Lmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgY3VycmVudEJpbmRpbmdJbnB1dC5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPdXRwdXRJbXBsKQotICAgICAgICBjdXJyZW50QmluZGluZ091dHB1dC5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nT3V0cHV0LmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgICBlbHNlIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ZhdWx0SW1wbCkKLSAgICAgICAgY3VycmVudEJpbmRpbmdGYXVsdC5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nRmF1bHQuZ2V0Rmlyc3RDaGlsZCgpKTsKLQotICAgIH0KLQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFdTRExDb252ZXJ0ZXIoIkNvbnZlcnQiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RDb252ZXJ0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKCJkOi9lY2xpcHNlMzAxL2VjbGlwc2Uvd29ya3NwYWNlL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL1BUQVRpbWVEaXN0cmlidXRpb24ud3NkbCIpOwotICAgICAgV1NETENvbnZlcnRlciBjb252ZXJ0ZXIgPSBuZXcgV1NETENvbnZlcnRlcihkZWYpOwotICAgICAgY29udmVydGVyLmdlbmVyYXRlMjAoImQ6L2VjbGlwc2UzMDEvZWNsaXBzZS93b3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvUFRBVGltZURpc3RyaWJ1dGlvbjIwLndzZGwiKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgICAvKgotICAgICB0cnkKLSAgICAgewotICAgICBEZWZpbml0aW9uIGRlZiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChhcmdzWzBdKTsKLSAgICAgV1NETENvbnZlcnRlciBjb252ZXJ0ZXIgPSBuZXcgV1NETENvbnZlcnRlcihkZWYpOwotICAgICBjb252ZXJ0ZXIuZ2VuZXJhdGUyMCgidGVzdDIwLndzZGwiKTsKLSAgICAgfQotICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgIHsKLSAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgfSovCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NTdhODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETE1vZGVsTG9jYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIHByb3RlY3RlZCBDdXN0b21XU0RMTW9kZWxMb2NhdG9yIGN1c3RvbVdTRExNb2RlbExvY2F0b3IgPSBuZXcgQ3VzdG9tV1NETE1vZGVsTG9jYXRvcigpOwotCi0gIGNsYXNzIEN1c3RvbVdTRExNb2RlbExvY2F0b3IgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIFdTRExNb2RlbExvY2F0b3IKLSAgewotICAgIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pCi0gICAgewotICAgICAgcmV0dXJuIFVSSVJlc29sdmVyUGx1Z2luLmNyZWF0ZVJlc29sdmVyKCkucmVzb2x2ZShiYXNlTG9jYXRpb24sIG5hbWVzcGFjZSwgbG9jYXRpb24pOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQWRhdHBlckZvclR5cGUoT2JqZWN0IHR5cGUpCi0gICAgewotICAgICAgcmV0dXJuIHR5cGUgPT0gV1NETE1vZGVsTG9jYXRvci5jbGFzczsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGUgPT0gV1NETE1vZGVsTG9jYXRvci5jbGFzczsKLSAgfQotCi0gIHB1YmxpYyBBZGFwdGVyIGFkYXB0TmV3KE5vdGlmaWVyIHRhcmdldCwgT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gY3VzdG9tV1NETE1vZGVsTG9jYXRvcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWE1MRGlmZi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWE1MRGlmZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWNlOTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hNTERpZmYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxEaWZmCi17Ci0gIHByaXZhdGUgUHJpbnRTdHJlYW0gb3V0ID0gU3lzdGVtLm91dDsKLQotICBwcml2YXRlIGJvb2xlYW4gRElGRl9FTEVNRU5UX05PREVfT05MWSA9IGZhbHNlOwotCi0gIHB1YmxpYyBib29sZWFuIGRpZmYoU3RyaW5nIGZpbGUxLCBTdHJpbmcgZmlsZTIpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gZGlmZihmaWxlMSwgZmlsZTIsIGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGRpZmYoU3RyaW5nIGZpbGUxLCBTdHJpbmcgZmlsZTIsIGJvb2xlYW4gZWxlbWVudE9ubHkpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudCBkb2MxID0gZ2V0RG9jdW1lbnQoZmlsZTEpOwotICAgIERvY3VtZW50IGRvYzIgPSBnZXREb2N1bWVudChmaWxlMik7Ci0gICAgRElGRl9FTEVNRU5UX05PREVfT05MWSA9IGVsZW1lbnRPbmx5OwotICAgIHJldHVybiBkaWZmKGRvYzEsIGRvYzIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZGlmZihEb2N1bWVudCBkb2MxLCBEb2N1bWVudCBkb2MyKQotICB7Ci0gICAgRWxlbWVudCByb290MSA9IGRvYzEuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgRWxlbWVudCByb290MiA9IGRvYzIuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIGNvbXBhcmVOb2Rlcyhyb290MSwgcm9vdDIpOwotICB9Ci0KLSAgcHJpdmF0ZSBEb2N1bWVudCBnZXREb2N1bWVudChTdHJpbmcgdXJpKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5wYXJzZSh1cmkpOwotICAgIHJldHVybiBkb2M7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gY29tcGFyZU5vZGVzKE5vZGUgbm9kZTEsIE5vZGUgbm9kZTIpCi0gIHsKLSAgICBpZiAoRElGRl9FTEVNRU5UX05PREVfT05MWSkKLSAgICB7Ci0gICAgICAvLyBDb21wYXJlIG9ubHkgZWxlbWVudCBub2RlcyBpbiB0aGUgY2hpbGRyZW4uCi0gICAgICBmaWx0ZXJOb25FbGVtZW50Tm9kZXMobm9kZTEpOwotICAgICAgZmlsdGVyTm9uRWxlbWVudE5vZGVzKG5vZGUyKTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZTEuZ2V0Tm9kZVR5cGUoKSAhPSBub2RlMi5nZXROb2RlVHlwZSgpIHx8IG5vZGUxLmdldE5vZGVOYW1lKCkgIT0gbm9kZTIuZ2V0Tm9kZU5hbWUoKSkKLSAgICB7Ci0gICAgICBwcmludGxuKCJOb2RlIHR5cGUgb3Igbm9kZSBuYW1lIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb21wYXJlQXR0cmlidXRlcyhub2RlMSwgbm9kZTIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTm9kZUxpc3Qgbm9kZUxpc3QxID0gbm9kZTEuZ2V0Q2hpbGROb2RlcygpOwotICAgIE5vZGVMaXN0IG5vZGVMaXN0MiA9IG5vZGUyLmdldENoaWxkTm9kZXMoKTsKLSAgICBpZiAobm9kZUxpc3QxLmdldExlbmd0aCgpICE9IG5vZGVMaXN0Mi5nZXRMZW5ndGgoKSkKLSAgICB7Ci0gICAgICBwcmludGxuKCJUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgIC8vcHJpbnRsbigiTm9kZSAxOiAiICsgbm9kZUxpc3QxLmdldExlbmd0aCgpKTsKLSAgICAgIC8vcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZUxpc3QyLmdldExlbmd0aCgpKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIGludCBsZW5ndGggPSBub2RlTGlzdDEuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBjb21wYXJlTm9kZXMobm9kZUxpc3QxLml0ZW0oaSksIG5vZGVMaXN0Mi5pdGVtKGkpKTsKLSAgICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGZpbHRlck5vbkVsZW1lbnROb2RlcyhOb2RlIG5vZGUpCi0gIHsKLSAgICBOb2RlIGZpcnN0Q2hpbGQgPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoZmlyc3RDaGlsZC5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgIHsKLSAgICAgIG5vZGUucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7Ci0gICAgICBmaXJzdENoaWxkID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgfQotCi0gICAgTm9kZSBzaWJsaW5nID0gZmlyc3RDaGlsZC5nZXROZXh0U2libGluZygpOwotICAgIE5vZGUgZGVsZXRlTWUgPSBudWxsOwotICAgIHdoaWxlIChzaWJsaW5nICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHNpYmxpbmcuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgZGVsZXRlTWUgPSBzaWJsaW5nOwotICAgICAgICBzaWJsaW5nID0gc2libGluZy5nZXROZXh0U2libGluZygpOwotICAgICAgICBub2RlLnJlbW92ZUNoaWxkKGRlbGV0ZU1lKTsKLSAgICAgIH0KLQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBjb21wYXJlQXR0cmlidXRlcyhOb2RlIG5vZGUxLCBOb2RlIG5vZGUyKQotICB7Ci0gICAgTmFtZWROb2RlTWFwIG5vZGVNYXAxID0gbm9kZTEuZ2V0QXR0cmlidXRlcygpOwotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwMiA9IG5vZGUyLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChub2RlTWFwMSA9PSBudWxsIHx8IG5vZGVNYXAyID09IG51bGwpCi0gICAgewotICAgICAgaWYgKG5vZGVNYXAxID09IG51bGwgJiYgbm9kZU1hcDIgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZU1hcDEuZ2V0TGVuZ3RoKCkgIT0gbm9kZU1hcDIuZ2V0TGVuZ3RoKCkpCi0gICAgewotICAgICAgcHJpbnRsbigiVGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgTm9kZSBhdHRyTm9kZTEgPSBudWxsOwotICAgIE5vZGUgYXR0ck5vZGUyID0gbnVsbDsKLSAgICBpbnQgbGVuZ3RoID0gbm9kZU1hcDEuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhdHRyTm9kZTEgPSBub2RlTWFwMS5pdGVtKGkpOwotICAgICAgYXR0ck5vZGUyID0gbm9kZU1hcDIuZ2V0TmFtZWRJdGVtKGF0dHJOb2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgIGlmIChhdHRyTm9kZTIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJpbnRsbigiVGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQgaW4gTm9kZSAyOiAiICsgYXR0ck5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFhdHRyTm9kZTEuZ2V0Tm9kZVZhbHVlKCkuZXF1YWxzKGF0dHJOb2RlMi5nZXROb2RlVmFsdWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHByaW50bG4oIlRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQ6Iik7Ci0gICAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkgKyAiLCIgKyBhdHRyTm9kZTEuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgICBwcmludGxuKCJOb2RlIDI6ICIgKyBub2RlMi5nZXROb2RlTmFtZSgpICsgIiwiICsgYXR0ck5vZGUyLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcmludGxuKFN0cmluZyBzKQotICB7Ci0gICAgb3V0LnByaW50bG4ocyk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyQWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTlmYjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXI7Ci0KLQotcHVibGljIGNsYXNzIFhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbAotewotICBwcm90ZWN0ZWQgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckltcGwgc2NoZW1hTG9jYXRvciA9IG5ldyBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVySW1wbCgpOwotCi0gIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gdHlwZSA9PSBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyLmNsYXNzOwotICB9Ci0KLSAgcHVibGljIEFkYXB0ZXIgYWRhcHROZXcoTm90aWZpZXIgdGFyZ2V0LCBPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiBzY2hlbWFMb2NhdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVySW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAyZmVlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFNjaGVtYUxvY2F0b3I7Ci0KLQotcHVibGljIGNsYXNzIFhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJJbXBsIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyCi17Ci0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVNjaGVtYUxvY2F0aW9uKFhTRFNjaGVtYSB4c2RTY2hlbWEsIFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBzY2hlbWFMb2NhdGlvblVSSSkKLSAgewotICAgIFN0cmluZyBiYXNlTG9jYXRpb24gPSB4c2RTY2hlbWEuZ2V0U2NoZW1hTG9jYXRpb24oKTsKLSAgICByZXR1cm4gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKS5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbmFtZXNwYWNlVVJJLCBzY2hlbWFMb2NhdGlvblVSSSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0FkYXRwZXJGb3JUeXBlKE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGUgPT0gWFNEU2NoZW1hTG9jYXRvci5jbGFzczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FlN2VkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iIC8+IC0tPgotCQkKLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0JCi0JPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5IG5hbWU9IndzdC1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIvPgotCQk8ZGVsZXRlIGRpcj0iJHt3c3QtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgICAJPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAJCTxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d3N0LWZvbGRlcn0iLz4KLSAgICAgIAkJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIAkJPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLkFsbFRlc3RDYXNlcyIgLz4KLSAgIAkJCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgCTwvYW50PgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0JPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotCTwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCQk8IS0tPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+LS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5OTA4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvdmFsaWRhdGlvbi9pbnRlcm5hbC9wcm92aXNpb25hbC9jb3JlL0lNZXNzYWdlIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUNvbnRleHQiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZGZlZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzZGx2YWxpZGF0ZXRlc3RzLmphcgotamF2YUNvbXBpbGVyLndzZGx2YWxpZGF0ZXRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJhNmRiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDIwZTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIEFwciAxNiAxNzo1NjowNSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTRmYTJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6NDc6MjcgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1NmY1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNGcmkgRmViIDE3IDE0OjIzOjU5IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE2NmQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jU3VuIEFwciAxNiAxNzo1NTowMiBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWI2YzhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlX1BMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMwotQnVuZGxlLUNsYXNzUGF0aDogd3NkbHZhbGlkYXRldGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLldTRExWYWxpZGF0b3JUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJV9QUk9WSURFUl9OQU1FCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLndzdC53cywKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYsCi0gb3JnLmFwYWNoZS5hbnQsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmFwYWNoZS54ZXJjZXMsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24sCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5YTY4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLndzZGx2YWxpZGF0ZXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC53c2RsdmFsaWRhdGV0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSB3c2RsdmFsaWRhdGV0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjc4ZTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIS0tIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0Ci1fUExVR0lOX05BTUUgICAgICAgPSBXU0RMIFZhbGlkYXRvciBUZXN0cyBQbHVnLWluCi1fUFJPVklERVJfTkFNRSAgICAgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzg0ODZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uSW5mb0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uTWVzc2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci0KLS8qKgotICogVGVzdCB0aGUgV1NETCB2YWxpZGF0aW9uIGZyYW1ld29yayBWYWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgCi17Ci0gIFZhbGlkYXRvcldyYXBwZXIgdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcldyYXBwZXIoKTsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgdmFsaWRhdGUgbWV0aG9kLiBUZXN0cyB0byBiZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIGZyb20gYSBVUkkgb3IgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC48YnIvPgotICAgKiAyLiBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBvciBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlKCkKLSAgewotCXRyeQotCXsKLQkgIC8vIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSBmcm9tIGEgVVJJIGFuZCBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotCSAgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0ID0gbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKTsKLQkgIHZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24oY29udGV4dCk7Ci0JICBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCSAgU3RyaW5nIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLndzZGwiOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgY29udGV4dCk7Ci0JICB2YWxpZGF0b3IudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQpOwotCSAgdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihjb250ZXh0KTsKLQkgIFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0MiA9IG51bGw7Ci0JICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JICB0cnkKLQkgIHsKLQkgICAgaXMgPSBuZXcgVVJMKHVyaSkub3BlblN0cmVhbSgpOwotCSAgICByZXBvcnQyID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgaXMsIGNvbnRleHQpOwotCSAgfQotCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICB7Ci0JCWZhaWwoIkEgcHJvYmxlbSBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSB3aXRoIGFuIGlucHV0c3RyZWFtOiAiICsgZSk7Ci0JICB9Ci0JICBmaW5hbGx5Ci0JICB7Ci0JCWlmKGlzICE9IG51bGwpCi0JCXsKLQkJICB0cnkKLQkJICB7Ci0JCSAgICBpcy5jbG9zZSgpOwotCQkgIH0KLQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCS8vIERvIG5vdGhpbmcuCi0JCSAgfQotCQl9Ci0JICB9Ci0JICB2YWxpZGF0b3IudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQpOwotCSAgYXNzZXJ0VHJ1ZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYSB2YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCSAgCi0gICAgICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dDIgPSBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpOwotCSAgdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihjb250ZXh0Mik7Ci0JICB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLndzZGwiOwotCSAgcmVwb3J0MSA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIGNvbnRleHQyKTsKLQkgIHZhbGlkYXRvci50ZWFyZG93blZhbGlkYXRpb24oY29udGV4dDIpOwotCSAgdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihjb250ZXh0Mik7Ci0JICByZXBvcnQyID0gbnVsbDsKLQkgIGlzID0gbnVsbDsKLQkgIHRyeQotCSAgewotCSAgICBpcyA9IG5ldyBVUkwodXJpKS5vcGVuU3RyZWFtKCk7Ci0JICAgIHJlcG9ydDIgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBpcywgY29udGV4dDIpOwotCSAgfQotCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICB7Ci0JCWZhaWwoIkEgcHJvYmxlbSBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSB3aXRoIGFuIGlucHV0c3RyZWFtOiAiICsgZSk7Ci0JICB9Ci0JICBmaW5hbGx5Ci0JICB7Ci0JCWlmKGlzICE9IG51bGwpCi0JCXsKLQkJICB0cnkKLQkJICB7Ci0JCSAgICBpcy5jbG9zZSgpOwotCQkgIH0KLQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCS8vIERvIG5vdGhpbmcuCi0JCSAgfQotCQl9Ci0JICB9Ci0JICB2YWxpZGF0b3IudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQyKTsKLQkgIGFzc2VydEZhbHNlKCJWYWxpZGF0aW9uIHVzaW5nIGEgVVJJIGRpZCBub3QgcHJvZHVjdCBhbiBpbnZhbGlkIHZhbGlkYXRpb24gcmVzdWx0LiIsIHJlcG9ydDEuaXNWYWxpZCgpKTsKLQkgIGFzc2VydEVxdWFscygiVmFsaWRhdGlvbiB1c2luZyBVUkkgYW5kIHVzaW5nIGlucHV0c3RyZWFtIG9mIHRoZSBzYW1lIGZpbGUgcHJvZHVjZXMgZGlmZmVyZW50IG51bWJlcnMgb2YgZXJyb3JzLiIsIHJlcG9ydDEuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBsb2NhdGUgcGx1Zy1pbiBsb2NhdGlvbjogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIHNldHVwVmFsaWRhdGlvbiBtZXRob2QuCi0gICAqIDEuIFRlc3QgdGhhdCBhZnRlciBydW4gZm9yIGEgY29udGV4dCBYTUwgYW5kIFhTRCBncmFtbWFyIHBvb2xzIGV4aXN0IGZvciB0aGUgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXR1cFZhbGlkYXRpb24oKQotICB7Ci0JdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JdmFsaWRhdG9yLmdldFhTREdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JCi0JTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0ID0gbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKTsKLQlhc3NlcnROdWxsKCJBbiBYTUwgZ3JhbW1hciBwb29sIGFscmVhZHkgZXhpc3RzIGZvciB0aGUgY29udGV4dC4iLCB2YWxpZGF0b3IuZ2V0WE1MR3JhbW1hclBvb2xGb3JDb250ZXh0KGNvbnRleHQpKTsKLQlhc3NlcnROdWxsKCJBbiBYU0QgZ3JhbW1hciBwb29sIGFscmVhZHkgZXhpc3RzIGZvciB0aGUgY29udGV4dC4iLCB2YWxpZGF0b3IuZ2V0WFNER3JhbW1hclBvb2xGb3JDb250ZXh0KGNvbnRleHQpKTsKLQkKLQl2YWxpZGF0b3Iuc2V0dXBWYWxpZGF0aW9uKGNvbnRleHQpOwotCQotCWFzc2VydE5vdE51bGwoIkFuIFhNTCBncmFtbWFyIHBvb2wgZG9lcyBub3QgZXhpc3QgYWZ0ZXIgdGhlIHNldHVwVmFsaWRhdGlvbiBtZXRob2QgaXMgcnVuLiIsIHZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbEZvckNvbnRleHQoY29udGV4dCkpOwotCWFzc2VydE5vdE51bGwoIkFuIFhTRCBncmFtbWFyIHBvb2wgZG9lcyBub3QgZXhpc3QgYWZ0ZXIgdGhlIHNldHVwVmFsaWRhdGlvbiBtZXRob2QgaXMgcnVuLiIsIHZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbEZvckNvbnRleHQoY29udGV4dCkpOwotCQotCXZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotCXZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgdGVhcmRvd25WYWxpZGF0aW9uIG1ldGhvZC4KLSAgICogMS4gVGVzdCB0aGF0IGFmdGVyIHJ1biBmb3IgYSBjb250ZXh0IFhNTCBhbmQgWFNEIGdyYW1tYXIgcG9vbHMgZG8gbm90IGV4aXN0IGZvciB0aGUgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUZWFyZG93blZhbGlkYXRpb24oKQotICB7Ci0JdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JdmFsaWRhdG9yLmdldFhTREdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JCi0JTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0ID0gbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKTsKLQl2YWxpZGF0b3IuZ2V0WE1MR3JhbW1hclBvb2xzTWFwKCkucHV0KGNvbnRleHQsIG5ldyBYTUxHcmFtbWFyUG9vbEltcGwoKSk7Ci0JdmFsaWRhdG9yLmdldFhTREdyYW1tYXJQb29sc01hcCgpLnB1dChjb250ZXh0LCBuZXcgSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwoKSk7Ci0JCi0JdmFsaWRhdG9yLnRlYXJkb3duVmFsaWRhdGlvbihjb250ZXh0KTsKLQkKLQlhc3NlcnROdWxsKCJBbiBYTUwgZ3JhbW1hciBwb29sIGV4aXN0cyBhZnRlciB0aGUgdGVhcmRvd25WYWxpZGF0aW9uIG1ldGhvZCBpcyBydW4uIiwgdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sRm9yQ29udGV4dChjb250ZXh0KSk7Ci0JYXNzZXJ0TnVsbCgiQW4gWFNEIGdyYW1tYXIgcG9vbCBleGlzdHMgYWZ0ZXIgdGhlIHRlYXJkb3duVmFsaWRhdGlvbiBtZXRob2QgaXMgcnVuLiIsIHZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbEZvckNvbnRleHQoY29udGV4dCkpOwotCQotCXZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotCXZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCBjb252ZXJ0aW5nIGEgbWVzc2FnZS4gVGhlIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgCi0gICAqIG5ldyByZXBvcnQuCi0gICAqIDEuIFRlc3QgdGhhdCBhIHJlZ3VsYXIgbWVzc2FnZSBpcyBhZGRlZCBhcyBpcy4KLSAgICogMi4gVGVzdCB0aGF0IGEgbmVzdGVkIG1lc3NhZ2UgaXMgYWRkZWQgYXMgYSBuZXN0ZWQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0TWVzc2FnZSgpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSByZWd1bGFyIG1lc3NhZ2UgaXMgYWRkZWQgYXMgaXMuCi0JVmFsaWRhdGlvbk1lc3NhZ2VJbXBsIG1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKCJtZXNzYWdlIiwgMSwgMiwgSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUiwgImZpbGU6L3NvbWV1cmkiKTsKLQlWYWxpZGF0aW9uSW5mbyByZXBvcnQgPSBuZXcgVmFsaWRhdGlvbkluZm8oImZpbGU6L3NvbWV1cmkiKTsKLQl2YWxpZGF0b3IuY29udmVydE1lc3NhZ2UobWVzc2FnZSwgcmVwb3J0KTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXBvcnQgZG9lcyBub3QgaGF2ZSAxIG1lc3NhZ2UuIiwgMSwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBzdHJpbmcgaXMgaW5jb3JyZWN0LiIsICJtZXNzYWdlIiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE1lc3NhZ2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBsaW5lIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMSwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldExpbmVOdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBjb2x1bW4gbnVtYmVyIGlzIGluY29ycmVjdC4iLCAyLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0Q29sdW1uTnVtYmVyKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugc2V2ZXJpdHkgaXMgaW5jb3JyZWN0LiIsIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRTZXZlcml0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIFVSSSBpcyBpbmNvcnJlY3QuIiwgImZpbGU6L3NvbWV1cmkiLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0VXJpKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgaGFzIGFuIGluY29ycmVjdGx5IHJlZ2lzdHJlZCBuZXN0ZWQgbWVzc2FnZS4iLCAwLCByZXBvcnQuZ2V0TmVzdGVkTWVzc2FnZXMoKS5zaXplKCkpOwotCQotCS8vIDIuIFRlc3QgdGhhdCBhIG5lc3RlZCBtZXNzYWdlIGlzIGFkZGVkIGFzIGEgbmVzdGVkIG1lc3NhZ2UuCi0JVmFsaWRhdGlvbk1lc3NhZ2VJbXBsIG1lc3NhZ2UyID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbCgibWVzc2FnZSIsIDEsIDIsIElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IsICJmaWxlOi9zb21ldXJpMiIpOwotCVZhbGlkYXRpb25JbmZvIHJlcG9ydDIgPSBuZXcgVmFsaWRhdGlvbkluZm8oImZpbGU6L3NvbWV1cmkiKTsKLQl2YWxpZGF0b3IuY29udmVydE1lc3NhZ2UobWVzc2FnZTIsIHJlcG9ydDIpOwotCWFzc2VydEVxdWFscygiVGhlIHJlcG9ydCB3aXRoIHRoZSBuZXN0ZWQgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIDEgbWVzc2FnZS4iLCAxLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgY29udGFpbmVyIG1lc3NhZ2UgVVJJIGlzIGluY29ycmVjdC4iLCAiZmlsZTovc29tZXVyaTIiLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBjb250YWluZXIgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIDEgbmVzdGVkIG1lc3NhZ2UuIiwgMSwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmVzdGVkIG1lc3NhZ2UgVVJJIGlzIGluY29ycmVjdC4iLCAiZmlsZTovc29tZXVyaTIiLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBuZXN0ZWQgbWVzc2FnZSBzdHJpbmcgaXMgaW5jb3JyZWN0LiIsICJtZXNzYWdlIiwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRNZXNzYWdlKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG5lc3RlZCBtZXNzYWdlIGxpbmUgbnVtYmVyIGlzIGluY29ycmVjdC4iLCAxLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldExpbmVOdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmVzdGVkIG1lc3NhZ2UgY29sdW1uIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMiwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRDb2x1bW5OdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmVzdGVkIG1lc3NhZ2Ugc2V2ZXJpdHkgaXMgaW5jb3JyZWN0LiIsIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0U2V2ZXJpdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIGEgbmVzdGVkIG1lc3NhZ2UuIiwgMSwgcmVwb3J0Mi5nZXROZXN0ZWRNZXNzYWdlcygpLnNpemUoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IGNvbnZlcnRpbmcgYSBXU0RMIHZhbGlkYXRpb24gcmVwb3J0IHRvIGEgWE1MIHZhbGlkYXRpb24gcmVwb3J0LgotICAgKiBUaGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2VzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbmV3IHJlcG9ydC4KLSAgICogMS4gVGVzdCB0aGF0IGEgcmVndWxhciBtZXNzYWdlIGlzIGFkZGVkIGFzIGlzLgotICAgKiAyLiBUZXN0IHRoYXQgYSBuZXN0ZWQgbWVzc2FnZSBpcyBhZGRlZCBhcyBhIG5lc3RlZCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydCgpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSByZWd1bGFyIG1lc3NhZ2UgaXMgYWRkZWQgYXMgaXMuCi0JVmFsaWRhdGlvbkluZm9JbXBsIHdzZGxyZXBvcnQgPSBuZXcgVmFsaWRhdGlvbkluZm9JbXBsKCJmaWxlOi9zb21ldXJpIiwgbmV3IE1lc3NhZ2VHZW5lcmF0b3IoUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UudmFsaWRhdGV3c2RsIikpKTsKLQl3c2RscmVwb3J0LmFkZEVycm9yKCJtZXNzYWdlIiwgMSwgMiwgImZpbGU6L3NvbWV1cmkiKTsKLQlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCA9IHZhbGlkYXRvci5jb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQod3NkbHJlcG9ydCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVwb3J0IGRvZXMgbm90IGhhdmUgMSBtZXNzYWdlLiIsIDEsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugc3RyaW5nIGlzIGluY29ycmVjdC4iLCAibWVzc2FnZSIsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRNZXNzYWdlKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgbGluZSBudW1iZXIgaXMgaW5jb3JyZWN0LiIsIDEsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRMaW5lTnVtYmVyKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgY29sdW1uIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldENvbHVtbk51bWJlcigpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHNldmVyaXR5IGlzIGluY29ycmVjdC4iLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0U2V2ZXJpdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBVUkkgaXMgaW5jb3JyZWN0LiIsICJmaWxlOi9zb21ldXJpIiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIGhhcyBhbiBpbmNvcnJlY3RseSByZWdpc3RyZWQgbmVzdGVkIG1lc3NhZ2UuIiwgMCwgcmVwb3J0LmdldE5lc3RlZE1lc3NhZ2VzKCkuc2l6ZSgpKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYSBuZXN0ZWQgbWVzc2FnZSBpcyBhZGRlZCBhcyBhIG5lc3RlZCBtZXNzYWdlLgotCVZhbGlkYXRpb25JbmZvSW1wbCB3c2RscmVwb3J0MiA9IG5ldyBWYWxpZGF0aW9uSW5mb0ltcGwoImZpbGU6L3NvbWV1cmkiLCBuZXcgTWVzc2FnZUdlbmVyYXRvcihSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS52YWxpZGF0ZXdzZGwiKSkpOwotCXdzZGxyZXBvcnQyLmFkZEVycm9yKCJtZXNzYWdlIiwgMSwgMiwgImZpbGU6L3NvbWV1cmkyIik7Ci0JVmFsaWRhdGlvblJlcG9ydCByZXBvcnQyID0gdmFsaWRhdG9yLmNvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydCh3c2RscmVwb3J0Mik7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVwb3J0IGRvZXMgbm90IGhhdmUgMSBtZXNzYWdlLiIsIDEsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIFVSSSBpcyBpbmNvcnJlY3QuIiwgImZpbGU6L3NvbWV1cmkyIiwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRVcmkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIDEgbmVzdGVkIG1lc3NhZ2UuIiwgMSwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBVUkkgaXMgaW5jb3JyZWN0LiIsICJmaWxlOi9zb21ldXJpMiIsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0VXJpKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugc3RyaW5nIGlzIGluY29ycmVjdC4iLCAibWVzc2FnZSIsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0TWVzc2FnZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIGxpbmUgbnVtYmVyIGlzIGluY29ycmVjdC4iLCAxLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldExpbmVOdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBjb2x1bW4gbnVtYmVyIGlzIGluY29ycmVjdC4iLCAyLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldENvbHVtbk51bWJlcigpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHNldmVyaXR5IGlzIGluY29ycmVjdC4iLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldFNldmVyaXR5KCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgZG9lcyBub3QgaGF2ZSBhIG5lc3RlZCBtZXNzYWdlLiIsIDEsIHJlcG9ydDIuZ2V0TmVzdGVkTWVzc2FnZXMoKS5zaXplKCkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2FkMzgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBleHRlbmRzIHZhbGlkYXRvciB0byBleHBvc2UgdGhlIHByb3RlY3RlZCBtZXRob2RzCi0gKiBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvcldyYXBwZXIgZXh0ZW5kcyBWYWxpZGF0b3IgCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvciNhZGRJbmZvVG9NZXNzYWdlKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2UsIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2UpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRJbmZvVG9NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlLCBJTWVzc2FnZSBtZXNzYWdlKSAKLSAgewotCXN1cGVyLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIG1lc3NhZ2UpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3Ijc2V0dXBWYWxpZGF0aW9uKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldHVwVmFsaWRhdGlvbihOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0Jc3VwZXIuc2V0dXBWYWxpZGF0aW9uKGNvbnRleHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3IjdGVhcmRvd25WYWxpZGF0aW9uKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlYXJkb3duVmFsaWRhdGlvbihOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0Jc3VwZXIudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3IjY29udmVydE1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2UsIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm8pCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb252ZXJ0TWVzc2FnZShJVmFsaWRhdGlvbk1lc3NhZ2UgbWVzc2FnZSwgVmFsaWRhdGlvbkluZm8gY29udmVydGVkUmVwb3J0KSAKLSAgewotCXN1cGVyLmNvbnZlcnRNZXNzYWdlKG1lc3NhZ2UsIGNvbnZlcnRlZFJlcG9ydCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLlZhbGlkYXRvciNjb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydCkKLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uUmVwb3J0IGNvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydChJVmFsaWRhdGlvblJlcG9ydCByZXBvcnQpIAotICB7Ci0JcmV0dXJuIHN1cGVyLmNvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydChyZXBvcnQpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBYTUwgZ3JhbW1hciBwb29sIGRlZmluZWQgZm9yIHRoZSBnaXZlbiBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRleHQKLSAgICogCQlUaGUgY29udGV4dCB0byB1c2UgdG8gcmV0cmlldmUgdGhlIFhNTCBncmFtbWFyIHBvb2wuCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgWE1MIGdyYW1tYXIgcG9vbCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRleHQgb3IgbnVsbCBpZiBub25lIGlzIGFzc29jaWF0ZWQuCi0gICAqLwotICBwdWJsaWMgWE1MR3JhbW1hclBvb2wgZ2V0WE1MR3JhbW1hclBvb2xGb3JDb250ZXh0KE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCkKLSAgewotCXJldHVybiAoWE1MR3JhbW1hclBvb2wpeG1sR3JhbW1hclBvb2xzLmdldChjb250ZXh0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgWFNEIGdyYW1tYXIgcG9vbCBkZWZpbmVkIGZvciB0aGUgZ2l2ZW4gY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBjb250ZXh0Ci0gICAqIAkJVGhlIGNvbnRleHQgdG8gdXNlIHRvIHJldHJpZXZlIHRoZSBYU0QgZ3JhbW1hciBwb29sLgotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIFhTRCBncmFtbWFyIHBvb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG9yIG51bGwgaWYgbm9uZSBpcyBhc3NvY2lhdGVkLgotICAgKi8KLSAgcHVibGljIFhNTEdyYW1tYXJQb29sIGdldFhTREdyYW1tYXJQb29sRm9yQ29udGV4dChOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpCi0gIHsKLQlyZXR1cm4gKFhNTEdyYW1tYXJQb29sKXhzZEdyYW1tYXJQb29scy5nZXQoY29udGV4dCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFeHBvc2UgdGhlIFhNTCBncmFtbWFyIHBvb2xzIEhhc2hNYXAgZm9yIHRlc3RpbmcuCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIFhNTCBncmFtbWFyIHBvb2xzIEhhc2hNYXAuCi0gICAqLwotICBwdWJsaWMgSGFzaE1hcCBnZXRYTUxHcmFtbWFyUG9vbHNNYXAoKQotICB7Ci0JcmV0dXJuIHhtbEdyYW1tYXJQb29sczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEV4cG9zZSB0aGUgWFNEIGdyYW1tYXIgcG9vbHMgSGFzaE1hcCBmb3IgdGVzdGluZy4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgWFNEIGdyYW1tYXIgcG9vbHMgSGFzaE1hcC4KLSAgICovCi0gIHB1YmxpYyBIYXNoTWFwIGdldFhTREdyYW1tYXJQb29sc01hcCgpCi0gIHsKLQlyZXR1cm4geHNkR3JhbW1hclBvb2xzOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDdiODNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBFY2xpcHNlIHNwZWNpZmljIFdTREwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV1NETFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0byBlbnN1cmUgdGhlIFVSSSByZXNvbHZlciBpcyBub3QgbnVsbCBpbiB0aGUgRWNsaXBzZQotICAgKiBzcGVjaWZpYyBYTUwgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVSSVJlc29sdmVySXNSZWdpc3RlcmVkKCkKLSAgewotCVdTRExWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBXU0RMVmFsaWRhdG9yV3JhcHBlcigpOwotCWFzc2VydE5vdE51bGwoIlRoZSBVUkkgcmVzb2x2ZXIgaXMgbnVsbC4iLCB2YWxpZGF0b3IuZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0MjM0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBXcmFwcGVyIGZvciB0aGUgRWNsaXBzZSBXU0RMIHZhbGlkYXRvciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgV1NETFZhbGlkYXRvciAKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3JXcmFwcGVyKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpCi0gIHsKLQlyZXR1cm4gdXJpUmVzb2x2ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS92YWxpZGF0ZXdzZGwucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS92YWxpZGF0ZXdzZGwucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE3ZmNlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvdmFsaWRhdGV3c2RsLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEdXBsaWNhdGUgZXJyb3IgbWVzc2FnZSBmb3IgdGVzdGluZwotX1JFRl9GSUxFX0VSUk9SX01FU1NBR0UgICAgICAgICAgPSBSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh7MH0pLiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjNjA1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFVSSVJlc29sdmVyIHRlc3RzLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBVUklSZXNvbHZlciB1cmlSZXNvbHZlciA9IG51bGw7Ci0gLyoqCi0gICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICogCi0gICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShVUklSZXNvbHZlclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXVyaVJlc29sdmVyID0gbmV3IFVSSVJlc29sdmVyKCk7CQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplQWJzb2x1dGVGaWxlKCkKLSAgewotICAJLy8gU3lzdGVtIGlkIGlzIGFic29sdXRlIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLgotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiZmlsZTovYzovc29tZXBhdGgvbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIGFic29sdXRlIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLiIsIHN5c3RlbUlkLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgCQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlKCkKLSAgewotICAJLy8gU3lzdGVtIGlkIGlzIHJlbGF0aXZlIAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAibXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIHNpbXBsZSByZWxhdGl2ZSBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU3RhcnRzV2l0aERvdERvdCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgaXMgcmVsYXRpdmUgd2l0aCAuLi8KLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIi4uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSB3aXRoIC4uLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU3RhcnRzV2l0aERvdERvdFR3aWNlKCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBpcyByZWxhdGl2ZSB3aXRoIC4uLy4uLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiLi4vLi4vbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIHJlbGF0aXZlIHdpdGggLi4vLi4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVTdGFydHNXaXRoRG90KCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBpcyByZWxhdGl2ZSB3aXRoIC4vCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICIuL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSB3aXRoIC4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVTdGFydHNXaXRoRG90VHdpY2UoKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGlzIHJlbGF0aXZlIHdpdGggLi8uLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiLi8uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSB3aXRoIC4vLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZVN0YXJ0c1dpdGhTbGFzaCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgaXMgcmVsYXRpdmUgYmVnaW5uaW5nIHdpdGggLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSBiZWdpbm5pbmcgd2l0aCAvIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVEb3REb3RJbk1pZGRsZSgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgY29udGFpbnMgLi4vIGluIHRoZSBtaWRkbGUKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gInNvbWVwYXRoLy4uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSBhbmQgY29udGFpbnMgLi4vIGluIHRoZSBtaWRkbGUgYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZUZvdEluTWlkZGxlKCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBjb250YWlucyAuLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lcGF0aC8uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSBhbmQgY29udGFpbnMgLi8gaW4gdGhlIG1pZGRsZSBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWxpemVSZWxhdGl2ZUZpbGVEb3REb3RJbk1pZGRsZU9mQmFzZSgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIGNvbnRhaW5zIC4uLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoLy4uL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJteWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygiYmFzZUxvY2F0aW9uIGNvbnRhaW5zIC4uLyBpbiB0aGUgbWlkZGxlIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVEb3RJbk1pZGRsZU9mQmFzZSgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIGNvbnRhaW5zIC4vIGluIHRoZSBtaWRkbGUKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvLi9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAibXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoImJhc2VMb2NhdGlvbiBjb250YWlucyAuLyBpbiB0aGUgbWlkZGxlIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVCYXNlU3RhcnRzV2l0aFNsYXNoRG90RG90KCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gc3RhcnRzIHdpdGggLy4uLyAKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovLi4vc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJiYXNlTG9jYXRpb24gc3RhcnRzIHdpdGggLi4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi8uLi9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVCYXNlU3RhcnRzV2l0aFNsYXNoRG90KCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gc3RhcnRzIHdpdGggLy4vCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6Ly4vc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJiYXNlTG9jYXRpb24gc3RhcnRzIHdpdGggLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZUJhc2VTdGFydHNXaXRoRG90RG90KCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gc3RhcnRzIHdpdGggLi4vIAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi4uL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJteWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygiYmFzZUxvY2F0aW9uIHN0YXJ0cyB3aXRoIC4uLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTouLi9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVCYXNlU3RhcnRzV2l0aERvdCgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIHN0YXJ0cyB3aXRoIC4vIAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi4vc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJiYXNlTG9jYXRpb24gc3RhcnRzIHdpdGggLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6c29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU29tZWRpckRvdERvdCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgY29udGFpbnMgc29tZWRpci4uLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lZGlyLi4vbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGhhcyBzb21lZGlyLi4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9zb21lcGF0aC9zb21lZGlyLi4vbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU29tZWRpckRvdCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgY29udGFpbnMgc29tZWRpci4vIGluIHRoZSBtaWRkbGUKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gInNvbWVkaXIuL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBoYXMgc29tZWRpci4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9zb21lcGF0aC9zb21lZGlyLi9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVOdWxsU3lzdGVtSWQoKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGlzIG51bGwKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gbnVsbDsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgbnVsbC4iLCBudWxsLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZU51bGxCYXNlTG9jYXRpb24oKQotICB7Ci0gICAgLy8gQmFzZSBsb2NhdGlvbiBpcyBudWxsCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gbnVsbDsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lZGlyLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgbnVsbC4iLCBudWxsLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVN5c3RlbUlkQWJzb2x1dGVOdWxsQmFzZUxvY2F0aW9uKCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gaXMgbnVsbAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJudWxsIjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJmaWxlOi9zb21lZGlyLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgbnVsbC4iLCAiZmlsZTovc29tZWRpci4vbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJiYzc1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgQW50TG9nZ2VyLgotICovCi1wdWJsaWMgY2xhc3MgQW50TG9nZ2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBBbnRMb2dnZXJUZXN0VGFzayB0YXNrID0gbnVsbDsKLQkKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQl0YXNrID0gbmV3IEFudExvZ2dlclRlc3RUYXNrKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXRhc2sgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgbG9nIG1ldGhvZDoKLSAgICogMS4gbG9ncyBlcnJvcnMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dFcnJvcldpdGhUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX0VSUk9SLCBuZXcgVGhyb3dhYmxlKCJUSFJPV0FCTEUiKSk7Ci0JCi0JYXNzZXJ0VHJ1ZSgiV2FybmluZ3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiSW5mb3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiVmVyYm9zZXMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRWZXJib3NlcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyIGVycm9ycyB3ZXJlIG5vdCByZXBvcnRlZC4iLCAyLCB0YXNrLmdldEVycm9ycygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldEVycm9ycygpLmdldCgwKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgdGhyb3dhYmxlIHdhcyBub3QgVEhST1dBQkxFLiIsICJqYXZhLmxhbmcuVGhyb3dhYmxlOiBUSFJPV0FCTEUiLCB0YXNrLmdldEVycm9ycygpLmdldCgxKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3Mgd2FybmluZ3MgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dXYXJuaW5nV2l0aFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfV0FSTklORywgbmV3IFRocm93YWJsZSgiVEhST1dBQkxFIikpOwotCQotCWFzc2VydFRydWUoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB3YXJuaW5ncyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0RXJyb3JzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJJbmZvcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB3YXJuaW5ncyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0SW5mb3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIlZlcmJvc2VzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGVycm9ycyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0VmVyYm9zZXMoKS5pc0VtcHR5KCkpOwotCWFzc2VydEVxdWFscygiMiB3YXJuaW5ncyB3ZXJlIG5vdCByZXBvcnRlZC4iLCAyLCB0YXNrLmdldFdhcm5pbmdzKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHdhcyBub3QgTUVTU0FHRS4iLCAiTUVTU0FHRSIsIHRhc2suZ2V0V2FybmluZ3MoKS5nZXQoMCkpOwotCWFzc2VydEVxdWFscygiVGhlIHRocm93YWJsZSB3YXMgbm90IFRIUk9XQUJMRS4iLCAiamF2YS5sYW5nLlRocm93YWJsZTogVEhST1dBQkxFIiwgdGFzay5nZXRXYXJuaW5ncygpLmdldCgxKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgaW5mb3MgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dJbmZvV2l0aFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfSU5GTywgbmV3IFRocm93YWJsZSgiVEhST1dBQkxFIikpOwotCQotCWFzc2VydFRydWUoIldhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGluZm9zIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGluZm9zIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIlZlcmJvc2VzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGVycm9ycyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0VmVyYm9zZXMoKS5pc0VtcHR5KCkpOwotCWFzc2VydEVxdWFscygiMiBpbmZvcyB3ZXJlIG5vdCByZXBvcnRlZC4iLCAyLCB0YXNrLmdldEluZm9zKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHdhcyBub3QgTUVTU0FHRS4iLCAiTUVTU0FHRSIsIHRhc2suZ2V0SW5mb3MoKS5nZXQoMCkpOwotCWFzc2VydEVxdWFscygiVGhlIHRocm93YWJsZSB3YXMgbm90IFRIUk9XQUJMRS4iLCAiamF2YS5sYW5nLlRocm93YWJsZTogVEhST1dBQkxFIiwgdGFzay5nZXRJbmZvcygpLmdldCgxKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgdmVyYm9zZXMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dWZXJib3NlV2l0aFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfVkVSQk9TRSwgbmV3IFRocm93YWJsZSgiVEhST1dBQkxFIikpOwotCQotCWFzc2VydFRydWUoIldhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkluZm9zIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyIHZlcmJvc2VzIHdlcmUgbm90IHJlcG9ydGVkLiIsIDIsIHRhc2suZ2V0VmVyYm9zZXMoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRWZXJib3NlcygpLmdldCgwKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgdGhyb3dhYmxlIHdhcyBub3QgVEhST1dBQkxFLiIsICJqYXZhLmxhbmcuVGhyb3dhYmxlOiBUSFJPV0FCTEUiLCB0YXNrLmdldFZlcmJvc2VzKCkuZ2V0KDEpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgbG9nIG1ldGhvZDoKLSAgICogMS4gbG9ncyBlcnJvcnMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dFcnJvcldpdGhvdXRUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX0VSUk9SKTsKLQkKLQlhc3NlcnRUcnVlKCJXYXJuaW5ncyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJJbmZvcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEluZm9zKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJWZXJib3NlcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFZlcmJvc2VzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEgZXJyb3Igd2FzIG5vdCByZXBvcnRlZC4iLCAxLCB0YXNrLmdldEVycm9ycygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldEVycm9ycygpLmdldCgwKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3Mgd2FybmluZ3MgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dXYXJuaW5nV2l0aG91dFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfV0FSTklORyk7Ci0JCi0JYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHdhcm5pbmdzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkluZm9zIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHdhcm5pbmdzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiVmVyYm9zZXMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRWZXJib3NlcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIxIGVycm9yIHdhcyBub3QgcmVwb3J0ZWQuIiwgMSwgdGFzay5nZXRXYXJuaW5ncygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldFdhcm5pbmdzKCkuZ2V0KDApKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgbG9nIG1ldGhvZDoKLSAgICogMS4gbG9ncyBpbmZvcyBjb3JyZWN0bHkuCi0gICAqIDIuIHJlY29yZHMgdGhlIG1lc3NhZ2UgY29ycmVjdGx5LgotICAgKiAzLiByZWNvcmRzIHRoZSB0aHJvd2FibGUgY29ycmVjdGx5LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdExvZ0luZm9XaXRob3V0VGhyb3dhYmxlKCkKLSAgewotCUFudExvZ2dlciBsb2dnZXIgPSBuZXcgQW50TG9nZ2VyKHRhc2spOwotCWxvZ2dlci5sb2coIk1FU1NBR0UiLCBJTG9nZ2VyLlNFVl9JTkZPKTsKLQkKLQlhc3NlcnRUcnVlKCJXYXJuaW5ncyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBpbmZvcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBpbmZvcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0RXJyb3JzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJWZXJib3NlcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFZlcmJvc2VzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEgaW5mbyB3YXMgbm90IHJlcG9ydGVkLiIsIDEsIHRhc2suZ2V0SW5mb3MoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRJbmZvcygpLmdldCgwKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgdmVyYm9zZXMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dWZXJib3NlV2l0aG91dFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfVkVSQk9TRSk7Ci0JCi0JYXNzZXJ0VHJ1ZSgiV2FybmluZ3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgdmVyYm9zZXMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJFcnJvcnMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgdmVyYm9zZXMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEVycm9ycygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiSW5mb3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgdmVyYm9zZXMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEluZm9zKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEgdmVyYm9zZSB3YXMgbm90IHJlcG9ydGVkLiIsIDEsIHRhc2suZ2V0VmVyYm9zZXMoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRWZXJib3NlcygpLmdldCgwKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3RUYXNrLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXJUZXN0VGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzIyNDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3RUYXNrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci0KLS8qKgotICogQSBkdW1teSB0YXNrIHRoYXQgd2lsbCBhbGxvdyB0ZXN0aW5nIG9mIHRoZSBhbmQgbG9nZ2VyLgotICovCi1wdWJsaWMgY2xhc3MgQW50TG9nZ2VyVGVzdFRhc2sgZXh0ZW5kcyBUYXNrIAotewotICBwcm90ZWN0ZWQgTGlzdCBlcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IHdhcm5pbmdzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgTGlzdCBpbmZvcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIExpc3QgdmVyYm9zZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzayNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtc2csIGludCBtc2dMZXZlbCkgCi0gIHsKLQlpZihtc2dMZXZlbCA9PSBQcm9qZWN0Lk1TR19FUlIpCi0JewotCSAgZXJyb3JzLmFkZChtc2cpOwotCX0KLQllbHNlIGlmKG1zZ0xldmVsID09IFByb2plY3QuTVNHX1dBUk4pCi0JewotCSAgd2FybmluZ3MuYWRkKG1zZyk7Ci0JfQotCWVsc2UgaWYobXNnTGV2ZWwgPT0gUHJvamVjdC5NU0dfSU5GTykKLQl7Ci0JICBpbmZvcy5hZGQobXNnKTsKLQl9Ci0JZWxzZSBpZihtc2dMZXZlbCA9PSBQcm9qZWN0Lk1TR19WRVJCT1NFKQotCXsKLQkgIHZlcmJvc2VzLmFkZChtc2cpOwotCX0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrI2xvZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtc2cpIAotICB7Ci0JbG9nKG1zZywgUHJvamVjdC5NU0dfSU5GTyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGVycm9ycyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBlcnJvcnMgdGhhdCB3ZXJlIGxvZ2dlZC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVycm9ycygpCi0gIHsKLQlyZXR1cm4gZXJyb3JzOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB3YXJuaW5ncyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSB3YXJuaW5ncyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0V2FybmluZ3MoKQotICB7Ci0JcmV0dXJuIHdhcm5pbmdzOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBpbmZvcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBpbmZvcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0SW5mb3MoKQotICB7Ci0JcmV0dXJuIGluZm9zOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB2ZXJib3NlcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSB2ZXJib3NlcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0VmVyYm9zZXMoKQotICB7Ci0JcmV0dXJuIHZlcmJvc2VzOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUYXNrLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUYXNrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZTEzMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvV1NETFZhbGlkYXRlVGFzay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBleHBvc2UgZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBXU0RMVmFsaWRhdGUgY2xhc3MgZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGVUYXNrIGV4dGVuZHMgV1NETFZhbGlkYXRlCi17Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQuV1NETFZhbGlkYXRlI2dldEZpbGVMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEZpbGVMaXN0KCkKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRGaWxlTGlzdCgpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1dTRExWYWxpZGF0ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1dTRExWYWxpZGF0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5Nzc2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLkZpbGVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuc2VsZWN0b3JzLkZpbGVuYW1lU2VsZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5CYXNlVGVzdENhc2U7Ci0KLS8qKgotICogV1NETFZhbGlkYXRlIGFudCB0YXNrIHRlc3RzLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRlVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBCQVNFX0RJUjs7Ci0gIHByaXZhdGUgUHJvamVjdCBwcm9qZWN0OwotCi0gLyoqCi0gICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICogCi0gICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShXU0RMVmFsaWRhdGVUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQkFTRV9ESVIgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSDsKLSAgICAgIEJBU0VfRElSID0gQkFTRV9ESVIucmVwbGFjZSgnLycsIEZpbGUuc2VwYXJhdG9yQ2hhcik7Ci0gICAgICBpZihCQVNFX0RJUi5zdGFydHNXaXRoKCJcXCIpKQotICAgICAgewotICAgICAgICBCQVNFX0RJUiA9IEJBU0VfRElSLnN1YnN0cmluZygxKTsgIAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAKLSAgICB9Ci0gICAgcHJvamVjdCA9IG5ldyBQcm9qZWN0KCk7Ci0gICAgcHJvamVjdC5zZXRCYXNlRGlyKG5ldyBGaWxlKEJBU0VfRElSKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZmlsZSB3aXRoIGEgcmVsYXRpdmUgbG9jYXRpb24gaXMgcmVzb2x2ZWQgcHJvcGVybHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVsYXRpdmVTaW5nbGVGaWxlTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIGZpbGVMb2MgPSAiZmlsZS53c2RsIjsKLSAgICBTdHJpbmcgcmVzb2x2ZWRMb2NhdGlvbiA9ICgiZmlsZTovLy8iICsgQkFTRV9ESVIgKyBmaWxlTG9jKS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICBXU0RMVmFsaWRhdGVUYXNrIHdzZGxWYWxpZGF0ZVRhc2sgPSBuZXcgV1NETFZhbGlkYXRlVGFzaygpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICB3c2RsVmFsaWRhdGVUYXNrLnNldEZpbGUoZmlsZUxvYyk7Ci0gICAgTGlzdCBmaWxlTGlzdCA9IHdzZGxWYWxpZGF0ZVRhc2suZ2V0RmlsZUxpc3QoKTsKLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxpc3QgZG9lcyBub3QgY29udGFpbiBvbmx5IG9uZSBmaWxlLiIsIDEsIGZpbGVMaXN0LnNpemUoKSk7Ci0gICAgLy8gVGhlIGZpbGUgbG9jYXRpb25zIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZSB0byBhdm9pZCBkcml2ZSBsZXR0ZXIgY2FzZSBkaWZmZXJlbmNlcyBvbiB3aW5kb3dzLiBpZS4gQyB2cyBjLgotICAgIGFzc2VydEVxdWFscygiVGhlIGZpbGUgbG9jYXRpb24gJyIgKyBmaWxlTGlzdC5nZXQoMCkgKyAiJyBpcyBub3QgY29ycmVjdGx5IHJlc29sdmVkIHRvIHRoZSBiYXNlIGxvY2F0aW9uLiIsIHJlc29sdmVkTG9jYXRpb24udG9Mb3dlckNhc2UoKSwgKChTdHJpbmcpZmlsZUxpc3QuZ2V0KDApKS50b0xvd2VyQ2FzZSgpKTsKLSAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCBhIHNpbmdsZSBmaWxlIHdpdGggYW4gYWJzb2x1dGUgbG9jYXRpb24gaXMgcmVzb2x2ZWQgcHJvcGVybHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWJzb2x1dGVTaW5nbGVGaWxlTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIGZpbGVMb2MgPSBCQVNFX0RJUiArICJmaWxlLndzZGwiOwotICAgIFN0cmluZyByZXNvbHZlZExvY2F0aW9uID0gKEZJTEVfUFJPVE9DT0wgKyBmaWxlTG9jKS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICBXU0RMVmFsaWRhdGVUYXNrIHdzZGxWYWxpZGF0ZVRhc2sgPSBuZXcgV1NETFZhbGlkYXRlVGFzaygpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICB3c2RsVmFsaWRhdGVUYXNrLnNldEZpbGUoZmlsZUxvYyk7Ci0gICAgTGlzdCBmaWxlTGlzdCA9IHdzZGxWYWxpZGF0ZVRhc2suZ2V0RmlsZUxpc3QoKTsKLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxpc3QgZG9lcyBub3QgY29udGFpbiBvbmx5IG9uZSBmaWxlLiIsIDEsIGZpbGVMaXN0LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJUaGUgZmlsZSBsb2NhdGlvbiAnIiArIGZpbGVMb2MgKyAiJyBpcyBtb2RpZmllZC4iLCByZXNvbHZlZExvY2F0aW9uLnRvTG93ZXJDYXNlKCksICgoU3RyaW5nKWZpbGVMaXN0LmdldCgwKSkudG9Mb3dlckNhc2UoKSk7Ci0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZmlsZSB3aXRoIGFuIGFic29sdXRlLCByZW1vdGUgbG9jYXRpb24gaXMgcmVzb2x2ZWQgcHJvcGVybHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWJzb2x1dGVTaW5nbGVGaWxlUmVtb3RlTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSAiaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIjsKLSAgICBTdHJpbmcgZmlsZUxvYyA9ICJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMy0wNy9DYXRhbG9nLndzZGwiOwotICAgIFdTRExWYWxpZGF0ZVRhc2sgd3NkbFZhbGlkYXRlVGFzayA9IG5ldyBXU0RMVmFsaWRhdGVUYXNrKCk7Ci0gICAgd3NkbFZhbGlkYXRlVGFzay5zZXRQcm9qZWN0KHByb2plY3QpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0RmlsZShmaWxlTG9jKTsKLSAgICBMaXN0IGZpbGVMaXN0ID0gd3NkbFZhbGlkYXRlVGFzay5nZXRGaWxlTGlzdCgpOwotICAgIGFzc2VydEVxdWFscygiVGhlIGZpbGUgbGlzdCBkb2VzIG5vdCBjb250YWluIG9ubHkgb25lIGZpbGUuIiwgMSwgZmlsZUxpc3Quc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxvY2F0aW9uICciICsgZmlsZUxvYyArICInIGlzIG1vZGlmaWVkLiIsIHJlc29sdmVkTG9jYXRpb24udG9Mb3dlckNhc2UoKSwgKChTdHJpbmcpZmlsZUxpc3QuZ2V0KDApKS50b0xvd2VyQ2FzZSgpKTsKLSAgICAKLSAgfQotICAKLS8qKgotICAgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZmlsZSBpbiBhIGZpbGVzZXQgd2l0aCBhIHJlbGF0aXZlIGxvY2F0aW9uIGlzIHJlc29sdmVkIHByb3Blcmx5Ci0gICAqIHdoZW4gbm8gZGlyZWN0b3J5IGlzIHNwZWNpZmllZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWxhdGl2ZVNpbmdsZUZpbGVJbkZpbGVzZXROb0RpclNwZWNpZmllZCgpCi0gIHsKLSAgICBTdHJpbmcgZmlsZUxvYyA9ICJFbXB0eS53c2RsIjsKLSAgICBTdHJpbmcgYmFzZV9kaXIgPSBCQVNFX0RJUiArIFNBTVBMRVNfRElSICsgIldTREwiICsgRmlsZS5zZXBhcmF0b3IgKyAiU2VsZkNvbnRhaW5lZCI7Ci0gICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSAoImZpbGU6Ly8vIiArIGJhc2VfZGlyICsgIi8iICsgZmlsZUxvYykucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgYmFzZV9kaXIgPSBiYXNlX2Rpci5yZXBsYWNlKCcvJywgRmlsZS5zZXBhcmF0b3JDaGFyKTsKLSAgICAKLSAgICBXU0RMVmFsaWRhdGVUYXNrIHdzZGxWYWxpZGF0ZVRhc2sgPSBuZXcgV1NETFZhbGlkYXRlVGFzaygpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICAKLSAgICBGaWxlU2V0IGZpbGVzZXQgPSB3c2RsVmFsaWRhdGVUYXNrLmNyZWF0ZUZpbGVzZXQoKTsKLSAgICBmaWxlc2V0LnNldFByb2plY3QocHJvamVjdCk7Ci0gICAgZmlsZXNldC5zZXREaXIobmV3IEZpbGUoYmFzZV9kaXIpKTsKLSAgIAotICAgIEZpbGVuYW1lU2VsZWN0b3IgZmlsZW5hbWVTZWxlY3RvciA9IG5ldyBGaWxlbmFtZVNlbGVjdG9yKCk7Ci0gICAgZmlsZW5hbWVTZWxlY3Rvci5zZXROYW1lKGZpbGVMb2MpOwotICAgIGZpbGVzZXQuYWRkRmlsZW5hbWUoZmlsZW5hbWVTZWxlY3Rvcik7Ci0gICAgLy9maWxlc2V0LnNldEZpbGUobmV3IEZpbGUoZmlsZUxvYykpOwotICAgIAotICAgIExpc3QgZmlsZUxpc3QgPSB3c2RsVmFsaWRhdGVUYXNrLmdldEZpbGVMaXN0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJUaGUgZmlsZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gb25seSBvbmUgZmlsZS4iLCAxLCBmaWxlTGlzdC5zaXplKCkpOwotICAgIC8vIFRoZSBmaWxlIGxvY2F0aW9ucyBhcmUgY29udmVydGVkIHRvIGxvd2VyIGNhc2UgdG8gYXZvaWQgZHJpdmUgbGV0dGVyIGNhc2UgZGlmZmVyZW5jZXMgb24gd2luZG93cy4gaWUuIEMgdnMgYy4KLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxvY2F0aW9uICciICsgZmlsZUxpc3QuZ2V0KDApICsgIicgaXMgbm90IGNvcnJlY3RseSByZXNvbHZlZCB0byB0aGUgYmFzZSBsb2NhdGlvbi4iLCByZXNvbHZlZExvY2F0aW9uLnRvTG93ZXJDYXNlKCksICgoU3RyaW5nKWZpbGVMaXN0LmdldCgwKSkudG9Mb3dlckNhc2UoKSk7Ci0gICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjQ1OGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uTWVzc2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0b3JSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuU3RhbmRhcmRMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5CYXNlVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGVUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17CQotCVdTRExWYWxpZGF0ZVdyYXBwZXIgdmFsaWRhdGUgPSBudWxsOwotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotCXsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJdmFsaWRhdGUgPSBuZXcgV1NETFZhbGlkYXRlV3JhcHBlcigpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIAotCXsKLQkJdmFsaWRhdGUgPSBudWxsOwotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IHRoZSB2YWxpZGF0ZUZpbGUgbWV0aG9kLgotCSAqIDEuIEEgdmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIHZhbGlkLgotCSAqIDIuIEFuIGludmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIGludmFsaWQuCi0JICogMy4gQSBmaWxlIHRoYXQgY2FuJ3QgYmUgZm91bmQgc2hvdWxkIHN1Y2NlZWQgYW5kIHJlcG9ydCB0aGF0IGl0J3MgaW52YWxpZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVGaWxlKCkKLQl7Ci0JCVN0cmluZyB2YWxpZEZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJQYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIjsKLQkJaWYoUExVR0lOX0FCU09MVVRFX1BBVEguc3RhcnRzV2l0aCgiLyIpKQotCQl7Ci0JCQl2YWxpZEZpbGUgPSAiZmlsZTovLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwiOwotCQl9Ci0JCVN0cmluZyBpbnZhbGlkRmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJaW52YWxpZEZpbGUgPSAiZmlsZTovLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbCI7Ci0JCX0KLQkJU3RyaW5nIG5vbmV4aXN0YW50RmlsZSA9ICJub25leGlzdGFudGZpbGUud3NkbCI7Ci0JCS8vIDEuIEEgdmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIHZhbGlkLgotCQlJVmFsaWRhdGlvblJlcG9ydCByZXBvcnQgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUodmFsaWRGaWxlKTsKLQkJYXNzZXJ0RmFsc2UoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIGZvciBhIHZhbGlkIGZpbGUuIiwgcmVwb3J0Lmhhc0Vycm9ycygpKTsKLQkJCi0JCS8vIDIuIEFuIGludmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIGludmFsaWQuCi0JCUlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUoaW52YWxpZEZpbGUpOwotCQlhc3NlcnRUcnVlKCJFcnJvcnMgd2VyZSBub3QgcmVwb3J0ZWQgZm9yIGFuIGludmFsaWQgZmlsZS4iLCByZXBvcnQyLmhhc0Vycm9ycygpKTsKLQkJCi0JCS8vIDMuIEEgZmlsZSB0aGF0IGNhbid0IGJlIGZvdW5kIHNob3VsZCBzdWNjZWVkIGFuZCByZXBvcnQgdGhhdCBpdCdzIGludmFsaWQuCi0JCUlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDMgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUobm9uZXhpc3RhbnRGaWxlKTsKLQkJYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgbm90IHJlcG9ydGVkIGZvciBhIG5vbmV4aXN0YW50IGZpbGUuIiwgcmVwb3J0My5oYXNFcnJvcnMoKSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgdGhlIHZhbGlkYXRlIG1ldGhvZC4KLQkgKiAxLiBUaGUgbWV0aG9kIHNob3VsZCBzdWNjZWVkIHdpdGggb25lIGZpbGUgc3BlY2lmaWVkLgotCSAqIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHN1Y2NlZWQgYW5kIHZhbGlkYXRlIDIgZmlsZXMgd2hlbiAyIGFyZSBzcGVjaWZpZWQuCi0JICogMy4gVGhlIG1ldGhvZCBzaG91bGQgb3V0cHV0IHZlcmJvc2UgaW5mb3JtYXRpb24gZm9yIHZhbGlkIGZpbGVzIHdoZW4gdmVyYm9zZSBpcyBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZSgpCi0JewotCQlTdHJpbmcgdmFsaWRGaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyAiUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJdmFsaWRGaWxlID0gImZpbGU6Ly8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJQYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIjsKLQkJfQotCQlTdHJpbmcgdmFsaWRGaWxlMiA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJdmFsaWRGaWxlMiA9ICJmaWxlOi8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyAiUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsIjsKLQkJfQotCQlJTG9nZ2VyIGN1cnJlbnRMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCk7Ci0JCVdTRExWYWxpZGF0ZVRlc3RMb2dnZXIgbG9nZ2VyID0gbmV3IFdTRExWYWxpZGF0ZVRlc3RMb2dnZXIoKTsKLQkJTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihsb2dnZXIpOwotCSAgCi0JCS8vIDEuIFRoZSBtZXRob2Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCBvbmUgZmlsZSBzcGVjaWZpZWQuCi0JCXZhbGlkYXRlLmdldFdTRExGaWxlcygpLmFkZCh2YWxpZEZpbGUpOwotCQl2YWxpZGF0ZS52YWxpZGF0ZSgpOwotCQlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1ZBTElEQVRJT05fU1VNTUFSWSwgbmV3IE9iamVjdFtde25ldyBJbnRlZ2VyKDEpLCBuZXcgSW50ZWdlcigwKX0pLCBsb2dnZXIuZ2V0SW5mb3MoKS5nZXQoMCkpOwotCQl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5jbGVhcigpOwotCQlsb2dnZXIuZ2V0SW5mb3MoKS5jbGVhcigpOwotCSAgCi0JICAJLy8gMi4gVGhlIG1ldGhvZCBzaG91bGQgc3VjY2VlZCBhbmQgdmFsaWRhdGUgMiBmaWxlcyB3aGVuIDIgYXJlIHNwZWNpZmllZC4KLQkgIAl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5hZGQodmFsaWRGaWxlKTsKLQkgIAl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5hZGQodmFsaWRGaWxlMik7Ci0JICAJdmFsaWRhdGUudmFsaWRhdGUoKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgdHdvIHZhbGlkIGZpbGVzIGZhaWxlZC4iLCBNZXNzYWdlRm9ybWF0LmZvcm1hdChXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfVkFMSURBVElPTl9TVU1NQVJZLCBuZXcgT2JqZWN0W117bmV3IEludGVnZXIoMiksIG5ldyBJbnRlZ2VyKDApfSksIGxvZ2dlci5nZXRJbmZvcygpLmdldCgwKSk7Ci0JICAJdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCkuY2xlYXIoKTsKLQkgIAlsb2dnZXIuZ2V0SW5mb3MoKS5jbGVhcigpOwotCSAgCi0JICAJLy8gMy4gVGhlIG1ldGhvZCBzaG91bGQgb3V0cHV0IHZlcmJvc2UgaW5mb3JtYXRpb24gZm9yIHZhbGlkIGZpbGVzIHdoZW4gdmVyYm9zZSBpcyBlbmFibGVkLgotCSAgCXZhbGlkYXRlLnNldFZlcmJvc2UodHJ1ZSk7Ci0JICAJdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCkuYWRkKHZhbGlkRmlsZSk7Ci0JICAJdmFsaWRhdGUudmFsaWRhdGUoKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0ZJTEVfVkFMSUQsIG5ldyBPYmplY3RbXXt2YWxpZEZpbGV9KSwgbG9nZ2VyLmdldFZlcmJvc2VzKCkuZ2V0KDApKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1ZBTElEQVRJT05fU1VNTUFSWSwgbmV3IE9iamVjdFtde25ldyBJbnRlZ2VyKDEpLCBuZXcgSW50ZWdlcigwKX0pLCBsb2dnZXIuZ2V0SW5mb3MoKS5nZXQoMCkpOwotCSAgCXZhbGlkYXRlLmdldFdTRExGaWxlcygpLmNsZWFyKCk7Ci0JICAJdmFsaWRhdGUuc2V0VmVyYm9zZShmYWxzZSk7Ci0JICAJbG9nZ2VyLmdldEluZm9zKCkuY2xlYXIoKTsKLQkgIAlsb2dnZXIuZ2V0VmVyYm9zZXMoKS5jbGVhcigpOwotCSAgCi0JICAJTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihjdXJyZW50TG9nZ2VyKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCB0aGUgZ2V0TWVzc2FnZXMgbWV0aG9kLgotCSAqIDEuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIGVycm9yLgotCSAqIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIHdhcm5pbmcuCi0JICogMy4gVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgZm9tYXR0ZWQgc3RyaW5nIGZvciAyIG1lc3NhZ2VzLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRNZXNzYWdlcygpCi0JewkKLQkJSVZhbGlkYXRpb25NZXNzYWdlIGVycm9yTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoIk1FU1NBR0UiLCAxLCAyLCBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SLCAiVVJJIik7Ci0JCUlWYWxpZGF0aW9uTWVzc2FnZSB3YXJuaW5nTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoIk1FU1NBR0UiLCAxLCAyLCBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcsICJVUkkiKTsKLQkJLy8gMS4gVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgZm9ybWF0dGVkIHN0cmluZyBmb3IgYSBzaW5nbGUgZXJyb3IuCi0JCUlWYWxpZGF0aW9uTWVzc2FnZVtdIGVycm9yTWVzc2FnZXMgPSBuZXcgSVZhbGlkYXRpb25NZXNzYWdlW117ZXJyb3JNZXNzYWdlfTsKLQkJU3RyaW5nIG1lc3NhZ2UgPSB2YWxpZGF0ZS5nZXRNZXNzYWdlcyhlcnJvck1lc3NhZ2VzKTsKLQkJYXNzZXJ0RXF1YWxzKCJUaGUgZXJyb3IgbWVzc2FnZSB3YXMgbm90IGNvcnJlY3QuIiwgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0VSUk9SX01BUktFUiArICIgMToyIE1FU1NBR0UiLCBtZXNzYWdlKTsKLQkJCi0JCS8vIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIHdhcm5pbmcuCi0JCUlWYWxpZGF0aW9uTWVzc2FnZVtdIHdhcm5pbmdNZXNzYWdlcyA9IG5ldyBJVmFsaWRhdGlvbk1lc3NhZ2VbXXt3YXJuaW5nTWVzc2FnZX07Ci0JCVN0cmluZyBtZXNzYWdlMiA9IHZhbGlkYXRlLmdldE1lc3NhZ2VzKHdhcm5pbmdNZXNzYWdlcyk7Ci0JCWFzc2VydEVxdWFscygiVGhlIHdhcm5pbmcgbWVzc2FnZSB3YXMgbm90IGNvcnJlY3QuIiwgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSICsgIiAxOjIgTUVTU0FHRSIsIG1lc3NhZ2UyKTsKLQkJCi0JCS8vIDMuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvbWF0dGVkIHN0cmluZyBmb3IgMiBtZXNzYWdlcy4KLQkJSVZhbGlkYXRpb25NZXNzYWdlW10gdHdvTWVzc2FnZXMgPSBuZXcgSVZhbGlkYXRpb25NZXNzYWdlW117ZXJyb3JNZXNzYWdlLCB3YXJuaW5nTWVzc2FnZX07Ci0JCVN0cmluZyBtZXNzYWdlMyA9IHZhbGlkYXRlLmdldE1lc3NhZ2VzKHR3b01lc3NhZ2VzKTsKLQkJYXNzZXJ0RXF1YWxzKCJUd28gbWVzc2FnZXMgd2FzIG5vdCBjb3JyZWN0LiIsIFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9FUlJPUl9NQVJLRVIgKyAiIDE6MiBNRVNTQUdFXG4iICsgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSICsgIiAxOjIgTUVTU0FHRSIsIG1lc3NhZ2UzKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCB0aGUgcGFyc2VBcmd1bWVudHMgbWV0aG9kLgotCSAqIDEuIC13c2RsMTF2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCSAqIDIuIC1leHR2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCSAqIDMuIEV4dGVuc2lvbiB2YWxpZGF0b3IgcGFyc2luZyB3aGVyZSBhIHBhcmFtIGlzIG9taXR0ZWQgc3VjY2VlZHMuCi0JICogNC4gLWxvZ2dlciBwYXJzaW5nIHN1Y2NlZWRzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IGxvZ2dlci4KLQkgKiA1LiAtRCAocHJvcGVydHkpIHBhcnNpbmcgc3VjY2VlZHMgc2V0cyB0aGUgcHJvcGVydHkgb24gdGhlIGNvbmZpZ3VyYXRpb24uCi0JICogNi4gLXYsIC12ZXJib3NlIHBhcnNpbmcgc3VjY2VlZHMgYW5kIHNldHMgdmVyYm9zZSBjb3JyZWN0bHkuCi0JICogNy4gVGhlIHNwZWNpZmllZCBXU0RMIGZpbGVzIGFyZSByZWFkIHByb3Blcmx5LgotCSAqIAotCSAqIE5vdCBjdXJyZW50bHkgdGVzdGVkOgotCSAqIAkJLXNjaGVtYQotCSAqIAkJLXNjaGVtYURpcgotCSAqIAkJLXVyaXJlc29sdmVyCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBhcnNlQXJndW1lbnRzKCkKLQl7Ci0JCS8vIDEuIC13c2RsMTF2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCQlTdHJpbmdbXSBhcmdzMSA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX1dTREwxMVZBTCwgImh0dHA6Ly93c2RsMTF2YWxpZGF0b3IiLCAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cC5IVFRQVmFsaWRhdG9yIn07Ci0JCXZhbGlkYXRlLnBhcnNlQXJndW1lbnRzKGFyZ3MxKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIFdTREwgMS4xIHZhbGlkYXRvciB3YXMgbm90IHJlZ2lzdGVyZWQuIiwgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5oYXNSZWdpc3RlcmVkVmFsaWRhdG9yKCJodHRwOi8vd3NkbDExdmFsaWRhdG9yIikpOwotCQkKLQkJLy8gMi4gLWV4dHYgcGFyc2luZyBzdWNjZWVkcyBhbmQgcmVnaXN0ZXJzIHRoZSB2YWxpZGF0b3Igd2l0aCB0aGUgV1NETCB2YWxpZGF0b3IuCi0JCVN0cmluZ1tdIGFyZ3MyID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fRVhUVkFMLCAiaHR0cDovL2V4dHZhbGlkYXRvciIsICJ2YWxpZGF0b3JjbGFzcyJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzMik7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGV4dGVuc2lvbiB2YWxpZGF0b3Igd2FzIG5vdCByZWdpc3RlcmVkLiIsIFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuaGFzUmVnaXN0ZXJlZFZhbGlkYXRvcigiaHR0cDovL2V4dHZhbGlkYXRvciIsIFZhbGlkYXRvclJlZ2lzdHJ5LkVYVF9WQUxJREFUT1IpKTsKLQkJCi0JCS8vIDMuIEV4dGVuc2lvbiB2YWxpZGF0b3IgcGFyc2luZyB3aGVyZSBhIHBhcmFtIGlzIG9taXR0ZWQgc3VjY2VlZHMuCi0JCVN0cmluZ1tdIGFyZ3MzID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fRVhUVkFMLCAiaHR0cDovL2V4dHZhbGlkYXRvcjIiLCAiLWR1bW15cGFyYW0ifTsKLQkJdmFsaWRhdGUucGFyc2VBcmd1bWVudHMoYXJnczMpOwotCQlhc3NlcnRGYWxzZSgiVGhlIFdTREwgZXh0ZW5zaW9uIHZhbGlkYXRvciB3YXMgcmVnaXN0ZXJlZCB3aXRob3V0IGVub3VnaCBpbmZvcm1hdGlvbi4iLCBWYWxpZGF0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmhhc1JlZ2lzdGVyZWRWYWxpZGF0b3IoImh0dHA6Ly9leHR2YWxpZGF0b3IyIiwgVmFsaWRhdG9yUmVnaXN0cnkuRVhUX1ZBTElEQVRPUikpOwotCQkKLQkJLy8gNC4gLWxvZ2dlciBwYXJzaW5nIHN1Y2NlZWRzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IGxvZ2dlci4KLQkJSUxvZ2dlciBjdXJyZW50TG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpOwotCQlTdHJpbmdbXSBhcmdzNCA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX0xPR0dFUiwgIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5TdGFuZGFyZExvZ2dlciJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNCk7Ci0JCWFzc2VydFRydWUoIlRoZSByZWdpc3RlcmVkIGxvZ2dlciBpcyBub3QgYSBTdGFuZGFyZExvZ2dlciIsIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKSBpbnN0YW5jZW9mIFN0YW5kYXJkTG9nZ2VyKTsKLQkJYXNzZXJ0RmFsc2UoIlRoZSByZWdpc3RlcmVkIGxvZ2dlciBpcyB0aGUgc2FtZSBhcyBvcmlnaW5hbGx5IHJlZ2lzdGVyZWQuIiwgY3VycmVudExvZ2dlci5lcXVhbHMoTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpKSk7Ci0JCUxvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5zZXRMb2dnZXIoY3VycmVudExvZ2dlcik7Ci0JCQotCQkvLyA1LiAtRCAocHJvcGVydHkpIHBhcnNpbmcgc3VjY2VlZHMgc2V0cyB0aGUgcHJvcGVydHkgb24gdGhlIGNvbmZpZ3VyYXRpb24uCi0JCVN0cmluZ1tdIGFyZ3M1ID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fUFJPUEVSVFkgKyAiU0FNUExFTkFNRT1TQU1QTEVWQUxVRSJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNSk7Ci0JCWFzc2VydEVxdWFscygiVGhlIHBhcmFtZXRlciB3YXMgbm90IHNldCBjb3JyZWN0bHkuIiwgIlNBTVBMRVZBTFVFIiwgdmFsaWRhdGUuZ2V0Q29uZmlndXJhdGlvbigpLmdldFByb3BlcnR5KCJTQU1QTEVOQU1FIikpOwotCQkKLQkJLy8gNi4gLXYsIC12ZXJib3NlIHBhcnNpbmcgc3VjY2VlZHMgYW5kIHNldHMgdmVyYm9zZSBjb3JyZWN0bHkuCi0JCVN0cmluZ1tdIGFyZ3M2ID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fVkVSQk9TRX07Ci0JCXZhbGlkYXRlLnNldFZlcmJvc2UoZmFsc2UpOwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNik7Ci0JCWFzc2VydFRydWUoIlZlcmJvc2UgaXMgbm90IHNldCB0byB0cnVlLiIsIHZhbGlkYXRlLmlzVmVyYm9zZSgpKTsKLQkJCi0JCVN0cmluZ1tdIGFyZ3M2YSA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX1ZFUkJPU0VfU0hPUlR9OwotCQl2YWxpZGF0ZS5zZXRWZXJib3NlKGZhbHNlKTsKLQkJdmFsaWRhdGUucGFyc2VBcmd1bWVudHMoYXJnczZhKTsKLQkJYXNzZXJ0VHJ1ZSgiVmVyYm9zZSBpcyBub3Qgc2V0IHRvIHRydWUuIiwgdmFsaWRhdGUuaXNWZXJib3NlKCkpOwotCQkKLQkJLy8gNy4gVGhlIHNwZWNpZmllZCBXU0RMIGZpbGVzIGFyZSByZWFkIHByb3Blcmx5LgotCQlTdHJpbmdbXSBhcmdzNyA9IG5ldyBTdHJpbmdbXXsiZmlsZW5hbWUxLndzZGwiLCAiZm9sZGVyL2ZpbGVuYW1lMi53c2RsIiwgImZvbGRlclxmaWxlbmFtZTMud3NkbCJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNyk7Ci0JCUxpc3Qgd3NkbEZpbGVzID0gdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCk7Ci0JCWFzc2VydEVxdWFscygiVGhlcmUgd2VyZSBub3QgMyBXU0RMIGZpbGVzIGxpc3RlZCB0byB2YWxpZGF0ZS4iLCAzLCB3c2RsRmlsZXMuc2l6ZSgpKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIFdTREwgZmlsZSBsaXN0IGRpZCBub3QgaW5jbHVkZSBmaWxlbmFtZTEud3NkbCIsIHdzZGxGaWxlcy5jb250YWlucygiZmlsZW5hbWUxLndzZGwiKSk7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGZpbGUgbGlzdCBkaWQgbm90IGluY2x1ZGUgZm9sZGVyL2ZpbGVuYW1lMi53c2RsIiwgd3NkbEZpbGVzLmNvbnRhaW5zKCJmb2xkZXIvZmlsZW5hbWUyLndzZGwiKSk7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGZpbGUgbGlzdCBkaWQgbm90IGluY2x1ZGUgZm9sZGVyXGZpbGVuYW1lMy53c2RsIiwgd3NkbEZpbGVzLmNvbnRhaW5zKCJmb2xkZXJcZmlsZW5hbWUzLndzZGwiKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRlc3RMb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXN0TG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNTJhNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRlc3RMb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLQotLyoqCi0gKiBBIGhlbHBlciBjbGFzcyBmb3IgdGVzdGluZyB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdGhlIG1lc3NhZ2VzIGxvZ2dlZC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0ZVRlc3RMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIHsKLQotCXByb3RlY3RlZCBMaXN0IGVycm9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCB3YXJuaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCBpbmZvcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCB2ZXJib3NlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLQl7Ci0JCWlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0VSUk9SKQotCQl7Ci0JCQllcnJvcnMuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLQkJewotCQkJd2FybmluZ3MuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfSU5GTykKLQkJewotCQkJaW5mb3MuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfVkVSQk9TRSkKLQkJewotCQkJdmVyYm9zZXMuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCwgamF2YS5sYW5nLlRocm93YWJsZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkgCi0JewotCQlsb2cobWVzc2FnZSwgc2V2ZXJpdHkpOwotCQlsb2codGhyb3dhYmxlLnRvU3RyaW5nKCksIHNldmVyaXR5KTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBlcnJvciBsaXN0LgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBlcnJvciBsaXN0LgotCSAqLwotCXB1YmxpYyBMaXN0IGdldEVycm9ycygpCi0JewotCQlyZXR1cm4gZXJyb3JzOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHdhcm5pbmcgbGlzdC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogCQlUaGUgd2FybmluZyBsaXN0LgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdhcm5pbmdzKCkKLQl7Ci0JCXJldHVybiB3YXJuaW5nczsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBpbmZvIGxpc3QuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVGhlIGluZm8gbGlzdC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRJbmZvcygpCi0JewotCQlyZXR1cm4gaW5mb3M7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSB2ZXJib3NlIGxpc3QuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVGhlIHZlcmJvc2UgbGlzdC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRWZXJib3NlcygpCi0JewotCQlyZXR1cm4gdmVyYm9zZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVdyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDA3YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0b3I7Ci0KLS8qKgotICogQSB3cmFwcGVyIGNsYXNzIG9mIFdTRExWYWxpZGF0ZSB0aGF0IGV4cG9zZXMgaW50ZXJuYWxzIGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRlV3JhcHBlciBleHRlbmRzIFdTRExWYWxpZGF0ZSAKLXsKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dC5XU0RMVmFsaWRhdGUjZ2V0TWVzc2FnZXMob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2VbXSkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2VzKElWYWxpZGF0aW9uTWVzc2FnZVtdIG1lc3NhZ2VzKSAKLQl7Ci0JCXJldHVybiBzdXBlci5nZXRNZXNzYWdlcyhtZXNzYWdlcyk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS50ZXh0LldTRExWYWxpZGF0ZSNwYXJzZUFyZ3VtZW50cyhqYXZhLmxhbmcuU3RyaW5nW10pCi0JICovCi0JcHVibGljIHZvaWQgcGFyc2VBcmd1bWVudHMoU3RyaW5nW10gYXJncykgCi0JewotCQlzdXBlci5wYXJzZUFyZ3VtZW50cyhhcmdzKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQuV1NETFZhbGlkYXRlI3ZhbGlkYXRlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIAotCXsKLQkJc3VwZXIudmFsaWRhdGUoKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQuV1NETFZhbGlkYXRlI3ZhbGlkYXRlRmlsZShqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBJVmFsaWRhdGlvblJlcG9ydCB2YWxpZGF0ZUZpbGUoU3RyaW5nIGZpbGVuYW1lKSAKLQl7Ci0JCXJldHVybiBzdXBlci52YWxpZGF0ZUZpbGUoZmlsZW5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIGludGVybmFsIFdTREwgdmFsaWRhdG9yLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBpbnRlcm5hbCBXU0RMIHZhbGlkYXRvci4KLQkgKi8KLQlwdWJsaWMgV1NETFZhbGlkYXRvciBnZXRXU0RMVmFsaWRhdG9yKCkKLQl7Ci0JCXJldHVybiB3c2RsVmFsaWRhdG9yOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIFdTREwgdmFsaWRhdGlvbiBjb25maWd1cmF0aW9uLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBXU0RMIHZhbGlkYXRpb24gY29uZmlndXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGdldENvbmZpZ3VyYXRpb24oKQotCXsKLQkJcmV0dXJuIGNvbmZpZ3VyYXRpb247Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBXU0RMIGZpbGVzIHRvIHZhbGlkYXRlLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBsaXN0IG9mIFdTREwgZmlsZXMgdG8gdmFsaWRhdGUuCi0JICovCi0JcHVibGljIExpc3QgZ2V0V1NETEZpbGVzKCkKLQl7Ci0JCXJldHVybiB3c2RsRmlsZXM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB2ZXJib3NlIGlzIG9uLCBmYWxzZSBvdGhlcndpc2UuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVHJ1ZSBpZiB2ZXJib3NlIGlzIG9uLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNWZXJib3NlKCkKLQl7Ci0JCXJldHVybiB2ZXJib3NlOwotCX0KLQkKLQkvKioKLQkgKiBTZXQgd2hldGhlciByZXBvcnRpbmcgc2hvdWxkIGJlIGRvbmUgaW4gYSB2ZXJib3NlIHdheS4KLQkgKiAKLQkgKiBAcGFyYW0gdmVyYm9zZQotCSAqIAkJSWYgdHJ1ZSByZXBvcnRpbmcgd2lsbCBiZSBkb25lIGluIGEgdmVyYm9zZSB3YXksIG90aGVyd2lzZSBpdCB3aWxsIG5vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWZXJib3NlKGJvb2xlYW4gdmVyYm9zZSkKLQl7Ci0JCXRoaXMudmVyYm9zZSA9IHZlcmJvc2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBlM2VmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIFRlc3RzIGZvciBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yLgotICoKLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYUdlbmVyYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBJbmxpbmVTY2hlbWFHZW5lcmF0b3JXcmFwcGVyIGdlbmVyYXRvcjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotCXJldHVybiBuZXcgVGVzdFN1aXRlKElubGluZVNjaGVtYUdlbmVyYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogSlVuaXQgc2V0dXAgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VXAoKQotICB7Ci0JZ2VuZXJhdG9yID0gbmV3IElubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKCkKLSAgewotCS8vIFRlc3QgZW1wdHkgbGlzdC4KLQlhc3NlcnRGYWxzZSgiVGhlIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gZmFsc2Ugd2hlbiBnaXZlbiBhbiBlbXB0eSBsaXN0LiIsIGdlbmVyYXRvci5jaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKG5ldyBBcnJheUxpc3QoKSkpOwotCQotCS8vIFRlc3QgdGhhdCBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkIHJldHVybnMgZmFsc2UKLQkvLyB3aGVuIGdpdmVuIGEgbGlzdCB3aXRob3V0IHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZS4KLQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JbGlzdC5hZGQoImh0dHA6Ly9ub3Rzb2FwZW5jb2RpbmduYW1lc3BhY2UiKTsKLQlhc3NlcnRGYWxzZSgiVGhlIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gZmFsc2Ugd2hlbiBnaXZlbiBhIGxpc3Qgd2l0aG91dCB0aGUgU09BUCBlbnZlbG9wZSBuYW1lc3BhY2UuIiwgZ2VuZXJhdG9yLmNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQobGlzdCkpOwotCQotCS8vIFRlc3QgdGhhdCBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkIHJldHVybnMgdHJ1ZQotCS8vIHdoZW4gZ2l2ZW4gYSBsaXN0IHdpdGggdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlLgotCUxpc3QgbGlzdDIgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JbGlzdDIuYWRkKElubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIuU09BUF9FTkNPRElOR19VUkkpOwotCWFzc2VydFRydWUoIlRoZSBtZXRob2QgZG9lcyBub3QgcmV0dXJuIHRydWUgd2hlbiBnaXZlbiBhIGxpc3Qgd2l0aCB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UuIiwgZ2VuZXJhdG9yLmNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQobGlzdDIpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRPRE86IEltcGxlbWVudCB0ZXN0cyBmb3IgdGhlIENyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5IG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9DcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseSgpIAotICB7Ci0gIH0KLQotICAvKioKLSAgICogVE9ETzogSW1wbGVtZW50IHRlc3RzIGZvciB0aGUgR2V0SW1wb3J0TmFtZXNwYWNlIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9HZXRJbXBvcnROYW1lc3BhY2VzKCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgCSogVGVzdCB0aGF0IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlCi0gICAJKiByZXNvbHZlci4KLSAgIAkqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0TlNSZXNvbHZlcigpIAotICB7Ci0gICAgRG9jdW1lbnQgZG9jID0gbmV3IERvY3VtZW50SW1wbCgpOwotCUVsZW1lbnQgcm9vdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJzY2hlbWEiKTsKLQotCS8vIENoZWNrIHRoYXQgdGhlIHJlc29sdmVyIGlzIGVtcHR5LgotCUhhc2h0YWJsZSByZXNvbHZlciA9IGdlbmVyYXRvci5nZXROU1Jlc29sdmVyKHJvb3RFbGVtKTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVzb2x2ZXIgaXMgbm90IGVtcHR5LiIsIHJlc29sdmVyLmlzRW1wdHkoKSk7Ci0JCi0JLy8gQ2hlY2sgdGhlIHJlc29sdmVyIGNvbnRhaW5zIG9uZSB2YWx1ZS4KLQlyb290RWxlbS5zZXRBdHRyaWJ1dGUoInhtbG5zIiwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JcmVzb2x2ZXIgPSBnZW5lcmF0b3IuZ2V0TlNSZXNvbHZlcihyb290RWxlbSk7Ci0JYXNzZXJ0VHJ1ZSgiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGVtcHR5IG5hbWVzcGFjZS4iLCByZXNvbHZlci5jb250YWluc0tleSgiIikpOwotCWFzc2VydEVxdWFscygiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoZSBlbXB0eSBuYW1lc3BhY2UuIiwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgcmVzb2x2ZXIuZ2V0KCIiKSk7Ci0JCi0JLy8gQ2hlY2sgdGhlIHJlc29sdmVyIGNvbnRhaW5zIHR3byB2YWx1ZXMuCi0Jcm9vdEVsZW0uc2V0QXR0cmlidXRlKCJ4bWxuczpvdGhlciIsICJodHRwOi8vb3RoZXJuYW1lc3BhY2UiKTsKLQlyZXNvbHZlciA9IGdlbmVyYXRvci5nZXROU1Jlc29sdmVyKHJvb3RFbGVtKTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVzb2x2ZXIgZG9lcyBub3QgY29udGFpbiB0aGUgb3RoZXIgbmFtZXNwYWNlLiIsIHJlc29sdmVyLmNvbnRhaW5zS2V5KCJvdGhlciIpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXNvbHZlciBkb2VzIG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGUgb3RoZXIgbmFtZXNwYWNlLiIsICJodHRwOi8vb3RoZXJuYW1lc3BhY2UiLCByZXNvbHZlci5nZXQoIm90aGVyIikpOwotCQotCS8vIENoZWNrIHRoZSByZXNvbHZlciBzdGlsbCBjb250YWlucyB0aGUgZW1wdHkgbmFtZXNwYWNlLgotCWFzc2VydFRydWUoIlRoZSByZXNvbHZlciBkb2VzIG5vdCBjb250YWluIHRoZSBlbXB0eSBuYW1lc3BhY2UgYWZ0ZXIgYWRkaW5nIGEgc2Vjb25kIG5hbWVzcGFjZS4iLCByZXNvbHZlci5jb250YWluc0tleSgiIikpOwotCWFzc2VydEVxdWFscygiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoZSBlbXB0eSBuYW1lc3BhY2UgYWZ0ZXIgYWRkaW5nIGEgc2Vjb25kIG5hbWVzcGFjZS4iLCBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCByZXNvbHZlci5nZXQoIiIpKTsKLQkKLQkvLyBDaGVjayB0aGUgcmVzb2x2ZXIgZG9lc24ndCBjb250YWluIG5vbi14bWxucyBhdHRyaWJ1dGUgdmFsdWUuCi0Jcm9vdEVsZW0uc2V0QXR0cmlidXRlKCJ0eXBlOm90aGVyMiIsICJvdGhlcjI6dHlwZSIpOwotCXJlc29sdmVyID0gZ2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIocm9vdEVsZW0pOwotCWFzc2VydEZhbHNlKCJUaGUgcmVzb2x2ZXIgY29udGFpbnMgdGhlIG90aGVyMiBuYW1lc3BhY2UuIiwgcmVzb2x2ZXIuY29udGFpbnNLZXkoIm90aGVyMiIpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVxdWlyZWQgcHJlZml4ZXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0UHJlZml4ZXMoKSAKLSAgewotCS8vIENoZWNrIGRvY3VtZW50IHRoYXQgY29udGFpbnMgbm8gcmVxdWlyZWQgbmFtZXNwYWNlcyBhbmQgbm8gcHJlZml4LgotCURvY3VtZW50IGRvYyA9IG5ldyBEb2N1bWVudEltcGwoKTsKLQlFbGVtZW50IHJvb3RFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAic2NoZW1hIik7Ci0Jcm9vdEVsZW0uc2V0QXR0cmlidXRlKCJ4bWxucyIsQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JLy9kb2MuYXBwZW5kQ2hpbGQocm9vdEVsZW0pOwotCQotCUxpc3QgcmVxTlNzID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIG9uZSBlbXB0eSBzdHJpbmcuIiwgMSwgcmVxTlNzLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiBvbmUgZW1wdHkgc3RyaW5nLiIsICIiLCByZXFOU3MuZ2V0KDApKTsKLQkKLQkvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIG5vIHJlcXVpcmVkIG5hbWVzcGFjZXMgYW5kIHRoZSB4c2QgcHJlZml4LgotCUVsZW1lbnQgcm9vdEVsZW0yID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOnNjaGVtYSIpOwotCXJvb3RFbGVtMi5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JTGlzdCByZXFOU3MyID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtMik7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJy4iLCAxLCByZXFOU3MyLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJy4iLCAieHNkIiwgcmVxTlNzMi5nZXQoMCkpOwotCQotCS8vIENoZWNrIGRvY3VtZW50IHRoYXQgY29udGFpbnMgYW4gZWxlbWVudCB3aXRoIGEgcmVxdWlyZWQgbmFtZXNwYWNlLgotCUVsZW1lbnQgcm9vdEVsZW00ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOnNjaGVtYSIpOwotCXJvb3RFbGVtMi5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JRWxlbWVudCBkaWZmTlNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL290aGVybmFtZXNwYWNlIiwgIm90aGVyOmVsZW1lbnQiKTsKLQlyb290RWxlbTQuYXBwZW5kQ2hpbGQoZGlmZk5TRWxlbSk7Ci0JTGlzdCByZXFOU3M0ID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtNCk7Ci0JYXNzZXJ0VHJ1ZSgiVGhlIHJlcXVpcmVkIG5hbWVzcGFjZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHByZWZpeCAnb3RoZXInIHdoZW4gdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgZm9yIGFuIGVsZW1lbnQuIiwgcmVxTlNzNC5jb250YWlucygib3RoZXIiKSk7Ci0JCi0JLy8gQ2hlY2sgZG9jdW1lbnQgdGhhdCBjb250YWlucyBhIHR5cGUgd2l0aCBhIHJlcXVpcmVkIG5hbWVzcGFjZS4KLQlFbGVtZW50IHJvb3RFbGVtNSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInhzZDpzY2hlbWEiKTsKLQlyb290RWxlbTUuc2V0QXR0cmlidXRlKCJ4bWxuczp4c2QiLENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpOwotCUVsZW1lbnQgb3RoZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOmVsZW1lbnQiKTsKLQlvdGhlckVsZW0uc2V0QXR0cmlidXRlKCJ0eXBlIiwgIm90aGVyOnR5cGUiKTsKLQlyb290RWxlbTUuYXBwZW5kQ2hpbGQob3RoZXJFbGVtKTsKLQlMaXN0IHJlcU5TczUgPSBnZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMocm9vdEVsZW01KTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiAnb3RoZXInIHdoZW4gdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgZm9yIGEgdHlwZS4iLCByZXFOU3M1LmNvbnRhaW5zKCJvdGhlciIpKTsKLQkKLQkvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIGFuIGltcG9ydC4gSW1wb3J0IGVsZW1lbnRzIHNob3VsZCBiZSBpZ25vcmVkLgotCS8vIFRoaXMgaXMgYSBjb250cml2ZWQgZXhhbXBsZSBhcyBpdCBjb250YWlucyBhIHR5cGUgYXR0cmlidXRlIGZvciB0aGUgaW1wb3J0IGVsZW1lbnQuCi0JRWxlbWVudCByb290RWxlbTYgPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6c2NoZW1hIik7Ci0Jcm9vdEVsZW02LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIixDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKTsKLQlFbGVtZW50IGltcG9ydEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6aW1wb3J0Iik7Ci0JaW1wb3J0RWxlbS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAib3RoZXI6dHlwZSIpOwotCXJvb3RFbGVtNi5hcHBlbmRDaGlsZChpbXBvcnRFbGVtKTsKLQlMaXN0IHJlcU5TczYgPSBnZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMocm9vdEVsZW02KTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZSBvbmUgc3RyaW5nICd4c2QnIHdoZW4gYW4gaW1wb3J0IGVsZW1lbnQgaXMgdXNlZC4iLCAxLCByZXFOU3M2LnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJyB3aGVuIGFuIGltcG9ydCBlbGVtZW50IGlzIHVzZWQuIiwgInhzZCIsIHJlcU5TczYuZ2V0KDApKTsKLQkKLSAgICAvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIGFuIGluY2x1ZGUuIEluY2x1ZGUgZWxlbWVudHMgc2hvdWxkIGJlIGlnbm9yZWQuCi0gICAgLy8gVGhpcyBpcyBhIGNvbnRyaXZlZCBleGFtcGxlIGFzIGl0IGNvbnRhaW5zIGEgdHlwZSBhdHRyaWJ1dGUgZm9yIHRoZSBpbmNsdWRlIGVsZW1lbnQuCi0JRWxlbWVudCByb290RWxlbTcgPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6c2NoZW1hIik7Ci0Jcm9vdEVsZW03LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIixDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKTsKLQlFbGVtZW50IGluY2x1ZGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOmluY2x1ZGUiKTsKLQlpbmNsdWRlRWxlbS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAib3RoZXI6dHlwZSIpOwotCXJvb3RFbGVtNy5hcHBlbmRDaGlsZChpbmNsdWRlRWxlbSk7Ci0JTGlzdCByZXFOU3M3ID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtNik7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJyB3aGVuIGFuIGltcG9ydCBlbGVtZW50IGlzIHVzZWQuIiwgMSwgcmVxTlNzNy5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIHJlcXVpcmVkIG5hbWVzcGFjZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIG9uZSBzdHJpbmcgJ3hzZCcgd2hlbiBhbiBpbXBvcnQgZWxlbWVudCBpcyB1c2VkLiIsICJ4c2QiLCByZXFOU3M3LmdldCgwKSk7Ci0JCi0JLy8gQ2hlY2sgZG9jdW1lbnQgdGhhdCBjb250YWlucyBhdHRyaWJ1dGUgd2l0aCBhIHJlcXVpcmVkIG5hbWVzcGFjZS4KLQlFbGVtZW50IHJvb3RFbGVtMyA9IGRvYy5jcmVhdGVFbGVtZW50TlMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInhzZDpzY2hlbWEiKTsKLQlyb290RWxlbTMuc2V0QXR0cmlidXRlKCJ4bWxuczp4c2QiLENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpOwotCUVsZW1lbnQgd3NkbEF0dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6ZWxlbWVudCIpOwotCXdzZGxBdHRFbGVtLnNldEF0dHJpYnV0ZU5TKENvbnN0YW50cy5OU19VUklfV1NETCwgIndzZGw6YXJyYXlUeXBlIiwgInNvbWV0eXBlW10iKTsKLQlyb290RWxlbTMuYXBwZW5kQ2hpbGQod3NkbEF0dEVsZW0pOwotCUxpc3QgcmVxTlNzMyA9IGdlbmVyYXRvci5nZXROYW1lc3BhY2VQcmVmaXhlcyhyb290RWxlbTMpOwotCWFzc2VydFRydWUoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluICd3c2RsJyB3aGVuIHRoZSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIGZvciBhbiBhdHRyaWJ1dGUuIiwgcmVxTlNzMy5jb250YWlucygid3NkbCIpKTsKLQkKLSAgfQotCi0gIC8qKgotICAgKiBUT0RPOiBJbXBsZW1lbnQgdGVzdHMgZm9yIHRoZSBSZW1vdmVJbXBvcnRzIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9SZW1vdmVJbXBvcnRzKCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBUT0RPOiBJbXBsZW1lbnQgdGVzdHMgZm9yIHRoZSBSZW1vdmVMb2NhbE5hbWVzcGFjZSBtZXRob2QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0b2RvUmVtb3ZlTG9jYWxOYW1lc3BhY2VzKCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBUT0RPOiBJbXBsZW1lbnQgdGVzdHMgZm9yIHRoZSBSZXNvbHZlTmFtZXNwYWNlIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9SZXNvbHZlTmFtZXNwYWNlcygpIAotICB7Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVzdHJpY3RJbXBvcnRzKCkgCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3JXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMzlkMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBXcmFwcGVyIGZvciBJbmxpbmVTY2hlbWFHZW5lcmF0b3IgdG8gYWxsb3cgdGVzdGluZyBwcm90ZWN0ZWQgbWV0aG9kcy4KLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIgZXh0ZW5kcyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IgCi17Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI2NoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQoamF2YS51dGlsLkxpc3QpCi0JICovCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChMaXN0IHJlcW5zKSAKLQl7Ci0JCXJldHVybiBzdXBlci5jaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKHJlcW5zKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI2NyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuTGlzdCwgamF2YS51dGlsLkhhc2h0YWJsZSwgamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KEVsZW1lbnQgZWxlbSwgTGlzdCBlbGVtZW50cywgTGlzdCByZXF1aXJlZE5hbWVzcGFjZXMsIEhhc2h0YWJsZSByZXFOU0RlY2wsIFN0cmluZyBmaWxlbG9jYXRpb24pIAotCXsKLQkJcmV0dXJuIHN1cGVyLmNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KGVsZW0sIGVsZW1lbnRzLCByZXF1aXJlZE5hbWVzcGFjZXMsCi0JCQkJcmVxTlNEZWNsLCBmaWxlbG9jYXRpb24pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjZ2V0SW1wb3J0TmFtZXNwYWNlcyhvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXByb3RlY3RlZCBMaXN0IGdldEltcG9ydE5hbWVzcGFjZXMoRWxlbWVudCBlbGVtKSAKLQl7Ci0JCXJldHVybiBzdXBlci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW0pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjZ2V0TlNSZXNvbHZlcihvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXByb3RlY3RlZCBIYXNodGFibGUgZ2V0TlNSZXNvbHZlcihFbGVtZW50IGVsZW0pIAotCXsKLQkJcmV0dXJuIHN1cGVyLmdldE5TUmVzb2x2ZXIoZWxlbSk7Ci0JfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLklubGluZVNjaGVtYUdlbmVyYXRvciNnZXROYW1lc3BhY2VQcmVmaXhlcyhvcmcudzNjLmRvbS5FbGVtZW50KQotICAgICAqLwotICAgIHByb3RlY3RlZCBMaXN0IGdldE5hbWVzcGFjZVByZWZpeGVzKEVsZW1lbnQgZWxlbSkgCi0gICAgewotCSAgICByZXR1cm4gc3VwZXIuZ2V0TmFtZXNwYWNlUHJlZml4ZXMoZWxlbSk7Ci0gICAgfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLklubGluZVNjaGVtYUdlbmVyYXRvciNyZW1vdmVJbXBvcnRzKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuTGlzdCkKLQkgKi8KLQlwcm90ZWN0ZWQgTGlzdCByZW1vdmVJbXBvcnRzKExpc3QgbmFtZXNwYWNlcywgTGlzdCBpbXBvcnRlZE5hbWVzcGFjZXMpIAotCXsKLQkJcmV0dXJuIHN1cGVyLnJlbW92ZUltcG9ydHMobmFtZXNwYWNlcywgaW1wb3J0ZWROYW1lc3BhY2VzKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI3JlbW92ZUxvY2FsTmFtZXNwYWNlcyhqYXZhLnV0aWwuTGlzdCwgb3JnLnczYy5kb20uRWxlbWVudCkKLQkgKi8KLQlwcm90ZWN0ZWQgTGlzdCByZW1vdmVMb2NhbE5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBFbGVtZW50IGVsZW0pIAotCXsKLQkJcmV0dXJuIHN1cGVyLnJlbW92ZUxvY2FsTmFtZXNwYWNlcyhuYW1lc3BhY2VzLCBlbGVtKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI3Jlc29sdmVOYW1lc3BhY2VzKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuSGFzaHRhYmxlLCBqYXZhLnV0aWwuSGFzaHRhYmxlKQotCSAqLwotCXByb3RlY3RlZCBIYXNodGFibGUgcmVzb2x2ZU5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBIYXNodGFibGUgbnNSZXNvbHZlciwgSGFzaHRhYmxlIHBhcmVudE5TUmVzb2x2ZXIpIAotCXsKLQkJcmV0dXJuIHN1cGVyLnJlc29sdmVOYW1lc3BhY2VzKG5hbWVzcGFjZXMsIG5zUmVzb2x2ZXIsIHBhcmVudE5TUmVzb2x2ZXIpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjcmVzdHJpY3RJbXBvcnRzKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuU2V0KQotCSAqLwotCXByb3RlY3RlZCBMaXN0IHJlc3RyaWN0SW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIFNldCB2YWxpZEltcG9ydE5TcykgCi0JewotCQlyZXR1cm4gc3VwZXIucmVzdHJpY3RJbXBvcnRzKG5hbWVzcGFjZXMsIHZhbGlkSW1wb3J0TlNzKTsKLQl9Ci0gICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjFjZDZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQmFzZVRlc3RDYXNlOwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgV1NETCB2YWxpZGF0b3IncyBpbnRlcm5hbCBYTUwgY2F0YWxvZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIENBVEFMT0dfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotCXJldHVybiBuZXcgVGVzdFN1aXRlKFhNTENhdGFsb2dUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JWE1MQ2F0YWxvZy5yZXNldCgpOwotICB9Ci0KLQotCi1wdWJsaWMgdm9pZCB0ZXN0U2NoZW1hRGlyKCkKLSAgewotCVhNTENhdGFsb2cuYWRkU2NoZW1hRGlyKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgQ0FUQUxPR19ESVIpOwotCVN0cmluZyBjYXRhbG9nTG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIENBVEFMT0dfRElSOwotCWNhdGFsb2dMb2NhdGlvbiA9IGNhdGFsb2dMb2NhdGlvbi5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICB3aGlsZShjYXRhbG9nTG9jYXRpb24uc3RhcnRzV2l0aCgiLyIpKQotICAgIHsKLSAgICAJY2F0YWxvZ0xvY2F0aW9uID0gY2F0YWxvZ0xvY2F0aW9uLnN1YnN0cmluZygxKTsKLSAgICB9Ci0gICAgY2F0YWxvZ0xvY2F0aW9uID0gRklMRV9QUk9UT0NPTCArIGNhdGFsb2dMb2NhdGlvbjsKLQlJWE1MQ2F0YWxvZyBjYXRhbG9nID0gWE1MQ2F0YWxvZy5nZXRJbnN0YW5jZSgpOwotCVN0cmluZyByZXNvbHZlZExvY2F0aW9uID0gY2F0YWxvZy5yZXNvbHZlRW50aXR5TG9jYXRpb24oImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMSIsICIiKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXNvbHZlZCBsb2NhdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiIsIGNhdGFsb2dMb2NhdGlvbiArICJzY2hlbWExLnhzZCIsIHJlc29sdmVkTG9jYXRpb24pOwotCXJlc29sdmVkTG9jYXRpb24gPSBjYXRhbG9nLnJlc29sdmVFbnRpdHlMb2NhdGlvbigiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWEyIiwgIiIpOwotCWFzc2VydEVxdWFscygiVGhlIHNlY29uZCByZXNvbHZlZCBsb2NhdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIHJlc29sdmVkIGxvY2F0aW9uLiIsIGNhdGFsb2dMb2NhdGlvbiArICJzY2hlbWEyLnhzZCIsIHJlc29sdmVkTG9jYXRpb24pOwotICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxXU0RMVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsV1NETFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MzUwZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxXU0RMVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50LkFudExvZ2dlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQuV1NETFZhbGlkYXRlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nVGVzdDsKLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBXU0RMIHZhbGlkYXRvciB0ZXN0IHN1aXRlcy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFdTRExUZXN0cyBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFdTRExUZXN0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxXU0RMVGVzdHMoKQotICB7Ci0gICAgc3VwZXIoIkFsbFdTRExUZXN0cyIpOwotICAgIGFkZFRlc3QoVmFsaWRhdG9yVGVzdC5zdWl0ZSgpKTsKLSAgICAvL2FkZFRlc3QoV1NETFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYU0RUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoV1NETFRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChQYXRoc1Rlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChVUklSZXNvbHZlclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChXU0RMVmFsaWRhdGVUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoWE1MQ2F0YWxvZ1Rlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChJbmxpbmVTY2hlbWFHZW5lcmF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3RTdWl0ZShMaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmNsYXNzKTsKLSAgICBhZGRUZXN0U3VpdGUoQW50TG9nZ2VyVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dC5XU0RMVmFsaWRhdGVUZXN0LmNsYXNzKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzBhN2UyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlhNTEdyYW1tYXJQb29sSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5JbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETFZhbGlkYXRvcjsKLQotLyoqCi0gKiBCYXNlIHRlc3QgY2FzZSBjbGFzcyB3aGljaCBwcm92aWRlcyBtZXRob2RzIHRvIAotICogLSBjcmVhdGUgbG9ncwotICogLSByZWFkIGZyb20gbG9ncwotICogLSBydW4gbG9nIGNvbXBhcmlzb24gdGVzdHMKLSAqLwotcHVibGljIGNsYXNzIEJhc2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8vLyI7IAotICBwcm90ZWN0ZWQgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIOwotICBwcm90ZWN0ZWQgU3RyaW5nIFNBTVBMRVNfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2dlbmVyYXRlZFJlc3VsdHMvIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBJREVBTF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIExPR19GSUxFX0xPQ0FUSU9OID0gInJlc3VsdHMubG9nIjsKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMiOwotICBwcml2YXRlIFdTRExWYWxpZGF0b3IgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotICAKLSAgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBudWxsOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JCi0gICAgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOy8vZ2V0UGx1Z2luTG9jYXRpb24oKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIFdTLUkgcHJlZmVyZW5jZSB0byBpZ25vcmUgc28gb25seSBXU0RMIGVycm9ycyB3aWxsIGJlIHRlc3RlZC4KLSAgICBXU1BsdWdpbiB3c3VpID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lTU0JQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotICAgIHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSUFQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotICAgIAotICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0JWE1MR3JhbW1hclBvb2wgeHNkR3JhbW1hclBvb2wgPSBuZXcgSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwoKTsKLQlYTUxHcmFtbWFyUG9vbCB4bWxHcmFtbWFyUG9vbCA9IG5ldyBYTUxHcmFtbWFyUG9vbEltcGwoKTsKLQljb25maWd1cmF0aW9uLnNldFByb3BlcnR5KENvbnN0YW50cy5YTUxTQ0hFTUFfQ0FDSEVfQVRUUklCVVRFLCB4c2RHcmFtbWFyUG9vbCk7Ci0gICAgY29uZmlndXJhdGlvbi5zZXRQcm9wZXJ0eShDb25zdGFudHMuWE1MX0NBQ0hFX0FUVFJJQlVURSwgeG1sR3JhbW1hclBvb2wpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCWNvbmZpZ3VyYXRpb24gPSBudWxsOwotCQotCXN1cGVyLnRlYXJEb3duKCk7Ci0gIH0KLQotLyoqCi0gICAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBsb2cgdGhlIHJlc3VsdHMgYW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMKLSAgICogd2l0aCB0aGUgaWRlYWwgcmVzdWx0cy4gVGhlIHRlc3Qgd2lsbCBvbmx5IHBhc3MgaWYgdGhlIHR3byBsb2cgZmlsZXMgYXJlIHRoZSBzYW1lLgotICAgKiAKLSAgICogQHBhcmFtIHRlc3RmaWxlIFRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0gICAqIEBwYXJhbSBsb2dsb2NhdGlvbiBUaGUgbG9jYXRpb24gdG8gY3JlYXRlIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGlkZWFsbG9nbG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBpZGVhbCBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1blRlc3QoU3RyaW5nIHRlc3RmaWxlLCBTdHJpbmcgbG9nbG9jYXRpb24sIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uKQotICB7Ci0gICAgSVZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHRlc3RmaWxlLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjcmVhdGVMb2cobG9nbG9jYXRpb24sIHZhbHJlcG9ydCk7Ci0gICAgICBTdHJpbmcgZ2VuZXJhdGVkTG9nID0gZ2V0U3RyaW5nRnJvbUZpbGUobG9nbG9jYXRpb24pOwotICAgICAgU3RyaW5nIGlkZWFsTG9nID0gZ2V0U3RyaW5nRnJvbUZpbGUoaWRlYWxsb2dsb2NhdGlvbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoaWRlYWxMb2csIGdlbmVyYXRlZExvZyk7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiQ291bGQgbm90IGNvbXBhcmUgbG9nIGZpbGVzIik7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZmlsZS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSB0aGUgZmlsZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaWYgc3VjY2Vzc2Z1bC4KLSAgICogQHRocm93cyBFeGNlcHRpb24gVGhyb3duIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YWlvbiBvZiB0aGUgZmlsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldFN0cmluZ0Zyb21GaWxlKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgaWYoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZToiKSkKLSAgCXsKLSAgCSAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoNik7Ci0gIAkgIHdoaWxlKGZpbGVuYW1lLnN0YXJ0c1dpdGgoIlxcIikgfHwgZmlsZW5hbWUuc3RhcnRzV2l0aCgiLyIpKQotICAJICB7Ci0gIAkgIAlmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZygxKTsKLSAgCSAgfQotICAJfQotICAgIFN0cmluZ0J1ZmZlciBmaWxlc3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFJlYWRlciByZWFkZXIgPSBudWxsOwotICAgIEJ1ZmZlcmVkUmVhZGVyIGJ1ZnJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoZmlsZSk7Ci0gICAgICBidWZyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIocmVhZGVyKTsKLSAgICAgIHdoaWxlIChidWZyZWFkZXIucmVhZHkoKSkKLSAgICAgIHsKLSAgICAgICAgZmlsZXN0cmluZy5hcHBlbmQoYnVmcmVhZGVyLnJlYWRMaW5lKCkgKyAiXG4iKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgfSBmaW5hbGx5Ci0gICAgewotICAgICAgYnVmcmVhZGVyLmNsb3NlKCk7Ci0gICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpbGVzdHJpbmcudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBmaWxlIGZvciBhbiBYU0QgdGVzdC4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgbG9nIGZpbGUgdG8gY3JlYXRlLgotICAgKiBAcGFyYW0gdmFscmVwb3J0IFRoZSB2YWxpZGF0aW9uIHJlcG9ydCBmb3IgdGhpcyBmaWxlLgotICAgKiBAcmV0dXJuIFRoZSBmaWxlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIGlmIHN1Y2Nlc3NmdWwgb3IgbnVsbCBpZiBub3Qgc3VjY2Vzc2Z1bC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZUxvZyhTdHJpbmcgZmlsZW5hbWUsIElWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCkKLSAgewotICAgIGlmKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6IikpCi0gIAl7Ci0gIAkgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDYpOwotICAJICB3aGlsZShmaWxlbmFtZS5zdGFydHNXaXRoKCJcXCIpIHx8IGZpbGVuYW1lLnN0YXJ0c1dpdGgoIi8iKSkKLSAgCSAgewotICAJICAJZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMSk7Ci0gIAkgIH0KLSAgCX0KLSAgICAgSVZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgIGludCBudW1tZXNzYWdlcyA9IHZhbG1lc3NhZ2VzLmxlbmd0aDsvL3ZhbGlkYXRvci5nZXRFcnJvcnMoKS5zaXplKCkgKyB2YWxpZGF0b3IuZ2V0V2FybmluZ3MoKS5zaXplKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciBlcnJvcnNTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciB3YXJuaW5nc1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgaW50IG51bWVycm9ycyA9IDA7Ci0gICAgIGludCBudW13YXJuaW5ncyA9IDA7Ci0gICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgICB7Ci0gICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIHZhbG1lcyA9IHZhbG1lc3NhZ2VzW2ldOwotICAgICAgIGlmKHZhbG1lcy5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgICBudW13YXJuaW5ncysrOwotICAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgYW55IGZpbGUgcmVmZXJlbmNlcyBtYWtlIHRoZW0gcmVsYXRpdmUuCi0gICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbG1lcy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiWyhdW14oXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiWyhdIik7Ci0gICAgICAgICB3YXJuaW5nc1N0cmluZy5hcHBlbmQobWVzc2FnZSArICIgWyIgKyB2YWxtZXMuZ2V0TGluZSgpICsiLCAiICsgdmFsbWVzLmdldENvbHVtbigpICsiXVxuIik7Ci0gICAgICAgICB3YXJuaW5nc1N0cmluZy5hcHBlbmQoY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyh2YWxtZXMuZ2V0TmVzdGVkTWVzc2FnZXMoKSkpOwotICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgewotICAgICAgICAgbnVtZXJyb3JzKys7Ci0gICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBjb250YWlucyBhbnkgZmlsZSByZWZlcmVuY2VzIG1ha2UgdGhlbSByZWxhdGl2ZS4KLSAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gdmFsbWVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICIoIik7Ci0gICAgICAgICBlcnJvcnNTdHJpbmcuYXBwZW5kKG1lc3NhZ2UgKyAiIFsiICsgdmFsbWVzLmdldExpbmUoKSArIiwgIiArIHZhbG1lcy5nZXRDb2x1bW4oKSArIl1cbiIpOwotICAgICAgICAgZXJyb3JzU3RyaW5nLmFwcGVuZChjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKHZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpKSk7Ci0gICAgICAgfQotICAgICB9Ci0gICAgIFN0cmluZ0J1ZmZlciBsb2cgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIGxvZy5hcHBlbmQoIm51bWJlciBvZiBlcnJvcnMgICAgICA6ICIgKyBudW1lcnJvcnMgKyAiXG4iKTsKLSAgICAgbG9nLmFwcGVuZCgibnVtYmVyIG9mIHdhcm5pbmdzICAgIDogIiArIG51bXdhcm5pbmdzICsgIlxuXG4iKTsKLSAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgICBpZihudW1lcnJvcnMgPT0gMCkKLSAgICAgewotICAgICAgIGxvZy5hcHBlbmQoIihub25lKVxuIik7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZChlcnJvcnNTdHJpbmcudG9TdHJpbmcoKSk7Ci0gICAgIH0KLSAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgICBpZihudW13YXJuaW5ncyA9PSAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgiKG5vbmUpXG4iKTsKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKHdhcm5pbmdzU3RyaW5nLnRvU3RyaW5nKCkpOwotICAgICB9Ci0gICAgIGxvZy5hcHBlbmQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgIAotICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dFN0cmVhbSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBsb2dmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgRmlsZSBwYXJlbnQgPSBsb2dmaWxlLmdldFBhcmVudEZpbGUoKTsKLSAgCWlmICghcGFyZW50LmV4aXN0cygpKSAKLSAgCXsKLSAgCSAgcGFyZW50Lm1rZGlycygpOwotICAJfQotICAgICAgaWYobG9nZmlsZS5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgbG9nZmlsZS5kZWxldGUoKTsKLSAgICAgIH0KLSAgICAgIGxvZ2ZpbGUuY3JlYXRlTmV3RmlsZSgpOwotICAgICAgCi0gICAgICBvdXRTdHJlYW0gPSBuZXcgRGF0YU91dHB1dFN0cmVhbShuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlbmFtZSwgdHJ1ZSkpOwotICAgICAgb3V0U3RyZWFtLndyaXRlQnl0ZXMobG9nLnRvU3RyaW5nKCkpOwotICAgICAgb3V0U3RyZWFtLmNsb3NlKCk7Ci0KLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIElmIHdlIGNhbid0IHdyaXRlIHRoZSBsb2cgdGhlbiBjbGVhciB0aGUgbG9nLgotICAgICAgbG9nLmRlbGV0ZSgwLCBsb2cubGVuZ3RoKCkpOwotICAgIH0KLSAgICByZXR1cm4gbG9nLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFBsdWdpbk5hbWUoKQotICB7Ci0gICAgcmV0dXJuIFBMVUdJTl9OQU1FOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKExpc3QgbmVzdGVkTWVzc2FnZXMpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhuZXN0ZWRNZXNzYWdlcywgMCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcoTGlzdCBuZXN0ZWRNZXNzYWdlcywgaW50IGRlcHRoKQotICB7Ci0gICAgaWYobmVzdGVkTWVzc2FnZXMgIT0gbnVsbCAmJiBuZXN0ZWRNZXNzYWdlcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nID0gIiI7Ci0gICAgICBJdGVyYXRvciBuZXN0ZWRNZXNJdGVyID0gbmVzdGVkTWVzc2FnZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKG5lc3RlZE1lc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJVmFsaWRhdGlvbk1lc3NhZ2UgbmVzdmFsbWVzID0gKElWYWxpZGF0aW9uTWVzc2FnZSluZXN0ZWRNZXNJdGVyLm5leHQoKTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlU3RyaW5nICs9ICIgIjsKLSAgICAgICAgfQotICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBjb250YWlucyBhbnkgZmlsZSByZWZlcmVuY2VzIG1ha2UgdGhlbSByZWxhdGl2ZS4KLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBuZXN2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICJbKF0iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSAoIi0+ICIgKyBtZXNzYWdlICsgIiBbIiArIG5lc3ZhbG1lcy5nZXRMaW5lKCkgKyIsICIgKyBuZXN2YWxtZXMuZ2V0Q29sdW1uKCkgKyJdXG4iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKG5lc3ZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpLCBkZXB0aCArIDEpOwotICAgICAgfQotICAgICAgcmV0dXJuIG1lc3NhZ2VTdHJpbmc7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kCi0gICAqIGFkZCB0aGUgc3BlY2lmaWVkIGZpbGVzIHRvIHRoZSBwcm9qZWN0LgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIFRoZSBuYW1lIGZvciB0aGUgcHJvamVjdC4KLSAgICogQHBhcmFtIGZpbGVzIEFuIGFycmF5IG9mIGZpbGUgbmFtZXMgaW4gdGhlIGZpbGUgc3lzdGVtIHRoYXQKLSAgICogICAgICAgICAgICAgIHdpbGwgYmUgY29waWVkIGludG8gdGhlIHByb2plY3QuCi0gICAqIEByZXR1cm4gVGhlIGNyZWF0ZWQgcHJvamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nW10gZmlsZXMpCi0gIHsKLSAgICBmaW5hbCBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICBmaW5hbCBJUHJvamVjdCBwcm9qZWN0ID0gd29ya3NwYWNlLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZighcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLQkgIHsKLSAgICAgICAgcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0JICB7Ci0gICAgICAgIGZhaWwoIkNvdWxkIG5vdCBjcmVhdGUgcHJvamVjdCAiICsgcHJvamVjdE5hbWUgKyBlKTsKLSAgICAgIH0gCi0gICAgfQotICAgIGlmKCFwcm9qZWN0LmlzT3BlbigpKQotICAgIHsKLSAgICAgIHRyeQotCSAgewotICAgICAgICBwcm9qZWN0Lm9wZW4obnVsbCk7Ci0JICB9Ci0gICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGZhaWwoIkNvdWxkIG5vdCBvcGVuIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgZSk7Ci0JICB9Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gcHJvamVjdERlc2NyaXB0aW9uID0gcHJvamVjdC5nZXREZXNjcmlwdGlvbigpOyAKLSAgICAgIHByb2plY3REZXNjcmlwdGlvbi5zZXROYW1lKHByb2plY3ROYW1lKTsKLSAgICAgIHByb2plY3Quc2V0RGVzY3JpcHRpb24ocHJvamVjdERlc2NyaXB0aW9uLCBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiVW5hYmxlIHRvIHNldCBwcm9qZWN0IHByb3BlcnRpZXMgZm9yIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgIi4gIiArIGUpOwotICAgIH0KLQotICAgIGlmKGZpbGVzICE9IG51bGwpCi0gICAgewotICAgICAgaW50IG51bWZpbGVzID0gZmlsZXMubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bWZpbGVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHRyeQotCQl7Ci0gICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gZmlsZXNbaV07Ci0gICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICAgICAgICAKLSAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICAgICAgRmlsZUlucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLSAgICAgICAgICBJRmlsZSBpRmlsZSA9IHByb2plY3QuZ2V0RmlsZShmaWxlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgaWYoIWlGaWxlLmV4aXN0cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlGaWxlLmNyZWF0ZShpbiwgdHJ1ZSwgbnVsbCk7Ci0gICAgICAgICAgICBpbi5jbG9zZSgpOwotICAgICAgICAgIH0KLQkJfQotICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKLQkJewotCQkgIGZhaWwoIlVuYWJsZSB0byBsb2NhdGUgZmlsZSAiICsgZmlsZXNbaV0pOwotCQl9IAotICAgICAgfQotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBwcm9qZWN0LnJlZnJlc2hMb2NhbCgtMSwgbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHt9Ci0gICAgcmV0dXJuIHByb2plY3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMjk1MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLS8qKgotICogVGVzdHMgZm9yIGxpbmUgbnVtYmVyIGFkanVzdG1lbnRzIGluIHRoZSBXU0RMIHZhbGlkYXRvcidzCi0gKiBYTUwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgTGluZU51bWJlckFkanVzdG1lbnRzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSID0gIkxpbmVOdW1iZXJBZGp1c3RtZW50cy8iOwotCi0gIC8qKgotICAgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdGN2Y2NvbXBsZXh0eXBlMjMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gImN2Yy1jb21wbGV4LXR5cGUuMi4zIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuMy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi4zLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuMy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RjdmNjb21wbGV4dHlwZTI0YigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkMWUzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdHMgZm9yIGZpbGUgcGF0aHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXRoc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgUEFUSFNfRElSID0gIlBhdGhzLyI7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShQYXRoc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vIERlbGV0ZSB0aGUgc2ltcGxlIHByb2plY3QgZm9yIEltcG9ydGVkU2NoZW1hV2l0aFNjaGVtYUltcG9ydCB0ZXN0Ci0gICAgc3VwZXIudGVhckRvd24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2VJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZC5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGUnSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZSBJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZX5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGxhdGZvcm1VUkwoKQotICB7Ci0JU3RyaW5nIHRlc3RuYW1lID0gIm9uZSI7Ci0JU3RyaW5nIHRlc3RmaWxlID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQbGF0Zm9ybVVSTC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotCVN0cmluZyB0ZXN0ZmlsZTIgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBsYXRmb3JtVVJML3R3by53c2RsIjsKLQlTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQbGF0Zm9ybVVSTC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLQlTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGxhdGZvcm1VUkwvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0JIAotCWNyZWF0ZVNpbXBsZVByb2plY3QoInRlc3QiLCBuZXcgU3RyaW5nW117dGVzdGZpbGUsdGVzdGZpbGUyfSk7Ci0JCi0JcnVuVGVzdChGSUxFX1BST1RPQ09MICsgdGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2FjODc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvV1NETFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFdTREwgdmFsaWRhdGlvbiB0ZXN0cyBmb3IgdGhlIFdTREwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFRlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgV1NETF9ESVIgPSAiV1NETC8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV1NETFRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vIERlbGV0ZSB0aGUgc2ltcGxlIHByb2plY3QgZm9yIEltcG9ydGVkU2NoZW1hV2l0aFNjaGVtYUltcG9ydCB0ZXN0Ci0gICAgc3VwZXIudGVhckRvd24oKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIElNUE9SVCBURVNUUwotICAgKi8KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnRJbnZhbGlkTlMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFdTRExXaXRoV1NETCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0V1NETFdpdGhXU0RMIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0V1NETEltcG9ydGluZ1R5cGVzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJXU0RMSW1wb3J0aW5nVHlwZXMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydE5vbkV4aXN0YW50RmlsZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Tm9uRXhpc3RhbnRGaWxlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnROb25FeGlzdGFudEZpbGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L1dTRExOYW1lc3BhY2VBQUEud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFdTRExOYW1lc3BhY2VBQUEoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIldTRExOYW1lc3BhY2VBQUEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbm1wb3J0aW5nU2NoZW1hLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RXU0RMSW1wb3J0aW5nU2NoZW1hSW5tcG9ydGluZ1NjaGVtYSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiV1NETEltcG9ydGluZ1NjaGVtYUltcG9ydGluZ1NjaGVtYSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvSW1wb3J0WE1MSW52YWxpZFdTREwud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFhNTEludmFsaWRXU0RMKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRYTUxJbnZhbGlkV1NETCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvSW1wb3J0T25lQW5kVHdvLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPbmVBbmRUd28oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE9uZUFuZFR3byI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvb25lLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPbmVBbmRUd29fT25lKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJvbmUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T25lQW5kVHdvX1R3bygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAidHdvIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEVtcHR5TG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEVtcHR5TG9jYXRpb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL0ltcG9ydEVtcHR5TmFtZXNwYWNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFbXB0eU5hbWVzcGFjZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RW1wdHlOYW1lc3BhY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUltcG9ydCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAidGVzdC0xLjAiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L1NpbXBsZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L1NpbXBsZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvU2ltcGxlSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDWUNMSUMgVEVTVFMKLSAgICovCi0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UG9ydHR5cGVSZWZNZXNzYWdlMSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUG9ydHR5cGVSZWZNZXNzYWdlMSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkN5Y2xpYy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMi53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UG9ydHR5cGVSZWZNZXNzYWdlMigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUG9ydHR5cGVSZWZNZXNzYWdlMiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkN5Y2xpYy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWZlcmVuY2VJbmxpbmVUeXBlcygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUmVmZXJlbmNlSW5saW5lVHlwZXMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkVtcHR5IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2UoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb0RlZmF1bHROYW1lc3BhY2UoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5vRGVmYXVsdE5hbWVzcGFjZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QmluZGluZ0ludmFsaWRTdHlsZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQmluZGluZ0ludmFsaWRTdHlsZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkJpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RCaW5kaW5nSW52YWxpZFVzZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQmluZGluZ0ludmFsaWRVc2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXNzYWdlSW52YWxpZEVsZW1lbnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk1lc3NhZ2VJbnZhbGlkRWxlbWVudCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkRWxlbWVudC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1lc3NhZ2VJbnZhbGlkVHlwZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTWVzc2FnZUludmFsaWRUeXBlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIk1lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkSW5wdXQvUG9ydFR5cGVJbnZhbGlkSW5wdXQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBvcnRUeXBlSW52YWxpZElucHV0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQb3J0VHlwZUludmFsaWRJbnB1dCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlBvcnRUeXBlRWxlbWVudC9JbnZhbGlkSW5wdXQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC9Qb3J0VHlwZUludmFsaWRPdXRwdXQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBvcnRUeXBlSW52YWxpZE91dHB1dCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUG9ydFR5cGVJbnZhbGlkT3V0cHV0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlBvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2VydmljZUludmFsaWRCaW5kaW5nKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTZXJ2aWNlSW52YWxpZEJpbmRpbmciOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNlcnZpY2VOb0FkZHJlc3MoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNlcnZpY2VOb0FkZHJlc3MiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZXJ2aWNlRWxlbWVudC9Ob0FkZHJlc3MvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5hbWVzcGFjZURvZXNudFJlc29sdmUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5hbWVzcGFjZURvZXNudFJlc29sdmUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TmFtZXNwYWNlUmVzb2x2ZXNIVE1MKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJOYW1lc3BhY2VSZXNvbHZlc0hUTUwvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNpbXBsZWZpbGVTZWxmSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTZWxmSW1wb3J0IjsKLSAgICBTdHJpbmcgZmlsZXByZWZpeCA9IEZJTEVfUFJPVE9DT0w7Ci0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhlIFVSTCBvZiB0aGUgdGVzdCBmaWxlIGlzIGFzIGV4cGVjdGVkLgotICAgIGlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLSAgICB7Ci0gICAgICBmaWxlcHJlZml4ID0gZmlsZXByZWZpeC5zdWJzdHJpbmcoMCwgZmlsZXByZWZpeC5sZW5ndGgoKS0xKTsKLSAgICB9Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gZmlsZXByZWZpeCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvU2ltcGxlRmlsZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEZpbGVXaXRoU2VsZkltcG9ydCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvU2VsZkltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlRmlsZUludmFsaWRTZWxmSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTZWxmSW1wb3J0IjsKLSAgICBTdHJpbmcgZmlsZXByZWZpeCA9IEZJTEVfUFJPVE9DT0w7Ci0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhlIFVSTCBvZiB0aGUgdGVzdCBmaWxlIGlzIGFzIGV4cGVjdGVkLgotICAgIGlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLSAgICB7Ci0gICAgICBmaWxlcHJlZml4ID0gZmlsZXByZWZpeC5zdWJzdHJpbmcoMCwgZmlsZXByZWZpeC5sZW5ndGgoKS0xKTsKLSAgICB9Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gZmlsZXByZWZpeCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvV1NETFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MWVhZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JUZXN0c1BsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLSAgLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotICBwcml2YXRlIHN0YXRpYyBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4gcGx1Z2luOwotICBwcml2YXRlIHN0YXRpYyBCdW5kbGUgcGx1Z2luQnVuZGxlID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3JUZXN0c1BsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHBsdWdpbiA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCXBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0b3AoY29udGV4dCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcGx1Z2luOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWFNEVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZWNjYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBYU0QgdmFsaWRhdGlvbiB0ZXN0cyBmb3IgdGhlIFdTREwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBYU0RfRElSID0gIlhTRC8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNEVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZUVudGl0aWVzVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIm5vcm1hbGl6ZUVudGl0aWVzVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkVudGl0aWVzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZUVudGl0aWVzSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAibm9ybWFsaXplRW50aXRpZXNJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiRW50aXRpZXMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiRW50aXRpZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJSZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0lubGluZVNjaGVtYUdlbmVyYXRlZEltcG9ydHMvTm9JbXBvcnRGb3JVbnByZWZpeGVkQXR0cmlidXRlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIklubGluZVNjaGVtYUdlbmVyYXRlZEltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIklubGluZVNjaGVtYUdlbmVyYXRlZEltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIk9uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIk9uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJTY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlJlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIlJlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJJbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbHVlQ29sb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlZhbHVlQ29sb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJWYWx1ZUNvbG9uLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIlZhbHVlQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJWYWx1ZUNvbG9uLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9JbXBvcnROb05TU2NoZW1hL0ltcG9ydE5vTlNTY2hlbWEud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE5vTlNTY2hlbWEoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE5vTlNTY2hlbWEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJJbXBvcnROb05TU2NoZW1hLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWEvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbXBvcnROb05TU2NoZW1hLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9JbXBvcnROb05TU2NoZW1BbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL05vTlNFbGVtZW50UmVmZXJlbmNlL05vTlNFbGVtZW50UmVmZXJlbmNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb05TRWxlbWVudFJlZmVyZW5jZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTm9OU0VsZW1lbnRSZWZlcmVuY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJOb05TRWxlbWVudFJlZmVyZW5jZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJOb05TRWxlbWVudFJlZmVyZW5jZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIk5vTlNFbGVtZW50UmVmZXJlbmNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lU2NoZW1hTm9OYW1lc3BhY2UoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIklubGluZVNjaGVtYU5vTmFtZXNwYWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDU5ZWUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotCi0gIDwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyIvPgotCi0gIDwhLS0gRW5kIENvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzIC0tPgotCi0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJidnR3b3Jrc3BhY2UiIHZhbHVlPSIke2Jhc2VkaXJ9Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2UtZm9sZGVyIiB2YWx1ZT0iJHtidnR3b3Jrc3BhY2V9LyR7cGx1Z2luLW5hbWV9Ii8+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICAgPGRlbGV0ZT4KLSAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICA8IS0tIFN0YXJ0IHdpdGggY2xlYW4gZGF0YSB3b3Jrc3BhY2UgLS0+ICAKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLQotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLkFsbFdTRExUZXN0cyIvPgotICAgIDwvYW50PgotCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZ2VuZXJhdGVkUmVzdWx0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5ODNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWNvbXBsZXgtdHlwZS4yLjM6IEVsZW1lbnQgJ3dzZGw6b3BlcmF0aW9uJyBjYW5ub3QgaGF2ZSBjaGFyYWN0ZXIgW2NoaWxkcmVuXSwgYmVjYXVzZSB0aGUgdHlwZSdzIGNvbnRlbnQgdHlwZSBpcyBlbGVtZW50LW9ubHkuIFsxNiwgMzddCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzM5MDY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYjogVGhlIGNvbnRlbnQgb2YgZWxlbWVudCAnd3NkbDpvcGVyYXRpb24nIGlzIG5vdCBjb21wbGV0ZS4gT25lIG9mICd7Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjpkb2N1bWVudGF0aW9uLCBXQ1sjI290aGVyOiJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyJdLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOmlucHV0LCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOm91dHB1dH0nIGlzIGV4cGVjdGVkLiBbMTYsIDM3XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGxhdGZvcm1VUkwvb25lLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4YWQ1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFN0eWxlL0JpbmRpbmdJbnZhbGlkU3R5bGUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDIKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWN2Yy1lbnVtZXJhdGlvbi12YWxpZDogVmFsdWUgJ0ludmFsaWRTdHlsZScgaXMgbm90IGZhY2V0LXZhbGlkIHdpdGggcmVzcGVjdCB0byBlbnVtZXJhdGlvbiAnW3JwYywgZG9jdW1lbnRdJy4gSXQgbXVzdCBiZSBhIHZhbHVlIGZyb20gdGhlIGVudW1lcmF0aW9uLiBbMjIsIDkwXQotY3ZjLWF0dHJpYnV0ZS4zOiBUaGUgdmFsdWUgJ0ludmFsaWRTdHlsZScgb2YgYXR0cmlidXRlICdzdHlsZScgb24gZWxlbWVudCAnc29hcDpiaW5kaW5nJyBpcyBub3QgdmFsaWQgd2l0aCByZXNwZWN0IHRvIGl0cyB0eXBlLCAndFN0eWxlQ2hvaWNlJy4gWzIyLCA5MF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS9CaW5kaW5nSW52YWxpZFVzZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjU4MmFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAyCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jdmMtZW51bWVyYXRpb24tdmFsaWQ6IFZhbHVlICdJbnZhbGlkVXNlJyBpcyBub3QgZmFjZXQtdmFsaWQgd2l0aCByZXNwZWN0IHRvIGVudW1lcmF0aW9uICdbbGl0ZXJhbCwgZW5jb2RlZF0nLiBJdCBtdXN0IGJlIGEgdmFsdWUgZnJvbSB0aGUgZW51bWVyYXRpb24uIFsyOSwgNDZdCi1jdmMtYXR0cmlidXRlLjM6IFRoZSB2YWx1ZSAnSW52YWxpZFVzZScgb2YgYXR0cmlidXRlICd1c2UnIG9uIGVsZW1lbnQgJ3NvYXA6Ym9keScgaXMgbm90IHZhbGlkIHdpdGggcmVzcGVjdCB0byBpdHMgdHlwZSwgJ3VzZUNob2ljZScuIFsyOSwgNDZdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UxLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UxLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9JbXBvcnRPbmVBbmRUd28ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL29uZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL29uZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy90d28ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vSW1wb3J0RW1wdHlMb2NhdGlvbi53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhYjYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vSW1wb3J0RW1wdHlMb2NhdGlvbi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSBpcyBlbXB0eS4gQSBsb2NhdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBmb3IgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZS4gWzcsIDU2XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL0ltcG9ydEVtcHR5TmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjA2MGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBmaWxlIGNhbm5vdCBiZSBpbXBvcnRlZCBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgJycgZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBuYW1lc3BhY2UgJ2h0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvJyBvZiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQuIFs3LCA1M10KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTZlYTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgbG9jYXRpb24gYXR0cmlidXRlIGlzIGVtcHR5LiBBIGxvY2F0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGZvciB0aGUgbG9jYXRpb24gYXR0cmlidXRlLiBbNywgNDJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlL0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNlNDY3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWNvbXBsZXgtdHlwZS40OiBBdHRyaWJ1dGUgJ2xvY2F0aW9uJyBtdXN0IGFwcGVhciBvbiBlbGVtZW50ICd3c2RsOmltcG9ydCcuIFs3LCA0NF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vbkV4aXN0YW50RmlsZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDMwOGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgJ1RoaXNGaWxlRG9lc250RXhpc3Qud3NkbCcgZG9jdW1lbnQgY291bGQgbm90IGJlIGltcG9ydGVkLiBDaGVjayB0aGF0IHRoZSBkb2N1bWVudCBleGlzdHMgYW5kIHRoYXQgdGhlIGxvY2F0aW9uIGlzIGNvcnJlY3QuIFszLCA4Nl0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxNWU0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgZmlsZSBjYW5ub3QgYmUgaW1wb3J0ZWQgYmVjYXVzZSB0aGUgbmFtZXNwYWNlICdodHRwOi8vaW52YWxpZG5hbWVzcGFjZScgZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBuYW1lc3BhY2UgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nIG9mIHRoZSBpbXBvcnRlZCBkb2N1bWVudC4gWzMsIDczXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYmNhNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSAnU0lNUExFV1NETC53c2RsJyBkb2N1bWVudCBjb3VsZCBub3QgYmUgaW1wb3J0ZWQuIENoZWNrIHRoYXQgdGhlIGRvY3VtZW50IGV4aXN0cyBhbmQgdGhhdCB0aGUgbG9jYXRpb24gaXMgY29ycmVjdC4gWzMsIDc4XQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNjJjNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBmaWxlIGNhbm5vdCBiZSBpbXBvcnRlZCBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgJ2h0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlJyBkb2VzIG5vdCBtYXRjaCB0aGUgdGFyZ2V0IG5hbWVzcGFjZSAnaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvJyBvZiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQuIFszLCA3OF0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFhNTEludmFsaWRXU0RML0ltcG9ydFhNTEludmFsaWRXU0RMLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4NjgyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFhNTEludmFsaWRXU0RML0ltcG9ydFhNTEludmFsaWRXU0RMLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvWE1MSW52YWxpZFdTREwud3NkbCkuICBbMSwgMF0KLS0+IEVsZW1lbnQgdHlwZSAid3NkbDpkZWZpbml0aW9ucyIgbXVzdCBiZSBmb2xsb3dlZCBieSBlaXRoZXIgYXR0cmlidXRlIHNwZWNpZmljYXRpb25zLCAiPiIgb3IgIi8+Ii4gWzQsIDNdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRpbmdXU0RMV2l0aEltcG9ydGVkU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRpbmdXU0RMV2l0aEltcG9ydGVkU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvTm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQvTm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC90ZXN0LTEuMC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC90ZXN0LTEuMC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1NjaGVtYUltcG9ydGluZ1NjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nVHlwZXMud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvV1NETE5hbWVzcGFjZUFBQS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZjk5MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3JjLXJlc29sdmUuNC4yOiBFcnJvciByZXNvbHZpbmcgY29tcG9uZW50ICd4c2Q6c3RyaW4nLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAneHNkOnN0cmluJyBpcyBpbiBuYW1lc3BhY2UgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsJy4gSWYgdGhpcyBpcyB0aGUgaW5jb3JyZWN0IG5hbWVzcGFjZSwgcGVyaGFwcyB0aGUgcHJlZml4IG9mICd4c2Q6c3RyaW4nIG5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlLCB0aGVuIGFuIGFwcHJvcHJpYXRlICdpbXBvcnQnIHRhZyBzaG91bGQgYmUgYWRkZWQgdG8gJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsJy4gWzE2LCA0N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRFbGVtZW50L01lc3NhZ2VJbnZhbGlkRWxlbWVudC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlMzM1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgcGFydCAnTmV3T3BlcmF0aW9uUmVzcG9uc2UnIGhhcyBhbiBpbnZhbGlkIHZhbHVlICdJbnZhbGlkRWxlbWVudCcgZGVmaW5lZCBmb3IgaXRzIGVsZW1lbnQuIEVsZW1lbnQgZGVjbGFyYXRpb25zIG11c3QgcmVmZXIgdG8gdmFsaWQgdmFsdWVzIGRlZmluZWQgaW4gYSBzY2hlbWEuIFsxMCwgNzRdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OWZlNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIHBhcnQgJ05ld09wZXJhdGlvblJlcXVlc3QnIGhhcyBhbiBpbnZhbGlkIHZhbHVlICdOZXdPcGVyYXRpb25SZXF1ZXN0JyBkZWZpbmVkIGZvciBpdHMgdHlwZS4gVHlwZSBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4gWzEzLCA3NV0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML05hbWVzcGFjZURvZXNudFJlc29sdmUvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRJbnB1dC9Qb3J0VHlwZUludmFsaWRJbnB1dC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjA1OGQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgaW5wdXQgZWxlbWVudCBpcyByZWZlcmVuY2luZyBhbiB1bmRlZmluZWQgbWVzc2FnZSAnSW52YWxpZElucHV0Jy4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVmaW5lZC4gWzE3LCA0N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRPdXRwdXQvUG9ydFR5cGVJbnZhbGlkT3V0cHV0LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxNTkxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRPdXRwdXQvUG9ydFR5cGVJbnZhbGlkT3V0cHV0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgb3V0cHV0IGVsZW1lbnQgaXMgcmVmZXJlbmNpbmcgYW4gdW5kZWZpbmVkIG1lc3NhZ2UgJ0ludmFsaWRPdXRwdXQnLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlIG5hbWUgYW5kIG5hbWVzcGFjZSBhcmUgY29ycmVjdCBhbmQgdGhhdCB0aGUgbWVzc2FnZSBoYXMgYmVlbiBkZWZpbmVkLiBbMTgsIDQ5XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL0VtcHR5LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS9Ob0RlZmF1bHROYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS9Ob0RlZmF1bHROYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvUmVmZXJlbmNlSW5saW5lVHlwZXMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvUmVmZXJlbmNlSW5saW5lVHlwZXMud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGUvU2VsZkltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGUvU2VsZkltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkL1NlbGZJbXBvcnQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTUzNDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkL1NlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBwYXJ0ICdOZXdPcGVyYXRpb25SZXNwb25zZScgaGFzIGFuIGludmFsaWQgdmFsdWUgJ0ludmFsaWRFbGVtZW50JyBkZWZpbmVkIGZvciBpdHMgZWxlbWVudC4gRWxlbWVudCBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4gWzE0LCA3MF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY0MGU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgJ1NlcnZpY2VJbnZhbGlkQmluZGluZ1NPQVAnIHBvcnQgaGFzIGFuIGludmFsaWQgYmluZGluZyAtICdJbmNvcnJlY3RCaW5kaW5nUmVmJy4gQ2hlY2sgdGhhdCB0aGUgJ0luY29ycmVjdEJpbmRpbmdSZWYnIGJpbmRpbmcgaXMgZGVmaW5lZC4gWzM0LCA4M10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZWFhOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlcnZpY2VFbGVtZW50L05vQWRkcmVzcy9TZXJ2aWNlTm9BZGRyZXNzLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgcG9ydCAnU2VydmljZU5vQWRkcmVzc1NPQVAnIGhhcyBubyBhZGRyZXNzIGRlZmluZWQuIEVhY2ggcG9ydCBtdXN0IGRlZmluZSBvbmUgYWRkcmVzcy4gWzM0LCA3OV0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGFmNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgdmFsdWUgb2YgYXR0cmlidXRlICJ2YWx1ZSIgYXNzb2NpYXRlZCB3aXRoIGFuIGVsZW1lbnQgdHlwZSAieHNkOnBhdHRlcm4iIG11c3Qgbm90IGNvbnRhaW4gdGhlICc8JyBjaGFyYWN0ZXIuIFsxMSwgNTVdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0ltcG9ydE5vTlNTY2hlbWEvSW1wb3J0Tm9OU1NjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9Ob05TRWxlbWVudFJlZmVyZW5jZS9Ob05TRWxlbWVudFJlZmVyZW5jZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9Ob05TRWxlbWVudFJlZmVyZW5jZS9Ob05TRWxlbWVudFJlZmVyZW5jZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MWFkMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3JjLXJlc29sdmUuNC4yOiBFcnJvciByZXNvbHZpbmcgY29tcG9uZW50ICd4c2Q6c3RyaW5nYScuIEl0IHdhcyBkZXRlY3RlZCB0aGF0ICd4c2Q6c3RyaW5nYScgaXMgaW4gbmFtZXNwYWNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYScsIGJ1dCBjb21wb25lbnRzIGZyb20gdGhpcyBuYW1lc3BhY2UgYXJlIG5vdCByZWZlcmVuY2VhYmxlIGZyb20gc2NoZW1hIGRvY3VtZW50ICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbCcuIElmIHRoaXMgaXMgdGhlIGluY29ycmVjdCBuYW1lc3BhY2UsIHBlcmhhcHMgdGhlIHByZWZpeCBvZiAneHNkOnN0cmluZ2EnIG5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlLCB0aGVuIGFuIGFwcHJvcHJpYXRlICdpbXBvcnQnIHRhZyBzaG91bGQgYmUgYWRkZWQgdG8gJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC53c2RsJy4gWzcsIDYxXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4ODE4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDIKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNyYy1yZXNvbHZlLjQuMjogRXJyb3IgcmVzb2x2aW5nIGNvbXBvbmVudCAndHdvOk5ld1NpbXBsZVR5cGUnLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAndHdvOk5ld1NpbXBsZVR5cGUnIGlzIGluIG5hbWVzcGFjZSAnaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwnLiBJZiB0aGlzIGlzIHRoZSBpbmNvcnJlY3QgbmFtZXNwYWNlLCBwZXJoYXBzIHRoZSBwcmVmaXggb2YgJ3R3bzpOZXdTaW1wbGVUeXBlJyBuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGlzIHRoZSBjb3JyZWN0IG5hbWVzcGFjZSwgdGhlbiBhbiBhcHByb3ByaWF0ZSAnaW1wb3J0JyB0YWcgc2hvdWxkIGJlIGFkZGVkIHRvICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsJy4gWzEzLCA2N10KLXNyYy1yZXNvbHZlLjQuMjogRXJyb3IgcmVzb2x2aW5nIGNvbXBvbmVudCAnb25lOk5ld1NpbXBsZVR5cGUnLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAnb25lOk5ld1NpbXBsZVR5cGUnIGlzIGluIG5hbWVzcGFjZSAnaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwnLiBJZiB0aGlzIGlzIHRoZSBpbmNvcnJlY3QgbmFtZXNwYWNlLCBwZXJoYXBzIHRoZSBwcmVmaXggb2YgJ29uZTpOZXdTaW1wbGVUeXBlJyBuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGlzIHRoZSBjb3JyZWN0IG5hbWVzcGFjZSwgdGhlbiBhbiBhcHByb3ByaWF0ZSAnaW1wb3J0JyB0YWcgc2hvdWxkIGJlIGFkZGVkIHRvICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsJy4gWzI0LCA2N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvVmFsdWVDb2xvbi9WYWx1ZUNvbG9uLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWJlMzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9jdmMtY29tcGxleC10eXBlLjIuMy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJjdmMtY29tcGxleC10eXBlLjIuMyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi4zLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9jdmMtY29tcGxleC10eXBlLjIuMy8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iTmV3V1NETEZpbGUxIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0iTmV3TWVzc2FnZSI+PC93c2RsOmlucHV0PgotYWFhYQotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5YzUxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik5ld1dTRExGaWxlMSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDI3NWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL29uZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJvbmUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9vbmUvIj4KLTx3c2RsOmltcG9ydAotICBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdHdvLyIKLSAgbG9jYXRpb249InBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0L3R3by53c2RsIi8+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QbGF0Zm9ybVVSTC90d28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML3R3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTMwZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML3R3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3R3by8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ0d28iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90d28vIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFN0eWxlL0JpbmRpbmdJbnZhbGlkU3R5bGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFN0eWxlL0JpbmRpbmdJbnZhbGlkU3R5bGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0NWQzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS9CaW5kaW5nSW52YWxpZFN0eWxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iQmluZGluZ0ludmFsaWRTdHlsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkU3R5bGUvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ludmFsaWRTdHlsZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkU3R5bGUvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkJpbmRpbmdJbnZhbGlkU3R5bGUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZ0ludmFsaWRTdHlsZVNPQVAiIHR5cGU9InRuczpCaW5kaW5nSW52YWxpZFN0eWxlIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJJbnZhbGlkU3R5bGUiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFN0eWxlL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkJpbmRpbmdJbnZhbGlkU3R5bGUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQmluZGluZ0ludmFsaWRTdHlsZVNPQVAiIGJpbmRpbmc9InRuczpCaW5kaW5nSW52YWxpZFN0eWxlU09BUCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS9CaW5kaW5nSW52YWxpZFVzZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNGMyNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iQmluZGluZ0ludmFsaWRVc2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFVzZS8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFVzZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkVXNlLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZVNPQVAiIHR5cGU9InRuczpCaW5kaW5nSW52YWxpZFVzZSI+Ci0gICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkVXNlL05ld09wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0iSW52YWxpZFVzZSIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZVNPQVAiIGJpbmRpbmc9InRuczpCaW5kaW5nSW52YWxpZFVzZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZTFjOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkNhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbnMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbnMvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ib3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2U0YzU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMxLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImN5Y2xpYzEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIiB4bWxuczpjeWNsaWMyPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iIGxvY2F0aW9uPSJQb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9ImN5Y2xpYzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0iY3ljbGljMjpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0iY3ljbGljMjpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEzNTI5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJjeWNsaWMyIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMyLyIgeG1sbnM6Y3ljbGljMT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIiBsb2NhdGlvbj0iUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsIj48L3dzZGw6aW1wb3J0PgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMyLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJjeWNsaWMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9ImN5Y2xpYzE6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImN5Y2xpYzE6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9JbXBvcnRPbmVBbmRUd28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzYzYWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCW5hbWU9IkltcG9ydE9uZUFuZFR3byIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9JbXBvcnRPbmVBbmRUd28iIAotCXhtbG5zOndzZGwxPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiCi0JeG1sbnM6d3NkbDI9Imh0dHA6Ly9hdGVtcHVyaS5vcmcvdHdvLndzZGwiPgotCi0JCi08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiIGxvY2F0aW9uPSJvbmUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIgbG9jYXRpb249InR3by53c2RsIi8+Ci0JCi08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvb25lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIwZmYxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9vbmUud3NkbCIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJvbmUiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiPgotCQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWVzc2FnZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTWVzc2FnZSIgdHlwZT0ieHNkOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy90d28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGYxNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgbmFtZXNwYWNlIG9mIHRoaXMgZG9jdW1lbnQgc3RhcnQgd2l0aCBhbiBhIGFzIGl0IHNob3VsZAotICAgICBiZSBpbXBvcnRlZCBmaXJzdCBieSBJbXBvcnRPbmVBbmRUd28ud3NkbC4gVGhlIG9yZGVyIG9mIHRoZSBpbXBvcnRzIGlzIGRldGVybWluZWQKLSAgICAgYnkgYWxwaGFiZXRpY2FsIG9yZGVyIG9mIHRoZSBuYW1lc3BhY2VzIGluIHRoaXMgZGVmZWN0LiAtLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgbmFtZT0idHdvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIKLQl4bWxuczp3c2RsMT0iaHR0cDovL3RlbXB1cmkub3JnL29uZS53c2RsIiB4bWxuczp3c2RsMj0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL29uZS53c2RsIgotCQlsb2NhdGlvbj0ib25lLndzZGwiPgotCTwvd3NkbDppbXBvcnQ+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9IndzZGwxOk1lc3NhZ2UiIG5hbWU9IklucHV0Ii8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0id3NkbDE6TWVzc2FnZSIgbmFtZT0iT3V0cHV0Ii8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlMb2NhdGlvbi9JbXBvcnRFbXB0eUxvY2F0aW9uLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFiODk2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9JbXBvcnRFbXB0eUxvY2F0aW9uLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLSAgICAgICAgICAgICAgICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICAgICAgICAgICAgbmFtZT0iSW1wb3J0RW1wdHlMb2NhdGlvbiIgCi0gICAgICAgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9JbXBvcnRFbXB0eUxvY2F0aW9uLyI+Ci0gIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9zb21ldXJpIiBsb2NhdGlvbj0iIi8+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ibWVzc2FnZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0ibWVzc2FnZSIgdHlwZT0ieHNkOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eU5hbWVzcGFjZS9JbXBvcnRFbXB0eU5hbWVzcGFjZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzllYWY3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eU5hbWVzcGFjZS9JbXBvcnRFbXB0eU5hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0ltcG9ydEVtcHR5TmFtZXNwYWNlLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICAgICAgICAgICAgbmFtZT0iSW1wb3J0RW1wdHlOYW1lc3BhY2UiIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2UvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iIiBsb2NhdGlvbj0ic2ltcGxlLndzZGwiLz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJtZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL3NpbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2Uvc2ltcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMGYwOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2Uvc2ltcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvIiAKLSAgICAgICAgICAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLSAgICAgICAgICAgICAgICAgIG5hbWU9InNpbXBsZSIgCi0gICAgICAgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMzUyMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgICAgICAgIG5hbWU9IkltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24iIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSIiIGxvY2F0aW9uPSIiLz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJtZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMDIyNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0gICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgICAgICAgICAgIG5hbWU9IkltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUiIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vc29tZXVyaSIvPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Im1lc3NhZ2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Im1lc3NhZ2UiIHR5cGU9InhzZDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnROb25FeGlzdGFudEZpbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc3Njc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnROb25FeGlzdGFudEZpbGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydE5vbkV4aXN0YW50RmlsZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnROb25FeGlzdGFudEZpbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydE5vbkV4aXN0YW50RmlsZS8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9ub25leGlzdGluZ2ZpbGUiIGxvY2F0aW9uPSJUaGlzRmlsZURvZXNudEV4aXN0LndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhZWViMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LyIgeG1sbnM6c2NoZW1hPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgbG9jYXRpb249InNjaGVtYS54c2QiPjwvd3NkbDppbXBvcnQ+ICAgIAotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld01lc3NhZ2UiPgotICAgIAk8d3NkbDpwYXJ0IG5hbWU9Ik5ld01lc3NhZ2UiIGVsZW1lbnQ9InNjaGVtYTpOZXdHbG9iYWxFbGVtZW50Ij48L3dzZGw6cGFydD4KLSAgICA8L3dzZGw6bWVzc2FnZT4gICAKLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDFhMDI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnRJbnZhbGlkTlMvIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vaW52YWxpZG5hbWVzcGFjZSIgbG9jYXRpb249InNjaGVtYS54c2QiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzhlMmYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0V1NETFdpdGhXU0RMLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydFdTRExXaXRoV1NETCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0V1NETFdpdGhXU0RMLyI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvIiBsb2NhdGlvbj0ic2ltcGxld3NkbC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViYjkzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlIiBsb2NhdGlvbj0iU0lNUExFV1NETC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4MmVhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlIiBsb2NhdGlvbj0ic2ltcGxld3NkbC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDUwMDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9CLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9CIj4KLSAgPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vQUMiIHNjaGVtYUxvY2F0aW9uPSIuXEMueHNkIi8+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRmNjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9DLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9BQyI+Ci0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlNhbXBsZVR5cGUiPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTYW1wbGVFbGVtZW50IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTdjMTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL05ld1dTRExGaWxlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Ik5ld1dTRExGaWxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9OZXdXU0RMRmlsZS8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUMiPgotICAJCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iQy54c2QiLz4KLSAgCQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9CIiBzY2hlbWFMb2NhdGlvbj0iQi54c2QiLz4KLQkJPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvSW1wb3J0WE1MSW52YWxpZFdTREwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVhNzg4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0WE1MSW52YWxpZFdTREwvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0WE1MSW52YWxpZFdTREwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFhNTEludmFsaWRXU0RMLyI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1hNTEludmFsaWRXU0RMLyIgbG9jYXRpb249IlhNTEludmFsaWRXU0RMLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9YTUxJbnZhbGlkV1NETC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvWE1MSW52YWxpZFdTREwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5MmQ4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9YTUxJbnZhbGlkV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50IGlzbid0IGNsb3NlZC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJYTUxJbnZhbGlkV1NETCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvWE1MSW52YWxpZFdTREwvIgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iWE1MSW52YWxpZFdTREwiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iWE1MSW52YWxpZFdTRExTT0FQIiB0eXBlPSJ0bnM6WE1MSW52YWxpZFdTREwiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJYTUxJbnZhbGlkV1NETCI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6WE1MSW52YWxpZFdTRExTT0FQIiBuYW1lPSJYTUxJbnZhbGlkV1NETFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1NjaGVtYU5vdEluRGlyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1NjaGVtYU5vdEluRGlyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZmZmRjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRpbmdTY2hlbWFOb3RJbkRpci54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpJbXBvcnRpbmdTY2hlbWFOb3RJbkRpcj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6cGxhaW5zY2hlbWE9Imh0dHA6Ly9wbGFpbnNjaGVtYSI+Ci0JPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9wbGFpbnNjaGVtYSIgc2NoZW1hTG9jYXRpb249InN1YmZvbGRlci9QbGFpblNjaGVtYS54c2QiPjwvaW1wb3J0PgotCTxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InBsYWluc2NoZW1hOk5ld1NpbXBsZVR5cGUiPjwvZWxlbWVudD4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjljN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS8iIHhtbG5zOndzZGwxPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEvIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEvIiBsb2NhdGlvbj0ic3ViZm9sZGVyL0ltcG9ydGVkSW1wb3J0aW5nU2NoZW1hLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdNZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdNZXNzYWdlIiBlbGVtZW50PSJ3c2RsMTpOZXdHbG9iYWxFbGVtZW50Ij48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGIxNjVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJOb1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydCIKLQl0YXJnZXROYW1lc3BhY2U9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JeG1sbnM6ZWxtcz0iY29tbW9uLmVsZW1lbnRzIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJjb21tb24uZWxlbWVudHMiCi0JCQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPGNvbXBsZXhUeXBlIG5hbWU9Ik15VHlwZSI+Ci0JCQkJPHNlcXVlbmNlPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCTwvY29tcGxleFR5cGU+Ci0JCTwvc2NoZW1hPgotCQk8c2NoZW1hCi0JCQl0YXJnZXROYW1lc3BhY2U9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JCQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJjb21tb24uZWxlbWVudHMiLz4KLQkJCTxlbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJlbG1zOk15VHlwZSIgLz4KLQkJCTxlbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCTwvc2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiCi0JCQluYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IgotCQkJbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NjaGVtYU5hbWVzcGFjZUFBQS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TY2hlbWFOYW1lc3BhY2VBQUEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzUwZDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NjaGVtYU5hbWVzcGFjZUFBQS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUFBIiB4bWxuczpTY2hlbWFOYW1lc3BhY2VBQUE9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L2ltcG9ydC0xLjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC9pbXBvcnQtMS4wLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NzNiYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L2ltcG9ydC0xLjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvaW1wb3J0LTEuMC53c2RsIgotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImltcG9ydC0xLjAiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvaW1wb3J0LTEuMC53c2RsIiAvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L3Rlc3QtMS4wLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllMzliNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL3Rlc3QtMS4wLndzZGwiCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idGVzdC0xLjAiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvdGVzdC0xLjAud3NkbCIKLQl4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL2ltcG9ydC0xLjAud3NkbCI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL2ltcG9ydC0xLjAud3NkbCIKLQkJbG9jYXRpb249ImltcG9ydC0xLjAud3NkbCIgLz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdiZTc4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IldTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICAgICAgICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJJbXBvcnRpbmdTY2hlbWFOb3RJbkRpci54c2QiLz4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1R5cGVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NDM3ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1R5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nVHlwZXMvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iV1NETEltcG9ydGluZ1R5cGVzIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nVHlwZXMvIiB4bWxuczp3c2RsMT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExPbmx5VHlwZXMvIj4KLSAgICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvV1NETE9ubHlUeXBlcy8iIGxvY2F0aW9uPSJXU0RMT25seVR5cGVzLndzZGwiPjwvd3NkbDppbXBvcnQ+ICAgIAotICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3TWVzc2FnZSI+Ci0gICAgCTx3c2RsOnBhcnQgbmFtZT0iTmV3TWVzc2FnZSIgZWxlbWVudD0id3NkbDE6TmV3R2xvYmFsRWxlbWVudCI+PC93c2RsOnBhcnQ+Ci0gICAgPC93c2RsOm1lc3NhZ2U+Ci0gICAgCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YzE4ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETE5hbWVzcGFjZUFBQS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vQUFBIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iV1NETE5hbWVzcGFjZUFBQSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUFBIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vQUFBIiBsb2NhdGlvbj0iU2NoZW1hTmFtZXNwYWNlQUFBLnhzZCI+PC93c2RsOmltcG9ydD4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExPbmx5VHlwZXMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExPbmx5VHlwZXMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmNGY2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMT25seVR5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMT25seVR5cGVzLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IldTRExPbmx5VHlwZXMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExPbmx5VHlwZXMvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvV1NETE9ubHlUeXBlcy8iPgotCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD48L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZWU1MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc2NoZW1hLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOnNjaGVtYT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0JPGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NpbXBsZXdzZGwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NpbXBsZXdzZGwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmMzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zaW1wbGV3c2RsLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9zaW1wbGV3c2RsLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InNpbXBsZXdzZGwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvIi8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzJmZDJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydGVkSW1wb3J0aW5nU2NoZW1hLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydGVkSW1wb3J0aW5nU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS8iCi0gICAgICAgICAgICB4bWxuczpJbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYT0iaHR0cDovL0ltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hIj4KLQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiIHNjaGVtYUxvY2F0aW9uPSJJbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QiPjwveHNkOmltcG9ydD4KLQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9IkltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hOk5ld1NpbXBsZVR5cGUiPjwveHNkOmVsZW1lbnQ+PC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTAyYzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiIHhtbG5zOkltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiPgotICA8c2ltcGxlVHlwZSBuYW1lPSJOZXdTaW1wbGVUeXBlIj4KLSAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgIDxtaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICA8L3Jlc3RyaWN0aW9uPgotICA8L3NpbXBsZVR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvUGxhaW5TY2hlbWEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc3ViZm9sZGVyL1BsYWluU2NoZW1hLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VkZTc1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvUGxhaW5TY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3BsYWluc2NoZW1hIiB4bWxuczpQbGFpblNjaGVtYT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0JPHNpbXBsZVR5cGUgbmFtZT0iTmV3U2ltcGxlVHlwZSI+Ci0gICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICA8bWluTGVuZ3RoIHZhbHVlPSIxIi8+Ci0gICAgPC9yZXN0cmljdGlvbj4KLSAgPC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZGMxNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJGb28iCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Zvby8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRm9vLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Zvby8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImIiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ianVuayI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ5IiB0eXBlPSJ4c2Q6c3RyaW4iLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZm9vIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6YSIgbmFtZT0iZm9vIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iYmFyIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6YiIgbmFtZT0iYmFyIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkZvbyI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJnZXRGb28iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOmJhciIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6Zm9vIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRFbGVtZW50L01lc3NhZ2VJbnZhbGlkRWxlbWVudC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGJlMjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50IiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWVzc2FnZUludmFsaWRFbGVtZW50LyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6SW52YWxpZEVsZW1lbnQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9Ik1lc3NhZ2VJbnZhbGlkRWxlbWVudFNPQVAiIHR5cGU9InRuczpNZXNzYWdlSW52YWxpZEVsZW1lbnQiPg0KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPg0KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJNZXNzYWdlSW52YWxpZEVsZW1lbnQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50U09BUCIgYmluZGluZz0idG5zOk1lc3NhZ2VJbnZhbGlkRWxlbWVudFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM0ZWRlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9Ik5ld1dTRExGaWxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OZXdXU0RMRmlsZS8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTmV3V1NETEZpbGUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iTmV3V1NETEZpbGVTT0FQIiB0eXBlPSJ0bnM6TmV3V1NETEZpbGUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iTmV3V1NETEZpbGUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iTmV3V1NETEZpbGVTT0FQIiBiaW5kaW5nPSJ0bnM6TmV3V1NETEZpbGVTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZTc0YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iPgotPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQlUaGlzIFdTREwgZG9jdW1lbnQgdGVzdHMgdGhhdCBhbiBlbGVtZW50IHNwZWNpZmllZCBmb3IgYSBkaWZmZXJlbnQgbmFtZXNwYWNlCi0JdGhhdCBkb2VzIG5vdCByZXNvbHZlIHRvIGFueSByZXNvdXJjZSB2YWxpZGF0ZXMgY29ycmVjdGx5LgotPC93c2RsOmRvY3VtZW50YXRpb24+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9Ik5hbWVzcGFjZURvZXNudFJlc29sdmVTT0FQIiB0eXBlPSJ0bnM6TmFtZXNwYWNlRG9lc250UmVzb2x2ZSI+Ci08ZXh0OmVsZW1lbnQgeG1sbnM6ZXh0PSJodHRwOi8vc2NoZW1hcy5ub25leGlzdGFudGRvbWFpbi5uZWQvZWxlbWVudCIvPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05hbWVzcGFjZURvZXNudFJlc29sdmUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIj4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOk5hbWVzcGFjZURvZXNudFJlc29sdmVTT0FQIiBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMmYzYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05hbWVzcGFjZVJlc29sdmVzSFRNTC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvIj4KLTx3c2RsOmRvY3VtZW50YXRpb24+Ci0JVGhpcyBXU0RMIHRlc3RzIHRoYXQgYW4gZXh0ZW5zaW9uIGVsZW1lbnQgaW4gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIHRoYXQKLQlyZXNvbHZlcyB0byBhbiBIVE1MIGRvY3VtZW50IChub24tc2NoZW1hIGRvY3VtZW50KSBkb2VzIG5vdCBjYXVzZQotCXZhbGlkYXRpb24gZXJyb3JzLgotPC93c2RsOmRvY3VtZW50YXRpb24+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik5hbWVzcGFjZVJlc29sdmVzSFRNTCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUxTT0FQIiB0eXBlPSJ0bnM6TmFtZXNwYWNlUmVzb2x2ZXNIVE1MIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPGV4dDplbGVtZW50IHhtbG5zOmV4dD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiPgotPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6TmFtZXNwYWNlUmVzb2x2ZXNIVE1MU09BUCIgbmFtZT0iTmFtZXNwYWNlUmVzb2x2ZXNIVE1MU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRJbnB1dC9Qb3J0VHlwZUludmFsaWRJbnB1dC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMDJiMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iUG9ydFR5cGVJbnZhbGlkSW5wdXQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZElucHV0LyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6SW52YWxpZElucHV0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlBvcnRUeXBlSW52YWxpZElucHV0U09BUCIgdHlwZT0idG5zOlBvcnRUeXBlSW52YWxpZElucHV0Ij4NCi0gICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4NCi0gICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dFNPQVAiIGJpbmRpbmc9InRuczpQb3J0VHlwZUludmFsaWRJbnB1dFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC9Qb3J0VHlwZUludmFsaWRPdXRwdXQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkMWI2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZE91dHB1dC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRPdXRwdXQvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRPdXRwdXQvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpJbnZhbGlkT3V0cHV0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dFNPQVAiIHR5cGU9InRuczpQb3J0VHlwZUludmFsaWRPdXRwdXQiPg0KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPg0KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZE91dHB1dC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJQb3J0VHlwZUludmFsaWRPdXRwdXQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydFR5cGVJbnZhbGlkT3V0cHV0U09BUCIgYmluZGluZz0idG5zOlBvcnRUeXBlSW52YWxpZE91dHB1dFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvTm9EZWZhdWx0TmFtZXNwYWNlL05vRGVmYXVsdE5hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzMzZTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Ob0RlZmF1bHROYW1lc3BhY2UvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iTm9EZWZhdWx0TmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Ob0RlZmF1bHROYW1lc3BhY2UvIj4KLSAgPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLSAgICA8ZWxlbWVudE5vTmFtZXNwYWNlLz4KLSAgPC93c2RsOmRvY3VtZW50YXRpb24+ICAgIAotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9SZWZlcmVuY2VJbmxpbmVUeXBlcy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzEzMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJlbmNlSW5saW5lVHlwZXMvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iUmVmZXJlbmNlSW5saW5lVHlwZXMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyZW5jZUlubGluZVR5cGVzLyI+Ci0gICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdNZXNzYWdlIj4KLSAgICAJPHdzZGw6cGFydCBuYW1lPSJOZXdNZXNzYWdlIiBlbGVtZW50PSJ0bnM6TmV3R2xvYmFsRWxlbWVudCI+PC93c2RsOnBhcnQ+Ci0gICAgPC93c2RsOm1lc3NhZ2U+Ci0gICAgPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyZW5jZUlubGluZVR5cGVzLyI+Ci0JCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PjwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGViY2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL1NPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS8iPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2VTT0FQIiB0eXBlPSJ0bnM6U09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgdXNlPSJlbmNvZGVkIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgZW5jb2RpbmdTdHlsZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIHVzZT0iZW5jb2RlZCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZSI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6U09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2VTT0FQIiBuYW1lPSJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTQxM2ZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLyI+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlNPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2VTT0FQIiB0eXBlPSJ0bnM6U09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgZW5jb2RpbmdTdHlsZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2UvIiB1c2U9ImVuY29kZWQiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS8iIHVzZT0iZW5jb2RlZCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIj4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlU09BUCIgbmFtZT0iU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTk3OWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUltcG9ydHMgYSBmaWxlIHRoYXQgY29udGFpbnMgYSBzZWxmIGltcG9ydC4KLS0tPgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iIGxvY2F0aW9uPSJTZWxmSW1wb3J0LndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydEZpbGVXaXRoU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnRTT0FQIiB0eXBlPSJ0bnM6SW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0Ij4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQiPgotPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6SW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0U09BUCIgbmFtZT0iSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvU2VsZkltcG9ydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9TZWxmSW1wb3J0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OTFkMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUEgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg5MWQzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZS9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUEgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvU2VsZkltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM4YzQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUFuIGludmFsaWQgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpJbnZhbGlkRWxlbWVudCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTM3NmE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iU2VydmljZUludmFsaWRCaW5kaW5nIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZUludmFsaWRCaW5kaW5nLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VJbnZhbGlkQmluZGluZy8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VJbnZhbGlkQmluZGluZy8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VydmljZUludmFsaWRCaW5kaW5nIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlNlcnZpY2VJbnZhbGlkQmluZGluZ1NPQVAiIHR5cGU9InRuczpTZXJ2aWNlSW52YWxpZEJpbmRpbmciPgotICAgICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZXJ2aWNlSW52YWxpZEJpbmRpbmcvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2VJbnZhbGlkQmluZGluZyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJTZXJ2aWNlSW52YWxpZEJpbmRpbmdTT0FQIiBiaW5kaW5nPSJ0bnM6SW5jb3JyZWN0QmluZGluZ1JlZiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdhMDdmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlcnZpY2VFbGVtZW50L05vQWRkcmVzcy9TZXJ2aWNlTm9BZGRyZXNzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iU2VydmljZU5vQWRkcmVzcyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VOb0FkZHJlc3MvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZU5vQWRkcmVzcy8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VOb0FkZHJlc3MvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlNlcnZpY2VOb0FkZHJlc3MiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iU2VydmljZU5vQWRkcmVzc1NPQVAiIHR5cGU9InRuczpTZXJ2aWNlTm9BZGRyZXNzIj4KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZU5vQWRkcmVzcy9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZU5vQWRkcmVzcyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJTZXJ2aWNlTm9BZGRyZXNzU09BUCIgYmluZGluZz0idG5zOlNlcnZpY2VOb0FkZHJlc3NTT0FQIj4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNzE5NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0NhdGFsb2dTY2hlbWFzL3NjaGVtYTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMSI+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NGRmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0NhdGFsb2dTY2hlbWFzL3NjaGVtYTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMiI+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNzIyOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gSW52YWxpZCB0ZXN0IGZvciBFY2xpcHNlIGRlZmVjdCA3MDY3MC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibm9ybWFsaXplRW50aXRpZXNJbnZhbGlkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLyI+Ci0gICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFTdHJpbmciPiAKLSAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+IAotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iRnw8fD58fnxIfEp8eCIvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPiAKLSAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPiAKLSAgICAgICAgICA8L3hzZDplbGVtZW50PiAKLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc1ZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzVlYTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc1ZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBWYWxpZCB0ZXN0IGZvciBFY2xpcHNlIGRlZmVjdCA3MDY3MC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGVzVmFsaWQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibm9ybWFsaXplRW50aXRlc1ZhbGlkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGVzVmFsaWQvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm9ybWFsaXplRW50aXRlc1ZhbGlkLyI+Ci0gICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFTdHJpbmciPiAKLSAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+IAotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iRnwmbHQ7fCZndDt8fnxIfEp8eCIvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPiAKLSAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPiAKLSAgICAgICAgICA8L3hzZDplbGVtZW50PiAKLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzODc4MzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGRlZmluaXRpb25zIG5hbWU9IkltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlIgotCXhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIKLQl4bWxuczp0bnM9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIKLQl4bWxuczpzY2g9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCi0JPHR5cGVzPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiPgkJCQotCQkJPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWEueHNkIi8+Ci0JCTwveHNkOnNjaGVtYT4KLQkJCQotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIgeG1sbnM6c2NoPSJodHRwOi8vdGVzdC5jb20vc2NoZW1hIj4KLQkJCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3Rlc3QuY29tL3NjaGVtYSIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkVsZW1lbnQiIHR5cGU9InNjaDpNeVR5cGUiLz4KLQkJPC94c2Q6c2NoZW1hPgotCTwvdHlwZXM+CQotCQotCTxtZXNzYWdlIG5hbWU9InJlcXVlc3QiPgotCQk8cGFydCBuYW1lPSJwYXJ0IiBlbGVtZW50PSJ0bnM6RWxlbWVudCIvPgotCTwvbWVzc2FnZT4JCQotCQotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUvc2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9zY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTA2ZTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9zY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiIAotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3QuY29tL3NjaGVtYSI+Ci0JCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik15VHlwZSI+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0iYXR0b25lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJPGF0dHJpYnV0ZSBuYW1lPSJhdHR0d28iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCTwvY29tcGxleFR5cGU+Ci0JCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZmViYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWEvSW1wb3J0Tm9OU1NjaGVtYS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL1NpbXBsZS9UZXN0IgoteG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi14bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJUZXN0IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vU2ltcGxlL1Rlc3QiPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9TaW1wbGUvVGVzdCIKLXhtbG5zOnRucz0iaHR0cDovL1NpbXBsZS9UZXN0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJOb1Rucy54c2QiLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24xIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImlucHV0MSIgbmlsbGFibGU9InRydWUiIHR5cGU9Ik5vVG5zIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgICA8d3NkbDptZXNzYWdlIG5hbWU9Im9wZXJhdGlvbjFSZXF1ZXN0TXNnIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpvcGVyYXRpb24xIiBuYW1lPSJvcGVyYXRpb24xUGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJUZXN0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ib3BlcmF0aW9uMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6b3BlcmF0aW9uMVJlcXVlc3RNc2ciIG5hbWU9Im9wZXJhdGlvbjFSZXF1ZXN0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hL05vVG5zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hL05vVG5zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5YzJiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9Ob1Rucy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOb1RucyI+Ci0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImF0dHJpYnV0ZTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWQ3OTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRTY2hlbWFOb05hbWVzcGFjZS8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIj4KLQk8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0ibm9UTlMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydFNjaGVtYU5vTmFtZXNwYWNlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9ub1ROUy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9ub1ROUy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MDgwYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvbm9UTlMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDA3OWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOb0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vTm9JbXBvcnRGb3JVbnByZWZpeGVkQXR0cmlidXRlLyIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCI+Ci0JCQk8eHM6Y29tcGxleFR5cGUgbmFtZT0idHlwZVdpdGhNaW5NYXhPY2N1cnMiPgotCQkJCTx4czpzZXF1ZW5jZT4KLQkJCQkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9ImVsZW0xIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9ImVsZW0yIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJPC94czpjb21wbGV4VHlwZT4KLQkJCTx4czpjb21wbGV4VHlwZSBuYW1lPSJ0eXBlV2l0aFJlc3RyaWN0aW9uIj4KLQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCTx4czplbGVtZW50IG5hbWU9ImVsZW0zIj4KLQkJCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzb21ldGhpbmciLz4KLQkJCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCQkJPC94czpzaW1wbGVUeXBlPgotCQkJCQk8L3hzOmVsZW1lbnQ+Ci0JCQkJPC94czpzZXF1ZW5jZT4KLQkJCTwveHM6Y29tcGxleFR5cGU+Ci0JCTwveHM6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDEzNzYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hPgotCQotPC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlLyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL05vTlNFbGVtZW50UmVmZXJlbmNlL05vTlNFbGVtZW50UmVmZXJlbmNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzMDJkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJOb05TRWxlbWVudFJlZmVyZW5jZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vTlNFbGVtZW50UmVmZXJlbmNlLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vTlNFbGVtZW50UmVmZXJlbmNlLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDpkb2N1bWVudGF0aW9uPgotCVRoaXMgV1NETCBmaWxlIGRlbW9uc3RyYXRlcyBhIG1lc3NhZ2UgcmVmZXJyaW5nIHRvIGFuIGVsZW1lbnQgdGhhdCBpcyBkZWZpbmVkCi0JYnkgYW4gaW5saW5lIHNjaGVtYSB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuCi0gIDwvd3NkbDpkb2N1bWVudGF0aW9uPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MzNkNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvIiB4bWxuczp4c2QxPSJodHRwOi8vdGVtcHVyaS5vcmcvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELzEiIHhtbG5zOnhzZDI9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvMSI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8xIj4KLQkJICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZ2EiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELzIiPgotCQkgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8xIi8+Ci0JCSAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+Ci0gICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ4c2QxOk5ld0dsb2JhbEVsZW1lbnQiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjJkOTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIgotICAgICAgICAgICAgeG1sbnM6dHdvPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMi8iPgotICAgICAgICAgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvIi8+Ci0gICAgICAgICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik5ld1NpbXBsZVR5cGUiPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0JCSAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InR3bzpOZXdTaW1wbGVUeXBlIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvIgotICAgICAgICAgICAgeG1sbnM6b25lPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMS8iPgotCQkgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIi8+Ci0JCSAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik5ld1NpbXBsZVR5cGUiPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0JCSAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9Im9uZTpOZXdTaW1wbGVUeXBlIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU5OGZkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIgotICAgICAgICAgICAgeG1sbnM6dHdvPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMi8iPgotICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJOZXdTaW1wbGVUeXBlIj4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIi8+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotCQkgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0d286TmV3U2ltcGxlVHlwZSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9SZWZlclRvQW5vdGhlcklubGluZVR5cGUyLyIKLSAgICAgICAgICAgIHhtbG5zOm9uZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIj4KLQkJICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTmV3U2ltcGxlVHlwZSI+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSIvPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLQkJICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ib25lOk5ld1NpbXBsZVR5cGUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIxNDM3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vIj4KLSAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ0aW1lIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9IihbMC05XXsyfTpbMC05XXsyfTpbMC05XXsyfSl8KCNlbXB0eSB2YWx1ZSkiLz4gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4gICAgICAgICAgCi0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNjZjYxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUvIiAKLSAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly9zYW1wbGUvIiAKLSAgICAgICAgICAgICB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgCi0gICAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLQk8dHlwZXM+Ci0JCTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIj4KLQkJCTx4czpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIj4KLQkJCQk8eHM6YW5ub3RhdGlvbj4KLQkJCQkJPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQkJCQkJCTxjaG9pY2UgLz4KLQkJCQkJPC94czpkb2N1bWVudGF0aW9uPgotCQkJCTwveHM6YW5ub3RhdGlvbj4KLQkJCTwveHM6Y29tcGxleFR5cGU+Ci0JCTwveHM6c2NoZW1hPgotCTwvdHlwZXM+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk0MzM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvVmFsdWVDb2xvbi9WYWx1ZUNvbG9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvVmFsdWVDb2xvbi8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iVmFsdWVDb2xvbiIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9WYWx1ZUNvbG9uLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1ZhbHVlQ29sb24vIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvIHNvdXJjZT0iaHR0cDovL3NhbXBsZS5jb20iPgotCQkJCQkJPHhzZDppbml0aWFsVmFsdWUga2luZD0ic3RyaW5nX3ZhbHVlIiB2YWx1ZT0iOiIvPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRlODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiODQ4ZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLXRlbXAuZm9sZGVyCi13c2kudGVzdHMuamFyCi1idWlsZC54bWwKLWphdmFDb21waWxlci53c2kudGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTVkMTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0Yjc5M2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gQXByIDE2IDE3OjU5OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MzYwM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jV2VkIE1heSAzMCAyMzoyNDozNCBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYWE3NmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jV2VkIE1hciAyOSAwNDowODo0OCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxYzA4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogd3NpLnRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbC5XU0lUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LndzaSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLm9zZ2ksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjMDdmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXNvdXJjZS53c2kudGVzdHMuamFyID0gc3JjLwotb3V0cHV0LndzaS50ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSB3c2kudGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3RSZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyOTE2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cwotQnVuZGxlLU5hbWUuMCA9IFdTSSBKVW5pdCBUZXN0Ci1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZUNvbmZvcm1hbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlQ29uZm9ybWFuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZDliYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlQ29uZm9ybWFuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydC5Bc3NlcnRpb25FcnJvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgQ29yZUNvbmZvcm1hbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfQ0FTRV9GSUxFID0gInRlc3RjYXNlLnhtbCI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFEX0lEX0FQID0gIkFQMTAiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRF9JRF9TU0JQID0gIlNTQlAxMCI7Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIHBsdWdpblVSSSA9IG51bGw7Ci0gICAgcHJvdGVjdGVkIFN0cmluZyB0YWRJRCA9IFRBRF9JRF9BUDsKLQotICAgIHB1YmxpYyBDb3JlQ29uZm9ybWFuY2VUZXN0KFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgICAgICBwbHVnaW5VUkkgPSBXU0lUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0dXAoKQotICAgIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzLgotICAgICAqIEBwYXJhbSBmaWxlbmFtZSAtIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGNhc2UueG1sIGZpbGUuCi0gICAgICogQHJldHVybiB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzLgotICAgICAqLwotICAgIHByb3RlY3RlZCBMaXN0IGdldEV4cGVjdGVkQXNzZXJ0aW9uRmFpbHVyZXMoU3RyaW5nIGZpbGVuYW1lKSB7Ci0gICAgICAgIExpc3QgYXNzZXJ0aW9uRmFpbHVyZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS4KLSAgICAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBidWlsZGVyLnBhcnNlKGZpbGVuYW1lKTsKLSAgICAgICAgICAgIE5vZGVMaXN0IGxpc3QgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImFzc2VydGlvbiIpOwotICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KWxpc3QuaXRlbShpKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0YWRJRCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHRhZCAhPSBudWxsKSAmJiB0YWQuZXF1YWxzKHRoaXMudGFkSUQpKQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uRmFpbHVyZXMuYWRkKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlcyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFzc2VydGlvbkZhaWx1cmVzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXBhcmUgdGhlIGFjdHVhbCBlcnJvcnMgd2l0aCB0aGUgZXhwZWN0ZWQgZXJyb3JzLgotICAgICAqIEBwYXJhbSBlcnJvcnMgdGhlIGFjdHVhbCBhc3NlcnRpb24gZmFpbHVyZXMKLSAgICAgKiBAcGFyYW0gZXhwZWN0ZWRFcnJvcnMgdGhlIGV4cGVjdGVkIGFzc2VydGlvbiBmYWlsdXJlcwotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGFuYWx5emVSZXN1bHRzKExpc3QgZXJyb3JzLCBMaXN0IGV4cGVjdGVkRXJyb3JzKSB7Ci0gICAgICAgIExpc3QgYWN0dWFsRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBpZiAoKGVycm9ycyAhPSBudWxsKSAmJiAoZXhwZWN0ZWRFcnJvcnMgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgIEl0ZXJhdG9yIGkgPSBlcnJvcnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIEFzc2VydGlvbkVycm9yIGUgPSAoQXNzZXJ0aW9uRXJyb3IpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGFzc2VydGlvbklkID0gZS5nZXRBc3NlcnRpb25JRCgpOwotICAgICAgICAgICAgICAgIGFjdHVhbEVycm9ycy5hZGQoYXNzZXJ0aW9uSWQpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFleHBlY3RlZEVycm9ycy5jb250YWlucyhhc3NlcnRpb25JZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmFpbCgiVW5leHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZTogIiArIGFzc2VydGlvbklkKTsgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpID0gZXhwZWN0ZWRFcnJvcnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBhc3NlcnRpb25JZCA9IChTdHJpbmcpaS5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbEVycm9ycy5jb250YWlucyhhc3NlcnRpb25JZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmU6ICIgKyBhc3NlcnRpb25JZCk7IAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEVycm9ycy5zaXplKCksIGVycm9ycy5zaXplKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgZ2l2ZW4gdGFkLgotICAgICAqIEBwYXJhbSB0aWQgdGhlIHRhZCBpZC4KLSAgICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGFkLgotICAgICAqLwotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VEFEVVJJKFN0cmluZyB0aWQpCi0gICAgewotICAgICAgICBpZiAodGlkLmVxdWFscyhUQURfSURfQVApKQotICAgICAgICAgICAgcmV0dXJuIFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuQVBfQVNTRVJUSU9OX0ZJTEU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNTQlBfQVNTRVJUSU9OX0ZJTEU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWQ1ZjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLk1lc3NhZ2VBbmFseXplcjsKLQotcHVibGljIGNsYXNzIENvcmVNZXNzYWdlTG9nQ29uZm9ybWFuY2VUZXN0IGV4dGVuZHMgQ29yZUNvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRV9MT0dfQkFTRV9ESVJFQ1RPUlkgPQotICAgICAgInRlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfTE9HX0VYVEVOU0lPTiA9ICIud3NpbXNnIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9CQVNFX0RJUkVDVE9SWSA9ICJ0ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRVhURU5TSU9OID0gIi53c2RsIjsKLQotICBwdWJsaWMgQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QoU3RyaW5nIG5hbWUpIAotICB7Ci0gICAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBKVW5pdCB0ZXN0OiB2YWxpZGF0ZSB0aGUgbWVzc2FnZSBsb2cgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIFdTLUkgUHJvZmlsZS4KLSAgICogQHBhcmFtIHRhZCBoZSBXUy1JIFRlc3QgQXNzZXJ0aW9uIERvY3VtZW50Ci0gICAqIEBwYXJhbSB0ZXN0TmFtZSB0aGUgbmFtZSBvZiB0aGUgdGVzdCBjb250YWluaW5nIHRoZSB3c2RsIGRvY3VtZW50Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIHRlc3ROYW1lLCBTdHJpbmcgdGFkSUQpIHsJCi0gICAgICB0aGlzLnRhZElEID0gdGFkSUQ7Ci0KLSAgICAgIGFzc2VydE5vdE51bGwoIlByb2JsZW1zIGRldGVybWluaW5nIGJhc2UgdXJsIiwgcGx1Z2luVVJJKTsKLSAgICAgIFN0cmluZyB0ZXN0RGlyZWN0b3J5ICA9IHBsdWdpblVSSSArIE1FU1NBR0VfTE9HX0JBU0VfRElSRUNUT1JZICsgIi8iICsKLSAgICAgICAgICAgICAgY2F0ZWdvcnkgKyAiLyIgKyB0ZXN0TmFtZTsKLSAgICAgIFN0cmluZyBtZXNzYWdlTG9nRmlsZSA9ICJmaWxlOi8vIiArIHRlc3REaXJlY3RvcnkgKyAiLyIgKyB0ZXN0TmFtZSArCi0gICAgICAgICAgICAgIE1FU1NBR0VfTE9HX0VYVEVOU0lPTjsKLSAgICAgIFN0cmluZyB0ZXN0Y2FzZUZpbGUgPSB0ZXN0RGlyZWN0b3J5ICsgICIvIiArIFRFU1RfQ0FTRV9GSUxFOwotCi0gICAgICAvLyB2YWxpZGF0ZSB0aGUgbWVzc2FnZSBsb2cgZG9jdW1lbnQKLSAgICAgIE1lc3NhZ2VBbmFseXplciBhbmFseXplciA9IHZhbGlkYXRlQ29uZm9ybWFuY2UobWVzc2FnZUxvZ0ZpbGUsIHRhZElEKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIlVua25vd24gcHJvYmxlbXMgZHVyaW5nIHZhbGlkYXRpb24iLCBhbmFseXplcik7Ci0KLSAgICAgIC8vIHJldHJpZXZlIHRoZSBleHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZXMKLSAgICAgIExpc3QgZXhwZWN0ZWRFcnJvcnMgPSBnZXRFeHBlY3RlZEFzc2VydGlvbkZhaWx1cmVzKHRlc3RjYXNlRmlsZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyByZXRyaWV2aW5nIGV4cGVjdGVkIGZhaWx1cmVzIiwgZXhwZWN0ZWRFcnJvcnMpOwotCi0gICAgICAvLyBjb21wYXJlIHRoZSBhY3R1YWwgZXJyb3JzIHdpdGggdGhlIGV4cGVjdGVkIGVycm9ycwotICAgICAgYW5hbHl6ZVJlc3VsdHMoYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIGV4cGVjdGVkRXJyb3JzKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgd3NkbCBkb2N1bWVudCBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgV1MtSSBQcm9maWxlLgotICAgKiBAcGFyYW0gdGFkICB0aGUgV1MtSSBUZXN0IEFzc2VydGlvbiBEb2N1bWVudAotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICogQHJldHVybiB0aGUgV1NETEFuYWx5emVyIG9iamVjdCBjb250YWluaW5nIHRoZSB2YWxpZGF0aW9uIHJlc3VsdHMKLSAgICovICAKLSAgcHJvdGVjdGVkIE1lc3NhZ2VBbmFseXplciB2YWxpZGF0ZUNvbmZvcm1hbmNlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRhZElEKSB7Ci0gICAgICBNZXNzYWdlQW5hbHl6ZXIgYW5hbHl6ZXIgPSBudWxsOwotICAgICAgdHJ5IHsKLSAgICAgICAgICBXU0lQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG5ldyBXU0lQcmVmZXJlbmNlcygpOwotICAgICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCggV1NJVGVzdFRvb2xzUHJvcGVydGllcy5TVE9QX05PTl9XU0kpOwotICAgICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoZ2V0VEFEVVJJKHRhZElEKSk7Ci0KLSAgICAgICAgICBhbmFseXplciA9IG5ldyBNZXNzYWdlQW5hbHl6ZXIoZmlsZW5hbWUsIHByZWZlcmVuY2VzKTsKLQotICAgICAgICAgIC8vIHJ1biB0aGUgY29uZm9ybWFuY2UgY2hlY2sgYW5kIGFkZCBlcnJvcnMgYW5kIHdhcm5pbmdzIGFzIG5lZWRlZAotICAgICAgICAgIGFuYWx5emVyLnZhbGlkYXRlQ29uZm9ybWFuY2UoKTsKLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9CQotICAgICAgcmV0dXJuIGFuYWx5emVyOwotICB9Ci0KLSAgCi0gIAotICAvKioKLSAgICogSlVuaXQgdGVzdDogdmFsaWRhdGUgdGhlIG1lc3NhZ2UgbG9nIHdpdGggYSBXU0RMIGZpbGUKLSAgICogQHBhcmFtIHdzZGxGaWxlIFVSSSBvZiB0aGUgV1NETCBmaWxlCi0gICAqIEBwYXJhbSBXU0RhdGEgU3RyaW5nIGFycmF5IGNvbnRhaW5pbmc6IGVsZW1lbnRuYW1lLCBuYW1lc3BhY2UsIHBhcmVudG5hbWUsIHR5cGUKLSAgICogQHBhcmFtIGZpbGVuYW1lIHRoZSBuYW1lIG9mIHRoZSBsb2cgYW5kIHdzZGwgZmlsZSAodGhleSBzaG91bGQgYmUgbG9jYXRlZCBpbiB0aGUgbG9nIGFuZCB3c2RsIHBhdGhzIHJlc3BlY3RpdmVseSkKLSAgICovCi0gIAotICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0V2l0aFdTREwoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgdGVzdE5hbWUsIFN0cmluZ1tdIFdTRGF0YSkgewkKLQotICAgICAgYXNzZXJ0Tm90TnVsbCgiUHJvYmxlbXMgZGV0ZXJtaW5pbmcgYmFzZSB1cmwiLCBwbHVnaW5VUkkpOwotICAgICAgU3RyaW5nIHRlc3REaXJlY3RvcnkgID0gcGx1Z2luVVJJICsgTUVTU0FHRV9MT0dfQkFTRV9ESVJFQ1RPUlkgKyAiLyIgKwotICAgICAgICAgICAgICBjYXRlZ29yeSArICIvIiArIHRlc3ROYW1lOwotICAgICAgU3RyaW5nIG1lc3NhZ2VMb2dGaWxlID0gImZpbGU6Ly8iICsgdGVzdERpcmVjdG9yeSArICIvIiArIHRlc3ROYW1lICsKLSAgICAgICAgICAgICAgTUVTU0FHRV9MT0dfRVhURU5TSU9OOwotICAgICAgU3RyaW5nIHRlc3RjYXNlRmlsZSA9IHRlc3REaXJlY3RvcnkgKyAgIi8iICsgVEVTVF9DQVNFX0ZJTEU7Ci0gICAgICBTdHJpbmcgd3NkbEZpbGUgPSAiZmlsZTovLyIgKyBwbHVnaW5VUkkgKyBXU0RMX0JBU0VfRElSRUNUT1JZICsgIi8iICsgY2F0ZWdvcnkgKyAiLyIgKyB0ZXN0TmFtZSArIFdTRExfRVhURU5TSU9OOwotICAgICAgCi0gICAgICAvLyB2YWxpZGF0ZSB0aGUgbWVzc2FnZSBsb2cgZG9jdW1lbnQKLSAgICAgIE1lc3NhZ2VBbmFseXplciBhbmFseXplciA9IHZhbGlkYXRlQ29uZm9ybWFuY2VXaXRoV1NETChtZXNzYWdlTG9nRmlsZSwgd3NkbEZpbGUsIFdTRGF0YSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJVbmtub3duIHByb2JsZW1zIGR1cmluZyB2YWxpZGF0aW9uIiwgYW5hbHl6ZXIpOwotCi0gICAgICAvLyByZXRyaWV2ZSB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzCi0gICAgICBMaXN0IGV4cGVjdGVkRXJyb3JzID0gZ2V0RXhwZWN0ZWRBc3NlcnRpb25GYWlsdXJlcyh0ZXN0Y2FzZUZpbGUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiUHJvYmxlbXMgcmV0cmlldmluZyBleHBlY3RlZCBmYWlsdXJlcyIsIGV4cGVjdGVkRXJyb3JzKTsKLQotICAgICAgLy8gY29tcGFyZSB0aGUgYWN0dWFsIGVycm9ycyB3aXRoIHRoZSBleHBlY3RlZCBlcnJvcnMKLSAgICAgIGFuYWx5emVSZXN1bHRzKGFuYWx5emVyLmdldEFzc2VydGlvbkVycm9ycygpLCBleHBlY3RlZEVycm9ycyk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSBsb2cgd2l0aCBhIFdTREwgZmlsZQotICAgKiBAcGFyYW0gd3NkbEZpbGUgVVJJIG9mIHRoZSBXU0RMIGZpbGUKLSAgICogQHBhcmFtIFdTRGF0YSBTdHJpbmcgYXJyYXkgY29udGFpbmluZzogZWxlbWVudG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50bmFtZSwgdHlwZQotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIG5hbWUgb2YgdGhlIGxvZyBhbmQgd3NkbCBmaWxlICh0aGV5IHNob3VsZCBiZSBsb2NhdGVkIGluIHRoZSBsb2cgYW5kIHdzZGwgcGF0aHMgcmVzcGVjdGl2ZWx5KQotICAgKiBAcmV0dXJuIHRoZSBXU0RMQW5hbHl6ZXIgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHZhbGlkYXRpb24gcmVzdWx0cwotICAgKi8gIAotCi0JcHJvdGVjdGVkIE1lc3NhZ2VBbmFseXplciB2YWxpZGF0ZUNvbmZvcm1hbmNlV2l0aFdTREwoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgd3NkbEZpbGUsIFN0cmluZ1tdIFdTRGF0YSkgewotCSAgICBNZXNzYWdlQW5hbHl6ZXIgYW5hbHl6ZXIgPSBudWxsOwotCSAgICB0cnkgewotCSAgICAgICAgV1NJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBuZXcgV1NJUHJlZmVyZW5jZXMoKTsKLQkgICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCggV1NJVGVzdFRvb2xzUHJvcGVydGllcy5TVE9QX05PTl9XU0kpOwotCSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShnZXRUQURVUkkodGFkSUQpKTsKLQkKLQkgICAgICAgIGFuYWx5emVyID0gbmV3IE1lc3NhZ2VBbmFseXplcihmaWxlbmFtZSwgd3NkbEZpbGUsIFdTRGF0YVswXSwgIFdTRGF0YVsxXSwgV1NEYXRhWzJdLCBXU0RhdGFbM10sIHByZWZlcmVuY2VzKTsKLQkKLQkgICAgICAgIC8vIHJ1biB0aGUgY29uZm9ybWFuY2UgY2hlY2sgYW5kIGFkZCBlcnJvcnMgYW5kIHdhcm5pbmdzIGFzIG5lZWRlZAotCSAgICAgICAgYW5hbHl6ZXIudmFsaWRhdGVDb25mb3JtYW5jZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgICAgcmV0dXJuIG51bGw7Ci0JICAgIH0JCi0JICAgIHJldHVybiBhbmFseXplcjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZVdTRExDb25mb3JtYW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZVdTRExDb25mb3JtYW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgzMzg0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL0NvcmVXU0RMQ29uZm9ybWFuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1Byb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5XU0RMQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETFJlYWRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotcHVibGljIGNsYXNzIENvcmVXU0RMQ29uZm9ybWFuY2VUZXN0IGV4dGVuZHMgQ29yZUNvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9CQVNFX0RJUkVDVE9SWSA9ICJ0ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRVhURU5TSU9OID0gIi53c2RsIjsKLQotICBwdWJsaWMgQ29yZVdTRExDb25mb3JtYW5jZVRlc3QoU3RyaW5nIG5hbWUpIAotICB7Ci0gICAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBKVW5pdCB0ZXN0OiB2YWxpZGF0ZSB0aGUgd3NkbCBkb2N1bWVudCBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgV1MtSSBQcm9maWxlLgotICAgKiBAcGFyYW0gdGFkIGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQKLSAgICogQHBhcmFtIHRlc3ROYW1lIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IGNvbnRhaW5pbmcgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyB0YWRJRCkKLSAgewkKLQl0aGlzLnRhZElEID0gdGFkSUQ7Ci0KLSAgICBhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyBkZXRlcm1pbmluZyBiYXNlIHVybCIsIHBsdWdpblVSSSk7Ci0gICAgU3RyaW5nIHRlc3REaXJlY3RvcnkgID0gcGx1Z2luVVJJICsgV1NETF9CQVNFX0RJUkVDVE9SWSArICIvIiArIGNhdGVnb3J5ICsgIi8iICsgdGVzdE5hbWU7Ci0gICAgU3RyaW5nIHdzZGxGaWxlID0gImZpbGU6Ly8iICsgdGVzdERpcmVjdG9yeSArICIvIiArIHRlc3ROYW1lICsgV1NETF9FWFRFTlNJT047Ci0gICAgU3RyaW5nIHRlc3RjYXNlRmlsZSA9IHRlc3REaXJlY3RvcnkgKyAgIi8iICsgVEVTVF9DQVNFX0ZJTEU7Ci0gICAgCi0JLy8gdmFsaWRhdGUgdGhlIFdTREwgZG9jdW1lbnQKLSAgICBXU0RMQW5hbHl6ZXIgYW5hbHl6ZXIgPSB2YWxpZGF0ZUNvbmZvcm1hbmNlKHdzZGxGaWxlLCB0YWRJRCk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiVW5rbm93biBwcm9ibGVtcyBkdXJpbmcgdmFsaWRhdGlvbiIsIGFuYWx5emVyKTsKLSAgICAKLQkvLyByZXRyaWV2ZSB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzCi0JTGlzdCBleHBlY3RlZEVycm9ycyA9IGdldEV4cGVjdGVkQXNzZXJ0aW9uRmFpbHVyZXModGVzdGNhc2VGaWxlKTsKLQlhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyByZXRyaWV2aW5nIGV4cGVjdGVkIGZhaWx1cmVzIiwgZXhwZWN0ZWRFcnJvcnMpOwotCQotCS8vIGNvbXBhcmUgdGhlIGFjdHVhbCBlcnJvcnMgd2l0aCB0aGUgZXhwZWN0ZWQgZXJyb3JzCi0gICAgYW5hbHl6ZVJlc3VsdHMoYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIGV4cGVjdGVkRXJyb3JzKTsKLSAgfSAgICAKLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIHdzZGwgZG9jdW1lbnQgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIFdTLUkgUHJvZmlsZS4KLSAgICogQHBhcmFtIHRhZCAgdGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQKLSAgICogQHBhcmFtIGZpbGVuYW1lIHRoZSB3c2RsIGRvY3VtZW50Ci0gICAqIEByZXR1cm4gdGhlIFdTRExBbmFseXplciBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsaWRhdGlvbiByZXN1bHRzCi0gICAqLyAgCi0gIHByb3RlY3RlZCBXU0RMQW5hbHl6ZXIgdmFsaWRhdGVDb25mb3JtYW5jZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB0YWRJRCkKLSAgewotCVdTRExBbmFseXplciBhbmFseXplciA9IG51bGw7Ci0gICAgdHJ5IAotICAgIHsKLSAgIAkgIFdTSVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gbmV3IFdTSVByZWZlcmVuY2VzKCk7Ci0gICAJICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoIFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1RPUF9OT05fV1NJKTsKLQkgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoZ2V0VEFEVVJJKHRhZElEKSk7Ci0JCQotCSAgYW5hbHl6ZXIgPSBuZXcgV1NETEFuYWx5emVyKGZpbGVuYW1lLCBwcmVmZXJlbmNlcyk7Ci0JICBzZXRDb25maWd1cmF0aW9ucyhmaWxlbmFtZSwgYW5hbHl6ZXIpOwotCQkKLQkgIC8vIHJ1biB0aGUgY29uZm9ybWFuY2UgY2hlY2sgYW5kIGFkZCBlcnJvcnMgYW5kIHdhcm5pbmdzIGFzIG5lZWRlZAotCSAgYW5hbHl6ZXIudmFsaWRhdGVDb25mb3JtYW5jZSgpOwotICAgIH0gICAgCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0JCi0JcmV0dXJuIGFuYWx5emVyOwotICB9Ci0gIAotICAvKioKLSAgICogR2F0aGVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgV1NETCBmaWxlLgotICAgKiBAcGFyYW0gZmlsZU5hbWUgdGhlIHdzZGwgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBhIFdTRExBbmFseXplciBvYmplY3QgY29udGFpbmcgY29uZmlndXJhdGlvbiBpbmZvLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0Q29uZmlndXJhdGlvbnMoU3RyaW5nIGZpbGVuYW1lLCBXU0RMQW5hbHl6ZXIgYW5hbHl6ZXIpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0RMUmVhZGVyIHdzZGxSZWFkZXIgPSBuZXcgV1NETFJlYWRlckltcGwoKTsKLQotICAgICAgLy8gU2V0IGZlYXR1cmVzCi0gICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoY29tLmlibS53c2RsLkNvbnN0YW50cy5GRUFUVVJFX1ZFUkJPU0UsIGZhbHNlKTsKLSAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfSU1QT1JUX0RPQ1VNRU5UUywgdHJ1ZSk7Ci0KLSAgICAgIC8vIFBhcnNlIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MRG9jdW1lbnQoZmlsZW5hbWUpOwotCSAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbFJlYWRlci5yZWFkV1NETChmaWxlbmFtZSwgZG9jdW1lbnQpOwotICAgICAgLy9EZWZpbml0aW9uIGRlZmluaXRpb24gPSByZWFkZXIucmVhZFdTREwoZmlsZW5hbWUpOwotCi0JICBTdHJpbmcgbmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQotCSAgLy8gZ2V0IGFsbCB0aGUgY29sbGVjdGlvbnMgd2UgbWF5IG5lZWQgdG8gdmFsaWRhdGUKLQkgIENvbGxlY3Rpb24gc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCk7Ci0JICBDb2xsZWN0aW9uIGJpbmRpbmdzID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5ncygpLnZhbHVlcygpOwotCSAgQ29sbGVjdGlvbiBwb3J0VHlwZXMgPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlcygpLnZhbHVlcygpOwotCSAgQ29sbGVjdGlvbiBtZXNzYWdlcyA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKTsKLQotCSAgLy8gVGhlIFdTLUkgY29uZm9ybWFuY2UgdG9vbHMgcmVxdWlyZSB0aGF0IGVhY2ggc2VydmljZSBiZSBhbmFseXplZCBzZXBhcmF0ZWx5LgotCSAgLy8gR2V0IGFsbCB0aGUgc2VydmljZXMgYW5kIGFuYWx5emUgdGhlbS4KLQkgIGlmIChzZXJ2aWNlcyAhPSBudWxsICYmICFzZXJ2aWNlcy5pc0VtcHR5KCkpCi0JICB7Ci0JICAgIEl0ZXJhdG9yIHNlcnZpY2VJdGVyYXRvciA9IHNlcnZpY2VzLml0ZXJhdG9yKCk7Ci0KLQkgICAgd2hpbGUgKHNlcnZpY2VJdGVyYXRvci5oYXNOZXh0KCkpCi0JICAgIHsKLQkgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgc2VydmljZUl0ZXJhdG9yLm5leHQoKTsKLQotCSAgICAgIFN0cmluZyBzZXJ2aWNlbmFtZSA9IHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQotCSAgICAgIENvbGxlY3Rpb24gcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCk7Ci0JICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgIXBvcnRzLmlzRW1wdHkoKSkKLQkgICAgICB7Ci0JICAgICAgICAvLyBUaGUgV1MtSSB0b29scyBtdXN0IGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHBvcnQgd2l0aGluIGVhY2ggc2VydmljZS4KLQkgICAgICAgIEl0ZXJhdG9yIHBvcnRJdGVyYXRvciA9IHBvcnRzLml0ZXJhdG9yKCk7Ci0JICAgICAgICB3aGlsZSAocG9ydEl0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIHBvcnRJdGVyYXRvci5uZXh0KCk7Ci0JCQkgIGFuYWx5emVyLmFkZENvbmZpZ3VyYXRpb25Ub1Rlc3Qoc2VydmljZW5hbWUsIG5hbWVzcGFjZSwgcG9ydC5nZXROYW1lKCksIFdTRExBbmFseXplci5QT1JUKTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgLy8gdmFsaWRhdGUgYXQgdGhlIGJpbmRpbmcgbGV2ZWwgLSBjaGVjayBmb3IgZXZlcnkgYmluZGluZwotCSAgICAgIGVsc2UgaWYgKGJpbmRpbmdzICE9IG51bGwgJiYgIWJpbmRpbmdzLmlzRW1wdHkoKSkKLQkgICAgICB7Ci0JICAgICAgICBJdGVyYXRvciBiaW5kaW5nSXRlcmF0b3IgPSBiaW5kaW5ncy5pdGVyYXRvcigpOwotCi0JICAgICAgICB3aGlsZSAoYmluZGluZ0l0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGJpbmRpbmdJdGVyYXRvci5uZXh0KCk7Ci0JICAgICAgICAgIFN0cmluZyBiaW5kaW5nbmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIGJpbmRpbmduYW1lLCBXU0RMQW5hbHl6ZXIuQklORElORyk7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICAgIC8vIHZhbGlkYXRlIGF0IHRoZSBwb3J0VHlwZSBsZXZlbCAtIGNoZWNrIGZvciBldmVyeSBwb3J0VHlwZQotCSAgICAgIGVsc2UgaWYgKHBvcnRUeXBlcyAhPSBudWxsICYmICFwb3J0VHlwZXMuaXNFbXB0eSgpKQotCSAgICAgIHsKLQkgICAgICAgIEl0ZXJhdG9yIHBvcnRUeXBlSXRlcmF0b3IgPSBwb3J0VHlwZXMuaXRlcmF0b3IoKTsKLQkgICAgICAgIHdoaWxlIChwb3J0VHlwZUl0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIHBvcnRUeXBlSXRlcmF0b3IubmV4dCgpOwotCSAgICAgICAgICBTdHJpbmcgcG9ydFR5cGVuYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIHBvcnRUeXBlbmFtZSwgV1NETEFuYWx5emVyLlBPUlRUWVBFKTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgLy8gdmFsaWRhdGUgYXQgdGhlIG1lc3NhZ2UgbGV2ZWwgLSBjaGVjayBmb3IgZXZlcnkgbWVzc2FnZQotCSAgICAgIGVsc2UgaWYgKG1lc3NhZ2VzICE9IG51bGwgJiYgIW1lc3NhZ2VzLmlzRW1wdHkoKSkKLQkgICAgICB7Ci0JICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXRlcmF0b3IgPSBtZXNzYWdlcy5pdGVyYXRvcigpOwotCSAgICAgICAgd2hpbGUgKG1lc3NhZ2VJdGVyYXRvci5oYXNOZXh0KCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBtZXNzYWdlSXRlcmF0b3IubmV4dCgpOwotCSAgICAgICAgICBTdHJpbmcgbWVzc2FnZW5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgIGFuYWx5emVyLmFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QobnVsbCwgbmFtZXNwYWNlLCBtZXNzYWdlbmFtZSwgV1NETEFuYWx5emVyLk1FU1NBR0UpOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgfQotICAgIH0KLQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JewotICAgICAgZmFpbCgiVW5leHBlY3RlZCBwcm9ibGVtcyBzZXR0aW5nIGNvbmZpZ3VyYXRpb25zIik7Ci0JfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZUFQVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VBUFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4ZDM4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZUFQVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCBtZXNzYWdlIGxvZ3MgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBwcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlQVBUZXN0IGV4dGVuZHMgQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QgewotCi0gICAgcHVibGljIE1lc3NhZ2VMb2dDb25mb3JtYW5jZUFQVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzEzMDlfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMTMwOS0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzEzMDlfMigpIHsgcnVuVGVzdCgiYnAiLCAiMTMwOS0yIiwgVEFEX0lEX0FQKTsgfSAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzE2MDBfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMTYwMC0xIiwgVEFEX0lEX0FQKTsgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VTT0FQMTJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNPQVAxMlRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY3NDBlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNPQVAxMlRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXIuTWVzc2FnZUFuYWx5emVyOwotCi0KLQotLyoqCi0gKiBKVW5pdCB0ZXN0cyB0aGF0IHRlc3QgbWVzc2FnZSBsb2dzIGFnYWluc3QgdGhlIFdTLUkgQXR0YWNobWVudHMgcHJvZmlsZS4KLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VMb2dDb25mb3JtYW5jZVNPQVAxMlRlc3QgZXh0ZW5kcyBDb3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdCB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0xPR19GSUxFTkFNRSA9ICJsb2cud3NpbXNnIjsKLQkKLSAgICBwdWJsaWMgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU09BUDEyVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0X1NPQVAoKSB7IHJ1blRlc3RXaXRoV1NETCgiU09BUDEyIiwgIlNpbXBsZUxvZyIsIG5ldyBTdHJpbmdbXSB7IkhlbGxvIiwgImh0dHA6Ly90ZXN0LyIsICJIZWxsb1NlcnZpY2UiLCAicG9ydCJ9KTsgfSAKLQotICAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNTQlBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNTQlBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMzkyN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VTU0JQVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCBtZXNzYWdlIGxvZ3MgYWdhaW5zdCB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nCi0gKiBwcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QgZXh0ZW5kcwotICAgICAgICBDb3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdCB7Ci0KLSAgICBwdWJsaWMgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RfMTMwOV8xKCkgeyBydW5UZXN0KCJicCIsICIxMzA5LTEiLCBUQURfSURfU1NCUCk7IH0gCi0gICAgcHVibGljIHZvaWQgdGVzdF8xMzA5XzIoKSB7IHJ1blRlc3QoImJwIiwgIjEzMDktMiIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzE2MDBfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMTYwMC0xIiwgVEFEX0lEX1NTQlApOyB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VTZWN1cmVXU1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUyM2VjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5NZXNzYWdlQW5hbHl6ZXI7Ci0KLQotCi0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCBtZXNzYWdlIGxvZ3MgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBwcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU2VjdXJlV1NUZXN0IGV4dGVuZHMgQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0dfRklMRU5BTUUgPSAibG9nLndzaW1zZyI7Ci0JCi0gICAgcHVibGljIE1lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0X1NlY3VyZVdTX05vU2VjdXJpeSgpIHsgcnVuVGVzdFdpdGhXU0RMKCJTZWN1cmVXUyIsICJOb1NlY3VyaXR5IiwgbmV3IFN0cmluZ1tdIHsiV2ViU2VydmljZSIsICJodHRwOi8vbWFpbiIsICJXZWJTZXJ2aWNlU2VydmljZSIsICJwb3J0In0pOyB9IAotCi0gICAgcHVibGljIHZvaWQgdGVzdF9TZWN1cmVXU19TaWduYXR1cmUoKSB7IHJ1blRlc3RXaXRoV1NETCgiU2VjdXJlV1MiLCAiU2lnbmF0dXJlIiwgbmV3IFN0cmluZ1tdIHsiV2ViU2VydmljZSIsICJodHRwOi8vbWFpbiIsICJXZWJTZXJ2aWNlU2VydmljZSIsICJwb3J0In0pOyB9IAotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RfU2VjdXJlV1NfRW5jcnlwdGlvbigpIHsgcnVuVGVzdFdpdGhXU0RMKCJTZWN1cmVXUyIsICJFbmNyeXB0aW9uIiwgbmV3IFN0cmluZ1tdIHsiV2ViU2VydmljZSIsICJodHRwOi8vbWFpbiIsICJXZWJTZXJ2aWNlU2VydmljZSIsICJwb3J0In0pOyB9Ci0gICAgICAgCi0gICAgcHVibGljIHZvaWQgdGVzdF9TZWN1cmVXU19TaWduYXR1cmVBbmRFbmNyeXB0aW9uKCkgeyBydW5UZXN0V2l0aFdTREwoIlNlY3VyZVdTIiwgIlNpZ25hdHVyZUFuZEVuY3J5cHRpb24iLCBuZXcgU3RyaW5nW10geyJXZWJTZXJ2aWNlIiwgImh0dHA6Ly9tYWluIiwgIldlYlNlcnZpY2VTZXJ2aWNlIiwgInBvcnQifSk7IH0gCi0gICAgCi0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1JlZ3Jlc3Npb25CdWNrZXQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvUmVncmVzc2lvbkJ1Y2tldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2ZmOGM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvUmVncmVzc2lvbkJ1Y2tldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKiAKLSogQ29udHJpYnV0b3JzOgotKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgcnVucyBhbGwgb2YgdGhlIHRlc3RzIGltcGxlbWVudGVkIAotICogaW4gdGhpcyBwbHVnaW4uCi0gKiAKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgUmVncmVzc2lvbkJ1Y2tldCBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQkgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIAotCSAgewotCSAgICBUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoIlJlZ3Jlc3Npb24gQnVja2V0Iik7Ci0JICAgIGlmICh0YWRJc0F2YWlsYWJsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNTQlBfQVNTRVJUSU9OX0ZJTEUpKSB7Ci0gICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobmV3IFRlc3RTdWl0ZShXU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5jbGFzcykpOwotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QuY2xhc3MpKTsKLSAgICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChuZXcgVGVzdFN1aXRlKE1lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5jbGFzcykpOwotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU09BUDEyVGVzdC5jbGFzcykpOwotICAgICAgICB9Ci0JICAgIGlmICh0YWRJc0F2YWlsYWJsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLkFQX0FTU0VSVElPTl9GSUxFKSkgewotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoV1NETENvbmZvcm1hbmNlQVBUZXN0LmNsYXNzKSk7Ci0gICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobmV3IFRlc3RTdWl0ZShNZXNzYWdlTG9nQ29uZm9ybWFuY2VBUFRlc3QuY2xhc3MpKTsKLSAgICAgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIHN1aXRlOwotCSAgfQotCSAgCi0JICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGFkSXNBdmFpbGFibGUoU3RyaW5nIHRhZFVSSSkKLQkgIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCSAgVVJMIHVybCA9IG5ldyBVUkwodGFkVVJJKTsKLQkJICBpcyA9IHVybC5vcGVuU3RyZWFtKCk7Ci0JCSAgaXMuY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkgIHJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JICAgIHJldHVybiByZXN1bHQ7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlQVBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTRExDb25mb3JtYW5jZUFQVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWY0NzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlQVBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0qIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0qIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0qIAotKiBDb250cmlidXRvcnM6Ci0qICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuaW50ZXJuYWw7Ci0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCB3c2RsIGRvY3VtZW50cyBhZ2FpbnN0IAotICogdGhlIFdTLUkgQXR0YWNobWVudHMgcHJvZmlsZS4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29uZm9ybWFuY2VBUFRlc3QgZXh0ZW5kcyBDb3JlV1NETENvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIFdTRExDb25mb3JtYW5jZUFQVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0vL3dzLWkgd3NkbHMKLSAgcHVibGljIHZvaWQgdGVzdF9hZGRyZXNzQm9vaygpIHsgcnVuVGVzdCgid3NpIiwgImFkZHJlc3NCb29rIiwgVEFEX0lEX0FQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0X2FkZHJlc3NCb29rX3JwYygpIHsgcnVuVGVzdCgid3NpIiwgImFkZHJlc3NCb29rLXJwYyIsIFRBRF9JRF9BUCk7IH0KLSAvLyBwdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcENhdGFsb2coKSB7IHJ1blRlc3QoIndzaSIsICJzYW1wbGVBcHBDYXRhbG9nIiwgVEFEX0lEX0FQKTsgfSAgCi0gIHB1YmxpYyB2b2lkIHRlc3Rfc2FtcGxlQXBwTWFudWZhY3R1cmVyKCkgeyBydW5UZXN0KCJ3c2kiLCAic2FtcGxlQXBwTWFudWZhY3R1cmVyIiwgVEFEX0lEX0FQKTsgfSAgCi0gIHB1YmxpYyB2b2lkIHRlc3Rfc2FtcGxlQXBwV2FyZWhvdXNlKCkgeyBydW5UZXN0KCJ3c2kiLCAic2FtcGxlQXBwV2FyZWhvdXNlIiwgVEFEX0lEX0FQKTsgfSAKLQotICAvLyBicCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTJfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxMi0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDEzXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTMtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzQoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtNCIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzQoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktNCIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yNDA2XzEoKSB7IHJ1blRlc3QoImJwIiwgIjI0MDYtMSIsIFRBRF9JRF9BUCk7IH0KLQotICAvLyBhcCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzI5NDFfMSgpIHsgcnVuVGVzdCgiYXAiLCAiMjk0MS0xIiwgVEFEX0lEX0FQKTsgfSAKLQotICAvLyByZWR1bmRhbnQgdGVzdHMgLS0gYXNzZXJ0aW9ucyBmYWlsdXJlcyBjYXVnaHQgYnkgYmFzZSB3c2RsIHZhbGlkYXRvci4KLSAgcHVibGljIHZvaWQgdGVzdF8yMDEwXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDEwLTEiLCBUQURfSURfQVApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDExXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDExLTIiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTFfMygpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtMyIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV80KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS00IiwgVEFEX0lEX0FQKTsgfSAKLSAgLy9wdWJsaWMgdm9pZCB0ZXN0XzIwMTFfNSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtNSIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTIiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfMygpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtMyIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV80KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS00IiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzUoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTUiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfNigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtNiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIyXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIyLTEiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjJfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjItMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDMyXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDMyLTEiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMzJfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMzItMiIsIFRBRF9JRF9BUCk7IH0gCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjBkNTQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlU1NCUFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSogCi0qIENvbnRyaWJ1dG9yczoKLSogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLS8qKgotICogSlVuaXQgdGVzdHMgdGhhdCB0ZXN0IHdzZGwgZG9jdW1lbnRzIGFnYWluc3QgCi0gKiB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nIHByb2ZpbGUuCi0gKiAKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgV1NETENvbmZvcm1hbmNlU1NCUFRlc3QgZXh0ZW5kcyBDb3JlV1NETENvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIFdTRExDb25mb3JtYW5jZVNTQlBUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLSAgLy8gd3MtaSB3c2RscwotICBwdWJsaWMgdm9pZCB0ZXN0X2FkZHJlc3NCb29rKCkgeyBydW5UZXN0KCJ3c2kiLCAiYWRkcmVzc0Jvb2siLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF9hZGRyZXNzQm9va19ycGMoKSB7IHJ1blRlc3QoIndzaSIsICJhZGRyZXNzQm9vay1ycGMiLCBUQURfSURfU1NCUCk7IH0KLSAgLy9wdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcENhdGFsb2coKSB7IHJ1blRlc3QoIndzaSIsICJzYW1wbGVBcHBDYXRhbG9nIiwgVEFEX0lEX1NTQlApOyB9ICAKLSAgcHVibGljIHZvaWQgdGVzdF9zYW1wbGVBcHBNYW51ZmFjdHVyZXIoKSB7IHJ1blRlc3QoIndzaSIsICJzYW1wbGVBcHBNYW51ZmFjdHVyZXIiLCBUQURfSURfU1NCUCk7IH0gIAotICBwdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcFdhcmVob3VzZSgpIHsgcnVuVGVzdCgid3NpIiwgInNhbXBsZUFwcFdhcmVob3VzZSIsIFRBRF9JRF9TU0JQKTsgfSAKLQotICAvLyBicCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTJfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxMi0xIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTNfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxMy0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxNF8xKCkgeyBydW5UZXN0KCJicCIsICIyMDE0LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTRfMygpIHsgcnVuVGVzdCgiYnAiLCAiMjAxNC0zIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxN18xKCkgeyBydW5UZXN0KCJicCIsICIyMDE3LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMThfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOC0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOF8yKCkgeyBydW5UZXN0KCJicCIsICIyMDE4LTIiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMyIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMThfNCgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOC00IiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOV8xKCkgeyBydW5UZXN0KCJicCIsICIyMDE5LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTlfMygpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOS0zIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOV80KCkgeyBydW5UZXN0KCJicCIsICIyMDE5LTQiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMSIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjBfMigpIHsgcnVuVGVzdCgiYnAiLCAiMjAyMC0yIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjEwNV8xKCkgeyBydW5UZXN0KCJicCIsICIyMTA1LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIxMTdfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjExNy0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjExN18yKCkgeyBydW5UZXN0KCJicCIsICIyMTE3LTIiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMyIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzI0MDZfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjQwNi0xIiwgVEFEX0lEX1NTQlApOyB9Ci0KLSAgLy8gcmVkdW5kYW50IHRlc3RzIC0tIGFzc2VydGlvbnMgZmFpbHVyZXMgY2F1Z2h0IGJ5IGJhc2Ugd3NkbCB2YWxpZGF0b3IuCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMF8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMC0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS0xIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTFfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtMiIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDExXzMoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDExLTMiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV80KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS00IiwgVEFEX0lEX1NTQlApOyB9IAotICAvL3B1YmxpYyB2b2lkIHRlc3RfMjAxMV81KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS01IiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfMSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtMSIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTIiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV8zKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS0zIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfNCgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtNCIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzUoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTUiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV82KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS02IiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMl8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMi0xIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjJfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjItMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMzJfMSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMzItMSIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDMyXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDMyLTIiLCBUQURfSURfU1NCUCk7IH0gCi0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYjk3NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0lUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKiAKLSogQ29udHJpYnV0b3JzOgotKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSovCi1wdWJsaWMgY2xhc3MgV1NJVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0gcHJpdmF0ZSBzdGF0aWMgV1NJVGVzdHNQbHVnaW4gcGx1Z2luOwotIHByaXZhdGUgc3RhdGljIEJ1bmRsZSBwbHVnaW5CdW5kbGUgPSBudWxsOwotCi0gLyoqCi0gICogVGhlIGNvbnN0cnVjdG9yLgotICAqLwotIHB1YmxpYyBXU0lUZXN0c1BsdWdpbigpCi0gewotICAgc3VwZXIoKTsKLSAgIHBsdWdpbiA9IHRoaXM7Ci0gfQotCi0gLyoqCi0gICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0gICovCi0gcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gewotICAgc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSB9Ci0KLSAvKioKLSAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0gICovCi0gcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSB7Ci0gICBzdXBlci5zdG9wKGNvbnRleHQpOwotIH0KLQotIC8qKgotICAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIFdTSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKQotIHsKLSAgIHJldHVybiBwbHVnaW47Ci0gfQotIAotIC8qKgotICAqIEdldCB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnaW4uCi0gICogCi0gICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSB7Ci0gICB0cnkKLSAgIHsKLSAgICAgcmV0dXJuIFBsYXRmb3JtLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgIH0KLSAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgewotICAgICByZXR1cm4gbnVsbDsKLSAgIH0KLSB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJlOGFkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0JCQotCQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkgbmFtZT0id3N0LWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIi8+Ci0JCTxkZWxldGUgZGlyPSIke3dzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIAk8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIAkJPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3c3QtZm9sZGVyfSIvPgotICAgICAgCQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgCQk8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbC5SZWdyZXNzaW9uQnVja2V0IiAvPgotICAgCQkJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TT0FQMTIvU2ltcGxlTG9nL1NpbXBsZUxvZy53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TT0FQMTIvU2ltcGxlTG9nL1NpbXBsZUxvZy53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OWYxMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy9TaW1wbGVMb2cud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA3LTAxLTI0VDEzOjAzOjQwLjUzMiIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0icHdpMzJkZXYtMjAwNjEwMDJhIChTUjMpIi8+Ci0gICAgICA8b3BlcmF0aW5nU3lzdGVtIG5hbWU9IldpbmRvd3MgWFAiIHZlcnNpb249IjUuMSBidWlsZCAyNjAwIFNlcnZpY2UgUGFjayAyIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuNC42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA3LTAxLTI0VDEzOjAyOjU4LjM0MloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsmbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC1lbnZlbG9wZSZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXImZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtuczI6aGVsbG8geG1sbnM6bnMyPSZxdW90O2h0dHA6Ly90ZXN0LyZxdW90OyZndDsmbHQ7YXJnMCZndDtnYWJlJmx0Oy9hcmcwJmd0OyZsdDsvbnMyOmhlbGxvJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgxPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPlBPU1QgL3RkMTIvSGVsbG9TZXJ2aWNlIEhUVFAvMS4xJiN4ZDsKLUhvc3Q6IGxvY2FsaG9zdDo5MDgxJiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsbXVsdGlwYXJ0L3JlbGF0ZWQsdGV4dC8qJiN4ZDsKLVVzZXItQWdlbnQ6IElCTSBXZWJTZXJ2aWNlcy8xLjAmI3hkOwotQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUmI3hkOwotUHJhZ21hOiBuby1jYWNoZSYjeGQ7Ci1TT0FQQWN0aW9uOiAmcXVvdDsmcXVvdDsmI3hkOwotQ29ubmVjdGlvbjogS2VlcC1BbGl2ZSYjeGQ7Ci1Db250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3NvYXAreG1sOyBjaGFyc2V0PVVURi04JiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiAyNTgmI3hkOwotRGF0ZTogV2VkLCAyNCBKYW4gMjAwNyAxODowMjo1NyBHTVQmI3hkOwotJiN4ZDsKLTwvaHR0cEhlYWRlcnM+Ci08L21lc3NhZ2VFbnRyeT4KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIyIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVzcG9uc2UiIHRpbWVzdGFtcD0iMjAwNy0wMS0yNFQxMzowMjo1OC40NzJaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7Jmx0O3NvYXBlbnY6RW52ZWxvcGUgeG1sbnM6c29hcGVudj0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1L3NvYXAtZW52ZWxvcGUmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7bnMyOmhlbGxvUmVzcG9uc2UgeG1sbnM6bnMyPSZxdW90O2h0dHA6Ly90ZXN0LyZxdW90OyZndDsmbHQ7cmV0dXJuJmd0O0hlbGxvLCBnYWJlISZsdDsvcmV0dXJuJmd0OyZsdDsvbnMyOmhlbGxvUmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODE8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vc29hcCt4bWw7IGNoYXJzZXQ9VVRGLTgmI3hkOwotQ29udGVudC1MYW5ndWFnZTogZW4tVVMmI3hkOwotU2V0LUNvb2tpZTogSlNFU1NJT05JRD0wMDAwNXpGTVdZVXdHbHRMYS1qTnVOYXh3cTM6LTE7IFBhdGg9LyYjeGQ7Ci1UcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCYjeGQ7Ci1EYXRlOiBXZWQsIDI0IEphbiAyMDA3IDE4OjAyOjU3IEdNVCYjeGQ7Ci1TZXJ2ZXI6IFdlYlNwaGVyZSBBcHBsaWNhdGlvbiBTZXJ2ZXIvNi4xJiN4ZDsKLUV4cGlyZXM6IFRodSwgMDEgRGVjIDE5OTQgMTY6MDA6MDAgR01UJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlPSZxdW90O3NldC1jb29raWUsIHNldC1jb29raWUyJnF1b3Q7JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NPQVAxMi9TaW1wbGVMb2cvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjEyZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIG5vIHNlY3VyaXR5LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgCTxhc3NlcnRpb24gaWQ9IkJQMTIwMSIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDE2MDAiIHRhZElEPSJBUDEwIi8+Ci0JCi0JPGFzc2VydGlvbiBpZD0iQlAxMjAxIiB0YWRJRD0iQVAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTYwMCIgdGFkSUQ9IkFQMTAiLz4KLQkKLQk8YXNzZXJ0aW9uIGlkPSJBUDE5NDUiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iU1NCUDUxMDEiIHRhZElEPSJBUDEwIi8+Ci0KLQk8YXNzZXJ0aW9uIGlkPSJBUDE5NDUiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iU1NCUDUxMDEiIHRhZElEPSJBUDEwIi8+Ci0JCi0KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vRW5jcnlwdGlvbi53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9FbmNyeXB0aW9uL0VuY3J5cHRpb24ud3NpbXNnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTg2MDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vRW5jcnlwdGlvbi53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDctMDEtMTZUMTI6MTU6NTguMzI1IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSJwd2kzMmRldi0yMDA2MTAwMmEgKFNSMykiLz4KLSAgICAgIDxvcGVyYXRpbmdTeXN0ZW0gbmFtZT0iV2luZG93cyBYUCIgdmVyc2lvbj0iNS4xIGJ1aWxkIDI2MDAgU2VydmljZSBQYWNrIDIiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC40LjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDctMDEtMTZUMTA6NDc6MzAuNjUzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0O3NvYXBlbnY6RW52ZWxvcGUgeG1sbnM6c29hcGVudj0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyZxdW90OyB4bWxuczpzb2FwZW5jPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvJnF1b3Q7IHhtbG5zOnhzZD0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OyB4bWxuczp4c2k9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UmcXVvdDsgeG1sbnM6d3NhPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXImZ3Q7Jmx0O3dzc2U6U2VjdXJpdHkgc29hcGVudjptdXN0VW5kZXJzdGFuZD0mcXVvdDsxJnF1b3Q7IHhtbG5zOndzc2U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXNlY2V4dC0xLjAueHNkJnF1b3Q7Jmd0OyZsdDtFbmNyeXB0ZWRLZXkgeG1sbnM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJnF1b3Q7Jmd0OyZsdDtFbmNyeXB0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNyc2EtMV81JnF1b3Q7LyZndDsmbHQ7ZHM6S2V5SW5mbyB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDt3c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0O3dzc2U6S2V5SWRlbnRpZmllciBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDlTdWJqZWN0S2V5SWRlbnRpZmllciZxdW90OyZndDsvNjJ3WE9iRUQ3ejZjMXlYN1Frdk4xdGhRZFk9Jmx0Oy93c3NlOktleUlkZW50aWZpZXImZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDtDaXBoZXJEYXRhJmd0OyZsdDtDaXBoZXJWYWx1ZSZndDtqcWRvZUtFS0txWGdRbnZXekRPL1d5SFBiMzVVWVdSenp3eVhBdlNIRllUaGczTzhZTTdIYmZZRjVKVUF2ODliaWk4SHVULzUyb0VYUnZMT2RBRklQVWxZRTBuUlNIK0pDYi90aW4rM1hEbHFtMEhTYi9wanp4S0cwNzRsbGNIZnR2Unpoc0oyUitDU3pYaTlwQ294R1ZUYkxSOU1oY3NXeDFpL1Z2RFBMWkU9Jmx0Oy9DaXBoZXJWYWx1ZSZndDsmbHQ7L0NpcGhlckRhdGEmZ3Q7Jmx0O1JlZmVyZW5jZUxpc3QmZ3Q7Jmx0O0RhdGFSZWZlcmVuY2UgVVJJPSZxdW90OyN3c3NlY3VyaXR5X2VuY3J5cHRpb25faWRfMCZxdW90Oy8mZ3Q7Jmx0Oy9SZWZlcmVuY2VMaXN0Jmd0OyZsdDsvRW5jcnlwdGVkS2V5Jmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly9sb2NhbGhvc3Q6OTA4Mi9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2luY3JlbWVudCZsdDsvd3NhOkFjdGlvbiZndDsmbHQ7d3NhOk1lc3NhZ2VJRCZndDt1dWlkOjJCOTc1N0NDLTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOk1lc3NhZ2VJRCZndDsmbHQ7L3NvYXBlbnY6SGVhZGVyJmd0OyZsdDtzb2FwZW52OkJvZHkmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzAmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O3ZkVTQyc09vNi9XdjFWM3JvTUlWcGJKdXZnc0lFeDZtT3dsTldEcnI4amdrS3Y2NVZCQ3YyV0lNQVN3SFpWTFpaQXFKNHpnaUVWOXJwQ1hzN1FqKzhHTWZtVlI5VlpZdktLNWo1SEV2MXhiekIwSFBPc2E1QkE9PSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDsvRW5jcnlwdGVkRGF0YSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4Mjwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMTg3MSYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDE1OjQ3OjMwIEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDEwOjQ3OjMxLjA3NFoiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7RW5jcnlwdGVkS2V5IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjcnNhLTFfNSZxdW90Oy8mZ3Q7Jmx0O2RzOktleUluZm8geG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOktleUlkZW50aWZpZXIgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5U3ViamVjdEtleUlkZW50aWZpZXImcXVvdDsmZ3Q7dHlCVTNxUXVmWVo3MXRKQVU3Z1ZJcWdST3VRPSZsdDsvd3NzZTpLZXlJZGVudGlmaWVyJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7Q2lwaGVyRGF0YSZndDsmbHQ7Q2lwaGVyVmFsdWUmZ3Q7UFZVTzBhZmRBdU9ZRlAxbk12ZXpQNlVxWTRySW84M3hQR0o0clcrczdOa1BPSGRFckQvdG1idGJHOHVYQXllVDRpTFhNL0syK2ZTeWxuaThHRmlKWmt4b3owOGtNRWQxOS82YWVhZmJBMGl6VTlEVkFVS1JNL2VoQ2cyS0NZaTJ3WGhRYWpZZmtRdUZNR3VtQTlWS1Znclk3TmR1N2YvWWMvcG1JV3RRL3NvPSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDtSZWZlcmVuY2VMaXN0Jmd0OyZsdDtEYXRhUmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzEmcXVvdDsvJmd0OyZsdDsvUmVmZXJlbmNlTGlzdCZndDsmbHQ7L0VuY3J5cHRlZEtleSZndDsmbHQ7L3dzc2U6U2VjdXJpdHkmZ3Q7Jmx0O3dzYTpUbyZndDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcvYW5vbnltb3VzJmx0Oy93c2E6VG8mZ3Q7Jmx0O3dzYTpBY3Rpb24mZ3Q7aHR0cDovL21haW4vV2ViU2VydmljZS9pbmNyZW1lbnRSZXNwb25zZSZsdDsvd3NhOkFjdGlvbiZndDsmbHQ7d3NhOk1lc3NhZ2VJRCZndDt1dWlkOjJCOTc3Njc4LTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOk1lc3NhZ2VJRCZndDsmbHQ7d3NhOlJlbGF0ZXNUbyZndDt1dWlkOjJCOTc1N0NDLTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOlJlbGF0ZXNUbyZndDsmbHQ7L3NvYXBlbnY6SGVhZGVyJmd0OyZsdDtzb2FwZW52OkJvZHkmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzEmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O1JEU1M5THBrcEl1NWxXT1pyK2hmc0V6Tm91bGpENi9OUklmc1lQSDBYQ3R3cG9tNGFuL2daUzF2bDV1OXI1RFpVdXErV3BTSk9wZThOczltcVpsakNGSnZWbU1MR2Ira0MzaWc3akVKQ3ZicWM3OHFESVFDbWdMUE9yY2wxUTBaU2xoMjVBeDczZGU0SFdXT1BKUWpLUEhaWW9wY1U4TUsmbHQ7L0NpcGhlclZhbHVlJmd0OyZsdDsvQ2lwaGVyRGF0YSZndDsmbHQ7L0VuY3J5cHRlZERhdGEmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgmI3hkOwotQ29udGVudC1MYW5ndWFnZTogZW4tVVMmI3hkOwotQ29udGVudC1MZW5ndGg6IDE5OTQmI3hkOwotRGF0ZTogVHVlLCAxNiBKYW4gMjAwNyAxNTo0NzozMCBHTVQmI3hkOwotU2VydmVyOiBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyLzYuMSYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPC9sb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9FbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTk1ODA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIGVuY3J5cHRpb24uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L05vU2VjdXJpdHkud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvTm9TZWN1cml0eS9Ob1NlY3VyaXR5LndzaW1zZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjOTJhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L05vU2VjdXJpdHkud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjE0OjA2LjAwNSIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0icHdpMzJkZXYtMjAwNjEwMDJhIChTUjMpIi8+Ci0gICAgICA8b3BlcmF0aW5nU3lzdGVtIG5hbWU9IldpbmRvd3MgWFAiIHZlcnNpb249IjUuMSBidWlsZCAyNjAwIFNlcnZpY2UgUGFjayAyIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuNC42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjEzOjUyLjgzNloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL2xvY2FsaG9zdDo5MDgyL1dlYlByb2plY3ROb1NlY3VyaXR5L3NlcnZpY2VzL1dlYlNlcnZpY2UmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtpbmNyZW1lbnQmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDMwMUVBNi0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtwNjE5OmluY3JlbWVudCB4bWxuczpwNjE5PSZxdW90O2h0dHA6Ly9tYWluJnF1b3Q7Jmd0OyZsdDt2YWx1ZSZndDsxJmx0Oy92YWx1ZSZndDsmbHQ7L3A2MTk6aW5jcmVtZW50Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPlBPU1QgL1dlYlByb2plY3ROb1NlY3VyaXR5L3NlcnZpY2VzL1dlYlNlcnZpY2UgSFRUUC8xLjEmI3hkOwotSG9zdDogbG9jYWxob3N0OjkwODAmI3hkOwotQWNjZXB0OiBhcHBsaWNhdGlvbi9zb2FwK3htbCxtdWx0aXBhcnQvcmVsYXRlZCx0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogSUJNIFdlYlNlcnZpY2VzLzEuMCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90O2luY3JlbWVudCZxdW90OyYjeGQ7Ci1Db25uZWN0aW9uOiBLZWVwLUFsaXZlJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgmI3hkOwotQ29udGVudC1MZW5ndGg6IDYyMiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjEzOjUyIEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjEzOjUyLjk3NloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91cyZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2h0dHA6Ly9tYWluL1dlYlNlcnZpY2UvaW5jcmVtZW50UmVzcG9uc2UmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDMwMUY1MC0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0O3dzYTpSZWxhdGVzVG8mZ3Q7dXVpZDoyRDMwMUVBNi0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpSZWxhdGVzVG8mZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtwNjE5OmluY3JlbWVudFJlc3BvbnNlIHhtbG5zOnA2MTk9JnF1b3Q7aHR0cDovL21haW4mcXVvdDsmZ3Q7Jmx0O2luY3JlbWVudFJldHVybiZndDsyJmx0Oy9pbmNyZW1lbnRSZXR1cm4mZ3Q7Jmx0Oy9wNjE5OmluY3JlbWVudFJlc3BvbnNlJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPkhUVFAvMS4xIDIwMCBPSyYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUNvbnRlbnQtTGFuZ3VhZ2U6IGVuLVVTJiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiA3NDUmI3hkOwotRGF0ZTogVHVlLCAxNiBKYW4gMjAwNyAyMzoxMzo1MiBHTVQmI3hkOwotU2VydmVyOiBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyLzYuMSYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPC9sb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL05vU2VjdXJpdHkvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmVmZGE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL05vU2VjdXJpdHkvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIG5vIHNlY3VyaXR5LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlL1NpZ25hdHVyZS53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvU2lnbmF0dXJlLndzaW1zZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNkMDVlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvU2lnbmF0dXJlLndzaW1zZworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bG9nIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODowODozOC41MjQiCi0gICAgeG1sbnM9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L2xvZy8iCi0gICAgeG1sbnM6d3NpLW1vbkNvbmZpZz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbW9uaXRvckNvbmZpZy8iCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb25pdG9yIHZlcnNpb249IjEuMCIgcmVsZWFzZURhdGU9IjIwMDMtMDMtMjAiPgotICAgIDxpbXBsZW1lbnRlciBuYW1lPSJJQk0iIGxvY2F0aW9uPSIiLz4KLSAgICA8ZW52aXJvbm1lbnQ+Ci0gICAgICA8cnVudGltZSBuYW1lPSJKYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kYXJkIEVkaXRpb24iIHZlcnNpb249InB3aTMyZGV2LTIwMDYxMDAyYSAoU1IzKSIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJXaW5kb3dzIFhQIiB2ZXJzaW9uPSI1LjEgYnVpbGQgMjYwMCBTZXJ2aWNlIFBhY2sgMiIvPgotICAgICAgPHhtbFBhcnNlciBuYW1lPSJBcGFjaGUgWGVyY2VzIiB2ZXJzaW9uPSJYTUw0SiA0LjQuNiIvPgotICAgIDwvZW52aXJvbm1lbnQ+Ci0gICAgPHdzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb21tZW50PkNvbW1lbnQ8L3dzaS1tb25Db25maWc6Y29tbWVudD4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0ZpbGUgcmVwbGFjZT0idHJ1ZSIgbG9jYXRpb249IlVSTCI+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzphZGRTdHlsZVNoZWV0IGhyZWY9Im51bGwiIHR5cGU9Im51bGwiIC8+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmxvZ0ZpbGU+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj42MDA8L3dzaS1tb25Db25maWc6bG9nRHVyYXRpb24+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Mzwvd3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICAgIDwvd3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICA8L3dzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgPC9tb25pdG9yPgotCi08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMSIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlcXVlc3QiIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODowODoyNi4wMDZaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnNvYXBlbmM9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyB4bWxuczp3c2E9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nJnF1b3Q7Jmd0OyZsdDtzb2FwZW52OkhlYWRlciZndDsmbHQ7d3NzZTpTZWN1cml0eSBzb2FwZW52Om11c3RVbmRlcnN0YW5kPSZxdW90OzEmcXVvdDsgeG1sbnM6d3NzZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktc2VjZXh0LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiBFbmNvZGluZ1R5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy1zb2FwLW1lc3NhZ2Utc2VjdXJpdHktMS4wI0Jhc2U2NEJpbmFyeSZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsgd3N1OklkPSZxdW90O3g1MDlic3RfMTYmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7TUlJRFFUQ0NBcXFnQXdJQkFnSUNBUVF3RFFZSktvWklodmNOQVFFRkJRQXdUakVMTUFrR0ExVUVCaE1DU2xBeEVUQVBCZ05WQkFnVENFdGhibUZuWVhkaE1Rd3dDZ1lEVlFRS0V3TkpRazB4RERBS0JnTlZCQXNUQTFSU1RERVFNQTRHQTFVRUF4TUhTVzUwSUVOQk1qQWVGdzB3TVRFd01ERXdPVFUwTURaYUZ3MHhNVEV3TURFd09UVTBNRFphTUZReEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVNTUFvR0ExVUVDaE1EU1VKTk1Rd3dDZ1lEVlFRTEV3TlVVa3d4RmpBVUJnTlZCQU1URFZOUFFWQlNaWEYxWlhOMFpYSXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTXkzUGZaMW1QaHJFc0J2WWlPdUlsUFYzVWlzNVl5NmhteG8yWXdZQzJuTkRCUHpLc2xXVWkvUStmSytETmRZNktFSG11RHJjVmNFbWE0OEo5WDFhNWF2Umxrc1FmS3B0S29WbjRlQnlzMmkvd2t3eXpRaERhRmppNzkvTXZuVFJXOEVWeTk5Rk5LdzRQRm5oT29lMXRsRGNOQnVJSC9mSXVHT3o5RWxUVitmQWdNQkFBR2pnZ0VtTUlJQklqQUpCZ05WSFJNRUFqQUFNQXNHQTFVZER3UUVBd0lGNERBc0JnbGdoa2dCaHZoQ0FRMEVIeFlkVDNCbGJsTlRUQ0JIWlc1bGNtRjBaV1FnUTJWeWRHbG1hV05oZEdVd0hRWURWUjBPQkJZRUZJVzNGRDFjWGllNGo0encxZ0FwNGN1T0FaNGxNSUc2QmdOVkhTTUVnYkl3Z2ErQUZMMzVJTlU0K1dSeTA5dmFmOXpPc1A3UXZPOXZvWUdTcElHUE1JR01NUXN3Q1FZRFZRUUdFd0pLVURFUk1BOEdBMVVFQ0JNSVMyRnVZV2RoZDJFeER6QU5CZ05WQkFjVEJsbGhiV0YwYnpFTU1Bb0dBMVVFQ2hNRFNVSk5NUXd3Q2dZRFZRUUxFd05VVWt3eEdUQVhCZ05WQkFNVEVGTlBRVkFnTWk0eElGUmxjM1FnUTBFeElqQWdCZ2txaGtpRzl3MEJDUUVXRTIxaGNuVjVZVzFoUUdwd0xtbGliUzVqYjIyQ0FnRUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSGt0aGRHRGdDdmRJTDkvdlhVbzc0eHBmT1FkL3JyMW93Qm1NZGIxVFdkT3l6d2JPSEM3bGtVbG5LcmtJN1NvZndTTFNEVVA1NzFpaU1YVXgzdFJkbUFWQ29ETU1GdURYaDlWNzIxMmx1WGNjeDBzMVM1S04wRDN4Vzk3TExOZWdRQzAvYithRkQ4WEt3MlU1WnR3Ym5GVFJnczA5N2RtejA5Um9zREtrTGxNJmx0Oy93c3NlOkJpbmFyeVNlY3VyaXR5VG9rZW4mZ3Q7Jmx0O2RzOlNpZ25hdHVyZSB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDtkczpTaWduZWRJbmZvJmd0OyZsdDtkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3NzZSBkcyAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QmZ3Q7Jmx0O2RzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJnF1b3Q7LyZndDsmbHQ7ZHM6UmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMTUmcXVvdDsmZ3Q7Jmx0O2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOlRyYW5zZm9ybSBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzdSBwNjE5ICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6VHJhbnNmb3JtJmd0OyZsdDsvZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOkRpZ2VzdFZhbHVlJmd0O2RITkNpRWNxeFhZU0RyYkJrM2FoQ2F0endLZz0mbHQ7L2RzOkRpZ2VzdFZhbHVlJmd0OyZsdDsvZHM6UmVmZXJlbmNlJmd0OyZsdDsvZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7TzZtaVE5bDZhbVduYVdpNVZXeG9nd3k2R0pLTVN1ZG1oczQxNy9xR085eVp2QXRjR3hwQUhJckVPV3pFL010L3BGTUgzbFVLbFJXMTNLdkdsbVJVdU1xTXJka3BFaEQ1dGdDUVpBclQwWFdFYVVaZWsrTW1tZk1oQ25COGFBbEVwVElhUmNXcC8wUm5OZEpYb3preWpib1Q3b3VVU0lKTi9LdG1CaE1XbGtnPSZsdDsvZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7Jmx0O2RzOktleUluZm8mZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpSZWZlcmVuY2UgVVJJPSZxdW90OyN4NTA5YnN0XzE2JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90Oy8mZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDsvZHM6U2lnbmF0dXJlJmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly9sb2NhbGhvc3Q6OTA4Mi9XZWJQcm9qZWN0V2l0aFNpZ25hdHVyZS9zZXJ2aWNlcy9XZWJTZXJ2aWNlJmx0Oy93c2E6VG8mZ3Q7Jmx0O3dzYTpBY3Rpb24mZ3Q7aW5jcmVtZW50Jmx0Oy93c2E6QWN0aW9uJmd0OyZsdDt3c2E6TWVzc2FnZUlEJmd0O3V1aWQ6MkQyQjIxQkMtMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6TWVzc2FnZUlEJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSB3c3U6SWQ9JnF1b3Q7d3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMTUmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3A2MTk6aW5jcmVtZW50IHhtbG5zOnA2MTk9JnF1b3Q7aHR0cDovL21haW4mcXVvdDsmZ3Q7Jmx0O3ZhbHVlJmd0OzEmbHQ7L3ZhbHVlJmd0OyZsdDsvcDYxOTppbmNyZW1lbnQmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODA8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+UE9TVCAvV2ViUHJvamVjdFdpdGhTaWduYXR1cmUvc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzY3MiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjA4OjI1IEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjA4OjI2LjEyNloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7d3NzZTpCaW5hcnlTZWN1cml0eVRva2VuIEVuY29kaW5nVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAjQmFzZTY0QmluYXJ5JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90OyB3c3U6SWQ9JnF1b3Q7eDUwOWJzdF8xOCZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDtNSUlEUURDQ0FxbWdBd0lCQWdJQ0FRVXdEUVlKS29aSWh2Y05BUUVGQlFBd1RqRUxNQWtHQTFVRUJoTUNTbEF4RVRBUEJnTlZCQWdUQ0V0aGJtRm5ZWGRoTVF3d0NnWURWUVFLRXdOSlFrMHhEREFLQmdOVkJBc1RBMVJTVERFUU1BNEdBMVVFQXhNSFNXNTBJRU5CTWpBZUZ3MHdNVEV3TURFeE1EQXdNemxhRncweE1URXdNREV4TURBd016bGFNRk14Q3pBSkJnTlZCQVlUQWtwUU1SRXdEd1lEVlFRSUV3aExZVzVoWjJGM1lURU1NQW9HQTFVRUNoTURTVUpOTVF3d0NnWURWUVFMRXdOVVVrd3hGVEFUQmdOVkJBTVRERk5QUVZCUWNtOTJhV1JsY2pDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXJhYWtOSjFKemtQVXV2UGRYUnZQT09DbDEybkJ3bXF2dDY1ZGsveCtRenh4YXJETndIK2VXUmJMeXlLY3JBeWQwWEdWK1pidmo2VjNPOURTVkNaVUNKdHR3NmJicXFlWWh3QVAzVjhzMjRzSUQ3N3RrM2dPaFVURUdZeHNsalgyb3JMMjZTTHFGSk1ydm52azJGUlMybXJka1pFQlVHOTdtRDRRV2NsbjRkMENBd0VBQWFPQ0FTWXdnZ0VpTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNQ3dHQ1dDR1NBR0crRUlCRFFRZkZoMVBjR1Z1VTFOTUlFZGxibVZ5WVhSbFpDQkRaWEowYVdacFkyRjBaVEFkQmdOVkhRNEVGZ1FVbFhTc3JWUmZaT0xHZEpkakVJd1RidVNUZTRVd2dib0dBMVVkSXdTQnNqQ0JyNEFVdmZrZzFUajVaSExUMjlwLzNNNncvdEM4NzIraGdaS2tnWTh3Z1l3eEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVQTUEwR0ExVUVCeE1HV1dGdFlYUnZNUXd3Q2dZRFZRUUtFd05KUWsweEREQUtCZ05WQkFzVEExUlNUREVaTUJjR0ExVUVBeE1RVTA5QlVDQXlMakVnVkdWemRDQkRRVEVpTUNBR0NTcUdTSWIzRFFFSkFSWVRiV0Z5ZFhsaGJXRkFhbkF1YVdKdExtTnZiWUlDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVhFN21FMVJQYjNsWUFZSkZ6QmIzVkFIdmtDV2EvSFF0Q09aZHluaUNIcDNNSjlFYk5UcStRcE9IVjYwWUU4dTArNVNlakN6RlNPSE9weUJnTFBqV296OEpYUW5qVjdWY0FiVGdsdytab09TWXk2NHJmaFJkcjlnaVNzNDdGNEQ2d29Qc0FkMnViZy9ZaE1hWExUU3lHeFBkVjNWcVFzdXR1U2dEVURvcVdDQT0mbHQ7L3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiZndDsmbHQ7ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMmcXVvdDsmZ3Q7Jmx0O2RzOlNpZ25lZEluZm8mZ3Q7Jmx0O2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90OyZndDsmbHQ7ZWM6SW5jbHVzaXZlTmFtZXNwYWNlcyBQcmVmaXhMaXN0PSZxdW90O3hzaSB4c2Qgd3NhIHNvYXBlbnYgc29hcGVuYyB3c3NlIGRzICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCZndDsmbHQ7ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjcnNhLXNoYTEmcXVvdDsvJmd0OyZsdDtkczpSZWZlcmVuY2UgVVJJPSZxdW90OyN3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xNyZxdW90OyZndDsmbHQ7ZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3N1IHA2MTkgJnF1b3Q7IHhtbG5zOmVjPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90Oy8mZ3Q7Jmx0Oy9kczpUcmFuc2Zvcm0mZ3Q7Jmx0Oy9kczpUcmFuc2Zvcm1zJmd0OyZsdDtkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExJnF1b3Q7LyZndDsmbHQ7ZHM6RGlnZXN0VmFsdWUmZ3Q7dG9IRDI1bmcrTFU0L1RKVm5YU3c0cXFZZk9nPSZsdDsvZHM6RGlnZXN0VmFsdWUmZ3Q7Jmx0Oy9kczpSZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpTaWduZWRJbmZvJmd0OyZsdDtkczpTaWduYXR1cmVWYWx1ZSZndDtrNlYwSjNyVmFJTjV6a3JrbE5ObHpBc2xMZGJJNHBJSWJCWGg0TDhvaDQ3N1VScElXOWsxUXAzY2NhYUdFb0phemVvZ3lxOFlxV0dsaUpEMGY1cWZaejdvQnE2QlJpMkp4QjYzRXoxSXhmWG0wdUJaUk5SR3g5SVZwZEEweTRpVnlGaUFnVVI1ZTdjSlR5L1h1bjd0THFtTjNYckdIMGR2ZHFGVE9LemkvV3M9Jmx0Oy9kczpTaWduYXR1cmVWYWx1ZSZndDsmbHQ7ZHM6S2V5SW5mbyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOlJlZmVyZW5jZSBVUkk9JnF1b3Q7I3g1MDlic3RfMTgmcXVvdDsgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5JnF1b3Q7LyZndDsmbHQ7L3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7L2RzOktleUluZm8mZ3Q7Jmx0Oy9kczpTaWduYXR1cmUmZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5Jmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91cyZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2h0dHA6Ly9tYWluL1dlYlNlcnZpY2UvaW5jcmVtZW50UmVzcG9uc2UmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDJCMjI3QS0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0O3dzYTpSZWxhdGVzVG8mZ3Q7dXVpZDoyRDJCMjFCQy0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpSZWxhdGVzVG8mZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5IHdzdTpJZD0mcXVvdDt3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xNyZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDsmbHQ7cDYxOTppbmNyZW1lbnRSZXNwb25zZSB4bWxuczpwNjE5PSZxdW90O2h0dHA6Ly9tYWluJnF1b3Q7Jmd0OyZsdDtpbmNyZW1lbnRSZXR1cm4mZ3Q7MiZsdDsvaW5jcmVtZW50UmV0dXJuJmd0OyZsdDsvcDYxOTppbmNyZW1lbnRSZXNwb25zZSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MjwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5IVFRQLzEuMSAyMDAgT0smI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxhbmd1YWdlOiBlbi1VUyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzc5MiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjA4OjI1IEdNVCYjeGQ7Ci1TZXJ2ZXI6IFdlYlNwaGVyZSBBcHBsaWNhdGlvbiBTZXJ2ZXIvNi4xJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDhiODhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iRW5jcnlwdGlvbiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgYSBtZXNzYWdlIHdpdGggc2lnbmF0dXJlLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzaW1zZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZUFuZEVuY3J5cHRpb24vU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZTYzMTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzaW1zZworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bG9nIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODoyMDowOS44NzgiCi0gICAgeG1sbnM9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L2xvZy8iCi0gICAgeG1sbnM6d3NpLW1vbkNvbmZpZz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbW9uaXRvckNvbmZpZy8iCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb25pdG9yIHZlcnNpb249IjEuMCIgcmVsZWFzZURhdGU9IjIwMDMtMDMtMjAiPgotICAgIDxpbXBsZW1lbnRlciBuYW1lPSJJQk0iIGxvY2F0aW9uPSIiLz4KLSAgICA8ZW52aXJvbm1lbnQ+Ci0gICAgICA8cnVudGltZSBuYW1lPSJKYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kYXJkIEVkaXRpb24iIHZlcnNpb249InB3aTMyZGV2LTIwMDYxMDAyYSAoU1IzKSIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJXaW5kb3dzIFhQIiB2ZXJzaW9uPSI1LjEgYnVpbGQgMjYwMCBTZXJ2aWNlIFBhY2sgMiIvPgotICAgICAgPHhtbFBhcnNlciBuYW1lPSJBcGFjaGUgWGVyY2VzIiB2ZXJzaW9uPSJYTUw0SiA0LjQuNiIvPgotICAgIDwvZW52aXJvbm1lbnQ+Ci0gICAgPHdzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb21tZW50PkNvbW1lbnQ8L3dzaS1tb25Db25maWc6Y29tbWVudD4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0ZpbGUgcmVwbGFjZT0idHJ1ZSIgbG9jYXRpb249IlVSTCI+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzphZGRTdHlsZVNoZWV0IGhyZWY9Im51bGwiIHR5cGU9Im51bGwiIC8+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmxvZ0ZpbGU+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj42MDA8L3dzaS1tb25Db25maWc6bG9nRHVyYXRpb24+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Mzwvd3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICAgIDwvd3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICA8L3dzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgPC9tb25pdG9yPgotCi08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMSIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlcXVlc3QiIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODoxOTo1OC4wNjFaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnNvYXBlbmM9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyB4bWxuczp3c2E9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nJnF1b3Q7Jmd0OyZsdDtzb2FwZW52OkhlYWRlciZndDsmbHQ7d3NzZTpTZWN1cml0eSBzb2FwZW52Om11c3RVbmRlcnN0YW5kPSZxdW90OzEmcXVvdDsgeG1sbnM6d3NzZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktc2VjZXh0LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiBFbmNvZGluZ1R5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy1zb2FwLW1lc3NhZ2Utc2VjdXJpdHktMS4wI0Jhc2U2NEJpbmFyeSZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsgd3N1OklkPSZxdW90O3g1MDlic3RfMjAmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7TUlJRFFUQ0NBcXFnQXdJQkFnSUNBUVF3RFFZSktvWklodmNOQVFFRkJRQXdUakVMTUFrR0ExVUVCaE1DU2xBeEVUQVBCZ05WQkFnVENFdGhibUZuWVhkaE1Rd3dDZ1lEVlFRS0V3TkpRazB4RERBS0JnTlZCQXNUQTFSU1RERVFNQTRHQTFVRUF4TUhTVzUwSUVOQk1qQWVGdzB3TVRFd01ERXdPVFUwTURaYUZ3MHhNVEV3TURFd09UVTBNRFphTUZReEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVNTUFvR0ExVUVDaE1EU1VKTk1Rd3dDZ1lEVlFRTEV3TlVVa3d4RmpBVUJnTlZCQU1URFZOUFFWQlNaWEYxWlhOMFpYSXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTXkzUGZaMW1QaHJFc0J2WWlPdUlsUFYzVWlzNVl5NmhteG8yWXdZQzJuTkRCUHpLc2xXVWkvUStmSytETmRZNktFSG11RHJjVmNFbWE0OEo5WDFhNWF2Umxrc1FmS3B0S29WbjRlQnlzMmkvd2t3eXpRaERhRmppNzkvTXZuVFJXOEVWeTk5Rk5LdzRQRm5oT29lMXRsRGNOQnVJSC9mSXVHT3o5RWxUVitmQWdNQkFBR2pnZ0VtTUlJQklqQUpCZ05WSFJNRUFqQUFNQXNHQTFVZER3UUVBd0lGNERBc0JnbGdoa2dCaHZoQ0FRMEVIeFlkVDNCbGJsTlRUQ0JIWlc1bGNtRjBaV1FnUTJWeWRHbG1hV05oZEdVd0hRWURWUjBPQkJZRUZJVzNGRDFjWGllNGo0encxZ0FwNGN1T0FaNGxNSUc2QmdOVkhTTUVnYkl3Z2ErQUZMMzVJTlU0K1dSeTA5dmFmOXpPc1A3UXZPOXZvWUdTcElHUE1JR01NUXN3Q1FZRFZRUUdFd0pLVURFUk1BOEdBMVVFQ0JNSVMyRnVZV2RoZDJFeER6QU5CZ05WQkFjVEJsbGhiV0YwYnpFTU1Bb0dBMVVFQ2hNRFNVSk5NUXd3Q2dZRFZRUUxFd05VVWt3eEdUQVhCZ05WQkFNVEVGTlBRVkFnTWk0eElGUmxjM1FnUTBFeElqQWdCZ2txaGtpRzl3MEJDUUVXRTIxaGNuVjVZVzFoUUdwd0xtbGliUzVqYjIyQ0FnRUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSGt0aGRHRGdDdmRJTDkvdlhVbzc0eHBmT1FkL3JyMW93Qm1NZGIxVFdkT3l6d2JPSEM3bGtVbG5LcmtJN1NvZndTTFNEVVA1NzFpaU1YVXgzdFJkbUFWQ29ETU1GdURYaDlWNzIxMmx1WGNjeDBzMVM1S04wRDN4Vzk3TExOZWdRQzAvYithRkQ4WEt3MlU1WnR3Ym5GVFJnczA5N2RtejA5Um9zREtrTGxNJmx0Oy93c3NlOkJpbmFyeVNlY3VyaXR5VG9rZW4mZ3Q7Jmx0O0VuY3J5cHRlZEtleSB4bWxucz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3JzYS0xXzUmcXVvdDsvJmd0OyZsdDtkczpLZXlJbmZvIHhtbG5zOmRzPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMmcXVvdDsmZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpLZXlJZGVudGlmaWVyIFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOVN1YmplY3RLZXlJZGVudGlmaWVyJnF1b3Q7Jmd0Oy82MndYT2JFRDd6NmMxeVg3UWt2TjF0aFFkWT0mbHQ7L3dzc2U6S2V5SWRlbnRpZmllciZndDsmbHQ7L3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7L2RzOktleUluZm8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O2d1dUFySWdLMjBaUWtsc05rY2oxWHphQ21TdGcrMHJ4NTl0ZXVEMnBFQVhlUnZLYkNUemtmZ2xSdlg4Q24vRGlUQllOZXhiTmh2T2xqWC9zdWU1VUtKQTVKc21oU0Nqc3NHZnN3SmpZWFpuUmNuY0F3Q1R4Zm90dElxYXdXUUYxNjVCYXo4N3VPUjB5WTdhR2ltT0hpcEU3U05rUjVsbC84QWhtd1Y1Z0dXaz0mbHQ7L0NpcGhlclZhbHVlJmd0OyZsdDsvQ2lwaGVyRGF0YSZndDsmbHQ7UmVmZXJlbmNlTGlzdCZndDsmbHQ7RGF0YVJlZmVyZW5jZSBVUkk9JnF1b3Q7I3dzc2VjdXJpdHlfZW5jcnlwdGlvbl9pZF8yMSZxdW90Oy8mZ3Q7Jmx0Oy9SZWZlcmVuY2VMaXN0Jmd0OyZsdDsvRW5jcnlwdGVkS2V5Jmd0OyZsdDtkczpTaWduYXR1cmUgeG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7ZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzc2UgZHMgJnF1b3Q7IHhtbG5zOmVjPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90Oy8mZ3Q7Jmx0Oy9kczpDYW5vbmljYWxpemF0aW9uTWV0aG9kJmd0OyZsdDtkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOlJlZmVyZW5jZSBVUkk9JnF1b3Q7I3dzc2VjdXJpdHlfc2lnbmF0dXJlX2lkXzE5JnF1b3Q7Jmd0OyZsdDtkczpUcmFuc2Zvcm1zJmd0OyZsdDtkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90OyZndDsmbHQ7ZWM6SW5jbHVzaXZlTmFtZXNwYWNlcyBQcmVmaXhMaXN0PSZxdW90O3hzaSB4c2Qgd3NhIHNvYXBlbnYgc29hcGVuYyB3c3UgcDYxOSAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOlRyYW5zZm9ybSZndDsmbHQ7L2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTEmcXVvdDsvJmd0OyZsdDtkczpEaWdlc3RWYWx1ZSZndDtPejR6ZzFBUzlkeXBMUmt5bGxZOUlYTnRPQVU9Jmx0Oy9kczpEaWdlc3RWYWx1ZSZndDsmbHQ7L2RzOlJlZmVyZW5jZSZndDsmbHQ7L2RzOlNpZ25lZEluZm8mZ3Q7Jmx0O2RzOlNpZ25hdHVyZVZhbHVlJmd0O0dvUkIyZUNsSGo3a240VnN5QlFZV3ZlTUZseFFGazVhb1hFL1BXRnNCQ1ZtVEd6eVJ3K0lzWm1EeHlNUFAxRXZ0NW16SUlWc2FwdDVmakZYenE1bGtLSkVRcCt0OFR2ZFJXU0lLK1VCL2pYeHVVdGttdCtaU2VLV2pjZWNSdFRadGRHb0x5MEEvMDZ4aitiQVdWNGlHNmZmTHVQMjZZaEc4WXMrcUpCNFpHVT0mbHQ7L2RzOlNpZ25hdHVyZVZhbHVlJmd0OyZsdDtkczpLZXlJbmZvJmd0OyZsdDt3c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0O3dzc2U6UmVmZXJlbmNlIFVSST0mcXVvdDsjeDUwOWJzdF8yMCZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsvJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7L2RzOlNpZ25hdHVyZSZndDsmbHQ7L3dzc2U6U2VjdXJpdHkmZ3Q7Jmx0O3dzYTpUbyZndDtodHRwOi8vbG9jYWxob3N0OjkwODIvV2ViUHJvamVjdFdpdGhTaWduYXR1cmVBbmRFbmNyeXB0aW9uL3NlcnZpY2VzL1dlYlNlcnZpY2UmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtpbmNyZW1lbnQmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDM1QjEwOS0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5IHdzdTpJZD0mcXVvdDt3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xOSZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDsmbHQ7RW5jcnlwdGVkRGF0YSBJZD0mcXVvdDt3c3NlY3VyaXR5X2VuY3J5cHRpb25faWRfMjEmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O2RkQWt4dHlhdWZMTGMxM2VQZTF0RFNpQ1F6K2g1SEwyUU4wZ1Y2aGM2UjNpM1dxS281Z1FCendVOEpzWldicDl2UTFWTXJRWW1lMlRZSGpzektuY0NaenhJdlNiakxaN25NT3VXRkY3QWQ4cDY3Y1dtL21QSnc9PSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDsvRW5jcnlwdGVkRGF0YSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4Mjwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9XZWJQcm9qZWN0V2l0aFNpZ25hdHVyZUFuZEVuY3J5cHRpb24vc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogNDc3OSYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjE5OjU3IEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjE5OjU4LjI5MVoiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7d3NzZTpCaW5hcnlTZWN1cml0eVRva2VuIEVuY29kaW5nVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAjQmFzZTY0QmluYXJ5JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90OyB3c3U6SWQ9JnF1b3Q7eDUwOWJzdF8yMyZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDtNSUlEUURDQ0FxbWdBd0lCQWdJQ0FRVXdEUVlKS29aSWh2Y05BUUVGQlFBd1RqRUxNQWtHQTFVRUJoTUNTbEF4RVRBUEJnTlZCQWdUQ0V0aGJtRm5ZWGRoTVF3d0NnWURWUVFLRXdOSlFrMHhEREFLQmdOVkJBc1RBMVJTVERFUU1BNEdBMVVFQXhNSFNXNTBJRU5CTWpBZUZ3MHdNVEV3TURFeE1EQXdNemxhRncweE1URXdNREV4TURBd016bGFNRk14Q3pBSkJnTlZCQVlUQWtwUU1SRXdEd1lEVlFRSUV3aExZVzVoWjJGM1lURU1NQW9HQTFVRUNoTURTVUpOTVF3d0NnWURWUVFMRXdOVVVrd3hGVEFUQmdOVkJBTVRERk5QUVZCUWNtOTJhV1JsY2pDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXJhYWtOSjFKemtQVXV2UGRYUnZQT09DbDEybkJ3bXF2dDY1ZGsveCtRenh4YXJETndIK2VXUmJMeXlLY3JBeWQwWEdWK1pidmo2VjNPOURTVkNaVUNKdHR3NmJicXFlWWh3QVAzVjhzMjRzSUQ3N3RrM2dPaFVURUdZeHNsalgyb3JMMjZTTHFGSk1ydm52azJGUlMybXJka1pFQlVHOTdtRDRRV2NsbjRkMENBd0VBQWFPQ0FTWXdnZ0VpTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNQ3dHQ1dDR1NBR0crRUlCRFFRZkZoMVBjR1Z1VTFOTUlFZGxibVZ5WVhSbFpDQkRaWEowYVdacFkyRjBaVEFkQmdOVkhRNEVGZ1FVbFhTc3JWUmZaT0xHZEpkakVJd1RidVNUZTRVd2dib0dBMVVkSXdTQnNqQ0JyNEFVdmZrZzFUajVaSExUMjlwLzNNNncvdEM4NzIraGdaS2tnWTh3Z1l3eEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVQTUEwR0ExVUVCeE1HV1dGdFlYUnZNUXd3Q2dZRFZRUUtFd05KUWsweEREQUtCZ05WQkFzVEExUlNUREVaTUJjR0ExVUVBeE1RVTA5QlVDQXlMakVnVkdWemRDQkRRVEVpTUNBR0NTcUdTSWIzRFFFSkFSWVRiV0Z5ZFhsaGJXRkFhbkF1YVdKdExtTnZiWUlDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVhFN21FMVJQYjNsWUFZSkZ6QmIzVkFIdmtDV2EvSFF0Q09aZHluaUNIcDNNSjlFYk5UcStRcE9IVjYwWUU4dTArNVNlakN6RlNPSE9weUJnTFBqV296OEpYUW5qVjdWY0FiVGdsdytab09TWXk2NHJmaFJkcjlnaVNzNDdGNEQ2d29Qc0FkMnViZy9ZaE1hWExUU3lHeFBkVjNWcVFzdXR1U2dEVURvcVdDQT0mbHQ7L3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiZndDsmbHQ7RW5jcnlwdGVkS2V5IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjcnNhLTFfNSZxdW90Oy8mZ3Q7Jmx0O2RzOktleUluZm8geG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOktleUlkZW50aWZpZXIgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5U3ViamVjdEtleUlkZW50aWZpZXImcXVvdDsmZ3Q7dHlCVTNxUXVmWVo3MXRKQVU3Z1ZJcWdST3VRPSZsdDsvd3NzZTpLZXlJZGVudGlmaWVyJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7Q2lwaGVyRGF0YSZndDsmbHQ7Q2lwaGVyVmFsdWUmZ3Q7WTFuSi9jU0h6b1FSbkZROHh5MG9Zd01BWmUrVzJqYmttV0ZNcnFHUy85OEZReHBvbnVLOVRLVlFSYjdOVTFiTXdTb05ZTW1wTmpibjNPRm13UWdWWHhzeGdGdUpIU3c3VVlYZjJjU1djZHE5QUxYTVI3TzRNT0szMktPVjM4R2dtUTRGUkdod2pwWFRwUGptUkovT0s1ZktvTmJSdHdIMmo5ZWlhcmtZd01VPSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDtSZWZlcmVuY2VMaXN0Jmd0OyZsdDtEYXRhUmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzI0JnF1b3Q7LyZndDsmbHQ7L1JlZmVyZW5jZUxpc3QmZ3Q7Jmx0Oy9FbmNyeXB0ZWRLZXkmZ3Q7Jmx0O2RzOlNpZ25hdHVyZSB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDtkczpTaWduZWRJbmZvJmd0OyZsdDtkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3NzZSBkcyAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QmZ3Q7Jmx0O2RzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJnF1b3Q7LyZndDsmbHQ7ZHM6UmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMjImcXVvdDsmZ3Q7Jmx0O2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOlRyYW5zZm9ybSBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzdSBwNjE5ICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6VHJhbnNmb3JtJmd0OyZsdDsvZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOkRpZ2VzdFZhbHVlJmd0O1NydlZ3bEtVdzdoOWd3UVZnWnR3ekhCZGUzWT0mbHQ7L2RzOkRpZ2VzdFZhbHVlJmd0OyZsdDsvZHM6UmVmZXJlbmNlJmd0OyZsdDsvZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7clJ6V3NLRGgrRkR5Rzd4b3llZDdnVUJYYWlyV0cvbk5kdkxFUjR3NS9ZZllRQWNMRlZHTU5jMjRmbDFJc1Z6RXBaZkVyWmx1NGt3WnlIanB0R0VEVlI0Tmg0Y3IrWk9KWFZtcFZPdHhPdmJKTmw0cGpMVTEvTjN3bFF5WUlHMHFCckVtRklMczNSTFdrMStYZUUyTmxLVldBbEpDREdZbU5kRXJyclpoMGtFPSZsdDsvZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7Jmx0O2RzOktleUluZm8mZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpSZWZlcmVuY2UgVVJJPSZxdW90OyN4NTA5YnN0XzIzJnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90Oy8mZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDsvZHM6U2lnbmF0dXJlJmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZy9hbm9ueW1vdXMmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtodHRwOi8vbWFpbi9XZWJTZXJ2aWNlL2luY3JlbWVudFJlc3BvbnNlJmx0Oy93c2E6QWN0aW9uJmd0OyZsdDt3c2E6TWVzc2FnZUlEJmd0O3V1aWQ6MkQzNUIyM0YtMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6TWVzc2FnZUlEJmd0OyZsdDt3c2E6UmVsYXRlc1RvJmd0O3V1aWQ6MkQzNUIxMDktMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6UmVsYXRlc1RvJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSB3c3U6SWQ9JnF1b3Q7d3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMjImcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzI0JnF1b3Q7IFR5cGU9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjQ29udGVudCZxdW90OyB4bWxucz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3RyaXBsZWRlcy1jYmMmcXVvdDsvJmd0OyZsdDtDaXBoZXJEYXRhJmd0OyZsdDtDaXBoZXJWYWx1ZSZndDs3WWVFSTlDTXRqMERqcEZMeXBqQk1weFJBZ2Rtbm5xM2Q4MzIwa0J2TWhyUXViL0FIeVB3NmsxV2FqYjhJUTVuR0JmTklyQzRtMEZlaHRaWFVFU1h5alBmYlNHRjdzY09qcjF3eHpONFZBUnovdFdudVhTeVpReDZMbUo3S29wTWVxdnltZFAwM2hpaHNpRVpGSzhTTEJJYUdjbWxtQUhpJmx0Oy9DaXBoZXJWYWx1ZSZndDsmbHQ7L0NpcGhlckRhdGEmZ3Q7Jmx0Oy9FbmNyeXB0ZWREYXRhJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPkhUVFAvMS4xIDIwMCBPSyYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUNvbnRlbnQtTGFuZ3VhZ2U6IGVuLVVTJiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiA0ODkwJiN4ZDsKLURhdGU6IFR1ZSwgMTYgSmFuIDIwMDcgMjM6MTk6NTcgR01UJiN4ZDsKLVNlcnZlcjogV2ViU3BoZXJlIEFwcGxpY2F0aW9uIFNlcnZlci82LjEmI3hkOwotJiN4ZDsKLTwvaHR0cEhlYWRlcnM+Ci08L21lc3NhZ2VFbnRyeT4KLTwvbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1MGNlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJFbmNyeXB0aW9uIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBjb250YWlucyBhIG1lc3NhZ2Ugd2l0aCBzaWduYXR1cmUgYW5kIGVuY3J5cHRpb24uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTEvMTMwOS0xLndzaW1zZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS8xMzA5LTEud3NpbXNnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTkzNjAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS8xMzA5LTEud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA2LTA0LTEzVDE4OjUyOjMyLjQ4OCIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0iMS40LjIiLz4KLSAgICAgIDxvcGVyYXRpbmdTeXN0ZW0gbmFtZT0iTGludXgiIHZlcnNpb249IjIuNi4xNS4xIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuMy42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA2LTA0LTEzVDE4OjUxOjMwLjE5M1oiPgotPG1lc3NhZ2VDb250ZW50PiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsmbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnhzZD0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OyB4bWxuczp4c2k9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7Y2Vsc2l1c1RvRmFyZW5oZWl0IHhtbG5zPSZxdW90O2h0dHA6Ly93dHAmcXVvdDsmZ3Q7Jmx0O2NlbHNpdXMmZ3Q7MzcuMCZsdDsvY2Vsc2l1cyZndDsmbHQ7L2NlbHNpdXNUb0ZhcmVuaGVpdCZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWY2MTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMTMwOS0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBpcyBjb25mb3JtYW50IHRvIHJlcXVpcmVtZW50Ci0gICAgMTAxMS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi8xMzA5LTIud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTMwOS0yLzEzMDktMi53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmODIwYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTMwOS0yLzEzMDktMi53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXQgeG1sbnM9JnF1b3Q7aHR0cDovL3d0cCZxdW90OyZndDsmbHQ7Y2Vsc2l1cyZndDszNy4wJmx0Oy9jZWxzaXVzJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDtzb2FwZW52OmJhZENoaWxkLyZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmY5Yzc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjEzMDktMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHdpdGggY2hpbGRyZW4gZm9sbG93aW5nIHRoZQotICAgIHNvYXA6Qm9keSBlbGVtZW50LCB0aHVzIGJyZWFraW5nIHJlcXVpcmVtZW50IDEwMTEuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS8xNjAwLTEud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTYwMC0xLzE2MDAtMS53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YWY2OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTYwMC0xLzE2MDAtMS53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXIgeG1sbnM6dGVzdD0mcXVvdDtodHRwOi8vd3RwL3Rlc3QxNjAwLTEmcXVvdDsmZ3Q7Jmx0O3Rlc3Q6dGVzdEVsZW1lbnQvJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7Y2Vsc2l1c1RvRmFyZW5oZWl0IHhtbG5zPSZxdW90O2h0dHA6Ly93dHAmcXVvdDsmZ3Q7Jmx0O2NlbHNpdXMmZ3Q7MzcuMCZsdDsvY2Vsc2l1cyZndDsmbHQ7L2NlbHNpdXNUb0ZhcmVuaGVpdCZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xNjAwLTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTM2ZDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjE2MDAtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgYSBtZXNzYWdlIHdpdGggYQotICAgIGhlYWRlciBlbnRyeSB3aG9zZSBuYW1lc3BhY2UgaXMgZGVmaW5lZCBpbiB0aGUgc29hcDpoZWFkZXIgZWxlbWVudC4gIFRoaXMKLSAgICBpcyBjb25maXJtYW50IHRvIHJlcXVpcmVtZW50IDk5ODAgaW4gdGhlIEJhc2ljIFByb2ZpbGUgYnV0IGlzIGN1cnJlbnRseQotICAgIGZsYWdnZWQgYXMgYSBjb25mb3JtYW5jZSBlcnJvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni8xNDE5NjYud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnVnemlsbGEvMTQxOTY2LzE0MTk2Ni53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNDVmYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnVnemlsbGEvMTQxOTY2LzE0MTk2Ni53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXQgeG1sbnM9JnF1b3Q7aHR0cDovL3d0cCZxdW90OyZndDsmbHQ7Y2Vsc2l1cyZndDszNy4wJmx0Oy9jZWxzaXVzJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDtzb2FwZW52OmJhZENoaWxkLyZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMSYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9idWd6aWxsYS8xNDE5NjYvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTI4MWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjE0MTk2NiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgb25seSBhIHJlcXVlc3QgYW5kCi0gICAgYnJlYWtzIHJlcXVpcmVtZW50IDEwMTEuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL0hlbGxvU2VydmljZV9zY2hlbWExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL0hlbGxvU2VydmljZV9zY2hlbWExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0YzllYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NPQVAxMi9IZWxsb1NlcnZpY2Vfc2NoZW1hMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3QvIiB2ZXJzaW9uPSIxLjAiPgotCi0gIDx4czplbGVtZW50IHhtbG5zOm5zMT0iaHR0cDovL3Rlc3QvIiBuYW1lPSJoZWxsbyIgdHlwZT0ibnMxOmhlbGxvIi8+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImhlbGxvIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImFyZzAiIHR5cGU9InhzOnN0cmluZyIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmVsZW1lbnQgeG1sbnM6bnMyPSJodHRwOi8vdGVzdC8iIG5hbWU9ImhlbGxvUmVzcG9uc2UiIHR5cGU9Im5zMjpoZWxsb1Jlc3BvbnNlIi8+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImhlbGxvUmVzcG9uc2UiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0icmV0dXJuIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NPQVAxMi9TaW1wbGVMb2cud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL1NpbXBsZUxvZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWU4MzMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL1NpbXBsZUxvZy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXAxMj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwMTIvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZXN0LyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSGVsbG9TZXJ2aWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LyI+Ci0gIDx0eXBlcz4KLSAgICA8eHNkOnNjaGVtYT4KLSAgICAgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3Rlc3QvIiBzY2hlbWFMb2NhdGlvbj0iSGVsbG9TZXJ2aWNlX3NjaGVtYTEueHNkIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3R5cGVzPgotICA8bWVzc2FnZSBuYW1lPSJoZWxsbyI+Ci0gICAgPHBhcnQgZWxlbWVudD0idG5zOmhlbGxvIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iaGVsbG9SZXNwb25zZSI+Ci0gICAgPHBhcnQgZWxlbWVudD0idG5zOmhlbGxvUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iSGVsbG8iPgotICAgIDxvcGVyYXRpb24gbmFtZT0iaGVsbG8iPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpoZWxsbyIvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6aGVsbG9SZXNwb25zZSIvPgotICAgIDwvb3BlcmF0aW9uPgotICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJIZWxsb1BvcnRCaW5kaW5nIiB0eXBlPSJ0bnM6SGVsbG8iPgotICAgIDxzb2FwMTI6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3d3dy53My5vcmcvMjAwMy8wNS9zb2FwL2JpbmRpbmdzL0hUVFAvIi8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJoZWxsbyI+Ci0gICAgICA8c29hcDEyOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXAxMjpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwMTI6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotICA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkhlbGxvU2VydmljZSI+Ci0gICAgPHBvcnQgYmluZGluZz0idG5zOkhlbGxvUG9ydEJpbmRpbmciIG5hbWU9IkhlbGxvUG9ydCI+Ci0gICAgICA8c29hcDEyOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MS90ZDEyL0hlbGxvU2VydmljZSIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU2VjdXJlV1MvRW5jcnlwdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9FbmNyeXB0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTYzNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9FbmNyeXB0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM6aW1wbD0iaHR0cDovL21haW4iIHhtbG5zOmludGY9Imh0dHA6Ly9tYWluIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOndzaT0iaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx3c2RsOnR5cGVzPgotICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmV0dXJuIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2NoZW1hPgotIDwvd3NkbDp0eXBlcz4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50IiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlcXVlc3QiIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiLz4KLQotICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSIvPgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6cG9ydFR5cGU+Ci0KLSAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iV2ViU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOldlYlNlcnZpY2UiPgotIDx3c2F3OlVzaW5nQWRkcmVzc2luZyB3c2RsOnJlcXVpcmVkPSJmYWxzZSIgeG1sbnM6d3Nhdz0iaHR0cDovL3d3dy53My5vcmcvMjAwNi8wNS9hZGRyZXNzaW5nL3dzZGwiLz4KLQotICAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJpbmNyZW1lbnQiLz4KLQotICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDppbnB1dD4KLQotICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOm91dHB1dD4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOmJpbmRpbmc+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iV2ViU2VydmljZVNlcnZpY2UiPgotICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImludGY6V2ViU2VydmljZVNvYXBCaW5kaW5nIiBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL1dlYlByb2plY3RXaXRoRW5jcmlwdGlvbi9zZXJ2aWNlcy9XZWJTZXJ2aWNlIi8+Ci0KLSAgICA8L3dzZGw6cG9ydD4KLQotICA8L3dzZGw6c2VydmljZT4KLQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9Ob1NlY3VyaXR5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL05vU2VjdXJpdHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5NjM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL05vU2VjdXJpdHkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9tYWluIiB4bWxuczppbXBsPSJodHRwOi8vbWFpbiIgeG1sbnM6aW50Zj0iaHR0cDovL21haW4iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6d3NpPSJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzaWMvMS4xL3hzZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gPHdzZGw6dHlwZXM+Ci0gIDxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnRSZXR1cm4iIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50Ij4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9InZhbHVlIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgPC9zY2hlbWE+Ci0gPC93c2RsOnR5cGVzPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnQiIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iV2ViU2VydmljZSI+Ci0gICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJpbmNyZW1lbnQiPgotICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9ImludGY6aW5jcmVtZW50UmVxdWVzdCIgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCIvPgotCi0gICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImludGY6aW5jcmVtZW50UmVzcG9uc2UiIG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIi8+Ci0KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gIDwvd3NkbDpwb3J0VHlwZT4KLQotICAgPHdzZGw6YmluZGluZyBuYW1lPSJXZWJTZXJ2aWNlU29hcEJpbmRpbmciIHR5cGU9ImludGY6V2ViU2VydmljZSI+Ci0gPHdzYXc6VXNpbmdBZGRyZXNzaW5nIHdzZGw6cmVxdWlyZWQ9ImZhbHNlIiB4bWxuczp3c2F3PSJodHRwOi8vd3d3LnczLm9yZy8yMDA2LzA1L2FkZHJlc3Npbmcvd3NkbCIvPgotCi0gICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLQotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249ImluY3JlbWVudCIvPgotCi0gICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOmlucHV0PgotCi0gICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICA8L3dzZGw6b3V0cHV0PgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6YmluZGluZz4KLQotICAgPHdzZGw6c2VydmljZSBuYW1lPSJXZWJTZXJ2aWNlU2VydmljZSI+Ci0gICAgIDx3c2RsOnBvcnQgYmluZGluZz0iaW50ZjpXZWJTZXJ2aWNlU29hcEJpbmRpbmciIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwODAvV2ViUHJvamVjdFdpdGhFbmNyaXB0aW9uL3NlcnZpY2VzL1dlYlNlcnZpY2UiLz4KLQotICAgIDwvd3NkbDpwb3J0PgotCi0gIDwvd3NkbDpzZXJ2aWNlPgotCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL1NpZ25hdHVyZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5NjM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL1NpZ25hdHVyZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zOmltcGw9Imh0dHA6Ly9tYWluIiB4bWxuczppbnRmPSJodHRwOi8vbWFpbiIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp3c2k9Imh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9iYXNpYy8xLjEveHNkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSA8d3NkbDp0eXBlcz4KLSAgPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9tYWluIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudFJldHVybiIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnQiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0idmFsdWUiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NjaGVtYT4KLSA8L3dzZGw6dHlwZXM+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50UmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ij4KLSAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbnRmOmluY3JlbWVudCIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0iaW50ZjppbmNyZW1lbnRSZXF1ZXN0IiBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ii8+Ci0KLSAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiLz4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOnBvcnRUeXBlPgotCi0gICA8d3NkbDpiaW5kaW5nIG5hbWU9IldlYlNlcnZpY2VTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpXZWJTZXJ2aWNlIj4KLSA8d3NhdzpVc2luZ0FkZHJlc3Npbmcgd3NkbDpyZXF1aXJlZD0iZmFsc2UiIHhtbG5zOndzYXc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDYvMDUvYWRkcmVzc2luZy93c2RsIi8+Ci0KLSAgICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotCi0gICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJpbmNyZW1lbnQiPgotICAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaW5jcmVtZW50Ii8+Ci0KLSAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ij4KLSAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICA8L3dzZGw6aW5wdXQ+Ci0KLSAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gIDwvd3NkbDpiaW5kaW5nPgotCi0gICA8d3NkbDpzZXJ2aWNlIG5hbWU9IldlYlNlcnZpY2VTZXJ2aWNlIj4KLSAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJpbnRmOldlYlNlcnZpY2VTb2FwQmluZGluZyIgbmFtZT0iV2ViU2VydmljZSI+Ci0gICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSIvPgotCi0gICAgPC93c2RsOnBvcnQ+Ci0KLSAgPC93c2RsOnNlcnZpY2U+Ci0KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTYzNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM6aW1wbD0iaHR0cDovL21haW4iIHhtbG5zOmludGY9Imh0dHA6Ly9tYWluIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOndzaT0iaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx3c2RsOnR5cGVzPgotICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmV0dXJuIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2NoZW1hPgotIDwvd3NkbDp0eXBlcz4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50IiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlcXVlc3QiIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiLz4KLQotICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSIvPgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6cG9ydFR5cGU+Ci0KLSAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iV2ViU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOldlYlNlcnZpY2UiPgotIDx3c2F3OlVzaW5nQWRkcmVzc2luZyB3c2RsOnJlcXVpcmVkPSJmYWxzZSIgeG1sbnM6d3Nhdz0iaHR0cDovL3d3dy53My5vcmcvMjAwNi8wNS9hZGRyZXNzaW5nL3dzZGwiLz4KLQotICAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJpbmNyZW1lbnQiLz4KLQotICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDppbnB1dD4KLQotICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOm91dHB1dD4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOmJpbmRpbmc+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iV2ViU2VydmljZVNlcnZpY2UiPgotICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImludGY6V2ViU2VydmljZVNvYXBCaW5kaW5nIiBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL1dlYlByb2plY3RXaXRoRW5jcmlwdGlvbi9zZXJ2aWNlcy9XZWJTZXJ2aWNlIi8+Ci0KLSAgICA8L3dzZGw6cG9ydD4KLQotICA8L3dzZGw6c2VydmljZT4KLQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9hcC8yOTQxLTEvMjk0MS0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS8yOTQxLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI0ZTAwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS8yOTQxLTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmYXVsdCIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmYXVsdE1lc3NhZ2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iZmF1bHQiIGVsZW1lbnQ9ImludGY6ZmF1bHQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiIG1lc3NhZ2U9ImludGY6ZmF1bHRNZXNzYWdlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZhdWx0IiBwYXJ0PSJmYXVsdCIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ODM5NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9hcC8yOTQxLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjI5NDEtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgd2l0aCBhIHNvYXA6aGVhZGVyZmF1bHQgZWxlbWVudCB0aGF0Ci0gICAgc2hvdWxkIHBhc3MgdGVzdCBhc3NlcnRpb24gQlAyOTQxLgotICA8L2Rlc2NyaXB0aW9uPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xLzIwMTItMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTEvMjAxMi0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYjkyYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTEvMjAxMi0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVwb3J0Ij4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOk5hbWUiIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6U3BlY2ltZW4iIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TG90IiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iU2FtcGxlTGlzdCI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIiByZWY9InRuczpSZXBvcnQiIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb3VudCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJMYXN0TW9kaWZpZWQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTG90IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNwZWNpbWVuIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9InRuczpTYW1wbGVOYW1lIiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOkNvdW50IiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOkxhc3RNb2RpZmllZCIgLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIiByZWY9InRuczpTYW1wbGVQcm92aWRlciIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTYW1wbGVOYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZVByb3ZpZGVyIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOk5hbWUiIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TnVtYmVyIiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOlNhbXBsZUxpc3QiIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0KLQotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0U2FtcGxlUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0ic2FtcGxlSWQiIHR5cGU9InhzZDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0U2FtcGxlUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InJlcG9ydCIgZWxlbWVudD0idG5zOlNhbXBsZSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2FtcGxlUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ2V0U2FtcGxlIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOmdldFNhbXBsZVJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlNhbXBsZUJpbmRpbmciIHR5cGU9InRuczpTYW1wbGVQb3J0VHlwZSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdldFNhbXBsZSI+Ci0JCQk8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2dldFNhbXBsZSIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IlNhbXBsZVNlcnZpY2UiPgotCQk8d3NkbDpwb3J0IG5hbWU9IlNhbXBsZVBvcnQiIGJpbmRpbmc9InRuczpTYW1wbGVCaW5kaW5nIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5YjdiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTItMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgZmFpbHMgdGVzdCBhc3NlcnRpb24gQlAyMDEyLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMTIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMTIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvMjAxMi0yLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMi8yMDEyLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2MTA4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMi8yMDEyLTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpQaG9uZU51bWJlciIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZThhZDVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0yL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMi0yIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBmYWlscyB0ZXN0IGFzc2VydGlvbiBCUDIwMTIuCi0gICAgCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTMtMS8yMDEzLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xLzIwMTMtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTkxMjRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xLzIwMTMtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMzODhkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTMtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTMtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgdXNlZCBpbiB0aGUgV1MtSSAKLSAgICBpbnRlcm9wZXJhYmlsaXR5IGRlbW8uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMyIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMyIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMTIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMTIiIHRhZElEPSJBUDEwIi8+Ci0gICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xLzIwMTQtMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTEvMjAxNC0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDAyNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTEvMjAxNC0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLQotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nSW4iPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ091dCI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciIC8+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVyczEiIHR5cGU9InM6c3RyaW5nIi8+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVyczIiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPHBvcnRUeXBlIG5hbWU9IkVjaG9Qb3J0VHlwZSI+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIiBwYXJhbWV0ZXJPcmRlcj0icGFyYW1ldGVycyBwYXJhbWV0ZXJzMSBwYXJhbWV0ZXJzMiI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ0luIiAvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nT3V0IiAvPgotICAgIDwvb3BlcmF0aW9uPgotICAgPC9wb3J0VHlwZT4KLSAgPGJpbmRpbmcgbmFtZT0iRWNob0JpbmRpbmciIHR5cGU9InMwOkVjaG9Qb3J0VHlwZSI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9InJwYyIgLz4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9lY2hvU3RyaW5nIiBzdHlsZT0icnBjIiAvPgotICAgICAgPGlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIi8+Ci0gICAgICA8L2lucHV0PgotICAgICAgPG91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIgLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotIDwvYmluZGluZz4KLSAgPHNlcnZpY2UgbmFtZT0iRWNob1NlcnZpY2UiPgotICAgIDxwb3J0IG5hbWU9IkVjaG9Qb3J0IiBiaW5kaW5nPSJzMDpFY2hvQmluZGluZyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY2NzVmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxNC0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgd3NkbDpvcGVyYXRpb24gCi0gICAgd2l0aCBhIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi8yMDE0LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0yLzIwMTQtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjUzMDY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0yLzIwMTQtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ0luIj4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdPdXQiPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIiAvPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMxIiB0eXBlPSJzOnN0cmluZyIvPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMyIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxwb3J0VHlwZSBuYW1lPSJFY2hvUG9ydFR5cGUiPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyIgcGFyYW1ldGVyT3JkZXI9InBhcmFtZXRlcnMgcGFyYW1ldGVyczEiPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdJbiIgLz4KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ091dCIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgIDwvcG9ydFR5cGU+Ci0gIDxiaW5kaW5nIG5hbWU9IkVjaG9CaW5kaW5nIiB0eXBlPSJzMDpFY2hvUG9ydFR5cGUiPgotICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJycGMiIC8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvZWNob1N0cmluZyIgc3R5bGU9InJwYyIgLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciIC8+Ci0gICAgICA8L291dHB1dD4KLSAgICA8L29wZXJhdGlvbj4KLSA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkVjaG9TZXJ2aWNlIj4KLSAgICA8cG9ydCBuYW1lPSJFY2hvUG9ydCIgYmluZGluZz0iczA6RWNob0JpbmRpbmciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWI0MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTQtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIHdzZGw6b3BlcmF0aW9uIAotICAgIHdpdGggYSBwYXJhbWV0ZXJPcmRlciBhdHRyaWJ1dGUuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvMjAxNC0zLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMy8yMDE0LTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJlNzkyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMy8yMDE0LTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotCi0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzMSIgdHlwZT0iczpzdHJpbmciLz4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzMiIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzcyYzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxNC0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgd3NkbDpvcGVyYXRpb24gCi0gICAgd2l0aCBhIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE0IiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE0IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNy0xLzIwMTctMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvMjAxNy0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzVkNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvMjAxNy0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzdHlsZT0iZG9jdW1lbnQiIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9InJwYyIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZGE5NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE3LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIAotICAgIG11bHRpcGxlIHN0eWxlIHZhbHVlcyB3aXRoaW4gdGhlIHNhbWUgYmluZGluZy4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE3IiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE3IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNy0yLzIwMTctMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvMjAxNy0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiOTBlZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvMjAxNy0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2syIj4KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50IiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nMiIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vazIiPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9InJwYyIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNmUzMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTctMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyAKLSAgICBtdWx0aXBsZSBzdHlsZSB2YWx1ZXMgYnV0IGluIGRpZmZlcmVudCBiaW5kaW5ncy4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtMS8yMDE4LTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xLzIwMTgtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJhZjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xLzIwMTgtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDx0eXBlcy8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGY2NTM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE4LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudGF0aW9uCi0gICAgZWxlbWVudCBwcmVjZWRpbmcgdGhlIHR5cGVzIGVsZW1lbnQuIAotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMTgtMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOC0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0N2I5NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOC0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPGRvY3VtZW50YXRpb24+Ci0gIDwvZG9jdW1lbnRhdGlvbj4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgbG9jYXRpb249IjIwMThhLndzZGwiLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgbG9jYXRpb249IjIwMThiLndzZGwiLz4KLSAgPHR5cGVzLz4KLSAgCi0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMThhLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ5NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjZjNTQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE4LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudGF0aW9uCi0gICAgZWxlbWVudCBhbmQgMiBpbXBvcnQgZWxlbWVudHMgcHJlY2VkaW5nIHRoZSB0eXBlcyBlbGVtZW50LiAKLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtMy8yMDE4LTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zLzIwMTgtMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDBkODViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zLzIwMTgtMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTM0NjRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNC8yMDE4LTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMTgtNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDA1ODkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMTgtNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIGxvY2F0aW9uPSIyMDE4YS53c2RsIi8+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIGxvY2F0aW9uPSIyMDE4Yi53c2RsIi8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMThhLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ5NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTM1OTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC00Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNS8yMDE4LTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMTgtNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWI5YTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMTgtNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIGxvY2F0aW9uPSIyMDE4YS53c2RsIi8+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThhLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNS8yMDE4YS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGFmNTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThhLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIwMThhIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIGxvY2F0aW9uPSIyMDE4Yi53c2RsIi8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTM1OTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC00Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS8yMDE5LTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0xLzIwMTktMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDc1MmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0xLzIwMTktMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3doZXJlIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYWQ2MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE5LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgZG9jdW1lbnQgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpoZWFkZXIgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yLzIwMTktMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTIvMjAxOS0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMjAwZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTIvMjAxOS0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm93aGVyZSIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5YWUwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTktMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudCBsaXRlcmFsIGJpbmRpbmcKLSAgICB3aWggYSBuYW1wYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgdGhlIHNvYXBiaW5kOmJvZHkgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0zLzIwMTktMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvMjAxOS0zLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNjM5OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvMjAxOS0zLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL25vd2hlcmUiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2VjMDNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOS0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIGRvY3VtZW50IGxpdGVyYWwgYmluZGluZwotICAgIHdpaCBhIG5hbXBhY2UgYXR0cmlidXRlIHNwZWNpZmllZCB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00LzIwMTktNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTQvMjAxOS00LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MjgxZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTQvMjAxOS00LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3doZXJlIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00L3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk0OWE1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktNC90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTktNCI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudCBsaXRlcmFsIGJpbmRpbmcKLSAgICB3aWggYSBuYW1wYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgdGhlIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnQuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOSIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMS8yMDIwLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xLzIwMjAtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjkwNDU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xLzIwMjAtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJjY2NiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjAtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgbWlzc2luZyBmcm9tIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIwMjAiIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIwMjAiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMi8yMDIwLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yLzIwMjAtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2ZmNjM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yLzIwMjAtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSIyMDIwLnhzZCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3NDE4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjAtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIGluIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQgdGhhdCBoYXMgYSAKLSAgICB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBhYnNvbHV0ZSBVUkkuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAyMCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAyMCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotCi08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDUtMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTEvMjEwNS0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NDE1Y2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTEvMjEwNS0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPGRvY3VtZW50YXRpb24+Ci0gIDwvZG9jdW1lbnRhdGlvbj4KLSAgPHR5cGVzLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YSIgbG9jYXRpb249IjIxMDVhLndzZGwiLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YiIgbG9jYXRpb249IjIxMDViLndzZGwiLz4KLQotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nSW4iPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ091dCI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciIC8+Ci0gIDwvbWVzc2FnZT4KLSAgPHBvcnRUeXBlIG5hbWU9IkVjaG9Qb3J0VHlwZSI+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIiBwYXJhbWV0ZXJPcmRlcj0icGFyYW1ldGVycyI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ0luIiAvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nT3V0IiAvPgotICAgIDwvb3BlcmF0aW9uPgotICAgPC9wb3J0VHlwZT4KLSAgPGJpbmRpbmcgbmFtZT0iRWNob0JpbmRpbmciIHR5cGU9InMwOkVjaG9Qb3J0VHlwZSI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9InJwYyIgLz4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9lY2hvU3RyaW5nIiBzdHlsZT0icnBjIiAvPgotICAgICAgPGlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIi8+Ci0gICAgICA8L2lucHV0PgotICAgICAgPG91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIgLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotIDwvYmluZGluZz4KLSAgPHNlcnZpY2UgbmFtZT0iRWNob1NlcnZpY2UiPgotICAgIDxwb3J0IG5hbWU9IkVjaG9Qb3J0IiBiaW5kaW5nPSJzMDpFY2hvQmluZGluZyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDVhLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS8yMTA1YS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzFlNzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDVhLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDVhIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWEiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDViLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS8yMTA1Yi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzA3OWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDViLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDViIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWIiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY3ZmMwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMDUtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSB0eXBlcwotICAgIGVsZW1lbnQgcHJlY2VkaW5nIHRoZSAyIGltcG9ydCBlbGVtZW50cy4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjEwNSIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjEwNSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0yLzIxMDUtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDExNDdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0yLzIxMDUtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWEiIGxvY2F0aW9uPSIyMTA1YS53c2RsIi8+Ci0gIDx0eXBlcy8+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWIiIGxvY2F0aW9uPSIyMTA1Yi53c2RsIi8+Ci0KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ0luIj4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdPdXQiPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIiAvPgotICA8L21lc3NhZ2U+Ci0gIDxwb3J0VHlwZSBuYW1lPSJFY2hvUG9ydFR5cGUiPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyIgcGFyYW1ldGVyT3JkZXI9InBhcmFtZXRlcnMiPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdJbiIgLz4KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ091dCIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgIDwvcG9ydFR5cGU+Ci0gIDxiaW5kaW5nIG5hbWU9IkVjaG9CaW5kaW5nIiB0eXBlPSJzMDpFY2hvUG9ydFR5cGUiPgotICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJycGMiIC8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvZWNob1N0cmluZyIgc3R5bGU9InJwYyIgLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciIC8+Ci0gICAgICA8L291dHB1dD4KLSAgICA8L29wZXJhdGlvbj4KLSA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkVjaG9TZXJ2aWNlIj4KLSAgICA8cG9ydCBuYW1lPSJFY2hvUG9ydCIgYmluZGluZz0iczA6RWNob0JpbmRpbmciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1YS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvMjEwNWEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMxZTc5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1YS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YSIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDVhIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1Yi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvMjEwNWIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcwNzliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1Yi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YiIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDViIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNTk5ZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMTA1LTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgdHlwZXMKLSAgICBlbGVtZW50IGJldHdlZW4gdGhlIDIgaW1wb3J0IGVsZW1lbnRzLiAKLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTA1IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTA1IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xLzIxMTctMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTEvMjExNy0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYjhmZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTEvMjExNy0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotIAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEzN2FjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMTctMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpmYXVsdCBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi8yMTE3LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0yLzIxMTctMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjgyMmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0yLzIxMTctMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0gIDwvd3NkbDptZXNzYWdlPiAgCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNDAxZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMTE3LTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgcnBjIGxpdGVyYWwgYmluZGluZwotICAgIHdpaCBhIG5hbXBhY2UgYXR0cmlidXRlIHNwZWNpZmllZCB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTE3IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTE3IiB0YWRJRD0iQVAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjExMyIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjExMyIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotCi08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zLzIxMTctMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTMvMjExNy0zLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODhmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTMvMjExNy0zLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdkMDcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMTctMyI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpoZWFkZXJmYXVsdCBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJBUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTEzIiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTEzIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci0KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvMjQwNi0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzI0MDYtMS8yNDA2LTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyNDg2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzI0MDYtMS8yNDA2LTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPGRlZmluaXRpb25zIG5hbWU9IlNhbXBsZVNlcnZpY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotCTxtZXNzYWdlIG5hbWU9ImdldFNhbXBsZVJlcXVlc3QiPgotCQk8cGFydCBuYW1lPSJ6aXBjb2RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JPC9tZXNzYWdlPgotCTxtZXNzYWdlIG5hbWU9ImdldFNhbXBsZVJlc3BvbnNlIj4KLQkJPHBhcnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ4c2Q6ZmxvYXQiLz4KLQk8L21lc3NhZ2U+Ci0JPHBvcnRUeXBlIG5hbWU9IlNhbXBsZVBvcnRUeXBlIj4KLQkJPG9wZXJhdGlvbiBuYW1lPSJnZXRTYW1wbGUiPgotCQkJPGlucHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXF1ZXN0Ii8+Ci0JCQk8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXNwb25zZSIvPgotCQk8L29wZXJhdGlvbj4KLQk8L3BvcnRUeXBlPgotCTxiaW5kaW5nIG5hbWU9IlNhbXBsZUJpbmRpbmciIHR5cGU9InRuczpTYW1wbGVQb3J0VHlwZSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLQkJPG9wZXJhdGlvbiBuYW1lPSJnZXRTYW1wbGUiPgotCQkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotCQkJPGlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJlbmNvZGVkIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIGVuY29kaW5nU3R5bGU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIi8+Ci0JCQk8L2lucHV0PgotCQkJPG91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0iZW5jb2RlZCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIvPgotCQkJPC9vdXRwdXQ+Ci0JCTwvb3BlcmF0aW9uPgotCTwvYmluZGluZz4KLQk8c2VydmljZSBuYW1lPSJTYW1wbGVTZXJ2aWNlIj4KLQkJPGRvY3VtZW50YXRpb24+PC9kb2N1bWVudGF0aW9uPgotCQk8cG9ydCBuYW1lPSJTYW1wbGVQb3J0IiBiaW5kaW5nPSJ0bnM6U2FtcGxlQmluZGluZyI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0JCTwvcG9ydD4KLQk8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2EyODdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjQwNi0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjQwNi0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBmYWlscyB0ZXN0IGFzc2VydGlvbiBCUDI0MDYuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjQwNiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjQwNiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2J1Z3ppbGxhL2VtcHR5U29hcEJvZHkvZW1wdHlTb2FwQm9keS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9idWd6aWxsYS9lbXB0eVNvYXBCb2R5L2VtcHR5U29hcEJvZHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAyMDI5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2J1Z3ppbGxhL2VtcHR5U29hcEJvZHkvZW1wdHlTb2FwQm9keS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHR5cGVzPgotICAgIDxzOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLSAgICAgIDxzOmVsZW1lbnQgbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICAgIDxzOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDxzOnNlcXVlbmNlPgotICAgICAgICAgICAgPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmFtZT0iYXJnIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgICAgICAgICA8L3M6c2VxdWVuY2U+Ci0gICAgICAgIDwvczpjb21wbGV4VHlwZT4KLSAgICAgIDwvczplbGVtZW50PgotICAgIDwvczpzY2hlbWE+Ci0gIDwvdHlwZXM+Ci0gIDxtZXNzYWdlIG5hbWU9InNldE1lc3NhZ2VSZXF1ZXN0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJzMDplY2hvU3RyaW5nIiAvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9InNldE1lc3NhZ2VSZXNwb25zZSIvPgotCi0gIDxwb3J0VHlwZSBuYW1lPSJTZXJ2aWNlMVNvYXAiPgotICAgIDxvcGVyYXRpb24gbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6c2V0TWVzc2FnZVJlcXVlc3QiIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOnNldE1lc3NhZ2VSZXNwb25zZSIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgPC9wb3J0VHlwZT4KLQotICA8YmluZGluZyBuYW1lPSJTZXJ2aWNlMVNvYXAiIHR5cGU9InMwOlNlcnZpY2UxU29hcCI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9ImRvY3VtZW50IiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIiBzdHlsZT0iZG9jdW1lbnQiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gIDwvYmluZGluZz4KLQotICA8c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHBvcnQgbmFtZT0iU2VydmljZTFTb2FwIiBiaW5kaW5nPSJzMDpTZXJ2aWNlMVNvYXAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdC9XU0lTZXJ2aWNlL1NlcnZpY2UxLmFzbXgiIC8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTAtMS8yMDEwLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTAtMS8yMDEwLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxM2RhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvMjAxMC0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU5YmFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDEwLTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IGZhaWxzIHRlc3QgYXNzZXJ0aW9uIEJQMjAxMC4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMCIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MzA4Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0xLzIwMTEtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgICA8aW1wb3J0IG5hbWVzcGFjZT0iMjAxMS54c2QiIHNjaGVtYUxvY2F0aW9uPSIyMDExLnhzZCIvPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NTdmN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0xLzIwMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSIyMDExLnhzZCIgCi0gICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICAgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiAKLSAgICAgICAgIHhtbG5zOmludGY9IjIwMTEtMS54c2QiIAotICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJuZXh0LnhzZCIgc2NoZW1hTG9jYXRpb249Im5leHQueHNkIi8+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS9uZXh0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS9uZXh0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE2ODQyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvbmV4dC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzOnNjaGVtYSAKLSAgdGFyZ2V0TmFtZXNwYWNlPSJuZXh0LnhzZCIKLSAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgeG1sbnM6cz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iIAotICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzOmFubm90YXRpb24+Ci0JICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIAkgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLQk8L3hzOmFubm90YXRpb24+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmI2NzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMS0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG9uZm9ybWFudCB3c2RsLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzMDhjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvMjAxMS0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgIDxpbXBvcnQgbmFtZXNwYWNlPSIyMDExLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEueHNkIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMTZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvMjAxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMSIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0gPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgICAgICB0YXJnZXROYW1lc3BhY2U9IjIwMTEueHNkIiAKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgICB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIAotICAgICAgICAgeG1sbnM6aW50Zj0iMjAxMS0xLnhzZCIgCi0gICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzRkMDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTEtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDExLgotICAgIEhvd2V2ZXIgdGhlIHByZXJlcXVpc2l0ZSBCUDIxMDIgZmFpbHMgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbiBleGVjdXRlIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjIwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIyMDIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEtMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEtMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDMwOGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy8yMDExLTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICAgPGltcG9ydCBuYW1lc3BhY2U9IjIwMTEueHNkIiBzY2hlbWFMb2NhdGlvbj0iMjAxMS54c2QiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zLzIwMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODU3ZjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy8yMDExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLSA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iMjAxMS54c2QiIAotICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgCi0gICAgICAgICB4bWxuczppbnRmPSIyMDExLTEueHNkIiAKLSAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0ibmV4dC54c2QiIHNjaGVtYUxvY2F0aW9uPSJuZXh0LnhzZCIvPgotICA8L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvbmV4dC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvbmV4dC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MGE3N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zL25leHQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4xIiBlbmNvZGluZz0idXRmLTgiPz4KLTx4czpzY2hlbWEgCi0gIHRhcmdldE5hbWVzcGFjZT0ibmV4dC54c2QiCi0gIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gIHhtbG5zOnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiAKLSAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTx4czphbm5vdGF0aW9uPgotCSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAJICA8L3hzOmRvY3VtZW50YXRpb24+Ci0JPC94czphbm5vdGF0aW9uPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEwOGJlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDExLTMiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAxMS4KLSAgICBIb3dldmVyIHRoZSBwcmVyZXF1aXNpdGUgQlAyMTAyIGZhaWxzIGJlZm9yZSB3ZSBhY3R1YWxseSBjYW4gZXhlY3V0ZSB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMDIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIyMDIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMDIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMjAyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzMDhjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTQvMjAxMS00LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgIDxpbXBvcnQgbmFtZXNwYWNlPSIyMDExLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEueHNkIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjODdiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTQvMjAxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0gPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgICAgICB0YXJnZXROYW1lc3BhY2U9IjIwMTEueHNkIiAKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgICB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIAotICAgICAgICAgeG1sbnM6aW50Zj0iMjAxMS0xLnhzZCIgCi0gICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTQvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjZiMmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTEtNCI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDExLgotICAgIEhvd2V2ZXIgdGhlIHByZXJlcXVpc2l0ZSBCUDIxMDIgZmFpbHMgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbiBleGVjdXRlIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEyMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMjIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvMjAxMS01LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvMjAxMS01LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNDU4MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01LzIwMTEtNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgICA8aW1wb3J0IG5hbWVzcGFjZT0iMjAxMS0xLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEtMS54c2QiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01LzIwMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01LzIwMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODU3ZjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS8yMDExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLSA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iMjAxMS54c2QiIAotICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgCi0gICAgICAgICB4bWxuczppbnRmPSIyMDExLTEueHNkIiAKLSAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0ibmV4dC54c2QiIHNjaGVtYUxvY2F0aW9uPSJuZXh0LnhzZCIvPgotICA8L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvbmV4dC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvbmV4dC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0M2M0NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01L25leHQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzOnNjaGVtYSAKLSAgdGFyZ2V0TmFtZXNwYWNlPSJuZXh0LnhzZCIKLSAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgeG1sbnM6cz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iIAotICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzOmFubm90YXRpb24+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDljYjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTEtNSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDExLgotICAgIEhvd2V2ZXIgdGhlIHByZXJlcXVpc2l0ZSBCUDIxMDIgZmFpbHMgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbiBleGVjdXRlIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEyMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjIwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMjIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMjAyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMS8yMDIxLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMS8yMDIxLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzNjg0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTEvMjAyMS0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzIiB0eXBlPSJzdHJpbmciLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpBZGRyZXNzIiAvPgotICA8L3dzZGw6bWVzc2FnZT4gIAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydHM9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA2NjdiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXIgZWxlbWVudCB1c2VzIHBhcnRzIGF0dHJpYnV0ZS4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvMjAyMS0yLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvMjAyMS0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NGY1MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0yLzIwMjEtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6QWRkcmVzcyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY3YjZhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXIgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgcGFydCBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zLzIwMjEtMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zLzIwMjEtMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjdjZWRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMy8yMDIxLTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotIAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3MiIHR5cGU9InN0cmluZyIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOkFkZHJlc3MiIC8+Ci0gIDwvd3NkbDptZXNzYWdlPiAgCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMy90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YjAxNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMS0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjEuCi0gICAgU29hcGJpbmQ6aGVhZGVyZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgcGFydCBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS00LzIwMjEtNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS00LzIwMjEtNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDRhYjdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNC8yMDIxLTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIgLz4KLSAgIDwvd3NkbDptZXNzYWdlPiAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydHM9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTQvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS00L3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1Y2M0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTQvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTQiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXIgZWxlbWVudCB1c2VzIHBhcnRzIGF0dHJpYnV0ZS4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTUvMjAyMS01LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTUvMjAyMS01LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNWQ3ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS01LzIwMjEtNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIiAvPgotICAgPC93c2RsOm1lc3NhZ2U+IAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS01L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YzkyOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS01L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMS01Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjEuCi0gICAgU29hcGJpbmQ6aGVhZGVyIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHBhcnQgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi8yMDIxLTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi8yMDIxLTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhODU1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTYvMjAyMS02LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTYvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2YxNTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjEtNiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIxLgotICAgIFNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHBhcnQgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMS8yMDIyLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMS8yMDIyLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEzODBjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTEvMjAyMi0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzIiB0eXBlPSJzdHJpbmciLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpBZGRyZXNzIiAvPgotICA8L3dzZGw6bWVzc2FnZT4gIAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhY2MwMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMi0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjIuCi0gICAgU29hcGJpbmQ6ZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgbmFtZSBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDMyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDMyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi8yMDIyLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi8yMDIyLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkZTFkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTIvMjAyMi0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmE4OTJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjItMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIyLgotICAgIFNvYXBiaW5kOmZhdWx0IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIyIiB0YWRJRD0iQVAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTEvMjAzMi0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTEvMjAzMi0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMjIzNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0xLzIwMzItMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6QWRkcmVzcyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCBuYW1lPSJmYXVsdDEiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOGIzMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAzMi0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjIuCi0gICAgVGhlIG5hbWUgYXR0cmlidXRlIHZhbHVlIG9uIHRoZSBTb2FwYmluZDpmYXVsdCBlbGVtZW50IGRvZXMgbm90IG1hdGNoIHRoZSBuYW1lIAotICAgIGF0dHJpYnV0ZSB2YWx1ZSBzcGVjaWZpZWQgb24gdGhlIHBhcmVudCBlbGVtZW50IHdzZGw6ZmF1bHQgZWxlbWVudC4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTIvMjAzMi0yLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTIvMjAzMi0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MmZhZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0yLzIwMzItMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIiAvPgotICAgPC93c2RsOm1lc3NhZ2U+IAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IG5hbWU9ImZhdWx0MSIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzM0NTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMzItMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIyLgotICAgIFRoZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBvbiB0aGUgU29hcGJpbmQ6ZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgbmFtZSAKLSAgICBhdHRyaWJ1dGUgdmFsdWUgc3BlY2lmaWVkIG9uIHRoZSBwYXJlbnQgZWxlbWVudCB3c2RsOmZhdWx0IGVsZW1lbnQuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMzIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMzIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2stcnBjL2FkZHJlc3NCb29rLXJwYy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2stcnBjL2FkZHJlc3NCb29rLXJwYy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzc3YzEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rLXJwYy9hZGRyZXNzQm9vay1ycGMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rLXJwYy90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay1ycGMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWEyZjhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rLXJwYy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iYWRkcmVzc0Jvb2stcnBjIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCB1c2VkIGluIHRoZSBXUy1JIAotICAgIGludGVyb3BlcmFiaWxpdHkgZGVtby4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay9hZGRyZXNzQm9vay53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2svYWRkcmVzc0Jvb2sud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE0ODJkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay9hZGRyZXNzQm9vay53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YzY4YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2svdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9ImFkZHJlc3NCb29rIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCB1c2VkIGluIHRoZSBXUy1JIAotICAgIGludGVyb3BlcmFiaWxpdHkgZGVtby4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBDYXRhbG9nL3NhbXBsZUFwcENhdGFsb2cud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvc2FtcGxlQXBwQ2F0YWxvZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGMyOTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvc2FtcGxlQXBwQ2F0YWxvZy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIKLSB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotIHhtbG5zOmludGY9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAzLTA3L0NhdGFsb2cud3NkbCIKLSB4bWxuczppbXBsPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMy0wNy9DYXRhbG9nX0ltcGwud3NkbCIKLSB4bWxuczpTT0FQLUVOQz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iCi0geG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIiAKLQlsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIi8+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQ2F0YWxvZ1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQ2F0YWxvZyIgYmluZGluZz0iaW50ZjpDYXRhbG9nU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9DYXRhbG9nU2VydmljZSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBDYXRhbG9nL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzA1M2EyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJzYW1wbGVBcHBDYXRhbG9nIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgdGhlIFdTLUkgU2FtcGxlIEFwcGxpY2F0aW9uIGRlbW9uc3RyYXRpbmcgYXR0YWNobWVudCBzdXBwb3J0LgotICAgIFRoaXMgc2hvdWxkIHZhbGlkYXRlIGFnYWluc3QgdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZS4KLSAgICBIb3dldmVyLCB0aGlzIHNob3VsZCBmYWlsIHRvIGNvbmZvcm0gdG8gdGhlIFdTLUkgU2ltcGxlIFNvYXAgQmluZGluZyBQcm9maWxlLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJTU0JQMjQwMyIgdGFkSUQ9IlNTQlAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcE1hbnVmYWN0dXJlci9zYW1wbGVBcHBNYW51ZmFjdHVyZXIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcE1hbnVmYWN0dXJlci9zYW1wbGVBcHBNYW51ZmFjdHVyZXIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkMDY3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBNYW51ZmFjdHVyZXIvc2FtcGxlQXBwTWFudWZhY3R1cmVyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08d3NkbDpkZWZpbml0aW9ucyAKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0JeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6U09BUC1FTkM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLQl4bWxuczppbXBsPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXJfSW1wbC53c2RsIiAKLQl4bWxuczppbnRmPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIgCi0JeG1sbnM6Y3Q9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTA4L0NvbmZpZ3VyYXRpb24ueHNkIiAKLQl4bWxuczpjZmc9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTA4L0NvbmZpZ3VyYXRpb24ud3NkbCIKLQl4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotCi0gICA8d3NkbDppbXBvcnQgbG9jYXRpb249Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTEwL01hbnVmYWN0dXJlci53c2RsIiAKLSAgIAkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIvPgotICAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvQ29uZmlndXJhdGlvbi53c2RsIgotCQlsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvQ29uZmlndXJhdGlvbi53c2RsIi8+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iVGVzdFNlcnZpY2UiPgotICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJpbnRmOk1hbnVmYWN0dXJlclNvYXBCaW5kaW5nIiBuYW1lPSJUZXN0UG9ydCI+Ci0gICAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL1Rlc3RTZXJ2aWNlIi8+Ci0gICAgICA8L3dzZGw6cG9ydD4KLSAgIDwvd3NkbDpzZXJ2aWNlPgotCi08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwTWFudWZhY3R1cmVyL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcE1hbnVmYWN0dXJlci90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YzlmMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwTWFudWZhY3R1cmVyL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0ic2FtcGxlQXBwTWFudWZhY3R1cmVyIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgdGhlIFdTLUkgU2FtcGxlIEFwcGxpY2F0aW9uIGV4ZXJjaXNpbmcgdGhlICBNYW51ZmFjdHVyZXIgd3NkbCAKLSAgICBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlLgotICAgIFRoaXMgc2hvdWxkIHZhbGlkYXRlIGFnYWluc3QgdGhlIFdTLUkgU2ltcGxlIFNvYXAgQmluZGluZyBQcm9maWxlLgotICAgIFRoaXMgc2hvdWxkIGFsc28gdmFsaWRhdGUgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcFdhcmVob3VzZS9zYW1wbGVBcHBXYXJlaG91c2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcFdhcmVob3VzZS9zYW1wbGVBcHBXYXJlaG91c2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJlMGQyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBXYXJlaG91c2Uvc2FtcGxlQXBwV2FyZWhvdXNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08d3NkbDpkZWZpbml0aW9ucyAKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0JeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6aW50Zj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvV2FyZWhvdXNlLndzZGwiIAotCXhtbG5zOm1hbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMTAvTWFudWZhY3R1cmVyLndzZGwiCi0JeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci0KLSAgIDx3c2RsOmltcG9ydCBsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMTAvTWFudWZhY3R1cmVyLndzZGwiIAotICAgCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTEwL01hbnVmYWN0dXJlci53c2RsIi8+Ci0gICA8d3NkbDppbXBvcnQgbG9jYXRpb249Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTA4L1dhcmVob3VzZS53c2RsIiAKLSAgIAkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0wOC9XYXJlaG91c2Uud3NkbCIvPgotCi0gICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlRlc3RTZXJ2aWNlIj4KLSAgICAgIDx3c2RsOnBvcnQgYmluZGluZz0iaW50ZjpXYXJlaG91c2VTb2FwQmluZGluZyIgbmFtZT0iVGVzdFBvcnQiPgotICAgICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9UZXN0U2VydmljZSIvPgotICAgICAgPC93c2RsOnBvcnQ+Ci0gICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBXYXJlaG91c2UvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwV2FyZWhvdXNlL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMwZGM1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBXYXJlaG91c2UvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJzYW1wbGVBcHBXYXJlaG91c2UiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyB0aGUgV1MtSSBTYW1wbGUgQXBwbGljYXRpb24gZXhlcmNpc2luZyB0aGUgIFdhcmVob3VzZSB3c2RsIAotICAgIGluIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUuCi0gICAgVGhpcyBzaG91bGQgdmFsaWRhdGUgYWdhaW5zdCB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUuCi0gICAgVGhpcyBzaG91bGQgYWxzbyB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=